From 63d32c1e63501a461175784e9be322dd9e717d16 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Wed, 5 Oct 2022 11:28:52 +0200 Subject: [PATCH 01/71] first approach --- compiled-contracts/Bridge.json | 29 ++++- compiled-contracts/BridgeMock.json | 29 ++++- contracts/Bridge.sol | 42 +++++++- contracts/mocks/BridgeMock.sol | 4 +- docs/Bridge.md | 22 +++- docs/BridgeV2.md | 166 +++++++++++++++++++++++++++++ 6 files changed, 281 insertions(+), 11 deletions(-) create mode 100644 docs/BridgeV2.md diff --git a/compiled-contracts/Bridge.json b/compiled-contracts/Bridge.json index b698724a0..2624ac6d3 100644 --- a/compiled-contracts/Bridge.json +++ b/compiled-contracts/Bridge.json @@ -168,7 +168,30 @@ "type": "bytes" } ], - "name": "bridge", + "name": "bridgeAsset", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "destinationNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "destinationAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + } + ], + "name": "bridgeMessage", "outputs": [], "stateMutability": "payable", "type": "function" @@ -503,8 +526,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50614adb806100206000396000f3fe608060405260043610620001075760003560e01c80635d5d326f1162000095578063bab161bf1162000060578063bab161bf1462000414578063d02103ca1462000449578063e73758811462000478578063ed6be5c914620004ac57600080fd5b80635d5d326f146200035e57806381b1c17414620003835780638624c35c14620003ca578063b7e6a7d414620003ef57600080fd5b80633ae0504711620000d65780633ae05047146200023a5780633da816821462000252578063508935f814620002885780635a64a1da14620002a157600080fd5b806322e95f2c146200010c5780632dfdf0b5146200015b5780632f3a3d5d1462000182578063318aee3d14620001b1575b600080fd5b3480156200011957600080fd5b50620001316200012b3660046200278e565b620004c3565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200016857600080fd5b506200017360415481565b60405190815260200162000152565b3480156200018f57600080fd5b50604754620001319073ffffffffffffffffffffffffffffffffffffffff1681565b348015620001be57600080fd5b5062000208620001d0366004620027ca565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000152565b3480156200024757600080fd5b506200017362000566565b3480156200025f57600080fd5b506200027762000271366004620028e9565b62000640565b604051901515815260200162000152565b6200029f6200029936600462002957565b62000740565b005b348015620002ae57600080fd5b5062000173620002c036600462002a13565b604080517fffffffff0000000000000000000000000000000000000000000000000000000060e098891b81166020808401919091527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006060998a1b811660248501529790991b1660388201529390951b909316603c830152605082015260708082019290925282518082039092018252609001909152805191012090565b3480156200036b57600080fd5b506200029f6200037d36600462002b2b565b62000d2a565b3480156200039057600080fd5b5062000131620003a236600462002c12565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620003d757600080fd5b506200029f620003e93660046200278e565b620017d9565b348015620003fc57600080fd5b50620001316200040e3660046200278e565b62001a57565b3480156200042157600080fd5b50604254620004339063ffffffff1681565b60405163ffffffff909116815260200162000152565b3480156200045657600080fd5b50604654620001319073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200048557600080fd5b50620002776200049736600462002c12565b60436020526000908152604090205460ff1681565b348015620004b957600080fd5b5062000433600081565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6041546000908190815b6020811015620006385781600116600103620005d057600181602081106200059c576200059c62002c2c565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000614565b8260218260208110620005e757620005e762002c2c565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b6200062160028362002c8a565b9150806200062f8162002cc6565b91505062000570565b509092915050565b60008467ffffffffffffffff8416825b6020811015620007335781600116600103620006bd578681815181106200067b576200067b62002c2c565b6020026020010151836040516020016200069f929190918252602082015260400190565b6040516020818303038152906040528051906020012092506200070f565b82878281518110620006d357620006d362002c2c565b6020026020010151604051602001620006f6929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b6200071c60028362002c8a565b9150806200072a8162002cc6565b91505062000650565b5050909114949350505050565b60425463ffffffff90811690861603620007e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff89166200089d5785341462000893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007d8565b6000915062000bb1565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200099e576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562000965573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200098b919062002d01565b5060208101518151909450925062000baf565b8415620009b357620009b38a88888862001b20565b620009d773ffffffffffffffffffffffffffffffffffffffff8b1633308a62001f4b565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000a3b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262000a83919081019062002da0565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000acf573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262000b17919081019062002da0565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000b63573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b89919062002de9565b60405160200162000b9d9392919062002e55565b60405160208183030381529060405291505b505b7ff0b963192bdc6349c23af9bd17294b4c7b9b5a73a2a9939610ea18ffd1c5dc2a82848a8a8a8660415460405162000bf0979695949392919062002e92565b60405180910390a18051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e087811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166024860152918f901b90921660388401528c901b16603c820152605081018a9052607080820193909352815180820390930183526090019052805191012062000ca4906200202f565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000ccc62000566565b6040518263ffffffff1660e01b815260040162000ceb91815260200190565b600060405180830381600087803b15801562000d0657600080fd5b505af115801562000d1b573d6000803e3d6000fd5b50505050505050505050505050565b63ffffffff891660009081526043602052604090205460ff161562000dac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d454400006044820152606401620007d8565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000e45573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e6b919062002eff565b60000362000efc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d415443480000000000000000000000000000000000006064820152608401620007d8565b60425463ffffffff85811691161462000f98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d415443480000000000000000000000000000006064820152608401620007d8565b60425463ffffffff16620010c9578051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166024860152918b901b909216603884015288901b16603c8201526050810186905260708082019390935281518082039093018352609001905280519101206200105b908b8b63ffffffff168a62000640565b620010c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007d8565b620011e6565b8051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166024860152918b901b909216603884015288901b16603c8201526050810186905260708082019390935281518082039093018352609001905280519101206200117e908b8b63ffffffff168b62000640565b620011e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007d8565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff851662001357576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001279919062002f19565b60006040518083038185875af1925050503d8060008114620012b8576040519150601f19603f3d011682016040523d82523d6000602084013e620012bd565b606091505b505090508062001350576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f45440000000000000000000000000000000000000000000000000000000000006064820152608401620007d8565b5062001762565b60425463ffffffff9081169087160362001394576200138e73ffffffffffffffffffffffffffffffffffffffff86168484620021a8565b62001762565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff1680620016c1576047546000906200147f9073ffffffffffffffffffffffffffffffffffffffff168462002200565b90506000806000868060200190518101906200149c919062002f37565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b8152600401620014e595949392919062002fb8565b600060405180830381600087803b1580156200150057600080fd5b505af115801562001515573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c86604051620016af9392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a1505050506200175f565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001737573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200175d919062002d01565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff1615808015620017fa5750600054600160ff909116105b80620018165750303b15801562001816575060005460ff166001145b620018a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007d8565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156200190357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055604051620019819062002736565b604051809103906000f0801580156200199e573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055620019ee620022e0565b801562001a5257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012060475490915062001b189073ffffffffffffffffffffffffffffffffffffffff168262002428565b949350505050565b600062001b6383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620024ac92505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf000000000000000000000000000000000000000000000000000000001462001c12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007d8565b600080808080808062001c29896004818d62003018565b81019062001c38919062003044565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462001d03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007d8565b73ffffffffffffffffffffffffffffffffffffffff8616301462001daa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007d8565b8a851462001e3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007d8565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162001ef6919062002f19565b6000604051808303816000865af19150503d806000811462001f35576040519150601f19603f3d011682016040523d82523d6000602084013e62001f3a565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052620020299085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152620024b3565b50505050565b8060016200204060206002620031f5565b6200204c919062003203565b60415410620020de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007d8565b600160416000828254620020f391906200321d565b909155505060415460005b60208110156200219d5781600116600103620021335782600182602081106200212b576200212b62002c2c565b015550505050565b6001816020811062002149576200214962002c2c565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002186919062002c8a565b915080620021948162002cc6565b915050620020fe565b5062001a5262003238565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262001a529084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162001fa6565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000560576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401620007d8565b600054610100900460ff1662002379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007d8565b60005b6200238a6001602062003203565b811015620024255760218160208110620023a857620023a862002c2c565b015460218260208110620023c057620023c062002c2c565b0154604080516020810193909352820152606001604051602081830303815290604052805190602001206021826001620023fb91906200321d565b602081106200240e576200240e62002c2c565b0155806200241c8162002cc6565b9150506200237c565b50565b6000620024a58383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b600062002517826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620025c69092919063ffffffff16565b80519091501562001a52578080602001905181019062002538919062002d01565b62001a52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007d8565b606062001b1884846000858573ffffffffffffffffffffffffffffffffffffffff85163b62002652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007d8565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516200267d919062002f19565b60006040518083038185875af1925050503d8060008114620026bc576040519150601f19603f3d011682016040523d82523d6000602084013e620026c1565b606091505b5091509150620026d3828286620026de565b979650505050505050565b60608315620026ef575081620024a5565b825115620027005782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007d8919062003267565b611829806200327d83390190565b803563ffffffff811681146200275957600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811681146200242557600080fd5b803562002759816200275e565b60008060408385031215620027a257600080fd5b620027ad8362002744565b91506020830135620027bf816200275e565b809150509250929050565b600060208284031215620027dd57600080fd5b8135620024a5816200275e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620028635762002863620027ea565b604052919050565b600082601f8301126200287d57600080fd5b8135602067ffffffffffffffff8211156200289c576200289c620027ea565b8160051b620028ad82820162002819565b9283528481018201928281019087851115620028c857600080fd5b83870192505b84831015620026d357823582529183019190830190620028ce565b600080600080608085870312156200290057600080fd5b84359350602085013567ffffffffffffffff808211156200292057600080fd5b6200292e888389016200286b565b94506040870135915080821682146200294657600080fd5b509396929550929360600135925050565b60008060008060008060a087890312156200297157600080fd5b86356200297e816200275e565b95506200298e6020880162002744565b94506040870135620029a0816200275e565b935060608701359250608087013567ffffffffffffffff80821115620029c557600080fd5b818901915089601f830112620029da57600080fd5b813581811115620029ea57600080fd5b8a6020828501011115620029fd57600080fd5b6020830194508093505050509295509295509295565b60008060008060008060c0878903121562002a2d57600080fd5b62002a388762002744565b9550602087013562002a4a816200275e565b945062002a5a6040880162002744565b9350606087013562002a6c816200275e565b9598949750929560808101359460a0909101359350915050565b600067ffffffffffffffff82111562002aa35762002aa3620027ea565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011262002ae157600080fd5b813562002af862002af28262002a86565b62002819565b81815284602083860101111562002b0e57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002b4c57600080fd5b8a3567ffffffffffffffff8082111562002b6557600080fd5b62002b738e838f016200286b565b9b5062002b8360208e0162002744565b9a5060408d0135995060608d0135985062002ba160808e0162002744565b975062002bb160a08e0162002781565b965062002bc160c08e0162002744565b955062002bd160e08e0162002781565b94506101008d013593506101208d013591508082111562002bf157600080fd5b5062002c008d828e0162002acf565b9150509295989b9194979a5092959850565b60006020828403121562002c2557600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262002cc1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362002cfa5762002cfa62002c5b565b5060010190565b60006020828403121562002d1457600080fd5b81518015158114620024a557600080fd5b60005b8381101562002d4257818101518382015260200162002d28565b83811115620020295750506000910152565b600082601f83011262002d6657600080fd5b815162002d7762002af28262002a86565b81815284602083860101111562002d8d57600080fd5b62001b1882602083016020870162002d25565b60006020828403121562002db357600080fd5b815167ffffffffffffffff81111562002dcb57600080fd5b62001b188482850162002d54565b60ff811681146200242557600080fd5b60006020828403121562002dfc57600080fd5b8151620024a58162002dd9565b6000815180845262002e2381602086016020860162002d25565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60608152600062002e6a606083018662002e09565b828103602084015262002e7e818662002e09565b91505060ff83166040830152949350505050565b600063ffffffff808a16835273ffffffffffffffffffffffffffffffffffffffff808a166020850152818916604085015280881660608501525085608084015260e060a084015262002ee860e084018662002e09565b915080841660c08401525098975050505050505050565b60006020828403121562002f1257600080fd5b5051919050565b6000825162002f2d81846020870162002d25565b9190910192915050565b60008060006060848603121562002f4d57600080fd5b835167ffffffffffffffff8082111562002f6657600080fd5b62002f748783880162002d54565b9450602086015191508082111562002f8b57600080fd5b5062002f9a8682870162002d54565b925050604084015162002fad8162002dd9565b809150509250925092565b60a08152600062002fcd60a083018862002e09565b828103602084015262002fe1818862002e09565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b600080858511156200302957600080fd5b838611156200303757600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200306057600080fd5b87356200306d816200275e565b965060208801356200307f816200275e565b9550604088013594506060880135935060808801356200309f8162002dd9565b9699959850939692959460a0840135945060c09093013592915050565b600181815b808511156200311b57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620030ff57620030ff62002c5b565b808516156200310d57918102915b93841c9390800290620030c1565b509250929050565b600082620031345750600162000560565b81620031435750600062000560565b81600181146200315c5760028114620031675762003187565b600191505062000560565b60ff8411156200317b576200317b62002c5b565b50506001821b62000560565b5060208310610133831016604e8410600b8410161715620031ac575081810a62000560565b620031b88383620030bc565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620031ed57620031ed62002c5b565b029392505050565b6000620024a5838362003123565b60008282101562003218576200321862002c5b565b500390565b6000821982111562003233576200323362002c5b565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b602081526000620024a5602083018462002e0956fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a2646970667358221220c682c391f614b82ccb707f75b48ab8543a10cdee82867a718bc7956f22464e0464736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001075760003560e01c80635d5d326f1162000095578063bab161bf1162000060578063bab161bf1462000414578063d02103ca1462000449578063e73758811462000478578063ed6be5c914620004ac57600080fd5b80635d5d326f146200035e57806381b1c17414620003835780638624c35c14620003ca578063b7e6a7d414620003ef57600080fd5b80633ae0504711620000d65780633ae05047146200023a5780633da816821462000252578063508935f814620002885780635a64a1da14620002a157600080fd5b806322e95f2c146200010c5780632dfdf0b5146200015b5780632f3a3d5d1462000182578063318aee3d14620001b1575b600080fd5b3480156200011957600080fd5b50620001316200012b3660046200278e565b620004c3565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200016857600080fd5b506200017360415481565b60405190815260200162000152565b3480156200018f57600080fd5b50604754620001319073ffffffffffffffffffffffffffffffffffffffff1681565b348015620001be57600080fd5b5062000208620001d0366004620027ca565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000152565b3480156200024757600080fd5b506200017362000566565b3480156200025f57600080fd5b506200027762000271366004620028e9565b62000640565b604051901515815260200162000152565b6200029f6200029936600462002957565b62000740565b005b348015620002ae57600080fd5b5062000173620002c036600462002a13565b604080517fffffffff0000000000000000000000000000000000000000000000000000000060e098891b81166020808401919091527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006060998a1b811660248501529790991b1660388201529390951b909316603c830152605082015260708082019290925282518082039092018252609001909152805191012090565b3480156200036b57600080fd5b506200029f6200037d36600462002b2b565b62000d2a565b3480156200039057600080fd5b5062000131620003a236600462002c12565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620003d757600080fd5b506200029f620003e93660046200278e565b620017d9565b348015620003fc57600080fd5b50620001316200040e3660046200278e565b62001a57565b3480156200042157600080fd5b50604254620004339063ffffffff1681565b60405163ffffffff909116815260200162000152565b3480156200045657600080fd5b50604654620001319073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200048557600080fd5b50620002776200049736600462002c12565b60436020526000908152604090205460ff1681565b348015620004b957600080fd5b5062000433600081565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6041546000908190815b6020811015620006385781600116600103620005d057600181602081106200059c576200059c62002c2c565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000614565b8260218260208110620005e757620005e762002c2c565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b6200062160028362002c8a565b9150806200062f8162002cc6565b91505062000570565b509092915050565b60008467ffffffffffffffff8416825b6020811015620007335781600116600103620006bd578681815181106200067b576200067b62002c2c565b6020026020010151836040516020016200069f929190918252602082015260400190565b6040516020818303038152906040528051906020012092506200070f565b82878281518110620006d357620006d362002c2c565b6020026020010151604051602001620006f6929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b6200071c60028362002c8a565b9150806200072a8162002cc6565b91505062000650565b5050909114949350505050565b60425463ffffffff90811690861603620007e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff89166200089d5785341462000893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007d8565b6000915062000bb1565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200099e576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562000965573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200098b919062002d01565b5060208101518151909450925062000baf565b8415620009b357620009b38a88888862001b20565b620009d773ffffffffffffffffffffffffffffffffffffffff8b1633308a62001f4b565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000a3b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262000a83919081019062002da0565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000acf573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262000b17919081019062002da0565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000b63573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b89919062002de9565b60405160200162000b9d9392919062002e55565b60405160208183030381529060405291505b505b7ff0b963192bdc6349c23af9bd17294b4c7b9b5a73a2a9939610ea18ffd1c5dc2a82848a8a8a8660415460405162000bf0979695949392919062002e92565b60405180910390a18051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e087811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166024860152918f901b90921660388401528c901b16603c820152605081018a9052607080820193909352815180820390930183526090019052805191012062000ca4906200202f565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000ccc62000566565b6040518263ffffffff1660e01b815260040162000ceb91815260200190565b600060405180830381600087803b15801562000d0657600080fd5b505af115801562000d1b573d6000803e3d6000fd5b50505050505050505050505050565b63ffffffff891660009081526043602052604090205460ff161562000dac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d454400006044820152606401620007d8565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000e45573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e6b919062002eff565b60000362000efc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d415443480000000000000000000000000000000000006064820152608401620007d8565b60425463ffffffff85811691161462000f98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d415443480000000000000000000000000000006064820152608401620007d8565b60425463ffffffff16620010c9578051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166024860152918b901b909216603884015288901b16603c8201526050810186905260708082019390935281518082039093018352609001905280519101206200105b908b8b63ffffffff168a62000640565b620010c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007d8565b620011e6565b8051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166024860152918b901b909216603884015288901b16603c8201526050810186905260708082019390935281518082039093018352609001905280519101206200117e908b8b63ffffffff168b62000640565b620011e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007d8565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff851662001357576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001279919062002f19565b60006040518083038185875af1925050503d8060008114620012b8576040519150601f19603f3d011682016040523d82523d6000602084013e620012bd565b606091505b505090508062001350576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f45440000000000000000000000000000000000000000000000000000000000006064820152608401620007d8565b5062001762565b60425463ffffffff9081169087160362001394576200138e73ffffffffffffffffffffffffffffffffffffffff86168484620021a8565b62001762565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff1680620016c1576047546000906200147f9073ffffffffffffffffffffffffffffffffffffffff168462002200565b90506000806000868060200190518101906200149c919062002f37565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b8152600401620014e595949392919062002fb8565b600060405180830381600087803b1580156200150057600080fd5b505af115801562001515573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c86604051620016af9392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a1505050506200175f565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001737573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200175d919062002d01565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff1615808015620017fa5750600054600160ff909116105b80620018165750303b15801562001816575060005460ff166001145b620018a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007d8565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156200190357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055604051620019819062002736565b604051809103906000f0801580156200199e573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055620019ee620022e0565b801562001a5257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012060475490915062001b189073ffffffffffffffffffffffffffffffffffffffff168262002428565b949350505050565b600062001b6383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620024ac92505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf000000000000000000000000000000000000000000000000000000001462001c12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007d8565b600080808080808062001c29896004818d62003018565b81019062001c38919062003044565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462001d03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007d8565b73ffffffffffffffffffffffffffffffffffffffff8616301462001daa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007d8565b8a851462001e3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007d8565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162001ef6919062002f19565b6000604051808303816000865af19150503d806000811462001f35576040519150601f19603f3d011682016040523d82523d6000602084013e62001f3a565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052620020299085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152620024b3565b50505050565b8060016200204060206002620031f5565b6200204c919062003203565b60415410620020de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007d8565b600160416000828254620020f391906200321d565b909155505060415460005b60208110156200219d5781600116600103620021335782600182602081106200212b576200212b62002c2c565b015550505050565b6001816020811062002149576200214962002c2c565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002186919062002c8a565b915080620021948162002cc6565b915050620020fe565b5062001a5262003238565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262001a529084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162001fa6565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000560576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401620007d8565b600054610100900460ff1662002379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007d8565b60005b6200238a6001602062003203565b811015620024255760218160208110620023a857620023a862002c2c565b015460218260208110620023c057620023c062002c2c565b0154604080516020810193909352820152606001604051602081830303815290604052805190602001206021826001620023fb91906200321d565b602081106200240e576200240e62002c2c565b0155806200241c8162002cc6565b9150506200237c565b50565b6000620024a58383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b600062002517826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620025c69092919063ffffffff16565b80519091501562001a52578080602001905181019062002538919062002d01565b62001a52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007d8565b606062001b1884846000858573ffffffffffffffffffffffffffffffffffffffff85163b62002652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007d8565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516200267d919062002f19565b60006040518083038185875af1925050503d8060008114620026bc576040519150601f19603f3d011682016040523d82523d6000602084013e620026c1565b606091505b5091509150620026d3828286620026de565b979650505050505050565b60608315620026ef575081620024a5565b825115620027005782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007d8919062003267565b611829806200327d83390190565b803563ffffffff811681146200275957600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811681146200242557600080fd5b803562002759816200275e565b60008060408385031215620027a257600080fd5b620027ad8362002744565b91506020830135620027bf816200275e565b809150509250929050565b600060208284031215620027dd57600080fd5b8135620024a5816200275e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620028635762002863620027ea565b604052919050565b600082601f8301126200287d57600080fd5b8135602067ffffffffffffffff8211156200289c576200289c620027ea565b8160051b620028ad82820162002819565b9283528481018201928281019087851115620028c857600080fd5b83870192505b84831015620026d357823582529183019190830190620028ce565b600080600080608085870312156200290057600080fd5b84359350602085013567ffffffffffffffff808211156200292057600080fd5b6200292e888389016200286b565b94506040870135915080821682146200294657600080fd5b509396929550929360600135925050565b60008060008060008060a087890312156200297157600080fd5b86356200297e816200275e565b95506200298e6020880162002744565b94506040870135620029a0816200275e565b935060608701359250608087013567ffffffffffffffff80821115620029c557600080fd5b818901915089601f830112620029da57600080fd5b813581811115620029ea57600080fd5b8a6020828501011115620029fd57600080fd5b6020830194508093505050509295509295509295565b60008060008060008060c0878903121562002a2d57600080fd5b62002a388762002744565b9550602087013562002a4a816200275e565b945062002a5a6040880162002744565b9350606087013562002a6c816200275e565b9598949750929560808101359460a0909101359350915050565b600067ffffffffffffffff82111562002aa35762002aa3620027ea565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011262002ae157600080fd5b813562002af862002af28262002a86565b62002819565b81815284602083860101111562002b0e57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002b4c57600080fd5b8a3567ffffffffffffffff8082111562002b6557600080fd5b62002b738e838f016200286b565b9b5062002b8360208e0162002744565b9a5060408d0135995060608d0135985062002ba160808e0162002744565b975062002bb160a08e0162002781565b965062002bc160c08e0162002744565b955062002bd160e08e0162002781565b94506101008d013593506101208d013591508082111562002bf157600080fd5b5062002c008d828e0162002acf565b9150509295989b9194979a5092959850565b60006020828403121562002c2557600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262002cc1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362002cfa5762002cfa62002c5b565b5060010190565b60006020828403121562002d1457600080fd5b81518015158114620024a557600080fd5b60005b8381101562002d4257818101518382015260200162002d28565b83811115620020295750506000910152565b600082601f83011262002d6657600080fd5b815162002d7762002af28262002a86565b81815284602083860101111562002d8d57600080fd5b62001b1882602083016020870162002d25565b60006020828403121562002db357600080fd5b815167ffffffffffffffff81111562002dcb57600080fd5b62001b188482850162002d54565b60ff811681146200242557600080fd5b60006020828403121562002dfc57600080fd5b8151620024a58162002dd9565b6000815180845262002e2381602086016020860162002d25565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60608152600062002e6a606083018662002e09565b828103602084015262002e7e818662002e09565b91505060ff83166040830152949350505050565b600063ffffffff808a16835273ffffffffffffffffffffffffffffffffffffffff808a166020850152818916604085015280881660608501525085608084015260e060a084015262002ee860e084018662002e09565b915080841660c08401525098975050505050505050565b60006020828403121562002f1257600080fd5b5051919050565b6000825162002f2d81846020870162002d25565b9190910192915050565b60008060006060848603121562002f4d57600080fd5b835167ffffffffffffffff8082111562002f6657600080fd5b62002f748783880162002d54565b9450602086015191508082111562002f8b57600080fd5b5062002f9a8682870162002d54565b925050604084015162002fad8162002dd9565b809150509250925092565b60a08152600062002fcd60a083018862002e09565b828103602084015262002fe1818862002e09565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b600080858511156200302957600080fd5b838611156200303757600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200306057600080fd5b87356200306d816200275e565b965060208801356200307f816200275e565b9550604088013594506060880135935060808801356200309f8162002dd9565b9699959850939692959460a0840135945060c09093013592915050565b600181815b808511156200311b57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620030ff57620030ff62002c5b565b808516156200310d57918102915b93841c9390800290620030c1565b509250929050565b600082620031345750600162000560565b81620031435750600062000560565b81600181146200315c5760028114620031675762003187565b600191505062000560565b60ff8411156200317b576200317b62002c5b565b50506001821b62000560565b5060208310610133831016604e8410600b8410161715620031ac575081810a62000560565b620031b88383620030bc565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620031ed57620031ed62002c5b565b029392505050565b6000620024a5838362003123565b60008282101562003218576200321862002c5b565b500390565b6000821982111562003233576200323362002c5b565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b602081526000620024a5602083018462002e0956fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a2646970667358221220c682c391f614b82ccb707f75b48ab8543a10cdee82867a718bc7956f22464e0464736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50614d95806100206000396000f3fe608060405260043610620001245760003560e01c80635d5d326f11620000b2578063bab161bf116200007d578063d96a15f71162000060578063d96a15f71462000495578063e737588114620004ac578063ed6be5c914620004e057600080fd5b8063bab161bf1462000431578063d02103ca146200046657600080fd5b80635d5d326f146200037b57806381b1c17414620003a05780638624c35c14620003e7578063b7e6a7d4146200040c57600080fd5b8063318aee3d11620000f3578063318aee3d14620001e75780633ae0504714620002705780633da8168214620002885780635a64a1da14620002be57600080fd5b80630871e971146200012957806322e95f2c14620001425780632dfdf0b514620001915780632f3a3d5d14620001b8575b600080fd5b620001406200013a366004620029e0565b620004f7565b005b3480156200014f57600080fd5b50620001676200016136600462002a9c565b62000ae1565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200019e57600080fd5b50620001a960415481565b60405190815260200162000188565b348015620001c557600080fd5b50604754620001679073ffffffffffffffffffffffffffffffffffffffff1681565b348015620001f457600080fd5b506200023e6200020636600462002ad8565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000188565b3480156200027d57600080fd5b50620001a962000b84565b3480156200029557600080fd5b50620002ad620002a736600462002bf7565b62000c5e565b604051901515815260200162000188565b348015620002cb57600080fd5b50620001a9620002dd36600462002c65565b604080517fffffffff0000000000000000000000000000000000000000000000000000000060e098891b81166020808401919091527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006060998a1b811660248501529790991b1660388201529390951b909316603c830152605082015260708082019290925282518082039092018252609001909152805191012090565b3480156200038857600080fd5b50620001406200039a36600462002d7d565b62000d5e565b348015620003ad57600080fd5b5062000167620003bf36600462002e64565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620003f457600080fd5b50620001406200040636600462002a9c565b6200180d565b3480156200041957600080fd5b50620001676200042b36600462002a9c565b62001a8b565b3480156200043e57600080fd5b50604254620004509063ffffffff1681565b60405163ffffffff909116815260200162000188565b3480156200047357600080fd5b50604654620001679073ffffffffffffffffffffffffffffffffffffffff1681565b62000140620004a636600462002e7e565b62001b54565b348015620004b957600080fd5b50620002ad620004cb36600462002e64565b60436020526000908152604090205460ff1681565b348015620004ed57600080fd5b5062000450600081565b60425463ffffffff9081169086160362000598576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff891662000654578534146200064a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200058f565b6000915062000968565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000755576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af11580156200071c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000742919062002ee6565b5060208101518151909450925062000966565b84156200076a576200076a8a88888862001d72565b6200078e73ffffffffffffffffffffffffffffffffffffffff8b1633308a6200219d565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007f2573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200083a919081019062002f85565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000886573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620008ce919081019062002f85565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200091a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000940919062002fce565b60405160200162000954939291906200303a565b60405160208183030381529060405291505b505b7ff0b963192bdc6349c23af9bd17294b4c7b9b5a73a2a9939610ea18ffd1c5dc2a82848a8a8a86604154604051620009a7979695949392919062003077565b60405180910390a18051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e087811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166024860152918f901b90921660388401528c901b16603c820152605081018a9052607080820193909352815180820390930183526090019052805191012062000a5b9062002281565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000a8362000b84565b6040518263ffffffff1660e01b815260040162000aa291815260200190565b600060405180830381600087803b15801562000abd57600080fd5b505af115801562000ad2573d6000803e3d6000fd5b50505050505050505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6041546000908190815b602081101562000c56578160011660010362000bee576001816020811062000bba5762000bba620030e4565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000c32565b826021826020811062000c055762000c05620030e4565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b62000c3f60028362003142565b91508062000c4d816200317e565b91505062000b8e565b509092915050565b60008467ffffffffffffffff8416825b602081101562000d51578160011660010362000cdb5786818151811062000c995762000c99620030e4565b60200260200101518360405160200162000cbd929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000d2d565b8287828151811062000cf15762000cf1620030e4565b602002602001015160405160200162000d14929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000d3a60028362003142565b91508062000d48816200317e565b91505062000c6e565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000de0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d4544000060448201526064016200058f565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000e79573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e9f9190620031b9565b60000362000f30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d4154434800000000000000000000000000000000000060648201526084016200058f565b60425463ffffffff85811691161462000fcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d4154434800000000000000000000000000000060648201526084016200058f565b60425463ffffffff16620010fd578051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166024860152918b901b909216603884015288901b16603c8201526050810186905260708082019390935281518082039093018352609001905280519101206200108f908b8b63ffffffff168a62000c5e565b620010f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c494400000000000060448201526064016200058f565b6200121a565b8051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166024860152918b901b909216603884015288901b16603c820152605081018690526070808201939093528151808203909301835260900190528051910120620011b2908b8b63ffffffff168b62000c5e565b6200121a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c494400000000000060448201526064016200058f565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff85166200138b576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff8516908490604051620012ad9190620031d3565b60006040518083038185875af1925050503d8060008114620012ec576040519150601f19603f3d011682016040523d82523d6000602084013e620012f1565b606091505b505090508062001384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f454400000000000000000000000000000000000000000000000000000000000060648201526084016200058f565b5062001796565b60425463ffffffff90811690871603620013c857620013c273ffffffffffffffffffffffffffffffffffffffff86168484620023fa565b62001796565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff1680620016f557604754600090620014b39073ffffffffffffffffffffffffffffffffffffffff168462002452565b9050600080600086806020019051810190620014d09190620031f1565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b81526004016200151995949392919062003272565b600060405180830381600087803b1580156200153457600080fd5b505af115801562001549573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c86604051620016e39392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062001793565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200176b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001791919062002ee6565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff16158080156200182e5750600054600160ff909116105b806200184a5750303b1580156200184a575060005460ff166001145b620018d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200058f565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156200193757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055604051620019b59062002988565b604051809103906000f080158015620019d2573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905562001a2262002532565b801562001a8657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012060475490915062001b4c9073ffffffffffffffffffffffffffffffffffffffff16826200267a565b949350505050565b60425463ffffffff9081169084160362001bf1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200058f565b6042546041546040517ff0b963192bdc6349c23af9bd17294b4c7b9b5a73a2a9939610ea18ffd1c5dc2a9262001c3c9263ffffffff9091169160009188918891349189919062003077565b60405180910390a16042548151602080840191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811682860152600060248301529488901b9094166038850152606086901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016603c850152346050850152607080850192909252805180850390920182526090909301909252815191012062001cf29062002281565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62001d1a62000b84565b6040518263ffffffff1660e01b815260040162001d3991815260200190565b600060405180830381600087803b15801562001d5457600080fd5b505af115801562001d69573d6000803e3d6000fd5b50505050505050565b600062001db583838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620026fe92505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf000000000000000000000000000000000000000000000000000000001462001e64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200058f565b600080808080808062001e7b896004818d620032d2565b81019062001e8a9190620032fe565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462001f55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200058f565b73ffffffffffffffffffffffffffffffffffffffff8616301462001ffc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200058f565b8a85146200208d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200058f565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e1691620021489190620031d3565b6000604051808303816000865af19150503d806000811462002187576040519150601f19603f3d011682016040523d82523d6000602084013e6200218c565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526200227b9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002705565b50505050565b8060016200229260206002620034af565b6200229e9190620034bd565b6041541062002330576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200058f565b600160416000828254620023459190620034d7565b909155505060415460005b6020811015620023ef5781600116600103620023855782600182602081106200237d576200237d620030e4565b015550505050565b600181602081106200239b576200239b620030e4565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620023d8919062003142565b915080620023e6816200317e565b91505062002350565b5062001a86620034f2565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262001a869084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401620021f8565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000b7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c656400000000000000000060448201526064016200058f565b600054610100900460ff16620025cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200058f565b60005b620025dc60016020620034bd565b811015620026775760218160208110620025fa57620025fa620030e4565b015460218260208110620026125762002612620030e4565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012060218260016200264d9190620034d7565b60208110620026605762002660620030e4565b0155806200266e816200317e565b915050620025ce565b50565b6000620026f78383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b600062002769826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620028189092919063ffffffff16565b80519091501562001a8657808060200190518101906200278a919062002ee6565b62001a86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200058f565b606062001b4c84846000858573ffffffffffffffffffffffffffffffffffffffff85163b620028a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200058f565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620028cf9190620031d3565b60006040518083038185875af1925050503d80600081146200290e576040519150601f19603f3d011682016040523d82523d6000602084013e62002913565b606091505b50915091506200292582828662002930565b979650505050505050565b6060831562002941575081620026f7565b825115620029525782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200058f919062003521565b611829806200353783390190565b73ffffffffffffffffffffffffffffffffffffffff811681146200267757600080fd5b8035620029c68162002996565b919050565b803563ffffffff81168114620029c657600080fd5b60008060008060008060a08789031215620029fa57600080fd5b863562002a078162002996565b955062002a1760208801620029cb565b9450604087013562002a298162002996565b935060608701359250608087013567ffffffffffffffff8082111562002a4e57600080fd5b818901915089601f83011262002a6357600080fd5b81358181111562002a7357600080fd5b8a602082850101111562002a8657600080fd5b6020830194508093505050509295509295509295565b6000806040838503121562002ab057600080fd5b62002abb83620029cb565b9150602083013562002acd8162002996565b809150509250929050565b60006020828403121562002aeb57600080fd5b8135620026f78162002996565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171562002b715762002b7162002af8565b604052919050565b600082601f83011262002b8b57600080fd5b8135602067ffffffffffffffff82111562002baa5762002baa62002af8565b8160051b62002bbb82820162002b27565b928352848101820192828101908785111562002bd657600080fd5b83870192505b84831015620029255782358252918301919083019062002bdc565b6000806000806080858703121562002c0e57600080fd5b84359350602085013567ffffffffffffffff8082111562002c2e57600080fd5b62002c3c8883890162002b79565b945060408701359150808216821462002c5457600080fd5b509396929550929360600135925050565b60008060008060008060c0878903121562002c7f57600080fd5b62002c8a87620029cb565b9550602087013562002c9c8162002996565b945062002cac60408801620029cb565b9350606087013562002cbe8162002996565b9598949750929560808101359460a0909101359350915050565b600067ffffffffffffffff82111562002cf55762002cf562002af8565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011262002d3357600080fd5b813562002d4a62002d448262002cd8565b62002b27565b81815284602083860101111562002d6057600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002d9e57600080fd5b8a3567ffffffffffffffff8082111562002db757600080fd5b62002dc58e838f0162002b79565b9b5062002dd560208e01620029cb565b9a5060408d0135995060608d0135985062002df360808e01620029cb565b975062002e0360a08e01620029b9565b965062002e1360c08e01620029cb565b955062002e2360e08e01620029b9565b94506101008d013593506101208d013591508082111562002e4357600080fd5b5062002e528d828e0162002d21565b9150509295989b9194979a5092959850565b60006020828403121562002e7757600080fd5b5035919050565b60008060006060848603121562002e9457600080fd5b62002e9f84620029cb565b9250602084013562002eb18162002996565b9150604084013567ffffffffffffffff81111562002ece57600080fd5b62002edc8682870162002d21565b9150509250925092565b60006020828403121562002ef957600080fd5b81518015158114620026f757600080fd5b60005b8381101562002f2757818101518382015260200162002f0d565b838111156200227b5750506000910152565b600082601f83011262002f4b57600080fd5b815162002f5c62002d448262002cd8565b81815284602083860101111562002f7257600080fd5b62001b4c82602083016020870162002f0a565b60006020828403121562002f9857600080fd5b815167ffffffffffffffff81111562002fb057600080fd5b62001b4c8482850162002f39565b60ff811681146200267757600080fd5b60006020828403121562002fe157600080fd5b8151620026f78162002fbe565b600081518084526200300881602086016020860162002f0a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6060815260006200304f606083018662002fee565b828103602084015262003063818662002fee565b91505060ff83166040830152949350505050565b600063ffffffff808a16835273ffffffffffffffffffffffffffffffffffffffff808a166020850152818916604085015280881660608501525085608084015260e060a0840152620030cd60e084018662002fee565b915080841660c08401525098975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003179577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620031b257620031b262003113565b5060010190565b600060208284031215620031cc57600080fd5b5051919050565b60008251620031e781846020870162002f0a565b9190910192915050565b6000806000606084860312156200320757600080fd5b835167ffffffffffffffff808211156200322057600080fd5b6200322e8783880162002f39565b945060208601519150808211156200324557600080fd5b50620032548682870162002f39565b9250506040840151620032678162002fbe565b809150509250925092565b60a0815260006200328760a083018862002fee565b82810360208401526200329b818862002fee565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b60008085851115620032e357600080fd5b83861115620032f157600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200331a57600080fd5b8735620033278162002996565b96506020880135620033398162002996565b955060408801359450606088013593506080880135620033598162002fbe565b9699959850939692959460a0840135945060c09093013592915050565b600181815b80851115620033d557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620033b957620033b962003113565b80851615620033c757918102915b93841c93908002906200337b565b509250929050565b600082620033ee5750600162000b7e565b81620033fd5750600062000b7e565b8160018114620034165760028114620034215762003441565b600191505062000b7e565b60ff84111562003435576200343562003113565b50506001821b62000b7e565b5060208310610133831016604e8410600b841016171562003466575081810a62000b7e565b62003472838362003376565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620034a757620034a762003113565b029392505050565b6000620026f78383620033dd565b600082821015620034d257620034d262003113565b500390565b60008219821115620034ed57620034ed62003113565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b602081526000620026f7602083018462002fee56fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a26469706673582212204aca84e728b49f663f1e0cd56727fda3937ed71fae0a398ba6822c0aaa1826ec64736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001245760003560e01c80635d5d326f11620000b2578063bab161bf116200007d578063d96a15f71162000060578063d96a15f71462000495578063e737588114620004ac578063ed6be5c914620004e057600080fd5b8063bab161bf1462000431578063d02103ca146200046657600080fd5b80635d5d326f146200037b57806381b1c17414620003a05780638624c35c14620003e7578063b7e6a7d4146200040c57600080fd5b8063318aee3d11620000f3578063318aee3d14620001e75780633ae0504714620002705780633da8168214620002885780635a64a1da14620002be57600080fd5b80630871e971146200012957806322e95f2c14620001425780632dfdf0b514620001915780632f3a3d5d14620001b8575b600080fd5b620001406200013a366004620029e0565b620004f7565b005b3480156200014f57600080fd5b50620001676200016136600462002a9c565b62000ae1565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200019e57600080fd5b50620001a960415481565b60405190815260200162000188565b348015620001c557600080fd5b50604754620001679073ffffffffffffffffffffffffffffffffffffffff1681565b348015620001f457600080fd5b506200023e6200020636600462002ad8565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000188565b3480156200027d57600080fd5b50620001a962000b84565b3480156200029557600080fd5b50620002ad620002a736600462002bf7565b62000c5e565b604051901515815260200162000188565b348015620002cb57600080fd5b50620001a9620002dd36600462002c65565b604080517fffffffff0000000000000000000000000000000000000000000000000000000060e098891b81166020808401919091527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006060998a1b811660248501529790991b1660388201529390951b909316603c830152605082015260708082019290925282518082039092018252609001909152805191012090565b3480156200038857600080fd5b50620001406200039a36600462002d7d565b62000d5e565b348015620003ad57600080fd5b5062000167620003bf36600462002e64565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620003f457600080fd5b50620001406200040636600462002a9c565b6200180d565b3480156200041957600080fd5b50620001676200042b36600462002a9c565b62001a8b565b3480156200043e57600080fd5b50604254620004509063ffffffff1681565b60405163ffffffff909116815260200162000188565b3480156200047357600080fd5b50604654620001679073ffffffffffffffffffffffffffffffffffffffff1681565b62000140620004a636600462002e7e565b62001b54565b348015620004b957600080fd5b50620002ad620004cb36600462002e64565b60436020526000908152604090205460ff1681565b348015620004ed57600080fd5b5062000450600081565b60425463ffffffff9081169086160362000598576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff891662000654578534146200064a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200058f565b6000915062000968565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000755576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af11580156200071c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000742919062002ee6565b5060208101518151909450925062000966565b84156200076a576200076a8a88888862001d72565b6200078e73ffffffffffffffffffffffffffffffffffffffff8b1633308a6200219d565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007f2573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200083a919081019062002f85565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000886573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620008ce919081019062002f85565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200091a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000940919062002fce565b60405160200162000954939291906200303a565b60405160208183030381529060405291505b505b7ff0b963192bdc6349c23af9bd17294b4c7b9b5a73a2a9939610ea18ffd1c5dc2a82848a8a8a86604154604051620009a7979695949392919062003077565b60405180910390a18051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e087811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166024860152918f901b90921660388401528c901b16603c820152605081018a9052607080820193909352815180820390930183526090019052805191012062000a5b9062002281565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000a8362000b84565b6040518263ffffffff1660e01b815260040162000aa291815260200190565b600060405180830381600087803b15801562000abd57600080fd5b505af115801562000ad2573d6000803e3d6000fd5b50505050505050505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6041546000908190815b602081101562000c56578160011660010362000bee576001816020811062000bba5762000bba620030e4565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000c32565b826021826020811062000c055762000c05620030e4565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b62000c3f60028362003142565b91508062000c4d816200317e565b91505062000b8e565b509092915050565b60008467ffffffffffffffff8416825b602081101562000d51578160011660010362000cdb5786818151811062000c995762000c99620030e4565b60200260200101518360405160200162000cbd929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000d2d565b8287828151811062000cf15762000cf1620030e4565b602002602001015160405160200162000d14929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000d3a60028362003142565b91508062000d48816200317e565b91505062000c6e565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000de0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d4544000060448201526064016200058f565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000e79573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e9f9190620031b9565b60000362000f30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d4154434800000000000000000000000000000000000060648201526084016200058f565b60425463ffffffff85811691161462000fcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d4154434800000000000000000000000000000060648201526084016200058f565b60425463ffffffff16620010fd578051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166024860152918b901b909216603884015288901b16603c8201526050810186905260708082019390935281518082039093018352609001905280519101206200108f908b8b63ffffffff168a62000c5e565b620010f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c494400000000000060448201526064016200058f565b6200121a565b8051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166024860152918b901b909216603884015288901b16603c820152605081018690526070808201939093528151808203909301835260900190528051910120620011b2908b8b63ffffffff168b62000c5e565b6200121a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c494400000000000060448201526064016200058f565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff85166200138b576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff8516908490604051620012ad9190620031d3565b60006040518083038185875af1925050503d8060008114620012ec576040519150601f19603f3d011682016040523d82523d6000602084013e620012f1565b606091505b505090508062001384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f454400000000000000000000000000000000000000000000000000000000000060648201526084016200058f565b5062001796565b60425463ffffffff90811690871603620013c857620013c273ffffffffffffffffffffffffffffffffffffffff86168484620023fa565b62001796565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff1680620016f557604754600090620014b39073ffffffffffffffffffffffffffffffffffffffff168462002452565b9050600080600086806020019051810190620014d09190620031f1565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b81526004016200151995949392919062003272565b600060405180830381600087803b1580156200153457600080fd5b505af115801562001549573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c86604051620016e39392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062001793565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200176b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001791919062002ee6565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff16158080156200182e5750600054600160ff909116105b806200184a5750303b1580156200184a575060005460ff166001145b620018d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200058f565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156200193757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055604051620019b59062002988565b604051809103906000f080158015620019d2573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905562001a2262002532565b801562001a8657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012060475490915062001b4c9073ffffffffffffffffffffffffffffffffffffffff16826200267a565b949350505050565b60425463ffffffff9081169084160362001bf1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200058f565b6042546041546040517ff0b963192bdc6349c23af9bd17294b4c7b9b5a73a2a9939610ea18ffd1c5dc2a9262001c3c9263ffffffff9091169160009188918891349189919062003077565b60405180910390a16042548151602080840191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811682860152600060248301529488901b9094166038850152606086901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016603c850152346050850152607080850192909252805180850390920182526090909301909252815191012062001cf29062002281565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62001d1a62000b84565b6040518263ffffffff1660e01b815260040162001d3991815260200190565b600060405180830381600087803b15801562001d5457600080fd5b505af115801562001d69573d6000803e3d6000fd5b50505050505050565b600062001db583838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620026fe92505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf000000000000000000000000000000000000000000000000000000001462001e64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200058f565b600080808080808062001e7b896004818d620032d2565b81019062001e8a9190620032fe565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462001f55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200058f565b73ffffffffffffffffffffffffffffffffffffffff8616301462001ffc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200058f565b8a85146200208d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200058f565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e1691620021489190620031d3565b6000604051808303816000865af19150503d806000811462002187576040519150601f19603f3d011682016040523d82523d6000602084013e6200218c565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526200227b9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002705565b50505050565b8060016200229260206002620034af565b6200229e9190620034bd565b6041541062002330576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200058f565b600160416000828254620023459190620034d7565b909155505060415460005b6020811015620023ef5781600116600103620023855782600182602081106200237d576200237d620030e4565b015550505050565b600181602081106200239b576200239b620030e4565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620023d8919062003142565b915080620023e6816200317e565b91505062002350565b5062001a86620034f2565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262001a869084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401620021f8565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000b7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c656400000000000000000060448201526064016200058f565b600054610100900460ff16620025cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200058f565b60005b620025dc60016020620034bd565b811015620026775760218160208110620025fa57620025fa620030e4565b015460218260208110620026125762002612620030e4565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012060218260016200264d9190620034d7565b60208110620026605762002660620030e4565b0155806200266e816200317e565b915050620025ce565b50565b6000620026f78383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b600062002769826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620028189092919063ffffffff16565b80519091501562001a8657808060200190518101906200278a919062002ee6565b62001a86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200058f565b606062001b4c84846000858573ffffffffffffffffffffffffffffffffffffffff85163b620028a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200058f565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620028cf9190620031d3565b60006040518083038185875af1925050503d80600081146200290e576040519150601f19603f3d011682016040523d82523d6000602084013e62002913565b606091505b50915091506200292582828662002930565b979650505050505050565b6060831562002941575081620026f7565b825115620029525782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200058f919062003521565b611829806200353783390190565b73ffffffffffffffffffffffffffffffffffffffff811681146200267757600080fd5b8035620029c68162002996565b919050565b803563ffffffff81168114620029c657600080fd5b60008060008060008060a08789031215620029fa57600080fd5b863562002a078162002996565b955062002a1760208801620029cb565b9450604087013562002a298162002996565b935060608701359250608087013567ffffffffffffffff8082111562002a4e57600080fd5b818901915089601f83011262002a6357600080fd5b81358181111562002a7357600080fd5b8a602082850101111562002a8657600080fd5b6020830194508093505050509295509295509295565b6000806040838503121562002ab057600080fd5b62002abb83620029cb565b9150602083013562002acd8162002996565b809150509250929050565b60006020828403121562002aeb57600080fd5b8135620026f78162002996565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171562002b715762002b7162002af8565b604052919050565b600082601f83011262002b8b57600080fd5b8135602067ffffffffffffffff82111562002baa5762002baa62002af8565b8160051b62002bbb82820162002b27565b928352848101820192828101908785111562002bd657600080fd5b83870192505b84831015620029255782358252918301919083019062002bdc565b6000806000806080858703121562002c0e57600080fd5b84359350602085013567ffffffffffffffff8082111562002c2e57600080fd5b62002c3c8883890162002b79565b945060408701359150808216821462002c5457600080fd5b509396929550929360600135925050565b60008060008060008060c0878903121562002c7f57600080fd5b62002c8a87620029cb565b9550602087013562002c9c8162002996565b945062002cac60408801620029cb565b9350606087013562002cbe8162002996565b9598949750929560808101359460a0909101359350915050565b600067ffffffffffffffff82111562002cf55762002cf562002af8565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011262002d3357600080fd5b813562002d4a62002d448262002cd8565b62002b27565b81815284602083860101111562002d6057600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002d9e57600080fd5b8a3567ffffffffffffffff8082111562002db757600080fd5b62002dc58e838f0162002b79565b9b5062002dd560208e01620029cb565b9a5060408d0135995060608d0135985062002df360808e01620029cb565b975062002e0360a08e01620029b9565b965062002e1360c08e01620029cb565b955062002e2360e08e01620029b9565b94506101008d013593506101208d013591508082111562002e4357600080fd5b5062002e528d828e0162002d21565b9150509295989b9194979a5092959850565b60006020828403121562002e7757600080fd5b5035919050565b60008060006060848603121562002e9457600080fd5b62002e9f84620029cb565b9250602084013562002eb18162002996565b9150604084013567ffffffffffffffff81111562002ece57600080fd5b62002edc8682870162002d21565b9150509250925092565b60006020828403121562002ef957600080fd5b81518015158114620026f757600080fd5b60005b8381101562002f2757818101518382015260200162002f0d565b838111156200227b5750506000910152565b600082601f83011262002f4b57600080fd5b815162002f5c62002d448262002cd8565b81815284602083860101111562002f7257600080fd5b62001b4c82602083016020870162002f0a565b60006020828403121562002f9857600080fd5b815167ffffffffffffffff81111562002fb057600080fd5b62001b4c8482850162002f39565b60ff811681146200267757600080fd5b60006020828403121562002fe157600080fd5b8151620026f78162002fbe565b600081518084526200300881602086016020860162002f0a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6060815260006200304f606083018662002fee565b828103602084015262003063818662002fee565b91505060ff83166040830152949350505050565b600063ffffffff808a16835273ffffffffffffffffffffffffffffffffffffffff808a166020850152818916604085015280881660608501525085608084015260e060a0840152620030cd60e084018662002fee565b915080841660c08401525098975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003179577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620031b257620031b262003113565b5060010190565b600060208284031215620031cc57600080fd5b5051919050565b60008251620031e781846020870162002f0a565b9190910192915050565b6000806000606084860312156200320757600080fd5b835167ffffffffffffffff808211156200322057600080fd5b6200322e8783880162002f39565b945060208601519150808211156200324557600080fd5b50620032548682870162002f39565b9250506040840151620032678162002fbe565b809150509250925092565b60a0815260006200328760a083018862002fee565b82810360208401526200329b818862002fee565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b60008085851115620032e357600080fd5b83861115620032f157600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200331a57600080fd5b8735620033278162002996565b96506020880135620033398162002996565b955060408801359450606088013593506080880135620033598162002fbe565b9699959850939692959460a0840135945060c09093013592915050565b600181815b80851115620033d557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620033b957620033b962003113565b80851615620033c757918102915b93841c93908002906200337b565b509250929050565b600082620033ee5750600162000b7e565b81620033fd5750600062000b7e565b8160018114620034165760028114620034215762003441565b600191505062000b7e565b60ff84111562003435576200343562003113565b50506001821b62000b7e565b5060208310610133831016604e8410600b841016171562003466575081810a62000b7e565b62003472838362003376565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620034a757620034a762003113565b029392505050565b6000620026f78383620033dd565b600082821015620034d257620034d262003113565b500390565b60008219821115620034ed57620034ed62003113565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b602081526000620026f7602083018462002fee56fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a26469706673582212204aca84e728b49f663f1e0cd56727fda3937ed71fae0a398ba6822c0aaa1826ec64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/BridgeMock.json b/compiled-contracts/BridgeMock.json index 30a26fff7..181d37fb1 100644 --- a/compiled-contracts/BridgeMock.json +++ b/compiled-contracts/BridgeMock.json @@ -187,7 +187,30 @@ "type": "bytes" } ], - "name": "bridge", + "name": "bridgeAsset", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "destinationNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "destinationAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + } + ], + "name": "bridgeMessage", "outputs": [], "stateMutability": "payable", "type": "function" @@ -594,8 +617,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5061509c806100206000396000f3fe608060405260043610620001935760003560e01c8063715018a611620000db578063b7e6a7d41162000089578063e73758811162000060578063e737588114620005ab578063ed6be5c914620005df578063f2fde38b14620005f657600080fd5b8063b7e6a7d41462000522578063bab161bf1462000547578063d02103ca146200057c57600080fd5b80638624c35c11620000be5780638624c35c14620004b85780638da5cb5b14620004dd57806391e57e2d146200050a57600080fd5b8063715018a6146200045957806381b1c174146200047157600080fd5b8063318aee3d1162000145578063508935f8116200011c578063508935f814620003605780635a64a1da14620003775780635d5d326f146200043457600080fd5b8063318aee3d14620002895780633ae0504714620003125780633da81682146200032a57600080fd5b80632c3f58cd116200017a5780632c3f58cd146200020e5780632dfdf0b514620002335780632f3a3d5d146200025a57600080fd5b806322e95f2c14620001985780632b5e42e714620001e7575b600080fd5b348015620001a557600080fd5b50620001bd620001b736600462002d31565b6200061b565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015620001f457600080fd5b506200020c6200020636600462002d6d565b620006be565b005b3480156200021b57600080fd5b506200020c6200022d36600462002d87565b620006cd565b3480156200024057600080fd5b506200024b60415481565b604051908152602001620001de565b3480156200026757600080fd5b50604754620001bd9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200029657600080fd5b50620002e0620002a836600462002da5565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201620001de565b3480156200031f57600080fd5b506200024b6200070e565b3480156200033757600080fd5b506200034f6200034936600462002ec4565b620007e8565b6040519015158152602001620001de565b6200020c6200037136600462002f32565b620008e8565b3480156200038457600080fd5b506200024b6200039636600462002fee565b604080517fffffffff0000000000000000000000000000000000000000000000000000000060e098891b81166020808401919091527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006060998a1b811660248501529790991b1660388201529390951b909316603c830152605082015260708082019290925282518082039092018252609001909152805191012090565b3480156200044157600080fd5b506200020c6200045336600462003106565b620009be565b3480156200046657600080fd5b506200020c6200146d565b3480156200047e57600080fd5b50620001bd6200049036600462002d6d565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620004c557600080fd5b506200020c620004d736600462002d31565b62001485565b348015620004ea57600080fd5b50607a5473ffffffffffffffffffffffffffffffffffffffff16620001bd565b3480156200051757600080fd5b506200024b60ac5481565b3480156200052f57600080fd5b50620001bd6200054136600462002d31565b62001719565b3480156200055457600080fd5b50604254620005669063ffffffff1681565b60405163ffffffff9091168152602001620001de565b3480156200058957600080fd5b50604654620001bd9073ffffffffffffffffffffffffffffffffffffffff1681565b348015620005b857600080fd5b506200034f620005ca36600462002d6d565b60436020526000908152604090205460ff1681565b348015620005ec57600080fd5b5062000566600081565b3480156200060357600080fd5b506200020c6200061536600462002da5565b620017e2565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b620006c86200189f565b60ac55565b620006d76200189f565b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b6041546000908190815b6020811015620007e05781600116600103620007785760018160208110620007445762000744620031ed565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250620007bc565b82602182602081106200078f576200078f620031ed565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b620007c96002836200324b565b915080620007d78162003287565b91505062000718565b509092915050565b60008467ffffffffffffffff8416825b6020811015620008db57816001166001036200086557868181518110620008235762000823620031ed565b60200260200101518360405160200162000847929190918252602082015260400190565b604051602081830303815290604052805190602001209250620008b7565b828782815181106200087b576200087b620031ed565b60200260200101516040516020016200089e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620008c46002836200324b565b915080620008d28162003287565b915050620007f8565b5050909114949350505050565b60ac54341115620009a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b620009b686868686868662001922565b505050505050565b63ffffffff891660009081526043602052604090205460ff161562000a40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d4544000060448201526064016200099d565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000ad9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aff9190620032c2565b60000362000b90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d4154434800000000000000000000000000000000000060648201526084016200099d565b60425463ffffffff85811691161462000c2c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d4154434800000000000000000000000000000060648201526084016200099d565b60425463ffffffff1662000d5d578051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166024860152918b901b909216603884015288901b16603c82015260508101869052607080820193909352815180820390930183526090019052805191012062000cef908b8b63ffffffff168a620007e8565b62000d57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c494400000000000060448201526064016200099d565b62000e7a565b8051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166024860152918b901b909216603884015288901b16603c82015260508101869052607080820193909352815180820390930183526090019052805191012062000e12908b8b63ffffffff168b620007e8565b62000e7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c494400000000000060448201526064016200099d565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff851662000feb576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162000f0d91906200330b565b60006040518083038185875af1925050503d806000811462000f4c576040519150601f19603f3d011682016040523d82523d6000602084013e62000f51565b606091505b505090508062000fe4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f454400000000000000000000000000000000000000000000000000000000000060648201526084016200099d565b50620013f6565b60425463ffffffff9081169087160362001028576200102273ffffffffffffffffffffffffffffffffffffffff8616848462001f08565b620013f6565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff16806200135557604754600090620011139073ffffffffffffffffffffffffffffffffffffffff168462001fde565b905060008060008680602001905181019062001130919062003385565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b81526004016200117995949392919062003452565b600060405180830381600087803b1580156200119457600080fd5b505af1158015620011a9573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c86604051620013439392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a150505050620013f3565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620013cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013f19190620034b2565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b620014776200189f565b620014836000620020be565b565b600054610100900460ff1615808015620014a65750600054600160ff909116105b80620014c25750303b158015620014c2575060005460ff166001145b62001550576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200099d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620015af57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556040516200162d9062002cd9565b604051809103906000f0801580156200164a573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790556200169a62002135565b620016a46200227a565b6703782dace9d9000060ac5580156200171457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620017da9073ffffffffffffffffffffffffffffffffffffffff16826200231d565b949350505050565b620017ec6200189f565b73ffffffffffffffffffffffffffffffffffffffff811662001891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016200099d565b6200189c81620020be565b50565b607a5473ffffffffffffffffffffffffffffffffffffffff16331462001483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200099d565b60425463ffffffff90811690861603620019bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200099d565b600080606073ffffffffffffffffffffffffffffffffffffffff891662001a7b5785341462001a71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200099d565b6000915062001d8f565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001b7c576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562001b43573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001b699190620034b2565b5060208101518151909450925062001d8d565b841562001b915762001b918a888888620023a1565b62001bb573ffffffffffffffffffffffffffffffffffffffff8b1633308a620027cc565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001c19573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001c619190810190620034d6565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001cad573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001cf59190810190620034d6565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001d41573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001d6791906200350f565b60405160200162001d7b939291906200352f565b60405160208183030381529060405291505b505b7ff0b963192bdc6349c23af9bd17294b4c7b9b5a73a2a9939610ea18ffd1c5dc2a82848a8a8a8660415460405162001dce97969594939291906200356c565b60405180910390a18051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e087811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166024860152918f901b90921660388401528c901b16603c820152605081018a9052607080820193909352815180820390930183526090019052805191012062001e829062002832565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62001eaa6200070e565b6040518263ffffffff1660e01b815260040162001ec991815260200190565b600060405180830381600087803b15801562001ee457600080fd5b505af115801562001ef9573d6000803e3d6000fd5b50505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052620017149084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152620029ab565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff8116620006b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c656400000000000000000060448201526064016200099d565b607a805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16620021ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200099d565b60005b620021df60016020620035d9565b8110156200189c5760218160208110620021fd57620021fd620031ed565b015460218260208110620022155762002215620031ed565b0154604080516020810193909352820152606001604051602081830303815290604052805190602001206021826001620022509190620035f3565b60208110620022635762002263620031ed565b015580620022718162003287565b915050620021d1565b600054610100900460ff1662002313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200099d565b6200148362002abe565b60006200239a8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6000620023e483838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002b6292505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf000000000000000000000000000000000000000000000000000000001462002493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200099d565b6000808080808080620024aa896004818d6200360e565b810190620024b991906200363a565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462002584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200099d565b73ffffffffffffffffffffffffffffffffffffffff861630146200262b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200099d565b8a8514620026bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200099d565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e16916200277791906200330b565b6000604051808303816000865af19150503d8060008114620027b6576040519150601f19603f3d011682016040523d82523d6000602084013e620027bb565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526200282c9085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162001f5b565b50505050565b8060016200284360206002620037eb565b6200284f9190620035d9565b60415410620028e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200099d565b600160416000828254620028f69190620035f3565b909155505060415460005b6020811015620029a05781600116600103620029365782600182602081106200292e576200292e620031ed565b015550505050565b600181602081106200294c576200294c620031ed565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200298991906200324b565b915080620029978162003287565b91505062002901565b5062001714620037f9565b600062002a0f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1662002b699092919063ffffffff16565b80519091501562001714578080602001905181019062002a309190620034b2565b62001714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200099d565b600054610100900460ff1662002b57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200099d565b6200148333620020be565b6020015190565b6060620017da84846000858573ffffffffffffffffffffffffffffffffffffffff85163b62002bf5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200099d565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405162002c2091906200330b565b60006040518083038185875af1925050503d806000811462002c5f576040519150601f19603f3d011682016040523d82523d6000602084013e62002c64565b606091505b509150915062002c7682828662002c81565b979650505050505050565b6060831562002c925750816200239a565b82511562002ca35782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200099d919062003828565b611829806200383e83390190565b803563ffffffff8116811462002cfc57600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811681146200189c57600080fd5b803562002cfc8162002d01565b6000806040838503121562002d4557600080fd5b62002d508362002ce7565b9150602083013562002d628162002d01565b809150509250929050565b60006020828403121562002d8057600080fd5b5035919050565b60006020828403121562002d9a57600080fd5b6200239a8262002ce7565b60006020828403121562002db857600080fd5b81356200239a8162002d01565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171562002e3e5762002e3e62002dc5565b604052919050565b600082601f83011262002e5857600080fd5b8135602067ffffffffffffffff82111562002e775762002e7762002dc5565b8160051b62002e8882820162002df4565b928352848101820192828101908785111562002ea357600080fd5b83870192505b8483101562002c765782358252918301919083019062002ea9565b6000806000806080858703121562002edb57600080fd5b84359350602085013567ffffffffffffffff8082111562002efb57600080fd5b62002f098883890162002e46565b945060408701359150808216821462002f2157600080fd5b509396929550929360600135925050565b60008060008060008060a0878903121562002f4c57600080fd5b863562002f598162002d01565b955062002f696020880162002ce7565b9450604087013562002f7b8162002d01565b935060608701359250608087013567ffffffffffffffff8082111562002fa057600080fd5b818901915089601f83011262002fb557600080fd5b81358181111562002fc557600080fd5b8a602082850101111562002fd857600080fd5b6020830194508093505050509295509295509295565b60008060008060008060c087890312156200300857600080fd5b620030138762002ce7565b95506020870135620030258162002d01565b9450620030356040880162002ce7565b93506060870135620030478162002d01565b9598949750929560808101359460a0909101359350915050565b600067ffffffffffffffff8211156200307e576200307e62002dc5565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112620030bc57600080fd5b8135620030d3620030cd8262003061565b62002df4565b818152846020838601011115620030e957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200312757600080fd5b8a3567ffffffffffffffff808211156200314057600080fd5b6200314e8e838f0162002e46565b9b506200315e60208e0162002ce7565b9a5060408d0135995060608d013598506200317c60808e0162002ce7565b97506200318c60a08e0162002d24565b96506200319c60c08e0162002ce7565b9550620031ac60e08e0162002d24565b94506101008d013593506101208d0135915080821115620031cc57600080fd5b50620031db8d828e01620030aa565b9150509295989b9194979a5092959850565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003282577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620032bb57620032bb6200321c565b5060010190565b600060208284031215620032d557600080fd5b5051919050565b60005b83811015620032f9578181015183820152602001620032df565b838111156200282c5750506000910152565b600082516200331f818460208701620032dc565b9190910192915050565b600082601f8301126200333b57600080fd5b81516200334c620030cd8262003061565b8181528460208386010111156200336257600080fd5b620017da826020830160208701620032dc565b60ff811681146200189c57600080fd5b6000806000606084860312156200339b57600080fd5b835167ffffffffffffffff80821115620033b457600080fd5b620033c28783880162003329565b94506020860151915080821115620033d957600080fd5b50620033e88682870162003329565b9250506040840151620033fb8162003375565b809150509250925092565b6000815180845262003420816020860160208601620032dc565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60a0815260006200346760a083018862003406565b82810360208401526200347b818862003406565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b600060208284031215620034c557600080fd5b815180151581146200239a57600080fd5b600060208284031215620034e957600080fd5b815167ffffffffffffffff8111156200350157600080fd5b620017da8482850162003329565b6000602082840312156200352257600080fd5b81516200239a8162003375565b60608152600062003544606083018662003406565b828103602084015262003558818662003406565b91505060ff83166040830152949350505050565b600063ffffffff808a16835273ffffffffffffffffffffffffffffffffffffffff808a166020850152818916604085015280881660608501525085608084015260e060a0840152620035c260e084018662003406565b915080841660c08401525098975050505050505050565b600082821015620035ee57620035ee6200321c565b500390565b600082198211156200360957620036096200321c565b500190565b600080858511156200361f57600080fd5b838611156200362d57600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200365657600080fd5b8735620036638162002d01565b96506020880135620036758162002d01565b955060408801359450606088013593506080880135620036958162003375565b9699959850939692959460a0840135945060c09093013592915050565b600181815b808511156200371157817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620036f557620036f56200321c565b808516156200370357918102915b93841c9390800290620036b7565b509250929050565b6000826200372a57506001620006b8565b816200373957506000620006b8565b81600181146200375257600281146200375d576200377d565b6001915050620006b8565b60ff8411156200377157620037716200321c565b50506001821b620006b8565b5060208310610133831016604e8410600b8410161715620037a2575081810a620006b8565b620037ae8383620036b2565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620037e357620037e36200321c565b029392505050565b60006200239a838362003719565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6020815260006200239a60208301846200340656fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a264697066735822122041b81085076df150c23359ece841c1df061b92460d436c8c3820d1f9f90ca69e64736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001935760003560e01c8063715018a611620000db578063b7e6a7d41162000089578063e73758811162000060578063e737588114620005ab578063ed6be5c914620005df578063f2fde38b14620005f657600080fd5b8063b7e6a7d41462000522578063bab161bf1462000547578063d02103ca146200057c57600080fd5b80638624c35c11620000be5780638624c35c14620004b85780638da5cb5b14620004dd57806391e57e2d146200050a57600080fd5b8063715018a6146200045957806381b1c174146200047157600080fd5b8063318aee3d1162000145578063508935f8116200011c578063508935f814620003605780635a64a1da14620003775780635d5d326f146200043457600080fd5b8063318aee3d14620002895780633ae0504714620003125780633da81682146200032a57600080fd5b80632c3f58cd116200017a5780632c3f58cd146200020e5780632dfdf0b514620002335780632f3a3d5d146200025a57600080fd5b806322e95f2c14620001985780632b5e42e714620001e7575b600080fd5b348015620001a557600080fd5b50620001bd620001b736600462002d31565b6200061b565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015620001f457600080fd5b506200020c6200020636600462002d6d565b620006be565b005b3480156200021b57600080fd5b506200020c6200022d36600462002d87565b620006cd565b3480156200024057600080fd5b506200024b60415481565b604051908152602001620001de565b3480156200026757600080fd5b50604754620001bd9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200029657600080fd5b50620002e0620002a836600462002da5565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201620001de565b3480156200031f57600080fd5b506200024b6200070e565b3480156200033757600080fd5b506200034f6200034936600462002ec4565b620007e8565b6040519015158152602001620001de565b6200020c6200037136600462002f32565b620008e8565b3480156200038457600080fd5b506200024b6200039636600462002fee565b604080517fffffffff0000000000000000000000000000000000000000000000000000000060e098891b81166020808401919091527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006060998a1b811660248501529790991b1660388201529390951b909316603c830152605082015260708082019290925282518082039092018252609001909152805191012090565b3480156200044157600080fd5b506200020c6200045336600462003106565b620009be565b3480156200046657600080fd5b506200020c6200146d565b3480156200047e57600080fd5b50620001bd6200049036600462002d6d565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620004c557600080fd5b506200020c620004d736600462002d31565b62001485565b348015620004ea57600080fd5b50607a5473ffffffffffffffffffffffffffffffffffffffff16620001bd565b3480156200051757600080fd5b506200024b60ac5481565b3480156200052f57600080fd5b50620001bd6200054136600462002d31565b62001719565b3480156200055457600080fd5b50604254620005669063ffffffff1681565b60405163ffffffff9091168152602001620001de565b3480156200058957600080fd5b50604654620001bd9073ffffffffffffffffffffffffffffffffffffffff1681565b348015620005b857600080fd5b506200034f620005ca36600462002d6d565b60436020526000908152604090205460ff1681565b348015620005ec57600080fd5b5062000566600081565b3480156200060357600080fd5b506200020c6200061536600462002da5565b620017e2565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b620006c86200189f565b60ac55565b620006d76200189f565b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b6041546000908190815b6020811015620007e05781600116600103620007785760018160208110620007445762000744620031ed565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250620007bc565b82602182602081106200078f576200078f620031ed565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b620007c96002836200324b565b915080620007d78162003287565b91505062000718565b509092915050565b60008467ffffffffffffffff8416825b6020811015620008db57816001166001036200086557868181518110620008235762000823620031ed565b60200260200101518360405160200162000847929190918252602082015260400190565b604051602081830303815290604052805190602001209250620008b7565b828782815181106200087b576200087b620031ed565b60200260200101516040516020016200089e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620008c46002836200324b565b915080620008d28162003287565b915050620007f8565b5050909114949350505050565b60ac54341115620009a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b620009b686868686868662001922565b505050505050565b63ffffffff891660009081526043602052604090205460ff161562000a40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d4544000060448201526064016200099d565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000ad9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aff9190620032c2565b60000362000b90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d4154434800000000000000000000000000000000000060648201526084016200099d565b60425463ffffffff85811691161462000c2c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d4154434800000000000000000000000000000060648201526084016200099d565b60425463ffffffff1662000d5d578051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166024860152918b901b909216603884015288901b16603c82015260508101869052607080820193909352815180820390930183526090019052805191012062000cef908b8b63ffffffff168a620007e8565b62000d57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c494400000000000060448201526064016200099d565b62000e7a565b8051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166024860152918b901b909216603884015288901b16603c82015260508101869052607080820193909352815180820390930183526090019052805191012062000e12908b8b63ffffffff168b620007e8565b62000e7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c494400000000000060448201526064016200099d565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff851662000feb576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162000f0d91906200330b565b60006040518083038185875af1925050503d806000811462000f4c576040519150601f19603f3d011682016040523d82523d6000602084013e62000f51565b606091505b505090508062000fe4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f454400000000000000000000000000000000000000000000000000000000000060648201526084016200099d565b50620013f6565b60425463ffffffff9081169087160362001028576200102273ffffffffffffffffffffffffffffffffffffffff8616848462001f08565b620013f6565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff16806200135557604754600090620011139073ffffffffffffffffffffffffffffffffffffffff168462001fde565b905060008060008680602001905181019062001130919062003385565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b81526004016200117995949392919062003452565b600060405180830381600087803b1580156200119457600080fd5b505af1158015620011a9573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c86604051620013439392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a150505050620013f3565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620013cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013f19190620034b2565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b620014776200189f565b620014836000620020be565b565b600054610100900460ff1615808015620014a65750600054600160ff909116105b80620014c25750303b158015620014c2575060005460ff166001145b62001550576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200099d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620015af57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556040516200162d9062002cd9565b604051809103906000f0801580156200164a573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790556200169a62002135565b620016a46200227a565b6703782dace9d9000060ac5580156200171457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620017da9073ffffffffffffffffffffffffffffffffffffffff16826200231d565b949350505050565b620017ec6200189f565b73ffffffffffffffffffffffffffffffffffffffff811662001891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016200099d565b6200189c81620020be565b50565b607a5473ffffffffffffffffffffffffffffffffffffffff16331462001483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200099d565b60425463ffffffff90811690861603620019bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200099d565b600080606073ffffffffffffffffffffffffffffffffffffffff891662001a7b5785341462001a71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200099d565b6000915062001d8f565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001b7c576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562001b43573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001b699190620034b2565b5060208101518151909450925062001d8d565b841562001b915762001b918a888888620023a1565b62001bb573ffffffffffffffffffffffffffffffffffffffff8b1633308a620027cc565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001c19573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001c619190810190620034d6565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001cad573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001cf59190810190620034d6565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001d41573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001d6791906200350f565b60405160200162001d7b939291906200352f565b60405160208183030381529060405291505b505b7ff0b963192bdc6349c23af9bd17294b4c7b9b5a73a2a9939610ea18ffd1c5dc2a82848a8a8a8660415460405162001dce97969594939291906200356c565b60405180910390a18051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e087811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166024860152918f901b90921660388401528c901b16603c820152605081018a9052607080820193909352815180820390930183526090019052805191012062001e829062002832565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62001eaa6200070e565b6040518263ffffffff1660e01b815260040162001ec991815260200190565b600060405180830381600087803b15801562001ee457600080fd5b505af115801562001ef9573d6000803e3d6000fd5b50505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052620017149084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152620029ab565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff8116620006b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c656400000000000000000060448201526064016200099d565b607a805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16620021ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200099d565b60005b620021df60016020620035d9565b8110156200189c5760218160208110620021fd57620021fd620031ed565b015460218260208110620022155762002215620031ed565b0154604080516020810193909352820152606001604051602081830303815290604052805190602001206021826001620022509190620035f3565b60208110620022635762002263620031ed565b015580620022718162003287565b915050620021d1565b600054610100900460ff1662002313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200099d565b6200148362002abe565b60006200239a8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6000620023e483838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002b6292505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf000000000000000000000000000000000000000000000000000000001462002493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200099d565b6000808080808080620024aa896004818d6200360e565b810190620024b991906200363a565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462002584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200099d565b73ffffffffffffffffffffffffffffffffffffffff861630146200262b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200099d565b8a8514620026bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200099d565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e16916200277791906200330b565b6000604051808303816000865af19150503d8060008114620027b6576040519150601f19603f3d011682016040523d82523d6000602084013e620027bb565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526200282c9085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162001f5b565b50505050565b8060016200284360206002620037eb565b6200284f9190620035d9565b60415410620028e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200099d565b600160416000828254620028f69190620035f3565b909155505060415460005b6020811015620029a05781600116600103620029365782600182602081106200292e576200292e620031ed565b015550505050565b600181602081106200294c576200294c620031ed565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200298991906200324b565b915080620029978162003287565b91505062002901565b5062001714620037f9565b600062002a0f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1662002b699092919063ffffffff16565b80519091501562001714578080602001905181019062002a309190620034b2565b62001714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200099d565b600054610100900460ff1662002b57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200099d565b6200148333620020be565b6020015190565b6060620017da84846000858573ffffffffffffffffffffffffffffffffffffffff85163b62002bf5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200099d565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405162002c2091906200330b565b60006040518083038185875af1925050503d806000811462002c5f576040519150601f19603f3d011682016040523d82523d6000602084013e62002c64565b606091505b509150915062002c7682828662002c81565b979650505050505050565b6060831562002c925750816200239a565b82511562002ca35782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200099d919062003828565b611829806200383e83390190565b803563ffffffff8116811462002cfc57600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811681146200189c57600080fd5b803562002cfc8162002d01565b6000806040838503121562002d4557600080fd5b62002d508362002ce7565b9150602083013562002d628162002d01565b809150509250929050565b60006020828403121562002d8057600080fd5b5035919050565b60006020828403121562002d9a57600080fd5b6200239a8262002ce7565b60006020828403121562002db857600080fd5b81356200239a8162002d01565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171562002e3e5762002e3e62002dc5565b604052919050565b600082601f83011262002e5857600080fd5b8135602067ffffffffffffffff82111562002e775762002e7762002dc5565b8160051b62002e8882820162002df4565b928352848101820192828101908785111562002ea357600080fd5b83870192505b8483101562002c765782358252918301919083019062002ea9565b6000806000806080858703121562002edb57600080fd5b84359350602085013567ffffffffffffffff8082111562002efb57600080fd5b62002f098883890162002e46565b945060408701359150808216821462002f2157600080fd5b509396929550929360600135925050565b60008060008060008060a0878903121562002f4c57600080fd5b863562002f598162002d01565b955062002f696020880162002ce7565b9450604087013562002f7b8162002d01565b935060608701359250608087013567ffffffffffffffff8082111562002fa057600080fd5b818901915089601f83011262002fb557600080fd5b81358181111562002fc557600080fd5b8a602082850101111562002fd857600080fd5b6020830194508093505050509295509295509295565b60008060008060008060c087890312156200300857600080fd5b620030138762002ce7565b95506020870135620030258162002d01565b9450620030356040880162002ce7565b93506060870135620030478162002d01565b9598949750929560808101359460a0909101359350915050565b600067ffffffffffffffff8211156200307e576200307e62002dc5565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112620030bc57600080fd5b8135620030d3620030cd8262003061565b62002df4565b818152846020838601011115620030e957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200312757600080fd5b8a3567ffffffffffffffff808211156200314057600080fd5b6200314e8e838f0162002e46565b9b506200315e60208e0162002ce7565b9a5060408d0135995060608d013598506200317c60808e0162002ce7565b97506200318c60a08e0162002d24565b96506200319c60c08e0162002ce7565b9550620031ac60e08e0162002d24565b94506101008d013593506101208d0135915080821115620031cc57600080fd5b50620031db8d828e01620030aa565b9150509295989b9194979a5092959850565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003282577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620032bb57620032bb6200321c565b5060010190565b600060208284031215620032d557600080fd5b5051919050565b60005b83811015620032f9578181015183820152602001620032df565b838111156200282c5750506000910152565b600082516200331f818460208701620032dc565b9190910192915050565b600082601f8301126200333b57600080fd5b81516200334c620030cd8262003061565b8181528460208386010111156200336257600080fd5b620017da826020830160208701620032dc565b60ff811681146200189c57600080fd5b6000806000606084860312156200339b57600080fd5b835167ffffffffffffffff80821115620033b457600080fd5b620033c28783880162003329565b94506020860151915080821115620033d957600080fd5b50620033e88682870162003329565b9250506040840151620033fb8162003375565b809150509250925092565b6000815180845262003420816020860160208601620032dc565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60a0815260006200346760a083018862003406565b82810360208401526200347b818862003406565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b600060208284031215620034c557600080fd5b815180151581146200239a57600080fd5b600060208284031215620034e957600080fd5b815167ffffffffffffffff8111156200350157600080fd5b620017da8482850162003329565b6000602082840312156200352257600080fd5b81516200239a8162003375565b60608152600062003544606083018662003406565b828103602084015262003558818662003406565b91505060ff83166040830152949350505050565b600063ffffffff808a16835273ffffffffffffffffffffffffffffffffffffffff808a166020850152818916604085015280881660608501525085608084015260e060a0840152620035c260e084018662003406565b915080841660c08401525098975050505050505050565b600082821015620035ee57620035ee6200321c565b500390565b600082198211156200360957620036096200321c565b500190565b600080858511156200361f57600080fd5b838611156200362d57600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200365657600080fd5b8735620036638162002d01565b96506020880135620036758162002d01565b955060408801359450606088013593506080880135620036958162003375565b9699959850939692959460a0840135945060c09093013592915050565b600181815b808511156200371157817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620036f557620036f56200321c565b808516156200370357918102915b93841c9390800290620036b7565b509250929050565b6000826200372a57506001620006b8565b816200373957506000620006b8565b81600181146200375257600281146200375d576200377d565b6001915050620006b8565b60ff8411156200377157620037716200321c565b50506001821b620006b8565b5060208310610133831016604e8410600b8410161715620037a2575081810a620006b8565b620037ae8383620036b2565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620037e357620037e36200321c565b029392505050565b60006200239a838362003719565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6020815260006200239a60208301846200340656fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a264697066735822122041b81085076df150c23359ece841c1df061b92460d436c8c3820d1f9f90ca69e64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50615345806100206000396000f3fe6080604052600436106200019f5760003560e01c8063715018a611620000e7578063bab161bf1162000089578063e73758811162000060578063e737588114620005ce578063ed6be5c91462000602578063f2fde38b146200061957600080fd5b8063bab161bf1462000553578063d02103ca1462000588578063d96a15f714620005b757600080fd5b80638da5cb5b11620000be5780638da5cb5b14620004e957806391e57e2d1462000516578063b7e6a7d4146200052e57600080fd5b8063715018a6146200046557806381b1c174146200047d5780638624c35c14620004c457600080fd5b80632f3a3d5d11620001515780633da8168211620001285780633da81682146200034d5780635a64a1da14620003835780635d5d326f146200044057600080fd5b80632f3a3d5d146200027d578063318aee3d14620002ac5780633ae05047146200033557600080fd5b80632b5e42e711620001865780632b5e42e7146200020c5780632c3f58cd14620002315780632dfdf0b5146200025657600080fd5b80630871e97114620001a457806322e95f2c14620001bd575b600080fd5b620001bb620001b536600462002f72565b6200063e565b005b348015620001ca57600080fd5b50620001e2620001dc3660046200302e565b62000714565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200021957600080fd5b50620001bb6200022b3660046200306a565b620007b7565b3480156200023e57600080fd5b50620001bb6200025036600462003084565b620007c6565b3480156200026357600080fd5b506200026e60415481565b60405190815260200162000203565b3480156200028a57600080fd5b50604754620001e29073ffffffffffffffffffffffffffffffffffffffff1681565b348015620002b957600080fd5b5062000303620002cb366004620030a2565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000203565b3480156200034257600080fd5b506200026e62000807565b3480156200035a57600080fd5b50620003726200036c366004620031c1565b620008e1565b604051901515815260200162000203565b3480156200039057600080fd5b506200026e620003a23660046200322f565b604080517fffffffff0000000000000000000000000000000000000000000000000000000060e098891b81166020808401919091527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006060998a1b811660248501529790991b1660388201529390951b909316603c830152605082015260708082019290925282518082039092018252609001909152805191012090565b3480156200044d57600080fd5b50620001bb6200045f36600462003347565b620009e1565b3480156200047257600080fd5b50620001bb62001490565b3480156200048a57600080fd5b50620001e26200049c3660046200306a565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620004d157600080fd5b50620001bb620004e33660046200302e565b620014a8565b348015620004f657600080fd5b50607a5473ffffffffffffffffffffffffffffffffffffffff16620001e2565b3480156200052357600080fd5b506200026e60ac5481565b3480156200053b57600080fd5b50620001e26200054d3660046200302e565b6200173c565b3480156200056057600080fd5b50604254620005729063ffffffff1681565b60405163ffffffff909116815260200162000203565b3480156200059557600080fd5b50604654620001e29073ffffffffffffffffffffffffffffffffffffffff1681565b620001bb620005c83660046200342e565b62001805565b348015620005db57600080fd5b5062000372620005ed3660046200306a565b60436020526000908152604090205460ff1681565b3480156200060f57600080fd5b5062000572600081565b3480156200062657600080fd5b50620001bb62000638366004620030a2565b62001a23565b60ac54341115620006fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6200070c86868686868662001ae0565b505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b620007c1620020c6565b60ac55565b620007d0620020c6565b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b6041546000908190815b6020811015620008d957816001166001036200087157600181602081106200083d576200083d62003496565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250620008b5565b826021826020811062000888576200088862003496565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b620008c2600283620034f4565b915080620008d08162003530565b91505062000811565b509092915050565b60008467ffffffffffffffff8416825b6020811015620009d457816001166001036200095e578681815181106200091c576200091c62003496565b60200260200101518360405160200162000940929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009b0565b8287828151811062000974576200097462003496565b602002602001015160405160200162000997929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009bd600283620034f4565b915080620009cb8162003530565b915050620008f1565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000a63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d454400006044820152606401620006f3565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000afc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b2291906200356b565b60000362000bb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d415443480000000000000000000000000000000000006064820152608401620006f3565b60425463ffffffff85811691161462000c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d415443480000000000000000000000000000006064820152608401620006f3565b60425463ffffffff1662000d80578051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166024860152918b901b909216603884015288901b16603c82015260508101869052607080820193909352815180820390930183526090019052805191012062000d12908b8b63ffffffff168a620008e1565b62000d7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620006f3565b62000e9d565b8051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166024860152918b901b909216603884015288901b16603c82015260508101869052607080820193909352815180820390930183526090019052805191012062000e35908b8b63ffffffff168b620008e1565b62000e9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620006f3565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff85166200100e576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162000f309190620035b4565b60006040518083038185875af1925050503d806000811462000f6f576040519150601f19603f3d011682016040523d82523d6000602084013e62000f74565b606091505b505090508062001007576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f45440000000000000000000000000000000000000000000000000000000000006064820152608401620006f3565b5062001419565b60425463ffffffff908116908716036200104b576200104573ffffffffffffffffffffffffffffffffffffffff8616848462002149565b62001419565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff16806200137857604754600090620011369073ffffffffffffffffffffffffffffffffffffffff16846200221f565b90506000806000868060200190518101906200115391906200362e565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b81526004016200119c959493929190620036fb565b600060405180830381600087803b158015620011b757600080fd5b505af1158015620011cc573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c86604051620013669392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062001416565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620013ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200141491906200375b565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6200149a620020c6565b620014a66000620022ff565b565b600054610100900460ff1615808015620014c95750600054600160ff909116105b80620014e55750303b158015620014e5575060005460ff166001145b62001573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620006f3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620015d257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055604051620016509062002f1a565b604051809103906000f0801580156200166d573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055620016bd62002376565b620016c7620024bb565b6703782dace9d9000060ac5580156200173757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620017fd9073ffffffffffffffffffffffffffffffffffffffff16826200255e565b949350505050565b60425463ffffffff90811690841603620018a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620006f3565b6042546041546040517ff0b963192bdc6349c23af9bd17294b4c7b9b5a73a2a9939610ea18ffd1c5dc2a92620018ed9263ffffffff909116916000918891889134918991906200377f565b60405180910390a16042548151602080840191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811682860152600060248301529488901b9094166038850152606086901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016603c8501523460508501526070808501929092528051808503909201825260909093019092528151910120620019a390620025e2565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d620019cb62000807565b6040518263ffffffff1660e01b8152600401620019ea91815260200190565b600060405180830381600087803b15801562001a0557600080fd5b505af115801562001a1a573d6000803e3d6000fd5b50505050505050565b62001a2d620020c6565b73ffffffffffffffffffffffffffffffffffffffff811662001ad2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620006f3565b62001add81620022ff565b50565b60425463ffffffff9081169086160362001b7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620006f3565b600080606073ffffffffffffffffffffffffffffffffffffffff891662001c395785341462001c2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620006f3565b6000915062001f4d565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001d3a576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562001d01573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001d2791906200375b565b5060208101518151909450925062001f4b565b841562001d4f5762001d4f8a8888886200275b565b62001d7373ffffffffffffffffffffffffffffffffffffffff8b1633308a62002b86565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001dd7573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001e1f9190810190620037ec565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001e6b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001eb39190810190620037ec565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001eff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f25919062003825565b60405160200162001f399392919062003845565b60405160208183030381529060405291505b505b7ff0b963192bdc6349c23af9bd17294b4c7b9b5a73a2a9939610ea18ffd1c5dc2a82848a8a8a8660415460405162001f8c97969594939291906200377f565b60405180910390a18051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e087811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166024860152918f901b90921660388401528c901b16603c820152605081018a905260708082019390935281518082039093018352609001905280519101206200204090620025e2565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d6200206862000807565b6040518263ffffffff1660e01b81526004016200208791815260200190565b600060405180830381600087803b158015620020a257600080fd5b505af1158015620020b7573d6000803e3d6000fd5b50505050505050505050505050565b607a5473ffffffffffffffffffffffffffffffffffffffff163314620014a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006f3565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052620017379084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002bec565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff8116620007b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401620006f3565b607a805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166200240f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620006f3565b60005b620024206001602062003882565b81101562001add57602181602081106200243e576200243e62003496565b01546021826020811062002456576200245662003496565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012060218260016200249191906200389c565b60208110620024a457620024a462003496565b015580620024b28162003530565b91505062002412565b600054610100900460ff1662002554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620006f3565b620014a662002cff565b6000620025db8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b806001620025f360206002620039f0565b620025ff919062003882565b6041541062002691576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620006f3565b600160416000828254620026a691906200389c565b909155505060415460005b6020811015620027505781600116600103620026e6578260018260208110620026de57620026de62003496565b015550505050565b60018160208110620026fc57620026fc62003496565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620027399190620034f4565b915080620027478162003530565b915050620026b1565b5062001737620039fe565b60006200279e83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002da392505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf00000000000000000000000000000000000000000000000000000000146200284d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620006f3565b600080808080808062002864896004818d62003a2d565b81019062002873919062003a59565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16146200293e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620006f3565b73ffffffffffffffffffffffffffffffffffffffff86163014620029e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620006f3565b8a851462002a76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620006f3565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002b319190620035b4565b6000604051808303816000865af19150503d806000811462002b70576040519150601f19603f3d011682016040523d82523d6000602084013e62002b75565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905262002be69085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016200219c565b50505050565b600062002c50826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1662002daa9092919063ffffffff16565b80519091501562001737578080602001905181019062002c7191906200375b565b62001737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620006f3565b600054610100900460ff1662002d98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620006f3565b620014a633620022ff565b6020015190565b6060620017fd84846000858573ffffffffffffffffffffffffffffffffffffffff85163b62002e36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006f3565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405162002e619190620035b4565b60006040518083038185875af1925050503d806000811462002ea0576040519150601f19603f3d011682016040523d82523d6000602084013e62002ea5565b606091505b509150915062002eb782828662002ec2565b979650505050505050565b6060831562002ed3575081620025db565b82511562002ee45782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006f3919062003ad1565b6118298062003ae783390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462001add57600080fd5b803562002f588162002f28565b919050565b803563ffffffff8116811462002f5857600080fd5b60008060008060008060a0878903121562002f8c57600080fd5b863562002f998162002f28565b955062002fa96020880162002f5d565b9450604087013562002fbb8162002f28565b935060608701359250608087013567ffffffffffffffff8082111562002fe057600080fd5b818901915089601f83011262002ff557600080fd5b8135818111156200300557600080fd5b8a60208285010111156200301857600080fd5b6020830194508093505050509295509295509295565b600080604083850312156200304257600080fd5b6200304d8362002f5d565b915060208301356200305f8162002f28565b809150509250929050565b6000602082840312156200307d57600080fd5b5035919050565b6000602082840312156200309757600080fd5b620025db8262002f5d565b600060208284031215620030b557600080fd5b8135620025db8162002f28565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156200313b576200313b620030c2565b604052919050565b600082601f8301126200315557600080fd5b8135602067ffffffffffffffff821115620031745762003174620030c2565b8160051b62003185828201620030f1565b9283528481018201928281019087851115620031a057600080fd5b83870192505b8483101562002eb757823582529183019190830190620031a6565b60008060008060808587031215620031d857600080fd5b84359350602085013567ffffffffffffffff80821115620031f857600080fd5b620032068883890162003143565b94506040870135915080821682146200321e57600080fd5b509396929550929360600135925050565b60008060008060008060c087890312156200324957600080fd5b620032548762002f5d565b95506020870135620032668162002f28565b9450620032766040880162002f5d565b93506060870135620032888162002f28565b9598949750929560808101359460a0909101359350915050565b600067ffffffffffffffff821115620032bf57620032bf620030c2565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112620032fd57600080fd5b8135620033146200330e82620032a2565b620030f1565b8181528460208386010111156200332a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200336857600080fd5b8a3567ffffffffffffffff808211156200338157600080fd5b6200338f8e838f0162003143565b9b506200339f60208e0162002f5d565b9a5060408d0135995060608d01359850620033bd60808e0162002f5d565b9750620033cd60a08e0162002f4b565b9650620033dd60c08e0162002f5d565b9550620033ed60e08e0162002f4b565b94506101008d013593506101208d01359150808211156200340d57600080fd5b506200341c8d828e01620032eb565b9150509295989b9194979a5092959850565b6000806000606084860312156200344457600080fd5b6200344f8462002f5d565b92506020840135620034618162002f28565b9150604084013567ffffffffffffffff8111156200347e57600080fd5b6200348c86828701620032eb565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000826200352b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620035645762003564620034c5565b5060010190565b6000602082840312156200357e57600080fd5b5051919050565b60005b83811015620035a257818101518382015260200162003588565b8381111562002be65750506000910152565b60008251620035c881846020870162003585565b9190910192915050565b600082601f830112620035e457600080fd5b8151620035f56200330e82620032a2565b8181528460208386010111156200360b57600080fd5b620017fd82602083016020870162003585565b60ff8116811462001add57600080fd5b6000806000606084860312156200364457600080fd5b835167ffffffffffffffff808211156200365d57600080fd5b6200366b87838801620035d2565b945060208601519150808211156200368257600080fd5b506200369186828701620035d2565b9250506040840151620036a4816200361e565b809150509250925092565b60008151808452620036c981602086016020860162003585565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60a0815260006200371060a0830188620036af565b8281036020840152620037248188620036af565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000602082840312156200376e57600080fd5b81518015158114620025db57600080fd5b600063ffffffff808a16835273ffffffffffffffffffffffffffffffffffffffff808a166020850152818916604085015280881660608501525085608084015260e060a0840152620037d560e0840186620036af565b915080841660c08401525098975050505050505050565b600060208284031215620037ff57600080fd5b815167ffffffffffffffff8111156200381757600080fd5b620017fd84828501620035d2565b6000602082840312156200383857600080fd5b8151620025db816200361e565b6060815260006200385a6060830186620036af565b82810360208401526200386e8186620036af565b91505060ff83166040830152949350505050565b600082821015620038975762003897620034c5565b500390565b60008219821115620038b257620038b2620034c5565b500190565b600181815b808511156200391657817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620038fa57620038fa620034c5565b808516156200390857918102915b93841c9390800290620038bc565b509250929050565b6000826200392f57506001620007b1565b816200393e57506000620007b1565b8160018114620039575760028114620039625762003982565b6001915050620007b1565b60ff841115620039765762003976620034c5565b50506001821b620007b1565b5060208310610133831016604e8410600b8410161715620039a7575081810a620007b1565b620039b38383620038b7565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620039e857620039e8620034c5565b029392505050565b6000620025db83836200391e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000808585111562003a3e57600080fd5b8386111562003a4c57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003a7557600080fd5b873562003a828162002f28565b9650602088013562003a948162002f28565b95506040880135945060608801359350608088013562003ab4816200361e565b9699959850939692959460a0840135945060c09093013592915050565b602081526000620025db6020830184620036af56fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a264697066735822122018a37fb7657d795b029895949cfa8dd126ff1167bb157748993bdbcfe0285e3b64736f6c634300080f0033", + "deployedBytecode": "0x6080604052600436106200019f5760003560e01c8063715018a611620000e7578063bab161bf1162000089578063e73758811162000060578063e737588114620005ce578063ed6be5c91462000602578063f2fde38b146200061957600080fd5b8063bab161bf1462000553578063d02103ca1462000588578063d96a15f714620005b757600080fd5b80638da5cb5b11620000be5780638da5cb5b14620004e957806391e57e2d1462000516578063b7e6a7d4146200052e57600080fd5b8063715018a6146200046557806381b1c174146200047d5780638624c35c14620004c457600080fd5b80632f3a3d5d11620001515780633da8168211620001285780633da81682146200034d5780635a64a1da14620003835780635d5d326f146200044057600080fd5b80632f3a3d5d146200027d578063318aee3d14620002ac5780633ae05047146200033557600080fd5b80632b5e42e711620001865780632b5e42e7146200020c5780632c3f58cd14620002315780632dfdf0b5146200025657600080fd5b80630871e97114620001a457806322e95f2c14620001bd575b600080fd5b620001bb620001b536600462002f72565b6200063e565b005b348015620001ca57600080fd5b50620001e2620001dc3660046200302e565b62000714565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200021957600080fd5b50620001bb6200022b3660046200306a565b620007b7565b3480156200023e57600080fd5b50620001bb6200025036600462003084565b620007c6565b3480156200026357600080fd5b506200026e60415481565b60405190815260200162000203565b3480156200028a57600080fd5b50604754620001e29073ffffffffffffffffffffffffffffffffffffffff1681565b348015620002b957600080fd5b5062000303620002cb366004620030a2565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000203565b3480156200034257600080fd5b506200026e62000807565b3480156200035a57600080fd5b50620003726200036c366004620031c1565b620008e1565b604051901515815260200162000203565b3480156200039057600080fd5b506200026e620003a23660046200322f565b604080517fffffffff0000000000000000000000000000000000000000000000000000000060e098891b81166020808401919091527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006060998a1b811660248501529790991b1660388201529390951b909316603c830152605082015260708082019290925282518082039092018252609001909152805191012090565b3480156200044d57600080fd5b50620001bb6200045f36600462003347565b620009e1565b3480156200047257600080fd5b50620001bb62001490565b3480156200048a57600080fd5b50620001e26200049c3660046200306a565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620004d157600080fd5b50620001bb620004e33660046200302e565b620014a8565b348015620004f657600080fd5b50607a5473ffffffffffffffffffffffffffffffffffffffff16620001e2565b3480156200052357600080fd5b506200026e60ac5481565b3480156200053b57600080fd5b50620001e26200054d3660046200302e565b6200173c565b3480156200056057600080fd5b50604254620005729063ffffffff1681565b60405163ffffffff909116815260200162000203565b3480156200059557600080fd5b50604654620001e29073ffffffffffffffffffffffffffffffffffffffff1681565b620001bb620005c83660046200342e565b62001805565b348015620005db57600080fd5b5062000372620005ed3660046200306a565b60436020526000908152604090205460ff1681565b3480156200060f57600080fd5b5062000572600081565b3480156200062657600080fd5b50620001bb62000638366004620030a2565b62001a23565b60ac54341115620006fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6200070c86868686868662001ae0565b505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b620007c1620020c6565b60ac55565b620007d0620020c6565b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b6041546000908190815b6020811015620008d957816001166001036200087157600181602081106200083d576200083d62003496565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250620008b5565b826021826020811062000888576200088862003496565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b620008c2600283620034f4565b915080620008d08162003530565b91505062000811565b509092915050565b60008467ffffffffffffffff8416825b6020811015620009d457816001166001036200095e578681815181106200091c576200091c62003496565b60200260200101518360405160200162000940929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009b0565b8287828151811062000974576200097462003496565b602002602001015160405160200162000997929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009bd600283620034f4565b915080620009cb8162003530565b915050620008f1565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000a63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d454400006044820152606401620006f3565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000afc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b2291906200356b565b60000362000bb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d415443480000000000000000000000000000000000006064820152608401620006f3565b60425463ffffffff85811691161462000c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d415443480000000000000000000000000000006064820152608401620006f3565b60425463ffffffff1662000d80578051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166024860152918b901b909216603884015288901b16603c82015260508101869052607080820193909352815180820390930183526090019052805191012062000d12908b8b63ffffffff168a620008e1565b62000d7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620006f3565b62000e9d565b8051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166024860152918b901b909216603884015288901b16603c82015260508101869052607080820193909352815180820390930183526090019052805191012062000e35908b8b63ffffffff168b620008e1565b62000e9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620006f3565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff85166200100e576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162000f309190620035b4565b60006040518083038185875af1925050503d806000811462000f6f576040519150601f19603f3d011682016040523d82523d6000602084013e62000f74565b606091505b505090508062001007576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f45440000000000000000000000000000000000000000000000000000000000006064820152608401620006f3565b5062001419565b60425463ffffffff908116908716036200104b576200104573ffffffffffffffffffffffffffffffffffffffff8616848462002149565b62001419565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff16806200137857604754600090620011369073ffffffffffffffffffffffffffffffffffffffff16846200221f565b90506000806000868060200190518101906200115391906200362e565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b81526004016200119c959493929190620036fb565b600060405180830381600087803b158015620011b757600080fd5b505af1158015620011cc573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c86604051620013669392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062001416565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620013ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200141491906200375b565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6200149a620020c6565b620014a66000620022ff565b565b600054610100900460ff1615808015620014c95750600054600160ff909116105b80620014e55750303b158015620014e5575060005460ff166001145b62001573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620006f3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620015d257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055604051620016509062002f1a565b604051809103906000f0801580156200166d573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055620016bd62002376565b620016c7620024bb565b6703782dace9d9000060ac5580156200173757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620017fd9073ffffffffffffffffffffffffffffffffffffffff16826200255e565b949350505050565b60425463ffffffff90811690841603620018a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620006f3565b6042546041546040517ff0b963192bdc6349c23af9bd17294b4c7b9b5a73a2a9939610ea18ffd1c5dc2a92620018ed9263ffffffff909116916000918891889134918991906200377f565b60405180910390a16042548151602080840191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811682860152600060248301529488901b9094166038850152606086901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016603c8501523460508501526070808501929092528051808503909201825260909093019092528151910120620019a390620025e2565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d620019cb62000807565b6040518263ffffffff1660e01b8152600401620019ea91815260200190565b600060405180830381600087803b15801562001a0557600080fd5b505af115801562001a1a573d6000803e3d6000fd5b50505050505050565b62001a2d620020c6565b73ffffffffffffffffffffffffffffffffffffffff811662001ad2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620006f3565b62001add81620022ff565b50565b60425463ffffffff9081169086160362001b7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620006f3565b600080606073ffffffffffffffffffffffffffffffffffffffff891662001c395785341462001c2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620006f3565b6000915062001f4d565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001d3a576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562001d01573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001d2791906200375b565b5060208101518151909450925062001f4b565b841562001d4f5762001d4f8a8888886200275b565b62001d7373ffffffffffffffffffffffffffffffffffffffff8b1633308a62002b86565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001dd7573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001e1f9190810190620037ec565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001e6b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001eb39190810190620037ec565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001eff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f25919062003825565b60405160200162001f399392919062003845565b60405160208183030381529060405291505b505b7ff0b963192bdc6349c23af9bd17294b4c7b9b5a73a2a9939610ea18ffd1c5dc2a82848a8a8a8660415460405162001f8c97969594939291906200377f565b60405180910390a18051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e087811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166024860152918f901b90921660388401528c901b16603c820152605081018a905260708082019390935281518082039093018352609001905280519101206200204090620025e2565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d6200206862000807565b6040518263ffffffff1660e01b81526004016200208791815260200190565b600060405180830381600087803b158015620020a257600080fd5b505af1158015620020b7573d6000803e3d6000fd5b50505050505050505050505050565b607a5473ffffffffffffffffffffffffffffffffffffffff163314620014a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006f3565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052620017379084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002bec565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff8116620007b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401620006f3565b607a805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166200240f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620006f3565b60005b620024206001602062003882565b81101562001add57602181602081106200243e576200243e62003496565b01546021826020811062002456576200245662003496565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012060218260016200249191906200389c565b60208110620024a457620024a462003496565b015580620024b28162003530565b91505062002412565b600054610100900460ff1662002554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620006f3565b620014a662002cff565b6000620025db8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b806001620025f360206002620039f0565b620025ff919062003882565b6041541062002691576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620006f3565b600160416000828254620026a691906200389c565b909155505060415460005b6020811015620027505781600116600103620026e6578260018260208110620026de57620026de62003496565b015550505050565b60018160208110620026fc57620026fc62003496565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620027399190620034f4565b915080620027478162003530565b915050620026b1565b5062001737620039fe565b60006200279e83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002da392505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf00000000000000000000000000000000000000000000000000000000146200284d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620006f3565b600080808080808062002864896004818d62003a2d565b81019062002873919062003a59565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16146200293e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620006f3565b73ffffffffffffffffffffffffffffffffffffffff86163014620029e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620006f3565b8a851462002a76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620006f3565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002b319190620035b4565b6000604051808303816000865af19150503d806000811462002b70576040519150601f19603f3d011682016040523d82523d6000602084013e62002b75565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905262002be69085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016200219c565b50505050565b600062002c50826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1662002daa9092919063ffffffff16565b80519091501562001737578080602001905181019062002c7191906200375b565b62001737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620006f3565b600054610100900460ff1662002d98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620006f3565b620014a633620022ff565b6020015190565b6060620017fd84846000858573ffffffffffffffffffffffffffffffffffffffff85163b62002e36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006f3565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405162002e619190620035b4565b60006040518083038185875af1925050503d806000811462002ea0576040519150601f19603f3d011682016040523d82523d6000602084013e62002ea5565b606091505b509150915062002eb782828662002ec2565b979650505050505050565b6060831562002ed3575081620025db565b82511562002ee45782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006f3919062003ad1565b6118298062003ae783390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462001add57600080fd5b803562002f588162002f28565b919050565b803563ffffffff8116811462002f5857600080fd5b60008060008060008060a0878903121562002f8c57600080fd5b863562002f998162002f28565b955062002fa96020880162002f5d565b9450604087013562002fbb8162002f28565b935060608701359250608087013567ffffffffffffffff8082111562002fe057600080fd5b818901915089601f83011262002ff557600080fd5b8135818111156200300557600080fd5b8a60208285010111156200301857600080fd5b6020830194508093505050509295509295509295565b600080604083850312156200304257600080fd5b6200304d8362002f5d565b915060208301356200305f8162002f28565b809150509250929050565b6000602082840312156200307d57600080fd5b5035919050565b6000602082840312156200309757600080fd5b620025db8262002f5d565b600060208284031215620030b557600080fd5b8135620025db8162002f28565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156200313b576200313b620030c2565b604052919050565b600082601f8301126200315557600080fd5b8135602067ffffffffffffffff821115620031745762003174620030c2565b8160051b62003185828201620030f1565b9283528481018201928281019087851115620031a057600080fd5b83870192505b8483101562002eb757823582529183019190830190620031a6565b60008060008060808587031215620031d857600080fd5b84359350602085013567ffffffffffffffff80821115620031f857600080fd5b620032068883890162003143565b94506040870135915080821682146200321e57600080fd5b509396929550929360600135925050565b60008060008060008060c087890312156200324957600080fd5b620032548762002f5d565b95506020870135620032668162002f28565b9450620032766040880162002f5d565b93506060870135620032888162002f28565b9598949750929560808101359460a0909101359350915050565b600067ffffffffffffffff821115620032bf57620032bf620030c2565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112620032fd57600080fd5b8135620033146200330e82620032a2565b620030f1565b8181528460208386010111156200332a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200336857600080fd5b8a3567ffffffffffffffff808211156200338157600080fd5b6200338f8e838f0162003143565b9b506200339f60208e0162002f5d565b9a5060408d0135995060608d01359850620033bd60808e0162002f5d565b9750620033cd60a08e0162002f4b565b9650620033dd60c08e0162002f5d565b9550620033ed60e08e0162002f4b565b94506101008d013593506101208d01359150808211156200340d57600080fd5b506200341c8d828e01620032eb565b9150509295989b9194979a5092959850565b6000806000606084860312156200344457600080fd5b6200344f8462002f5d565b92506020840135620034618162002f28565b9150604084013567ffffffffffffffff8111156200347e57600080fd5b6200348c86828701620032eb565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000826200352b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620035645762003564620034c5565b5060010190565b6000602082840312156200357e57600080fd5b5051919050565b60005b83811015620035a257818101518382015260200162003588565b8381111562002be65750506000910152565b60008251620035c881846020870162003585565b9190910192915050565b600082601f830112620035e457600080fd5b8151620035f56200330e82620032a2565b8181528460208386010111156200360b57600080fd5b620017fd82602083016020870162003585565b60ff8116811462001add57600080fd5b6000806000606084860312156200364457600080fd5b835167ffffffffffffffff808211156200365d57600080fd5b6200366b87838801620035d2565b945060208601519150808211156200368257600080fd5b506200369186828701620035d2565b9250506040840151620036a4816200361e565b809150509250925092565b60008151808452620036c981602086016020860162003585565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60a0815260006200371060a0830188620036af565b8281036020840152620037248188620036af565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000602082840312156200376e57600080fd5b81518015158114620025db57600080fd5b600063ffffffff808a16835273ffffffffffffffffffffffffffffffffffffffff808a166020850152818916604085015280881660608501525085608084015260e060a0840152620037d560e0840186620036af565b915080841660c08401525098975050505050505050565b600060208284031215620037ff57600080fd5b815167ffffffffffffffff8111156200381757600080fd5b620017fd84828501620035d2565b6000602082840312156200383857600080fd5b8151620025db816200361e565b6060815260006200385a6060830186620036af565b82810360208401526200386e8186620036af565b91505060ff83166040830152949350505050565b600082821015620038975762003897620034c5565b500390565b60008219821115620038b257620038b2620034c5565b500190565b600181815b808511156200391657817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620038fa57620038fa620034c5565b808516156200390857918102915b93841c9390800290620038bc565b509250929050565b6000826200392f57506001620007b1565b816200393e57506000620007b1565b8160018114620039575760028114620039625762003982565b6001915050620007b1565b60ff841115620039765762003976620034c5565b50506001821b620007b1565b5060208310610133831016604e8410600b8410161715620039a7575081810a620007b1565b620039b38383620038b7565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620039e857620039e8620034c5565b029392505050565b6000620025db83836200391e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000808585111562003a3e57600080fd5b8386111562003a4c57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003a7557600080fd5b873562003a828162002f28565b9650602088013562003a948162002f28565b95506040880135945060608801359350608088013562003ab4816200361e565b9699959850939692959460a0840135945060c09093013592915050565b602081526000620025db6020830184620036af56fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a264697066735822122018a37fb7657d795b029895949cfa8dd126ff1167bb157748993bdbcfe0285e3b64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/Bridge.sol b/contracts/Bridge.sol index b6c6a751d..624d5dbf9 100644 --- a/contracts/Bridge.sol +++ b/contracts/Bridge.sol @@ -101,7 +101,7 @@ contract Bridge is DepositContract { * @param amount Amount of tokens * @param permitData Raw data of the call `permit` of the token */ - function bridge( + function bridgeAsset( address token, uint32 destinationNetwork, address destinationAddress, @@ -185,6 +185,46 @@ contract Bridge is DepositContract { globalExitRootManager.updateExitRoot(getDepositRoot()); } + /** + * @notice Bridge message + * @param destinationNetwork Network destination + * @param destinationAddress Address destination + * @param metadata Message metadata + */ + function bridgeMessage( + uint32 destinationNetwork, + address destinationAddress, + bytes memory metadata + ) public payable virtual { + require( + destinationNetwork != networkID, + "Bridge::bridge: DESTINATION_CANT_BE_ITSELF" + ); + + emit BridgeEvent( + networkID, + address(0), + destinationNetwork, + destinationAddress, + msg.value, + metadata, + uint32(depositCount) + ); + _deposit( + getLeafValue( + networkID, + address(0), + destinationNetwork, + destinationAddress, + msg.value, + keccak256(metadata) + ) + ); + + // Update the new exit root to the exit root manager + globalExitRootManager.updateExitRoot(getDepositRoot()); + } + /** * @notice Verify merkle proof and withdraw tokens/ether * @param smtProof Smt proof diff --git a/contracts/mocks/BridgeMock.sol b/contracts/mocks/BridgeMock.sol index edc89f76b..878915d92 100644 --- a/contracts/mocks/BridgeMock.sol +++ b/contracts/mocks/BridgeMock.sol @@ -42,7 +42,7 @@ contract BridgeMock is Bridge, OwnableUpgradeable { * @param amount Amount of tokens * @param permitData Raw data of the call `permit` of the token */ - function bridge( + function bridgeAsset( address token, uint32 destinationNetwork, address destinationAddress, @@ -53,7 +53,7 @@ contract BridgeMock is Bridge, OwnableUpgradeable { msg.value <= maxEtherBridge, "Bridge::bridge: Cannot bridge more than maxEtherBridge in internal testnet" ); - super.bridge( + super.bridgeAsset( token, destinationNetwork, destinationAddress, diff --git a/docs/Bridge.md b/docs/Bridge.md index ad5096762..2e249cb55 100644 --- a/docs/Bridge.md +++ b/docs/Bridge.md @@ -18,9 +18,9 @@ Contract responsible to manage the token interactions with other networks |`_networkID` | uint32 | networkID |`_globalExitRootManager` | contract IGlobalExitRootManager | global exit root manager address -### bridge +### bridgeAsset ```solidity - function bridge( + function bridgeAsset( address token, uint32 destinationNetwork, address destinationAddress, @@ -40,6 +40,24 @@ Deposit add a new leaf to the merkle tree |`amount` | uint256 | Amount of tokens |`permitData` | bytes | Raw data of the call `permit` of the token +### bridgeMessage +```solidity + function bridgeMessage( + uint32 destinationNetwork, + address destinationAddress, + bytes metadata + ) public +``` +Bridge message + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`destinationNetwork` | uint32 | Network destination +|`destinationAddress` | address | Address destination +|`metadata` | bytes | Message metadata + ### claim ```solidity function claim( diff --git a/docs/BridgeV2.md b/docs/BridgeV2.md new file mode 100644 index 000000000..2e249cb55 --- /dev/null +++ b/docs/BridgeV2.md @@ -0,0 +1,166 @@ +Bridge that will be deployed on both networks Ethereum and Polygon zkEVM +Contract responsible to manage the token interactions with other networks + + +## Functions +### initialize +```solidity + function initialize( + uint32 _networkID, + contract IGlobalExitRootManager _globalExitRootManager + ) public +``` + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`_networkID` | uint32 | networkID +|`_globalExitRootManager` | contract IGlobalExitRootManager | global exit root manager address + +### bridgeAsset +```solidity + function bridgeAsset( + address token, + uint32 destinationNetwork, + address destinationAddress, + uint256 amount, + bytes permitData + ) public +``` +Deposit add a new leaf to the merkle tree + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`token` | address | Token address, 0 address is reserved for ether +|`destinationNetwork` | uint32 | Network destination +|`destinationAddress` | address | Address destination +|`amount` | uint256 | Amount of tokens +|`permitData` | bytes | Raw data of the call `permit` of the token + +### bridgeMessage +```solidity + function bridgeMessage( + uint32 destinationNetwork, + address destinationAddress, + bytes metadata + ) public +``` +Bridge message + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`destinationNetwork` | uint32 | Network destination +|`destinationAddress` | address | Address destination +|`metadata` | bytes | Message metadata + +### claim +```solidity + function claim( + bytes32[] smtProof, + uint32 index, + bytes32 mainnetExitRoot, + bytes32 rollupExitRoot, + uint32 originNetwork, + address originTokenAddress, + uint32 destinationNetwork, + address destinationAddress, + uint256 amount, + bytes metadata + ) public +``` +Verify merkle proof and withdraw tokens/ether + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`smtProof` | bytes32[] | Smt proof +|`index` | uint32 | Index of the leaf +|`mainnetExitRoot` | bytes32 | Mainnet exit root +|`rollupExitRoot` | bytes32 | Rollup exit root +|`originNetwork` | uint32 | Origin network +|`originTokenAddress` | address | Origin token address, 0 address is reserved for ether +|`destinationNetwork` | uint32 | Network destination, must be 0 ( mainnet) +|`destinationAddress` | address | Address destination +|`amount` | uint256 | Amount of tokens +|`metadata` | bytes | abi encoded metadata if any, empty otherwise + +### precalculatedWrapperAddress +```solidity + function precalculatedWrapperAddress( + uint32 originNetwork, + address originTokenAddress + ) public returns (address) +``` +Returns the precalculated address of a wrapper using the token information + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`originNetwork` | uint32 | Origin network +|`originTokenAddress` | address | Origin token address, 0 address is reserved for ether + +### getTokenWrappedAddress +```solidity + function getTokenWrappedAddress( + uint32 originNetwork, + address originTokenAddress + ) public returns (address) +``` +Returns the address of a wrapper using the token information if already exist + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`originNetwork` | uint32 | Origin network +|`originTokenAddress` | address | Origin token address, 0 address is reserved for ether + +### _permit +```solidity + function _permit( + address amount, + uint256 permitData + ) internal +``` +Function to call token permit method of extended ERC20 + + @param token ERC20 token address + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`amount` | address | Quantity that is expected to be allowed +|`permitData` | uint256 | Raw data of the call `permit` of the token + +## Events +### BridgeEvent +```solidity + event BridgeEvent( + ) +``` + +Emitted when a bridge some tokens to another network + +### ClaimEvent +```solidity + event ClaimEvent( + ) +``` + +Emitted when a claim is done from another network + +### NewWrappedToken +```solidity + event NewWrappedToken( + ) +``` + +Emitted when a a new wrapped token is created + From 6fd905f5dfb3921d063f638fdf541b6f7b07f067 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Fri, 21 Oct 2022 19:49:11 +0200 Subject: [PATCH 02/71] first approach --- contracts/Bridge.sol | 134 ++++++- contracts/ProofOfEfficiency.sol | 351 ++++++++++-------- .../interfaces/IBridgeMessageReceiver.sol | 14 + contracts/lib/DepositContract.sol | 3 + contracts/mocks/DepositContractMock.sol | 3 + test/contracts/bridge.test.js | 252 +++++++++++-- test/contracts/bridgeMock.test.js | 10 +- test/contracts/depositContractMock.test.js | 23 +- 8 files changed, 589 insertions(+), 201 deletions(-) create mode 100644 contracts/interfaces/IBridgeMessageReceiver.sol diff --git a/contracts/Bridge.sol b/contracts/Bridge.sol index 624d5dbf9..b96ef5555 100644 --- a/contracts/Bridge.sol +++ b/contracts/Bridge.sol @@ -6,6 +6,7 @@ import "./lib/DepositContract.sol"; import "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol"; import "./lib/TokenWrapped.sol"; import "./interfaces/IGlobalExitRootManager.sol"; +import "./interfaces/IBridgeMessageReceiver.sol"; import "@openzeppelin/contracts-upgradeable/proxy/ClonesUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol"; @@ -28,6 +29,12 @@ contract Bridge is DepositContract { // Mainnet indentifier uint32 public constant MAINNET_NETWORK_ID = 0; + // Leaf type asset + uint8 public constant LEAF_TYPE_ASSET = 0; + + // Leaf type message + uint8 public constant LEAF_TYPE_MESSAGE = 1; + // Network identifier uint32 public networkID; @@ -64,8 +71,9 @@ contract Bridge is DepositContract { * @dev Emitted when a bridge some tokens to another network */ event BridgeEvent( + uint8 leafType, uint32 originNetwork, - address originTokenAddress, + address originAddress, uint32 destinationNetwork, address destinationAddress, uint256 amount, @@ -79,7 +87,7 @@ contract Bridge is DepositContract { event ClaimEvent( uint32 index, uint32 originNetwork, - address originTokenAddress, + address originAddress, address destinationAddress, uint256 amount ); @@ -162,6 +170,7 @@ contract Bridge is DepositContract { } emit BridgeEvent( + LEAF_TYPE_ASSET, originNetwork, originTokenAddress, destinationNetwork, @@ -172,6 +181,7 @@ contract Bridge is DepositContract { ); _deposit( getLeafValue( + LEAF_TYPE_ASSET, originNetwork, originTokenAddress, destinationNetwork, @@ -202,8 +212,9 @@ contract Bridge is DepositContract { ); emit BridgeEvent( + LEAF_TYPE_MESSAGE, networkID, - address(0), + msg.sender, destinationNetwork, destinationAddress, msg.value, @@ -212,8 +223,9 @@ contract Bridge is DepositContract { ); _deposit( getLeafValue( + LEAF_TYPE_MESSAGE, networkID, - address(0), + msg.sender, destinationNetwork, destinationAddress, msg.value, @@ -238,7 +250,7 @@ contract Bridge is DepositContract { * @param amount Amount of tokens * @param metadata abi encoded metadata if any, empty otherwise */ - function claim( + function claimAsset( bytes32[] memory smtProof, uint32 index, bytes32 mainnetExitRoot, @@ -276,6 +288,7 @@ contract Bridge is DepositContract { require( verifyMerkleProof( getLeafValue( + LEAF_TYPE_ASSET, originNetwork, originTokenAddress, destinationNetwork, @@ -294,6 +307,7 @@ contract Bridge is DepositContract { require( verifyMerkleProof( getLeafValue( + LEAF_TYPE_ASSET, originNetwork, originTokenAddress, destinationNetwork, @@ -391,6 +405,116 @@ contract Bridge is DepositContract { ); } + /** + * @notice Verify merkle proof and execute message + * @param smtProof Smt proof + * @param index Index of the leaf + * @param mainnetExitRoot Mainnet exit root + * @param rollupExitRoot Rollup exit root + * @param originNetwork Origin network + * @param originAddress Origin token address, 0 address is reserved for ether + * @param destinationNetwork Network destination, must be 0 ( mainnet) + * @param destinationAddress Address destination + * @param amount Amount of tokens + * @param metadata abi encoded metadata if any, empty otherwise + */ + function claimMessage( + bytes32[] memory smtProof, + uint32 index, + bytes32 mainnetExitRoot, + bytes32 rollupExitRoot, + uint32 originNetwork, + address originAddress, + uint32 destinationNetwork, + address destinationAddress, + uint256 amount, + bytes memory metadata + ) public { + // Should check if is a claimMessage or a claimAssetl + // Check nullifier + require( + claimNullifier[index] == false, + "Bridge::claimMessage: ALREADY_CLAIMED" + ); + + // Check that the merkle proof belongs to some global exit root + // TODO this should be a SMTproof + require( + globalExitRootManager.globalExitRootMap( + keccak256(abi.encodePacked(mainnetExitRoot, rollupExitRoot)) + ) != 0, + "Bridge::claimMessage: GLOBAL_EXIT_ROOT_DOES_NOT_MATCH" + ); + + // Destination network must be networkID + require( + destinationNetwork == networkID, + "Bridge::claimMessage: DESTINATION_NETWORK_DOES_NOT_MATCH" + ); + + if (networkID == MAINNET_NETWORK_ID) { + // Verify merkle proof using rollup exit root + require( + verifyMerkleProof( + getLeafValue( + LEAF_TYPE_MESSAGE, + originNetwork, + originAddress, + destinationNetwork, + destinationAddress, + amount, + keccak256(metadata) + ), + smtProof, + index, + rollupExitRoot + ), + "Bridge::claimMessage: SMT_INVALID" + ); + } else { + // Verify merkle proof using mainnet exit root + require( + verifyMerkleProof( + getLeafValue( + LEAF_TYPE_MESSAGE, + originNetwork, + originAddress, + destinationNetwork, + destinationAddress, + amount, + keccak256(metadata) + ), + smtProof, + index, + mainnetExitRoot + ), + "Bridge::claimMessage: SMT_INVALID" + ); + } + + // Update nullifier + claimNullifier[index] = true; + + // Execute message + // Transfer ether + /* solhint-disable avoid-low-level-calls */ + (bool success, ) = destinationAddress.call{value: amount}( + abi.encodeCall( + IBridgeMessageReceiver.onMessageReceived, + (originAddress, originNetwork, metadata) + ) + ); + require(success, "Bridge::claimMessage: MESSAGE_FAILED"); + + emit ClaimEvent( + index, + originNetwork, + originAddress, + destinationAddress, + amount + ); + } + /** * @notice Returns the precalculated address of a wrapper using the token information * @param originNetwork Origin network diff --git a/contracts/ProofOfEfficiency.sol b/contracts/ProofOfEfficiency.sol index c25a703ec..a42d29f8b 100644 --- a/contracts/ProofOfEfficiency.sol +++ b/contracts/ProofOfEfficiency.sol @@ -24,41 +24,14 @@ contract ProofOfEfficiency is Initializable { * rlp(nonce, gasprice, gasLimit, to, value, data, chainid, 0, 0,) || v || r || s * @param globalExitRoot Global exit root of the batch * @param timestamp Timestamp of the batch - * @param forceBatchesTimestamp Every element of the array indicates the timestamp of the forceBatch + * @param minForcedTimestamp Minimum timestamp of the force batch data, empty when non forced batch * that will be popped from the queue and added to the sequence */ struct BatchData { bytes transactions; bytes32 globalExitRoot; uint64 timestamp; - uint64[] forceBatchesTimestamp; - } - - /** - * @notice Struct which will be stored in the sequence mapping - * @param batchHashData Hash containing the necessary information to process a batch: - * This field will contain: keccak256(bytes transactions || bytes32 globalExitRoot || address sequencer) - * Note that in case of forceBatch, the previous hash is stored in the ForceBatches mapping, and this will remain empty - * @param timestamp Timestamp of the batch - * @param forceBatchNum Indicates which forceBatch is sequenced, 0 if it's a regular batch - */ - struct SequencedBatch { - bytes32 batchHashData; // This field will contain the hashed data including the transactions - uint64 timestamp; - uint64 forceBatchNum; - } - - /** - * @notice Struct which will be stored in the force batch mapping - * @param batchHashData Hash containing the necessary information to process a batch: - * This field will contain: keccak256(bytes transactions || bytes32 globalExitRoot || address sequencer) - * @param maticFee Matic fee that will be payed to the aggregator - * @param minTimestamp Timestamp that will be an down limit of the batch once this is added to the sequence - */ - struct ForcedBatchData { - bytes32 batchHashData; - uint256 maticFee; - uint64 minTimestamp; + uint64 minForcedTimestamp; } // Modulus zkSNARK @@ -83,14 +56,21 @@ contract ProofOfEfficiency is Initializable { uint64 public constant FORCE_BATCH_TIMEOUT = 7 days; // Byte length of the sha256 that will be used as a input of the snark - // 8 Fields * 8 Bytes (Stark input in Field Array form) + 20 bytes (aggregator address) - uint256 internal constant _SNARK_SHA_BYTES = 84; + // SHA256(oldStateRoot, newStateRoot, oldAccInputHash, newAccInputHash, newLocalExitRoot, oldNumBatch, newNumBatch, chainID, aggrAddress) + // 8 Fields * 8 Bytes (Stark input in Field Array form) * 5 (hashes), + 8 bytes * 3 (oldNumBatch, newNumBatch, chainID) + 20 bytes (aggrAddress) + uint256 internal constant _SNARK_SHA_BYTES = 364; // Queue of forced batches with their associated data - mapping(uint64 => ForcedBatchData) public forcedBatches; + // ForceBatchNum --> hashedForceBatchData + // hashedForceBatchData: hash containing the necessary information to force a batch: + // keccak256(keccak256(l2TxData), bytes32 globalExitRoot, unint64 minTimestamp) + mapping(uint64 => bytes32) public forcedBatches; // Queue of batches that defines the virtual state - mapping(uint64 => SequencedBatch) public sequencedBatches; + // SequenceBatchNum --> accInputHash + // accInputHash is a hash chain that contains all the information to process a batch: + // keccak256(bytes32 oldAccInputHash, keccak256(bytes l2TxData), bytes32 globalExitRoot, uint64 timestamp, address seqAddress) + mapping(uint64 => bytes32) public sequencedBatches; // Last sequenced timestamp uint64 public lastTimestamp; @@ -107,7 +87,7 @@ contract ProofOfEfficiency is Initializable { // Last batch verified by the aggregators uint64 public lastVerifiedBatch; - // trusted sequencer address + // Trusted sequencer address address public trustedSequencer; // Indicates whether the force batch functionality is available @@ -119,9 +99,6 @@ contract ProofOfEfficiency is Initializable { // Current state root bytes32 public currentStateRoot; // TODO should be a map stateRootMap[lastForgedBatch]??? - // Current local exit root - bytes32 public currentLocalExitRoot; // TODO should be a map stateRootMap[lastForgedBatch]??? - // Rollup verifier interface IVerifierRollup public rollupVerifier; @@ -225,9 +202,8 @@ contract ProofOfEfficiency is Initializable { } /** - * @notice Allows a sequencer to send multiple batches of L2 transactions + * @notice Allows a sequencer to send multiple batches * @param batches Struct array which the necessary data to append new batces ot the sequence - * Global exit root, timestamp and forced batches that are pop from the queue */ function sequenceBatches(BatchData[] memory batches) public @@ -235,22 +211,40 @@ contract ProofOfEfficiency is Initializable { { uint256 batchesNum = batches.length; - // Pay collateral for every batch submitted - matic.safeTransferFrom( - msg.sender, - address(this), - TRUSTED_SEQUENCER_FEE * batchesNum - ); - // Store storage variables in memory, to save gas, because will be overrided multiple times uint64 currentTimestamp = lastTimestamp; uint64 currentBatchSequenced = lastBatchSequenced; uint64 currentLastForceBatchSequenced = lastForceBatchSequenced; + bytes32 currentAccInputHash = sequencedBatches[currentBatchSequenced]; for (uint256 i = 0; i < batchesNum; i++) { // Load current sequence BatchData memory currentBatch = batches[i]; + // Check if it's a forced batch + if (currentBatch.minForcedTimestamp > 0) { + currentLastForceBatchSequenced++; + bytes32 hashedForceBatchData = keccak256( + abi.encodePacked( + keccak256(currentBatch.transactions), + currentBatch.globalExitRoot, + currentBatch.minForcedTimestamp + ) + ); + + require( + hashedForceBatchData == + forcedBatches[currentLastForceBatchSequenced], + "ProofOfEfficiency::sequenceBatches: Forced batches data must match" + ); + + // Check timestamp is bigger than min timestamp + require( + currentBatch.timestamp >= currentBatch.minForcedTimestamp, + "ProofOfEfficiency::sequenceBatches: Forced batches timestamp must be bigger or equal than min" + ); + } + // Check Batch parameters are correct require( currentBatch.timestamp >= currentTimestamp && @@ -272,53 +266,23 @@ contract ProofOfEfficiency is Initializable { "ProofOfEfficiency::sequenceBatches: Transactions bytes overflow" ); - // Update sequencedBatches mapping - currentBatchSequenced++; - sequencedBatches[currentBatchSequenced].batchHashData = keccak256( + // Calculate next acc input hash + currentAccInputHash = keccak256( abi.encodePacked( - currentBatch.transactions, + currentAccInputHash, + keccak256(currentBatch.transactions), currentBatch.globalExitRoot, + currentBatch.timestamp, msg.sender ) ); - sequencedBatches[currentBatchSequenced].timestamp = currentBatch - .timestamp; + + // Update sequencedBatches mapping + currentBatchSequenced++; + sequencedBatches[currentBatchSequenced] = currentAccInputHash; // Update timestamp currentTimestamp = currentBatch.timestamp; - - // Loop thorugh forceBatches - for ( - uint256 j = 0; - j < currentBatch.forceBatchesTimestamp.length; - j++ - ) { - currentLastForceBatchSequenced++; - - // Check timestamp is inside window - uint64 currentForcedTimestamp = currentBatch - .forceBatchesTimestamp[j]; - - require( - currentForcedTimestamp >= currentTimestamp && - currentForcedTimestamp >= - forcedBatches[currentLastForceBatchSequenced] - .minTimestamp && - currentForcedTimestamp <= block.timestamp, - "ProofOfEfficiency::sequenceBatches: Forced batches timestamp must be inside range" - ); - - currentBatchSequenced++; - // Add forceBatch to the sequence - // Instead of adding the hashData, just add a "pointer" to the forced Batch - sequencedBatches[currentBatchSequenced] - .forceBatchNum = currentLastForceBatchSequenced; - sequencedBatches[currentBatchSequenced] - .timestamp = currentForcedTimestamp; - - // Update timestamp - currentTimestamp = currentForcedTimestamp; - } } // This check is done here just once for gas saving @@ -327,72 +291,62 @@ contract ProofOfEfficiency is Initializable { "ProofOfEfficiency::sequenceBatches: Force batches overflow" ); + uint256 nonForcedBatchesSequenced = batchesNum - + (currentLastForceBatchSequenced - lastForceBatchSequenced); + // Store back the storage variables lastTimestamp = currentTimestamp; lastBatchSequenced = currentBatchSequenced; lastForceBatchSequenced = currentLastForceBatchSequenced; + // Pay collateral for every batch submitted + matic.safeTransferFrom( + msg.sender, + address(this), + TRUSTED_SEQUENCER_FEE * nonForcedBatchesSequenced + ); + emit SequenceBatches(lastBatchSequenced); } /** * @notice Allows an aggregator to verify a batch + * @param firstNumBatch First batch number that the aggregator intends to verify, used as a sanity check + * @param lastNumBatch Last batch that the aggregator intends to verify * @param newLocalExitRoot New local exit root once the batch is processed * @param newStateRoot New State root once the batch is processed - * @param numBatch Batch number that the aggregator intends to verify, used as a sanity check * @param proofA zk-snark input * @param proofB zk-snark input * @param proofC zk-snark input */ function verifyBatch( + uint64 firstNumBatch, + uint64 lastNumBatch, bytes32 newLocalExitRoot, bytes32 newStateRoot, - uint64 numBatch, uint256[2] calldata proofA, uint256[2][2] calldata proofB, uint256[2] calldata proofC ) public { // sanity check require( - numBatch == lastVerifiedBatch + 1, - "ProofOfEfficiency::verifyBatch: batch does not match" + firstNumBatch == lastVerifiedBatch + 1, + "ProofOfEfficiency::verifyBatch: old batch does not match" ); require( - numBatch <= lastBatchSequenced, + lastNumBatch <= lastBatchSequenced, "ProofOfEfficiency::verifyBatch: batch does not have been sequenced" ); - // Calculate Circuit Input - uint64 timestamp = sequencedBatches[numBatch].timestamp; - bytes32 batchHashData; - uint256 maticFee; - - // If it's a force batch, forcebatchNum indicates which one is, otherwise is a regular batch - if (sequencedBatches[numBatch].forceBatchNum == 0) { - batchHashData = sequencedBatches[numBatch].batchHashData; - maticFee = TRUSTED_SEQUENCER_FEE; - } else { - ForcedBatchData memory currentForcedBatch = forcedBatches[ - sequencedBatches[numBatch].forceBatchNum - ]; - batchHashData = currentForcedBatch.batchHashData; - maticFee = currentForcedBatch.maticFee; - } - - bytes32 inputStark = keccak256( - abi.encodePacked( - currentStateRoot, - currentLocalExitRoot, - newStateRoot, - newLocalExitRoot, - batchHashData, - numBatch, - timestamp, - chainID - ) + require( + lastNumBatch >= firstNumBatch, + "ProofOfEfficiency::verifyBatch: last numBatch must be equal or bigger than firstNumBatch" ); + bytes32 oldAccInputHash = sequencedBatches[firstNumBatch - 1]; + bytes32 newAccInputHash = sequencedBatches[lastNumBatch]; + bytes memory snarkHashBytes; assembly { // Set snarkHashBytes to the next free memory pointer @@ -408,10 +362,7 @@ contract ProofOfEfficiency is Initializable { // Set the pointer at the beginning of the byte array let ptr := add(snarkHashBytes, 32) - // store aggregator address - mstore(ptr, shl(96, caller())) // 256 - 160 = 96 - ptr := add(ptr, 20) - + // Add currentStateRoot for { let i := 0 } lt(i, 8) { @@ -422,10 +373,76 @@ contract ProofOfEfficiency is Initializable { // Then shift left 256 - 32 (224) bits to the left. // As a result the first 4 bytes will be the next ones, and the rest of the bytes will be zeroes // Finally the result is shifted 32 bits for the padding, and stores in the current position of the pointer - mstore(ptr, shr(32, shl(224, shr(mul(i, 32), inputStark)))) + mstore( + ptr, + shr( + 32, + shl(224, shr(mul(i, 32), sload(currentStateRoot.slot))) + ) + ) + ptr := add(ptr, 8) // write the next 8 bytes + } + + // Add newStateRoot + for { + let i := 0 + } lt(i, 8) { + i := add(i, 1) + } { + mstore(ptr, shr(32, shl(224, shr(mul(i, 32), newStateRoot)))) + ptr := add(ptr, 8) // write the next 8 bytes + } + + // Add oldAccInputHash + for { + let i := 0 + } lt(i, 8) { + i := add(i, 1) + } { + mstore(ptr, shr(32, shl(224, shr(mul(i, 32), oldAccInputHash)))) + ptr := add(ptr, 8) // write the next 8 bytes + } + + // Add newAccInputHash + for { + let i := 0 + } lt(i, 8) { + i := add(i, 1) + } { + mstore(ptr, shr(32, shl(224, shr(mul(i, 32), newAccInputHash)))) + ptr := add(ptr, 8) // write the next 8 bytes + } + + // Add newLocalExitRoot + for { + let i := 0 + } lt(i, 8) { + i := add(i, 1) + } { + mstore( + ptr, + shr(32, shl(224, shr(mul(i, 32), newLocalExitRoot))) + ) ptr := add(ptr, 8) // write the next 8 bytes } + + // add firstNumBatch + mstore(ptr, shl(192, firstNumBatch)) // 256 - 64 = 192 + ptr := add(ptr, 8) + + // add lastNumBatch + mstore(ptr, shl(192, lastNumBatch)) // 256 - 64 = 192 + ptr := add(ptr, 8) + + // add chainID + mstore(ptr, shl(192, sload(chainID.slot))) // 256 - 64 = 192 + ptr := add(ptr, 8) + + // add aggregator address + mstore(ptr, shl(96, caller())) // 256 - 160 = 96 + ptr := add(ptr, 20) } + // Calulate the snark input uint256 inputSnark = uint256(sha256(snarkHashBytes)) % _RFIELD; @@ -435,19 +452,20 @@ contract ProofOfEfficiency is Initializable { "ProofOfEfficiency::verifyBatch: INVALID_PROOF" ); + // Get MATIC reward + matic.safeTransfer( + msg.sender, + calculateAggregatorFee(lastNumBatch - lastVerifiedBatch) + ); + // Update state - lastVerifiedBatch++; + lastVerifiedBatch = lastNumBatch; currentStateRoot = newStateRoot; - currentLocalExitRoot = newLocalExitRoot; // Interact with globalExitRoot - globalExitRootManager.updateExitRoot(currentLocalExitRoot); - - // Get MATIC reward - matic.safeTransfer(msg.sender, maticFee); + globalExitRootManager.updateExitRoot(newLocalExitRoot); - // TODO Could delete batchData - emit VerifyBatch(numBatch, msg.sender); + emit VerifyBatch(lastNumBatch, msg.sender); } /** @@ -482,11 +500,13 @@ contract ProofOfEfficiency is Initializable { // Update forcedBatches mapping lastForceBatch++; - forcedBatches[lastForceBatch].batchHashData = keccak256( - abi.encodePacked(transactions, lastGlobalExitRoot, msg.sender) + forcedBatches[lastForceBatch] = keccak256( + abi.encodePacked( + keccak256(transactions), + lastGlobalExitRoot, + block.timestamp + ) ); - forcedBatches[lastForceBatch].maticFee = maticFee; - forcedBatches[lastForceBatch].minTimestamp = uint64(block.timestamp); // In order to avoid synch attacks, if the msg.sender is not the origin // Add the transaction bytes in the event @@ -524,34 +544,34 @@ contract ProofOfEfficiency is Initializable { "ProofOfEfficiency::sequenceForceBatch: Force batch invalid" ); - // If message sender is not the trusted sequencer, must wait the timeout - if (msg.sender != trustedSequencer) { - // The last batch will have the most restrictive timestamp - require( - forcedBatches[newLastForceBatchSequenced].minTimestamp + - FORCE_BATCH_TIMEOUT <= - block.timestamp, - "ProofOfEfficiency::sequenceForceBatch: Forced batch is not in timeout period" - ); - } + // // If message sender is not the trusted sequencer, must wait the timeout + // if (msg.sender != trustedSequencer) { + // // The last batch will have the most restrictive timestamp + // require( + // forcedBatches[newLastForceBatchSequenced].minTimestamp + + // FORCE_BATCH_TIMEOUT <= + // block.timestamp, + // "ProofOfEfficiency::sequenceForceBatch: Forced batch is not in timeout period" + // ); + // } // Store storage variables in memory, to save gas, because will be overrided multiple times uint64 currentBatchSequenced = lastBatchSequenced; uint64 currentLastForceBatchSequenced = lastForceBatchSequenced; - // Sequence force batches - for (uint256 j = 0; j < numForcedBatches; j++) { - currentLastForceBatchSequenced++; + // // Sequence force batches + // for (uint256 j = 0; j < numForcedBatches; j++) { + // currentLastForceBatchSequenced++; - // Add forceBatch to the sequence - // Instead of adding the hashData, just add a "pointer" to the forced Batch - currentBatchSequenced++; - sequencedBatches[currentBatchSequenced] - .forceBatchNum = currentLastForceBatchSequenced; - sequencedBatches[currentBatchSequenced].timestamp = uint64( - block.timestamp - ); - } + // // Add forceBatch to the sequence + // // Instead of adding the hashData, just add a "pointer" to the forced Batch + // currentBatchSequenced++; + // sequencedBatches[currentBatchSequenced] + // .forceBatchNum = currentLastForceBatchSequenced; + // sequencedBatches[currentBatchSequenced].timestamp = uint64( + // block.timestamp + // ); + // } // Store back the storage variables lastTimestamp = uint64(block.timestamp); @@ -607,4 +627,21 @@ contract ProofOfEfficiency is Initializable { function calculateForceProverFee() public view returns (uint256) { return 1 ether * uint256(1 + lastForceBatch - lastForceBatchSequenced); } + + /** + * @notice Function to calculate the fee of the aggregator depending on the batches he intend to verify + */ + function calculateAggregatorFee(uint256 batchesVerified) + public + view + returns (uint256) + { + uint256 currentBalance = matic.balanceOf(address(this)); + + // Total Batches to be verified = total Sequenced Batches - verified Batches + // total Sequenced Batches = forcedBatches to be sequenced (total forced Batches - sequenced Batches) + totalSequencedBatches + uint256 totalBatchesToVerify = ((lastForceBatch - + lastForceBatchSequenced) + lastBatchSequenced) - lastVerifiedBatch; + return currentBalance / totalBatchesToVerify; + } } diff --git a/contracts/interfaces/IBridgeMessageReceiver.sol b/contracts/interfaces/IBridgeMessageReceiver.sol new file mode 100644 index 000000000..cb9a5b3ae --- /dev/null +++ b/contracts/interfaces/IBridgeMessageReceiver.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: AGPL-3.0 + +pragma solidity 0.8.15; + +/** + * @dev Define interface verifier + */ +interface IBridgeMessageReceiver { + function onMessageReceived( + address originAddress, + uint32 originNetwork, + bytes memory data + ) external view returns (bool); +} diff --git a/contracts/lib/DepositContract.sol b/contracts/lib/DepositContract.sol index 7f2b880ff..24678d622 100644 --- a/contracts/lib/DepositContract.sol +++ b/contracts/lib/DepositContract.sol @@ -122,6 +122,7 @@ contract DepositContract is Initializable { /** * @notice Given the leaf data returns the leaf value + * @param leafType Leaf type * @param originNetwork Origin Network * @param originTokenAddress Origin token address, 0 address is reserved for ether * @param destinationNetwork Destination network @@ -130,6 +131,7 @@ contract DepositContract is Initializable { * @param metadataHash Hash of the metadata */ function getLeafValue( + uint8 leafType, uint32 originNetwork, address originTokenAddress, uint32 destinationNetwork, @@ -140,6 +142,7 @@ contract DepositContract is Initializable { return keccak256( abi.encodePacked( + leafType, originNetwork, originTokenAddress, destinationNetwork, diff --git a/contracts/mocks/DepositContractMock.sol b/contracts/mocks/DepositContractMock.sol index bf6eb946b..52437ccdd 100644 --- a/contracts/mocks/DepositContractMock.sol +++ b/contracts/mocks/DepositContractMock.sol @@ -18,6 +18,7 @@ contract DepositContractMock is DepositContract { /** * @notice Given the leaf data returns the leaf value + * @param leafType Leaf type * @param originNetwork Origin Network * @param originTokenAddress Origin token address, 0 address is reserved for ether * @param destinationNetwork Destination network @@ -26,6 +27,7 @@ contract DepositContractMock is DepositContract { * @param metadataHash Hash of the metadata */ function deposit( + uint8 leafType, uint32 originNetwork, address originTokenAddress, uint32 destinationNetwork, @@ -35,6 +37,7 @@ contract DepositContractMock is DepositContract { ) public { _deposit( getLeafValue( + leafType, originNetwork, originTokenAddress, destinationNetwork, diff --git a/test/contracts/bridge.test.js b/test/contracts/bridge.test.js index 4caeb29c9..304b3d0b7 100644 --- a/test/contracts/bridge.test.js +++ b/test/contracts/bridge.test.js @@ -36,6 +36,9 @@ describe('Bridge Contract', () => { const networkIDMainnet = 0; const networkIDRollup = 1; + const LEAF_TYPE_ASSET = 0; + const MESSAGE_TYPE_ASSET = 1; + beforeEach('Deploy contracts', async () => { // load signers [deployer, rollup, acc1] = await ethers.getSigners(); @@ -92,11 +95,11 @@ describe('Bridge Contract', () => { // pre compute root merkle tree in Js const height = 32; const merkleTree = new MerkleTreeBridge(height); - const leafValue = getLeafValue(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadataHash); + const leafValue = getLeafValue(LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadataHash); merkleTree.add(leafValue); const rootJSMainnet = merkleTree.getRoot(); - await expect(bridgeContract.bridge(tokenAddress, destinationNetwork, destinationAddress, amount, '0x')) + await expect(bridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x')) .to.be.revertedWith('ERC20: insufficient allowance'); // user permit @@ -121,7 +124,7 @@ describe('Bridge Contract', () => { s, ]); - await expect(bridgeContract.bridge(tokenAddress, destinationNetwork, destinationAddress, amount, dataPermit)) + await expect(bridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, dataPermit)) .to.emit(bridgeContract, 'BridgeEvent') .withArgs(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount) .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') @@ -176,11 +179,11 @@ describe('Bridge Contract', () => { // pre compute root merkle tree in Js const height = 32; const merkleTree = new MerkleTreeBridge(height); - const leafValue = getLeafValue(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadataHash); + const leafValue = getLeafValue(LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadataHash); merkleTree.add(leafValue); const rootJSMainnet = merkleTree.getRoot(); - await expect(bridgeContract.bridge(tokenAddress, destinationNetwork, destinationAddress, amount, '0x')) + await expect(bridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x')) .to.emit(bridgeContract, 'BridgeEvent') .withArgs(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount) .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') @@ -226,7 +229,7 @@ describe('Bridge Contract', () => { // compute root merkle tree in Js const height = 32; const merkleTree = new MerkleTreeBridge(height); - const leafValue = getLeafValue(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadataHash); + const leafValue = getLeafValue(LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadataHash); merkleTree.add(leafValue); // check merkle root with SC @@ -266,7 +269,7 @@ describe('Bridge Contract', () => { * claim * Can't claim without tokens */ - await expect(bridgeContract.claim( + await expect(bridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -284,7 +287,7 @@ describe('Bridge Contract', () => { .to.emit(tokenContract, 'Transfer') .withArgs(deployer.address, bridgeContract.address, amount); - await expect(bridgeContract.claim( + await expect(bridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -307,7 +310,7 @@ describe('Bridge Contract', () => { .withArgs(bridgeContract.address, acc1.address, amount); // Can't claim because nullifier - await expect(bridgeContract.claim( + await expect(bridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -337,7 +340,7 @@ describe('Bridge Contract', () => { // compute root merkle tree in Js const height = 32; const merkleTreeRollup = new MerkleTreeBridge(height); - const leafValue = getLeafValue(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadataHash); + const leafValue = getLeafValue(LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadataHash); merkleTreeRollup.add(leafValue); // check merkle root with SC @@ -388,7 +391,7 @@ describe('Bridge Contract', () => { const precalculateWrappedErc20 = await ethers.utils.getCreate2Address(bridgeContract.address, salt, hashInitCode); const newWrappedToken = tokenWrappedFactory.attach(precalculateWrappedErc20); - await expect(bridgeContract.claim( + await expect(bridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -428,7 +431,7 @@ describe('Bridge Contract', () => { expect(await newWrappedToken.decimals()).to.be.equal(decimals); // Can't claim because nullifier - await expect(bridgeContract.claim( + await expect(bridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -468,6 +471,7 @@ describe('Bridge Contract', () => { const metadataHashMainnet = ethers.utils.solidityKeccak256(['bytes'], [metadataMainnet]); const leafValueMainnet = getLeafValue( + LEAF_TYPE_ASSET, originNetwork, originTokenAddress, newDestinationNetwork, @@ -476,6 +480,7 @@ describe('Bridge Contract', () => { metadataHashMainnet, ); const leafValueMainnetSC = await bridgeContract.getLeafValue( + LEAF_TYPE_ASSET, originNetwork, originTokenAddress, newDestinationNetwork, @@ -489,7 +494,7 @@ describe('Bridge Contract', () => { const rootJSMainnet = merkleTreeMainnet.getRoot(); // Tokens are burnt - await expect(bridgeContract.bridge(wrappedTokenAddress, newDestinationNetwork, destinationAddress, amount, '0x')) + await expect(bridgeContract.bridgeAsset(wrappedTokenAddress, newDestinationNetwork, destinationAddress, amount, '0x')) .to.emit(bridgeContract, 'BridgeEvent') .withArgs(originNetwork, originTokenAddress, newDestinationNetwork, destinationAddress, amount, metadataMainnet, depositCount) .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') @@ -533,15 +538,15 @@ describe('Bridge Contract', () => { const metadata = '0x';// since is ether does not have metadata // create 3 new deposit - await expect(bridgeContract.bridge(tokenAddress, destinationNetwork, destinationAddress, amount, '0x', { value: amount })) + await expect(bridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x', { value: amount })) .to.emit(bridgeContract, 'BridgeEvent') - .withArgs(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount); - await expect(bridgeContract.bridge(tokenAddress, destinationNetwork, destinationAddress, amount, '0x', { value: amount })) + .withArgs(LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount); + await expect(bridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x', { value: amount })) .to.emit(bridgeContract, 'BridgeEvent') - .withArgs(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount.add(1)); - await expect(bridgeContract.bridge(tokenAddress, destinationNetwork, destinationAddress, amount, '0x', { value: amount })) + .withArgs(LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount.add(1)); + await expect(bridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x', { value: amount })) .to.emit(bridgeContract, 'BridgeEvent') - .withArgs(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount.add(2)); + .withArgs(LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount.add(2)); // Prepare merkle tree const height = 32; @@ -553,8 +558,9 @@ describe('Bridge Contract', () => { events.forEach((e) => { const { args } = e; const leafValue = getLeafValue( + args.leafType, args.originNetwork, - args.originTokenAddress, + args.originAddress, args.destinationNetwork, args.destinationAddress, args.amount, @@ -587,7 +593,7 @@ describe('Bridge Contract', () => { // compute root merkle tree in Js const height = 32; const merkleTree = new MerkleTreeBridge(height); - const leafValue = getLeafValue(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadataHash); + const leafValue = getLeafValue(LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadataHash); merkleTree.add(leafValue); // check merkle root with SC @@ -620,7 +626,7 @@ describe('Bridge Contract', () => { )).to.be.equal(true); // Can't claim without tokens - await expect(bridgeContract.claim( + await expect(bridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -639,7 +645,7 @@ describe('Bridge Contract', () => { .withArgs(deployer.address, bridgeContract.address, amount); // Check DESTINATION_NETWORK_DOES_NOT_MATCH assert - await expect(bridgeContract.claim( + await expect(bridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -653,7 +659,7 @@ describe('Bridge Contract', () => { )).to.be.revertedWith('Bridge::claim: DESTINATION_NETWORK_DOES_NOT_MATCH'); // Check GLOBAL_EXIT_ROOT_DOES_NOT_MATCH assert - await expect(bridgeContract.claim( + await expect(bridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -667,7 +673,7 @@ describe('Bridge Contract', () => { )).to.be.revertedWith('Bridge::claim: GLOBAL_EXIT_ROOT_DOES_NOT_MATCH'); // Check SMT_INVALID assert - await expect(bridgeContract.claim( + await expect(bridgeContract.claimAsset( proof, index + 1, // Wrong index mainnetExitRoot, @@ -680,7 +686,7 @@ describe('Bridge Contract', () => { metadata, )).to.be.revertedWith('Bridge::claim: SMT_INVALID'); - await expect(bridgeContract.claim( + await expect(bridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -703,7 +709,7 @@ describe('Bridge Contract', () => { .withArgs(bridgeContract.address, deployer.address, amount); // Check ALREADY_CLAIMED_claim - await expect(bridgeContract.claim( + await expect(bridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -734,7 +740,7 @@ describe('Bridge Contract', () => { // compute root merkle tree in Js const height = 32; const merkleTree = new MerkleTreeBridge(height); - const leafValue = getLeafValue(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadataHash); + const leafValue = getLeafValue(LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadataHash); merkleTree.add(leafValue); // check merkle root with SC @@ -770,7 +776,7 @@ describe('Bridge Contract', () => { * claim * Can't claim without ether */ - await expect(bridgeContract.claim( + await expect(bridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -788,7 +794,7 @@ describe('Bridge Contract', () => { * Create a deposit to add ether to the Bridge * Check deposit amount ether asserts */ - await expect(bridgeContract.bridge( + await expect(bridgeContract.bridgeAsset( tokenAddress, networkIDRollup, destinationAddress, @@ -798,7 +804,7 @@ describe('Bridge Contract', () => { )).to.be.revertedWith('Bridge::bridge: AMOUNT_DOES_NOT_MATCH_MSG_VALUE'); // Check mainnet destination assert - await expect(bridgeContract.bridge( + await expect(bridgeContract.bridgeAsset( tokenAddress, networkIDMainnet, destinationAddress, @@ -808,7 +814,7 @@ describe('Bridge Contract', () => { )).to.be.revertedWith('Bridge::bridge: DESTINATION_CANT_BE_ITSELF'); // This is used just to pay ether to the bridge smart contract and be able to claim it afterwards. - expect(await bridgeContract.bridge( + expect(await bridgeContract.bridgeAsset( tokenAddress, networkIDRollup, destinationAddress, @@ -821,7 +827,185 @@ describe('Bridge Contract', () => { expect(await ethers.provider.getBalance(bridgeContract.address)).to.be.equal(amount); expect(await ethers.provider.getBalance(deployer.address)).to.be.lte(balanceDeployer.sub(amount)); - await expect(bridgeContract.claim( + await expect(bridgeContract.claimAsset( + proof, + index, + mainnetExitRoot, + rollupExitRootSC, + originNetwork, + tokenAddress, + destinationNetwork, + destinationAddress, + amount, + metadata, + )) + .to.emit(bridgeContract, 'ClaimEvent') + .withArgs( + index, + originNetwork, + tokenAddress, + destinationAddress, + amount, + ); + + // Check balances after claim + expect(await ethers.provider.getBalance(bridgeContract.address)).to.be.equal(ethers.utils.parseEther('0')); + expect(await ethers.provider.getBalance(deployer.address)).to.be.lte(balanceDeployer); + + // Can't claim because nullifier + await expect(bridgeContract.claimAsset( + proof, + index, + mainnetExitRoot, + rollupExitRootSC, + originNetwork, + tokenAddress, + destinationNetwork, + destinationAddress, + amount, + metadata, + )).to.be.revertedWith('Bridge::claim: ALREADY_CLAIMED'); + }); + + it('should claim message', async () => { + // Add a claim leaf to rollup exit tree + const originNetwork = networkIDMainnet; + const tokenAddress = ethers.constants.AddressZero; // ether + const amount = ethers.utils.parseEther('10'); + const destinationNetwork = networkIDMainnet; + const destinationAddress = deployer.address; + + const metadata = '0x'; // since is ether does not have metadata + const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); + + const mainnetExitRoot = await globalExitRootManager.lastMainnetExitRoot(); + let lastGlobalExitRootNum = await globalExitRootManager.lastGlobalExitRootNum(); + + // compute root merkle tree in Js + const height = 32; + const merkleTree = new MerkleTreeBridge(height); + const leafValue = getLeafValue(MESSAGE_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadataHash); + merkleTree.add(leafValue); + + // check merkle root with SC + const rootJSRollup = merkleTree.getRoot(); + + // add rollup Merkle root + await expect(globalExitRootManager.connect(rollup).updateExitRoot(rootJSRollup)) + .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') + .withArgs(lastGlobalExitRootNum + 1, mainnetExitRoot, rootJSRollup); + + // check roots + const rollupExitRootSC = await globalExitRootManager.lastRollupExitRoot(); + expect(rollupExitRootSC).to.be.equal(rootJSRollup); + + const computedGlobalExitRoot = calculateGlobalExitRoot(mainnetExitRoot, rollupExitRootSC); + expect(computedGlobalExitRoot).to.be.equal(await globalExitRootManager.getLastGlobalExitRoot()); + + // check merkle proof + const proof = merkleTree.getProofTreeByIndex(0); + const index = 0; + lastGlobalExitRootNum += 1; + + // verify merkle proof + expect(verifyMerkleProof(leafValue, proof, index, rootJSRollup)).to.be.equal(true); + expect(await bridgeContract.verifyMerkleProof( + leafValue, + proof, + index, + rootJSRollup, + )).to.be.equal(true); + + + /* + * claim + * Can't claim a message as an assets + */ + await expect(bridgeContract.claimAsset( + proof, + index, + mainnetExitRoot, + rollupExitRootSC, + originNetwork, + tokenAddress, + destinationNetwork, + destinationAddress, + amount, + metadata, + )).to.be.revertedWith('Bridge::claim: SMT_INVALID'); + + + + /* + * claim + * Can't claim without ether + */ + await expect(bridgeContract.claimMessage( + proof, + index, + mainnetExitRoot, + rollupExitRootSC, + originNetwork, + tokenAddress, + destinationNetwork, + destinationAddress, + amount, + metadata, + )).to.be.revertedWith('Bridge::claimMessage: MESSAGE_FAILED'); + + const balanceDeployer = await ethers.provider.getBalance(deployer.address); + /* + * Create a deposit to add ether to the Bridge + * Check deposit amount ether asserts + */ + await expect(bridgeContract.bridgeAsset( + tokenAddress, + networkIDRollup, + destinationAddress, + amount, + '0x', + { value: ethers.utils.parseEther('100') }, + )).to.be.revertedWith('Bridge::bridge: AMOUNT_DOES_NOT_MATCH_MSG_VALUE'); + + // Check mainnet destination assert + await expect(bridgeContract.bridgeAsset( + tokenAddress, + networkIDMainnet, + destinationAddress, + amount, + '0x', + { value: amount }, + )).to.be.revertedWith('Bridge::bridge: DESTINATION_CANT_BE_ITSELF'); + + // This is used just to pay ether to the bridge smart contract and be able to claim it afterwards. + expect(await bridgeContract.bridgeAsset( + tokenAddress, + networkIDRollup, + destinationAddress, + amount, + '0x', + { value: amount }, + )); + + // Check balances before claim + expect(await ethers.provider.getBalance(bridgeContract.address)).to.be.equal(amount); + expect(await ethers.provider.getBalance(deployer.address)).to.be.lte(balanceDeployer.sub(amount)); + + // Check mainnet destination assert + await expect(bridgeContract.claimAsset( + proof, + index, + mainnetExitRoot, + rollupExitRootSC, + originNetwork, + tokenAddress, + destinationNetwork, + destinationAddress, + amount, + metadata, + )).to.be.revertedWith('Bridge::claim: SMT_INVALID'); + + await expect(bridgeContract.claimMessage( proof, index, mainnetExitRoot, @@ -847,7 +1031,7 @@ describe('Bridge Contract', () => { expect(await ethers.provider.getBalance(deployer.address)).to.be.lte(balanceDeployer); // Can't claim because nullifier - await expect(bridgeContract.claim( + await expect(bridgeContract.claimAsset( proof, index, mainnetExitRoot, diff --git a/test/contracts/bridgeMock.test.js b/test/contracts/bridgeMock.test.js index 2032db8db..04fb7f081 100644 --- a/test/contracts/bridgeMock.test.js +++ b/test/contracts/bridgeMock.test.js @@ -30,6 +30,8 @@ describe('Bridge Contract', () => { const networkIDMainnet = 0; const networkIDRollup = 1; + const LEAF_TYPE_ASSET = 0; + beforeEach('Deploy contracts', async () => { // load signers [deployer, rollup] = await ethers.getSigners(); @@ -92,11 +94,11 @@ describe('Bridge Contract', () => { // pre compute root merkle tree in Js const height = 32; const merkleTree = new MerkleTreeBridge(height); - const leafValue = getLeafValue(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadataHash); + const leafValue = getLeafValue(LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadataHash); merkleTree.add(leafValue); const rootJSMainnet = merkleTree.getRoot(); - await expect(bridgeContract.bridge(tokenAddress, destinationNetwork, destinationAddress, amount, '0x')) + await expect(bridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x')) .to.emit(bridgeContract, 'BridgeEvent') .withArgs(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount) .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') @@ -133,7 +135,7 @@ describe('Bridge Contract', () => { const destinationNetwork = networkIDRollup; const destinationAddress = deployer.address; - await expect(bridgeContract.bridge( + await expect(bridgeContract.bridgeAsset( tokenAddress, destinationNetwork, destinationAddress, @@ -142,7 +144,7 @@ describe('Bridge Contract', () => { { value: ethers.utils.parseEther('10') }, )).to.be.revertedWith('Bridge::bridge: Cannot bridge more than maxEtherBridge in internal testnet'); - await bridgeContract.bridge( + await bridgeContract.bridgeAsset( tokenAddress, destinationNetwork, destinationAddress, diff --git a/test/contracts/depositContractMock.test.js b/test/contracts/depositContractMock.test.js index 9f04ccfa6..04d5f5e69 100644 --- a/test/contracts/depositContractMock.test.js +++ b/test/contracts/depositContractMock.test.js @@ -11,6 +11,10 @@ describe('Deposit Contract', () => { let acc2; let depositContractMock; + + const LEAF_TYPE_ASSET = 0; + const MESSAGE_TYPE_ASSET = 1; + beforeEach('Deploy contracts', async () => { // load signers [deployer, acc2] = await ethers.getSigners(); @@ -29,12 +33,13 @@ describe('Deposit Contract', () => { const destinationAddress = deployer.address; const metadataHash = ethers.utils.hexlify(ethers.utils.randomBytes(32)); - await depositContractMock.deposit(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadataHash); + await depositContractMock.deposit(LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadataHash); // compute root merkle tree in Js const height = 32; const merkleTree = new MerkleTreeBridge(height); const leafValueJs = getLeafValue( + LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, @@ -43,6 +48,7 @@ describe('Deposit Contract', () => { metadataHash, ); const leafValueSC = await depositContractMock.getLeafValue( + LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, @@ -83,6 +89,7 @@ describe('Deposit Contract', () => { const metadataHash = ethers.utils.hexlify(ethers.utils.randomBytes(32)); await depositContractMock.deposit( + LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, @@ -91,6 +98,7 @@ describe('Deposit Contract', () => { metadataHash, ); await depositContractMock.deposit( + MESSAGE_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, @@ -103,6 +111,7 @@ describe('Deposit Contract', () => { const height = 32; const merkleTree = new MerkleTreeBridge(height); const leafValueJs = getLeafValue( + LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, @@ -111,6 +120,7 @@ describe('Deposit Contract', () => { metadataHash, ); const leafValueJs2 = getLeafValue( + MESSAGE_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, @@ -119,6 +129,7 @@ describe('Deposit Contract', () => { metadataHash, ); const leafValueSC = await depositContractMock.getLeafValue( + LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, @@ -127,6 +138,7 @@ describe('Deposit Contract', () => { metadataHash, ); const leafValueSC2 = await depositContractMock.getLeafValue( + MESSAGE_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, @@ -173,6 +185,7 @@ describe('Deposit Contract', () => { let metadataHash = ethers.utils.hexlify(ethers.utils.randomBytes(32)); await depositContractMock.deposit( + LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, @@ -185,6 +198,7 @@ describe('Deposit Contract', () => { const height = 32; const merkleTree = new MerkleTreeBridge(height); let leafValue = getLeafValue( + LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, @@ -193,6 +207,7 @@ describe('Deposit Contract', () => { metadataHash, ); const leafValueSC = await depositContractMock.getLeafValue( + LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, @@ -237,6 +252,7 @@ describe('Deposit Contract', () => { metadataHash = ethers.utils.hexlify(ethers.utils.randomBytes(32)); await depositContractMock.connect(acc2).deposit( + LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, @@ -247,6 +263,7 @@ describe('Deposit Contract', () => { // compute root merkle tree in Js leafValue = getLeafValue( + LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, @@ -283,6 +300,7 @@ describe('Deposit Contract', () => { metadataHash = ethers.utils.hexlify(ethers.utils.randomBytes(32)); await depositContractMock.connect(acc2).deposit( + LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, @@ -293,6 +311,7 @@ describe('Deposit Contract', () => { // compute root merkle tree in Js leafValue = getLeafValue( + LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, @@ -325,6 +344,7 @@ describe('Deposit Contract', () => { const depositCount = Number(await depositContractMock.depositCount()); amount = ethers.utils.parseEther('0.01'); leafValue = getLeafValue( + LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, @@ -335,6 +355,7 @@ describe('Deposit Contract', () => { const results = []; for (let i = 0; i < txCount; i++) { const p = depositContractMock.connect(acc2).deposit( + LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, From 9fcd9651248d976d0c0424c67316ffbe647022d3 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Mon, 24 Oct 2022 16:47:09 +0200 Subject: [PATCH 03/71] following approach --- contracts/ProofOfEfficiency.sol | 312 ++++++++++++++++----- contracts/mocks/ProofOfEfficiencyMock.sol | 45 ++- test/contracts/bridge.test.js | 49 +++- test/contracts/depositContractMock.test.js | 1 - 4 files changed, 320 insertions(+), 87 deletions(-) diff --git a/contracts/ProofOfEfficiency.sol b/contracts/ProofOfEfficiency.sol index a42d29f8b..ba34e029f 100644 --- a/contracts/ProofOfEfficiency.sol +++ b/contracts/ProofOfEfficiency.sol @@ -20,12 +20,12 @@ contract ProofOfEfficiency is Initializable { /** * @notice Struct which will be used to call sequenceBatches - * @param transactions L2 ethereum transactions EIP-155 with signature: - * rlp(nonce, gasprice, gasLimit, to, value, data, chainid, 0, 0,) || v || r || s + * @param transactions L2 ethereum transactions EIP-155 or pre-EIP-155 with signature: + * EIP-155: rlp(nonce, gasprice, gasLimit, to, value, data, chainid, 0, 0,) || v || r || s + * pre-EIP-155: rlp(nonce, gasprice, gasLimit, to, value, data) || v || r || s * @param globalExitRoot Global exit root of the batch * @param timestamp Timestamp of the batch * @param minForcedTimestamp Minimum timestamp of the force batch data, empty when non forced batch - * that will be popped from the queue and added to the sequence */ struct BatchData { bytes transactions; @@ -34,6 +34,18 @@ contract ProofOfEfficiency is Initializable { uint64 minForcedTimestamp; } + /** + * @notice Struct which will be used to call sequenceForceBatches + * @param transactions L2 ethereum transactions EIP-155 or pre-EIP-155 with signature: + * @param globalExitRoot Global exit root of the batch + * @param minForcedTimestamp Minimum timestamp of the force batch data + */ + struct ForceBatchData { + bytes transactions; + bytes32 globalExitRoot; + uint64 minForcedTimestamp; + } + // Modulus zkSNARK uint256 internal constant _RFIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617; @@ -97,7 +109,7 @@ contract ProofOfEfficiency is Initializable { IGlobalExitRootManager public globalExitRootManager; // Current state root - bytes32 public currentStateRoot; // TODO should be a map stateRootMap[lastForgedBatch]??? + bytes32 public currentStateRoot; // Rollup verifier interface IVerifierRollup public rollupVerifier; @@ -224,6 +236,8 @@ contract ProofOfEfficiency is Initializable { // Check if it's a forced batch if (currentBatch.minForcedTimestamp > 0) { currentLastForceBatchSequenced++; + + // Check forced data matches bytes32 hashedForceBatchData = keccak256( abi.encodePacked( keccak256(currentBatch.transactions), @@ -277,9 +291,8 @@ contract ProofOfEfficiency is Initializable { ) ); - // Update sequencedBatches mapping + // Update currentBatchSequenced currentBatchSequenced++; - sequencedBatches[currentBatchSequenced] = currentAccInputHash; // Update timestamp currentTimestamp = currentBatch.timestamp; @@ -298,6 +311,7 @@ contract ProofOfEfficiency is Initializable { lastTimestamp = currentTimestamp; lastBatchSequenced = currentBatchSequenced; lastForceBatchSequenced = currentLastForceBatchSequenced; + sequencedBatches[currentBatchSequenced] = currentAccInputHash; // Pay collateral for every batch submitted matic.safeTransferFrom( @@ -311,17 +325,17 @@ contract ProofOfEfficiency is Initializable { /** * @notice Allows an aggregator to verify a batch - * @param firstNumBatch First batch number that the aggregator intends to verify, used as a sanity check - * @param lastNumBatch Last batch that the aggregator intends to verify + * @param _lastVerifiedBatch Last verified Batch, used as a sanity check + * @param newVerifiedBatch Last batch that the aggregator intends to verify * @param newLocalExitRoot New local exit root once the batch is processed * @param newStateRoot New State root once the batch is processed * @param proofA zk-snark input * @param proofB zk-snark input * @param proofC zk-snark input */ - function verifyBatch( - uint64 firstNumBatch, - uint64 lastNumBatch, + function verifyBatches( + uint64 _lastVerifiedBatch, + uint64 newVerifiedBatch, bytes32 newLocalExitRoot, bytes32 newStateRoot, uint256[2] calldata proofA, @@ -330,22 +344,27 @@ contract ProofOfEfficiency is Initializable { ) public { // sanity check require( - firstNumBatch == lastVerifiedBatch + 1, - "ProofOfEfficiency::verifyBatch: old batch does not match" + _lastVerifiedBatch == lastVerifiedBatch, + "ProofOfEfficiency::verifyBatch: _lastVerifiedBatch does not match" ); require( - lastNumBatch <= lastBatchSequenced, - "ProofOfEfficiency::verifyBatch: batch does not have been sequenced" + newVerifiedBatch > _lastVerifiedBatch, + "ProofOfEfficiency::verifyBatch: last numBatch must be bigger than lastVerifiedBatch" ); require( - lastNumBatch >= firstNumBatch, - "ProofOfEfficiency::verifyBatch: last numBatch must be equal or bigger than firstNumBatch" + newVerifiedBatch <= _lastVerifiedBatch, + "ProofOfEfficiency::verifyBatch: batch does not have been sequenced" ); - bytes32 oldAccInputHash = sequencedBatches[firstNumBatch - 1]; - bytes32 newAccInputHash = sequencedBatches[lastNumBatch]; + bytes32 oldAccInputHash = sequencedBatches[_lastVerifiedBatch]; + bytes32 newAccInputHash = sequencedBatches[newVerifiedBatch]; + + require( + newAccInputHash != bytes32(0), + "ProofOfEfficiency::verifyBatch: newAccInputHash does not exist" + ); bytes memory snarkHashBytes; assembly { @@ -362,6 +381,27 @@ contract ProofOfEfficiency is Initializable { // Set the pointer at the beginning of the byte array let ptr := add(snarkHashBytes, 32) + // function add32BytesToInputSnark(bytesToAdd, ptrInit) -> ptrFinal { + // ptrFinal := ptrInit + // for { + // let i := 0 + // } lt(i, 8) { + // i := add(i, 1) + // } { + // // Every iteration will write 4 bytes (32 bits) from inputStark padded to 8 bytes, in little endian format + // // First shift right i*32 bits, in order to have the next 4 bytes to write at the end of the byte array + // // Then shift left 256 - 32 (224) bits to the left. + // // As a result the first 4 bytes will be the next ones, and the rest of the bytes will be zeroes + // // Finally the result is shifted 32 bits for the padding, and stores in the current position of the pointer + // mstore( + // ptrFinal, + // shr(32, shl(224, shr(mul(i, 32), bytesToAdd))) + // ) + // ptrFinal := add(ptrFinal, 8) // write the next 8 bytes + // } + // + // } + // Add currentStateRoot for { let i := 0 @@ -427,11 +467,11 @@ contract ProofOfEfficiency is Initializable { } // add firstNumBatch - mstore(ptr, shl(192, firstNumBatch)) // 256 - 64 = 192 + mstore(ptr, shl(192, _lastVerifiedBatch)) // 256 - 64 = 192 ptr := add(ptr, 8) // add lastNumBatch - mstore(ptr, shl(192, lastNumBatch)) // 256 - 64 = 192 + mstore(ptr, shl(192, newVerifiedBatch)) // 256 - 64 = 192 ptr := add(ptr, 8) // add chainID @@ -455,24 +495,23 @@ contract ProofOfEfficiency is Initializable { // Get MATIC reward matic.safeTransfer( msg.sender, - calculateAggregatorFee(lastNumBatch - lastVerifiedBatch) + calculateRewardPerBatch() * (newVerifiedBatch - _lastVerifiedBatch) ); // Update state - lastVerifiedBatch = lastNumBatch; + lastVerifiedBatch = newVerifiedBatch; currentStateRoot = newStateRoot; // Interact with globalExitRoot globalExitRootManager.updateExitRoot(newLocalExitRoot); - emit VerifyBatch(lastNumBatch, msg.sender); + emit VerifyBatch(newVerifiedBatch, msg.sender); } /** * @notice Allows a sequencer/user to force a batch of L2 transactions. * This should be used only in extreme cases where the trusted sequencer does not work as expected - * @param transactions L2 ethereum transactions EIP-155 with signature: - * rlp(nonce, gasprice, gasLimit, to, value, data, chainid, 0, 0,) || v || r || s + * @param transactions L2 ethereum transactions EIP-155 or pre-EIP-155 with signature: * @param maticAmount Max amount of MATIC tokens that the sender is willing to pay */ function forceBatch(bytes memory transactions, uint256 maticAmount) @@ -524,59 +563,79 @@ contract ProofOfEfficiency is Initializable { /** * @notice Allows anyone to sequence forced Batches if the trusted sequencer do not have done it in the timeout period - * Also allow in any time the trusted sequencer to append forceBatches to the sequence in order to avoid timeout issues - * @param numForcedBatches number of forced batches that will be added to the sequence + * @param batches Struct array which the necessary data to append new batces ot the sequence */ - function sequenceForceBatches(uint64 numForcedBatches) + function sequenceForceBatches(ForceBatchData[] memory batches) public isForceBatchAllowed { - uint64 newLastForceBatchSequenced = lastForceBatchSequenced + - numForcedBatches; + uint256 batchesNum = batches.length; require( - numForcedBatches > 0, + batchesNum > 0, "ProofOfEfficiency::sequenceForceBatch: Must force at least 1 batch" ); require( - newLastForceBatchSequenced <= lastForceBatch, + lastForceBatchSequenced + batchesNum <= lastForceBatch, "ProofOfEfficiency::sequenceForceBatch: Force batch invalid" ); - // // If message sender is not the trusted sequencer, must wait the timeout - // if (msg.sender != trustedSequencer) { - // // The last batch will have the most restrictive timestamp - // require( - // forcedBatches[newLastForceBatchSequenced].minTimestamp + - // FORCE_BATCH_TIMEOUT <= - // block.timestamp, - // "ProofOfEfficiency::sequenceForceBatch: Forced batch is not in timeout period" - // ); - // } - // Store storage variables in memory, to save gas, because will be overrided multiple times uint64 currentBatchSequenced = lastBatchSequenced; uint64 currentLastForceBatchSequenced = lastForceBatchSequenced; + bytes32 currentAccInputHash = sequencedBatches[currentBatchSequenced]; - // // Sequence force batches - // for (uint256 j = 0; j < numForcedBatches; j++) { - // currentLastForceBatchSequenced++; + // Sequence force batches + for (uint256 i = 0; i < batchesNum; i++) { + // Load current sequence + ForceBatchData memory currentBatch = batches[i]; + currentLastForceBatchSequenced++; - // // Add forceBatch to the sequence - // // Instead of adding the hashData, just add a "pointer" to the forced Batch - // currentBatchSequenced++; - // sequencedBatches[currentBatchSequenced] - // .forceBatchNum = currentLastForceBatchSequenced; - // sequencedBatches[currentBatchSequenced].timestamp = uint64( - // block.timestamp - // ); - // } + // Check forced data matches + bytes32 hashedForceBatchData = keccak256( + abi.encodePacked( + keccak256(currentBatch.transactions), + currentBatch.globalExitRoot, + currentBatch.minForcedTimestamp + ) + ); + + require( + hashedForceBatchData == + forcedBatches[currentLastForceBatchSequenced], + "ProofOfEfficiency::sequenceForceBatches: Forced batches data must match" + ); + + if (i == (batchesNum - 1)) { + // The last batch will have the most restrictive timestamp + require( + currentBatch.minForcedTimestamp + FORCE_BATCH_TIMEOUT <= + block.timestamp, + "ProofOfEfficiency::sequenceForceBatch: Forced batch is not in timeout period" + ); + } + // Calculate next acc input hash + currentAccInputHash = keccak256( + abi.encodePacked( + currentAccInputHash, + keccak256(currentBatch.transactions), + currentBatch.globalExitRoot, + uint64(block.timestamp), + msg.sender + ) + ); + + // Update currentBatchSequenced + currentBatchSequenced++; + } - // Store back the storage variables lastTimestamp = uint64(block.timestamp); + + // Store back the storage variables lastBatchSequenced = currentBatchSequenced; lastForceBatchSequenced = currentLastForceBatchSequenced; + sequencedBatches[currentBatchSequenced] = currentAccInputHash; emit SequenceForceBatches(lastBatchSequenced); } @@ -629,19 +688,142 @@ contract ProofOfEfficiency is Initializable { } /** - * @notice Function to calculate the fee of the aggregator depending on the batches he intend to verify + * @notice Function to calculate the reward to verify a single batch */ - function calculateAggregatorFee(uint256 batchesVerified) - public - view - returns (uint256) - { + function calculateRewardPerBatch() public view returns (uint256) { uint256 currentBalance = matic.balanceOf(address(this)); - // Total Batches to be verified = total Sequenced Batches - verified Batches - // total Sequenced Batches = forcedBatches to be sequenced (total forced Batches - sequenced Batches) + totalSequencedBatches + // Total Sequenced Batches = forcedBatches to be sequenced (total forced Batches - sequenced Batches) + sequencedBatches + // Total Batches to be verified = Total Sequenced Batches - verified Batches uint256 totalBatchesToVerify = ((lastForceBatch - lastForceBatchSequenced) + lastBatchSequenced) - lastVerifiedBatch; return currentBalance / totalBatchesToVerify; } + + function calculateInputSnark(bytes32 newStateRoot, bytes32 oldAccInputHash, ) { + bytes32 oldAccInputHash = sequencedBatches[_lastVerifiedBatch]; + bytes32 newAccInputHash = sequencedBatches[newVerifiedBatch]; + + require( + newAccInputHash != bytes32(0), + "ProofOfEfficiency::verifyBatch: newAccInputHash does not exist" + ); + + bytes memory snarkHashBytes; + assembly { + // Set snarkHashBytes to the next free memory pointer + snarkHashBytes := mload(0x40) + + // Reserve the memory. 32 for the length , the input bytes and 32 + // extra bytes at the end for word manipulation + mstore(0x40, add(add(snarkHashBytes, 0x40), _SNARK_SHA_BYTES)) + + // Set the actual length of the input bytes + mstore(snarkHashBytes, _SNARK_SHA_BYTES) + + // Set the pointer at the beginning of the byte array + let ptr := add(snarkHashBytes, 32) + + // function add32BytesToInputSnark(bytesToAdd, ptrInit) -> ptrFinal { + // ptrFinal := ptrInit + // for { + // let i := 0 + // } lt(i, 8) { + // i := add(i, 1) + // } { + // // Every iteration will write 4 bytes (32 bits) from inputStark padded to 8 bytes, in little endian format + // // First shift right i*32 bits, in order to have the next 4 bytes to write at the end of the byte array + // // Then shift left 256 - 32 (224) bits to the left. + // // As a result the first 4 bytes will be the next ones, and the rest of the bytes will be zeroes + // // Finally the result is shifted 32 bits for the padding, and stores in the current position of the pointer + // mstore( + // ptrFinal, + // shr(32, shl(224, shr(mul(i, 32), bytesToAdd))) + // ) + // ptrFinal := add(ptrFinal, 8) // write the next 8 bytes + // } + // + // } + + // Add currentStateRoot + for { + let i := 0 + } lt(i, 8) { + i := add(i, 1) + } { + // Every iteration will write 4 bytes (32 bits) from inputStark padded to 8 bytes, in little endian format + // First shift right i*32 bits, in order to have the next 4 bytes to write at the end of the byte array + // Then shift left 256 - 32 (224) bits to the left. + // As a result the first 4 bytes will be the next ones, and the rest of the bytes will be zeroes + // Finally the result is shifted 32 bits for the padding, and stores in the current position of the pointer + mstore( + ptr, + shr( + 32, + shl(224, shr(mul(i, 32), sload(currentStateRoot.slot))) + ) + ) + ptr := add(ptr, 8) // write the next 8 bytes + } + + // Add newStateRoot + for { + let i := 0 + } lt(i, 8) { + i := add(i, 1) + } { + mstore(ptr, shr(32, shl(224, shr(mul(i, 32), newStateRoot)))) + ptr := add(ptr, 8) // write the next 8 bytes + } + + // Add oldAccInputHash + for { + let i := 0 + } lt(i, 8) { + i := add(i, 1) + } { + mstore(ptr, shr(32, shl(224, shr(mul(i, 32), oldAccInputHash)))) + ptr := add(ptr, 8) // write the next 8 bytes + } + + // Add newAccInputHash + for { + let i := 0 + } lt(i, 8) { + i := add(i, 1) + } { + mstore(ptr, shr(32, shl(224, shr(mul(i, 32), newAccInputHash)))) + ptr := add(ptr, 8) // write the next 8 bytes + } + + // Add newLocalExitRoot + for { + let i := 0 + } lt(i, 8) { + i := add(i, 1) + } { + mstore( + ptr, + shr(32, shl(224, shr(mul(i, 32), newLocalExitRoot))) + ) + ptr := add(ptr, 8) // write the next 8 bytes + } + + // add firstNumBatch + mstore(ptr, shl(192, _lastVerifiedBatch)) // 256 - 64 = 192 + ptr := add(ptr, 8) + + // add lastNumBatch + mstore(ptr, shl(192, newVerifiedBatch)) // 256 - 64 = 192 + ptr := add(ptr, 8) + + // add chainID + mstore(ptr, shl(192, sload(chainID.slot))) // 256 - 64 = 192 + ptr := add(ptr, 8) + + // add aggregator address + mstore(ptr, shl(96, caller())) // 256 - 160 = 96 + ptr := add(ptr, 20) + } + } } diff --git a/contracts/mocks/ProofOfEfficiencyMock.sol b/contracts/mocks/ProofOfEfficiencyMock.sol index 6dba5d1f1..68e9efe30 100644 --- a/contracts/mocks/ProofOfEfficiencyMock.sol +++ b/contracts/mocks/ProofOfEfficiencyMock.sol @@ -335,38 +335,61 @@ contract ProofOfEfficiencyMock is ProofOfEfficiency, OwnableUpgradeable { } /** - * @notice Allows an aggregator to verify a batch + * @notice Allows an aggregator mock to verify a batch + * @param _lastVerifiedBatch Last verified Batch, used as a sanity check + * @param newVerifiedBatch Last batch that the aggregator intends to verify * @param newLocalExitRoot New local exit root once the batch is processed * @param newStateRoot New State root once the batch is processed - * @param numBatch Batch number that the aggregator intends to verify, used as a sanity check + * @param proofA zk-snark input + * @param proofB zk-snark input + * @param proofC zk-snark input */ - function verifyBatchMock( + function verifyBatchesMock( + uint64 _lastVerifiedBatch, + uint64 newVerifiedBatch, bytes32 newLocalExitRoot, bytes32 newStateRoot, - uint64 numBatch, uint256[2] calldata proofA, uint256[2][2] calldata proofB, uint256[2] calldata proofC ) public onlyOwner { // sanity check require( - numBatch == lastVerifiedBatch + 1, - "ProofOfEfficiency::verifyBatch: batch does not match" + _lastVerifiedBatch == lastVerifiedBatch, + "ProofOfEfficiency::verifyBatch: _lastVerifiedBatch does not match" ); require( - numBatch <= lastBatchSequenced, + newVerifiedBatch > _lastVerifiedBatch, + "ProofOfEfficiency::verifyBatch: last numBatch must be bigger than lastVerifiedBatch" + ); + + require( + newVerifiedBatch <= _lastVerifiedBatch, "ProofOfEfficiency::verifyBatch: batch does not have been sequenced" ); + bytes32 oldAccInputHash = sequencedBatches[_lastVerifiedBatch]; + bytes32 newAccInputHash = sequencedBatches[newVerifiedBatch]; + + require( + newAccInputHash != bytes32(0), + "ProofOfEfficiency::verifyBatch: newAccInputHash does not exist" + ); + + // Get MATIC reward + matic.safeTransfer( + msg.sender, + calculateRewardPerBatch() * (newVerifiedBatch - _lastVerifiedBatch) + ); + // Update state - lastVerifiedBatch++; + lastVerifiedBatch = newVerifiedBatch; currentStateRoot = newStateRoot; - currentLocalExitRoot = newLocalExitRoot; // Interact with globalExitRoot - globalExitRootManager.updateExitRoot(currentLocalExitRoot); + globalExitRootManager.updateExitRoot(newLocalExitRoot); - emit VerifyBatch(numBatch, msg.sender); + emit VerifyBatch(newVerifiedBatch, msg.sender); } } diff --git a/test/contracts/bridge.test.js b/test/contracts/bridge.test.js index 304b3d0b7..a83528b37 100644 --- a/test/contracts/bridge.test.js +++ b/test/contracts/bridge.test.js @@ -95,7 +95,15 @@ describe('Bridge Contract', () => { // pre compute root merkle tree in Js const height = 32; const merkleTree = new MerkleTreeBridge(height); - const leafValue = getLeafValue(LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadataHash); + const leafValue = getLeafValue( + LEAF_TYPE_ASSET, + originNetwork, + tokenAddress, + destinationNetwork, + destinationAddress, + amount, + metadataHash, + ); merkleTree.add(leafValue); const rootJSMainnet = merkleTree.getRoot(); @@ -179,7 +187,15 @@ describe('Bridge Contract', () => { // pre compute root merkle tree in Js const height = 32; const merkleTree = new MerkleTreeBridge(height); - const leafValue = getLeafValue(LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadataHash); + const leafValue = getLeafValue( + LEAF_TYPE_ASSET, + originNetwork, + tokenAddress, + destinationNetwork, + destinationAddress, + amount, + metadataHash, + ); merkleTree.add(leafValue); const rootJSMainnet = merkleTree.getRoot(); @@ -229,7 +245,15 @@ describe('Bridge Contract', () => { // compute root merkle tree in Js const height = 32; const merkleTree = new MerkleTreeBridge(height); - const leafValue = getLeafValue(LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadataHash); + const leafValue = getLeafValue( + LEAF_TYPE_ASSET, + originNetwork, + tokenAddress, + destinationNetwork, + destinationAddress, + amount, + metadataHash, + ); merkleTree.add(leafValue); // check merkle root with SC @@ -340,7 +364,15 @@ describe('Bridge Contract', () => { // compute root merkle tree in Js const height = 32; const merkleTreeRollup = new MerkleTreeBridge(height); - const leafValue = getLeafValue(LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadataHash); + const leafValue = getLeafValue( + LEAF_TYPE_ASSET, + originNetwork, + tokenAddress, + destinationNetwork, + destinationAddress, + amount, + metadataHash, + ); merkleTreeRollup.add(leafValue); // check merkle root with SC @@ -916,11 +948,10 @@ describe('Bridge Contract', () => { rootJSRollup, )).to.be.equal(true); - /* - * claim - * Can't claim a message as an assets - */ + * claim + * Can't claim a message as an assets + */ await expect(bridgeContract.claimAsset( proof, index, @@ -934,8 +965,6 @@ describe('Bridge Contract', () => { metadata, )).to.be.revertedWith('Bridge::claim: SMT_INVALID'); - - /* * claim * Can't claim without ether diff --git a/test/contracts/depositContractMock.test.js b/test/contracts/depositContractMock.test.js index 04d5f5e69..6c592ac84 100644 --- a/test/contracts/depositContractMock.test.js +++ b/test/contracts/depositContractMock.test.js @@ -11,7 +11,6 @@ describe('Deposit Contract', () => { let acc2; let depositContractMock; - const LEAF_TYPE_ASSET = 0; const MESSAGE_TYPE_ASSET = 1; From 0ab6698fd67b8a87d1574e7395ae33e139fca627 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Mon, 24 Oct 2022 17:17:52 +0200 Subject: [PATCH 04/71] test remaining --- contracts/ProofOfEfficiency.sol | 138 +---------- contracts/mocks/ProofOfEfficiencyMock.sol | 279 ++++------------------ 2 files changed, 61 insertions(+), 356 deletions(-) diff --git a/contracts/ProofOfEfficiency.sol b/contracts/ProofOfEfficiency.sol index ba34e029f..c65a848dd 100644 --- a/contracts/ProofOfEfficiency.sol +++ b/contracts/ProofOfEfficiency.sol @@ -358,131 +358,13 @@ contract ProofOfEfficiency is Initializable { "ProofOfEfficiency::verifyBatch: batch does not have been sequenced" ); - bytes32 oldAccInputHash = sequencedBatches[_lastVerifiedBatch]; - bytes32 newAccInputHash = sequencedBatches[newVerifiedBatch]; - - require( - newAccInputHash != bytes32(0), - "ProofOfEfficiency::verifyBatch: newAccInputHash does not exist" + bytes memory snarkHashBytes = getInputSnarkBytes( + _lastVerifiedBatch, + newVerifiedBatch, + newLocalExitRoot, + newStateRoot ); - bytes memory snarkHashBytes; - assembly { - // Set snarkHashBytes to the next free memory pointer - snarkHashBytes := mload(0x40) - - // Reserve the memory. 32 for the length , the input bytes and 32 - // extra bytes at the end for word manipulation - mstore(0x40, add(add(snarkHashBytes, 0x40), _SNARK_SHA_BYTES)) - - // Set the actual length of the input bytes - mstore(snarkHashBytes, _SNARK_SHA_BYTES) - - // Set the pointer at the beginning of the byte array - let ptr := add(snarkHashBytes, 32) - - // function add32BytesToInputSnark(bytesToAdd, ptrInit) -> ptrFinal { - // ptrFinal := ptrInit - // for { - // let i := 0 - // } lt(i, 8) { - // i := add(i, 1) - // } { - // // Every iteration will write 4 bytes (32 bits) from inputStark padded to 8 bytes, in little endian format - // // First shift right i*32 bits, in order to have the next 4 bytes to write at the end of the byte array - // // Then shift left 256 - 32 (224) bits to the left. - // // As a result the first 4 bytes will be the next ones, and the rest of the bytes will be zeroes - // // Finally the result is shifted 32 bits for the padding, and stores in the current position of the pointer - // mstore( - // ptrFinal, - // shr(32, shl(224, shr(mul(i, 32), bytesToAdd))) - // ) - // ptrFinal := add(ptrFinal, 8) // write the next 8 bytes - // } - // - // } - - // Add currentStateRoot - for { - let i := 0 - } lt(i, 8) { - i := add(i, 1) - } { - // Every iteration will write 4 bytes (32 bits) from inputStark padded to 8 bytes, in little endian format - // First shift right i*32 bits, in order to have the next 4 bytes to write at the end of the byte array - // Then shift left 256 - 32 (224) bits to the left. - // As a result the first 4 bytes will be the next ones, and the rest of the bytes will be zeroes - // Finally the result is shifted 32 bits for the padding, and stores in the current position of the pointer - mstore( - ptr, - shr( - 32, - shl(224, shr(mul(i, 32), sload(currentStateRoot.slot))) - ) - ) - ptr := add(ptr, 8) // write the next 8 bytes - } - - // Add newStateRoot - for { - let i := 0 - } lt(i, 8) { - i := add(i, 1) - } { - mstore(ptr, shr(32, shl(224, shr(mul(i, 32), newStateRoot)))) - ptr := add(ptr, 8) // write the next 8 bytes - } - - // Add oldAccInputHash - for { - let i := 0 - } lt(i, 8) { - i := add(i, 1) - } { - mstore(ptr, shr(32, shl(224, shr(mul(i, 32), oldAccInputHash)))) - ptr := add(ptr, 8) // write the next 8 bytes - } - - // Add newAccInputHash - for { - let i := 0 - } lt(i, 8) { - i := add(i, 1) - } { - mstore(ptr, shr(32, shl(224, shr(mul(i, 32), newAccInputHash)))) - ptr := add(ptr, 8) // write the next 8 bytes - } - - // Add newLocalExitRoot - for { - let i := 0 - } lt(i, 8) { - i := add(i, 1) - } { - mstore( - ptr, - shr(32, shl(224, shr(mul(i, 32), newLocalExitRoot))) - ) - ptr := add(ptr, 8) // write the next 8 bytes - } - - // add firstNumBatch - mstore(ptr, shl(192, _lastVerifiedBatch)) // 256 - 64 = 192 - ptr := add(ptr, 8) - - // add lastNumBatch - mstore(ptr, shl(192, newVerifiedBatch)) // 256 - 64 = 192 - ptr := add(ptr, 8) - - // add chainID - mstore(ptr, shl(192, sload(chainID.slot))) // 256 - 64 = 192 - ptr := add(ptr, 8) - - // add aggregator address - mstore(ptr, shl(96, caller())) // 256 - 160 = 96 - ptr := add(ptr, 20) - } - // Calulate the snark input uint256 inputSnark = uint256(sha256(snarkHashBytes)) % _RFIELD; @@ -700,7 +582,12 @@ contract ProofOfEfficiency is Initializable { return currentBalance / totalBatchesToVerify; } - function calculateInputSnark(bytes32 newStateRoot, bytes32 oldAccInputHash, ) { + function getInputSnarkBytes( + uint64 _lastVerifiedBatch, + uint64 newVerifiedBatch, + bytes32 newLocalExitRoot, + bytes32 newStateRoot + ) public view returns (bytes memory) { bytes32 oldAccInputHash = sequencedBatches[_lastVerifiedBatch]; bytes32 newAccInputHash = sequencedBatches[newVerifiedBatch]; @@ -709,7 +596,7 @@ contract ProofOfEfficiency is Initializable { "ProofOfEfficiency::verifyBatch: newAccInputHash does not exist" ); - bytes memory snarkHashBytes; + bytes memory snarkHashBytes; assembly { // Set snarkHashBytes to the next free memory pointer snarkHashBytes := mload(0x40) @@ -825,5 +712,6 @@ contract ProofOfEfficiency is Initializable { mstore(ptr, shl(96, caller())) // 256 - 160 = 96 ptr := add(ptr, 20) } + return snarkHashBytes; } } diff --git a/contracts/mocks/ProofOfEfficiencyMock.sol b/contracts/mocks/ProofOfEfficiencyMock.sol index 68e9efe30..baa4b7794 100644 --- a/contracts/mocks/ProofOfEfficiencyMock.sol +++ b/contracts/mocks/ProofOfEfficiencyMock.sol @@ -46,244 +46,70 @@ contract ProofOfEfficiencyMock is ProofOfEfficiency, OwnableUpgradeable { } /** - * @notice Calculate the stark input - * @param currentStateRoot Current state Root - * @param currentLocalExitRoot Current local exit root - * @param newStateRoot New State root once the batch is processed - * @param newLocalExitRoot New local exit root once the batch is processed - * @param batchHashData Batch hash data - * @param numBatch num batch - * @param timestamp unix timestamp - * @param chainID L2 chain ID + * @notice calculate accumulate input hash from parameters + * @param currentAccInputHash Accumulate input hash + * @param transactions Transactions + * @param globalExitRoot Global Exit Root + * @param timestamp Timestamp + * @param sequencerAddress Sequencer address */ - function calculateStarkInput( - bytes32 currentStateRoot, - bytes32 currentLocalExitRoot, - bytes32 newStateRoot, - bytes32 newLocalExitRoot, - bytes32 batchHashData, - uint64 numBatch, + function calculateAccInputHash( + bytes32 currentAccInputHash, + bytes memory transactions, + bytes32 globalExitRoot, uint64 timestamp, - uint64 chainID + address sequencerAddress ) public pure returns (bytes32) { - bytes32 input = keccak256( - abi.encodePacked( - currentStateRoot, - currentLocalExitRoot, - newStateRoot, - newLocalExitRoot, - batchHashData, - numBatch, - timestamp, - chainID - ) - ); - return input; + return + keccak256( + abi.encodePacked( + currentAccInputHash, + keccak256(transactions), + globalExitRoot, + timestamp, + sequencerAddress + ) + ); } /** - * @notice Calculate the snark input - * @param currentStateRoot Current state Root - * @param currentLocalExitRoot Current local exit root - * @param newStateRoot New State root once the batch is processed + * @notice Return the next snark input + * @param _lastVerifiedBatch Last verified Batch, used as a sanity check + * @param newVerifiedBatch Last batch that the aggregator intends to verify * @param newLocalExitRoot New local exit root once the batch is processed - * @param batchHashData Batch hash data - * @param numBatch num batch - * @param timestamp unix timestamp - * @param chainID L2 chain ID - * @param aggregatorAddress aggregatorAddress - */ - function calculateSnarkInput( - bytes32 currentStateRoot, - bytes32 currentLocalExitRoot, - bytes32 newStateRoot, - bytes32 newLocalExitRoot, - bytes32 batchHashData, - uint64 numBatch, - uint64 timestamp, - uint64 chainID, - address aggregatorAddress - ) public pure returns (uint256) { - bytes32 inputStark = calculateStarkInput( - currentStateRoot, - currentLocalExitRoot, - newStateRoot, - newLocalExitRoot, - batchHashData, - numBatch, - timestamp, - chainID - ); - - bytes memory snarkHashBytes; - assembly { - // Set snarkHashBytes to the next free memory space - snarkHashBytes := mload(0x40) - - // Reserve the memory. 32 for the length , the input bytes and 32 - // extra bytes at the end for word manipulation - mstore(0x40, add(add(snarkHashBytes, 0x40), _SNARK_SHA_BYTES)) - - // Set the actua length of the input bytes - mstore(snarkHashBytes, _SNARK_SHA_BYTES) - - // Set the pointer at the begining of the byte array - let ptr := add(snarkHashBytes, 32) - - // store aggregator address - mstore(ptr, shl(96, aggregatorAddress)) // 256 - 160 = 96 - ptr := add(ptr, 20) - - for { - let i := 0 - } lt(i, 8) { - i := add(i, 1) - } { - // Every iteration will write 4 bytes (32 bits) from inputStark padded to 8 bytes, in little endian format - // First shift right i*32 bits, in order to have the next 4 bytes to write at the end of the byte array - // Then shift left 256 - 32 (224) bits to the left. - // AS a result the first 4 bytes will be the next ones, and the rest of the bytes will be zeroes - // Finally the result is shifted 32 bits for the padding, and stores in the current position of the pointer - mstore(ptr, shr(32, shl(224, shr(mul(i, 32), inputStark)))) - ptr := add(ptr, 8) // write the next 8 bytes - } - } - uint256 inputSnark = uint256(sha256(snarkHashBytes)) % _RFIELD; - - return inputSnark; - } - - /** - * @notice Calculate the circuit input * @param newStateRoot New State root once the batch is processed - * @param newLocalExitRoot New local exit root once the batch is processed - * @param numBatch Batch number that the aggregator intends to verify, used as a sanity check */ function getNextSnarkInput( + uint64 _lastVerifiedBatch, + uint64 newVerifiedBatch, bytes32 newLocalExitRoot, - bytes32 newStateRoot, - uint64 numBatch - ) public view returns (uint256) { + bytes32 newStateRoot + ) public view returns (bytes32) { // sanity check require( - numBatch == lastVerifiedBatch + 1, - "ProofOfEfficiency::verifyBatch: BATCH_DOES_NOT_MATCH" + _lastVerifiedBatch == lastVerifiedBatch, + "ProofOfEfficiency::verifyBatch: _lastVerifiedBatch does not match" ); - // Calculate Circuit Input - uint64 timestamp = sequencedBatches[numBatch].timestamp; - bytes32 batchHashData; - uint256 maticFee; - - // If it's a force batch, forcebatchNum indicates which one is, otherwise is a regular batch - if (sequencedBatches[numBatch].forceBatchNum == 0) { - batchHashData = sequencedBatches[numBatch].batchHashData; - maticFee = TRUSTED_SEQUENCER_FEE; - } else { - ForcedBatchData memory currentForcedBatch = forcedBatches[ - sequencedBatches[numBatch].forceBatchNum - ]; - batchHashData = currentForcedBatch.batchHashData; - maticFee = currentForcedBatch.maticFee; - } - - bytes32 inputStark = keccak256( - abi.encodePacked( - currentStateRoot, - currentLocalExitRoot, - newStateRoot, - newLocalExitRoot, - batchHashData, - numBatch, - timestamp, - chainID - ) + require( + newVerifiedBatch > _lastVerifiedBatch, + "ProofOfEfficiency::verifyBatch: last numBatch must be bigger than lastVerifiedBatch" ); - bytes memory snarkHashBytes; - - assembly { - // Set snarkHashBytes to the next free memory space - snarkHashBytes := mload(0x40) - - // Reserve the memory. 32 for the length , the input bytes and 32 - // extra bytes at the end for word manipulation - mstore(0x40, add(add(snarkHashBytes, 0x40), _SNARK_SHA_BYTES)) - - // Set the actua length of the input bytes - mstore(snarkHashBytes, _SNARK_SHA_BYTES) - - // Set the pointer at the begining of the byte array - let ptr := add(snarkHashBytes, 32) - - // store aggregator address - mstore(ptr, shl(96, caller())) // 256 - 160 = 96 - ptr := add(ptr, 20) - - for { - let i := 0 - } lt(i, 8) { - i := add(i, 1) - } { - // Every iteration will write 4 bytes (32 bits) from inputStark padded to 8 bytes, in little endian format - // First shift right i*32 bits, in order to have the next 4 bytes to write at the end of the byte array - // Then shift left 256 - 32 (224) bits to the left. - // AS a result the first 4 bytes will be the next ones, and the rest of the bytes will be zeroes - // Finally the result is shifted 32 bits for the padding, and stores in the current position of the pointer - mstore(ptr, shr(32, shl(224, shr(mul(i, 32), inputStark)))) - ptr := add(ptr, 8) // write the next 8 bytes - } - } - uint256 inputSnark = uint256(sha256(snarkHashBytes)) % _RFIELD; - - return inputSnark; - } - - /** - * @notice Return the input hash parameters - * @param newStateRoot New State root once the batch is processed - * @param newLocalExitRoot New local exit root once the batch is processed - * @param numBatch Batch number that the aggregator intends to verify, used as a sanity check - */ - function returnInputHashParameters( - bytes32 newLocalExitRoot, - bytes32 newStateRoot, - uint32 numBatch - ) public view returns (bytes memory) { - // sanity check require( - numBatch == lastVerifiedBatch + 1, - "ProofOfEfficiency::verifyBatch: BATCH_DOES_NOT_MATCH" + newVerifiedBatch <= _lastVerifiedBatch, + "ProofOfEfficiency::verifyBatch: batch does not have been sequenced" ); - // Calculate Circuit Input - uint64 timestamp = sequencedBatches[numBatch].timestamp; - bytes32 batchHashData; - uint256 maticFee; - - // If it's a force batch, forcebatchNum indicates which one is, otherwise is a regular batch - if (sequencedBatches[numBatch].forceBatchNum == 0) { - batchHashData = sequencedBatches[numBatch].batchHashData; - maticFee = TRUSTED_SEQUENCER_FEE; - } else { - ForcedBatchData memory currentForcedBatch = forcedBatches[ - sequencedBatches[numBatch].forceBatchNum - ]; - batchHashData = currentForcedBatch.batchHashData; - maticFee = currentForcedBatch.maticFee; - } + bytes memory snarkHashBytes = getInputSnarkBytes( + _lastVerifiedBatch, + newVerifiedBatch, + newLocalExitRoot, + newStateRoot + ); - return - abi.encodePacked( - currentStateRoot, - currentLocalExitRoot, - newStateRoot, - newLocalExitRoot, - batchHashData, - numBatch, - timestamp, - chainID - ); + uint256 inputSnark = uint256(sha256(snarkHashBytes)) % _RFIELD; + return bytes32(inputSnark); } /** @@ -294,14 +120,6 @@ contract ProofOfEfficiencyMock is ProofOfEfficiency, OwnableUpgradeable { currentStateRoot = newStateRoot; } - /** - * @notice Set Exit Root - * @param newLocalExitRoot New exit root ¡ - */ - function setExitRoot(bytes32 newLocalExitRoot) public onlyOwner { - currentLocalExitRoot = newLocalExitRoot; - } - /** * @notice Set Sequencer * @param _rollupVerifier New verifier @@ -369,7 +187,6 @@ contract ProofOfEfficiencyMock is ProofOfEfficiency, OwnableUpgradeable { "ProofOfEfficiency::verifyBatch: batch does not have been sequenced" ); - bytes32 oldAccInputHash = sequencedBatches[_lastVerifiedBatch]; bytes32 newAccInputHash = sequencedBatches[newVerifiedBatch]; require( @@ -377,11 +194,11 @@ contract ProofOfEfficiencyMock is ProofOfEfficiency, OwnableUpgradeable { "ProofOfEfficiency::verifyBatch: newAccInputHash does not exist" ); - // Get MATIC reward - matic.safeTransfer( - msg.sender, - calculateRewardPerBatch() * (newVerifiedBatch - _lastVerifiedBatch) - ); + // // Get MATIC reward + // matic.safeTransfer( + // msg.sender, + // calculateRewardPerBatch() * (newVerifiedBatch - _lastVerifiedBatch) + // ); // Update state lastVerifiedBatch = newVerifiedBatch; From 6ce297c656ba190aa43f93a5b0c7c71ce6716596 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Mon, 24 Oct 2022 18:49:29 +0200 Subject: [PATCH 05/71] almost there --- contracts/ProofOfEfficiency.sol | 41 +++---- contracts/mocks/ProofOfEfficiencyMock.sol | 24 +++- test/contracts/bridge.test.js | 115 ++++++++++++++++--- test/contracts/bridgeMock.test.js | 10 +- test/contracts/depositContractMock.test.js | 10 +- test/contracts/proofOfEfficiency.test.js | 122 +++++++++++---------- test/contracts/snark_stark_input.test.js | 109 +++++++++--------- 7 files changed, 281 insertions(+), 150 deletions(-) diff --git a/contracts/ProofOfEfficiency.sol b/contracts/ProofOfEfficiency.sol index c65a848dd..4cce695a2 100644 --- a/contracts/ProofOfEfficiency.sol +++ b/contracts/ProofOfEfficiency.sol @@ -6,6 +6,7 @@ import "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20Burnable import "./interfaces/IVerifierRollup.sol"; import "./interfaces/IGlobalExitRootManager.sol"; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import "hardhat/console.sol"; /** * Contract responsible for managing the states and the updates of L2 network @@ -257,6 +258,21 @@ contract ProofOfEfficiency is Initializable { currentBatch.timestamp >= currentBatch.minForcedTimestamp, "ProofOfEfficiency::sequenceBatches: Forced batches timestamp must be bigger or equal than min" ); + } else { + // Check global exit root exist, and proper batch length, this checks are already done in the force Batches call + require( + currentBatch.globalExitRoot == bytes32(0) || + globalExitRootManager.globalExitRootMap( + currentBatch.globalExitRoot + ) != + 0, + "ProofOfEfficiency::sequenceBatches: Global exit root must exist" + ); + + require( + currentBatch.transactions.length < MAX_BATCH_LENGTH, + "ProofOfEfficiency::sequenceBatches: Transactions bytes overflow" + ); } // Check Batch parameters are correct @@ -266,20 +282,6 @@ contract ProofOfEfficiency is Initializable { "ProofOfEfficiency::sequenceBatches: Timestamp must be inside range" ); - require( - currentBatch.globalExitRoot == bytes32(0) || - globalExitRootManager.globalExitRootMap( - currentBatch.globalExitRoot - ) != - 0, - "ProofOfEfficiency::sequenceBatches: Global exit root must exist" - ); - - require( - currentBatch.transactions.length < MAX_BATCH_LENGTH, - "ProofOfEfficiency::sequenceBatches: Transactions bytes overflow" - ); - // Calculate next acc input hash currentAccInputHash = keccak256( abi.encodePacked( @@ -298,7 +300,7 @@ contract ProofOfEfficiency is Initializable { currentTimestamp = currentBatch.timestamp; } - // This check is done here just once for gas saving + // Sanity check, should not be accesible never require( currentLastForceBatchSequenced <= lastForceBatch, "ProofOfEfficiency::sequenceBatches: Force batches overflow" @@ -350,11 +352,11 @@ contract ProofOfEfficiency is Initializable { require( newVerifiedBatch > _lastVerifiedBatch, - "ProofOfEfficiency::verifyBatch: last numBatch must be bigger than lastVerifiedBatch" + "ProofOfEfficiency::verifyBatch: newVerifiedBatch must be bigger than lastVerifiedBatch" ); require( - newVerifiedBatch <= _lastVerifiedBatch, + newVerifiedBatch <= lastBatchSequenced, "ProofOfEfficiency::verifyBatch: batch does not have been sequenced" ); @@ -421,11 +423,12 @@ contract ProofOfEfficiency is Initializable { // Update forcedBatches mapping lastForceBatch++; + forcedBatches[lastForceBatch] = keccak256( abi.encodePacked( keccak256(transactions), lastGlobalExitRoot, - block.timestamp + uint64(block.timestamp) ) ); @@ -593,7 +596,7 @@ contract ProofOfEfficiency is Initializable { require( newAccInputHash != bytes32(0), - "ProofOfEfficiency::verifyBatch: newAccInputHash does not exist" + "ProofOfEfficiency::getInputSnarkBytes: newAccInputHash does not exist" ); bytes memory snarkHashBytes; diff --git a/contracts/mocks/ProofOfEfficiencyMock.sol b/contracts/mocks/ProofOfEfficiencyMock.sol index baa4b7794..9bf61d0c1 100644 --- a/contracts/mocks/ProofOfEfficiencyMock.sol +++ b/contracts/mocks/ProofOfEfficiencyMock.sol @@ -84,7 +84,7 @@ contract ProofOfEfficiencyMock is ProofOfEfficiency, OwnableUpgradeable { uint64 newVerifiedBatch, bytes32 newLocalExitRoot, bytes32 newStateRoot - ) public view returns (bytes32) { + ) public view returns (uint256) { // sanity check require( _lastVerifiedBatch == lastVerifiedBatch, @@ -93,11 +93,11 @@ contract ProofOfEfficiencyMock is ProofOfEfficiency, OwnableUpgradeable { require( newVerifiedBatch > _lastVerifiedBatch, - "ProofOfEfficiency::verifyBatch: last numBatch must be bigger than lastVerifiedBatch" + "ProofOfEfficiency::verifyBatch: newVerifiedBatch must be bigger than lastVerifiedBatch" ); require( - newVerifiedBatch <= _lastVerifiedBatch, + newVerifiedBatch <= lastBatchSequenced, "ProofOfEfficiency::verifyBatch: batch does not have been sequenced" ); @@ -109,7 +109,7 @@ contract ProofOfEfficiencyMock is ProofOfEfficiency, OwnableUpgradeable { ); uint256 inputSnark = uint256(sha256(snarkHashBytes)) % _RFIELD; - return bytes32(inputSnark); + return inputSnark; } /** @@ -152,6 +152,18 @@ contract ProofOfEfficiencyMock is ProofOfEfficiency, OwnableUpgradeable { networkName = _networkName; } + /** + * @notice Set sequencedBatches + * @param batchNum bathc num + * @param accInputData accInputData + */ + function setSequencedBatches(uint64 batchNum, bytes32 accInputData) + public + onlyOwner + { + sequencedBatches[batchNum] = accInputData; + } + /** * @notice Allows an aggregator mock to verify a batch * @param _lastVerifiedBatch Last verified Batch, used as a sanity check @@ -179,11 +191,11 @@ contract ProofOfEfficiencyMock is ProofOfEfficiency, OwnableUpgradeable { require( newVerifiedBatch > _lastVerifiedBatch, - "ProofOfEfficiency::verifyBatch: last numBatch must be bigger than lastVerifiedBatch" + "ProofOfEfficiency::verifyBatch: newVerifiedBatch must be bigger than lastVerifiedBatch" ); require( - newVerifiedBatch <= _lastVerifiedBatch, + newVerifiedBatch <= lastBatchSequenced, "ProofOfEfficiency::verifyBatch: batch does not have been sequenced" ); diff --git a/test/contracts/bridge.test.js b/test/contracts/bridge.test.js index a83528b37..594656cb5 100644 --- a/test/contracts/bridge.test.js +++ b/test/contracts/bridge.test.js @@ -570,22 +570,87 @@ describe('Bridge Contract', () => { const metadata = '0x';// since is ether does not have metadata // create 3 new deposit - await expect(bridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x', { value: amount })) - .to.emit(bridgeContract, 'BridgeEvent') - .withArgs(LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount); - await expect(bridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x', { value: amount })) - .to.emit(bridgeContract, 'BridgeEvent') - .withArgs(LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount.add(1)); - await expect(bridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x', { value: amount })) - .to.emit(bridgeContract, 'BridgeEvent') - .withArgs(LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount.add(2)); + await expect(bridgeContract.bridgeAsset( + tokenAddress, + destinationNetwork, + destinationAddress, + amount, + '0x', + { value: amount }, + )) + .to.emit( + bridgeContract, + 'BridgeEvent', + ) + .withArgs( + LEAF_TYPE_ASSET, + originNetwork, + tokenAddress, + destinationNetwork, + destinationAddress, + amount, + metadata, + depositCount, + ); + + await expect(bridgeContract.bridgeAsset( + tokenAddress, + destinationNetwork, + destinationAddress, + amount, + '0x', + { value: amount }, + )) + .to.emit( + bridgeContract, + 'BridgeEvent', + ) + .withArgs( + LEAF_TYPE_ASSET, + originNetwork, + tokenAddress, + destinationNetwork, + destinationAddress, + amount, + metadata, + depositCount.add(1), + ); + + await expect(bridgeContract.bridgeAsset( + tokenAddress, + destinationNetwork, + destinationAddress, + amount, + '0x', + { value: amount }, + )) + .to.emit( + bridgeContract, + 'BridgeEvent', + ) + .withArgs( + LEAF_TYPE_ASSET, + originNetwork, + tokenAddress, + destinationNetwork, + destinationAddress, + amount, + metadata, + depositCount.add(2), + ); // Prepare merkle tree const height = 32; const merkleTree = new MerkleTreeBridge(height); // Get the deposit's events - const filter = bridgeContract.filters.BridgeEvent(null, null, null, null, null); + const filter = bridgeContract.filters.BridgeEvent( + null, + null, + null, + null, + null, + ); const events = await bridgeContract.queryFilter(filter, 0, 'latest'); events.forEach((e) => { const { args } = e; @@ -625,7 +690,15 @@ describe('Bridge Contract', () => { // compute root merkle tree in Js const height = 32; const merkleTree = new MerkleTreeBridge(height); - const leafValue = getLeafValue(LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadataHash); + const leafValue = getLeafValue( + LEAF_TYPE_ASSET, + originNetwork, + tokenAddress, + destinationNetwork, + destinationAddress, + amount, + metadataHash, + ); merkleTree.add(leafValue); // check merkle root with SC @@ -772,7 +845,15 @@ describe('Bridge Contract', () => { // compute root merkle tree in Js const height = 32; const merkleTree = new MerkleTreeBridge(height); - const leafValue = getLeafValue(LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadataHash); + const leafValue = getLeafValue( + LEAF_TYPE_ASSET, + originNetwork, + tokenAddress, + destinationNetwork, + destinationAddress, + amount, + metadataHash, + ); merkleTree.add(leafValue); // check merkle root with SC @@ -916,7 +997,15 @@ describe('Bridge Contract', () => { // compute root merkle tree in Js const height = 32; const merkleTree = new MerkleTreeBridge(height); - const leafValue = getLeafValue(MESSAGE_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadataHash); + const leafValue = getLeafValue( + MESSAGE_TYPE_ASSET, + originNetwork, + tokenAddress, + destinationNetwork, + destinationAddress, + amount, + metadataHash, + ); merkleTree.add(leafValue); // check merkle root with SC diff --git a/test/contracts/bridgeMock.test.js b/test/contracts/bridgeMock.test.js index 04fb7f081..708b6cb11 100644 --- a/test/contracts/bridgeMock.test.js +++ b/test/contracts/bridgeMock.test.js @@ -94,7 +94,15 @@ describe('Bridge Contract', () => { // pre compute root merkle tree in Js const height = 32; const merkleTree = new MerkleTreeBridge(height); - const leafValue = getLeafValue(LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadataHash); + const leafValue = getLeafValue( + LEAF_TYPE_ASSET, + originNetwork, + tokenAddress, + destinationNetwork, + destinationAddress, + amount, + metadataHash, + ); merkleTree.add(leafValue); const rootJSMainnet = merkleTree.getRoot(); diff --git a/test/contracts/depositContractMock.test.js b/test/contracts/depositContractMock.test.js index 6c592ac84..35fae5fe6 100644 --- a/test/contracts/depositContractMock.test.js +++ b/test/contracts/depositContractMock.test.js @@ -32,7 +32,15 @@ describe('Deposit Contract', () => { const destinationAddress = deployer.address; const metadataHash = ethers.utils.hexlify(ethers.utils.randomBytes(32)); - await depositContractMock.deposit(LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadataHash); + await depositContractMock.deposit( + LEAF_TYPE_ASSET, + originNetwork, + tokenAddress, + destinationNetwork, + destinationAddress, + amount, + metadataHash, + ); // compute root merkle tree in Js const height = 32; diff --git a/test/contracts/proofOfEfficiency.test.js b/test/contracts/proofOfEfficiency.test.js index b23525744..bffcda5c1 100644 --- a/test/contracts/proofOfEfficiency.test.js +++ b/test/contracts/proofOfEfficiency.test.js @@ -3,7 +3,7 @@ const { ethers, upgrades } = require('hardhat'); const { contractUtils } = require('@0xpolygonhermez/zkevm-commonjs'); -const { calculateSnarkInput, calculateBatchHashData, calculateStarkInput } = contractUtils; +const { calculateSnarkInput, calculateAccInputHash, calculateBatchHashData } = contractUtils; describe('Proof of efficiency', () => { let deployer; @@ -127,7 +127,7 @@ describe('Proof of efficiency', () => { transactions: l2txData, globalExitRoot: ethers.constants.HashZero, timestamp: ethers.BigNumber.from(currentTimestamp), - forceBatchesTimestamp: [], + minForcedTimestamp: 0, }; // revert because sender is not super sequencer @@ -162,15 +162,16 @@ describe('Proof of efficiency', () => { ); // Check batch mapping - const batchStruct = await proofOfEfficiencyContract.sequencedBatches(1); + const batchAccInputHash = await proofOfEfficiencyContract.sequencedBatches(1); - expect(batchStruct.timestamp).to.be.equal(sequence.timestamp); - const batchHashData = calculateBatchHashData( - sequence.transactions, + const batchAccInputHashJs = calculateAccInputHash( + await proofOfEfficiencyContract.sequencedBatches(0), + calculateBatchHashData(sequence.transactions), sequence.globalExitRoot, + sequence.timestamp, trustedSequencer.address, ); - expect(batchStruct.batchHashData).to.be.equal(batchHashData); + expect(batchAccInputHash).to.be.equal(batchAccInputHashJs); }); it('sequenceBatches should sequence multiple batches', async () => { @@ -183,14 +184,14 @@ describe('Proof of efficiency', () => { transactions: l2txData, globalExitRoot: ethers.constants.HashZero, timestamp: currentTimestamp, - forceBatchesTimestamp: [], + minForcedTimestamp: 0, }; const sequence2 = { transactions: l2txData, globalExitRoot: ethers.constants.HashZero, timestamp: currentTimestamp, - forceBatchesTimestamp: [], + minForcedTimestamp: 0, }; const initialOwnerBalance = await maticTokenContract.balanceOf( @@ -218,23 +219,31 @@ describe('Proof of efficiency', () => { ); // Check batch mapping - const batchStruct = await proofOfEfficiencyContract.sequencedBatches(1); - expect(batchStruct.timestamp).to.be.equal(sequence.timestamp); - const batchHashData = calculateBatchHashData( - sequence.transactions, + let batchAccInputHash = await proofOfEfficiencyContract.sequencedBatches(1); + + // Only last batch is added to the mapping + expect(batchAccInputHash).to.be.equal(ethers.constants.HashZero); + + batchAccInputHash = await proofOfEfficiencyContract.sequencedBatches(2); + + // Calcultate input Hahs for batch 1 + let batchAccInputHashJs = calculateAccInputHash( + ethers.constants.HashZero, + calculateBatchHashData(sequence.transactions), sequence.globalExitRoot, + sequence.timestamp, trustedSequencer.address, ); - expect(batchStruct.batchHashData).to.be.equal(batchHashData); - const batchStruct2 = await proofOfEfficiencyContract.sequencedBatches(2); - expect(batchStruct2.timestamp).to.be.equal(sequence2.timestamp); - const batchHashData2 = calculateBatchHashData( - sequence2.transactions, + // Calcultate input Hahs for batch 2 + batchAccInputHashJs = calculateAccInputHash( + batchAccInputHashJs, + calculateBatchHashData(sequence2.transactions), sequence2.globalExitRoot, + sequence2.timestamp, trustedSequencer.address, ); - expect(batchStruct2.batchHashData).to.be.equal(batchHashData2); + expect(batchAccInputHash).to.be.equal(batchAccInputHashJs); }); it('sequenceBatches should sequence multiple batches and force batches', async () => { @@ -253,26 +262,24 @@ describe('Proof of efficiency', () => { .to.emit(proofOfEfficiencyContract, 'ForceBatch') .withArgs(lastForcedBatch, lastGlobalExitRoot, deployer.address, '0x'); - const forcedTimestamp = (await proofOfEfficiencyContract.forcedBatches(lastForcedBatch)).minTimestamp; - // sequence 2 batches const l2txData = '0x1234'; - const maticAmountSequence = (await proofOfEfficiencyContract.TRUSTED_SEQUENCER_FEE()).mul(2); + const maticAmountSequence = (await proofOfEfficiencyContract.TRUSTED_SEQUENCER_FEE()).mul(1); const currentTimestamp = (await ethers.provider.getBlock()).timestamp; const sequence = { - transactions: l2txData, - globalExitRoot: ethers.constants.HashZero, + transactions: l2txDataForceBatch, + globalExitRoot: lastGlobalExitRoot, timestamp: currentTimestamp, - forceBatchesTimestamp: [currentTimestamp], + minForcedTimestamp: currentTimestamp, }; const sequence2 = { transactions: l2txData, globalExitRoot: ethers.constants.HashZero, timestamp: currentTimestamp, - forceBatchesTimestamp: [], + minForcedTimestamp: 0, }; const initialOwnerBalance = await maticTokenContract.balanceOf( @@ -287,35 +294,30 @@ describe('Proof of efficiency', () => { const lastBatchSequenced = await proofOfEfficiencyContract.lastBatchSequenced(); // Assert that the timestamp requirements must accomplish with force batches too - sequence.forceBatchesTimestamp[0] += 1; + sequence.minForcedTimestamp += 1; await expect(proofOfEfficiencyContract.connect(trustedSequencer).sequenceBatches([sequence, sequence2])) - .to.be.revertedWith('ProofOfEfficiency::sequenceBatches: Timestamp must be inside range'); - sequence.forceBatchesTimestamp[0] -= 1; + .to.be.revertedWith('ProofOfEfficiency::sequenceBatches: Forced batches data must match'); + sequence.minForcedTimestamp -= 1; - sequence.forceBatchesTimestamp[0] -= 1; + sequence.timestamp -= 1; await expect(proofOfEfficiencyContract.connect(trustedSequencer).sequenceBatches([sequence, sequence2])) - .to.be.revertedWith('ProofOfEfficiency::sequenceBatches: Forced batches timestamp must be inside range'); - sequence.forceBatchesTimestamp[0] += 1; + .to.be.revertedWith('ProofOfEfficiency::sequenceBatches: Forced batches timestamp must be bigger or equal than min'); + sequence.timestamp += 1; - // Assert force batch must be at least the minTimestamp - sequence.timestamp = forcedTimestamp - 1; - sequence.forceBatchesTimestamp[0] = forcedTimestamp - 1; + sequence.timestamp = currentTimestamp + 10; await expect(proofOfEfficiencyContract.connect(trustedSequencer).sequenceBatches([sequence, sequence2])) - .to.be.revertedWith('ProofOfEfficiency::sequenceBatches: Forced batches timestamp must be inside range'); + .to.be.revertedWith('ProofOfEfficiency::sequenceBatches: Timestamp must be inside range'); sequence.timestamp = currentTimestamp; - sequence.forceBatchesTimestamp[0] = currentTimestamp; - // Assert force batch cant pop more batches than queued - sequence.forceBatchesTimestamp.push(currentTimestamp); + sequence2.timestamp -= 1; await expect(proofOfEfficiencyContract.connect(trustedSequencer).sequenceBatches([sequence, sequence2])) - .to.be.revertedWith('ProofOfEfficiency::sequenceBatches: Force batches overflow'); - sequence.timestamp = currentTimestamp; - sequence.forceBatchesTimestamp.pop(); + .to.be.revertedWith('ProofOfEfficiency::sequenceBatches: Timestamp must be inside range'); + sequence2.timestamp += 1; // Sequence Bathces await expect(proofOfEfficiencyContract.connect(trustedSequencer).sequenceBatches([sequence, sequence2])) .to.emit(proofOfEfficiencyContract, 'SequenceBatches') - .withArgs(lastBatchSequenced + 3); + .withArgs(Number(lastBatchSequenced) + 2); const finalOwnerBalance = await maticTokenContract.balanceOf( await trustedSequencer.getAddress(), @@ -326,28 +328,32 @@ describe('Proof of efficiency', () => { ); // Check batch mapping - const batchStruct = await proofOfEfficiencyContract.sequencedBatches(1); - expect(batchStruct.timestamp).to.be.equal(sequence.timestamp); - const batchHashData = calculateBatchHashData( - sequence.transactions, + let batchAccInputHash = await proofOfEfficiencyContract.sequencedBatches(1); + // Only last batch is added to the mapping + expect(batchAccInputHash).to.be.equal(ethers.constants.HashZero); + + /* + * Check batch mapping + * Calcultate input Hahs for batch 1 + */ + let batchAccInputHashJs = calculateAccInputHash( + ethers.constants.HashZero, + calculateBatchHashData(sequence.transactions), sequence.globalExitRoot, + sequence.timestamp, trustedSequencer.address, ); - expect(batchStruct.batchHashData).to.be.equal(batchHashData); - - const batchStruct2 = await proofOfEfficiencyContract.sequencedBatches(2); - expect(batchStruct2.timestamp).to.be.equal(sequence.forceBatchesTimestamp[0]); - expect(batchStruct2.batchHashData).to.be.equal(ethers.utils.hexZeroPad(0, 32)); - expect(batchStruct2.forceBatchNum).to.be.equal(1); - const batchStruct3 = await proofOfEfficiencyContract.sequencedBatches(3); - expect(batchStruct3.timestamp).to.be.equal(sequence2.timestamp); - const batchHashData3 = calculateBatchHashData( - sequence2.transactions, + // Calcultate input Hahs for batch 2 + batchAccInputHashJs = calculateAccInputHash( + batchAccInputHashJs, + calculateBatchHashData(sequence2.transactions), sequence2.globalExitRoot, + sequence2.timestamp, trustedSequencer.address, ); - expect(batchStruct3.batchHashData).to.be.equal(batchHashData3); + batchAccInputHash = await proofOfEfficiencyContract.sequencedBatches(2); + expect(batchAccInputHash).to.be.equal(batchAccInputHashJs); }); it('sequenceBatches should check the timestamp correctly', async () => { diff --git a/test/contracts/snark_stark_input.test.js b/test/contracts/snark_stark_input.test.js index 41f3fdcb5..b30ffae19 100644 --- a/test/contracts/snark_stark_input.test.js +++ b/test/contracts/snark_stark_input.test.js @@ -3,20 +3,20 @@ const { ethers, upgrades } = require('hardhat'); const { contractUtils } = require('@0xpolygonhermez/zkevm-commonjs'); -const { calculateSnarkInput, calculateStarkInput } = contractUtils; - describe('Proof of efficiency snark stark input test', () => { let proofOfEfficiencyContract; const genesisRoot = ethers.constants.HashZero; + let randomSigner; const allowForcebatches = true; const urlSequencer = 'http://zkevm-json-rpc:8123'; const chainID = 1000; const networkName = 'zkevm'; + const batchL2Data = '0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e880801cee7e01dc62f69a12c3510c6d64de04ee6346d84b6a017f3e786c7d87f963e75d8cc91fa983cd6d9cf55fff80d73bd26cd333b0f098acc1e58edb1fd484ad731b'; beforeEach('Deploy contract', async () => { // load signers - const [randomSigner] = await ethers.getSigners(); + [randomSigner] = await ethers.getSigners(); // deploy proof of efficiency const ProofOfEfficiencyFactory = await ethers.getContractFactory('ProofOfEfficiencyMock'); @@ -37,72 +37,77 @@ describe('Proof of efficiency snark stark input test', () => { await proofOfEfficiencyContract.deployed(); }); + it('Check Accumualte input Hash', async () => { + const oldAccInputHash = '0x0000000000000000000000000000000000000000000000000000000000000000'; + const globalExitRoot = '0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9'; + const timestamp = 1944498031; + const sequencerAddr = '0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D'; + const expectedStarkHashExecutor = '0x704d5cfd3e44b82028f7f8cae31168267a7422c5a447b90a65134116da5a8432'; + + const batchL2DataHash = contractUtils.calculateBatchHashData(batchL2Data); + const accumulateInputHashJs = await contractUtils.calculateAccInputHash( + oldAccInputHash, + batchL2DataHash, + globalExitRoot, + timestamp, + sequencerAddr, + ); + const accumulateInputHashSC = await proofOfEfficiencyContract.calculateAccInputHash( + oldAccInputHash, + batchL2Data, + globalExitRoot, + timestamp, + sequencerAddr, + ); + expect(accumulateInputHashJs).to.be.equal(accumulateInputHashSC); + expect(accumulateInputHashSC).to.be.equal(expectedStarkHashExecutor); + }); it('Check commonjs unit test', async () => { // Unit test taken from https://github.com/0xPolygonHermez/zkevm-commonjs/blob/main/test/contract-utils.test.js#L16 - const currentStateRoot = '0x2dc4db4293af236cb329700be43f08ace740a05088f8c7654736871709687e90'; - const currentLocalExitRoot = '0x17c04c3760510b48c6012742c540a81aba4bca2f78b9d14bfd2f123e2e53ea3e'; + const oldStateRoot = '0x2dc4db4293af236cb329700be43f08ace740a05088f8c7654736871709687e90'; const newStateRoot = '0xbff23fc2c168c033aaac77503ce18f958e9689d5cdaebb88c5524ce5c0319de3'; const newLocalExitRoot = '0x0000000000000000000000000000000000000000000000000000000000000000'; - const batchHashData = '0x9370689d3c20a5a4739f902a31e2ea20c7d7be121a0fc19468a2e1b5d87f4111'; - const numBatch = 1; - const sequencedTimestmap = 1944498031; + const oldAccInputHash = '0x0000000000000000000000000000000000000000000000000000000000000000'; + const newAccInputHash = '0x2c9d2c1b2ed8e4be0719f443235c3483f8d6288c6d057859e7210fe39acce682'; + const oldNumBatch = 0; + const newNumBatch = 1; const aggregatorAddress = '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266'; + const expectedSnarkInputHash = '17495784446398463565336850903556670302680818979009718931527636126247722947873'; - const expectedSnarkInput = '10255818422543031151914919891467894274520264482506602925880735498991910195507'; - const expectedStarkInput = '0x55f4c373d62dd577ef6160a1980130db83f0686dab8afe5e32e641ca6abeab4c'; - // Compute Js input - const inputStarkSC = await proofOfEfficiencyContract.calculateStarkInput( - currentStateRoot, - currentLocalExitRoot, - newStateRoot, - newLocalExitRoot, - batchHashData, - numBatch, - sequencedTimestmap, - chainID, - ); + // set smart contract with correct parameters + await proofOfEfficiencyContract.setStateRoot(oldStateRoot); + await proofOfEfficiencyContract.setSequencedBatches(newNumBatch, newAccInputHash); + await proofOfEfficiencyContract.setSequencedBatch(1); - // Compute Js input - const inputStarkJS = calculateStarkInput( - currentStateRoot, - currentLocalExitRoot, - newStateRoot, - newLocalExitRoot, - batchHashData, - numBatch, - sequencedTimestmap, - chainID, - ); - - expect(inputStarkSC).to.be.equal(inputStarkJS); - expect(inputStarkSC).to.be.equal(expectedStarkInput); + await ethers.provider.send('hardhat_impersonateAccount', [aggregatorAddress]); + const aggregator = await ethers.getSigner(aggregatorAddress); + await randomSigner.sendTransaction({ + to: aggregatorAddress, + value: ethers.utils.parseEther('4'), + }); - // Check snark input - const inputSnarkSC = await proofOfEfficiencyContract.calculateSnarkInput( - currentStateRoot, - currentLocalExitRoot, - newStateRoot, + // Compute SC input + const inputSnarkSC = await proofOfEfficiencyContract.connect(aggregator).getNextSnarkInput( + oldNumBatch, + newNumBatch, newLocalExitRoot, - batchHashData, - numBatch, - sequencedTimestmap, - chainID, - aggregatorAddress, + newStateRoot, ); - const inputSnarkJS = await calculateSnarkInput( - currentStateRoot, - currentLocalExitRoot, + // Compute Js input + const inputSnarkJS = await contractUtils.calculateSnarkInput( + oldStateRoot, newStateRoot, newLocalExitRoot, - batchHashData, - numBatch, - sequencedTimestmap, + oldAccInputHash, + newAccInputHash, + oldNumBatch, + newNumBatch, chainID, aggregatorAddress, ); expect(inputSnarkSC).to.be.equal(inputSnarkJS); - expect(inputSnarkSC).to.be.equal(expectedSnarkInput); + expect(inputSnarkSC).to.be.equal(expectedSnarkInputHash); }); }); From 141f94ff4f2255db4102fbfd477adf8cd4a0cede Mon Sep 17 00:00:00 2001 From: invocamanman Date: Mon, 24 Oct 2022 18:57:13 +0200 Subject: [PATCH 06/71] assembly function --- contracts/ProofOfEfficiency.sol | 99 +++++++++------------------------ 1 file changed, 25 insertions(+), 74 deletions(-) diff --git a/contracts/ProofOfEfficiency.sol b/contracts/ProofOfEfficiency.sol index 4cce695a2..e594f67af 100644 --- a/contracts/ProofOfEfficiency.sol +++ b/contracts/ProofOfEfficiency.sol @@ -614,90 +614,41 @@ contract ProofOfEfficiency is Initializable { // Set the pointer at the beginning of the byte array let ptr := add(snarkHashBytes, 32) - // function add32BytesToInputSnark(bytesToAdd, ptrInit) -> ptrFinal { - // ptrFinal := ptrInit - // for { - // let i := 0 - // } lt(i, 8) { - // i := add(i, 1) - // } { - // // Every iteration will write 4 bytes (32 bits) from inputStark padded to 8 bytes, in little endian format - // // First shift right i*32 bits, in order to have the next 4 bytes to write at the end of the byte array - // // Then shift left 256 - 32 (224) bits to the left. - // // As a result the first 4 bytes will be the next ones, and the rest of the bytes will be zeroes - // // Finally the result is shifted 32 bits for the padding, and stores in the current position of the pointer - // mstore( - // ptrFinal, - // shr(32, shl(224, shr(mul(i, 32), bytesToAdd))) - // ) - // ptrFinal := add(ptrFinal, 8) // write the next 8 bytes - // } - // - // } - - // Add currentStateRoot - for { - let i := 0 - } lt(i, 8) { - i := add(i, 1) - } { - // Every iteration will write 4 bytes (32 bits) from inputStark padded to 8 bytes, in little endian format - // First shift right i*32 bits, in order to have the next 4 bytes to write at the end of the byte array - // Then shift left 256 - 32 (224) bits to the left. - // As a result the first 4 bytes will be the next ones, and the rest of the bytes will be zeroes - // Finally the result is shifted 32 bits for the padding, and stores in the current position of the pointer - mstore( - ptr, - shr( - 32, - shl(224, shr(mul(i, 32), sload(currentStateRoot.slot))) + // function defined to add 32 bytes into the snark btye array on a prover friendly method + function add32BytesToInputSnark(bytesToAdd, ptrInit) -> ptrFinal { + ptrFinal := ptrInit + for { + let i := 0 + } lt(i, 8) { + i := add(i, 1) + } { + // Every iteration will write 4 bytes (32 bits) from inputStark padded to 8 bytes, in little endian format + // First shift right i*32 bits, in order to have the next 4 bytes to write at the end of the byte array + // Then shift left 256 - 32 (224) bits to the left. + // As a result the first 4 bytes will be the next ones, and the rest of the bytes will be zeroes + // Finally the result is shifted 32 bits for the padding, and stores in the current position of the pointer + mstore( + ptrFinal, + shr(32, shl(224, shr(mul(i, 32), bytesToAdd))) ) - ) - ptr := add(ptr, 8) // write the next 8 bytes + ptrFinal := add(ptrFinal, 8) // write the next 8 bytes + } } + // Add currentStateRoot + ptr := add32BytesToInputSnark(sload(currentStateRoot.slot), ptr) + // Add newStateRoot - for { - let i := 0 - } lt(i, 8) { - i := add(i, 1) - } { - mstore(ptr, shr(32, shl(224, shr(mul(i, 32), newStateRoot)))) - ptr := add(ptr, 8) // write the next 8 bytes - } + ptr := add32BytesToInputSnark(newStateRoot, ptr) // Add oldAccInputHash - for { - let i := 0 - } lt(i, 8) { - i := add(i, 1) - } { - mstore(ptr, shr(32, shl(224, shr(mul(i, 32), oldAccInputHash)))) - ptr := add(ptr, 8) // write the next 8 bytes - } + ptr := add32BytesToInputSnark(oldAccInputHash, ptr) // Add newAccInputHash - for { - let i := 0 - } lt(i, 8) { - i := add(i, 1) - } { - mstore(ptr, shr(32, shl(224, shr(mul(i, 32), newAccInputHash)))) - ptr := add(ptr, 8) // write the next 8 bytes - } + ptr := add32BytesToInputSnark(newAccInputHash, ptr) // Add newLocalExitRoot - for { - let i := 0 - } lt(i, 8) { - i := add(i, 1) - } { - mstore( - ptr, - shr(32, shl(224, shr(mul(i, 32), newLocalExitRoot))) - ) - ptr := add(ptr, 8) // write the next 8 bytes - } + ptr := add32BytesToInputSnark(newLocalExitRoot, ptr) // add firstNumBatch mstore(ptr, shl(192, _lastVerifiedBatch)) // 256 - 64 = 192 From 09d8fe1d19ae9c21d8b14b0ca5f1f18bb180f649 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Tue, 25 Oct 2022 16:10:22 +0200 Subject: [PATCH 07/71] poe final test --- compiled-contracts/Bridge.json | 105 +++++- compiled-contracts/BridgeMock.json | 105 +++++- compiled-contracts/ProofOfEfficiency.json | 112 ++++--- compiled-contracts/ProofOfEfficiencyMock.json | 306 ++++++++---------- contracts/ProofOfEfficiency.sol | 16 +- contracts/mocks/ProofOfEfficiencyMock.sol | 2 +- docs/Bridge.md | 36 ++- docs/ProofOfEfficiency.md | 43 ++- docs/lib/DepositContract.md | 2 + test/contracts/proofOfEfficiency.test.js | 288 ++++++++--------- 10 files changed, 617 insertions(+), 398 deletions(-) diff --git a/compiled-contracts/Bridge.json b/compiled-contracts/Bridge.json index 2624ac6d3..259377be6 100644 --- a/compiled-contracts/Bridge.json +++ b/compiled-contracts/Bridge.json @@ -6,6 +6,12 @@ { "anonymous": false, "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "leafType", + "type": "uint8" + }, { "indexed": false, "internalType": "uint32", @@ -15,7 +21,7 @@ { "indexed": false, "internalType": "address", - "name": "originTokenAddress", + "name": "originAddress", "type": "address" }, { @@ -70,7 +76,7 @@ { "indexed": false, "internalType": "address", - "name": "originTokenAddress", + "name": "originAddress", "type": "address" }, { @@ -127,6 +133,32 @@ "name": "NewWrappedToken", "type": "event" }, + { + "inputs": [], + "name": "LEAF_TYPE_ASSET", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "LEAF_TYPE_MESSAGE", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "MAINNET_NETWORK_ID", @@ -249,7 +281,65 @@ "type": "bytes" } ], - "name": "claim", + "name": "claimAsset", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32[]", + "name": "smtProof", + "type": "bytes32[]" + }, + { + "internalType": "uint32", + "name": "index", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "mainnetExitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "rollupExitRoot", + "type": "bytes32" + }, + { + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "originAddress", + "type": "address" + }, + { + "internalType": "uint32", + "name": "destinationNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "destinationAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + } + ], + "name": "claimMessage", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -301,6 +391,11 @@ }, { "inputs": [ + { + "internalType": "uint8", + "name": "leafType", + "type": "uint8" + }, { "internalType": "uint32", "name": "originNetwork", @@ -526,8 +621,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50614d95806100206000396000f3fe608060405260043610620001245760003560e01c80635d5d326f11620000b2578063bab161bf116200007d578063d96a15f71162000060578063d96a15f71462000495578063e737588114620004ac578063ed6be5c914620004e057600080fd5b8063bab161bf1462000431578063d02103ca146200046657600080fd5b80635d5d326f146200037b57806381b1c17414620003a05780638624c35c14620003e7578063b7e6a7d4146200040c57600080fd5b8063318aee3d11620000f3578063318aee3d14620001e75780633ae0504714620002705780633da8168214620002885780635a64a1da14620002be57600080fd5b80630871e971146200012957806322e95f2c14620001425780632dfdf0b514620001915780632f3a3d5d14620001b8575b600080fd5b620001406200013a366004620029e0565b620004f7565b005b3480156200014f57600080fd5b50620001676200016136600462002a9c565b62000ae1565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200019e57600080fd5b50620001a960415481565b60405190815260200162000188565b348015620001c557600080fd5b50604754620001679073ffffffffffffffffffffffffffffffffffffffff1681565b348015620001f457600080fd5b506200023e6200020636600462002ad8565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000188565b3480156200027d57600080fd5b50620001a962000b84565b3480156200029557600080fd5b50620002ad620002a736600462002bf7565b62000c5e565b604051901515815260200162000188565b348015620002cb57600080fd5b50620001a9620002dd36600462002c65565b604080517fffffffff0000000000000000000000000000000000000000000000000000000060e098891b81166020808401919091527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006060998a1b811660248501529790991b1660388201529390951b909316603c830152605082015260708082019290925282518082039092018252609001909152805191012090565b3480156200038857600080fd5b50620001406200039a36600462002d7d565b62000d5e565b348015620003ad57600080fd5b5062000167620003bf36600462002e64565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620003f457600080fd5b50620001406200040636600462002a9c565b6200180d565b3480156200041957600080fd5b50620001676200042b36600462002a9c565b62001a8b565b3480156200043e57600080fd5b50604254620004509063ffffffff1681565b60405163ffffffff909116815260200162000188565b3480156200047357600080fd5b50604654620001679073ffffffffffffffffffffffffffffffffffffffff1681565b62000140620004a636600462002e7e565b62001b54565b348015620004b957600080fd5b50620002ad620004cb36600462002e64565b60436020526000908152604090205460ff1681565b348015620004ed57600080fd5b5062000450600081565b60425463ffffffff9081169086160362000598576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff891662000654578534146200064a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200058f565b6000915062000968565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000755576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af11580156200071c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000742919062002ee6565b5060208101518151909450925062000966565b84156200076a576200076a8a88888862001d72565b6200078e73ffffffffffffffffffffffffffffffffffffffff8b1633308a6200219d565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007f2573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200083a919081019062002f85565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000886573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620008ce919081019062002f85565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200091a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000940919062002fce565b60405160200162000954939291906200303a565b60405160208183030381529060405291505b505b7ff0b963192bdc6349c23af9bd17294b4c7b9b5a73a2a9939610ea18ffd1c5dc2a82848a8a8a86604154604051620009a7979695949392919062003077565b60405180910390a18051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e087811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166024860152918f901b90921660388401528c901b16603c820152605081018a9052607080820193909352815180820390930183526090019052805191012062000a5b9062002281565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000a8362000b84565b6040518263ffffffff1660e01b815260040162000aa291815260200190565b600060405180830381600087803b15801562000abd57600080fd5b505af115801562000ad2573d6000803e3d6000fd5b50505050505050505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6041546000908190815b602081101562000c56578160011660010362000bee576001816020811062000bba5762000bba620030e4565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000c32565b826021826020811062000c055762000c05620030e4565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b62000c3f60028362003142565b91508062000c4d816200317e565b91505062000b8e565b509092915050565b60008467ffffffffffffffff8416825b602081101562000d51578160011660010362000cdb5786818151811062000c995762000c99620030e4565b60200260200101518360405160200162000cbd929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000d2d565b8287828151811062000cf15762000cf1620030e4565b602002602001015160405160200162000d14929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000d3a60028362003142565b91508062000d48816200317e565b91505062000c6e565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000de0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d4544000060448201526064016200058f565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000e79573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e9f9190620031b9565b60000362000f30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d4154434800000000000000000000000000000000000060648201526084016200058f565b60425463ffffffff85811691161462000fcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d4154434800000000000000000000000000000060648201526084016200058f565b60425463ffffffff16620010fd578051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166024860152918b901b909216603884015288901b16603c8201526050810186905260708082019390935281518082039093018352609001905280519101206200108f908b8b63ffffffff168a62000c5e565b620010f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c494400000000000060448201526064016200058f565b6200121a565b8051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166024860152918b901b909216603884015288901b16603c820152605081018690526070808201939093528151808203909301835260900190528051910120620011b2908b8b63ffffffff168b62000c5e565b6200121a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c494400000000000060448201526064016200058f565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff85166200138b576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff8516908490604051620012ad9190620031d3565b60006040518083038185875af1925050503d8060008114620012ec576040519150601f19603f3d011682016040523d82523d6000602084013e620012f1565b606091505b505090508062001384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f454400000000000000000000000000000000000000000000000000000000000060648201526084016200058f565b5062001796565b60425463ffffffff90811690871603620013c857620013c273ffffffffffffffffffffffffffffffffffffffff86168484620023fa565b62001796565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff1680620016f557604754600090620014b39073ffffffffffffffffffffffffffffffffffffffff168462002452565b9050600080600086806020019051810190620014d09190620031f1565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b81526004016200151995949392919062003272565b600060405180830381600087803b1580156200153457600080fd5b505af115801562001549573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c86604051620016e39392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062001793565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200176b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001791919062002ee6565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff16158080156200182e5750600054600160ff909116105b806200184a5750303b1580156200184a575060005460ff166001145b620018d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200058f565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156200193757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055604051620019b59062002988565b604051809103906000f080158015620019d2573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905562001a2262002532565b801562001a8657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012060475490915062001b4c9073ffffffffffffffffffffffffffffffffffffffff16826200267a565b949350505050565b60425463ffffffff9081169084160362001bf1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200058f565b6042546041546040517ff0b963192bdc6349c23af9bd17294b4c7b9b5a73a2a9939610ea18ffd1c5dc2a9262001c3c9263ffffffff9091169160009188918891349189919062003077565b60405180910390a16042548151602080840191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811682860152600060248301529488901b9094166038850152606086901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016603c850152346050850152607080850192909252805180850390920182526090909301909252815191012062001cf29062002281565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62001d1a62000b84565b6040518263ffffffff1660e01b815260040162001d3991815260200190565b600060405180830381600087803b15801562001d5457600080fd5b505af115801562001d69573d6000803e3d6000fd5b50505050505050565b600062001db583838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620026fe92505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf000000000000000000000000000000000000000000000000000000001462001e64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200058f565b600080808080808062001e7b896004818d620032d2565b81019062001e8a9190620032fe565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462001f55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200058f565b73ffffffffffffffffffffffffffffffffffffffff8616301462001ffc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200058f565b8a85146200208d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200058f565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e1691620021489190620031d3565b6000604051808303816000865af19150503d806000811462002187576040519150601f19603f3d011682016040523d82523d6000602084013e6200218c565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526200227b9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002705565b50505050565b8060016200229260206002620034af565b6200229e9190620034bd565b6041541062002330576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200058f565b600160416000828254620023459190620034d7565b909155505060415460005b6020811015620023ef5781600116600103620023855782600182602081106200237d576200237d620030e4565b015550505050565b600181602081106200239b576200239b620030e4565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620023d8919062003142565b915080620023e6816200317e565b91505062002350565b5062001a86620034f2565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262001a869084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401620021f8565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000b7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c656400000000000000000060448201526064016200058f565b600054610100900460ff16620025cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200058f565b60005b620025dc60016020620034bd565b811015620026775760218160208110620025fa57620025fa620030e4565b015460218260208110620026125762002612620030e4565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012060218260016200264d9190620034d7565b60208110620026605762002660620030e4565b0155806200266e816200317e565b915050620025ce565b50565b6000620026f78383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b600062002769826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620028189092919063ffffffff16565b80519091501562001a8657808060200190518101906200278a919062002ee6565b62001a86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200058f565b606062001b4c84846000858573ffffffffffffffffffffffffffffffffffffffff85163b620028a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200058f565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620028cf9190620031d3565b60006040518083038185875af1925050503d80600081146200290e576040519150601f19603f3d011682016040523d82523d6000602084013e62002913565b606091505b50915091506200292582828662002930565b979650505050505050565b6060831562002941575081620026f7565b825115620029525782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200058f919062003521565b611829806200353783390190565b73ffffffffffffffffffffffffffffffffffffffff811681146200267757600080fd5b8035620029c68162002996565b919050565b803563ffffffff81168114620029c657600080fd5b60008060008060008060a08789031215620029fa57600080fd5b863562002a078162002996565b955062002a1760208801620029cb565b9450604087013562002a298162002996565b935060608701359250608087013567ffffffffffffffff8082111562002a4e57600080fd5b818901915089601f83011262002a6357600080fd5b81358181111562002a7357600080fd5b8a602082850101111562002a8657600080fd5b6020830194508093505050509295509295509295565b6000806040838503121562002ab057600080fd5b62002abb83620029cb565b9150602083013562002acd8162002996565b809150509250929050565b60006020828403121562002aeb57600080fd5b8135620026f78162002996565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171562002b715762002b7162002af8565b604052919050565b600082601f83011262002b8b57600080fd5b8135602067ffffffffffffffff82111562002baa5762002baa62002af8565b8160051b62002bbb82820162002b27565b928352848101820192828101908785111562002bd657600080fd5b83870192505b84831015620029255782358252918301919083019062002bdc565b6000806000806080858703121562002c0e57600080fd5b84359350602085013567ffffffffffffffff8082111562002c2e57600080fd5b62002c3c8883890162002b79565b945060408701359150808216821462002c5457600080fd5b509396929550929360600135925050565b60008060008060008060c0878903121562002c7f57600080fd5b62002c8a87620029cb565b9550602087013562002c9c8162002996565b945062002cac60408801620029cb565b9350606087013562002cbe8162002996565b9598949750929560808101359460a0909101359350915050565b600067ffffffffffffffff82111562002cf55762002cf562002af8565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011262002d3357600080fd5b813562002d4a62002d448262002cd8565b62002b27565b81815284602083860101111562002d6057600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002d9e57600080fd5b8a3567ffffffffffffffff8082111562002db757600080fd5b62002dc58e838f0162002b79565b9b5062002dd560208e01620029cb565b9a5060408d0135995060608d0135985062002df360808e01620029cb565b975062002e0360a08e01620029b9565b965062002e1360c08e01620029cb565b955062002e2360e08e01620029b9565b94506101008d013593506101208d013591508082111562002e4357600080fd5b5062002e528d828e0162002d21565b9150509295989b9194979a5092959850565b60006020828403121562002e7757600080fd5b5035919050565b60008060006060848603121562002e9457600080fd5b62002e9f84620029cb565b9250602084013562002eb18162002996565b9150604084013567ffffffffffffffff81111562002ece57600080fd5b62002edc8682870162002d21565b9150509250925092565b60006020828403121562002ef957600080fd5b81518015158114620026f757600080fd5b60005b8381101562002f2757818101518382015260200162002f0d565b838111156200227b5750506000910152565b600082601f83011262002f4b57600080fd5b815162002f5c62002d448262002cd8565b81815284602083860101111562002f7257600080fd5b62001b4c82602083016020870162002f0a565b60006020828403121562002f9857600080fd5b815167ffffffffffffffff81111562002fb057600080fd5b62001b4c8482850162002f39565b60ff811681146200267757600080fd5b60006020828403121562002fe157600080fd5b8151620026f78162002fbe565b600081518084526200300881602086016020860162002f0a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6060815260006200304f606083018662002fee565b828103602084015262003063818662002fee565b91505060ff83166040830152949350505050565b600063ffffffff808a16835273ffffffffffffffffffffffffffffffffffffffff808a166020850152818916604085015280881660608501525085608084015260e060a0840152620030cd60e084018662002fee565b915080841660c08401525098975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003179577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620031b257620031b262003113565b5060010190565b600060208284031215620031cc57600080fd5b5051919050565b60008251620031e781846020870162002f0a565b9190910192915050565b6000806000606084860312156200320757600080fd5b835167ffffffffffffffff808211156200322057600080fd5b6200322e8783880162002f39565b945060208601519150808211156200324557600080fd5b50620032548682870162002f39565b9250506040840151620032678162002fbe565b809150509250925092565b60a0815260006200328760a083018862002fee565b82810360208401526200329b818862002fee565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b60008085851115620032e357600080fd5b83861115620032f157600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200331a57600080fd5b8735620033278162002996565b96506020880135620033398162002996565b955060408801359450606088013593506080880135620033598162002fbe565b9699959850939692959460a0840135945060c09093013592915050565b600181815b80851115620033d557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620033b957620033b962003113565b80851615620033c757918102915b93841c93908002906200337b565b509250929050565b600082620033ee5750600162000b7e565b81620033fd5750600062000b7e565b8160018114620034165760028114620034215762003441565b600191505062000b7e565b60ff84111562003435576200343562003113565b50506001821b62000b7e565b5060208310610133831016604e8410600b841016171562003466575081810a62000b7e565b62003472838362003376565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620034a757620034a762003113565b029392505050565b6000620026f78383620033dd565b600082821015620034d257620034d262003113565b500390565b60008219821115620034ed57620034ed62003113565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b602081526000620026f7602083018462002fee56fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a26469706673582212204aca84e728b49f663f1e0cd56727fda3937ed71fae0a398ba6822c0aaa1826ec64736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001245760003560e01c80635d5d326f11620000b2578063bab161bf116200007d578063d96a15f71162000060578063d96a15f71462000495578063e737588114620004ac578063ed6be5c914620004e057600080fd5b8063bab161bf1462000431578063d02103ca146200046657600080fd5b80635d5d326f146200037b57806381b1c17414620003a05780638624c35c14620003e7578063b7e6a7d4146200040c57600080fd5b8063318aee3d11620000f3578063318aee3d14620001e75780633ae0504714620002705780633da8168214620002885780635a64a1da14620002be57600080fd5b80630871e971146200012957806322e95f2c14620001425780632dfdf0b514620001915780632f3a3d5d14620001b8575b600080fd5b620001406200013a366004620029e0565b620004f7565b005b3480156200014f57600080fd5b50620001676200016136600462002a9c565b62000ae1565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200019e57600080fd5b50620001a960415481565b60405190815260200162000188565b348015620001c557600080fd5b50604754620001679073ffffffffffffffffffffffffffffffffffffffff1681565b348015620001f457600080fd5b506200023e6200020636600462002ad8565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000188565b3480156200027d57600080fd5b50620001a962000b84565b3480156200029557600080fd5b50620002ad620002a736600462002bf7565b62000c5e565b604051901515815260200162000188565b348015620002cb57600080fd5b50620001a9620002dd36600462002c65565b604080517fffffffff0000000000000000000000000000000000000000000000000000000060e098891b81166020808401919091527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006060998a1b811660248501529790991b1660388201529390951b909316603c830152605082015260708082019290925282518082039092018252609001909152805191012090565b3480156200038857600080fd5b50620001406200039a36600462002d7d565b62000d5e565b348015620003ad57600080fd5b5062000167620003bf36600462002e64565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620003f457600080fd5b50620001406200040636600462002a9c565b6200180d565b3480156200041957600080fd5b50620001676200042b36600462002a9c565b62001a8b565b3480156200043e57600080fd5b50604254620004509063ffffffff1681565b60405163ffffffff909116815260200162000188565b3480156200047357600080fd5b50604654620001679073ffffffffffffffffffffffffffffffffffffffff1681565b62000140620004a636600462002e7e565b62001b54565b348015620004b957600080fd5b50620002ad620004cb36600462002e64565b60436020526000908152604090205460ff1681565b348015620004ed57600080fd5b5062000450600081565b60425463ffffffff9081169086160362000598576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff891662000654578534146200064a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200058f565b6000915062000968565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000755576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af11580156200071c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000742919062002ee6565b5060208101518151909450925062000966565b84156200076a576200076a8a88888862001d72565b6200078e73ffffffffffffffffffffffffffffffffffffffff8b1633308a6200219d565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007f2573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200083a919081019062002f85565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000886573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620008ce919081019062002f85565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200091a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000940919062002fce565b60405160200162000954939291906200303a565b60405160208183030381529060405291505b505b7ff0b963192bdc6349c23af9bd17294b4c7b9b5a73a2a9939610ea18ffd1c5dc2a82848a8a8a86604154604051620009a7979695949392919062003077565b60405180910390a18051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e087811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166024860152918f901b90921660388401528c901b16603c820152605081018a9052607080820193909352815180820390930183526090019052805191012062000a5b9062002281565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000a8362000b84565b6040518263ffffffff1660e01b815260040162000aa291815260200190565b600060405180830381600087803b15801562000abd57600080fd5b505af115801562000ad2573d6000803e3d6000fd5b50505050505050505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6041546000908190815b602081101562000c56578160011660010362000bee576001816020811062000bba5762000bba620030e4565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000c32565b826021826020811062000c055762000c05620030e4565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b62000c3f60028362003142565b91508062000c4d816200317e565b91505062000b8e565b509092915050565b60008467ffffffffffffffff8416825b602081101562000d51578160011660010362000cdb5786818151811062000c995762000c99620030e4565b60200260200101518360405160200162000cbd929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000d2d565b8287828151811062000cf15762000cf1620030e4565b602002602001015160405160200162000d14929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000d3a60028362003142565b91508062000d48816200317e565b91505062000c6e565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000de0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d4544000060448201526064016200058f565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000e79573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e9f9190620031b9565b60000362000f30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d4154434800000000000000000000000000000000000060648201526084016200058f565b60425463ffffffff85811691161462000fcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d4154434800000000000000000000000000000060648201526084016200058f565b60425463ffffffff16620010fd578051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166024860152918b901b909216603884015288901b16603c8201526050810186905260708082019390935281518082039093018352609001905280519101206200108f908b8b63ffffffff168a62000c5e565b620010f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c494400000000000060448201526064016200058f565b6200121a565b8051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166024860152918b901b909216603884015288901b16603c820152605081018690526070808201939093528151808203909301835260900190528051910120620011b2908b8b63ffffffff168b62000c5e565b6200121a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c494400000000000060448201526064016200058f565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff85166200138b576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff8516908490604051620012ad9190620031d3565b60006040518083038185875af1925050503d8060008114620012ec576040519150601f19603f3d011682016040523d82523d6000602084013e620012f1565b606091505b505090508062001384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f454400000000000000000000000000000000000000000000000000000000000060648201526084016200058f565b5062001796565b60425463ffffffff90811690871603620013c857620013c273ffffffffffffffffffffffffffffffffffffffff86168484620023fa565b62001796565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff1680620016f557604754600090620014b39073ffffffffffffffffffffffffffffffffffffffff168462002452565b9050600080600086806020019051810190620014d09190620031f1565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b81526004016200151995949392919062003272565b600060405180830381600087803b1580156200153457600080fd5b505af115801562001549573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c86604051620016e39392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062001793565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200176b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001791919062002ee6565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff16158080156200182e5750600054600160ff909116105b806200184a5750303b1580156200184a575060005460ff166001145b620018d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200058f565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156200193757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055604051620019b59062002988565b604051809103906000f080158015620019d2573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905562001a2262002532565b801562001a8657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012060475490915062001b4c9073ffffffffffffffffffffffffffffffffffffffff16826200267a565b949350505050565b60425463ffffffff9081169084160362001bf1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200058f565b6042546041546040517ff0b963192bdc6349c23af9bd17294b4c7b9b5a73a2a9939610ea18ffd1c5dc2a9262001c3c9263ffffffff9091169160009188918891349189919062003077565b60405180910390a16042548151602080840191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811682860152600060248301529488901b9094166038850152606086901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016603c850152346050850152607080850192909252805180850390920182526090909301909252815191012062001cf29062002281565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62001d1a62000b84565b6040518263ffffffff1660e01b815260040162001d3991815260200190565b600060405180830381600087803b15801562001d5457600080fd5b505af115801562001d69573d6000803e3d6000fd5b50505050505050565b600062001db583838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620026fe92505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf000000000000000000000000000000000000000000000000000000001462001e64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200058f565b600080808080808062001e7b896004818d620032d2565b81019062001e8a9190620032fe565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462001f55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200058f565b73ffffffffffffffffffffffffffffffffffffffff8616301462001ffc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200058f565b8a85146200208d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200058f565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e1691620021489190620031d3565b6000604051808303816000865af19150503d806000811462002187576040519150601f19603f3d011682016040523d82523d6000602084013e6200218c565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526200227b9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002705565b50505050565b8060016200229260206002620034af565b6200229e9190620034bd565b6041541062002330576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200058f565b600160416000828254620023459190620034d7565b909155505060415460005b6020811015620023ef5781600116600103620023855782600182602081106200237d576200237d620030e4565b015550505050565b600181602081106200239b576200239b620030e4565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620023d8919062003142565b915080620023e6816200317e565b91505062002350565b5062001a86620034f2565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262001a869084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401620021f8565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000b7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c656400000000000000000060448201526064016200058f565b600054610100900460ff16620025cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200058f565b60005b620025dc60016020620034bd565b811015620026775760218160208110620025fa57620025fa620030e4565b015460218260208110620026125762002612620030e4565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012060218260016200264d9190620034d7565b60208110620026605762002660620030e4565b0155806200266e816200317e565b915050620025ce565b50565b6000620026f78383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b600062002769826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620028189092919063ffffffff16565b80519091501562001a8657808060200190518101906200278a919062002ee6565b62001a86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200058f565b606062001b4c84846000858573ffffffffffffffffffffffffffffffffffffffff85163b620028a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200058f565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620028cf9190620031d3565b60006040518083038185875af1925050503d80600081146200290e576040519150601f19603f3d011682016040523d82523d6000602084013e62002913565b606091505b50915091506200292582828662002930565b979650505050505050565b6060831562002941575081620026f7565b825115620029525782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200058f919062003521565b611829806200353783390190565b73ffffffffffffffffffffffffffffffffffffffff811681146200267757600080fd5b8035620029c68162002996565b919050565b803563ffffffff81168114620029c657600080fd5b60008060008060008060a08789031215620029fa57600080fd5b863562002a078162002996565b955062002a1760208801620029cb565b9450604087013562002a298162002996565b935060608701359250608087013567ffffffffffffffff8082111562002a4e57600080fd5b818901915089601f83011262002a6357600080fd5b81358181111562002a7357600080fd5b8a602082850101111562002a8657600080fd5b6020830194508093505050509295509295509295565b6000806040838503121562002ab057600080fd5b62002abb83620029cb565b9150602083013562002acd8162002996565b809150509250929050565b60006020828403121562002aeb57600080fd5b8135620026f78162002996565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171562002b715762002b7162002af8565b604052919050565b600082601f83011262002b8b57600080fd5b8135602067ffffffffffffffff82111562002baa5762002baa62002af8565b8160051b62002bbb82820162002b27565b928352848101820192828101908785111562002bd657600080fd5b83870192505b84831015620029255782358252918301919083019062002bdc565b6000806000806080858703121562002c0e57600080fd5b84359350602085013567ffffffffffffffff8082111562002c2e57600080fd5b62002c3c8883890162002b79565b945060408701359150808216821462002c5457600080fd5b509396929550929360600135925050565b60008060008060008060c0878903121562002c7f57600080fd5b62002c8a87620029cb565b9550602087013562002c9c8162002996565b945062002cac60408801620029cb565b9350606087013562002cbe8162002996565b9598949750929560808101359460a0909101359350915050565b600067ffffffffffffffff82111562002cf55762002cf562002af8565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011262002d3357600080fd5b813562002d4a62002d448262002cd8565b62002b27565b81815284602083860101111562002d6057600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002d9e57600080fd5b8a3567ffffffffffffffff8082111562002db757600080fd5b62002dc58e838f0162002b79565b9b5062002dd560208e01620029cb565b9a5060408d0135995060608d0135985062002df360808e01620029cb565b975062002e0360a08e01620029b9565b965062002e1360c08e01620029cb565b955062002e2360e08e01620029b9565b94506101008d013593506101208d013591508082111562002e4357600080fd5b5062002e528d828e0162002d21565b9150509295989b9194979a5092959850565b60006020828403121562002e7757600080fd5b5035919050565b60008060006060848603121562002e9457600080fd5b62002e9f84620029cb565b9250602084013562002eb18162002996565b9150604084013567ffffffffffffffff81111562002ece57600080fd5b62002edc8682870162002d21565b9150509250925092565b60006020828403121562002ef957600080fd5b81518015158114620026f757600080fd5b60005b8381101562002f2757818101518382015260200162002f0d565b838111156200227b5750506000910152565b600082601f83011262002f4b57600080fd5b815162002f5c62002d448262002cd8565b81815284602083860101111562002f7257600080fd5b62001b4c82602083016020870162002f0a565b60006020828403121562002f9857600080fd5b815167ffffffffffffffff81111562002fb057600080fd5b62001b4c8482850162002f39565b60ff811681146200267757600080fd5b60006020828403121562002fe157600080fd5b8151620026f78162002fbe565b600081518084526200300881602086016020860162002f0a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6060815260006200304f606083018662002fee565b828103602084015262003063818662002fee565b91505060ff83166040830152949350505050565b600063ffffffff808a16835273ffffffffffffffffffffffffffffffffffffffff808a166020850152818916604085015280881660608501525085608084015260e060a0840152620030cd60e084018662002fee565b915080841660c08401525098975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003179577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620031b257620031b262003113565b5060010190565b600060208284031215620031cc57600080fd5b5051919050565b60008251620031e781846020870162002f0a565b9190910192915050565b6000806000606084860312156200320757600080fd5b835167ffffffffffffffff808211156200322057600080fd5b6200322e8783880162002f39565b945060208601519150808211156200324557600080fd5b50620032548682870162002f39565b9250506040840151620032678162002fbe565b809150509250925092565b60a0815260006200328760a083018862002fee565b82810360208401526200329b818862002fee565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b60008085851115620032e357600080fd5b83861115620032f157600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200331a57600080fd5b8735620033278162002996565b96506020880135620033398162002996565b955060408801359450606088013593506080880135620033598162002fbe565b9699959850939692959460a0840135945060c09093013592915050565b600181815b80851115620033d557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620033b957620033b962003113565b80851615620033c757918102915b93841c93908002906200337b565b509250929050565b600082620033ee5750600162000b7e565b81620033fd5750600062000b7e565b8160018114620034165760028114620034215762003441565b600191505062000b7e565b60ff84111562003435576200343562003113565b50506001821b62000b7e565b5060208310610133831016604e8410600b841016171562003466575081810a62000b7e565b62003472838362003376565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620034a757620034a762003113565b029392505050565b6000620026f78383620033dd565b600082821015620034d257620034d262003113565b500390565b60008219821115620034ed57620034ed62003113565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b602081526000620026f7602083018462002fee56fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a26469706673582212204aca84e728b49f663f1e0cd56727fda3937ed71fae0a398ba6822c0aaa1826ec64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506156c5806100206000396000f3fe6080604052600436106200017b5760003560e01c806381b1c17411620000cf578063d02103ca116200007d578063e73758811162000060578063e73758811462000589578063ed6be5c914620005bd578063ff634ed714620005d457600080fd5b8063d02103ca1462000543578063d96a15f7146200057257600080fd5b8063a08e8a0811620000b2578063a08e8a0814620004bf578063b7e6a7d414620004e9578063bab161bf146200050e57600080fd5b806381b1c17414620004535780638624c35c146200049a57600080fd5b80633ae05047116200012d5780633e19704311620001105780633e19704314620003155780634638554914620004095780637b6323c1146200042e57600080fd5b80633ae0504714620002c75780633da8168214620002df57600080fd5b80632dfdf0b511620001625780632dfdf0b514620001e85780632f3a3d5d146200020f578063318aee3d146200023e57600080fd5b80630871e971146200018057806322e95f2c1462000199575b600080fd5b6200019762000191366004620032c4565b620005eb565b005b348015620001a657600080fd5b50620001be620001b836600462003380565b62000bdf565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015620001f557600080fd5b506200020060415481565b604051908152602001620001df565b3480156200021c57600080fd5b50604754620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200024b57600080fd5b50620002956200025d366004620033bc565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201620001df565b348015620002d457600080fd5b506200020062000c82565b348015620002ec57600080fd5b5062000304620002fe366004620034db565b62000d5c565b6040519015158152602001620001df565b3480156200032257600080fd5b50620002006200033436600462003559565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200041657600080fd5b50620001976200042836600462003688565b62000e5c565b3480156200043b57600080fd5b50620001976200044d36600462003688565b62001617565b3480156200046057600080fd5b50620001be620004723660046200376f565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620004a757600080fd5b5062000197620004b936600462003380565b620020c2565b348015620004cc57600080fd5b50620004d6600081565b60405160ff9091168152602001620001df565b348015620004f657600080fd5b50620001be6200050836600462003380565b62002340565b3480156200051b57600080fd5b506042546200052d9063ffffffff1681565b60405163ffffffff9091168152602001620001df565b3480156200055057600080fd5b50604654620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b620001976200058336600462003789565b62002409565b3480156200059657600080fd5b5062000304620005a83660046200376f565b60436020526000908152604090205460ff1681565b348015620005ca57600080fd5b506200052d600081565b348015620005e157600080fd5b50620004d6600181565b60425463ffffffff908116908616036200068c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff891662000748578534146200073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c55450000000000000000000000000000000000606482015260840162000683565b6000915062000a5c565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000849576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562000810573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008369190620037f1565b5060208101518151909450925062000a5a565b84156200085e576200085e8a88888862002656565b6200088273ffffffffffffffffffffffffffffffffffffffff8b1633308a62002a81565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200092e919081019062003890565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200097a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620009c2919081019062003890565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a349190620038c9565b60405160200162000a489392919062003935565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760415460405162000a9e98979695949392919062003972565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000b599062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000b8162000c82565b6040518263ffffffff1660e01b815260040162000ba091815260200190565b600060405180830381600087803b15801562000bbb57600080fd5b505af115801562000bd0573d6000803e3d6000fd5b50505050505050505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6041546000908190815b602081101562000d54578160011660010362000cec576001816020811062000cb85762000cb8620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000d30565b826021826020811062000d035762000d03620039eb565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b62000d3d60028362003a49565b91508062000d4b8162003a85565b91505062000c8c565b509092915050565b60008467ffffffffffffffff8416825b602081101562000e4f578160011660010362000dd95786818151811062000d975762000d97620039eb565b60200260200101518360405160200162000dbb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000e2b565b8287828151811062000def5762000def620039eb565b602002602001015160405160200162000e12929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000e3860028362003a49565b91508062000e468162003a85565b91505062000d6c565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000f04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d4544000000000000000000000000000000000000000000000000000000606482015260840162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000f9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fc3919062003ac0565b60000362001054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000606482015260840162000683565b60425463ffffffff858116911614620010f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000606482015260840162000683565b60425463ffffffff166200126e578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620011da905b8b8b63ffffffff168a62000d5c565b62001268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b620013d8565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200134a905b8b8b63ffffffff168b62000d5c565b620013d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff8516908490620014469089908b90879060240162003ada565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f20000000000000000000000000000000000000000000000000000000017905251620014c9919062003b20565b60006040518083038185875af1925050503d806000811462001508576040519150601f19603f3d011682016040523d82523d6000602084013e6200150d565b606091505b50509050806200159f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c454400000000000000000000000000000000000000000000000000000000606482015260840162000683565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b63ffffffff891660009081526043602052604090205460ff161562001699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d45440000604482015260640162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001732573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001758919062003ac0565b600003620017e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d41544348000000000000000000000000000000000000606482015260840162000683565b60425463ffffffff85811691161462001885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d41544348000000000000000000000000000000606482015260840162000683565b60425463ffffffff16620019b4578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200194690620011cb565b620019ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b62001acf565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062001a67906200133b565b62001acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff851662001c40576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001b62919062003b20565b60006040518083038185875af1925050503d806000811462001ba1576040519150601f19603f3d011682016040523d82523d6000602084013e62001ba6565b606091505b505090508062001c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f4544000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b506200204b565b60425463ffffffff9081169087160362001c7d5762001c7773ffffffffffffffffffffffffffffffffffffffff8616848462002cde565b6200204b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001faa5760475460009062001d689073ffffffffffffffffffffffffffffffffffffffff168462002d36565b905060008060008680602001905181019062001d85919062003b3e565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001dce95949392919062003bbf565b600060405180830381600087803b15801562001de957600080fd5b505af115801562001dfe573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001f989392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062002048565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562002020573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020469190620037f1565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff1615808015620020e35750600054600160ff909116105b80620020ff5750303b158015620020ff575060005460ff166001145b6200218d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840162000683565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620021ec57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556040516200226a906200326c565b604051809103906000f08015801562002287573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055620022d762002e16565b80156200233b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620024019073ffffffffffffffffffffffffffffffffffffffff168262002f5e565b949350505050565b60425463ffffffff90811690841603620024a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c4600000000000000000000000000000000000000000000606482015260840162000683565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620024f39260019263ffffffff9092169133918991899134918a919062003972565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620025d69062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d620025fe62000c82565b6040518263ffffffff1660e01b81526004016200261d91815260200190565b600060405180830381600087803b1580156200263857600080fd5b505af11580156200264d573d6000803e3d6000fd5b50505050505050565b60006200269983838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002fe292505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf000000000000000000000000000000000000000000000000000000001462002748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000683565b60008080808080806200275f896004818d62003c1f565b8101906200276e919062003c4b565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462002839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000683565b73ffffffffffffffffffffffffffffffffffffffff86163014620028e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000683565b8a851462002971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d4154434800000000000000000000000000000000000000606482015260840162000683565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002a2c919062003b20565b6000604051808303816000865af19150503d806000811462002a6b576040519150601f19603f3d011682016040523d82523d6000602084013e62002a70565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905262002b5f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002fe9565b50505050565b80600162002b766020600262003ddf565b62002b82919062003ded565b6041541062002c14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c00000000000000000000000000000000000000000000606482015260840162000683565b60016041600082825462002c29919062003e07565b909155505060415460005b602081101562002cd3578160011660010362002c6957826001826020811062002c615762002c61620039eb565b015550505050565b6001816020811062002c7f5762002c7f620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002cbc919062003a49565b91508062002cca8162003a85565b91505062002c34565b506200233b62003e22565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526200233b9084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002adc565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000c7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640162000683565b600054610100900460ff1662002eaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000683565b60005b62002ec06001602062003ded565b81101562002f5b576021816020811062002ede5762002ede620039eb565b01546021826020811062002ef65762002ef6620039eb565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002f31919062003e07565b6020811062002f445762002f44620039eb565b01558062002f528162003a85565b91505062002eb2565b50565b600062002fdb8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b60006200304d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620030fc9092919063ffffffff16565b8051909150156200233b57808060200190518101906200306e9190620037f1565b6200233b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000683565b60606200240184846000858573ffffffffffffffffffffffffffffffffffffffff85163b62003188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000683565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620031b3919062003b20565b60006040518083038185875af1925050503d8060008114620031f2576040519150601f19603f3d011682016040523d82523d6000602084013e620031f7565b606091505b50915091506200320982828662003214565b979650505050505050565b606083156200322557508162002fdb565b825115620032365782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000683919062003e51565b6118298062003e6783390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462002f5b57600080fd5b8035620032aa816200327a565b919050565b803563ffffffff81168114620032aa57600080fd5b60008060008060008060a08789031215620032de57600080fd5b8635620032eb816200327a565b9550620032fb60208801620032af565b945060408701356200330d816200327a565b935060608701359250608087013567ffffffffffffffff808211156200333257600080fd5b818901915089601f8301126200334757600080fd5b8135818111156200335757600080fd5b8a60208285010111156200336a57600080fd5b6020830194508093505050509295509295509295565b600080604083850312156200339457600080fd5b6200339f83620032af565b91506020830135620033b1816200327a565b809150509250929050565b600060208284031215620033cf57600080fd5b813562002fdb816200327a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620034555762003455620033dc565b604052919050565b600082601f8301126200346f57600080fd5b8135602067ffffffffffffffff8211156200348e576200348e620033dc565b8160051b6200349f8282016200340b565b9283528481018201928281019087851115620034ba57600080fd5b83870192505b848310156200320957823582529183019190830190620034c0565b60008060008060808587031215620034f257600080fd5b84359350602085013567ffffffffffffffff808211156200351257600080fd5b62003520888389016200345d565b94506040870135915080821682146200353857600080fd5b509396929550929360600135925050565b60ff8116811462002f5b57600080fd5b600080600080600080600060e0888a0312156200357557600080fd5b8735620035828162003549565b96506200359260208901620032af565b95506040880135620035a4816200327a565b9450620035b460608901620032af565b93506080880135620035c6816200327a565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620036005762003600620033dc565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126200363e57600080fd5b8135620036556200364f82620035e3565b6200340b565b8181528460208386010111156200366b57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620036a957600080fd5b8a3567ffffffffffffffff80821115620036c257600080fd5b620036d08e838f016200345d565b9b50620036e060208e01620032af565b9a5060408d0135995060608d01359850620036fe60808e01620032af565b97506200370e60a08e016200329d565b96506200371e60c08e01620032af565b95506200372e60e08e016200329d565b94506101008d013593506101208d01359150808211156200374e57600080fd5b506200375d8d828e016200362c565b9150509295989b9194979a5092959850565b6000602082840312156200378257600080fd5b5035919050565b6000806000606084860312156200379f57600080fd5b620037aa84620032af565b92506020840135620037bc816200327a565b9150604084013567ffffffffffffffff811115620037d957600080fd5b620037e7868287016200362c565b9150509250925092565b6000602082840312156200380457600080fd5b8151801515811462002fdb57600080fd5b60005b838110156200383257818101518382015260200162003818565b8381111562002b5f5750506000910152565b600082601f8301126200385657600080fd5b8151620038676200364f82620035e3565b8181528460208386010111156200387d57600080fd5b6200240182602083016020870162003815565b600060208284031215620038a357600080fd5b815167ffffffffffffffff811115620038bb57600080fd5b620024018482850162003844565b600060208284031215620038dc57600080fd5b815162002fdb8162003549565b600081518084526200390381602086016020860162003815565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6060815260006200394a6060830186620038e9565b82810360208401526200395e8186620038e9565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620039d282850187620038e9565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003a80577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003ab95762003ab962003a1a565b5060010190565b60006020828403121562003ad357600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003b176060830184620038e9565b95945050505050565b6000825162003b3481846020870162003815565b9190910192915050565b60008060006060848603121562003b5457600080fd5b835167ffffffffffffffff8082111562003b6d57600080fd5b62003b7b8783880162003844565b9450602086015191508082111562003b9257600080fd5b5062003ba18682870162003844565b925050604084015162003bb48162003549565b809150509250925092565b60a08152600062003bd460a0830188620038e9565b828103602084015262003be88188620038e9565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000808585111562003c3057600080fd5b8386111562003c3e57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003c6757600080fd5b873562003c74816200327a565b9650602088013562003c86816200327a565b955060408801359450606088013593506080880135620035c68162003549565b600181815b8085111562003d0557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003ce95762003ce962003a1a565b8085161562003cf757918102915b93841c939080029062003cab565b509250929050565b60008262003d1e5750600162000c7c565b8162003d2d5750600062000c7c565b816001811462003d46576002811462003d515762003d71565b600191505062000c7c565b60ff84111562003d655762003d6562003a1a565b50506001821b62000c7c565b5060208310610133831016604e8410600b841016171562003d96575081810a62000c7c565b62003da2838362003ca6565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003dd75762003dd762003a1a565b029392505050565b600062002fdb838362003d0d565b60008282101562003e025762003e0262003a1a565b500390565b6000821982111562003e1d5762003e1d62003a1a565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60208152600062002fdb6020830184620038e956fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a2646970667358221220c5f6583c5a84970668cf41f829e248295552bc3e4c8681d6bb9937be1c0ef7a264736f6c634300080f0033", + "deployedBytecode": "0x6080604052600436106200017b5760003560e01c806381b1c17411620000cf578063d02103ca116200007d578063e73758811162000060578063e73758811462000589578063ed6be5c914620005bd578063ff634ed714620005d457600080fd5b8063d02103ca1462000543578063d96a15f7146200057257600080fd5b8063a08e8a0811620000b2578063a08e8a0814620004bf578063b7e6a7d414620004e9578063bab161bf146200050e57600080fd5b806381b1c17414620004535780638624c35c146200049a57600080fd5b80633ae05047116200012d5780633e19704311620001105780633e19704314620003155780634638554914620004095780637b6323c1146200042e57600080fd5b80633ae0504714620002c75780633da8168214620002df57600080fd5b80632dfdf0b511620001625780632dfdf0b514620001e85780632f3a3d5d146200020f578063318aee3d146200023e57600080fd5b80630871e971146200018057806322e95f2c1462000199575b600080fd5b6200019762000191366004620032c4565b620005eb565b005b348015620001a657600080fd5b50620001be620001b836600462003380565b62000bdf565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015620001f557600080fd5b506200020060415481565b604051908152602001620001df565b3480156200021c57600080fd5b50604754620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200024b57600080fd5b50620002956200025d366004620033bc565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201620001df565b348015620002d457600080fd5b506200020062000c82565b348015620002ec57600080fd5b5062000304620002fe366004620034db565b62000d5c565b6040519015158152602001620001df565b3480156200032257600080fd5b50620002006200033436600462003559565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200041657600080fd5b50620001976200042836600462003688565b62000e5c565b3480156200043b57600080fd5b50620001976200044d36600462003688565b62001617565b3480156200046057600080fd5b50620001be620004723660046200376f565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620004a757600080fd5b5062000197620004b936600462003380565b620020c2565b348015620004cc57600080fd5b50620004d6600081565b60405160ff9091168152602001620001df565b348015620004f657600080fd5b50620001be6200050836600462003380565b62002340565b3480156200051b57600080fd5b506042546200052d9063ffffffff1681565b60405163ffffffff9091168152602001620001df565b3480156200055057600080fd5b50604654620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b620001976200058336600462003789565b62002409565b3480156200059657600080fd5b5062000304620005a83660046200376f565b60436020526000908152604090205460ff1681565b348015620005ca57600080fd5b506200052d600081565b348015620005e157600080fd5b50620004d6600181565b60425463ffffffff908116908616036200068c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff891662000748578534146200073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c55450000000000000000000000000000000000606482015260840162000683565b6000915062000a5c565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000849576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562000810573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008369190620037f1565b5060208101518151909450925062000a5a565b84156200085e576200085e8a88888862002656565b6200088273ffffffffffffffffffffffffffffffffffffffff8b1633308a62002a81565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200092e919081019062003890565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200097a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620009c2919081019062003890565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a349190620038c9565b60405160200162000a489392919062003935565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760415460405162000a9e98979695949392919062003972565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000b599062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000b8162000c82565b6040518263ffffffff1660e01b815260040162000ba091815260200190565b600060405180830381600087803b15801562000bbb57600080fd5b505af115801562000bd0573d6000803e3d6000fd5b50505050505050505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6041546000908190815b602081101562000d54578160011660010362000cec576001816020811062000cb85762000cb8620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000d30565b826021826020811062000d035762000d03620039eb565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b62000d3d60028362003a49565b91508062000d4b8162003a85565b91505062000c8c565b509092915050565b60008467ffffffffffffffff8416825b602081101562000e4f578160011660010362000dd95786818151811062000d975762000d97620039eb565b60200260200101518360405160200162000dbb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000e2b565b8287828151811062000def5762000def620039eb565b602002602001015160405160200162000e12929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000e3860028362003a49565b91508062000e468162003a85565b91505062000d6c565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000f04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d4544000000000000000000000000000000000000000000000000000000606482015260840162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000f9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fc3919062003ac0565b60000362001054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000606482015260840162000683565b60425463ffffffff858116911614620010f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000606482015260840162000683565b60425463ffffffff166200126e578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620011da905b8b8b63ffffffff168a62000d5c565b62001268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b620013d8565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200134a905b8b8b63ffffffff168b62000d5c565b620013d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff8516908490620014469089908b90879060240162003ada565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f20000000000000000000000000000000000000000000000000000000017905251620014c9919062003b20565b60006040518083038185875af1925050503d806000811462001508576040519150601f19603f3d011682016040523d82523d6000602084013e6200150d565b606091505b50509050806200159f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c454400000000000000000000000000000000000000000000000000000000606482015260840162000683565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b63ffffffff891660009081526043602052604090205460ff161562001699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d45440000604482015260640162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001732573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001758919062003ac0565b600003620017e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d41544348000000000000000000000000000000000000606482015260840162000683565b60425463ffffffff85811691161462001885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d41544348000000000000000000000000000000606482015260840162000683565b60425463ffffffff16620019b4578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200194690620011cb565b620019ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b62001acf565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062001a67906200133b565b62001acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff851662001c40576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001b62919062003b20565b60006040518083038185875af1925050503d806000811462001ba1576040519150601f19603f3d011682016040523d82523d6000602084013e62001ba6565b606091505b505090508062001c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f4544000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b506200204b565b60425463ffffffff9081169087160362001c7d5762001c7773ffffffffffffffffffffffffffffffffffffffff8616848462002cde565b6200204b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001faa5760475460009062001d689073ffffffffffffffffffffffffffffffffffffffff168462002d36565b905060008060008680602001905181019062001d85919062003b3e565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001dce95949392919062003bbf565b600060405180830381600087803b15801562001de957600080fd5b505af115801562001dfe573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001f989392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062002048565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562002020573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020469190620037f1565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff1615808015620020e35750600054600160ff909116105b80620020ff5750303b158015620020ff575060005460ff166001145b6200218d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840162000683565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620021ec57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556040516200226a906200326c565b604051809103906000f08015801562002287573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055620022d762002e16565b80156200233b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620024019073ffffffffffffffffffffffffffffffffffffffff168262002f5e565b949350505050565b60425463ffffffff90811690841603620024a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c4600000000000000000000000000000000000000000000606482015260840162000683565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620024f39260019263ffffffff9092169133918991899134918a919062003972565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620025d69062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d620025fe62000c82565b6040518263ffffffff1660e01b81526004016200261d91815260200190565b600060405180830381600087803b1580156200263857600080fd5b505af11580156200264d573d6000803e3d6000fd5b50505050505050565b60006200269983838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002fe292505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf000000000000000000000000000000000000000000000000000000001462002748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000683565b60008080808080806200275f896004818d62003c1f565b8101906200276e919062003c4b565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462002839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000683565b73ffffffffffffffffffffffffffffffffffffffff86163014620028e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000683565b8a851462002971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d4154434800000000000000000000000000000000000000606482015260840162000683565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002a2c919062003b20565b6000604051808303816000865af19150503d806000811462002a6b576040519150601f19603f3d011682016040523d82523d6000602084013e62002a70565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905262002b5f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002fe9565b50505050565b80600162002b766020600262003ddf565b62002b82919062003ded565b6041541062002c14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c00000000000000000000000000000000000000000000606482015260840162000683565b60016041600082825462002c29919062003e07565b909155505060415460005b602081101562002cd3578160011660010362002c6957826001826020811062002c615762002c61620039eb565b015550505050565b6001816020811062002c7f5762002c7f620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002cbc919062003a49565b91508062002cca8162003a85565b91505062002c34565b506200233b62003e22565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526200233b9084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002adc565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000c7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640162000683565b600054610100900460ff1662002eaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000683565b60005b62002ec06001602062003ded565b81101562002f5b576021816020811062002ede5762002ede620039eb565b01546021826020811062002ef65762002ef6620039eb565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002f31919062003e07565b6020811062002f445762002f44620039eb565b01558062002f528162003a85565b91505062002eb2565b50565b600062002fdb8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b60006200304d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620030fc9092919063ffffffff16565b8051909150156200233b57808060200190518101906200306e9190620037f1565b6200233b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000683565b60606200240184846000858573ffffffffffffffffffffffffffffffffffffffff85163b62003188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000683565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620031b3919062003b20565b60006040518083038185875af1925050503d8060008114620031f2576040519150601f19603f3d011682016040523d82523d6000602084013e620031f7565b606091505b50915091506200320982828662003214565b979650505050505050565b606083156200322557508162002fdb565b825115620032365782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000683919062003e51565b6118298062003e6783390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462002f5b57600080fd5b8035620032aa816200327a565b919050565b803563ffffffff81168114620032aa57600080fd5b60008060008060008060a08789031215620032de57600080fd5b8635620032eb816200327a565b9550620032fb60208801620032af565b945060408701356200330d816200327a565b935060608701359250608087013567ffffffffffffffff808211156200333257600080fd5b818901915089601f8301126200334757600080fd5b8135818111156200335757600080fd5b8a60208285010111156200336a57600080fd5b6020830194508093505050509295509295509295565b600080604083850312156200339457600080fd5b6200339f83620032af565b91506020830135620033b1816200327a565b809150509250929050565b600060208284031215620033cf57600080fd5b813562002fdb816200327a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620034555762003455620033dc565b604052919050565b600082601f8301126200346f57600080fd5b8135602067ffffffffffffffff8211156200348e576200348e620033dc565b8160051b6200349f8282016200340b565b9283528481018201928281019087851115620034ba57600080fd5b83870192505b848310156200320957823582529183019190830190620034c0565b60008060008060808587031215620034f257600080fd5b84359350602085013567ffffffffffffffff808211156200351257600080fd5b62003520888389016200345d565b94506040870135915080821682146200353857600080fd5b509396929550929360600135925050565b60ff8116811462002f5b57600080fd5b600080600080600080600060e0888a0312156200357557600080fd5b8735620035828162003549565b96506200359260208901620032af565b95506040880135620035a4816200327a565b9450620035b460608901620032af565b93506080880135620035c6816200327a565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620036005762003600620033dc565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126200363e57600080fd5b8135620036556200364f82620035e3565b6200340b565b8181528460208386010111156200366b57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620036a957600080fd5b8a3567ffffffffffffffff80821115620036c257600080fd5b620036d08e838f016200345d565b9b50620036e060208e01620032af565b9a5060408d0135995060608d01359850620036fe60808e01620032af565b97506200370e60a08e016200329d565b96506200371e60c08e01620032af565b95506200372e60e08e016200329d565b94506101008d013593506101208d01359150808211156200374e57600080fd5b506200375d8d828e016200362c565b9150509295989b9194979a5092959850565b6000602082840312156200378257600080fd5b5035919050565b6000806000606084860312156200379f57600080fd5b620037aa84620032af565b92506020840135620037bc816200327a565b9150604084013567ffffffffffffffff811115620037d957600080fd5b620037e7868287016200362c565b9150509250925092565b6000602082840312156200380457600080fd5b8151801515811462002fdb57600080fd5b60005b838110156200383257818101518382015260200162003818565b8381111562002b5f5750506000910152565b600082601f8301126200385657600080fd5b8151620038676200364f82620035e3565b8181528460208386010111156200387d57600080fd5b6200240182602083016020870162003815565b600060208284031215620038a357600080fd5b815167ffffffffffffffff811115620038bb57600080fd5b620024018482850162003844565b600060208284031215620038dc57600080fd5b815162002fdb8162003549565b600081518084526200390381602086016020860162003815565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6060815260006200394a6060830186620038e9565b82810360208401526200395e8186620038e9565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620039d282850187620038e9565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003a80577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003ab95762003ab962003a1a565b5060010190565b60006020828403121562003ad357600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003b176060830184620038e9565b95945050505050565b6000825162003b3481846020870162003815565b9190910192915050565b60008060006060848603121562003b5457600080fd5b835167ffffffffffffffff8082111562003b6d57600080fd5b62003b7b8783880162003844565b9450602086015191508082111562003b9257600080fd5b5062003ba18682870162003844565b925050604084015162003bb48162003549565b809150509250925092565b60a08152600062003bd460a0830188620038e9565b828103602084015262003be88188620038e9565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000808585111562003c3057600080fd5b8386111562003c3e57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003c6757600080fd5b873562003c74816200327a565b9650602088013562003c86816200327a565b955060408801359450606088013593506080880135620035c68162003549565b600181815b8085111562003d0557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003ce95762003ce962003a1a565b8085161562003cf757918102915b93841c939080029062003cab565b509250929050565b60008262003d1e5750600162000c7c565b8162003d2d5750600062000c7c565b816001811462003d46576002811462003d515762003d71565b600191505062000c7c565b60ff84111562003d655762003d6562003a1a565b50506001821b62000c7c565b5060208310610133831016604e8410600b841016171562003d96575081810a62000c7c565b62003da2838362003ca6565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003dd75762003dd762003a1a565b029392505050565b600062002fdb838362003d0d565b60008282101562003e025762003e0262003a1a565b500390565b6000821982111562003e1d5762003e1d62003a1a565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60208152600062002fdb6020830184620038e956fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a2646970667358221220c5f6583c5a84970668cf41f829e248295552bc3e4c8681d6bb9937be1c0ef7a264736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/BridgeMock.json b/compiled-contracts/BridgeMock.json index 181d37fb1..797dd9933 100644 --- a/compiled-contracts/BridgeMock.json +++ b/compiled-contracts/BridgeMock.json @@ -6,6 +6,12 @@ { "anonymous": false, "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "leafType", + "type": "uint8" + }, { "indexed": false, "internalType": "uint32", @@ -15,7 +21,7 @@ { "indexed": false, "internalType": "address", - "name": "originTokenAddress", + "name": "originAddress", "type": "address" }, { @@ -70,7 +76,7 @@ { "indexed": false, "internalType": "address", - "name": "originTokenAddress", + "name": "originAddress", "type": "address" }, { @@ -146,6 +152,32 @@ "name": "OwnershipTransferred", "type": "event" }, + { + "inputs": [], + "name": "LEAF_TYPE_ASSET", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "LEAF_TYPE_MESSAGE", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "MAINNET_NETWORK_ID", @@ -268,7 +300,65 @@ "type": "bytes" } ], - "name": "claim", + "name": "claimAsset", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32[]", + "name": "smtProof", + "type": "bytes32[]" + }, + { + "internalType": "uint32", + "name": "index", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "mainnetExitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "rollupExitRoot", + "type": "bytes32" + }, + { + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "originAddress", + "type": "address" + }, + { + "internalType": "uint32", + "name": "destinationNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "destinationAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + } + ], + "name": "claimMessage", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -320,6 +410,11 @@ }, { "inputs": [ + { + "internalType": "uint8", + "name": "leafType", + "type": "uint8" + }, { "internalType": "uint32", "name": "originNetwork", @@ -617,8 +712,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50615345806100206000396000f3fe6080604052600436106200019f5760003560e01c8063715018a611620000e7578063bab161bf1162000089578063e73758811162000060578063e737588114620005ce578063ed6be5c91462000602578063f2fde38b146200061957600080fd5b8063bab161bf1462000553578063d02103ca1462000588578063d96a15f714620005b757600080fd5b80638da5cb5b11620000be5780638da5cb5b14620004e957806391e57e2d1462000516578063b7e6a7d4146200052e57600080fd5b8063715018a6146200046557806381b1c174146200047d5780638624c35c14620004c457600080fd5b80632f3a3d5d11620001515780633da8168211620001285780633da81682146200034d5780635a64a1da14620003835780635d5d326f146200044057600080fd5b80632f3a3d5d146200027d578063318aee3d14620002ac5780633ae05047146200033557600080fd5b80632b5e42e711620001865780632b5e42e7146200020c5780632c3f58cd14620002315780632dfdf0b5146200025657600080fd5b80630871e97114620001a457806322e95f2c14620001bd575b600080fd5b620001bb620001b536600462002f72565b6200063e565b005b348015620001ca57600080fd5b50620001e2620001dc3660046200302e565b62000714565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200021957600080fd5b50620001bb6200022b3660046200306a565b620007b7565b3480156200023e57600080fd5b50620001bb6200025036600462003084565b620007c6565b3480156200026357600080fd5b506200026e60415481565b60405190815260200162000203565b3480156200028a57600080fd5b50604754620001e29073ffffffffffffffffffffffffffffffffffffffff1681565b348015620002b957600080fd5b5062000303620002cb366004620030a2565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000203565b3480156200034257600080fd5b506200026e62000807565b3480156200035a57600080fd5b50620003726200036c366004620031c1565b620008e1565b604051901515815260200162000203565b3480156200039057600080fd5b506200026e620003a23660046200322f565b604080517fffffffff0000000000000000000000000000000000000000000000000000000060e098891b81166020808401919091527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006060998a1b811660248501529790991b1660388201529390951b909316603c830152605082015260708082019290925282518082039092018252609001909152805191012090565b3480156200044d57600080fd5b50620001bb6200045f36600462003347565b620009e1565b3480156200047257600080fd5b50620001bb62001490565b3480156200048a57600080fd5b50620001e26200049c3660046200306a565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620004d157600080fd5b50620001bb620004e33660046200302e565b620014a8565b348015620004f657600080fd5b50607a5473ffffffffffffffffffffffffffffffffffffffff16620001e2565b3480156200052357600080fd5b506200026e60ac5481565b3480156200053b57600080fd5b50620001e26200054d3660046200302e565b6200173c565b3480156200056057600080fd5b50604254620005729063ffffffff1681565b60405163ffffffff909116815260200162000203565b3480156200059557600080fd5b50604654620001e29073ffffffffffffffffffffffffffffffffffffffff1681565b620001bb620005c83660046200342e565b62001805565b348015620005db57600080fd5b5062000372620005ed3660046200306a565b60436020526000908152604090205460ff1681565b3480156200060f57600080fd5b5062000572600081565b3480156200062657600080fd5b50620001bb62000638366004620030a2565b62001a23565b60ac54341115620006fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6200070c86868686868662001ae0565b505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b620007c1620020c6565b60ac55565b620007d0620020c6565b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b6041546000908190815b6020811015620008d957816001166001036200087157600181602081106200083d576200083d62003496565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250620008b5565b826021826020811062000888576200088862003496565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b620008c2600283620034f4565b915080620008d08162003530565b91505062000811565b509092915050565b60008467ffffffffffffffff8416825b6020811015620009d457816001166001036200095e578681815181106200091c576200091c62003496565b60200260200101518360405160200162000940929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009b0565b8287828151811062000974576200097462003496565b602002602001015160405160200162000997929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009bd600283620034f4565b915080620009cb8162003530565b915050620008f1565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000a63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d454400006044820152606401620006f3565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000afc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b2291906200356b565b60000362000bb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d415443480000000000000000000000000000000000006064820152608401620006f3565b60425463ffffffff85811691161462000c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d415443480000000000000000000000000000006064820152608401620006f3565b60425463ffffffff1662000d80578051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166024860152918b901b909216603884015288901b16603c82015260508101869052607080820193909352815180820390930183526090019052805191012062000d12908b8b63ffffffff168a620008e1565b62000d7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620006f3565b62000e9d565b8051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166024860152918b901b909216603884015288901b16603c82015260508101869052607080820193909352815180820390930183526090019052805191012062000e35908b8b63ffffffff168b620008e1565b62000e9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620006f3565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff85166200100e576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162000f309190620035b4565b60006040518083038185875af1925050503d806000811462000f6f576040519150601f19603f3d011682016040523d82523d6000602084013e62000f74565b606091505b505090508062001007576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f45440000000000000000000000000000000000000000000000000000000000006064820152608401620006f3565b5062001419565b60425463ffffffff908116908716036200104b576200104573ffffffffffffffffffffffffffffffffffffffff8616848462002149565b62001419565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff16806200137857604754600090620011369073ffffffffffffffffffffffffffffffffffffffff16846200221f565b90506000806000868060200190518101906200115391906200362e565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b81526004016200119c959493929190620036fb565b600060405180830381600087803b158015620011b757600080fd5b505af1158015620011cc573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c86604051620013669392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062001416565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620013ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200141491906200375b565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6200149a620020c6565b620014a66000620022ff565b565b600054610100900460ff1615808015620014c95750600054600160ff909116105b80620014e55750303b158015620014e5575060005460ff166001145b62001573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620006f3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620015d257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055604051620016509062002f1a565b604051809103906000f0801580156200166d573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055620016bd62002376565b620016c7620024bb565b6703782dace9d9000060ac5580156200173757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620017fd9073ffffffffffffffffffffffffffffffffffffffff16826200255e565b949350505050565b60425463ffffffff90811690841603620018a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620006f3565b6042546041546040517ff0b963192bdc6349c23af9bd17294b4c7b9b5a73a2a9939610ea18ffd1c5dc2a92620018ed9263ffffffff909116916000918891889134918991906200377f565b60405180910390a16042548151602080840191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811682860152600060248301529488901b9094166038850152606086901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016603c8501523460508501526070808501929092528051808503909201825260909093019092528151910120620019a390620025e2565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d620019cb62000807565b6040518263ffffffff1660e01b8152600401620019ea91815260200190565b600060405180830381600087803b15801562001a0557600080fd5b505af115801562001a1a573d6000803e3d6000fd5b50505050505050565b62001a2d620020c6565b73ffffffffffffffffffffffffffffffffffffffff811662001ad2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620006f3565b62001add81620022ff565b50565b60425463ffffffff9081169086160362001b7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620006f3565b600080606073ffffffffffffffffffffffffffffffffffffffff891662001c395785341462001c2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620006f3565b6000915062001f4d565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001d3a576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562001d01573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001d2791906200375b565b5060208101518151909450925062001f4b565b841562001d4f5762001d4f8a8888886200275b565b62001d7373ffffffffffffffffffffffffffffffffffffffff8b1633308a62002b86565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001dd7573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001e1f9190810190620037ec565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001e6b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001eb39190810190620037ec565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001eff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f25919062003825565b60405160200162001f399392919062003845565b60405160208183030381529060405291505b505b7ff0b963192bdc6349c23af9bd17294b4c7b9b5a73a2a9939610ea18ffd1c5dc2a82848a8a8a8660415460405162001f8c97969594939291906200377f565b60405180910390a18051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e087811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166024860152918f901b90921660388401528c901b16603c820152605081018a905260708082019390935281518082039093018352609001905280519101206200204090620025e2565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d6200206862000807565b6040518263ffffffff1660e01b81526004016200208791815260200190565b600060405180830381600087803b158015620020a257600080fd5b505af1158015620020b7573d6000803e3d6000fd5b50505050505050505050505050565b607a5473ffffffffffffffffffffffffffffffffffffffff163314620014a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006f3565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052620017379084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002bec565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff8116620007b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401620006f3565b607a805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166200240f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620006f3565b60005b620024206001602062003882565b81101562001add57602181602081106200243e576200243e62003496565b01546021826020811062002456576200245662003496565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012060218260016200249191906200389c565b60208110620024a457620024a462003496565b015580620024b28162003530565b91505062002412565b600054610100900460ff1662002554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620006f3565b620014a662002cff565b6000620025db8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b806001620025f360206002620039f0565b620025ff919062003882565b6041541062002691576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620006f3565b600160416000828254620026a691906200389c565b909155505060415460005b6020811015620027505781600116600103620026e6578260018260208110620026de57620026de62003496565b015550505050565b60018160208110620026fc57620026fc62003496565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620027399190620034f4565b915080620027478162003530565b915050620026b1565b5062001737620039fe565b60006200279e83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002da392505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf00000000000000000000000000000000000000000000000000000000146200284d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620006f3565b600080808080808062002864896004818d62003a2d565b81019062002873919062003a59565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16146200293e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620006f3565b73ffffffffffffffffffffffffffffffffffffffff86163014620029e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620006f3565b8a851462002a76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620006f3565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002b319190620035b4565b6000604051808303816000865af19150503d806000811462002b70576040519150601f19603f3d011682016040523d82523d6000602084013e62002b75565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905262002be69085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016200219c565b50505050565b600062002c50826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1662002daa9092919063ffffffff16565b80519091501562001737578080602001905181019062002c7191906200375b565b62001737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620006f3565b600054610100900460ff1662002d98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620006f3565b620014a633620022ff565b6020015190565b6060620017fd84846000858573ffffffffffffffffffffffffffffffffffffffff85163b62002e36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006f3565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405162002e619190620035b4565b60006040518083038185875af1925050503d806000811462002ea0576040519150601f19603f3d011682016040523d82523d6000602084013e62002ea5565b606091505b509150915062002eb782828662002ec2565b979650505050505050565b6060831562002ed3575081620025db565b82511562002ee45782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006f3919062003ad1565b6118298062003ae783390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462001add57600080fd5b803562002f588162002f28565b919050565b803563ffffffff8116811462002f5857600080fd5b60008060008060008060a0878903121562002f8c57600080fd5b863562002f998162002f28565b955062002fa96020880162002f5d565b9450604087013562002fbb8162002f28565b935060608701359250608087013567ffffffffffffffff8082111562002fe057600080fd5b818901915089601f83011262002ff557600080fd5b8135818111156200300557600080fd5b8a60208285010111156200301857600080fd5b6020830194508093505050509295509295509295565b600080604083850312156200304257600080fd5b6200304d8362002f5d565b915060208301356200305f8162002f28565b809150509250929050565b6000602082840312156200307d57600080fd5b5035919050565b6000602082840312156200309757600080fd5b620025db8262002f5d565b600060208284031215620030b557600080fd5b8135620025db8162002f28565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156200313b576200313b620030c2565b604052919050565b600082601f8301126200315557600080fd5b8135602067ffffffffffffffff821115620031745762003174620030c2565b8160051b62003185828201620030f1565b9283528481018201928281019087851115620031a057600080fd5b83870192505b8483101562002eb757823582529183019190830190620031a6565b60008060008060808587031215620031d857600080fd5b84359350602085013567ffffffffffffffff80821115620031f857600080fd5b620032068883890162003143565b94506040870135915080821682146200321e57600080fd5b509396929550929360600135925050565b60008060008060008060c087890312156200324957600080fd5b620032548762002f5d565b95506020870135620032668162002f28565b9450620032766040880162002f5d565b93506060870135620032888162002f28565b9598949750929560808101359460a0909101359350915050565b600067ffffffffffffffff821115620032bf57620032bf620030c2565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112620032fd57600080fd5b8135620033146200330e82620032a2565b620030f1565b8181528460208386010111156200332a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200336857600080fd5b8a3567ffffffffffffffff808211156200338157600080fd5b6200338f8e838f0162003143565b9b506200339f60208e0162002f5d565b9a5060408d0135995060608d01359850620033bd60808e0162002f5d565b9750620033cd60a08e0162002f4b565b9650620033dd60c08e0162002f5d565b9550620033ed60e08e0162002f4b565b94506101008d013593506101208d01359150808211156200340d57600080fd5b506200341c8d828e01620032eb565b9150509295989b9194979a5092959850565b6000806000606084860312156200344457600080fd5b6200344f8462002f5d565b92506020840135620034618162002f28565b9150604084013567ffffffffffffffff8111156200347e57600080fd5b6200348c86828701620032eb565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000826200352b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620035645762003564620034c5565b5060010190565b6000602082840312156200357e57600080fd5b5051919050565b60005b83811015620035a257818101518382015260200162003588565b8381111562002be65750506000910152565b60008251620035c881846020870162003585565b9190910192915050565b600082601f830112620035e457600080fd5b8151620035f56200330e82620032a2565b8181528460208386010111156200360b57600080fd5b620017fd82602083016020870162003585565b60ff8116811462001add57600080fd5b6000806000606084860312156200364457600080fd5b835167ffffffffffffffff808211156200365d57600080fd5b6200366b87838801620035d2565b945060208601519150808211156200368257600080fd5b506200369186828701620035d2565b9250506040840151620036a4816200361e565b809150509250925092565b60008151808452620036c981602086016020860162003585565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60a0815260006200371060a0830188620036af565b8281036020840152620037248188620036af565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000602082840312156200376e57600080fd5b81518015158114620025db57600080fd5b600063ffffffff808a16835273ffffffffffffffffffffffffffffffffffffffff808a166020850152818916604085015280881660608501525085608084015260e060a0840152620037d560e0840186620036af565b915080841660c08401525098975050505050505050565b600060208284031215620037ff57600080fd5b815167ffffffffffffffff8111156200381757600080fd5b620017fd84828501620035d2565b6000602082840312156200383857600080fd5b8151620025db816200361e565b6060815260006200385a6060830186620036af565b82810360208401526200386e8186620036af565b91505060ff83166040830152949350505050565b600082821015620038975762003897620034c5565b500390565b60008219821115620038b257620038b2620034c5565b500190565b600181815b808511156200391657817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620038fa57620038fa620034c5565b808516156200390857918102915b93841c9390800290620038bc565b509250929050565b6000826200392f57506001620007b1565b816200393e57506000620007b1565b8160018114620039575760028114620039625762003982565b6001915050620007b1565b60ff841115620039765762003976620034c5565b50506001821b620007b1565b5060208310610133831016604e8410600b8410161715620039a7575081810a620007b1565b620039b38383620038b7565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620039e857620039e8620034c5565b029392505050565b6000620025db83836200391e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000808585111562003a3e57600080fd5b8386111562003a4c57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003a7557600080fd5b873562003a828162002f28565b9650602088013562003a948162002f28565b95506040880135945060608801359350608088013562003ab4816200361e565b9699959850939692959460a0840135945060c09093013592915050565b602081526000620025db6020830184620036af56fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a264697066735822122018a37fb7657d795b029895949cfa8dd126ff1167bb157748993bdbcfe0285e3b64736f6c634300080f0033", - "deployedBytecode": "0x6080604052600436106200019f5760003560e01c8063715018a611620000e7578063bab161bf1162000089578063e73758811162000060578063e737588114620005ce578063ed6be5c91462000602578063f2fde38b146200061957600080fd5b8063bab161bf1462000553578063d02103ca1462000588578063d96a15f714620005b757600080fd5b80638da5cb5b11620000be5780638da5cb5b14620004e957806391e57e2d1462000516578063b7e6a7d4146200052e57600080fd5b8063715018a6146200046557806381b1c174146200047d5780638624c35c14620004c457600080fd5b80632f3a3d5d11620001515780633da8168211620001285780633da81682146200034d5780635a64a1da14620003835780635d5d326f146200044057600080fd5b80632f3a3d5d146200027d578063318aee3d14620002ac5780633ae05047146200033557600080fd5b80632b5e42e711620001865780632b5e42e7146200020c5780632c3f58cd14620002315780632dfdf0b5146200025657600080fd5b80630871e97114620001a457806322e95f2c14620001bd575b600080fd5b620001bb620001b536600462002f72565b6200063e565b005b348015620001ca57600080fd5b50620001e2620001dc3660046200302e565b62000714565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200021957600080fd5b50620001bb6200022b3660046200306a565b620007b7565b3480156200023e57600080fd5b50620001bb6200025036600462003084565b620007c6565b3480156200026357600080fd5b506200026e60415481565b60405190815260200162000203565b3480156200028a57600080fd5b50604754620001e29073ffffffffffffffffffffffffffffffffffffffff1681565b348015620002b957600080fd5b5062000303620002cb366004620030a2565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000203565b3480156200034257600080fd5b506200026e62000807565b3480156200035a57600080fd5b50620003726200036c366004620031c1565b620008e1565b604051901515815260200162000203565b3480156200039057600080fd5b506200026e620003a23660046200322f565b604080517fffffffff0000000000000000000000000000000000000000000000000000000060e098891b81166020808401919091527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006060998a1b811660248501529790991b1660388201529390951b909316603c830152605082015260708082019290925282518082039092018252609001909152805191012090565b3480156200044d57600080fd5b50620001bb6200045f36600462003347565b620009e1565b3480156200047257600080fd5b50620001bb62001490565b3480156200048a57600080fd5b50620001e26200049c3660046200306a565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620004d157600080fd5b50620001bb620004e33660046200302e565b620014a8565b348015620004f657600080fd5b50607a5473ffffffffffffffffffffffffffffffffffffffff16620001e2565b3480156200052357600080fd5b506200026e60ac5481565b3480156200053b57600080fd5b50620001e26200054d3660046200302e565b6200173c565b3480156200056057600080fd5b50604254620005729063ffffffff1681565b60405163ffffffff909116815260200162000203565b3480156200059557600080fd5b50604654620001e29073ffffffffffffffffffffffffffffffffffffffff1681565b620001bb620005c83660046200342e565b62001805565b348015620005db57600080fd5b5062000372620005ed3660046200306a565b60436020526000908152604090205460ff1681565b3480156200060f57600080fd5b5062000572600081565b3480156200062657600080fd5b50620001bb62000638366004620030a2565b62001a23565b60ac54341115620006fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6200070c86868686868662001ae0565b505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b620007c1620020c6565b60ac55565b620007d0620020c6565b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b6041546000908190815b6020811015620008d957816001166001036200087157600181602081106200083d576200083d62003496565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250620008b5565b826021826020811062000888576200088862003496565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b620008c2600283620034f4565b915080620008d08162003530565b91505062000811565b509092915050565b60008467ffffffffffffffff8416825b6020811015620009d457816001166001036200095e578681815181106200091c576200091c62003496565b60200260200101518360405160200162000940929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009b0565b8287828151811062000974576200097462003496565b602002602001015160405160200162000997929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009bd600283620034f4565b915080620009cb8162003530565b915050620008f1565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000a63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d454400006044820152606401620006f3565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000afc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b2291906200356b565b60000362000bb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d415443480000000000000000000000000000000000006064820152608401620006f3565b60425463ffffffff85811691161462000c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d415443480000000000000000000000000000006064820152608401620006f3565b60425463ffffffff1662000d80578051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166024860152918b901b909216603884015288901b16603c82015260508101869052607080820193909352815180820390930183526090019052805191012062000d12908b8b63ffffffff168a620008e1565b62000d7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620006f3565b62000e9d565b8051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166024860152918b901b909216603884015288901b16603c82015260508101869052607080820193909352815180820390930183526090019052805191012062000e35908b8b63ffffffff168b620008e1565b62000e9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620006f3565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff85166200100e576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162000f309190620035b4565b60006040518083038185875af1925050503d806000811462000f6f576040519150601f19603f3d011682016040523d82523d6000602084013e62000f74565b606091505b505090508062001007576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f45440000000000000000000000000000000000000000000000000000000000006064820152608401620006f3565b5062001419565b60425463ffffffff908116908716036200104b576200104573ffffffffffffffffffffffffffffffffffffffff8616848462002149565b62001419565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff16806200137857604754600090620011369073ffffffffffffffffffffffffffffffffffffffff16846200221f565b90506000806000868060200190518101906200115391906200362e565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b81526004016200119c959493929190620036fb565b600060405180830381600087803b158015620011b757600080fd5b505af1158015620011cc573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c86604051620013669392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062001416565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620013ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200141491906200375b565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6200149a620020c6565b620014a66000620022ff565b565b600054610100900460ff1615808015620014c95750600054600160ff909116105b80620014e55750303b158015620014e5575060005460ff166001145b62001573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620006f3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620015d257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055604051620016509062002f1a565b604051809103906000f0801580156200166d573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055620016bd62002376565b620016c7620024bb565b6703782dace9d9000060ac5580156200173757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620017fd9073ffffffffffffffffffffffffffffffffffffffff16826200255e565b949350505050565b60425463ffffffff90811690841603620018a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620006f3565b6042546041546040517ff0b963192bdc6349c23af9bd17294b4c7b9b5a73a2a9939610ea18ffd1c5dc2a92620018ed9263ffffffff909116916000918891889134918991906200377f565b60405180910390a16042548151602080840191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811682860152600060248301529488901b9094166038850152606086901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016603c8501523460508501526070808501929092528051808503909201825260909093019092528151910120620019a390620025e2565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d620019cb62000807565b6040518263ffffffff1660e01b8152600401620019ea91815260200190565b600060405180830381600087803b15801562001a0557600080fd5b505af115801562001a1a573d6000803e3d6000fd5b50505050505050565b62001a2d620020c6565b73ffffffffffffffffffffffffffffffffffffffff811662001ad2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620006f3565b62001add81620022ff565b50565b60425463ffffffff9081169086160362001b7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620006f3565b600080606073ffffffffffffffffffffffffffffffffffffffff891662001c395785341462001c2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620006f3565b6000915062001f4d565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001d3a576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562001d01573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001d2791906200375b565b5060208101518151909450925062001f4b565b841562001d4f5762001d4f8a8888886200275b565b62001d7373ffffffffffffffffffffffffffffffffffffffff8b1633308a62002b86565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001dd7573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001e1f9190810190620037ec565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001e6b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001eb39190810190620037ec565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001eff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f25919062003825565b60405160200162001f399392919062003845565b60405160208183030381529060405291505b505b7ff0b963192bdc6349c23af9bd17294b4c7b9b5a73a2a9939610ea18ffd1c5dc2a82848a8a8a8660415460405162001f8c97969594939291906200377f565b60405180910390a18051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e087811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166024860152918f901b90921660388401528c901b16603c820152605081018a905260708082019390935281518082039093018352609001905280519101206200204090620025e2565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d6200206862000807565b6040518263ffffffff1660e01b81526004016200208791815260200190565b600060405180830381600087803b158015620020a257600080fd5b505af1158015620020b7573d6000803e3d6000fd5b50505050505050505050505050565b607a5473ffffffffffffffffffffffffffffffffffffffff163314620014a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006f3565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052620017379084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002bec565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff8116620007b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401620006f3565b607a805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166200240f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620006f3565b60005b620024206001602062003882565b81101562001add57602181602081106200243e576200243e62003496565b01546021826020811062002456576200245662003496565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012060218260016200249191906200389c565b60208110620024a457620024a462003496565b015580620024b28162003530565b91505062002412565b600054610100900460ff1662002554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620006f3565b620014a662002cff565b6000620025db8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b806001620025f360206002620039f0565b620025ff919062003882565b6041541062002691576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620006f3565b600160416000828254620026a691906200389c565b909155505060415460005b6020811015620027505781600116600103620026e6578260018260208110620026de57620026de62003496565b015550505050565b60018160208110620026fc57620026fc62003496565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620027399190620034f4565b915080620027478162003530565b915050620026b1565b5062001737620039fe565b60006200279e83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002da392505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf00000000000000000000000000000000000000000000000000000000146200284d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620006f3565b600080808080808062002864896004818d62003a2d565b81019062002873919062003a59565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16146200293e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620006f3565b73ffffffffffffffffffffffffffffffffffffffff86163014620029e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620006f3565b8a851462002a76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620006f3565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002b319190620035b4565b6000604051808303816000865af19150503d806000811462002b70576040519150601f19603f3d011682016040523d82523d6000602084013e62002b75565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905262002be69085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016200219c565b50505050565b600062002c50826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1662002daa9092919063ffffffff16565b80519091501562001737578080602001905181019062002c7191906200375b565b62001737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620006f3565b600054610100900460ff1662002d98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620006f3565b620014a633620022ff565b6020015190565b6060620017fd84846000858573ffffffffffffffffffffffffffffffffffffffff85163b62002e36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006f3565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405162002e619190620035b4565b60006040518083038185875af1925050503d806000811462002ea0576040519150601f19603f3d011682016040523d82523d6000602084013e62002ea5565b606091505b509150915062002eb782828662002ec2565b979650505050505050565b6060831562002ed3575081620025db565b82511562002ee45782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006f3919062003ad1565b6118298062003ae783390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462001add57600080fd5b803562002f588162002f28565b919050565b803563ffffffff8116811462002f5857600080fd5b60008060008060008060a0878903121562002f8c57600080fd5b863562002f998162002f28565b955062002fa96020880162002f5d565b9450604087013562002fbb8162002f28565b935060608701359250608087013567ffffffffffffffff8082111562002fe057600080fd5b818901915089601f83011262002ff557600080fd5b8135818111156200300557600080fd5b8a60208285010111156200301857600080fd5b6020830194508093505050509295509295509295565b600080604083850312156200304257600080fd5b6200304d8362002f5d565b915060208301356200305f8162002f28565b809150509250929050565b6000602082840312156200307d57600080fd5b5035919050565b6000602082840312156200309757600080fd5b620025db8262002f5d565b600060208284031215620030b557600080fd5b8135620025db8162002f28565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156200313b576200313b620030c2565b604052919050565b600082601f8301126200315557600080fd5b8135602067ffffffffffffffff821115620031745762003174620030c2565b8160051b62003185828201620030f1565b9283528481018201928281019087851115620031a057600080fd5b83870192505b8483101562002eb757823582529183019190830190620031a6565b60008060008060808587031215620031d857600080fd5b84359350602085013567ffffffffffffffff80821115620031f857600080fd5b620032068883890162003143565b94506040870135915080821682146200321e57600080fd5b509396929550929360600135925050565b60008060008060008060c087890312156200324957600080fd5b620032548762002f5d565b95506020870135620032668162002f28565b9450620032766040880162002f5d565b93506060870135620032888162002f28565b9598949750929560808101359460a0909101359350915050565b600067ffffffffffffffff821115620032bf57620032bf620030c2565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112620032fd57600080fd5b8135620033146200330e82620032a2565b620030f1565b8181528460208386010111156200332a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200336857600080fd5b8a3567ffffffffffffffff808211156200338157600080fd5b6200338f8e838f0162003143565b9b506200339f60208e0162002f5d565b9a5060408d0135995060608d01359850620033bd60808e0162002f5d565b9750620033cd60a08e0162002f4b565b9650620033dd60c08e0162002f5d565b9550620033ed60e08e0162002f4b565b94506101008d013593506101208d01359150808211156200340d57600080fd5b506200341c8d828e01620032eb565b9150509295989b9194979a5092959850565b6000806000606084860312156200344457600080fd5b6200344f8462002f5d565b92506020840135620034618162002f28565b9150604084013567ffffffffffffffff8111156200347e57600080fd5b6200348c86828701620032eb565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000826200352b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620035645762003564620034c5565b5060010190565b6000602082840312156200357e57600080fd5b5051919050565b60005b83811015620035a257818101518382015260200162003588565b8381111562002be65750506000910152565b60008251620035c881846020870162003585565b9190910192915050565b600082601f830112620035e457600080fd5b8151620035f56200330e82620032a2565b8181528460208386010111156200360b57600080fd5b620017fd82602083016020870162003585565b60ff8116811462001add57600080fd5b6000806000606084860312156200364457600080fd5b835167ffffffffffffffff808211156200365d57600080fd5b6200366b87838801620035d2565b945060208601519150808211156200368257600080fd5b506200369186828701620035d2565b9250506040840151620036a4816200361e565b809150509250925092565b60008151808452620036c981602086016020860162003585565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60a0815260006200371060a0830188620036af565b8281036020840152620037248188620036af565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000602082840312156200376e57600080fd5b81518015158114620025db57600080fd5b600063ffffffff808a16835273ffffffffffffffffffffffffffffffffffffffff808a166020850152818916604085015280881660608501525085608084015260e060a0840152620037d560e0840186620036af565b915080841660c08401525098975050505050505050565b600060208284031215620037ff57600080fd5b815167ffffffffffffffff8111156200381757600080fd5b620017fd84828501620035d2565b6000602082840312156200383857600080fd5b8151620025db816200361e565b6060815260006200385a6060830186620036af565b82810360208401526200386e8186620036af565b91505060ff83166040830152949350505050565b600082821015620038975762003897620034c5565b500390565b60008219821115620038b257620038b2620034c5565b500190565b600181815b808511156200391657817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620038fa57620038fa620034c5565b808516156200390857918102915b93841c9390800290620038bc565b509250929050565b6000826200392f57506001620007b1565b816200393e57506000620007b1565b8160018114620039575760028114620039625762003982565b6001915050620007b1565b60ff841115620039765762003976620034c5565b50506001821b620007b1565b5060208310610133831016604e8410600b8410161715620039a7575081810a620007b1565b620039b38383620038b7565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620039e857620039e8620034c5565b029392505050565b6000620025db83836200391e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000808585111562003a3e57600080fd5b8386111562003a4c57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003a7557600080fd5b873562003a828162002f28565b9650602088013562003a948162002f28565b95506040880135945060608801359350608088013562003ab4816200361e565b9699959850939692959460a0840135945060c09093013592915050565b602081526000620025db6020830184620036af56fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a264697066735822122018a37fb7657d795b029895949cfa8dd126ff1167bb157748993bdbcfe0285e3b64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50615c42806100206000396000f3fe608060405260043610620001c35760003560e01c806381b1c17411620000f3578063bab161bf1162000095578063e7375881116200006c578063e73758811462000678578063ed6be5c914620006ac578063f2fde38b14620006c3578063ff634ed714620006e857600080fd5b8063bab161bf14620005fd578063d02103ca1462000632578063d96a15f7146200066157600080fd5b806391e57e2d11620000ca57806391e57e2d1462000596578063a08e8a0814620005ae578063b7e6a7d414620005d857600080fd5b806381b1c17414620004fd5780638624c35c14620005445780638da5cb5b146200056957600080fd5b8063318aee3d11620001695780633e19704311620001405780633e19704314620003a757806346385549146200049b578063715018a614620004c05780637b6323c114620004d857600080fd5b8063318aee3d14620002d05780633ae0504714620003595780633da81682146200037157600080fd5b80632c3f58cd116200019e5780632c3f58cd14620002555780632dfdf0b5146200027a5780632f3a3d5d14620002a157600080fd5b80630871e97114620001c857806322e95f2c14620001e15780632b5e42e71462000230575b600080fd5b620001df620001d936600462003823565b620006ff565b005b348015620001ee57600080fd5b506200020662000200366004620038df565b620007d5565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200023d57600080fd5b50620001df6200024f3660046200391b565b62000878565b3480156200026257600080fd5b50620001df6200027436600462003935565b62000887565b3480156200028757600080fd5b506200029260415481565b60405190815260200162000227565b348015620002ae57600080fd5b50604754620002069073ffffffffffffffffffffffffffffffffffffffff1681565b348015620002dd57600080fd5b5062000327620002ef36600462003953565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000227565b3480156200036657600080fd5b5062000292620008c8565b3480156200037e57600080fd5b50620003966200039036600462003a72565b620009a2565b604051901515815260200162000227565b348015620003b457600080fd5b5062000292620003c636600462003af0565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004a857600080fd5b50620001df620004ba36600462003c1f565b62000aa2565b348015620004cd57600080fd5b50620001df6200125d565b348015620004e557600080fd5b50620001df620004f736600462003c1f565b62001275565b3480156200050a57600080fd5b50620002066200051c3660046200391b565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200055157600080fd5b50620001df62000563366004620038df565b62001d20565b3480156200057657600080fd5b50607a5473ffffffffffffffffffffffffffffffffffffffff1662000206565b348015620005a357600080fd5b506200029260ac5481565b348015620005bb57600080fd5b50620005c5600081565b60405160ff909116815260200162000227565b348015620005e557600080fd5b5062000206620005f7366004620038df565b62001fb4565b3480156200060a57600080fd5b506042546200061c9063ffffffff1681565b60405163ffffffff909116815260200162000227565b3480156200063f57600080fd5b50604654620002069073ffffffffffffffffffffffffffffffffffffffff1681565b620001df6200067236600462003d06565b6200207d565b3480156200068557600080fd5b5062000396620006973660046200391b565b60436020526000908152604090205460ff1681565b348015620006b957600080fd5b506200061c600081565b348015620006d057600080fd5b50620001df620006e236600462003953565b620022ca565b348015620006f557600080fd5b50620005c5600181565b60ac54341115620007bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b620007cd86868686868662002387565b505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6200088262002977565b60ac55565b6200089162002977565b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b6041546000908190815b60208110156200099a5781600116600103620009325760018160208110620008fe57620008fe62003d6e565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000976565b826021826020811062000949576200094962003d6e565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b6200098360028362003dcc565b915080620009918162003e08565b915050620008d2565b509092915050565b60008467ffffffffffffffff8416825b602081101562000a95578160011660010362000a1f57868181518110620009dd57620009dd62003d6e565b60200260200101518360405160200162000a01929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000a71565b8287828151811062000a355762000a3562003d6e565b602002602001015160405160200162000a58929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000a7e60028362003dcc565b91508062000a8c8162003e08565b915050620009b2565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000b4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d45440000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000be3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c09919062003e43565b60000362000c9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d4154434800000000000000000000006064820152608401620007b4565b60425463ffffffff85811691161462000d36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000006064820152608401620007b4565b60425463ffffffff1662000eb4578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062000e20905b8b8b63ffffffff168a620009a2565b62000eae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6200101e565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062000f90905b8b8b63ffffffff168b620009a2565b6200101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff85169084906200108c9089908b90879060240162003ed8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f200000000000000000000000000000000000000000000000000000000179052516200110f919062003f1e565b60006040518083038185875af1925050503d80600081146200114e576040519150601f19603f3d011682016040523d82523d6000602084013e62001153565b606091505b5050905080620011e5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b6200126762002977565b620012736000620029fa565b565b63ffffffff891660009081526043602052604090205460ff1615620012f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d454400006044820152606401620007b4565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001390573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013b6919062003e43565b60000362001447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d415443480000000000000000000000000000000000006064820152608401620007b4565b60425463ffffffff858116911614620014e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d415443480000000000000000000000000000006064820152608401620007b4565b60425463ffffffff1662001612578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620015a49062000e11565b6200160c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007b4565b6200172d565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620016c59062000f81565b6200172d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007b4565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff85166200189e576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff8516908490604051620017c0919062003f1e565b60006040518083038185875af1925050503d8060008114620017ff576040519150601f19603f3d011682016040523d82523d6000602084013e62001804565b606091505b505090508062001897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f45440000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b5062001ca9565b60425463ffffffff90811690871603620018db57620018d573ffffffffffffffffffffffffffffffffffffffff8616848462002a71565b62001ca9565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001c0857604754600090620019c69073ffffffffffffffffffffffffffffffffffffffff168462002b47565b9050600080600086806020019051810190620019e3919062003f88565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001a2c95949392919062004009565b600060405180830381600087803b15801562001a4757600080fd5b505af115801562001a5c573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001bf69392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062001ca6565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001c7e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ca4919062004069565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff161580801562001d415750600054600160ff909116105b8062001d5d5750303b15801562001d5d575060005460ff166001145b62001deb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007b4565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801562001e4a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841617905560405162001ec890620037cb565b604051809103906000f08015801562001ee5573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905562001f3562002c27565b62001f3f62002d6c565b6703782dace9d9000060ac55801562001faf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620020759073ffffffffffffffffffffffffffffffffffffffff168262002e0f565b949350505050565b60425463ffffffff908116908416036200211a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007b4565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620021679260019263ffffffff9092169133918991899134918a91906200408d565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200224a9062002e93565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62002272620008c8565b6040518263ffffffff1660e01b81526004016200229191815260200190565b600060405180830381600087803b158015620022ac57600080fd5b505af1158015620022c1573d6000803e3d6000fd5b50505050505050565b620022d462002977565b73ffffffffffffffffffffffffffffffffffffffff811662002379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007b4565b6200238481620029fa565b50565b60425463ffffffff9081169086160362002424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007b4565b600080606073ffffffffffffffffffffffffffffffffffffffff8916620024e057853414620024d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007b4565b60009150620027f4565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620025e1576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af1158015620025a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620025ce919062004069565b50602081015181519094509250620027f2565b8415620025f657620025f68a8888886200300c565b6200261a73ffffffffffffffffffffffffffffffffffffffff8b1633308a62003437565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200267e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620026c6919081019062004106565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562002712573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200275a919081019062004106565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620027a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620027cc91906200413f565b604051602001620027e0939291906200415f565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b87604154604051620028369897969594939291906200408d565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620028f19062002e93565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62002919620008c8565b6040518263ffffffff1660e01b81526004016200293891815260200190565b600060405180830381600087803b1580156200295357600080fd5b505af115801562002968573d6000803e3d6000fd5b50505050505050505050505050565b607a5473ffffffffffffffffffffffffffffffffffffffff16331462001273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007b4565b607a805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262001faf9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526200349d565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401620007b4565b600054610100900460ff1662002cc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b60005b62002cd1600160206200419c565b81101562002384576021816020811062002cef5762002cef62003d6e565b01546021826020811062002d075762002d0762003d6e565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002d429190620041b6565b6020811062002d555762002d5562003d6e565b01558062002d638162003e08565b91505062002cc3565b600054610100900460ff1662002e05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b62001273620035b0565b600062002e8c8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b80600162002ea4602060026200430a565b62002eb091906200419c565b6041541062002f42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007b4565b60016041600082825462002f579190620041b6565b909155505060415460005b602081101562003001578160011660010362002f9757826001826020811062002f8f5762002f8f62003d6e565b015550505050565b6001816020811062002fad5762002fad62003d6e565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002fea919062003dcc565b91508062002ff88162003e08565b91505062002f62565b5062001faf62004318565b60006200304f83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200365492505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf0000000000000000000000000000000000000000000000000000000014620030fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007b4565b600080808080808062003115896004818d62004347565b81019062003124919062004373565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614620031ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007b4565b73ffffffffffffffffffffffffffffffffffffffff8616301462003296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007b4565b8a851462003327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007b4565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e1691620033e2919062003f1e565b6000604051808303816000865af19150503d806000811462003421576040519150601f19603f3d011682016040523d82523d6000602084013e62003426565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052620034979085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002ac4565b50505050565b600062003501826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166200365b9092919063ffffffff16565b80519091501562001faf578080602001905181019062003522919062004069565b62001faf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007b4565b600054610100900460ff1662003649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b6200127333620029fa565b6020015190565b60606200207584846000858573ffffffffffffffffffffffffffffffffffffffff85163b620036e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007b4565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405162003712919062003f1e565b60006040518083038185875af1925050503d806000811462003751576040519150601f19603f3d011682016040523d82523d6000602084013e62003756565b606091505b50915091506200376882828662003773565b979650505050505050565b606083156200378457508162002e8c565b825115620037955782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007b49190620043ce565b61182980620043e483390190565b73ffffffffffffffffffffffffffffffffffffffff811681146200238457600080fd5b80356200380981620037d9565b919050565b803563ffffffff811681146200380957600080fd5b60008060008060008060a087890312156200383d57600080fd5b86356200384a81620037d9565b95506200385a602088016200380e565b945060408701356200386c81620037d9565b935060608701359250608087013567ffffffffffffffff808211156200389157600080fd5b818901915089601f830112620038a657600080fd5b813581811115620038b657600080fd5b8a6020828501011115620038c957600080fd5b6020830194508093505050509295509295509295565b60008060408385031215620038f357600080fd5b620038fe836200380e565b915060208301356200391081620037d9565b809150509250929050565b6000602082840312156200392e57600080fd5b5035919050565b6000602082840312156200394857600080fd5b62002e8c826200380e565b6000602082840312156200396657600080fd5b813562002e8c81620037d9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620039ec57620039ec62003973565b604052919050565b600082601f83011262003a0657600080fd5b8135602067ffffffffffffffff82111562003a255762003a2562003973565b8160051b62003a36828201620039a2565b928352848101820192828101908785111562003a5157600080fd5b83870192505b84831015620037685782358252918301919083019062003a57565b6000806000806080858703121562003a8957600080fd5b84359350602085013567ffffffffffffffff8082111562003aa957600080fd5b62003ab788838901620039f4565b945060408701359150808216821462003acf57600080fd5b509396929550929360600135925050565b60ff811681146200238457600080fd5b600080600080600080600060e0888a03121562003b0c57600080fd5b873562003b198162003ae0565b965062003b29602089016200380e565b9550604088013562003b3b81620037d9565b945062003b4b606089016200380e565b9350608088013562003b5d81620037d9565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562003b975762003b9762003973565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011262003bd557600080fd5b813562003bec62003be68262003b7a565b620039a2565b81815284602083860101111562003c0257600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562003c4057600080fd5b8a3567ffffffffffffffff8082111562003c5957600080fd5b62003c678e838f01620039f4565b9b5062003c7760208e016200380e565b9a5060408d0135995060608d0135985062003c9560808e016200380e565b975062003ca560a08e01620037fc565b965062003cb560c08e016200380e565b955062003cc560e08e01620037fc565b94506101008d013593506101208d013591508082111562003ce557600080fd5b5062003cf48d828e0162003bc3565b9150509295989b9194979a5092959850565b60008060006060848603121562003d1c57600080fd5b62003d27846200380e565b9250602084013562003d3981620037d9565b9150604084013567ffffffffffffffff81111562003d5657600080fd5b62003d648682870162003bc3565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003e03577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003e3c5762003e3c62003d9d565b5060010190565b60006020828403121562003e5657600080fd5b5051919050565b60005b8381101562003e7a57818101518382015260200162003e60565b83811115620034975750506000910152565b6000815180845262003ea681602086016020860162003e5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003f15606083018462003e8c565b95945050505050565b6000825162003f3281846020870162003e5d565b9190910192915050565b600082601f83011262003f4e57600080fd5b815162003f5f62003be68262003b7a565b81815284602083860101111562003f7557600080fd5b6200207582602083016020870162003e5d565b60008060006060848603121562003f9e57600080fd5b835167ffffffffffffffff8082111562003fb757600080fd5b62003fc58783880162003f3c565b9450602086015191508082111562003fdc57600080fd5b5062003feb8682870162003f3c565b925050604084015162003ffe8162003ae0565b809150509250925092565b60a0815260006200401e60a083018862003e8c565b828103602084015262004032818862003e8c565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000602082840312156200407c57600080fd5b8151801515811462002e8c57600080fd5b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620040ed8285018762003e8c565b925080851660e085015250509998505050505050505050565b6000602082840312156200411957600080fd5b815167ffffffffffffffff8111156200413157600080fd5b620020758482850162003f3c565b6000602082840312156200415257600080fd5b815162002e8c8162003ae0565b60608152600062004174606083018662003e8c565b828103602084015262004188818662003e8c565b91505060ff83166040830152949350505050565b600082821015620041b157620041b162003d9d565b500390565b60008219821115620041cc57620041cc62003d9d565b500190565b600181815b808511156200423057817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562004214576200421462003d9d565b808516156200422257918102915b93841c9390800290620041d6565b509250929050565b600082620042495750600162000872565b81620042585750600062000872565b81600181146200427157600281146200427c576200429c565b600191505062000872565b60ff84111562004290576200429062003d9d565b50506001821b62000872565b5060208310610133831016604e8410600b8410161715620042c1575081810a62000872565b620042cd8383620041d1565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562004302576200430262003d9d565b029392505050565b600062002e8c838362004238565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600080858511156200435857600080fd5b838611156200436657600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200438f57600080fd5b87356200439c81620037d9565b96506020880135620043ae81620037d9565b95506040880135945060608801359350608088013562003b5d8162003ae0565b60208152600062002e8c602083018462003e8c56fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a2646970667358221220ebc3e29e73e7ee8654e10660476c7bd4773adb9823eb2f08ac27bcab930c4a4364736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001c35760003560e01c806381b1c17411620000f3578063bab161bf1162000095578063e7375881116200006c578063e73758811462000678578063ed6be5c914620006ac578063f2fde38b14620006c3578063ff634ed714620006e857600080fd5b8063bab161bf14620005fd578063d02103ca1462000632578063d96a15f7146200066157600080fd5b806391e57e2d11620000ca57806391e57e2d1462000596578063a08e8a0814620005ae578063b7e6a7d414620005d857600080fd5b806381b1c17414620004fd5780638624c35c14620005445780638da5cb5b146200056957600080fd5b8063318aee3d11620001695780633e19704311620001405780633e19704314620003a757806346385549146200049b578063715018a614620004c05780637b6323c114620004d857600080fd5b8063318aee3d14620002d05780633ae0504714620003595780633da81682146200037157600080fd5b80632c3f58cd116200019e5780632c3f58cd14620002555780632dfdf0b5146200027a5780632f3a3d5d14620002a157600080fd5b80630871e97114620001c857806322e95f2c14620001e15780632b5e42e71462000230575b600080fd5b620001df620001d936600462003823565b620006ff565b005b348015620001ee57600080fd5b506200020662000200366004620038df565b620007d5565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200023d57600080fd5b50620001df6200024f3660046200391b565b62000878565b3480156200026257600080fd5b50620001df6200027436600462003935565b62000887565b3480156200028757600080fd5b506200029260415481565b60405190815260200162000227565b348015620002ae57600080fd5b50604754620002069073ffffffffffffffffffffffffffffffffffffffff1681565b348015620002dd57600080fd5b5062000327620002ef36600462003953565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000227565b3480156200036657600080fd5b5062000292620008c8565b3480156200037e57600080fd5b50620003966200039036600462003a72565b620009a2565b604051901515815260200162000227565b348015620003b457600080fd5b5062000292620003c636600462003af0565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004a857600080fd5b50620001df620004ba36600462003c1f565b62000aa2565b348015620004cd57600080fd5b50620001df6200125d565b348015620004e557600080fd5b50620001df620004f736600462003c1f565b62001275565b3480156200050a57600080fd5b50620002066200051c3660046200391b565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200055157600080fd5b50620001df62000563366004620038df565b62001d20565b3480156200057657600080fd5b50607a5473ffffffffffffffffffffffffffffffffffffffff1662000206565b348015620005a357600080fd5b506200029260ac5481565b348015620005bb57600080fd5b50620005c5600081565b60405160ff909116815260200162000227565b348015620005e557600080fd5b5062000206620005f7366004620038df565b62001fb4565b3480156200060a57600080fd5b506042546200061c9063ffffffff1681565b60405163ffffffff909116815260200162000227565b3480156200063f57600080fd5b50604654620002069073ffffffffffffffffffffffffffffffffffffffff1681565b620001df6200067236600462003d06565b6200207d565b3480156200068557600080fd5b5062000396620006973660046200391b565b60436020526000908152604090205460ff1681565b348015620006b957600080fd5b506200061c600081565b348015620006d057600080fd5b50620001df620006e236600462003953565b620022ca565b348015620006f557600080fd5b50620005c5600181565b60ac54341115620007bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b620007cd86868686868662002387565b505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6200088262002977565b60ac55565b6200089162002977565b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b6041546000908190815b60208110156200099a5781600116600103620009325760018160208110620008fe57620008fe62003d6e565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000976565b826021826020811062000949576200094962003d6e565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b6200098360028362003dcc565b915080620009918162003e08565b915050620008d2565b509092915050565b60008467ffffffffffffffff8416825b602081101562000a95578160011660010362000a1f57868181518110620009dd57620009dd62003d6e565b60200260200101518360405160200162000a01929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000a71565b8287828151811062000a355762000a3562003d6e565b602002602001015160405160200162000a58929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000a7e60028362003dcc565b91508062000a8c8162003e08565b915050620009b2565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000b4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d45440000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000be3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c09919062003e43565b60000362000c9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d4154434800000000000000000000006064820152608401620007b4565b60425463ffffffff85811691161462000d36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000006064820152608401620007b4565b60425463ffffffff1662000eb4578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062000e20905b8b8b63ffffffff168a620009a2565b62000eae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6200101e565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062000f90905b8b8b63ffffffff168b620009a2565b6200101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff85169084906200108c9089908b90879060240162003ed8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f200000000000000000000000000000000000000000000000000000000179052516200110f919062003f1e565b60006040518083038185875af1925050503d80600081146200114e576040519150601f19603f3d011682016040523d82523d6000602084013e62001153565b606091505b5050905080620011e5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b6200126762002977565b620012736000620029fa565b565b63ffffffff891660009081526043602052604090205460ff1615620012f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d454400006044820152606401620007b4565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001390573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013b6919062003e43565b60000362001447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d415443480000000000000000000000000000000000006064820152608401620007b4565b60425463ffffffff858116911614620014e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d415443480000000000000000000000000000006064820152608401620007b4565b60425463ffffffff1662001612578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620015a49062000e11565b6200160c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007b4565b6200172d565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620016c59062000f81565b6200172d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007b4565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff85166200189e576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff8516908490604051620017c0919062003f1e565b60006040518083038185875af1925050503d8060008114620017ff576040519150601f19603f3d011682016040523d82523d6000602084013e62001804565b606091505b505090508062001897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f45440000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b5062001ca9565b60425463ffffffff90811690871603620018db57620018d573ffffffffffffffffffffffffffffffffffffffff8616848462002a71565b62001ca9565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001c0857604754600090620019c69073ffffffffffffffffffffffffffffffffffffffff168462002b47565b9050600080600086806020019051810190620019e3919062003f88565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001a2c95949392919062004009565b600060405180830381600087803b15801562001a4757600080fd5b505af115801562001a5c573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001bf69392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062001ca6565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001c7e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ca4919062004069565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff161580801562001d415750600054600160ff909116105b8062001d5d5750303b15801562001d5d575060005460ff166001145b62001deb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007b4565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801562001e4a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841617905560405162001ec890620037cb565b604051809103906000f08015801562001ee5573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905562001f3562002c27565b62001f3f62002d6c565b6703782dace9d9000060ac55801562001faf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620020759073ffffffffffffffffffffffffffffffffffffffff168262002e0f565b949350505050565b60425463ffffffff908116908416036200211a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007b4565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620021679260019263ffffffff9092169133918991899134918a91906200408d565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200224a9062002e93565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62002272620008c8565b6040518263ffffffff1660e01b81526004016200229191815260200190565b600060405180830381600087803b158015620022ac57600080fd5b505af1158015620022c1573d6000803e3d6000fd5b50505050505050565b620022d462002977565b73ffffffffffffffffffffffffffffffffffffffff811662002379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007b4565b6200238481620029fa565b50565b60425463ffffffff9081169086160362002424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007b4565b600080606073ffffffffffffffffffffffffffffffffffffffff8916620024e057853414620024d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007b4565b60009150620027f4565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620025e1576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af1158015620025a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620025ce919062004069565b50602081015181519094509250620027f2565b8415620025f657620025f68a8888886200300c565b6200261a73ffffffffffffffffffffffffffffffffffffffff8b1633308a62003437565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200267e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620026c6919081019062004106565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562002712573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200275a919081019062004106565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620027a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620027cc91906200413f565b604051602001620027e0939291906200415f565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b87604154604051620028369897969594939291906200408d565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620028f19062002e93565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62002919620008c8565b6040518263ffffffff1660e01b81526004016200293891815260200190565b600060405180830381600087803b1580156200295357600080fd5b505af115801562002968573d6000803e3d6000fd5b50505050505050505050505050565b607a5473ffffffffffffffffffffffffffffffffffffffff16331462001273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007b4565b607a805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262001faf9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526200349d565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401620007b4565b600054610100900460ff1662002cc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b60005b62002cd1600160206200419c565b81101562002384576021816020811062002cef5762002cef62003d6e565b01546021826020811062002d075762002d0762003d6e565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002d429190620041b6565b6020811062002d555762002d5562003d6e565b01558062002d638162003e08565b91505062002cc3565b600054610100900460ff1662002e05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b62001273620035b0565b600062002e8c8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b80600162002ea4602060026200430a565b62002eb091906200419c565b6041541062002f42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007b4565b60016041600082825462002f579190620041b6565b909155505060415460005b602081101562003001578160011660010362002f9757826001826020811062002f8f5762002f8f62003d6e565b015550505050565b6001816020811062002fad5762002fad62003d6e565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002fea919062003dcc565b91508062002ff88162003e08565b91505062002f62565b5062001faf62004318565b60006200304f83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200365492505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf0000000000000000000000000000000000000000000000000000000014620030fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007b4565b600080808080808062003115896004818d62004347565b81019062003124919062004373565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614620031ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007b4565b73ffffffffffffffffffffffffffffffffffffffff8616301462003296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007b4565b8a851462003327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007b4565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e1691620033e2919062003f1e565b6000604051808303816000865af19150503d806000811462003421576040519150601f19603f3d011682016040523d82523d6000602084013e62003426565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052620034979085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002ac4565b50505050565b600062003501826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166200365b9092919063ffffffff16565b80519091501562001faf578080602001905181019062003522919062004069565b62001faf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007b4565b600054610100900460ff1662003649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b6200127333620029fa565b6020015190565b60606200207584846000858573ffffffffffffffffffffffffffffffffffffffff85163b620036e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007b4565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405162003712919062003f1e565b60006040518083038185875af1925050503d806000811462003751576040519150601f19603f3d011682016040523d82523d6000602084013e62003756565b606091505b50915091506200376882828662003773565b979650505050505050565b606083156200378457508162002e8c565b825115620037955782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007b49190620043ce565b61182980620043e483390190565b73ffffffffffffffffffffffffffffffffffffffff811681146200238457600080fd5b80356200380981620037d9565b919050565b803563ffffffff811681146200380957600080fd5b60008060008060008060a087890312156200383d57600080fd5b86356200384a81620037d9565b95506200385a602088016200380e565b945060408701356200386c81620037d9565b935060608701359250608087013567ffffffffffffffff808211156200389157600080fd5b818901915089601f830112620038a657600080fd5b813581811115620038b657600080fd5b8a6020828501011115620038c957600080fd5b6020830194508093505050509295509295509295565b60008060408385031215620038f357600080fd5b620038fe836200380e565b915060208301356200391081620037d9565b809150509250929050565b6000602082840312156200392e57600080fd5b5035919050565b6000602082840312156200394857600080fd5b62002e8c826200380e565b6000602082840312156200396657600080fd5b813562002e8c81620037d9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620039ec57620039ec62003973565b604052919050565b600082601f83011262003a0657600080fd5b8135602067ffffffffffffffff82111562003a255762003a2562003973565b8160051b62003a36828201620039a2565b928352848101820192828101908785111562003a5157600080fd5b83870192505b84831015620037685782358252918301919083019062003a57565b6000806000806080858703121562003a8957600080fd5b84359350602085013567ffffffffffffffff8082111562003aa957600080fd5b62003ab788838901620039f4565b945060408701359150808216821462003acf57600080fd5b509396929550929360600135925050565b60ff811681146200238457600080fd5b600080600080600080600060e0888a03121562003b0c57600080fd5b873562003b198162003ae0565b965062003b29602089016200380e565b9550604088013562003b3b81620037d9565b945062003b4b606089016200380e565b9350608088013562003b5d81620037d9565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562003b975762003b9762003973565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011262003bd557600080fd5b813562003bec62003be68262003b7a565b620039a2565b81815284602083860101111562003c0257600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562003c4057600080fd5b8a3567ffffffffffffffff8082111562003c5957600080fd5b62003c678e838f01620039f4565b9b5062003c7760208e016200380e565b9a5060408d0135995060608d0135985062003c9560808e016200380e565b975062003ca560a08e01620037fc565b965062003cb560c08e016200380e565b955062003cc560e08e01620037fc565b94506101008d013593506101208d013591508082111562003ce557600080fd5b5062003cf48d828e0162003bc3565b9150509295989b9194979a5092959850565b60008060006060848603121562003d1c57600080fd5b62003d27846200380e565b9250602084013562003d3981620037d9565b9150604084013567ffffffffffffffff81111562003d5657600080fd5b62003d648682870162003bc3565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003e03577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003e3c5762003e3c62003d9d565b5060010190565b60006020828403121562003e5657600080fd5b5051919050565b60005b8381101562003e7a57818101518382015260200162003e60565b83811115620034975750506000910152565b6000815180845262003ea681602086016020860162003e5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003f15606083018462003e8c565b95945050505050565b6000825162003f3281846020870162003e5d565b9190910192915050565b600082601f83011262003f4e57600080fd5b815162003f5f62003be68262003b7a565b81815284602083860101111562003f7557600080fd5b6200207582602083016020870162003e5d565b60008060006060848603121562003f9e57600080fd5b835167ffffffffffffffff8082111562003fb757600080fd5b62003fc58783880162003f3c565b9450602086015191508082111562003fdc57600080fd5b5062003feb8682870162003f3c565b925050604084015162003ffe8162003ae0565b809150509250925092565b60a0815260006200401e60a083018862003e8c565b828103602084015262004032818862003e8c565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000602082840312156200407c57600080fd5b8151801515811462002e8c57600080fd5b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620040ed8285018762003e8c565b925080851660e085015250509998505050505050505050565b6000602082840312156200411957600080fd5b815167ffffffffffffffff8111156200413157600080fd5b620020758482850162003f3c565b6000602082840312156200415257600080fd5b815162002e8c8162003ae0565b60608152600062004174606083018662003e8c565b828103602084015262004188818662003e8c565b91505060ff83166040830152949350505050565b600082821015620041b157620041b162003d9d565b500390565b60008219821115620041cc57620041cc62003d9d565b500190565b600181815b808511156200423057817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562004214576200421462003d9d565b808516156200422257918102915b93841c9390800290620041d6565b509250929050565b600082620042495750600162000872565b81620042585750600062000872565b81600181146200427157600281146200427c576200429c565b600191505062000872565b60ff84111562004290576200429062003d9d565b50506001821b62000872565b5060208310610133831016604e8410600b8410161715620042c1575081810a62000872565b620042cd8383620041d1565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562004302576200430262003d9d565b029392505050565b600062002e8c838362004238565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600080858511156200435857600080fd5b838611156200436657600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200438f57600080fd5b87356200439c81620037d9565b96506020880135620043ae81620037d9565b95506040880135945060608801359350608088013562003b5d8162003ae0565b60208152600062002e8c602083018462003e8c56fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a2646970667358221220ebc3e29e73e7ee8654e10660476c7bd4773adb9823eb2f08ac27bcab930c4a4364736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/ProofOfEfficiency.json b/compiled-contracts/ProofOfEfficiency.json index 08ec0f68d..95fc9bd81 100644 --- a/compiled-contracts/ProofOfEfficiency.json +++ b/compiled-contracts/ProofOfEfficiency.json @@ -128,7 +128,7 @@ "type": "address" } ], - "name": "VerifyBatch", + "name": "VerifyBatches", "type": "event" }, { @@ -185,12 +185,12 @@ }, { "inputs": [], - "name": "chainID", + "name": "calculateRewardPerBatch", "outputs": [ { - "internalType": "uint64", + "internalType": "uint256", "name": "", - "type": "uint64" + "type": "uint256" } ], "stateMutability": "view", @@ -198,12 +198,12 @@ }, { "inputs": [], - "name": "currentLocalExitRoot", + "name": "chainID", "outputs": [ { - "internalType": "bytes32", + "internalType": "uint64", "name": "", - "type": "bytes32" + "type": "uint64" } ], "stateMutability": "view", @@ -265,18 +265,42 @@ "outputs": [ { "internalType": "bytes32", - "name": "batchHashData", + "name": "", "type": "bytes32" - }, + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ { - "internalType": "uint256", - "name": "maticFee", - "type": "uint256" + "internalType": "uint64", + "name": "_lastVerifiedBatch", + "type": "uint64" }, { "internalType": "uint64", - "name": "minTimestamp", + "name": "newVerifiedBatch", "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "newLocalExitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "newStateRoot", + "type": "bytes32" + } + ], + "name": "getInputSnarkBytes", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" } ], "stateMutability": "view", @@ -472,9 +496,9 @@ "type": "uint64" }, { - "internalType": "uint64[]", - "name": "forceBatchesTimestamp", - "type": "uint64[]" + "internalType": "uint64", + "name": "minForcedTimestamp", + "type": "uint64" } ], "internalType": "struct ProofOfEfficiency.BatchData[]", @@ -490,9 +514,26 @@ { "inputs": [ { - "internalType": "uint64", - "name": "numForcedBatches", - "type": "uint64" + "components": [ + { + "internalType": "bytes", + "name": "transactions", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "globalExitRoot", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "minForcedTimestamp", + "type": "uint64" + } + ], + "internalType": "struct ProofOfEfficiency.ForceBatchData[]", + "name": "batches", + "type": "tuple[]" } ], "name": "sequenceForceBatches", @@ -512,18 +553,8 @@ "outputs": [ { "internalType": "bytes32", - "name": "batchHashData", + "name": "", "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "timestamp", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "forceBatchNum", - "type": "uint64" } ], "stateMutability": "view", @@ -596,6 +627,16 @@ }, { "inputs": [ + { + "internalType": "uint64", + "name": "_lastVerifiedBatch", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "newVerifiedBatch", + "type": "uint64" + }, { "internalType": "bytes32", "name": "newLocalExitRoot", @@ -606,11 +647,6 @@ "name": "newStateRoot", "type": "bytes32" }, - { - "internalType": "uint64", - "name": "numBatch", - "type": "uint64" - }, { "internalType": "uint256[2]", "name": "proofA", @@ -627,14 +663,14 @@ "type": "uint256[2]" } ], - "name": "verifyBatch", + "name": "verifyBatches", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506134ac806100206000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c8063ac2eba9811610104578063d02103ca116100a2578063e8bf92ed11610071578063e8bf92ed1461050e578063eaeb077b1461052e578063f755276114610541578063f7d2cd7f1461055057600080fd5b8063d02103ca1461046e578063d2fd1b311461048e578063d8f54db0146104a1578063e7a7ed02146104de57600080fd5b8063b4d63f58116100de578063b4d63f581461037d578063b6b0b097146103e4578063c89e42df1461042f578063cfa8ed471461044257600080fd5b8063ac2eba9814610357578063adc879e914610360578063b02286c01461037457600080fd5b8063798470571161017157806395297e241161014b57806395297e241461031e578063959c2f4714610331578063aa0f44181461033a578063ab9fc5ef1461034d57600080fd5b806379847057146102e15780637fcb3653146102f75780638c4a0af71461030b57600080fd5b806345605267116101ad578063456052671461023f578063542028d5146102675780636b8616ce1461026f5780636ff512cc146102cc57600080fd5b8063107bf28c146101d457806319d8ac61146101f2578063423fa8561461021f575b600080fd5b6101dc610563565b6040516101e99190612a2f565b60405180910390f35b6003546102069067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101e9565b6003546102069068010000000000000000900467ffffffffffffffff1681565b60035461020690700100000000000000000000000000000000900467ffffffffffffffff1681565b6101dc6105f1565b6102a761027d366004612a5f565b600160208190526000918252604090912080549181015460029091015467ffffffffffffffff1683565b60408051938452602084019290925267ffffffffffffffff16908201526060016101e9565b6102df6102da366004612aaa565b6105fe565b005b6102e961073e565b6040519081526020016101e9565b6004546102069067ffffffffffffffff1681565b6102df610319366004612ae0565b6107b8565b6102df61032c366004612b14565b6108ec565b6102e960075481565b6102df610348366004612a5f565b610f34565b61020662093a8081565b6102e960065481565b600a546102069067ffffffffffffffff1681565b6102e961ea6081565b6103be61038b366004612a5f565b6002602052600090815260409020805460019091015467ffffffffffffffff808216916801000000000000000090041683565b6040805193845267ffffffffffffffff92831660208501529116908201526060016101e9565b60005461040a9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e9565b6102df61043d366004612cba565b611482565b60045461040a9068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b60055461040a9073ffffffffffffffffffffffffffffffffffffffff1681565b6102df61049c366004612cf7565b611571565b6004546104ce907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016101e9565b600354610206907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b60085461040a9073ffffffffffffffffffffffffffffffffffffffff1681565b6102df61053c366004612dcd565b61185e565b6102e967016345785d8a000081565b6102df61055e366004612e36565b611d44565b600b805461057090612fdb565b80601f016020809104026020016040519081016040528092919081815260200182805461059c90612fdb565b80156105e95780601f106105be576101008083540402835291602001916105e9565b820191906000526020600020905b8154815290600101906020018083116105cc57829003601f168201915b505050505081565b6009805461057090612fdb565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146106b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b60035460009067ffffffffffffffff700100000000000000000000000000000000820481169161078d91780100000000000000000000000000000000000000000000000090910416600161305d565b6107979190613089565b6107b39067ffffffffffffffff16670de0b6b3a76400006130b2565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461086b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016106ad565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061073390831515815260200190565b6004546109049067ffffffffffffffff16600161305d565b67ffffffffffffffff168467ffffffffffffffff16146109a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f74206d6174636800000000000000000000000060648201526084016106ad565b60035467ffffffffffffffff6801000000000000000090910481169085161115610a78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016106ad565b67ffffffffffffffff808516600090815260026020526040812060010154808316928291680100000000000000009004168103610ad957505067ffffffffffffffff851660009081526002602052604090205467016345785d8a0000610b39565b505067ffffffffffffffff8086166000908152600260208181526040808420600190810154680100000000000000009004861685528083529381902081516060810183528154808252958201549381018490529301549094169190930152905b600654600754600a54604080516020810194909452830191909152606082018a9052608082018b905260a082018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b82168185015286811b821660c88501529190911b1660d082015260009060d801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012060948401909252605483523360601b9083015291506034810160005b6008811015610c42577bffffffff0000000000000000000000000000000000000000000000006020820285901c60c01b168252600890910190600101610c01565b505060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051610c7791906130ef565b602060405180830381855afa158015610c94573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610cb7919061310b565b610cc19190613124565b6008546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91610d2b918d918d918d919060040161315f565b602060405180830381865afa158015610d48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6c91906131d9565b610df8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f494e56414c49445f50524f4f460000000000000000000000000000000000000060648201526084016106ad565b6004805467ffffffffffffffff16906000610e12836131f6565b825467ffffffffffffffff9182166101009390930a92830291909202199091161790555060068b905560078c90556005546040517f33d6247d000000000000000000000000000000000000000000000000000000008152600481018e905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b158015610eac57600080fd5b505af1158015610ec0573d6000803e3d6000fd5b5050600054610eef925062010000900473ffffffffffffffffffffffffffffffffffffffff1690503386612574565b604051339067ffffffffffffffff8c16907f2cdf1508085a46c7241a7d78c5a1ec3d9246d1ab95e1c2a33676d29e17d4222390600090a3505050505050505050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114611011576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016106ad565b600354600090611040908390700100000000000000000000000000000000900467ffffffffffffffff1661305d565b905060008267ffffffffffffffff1611611102576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016106ad565b60035467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690821611156111be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016106ad565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146112d65767ffffffffffffffff80821660009081526001602052604090206002015442916112189162093a80911661305d565b67ffffffffffffffff1611156112d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016106ad565b60035467ffffffffffffffff68010000000000000000820481169170010000000000000000000000000000000090041660005b8467ffffffffffffffff168110156113c55781611325816131f6565b9250508280611333906131f6565b67ffffffffffffffff818116600090815260026020526040902060010180547fffffffffffffffffffffffffffffffff000000000000000000000000000000001668010000000000000000878416027fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016174290921691909117905593508190506113bd8161321d565b915050611309565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117680100000000000000008583168102919091177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff16700100000000000000000000000000000000858416021792839055604051920416907f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a490600090a250505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016106ad565b600961154182826132a3565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b20816040516107339190612a2f565b600054610100900460ff16158080156115915750600054600160ff909116105b806115ab5750303b1580156115ab575060005460ff166001145b611637576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016106ad565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561169557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602179055600880549091168a83161790556006889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c01000000000000000000000000000000000000000000000000000000008715150217905560096117ad85826132a3565b50600a80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600b6117ee83826132a3565b50801561185257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461193b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016106ad565b600061194561073e565b9050818111156119d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016106ad565b61ea60835110611a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016106ad565b600054611a949062010000900473ffffffffffffffffffffffffffffffffffffffff1633308461264d565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015611b04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b28919061310b565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018611b62836131f6565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050838133604051602001611b9e939291906133bd565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003805478010000000000000000000000000000000000000000000000009081900467ffffffffffffffff908116600090815260019687905285812094909455825482900481168452848420909501879055905404831681522060020180547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001642909216919091179055323303611ce157600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2611d3e565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051611d3593929190613409565b60405180910390a25b50505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611df7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016106ad565b8051611e373330611e108467016345785d8a00006130b2565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1692919061264d565b60035467ffffffffffffffff808216916801000000000000000081048216917001000000000000000000000000000000009091041660005b848110156123fb576000868281518110611e8b57611e8b613447565b602002602001015190508467ffffffffffffffff16816040015167ffffffffffffffff1610158015611ecb575042816040015167ffffffffffffffff1611155b611f7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016106ad565b6020810151158061202c575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291611fe69160040190815260200190565b6020604051808303816000875af1158015612005573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612029919061310b565b15155b6120b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016106ad565b80515161ea601161214b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016106ad565b83612155816131f6565b8251602080850151604051939850612172945091923391016133bd565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018152918152815160209283012067ffffffffffffffff8781166000908152600290945282842091825591840151600190910180547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000169282169290921790915595505b8160600151518110156123e65783612215816131f6565b94505060008260600151828151811061223057612230613447565b602002602001015190508667ffffffffffffffff168167ffffffffffffffff161015801561227f575067ffffffffffffffff808616600090815260016020526040902060020154811690821610155b80156122955750428167ffffffffffffffff1611155b612347576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520696e736964652072616e6765000000000000000000000000000000608482015260a4016106ad565b85612351816131f6565b67ffffffffffffffff818116600090815260026020526040902060010180547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016680100000000000000008a8416027fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016179185169190911790559197509095508190506123de8161321d565b9150506121fe565b505080806123f39061321d565b915050611e6f565b5060035467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690821611156124b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016106ad565b6003805467ffffffffffffffff8581167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117680100000000000000008583168102919091177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff16700100000000000000000000000000000000858416021792839055604051920416907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a25050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526126489084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526126ab565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611d3e9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016125c6565b600061270d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166127b79092919063ffffffff16565b805190915015612648578080602001905181019061272b91906131d9565b612648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016106ad565b60606127c684846000856127d0565b90505b9392505050565b606082471015612862576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016106ad565b73ffffffffffffffffffffffffffffffffffffffff85163b6128e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106ad565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161290991906130ef565b60006040518083038185875af1925050503d8060008114612946576040519150601f19603f3d011682016040523d82523d6000602084013e61294b565b606091505b509150915061295b828286612966565b979650505050505050565b606083156129755750816127c9565b8251156129855782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad9190612a2f565b60005b838110156129d45781810151838201526020016129bc565b83811115611d3e5750506000910152565b600081518084526129fd8160208601602086016129b9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006127c960208301846129e5565b803567ffffffffffffffff81168114612a5a57600080fd5b919050565b600060208284031215612a7157600080fd5b6127c982612a42565b73ffffffffffffffffffffffffffffffffffffffff81168114612a9c57600080fd5b50565b8035612a5a81612a7a565b600060208284031215612abc57600080fd5b81356127c981612a7a565b8015158114612a9c57600080fd5b8035612a5a81612ac7565b600060208284031215612af257600080fd5b81356127c981612ac7565b8060408101831015612b0e57600080fd5b92915050565b6000806000806000806101608789031215612b2e57600080fd5b8635955060208701359450612b4560408801612a42565b9350612b548860608901612afd565b9250610120870188811115612b6857600080fd5b60a088019250612b788982612afd565b9150509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715612bd757612bd7612b85565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612c2457612c24612b85565b604052919050565b600082601f830112612c3d57600080fd5b813567ffffffffffffffff811115612c5757612c57612b85565b612c8860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612bdd565b818152846020838601011115612c9d57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215612ccc57600080fd5b813567ffffffffffffffff811115612ce357600080fd5b612cef84828501612c2c565b949350505050565b60008060008060008060008060006101208a8c031215612d1657600080fd5b8935612d2181612a7a565b985060208a0135612d3181612a7a565b9750612d3f60408b01612a9f565b965060608a01359550612d5460808b01612a9f565b9450612d6260a08b01612ad5565b935060c08a013567ffffffffffffffff80821115612d7f57600080fd5b612d8b8d838e01612c2c565b9450612d9960e08d01612a42565b93506101008c0135915080821115612db057600080fd5b50612dbd8c828d01612c2c565b9150509295985092959850929598565b60008060408385031215612de057600080fd5b823567ffffffffffffffff811115612df757600080fd5b612e0385828601612c2c565b95602094909401359450505050565b600067ffffffffffffffff821115612e2c57612e2c612b85565b5060051b60200190565b60006020808385031215612e4957600080fd5b823567ffffffffffffffff80821115612e6157600080fd5b818501915085601f830112612e7557600080fd5b8135612e88612e8382612e12565b612bdd565b81815260059190911b83018401908481019088831115612ea757600080fd5b8585015b83811015612fce57803585811115612ec257600080fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0011215612ef657600080fd5b612efe612bb4565b8882013587811115612f0f57600080fd5b612f1d8d8b83860101612c2c565b8252506040808301358a830152612f3660608401612a42565b81830152608083013588811115612f4d5760008081fd5b8084019350508c603f840112612f635760008081fd5b89830135612f73612e8382612e12565b81815260059190911b84018201908b8101908f831115612f935760008081fd5b948301945b82861015612fb857612fa986612a42565b8252948c0194908c0190612f98565b6060850152505050845250918601918601612eab565b5098975050505050505050565b600181811c90821680612fef57607f821691505b602082108103613028577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168185168083038211156130805761308061302e565b01949350505050565b600067ffffffffffffffff838116908316818110156130aa576130aa61302e565b039392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156130ea576130ea61302e565b500290565b600082516131018184602087016129b9565b9190910192915050565b60006020828403121561311d57600080fd5b5051919050565b60008261315a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500690565b61012081016040808784376000838201818152879190815b600281101561319757848483379084018281529284019290600101613177565b5050828760c0870137610100850181815286935091505b60018110156131cd5782518252602092830192909101906001016131ae565b50505095945050505050565b6000602082840312156131eb57600080fd5b81516127c981612ac7565b600067ffffffffffffffff8083168181036132135761321361302e565b6001019392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361324e5761324e61302e565b5060010190565b601f82111561264857600081815260208120601f850160051c8101602086101561327c5750805b601f850160051c820191505b8181101561329b57828155600101613288565b505050505050565b815167ffffffffffffffff8111156132bd576132bd612b85565b6132d1816132cb8454612fdb565b84613255565b602080601f83116001811461332457600084156132ee5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561329b565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561337157888601518255948401946001909101908401613352565b50858210156133ad57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600084516133cf8184602089016129b9565b919091019283525060601b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166020820152603401919050565b83815273ffffffffffffffffffffffffffffffffffffffff8316602082015260606040820152600061343e60608301846129e5565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea26469706673582212208e1a513f9f1e5c7540884486c76e6f2dc5642e875e5d1f0efea2dfb8a641e6e064736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c8063ac2eba9811610104578063d02103ca116100a2578063e8bf92ed11610071578063e8bf92ed1461050e578063eaeb077b1461052e578063f755276114610541578063f7d2cd7f1461055057600080fd5b8063d02103ca1461046e578063d2fd1b311461048e578063d8f54db0146104a1578063e7a7ed02146104de57600080fd5b8063b4d63f58116100de578063b4d63f581461037d578063b6b0b097146103e4578063c89e42df1461042f578063cfa8ed471461044257600080fd5b8063ac2eba9814610357578063adc879e914610360578063b02286c01461037457600080fd5b8063798470571161017157806395297e241161014b57806395297e241461031e578063959c2f4714610331578063aa0f44181461033a578063ab9fc5ef1461034d57600080fd5b806379847057146102e15780637fcb3653146102f75780638c4a0af71461030b57600080fd5b806345605267116101ad578063456052671461023f578063542028d5146102675780636b8616ce1461026f5780636ff512cc146102cc57600080fd5b8063107bf28c146101d457806319d8ac61146101f2578063423fa8561461021f575b600080fd5b6101dc610563565b6040516101e99190612a2f565b60405180910390f35b6003546102069067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101e9565b6003546102069068010000000000000000900467ffffffffffffffff1681565b60035461020690700100000000000000000000000000000000900467ffffffffffffffff1681565b6101dc6105f1565b6102a761027d366004612a5f565b600160208190526000918252604090912080549181015460029091015467ffffffffffffffff1683565b60408051938452602084019290925267ffffffffffffffff16908201526060016101e9565b6102df6102da366004612aaa565b6105fe565b005b6102e961073e565b6040519081526020016101e9565b6004546102069067ffffffffffffffff1681565b6102df610319366004612ae0565b6107b8565b6102df61032c366004612b14565b6108ec565b6102e960075481565b6102df610348366004612a5f565b610f34565b61020662093a8081565b6102e960065481565b600a546102069067ffffffffffffffff1681565b6102e961ea6081565b6103be61038b366004612a5f565b6002602052600090815260409020805460019091015467ffffffffffffffff808216916801000000000000000090041683565b6040805193845267ffffffffffffffff92831660208501529116908201526060016101e9565b60005461040a9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e9565b6102df61043d366004612cba565b611482565b60045461040a9068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b60055461040a9073ffffffffffffffffffffffffffffffffffffffff1681565b6102df61049c366004612cf7565b611571565b6004546104ce907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016101e9565b600354610206907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b60085461040a9073ffffffffffffffffffffffffffffffffffffffff1681565b6102df61053c366004612dcd565b61185e565b6102e967016345785d8a000081565b6102df61055e366004612e36565b611d44565b600b805461057090612fdb565b80601f016020809104026020016040519081016040528092919081815260200182805461059c90612fdb565b80156105e95780601f106105be576101008083540402835291602001916105e9565b820191906000526020600020905b8154815290600101906020018083116105cc57829003601f168201915b505050505081565b6009805461057090612fdb565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146106b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b60035460009067ffffffffffffffff700100000000000000000000000000000000820481169161078d91780100000000000000000000000000000000000000000000000090910416600161305d565b6107979190613089565b6107b39067ffffffffffffffff16670de0b6b3a76400006130b2565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461086b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016106ad565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061073390831515815260200190565b6004546109049067ffffffffffffffff16600161305d565b67ffffffffffffffff168467ffffffffffffffff16146109a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f74206d6174636800000000000000000000000060648201526084016106ad565b60035467ffffffffffffffff6801000000000000000090910481169085161115610a78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016106ad565b67ffffffffffffffff808516600090815260026020526040812060010154808316928291680100000000000000009004168103610ad957505067ffffffffffffffff851660009081526002602052604090205467016345785d8a0000610b39565b505067ffffffffffffffff8086166000908152600260208181526040808420600190810154680100000000000000009004861685528083529381902081516060810183528154808252958201549381018490529301549094169190930152905b600654600754600a54604080516020810194909452830191909152606082018a9052608082018b905260a082018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b82168185015286811b821660c88501529190911b1660d082015260009060d801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012060948401909252605483523360601b9083015291506034810160005b6008811015610c42577bffffffff0000000000000000000000000000000000000000000000006020820285901c60c01b168252600890910190600101610c01565b505060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051610c7791906130ef565b602060405180830381855afa158015610c94573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610cb7919061310b565b610cc19190613124565b6008546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91610d2b918d918d918d919060040161315f565b602060405180830381865afa158015610d48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6c91906131d9565b610df8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f494e56414c49445f50524f4f460000000000000000000000000000000000000060648201526084016106ad565b6004805467ffffffffffffffff16906000610e12836131f6565b825467ffffffffffffffff9182166101009390930a92830291909202199091161790555060068b905560078c90556005546040517f33d6247d000000000000000000000000000000000000000000000000000000008152600481018e905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b158015610eac57600080fd5b505af1158015610ec0573d6000803e3d6000fd5b5050600054610eef925062010000900473ffffffffffffffffffffffffffffffffffffffff1690503386612574565b604051339067ffffffffffffffff8c16907f2cdf1508085a46c7241a7d78c5a1ec3d9246d1ab95e1c2a33676d29e17d4222390600090a3505050505050505050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114611011576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016106ad565b600354600090611040908390700100000000000000000000000000000000900467ffffffffffffffff1661305d565b905060008267ffffffffffffffff1611611102576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016106ad565b60035467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690821611156111be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016106ad565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146112d65767ffffffffffffffff80821660009081526001602052604090206002015442916112189162093a80911661305d565b67ffffffffffffffff1611156112d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016106ad565b60035467ffffffffffffffff68010000000000000000820481169170010000000000000000000000000000000090041660005b8467ffffffffffffffff168110156113c55781611325816131f6565b9250508280611333906131f6565b67ffffffffffffffff818116600090815260026020526040902060010180547fffffffffffffffffffffffffffffffff000000000000000000000000000000001668010000000000000000878416027fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016174290921691909117905593508190506113bd8161321d565b915050611309565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117680100000000000000008583168102919091177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff16700100000000000000000000000000000000858416021792839055604051920416907f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a490600090a250505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016106ad565b600961154182826132a3565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b20816040516107339190612a2f565b600054610100900460ff16158080156115915750600054600160ff909116105b806115ab5750303b1580156115ab575060005460ff166001145b611637576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016106ad565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561169557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602179055600880549091168a83161790556006889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c01000000000000000000000000000000000000000000000000000000008715150217905560096117ad85826132a3565b50600a80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600b6117ee83826132a3565b50801561185257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461193b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016106ad565b600061194561073e565b9050818111156119d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016106ad565b61ea60835110611a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016106ad565b600054611a949062010000900473ffffffffffffffffffffffffffffffffffffffff1633308461264d565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015611b04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b28919061310b565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018611b62836131f6565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050838133604051602001611b9e939291906133bd565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003805478010000000000000000000000000000000000000000000000009081900467ffffffffffffffff908116600090815260019687905285812094909455825482900481168452848420909501879055905404831681522060020180547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001642909216919091179055323303611ce157600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2611d3e565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051611d3593929190613409565b60405180910390a25b50505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611df7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016106ad565b8051611e373330611e108467016345785d8a00006130b2565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1692919061264d565b60035467ffffffffffffffff808216916801000000000000000081048216917001000000000000000000000000000000009091041660005b848110156123fb576000868281518110611e8b57611e8b613447565b602002602001015190508467ffffffffffffffff16816040015167ffffffffffffffff1610158015611ecb575042816040015167ffffffffffffffff1611155b611f7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016106ad565b6020810151158061202c575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291611fe69160040190815260200190565b6020604051808303816000875af1158015612005573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612029919061310b565b15155b6120b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016106ad565b80515161ea601161214b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016106ad565b83612155816131f6565b8251602080850151604051939850612172945091923391016133bd565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018152918152815160209283012067ffffffffffffffff8781166000908152600290945282842091825591840151600190910180547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000169282169290921790915595505b8160600151518110156123e65783612215816131f6565b94505060008260600151828151811061223057612230613447565b602002602001015190508667ffffffffffffffff168167ffffffffffffffff161015801561227f575067ffffffffffffffff808616600090815260016020526040902060020154811690821610155b80156122955750428167ffffffffffffffff1611155b612347576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520696e736964652072616e6765000000000000000000000000000000608482015260a4016106ad565b85612351816131f6565b67ffffffffffffffff818116600090815260026020526040902060010180547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016680100000000000000008a8416027fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016179185169190911790559197509095508190506123de8161321d565b9150506121fe565b505080806123f39061321d565b915050611e6f565b5060035467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690821611156124b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016106ad565b6003805467ffffffffffffffff8581167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117680100000000000000008583168102919091177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff16700100000000000000000000000000000000858416021792839055604051920416907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a25050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526126489084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526126ab565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611d3e9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016125c6565b600061270d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166127b79092919063ffffffff16565b805190915015612648578080602001905181019061272b91906131d9565b612648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016106ad565b60606127c684846000856127d0565b90505b9392505050565b606082471015612862576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016106ad565b73ffffffffffffffffffffffffffffffffffffffff85163b6128e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106ad565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161290991906130ef565b60006040518083038185875af1925050503d8060008114612946576040519150601f19603f3d011682016040523d82523d6000602084013e61294b565b606091505b509150915061295b828286612966565b979650505050505050565b606083156129755750816127c9565b8251156129855782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad9190612a2f565b60005b838110156129d45781810151838201526020016129bc565b83811115611d3e5750506000910152565b600081518084526129fd8160208601602086016129b9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006127c960208301846129e5565b803567ffffffffffffffff81168114612a5a57600080fd5b919050565b600060208284031215612a7157600080fd5b6127c982612a42565b73ffffffffffffffffffffffffffffffffffffffff81168114612a9c57600080fd5b50565b8035612a5a81612a7a565b600060208284031215612abc57600080fd5b81356127c981612a7a565b8015158114612a9c57600080fd5b8035612a5a81612ac7565b600060208284031215612af257600080fd5b81356127c981612ac7565b8060408101831015612b0e57600080fd5b92915050565b6000806000806000806101608789031215612b2e57600080fd5b8635955060208701359450612b4560408801612a42565b9350612b548860608901612afd565b9250610120870188811115612b6857600080fd5b60a088019250612b788982612afd565b9150509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715612bd757612bd7612b85565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612c2457612c24612b85565b604052919050565b600082601f830112612c3d57600080fd5b813567ffffffffffffffff811115612c5757612c57612b85565b612c8860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612bdd565b818152846020838601011115612c9d57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215612ccc57600080fd5b813567ffffffffffffffff811115612ce357600080fd5b612cef84828501612c2c565b949350505050565b60008060008060008060008060006101208a8c031215612d1657600080fd5b8935612d2181612a7a565b985060208a0135612d3181612a7a565b9750612d3f60408b01612a9f565b965060608a01359550612d5460808b01612a9f565b9450612d6260a08b01612ad5565b935060c08a013567ffffffffffffffff80821115612d7f57600080fd5b612d8b8d838e01612c2c565b9450612d9960e08d01612a42565b93506101008c0135915080821115612db057600080fd5b50612dbd8c828d01612c2c565b9150509295985092959850929598565b60008060408385031215612de057600080fd5b823567ffffffffffffffff811115612df757600080fd5b612e0385828601612c2c565b95602094909401359450505050565b600067ffffffffffffffff821115612e2c57612e2c612b85565b5060051b60200190565b60006020808385031215612e4957600080fd5b823567ffffffffffffffff80821115612e6157600080fd5b818501915085601f830112612e7557600080fd5b8135612e88612e8382612e12565b612bdd565b81815260059190911b83018401908481019088831115612ea757600080fd5b8585015b83811015612fce57803585811115612ec257600080fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0011215612ef657600080fd5b612efe612bb4565b8882013587811115612f0f57600080fd5b612f1d8d8b83860101612c2c565b8252506040808301358a830152612f3660608401612a42565b81830152608083013588811115612f4d5760008081fd5b8084019350508c603f840112612f635760008081fd5b89830135612f73612e8382612e12565b81815260059190911b84018201908b8101908f831115612f935760008081fd5b948301945b82861015612fb857612fa986612a42565b8252948c0194908c0190612f98565b6060850152505050845250918601918601612eab565b5098975050505050505050565b600181811c90821680612fef57607f821691505b602082108103613028577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168185168083038211156130805761308061302e565b01949350505050565b600067ffffffffffffffff838116908316818110156130aa576130aa61302e565b039392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156130ea576130ea61302e565b500290565b600082516131018184602087016129b9565b9190910192915050565b60006020828403121561311d57600080fd5b5051919050565b60008261315a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500690565b61012081016040808784376000838201818152879190815b600281101561319757848483379084018281529284019290600101613177565b5050828760c0870137610100850181815286935091505b60018110156131cd5782518252602092830192909101906001016131ae565b50505095945050505050565b6000602082840312156131eb57600080fd5b81516127c981612ac7565b600067ffffffffffffffff8083168181036132135761321361302e565b6001019392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361324e5761324e61302e565b5060010190565b601f82111561264857600081815260208120601f850160051c8101602086101561327c5750805b601f850160051c820191505b8181101561329b57828155600101613288565b505050505050565b815167ffffffffffffffff8111156132bd576132bd612b85565b6132d1816132cb8454612fdb565b84613255565b602080601f83116001811461332457600084156132ee5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561329b565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561337157888601518255948401946001909101908401613352565b50858210156133ad57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600084516133cf8184602089016129b9565b919091019283525060601b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166020820152603401919050565b83815273ffffffffffffffffffffffffffffffffffffffff8316602082015260606040820152600061343e60608301846129e5565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea26469706673582212208e1a513f9f1e5c7540884486c76e6f2dc5642e875e5d1f0efea2dfb8a641e6e064736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5061399d806100206000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c8063ac2eba9811610104578063d02103ca116100a2578063e7a7ed0211610071578063e7a7ed021461048a578063e8bf92ed146104ba578063eaeb077b146104da578063f7552761146104ed57600080fd5b8063d02103ca14610407578063d2fd1b3114610427578063d8d1091b1461043a578063d8f54db01461044d57600080fd5b8063b4d63f58116100de578063b4d63f581461035d578063b6b0b0971461037d578063c89e42df146103c8578063cfa8ed47146103db57600080fd5b8063ac2eba9814610337578063adc879e914610340578063b02286c01461035457600080fd5b80636b8616ce1161017c5780637fcb36531161014b5780637fcb3653146102fe5780638c4a0af71461031257806399f5634e14610325578063ab9fc5ef1461032d57600080fd5b80636b8616ce146102a25780636ff512cc146102d05780637152facf146102e357806379847057146102f657600080fd5b8063423fa856116101b8578063423fa8561461023f578063456052671461025f578063542028d51461028757806355b925e61461028f57600080fd5b8063107bf28c146101df57806319d8ac61146101fd5780633c1582671461022a575b600080fd5b6101e76104fc565b6040516101f49190612e09565b60405180910390f35b6003546102119067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101f4565b61023d610238366004612fb5565b61058a565b005b6003546102119068010000000000000000900467ffffffffffffffff1681565b60035461021190700100000000000000000000000000000000900467ffffffffffffffff1681565b6101e7610ebc565b61023d61029d366004613101565b610ec9565b6102c26102b0366004613184565b60016020526000908152604090205481565b6040519081526020016101f4565b61023d6102de3660046131cf565b611439565b6101e76102f13660046131ec565b611574565b6102c2611721565b6004546102119067ffffffffffffffff1681565b61023d610320366004613247565b61179b565b6102c26118cf565b61021162093a8081565b6102c260065481565b6009546102119067ffffffffffffffff1681565b6102c261ea6081565b6102c261036b366004613184565b60026020526000908152604090205481565b6000546103a39062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f4565b61023d6103d6366004613264565b6119fe565b6004546103a39068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b61023d6104353660046132a1565b611aed565b61023d610448366004613377565b611dda565b60045461047a907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016101f4565b600354610211907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6007546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b61023d6104e8366004613488565b612480565b6102c267016345785d8a000081565b600a8054610509906134cd565b80601f0160208091040260200160405190810160405280929190818152602001828054610535906134cd565b80156105825780601f1061055757610100808354040283529160200191610582565b820191906000526020600020905b81548152906001019060200180831161056557829003601f168201915b505050505081565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b805160035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610c925760008782815181106106aa576106aa613520565b602002602001015190506000816060015167ffffffffffffffff16111561091557836106d58161357e565b94505060008160000151805190602001208260200151836060015160405160200161073893929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff881660009081526001909352912054909150811461083d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b816060015167ffffffffffffffff16826040015167ffffffffffffffff16101561090f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610639565b50610ae3565b602081015115806109c4575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b36329161097e9160040190815260200190565b6020604051808303816000875af115801561099d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c191906135a5565b15155b610a50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610639565b80515161ea6011610ae3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610639565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610b19575042816040015167ffffffffffffffff1611155b610bcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610c749061357e565b95505080604001519550508080610c8a906135be565b91505061068e565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610d4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610639565b600354600090610d7d90700100000000000000000000000000000000900467ffffffffffffffff16846135f6565b610d919067ffffffffffffffff168761361f565b6003805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c169390931793909317929092169190911790915560009081526002602052604090208390559050610e6f3330610e488467016345785d8a0000613636565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1692919061294e565b6003546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60088054610509906134cd565b60045467ffffffffffffffff888116911614610f8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c6173745665726966696564426174636820646f6573206e6f74206d6160648201527f7463680000000000000000000000000000000000000000000000000000000000608482015260a401610639565b8667ffffffffffffffff168667ffffffffffffffff1611611056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610639565b60035467ffffffffffffffff6801000000000000000090910481169087161115611129576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a76657269667942617463686573908201527f3a20626174636820646f6573206e6f742068617665206265656e20736571756560648201527f6e63656400000000000000000000000000000000000000000000000000000000608482015260a401610639565b600061113788888888611574565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161116c9190613673565b602060405180830381855afa158015611189573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906111ac91906135a5565b6111b691906136be565b6007546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d9161122091899189918991906004016136d2565b602060405180830381865afa15801561123d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611261919061374c565b6112ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610639565b61133d336112fb8b8b6135f6565b67ffffffffffffffff1661130d6118cf565b6113179190613636565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff169190612a2a565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a1617815560068790556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820189905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b1580156113df57600080fd5b505af11580156113f3573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8b1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a3505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146114ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b67ffffffffffffffff808516600090815260026020526040808220549286168252902054606091908061164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610639565b604080516101ac810190915261016c8152602081016116b5565b8160005b60088110156116ae577bffffffff0000000000000000000000000000000000000000000000006020820284901c60c01b16825260089091019060010161166d565b5092915050565b6116c181600654611669565b90506116cd8187611669565b90506116d98185611669565b90506116e58184611669565b90506116f18188611669565b60c08a811b825289811b6008830152600954901b60108201523360601b6018909101525092505050949350505050565b60035460009067ffffffffffffffff7001000000000000000000000000000000008204811691611770917801000000000000000000000000000000000000000000000000909104166001613769565b61177a91906135f6565b6117969067ffffffffffffffff16670de0b6b3a7640000613636565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461184e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061156990831515815260200190565b600080546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829162010000900473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015611944573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196891906135a5565b60045460035491925060009167ffffffffffffffff918216916801000000000000000082048116916119cd91700100000000000000000000000000000000820481169178010000000000000000000000000000000000000000000000009004166135f6565b6119d79190613769565b6119e191906135f6565b67ffffffffffffffff1690506119f78183613795565b9250505090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611ab1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b6008611abd82826137f7565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b20816040516115699190612e09565b600054610100900460ff1615808015611b0d5750600054600160ff909116105b80611b275750303b158015611b27575060005460ff166001145b611bb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610639565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611c1157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602179055600780549091168a83161790556006889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c0100000000000000000000000000000000000000000000000000000000871515021790556008611d2985826137f7565b50600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600a611d6a83826137f7565b508015611dce57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114611eb7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610639565b805180611f6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b60035467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691611fb7918491700100000000000000000000000000000000900416613911565b1115612045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610639565b60035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205491937001000000000000000000000000000000009004909216915b848110156123b05760008682815181106120a5576120a5613520565b6020026020010151905083806120ba9061357e565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114612213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610639565b61221e60018861361f565b83036122f6574262093a8083604001516122389190613769565b67ffffffffffffffff1611156122f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610639565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c0160405160208183030381529060405280519060200120935085806123989061357e565b965050505080806123a8906135be565b915050612089565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260026020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461255d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610639565b6000612567611721565b9050818111156125f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610639565b61ea6083511061268b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610639565b6000546126b69062010000900473ffffffffffffffffffffffffffffffffffffffff1633308461294e565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015612726573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274a91906135a5565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff169060186127848361357e565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050838051906020012081426040516020016127fd93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260019093529120553233036128eb57600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2612948565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161293f93929190613929565b60405180910390a25b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526129489085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a85565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052612a809084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016129a8565b505050565b6000612ae7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612b919092919063ffffffff16565b805190915015612a805780806020019051810190612b05919061374c565b612a80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610639565b6060612ba08484600085612baa565b90505b9392505050565b606082471015612c3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610639565b73ffffffffffffffffffffffffffffffffffffffff85163b612cba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610639565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612ce39190613673565b60006040518083038185875af1925050503d8060008114612d20576040519150601f19603f3d011682016040523d82523d6000602084013e612d25565b606091505b5091509150612d35828286612d40565b979650505050505050565b60608315612d4f575081612ba3565b825115612d5f5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106399190612e09565b60005b83811015612dae578181015183820152602001612d96565b838111156129485750506000910152565b60008151808452612dd7816020860160208601612d93565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612ba36020830184612dbf565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715612e6e57612e6e612e1c565b60405290565b6040516060810167ffffffffffffffff81118282101715612e6e57612e6e612e1c565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612ede57612ede612e1c565b604052919050565b600067ffffffffffffffff821115612f0057612f00612e1c565b5060051b60200190565b600082601f830112612f1b57600080fd5b813567ffffffffffffffff811115612f3557612f35612e1c565b612f6660207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612e97565b818152846020838601011115612f7b57600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114612fb057600080fd5b919050565b60006020808385031215612fc857600080fd5b823567ffffffffffffffff80821115612fe057600080fd5b818501915085601f830112612ff457600080fd5b813561300761300282612ee6565b612e97565b81815260059190911b8301840190848101908883111561302657600080fd5b8585015b838110156130dd578035858111156130425760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018113156130785760008081fd5b613080612e4b565b89830135888111156130925760008081fd5b6130a08e8c83870101612f0a565b8252506040808401358b83015260606130ba818601612f98565b828401526130c9848601612f98565b90830152508552505091860191860161302a565b5098975050505050505050565b80604081018310156130fb57600080fd5b92915050565b6000806000806000806000610180888a03121561311d57600080fd5b61312688612f98565b965061313460208901612f98565b955060408801359450606088013593506131518960808a016130ea565b925061014088018981111561316557600080fd5b60c0890192506131758a826130ea565b91505092959891949750929550565b60006020828403121561319657600080fd5b612ba382612f98565b73ffffffffffffffffffffffffffffffffffffffff811681146131c157600080fd5b50565b8035612fb08161319f565b6000602082840312156131e157600080fd5b8135612ba38161319f565b6000806000806080858703121561320257600080fd5b61320b85612f98565b935061321960208601612f98565b93969395505050506040820135916060013590565b80151581146131c157600080fd5b8035612fb08161322e565b60006020828403121561325957600080fd5b8135612ba38161322e565b60006020828403121561327657600080fd5b813567ffffffffffffffff81111561328d57600080fd5b61329984828501612f0a565b949350505050565b60008060008060008060008060006101208a8c0312156132c057600080fd5b89356132cb8161319f565b985060208a01356132db8161319f565b97506132e960408b016131c4565b965060608a013595506132fe60808b016131c4565b945061330c60a08b0161323c565b935060c08a013567ffffffffffffffff8082111561332957600080fd5b6133358d838e01612f0a565b945061334360e08d01612f98565b93506101008c013591508082111561335a57600080fd5b506133678c828d01612f0a565b9150509295985092959850929598565b6000602080838503121561338a57600080fd5b823567ffffffffffffffff808211156133a257600080fd5b818501915085601f8301126133b657600080fd5b81356133c461300282612ee6565b81815260059190911b830184019084810190888311156133e357600080fd5b8585015b838110156130dd578035858111156133ff5760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018113156134355760008081fd5b61343d612e74565b898301358881111561344f5760008081fd5b61345d8e8c83870101612f0a565b8252506040808401358b830152613475838501612f98565b90820152855250509186019186016133e7565b6000806040838503121561349b57600080fd5b823567ffffffffffffffff8111156134b257600080fd5b6134be85828601612f0a565b95602094909401359450505050565b600181811c908216806134e157607f821691505b60208210810361351a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681810361359b5761359b61354f565b6001019392505050565b6000602082840312156135b757600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036135ef576135ef61354f565b5060010190565b600067ffffffffffffffff838116908316818110156136175761361761354f565b039392505050565b6000828210156136315761363161354f565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561366e5761366e61354f565b500290565b60008251613685818460208701612d93565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826136cd576136cd61368f565b500690565b61012081016040808784376000838201818152879190815b600281101561370a578484833790840182815292840192906001016136ea565b5050828760c0870137610100850181815286935091505b6001811015613740578251825260209283019290910190600101613721565b50505095945050505050565b60006020828403121561375e57600080fd5b8151612ba38161322e565b600067ffffffffffffffff80831681851680830382111561378c5761378c61354f565b01949350505050565b6000826137a4576137a461368f565b500490565b601f821115612a8057600081815260208120601f850160051c810160208610156137d05750805b601f850160051c820191505b818110156137ef578281556001016137dc565b505050505050565b815167ffffffffffffffff81111561381157613811612e1c565b6138258161381f84546134cd565b846137a9565b602080601f83116001811461387857600084156138425750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556137ef565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156138c5578886015182559484019460019091019084016138a6565b508582101561390157878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156139245761392461354f565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff8316602082015260606040820152600061395e6060830184612dbf565b9594505050505056fea26469706673582212205ac85284b242f7df6b7b328555cdf7864ab45be1d500c36a27b08fcd2c9e403164736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101da5760003560e01c8063ac2eba9811610104578063d02103ca116100a2578063e7a7ed0211610071578063e7a7ed021461048a578063e8bf92ed146104ba578063eaeb077b146104da578063f7552761146104ed57600080fd5b8063d02103ca14610407578063d2fd1b3114610427578063d8d1091b1461043a578063d8f54db01461044d57600080fd5b8063b4d63f58116100de578063b4d63f581461035d578063b6b0b0971461037d578063c89e42df146103c8578063cfa8ed47146103db57600080fd5b8063ac2eba9814610337578063adc879e914610340578063b02286c01461035457600080fd5b80636b8616ce1161017c5780637fcb36531161014b5780637fcb3653146102fe5780638c4a0af71461031257806399f5634e14610325578063ab9fc5ef1461032d57600080fd5b80636b8616ce146102a25780636ff512cc146102d05780637152facf146102e357806379847057146102f657600080fd5b8063423fa856116101b8578063423fa8561461023f578063456052671461025f578063542028d51461028757806355b925e61461028f57600080fd5b8063107bf28c146101df57806319d8ac61146101fd5780633c1582671461022a575b600080fd5b6101e76104fc565b6040516101f49190612e09565b60405180910390f35b6003546102119067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101f4565b61023d610238366004612fb5565b61058a565b005b6003546102119068010000000000000000900467ffffffffffffffff1681565b60035461021190700100000000000000000000000000000000900467ffffffffffffffff1681565b6101e7610ebc565b61023d61029d366004613101565b610ec9565b6102c26102b0366004613184565b60016020526000908152604090205481565b6040519081526020016101f4565b61023d6102de3660046131cf565b611439565b6101e76102f13660046131ec565b611574565b6102c2611721565b6004546102119067ffffffffffffffff1681565b61023d610320366004613247565b61179b565b6102c26118cf565b61021162093a8081565b6102c260065481565b6009546102119067ffffffffffffffff1681565b6102c261ea6081565b6102c261036b366004613184565b60026020526000908152604090205481565b6000546103a39062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f4565b61023d6103d6366004613264565b6119fe565b6004546103a39068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b61023d6104353660046132a1565b611aed565b61023d610448366004613377565b611dda565b60045461047a907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016101f4565b600354610211907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6007546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b61023d6104e8366004613488565b612480565b6102c267016345785d8a000081565b600a8054610509906134cd565b80601f0160208091040260200160405190810160405280929190818152602001828054610535906134cd565b80156105825780601f1061055757610100808354040283529160200191610582565b820191906000526020600020905b81548152906001019060200180831161056557829003601f168201915b505050505081565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b805160035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610c925760008782815181106106aa576106aa613520565b602002602001015190506000816060015167ffffffffffffffff16111561091557836106d58161357e565b94505060008160000151805190602001208260200151836060015160405160200161073893929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff881660009081526001909352912054909150811461083d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b816060015167ffffffffffffffff16826040015167ffffffffffffffff16101561090f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610639565b50610ae3565b602081015115806109c4575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b36329161097e9160040190815260200190565b6020604051808303816000875af115801561099d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c191906135a5565b15155b610a50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610639565b80515161ea6011610ae3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610639565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610b19575042816040015167ffffffffffffffff1611155b610bcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610c749061357e565b95505080604001519550508080610c8a906135be565b91505061068e565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610d4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610639565b600354600090610d7d90700100000000000000000000000000000000900467ffffffffffffffff16846135f6565b610d919067ffffffffffffffff168761361f565b6003805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c169390931793909317929092169190911790915560009081526002602052604090208390559050610e6f3330610e488467016345785d8a0000613636565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1692919061294e565b6003546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60088054610509906134cd565b60045467ffffffffffffffff888116911614610f8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c6173745665726966696564426174636820646f6573206e6f74206d6160648201527f7463680000000000000000000000000000000000000000000000000000000000608482015260a401610639565b8667ffffffffffffffff168667ffffffffffffffff1611611056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610639565b60035467ffffffffffffffff6801000000000000000090910481169087161115611129576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a76657269667942617463686573908201527f3a20626174636820646f6573206e6f742068617665206265656e20736571756560648201527f6e63656400000000000000000000000000000000000000000000000000000000608482015260a401610639565b600061113788888888611574565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161116c9190613673565b602060405180830381855afa158015611189573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906111ac91906135a5565b6111b691906136be565b6007546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d9161122091899189918991906004016136d2565b602060405180830381865afa15801561123d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611261919061374c565b6112ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610639565b61133d336112fb8b8b6135f6565b67ffffffffffffffff1661130d6118cf565b6113179190613636565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff169190612a2a565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a1617815560068790556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820189905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b1580156113df57600080fd5b505af11580156113f3573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8b1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a3505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146114ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b67ffffffffffffffff808516600090815260026020526040808220549286168252902054606091908061164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610639565b604080516101ac810190915261016c8152602081016116b5565b8160005b60088110156116ae577bffffffff0000000000000000000000000000000000000000000000006020820284901c60c01b16825260089091019060010161166d565b5092915050565b6116c181600654611669565b90506116cd8187611669565b90506116d98185611669565b90506116e58184611669565b90506116f18188611669565b60c08a811b825289811b6008830152600954901b60108201523360601b6018909101525092505050949350505050565b60035460009067ffffffffffffffff7001000000000000000000000000000000008204811691611770917801000000000000000000000000000000000000000000000000909104166001613769565b61177a91906135f6565b6117969067ffffffffffffffff16670de0b6b3a7640000613636565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461184e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061156990831515815260200190565b600080546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829162010000900473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015611944573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196891906135a5565b60045460035491925060009167ffffffffffffffff918216916801000000000000000082048116916119cd91700100000000000000000000000000000000820481169178010000000000000000000000000000000000000000000000009004166135f6565b6119d79190613769565b6119e191906135f6565b67ffffffffffffffff1690506119f78183613795565b9250505090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611ab1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b6008611abd82826137f7565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b20816040516115699190612e09565b600054610100900460ff1615808015611b0d5750600054600160ff909116105b80611b275750303b158015611b27575060005460ff166001145b611bb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610639565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611c1157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602179055600780549091168a83161790556006889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c0100000000000000000000000000000000000000000000000000000000871515021790556008611d2985826137f7565b50600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600a611d6a83826137f7565b508015611dce57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114611eb7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610639565b805180611f6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b60035467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691611fb7918491700100000000000000000000000000000000900416613911565b1115612045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610639565b60035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205491937001000000000000000000000000000000009004909216915b848110156123b05760008682815181106120a5576120a5613520565b6020026020010151905083806120ba9061357e565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114612213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610639565b61221e60018861361f565b83036122f6574262093a8083604001516122389190613769565b67ffffffffffffffff1611156122f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610639565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c0160405160208183030381529060405280519060200120935085806123989061357e565b965050505080806123a8906135be565b915050612089565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260026020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461255d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610639565b6000612567611721565b9050818111156125f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610639565b61ea6083511061268b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610639565b6000546126b69062010000900473ffffffffffffffffffffffffffffffffffffffff1633308461294e565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015612726573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274a91906135a5565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff169060186127848361357e565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050838051906020012081426040516020016127fd93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260019093529120553233036128eb57600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2612948565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161293f93929190613929565b60405180910390a25b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526129489085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a85565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052612a809084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016129a8565b505050565b6000612ae7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612b919092919063ffffffff16565b805190915015612a805780806020019051810190612b05919061374c565b612a80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610639565b6060612ba08484600085612baa565b90505b9392505050565b606082471015612c3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610639565b73ffffffffffffffffffffffffffffffffffffffff85163b612cba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610639565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612ce39190613673565b60006040518083038185875af1925050503d8060008114612d20576040519150601f19603f3d011682016040523d82523d6000602084013e612d25565b606091505b5091509150612d35828286612d40565b979650505050505050565b60608315612d4f575081612ba3565b825115612d5f5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106399190612e09565b60005b83811015612dae578181015183820152602001612d96565b838111156129485750506000910152565b60008151808452612dd7816020860160208601612d93565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612ba36020830184612dbf565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715612e6e57612e6e612e1c565b60405290565b6040516060810167ffffffffffffffff81118282101715612e6e57612e6e612e1c565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612ede57612ede612e1c565b604052919050565b600067ffffffffffffffff821115612f0057612f00612e1c565b5060051b60200190565b600082601f830112612f1b57600080fd5b813567ffffffffffffffff811115612f3557612f35612e1c565b612f6660207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612e97565b818152846020838601011115612f7b57600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114612fb057600080fd5b919050565b60006020808385031215612fc857600080fd5b823567ffffffffffffffff80821115612fe057600080fd5b818501915085601f830112612ff457600080fd5b813561300761300282612ee6565b612e97565b81815260059190911b8301840190848101908883111561302657600080fd5b8585015b838110156130dd578035858111156130425760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018113156130785760008081fd5b613080612e4b565b89830135888111156130925760008081fd5b6130a08e8c83870101612f0a565b8252506040808401358b83015260606130ba818601612f98565b828401526130c9848601612f98565b90830152508552505091860191860161302a565b5098975050505050505050565b80604081018310156130fb57600080fd5b92915050565b6000806000806000806000610180888a03121561311d57600080fd5b61312688612f98565b965061313460208901612f98565b955060408801359450606088013593506131518960808a016130ea565b925061014088018981111561316557600080fd5b60c0890192506131758a826130ea565b91505092959891949750929550565b60006020828403121561319657600080fd5b612ba382612f98565b73ffffffffffffffffffffffffffffffffffffffff811681146131c157600080fd5b50565b8035612fb08161319f565b6000602082840312156131e157600080fd5b8135612ba38161319f565b6000806000806080858703121561320257600080fd5b61320b85612f98565b935061321960208601612f98565b93969395505050506040820135916060013590565b80151581146131c157600080fd5b8035612fb08161322e565b60006020828403121561325957600080fd5b8135612ba38161322e565b60006020828403121561327657600080fd5b813567ffffffffffffffff81111561328d57600080fd5b61329984828501612f0a565b949350505050565b60008060008060008060008060006101208a8c0312156132c057600080fd5b89356132cb8161319f565b985060208a01356132db8161319f565b97506132e960408b016131c4565b965060608a013595506132fe60808b016131c4565b945061330c60a08b0161323c565b935060c08a013567ffffffffffffffff8082111561332957600080fd5b6133358d838e01612f0a565b945061334360e08d01612f98565b93506101008c013591508082111561335a57600080fd5b506133678c828d01612f0a565b9150509295985092959850929598565b6000602080838503121561338a57600080fd5b823567ffffffffffffffff808211156133a257600080fd5b818501915085601f8301126133b657600080fd5b81356133c461300282612ee6565b81815260059190911b830184019084810190888311156133e357600080fd5b8585015b838110156130dd578035858111156133ff5760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018113156134355760008081fd5b61343d612e74565b898301358881111561344f5760008081fd5b61345d8e8c83870101612f0a565b8252506040808401358b830152613475838501612f98565b90820152855250509186019186016133e7565b6000806040838503121561349b57600080fd5b823567ffffffffffffffff8111156134b257600080fd5b6134be85828601612f0a565b95602094909401359450505050565b600181811c908216806134e157607f821691505b60208210810361351a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681810361359b5761359b61354f565b6001019392505050565b6000602082840312156135b757600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036135ef576135ef61354f565b5060010190565b600067ffffffffffffffff838116908316818110156136175761361761354f565b039392505050565b6000828210156136315761363161354f565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561366e5761366e61354f565b500290565b60008251613685818460208701612d93565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826136cd576136cd61368f565b500690565b61012081016040808784376000838201818152879190815b600281101561370a578484833790840182815292840192906001016136ea565b5050828760c0870137610100850181815286935091505b6001811015613740578251825260209283019290910190600101613721565b50505095945050505050565b60006020828403121561375e57600080fd5b8151612ba38161322e565b600067ffffffffffffffff80831681851680830382111561378c5761378c61354f565b01949350505050565b6000826137a4576137a461368f565b500490565b601f821115612a8057600081815260208120601f850160051c810160208610156137d05750805b601f850160051c820191505b818110156137ef578281556001016137dc565b505050505050565b815167ffffffffffffffff81111561381157613811612e1c565b6138258161381f84546134cd565b846137a9565b602080601f83116001811461387857600084156138425750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556137ef565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156138c5578886015182559484019460019091019084016138a6565b508582101561390157878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156139245761392461354f565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff8316602082015260606040820152600061395e6060830184612dbf565b9594505050505056fea26469706673582212205ac85284b242f7df6b7b328555cdf7864ab45be1d500c36a27b08fcd2c9e403164736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/ProofOfEfficiencyMock.json b/compiled-contracts/ProofOfEfficiencyMock.json index e174c0e0c..b076d1fd6 100644 --- a/compiled-contracts/ProofOfEfficiencyMock.json +++ b/compiled-contracts/ProofOfEfficiencyMock.json @@ -147,7 +147,7 @@ "type": "address" } ], - "name": "VerifyBatch", + "name": "VerifyBatches", "type": "event" }, { @@ -189,140 +189,66 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "calculateForceProverFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { "internalType": "bytes32", - "name": "currentStateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "currentLocalExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "newStateRoot", + "name": "currentAccInputHash", "type": "bytes32" }, { - "internalType": "bytes32", - "name": "newLocalExitRoot", - "type": "bytes32" + "internalType": "bytes", + "name": "transactions", + "type": "bytes" }, { "internalType": "bytes32", - "name": "batchHashData", + "name": "globalExitRoot", "type": "bytes32" }, - { - "internalType": "uint64", - "name": "numBatch", - "type": "uint64" - }, { "internalType": "uint64", "name": "timestamp", "type": "uint64" }, - { - "internalType": "uint64", - "name": "chainID", - "type": "uint64" - }, { "internalType": "address", - "name": "aggregatorAddress", + "name": "sequencerAddress", "type": "address" } ], - "name": "calculateSnarkInput", + "name": "calculateAccInputHash", "outputs": [ { - "internalType": "uint256", + "internalType": "bytes32", "name": "", - "type": "uint256" + "type": "bytes32" } ], "stateMutability": "pure", "type": "function" }, { - "inputs": [ - { - "internalType": "bytes32", - "name": "currentStateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "currentLocalExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "newStateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "newLocalExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "batchHashData", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "numBatch", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "timestamp", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "chainID", - "type": "uint64" - } - ], - "name": "calculateStarkInput", + "inputs": [], + "name": "calculateForceProverFee", "outputs": [ { - "internalType": "bytes32", + "internalType": "uint256", "name": "", - "type": "bytes32" + "type": "uint256" } ], - "stateMutability": "pure", + "stateMutability": "view", "type": "function" }, { "inputs": [], - "name": "chainID", + "name": "calculateRewardPerBatch", "outputs": [ { - "internalType": "uint64", + "internalType": "uint256", "name": "", - "type": "uint64" + "type": "uint256" } ], "stateMutability": "view", @@ -330,12 +256,12 @@ }, { "inputs": [], - "name": "currentLocalExitRoot", + "name": "chainID", "outputs": [ { - "internalType": "bytes32", + "internalType": "uint64", "name": "", - "type": "bytes32" + "type": "uint64" } ], "stateMutability": "view", @@ -397,18 +323,42 @@ "outputs": [ { "internalType": "bytes32", - "name": "batchHashData", + "name": "", "type": "bytes32" - }, + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ { - "internalType": "uint256", - "name": "maticFee", - "type": "uint256" + "internalType": "uint64", + "name": "_lastVerifiedBatch", + "type": "uint64" }, { "internalType": "uint64", - "name": "minTimestamp", + "name": "newVerifiedBatch", "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "newLocalExitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "newStateRoot", + "type": "bytes32" + } + ], + "name": "getInputSnarkBytes", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" } ], "stateMutability": "view", @@ -416,6 +366,16 @@ }, { "inputs": [ + { + "internalType": "uint64", + "name": "_lastVerifiedBatch", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "newVerifiedBatch", + "type": "uint64" + }, { "internalType": "bytes32", "name": "newLocalExitRoot", @@ -425,11 +385,6 @@ "internalType": "bytes32", "name": "newStateRoot", "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "numBatch", - "type": "uint64" } ], "name": "getNextSnarkInput", @@ -620,35 +575,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "newLocalExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "newStateRoot", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "numBatch", - "type": "uint32" - } - ], - "name": "returnInputHashParameters", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "rollupVerifier", @@ -682,9 +608,9 @@ "type": "uint64" }, { - "internalType": "uint64[]", - "name": "forceBatchesTimestamp", - "type": "uint64[]" + "internalType": "uint64", + "name": "minForcedTimestamp", + "type": "uint64" } ], "internalType": "struct ProofOfEfficiency.BatchData[]", @@ -700,9 +626,26 @@ { "inputs": [ { - "internalType": "uint64", - "name": "numForcedBatches", - "type": "uint64" + "components": [ + { + "internalType": "bytes", + "name": "transactions", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "globalExitRoot", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "minForcedTimestamp", + "type": "uint64" + } + ], + "internalType": "struct ProofOfEfficiency.ForceBatchData[]", + "name": "batches", + "type": "tuple[]" } ], "name": "sequenceForceBatches", @@ -722,36 +665,13 @@ "outputs": [ { "internalType": "bytes32", - "name": "batchHashData", + "name": "", "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "timestamp", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "forceBatchNum", - "type": "uint64" } ], "stateMutability": "view", "type": "function" }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "newLocalExitRoot", - "type": "bytes32" - } - ], - "name": "setExitRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -791,6 +711,24 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "batchNum", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "accInputData", + "type": "bytes32" + } + ], + "name": "setSequencedBatches", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -897,6 +835,16 @@ }, { "inputs": [ + { + "internalType": "uint64", + "name": "_lastVerifiedBatch", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "newVerifiedBatch", + "type": "uint64" + }, { "internalType": "bytes32", "name": "newLocalExitRoot", @@ -907,11 +855,6 @@ "name": "newStateRoot", "type": "bytes32" }, - { - "internalType": "uint64", - "name": "numBatch", - "type": "uint64" - }, { "internalType": "uint256[2]", "name": "proofA", @@ -928,13 +871,23 @@ "type": "uint256[2]" } ], - "name": "verifyBatch", + "name": "verifyBatches", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ + { + "internalType": "uint64", + "name": "_lastVerifiedBatch", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "newVerifiedBatch", + "type": "uint64" + }, { "internalType": "bytes32", "name": "newLocalExitRoot", @@ -945,11 +898,6 @@ "name": "newStateRoot", "type": "bytes32" }, - { - "internalType": "uint64", - "name": "numBatch", - "type": "uint64" - }, { "internalType": "uint256[2]", "name": "proofA", @@ -966,14 +914,14 @@ "type": "uint256[2]" } ], - "name": "verifyBatchMock", + "name": "verifyBatchesMock", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5061463e806100206000396000f3fe608060405234801561001057600080fd5b50600436106102e95760003560e01c8063aa0f441811610191578063d2fd1b31116100e3578063e7a7ed0211610097578063f2fde38b11610071578063f2fde38b146107ce578063f7552761146107e1578063f7d2cd7f146107f057600080fd5b8063e7a7ed021461076b578063e8bf92ed1461079b578063eaeb077b146107bb57600080fd5b8063d307b743116100c8578063d307b74314610688578063d8c276881461069b578063d8f54db01461072e57600080fd5b8063d2fd1b3114610662578063d2fe3c341461067557600080fd5b8063b4d63f5811610145578063c89e42df1161011f578063c89e42df14610603578063cfa8ed4714610616578063d02103ca1461064257600080fd5b8063b4d63f5814610563578063b6b0b097146105ca578063c0cad302146105f057600080fd5b8063ac2eba9811610176578063ac2eba981461053d578063adc879e914610546578063b02286c01461055a57600080fd5b8063aa0f441814610520578063ab9fc5ef1461053357600080fd5b80636b8616ce1161024a5780638c4a0af7116101fe578063959c2f47116101d8578063959c2f47146104f157806396dc3d39146104fa5780639b7967601461050d57600080fd5b80638c4a0af71461048c5780638da5cb5b1461049f57806395297e24146104de57600080fd5b8063715018a61161022f578063715018a61461046857806379847057146104705780637fcb36531461047857600080fd5b80636b8616ce146103f85780636ff512cc1461045557600080fd5b8063423fa856116102a1578063542028d511610286578063542028d5146103bc5780635437988d146103c457806357177ef5146103d757600080fd5b8063423fa85614610374578063456052671461039457600080fd5b8063116c40c3116102d2578063116c40c31461032157806319d8ac611461033457806325d0a8f51461036157600080fd5b8063076f9e36146102ee578063107bf28c14610303575b600080fd5b6103016102fc3660046139fd565b610803565b005b61030b610aa7565b6040516103189190613ae4565b60405180910390f35b61030161032f366004613af7565b610b35565b6003546103489067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610318565b61030b61036f366004613b10565b610b42565b6003546103489068010000000000000000900467ffffffffffffffff1681565b60035461034890700100000000000000000000000000000000900467ffffffffffffffff1681565b61030b610d76565b6103016103d2366004613b7f565b610d83565b6103ea6103e5366004613b9c565b610dd2565b604051908152602001610318565b610430610406366004613bd1565b600160208190526000918252604090912080549181015460029091015467ffffffffffffffff1683565b60408051938452602084019290925267ffffffffffffffff1690820152606001610318565b610301610463366004613b7f565b6110e6565b610301611221565b6103ea611235565b6004546103489067ffffffffffffffff1681565b61030161049a366004613c05565b6112af565b603e5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610318565b6103016104ec3660046139fd565b6113e3565b6103ea60075481565b610301610508366004613bd1565b611a2b565b61030161051b366004613bd1565b611a6e565b61030161052e366004613bd1565b611abd565b61034862093a8081565b6103ea60065481565b600a546103489067ffffffffffffffff1681565b6103ea61ea6081565b6105a4610571366004613bd1565b6002602052600090815260409020805460019091015467ffffffffffffffff808216916801000000000000000090041683565b6040805193845267ffffffffffffffff9283166020850152911690820152606001610318565b6000546104b99062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6103016105fe366004613d57565b61200b565b610301610611366004613d57565b612023565b6004546104b99068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546104b99073ffffffffffffffffffffffffffffffffffffffff1681565b610301610670366004613d8c565b612112565b6103ea610683366004613e62565b612407565b610301610696366004613af7565b612575565b6103ea6106a9366004613eeb565b6040805160208082019a909a52808201989098526060880196909652608087019490945260a08601929092527fffffffffffffffff00000000000000000000000000000000000000000000000060c091821b81168287015291811b821660c88601529190911b1660d0830152805180830360b801815260d89092019052805191012090565b60045461075b907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b6040519015158152602001610318565b600354610348907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6008546104b99073ffffffffffffffffffffffffffffffffffffffff1681565b6103016107c9366004613f5f565b612582565b6103016107dc366004613b7f565b612a68565b6103ea67016345785d8a000081565b6103016107fe366004613fc8565b612b1f565b61080b61334f565b6004546108239067ffffffffffffffff16600161419c565b67ffffffffffffffff168467ffffffffffffffff16146108ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f74206d6174636800000000000000000000000060648201526084015b60405180910390fd5b60035467ffffffffffffffff680100000000000000009091048116908516111561099c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016108c1565b6004805467ffffffffffffffff169060006109b6836141c8565b825467ffffffffffffffff9182166101009390930a928302919092021990911617905550600685905560078690556005546040517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810188905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b158015610a5057600080fd5b505af1158015610a64573d6000803e3d6000fd5b505060405133925067ffffffffffffffff871691507f2cdf1508085a46c7241a7d78c5a1ec3d9246d1ab95e1c2a33676d29e17d4222390600090a3505050505050565b600b8054610ab4906141ef565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae0906141ef565b8015610b2d5780601f10610b0257610100808354040283529160200191610b2d565b820191906000526020600020905b815481529060010190602001808311610b1057829003601f168201915b505050505081565b610b3d61334f565b600755565b600454606090610b5d9067ffffffffffffffff16600161419c565b67ffffffffffffffff168263ffffffff1614610bfb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f42415443485f444f45535f4e4f545f4d4154434800000000000000000000000060648201526084016108c1565b63ffffffff821660009081526002602052604081206001015467ffffffffffffffff8181169291829168010000000000000000909104168103610c5e57505063ffffffff831660009081526002602052604090205467016345785d8a0000610cc3565b505063ffffffff8316600090815260026020818152604080842060019081015468010000000000000000900467ffffffffffffffff90811686528184529482902082516060810184528154808252928201549481018590529401549094169201919091525b600654600754600a54604080516020810194909452830191909152606082018890526080820189905260a082018490527fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660c0808401919091527fffffffffffffffff00000000000000000000000000000000000000000000000086821b811660c485015291901b1660cc82015260d40160405160208183030381529060405293505050505b9392505050565b60098054610ab4906141ef565b610d8b61334f565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600454600090610ded9067ffffffffffffffff16600161419c565b67ffffffffffffffff168267ffffffffffffffff1614610e8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f42415443485f444f45535f4e4f545f4d4154434800000000000000000000000060648201526084016108c1565b67ffffffffffffffff808316600090815260026020526040812060010154808316928291680100000000000000009004168103610ef057505067ffffffffffffffff831660009081526002602052604090205467016345785d8a0000610f50565b505067ffffffffffffffff8084166000908152600260208181526040808420600190810154680100000000000000009004861685528083529381902081516060810183528154808252958201549381018490529301549094169190930152905b600654600754600a54604080516020810194909452830191909152606082018890526080820189905260a082018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c088811b82168185015286811b821660c88501529190911b1660d082015260009060d801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012060948401909252605483523360601b9083015291506034810160005b6008811015611059577bffffffff0000000000000000000000000000000000000000000000006020820285901c60c01b168252600890910190600101611018565b505060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161108e9190614242565b602060405180830381855afa1580156110ab573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906110ce919061425e565b6110d89190614277565b9a9950505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611199576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108c1565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b61122961334f565b61123360006133d0565b565b60035460009067ffffffffffffffff700100000000000000000000000000000000820481169161128491780100000000000000000000000000000000000000000000000090910416600161419c565b61128e91906142b2565b6112aa9067ffffffffffffffff16670de0b6b3a76400006142db565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108c1565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061121690831515815260200190565b6004546113fb9067ffffffffffffffff16600161419c565b67ffffffffffffffff168467ffffffffffffffff161461149d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f74206d6174636800000000000000000000000060648201526084016108c1565b60035467ffffffffffffffff680100000000000000009091048116908516111561156f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016108c1565b67ffffffffffffffff8085166000908152600260205260408120600101548083169282916801000000000000000090041681036115d057505067ffffffffffffffff851660009081526002602052604090205467016345785d8a0000611630565b505067ffffffffffffffff8086166000908152600260208181526040808420600190810154680100000000000000009004861685528083529381902081516060810183528154808252958201549381018490529301549094169190930152905b600654600754600a54604080516020810194909452830191909152606082018a9052608082018b905260a082018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b82168185015286811b821660c88501529190911b1660d082015260009060d801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012060948401909252605483523360601b9083015291506034810160005b6008811015611739577bffffffff0000000000000000000000000000000000000000000000006020820285901c60c01b1682526008909101906001016116f8565b505060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161176e9190614242565b602060405180830381855afa15801561178b573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906117ae919061425e565b6117b89190614277565b6008546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611822918d918d918d9190600401614318565b602060405180830381865afa15801561183f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118639190614392565b6118ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f494e56414c49445f50524f4f460000000000000000000000000000000000000060648201526084016108c1565b6004805467ffffffffffffffff16906000611909836141c8565b825467ffffffffffffffff9182166101009390930a92830291909202199091161790555060068b905560078c90556005546040517f33d6247d000000000000000000000000000000000000000000000000000000008152600481018e905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b1580156119a357600080fd5b505af11580156119b7573d6000803e3d6000fd5b50506000546119e6925062010000900473ffffffffffffffffffffffffffffffffffffffff1690503386613447565b604051339067ffffffffffffffff8c16907f2cdf1508085a46c7241a7d78c5a1ec3d9246d1ab95e1c2a33676d29e17d4222390600090a3505050505050505050505050565b611a3361334f565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b611a7661334f565b6003805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114611b9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108c1565b600354600090611bc9908390700100000000000000000000000000000000900467ffffffffffffffff1661419c565b905060008267ffffffffffffffff1611611c8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108c1565b60035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169082161115611d47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016108c1565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611e5f5767ffffffffffffffff8082166000908152600160205260409020600201544291611da19162093a80911661419c565b67ffffffffffffffff161115611e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016108c1565b60035467ffffffffffffffff68010000000000000000820481169170010000000000000000000000000000000090041660005b8467ffffffffffffffff16811015611f4e5781611eae816141c8565b9250508280611ebc906141c8565b67ffffffffffffffff818116600090815260026020526040902060010180547fffffffffffffffffffffffffffffffff000000000000000000000000000000001668010000000000000000878416027fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001617429092169190911790559350819050611f46816143af565b915050611e92565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117680100000000000000008583168102919091177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff16700100000000000000000000000000000000858416021792839055604051920416907f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a490600090a250505050565b61201361334f565b600b61201f8282614435565b5050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146120d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108c1565b60096120e28282614435565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b20816040516112169190613ae4565b600054610100900460ff16158080156121325750600054600160ff909116105b8061214c5750303b15801561214c575060005460ff166001145b6121d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016108c1565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561223657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602179055600880549091168a83161790556006889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000087151502179055600961234e8582614435565b50600a80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600b61238f8382614435565b50612398613520565b80156123fb57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6040805160208082018c90528183018b905260608083018b9052608083018a905260a083018990527fffffffffffffffff00000000000000000000000000000000000000000000000060c089811b82168186015288811b821660c886015287901b1660d0840152835180840360b801815260d884018086528151919093012061016c84019094526054825284901b60f88301526000929161010c01835b60088110156124e5577bffffffff0000000000000000000000000000000000000000000000006020820285901c60c01b1682526008909101906001016124a4565b505060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161251a9190614242565b602060405180830381855afa158015612537573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061255a919061425e565b6125649190614277565b9d9c50505050505050505050505050565b61257d61334f565b600655565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461265f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108c1565b6000612669611235565b9050818111156126fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016108c1565b61ea6083511061278d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016108c1565b6000546127b89062010000900473ffffffffffffffffffffffffffffffffffffffff163330846135bf565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015612828573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061284c919061425e565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018612886836141c8565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508381336040516020016128c29392919061454f565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003805478010000000000000000000000000000000000000000000000009081900467ffffffffffffffff908116600090815260019687905285812094909455825482900481168452848420909501879055905404831681522060020180547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001642909216919091179055323303612a0557600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2612a62565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051612a599392919061459b565b60405180910390a25b50505050565b612a7061334f565b73ffffffffffffffffffffffffffffffffffffffff8116612b13576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108c1565b612b1c816133d0565b50565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612bd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108c1565b8051612c123330612beb8467016345785d8a00006142db565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff169291906135bf565b60035467ffffffffffffffff808216916801000000000000000081048216917001000000000000000000000000000000009091041660005b848110156131d6576000868281518110612c6657612c666145d9565b602002602001015190508467ffffffffffffffff16816040015167ffffffffffffffff1610158015612ca6575042816040015167ffffffffffffffff1611155b612d58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016108c1565b60208101511580612e07575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291612dc19160040190815260200190565b6020604051808303816000875af1158015612de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e04919061425e565b15155b612e93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016108c1565b80515161ea6011612f26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016108c1565b83612f30816141c8565b8251602080850151604051939850612f4d9450919233910161454f565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018152918152815160209283012067ffffffffffffffff8781166000908152600290945282842091825591840151600190910180547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000169282169290921790915595505b8160600151518110156131c15783612ff0816141c8565b94505060008260600151828151811061300b5761300b6145d9565b602002602001015190508667ffffffffffffffff168167ffffffffffffffff161015801561305a575067ffffffffffffffff808616600090815260016020526040902060020154811690821610155b80156130705750428167ffffffffffffffff1611155b613122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520696e736964652072616e6765000000000000000000000000000000608482015260a4016108c1565b8561312c816141c8565b67ffffffffffffffff818116600090815260026020526040902060010180547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016680100000000000000008a8416027fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016179185169190911790559197509095508190506131b9816143af565b915050612fd9565b505080806131ce906143af565b915050612c4a565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169082161115613293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016108c1565b6003805467ffffffffffffffff8581167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117680100000000000000008583168102919091177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff16700100000000000000000000000000000000858416021792839055604051920416907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a25050505050565b603e5473ffffffffffffffffffffffffffffffffffffffff163314611233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108c1565b603e805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261351b9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261361d565b505050565b600054610100900460ff166135b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108c1565b611233613729565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052612a629085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401613499565b600061367f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166137c99092919063ffffffff16565b80519091501561351b578080602001905181019061369d9190614392565b61351b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108c1565b600054610100900460ff166137c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108c1565b611233336133d0565b60606137d884846000856137e0565b949350505050565b606082471015613872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016108c1565b73ffffffffffffffffffffffffffffffffffffffff85163b6138f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108c1565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516139199190614242565b60006040518083038185875af1925050503d8060008114613956576040519150601f19603f3d011682016040523d82523d6000602084013e61395b565b606091505b509150915061396b828286613976565b979650505050505050565b60608315613985575081610d6f565b8251156139955782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190613ae4565b803567ffffffffffffffff811681146139e157600080fd5b919050565b80604081018310156139f757600080fd5b92915050565b6000806000806000806101608789031215613a1757600080fd5b8635955060208701359450613a2e604088016139c9565b9350613a3d88606089016139e6565b9250610120870188811115613a5157600080fd5b60a088019250613a6189826139e6565b9150509295509295509295565b60005b83811015613a89578181015183820152602001613a71565b83811115612a625750506000910152565b60008151808452613ab2816020860160208601613a6e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610d6f6020830184613a9a565b600060208284031215613b0957600080fd5b5035919050565b600080600060608486031215613b2557600080fd5b8335925060208401359150604084013563ffffffff81168114613b4757600080fd5b809150509250925092565b73ffffffffffffffffffffffffffffffffffffffff81168114612b1c57600080fd5b80356139e181613b52565b600060208284031215613b9157600080fd5b8135610d6f81613b52565b600080600060608486031215613bb157600080fd5b8335925060208401359150613bc8604085016139c9565b90509250925092565b600060208284031215613be357600080fd5b610d6f826139c9565b8015158114612b1c57600080fd5b80356139e181613bec565b600060208284031215613c1757600080fd5b8135610d6f81613bec565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613c7457613c74613c22565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613cc157613cc1613c22565b604052919050565b600082601f830112613cda57600080fd5b813567ffffffffffffffff811115613cf457613cf4613c22565b613d2560207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613c7a565b818152846020838601011115613d3a57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613d6957600080fd5b813567ffffffffffffffff811115613d8057600080fd5b6137d884828501613cc9565b60008060008060008060008060006101208a8c031215613dab57600080fd5b8935613db681613b52565b985060208a0135613dc681613b52565b9750613dd460408b01613b74565b965060608a01359550613de960808b01613b74565b9450613df760a08b01613bfa565b935060c08a013567ffffffffffffffff80821115613e1457600080fd5b613e208d838e01613cc9565b9450613e2e60e08d016139c9565b93506101008c0135915080821115613e4557600080fd5b50613e528c828d01613cc9565b9150509295985092959850929598565b60008060008060008060008060006101208a8c031215613e8157600080fd5b8935985060208a0135975060408a0135965060608a0135955060808a01359450613ead60a08b016139c9565b9350613ebb60c08b016139c9565b9250613ec960e08b016139c9565b91506101008a0135613eda81613b52565b809150509295985092959850929598565b600080600080600080600080610100898b031215613f0857600080fd5b8835975060208901359650604089013595506060890135945060808901359350613f3460a08a016139c9565b9250613f4260c08a016139c9565b9150613f5060e08a016139c9565b90509295985092959890939650565b60008060408385031215613f7257600080fd5b823567ffffffffffffffff811115613f8957600080fd5b613f9585828601613cc9565b95602094909401359450505050565b600067ffffffffffffffff821115613fbe57613fbe613c22565b5060051b60200190565b60006020808385031215613fdb57600080fd5b823567ffffffffffffffff80821115613ff357600080fd5b818501915085601f83011261400757600080fd5b813561401a61401582613fa4565b613c7a565b81815260059190911b8301840190848101908883111561403957600080fd5b8585015b838110156141605780358581111561405457600080fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001121561408857600080fd5b614090613c51565b88820135878111156140a157600080fd5b6140af8d8b83860101613cc9565b8252506040808301358a8301526140c8606084016139c9565b818301526080830135888111156140df5760008081fd5b8084019350508c603f8401126140f55760008081fd5b8983013561410561401582613fa4565b81815260059190911b84018201908b8101908f8311156141255760008081fd5b948301945b8286101561414a5761413b866139c9565b8252948c0194908c019061412a565b606085015250505084525091860191860161403d565b5098975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168185168083038211156141bf576141bf61416d565b01949350505050565b600067ffffffffffffffff8083168181036141e5576141e561416d565b6001019392505050565b600181811c9082168061420357607f821691505b60208210810361423c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60008251614254818460208701613a6e565b9190910192915050565b60006020828403121561427057600080fd5b5051919050565b6000826142ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500690565b600067ffffffffffffffff838116908316818110156142d3576142d361416d565b039392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143135761431361416d565b500290565b61012081016040808784376000838201818152879190815b600281101561435057848483379084018281529284019290600101614330565b5050828760c0870137610100850181815286935091505b6001811015614386578251825260209283019290910190600101614367565b50505095945050505050565b6000602082840312156143a457600080fd5b8151610d6f81613bec565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036143e0576143e061416d565b5060010190565b601f82111561351b57600081815260208120601f850160051c8101602086101561440e5750805b601f850160051c820191505b8181101561442d5782815560010161441a565b505050505050565b815167ffffffffffffffff81111561444f5761444f613c22565b6144638161445d84546141ef565b846143e7565b602080601f8311600181146144b657600084156144805750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561442d565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015614503578886015182559484019460019091019084016144e4565b508582101561453f57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008451614561818460208901613a6e565b919091019283525060601b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166020820152603401919050565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006145d06060830184613a9a565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea26469706673582212201971b0a57741e737daf5b68be11cb664f10ffcedf610b4a2ab313efebe45a7b664736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102e95760003560e01c8063aa0f441811610191578063d2fd1b31116100e3578063e7a7ed0211610097578063f2fde38b11610071578063f2fde38b146107ce578063f7552761146107e1578063f7d2cd7f146107f057600080fd5b8063e7a7ed021461076b578063e8bf92ed1461079b578063eaeb077b146107bb57600080fd5b8063d307b743116100c8578063d307b74314610688578063d8c276881461069b578063d8f54db01461072e57600080fd5b8063d2fd1b3114610662578063d2fe3c341461067557600080fd5b8063b4d63f5811610145578063c89e42df1161011f578063c89e42df14610603578063cfa8ed4714610616578063d02103ca1461064257600080fd5b8063b4d63f5814610563578063b6b0b097146105ca578063c0cad302146105f057600080fd5b8063ac2eba9811610176578063ac2eba981461053d578063adc879e914610546578063b02286c01461055a57600080fd5b8063aa0f441814610520578063ab9fc5ef1461053357600080fd5b80636b8616ce1161024a5780638c4a0af7116101fe578063959c2f47116101d8578063959c2f47146104f157806396dc3d39146104fa5780639b7967601461050d57600080fd5b80638c4a0af71461048c5780638da5cb5b1461049f57806395297e24146104de57600080fd5b8063715018a61161022f578063715018a61461046857806379847057146104705780637fcb36531461047857600080fd5b80636b8616ce146103f85780636ff512cc1461045557600080fd5b8063423fa856116102a1578063542028d511610286578063542028d5146103bc5780635437988d146103c457806357177ef5146103d757600080fd5b8063423fa85614610374578063456052671461039457600080fd5b8063116c40c3116102d2578063116c40c31461032157806319d8ac611461033457806325d0a8f51461036157600080fd5b8063076f9e36146102ee578063107bf28c14610303575b600080fd5b6103016102fc3660046139fd565b610803565b005b61030b610aa7565b6040516103189190613ae4565b60405180910390f35b61030161032f366004613af7565b610b35565b6003546103489067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610318565b61030b61036f366004613b10565b610b42565b6003546103489068010000000000000000900467ffffffffffffffff1681565b60035461034890700100000000000000000000000000000000900467ffffffffffffffff1681565b61030b610d76565b6103016103d2366004613b7f565b610d83565b6103ea6103e5366004613b9c565b610dd2565b604051908152602001610318565b610430610406366004613bd1565b600160208190526000918252604090912080549181015460029091015467ffffffffffffffff1683565b60408051938452602084019290925267ffffffffffffffff1690820152606001610318565b610301610463366004613b7f565b6110e6565b610301611221565b6103ea611235565b6004546103489067ffffffffffffffff1681565b61030161049a366004613c05565b6112af565b603e5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610318565b6103016104ec3660046139fd565b6113e3565b6103ea60075481565b610301610508366004613bd1565b611a2b565b61030161051b366004613bd1565b611a6e565b61030161052e366004613bd1565b611abd565b61034862093a8081565b6103ea60065481565b600a546103489067ffffffffffffffff1681565b6103ea61ea6081565b6105a4610571366004613bd1565b6002602052600090815260409020805460019091015467ffffffffffffffff808216916801000000000000000090041683565b6040805193845267ffffffffffffffff9283166020850152911690820152606001610318565b6000546104b99062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6103016105fe366004613d57565b61200b565b610301610611366004613d57565b612023565b6004546104b99068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546104b99073ffffffffffffffffffffffffffffffffffffffff1681565b610301610670366004613d8c565b612112565b6103ea610683366004613e62565b612407565b610301610696366004613af7565b612575565b6103ea6106a9366004613eeb565b6040805160208082019a909a52808201989098526060880196909652608087019490945260a08601929092527fffffffffffffffff00000000000000000000000000000000000000000000000060c091821b81168287015291811b821660c88601529190911b1660d0830152805180830360b801815260d89092019052805191012090565b60045461075b907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b6040519015158152602001610318565b600354610348907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6008546104b99073ffffffffffffffffffffffffffffffffffffffff1681565b6103016107c9366004613f5f565b612582565b6103016107dc366004613b7f565b612a68565b6103ea67016345785d8a000081565b6103016107fe366004613fc8565b612b1f565b61080b61334f565b6004546108239067ffffffffffffffff16600161419c565b67ffffffffffffffff168467ffffffffffffffff16146108ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f74206d6174636800000000000000000000000060648201526084015b60405180910390fd5b60035467ffffffffffffffff680100000000000000009091048116908516111561099c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016108c1565b6004805467ffffffffffffffff169060006109b6836141c8565b825467ffffffffffffffff9182166101009390930a928302919092021990911617905550600685905560078690556005546040517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810188905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b158015610a5057600080fd5b505af1158015610a64573d6000803e3d6000fd5b505060405133925067ffffffffffffffff871691507f2cdf1508085a46c7241a7d78c5a1ec3d9246d1ab95e1c2a33676d29e17d4222390600090a3505050505050565b600b8054610ab4906141ef565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae0906141ef565b8015610b2d5780601f10610b0257610100808354040283529160200191610b2d565b820191906000526020600020905b815481529060010190602001808311610b1057829003601f168201915b505050505081565b610b3d61334f565b600755565b600454606090610b5d9067ffffffffffffffff16600161419c565b67ffffffffffffffff168263ffffffff1614610bfb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f42415443485f444f45535f4e4f545f4d4154434800000000000000000000000060648201526084016108c1565b63ffffffff821660009081526002602052604081206001015467ffffffffffffffff8181169291829168010000000000000000909104168103610c5e57505063ffffffff831660009081526002602052604090205467016345785d8a0000610cc3565b505063ffffffff8316600090815260026020818152604080842060019081015468010000000000000000900467ffffffffffffffff90811686528184529482902082516060810184528154808252928201549481018590529401549094169201919091525b600654600754600a54604080516020810194909452830191909152606082018890526080820189905260a082018490527fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660c0808401919091527fffffffffffffffff00000000000000000000000000000000000000000000000086821b811660c485015291901b1660cc82015260d40160405160208183030381529060405293505050505b9392505050565b60098054610ab4906141ef565b610d8b61334f565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600454600090610ded9067ffffffffffffffff16600161419c565b67ffffffffffffffff168267ffffffffffffffff1614610e8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f42415443485f444f45535f4e4f545f4d4154434800000000000000000000000060648201526084016108c1565b67ffffffffffffffff808316600090815260026020526040812060010154808316928291680100000000000000009004168103610ef057505067ffffffffffffffff831660009081526002602052604090205467016345785d8a0000610f50565b505067ffffffffffffffff8084166000908152600260208181526040808420600190810154680100000000000000009004861685528083529381902081516060810183528154808252958201549381018490529301549094169190930152905b600654600754600a54604080516020810194909452830191909152606082018890526080820189905260a082018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c088811b82168185015286811b821660c88501529190911b1660d082015260009060d801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012060948401909252605483523360601b9083015291506034810160005b6008811015611059577bffffffff0000000000000000000000000000000000000000000000006020820285901c60c01b168252600890910190600101611018565b505060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161108e9190614242565b602060405180830381855afa1580156110ab573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906110ce919061425e565b6110d89190614277565b9a9950505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611199576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108c1565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b61122961334f565b61123360006133d0565b565b60035460009067ffffffffffffffff700100000000000000000000000000000000820481169161128491780100000000000000000000000000000000000000000000000090910416600161419c565b61128e91906142b2565b6112aa9067ffffffffffffffff16670de0b6b3a76400006142db565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108c1565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061121690831515815260200190565b6004546113fb9067ffffffffffffffff16600161419c565b67ffffffffffffffff168467ffffffffffffffff161461149d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f74206d6174636800000000000000000000000060648201526084016108c1565b60035467ffffffffffffffff680100000000000000009091048116908516111561156f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016108c1565b67ffffffffffffffff8085166000908152600260205260408120600101548083169282916801000000000000000090041681036115d057505067ffffffffffffffff851660009081526002602052604090205467016345785d8a0000611630565b505067ffffffffffffffff8086166000908152600260208181526040808420600190810154680100000000000000009004861685528083529381902081516060810183528154808252958201549381018490529301549094169190930152905b600654600754600a54604080516020810194909452830191909152606082018a9052608082018b905260a082018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b82168185015286811b821660c88501529190911b1660d082015260009060d801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012060948401909252605483523360601b9083015291506034810160005b6008811015611739577bffffffff0000000000000000000000000000000000000000000000006020820285901c60c01b1682526008909101906001016116f8565b505060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161176e9190614242565b602060405180830381855afa15801561178b573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906117ae919061425e565b6117b89190614277565b6008546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611822918d918d918d9190600401614318565b602060405180830381865afa15801561183f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118639190614392565b6118ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f494e56414c49445f50524f4f460000000000000000000000000000000000000060648201526084016108c1565b6004805467ffffffffffffffff16906000611909836141c8565b825467ffffffffffffffff9182166101009390930a92830291909202199091161790555060068b905560078c90556005546040517f33d6247d000000000000000000000000000000000000000000000000000000008152600481018e905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b1580156119a357600080fd5b505af11580156119b7573d6000803e3d6000fd5b50506000546119e6925062010000900473ffffffffffffffffffffffffffffffffffffffff1690503386613447565b604051339067ffffffffffffffff8c16907f2cdf1508085a46c7241a7d78c5a1ec3d9246d1ab95e1c2a33676d29e17d4222390600090a3505050505050505050505050565b611a3361334f565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b611a7661334f565b6003805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114611b9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108c1565b600354600090611bc9908390700100000000000000000000000000000000900467ffffffffffffffff1661419c565b905060008267ffffffffffffffff1611611c8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108c1565b60035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169082161115611d47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016108c1565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611e5f5767ffffffffffffffff8082166000908152600160205260409020600201544291611da19162093a80911661419c565b67ffffffffffffffff161115611e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016108c1565b60035467ffffffffffffffff68010000000000000000820481169170010000000000000000000000000000000090041660005b8467ffffffffffffffff16811015611f4e5781611eae816141c8565b9250508280611ebc906141c8565b67ffffffffffffffff818116600090815260026020526040902060010180547fffffffffffffffffffffffffffffffff000000000000000000000000000000001668010000000000000000878416027fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001617429092169190911790559350819050611f46816143af565b915050611e92565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117680100000000000000008583168102919091177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff16700100000000000000000000000000000000858416021792839055604051920416907f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a490600090a250505050565b61201361334f565b600b61201f8282614435565b5050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146120d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108c1565b60096120e28282614435565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b20816040516112169190613ae4565b600054610100900460ff16158080156121325750600054600160ff909116105b8061214c5750303b15801561214c575060005460ff166001145b6121d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016108c1565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561223657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602179055600880549091168a83161790556006889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000087151502179055600961234e8582614435565b50600a80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600b61238f8382614435565b50612398613520565b80156123fb57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6040805160208082018c90528183018b905260608083018b9052608083018a905260a083018990527fffffffffffffffff00000000000000000000000000000000000000000000000060c089811b82168186015288811b821660c886015287901b1660d0840152835180840360b801815260d884018086528151919093012061016c84019094526054825284901b60f88301526000929161010c01835b60088110156124e5577bffffffff0000000000000000000000000000000000000000000000006020820285901c60c01b1682526008909101906001016124a4565b505060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161251a9190614242565b602060405180830381855afa158015612537573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061255a919061425e565b6125649190614277565b9d9c50505050505050505050505050565b61257d61334f565b600655565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461265f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108c1565b6000612669611235565b9050818111156126fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016108c1565b61ea6083511061278d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016108c1565b6000546127b89062010000900473ffffffffffffffffffffffffffffffffffffffff163330846135bf565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015612828573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061284c919061425e565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018612886836141c8565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508381336040516020016128c29392919061454f565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003805478010000000000000000000000000000000000000000000000009081900467ffffffffffffffff908116600090815260019687905285812094909455825482900481168452848420909501879055905404831681522060020180547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001642909216919091179055323303612a0557600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2612a62565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051612a599392919061459b565b60405180910390a25b50505050565b612a7061334f565b73ffffffffffffffffffffffffffffffffffffffff8116612b13576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108c1565b612b1c816133d0565b50565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612bd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108c1565b8051612c123330612beb8467016345785d8a00006142db565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff169291906135bf565b60035467ffffffffffffffff808216916801000000000000000081048216917001000000000000000000000000000000009091041660005b848110156131d6576000868281518110612c6657612c666145d9565b602002602001015190508467ffffffffffffffff16816040015167ffffffffffffffff1610158015612ca6575042816040015167ffffffffffffffff1611155b612d58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016108c1565b60208101511580612e07575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291612dc19160040190815260200190565b6020604051808303816000875af1158015612de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e04919061425e565b15155b612e93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016108c1565b80515161ea6011612f26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016108c1565b83612f30816141c8565b8251602080850151604051939850612f4d9450919233910161454f565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018152918152815160209283012067ffffffffffffffff8781166000908152600290945282842091825591840151600190910180547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000169282169290921790915595505b8160600151518110156131c15783612ff0816141c8565b94505060008260600151828151811061300b5761300b6145d9565b602002602001015190508667ffffffffffffffff168167ffffffffffffffff161015801561305a575067ffffffffffffffff808616600090815260016020526040902060020154811690821610155b80156130705750428167ffffffffffffffff1611155b613122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520696e736964652072616e6765000000000000000000000000000000608482015260a4016108c1565b8561312c816141c8565b67ffffffffffffffff818116600090815260026020526040902060010180547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016680100000000000000008a8416027fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016179185169190911790559197509095508190506131b9816143af565b915050612fd9565b505080806131ce906143af565b915050612c4a565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169082161115613293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016108c1565b6003805467ffffffffffffffff8581167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117680100000000000000008583168102919091177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff16700100000000000000000000000000000000858416021792839055604051920416907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a25050505050565b603e5473ffffffffffffffffffffffffffffffffffffffff163314611233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108c1565b603e805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261351b9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261361d565b505050565b600054610100900460ff166135b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108c1565b611233613729565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052612a629085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401613499565b600061367f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166137c99092919063ffffffff16565b80519091501561351b578080602001905181019061369d9190614392565b61351b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108c1565b600054610100900460ff166137c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108c1565b611233336133d0565b60606137d884846000856137e0565b949350505050565b606082471015613872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016108c1565b73ffffffffffffffffffffffffffffffffffffffff85163b6138f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108c1565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516139199190614242565b60006040518083038185875af1925050503d8060008114613956576040519150601f19603f3d011682016040523d82523d6000602084013e61395b565b606091505b509150915061396b828286613976565b979650505050505050565b60608315613985575081610d6f565b8251156139955782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190613ae4565b803567ffffffffffffffff811681146139e157600080fd5b919050565b80604081018310156139f757600080fd5b92915050565b6000806000806000806101608789031215613a1757600080fd5b8635955060208701359450613a2e604088016139c9565b9350613a3d88606089016139e6565b9250610120870188811115613a5157600080fd5b60a088019250613a6189826139e6565b9150509295509295509295565b60005b83811015613a89578181015183820152602001613a71565b83811115612a625750506000910152565b60008151808452613ab2816020860160208601613a6e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610d6f6020830184613a9a565b600060208284031215613b0957600080fd5b5035919050565b600080600060608486031215613b2557600080fd5b8335925060208401359150604084013563ffffffff81168114613b4757600080fd5b809150509250925092565b73ffffffffffffffffffffffffffffffffffffffff81168114612b1c57600080fd5b80356139e181613b52565b600060208284031215613b9157600080fd5b8135610d6f81613b52565b600080600060608486031215613bb157600080fd5b8335925060208401359150613bc8604085016139c9565b90509250925092565b600060208284031215613be357600080fd5b610d6f826139c9565b8015158114612b1c57600080fd5b80356139e181613bec565b600060208284031215613c1757600080fd5b8135610d6f81613bec565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613c7457613c74613c22565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613cc157613cc1613c22565b604052919050565b600082601f830112613cda57600080fd5b813567ffffffffffffffff811115613cf457613cf4613c22565b613d2560207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613c7a565b818152846020838601011115613d3a57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613d6957600080fd5b813567ffffffffffffffff811115613d8057600080fd5b6137d884828501613cc9565b60008060008060008060008060006101208a8c031215613dab57600080fd5b8935613db681613b52565b985060208a0135613dc681613b52565b9750613dd460408b01613b74565b965060608a01359550613de960808b01613b74565b9450613df760a08b01613bfa565b935060c08a013567ffffffffffffffff80821115613e1457600080fd5b613e208d838e01613cc9565b9450613e2e60e08d016139c9565b93506101008c0135915080821115613e4557600080fd5b50613e528c828d01613cc9565b9150509295985092959850929598565b60008060008060008060008060006101208a8c031215613e8157600080fd5b8935985060208a0135975060408a0135965060608a0135955060808a01359450613ead60a08b016139c9565b9350613ebb60c08b016139c9565b9250613ec960e08b016139c9565b91506101008a0135613eda81613b52565b809150509295985092959850929598565b600080600080600080600080610100898b031215613f0857600080fd5b8835975060208901359650604089013595506060890135945060808901359350613f3460a08a016139c9565b9250613f4260c08a016139c9565b9150613f5060e08a016139c9565b90509295985092959890939650565b60008060408385031215613f7257600080fd5b823567ffffffffffffffff811115613f8957600080fd5b613f9585828601613cc9565b95602094909401359450505050565b600067ffffffffffffffff821115613fbe57613fbe613c22565b5060051b60200190565b60006020808385031215613fdb57600080fd5b823567ffffffffffffffff80821115613ff357600080fd5b818501915085601f83011261400757600080fd5b813561401a61401582613fa4565b613c7a565b81815260059190911b8301840190848101908883111561403957600080fd5b8585015b838110156141605780358581111561405457600080fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001121561408857600080fd5b614090613c51565b88820135878111156140a157600080fd5b6140af8d8b83860101613cc9565b8252506040808301358a8301526140c8606084016139c9565b818301526080830135888111156140df5760008081fd5b8084019350508c603f8401126140f55760008081fd5b8983013561410561401582613fa4565b81815260059190911b84018201908b8101908f8311156141255760008081fd5b948301945b8286101561414a5761413b866139c9565b8252948c0194908c019061412a565b606085015250505084525091860191860161403d565b5098975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168185168083038211156141bf576141bf61416d565b01949350505050565b600067ffffffffffffffff8083168181036141e5576141e561416d565b6001019392505050565b600181811c9082168061420357607f821691505b60208210810361423c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60008251614254818460208701613a6e565b9190910192915050565b60006020828403121561427057600080fd5b5051919050565b6000826142ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500690565b600067ffffffffffffffff838116908316818110156142d3576142d361416d565b039392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143135761431361416d565b500290565b61012081016040808784376000838201818152879190815b600281101561435057848483379084018281529284019290600101614330565b5050828760c0870137610100850181815286935091505b6001811015614386578251825260209283019290910190600101614367565b50505095945050505050565b6000602082840312156143a457600080fd5b8151610d6f81613bec565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036143e0576143e061416d565b5060010190565b601f82111561351b57600081815260208120601f850160051c8101602086101561440e5750805b601f850160051c820191505b8181101561442d5782815560010161441a565b505050505050565b815167ffffffffffffffff81111561444f5761444f613c22565b6144638161445d84546141ef565b846143e7565b602080601f8311600181146144b657600084156144805750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561442d565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015614503578886015182559484019460019091019084016144e4565b508582101561453f57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008451614561818460208901613a6e565b919091019283525060601b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166020820152603401919050565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006145d06060830184613a9a565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea26469706673582212201971b0a57741e737daf5b68be11cb664f10ffcedf610b4a2ab313efebe45a7b664736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506147ed806100206000396000f3fe608060405234801561001057600080fd5b50600436106102de5760003560e01c80639b79676011610186578063d02103ca116100e3578063d8f54db011610097578063eaeb077b11610071578063eaeb077b14610739578063f2fde38b1461074c578063f75527611461075f57600080fd5b8063d8f54db0146106ac578063e7a7ed02146106e9578063e8bf92ed1461071957600080fd5b8063d2fd1b31116100c8578063d2fd1b3114610673578063d307b74314610686578063d8d1091b1461069957600080fd5b8063d02103ca14610640578063d0ae98dd1461066057600080fd5b8063b4d63f581161013a578063c0cad3021161011f578063c0cad302146105ee578063c89e42df14610601578063cfa8ed471461061457600080fd5b8063b4d63f58146105a8578063b6b0b097146105c857600080fd5b8063ac2eba981161016b578063ac2eba9814610582578063adc879e91461058b578063b02286c01461059f57600080fd5b80639b79676014610565578063ab9fc5ef1461057857600080fd5b80636b8616ce1161023f57806379847057116101f35780638da5cb5b116101cd5780638da5cb5b1461050b57806396dc3d391461054a57806399f5634e1461055d57600080fd5b806379847057146104dc5780637fcb3653146104e45780638c4a0af7146104f857600080fd5b8063715018a611610224578063715018a6146104ae5780637152facf146104b6578063748608de146104c957600080fd5b80636b8616ce1461047b5780636ff512cc1461049b57600080fd5b806345605267116102965780635437988d1161027b5780635437988d146103a657806355b925e6146103b9578063574f649e146103cc57600080fd5b80634560526714610376578063542028d51461039e57600080fd5b80631a26da14116102c75780631a26da141461032e5780633c15826714610343578063423fa8561461035657600080fd5b8063107bf28c146102e357806319d8ac6114610301575b600080fd5b6102eb61076e565b6040516102f89190613ba3565b60405180910390f35b6003546103159067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102f8565b61034161033c366004613bd3565b6107fc565b005b610341610351366004613d79565b610821565b6003546103159068010000000000000000900467ffffffffffffffff1681565b60035461031590700100000000000000000000000000000000900467ffffffffffffffff1681565b6102eb611153565b6103416103b4366004613edb565b611160565b6103416103c7366004613f0f565b6111af565b61046d6103da366004613f92565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b6040519081526020016102f8565b61046d610489366004614008565b60016020526000908152604090205481565b6103416104a9366004613edb565b61171f565b61034161185a565b6102eb6104c4366004614023565b61186e565b6103416104d7366004613f0f565b611a1b565b61046d611e24565b6004546103159067ffffffffffffffff1681565b61034161050636600461407e565b611e9e565b603d5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102f8565b610341610558366004614008565b611fd2565b61046d612015565b610341610573366004614008565b612144565b61031562093a8081565b61046d60065481565b6009546103159067ffffffffffffffff1681565b61046d61ea6081565b61046d6105b6366004614008565b60026020526000908152604090205481565b6000546105259062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6103416105fc36600461409b565b612193565b61034161060f36600461409b565b6121ab565b6004546105259068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546105259073ffffffffffffffffffffffffffffffffffffffff1681565b61046d61066e366004614023565b61229a565b6103416106813660046140d8565b612594565b6103416106943660046141ae565b612889565b6103416106a73660046141c7565b612896565b6004546106d9907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016102f8565b600354610315907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6007546105259073ffffffffffffffffffffffffffffffffffffffff1681565b6103416107473660046142d8565b612f3c565b61034161075a366004613edb565b61340a565b61046d67016345785d8a000081565b600a805461077b9061431d565b80601f01602080910402602001604051908101604052809291908181526020018280546107a79061431d565b80156107f45780601f106107c9576101008083540402835291602001916107f4565b820191906000526020600020905b8154815290600101906020018083116107d757829003601f168201915b505050505081565b6108046134c1565b67ffffffffffffffff909116600090815260026020526040902055565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146108d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b805160035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610f2957600087828151811061094157610941614370565b602002602001015190506000816060015167ffffffffffffffff161115610bac578361096c816143ce565b9450506000816000015180519060200120826020015183606001516040516020016109cf93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114610ad4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610ba6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016108d0565b50610d7a565b60208101511580610c5b575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610c159160040190815260200190565b6020604051808303816000875af1158015610c34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5891906143f5565b15155b610ce7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016108d0565b80515161ea6011610d7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016108d0565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610db0575042816040015167ffffffffffffffff1611155b610e62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610f0b906143ce565b95505080604001519550508080610f219061440e565b915050610925565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610fe6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016108d0565b60035460009061101490700100000000000000000000000000000000900467ffffffffffffffff1684614446565b6110289067ffffffffffffffff168761446f565b6003805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152600260205260409020839055905061110633306110df8467016345785d8a0000614486565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16929190613542565b6003546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b6008805461077b9061431d565b6111686134c1565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60045467ffffffffffffffff888116911614611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c6173745665726966696564426174636820646f6573206e6f74206d6160648201527f7463680000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8667ffffffffffffffff168667ffffffffffffffff161161133c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a4016108d0565b60035467ffffffffffffffff680100000000000000009091048116908716111561140f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a76657269667942617463686573908201527f3a20626174636820646f6573206e6f742068617665206265656e20736571756560648201527f6e63656400000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b600061141d8888888861186e565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161145291906144c3565b602060405180830381855afa15801561146f573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061149291906143f5565b61149c919061450e565b6007546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916115069189918991899190600401614522565b602060405180830381865afa158015611523573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611547919061459c565b6115d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016108d0565b611623336115e18b8b614446565b67ffffffffffffffff166115f3612015565b6115fd9190614486565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16919061361e565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a1617815560068790556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820189905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b1580156116c557600080fd5b505af11580156116d9573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8b1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a3505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146117d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b6118626134c1565b61186c6000613679565b565b67ffffffffffffffff8085166000908152600260205260408082205492861682529020546060919080611949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b604080516101ac810190915261016c8152602081016119af565b8160005b60088110156119a8577bffffffff0000000000000000000000000000000000000000000000006020820284901c60c01b168252600890910190600101611967565b5092915050565b6119bb81600654611963565b90506119c78187611963565b90506119d38185611963565b90506119df8184611963565b90506119eb8188611963565b60c08a811b825289811b6008830152600954901b60108201523360601b6018909101525092505050949350505050565b611a236134c1565b60045467ffffffffffffffff888116911614611ae7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8667ffffffffffffffff168667ffffffffffffffff1611611bb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff6801000000000000000090910481169087161115611c82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b67ffffffffffffffff861660009081526002602052604090205480611d29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f74206578697374000060648201526084016108d0565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff891617815560068690556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820188905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b158015611dcb57600080fd5b505af1158015611ddf573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8a1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a35050505050505050565b60035460009067ffffffffffffffff7001000000000000000000000000000000008204811691611e739178010000000000000000000000000000000000000000000000009091041660016145b9565b611e7d9190614446565b611e999067ffffffffffffffff16670de0b6b3a7640000614486565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611f51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061184f90831515815260200190565b611fda6134c1565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b600080546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829162010000900473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561208a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ae91906143f5565b60045460035491925060009167ffffffffffffffff918216916801000000000000000082048116916121139170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614446565b61211d91906145b9565b6121279190614446565b67ffffffffffffffff16905061213d81836145e5565b9250505090565b61214c6134c1565b6003805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b61219b6134c1565b600a6121a78282614647565b5050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461225e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600861226a8282614647565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161184f9190613ba3565b60045460009067ffffffffffffffff868116911614612361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8467ffffffffffffffff168467ffffffffffffffff161161242a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff68010000000000000000909104811690851611156124fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b600061250a8686868661186e565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161253f91906144c3565b602060405180830381855afa15801561255c573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061257f91906143f5565b612589919061450e565b979650505050505050565b600054610100900460ff16158080156125b45750600054600160ff909116105b806125ce5750303b1580156125ce575060005460ff166001145b61265a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016108d0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156126b857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602179055600780549091168a83161790556006889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c01000000000000000000000000000000000000000000000000000000008715150217905560086127d08582614647565b50600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600a6128118382614647565b5061281a6136f0565b801561287d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6128916134c1565b600655565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108d0565b805180612a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612a73918491700100000000000000000000000000000000900416614761565b1115612b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016108d0565b60035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205491937001000000000000000000000000000000009004909216915b84811015612e6c576000868281518110612b6157612b61614370565b602002602001015190508380612b76906143ce565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114612ccf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016108d0565b612cda60018861446f565b8303612db2574262093a808360400151612cf491906145b9565b67ffffffffffffffff161115612db2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016108d0565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612e54906143ce565b96505050508080612e649061440e565b915050612b45565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260026020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114613019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108d0565b6000613023611e24565b9050818111156130b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016108d0565b61ea60835110613147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016108d0565b6000546131729062010000900473ffffffffffffffffffffffffffffffffffffffff16333084613542565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa1580156131e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061320691906143f5565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613240836143ce565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050838051906020012081426040516020016132b993929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260019093529120553233036133a757600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613404565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516133fb93929190614779565b60405180910390a25b50505050565b6134126134c1565b73ffffffffffffffffffffffffffffffffffffffff81166134b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108d0565b6134be81613679565b50565b603d5473ffffffffffffffffffffffffffffffffffffffff16331461186c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526134049085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261378f565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526136749084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161359c565b505050565b603d805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16613787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d0565b61186c61389b565b60006137f1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661393b9092919063ffffffff16565b805190915015613674578080602001905181019061380f919061459c565b613674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108d0565b600054610100900460ff16613932576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d0565b61186c33613679565b606061394a8484600085613954565b90505b9392505050565b6060824710156139e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016108d0565b73ffffffffffffffffffffffffffffffffffffffff85163b613a64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108d0565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613a8d91906144c3565b60006040518083038185875af1925050503d8060008114613aca576040519150601f19603f3d011682016040523d82523d6000602084013e613acf565b606091505b509150915061258982828660608315613ae957508161394d565b825115613af95782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d09190613ba3565b60005b83811015613b48578181015183820152602001613b30565b838111156134045750506000910152565b60008151808452613b71816020860160208601613b2d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061394d6020830184613b59565b803567ffffffffffffffff81168114613bce57600080fd5b919050565b60008060408385031215613be657600080fd5b613bef83613bb6565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613c4f57613c4f613bfd565b60405290565b6040516060810167ffffffffffffffff81118282101715613c4f57613c4f613bfd565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613cbf57613cbf613bfd565b604052919050565b600067ffffffffffffffff821115613ce157613ce1613bfd565b5060051b60200190565b600082601f830112613cfc57600080fd5b813567ffffffffffffffff811115613d1657613d16613bfd565b613d4760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613c78565b818152846020838601011115613d5c57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613d8c57600080fd5b823567ffffffffffffffff80821115613da457600080fd5b818501915085601f830112613db857600080fd5b8135613dcb613dc682613cc7565b613c78565b81815260059190911b83018401908481019088831115613dea57600080fd5b8585015b83811015613ea157803585811115613e065760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001811315613e3c5760008081fd5b613e44613c2c565b8983013588811115613e565760008081fd5b613e648e8c83870101613ceb565b8252506040808401358b8301526060613e7e818601613bb6565b82840152613e8d848601613bb6565b908301525085525050918601918601613dee565b5098975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146134be57600080fd5b8035613bce81613eae565b600060208284031215613eed57600080fd5b813561394d81613eae565b8060408101831015613f0957600080fd5b92915050565b6000806000806000806000610180888a031215613f2b57600080fd5b613f3488613bb6565b9650613f4260208901613bb6565b95506040880135945060608801359350613f5f8960808a01613ef8565b9250610140880189811115613f7357600080fd5b60c089019250613f838a82613ef8565b91505092959891949750929550565b600080600080600060a08688031215613faa57600080fd5b85359450602086013567ffffffffffffffff811115613fc857600080fd5b613fd488828901613ceb565b94505060408601359250613fea60608701613bb6565b91506080860135613ffa81613eae565b809150509295509295909350565b60006020828403121561401a57600080fd5b61394d82613bb6565b6000806000806080858703121561403957600080fd5b61404285613bb6565b935061405060208601613bb6565b93969395505050506040820135916060013590565b80151581146134be57600080fd5b8035613bce81614065565b60006020828403121561409057600080fd5b813561394d81614065565b6000602082840312156140ad57600080fd5b813567ffffffffffffffff8111156140c457600080fd5b6140d084828501613ceb565b949350505050565b60008060008060008060008060006101208a8c0312156140f757600080fd5b893561410281613eae565b985060208a013561411281613eae565b975061412060408b01613ed0565b965060608a0135955061413560808b01613ed0565b945061414360a08b01614073565b935060c08a013567ffffffffffffffff8082111561416057600080fd5b61416c8d838e01613ceb565b945061417a60e08d01613bb6565b93506101008c013591508082111561419157600080fd5b5061419e8c828d01613ceb565b9150509295985092959850929598565b6000602082840312156141c057600080fd5b5035919050565b600060208083850312156141da57600080fd5b823567ffffffffffffffff808211156141f257600080fd5b818501915085601f83011261420657600080fd5b8135614214613dc682613cc7565b81815260059190911b8301840190848101908883111561423357600080fd5b8585015b83811015613ea15780358581111561424f5760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018113156142855760008081fd5b61428d613c55565b898301358881111561429f5760008081fd5b6142ad8e8c83870101613ceb565b8252506040808401358b8301526142c5838501613bb6565b9082015285525050918601918601614237565b600080604083850312156142eb57600080fd5b823567ffffffffffffffff81111561430257600080fd5b61430e85828601613ceb565b95602094909401359450505050565b600181811c9082168061433157607f821691505b60208210810361436a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036143eb576143eb61439f565b6001019392505050565b60006020828403121561440757600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361443f5761443f61439f565b5060010190565b600067ffffffffffffffff838116908316818110156144675761446761439f565b039392505050565b6000828210156144815761448161439f565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144be576144be61439f565b500290565b600082516144d5818460208701613b2d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261451d5761451d6144df565b500690565b61012081016040808784376000838201818152879190815b600281101561455a5784848337908401828152928401929060010161453a565b5050828760c0870137610100850181815286935091505b6001811015614590578251825260209283019290910190600101614571565b50505095945050505050565b6000602082840312156145ae57600080fd5b815161394d81614065565b600067ffffffffffffffff8083168185168083038211156145dc576145dc61439f565b01949350505050565b6000826145f4576145f46144df565b500490565b601f82111561367457600081815260208120601f850160051c810160208610156146205750805b601f850160051c820191505b8181101561463f5782815560010161462c565b505050505050565b815167ffffffffffffffff81111561466157614661613bfd565b6146758161466f845461431d565b846145f9565b602080601f8311600181146146c857600084156146925750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561463f565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015614715578886015182559484019460019091019084016146f6565b508582101561475157878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156147745761477461439f565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006147ae6060830184613b59565b9594505050505056fea2646970667358221220895446fcae527ddbebdba0df9823dff71a7d3636cce583b7965cb9c5d5c32c8364736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102de5760003560e01c80639b79676011610186578063d02103ca116100e3578063d8f54db011610097578063eaeb077b11610071578063eaeb077b14610739578063f2fde38b1461074c578063f75527611461075f57600080fd5b8063d8f54db0146106ac578063e7a7ed02146106e9578063e8bf92ed1461071957600080fd5b8063d2fd1b31116100c8578063d2fd1b3114610673578063d307b74314610686578063d8d1091b1461069957600080fd5b8063d02103ca14610640578063d0ae98dd1461066057600080fd5b8063b4d63f581161013a578063c0cad3021161011f578063c0cad302146105ee578063c89e42df14610601578063cfa8ed471461061457600080fd5b8063b4d63f58146105a8578063b6b0b097146105c857600080fd5b8063ac2eba981161016b578063ac2eba9814610582578063adc879e91461058b578063b02286c01461059f57600080fd5b80639b79676014610565578063ab9fc5ef1461057857600080fd5b80636b8616ce1161023f57806379847057116101f35780638da5cb5b116101cd5780638da5cb5b1461050b57806396dc3d391461054a57806399f5634e1461055d57600080fd5b806379847057146104dc5780637fcb3653146104e45780638c4a0af7146104f857600080fd5b8063715018a611610224578063715018a6146104ae5780637152facf146104b6578063748608de146104c957600080fd5b80636b8616ce1461047b5780636ff512cc1461049b57600080fd5b806345605267116102965780635437988d1161027b5780635437988d146103a657806355b925e6146103b9578063574f649e146103cc57600080fd5b80634560526714610376578063542028d51461039e57600080fd5b80631a26da14116102c75780631a26da141461032e5780633c15826714610343578063423fa8561461035657600080fd5b8063107bf28c146102e357806319d8ac6114610301575b600080fd5b6102eb61076e565b6040516102f89190613ba3565b60405180910390f35b6003546103159067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102f8565b61034161033c366004613bd3565b6107fc565b005b610341610351366004613d79565b610821565b6003546103159068010000000000000000900467ffffffffffffffff1681565b60035461031590700100000000000000000000000000000000900467ffffffffffffffff1681565b6102eb611153565b6103416103b4366004613edb565b611160565b6103416103c7366004613f0f565b6111af565b61046d6103da366004613f92565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b6040519081526020016102f8565b61046d610489366004614008565b60016020526000908152604090205481565b6103416104a9366004613edb565b61171f565b61034161185a565b6102eb6104c4366004614023565b61186e565b6103416104d7366004613f0f565b611a1b565b61046d611e24565b6004546103159067ffffffffffffffff1681565b61034161050636600461407e565b611e9e565b603d5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102f8565b610341610558366004614008565b611fd2565b61046d612015565b610341610573366004614008565b612144565b61031562093a8081565b61046d60065481565b6009546103159067ffffffffffffffff1681565b61046d61ea6081565b61046d6105b6366004614008565b60026020526000908152604090205481565b6000546105259062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6103416105fc36600461409b565b612193565b61034161060f36600461409b565b6121ab565b6004546105259068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546105259073ffffffffffffffffffffffffffffffffffffffff1681565b61046d61066e366004614023565b61229a565b6103416106813660046140d8565b612594565b6103416106943660046141ae565b612889565b6103416106a73660046141c7565b612896565b6004546106d9907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016102f8565b600354610315907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6007546105259073ffffffffffffffffffffffffffffffffffffffff1681565b6103416107473660046142d8565b612f3c565b61034161075a366004613edb565b61340a565b61046d67016345785d8a000081565b600a805461077b9061431d565b80601f01602080910402602001604051908101604052809291908181526020018280546107a79061431d565b80156107f45780601f106107c9576101008083540402835291602001916107f4565b820191906000526020600020905b8154815290600101906020018083116107d757829003601f168201915b505050505081565b6108046134c1565b67ffffffffffffffff909116600090815260026020526040902055565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146108d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b805160035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610f2957600087828151811061094157610941614370565b602002602001015190506000816060015167ffffffffffffffff161115610bac578361096c816143ce565b9450506000816000015180519060200120826020015183606001516040516020016109cf93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114610ad4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610ba6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016108d0565b50610d7a565b60208101511580610c5b575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610c159160040190815260200190565b6020604051808303816000875af1158015610c34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5891906143f5565b15155b610ce7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016108d0565b80515161ea6011610d7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016108d0565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610db0575042816040015167ffffffffffffffff1611155b610e62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610f0b906143ce565b95505080604001519550508080610f219061440e565b915050610925565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610fe6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016108d0565b60035460009061101490700100000000000000000000000000000000900467ffffffffffffffff1684614446565b6110289067ffffffffffffffff168761446f565b6003805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152600260205260409020839055905061110633306110df8467016345785d8a0000614486565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16929190613542565b6003546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b6008805461077b9061431d565b6111686134c1565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60045467ffffffffffffffff888116911614611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c6173745665726966696564426174636820646f6573206e6f74206d6160648201527f7463680000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8667ffffffffffffffff168667ffffffffffffffff161161133c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a4016108d0565b60035467ffffffffffffffff680100000000000000009091048116908716111561140f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a76657269667942617463686573908201527f3a20626174636820646f6573206e6f742068617665206265656e20736571756560648201527f6e63656400000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b600061141d8888888861186e565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161145291906144c3565b602060405180830381855afa15801561146f573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061149291906143f5565b61149c919061450e565b6007546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916115069189918991899190600401614522565b602060405180830381865afa158015611523573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611547919061459c565b6115d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016108d0565b611623336115e18b8b614446565b67ffffffffffffffff166115f3612015565b6115fd9190614486565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16919061361e565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a1617815560068790556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820189905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b1580156116c557600080fd5b505af11580156116d9573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8b1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a3505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146117d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b6118626134c1565b61186c6000613679565b565b67ffffffffffffffff8085166000908152600260205260408082205492861682529020546060919080611949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b604080516101ac810190915261016c8152602081016119af565b8160005b60088110156119a8577bffffffff0000000000000000000000000000000000000000000000006020820284901c60c01b168252600890910190600101611967565b5092915050565b6119bb81600654611963565b90506119c78187611963565b90506119d38185611963565b90506119df8184611963565b90506119eb8188611963565b60c08a811b825289811b6008830152600954901b60108201523360601b6018909101525092505050949350505050565b611a236134c1565b60045467ffffffffffffffff888116911614611ae7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8667ffffffffffffffff168667ffffffffffffffff1611611bb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff6801000000000000000090910481169087161115611c82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b67ffffffffffffffff861660009081526002602052604090205480611d29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f74206578697374000060648201526084016108d0565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff891617815560068690556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820188905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b158015611dcb57600080fd5b505af1158015611ddf573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8a1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a35050505050505050565b60035460009067ffffffffffffffff7001000000000000000000000000000000008204811691611e739178010000000000000000000000000000000000000000000000009091041660016145b9565b611e7d9190614446565b611e999067ffffffffffffffff16670de0b6b3a7640000614486565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611f51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061184f90831515815260200190565b611fda6134c1565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b600080546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829162010000900473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561208a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ae91906143f5565b60045460035491925060009167ffffffffffffffff918216916801000000000000000082048116916121139170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614446565b61211d91906145b9565b6121279190614446565b67ffffffffffffffff16905061213d81836145e5565b9250505090565b61214c6134c1565b6003805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b61219b6134c1565b600a6121a78282614647565b5050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461225e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600861226a8282614647565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161184f9190613ba3565b60045460009067ffffffffffffffff868116911614612361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8467ffffffffffffffff168467ffffffffffffffff161161242a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff68010000000000000000909104811690851611156124fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b600061250a8686868661186e565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161253f91906144c3565b602060405180830381855afa15801561255c573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061257f91906143f5565b612589919061450e565b979650505050505050565b600054610100900460ff16158080156125b45750600054600160ff909116105b806125ce5750303b1580156125ce575060005460ff166001145b61265a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016108d0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156126b857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602179055600780549091168a83161790556006889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c01000000000000000000000000000000000000000000000000000000008715150217905560086127d08582614647565b50600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600a6128118382614647565b5061281a6136f0565b801561287d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6128916134c1565b600655565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108d0565b805180612a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612a73918491700100000000000000000000000000000000900416614761565b1115612b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016108d0565b60035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205491937001000000000000000000000000000000009004909216915b84811015612e6c576000868281518110612b6157612b61614370565b602002602001015190508380612b76906143ce565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114612ccf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016108d0565b612cda60018861446f565b8303612db2574262093a808360400151612cf491906145b9565b67ffffffffffffffff161115612db2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016108d0565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612e54906143ce565b96505050508080612e649061440e565b915050612b45565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260026020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114613019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108d0565b6000613023611e24565b9050818111156130b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016108d0565b61ea60835110613147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016108d0565b6000546131729062010000900473ffffffffffffffffffffffffffffffffffffffff16333084613542565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa1580156131e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061320691906143f5565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613240836143ce565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050838051906020012081426040516020016132b993929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260019093529120553233036133a757600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613404565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516133fb93929190614779565b60405180910390a25b50505050565b6134126134c1565b73ffffffffffffffffffffffffffffffffffffffff81166134b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108d0565b6134be81613679565b50565b603d5473ffffffffffffffffffffffffffffffffffffffff16331461186c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526134049085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261378f565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526136749084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161359c565b505050565b603d805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16613787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d0565b61186c61389b565b60006137f1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661393b9092919063ffffffff16565b805190915015613674578080602001905181019061380f919061459c565b613674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108d0565b600054610100900460ff16613932576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d0565b61186c33613679565b606061394a8484600085613954565b90505b9392505050565b6060824710156139e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016108d0565b73ffffffffffffffffffffffffffffffffffffffff85163b613a64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108d0565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613a8d91906144c3565b60006040518083038185875af1925050503d8060008114613aca576040519150601f19603f3d011682016040523d82523d6000602084013e613acf565b606091505b509150915061258982828660608315613ae957508161394d565b825115613af95782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d09190613ba3565b60005b83811015613b48578181015183820152602001613b30565b838111156134045750506000910152565b60008151808452613b71816020860160208601613b2d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061394d6020830184613b59565b803567ffffffffffffffff81168114613bce57600080fd5b919050565b60008060408385031215613be657600080fd5b613bef83613bb6565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613c4f57613c4f613bfd565b60405290565b6040516060810167ffffffffffffffff81118282101715613c4f57613c4f613bfd565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613cbf57613cbf613bfd565b604052919050565b600067ffffffffffffffff821115613ce157613ce1613bfd565b5060051b60200190565b600082601f830112613cfc57600080fd5b813567ffffffffffffffff811115613d1657613d16613bfd565b613d4760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613c78565b818152846020838601011115613d5c57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613d8c57600080fd5b823567ffffffffffffffff80821115613da457600080fd5b818501915085601f830112613db857600080fd5b8135613dcb613dc682613cc7565b613c78565b81815260059190911b83018401908481019088831115613dea57600080fd5b8585015b83811015613ea157803585811115613e065760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001811315613e3c5760008081fd5b613e44613c2c565b8983013588811115613e565760008081fd5b613e648e8c83870101613ceb565b8252506040808401358b8301526060613e7e818601613bb6565b82840152613e8d848601613bb6565b908301525085525050918601918601613dee565b5098975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146134be57600080fd5b8035613bce81613eae565b600060208284031215613eed57600080fd5b813561394d81613eae565b8060408101831015613f0957600080fd5b92915050565b6000806000806000806000610180888a031215613f2b57600080fd5b613f3488613bb6565b9650613f4260208901613bb6565b95506040880135945060608801359350613f5f8960808a01613ef8565b9250610140880189811115613f7357600080fd5b60c089019250613f838a82613ef8565b91505092959891949750929550565b600080600080600060a08688031215613faa57600080fd5b85359450602086013567ffffffffffffffff811115613fc857600080fd5b613fd488828901613ceb565b94505060408601359250613fea60608701613bb6565b91506080860135613ffa81613eae565b809150509295509295909350565b60006020828403121561401a57600080fd5b61394d82613bb6565b6000806000806080858703121561403957600080fd5b61404285613bb6565b935061405060208601613bb6565b93969395505050506040820135916060013590565b80151581146134be57600080fd5b8035613bce81614065565b60006020828403121561409057600080fd5b813561394d81614065565b6000602082840312156140ad57600080fd5b813567ffffffffffffffff8111156140c457600080fd5b6140d084828501613ceb565b949350505050565b60008060008060008060008060006101208a8c0312156140f757600080fd5b893561410281613eae565b985060208a013561411281613eae565b975061412060408b01613ed0565b965060608a0135955061413560808b01613ed0565b945061414360a08b01614073565b935060c08a013567ffffffffffffffff8082111561416057600080fd5b61416c8d838e01613ceb565b945061417a60e08d01613bb6565b93506101008c013591508082111561419157600080fd5b5061419e8c828d01613ceb565b9150509295985092959850929598565b6000602082840312156141c057600080fd5b5035919050565b600060208083850312156141da57600080fd5b823567ffffffffffffffff808211156141f257600080fd5b818501915085601f83011261420657600080fd5b8135614214613dc682613cc7565b81815260059190911b8301840190848101908883111561423357600080fd5b8585015b83811015613ea15780358581111561424f5760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018113156142855760008081fd5b61428d613c55565b898301358881111561429f5760008081fd5b6142ad8e8c83870101613ceb565b8252506040808401358b8301526142c5838501613bb6565b9082015285525050918601918601614237565b600080604083850312156142eb57600080fd5b823567ffffffffffffffff81111561430257600080fd5b61430e85828601613ceb565b95602094909401359450505050565b600181811c9082168061433157607f821691505b60208210810361436a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036143eb576143eb61439f565b6001019392505050565b60006020828403121561440757600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361443f5761443f61439f565b5060010190565b600067ffffffffffffffff838116908316818110156144675761446761439f565b039392505050565b6000828210156144815761448161439f565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144be576144be61439f565b500290565b600082516144d5818460208701613b2d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261451d5761451d6144df565b500690565b61012081016040808784376000838201818152879190815b600281101561455a5784848337908401828152928401929060010161453a565b5050828760c0870137610100850181815286935091505b6001811015614590578251825260209283019290910190600101614571565b50505095945050505050565b6000602082840312156145ae57600080fd5b815161394d81614065565b600067ffffffffffffffff8083168185168083038211156145dc576145dc61439f565b01949350505050565b6000826145f4576145f46144df565b500490565b601f82111561367457600081815260208120601f850160051c810160208610156146205750805b601f850160051c820191505b8181101561463f5782815560010161462c565b505050505050565b815167ffffffffffffffff81111561466157614661613bfd565b6146758161466f845461431d565b846145f9565b602080601f8311600181146146c857600084156146925750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561463f565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015614715578886015182559484019460019091019084016146f6565b508582101561475157878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156147745761477461439f565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006147ae6060830184613b59565b9594505050505056fea2646970667358221220895446fcae527ddbebdba0df9823dff71a7d3636cce583b7965cb9c5d5c32c8364736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/ProofOfEfficiency.sol b/contracts/ProofOfEfficiency.sol index e594f67af..b3c6092e2 100644 --- a/contracts/ProofOfEfficiency.sol +++ b/contracts/ProofOfEfficiency.sol @@ -147,7 +147,7 @@ contract ProofOfEfficiency is Initializable { /** * @dev Emitted when a aggregator verifies a new batch */ - event VerifyBatch(uint64 indexed numBatch, address indexed aggregator); + event VerifyBatches(uint64 indexed numBatch, address indexed aggregator); /** * @dev Emitted when a trusted sequencer update his address @@ -300,7 +300,7 @@ contract ProofOfEfficiency is Initializable { currentTimestamp = currentBatch.timestamp; } - // Sanity check, should not be accesible never + // Sanity check, should not be unreachable require( currentLastForceBatchSequenced <= lastForceBatch, "ProofOfEfficiency::sequenceBatches: Force batches overflow" @@ -347,17 +347,17 @@ contract ProofOfEfficiency is Initializable { // sanity check require( _lastVerifiedBatch == lastVerifiedBatch, - "ProofOfEfficiency::verifyBatch: _lastVerifiedBatch does not match" + "ProofOfEfficiency::verifyBatches: _lastVerifiedBatch does not match" ); require( newVerifiedBatch > _lastVerifiedBatch, - "ProofOfEfficiency::verifyBatch: newVerifiedBatch must be bigger than lastVerifiedBatch" + "ProofOfEfficiency::verifyBatches: newVerifiedBatch must be bigger than lastVerifiedBatch" ); require( newVerifiedBatch <= lastBatchSequenced, - "ProofOfEfficiency::verifyBatch: batch does not have been sequenced" + "ProofOfEfficiency::verifyBatches: batch does not have been sequenced" ); bytes memory snarkHashBytes = getInputSnarkBytes( @@ -373,7 +373,7 @@ contract ProofOfEfficiency is Initializable { // Verify proof require( rollupVerifier.verifyProof(proofA, proofB, proofC, [inputSnark]), - "ProofOfEfficiency::verifyBatch: INVALID_PROOF" + "ProofOfEfficiency::verifyBatches: INVALID_PROOF" ); // Get MATIC reward @@ -389,7 +389,7 @@ contract ProofOfEfficiency is Initializable { // Interact with globalExitRoot globalExitRootManager.updateExitRoot(newLocalExitRoot); - emit VerifyBatch(newVerifiedBatch, msg.sender); + emit VerifyBatches(newVerifiedBatch, msg.sender); } /** @@ -614,7 +614,7 @@ contract ProofOfEfficiency is Initializable { // Set the pointer at the beginning of the byte array let ptr := add(snarkHashBytes, 32) - // function defined to add 32 bytes into the snark btye array on a prover friendly method + // Function defined to add 32 bytes into the snark btye array on a prover friendly method function add32BytesToInputSnark(bytesToAdd, ptrInit) -> ptrFinal { ptrFinal := ptrInit for { diff --git a/contracts/mocks/ProofOfEfficiencyMock.sol b/contracts/mocks/ProofOfEfficiencyMock.sol index 9bf61d0c1..c42e13622 100644 --- a/contracts/mocks/ProofOfEfficiencyMock.sol +++ b/contracts/mocks/ProofOfEfficiencyMock.sol @@ -219,6 +219,6 @@ contract ProofOfEfficiencyMock is ProofOfEfficiency, OwnableUpgradeable { // Interact with globalExitRoot globalExitRootManager.updateExitRoot(newLocalExitRoot); - emit VerifyBatch(newVerifiedBatch, msg.sender); + emit VerifyBatches(newVerifiedBatch, msg.sender); } } diff --git a/docs/Bridge.md b/docs/Bridge.md index 2e249cb55..f3df42b41 100644 --- a/docs/Bridge.md +++ b/docs/Bridge.md @@ -58,9 +58,9 @@ Bridge message |`destinationAddress` | address | Address destination |`metadata` | bytes | Message metadata -### claim +### claimAsset ```solidity - function claim( + function claimAsset( bytes32[] smtProof, uint32 index, bytes32 mainnetExitRoot, @@ -90,6 +90,38 @@ Verify merkle proof and withdraw tokens/ether |`amount` | uint256 | Amount of tokens |`metadata` | bytes | abi encoded metadata if any, empty otherwise +### claimMessage +```solidity + function claimMessage( + bytes32[] smtProof, + uint32 index, + bytes32 mainnetExitRoot, + bytes32 rollupExitRoot, + uint32 originNetwork, + address originAddress, + uint32 destinationNetwork, + address destinationAddress, + uint256 amount, + bytes metadata + ) public +``` +Verify merkle proof and execute message + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`smtProof` | bytes32[] | Smt proof +|`index` | uint32 | Index of the leaf +|`mainnetExitRoot` | bytes32 | Mainnet exit root +|`rollupExitRoot` | bytes32 | Rollup exit root +|`originNetwork` | uint32 | Origin network +|`originAddress` | address | Origin token address, 0 address is reserved for ether +|`destinationNetwork` | uint32 | Network destination, must be 0 ( mainnet) +|`destinationAddress` | address | Address destination +|`amount` | uint256 | Amount of tokens +|`metadata` | bytes | abi encoded metadata if any, empty otherwise + ### precalculatedWrapperAddress ```solidity function precalculatedWrapperAddress( diff --git a/docs/ProofOfEfficiency.md b/docs/ProofOfEfficiency.md index 4c85a3eb3..1830cb156 100644 --- a/docs/ProofOfEfficiency.md +++ b/docs/ProofOfEfficiency.md @@ -42,21 +42,21 @@ To enter and exit of the L2 network will be used a Bridge smart contract that wi struct ProofOfEfficiency.BatchData[] batches ) public ``` -Allows a sequencer to send multiple batches of L2 transactions +Allows a sequencer to send multiple batches #### Parameters: | Name | Type | Description | | :--- | :--- | :------------------------------------------------------------------- | |`batches` | struct ProofOfEfficiency.BatchData[] | Struct array which the necessary data to append new batces ot the sequence -Global exit root, timestamp and forced batches that are pop from the queue -### verifyBatch +### verifyBatches ```solidity - function verifyBatch( + function verifyBatches( + uint64 _lastVerifiedBatch, + uint64 newVerifiedBatch, bytes32 newLocalExitRoot, bytes32 newStateRoot, - uint64 numBatch, uint256[2] proofA, uint256[2][2] proofB, uint256[2] proofC @@ -68,9 +68,10 @@ Allows an aggregator to verify a batch #### Parameters: | Name | Type | Description | | :--- | :--- | :------------------------------------------------------------------- | +|`_lastVerifiedBatch` | uint64 | Last verified Batch, used as a sanity check +|`newVerifiedBatch` | uint64 | Last batch that the aggregator intends to verify |`newLocalExitRoot` | bytes32 | New local exit root once the batch is processed |`newStateRoot` | bytes32 | New State root once the batch is processed -|`numBatch` | uint64 | Batch number that the aggregator intends to verify, used as a sanity check |`proofA` | uint256[2] | zk-snark input |`proofB` | uint256[2][2] | zk-snark input |`proofC` | uint256[2] | zk-snark input @@ -89,24 +90,22 @@ This should be used only in extreme cases where the trusted sequencer does not w #### Parameters: | Name | Type | Description | | :--- | :--- | :------------------------------------------------------------------- | -|`transactions` | bytes | L2 ethereum transactions EIP-155 with signature: -rlp(nonce, gasprice, gasLimit, to, value, data, chainid, 0, 0,) || v || r || s +|`transactions` | bytes | L2 ethereum transactions EIP-155 or pre-EIP-155 with signature: |`maticAmount` | uint256 | Max amount of MATIC tokens that the sender is willing to pay ### sequenceForceBatches ```solidity function sequenceForceBatches( - uint64 numForcedBatches + struct ProofOfEfficiency.ForceBatchData[] batches ) public ``` Allows anyone to sequence forced Batches if the trusted sequencer do not have done it in the timeout period -Also allow in any time the trusted sequencer to append forceBatches to the sequence in order to avoid timeout issues #### Parameters: | Name | Type | Description | | :--- | :--- | :------------------------------------------------------------------- | -|`numForcedBatches` | uint64 | number of forced batches that will be added to the sequence +|`batches` | struct ProofOfEfficiency.ForceBatchData[] | Struct array which the necessary data to append new batces ot the sequence ### setTrustedSequencer ```solidity @@ -160,6 +159,24 @@ Function to calculate the sequencer collateral depending on the congestion of th +### calculateRewardPerBatch +```solidity + function calculateRewardPerBatch( + ) public returns (uint256) +``` +Function to calculate the reward to verify a single batch + + + +### getInputSnarkBytes +```solidity + function getInputSnarkBytes( + ) public returns (bytes) +``` + + + + ## Events ### SequenceBatches ```solidity @@ -185,9 +202,9 @@ Emitted when a batch is forced Emitted when forced batches are sequenced by not the trusted sequencer -### VerifyBatch +### VerifyBatches ```solidity - event VerifyBatch( + event VerifyBatches( ) ``` diff --git a/docs/lib/DepositContract.md b/docs/lib/DepositContract.md index 374bb8285..371c53c9a 100644 --- a/docs/lib/DepositContract.md +++ b/docs/lib/DepositContract.md @@ -58,6 +58,7 @@ Verify merkle proof ### getLeafValue ```solidity function getLeafValue( + uint8 leafType, uint32 originNetwork, address originTokenAddress, uint32 destinationNetwork, @@ -72,6 +73,7 @@ Given the leaf data returns the leaf value #### Parameters: | Name | Type | Description | | :--- | :--- | :------------------------------------------------------------------- | +|`leafType` | uint8 | Leaf type |`originNetwork` | uint32 | Origin Network |`originTokenAddress` | address | Origin token address, 0 address is reserved for ether |`destinationNetwork` | uint32 | Destination network diff --git a/test/contracts/proofOfEfficiency.test.js b/test/contracts/proofOfEfficiency.test.js index bffcda5c1..7e5053b6b 100644 --- a/test/contracts/proofOfEfficiency.test.js +++ b/test/contracts/proofOfEfficiency.test.js @@ -364,14 +364,14 @@ describe('Proof of efficiency', () => { transactions: l2txData, globalExitRoot: ethers.constants.HashZero, timestamp: 0, - forceBatchesTimestamp: [], + minForcedTimestamp: 0, }; const sequence2 = { transactions: l2txData, globalExitRoot: ethers.constants.HashZero, timestamp: 0, - forceBatchesTimestamp: [], + minForcedTimestamp: 0, }; const initialOwnerBalance = await maticTokenContract.balanceOf( @@ -460,16 +460,18 @@ describe('Proof of efficiency', () => { ); // Check force batches struct - const batchStruct = await proofOfEfficiencyContract.forcedBatches(1); - - expect(batchStruct.maticFee).to.be.equal(maticAmount); - expect(batchStruct.minTimestamp).to.be.equal((await ethers.provider.getBlock()).timestamp); - const batchHashData = calculateBatchHashData( - l2txData, - lastGlobalExitRoot, - deployer.address, - ); - expect(batchStruct.batchHashData).to.be.equal(batchHashData); + const batchHash = await proofOfEfficiencyContract.forcedBatches(1); + const timestampForceBatch = (await ethers.provider.getBlock()).timestamp; + + const batchHashJs = ethers.utils.solidityKeccak256( + ['bytes32', 'bytes32', 'uint64'], + [ + calculateBatchHashData(l2txData), + lastGlobalExitRoot, + timestampForceBatch, + ], + ); + expect(batchHashJs).to.be.equal(batchHash); }); it('should sequence force batches using sequenceForceBatches', async () => { @@ -487,42 +489,65 @@ describe('Proof of efficiency', () => { .to.emit(proofOfEfficiencyContract, 'ForceBatch') .withArgs(lastForcedBatch, lastGlobalExitRoot, deployer.address, '0x'); - const initialTimestamp = (await proofOfEfficiencyContract.forcedBatches(lastForcedBatch)).minTimestamp; + const timestampForceBatch = (await ethers.provider.getBlock()).timestamp; + + const forceBatchHash = await proofOfEfficiencyContract.forcedBatches(1); + + const batchHashJs = ethers.utils.solidityKeccak256( + ['bytes32', 'bytes32', 'uint64'], + [ + calculateBatchHashData(l2txData), + lastGlobalExitRoot, + timestampForceBatch, + ], + ); + expect(batchHashJs).to.be.equal(forceBatchHash); // Check storage variables before call expect(await proofOfEfficiencyContract.lastForceBatchSequenced()).to.be.equal(0); expect(await proofOfEfficiencyContract.lastForceBatch()).to.be.equal(1); expect(await proofOfEfficiencyContract.lastBatchSequenced()).to.be.equal(0); + const forceBatchStruct = { + transactions: l2txData, + globalExitRoot: lastGlobalExitRoot, + minForcedTimestamp: timestampForceBatch, + }; + // revert because the timeout is not expired - await expect(proofOfEfficiencyContract.sequenceForceBatches(0)) + await expect(proofOfEfficiencyContract.sequenceForceBatches([])) .to.be.revertedWith('ProofOfEfficiency::sequenceForceBatch: Must force at least 1 batch'); // revert because the timeout is not expired - await expect(proofOfEfficiencyContract.sequenceForceBatches(1)) + await expect(proofOfEfficiencyContract.sequenceForceBatches([forceBatchStruct])) .to.be.revertedWith('ProofOfEfficiency::sequenceForceBatch: Forced batch is not in timeout period'); // Increment timestamp const forceBatchTimeout = await proofOfEfficiencyContract.FORCE_BATCH_TIMEOUT(); - await ethers.provider.send('evm_setNextBlockTimestamp', [(initialTimestamp.add(forceBatchTimeout)).toNumber()]); + await ethers.provider.send('evm_setNextBlockTimestamp', [timestampForceBatch + forceBatchTimeout.toNumber()]); // sequence force batch - await expect(proofOfEfficiencyContract.sequenceForceBatches(lastForcedBatch)) + await expect(proofOfEfficiencyContract.sequenceForceBatches([forceBatchStruct])) .to.emit(proofOfEfficiencyContract, 'SequenceForceBatches') - .withArgs(lastForcedBatch); + .withArgs(1); + + const timestampSequenceBatch = (await ethers.provider.getBlock()).timestamp; expect(await proofOfEfficiencyContract.lastForceBatchSequenced()).to.be.equal(1); expect(await proofOfEfficiencyContract.lastForceBatch()).to.be.equal(1); expect(await proofOfEfficiencyContract.lastBatchSequenced()).to.be.equal(1); // Check force batches struct - const batchStruct = await proofOfEfficiencyContract.sequencedBatches(1); - - expect(batchStruct.timestamp).to.be.equal((await ethers.provider.getBlock()).timestamp); + const batchAccInputHash = await proofOfEfficiencyContract.sequencedBatches(1); - // Batch hash data contains pointer to force batch instead - expect(batchStruct.batchHashData).to.be.equal(ethers.utils.hexZeroPad(0, 32)); - expect(batchStruct.forceBatchNum).to.be.equal(1); + const batchAccInputHashJs = calculateAccInputHash( + ethers.constants.HashZero, + calculateBatchHashData(l2txData), + lastGlobalExitRoot, + timestampSequenceBatch, + deployer.address, + ); + expect(batchAccInputHash).to.be.equal(batchAccInputHashJs); }); it('should verify a sequenced batch', async () => { @@ -534,7 +559,7 @@ describe('Proof of efficiency', () => { transactions: l2txData, globalExitRoot: ethers.constants.HashZero, timestamp: currentTimestamp, - forceBatchesTimestamp: [], + minForcedTimestamp: 0, }; // Approve tokens @@ -564,20 +589,53 @@ describe('Proof of efficiency', () => { ); await expect( - proofOfEfficiencyContract.connect(aggregator).verifyBatch( + proofOfEfficiencyContract.connect(aggregator).verifyBatches( + numBatch, + numBatch, + newLocalExitRoot, + newStateRoot, + proofA, + proofB, + proofC, + ), + ).to.be.revertedWith('ProofOfEfficiency::verifyBatches: _lastVerifiedBatch does not match'); + + await expect( + proofOfEfficiencyContract.connect(aggregator).verifyBatches( + numBatch - 1, + numBatch - 1, newLocalExitRoot, newStateRoot, + proofA, + proofB, + proofC, + ), + ).to.be.revertedWith('ProofOfEfficiency::verifyBatches: newVerifiedBatch must be bigger than lastVerifiedBatch'); + + await expect( + proofOfEfficiencyContract.connect(aggregator).verifyBatches( numBatch - 1, + numBatch + 1, + newLocalExitRoot, + newStateRoot, proofA, proofB, proofC, ), - ).to.be.revertedWith('ProofOfEfficiency::verifyBatch: batch does not match'); + ).to.be.revertedWith('ProofOfEfficiency::verifyBatches: batch does not have been sequenced'); // Verify batch await expect( - proofOfEfficiencyContract.connect(aggregator).verifyBatch(newLocalExitRoot, newStateRoot, numBatch, proofA, proofB, proofC), - ).to.emit(proofOfEfficiencyContract, 'VerifyBatch') + proofOfEfficiencyContract.connect(aggregator).verifyBatches( + numBatch - 1, + numBatch, + newLocalExitRoot, + newStateRoot, + proofA, + proofB, + proofC, + ), + ).to.emit(proofOfEfficiencyContract, 'VerifyBatches') .withArgs(numBatch, aggregator.address); const finalAggregatorMatic = await maticTokenContract.balanceOf( @@ -602,13 +660,19 @@ describe('Proof of efficiency', () => { .to.emit(proofOfEfficiencyContract, 'ForceBatch') .withArgs(lastForcedBatch, lastGlobalExitRoot, deployer.address, '0x'); - const initialTimestamp = (await proofOfEfficiencyContract.forcedBatches(lastForcedBatch)).minTimestamp; + const timestampForceBatch = (await ethers.provider.getBlock()).timestamp; // Increment timestamp const forceBatchTimeout = await proofOfEfficiencyContract.FORCE_BATCH_TIMEOUT(); - await ethers.provider.send('evm_setNextBlockTimestamp', [(initialTimestamp.add(forceBatchTimeout)).toNumber()]); + await ethers.provider.send('evm_setNextBlockTimestamp', [timestampForceBatch + forceBatchTimeout.toNumber()]); + + const forceBatchStruct = { + transactions: l2txData, + globalExitRoot: lastGlobalExitRoot, + minForcedTimestamp: timestampForceBatch, + }; // sequence force batch - await expect(proofOfEfficiencyContract.sequenceForceBatches(lastForcedBatch)) + await expect(proofOfEfficiencyContract.sequenceForceBatches([forceBatchStruct])) .to.emit(proofOfEfficiencyContract, 'SequenceForceBatches') .withArgs(lastForcedBatch); @@ -629,10 +693,11 @@ describe('Proof of efficiency', () => { // Verify batch await expect( - proofOfEfficiencyContract.connect(aggregator).verifyBatch( + proofOfEfficiencyContract.connect(aggregator).verifyBatches( + numBatch - 1, + numBatch, newLocalExitRoot, newStateRoot, - numBatch, proofA, proofB, proofC, @@ -660,7 +725,7 @@ describe('Proof of efficiency', () => { transactions: l2txData, globalExitRoot: ethers.constants.HashZero, timestamp: currentTimestamp, - forceBatchesTimestamp: [], + minForcedTimestamp: 0, }; // Approve tokens @@ -675,82 +740,46 @@ describe('Proof of efficiency', () => { .to.emit(proofOfEfficiencyContract, 'SequenceBatches') .withArgs(lastBatchSequenced + 1); - const sentBatch = await proofOfEfficiencyContract.sequencedBatches(lastBatchSequenced + 1); + const sentBatchHash = await proofOfEfficiencyContract.sequencedBatches(lastBatchSequenced + 1); + const oldAccInputHash = await proofOfEfficiencyContract.sequencedBatches(0); - const batchHashData = calculateBatchHashData( - sequence.transactions, + const batchAccInputHashJs = calculateAccInputHash( + oldAccInputHash, + calculateBatchHashData(sequence.transactions), sequence.globalExitRoot, + sequence.timestamp, trustedSequencer.address, ); - expect(sentBatch.batchHashData).to.be.equal(batchHashData); + expect(sentBatchHash).to.be.equal(batchAccInputHashJs); // Compute circuit input with the SC function const currentStateRoot = await proofOfEfficiencyContract.currentStateRoot(); - const currentLocalExitRoot = await proofOfEfficiencyContract.currentLocalExitRoot(); const newStateRoot = '0x0000000000000000000000000000000000000000000000000000000000001234'; const newLocalExitRoot = '0x0000000000000000000000000000000000000000000000000000000000000456'; const numBatch = (await proofOfEfficiencyContract.lastVerifiedBatch()) + 1; // Compute Js input - const circuitInpuStarktSC = await proofOfEfficiencyContract.calculateStarkInput( + const inputSnarkJS = await calculateSnarkInput( currentStateRoot, - currentLocalExitRoot, newStateRoot, newLocalExitRoot, - batchHashData, + oldAccInputHash, + batchAccInputHashJs, + numBatch - 1, numBatch, - sequence.timestamp, chainID, + deployer.address, ); // Compute Js input - const circuitInputStarkJS = calculateStarkInput( - currentStateRoot, - currentLocalExitRoot, - newStateRoot, - newLocalExitRoot, - batchHashData, - numBatch, - sequence.timestamp, - chainID, - ); - - expect(circuitInpuStarktSC).to.be.equal(circuitInputStarkJS); - - // Check snark input - const inputSnarkSC = await proofOfEfficiencyContract.calculateSnarkInput( - currentStateRoot, - currentLocalExitRoot, - newStateRoot, - newLocalExitRoot, - batchHashData, - numBatch, - sequence.timestamp, - chainID, - aggregator.address, - ); - - const inputSnarkJS = await calculateSnarkInput( - currentStateRoot, - currentLocalExitRoot, - newStateRoot, - newLocalExitRoot, - batchHashData, + const circuitInpuSnarkSC = await proofOfEfficiencyContract.getNextSnarkInput( + numBatch - 1, numBatch, - sequence.timestamp, - chainID, - aggregator.address, - ); - - // Check the input parameters are correct - const circuitNextInputSnarkSC = await proofOfEfficiencyContract.connect(aggregator).getNextSnarkInput( newLocalExitRoot, newStateRoot, - numBatch, ); - expect(inputSnarkSC).to.be.equal(inputSnarkJS); - expect(circuitNextInputSnarkSC).to.be.equal(inputSnarkSC); + expect(circuitInpuSnarkSC).to.be.equal(inputSnarkJS); }); it('should match the computed SC input with the Js input in force batches', async () => { @@ -762,103 +791,68 @@ describe('Proof of efficiency', () => { maticTokenContract.approve(proofOfEfficiencyContract.address, maticAmount), ).to.emit(maticTokenContract, 'Approval'); - const lastForcedBatch = (await proofOfEfficiencyContract.lastForceBatch()) + 1; + const lastForcedBatch = (await proofOfEfficiencyContract.lastForceBatch()).toNumber() + 1; await expect(proofOfEfficiencyContract.forceBatch(l2txData, maticAmount)) .to.emit(proofOfEfficiencyContract, 'ForceBatch') .withArgs(lastForcedBatch, lastGlobalExitRoot, deployer.address, '0x'); - const initialTimestamp = (await proofOfEfficiencyContract.forcedBatches(lastForcedBatch)).minTimestamp; + const timestampForceBatch = (await ethers.provider.getBlock()).timestamp; + // Increment timestamp const forceBatchTimeout = await proofOfEfficiencyContract.FORCE_BATCH_TIMEOUT(); - await ethers.provider.send('evm_setNextBlockTimestamp', [(initialTimestamp.add(forceBatchTimeout)).toNumber()]); + await ethers.provider.send('evm_setNextBlockTimestamp', [timestampForceBatch + forceBatchTimeout.toNumber()]); + + const forceBatchStruct = { + transactions: l2txData, + globalExitRoot: lastGlobalExitRoot, + minForcedTimestamp: timestampForceBatch, + }; // sequence force batch - await expect(proofOfEfficiencyContract.sequenceForceBatches(lastForcedBatch)) + await expect(proofOfEfficiencyContract.sequenceForceBatches([forceBatchStruct])) .to.emit(proofOfEfficiencyContract, 'SequenceForceBatches') .withArgs(lastForcedBatch); const sequencedTimestmap = (await ethers.provider.getBlock()).timestamp; - const forcedBatchStruct = await proofOfEfficiencyContract.forcedBatches(lastForcedBatch); + const oldAccInputHash = await proofOfEfficiencyContract.sequencedBatches(0); + const batchAccInputHash = await proofOfEfficiencyContract.sequencedBatches(1); - const batchHashData = calculateBatchHashData( - l2txData, + const batchAccInputHashJs = calculateAccInputHash( + oldAccInputHash, + calculateBatchHashData(l2txData), lastGlobalExitRoot, + sequencedTimestmap, deployer.address, ); - expect(forcedBatchStruct.batchHashData).to.be.equal(batchHashData); - expect(forcedBatchStruct.maticFee).to.be.equal(maticAmount); - - const sequencedBatch = await proofOfEfficiencyContract.sequencedBatches(lastForcedBatch); - expect(sequencedBatch.batchHashData).to.be.equal(ethers.utils.hexZeroPad(0, 32)); - expect(sequencedBatch.forceBatchNum).to.be.equal(1); - expect(sequencedBatch.timestamp).to.be.equal(sequencedTimestmap); + expect(batchAccInputHash).to.be.equal(batchAccInputHashJs); // Compute circuit input with the SC function const currentStateRoot = await proofOfEfficiencyContract.currentStateRoot(); - const currentLocalExitRoot = await proofOfEfficiencyContract.currentLocalExitRoot(); const newStateRoot = '0x0000000000000000000000000000000000000000000000000000000000001234'; const newLocalExitRoot = '0x0000000000000000000000000000000000000000000000000000000000000456'; const numBatch = (await proofOfEfficiencyContract.lastVerifiedBatch()) + 1; // Compute Js input - const circuitInputSC = await proofOfEfficiencyContract.calculateStarkInput( + const inputSnarkJS = await calculateSnarkInput( currentStateRoot, - currentLocalExitRoot, newStateRoot, newLocalExitRoot, - batchHashData, + oldAccInputHash, + batchAccInputHashJs, + numBatch - 1, numBatch, - sequencedTimestmap, chainID, + deployer.address, ); // Compute Js input - const circuitInputJS = calculateStarkInput( - currentStateRoot, - currentLocalExitRoot, - newStateRoot, - newLocalExitRoot, - batchHashData, + const circuitInpuSnarkSC = await proofOfEfficiencyContract.getNextSnarkInput( + numBatch - 1, numBatch, - sequencedTimestmap, - chainID, - ); - - expect(circuitInputSC).to.be.equal(circuitInputJS); - - // Check snark input - const inputSnarkSC = await proofOfEfficiencyContract.calculateSnarkInput( - currentStateRoot, - currentLocalExitRoot, - newStateRoot, - newLocalExitRoot, - batchHashData, - numBatch, - sequencedTimestmap, - chainID, - aggregator.address, - ); - - const inputSnarkJS = await calculateSnarkInput( - currentStateRoot, - currentLocalExitRoot, - newStateRoot, - newLocalExitRoot, - batchHashData, - numBatch, - sequencedTimestmap, - chainID, - aggregator.address, - ); - - // Check the input parameters are correct - const circuitNextInputSC = await proofOfEfficiencyContract.connect(aggregator).getNextSnarkInput( newLocalExitRoot, newStateRoot, - numBatch, ); - expect(inputSnarkSC).to.be.equal(inputSnarkJS); - expect(circuitNextInputSC).to.be.equal(inputSnarkJS); + expect(circuitInpuSnarkSC).to.be.equal(inputSnarkJS); }); }); From ba8e40eb562fa06587f9b607e36e2bd98729edc0 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Tue, 25 Oct 2022 17:29:02 +0200 Subject: [PATCH 08/71] finish at last --- test/contracts/real-prover/real-flow.test.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/test/contracts/real-prover/real-flow.test.js b/test/contracts/real-prover/real-flow.test.js index e398c8202..227b5b37f 100644 --- a/test/contracts/real-prover/real-flow.test.js +++ b/test/contracts/real-prover/real-flow.test.js @@ -6,7 +6,7 @@ const { contractUtils } = require('@0xpolygonhermez/zkevm-commonjs'); const { generateSolidityInputs } = contractUtils; -const { calculateSnarkInput, calculateBatchHashData } = contractUtils; +const { calculateSnarkInput, calculateBatchHashData, calculateAccInputHash } = contractUtils; const proofJson = require('./test-inputs/proof.json'); const publicJson = require('./test-inputs/public.json'); @@ -95,18 +95,22 @@ describe('Real flow test', () => { proofA, proofB, proofC, input, } = generateSolidityInputs(proofJson, publicJson); - const batchHashData = calculateBatchHashData( - inputJson.batchL2Data, + const batchAccInputHashJs = calculateAccInputHash( + inputJson.oldAccInputHash, + calculateBatchHashData(inputJson.batchL2Data), inputJson.globalExitRoot, + inputJson.timestamp, inputJson.sequencerAddr, ); + expect(batchAccInputHashJs).to.be.eq(inputJson.newAccInputHash); const circuitInputStarkJS = await calculateSnarkInput( inputJson.oldStateRoot, - inputJson.oldLocalExitRoot, inputJson.newStateRoot, inputJson.newLocalExitRoot, - batchHashData, + inputJson.oldAccInputHash, + inputJson.newAccInputHash, + inputJson.numBatch - 1, inputJson.numBatch, inputJson.timestamp, inputJson.chainId, From 66fd49d048d5c51b8a53f8298d68ec27f3d95086 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Tue, 25 Oct 2022 17:44:53 +0200 Subject: [PATCH 09/71] rebase changes --- compiled-contracts/Bridge.json | 4 +- compiled-contracts/BridgeMock.json | 4 +- compiled-contracts/ProofOfEfficiency.json | 4 +- compiled-contracts/ProofOfEfficiencyMock.json | 4 +- contracts/Bridge.sol | 1 + contracts/ProofOfEfficiency.sol | 9 +- docs/Bridge2.md | 166 ------------------ docs/BridgeV2.md | 166 ------------------ docs/lib/TokenWrappedL2.md | 31 ---- package.json | 2 +- 10 files changed, 14 insertions(+), 377 deletions(-) delete mode 100644 docs/Bridge2.md delete mode 100644 docs/BridgeV2.md delete mode 100644 docs/lib/TokenWrappedL2.md diff --git a/compiled-contracts/Bridge.json b/compiled-contracts/Bridge.json index 259377be6..46de73d4c 100644 --- a/compiled-contracts/Bridge.json +++ b/compiled-contracts/Bridge.json @@ -621,8 +621,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506156c5806100206000396000f3fe6080604052600436106200017b5760003560e01c806381b1c17411620000cf578063d02103ca116200007d578063e73758811162000060578063e73758811462000589578063ed6be5c914620005bd578063ff634ed714620005d457600080fd5b8063d02103ca1462000543578063d96a15f7146200057257600080fd5b8063a08e8a0811620000b2578063a08e8a0814620004bf578063b7e6a7d414620004e9578063bab161bf146200050e57600080fd5b806381b1c17414620004535780638624c35c146200049a57600080fd5b80633ae05047116200012d5780633e19704311620001105780633e19704314620003155780634638554914620004095780637b6323c1146200042e57600080fd5b80633ae0504714620002c75780633da8168214620002df57600080fd5b80632dfdf0b511620001625780632dfdf0b514620001e85780632f3a3d5d146200020f578063318aee3d146200023e57600080fd5b80630871e971146200018057806322e95f2c1462000199575b600080fd5b6200019762000191366004620032c4565b620005eb565b005b348015620001a657600080fd5b50620001be620001b836600462003380565b62000bdf565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015620001f557600080fd5b506200020060415481565b604051908152602001620001df565b3480156200021c57600080fd5b50604754620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200024b57600080fd5b50620002956200025d366004620033bc565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201620001df565b348015620002d457600080fd5b506200020062000c82565b348015620002ec57600080fd5b5062000304620002fe366004620034db565b62000d5c565b6040519015158152602001620001df565b3480156200032257600080fd5b50620002006200033436600462003559565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200041657600080fd5b50620001976200042836600462003688565b62000e5c565b3480156200043b57600080fd5b50620001976200044d36600462003688565b62001617565b3480156200046057600080fd5b50620001be620004723660046200376f565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620004a757600080fd5b5062000197620004b936600462003380565b620020c2565b348015620004cc57600080fd5b50620004d6600081565b60405160ff9091168152602001620001df565b348015620004f657600080fd5b50620001be6200050836600462003380565b62002340565b3480156200051b57600080fd5b506042546200052d9063ffffffff1681565b60405163ffffffff9091168152602001620001df565b3480156200055057600080fd5b50604654620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b620001976200058336600462003789565b62002409565b3480156200059657600080fd5b5062000304620005a83660046200376f565b60436020526000908152604090205460ff1681565b348015620005ca57600080fd5b506200052d600081565b348015620005e157600080fd5b50620004d6600181565b60425463ffffffff908116908616036200068c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff891662000748578534146200073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c55450000000000000000000000000000000000606482015260840162000683565b6000915062000a5c565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000849576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562000810573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008369190620037f1565b5060208101518151909450925062000a5a565b84156200085e576200085e8a88888862002656565b6200088273ffffffffffffffffffffffffffffffffffffffff8b1633308a62002a81565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200092e919081019062003890565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200097a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620009c2919081019062003890565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a349190620038c9565b60405160200162000a489392919062003935565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760415460405162000a9e98979695949392919062003972565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000b599062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000b8162000c82565b6040518263ffffffff1660e01b815260040162000ba091815260200190565b600060405180830381600087803b15801562000bbb57600080fd5b505af115801562000bd0573d6000803e3d6000fd5b50505050505050505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6041546000908190815b602081101562000d54578160011660010362000cec576001816020811062000cb85762000cb8620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000d30565b826021826020811062000d035762000d03620039eb565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b62000d3d60028362003a49565b91508062000d4b8162003a85565b91505062000c8c565b509092915050565b60008467ffffffffffffffff8416825b602081101562000e4f578160011660010362000dd95786818151811062000d975762000d97620039eb565b60200260200101518360405160200162000dbb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000e2b565b8287828151811062000def5762000def620039eb565b602002602001015160405160200162000e12929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000e3860028362003a49565b91508062000e468162003a85565b91505062000d6c565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000f04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d4544000000000000000000000000000000000000000000000000000000606482015260840162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000f9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fc3919062003ac0565b60000362001054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000606482015260840162000683565b60425463ffffffff858116911614620010f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000606482015260840162000683565b60425463ffffffff166200126e578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620011da905b8b8b63ffffffff168a62000d5c565b62001268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b620013d8565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200134a905b8b8b63ffffffff168b62000d5c565b620013d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff8516908490620014469089908b90879060240162003ada565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f20000000000000000000000000000000000000000000000000000000017905251620014c9919062003b20565b60006040518083038185875af1925050503d806000811462001508576040519150601f19603f3d011682016040523d82523d6000602084013e6200150d565b606091505b50509050806200159f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c454400000000000000000000000000000000000000000000000000000000606482015260840162000683565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b63ffffffff891660009081526043602052604090205460ff161562001699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d45440000604482015260640162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001732573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001758919062003ac0565b600003620017e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d41544348000000000000000000000000000000000000606482015260840162000683565b60425463ffffffff85811691161462001885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d41544348000000000000000000000000000000606482015260840162000683565b60425463ffffffff16620019b4578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200194690620011cb565b620019ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b62001acf565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062001a67906200133b565b62001acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff851662001c40576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001b62919062003b20565b60006040518083038185875af1925050503d806000811462001ba1576040519150601f19603f3d011682016040523d82523d6000602084013e62001ba6565b606091505b505090508062001c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f4544000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b506200204b565b60425463ffffffff9081169087160362001c7d5762001c7773ffffffffffffffffffffffffffffffffffffffff8616848462002cde565b6200204b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001faa5760475460009062001d689073ffffffffffffffffffffffffffffffffffffffff168462002d36565b905060008060008680602001905181019062001d85919062003b3e565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001dce95949392919062003bbf565b600060405180830381600087803b15801562001de957600080fd5b505af115801562001dfe573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001f989392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062002048565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562002020573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020469190620037f1565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff1615808015620020e35750600054600160ff909116105b80620020ff5750303b158015620020ff575060005460ff166001145b6200218d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840162000683565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620021ec57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556040516200226a906200326c565b604051809103906000f08015801562002287573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055620022d762002e16565b80156200233b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620024019073ffffffffffffffffffffffffffffffffffffffff168262002f5e565b949350505050565b60425463ffffffff90811690841603620024a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c4600000000000000000000000000000000000000000000606482015260840162000683565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620024f39260019263ffffffff9092169133918991899134918a919062003972565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620025d69062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d620025fe62000c82565b6040518263ffffffff1660e01b81526004016200261d91815260200190565b600060405180830381600087803b1580156200263857600080fd5b505af11580156200264d573d6000803e3d6000fd5b50505050505050565b60006200269983838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002fe292505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf000000000000000000000000000000000000000000000000000000001462002748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000683565b60008080808080806200275f896004818d62003c1f565b8101906200276e919062003c4b565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462002839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000683565b73ffffffffffffffffffffffffffffffffffffffff86163014620028e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000683565b8a851462002971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d4154434800000000000000000000000000000000000000606482015260840162000683565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002a2c919062003b20565b6000604051808303816000865af19150503d806000811462002a6b576040519150601f19603f3d011682016040523d82523d6000602084013e62002a70565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905262002b5f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002fe9565b50505050565b80600162002b766020600262003ddf565b62002b82919062003ded565b6041541062002c14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c00000000000000000000000000000000000000000000606482015260840162000683565b60016041600082825462002c29919062003e07565b909155505060415460005b602081101562002cd3578160011660010362002c6957826001826020811062002c615762002c61620039eb565b015550505050565b6001816020811062002c7f5762002c7f620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002cbc919062003a49565b91508062002cca8162003a85565b91505062002c34565b506200233b62003e22565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526200233b9084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002adc565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000c7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640162000683565b600054610100900460ff1662002eaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000683565b60005b62002ec06001602062003ded565b81101562002f5b576021816020811062002ede5762002ede620039eb565b01546021826020811062002ef65762002ef6620039eb565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002f31919062003e07565b6020811062002f445762002f44620039eb565b01558062002f528162003a85565b91505062002eb2565b50565b600062002fdb8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b60006200304d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620030fc9092919063ffffffff16565b8051909150156200233b57808060200190518101906200306e9190620037f1565b6200233b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000683565b60606200240184846000858573ffffffffffffffffffffffffffffffffffffffff85163b62003188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000683565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620031b3919062003b20565b60006040518083038185875af1925050503d8060008114620031f2576040519150601f19603f3d011682016040523d82523d6000602084013e620031f7565b606091505b50915091506200320982828662003214565b979650505050505050565b606083156200322557508162002fdb565b825115620032365782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000683919062003e51565b6118298062003e6783390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462002f5b57600080fd5b8035620032aa816200327a565b919050565b803563ffffffff81168114620032aa57600080fd5b60008060008060008060a08789031215620032de57600080fd5b8635620032eb816200327a565b9550620032fb60208801620032af565b945060408701356200330d816200327a565b935060608701359250608087013567ffffffffffffffff808211156200333257600080fd5b818901915089601f8301126200334757600080fd5b8135818111156200335757600080fd5b8a60208285010111156200336a57600080fd5b6020830194508093505050509295509295509295565b600080604083850312156200339457600080fd5b6200339f83620032af565b91506020830135620033b1816200327a565b809150509250929050565b600060208284031215620033cf57600080fd5b813562002fdb816200327a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620034555762003455620033dc565b604052919050565b600082601f8301126200346f57600080fd5b8135602067ffffffffffffffff8211156200348e576200348e620033dc565b8160051b6200349f8282016200340b565b9283528481018201928281019087851115620034ba57600080fd5b83870192505b848310156200320957823582529183019190830190620034c0565b60008060008060808587031215620034f257600080fd5b84359350602085013567ffffffffffffffff808211156200351257600080fd5b62003520888389016200345d565b94506040870135915080821682146200353857600080fd5b509396929550929360600135925050565b60ff8116811462002f5b57600080fd5b600080600080600080600060e0888a0312156200357557600080fd5b8735620035828162003549565b96506200359260208901620032af565b95506040880135620035a4816200327a565b9450620035b460608901620032af565b93506080880135620035c6816200327a565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620036005762003600620033dc565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126200363e57600080fd5b8135620036556200364f82620035e3565b6200340b565b8181528460208386010111156200366b57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620036a957600080fd5b8a3567ffffffffffffffff80821115620036c257600080fd5b620036d08e838f016200345d565b9b50620036e060208e01620032af565b9a5060408d0135995060608d01359850620036fe60808e01620032af565b97506200370e60a08e016200329d565b96506200371e60c08e01620032af565b95506200372e60e08e016200329d565b94506101008d013593506101208d01359150808211156200374e57600080fd5b506200375d8d828e016200362c565b9150509295989b9194979a5092959850565b6000602082840312156200378257600080fd5b5035919050565b6000806000606084860312156200379f57600080fd5b620037aa84620032af565b92506020840135620037bc816200327a565b9150604084013567ffffffffffffffff811115620037d957600080fd5b620037e7868287016200362c565b9150509250925092565b6000602082840312156200380457600080fd5b8151801515811462002fdb57600080fd5b60005b838110156200383257818101518382015260200162003818565b8381111562002b5f5750506000910152565b600082601f8301126200385657600080fd5b8151620038676200364f82620035e3565b8181528460208386010111156200387d57600080fd5b6200240182602083016020870162003815565b600060208284031215620038a357600080fd5b815167ffffffffffffffff811115620038bb57600080fd5b620024018482850162003844565b600060208284031215620038dc57600080fd5b815162002fdb8162003549565b600081518084526200390381602086016020860162003815565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6060815260006200394a6060830186620038e9565b82810360208401526200395e8186620038e9565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620039d282850187620038e9565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003a80577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003ab95762003ab962003a1a565b5060010190565b60006020828403121562003ad357600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003b176060830184620038e9565b95945050505050565b6000825162003b3481846020870162003815565b9190910192915050565b60008060006060848603121562003b5457600080fd5b835167ffffffffffffffff8082111562003b6d57600080fd5b62003b7b8783880162003844565b9450602086015191508082111562003b9257600080fd5b5062003ba18682870162003844565b925050604084015162003bb48162003549565b809150509250925092565b60a08152600062003bd460a0830188620038e9565b828103602084015262003be88188620038e9565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000808585111562003c3057600080fd5b8386111562003c3e57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003c6757600080fd5b873562003c74816200327a565b9650602088013562003c86816200327a565b955060408801359450606088013593506080880135620035c68162003549565b600181815b8085111562003d0557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003ce95762003ce962003a1a565b8085161562003cf757918102915b93841c939080029062003cab565b509250929050565b60008262003d1e5750600162000c7c565b8162003d2d5750600062000c7c565b816001811462003d46576002811462003d515762003d71565b600191505062000c7c565b60ff84111562003d655762003d6562003a1a565b50506001821b62000c7c565b5060208310610133831016604e8410600b841016171562003d96575081810a62000c7c565b62003da2838362003ca6565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003dd75762003dd762003a1a565b029392505050565b600062002fdb838362003d0d565b60008282101562003e025762003e0262003a1a565b500390565b6000821982111562003e1d5762003e1d62003a1a565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60208152600062002fdb6020830184620038e956fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a2646970667358221220c5f6583c5a84970668cf41f829e248295552bc3e4c8681d6bb9937be1c0ef7a264736f6c634300080f0033", - "deployedBytecode": "0x6080604052600436106200017b5760003560e01c806381b1c17411620000cf578063d02103ca116200007d578063e73758811162000060578063e73758811462000589578063ed6be5c914620005bd578063ff634ed714620005d457600080fd5b8063d02103ca1462000543578063d96a15f7146200057257600080fd5b8063a08e8a0811620000b2578063a08e8a0814620004bf578063b7e6a7d414620004e9578063bab161bf146200050e57600080fd5b806381b1c17414620004535780638624c35c146200049a57600080fd5b80633ae05047116200012d5780633e19704311620001105780633e19704314620003155780634638554914620004095780637b6323c1146200042e57600080fd5b80633ae0504714620002c75780633da8168214620002df57600080fd5b80632dfdf0b511620001625780632dfdf0b514620001e85780632f3a3d5d146200020f578063318aee3d146200023e57600080fd5b80630871e971146200018057806322e95f2c1462000199575b600080fd5b6200019762000191366004620032c4565b620005eb565b005b348015620001a657600080fd5b50620001be620001b836600462003380565b62000bdf565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015620001f557600080fd5b506200020060415481565b604051908152602001620001df565b3480156200021c57600080fd5b50604754620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200024b57600080fd5b50620002956200025d366004620033bc565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201620001df565b348015620002d457600080fd5b506200020062000c82565b348015620002ec57600080fd5b5062000304620002fe366004620034db565b62000d5c565b6040519015158152602001620001df565b3480156200032257600080fd5b50620002006200033436600462003559565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200041657600080fd5b50620001976200042836600462003688565b62000e5c565b3480156200043b57600080fd5b50620001976200044d36600462003688565b62001617565b3480156200046057600080fd5b50620001be620004723660046200376f565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620004a757600080fd5b5062000197620004b936600462003380565b620020c2565b348015620004cc57600080fd5b50620004d6600081565b60405160ff9091168152602001620001df565b348015620004f657600080fd5b50620001be6200050836600462003380565b62002340565b3480156200051b57600080fd5b506042546200052d9063ffffffff1681565b60405163ffffffff9091168152602001620001df565b3480156200055057600080fd5b50604654620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b620001976200058336600462003789565b62002409565b3480156200059657600080fd5b5062000304620005a83660046200376f565b60436020526000908152604090205460ff1681565b348015620005ca57600080fd5b506200052d600081565b348015620005e157600080fd5b50620004d6600181565b60425463ffffffff908116908616036200068c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff891662000748578534146200073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c55450000000000000000000000000000000000606482015260840162000683565b6000915062000a5c565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000849576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562000810573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008369190620037f1565b5060208101518151909450925062000a5a565b84156200085e576200085e8a88888862002656565b6200088273ffffffffffffffffffffffffffffffffffffffff8b1633308a62002a81565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200092e919081019062003890565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200097a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620009c2919081019062003890565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a349190620038c9565b60405160200162000a489392919062003935565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760415460405162000a9e98979695949392919062003972565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000b599062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000b8162000c82565b6040518263ffffffff1660e01b815260040162000ba091815260200190565b600060405180830381600087803b15801562000bbb57600080fd5b505af115801562000bd0573d6000803e3d6000fd5b50505050505050505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6041546000908190815b602081101562000d54578160011660010362000cec576001816020811062000cb85762000cb8620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000d30565b826021826020811062000d035762000d03620039eb565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b62000d3d60028362003a49565b91508062000d4b8162003a85565b91505062000c8c565b509092915050565b60008467ffffffffffffffff8416825b602081101562000e4f578160011660010362000dd95786818151811062000d975762000d97620039eb565b60200260200101518360405160200162000dbb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000e2b565b8287828151811062000def5762000def620039eb565b602002602001015160405160200162000e12929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000e3860028362003a49565b91508062000e468162003a85565b91505062000d6c565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000f04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d4544000000000000000000000000000000000000000000000000000000606482015260840162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000f9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fc3919062003ac0565b60000362001054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000606482015260840162000683565b60425463ffffffff858116911614620010f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000606482015260840162000683565b60425463ffffffff166200126e578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620011da905b8b8b63ffffffff168a62000d5c565b62001268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b620013d8565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200134a905b8b8b63ffffffff168b62000d5c565b620013d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff8516908490620014469089908b90879060240162003ada565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f20000000000000000000000000000000000000000000000000000000017905251620014c9919062003b20565b60006040518083038185875af1925050503d806000811462001508576040519150601f19603f3d011682016040523d82523d6000602084013e6200150d565b606091505b50509050806200159f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c454400000000000000000000000000000000000000000000000000000000606482015260840162000683565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b63ffffffff891660009081526043602052604090205460ff161562001699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d45440000604482015260640162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001732573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001758919062003ac0565b600003620017e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d41544348000000000000000000000000000000000000606482015260840162000683565b60425463ffffffff85811691161462001885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d41544348000000000000000000000000000000606482015260840162000683565b60425463ffffffff16620019b4578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200194690620011cb565b620019ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b62001acf565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062001a67906200133b565b62001acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff851662001c40576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001b62919062003b20565b60006040518083038185875af1925050503d806000811462001ba1576040519150601f19603f3d011682016040523d82523d6000602084013e62001ba6565b606091505b505090508062001c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f4544000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b506200204b565b60425463ffffffff9081169087160362001c7d5762001c7773ffffffffffffffffffffffffffffffffffffffff8616848462002cde565b6200204b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001faa5760475460009062001d689073ffffffffffffffffffffffffffffffffffffffff168462002d36565b905060008060008680602001905181019062001d85919062003b3e565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001dce95949392919062003bbf565b600060405180830381600087803b15801562001de957600080fd5b505af115801562001dfe573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001f989392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062002048565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562002020573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020469190620037f1565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff1615808015620020e35750600054600160ff909116105b80620020ff5750303b158015620020ff575060005460ff166001145b6200218d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840162000683565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620021ec57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556040516200226a906200326c565b604051809103906000f08015801562002287573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055620022d762002e16565b80156200233b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620024019073ffffffffffffffffffffffffffffffffffffffff168262002f5e565b949350505050565b60425463ffffffff90811690841603620024a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c4600000000000000000000000000000000000000000000606482015260840162000683565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620024f39260019263ffffffff9092169133918991899134918a919062003972565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620025d69062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d620025fe62000c82565b6040518263ffffffff1660e01b81526004016200261d91815260200190565b600060405180830381600087803b1580156200263857600080fd5b505af11580156200264d573d6000803e3d6000fd5b50505050505050565b60006200269983838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002fe292505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf000000000000000000000000000000000000000000000000000000001462002748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000683565b60008080808080806200275f896004818d62003c1f565b8101906200276e919062003c4b565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462002839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000683565b73ffffffffffffffffffffffffffffffffffffffff86163014620028e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000683565b8a851462002971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d4154434800000000000000000000000000000000000000606482015260840162000683565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002a2c919062003b20565b6000604051808303816000865af19150503d806000811462002a6b576040519150601f19603f3d011682016040523d82523d6000602084013e62002a70565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905262002b5f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002fe9565b50505050565b80600162002b766020600262003ddf565b62002b82919062003ded565b6041541062002c14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c00000000000000000000000000000000000000000000606482015260840162000683565b60016041600082825462002c29919062003e07565b909155505060415460005b602081101562002cd3578160011660010362002c6957826001826020811062002c615762002c61620039eb565b015550505050565b6001816020811062002c7f5762002c7f620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002cbc919062003a49565b91508062002cca8162003a85565b91505062002c34565b506200233b62003e22565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526200233b9084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002adc565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000c7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640162000683565b600054610100900460ff1662002eaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000683565b60005b62002ec06001602062003ded565b81101562002f5b576021816020811062002ede5762002ede620039eb565b01546021826020811062002ef65762002ef6620039eb565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002f31919062003e07565b6020811062002f445762002f44620039eb565b01558062002f528162003a85565b91505062002eb2565b50565b600062002fdb8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b60006200304d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620030fc9092919063ffffffff16565b8051909150156200233b57808060200190518101906200306e9190620037f1565b6200233b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000683565b60606200240184846000858573ffffffffffffffffffffffffffffffffffffffff85163b62003188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000683565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620031b3919062003b20565b60006040518083038185875af1925050503d8060008114620031f2576040519150601f19603f3d011682016040523d82523d6000602084013e620031f7565b606091505b50915091506200320982828662003214565b979650505050505050565b606083156200322557508162002fdb565b825115620032365782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000683919062003e51565b6118298062003e6783390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462002f5b57600080fd5b8035620032aa816200327a565b919050565b803563ffffffff81168114620032aa57600080fd5b60008060008060008060a08789031215620032de57600080fd5b8635620032eb816200327a565b9550620032fb60208801620032af565b945060408701356200330d816200327a565b935060608701359250608087013567ffffffffffffffff808211156200333257600080fd5b818901915089601f8301126200334757600080fd5b8135818111156200335757600080fd5b8a60208285010111156200336a57600080fd5b6020830194508093505050509295509295509295565b600080604083850312156200339457600080fd5b6200339f83620032af565b91506020830135620033b1816200327a565b809150509250929050565b600060208284031215620033cf57600080fd5b813562002fdb816200327a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620034555762003455620033dc565b604052919050565b600082601f8301126200346f57600080fd5b8135602067ffffffffffffffff8211156200348e576200348e620033dc565b8160051b6200349f8282016200340b565b9283528481018201928281019087851115620034ba57600080fd5b83870192505b848310156200320957823582529183019190830190620034c0565b60008060008060808587031215620034f257600080fd5b84359350602085013567ffffffffffffffff808211156200351257600080fd5b62003520888389016200345d565b94506040870135915080821682146200353857600080fd5b509396929550929360600135925050565b60ff8116811462002f5b57600080fd5b600080600080600080600060e0888a0312156200357557600080fd5b8735620035828162003549565b96506200359260208901620032af565b95506040880135620035a4816200327a565b9450620035b460608901620032af565b93506080880135620035c6816200327a565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620036005762003600620033dc565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126200363e57600080fd5b8135620036556200364f82620035e3565b6200340b565b8181528460208386010111156200366b57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620036a957600080fd5b8a3567ffffffffffffffff80821115620036c257600080fd5b620036d08e838f016200345d565b9b50620036e060208e01620032af565b9a5060408d0135995060608d01359850620036fe60808e01620032af565b97506200370e60a08e016200329d565b96506200371e60c08e01620032af565b95506200372e60e08e016200329d565b94506101008d013593506101208d01359150808211156200374e57600080fd5b506200375d8d828e016200362c565b9150509295989b9194979a5092959850565b6000602082840312156200378257600080fd5b5035919050565b6000806000606084860312156200379f57600080fd5b620037aa84620032af565b92506020840135620037bc816200327a565b9150604084013567ffffffffffffffff811115620037d957600080fd5b620037e7868287016200362c565b9150509250925092565b6000602082840312156200380457600080fd5b8151801515811462002fdb57600080fd5b60005b838110156200383257818101518382015260200162003818565b8381111562002b5f5750506000910152565b600082601f8301126200385657600080fd5b8151620038676200364f82620035e3565b8181528460208386010111156200387d57600080fd5b6200240182602083016020870162003815565b600060208284031215620038a357600080fd5b815167ffffffffffffffff811115620038bb57600080fd5b620024018482850162003844565b600060208284031215620038dc57600080fd5b815162002fdb8162003549565b600081518084526200390381602086016020860162003815565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6060815260006200394a6060830186620038e9565b82810360208401526200395e8186620038e9565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620039d282850187620038e9565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003a80577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003ab95762003ab962003a1a565b5060010190565b60006020828403121562003ad357600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003b176060830184620038e9565b95945050505050565b6000825162003b3481846020870162003815565b9190910192915050565b60008060006060848603121562003b5457600080fd5b835167ffffffffffffffff8082111562003b6d57600080fd5b62003b7b8783880162003844565b9450602086015191508082111562003b9257600080fd5b5062003ba18682870162003844565b925050604084015162003bb48162003549565b809150509250925092565b60a08152600062003bd460a0830188620038e9565b828103602084015262003be88188620038e9565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000808585111562003c3057600080fd5b8386111562003c3e57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003c6757600080fd5b873562003c74816200327a565b9650602088013562003c86816200327a565b955060408801359450606088013593506080880135620035c68162003549565b600181815b8085111562003d0557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003ce95762003ce962003a1a565b8085161562003cf757918102915b93841c939080029062003cab565b509250929050565b60008262003d1e5750600162000c7c565b8162003d2d5750600062000c7c565b816001811462003d46576002811462003d515762003d71565b600191505062000c7c565b60ff84111562003d655762003d6562003a1a565b50506001821b62000c7c565b5060208310610133831016604e8410600b841016171562003d96575081810a62000c7c565b62003da2838362003ca6565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003dd75762003dd762003a1a565b029392505050565b600062002fdb838362003d0d565b60008282101562003e025762003e0262003a1a565b500390565b6000821982111562003e1d5762003e1d62003a1a565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60208152600062002fdb6020830184620038e956fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a2646970667358221220c5f6583c5a84970668cf41f829e248295552bc3e4c8681d6bb9937be1c0ef7a264736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506156c5806100206000396000f3fe6080604052600436106200017b5760003560e01c806381b1c17411620000cf578063d02103ca116200007d578063e73758811162000060578063e73758811462000589578063ed6be5c914620005bd578063ff634ed714620005d457600080fd5b8063d02103ca1462000543578063d96a15f7146200057257600080fd5b8063a08e8a0811620000b2578063a08e8a0814620004bf578063b7e6a7d414620004e9578063bab161bf146200050e57600080fd5b806381b1c17414620004535780638624c35c146200049a57600080fd5b80633ae05047116200012d5780633e19704311620001105780633e19704314620003155780634638554914620004095780637b6323c1146200042e57600080fd5b80633ae0504714620002c75780633da8168214620002df57600080fd5b80632dfdf0b511620001625780632dfdf0b514620001e85780632f3a3d5d146200020f578063318aee3d146200023e57600080fd5b80630871e971146200018057806322e95f2c1462000199575b600080fd5b6200019762000191366004620032c4565b620005eb565b005b348015620001a657600080fd5b50620001be620001b836600462003380565b62000bdf565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015620001f557600080fd5b506200020060415481565b604051908152602001620001df565b3480156200021c57600080fd5b50604754620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200024b57600080fd5b50620002956200025d366004620033bc565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201620001df565b348015620002d457600080fd5b506200020062000c82565b348015620002ec57600080fd5b5062000304620002fe366004620034db565b62000d5c565b6040519015158152602001620001df565b3480156200032257600080fd5b50620002006200033436600462003559565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200041657600080fd5b50620001976200042836600462003688565b62000e5c565b3480156200043b57600080fd5b50620001976200044d36600462003688565b62001617565b3480156200046057600080fd5b50620001be620004723660046200376f565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620004a757600080fd5b5062000197620004b936600462003380565b620020c2565b348015620004cc57600080fd5b50620004d6600081565b60405160ff9091168152602001620001df565b348015620004f657600080fd5b50620001be6200050836600462003380565b62002340565b3480156200051b57600080fd5b506042546200052d9063ffffffff1681565b60405163ffffffff9091168152602001620001df565b3480156200055057600080fd5b50604654620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b620001976200058336600462003789565b62002409565b3480156200059657600080fd5b5062000304620005a83660046200376f565b60436020526000908152604090205460ff1681565b348015620005ca57600080fd5b506200052d600081565b348015620005e157600080fd5b50620004d6600181565b60425463ffffffff908116908616036200068c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff891662000748578534146200073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c55450000000000000000000000000000000000606482015260840162000683565b6000915062000a5c565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000849576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562000810573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008369190620037f1565b5060208101518151909450925062000a5a565b84156200085e576200085e8a88888862002656565b6200088273ffffffffffffffffffffffffffffffffffffffff8b1633308a62002a81565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200092e919081019062003890565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200097a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620009c2919081019062003890565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a349190620038c9565b60405160200162000a489392919062003935565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760415460405162000a9e98979695949392919062003972565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000b599062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000b8162000c82565b6040518263ffffffff1660e01b815260040162000ba091815260200190565b600060405180830381600087803b15801562000bbb57600080fd5b505af115801562000bd0573d6000803e3d6000fd5b50505050505050505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6041546000908190815b602081101562000d54578160011660010362000cec576001816020811062000cb85762000cb8620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000d30565b826021826020811062000d035762000d03620039eb565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b62000d3d60028362003a49565b91508062000d4b8162003a85565b91505062000c8c565b509092915050565b60008467ffffffffffffffff8416825b602081101562000e4f578160011660010362000dd95786818151811062000d975762000d97620039eb565b60200260200101518360405160200162000dbb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000e2b565b8287828151811062000def5762000def620039eb565b602002602001015160405160200162000e12929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000e3860028362003a49565b91508062000e468162003a85565b91505062000d6c565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000f04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d4544000000000000000000000000000000000000000000000000000000606482015260840162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000f9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fc3919062003ac0565b60000362001054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000606482015260840162000683565b60425463ffffffff858116911614620010f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000606482015260840162000683565b60425463ffffffff166200126e578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620011da905b8b8b63ffffffff168a62000d5c565b62001268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b620013d8565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200134a905b8b8b63ffffffff168b62000d5c565b620013d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff8516908490620014469089908b90879060240162003ada565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f20000000000000000000000000000000000000000000000000000000017905251620014c9919062003b20565b60006040518083038185875af1925050503d806000811462001508576040519150601f19603f3d011682016040523d82523d6000602084013e6200150d565b606091505b50509050806200159f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c454400000000000000000000000000000000000000000000000000000000606482015260840162000683565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b63ffffffff891660009081526043602052604090205460ff161562001699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d45440000604482015260640162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001732573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001758919062003ac0565b600003620017e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d41544348000000000000000000000000000000000000606482015260840162000683565b60425463ffffffff85811691161462001885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d41544348000000000000000000000000000000606482015260840162000683565b60425463ffffffff16620019b4578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200194690620011cb565b620019ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b62001acf565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062001a67906200133b565b62001acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff851662001c40576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001b62919062003b20565b60006040518083038185875af1925050503d806000811462001ba1576040519150601f19603f3d011682016040523d82523d6000602084013e62001ba6565b606091505b505090508062001c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f4544000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b506200204b565b60425463ffffffff9081169087160362001c7d5762001c7773ffffffffffffffffffffffffffffffffffffffff8616848462002cde565b6200204b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001faa5760475460009062001d689073ffffffffffffffffffffffffffffffffffffffff168462002d36565b905060008060008680602001905181019062001d85919062003b3e565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001dce95949392919062003bbf565b600060405180830381600087803b15801562001de957600080fd5b505af115801562001dfe573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001f989392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062002048565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562002020573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020469190620037f1565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff1615808015620020e35750600054600160ff909116105b80620020ff5750303b158015620020ff575060005460ff166001145b6200218d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840162000683565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620021ec57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556040516200226a906200326c565b604051809103906000f08015801562002287573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055620022d762002e16565b80156200233b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620024019073ffffffffffffffffffffffffffffffffffffffff168262002f5e565b949350505050565b60425463ffffffff90811690841603620024a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c4600000000000000000000000000000000000000000000606482015260840162000683565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620024f39260019263ffffffff9092169133918991899134918a919062003972565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620025d69062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d620025fe62000c82565b6040518263ffffffff1660e01b81526004016200261d91815260200190565b600060405180830381600087803b1580156200263857600080fd5b505af11580156200264d573d6000803e3d6000fd5b50505050505050565b60006200269983838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002fe292505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf000000000000000000000000000000000000000000000000000000001462002748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000683565b60008080808080806200275f896004818d62003c1f565b8101906200276e919062003c4b565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462002839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000683565b73ffffffffffffffffffffffffffffffffffffffff86163014620028e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000683565b8a851462002971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d4154434800000000000000000000000000000000000000606482015260840162000683565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002a2c919062003b20565b6000604051808303816000865af19150503d806000811462002a6b576040519150601f19603f3d011682016040523d82523d6000602084013e62002a70565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905262002b5f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002fe9565b50505050565b80600162002b766020600262003ddf565b62002b82919062003ded565b6041541062002c14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c00000000000000000000000000000000000000000000606482015260840162000683565b60016041600082825462002c29919062003e07565b909155505060415460005b602081101562002cd3578160011660010362002c6957826001826020811062002c615762002c61620039eb565b015550505050565b6001816020811062002c7f5762002c7f620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002cbc919062003a49565b91508062002cca8162003a85565b91505062002c34565b506200233b62003e22565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526200233b9084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002adc565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000c7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640162000683565b600054610100900460ff1662002eaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000683565b60005b62002ec06001602062003ded565b81101562002f5b576021816020811062002ede5762002ede620039eb565b01546021826020811062002ef65762002ef6620039eb565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002f31919062003e07565b6020811062002f445762002f44620039eb565b01558062002f528162003a85565b91505062002eb2565b50565b600062002fdb8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b60006200304d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620030fc9092919063ffffffff16565b8051909150156200233b57808060200190518101906200306e9190620037f1565b6200233b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000683565b60606200240184846000858573ffffffffffffffffffffffffffffffffffffffff85163b62003188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000683565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620031b3919062003b20565b60006040518083038185875af1925050503d8060008114620031f2576040519150601f19603f3d011682016040523d82523d6000602084013e620031f7565b606091505b50915091506200320982828662003214565b979650505050505050565b606083156200322557508162002fdb565b825115620032365782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000683919062003e51565b6118298062003e6783390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462002f5b57600080fd5b8035620032aa816200327a565b919050565b803563ffffffff81168114620032aa57600080fd5b60008060008060008060a08789031215620032de57600080fd5b8635620032eb816200327a565b9550620032fb60208801620032af565b945060408701356200330d816200327a565b935060608701359250608087013567ffffffffffffffff808211156200333257600080fd5b818901915089601f8301126200334757600080fd5b8135818111156200335757600080fd5b8a60208285010111156200336a57600080fd5b6020830194508093505050509295509295509295565b600080604083850312156200339457600080fd5b6200339f83620032af565b91506020830135620033b1816200327a565b809150509250929050565b600060208284031215620033cf57600080fd5b813562002fdb816200327a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620034555762003455620033dc565b604052919050565b600082601f8301126200346f57600080fd5b8135602067ffffffffffffffff8211156200348e576200348e620033dc565b8160051b6200349f8282016200340b565b9283528481018201928281019087851115620034ba57600080fd5b83870192505b848310156200320957823582529183019190830190620034c0565b60008060008060808587031215620034f257600080fd5b84359350602085013567ffffffffffffffff808211156200351257600080fd5b62003520888389016200345d565b94506040870135915080821682146200353857600080fd5b509396929550929360600135925050565b60ff8116811462002f5b57600080fd5b600080600080600080600060e0888a0312156200357557600080fd5b8735620035828162003549565b96506200359260208901620032af565b95506040880135620035a4816200327a565b9450620035b460608901620032af565b93506080880135620035c6816200327a565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620036005762003600620033dc565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126200363e57600080fd5b8135620036556200364f82620035e3565b6200340b565b8181528460208386010111156200366b57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620036a957600080fd5b8a3567ffffffffffffffff80821115620036c257600080fd5b620036d08e838f016200345d565b9b50620036e060208e01620032af565b9a5060408d0135995060608d01359850620036fe60808e01620032af565b97506200370e60a08e016200329d565b96506200371e60c08e01620032af565b95506200372e60e08e016200329d565b94506101008d013593506101208d01359150808211156200374e57600080fd5b506200375d8d828e016200362c565b9150509295989b9194979a5092959850565b6000602082840312156200378257600080fd5b5035919050565b6000806000606084860312156200379f57600080fd5b620037aa84620032af565b92506020840135620037bc816200327a565b9150604084013567ffffffffffffffff811115620037d957600080fd5b620037e7868287016200362c565b9150509250925092565b6000602082840312156200380457600080fd5b8151801515811462002fdb57600080fd5b60005b838110156200383257818101518382015260200162003818565b8381111562002b5f5750506000910152565b600082601f8301126200385657600080fd5b8151620038676200364f82620035e3565b8181528460208386010111156200387d57600080fd5b6200240182602083016020870162003815565b600060208284031215620038a357600080fd5b815167ffffffffffffffff811115620038bb57600080fd5b620024018482850162003844565b600060208284031215620038dc57600080fd5b815162002fdb8162003549565b600081518084526200390381602086016020860162003815565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6060815260006200394a6060830186620038e9565b82810360208401526200395e8186620038e9565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620039d282850187620038e9565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003a80577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003ab95762003ab962003a1a565b5060010190565b60006020828403121562003ad357600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003b176060830184620038e9565b95945050505050565b6000825162003b3481846020870162003815565b9190910192915050565b60008060006060848603121562003b5457600080fd5b835167ffffffffffffffff8082111562003b6d57600080fd5b62003b7b8783880162003844565b9450602086015191508082111562003b9257600080fd5b5062003ba18682870162003844565b925050604084015162003bb48162003549565b809150509250925092565b60a08152600062003bd460a0830188620038e9565b828103602084015262003be88188620038e9565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000808585111562003c3057600080fd5b8386111562003c3e57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003c6757600080fd5b873562003c74816200327a565b9650602088013562003c86816200327a565b955060408801359450606088013593506080880135620035c68162003549565b600181815b8085111562003d0557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003ce95762003ce962003a1a565b8085161562003cf757918102915b93841c939080029062003cab565b509250929050565b60008262003d1e5750600162000c7c565b8162003d2d5750600062000c7c565b816001811462003d46576002811462003d515762003d71565b600191505062000c7c565b60ff84111562003d655762003d6562003a1a565b50506001821b62000c7c565b5060208310610133831016604e8410600b841016171562003d96575081810a62000c7c565b62003da2838362003ca6565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003dd75762003dd762003a1a565b029392505050565b600062002fdb838362003d0d565b60008282101562003e025762003e0262003a1a565b500390565b6000821982111562003e1d5762003e1d62003a1a565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60208152600062002fdb6020830184620038e956fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a26469706673582212200f33d24b40d1e879f02496512d8e703a09704c5edf7d149259a9c3cf2b64250664736f6c634300080f0033", + "deployedBytecode": "0x6080604052600436106200017b5760003560e01c806381b1c17411620000cf578063d02103ca116200007d578063e73758811162000060578063e73758811462000589578063ed6be5c914620005bd578063ff634ed714620005d457600080fd5b8063d02103ca1462000543578063d96a15f7146200057257600080fd5b8063a08e8a0811620000b2578063a08e8a0814620004bf578063b7e6a7d414620004e9578063bab161bf146200050e57600080fd5b806381b1c17414620004535780638624c35c146200049a57600080fd5b80633ae05047116200012d5780633e19704311620001105780633e19704314620003155780634638554914620004095780637b6323c1146200042e57600080fd5b80633ae0504714620002c75780633da8168214620002df57600080fd5b80632dfdf0b511620001625780632dfdf0b514620001e85780632f3a3d5d146200020f578063318aee3d146200023e57600080fd5b80630871e971146200018057806322e95f2c1462000199575b600080fd5b6200019762000191366004620032c4565b620005eb565b005b348015620001a657600080fd5b50620001be620001b836600462003380565b62000bdf565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015620001f557600080fd5b506200020060415481565b604051908152602001620001df565b3480156200021c57600080fd5b50604754620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200024b57600080fd5b50620002956200025d366004620033bc565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201620001df565b348015620002d457600080fd5b506200020062000c82565b348015620002ec57600080fd5b5062000304620002fe366004620034db565b62000d5c565b6040519015158152602001620001df565b3480156200032257600080fd5b50620002006200033436600462003559565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200041657600080fd5b50620001976200042836600462003688565b62000e5c565b3480156200043b57600080fd5b50620001976200044d36600462003688565b62001617565b3480156200046057600080fd5b50620001be620004723660046200376f565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620004a757600080fd5b5062000197620004b936600462003380565b620020c2565b348015620004cc57600080fd5b50620004d6600081565b60405160ff9091168152602001620001df565b348015620004f657600080fd5b50620001be6200050836600462003380565b62002340565b3480156200051b57600080fd5b506042546200052d9063ffffffff1681565b60405163ffffffff9091168152602001620001df565b3480156200055057600080fd5b50604654620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b620001976200058336600462003789565b62002409565b3480156200059657600080fd5b5062000304620005a83660046200376f565b60436020526000908152604090205460ff1681565b348015620005ca57600080fd5b506200052d600081565b348015620005e157600080fd5b50620004d6600181565b60425463ffffffff908116908616036200068c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff891662000748578534146200073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c55450000000000000000000000000000000000606482015260840162000683565b6000915062000a5c565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000849576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562000810573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008369190620037f1565b5060208101518151909450925062000a5a565b84156200085e576200085e8a88888862002656565b6200088273ffffffffffffffffffffffffffffffffffffffff8b1633308a62002a81565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200092e919081019062003890565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200097a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620009c2919081019062003890565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a349190620038c9565b60405160200162000a489392919062003935565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760415460405162000a9e98979695949392919062003972565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000b599062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000b8162000c82565b6040518263ffffffff1660e01b815260040162000ba091815260200190565b600060405180830381600087803b15801562000bbb57600080fd5b505af115801562000bd0573d6000803e3d6000fd5b50505050505050505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6041546000908190815b602081101562000d54578160011660010362000cec576001816020811062000cb85762000cb8620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000d30565b826021826020811062000d035762000d03620039eb565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b62000d3d60028362003a49565b91508062000d4b8162003a85565b91505062000c8c565b509092915050565b60008467ffffffffffffffff8416825b602081101562000e4f578160011660010362000dd95786818151811062000d975762000d97620039eb565b60200260200101518360405160200162000dbb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000e2b565b8287828151811062000def5762000def620039eb565b602002602001015160405160200162000e12929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000e3860028362003a49565b91508062000e468162003a85565b91505062000d6c565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000f04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d4544000000000000000000000000000000000000000000000000000000606482015260840162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000f9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fc3919062003ac0565b60000362001054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000606482015260840162000683565b60425463ffffffff858116911614620010f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000606482015260840162000683565b60425463ffffffff166200126e578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620011da905b8b8b63ffffffff168a62000d5c565b62001268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b620013d8565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200134a905b8b8b63ffffffff168b62000d5c565b620013d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff8516908490620014469089908b90879060240162003ada565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f20000000000000000000000000000000000000000000000000000000017905251620014c9919062003b20565b60006040518083038185875af1925050503d806000811462001508576040519150601f19603f3d011682016040523d82523d6000602084013e6200150d565b606091505b50509050806200159f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c454400000000000000000000000000000000000000000000000000000000606482015260840162000683565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b63ffffffff891660009081526043602052604090205460ff161562001699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d45440000604482015260640162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001732573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001758919062003ac0565b600003620017e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d41544348000000000000000000000000000000000000606482015260840162000683565b60425463ffffffff85811691161462001885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d41544348000000000000000000000000000000606482015260840162000683565b60425463ffffffff16620019b4578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200194690620011cb565b620019ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b62001acf565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062001a67906200133b565b62001acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff851662001c40576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001b62919062003b20565b60006040518083038185875af1925050503d806000811462001ba1576040519150601f19603f3d011682016040523d82523d6000602084013e62001ba6565b606091505b505090508062001c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f4544000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b506200204b565b60425463ffffffff9081169087160362001c7d5762001c7773ffffffffffffffffffffffffffffffffffffffff8616848462002cde565b6200204b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001faa5760475460009062001d689073ffffffffffffffffffffffffffffffffffffffff168462002d36565b905060008060008680602001905181019062001d85919062003b3e565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001dce95949392919062003bbf565b600060405180830381600087803b15801562001de957600080fd5b505af115801562001dfe573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001f989392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062002048565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562002020573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020469190620037f1565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff1615808015620020e35750600054600160ff909116105b80620020ff5750303b158015620020ff575060005460ff166001145b6200218d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840162000683565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620021ec57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556040516200226a906200326c565b604051809103906000f08015801562002287573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055620022d762002e16565b80156200233b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620024019073ffffffffffffffffffffffffffffffffffffffff168262002f5e565b949350505050565b60425463ffffffff90811690841603620024a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c4600000000000000000000000000000000000000000000606482015260840162000683565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620024f39260019263ffffffff9092169133918991899134918a919062003972565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620025d69062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d620025fe62000c82565b6040518263ffffffff1660e01b81526004016200261d91815260200190565b600060405180830381600087803b1580156200263857600080fd5b505af11580156200264d573d6000803e3d6000fd5b50505050505050565b60006200269983838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002fe292505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf000000000000000000000000000000000000000000000000000000001462002748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000683565b60008080808080806200275f896004818d62003c1f565b8101906200276e919062003c4b565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462002839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000683565b73ffffffffffffffffffffffffffffffffffffffff86163014620028e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000683565b8a851462002971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d4154434800000000000000000000000000000000000000606482015260840162000683565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002a2c919062003b20565b6000604051808303816000865af19150503d806000811462002a6b576040519150601f19603f3d011682016040523d82523d6000602084013e62002a70565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905262002b5f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002fe9565b50505050565b80600162002b766020600262003ddf565b62002b82919062003ded565b6041541062002c14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c00000000000000000000000000000000000000000000606482015260840162000683565b60016041600082825462002c29919062003e07565b909155505060415460005b602081101562002cd3578160011660010362002c6957826001826020811062002c615762002c61620039eb565b015550505050565b6001816020811062002c7f5762002c7f620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002cbc919062003a49565b91508062002cca8162003a85565b91505062002c34565b506200233b62003e22565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526200233b9084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002adc565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000c7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640162000683565b600054610100900460ff1662002eaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000683565b60005b62002ec06001602062003ded565b81101562002f5b576021816020811062002ede5762002ede620039eb565b01546021826020811062002ef65762002ef6620039eb565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002f31919062003e07565b6020811062002f445762002f44620039eb565b01558062002f528162003a85565b91505062002eb2565b50565b600062002fdb8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b60006200304d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620030fc9092919063ffffffff16565b8051909150156200233b57808060200190518101906200306e9190620037f1565b6200233b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000683565b60606200240184846000858573ffffffffffffffffffffffffffffffffffffffff85163b62003188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000683565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620031b3919062003b20565b60006040518083038185875af1925050503d8060008114620031f2576040519150601f19603f3d011682016040523d82523d6000602084013e620031f7565b606091505b50915091506200320982828662003214565b979650505050505050565b606083156200322557508162002fdb565b825115620032365782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000683919062003e51565b6118298062003e6783390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462002f5b57600080fd5b8035620032aa816200327a565b919050565b803563ffffffff81168114620032aa57600080fd5b60008060008060008060a08789031215620032de57600080fd5b8635620032eb816200327a565b9550620032fb60208801620032af565b945060408701356200330d816200327a565b935060608701359250608087013567ffffffffffffffff808211156200333257600080fd5b818901915089601f8301126200334757600080fd5b8135818111156200335757600080fd5b8a60208285010111156200336a57600080fd5b6020830194508093505050509295509295509295565b600080604083850312156200339457600080fd5b6200339f83620032af565b91506020830135620033b1816200327a565b809150509250929050565b600060208284031215620033cf57600080fd5b813562002fdb816200327a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620034555762003455620033dc565b604052919050565b600082601f8301126200346f57600080fd5b8135602067ffffffffffffffff8211156200348e576200348e620033dc565b8160051b6200349f8282016200340b565b9283528481018201928281019087851115620034ba57600080fd5b83870192505b848310156200320957823582529183019190830190620034c0565b60008060008060808587031215620034f257600080fd5b84359350602085013567ffffffffffffffff808211156200351257600080fd5b62003520888389016200345d565b94506040870135915080821682146200353857600080fd5b509396929550929360600135925050565b60ff8116811462002f5b57600080fd5b600080600080600080600060e0888a0312156200357557600080fd5b8735620035828162003549565b96506200359260208901620032af565b95506040880135620035a4816200327a565b9450620035b460608901620032af565b93506080880135620035c6816200327a565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620036005762003600620033dc565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126200363e57600080fd5b8135620036556200364f82620035e3565b6200340b565b8181528460208386010111156200366b57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620036a957600080fd5b8a3567ffffffffffffffff80821115620036c257600080fd5b620036d08e838f016200345d565b9b50620036e060208e01620032af565b9a5060408d0135995060608d01359850620036fe60808e01620032af565b97506200370e60a08e016200329d565b96506200371e60c08e01620032af565b95506200372e60e08e016200329d565b94506101008d013593506101208d01359150808211156200374e57600080fd5b506200375d8d828e016200362c565b9150509295989b9194979a5092959850565b6000602082840312156200378257600080fd5b5035919050565b6000806000606084860312156200379f57600080fd5b620037aa84620032af565b92506020840135620037bc816200327a565b9150604084013567ffffffffffffffff811115620037d957600080fd5b620037e7868287016200362c565b9150509250925092565b6000602082840312156200380457600080fd5b8151801515811462002fdb57600080fd5b60005b838110156200383257818101518382015260200162003818565b8381111562002b5f5750506000910152565b600082601f8301126200385657600080fd5b8151620038676200364f82620035e3565b8181528460208386010111156200387d57600080fd5b6200240182602083016020870162003815565b600060208284031215620038a357600080fd5b815167ffffffffffffffff811115620038bb57600080fd5b620024018482850162003844565b600060208284031215620038dc57600080fd5b815162002fdb8162003549565b600081518084526200390381602086016020860162003815565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6060815260006200394a6060830186620038e9565b82810360208401526200395e8186620038e9565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620039d282850187620038e9565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003a80577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003ab95762003ab962003a1a565b5060010190565b60006020828403121562003ad357600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003b176060830184620038e9565b95945050505050565b6000825162003b3481846020870162003815565b9190910192915050565b60008060006060848603121562003b5457600080fd5b835167ffffffffffffffff8082111562003b6d57600080fd5b62003b7b8783880162003844565b9450602086015191508082111562003b9257600080fd5b5062003ba18682870162003844565b925050604084015162003bb48162003549565b809150509250925092565b60a08152600062003bd460a0830188620038e9565b828103602084015262003be88188620038e9565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000808585111562003c3057600080fd5b8386111562003c3e57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003c6757600080fd5b873562003c74816200327a565b9650602088013562003c86816200327a565b955060408801359450606088013593506080880135620035c68162003549565b600181815b8085111562003d0557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003ce95762003ce962003a1a565b8085161562003cf757918102915b93841c939080029062003cab565b509250929050565b60008262003d1e5750600162000c7c565b8162003d2d5750600062000c7c565b816001811462003d46576002811462003d515762003d71565b600191505062000c7c565b60ff84111562003d655762003d6562003a1a565b50506001821b62000c7c565b5060208310610133831016604e8410600b841016171562003d96575081810a62000c7c565b62003da2838362003ca6565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003dd75762003dd762003a1a565b029392505050565b600062002fdb838362003d0d565b60008282101562003e025762003e0262003a1a565b500390565b6000821982111562003e1d5762003e1d62003a1a565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60208152600062002fdb6020830184620038e956fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a26469706673582212200f33d24b40d1e879f02496512d8e703a09704c5edf7d149259a9c3cf2b64250664736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/BridgeMock.json b/compiled-contracts/BridgeMock.json index 797dd9933..79c5e8dfd 100644 --- a/compiled-contracts/BridgeMock.json +++ b/compiled-contracts/BridgeMock.json @@ -712,8 +712,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50615c42806100206000396000f3fe608060405260043610620001c35760003560e01c806381b1c17411620000f3578063bab161bf1162000095578063e7375881116200006c578063e73758811462000678578063ed6be5c914620006ac578063f2fde38b14620006c3578063ff634ed714620006e857600080fd5b8063bab161bf14620005fd578063d02103ca1462000632578063d96a15f7146200066157600080fd5b806391e57e2d11620000ca57806391e57e2d1462000596578063a08e8a0814620005ae578063b7e6a7d414620005d857600080fd5b806381b1c17414620004fd5780638624c35c14620005445780638da5cb5b146200056957600080fd5b8063318aee3d11620001695780633e19704311620001405780633e19704314620003a757806346385549146200049b578063715018a614620004c05780637b6323c114620004d857600080fd5b8063318aee3d14620002d05780633ae0504714620003595780633da81682146200037157600080fd5b80632c3f58cd116200019e5780632c3f58cd14620002555780632dfdf0b5146200027a5780632f3a3d5d14620002a157600080fd5b80630871e97114620001c857806322e95f2c14620001e15780632b5e42e71462000230575b600080fd5b620001df620001d936600462003823565b620006ff565b005b348015620001ee57600080fd5b506200020662000200366004620038df565b620007d5565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200023d57600080fd5b50620001df6200024f3660046200391b565b62000878565b3480156200026257600080fd5b50620001df6200027436600462003935565b62000887565b3480156200028757600080fd5b506200029260415481565b60405190815260200162000227565b348015620002ae57600080fd5b50604754620002069073ffffffffffffffffffffffffffffffffffffffff1681565b348015620002dd57600080fd5b5062000327620002ef36600462003953565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000227565b3480156200036657600080fd5b5062000292620008c8565b3480156200037e57600080fd5b50620003966200039036600462003a72565b620009a2565b604051901515815260200162000227565b348015620003b457600080fd5b5062000292620003c636600462003af0565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004a857600080fd5b50620001df620004ba36600462003c1f565b62000aa2565b348015620004cd57600080fd5b50620001df6200125d565b348015620004e557600080fd5b50620001df620004f736600462003c1f565b62001275565b3480156200050a57600080fd5b50620002066200051c3660046200391b565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200055157600080fd5b50620001df62000563366004620038df565b62001d20565b3480156200057657600080fd5b50607a5473ffffffffffffffffffffffffffffffffffffffff1662000206565b348015620005a357600080fd5b506200029260ac5481565b348015620005bb57600080fd5b50620005c5600081565b60405160ff909116815260200162000227565b348015620005e557600080fd5b5062000206620005f7366004620038df565b62001fb4565b3480156200060a57600080fd5b506042546200061c9063ffffffff1681565b60405163ffffffff909116815260200162000227565b3480156200063f57600080fd5b50604654620002069073ffffffffffffffffffffffffffffffffffffffff1681565b620001df6200067236600462003d06565b6200207d565b3480156200068557600080fd5b5062000396620006973660046200391b565b60436020526000908152604090205460ff1681565b348015620006b957600080fd5b506200061c600081565b348015620006d057600080fd5b50620001df620006e236600462003953565b620022ca565b348015620006f557600080fd5b50620005c5600181565b60ac54341115620007bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b620007cd86868686868662002387565b505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6200088262002977565b60ac55565b6200089162002977565b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b6041546000908190815b60208110156200099a5781600116600103620009325760018160208110620008fe57620008fe62003d6e565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000976565b826021826020811062000949576200094962003d6e565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b6200098360028362003dcc565b915080620009918162003e08565b915050620008d2565b509092915050565b60008467ffffffffffffffff8416825b602081101562000a95578160011660010362000a1f57868181518110620009dd57620009dd62003d6e565b60200260200101518360405160200162000a01929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000a71565b8287828151811062000a355762000a3562003d6e565b602002602001015160405160200162000a58929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000a7e60028362003dcc565b91508062000a8c8162003e08565b915050620009b2565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000b4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d45440000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000be3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c09919062003e43565b60000362000c9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d4154434800000000000000000000006064820152608401620007b4565b60425463ffffffff85811691161462000d36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000006064820152608401620007b4565b60425463ffffffff1662000eb4578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062000e20905b8b8b63ffffffff168a620009a2565b62000eae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6200101e565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062000f90905b8b8b63ffffffff168b620009a2565b6200101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff85169084906200108c9089908b90879060240162003ed8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f200000000000000000000000000000000000000000000000000000000179052516200110f919062003f1e565b60006040518083038185875af1925050503d80600081146200114e576040519150601f19603f3d011682016040523d82523d6000602084013e62001153565b606091505b5050905080620011e5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b6200126762002977565b620012736000620029fa565b565b63ffffffff891660009081526043602052604090205460ff1615620012f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d454400006044820152606401620007b4565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001390573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013b6919062003e43565b60000362001447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d415443480000000000000000000000000000000000006064820152608401620007b4565b60425463ffffffff858116911614620014e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d415443480000000000000000000000000000006064820152608401620007b4565b60425463ffffffff1662001612578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620015a49062000e11565b6200160c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007b4565b6200172d565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620016c59062000f81565b6200172d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007b4565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff85166200189e576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff8516908490604051620017c0919062003f1e565b60006040518083038185875af1925050503d8060008114620017ff576040519150601f19603f3d011682016040523d82523d6000602084013e62001804565b606091505b505090508062001897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f45440000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b5062001ca9565b60425463ffffffff90811690871603620018db57620018d573ffffffffffffffffffffffffffffffffffffffff8616848462002a71565b62001ca9565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001c0857604754600090620019c69073ffffffffffffffffffffffffffffffffffffffff168462002b47565b9050600080600086806020019051810190620019e3919062003f88565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001a2c95949392919062004009565b600060405180830381600087803b15801562001a4757600080fd5b505af115801562001a5c573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001bf69392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062001ca6565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001c7e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ca4919062004069565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff161580801562001d415750600054600160ff909116105b8062001d5d5750303b15801562001d5d575060005460ff166001145b62001deb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007b4565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801562001e4a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841617905560405162001ec890620037cb565b604051809103906000f08015801562001ee5573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905562001f3562002c27565b62001f3f62002d6c565b6703782dace9d9000060ac55801562001faf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620020759073ffffffffffffffffffffffffffffffffffffffff168262002e0f565b949350505050565b60425463ffffffff908116908416036200211a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007b4565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620021679260019263ffffffff9092169133918991899134918a91906200408d565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200224a9062002e93565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62002272620008c8565b6040518263ffffffff1660e01b81526004016200229191815260200190565b600060405180830381600087803b158015620022ac57600080fd5b505af1158015620022c1573d6000803e3d6000fd5b50505050505050565b620022d462002977565b73ffffffffffffffffffffffffffffffffffffffff811662002379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007b4565b6200238481620029fa565b50565b60425463ffffffff9081169086160362002424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007b4565b600080606073ffffffffffffffffffffffffffffffffffffffff8916620024e057853414620024d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007b4565b60009150620027f4565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620025e1576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af1158015620025a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620025ce919062004069565b50602081015181519094509250620027f2565b8415620025f657620025f68a8888886200300c565b6200261a73ffffffffffffffffffffffffffffffffffffffff8b1633308a62003437565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200267e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620026c6919081019062004106565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562002712573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200275a919081019062004106565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620027a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620027cc91906200413f565b604051602001620027e0939291906200415f565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b87604154604051620028369897969594939291906200408d565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620028f19062002e93565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62002919620008c8565b6040518263ffffffff1660e01b81526004016200293891815260200190565b600060405180830381600087803b1580156200295357600080fd5b505af115801562002968573d6000803e3d6000fd5b50505050505050505050505050565b607a5473ffffffffffffffffffffffffffffffffffffffff16331462001273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007b4565b607a805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262001faf9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526200349d565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401620007b4565b600054610100900460ff1662002cc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b60005b62002cd1600160206200419c565b81101562002384576021816020811062002cef5762002cef62003d6e565b01546021826020811062002d075762002d0762003d6e565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002d429190620041b6565b6020811062002d555762002d5562003d6e565b01558062002d638162003e08565b91505062002cc3565b600054610100900460ff1662002e05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b62001273620035b0565b600062002e8c8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b80600162002ea4602060026200430a565b62002eb091906200419c565b6041541062002f42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007b4565b60016041600082825462002f579190620041b6565b909155505060415460005b602081101562003001578160011660010362002f9757826001826020811062002f8f5762002f8f62003d6e565b015550505050565b6001816020811062002fad5762002fad62003d6e565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002fea919062003dcc565b91508062002ff88162003e08565b91505062002f62565b5062001faf62004318565b60006200304f83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200365492505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf0000000000000000000000000000000000000000000000000000000014620030fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007b4565b600080808080808062003115896004818d62004347565b81019062003124919062004373565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614620031ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007b4565b73ffffffffffffffffffffffffffffffffffffffff8616301462003296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007b4565b8a851462003327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007b4565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e1691620033e2919062003f1e565b6000604051808303816000865af19150503d806000811462003421576040519150601f19603f3d011682016040523d82523d6000602084013e62003426565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052620034979085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002ac4565b50505050565b600062003501826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166200365b9092919063ffffffff16565b80519091501562001faf578080602001905181019062003522919062004069565b62001faf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007b4565b600054610100900460ff1662003649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b6200127333620029fa565b6020015190565b60606200207584846000858573ffffffffffffffffffffffffffffffffffffffff85163b620036e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007b4565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405162003712919062003f1e565b60006040518083038185875af1925050503d806000811462003751576040519150601f19603f3d011682016040523d82523d6000602084013e62003756565b606091505b50915091506200376882828662003773565b979650505050505050565b606083156200378457508162002e8c565b825115620037955782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007b49190620043ce565b61182980620043e483390190565b73ffffffffffffffffffffffffffffffffffffffff811681146200238457600080fd5b80356200380981620037d9565b919050565b803563ffffffff811681146200380957600080fd5b60008060008060008060a087890312156200383d57600080fd5b86356200384a81620037d9565b95506200385a602088016200380e565b945060408701356200386c81620037d9565b935060608701359250608087013567ffffffffffffffff808211156200389157600080fd5b818901915089601f830112620038a657600080fd5b813581811115620038b657600080fd5b8a6020828501011115620038c957600080fd5b6020830194508093505050509295509295509295565b60008060408385031215620038f357600080fd5b620038fe836200380e565b915060208301356200391081620037d9565b809150509250929050565b6000602082840312156200392e57600080fd5b5035919050565b6000602082840312156200394857600080fd5b62002e8c826200380e565b6000602082840312156200396657600080fd5b813562002e8c81620037d9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620039ec57620039ec62003973565b604052919050565b600082601f83011262003a0657600080fd5b8135602067ffffffffffffffff82111562003a255762003a2562003973565b8160051b62003a36828201620039a2565b928352848101820192828101908785111562003a5157600080fd5b83870192505b84831015620037685782358252918301919083019062003a57565b6000806000806080858703121562003a8957600080fd5b84359350602085013567ffffffffffffffff8082111562003aa957600080fd5b62003ab788838901620039f4565b945060408701359150808216821462003acf57600080fd5b509396929550929360600135925050565b60ff811681146200238457600080fd5b600080600080600080600060e0888a03121562003b0c57600080fd5b873562003b198162003ae0565b965062003b29602089016200380e565b9550604088013562003b3b81620037d9565b945062003b4b606089016200380e565b9350608088013562003b5d81620037d9565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562003b975762003b9762003973565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011262003bd557600080fd5b813562003bec62003be68262003b7a565b620039a2565b81815284602083860101111562003c0257600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562003c4057600080fd5b8a3567ffffffffffffffff8082111562003c5957600080fd5b62003c678e838f01620039f4565b9b5062003c7760208e016200380e565b9a5060408d0135995060608d0135985062003c9560808e016200380e565b975062003ca560a08e01620037fc565b965062003cb560c08e016200380e565b955062003cc560e08e01620037fc565b94506101008d013593506101208d013591508082111562003ce557600080fd5b5062003cf48d828e0162003bc3565b9150509295989b9194979a5092959850565b60008060006060848603121562003d1c57600080fd5b62003d27846200380e565b9250602084013562003d3981620037d9565b9150604084013567ffffffffffffffff81111562003d5657600080fd5b62003d648682870162003bc3565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003e03577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003e3c5762003e3c62003d9d565b5060010190565b60006020828403121562003e5657600080fd5b5051919050565b60005b8381101562003e7a57818101518382015260200162003e60565b83811115620034975750506000910152565b6000815180845262003ea681602086016020860162003e5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003f15606083018462003e8c565b95945050505050565b6000825162003f3281846020870162003e5d565b9190910192915050565b600082601f83011262003f4e57600080fd5b815162003f5f62003be68262003b7a565b81815284602083860101111562003f7557600080fd5b6200207582602083016020870162003e5d565b60008060006060848603121562003f9e57600080fd5b835167ffffffffffffffff8082111562003fb757600080fd5b62003fc58783880162003f3c565b9450602086015191508082111562003fdc57600080fd5b5062003feb8682870162003f3c565b925050604084015162003ffe8162003ae0565b809150509250925092565b60a0815260006200401e60a083018862003e8c565b828103602084015262004032818862003e8c565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000602082840312156200407c57600080fd5b8151801515811462002e8c57600080fd5b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620040ed8285018762003e8c565b925080851660e085015250509998505050505050505050565b6000602082840312156200411957600080fd5b815167ffffffffffffffff8111156200413157600080fd5b620020758482850162003f3c565b6000602082840312156200415257600080fd5b815162002e8c8162003ae0565b60608152600062004174606083018662003e8c565b828103602084015262004188818662003e8c565b91505060ff83166040830152949350505050565b600082821015620041b157620041b162003d9d565b500390565b60008219821115620041cc57620041cc62003d9d565b500190565b600181815b808511156200423057817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562004214576200421462003d9d565b808516156200422257918102915b93841c9390800290620041d6565b509250929050565b600082620042495750600162000872565b81620042585750600062000872565b81600181146200427157600281146200427c576200429c565b600191505062000872565b60ff84111562004290576200429062003d9d565b50506001821b62000872565b5060208310610133831016604e8410600b8410161715620042c1575081810a62000872565b620042cd8383620041d1565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562004302576200430262003d9d565b029392505050565b600062002e8c838362004238565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600080858511156200435857600080fd5b838611156200436657600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200438f57600080fd5b87356200439c81620037d9565b96506020880135620043ae81620037d9565b95506040880135945060608801359350608088013562003b5d8162003ae0565b60208152600062002e8c602083018462003e8c56fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a2646970667358221220ebc3e29e73e7ee8654e10660476c7bd4773adb9823eb2f08ac27bcab930c4a4364736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001c35760003560e01c806381b1c17411620000f3578063bab161bf1162000095578063e7375881116200006c578063e73758811462000678578063ed6be5c914620006ac578063f2fde38b14620006c3578063ff634ed714620006e857600080fd5b8063bab161bf14620005fd578063d02103ca1462000632578063d96a15f7146200066157600080fd5b806391e57e2d11620000ca57806391e57e2d1462000596578063a08e8a0814620005ae578063b7e6a7d414620005d857600080fd5b806381b1c17414620004fd5780638624c35c14620005445780638da5cb5b146200056957600080fd5b8063318aee3d11620001695780633e19704311620001405780633e19704314620003a757806346385549146200049b578063715018a614620004c05780637b6323c114620004d857600080fd5b8063318aee3d14620002d05780633ae0504714620003595780633da81682146200037157600080fd5b80632c3f58cd116200019e5780632c3f58cd14620002555780632dfdf0b5146200027a5780632f3a3d5d14620002a157600080fd5b80630871e97114620001c857806322e95f2c14620001e15780632b5e42e71462000230575b600080fd5b620001df620001d936600462003823565b620006ff565b005b348015620001ee57600080fd5b506200020662000200366004620038df565b620007d5565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200023d57600080fd5b50620001df6200024f3660046200391b565b62000878565b3480156200026257600080fd5b50620001df6200027436600462003935565b62000887565b3480156200028757600080fd5b506200029260415481565b60405190815260200162000227565b348015620002ae57600080fd5b50604754620002069073ffffffffffffffffffffffffffffffffffffffff1681565b348015620002dd57600080fd5b5062000327620002ef36600462003953565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000227565b3480156200036657600080fd5b5062000292620008c8565b3480156200037e57600080fd5b50620003966200039036600462003a72565b620009a2565b604051901515815260200162000227565b348015620003b457600080fd5b5062000292620003c636600462003af0565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004a857600080fd5b50620001df620004ba36600462003c1f565b62000aa2565b348015620004cd57600080fd5b50620001df6200125d565b348015620004e557600080fd5b50620001df620004f736600462003c1f565b62001275565b3480156200050a57600080fd5b50620002066200051c3660046200391b565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200055157600080fd5b50620001df62000563366004620038df565b62001d20565b3480156200057657600080fd5b50607a5473ffffffffffffffffffffffffffffffffffffffff1662000206565b348015620005a357600080fd5b506200029260ac5481565b348015620005bb57600080fd5b50620005c5600081565b60405160ff909116815260200162000227565b348015620005e557600080fd5b5062000206620005f7366004620038df565b62001fb4565b3480156200060a57600080fd5b506042546200061c9063ffffffff1681565b60405163ffffffff909116815260200162000227565b3480156200063f57600080fd5b50604654620002069073ffffffffffffffffffffffffffffffffffffffff1681565b620001df6200067236600462003d06565b6200207d565b3480156200068557600080fd5b5062000396620006973660046200391b565b60436020526000908152604090205460ff1681565b348015620006b957600080fd5b506200061c600081565b348015620006d057600080fd5b50620001df620006e236600462003953565b620022ca565b348015620006f557600080fd5b50620005c5600181565b60ac54341115620007bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b620007cd86868686868662002387565b505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6200088262002977565b60ac55565b6200089162002977565b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b6041546000908190815b60208110156200099a5781600116600103620009325760018160208110620008fe57620008fe62003d6e565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000976565b826021826020811062000949576200094962003d6e565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b6200098360028362003dcc565b915080620009918162003e08565b915050620008d2565b509092915050565b60008467ffffffffffffffff8416825b602081101562000a95578160011660010362000a1f57868181518110620009dd57620009dd62003d6e565b60200260200101518360405160200162000a01929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000a71565b8287828151811062000a355762000a3562003d6e565b602002602001015160405160200162000a58929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000a7e60028362003dcc565b91508062000a8c8162003e08565b915050620009b2565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000b4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d45440000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000be3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c09919062003e43565b60000362000c9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d4154434800000000000000000000006064820152608401620007b4565b60425463ffffffff85811691161462000d36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000006064820152608401620007b4565b60425463ffffffff1662000eb4578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062000e20905b8b8b63ffffffff168a620009a2565b62000eae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6200101e565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062000f90905b8b8b63ffffffff168b620009a2565b6200101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff85169084906200108c9089908b90879060240162003ed8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f200000000000000000000000000000000000000000000000000000000179052516200110f919062003f1e565b60006040518083038185875af1925050503d80600081146200114e576040519150601f19603f3d011682016040523d82523d6000602084013e62001153565b606091505b5050905080620011e5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b6200126762002977565b620012736000620029fa565b565b63ffffffff891660009081526043602052604090205460ff1615620012f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d454400006044820152606401620007b4565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001390573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013b6919062003e43565b60000362001447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d415443480000000000000000000000000000000000006064820152608401620007b4565b60425463ffffffff858116911614620014e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d415443480000000000000000000000000000006064820152608401620007b4565b60425463ffffffff1662001612578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620015a49062000e11565b6200160c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007b4565b6200172d565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620016c59062000f81565b6200172d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007b4565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff85166200189e576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff8516908490604051620017c0919062003f1e565b60006040518083038185875af1925050503d8060008114620017ff576040519150601f19603f3d011682016040523d82523d6000602084013e62001804565b606091505b505090508062001897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f45440000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b5062001ca9565b60425463ffffffff90811690871603620018db57620018d573ffffffffffffffffffffffffffffffffffffffff8616848462002a71565b62001ca9565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001c0857604754600090620019c69073ffffffffffffffffffffffffffffffffffffffff168462002b47565b9050600080600086806020019051810190620019e3919062003f88565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001a2c95949392919062004009565b600060405180830381600087803b15801562001a4757600080fd5b505af115801562001a5c573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001bf69392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062001ca6565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001c7e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ca4919062004069565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff161580801562001d415750600054600160ff909116105b8062001d5d5750303b15801562001d5d575060005460ff166001145b62001deb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007b4565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801562001e4a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841617905560405162001ec890620037cb565b604051809103906000f08015801562001ee5573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905562001f3562002c27565b62001f3f62002d6c565b6703782dace9d9000060ac55801562001faf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620020759073ffffffffffffffffffffffffffffffffffffffff168262002e0f565b949350505050565b60425463ffffffff908116908416036200211a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007b4565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620021679260019263ffffffff9092169133918991899134918a91906200408d565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200224a9062002e93565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62002272620008c8565b6040518263ffffffff1660e01b81526004016200229191815260200190565b600060405180830381600087803b158015620022ac57600080fd5b505af1158015620022c1573d6000803e3d6000fd5b50505050505050565b620022d462002977565b73ffffffffffffffffffffffffffffffffffffffff811662002379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007b4565b6200238481620029fa565b50565b60425463ffffffff9081169086160362002424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007b4565b600080606073ffffffffffffffffffffffffffffffffffffffff8916620024e057853414620024d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007b4565b60009150620027f4565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620025e1576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af1158015620025a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620025ce919062004069565b50602081015181519094509250620027f2565b8415620025f657620025f68a8888886200300c565b6200261a73ffffffffffffffffffffffffffffffffffffffff8b1633308a62003437565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200267e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620026c6919081019062004106565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562002712573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200275a919081019062004106565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620027a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620027cc91906200413f565b604051602001620027e0939291906200415f565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b87604154604051620028369897969594939291906200408d565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620028f19062002e93565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62002919620008c8565b6040518263ffffffff1660e01b81526004016200293891815260200190565b600060405180830381600087803b1580156200295357600080fd5b505af115801562002968573d6000803e3d6000fd5b50505050505050505050505050565b607a5473ffffffffffffffffffffffffffffffffffffffff16331462001273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007b4565b607a805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262001faf9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526200349d565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401620007b4565b600054610100900460ff1662002cc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b60005b62002cd1600160206200419c565b81101562002384576021816020811062002cef5762002cef62003d6e565b01546021826020811062002d075762002d0762003d6e565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002d429190620041b6565b6020811062002d555762002d5562003d6e565b01558062002d638162003e08565b91505062002cc3565b600054610100900460ff1662002e05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b62001273620035b0565b600062002e8c8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b80600162002ea4602060026200430a565b62002eb091906200419c565b6041541062002f42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007b4565b60016041600082825462002f579190620041b6565b909155505060415460005b602081101562003001578160011660010362002f9757826001826020811062002f8f5762002f8f62003d6e565b015550505050565b6001816020811062002fad5762002fad62003d6e565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002fea919062003dcc565b91508062002ff88162003e08565b91505062002f62565b5062001faf62004318565b60006200304f83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200365492505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf0000000000000000000000000000000000000000000000000000000014620030fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007b4565b600080808080808062003115896004818d62004347565b81019062003124919062004373565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614620031ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007b4565b73ffffffffffffffffffffffffffffffffffffffff8616301462003296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007b4565b8a851462003327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007b4565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e1691620033e2919062003f1e565b6000604051808303816000865af19150503d806000811462003421576040519150601f19603f3d011682016040523d82523d6000602084013e62003426565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052620034979085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002ac4565b50505050565b600062003501826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166200365b9092919063ffffffff16565b80519091501562001faf578080602001905181019062003522919062004069565b62001faf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007b4565b600054610100900460ff1662003649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b6200127333620029fa565b6020015190565b60606200207584846000858573ffffffffffffffffffffffffffffffffffffffff85163b620036e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007b4565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405162003712919062003f1e565b60006040518083038185875af1925050503d806000811462003751576040519150601f19603f3d011682016040523d82523d6000602084013e62003756565b606091505b50915091506200376882828662003773565b979650505050505050565b606083156200378457508162002e8c565b825115620037955782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007b49190620043ce565b61182980620043e483390190565b73ffffffffffffffffffffffffffffffffffffffff811681146200238457600080fd5b80356200380981620037d9565b919050565b803563ffffffff811681146200380957600080fd5b60008060008060008060a087890312156200383d57600080fd5b86356200384a81620037d9565b95506200385a602088016200380e565b945060408701356200386c81620037d9565b935060608701359250608087013567ffffffffffffffff808211156200389157600080fd5b818901915089601f830112620038a657600080fd5b813581811115620038b657600080fd5b8a6020828501011115620038c957600080fd5b6020830194508093505050509295509295509295565b60008060408385031215620038f357600080fd5b620038fe836200380e565b915060208301356200391081620037d9565b809150509250929050565b6000602082840312156200392e57600080fd5b5035919050565b6000602082840312156200394857600080fd5b62002e8c826200380e565b6000602082840312156200396657600080fd5b813562002e8c81620037d9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620039ec57620039ec62003973565b604052919050565b600082601f83011262003a0657600080fd5b8135602067ffffffffffffffff82111562003a255762003a2562003973565b8160051b62003a36828201620039a2565b928352848101820192828101908785111562003a5157600080fd5b83870192505b84831015620037685782358252918301919083019062003a57565b6000806000806080858703121562003a8957600080fd5b84359350602085013567ffffffffffffffff8082111562003aa957600080fd5b62003ab788838901620039f4565b945060408701359150808216821462003acf57600080fd5b509396929550929360600135925050565b60ff811681146200238457600080fd5b600080600080600080600060e0888a03121562003b0c57600080fd5b873562003b198162003ae0565b965062003b29602089016200380e565b9550604088013562003b3b81620037d9565b945062003b4b606089016200380e565b9350608088013562003b5d81620037d9565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562003b975762003b9762003973565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011262003bd557600080fd5b813562003bec62003be68262003b7a565b620039a2565b81815284602083860101111562003c0257600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562003c4057600080fd5b8a3567ffffffffffffffff8082111562003c5957600080fd5b62003c678e838f01620039f4565b9b5062003c7760208e016200380e565b9a5060408d0135995060608d0135985062003c9560808e016200380e565b975062003ca560a08e01620037fc565b965062003cb560c08e016200380e565b955062003cc560e08e01620037fc565b94506101008d013593506101208d013591508082111562003ce557600080fd5b5062003cf48d828e0162003bc3565b9150509295989b9194979a5092959850565b60008060006060848603121562003d1c57600080fd5b62003d27846200380e565b9250602084013562003d3981620037d9565b9150604084013567ffffffffffffffff81111562003d5657600080fd5b62003d648682870162003bc3565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003e03577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003e3c5762003e3c62003d9d565b5060010190565b60006020828403121562003e5657600080fd5b5051919050565b60005b8381101562003e7a57818101518382015260200162003e60565b83811115620034975750506000910152565b6000815180845262003ea681602086016020860162003e5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003f15606083018462003e8c565b95945050505050565b6000825162003f3281846020870162003e5d565b9190910192915050565b600082601f83011262003f4e57600080fd5b815162003f5f62003be68262003b7a565b81815284602083860101111562003f7557600080fd5b6200207582602083016020870162003e5d565b60008060006060848603121562003f9e57600080fd5b835167ffffffffffffffff8082111562003fb757600080fd5b62003fc58783880162003f3c565b9450602086015191508082111562003fdc57600080fd5b5062003feb8682870162003f3c565b925050604084015162003ffe8162003ae0565b809150509250925092565b60a0815260006200401e60a083018862003e8c565b828103602084015262004032818862003e8c565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000602082840312156200407c57600080fd5b8151801515811462002e8c57600080fd5b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620040ed8285018762003e8c565b925080851660e085015250509998505050505050505050565b6000602082840312156200411957600080fd5b815167ffffffffffffffff8111156200413157600080fd5b620020758482850162003f3c565b6000602082840312156200415257600080fd5b815162002e8c8162003ae0565b60608152600062004174606083018662003e8c565b828103602084015262004188818662003e8c565b91505060ff83166040830152949350505050565b600082821015620041b157620041b162003d9d565b500390565b60008219821115620041cc57620041cc62003d9d565b500190565b600181815b808511156200423057817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562004214576200421462003d9d565b808516156200422257918102915b93841c9390800290620041d6565b509250929050565b600082620042495750600162000872565b81620042585750600062000872565b81600181146200427157600281146200427c576200429c565b600191505062000872565b60ff84111562004290576200429062003d9d565b50506001821b62000872565b5060208310610133831016604e8410600b8410161715620042c1575081810a62000872565b620042cd8383620041d1565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562004302576200430262003d9d565b029392505050565b600062002e8c838362004238565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600080858511156200435857600080fd5b838611156200436657600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200438f57600080fd5b87356200439c81620037d9565b96506020880135620043ae81620037d9565b95506040880135945060608801359350608088013562003b5d8162003ae0565b60208152600062002e8c602083018462003e8c56fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a2646970667358221220ebc3e29e73e7ee8654e10660476c7bd4773adb9823eb2f08ac27bcab930c4a4364736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50615c42806100206000396000f3fe608060405260043610620001c35760003560e01c806381b1c17411620000f3578063bab161bf1162000095578063e7375881116200006c578063e73758811462000678578063ed6be5c914620006ac578063f2fde38b14620006c3578063ff634ed714620006e857600080fd5b8063bab161bf14620005fd578063d02103ca1462000632578063d96a15f7146200066157600080fd5b806391e57e2d11620000ca57806391e57e2d1462000596578063a08e8a0814620005ae578063b7e6a7d414620005d857600080fd5b806381b1c17414620004fd5780638624c35c14620005445780638da5cb5b146200056957600080fd5b8063318aee3d11620001695780633e19704311620001405780633e19704314620003a757806346385549146200049b578063715018a614620004c05780637b6323c114620004d857600080fd5b8063318aee3d14620002d05780633ae0504714620003595780633da81682146200037157600080fd5b80632c3f58cd116200019e5780632c3f58cd14620002555780632dfdf0b5146200027a5780632f3a3d5d14620002a157600080fd5b80630871e97114620001c857806322e95f2c14620001e15780632b5e42e71462000230575b600080fd5b620001df620001d936600462003823565b620006ff565b005b348015620001ee57600080fd5b506200020662000200366004620038df565b620007d5565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200023d57600080fd5b50620001df6200024f3660046200391b565b62000878565b3480156200026257600080fd5b50620001df6200027436600462003935565b62000887565b3480156200028757600080fd5b506200029260415481565b60405190815260200162000227565b348015620002ae57600080fd5b50604754620002069073ffffffffffffffffffffffffffffffffffffffff1681565b348015620002dd57600080fd5b5062000327620002ef36600462003953565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000227565b3480156200036657600080fd5b5062000292620008c8565b3480156200037e57600080fd5b50620003966200039036600462003a72565b620009a2565b604051901515815260200162000227565b348015620003b457600080fd5b5062000292620003c636600462003af0565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004a857600080fd5b50620001df620004ba36600462003c1f565b62000aa2565b348015620004cd57600080fd5b50620001df6200125d565b348015620004e557600080fd5b50620001df620004f736600462003c1f565b62001275565b3480156200050a57600080fd5b50620002066200051c3660046200391b565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200055157600080fd5b50620001df62000563366004620038df565b62001d20565b3480156200057657600080fd5b50607a5473ffffffffffffffffffffffffffffffffffffffff1662000206565b348015620005a357600080fd5b506200029260ac5481565b348015620005bb57600080fd5b50620005c5600081565b60405160ff909116815260200162000227565b348015620005e557600080fd5b5062000206620005f7366004620038df565b62001fb4565b3480156200060a57600080fd5b506042546200061c9063ffffffff1681565b60405163ffffffff909116815260200162000227565b3480156200063f57600080fd5b50604654620002069073ffffffffffffffffffffffffffffffffffffffff1681565b620001df6200067236600462003d06565b6200207d565b3480156200068557600080fd5b5062000396620006973660046200391b565b60436020526000908152604090205460ff1681565b348015620006b957600080fd5b506200061c600081565b348015620006d057600080fd5b50620001df620006e236600462003953565b620022ca565b348015620006f557600080fd5b50620005c5600181565b60ac54341115620007bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b620007cd86868686868662002387565b505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6200088262002977565b60ac55565b6200089162002977565b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b6041546000908190815b60208110156200099a5781600116600103620009325760018160208110620008fe57620008fe62003d6e565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000976565b826021826020811062000949576200094962003d6e565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b6200098360028362003dcc565b915080620009918162003e08565b915050620008d2565b509092915050565b60008467ffffffffffffffff8416825b602081101562000a95578160011660010362000a1f57868181518110620009dd57620009dd62003d6e565b60200260200101518360405160200162000a01929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000a71565b8287828151811062000a355762000a3562003d6e565b602002602001015160405160200162000a58929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000a7e60028362003dcc565b91508062000a8c8162003e08565b915050620009b2565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000b4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d45440000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000be3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c09919062003e43565b60000362000c9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d4154434800000000000000000000006064820152608401620007b4565b60425463ffffffff85811691161462000d36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000006064820152608401620007b4565b60425463ffffffff1662000eb4578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062000e20905b8b8b63ffffffff168a620009a2565b62000eae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6200101e565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062000f90905b8b8b63ffffffff168b620009a2565b6200101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff85169084906200108c9089908b90879060240162003ed8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f200000000000000000000000000000000000000000000000000000000179052516200110f919062003f1e565b60006040518083038185875af1925050503d80600081146200114e576040519150601f19603f3d011682016040523d82523d6000602084013e62001153565b606091505b5050905080620011e5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b6200126762002977565b620012736000620029fa565b565b63ffffffff891660009081526043602052604090205460ff1615620012f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d454400006044820152606401620007b4565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001390573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013b6919062003e43565b60000362001447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d415443480000000000000000000000000000000000006064820152608401620007b4565b60425463ffffffff858116911614620014e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d415443480000000000000000000000000000006064820152608401620007b4565b60425463ffffffff1662001612578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620015a49062000e11565b6200160c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007b4565b6200172d565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620016c59062000f81565b6200172d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007b4565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff85166200189e576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff8516908490604051620017c0919062003f1e565b60006040518083038185875af1925050503d8060008114620017ff576040519150601f19603f3d011682016040523d82523d6000602084013e62001804565b606091505b505090508062001897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f45440000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b5062001ca9565b60425463ffffffff90811690871603620018db57620018d573ffffffffffffffffffffffffffffffffffffffff8616848462002a71565b62001ca9565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001c0857604754600090620019c69073ffffffffffffffffffffffffffffffffffffffff168462002b47565b9050600080600086806020019051810190620019e3919062003f88565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001a2c95949392919062004009565b600060405180830381600087803b15801562001a4757600080fd5b505af115801562001a5c573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001bf69392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062001ca6565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001c7e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ca4919062004069565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff161580801562001d415750600054600160ff909116105b8062001d5d5750303b15801562001d5d575060005460ff166001145b62001deb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007b4565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801562001e4a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841617905560405162001ec890620037cb565b604051809103906000f08015801562001ee5573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905562001f3562002c27565b62001f3f62002d6c565b6703782dace9d9000060ac55801562001faf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620020759073ffffffffffffffffffffffffffffffffffffffff168262002e0f565b949350505050565b60425463ffffffff908116908416036200211a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007b4565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620021679260019263ffffffff9092169133918991899134918a91906200408d565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200224a9062002e93565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62002272620008c8565b6040518263ffffffff1660e01b81526004016200229191815260200190565b600060405180830381600087803b158015620022ac57600080fd5b505af1158015620022c1573d6000803e3d6000fd5b50505050505050565b620022d462002977565b73ffffffffffffffffffffffffffffffffffffffff811662002379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007b4565b6200238481620029fa565b50565b60425463ffffffff9081169086160362002424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007b4565b600080606073ffffffffffffffffffffffffffffffffffffffff8916620024e057853414620024d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007b4565b60009150620027f4565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620025e1576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af1158015620025a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620025ce919062004069565b50602081015181519094509250620027f2565b8415620025f657620025f68a8888886200300c565b6200261a73ffffffffffffffffffffffffffffffffffffffff8b1633308a62003437565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200267e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620026c6919081019062004106565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562002712573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200275a919081019062004106565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620027a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620027cc91906200413f565b604051602001620027e0939291906200415f565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b87604154604051620028369897969594939291906200408d565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620028f19062002e93565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62002919620008c8565b6040518263ffffffff1660e01b81526004016200293891815260200190565b600060405180830381600087803b1580156200295357600080fd5b505af115801562002968573d6000803e3d6000fd5b50505050505050505050505050565b607a5473ffffffffffffffffffffffffffffffffffffffff16331462001273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007b4565b607a805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262001faf9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526200349d565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401620007b4565b600054610100900460ff1662002cc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b60005b62002cd1600160206200419c565b81101562002384576021816020811062002cef5762002cef62003d6e565b01546021826020811062002d075762002d0762003d6e565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002d429190620041b6565b6020811062002d555762002d5562003d6e565b01558062002d638162003e08565b91505062002cc3565b600054610100900460ff1662002e05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b62001273620035b0565b600062002e8c8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b80600162002ea4602060026200430a565b62002eb091906200419c565b6041541062002f42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007b4565b60016041600082825462002f579190620041b6565b909155505060415460005b602081101562003001578160011660010362002f9757826001826020811062002f8f5762002f8f62003d6e565b015550505050565b6001816020811062002fad5762002fad62003d6e565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002fea919062003dcc565b91508062002ff88162003e08565b91505062002f62565b5062001faf62004318565b60006200304f83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200365492505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf0000000000000000000000000000000000000000000000000000000014620030fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007b4565b600080808080808062003115896004818d62004347565b81019062003124919062004373565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614620031ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007b4565b73ffffffffffffffffffffffffffffffffffffffff8616301462003296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007b4565b8a851462003327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007b4565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e1691620033e2919062003f1e565b6000604051808303816000865af19150503d806000811462003421576040519150601f19603f3d011682016040523d82523d6000602084013e62003426565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052620034979085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002ac4565b50505050565b600062003501826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166200365b9092919063ffffffff16565b80519091501562001faf578080602001905181019062003522919062004069565b62001faf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007b4565b600054610100900460ff1662003649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b6200127333620029fa565b6020015190565b60606200207584846000858573ffffffffffffffffffffffffffffffffffffffff85163b620036e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007b4565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405162003712919062003f1e565b60006040518083038185875af1925050503d806000811462003751576040519150601f19603f3d011682016040523d82523d6000602084013e62003756565b606091505b50915091506200376882828662003773565b979650505050505050565b606083156200378457508162002e8c565b825115620037955782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007b49190620043ce565b61182980620043e483390190565b73ffffffffffffffffffffffffffffffffffffffff811681146200238457600080fd5b80356200380981620037d9565b919050565b803563ffffffff811681146200380957600080fd5b60008060008060008060a087890312156200383d57600080fd5b86356200384a81620037d9565b95506200385a602088016200380e565b945060408701356200386c81620037d9565b935060608701359250608087013567ffffffffffffffff808211156200389157600080fd5b818901915089601f830112620038a657600080fd5b813581811115620038b657600080fd5b8a6020828501011115620038c957600080fd5b6020830194508093505050509295509295509295565b60008060408385031215620038f357600080fd5b620038fe836200380e565b915060208301356200391081620037d9565b809150509250929050565b6000602082840312156200392e57600080fd5b5035919050565b6000602082840312156200394857600080fd5b62002e8c826200380e565b6000602082840312156200396657600080fd5b813562002e8c81620037d9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620039ec57620039ec62003973565b604052919050565b600082601f83011262003a0657600080fd5b8135602067ffffffffffffffff82111562003a255762003a2562003973565b8160051b62003a36828201620039a2565b928352848101820192828101908785111562003a5157600080fd5b83870192505b84831015620037685782358252918301919083019062003a57565b6000806000806080858703121562003a8957600080fd5b84359350602085013567ffffffffffffffff8082111562003aa957600080fd5b62003ab788838901620039f4565b945060408701359150808216821462003acf57600080fd5b509396929550929360600135925050565b60ff811681146200238457600080fd5b600080600080600080600060e0888a03121562003b0c57600080fd5b873562003b198162003ae0565b965062003b29602089016200380e565b9550604088013562003b3b81620037d9565b945062003b4b606089016200380e565b9350608088013562003b5d81620037d9565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562003b975762003b9762003973565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011262003bd557600080fd5b813562003bec62003be68262003b7a565b620039a2565b81815284602083860101111562003c0257600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562003c4057600080fd5b8a3567ffffffffffffffff8082111562003c5957600080fd5b62003c678e838f01620039f4565b9b5062003c7760208e016200380e565b9a5060408d0135995060608d0135985062003c9560808e016200380e565b975062003ca560a08e01620037fc565b965062003cb560c08e016200380e565b955062003cc560e08e01620037fc565b94506101008d013593506101208d013591508082111562003ce557600080fd5b5062003cf48d828e0162003bc3565b9150509295989b9194979a5092959850565b60008060006060848603121562003d1c57600080fd5b62003d27846200380e565b9250602084013562003d3981620037d9565b9150604084013567ffffffffffffffff81111562003d5657600080fd5b62003d648682870162003bc3565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003e03577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003e3c5762003e3c62003d9d565b5060010190565b60006020828403121562003e5657600080fd5b5051919050565b60005b8381101562003e7a57818101518382015260200162003e60565b83811115620034975750506000910152565b6000815180845262003ea681602086016020860162003e5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003f15606083018462003e8c565b95945050505050565b6000825162003f3281846020870162003e5d565b9190910192915050565b600082601f83011262003f4e57600080fd5b815162003f5f62003be68262003b7a565b81815284602083860101111562003f7557600080fd5b6200207582602083016020870162003e5d565b60008060006060848603121562003f9e57600080fd5b835167ffffffffffffffff8082111562003fb757600080fd5b62003fc58783880162003f3c565b9450602086015191508082111562003fdc57600080fd5b5062003feb8682870162003f3c565b925050604084015162003ffe8162003ae0565b809150509250925092565b60a0815260006200401e60a083018862003e8c565b828103602084015262004032818862003e8c565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000602082840312156200407c57600080fd5b8151801515811462002e8c57600080fd5b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620040ed8285018762003e8c565b925080851660e085015250509998505050505050505050565b6000602082840312156200411957600080fd5b815167ffffffffffffffff8111156200413157600080fd5b620020758482850162003f3c565b6000602082840312156200415257600080fd5b815162002e8c8162003ae0565b60608152600062004174606083018662003e8c565b828103602084015262004188818662003e8c565b91505060ff83166040830152949350505050565b600082821015620041b157620041b162003d9d565b500390565b60008219821115620041cc57620041cc62003d9d565b500190565b600181815b808511156200423057817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562004214576200421462003d9d565b808516156200422257918102915b93841c9390800290620041d6565b509250929050565b600082620042495750600162000872565b81620042585750600062000872565b81600181146200427157600281146200427c576200429c565b600191505062000872565b60ff84111562004290576200429062003d9d565b50506001821b62000872565b5060208310610133831016604e8410600b8410161715620042c1575081810a62000872565b620042cd8383620041d1565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562004302576200430262003d9d565b029392505050565b600062002e8c838362004238565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600080858511156200435857600080fd5b838611156200436657600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200438f57600080fd5b87356200439c81620037d9565b96506020880135620043ae81620037d9565b95506040880135945060608801359350608088013562003b5d8162003ae0565b60208152600062002e8c602083018462003e8c56fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a2646970667358221220d9b0847a8820234ebfdd21d5f194bcc4c046919307bd6d06f8d96c4ba0c614c064736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001c35760003560e01c806381b1c17411620000f3578063bab161bf1162000095578063e7375881116200006c578063e73758811462000678578063ed6be5c914620006ac578063f2fde38b14620006c3578063ff634ed714620006e857600080fd5b8063bab161bf14620005fd578063d02103ca1462000632578063d96a15f7146200066157600080fd5b806391e57e2d11620000ca57806391e57e2d1462000596578063a08e8a0814620005ae578063b7e6a7d414620005d857600080fd5b806381b1c17414620004fd5780638624c35c14620005445780638da5cb5b146200056957600080fd5b8063318aee3d11620001695780633e19704311620001405780633e19704314620003a757806346385549146200049b578063715018a614620004c05780637b6323c114620004d857600080fd5b8063318aee3d14620002d05780633ae0504714620003595780633da81682146200037157600080fd5b80632c3f58cd116200019e5780632c3f58cd14620002555780632dfdf0b5146200027a5780632f3a3d5d14620002a157600080fd5b80630871e97114620001c857806322e95f2c14620001e15780632b5e42e71462000230575b600080fd5b620001df620001d936600462003823565b620006ff565b005b348015620001ee57600080fd5b506200020662000200366004620038df565b620007d5565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200023d57600080fd5b50620001df6200024f3660046200391b565b62000878565b3480156200026257600080fd5b50620001df6200027436600462003935565b62000887565b3480156200028757600080fd5b506200029260415481565b60405190815260200162000227565b348015620002ae57600080fd5b50604754620002069073ffffffffffffffffffffffffffffffffffffffff1681565b348015620002dd57600080fd5b5062000327620002ef36600462003953565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000227565b3480156200036657600080fd5b5062000292620008c8565b3480156200037e57600080fd5b50620003966200039036600462003a72565b620009a2565b604051901515815260200162000227565b348015620003b457600080fd5b5062000292620003c636600462003af0565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004a857600080fd5b50620001df620004ba36600462003c1f565b62000aa2565b348015620004cd57600080fd5b50620001df6200125d565b348015620004e557600080fd5b50620001df620004f736600462003c1f565b62001275565b3480156200050a57600080fd5b50620002066200051c3660046200391b565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200055157600080fd5b50620001df62000563366004620038df565b62001d20565b3480156200057657600080fd5b50607a5473ffffffffffffffffffffffffffffffffffffffff1662000206565b348015620005a357600080fd5b506200029260ac5481565b348015620005bb57600080fd5b50620005c5600081565b60405160ff909116815260200162000227565b348015620005e557600080fd5b5062000206620005f7366004620038df565b62001fb4565b3480156200060a57600080fd5b506042546200061c9063ffffffff1681565b60405163ffffffff909116815260200162000227565b3480156200063f57600080fd5b50604654620002069073ffffffffffffffffffffffffffffffffffffffff1681565b620001df6200067236600462003d06565b6200207d565b3480156200068557600080fd5b5062000396620006973660046200391b565b60436020526000908152604090205460ff1681565b348015620006b957600080fd5b506200061c600081565b348015620006d057600080fd5b50620001df620006e236600462003953565b620022ca565b348015620006f557600080fd5b50620005c5600181565b60ac54341115620007bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b620007cd86868686868662002387565b505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6200088262002977565b60ac55565b6200089162002977565b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b6041546000908190815b60208110156200099a5781600116600103620009325760018160208110620008fe57620008fe62003d6e565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000976565b826021826020811062000949576200094962003d6e565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b6200098360028362003dcc565b915080620009918162003e08565b915050620008d2565b509092915050565b60008467ffffffffffffffff8416825b602081101562000a95578160011660010362000a1f57868181518110620009dd57620009dd62003d6e565b60200260200101518360405160200162000a01929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000a71565b8287828151811062000a355762000a3562003d6e565b602002602001015160405160200162000a58929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000a7e60028362003dcc565b91508062000a8c8162003e08565b915050620009b2565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000b4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d45440000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000be3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c09919062003e43565b60000362000c9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d4154434800000000000000000000006064820152608401620007b4565b60425463ffffffff85811691161462000d36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000006064820152608401620007b4565b60425463ffffffff1662000eb4578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062000e20905b8b8b63ffffffff168a620009a2565b62000eae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6200101e565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062000f90905b8b8b63ffffffff168b620009a2565b6200101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff85169084906200108c9089908b90879060240162003ed8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f200000000000000000000000000000000000000000000000000000000179052516200110f919062003f1e565b60006040518083038185875af1925050503d80600081146200114e576040519150601f19603f3d011682016040523d82523d6000602084013e62001153565b606091505b5050905080620011e5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b6200126762002977565b620012736000620029fa565b565b63ffffffff891660009081526043602052604090205460ff1615620012f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d454400006044820152606401620007b4565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001390573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013b6919062003e43565b60000362001447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d415443480000000000000000000000000000000000006064820152608401620007b4565b60425463ffffffff858116911614620014e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d415443480000000000000000000000000000006064820152608401620007b4565b60425463ffffffff1662001612578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620015a49062000e11565b6200160c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007b4565b6200172d565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620016c59062000f81565b6200172d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007b4565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff85166200189e576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff8516908490604051620017c0919062003f1e565b60006040518083038185875af1925050503d8060008114620017ff576040519150601f19603f3d011682016040523d82523d6000602084013e62001804565b606091505b505090508062001897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f45440000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b5062001ca9565b60425463ffffffff90811690871603620018db57620018d573ffffffffffffffffffffffffffffffffffffffff8616848462002a71565b62001ca9565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001c0857604754600090620019c69073ffffffffffffffffffffffffffffffffffffffff168462002b47565b9050600080600086806020019051810190620019e3919062003f88565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001a2c95949392919062004009565b600060405180830381600087803b15801562001a4757600080fd5b505af115801562001a5c573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001bf69392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062001ca6565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001c7e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ca4919062004069565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff161580801562001d415750600054600160ff909116105b8062001d5d5750303b15801562001d5d575060005460ff166001145b62001deb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007b4565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801562001e4a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841617905560405162001ec890620037cb565b604051809103906000f08015801562001ee5573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905562001f3562002c27565b62001f3f62002d6c565b6703782dace9d9000060ac55801562001faf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620020759073ffffffffffffffffffffffffffffffffffffffff168262002e0f565b949350505050565b60425463ffffffff908116908416036200211a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007b4565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620021679260019263ffffffff9092169133918991899134918a91906200408d565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200224a9062002e93565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62002272620008c8565b6040518263ffffffff1660e01b81526004016200229191815260200190565b600060405180830381600087803b158015620022ac57600080fd5b505af1158015620022c1573d6000803e3d6000fd5b50505050505050565b620022d462002977565b73ffffffffffffffffffffffffffffffffffffffff811662002379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007b4565b6200238481620029fa565b50565b60425463ffffffff9081169086160362002424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007b4565b600080606073ffffffffffffffffffffffffffffffffffffffff8916620024e057853414620024d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007b4565b60009150620027f4565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620025e1576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af1158015620025a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620025ce919062004069565b50602081015181519094509250620027f2565b8415620025f657620025f68a8888886200300c565b6200261a73ffffffffffffffffffffffffffffffffffffffff8b1633308a62003437565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200267e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620026c6919081019062004106565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562002712573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200275a919081019062004106565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620027a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620027cc91906200413f565b604051602001620027e0939291906200415f565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b87604154604051620028369897969594939291906200408d565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620028f19062002e93565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62002919620008c8565b6040518263ffffffff1660e01b81526004016200293891815260200190565b600060405180830381600087803b1580156200295357600080fd5b505af115801562002968573d6000803e3d6000fd5b50505050505050505050505050565b607a5473ffffffffffffffffffffffffffffffffffffffff16331462001273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007b4565b607a805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262001faf9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526200349d565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401620007b4565b600054610100900460ff1662002cc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b60005b62002cd1600160206200419c565b81101562002384576021816020811062002cef5762002cef62003d6e565b01546021826020811062002d075762002d0762003d6e565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002d429190620041b6565b6020811062002d555762002d5562003d6e565b01558062002d638162003e08565b91505062002cc3565b600054610100900460ff1662002e05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b62001273620035b0565b600062002e8c8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b80600162002ea4602060026200430a565b62002eb091906200419c565b6041541062002f42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007b4565b60016041600082825462002f579190620041b6565b909155505060415460005b602081101562003001578160011660010362002f9757826001826020811062002f8f5762002f8f62003d6e565b015550505050565b6001816020811062002fad5762002fad62003d6e565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002fea919062003dcc565b91508062002ff88162003e08565b91505062002f62565b5062001faf62004318565b60006200304f83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200365492505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf0000000000000000000000000000000000000000000000000000000014620030fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007b4565b600080808080808062003115896004818d62004347565b81019062003124919062004373565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614620031ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007b4565b73ffffffffffffffffffffffffffffffffffffffff8616301462003296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007b4565b8a851462003327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007b4565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e1691620033e2919062003f1e565b6000604051808303816000865af19150503d806000811462003421576040519150601f19603f3d011682016040523d82523d6000602084013e62003426565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052620034979085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002ac4565b50505050565b600062003501826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166200365b9092919063ffffffff16565b80519091501562001faf578080602001905181019062003522919062004069565b62001faf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007b4565b600054610100900460ff1662003649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b6200127333620029fa565b6020015190565b60606200207584846000858573ffffffffffffffffffffffffffffffffffffffff85163b620036e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007b4565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405162003712919062003f1e565b60006040518083038185875af1925050503d806000811462003751576040519150601f19603f3d011682016040523d82523d6000602084013e62003756565b606091505b50915091506200376882828662003773565b979650505050505050565b606083156200378457508162002e8c565b825115620037955782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007b49190620043ce565b61182980620043e483390190565b73ffffffffffffffffffffffffffffffffffffffff811681146200238457600080fd5b80356200380981620037d9565b919050565b803563ffffffff811681146200380957600080fd5b60008060008060008060a087890312156200383d57600080fd5b86356200384a81620037d9565b95506200385a602088016200380e565b945060408701356200386c81620037d9565b935060608701359250608087013567ffffffffffffffff808211156200389157600080fd5b818901915089601f830112620038a657600080fd5b813581811115620038b657600080fd5b8a6020828501011115620038c957600080fd5b6020830194508093505050509295509295509295565b60008060408385031215620038f357600080fd5b620038fe836200380e565b915060208301356200391081620037d9565b809150509250929050565b6000602082840312156200392e57600080fd5b5035919050565b6000602082840312156200394857600080fd5b62002e8c826200380e565b6000602082840312156200396657600080fd5b813562002e8c81620037d9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620039ec57620039ec62003973565b604052919050565b600082601f83011262003a0657600080fd5b8135602067ffffffffffffffff82111562003a255762003a2562003973565b8160051b62003a36828201620039a2565b928352848101820192828101908785111562003a5157600080fd5b83870192505b84831015620037685782358252918301919083019062003a57565b6000806000806080858703121562003a8957600080fd5b84359350602085013567ffffffffffffffff8082111562003aa957600080fd5b62003ab788838901620039f4565b945060408701359150808216821462003acf57600080fd5b509396929550929360600135925050565b60ff811681146200238457600080fd5b600080600080600080600060e0888a03121562003b0c57600080fd5b873562003b198162003ae0565b965062003b29602089016200380e565b9550604088013562003b3b81620037d9565b945062003b4b606089016200380e565b9350608088013562003b5d81620037d9565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562003b975762003b9762003973565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011262003bd557600080fd5b813562003bec62003be68262003b7a565b620039a2565b81815284602083860101111562003c0257600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562003c4057600080fd5b8a3567ffffffffffffffff8082111562003c5957600080fd5b62003c678e838f01620039f4565b9b5062003c7760208e016200380e565b9a5060408d0135995060608d0135985062003c9560808e016200380e565b975062003ca560a08e01620037fc565b965062003cb560c08e016200380e565b955062003cc560e08e01620037fc565b94506101008d013593506101208d013591508082111562003ce557600080fd5b5062003cf48d828e0162003bc3565b9150509295989b9194979a5092959850565b60008060006060848603121562003d1c57600080fd5b62003d27846200380e565b9250602084013562003d3981620037d9565b9150604084013567ffffffffffffffff81111562003d5657600080fd5b62003d648682870162003bc3565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003e03577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003e3c5762003e3c62003d9d565b5060010190565b60006020828403121562003e5657600080fd5b5051919050565b60005b8381101562003e7a57818101518382015260200162003e60565b83811115620034975750506000910152565b6000815180845262003ea681602086016020860162003e5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003f15606083018462003e8c565b95945050505050565b6000825162003f3281846020870162003e5d565b9190910192915050565b600082601f83011262003f4e57600080fd5b815162003f5f62003be68262003b7a565b81815284602083860101111562003f7557600080fd5b6200207582602083016020870162003e5d565b60008060006060848603121562003f9e57600080fd5b835167ffffffffffffffff8082111562003fb757600080fd5b62003fc58783880162003f3c565b9450602086015191508082111562003fdc57600080fd5b5062003feb8682870162003f3c565b925050604084015162003ffe8162003ae0565b809150509250925092565b60a0815260006200401e60a083018862003e8c565b828103602084015262004032818862003e8c565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000602082840312156200407c57600080fd5b8151801515811462002e8c57600080fd5b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620040ed8285018762003e8c565b925080851660e085015250509998505050505050505050565b6000602082840312156200411957600080fd5b815167ffffffffffffffff8111156200413157600080fd5b620020758482850162003f3c565b6000602082840312156200415257600080fd5b815162002e8c8162003ae0565b60608152600062004174606083018662003e8c565b828103602084015262004188818662003e8c565b91505060ff83166040830152949350505050565b600082821015620041b157620041b162003d9d565b500390565b60008219821115620041cc57620041cc62003d9d565b500190565b600181815b808511156200423057817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562004214576200421462003d9d565b808516156200422257918102915b93841c9390800290620041d6565b509250929050565b600082620042495750600162000872565b81620042585750600062000872565b81600181146200427157600281146200427c576200429c565b600191505062000872565b60ff84111562004290576200429062003d9d565b50506001821b62000872565b5060208310610133831016604e8410600b8410161715620042c1575081810a62000872565b620042cd8383620041d1565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562004302576200430262003d9d565b029392505050565b600062002e8c838362004238565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600080858511156200435857600080fd5b838611156200436657600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200438f57600080fd5b87356200439c81620037d9565b96506020880135620043ae81620037d9565b95506040880135945060608801359350608088013562003b5d8162003ae0565b60208152600062002e8c602083018462003e8c56fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a2646970667358221220d9b0847a8820234ebfdd21d5f194bcc4c046919307bd6d06f8d96c4ba0c614c064736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/ProofOfEfficiency.json b/compiled-contracts/ProofOfEfficiency.json index 95fc9bd81..f88b51d39 100644 --- a/compiled-contracts/ProofOfEfficiency.json +++ b/compiled-contracts/ProofOfEfficiency.json @@ -669,8 +669,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5061399d806100206000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c8063ac2eba9811610104578063d02103ca116100a2578063e7a7ed0211610071578063e7a7ed021461048a578063e8bf92ed146104ba578063eaeb077b146104da578063f7552761146104ed57600080fd5b8063d02103ca14610407578063d2fd1b3114610427578063d8d1091b1461043a578063d8f54db01461044d57600080fd5b8063b4d63f58116100de578063b4d63f581461035d578063b6b0b0971461037d578063c89e42df146103c8578063cfa8ed47146103db57600080fd5b8063ac2eba9814610337578063adc879e914610340578063b02286c01461035457600080fd5b80636b8616ce1161017c5780637fcb36531161014b5780637fcb3653146102fe5780638c4a0af71461031257806399f5634e14610325578063ab9fc5ef1461032d57600080fd5b80636b8616ce146102a25780636ff512cc146102d05780637152facf146102e357806379847057146102f657600080fd5b8063423fa856116101b8578063423fa8561461023f578063456052671461025f578063542028d51461028757806355b925e61461028f57600080fd5b8063107bf28c146101df57806319d8ac61146101fd5780633c1582671461022a575b600080fd5b6101e76104fc565b6040516101f49190612e09565b60405180910390f35b6003546102119067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101f4565b61023d610238366004612fb5565b61058a565b005b6003546102119068010000000000000000900467ffffffffffffffff1681565b60035461021190700100000000000000000000000000000000900467ffffffffffffffff1681565b6101e7610ebc565b61023d61029d366004613101565b610ec9565b6102c26102b0366004613184565b60016020526000908152604090205481565b6040519081526020016101f4565b61023d6102de3660046131cf565b611439565b6101e76102f13660046131ec565b611574565b6102c2611721565b6004546102119067ffffffffffffffff1681565b61023d610320366004613247565b61179b565b6102c26118cf565b61021162093a8081565b6102c260065481565b6009546102119067ffffffffffffffff1681565b6102c261ea6081565b6102c261036b366004613184565b60026020526000908152604090205481565b6000546103a39062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f4565b61023d6103d6366004613264565b6119fe565b6004546103a39068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b61023d6104353660046132a1565b611aed565b61023d610448366004613377565b611dda565b60045461047a907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016101f4565b600354610211907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6007546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b61023d6104e8366004613488565b612480565b6102c267016345785d8a000081565b600a8054610509906134cd565b80601f0160208091040260200160405190810160405280929190818152602001828054610535906134cd565b80156105825780601f1061055757610100808354040283529160200191610582565b820191906000526020600020905b81548152906001019060200180831161056557829003601f168201915b505050505081565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b805160035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610c925760008782815181106106aa576106aa613520565b602002602001015190506000816060015167ffffffffffffffff16111561091557836106d58161357e565b94505060008160000151805190602001208260200151836060015160405160200161073893929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff881660009081526001909352912054909150811461083d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b816060015167ffffffffffffffff16826040015167ffffffffffffffff16101561090f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610639565b50610ae3565b602081015115806109c4575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b36329161097e9160040190815260200190565b6020604051808303816000875af115801561099d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c191906135a5565b15155b610a50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610639565b80515161ea6011610ae3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610639565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610b19575042816040015167ffffffffffffffff1611155b610bcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610c749061357e565b95505080604001519550508080610c8a906135be565b91505061068e565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610d4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610639565b600354600090610d7d90700100000000000000000000000000000000900467ffffffffffffffff16846135f6565b610d919067ffffffffffffffff168761361f565b6003805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c169390931793909317929092169190911790915560009081526002602052604090208390559050610e6f3330610e488467016345785d8a0000613636565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1692919061294e565b6003546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60088054610509906134cd565b60045467ffffffffffffffff888116911614610f8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c6173745665726966696564426174636820646f6573206e6f74206d6160648201527f7463680000000000000000000000000000000000000000000000000000000000608482015260a401610639565b8667ffffffffffffffff168667ffffffffffffffff1611611056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610639565b60035467ffffffffffffffff6801000000000000000090910481169087161115611129576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a76657269667942617463686573908201527f3a20626174636820646f6573206e6f742068617665206265656e20736571756560648201527f6e63656400000000000000000000000000000000000000000000000000000000608482015260a401610639565b600061113788888888611574565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161116c9190613673565b602060405180830381855afa158015611189573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906111ac91906135a5565b6111b691906136be565b6007546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d9161122091899189918991906004016136d2565b602060405180830381865afa15801561123d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611261919061374c565b6112ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610639565b61133d336112fb8b8b6135f6565b67ffffffffffffffff1661130d6118cf565b6113179190613636565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff169190612a2a565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a1617815560068790556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820189905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b1580156113df57600080fd5b505af11580156113f3573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8b1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a3505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146114ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b67ffffffffffffffff808516600090815260026020526040808220549286168252902054606091908061164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610639565b604080516101ac810190915261016c8152602081016116b5565b8160005b60088110156116ae577bffffffff0000000000000000000000000000000000000000000000006020820284901c60c01b16825260089091019060010161166d565b5092915050565b6116c181600654611669565b90506116cd8187611669565b90506116d98185611669565b90506116e58184611669565b90506116f18188611669565b60c08a811b825289811b6008830152600954901b60108201523360601b6018909101525092505050949350505050565b60035460009067ffffffffffffffff7001000000000000000000000000000000008204811691611770917801000000000000000000000000000000000000000000000000909104166001613769565b61177a91906135f6565b6117969067ffffffffffffffff16670de0b6b3a7640000613636565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461184e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061156990831515815260200190565b600080546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829162010000900473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015611944573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196891906135a5565b60045460035491925060009167ffffffffffffffff918216916801000000000000000082048116916119cd91700100000000000000000000000000000000820481169178010000000000000000000000000000000000000000000000009004166135f6565b6119d79190613769565b6119e191906135f6565b67ffffffffffffffff1690506119f78183613795565b9250505090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611ab1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b6008611abd82826137f7565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b20816040516115699190612e09565b600054610100900460ff1615808015611b0d5750600054600160ff909116105b80611b275750303b158015611b27575060005460ff166001145b611bb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610639565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611c1157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602179055600780549091168a83161790556006889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c0100000000000000000000000000000000000000000000000000000000871515021790556008611d2985826137f7565b50600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600a611d6a83826137f7565b508015611dce57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114611eb7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610639565b805180611f6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b60035467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691611fb7918491700100000000000000000000000000000000900416613911565b1115612045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610639565b60035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205491937001000000000000000000000000000000009004909216915b848110156123b05760008682815181106120a5576120a5613520565b6020026020010151905083806120ba9061357e565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114612213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610639565b61221e60018861361f565b83036122f6574262093a8083604001516122389190613769565b67ffffffffffffffff1611156122f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610639565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c0160405160208183030381529060405280519060200120935085806123989061357e565b965050505080806123a8906135be565b915050612089565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260026020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461255d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610639565b6000612567611721565b9050818111156125f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610639565b61ea6083511061268b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610639565b6000546126b69062010000900473ffffffffffffffffffffffffffffffffffffffff1633308461294e565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015612726573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274a91906135a5565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff169060186127848361357e565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050838051906020012081426040516020016127fd93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260019093529120553233036128eb57600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2612948565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161293f93929190613929565b60405180910390a25b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526129489085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a85565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052612a809084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016129a8565b505050565b6000612ae7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612b919092919063ffffffff16565b805190915015612a805780806020019051810190612b05919061374c565b612a80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610639565b6060612ba08484600085612baa565b90505b9392505050565b606082471015612c3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610639565b73ffffffffffffffffffffffffffffffffffffffff85163b612cba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610639565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612ce39190613673565b60006040518083038185875af1925050503d8060008114612d20576040519150601f19603f3d011682016040523d82523d6000602084013e612d25565b606091505b5091509150612d35828286612d40565b979650505050505050565b60608315612d4f575081612ba3565b825115612d5f5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106399190612e09565b60005b83811015612dae578181015183820152602001612d96565b838111156129485750506000910152565b60008151808452612dd7816020860160208601612d93565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612ba36020830184612dbf565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715612e6e57612e6e612e1c565b60405290565b6040516060810167ffffffffffffffff81118282101715612e6e57612e6e612e1c565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612ede57612ede612e1c565b604052919050565b600067ffffffffffffffff821115612f0057612f00612e1c565b5060051b60200190565b600082601f830112612f1b57600080fd5b813567ffffffffffffffff811115612f3557612f35612e1c565b612f6660207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612e97565b818152846020838601011115612f7b57600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114612fb057600080fd5b919050565b60006020808385031215612fc857600080fd5b823567ffffffffffffffff80821115612fe057600080fd5b818501915085601f830112612ff457600080fd5b813561300761300282612ee6565b612e97565b81815260059190911b8301840190848101908883111561302657600080fd5b8585015b838110156130dd578035858111156130425760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018113156130785760008081fd5b613080612e4b565b89830135888111156130925760008081fd5b6130a08e8c83870101612f0a565b8252506040808401358b83015260606130ba818601612f98565b828401526130c9848601612f98565b90830152508552505091860191860161302a565b5098975050505050505050565b80604081018310156130fb57600080fd5b92915050565b6000806000806000806000610180888a03121561311d57600080fd5b61312688612f98565b965061313460208901612f98565b955060408801359450606088013593506131518960808a016130ea565b925061014088018981111561316557600080fd5b60c0890192506131758a826130ea565b91505092959891949750929550565b60006020828403121561319657600080fd5b612ba382612f98565b73ffffffffffffffffffffffffffffffffffffffff811681146131c157600080fd5b50565b8035612fb08161319f565b6000602082840312156131e157600080fd5b8135612ba38161319f565b6000806000806080858703121561320257600080fd5b61320b85612f98565b935061321960208601612f98565b93969395505050506040820135916060013590565b80151581146131c157600080fd5b8035612fb08161322e565b60006020828403121561325957600080fd5b8135612ba38161322e565b60006020828403121561327657600080fd5b813567ffffffffffffffff81111561328d57600080fd5b61329984828501612f0a565b949350505050565b60008060008060008060008060006101208a8c0312156132c057600080fd5b89356132cb8161319f565b985060208a01356132db8161319f565b97506132e960408b016131c4565b965060608a013595506132fe60808b016131c4565b945061330c60a08b0161323c565b935060c08a013567ffffffffffffffff8082111561332957600080fd5b6133358d838e01612f0a565b945061334360e08d01612f98565b93506101008c013591508082111561335a57600080fd5b506133678c828d01612f0a565b9150509295985092959850929598565b6000602080838503121561338a57600080fd5b823567ffffffffffffffff808211156133a257600080fd5b818501915085601f8301126133b657600080fd5b81356133c461300282612ee6565b81815260059190911b830184019084810190888311156133e357600080fd5b8585015b838110156130dd578035858111156133ff5760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018113156134355760008081fd5b61343d612e74565b898301358881111561344f5760008081fd5b61345d8e8c83870101612f0a565b8252506040808401358b830152613475838501612f98565b90820152855250509186019186016133e7565b6000806040838503121561349b57600080fd5b823567ffffffffffffffff8111156134b257600080fd5b6134be85828601612f0a565b95602094909401359450505050565b600181811c908216806134e157607f821691505b60208210810361351a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681810361359b5761359b61354f565b6001019392505050565b6000602082840312156135b757600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036135ef576135ef61354f565b5060010190565b600067ffffffffffffffff838116908316818110156136175761361761354f565b039392505050565b6000828210156136315761363161354f565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561366e5761366e61354f565b500290565b60008251613685818460208701612d93565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826136cd576136cd61368f565b500690565b61012081016040808784376000838201818152879190815b600281101561370a578484833790840182815292840192906001016136ea565b5050828760c0870137610100850181815286935091505b6001811015613740578251825260209283019290910190600101613721565b50505095945050505050565b60006020828403121561375e57600080fd5b8151612ba38161322e565b600067ffffffffffffffff80831681851680830382111561378c5761378c61354f565b01949350505050565b6000826137a4576137a461368f565b500490565b601f821115612a8057600081815260208120601f850160051c810160208610156137d05750805b601f850160051c820191505b818110156137ef578281556001016137dc565b505050505050565b815167ffffffffffffffff81111561381157613811612e1c565b6138258161381f84546134cd565b846137a9565b602080601f83116001811461387857600084156138425750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556137ef565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156138c5578886015182559484019460019091019084016138a6565b508582101561390157878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156139245761392461354f565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff8316602082015260606040820152600061395e6060830184612dbf565b9594505050505056fea26469706673582212205ac85284b242f7df6b7b328555cdf7864ab45be1d500c36a27b08fcd2c9e403164736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101da5760003560e01c8063ac2eba9811610104578063d02103ca116100a2578063e7a7ed0211610071578063e7a7ed021461048a578063e8bf92ed146104ba578063eaeb077b146104da578063f7552761146104ed57600080fd5b8063d02103ca14610407578063d2fd1b3114610427578063d8d1091b1461043a578063d8f54db01461044d57600080fd5b8063b4d63f58116100de578063b4d63f581461035d578063b6b0b0971461037d578063c89e42df146103c8578063cfa8ed47146103db57600080fd5b8063ac2eba9814610337578063adc879e914610340578063b02286c01461035457600080fd5b80636b8616ce1161017c5780637fcb36531161014b5780637fcb3653146102fe5780638c4a0af71461031257806399f5634e14610325578063ab9fc5ef1461032d57600080fd5b80636b8616ce146102a25780636ff512cc146102d05780637152facf146102e357806379847057146102f657600080fd5b8063423fa856116101b8578063423fa8561461023f578063456052671461025f578063542028d51461028757806355b925e61461028f57600080fd5b8063107bf28c146101df57806319d8ac61146101fd5780633c1582671461022a575b600080fd5b6101e76104fc565b6040516101f49190612e09565b60405180910390f35b6003546102119067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101f4565b61023d610238366004612fb5565b61058a565b005b6003546102119068010000000000000000900467ffffffffffffffff1681565b60035461021190700100000000000000000000000000000000900467ffffffffffffffff1681565b6101e7610ebc565b61023d61029d366004613101565b610ec9565b6102c26102b0366004613184565b60016020526000908152604090205481565b6040519081526020016101f4565b61023d6102de3660046131cf565b611439565b6101e76102f13660046131ec565b611574565b6102c2611721565b6004546102119067ffffffffffffffff1681565b61023d610320366004613247565b61179b565b6102c26118cf565b61021162093a8081565b6102c260065481565b6009546102119067ffffffffffffffff1681565b6102c261ea6081565b6102c261036b366004613184565b60026020526000908152604090205481565b6000546103a39062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f4565b61023d6103d6366004613264565b6119fe565b6004546103a39068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b61023d6104353660046132a1565b611aed565b61023d610448366004613377565b611dda565b60045461047a907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016101f4565b600354610211907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6007546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b61023d6104e8366004613488565b612480565b6102c267016345785d8a000081565b600a8054610509906134cd565b80601f0160208091040260200160405190810160405280929190818152602001828054610535906134cd565b80156105825780601f1061055757610100808354040283529160200191610582565b820191906000526020600020905b81548152906001019060200180831161056557829003601f168201915b505050505081565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b805160035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610c925760008782815181106106aa576106aa613520565b602002602001015190506000816060015167ffffffffffffffff16111561091557836106d58161357e565b94505060008160000151805190602001208260200151836060015160405160200161073893929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff881660009081526001909352912054909150811461083d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b816060015167ffffffffffffffff16826040015167ffffffffffffffff16101561090f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610639565b50610ae3565b602081015115806109c4575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b36329161097e9160040190815260200190565b6020604051808303816000875af115801561099d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c191906135a5565b15155b610a50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610639565b80515161ea6011610ae3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610639565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610b19575042816040015167ffffffffffffffff1611155b610bcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610c749061357e565b95505080604001519550508080610c8a906135be565b91505061068e565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610d4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610639565b600354600090610d7d90700100000000000000000000000000000000900467ffffffffffffffff16846135f6565b610d919067ffffffffffffffff168761361f565b6003805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c169390931793909317929092169190911790915560009081526002602052604090208390559050610e6f3330610e488467016345785d8a0000613636565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1692919061294e565b6003546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60088054610509906134cd565b60045467ffffffffffffffff888116911614610f8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c6173745665726966696564426174636820646f6573206e6f74206d6160648201527f7463680000000000000000000000000000000000000000000000000000000000608482015260a401610639565b8667ffffffffffffffff168667ffffffffffffffff1611611056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610639565b60035467ffffffffffffffff6801000000000000000090910481169087161115611129576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a76657269667942617463686573908201527f3a20626174636820646f6573206e6f742068617665206265656e20736571756560648201527f6e63656400000000000000000000000000000000000000000000000000000000608482015260a401610639565b600061113788888888611574565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161116c9190613673565b602060405180830381855afa158015611189573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906111ac91906135a5565b6111b691906136be565b6007546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d9161122091899189918991906004016136d2565b602060405180830381865afa15801561123d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611261919061374c565b6112ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610639565b61133d336112fb8b8b6135f6565b67ffffffffffffffff1661130d6118cf565b6113179190613636565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff169190612a2a565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a1617815560068790556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820189905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b1580156113df57600080fd5b505af11580156113f3573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8b1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a3505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146114ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b67ffffffffffffffff808516600090815260026020526040808220549286168252902054606091908061164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610639565b604080516101ac810190915261016c8152602081016116b5565b8160005b60088110156116ae577bffffffff0000000000000000000000000000000000000000000000006020820284901c60c01b16825260089091019060010161166d565b5092915050565b6116c181600654611669565b90506116cd8187611669565b90506116d98185611669565b90506116e58184611669565b90506116f18188611669565b60c08a811b825289811b6008830152600954901b60108201523360601b6018909101525092505050949350505050565b60035460009067ffffffffffffffff7001000000000000000000000000000000008204811691611770917801000000000000000000000000000000000000000000000000909104166001613769565b61177a91906135f6565b6117969067ffffffffffffffff16670de0b6b3a7640000613636565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461184e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061156990831515815260200190565b600080546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829162010000900473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015611944573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196891906135a5565b60045460035491925060009167ffffffffffffffff918216916801000000000000000082048116916119cd91700100000000000000000000000000000000820481169178010000000000000000000000000000000000000000000000009004166135f6565b6119d79190613769565b6119e191906135f6565b67ffffffffffffffff1690506119f78183613795565b9250505090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611ab1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b6008611abd82826137f7565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b20816040516115699190612e09565b600054610100900460ff1615808015611b0d5750600054600160ff909116105b80611b275750303b158015611b27575060005460ff166001145b611bb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610639565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611c1157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602179055600780549091168a83161790556006889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c0100000000000000000000000000000000000000000000000000000000871515021790556008611d2985826137f7565b50600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600a611d6a83826137f7565b508015611dce57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114611eb7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610639565b805180611f6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b60035467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691611fb7918491700100000000000000000000000000000000900416613911565b1115612045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610639565b60035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205491937001000000000000000000000000000000009004909216915b848110156123b05760008682815181106120a5576120a5613520565b6020026020010151905083806120ba9061357e565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114612213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610639565b61221e60018861361f565b83036122f6574262093a8083604001516122389190613769565b67ffffffffffffffff1611156122f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610639565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c0160405160208183030381529060405280519060200120935085806123989061357e565b965050505080806123a8906135be565b915050612089565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260026020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461255d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610639565b6000612567611721565b9050818111156125f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610639565b61ea6083511061268b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610639565b6000546126b69062010000900473ffffffffffffffffffffffffffffffffffffffff1633308461294e565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015612726573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274a91906135a5565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff169060186127848361357e565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050838051906020012081426040516020016127fd93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260019093529120553233036128eb57600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2612948565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161293f93929190613929565b60405180910390a25b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526129489085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a85565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052612a809084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016129a8565b505050565b6000612ae7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612b919092919063ffffffff16565b805190915015612a805780806020019051810190612b05919061374c565b612a80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610639565b6060612ba08484600085612baa565b90505b9392505050565b606082471015612c3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610639565b73ffffffffffffffffffffffffffffffffffffffff85163b612cba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610639565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612ce39190613673565b60006040518083038185875af1925050503d8060008114612d20576040519150601f19603f3d011682016040523d82523d6000602084013e612d25565b606091505b5091509150612d35828286612d40565b979650505050505050565b60608315612d4f575081612ba3565b825115612d5f5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106399190612e09565b60005b83811015612dae578181015183820152602001612d96565b838111156129485750506000910152565b60008151808452612dd7816020860160208601612d93565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612ba36020830184612dbf565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715612e6e57612e6e612e1c565b60405290565b6040516060810167ffffffffffffffff81118282101715612e6e57612e6e612e1c565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612ede57612ede612e1c565b604052919050565b600067ffffffffffffffff821115612f0057612f00612e1c565b5060051b60200190565b600082601f830112612f1b57600080fd5b813567ffffffffffffffff811115612f3557612f35612e1c565b612f6660207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612e97565b818152846020838601011115612f7b57600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114612fb057600080fd5b919050565b60006020808385031215612fc857600080fd5b823567ffffffffffffffff80821115612fe057600080fd5b818501915085601f830112612ff457600080fd5b813561300761300282612ee6565b612e97565b81815260059190911b8301840190848101908883111561302657600080fd5b8585015b838110156130dd578035858111156130425760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018113156130785760008081fd5b613080612e4b565b89830135888111156130925760008081fd5b6130a08e8c83870101612f0a565b8252506040808401358b83015260606130ba818601612f98565b828401526130c9848601612f98565b90830152508552505091860191860161302a565b5098975050505050505050565b80604081018310156130fb57600080fd5b92915050565b6000806000806000806000610180888a03121561311d57600080fd5b61312688612f98565b965061313460208901612f98565b955060408801359450606088013593506131518960808a016130ea565b925061014088018981111561316557600080fd5b60c0890192506131758a826130ea565b91505092959891949750929550565b60006020828403121561319657600080fd5b612ba382612f98565b73ffffffffffffffffffffffffffffffffffffffff811681146131c157600080fd5b50565b8035612fb08161319f565b6000602082840312156131e157600080fd5b8135612ba38161319f565b6000806000806080858703121561320257600080fd5b61320b85612f98565b935061321960208601612f98565b93969395505050506040820135916060013590565b80151581146131c157600080fd5b8035612fb08161322e565b60006020828403121561325957600080fd5b8135612ba38161322e565b60006020828403121561327657600080fd5b813567ffffffffffffffff81111561328d57600080fd5b61329984828501612f0a565b949350505050565b60008060008060008060008060006101208a8c0312156132c057600080fd5b89356132cb8161319f565b985060208a01356132db8161319f565b97506132e960408b016131c4565b965060608a013595506132fe60808b016131c4565b945061330c60a08b0161323c565b935060c08a013567ffffffffffffffff8082111561332957600080fd5b6133358d838e01612f0a565b945061334360e08d01612f98565b93506101008c013591508082111561335a57600080fd5b506133678c828d01612f0a565b9150509295985092959850929598565b6000602080838503121561338a57600080fd5b823567ffffffffffffffff808211156133a257600080fd5b818501915085601f8301126133b657600080fd5b81356133c461300282612ee6565b81815260059190911b830184019084810190888311156133e357600080fd5b8585015b838110156130dd578035858111156133ff5760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018113156134355760008081fd5b61343d612e74565b898301358881111561344f5760008081fd5b61345d8e8c83870101612f0a565b8252506040808401358b830152613475838501612f98565b90820152855250509186019186016133e7565b6000806040838503121561349b57600080fd5b823567ffffffffffffffff8111156134b257600080fd5b6134be85828601612f0a565b95602094909401359450505050565b600181811c908216806134e157607f821691505b60208210810361351a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681810361359b5761359b61354f565b6001019392505050565b6000602082840312156135b757600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036135ef576135ef61354f565b5060010190565b600067ffffffffffffffff838116908316818110156136175761361761354f565b039392505050565b6000828210156136315761363161354f565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561366e5761366e61354f565b500290565b60008251613685818460208701612d93565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826136cd576136cd61368f565b500690565b61012081016040808784376000838201818152879190815b600281101561370a578484833790840182815292840192906001016136ea565b5050828760c0870137610100850181815286935091505b6001811015613740578251825260209283019290910190600101613721565b50505095945050505050565b60006020828403121561375e57600080fd5b8151612ba38161322e565b600067ffffffffffffffff80831681851680830382111561378c5761378c61354f565b01949350505050565b6000826137a4576137a461368f565b500490565b601f821115612a8057600081815260208120601f850160051c810160208610156137d05750805b601f850160051c820191505b818110156137ef578281556001016137dc565b505050505050565b815167ffffffffffffffff81111561381157613811612e1c565b6138258161381f84546134cd565b846137a9565b602080601f83116001811461387857600084156138425750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556137ef565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156138c5578886015182559484019460019091019084016138a6565b508582101561390157878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156139245761392461354f565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff8316602082015260606040820152600061395e6060830184612dbf565b9594505050505056fea26469706673582212205ac85284b242f7df6b7b328555cdf7864ab45be1d500c36a27b08fcd2c9e403164736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5061399d806100206000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c8063ac2eba9811610104578063d02103ca116100a2578063e7a7ed0211610071578063e7a7ed021461048a578063e8bf92ed146104ba578063eaeb077b146104da578063f7552761146104ed57600080fd5b8063d02103ca14610407578063d2fd1b3114610427578063d8d1091b1461043a578063d8f54db01461044d57600080fd5b8063b4d63f58116100de578063b4d63f581461035d578063b6b0b0971461037d578063c89e42df146103c8578063cfa8ed47146103db57600080fd5b8063ac2eba9814610337578063adc879e914610340578063b02286c01461035457600080fd5b80636b8616ce1161017c5780637fcb36531161014b5780637fcb3653146102fe5780638c4a0af71461031257806399f5634e14610325578063ab9fc5ef1461032d57600080fd5b80636b8616ce146102a25780636ff512cc146102d05780637152facf146102e357806379847057146102f657600080fd5b8063423fa856116101b8578063423fa8561461023f578063456052671461025f578063542028d51461028757806355b925e61461028f57600080fd5b8063107bf28c146101df57806319d8ac61146101fd5780633c1582671461022a575b600080fd5b6101e76104fc565b6040516101f49190612e09565b60405180910390f35b6003546102119067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101f4565b61023d610238366004612fb5565b61058a565b005b6003546102119068010000000000000000900467ffffffffffffffff1681565b60035461021190700100000000000000000000000000000000900467ffffffffffffffff1681565b6101e7610ebc565b61023d61029d366004613101565b610ec9565b6102c26102b0366004613184565b60016020526000908152604090205481565b6040519081526020016101f4565b61023d6102de3660046131cf565b611439565b6101e76102f13660046131ec565b611574565b6102c2611721565b6004546102119067ffffffffffffffff1681565b61023d610320366004613247565b61179b565b6102c26118cf565b61021162093a8081565b6102c260065481565b6009546102119067ffffffffffffffff1681565b6102c261ea6081565b6102c261036b366004613184565b60026020526000908152604090205481565b6000546103a39062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f4565b61023d6103d6366004613264565b6119fe565b6004546103a39068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b61023d6104353660046132a1565b611aed565b61023d610448366004613377565b611dda565b60045461047a907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016101f4565b600354610211907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6007546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b61023d6104e8366004613488565b612480565b6102c267016345785d8a000081565b600a8054610509906134cd565b80601f0160208091040260200160405190810160405280929190818152602001828054610535906134cd565b80156105825780601f1061055757610100808354040283529160200191610582565b820191906000526020600020905b81548152906001019060200180831161056557829003601f168201915b505050505081565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b805160035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610c925760008782815181106106aa576106aa613520565b602002602001015190506000816060015167ffffffffffffffff16111561091557836106d58161357e565b94505060008160000151805190602001208260200151836060015160405160200161073893929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff881660009081526001909352912054909150811461083d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b816060015167ffffffffffffffff16826040015167ffffffffffffffff16101561090f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610639565b50610ae3565b602081015115806109c4575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b36329161097e9160040190815260200190565b6020604051808303816000875af115801561099d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c191906135a5565b15155b610a50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610639565b80515161ea6011610ae3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610639565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610b19575042816040015167ffffffffffffffff1611155b610bcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610c749061357e565b95505080604001519550508080610c8a906135be565b91505061068e565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610d4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610639565b600354600090610d7d90700100000000000000000000000000000000900467ffffffffffffffff16846135f6565b610d919067ffffffffffffffff168761361f565b6003805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c169390931793909317929092169190911790915560009081526002602052604090208390559050610e6f3330610e488467016345785d8a0000613636565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1692919061294e565b6003546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60088054610509906134cd565b60045467ffffffffffffffff888116911614610f8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c6173745665726966696564426174636820646f6573206e6f74206d6160648201527f7463680000000000000000000000000000000000000000000000000000000000608482015260a401610639565b8667ffffffffffffffff168667ffffffffffffffff1611611056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610639565b60035467ffffffffffffffff6801000000000000000090910481169087161115611129576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a76657269667942617463686573908201527f3a20626174636820646f6573206e6f742068617665206265656e20736571756560648201527f6e63656400000000000000000000000000000000000000000000000000000000608482015260a401610639565b600061113788888888611574565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161116c9190613673565b602060405180830381855afa158015611189573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906111ac91906135a5565b6111b691906136be565b6007546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d9161122091899189918991906004016136d2565b602060405180830381865afa15801561123d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611261919061374c565b6112ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610639565b61133d336112fb8b8b6135f6565b67ffffffffffffffff1661130d6118cf565b6113179190613636565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff169190612a2a565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a1617815560068790556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820189905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b1580156113df57600080fd5b505af11580156113f3573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8b1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a3505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146114ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b67ffffffffffffffff808516600090815260026020526040808220549286168252902054606091908061164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610639565b604080516101ac810190915261016c8152602081016116b5565b8160005b60088110156116ae577bffffffff0000000000000000000000000000000000000000000000006020820284901c60c01b16825260089091019060010161166d565b5092915050565b6116c181600654611669565b90506116cd8187611669565b90506116d98185611669565b90506116e58184611669565b90506116f18188611669565b60c08a811b825289811b6008830152600954901b60108201523360601b6018909101525092505050949350505050565b60035460009067ffffffffffffffff7001000000000000000000000000000000008204811691611770917801000000000000000000000000000000000000000000000000909104166001613769565b61177a91906135f6565b6117969067ffffffffffffffff16670de0b6b3a7640000613636565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461184e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061156990831515815260200190565b600080546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829162010000900473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015611944573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196891906135a5565b60045460035491925060009167ffffffffffffffff918216916801000000000000000082048116916119cd91700100000000000000000000000000000000820481169178010000000000000000000000000000000000000000000000009004166135f6565b6119d79190613769565b6119e191906135f6565b67ffffffffffffffff1690506119f78183613795565b9250505090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611ab1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b6008611abd82826137f7565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b20816040516115699190612e09565b600054610100900460ff1615808015611b0d5750600054600160ff909116105b80611b275750303b158015611b27575060005460ff166001145b611bb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610639565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611c1157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602179055600780549091168a83161790556006889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c0100000000000000000000000000000000000000000000000000000000871515021790556008611d2985826137f7565b50600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600a611d6a83826137f7565b508015611dce57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114611eb7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610639565b805180611f6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b60035467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691611fb7918491700100000000000000000000000000000000900416613911565b1115612045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610639565b60035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205491937001000000000000000000000000000000009004909216915b848110156123b05760008682815181106120a5576120a5613520565b6020026020010151905083806120ba9061357e565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114612213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610639565b61221e60018861361f565b83036122f6574262093a8083604001516122389190613769565b67ffffffffffffffff1611156122f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610639565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c0160405160208183030381529060405280519060200120935085806123989061357e565b965050505080806123a8906135be565b915050612089565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260026020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461255d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610639565b6000612567611721565b9050818111156125f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610639565b61ea6083511061268b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610639565b6000546126b69062010000900473ffffffffffffffffffffffffffffffffffffffff1633308461294e565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015612726573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274a91906135a5565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff169060186127848361357e565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050838051906020012081426040516020016127fd93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260019093529120553233036128eb57600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2612948565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161293f93929190613929565b60405180910390a25b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526129489085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a85565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052612a809084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016129a8565b505050565b6000612ae7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612b919092919063ffffffff16565b805190915015612a805780806020019051810190612b05919061374c565b612a80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610639565b6060612ba08484600085612baa565b90505b9392505050565b606082471015612c3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610639565b73ffffffffffffffffffffffffffffffffffffffff85163b612cba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610639565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612ce39190613673565b60006040518083038185875af1925050503d8060008114612d20576040519150601f19603f3d011682016040523d82523d6000602084013e612d25565b606091505b5091509150612d35828286612d40565b979650505050505050565b60608315612d4f575081612ba3565b825115612d5f5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106399190612e09565b60005b83811015612dae578181015183820152602001612d96565b838111156129485750506000910152565b60008151808452612dd7816020860160208601612d93565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612ba36020830184612dbf565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715612e6e57612e6e612e1c565b60405290565b6040516060810167ffffffffffffffff81118282101715612e6e57612e6e612e1c565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612ede57612ede612e1c565b604052919050565b600067ffffffffffffffff821115612f0057612f00612e1c565b5060051b60200190565b600082601f830112612f1b57600080fd5b813567ffffffffffffffff811115612f3557612f35612e1c565b612f6660207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612e97565b818152846020838601011115612f7b57600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114612fb057600080fd5b919050565b60006020808385031215612fc857600080fd5b823567ffffffffffffffff80821115612fe057600080fd5b818501915085601f830112612ff457600080fd5b813561300761300282612ee6565b612e97565b81815260059190911b8301840190848101908883111561302657600080fd5b8585015b838110156130dd578035858111156130425760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018113156130785760008081fd5b613080612e4b565b89830135888111156130925760008081fd5b6130a08e8c83870101612f0a565b8252506040808401358b83015260606130ba818601612f98565b828401526130c9848601612f98565b90830152508552505091860191860161302a565b5098975050505050505050565b80604081018310156130fb57600080fd5b92915050565b6000806000806000806000610180888a03121561311d57600080fd5b61312688612f98565b965061313460208901612f98565b955060408801359450606088013593506131518960808a016130ea565b925061014088018981111561316557600080fd5b60c0890192506131758a826130ea565b91505092959891949750929550565b60006020828403121561319657600080fd5b612ba382612f98565b73ffffffffffffffffffffffffffffffffffffffff811681146131c157600080fd5b50565b8035612fb08161319f565b6000602082840312156131e157600080fd5b8135612ba38161319f565b6000806000806080858703121561320257600080fd5b61320b85612f98565b935061321960208601612f98565b93969395505050506040820135916060013590565b80151581146131c157600080fd5b8035612fb08161322e565b60006020828403121561325957600080fd5b8135612ba38161322e565b60006020828403121561327657600080fd5b813567ffffffffffffffff81111561328d57600080fd5b61329984828501612f0a565b949350505050565b60008060008060008060008060006101208a8c0312156132c057600080fd5b89356132cb8161319f565b985060208a01356132db8161319f565b97506132e960408b016131c4565b965060608a013595506132fe60808b016131c4565b945061330c60a08b0161323c565b935060c08a013567ffffffffffffffff8082111561332957600080fd5b6133358d838e01612f0a565b945061334360e08d01612f98565b93506101008c013591508082111561335a57600080fd5b506133678c828d01612f0a565b9150509295985092959850929598565b6000602080838503121561338a57600080fd5b823567ffffffffffffffff808211156133a257600080fd5b818501915085601f8301126133b657600080fd5b81356133c461300282612ee6565b81815260059190911b830184019084810190888311156133e357600080fd5b8585015b838110156130dd578035858111156133ff5760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018113156134355760008081fd5b61343d612e74565b898301358881111561344f5760008081fd5b61345d8e8c83870101612f0a565b8252506040808401358b830152613475838501612f98565b90820152855250509186019186016133e7565b6000806040838503121561349b57600080fd5b823567ffffffffffffffff8111156134b257600080fd5b6134be85828601612f0a565b95602094909401359450505050565b600181811c908216806134e157607f821691505b60208210810361351a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681810361359b5761359b61354f565b6001019392505050565b6000602082840312156135b757600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036135ef576135ef61354f565b5060010190565b600067ffffffffffffffff838116908316818110156136175761361761354f565b039392505050565b6000828210156136315761363161354f565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561366e5761366e61354f565b500290565b60008251613685818460208701612d93565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826136cd576136cd61368f565b500690565b61012081016040808784376000838201818152879190815b600281101561370a578484833790840182815292840192906001016136ea565b5050828760c0870137610100850181815286935091505b6001811015613740578251825260209283019290910190600101613721565b50505095945050505050565b60006020828403121561375e57600080fd5b8151612ba38161322e565b600067ffffffffffffffff80831681851680830382111561378c5761378c61354f565b01949350505050565b6000826137a4576137a461368f565b500490565b601f821115612a8057600081815260208120601f850160051c810160208610156137d05750805b601f850160051c820191505b818110156137ef578281556001016137dc565b505050505050565b815167ffffffffffffffff81111561381157613811612e1c565b6138258161381f84546134cd565b846137a9565b602080601f83116001811461387857600084156138425750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556137ef565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156138c5578886015182559484019460019091019084016138a6565b508582101561390157878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156139245761392461354f565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff8316602082015260606040820152600061395e6060830184612dbf565b9594505050505056fea2646970667358221220ecb3c4ff4d122dc67c5da0cc301778205a6ea1d5c4b7b2c68e6ed0844bd454fb64736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101da5760003560e01c8063ac2eba9811610104578063d02103ca116100a2578063e7a7ed0211610071578063e7a7ed021461048a578063e8bf92ed146104ba578063eaeb077b146104da578063f7552761146104ed57600080fd5b8063d02103ca14610407578063d2fd1b3114610427578063d8d1091b1461043a578063d8f54db01461044d57600080fd5b8063b4d63f58116100de578063b4d63f581461035d578063b6b0b0971461037d578063c89e42df146103c8578063cfa8ed47146103db57600080fd5b8063ac2eba9814610337578063adc879e914610340578063b02286c01461035457600080fd5b80636b8616ce1161017c5780637fcb36531161014b5780637fcb3653146102fe5780638c4a0af71461031257806399f5634e14610325578063ab9fc5ef1461032d57600080fd5b80636b8616ce146102a25780636ff512cc146102d05780637152facf146102e357806379847057146102f657600080fd5b8063423fa856116101b8578063423fa8561461023f578063456052671461025f578063542028d51461028757806355b925e61461028f57600080fd5b8063107bf28c146101df57806319d8ac61146101fd5780633c1582671461022a575b600080fd5b6101e76104fc565b6040516101f49190612e09565b60405180910390f35b6003546102119067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101f4565b61023d610238366004612fb5565b61058a565b005b6003546102119068010000000000000000900467ffffffffffffffff1681565b60035461021190700100000000000000000000000000000000900467ffffffffffffffff1681565b6101e7610ebc565b61023d61029d366004613101565b610ec9565b6102c26102b0366004613184565b60016020526000908152604090205481565b6040519081526020016101f4565b61023d6102de3660046131cf565b611439565b6101e76102f13660046131ec565b611574565b6102c2611721565b6004546102119067ffffffffffffffff1681565b61023d610320366004613247565b61179b565b6102c26118cf565b61021162093a8081565b6102c260065481565b6009546102119067ffffffffffffffff1681565b6102c261ea6081565b6102c261036b366004613184565b60026020526000908152604090205481565b6000546103a39062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f4565b61023d6103d6366004613264565b6119fe565b6004546103a39068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b61023d6104353660046132a1565b611aed565b61023d610448366004613377565b611dda565b60045461047a907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016101f4565b600354610211907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6007546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b61023d6104e8366004613488565b612480565b6102c267016345785d8a000081565b600a8054610509906134cd565b80601f0160208091040260200160405190810160405280929190818152602001828054610535906134cd565b80156105825780601f1061055757610100808354040283529160200191610582565b820191906000526020600020905b81548152906001019060200180831161056557829003601f168201915b505050505081565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b805160035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610c925760008782815181106106aa576106aa613520565b602002602001015190506000816060015167ffffffffffffffff16111561091557836106d58161357e565b94505060008160000151805190602001208260200151836060015160405160200161073893929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff881660009081526001909352912054909150811461083d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b816060015167ffffffffffffffff16826040015167ffffffffffffffff16101561090f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610639565b50610ae3565b602081015115806109c4575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b36329161097e9160040190815260200190565b6020604051808303816000875af115801561099d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c191906135a5565b15155b610a50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610639565b80515161ea6011610ae3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610639565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610b19575042816040015167ffffffffffffffff1611155b610bcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610c749061357e565b95505080604001519550508080610c8a906135be565b91505061068e565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610d4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610639565b600354600090610d7d90700100000000000000000000000000000000900467ffffffffffffffff16846135f6565b610d919067ffffffffffffffff168761361f565b6003805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c169390931793909317929092169190911790915560009081526002602052604090208390559050610e6f3330610e488467016345785d8a0000613636565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1692919061294e565b6003546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60088054610509906134cd565b60045467ffffffffffffffff888116911614610f8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c6173745665726966696564426174636820646f6573206e6f74206d6160648201527f7463680000000000000000000000000000000000000000000000000000000000608482015260a401610639565b8667ffffffffffffffff168667ffffffffffffffff1611611056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610639565b60035467ffffffffffffffff6801000000000000000090910481169087161115611129576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a76657269667942617463686573908201527f3a20626174636820646f6573206e6f742068617665206265656e20736571756560648201527f6e63656400000000000000000000000000000000000000000000000000000000608482015260a401610639565b600061113788888888611574565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161116c9190613673565b602060405180830381855afa158015611189573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906111ac91906135a5565b6111b691906136be565b6007546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d9161122091899189918991906004016136d2565b602060405180830381865afa15801561123d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611261919061374c565b6112ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610639565b61133d336112fb8b8b6135f6565b67ffffffffffffffff1661130d6118cf565b6113179190613636565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff169190612a2a565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a1617815560068790556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820189905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b1580156113df57600080fd5b505af11580156113f3573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8b1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a3505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146114ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b67ffffffffffffffff808516600090815260026020526040808220549286168252902054606091908061164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610639565b604080516101ac810190915261016c8152602081016116b5565b8160005b60088110156116ae577bffffffff0000000000000000000000000000000000000000000000006020820284901c60c01b16825260089091019060010161166d565b5092915050565b6116c181600654611669565b90506116cd8187611669565b90506116d98185611669565b90506116e58184611669565b90506116f18188611669565b60c08a811b825289811b6008830152600954901b60108201523360601b6018909101525092505050949350505050565b60035460009067ffffffffffffffff7001000000000000000000000000000000008204811691611770917801000000000000000000000000000000000000000000000000909104166001613769565b61177a91906135f6565b6117969067ffffffffffffffff16670de0b6b3a7640000613636565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461184e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061156990831515815260200190565b600080546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829162010000900473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015611944573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196891906135a5565b60045460035491925060009167ffffffffffffffff918216916801000000000000000082048116916119cd91700100000000000000000000000000000000820481169178010000000000000000000000000000000000000000000000009004166135f6565b6119d79190613769565b6119e191906135f6565b67ffffffffffffffff1690506119f78183613795565b9250505090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611ab1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b6008611abd82826137f7565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b20816040516115699190612e09565b600054610100900460ff1615808015611b0d5750600054600160ff909116105b80611b275750303b158015611b27575060005460ff166001145b611bb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610639565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611c1157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602179055600780549091168a83161790556006889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c0100000000000000000000000000000000000000000000000000000000871515021790556008611d2985826137f7565b50600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600a611d6a83826137f7565b508015611dce57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114611eb7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610639565b805180611f6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b60035467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691611fb7918491700100000000000000000000000000000000900416613911565b1115612045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610639565b60035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205491937001000000000000000000000000000000009004909216915b848110156123b05760008682815181106120a5576120a5613520565b6020026020010151905083806120ba9061357e565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114612213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610639565b61221e60018861361f565b83036122f6574262093a8083604001516122389190613769565b67ffffffffffffffff1611156122f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610639565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c0160405160208183030381529060405280519060200120935085806123989061357e565b965050505080806123a8906135be565b915050612089565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260026020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461255d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610639565b6000612567611721565b9050818111156125f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610639565b61ea6083511061268b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610639565b6000546126b69062010000900473ffffffffffffffffffffffffffffffffffffffff1633308461294e565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015612726573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274a91906135a5565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff169060186127848361357e565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050838051906020012081426040516020016127fd93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260019093529120553233036128eb57600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2612948565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161293f93929190613929565b60405180910390a25b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526129489085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a85565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052612a809084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016129a8565b505050565b6000612ae7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612b919092919063ffffffff16565b805190915015612a805780806020019051810190612b05919061374c565b612a80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610639565b6060612ba08484600085612baa565b90505b9392505050565b606082471015612c3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610639565b73ffffffffffffffffffffffffffffffffffffffff85163b612cba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610639565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612ce39190613673565b60006040518083038185875af1925050503d8060008114612d20576040519150601f19603f3d011682016040523d82523d6000602084013e612d25565b606091505b5091509150612d35828286612d40565b979650505050505050565b60608315612d4f575081612ba3565b825115612d5f5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106399190612e09565b60005b83811015612dae578181015183820152602001612d96565b838111156129485750506000910152565b60008151808452612dd7816020860160208601612d93565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612ba36020830184612dbf565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715612e6e57612e6e612e1c565b60405290565b6040516060810167ffffffffffffffff81118282101715612e6e57612e6e612e1c565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612ede57612ede612e1c565b604052919050565b600067ffffffffffffffff821115612f0057612f00612e1c565b5060051b60200190565b600082601f830112612f1b57600080fd5b813567ffffffffffffffff811115612f3557612f35612e1c565b612f6660207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612e97565b818152846020838601011115612f7b57600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114612fb057600080fd5b919050565b60006020808385031215612fc857600080fd5b823567ffffffffffffffff80821115612fe057600080fd5b818501915085601f830112612ff457600080fd5b813561300761300282612ee6565b612e97565b81815260059190911b8301840190848101908883111561302657600080fd5b8585015b838110156130dd578035858111156130425760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018113156130785760008081fd5b613080612e4b565b89830135888111156130925760008081fd5b6130a08e8c83870101612f0a565b8252506040808401358b83015260606130ba818601612f98565b828401526130c9848601612f98565b90830152508552505091860191860161302a565b5098975050505050505050565b80604081018310156130fb57600080fd5b92915050565b6000806000806000806000610180888a03121561311d57600080fd5b61312688612f98565b965061313460208901612f98565b955060408801359450606088013593506131518960808a016130ea565b925061014088018981111561316557600080fd5b60c0890192506131758a826130ea565b91505092959891949750929550565b60006020828403121561319657600080fd5b612ba382612f98565b73ffffffffffffffffffffffffffffffffffffffff811681146131c157600080fd5b50565b8035612fb08161319f565b6000602082840312156131e157600080fd5b8135612ba38161319f565b6000806000806080858703121561320257600080fd5b61320b85612f98565b935061321960208601612f98565b93969395505050506040820135916060013590565b80151581146131c157600080fd5b8035612fb08161322e565b60006020828403121561325957600080fd5b8135612ba38161322e565b60006020828403121561327657600080fd5b813567ffffffffffffffff81111561328d57600080fd5b61329984828501612f0a565b949350505050565b60008060008060008060008060006101208a8c0312156132c057600080fd5b89356132cb8161319f565b985060208a01356132db8161319f565b97506132e960408b016131c4565b965060608a013595506132fe60808b016131c4565b945061330c60a08b0161323c565b935060c08a013567ffffffffffffffff8082111561332957600080fd5b6133358d838e01612f0a565b945061334360e08d01612f98565b93506101008c013591508082111561335a57600080fd5b506133678c828d01612f0a565b9150509295985092959850929598565b6000602080838503121561338a57600080fd5b823567ffffffffffffffff808211156133a257600080fd5b818501915085601f8301126133b657600080fd5b81356133c461300282612ee6565b81815260059190911b830184019084810190888311156133e357600080fd5b8585015b838110156130dd578035858111156133ff5760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018113156134355760008081fd5b61343d612e74565b898301358881111561344f5760008081fd5b61345d8e8c83870101612f0a565b8252506040808401358b830152613475838501612f98565b90820152855250509186019186016133e7565b6000806040838503121561349b57600080fd5b823567ffffffffffffffff8111156134b257600080fd5b6134be85828601612f0a565b95602094909401359450505050565b600181811c908216806134e157607f821691505b60208210810361351a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681810361359b5761359b61354f565b6001019392505050565b6000602082840312156135b757600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036135ef576135ef61354f565b5060010190565b600067ffffffffffffffff838116908316818110156136175761361761354f565b039392505050565b6000828210156136315761363161354f565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561366e5761366e61354f565b500290565b60008251613685818460208701612d93565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826136cd576136cd61368f565b500690565b61012081016040808784376000838201818152879190815b600281101561370a578484833790840182815292840192906001016136ea565b5050828760c0870137610100850181815286935091505b6001811015613740578251825260209283019290910190600101613721565b50505095945050505050565b60006020828403121561375e57600080fd5b8151612ba38161322e565b600067ffffffffffffffff80831681851680830382111561378c5761378c61354f565b01949350505050565b6000826137a4576137a461368f565b500490565b601f821115612a8057600081815260208120601f850160051c810160208610156137d05750805b601f850160051c820191505b818110156137ef578281556001016137dc565b505050505050565b815167ffffffffffffffff81111561381157613811612e1c565b6138258161381f84546134cd565b846137a9565b602080601f83116001811461387857600084156138425750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556137ef565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156138c5578886015182559484019460019091019084016138a6565b508582101561390157878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156139245761392461354f565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff8316602082015260606040820152600061395e6060830184612dbf565b9594505050505056fea2646970667358221220ecb3c4ff4d122dc67c5da0cc301778205a6ea1d5c4b7b2c68e6ed0844bd454fb64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/ProofOfEfficiencyMock.json b/compiled-contracts/ProofOfEfficiencyMock.json index b076d1fd6..80ca00ab1 100644 --- a/compiled-contracts/ProofOfEfficiencyMock.json +++ b/compiled-contracts/ProofOfEfficiencyMock.json @@ -920,8 +920,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506147ed806100206000396000f3fe608060405234801561001057600080fd5b50600436106102de5760003560e01c80639b79676011610186578063d02103ca116100e3578063d8f54db011610097578063eaeb077b11610071578063eaeb077b14610739578063f2fde38b1461074c578063f75527611461075f57600080fd5b8063d8f54db0146106ac578063e7a7ed02146106e9578063e8bf92ed1461071957600080fd5b8063d2fd1b31116100c8578063d2fd1b3114610673578063d307b74314610686578063d8d1091b1461069957600080fd5b8063d02103ca14610640578063d0ae98dd1461066057600080fd5b8063b4d63f581161013a578063c0cad3021161011f578063c0cad302146105ee578063c89e42df14610601578063cfa8ed471461061457600080fd5b8063b4d63f58146105a8578063b6b0b097146105c857600080fd5b8063ac2eba981161016b578063ac2eba9814610582578063adc879e91461058b578063b02286c01461059f57600080fd5b80639b79676014610565578063ab9fc5ef1461057857600080fd5b80636b8616ce1161023f57806379847057116101f35780638da5cb5b116101cd5780638da5cb5b1461050b57806396dc3d391461054a57806399f5634e1461055d57600080fd5b806379847057146104dc5780637fcb3653146104e45780638c4a0af7146104f857600080fd5b8063715018a611610224578063715018a6146104ae5780637152facf146104b6578063748608de146104c957600080fd5b80636b8616ce1461047b5780636ff512cc1461049b57600080fd5b806345605267116102965780635437988d1161027b5780635437988d146103a657806355b925e6146103b9578063574f649e146103cc57600080fd5b80634560526714610376578063542028d51461039e57600080fd5b80631a26da14116102c75780631a26da141461032e5780633c15826714610343578063423fa8561461035657600080fd5b8063107bf28c146102e357806319d8ac6114610301575b600080fd5b6102eb61076e565b6040516102f89190613ba3565b60405180910390f35b6003546103159067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102f8565b61034161033c366004613bd3565b6107fc565b005b610341610351366004613d79565b610821565b6003546103159068010000000000000000900467ffffffffffffffff1681565b60035461031590700100000000000000000000000000000000900467ffffffffffffffff1681565b6102eb611153565b6103416103b4366004613edb565b611160565b6103416103c7366004613f0f565b6111af565b61046d6103da366004613f92565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b6040519081526020016102f8565b61046d610489366004614008565b60016020526000908152604090205481565b6103416104a9366004613edb565b61171f565b61034161185a565b6102eb6104c4366004614023565b61186e565b6103416104d7366004613f0f565b611a1b565b61046d611e24565b6004546103159067ffffffffffffffff1681565b61034161050636600461407e565b611e9e565b603d5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102f8565b610341610558366004614008565b611fd2565b61046d612015565b610341610573366004614008565b612144565b61031562093a8081565b61046d60065481565b6009546103159067ffffffffffffffff1681565b61046d61ea6081565b61046d6105b6366004614008565b60026020526000908152604090205481565b6000546105259062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6103416105fc36600461409b565b612193565b61034161060f36600461409b565b6121ab565b6004546105259068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546105259073ffffffffffffffffffffffffffffffffffffffff1681565b61046d61066e366004614023565b61229a565b6103416106813660046140d8565b612594565b6103416106943660046141ae565b612889565b6103416106a73660046141c7565b612896565b6004546106d9907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016102f8565b600354610315907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6007546105259073ffffffffffffffffffffffffffffffffffffffff1681565b6103416107473660046142d8565b612f3c565b61034161075a366004613edb565b61340a565b61046d67016345785d8a000081565b600a805461077b9061431d565b80601f01602080910402602001604051908101604052809291908181526020018280546107a79061431d565b80156107f45780601f106107c9576101008083540402835291602001916107f4565b820191906000526020600020905b8154815290600101906020018083116107d757829003601f168201915b505050505081565b6108046134c1565b67ffffffffffffffff909116600090815260026020526040902055565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146108d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b805160035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610f2957600087828151811061094157610941614370565b602002602001015190506000816060015167ffffffffffffffff161115610bac578361096c816143ce565b9450506000816000015180519060200120826020015183606001516040516020016109cf93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114610ad4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610ba6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016108d0565b50610d7a565b60208101511580610c5b575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610c159160040190815260200190565b6020604051808303816000875af1158015610c34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5891906143f5565b15155b610ce7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016108d0565b80515161ea6011610d7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016108d0565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610db0575042816040015167ffffffffffffffff1611155b610e62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610f0b906143ce565b95505080604001519550508080610f219061440e565b915050610925565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610fe6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016108d0565b60035460009061101490700100000000000000000000000000000000900467ffffffffffffffff1684614446565b6110289067ffffffffffffffff168761446f565b6003805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152600260205260409020839055905061110633306110df8467016345785d8a0000614486565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16929190613542565b6003546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b6008805461077b9061431d565b6111686134c1565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60045467ffffffffffffffff888116911614611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c6173745665726966696564426174636820646f6573206e6f74206d6160648201527f7463680000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8667ffffffffffffffff168667ffffffffffffffff161161133c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a4016108d0565b60035467ffffffffffffffff680100000000000000009091048116908716111561140f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a76657269667942617463686573908201527f3a20626174636820646f6573206e6f742068617665206265656e20736571756560648201527f6e63656400000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b600061141d8888888861186e565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161145291906144c3565b602060405180830381855afa15801561146f573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061149291906143f5565b61149c919061450e565b6007546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916115069189918991899190600401614522565b602060405180830381865afa158015611523573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611547919061459c565b6115d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016108d0565b611623336115e18b8b614446565b67ffffffffffffffff166115f3612015565b6115fd9190614486565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16919061361e565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a1617815560068790556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820189905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b1580156116c557600080fd5b505af11580156116d9573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8b1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a3505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146117d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b6118626134c1565b61186c6000613679565b565b67ffffffffffffffff8085166000908152600260205260408082205492861682529020546060919080611949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b604080516101ac810190915261016c8152602081016119af565b8160005b60088110156119a8577bffffffff0000000000000000000000000000000000000000000000006020820284901c60c01b168252600890910190600101611967565b5092915050565b6119bb81600654611963565b90506119c78187611963565b90506119d38185611963565b90506119df8184611963565b90506119eb8188611963565b60c08a811b825289811b6008830152600954901b60108201523360601b6018909101525092505050949350505050565b611a236134c1565b60045467ffffffffffffffff888116911614611ae7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8667ffffffffffffffff168667ffffffffffffffff1611611bb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff6801000000000000000090910481169087161115611c82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b67ffffffffffffffff861660009081526002602052604090205480611d29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f74206578697374000060648201526084016108d0565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff891617815560068690556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820188905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b158015611dcb57600080fd5b505af1158015611ddf573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8a1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a35050505050505050565b60035460009067ffffffffffffffff7001000000000000000000000000000000008204811691611e739178010000000000000000000000000000000000000000000000009091041660016145b9565b611e7d9190614446565b611e999067ffffffffffffffff16670de0b6b3a7640000614486565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611f51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061184f90831515815260200190565b611fda6134c1565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b600080546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829162010000900473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561208a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ae91906143f5565b60045460035491925060009167ffffffffffffffff918216916801000000000000000082048116916121139170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614446565b61211d91906145b9565b6121279190614446565b67ffffffffffffffff16905061213d81836145e5565b9250505090565b61214c6134c1565b6003805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b61219b6134c1565b600a6121a78282614647565b5050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461225e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600861226a8282614647565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161184f9190613ba3565b60045460009067ffffffffffffffff868116911614612361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8467ffffffffffffffff168467ffffffffffffffff161161242a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff68010000000000000000909104811690851611156124fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b600061250a8686868661186e565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161253f91906144c3565b602060405180830381855afa15801561255c573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061257f91906143f5565b612589919061450e565b979650505050505050565b600054610100900460ff16158080156125b45750600054600160ff909116105b806125ce5750303b1580156125ce575060005460ff166001145b61265a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016108d0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156126b857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602179055600780549091168a83161790556006889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c01000000000000000000000000000000000000000000000000000000008715150217905560086127d08582614647565b50600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600a6128118382614647565b5061281a6136f0565b801561287d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6128916134c1565b600655565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108d0565b805180612a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612a73918491700100000000000000000000000000000000900416614761565b1115612b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016108d0565b60035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205491937001000000000000000000000000000000009004909216915b84811015612e6c576000868281518110612b6157612b61614370565b602002602001015190508380612b76906143ce565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114612ccf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016108d0565b612cda60018861446f565b8303612db2574262093a808360400151612cf491906145b9565b67ffffffffffffffff161115612db2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016108d0565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612e54906143ce565b96505050508080612e649061440e565b915050612b45565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260026020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114613019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108d0565b6000613023611e24565b9050818111156130b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016108d0565b61ea60835110613147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016108d0565b6000546131729062010000900473ffffffffffffffffffffffffffffffffffffffff16333084613542565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa1580156131e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061320691906143f5565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613240836143ce565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050838051906020012081426040516020016132b993929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260019093529120553233036133a757600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613404565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516133fb93929190614779565b60405180910390a25b50505050565b6134126134c1565b73ffffffffffffffffffffffffffffffffffffffff81166134b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108d0565b6134be81613679565b50565b603d5473ffffffffffffffffffffffffffffffffffffffff16331461186c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526134049085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261378f565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526136749084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161359c565b505050565b603d805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16613787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d0565b61186c61389b565b60006137f1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661393b9092919063ffffffff16565b805190915015613674578080602001905181019061380f919061459c565b613674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108d0565b600054610100900460ff16613932576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d0565b61186c33613679565b606061394a8484600085613954565b90505b9392505050565b6060824710156139e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016108d0565b73ffffffffffffffffffffffffffffffffffffffff85163b613a64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108d0565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613a8d91906144c3565b60006040518083038185875af1925050503d8060008114613aca576040519150601f19603f3d011682016040523d82523d6000602084013e613acf565b606091505b509150915061258982828660608315613ae957508161394d565b825115613af95782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d09190613ba3565b60005b83811015613b48578181015183820152602001613b30565b838111156134045750506000910152565b60008151808452613b71816020860160208601613b2d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061394d6020830184613b59565b803567ffffffffffffffff81168114613bce57600080fd5b919050565b60008060408385031215613be657600080fd5b613bef83613bb6565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613c4f57613c4f613bfd565b60405290565b6040516060810167ffffffffffffffff81118282101715613c4f57613c4f613bfd565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613cbf57613cbf613bfd565b604052919050565b600067ffffffffffffffff821115613ce157613ce1613bfd565b5060051b60200190565b600082601f830112613cfc57600080fd5b813567ffffffffffffffff811115613d1657613d16613bfd565b613d4760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613c78565b818152846020838601011115613d5c57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613d8c57600080fd5b823567ffffffffffffffff80821115613da457600080fd5b818501915085601f830112613db857600080fd5b8135613dcb613dc682613cc7565b613c78565b81815260059190911b83018401908481019088831115613dea57600080fd5b8585015b83811015613ea157803585811115613e065760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001811315613e3c5760008081fd5b613e44613c2c565b8983013588811115613e565760008081fd5b613e648e8c83870101613ceb565b8252506040808401358b8301526060613e7e818601613bb6565b82840152613e8d848601613bb6565b908301525085525050918601918601613dee565b5098975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146134be57600080fd5b8035613bce81613eae565b600060208284031215613eed57600080fd5b813561394d81613eae565b8060408101831015613f0957600080fd5b92915050565b6000806000806000806000610180888a031215613f2b57600080fd5b613f3488613bb6565b9650613f4260208901613bb6565b95506040880135945060608801359350613f5f8960808a01613ef8565b9250610140880189811115613f7357600080fd5b60c089019250613f838a82613ef8565b91505092959891949750929550565b600080600080600060a08688031215613faa57600080fd5b85359450602086013567ffffffffffffffff811115613fc857600080fd5b613fd488828901613ceb565b94505060408601359250613fea60608701613bb6565b91506080860135613ffa81613eae565b809150509295509295909350565b60006020828403121561401a57600080fd5b61394d82613bb6565b6000806000806080858703121561403957600080fd5b61404285613bb6565b935061405060208601613bb6565b93969395505050506040820135916060013590565b80151581146134be57600080fd5b8035613bce81614065565b60006020828403121561409057600080fd5b813561394d81614065565b6000602082840312156140ad57600080fd5b813567ffffffffffffffff8111156140c457600080fd5b6140d084828501613ceb565b949350505050565b60008060008060008060008060006101208a8c0312156140f757600080fd5b893561410281613eae565b985060208a013561411281613eae565b975061412060408b01613ed0565b965060608a0135955061413560808b01613ed0565b945061414360a08b01614073565b935060c08a013567ffffffffffffffff8082111561416057600080fd5b61416c8d838e01613ceb565b945061417a60e08d01613bb6565b93506101008c013591508082111561419157600080fd5b5061419e8c828d01613ceb565b9150509295985092959850929598565b6000602082840312156141c057600080fd5b5035919050565b600060208083850312156141da57600080fd5b823567ffffffffffffffff808211156141f257600080fd5b818501915085601f83011261420657600080fd5b8135614214613dc682613cc7565b81815260059190911b8301840190848101908883111561423357600080fd5b8585015b83811015613ea15780358581111561424f5760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018113156142855760008081fd5b61428d613c55565b898301358881111561429f5760008081fd5b6142ad8e8c83870101613ceb565b8252506040808401358b8301526142c5838501613bb6565b9082015285525050918601918601614237565b600080604083850312156142eb57600080fd5b823567ffffffffffffffff81111561430257600080fd5b61430e85828601613ceb565b95602094909401359450505050565b600181811c9082168061433157607f821691505b60208210810361436a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036143eb576143eb61439f565b6001019392505050565b60006020828403121561440757600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361443f5761443f61439f565b5060010190565b600067ffffffffffffffff838116908316818110156144675761446761439f565b039392505050565b6000828210156144815761448161439f565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144be576144be61439f565b500290565b600082516144d5818460208701613b2d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261451d5761451d6144df565b500690565b61012081016040808784376000838201818152879190815b600281101561455a5784848337908401828152928401929060010161453a565b5050828760c0870137610100850181815286935091505b6001811015614590578251825260209283019290910190600101614571565b50505095945050505050565b6000602082840312156145ae57600080fd5b815161394d81614065565b600067ffffffffffffffff8083168185168083038211156145dc576145dc61439f565b01949350505050565b6000826145f4576145f46144df565b500490565b601f82111561367457600081815260208120601f850160051c810160208610156146205750805b601f850160051c820191505b8181101561463f5782815560010161462c565b505050505050565b815167ffffffffffffffff81111561466157614661613bfd565b6146758161466f845461431d565b846145f9565b602080601f8311600181146146c857600084156146925750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561463f565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015614715578886015182559484019460019091019084016146f6565b508582101561475157878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156147745761477461439f565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006147ae6060830184613b59565b9594505050505056fea2646970667358221220895446fcae527ddbebdba0df9823dff71a7d3636cce583b7965cb9c5d5c32c8364736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102de5760003560e01c80639b79676011610186578063d02103ca116100e3578063d8f54db011610097578063eaeb077b11610071578063eaeb077b14610739578063f2fde38b1461074c578063f75527611461075f57600080fd5b8063d8f54db0146106ac578063e7a7ed02146106e9578063e8bf92ed1461071957600080fd5b8063d2fd1b31116100c8578063d2fd1b3114610673578063d307b74314610686578063d8d1091b1461069957600080fd5b8063d02103ca14610640578063d0ae98dd1461066057600080fd5b8063b4d63f581161013a578063c0cad3021161011f578063c0cad302146105ee578063c89e42df14610601578063cfa8ed471461061457600080fd5b8063b4d63f58146105a8578063b6b0b097146105c857600080fd5b8063ac2eba981161016b578063ac2eba9814610582578063adc879e91461058b578063b02286c01461059f57600080fd5b80639b79676014610565578063ab9fc5ef1461057857600080fd5b80636b8616ce1161023f57806379847057116101f35780638da5cb5b116101cd5780638da5cb5b1461050b57806396dc3d391461054a57806399f5634e1461055d57600080fd5b806379847057146104dc5780637fcb3653146104e45780638c4a0af7146104f857600080fd5b8063715018a611610224578063715018a6146104ae5780637152facf146104b6578063748608de146104c957600080fd5b80636b8616ce1461047b5780636ff512cc1461049b57600080fd5b806345605267116102965780635437988d1161027b5780635437988d146103a657806355b925e6146103b9578063574f649e146103cc57600080fd5b80634560526714610376578063542028d51461039e57600080fd5b80631a26da14116102c75780631a26da141461032e5780633c15826714610343578063423fa8561461035657600080fd5b8063107bf28c146102e357806319d8ac6114610301575b600080fd5b6102eb61076e565b6040516102f89190613ba3565b60405180910390f35b6003546103159067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102f8565b61034161033c366004613bd3565b6107fc565b005b610341610351366004613d79565b610821565b6003546103159068010000000000000000900467ffffffffffffffff1681565b60035461031590700100000000000000000000000000000000900467ffffffffffffffff1681565b6102eb611153565b6103416103b4366004613edb565b611160565b6103416103c7366004613f0f565b6111af565b61046d6103da366004613f92565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b6040519081526020016102f8565b61046d610489366004614008565b60016020526000908152604090205481565b6103416104a9366004613edb565b61171f565b61034161185a565b6102eb6104c4366004614023565b61186e565b6103416104d7366004613f0f565b611a1b565b61046d611e24565b6004546103159067ffffffffffffffff1681565b61034161050636600461407e565b611e9e565b603d5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102f8565b610341610558366004614008565b611fd2565b61046d612015565b610341610573366004614008565b612144565b61031562093a8081565b61046d60065481565b6009546103159067ffffffffffffffff1681565b61046d61ea6081565b61046d6105b6366004614008565b60026020526000908152604090205481565b6000546105259062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6103416105fc36600461409b565b612193565b61034161060f36600461409b565b6121ab565b6004546105259068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546105259073ffffffffffffffffffffffffffffffffffffffff1681565b61046d61066e366004614023565b61229a565b6103416106813660046140d8565b612594565b6103416106943660046141ae565b612889565b6103416106a73660046141c7565b612896565b6004546106d9907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016102f8565b600354610315907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6007546105259073ffffffffffffffffffffffffffffffffffffffff1681565b6103416107473660046142d8565b612f3c565b61034161075a366004613edb565b61340a565b61046d67016345785d8a000081565b600a805461077b9061431d565b80601f01602080910402602001604051908101604052809291908181526020018280546107a79061431d565b80156107f45780601f106107c9576101008083540402835291602001916107f4565b820191906000526020600020905b8154815290600101906020018083116107d757829003601f168201915b505050505081565b6108046134c1565b67ffffffffffffffff909116600090815260026020526040902055565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146108d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b805160035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610f2957600087828151811061094157610941614370565b602002602001015190506000816060015167ffffffffffffffff161115610bac578361096c816143ce565b9450506000816000015180519060200120826020015183606001516040516020016109cf93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114610ad4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610ba6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016108d0565b50610d7a565b60208101511580610c5b575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610c159160040190815260200190565b6020604051808303816000875af1158015610c34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5891906143f5565b15155b610ce7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016108d0565b80515161ea6011610d7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016108d0565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610db0575042816040015167ffffffffffffffff1611155b610e62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610f0b906143ce565b95505080604001519550508080610f219061440e565b915050610925565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610fe6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016108d0565b60035460009061101490700100000000000000000000000000000000900467ffffffffffffffff1684614446565b6110289067ffffffffffffffff168761446f565b6003805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152600260205260409020839055905061110633306110df8467016345785d8a0000614486565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16929190613542565b6003546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b6008805461077b9061431d565b6111686134c1565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60045467ffffffffffffffff888116911614611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c6173745665726966696564426174636820646f6573206e6f74206d6160648201527f7463680000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8667ffffffffffffffff168667ffffffffffffffff161161133c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a4016108d0565b60035467ffffffffffffffff680100000000000000009091048116908716111561140f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a76657269667942617463686573908201527f3a20626174636820646f6573206e6f742068617665206265656e20736571756560648201527f6e63656400000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b600061141d8888888861186e565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161145291906144c3565b602060405180830381855afa15801561146f573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061149291906143f5565b61149c919061450e565b6007546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916115069189918991899190600401614522565b602060405180830381865afa158015611523573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611547919061459c565b6115d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016108d0565b611623336115e18b8b614446565b67ffffffffffffffff166115f3612015565b6115fd9190614486565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16919061361e565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a1617815560068790556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820189905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b1580156116c557600080fd5b505af11580156116d9573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8b1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a3505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146117d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b6118626134c1565b61186c6000613679565b565b67ffffffffffffffff8085166000908152600260205260408082205492861682529020546060919080611949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b604080516101ac810190915261016c8152602081016119af565b8160005b60088110156119a8577bffffffff0000000000000000000000000000000000000000000000006020820284901c60c01b168252600890910190600101611967565b5092915050565b6119bb81600654611963565b90506119c78187611963565b90506119d38185611963565b90506119df8184611963565b90506119eb8188611963565b60c08a811b825289811b6008830152600954901b60108201523360601b6018909101525092505050949350505050565b611a236134c1565b60045467ffffffffffffffff888116911614611ae7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8667ffffffffffffffff168667ffffffffffffffff1611611bb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff6801000000000000000090910481169087161115611c82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b67ffffffffffffffff861660009081526002602052604090205480611d29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f74206578697374000060648201526084016108d0565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff891617815560068690556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820188905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b158015611dcb57600080fd5b505af1158015611ddf573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8a1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a35050505050505050565b60035460009067ffffffffffffffff7001000000000000000000000000000000008204811691611e739178010000000000000000000000000000000000000000000000009091041660016145b9565b611e7d9190614446565b611e999067ffffffffffffffff16670de0b6b3a7640000614486565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611f51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061184f90831515815260200190565b611fda6134c1565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b600080546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829162010000900473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561208a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ae91906143f5565b60045460035491925060009167ffffffffffffffff918216916801000000000000000082048116916121139170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614446565b61211d91906145b9565b6121279190614446565b67ffffffffffffffff16905061213d81836145e5565b9250505090565b61214c6134c1565b6003805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b61219b6134c1565b600a6121a78282614647565b5050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461225e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600861226a8282614647565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161184f9190613ba3565b60045460009067ffffffffffffffff868116911614612361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8467ffffffffffffffff168467ffffffffffffffff161161242a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff68010000000000000000909104811690851611156124fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b600061250a8686868661186e565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161253f91906144c3565b602060405180830381855afa15801561255c573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061257f91906143f5565b612589919061450e565b979650505050505050565b600054610100900460ff16158080156125b45750600054600160ff909116105b806125ce5750303b1580156125ce575060005460ff166001145b61265a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016108d0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156126b857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602179055600780549091168a83161790556006889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c01000000000000000000000000000000000000000000000000000000008715150217905560086127d08582614647565b50600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600a6128118382614647565b5061281a6136f0565b801561287d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6128916134c1565b600655565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108d0565b805180612a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612a73918491700100000000000000000000000000000000900416614761565b1115612b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016108d0565b60035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205491937001000000000000000000000000000000009004909216915b84811015612e6c576000868281518110612b6157612b61614370565b602002602001015190508380612b76906143ce565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114612ccf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016108d0565b612cda60018861446f565b8303612db2574262093a808360400151612cf491906145b9565b67ffffffffffffffff161115612db2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016108d0565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612e54906143ce565b96505050508080612e649061440e565b915050612b45565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260026020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114613019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108d0565b6000613023611e24565b9050818111156130b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016108d0565b61ea60835110613147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016108d0565b6000546131729062010000900473ffffffffffffffffffffffffffffffffffffffff16333084613542565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa1580156131e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061320691906143f5565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613240836143ce565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050838051906020012081426040516020016132b993929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260019093529120553233036133a757600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613404565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516133fb93929190614779565b60405180910390a25b50505050565b6134126134c1565b73ffffffffffffffffffffffffffffffffffffffff81166134b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108d0565b6134be81613679565b50565b603d5473ffffffffffffffffffffffffffffffffffffffff16331461186c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526134049085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261378f565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526136749084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161359c565b505050565b603d805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16613787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d0565b61186c61389b565b60006137f1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661393b9092919063ffffffff16565b805190915015613674578080602001905181019061380f919061459c565b613674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108d0565b600054610100900460ff16613932576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d0565b61186c33613679565b606061394a8484600085613954565b90505b9392505050565b6060824710156139e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016108d0565b73ffffffffffffffffffffffffffffffffffffffff85163b613a64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108d0565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613a8d91906144c3565b60006040518083038185875af1925050503d8060008114613aca576040519150601f19603f3d011682016040523d82523d6000602084013e613acf565b606091505b509150915061258982828660608315613ae957508161394d565b825115613af95782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d09190613ba3565b60005b83811015613b48578181015183820152602001613b30565b838111156134045750506000910152565b60008151808452613b71816020860160208601613b2d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061394d6020830184613b59565b803567ffffffffffffffff81168114613bce57600080fd5b919050565b60008060408385031215613be657600080fd5b613bef83613bb6565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613c4f57613c4f613bfd565b60405290565b6040516060810167ffffffffffffffff81118282101715613c4f57613c4f613bfd565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613cbf57613cbf613bfd565b604052919050565b600067ffffffffffffffff821115613ce157613ce1613bfd565b5060051b60200190565b600082601f830112613cfc57600080fd5b813567ffffffffffffffff811115613d1657613d16613bfd565b613d4760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613c78565b818152846020838601011115613d5c57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613d8c57600080fd5b823567ffffffffffffffff80821115613da457600080fd5b818501915085601f830112613db857600080fd5b8135613dcb613dc682613cc7565b613c78565b81815260059190911b83018401908481019088831115613dea57600080fd5b8585015b83811015613ea157803585811115613e065760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001811315613e3c5760008081fd5b613e44613c2c565b8983013588811115613e565760008081fd5b613e648e8c83870101613ceb565b8252506040808401358b8301526060613e7e818601613bb6565b82840152613e8d848601613bb6565b908301525085525050918601918601613dee565b5098975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146134be57600080fd5b8035613bce81613eae565b600060208284031215613eed57600080fd5b813561394d81613eae565b8060408101831015613f0957600080fd5b92915050565b6000806000806000806000610180888a031215613f2b57600080fd5b613f3488613bb6565b9650613f4260208901613bb6565b95506040880135945060608801359350613f5f8960808a01613ef8565b9250610140880189811115613f7357600080fd5b60c089019250613f838a82613ef8565b91505092959891949750929550565b600080600080600060a08688031215613faa57600080fd5b85359450602086013567ffffffffffffffff811115613fc857600080fd5b613fd488828901613ceb565b94505060408601359250613fea60608701613bb6565b91506080860135613ffa81613eae565b809150509295509295909350565b60006020828403121561401a57600080fd5b61394d82613bb6565b6000806000806080858703121561403957600080fd5b61404285613bb6565b935061405060208601613bb6565b93969395505050506040820135916060013590565b80151581146134be57600080fd5b8035613bce81614065565b60006020828403121561409057600080fd5b813561394d81614065565b6000602082840312156140ad57600080fd5b813567ffffffffffffffff8111156140c457600080fd5b6140d084828501613ceb565b949350505050565b60008060008060008060008060006101208a8c0312156140f757600080fd5b893561410281613eae565b985060208a013561411281613eae565b975061412060408b01613ed0565b965060608a0135955061413560808b01613ed0565b945061414360a08b01614073565b935060c08a013567ffffffffffffffff8082111561416057600080fd5b61416c8d838e01613ceb565b945061417a60e08d01613bb6565b93506101008c013591508082111561419157600080fd5b5061419e8c828d01613ceb565b9150509295985092959850929598565b6000602082840312156141c057600080fd5b5035919050565b600060208083850312156141da57600080fd5b823567ffffffffffffffff808211156141f257600080fd5b818501915085601f83011261420657600080fd5b8135614214613dc682613cc7565b81815260059190911b8301840190848101908883111561423357600080fd5b8585015b83811015613ea15780358581111561424f5760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018113156142855760008081fd5b61428d613c55565b898301358881111561429f5760008081fd5b6142ad8e8c83870101613ceb565b8252506040808401358b8301526142c5838501613bb6565b9082015285525050918601918601614237565b600080604083850312156142eb57600080fd5b823567ffffffffffffffff81111561430257600080fd5b61430e85828601613ceb565b95602094909401359450505050565b600181811c9082168061433157607f821691505b60208210810361436a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036143eb576143eb61439f565b6001019392505050565b60006020828403121561440757600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361443f5761443f61439f565b5060010190565b600067ffffffffffffffff838116908316818110156144675761446761439f565b039392505050565b6000828210156144815761448161439f565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144be576144be61439f565b500290565b600082516144d5818460208701613b2d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261451d5761451d6144df565b500690565b61012081016040808784376000838201818152879190815b600281101561455a5784848337908401828152928401929060010161453a565b5050828760c0870137610100850181815286935091505b6001811015614590578251825260209283019290910190600101614571565b50505095945050505050565b6000602082840312156145ae57600080fd5b815161394d81614065565b600067ffffffffffffffff8083168185168083038211156145dc576145dc61439f565b01949350505050565b6000826145f4576145f46144df565b500490565b601f82111561367457600081815260208120601f850160051c810160208610156146205750805b601f850160051c820191505b8181101561463f5782815560010161462c565b505050505050565b815167ffffffffffffffff81111561466157614661613bfd565b6146758161466f845461431d565b846145f9565b602080601f8311600181146146c857600084156146925750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561463f565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015614715578886015182559484019460019091019084016146f6565b508582101561475157878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156147745761477461439f565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006147ae6060830184613b59565b9594505050505056fea2646970667358221220895446fcae527ddbebdba0df9823dff71a7d3636cce583b7965cb9c5d5c32c8364736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506147ed806100206000396000f3fe608060405234801561001057600080fd5b50600436106102de5760003560e01c80639b79676011610186578063d02103ca116100e3578063d8f54db011610097578063eaeb077b11610071578063eaeb077b14610739578063f2fde38b1461074c578063f75527611461075f57600080fd5b8063d8f54db0146106ac578063e7a7ed02146106e9578063e8bf92ed1461071957600080fd5b8063d2fd1b31116100c8578063d2fd1b3114610673578063d307b74314610686578063d8d1091b1461069957600080fd5b8063d02103ca14610640578063d0ae98dd1461066057600080fd5b8063b4d63f581161013a578063c0cad3021161011f578063c0cad302146105ee578063c89e42df14610601578063cfa8ed471461061457600080fd5b8063b4d63f58146105a8578063b6b0b097146105c857600080fd5b8063ac2eba981161016b578063ac2eba9814610582578063adc879e91461058b578063b02286c01461059f57600080fd5b80639b79676014610565578063ab9fc5ef1461057857600080fd5b80636b8616ce1161023f57806379847057116101f35780638da5cb5b116101cd5780638da5cb5b1461050b57806396dc3d391461054a57806399f5634e1461055d57600080fd5b806379847057146104dc5780637fcb3653146104e45780638c4a0af7146104f857600080fd5b8063715018a611610224578063715018a6146104ae5780637152facf146104b6578063748608de146104c957600080fd5b80636b8616ce1461047b5780636ff512cc1461049b57600080fd5b806345605267116102965780635437988d1161027b5780635437988d146103a657806355b925e6146103b9578063574f649e146103cc57600080fd5b80634560526714610376578063542028d51461039e57600080fd5b80631a26da14116102c75780631a26da141461032e5780633c15826714610343578063423fa8561461035657600080fd5b8063107bf28c146102e357806319d8ac6114610301575b600080fd5b6102eb61076e565b6040516102f89190613ba3565b60405180910390f35b6003546103159067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102f8565b61034161033c366004613bd3565b6107fc565b005b610341610351366004613d79565b610821565b6003546103159068010000000000000000900467ffffffffffffffff1681565b60035461031590700100000000000000000000000000000000900467ffffffffffffffff1681565b6102eb611153565b6103416103b4366004613edb565b611160565b6103416103c7366004613f0f565b6111af565b61046d6103da366004613f92565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b6040519081526020016102f8565b61046d610489366004614008565b60016020526000908152604090205481565b6103416104a9366004613edb565b61171f565b61034161185a565b6102eb6104c4366004614023565b61186e565b6103416104d7366004613f0f565b611a1b565b61046d611e24565b6004546103159067ffffffffffffffff1681565b61034161050636600461407e565b611e9e565b603d5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102f8565b610341610558366004614008565b611fd2565b61046d612015565b610341610573366004614008565b612144565b61031562093a8081565b61046d60065481565b6009546103159067ffffffffffffffff1681565b61046d61ea6081565b61046d6105b6366004614008565b60026020526000908152604090205481565b6000546105259062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6103416105fc36600461409b565b612193565b61034161060f36600461409b565b6121ab565b6004546105259068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546105259073ffffffffffffffffffffffffffffffffffffffff1681565b61046d61066e366004614023565b61229a565b6103416106813660046140d8565b612594565b6103416106943660046141ae565b612889565b6103416106a73660046141c7565b612896565b6004546106d9907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016102f8565b600354610315907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6007546105259073ffffffffffffffffffffffffffffffffffffffff1681565b6103416107473660046142d8565b612f3c565b61034161075a366004613edb565b61340a565b61046d67016345785d8a000081565b600a805461077b9061431d565b80601f01602080910402602001604051908101604052809291908181526020018280546107a79061431d565b80156107f45780601f106107c9576101008083540402835291602001916107f4565b820191906000526020600020905b8154815290600101906020018083116107d757829003601f168201915b505050505081565b6108046134c1565b67ffffffffffffffff909116600090815260026020526040902055565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146108d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b805160035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610f2957600087828151811061094157610941614370565b602002602001015190506000816060015167ffffffffffffffff161115610bac578361096c816143ce565b9450506000816000015180519060200120826020015183606001516040516020016109cf93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114610ad4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610ba6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016108d0565b50610d7a565b60208101511580610c5b575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610c159160040190815260200190565b6020604051808303816000875af1158015610c34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5891906143f5565b15155b610ce7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016108d0565b80515161ea6011610d7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016108d0565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610db0575042816040015167ffffffffffffffff1611155b610e62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610f0b906143ce565b95505080604001519550508080610f219061440e565b915050610925565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610fe6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016108d0565b60035460009061101490700100000000000000000000000000000000900467ffffffffffffffff1684614446565b6110289067ffffffffffffffff168761446f565b6003805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152600260205260409020839055905061110633306110df8467016345785d8a0000614486565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16929190613542565b6003546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b6008805461077b9061431d565b6111686134c1565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60045467ffffffffffffffff888116911614611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c6173745665726966696564426174636820646f6573206e6f74206d6160648201527f7463680000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8667ffffffffffffffff168667ffffffffffffffff161161133c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a4016108d0565b60035467ffffffffffffffff680100000000000000009091048116908716111561140f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a76657269667942617463686573908201527f3a20626174636820646f6573206e6f742068617665206265656e20736571756560648201527f6e63656400000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b600061141d8888888861186e565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161145291906144c3565b602060405180830381855afa15801561146f573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061149291906143f5565b61149c919061450e565b6007546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916115069189918991899190600401614522565b602060405180830381865afa158015611523573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611547919061459c565b6115d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016108d0565b611623336115e18b8b614446565b67ffffffffffffffff166115f3612015565b6115fd9190614486565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16919061361e565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a1617815560068790556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820189905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b1580156116c557600080fd5b505af11580156116d9573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8b1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a3505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146117d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b6118626134c1565b61186c6000613679565b565b67ffffffffffffffff8085166000908152600260205260408082205492861682529020546060919080611949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b604080516101ac810190915261016c8152602081016119af565b8160005b60088110156119a8577bffffffff0000000000000000000000000000000000000000000000006020820284901c60c01b168252600890910190600101611967565b5092915050565b6119bb81600654611963565b90506119c78187611963565b90506119d38185611963565b90506119df8184611963565b90506119eb8188611963565b60c08a811b825289811b6008830152600954901b60108201523360601b6018909101525092505050949350505050565b611a236134c1565b60045467ffffffffffffffff888116911614611ae7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8667ffffffffffffffff168667ffffffffffffffff1611611bb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff6801000000000000000090910481169087161115611c82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b67ffffffffffffffff861660009081526002602052604090205480611d29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f74206578697374000060648201526084016108d0565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff891617815560068690556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820188905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b158015611dcb57600080fd5b505af1158015611ddf573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8a1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a35050505050505050565b60035460009067ffffffffffffffff7001000000000000000000000000000000008204811691611e739178010000000000000000000000000000000000000000000000009091041660016145b9565b611e7d9190614446565b611e999067ffffffffffffffff16670de0b6b3a7640000614486565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611f51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061184f90831515815260200190565b611fda6134c1565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b600080546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829162010000900473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561208a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ae91906143f5565b60045460035491925060009167ffffffffffffffff918216916801000000000000000082048116916121139170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614446565b61211d91906145b9565b6121279190614446565b67ffffffffffffffff16905061213d81836145e5565b9250505090565b61214c6134c1565b6003805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b61219b6134c1565b600a6121a78282614647565b5050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461225e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600861226a8282614647565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161184f9190613ba3565b60045460009067ffffffffffffffff868116911614612361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8467ffffffffffffffff168467ffffffffffffffff161161242a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff68010000000000000000909104811690851611156124fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b600061250a8686868661186e565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161253f91906144c3565b602060405180830381855afa15801561255c573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061257f91906143f5565b612589919061450e565b979650505050505050565b600054610100900460ff16158080156125b45750600054600160ff909116105b806125ce5750303b1580156125ce575060005460ff166001145b61265a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016108d0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156126b857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602179055600780549091168a83161790556006889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c01000000000000000000000000000000000000000000000000000000008715150217905560086127d08582614647565b50600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600a6128118382614647565b5061281a6136f0565b801561287d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6128916134c1565b600655565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108d0565b805180612a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612a73918491700100000000000000000000000000000000900416614761565b1115612b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016108d0565b60035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205491937001000000000000000000000000000000009004909216915b84811015612e6c576000868281518110612b6157612b61614370565b602002602001015190508380612b76906143ce565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114612ccf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016108d0565b612cda60018861446f565b8303612db2574262093a808360400151612cf491906145b9565b67ffffffffffffffff161115612db2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016108d0565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612e54906143ce565b96505050508080612e649061440e565b915050612b45565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260026020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114613019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108d0565b6000613023611e24565b9050818111156130b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016108d0565b61ea60835110613147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016108d0565b6000546131729062010000900473ffffffffffffffffffffffffffffffffffffffff16333084613542565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa1580156131e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061320691906143f5565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613240836143ce565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050838051906020012081426040516020016132b993929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260019093529120553233036133a757600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613404565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516133fb93929190614779565b60405180910390a25b50505050565b6134126134c1565b73ffffffffffffffffffffffffffffffffffffffff81166134b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108d0565b6134be81613679565b50565b603d5473ffffffffffffffffffffffffffffffffffffffff16331461186c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526134049085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261378f565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526136749084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161359c565b505050565b603d805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16613787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d0565b61186c61389b565b60006137f1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661393b9092919063ffffffff16565b805190915015613674578080602001905181019061380f919061459c565b613674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108d0565b600054610100900460ff16613932576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d0565b61186c33613679565b606061394a8484600085613954565b90505b9392505050565b6060824710156139e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016108d0565b73ffffffffffffffffffffffffffffffffffffffff85163b613a64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108d0565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613a8d91906144c3565b60006040518083038185875af1925050503d8060008114613aca576040519150601f19603f3d011682016040523d82523d6000602084013e613acf565b606091505b509150915061258982828660608315613ae957508161394d565b825115613af95782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d09190613ba3565b60005b83811015613b48578181015183820152602001613b30565b838111156134045750506000910152565b60008151808452613b71816020860160208601613b2d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061394d6020830184613b59565b803567ffffffffffffffff81168114613bce57600080fd5b919050565b60008060408385031215613be657600080fd5b613bef83613bb6565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613c4f57613c4f613bfd565b60405290565b6040516060810167ffffffffffffffff81118282101715613c4f57613c4f613bfd565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613cbf57613cbf613bfd565b604052919050565b600067ffffffffffffffff821115613ce157613ce1613bfd565b5060051b60200190565b600082601f830112613cfc57600080fd5b813567ffffffffffffffff811115613d1657613d16613bfd565b613d4760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613c78565b818152846020838601011115613d5c57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613d8c57600080fd5b823567ffffffffffffffff80821115613da457600080fd5b818501915085601f830112613db857600080fd5b8135613dcb613dc682613cc7565b613c78565b81815260059190911b83018401908481019088831115613dea57600080fd5b8585015b83811015613ea157803585811115613e065760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001811315613e3c5760008081fd5b613e44613c2c565b8983013588811115613e565760008081fd5b613e648e8c83870101613ceb565b8252506040808401358b8301526060613e7e818601613bb6565b82840152613e8d848601613bb6565b908301525085525050918601918601613dee565b5098975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146134be57600080fd5b8035613bce81613eae565b600060208284031215613eed57600080fd5b813561394d81613eae565b8060408101831015613f0957600080fd5b92915050565b6000806000806000806000610180888a031215613f2b57600080fd5b613f3488613bb6565b9650613f4260208901613bb6565b95506040880135945060608801359350613f5f8960808a01613ef8565b9250610140880189811115613f7357600080fd5b60c089019250613f838a82613ef8565b91505092959891949750929550565b600080600080600060a08688031215613faa57600080fd5b85359450602086013567ffffffffffffffff811115613fc857600080fd5b613fd488828901613ceb565b94505060408601359250613fea60608701613bb6565b91506080860135613ffa81613eae565b809150509295509295909350565b60006020828403121561401a57600080fd5b61394d82613bb6565b6000806000806080858703121561403957600080fd5b61404285613bb6565b935061405060208601613bb6565b93969395505050506040820135916060013590565b80151581146134be57600080fd5b8035613bce81614065565b60006020828403121561409057600080fd5b813561394d81614065565b6000602082840312156140ad57600080fd5b813567ffffffffffffffff8111156140c457600080fd5b6140d084828501613ceb565b949350505050565b60008060008060008060008060006101208a8c0312156140f757600080fd5b893561410281613eae565b985060208a013561411281613eae565b975061412060408b01613ed0565b965060608a0135955061413560808b01613ed0565b945061414360a08b01614073565b935060c08a013567ffffffffffffffff8082111561416057600080fd5b61416c8d838e01613ceb565b945061417a60e08d01613bb6565b93506101008c013591508082111561419157600080fd5b5061419e8c828d01613ceb565b9150509295985092959850929598565b6000602082840312156141c057600080fd5b5035919050565b600060208083850312156141da57600080fd5b823567ffffffffffffffff808211156141f257600080fd5b818501915085601f83011261420657600080fd5b8135614214613dc682613cc7565b81815260059190911b8301840190848101908883111561423357600080fd5b8585015b83811015613ea15780358581111561424f5760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018113156142855760008081fd5b61428d613c55565b898301358881111561429f5760008081fd5b6142ad8e8c83870101613ceb565b8252506040808401358b8301526142c5838501613bb6565b9082015285525050918601918601614237565b600080604083850312156142eb57600080fd5b823567ffffffffffffffff81111561430257600080fd5b61430e85828601613ceb565b95602094909401359450505050565b600181811c9082168061433157607f821691505b60208210810361436a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036143eb576143eb61439f565b6001019392505050565b60006020828403121561440757600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361443f5761443f61439f565b5060010190565b600067ffffffffffffffff838116908316818110156144675761446761439f565b039392505050565b6000828210156144815761448161439f565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144be576144be61439f565b500290565b600082516144d5818460208701613b2d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261451d5761451d6144df565b500690565b61012081016040808784376000838201818152879190815b600281101561455a5784848337908401828152928401929060010161453a565b5050828760c0870137610100850181815286935091505b6001811015614590578251825260209283019290910190600101614571565b50505095945050505050565b6000602082840312156145ae57600080fd5b815161394d81614065565b600067ffffffffffffffff8083168185168083038211156145dc576145dc61439f565b01949350505050565b6000826145f4576145f46144df565b500490565b601f82111561367457600081815260208120601f850160051c810160208610156146205750805b601f850160051c820191505b8181101561463f5782815560010161462c565b505050505050565b815167ffffffffffffffff81111561466157614661613bfd565b6146758161466f845461431d565b846145f9565b602080601f8311600181146146c857600084156146925750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561463f565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015614715578886015182559484019460019091019084016146f6565b508582101561475157878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156147745761477461439f565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006147ae6060830184613b59565b9594505050505056fea264697066735822122081f84e50c75132e0e1d63c89368111c0affdda26b573871b0f246eef88a15e2664736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102de5760003560e01c80639b79676011610186578063d02103ca116100e3578063d8f54db011610097578063eaeb077b11610071578063eaeb077b14610739578063f2fde38b1461074c578063f75527611461075f57600080fd5b8063d8f54db0146106ac578063e7a7ed02146106e9578063e8bf92ed1461071957600080fd5b8063d2fd1b31116100c8578063d2fd1b3114610673578063d307b74314610686578063d8d1091b1461069957600080fd5b8063d02103ca14610640578063d0ae98dd1461066057600080fd5b8063b4d63f581161013a578063c0cad3021161011f578063c0cad302146105ee578063c89e42df14610601578063cfa8ed471461061457600080fd5b8063b4d63f58146105a8578063b6b0b097146105c857600080fd5b8063ac2eba981161016b578063ac2eba9814610582578063adc879e91461058b578063b02286c01461059f57600080fd5b80639b79676014610565578063ab9fc5ef1461057857600080fd5b80636b8616ce1161023f57806379847057116101f35780638da5cb5b116101cd5780638da5cb5b1461050b57806396dc3d391461054a57806399f5634e1461055d57600080fd5b806379847057146104dc5780637fcb3653146104e45780638c4a0af7146104f857600080fd5b8063715018a611610224578063715018a6146104ae5780637152facf146104b6578063748608de146104c957600080fd5b80636b8616ce1461047b5780636ff512cc1461049b57600080fd5b806345605267116102965780635437988d1161027b5780635437988d146103a657806355b925e6146103b9578063574f649e146103cc57600080fd5b80634560526714610376578063542028d51461039e57600080fd5b80631a26da14116102c75780631a26da141461032e5780633c15826714610343578063423fa8561461035657600080fd5b8063107bf28c146102e357806319d8ac6114610301575b600080fd5b6102eb61076e565b6040516102f89190613ba3565b60405180910390f35b6003546103159067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102f8565b61034161033c366004613bd3565b6107fc565b005b610341610351366004613d79565b610821565b6003546103159068010000000000000000900467ffffffffffffffff1681565b60035461031590700100000000000000000000000000000000900467ffffffffffffffff1681565b6102eb611153565b6103416103b4366004613edb565b611160565b6103416103c7366004613f0f565b6111af565b61046d6103da366004613f92565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b6040519081526020016102f8565b61046d610489366004614008565b60016020526000908152604090205481565b6103416104a9366004613edb565b61171f565b61034161185a565b6102eb6104c4366004614023565b61186e565b6103416104d7366004613f0f565b611a1b565b61046d611e24565b6004546103159067ffffffffffffffff1681565b61034161050636600461407e565b611e9e565b603d5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102f8565b610341610558366004614008565b611fd2565b61046d612015565b610341610573366004614008565b612144565b61031562093a8081565b61046d60065481565b6009546103159067ffffffffffffffff1681565b61046d61ea6081565b61046d6105b6366004614008565b60026020526000908152604090205481565b6000546105259062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6103416105fc36600461409b565b612193565b61034161060f36600461409b565b6121ab565b6004546105259068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546105259073ffffffffffffffffffffffffffffffffffffffff1681565b61046d61066e366004614023565b61229a565b6103416106813660046140d8565b612594565b6103416106943660046141ae565b612889565b6103416106a73660046141c7565b612896565b6004546106d9907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016102f8565b600354610315907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6007546105259073ffffffffffffffffffffffffffffffffffffffff1681565b6103416107473660046142d8565b612f3c565b61034161075a366004613edb565b61340a565b61046d67016345785d8a000081565b600a805461077b9061431d565b80601f01602080910402602001604051908101604052809291908181526020018280546107a79061431d565b80156107f45780601f106107c9576101008083540402835291602001916107f4565b820191906000526020600020905b8154815290600101906020018083116107d757829003601f168201915b505050505081565b6108046134c1565b67ffffffffffffffff909116600090815260026020526040902055565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146108d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b805160035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610f2957600087828151811061094157610941614370565b602002602001015190506000816060015167ffffffffffffffff161115610bac578361096c816143ce565b9450506000816000015180519060200120826020015183606001516040516020016109cf93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114610ad4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610ba6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016108d0565b50610d7a565b60208101511580610c5b575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610c159160040190815260200190565b6020604051808303816000875af1158015610c34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5891906143f5565b15155b610ce7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016108d0565b80515161ea6011610d7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016108d0565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610db0575042816040015167ffffffffffffffff1611155b610e62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610f0b906143ce565b95505080604001519550508080610f219061440e565b915050610925565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610fe6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016108d0565b60035460009061101490700100000000000000000000000000000000900467ffffffffffffffff1684614446565b6110289067ffffffffffffffff168761446f565b6003805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152600260205260409020839055905061110633306110df8467016345785d8a0000614486565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16929190613542565b6003546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b6008805461077b9061431d565b6111686134c1565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60045467ffffffffffffffff888116911614611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c6173745665726966696564426174636820646f6573206e6f74206d6160648201527f7463680000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8667ffffffffffffffff168667ffffffffffffffff161161133c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a4016108d0565b60035467ffffffffffffffff680100000000000000009091048116908716111561140f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a76657269667942617463686573908201527f3a20626174636820646f6573206e6f742068617665206265656e20736571756560648201527f6e63656400000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b600061141d8888888861186e565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161145291906144c3565b602060405180830381855afa15801561146f573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061149291906143f5565b61149c919061450e565b6007546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916115069189918991899190600401614522565b602060405180830381865afa158015611523573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611547919061459c565b6115d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016108d0565b611623336115e18b8b614446565b67ffffffffffffffff166115f3612015565b6115fd9190614486565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16919061361e565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a1617815560068790556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820189905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b1580156116c557600080fd5b505af11580156116d9573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8b1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a3505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146117d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b6118626134c1565b61186c6000613679565b565b67ffffffffffffffff8085166000908152600260205260408082205492861682529020546060919080611949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b604080516101ac810190915261016c8152602081016119af565b8160005b60088110156119a8577bffffffff0000000000000000000000000000000000000000000000006020820284901c60c01b168252600890910190600101611967565b5092915050565b6119bb81600654611963565b90506119c78187611963565b90506119d38185611963565b90506119df8184611963565b90506119eb8188611963565b60c08a811b825289811b6008830152600954901b60108201523360601b6018909101525092505050949350505050565b611a236134c1565b60045467ffffffffffffffff888116911614611ae7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8667ffffffffffffffff168667ffffffffffffffff1611611bb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff6801000000000000000090910481169087161115611c82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b67ffffffffffffffff861660009081526002602052604090205480611d29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f74206578697374000060648201526084016108d0565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff891617815560068690556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820188905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b158015611dcb57600080fd5b505af1158015611ddf573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8a1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a35050505050505050565b60035460009067ffffffffffffffff7001000000000000000000000000000000008204811691611e739178010000000000000000000000000000000000000000000000009091041660016145b9565b611e7d9190614446565b611e999067ffffffffffffffff16670de0b6b3a7640000614486565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611f51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061184f90831515815260200190565b611fda6134c1565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b600080546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829162010000900473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561208a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ae91906143f5565b60045460035491925060009167ffffffffffffffff918216916801000000000000000082048116916121139170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614446565b61211d91906145b9565b6121279190614446565b67ffffffffffffffff16905061213d81836145e5565b9250505090565b61214c6134c1565b6003805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b61219b6134c1565b600a6121a78282614647565b5050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461225e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600861226a8282614647565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161184f9190613ba3565b60045460009067ffffffffffffffff868116911614612361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8467ffffffffffffffff168467ffffffffffffffff161161242a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff68010000000000000000909104811690851611156124fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b600061250a8686868661186e565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161253f91906144c3565b602060405180830381855afa15801561255c573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061257f91906143f5565b612589919061450e565b979650505050505050565b600054610100900460ff16158080156125b45750600054600160ff909116105b806125ce5750303b1580156125ce575060005460ff166001145b61265a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016108d0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156126b857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602179055600780549091168a83161790556006889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c01000000000000000000000000000000000000000000000000000000008715150217905560086127d08582614647565b50600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600a6128118382614647565b5061281a6136f0565b801561287d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6128916134c1565b600655565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108d0565b805180612a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612a73918491700100000000000000000000000000000000900416614761565b1115612b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016108d0565b60035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205491937001000000000000000000000000000000009004909216915b84811015612e6c576000868281518110612b6157612b61614370565b602002602001015190508380612b76906143ce565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114612ccf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016108d0565b612cda60018861446f565b8303612db2574262093a808360400151612cf491906145b9565b67ffffffffffffffff161115612db2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016108d0565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612e54906143ce565b96505050508080612e649061440e565b915050612b45565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260026020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114613019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108d0565b6000613023611e24565b9050818111156130b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016108d0565b61ea60835110613147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016108d0565b6000546131729062010000900473ffffffffffffffffffffffffffffffffffffffff16333084613542565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa1580156131e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061320691906143f5565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613240836143ce565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050838051906020012081426040516020016132b993929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260019093529120553233036133a757600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613404565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516133fb93929190614779565b60405180910390a25b50505050565b6134126134c1565b73ffffffffffffffffffffffffffffffffffffffff81166134b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108d0565b6134be81613679565b50565b603d5473ffffffffffffffffffffffffffffffffffffffff16331461186c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526134049085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261378f565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526136749084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161359c565b505050565b603d805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16613787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d0565b61186c61389b565b60006137f1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661393b9092919063ffffffff16565b805190915015613674578080602001905181019061380f919061459c565b613674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108d0565b600054610100900460ff16613932576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d0565b61186c33613679565b606061394a8484600085613954565b90505b9392505050565b6060824710156139e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016108d0565b73ffffffffffffffffffffffffffffffffffffffff85163b613a64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108d0565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613a8d91906144c3565b60006040518083038185875af1925050503d8060008114613aca576040519150601f19603f3d011682016040523d82523d6000602084013e613acf565b606091505b509150915061258982828660608315613ae957508161394d565b825115613af95782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d09190613ba3565b60005b83811015613b48578181015183820152602001613b30565b838111156134045750506000910152565b60008151808452613b71816020860160208601613b2d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061394d6020830184613b59565b803567ffffffffffffffff81168114613bce57600080fd5b919050565b60008060408385031215613be657600080fd5b613bef83613bb6565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613c4f57613c4f613bfd565b60405290565b6040516060810167ffffffffffffffff81118282101715613c4f57613c4f613bfd565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613cbf57613cbf613bfd565b604052919050565b600067ffffffffffffffff821115613ce157613ce1613bfd565b5060051b60200190565b600082601f830112613cfc57600080fd5b813567ffffffffffffffff811115613d1657613d16613bfd565b613d4760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613c78565b818152846020838601011115613d5c57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613d8c57600080fd5b823567ffffffffffffffff80821115613da457600080fd5b818501915085601f830112613db857600080fd5b8135613dcb613dc682613cc7565b613c78565b81815260059190911b83018401908481019088831115613dea57600080fd5b8585015b83811015613ea157803585811115613e065760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001811315613e3c5760008081fd5b613e44613c2c565b8983013588811115613e565760008081fd5b613e648e8c83870101613ceb565b8252506040808401358b8301526060613e7e818601613bb6565b82840152613e8d848601613bb6565b908301525085525050918601918601613dee565b5098975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146134be57600080fd5b8035613bce81613eae565b600060208284031215613eed57600080fd5b813561394d81613eae565b8060408101831015613f0957600080fd5b92915050565b6000806000806000806000610180888a031215613f2b57600080fd5b613f3488613bb6565b9650613f4260208901613bb6565b95506040880135945060608801359350613f5f8960808a01613ef8565b9250610140880189811115613f7357600080fd5b60c089019250613f838a82613ef8565b91505092959891949750929550565b600080600080600060a08688031215613faa57600080fd5b85359450602086013567ffffffffffffffff811115613fc857600080fd5b613fd488828901613ceb565b94505060408601359250613fea60608701613bb6565b91506080860135613ffa81613eae565b809150509295509295909350565b60006020828403121561401a57600080fd5b61394d82613bb6565b6000806000806080858703121561403957600080fd5b61404285613bb6565b935061405060208601613bb6565b93969395505050506040820135916060013590565b80151581146134be57600080fd5b8035613bce81614065565b60006020828403121561409057600080fd5b813561394d81614065565b6000602082840312156140ad57600080fd5b813567ffffffffffffffff8111156140c457600080fd5b6140d084828501613ceb565b949350505050565b60008060008060008060008060006101208a8c0312156140f757600080fd5b893561410281613eae565b985060208a013561411281613eae565b975061412060408b01613ed0565b965060608a0135955061413560808b01613ed0565b945061414360a08b01614073565b935060c08a013567ffffffffffffffff8082111561416057600080fd5b61416c8d838e01613ceb565b945061417a60e08d01613bb6565b93506101008c013591508082111561419157600080fd5b5061419e8c828d01613ceb565b9150509295985092959850929598565b6000602082840312156141c057600080fd5b5035919050565b600060208083850312156141da57600080fd5b823567ffffffffffffffff808211156141f257600080fd5b818501915085601f83011261420657600080fd5b8135614214613dc682613cc7565b81815260059190911b8301840190848101908883111561423357600080fd5b8585015b83811015613ea15780358581111561424f5760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018113156142855760008081fd5b61428d613c55565b898301358881111561429f5760008081fd5b6142ad8e8c83870101613ceb565b8252506040808401358b8301526142c5838501613bb6565b9082015285525050918601918601614237565b600080604083850312156142eb57600080fd5b823567ffffffffffffffff81111561430257600080fd5b61430e85828601613ceb565b95602094909401359450505050565b600181811c9082168061433157607f821691505b60208210810361436a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036143eb576143eb61439f565b6001019392505050565b60006020828403121561440757600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361443f5761443f61439f565b5060010190565b600067ffffffffffffffff838116908316818110156144675761446761439f565b039392505050565b6000828210156144815761448161439f565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144be576144be61439f565b500290565b600082516144d5818460208701613b2d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261451d5761451d6144df565b500690565b61012081016040808784376000838201818152879190815b600281101561455a5784848337908401828152928401929060010161453a565b5050828760c0870137610100850181815286935091505b6001811015614590578251825260209283019290910190600101614571565b50505095945050505050565b6000602082840312156145ae57600080fd5b815161394d81614065565b600067ffffffffffffffff8083168185168083038211156145dc576145dc61439f565b01949350505050565b6000826145f4576145f46144df565b500490565b601f82111561367457600081815260208120601f850160051c810160208610156146205750805b601f850160051c820191505b8181101561463f5782815560010161462c565b505050505050565b815167ffffffffffffffff81111561466157614661613bfd565b6146758161466f845461431d565b846145f9565b602080601f8311600181146146c857600084156146925750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561463f565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015614715578886015182559484019460019091019084016146f6565b508582101561475157878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156147745761477461439f565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006147ae6060830184613b59565b9594505050505056fea264697066735822122081f84e50c75132e0e1d63c89368111c0affdda26b573871b0f246eef88a15e2664736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/Bridge.sol b/contracts/Bridge.sol index b96ef5555..c984cfeca 100644 --- a/contracts/Bridge.sol +++ b/contracts/Bridge.sol @@ -221,6 +221,7 @@ contract Bridge is DepositContract { metadata, uint32(depositCount) ); + _deposit( getLeafValue( LEAF_TYPE_MESSAGE, diff --git a/contracts/ProofOfEfficiency.sol b/contracts/ProofOfEfficiency.sol index b3c6092e2..57ddc02ed 100644 --- a/contracts/ProofOfEfficiency.sol +++ b/contracts/ProofOfEfficiency.sol @@ -6,7 +6,6 @@ import "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20Burnable import "./interfaces/IVerifierRollup.sol"; import "./interfaces/IGlobalExitRootManager.sol"; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; -import "hardhat/console.sol"; /** * Contract responsible for managing the states and the updates of L2 network @@ -75,14 +74,14 @@ contract ProofOfEfficiency is Initializable { // Queue of forced batches with their associated data // ForceBatchNum --> hashedForceBatchData - // hashedForceBatchData: hash containing the necessary information to force a batch: - // keccak256(keccak256(l2TxData), bytes32 globalExitRoot, unint64 minTimestamp) + // hashedForceBatchData: hash containing the necessary information to force a batch: + // keccak256(keccak256(bytes transactions), bytes32 globalExitRoot, unint64 minTimestamp) mapping(uint64 => bytes32) public forcedBatches; // Queue of batches that defines the virtual state // SequenceBatchNum --> accInputHash - // accInputHash is a hash chain that contains all the information to process a batch: - // keccak256(bytes32 oldAccInputHash, keccak256(bytes l2TxData), bytes32 globalExitRoot, uint64 timestamp, address seqAddress) + // accInputHash: hash chain that contains all the information to process a batch: + // keccak256(bytes32 oldAccInputHash, keccak256(bytes transactions), bytes32 globalExitRoot, uint64 timestamp, address seqAddress) mapping(uint64 => bytes32) public sequencedBatches; // Last sequenced timestamp diff --git a/docs/Bridge2.md b/docs/Bridge2.md deleted file mode 100644 index 2e249cb55..000000000 --- a/docs/Bridge2.md +++ /dev/null @@ -1,166 +0,0 @@ -Bridge that will be deployed on both networks Ethereum and Polygon zkEVM -Contract responsible to manage the token interactions with other networks - - -## Functions -### initialize -```solidity - function initialize( - uint32 _networkID, - contract IGlobalExitRootManager _globalExitRootManager - ) public -``` - - -#### Parameters: -| Name | Type | Description | -| :--- | :--- | :------------------------------------------------------------------- | -|`_networkID` | uint32 | networkID -|`_globalExitRootManager` | contract IGlobalExitRootManager | global exit root manager address - -### bridgeAsset -```solidity - function bridgeAsset( - address token, - uint32 destinationNetwork, - address destinationAddress, - uint256 amount, - bytes permitData - ) public -``` -Deposit add a new leaf to the merkle tree - - -#### Parameters: -| Name | Type | Description | -| :--- | :--- | :------------------------------------------------------------------- | -|`token` | address | Token address, 0 address is reserved for ether -|`destinationNetwork` | uint32 | Network destination -|`destinationAddress` | address | Address destination -|`amount` | uint256 | Amount of tokens -|`permitData` | bytes | Raw data of the call `permit` of the token - -### bridgeMessage -```solidity - function bridgeMessage( - uint32 destinationNetwork, - address destinationAddress, - bytes metadata - ) public -``` -Bridge message - - -#### Parameters: -| Name | Type | Description | -| :--- | :--- | :------------------------------------------------------------------- | -|`destinationNetwork` | uint32 | Network destination -|`destinationAddress` | address | Address destination -|`metadata` | bytes | Message metadata - -### claim -```solidity - function claim( - bytes32[] smtProof, - uint32 index, - bytes32 mainnetExitRoot, - bytes32 rollupExitRoot, - uint32 originNetwork, - address originTokenAddress, - uint32 destinationNetwork, - address destinationAddress, - uint256 amount, - bytes metadata - ) public -``` -Verify merkle proof and withdraw tokens/ether - - -#### Parameters: -| Name | Type | Description | -| :--- | :--- | :------------------------------------------------------------------- | -|`smtProof` | bytes32[] | Smt proof -|`index` | uint32 | Index of the leaf -|`mainnetExitRoot` | bytes32 | Mainnet exit root -|`rollupExitRoot` | bytes32 | Rollup exit root -|`originNetwork` | uint32 | Origin network -|`originTokenAddress` | address | Origin token address, 0 address is reserved for ether -|`destinationNetwork` | uint32 | Network destination, must be 0 ( mainnet) -|`destinationAddress` | address | Address destination -|`amount` | uint256 | Amount of tokens -|`metadata` | bytes | abi encoded metadata if any, empty otherwise - -### precalculatedWrapperAddress -```solidity - function precalculatedWrapperAddress( - uint32 originNetwork, - address originTokenAddress - ) public returns (address) -``` -Returns the precalculated address of a wrapper using the token information - - -#### Parameters: -| Name | Type | Description | -| :--- | :--- | :------------------------------------------------------------------- | -|`originNetwork` | uint32 | Origin network -|`originTokenAddress` | address | Origin token address, 0 address is reserved for ether - -### getTokenWrappedAddress -```solidity - function getTokenWrappedAddress( - uint32 originNetwork, - address originTokenAddress - ) public returns (address) -``` -Returns the address of a wrapper using the token information if already exist - - -#### Parameters: -| Name | Type | Description | -| :--- | :--- | :------------------------------------------------------------------- | -|`originNetwork` | uint32 | Origin network -|`originTokenAddress` | address | Origin token address, 0 address is reserved for ether - -### _permit -```solidity - function _permit( - address amount, - uint256 permitData - ) internal -``` -Function to call token permit method of extended ERC20 - + @param token ERC20 token address - - -#### Parameters: -| Name | Type | Description | -| :--- | :--- | :------------------------------------------------------------------- | -|`amount` | address | Quantity that is expected to be allowed -|`permitData` | uint256 | Raw data of the call `permit` of the token - -## Events -### BridgeEvent -```solidity - event BridgeEvent( - ) -``` - -Emitted when a bridge some tokens to another network - -### ClaimEvent -```solidity - event ClaimEvent( - ) -``` - -Emitted when a claim is done from another network - -### NewWrappedToken -```solidity - event NewWrappedToken( - ) -``` - -Emitted when a a new wrapped token is created - diff --git a/docs/BridgeV2.md b/docs/BridgeV2.md deleted file mode 100644 index 2e249cb55..000000000 --- a/docs/BridgeV2.md +++ /dev/null @@ -1,166 +0,0 @@ -Bridge that will be deployed on both networks Ethereum and Polygon zkEVM -Contract responsible to manage the token interactions with other networks - - -## Functions -### initialize -```solidity - function initialize( - uint32 _networkID, - contract IGlobalExitRootManager _globalExitRootManager - ) public -``` - - -#### Parameters: -| Name | Type | Description | -| :--- | :--- | :------------------------------------------------------------------- | -|`_networkID` | uint32 | networkID -|`_globalExitRootManager` | contract IGlobalExitRootManager | global exit root manager address - -### bridgeAsset -```solidity - function bridgeAsset( - address token, - uint32 destinationNetwork, - address destinationAddress, - uint256 amount, - bytes permitData - ) public -``` -Deposit add a new leaf to the merkle tree - - -#### Parameters: -| Name | Type | Description | -| :--- | :--- | :------------------------------------------------------------------- | -|`token` | address | Token address, 0 address is reserved for ether -|`destinationNetwork` | uint32 | Network destination -|`destinationAddress` | address | Address destination -|`amount` | uint256 | Amount of tokens -|`permitData` | bytes | Raw data of the call `permit` of the token - -### bridgeMessage -```solidity - function bridgeMessage( - uint32 destinationNetwork, - address destinationAddress, - bytes metadata - ) public -``` -Bridge message - - -#### Parameters: -| Name | Type | Description | -| :--- | :--- | :------------------------------------------------------------------- | -|`destinationNetwork` | uint32 | Network destination -|`destinationAddress` | address | Address destination -|`metadata` | bytes | Message metadata - -### claim -```solidity - function claim( - bytes32[] smtProof, - uint32 index, - bytes32 mainnetExitRoot, - bytes32 rollupExitRoot, - uint32 originNetwork, - address originTokenAddress, - uint32 destinationNetwork, - address destinationAddress, - uint256 amount, - bytes metadata - ) public -``` -Verify merkle proof and withdraw tokens/ether - - -#### Parameters: -| Name | Type | Description | -| :--- | :--- | :------------------------------------------------------------------- | -|`smtProof` | bytes32[] | Smt proof -|`index` | uint32 | Index of the leaf -|`mainnetExitRoot` | bytes32 | Mainnet exit root -|`rollupExitRoot` | bytes32 | Rollup exit root -|`originNetwork` | uint32 | Origin network -|`originTokenAddress` | address | Origin token address, 0 address is reserved for ether -|`destinationNetwork` | uint32 | Network destination, must be 0 ( mainnet) -|`destinationAddress` | address | Address destination -|`amount` | uint256 | Amount of tokens -|`metadata` | bytes | abi encoded metadata if any, empty otherwise - -### precalculatedWrapperAddress -```solidity - function precalculatedWrapperAddress( - uint32 originNetwork, - address originTokenAddress - ) public returns (address) -``` -Returns the precalculated address of a wrapper using the token information - - -#### Parameters: -| Name | Type | Description | -| :--- | :--- | :------------------------------------------------------------------- | -|`originNetwork` | uint32 | Origin network -|`originTokenAddress` | address | Origin token address, 0 address is reserved for ether - -### getTokenWrappedAddress -```solidity - function getTokenWrappedAddress( - uint32 originNetwork, - address originTokenAddress - ) public returns (address) -``` -Returns the address of a wrapper using the token information if already exist - - -#### Parameters: -| Name | Type | Description | -| :--- | :--- | :------------------------------------------------------------------- | -|`originNetwork` | uint32 | Origin network -|`originTokenAddress` | address | Origin token address, 0 address is reserved for ether - -### _permit -```solidity - function _permit( - address amount, - uint256 permitData - ) internal -``` -Function to call token permit method of extended ERC20 - + @param token ERC20 token address - - -#### Parameters: -| Name | Type | Description | -| :--- | :--- | :------------------------------------------------------------------- | -|`amount` | address | Quantity that is expected to be allowed -|`permitData` | uint256 | Raw data of the call `permit` of the token - -## Events -### BridgeEvent -```solidity - event BridgeEvent( - ) -``` - -Emitted when a bridge some tokens to another network - -### ClaimEvent -```solidity - event ClaimEvent( - ) -``` - -Emitted when a claim is done from another network - -### NewWrappedToken -```solidity - event NewWrappedToken( - ) -``` - -Emitted when a a new wrapped token is created - diff --git a/docs/lib/TokenWrappedL2.md b/docs/lib/TokenWrappedL2.md deleted file mode 100644 index b512bfb3f..000000000 --- a/docs/lib/TokenWrappedL2.md +++ /dev/null @@ -1,31 +0,0 @@ - - - -## Functions -### constructor -```solidity - function constructor( - ) public -``` - - - - -### mint -```solidity - function mint( - ) external returns (bool) -``` - - - - -### burn -```solidity - function burn( - ) external returns (bool) -``` - - - - diff --git a/package.json b/package.json index c98442efa..52721775c 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "homepage": "https://github.com/0xPolygonHermez/contracts-zkEVM#readme", "license": "pending", "dependencies": { - "@0xpolygonhermez/zkevm-commonjs": "github:0xPolygonHermez/zkevm-commonjs#v0.4.0.1", + "@0xpolygonhermez/zkevm-commonjs": "github:0xPolygonHermez/zkevm-commonjs#feature/bridgeAribitraryData", "@nomiclabs/hardhat-ethers": "^2.0.2", "@nomiclabs/hardhat-etherscan": "^3.1.0", "@nomiclabs/hardhat-waffle": "^2.0.3", From fb4ef789f0cc43c2b2fe070bd3ac901a9ec7c29a Mon Sep 17 00:00:00 2001 From: invocamanman Date: Thu, 27 Oct 2022 17:49:14 +0200 Subject: [PATCH 10/71] update snark --- compiled-contracts/ProofOfEfficiency.json | 4 +- compiled-contracts/ProofOfEfficiencyMock.json | 4 +- contracts/ProofOfEfficiency.sol | 80 +++---------------- deployment/deployment_v2-0/genesis-gen.json | 1 + deployment/deployment_v2-0/genesis.json | 4 +- docker/scripts/genesis_docker.json | 4 +- docker/scripts/genesis_gen_docker.json | 70 ++++++++++++++++ package.json | 2 +- test/contracts/snark_stark_input.test.js | 2 +- 9 files changed, 93 insertions(+), 78 deletions(-) create mode 100644 docker/scripts/genesis_gen_docker.json diff --git a/compiled-contracts/ProofOfEfficiency.json b/compiled-contracts/ProofOfEfficiency.json index f88b51d39..9e96ab360 100644 --- a/compiled-contracts/ProofOfEfficiency.json +++ b/compiled-contracts/ProofOfEfficiency.json @@ -669,8 +669,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5061399d806100206000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c8063ac2eba9811610104578063d02103ca116100a2578063e7a7ed0211610071578063e7a7ed021461048a578063e8bf92ed146104ba578063eaeb077b146104da578063f7552761146104ed57600080fd5b8063d02103ca14610407578063d2fd1b3114610427578063d8d1091b1461043a578063d8f54db01461044d57600080fd5b8063b4d63f58116100de578063b4d63f581461035d578063b6b0b0971461037d578063c89e42df146103c8578063cfa8ed47146103db57600080fd5b8063ac2eba9814610337578063adc879e914610340578063b02286c01461035457600080fd5b80636b8616ce1161017c5780637fcb36531161014b5780637fcb3653146102fe5780638c4a0af71461031257806399f5634e14610325578063ab9fc5ef1461032d57600080fd5b80636b8616ce146102a25780636ff512cc146102d05780637152facf146102e357806379847057146102f657600080fd5b8063423fa856116101b8578063423fa8561461023f578063456052671461025f578063542028d51461028757806355b925e61461028f57600080fd5b8063107bf28c146101df57806319d8ac61146101fd5780633c1582671461022a575b600080fd5b6101e76104fc565b6040516101f49190612e09565b60405180910390f35b6003546102119067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101f4565b61023d610238366004612fb5565b61058a565b005b6003546102119068010000000000000000900467ffffffffffffffff1681565b60035461021190700100000000000000000000000000000000900467ffffffffffffffff1681565b6101e7610ebc565b61023d61029d366004613101565b610ec9565b6102c26102b0366004613184565b60016020526000908152604090205481565b6040519081526020016101f4565b61023d6102de3660046131cf565b611439565b6101e76102f13660046131ec565b611574565b6102c2611721565b6004546102119067ffffffffffffffff1681565b61023d610320366004613247565b61179b565b6102c26118cf565b61021162093a8081565b6102c260065481565b6009546102119067ffffffffffffffff1681565b6102c261ea6081565b6102c261036b366004613184565b60026020526000908152604090205481565b6000546103a39062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f4565b61023d6103d6366004613264565b6119fe565b6004546103a39068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b61023d6104353660046132a1565b611aed565b61023d610448366004613377565b611dda565b60045461047a907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016101f4565b600354610211907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6007546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b61023d6104e8366004613488565b612480565b6102c267016345785d8a000081565b600a8054610509906134cd565b80601f0160208091040260200160405190810160405280929190818152602001828054610535906134cd565b80156105825780601f1061055757610100808354040283529160200191610582565b820191906000526020600020905b81548152906001019060200180831161056557829003601f168201915b505050505081565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b805160035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610c925760008782815181106106aa576106aa613520565b602002602001015190506000816060015167ffffffffffffffff16111561091557836106d58161357e565b94505060008160000151805190602001208260200151836060015160405160200161073893929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff881660009081526001909352912054909150811461083d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b816060015167ffffffffffffffff16826040015167ffffffffffffffff16101561090f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610639565b50610ae3565b602081015115806109c4575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b36329161097e9160040190815260200190565b6020604051808303816000875af115801561099d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c191906135a5565b15155b610a50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610639565b80515161ea6011610ae3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610639565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610b19575042816040015167ffffffffffffffff1611155b610bcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610c749061357e565b95505080604001519550508080610c8a906135be565b91505061068e565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610d4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610639565b600354600090610d7d90700100000000000000000000000000000000900467ffffffffffffffff16846135f6565b610d919067ffffffffffffffff168761361f565b6003805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c169390931793909317929092169190911790915560009081526002602052604090208390559050610e6f3330610e488467016345785d8a0000613636565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1692919061294e565b6003546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60088054610509906134cd565b60045467ffffffffffffffff888116911614610f8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c6173745665726966696564426174636820646f6573206e6f74206d6160648201527f7463680000000000000000000000000000000000000000000000000000000000608482015260a401610639565b8667ffffffffffffffff168667ffffffffffffffff1611611056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610639565b60035467ffffffffffffffff6801000000000000000090910481169087161115611129576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a76657269667942617463686573908201527f3a20626174636820646f6573206e6f742068617665206265656e20736571756560648201527f6e63656400000000000000000000000000000000000000000000000000000000608482015260a401610639565b600061113788888888611574565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161116c9190613673565b602060405180830381855afa158015611189573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906111ac91906135a5565b6111b691906136be565b6007546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d9161122091899189918991906004016136d2565b602060405180830381865afa15801561123d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611261919061374c565b6112ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610639565b61133d336112fb8b8b6135f6565b67ffffffffffffffff1661130d6118cf565b6113179190613636565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff169190612a2a565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a1617815560068790556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820189905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b1580156113df57600080fd5b505af11580156113f3573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8b1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a3505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146114ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b67ffffffffffffffff808516600090815260026020526040808220549286168252902054606091908061164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610639565b604080516101ac810190915261016c8152602081016116b5565b8160005b60088110156116ae577bffffffff0000000000000000000000000000000000000000000000006020820284901c60c01b16825260089091019060010161166d565b5092915050565b6116c181600654611669565b90506116cd8187611669565b90506116d98185611669565b90506116e58184611669565b90506116f18188611669565b60c08a811b825289811b6008830152600954901b60108201523360601b6018909101525092505050949350505050565b60035460009067ffffffffffffffff7001000000000000000000000000000000008204811691611770917801000000000000000000000000000000000000000000000000909104166001613769565b61177a91906135f6565b6117969067ffffffffffffffff16670de0b6b3a7640000613636565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461184e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061156990831515815260200190565b600080546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829162010000900473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015611944573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196891906135a5565b60045460035491925060009167ffffffffffffffff918216916801000000000000000082048116916119cd91700100000000000000000000000000000000820481169178010000000000000000000000000000000000000000000000009004166135f6565b6119d79190613769565b6119e191906135f6565b67ffffffffffffffff1690506119f78183613795565b9250505090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611ab1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b6008611abd82826137f7565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b20816040516115699190612e09565b600054610100900460ff1615808015611b0d5750600054600160ff909116105b80611b275750303b158015611b27575060005460ff166001145b611bb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610639565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611c1157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602179055600780549091168a83161790556006889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c0100000000000000000000000000000000000000000000000000000000871515021790556008611d2985826137f7565b50600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600a611d6a83826137f7565b508015611dce57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114611eb7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610639565b805180611f6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b60035467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691611fb7918491700100000000000000000000000000000000900416613911565b1115612045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610639565b60035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205491937001000000000000000000000000000000009004909216915b848110156123b05760008682815181106120a5576120a5613520565b6020026020010151905083806120ba9061357e565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114612213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610639565b61221e60018861361f565b83036122f6574262093a8083604001516122389190613769565b67ffffffffffffffff1611156122f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610639565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c0160405160208183030381529060405280519060200120935085806123989061357e565b965050505080806123a8906135be565b915050612089565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260026020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461255d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610639565b6000612567611721565b9050818111156125f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610639565b61ea6083511061268b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610639565b6000546126b69062010000900473ffffffffffffffffffffffffffffffffffffffff1633308461294e565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015612726573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274a91906135a5565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff169060186127848361357e565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050838051906020012081426040516020016127fd93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260019093529120553233036128eb57600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2612948565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161293f93929190613929565b60405180910390a25b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526129489085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a85565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052612a809084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016129a8565b505050565b6000612ae7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612b919092919063ffffffff16565b805190915015612a805780806020019051810190612b05919061374c565b612a80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610639565b6060612ba08484600085612baa565b90505b9392505050565b606082471015612c3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610639565b73ffffffffffffffffffffffffffffffffffffffff85163b612cba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610639565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612ce39190613673565b60006040518083038185875af1925050503d8060008114612d20576040519150601f19603f3d011682016040523d82523d6000602084013e612d25565b606091505b5091509150612d35828286612d40565b979650505050505050565b60608315612d4f575081612ba3565b825115612d5f5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106399190612e09565b60005b83811015612dae578181015183820152602001612d96565b838111156129485750506000910152565b60008151808452612dd7816020860160208601612d93565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612ba36020830184612dbf565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715612e6e57612e6e612e1c565b60405290565b6040516060810167ffffffffffffffff81118282101715612e6e57612e6e612e1c565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612ede57612ede612e1c565b604052919050565b600067ffffffffffffffff821115612f0057612f00612e1c565b5060051b60200190565b600082601f830112612f1b57600080fd5b813567ffffffffffffffff811115612f3557612f35612e1c565b612f6660207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612e97565b818152846020838601011115612f7b57600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114612fb057600080fd5b919050565b60006020808385031215612fc857600080fd5b823567ffffffffffffffff80821115612fe057600080fd5b818501915085601f830112612ff457600080fd5b813561300761300282612ee6565b612e97565b81815260059190911b8301840190848101908883111561302657600080fd5b8585015b838110156130dd578035858111156130425760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018113156130785760008081fd5b613080612e4b565b89830135888111156130925760008081fd5b6130a08e8c83870101612f0a565b8252506040808401358b83015260606130ba818601612f98565b828401526130c9848601612f98565b90830152508552505091860191860161302a565b5098975050505050505050565b80604081018310156130fb57600080fd5b92915050565b6000806000806000806000610180888a03121561311d57600080fd5b61312688612f98565b965061313460208901612f98565b955060408801359450606088013593506131518960808a016130ea565b925061014088018981111561316557600080fd5b60c0890192506131758a826130ea565b91505092959891949750929550565b60006020828403121561319657600080fd5b612ba382612f98565b73ffffffffffffffffffffffffffffffffffffffff811681146131c157600080fd5b50565b8035612fb08161319f565b6000602082840312156131e157600080fd5b8135612ba38161319f565b6000806000806080858703121561320257600080fd5b61320b85612f98565b935061321960208601612f98565b93969395505050506040820135916060013590565b80151581146131c157600080fd5b8035612fb08161322e565b60006020828403121561325957600080fd5b8135612ba38161322e565b60006020828403121561327657600080fd5b813567ffffffffffffffff81111561328d57600080fd5b61329984828501612f0a565b949350505050565b60008060008060008060008060006101208a8c0312156132c057600080fd5b89356132cb8161319f565b985060208a01356132db8161319f565b97506132e960408b016131c4565b965060608a013595506132fe60808b016131c4565b945061330c60a08b0161323c565b935060c08a013567ffffffffffffffff8082111561332957600080fd5b6133358d838e01612f0a565b945061334360e08d01612f98565b93506101008c013591508082111561335a57600080fd5b506133678c828d01612f0a565b9150509295985092959850929598565b6000602080838503121561338a57600080fd5b823567ffffffffffffffff808211156133a257600080fd5b818501915085601f8301126133b657600080fd5b81356133c461300282612ee6565b81815260059190911b830184019084810190888311156133e357600080fd5b8585015b838110156130dd578035858111156133ff5760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018113156134355760008081fd5b61343d612e74565b898301358881111561344f5760008081fd5b61345d8e8c83870101612f0a565b8252506040808401358b830152613475838501612f98565b90820152855250509186019186016133e7565b6000806040838503121561349b57600080fd5b823567ffffffffffffffff8111156134b257600080fd5b6134be85828601612f0a565b95602094909401359450505050565b600181811c908216806134e157607f821691505b60208210810361351a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681810361359b5761359b61354f565b6001019392505050565b6000602082840312156135b757600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036135ef576135ef61354f565b5060010190565b600067ffffffffffffffff838116908316818110156136175761361761354f565b039392505050565b6000828210156136315761363161354f565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561366e5761366e61354f565b500290565b60008251613685818460208701612d93565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826136cd576136cd61368f565b500690565b61012081016040808784376000838201818152879190815b600281101561370a578484833790840182815292840192906001016136ea565b5050828760c0870137610100850181815286935091505b6001811015613740578251825260209283019290910190600101613721565b50505095945050505050565b60006020828403121561375e57600080fd5b8151612ba38161322e565b600067ffffffffffffffff80831681851680830382111561378c5761378c61354f565b01949350505050565b6000826137a4576137a461368f565b500490565b601f821115612a8057600081815260208120601f850160051c810160208610156137d05750805b601f850160051c820191505b818110156137ef578281556001016137dc565b505050505050565b815167ffffffffffffffff81111561381157613811612e1c565b6138258161381f84546134cd565b846137a9565b602080601f83116001811461387857600084156138425750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556137ef565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156138c5578886015182559484019460019091019084016138a6565b508582101561390157878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156139245761392461354f565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff8316602082015260606040820152600061395e6060830184612dbf565b9594505050505056fea2646970667358221220ecb3c4ff4d122dc67c5da0cc301778205a6ea1d5c4b7b2c68e6ed0844bd454fb64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101da5760003560e01c8063ac2eba9811610104578063d02103ca116100a2578063e7a7ed0211610071578063e7a7ed021461048a578063e8bf92ed146104ba578063eaeb077b146104da578063f7552761146104ed57600080fd5b8063d02103ca14610407578063d2fd1b3114610427578063d8d1091b1461043a578063d8f54db01461044d57600080fd5b8063b4d63f58116100de578063b4d63f581461035d578063b6b0b0971461037d578063c89e42df146103c8578063cfa8ed47146103db57600080fd5b8063ac2eba9814610337578063adc879e914610340578063b02286c01461035457600080fd5b80636b8616ce1161017c5780637fcb36531161014b5780637fcb3653146102fe5780638c4a0af71461031257806399f5634e14610325578063ab9fc5ef1461032d57600080fd5b80636b8616ce146102a25780636ff512cc146102d05780637152facf146102e357806379847057146102f657600080fd5b8063423fa856116101b8578063423fa8561461023f578063456052671461025f578063542028d51461028757806355b925e61461028f57600080fd5b8063107bf28c146101df57806319d8ac61146101fd5780633c1582671461022a575b600080fd5b6101e76104fc565b6040516101f49190612e09565b60405180910390f35b6003546102119067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101f4565b61023d610238366004612fb5565b61058a565b005b6003546102119068010000000000000000900467ffffffffffffffff1681565b60035461021190700100000000000000000000000000000000900467ffffffffffffffff1681565b6101e7610ebc565b61023d61029d366004613101565b610ec9565b6102c26102b0366004613184565b60016020526000908152604090205481565b6040519081526020016101f4565b61023d6102de3660046131cf565b611439565b6101e76102f13660046131ec565b611574565b6102c2611721565b6004546102119067ffffffffffffffff1681565b61023d610320366004613247565b61179b565b6102c26118cf565b61021162093a8081565b6102c260065481565b6009546102119067ffffffffffffffff1681565b6102c261ea6081565b6102c261036b366004613184565b60026020526000908152604090205481565b6000546103a39062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f4565b61023d6103d6366004613264565b6119fe565b6004546103a39068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b61023d6104353660046132a1565b611aed565b61023d610448366004613377565b611dda565b60045461047a907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016101f4565b600354610211907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6007546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b61023d6104e8366004613488565b612480565b6102c267016345785d8a000081565b600a8054610509906134cd565b80601f0160208091040260200160405190810160405280929190818152602001828054610535906134cd565b80156105825780601f1061055757610100808354040283529160200191610582565b820191906000526020600020905b81548152906001019060200180831161056557829003601f168201915b505050505081565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b805160035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610c925760008782815181106106aa576106aa613520565b602002602001015190506000816060015167ffffffffffffffff16111561091557836106d58161357e565b94505060008160000151805190602001208260200151836060015160405160200161073893929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff881660009081526001909352912054909150811461083d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b816060015167ffffffffffffffff16826040015167ffffffffffffffff16101561090f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610639565b50610ae3565b602081015115806109c4575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b36329161097e9160040190815260200190565b6020604051808303816000875af115801561099d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c191906135a5565b15155b610a50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610639565b80515161ea6011610ae3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610639565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610b19575042816040015167ffffffffffffffff1611155b610bcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610c749061357e565b95505080604001519550508080610c8a906135be565b91505061068e565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610d4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610639565b600354600090610d7d90700100000000000000000000000000000000900467ffffffffffffffff16846135f6565b610d919067ffffffffffffffff168761361f565b6003805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c169390931793909317929092169190911790915560009081526002602052604090208390559050610e6f3330610e488467016345785d8a0000613636565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1692919061294e565b6003546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60088054610509906134cd565b60045467ffffffffffffffff888116911614610f8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c6173745665726966696564426174636820646f6573206e6f74206d6160648201527f7463680000000000000000000000000000000000000000000000000000000000608482015260a401610639565b8667ffffffffffffffff168667ffffffffffffffff1611611056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610639565b60035467ffffffffffffffff6801000000000000000090910481169087161115611129576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a76657269667942617463686573908201527f3a20626174636820646f6573206e6f742068617665206265656e20736571756560648201527f6e63656400000000000000000000000000000000000000000000000000000000608482015260a401610639565b600061113788888888611574565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161116c9190613673565b602060405180830381855afa158015611189573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906111ac91906135a5565b6111b691906136be565b6007546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d9161122091899189918991906004016136d2565b602060405180830381865afa15801561123d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611261919061374c565b6112ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610639565b61133d336112fb8b8b6135f6565b67ffffffffffffffff1661130d6118cf565b6113179190613636565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff169190612a2a565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a1617815560068790556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820189905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b1580156113df57600080fd5b505af11580156113f3573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8b1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a3505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146114ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b67ffffffffffffffff808516600090815260026020526040808220549286168252902054606091908061164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610639565b604080516101ac810190915261016c8152602081016116b5565b8160005b60088110156116ae577bffffffff0000000000000000000000000000000000000000000000006020820284901c60c01b16825260089091019060010161166d565b5092915050565b6116c181600654611669565b90506116cd8187611669565b90506116d98185611669565b90506116e58184611669565b90506116f18188611669565b60c08a811b825289811b6008830152600954901b60108201523360601b6018909101525092505050949350505050565b60035460009067ffffffffffffffff7001000000000000000000000000000000008204811691611770917801000000000000000000000000000000000000000000000000909104166001613769565b61177a91906135f6565b6117969067ffffffffffffffff16670de0b6b3a7640000613636565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461184e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061156990831515815260200190565b600080546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829162010000900473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015611944573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196891906135a5565b60045460035491925060009167ffffffffffffffff918216916801000000000000000082048116916119cd91700100000000000000000000000000000000820481169178010000000000000000000000000000000000000000000000009004166135f6565b6119d79190613769565b6119e191906135f6565b67ffffffffffffffff1690506119f78183613795565b9250505090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611ab1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b6008611abd82826137f7565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b20816040516115699190612e09565b600054610100900460ff1615808015611b0d5750600054600160ff909116105b80611b275750303b158015611b27575060005460ff166001145b611bb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610639565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611c1157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602179055600780549091168a83161790556006889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c0100000000000000000000000000000000000000000000000000000000871515021790556008611d2985826137f7565b50600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600a611d6a83826137f7565b508015611dce57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114611eb7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610639565b805180611f6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b60035467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691611fb7918491700100000000000000000000000000000000900416613911565b1115612045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610639565b60035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205491937001000000000000000000000000000000009004909216915b848110156123b05760008682815181106120a5576120a5613520565b6020026020010151905083806120ba9061357e565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114612213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610639565b61221e60018861361f565b83036122f6574262093a8083604001516122389190613769565b67ffffffffffffffff1611156122f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610639565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c0160405160208183030381529060405280519060200120935085806123989061357e565b965050505080806123a8906135be565b915050612089565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260026020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461255d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610639565b6000612567611721565b9050818111156125f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610639565b61ea6083511061268b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610639565b6000546126b69062010000900473ffffffffffffffffffffffffffffffffffffffff1633308461294e565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015612726573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274a91906135a5565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff169060186127848361357e565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050838051906020012081426040516020016127fd93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260019093529120553233036128eb57600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2612948565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161293f93929190613929565b60405180910390a25b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526129489085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a85565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052612a809084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016129a8565b505050565b6000612ae7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612b919092919063ffffffff16565b805190915015612a805780806020019051810190612b05919061374c565b612a80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610639565b6060612ba08484600085612baa565b90505b9392505050565b606082471015612c3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610639565b73ffffffffffffffffffffffffffffffffffffffff85163b612cba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610639565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612ce39190613673565b60006040518083038185875af1925050503d8060008114612d20576040519150601f19603f3d011682016040523d82523d6000602084013e612d25565b606091505b5091509150612d35828286612d40565b979650505050505050565b60608315612d4f575081612ba3565b825115612d5f5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106399190612e09565b60005b83811015612dae578181015183820152602001612d96565b838111156129485750506000910152565b60008151808452612dd7816020860160208601612d93565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612ba36020830184612dbf565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715612e6e57612e6e612e1c565b60405290565b6040516060810167ffffffffffffffff81118282101715612e6e57612e6e612e1c565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612ede57612ede612e1c565b604052919050565b600067ffffffffffffffff821115612f0057612f00612e1c565b5060051b60200190565b600082601f830112612f1b57600080fd5b813567ffffffffffffffff811115612f3557612f35612e1c565b612f6660207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612e97565b818152846020838601011115612f7b57600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114612fb057600080fd5b919050565b60006020808385031215612fc857600080fd5b823567ffffffffffffffff80821115612fe057600080fd5b818501915085601f830112612ff457600080fd5b813561300761300282612ee6565b612e97565b81815260059190911b8301840190848101908883111561302657600080fd5b8585015b838110156130dd578035858111156130425760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018113156130785760008081fd5b613080612e4b565b89830135888111156130925760008081fd5b6130a08e8c83870101612f0a565b8252506040808401358b83015260606130ba818601612f98565b828401526130c9848601612f98565b90830152508552505091860191860161302a565b5098975050505050505050565b80604081018310156130fb57600080fd5b92915050565b6000806000806000806000610180888a03121561311d57600080fd5b61312688612f98565b965061313460208901612f98565b955060408801359450606088013593506131518960808a016130ea565b925061014088018981111561316557600080fd5b60c0890192506131758a826130ea565b91505092959891949750929550565b60006020828403121561319657600080fd5b612ba382612f98565b73ffffffffffffffffffffffffffffffffffffffff811681146131c157600080fd5b50565b8035612fb08161319f565b6000602082840312156131e157600080fd5b8135612ba38161319f565b6000806000806080858703121561320257600080fd5b61320b85612f98565b935061321960208601612f98565b93969395505050506040820135916060013590565b80151581146131c157600080fd5b8035612fb08161322e565b60006020828403121561325957600080fd5b8135612ba38161322e565b60006020828403121561327657600080fd5b813567ffffffffffffffff81111561328d57600080fd5b61329984828501612f0a565b949350505050565b60008060008060008060008060006101208a8c0312156132c057600080fd5b89356132cb8161319f565b985060208a01356132db8161319f565b97506132e960408b016131c4565b965060608a013595506132fe60808b016131c4565b945061330c60a08b0161323c565b935060c08a013567ffffffffffffffff8082111561332957600080fd5b6133358d838e01612f0a565b945061334360e08d01612f98565b93506101008c013591508082111561335a57600080fd5b506133678c828d01612f0a565b9150509295985092959850929598565b6000602080838503121561338a57600080fd5b823567ffffffffffffffff808211156133a257600080fd5b818501915085601f8301126133b657600080fd5b81356133c461300282612ee6565b81815260059190911b830184019084810190888311156133e357600080fd5b8585015b838110156130dd578035858111156133ff5760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018113156134355760008081fd5b61343d612e74565b898301358881111561344f5760008081fd5b61345d8e8c83870101612f0a565b8252506040808401358b830152613475838501612f98565b90820152855250509186019186016133e7565b6000806040838503121561349b57600080fd5b823567ffffffffffffffff8111156134b257600080fd5b6134be85828601612f0a565b95602094909401359450505050565b600181811c908216806134e157607f821691505b60208210810361351a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681810361359b5761359b61354f565b6001019392505050565b6000602082840312156135b757600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036135ef576135ef61354f565b5060010190565b600067ffffffffffffffff838116908316818110156136175761361761354f565b039392505050565b6000828210156136315761363161354f565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561366e5761366e61354f565b500290565b60008251613685818460208701612d93565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826136cd576136cd61368f565b500690565b61012081016040808784376000838201818152879190815b600281101561370a578484833790840182815292840192906001016136ea565b5050828760c0870137610100850181815286935091505b6001811015613740578251825260209283019290910190600101613721565b50505095945050505050565b60006020828403121561375e57600080fd5b8151612ba38161322e565b600067ffffffffffffffff80831681851680830382111561378c5761378c61354f565b01949350505050565b6000826137a4576137a461368f565b500490565b601f821115612a8057600081815260208120601f850160051c810160208610156137d05750805b601f850160051c820191505b818110156137ef578281556001016137dc565b505050505050565b815167ffffffffffffffff81111561381157613811612e1c565b6138258161381f84546134cd565b846137a9565b602080601f83116001811461387857600084156138425750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556137ef565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156138c5578886015182559484019460019091019084016138a6565b508582101561390157878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156139245761392461354f565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff8316602082015260606040820152600061395e6060830184612dbf565b9594505050505056fea2646970667358221220ecb3c4ff4d122dc67c5da0cc301778205a6ea1d5c4b7b2c68e6ed0844bd454fb64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50613982806100206000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c8063ac2eba9811610104578063d02103ca116100a2578063e7a7ed0211610071578063e7a7ed021461048a578063e8bf92ed146104ba578063eaeb077b146104da578063f7552761146104ed57600080fd5b8063d02103ca14610407578063d2fd1b3114610427578063d8d1091b1461043a578063d8f54db01461044d57600080fd5b8063b4d63f58116100de578063b4d63f581461035d578063b6b0b0971461037d578063c89e42df146103c8578063cfa8ed47146103db57600080fd5b8063ac2eba9814610337578063adc879e914610340578063b02286c01461035457600080fd5b80636b8616ce1161017c5780637fcb36531161014b5780637fcb3653146102fe5780638c4a0af71461031257806399f5634e14610325578063ab9fc5ef1461032d57600080fd5b80636b8616ce146102a25780636ff512cc146102d05780637152facf146102e357806379847057146102f657600080fd5b8063423fa856116101b8578063423fa8561461023f578063456052671461025f578063542028d51461028757806355b925e61461028f57600080fd5b8063107bf28c146101df57806319d8ac61146101fd5780633c1582671461022a575b600080fd5b6101e76104fc565b6040516101f49190612dee565b60405180910390f35b6003546102119067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101f4565b61023d610238366004612f9a565b61058a565b005b6003546102119068010000000000000000900467ffffffffffffffff1681565b60035461021190700100000000000000000000000000000000900467ffffffffffffffff1681565b6101e7610ebc565b61023d61029d3660046130e6565b610ec9565b6102c26102b0366004613169565b60016020526000908152604090205481565b6040519081526020016101f4565b61023d6102de3660046131b4565b611439565b6101e76102f13660046131d1565b611574565b6102c2611706565b6004546102119067ffffffffffffffff1681565b61023d61032036600461322c565b611780565b6102c26118b4565b61021162093a8081565b6102c260065481565b6009546102119067ffffffffffffffff1681565b6102c261ea6081565b6102c261036b366004613169565b60026020526000908152604090205481565b6000546103a39062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f4565b61023d6103d6366004613249565b6119e3565b6004546103a39068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b61023d610435366004613286565b611ad2565b61023d61044836600461335c565b611dbf565b60045461047a907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016101f4565b600354610211907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6007546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b61023d6104e836600461346d565b612465565b6102c267016345785d8a000081565b600a8054610509906134b2565b80601f0160208091040260200160405190810160405280929190818152602001828054610535906134b2565b80156105825780601f1061055757610100808354040283529160200191610582565b820191906000526020600020905b81548152906001019060200180831161056557829003601f168201915b505050505081565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b805160035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610c925760008782815181106106aa576106aa613505565b602002602001015190506000816060015167ffffffffffffffff16111561091557836106d581613563565b94505060008160000151805190602001208260200151836060015160405160200161073893929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff881660009081526001909352912054909150811461083d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b816060015167ffffffffffffffff16826040015167ffffffffffffffff16101561090f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610639565b50610ae3565b602081015115806109c4575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b36329161097e9160040190815260200190565b6020604051808303816000875af115801561099d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c1919061358a565b15155b610a50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610639565b80515161ea6011610ae3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610639565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610b19575042816040015167ffffffffffffffff1611155b610bcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610c7490613563565b95505080604001519550508080610c8a906135a3565b91505061068e565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610d4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610639565b600354600090610d7d90700100000000000000000000000000000000900467ffffffffffffffff16846135db565b610d919067ffffffffffffffff1687613604565b6003805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c169390931793909317929092169190911790915560009081526002602052604090208390559050610e6f3330610e488467016345785d8a000061361b565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16929190612933565b6003546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60088054610509906134b2565b60045467ffffffffffffffff888116911614610f8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c6173745665726966696564426174636820646f6573206e6f74206d6160648201527f7463680000000000000000000000000000000000000000000000000000000000608482015260a401610639565b8667ffffffffffffffff168667ffffffffffffffff1611611056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610639565b60035467ffffffffffffffff6801000000000000000090910481169087161115611129576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a76657269667942617463686573908201527f3a20626174636820646f6573206e6f742068617665206265656e20736571756560648201527f6e63656400000000000000000000000000000000000000000000000000000000608482015260a401610639565b600061113788888888611574565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161116c9190613658565b602060405180830381855afa158015611189573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906111ac919061358a565b6111b691906136a3565b6007546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d9161122091899189918991906004016136b7565b602060405180830381865afa15801561123d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112619190613731565b6112ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610639565b61133d336112fb8b8b6135db565b67ffffffffffffffff1661130d6118b4565b611317919061361b565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff169190612a0f565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a1617815560068790556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820189905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b1580156113df57600080fd5b505af11580156113f3573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8b1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a3505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146114ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b67ffffffffffffffff808516600090815260026020526040808220549286168252902054606091908061164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610639565b6006546009546040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b1660208201526034810192909252605482018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607485015291821b8116607c8401526084830187905260a4830184905260c483018890529088901b1660e482015260ec0160405160208183030381529060405292505050949350505050565b60035460009067ffffffffffffffff700100000000000000000000000000000000820481169161175591780100000000000000000000000000000000000000000000000090910416600161374e565b61175f91906135db565b61177b9067ffffffffffffffff16670de0b6b3a764000061361b565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061156990831515815260200190565b600080546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829162010000900473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015611929573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194d919061358a565b60045460035491925060009167ffffffffffffffff918216916801000000000000000082048116916119b291700100000000000000000000000000000000820481169178010000000000000000000000000000000000000000000000009004166135db565b6119bc919061374e565b6119c691906135db565b67ffffffffffffffff1690506119dc818361377a565b9250505090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611a96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b6008611aa282826137dc565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b20816040516115699190612dee565b600054610100900460ff1615808015611af25750600054600160ff909116105b80611b0c5750303b158015611b0c575060005460ff166001145b611b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610639565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611bf657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602179055600780549091168a83161790556006889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c0100000000000000000000000000000000000000000000000000000000871515021790556008611d0e85826137dc565b50600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600a611d4f83826137dc565b508015611db357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114611e9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610639565b805180611f51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b60035467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691611f9c9184917001000000000000000000000000000000009004166138f6565b111561202a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610639565b60035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205491937001000000000000000000000000000000009004909216915b8481101561239557600086828151811061208a5761208a613505565b60200260200101519050838061209f90613563565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff88166000908152600190935291205490915081146121f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610639565b612203600188613604565b83036122db574262093a80836040015161221d919061374e565b67ffffffffffffffff1611156122db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610639565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209350858061237d90613563565b9650505050808061238d906135a3565b91505061206e565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260026020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610639565b600061254c611706565b9050818111156125de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610639565b61ea60835110612670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610639565b60005461269b9062010000900473ffffffffffffffffffffffffffffffffffffffff16333084612933565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa15801561270b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061272f919061358a565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff1690601861276983613563565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050838051906020012081426040516020016127e293929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260019093529120553233036128d057600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261292d565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516129249392919061390e565b60405180910390a25b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261292d9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a6a565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052612a659084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161298d565b505050565b6000612acc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612b769092919063ffffffff16565b805190915015612a655780806020019051810190612aea9190613731565b612a65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610639565b6060612b858484600085612b8f565b90505b9392505050565b606082471015612c21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610639565b73ffffffffffffffffffffffffffffffffffffffff85163b612c9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610639565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612cc89190613658565b60006040518083038185875af1925050503d8060008114612d05576040519150601f19603f3d011682016040523d82523d6000602084013e612d0a565b606091505b5091509150612d1a828286612d25565b979650505050505050565b60608315612d34575081612b88565b825115612d445782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106399190612dee565b60005b83811015612d93578181015183820152602001612d7b565b8381111561292d5750506000910152565b60008151808452612dbc816020860160208601612d78565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612b886020830184612da4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715612e5357612e53612e01565b60405290565b6040516060810167ffffffffffffffff81118282101715612e5357612e53612e01565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612ec357612ec3612e01565b604052919050565b600067ffffffffffffffff821115612ee557612ee5612e01565b5060051b60200190565b600082601f830112612f0057600080fd5b813567ffffffffffffffff811115612f1a57612f1a612e01565b612f4b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612e7c565b818152846020838601011115612f6057600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114612f9557600080fd5b919050565b60006020808385031215612fad57600080fd5b823567ffffffffffffffff80821115612fc557600080fd5b818501915085601f830112612fd957600080fd5b8135612fec612fe782612ecb565b612e7c565b81815260059190911b8301840190848101908883111561300b57600080fd5b8585015b838110156130c2578035858111156130275760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181131561305d5760008081fd5b613065612e30565b89830135888111156130775760008081fd5b6130858e8c83870101612eef565b8252506040808401358b830152606061309f818601612f7d565b828401526130ae848601612f7d565b90830152508552505091860191860161300f565b5098975050505050505050565b80604081018310156130e057600080fd5b92915050565b6000806000806000806000610180888a03121561310257600080fd5b61310b88612f7d565b965061311960208901612f7d565b955060408801359450606088013593506131368960808a016130cf565b925061014088018981111561314a57600080fd5b60c08901925061315a8a826130cf565b91505092959891949750929550565b60006020828403121561317b57600080fd5b612b8882612f7d565b73ffffffffffffffffffffffffffffffffffffffff811681146131a657600080fd5b50565b8035612f9581613184565b6000602082840312156131c657600080fd5b8135612b8881613184565b600080600080608085870312156131e757600080fd5b6131f085612f7d565b93506131fe60208601612f7d565b93969395505050506040820135916060013590565b80151581146131a657600080fd5b8035612f9581613213565b60006020828403121561323e57600080fd5b8135612b8881613213565b60006020828403121561325b57600080fd5b813567ffffffffffffffff81111561327257600080fd5b61327e84828501612eef565b949350505050565b60008060008060008060008060006101208a8c0312156132a557600080fd5b89356132b081613184565b985060208a01356132c081613184565b97506132ce60408b016131a9565b965060608a013595506132e360808b016131a9565b94506132f160a08b01613221565b935060c08a013567ffffffffffffffff8082111561330e57600080fd5b61331a8d838e01612eef565b945061332860e08d01612f7d565b93506101008c013591508082111561333f57600080fd5b5061334c8c828d01612eef565b9150509295985092959850929598565b6000602080838503121561336f57600080fd5b823567ffffffffffffffff8082111561338757600080fd5b818501915085601f83011261339b57600080fd5b81356133a9612fe782612ecb565b81815260059190911b830184019084810190888311156133c857600080fd5b8585015b838110156130c2578035858111156133e45760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181131561341a5760008081fd5b613422612e59565b89830135888111156134345760008081fd5b6134428e8c83870101612eef565b8252506040808401358b83015261345a838501612f7d565b90820152855250509186019186016133cc565b6000806040838503121561348057600080fd5b823567ffffffffffffffff81111561349757600080fd5b6134a385828601612eef565b95602094909401359450505050565b600181811c908216806134c657607f821691505b6020821081036134ff577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681810361358057613580613534565b6001019392505050565b60006020828403121561359c57600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036135d4576135d4613534565b5060010190565b600067ffffffffffffffff838116908316818110156135fc576135fc613534565b039392505050565b60008282101561361657613616613534565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561365357613653613534565b500290565b6000825161366a818460208701612d78565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826136b2576136b2613674565b500690565b61012081016040808784376000838201818152879190815b60028110156136ef578484833790840182815292840192906001016136cf565b5050828760c0870137610100850181815286935091505b6001811015613725578251825260209283019290910190600101613706565b50505095945050505050565b60006020828403121561374357600080fd5b8151612b8881613213565b600067ffffffffffffffff80831681851680830382111561377157613771613534565b01949350505050565b60008261378957613789613674565b500490565b601f821115612a6557600081815260208120601f850160051c810160208610156137b55750805b601f850160051c820191505b818110156137d4578281556001016137c1565b505050505050565b815167ffffffffffffffff8111156137f6576137f6612e01565b61380a8161380484546134b2565b8461378e565b602080601f83116001811461385d57600084156138275750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556137d4565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156138aa5788860151825594840194600190910190840161388b565b50858210156138e657878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000821982111561390957613909613534565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006139436060830184612da4565b9594505050505056fea264697066735822122071d94010caa4b1b92859aa3a9d3b136e1010b41fb42bc5df80410982b070571764736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101da5760003560e01c8063ac2eba9811610104578063d02103ca116100a2578063e7a7ed0211610071578063e7a7ed021461048a578063e8bf92ed146104ba578063eaeb077b146104da578063f7552761146104ed57600080fd5b8063d02103ca14610407578063d2fd1b3114610427578063d8d1091b1461043a578063d8f54db01461044d57600080fd5b8063b4d63f58116100de578063b4d63f581461035d578063b6b0b0971461037d578063c89e42df146103c8578063cfa8ed47146103db57600080fd5b8063ac2eba9814610337578063adc879e914610340578063b02286c01461035457600080fd5b80636b8616ce1161017c5780637fcb36531161014b5780637fcb3653146102fe5780638c4a0af71461031257806399f5634e14610325578063ab9fc5ef1461032d57600080fd5b80636b8616ce146102a25780636ff512cc146102d05780637152facf146102e357806379847057146102f657600080fd5b8063423fa856116101b8578063423fa8561461023f578063456052671461025f578063542028d51461028757806355b925e61461028f57600080fd5b8063107bf28c146101df57806319d8ac61146101fd5780633c1582671461022a575b600080fd5b6101e76104fc565b6040516101f49190612dee565b60405180910390f35b6003546102119067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101f4565b61023d610238366004612f9a565b61058a565b005b6003546102119068010000000000000000900467ffffffffffffffff1681565b60035461021190700100000000000000000000000000000000900467ffffffffffffffff1681565b6101e7610ebc565b61023d61029d3660046130e6565b610ec9565b6102c26102b0366004613169565b60016020526000908152604090205481565b6040519081526020016101f4565b61023d6102de3660046131b4565b611439565b6101e76102f13660046131d1565b611574565b6102c2611706565b6004546102119067ffffffffffffffff1681565b61023d61032036600461322c565b611780565b6102c26118b4565b61021162093a8081565b6102c260065481565b6009546102119067ffffffffffffffff1681565b6102c261ea6081565b6102c261036b366004613169565b60026020526000908152604090205481565b6000546103a39062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f4565b61023d6103d6366004613249565b6119e3565b6004546103a39068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b61023d610435366004613286565b611ad2565b61023d61044836600461335c565b611dbf565b60045461047a907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016101f4565b600354610211907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6007546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b61023d6104e836600461346d565b612465565b6102c267016345785d8a000081565b600a8054610509906134b2565b80601f0160208091040260200160405190810160405280929190818152602001828054610535906134b2565b80156105825780601f1061055757610100808354040283529160200191610582565b820191906000526020600020905b81548152906001019060200180831161056557829003601f168201915b505050505081565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b805160035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610c925760008782815181106106aa576106aa613505565b602002602001015190506000816060015167ffffffffffffffff16111561091557836106d581613563565b94505060008160000151805190602001208260200151836060015160405160200161073893929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff881660009081526001909352912054909150811461083d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b816060015167ffffffffffffffff16826040015167ffffffffffffffff16101561090f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610639565b50610ae3565b602081015115806109c4575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b36329161097e9160040190815260200190565b6020604051808303816000875af115801561099d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c1919061358a565b15155b610a50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610639565b80515161ea6011610ae3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610639565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610b19575042816040015167ffffffffffffffff1611155b610bcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610c7490613563565b95505080604001519550508080610c8a906135a3565b91505061068e565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610d4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610639565b600354600090610d7d90700100000000000000000000000000000000900467ffffffffffffffff16846135db565b610d919067ffffffffffffffff1687613604565b6003805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c169390931793909317929092169190911790915560009081526002602052604090208390559050610e6f3330610e488467016345785d8a000061361b565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16929190612933565b6003546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60088054610509906134b2565b60045467ffffffffffffffff888116911614610f8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c6173745665726966696564426174636820646f6573206e6f74206d6160648201527f7463680000000000000000000000000000000000000000000000000000000000608482015260a401610639565b8667ffffffffffffffff168667ffffffffffffffff1611611056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610639565b60035467ffffffffffffffff6801000000000000000090910481169087161115611129576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a76657269667942617463686573908201527f3a20626174636820646f6573206e6f742068617665206265656e20736571756560648201527f6e63656400000000000000000000000000000000000000000000000000000000608482015260a401610639565b600061113788888888611574565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161116c9190613658565b602060405180830381855afa158015611189573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906111ac919061358a565b6111b691906136a3565b6007546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d9161122091899189918991906004016136b7565b602060405180830381865afa15801561123d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112619190613731565b6112ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610639565b61133d336112fb8b8b6135db565b67ffffffffffffffff1661130d6118b4565b611317919061361b565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff169190612a0f565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a1617815560068790556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820189905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b1580156113df57600080fd5b505af11580156113f3573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8b1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a3505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146114ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b67ffffffffffffffff808516600090815260026020526040808220549286168252902054606091908061164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610639565b6006546009546040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b1660208201526034810192909252605482018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607485015291821b8116607c8401526084830187905260a4830184905260c483018890529088901b1660e482015260ec0160405160208183030381529060405292505050949350505050565b60035460009067ffffffffffffffff700100000000000000000000000000000000820481169161175591780100000000000000000000000000000000000000000000000090910416600161374e565b61175f91906135db565b61177b9067ffffffffffffffff16670de0b6b3a764000061361b565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061156990831515815260200190565b600080546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829162010000900473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015611929573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194d919061358a565b60045460035491925060009167ffffffffffffffff918216916801000000000000000082048116916119b291700100000000000000000000000000000000820481169178010000000000000000000000000000000000000000000000009004166135db565b6119bc919061374e565b6119c691906135db565b67ffffffffffffffff1690506119dc818361377a565b9250505090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611a96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b6008611aa282826137dc565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b20816040516115699190612dee565b600054610100900460ff1615808015611af25750600054600160ff909116105b80611b0c5750303b158015611b0c575060005460ff166001145b611b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610639565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611bf657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602179055600780549091168a83161790556006889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c0100000000000000000000000000000000000000000000000000000000871515021790556008611d0e85826137dc565b50600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600a611d4f83826137dc565b508015611db357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114611e9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610639565b805180611f51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b60035467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691611f9c9184917001000000000000000000000000000000009004166138f6565b111561202a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610639565b60035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205491937001000000000000000000000000000000009004909216915b8481101561239557600086828151811061208a5761208a613505565b60200260200101519050838061209f90613563565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff88166000908152600190935291205490915081146121f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610639565b612203600188613604565b83036122db574262093a80836040015161221d919061374e565b67ffffffffffffffff1611156122db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610639565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209350858061237d90613563565b9650505050808061238d906135a3565b91505061206e565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260026020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610639565b600061254c611706565b9050818111156125de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610639565b61ea60835110612670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610639565b60005461269b9062010000900473ffffffffffffffffffffffffffffffffffffffff16333084612933565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa15801561270b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061272f919061358a565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff1690601861276983613563565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050838051906020012081426040516020016127e293929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260019093529120553233036128d057600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261292d565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516129249392919061390e565b60405180910390a25b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261292d9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a6a565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052612a659084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161298d565b505050565b6000612acc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612b769092919063ffffffff16565b805190915015612a655780806020019051810190612aea9190613731565b612a65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610639565b6060612b858484600085612b8f565b90505b9392505050565b606082471015612c21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610639565b73ffffffffffffffffffffffffffffffffffffffff85163b612c9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610639565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612cc89190613658565b60006040518083038185875af1925050503d8060008114612d05576040519150601f19603f3d011682016040523d82523d6000602084013e612d0a565b606091505b5091509150612d1a828286612d25565b979650505050505050565b60608315612d34575081612b88565b825115612d445782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106399190612dee565b60005b83811015612d93578181015183820152602001612d7b565b8381111561292d5750506000910152565b60008151808452612dbc816020860160208601612d78565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612b886020830184612da4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715612e5357612e53612e01565b60405290565b6040516060810167ffffffffffffffff81118282101715612e5357612e53612e01565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612ec357612ec3612e01565b604052919050565b600067ffffffffffffffff821115612ee557612ee5612e01565b5060051b60200190565b600082601f830112612f0057600080fd5b813567ffffffffffffffff811115612f1a57612f1a612e01565b612f4b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612e7c565b818152846020838601011115612f6057600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114612f9557600080fd5b919050565b60006020808385031215612fad57600080fd5b823567ffffffffffffffff80821115612fc557600080fd5b818501915085601f830112612fd957600080fd5b8135612fec612fe782612ecb565b612e7c565b81815260059190911b8301840190848101908883111561300b57600080fd5b8585015b838110156130c2578035858111156130275760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181131561305d5760008081fd5b613065612e30565b89830135888111156130775760008081fd5b6130858e8c83870101612eef565b8252506040808401358b830152606061309f818601612f7d565b828401526130ae848601612f7d565b90830152508552505091860191860161300f565b5098975050505050505050565b80604081018310156130e057600080fd5b92915050565b6000806000806000806000610180888a03121561310257600080fd5b61310b88612f7d565b965061311960208901612f7d565b955060408801359450606088013593506131368960808a016130cf565b925061014088018981111561314a57600080fd5b60c08901925061315a8a826130cf565b91505092959891949750929550565b60006020828403121561317b57600080fd5b612b8882612f7d565b73ffffffffffffffffffffffffffffffffffffffff811681146131a657600080fd5b50565b8035612f9581613184565b6000602082840312156131c657600080fd5b8135612b8881613184565b600080600080608085870312156131e757600080fd5b6131f085612f7d565b93506131fe60208601612f7d565b93969395505050506040820135916060013590565b80151581146131a657600080fd5b8035612f9581613213565b60006020828403121561323e57600080fd5b8135612b8881613213565b60006020828403121561325b57600080fd5b813567ffffffffffffffff81111561327257600080fd5b61327e84828501612eef565b949350505050565b60008060008060008060008060006101208a8c0312156132a557600080fd5b89356132b081613184565b985060208a01356132c081613184565b97506132ce60408b016131a9565b965060608a013595506132e360808b016131a9565b94506132f160a08b01613221565b935060c08a013567ffffffffffffffff8082111561330e57600080fd5b61331a8d838e01612eef565b945061332860e08d01612f7d565b93506101008c013591508082111561333f57600080fd5b5061334c8c828d01612eef565b9150509295985092959850929598565b6000602080838503121561336f57600080fd5b823567ffffffffffffffff8082111561338757600080fd5b818501915085601f83011261339b57600080fd5b81356133a9612fe782612ecb565b81815260059190911b830184019084810190888311156133c857600080fd5b8585015b838110156130c2578035858111156133e45760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181131561341a5760008081fd5b613422612e59565b89830135888111156134345760008081fd5b6134428e8c83870101612eef565b8252506040808401358b83015261345a838501612f7d565b90820152855250509186019186016133cc565b6000806040838503121561348057600080fd5b823567ffffffffffffffff81111561349757600080fd5b6134a385828601612eef565b95602094909401359450505050565b600181811c908216806134c657607f821691505b6020821081036134ff577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681810361358057613580613534565b6001019392505050565b60006020828403121561359c57600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036135d4576135d4613534565b5060010190565b600067ffffffffffffffff838116908316818110156135fc576135fc613534565b039392505050565b60008282101561361657613616613534565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561365357613653613534565b500290565b6000825161366a818460208701612d78565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826136b2576136b2613674565b500690565b61012081016040808784376000838201818152879190815b60028110156136ef578484833790840182815292840192906001016136cf565b5050828760c0870137610100850181815286935091505b6001811015613725578251825260209283019290910190600101613706565b50505095945050505050565b60006020828403121561374357600080fd5b8151612b8881613213565b600067ffffffffffffffff80831681851680830382111561377157613771613534565b01949350505050565b60008261378957613789613674565b500490565b601f821115612a6557600081815260208120601f850160051c810160208610156137b55750805b601f850160051c820191505b818110156137d4578281556001016137c1565b505050505050565b815167ffffffffffffffff8111156137f6576137f6612e01565b61380a8161380484546134b2565b8461378e565b602080601f83116001811461385d57600084156138275750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556137d4565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156138aa5788860151825594840194600190910190840161388b565b50858210156138e657878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000821982111561390957613909613534565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006139436060830184612da4565b9594505050505056fea264697066735822122071d94010caa4b1b92859aa3a9d3b136e1010b41fb42bc5df80410982b070571764736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/ProofOfEfficiencyMock.json b/compiled-contracts/ProofOfEfficiencyMock.json index 80ca00ab1..41c9c2115 100644 --- a/compiled-contracts/ProofOfEfficiencyMock.json +++ b/compiled-contracts/ProofOfEfficiencyMock.json @@ -920,8 +920,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506147ed806100206000396000f3fe608060405234801561001057600080fd5b50600436106102de5760003560e01c80639b79676011610186578063d02103ca116100e3578063d8f54db011610097578063eaeb077b11610071578063eaeb077b14610739578063f2fde38b1461074c578063f75527611461075f57600080fd5b8063d8f54db0146106ac578063e7a7ed02146106e9578063e8bf92ed1461071957600080fd5b8063d2fd1b31116100c8578063d2fd1b3114610673578063d307b74314610686578063d8d1091b1461069957600080fd5b8063d02103ca14610640578063d0ae98dd1461066057600080fd5b8063b4d63f581161013a578063c0cad3021161011f578063c0cad302146105ee578063c89e42df14610601578063cfa8ed471461061457600080fd5b8063b4d63f58146105a8578063b6b0b097146105c857600080fd5b8063ac2eba981161016b578063ac2eba9814610582578063adc879e91461058b578063b02286c01461059f57600080fd5b80639b79676014610565578063ab9fc5ef1461057857600080fd5b80636b8616ce1161023f57806379847057116101f35780638da5cb5b116101cd5780638da5cb5b1461050b57806396dc3d391461054a57806399f5634e1461055d57600080fd5b806379847057146104dc5780637fcb3653146104e45780638c4a0af7146104f857600080fd5b8063715018a611610224578063715018a6146104ae5780637152facf146104b6578063748608de146104c957600080fd5b80636b8616ce1461047b5780636ff512cc1461049b57600080fd5b806345605267116102965780635437988d1161027b5780635437988d146103a657806355b925e6146103b9578063574f649e146103cc57600080fd5b80634560526714610376578063542028d51461039e57600080fd5b80631a26da14116102c75780631a26da141461032e5780633c15826714610343578063423fa8561461035657600080fd5b8063107bf28c146102e357806319d8ac6114610301575b600080fd5b6102eb61076e565b6040516102f89190613ba3565b60405180910390f35b6003546103159067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102f8565b61034161033c366004613bd3565b6107fc565b005b610341610351366004613d79565b610821565b6003546103159068010000000000000000900467ffffffffffffffff1681565b60035461031590700100000000000000000000000000000000900467ffffffffffffffff1681565b6102eb611153565b6103416103b4366004613edb565b611160565b6103416103c7366004613f0f565b6111af565b61046d6103da366004613f92565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b6040519081526020016102f8565b61046d610489366004614008565b60016020526000908152604090205481565b6103416104a9366004613edb565b61171f565b61034161185a565b6102eb6104c4366004614023565b61186e565b6103416104d7366004613f0f565b611a1b565b61046d611e24565b6004546103159067ffffffffffffffff1681565b61034161050636600461407e565b611e9e565b603d5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102f8565b610341610558366004614008565b611fd2565b61046d612015565b610341610573366004614008565b612144565b61031562093a8081565b61046d60065481565b6009546103159067ffffffffffffffff1681565b61046d61ea6081565b61046d6105b6366004614008565b60026020526000908152604090205481565b6000546105259062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6103416105fc36600461409b565b612193565b61034161060f36600461409b565b6121ab565b6004546105259068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546105259073ffffffffffffffffffffffffffffffffffffffff1681565b61046d61066e366004614023565b61229a565b6103416106813660046140d8565b612594565b6103416106943660046141ae565b612889565b6103416106a73660046141c7565b612896565b6004546106d9907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016102f8565b600354610315907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6007546105259073ffffffffffffffffffffffffffffffffffffffff1681565b6103416107473660046142d8565b612f3c565b61034161075a366004613edb565b61340a565b61046d67016345785d8a000081565b600a805461077b9061431d565b80601f01602080910402602001604051908101604052809291908181526020018280546107a79061431d565b80156107f45780601f106107c9576101008083540402835291602001916107f4565b820191906000526020600020905b8154815290600101906020018083116107d757829003601f168201915b505050505081565b6108046134c1565b67ffffffffffffffff909116600090815260026020526040902055565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146108d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b805160035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610f2957600087828151811061094157610941614370565b602002602001015190506000816060015167ffffffffffffffff161115610bac578361096c816143ce565b9450506000816000015180519060200120826020015183606001516040516020016109cf93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114610ad4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610ba6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016108d0565b50610d7a565b60208101511580610c5b575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610c159160040190815260200190565b6020604051808303816000875af1158015610c34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5891906143f5565b15155b610ce7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016108d0565b80515161ea6011610d7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016108d0565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610db0575042816040015167ffffffffffffffff1611155b610e62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610f0b906143ce565b95505080604001519550508080610f219061440e565b915050610925565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610fe6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016108d0565b60035460009061101490700100000000000000000000000000000000900467ffffffffffffffff1684614446565b6110289067ffffffffffffffff168761446f565b6003805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152600260205260409020839055905061110633306110df8467016345785d8a0000614486565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16929190613542565b6003546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b6008805461077b9061431d565b6111686134c1565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60045467ffffffffffffffff888116911614611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c6173745665726966696564426174636820646f6573206e6f74206d6160648201527f7463680000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8667ffffffffffffffff168667ffffffffffffffff161161133c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a4016108d0565b60035467ffffffffffffffff680100000000000000009091048116908716111561140f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a76657269667942617463686573908201527f3a20626174636820646f6573206e6f742068617665206265656e20736571756560648201527f6e63656400000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b600061141d8888888861186e565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161145291906144c3565b602060405180830381855afa15801561146f573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061149291906143f5565b61149c919061450e565b6007546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916115069189918991899190600401614522565b602060405180830381865afa158015611523573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611547919061459c565b6115d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016108d0565b611623336115e18b8b614446565b67ffffffffffffffff166115f3612015565b6115fd9190614486565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16919061361e565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a1617815560068790556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820189905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b1580156116c557600080fd5b505af11580156116d9573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8b1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a3505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146117d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b6118626134c1565b61186c6000613679565b565b67ffffffffffffffff8085166000908152600260205260408082205492861682529020546060919080611949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b604080516101ac810190915261016c8152602081016119af565b8160005b60088110156119a8577bffffffff0000000000000000000000000000000000000000000000006020820284901c60c01b168252600890910190600101611967565b5092915050565b6119bb81600654611963565b90506119c78187611963565b90506119d38185611963565b90506119df8184611963565b90506119eb8188611963565b60c08a811b825289811b6008830152600954901b60108201523360601b6018909101525092505050949350505050565b611a236134c1565b60045467ffffffffffffffff888116911614611ae7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8667ffffffffffffffff168667ffffffffffffffff1611611bb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff6801000000000000000090910481169087161115611c82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b67ffffffffffffffff861660009081526002602052604090205480611d29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f74206578697374000060648201526084016108d0565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff891617815560068690556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820188905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b158015611dcb57600080fd5b505af1158015611ddf573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8a1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a35050505050505050565b60035460009067ffffffffffffffff7001000000000000000000000000000000008204811691611e739178010000000000000000000000000000000000000000000000009091041660016145b9565b611e7d9190614446565b611e999067ffffffffffffffff16670de0b6b3a7640000614486565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611f51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061184f90831515815260200190565b611fda6134c1565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b600080546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829162010000900473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561208a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ae91906143f5565b60045460035491925060009167ffffffffffffffff918216916801000000000000000082048116916121139170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614446565b61211d91906145b9565b6121279190614446565b67ffffffffffffffff16905061213d81836145e5565b9250505090565b61214c6134c1565b6003805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b61219b6134c1565b600a6121a78282614647565b5050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461225e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600861226a8282614647565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161184f9190613ba3565b60045460009067ffffffffffffffff868116911614612361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8467ffffffffffffffff168467ffffffffffffffff161161242a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff68010000000000000000909104811690851611156124fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b600061250a8686868661186e565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161253f91906144c3565b602060405180830381855afa15801561255c573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061257f91906143f5565b612589919061450e565b979650505050505050565b600054610100900460ff16158080156125b45750600054600160ff909116105b806125ce5750303b1580156125ce575060005460ff166001145b61265a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016108d0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156126b857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602179055600780549091168a83161790556006889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c01000000000000000000000000000000000000000000000000000000008715150217905560086127d08582614647565b50600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600a6128118382614647565b5061281a6136f0565b801561287d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6128916134c1565b600655565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108d0565b805180612a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612a73918491700100000000000000000000000000000000900416614761565b1115612b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016108d0565b60035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205491937001000000000000000000000000000000009004909216915b84811015612e6c576000868281518110612b6157612b61614370565b602002602001015190508380612b76906143ce565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114612ccf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016108d0565b612cda60018861446f565b8303612db2574262093a808360400151612cf491906145b9565b67ffffffffffffffff161115612db2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016108d0565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612e54906143ce565b96505050508080612e649061440e565b915050612b45565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260026020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114613019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108d0565b6000613023611e24565b9050818111156130b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016108d0565b61ea60835110613147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016108d0565b6000546131729062010000900473ffffffffffffffffffffffffffffffffffffffff16333084613542565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa1580156131e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061320691906143f5565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613240836143ce565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050838051906020012081426040516020016132b993929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260019093529120553233036133a757600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613404565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516133fb93929190614779565b60405180910390a25b50505050565b6134126134c1565b73ffffffffffffffffffffffffffffffffffffffff81166134b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108d0565b6134be81613679565b50565b603d5473ffffffffffffffffffffffffffffffffffffffff16331461186c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526134049085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261378f565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526136749084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161359c565b505050565b603d805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16613787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d0565b61186c61389b565b60006137f1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661393b9092919063ffffffff16565b805190915015613674578080602001905181019061380f919061459c565b613674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108d0565b600054610100900460ff16613932576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d0565b61186c33613679565b606061394a8484600085613954565b90505b9392505050565b6060824710156139e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016108d0565b73ffffffffffffffffffffffffffffffffffffffff85163b613a64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108d0565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613a8d91906144c3565b60006040518083038185875af1925050503d8060008114613aca576040519150601f19603f3d011682016040523d82523d6000602084013e613acf565b606091505b509150915061258982828660608315613ae957508161394d565b825115613af95782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d09190613ba3565b60005b83811015613b48578181015183820152602001613b30565b838111156134045750506000910152565b60008151808452613b71816020860160208601613b2d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061394d6020830184613b59565b803567ffffffffffffffff81168114613bce57600080fd5b919050565b60008060408385031215613be657600080fd5b613bef83613bb6565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613c4f57613c4f613bfd565b60405290565b6040516060810167ffffffffffffffff81118282101715613c4f57613c4f613bfd565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613cbf57613cbf613bfd565b604052919050565b600067ffffffffffffffff821115613ce157613ce1613bfd565b5060051b60200190565b600082601f830112613cfc57600080fd5b813567ffffffffffffffff811115613d1657613d16613bfd565b613d4760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613c78565b818152846020838601011115613d5c57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613d8c57600080fd5b823567ffffffffffffffff80821115613da457600080fd5b818501915085601f830112613db857600080fd5b8135613dcb613dc682613cc7565b613c78565b81815260059190911b83018401908481019088831115613dea57600080fd5b8585015b83811015613ea157803585811115613e065760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001811315613e3c5760008081fd5b613e44613c2c565b8983013588811115613e565760008081fd5b613e648e8c83870101613ceb565b8252506040808401358b8301526060613e7e818601613bb6565b82840152613e8d848601613bb6565b908301525085525050918601918601613dee565b5098975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146134be57600080fd5b8035613bce81613eae565b600060208284031215613eed57600080fd5b813561394d81613eae565b8060408101831015613f0957600080fd5b92915050565b6000806000806000806000610180888a031215613f2b57600080fd5b613f3488613bb6565b9650613f4260208901613bb6565b95506040880135945060608801359350613f5f8960808a01613ef8565b9250610140880189811115613f7357600080fd5b60c089019250613f838a82613ef8565b91505092959891949750929550565b600080600080600060a08688031215613faa57600080fd5b85359450602086013567ffffffffffffffff811115613fc857600080fd5b613fd488828901613ceb565b94505060408601359250613fea60608701613bb6565b91506080860135613ffa81613eae565b809150509295509295909350565b60006020828403121561401a57600080fd5b61394d82613bb6565b6000806000806080858703121561403957600080fd5b61404285613bb6565b935061405060208601613bb6565b93969395505050506040820135916060013590565b80151581146134be57600080fd5b8035613bce81614065565b60006020828403121561409057600080fd5b813561394d81614065565b6000602082840312156140ad57600080fd5b813567ffffffffffffffff8111156140c457600080fd5b6140d084828501613ceb565b949350505050565b60008060008060008060008060006101208a8c0312156140f757600080fd5b893561410281613eae565b985060208a013561411281613eae565b975061412060408b01613ed0565b965060608a0135955061413560808b01613ed0565b945061414360a08b01614073565b935060c08a013567ffffffffffffffff8082111561416057600080fd5b61416c8d838e01613ceb565b945061417a60e08d01613bb6565b93506101008c013591508082111561419157600080fd5b5061419e8c828d01613ceb565b9150509295985092959850929598565b6000602082840312156141c057600080fd5b5035919050565b600060208083850312156141da57600080fd5b823567ffffffffffffffff808211156141f257600080fd5b818501915085601f83011261420657600080fd5b8135614214613dc682613cc7565b81815260059190911b8301840190848101908883111561423357600080fd5b8585015b83811015613ea15780358581111561424f5760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018113156142855760008081fd5b61428d613c55565b898301358881111561429f5760008081fd5b6142ad8e8c83870101613ceb565b8252506040808401358b8301526142c5838501613bb6565b9082015285525050918601918601614237565b600080604083850312156142eb57600080fd5b823567ffffffffffffffff81111561430257600080fd5b61430e85828601613ceb565b95602094909401359450505050565b600181811c9082168061433157607f821691505b60208210810361436a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036143eb576143eb61439f565b6001019392505050565b60006020828403121561440757600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361443f5761443f61439f565b5060010190565b600067ffffffffffffffff838116908316818110156144675761446761439f565b039392505050565b6000828210156144815761448161439f565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144be576144be61439f565b500290565b600082516144d5818460208701613b2d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261451d5761451d6144df565b500690565b61012081016040808784376000838201818152879190815b600281101561455a5784848337908401828152928401929060010161453a565b5050828760c0870137610100850181815286935091505b6001811015614590578251825260209283019290910190600101614571565b50505095945050505050565b6000602082840312156145ae57600080fd5b815161394d81614065565b600067ffffffffffffffff8083168185168083038211156145dc576145dc61439f565b01949350505050565b6000826145f4576145f46144df565b500490565b601f82111561367457600081815260208120601f850160051c810160208610156146205750805b601f850160051c820191505b8181101561463f5782815560010161462c565b505050505050565b815167ffffffffffffffff81111561466157614661613bfd565b6146758161466f845461431d565b846145f9565b602080601f8311600181146146c857600084156146925750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561463f565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015614715578886015182559484019460019091019084016146f6565b508582101561475157878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156147745761477461439f565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006147ae6060830184613b59565b9594505050505056fea264697066735822122081f84e50c75132e0e1d63c89368111c0affdda26b573871b0f246eef88a15e2664736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102de5760003560e01c80639b79676011610186578063d02103ca116100e3578063d8f54db011610097578063eaeb077b11610071578063eaeb077b14610739578063f2fde38b1461074c578063f75527611461075f57600080fd5b8063d8f54db0146106ac578063e7a7ed02146106e9578063e8bf92ed1461071957600080fd5b8063d2fd1b31116100c8578063d2fd1b3114610673578063d307b74314610686578063d8d1091b1461069957600080fd5b8063d02103ca14610640578063d0ae98dd1461066057600080fd5b8063b4d63f581161013a578063c0cad3021161011f578063c0cad302146105ee578063c89e42df14610601578063cfa8ed471461061457600080fd5b8063b4d63f58146105a8578063b6b0b097146105c857600080fd5b8063ac2eba981161016b578063ac2eba9814610582578063adc879e91461058b578063b02286c01461059f57600080fd5b80639b79676014610565578063ab9fc5ef1461057857600080fd5b80636b8616ce1161023f57806379847057116101f35780638da5cb5b116101cd5780638da5cb5b1461050b57806396dc3d391461054a57806399f5634e1461055d57600080fd5b806379847057146104dc5780637fcb3653146104e45780638c4a0af7146104f857600080fd5b8063715018a611610224578063715018a6146104ae5780637152facf146104b6578063748608de146104c957600080fd5b80636b8616ce1461047b5780636ff512cc1461049b57600080fd5b806345605267116102965780635437988d1161027b5780635437988d146103a657806355b925e6146103b9578063574f649e146103cc57600080fd5b80634560526714610376578063542028d51461039e57600080fd5b80631a26da14116102c75780631a26da141461032e5780633c15826714610343578063423fa8561461035657600080fd5b8063107bf28c146102e357806319d8ac6114610301575b600080fd5b6102eb61076e565b6040516102f89190613ba3565b60405180910390f35b6003546103159067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102f8565b61034161033c366004613bd3565b6107fc565b005b610341610351366004613d79565b610821565b6003546103159068010000000000000000900467ffffffffffffffff1681565b60035461031590700100000000000000000000000000000000900467ffffffffffffffff1681565b6102eb611153565b6103416103b4366004613edb565b611160565b6103416103c7366004613f0f565b6111af565b61046d6103da366004613f92565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b6040519081526020016102f8565b61046d610489366004614008565b60016020526000908152604090205481565b6103416104a9366004613edb565b61171f565b61034161185a565b6102eb6104c4366004614023565b61186e565b6103416104d7366004613f0f565b611a1b565b61046d611e24565b6004546103159067ffffffffffffffff1681565b61034161050636600461407e565b611e9e565b603d5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102f8565b610341610558366004614008565b611fd2565b61046d612015565b610341610573366004614008565b612144565b61031562093a8081565b61046d60065481565b6009546103159067ffffffffffffffff1681565b61046d61ea6081565b61046d6105b6366004614008565b60026020526000908152604090205481565b6000546105259062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6103416105fc36600461409b565b612193565b61034161060f36600461409b565b6121ab565b6004546105259068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546105259073ffffffffffffffffffffffffffffffffffffffff1681565b61046d61066e366004614023565b61229a565b6103416106813660046140d8565b612594565b6103416106943660046141ae565b612889565b6103416106a73660046141c7565b612896565b6004546106d9907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016102f8565b600354610315907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6007546105259073ffffffffffffffffffffffffffffffffffffffff1681565b6103416107473660046142d8565b612f3c565b61034161075a366004613edb565b61340a565b61046d67016345785d8a000081565b600a805461077b9061431d565b80601f01602080910402602001604051908101604052809291908181526020018280546107a79061431d565b80156107f45780601f106107c9576101008083540402835291602001916107f4565b820191906000526020600020905b8154815290600101906020018083116107d757829003601f168201915b505050505081565b6108046134c1565b67ffffffffffffffff909116600090815260026020526040902055565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146108d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b805160035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610f2957600087828151811061094157610941614370565b602002602001015190506000816060015167ffffffffffffffff161115610bac578361096c816143ce565b9450506000816000015180519060200120826020015183606001516040516020016109cf93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114610ad4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610ba6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016108d0565b50610d7a565b60208101511580610c5b575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610c159160040190815260200190565b6020604051808303816000875af1158015610c34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5891906143f5565b15155b610ce7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016108d0565b80515161ea6011610d7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016108d0565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610db0575042816040015167ffffffffffffffff1611155b610e62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610f0b906143ce565b95505080604001519550508080610f219061440e565b915050610925565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610fe6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016108d0565b60035460009061101490700100000000000000000000000000000000900467ffffffffffffffff1684614446565b6110289067ffffffffffffffff168761446f565b6003805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152600260205260409020839055905061110633306110df8467016345785d8a0000614486565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16929190613542565b6003546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b6008805461077b9061431d565b6111686134c1565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60045467ffffffffffffffff888116911614611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c6173745665726966696564426174636820646f6573206e6f74206d6160648201527f7463680000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8667ffffffffffffffff168667ffffffffffffffff161161133c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a4016108d0565b60035467ffffffffffffffff680100000000000000009091048116908716111561140f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a76657269667942617463686573908201527f3a20626174636820646f6573206e6f742068617665206265656e20736571756560648201527f6e63656400000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b600061141d8888888861186e565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161145291906144c3565b602060405180830381855afa15801561146f573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061149291906143f5565b61149c919061450e565b6007546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916115069189918991899190600401614522565b602060405180830381865afa158015611523573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611547919061459c565b6115d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016108d0565b611623336115e18b8b614446565b67ffffffffffffffff166115f3612015565b6115fd9190614486565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16919061361e565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a1617815560068790556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820189905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b1580156116c557600080fd5b505af11580156116d9573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8b1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a3505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146117d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b6118626134c1565b61186c6000613679565b565b67ffffffffffffffff8085166000908152600260205260408082205492861682529020546060919080611949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b604080516101ac810190915261016c8152602081016119af565b8160005b60088110156119a8577bffffffff0000000000000000000000000000000000000000000000006020820284901c60c01b168252600890910190600101611967565b5092915050565b6119bb81600654611963565b90506119c78187611963565b90506119d38185611963565b90506119df8184611963565b90506119eb8188611963565b60c08a811b825289811b6008830152600954901b60108201523360601b6018909101525092505050949350505050565b611a236134c1565b60045467ffffffffffffffff888116911614611ae7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8667ffffffffffffffff168667ffffffffffffffff1611611bb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff6801000000000000000090910481169087161115611c82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b67ffffffffffffffff861660009081526002602052604090205480611d29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f74206578697374000060648201526084016108d0565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff891617815560068690556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820188905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b158015611dcb57600080fd5b505af1158015611ddf573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8a1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a35050505050505050565b60035460009067ffffffffffffffff7001000000000000000000000000000000008204811691611e739178010000000000000000000000000000000000000000000000009091041660016145b9565b611e7d9190614446565b611e999067ffffffffffffffff16670de0b6b3a7640000614486565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611f51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061184f90831515815260200190565b611fda6134c1565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b600080546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829162010000900473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561208a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ae91906143f5565b60045460035491925060009167ffffffffffffffff918216916801000000000000000082048116916121139170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614446565b61211d91906145b9565b6121279190614446565b67ffffffffffffffff16905061213d81836145e5565b9250505090565b61214c6134c1565b6003805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b61219b6134c1565b600a6121a78282614647565b5050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461225e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600861226a8282614647565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161184f9190613ba3565b60045460009067ffffffffffffffff868116911614612361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8467ffffffffffffffff168467ffffffffffffffff161161242a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff68010000000000000000909104811690851611156124fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b600061250a8686868661186e565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161253f91906144c3565b602060405180830381855afa15801561255c573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061257f91906143f5565b612589919061450e565b979650505050505050565b600054610100900460ff16158080156125b45750600054600160ff909116105b806125ce5750303b1580156125ce575060005460ff166001145b61265a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016108d0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156126b857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602179055600780549091168a83161790556006889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c01000000000000000000000000000000000000000000000000000000008715150217905560086127d08582614647565b50600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600a6128118382614647565b5061281a6136f0565b801561287d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6128916134c1565b600655565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108d0565b805180612a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612a73918491700100000000000000000000000000000000900416614761565b1115612b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016108d0565b60035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205491937001000000000000000000000000000000009004909216915b84811015612e6c576000868281518110612b6157612b61614370565b602002602001015190508380612b76906143ce565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114612ccf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016108d0565b612cda60018861446f565b8303612db2574262093a808360400151612cf491906145b9565b67ffffffffffffffff161115612db2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016108d0565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612e54906143ce565b96505050508080612e649061440e565b915050612b45565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260026020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114613019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108d0565b6000613023611e24565b9050818111156130b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016108d0565b61ea60835110613147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016108d0565b6000546131729062010000900473ffffffffffffffffffffffffffffffffffffffff16333084613542565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa1580156131e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061320691906143f5565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613240836143ce565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050838051906020012081426040516020016132b993929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260019093529120553233036133a757600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613404565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516133fb93929190614779565b60405180910390a25b50505050565b6134126134c1565b73ffffffffffffffffffffffffffffffffffffffff81166134b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108d0565b6134be81613679565b50565b603d5473ffffffffffffffffffffffffffffffffffffffff16331461186c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526134049085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261378f565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526136749084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161359c565b505050565b603d805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16613787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d0565b61186c61389b565b60006137f1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661393b9092919063ffffffff16565b805190915015613674578080602001905181019061380f919061459c565b613674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108d0565b600054610100900460ff16613932576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d0565b61186c33613679565b606061394a8484600085613954565b90505b9392505050565b6060824710156139e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016108d0565b73ffffffffffffffffffffffffffffffffffffffff85163b613a64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108d0565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613a8d91906144c3565b60006040518083038185875af1925050503d8060008114613aca576040519150601f19603f3d011682016040523d82523d6000602084013e613acf565b606091505b509150915061258982828660608315613ae957508161394d565b825115613af95782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d09190613ba3565b60005b83811015613b48578181015183820152602001613b30565b838111156134045750506000910152565b60008151808452613b71816020860160208601613b2d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061394d6020830184613b59565b803567ffffffffffffffff81168114613bce57600080fd5b919050565b60008060408385031215613be657600080fd5b613bef83613bb6565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613c4f57613c4f613bfd565b60405290565b6040516060810167ffffffffffffffff81118282101715613c4f57613c4f613bfd565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613cbf57613cbf613bfd565b604052919050565b600067ffffffffffffffff821115613ce157613ce1613bfd565b5060051b60200190565b600082601f830112613cfc57600080fd5b813567ffffffffffffffff811115613d1657613d16613bfd565b613d4760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613c78565b818152846020838601011115613d5c57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613d8c57600080fd5b823567ffffffffffffffff80821115613da457600080fd5b818501915085601f830112613db857600080fd5b8135613dcb613dc682613cc7565b613c78565b81815260059190911b83018401908481019088831115613dea57600080fd5b8585015b83811015613ea157803585811115613e065760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001811315613e3c5760008081fd5b613e44613c2c565b8983013588811115613e565760008081fd5b613e648e8c83870101613ceb565b8252506040808401358b8301526060613e7e818601613bb6565b82840152613e8d848601613bb6565b908301525085525050918601918601613dee565b5098975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146134be57600080fd5b8035613bce81613eae565b600060208284031215613eed57600080fd5b813561394d81613eae565b8060408101831015613f0957600080fd5b92915050565b6000806000806000806000610180888a031215613f2b57600080fd5b613f3488613bb6565b9650613f4260208901613bb6565b95506040880135945060608801359350613f5f8960808a01613ef8565b9250610140880189811115613f7357600080fd5b60c089019250613f838a82613ef8565b91505092959891949750929550565b600080600080600060a08688031215613faa57600080fd5b85359450602086013567ffffffffffffffff811115613fc857600080fd5b613fd488828901613ceb565b94505060408601359250613fea60608701613bb6565b91506080860135613ffa81613eae565b809150509295509295909350565b60006020828403121561401a57600080fd5b61394d82613bb6565b6000806000806080858703121561403957600080fd5b61404285613bb6565b935061405060208601613bb6565b93969395505050506040820135916060013590565b80151581146134be57600080fd5b8035613bce81614065565b60006020828403121561409057600080fd5b813561394d81614065565b6000602082840312156140ad57600080fd5b813567ffffffffffffffff8111156140c457600080fd5b6140d084828501613ceb565b949350505050565b60008060008060008060008060006101208a8c0312156140f757600080fd5b893561410281613eae565b985060208a013561411281613eae565b975061412060408b01613ed0565b965060608a0135955061413560808b01613ed0565b945061414360a08b01614073565b935060c08a013567ffffffffffffffff8082111561416057600080fd5b61416c8d838e01613ceb565b945061417a60e08d01613bb6565b93506101008c013591508082111561419157600080fd5b5061419e8c828d01613ceb565b9150509295985092959850929598565b6000602082840312156141c057600080fd5b5035919050565b600060208083850312156141da57600080fd5b823567ffffffffffffffff808211156141f257600080fd5b818501915085601f83011261420657600080fd5b8135614214613dc682613cc7565b81815260059190911b8301840190848101908883111561423357600080fd5b8585015b83811015613ea15780358581111561424f5760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018113156142855760008081fd5b61428d613c55565b898301358881111561429f5760008081fd5b6142ad8e8c83870101613ceb565b8252506040808401358b8301526142c5838501613bb6565b9082015285525050918601918601614237565b600080604083850312156142eb57600080fd5b823567ffffffffffffffff81111561430257600080fd5b61430e85828601613ceb565b95602094909401359450505050565b600181811c9082168061433157607f821691505b60208210810361436a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036143eb576143eb61439f565b6001019392505050565b60006020828403121561440757600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361443f5761443f61439f565b5060010190565b600067ffffffffffffffff838116908316818110156144675761446761439f565b039392505050565b6000828210156144815761448161439f565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144be576144be61439f565b500290565b600082516144d5818460208701613b2d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261451d5761451d6144df565b500690565b61012081016040808784376000838201818152879190815b600281101561455a5784848337908401828152928401929060010161453a565b5050828760c0870137610100850181815286935091505b6001811015614590578251825260209283019290910190600101614571565b50505095945050505050565b6000602082840312156145ae57600080fd5b815161394d81614065565b600067ffffffffffffffff8083168185168083038211156145dc576145dc61439f565b01949350505050565b6000826145f4576145f46144df565b500490565b601f82111561367457600081815260208120601f850160051c810160208610156146205750805b601f850160051c820191505b8181101561463f5782815560010161462c565b505050505050565b815167ffffffffffffffff81111561466157614661613bfd565b6146758161466f845461431d565b846145f9565b602080601f8311600181146146c857600084156146925750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561463f565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015614715578886015182559484019460019091019084016146f6565b508582101561475157878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156147745761477461439f565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006147ae6060830184613b59565b9594505050505056fea264697066735822122081f84e50c75132e0e1d63c89368111c0affdda26b573871b0f246eef88a15e2664736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506147d2806100206000396000f3fe608060405234801561001057600080fd5b50600436106102de5760003560e01c80639b79676011610186578063d02103ca116100e3578063d8f54db011610097578063eaeb077b11610071578063eaeb077b14610739578063f2fde38b1461074c578063f75527611461075f57600080fd5b8063d8f54db0146106ac578063e7a7ed02146106e9578063e8bf92ed1461071957600080fd5b8063d2fd1b31116100c8578063d2fd1b3114610673578063d307b74314610686578063d8d1091b1461069957600080fd5b8063d02103ca14610640578063d0ae98dd1461066057600080fd5b8063b4d63f581161013a578063c0cad3021161011f578063c0cad302146105ee578063c89e42df14610601578063cfa8ed471461061457600080fd5b8063b4d63f58146105a8578063b6b0b097146105c857600080fd5b8063ac2eba981161016b578063ac2eba9814610582578063adc879e91461058b578063b02286c01461059f57600080fd5b80639b79676014610565578063ab9fc5ef1461057857600080fd5b80636b8616ce1161023f57806379847057116101f35780638da5cb5b116101cd5780638da5cb5b1461050b57806396dc3d391461054a57806399f5634e1461055d57600080fd5b806379847057146104dc5780637fcb3653146104e45780638c4a0af7146104f857600080fd5b8063715018a611610224578063715018a6146104ae5780637152facf146104b6578063748608de146104c957600080fd5b80636b8616ce1461047b5780636ff512cc1461049b57600080fd5b806345605267116102965780635437988d1161027b5780635437988d146103a657806355b925e6146103b9578063574f649e146103cc57600080fd5b80634560526714610376578063542028d51461039e57600080fd5b80631a26da14116102c75780631a26da141461032e5780633c15826714610343578063423fa8561461035657600080fd5b8063107bf28c146102e357806319d8ac6114610301575b600080fd5b6102eb61076e565b6040516102f89190613b88565b60405180910390f35b6003546103159067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102f8565b61034161033c366004613bb8565b6107fc565b005b610341610351366004613d5e565b610821565b6003546103159068010000000000000000900467ffffffffffffffff1681565b60035461031590700100000000000000000000000000000000900467ffffffffffffffff1681565b6102eb611153565b6103416103b4366004613ec0565b611160565b6103416103c7366004613ef4565b6111af565b61046d6103da366004613f77565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b6040519081526020016102f8565b61046d610489366004613fed565b60016020526000908152604090205481565b6103416104a9366004613ec0565b61171f565b61034161185a565b6102eb6104c4366004614008565b61186e565b6103416104d7366004613ef4565b611a00565b61046d611e09565b6004546103159067ffffffffffffffff1681565b610341610506366004614063565b611e83565b603d5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102f8565b610341610558366004613fed565b611fb7565b61046d611ffa565b610341610573366004613fed565b612129565b61031562093a8081565b61046d60065481565b6009546103159067ffffffffffffffff1681565b61046d61ea6081565b61046d6105b6366004613fed565b60026020526000908152604090205481565b6000546105259062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6103416105fc366004614080565b612178565b61034161060f366004614080565b612190565b6004546105259068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546105259073ffffffffffffffffffffffffffffffffffffffff1681565b61046d61066e366004614008565b61227f565b6103416106813660046140bd565b612579565b610341610694366004614193565b61286e565b6103416106a73660046141ac565b61287b565b6004546106d9907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016102f8565b600354610315907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6007546105259073ffffffffffffffffffffffffffffffffffffffff1681565b6103416107473660046142bd565b612f21565b61034161075a366004613ec0565b6133ef565b61046d67016345785d8a000081565b600a805461077b90614302565b80601f01602080910402602001604051908101604052809291908181526020018280546107a790614302565b80156107f45780601f106107c9576101008083540402835291602001916107f4565b820191906000526020600020905b8154815290600101906020018083116107d757829003601f168201915b505050505081565b6108046134a6565b67ffffffffffffffff909116600090815260026020526040902055565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146108d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b805160035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610f2957600087828151811061094157610941614355565b602002602001015190506000816060015167ffffffffffffffff161115610bac578361096c816143b3565b9450506000816000015180519060200120826020015183606001516040516020016109cf93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114610ad4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610ba6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016108d0565b50610d7a565b60208101511580610c5b575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610c159160040190815260200190565b6020604051808303816000875af1158015610c34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5891906143da565b15155b610ce7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016108d0565b80515161ea6011610d7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016108d0565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610db0575042816040015167ffffffffffffffff1611155b610e62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610f0b906143b3565b95505080604001519550508080610f21906143f3565b915050610925565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610fe6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016108d0565b60035460009061101490700100000000000000000000000000000000900467ffffffffffffffff168461442b565b6110289067ffffffffffffffff1687614454565b6003805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152600260205260409020839055905061110633306110df8467016345785d8a000061446b565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16929190613527565b6003546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b6008805461077b90614302565b6111686134a6565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60045467ffffffffffffffff888116911614611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c6173745665726966696564426174636820646f6573206e6f74206d6160648201527f7463680000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8667ffffffffffffffff168667ffffffffffffffff161161133c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a4016108d0565b60035467ffffffffffffffff680100000000000000009091048116908716111561140f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a76657269667942617463686573908201527f3a20626174636820646f6573206e6f742068617665206265656e20736571756560648201527f6e63656400000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b600061141d8888888861186e565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161145291906144a8565b602060405180830381855afa15801561146f573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061149291906143da565b61149c91906144f3565b6007546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916115069189918991899190600401614507565b602060405180830381865afa158015611523573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115479190614581565b6115d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016108d0565b611623336115e18b8b61442b565b67ffffffffffffffff166115f3611ffa565b6115fd919061446b565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff169190613603565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a1617815560068790556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820189905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b1580156116c557600080fd5b505af11580156116d9573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8b1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a3505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146117d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b6118626134a6565b61186c600061365e565b565b67ffffffffffffffff8085166000908152600260205260408082205492861682529020546060919080611949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b6006546009546040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b1660208201526034810192909252605482018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607485015291821b8116607c8401526084830187905260a4830184905260c483018890529088901b1660e482015260ec0160405160208183030381529060405292505050949350505050565b611a086134a6565b60045467ffffffffffffffff888116911614611acc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8667ffffffffffffffff168667ffffffffffffffff1611611b95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff6801000000000000000090910481169087161115611c67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b67ffffffffffffffff861660009081526002602052604090205480611d0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f74206578697374000060648201526084016108d0565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff891617815560068690556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820188905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b158015611db057600080fd5b505af1158015611dc4573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8a1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a35050505050505050565b60035460009067ffffffffffffffff7001000000000000000000000000000000008204811691611e5891780100000000000000000000000000000000000000000000000090910416600161459e565b611e62919061442b565b611e7e9067ffffffffffffffff16670de0b6b3a764000061446b565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611f36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061184f90831515815260200190565b611fbf6134a6565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b600080546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829162010000900473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561206f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209391906143da565b60045460035491925060009167ffffffffffffffff918216916801000000000000000082048116916120f8917001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041661442b565b612102919061459e565b61210c919061442b565b67ffffffffffffffff16905061212281836145ca565b9250505090565b6121316134a6565b6003805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b6121806134a6565b600a61218c828261462c565b5050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600861224f828261462c565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161184f9190613b88565b60045460009067ffffffffffffffff868116911614612346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8467ffffffffffffffff168467ffffffffffffffff161161240f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff68010000000000000000909104811690851611156124e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b60006124ef8686868661186e565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161252491906144a8565b602060405180830381855afa158015612541573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061256491906143da565b61256e91906144f3565b979650505050505050565b600054610100900460ff16158080156125995750600054600160ff909116105b806125b35750303b1580156125b3575060005460ff166001145b61263f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016108d0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561269d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602179055600780549091168a83161790556006889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c01000000000000000000000000000000000000000000000000000000008715150217905560086127b5858261462c565b50600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600a6127f6838261462c565b506127ff6136d5565b801561286257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6128766134a6565b600655565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108d0565b805180612a0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612a58918491700100000000000000000000000000000000900416614746565b1115612ae6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016108d0565b60035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205491937001000000000000000000000000000000009004909216915b84811015612e51576000868281518110612b4657612b46614355565b602002602001015190508380612b5b906143b3565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114612cb4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016108d0565b612cbf600188614454565b8303612d97574262093a808360400151612cd9919061459e565b67ffffffffffffffff161115612d97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016108d0565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612e39906143b3565b96505050508080612e49906143f3565b915050612b2a565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260026020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612ffe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108d0565b6000613008611e09565b90508181111561309a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016108d0565b61ea6083511061312c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016108d0565b6000546131579062010000900473ffffffffffffffffffffffffffffffffffffffff16333084613527565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa1580156131c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131eb91906143da565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613225836143b3565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161329e93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000908152600190935291205532330361338c57600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26133e9565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516133e09392919061475e565b60405180910390a25b50505050565b6133f76134a6565b73ffffffffffffffffffffffffffffffffffffffff811661349a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108d0565b6134a38161365e565b50565b603d5473ffffffffffffffffffffffffffffffffffffffff16331461186c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526133e99085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613774565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526136599084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401613581565b505050565b603d805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661376c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d0565b61186c613880565b60006137d6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166139209092919063ffffffff16565b80519091501561365957808060200190518101906137f49190614581565b613659576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108d0565b600054610100900460ff16613917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d0565b61186c3361365e565b606061392f8484600085613939565b90505b9392505050565b6060824710156139cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016108d0565b73ffffffffffffffffffffffffffffffffffffffff85163b613a49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108d0565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613a7291906144a8565b60006040518083038185875af1925050503d8060008114613aaf576040519150601f19603f3d011682016040523d82523d6000602084013e613ab4565b606091505b509150915061256e82828660608315613ace575081613932565b825115613ade5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d09190613b88565b60005b83811015613b2d578181015183820152602001613b15565b838111156133e95750506000910152565b60008151808452613b56816020860160208601613b12565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006139326020830184613b3e565b803567ffffffffffffffff81168114613bb357600080fd5b919050565b60008060408385031215613bcb57600080fd5b613bd483613b9b565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613c3457613c34613be2565b60405290565b6040516060810167ffffffffffffffff81118282101715613c3457613c34613be2565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613ca457613ca4613be2565b604052919050565b600067ffffffffffffffff821115613cc657613cc6613be2565b5060051b60200190565b600082601f830112613ce157600080fd5b813567ffffffffffffffff811115613cfb57613cfb613be2565b613d2c60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613c5d565b818152846020838601011115613d4157600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613d7157600080fd5b823567ffffffffffffffff80821115613d8957600080fd5b818501915085601f830112613d9d57600080fd5b8135613db0613dab82613cac565b613c5d565b81815260059190911b83018401908481019088831115613dcf57600080fd5b8585015b83811015613e8657803585811115613deb5760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001811315613e215760008081fd5b613e29613c11565b8983013588811115613e3b5760008081fd5b613e498e8c83870101613cd0565b8252506040808401358b8301526060613e63818601613b9b565b82840152613e72848601613b9b565b908301525085525050918601918601613dd3565b5098975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146134a357600080fd5b8035613bb381613e93565b600060208284031215613ed257600080fd5b813561393281613e93565b8060408101831015613eee57600080fd5b92915050565b6000806000806000806000610180888a031215613f1057600080fd5b613f1988613b9b565b9650613f2760208901613b9b565b95506040880135945060608801359350613f448960808a01613edd565b9250610140880189811115613f5857600080fd5b60c089019250613f688a82613edd565b91505092959891949750929550565b600080600080600060a08688031215613f8f57600080fd5b85359450602086013567ffffffffffffffff811115613fad57600080fd5b613fb988828901613cd0565b94505060408601359250613fcf60608701613b9b565b91506080860135613fdf81613e93565b809150509295509295909350565b600060208284031215613fff57600080fd5b61393282613b9b565b6000806000806080858703121561401e57600080fd5b61402785613b9b565b935061403560208601613b9b565b93969395505050506040820135916060013590565b80151581146134a357600080fd5b8035613bb38161404a565b60006020828403121561407557600080fd5b81356139328161404a565b60006020828403121561409257600080fd5b813567ffffffffffffffff8111156140a957600080fd5b6140b584828501613cd0565b949350505050565b60008060008060008060008060006101208a8c0312156140dc57600080fd5b89356140e781613e93565b985060208a01356140f781613e93565b975061410560408b01613eb5565b965060608a0135955061411a60808b01613eb5565b945061412860a08b01614058565b935060c08a013567ffffffffffffffff8082111561414557600080fd5b6141518d838e01613cd0565b945061415f60e08d01613b9b565b93506101008c013591508082111561417657600080fd5b506141838c828d01613cd0565b9150509295985092959850929598565b6000602082840312156141a557600080fd5b5035919050565b600060208083850312156141bf57600080fd5b823567ffffffffffffffff808211156141d757600080fd5b818501915085601f8301126141eb57600080fd5b81356141f9613dab82613cac565b81815260059190911b8301840190848101908883111561421857600080fd5b8585015b83811015613e86578035858111156142345760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181131561426a5760008081fd5b614272613c3a565b89830135888111156142845760008081fd5b6142928e8c83870101613cd0565b8252506040808401358b8301526142aa838501613b9b565b908201528552505091860191860161421c565b600080604083850312156142d057600080fd5b823567ffffffffffffffff8111156142e757600080fd5b6142f385828601613cd0565b95602094909401359450505050565b600181811c9082168061431657607f821691505b60208210810361434f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036143d0576143d0614384565b6001019392505050565b6000602082840312156143ec57600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361442457614424614384565b5060010190565b600067ffffffffffffffff8381169083168181101561444c5761444c614384565b039392505050565b60008282101561446657614466614384565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144a3576144a3614384565b500290565b600082516144ba818460208701613b12565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614502576145026144c4565b500690565b61012081016040808784376000838201818152879190815b600281101561453f5784848337908401828152928401929060010161451f565b5050828760c0870137610100850181815286935091505b6001811015614575578251825260209283019290910190600101614556565b50505095945050505050565b60006020828403121561459357600080fd5b81516139328161404a565b600067ffffffffffffffff8083168185168083038211156145c1576145c1614384565b01949350505050565b6000826145d9576145d96144c4565b500490565b601f82111561365957600081815260208120601f850160051c810160208610156146055750805b601f850160051c820191505b8181101561462457828155600101614611565b505050505050565b815167ffffffffffffffff81111561464657614646613be2565b61465a816146548454614302565b846145de565b602080601f8311600181146146ad57600084156146775750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614624565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156146fa578886015182559484019460019091019084016146db565b508582101561473657878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000821982111561475957614759614384565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006147936060830184613b3e565b9594505050505056fea26469706673582212202292bd2e610d331108ed905e1a87f79aceb1dcccb827238286e21cb9fbe8168564736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102de5760003560e01c80639b79676011610186578063d02103ca116100e3578063d8f54db011610097578063eaeb077b11610071578063eaeb077b14610739578063f2fde38b1461074c578063f75527611461075f57600080fd5b8063d8f54db0146106ac578063e7a7ed02146106e9578063e8bf92ed1461071957600080fd5b8063d2fd1b31116100c8578063d2fd1b3114610673578063d307b74314610686578063d8d1091b1461069957600080fd5b8063d02103ca14610640578063d0ae98dd1461066057600080fd5b8063b4d63f581161013a578063c0cad3021161011f578063c0cad302146105ee578063c89e42df14610601578063cfa8ed471461061457600080fd5b8063b4d63f58146105a8578063b6b0b097146105c857600080fd5b8063ac2eba981161016b578063ac2eba9814610582578063adc879e91461058b578063b02286c01461059f57600080fd5b80639b79676014610565578063ab9fc5ef1461057857600080fd5b80636b8616ce1161023f57806379847057116101f35780638da5cb5b116101cd5780638da5cb5b1461050b57806396dc3d391461054a57806399f5634e1461055d57600080fd5b806379847057146104dc5780637fcb3653146104e45780638c4a0af7146104f857600080fd5b8063715018a611610224578063715018a6146104ae5780637152facf146104b6578063748608de146104c957600080fd5b80636b8616ce1461047b5780636ff512cc1461049b57600080fd5b806345605267116102965780635437988d1161027b5780635437988d146103a657806355b925e6146103b9578063574f649e146103cc57600080fd5b80634560526714610376578063542028d51461039e57600080fd5b80631a26da14116102c75780631a26da141461032e5780633c15826714610343578063423fa8561461035657600080fd5b8063107bf28c146102e357806319d8ac6114610301575b600080fd5b6102eb61076e565b6040516102f89190613b88565b60405180910390f35b6003546103159067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102f8565b61034161033c366004613bb8565b6107fc565b005b610341610351366004613d5e565b610821565b6003546103159068010000000000000000900467ffffffffffffffff1681565b60035461031590700100000000000000000000000000000000900467ffffffffffffffff1681565b6102eb611153565b6103416103b4366004613ec0565b611160565b6103416103c7366004613ef4565b6111af565b61046d6103da366004613f77565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b6040519081526020016102f8565b61046d610489366004613fed565b60016020526000908152604090205481565b6103416104a9366004613ec0565b61171f565b61034161185a565b6102eb6104c4366004614008565b61186e565b6103416104d7366004613ef4565b611a00565b61046d611e09565b6004546103159067ffffffffffffffff1681565b610341610506366004614063565b611e83565b603d5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102f8565b610341610558366004613fed565b611fb7565b61046d611ffa565b610341610573366004613fed565b612129565b61031562093a8081565b61046d60065481565b6009546103159067ffffffffffffffff1681565b61046d61ea6081565b61046d6105b6366004613fed565b60026020526000908152604090205481565b6000546105259062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6103416105fc366004614080565b612178565b61034161060f366004614080565b612190565b6004546105259068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546105259073ffffffffffffffffffffffffffffffffffffffff1681565b61046d61066e366004614008565b61227f565b6103416106813660046140bd565b612579565b610341610694366004614193565b61286e565b6103416106a73660046141ac565b61287b565b6004546106d9907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016102f8565b600354610315907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6007546105259073ffffffffffffffffffffffffffffffffffffffff1681565b6103416107473660046142bd565b612f21565b61034161075a366004613ec0565b6133ef565b61046d67016345785d8a000081565b600a805461077b90614302565b80601f01602080910402602001604051908101604052809291908181526020018280546107a790614302565b80156107f45780601f106107c9576101008083540402835291602001916107f4565b820191906000526020600020905b8154815290600101906020018083116107d757829003601f168201915b505050505081565b6108046134a6565b67ffffffffffffffff909116600090815260026020526040902055565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146108d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b805160035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610f2957600087828151811061094157610941614355565b602002602001015190506000816060015167ffffffffffffffff161115610bac578361096c816143b3565b9450506000816000015180519060200120826020015183606001516040516020016109cf93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114610ad4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610ba6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016108d0565b50610d7a565b60208101511580610c5b575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610c159160040190815260200190565b6020604051808303816000875af1158015610c34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5891906143da565b15155b610ce7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016108d0565b80515161ea6011610d7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016108d0565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610db0575042816040015167ffffffffffffffff1611155b610e62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610f0b906143b3565b95505080604001519550508080610f21906143f3565b915050610925565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610fe6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016108d0565b60035460009061101490700100000000000000000000000000000000900467ffffffffffffffff168461442b565b6110289067ffffffffffffffff1687614454565b6003805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152600260205260409020839055905061110633306110df8467016345785d8a000061446b565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16929190613527565b6003546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b6008805461077b90614302565b6111686134a6565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60045467ffffffffffffffff888116911614611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c6173745665726966696564426174636820646f6573206e6f74206d6160648201527f7463680000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8667ffffffffffffffff168667ffffffffffffffff161161133c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a4016108d0565b60035467ffffffffffffffff680100000000000000009091048116908716111561140f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a76657269667942617463686573908201527f3a20626174636820646f6573206e6f742068617665206265656e20736571756560648201527f6e63656400000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b600061141d8888888861186e565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161145291906144a8565b602060405180830381855afa15801561146f573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061149291906143da565b61149c91906144f3565b6007546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916115069189918991899190600401614507565b602060405180830381865afa158015611523573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115479190614581565b6115d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016108d0565b611623336115e18b8b61442b565b67ffffffffffffffff166115f3611ffa565b6115fd919061446b565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff169190613603565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a1617815560068790556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820189905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b1580156116c557600080fd5b505af11580156116d9573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8b1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a3505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146117d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b6118626134a6565b61186c600061365e565b565b67ffffffffffffffff8085166000908152600260205260408082205492861682529020546060919080611949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b6006546009546040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b1660208201526034810192909252605482018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607485015291821b8116607c8401526084830187905260a4830184905260c483018890529088901b1660e482015260ec0160405160208183030381529060405292505050949350505050565b611a086134a6565b60045467ffffffffffffffff888116911614611acc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8667ffffffffffffffff168667ffffffffffffffff1611611b95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff6801000000000000000090910481169087161115611c67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b67ffffffffffffffff861660009081526002602052604090205480611d0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f74206578697374000060648201526084016108d0565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff891617815560068690556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820188905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b158015611db057600080fd5b505af1158015611dc4573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8a1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a35050505050505050565b60035460009067ffffffffffffffff7001000000000000000000000000000000008204811691611e5891780100000000000000000000000000000000000000000000000090910416600161459e565b611e62919061442b565b611e7e9067ffffffffffffffff16670de0b6b3a764000061446b565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611f36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061184f90831515815260200190565b611fbf6134a6565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b600080546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829162010000900473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561206f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209391906143da565b60045460035491925060009167ffffffffffffffff918216916801000000000000000082048116916120f8917001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041661442b565b612102919061459e565b61210c919061442b565b67ffffffffffffffff16905061212281836145ca565b9250505090565b6121316134a6565b6003805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b6121806134a6565b600a61218c828261462c565b5050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600861224f828261462c565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161184f9190613b88565b60045460009067ffffffffffffffff868116911614612346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8467ffffffffffffffff168467ffffffffffffffff161161240f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff68010000000000000000909104811690851611156124e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b60006124ef8686868661186e565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161252491906144a8565b602060405180830381855afa158015612541573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061256491906143da565b61256e91906144f3565b979650505050505050565b600054610100900460ff16158080156125995750600054600160ff909116105b806125b35750303b1580156125b3575060005460ff166001145b61263f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016108d0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561269d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602179055600780549091168a83161790556006889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c01000000000000000000000000000000000000000000000000000000008715150217905560086127b5858261462c565b50600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600a6127f6838261462c565b506127ff6136d5565b801561286257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6128766134a6565b600655565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108d0565b805180612a0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612a58918491700100000000000000000000000000000000900416614746565b1115612ae6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016108d0565b60035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205491937001000000000000000000000000000000009004909216915b84811015612e51576000868281518110612b4657612b46614355565b602002602001015190508380612b5b906143b3565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114612cb4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016108d0565b612cbf600188614454565b8303612d97574262093a808360400151612cd9919061459e565b67ffffffffffffffff161115612d97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016108d0565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612e39906143b3565b96505050508080612e49906143f3565b915050612b2a565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260026020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612ffe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108d0565b6000613008611e09565b90508181111561309a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016108d0565b61ea6083511061312c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016108d0565b6000546131579062010000900473ffffffffffffffffffffffffffffffffffffffff16333084613527565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa1580156131c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131eb91906143da565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613225836143b3565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161329e93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000908152600190935291205532330361338c57600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26133e9565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516133e09392919061475e565b60405180910390a25b50505050565b6133f76134a6565b73ffffffffffffffffffffffffffffffffffffffff811661349a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108d0565b6134a38161365e565b50565b603d5473ffffffffffffffffffffffffffffffffffffffff16331461186c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526133e99085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613774565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526136599084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401613581565b505050565b603d805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661376c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d0565b61186c613880565b60006137d6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166139209092919063ffffffff16565b80519091501561365957808060200190518101906137f49190614581565b613659576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108d0565b600054610100900460ff16613917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d0565b61186c3361365e565b606061392f8484600085613939565b90505b9392505050565b6060824710156139cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016108d0565b73ffffffffffffffffffffffffffffffffffffffff85163b613a49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108d0565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613a7291906144a8565b60006040518083038185875af1925050503d8060008114613aaf576040519150601f19603f3d011682016040523d82523d6000602084013e613ab4565b606091505b509150915061256e82828660608315613ace575081613932565b825115613ade5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d09190613b88565b60005b83811015613b2d578181015183820152602001613b15565b838111156133e95750506000910152565b60008151808452613b56816020860160208601613b12565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006139326020830184613b3e565b803567ffffffffffffffff81168114613bb357600080fd5b919050565b60008060408385031215613bcb57600080fd5b613bd483613b9b565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613c3457613c34613be2565b60405290565b6040516060810167ffffffffffffffff81118282101715613c3457613c34613be2565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613ca457613ca4613be2565b604052919050565b600067ffffffffffffffff821115613cc657613cc6613be2565b5060051b60200190565b600082601f830112613ce157600080fd5b813567ffffffffffffffff811115613cfb57613cfb613be2565b613d2c60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613c5d565b818152846020838601011115613d4157600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613d7157600080fd5b823567ffffffffffffffff80821115613d8957600080fd5b818501915085601f830112613d9d57600080fd5b8135613db0613dab82613cac565b613c5d565b81815260059190911b83018401908481019088831115613dcf57600080fd5b8585015b83811015613e8657803585811115613deb5760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001811315613e215760008081fd5b613e29613c11565b8983013588811115613e3b5760008081fd5b613e498e8c83870101613cd0565b8252506040808401358b8301526060613e63818601613b9b565b82840152613e72848601613b9b565b908301525085525050918601918601613dd3565b5098975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146134a357600080fd5b8035613bb381613e93565b600060208284031215613ed257600080fd5b813561393281613e93565b8060408101831015613eee57600080fd5b92915050565b6000806000806000806000610180888a031215613f1057600080fd5b613f1988613b9b565b9650613f2760208901613b9b565b95506040880135945060608801359350613f448960808a01613edd565b9250610140880189811115613f5857600080fd5b60c089019250613f688a82613edd565b91505092959891949750929550565b600080600080600060a08688031215613f8f57600080fd5b85359450602086013567ffffffffffffffff811115613fad57600080fd5b613fb988828901613cd0565b94505060408601359250613fcf60608701613b9b565b91506080860135613fdf81613e93565b809150509295509295909350565b600060208284031215613fff57600080fd5b61393282613b9b565b6000806000806080858703121561401e57600080fd5b61402785613b9b565b935061403560208601613b9b565b93969395505050506040820135916060013590565b80151581146134a357600080fd5b8035613bb38161404a565b60006020828403121561407557600080fd5b81356139328161404a565b60006020828403121561409257600080fd5b813567ffffffffffffffff8111156140a957600080fd5b6140b584828501613cd0565b949350505050565b60008060008060008060008060006101208a8c0312156140dc57600080fd5b89356140e781613e93565b985060208a01356140f781613e93565b975061410560408b01613eb5565b965060608a0135955061411a60808b01613eb5565b945061412860a08b01614058565b935060c08a013567ffffffffffffffff8082111561414557600080fd5b6141518d838e01613cd0565b945061415f60e08d01613b9b565b93506101008c013591508082111561417657600080fd5b506141838c828d01613cd0565b9150509295985092959850929598565b6000602082840312156141a557600080fd5b5035919050565b600060208083850312156141bf57600080fd5b823567ffffffffffffffff808211156141d757600080fd5b818501915085601f8301126141eb57600080fd5b81356141f9613dab82613cac565b81815260059190911b8301840190848101908883111561421857600080fd5b8585015b83811015613e86578035858111156142345760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181131561426a5760008081fd5b614272613c3a565b89830135888111156142845760008081fd5b6142928e8c83870101613cd0565b8252506040808401358b8301526142aa838501613b9b565b908201528552505091860191860161421c565b600080604083850312156142d057600080fd5b823567ffffffffffffffff8111156142e757600080fd5b6142f385828601613cd0565b95602094909401359450505050565b600181811c9082168061431657607f821691505b60208210810361434f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036143d0576143d0614384565b6001019392505050565b6000602082840312156143ec57600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361442457614424614384565b5060010190565b600067ffffffffffffffff8381169083168181101561444c5761444c614384565b039392505050565b60008282101561446657614466614384565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144a3576144a3614384565b500290565b600082516144ba818460208701613b12565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614502576145026144c4565b500690565b61012081016040808784376000838201818152879190815b600281101561453f5784848337908401828152928401929060010161451f565b5050828760c0870137610100850181815286935091505b6001811015614575578251825260209283019290910190600101614556565b50505095945050505050565b60006020828403121561459357600080fd5b81516139328161404a565b600067ffffffffffffffff8083168185168083038211156145c1576145c1614384565b01949350505050565b6000826145d9576145d96144c4565b500490565b601f82111561365957600081815260208120601f850160051c810160208610156146055750805b601f850160051c820191505b8181101561462457828155600101614611565b505050505050565b815167ffffffffffffffff81111561464657614646613be2565b61465a816146548454614302565b846145de565b602080601f8311600181146146ad57600084156146775750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614624565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156146fa578886015182559484019460019091019084016146db565b508582101561473657878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000821982111561475957614759614384565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006147936060830184613b3e565b9594505050505056fea26469706673582212202292bd2e610d331108ed905e1a87f79aceb1dcccb827238286e21cb9fbe8168564736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/ProofOfEfficiency.sol b/contracts/ProofOfEfficiency.sol index 57ddc02ed..c7f35fb86 100644 --- a/contracts/ProofOfEfficiency.sol +++ b/contracts/ProofOfEfficiency.sol @@ -598,73 +598,17 @@ contract ProofOfEfficiency is Initializable { "ProofOfEfficiency::getInputSnarkBytes: newAccInputHash does not exist" ); - bytes memory snarkHashBytes; - assembly { - // Set snarkHashBytes to the next free memory pointer - snarkHashBytes := mload(0x40) - - // Reserve the memory. 32 for the length , the input bytes and 32 - // extra bytes at the end for word manipulation - mstore(0x40, add(add(snarkHashBytes, 0x40), _SNARK_SHA_BYTES)) - - // Set the actual length of the input bytes - mstore(snarkHashBytes, _SNARK_SHA_BYTES) - - // Set the pointer at the beginning of the byte array - let ptr := add(snarkHashBytes, 32) - - // Function defined to add 32 bytes into the snark btye array on a prover friendly method - function add32BytesToInputSnark(bytesToAdd, ptrInit) -> ptrFinal { - ptrFinal := ptrInit - for { - let i := 0 - } lt(i, 8) { - i := add(i, 1) - } { - // Every iteration will write 4 bytes (32 bits) from inputStark padded to 8 bytes, in little endian format - // First shift right i*32 bits, in order to have the next 4 bytes to write at the end of the byte array - // Then shift left 256 - 32 (224) bits to the left. - // As a result the first 4 bytes will be the next ones, and the rest of the bytes will be zeroes - // Finally the result is shifted 32 bits for the padding, and stores in the current position of the pointer - mstore( - ptrFinal, - shr(32, shl(224, shr(mul(i, 32), bytesToAdd))) - ) - ptrFinal := add(ptrFinal, 8) // write the next 8 bytes - } - } - - // Add currentStateRoot - ptr := add32BytesToInputSnark(sload(currentStateRoot.slot), ptr) - - // Add newStateRoot - ptr := add32BytesToInputSnark(newStateRoot, ptr) - - // Add oldAccInputHash - ptr := add32BytesToInputSnark(oldAccInputHash, ptr) - - // Add newAccInputHash - ptr := add32BytesToInputSnark(newAccInputHash, ptr) - - // Add newLocalExitRoot - ptr := add32BytesToInputSnark(newLocalExitRoot, ptr) - - // add firstNumBatch - mstore(ptr, shl(192, _lastVerifiedBatch)) // 256 - 64 = 192 - ptr := add(ptr, 8) - - // add lastNumBatch - mstore(ptr, shl(192, newVerifiedBatch)) // 256 - 64 = 192 - ptr := add(ptr, 8) - - // add chainID - mstore(ptr, shl(192, sload(chainID.slot))) // 256 - 64 = 192 - ptr := add(ptr, 8) - - // add aggregator address - mstore(ptr, shl(96, caller())) // 256 - 160 = 96 - ptr := add(ptr, 20) - } - return snarkHashBytes; + return + abi.encodePacked( + msg.sender, + currentStateRoot, + oldAccInputHash, + _lastVerifiedBatch, + chainID, + newStateRoot, + newAccInputHash, + newLocalExitRoot, + newVerifiedBatch + ); } } diff --git a/deployment/deployment_v2-0/genesis-gen.json b/deployment/deployment_v2-0/genesis-gen.json index 7a2d49af6..5c6d7e4bf 100644 --- a/deployment/deployment_v2-0/genesis-gen.json +++ b/deployment/deployment_v2-0/genesis-gen.json @@ -1,5 +1,6 @@ { + "defaultChainId": 1000, "sequencerAddress": "0xC949254d682D8c9ad5682521675b8F43b102aec4", "genesis": [ { diff --git a/deployment/deployment_v2-0/genesis.json b/deployment/deployment_v2-0/genesis.json index fc01424cd..c16670e72 100644 --- a/deployment/deployment_v2-0/genesis.json +++ b/deployment/deployment_v2-0/genesis.json @@ -1,5 +1,5 @@ { - "root": "0x2e74f6d94403b0d39545d0b1e229fd9887f5d82336e71d6597496acd1309e365", + "root": "0x8ddd4d2542d8f3ddd0bcf7ab122eac7b1ed81e2fe2f12acc8d6c2182eff0007c", "genesis": [ { "balance": "0", @@ -20,7 +20,7 @@ "balance": "100000000000000000000000", "nonce": "2", "address": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988", - "bytecode": "0x608060405260043610620001075760003560e01c80635d5d326f1162000095578063bab161bf1162000060578063bab161bf1462000414578063d02103ca1462000449578063e73758811462000478578063ed6be5c914620004ac57600080fd5b80635d5d326f146200035e57806381b1c17414620003835780638624c35c14620003ca578063b7e6a7d414620003ef57600080fd5b80633ae0504711620000d65780633ae05047146200023a5780633da816821462000252578063508935f814620002885780635a64a1da14620002a157600080fd5b806322e95f2c146200010c5780632dfdf0b5146200015b5780632f3a3d5d1462000182578063318aee3d14620001b1575b600080fd5b3480156200011957600080fd5b50620001316200012b366004620027b4565b620004c3565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200016857600080fd5b506200017360415481565b60405190815260200162000152565b3480156200018f57600080fd5b50604754620001319073ffffffffffffffffffffffffffffffffffffffff1681565b348015620001be57600080fd5b5062000208620001d0366004620027f0565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000152565b3480156200024757600080fd5b506200017362000566565b3480156200025f57600080fd5b5062000277620002713660046200290f565b62000640565b604051901515815260200162000152565b6200029f620002993660046200297d565b62000740565b005b348015620002ae57600080fd5b5062000173620002c036600462002a39565b604080517fffffffff0000000000000000000000000000000000000000000000000000000060e098891b81166020808401919091527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006060998a1b811660248501529790991b1660388201529390951b909316603c830152605082015260708082019290925282518082039092018252609001909152805191012090565b3480156200036b57600080fd5b506200029f6200037d36600462002b51565b62000d2a565b3480156200039057600080fd5b5062000131620003a236600462002c38565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620003d757600080fd5b506200029f620003e9366004620027b4565b620017d9565b348015620003fc57600080fd5b50620001316200040e366004620027b4565b62001a57565b3480156200042157600080fd5b50604254620004339063ffffffff1681565b60405163ffffffff909116815260200162000152565b3480156200045657600080fd5b50604654620001319073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200048557600080fd5b50620002776200049736600462002c38565b60436020526000908152604090205460ff1681565b348015620004b957600080fd5b5062000433600081565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6041546000908190815b6020811015620006385781600116600103620005d057600181602081106200059c576200059c62002c52565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000614565b8260218260208110620005e757620005e762002c52565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b6200062160028362002cb0565b9150806200062f8162002cec565b91505062000570565b509092915050565b60008467ffffffffffffffff8416825b6020811015620007335781600116600103620006bd578681815181106200067b576200067b62002c52565b6020026020010151836040516020016200069f929190918252602082015260400190565b6040516020818303038152906040528051906020012092506200070f565b82878281518110620006d357620006d362002c52565b6020026020010151604051602001620006f6929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b6200071c60028362002cb0565b9150806200072a8162002cec565b91505062000650565b5050909114949350505050565b60425463ffffffff90811690861603620007e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff89166200089d5785341462000893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007d8565b6000915062000bb1565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200099e576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562000965573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200098b919062002d27565b5060208101518151909450925062000baf565b8415620009b357620009b38a88888862001b20565b620009d773ffffffffffffffffffffffffffffffffffffffff8b1633308a62001f71565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000a3b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262000a83919081019062002dc6565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000acf573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262000b17919081019062002dc6565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000b63573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b89919062002e0f565b60405160200162000b9d9392919062002e7b565b60405160208183030381529060405291505b505b7ff0b963192bdc6349c23af9bd17294b4c7b9b5a73a2a9939610ea18ffd1c5dc2a82848a8a8a8660415460405162000bf0979695949392919062002eb8565b60405180910390a18051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e087811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166024860152918f901b90921660388401528c901b16603c820152605081018a9052607080820193909352815180820390930183526090019052805191012062000ca49062002055565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000ccc62000566565b6040518263ffffffff1660e01b815260040162000ceb91815260200190565b600060405180830381600087803b15801562000d0657600080fd5b505af115801562000d1b573d6000803e3d6000fd5b50505050505050505050505050565b63ffffffff891660009081526043602052604090205460ff161562000dac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d454400006044820152606401620007d8565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000e45573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e6b919062002f25565b60000362000efc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d415443480000000000000000000000000000000000006064820152608401620007d8565b60425463ffffffff85811691161462000f98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d415443480000000000000000000000000000006064820152608401620007d8565b60425463ffffffff16620010c9578051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166024860152918b901b909216603884015288901b16603c8201526050810186905260708082019390935281518082039093018352609001905280519101206200105b908b8b63ffffffff168a62000640565b620010c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007d8565b620011e6565b8051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166024860152918b901b909216603884015288901b16603c8201526050810186905260708082019390935281518082039093018352609001905280519101206200117e908b8b63ffffffff168b62000640565b620011e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007d8565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff851662001357576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001279919062002f3f565b60006040518083038185875af1925050503d8060008114620012b8576040519150601f19603f3d011682016040523d82523d6000602084013e620012bd565b606091505b505090508062001350576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f45440000000000000000000000000000000000000000000000000000000000006064820152608401620007d8565b5062001762565b60425463ffffffff9081169087160362001394576200138e73ffffffffffffffffffffffffffffffffffffffff86168484620021ce565b62001762565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff1680620016c1576047546000906200147f9073ffffffffffffffffffffffffffffffffffffffff168462002226565b90506000806000868060200190518101906200149c919062002f5d565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b8152600401620014e595949392919062002fde565b600060405180830381600087803b1580156200150057600080fd5b505af115801562001515573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c86604051620016af9392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a1505050506200175f565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001737573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200175d919062002d27565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff1615808015620017fa5750600054600160ff909116105b80620018165750303b15801562001816575060005460ff166001145b620018a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007d8565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156200190357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841617905560405162001981906200275c565b604051809103906000f0801580156200199e573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055620019ee62002306565b801562001a5257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012060475490915062001b189073ffffffffffffffffffffffffffffffffffffffff16826200244e565b949350505050565b600062001b6383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620024d292505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf000000000000000000000000000000000000000000000000000000001462001c38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f48657a4d617469634d657267653a3a5f7065726d69743a204e4f545f56414c4960448201527f445f43414c4c00000000000000000000000000000000000000000000000000006064820152608401620007d8565b600080808080808062001c4f896004818d6200303e565b81019062001c5e91906200306a565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462001d29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f48657a4d617469634d657267653a3a5f7065726d69743a205045524d49545f4f60448201527f574e45525f4d5553545f42455f5448455f53454e4445520000000000000000006064820152608401620007d8565b73ffffffffffffffffffffffffffffffffffffffff8616301462001dd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f48657a4d617469634d657267653a3a5f7065726d69743a205350454e4445525f60448201527f4d5553545f42455f5448495300000000000000000000000000000000000000006064820152608401620007d8565b8a851462001e61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f48657a4d617469634d657267653a3a5f7065726d69743a205045524d49545f4160448201527f4d4f554e545f444f45535f4e4f545f4d415443480000000000000000000000006064820152608401620007d8565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162001f1c919062002f3f565b6000604051808303816000865af19150503d806000811462001f5b576040519150601f19603f3d011682016040523d82523d6000602084013e62001f60565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526200204f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152620024d9565b50505050565b80600162002066602060026200321b565b62002072919062003229565b6041541062002104576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007d8565b60016041600082825462002119919062003243565b909155505060415460005b6020811015620021c357816001166001036200215957826001826020811062002151576200215162002c52565b015550505050565b600181602081106200216f576200216f62002c52565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620021ac919062002cb0565b915080620021ba8162002cec565b91505062002124565b5062001a526200325e565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262001a529084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162001fcc565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000560576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401620007d8565b600054610100900460ff166200239f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007d8565b60005b620023b06001602062003229565b8110156200244b5760218160208110620023ce57620023ce62002c52565b015460218260208110620023e657620023e662002c52565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002421919062003243565b6020811062002434576200243462002c52565b015580620024428162002cec565b915050620023a2565b50565b6000620024cb8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b60006200253d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620025ec9092919063ffffffff16565b80519091501562001a5257808060200190518101906200255e919062002d27565b62001a52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007d8565b606062001b1884846000858573ffffffffffffffffffffffffffffffffffffffff85163b62002678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007d8565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620026a3919062002f3f565b60006040518083038185875af1925050503d8060008114620026e2576040519150601f19603f3d011682016040523d82523d6000602084013e620026e7565b606091505b5091509150620026f982828662002704565b979650505050505050565b6060831562002715575081620024cb565b825115620027265782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007d891906200328d565b61182980620032a383390190565b803563ffffffff811681146200277f57600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811681146200244b57600080fd5b80356200277f8162002784565b60008060408385031215620027c857600080fd5b620027d3836200276a565b91506020830135620027e58162002784565b809150509250929050565b6000602082840312156200280357600080fd5b8135620024cb8162002784565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171562002889576200288962002810565b604052919050565b600082601f830112620028a357600080fd5b8135602067ffffffffffffffff821115620028c257620028c262002810565b8160051b620028d38282016200283f565b9283528481018201928281019087851115620028ee57600080fd5b83870192505b84831015620026f957823582529183019190830190620028f4565b600080600080608085870312156200292657600080fd5b84359350602085013567ffffffffffffffff808211156200294657600080fd5b620029548883890162002891565b94506040870135915080821682146200296c57600080fd5b509396929550929360600135925050565b60008060008060008060a087890312156200299757600080fd5b8635620029a48162002784565b9550620029b4602088016200276a565b94506040870135620029c68162002784565b935060608701359250608087013567ffffffffffffffff80821115620029eb57600080fd5b818901915089601f83011262002a0057600080fd5b81358181111562002a1057600080fd5b8a602082850101111562002a2357600080fd5b6020830194508093505050509295509295509295565b60008060008060008060c0878903121562002a5357600080fd5b62002a5e876200276a565b9550602087013562002a708162002784565b945062002a80604088016200276a565b9350606087013562002a928162002784565b9598949750929560808101359460a0909101359350915050565b600067ffffffffffffffff82111562002ac95762002ac962002810565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011262002b0757600080fd5b813562002b1e62002b188262002aac565b6200283f565b81815284602083860101111562002b3457600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002b7257600080fd5b8a3567ffffffffffffffff8082111562002b8b57600080fd5b62002b998e838f0162002891565b9b5062002ba960208e016200276a565b9a5060408d0135995060608d0135985062002bc760808e016200276a565b975062002bd760a08e01620027a7565b965062002be760c08e016200276a565b955062002bf760e08e01620027a7565b94506101008d013593506101208d013591508082111562002c1757600080fd5b5062002c268d828e0162002af5565b9150509295989b9194979a5092959850565b60006020828403121562002c4b57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262002ce7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362002d205762002d2062002c81565b5060010190565b60006020828403121562002d3a57600080fd5b81518015158114620024cb57600080fd5b60005b8381101562002d6857818101518382015260200162002d4e565b838111156200204f5750506000910152565b600082601f83011262002d8c57600080fd5b815162002d9d62002b188262002aac565b81815284602083860101111562002db357600080fd5b62001b1882602083016020870162002d4b565b60006020828403121562002dd957600080fd5b815167ffffffffffffffff81111562002df157600080fd5b62001b188482850162002d7a565b60ff811681146200244b57600080fd5b60006020828403121562002e2257600080fd5b8151620024cb8162002dff565b6000815180845262002e4981602086016020860162002d4b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60608152600062002e90606083018662002e2f565b828103602084015262002ea4818662002e2f565b91505060ff83166040830152949350505050565b600063ffffffff808a16835273ffffffffffffffffffffffffffffffffffffffff808a166020850152818916604085015280881660608501525085608084015260e060a084015262002f0e60e084018662002e2f565b915080841660c08401525098975050505050505050565b60006020828403121562002f3857600080fd5b5051919050565b6000825162002f5381846020870162002d4b565b9190910192915050565b60008060006060848603121562002f7357600080fd5b835167ffffffffffffffff8082111562002f8c57600080fd5b62002f9a8783880162002d7a565b9450602086015191508082111562002fb157600080fd5b5062002fc08682870162002d7a565b925050604084015162002fd38162002dff565b809150509250925092565b60a08152600062002ff360a083018862002e2f565b828103602084015262003007818862002e2f565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b600080858511156200304f57600080fd5b838611156200305d57600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200308657600080fd5b8735620030938162002784565b96506020880135620030a58162002784565b955060408801359450606088013593506080880135620030c58162002dff565b9699959850939692959460a0840135945060c09093013592915050565b600181815b808511156200314157817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003125576200312562002c81565b808516156200313357918102915b93841c9390800290620030e7565b509250929050565b6000826200315a5750600162000560565b81620031695750600062000560565b81600181146200318257600281146200318d57620031ad565b600191505062000560565b60ff841115620031a157620031a162002c81565b50506001821b62000560565b5060208310610133831016604e8410600b8410161715620031d2575081810a62000560565b620031de8383620030e2565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003213576200321362002c81565b029392505050565b6000620024cb838362003149565b6000828210156200323e576200323e62002c81565b500390565b6000821982111562003259576200325962002c81565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b602081526000620024cb602083018462002e2f56fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a264697066735822122068cb524538909c05cc5109b7664a019588dc698f1f570976efb4dd6b6aee818364736f6c634300080f0033", + "bytecode": "0x6080604052600436106200017b5760003560e01c806381b1c17411620000cf578063d02103ca116200007d578063e73758811162000060578063e73758811462000589578063ed6be5c914620005bd578063ff634ed714620005d457600080fd5b8063d02103ca1462000543578063d96a15f7146200057257600080fd5b8063a08e8a0811620000b2578063a08e8a0814620004bf578063b7e6a7d414620004e9578063bab161bf146200050e57600080fd5b806381b1c17414620004535780638624c35c146200049a57600080fd5b80633ae05047116200012d5780633e19704311620001105780633e19704314620003155780634638554914620004095780637b6323c1146200042e57600080fd5b80633ae0504714620002c75780633da8168214620002df57600080fd5b80632dfdf0b511620001625780632dfdf0b514620001e85780632f3a3d5d146200020f578063318aee3d146200023e57600080fd5b80630871e971146200018057806322e95f2c1462000199575b600080fd5b6200019762000191366004620032c4565b620005eb565b005b348015620001a657600080fd5b50620001be620001b836600462003380565b62000bdf565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015620001f557600080fd5b506200020060415481565b604051908152602001620001df565b3480156200021c57600080fd5b50604754620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200024b57600080fd5b50620002956200025d366004620033bc565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201620001df565b348015620002d457600080fd5b506200020062000c82565b348015620002ec57600080fd5b5062000304620002fe366004620034db565b62000d5c565b6040519015158152602001620001df565b3480156200032257600080fd5b50620002006200033436600462003559565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200041657600080fd5b50620001976200042836600462003688565b62000e5c565b3480156200043b57600080fd5b50620001976200044d36600462003688565b62001617565b3480156200046057600080fd5b50620001be620004723660046200376f565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620004a757600080fd5b5062000197620004b936600462003380565b620020c2565b348015620004cc57600080fd5b50620004d6600081565b60405160ff9091168152602001620001df565b348015620004f657600080fd5b50620001be6200050836600462003380565b62002340565b3480156200051b57600080fd5b506042546200052d9063ffffffff1681565b60405163ffffffff9091168152602001620001df565b3480156200055057600080fd5b50604654620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b620001976200058336600462003789565b62002409565b3480156200059657600080fd5b5062000304620005a83660046200376f565b60436020526000908152604090205460ff1681565b348015620005ca57600080fd5b506200052d600081565b348015620005e157600080fd5b50620004d6600181565b60425463ffffffff908116908616036200068c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff891662000748578534146200073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c55450000000000000000000000000000000000606482015260840162000683565b6000915062000a5c565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000849576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562000810573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008369190620037f1565b5060208101518151909450925062000a5a565b84156200085e576200085e8a88888862002656565b6200088273ffffffffffffffffffffffffffffffffffffffff8b1633308a62002a81565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200092e919081019062003890565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200097a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620009c2919081019062003890565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a349190620038c9565b60405160200162000a489392919062003935565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760415460405162000a9e98979695949392919062003972565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000b599062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000b8162000c82565b6040518263ffffffff1660e01b815260040162000ba091815260200190565b600060405180830381600087803b15801562000bbb57600080fd5b505af115801562000bd0573d6000803e3d6000fd5b50505050505050505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6041546000908190815b602081101562000d54578160011660010362000cec576001816020811062000cb85762000cb8620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000d30565b826021826020811062000d035762000d03620039eb565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b62000d3d60028362003a49565b91508062000d4b8162003a85565b91505062000c8c565b509092915050565b60008467ffffffffffffffff8416825b602081101562000e4f578160011660010362000dd95786818151811062000d975762000d97620039eb565b60200260200101518360405160200162000dbb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000e2b565b8287828151811062000def5762000def620039eb565b602002602001015160405160200162000e12929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000e3860028362003a49565b91508062000e468162003a85565b91505062000d6c565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000f04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d4544000000000000000000000000000000000000000000000000000000606482015260840162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000f9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fc3919062003ac0565b60000362001054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000606482015260840162000683565b60425463ffffffff858116911614620010f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000606482015260840162000683565b60425463ffffffff166200126e578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620011da905b8b8b63ffffffff168a62000d5c565b62001268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b620013d8565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200134a905b8b8b63ffffffff168b62000d5c565b620013d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff8516908490620014469089908b90879060240162003ada565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f20000000000000000000000000000000000000000000000000000000017905251620014c9919062003b20565b60006040518083038185875af1925050503d806000811462001508576040519150601f19603f3d011682016040523d82523d6000602084013e6200150d565b606091505b50509050806200159f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c454400000000000000000000000000000000000000000000000000000000606482015260840162000683565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b63ffffffff891660009081526043602052604090205460ff161562001699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d45440000604482015260640162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001732573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001758919062003ac0565b600003620017e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d41544348000000000000000000000000000000000000606482015260840162000683565b60425463ffffffff85811691161462001885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d41544348000000000000000000000000000000606482015260840162000683565b60425463ffffffff16620019b4578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200194690620011cb565b620019ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b62001acf565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062001a67906200133b565b62001acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff851662001c40576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001b62919062003b20565b60006040518083038185875af1925050503d806000811462001ba1576040519150601f19603f3d011682016040523d82523d6000602084013e62001ba6565b606091505b505090508062001c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f4544000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b506200204b565b60425463ffffffff9081169087160362001c7d5762001c7773ffffffffffffffffffffffffffffffffffffffff8616848462002cde565b6200204b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001faa5760475460009062001d689073ffffffffffffffffffffffffffffffffffffffff168462002d36565b905060008060008680602001905181019062001d85919062003b3e565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001dce95949392919062003bbf565b600060405180830381600087803b15801562001de957600080fd5b505af115801562001dfe573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001f989392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062002048565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562002020573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020469190620037f1565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff1615808015620020e35750600054600160ff909116105b80620020ff5750303b158015620020ff575060005460ff166001145b6200218d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840162000683565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620021ec57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556040516200226a906200326c565b604051809103906000f08015801562002287573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055620022d762002e16565b80156200233b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620024019073ffffffffffffffffffffffffffffffffffffffff168262002f5e565b949350505050565b60425463ffffffff90811690841603620024a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c4600000000000000000000000000000000000000000000606482015260840162000683565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620024f39260019263ffffffff9092169133918991899134918a919062003972565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620025d69062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d620025fe62000c82565b6040518263ffffffff1660e01b81526004016200261d91815260200190565b600060405180830381600087803b1580156200263857600080fd5b505af11580156200264d573d6000803e3d6000fd5b50505050505050565b60006200269983838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002fe292505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf000000000000000000000000000000000000000000000000000000001462002748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000683565b60008080808080806200275f896004818d62003c1f565b8101906200276e919062003c4b565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462002839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000683565b73ffffffffffffffffffffffffffffffffffffffff86163014620028e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000683565b8a851462002971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d4154434800000000000000000000000000000000000000606482015260840162000683565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002a2c919062003b20565b6000604051808303816000865af19150503d806000811462002a6b576040519150601f19603f3d011682016040523d82523d6000602084013e62002a70565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905262002b5f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002fe9565b50505050565b80600162002b766020600262003ddf565b62002b82919062003ded565b6041541062002c14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c00000000000000000000000000000000000000000000606482015260840162000683565b60016041600082825462002c29919062003e07565b909155505060415460005b602081101562002cd3578160011660010362002c6957826001826020811062002c615762002c61620039eb565b015550505050565b6001816020811062002c7f5762002c7f620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002cbc919062003a49565b91508062002cca8162003a85565b91505062002c34565b506200233b62003e22565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526200233b9084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002adc565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000c7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640162000683565b600054610100900460ff1662002eaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000683565b60005b62002ec06001602062003ded565b81101562002f5b576021816020811062002ede5762002ede620039eb565b01546021826020811062002ef65762002ef6620039eb565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002f31919062003e07565b6020811062002f445762002f44620039eb565b01558062002f528162003a85565b91505062002eb2565b50565b600062002fdb8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b60006200304d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620030fc9092919063ffffffff16565b8051909150156200233b57808060200190518101906200306e9190620037f1565b6200233b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000683565b60606200240184846000858573ffffffffffffffffffffffffffffffffffffffff85163b62003188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000683565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620031b3919062003b20565b60006040518083038185875af1925050503d8060008114620031f2576040519150601f19603f3d011682016040523d82523d6000602084013e620031f7565b606091505b50915091506200320982828662003214565b979650505050505050565b606083156200322557508162002fdb565b825115620032365782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000683919062003e51565b6118298062003e6783390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462002f5b57600080fd5b8035620032aa816200327a565b919050565b803563ffffffff81168114620032aa57600080fd5b60008060008060008060a08789031215620032de57600080fd5b8635620032eb816200327a565b9550620032fb60208801620032af565b945060408701356200330d816200327a565b935060608701359250608087013567ffffffffffffffff808211156200333257600080fd5b818901915089601f8301126200334757600080fd5b8135818111156200335757600080fd5b8a60208285010111156200336a57600080fd5b6020830194508093505050509295509295509295565b600080604083850312156200339457600080fd5b6200339f83620032af565b91506020830135620033b1816200327a565b809150509250929050565b600060208284031215620033cf57600080fd5b813562002fdb816200327a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620034555762003455620033dc565b604052919050565b600082601f8301126200346f57600080fd5b8135602067ffffffffffffffff8211156200348e576200348e620033dc565b8160051b6200349f8282016200340b565b9283528481018201928281019087851115620034ba57600080fd5b83870192505b848310156200320957823582529183019190830190620034c0565b60008060008060808587031215620034f257600080fd5b84359350602085013567ffffffffffffffff808211156200351257600080fd5b62003520888389016200345d565b94506040870135915080821682146200353857600080fd5b509396929550929360600135925050565b60ff8116811462002f5b57600080fd5b600080600080600080600060e0888a0312156200357557600080fd5b8735620035828162003549565b96506200359260208901620032af565b95506040880135620035a4816200327a565b9450620035b460608901620032af565b93506080880135620035c6816200327a565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620036005762003600620033dc565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126200363e57600080fd5b8135620036556200364f82620035e3565b6200340b565b8181528460208386010111156200366b57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620036a957600080fd5b8a3567ffffffffffffffff80821115620036c257600080fd5b620036d08e838f016200345d565b9b50620036e060208e01620032af565b9a5060408d0135995060608d01359850620036fe60808e01620032af565b97506200370e60a08e016200329d565b96506200371e60c08e01620032af565b95506200372e60e08e016200329d565b94506101008d013593506101208d01359150808211156200374e57600080fd5b506200375d8d828e016200362c565b9150509295989b9194979a5092959850565b6000602082840312156200378257600080fd5b5035919050565b6000806000606084860312156200379f57600080fd5b620037aa84620032af565b92506020840135620037bc816200327a565b9150604084013567ffffffffffffffff811115620037d957600080fd5b620037e7868287016200362c565b9150509250925092565b6000602082840312156200380457600080fd5b8151801515811462002fdb57600080fd5b60005b838110156200383257818101518382015260200162003818565b8381111562002b5f5750506000910152565b600082601f8301126200385657600080fd5b8151620038676200364f82620035e3565b8181528460208386010111156200387d57600080fd5b6200240182602083016020870162003815565b600060208284031215620038a357600080fd5b815167ffffffffffffffff811115620038bb57600080fd5b620024018482850162003844565b600060208284031215620038dc57600080fd5b815162002fdb8162003549565b600081518084526200390381602086016020860162003815565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6060815260006200394a6060830186620038e9565b82810360208401526200395e8186620038e9565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620039d282850187620038e9565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003a80577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003ab95762003ab962003a1a565b5060010190565b60006020828403121562003ad357600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003b176060830184620038e9565b95945050505050565b6000825162003b3481846020870162003815565b9190910192915050565b60008060006060848603121562003b5457600080fd5b835167ffffffffffffffff8082111562003b6d57600080fd5b62003b7b8783880162003844565b9450602086015191508082111562003b9257600080fd5b5062003ba18682870162003844565b925050604084015162003bb48162003549565b809150509250925092565b60a08152600062003bd460a0830188620038e9565b828103602084015262003be88188620038e9565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000808585111562003c3057600080fd5b8386111562003c3e57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003c6757600080fd5b873562003c74816200327a565b9650602088013562003c86816200327a565b955060408801359450606088013593506080880135620035c68162003549565b600181815b8085111562003d0557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003ce95762003ce962003a1a565b8085161562003cf757918102915b93841c939080029062003cab565b509250929050565b60008262003d1e5750600162000c7c565b8162003d2d5750600062000c7c565b816001811462003d46576002811462003d515762003d71565b600191505062000c7c565b60ff84111562003d655762003d6562003a1a565b50506001821b62000c7c565b5060208310610133831016604e8410600b841016171562003d96575081810a62000c7c565b62003da2838362003ca6565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003dd75762003dd762003a1a565b029392505050565b600062002fdb838362003d0d565b60008282101562003e025762003e0262003a1a565b500390565b6000821982111562003e1d5762003e1d62003a1a565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60208152600062002fdb6020830184620038e956fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a26469706673582212200f33d24b40d1e879f02496512d8e703a09704c5edf7d149259a9c3cf2b64250664736f6c634300080f0033", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", "0x0000000000000000000000000000000000000000000000000000000000000042": "0x01", diff --git a/docker/scripts/genesis_docker.json b/docker/scripts/genesis_docker.json index e14c0e2e8..465f8a37d 100644 --- a/docker/scripts/genesis_docker.json +++ b/docker/scripts/genesis_docker.json @@ -1,5 +1,5 @@ { - "root": "0xb33635210b9f5d07769cf70bf5a3cbf241ecbaf79a9b66ef79b28d920da1f776", + "root": "0x52a940938311f513017f0d9b1da06123c00603bb494763bcdbc536aebefa900c", "genesis": [ { "balance": "0", @@ -20,7 +20,7 @@ "balance": "100000000000000000000000", "nonce": "2", "address": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988", - "bytecode": "0x608060405260043610620001075760003560e01c80635d5d326f1162000095578063bab161bf1162000060578063bab161bf1462000414578063d02103ca1462000449578063e73758811462000478578063ed6be5c914620004ac57600080fd5b80635d5d326f146200035e57806381b1c17414620003835780638624c35c14620003ca578063b7e6a7d414620003ef57600080fd5b80633ae0504711620000d65780633ae05047146200023a5780633da816821462000252578063508935f814620002885780635a64a1da14620002a157600080fd5b806322e95f2c146200010c5780632dfdf0b5146200015b5780632f3a3d5d1462000182578063318aee3d14620001b1575b600080fd5b3480156200011957600080fd5b50620001316200012b366004620027b4565b620004c3565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200016857600080fd5b506200017360415481565b60405190815260200162000152565b3480156200018f57600080fd5b50604754620001319073ffffffffffffffffffffffffffffffffffffffff1681565b348015620001be57600080fd5b5062000208620001d0366004620027f0565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000152565b3480156200024757600080fd5b506200017362000566565b3480156200025f57600080fd5b5062000277620002713660046200290f565b62000640565b604051901515815260200162000152565b6200029f620002993660046200297d565b62000740565b005b348015620002ae57600080fd5b5062000173620002c036600462002a39565b604080517fffffffff0000000000000000000000000000000000000000000000000000000060e098891b81166020808401919091527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006060998a1b811660248501529790991b1660388201529390951b909316603c830152605082015260708082019290925282518082039092018252609001909152805191012090565b3480156200036b57600080fd5b506200029f6200037d36600462002b51565b62000d2a565b3480156200039057600080fd5b5062000131620003a236600462002c38565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620003d757600080fd5b506200029f620003e9366004620027b4565b620017d9565b348015620003fc57600080fd5b50620001316200040e366004620027b4565b62001a57565b3480156200042157600080fd5b50604254620004339063ffffffff1681565b60405163ffffffff909116815260200162000152565b3480156200045657600080fd5b50604654620001319073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200048557600080fd5b50620002776200049736600462002c38565b60436020526000908152604090205460ff1681565b348015620004b957600080fd5b5062000433600081565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6041546000908190815b6020811015620006385781600116600103620005d057600181602081106200059c576200059c62002c52565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000614565b8260218260208110620005e757620005e762002c52565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b6200062160028362002cb0565b9150806200062f8162002cec565b91505062000570565b509092915050565b60008467ffffffffffffffff8416825b6020811015620007335781600116600103620006bd578681815181106200067b576200067b62002c52565b6020026020010151836040516020016200069f929190918252602082015260400190565b6040516020818303038152906040528051906020012092506200070f565b82878281518110620006d357620006d362002c52565b6020026020010151604051602001620006f6929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b6200071c60028362002cb0565b9150806200072a8162002cec565b91505062000650565b5050909114949350505050565b60425463ffffffff90811690861603620007e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff89166200089d5785341462000893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007d8565b6000915062000bb1565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200099e576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562000965573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200098b919062002d27565b5060208101518151909450925062000baf565b8415620009b357620009b38a88888862001b20565b620009d773ffffffffffffffffffffffffffffffffffffffff8b1633308a62001f71565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000a3b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262000a83919081019062002dc6565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000acf573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262000b17919081019062002dc6565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000b63573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b89919062002e0f565b60405160200162000b9d9392919062002e7b565b60405160208183030381529060405291505b505b7ff0b963192bdc6349c23af9bd17294b4c7b9b5a73a2a9939610ea18ffd1c5dc2a82848a8a8a8660415460405162000bf0979695949392919062002eb8565b60405180910390a18051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e087811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166024860152918f901b90921660388401528c901b16603c820152605081018a9052607080820193909352815180820390930183526090019052805191012062000ca49062002055565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000ccc62000566565b6040518263ffffffff1660e01b815260040162000ceb91815260200190565b600060405180830381600087803b15801562000d0657600080fd5b505af115801562000d1b573d6000803e3d6000fd5b50505050505050505050505050565b63ffffffff891660009081526043602052604090205460ff161562000dac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d454400006044820152606401620007d8565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000e45573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e6b919062002f25565b60000362000efc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d415443480000000000000000000000000000000000006064820152608401620007d8565b60425463ffffffff85811691161462000f98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d415443480000000000000000000000000000006064820152608401620007d8565b60425463ffffffff16620010c9578051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166024860152918b901b909216603884015288901b16603c8201526050810186905260708082019390935281518082039093018352609001905280519101206200105b908b8b63ffffffff168a62000640565b620010c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007d8565b620011e6565b8051602080830191909120604080517fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b8216838701527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166024860152918b901b909216603884015288901b16603c8201526050810186905260708082019390935281518082039093018352609001905280519101206200117e908b8b63ffffffff168b62000640565b620011e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007d8565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff851662001357576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001279919062002f3f565b60006040518083038185875af1925050503d8060008114620012b8576040519150601f19603f3d011682016040523d82523d6000602084013e620012bd565b606091505b505090508062001350576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f45440000000000000000000000000000000000000000000000000000000000006064820152608401620007d8565b5062001762565b60425463ffffffff9081169087160362001394576200138e73ffffffffffffffffffffffffffffffffffffffff86168484620021ce565b62001762565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff1680620016c1576047546000906200147f9073ffffffffffffffffffffffffffffffffffffffff168462002226565b90506000806000868060200190518101906200149c919062002f5d565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b8152600401620014e595949392919062002fde565b600060405180830381600087803b1580156200150057600080fd5b505af115801562001515573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c86604051620016af9392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a1505050506200175f565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001737573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200175d919062002d27565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff1615808015620017fa5750600054600160ff909116105b80620018165750303b15801562001816575060005460ff166001145b620018a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007d8565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156200190357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841617905560405162001981906200275c565b604051809103906000f0801580156200199e573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055620019ee62002306565b801562001a5257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012060475490915062001b189073ffffffffffffffffffffffffffffffffffffffff16826200244e565b949350505050565b600062001b6383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620024d292505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf000000000000000000000000000000000000000000000000000000001462001c38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f48657a4d617469634d657267653a3a5f7065726d69743a204e4f545f56414c4960448201527f445f43414c4c00000000000000000000000000000000000000000000000000006064820152608401620007d8565b600080808080808062001c4f896004818d6200303e565b81019062001c5e91906200306a565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462001d29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f48657a4d617469634d657267653a3a5f7065726d69743a205045524d49545f4f60448201527f574e45525f4d5553545f42455f5448455f53454e4445520000000000000000006064820152608401620007d8565b73ffffffffffffffffffffffffffffffffffffffff8616301462001dd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f48657a4d617469634d657267653a3a5f7065726d69743a205350454e4445525f60448201527f4d5553545f42455f5448495300000000000000000000000000000000000000006064820152608401620007d8565b8a851462001e61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f48657a4d617469634d657267653a3a5f7065726d69743a205045524d49545f4160448201527f4d4f554e545f444f45535f4e4f545f4d415443480000000000000000000000006064820152608401620007d8565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162001f1c919062002f3f565b6000604051808303816000865af19150503d806000811462001f5b576040519150601f19603f3d011682016040523d82523d6000602084013e62001f60565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526200204f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152620024d9565b50505050565b80600162002066602060026200321b565b62002072919062003229565b6041541062002104576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007d8565b60016041600082825462002119919062003243565b909155505060415460005b6020811015620021c357816001166001036200215957826001826020811062002151576200215162002c52565b015550505050565b600181602081106200216f576200216f62002c52565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620021ac919062002cb0565b915080620021ba8162002cec565b91505062002124565b5062001a526200325e565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262001a529084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162001fcc565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000560576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401620007d8565b600054610100900460ff166200239f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007d8565b60005b620023b06001602062003229565b8110156200244b5760218160208110620023ce57620023ce62002c52565b015460218260208110620023e657620023e662002c52565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002421919062003243565b6020811062002434576200243462002c52565b015580620024428162002cec565b915050620023a2565b50565b6000620024cb8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b60006200253d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620025ec9092919063ffffffff16565b80519091501562001a5257808060200190518101906200255e919062002d27565b62001a52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007d8565b606062001b1884846000858573ffffffffffffffffffffffffffffffffffffffff85163b62002678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007d8565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620026a3919062002f3f565b60006040518083038185875af1925050503d8060008114620026e2576040519150601f19603f3d011682016040523d82523d6000602084013e620026e7565b606091505b5091509150620026f982828662002704565b979650505050505050565b6060831562002715575081620024cb565b825115620027265782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007d891906200328d565b61182980620032a383390190565b803563ffffffff811681146200277f57600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811681146200244b57600080fd5b80356200277f8162002784565b60008060408385031215620027c857600080fd5b620027d3836200276a565b91506020830135620027e58162002784565b809150509250929050565b6000602082840312156200280357600080fd5b8135620024cb8162002784565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171562002889576200288962002810565b604052919050565b600082601f830112620028a357600080fd5b8135602067ffffffffffffffff821115620028c257620028c262002810565b8160051b620028d38282016200283f565b9283528481018201928281019087851115620028ee57600080fd5b83870192505b84831015620026f957823582529183019190830190620028f4565b600080600080608085870312156200292657600080fd5b84359350602085013567ffffffffffffffff808211156200294657600080fd5b620029548883890162002891565b94506040870135915080821682146200296c57600080fd5b509396929550929360600135925050565b60008060008060008060a087890312156200299757600080fd5b8635620029a48162002784565b9550620029b4602088016200276a565b94506040870135620029c68162002784565b935060608701359250608087013567ffffffffffffffff80821115620029eb57600080fd5b818901915089601f83011262002a0057600080fd5b81358181111562002a1057600080fd5b8a602082850101111562002a2357600080fd5b6020830194508093505050509295509295509295565b60008060008060008060c0878903121562002a5357600080fd5b62002a5e876200276a565b9550602087013562002a708162002784565b945062002a80604088016200276a565b9350606087013562002a928162002784565b9598949750929560808101359460a0909101359350915050565b600067ffffffffffffffff82111562002ac95762002ac962002810565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011262002b0757600080fd5b813562002b1e62002b188262002aac565b6200283f565b81815284602083860101111562002b3457600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002b7257600080fd5b8a3567ffffffffffffffff8082111562002b8b57600080fd5b62002b998e838f0162002891565b9b5062002ba960208e016200276a565b9a5060408d0135995060608d0135985062002bc760808e016200276a565b975062002bd760a08e01620027a7565b965062002be760c08e016200276a565b955062002bf760e08e01620027a7565b94506101008d013593506101208d013591508082111562002c1757600080fd5b5062002c268d828e0162002af5565b9150509295989b9194979a5092959850565b60006020828403121562002c4b57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262002ce7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362002d205762002d2062002c81565b5060010190565b60006020828403121562002d3a57600080fd5b81518015158114620024cb57600080fd5b60005b8381101562002d6857818101518382015260200162002d4e565b838111156200204f5750506000910152565b600082601f83011262002d8c57600080fd5b815162002d9d62002b188262002aac565b81815284602083860101111562002db357600080fd5b62001b1882602083016020870162002d4b565b60006020828403121562002dd957600080fd5b815167ffffffffffffffff81111562002df157600080fd5b62001b188482850162002d7a565b60ff811681146200244b57600080fd5b60006020828403121562002e2257600080fd5b8151620024cb8162002dff565b6000815180845262002e4981602086016020860162002d4b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60608152600062002e90606083018662002e2f565b828103602084015262002ea4818662002e2f565b91505060ff83166040830152949350505050565b600063ffffffff808a16835273ffffffffffffffffffffffffffffffffffffffff808a166020850152818916604085015280881660608501525085608084015260e060a084015262002f0e60e084018662002e2f565b915080841660c08401525098975050505050505050565b60006020828403121562002f3857600080fd5b5051919050565b6000825162002f5381846020870162002d4b565b9190910192915050565b60008060006060848603121562002f7357600080fd5b835167ffffffffffffffff8082111562002f8c57600080fd5b62002f9a8783880162002d7a565b9450602086015191508082111562002fb157600080fd5b5062002fc08682870162002d7a565b925050604084015162002fd38162002dff565b809150509250925092565b60a08152600062002ff360a083018862002e2f565b828103602084015262003007818862002e2f565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b600080858511156200304f57600080fd5b838611156200305d57600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200308657600080fd5b8735620030938162002784565b96506020880135620030a58162002784565b955060408801359450606088013593506080880135620030c58162002dff565b9699959850939692959460a0840135945060c09093013592915050565b600181815b808511156200314157817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003125576200312562002c81565b808516156200313357918102915b93841c9390800290620030e7565b509250929050565b6000826200315a5750600162000560565b81620031695750600062000560565b81600181146200318257600281146200318d57620031ad565b600191505062000560565b60ff841115620031a157620031a162002c81565b50506001821b62000560565b5060208310610133831016604e8410600b8410161715620031d2575081810a62000560565b620031de8383620030e2565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003213576200321362002c81565b029392505050565b6000620024cb838362003149565b6000828210156200323e576200323e62002c81565b500390565b6000821982111562003259576200325962002c81565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b602081526000620024cb602083018462002e2f56fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a264697066735822122068cb524538909c05cc5109b7664a019588dc698f1f570976efb4dd6b6aee818364736f6c634300080f0033", + "bytecode": "0x6080604052600436106200017b5760003560e01c806381b1c17411620000cf578063d02103ca116200007d578063e73758811162000060578063e73758811462000589578063ed6be5c914620005bd578063ff634ed714620005d457600080fd5b8063d02103ca1462000543578063d96a15f7146200057257600080fd5b8063a08e8a0811620000b2578063a08e8a0814620004bf578063b7e6a7d414620004e9578063bab161bf146200050e57600080fd5b806381b1c17414620004535780638624c35c146200049a57600080fd5b80633ae05047116200012d5780633e19704311620001105780633e19704314620003155780634638554914620004095780637b6323c1146200042e57600080fd5b80633ae0504714620002c75780633da8168214620002df57600080fd5b80632dfdf0b511620001625780632dfdf0b514620001e85780632f3a3d5d146200020f578063318aee3d146200023e57600080fd5b80630871e971146200018057806322e95f2c1462000199575b600080fd5b6200019762000191366004620032c4565b620005eb565b005b348015620001a657600080fd5b50620001be620001b836600462003380565b62000bdf565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015620001f557600080fd5b506200020060415481565b604051908152602001620001df565b3480156200021c57600080fd5b50604754620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200024b57600080fd5b50620002956200025d366004620033bc565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201620001df565b348015620002d457600080fd5b506200020062000c82565b348015620002ec57600080fd5b5062000304620002fe366004620034db565b62000d5c565b6040519015158152602001620001df565b3480156200032257600080fd5b50620002006200033436600462003559565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200041657600080fd5b50620001976200042836600462003688565b62000e5c565b3480156200043b57600080fd5b50620001976200044d36600462003688565b62001617565b3480156200046057600080fd5b50620001be620004723660046200376f565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620004a757600080fd5b5062000197620004b936600462003380565b620020c2565b348015620004cc57600080fd5b50620004d6600081565b60405160ff9091168152602001620001df565b348015620004f657600080fd5b50620001be6200050836600462003380565b62002340565b3480156200051b57600080fd5b506042546200052d9063ffffffff1681565b60405163ffffffff9091168152602001620001df565b3480156200055057600080fd5b50604654620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b620001976200058336600462003789565b62002409565b3480156200059657600080fd5b5062000304620005a83660046200376f565b60436020526000908152604090205460ff1681565b348015620005ca57600080fd5b506200052d600081565b348015620005e157600080fd5b50620004d6600181565b60425463ffffffff908116908616036200068c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff891662000748578534146200073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c55450000000000000000000000000000000000606482015260840162000683565b6000915062000a5c565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000849576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562000810573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008369190620037f1565b5060208101518151909450925062000a5a565b84156200085e576200085e8a88888862002656565b6200088273ffffffffffffffffffffffffffffffffffffffff8b1633308a62002a81565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200092e919081019062003890565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200097a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620009c2919081019062003890565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a349190620038c9565b60405160200162000a489392919062003935565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760415460405162000a9e98979695949392919062003972565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000b599062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000b8162000c82565b6040518263ffffffff1660e01b815260040162000ba091815260200190565b600060405180830381600087803b15801562000bbb57600080fd5b505af115801562000bd0573d6000803e3d6000fd5b50505050505050505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6041546000908190815b602081101562000d54578160011660010362000cec576001816020811062000cb85762000cb8620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000d30565b826021826020811062000d035762000d03620039eb565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b62000d3d60028362003a49565b91508062000d4b8162003a85565b91505062000c8c565b509092915050565b60008467ffffffffffffffff8416825b602081101562000e4f578160011660010362000dd95786818151811062000d975762000d97620039eb565b60200260200101518360405160200162000dbb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000e2b565b8287828151811062000def5762000def620039eb565b602002602001015160405160200162000e12929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000e3860028362003a49565b91508062000e468162003a85565b91505062000d6c565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000f04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d4544000000000000000000000000000000000000000000000000000000606482015260840162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000f9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fc3919062003ac0565b60000362001054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000606482015260840162000683565b60425463ffffffff858116911614620010f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000606482015260840162000683565b60425463ffffffff166200126e578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620011da905b8b8b63ffffffff168a62000d5c565b62001268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b620013d8565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200134a905b8b8b63ffffffff168b62000d5c565b620013d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff8516908490620014469089908b90879060240162003ada565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f20000000000000000000000000000000000000000000000000000000017905251620014c9919062003b20565b60006040518083038185875af1925050503d806000811462001508576040519150601f19603f3d011682016040523d82523d6000602084013e6200150d565b606091505b50509050806200159f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c454400000000000000000000000000000000000000000000000000000000606482015260840162000683565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b63ffffffff891660009081526043602052604090205460ff161562001699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d45440000604482015260640162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001732573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001758919062003ac0565b600003620017e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d41544348000000000000000000000000000000000000606482015260840162000683565b60425463ffffffff85811691161462001885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d41544348000000000000000000000000000000606482015260840162000683565b60425463ffffffff16620019b4578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200194690620011cb565b620019ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b62001acf565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062001a67906200133b565b62001acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff851662001c40576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001b62919062003b20565b60006040518083038185875af1925050503d806000811462001ba1576040519150601f19603f3d011682016040523d82523d6000602084013e62001ba6565b606091505b505090508062001c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f4544000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b506200204b565b60425463ffffffff9081169087160362001c7d5762001c7773ffffffffffffffffffffffffffffffffffffffff8616848462002cde565b6200204b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001faa5760475460009062001d689073ffffffffffffffffffffffffffffffffffffffff168462002d36565b905060008060008680602001905181019062001d85919062003b3e565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001dce95949392919062003bbf565b600060405180830381600087803b15801562001de957600080fd5b505af115801562001dfe573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001f989392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062002048565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562002020573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020469190620037f1565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff1615808015620020e35750600054600160ff909116105b80620020ff5750303b158015620020ff575060005460ff166001145b6200218d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840162000683565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620021ec57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556040516200226a906200326c565b604051809103906000f08015801562002287573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055620022d762002e16565b80156200233b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620024019073ffffffffffffffffffffffffffffffffffffffff168262002f5e565b949350505050565b60425463ffffffff90811690841603620024a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c4600000000000000000000000000000000000000000000606482015260840162000683565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620024f39260019263ffffffff9092169133918991899134918a919062003972565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620025d69062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d620025fe62000c82565b6040518263ffffffff1660e01b81526004016200261d91815260200190565b600060405180830381600087803b1580156200263857600080fd5b505af11580156200264d573d6000803e3d6000fd5b50505050505050565b60006200269983838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002fe292505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf000000000000000000000000000000000000000000000000000000001462002748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000683565b60008080808080806200275f896004818d62003c1f565b8101906200276e919062003c4b565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462002839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000683565b73ffffffffffffffffffffffffffffffffffffffff86163014620028e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000683565b8a851462002971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d4154434800000000000000000000000000000000000000606482015260840162000683565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002a2c919062003b20565b6000604051808303816000865af19150503d806000811462002a6b576040519150601f19603f3d011682016040523d82523d6000602084013e62002a70565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905262002b5f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002fe9565b50505050565b80600162002b766020600262003ddf565b62002b82919062003ded565b6041541062002c14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c00000000000000000000000000000000000000000000606482015260840162000683565b60016041600082825462002c29919062003e07565b909155505060415460005b602081101562002cd3578160011660010362002c6957826001826020811062002c615762002c61620039eb565b015550505050565b6001816020811062002c7f5762002c7f620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002cbc919062003a49565b91508062002cca8162003a85565b91505062002c34565b506200233b62003e22565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526200233b9084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002adc565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000c7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640162000683565b600054610100900460ff1662002eaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000683565b60005b62002ec06001602062003ded565b81101562002f5b576021816020811062002ede5762002ede620039eb565b01546021826020811062002ef65762002ef6620039eb565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002f31919062003e07565b6020811062002f445762002f44620039eb565b01558062002f528162003a85565b91505062002eb2565b50565b600062002fdb8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b60006200304d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620030fc9092919063ffffffff16565b8051909150156200233b57808060200190518101906200306e9190620037f1565b6200233b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000683565b60606200240184846000858573ffffffffffffffffffffffffffffffffffffffff85163b62003188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000683565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620031b3919062003b20565b60006040518083038185875af1925050503d8060008114620031f2576040519150601f19603f3d011682016040523d82523d6000602084013e620031f7565b606091505b50915091506200320982828662003214565b979650505050505050565b606083156200322557508162002fdb565b825115620032365782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000683919062003e51565b6118298062003e6783390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462002f5b57600080fd5b8035620032aa816200327a565b919050565b803563ffffffff81168114620032aa57600080fd5b60008060008060008060a08789031215620032de57600080fd5b8635620032eb816200327a565b9550620032fb60208801620032af565b945060408701356200330d816200327a565b935060608701359250608087013567ffffffffffffffff808211156200333257600080fd5b818901915089601f8301126200334757600080fd5b8135818111156200335757600080fd5b8a60208285010111156200336a57600080fd5b6020830194508093505050509295509295509295565b600080604083850312156200339457600080fd5b6200339f83620032af565b91506020830135620033b1816200327a565b809150509250929050565b600060208284031215620033cf57600080fd5b813562002fdb816200327a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620034555762003455620033dc565b604052919050565b600082601f8301126200346f57600080fd5b8135602067ffffffffffffffff8211156200348e576200348e620033dc565b8160051b6200349f8282016200340b565b9283528481018201928281019087851115620034ba57600080fd5b83870192505b848310156200320957823582529183019190830190620034c0565b60008060008060808587031215620034f257600080fd5b84359350602085013567ffffffffffffffff808211156200351257600080fd5b62003520888389016200345d565b94506040870135915080821682146200353857600080fd5b509396929550929360600135925050565b60ff8116811462002f5b57600080fd5b600080600080600080600060e0888a0312156200357557600080fd5b8735620035828162003549565b96506200359260208901620032af565b95506040880135620035a4816200327a565b9450620035b460608901620032af565b93506080880135620035c6816200327a565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620036005762003600620033dc565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126200363e57600080fd5b8135620036556200364f82620035e3565b6200340b565b8181528460208386010111156200366b57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620036a957600080fd5b8a3567ffffffffffffffff80821115620036c257600080fd5b620036d08e838f016200345d565b9b50620036e060208e01620032af565b9a5060408d0135995060608d01359850620036fe60808e01620032af565b97506200370e60a08e016200329d565b96506200371e60c08e01620032af565b95506200372e60e08e016200329d565b94506101008d013593506101208d01359150808211156200374e57600080fd5b506200375d8d828e016200362c565b9150509295989b9194979a5092959850565b6000602082840312156200378257600080fd5b5035919050565b6000806000606084860312156200379f57600080fd5b620037aa84620032af565b92506020840135620037bc816200327a565b9150604084013567ffffffffffffffff811115620037d957600080fd5b620037e7868287016200362c565b9150509250925092565b6000602082840312156200380457600080fd5b8151801515811462002fdb57600080fd5b60005b838110156200383257818101518382015260200162003818565b8381111562002b5f5750506000910152565b600082601f8301126200385657600080fd5b8151620038676200364f82620035e3565b8181528460208386010111156200387d57600080fd5b6200240182602083016020870162003815565b600060208284031215620038a357600080fd5b815167ffffffffffffffff811115620038bb57600080fd5b620024018482850162003844565b600060208284031215620038dc57600080fd5b815162002fdb8162003549565b600081518084526200390381602086016020860162003815565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6060815260006200394a6060830186620038e9565b82810360208401526200395e8186620038e9565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620039d282850187620038e9565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003a80577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003ab95762003ab962003a1a565b5060010190565b60006020828403121562003ad357600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003b176060830184620038e9565b95945050505050565b6000825162003b3481846020870162003815565b9190910192915050565b60008060006060848603121562003b5457600080fd5b835167ffffffffffffffff8082111562003b6d57600080fd5b62003b7b8783880162003844565b9450602086015191508082111562003b9257600080fd5b5062003ba18682870162003844565b925050604084015162003bb48162003549565b809150509250925092565b60a08152600062003bd460a0830188620038e9565b828103602084015262003be88188620038e9565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000808585111562003c3057600080fd5b8386111562003c3e57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003c6757600080fd5b873562003c74816200327a565b9650602088013562003c86816200327a565b955060408801359450606088013593506080880135620035c68162003549565b600181815b8085111562003d0557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003ce95762003ce962003a1a565b8085161562003cf757918102915b93841c939080029062003cab565b509250929050565b60008262003d1e5750600162000c7c565b8162003d2d5750600062000c7c565b816001811462003d46576002811462003d515762003d71565b600191505062000c7c565b60ff84111562003d655762003d6562003a1a565b50506001821b62000c7c565b5060208310610133831016604e8410600b841016171562003d96575081810a62000c7c565b62003da2838362003ca6565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003dd75762003dd762003a1a565b029392505050565b600062002fdb838362003d0d565b60008282101562003e025762003e0262003a1a565b500390565b6000821982111562003e1d5762003e1d62003a1a565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60208152600062002fdb6020830184620038e956fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a26469706673582212200f33d24b40d1e879f02496512d8e703a09704c5edf7d149259a9c3cf2b64250664736f6c634300080f0033", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", "0x0000000000000000000000000000000000000000000000000000000000000042": "0x01", diff --git a/docker/scripts/genesis_gen_docker.json b/docker/scripts/genesis_gen_docker.json new file mode 100644 index 000000000..479a1d049 --- /dev/null +++ b/docker/scripts/genesis_gen_docker.json @@ -0,0 +1,70 @@ + +{ + "defaultChainId": 1000, + "sequencerAddress": "0xC949254d682D8c9ad5682521675b8F43b102aec4", + "genesis": [ + { + "address": "0x9D98DeAbC42dd696Deb9e40b4f1CAB7dDBF55988", + "pvtKey": "0x00", + "balance": "100000000000000000000000", + "nonce": "0" + }, + { + "address": "0xC949254d682D8c9ad5682521675b8F43b102aec4", + "pvtKey": "0xdfd01798f92667dbf91df722434e8fbe96af0211d4d1b82bbbbc8f1def7a814f", + "balance": "0", + "nonce": "0" + }, + { + "balance": "100000000000000000000000", + "nonce": "0", + "address": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "pvtKey": "0x00" + } + ], + "txs": [ + { + "from": "0xC949254d682D8c9ad5682521675b8F43b102aec4", + "nonce": 0, + "value": "0", + "gasLimit": 10000000, + "gasPrice": "0", + "chainId": 1000, + "paramsDeploy": { + "types": [ + "address" + ], + "values": [ + "0x9D98DeAbC42dd696Deb9e40b4f1CAB7dDBF55988" + ] + }, + "contractName": "GlobalExitRootManagerL2", + "reason": "" + }, + { + "from": "0xC949254d682D8c9ad5682521675b8F43b102aec4", + "nonce": 1, + "value": "0", + "gasLimit": 10000000, + "gasPrice": "0", + "chainId": 1000, + "contractName": "Bridge" + }, + { + "from": "0xC949254d682D8c9ad5682521675b8F43b102aec4", + "to": "0x9D98DeAbC42dd696Deb9e40b4f1CAB7dDBF55988", + "nonce": 2, + "value": "0", + "gasLimit": 10000000, + "gasPrice": "0", + "chainId": 1000, + "function": "initialize", + "paramsFunction": [ + 1, + "0xAE4bB80bE56B819606589DE61d5ec3b522EEB032" + ], + "contractName": "Bridge" + } + ], + "timestamp": 1944498031 +} diff --git a/package.json b/package.json index 52721775c..2c3180527 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "homepage": "https://github.com/0xPolygonHermez/contracts-zkEVM#readme", "license": "pending", "dependencies": { - "@0xpolygonhermez/zkevm-commonjs": "github:0xPolygonHermez/zkevm-commonjs#feature/bridgeAribitraryData", + "@0xpolygonhermez/zkevm-commonjs": "github:0xPolygonHermez/zkevm-commonjs#recursive", "@nomiclabs/hardhat-ethers": "^2.0.2", "@nomiclabs/hardhat-etherscan": "^3.1.0", "@nomiclabs/hardhat-waffle": "^2.0.3", diff --git a/test/contracts/snark_stark_input.test.js b/test/contracts/snark_stark_input.test.js index b30ffae19..72ba7f1b6 100644 --- a/test/contracts/snark_stark_input.test.js +++ b/test/contracts/snark_stark_input.test.js @@ -72,7 +72,7 @@ describe('Proof of efficiency snark stark input test', () => { const oldNumBatch = 0; const newNumBatch = 1; const aggregatorAddress = '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266'; - const expectedSnarkInputHash = '17495784446398463565336850903556670302680818979009718931527636126247722947873'; + const expectedSnarkInputHash = '15588448576060468525242870965361192827910782996030023758348255084502752104347'; // set smart contract with correct parameters await proofOfEfficiencyContract.setStateRoot(oldStateRoot); From ac9b40a40d733d2e4fb574b9b9e3d0bbae5b4b29 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Wed, 2 Nov 2022 14:06:56 +0100 Subject: [PATCH 11/71] PR fixes --- compiled-contracts/Bridge.json | 6 +++--- compiled-contracts/BridgeMock.json | 6 +++--- contracts/Bridge.sol | 10 +++++----- contracts/interfaces/IBridgeMessageReceiver.sol | 2 +- contracts/lib/DepositContract.sol | 10 +++++----- docs/Bridge.md | 10 +++++----- docs/lib/DepositContract.md | 8 ++++---- 7 files changed, 26 insertions(+), 26 deletions(-) diff --git a/compiled-contracts/Bridge.json b/compiled-contracts/Bridge.json index 46de73d4c..a02873a31 100644 --- a/compiled-contracts/Bridge.json +++ b/compiled-contracts/Bridge.json @@ -403,7 +403,7 @@ }, { "internalType": "address", - "name": "originTokenAddress", + "name": "originAddress", "type": "address" }, { @@ -621,8 +621,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506156c5806100206000396000f3fe6080604052600436106200017b5760003560e01c806381b1c17411620000cf578063d02103ca116200007d578063e73758811162000060578063e73758811462000589578063ed6be5c914620005bd578063ff634ed714620005d457600080fd5b8063d02103ca1462000543578063d96a15f7146200057257600080fd5b8063a08e8a0811620000b2578063a08e8a0814620004bf578063b7e6a7d414620004e9578063bab161bf146200050e57600080fd5b806381b1c17414620004535780638624c35c146200049a57600080fd5b80633ae05047116200012d5780633e19704311620001105780633e19704314620003155780634638554914620004095780637b6323c1146200042e57600080fd5b80633ae0504714620002c75780633da8168214620002df57600080fd5b80632dfdf0b511620001625780632dfdf0b514620001e85780632f3a3d5d146200020f578063318aee3d146200023e57600080fd5b80630871e971146200018057806322e95f2c1462000199575b600080fd5b6200019762000191366004620032c4565b620005eb565b005b348015620001a657600080fd5b50620001be620001b836600462003380565b62000bdf565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015620001f557600080fd5b506200020060415481565b604051908152602001620001df565b3480156200021c57600080fd5b50604754620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200024b57600080fd5b50620002956200025d366004620033bc565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201620001df565b348015620002d457600080fd5b506200020062000c82565b348015620002ec57600080fd5b5062000304620002fe366004620034db565b62000d5c565b6040519015158152602001620001df565b3480156200032257600080fd5b50620002006200033436600462003559565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200041657600080fd5b50620001976200042836600462003688565b62000e5c565b3480156200043b57600080fd5b50620001976200044d36600462003688565b62001617565b3480156200046057600080fd5b50620001be620004723660046200376f565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620004a757600080fd5b5062000197620004b936600462003380565b620020c2565b348015620004cc57600080fd5b50620004d6600081565b60405160ff9091168152602001620001df565b348015620004f657600080fd5b50620001be6200050836600462003380565b62002340565b3480156200051b57600080fd5b506042546200052d9063ffffffff1681565b60405163ffffffff9091168152602001620001df565b3480156200055057600080fd5b50604654620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b620001976200058336600462003789565b62002409565b3480156200059657600080fd5b5062000304620005a83660046200376f565b60436020526000908152604090205460ff1681565b348015620005ca57600080fd5b506200052d600081565b348015620005e157600080fd5b50620004d6600181565b60425463ffffffff908116908616036200068c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff891662000748578534146200073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c55450000000000000000000000000000000000606482015260840162000683565b6000915062000a5c565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000849576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562000810573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008369190620037f1565b5060208101518151909450925062000a5a565b84156200085e576200085e8a88888862002656565b6200088273ffffffffffffffffffffffffffffffffffffffff8b1633308a62002a81565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200092e919081019062003890565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200097a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620009c2919081019062003890565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a349190620038c9565b60405160200162000a489392919062003935565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760415460405162000a9e98979695949392919062003972565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000b599062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000b8162000c82565b6040518263ffffffff1660e01b815260040162000ba091815260200190565b600060405180830381600087803b15801562000bbb57600080fd5b505af115801562000bd0573d6000803e3d6000fd5b50505050505050505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6041546000908190815b602081101562000d54578160011660010362000cec576001816020811062000cb85762000cb8620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000d30565b826021826020811062000d035762000d03620039eb565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b62000d3d60028362003a49565b91508062000d4b8162003a85565b91505062000c8c565b509092915050565b60008467ffffffffffffffff8416825b602081101562000e4f578160011660010362000dd95786818151811062000d975762000d97620039eb565b60200260200101518360405160200162000dbb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000e2b565b8287828151811062000def5762000def620039eb565b602002602001015160405160200162000e12929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000e3860028362003a49565b91508062000e468162003a85565b91505062000d6c565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000f04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d4544000000000000000000000000000000000000000000000000000000606482015260840162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000f9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fc3919062003ac0565b60000362001054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000606482015260840162000683565b60425463ffffffff858116911614620010f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000606482015260840162000683565b60425463ffffffff166200126e578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620011da905b8b8b63ffffffff168a62000d5c565b62001268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b620013d8565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200134a905b8b8b63ffffffff168b62000d5c565b620013d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff8516908490620014469089908b90879060240162003ada565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f20000000000000000000000000000000000000000000000000000000017905251620014c9919062003b20565b60006040518083038185875af1925050503d806000811462001508576040519150601f19603f3d011682016040523d82523d6000602084013e6200150d565b606091505b50509050806200159f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c454400000000000000000000000000000000000000000000000000000000606482015260840162000683565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b63ffffffff891660009081526043602052604090205460ff161562001699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d45440000604482015260640162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001732573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001758919062003ac0565b600003620017e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d41544348000000000000000000000000000000000000606482015260840162000683565b60425463ffffffff85811691161462001885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d41544348000000000000000000000000000000606482015260840162000683565b60425463ffffffff16620019b4578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200194690620011cb565b620019ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b62001acf565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062001a67906200133b565b62001acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff851662001c40576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001b62919062003b20565b60006040518083038185875af1925050503d806000811462001ba1576040519150601f19603f3d011682016040523d82523d6000602084013e62001ba6565b606091505b505090508062001c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f4544000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b506200204b565b60425463ffffffff9081169087160362001c7d5762001c7773ffffffffffffffffffffffffffffffffffffffff8616848462002cde565b6200204b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001faa5760475460009062001d689073ffffffffffffffffffffffffffffffffffffffff168462002d36565b905060008060008680602001905181019062001d85919062003b3e565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001dce95949392919062003bbf565b600060405180830381600087803b15801562001de957600080fd5b505af115801562001dfe573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001f989392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062002048565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562002020573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020469190620037f1565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff1615808015620020e35750600054600160ff909116105b80620020ff5750303b158015620020ff575060005460ff166001145b6200218d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840162000683565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620021ec57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556040516200226a906200326c565b604051809103906000f08015801562002287573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055620022d762002e16565b80156200233b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620024019073ffffffffffffffffffffffffffffffffffffffff168262002f5e565b949350505050565b60425463ffffffff90811690841603620024a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c4600000000000000000000000000000000000000000000606482015260840162000683565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620024f39260019263ffffffff9092169133918991899134918a919062003972565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620025d69062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d620025fe62000c82565b6040518263ffffffff1660e01b81526004016200261d91815260200190565b600060405180830381600087803b1580156200263857600080fd5b505af11580156200264d573d6000803e3d6000fd5b50505050505050565b60006200269983838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002fe292505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf000000000000000000000000000000000000000000000000000000001462002748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000683565b60008080808080806200275f896004818d62003c1f565b8101906200276e919062003c4b565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462002839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000683565b73ffffffffffffffffffffffffffffffffffffffff86163014620028e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000683565b8a851462002971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d4154434800000000000000000000000000000000000000606482015260840162000683565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002a2c919062003b20565b6000604051808303816000865af19150503d806000811462002a6b576040519150601f19603f3d011682016040523d82523d6000602084013e62002a70565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905262002b5f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002fe9565b50505050565b80600162002b766020600262003ddf565b62002b82919062003ded565b6041541062002c14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c00000000000000000000000000000000000000000000606482015260840162000683565b60016041600082825462002c29919062003e07565b909155505060415460005b602081101562002cd3578160011660010362002c6957826001826020811062002c615762002c61620039eb565b015550505050565b6001816020811062002c7f5762002c7f620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002cbc919062003a49565b91508062002cca8162003a85565b91505062002c34565b506200233b62003e22565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526200233b9084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002adc565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000c7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640162000683565b600054610100900460ff1662002eaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000683565b60005b62002ec06001602062003ded565b81101562002f5b576021816020811062002ede5762002ede620039eb565b01546021826020811062002ef65762002ef6620039eb565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002f31919062003e07565b6020811062002f445762002f44620039eb565b01558062002f528162003a85565b91505062002eb2565b50565b600062002fdb8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b60006200304d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620030fc9092919063ffffffff16565b8051909150156200233b57808060200190518101906200306e9190620037f1565b6200233b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000683565b60606200240184846000858573ffffffffffffffffffffffffffffffffffffffff85163b62003188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000683565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620031b3919062003b20565b60006040518083038185875af1925050503d8060008114620031f2576040519150601f19603f3d011682016040523d82523d6000602084013e620031f7565b606091505b50915091506200320982828662003214565b979650505050505050565b606083156200322557508162002fdb565b825115620032365782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000683919062003e51565b6118298062003e6783390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462002f5b57600080fd5b8035620032aa816200327a565b919050565b803563ffffffff81168114620032aa57600080fd5b60008060008060008060a08789031215620032de57600080fd5b8635620032eb816200327a565b9550620032fb60208801620032af565b945060408701356200330d816200327a565b935060608701359250608087013567ffffffffffffffff808211156200333257600080fd5b818901915089601f8301126200334757600080fd5b8135818111156200335757600080fd5b8a60208285010111156200336a57600080fd5b6020830194508093505050509295509295509295565b600080604083850312156200339457600080fd5b6200339f83620032af565b91506020830135620033b1816200327a565b809150509250929050565b600060208284031215620033cf57600080fd5b813562002fdb816200327a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620034555762003455620033dc565b604052919050565b600082601f8301126200346f57600080fd5b8135602067ffffffffffffffff8211156200348e576200348e620033dc565b8160051b6200349f8282016200340b565b9283528481018201928281019087851115620034ba57600080fd5b83870192505b848310156200320957823582529183019190830190620034c0565b60008060008060808587031215620034f257600080fd5b84359350602085013567ffffffffffffffff808211156200351257600080fd5b62003520888389016200345d565b94506040870135915080821682146200353857600080fd5b509396929550929360600135925050565b60ff8116811462002f5b57600080fd5b600080600080600080600060e0888a0312156200357557600080fd5b8735620035828162003549565b96506200359260208901620032af565b95506040880135620035a4816200327a565b9450620035b460608901620032af565b93506080880135620035c6816200327a565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620036005762003600620033dc565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126200363e57600080fd5b8135620036556200364f82620035e3565b6200340b565b8181528460208386010111156200366b57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620036a957600080fd5b8a3567ffffffffffffffff80821115620036c257600080fd5b620036d08e838f016200345d565b9b50620036e060208e01620032af565b9a5060408d0135995060608d01359850620036fe60808e01620032af565b97506200370e60a08e016200329d565b96506200371e60c08e01620032af565b95506200372e60e08e016200329d565b94506101008d013593506101208d01359150808211156200374e57600080fd5b506200375d8d828e016200362c565b9150509295989b9194979a5092959850565b6000602082840312156200378257600080fd5b5035919050565b6000806000606084860312156200379f57600080fd5b620037aa84620032af565b92506020840135620037bc816200327a565b9150604084013567ffffffffffffffff811115620037d957600080fd5b620037e7868287016200362c565b9150509250925092565b6000602082840312156200380457600080fd5b8151801515811462002fdb57600080fd5b60005b838110156200383257818101518382015260200162003818565b8381111562002b5f5750506000910152565b600082601f8301126200385657600080fd5b8151620038676200364f82620035e3565b8181528460208386010111156200387d57600080fd5b6200240182602083016020870162003815565b600060208284031215620038a357600080fd5b815167ffffffffffffffff811115620038bb57600080fd5b620024018482850162003844565b600060208284031215620038dc57600080fd5b815162002fdb8162003549565b600081518084526200390381602086016020860162003815565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6060815260006200394a6060830186620038e9565b82810360208401526200395e8186620038e9565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620039d282850187620038e9565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003a80577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003ab95762003ab962003a1a565b5060010190565b60006020828403121562003ad357600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003b176060830184620038e9565b95945050505050565b6000825162003b3481846020870162003815565b9190910192915050565b60008060006060848603121562003b5457600080fd5b835167ffffffffffffffff8082111562003b6d57600080fd5b62003b7b8783880162003844565b9450602086015191508082111562003b9257600080fd5b5062003ba18682870162003844565b925050604084015162003bb48162003549565b809150509250925092565b60a08152600062003bd460a0830188620038e9565b828103602084015262003be88188620038e9565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000808585111562003c3057600080fd5b8386111562003c3e57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003c6757600080fd5b873562003c74816200327a565b9650602088013562003c86816200327a565b955060408801359450606088013593506080880135620035c68162003549565b600181815b8085111562003d0557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003ce95762003ce962003a1a565b8085161562003cf757918102915b93841c939080029062003cab565b509250929050565b60008262003d1e5750600162000c7c565b8162003d2d5750600062000c7c565b816001811462003d46576002811462003d515762003d71565b600191505062000c7c565b60ff84111562003d655762003d6562003a1a565b50506001821b62000c7c565b5060208310610133831016604e8410600b841016171562003d96575081810a62000c7c565b62003da2838362003ca6565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003dd75762003dd762003a1a565b029392505050565b600062002fdb838362003d0d565b60008282101562003e025762003e0262003a1a565b500390565b6000821982111562003e1d5762003e1d62003a1a565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60208152600062002fdb6020830184620038e956fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a26469706673582212200f33d24b40d1e879f02496512d8e703a09704c5edf7d149259a9c3cf2b64250664736f6c634300080f0033", - "deployedBytecode": "0x6080604052600436106200017b5760003560e01c806381b1c17411620000cf578063d02103ca116200007d578063e73758811162000060578063e73758811462000589578063ed6be5c914620005bd578063ff634ed714620005d457600080fd5b8063d02103ca1462000543578063d96a15f7146200057257600080fd5b8063a08e8a0811620000b2578063a08e8a0814620004bf578063b7e6a7d414620004e9578063bab161bf146200050e57600080fd5b806381b1c17414620004535780638624c35c146200049a57600080fd5b80633ae05047116200012d5780633e19704311620001105780633e19704314620003155780634638554914620004095780637b6323c1146200042e57600080fd5b80633ae0504714620002c75780633da8168214620002df57600080fd5b80632dfdf0b511620001625780632dfdf0b514620001e85780632f3a3d5d146200020f578063318aee3d146200023e57600080fd5b80630871e971146200018057806322e95f2c1462000199575b600080fd5b6200019762000191366004620032c4565b620005eb565b005b348015620001a657600080fd5b50620001be620001b836600462003380565b62000bdf565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015620001f557600080fd5b506200020060415481565b604051908152602001620001df565b3480156200021c57600080fd5b50604754620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200024b57600080fd5b50620002956200025d366004620033bc565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201620001df565b348015620002d457600080fd5b506200020062000c82565b348015620002ec57600080fd5b5062000304620002fe366004620034db565b62000d5c565b6040519015158152602001620001df565b3480156200032257600080fd5b50620002006200033436600462003559565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200041657600080fd5b50620001976200042836600462003688565b62000e5c565b3480156200043b57600080fd5b50620001976200044d36600462003688565b62001617565b3480156200046057600080fd5b50620001be620004723660046200376f565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620004a757600080fd5b5062000197620004b936600462003380565b620020c2565b348015620004cc57600080fd5b50620004d6600081565b60405160ff9091168152602001620001df565b348015620004f657600080fd5b50620001be6200050836600462003380565b62002340565b3480156200051b57600080fd5b506042546200052d9063ffffffff1681565b60405163ffffffff9091168152602001620001df565b3480156200055057600080fd5b50604654620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b620001976200058336600462003789565b62002409565b3480156200059657600080fd5b5062000304620005a83660046200376f565b60436020526000908152604090205460ff1681565b348015620005ca57600080fd5b506200052d600081565b348015620005e157600080fd5b50620004d6600181565b60425463ffffffff908116908616036200068c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff891662000748578534146200073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c55450000000000000000000000000000000000606482015260840162000683565b6000915062000a5c565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000849576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562000810573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008369190620037f1565b5060208101518151909450925062000a5a565b84156200085e576200085e8a88888862002656565b6200088273ffffffffffffffffffffffffffffffffffffffff8b1633308a62002a81565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200092e919081019062003890565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200097a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620009c2919081019062003890565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a349190620038c9565b60405160200162000a489392919062003935565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760415460405162000a9e98979695949392919062003972565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000b599062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000b8162000c82565b6040518263ffffffff1660e01b815260040162000ba091815260200190565b600060405180830381600087803b15801562000bbb57600080fd5b505af115801562000bd0573d6000803e3d6000fd5b50505050505050505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6041546000908190815b602081101562000d54578160011660010362000cec576001816020811062000cb85762000cb8620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000d30565b826021826020811062000d035762000d03620039eb565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b62000d3d60028362003a49565b91508062000d4b8162003a85565b91505062000c8c565b509092915050565b60008467ffffffffffffffff8416825b602081101562000e4f578160011660010362000dd95786818151811062000d975762000d97620039eb565b60200260200101518360405160200162000dbb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000e2b565b8287828151811062000def5762000def620039eb565b602002602001015160405160200162000e12929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000e3860028362003a49565b91508062000e468162003a85565b91505062000d6c565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000f04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d4544000000000000000000000000000000000000000000000000000000606482015260840162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000f9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fc3919062003ac0565b60000362001054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000606482015260840162000683565b60425463ffffffff858116911614620010f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000606482015260840162000683565b60425463ffffffff166200126e578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620011da905b8b8b63ffffffff168a62000d5c565b62001268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b620013d8565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200134a905b8b8b63ffffffff168b62000d5c565b620013d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff8516908490620014469089908b90879060240162003ada565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f20000000000000000000000000000000000000000000000000000000017905251620014c9919062003b20565b60006040518083038185875af1925050503d806000811462001508576040519150601f19603f3d011682016040523d82523d6000602084013e6200150d565b606091505b50509050806200159f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c454400000000000000000000000000000000000000000000000000000000606482015260840162000683565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b63ffffffff891660009081526043602052604090205460ff161562001699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d45440000604482015260640162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001732573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001758919062003ac0565b600003620017e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d41544348000000000000000000000000000000000000606482015260840162000683565b60425463ffffffff85811691161462001885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d41544348000000000000000000000000000000606482015260840162000683565b60425463ffffffff16620019b4578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200194690620011cb565b620019ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b62001acf565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062001a67906200133b565b62001acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff851662001c40576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001b62919062003b20565b60006040518083038185875af1925050503d806000811462001ba1576040519150601f19603f3d011682016040523d82523d6000602084013e62001ba6565b606091505b505090508062001c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f4544000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b506200204b565b60425463ffffffff9081169087160362001c7d5762001c7773ffffffffffffffffffffffffffffffffffffffff8616848462002cde565b6200204b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001faa5760475460009062001d689073ffffffffffffffffffffffffffffffffffffffff168462002d36565b905060008060008680602001905181019062001d85919062003b3e565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001dce95949392919062003bbf565b600060405180830381600087803b15801562001de957600080fd5b505af115801562001dfe573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001f989392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062002048565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562002020573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020469190620037f1565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff1615808015620020e35750600054600160ff909116105b80620020ff5750303b158015620020ff575060005460ff166001145b6200218d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840162000683565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620021ec57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556040516200226a906200326c565b604051809103906000f08015801562002287573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055620022d762002e16565b80156200233b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620024019073ffffffffffffffffffffffffffffffffffffffff168262002f5e565b949350505050565b60425463ffffffff90811690841603620024a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c4600000000000000000000000000000000000000000000606482015260840162000683565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620024f39260019263ffffffff9092169133918991899134918a919062003972565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620025d69062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d620025fe62000c82565b6040518263ffffffff1660e01b81526004016200261d91815260200190565b600060405180830381600087803b1580156200263857600080fd5b505af11580156200264d573d6000803e3d6000fd5b50505050505050565b60006200269983838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002fe292505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf000000000000000000000000000000000000000000000000000000001462002748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000683565b60008080808080806200275f896004818d62003c1f565b8101906200276e919062003c4b565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462002839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000683565b73ffffffffffffffffffffffffffffffffffffffff86163014620028e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000683565b8a851462002971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d4154434800000000000000000000000000000000000000606482015260840162000683565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002a2c919062003b20565b6000604051808303816000865af19150503d806000811462002a6b576040519150601f19603f3d011682016040523d82523d6000602084013e62002a70565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905262002b5f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002fe9565b50505050565b80600162002b766020600262003ddf565b62002b82919062003ded565b6041541062002c14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c00000000000000000000000000000000000000000000606482015260840162000683565b60016041600082825462002c29919062003e07565b909155505060415460005b602081101562002cd3578160011660010362002c6957826001826020811062002c615762002c61620039eb565b015550505050565b6001816020811062002c7f5762002c7f620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002cbc919062003a49565b91508062002cca8162003a85565b91505062002c34565b506200233b62003e22565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526200233b9084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002adc565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000c7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640162000683565b600054610100900460ff1662002eaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000683565b60005b62002ec06001602062003ded565b81101562002f5b576021816020811062002ede5762002ede620039eb565b01546021826020811062002ef65762002ef6620039eb565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002f31919062003e07565b6020811062002f445762002f44620039eb565b01558062002f528162003a85565b91505062002eb2565b50565b600062002fdb8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b60006200304d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620030fc9092919063ffffffff16565b8051909150156200233b57808060200190518101906200306e9190620037f1565b6200233b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000683565b60606200240184846000858573ffffffffffffffffffffffffffffffffffffffff85163b62003188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000683565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620031b3919062003b20565b60006040518083038185875af1925050503d8060008114620031f2576040519150601f19603f3d011682016040523d82523d6000602084013e620031f7565b606091505b50915091506200320982828662003214565b979650505050505050565b606083156200322557508162002fdb565b825115620032365782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000683919062003e51565b6118298062003e6783390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462002f5b57600080fd5b8035620032aa816200327a565b919050565b803563ffffffff81168114620032aa57600080fd5b60008060008060008060a08789031215620032de57600080fd5b8635620032eb816200327a565b9550620032fb60208801620032af565b945060408701356200330d816200327a565b935060608701359250608087013567ffffffffffffffff808211156200333257600080fd5b818901915089601f8301126200334757600080fd5b8135818111156200335757600080fd5b8a60208285010111156200336a57600080fd5b6020830194508093505050509295509295509295565b600080604083850312156200339457600080fd5b6200339f83620032af565b91506020830135620033b1816200327a565b809150509250929050565b600060208284031215620033cf57600080fd5b813562002fdb816200327a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620034555762003455620033dc565b604052919050565b600082601f8301126200346f57600080fd5b8135602067ffffffffffffffff8211156200348e576200348e620033dc565b8160051b6200349f8282016200340b565b9283528481018201928281019087851115620034ba57600080fd5b83870192505b848310156200320957823582529183019190830190620034c0565b60008060008060808587031215620034f257600080fd5b84359350602085013567ffffffffffffffff808211156200351257600080fd5b62003520888389016200345d565b94506040870135915080821682146200353857600080fd5b509396929550929360600135925050565b60ff8116811462002f5b57600080fd5b600080600080600080600060e0888a0312156200357557600080fd5b8735620035828162003549565b96506200359260208901620032af565b95506040880135620035a4816200327a565b9450620035b460608901620032af565b93506080880135620035c6816200327a565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620036005762003600620033dc565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126200363e57600080fd5b8135620036556200364f82620035e3565b6200340b565b8181528460208386010111156200366b57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620036a957600080fd5b8a3567ffffffffffffffff80821115620036c257600080fd5b620036d08e838f016200345d565b9b50620036e060208e01620032af565b9a5060408d0135995060608d01359850620036fe60808e01620032af565b97506200370e60a08e016200329d565b96506200371e60c08e01620032af565b95506200372e60e08e016200329d565b94506101008d013593506101208d01359150808211156200374e57600080fd5b506200375d8d828e016200362c565b9150509295989b9194979a5092959850565b6000602082840312156200378257600080fd5b5035919050565b6000806000606084860312156200379f57600080fd5b620037aa84620032af565b92506020840135620037bc816200327a565b9150604084013567ffffffffffffffff811115620037d957600080fd5b620037e7868287016200362c565b9150509250925092565b6000602082840312156200380457600080fd5b8151801515811462002fdb57600080fd5b60005b838110156200383257818101518382015260200162003818565b8381111562002b5f5750506000910152565b600082601f8301126200385657600080fd5b8151620038676200364f82620035e3565b8181528460208386010111156200387d57600080fd5b6200240182602083016020870162003815565b600060208284031215620038a357600080fd5b815167ffffffffffffffff811115620038bb57600080fd5b620024018482850162003844565b600060208284031215620038dc57600080fd5b815162002fdb8162003549565b600081518084526200390381602086016020860162003815565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6060815260006200394a6060830186620038e9565b82810360208401526200395e8186620038e9565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620039d282850187620038e9565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003a80577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003ab95762003ab962003a1a565b5060010190565b60006020828403121562003ad357600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003b176060830184620038e9565b95945050505050565b6000825162003b3481846020870162003815565b9190910192915050565b60008060006060848603121562003b5457600080fd5b835167ffffffffffffffff8082111562003b6d57600080fd5b62003b7b8783880162003844565b9450602086015191508082111562003b9257600080fd5b5062003ba18682870162003844565b925050604084015162003bb48162003549565b809150509250925092565b60a08152600062003bd460a0830188620038e9565b828103602084015262003be88188620038e9565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000808585111562003c3057600080fd5b8386111562003c3e57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003c6757600080fd5b873562003c74816200327a565b9650602088013562003c86816200327a565b955060408801359450606088013593506080880135620035c68162003549565b600181815b8085111562003d0557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003ce95762003ce962003a1a565b8085161562003cf757918102915b93841c939080029062003cab565b509250929050565b60008262003d1e5750600162000c7c565b8162003d2d5750600062000c7c565b816001811462003d46576002811462003d515762003d71565b600191505062000c7c565b60ff84111562003d655762003d6562003a1a565b50506001821b62000c7c565b5060208310610133831016604e8410600b841016171562003d96575081810a62000c7c565b62003da2838362003ca6565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003dd75762003dd762003a1a565b029392505050565b600062002fdb838362003d0d565b60008282101562003e025762003e0262003a1a565b500390565b6000821982111562003e1d5762003e1d62003a1a565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60208152600062002fdb6020830184620038e956fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a26469706673582212200f33d24b40d1e879f02496512d8e703a09704c5edf7d149259a9c3cf2b64250664736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506156c5806100206000396000f3fe6080604052600436106200017b5760003560e01c806381b1c17411620000cf578063d02103ca116200007d578063e73758811162000060578063e73758811462000589578063ed6be5c914620005bd578063ff634ed714620005d457600080fd5b8063d02103ca1462000543578063d96a15f7146200057257600080fd5b8063a08e8a0811620000b2578063a08e8a0814620004bf578063b7e6a7d414620004e9578063bab161bf146200050e57600080fd5b806381b1c17414620004535780638624c35c146200049a57600080fd5b80633ae05047116200012d5780633e19704311620001105780633e19704314620003155780634638554914620004095780637b6323c1146200042e57600080fd5b80633ae0504714620002c75780633da8168214620002df57600080fd5b80632dfdf0b511620001625780632dfdf0b514620001e85780632f3a3d5d146200020f578063318aee3d146200023e57600080fd5b80630871e971146200018057806322e95f2c1462000199575b600080fd5b6200019762000191366004620032c4565b620005eb565b005b348015620001a657600080fd5b50620001be620001b836600462003380565b62000bdf565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015620001f557600080fd5b506200020060415481565b604051908152602001620001df565b3480156200021c57600080fd5b50604754620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200024b57600080fd5b50620002956200025d366004620033bc565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201620001df565b348015620002d457600080fd5b506200020062000c82565b348015620002ec57600080fd5b5062000304620002fe366004620034db565b62000d5c565b6040519015158152602001620001df565b3480156200032257600080fd5b50620002006200033436600462003559565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200041657600080fd5b50620001976200042836600462003688565b62000e5c565b3480156200043b57600080fd5b50620001976200044d36600462003688565b62001617565b3480156200046057600080fd5b50620001be620004723660046200376f565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620004a757600080fd5b5062000197620004b936600462003380565b620020c2565b348015620004cc57600080fd5b50620004d6600081565b60405160ff9091168152602001620001df565b348015620004f657600080fd5b50620001be6200050836600462003380565b62002340565b3480156200051b57600080fd5b506042546200052d9063ffffffff1681565b60405163ffffffff9091168152602001620001df565b3480156200055057600080fd5b50604654620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b620001976200058336600462003789565b62002409565b3480156200059657600080fd5b5062000304620005a83660046200376f565b60436020526000908152604090205460ff1681565b348015620005ca57600080fd5b506200052d600081565b348015620005e157600080fd5b50620004d6600181565b60425463ffffffff908116908616036200068c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff891662000748578534146200073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c55450000000000000000000000000000000000606482015260840162000683565b6000915062000a5c565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000849576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562000810573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008369190620037f1565b5060208101518151909450925062000a5a565b84156200085e576200085e8a88888862002656565b6200088273ffffffffffffffffffffffffffffffffffffffff8b1633308a62002a81565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200092e919081019062003890565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200097a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620009c2919081019062003890565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a349190620038c9565b60405160200162000a489392919062003935565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760415460405162000a9e98979695949392919062003972565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000b599062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000b8162000c82565b6040518263ffffffff1660e01b815260040162000ba091815260200190565b600060405180830381600087803b15801562000bbb57600080fd5b505af115801562000bd0573d6000803e3d6000fd5b50505050505050505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6041546000908190815b602081101562000d54578160011660010362000cec576001816020811062000cb85762000cb8620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000d30565b826021826020811062000d035762000d03620039eb565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b62000d3d60028362003a49565b91508062000d4b8162003a85565b91505062000c8c565b509092915050565b60008467ffffffffffffffff8416825b602081101562000e4f578160011660010362000dd95786818151811062000d975762000d97620039eb565b60200260200101518360405160200162000dbb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000e2b565b8287828151811062000def5762000def620039eb565b602002602001015160405160200162000e12929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000e3860028362003a49565b91508062000e468162003a85565b91505062000d6c565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000f04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d4544000000000000000000000000000000000000000000000000000000606482015260840162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000f9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fc3919062003ac0565b60000362001054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000606482015260840162000683565b60425463ffffffff858116911614620010f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000606482015260840162000683565b60425463ffffffff166200126e578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620011da905b8b8b63ffffffff168a62000d5c565b62001268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b620013d8565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200134a905b8b8b63ffffffff168b62000d5c565b620013d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff8516908490620014469089908b90879060240162003ada565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f20000000000000000000000000000000000000000000000000000000017905251620014c9919062003b20565b60006040518083038185875af1925050503d806000811462001508576040519150601f19603f3d011682016040523d82523d6000602084013e6200150d565b606091505b50509050806200159f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c454400000000000000000000000000000000000000000000000000000000606482015260840162000683565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b63ffffffff891660009081526043602052604090205460ff161562001699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d45440000604482015260640162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001732573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001758919062003ac0565b600003620017e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d41544348000000000000000000000000000000000000606482015260840162000683565b60425463ffffffff85811691161462001885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d41544348000000000000000000000000000000606482015260840162000683565b60425463ffffffff16620019b4578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200194690620011cb565b620019ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b62001acf565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062001a67906200133b565b62001acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff851662001c40576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001b62919062003b20565b60006040518083038185875af1925050503d806000811462001ba1576040519150601f19603f3d011682016040523d82523d6000602084013e62001ba6565b606091505b505090508062001c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f4544000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b506200204b565b60425463ffffffff9081169087160362001c7d5762001c7773ffffffffffffffffffffffffffffffffffffffff8616848462002cde565b6200204b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001faa5760475460009062001d689073ffffffffffffffffffffffffffffffffffffffff168462002d36565b905060008060008680602001905181019062001d85919062003b3e565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001dce95949392919062003bbf565b600060405180830381600087803b15801562001de957600080fd5b505af115801562001dfe573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001f989392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062002048565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562002020573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020469190620037f1565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff1615808015620020e35750600054600160ff909116105b80620020ff5750303b158015620020ff575060005460ff166001145b6200218d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840162000683565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620021ec57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556040516200226a906200326c565b604051809103906000f08015801562002287573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055620022d762002e16565b80156200233b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620024019073ffffffffffffffffffffffffffffffffffffffff168262002f5e565b949350505050565b60425463ffffffff90811690841603620024a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c4600000000000000000000000000000000000000000000606482015260840162000683565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620024f39260019263ffffffff9092169133918991899134918a919062003972565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620025d69062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d620025fe62000c82565b6040518263ffffffff1660e01b81526004016200261d91815260200190565b600060405180830381600087803b1580156200263857600080fd5b505af11580156200264d573d6000803e3d6000fd5b50505050505050565b60006200269983838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002fe292505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf000000000000000000000000000000000000000000000000000000001462002748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000683565b60008080808080806200275f896004818d62003c1f565b8101906200276e919062003c4b565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462002839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000683565b73ffffffffffffffffffffffffffffffffffffffff86163014620028e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000683565b8a851462002971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d4154434800000000000000000000000000000000000000606482015260840162000683565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002a2c919062003b20565b6000604051808303816000865af19150503d806000811462002a6b576040519150601f19603f3d011682016040523d82523d6000602084013e62002a70565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905262002b5f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002fe9565b50505050565b80600162002b766020600262003ddf565b62002b82919062003ded565b6041541062002c14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c00000000000000000000000000000000000000000000606482015260840162000683565b60016041600082825462002c29919062003e07565b909155505060415460005b602081101562002cd3578160011660010362002c6957826001826020811062002c615762002c61620039eb565b015550505050565b6001816020811062002c7f5762002c7f620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002cbc919062003a49565b91508062002cca8162003a85565b91505062002c34565b506200233b62003e22565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526200233b9084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002adc565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000c7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640162000683565b600054610100900460ff1662002eaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000683565b60005b62002ec06001602062003ded565b81101562002f5b576021816020811062002ede5762002ede620039eb565b01546021826020811062002ef65762002ef6620039eb565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002f31919062003e07565b6020811062002f445762002f44620039eb565b01558062002f528162003a85565b91505062002eb2565b50565b600062002fdb8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b60006200304d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620030fc9092919063ffffffff16565b8051909150156200233b57808060200190518101906200306e9190620037f1565b6200233b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000683565b60606200240184846000858573ffffffffffffffffffffffffffffffffffffffff85163b62003188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000683565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620031b3919062003b20565b60006040518083038185875af1925050503d8060008114620031f2576040519150601f19603f3d011682016040523d82523d6000602084013e620031f7565b606091505b50915091506200320982828662003214565b979650505050505050565b606083156200322557508162002fdb565b825115620032365782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000683919062003e51565b6118298062003e6783390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462002f5b57600080fd5b8035620032aa816200327a565b919050565b803563ffffffff81168114620032aa57600080fd5b60008060008060008060a08789031215620032de57600080fd5b8635620032eb816200327a565b9550620032fb60208801620032af565b945060408701356200330d816200327a565b935060608701359250608087013567ffffffffffffffff808211156200333257600080fd5b818901915089601f8301126200334757600080fd5b8135818111156200335757600080fd5b8a60208285010111156200336a57600080fd5b6020830194508093505050509295509295509295565b600080604083850312156200339457600080fd5b6200339f83620032af565b91506020830135620033b1816200327a565b809150509250929050565b600060208284031215620033cf57600080fd5b813562002fdb816200327a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620034555762003455620033dc565b604052919050565b600082601f8301126200346f57600080fd5b8135602067ffffffffffffffff8211156200348e576200348e620033dc565b8160051b6200349f8282016200340b565b9283528481018201928281019087851115620034ba57600080fd5b83870192505b848310156200320957823582529183019190830190620034c0565b60008060008060808587031215620034f257600080fd5b84359350602085013567ffffffffffffffff808211156200351257600080fd5b62003520888389016200345d565b94506040870135915080821682146200353857600080fd5b509396929550929360600135925050565b60ff8116811462002f5b57600080fd5b600080600080600080600060e0888a0312156200357557600080fd5b8735620035828162003549565b96506200359260208901620032af565b95506040880135620035a4816200327a565b9450620035b460608901620032af565b93506080880135620035c6816200327a565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620036005762003600620033dc565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126200363e57600080fd5b8135620036556200364f82620035e3565b6200340b565b8181528460208386010111156200366b57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620036a957600080fd5b8a3567ffffffffffffffff80821115620036c257600080fd5b620036d08e838f016200345d565b9b50620036e060208e01620032af565b9a5060408d0135995060608d01359850620036fe60808e01620032af565b97506200370e60a08e016200329d565b96506200371e60c08e01620032af565b95506200372e60e08e016200329d565b94506101008d013593506101208d01359150808211156200374e57600080fd5b506200375d8d828e016200362c565b9150509295989b9194979a5092959850565b6000602082840312156200378257600080fd5b5035919050565b6000806000606084860312156200379f57600080fd5b620037aa84620032af565b92506020840135620037bc816200327a565b9150604084013567ffffffffffffffff811115620037d957600080fd5b620037e7868287016200362c565b9150509250925092565b6000602082840312156200380457600080fd5b8151801515811462002fdb57600080fd5b60005b838110156200383257818101518382015260200162003818565b8381111562002b5f5750506000910152565b600082601f8301126200385657600080fd5b8151620038676200364f82620035e3565b8181528460208386010111156200387d57600080fd5b6200240182602083016020870162003815565b600060208284031215620038a357600080fd5b815167ffffffffffffffff811115620038bb57600080fd5b620024018482850162003844565b600060208284031215620038dc57600080fd5b815162002fdb8162003549565b600081518084526200390381602086016020860162003815565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6060815260006200394a6060830186620038e9565b82810360208401526200395e8186620038e9565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620039d282850187620038e9565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003a80577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003ab95762003ab962003a1a565b5060010190565b60006020828403121562003ad357600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003b176060830184620038e9565b95945050505050565b6000825162003b3481846020870162003815565b9190910192915050565b60008060006060848603121562003b5457600080fd5b835167ffffffffffffffff8082111562003b6d57600080fd5b62003b7b8783880162003844565b9450602086015191508082111562003b9257600080fd5b5062003ba18682870162003844565b925050604084015162003bb48162003549565b809150509250925092565b60a08152600062003bd460a0830188620038e9565b828103602084015262003be88188620038e9565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000808585111562003c3057600080fd5b8386111562003c3e57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003c6757600080fd5b873562003c74816200327a565b9650602088013562003c86816200327a565b955060408801359450606088013593506080880135620035c68162003549565b600181815b8085111562003d0557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003ce95762003ce962003a1a565b8085161562003cf757918102915b93841c939080029062003cab565b509250929050565b60008262003d1e5750600162000c7c565b8162003d2d5750600062000c7c565b816001811462003d46576002811462003d515762003d71565b600191505062000c7c565b60ff84111562003d655762003d6562003a1a565b50506001821b62000c7c565b5060208310610133831016604e8410600b841016171562003d96575081810a62000c7c565b62003da2838362003ca6565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003dd75762003dd762003a1a565b029392505050565b600062002fdb838362003d0d565b60008282101562003e025762003e0262003a1a565b500390565b6000821982111562003e1d5762003e1d62003a1a565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60208152600062002fdb6020830184620038e956fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a2646970667358221220270b01f138ab314b7b3b2cc1fdbdd08476271beee2d7873498fc431d3f03324964736f6c634300080f0033", + "deployedBytecode": "0x6080604052600436106200017b5760003560e01c806381b1c17411620000cf578063d02103ca116200007d578063e73758811162000060578063e73758811462000589578063ed6be5c914620005bd578063ff634ed714620005d457600080fd5b8063d02103ca1462000543578063d96a15f7146200057257600080fd5b8063a08e8a0811620000b2578063a08e8a0814620004bf578063b7e6a7d414620004e9578063bab161bf146200050e57600080fd5b806381b1c17414620004535780638624c35c146200049a57600080fd5b80633ae05047116200012d5780633e19704311620001105780633e19704314620003155780634638554914620004095780637b6323c1146200042e57600080fd5b80633ae0504714620002c75780633da8168214620002df57600080fd5b80632dfdf0b511620001625780632dfdf0b514620001e85780632f3a3d5d146200020f578063318aee3d146200023e57600080fd5b80630871e971146200018057806322e95f2c1462000199575b600080fd5b6200019762000191366004620032c4565b620005eb565b005b348015620001a657600080fd5b50620001be620001b836600462003380565b62000bdf565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015620001f557600080fd5b506200020060415481565b604051908152602001620001df565b3480156200021c57600080fd5b50604754620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200024b57600080fd5b50620002956200025d366004620033bc565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201620001df565b348015620002d457600080fd5b506200020062000c82565b348015620002ec57600080fd5b5062000304620002fe366004620034db565b62000d5c565b6040519015158152602001620001df565b3480156200032257600080fd5b50620002006200033436600462003559565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200041657600080fd5b50620001976200042836600462003688565b62000e5c565b3480156200043b57600080fd5b50620001976200044d36600462003688565b62001617565b3480156200046057600080fd5b50620001be620004723660046200376f565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620004a757600080fd5b5062000197620004b936600462003380565b620020c2565b348015620004cc57600080fd5b50620004d6600081565b60405160ff9091168152602001620001df565b348015620004f657600080fd5b50620001be6200050836600462003380565b62002340565b3480156200051b57600080fd5b506042546200052d9063ffffffff1681565b60405163ffffffff9091168152602001620001df565b3480156200055057600080fd5b50604654620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b620001976200058336600462003789565b62002409565b3480156200059657600080fd5b5062000304620005a83660046200376f565b60436020526000908152604090205460ff1681565b348015620005ca57600080fd5b506200052d600081565b348015620005e157600080fd5b50620004d6600181565b60425463ffffffff908116908616036200068c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff891662000748578534146200073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c55450000000000000000000000000000000000606482015260840162000683565b6000915062000a5c565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000849576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562000810573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008369190620037f1565b5060208101518151909450925062000a5a565b84156200085e576200085e8a88888862002656565b6200088273ffffffffffffffffffffffffffffffffffffffff8b1633308a62002a81565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200092e919081019062003890565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200097a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620009c2919081019062003890565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a349190620038c9565b60405160200162000a489392919062003935565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760415460405162000a9e98979695949392919062003972565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000b599062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000b8162000c82565b6040518263ffffffff1660e01b815260040162000ba091815260200190565b600060405180830381600087803b15801562000bbb57600080fd5b505af115801562000bd0573d6000803e3d6000fd5b50505050505050505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6041546000908190815b602081101562000d54578160011660010362000cec576001816020811062000cb85762000cb8620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000d30565b826021826020811062000d035762000d03620039eb565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b62000d3d60028362003a49565b91508062000d4b8162003a85565b91505062000c8c565b509092915050565b60008467ffffffffffffffff8416825b602081101562000e4f578160011660010362000dd95786818151811062000d975762000d97620039eb565b60200260200101518360405160200162000dbb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000e2b565b8287828151811062000def5762000def620039eb565b602002602001015160405160200162000e12929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000e3860028362003a49565b91508062000e468162003a85565b91505062000d6c565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000f04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d4544000000000000000000000000000000000000000000000000000000606482015260840162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000f9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fc3919062003ac0565b60000362001054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000606482015260840162000683565b60425463ffffffff858116911614620010f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000606482015260840162000683565b60425463ffffffff166200126e578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620011da905b8b8b63ffffffff168a62000d5c565b62001268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b620013d8565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200134a905b8b8b63ffffffff168b62000d5c565b620013d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff8516908490620014469089908b90879060240162003ada565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f20000000000000000000000000000000000000000000000000000000017905251620014c9919062003b20565b60006040518083038185875af1925050503d806000811462001508576040519150601f19603f3d011682016040523d82523d6000602084013e6200150d565b606091505b50509050806200159f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c454400000000000000000000000000000000000000000000000000000000606482015260840162000683565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b63ffffffff891660009081526043602052604090205460ff161562001699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d45440000604482015260640162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001732573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001758919062003ac0565b600003620017e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d41544348000000000000000000000000000000000000606482015260840162000683565b60425463ffffffff85811691161462001885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d41544348000000000000000000000000000000606482015260840162000683565b60425463ffffffff16620019b4578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200194690620011cb565b620019ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b62001acf565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062001a67906200133b565b62001acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff851662001c40576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001b62919062003b20565b60006040518083038185875af1925050503d806000811462001ba1576040519150601f19603f3d011682016040523d82523d6000602084013e62001ba6565b606091505b505090508062001c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f4544000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b506200204b565b60425463ffffffff9081169087160362001c7d5762001c7773ffffffffffffffffffffffffffffffffffffffff8616848462002cde565b6200204b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001faa5760475460009062001d689073ffffffffffffffffffffffffffffffffffffffff168462002d36565b905060008060008680602001905181019062001d85919062003b3e565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001dce95949392919062003bbf565b600060405180830381600087803b15801562001de957600080fd5b505af115801562001dfe573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001f989392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062002048565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562002020573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020469190620037f1565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff1615808015620020e35750600054600160ff909116105b80620020ff5750303b158015620020ff575060005460ff166001145b6200218d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840162000683565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620021ec57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556040516200226a906200326c565b604051809103906000f08015801562002287573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055620022d762002e16565b80156200233b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620024019073ffffffffffffffffffffffffffffffffffffffff168262002f5e565b949350505050565b60425463ffffffff90811690841603620024a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c4600000000000000000000000000000000000000000000606482015260840162000683565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620024f39260019263ffffffff9092169133918991899134918a919062003972565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620025d69062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d620025fe62000c82565b6040518263ffffffff1660e01b81526004016200261d91815260200190565b600060405180830381600087803b1580156200263857600080fd5b505af11580156200264d573d6000803e3d6000fd5b50505050505050565b60006200269983838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002fe292505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf000000000000000000000000000000000000000000000000000000001462002748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000683565b60008080808080806200275f896004818d62003c1f565b8101906200276e919062003c4b565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462002839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000683565b73ffffffffffffffffffffffffffffffffffffffff86163014620028e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000683565b8a851462002971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d4154434800000000000000000000000000000000000000606482015260840162000683565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002a2c919062003b20565b6000604051808303816000865af19150503d806000811462002a6b576040519150601f19603f3d011682016040523d82523d6000602084013e62002a70565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905262002b5f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002fe9565b50505050565b80600162002b766020600262003ddf565b62002b82919062003ded565b6041541062002c14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c00000000000000000000000000000000000000000000606482015260840162000683565b60016041600082825462002c29919062003e07565b909155505060415460005b602081101562002cd3578160011660010362002c6957826001826020811062002c615762002c61620039eb565b015550505050565b6001816020811062002c7f5762002c7f620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002cbc919062003a49565b91508062002cca8162003a85565b91505062002c34565b506200233b62003e22565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526200233b9084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002adc565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000c7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640162000683565b600054610100900460ff1662002eaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000683565b60005b62002ec06001602062003ded565b81101562002f5b576021816020811062002ede5762002ede620039eb565b01546021826020811062002ef65762002ef6620039eb565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002f31919062003e07565b6020811062002f445762002f44620039eb565b01558062002f528162003a85565b91505062002eb2565b50565b600062002fdb8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b60006200304d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620030fc9092919063ffffffff16565b8051909150156200233b57808060200190518101906200306e9190620037f1565b6200233b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000683565b60606200240184846000858573ffffffffffffffffffffffffffffffffffffffff85163b62003188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000683565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620031b3919062003b20565b60006040518083038185875af1925050503d8060008114620031f2576040519150601f19603f3d011682016040523d82523d6000602084013e620031f7565b606091505b50915091506200320982828662003214565b979650505050505050565b606083156200322557508162002fdb565b825115620032365782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000683919062003e51565b6118298062003e6783390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462002f5b57600080fd5b8035620032aa816200327a565b919050565b803563ffffffff81168114620032aa57600080fd5b60008060008060008060a08789031215620032de57600080fd5b8635620032eb816200327a565b9550620032fb60208801620032af565b945060408701356200330d816200327a565b935060608701359250608087013567ffffffffffffffff808211156200333257600080fd5b818901915089601f8301126200334757600080fd5b8135818111156200335757600080fd5b8a60208285010111156200336a57600080fd5b6020830194508093505050509295509295509295565b600080604083850312156200339457600080fd5b6200339f83620032af565b91506020830135620033b1816200327a565b809150509250929050565b600060208284031215620033cf57600080fd5b813562002fdb816200327a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620034555762003455620033dc565b604052919050565b600082601f8301126200346f57600080fd5b8135602067ffffffffffffffff8211156200348e576200348e620033dc565b8160051b6200349f8282016200340b565b9283528481018201928281019087851115620034ba57600080fd5b83870192505b848310156200320957823582529183019190830190620034c0565b60008060008060808587031215620034f257600080fd5b84359350602085013567ffffffffffffffff808211156200351257600080fd5b62003520888389016200345d565b94506040870135915080821682146200353857600080fd5b509396929550929360600135925050565b60ff8116811462002f5b57600080fd5b600080600080600080600060e0888a0312156200357557600080fd5b8735620035828162003549565b96506200359260208901620032af565b95506040880135620035a4816200327a565b9450620035b460608901620032af565b93506080880135620035c6816200327a565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620036005762003600620033dc565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126200363e57600080fd5b8135620036556200364f82620035e3565b6200340b565b8181528460208386010111156200366b57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620036a957600080fd5b8a3567ffffffffffffffff80821115620036c257600080fd5b620036d08e838f016200345d565b9b50620036e060208e01620032af565b9a5060408d0135995060608d01359850620036fe60808e01620032af565b97506200370e60a08e016200329d565b96506200371e60c08e01620032af565b95506200372e60e08e016200329d565b94506101008d013593506101208d01359150808211156200374e57600080fd5b506200375d8d828e016200362c565b9150509295989b9194979a5092959850565b6000602082840312156200378257600080fd5b5035919050565b6000806000606084860312156200379f57600080fd5b620037aa84620032af565b92506020840135620037bc816200327a565b9150604084013567ffffffffffffffff811115620037d957600080fd5b620037e7868287016200362c565b9150509250925092565b6000602082840312156200380457600080fd5b8151801515811462002fdb57600080fd5b60005b838110156200383257818101518382015260200162003818565b8381111562002b5f5750506000910152565b600082601f8301126200385657600080fd5b8151620038676200364f82620035e3565b8181528460208386010111156200387d57600080fd5b6200240182602083016020870162003815565b600060208284031215620038a357600080fd5b815167ffffffffffffffff811115620038bb57600080fd5b620024018482850162003844565b600060208284031215620038dc57600080fd5b815162002fdb8162003549565b600081518084526200390381602086016020860162003815565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6060815260006200394a6060830186620038e9565b82810360208401526200395e8186620038e9565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620039d282850187620038e9565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003a80577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003ab95762003ab962003a1a565b5060010190565b60006020828403121562003ad357600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003b176060830184620038e9565b95945050505050565b6000825162003b3481846020870162003815565b9190910192915050565b60008060006060848603121562003b5457600080fd5b835167ffffffffffffffff8082111562003b6d57600080fd5b62003b7b8783880162003844565b9450602086015191508082111562003b9257600080fd5b5062003ba18682870162003844565b925050604084015162003bb48162003549565b809150509250925092565b60a08152600062003bd460a0830188620038e9565b828103602084015262003be88188620038e9565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000808585111562003c3057600080fd5b8386111562003c3e57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003c6757600080fd5b873562003c74816200327a565b9650602088013562003c86816200327a565b955060408801359450606088013593506080880135620035c68162003549565b600181815b8085111562003d0557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003ce95762003ce962003a1a565b8085161562003cf757918102915b93841c939080029062003cab565b509250929050565b60008262003d1e5750600162000c7c565b8162003d2d5750600062000c7c565b816001811462003d46576002811462003d515762003d71565b600191505062000c7c565b60ff84111562003d655762003d6562003a1a565b50506001821b62000c7c565b5060208310610133831016604e8410600b841016171562003d96575081810a62000c7c565b62003da2838362003ca6565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003dd75762003dd762003a1a565b029392505050565b600062002fdb838362003d0d565b60008282101562003e025762003e0262003a1a565b500390565b6000821982111562003e1d5762003e1d62003a1a565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60208152600062002fdb6020830184620038e956fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a2646970667358221220270b01f138ab314b7b3b2cc1fdbdd08476271beee2d7873498fc431d3f03324964736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/BridgeMock.json b/compiled-contracts/BridgeMock.json index 79c5e8dfd..a793e2089 100644 --- a/compiled-contracts/BridgeMock.json +++ b/compiled-contracts/BridgeMock.json @@ -422,7 +422,7 @@ }, { "internalType": "address", - "name": "originTokenAddress", + "name": "originAddress", "type": "address" }, { @@ -712,8 +712,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50615c42806100206000396000f3fe608060405260043610620001c35760003560e01c806381b1c17411620000f3578063bab161bf1162000095578063e7375881116200006c578063e73758811462000678578063ed6be5c914620006ac578063f2fde38b14620006c3578063ff634ed714620006e857600080fd5b8063bab161bf14620005fd578063d02103ca1462000632578063d96a15f7146200066157600080fd5b806391e57e2d11620000ca57806391e57e2d1462000596578063a08e8a0814620005ae578063b7e6a7d414620005d857600080fd5b806381b1c17414620004fd5780638624c35c14620005445780638da5cb5b146200056957600080fd5b8063318aee3d11620001695780633e19704311620001405780633e19704314620003a757806346385549146200049b578063715018a614620004c05780637b6323c114620004d857600080fd5b8063318aee3d14620002d05780633ae0504714620003595780633da81682146200037157600080fd5b80632c3f58cd116200019e5780632c3f58cd14620002555780632dfdf0b5146200027a5780632f3a3d5d14620002a157600080fd5b80630871e97114620001c857806322e95f2c14620001e15780632b5e42e71462000230575b600080fd5b620001df620001d936600462003823565b620006ff565b005b348015620001ee57600080fd5b506200020662000200366004620038df565b620007d5565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200023d57600080fd5b50620001df6200024f3660046200391b565b62000878565b3480156200026257600080fd5b50620001df6200027436600462003935565b62000887565b3480156200028757600080fd5b506200029260415481565b60405190815260200162000227565b348015620002ae57600080fd5b50604754620002069073ffffffffffffffffffffffffffffffffffffffff1681565b348015620002dd57600080fd5b5062000327620002ef36600462003953565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000227565b3480156200036657600080fd5b5062000292620008c8565b3480156200037e57600080fd5b50620003966200039036600462003a72565b620009a2565b604051901515815260200162000227565b348015620003b457600080fd5b5062000292620003c636600462003af0565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004a857600080fd5b50620001df620004ba36600462003c1f565b62000aa2565b348015620004cd57600080fd5b50620001df6200125d565b348015620004e557600080fd5b50620001df620004f736600462003c1f565b62001275565b3480156200050a57600080fd5b50620002066200051c3660046200391b565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200055157600080fd5b50620001df62000563366004620038df565b62001d20565b3480156200057657600080fd5b50607a5473ffffffffffffffffffffffffffffffffffffffff1662000206565b348015620005a357600080fd5b506200029260ac5481565b348015620005bb57600080fd5b50620005c5600081565b60405160ff909116815260200162000227565b348015620005e557600080fd5b5062000206620005f7366004620038df565b62001fb4565b3480156200060a57600080fd5b506042546200061c9063ffffffff1681565b60405163ffffffff909116815260200162000227565b3480156200063f57600080fd5b50604654620002069073ffffffffffffffffffffffffffffffffffffffff1681565b620001df6200067236600462003d06565b6200207d565b3480156200068557600080fd5b5062000396620006973660046200391b565b60436020526000908152604090205460ff1681565b348015620006b957600080fd5b506200061c600081565b348015620006d057600080fd5b50620001df620006e236600462003953565b620022ca565b348015620006f557600080fd5b50620005c5600181565b60ac54341115620007bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b620007cd86868686868662002387565b505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6200088262002977565b60ac55565b6200089162002977565b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b6041546000908190815b60208110156200099a5781600116600103620009325760018160208110620008fe57620008fe62003d6e565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000976565b826021826020811062000949576200094962003d6e565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b6200098360028362003dcc565b915080620009918162003e08565b915050620008d2565b509092915050565b60008467ffffffffffffffff8416825b602081101562000a95578160011660010362000a1f57868181518110620009dd57620009dd62003d6e565b60200260200101518360405160200162000a01929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000a71565b8287828151811062000a355762000a3562003d6e565b602002602001015160405160200162000a58929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000a7e60028362003dcc565b91508062000a8c8162003e08565b915050620009b2565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000b4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d45440000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000be3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c09919062003e43565b60000362000c9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d4154434800000000000000000000006064820152608401620007b4565b60425463ffffffff85811691161462000d36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000006064820152608401620007b4565b60425463ffffffff1662000eb4578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062000e20905b8b8b63ffffffff168a620009a2565b62000eae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6200101e565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062000f90905b8b8b63ffffffff168b620009a2565b6200101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff85169084906200108c9089908b90879060240162003ed8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f200000000000000000000000000000000000000000000000000000000179052516200110f919062003f1e565b60006040518083038185875af1925050503d80600081146200114e576040519150601f19603f3d011682016040523d82523d6000602084013e62001153565b606091505b5050905080620011e5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b6200126762002977565b620012736000620029fa565b565b63ffffffff891660009081526043602052604090205460ff1615620012f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d454400006044820152606401620007b4565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001390573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013b6919062003e43565b60000362001447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d415443480000000000000000000000000000000000006064820152608401620007b4565b60425463ffffffff858116911614620014e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d415443480000000000000000000000000000006064820152608401620007b4565b60425463ffffffff1662001612578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620015a49062000e11565b6200160c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007b4565b6200172d565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620016c59062000f81565b6200172d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007b4565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff85166200189e576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff8516908490604051620017c0919062003f1e565b60006040518083038185875af1925050503d8060008114620017ff576040519150601f19603f3d011682016040523d82523d6000602084013e62001804565b606091505b505090508062001897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f45440000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b5062001ca9565b60425463ffffffff90811690871603620018db57620018d573ffffffffffffffffffffffffffffffffffffffff8616848462002a71565b62001ca9565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001c0857604754600090620019c69073ffffffffffffffffffffffffffffffffffffffff168462002b47565b9050600080600086806020019051810190620019e3919062003f88565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001a2c95949392919062004009565b600060405180830381600087803b15801562001a4757600080fd5b505af115801562001a5c573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001bf69392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062001ca6565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001c7e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ca4919062004069565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff161580801562001d415750600054600160ff909116105b8062001d5d5750303b15801562001d5d575060005460ff166001145b62001deb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007b4565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801562001e4a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841617905560405162001ec890620037cb565b604051809103906000f08015801562001ee5573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905562001f3562002c27565b62001f3f62002d6c565b6703782dace9d9000060ac55801562001faf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620020759073ffffffffffffffffffffffffffffffffffffffff168262002e0f565b949350505050565b60425463ffffffff908116908416036200211a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007b4565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620021679260019263ffffffff9092169133918991899134918a91906200408d565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200224a9062002e93565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62002272620008c8565b6040518263ffffffff1660e01b81526004016200229191815260200190565b600060405180830381600087803b158015620022ac57600080fd5b505af1158015620022c1573d6000803e3d6000fd5b50505050505050565b620022d462002977565b73ffffffffffffffffffffffffffffffffffffffff811662002379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007b4565b6200238481620029fa565b50565b60425463ffffffff9081169086160362002424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007b4565b600080606073ffffffffffffffffffffffffffffffffffffffff8916620024e057853414620024d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007b4565b60009150620027f4565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620025e1576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af1158015620025a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620025ce919062004069565b50602081015181519094509250620027f2565b8415620025f657620025f68a8888886200300c565b6200261a73ffffffffffffffffffffffffffffffffffffffff8b1633308a62003437565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200267e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620026c6919081019062004106565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562002712573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200275a919081019062004106565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620027a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620027cc91906200413f565b604051602001620027e0939291906200415f565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b87604154604051620028369897969594939291906200408d565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620028f19062002e93565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62002919620008c8565b6040518263ffffffff1660e01b81526004016200293891815260200190565b600060405180830381600087803b1580156200295357600080fd5b505af115801562002968573d6000803e3d6000fd5b50505050505050505050505050565b607a5473ffffffffffffffffffffffffffffffffffffffff16331462001273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007b4565b607a805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262001faf9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526200349d565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401620007b4565b600054610100900460ff1662002cc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b60005b62002cd1600160206200419c565b81101562002384576021816020811062002cef5762002cef62003d6e565b01546021826020811062002d075762002d0762003d6e565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002d429190620041b6565b6020811062002d555762002d5562003d6e565b01558062002d638162003e08565b91505062002cc3565b600054610100900460ff1662002e05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b62001273620035b0565b600062002e8c8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b80600162002ea4602060026200430a565b62002eb091906200419c565b6041541062002f42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007b4565b60016041600082825462002f579190620041b6565b909155505060415460005b602081101562003001578160011660010362002f9757826001826020811062002f8f5762002f8f62003d6e565b015550505050565b6001816020811062002fad5762002fad62003d6e565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002fea919062003dcc565b91508062002ff88162003e08565b91505062002f62565b5062001faf62004318565b60006200304f83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200365492505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf0000000000000000000000000000000000000000000000000000000014620030fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007b4565b600080808080808062003115896004818d62004347565b81019062003124919062004373565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614620031ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007b4565b73ffffffffffffffffffffffffffffffffffffffff8616301462003296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007b4565b8a851462003327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007b4565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e1691620033e2919062003f1e565b6000604051808303816000865af19150503d806000811462003421576040519150601f19603f3d011682016040523d82523d6000602084013e62003426565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052620034979085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002ac4565b50505050565b600062003501826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166200365b9092919063ffffffff16565b80519091501562001faf578080602001905181019062003522919062004069565b62001faf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007b4565b600054610100900460ff1662003649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b6200127333620029fa565b6020015190565b60606200207584846000858573ffffffffffffffffffffffffffffffffffffffff85163b620036e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007b4565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405162003712919062003f1e565b60006040518083038185875af1925050503d806000811462003751576040519150601f19603f3d011682016040523d82523d6000602084013e62003756565b606091505b50915091506200376882828662003773565b979650505050505050565b606083156200378457508162002e8c565b825115620037955782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007b49190620043ce565b61182980620043e483390190565b73ffffffffffffffffffffffffffffffffffffffff811681146200238457600080fd5b80356200380981620037d9565b919050565b803563ffffffff811681146200380957600080fd5b60008060008060008060a087890312156200383d57600080fd5b86356200384a81620037d9565b95506200385a602088016200380e565b945060408701356200386c81620037d9565b935060608701359250608087013567ffffffffffffffff808211156200389157600080fd5b818901915089601f830112620038a657600080fd5b813581811115620038b657600080fd5b8a6020828501011115620038c957600080fd5b6020830194508093505050509295509295509295565b60008060408385031215620038f357600080fd5b620038fe836200380e565b915060208301356200391081620037d9565b809150509250929050565b6000602082840312156200392e57600080fd5b5035919050565b6000602082840312156200394857600080fd5b62002e8c826200380e565b6000602082840312156200396657600080fd5b813562002e8c81620037d9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620039ec57620039ec62003973565b604052919050565b600082601f83011262003a0657600080fd5b8135602067ffffffffffffffff82111562003a255762003a2562003973565b8160051b62003a36828201620039a2565b928352848101820192828101908785111562003a5157600080fd5b83870192505b84831015620037685782358252918301919083019062003a57565b6000806000806080858703121562003a8957600080fd5b84359350602085013567ffffffffffffffff8082111562003aa957600080fd5b62003ab788838901620039f4565b945060408701359150808216821462003acf57600080fd5b509396929550929360600135925050565b60ff811681146200238457600080fd5b600080600080600080600060e0888a03121562003b0c57600080fd5b873562003b198162003ae0565b965062003b29602089016200380e565b9550604088013562003b3b81620037d9565b945062003b4b606089016200380e565b9350608088013562003b5d81620037d9565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562003b975762003b9762003973565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011262003bd557600080fd5b813562003bec62003be68262003b7a565b620039a2565b81815284602083860101111562003c0257600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562003c4057600080fd5b8a3567ffffffffffffffff8082111562003c5957600080fd5b62003c678e838f01620039f4565b9b5062003c7760208e016200380e565b9a5060408d0135995060608d0135985062003c9560808e016200380e565b975062003ca560a08e01620037fc565b965062003cb560c08e016200380e565b955062003cc560e08e01620037fc565b94506101008d013593506101208d013591508082111562003ce557600080fd5b5062003cf48d828e0162003bc3565b9150509295989b9194979a5092959850565b60008060006060848603121562003d1c57600080fd5b62003d27846200380e565b9250602084013562003d3981620037d9565b9150604084013567ffffffffffffffff81111562003d5657600080fd5b62003d648682870162003bc3565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003e03577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003e3c5762003e3c62003d9d565b5060010190565b60006020828403121562003e5657600080fd5b5051919050565b60005b8381101562003e7a57818101518382015260200162003e60565b83811115620034975750506000910152565b6000815180845262003ea681602086016020860162003e5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003f15606083018462003e8c565b95945050505050565b6000825162003f3281846020870162003e5d565b9190910192915050565b600082601f83011262003f4e57600080fd5b815162003f5f62003be68262003b7a565b81815284602083860101111562003f7557600080fd5b6200207582602083016020870162003e5d565b60008060006060848603121562003f9e57600080fd5b835167ffffffffffffffff8082111562003fb757600080fd5b62003fc58783880162003f3c565b9450602086015191508082111562003fdc57600080fd5b5062003feb8682870162003f3c565b925050604084015162003ffe8162003ae0565b809150509250925092565b60a0815260006200401e60a083018862003e8c565b828103602084015262004032818862003e8c565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000602082840312156200407c57600080fd5b8151801515811462002e8c57600080fd5b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620040ed8285018762003e8c565b925080851660e085015250509998505050505050505050565b6000602082840312156200411957600080fd5b815167ffffffffffffffff8111156200413157600080fd5b620020758482850162003f3c565b6000602082840312156200415257600080fd5b815162002e8c8162003ae0565b60608152600062004174606083018662003e8c565b828103602084015262004188818662003e8c565b91505060ff83166040830152949350505050565b600082821015620041b157620041b162003d9d565b500390565b60008219821115620041cc57620041cc62003d9d565b500190565b600181815b808511156200423057817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562004214576200421462003d9d565b808516156200422257918102915b93841c9390800290620041d6565b509250929050565b600082620042495750600162000872565b81620042585750600062000872565b81600181146200427157600281146200427c576200429c565b600191505062000872565b60ff84111562004290576200429062003d9d565b50506001821b62000872565b5060208310610133831016604e8410600b8410161715620042c1575081810a62000872565b620042cd8383620041d1565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562004302576200430262003d9d565b029392505050565b600062002e8c838362004238565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600080858511156200435857600080fd5b838611156200436657600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200438f57600080fd5b87356200439c81620037d9565b96506020880135620043ae81620037d9565b95506040880135945060608801359350608088013562003b5d8162003ae0565b60208152600062002e8c602083018462003e8c56fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a2646970667358221220d9b0847a8820234ebfdd21d5f194bcc4c046919307bd6d06f8d96c4ba0c614c064736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001c35760003560e01c806381b1c17411620000f3578063bab161bf1162000095578063e7375881116200006c578063e73758811462000678578063ed6be5c914620006ac578063f2fde38b14620006c3578063ff634ed714620006e857600080fd5b8063bab161bf14620005fd578063d02103ca1462000632578063d96a15f7146200066157600080fd5b806391e57e2d11620000ca57806391e57e2d1462000596578063a08e8a0814620005ae578063b7e6a7d414620005d857600080fd5b806381b1c17414620004fd5780638624c35c14620005445780638da5cb5b146200056957600080fd5b8063318aee3d11620001695780633e19704311620001405780633e19704314620003a757806346385549146200049b578063715018a614620004c05780637b6323c114620004d857600080fd5b8063318aee3d14620002d05780633ae0504714620003595780633da81682146200037157600080fd5b80632c3f58cd116200019e5780632c3f58cd14620002555780632dfdf0b5146200027a5780632f3a3d5d14620002a157600080fd5b80630871e97114620001c857806322e95f2c14620001e15780632b5e42e71462000230575b600080fd5b620001df620001d936600462003823565b620006ff565b005b348015620001ee57600080fd5b506200020662000200366004620038df565b620007d5565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200023d57600080fd5b50620001df6200024f3660046200391b565b62000878565b3480156200026257600080fd5b50620001df6200027436600462003935565b62000887565b3480156200028757600080fd5b506200029260415481565b60405190815260200162000227565b348015620002ae57600080fd5b50604754620002069073ffffffffffffffffffffffffffffffffffffffff1681565b348015620002dd57600080fd5b5062000327620002ef36600462003953565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000227565b3480156200036657600080fd5b5062000292620008c8565b3480156200037e57600080fd5b50620003966200039036600462003a72565b620009a2565b604051901515815260200162000227565b348015620003b457600080fd5b5062000292620003c636600462003af0565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004a857600080fd5b50620001df620004ba36600462003c1f565b62000aa2565b348015620004cd57600080fd5b50620001df6200125d565b348015620004e557600080fd5b50620001df620004f736600462003c1f565b62001275565b3480156200050a57600080fd5b50620002066200051c3660046200391b565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200055157600080fd5b50620001df62000563366004620038df565b62001d20565b3480156200057657600080fd5b50607a5473ffffffffffffffffffffffffffffffffffffffff1662000206565b348015620005a357600080fd5b506200029260ac5481565b348015620005bb57600080fd5b50620005c5600081565b60405160ff909116815260200162000227565b348015620005e557600080fd5b5062000206620005f7366004620038df565b62001fb4565b3480156200060a57600080fd5b506042546200061c9063ffffffff1681565b60405163ffffffff909116815260200162000227565b3480156200063f57600080fd5b50604654620002069073ffffffffffffffffffffffffffffffffffffffff1681565b620001df6200067236600462003d06565b6200207d565b3480156200068557600080fd5b5062000396620006973660046200391b565b60436020526000908152604090205460ff1681565b348015620006b957600080fd5b506200061c600081565b348015620006d057600080fd5b50620001df620006e236600462003953565b620022ca565b348015620006f557600080fd5b50620005c5600181565b60ac54341115620007bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b620007cd86868686868662002387565b505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6200088262002977565b60ac55565b6200089162002977565b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b6041546000908190815b60208110156200099a5781600116600103620009325760018160208110620008fe57620008fe62003d6e565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000976565b826021826020811062000949576200094962003d6e565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b6200098360028362003dcc565b915080620009918162003e08565b915050620008d2565b509092915050565b60008467ffffffffffffffff8416825b602081101562000a95578160011660010362000a1f57868181518110620009dd57620009dd62003d6e565b60200260200101518360405160200162000a01929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000a71565b8287828151811062000a355762000a3562003d6e565b602002602001015160405160200162000a58929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000a7e60028362003dcc565b91508062000a8c8162003e08565b915050620009b2565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000b4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d45440000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000be3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c09919062003e43565b60000362000c9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d4154434800000000000000000000006064820152608401620007b4565b60425463ffffffff85811691161462000d36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000006064820152608401620007b4565b60425463ffffffff1662000eb4578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062000e20905b8b8b63ffffffff168a620009a2565b62000eae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6200101e565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062000f90905b8b8b63ffffffff168b620009a2565b6200101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff85169084906200108c9089908b90879060240162003ed8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f200000000000000000000000000000000000000000000000000000000179052516200110f919062003f1e565b60006040518083038185875af1925050503d80600081146200114e576040519150601f19603f3d011682016040523d82523d6000602084013e62001153565b606091505b5050905080620011e5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b6200126762002977565b620012736000620029fa565b565b63ffffffff891660009081526043602052604090205460ff1615620012f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d454400006044820152606401620007b4565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001390573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013b6919062003e43565b60000362001447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d415443480000000000000000000000000000000000006064820152608401620007b4565b60425463ffffffff858116911614620014e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d415443480000000000000000000000000000006064820152608401620007b4565b60425463ffffffff1662001612578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620015a49062000e11565b6200160c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007b4565b6200172d565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620016c59062000f81565b6200172d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007b4565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff85166200189e576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff8516908490604051620017c0919062003f1e565b60006040518083038185875af1925050503d8060008114620017ff576040519150601f19603f3d011682016040523d82523d6000602084013e62001804565b606091505b505090508062001897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f45440000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b5062001ca9565b60425463ffffffff90811690871603620018db57620018d573ffffffffffffffffffffffffffffffffffffffff8616848462002a71565b62001ca9565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001c0857604754600090620019c69073ffffffffffffffffffffffffffffffffffffffff168462002b47565b9050600080600086806020019051810190620019e3919062003f88565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001a2c95949392919062004009565b600060405180830381600087803b15801562001a4757600080fd5b505af115801562001a5c573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001bf69392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062001ca6565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001c7e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ca4919062004069565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff161580801562001d415750600054600160ff909116105b8062001d5d5750303b15801562001d5d575060005460ff166001145b62001deb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007b4565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801562001e4a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841617905560405162001ec890620037cb565b604051809103906000f08015801562001ee5573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905562001f3562002c27565b62001f3f62002d6c565b6703782dace9d9000060ac55801562001faf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620020759073ffffffffffffffffffffffffffffffffffffffff168262002e0f565b949350505050565b60425463ffffffff908116908416036200211a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007b4565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620021679260019263ffffffff9092169133918991899134918a91906200408d565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200224a9062002e93565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62002272620008c8565b6040518263ffffffff1660e01b81526004016200229191815260200190565b600060405180830381600087803b158015620022ac57600080fd5b505af1158015620022c1573d6000803e3d6000fd5b50505050505050565b620022d462002977565b73ffffffffffffffffffffffffffffffffffffffff811662002379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007b4565b6200238481620029fa565b50565b60425463ffffffff9081169086160362002424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007b4565b600080606073ffffffffffffffffffffffffffffffffffffffff8916620024e057853414620024d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007b4565b60009150620027f4565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620025e1576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af1158015620025a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620025ce919062004069565b50602081015181519094509250620027f2565b8415620025f657620025f68a8888886200300c565b6200261a73ffffffffffffffffffffffffffffffffffffffff8b1633308a62003437565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200267e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620026c6919081019062004106565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562002712573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200275a919081019062004106565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620027a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620027cc91906200413f565b604051602001620027e0939291906200415f565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b87604154604051620028369897969594939291906200408d565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620028f19062002e93565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62002919620008c8565b6040518263ffffffff1660e01b81526004016200293891815260200190565b600060405180830381600087803b1580156200295357600080fd5b505af115801562002968573d6000803e3d6000fd5b50505050505050505050505050565b607a5473ffffffffffffffffffffffffffffffffffffffff16331462001273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007b4565b607a805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262001faf9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526200349d565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401620007b4565b600054610100900460ff1662002cc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b60005b62002cd1600160206200419c565b81101562002384576021816020811062002cef5762002cef62003d6e565b01546021826020811062002d075762002d0762003d6e565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002d429190620041b6565b6020811062002d555762002d5562003d6e565b01558062002d638162003e08565b91505062002cc3565b600054610100900460ff1662002e05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b62001273620035b0565b600062002e8c8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b80600162002ea4602060026200430a565b62002eb091906200419c565b6041541062002f42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007b4565b60016041600082825462002f579190620041b6565b909155505060415460005b602081101562003001578160011660010362002f9757826001826020811062002f8f5762002f8f62003d6e565b015550505050565b6001816020811062002fad5762002fad62003d6e565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002fea919062003dcc565b91508062002ff88162003e08565b91505062002f62565b5062001faf62004318565b60006200304f83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200365492505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf0000000000000000000000000000000000000000000000000000000014620030fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007b4565b600080808080808062003115896004818d62004347565b81019062003124919062004373565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614620031ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007b4565b73ffffffffffffffffffffffffffffffffffffffff8616301462003296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007b4565b8a851462003327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007b4565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e1691620033e2919062003f1e565b6000604051808303816000865af19150503d806000811462003421576040519150601f19603f3d011682016040523d82523d6000602084013e62003426565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052620034979085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002ac4565b50505050565b600062003501826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166200365b9092919063ffffffff16565b80519091501562001faf578080602001905181019062003522919062004069565b62001faf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007b4565b600054610100900460ff1662003649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b6200127333620029fa565b6020015190565b60606200207584846000858573ffffffffffffffffffffffffffffffffffffffff85163b620036e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007b4565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405162003712919062003f1e565b60006040518083038185875af1925050503d806000811462003751576040519150601f19603f3d011682016040523d82523d6000602084013e62003756565b606091505b50915091506200376882828662003773565b979650505050505050565b606083156200378457508162002e8c565b825115620037955782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007b49190620043ce565b61182980620043e483390190565b73ffffffffffffffffffffffffffffffffffffffff811681146200238457600080fd5b80356200380981620037d9565b919050565b803563ffffffff811681146200380957600080fd5b60008060008060008060a087890312156200383d57600080fd5b86356200384a81620037d9565b95506200385a602088016200380e565b945060408701356200386c81620037d9565b935060608701359250608087013567ffffffffffffffff808211156200389157600080fd5b818901915089601f830112620038a657600080fd5b813581811115620038b657600080fd5b8a6020828501011115620038c957600080fd5b6020830194508093505050509295509295509295565b60008060408385031215620038f357600080fd5b620038fe836200380e565b915060208301356200391081620037d9565b809150509250929050565b6000602082840312156200392e57600080fd5b5035919050565b6000602082840312156200394857600080fd5b62002e8c826200380e565b6000602082840312156200396657600080fd5b813562002e8c81620037d9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620039ec57620039ec62003973565b604052919050565b600082601f83011262003a0657600080fd5b8135602067ffffffffffffffff82111562003a255762003a2562003973565b8160051b62003a36828201620039a2565b928352848101820192828101908785111562003a5157600080fd5b83870192505b84831015620037685782358252918301919083019062003a57565b6000806000806080858703121562003a8957600080fd5b84359350602085013567ffffffffffffffff8082111562003aa957600080fd5b62003ab788838901620039f4565b945060408701359150808216821462003acf57600080fd5b509396929550929360600135925050565b60ff811681146200238457600080fd5b600080600080600080600060e0888a03121562003b0c57600080fd5b873562003b198162003ae0565b965062003b29602089016200380e565b9550604088013562003b3b81620037d9565b945062003b4b606089016200380e565b9350608088013562003b5d81620037d9565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562003b975762003b9762003973565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011262003bd557600080fd5b813562003bec62003be68262003b7a565b620039a2565b81815284602083860101111562003c0257600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562003c4057600080fd5b8a3567ffffffffffffffff8082111562003c5957600080fd5b62003c678e838f01620039f4565b9b5062003c7760208e016200380e565b9a5060408d0135995060608d0135985062003c9560808e016200380e565b975062003ca560a08e01620037fc565b965062003cb560c08e016200380e565b955062003cc560e08e01620037fc565b94506101008d013593506101208d013591508082111562003ce557600080fd5b5062003cf48d828e0162003bc3565b9150509295989b9194979a5092959850565b60008060006060848603121562003d1c57600080fd5b62003d27846200380e565b9250602084013562003d3981620037d9565b9150604084013567ffffffffffffffff81111562003d5657600080fd5b62003d648682870162003bc3565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003e03577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003e3c5762003e3c62003d9d565b5060010190565b60006020828403121562003e5657600080fd5b5051919050565b60005b8381101562003e7a57818101518382015260200162003e60565b83811115620034975750506000910152565b6000815180845262003ea681602086016020860162003e5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003f15606083018462003e8c565b95945050505050565b6000825162003f3281846020870162003e5d565b9190910192915050565b600082601f83011262003f4e57600080fd5b815162003f5f62003be68262003b7a565b81815284602083860101111562003f7557600080fd5b6200207582602083016020870162003e5d565b60008060006060848603121562003f9e57600080fd5b835167ffffffffffffffff8082111562003fb757600080fd5b62003fc58783880162003f3c565b9450602086015191508082111562003fdc57600080fd5b5062003feb8682870162003f3c565b925050604084015162003ffe8162003ae0565b809150509250925092565b60a0815260006200401e60a083018862003e8c565b828103602084015262004032818862003e8c565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000602082840312156200407c57600080fd5b8151801515811462002e8c57600080fd5b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620040ed8285018762003e8c565b925080851660e085015250509998505050505050505050565b6000602082840312156200411957600080fd5b815167ffffffffffffffff8111156200413157600080fd5b620020758482850162003f3c565b6000602082840312156200415257600080fd5b815162002e8c8162003ae0565b60608152600062004174606083018662003e8c565b828103602084015262004188818662003e8c565b91505060ff83166040830152949350505050565b600082821015620041b157620041b162003d9d565b500390565b60008219821115620041cc57620041cc62003d9d565b500190565b600181815b808511156200423057817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562004214576200421462003d9d565b808516156200422257918102915b93841c9390800290620041d6565b509250929050565b600082620042495750600162000872565b81620042585750600062000872565b81600181146200427157600281146200427c576200429c565b600191505062000872565b60ff84111562004290576200429062003d9d565b50506001821b62000872565b5060208310610133831016604e8410600b8410161715620042c1575081810a62000872565b620042cd8383620041d1565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562004302576200430262003d9d565b029392505050565b600062002e8c838362004238565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600080858511156200435857600080fd5b838611156200436657600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200438f57600080fd5b87356200439c81620037d9565b96506020880135620043ae81620037d9565b95506040880135945060608801359350608088013562003b5d8162003ae0565b60208152600062002e8c602083018462003e8c56fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a2646970667358221220d9b0847a8820234ebfdd21d5f194bcc4c046919307bd6d06f8d96c4ba0c614c064736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50615c42806100206000396000f3fe608060405260043610620001c35760003560e01c806381b1c17411620000f3578063bab161bf1162000095578063e7375881116200006c578063e73758811462000678578063ed6be5c914620006ac578063f2fde38b14620006c3578063ff634ed714620006e857600080fd5b8063bab161bf14620005fd578063d02103ca1462000632578063d96a15f7146200066157600080fd5b806391e57e2d11620000ca57806391e57e2d1462000596578063a08e8a0814620005ae578063b7e6a7d414620005d857600080fd5b806381b1c17414620004fd5780638624c35c14620005445780638da5cb5b146200056957600080fd5b8063318aee3d11620001695780633e19704311620001405780633e19704314620003a757806346385549146200049b578063715018a614620004c05780637b6323c114620004d857600080fd5b8063318aee3d14620002d05780633ae0504714620003595780633da81682146200037157600080fd5b80632c3f58cd116200019e5780632c3f58cd14620002555780632dfdf0b5146200027a5780632f3a3d5d14620002a157600080fd5b80630871e97114620001c857806322e95f2c14620001e15780632b5e42e71462000230575b600080fd5b620001df620001d936600462003823565b620006ff565b005b348015620001ee57600080fd5b506200020662000200366004620038df565b620007d5565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200023d57600080fd5b50620001df6200024f3660046200391b565b62000878565b3480156200026257600080fd5b50620001df6200027436600462003935565b62000887565b3480156200028757600080fd5b506200029260415481565b60405190815260200162000227565b348015620002ae57600080fd5b50604754620002069073ffffffffffffffffffffffffffffffffffffffff1681565b348015620002dd57600080fd5b5062000327620002ef36600462003953565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000227565b3480156200036657600080fd5b5062000292620008c8565b3480156200037e57600080fd5b50620003966200039036600462003a72565b620009a2565b604051901515815260200162000227565b348015620003b457600080fd5b5062000292620003c636600462003af0565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004a857600080fd5b50620001df620004ba36600462003c1f565b62000aa2565b348015620004cd57600080fd5b50620001df6200125d565b348015620004e557600080fd5b50620001df620004f736600462003c1f565b62001275565b3480156200050a57600080fd5b50620002066200051c3660046200391b565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200055157600080fd5b50620001df62000563366004620038df565b62001d20565b3480156200057657600080fd5b50607a5473ffffffffffffffffffffffffffffffffffffffff1662000206565b348015620005a357600080fd5b506200029260ac5481565b348015620005bb57600080fd5b50620005c5600081565b60405160ff909116815260200162000227565b348015620005e557600080fd5b5062000206620005f7366004620038df565b62001fb4565b3480156200060a57600080fd5b506042546200061c9063ffffffff1681565b60405163ffffffff909116815260200162000227565b3480156200063f57600080fd5b50604654620002069073ffffffffffffffffffffffffffffffffffffffff1681565b620001df6200067236600462003d06565b6200207d565b3480156200068557600080fd5b5062000396620006973660046200391b565b60436020526000908152604090205460ff1681565b348015620006b957600080fd5b506200061c600081565b348015620006d057600080fd5b50620001df620006e236600462003953565b620022ca565b348015620006f557600080fd5b50620005c5600181565b60ac54341115620007bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b620007cd86868686868662002387565b505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6200088262002977565b60ac55565b6200089162002977565b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b6041546000908190815b60208110156200099a5781600116600103620009325760018160208110620008fe57620008fe62003d6e565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000976565b826021826020811062000949576200094962003d6e565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b6200098360028362003dcc565b915080620009918162003e08565b915050620008d2565b509092915050565b60008467ffffffffffffffff8416825b602081101562000a95578160011660010362000a1f57868181518110620009dd57620009dd62003d6e565b60200260200101518360405160200162000a01929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000a71565b8287828151811062000a355762000a3562003d6e565b602002602001015160405160200162000a58929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000a7e60028362003dcc565b91508062000a8c8162003e08565b915050620009b2565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000b4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d45440000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000be3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c09919062003e43565b60000362000c9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d4154434800000000000000000000006064820152608401620007b4565b60425463ffffffff85811691161462000d36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000006064820152608401620007b4565b60425463ffffffff1662000eb4578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062000e20905b8b8b63ffffffff168a620009a2565b62000eae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6200101e565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062000f90905b8b8b63ffffffff168b620009a2565b6200101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff85169084906200108c9089908b90879060240162003ed8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f200000000000000000000000000000000000000000000000000000000179052516200110f919062003f1e565b60006040518083038185875af1925050503d80600081146200114e576040519150601f19603f3d011682016040523d82523d6000602084013e62001153565b606091505b5050905080620011e5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b6200126762002977565b620012736000620029fa565b565b63ffffffff891660009081526043602052604090205460ff1615620012f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d454400006044820152606401620007b4565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001390573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013b6919062003e43565b60000362001447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d415443480000000000000000000000000000000000006064820152608401620007b4565b60425463ffffffff858116911614620014e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d415443480000000000000000000000000000006064820152608401620007b4565b60425463ffffffff1662001612578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620015a49062000e11565b6200160c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007b4565b6200172d565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620016c59062000f81565b6200172d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007b4565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff85166200189e576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff8516908490604051620017c0919062003f1e565b60006040518083038185875af1925050503d8060008114620017ff576040519150601f19603f3d011682016040523d82523d6000602084013e62001804565b606091505b505090508062001897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f45440000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b5062001ca9565b60425463ffffffff90811690871603620018db57620018d573ffffffffffffffffffffffffffffffffffffffff8616848462002a71565b62001ca9565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001c0857604754600090620019c69073ffffffffffffffffffffffffffffffffffffffff168462002b47565b9050600080600086806020019051810190620019e3919062003f88565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001a2c95949392919062004009565b600060405180830381600087803b15801562001a4757600080fd5b505af115801562001a5c573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001bf69392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062001ca6565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001c7e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ca4919062004069565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff161580801562001d415750600054600160ff909116105b8062001d5d5750303b15801562001d5d575060005460ff166001145b62001deb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007b4565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801562001e4a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841617905560405162001ec890620037cb565b604051809103906000f08015801562001ee5573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905562001f3562002c27565b62001f3f62002d6c565b6703782dace9d9000060ac55801562001faf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620020759073ffffffffffffffffffffffffffffffffffffffff168262002e0f565b949350505050565b60425463ffffffff908116908416036200211a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007b4565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620021679260019263ffffffff9092169133918991899134918a91906200408d565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200224a9062002e93565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62002272620008c8565b6040518263ffffffff1660e01b81526004016200229191815260200190565b600060405180830381600087803b158015620022ac57600080fd5b505af1158015620022c1573d6000803e3d6000fd5b50505050505050565b620022d462002977565b73ffffffffffffffffffffffffffffffffffffffff811662002379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007b4565b6200238481620029fa565b50565b60425463ffffffff9081169086160362002424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007b4565b600080606073ffffffffffffffffffffffffffffffffffffffff8916620024e057853414620024d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007b4565b60009150620027f4565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620025e1576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af1158015620025a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620025ce919062004069565b50602081015181519094509250620027f2565b8415620025f657620025f68a8888886200300c565b6200261a73ffffffffffffffffffffffffffffffffffffffff8b1633308a62003437565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200267e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620026c6919081019062004106565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562002712573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200275a919081019062004106565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620027a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620027cc91906200413f565b604051602001620027e0939291906200415f565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b87604154604051620028369897969594939291906200408d565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620028f19062002e93565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62002919620008c8565b6040518263ffffffff1660e01b81526004016200293891815260200190565b600060405180830381600087803b1580156200295357600080fd5b505af115801562002968573d6000803e3d6000fd5b50505050505050505050505050565b607a5473ffffffffffffffffffffffffffffffffffffffff16331462001273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007b4565b607a805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262001faf9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526200349d565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401620007b4565b600054610100900460ff1662002cc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b60005b62002cd1600160206200419c565b81101562002384576021816020811062002cef5762002cef62003d6e565b01546021826020811062002d075762002d0762003d6e565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002d429190620041b6565b6020811062002d555762002d5562003d6e565b01558062002d638162003e08565b91505062002cc3565b600054610100900460ff1662002e05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b62001273620035b0565b600062002e8c8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b80600162002ea4602060026200430a565b62002eb091906200419c565b6041541062002f42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007b4565b60016041600082825462002f579190620041b6565b909155505060415460005b602081101562003001578160011660010362002f9757826001826020811062002f8f5762002f8f62003d6e565b015550505050565b6001816020811062002fad5762002fad62003d6e565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002fea919062003dcc565b91508062002ff88162003e08565b91505062002f62565b5062001faf62004318565b60006200304f83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200365492505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf0000000000000000000000000000000000000000000000000000000014620030fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007b4565b600080808080808062003115896004818d62004347565b81019062003124919062004373565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614620031ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007b4565b73ffffffffffffffffffffffffffffffffffffffff8616301462003296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007b4565b8a851462003327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007b4565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e1691620033e2919062003f1e565b6000604051808303816000865af19150503d806000811462003421576040519150601f19603f3d011682016040523d82523d6000602084013e62003426565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052620034979085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002ac4565b50505050565b600062003501826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166200365b9092919063ffffffff16565b80519091501562001faf578080602001905181019062003522919062004069565b62001faf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007b4565b600054610100900460ff1662003649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b6200127333620029fa565b6020015190565b60606200207584846000858573ffffffffffffffffffffffffffffffffffffffff85163b620036e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007b4565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405162003712919062003f1e565b60006040518083038185875af1925050503d806000811462003751576040519150601f19603f3d011682016040523d82523d6000602084013e62003756565b606091505b50915091506200376882828662003773565b979650505050505050565b606083156200378457508162002e8c565b825115620037955782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007b49190620043ce565b61182980620043e483390190565b73ffffffffffffffffffffffffffffffffffffffff811681146200238457600080fd5b80356200380981620037d9565b919050565b803563ffffffff811681146200380957600080fd5b60008060008060008060a087890312156200383d57600080fd5b86356200384a81620037d9565b95506200385a602088016200380e565b945060408701356200386c81620037d9565b935060608701359250608087013567ffffffffffffffff808211156200389157600080fd5b818901915089601f830112620038a657600080fd5b813581811115620038b657600080fd5b8a6020828501011115620038c957600080fd5b6020830194508093505050509295509295509295565b60008060408385031215620038f357600080fd5b620038fe836200380e565b915060208301356200391081620037d9565b809150509250929050565b6000602082840312156200392e57600080fd5b5035919050565b6000602082840312156200394857600080fd5b62002e8c826200380e565b6000602082840312156200396657600080fd5b813562002e8c81620037d9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620039ec57620039ec62003973565b604052919050565b600082601f83011262003a0657600080fd5b8135602067ffffffffffffffff82111562003a255762003a2562003973565b8160051b62003a36828201620039a2565b928352848101820192828101908785111562003a5157600080fd5b83870192505b84831015620037685782358252918301919083019062003a57565b6000806000806080858703121562003a8957600080fd5b84359350602085013567ffffffffffffffff8082111562003aa957600080fd5b62003ab788838901620039f4565b945060408701359150808216821462003acf57600080fd5b509396929550929360600135925050565b60ff811681146200238457600080fd5b600080600080600080600060e0888a03121562003b0c57600080fd5b873562003b198162003ae0565b965062003b29602089016200380e565b9550604088013562003b3b81620037d9565b945062003b4b606089016200380e565b9350608088013562003b5d81620037d9565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562003b975762003b9762003973565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011262003bd557600080fd5b813562003bec62003be68262003b7a565b620039a2565b81815284602083860101111562003c0257600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562003c4057600080fd5b8a3567ffffffffffffffff8082111562003c5957600080fd5b62003c678e838f01620039f4565b9b5062003c7760208e016200380e565b9a5060408d0135995060608d0135985062003c9560808e016200380e565b975062003ca560a08e01620037fc565b965062003cb560c08e016200380e565b955062003cc560e08e01620037fc565b94506101008d013593506101208d013591508082111562003ce557600080fd5b5062003cf48d828e0162003bc3565b9150509295989b9194979a5092959850565b60008060006060848603121562003d1c57600080fd5b62003d27846200380e565b9250602084013562003d3981620037d9565b9150604084013567ffffffffffffffff81111562003d5657600080fd5b62003d648682870162003bc3565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003e03577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003e3c5762003e3c62003d9d565b5060010190565b60006020828403121562003e5657600080fd5b5051919050565b60005b8381101562003e7a57818101518382015260200162003e60565b83811115620034975750506000910152565b6000815180845262003ea681602086016020860162003e5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003f15606083018462003e8c565b95945050505050565b6000825162003f3281846020870162003e5d565b9190910192915050565b600082601f83011262003f4e57600080fd5b815162003f5f62003be68262003b7a565b81815284602083860101111562003f7557600080fd5b6200207582602083016020870162003e5d565b60008060006060848603121562003f9e57600080fd5b835167ffffffffffffffff8082111562003fb757600080fd5b62003fc58783880162003f3c565b9450602086015191508082111562003fdc57600080fd5b5062003feb8682870162003f3c565b925050604084015162003ffe8162003ae0565b809150509250925092565b60a0815260006200401e60a083018862003e8c565b828103602084015262004032818862003e8c565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000602082840312156200407c57600080fd5b8151801515811462002e8c57600080fd5b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620040ed8285018762003e8c565b925080851660e085015250509998505050505050505050565b6000602082840312156200411957600080fd5b815167ffffffffffffffff8111156200413157600080fd5b620020758482850162003f3c565b6000602082840312156200415257600080fd5b815162002e8c8162003ae0565b60608152600062004174606083018662003e8c565b828103602084015262004188818662003e8c565b91505060ff83166040830152949350505050565b600082821015620041b157620041b162003d9d565b500390565b60008219821115620041cc57620041cc62003d9d565b500190565b600181815b808511156200423057817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562004214576200421462003d9d565b808516156200422257918102915b93841c9390800290620041d6565b509250929050565b600082620042495750600162000872565b81620042585750600062000872565b81600181146200427157600281146200427c576200429c565b600191505062000872565b60ff84111562004290576200429062003d9d565b50506001821b62000872565b5060208310610133831016604e8410600b8410161715620042c1575081810a62000872565b620042cd8383620041d1565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562004302576200430262003d9d565b029392505050565b600062002e8c838362004238565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600080858511156200435857600080fd5b838611156200436657600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200438f57600080fd5b87356200439c81620037d9565b96506020880135620043ae81620037d9565b95506040880135945060608801359350608088013562003b5d8162003ae0565b60208152600062002e8c602083018462003e8c56fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a26469706673582212202df0b88d99ea837cef4ce1ae938f90df917823197383f2babdee37a8bec9b78364736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001c35760003560e01c806381b1c17411620000f3578063bab161bf1162000095578063e7375881116200006c578063e73758811462000678578063ed6be5c914620006ac578063f2fde38b14620006c3578063ff634ed714620006e857600080fd5b8063bab161bf14620005fd578063d02103ca1462000632578063d96a15f7146200066157600080fd5b806391e57e2d11620000ca57806391e57e2d1462000596578063a08e8a0814620005ae578063b7e6a7d414620005d857600080fd5b806381b1c17414620004fd5780638624c35c14620005445780638da5cb5b146200056957600080fd5b8063318aee3d11620001695780633e19704311620001405780633e19704314620003a757806346385549146200049b578063715018a614620004c05780637b6323c114620004d857600080fd5b8063318aee3d14620002d05780633ae0504714620003595780633da81682146200037157600080fd5b80632c3f58cd116200019e5780632c3f58cd14620002555780632dfdf0b5146200027a5780632f3a3d5d14620002a157600080fd5b80630871e97114620001c857806322e95f2c14620001e15780632b5e42e71462000230575b600080fd5b620001df620001d936600462003823565b620006ff565b005b348015620001ee57600080fd5b506200020662000200366004620038df565b620007d5565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200023d57600080fd5b50620001df6200024f3660046200391b565b62000878565b3480156200026257600080fd5b50620001df6200027436600462003935565b62000887565b3480156200028757600080fd5b506200029260415481565b60405190815260200162000227565b348015620002ae57600080fd5b50604754620002069073ffffffffffffffffffffffffffffffffffffffff1681565b348015620002dd57600080fd5b5062000327620002ef36600462003953565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000227565b3480156200036657600080fd5b5062000292620008c8565b3480156200037e57600080fd5b50620003966200039036600462003a72565b620009a2565b604051901515815260200162000227565b348015620003b457600080fd5b5062000292620003c636600462003af0565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004a857600080fd5b50620001df620004ba36600462003c1f565b62000aa2565b348015620004cd57600080fd5b50620001df6200125d565b348015620004e557600080fd5b50620001df620004f736600462003c1f565b62001275565b3480156200050a57600080fd5b50620002066200051c3660046200391b565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200055157600080fd5b50620001df62000563366004620038df565b62001d20565b3480156200057657600080fd5b50607a5473ffffffffffffffffffffffffffffffffffffffff1662000206565b348015620005a357600080fd5b506200029260ac5481565b348015620005bb57600080fd5b50620005c5600081565b60405160ff909116815260200162000227565b348015620005e557600080fd5b5062000206620005f7366004620038df565b62001fb4565b3480156200060a57600080fd5b506042546200061c9063ffffffff1681565b60405163ffffffff909116815260200162000227565b3480156200063f57600080fd5b50604654620002069073ffffffffffffffffffffffffffffffffffffffff1681565b620001df6200067236600462003d06565b6200207d565b3480156200068557600080fd5b5062000396620006973660046200391b565b60436020526000908152604090205460ff1681565b348015620006b957600080fd5b506200061c600081565b348015620006d057600080fd5b50620001df620006e236600462003953565b620022ca565b348015620006f557600080fd5b50620005c5600181565b60ac54341115620007bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b620007cd86868686868662002387565b505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6200088262002977565b60ac55565b6200089162002977565b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b6041546000908190815b60208110156200099a5781600116600103620009325760018160208110620008fe57620008fe62003d6e565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000976565b826021826020811062000949576200094962003d6e565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b6200098360028362003dcc565b915080620009918162003e08565b915050620008d2565b509092915050565b60008467ffffffffffffffff8416825b602081101562000a95578160011660010362000a1f57868181518110620009dd57620009dd62003d6e565b60200260200101518360405160200162000a01929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000a71565b8287828151811062000a355762000a3562003d6e565b602002602001015160405160200162000a58929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000a7e60028362003dcc565b91508062000a8c8162003e08565b915050620009b2565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000b4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d45440000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000be3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c09919062003e43565b60000362000c9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d4154434800000000000000000000006064820152608401620007b4565b60425463ffffffff85811691161462000d36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000006064820152608401620007b4565b60425463ffffffff1662000eb4578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062000e20905b8b8b63ffffffff168a620009a2565b62000eae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6200101e565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062000f90905b8b8b63ffffffff168b620009a2565b6200101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff85169084906200108c9089908b90879060240162003ed8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f200000000000000000000000000000000000000000000000000000000179052516200110f919062003f1e565b60006040518083038185875af1925050503d80600081146200114e576040519150601f19603f3d011682016040523d82523d6000602084013e62001153565b606091505b5050905080620011e5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b6200126762002977565b620012736000620029fa565b565b63ffffffff891660009081526043602052604090205460ff1615620012f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d454400006044820152606401620007b4565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001390573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013b6919062003e43565b60000362001447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d415443480000000000000000000000000000000000006064820152608401620007b4565b60425463ffffffff858116911614620014e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d415443480000000000000000000000000000006064820152608401620007b4565b60425463ffffffff1662001612578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620015a49062000e11565b6200160c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007b4565b6200172d565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620016c59062000f81565b6200172d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007b4565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff85166200189e576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff8516908490604051620017c0919062003f1e565b60006040518083038185875af1925050503d8060008114620017ff576040519150601f19603f3d011682016040523d82523d6000602084013e62001804565b606091505b505090508062001897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f45440000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b5062001ca9565b60425463ffffffff90811690871603620018db57620018d573ffffffffffffffffffffffffffffffffffffffff8616848462002a71565b62001ca9565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001c0857604754600090620019c69073ffffffffffffffffffffffffffffffffffffffff168462002b47565b9050600080600086806020019051810190620019e3919062003f88565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001a2c95949392919062004009565b600060405180830381600087803b15801562001a4757600080fd5b505af115801562001a5c573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001bf69392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062001ca6565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001c7e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ca4919062004069565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff161580801562001d415750600054600160ff909116105b8062001d5d5750303b15801562001d5d575060005460ff166001145b62001deb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007b4565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801562001e4a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841617905560405162001ec890620037cb565b604051809103906000f08015801562001ee5573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905562001f3562002c27565b62001f3f62002d6c565b6703782dace9d9000060ac55801562001faf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620020759073ffffffffffffffffffffffffffffffffffffffff168262002e0f565b949350505050565b60425463ffffffff908116908416036200211a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007b4565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620021679260019263ffffffff9092169133918991899134918a91906200408d565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200224a9062002e93565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62002272620008c8565b6040518263ffffffff1660e01b81526004016200229191815260200190565b600060405180830381600087803b158015620022ac57600080fd5b505af1158015620022c1573d6000803e3d6000fd5b50505050505050565b620022d462002977565b73ffffffffffffffffffffffffffffffffffffffff811662002379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007b4565b6200238481620029fa565b50565b60425463ffffffff9081169086160362002424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007b4565b600080606073ffffffffffffffffffffffffffffffffffffffff8916620024e057853414620024d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007b4565b60009150620027f4565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620025e1576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af1158015620025a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620025ce919062004069565b50602081015181519094509250620027f2565b8415620025f657620025f68a8888886200300c565b6200261a73ffffffffffffffffffffffffffffffffffffffff8b1633308a62003437565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200267e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620026c6919081019062004106565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562002712573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200275a919081019062004106565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620027a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620027cc91906200413f565b604051602001620027e0939291906200415f565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b87604154604051620028369897969594939291906200408d565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620028f19062002e93565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62002919620008c8565b6040518263ffffffff1660e01b81526004016200293891815260200190565b600060405180830381600087803b1580156200295357600080fd5b505af115801562002968573d6000803e3d6000fd5b50505050505050505050505050565b607a5473ffffffffffffffffffffffffffffffffffffffff16331462001273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007b4565b607a805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262001faf9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526200349d565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401620007b4565b600054610100900460ff1662002cc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b60005b62002cd1600160206200419c565b81101562002384576021816020811062002cef5762002cef62003d6e565b01546021826020811062002d075762002d0762003d6e565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002d429190620041b6565b6020811062002d555762002d5562003d6e565b01558062002d638162003e08565b91505062002cc3565b600054610100900460ff1662002e05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b62001273620035b0565b600062002e8c8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b80600162002ea4602060026200430a565b62002eb091906200419c565b6041541062002f42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007b4565b60016041600082825462002f579190620041b6565b909155505060415460005b602081101562003001578160011660010362002f9757826001826020811062002f8f5762002f8f62003d6e565b015550505050565b6001816020811062002fad5762002fad62003d6e565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002fea919062003dcc565b91508062002ff88162003e08565b91505062002f62565b5062001faf62004318565b60006200304f83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200365492505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf0000000000000000000000000000000000000000000000000000000014620030fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007b4565b600080808080808062003115896004818d62004347565b81019062003124919062004373565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614620031ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007b4565b73ffffffffffffffffffffffffffffffffffffffff8616301462003296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007b4565b8a851462003327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007b4565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e1691620033e2919062003f1e565b6000604051808303816000865af19150503d806000811462003421576040519150601f19603f3d011682016040523d82523d6000602084013e62003426565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052620034979085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002ac4565b50505050565b600062003501826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166200365b9092919063ffffffff16565b80519091501562001faf578080602001905181019062003522919062004069565b62001faf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007b4565b600054610100900460ff1662003649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b6200127333620029fa565b6020015190565b60606200207584846000858573ffffffffffffffffffffffffffffffffffffffff85163b620036e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007b4565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405162003712919062003f1e565b60006040518083038185875af1925050503d806000811462003751576040519150601f19603f3d011682016040523d82523d6000602084013e62003756565b606091505b50915091506200376882828662003773565b979650505050505050565b606083156200378457508162002e8c565b825115620037955782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007b49190620043ce565b61182980620043e483390190565b73ffffffffffffffffffffffffffffffffffffffff811681146200238457600080fd5b80356200380981620037d9565b919050565b803563ffffffff811681146200380957600080fd5b60008060008060008060a087890312156200383d57600080fd5b86356200384a81620037d9565b95506200385a602088016200380e565b945060408701356200386c81620037d9565b935060608701359250608087013567ffffffffffffffff808211156200389157600080fd5b818901915089601f830112620038a657600080fd5b813581811115620038b657600080fd5b8a6020828501011115620038c957600080fd5b6020830194508093505050509295509295509295565b60008060408385031215620038f357600080fd5b620038fe836200380e565b915060208301356200391081620037d9565b809150509250929050565b6000602082840312156200392e57600080fd5b5035919050565b6000602082840312156200394857600080fd5b62002e8c826200380e565b6000602082840312156200396657600080fd5b813562002e8c81620037d9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620039ec57620039ec62003973565b604052919050565b600082601f83011262003a0657600080fd5b8135602067ffffffffffffffff82111562003a255762003a2562003973565b8160051b62003a36828201620039a2565b928352848101820192828101908785111562003a5157600080fd5b83870192505b84831015620037685782358252918301919083019062003a57565b6000806000806080858703121562003a8957600080fd5b84359350602085013567ffffffffffffffff8082111562003aa957600080fd5b62003ab788838901620039f4565b945060408701359150808216821462003acf57600080fd5b509396929550929360600135925050565b60ff811681146200238457600080fd5b600080600080600080600060e0888a03121562003b0c57600080fd5b873562003b198162003ae0565b965062003b29602089016200380e565b9550604088013562003b3b81620037d9565b945062003b4b606089016200380e565b9350608088013562003b5d81620037d9565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562003b975762003b9762003973565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011262003bd557600080fd5b813562003bec62003be68262003b7a565b620039a2565b81815284602083860101111562003c0257600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562003c4057600080fd5b8a3567ffffffffffffffff8082111562003c5957600080fd5b62003c678e838f01620039f4565b9b5062003c7760208e016200380e565b9a5060408d0135995060608d0135985062003c9560808e016200380e565b975062003ca560a08e01620037fc565b965062003cb560c08e016200380e565b955062003cc560e08e01620037fc565b94506101008d013593506101208d013591508082111562003ce557600080fd5b5062003cf48d828e0162003bc3565b9150509295989b9194979a5092959850565b60008060006060848603121562003d1c57600080fd5b62003d27846200380e565b9250602084013562003d3981620037d9565b9150604084013567ffffffffffffffff81111562003d5657600080fd5b62003d648682870162003bc3565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003e03577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003e3c5762003e3c62003d9d565b5060010190565b60006020828403121562003e5657600080fd5b5051919050565b60005b8381101562003e7a57818101518382015260200162003e60565b83811115620034975750506000910152565b6000815180845262003ea681602086016020860162003e5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003f15606083018462003e8c565b95945050505050565b6000825162003f3281846020870162003e5d565b9190910192915050565b600082601f83011262003f4e57600080fd5b815162003f5f62003be68262003b7a565b81815284602083860101111562003f7557600080fd5b6200207582602083016020870162003e5d565b60008060006060848603121562003f9e57600080fd5b835167ffffffffffffffff8082111562003fb757600080fd5b62003fc58783880162003f3c565b9450602086015191508082111562003fdc57600080fd5b5062003feb8682870162003f3c565b925050604084015162003ffe8162003ae0565b809150509250925092565b60a0815260006200401e60a083018862003e8c565b828103602084015262004032818862003e8c565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000602082840312156200407c57600080fd5b8151801515811462002e8c57600080fd5b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620040ed8285018762003e8c565b925080851660e085015250509998505050505050505050565b6000602082840312156200411957600080fd5b815167ffffffffffffffff8111156200413157600080fd5b620020758482850162003f3c565b6000602082840312156200415257600080fd5b815162002e8c8162003ae0565b60608152600062004174606083018662003e8c565b828103602084015262004188818662003e8c565b91505060ff83166040830152949350505050565b600082821015620041b157620041b162003d9d565b500390565b60008219821115620041cc57620041cc62003d9d565b500190565b600181815b808511156200423057817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562004214576200421462003d9d565b808516156200422257918102915b93841c9390800290620041d6565b509250929050565b600082620042495750600162000872565b81620042585750600062000872565b81600181146200427157600281146200427c576200429c565b600191505062000872565b60ff84111562004290576200429062003d9d565b50506001821b62000872565b5060208310610133831016604e8410600b8410161715620042c1575081810a62000872565b620042cd8383620041d1565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562004302576200430262003d9d565b029392505050565b600062002e8c838362004238565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600080858511156200435857600080fd5b838611156200436657600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200438f57600080fd5b87356200439c81620037d9565b96506020880135620043ae81620037d9565b95506040880135945060608801359350608088013562003b5d8162003ae0565b60208152600062002e8c602083018462003e8c56fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a26469706673582212202df0b88d99ea837cef4ce1ae938f90df917823197383f2babdee37a8bec9b78364736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/Bridge.sol b/contracts/Bridge.sol index c984cfeca..876ad9cbf 100644 --- a/contracts/Bridge.sol +++ b/contracts/Bridge.sol @@ -246,10 +246,10 @@ contract Bridge is DepositContract { * @param rollupExitRoot Rollup exit root * @param originNetwork Origin network * @param originTokenAddress Origin token address, 0 address is reserved for ether - * @param destinationNetwork Network destination, must be 0 ( mainnet) + * @param destinationNetwork Network destination * @param destinationAddress Address destination * @param amount Amount of tokens - * @param metadata abi encoded metadata if any, empty otherwise + * @param metadata Abi encoded metadata if any, empty otherwise */ function claimAsset( bytes32[] memory smtProof, @@ -413,11 +413,11 @@ contract Bridge is DepositContract { * @param mainnetExitRoot Mainnet exit root * @param rollupExitRoot Rollup exit root * @param originNetwork Origin network - * @param originAddress Origin token address, 0 address is reserved for ether - * @param destinationNetwork Network destination, must be 0 ( mainnet) + * @param originAddress Origin address + * @param destinationNetwork Network destination * @param destinationAddress Address destination * @param amount Amount of tokens - * @param metadata abi encoded metadata if any, empty otherwise + * @param metadata Abi encoded metadata if any, empty otherwise */ function claimMessage( bytes32[] memory smtProof, diff --git a/contracts/interfaces/IBridgeMessageReceiver.sol b/contracts/interfaces/IBridgeMessageReceiver.sol index cb9a5b3ae..e763c6427 100644 --- a/contracts/interfaces/IBridgeMessageReceiver.sol +++ b/contracts/interfaces/IBridgeMessageReceiver.sol @@ -3,7 +3,7 @@ pragma solidity 0.8.15; /** - * @dev Define interface verifier + * @dev Define interface for bridge message receiver */ interface IBridgeMessageReceiver { function onMessageReceived( diff --git a/contracts/lib/DepositContract.sol b/contracts/lib/DepositContract.sol index 24678d622..4ddbdc9c6 100644 --- a/contracts/lib/DepositContract.sol +++ b/contracts/lib/DepositContract.sol @@ -122,18 +122,18 @@ contract DepositContract is Initializable { /** * @notice Given the leaf data returns the leaf value - * @param leafType Leaf type + * @param leafType Leaf type --> [0] transfer Ether / ERC20 tokens, [1] message * @param originNetwork Origin Network - * @param originTokenAddress Origin token address, 0 address is reserved for ether + * @param originAddress [0] Origin token address, 0 address is reserved for ether, [1] msg.sender of the message * @param destinationNetwork Destination network * @param destinationAddress Destination address - * @param amount Amount of tokens + * @param amount [0] Amount of tokens/ether, [1] Amount of ether * @param metadataHash Hash of the metadata */ function getLeafValue( uint8 leafType, uint32 originNetwork, - address originTokenAddress, + address originAddress, uint32 destinationNetwork, address destinationAddress, uint256 amount, @@ -144,7 +144,7 @@ contract DepositContract is Initializable { abi.encodePacked( leafType, originNetwork, - originTokenAddress, + originAddress, destinationNetwork, destinationAddress, amount, diff --git a/docs/Bridge.md b/docs/Bridge.md index f3df42b41..6a5f26d05 100644 --- a/docs/Bridge.md +++ b/docs/Bridge.md @@ -85,10 +85,10 @@ Verify merkle proof and withdraw tokens/ether |`rollupExitRoot` | bytes32 | Rollup exit root |`originNetwork` | uint32 | Origin network |`originTokenAddress` | address | Origin token address, 0 address is reserved for ether -|`destinationNetwork` | uint32 | Network destination, must be 0 ( mainnet) +|`destinationNetwork` | uint32 | Network destination |`destinationAddress` | address | Address destination |`amount` | uint256 | Amount of tokens -|`metadata` | bytes | abi encoded metadata if any, empty otherwise +|`metadata` | bytes | Abi encoded metadata if any, empty otherwise ### claimMessage ```solidity @@ -116,11 +116,11 @@ Verify merkle proof and execute message |`mainnetExitRoot` | bytes32 | Mainnet exit root |`rollupExitRoot` | bytes32 | Rollup exit root |`originNetwork` | uint32 | Origin network -|`originAddress` | address | Origin token address, 0 address is reserved for ether -|`destinationNetwork` | uint32 | Network destination, must be 0 ( mainnet) +|`originAddress` | address | Origin address +|`destinationNetwork` | uint32 | Network destination |`destinationAddress` | address | Address destination |`amount` | uint256 | Amount of tokens -|`metadata` | bytes | abi encoded metadata if any, empty otherwise +|`metadata` | bytes | Abi encoded metadata if any, empty otherwise ### precalculatedWrapperAddress ```solidity diff --git a/docs/lib/DepositContract.md b/docs/lib/DepositContract.md index 371c53c9a..a4dfcc050 100644 --- a/docs/lib/DepositContract.md +++ b/docs/lib/DepositContract.md @@ -60,7 +60,7 @@ Verify merkle proof function getLeafValue( uint8 leafType, uint32 originNetwork, - address originTokenAddress, + address originAddress, uint32 destinationNetwork, address destinationAddress, uint256 amount, @@ -73,11 +73,11 @@ Given the leaf data returns the leaf value #### Parameters: | Name | Type | Description | | :--- | :--- | :------------------------------------------------------------------- | -|`leafType` | uint8 | Leaf type +|`leafType` | uint8 | Leaf type --> [0] transfer Ether / ERC20 tokens, [1] message |`originNetwork` | uint32 | Origin Network -|`originTokenAddress` | address | Origin token address, 0 address is reserved for ether +|`originAddress` | address | [0] Origin token address, 0 address is reserved for ether, [1] msg.sender of the message |`destinationNetwork` | uint32 | Destination network |`destinationAddress` | address | Destination address -|`amount` | uint256 | Amount of tokens +|`amount` | uint256 | [0] Amount of tokens/ether, [1] Amount of ether |`metadataHash` | bytes32 | Hash of the metadata From 76f28a3af31dd09a8841224ed4d2abd9fe0c68b8 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Fri, 4 Nov 2022 17:12:30 +0100 Subject: [PATCH 12/71] update genesis --- deployment/deployment_v2-0/genesis.json | 14 +++++++------- docker/scripts/genesis_docker.json | 14 +++++++------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/deployment/deployment_v2-0/genesis.json b/deployment/deployment_v2-0/genesis.json index c16670e72..890f0204d 100644 --- a/deployment/deployment_v2-0/genesis.json +++ b/deployment/deployment_v2-0/genesis.json @@ -1,11 +1,6 @@ { - "root": "0x8ddd4d2542d8f3ddd0bcf7ab122eac7b1ed81e2fe2f12acc8d6c2182eff0007c", + "root": "0xe34f1f840af49fa52051d291c4c5eea69948374f706648378ea12b6b6e82a80b", "genesis": [ - { - "balance": "0", - "nonce": "0", - "address": "0x0000000000000000000000000000000000000000" - }, { "balance": "0", "nonce": "1", @@ -20,7 +15,7 @@ "balance": "100000000000000000000000", "nonce": "2", "address": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988", - "bytecode": "0x6080604052600436106200017b5760003560e01c806381b1c17411620000cf578063d02103ca116200007d578063e73758811162000060578063e73758811462000589578063ed6be5c914620005bd578063ff634ed714620005d457600080fd5b8063d02103ca1462000543578063d96a15f7146200057257600080fd5b8063a08e8a0811620000b2578063a08e8a0814620004bf578063b7e6a7d414620004e9578063bab161bf146200050e57600080fd5b806381b1c17414620004535780638624c35c146200049a57600080fd5b80633ae05047116200012d5780633e19704311620001105780633e19704314620003155780634638554914620004095780637b6323c1146200042e57600080fd5b80633ae0504714620002c75780633da8168214620002df57600080fd5b80632dfdf0b511620001625780632dfdf0b514620001e85780632f3a3d5d146200020f578063318aee3d146200023e57600080fd5b80630871e971146200018057806322e95f2c1462000199575b600080fd5b6200019762000191366004620032c4565b620005eb565b005b348015620001a657600080fd5b50620001be620001b836600462003380565b62000bdf565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015620001f557600080fd5b506200020060415481565b604051908152602001620001df565b3480156200021c57600080fd5b50604754620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200024b57600080fd5b50620002956200025d366004620033bc565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201620001df565b348015620002d457600080fd5b506200020062000c82565b348015620002ec57600080fd5b5062000304620002fe366004620034db565b62000d5c565b6040519015158152602001620001df565b3480156200032257600080fd5b50620002006200033436600462003559565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200041657600080fd5b50620001976200042836600462003688565b62000e5c565b3480156200043b57600080fd5b50620001976200044d36600462003688565b62001617565b3480156200046057600080fd5b50620001be620004723660046200376f565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620004a757600080fd5b5062000197620004b936600462003380565b620020c2565b348015620004cc57600080fd5b50620004d6600081565b60405160ff9091168152602001620001df565b348015620004f657600080fd5b50620001be6200050836600462003380565b62002340565b3480156200051b57600080fd5b506042546200052d9063ffffffff1681565b60405163ffffffff9091168152602001620001df565b3480156200055057600080fd5b50604654620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b620001976200058336600462003789565b62002409565b3480156200059657600080fd5b5062000304620005a83660046200376f565b60436020526000908152604090205460ff1681565b348015620005ca57600080fd5b506200052d600081565b348015620005e157600080fd5b50620004d6600181565b60425463ffffffff908116908616036200068c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff891662000748578534146200073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c55450000000000000000000000000000000000606482015260840162000683565b6000915062000a5c565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000849576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562000810573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008369190620037f1565b5060208101518151909450925062000a5a565b84156200085e576200085e8a88888862002656565b6200088273ffffffffffffffffffffffffffffffffffffffff8b1633308a62002a81565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200092e919081019062003890565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200097a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620009c2919081019062003890565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a349190620038c9565b60405160200162000a489392919062003935565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760415460405162000a9e98979695949392919062003972565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000b599062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000b8162000c82565b6040518263ffffffff1660e01b815260040162000ba091815260200190565b600060405180830381600087803b15801562000bbb57600080fd5b505af115801562000bd0573d6000803e3d6000fd5b50505050505050505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6041546000908190815b602081101562000d54578160011660010362000cec576001816020811062000cb85762000cb8620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000d30565b826021826020811062000d035762000d03620039eb565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b62000d3d60028362003a49565b91508062000d4b8162003a85565b91505062000c8c565b509092915050565b60008467ffffffffffffffff8416825b602081101562000e4f578160011660010362000dd95786818151811062000d975762000d97620039eb565b60200260200101518360405160200162000dbb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000e2b565b8287828151811062000def5762000def620039eb565b602002602001015160405160200162000e12929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000e3860028362003a49565b91508062000e468162003a85565b91505062000d6c565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000f04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d4544000000000000000000000000000000000000000000000000000000606482015260840162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000f9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fc3919062003ac0565b60000362001054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000606482015260840162000683565b60425463ffffffff858116911614620010f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000606482015260840162000683565b60425463ffffffff166200126e578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620011da905b8b8b63ffffffff168a62000d5c565b62001268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b620013d8565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200134a905b8b8b63ffffffff168b62000d5c565b620013d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff8516908490620014469089908b90879060240162003ada565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f20000000000000000000000000000000000000000000000000000000017905251620014c9919062003b20565b60006040518083038185875af1925050503d806000811462001508576040519150601f19603f3d011682016040523d82523d6000602084013e6200150d565b606091505b50509050806200159f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c454400000000000000000000000000000000000000000000000000000000606482015260840162000683565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b63ffffffff891660009081526043602052604090205460ff161562001699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d45440000604482015260640162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001732573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001758919062003ac0565b600003620017e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d41544348000000000000000000000000000000000000606482015260840162000683565b60425463ffffffff85811691161462001885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d41544348000000000000000000000000000000606482015260840162000683565b60425463ffffffff16620019b4578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200194690620011cb565b620019ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b62001acf565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062001a67906200133b565b62001acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff851662001c40576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001b62919062003b20565b60006040518083038185875af1925050503d806000811462001ba1576040519150601f19603f3d011682016040523d82523d6000602084013e62001ba6565b606091505b505090508062001c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f4544000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b506200204b565b60425463ffffffff9081169087160362001c7d5762001c7773ffffffffffffffffffffffffffffffffffffffff8616848462002cde565b6200204b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001faa5760475460009062001d689073ffffffffffffffffffffffffffffffffffffffff168462002d36565b905060008060008680602001905181019062001d85919062003b3e565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001dce95949392919062003bbf565b600060405180830381600087803b15801562001de957600080fd5b505af115801562001dfe573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001f989392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062002048565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562002020573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020469190620037f1565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff1615808015620020e35750600054600160ff909116105b80620020ff5750303b158015620020ff575060005460ff166001145b6200218d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840162000683565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620021ec57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556040516200226a906200326c565b604051809103906000f08015801562002287573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055620022d762002e16565b80156200233b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620024019073ffffffffffffffffffffffffffffffffffffffff168262002f5e565b949350505050565b60425463ffffffff90811690841603620024a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c4600000000000000000000000000000000000000000000606482015260840162000683565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620024f39260019263ffffffff9092169133918991899134918a919062003972565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620025d69062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d620025fe62000c82565b6040518263ffffffff1660e01b81526004016200261d91815260200190565b600060405180830381600087803b1580156200263857600080fd5b505af11580156200264d573d6000803e3d6000fd5b50505050505050565b60006200269983838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002fe292505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf000000000000000000000000000000000000000000000000000000001462002748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000683565b60008080808080806200275f896004818d62003c1f565b8101906200276e919062003c4b565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462002839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000683565b73ffffffffffffffffffffffffffffffffffffffff86163014620028e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000683565b8a851462002971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d4154434800000000000000000000000000000000000000606482015260840162000683565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002a2c919062003b20565b6000604051808303816000865af19150503d806000811462002a6b576040519150601f19603f3d011682016040523d82523d6000602084013e62002a70565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905262002b5f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002fe9565b50505050565b80600162002b766020600262003ddf565b62002b82919062003ded565b6041541062002c14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c00000000000000000000000000000000000000000000606482015260840162000683565b60016041600082825462002c29919062003e07565b909155505060415460005b602081101562002cd3578160011660010362002c6957826001826020811062002c615762002c61620039eb565b015550505050565b6001816020811062002c7f5762002c7f620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002cbc919062003a49565b91508062002cca8162003a85565b91505062002c34565b506200233b62003e22565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526200233b9084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002adc565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000c7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640162000683565b600054610100900460ff1662002eaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000683565b60005b62002ec06001602062003ded565b81101562002f5b576021816020811062002ede5762002ede620039eb565b01546021826020811062002ef65762002ef6620039eb565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002f31919062003e07565b6020811062002f445762002f44620039eb565b01558062002f528162003a85565b91505062002eb2565b50565b600062002fdb8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b60006200304d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620030fc9092919063ffffffff16565b8051909150156200233b57808060200190518101906200306e9190620037f1565b6200233b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000683565b60606200240184846000858573ffffffffffffffffffffffffffffffffffffffff85163b62003188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000683565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620031b3919062003b20565b60006040518083038185875af1925050503d8060008114620031f2576040519150601f19603f3d011682016040523d82523d6000602084013e620031f7565b606091505b50915091506200320982828662003214565b979650505050505050565b606083156200322557508162002fdb565b825115620032365782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000683919062003e51565b6118298062003e6783390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462002f5b57600080fd5b8035620032aa816200327a565b919050565b803563ffffffff81168114620032aa57600080fd5b60008060008060008060a08789031215620032de57600080fd5b8635620032eb816200327a565b9550620032fb60208801620032af565b945060408701356200330d816200327a565b935060608701359250608087013567ffffffffffffffff808211156200333257600080fd5b818901915089601f8301126200334757600080fd5b8135818111156200335757600080fd5b8a60208285010111156200336a57600080fd5b6020830194508093505050509295509295509295565b600080604083850312156200339457600080fd5b6200339f83620032af565b91506020830135620033b1816200327a565b809150509250929050565b600060208284031215620033cf57600080fd5b813562002fdb816200327a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620034555762003455620033dc565b604052919050565b600082601f8301126200346f57600080fd5b8135602067ffffffffffffffff8211156200348e576200348e620033dc565b8160051b6200349f8282016200340b565b9283528481018201928281019087851115620034ba57600080fd5b83870192505b848310156200320957823582529183019190830190620034c0565b60008060008060808587031215620034f257600080fd5b84359350602085013567ffffffffffffffff808211156200351257600080fd5b62003520888389016200345d565b94506040870135915080821682146200353857600080fd5b509396929550929360600135925050565b60ff8116811462002f5b57600080fd5b600080600080600080600060e0888a0312156200357557600080fd5b8735620035828162003549565b96506200359260208901620032af565b95506040880135620035a4816200327a565b9450620035b460608901620032af565b93506080880135620035c6816200327a565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620036005762003600620033dc565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126200363e57600080fd5b8135620036556200364f82620035e3565b6200340b565b8181528460208386010111156200366b57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620036a957600080fd5b8a3567ffffffffffffffff80821115620036c257600080fd5b620036d08e838f016200345d565b9b50620036e060208e01620032af565b9a5060408d0135995060608d01359850620036fe60808e01620032af565b97506200370e60a08e016200329d565b96506200371e60c08e01620032af565b95506200372e60e08e016200329d565b94506101008d013593506101208d01359150808211156200374e57600080fd5b506200375d8d828e016200362c565b9150509295989b9194979a5092959850565b6000602082840312156200378257600080fd5b5035919050565b6000806000606084860312156200379f57600080fd5b620037aa84620032af565b92506020840135620037bc816200327a565b9150604084013567ffffffffffffffff811115620037d957600080fd5b620037e7868287016200362c565b9150509250925092565b6000602082840312156200380457600080fd5b8151801515811462002fdb57600080fd5b60005b838110156200383257818101518382015260200162003818565b8381111562002b5f5750506000910152565b600082601f8301126200385657600080fd5b8151620038676200364f82620035e3565b8181528460208386010111156200387d57600080fd5b6200240182602083016020870162003815565b600060208284031215620038a357600080fd5b815167ffffffffffffffff811115620038bb57600080fd5b620024018482850162003844565b600060208284031215620038dc57600080fd5b815162002fdb8162003549565b600081518084526200390381602086016020860162003815565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6060815260006200394a6060830186620038e9565b82810360208401526200395e8186620038e9565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620039d282850187620038e9565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003a80577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003ab95762003ab962003a1a565b5060010190565b60006020828403121562003ad357600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003b176060830184620038e9565b95945050505050565b6000825162003b3481846020870162003815565b9190910192915050565b60008060006060848603121562003b5457600080fd5b835167ffffffffffffffff8082111562003b6d57600080fd5b62003b7b8783880162003844565b9450602086015191508082111562003b9257600080fd5b5062003ba18682870162003844565b925050604084015162003bb48162003549565b809150509250925092565b60a08152600062003bd460a0830188620038e9565b828103602084015262003be88188620038e9565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000808585111562003c3057600080fd5b8386111562003c3e57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003c6757600080fd5b873562003c74816200327a565b9650602088013562003c86816200327a565b955060408801359450606088013593506080880135620035c68162003549565b600181815b8085111562003d0557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003ce95762003ce962003a1a565b8085161562003cf757918102915b93841c939080029062003cab565b509250929050565b60008262003d1e5750600162000c7c565b8162003d2d5750600062000c7c565b816001811462003d46576002811462003d515762003d71565b600191505062000c7c565b60ff84111562003d655762003d6562003a1a565b50506001821b62000c7c565b5060208310610133831016604e8410600b841016171562003d96575081810a62000c7c565b62003da2838362003ca6565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003dd75762003dd762003a1a565b029392505050565b600062002fdb838362003d0d565b60008282101562003e025762003e0262003a1a565b500390565b6000821982111562003e1d5762003e1d62003a1a565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60208152600062002fdb6020830184620038e956fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a26469706673582212200f33d24b40d1e879f02496512d8e703a09704c5edf7d149259a9c3cf2b64250664736f6c634300080f0033", + "bytecode": "0x6080604052600436106200017b5760003560e01c806381b1c17411620000cf578063d02103ca116200007d578063e73758811162000060578063e73758811462000589578063ed6be5c914620005bd578063ff634ed714620005d457600080fd5b8063d02103ca1462000543578063d96a15f7146200057257600080fd5b8063a08e8a0811620000b2578063a08e8a0814620004bf578063b7e6a7d414620004e9578063bab161bf146200050e57600080fd5b806381b1c17414620004535780638624c35c146200049a57600080fd5b80633ae05047116200012d5780633e19704311620001105780633e19704314620003155780634638554914620004095780637b6323c1146200042e57600080fd5b80633ae0504714620002c75780633da8168214620002df57600080fd5b80632dfdf0b511620001625780632dfdf0b514620001e85780632f3a3d5d146200020f578063318aee3d146200023e57600080fd5b80630871e971146200018057806322e95f2c1462000199575b600080fd5b6200019762000191366004620032c4565b620005eb565b005b348015620001a657600080fd5b50620001be620001b836600462003380565b62000bdf565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015620001f557600080fd5b506200020060415481565b604051908152602001620001df565b3480156200021c57600080fd5b50604754620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200024b57600080fd5b50620002956200025d366004620033bc565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201620001df565b348015620002d457600080fd5b506200020062000c82565b348015620002ec57600080fd5b5062000304620002fe366004620034db565b62000d5c565b6040519015158152602001620001df565b3480156200032257600080fd5b50620002006200033436600462003559565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200041657600080fd5b50620001976200042836600462003688565b62000e5c565b3480156200043b57600080fd5b50620001976200044d36600462003688565b62001617565b3480156200046057600080fd5b50620001be620004723660046200376f565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620004a757600080fd5b5062000197620004b936600462003380565b620020c2565b348015620004cc57600080fd5b50620004d6600081565b60405160ff9091168152602001620001df565b348015620004f657600080fd5b50620001be6200050836600462003380565b62002340565b3480156200051b57600080fd5b506042546200052d9063ffffffff1681565b60405163ffffffff9091168152602001620001df565b3480156200055057600080fd5b50604654620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b620001976200058336600462003789565b62002409565b3480156200059657600080fd5b5062000304620005a83660046200376f565b60436020526000908152604090205460ff1681565b348015620005ca57600080fd5b506200052d600081565b348015620005e157600080fd5b50620004d6600181565b60425463ffffffff908116908616036200068c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff891662000748578534146200073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c55450000000000000000000000000000000000606482015260840162000683565b6000915062000a5c565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000849576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562000810573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008369190620037f1565b5060208101518151909450925062000a5a565b84156200085e576200085e8a88888862002656565b6200088273ffffffffffffffffffffffffffffffffffffffff8b1633308a62002a81565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200092e919081019062003890565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200097a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620009c2919081019062003890565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a349190620038c9565b60405160200162000a489392919062003935565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760415460405162000a9e98979695949392919062003972565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000b599062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000b8162000c82565b6040518263ffffffff1660e01b815260040162000ba091815260200190565b600060405180830381600087803b15801562000bbb57600080fd5b505af115801562000bd0573d6000803e3d6000fd5b50505050505050505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6041546000908190815b602081101562000d54578160011660010362000cec576001816020811062000cb85762000cb8620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000d30565b826021826020811062000d035762000d03620039eb565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b62000d3d60028362003a49565b91508062000d4b8162003a85565b91505062000c8c565b509092915050565b60008467ffffffffffffffff8416825b602081101562000e4f578160011660010362000dd95786818151811062000d975762000d97620039eb565b60200260200101518360405160200162000dbb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000e2b565b8287828151811062000def5762000def620039eb565b602002602001015160405160200162000e12929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000e3860028362003a49565b91508062000e468162003a85565b91505062000d6c565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000f04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d4544000000000000000000000000000000000000000000000000000000606482015260840162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000f9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fc3919062003ac0565b60000362001054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000606482015260840162000683565b60425463ffffffff858116911614620010f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000606482015260840162000683565b60425463ffffffff166200126e578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620011da905b8b8b63ffffffff168a62000d5c565b62001268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b620013d8565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200134a905b8b8b63ffffffff168b62000d5c565b620013d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff8516908490620014469089908b90879060240162003ada565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f20000000000000000000000000000000000000000000000000000000017905251620014c9919062003b20565b60006040518083038185875af1925050503d806000811462001508576040519150601f19603f3d011682016040523d82523d6000602084013e6200150d565b606091505b50509050806200159f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c454400000000000000000000000000000000000000000000000000000000606482015260840162000683565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b63ffffffff891660009081526043602052604090205460ff161562001699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d45440000604482015260640162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001732573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001758919062003ac0565b600003620017e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d41544348000000000000000000000000000000000000606482015260840162000683565b60425463ffffffff85811691161462001885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d41544348000000000000000000000000000000606482015260840162000683565b60425463ffffffff16620019b4578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200194690620011cb565b620019ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b62001acf565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062001a67906200133b565b62001acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff851662001c40576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001b62919062003b20565b60006040518083038185875af1925050503d806000811462001ba1576040519150601f19603f3d011682016040523d82523d6000602084013e62001ba6565b606091505b505090508062001c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f4544000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b506200204b565b60425463ffffffff9081169087160362001c7d5762001c7773ffffffffffffffffffffffffffffffffffffffff8616848462002cde565b6200204b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001faa5760475460009062001d689073ffffffffffffffffffffffffffffffffffffffff168462002d36565b905060008060008680602001905181019062001d85919062003b3e565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001dce95949392919062003bbf565b600060405180830381600087803b15801562001de957600080fd5b505af115801562001dfe573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001f989392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062002048565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562002020573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020469190620037f1565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff1615808015620020e35750600054600160ff909116105b80620020ff5750303b158015620020ff575060005460ff166001145b6200218d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840162000683565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620021ec57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556040516200226a906200326c565b604051809103906000f08015801562002287573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055620022d762002e16565b80156200233b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620024019073ffffffffffffffffffffffffffffffffffffffff168262002f5e565b949350505050565b60425463ffffffff90811690841603620024a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c4600000000000000000000000000000000000000000000606482015260840162000683565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620024f39260019263ffffffff9092169133918991899134918a919062003972565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620025d69062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d620025fe62000c82565b6040518263ffffffff1660e01b81526004016200261d91815260200190565b600060405180830381600087803b1580156200263857600080fd5b505af11580156200264d573d6000803e3d6000fd5b50505050505050565b60006200269983838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002fe292505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf000000000000000000000000000000000000000000000000000000001462002748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000683565b60008080808080806200275f896004818d62003c1f565b8101906200276e919062003c4b565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462002839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000683565b73ffffffffffffffffffffffffffffffffffffffff86163014620028e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000683565b8a851462002971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d4154434800000000000000000000000000000000000000606482015260840162000683565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002a2c919062003b20565b6000604051808303816000865af19150503d806000811462002a6b576040519150601f19603f3d011682016040523d82523d6000602084013e62002a70565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905262002b5f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002fe9565b50505050565b80600162002b766020600262003ddf565b62002b82919062003ded565b6041541062002c14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c00000000000000000000000000000000000000000000606482015260840162000683565b60016041600082825462002c29919062003e07565b909155505060415460005b602081101562002cd3578160011660010362002c6957826001826020811062002c615762002c61620039eb565b015550505050565b6001816020811062002c7f5762002c7f620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002cbc919062003a49565b91508062002cca8162003a85565b91505062002c34565b506200233b62003e22565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526200233b9084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002adc565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000c7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640162000683565b600054610100900460ff1662002eaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000683565b60005b62002ec06001602062003ded565b81101562002f5b576021816020811062002ede5762002ede620039eb565b01546021826020811062002ef65762002ef6620039eb565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002f31919062003e07565b6020811062002f445762002f44620039eb565b01558062002f528162003a85565b91505062002eb2565b50565b600062002fdb8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b60006200304d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620030fc9092919063ffffffff16565b8051909150156200233b57808060200190518101906200306e9190620037f1565b6200233b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000683565b60606200240184846000858573ffffffffffffffffffffffffffffffffffffffff85163b62003188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000683565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620031b3919062003b20565b60006040518083038185875af1925050503d8060008114620031f2576040519150601f19603f3d011682016040523d82523d6000602084013e620031f7565b606091505b50915091506200320982828662003214565b979650505050505050565b606083156200322557508162002fdb565b825115620032365782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000683919062003e51565b6118298062003e6783390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462002f5b57600080fd5b8035620032aa816200327a565b919050565b803563ffffffff81168114620032aa57600080fd5b60008060008060008060a08789031215620032de57600080fd5b8635620032eb816200327a565b9550620032fb60208801620032af565b945060408701356200330d816200327a565b935060608701359250608087013567ffffffffffffffff808211156200333257600080fd5b818901915089601f8301126200334757600080fd5b8135818111156200335757600080fd5b8a60208285010111156200336a57600080fd5b6020830194508093505050509295509295509295565b600080604083850312156200339457600080fd5b6200339f83620032af565b91506020830135620033b1816200327a565b809150509250929050565b600060208284031215620033cf57600080fd5b813562002fdb816200327a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620034555762003455620033dc565b604052919050565b600082601f8301126200346f57600080fd5b8135602067ffffffffffffffff8211156200348e576200348e620033dc565b8160051b6200349f8282016200340b565b9283528481018201928281019087851115620034ba57600080fd5b83870192505b848310156200320957823582529183019190830190620034c0565b60008060008060808587031215620034f257600080fd5b84359350602085013567ffffffffffffffff808211156200351257600080fd5b62003520888389016200345d565b94506040870135915080821682146200353857600080fd5b509396929550929360600135925050565b60ff8116811462002f5b57600080fd5b600080600080600080600060e0888a0312156200357557600080fd5b8735620035828162003549565b96506200359260208901620032af565b95506040880135620035a4816200327a565b9450620035b460608901620032af565b93506080880135620035c6816200327a565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620036005762003600620033dc565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126200363e57600080fd5b8135620036556200364f82620035e3565b6200340b565b8181528460208386010111156200366b57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620036a957600080fd5b8a3567ffffffffffffffff80821115620036c257600080fd5b620036d08e838f016200345d565b9b50620036e060208e01620032af565b9a5060408d0135995060608d01359850620036fe60808e01620032af565b97506200370e60a08e016200329d565b96506200371e60c08e01620032af565b95506200372e60e08e016200329d565b94506101008d013593506101208d01359150808211156200374e57600080fd5b506200375d8d828e016200362c565b9150509295989b9194979a5092959850565b6000602082840312156200378257600080fd5b5035919050565b6000806000606084860312156200379f57600080fd5b620037aa84620032af565b92506020840135620037bc816200327a565b9150604084013567ffffffffffffffff811115620037d957600080fd5b620037e7868287016200362c565b9150509250925092565b6000602082840312156200380457600080fd5b8151801515811462002fdb57600080fd5b60005b838110156200383257818101518382015260200162003818565b8381111562002b5f5750506000910152565b600082601f8301126200385657600080fd5b8151620038676200364f82620035e3565b8181528460208386010111156200387d57600080fd5b6200240182602083016020870162003815565b600060208284031215620038a357600080fd5b815167ffffffffffffffff811115620038bb57600080fd5b620024018482850162003844565b600060208284031215620038dc57600080fd5b815162002fdb8162003549565b600081518084526200390381602086016020860162003815565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6060815260006200394a6060830186620038e9565b82810360208401526200395e8186620038e9565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620039d282850187620038e9565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003a80577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003ab95762003ab962003a1a565b5060010190565b60006020828403121562003ad357600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003b176060830184620038e9565b95945050505050565b6000825162003b3481846020870162003815565b9190910192915050565b60008060006060848603121562003b5457600080fd5b835167ffffffffffffffff8082111562003b6d57600080fd5b62003b7b8783880162003844565b9450602086015191508082111562003b9257600080fd5b5062003ba18682870162003844565b925050604084015162003bb48162003549565b809150509250925092565b60a08152600062003bd460a0830188620038e9565b828103602084015262003be88188620038e9565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000808585111562003c3057600080fd5b8386111562003c3e57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003c6757600080fd5b873562003c74816200327a565b9650602088013562003c86816200327a565b955060408801359450606088013593506080880135620035c68162003549565b600181815b8085111562003d0557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003ce95762003ce962003a1a565b8085161562003cf757918102915b93841c939080029062003cab565b509250929050565b60008262003d1e5750600162000c7c565b8162003d2d5750600062000c7c565b816001811462003d46576002811462003d515762003d71565b600191505062000c7c565b60ff84111562003d655762003d6562003a1a565b50506001821b62000c7c565b5060208310610133831016604e8410600b841016171562003d96575081810a62000c7c565b62003da2838362003ca6565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003dd75762003dd762003a1a565b029392505050565b600062002fdb838362003d0d565b60008282101562003e025762003e0262003a1a565b500390565b6000821982111562003e1d5762003e1d62003a1a565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60208152600062002fdb6020830184620038e956fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a2646970667358221220270b01f138ab314b7b3b2cc1fdbdd08476271beee2d7873498fc431d3f03324964736f6c634300080f0033", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", "0x0000000000000000000000000000000000000000000000000000000000000042": "0x01", @@ -66,6 +61,11 @@ "address": "0xc949254d682d8c9ad5682521675b8f43b102aec4", "pvtKey": "0xdfd01798f92667dbf91df722434e8fbe96af0211d4d1b82bbbbc8f1def7a814f" }, + { + "balance": "0", + "nonce": "0", + "address": "0x0000000000000000000000000000000000000000" + }, { "balance": "0", "nonce": "1", diff --git a/docker/scripts/genesis_docker.json b/docker/scripts/genesis_docker.json index 465f8a37d..84479fe56 100644 --- a/docker/scripts/genesis_docker.json +++ b/docker/scripts/genesis_docker.json @@ -1,11 +1,6 @@ { - "root": "0x52a940938311f513017f0d9b1da06123c00603bb494763bcdbc536aebefa900c", + "root": "0xa907fd86a7add05eafdb8fb6b4e1aec0ee2f23db33feb1f06070e1a19ebc97cf", "genesis": [ - { - "balance": "0", - "nonce": "0", - "address": "0x0000000000000000000000000000000000000000" - }, { "balance": "0", "nonce": "1", @@ -20,7 +15,7 @@ "balance": "100000000000000000000000", "nonce": "2", "address": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988", - "bytecode": "0x6080604052600436106200017b5760003560e01c806381b1c17411620000cf578063d02103ca116200007d578063e73758811162000060578063e73758811462000589578063ed6be5c914620005bd578063ff634ed714620005d457600080fd5b8063d02103ca1462000543578063d96a15f7146200057257600080fd5b8063a08e8a0811620000b2578063a08e8a0814620004bf578063b7e6a7d414620004e9578063bab161bf146200050e57600080fd5b806381b1c17414620004535780638624c35c146200049a57600080fd5b80633ae05047116200012d5780633e19704311620001105780633e19704314620003155780634638554914620004095780637b6323c1146200042e57600080fd5b80633ae0504714620002c75780633da8168214620002df57600080fd5b80632dfdf0b511620001625780632dfdf0b514620001e85780632f3a3d5d146200020f578063318aee3d146200023e57600080fd5b80630871e971146200018057806322e95f2c1462000199575b600080fd5b6200019762000191366004620032c4565b620005eb565b005b348015620001a657600080fd5b50620001be620001b836600462003380565b62000bdf565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015620001f557600080fd5b506200020060415481565b604051908152602001620001df565b3480156200021c57600080fd5b50604754620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200024b57600080fd5b50620002956200025d366004620033bc565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201620001df565b348015620002d457600080fd5b506200020062000c82565b348015620002ec57600080fd5b5062000304620002fe366004620034db565b62000d5c565b6040519015158152602001620001df565b3480156200032257600080fd5b50620002006200033436600462003559565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200041657600080fd5b50620001976200042836600462003688565b62000e5c565b3480156200043b57600080fd5b50620001976200044d36600462003688565b62001617565b3480156200046057600080fd5b50620001be620004723660046200376f565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620004a757600080fd5b5062000197620004b936600462003380565b620020c2565b348015620004cc57600080fd5b50620004d6600081565b60405160ff9091168152602001620001df565b348015620004f657600080fd5b50620001be6200050836600462003380565b62002340565b3480156200051b57600080fd5b506042546200052d9063ffffffff1681565b60405163ffffffff9091168152602001620001df565b3480156200055057600080fd5b50604654620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b620001976200058336600462003789565b62002409565b3480156200059657600080fd5b5062000304620005a83660046200376f565b60436020526000908152604090205460ff1681565b348015620005ca57600080fd5b506200052d600081565b348015620005e157600080fd5b50620004d6600181565b60425463ffffffff908116908616036200068c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff891662000748578534146200073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c55450000000000000000000000000000000000606482015260840162000683565b6000915062000a5c565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000849576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562000810573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008369190620037f1565b5060208101518151909450925062000a5a565b84156200085e576200085e8a88888862002656565b6200088273ffffffffffffffffffffffffffffffffffffffff8b1633308a62002a81565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200092e919081019062003890565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200097a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620009c2919081019062003890565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a349190620038c9565b60405160200162000a489392919062003935565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760415460405162000a9e98979695949392919062003972565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000b599062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000b8162000c82565b6040518263ffffffff1660e01b815260040162000ba091815260200190565b600060405180830381600087803b15801562000bbb57600080fd5b505af115801562000bd0573d6000803e3d6000fd5b50505050505050505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6041546000908190815b602081101562000d54578160011660010362000cec576001816020811062000cb85762000cb8620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000d30565b826021826020811062000d035762000d03620039eb565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b62000d3d60028362003a49565b91508062000d4b8162003a85565b91505062000c8c565b509092915050565b60008467ffffffffffffffff8416825b602081101562000e4f578160011660010362000dd95786818151811062000d975762000d97620039eb565b60200260200101518360405160200162000dbb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000e2b565b8287828151811062000def5762000def620039eb565b602002602001015160405160200162000e12929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000e3860028362003a49565b91508062000e468162003a85565b91505062000d6c565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000f04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d4544000000000000000000000000000000000000000000000000000000606482015260840162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000f9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fc3919062003ac0565b60000362001054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000606482015260840162000683565b60425463ffffffff858116911614620010f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000606482015260840162000683565b60425463ffffffff166200126e578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620011da905b8b8b63ffffffff168a62000d5c565b62001268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b620013d8565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200134a905b8b8b63ffffffff168b62000d5c565b620013d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff8516908490620014469089908b90879060240162003ada565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f20000000000000000000000000000000000000000000000000000000017905251620014c9919062003b20565b60006040518083038185875af1925050503d806000811462001508576040519150601f19603f3d011682016040523d82523d6000602084013e6200150d565b606091505b50509050806200159f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c454400000000000000000000000000000000000000000000000000000000606482015260840162000683565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b63ffffffff891660009081526043602052604090205460ff161562001699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d45440000604482015260640162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001732573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001758919062003ac0565b600003620017e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d41544348000000000000000000000000000000000000606482015260840162000683565b60425463ffffffff85811691161462001885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d41544348000000000000000000000000000000606482015260840162000683565b60425463ffffffff16620019b4578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200194690620011cb565b620019ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b62001acf565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062001a67906200133b565b62001acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff851662001c40576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001b62919062003b20565b60006040518083038185875af1925050503d806000811462001ba1576040519150601f19603f3d011682016040523d82523d6000602084013e62001ba6565b606091505b505090508062001c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f4544000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b506200204b565b60425463ffffffff9081169087160362001c7d5762001c7773ffffffffffffffffffffffffffffffffffffffff8616848462002cde565b6200204b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001faa5760475460009062001d689073ffffffffffffffffffffffffffffffffffffffff168462002d36565b905060008060008680602001905181019062001d85919062003b3e565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001dce95949392919062003bbf565b600060405180830381600087803b15801562001de957600080fd5b505af115801562001dfe573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001f989392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062002048565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562002020573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020469190620037f1565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff1615808015620020e35750600054600160ff909116105b80620020ff5750303b158015620020ff575060005460ff166001145b6200218d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840162000683565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620021ec57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556040516200226a906200326c565b604051809103906000f08015801562002287573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055620022d762002e16565b80156200233b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620024019073ffffffffffffffffffffffffffffffffffffffff168262002f5e565b949350505050565b60425463ffffffff90811690841603620024a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c4600000000000000000000000000000000000000000000606482015260840162000683565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620024f39260019263ffffffff9092169133918991899134918a919062003972565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620025d69062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d620025fe62000c82565b6040518263ffffffff1660e01b81526004016200261d91815260200190565b600060405180830381600087803b1580156200263857600080fd5b505af11580156200264d573d6000803e3d6000fd5b50505050505050565b60006200269983838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002fe292505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf000000000000000000000000000000000000000000000000000000001462002748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000683565b60008080808080806200275f896004818d62003c1f565b8101906200276e919062003c4b565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462002839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000683565b73ffffffffffffffffffffffffffffffffffffffff86163014620028e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000683565b8a851462002971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d4154434800000000000000000000000000000000000000606482015260840162000683565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002a2c919062003b20565b6000604051808303816000865af19150503d806000811462002a6b576040519150601f19603f3d011682016040523d82523d6000602084013e62002a70565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905262002b5f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002fe9565b50505050565b80600162002b766020600262003ddf565b62002b82919062003ded565b6041541062002c14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c00000000000000000000000000000000000000000000606482015260840162000683565b60016041600082825462002c29919062003e07565b909155505060415460005b602081101562002cd3578160011660010362002c6957826001826020811062002c615762002c61620039eb565b015550505050565b6001816020811062002c7f5762002c7f620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002cbc919062003a49565b91508062002cca8162003a85565b91505062002c34565b506200233b62003e22565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526200233b9084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002adc565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000c7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640162000683565b600054610100900460ff1662002eaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000683565b60005b62002ec06001602062003ded565b81101562002f5b576021816020811062002ede5762002ede620039eb565b01546021826020811062002ef65762002ef6620039eb565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002f31919062003e07565b6020811062002f445762002f44620039eb565b01558062002f528162003a85565b91505062002eb2565b50565b600062002fdb8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b60006200304d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620030fc9092919063ffffffff16565b8051909150156200233b57808060200190518101906200306e9190620037f1565b6200233b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000683565b60606200240184846000858573ffffffffffffffffffffffffffffffffffffffff85163b62003188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000683565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620031b3919062003b20565b60006040518083038185875af1925050503d8060008114620031f2576040519150601f19603f3d011682016040523d82523d6000602084013e620031f7565b606091505b50915091506200320982828662003214565b979650505050505050565b606083156200322557508162002fdb565b825115620032365782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000683919062003e51565b6118298062003e6783390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462002f5b57600080fd5b8035620032aa816200327a565b919050565b803563ffffffff81168114620032aa57600080fd5b60008060008060008060a08789031215620032de57600080fd5b8635620032eb816200327a565b9550620032fb60208801620032af565b945060408701356200330d816200327a565b935060608701359250608087013567ffffffffffffffff808211156200333257600080fd5b818901915089601f8301126200334757600080fd5b8135818111156200335757600080fd5b8a60208285010111156200336a57600080fd5b6020830194508093505050509295509295509295565b600080604083850312156200339457600080fd5b6200339f83620032af565b91506020830135620033b1816200327a565b809150509250929050565b600060208284031215620033cf57600080fd5b813562002fdb816200327a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620034555762003455620033dc565b604052919050565b600082601f8301126200346f57600080fd5b8135602067ffffffffffffffff8211156200348e576200348e620033dc565b8160051b6200349f8282016200340b565b9283528481018201928281019087851115620034ba57600080fd5b83870192505b848310156200320957823582529183019190830190620034c0565b60008060008060808587031215620034f257600080fd5b84359350602085013567ffffffffffffffff808211156200351257600080fd5b62003520888389016200345d565b94506040870135915080821682146200353857600080fd5b509396929550929360600135925050565b60ff8116811462002f5b57600080fd5b600080600080600080600060e0888a0312156200357557600080fd5b8735620035828162003549565b96506200359260208901620032af565b95506040880135620035a4816200327a565b9450620035b460608901620032af565b93506080880135620035c6816200327a565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620036005762003600620033dc565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126200363e57600080fd5b8135620036556200364f82620035e3565b6200340b565b8181528460208386010111156200366b57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620036a957600080fd5b8a3567ffffffffffffffff80821115620036c257600080fd5b620036d08e838f016200345d565b9b50620036e060208e01620032af565b9a5060408d0135995060608d01359850620036fe60808e01620032af565b97506200370e60a08e016200329d565b96506200371e60c08e01620032af565b95506200372e60e08e016200329d565b94506101008d013593506101208d01359150808211156200374e57600080fd5b506200375d8d828e016200362c565b9150509295989b9194979a5092959850565b6000602082840312156200378257600080fd5b5035919050565b6000806000606084860312156200379f57600080fd5b620037aa84620032af565b92506020840135620037bc816200327a565b9150604084013567ffffffffffffffff811115620037d957600080fd5b620037e7868287016200362c565b9150509250925092565b6000602082840312156200380457600080fd5b8151801515811462002fdb57600080fd5b60005b838110156200383257818101518382015260200162003818565b8381111562002b5f5750506000910152565b600082601f8301126200385657600080fd5b8151620038676200364f82620035e3565b8181528460208386010111156200387d57600080fd5b6200240182602083016020870162003815565b600060208284031215620038a357600080fd5b815167ffffffffffffffff811115620038bb57600080fd5b620024018482850162003844565b600060208284031215620038dc57600080fd5b815162002fdb8162003549565b600081518084526200390381602086016020860162003815565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6060815260006200394a6060830186620038e9565b82810360208401526200395e8186620038e9565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620039d282850187620038e9565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003a80577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003ab95762003ab962003a1a565b5060010190565b60006020828403121562003ad357600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003b176060830184620038e9565b95945050505050565b6000825162003b3481846020870162003815565b9190910192915050565b60008060006060848603121562003b5457600080fd5b835167ffffffffffffffff8082111562003b6d57600080fd5b62003b7b8783880162003844565b9450602086015191508082111562003b9257600080fd5b5062003ba18682870162003844565b925050604084015162003bb48162003549565b809150509250925092565b60a08152600062003bd460a0830188620038e9565b828103602084015262003be88188620038e9565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000808585111562003c3057600080fd5b8386111562003c3e57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003c6757600080fd5b873562003c74816200327a565b9650602088013562003c86816200327a565b955060408801359450606088013593506080880135620035c68162003549565b600181815b8085111562003d0557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003ce95762003ce962003a1a565b8085161562003cf757918102915b93841c939080029062003cab565b509250929050565b60008262003d1e5750600162000c7c565b8162003d2d5750600062000c7c565b816001811462003d46576002811462003d515762003d71565b600191505062000c7c565b60ff84111562003d655762003d6562003a1a565b50506001821b62000c7c565b5060208310610133831016604e8410600b841016171562003d96575081810a62000c7c565b62003da2838362003ca6565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003dd75762003dd762003a1a565b029392505050565b600062002fdb838362003d0d565b60008282101562003e025762003e0262003a1a565b500390565b6000821982111562003e1d5762003e1d62003a1a565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60208152600062002fdb6020830184620038e956fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a26469706673582212200f33d24b40d1e879f02496512d8e703a09704c5edf7d149259a9c3cf2b64250664736f6c634300080f0033", + "bytecode": "0x6080604052600436106200017b5760003560e01c806381b1c17411620000cf578063d02103ca116200007d578063e73758811162000060578063e73758811462000589578063ed6be5c914620005bd578063ff634ed714620005d457600080fd5b8063d02103ca1462000543578063d96a15f7146200057257600080fd5b8063a08e8a0811620000b2578063a08e8a0814620004bf578063b7e6a7d414620004e9578063bab161bf146200050e57600080fd5b806381b1c17414620004535780638624c35c146200049a57600080fd5b80633ae05047116200012d5780633e19704311620001105780633e19704314620003155780634638554914620004095780637b6323c1146200042e57600080fd5b80633ae0504714620002c75780633da8168214620002df57600080fd5b80632dfdf0b511620001625780632dfdf0b514620001e85780632f3a3d5d146200020f578063318aee3d146200023e57600080fd5b80630871e971146200018057806322e95f2c1462000199575b600080fd5b6200019762000191366004620032c4565b620005eb565b005b348015620001a657600080fd5b50620001be620001b836600462003380565b62000bdf565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015620001f557600080fd5b506200020060415481565b604051908152602001620001df565b3480156200021c57600080fd5b50604754620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200024b57600080fd5b50620002956200025d366004620033bc565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201620001df565b348015620002d457600080fd5b506200020062000c82565b348015620002ec57600080fd5b5062000304620002fe366004620034db565b62000d5c565b6040519015158152602001620001df565b3480156200032257600080fd5b50620002006200033436600462003559565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200041657600080fd5b50620001976200042836600462003688565b62000e5c565b3480156200043b57600080fd5b50620001976200044d36600462003688565b62001617565b3480156200046057600080fd5b50620001be620004723660046200376f565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620004a757600080fd5b5062000197620004b936600462003380565b620020c2565b348015620004cc57600080fd5b50620004d6600081565b60405160ff9091168152602001620001df565b348015620004f657600080fd5b50620001be6200050836600462003380565b62002340565b3480156200051b57600080fd5b506042546200052d9063ffffffff1681565b60405163ffffffff9091168152602001620001df565b3480156200055057600080fd5b50604654620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b620001976200058336600462003789565b62002409565b3480156200059657600080fd5b5062000304620005a83660046200376f565b60436020526000908152604090205460ff1681565b348015620005ca57600080fd5b506200052d600081565b348015620005e157600080fd5b50620004d6600181565b60425463ffffffff908116908616036200068c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff891662000748578534146200073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c55450000000000000000000000000000000000606482015260840162000683565b6000915062000a5c565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000849576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562000810573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008369190620037f1565b5060208101518151909450925062000a5a565b84156200085e576200085e8a88888862002656565b6200088273ffffffffffffffffffffffffffffffffffffffff8b1633308a62002a81565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200092e919081019062003890565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200097a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620009c2919081019062003890565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a349190620038c9565b60405160200162000a489392919062003935565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760415460405162000a9e98979695949392919062003972565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000b599062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000b8162000c82565b6040518263ffffffff1660e01b815260040162000ba091815260200190565b600060405180830381600087803b15801562000bbb57600080fd5b505af115801562000bd0573d6000803e3d6000fd5b50505050505050505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6041546000908190815b602081101562000d54578160011660010362000cec576001816020811062000cb85762000cb8620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000d30565b826021826020811062000d035762000d03620039eb565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b62000d3d60028362003a49565b91508062000d4b8162003a85565b91505062000c8c565b509092915050565b60008467ffffffffffffffff8416825b602081101562000e4f578160011660010362000dd95786818151811062000d975762000d97620039eb565b60200260200101518360405160200162000dbb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000e2b565b8287828151811062000def5762000def620039eb565b602002602001015160405160200162000e12929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000e3860028362003a49565b91508062000e468162003a85565b91505062000d6c565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000f04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d4544000000000000000000000000000000000000000000000000000000606482015260840162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000f9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fc3919062003ac0565b60000362001054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000606482015260840162000683565b60425463ffffffff858116911614620010f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000606482015260840162000683565b60425463ffffffff166200126e578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620011da905b8b8b63ffffffff168a62000d5c565b62001268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b620013d8565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200134a905b8b8b63ffffffff168b62000d5c565b620013d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff8516908490620014469089908b90879060240162003ada565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f20000000000000000000000000000000000000000000000000000000017905251620014c9919062003b20565b60006040518083038185875af1925050503d806000811462001508576040519150601f19603f3d011682016040523d82523d6000602084013e6200150d565b606091505b50509050806200159f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c454400000000000000000000000000000000000000000000000000000000606482015260840162000683565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b63ffffffff891660009081526043602052604090205460ff161562001699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d45440000604482015260640162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001732573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001758919062003ac0565b600003620017e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d41544348000000000000000000000000000000000000606482015260840162000683565b60425463ffffffff85811691161462001885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d41544348000000000000000000000000000000606482015260840162000683565b60425463ffffffff16620019b4578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200194690620011cb565b620019ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b62001acf565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062001a67906200133b565b62001acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff851662001c40576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001b62919062003b20565b60006040518083038185875af1925050503d806000811462001ba1576040519150601f19603f3d011682016040523d82523d6000602084013e62001ba6565b606091505b505090508062001c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f4544000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b506200204b565b60425463ffffffff9081169087160362001c7d5762001c7773ffffffffffffffffffffffffffffffffffffffff8616848462002cde565b6200204b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001faa5760475460009062001d689073ffffffffffffffffffffffffffffffffffffffff168462002d36565b905060008060008680602001905181019062001d85919062003b3e565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001dce95949392919062003bbf565b600060405180830381600087803b15801562001de957600080fd5b505af115801562001dfe573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001f989392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062002048565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562002020573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020469190620037f1565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff1615808015620020e35750600054600160ff909116105b80620020ff5750303b158015620020ff575060005460ff166001145b6200218d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840162000683565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620021ec57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556040516200226a906200326c565b604051809103906000f08015801562002287573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055620022d762002e16565b80156200233b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620024019073ffffffffffffffffffffffffffffffffffffffff168262002f5e565b949350505050565b60425463ffffffff90811690841603620024a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c4600000000000000000000000000000000000000000000606482015260840162000683565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620024f39260019263ffffffff9092169133918991899134918a919062003972565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620025d69062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d620025fe62000c82565b6040518263ffffffff1660e01b81526004016200261d91815260200190565b600060405180830381600087803b1580156200263857600080fd5b505af11580156200264d573d6000803e3d6000fd5b50505050505050565b60006200269983838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002fe292505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf000000000000000000000000000000000000000000000000000000001462002748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000683565b60008080808080806200275f896004818d62003c1f565b8101906200276e919062003c4b565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462002839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000683565b73ffffffffffffffffffffffffffffffffffffffff86163014620028e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000683565b8a851462002971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d4154434800000000000000000000000000000000000000606482015260840162000683565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002a2c919062003b20565b6000604051808303816000865af19150503d806000811462002a6b576040519150601f19603f3d011682016040523d82523d6000602084013e62002a70565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905262002b5f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002fe9565b50505050565b80600162002b766020600262003ddf565b62002b82919062003ded565b6041541062002c14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c00000000000000000000000000000000000000000000606482015260840162000683565b60016041600082825462002c29919062003e07565b909155505060415460005b602081101562002cd3578160011660010362002c6957826001826020811062002c615762002c61620039eb565b015550505050565b6001816020811062002c7f5762002c7f620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002cbc919062003a49565b91508062002cca8162003a85565b91505062002c34565b506200233b62003e22565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526200233b9084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002adc565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000c7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640162000683565b600054610100900460ff1662002eaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000683565b60005b62002ec06001602062003ded565b81101562002f5b576021816020811062002ede5762002ede620039eb565b01546021826020811062002ef65762002ef6620039eb565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002f31919062003e07565b6020811062002f445762002f44620039eb565b01558062002f528162003a85565b91505062002eb2565b50565b600062002fdb8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b60006200304d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620030fc9092919063ffffffff16565b8051909150156200233b57808060200190518101906200306e9190620037f1565b6200233b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000683565b60606200240184846000858573ffffffffffffffffffffffffffffffffffffffff85163b62003188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000683565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620031b3919062003b20565b60006040518083038185875af1925050503d8060008114620031f2576040519150601f19603f3d011682016040523d82523d6000602084013e620031f7565b606091505b50915091506200320982828662003214565b979650505050505050565b606083156200322557508162002fdb565b825115620032365782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000683919062003e51565b6118298062003e6783390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462002f5b57600080fd5b8035620032aa816200327a565b919050565b803563ffffffff81168114620032aa57600080fd5b60008060008060008060a08789031215620032de57600080fd5b8635620032eb816200327a565b9550620032fb60208801620032af565b945060408701356200330d816200327a565b935060608701359250608087013567ffffffffffffffff808211156200333257600080fd5b818901915089601f8301126200334757600080fd5b8135818111156200335757600080fd5b8a60208285010111156200336a57600080fd5b6020830194508093505050509295509295509295565b600080604083850312156200339457600080fd5b6200339f83620032af565b91506020830135620033b1816200327a565b809150509250929050565b600060208284031215620033cf57600080fd5b813562002fdb816200327a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620034555762003455620033dc565b604052919050565b600082601f8301126200346f57600080fd5b8135602067ffffffffffffffff8211156200348e576200348e620033dc565b8160051b6200349f8282016200340b565b9283528481018201928281019087851115620034ba57600080fd5b83870192505b848310156200320957823582529183019190830190620034c0565b60008060008060808587031215620034f257600080fd5b84359350602085013567ffffffffffffffff808211156200351257600080fd5b62003520888389016200345d565b94506040870135915080821682146200353857600080fd5b509396929550929360600135925050565b60ff8116811462002f5b57600080fd5b600080600080600080600060e0888a0312156200357557600080fd5b8735620035828162003549565b96506200359260208901620032af565b95506040880135620035a4816200327a565b9450620035b460608901620032af565b93506080880135620035c6816200327a565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620036005762003600620033dc565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126200363e57600080fd5b8135620036556200364f82620035e3565b6200340b565b8181528460208386010111156200366b57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620036a957600080fd5b8a3567ffffffffffffffff80821115620036c257600080fd5b620036d08e838f016200345d565b9b50620036e060208e01620032af565b9a5060408d0135995060608d01359850620036fe60808e01620032af565b97506200370e60a08e016200329d565b96506200371e60c08e01620032af565b95506200372e60e08e016200329d565b94506101008d013593506101208d01359150808211156200374e57600080fd5b506200375d8d828e016200362c565b9150509295989b9194979a5092959850565b6000602082840312156200378257600080fd5b5035919050565b6000806000606084860312156200379f57600080fd5b620037aa84620032af565b92506020840135620037bc816200327a565b9150604084013567ffffffffffffffff811115620037d957600080fd5b620037e7868287016200362c565b9150509250925092565b6000602082840312156200380457600080fd5b8151801515811462002fdb57600080fd5b60005b838110156200383257818101518382015260200162003818565b8381111562002b5f5750506000910152565b600082601f8301126200385657600080fd5b8151620038676200364f82620035e3565b8181528460208386010111156200387d57600080fd5b6200240182602083016020870162003815565b600060208284031215620038a357600080fd5b815167ffffffffffffffff811115620038bb57600080fd5b620024018482850162003844565b600060208284031215620038dc57600080fd5b815162002fdb8162003549565b600081518084526200390381602086016020860162003815565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6060815260006200394a6060830186620038e9565b82810360208401526200395e8186620038e9565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620039d282850187620038e9565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003a80577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003ab95762003ab962003a1a565b5060010190565b60006020828403121562003ad357600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003b176060830184620038e9565b95945050505050565b6000825162003b3481846020870162003815565b9190910192915050565b60008060006060848603121562003b5457600080fd5b835167ffffffffffffffff8082111562003b6d57600080fd5b62003b7b8783880162003844565b9450602086015191508082111562003b9257600080fd5b5062003ba18682870162003844565b925050604084015162003bb48162003549565b809150509250925092565b60a08152600062003bd460a0830188620038e9565b828103602084015262003be88188620038e9565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000808585111562003c3057600080fd5b8386111562003c3e57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003c6757600080fd5b873562003c74816200327a565b9650602088013562003c86816200327a565b955060408801359450606088013593506080880135620035c68162003549565b600181815b8085111562003d0557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003ce95762003ce962003a1a565b8085161562003cf757918102915b93841c939080029062003cab565b509250929050565b60008262003d1e5750600162000c7c565b8162003d2d5750600062000c7c565b816001811462003d46576002811462003d515762003d71565b600191505062000c7c565b60ff84111562003d655762003d6562003a1a565b50506001821b62000c7c565b5060208310610133831016604e8410600b841016171562003d96575081810a62000c7c565b62003da2838362003ca6565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003dd75762003dd762003a1a565b029392505050565b600062002fdb838362003d0d565b60008282101562003e025762003e0262003a1a565b500390565b6000821982111562003e1d5762003e1d62003a1a565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60208152600062002fdb6020830184620038e956fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a2646970667358221220270b01f138ab314b7b3b2cc1fdbdd08476271beee2d7873498fc431d3f03324964736f6c634300080f0033", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", "0x0000000000000000000000000000000000000000000000000000000000000042": "0x01", @@ -72,6 +67,11 @@ "address": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", "pvtKey": "0x00" }, + { + "balance": "0", + "nonce": "0", + "address": "0x0000000000000000000000000000000000000000" + }, { "balance": "0", "nonce": "1", From abc5c94b810fe63af47c03725a9d6d3afd1ad97a Mon Sep 17 00:00:00 2001 From: invocamanman Date: Tue, 8 Nov 2022 18:55:32 +0100 Subject: [PATCH 13/71] support dai permit --- compiled-contracts/Bridge.json | 4 +- compiled-contracts/BridgeMock.json | 4 +- compiled-contracts/ProofOfEfficiency.json | 4 +- compiled-contracts/ProofOfEfficiencyMock.json | 4 +- contracts/Bridge.sol | 146 +++- contracts/ProofOfEfficiency.sol | 2 +- contracts/mocks/DAI.sol | 239 ++++++ contracts/mocks/Uni.sol | 799 ++++++++++++++++++ deployment/deployment_v2-0/README.md | 18 + deployment/deployment_v2-0/deployPoE_v2-0.js | 4 +- hardhat.config.js | 18 + src/permit-helper.js | 115 ++- test/contracts/bridge.test.js | 197 +++++ 13 files changed, 1503 insertions(+), 51 deletions(-) create mode 100644 contracts/mocks/DAI.sol create mode 100644 contracts/mocks/Uni.sol diff --git a/compiled-contracts/Bridge.json b/compiled-contracts/Bridge.json index a02873a31..9eed5f559 100644 --- a/compiled-contracts/Bridge.json +++ b/compiled-contracts/Bridge.json @@ -621,8 +621,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506156c5806100206000396000f3fe6080604052600436106200017b5760003560e01c806381b1c17411620000cf578063d02103ca116200007d578063e73758811162000060578063e73758811462000589578063ed6be5c914620005bd578063ff634ed714620005d457600080fd5b8063d02103ca1462000543578063d96a15f7146200057257600080fd5b8063a08e8a0811620000b2578063a08e8a0814620004bf578063b7e6a7d414620004e9578063bab161bf146200050e57600080fd5b806381b1c17414620004535780638624c35c146200049a57600080fd5b80633ae05047116200012d5780633e19704311620001105780633e19704314620003155780634638554914620004095780637b6323c1146200042e57600080fd5b80633ae0504714620002c75780633da8168214620002df57600080fd5b80632dfdf0b511620001625780632dfdf0b514620001e85780632f3a3d5d146200020f578063318aee3d146200023e57600080fd5b80630871e971146200018057806322e95f2c1462000199575b600080fd5b6200019762000191366004620032c4565b620005eb565b005b348015620001a657600080fd5b50620001be620001b836600462003380565b62000bdf565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015620001f557600080fd5b506200020060415481565b604051908152602001620001df565b3480156200021c57600080fd5b50604754620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200024b57600080fd5b50620002956200025d366004620033bc565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201620001df565b348015620002d457600080fd5b506200020062000c82565b348015620002ec57600080fd5b5062000304620002fe366004620034db565b62000d5c565b6040519015158152602001620001df565b3480156200032257600080fd5b50620002006200033436600462003559565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200041657600080fd5b50620001976200042836600462003688565b62000e5c565b3480156200043b57600080fd5b50620001976200044d36600462003688565b62001617565b3480156200046057600080fd5b50620001be620004723660046200376f565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620004a757600080fd5b5062000197620004b936600462003380565b620020c2565b348015620004cc57600080fd5b50620004d6600081565b60405160ff9091168152602001620001df565b348015620004f657600080fd5b50620001be6200050836600462003380565b62002340565b3480156200051b57600080fd5b506042546200052d9063ffffffff1681565b60405163ffffffff9091168152602001620001df565b3480156200055057600080fd5b50604654620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b620001976200058336600462003789565b62002409565b3480156200059657600080fd5b5062000304620005a83660046200376f565b60436020526000908152604090205460ff1681565b348015620005ca57600080fd5b506200052d600081565b348015620005e157600080fd5b50620004d6600181565b60425463ffffffff908116908616036200068c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff891662000748578534146200073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c55450000000000000000000000000000000000606482015260840162000683565b6000915062000a5c565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000849576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562000810573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008369190620037f1565b5060208101518151909450925062000a5a565b84156200085e576200085e8a88888862002656565b6200088273ffffffffffffffffffffffffffffffffffffffff8b1633308a62002a81565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200092e919081019062003890565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200097a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620009c2919081019062003890565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a349190620038c9565b60405160200162000a489392919062003935565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760415460405162000a9e98979695949392919062003972565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000b599062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000b8162000c82565b6040518263ffffffff1660e01b815260040162000ba091815260200190565b600060405180830381600087803b15801562000bbb57600080fd5b505af115801562000bd0573d6000803e3d6000fd5b50505050505050505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6041546000908190815b602081101562000d54578160011660010362000cec576001816020811062000cb85762000cb8620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000d30565b826021826020811062000d035762000d03620039eb565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b62000d3d60028362003a49565b91508062000d4b8162003a85565b91505062000c8c565b509092915050565b60008467ffffffffffffffff8416825b602081101562000e4f578160011660010362000dd95786818151811062000d975762000d97620039eb565b60200260200101518360405160200162000dbb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000e2b565b8287828151811062000def5762000def620039eb565b602002602001015160405160200162000e12929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000e3860028362003a49565b91508062000e468162003a85565b91505062000d6c565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000f04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d4544000000000000000000000000000000000000000000000000000000606482015260840162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000f9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fc3919062003ac0565b60000362001054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000606482015260840162000683565b60425463ffffffff858116911614620010f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000606482015260840162000683565b60425463ffffffff166200126e578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620011da905b8b8b63ffffffff168a62000d5c565b62001268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b620013d8565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200134a905b8b8b63ffffffff168b62000d5c565b620013d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff8516908490620014469089908b90879060240162003ada565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f20000000000000000000000000000000000000000000000000000000017905251620014c9919062003b20565b60006040518083038185875af1925050503d806000811462001508576040519150601f19603f3d011682016040523d82523d6000602084013e6200150d565b606091505b50509050806200159f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c454400000000000000000000000000000000000000000000000000000000606482015260840162000683565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b63ffffffff891660009081526043602052604090205460ff161562001699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d45440000604482015260640162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001732573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001758919062003ac0565b600003620017e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d41544348000000000000000000000000000000000000606482015260840162000683565b60425463ffffffff85811691161462001885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d41544348000000000000000000000000000000606482015260840162000683565b60425463ffffffff16620019b4578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200194690620011cb565b620019ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b62001acf565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062001a67906200133b565b62001acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff851662001c40576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001b62919062003b20565b60006040518083038185875af1925050503d806000811462001ba1576040519150601f19603f3d011682016040523d82523d6000602084013e62001ba6565b606091505b505090508062001c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f4544000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b506200204b565b60425463ffffffff9081169087160362001c7d5762001c7773ffffffffffffffffffffffffffffffffffffffff8616848462002cde565b6200204b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001faa5760475460009062001d689073ffffffffffffffffffffffffffffffffffffffff168462002d36565b905060008060008680602001905181019062001d85919062003b3e565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001dce95949392919062003bbf565b600060405180830381600087803b15801562001de957600080fd5b505af115801562001dfe573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001f989392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062002048565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562002020573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020469190620037f1565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff1615808015620020e35750600054600160ff909116105b80620020ff5750303b158015620020ff575060005460ff166001145b6200218d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840162000683565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620021ec57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556040516200226a906200326c565b604051809103906000f08015801562002287573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055620022d762002e16565b80156200233b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620024019073ffffffffffffffffffffffffffffffffffffffff168262002f5e565b949350505050565b60425463ffffffff90811690841603620024a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c4600000000000000000000000000000000000000000000606482015260840162000683565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620024f39260019263ffffffff9092169133918991899134918a919062003972565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620025d69062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d620025fe62000c82565b6040518263ffffffff1660e01b81526004016200261d91815260200190565b600060405180830381600087803b1580156200263857600080fd5b505af11580156200264d573d6000803e3d6000fd5b50505050505050565b60006200269983838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002fe292505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf000000000000000000000000000000000000000000000000000000001462002748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000683565b60008080808080806200275f896004818d62003c1f565b8101906200276e919062003c4b565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462002839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000683565b73ffffffffffffffffffffffffffffffffffffffff86163014620028e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000683565b8a851462002971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d4154434800000000000000000000000000000000000000606482015260840162000683565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002a2c919062003b20565b6000604051808303816000865af19150503d806000811462002a6b576040519150601f19603f3d011682016040523d82523d6000602084013e62002a70565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905262002b5f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002fe9565b50505050565b80600162002b766020600262003ddf565b62002b82919062003ded565b6041541062002c14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c00000000000000000000000000000000000000000000606482015260840162000683565b60016041600082825462002c29919062003e07565b909155505060415460005b602081101562002cd3578160011660010362002c6957826001826020811062002c615762002c61620039eb565b015550505050565b6001816020811062002c7f5762002c7f620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002cbc919062003a49565b91508062002cca8162003a85565b91505062002c34565b506200233b62003e22565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526200233b9084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002adc565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000c7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640162000683565b600054610100900460ff1662002eaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000683565b60005b62002ec06001602062003ded565b81101562002f5b576021816020811062002ede5762002ede620039eb565b01546021826020811062002ef65762002ef6620039eb565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002f31919062003e07565b6020811062002f445762002f44620039eb565b01558062002f528162003a85565b91505062002eb2565b50565b600062002fdb8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b60006200304d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620030fc9092919063ffffffff16565b8051909150156200233b57808060200190518101906200306e9190620037f1565b6200233b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000683565b60606200240184846000858573ffffffffffffffffffffffffffffffffffffffff85163b62003188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000683565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620031b3919062003b20565b60006040518083038185875af1925050503d8060008114620031f2576040519150601f19603f3d011682016040523d82523d6000602084013e620031f7565b606091505b50915091506200320982828662003214565b979650505050505050565b606083156200322557508162002fdb565b825115620032365782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000683919062003e51565b6118298062003e6783390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462002f5b57600080fd5b8035620032aa816200327a565b919050565b803563ffffffff81168114620032aa57600080fd5b60008060008060008060a08789031215620032de57600080fd5b8635620032eb816200327a565b9550620032fb60208801620032af565b945060408701356200330d816200327a565b935060608701359250608087013567ffffffffffffffff808211156200333257600080fd5b818901915089601f8301126200334757600080fd5b8135818111156200335757600080fd5b8a60208285010111156200336a57600080fd5b6020830194508093505050509295509295509295565b600080604083850312156200339457600080fd5b6200339f83620032af565b91506020830135620033b1816200327a565b809150509250929050565b600060208284031215620033cf57600080fd5b813562002fdb816200327a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620034555762003455620033dc565b604052919050565b600082601f8301126200346f57600080fd5b8135602067ffffffffffffffff8211156200348e576200348e620033dc565b8160051b6200349f8282016200340b565b9283528481018201928281019087851115620034ba57600080fd5b83870192505b848310156200320957823582529183019190830190620034c0565b60008060008060808587031215620034f257600080fd5b84359350602085013567ffffffffffffffff808211156200351257600080fd5b62003520888389016200345d565b94506040870135915080821682146200353857600080fd5b509396929550929360600135925050565b60ff8116811462002f5b57600080fd5b600080600080600080600060e0888a0312156200357557600080fd5b8735620035828162003549565b96506200359260208901620032af565b95506040880135620035a4816200327a565b9450620035b460608901620032af565b93506080880135620035c6816200327a565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620036005762003600620033dc565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126200363e57600080fd5b8135620036556200364f82620035e3565b6200340b565b8181528460208386010111156200366b57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620036a957600080fd5b8a3567ffffffffffffffff80821115620036c257600080fd5b620036d08e838f016200345d565b9b50620036e060208e01620032af565b9a5060408d0135995060608d01359850620036fe60808e01620032af565b97506200370e60a08e016200329d565b96506200371e60c08e01620032af565b95506200372e60e08e016200329d565b94506101008d013593506101208d01359150808211156200374e57600080fd5b506200375d8d828e016200362c565b9150509295989b9194979a5092959850565b6000602082840312156200378257600080fd5b5035919050565b6000806000606084860312156200379f57600080fd5b620037aa84620032af565b92506020840135620037bc816200327a565b9150604084013567ffffffffffffffff811115620037d957600080fd5b620037e7868287016200362c565b9150509250925092565b6000602082840312156200380457600080fd5b8151801515811462002fdb57600080fd5b60005b838110156200383257818101518382015260200162003818565b8381111562002b5f5750506000910152565b600082601f8301126200385657600080fd5b8151620038676200364f82620035e3565b8181528460208386010111156200387d57600080fd5b6200240182602083016020870162003815565b600060208284031215620038a357600080fd5b815167ffffffffffffffff811115620038bb57600080fd5b620024018482850162003844565b600060208284031215620038dc57600080fd5b815162002fdb8162003549565b600081518084526200390381602086016020860162003815565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6060815260006200394a6060830186620038e9565b82810360208401526200395e8186620038e9565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620039d282850187620038e9565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003a80577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003ab95762003ab962003a1a565b5060010190565b60006020828403121562003ad357600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003b176060830184620038e9565b95945050505050565b6000825162003b3481846020870162003815565b9190910192915050565b60008060006060848603121562003b5457600080fd5b835167ffffffffffffffff8082111562003b6d57600080fd5b62003b7b8783880162003844565b9450602086015191508082111562003b9257600080fd5b5062003ba18682870162003844565b925050604084015162003bb48162003549565b809150509250925092565b60a08152600062003bd460a0830188620038e9565b828103602084015262003be88188620038e9565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000808585111562003c3057600080fd5b8386111562003c3e57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003c6757600080fd5b873562003c74816200327a565b9650602088013562003c86816200327a565b955060408801359450606088013593506080880135620035c68162003549565b600181815b8085111562003d0557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003ce95762003ce962003a1a565b8085161562003cf757918102915b93841c939080029062003cab565b509250929050565b60008262003d1e5750600162000c7c565b8162003d2d5750600062000c7c565b816001811462003d46576002811462003d515762003d71565b600191505062000c7c565b60ff84111562003d655762003d6562003a1a565b50506001821b62000c7c565b5060208310610133831016604e8410600b841016171562003d96575081810a62000c7c565b62003da2838362003ca6565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003dd75762003dd762003a1a565b029392505050565b600062002fdb838362003d0d565b60008282101562003e025762003e0262003a1a565b500390565b6000821982111562003e1d5762003e1d62003a1a565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60208152600062002fdb6020830184620038e956fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a2646970667358221220270b01f138ab314b7b3b2cc1fdbdd08476271beee2d7873498fc431d3f03324964736f6c634300080f0033", - "deployedBytecode": "0x6080604052600436106200017b5760003560e01c806381b1c17411620000cf578063d02103ca116200007d578063e73758811162000060578063e73758811462000589578063ed6be5c914620005bd578063ff634ed714620005d457600080fd5b8063d02103ca1462000543578063d96a15f7146200057257600080fd5b8063a08e8a0811620000b2578063a08e8a0814620004bf578063b7e6a7d414620004e9578063bab161bf146200050e57600080fd5b806381b1c17414620004535780638624c35c146200049a57600080fd5b80633ae05047116200012d5780633e19704311620001105780633e19704314620003155780634638554914620004095780637b6323c1146200042e57600080fd5b80633ae0504714620002c75780633da8168214620002df57600080fd5b80632dfdf0b511620001625780632dfdf0b514620001e85780632f3a3d5d146200020f578063318aee3d146200023e57600080fd5b80630871e971146200018057806322e95f2c1462000199575b600080fd5b6200019762000191366004620032c4565b620005eb565b005b348015620001a657600080fd5b50620001be620001b836600462003380565b62000bdf565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015620001f557600080fd5b506200020060415481565b604051908152602001620001df565b3480156200021c57600080fd5b50604754620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200024b57600080fd5b50620002956200025d366004620033bc565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201620001df565b348015620002d457600080fd5b506200020062000c82565b348015620002ec57600080fd5b5062000304620002fe366004620034db565b62000d5c565b6040519015158152602001620001df565b3480156200032257600080fd5b50620002006200033436600462003559565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200041657600080fd5b50620001976200042836600462003688565b62000e5c565b3480156200043b57600080fd5b50620001976200044d36600462003688565b62001617565b3480156200046057600080fd5b50620001be620004723660046200376f565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620004a757600080fd5b5062000197620004b936600462003380565b620020c2565b348015620004cc57600080fd5b50620004d6600081565b60405160ff9091168152602001620001df565b348015620004f657600080fd5b50620001be6200050836600462003380565b62002340565b3480156200051b57600080fd5b506042546200052d9063ffffffff1681565b60405163ffffffff9091168152602001620001df565b3480156200055057600080fd5b50604654620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b620001976200058336600462003789565b62002409565b3480156200059657600080fd5b5062000304620005a83660046200376f565b60436020526000908152604090205460ff1681565b348015620005ca57600080fd5b506200052d600081565b348015620005e157600080fd5b50620004d6600181565b60425463ffffffff908116908616036200068c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff891662000748578534146200073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c55450000000000000000000000000000000000606482015260840162000683565b6000915062000a5c565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000849576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562000810573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008369190620037f1565b5060208101518151909450925062000a5a565b84156200085e576200085e8a88888862002656565b6200088273ffffffffffffffffffffffffffffffffffffffff8b1633308a62002a81565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200092e919081019062003890565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200097a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620009c2919081019062003890565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a349190620038c9565b60405160200162000a489392919062003935565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760415460405162000a9e98979695949392919062003972565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000b599062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000b8162000c82565b6040518263ffffffff1660e01b815260040162000ba091815260200190565b600060405180830381600087803b15801562000bbb57600080fd5b505af115801562000bd0573d6000803e3d6000fd5b50505050505050505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6041546000908190815b602081101562000d54578160011660010362000cec576001816020811062000cb85762000cb8620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000d30565b826021826020811062000d035762000d03620039eb565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b62000d3d60028362003a49565b91508062000d4b8162003a85565b91505062000c8c565b509092915050565b60008467ffffffffffffffff8416825b602081101562000e4f578160011660010362000dd95786818151811062000d975762000d97620039eb565b60200260200101518360405160200162000dbb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000e2b565b8287828151811062000def5762000def620039eb565b602002602001015160405160200162000e12929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000e3860028362003a49565b91508062000e468162003a85565b91505062000d6c565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000f04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d4544000000000000000000000000000000000000000000000000000000606482015260840162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000f9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fc3919062003ac0565b60000362001054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000606482015260840162000683565b60425463ffffffff858116911614620010f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000606482015260840162000683565b60425463ffffffff166200126e578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620011da905b8b8b63ffffffff168a62000d5c565b62001268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b620013d8565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200134a905b8b8b63ffffffff168b62000d5c565b620013d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff8516908490620014469089908b90879060240162003ada565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f20000000000000000000000000000000000000000000000000000000017905251620014c9919062003b20565b60006040518083038185875af1925050503d806000811462001508576040519150601f19603f3d011682016040523d82523d6000602084013e6200150d565b606091505b50509050806200159f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c454400000000000000000000000000000000000000000000000000000000606482015260840162000683565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b63ffffffff891660009081526043602052604090205460ff161562001699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d45440000604482015260640162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001732573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001758919062003ac0565b600003620017e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d41544348000000000000000000000000000000000000606482015260840162000683565b60425463ffffffff85811691161462001885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d41544348000000000000000000000000000000606482015260840162000683565b60425463ffffffff16620019b4578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200194690620011cb565b620019ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b62001acf565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062001a67906200133b565b62001acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff851662001c40576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001b62919062003b20565b60006040518083038185875af1925050503d806000811462001ba1576040519150601f19603f3d011682016040523d82523d6000602084013e62001ba6565b606091505b505090508062001c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f4544000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b506200204b565b60425463ffffffff9081169087160362001c7d5762001c7773ffffffffffffffffffffffffffffffffffffffff8616848462002cde565b6200204b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001faa5760475460009062001d689073ffffffffffffffffffffffffffffffffffffffff168462002d36565b905060008060008680602001905181019062001d85919062003b3e565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001dce95949392919062003bbf565b600060405180830381600087803b15801562001de957600080fd5b505af115801562001dfe573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001f989392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062002048565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562002020573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020469190620037f1565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff1615808015620020e35750600054600160ff909116105b80620020ff5750303b158015620020ff575060005460ff166001145b6200218d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840162000683565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620021ec57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556040516200226a906200326c565b604051809103906000f08015801562002287573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055620022d762002e16565b80156200233b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620024019073ffffffffffffffffffffffffffffffffffffffff168262002f5e565b949350505050565b60425463ffffffff90811690841603620024a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c4600000000000000000000000000000000000000000000606482015260840162000683565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620024f39260019263ffffffff9092169133918991899134918a919062003972565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620025d69062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d620025fe62000c82565b6040518263ffffffff1660e01b81526004016200261d91815260200190565b600060405180830381600087803b1580156200263857600080fd5b505af11580156200264d573d6000803e3d6000fd5b50505050505050565b60006200269983838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002fe292505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf000000000000000000000000000000000000000000000000000000001462002748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000683565b60008080808080806200275f896004818d62003c1f565b8101906200276e919062003c4b565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462002839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000683565b73ffffffffffffffffffffffffffffffffffffffff86163014620028e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000683565b8a851462002971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d4154434800000000000000000000000000000000000000606482015260840162000683565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002a2c919062003b20565b6000604051808303816000865af19150503d806000811462002a6b576040519150601f19603f3d011682016040523d82523d6000602084013e62002a70565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905262002b5f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002fe9565b50505050565b80600162002b766020600262003ddf565b62002b82919062003ded565b6041541062002c14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c00000000000000000000000000000000000000000000606482015260840162000683565b60016041600082825462002c29919062003e07565b909155505060415460005b602081101562002cd3578160011660010362002c6957826001826020811062002c615762002c61620039eb565b015550505050565b6001816020811062002c7f5762002c7f620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002cbc919062003a49565b91508062002cca8162003a85565b91505062002c34565b506200233b62003e22565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526200233b9084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002adc565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000c7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640162000683565b600054610100900460ff1662002eaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000683565b60005b62002ec06001602062003ded565b81101562002f5b576021816020811062002ede5762002ede620039eb565b01546021826020811062002ef65762002ef6620039eb565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002f31919062003e07565b6020811062002f445762002f44620039eb565b01558062002f528162003a85565b91505062002eb2565b50565b600062002fdb8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b60006200304d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620030fc9092919063ffffffff16565b8051909150156200233b57808060200190518101906200306e9190620037f1565b6200233b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000683565b60606200240184846000858573ffffffffffffffffffffffffffffffffffffffff85163b62003188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000683565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620031b3919062003b20565b60006040518083038185875af1925050503d8060008114620031f2576040519150601f19603f3d011682016040523d82523d6000602084013e620031f7565b606091505b50915091506200320982828662003214565b979650505050505050565b606083156200322557508162002fdb565b825115620032365782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000683919062003e51565b6118298062003e6783390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462002f5b57600080fd5b8035620032aa816200327a565b919050565b803563ffffffff81168114620032aa57600080fd5b60008060008060008060a08789031215620032de57600080fd5b8635620032eb816200327a565b9550620032fb60208801620032af565b945060408701356200330d816200327a565b935060608701359250608087013567ffffffffffffffff808211156200333257600080fd5b818901915089601f8301126200334757600080fd5b8135818111156200335757600080fd5b8a60208285010111156200336a57600080fd5b6020830194508093505050509295509295509295565b600080604083850312156200339457600080fd5b6200339f83620032af565b91506020830135620033b1816200327a565b809150509250929050565b600060208284031215620033cf57600080fd5b813562002fdb816200327a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620034555762003455620033dc565b604052919050565b600082601f8301126200346f57600080fd5b8135602067ffffffffffffffff8211156200348e576200348e620033dc565b8160051b6200349f8282016200340b565b9283528481018201928281019087851115620034ba57600080fd5b83870192505b848310156200320957823582529183019190830190620034c0565b60008060008060808587031215620034f257600080fd5b84359350602085013567ffffffffffffffff808211156200351257600080fd5b62003520888389016200345d565b94506040870135915080821682146200353857600080fd5b509396929550929360600135925050565b60ff8116811462002f5b57600080fd5b600080600080600080600060e0888a0312156200357557600080fd5b8735620035828162003549565b96506200359260208901620032af565b95506040880135620035a4816200327a565b9450620035b460608901620032af565b93506080880135620035c6816200327a565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620036005762003600620033dc565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126200363e57600080fd5b8135620036556200364f82620035e3565b6200340b565b8181528460208386010111156200366b57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620036a957600080fd5b8a3567ffffffffffffffff80821115620036c257600080fd5b620036d08e838f016200345d565b9b50620036e060208e01620032af565b9a5060408d0135995060608d01359850620036fe60808e01620032af565b97506200370e60a08e016200329d565b96506200371e60c08e01620032af565b95506200372e60e08e016200329d565b94506101008d013593506101208d01359150808211156200374e57600080fd5b506200375d8d828e016200362c565b9150509295989b9194979a5092959850565b6000602082840312156200378257600080fd5b5035919050565b6000806000606084860312156200379f57600080fd5b620037aa84620032af565b92506020840135620037bc816200327a565b9150604084013567ffffffffffffffff811115620037d957600080fd5b620037e7868287016200362c565b9150509250925092565b6000602082840312156200380457600080fd5b8151801515811462002fdb57600080fd5b60005b838110156200383257818101518382015260200162003818565b8381111562002b5f5750506000910152565b600082601f8301126200385657600080fd5b8151620038676200364f82620035e3565b8181528460208386010111156200387d57600080fd5b6200240182602083016020870162003815565b600060208284031215620038a357600080fd5b815167ffffffffffffffff811115620038bb57600080fd5b620024018482850162003844565b600060208284031215620038dc57600080fd5b815162002fdb8162003549565b600081518084526200390381602086016020860162003815565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6060815260006200394a6060830186620038e9565b82810360208401526200395e8186620038e9565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620039d282850187620038e9565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003a80577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003ab95762003ab962003a1a565b5060010190565b60006020828403121562003ad357600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003b176060830184620038e9565b95945050505050565b6000825162003b3481846020870162003815565b9190910192915050565b60008060006060848603121562003b5457600080fd5b835167ffffffffffffffff8082111562003b6d57600080fd5b62003b7b8783880162003844565b9450602086015191508082111562003b9257600080fd5b5062003ba18682870162003844565b925050604084015162003bb48162003549565b809150509250925092565b60a08152600062003bd460a0830188620038e9565b828103602084015262003be88188620038e9565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000808585111562003c3057600080fd5b8386111562003c3e57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003c6757600080fd5b873562003c74816200327a565b9650602088013562003c86816200327a565b955060408801359450606088013593506080880135620035c68162003549565b600181815b8085111562003d0557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003ce95762003ce962003a1a565b8085161562003cf757918102915b93841c939080029062003cab565b509250929050565b60008262003d1e5750600162000c7c565b8162003d2d5750600062000c7c565b816001811462003d46576002811462003d515762003d71565b600191505062000c7c565b60ff84111562003d655762003d6562003a1a565b50506001821b62000c7c565b5060208310610133831016604e8410600b841016171562003d96575081810a62000c7c565b62003da2838362003ca6565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003dd75762003dd762003a1a565b029392505050565b600062002fdb838362003d0d565b60008282101562003e025762003e0262003a1a565b500390565b6000821982111562003e1d5762003e1d62003a1a565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60208152600062002fdb6020830184620038e956fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a2646970667358221220270b01f138ab314b7b3b2cc1fdbdd08476271beee2d7873498fc431d3f03324964736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50615a5b806100206000396000f3fe6080604052600436106200017b5760003560e01c806381b1c17411620000cf578063d02103ca116200007d578063e73758811162000060578063e73758811462000589578063ed6be5c914620005bd578063ff634ed714620005d457600080fd5b8063d02103ca1462000543578063d96a15f7146200057257600080fd5b8063a08e8a0811620000b2578063a08e8a0814620004bf578063b7e6a7d414620004e9578063bab161bf146200050e57600080fd5b806381b1c17414620004535780638624c35c146200049a57600080fd5b80633ae05047116200012d5780633e19704311620001105780633e19704314620003155780634638554914620004095780637b6323c1146200042e57600080fd5b80633ae0504714620002c75780633da8168214620002df57600080fd5b80632dfdf0b511620001625780632dfdf0b514620001e85780632f3a3d5d146200020f578063318aee3d146200023e57600080fd5b80630871e971146200018057806322e95f2c1462000199575b600080fd5b6200019762000191366004620035c3565b620005eb565b005b348015620001a657600080fd5b50620001be620001b83660046200367f565b62000bdf565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015620001f557600080fd5b506200020060415481565b604051908152602001620001df565b3480156200021c57600080fd5b50604754620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200024b57600080fd5b50620002956200025d366004620036bb565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201620001df565b348015620002d457600080fd5b506200020062000c82565b348015620002ec57600080fd5b5062000304620002fe366004620037da565b62000d5c565b6040519015158152602001620001df565b3480156200032257600080fd5b50620002006200033436600462003858565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200041657600080fd5b50620001976200042836600462003987565b62000e5c565b3480156200043b57600080fd5b50620001976200044d36600462003987565b62001617565b3480156200046057600080fd5b50620001be6200047236600462003a6e565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620004a757600080fd5b5062000197620004b93660046200367f565b620020c2565b348015620004cc57600080fd5b50620004d6600081565b60405160ff9091168152602001620001df565b348015620004f657600080fd5b50620001be620005083660046200367f565b62002340565b3480156200051b57600080fd5b506042546200052d9063ffffffff1681565b60405163ffffffff9091168152602001620001df565b3480156200055057600080fd5b50604654620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b620001976200058336600462003a88565b62002409565b3480156200059657600080fd5b5062000304620005a836600462003a6e565b60436020526000908152604090205460ff1681565b348015620005ca57600080fd5b506200052d600081565b348015620005e157600080fd5b50620004d6600181565b60425463ffffffff908116908616036200068c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff891662000748578534146200073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c55450000000000000000000000000000000000606482015260840162000683565b6000915062000a5c565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000849576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562000810573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000836919062003aff565b5060208101518151909450925062000a5a565b84156200085e576200085e8a88888862002656565b6200088273ffffffffffffffffffffffffffffffffffffffff8b1633308a62002d80565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200092e919081019062003b9a565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200097a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620009c2919081019062003b9a565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a34919062003bd3565b60405160200162000a489392919062003c3f565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760415460405162000a9e98979695949392919062003c7c565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000b599062002e64565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000b8162000c82565b6040518263ffffffff1660e01b815260040162000ba091815260200190565b600060405180830381600087803b15801562000bbb57600080fd5b505af115801562000bd0573d6000803e3d6000fd5b50505050505050505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6041546000908190815b602081101562000d54578160011660010362000cec576001816020811062000cb85762000cb862003cf5565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000d30565b826021826020811062000d035762000d0362003cf5565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b62000d3d60028362003d53565b91508062000d4b8162003d8f565b91505062000c8c565b509092915050565b60008467ffffffffffffffff8416825b602081101562000e4f578160011660010362000dd95786818151811062000d975762000d9762003cf5565b60200260200101518360405160200162000dbb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000e2b565b8287828151811062000def5762000def62003cf5565b602002602001015160405160200162000e12929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000e3860028362003d53565b91508062000e468162003d8f565b91505062000d6c565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000f04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d4544000000000000000000000000000000000000000000000000000000606482015260840162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000f9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fc3919062003dca565b60000362001054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000606482015260840162000683565b60425463ffffffff858116911614620010f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000606482015260840162000683565b60425463ffffffff166200126e578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620011da905b8b8b63ffffffff168a62000d5c565b62001268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b620013d8565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200134a905b8b8b63ffffffff168b62000d5c565b620013d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff8516908490620014469089908b90879060240162003de4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f20000000000000000000000000000000000000000000000000000000017905251620014c9919062003e2a565b60006040518083038185875af1925050503d806000811462001508576040519150601f19603f3d011682016040523d82523d6000602084013e6200150d565b606091505b50509050806200159f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c454400000000000000000000000000000000000000000000000000000000606482015260840162000683565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b63ffffffff891660009081526043602052604090205460ff161562001699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d45440000604482015260640162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001732573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001758919062003dca565b600003620017e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d41544348000000000000000000000000000000000000606482015260840162000683565b60425463ffffffff85811691161462001885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d41544348000000000000000000000000000000606482015260840162000683565b60425463ffffffff16620019b4578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200194690620011cb565b620019ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b62001acf565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062001a67906200133b565b62001acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff851662001c40576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001b62919062003e2a565b60006040518083038185875af1925050503d806000811462001ba1576040519150601f19603f3d011682016040523d82523d6000602084013e62001ba6565b606091505b505090508062001c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f4544000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b506200204b565b60425463ffffffff9081169087160362001c7d5762001c7773ffffffffffffffffffffffffffffffffffffffff8616848462002fdd565b6200204b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001faa5760475460009062001d689073ffffffffffffffffffffffffffffffffffffffff168462003035565b905060008060008680602001905181019062001d85919062003e48565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001dce95949392919062003ec9565b600060405180830381600087803b15801562001de957600080fd5b505af115801562001dfe573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001f989392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062002048565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562002020573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002046919062003aff565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff1615808015620020e35750600054600160ff909116105b80620020ff5750303b158015620020ff575060005460ff166001145b6200218d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840162000683565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620021ec57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556040516200226a906200356b565b604051809103906000f08015801562002287573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055620022d762003115565b80156200233b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620024019073ffffffffffffffffffffffffffffffffffffffff16826200325d565b949350505050565b60425463ffffffff90811690841603620024a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c4600000000000000000000000000000000000000000000606482015260840162000683565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620024f39260019263ffffffff9092169133918991899134918a919062003c7c565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620025d69062002e64565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d620025fe62000c82565b6040518263ffffffff1660e01b81526004016200261d91815260200190565b600060405180830381600087803b1580156200263857600080fd5b505af11580156200264d573d6000803e3d6000fd5b50505050505050565b60006200269983838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620032e192505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002a1d576000808080808080620026fc896004818d62003f29565b8101906200270b919062003f55565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614620027d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000683565b73ffffffffffffffffffffffffffffffffffffffff861630146200287d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000683565b8a85146200290e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d4154434800000000000000000000000000000000000000606482015260840162000683565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e1691620029c9919062003e2a565b6000604051808303816000865af19150503d806000811462002a08576040519150601f19603f3d011682016040523d82523d6000602084013e62002a0d565b606091505b5050505050505050505062002d79565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002aca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000683565b60008080808080808062002ae28a6004818e62003f29565b81019062002af1919062003fb0565b975097509750975097509750975097503373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161462002bbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000683565b73ffffffffffffffffffffffffffffffffffffffff8716301462002c65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000683565b6040805173ffffffffffffffffffffffffffffffffffffffff8a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002d29919062003e2a565b6000604051808303816000865af19150503d806000811462002d68576040519150601f19603f3d011682016040523d82523d6000602084013e62002d6d565b606091505b50505050505050505050505b5050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905262002e5e9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152620032e8565b50505050565b80600162002e756020600262004175565b62002e81919062004183565b6041541062002f13576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c00000000000000000000000000000000000000000000606482015260840162000683565b60016041600082825462002f2891906200419d565b909155505060415460005b602081101562002fd2578160011660010362002f6857826001826020811062002f605762002f6062003cf5565b015550505050565b6001816020811062002f7e5762002f7e62003cf5565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002fbb919062003d53565b91508062002fc98162003d8f565b91505062002f33565b506200233b620041b8565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526200233b9084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002ddb565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000c7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640162000683565b600054610100900460ff16620031ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000683565b60005b620031bf6001602062004183565b8110156200325a5760218160208110620031dd57620031dd62003cf5565b015460218260208110620031f557620031f562003cf5565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012060218260016200323091906200419d565b6020811062003243576200324362003cf5565b015580620032518162003d8f565b915050620031b1565b50565b6000620032da8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b60006200334c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620033fb9092919063ffffffff16565b8051909150156200233b57808060200190518101906200336d919062003aff565b6200233b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000683565b60606200240184846000858573ffffffffffffffffffffffffffffffffffffffff85163b62003487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000683565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620034b2919062003e2a565b60006040518083038185875af1925050503d8060008114620034f1576040519150601f19603f3d011682016040523d82523d6000602084013e620034f6565b606091505b50915091506200350882828662003513565b979650505050505050565b6060831562003524575081620032da565b825115620035355782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006839190620041e7565b61182980620041fd83390190565b73ffffffffffffffffffffffffffffffffffffffff811681146200325a57600080fd5b8035620035a98162003579565b919050565b803563ffffffff81168114620035a957600080fd5b60008060008060008060a08789031215620035dd57600080fd5b8635620035ea8162003579565b9550620035fa60208801620035ae565b945060408701356200360c8162003579565b935060608701359250608087013567ffffffffffffffff808211156200363157600080fd5b818901915089601f8301126200364657600080fd5b8135818111156200365657600080fd5b8a60208285010111156200366957600080fd5b6020830194508093505050509295509295509295565b600080604083850312156200369357600080fd5b6200369e83620035ae565b91506020830135620036b08162003579565b809150509250929050565b600060208284031215620036ce57600080fd5b8135620032da8162003579565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620037545762003754620036db565b604052919050565b600082601f8301126200376e57600080fd5b8135602067ffffffffffffffff8211156200378d576200378d620036db565b8160051b6200379e8282016200370a565b9283528481018201928281019087851115620037b957600080fd5b83870192505b848310156200350857823582529183019190830190620037bf565b60008060008060808587031215620037f157600080fd5b84359350602085013567ffffffffffffffff808211156200381157600080fd5b6200381f888389016200375c565b94506040870135915080821682146200383757600080fd5b509396929550929360600135925050565b60ff811681146200325a57600080fd5b600080600080600080600060e0888a0312156200387457600080fd5b8735620038818162003848565b96506200389160208901620035ae565b95506040880135620038a38162003579565b9450620038b360608901620035ae565b93506080880135620038c58162003579565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620038ff57620038ff620036db565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126200393d57600080fd5b8135620039546200394e82620038e2565b6200370a565b8181528460208386010111156200396a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620039a857600080fd5b8a3567ffffffffffffffff80821115620039c157600080fd5b620039cf8e838f016200375c565b9b50620039df60208e01620035ae565b9a5060408d0135995060608d01359850620039fd60808e01620035ae565b975062003a0d60a08e016200359c565b965062003a1d60c08e01620035ae565b955062003a2d60e08e016200359c565b94506101008d013593506101208d013591508082111562003a4d57600080fd5b5062003a5c8d828e016200392b565b9150509295989b9194979a5092959850565b60006020828403121562003a8157600080fd5b5035919050565b60008060006060848603121562003a9e57600080fd5b62003aa984620035ae565b9250602084013562003abb8162003579565b9150604084013567ffffffffffffffff81111562003ad857600080fd5b62003ae6868287016200392b565b9150509250925092565b80151581146200325a57600080fd5b60006020828403121562003b1257600080fd5b8151620032da8162003af0565b60005b8381101562003b3c57818101518382015260200162003b22565b8381111562002e5e5750506000910152565b600082601f83011262003b6057600080fd5b815162003b716200394e82620038e2565b81815284602083860101111562003b8757600080fd5b6200240182602083016020870162003b1f565b60006020828403121562003bad57600080fd5b815167ffffffffffffffff81111562003bc557600080fd5b620024018482850162003b4e565b60006020828403121562003be657600080fd5b8151620032da8162003848565b6000815180845262003c0d81602086016020860162003b1f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60608152600062003c54606083018662003bf3565b828103602084015262003c68818662003bf3565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003cdc8285018762003bf3565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003d8a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003dc35762003dc362003d24565b5060010190565b60006020828403121562003ddd57600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003e21606083018462003bf3565b95945050505050565b6000825162003e3e81846020870162003b1f565b9190910192915050565b60008060006060848603121562003e5e57600080fd5b835167ffffffffffffffff8082111562003e7757600080fd5b62003e858783880162003b4e565b9450602086015191508082111562003e9c57600080fd5b5062003eab8682870162003b4e565b925050604084015162003ebe8162003848565b809150509250925092565b60a08152600062003ede60a083018862003bf3565b828103602084015262003ef2818862003bf3565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000808585111562003f3a57600080fd5b8386111562003f4857600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003f7157600080fd5b873562003f7e8162003579565b9650602088013562003f908162003579565b955060408801359450606088013593506080880135620038c58162003848565b600080600080600080600080610100898b03121562003fce57600080fd5b883562003fdb8162003579565b9750602089013562003fed8162003579565b9650604089013595506060890135945060808901356200400d8162003af0565b935060a08901356200401f8162003848565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200409b57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156200407f576200407f62003d24565b808516156200408d57918102915b93841c939080029062004041565b509250929050565b600082620040b45750600162000c7c565b81620040c35750600062000c7c565b8160018114620040dc5760028114620040e75762004107565b600191505062000c7c565b60ff841115620040fb57620040fb62003d24565b50506001821b62000c7c565b5060208310610133831016604e8410600b84101617156200412c575081810a62000c7c565b6200413883836200403c565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156200416d576200416d62003d24565b029392505050565b6000620032da8383620040a3565b60008282101562004198576200419862003d24565b500390565b60008219821115620041b357620041b362003d24565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b602081526000620032da602083018462003bf356fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a26469706673582212201f26b56f29f92ab7c5c3e914710fd2272ffb42c30a12b7548f18f27e034c925e64736f6c634300080f0033", + "deployedBytecode": "0x6080604052600436106200017b5760003560e01c806381b1c17411620000cf578063d02103ca116200007d578063e73758811162000060578063e73758811462000589578063ed6be5c914620005bd578063ff634ed714620005d457600080fd5b8063d02103ca1462000543578063d96a15f7146200057257600080fd5b8063a08e8a0811620000b2578063a08e8a0814620004bf578063b7e6a7d414620004e9578063bab161bf146200050e57600080fd5b806381b1c17414620004535780638624c35c146200049a57600080fd5b80633ae05047116200012d5780633e19704311620001105780633e19704314620003155780634638554914620004095780637b6323c1146200042e57600080fd5b80633ae0504714620002c75780633da8168214620002df57600080fd5b80632dfdf0b511620001625780632dfdf0b514620001e85780632f3a3d5d146200020f578063318aee3d146200023e57600080fd5b80630871e971146200018057806322e95f2c1462000199575b600080fd5b6200019762000191366004620035c3565b620005eb565b005b348015620001a657600080fd5b50620001be620001b83660046200367f565b62000bdf565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015620001f557600080fd5b506200020060415481565b604051908152602001620001df565b3480156200021c57600080fd5b50604754620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200024b57600080fd5b50620002956200025d366004620036bb565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201620001df565b348015620002d457600080fd5b506200020062000c82565b348015620002ec57600080fd5b5062000304620002fe366004620037da565b62000d5c565b6040519015158152602001620001df565b3480156200032257600080fd5b50620002006200033436600462003858565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200041657600080fd5b50620001976200042836600462003987565b62000e5c565b3480156200043b57600080fd5b50620001976200044d36600462003987565b62001617565b3480156200046057600080fd5b50620001be6200047236600462003a6e565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620004a757600080fd5b5062000197620004b93660046200367f565b620020c2565b348015620004cc57600080fd5b50620004d6600081565b60405160ff9091168152602001620001df565b348015620004f657600080fd5b50620001be620005083660046200367f565b62002340565b3480156200051b57600080fd5b506042546200052d9063ffffffff1681565b60405163ffffffff9091168152602001620001df565b3480156200055057600080fd5b50604654620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b620001976200058336600462003a88565b62002409565b3480156200059657600080fd5b5062000304620005a836600462003a6e565b60436020526000908152604090205460ff1681565b348015620005ca57600080fd5b506200052d600081565b348015620005e157600080fd5b50620004d6600181565b60425463ffffffff908116908616036200068c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff891662000748578534146200073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c55450000000000000000000000000000000000606482015260840162000683565b6000915062000a5c565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000849576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562000810573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000836919062003aff565b5060208101518151909450925062000a5a565b84156200085e576200085e8a88888862002656565b6200088273ffffffffffffffffffffffffffffffffffffffff8b1633308a62002d80565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200092e919081019062003b9a565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200097a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620009c2919081019062003b9a565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a34919062003bd3565b60405160200162000a489392919062003c3f565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760415460405162000a9e98979695949392919062003c7c565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000b599062002e64565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000b8162000c82565b6040518263ffffffff1660e01b815260040162000ba091815260200190565b600060405180830381600087803b15801562000bbb57600080fd5b505af115801562000bd0573d6000803e3d6000fd5b50505050505050505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6041546000908190815b602081101562000d54578160011660010362000cec576001816020811062000cb85762000cb862003cf5565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000d30565b826021826020811062000d035762000d0362003cf5565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b62000d3d60028362003d53565b91508062000d4b8162003d8f565b91505062000c8c565b509092915050565b60008467ffffffffffffffff8416825b602081101562000e4f578160011660010362000dd95786818151811062000d975762000d9762003cf5565b60200260200101518360405160200162000dbb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000e2b565b8287828151811062000def5762000def62003cf5565b602002602001015160405160200162000e12929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000e3860028362003d53565b91508062000e468162003d8f565b91505062000d6c565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000f04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d4544000000000000000000000000000000000000000000000000000000606482015260840162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000f9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fc3919062003dca565b60000362001054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000606482015260840162000683565b60425463ffffffff858116911614620010f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000606482015260840162000683565b60425463ffffffff166200126e578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620011da905b8b8b63ffffffff168a62000d5c565b62001268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b620013d8565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200134a905b8b8b63ffffffff168b62000d5c565b620013d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff8516908490620014469089908b90879060240162003de4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f20000000000000000000000000000000000000000000000000000000017905251620014c9919062003e2a565b60006040518083038185875af1925050503d806000811462001508576040519150601f19603f3d011682016040523d82523d6000602084013e6200150d565b606091505b50509050806200159f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c454400000000000000000000000000000000000000000000000000000000606482015260840162000683565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b63ffffffff891660009081526043602052604090205460ff161562001699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d45440000604482015260640162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001732573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001758919062003dca565b600003620017e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d41544348000000000000000000000000000000000000606482015260840162000683565b60425463ffffffff85811691161462001885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d41544348000000000000000000000000000000606482015260840162000683565b60425463ffffffff16620019b4578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200194690620011cb565b620019ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b62001acf565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062001a67906200133b565b62001acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff851662001c40576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001b62919062003e2a565b60006040518083038185875af1925050503d806000811462001ba1576040519150601f19603f3d011682016040523d82523d6000602084013e62001ba6565b606091505b505090508062001c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f4544000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b506200204b565b60425463ffffffff9081169087160362001c7d5762001c7773ffffffffffffffffffffffffffffffffffffffff8616848462002fdd565b6200204b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001faa5760475460009062001d689073ffffffffffffffffffffffffffffffffffffffff168462003035565b905060008060008680602001905181019062001d85919062003e48565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001dce95949392919062003ec9565b600060405180830381600087803b15801562001de957600080fd5b505af115801562001dfe573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001f989392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062002048565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562002020573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002046919062003aff565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff1615808015620020e35750600054600160ff909116105b80620020ff5750303b158015620020ff575060005460ff166001145b6200218d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840162000683565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620021ec57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556040516200226a906200356b565b604051809103906000f08015801562002287573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055620022d762003115565b80156200233b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620024019073ffffffffffffffffffffffffffffffffffffffff16826200325d565b949350505050565b60425463ffffffff90811690841603620024a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c4600000000000000000000000000000000000000000000606482015260840162000683565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620024f39260019263ffffffff9092169133918991899134918a919062003c7c565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620025d69062002e64565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d620025fe62000c82565b6040518263ffffffff1660e01b81526004016200261d91815260200190565b600060405180830381600087803b1580156200263857600080fd5b505af11580156200264d573d6000803e3d6000fd5b50505050505050565b60006200269983838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620032e192505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002a1d576000808080808080620026fc896004818d62003f29565b8101906200270b919062003f55565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614620027d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000683565b73ffffffffffffffffffffffffffffffffffffffff861630146200287d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000683565b8a85146200290e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d4154434800000000000000000000000000000000000000606482015260840162000683565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e1691620029c9919062003e2a565b6000604051808303816000865af19150503d806000811462002a08576040519150601f19603f3d011682016040523d82523d6000602084013e62002a0d565b606091505b5050505050505050505062002d79565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002aca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000683565b60008080808080808062002ae28a6004818e62003f29565b81019062002af1919062003fb0565b975097509750975097509750975097503373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161462002bbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000683565b73ffffffffffffffffffffffffffffffffffffffff8716301462002c65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000683565b6040805173ffffffffffffffffffffffffffffffffffffffff8a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002d29919062003e2a565b6000604051808303816000865af19150503d806000811462002d68576040519150601f19603f3d011682016040523d82523d6000602084013e62002d6d565b606091505b50505050505050505050505b5050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905262002e5e9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152620032e8565b50505050565b80600162002e756020600262004175565b62002e81919062004183565b6041541062002f13576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c00000000000000000000000000000000000000000000606482015260840162000683565b60016041600082825462002f2891906200419d565b909155505060415460005b602081101562002fd2578160011660010362002f6857826001826020811062002f605762002f6062003cf5565b015550505050565b6001816020811062002f7e5762002f7e62003cf5565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002fbb919062003d53565b91508062002fc98162003d8f565b91505062002f33565b506200233b620041b8565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526200233b9084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002ddb565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000c7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640162000683565b600054610100900460ff16620031ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000683565b60005b620031bf6001602062004183565b8110156200325a5760218160208110620031dd57620031dd62003cf5565b015460218260208110620031f557620031f562003cf5565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012060218260016200323091906200419d565b6020811062003243576200324362003cf5565b015580620032518162003d8f565b915050620031b1565b50565b6000620032da8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b60006200334c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620033fb9092919063ffffffff16565b8051909150156200233b57808060200190518101906200336d919062003aff565b6200233b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000683565b60606200240184846000858573ffffffffffffffffffffffffffffffffffffffff85163b62003487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000683565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620034b2919062003e2a565b60006040518083038185875af1925050503d8060008114620034f1576040519150601f19603f3d011682016040523d82523d6000602084013e620034f6565b606091505b50915091506200350882828662003513565b979650505050505050565b6060831562003524575081620032da565b825115620035355782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006839190620041e7565b61182980620041fd83390190565b73ffffffffffffffffffffffffffffffffffffffff811681146200325a57600080fd5b8035620035a98162003579565b919050565b803563ffffffff81168114620035a957600080fd5b60008060008060008060a08789031215620035dd57600080fd5b8635620035ea8162003579565b9550620035fa60208801620035ae565b945060408701356200360c8162003579565b935060608701359250608087013567ffffffffffffffff808211156200363157600080fd5b818901915089601f8301126200364657600080fd5b8135818111156200365657600080fd5b8a60208285010111156200366957600080fd5b6020830194508093505050509295509295509295565b600080604083850312156200369357600080fd5b6200369e83620035ae565b91506020830135620036b08162003579565b809150509250929050565b600060208284031215620036ce57600080fd5b8135620032da8162003579565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620037545762003754620036db565b604052919050565b600082601f8301126200376e57600080fd5b8135602067ffffffffffffffff8211156200378d576200378d620036db565b8160051b6200379e8282016200370a565b9283528481018201928281019087851115620037b957600080fd5b83870192505b848310156200350857823582529183019190830190620037bf565b60008060008060808587031215620037f157600080fd5b84359350602085013567ffffffffffffffff808211156200381157600080fd5b6200381f888389016200375c565b94506040870135915080821682146200383757600080fd5b509396929550929360600135925050565b60ff811681146200325a57600080fd5b600080600080600080600060e0888a0312156200387457600080fd5b8735620038818162003848565b96506200389160208901620035ae565b95506040880135620038a38162003579565b9450620038b360608901620035ae565b93506080880135620038c58162003579565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620038ff57620038ff620036db565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126200393d57600080fd5b8135620039546200394e82620038e2565b6200370a565b8181528460208386010111156200396a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620039a857600080fd5b8a3567ffffffffffffffff80821115620039c157600080fd5b620039cf8e838f016200375c565b9b50620039df60208e01620035ae565b9a5060408d0135995060608d01359850620039fd60808e01620035ae565b975062003a0d60a08e016200359c565b965062003a1d60c08e01620035ae565b955062003a2d60e08e016200359c565b94506101008d013593506101208d013591508082111562003a4d57600080fd5b5062003a5c8d828e016200392b565b9150509295989b9194979a5092959850565b60006020828403121562003a8157600080fd5b5035919050565b60008060006060848603121562003a9e57600080fd5b62003aa984620035ae565b9250602084013562003abb8162003579565b9150604084013567ffffffffffffffff81111562003ad857600080fd5b62003ae6868287016200392b565b9150509250925092565b80151581146200325a57600080fd5b60006020828403121562003b1257600080fd5b8151620032da8162003af0565b60005b8381101562003b3c57818101518382015260200162003b22565b8381111562002e5e5750506000910152565b600082601f83011262003b6057600080fd5b815162003b716200394e82620038e2565b81815284602083860101111562003b8757600080fd5b6200240182602083016020870162003b1f565b60006020828403121562003bad57600080fd5b815167ffffffffffffffff81111562003bc557600080fd5b620024018482850162003b4e565b60006020828403121562003be657600080fd5b8151620032da8162003848565b6000815180845262003c0d81602086016020860162003b1f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60608152600062003c54606083018662003bf3565b828103602084015262003c68818662003bf3565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003cdc8285018762003bf3565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003d8a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003dc35762003dc362003d24565b5060010190565b60006020828403121562003ddd57600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003e21606083018462003bf3565b95945050505050565b6000825162003e3e81846020870162003b1f565b9190910192915050565b60008060006060848603121562003e5e57600080fd5b835167ffffffffffffffff8082111562003e7757600080fd5b62003e858783880162003b4e565b9450602086015191508082111562003e9c57600080fd5b5062003eab8682870162003b4e565b925050604084015162003ebe8162003848565b809150509250925092565b60a08152600062003ede60a083018862003bf3565b828103602084015262003ef2818862003bf3565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000808585111562003f3a57600080fd5b8386111562003f4857600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003f7157600080fd5b873562003f7e8162003579565b9650602088013562003f908162003579565b955060408801359450606088013593506080880135620038c58162003848565b600080600080600080600080610100898b03121562003fce57600080fd5b883562003fdb8162003579565b9750602089013562003fed8162003579565b9650604089013595506060890135945060808901356200400d8162003af0565b935060a08901356200401f8162003848565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200409b57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156200407f576200407f62003d24565b808516156200408d57918102915b93841c939080029062004041565b509250929050565b600082620040b45750600162000c7c565b81620040c35750600062000c7c565b8160018114620040dc5760028114620040e75762004107565b600191505062000c7c565b60ff841115620040fb57620040fb62003d24565b50506001821b62000c7c565b5060208310610133831016604e8410600b84101617156200412c575081810a62000c7c565b6200413883836200403c565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156200416d576200416d62003d24565b029392505050565b6000620032da8383620040a3565b60008282101562004198576200419862003d24565b500390565b60008219821115620041b357620041b362003d24565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b602081526000620032da602083018462003bf356fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a26469706673582212201f26b56f29f92ab7c5c3e914710fd2272ffb42c30a12b7548f18f27e034c925e64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/BridgeMock.json b/compiled-contracts/BridgeMock.json index a793e2089..0ffe0a3ee 100644 --- a/compiled-contracts/BridgeMock.json +++ b/compiled-contracts/BridgeMock.json @@ -712,8 +712,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50615c42806100206000396000f3fe608060405260043610620001c35760003560e01c806381b1c17411620000f3578063bab161bf1162000095578063e7375881116200006c578063e73758811462000678578063ed6be5c914620006ac578063f2fde38b14620006c3578063ff634ed714620006e857600080fd5b8063bab161bf14620005fd578063d02103ca1462000632578063d96a15f7146200066157600080fd5b806391e57e2d11620000ca57806391e57e2d1462000596578063a08e8a0814620005ae578063b7e6a7d414620005d857600080fd5b806381b1c17414620004fd5780638624c35c14620005445780638da5cb5b146200056957600080fd5b8063318aee3d11620001695780633e19704311620001405780633e19704314620003a757806346385549146200049b578063715018a614620004c05780637b6323c114620004d857600080fd5b8063318aee3d14620002d05780633ae0504714620003595780633da81682146200037157600080fd5b80632c3f58cd116200019e5780632c3f58cd14620002555780632dfdf0b5146200027a5780632f3a3d5d14620002a157600080fd5b80630871e97114620001c857806322e95f2c14620001e15780632b5e42e71462000230575b600080fd5b620001df620001d936600462003823565b620006ff565b005b348015620001ee57600080fd5b506200020662000200366004620038df565b620007d5565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200023d57600080fd5b50620001df6200024f3660046200391b565b62000878565b3480156200026257600080fd5b50620001df6200027436600462003935565b62000887565b3480156200028757600080fd5b506200029260415481565b60405190815260200162000227565b348015620002ae57600080fd5b50604754620002069073ffffffffffffffffffffffffffffffffffffffff1681565b348015620002dd57600080fd5b5062000327620002ef36600462003953565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000227565b3480156200036657600080fd5b5062000292620008c8565b3480156200037e57600080fd5b50620003966200039036600462003a72565b620009a2565b604051901515815260200162000227565b348015620003b457600080fd5b5062000292620003c636600462003af0565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004a857600080fd5b50620001df620004ba36600462003c1f565b62000aa2565b348015620004cd57600080fd5b50620001df6200125d565b348015620004e557600080fd5b50620001df620004f736600462003c1f565b62001275565b3480156200050a57600080fd5b50620002066200051c3660046200391b565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200055157600080fd5b50620001df62000563366004620038df565b62001d20565b3480156200057657600080fd5b50607a5473ffffffffffffffffffffffffffffffffffffffff1662000206565b348015620005a357600080fd5b506200029260ac5481565b348015620005bb57600080fd5b50620005c5600081565b60405160ff909116815260200162000227565b348015620005e557600080fd5b5062000206620005f7366004620038df565b62001fb4565b3480156200060a57600080fd5b506042546200061c9063ffffffff1681565b60405163ffffffff909116815260200162000227565b3480156200063f57600080fd5b50604654620002069073ffffffffffffffffffffffffffffffffffffffff1681565b620001df6200067236600462003d06565b6200207d565b3480156200068557600080fd5b5062000396620006973660046200391b565b60436020526000908152604090205460ff1681565b348015620006b957600080fd5b506200061c600081565b348015620006d057600080fd5b50620001df620006e236600462003953565b620022ca565b348015620006f557600080fd5b50620005c5600181565b60ac54341115620007bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b620007cd86868686868662002387565b505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6200088262002977565b60ac55565b6200089162002977565b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b6041546000908190815b60208110156200099a5781600116600103620009325760018160208110620008fe57620008fe62003d6e565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000976565b826021826020811062000949576200094962003d6e565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b6200098360028362003dcc565b915080620009918162003e08565b915050620008d2565b509092915050565b60008467ffffffffffffffff8416825b602081101562000a95578160011660010362000a1f57868181518110620009dd57620009dd62003d6e565b60200260200101518360405160200162000a01929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000a71565b8287828151811062000a355762000a3562003d6e565b602002602001015160405160200162000a58929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000a7e60028362003dcc565b91508062000a8c8162003e08565b915050620009b2565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000b4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d45440000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000be3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c09919062003e43565b60000362000c9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d4154434800000000000000000000006064820152608401620007b4565b60425463ffffffff85811691161462000d36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000006064820152608401620007b4565b60425463ffffffff1662000eb4578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062000e20905b8b8b63ffffffff168a620009a2565b62000eae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6200101e565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062000f90905b8b8b63ffffffff168b620009a2565b6200101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff85169084906200108c9089908b90879060240162003ed8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f200000000000000000000000000000000000000000000000000000000179052516200110f919062003f1e565b60006040518083038185875af1925050503d80600081146200114e576040519150601f19603f3d011682016040523d82523d6000602084013e62001153565b606091505b5050905080620011e5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b6200126762002977565b620012736000620029fa565b565b63ffffffff891660009081526043602052604090205460ff1615620012f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d454400006044820152606401620007b4565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001390573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013b6919062003e43565b60000362001447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d415443480000000000000000000000000000000000006064820152608401620007b4565b60425463ffffffff858116911614620014e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d415443480000000000000000000000000000006064820152608401620007b4565b60425463ffffffff1662001612578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620015a49062000e11565b6200160c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007b4565b6200172d565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620016c59062000f81565b6200172d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007b4565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff85166200189e576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff8516908490604051620017c0919062003f1e565b60006040518083038185875af1925050503d8060008114620017ff576040519150601f19603f3d011682016040523d82523d6000602084013e62001804565b606091505b505090508062001897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f45440000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b5062001ca9565b60425463ffffffff90811690871603620018db57620018d573ffffffffffffffffffffffffffffffffffffffff8616848462002a71565b62001ca9565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001c0857604754600090620019c69073ffffffffffffffffffffffffffffffffffffffff168462002b47565b9050600080600086806020019051810190620019e3919062003f88565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001a2c95949392919062004009565b600060405180830381600087803b15801562001a4757600080fd5b505af115801562001a5c573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001bf69392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062001ca6565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001c7e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ca4919062004069565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff161580801562001d415750600054600160ff909116105b8062001d5d5750303b15801562001d5d575060005460ff166001145b62001deb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007b4565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801562001e4a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841617905560405162001ec890620037cb565b604051809103906000f08015801562001ee5573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905562001f3562002c27565b62001f3f62002d6c565b6703782dace9d9000060ac55801562001faf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620020759073ffffffffffffffffffffffffffffffffffffffff168262002e0f565b949350505050565b60425463ffffffff908116908416036200211a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007b4565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620021679260019263ffffffff9092169133918991899134918a91906200408d565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200224a9062002e93565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62002272620008c8565b6040518263ffffffff1660e01b81526004016200229191815260200190565b600060405180830381600087803b158015620022ac57600080fd5b505af1158015620022c1573d6000803e3d6000fd5b50505050505050565b620022d462002977565b73ffffffffffffffffffffffffffffffffffffffff811662002379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007b4565b6200238481620029fa565b50565b60425463ffffffff9081169086160362002424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007b4565b600080606073ffffffffffffffffffffffffffffffffffffffff8916620024e057853414620024d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007b4565b60009150620027f4565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620025e1576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af1158015620025a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620025ce919062004069565b50602081015181519094509250620027f2565b8415620025f657620025f68a8888886200300c565b6200261a73ffffffffffffffffffffffffffffffffffffffff8b1633308a62003437565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200267e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620026c6919081019062004106565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562002712573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200275a919081019062004106565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620027a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620027cc91906200413f565b604051602001620027e0939291906200415f565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b87604154604051620028369897969594939291906200408d565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620028f19062002e93565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62002919620008c8565b6040518263ffffffff1660e01b81526004016200293891815260200190565b600060405180830381600087803b1580156200295357600080fd5b505af115801562002968573d6000803e3d6000fd5b50505050505050505050505050565b607a5473ffffffffffffffffffffffffffffffffffffffff16331462001273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007b4565b607a805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262001faf9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526200349d565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401620007b4565b600054610100900460ff1662002cc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b60005b62002cd1600160206200419c565b81101562002384576021816020811062002cef5762002cef62003d6e565b01546021826020811062002d075762002d0762003d6e565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002d429190620041b6565b6020811062002d555762002d5562003d6e565b01558062002d638162003e08565b91505062002cc3565b600054610100900460ff1662002e05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b62001273620035b0565b600062002e8c8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b80600162002ea4602060026200430a565b62002eb091906200419c565b6041541062002f42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007b4565b60016041600082825462002f579190620041b6565b909155505060415460005b602081101562003001578160011660010362002f9757826001826020811062002f8f5762002f8f62003d6e565b015550505050565b6001816020811062002fad5762002fad62003d6e565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002fea919062003dcc565b91508062002ff88162003e08565b91505062002f62565b5062001faf62004318565b60006200304f83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200365492505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf0000000000000000000000000000000000000000000000000000000014620030fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007b4565b600080808080808062003115896004818d62004347565b81019062003124919062004373565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614620031ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007b4565b73ffffffffffffffffffffffffffffffffffffffff8616301462003296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007b4565b8a851462003327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007b4565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e1691620033e2919062003f1e565b6000604051808303816000865af19150503d806000811462003421576040519150601f19603f3d011682016040523d82523d6000602084013e62003426565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052620034979085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002ac4565b50505050565b600062003501826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166200365b9092919063ffffffff16565b80519091501562001faf578080602001905181019062003522919062004069565b62001faf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007b4565b600054610100900460ff1662003649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b6200127333620029fa565b6020015190565b60606200207584846000858573ffffffffffffffffffffffffffffffffffffffff85163b620036e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007b4565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405162003712919062003f1e565b60006040518083038185875af1925050503d806000811462003751576040519150601f19603f3d011682016040523d82523d6000602084013e62003756565b606091505b50915091506200376882828662003773565b979650505050505050565b606083156200378457508162002e8c565b825115620037955782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007b49190620043ce565b61182980620043e483390190565b73ffffffffffffffffffffffffffffffffffffffff811681146200238457600080fd5b80356200380981620037d9565b919050565b803563ffffffff811681146200380957600080fd5b60008060008060008060a087890312156200383d57600080fd5b86356200384a81620037d9565b95506200385a602088016200380e565b945060408701356200386c81620037d9565b935060608701359250608087013567ffffffffffffffff808211156200389157600080fd5b818901915089601f830112620038a657600080fd5b813581811115620038b657600080fd5b8a6020828501011115620038c957600080fd5b6020830194508093505050509295509295509295565b60008060408385031215620038f357600080fd5b620038fe836200380e565b915060208301356200391081620037d9565b809150509250929050565b6000602082840312156200392e57600080fd5b5035919050565b6000602082840312156200394857600080fd5b62002e8c826200380e565b6000602082840312156200396657600080fd5b813562002e8c81620037d9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620039ec57620039ec62003973565b604052919050565b600082601f83011262003a0657600080fd5b8135602067ffffffffffffffff82111562003a255762003a2562003973565b8160051b62003a36828201620039a2565b928352848101820192828101908785111562003a5157600080fd5b83870192505b84831015620037685782358252918301919083019062003a57565b6000806000806080858703121562003a8957600080fd5b84359350602085013567ffffffffffffffff8082111562003aa957600080fd5b62003ab788838901620039f4565b945060408701359150808216821462003acf57600080fd5b509396929550929360600135925050565b60ff811681146200238457600080fd5b600080600080600080600060e0888a03121562003b0c57600080fd5b873562003b198162003ae0565b965062003b29602089016200380e565b9550604088013562003b3b81620037d9565b945062003b4b606089016200380e565b9350608088013562003b5d81620037d9565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562003b975762003b9762003973565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011262003bd557600080fd5b813562003bec62003be68262003b7a565b620039a2565b81815284602083860101111562003c0257600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562003c4057600080fd5b8a3567ffffffffffffffff8082111562003c5957600080fd5b62003c678e838f01620039f4565b9b5062003c7760208e016200380e565b9a5060408d0135995060608d0135985062003c9560808e016200380e565b975062003ca560a08e01620037fc565b965062003cb560c08e016200380e565b955062003cc560e08e01620037fc565b94506101008d013593506101208d013591508082111562003ce557600080fd5b5062003cf48d828e0162003bc3565b9150509295989b9194979a5092959850565b60008060006060848603121562003d1c57600080fd5b62003d27846200380e565b9250602084013562003d3981620037d9565b9150604084013567ffffffffffffffff81111562003d5657600080fd5b62003d648682870162003bc3565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003e03577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003e3c5762003e3c62003d9d565b5060010190565b60006020828403121562003e5657600080fd5b5051919050565b60005b8381101562003e7a57818101518382015260200162003e60565b83811115620034975750506000910152565b6000815180845262003ea681602086016020860162003e5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003f15606083018462003e8c565b95945050505050565b6000825162003f3281846020870162003e5d565b9190910192915050565b600082601f83011262003f4e57600080fd5b815162003f5f62003be68262003b7a565b81815284602083860101111562003f7557600080fd5b6200207582602083016020870162003e5d565b60008060006060848603121562003f9e57600080fd5b835167ffffffffffffffff8082111562003fb757600080fd5b62003fc58783880162003f3c565b9450602086015191508082111562003fdc57600080fd5b5062003feb8682870162003f3c565b925050604084015162003ffe8162003ae0565b809150509250925092565b60a0815260006200401e60a083018862003e8c565b828103602084015262004032818862003e8c565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000602082840312156200407c57600080fd5b8151801515811462002e8c57600080fd5b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620040ed8285018762003e8c565b925080851660e085015250509998505050505050505050565b6000602082840312156200411957600080fd5b815167ffffffffffffffff8111156200413157600080fd5b620020758482850162003f3c565b6000602082840312156200415257600080fd5b815162002e8c8162003ae0565b60608152600062004174606083018662003e8c565b828103602084015262004188818662003e8c565b91505060ff83166040830152949350505050565b600082821015620041b157620041b162003d9d565b500390565b60008219821115620041cc57620041cc62003d9d565b500190565b600181815b808511156200423057817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562004214576200421462003d9d565b808516156200422257918102915b93841c9390800290620041d6565b509250929050565b600082620042495750600162000872565b81620042585750600062000872565b81600181146200427157600281146200427c576200429c565b600191505062000872565b60ff84111562004290576200429062003d9d565b50506001821b62000872565b5060208310610133831016604e8410600b8410161715620042c1575081810a62000872565b620042cd8383620041d1565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562004302576200430262003d9d565b029392505050565b600062002e8c838362004238565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600080858511156200435857600080fd5b838611156200436657600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200438f57600080fd5b87356200439c81620037d9565b96506020880135620043ae81620037d9565b95506040880135945060608801359350608088013562003b5d8162003ae0565b60208152600062002e8c602083018462003e8c56fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a26469706673582212202df0b88d99ea837cef4ce1ae938f90df917823197383f2babdee37a8bec9b78364736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001c35760003560e01c806381b1c17411620000f3578063bab161bf1162000095578063e7375881116200006c578063e73758811462000678578063ed6be5c914620006ac578063f2fde38b14620006c3578063ff634ed714620006e857600080fd5b8063bab161bf14620005fd578063d02103ca1462000632578063d96a15f7146200066157600080fd5b806391e57e2d11620000ca57806391e57e2d1462000596578063a08e8a0814620005ae578063b7e6a7d414620005d857600080fd5b806381b1c17414620004fd5780638624c35c14620005445780638da5cb5b146200056957600080fd5b8063318aee3d11620001695780633e19704311620001405780633e19704314620003a757806346385549146200049b578063715018a614620004c05780637b6323c114620004d857600080fd5b8063318aee3d14620002d05780633ae0504714620003595780633da81682146200037157600080fd5b80632c3f58cd116200019e5780632c3f58cd14620002555780632dfdf0b5146200027a5780632f3a3d5d14620002a157600080fd5b80630871e97114620001c857806322e95f2c14620001e15780632b5e42e71462000230575b600080fd5b620001df620001d936600462003823565b620006ff565b005b348015620001ee57600080fd5b506200020662000200366004620038df565b620007d5565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200023d57600080fd5b50620001df6200024f3660046200391b565b62000878565b3480156200026257600080fd5b50620001df6200027436600462003935565b62000887565b3480156200028757600080fd5b506200029260415481565b60405190815260200162000227565b348015620002ae57600080fd5b50604754620002069073ffffffffffffffffffffffffffffffffffffffff1681565b348015620002dd57600080fd5b5062000327620002ef36600462003953565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000227565b3480156200036657600080fd5b5062000292620008c8565b3480156200037e57600080fd5b50620003966200039036600462003a72565b620009a2565b604051901515815260200162000227565b348015620003b457600080fd5b5062000292620003c636600462003af0565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004a857600080fd5b50620001df620004ba36600462003c1f565b62000aa2565b348015620004cd57600080fd5b50620001df6200125d565b348015620004e557600080fd5b50620001df620004f736600462003c1f565b62001275565b3480156200050a57600080fd5b50620002066200051c3660046200391b565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200055157600080fd5b50620001df62000563366004620038df565b62001d20565b3480156200057657600080fd5b50607a5473ffffffffffffffffffffffffffffffffffffffff1662000206565b348015620005a357600080fd5b506200029260ac5481565b348015620005bb57600080fd5b50620005c5600081565b60405160ff909116815260200162000227565b348015620005e557600080fd5b5062000206620005f7366004620038df565b62001fb4565b3480156200060a57600080fd5b506042546200061c9063ffffffff1681565b60405163ffffffff909116815260200162000227565b3480156200063f57600080fd5b50604654620002069073ffffffffffffffffffffffffffffffffffffffff1681565b620001df6200067236600462003d06565b6200207d565b3480156200068557600080fd5b5062000396620006973660046200391b565b60436020526000908152604090205460ff1681565b348015620006b957600080fd5b506200061c600081565b348015620006d057600080fd5b50620001df620006e236600462003953565b620022ca565b348015620006f557600080fd5b50620005c5600181565b60ac54341115620007bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b620007cd86868686868662002387565b505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6200088262002977565b60ac55565b6200089162002977565b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b6041546000908190815b60208110156200099a5781600116600103620009325760018160208110620008fe57620008fe62003d6e565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000976565b826021826020811062000949576200094962003d6e565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b6200098360028362003dcc565b915080620009918162003e08565b915050620008d2565b509092915050565b60008467ffffffffffffffff8416825b602081101562000a95578160011660010362000a1f57868181518110620009dd57620009dd62003d6e565b60200260200101518360405160200162000a01929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000a71565b8287828151811062000a355762000a3562003d6e565b602002602001015160405160200162000a58929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000a7e60028362003dcc565b91508062000a8c8162003e08565b915050620009b2565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000b4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d45440000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000be3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c09919062003e43565b60000362000c9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d4154434800000000000000000000006064820152608401620007b4565b60425463ffffffff85811691161462000d36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000006064820152608401620007b4565b60425463ffffffff1662000eb4578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062000e20905b8b8b63ffffffff168a620009a2565b62000eae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6200101e565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062000f90905b8b8b63ffffffff168b620009a2565b6200101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff85169084906200108c9089908b90879060240162003ed8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f200000000000000000000000000000000000000000000000000000000179052516200110f919062003f1e565b60006040518083038185875af1925050503d80600081146200114e576040519150601f19603f3d011682016040523d82523d6000602084013e62001153565b606091505b5050905080620011e5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b6200126762002977565b620012736000620029fa565b565b63ffffffff891660009081526043602052604090205460ff1615620012f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d454400006044820152606401620007b4565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001390573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013b6919062003e43565b60000362001447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d415443480000000000000000000000000000000000006064820152608401620007b4565b60425463ffffffff858116911614620014e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d415443480000000000000000000000000000006064820152608401620007b4565b60425463ffffffff1662001612578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620015a49062000e11565b6200160c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007b4565b6200172d565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620016c59062000f81565b6200172d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007b4565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff85166200189e576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff8516908490604051620017c0919062003f1e565b60006040518083038185875af1925050503d8060008114620017ff576040519150601f19603f3d011682016040523d82523d6000602084013e62001804565b606091505b505090508062001897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f45440000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b5062001ca9565b60425463ffffffff90811690871603620018db57620018d573ffffffffffffffffffffffffffffffffffffffff8616848462002a71565b62001ca9565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001c0857604754600090620019c69073ffffffffffffffffffffffffffffffffffffffff168462002b47565b9050600080600086806020019051810190620019e3919062003f88565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001a2c95949392919062004009565b600060405180830381600087803b15801562001a4757600080fd5b505af115801562001a5c573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001bf69392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062001ca6565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001c7e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ca4919062004069565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff161580801562001d415750600054600160ff909116105b8062001d5d5750303b15801562001d5d575060005460ff166001145b62001deb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007b4565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801562001e4a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841617905560405162001ec890620037cb565b604051809103906000f08015801562001ee5573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905562001f3562002c27565b62001f3f62002d6c565b6703782dace9d9000060ac55801562001faf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620020759073ffffffffffffffffffffffffffffffffffffffff168262002e0f565b949350505050565b60425463ffffffff908116908416036200211a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007b4565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620021679260019263ffffffff9092169133918991899134918a91906200408d565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200224a9062002e93565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62002272620008c8565b6040518263ffffffff1660e01b81526004016200229191815260200190565b600060405180830381600087803b158015620022ac57600080fd5b505af1158015620022c1573d6000803e3d6000fd5b50505050505050565b620022d462002977565b73ffffffffffffffffffffffffffffffffffffffff811662002379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007b4565b6200238481620029fa565b50565b60425463ffffffff9081169086160362002424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007b4565b600080606073ffffffffffffffffffffffffffffffffffffffff8916620024e057853414620024d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007b4565b60009150620027f4565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620025e1576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af1158015620025a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620025ce919062004069565b50602081015181519094509250620027f2565b8415620025f657620025f68a8888886200300c565b6200261a73ffffffffffffffffffffffffffffffffffffffff8b1633308a62003437565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200267e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620026c6919081019062004106565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562002712573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200275a919081019062004106565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620027a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620027cc91906200413f565b604051602001620027e0939291906200415f565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b87604154604051620028369897969594939291906200408d565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620028f19062002e93565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62002919620008c8565b6040518263ffffffff1660e01b81526004016200293891815260200190565b600060405180830381600087803b1580156200295357600080fd5b505af115801562002968573d6000803e3d6000fd5b50505050505050505050505050565b607a5473ffffffffffffffffffffffffffffffffffffffff16331462001273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007b4565b607a805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262001faf9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526200349d565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401620007b4565b600054610100900460ff1662002cc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b60005b62002cd1600160206200419c565b81101562002384576021816020811062002cef5762002cef62003d6e565b01546021826020811062002d075762002d0762003d6e565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002d429190620041b6565b6020811062002d555762002d5562003d6e565b01558062002d638162003e08565b91505062002cc3565b600054610100900460ff1662002e05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b62001273620035b0565b600062002e8c8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b80600162002ea4602060026200430a565b62002eb091906200419c565b6041541062002f42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007b4565b60016041600082825462002f579190620041b6565b909155505060415460005b602081101562003001578160011660010362002f9757826001826020811062002f8f5762002f8f62003d6e565b015550505050565b6001816020811062002fad5762002fad62003d6e565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002fea919062003dcc565b91508062002ff88162003e08565b91505062002f62565b5062001faf62004318565b60006200304f83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200365492505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf0000000000000000000000000000000000000000000000000000000014620030fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007b4565b600080808080808062003115896004818d62004347565b81019062003124919062004373565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614620031ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007b4565b73ffffffffffffffffffffffffffffffffffffffff8616301462003296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007b4565b8a851462003327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007b4565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e1691620033e2919062003f1e565b6000604051808303816000865af19150503d806000811462003421576040519150601f19603f3d011682016040523d82523d6000602084013e62003426565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052620034979085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002ac4565b50505050565b600062003501826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166200365b9092919063ffffffff16565b80519091501562001faf578080602001905181019062003522919062004069565b62001faf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007b4565b600054610100900460ff1662003649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b6200127333620029fa565b6020015190565b60606200207584846000858573ffffffffffffffffffffffffffffffffffffffff85163b620036e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007b4565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405162003712919062003f1e565b60006040518083038185875af1925050503d806000811462003751576040519150601f19603f3d011682016040523d82523d6000602084013e62003756565b606091505b50915091506200376882828662003773565b979650505050505050565b606083156200378457508162002e8c565b825115620037955782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007b49190620043ce565b61182980620043e483390190565b73ffffffffffffffffffffffffffffffffffffffff811681146200238457600080fd5b80356200380981620037d9565b919050565b803563ffffffff811681146200380957600080fd5b60008060008060008060a087890312156200383d57600080fd5b86356200384a81620037d9565b95506200385a602088016200380e565b945060408701356200386c81620037d9565b935060608701359250608087013567ffffffffffffffff808211156200389157600080fd5b818901915089601f830112620038a657600080fd5b813581811115620038b657600080fd5b8a6020828501011115620038c957600080fd5b6020830194508093505050509295509295509295565b60008060408385031215620038f357600080fd5b620038fe836200380e565b915060208301356200391081620037d9565b809150509250929050565b6000602082840312156200392e57600080fd5b5035919050565b6000602082840312156200394857600080fd5b62002e8c826200380e565b6000602082840312156200396657600080fd5b813562002e8c81620037d9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620039ec57620039ec62003973565b604052919050565b600082601f83011262003a0657600080fd5b8135602067ffffffffffffffff82111562003a255762003a2562003973565b8160051b62003a36828201620039a2565b928352848101820192828101908785111562003a5157600080fd5b83870192505b84831015620037685782358252918301919083019062003a57565b6000806000806080858703121562003a8957600080fd5b84359350602085013567ffffffffffffffff8082111562003aa957600080fd5b62003ab788838901620039f4565b945060408701359150808216821462003acf57600080fd5b509396929550929360600135925050565b60ff811681146200238457600080fd5b600080600080600080600060e0888a03121562003b0c57600080fd5b873562003b198162003ae0565b965062003b29602089016200380e565b9550604088013562003b3b81620037d9565b945062003b4b606089016200380e565b9350608088013562003b5d81620037d9565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562003b975762003b9762003973565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011262003bd557600080fd5b813562003bec62003be68262003b7a565b620039a2565b81815284602083860101111562003c0257600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562003c4057600080fd5b8a3567ffffffffffffffff8082111562003c5957600080fd5b62003c678e838f01620039f4565b9b5062003c7760208e016200380e565b9a5060408d0135995060608d0135985062003c9560808e016200380e565b975062003ca560a08e01620037fc565b965062003cb560c08e016200380e565b955062003cc560e08e01620037fc565b94506101008d013593506101208d013591508082111562003ce557600080fd5b5062003cf48d828e0162003bc3565b9150509295989b9194979a5092959850565b60008060006060848603121562003d1c57600080fd5b62003d27846200380e565b9250602084013562003d3981620037d9565b9150604084013567ffffffffffffffff81111562003d5657600080fd5b62003d648682870162003bc3565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003e03577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003e3c5762003e3c62003d9d565b5060010190565b60006020828403121562003e5657600080fd5b5051919050565b60005b8381101562003e7a57818101518382015260200162003e60565b83811115620034975750506000910152565b6000815180845262003ea681602086016020860162003e5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003f15606083018462003e8c565b95945050505050565b6000825162003f3281846020870162003e5d565b9190910192915050565b600082601f83011262003f4e57600080fd5b815162003f5f62003be68262003b7a565b81815284602083860101111562003f7557600080fd5b6200207582602083016020870162003e5d565b60008060006060848603121562003f9e57600080fd5b835167ffffffffffffffff8082111562003fb757600080fd5b62003fc58783880162003f3c565b9450602086015191508082111562003fdc57600080fd5b5062003feb8682870162003f3c565b925050604084015162003ffe8162003ae0565b809150509250925092565b60a0815260006200401e60a083018862003e8c565b828103602084015262004032818862003e8c565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000602082840312156200407c57600080fd5b8151801515811462002e8c57600080fd5b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620040ed8285018762003e8c565b925080851660e085015250509998505050505050505050565b6000602082840312156200411957600080fd5b815167ffffffffffffffff8111156200413157600080fd5b620020758482850162003f3c565b6000602082840312156200415257600080fd5b815162002e8c8162003ae0565b60608152600062004174606083018662003e8c565b828103602084015262004188818662003e8c565b91505060ff83166040830152949350505050565b600082821015620041b157620041b162003d9d565b500390565b60008219821115620041cc57620041cc62003d9d565b500190565b600181815b808511156200423057817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562004214576200421462003d9d565b808516156200422257918102915b93841c9390800290620041d6565b509250929050565b600082620042495750600162000872565b81620042585750600062000872565b81600181146200427157600281146200427c576200429c565b600191505062000872565b60ff84111562004290576200429062003d9d565b50506001821b62000872565b5060208310610133831016604e8410600b8410161715620042c1575081810a62000872565b620042cd8383620041d1565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562004302576200430262003d9d565b029392505050565b600062002e8c838362004238565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600080858511156200435857600080fd5b838611156200436657600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200438f57600080fd5b87356200439c81620037d9565b96506020880135620043ae81620037d9565b95506040880135945060608801359350608088013562003b5d8162003ae0565b60208152600062002e8c602083018462003e8c56fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a26469706673582212202df0b88d99ea837cef4ce1ae938f90df917823197383f2babdee37a8bec9b78364736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50615fd8806100206000396000f3fe608060405260043610620001c35760003560e01c806381b1c17411620000f3578063bab161bf1162000095578063e7375881116200006c578063e73758811462000678578063ed6be5c914620006ac578063f2fde38b14620006c3578063ff634ed714620006e857600080fd5b8063bab161bf14620005fd578063d02103ca1462000632578063d96a15f7146200066157600080fd5b806391e57e2d11620000ca57806391e57e2d1462000596578063a08e8a0814620005ae578063b7e6a7d414620005d857600080fd5b806381b1c17414620004fd5780638624c35c14620005445780638da5cb5b146200056957600080fd5b8063318aee3d11620001695780633e19704311620001405780633e19704314620003a757806346385549146200049b578063715018a614620004c05780637b6323c114620004d857600080fd5b8063318aee3d14620002d05780633ae0504714620003595780633da81682146200037157600080fd5b80632c3f58cd116200019e5780632c3f58cd14620002555780632dfdf0b5146200027a5780632f3a3d5d14620002a157600080fd5b80630871e97114620001c857806322e95f2c14620001e15780632b5e42e71462000230575b600080fd5b620001df620001d936600462003b22565b620006ff565b005b348015620001ee57600080fd5b50620002066200020036600462003bde565b620007d5565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200023d57600080fd5b50620001df6200024f36600462003c1a565b62000878565b3480156200026257600080fd5b50620001df6200027436600462003c34565b62000887565b3480156200028757600080fd5b506200029260415481565b60405190815260200162000227565b348015620002ae57600080fd5b50604754620002069073ffffffffffffffffffffffffffffffffffffffff1681565b348015620002dd57600080fd5b5062000327620002ef36600462003c52565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000227565b3480156200036657600080fd5b5062000292620008c8565b3480156200037e57600080fd5b50620003966200039036600462003d71565b620009a2565b604051901515815260200162000227565b348015620003b457600080fd5b5062000292620003c636600462003def565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004a857600080fd5b50620001df620004ba36600462003f1e565b62000aa2565b348015620004cd57600080fd5b50620001df6200125d565b348015620004e557600080fd5b50620001df620004f736600462003f1e565b62001275565b3480156200050a57600080fd5b50620002066200051c36600462003c1a565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200055157600080fd5b50620001df6200056336600462003bde565b62001d20565b3480156200057657600080fd5b50607a5473ffffffffffffffffffffffffffffffffffffffff1662000206565b348015620005a357600080fd5b506200029260ac5481565b348015620005bb57600080fd5b50620005c5600081565b60405160ff909116815260200162000227565b348015620005e557600080fd5b5062000206620005f736600462003bde565b62001fb4565b3480156200060a57600080fd5b506042546200061c9063ffffffff1681565b60405163ffffffff909116815260200162000227565b3480156200063f57600080fd5b50604654620002069073ffffffffffffffffffffffffffffffffffffffff1681565b620001df6200067236600462004005565b6200207d565b3480156200068557600080fd5b50620003966200069736600462003c1a565b60436020526000908152604090205460ff1681565b348015620006b957600080fd5b506200061c600081565b348015620006d057600080fd5b50620001df620006e236600462003c52565b620022ca565b348015620006f557600080fd5b50620005c5600181565b60ac54341115620007bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b620007cd86868686868662002387565b505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6200088262002977565b60ac55565b6200089162002977565b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b6041546000908190815b60208110156200099a5781600116600103620009325760018160208110620008fe57620008fe6200406d565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000976565b82602182602081106200094957620009496200406d565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b62000983600283620040cb565b915080620009918162004107565b915050620008d2565b509092915050565b60008467ffffffffffffffff8416825b602081101562000a95578160011660010362000a1f57868181518110620009dd57620009dd6200406d565b60200260200101518360405160200162000a01929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000a71565b8287828151811062000a355762000a356200406d565b602002602001015160405160200162000a58929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000a7e600283620040cb565b91508062000a8c8162004107565b915050620009b2565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000b4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d45440000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000be3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c09919062004142565b60000362000c9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d4154434800000000000000000000006064820152608401620007b4565b60425463ffffffff85811691161462000d36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000006064820152608401620007b4565b60425463ffffffff1662000eb4578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062000e20905b8b8b63ffffffff168a620009a2565b62000eae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6200101e565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062000f90905b8b8b63ffffffff168b620009a2565b6200101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff85169084906200108c9089908b908790602401620041d7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f200000000000000000000000000000000000000000000000000000000179052516200110f91906200421d565b60006040518083038185875af1925050503d80600081146200114e576040519150601f19603f3d011682016040523d82523d6000602084013e62001153565b606091505b5050905080620011e5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b6200126762002977565b620012736000620029fa565b565b63ffffffff891660009081526043602052604090205460ff1615620012f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d454400006044820152606401620007b4565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001390573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013b6919062004142565b60000362001447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d415443480000000000000000000000000000000000006064820152608401620007b4565b60425463ffffffff858116911614620014e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d415443480000000000000000000000000000006064820152608401620007b4565b60425463ffffffff1662001612578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620015a49062000e11565b6200160c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007b4565b6200172d565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620016c59062000f81565b6200172d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007b4565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff85166200189e576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff8516908490604051620017c091906200421d565b60006040518083038185875af1925050503d8060008114620017ff576040519150601f19603f3d011682016040523d82523d6000602084013e62001804565b606091505b505090508062001897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f45440000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b5062001ca9565b60425463ffffffff90811690871603620018db57620018d573ffffffffffffffffffffffffffffffffffffffff8616848462002a71565b62001ca9565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001c0857604754600090620019c69073ffffffffffffffffffffffffffffffffffffffff168462002b47565b9050600080600086806020019051810190620019e3919062004287565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001a2c95949392919062004308565b600060405180830381600087803b15801562001a4757600080fd5b505af115801562001a5c573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001bf69392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062001ca6565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001c7e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ca4919062004377565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff161580801562001d415750600054600160ff909116105b8062001d5d5750303b15801562001d5d575060005460ff166001145b62001deb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007b4565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801562001e4a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841617905560405162001ec89062003aca565b604051809103906000f08015801562001ee5573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905562001f3562002c27565b62001f3f62002d6c565b6703782dace9d9000060ac55801562001faf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620020759073ffffffffffffffffffffffffffffffffffffffff168262002e0f565b949350505050565b60425463ffffffff908116908416036200211a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007b4565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620021679260019263ffffffff9092169133918991899134918a919062004397565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200224a9062002e93565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62002272620008c8565b6040518263ffffffff1660e01b81526004016200229191815260200190565b600060405180830381600087803b158015620022ac57600080fd5b505af1158015620022c1573d6000803e3d6000fd5b50505050505050565b620022d462002977565b73ffffffffffffffffffffffffffffffffffffffff811662002379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007b4565b6200238481620029fa565b50565b60425463ffffffff9081169086160362002424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007b4565b600080606073ffffffffffffffffffffffffffffffffffffffff8916620024e057853414620024d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007b4565b60009150620027f4565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620025e1576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af1158015620025a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620025ce919062004377565b50602081015181519094509250620027f2565b8415620025f657620025f68a8888886200300c565b6200261a73ffffffffffffffffffffffffffffffffffffffff8b1633308a62003736565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200267e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620026c6919081019062004410565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562002712573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200275a919081019062004410565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620027a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620027cc919062004449565b604051602001620027e09392919062004469565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876041546040516200283698979695949392919062004397565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620028f19062002e93565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62002919620008c8565b6040518263ffffffff1660e01b81526004016200293891815260200190565b600060405180830381600087803b1580156200295357600080fd5b505af115801562002968573d6000803e3d6000fd5b50505050505050505050505050565b607a5473ffffffffffffffffffffffffffffffffffffffff16331462001273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007b4565b607a805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262001faf9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526200379c565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401620007b4565b600054610100900460ff1662002cc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b60005b62002cd160016020620044a6565b81101562002384576021816020811062002cef5762002cef6200406d565b01546021826020811062002d075762002d076200406d565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002d429190620044c0565b6020811062002d555762002d556200406d565b01558062002d638162004107565b91505062002cc3565b600054610100900460ff1662002e05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b62001273620038af565b600062002e8c8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b80600162002ea46020600262004614565b62002eb09190620044a6565b6041541062002f42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007b4565b60016041600082825462002f579190620044c0565b909155505060415460005b602081101562003001578160011660010362002f9757826001826020811062002f8f5762002f8f6200406d565b015550505050565b6001816020811062002fad5762002fad6200406d565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002fea9190620040cb565b91508062002ff88162004107565b91505062002f62565b5062001faf62004622565b60006200304f83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200395392505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620033d3576000808080808080620030b2896004818d62004651565b810190620030c191906200467d565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16146200318c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007b4565b73ffffffffffffffffffffffffffffffffffffffff8616301462003233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007b4565b8a8514620032c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007b4565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e16916200337f91906200421d565b6000604051808303816000865af19150503d8060008114620033be576040519150601f19603f3d011682016040523d82523d6000602084013e620033c3565b606091505b505050505050505050506200372f565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462003480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007b4565b600080808080808080620034988a6004818e62004651565b810190620034a79190620046d8565b975097509750975097509750975097503373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161462003574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007b4565b73ffffffffffffffffffffffffffffffffffffffff871630146200361b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6040805173ffffffffffffffffffffffffffffffffffffffff8a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f1691620036df91906200421d565b6000604051808303816000865af19150503d80600081146200371e576040519150601f19603f3d011682016040523d82523d6000602084013e62003723565b606091505b50505050505050505050505b5050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052620037969085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002ac4565b50505050565b600062003800826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166200395a9092919063ffffffff16565b80519091501562001faf578080602001905181019062003821919062004377565b62001faf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007b4565b600054610100900460ff1662003948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b6200127333620029fa565b6020015190565b60606200207584846000858573ffffffffffffffffffffffffffffffffffffffff85163b620039e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007b4565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405162003a1191906200421d565b60006040518083038185875af1925050503d806000811462003a50576040519150601f19603f3d011682016040523d82523d6000602084013e62003a55565b606091505b509150915062003a6782828662003a72565b979650505050505050565b6060831562003a8357508162002e8c565b82511562003a945782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007b4919062004764565b611829806200477a83390190565b73ffffffffffffffffffffffffffffffffffffffff811681146200238457600080fd5b803562003b088162003ad8565b919050565b803563ffffffff8116811462003b0857600080fd5b60008060008060008060a0878903121562003b3c57600080fd5b863562003b498162003ad8565b955062003b596020880162003b0d565b9450604087013562003b6b8162003ad8565b935060608701359250608087013567ffffffffffffffff8082111562003b9057600080fd5b818901915089601f83011262003ba557600080fd5b81358181111562003bb557600080fd5b8a602082850101111562003bc857600080fd5b6020830194508093505050509295509295509295565b6000806040838503121562003bf257600080fd5b62003bfd8362003b0d565b9150602083013562003c0f8162003ad8565b809150509250929050565b60006020828403121562003c2d57600080fd5b5035919050565b60006020828403121562003c4757600080fd5b62002e8c8262003b0d565b60006020828403121562003c6557600080fd5b813562002e8c8162003ad8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171562003ceb5762003ceb62003c72565b604052919050565b600082601f83011262003d0557600080fd5b8135602067ffffffffffffffff82111562003d245762003d2462003c72565b8160051b62003d3582820162003ca1565b928352848101820192828101908785111562003d5057600080fd5b83870192505b8483101562003a675782358252918301919083019062003d56565b6000806000806080858703121562003d8857600080fd5b84359350602085013567ffffffffffffffff8082111562003da857600080fd5b62003db68883890162003cf3565b945060408701359150808216821462003dce57600080fd5b509396929550929360600135925050565b60ff811681146200238457600080fd5b600080600080600080600060e0888a03121562003e0b57600080fd5b873562003e188162003ddf565b965062003e286020890162003b0d565b9550604088013562003e3a8162003ad8565b945062003e4a6060890162003b0d565b9350608088013562003e5c8162003ad8565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562003e965762003e9662003c72565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011262003ed457600080fd5b813562003eeb62003ee58262003e79565b62003ca1565b81815284602083860101111562003f0157600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562003f3f57600080fd5b8a3567ffffffffffffffff8082111562003f5857600080fd5b62003f668e838f0162003cf3565b9b5062003f7660208e0162003b0d565b9a5060408d0135995060608d0135985062003f9460808e0162003b0d565b975062003fa460a08e0162003afb565b965062003fb460c08e0162003b0d565b955062003fc460e08e0162003afb565b94506101008d013593506101208d013591508082111562003fe457600080fd5b5062003ff38d828e0162003ec2565b9150509295989b9194979a5092959850565b6000806000606084860312156200401b57600080fd5b620040268462003b0d565b92506020840135620040388162003ad8565b9150604084013567ffffffffffffffff8111156200405557600080fd5b620040638682870162003ec2565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262004102577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200413b576200413b6200409c565b5060010190565b6000602082840312156200415557600080fd5b5051919050565b60005b83811015620041795781810151838201526020016200415f565b83811115620037965750506000910152565b60008151808452620041a58160208601602086016200415c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff831660208201526060604082015260006200421460608301846200418b565b95945050505050565b60008251620042318184602087016200415c565b9190910192915050565b600082601f8301126200424d57600080fd5b81516200425e62003ee58262003e79565b8181528460208386010111156200427457600080fd5b620020758260208301602087016200415c565b6000806000606084860312156200429d57600080fd5b835167ffffffffffffffff80821115620042b657600080fd5b620042c4878388016200423b565b94506020860151915080821115620042db57600080fd5b50620042ea868287016200423b565b9250506040840151620042fd8162003ddf565b809150509250925092565b60a0815260006200431d60a08301886200418b565b82810360208401526200433181886200418b565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b80151581146200238457600080fd5b6000602082840312156200438a57600080fd5b815162002e8c8162004368565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620043f7828501876200418b565b925080851660e085015250509998505050505050505050565b6000602082840312156200442357600080fd5b815167ffffffffffffffff8111156200443b57600080fd5b62002075848285016200423b565b6000602082840312156200445c57600080fd5b815162002e8c8162003ddf565b6060815260006200447e60608301866200418b565b82810360208401526200449281866200418b565b91505060ff83166040830152949350505050565b600082821015620044bb57620044bb6200409c565b500390565b60008219821115620044d657620044d66200409c565b500190565b600181815b808511156200453a57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156200451e576200451e6200409c565b808516156200452c57918102915b93841c9390800290620044e0565b509250929050565b600082620045535750600162000872565b81620045625750600062000872565b81600181146200457b57600281146200458657620045a6565b600191505062000872565b60ff8411156200459a576200459a6200409c565b50506001821b62000872565b5060208310610133831016604e8410600b8410161715620045cb575081810a62000872565b620045d78383620044db565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156200460c576200460c6200409c565b029392505050565b600062002e8c838362004542565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600080858511156200466257600080fd5b838611156200467057600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200469957600080fd5b8735620046a68162003ad8565b96506020880135620046b88162003ad8565b95506040880135945060608801359350608088013562003e5c8162003ddf565b600080600080600080600080610100898b031215620046f657600080fd5b8835620047038162003ad8565b97506020890135620047158162003ad8565b965060408901359550606089013594506080890135620047358162004368565b935060a0890135620047478162003ddf565b979a969950949793969295929450505060c08201359160e0013590565b60208152600062002e8c60208301846200418b56fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a26469706673582212204cbd90c00001c69b8915bc7e9f1f0630e7ce4669f77d2d4c62d1664879214b3164736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001c35760003560e01c806381b1c17411620000f3578063bab161bf1162000095578063e7375881116200006c578063e73758811462000678578063ed6be5c914620006ac578063f2fde38b14620006c3578063ff634ed714620006e857600080fd5b8063bab161bf14620005fd578063d02103ca1462000632578063d96a15f7146200066157600080fd5b806391e57e2d11620000ca57806391e57e2d1462000596578063a08e8a0814620005ae578063b7e6a7d414620005d857600080fd5b806381b1c17414620004fd5780638624c35c14620005445780638da5cb5b146200056957600080fd5b8063318aee3d11620001695780633e19704311620001405780633e19704314620003a757806346385549146200049b578063715018a614620004c05780637b6323c114620004d857600080fd5b8063318aee3d14620002d05780633ae0504714620003595780633da81682146200037157600080fd5b80632c3f58cd116200019e5780632c3f58cd14620002555780632dfdf0b5146200027a5780632f3a3d5d14620002a157600080fd5b80630871e97114620001c857806322e95f2c14620001e15780632b5e42e71462000230575b600080fd5b620001df620001d936600462003b22565b620006ff565b005b348015620001ee57600080fd5b50620002066200020036600462003bde565b620007d5565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200023d57600080fd5b50620001df6200024f36600462003c1a565b62000878565b3480156200026257600080fd5b50620001df6200027436600462003c34565b62000887565b3480156200028757600080fd5b506200029260415481565b60405190815260200162000227565b348015620002ae57600080fd5b50604754620002069073ffffffffffffffffffffffffffffffffffffffff1681565b348015620002dd57600080fd5b5062000327620002ef36600462003c52565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000227565b3480156200036657600080fd5b5062000292620008c8565b3480156200037e57600080fd5b50620003966200039036600462003d71565b620009a2565b604051901515815260200162000227565b348015620003b457600080fd5b5062000292620003c636600462003def565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004a857600080fd5b50620001df620004ba36600462003f1e565b62000aa2565b348015620004cd57600080fd5b50620001df6200125d565b348015620004e557600080fd5b50620001df620004f736600462003f1e565b62001275565b3480156200050a57600080fd5b50620002066200051c36600462003c1a565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200055157600080fd5b50620001df6200056336600462003bde565b62001d20565b3480156200057657600080fd5b50607a5473ffffffffffffffffffffffffffffffffffffffff1662000206565b348015620005a357600080fd5b506200029260ac5481565b348015620005bb57600080fd5b50620005c5600081565b60405160ff909116815260200162000227565b348015620005e557600080fd5b5062000206620005f736600462003bde565b62001fb4565b3480156200060a57600080fd5b506042546200061c9063ffffffff1681565b60405163ffffffff909116815260200162000227565b3480156200063f57600080fd5b50604654620002069073ffffffffffffffffffffffffffffffffffffffff1681565b620001df6200067236600462004005565b6200207d565b3480156200068557600080fd5b50620003966200069736600462003c1a565b60436020526000908152604090205460ff1681565b348015620006b957600080fd5b506200061c600081565b348015620006d057600080fd5b50620001df620006e236600462003c52565b620022ca565b348015620006f557600080fd5b50620005c5600181565b60ac54341115620007bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b620007cd86868686868662002387565b505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6200088262002977565b60ac55565b6200089162002977565b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b6041546000908190815b60208110156200099a5781600116600103620009325760018160208110620008fe57620008fe6200406d565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000976565b82602182602081106200094957620009496200406d565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b62000983600283620040cb565b915080620009918162004107565b915050620008d2565b509092915050565b60008467ffffffffffffffff8416825b602081101562000a95578160011660010362000a1f57868181518110620009dd57620009dd6200406d565b60200260200101518360405160200162000a01929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000a71565b8287828151811062000a355762000a356200406d565b602002602001015160405160200162000a58929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000a7e600283620040cb565b91508062000a8c8162004107565b915050620009b2565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000b4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d45440000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000be3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c09919062004142565b60000362000c9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d4154434800000000000000000000006064820152608401620007b4565b60425463ffffffff85811691161462000d36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000006064820152608401620007b4565b60425463ffffffff1662000eb4578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062000e20905b8b8b63ffffffff168a620009a2565b62000eae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6200101e565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062000f90905b8b8b63ffffffff168b620009a2565b6200101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff85169084906200108c9089908b908790602401620041d7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f200000000000000000000000000000000000000000000000000000000179052516200110f91906200421d565b60006040518083038185875af1925050503d80600081146200114e576040519150601f19603f3d011682016040523d82523d6000602084013e62001153565b606091505b5050905080620011e5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b6200126762002977565b620012736000620029fa565b565b63ffffffff891660009081526043602052604090205460ff1615620012f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d454400006044820152606401620007b4565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001390573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013b6919062004142565b60000362001447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d415443480000000000000000000000000000000000006064820152608401620007b4565b60425463ffffffff858116911614620014e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d415443480000000000000000000000000000006064820152608401620007b4565b60425463ffffffff1662001612578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620015a49062000e11565b6200160c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007b4565b6200172d565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620016c59062000f81565b6200172d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007b4565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff85166200189e576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff8516908490604051620017c091906200421d565b60006040518083038185875af1925050503d8060008114620017ff576040519150601f19603f3d011682016040523d82523d6000602084013e62001804565b606091505b505090508062001897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f45440000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b5062001ca9565b60425463ffffffff90811690871603620018db57620018d573ffffffffffffffffffffffffffffffffffffffff8616848462002a71565b62001ca9565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001c0857604754600090620019c69073ffffffffffffffffffffffffffffffffffffffff168462002b47565b9050600080600086806020019051810190620019e3919062004287565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001a2c95949392919062004308565b600060405180830381600087803b15801562001a4757600080fd5b505af115801562001a5c573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001bf69392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062001ca6565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001c7e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ca4919062004377565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff161580801562001d415750600054600160ff909116105b8062001d5d5750303b15801562001d5d575060005460ff166001145b62001deb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007b4565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801562001e4a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841617905560405162001ec89062003aca565b604051809103906000f08015801562001ee5573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905562001f3562002c27565b62001f3f62002d6c565b6703782dace9d9000060ac55801562001faf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620020759073ffffffffffffffffffffffffffffffffffffffff168262002e0f565b949350505050565b60425463ffffffff908116908416036200211a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007b4565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620021679260019263ffffffff9092169133918991899134918a919062004397565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200224a9062002e93565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62002272620008c8565b6040518263ffffffff1660e01b81526004016200229191815260200190565b600060405180830381600087803b158015620022ac57600080fd5b505af1158015620022c1573d6000803e3d6000fd5b50505050505050565b620022d462002977565b73ffffffffffffffffffffffffffffffffffffffff811662002379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007b4565b6200238481620029fa565b50565b60425463ffffffff9081169086160362002424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007b4565b600080606073ffffffffffffffffffffffffffffffffffffffff8916620024e057853414620024d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007b4565b60009150620027f4565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620025e1576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af1158015620025a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620025ce919062004377565b50602081015181519094509250620027f2565b8415620025f657620025f68a8888886200300c565b6200261a73ffffffffffffffffffffffffffffffffffffffff8b1633308a62003736565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200267e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620026c6919081019062004410565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562002712573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200275a919081019062004410565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620027a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620027cc919062004449565b604051602001620027e09392919062004469565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876041546040516200283698979695949392919062004397565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620028f19062002e93565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62002919620008c8565b6040518263ffffffff1660e01b81526004016200293891815260200190565b600060405180830381600087803b1580156200295357600080fd5b505af115801562002968573d6000803e3d6000fd5b50505050505050505050505050565b607a5473ffffffffffffffffffffffffffffffffffffffff16331462001273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007b4565b607a805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262001faf9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526200379c565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401620007b4565b600054610100900460ff1662002cc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b60005b62002cd160016020620044a6565b81101562002384576021816020811062002cef5762002cef6200406d565b01546021826020811062002d075762002d076200406d565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002d429190620044c0565b6020811062002d555762002d556200406d565b01558062002d638162004107565b91505062002cc3565b600054610100900460ff1662002e05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b62001273620038af565b600062002e8c8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b80600162002ea46020600262004614565b62002eb09190620044a6565b6041541062002f42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007b4565b60016041600082825462002f579190620044c0565b909155505060415460005b602081101562003001578160011660010362002f9757826001826020811062002f8f5762002f8f6200406d565b015550505050565b6001816020811062002fad5762002fad6200406d565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002fea9190620040cb565b91508062002ff88162004107565b91505062002f62565b5062001faf62004622565b60006200304f83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200395392505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620033d3576000808080808080620030b2896004818d62004651565b810190620030c191906200467d565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16146200318c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007b4565b73ffffffffffffffffffffffffffffffffffffffff8616301462003233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007b4565b8a8514620032c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007b4565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e16916200337f91906200421d565b6000604051808303816000865af19150503d8060008114620033be576040519150601f19603f3d011682016040523d82523d6000602084013e620033c3565b606091505b505050505050505050506200372f565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462003480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007b4565b600080808080808080620034988a6004818e62004651565b810190620034a79190620046d8565b975097509750975097509750975097503373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161462003574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007b4565b73ffffffffffffffffffffffffffffffffffffffff871630146200361b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6040805173ffffffffffffffffffffffffffffffffffffffff8a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f1691620036df91906200421d565b6000604051808303816000865af19150503d80600081146200371e576040519150601f19603f3d011682016040523d82523d6000602084013e62003723565b606091505b50505050505050505050505b5050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052620037969085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002ac4565b50505050565b600062003800826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166200395a9092919063ffffffff16565b80519091501562001faf578080602001905181019062003821919062004377565b62001faf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007b4565b600054610100900460ff1662003948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b6200127333620029fa565b6020015190565b60606200207584846000858573ffffffffffffffffffffffffffffffffffffffff85163b620039e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007b4565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405162003a1191906200421d565b60006040518083038185875af1925050503d806000811462003a50576040519150601f19603f3d011682016040523d82523d6000602084013e62003a55565b606091505b509150915062003a6782828662003a72565b979650505050505050565b6060831562003a8357508162002e8c565b82511562003a945782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007b4919062004764565b611829806200477a83390190565b73ffffffffffffffffffffffffffffffffffffffff811681146200238457600080fd5b803562003b088162003ad8565b919050565b803563ffffffff8116811462003b0857600080fd5b60008060008060008060a0878903121562003b3c57600080fd5b863562003b498162003ad8565b955062003b596020880162003b0d565b9450604087013562003b6b8162003ad8565b935060608701359250608087013567ffffffffffffffff8082111562003b9057600080fd5b818901915089601f83011262003ba557600080fd5b81358181111562003bb557600080fd5b8a602082850101111562003bc857600080fd5b6020830194508093505050509295509295509295565b6000806040838503121562003bf257600080fd5b62003bfd8362003b0d565b9150602083013562003c0f8162003ad8565b809150509250929050565b60006020828403121562003c2d57600080fd5b5035919050565b60006020828403121562003c4757600080fd5b62002e8c8262003b0d565b60006020828403121562003c6557600080fd5b813562002e8c8162003ad8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171562003ceb5762003ceb62003c72565b604052919050565b600082601f83011262003d0557600080fd5b8135602067ffffffffffffffff82111562003d245762003d2462003c72565b8160051b62003d3582820162003ca1565b928352848101820192828101908785111562003d5057600080fd5b83870192505b8483101562003a675782358252918301919083019062003d56565b6000806000806080858703121562003d8857600080fd5b84359350602085013567ffffffffffffffff8082111562003da857600080fd5b62003db68883890162003cf3565b945060408701359150808216821462003dce57600080fd5b509396929550929360600135925050565b60ff811681146200238457600080fd5b600080600080600080600060e0888a03121562003e0b57600080fd5b873562003e188162003ddf565b965062003e286020890162003b0d565b9550604088013562003e3a8162003ad8565b945062003e4a6060890162003b0d565b9350608088013562003e5c8162003ad8565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562003e965762003e9662003c72565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011262003ed457600080fd5b813562003eeb62003ee58262003e79565b62003ca1565b81815284602083860101111562003f0157600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562003f3f57600080fd5b8a3567ffffffffffffffff8082111562003f5857600080fd5b62003f668e838f0162003cf3565b9b5062003f7660208e0162003b0d565b9a5060408d0135995060608d0135985062003f9460808e0162003b0d565b975062003fa460a08e0162003afb565b965062003fb460c08e0162003b0d565b955062003fc460e08e0162003afb565b94506101008d013593506101208d013591508082111562003fe457600080fd5b5062003ff38d828e0162003ec2565b9150509295989b9194979a5092959850565b6000806000606084860312156200401b57600080fd5b620040268462003b0d565b92506020840135620040388162003ad8565b9150604084013567ffffffffffffffff8111156200405557600080fd5b620040638682870162003ec2565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262004102577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200413b576200413b6200409c565b5060010190565b6000602082840312156200415557600080fd5b5051919050565b60005b83811015620041795781810151838201526020016200415f565b83811115620037965750506000910152565b60008151808452620041a58160208601602086016200415c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff831660208201526060604082015260006200421460608301846200418b565b95945050505050565b60008251620042318184602087016200415c565b9190910192915050565b600082601f8301126200424d57600080fd5b81516200425e62003ee58262003e79565b8181528460208386010111156200427457600080fd5b620020758260208301602087016200415c565b6000806000606084860312156200429d57600080fd5b835167ffffffffffffffff80821115620042b657600080fd5b620042c4878388016200423b565b94506020860151915080821115620042db57600080fd5b50620042ea868287016200423b565b9250506040840151620042fd8162003ddf565b809150509250925092565b60a0815260006200431d60a08301886200418b565b82810360208401526200433181886200418b565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b80151581146200238457600080fd5b6000602082840312156200438a57600080fd5b815162002e8c8162004368565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620043f7828501876200418b565b925080851660e085015250509998505050505050505050565b6000602082840312156200442357600080fd5b815167ffffffffffffffff8111156200443b57600080fd5b62002075848285016200423b565b6000602082840312156200445c57600080fd5b815162002e8c8162003ddf565b6060815260006200447e60608301866200418b565b82810360208401526200449281866200418b565b91505060ff83166040830152949350505050565b600082821015620044bb57620044bb6200409c565b500390565b60008219821115620044d657620044d66200409c565b500190565b600181815b808511156200453a57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156200451e576200451e6200409c565b808516156200452c57918102915b93841c9390800290620044e0565b509250929050565b600082620045535750600162000872565b81620045625750600062000872565b81600181146200457b57600281146200458657620045a6565b600191505062000872565b60ff8411156200459a576200459a6200409c565b50506001821b62000872565b5060208310610133831016604e8410600b8410161715620045cb575081810a62000872565b620045d78383620044db565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156200460c576200460c6200409c565b029392505050565b600062002e8c838362004542565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600080858511156200466257600080fd5b838611156200467057600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200469957600080fd5b8735620046a68162003ad8565b96506020880135620046b88162003ad8565b95506040880135945060608801359350608088013562003e5c8162003ddf565b600080600080600080600080610100898b031215620046f657600080fd5b8835620047038162003ad8565b97506020890135620047158162003ad8565b965060408901359550606089013594506080890135620047358162004368565b935060a0890135620047478162003ddf565b979a969950949793969295929450505060c08201359160e0013590565b60208152600062002e8c60208301846200418b56fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a26469706673582212204cbd90c00001c69b8915bc7e9f1f0630e7ce4669f77d2d4c62d1664879214b3164736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/ProofOfEfficiency.json b/compiled-contracts/ProofOfEfficiency.json index 9e96ab360..7141f5ce2 100644 --- a/compiled-contracts/ProofOfEfficiency.json +++ b/compiled-contracts/ProofOfEfficiency.json @@ -669,8 +669,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50613982806100206000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c8063ac2eba9811610104578063d02103ca116100a2578063e7a7ed0211610071578063e7a7ed021461048a578063e8bf92ed146104ba578063eaeb077b146104da578063f7552761146104ed57600080fd5b8063d02103ca14610407578063d2fd1b3114610427578063d8d1091b1461043a578063d8f54db01461044d57600080fd5b8063b4d63f58116100de578063b4d63f581461035d578063b6b0b0971461037d578063c89e42df146103c8578063cfa8ed47146103db57600080fd5b8063ac2eba9814610337578063adc879e914610340578063b02286c01461035457600080fd5b80636b8616ce1161017c5780637fcb36531161014b5780637fcb3653146102fe5780638c4a0af71461031257806399f5634e14610325578063ab9fc5ef1461032d57600080fd5b80636b8616ce146102a25780636ff512cc146102d05780637152facf146102e357806379847057146102f657600080fd5b8063423fa856116101b8578063423fa8561461023f578063456052671461025f578063542028d51461028757806355b925e61461028f57600080fd5b8063107bf28c146101df57806319d8ac61146101fd5780633c1582671461022a575b600080fd5b6101e76104fc565b6040516101f49190612dee565b60405180910390f35b6003546102119067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101f4565b61023d610238366004612f9a565b61058a565b005b6003546102119068010000000000000000900467ffffffffffffffff1681565b60035461021190700100000000000000000000000000000000900467ffffffffffffffff1681565b6101e7610ebc565b61023d61029d3660046130e6565b610ec9565b6102c26102b0366004613169565b60016020526000908152604090205481565b6040519081526020016101f4565b61023d6102de3660046131b4565b611439565b6101e76102f13660046131d1565b611574565b6102c2611706565b6004546102119067ffffffffffffffff1681565b61023d61032036600461322c565b611780565b6102c26118b4565b61021162093a8081565b6102c260065481565b6009546102119067ffffffffffffffff1681565b6102c261ea6081565b6102c261036b366004613169565b60026020526000908152604090205481565b6000546103a39062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f4565b61023d6103d6366004613249565b6119e3565b6004546103a39068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b61023d610435366004613286565b611ad2565b61023d61044836600461335c565b611dbf565b60045461047a907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016101f4565b600354610211907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6007546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b61023d6104e836600461346d565b612465565b6102c267016345785d8a000081565b600a8054610509906134b2565b80601f0160208091040260200160405190810160405280929190818152602001828054610535906134b2565b80156105825780601f1061055757610100808354040283529160200191610582565b820191906000526020600020905b81548152906001019060200180831161056557829003601f168201915b505050505081565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b805160035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610c925760008782815181106106aa576106aa613505565b602002602001015190506000816060015167ffffffffffffffff16111561091557836106d581613563565b94505060008160000151805190602001208260200151836060015160405160200161073893929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff881660009081526001909352912054909150811461083d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b816060015167ffffffffffffffff16826040015167ffffffffffffffff16101561090f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610639565b50610ae3565b602081015115806109c4575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b36329161097e9160040190815260200190565b6020604051808303816000875af115801561099d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c1919061358a565b15155b610a50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610639565b80515161ea6011610ae3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610639565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610b19575042816040015167ffffffffffffffff1611155b610bcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610c7490613563565b95505080604001519550508080610c8a906135a3565b91505061068e565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610d4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610639565b600354600090610d7d90700100000000000000000000000000000000900467ffffffffffffffff16846135db565b610d919067ffffffffffffffff1687613604565b6003805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c169390931793909317929092169190911790915560009081526002602052604090208390559050610e6f3330610e488467016345785d8a000061361b565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16929190612933565b6003546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60088054610509906134b2565b60045467ffffffffffffffff888116911614610f8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c6173745665726966696564426174636820646f6573206e6f74206d6160648201527f7463680000000000000000000000000000000000000000000000000000000000608482015260a401610639565b8667ffffffffffffffff168667ffffffffffffffff1611611056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610639565b60035467ffffffffffffffff6801000000000000000090910481169087161115611129576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a76657269667942617463686573908201527f3a20626174636820646f6573206e6f742068617665206265656e20736571756560648201527f6e63656400000000000000000000000000000000000000000000000000000000608482015260a401610639565b600061113788888888611574565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161116c9190613658565b602060405180830381855afa158015611189573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906111ac919061358a565b6111b691906136a3565b6007546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d9161122091899189918991906004016136b7565b602060405180830381865afa15801561123d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112619190613731565b6112ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610639565b61133d336112fb8b8b6135db565b67ffffffffffffffff1661130d6118b4565b611317919061361b565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff169190612a0f565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a1617815560068790556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820189905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b1580156113df57600080fd5b505af11580156113f3573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8b1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a3505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146114ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b67ffffffffffffffff808516600090815260026020526040808220549286168252902054606091908061164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610639565b6006546009546040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b1660208201526034810192909252605482018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607485015291821b8116607c8401526084830187905260a4830184905260c483018890529088901b1660e482015260ec0160405160208183030381529060405292505050949350505050565b60035460009067ffffffffffffffff700100000000000000000000000000000000820481169161175591780100000000000000000000000000000000000000000000000090910416600161374e565b61175f91906135db565b61177b9067ffffffffffffffff16670de0b6b3a764000061361b565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061156990831515815260200190565b600080546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829162010000900473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015611929573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194d919061358a565b60045460035491925060009167ffffffffffffffff918216916801000000000000000082048116916119b291700100000000000000000000000000000000820481169178010000000000000000000000000000000000000000000000009004166135db565b6119bc919061374e565b6119c691906135db565b67ffffffffffffffff1690506119dc818361377a565b9250505090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611a96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b6008611aa282826137dc565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b20816040516115699190612dee565b600054610100900460ff1615808015611af25750600054600160ff909116105b80611b0c5750303b158015611b0c575060005460ff166001145b611b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610639565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611bf657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602179055600780549091168a83161790556006889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c0100000000000000000000000000000000000000000000000000000000871515021790556008611d0e85826137dc565b50600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600a611d4f83826137dc565b508015611db357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114611e9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610639565b805180611f51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b60035467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691611f9c9184917001000000000000000000000000000000009004166138f6565b111561202a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610639565b60035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205491937001000000000000000000000000000000009004909216915b8481101561239557600086828151811061208a5761208a613505565b60200260200101519050838061209f90613563565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff88166000908152600190935291205490915081146121f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610639565b612203600188613604565b83036122db574262093a80836040015161221d919061374e565b67ffffffffffffffff1611156122db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610639565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209350858061237d90613563565b9650505050808061238d906135a3565b91505061206e565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260026020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610639565b600061254c611706565b9050818111156125de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610639565b61ea60835110612670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610639565b60005461269b9062010000900473ffffffffffffffffffffffffffffffffffffffff16333084612933565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa15801561270b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061272f919061358a565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff1690601861276983613563565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050838051906020012081426040516020016127e293929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260019093529120553233036128d057600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261292d565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516129249392919061390e565b60405180910390a25b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261292d9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a6a565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052612a659084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161298d565b505050565b6000612acc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612b769092919063ffffffff16565b805190915015612a655780806020019051810190612aea9190613731565b612a65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610639565b6060612b858484600085612b8f565b90505b9392505050565b606082471015612c21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610639565b73ffffffffffffffffffffffffffffffffffffffff85163b612c9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610639565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612cc89190613658565b60006040518083038185875af1925050503d8060008114612d05576040519150601f19603f3d011682016040523d82523d6000602084013e612d0a565b606091505b5091509150612d1a828286612d25565b979650505050505050565b60608315612d34575081612b88565b825115612d445782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106399190612dee565b60005b83811015612d93578181015183820152602001612d7b565b8381111561292d5750506000910152565b60008151808452612dbc816020860160208601612d78565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612b886020830184612da4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715612e5357612e53612e01565b60405290565b6040516060810167ffffffffffffffff81118282101715612e5357612e53612e01565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612ec357612ec3612e01565b604052919050565b600067ffffffffffffffff821115612ee557612ee5612e01565b5060051b60200190565b600082601f830112612f0057600080fd5b813567ffffffffffffffff811115612f1a57612f1a612e01565b612f4b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612e7c565b818152846020838601011115612f6057600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114612f9557600080fd5b919050565b60006020808385031215612fad57600080fd5b823567ffffffffffffffff80821115612fc557600080fd5b818501915085601f830112612fd957600080fd5b8135612fec612fe782612ecb565b612e7c565b81815260059190911b8301840190848101908883111561300b57600080fd5b8585015b838110156130c2578035858111156130275760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181131561305d5760008081fd5b613065612e30565b89830135888111156130775760008081fd5b6130858e8c83870101612eef565b8252506040808401358b830152606061309f818601612f7d565b828401526130ae848601612f7d565b90830152508552505091860191860161300f565b5098975050505050505050565b80604081018310156130e057600080fd5b92915050565b6000806000806000806000610180888a03121561310257600080fd5b61310b88612f7d565b965061311960208901612f7d565b955060408801359450606088013593506131368960808a016130cf565b925061014088018981111561314a57600080fd5b60c08901925061315a8a826130cf565b91505092959891949750929550565b60006020828403121561317b57600080fd5b612b8882612f7d565b73ffffffffffffffffffffffffffffffffffffffff811681146131a657600080fd5b50565b8035612f9581613184565b6000602082840312156131c657600080fd5b8135612b8881613184565b600080600080608085870312156131e757600080fd5b6131f085612f7d565b93506131fe60208601612f7d565b93969395505050506040820135916060013590565b80151581146131a657600080fd5b8035612f9581613213565b60006020828403121561323e57600080fd5b8135612b8881613213565b60006020828403121561325b57600080fd5b813567ffffffffffffffff81111561327257600080fd5b61327e84828501612eef565b949350505050565b60008060008060008060008060006101208a8c0312156132a557600080fd5b89356132b081613184565b985060208a01356132c081613184565b97506132ce60408b016131a9565b965060608a013595506132e360808b016131a9565b94506132f160a08b01613221565b935060c08a013567ffffffffffffffff8082111561330e57600080fd5b61331a8d838e01612eef565b945061332860e08d01612f7d565b93506101008c013591508082111561333f57600080fd5b5061334c8c828d01612eef565b9150509295985092959850929598565b6000602080838503121561336f57600080fd5b823567ffffffffffffffff8082111561338757600080fd5b818501915085601f83011261339b57600080fd5b81356133a9612fe782612ecb565b81815260059190911b830184019084810190888311156133c857600080fd5b8585015b838110156130c2578035858111156133e45760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181131561341a5760008081fd5b613422612e59565b89830135888111156134345760008081fd5b6134428e8c83870101612eef565b8252506040808401358b83015261345a838501612f7d565b90820152855250509186019186016133cc565b6000806040838503121561348057600080fd5b823567ffffffffffffffff81111561349757600080fd5b6134a385828601612eef565b95602094909401359450505050565b600181811c908216806134c657607f821691505b6020821081036134ff577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681810361358057613580613534565b6001019392505050565b60006020828403121561359c57600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036135d4576135d4613534565b5060010190565b600067ffffffffffffffff838116908316818110156135fc576135fc613534565b039392505050565b60008282101561361657613616613534565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561365357613653613534565b500290565b6000825161366a818460208701612d78565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826136b2576136b2613674565b500690565b61012081016040808784376000838201818152879190815b60028110156136ef578484833790840182815292840192906001016136cf565b5050828760c0870137610100850181815286935091505b6001811015613725578251825260209283019290910190600101613706565b50505095945050505050565b60006020828403121561374357600080fd5b8151612b8881613213565b600067ffffffffffffffff80831681851680830382111561377157613771613534565b01949350505050565b60008261378957613789613674565b500490565b601f821115612a6557600081815260208120601f850160051c810160208610156137b55750805b601f850160051c820191505b818110156137d4578281556001016137c1565b505050505050565b815167ffffffffffffffff8111156137f6576137f6612e01565b61380a8161380484546134b2565b8461378e565b602080601f83116001811461385d57600084156138275750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556137d4565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156138aa5788860151825594840194600190910190840161388b565b50858210156138e657878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000821982111561390957613909613534565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006139436060830184612da4565b9594505050505056fea264697066735822122071d94010caa4b1b92859aa3a9d3b136e1010b41fb42bc5df80410982b070571764736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101da5760003560e01c8063ac2eba9811610104578063d02103ca116100a2578063e7a7ed0211610071578063e7a7ed021461048a578063e8bf92ed146104ba578063eaeb077b146104da578063f7552761146104ed57600080fd5b8063d02103ca14610407578063d2fd1b3114610427578063d8d1091b1461043a578063d8f54db01461044d57600080fd5b8063b4d63f58116100de578063b4d63f581461035d578063b6b0b0971461037d578063c89e42df146103c8578063cfa8ed47146103db57600080fd5b8063ac2eba9814610337578063adc879e914610340578063b02286c01461035457600080fd5b80636b8616ce1161017c5780637fcb36531161014b5780637fcb3653146102fe5780638c4a0af71461031257806399f5634e14610325578063ab9fc5ef1461032d57600080fd5b80636b8616ce146102a25780636ff512cc146102d05780637152facf146102e357806379847057146102f657600080fd5b8063423fa856116101b8578063423fa8561461023f578063456052671461025f578063542028d51461028757806355b925e61461028f57600080fd5b8063107bf28c146101df57806319d8ac61146101fd5780633c1582671461022a575b600080fd5b6101e76104fc565b6040516101f49190612dee565b60405180910390f35b6003546102119067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101f4565b61023d610238366004612f9a565b61058a565b005b6003546102119068010000000000000000900467ffffffffffffffff1681565b60035461021190700100000000000000000000000000000000900467ffffffffffffffff1681565b6101e7610ebc565b61023d61029d3660046130e6565b610ec9565b6102c26102b0366004613169565b60016020526000908152604090205481565b6040519081526020016101f4565b61023d6102de3660046131b4565b611439565b6101e76102f13660046131d1565b611574565b6102c2611706565b6004546102119067ffffffffffffffff1681565b61023d61032036600461322c565b611780565b6102c26118b4565b61021162093a8081565b6102c260065481565b6009546102119067ffffffffffffffff1681565b6102c261ea6081565b6102c261036b366004613169565b60026020526000908152604090205481565b6000546103a39062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f4565b61023d6103d6366004613249565b6119e3565b6004546103a39068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b61023d610435366004613286565b611ad2565b61023d61044836600461335c565b611dbf565b60045461047a907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016101f4565b600354610211907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6007546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b61023d6104e836600461346d565b612465565b6102c267016345785d8a000081565b600a8054610509906134b2565b80601f0160208091040260200160405190810160405280929190818152602001828054610535906134b2565b80156105825780601f1061055757610100808354040283529160200191610582565b820191906000526020600020905b81548152906001019060200180831161056557829003601f168201915b505050505081565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b805160035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610c925760008782815181106106aa576106aa613505565b602002602001015190506000816060015167ffffffffffffffff16111561091557836106d581613563565b94505060008160000151805190602001208260200151836060015160405160200161073893929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff881660009081526001909352912054909150811461083d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b816060015167ffffffffffffffff16826040015167ffffffffffffffff16101561090f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610639565b50610ae3565b602081015115806109c4575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b36329161097e9160040190815260200190565b6020604051808303816000875af115801561099d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c1919061358a565b15155b610a50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610639565b80515161ea6011610ae3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610639565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610b19575042816040015167ffffffffffffffff1611155b610bcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610c7490613563565b95505080604001519550508080610c8a906135a3565b91505061068e565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610d4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610639565b600354600090610d7d90700100000000000000000000000000000000900467ffffffffffffffff16846135db565b610d919067ffffffffffffffff1687613604565b6003805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c169390931793909317929092169190911790915560009081526002602052604090208390559050610e6f3330610e488467016345785d8a000061361b565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16929190612933565b6003546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60088054610509906134b2565b60045467ffffffffffffffff888116911614610f8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c6173745665726966696564426174636820646f6573206e6f74206d6160648201527f7463680000000000000000000000000000000000000000000000000000000000608482015260a401610639565b8667ffffffffffffffff168667ffffffffffffffff1611611056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610639565b60035467ffffffffffffffff6801000000000000000090910481169087161115611129576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a76657269667942617463686573908201527f3a20626174636820646f6573206e6f742068617665206265656e20736571756560648201527f6e63656400000000000000000000000000000000000000000000000000000000608482015260a401610639565b600061113788888888611574565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161116c9190613658565b602060405180830381855afa158015611189573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906111ac919061358a565b6111b691906136a3565b6007546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d9161122091899189918991906004016136b7565b602060405180830381865afa15801561123d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112619190613731565b6112ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610639565b61133d336112fb8b8b6135db565b67ffffffffffffffff1661130d6118b4565b611317919061361b565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff169190612a0f565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a1617815560068790556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820189905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b1580156113df57600080fd5b505af11580156113f3573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8b1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a3505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146114ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b67ffffffffffffffff808516600090815260026020526040808220549286168252902054606091908061164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610639565b6006546009546040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b1660208201526034810192909252605482018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607485015291821b8116607c8401526084830187905260a4830184905260c483018890529088901b1660e482015260ec0160405160208183030381529060405292505050949350505050565b60035460009067ffffffffffffffff700100000000000000000000000000000000820481169161175591780100000000000000000000000000000000000000000000000090910416600161374e565b61175f91906135db565b61177b9067ffffffffffffffff16670de0b6b3a764000061361b565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061156990831515815260200190565b600080546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829162010000900473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015611929573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194d919061358a565b60045460035491925060009167ffffffffffffffff918216916801000000000000000082048116916119b291700100000000000000000000000000000000820481169178010000000000000000000000000000000000000000000000009004166135db565b6119bc919061374e565b6119c691906135db565b67ffffffffffffffff1690506119dc818361377a565b9250505090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611a96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b6008611aa282826137dc565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b20816040516115699190612dee565b600054610100900460ff1615808015611af25750600054600160ff909116105b80611b0c5750303b158015611b0c575060005460ff166001145b611b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610639565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611bf657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602179055600780549091168a83161790556006889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c0100000000000000000000000000000000000000000000000000000000871515021790556008611d0e85826137dc565b50600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600a611d4f83826137dc565b508015611db357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114611e9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610639565b805180611f51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b60035467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691611f9c9184917001000000000000000000000000000000009004166138f6565b111561202a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610639565b60035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205491937001000000000000000000000000000000009004909216915b8481101561239557600086828151811061208a5761208a613505565b60200260200101519050838061209f90613563565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff88166000908152600190935291205490915081146121f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610639565b612203600188613604565b83036122db574262093a80836040015161221d919061374e565b67ffffffffffffffff1611156122db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610639565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209350858061237d90613563565b9650505050808061238d906135a3565b91505061206e565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260026020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610639565b600061254c611706565b9050818111156125de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610639565b61ea60835110612670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610639565b60005461269b9062010000900473ffffffffffffffffffffffffffffffffffffffff16333084612933565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa15801561270b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061272f919061358a565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff1690601861276983613563565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050838051906020012081426040516020016127e293929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260019093529120553233036128d057600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261292d565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516129249392919061390e565b60405180910390a25b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261292d9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a6a565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052612a659084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161298d565b505050565b6000612acc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612b769092919063ffffffff16565b805190915015612a655780806020019051810190612aea9190613731565b612a65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610639565b6060612b858484600085612b8f565b90505b9392505050565b606082471015612c21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610639565b73ffffffffffffffffffffffffffffffffffffffff85163b612c9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610639565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612cc89190613658565b60006040518083038185875af1925050503d8060008114612d05576040519150601f19603f3d011682016040523d82523d6000602084013e612d0a565b606091505b5091509150612d1a828286612d25565b979650505050505050565b60608315612d34575081612b88565b825115612d445782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106399190612dee565b60005b83811015612d93578181015183820152602001612d7b565b8381111561292d5750506000910152565b60008151808452612dbc816020860160208601612d78565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612b886020830184612da4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715612e5357612e53612e01565b60405290565b6040516060810167ffffffffffffffff81118282101715612e5357612e53612e01565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612ec357612ec3612e01565b604052919050565b600067ffffffffffffffff821115612ee557612ee5612e01565b5060051b60200190565b600082601f830112612f0057600080fd5b813567ffffffffffffffff811115612f1a57612f1a612e01565b612f4b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612e7c565b818152846020838601011115612f6057600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114612f9557600080fd5b919050565b60006020808385031215612fad57600080fd5b823567ffffffffffffffff80821115612fc557600080fd5b818501915085601f830112612fd957600080fd5b8135612fec612fe782612ecb565b612e7c565b81815260059190911b8301840190848101908883111561300b57600080fd5b8585015b838110156130c2578035858111156130275760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181131561305d5760008081fd5b613065612e30565b89830135888111156130775760008081fd5b6130858e8c83870101612eef565b8252506040808401358b830152606061309f818601612f7d565b828401526130ae848601612f7d565b90830152508552505091860191860161300f565b5098975050505050505050565b80604081018310156130e057600080fd5b92915050565b6000806000806000806000610180888a03121561310257600080fd5b61310b88612f7d565b965061311960208901612f7d565b955060408801359450606088013593506131368960808a016130cf565b925061014088018981111561314a57600080fd5b60c08901925061315a8a826130cf565b91505092959891949750929550565b60006020828403121561317b57600080fd5b612b8882612f7d565b73ffffffffffffffffffffffffffffffffffffffff811681146131a657600080fd5b50565b8035612f9581613184565b6000602082840312156131c657600080fd5b8135612b8881613184565b600080600080608085870312156131e757600080fd5b6131f085612f7d565b93506131fe60208601612f7d565b93969395505050506040820135916060013590565b80151581146131a657600080fd5b8035612f9581613213565b60006020828403121561323e57600080fd5b8135612b8881613213565b60006020828403121561325b57600080fd5b813567ffffffffffffffff81111561327257600080fd5b61327e84828501612eef565b949350505050565b60008060008060008060008060006101208a8c0312156132a557600080fd5b89356132b081613184565b985060208a01356132c081613184565b97506132ce60408b016131a9565b965060608a013595506132e360808b016131a9565b94506132f160a08b01613221565b935060c08a013567ffffffffffffffff8082111561330e57600080fd5b61331a8d838e01612eef565b945061332860e08d01612f7d565b93506101008c013591508082111561333f57600080fd5b5061334c8c828d01612eef565b9150509295985092959850929598565b6000602080838503121561336f57600080fd5b823567ffffffffffffffff8082111561338757600080fd5b818501915085601f83011261339b57600080fd5b81356133a9612fe782612ecb565b81815260059190911b830184019084810190888311156133c857600080fd5b8585015b838110156130c2578035858111156133e45760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181131561341a5760008081fd5b613422612e59565b89830135888111156134345760008081fd5b6134428e8c83870101612eef565b8252506040808401358b83015261345a838501612f7d565b90820152855250509186019186016133cc565b6000806040838503121561348057600080fd5b823567ffffffffffffffff81111561349757600080fd5b6134a385828601612eef565b95602094909401359450505050565b600181811c908216806134c657607f821691505b6020821081036134ff577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681810361358057613580613534565b6001019392505050565b60006020828403121561359c57600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036135d4576135d4613534565b5060010190565b600067ffffffffffffffff838116908316818110156135fc576135fc613534565b039392505050565b60008282101561361657613616613534565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561365357613653613534565b500290565b6000825161366a818460208701612d78565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826136b2576136b2613674565b500690565b61012081016040808784376000838201818152879190815b60028110156136ef578484833790840182815292840192906001016136cf565b5050828760c0870137610100850181815286935091505b6001811015613725578251825260209283019290910190600101613706565b50505095945050505050565b60006020828403121561374357600080fd5b8151612b8881613213565b600067ffffffffffffffff80831681851680830382111561377157613771613534565b01949350505050565b60008261378957613789613674565b500490565b601f821115612a6557600081815260208120601f850160051c810160208610156137b55750805b601f850160051c820191505b818110156137d4578281556001016137c1565b505050505050565b815167ffffffffffffffff8111156137f6576137f6612e01565b61380a8161380484546134b2565b8461378e565b602080601f83116001811461385d57600084156138275750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556137d4565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156138aa5788860151825594840194600190910190840161388b565b50858210156138e657878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000821982111561390957613909613534565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006139436060830184612da4565b9594505050505056fea264697066735822122071d94010caa4b1b92859aa3a9d3b136e1010b41fb42bc5df80410982b070571764736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50613982806100206000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c8063ac2eba9811610104578063d02103ca116100a2578063e7a7ed0211610071578063e7a7ed021461048a578063e8bf92ed146104ba578063eaeb077b146104da578063f7552761146104ed57600080fd5b8063d02103ca14610407578063d2fd1b3114610427578063d8d1091b1461043a578063d8f54db01461044d57600080fd5b8063b4d63f58116100de578063b4d63f581461035d578063b6b0b0971461037d578063c89e42df146103c8578063cfa8ed47146103db57600080fd5b8063ac2eba9814610337578063adc879e914610340578063b02286c01461035457600080fd5b80636b8616ce1161017c5780637fcb36531161014b5780637fcb3653146102fe5780638c4a0af71461031257806399f5634e14610325578063ab9fc5ef1461032d57600080fd5b80636b8616ce146102a25780636ff512cc146102d05780637152facf146102e357806379847057146102f657600080fd5b8063423fa856116101b8578063423fa8561461023f578063456052671461025f578063542028d51461028757806355b925e61461028f57600080fd5b8063107bf28c146101df57806319d8ac61146101fd5780633c1582671461022a575b600080fd5b6101e76104fc565b6040516101f49190612dee565b60405180910390f35b6003546102119067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101f4565b61023d610238366004612f9a565b61058a565b005b6003546102119068010000000000000000900467ffffffffffffffff1681565b60035461021190700100000000000000000000000000000000900467ffffffffffffffff1681565b6101e7610ebc565b61023d61029d3660046130e6565b610ec9565b6102c26102b0366004613169565b60016020526000908152604090205481565b6040519081526020016101f4565b61023d6102de3660046131b4565b611439565b6101e76102f13660046131d1565b611574565b6102c2611706565b6004546102119067ffffffffffffffff1681565b61023d61032036600461322c565b611780565b6102c26118b4565b61021162093a8081565b6102c260065481565b6009546102119067ffffffffffffffff1681565b6102c261ea6081565b6102c261036b366004613169565b60026020526000908152604090205481565b6000546103a39062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f4565b61023d6103d6366004613249565b6119e3565b6004546103a39068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b61023d610435366004613286565b611ad2565b61023d61044836600461335c565b611dbf565b60045461047a907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016101f4565b600354610211907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6007546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b61023d6104e836600461346d565b612465565b6102c267016345785d8a000081565b600a8054610509906134b2565b80601f0160208091040260200160405190810160405280929190818152602001828054610535906134b2565b80156105825780601f1061055757610100808354040283529160200191610582565b820191906000526020600020905b81548152906001019060200180831161056557829003601f168201915b505050505081565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b805160035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610c925760008782815181106106aa576106aa613505565b602002602001015190506000816060015167ffffffffffffffff16111561091557836106d581613563565b94505060008160000151805190602001208260200151836060015160405160200161073893929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff881660009081526001909352912054909150811461083d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b816060015167ffffffffffffffff16826040015167ffffffffffffffff16101561090f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610639565b50610ae3565b602081015115806109c4575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b36329161097e9160040190815260200190565b6020604051808303816000875af115801561099d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c1919061358a565b15155b610a50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610639565b80515161ea6011610ae3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610639565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610b19575042816040015167ffffffffffffffff1611155b610bcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610c7490613563565b95505080604001519550508080610c8a906135a3565b91505061068e565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610d4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610639565b600354600090610d7d90700100000000000000000000000000000000900467ffffffffffffffff16846135db565b610d919067ffffffffffffffff1687613604565b6003805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c169390931793909317929092169190911790915560009081526002602052604090208390559050610e6f3330610e488467016345785d8a000061361b565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16929190612933565b6003546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60088054610509906134b2565b60045467ffffffffffffffff888116911614610f8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c6173745665726966696564426174636820646f6573206e6f74206d6160648201527f7463680000000000000000000000000000000000000000000000000000000000608482015260a401610639565b8667ffffffffffffffff168667ffffffffffffffff1611611056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610639565b60035467ffffffffffffffff6801000000000000000090910481169087161115611129576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a76657269667942617463686573908201527f3a20626174636820646f6573206e6f742068617665206265656e20736571756560648201527f6e63656400000000000000000000000000000000000000000000000000000000608482015260a401610639565b600061113788888888611574565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161116c9190613658565b602060405180830381855afa158015611189573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906111ac919061358a565b6111b691906136a3565b6007546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d9161122091899189918991906004016136b7565b602060405180830381865afa15801561123d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112619190613731565b6112ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610639565b61133d336112fb8b8b6135db565b67ffffffffffffffff1661130d6118b4565b611317919061361b565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff169190612a0f565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a1617815560068790556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820189905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b1580156113df57600080fd5b505af11580156113f3573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8b1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a3505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146114ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b67ffffffffffffffff808516600090815260026020526040808220549286168252902054606091908061164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610639565b6006546009546040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b1660208201526034810192909252605482018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607485015291821b8116607c8401526084830187905260a4830184905260c483018890529088901b1660e482015260ec0160405160208183030381529060405292505050949350505050565b60035460009067ffffffffffffffff700100000000000000000000000000000000820481169161175591780100000000000000000000000000000000000000000000000090910416600161374e565b61175f91906135db565b61177b9067ffffffffffffffff16670de0b6b3a764000061361b565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061156990831515815260200190565b600080546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829162010000900473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015611929573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194d919061358a565b60045460035491925060009167ffffffffffffffff918216916801000000000000000082048116916119b291700100000000000000000000000000000000820481169178010000000000000000000000000000000000000000000000009004166135db565b6119bc919061374e565b6119c691906135db565b67ffffffffffffffff1690506119dc818361377a565b9250505090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611a96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b6008611aa282826137dc565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b20816040516115699190612dee565b600054610100900460ff1615808015611af25750600054600160ff909116105b80611b0c5750303b158015611b0c575060005460ff166001145b611b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610639565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611bf657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602179055600780549091168a83161790556006889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c0100000000000000000000000000000000000000000000000000000000871515021790556008611d0e85826137dc565b50600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600a611d4f83826137dc565b508015611db357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114611e9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610639565b805180611f51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b60035467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691611f9c9184917001000000000000000000000000000000009004166138f6565b111561202a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610639565b60035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205491937001000000000000000000000000000000009004909216915b8481101561239557600086828151811061208a5761208a613505565b60200260200101519050838061209f90613563565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff88166000908152600190935291205490915081146121f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610639565b612203600188613604565b83036122db574262093a80836040015161221d919061374e565b67ffffffffffffffff1611156122db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610639565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209350858061237d90613563565b9650505050808061238d906135a3565b91505061206e565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260026020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610639565b600061254c611706565b9050818111156125de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610639565b61ea60835110612670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610639565b60005461269b9062010000900473ffffffffffffffffffffffffffffffffffffffff16333084612933565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa15801561270b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061272f919061358a565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff1690601861276983613563565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050838051906020012081426040516020016127e293929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260019093529120553233036128d057600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261292d565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516129249392919061390e565b60405180910390a25b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261292d9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a6a565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052612a659084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161298d565b505050565b6000612acc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612b769092919063ffffffff16565b805190915015612a655780806020019051810190612aea9190613731565b612a65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610639565b6060612b858484600085612b8f565b90505b9392505050565b606082471015612c21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610639565b73ffffffffffffffffffffffffffffffffffffffff85163b612c9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610639565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612cc89190613658565b60006040518083038185875af1925050503d8060008114612d05576040519150601f19603f3d011682016040523d82523d6000602084013e612d0a565b606091505b5091509150612d1a828286612d25565b979650505050505050565b60608315612d34575081612b88565b825115612d445782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106399190612dee565b60005b83811015612d93578181015183820152602001612d7b565b8381111561292d5750506000910152565b60008151808452612dbc816020860160208601612d78565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612b886020830184612da4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715612e5357612e53612e01565b60405290565b6040516060810167ffffffffffffffff81118282101715612e5357612e53612e01565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612ec357612ec3612e01565b604052919050565b600067ffffffffffffffff821115612ee557612ee5612e01565b5060051b60200190565b600082601f830112612f0057600080fd5b813567ffffffffffffffff811115612f1a57612f1a612e01565b612f4b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612e7c565b818152846020838601011115612f6057600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114612f9557600080fd5b919050565b60006020808385031215612fad57600080fd5b823567ffffffffffffffff80821115612fc557600080fd5b818501915085601f830112612fd957600080fd5b8135612fec612fe782612ecb565b612e7c565b81815260059190911b8301840190848101908883111561300b57600080fd5b8585015b838110156130c2578035858111156130275760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181131561305d5760008081fd5b613065612e30565b89830135888111156130775760008081fd5b6130858e8c83870101612eef565b8252506040808401358b830152606061309f818601612f7d565b828401526130ae848601612f7d565b90830152508552505091860191860161300f565b5098975050505050505050565b80604081018310156130e057600080fd5b92915050565b6000806000806000806000610180888a03121561310257600080fd5b61310b88612f7d565b965061311960208901612f7d565b955060408801359450606088013593506131368960808a016130cf565b925061014088018981111561314a57600080fd5b60c08901925061315a8a826130cf565b91505092959891949750929550565b60006020828403121561317b57600080fd5b612b8882612f7d565b73ffffffffffffffffffffffffffffffffffffffff811681146131a657600080fd5b50565b8035612f9581613184565b6000602082840312156131c657600080fd5b8135612b8881613184565b600080600080608085870312156131e757600080fd5b6131f085612f7d565b93506131fe60208601612f7d565b93969395505050506040820135916060013590565b80151581146131a657600080fd5b8035612f9581613213565b60006020828403121561323e57600080fd5b8135612b8881613213565b60006020828403121561325b57600080fd5b813567ffffffffffffffff81111561327257600080fd5b61327e84828501612eef565b949350505050565b60008060008060008060008060006101208a8c0312156132a557600080fd5b89356132b081613184565b985060208a01356132c081613184565b97506132ce60408b016131a9565b965060608a013595506132e360808b016131a9565b94506132f160a08b01613221565b935060c08a013567ffffffffffffffff8082111561330e57600080fd5b61331a8d838e01612eef565b945061332860e08d01612f7d565b93506101008c013591508082111561333f57600080fd5b5061334c8c828d01612eef565b9150509295985092959850929598565b6000602080838503121561336f57600080fd5b823567ffffffffffffffff8082111561338757600080fd5b818501915085601f83011261339b57600080fd5b81356133a9612fe782612ecb565b81815260059190911b830184019084810190888311156133c857600080fd5b8585015b838110156130c2578035858111156133e45760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181131561341a5760008081fd5b613422612e59565b89830135888111156134345760008081fd5b6134428e8c83870101612eef565b8252506040808401358b83015261345a838501612f7d565b90820152855250509186019186016133cc565b6000806040838503121561348057600080fd5b823567ffffffffffffffff81111561349757600080fd5b6134a385828601612eef565b95602094909401359450505050565b600181811c908216806134c657607f821691505b6020821081036134ff577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681810361358057613580613534565b6001019392505050565b60006020828403121561359c57600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036135d4576135d4613534565b5060010190565b600067ffffffffffffffff838116908316818110156135fc576135fc613534565b039392505050565b60008282101561361657613616613534565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561365357613653613534565b500290565b6000825161366a818460208701612d78565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826136b2576136b2613674565b500690565b61012081016040808784376000838201818152879190815b60028110156136ef578484833790840182815292840192906001016136cf565b5050828760c0870137610100850181815286935091505b6001811015613725578251825260209283019290910190600101613706565b50505095945050505050565b60006020828403121561374357600080fd5b8151612b8881613213565b600067ffffffffffffffff80831681851680830382111561377157613771613534565b01949350505050565b60008261378957613789613674565b500490565b601f821115612a6557600081815260208120601f850160051c810160208610156137b55750805b601f850160051c820191505b818110156137d4578281556001016137c1565b505050505050565b815167ffffffffffffffff8111156137f6576137f6612e01565b61380a8161380484546134b2565b8461378e565b602080601f83116001811461385d57600084156138275750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556137d4565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156138aa5788860151825594840194600190910190840161388b565b50858210156138e657878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000821982111561390957613909613534565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006139436060830184612da4565b9594505050505056fea2646970667358221220500ae6c68729300fc68a36cc6c6c4c33933b4fe2490b1e56423c47a9c14bb65964736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101da5760003560e01c8063ac2eba9811610104578063d02103ca116100a2578063e7a7ed0211610071578063e7a7ed021461048a578063e8bf92ed146104ba578063eaeb077b146104da578063f7552761146104ed57600080fd5b8063d02103ca14610407578063d2fd1b3114610427578063d8d1091b1461043a578063d8f54db01461044d57600080fd5b8063b4d63f58116100de578063b4d63f581461035d578063b6b0b0971461037d578063c89e42df146103c8578063cfa8ed47146103db57600080fd5b8063ac2eba9814610337578063adc879e914610340578063b02286c01461035457600080fd5b80636b8616ce1161017c5780637fcb36531161014b5780637fcb3653146102fe5780638c4a0af71461031257806399f5634e14610325578063ab9fc5ef1461032d57600080fd5b80636b8616ce146102a25780636ff512cc146102d05780637152facf146102e357806379847057146102f657600080fd5b8063423fa856116101b8578063423fa8561461023f578063456052671461025f578063542028d51461028757806355b925e61461028f57600080fd5b8063107bf28c146101df57806319d8ac61146101fd5780633c1582671461022a575b600080fd5b6101e76104fc565b6040516101f49190612dee565b60405180910390f35b6003546102119067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101f4565b61023d610238366004612f9a565b61058a565b005b6003546102119068010000000000000000900467ffffffffffffffff1681565b60035461021190700100000000000000000000000000000000900467ffffffffffffffff1681565b6101e7610ebc565b61023d61029d3660046130e6565b610ec9565b6102c26102b0366004613169565b60016020526000908152604090205481565b6040519081526020016101f4565b61023d6102de3660046131b4565b611439565b6101e76102f13660046131d1565b611574565b6102c2611706565b6004546102119067ffffffffffffffff1681565b61023d61032036600461322c565b611780565b6102c26118b4565b61021162093a8081565b6102c260065481565b6009546102119067ffffffffffffffff1681565b6102c261ea6081565b6102c261036b366004613169565b60026020526000908152604090205481565b6000546103a39062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f4565b61023d6103d6366004613249565b6119e3565b6004546103a39068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b61023d610435366004613286565b611ad2565b61023d61044836600461335c565b611dbf565b60045461047a907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016101f4565b600354610211907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6007546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b61023d6104e836600461346d565b612465565b6102c267016345785d8a000081565b600a8054610509906134b2565b80601f0160208091040260200160405190810160405280929190818152602001828054610535906134b2565b80156105825780601f1061055757610100808354040283529160200191610582565b820191906000526020600020905b81548152906001019060200180831161056557829003601f168201915b505050505081565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b805160035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610c925760008782815181106106aa576106aa613505565b602002602001015190506000816060015167ffffffffffffffff16111561091557836106d581613563565b94505060008160000151805190602001208260200151836060015160405160200161073893929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff881660009081526001909352912054909150811461083d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b816060015167ffffffffffffffff16826040015167ffffffffffffffff16101561090f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610639565b50610ae3565b602081015115806109c4575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b36329161097e9160040190815260200190565b6020604051808303816000875af115801561099d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c1919061358a565b15155b610a50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610639565b80515161ea6011610ae3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610639565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610b19575042816040015167ffffffffffffffff1611155b610bcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610c7490613563565b95505080604001519550508080610c8a906135a3565b91505061068e565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610d4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610639565b600354600090610d7d90700100000000000000000000000000000000900467ffffffffffffffff16846135db565b610d919067ffffffffffffffff1687613604565b6003805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c169390931793909317929092169190911790915560009081526002602052604090208390559050610e6f3330610e488467016345785d8a000061361b565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16929190612933565b6003546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60088054610509906134b2565b60045467ffffffffffffffff888116911614610f8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c6173745665726966696564426174636820646f6573206e6f74206d6160648201527f7463680000000000000000000000000000000000000000000000000000000000608482015260a401610639565b8667ffffffffffffffff168667ffffffffffffffff1611611056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610639565b60035467ffffffffffffffff6801000000000000000090910481169087161115611129576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a76657269667942617463686573908201527f3a20626174636820646f6573206e6f742068617665206265656e20736571756560648201527f6e63656400000000000000000000000000000000000000000000000000000000608482015260a401610639565b600061113788888888611574565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161116c9190613658565b602060405180830381855afa158015611189573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906111ac919061358a565b6111b691906136a3565b6007546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d9161122091899189918991906004016136b7565b602060405180830381865afa15801561123d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112619190613731565b6112ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610639565b61133d336112fb8b8b6135db565b67ffffffffffffffff1661130d6118b4565b611317919061361b565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff169190612a0f565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a1617815560068790556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820189905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b1580156113df57600080fd5b505af11580156113f3573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8b1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a3505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146114ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b67ffffffffffffffff808516600090815260026020526040808220549286168252902054606091908061164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610639565b6006546009546040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b1660208201526034810192909252605482018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607485015291821b8116607c8401526084830187905260a4830184905260c483018890529088901b1660e482015260ec0160405160208183030381529060405292505050949350505050565b60035460009067ffffffffffffffff700100000000000000000000000000000000820481169161175591780100000000000000000000000000000000000000000000000090910416600161374e565b61175f91906135db565b61177b9067ffffffffffffffff16670de0b6b3a764000061361b565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061156990831515815260200190565b600080546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829162010000900473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015611929573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194d919061358a565b60045460035491925060009167ffffffffffffffff918216916801000000000000000082048116916119b291700100000000000000000000000000000000820481169178010000000000000000000000000000000000000000000000009004166135db565b6119bc919061374e565b6119c691906135db565b67ffffffffffffffff1690506119dc818361377a565b9250505090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611a96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b6008611aa282826137dc565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b20816040516115699190612dee565b600054610100900460ff1615808015611af25750600054600160ff909116105b80611b0c5750303b158015611b0c575060005460ff166001145b611b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610639565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611bf657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602179055600780549091168a83161790556006889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c0100000000000000000000000000000000000000000000000000000000871515021790556008611d0e85826137dc565b50600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600a611d4f83826137dc565b508015611db357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114611e9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610639565b805180611f51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b60035467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691611f9c9184917001000000000000000000000000000000009004166138f6565b111561202a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610639565b60035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205491937001000000000000000000000000000000009004909216915b8481101561239557600086828151811061208a5761208a613505565b60200260200101519050838061209f90613563565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff88166000908152600190935291205490915081146121f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610639565b612203600188613604565b83036122db574262093a80836040015161221d919061374e565b67ffffffffffffffff1611156122db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610639565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209350858061237d90613563565b9650505050808061238d906135a3565b91505061206e565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260026020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610639565b600061254c611706565b9050818111156125de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610639565b61ea60835110612670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610639565b60005461269b9062010000900473ffffffffffffffffffffffffffffffffffffffff16333084612933565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa15801561270b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061272f919061358a565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff1690601861276983613563565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050838051906020012081426040516020016127e293929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260019093529120553233036128d057600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261292d565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516129249392919061390e565b60405180910390a25b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261292d9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a6a565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052612a659084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161298d565b505050565b6000612acc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612b769092919063ffffffff16565b805190915015612a655780806020019051810190612aea9190613731565b612a65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610639565b6060612b858484600085612b8f565b90505b9392505050565b606082471015612c21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610639565b73ffffffffffffffffffffffffffffffffffffffff85163b612c9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610639565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612cc89190613658565b60006040518083038185875af1925050503d8060008114612d05576040519150601f19603f3d011682016040523d82523d6000602084013e612d0a565b606091505b5091509150612d1a828286612d25565b979650505050505050565b60608315612d34575081612b88565b825115612d445782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106399190612dee565b60005b83811015612d93578181015183820152602001612d7b565b8381111561292d5750506000910152565b60008151808452612dbc816020860160208601612d78565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612b886020830184612da4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715612e5357612e53612e01565b60405290565b6040516060810167ffffffffffffffff81118282101715612e5357612e53612e01565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612ec357612ec3612e01565b604052919050565b600067ffffffffffffffff821115612ee557612ee5612e01565b5060051b60200190565b600082601f830112612f0057600080fd5b813567ffffffffffffffff811115612f1a57612f1a612e01565b612f4b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612e7c565b818152846020838601011115612f6057600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114612f9557600080fd5b919050565b60006020808385031215612fad57600080fd5b823567ffffffffffffffff80821115612fc557600080fd5b818501915085601f830112612fd957600080fd5b8135612fec612fe782612ecb565b612e7c565b81815260059190911b8301840190848101908883111561300b57600080fd5b8585015b838110156130c2578035858111156130275760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181131561305d5760008081fd5b613065612e30565b89830135888111156130775760008081fd5b6130858e8c83870101612eef565b8252506040808401358b830152606061309f818601612f7d565b828401526130ae848601612f7d565b90830152508552505091860191860161300f565b5098975050505050505050565b80604081018310156130e057600080fd5b92915050565b6000806000806000806000610180888a03121561310257600080fd5b61310b88612f7d565b965061311960208901612f7d565b955060408801359450606088013593506131368960808a016130cf565b925061014088018981111561314a57600080fd5b60c08901925061315a8a826130cf565b91505092959891949750929550565b60006020828403121561317b57600080fd5b612b8882612f7d565b73ffffffffffffffffffffffffffffffffffffffff811681146131a657600080fd5b50565b8035612f9581613184565b6000602082840312156131c657600080fd5b8135612b8881613184565b600080600080608085870312156131e757600080fd5b6131f085612f7d565b93506131fe60208601612f7d565b93969395505050506040820135916060013590565b80151581146131a657600080fd5b8035612f9581613213565b60006020828403121561323e57600080fd5b8135612b8881613213565b60006020828403121561325b57600080fd5b813567ffffffffffffffff81111561327257600080fd5b61327e84828501612eef565b949350505050565b60008060008060008060008060006101208a8c0312156132a557600080fd5b89356132b081613184565b985060208a01356132c081613184565b97506132ce60408b016131a9565b965060608a013595506132e360808b016131a9565b94506132f160a08b01613221565b935060c08a013567ffffffffffffffff8082111561330e57600080fd5b61331a8d838e01612eef565b945061332860e08d01612f7d565b93506101008c013591508082111561333f57600080fd5b5061334c8c828d01612eef565b9150509295985092959850929598565b6000602080838503121561336f57600080fd5b823567ffffffffffffffff8082111561338757600080fd5b818501915085601f83011261339b57600080fd5b81356133a9612fe782612ecb565b81815260059190911b830184019084810190888311156133c857600080fd5b8585015b838110156130c2578035858111156133e45760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181131561341a5760008081fd5b613422612e59565b89830135888111156134345760008081fd5b6134428e8c83870101612eef565b8252506040808401358b83015261345a838501612f7d565b90820152855250509186019186016133cc565b6000806040838503121561348057600080fd5b823567ffffffffffffffff81111561349757600080fd5b6134a385828601612eef565b95602094909401359450505050565b600181811c908216806134c657607f821691505b6020821081036134ff577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681810361358057613580613534565b6001019392505050565b60006020828403121561359c57600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036135d4576135d4613534565b5060010190565b600067ffffffffffffffff838116908316818110156135fc576135fc613534565b039392505050565b60008282101561361657613616613534565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561365357613653613534565b500290565b6000825161366a818460208701612d78565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826136b2576136b2613674565b500690565b61012081016040808784376000838201818152879190815b60028110156136ef578484833790840182815292840192906001016136cf565b5050828760c0870137610100850181815286935091505b6001811015613725578251825260209283019290910190600101613706565b50505095945050505050565b60006020828403121561374357600080fd5b8151612b8881613213565b600067ffffffffffffffff80831681851680830382111561377157613771613534565b01949350505050565b60008261378957613789613674565b500490565b601f821115612a6557600081815260208120601f850160051c810160208610156137b55750805b601f850160051c820191505b818110156137d4578281556001016137c1565b505050505050565b815167ffffffffffffffff8111156137f6576137f6612e01565b61380a8161380484546134b2565b8461378e565b602080601f83116001811461385d57600084156138275750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556137d4565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156138aa5788860151825594840194600190910190840161388b565b50858210156138e657878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000821982111561390957613909613534565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006139436060830184612da4565b9594505050505056fea2646970667358221220500ae6c68729300fc68a36cc6c6c4c33933b4fe2490b1e56423c47a9c14bb65964736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/ProofOfEfficiencyMock.json b/compiled-contracts/ProofOfEfficiencyMock.json index 41c9c2115..9ccddabc3 100644 --- a/compiled-contracts/ProofOfEfficiencyMock.json +++ b/compiled-contracts/ProofOfEfficiencyMock.json @@ -920,8 +920,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506147d2806100206000396000f3fe608060405234801561001057600080fd5b50600436106102de5760003560e01c80639b79676011610186578063d02103ca116100e3578063d8f54db011610097578063eaeb077b11610071578063eaeb077b14610739578063f2fde38b1461074c578063f75527611461075f57600080fd5b8063d8f54db0146106ac578063e7a7ed02146106e9578063e8bf92ed1461071957600080fd5b8063d2fd1b31116100c8578063d2fd1b3114610673578063d307b74314610686578063d8d1091b1461069957600080fd5b8063d02103ca14610640578063d0ae98dd1461066057600080fd5b8063b4d63f581161013a578063c0cad3021161011f578063c0cad302146105ee578063c89e42df14610601578063cfa8ed471461061457600080fd5b8063b4d63f58146105a8578063b6b0b097146105c857600080fd5b8063ac2eba981161016b578063ac2eba9814610582578063adc879e91461058b578063b02286c01461059f57600080fd5b80639b79676014610565578063ab9fc5ef1461057857600080fd5b80636b8616ce1161023f57806379847057116101f35780638da5cb5b116101cd5780638da5cb5b1461050b57806396dc3d391461054a57806399f5634e1461055d57600080fd5b806379847057146104dc5780637fcb3653146104e45780638c4a0af7146104f857600080fd5b8063715018a611610224578063715018a6146104ae5780637152facf146104b6578063748608de146104c957600080fd5b80636b8616ce1461047b5780636ff512cc1461049b57600080fd5b806345605267116102965780635437988d1161027b5780635437988d146103a657806355b925e6146103b9578063574f649e146103cc57600080fd5b80634560526714610376578063542028d51461039e57600080fd5b80631a26da14116102c75780631a26da141461032e5780633c15826714610343578063423fa8561461035657600080fd5b8063107bf28c146102e357806319d8ac6114610301575b600080fd5b6102eb61076e565b6040516102f89190613b88565b60405180910390f35b6003546103159067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102f8565b61034161033c366004613bb8565b6107fc565b005b610341610351366004613d5e565b610821565b6003546103159068010000000000000000900467ffffffffffffffff1681565b60035461031590700100000000000000000000000000000000900467ffffffffffffffff1681565b6102eb611153565b6103416103b4366004613ec0565b611160565b6103416103c7366004613ef4565b6111af565b61046d6103da366004613f77565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b6040519081526020016102f8565b61046d610489366004613fed565b60016020526000908152604090205481565b6103416104a9366004613ec0565b61171f565b61034161185a565b6102eb6104c4366004614008565b61186e565b6103416104d7366004613ef4565b611a00565b61046d611e09565b6004546103159067ffffffffffffffff1681565b610341610506366004614063565b611e83565b603d5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102f8565b610341610558366004613fed565b611fb7565b61046d611ffa565b610341610573366004613fed565b612129565b61031562093a8081565b61046d60065481565b6009546103159067ffffffffffffffff1681565b61046d61ea6081565b61046d6105b6366004613fed565b60026020526000908152604090205481565b6000546105259062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6103416105fc366004614080565b612178565b61034161060f366004614080565b612190565b6004546105259068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546105259073ffffffffffffffffffffffffffffffffffffffff1681565b61046d61066e366004614008565b61227f565b6103416106813660046140bd565b612579565b610341610694366004614193565b61286e565b6103416106a73660046141ac565b61287b565b6004546106d9907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016102f8565b600354610315907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6007546105259073ffffffffffffffffffffffffffffffffffffffff1681565b6103416107473660046142bd565b612f21565b61034161075a366004613ec0565b6133ef565b61046d67016345785d8a000081565b600a805461077b90614302565b80601f01602080910402602001604051908101604052809291908181526020018280546107a790614302565b80156107f45780601f106107c9576101008083540402835291602001916107f4565b820191906000526020600020905b8154815290600101906020018083116107d757829003601f168201915b505050505081565b6108046134a6565b67ffffffffffffffff909116600090815260026020526040902055565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146108d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b805160035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610f2957600087828151811061094157610941614355565b602002602001015190506000816060015167ffffffffffffffff161115610bac578361096c816143b3565b9450506000816000015180519060200120826020015183606001516040516020016109cf93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114610ad4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610ba6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016108d0565b50610d7a565b60208101511580610c5b575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610c159160040190815260200190565b6020604051808303816000875af1158015610c34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5891906143da565b15155b610ce7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016108d0565b80515161ea6011610d7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016108d0565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610db0575042816040015167ffffffffffffffff1611155b610e62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610f0b906143b3565b95505080604001519550508080610f21906143f3565b915050610925565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610fe6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016108d0565b60035460009061101490700100000000000000000000000000000000900467ffffffffffffffff168461442b565b6110289067ffffffffffffffff1687614454565b6003805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152600260205260409020839055905061110633306110df8467016345785d8a000061446b565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16929190613527565b6003546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b6008805461077b90614302565b6111686134a6565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60045467ffffffffffffffff888116911614611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c6173745665726966696564426174636820646f6573206e6f74206d6160648201527f7463680000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8667ffffffffffffffff168667ffffffffffffffff161161133c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a4016108d0565b60035467ffffffffffffffff680100000000000000009091048116908716111561140f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a76657269667942617463686573908201527f3a20626174636820646f6573206e6f742068617665206265656e20736571756560648201527f6e63656400000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b600061141d8888888861186e565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161145291906144a8565b602060405180830381855afa15801561146f573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061149291906143da565b61149c91906144f3565b6007546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916115069189918991899190600401614507565b602060405180830381865afa158015611523573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115479190614581565b6115d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016108d0565b611623336115e18b8b61442b565b67ffffffffffffffff166115f3611ffa565b6115fd919061446b565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff169190613603565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a1617815560068790556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820189905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b1580156116c557600080fd5b505af11580156116d9573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8b1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a3505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146117d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b6118626134a6565b61186c600061365e565b565b67ffffffffffffffff8085166000908152600260205260408082205492861682529020546060919080611949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b6006546009546040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b1660208201526034810192909252605482018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607485015291821b8116607c8401526084830187905260a4830184905260c483018890529088901b1660e482015260ec0160405160208183030381529060405292505050949350505050565b611a086134a6565b60045467ffffffffffffffff888116911614611acc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8667ffffffffffffffff168667ffffffffffffffff1611611b95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff6801000000000000000090910481169087161115611c67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b67ffffffffffffffff861660009081526002602052604090205480611d0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f74206578697374000060648201526084016108d0565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff891617815560068690556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820188905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b158015611db057600080fd5b505af1158015611dc4573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8a1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a35050505050505050565b60035460009067ffffffffffffffff7001000000000000000000000000000000008204811691611e5891780100000000000000000000000000000000000000000000000090910416600161459e565b611e62919061442b565b611e7e9067ffffffffffffffff16670de0b6b3a764000061446b565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611f36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061184f90831515815260200190565b611fbf6134a6565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b600080546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829162010000900473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561206f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209391906143da565b60045460035491925060009167ffffffffffffffff918216916801000000000000000082048116916120f8917001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041661442b565b612102919061459e565b61210c919061442b565b67ffffffffffffffff16905061212281836145ca565b9250505090565b6121316134a6565b6003805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b6121806134a6565b600a61218c828261462c565b5050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600861224f828261462c565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161184f9190613b88565b60045460009067ffffffffffffffff868116911614612346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8467ffffffffffffffff168467ffffffffffffffff161161240f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff68010000000000000000909104811690851611156124e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b60006124ef8686868661186e565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161252491906144a8565b602060405180830381855afa158015612541573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061256491906143da565b61256e91906144f3565b979650505050505050565b600054610100900460ff16158080156125995750600054600160ff909116105b806125b35750303b1580156125b3575060005460ff166001145b61263f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016108d0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561269d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602179055600780549091168a83161790556006889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c01000000000000000000000000000000000000000000000000000000008715150217905560086127b5858261462c565b50600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600a6127f6838261462c565b506127ff6136d5565b801561286257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6128766134a6565b600655565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108d0565b805180612a0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612a58918491700100000000000000000000000000000000900416614746565b1115612ae6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016108d0565b60035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205491937001000000000000000000000000000000009004909216915b84811015612e51576000868281518110612b4657612b46614355565b602002602001015190508380612b5b906143b3565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114612cb4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016108d0565b612cbf600188614454565b8303612d97574262093a808360400151612cd9919061459e565b67ffffffffffffffff161115612d97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016108d0565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612e39906143b3565b96505050508080612e49906143f3565b915050612b2a565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260026020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612ffe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108d0565b6000613008611e09565b90508181111561309a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016108d0565b61ea6083511061312c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016108d0565b6000546131579062010000900473ffffffffffffffffffffffffffffffffffffffff16333084613527565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa1580156131c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131eb91906143da565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613225836143b3565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161329e93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000908152600190935291205532330361338c57600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26133e9565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516133e09392919061475e565b60405180910390a25b50505050565b6133f76134a6565b73ffffffffffffffffffffffffffffffffffffffff811661349a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108d0565b6134a38161365e565b50565b603d5473ffffffffffffffffffffffffffffffffffffffff16331461186c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526133e99085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613774565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526136599084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401613581565b505050565b603d805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661376c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d0565b61186c613880565b60006137d6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166139209092919063ffffffff16565b80519091501561365957808060200190518101906137f49190614581565b613659576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108d0565b600054610100900460ff16613917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d0565b61186c3361365e565b606061392f8484600085613939565b90505b9392505050565b6060824710156139cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016108d0565b73ffffffffffffffffffffffffffffffffffffffff85163b613a49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108d0565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613a7291906144a8565b60006040518083038185875af1925050503d8060008114613aaf576040519150601f19603f3d011682016040523d82523d6000602084013e613ab4565b606091505b509150915061256e82828660608315613ace575081613932565b825115613ade5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d09190613b88565b60005b83811015613b2d578181015183820152602001613b15565b838111156133e95750506000910152565b60008151808452613b56816020860160208601613b12565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006139326020830184613b3e565b803567ffffffffffffffff81168114613bb357600080fd5b919050565b60008060408385031215613bcb57600080fd5b613bd483613b9b565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613c3457613c34613be2565b60405290565b6040516060810167ffffffffffffffff81118282101715613c3457613c34613be2565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613ca457613ca4613be2565b604052919050565b600067ffffffffffffffff821115613cc657613cc6613be2565b5060051b60200190565b600082601f830112613ce157600080fd5b813567ffffffffffffffff811115613cfb57613cfb613be2565b613d2c60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613c5d565b818152846020838601011115613d4157600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613d7157600080fd5b823567ffffffffffffffff80821115613d8957600080fd5b818501915085601f830112613d9d57600080fd5b8135613db0613dab82613cac565b613c5d565b81815260059190911b83018401908481019088831115613dcf57600080fd5b8585015b83811015613e8657803585811115613deb5760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001811315613e215760008081fd5b613e29613c11565b8983013588811115613e3b5760008081fd5b613e498e8c83870101613cd0565b8252506040808401358b8301526060613e63818601613b9b565b82840152613e72848601613b9b565b908301525085525050918601918601613dd3565b5098975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146134a357600080fd5b8035613bb381613e93565b600060208284031215613ed257600080fd5b813561393281613e93565b8060408101831015613eee57600080fd5b92915050565b6000806000806000806000610180888a031215613f1057600080fd5b613f1988613b9b565b9650613f2760208901613b9b565b95506040880135945060608801359350613f448960808a01613edd565b9250610140880189811115613f5857600080fd5b60c089019250613f688a82613edd565b91505092959891949750929550565b600080600080600060a08688031215613f8f57600080fd5b85359450602086013567ffffffffffffffff811115613fad57600080fd5b613fb988828901613cd0565b94505060408601359250613fcf60608701613b9b565b91506080860135613fdf81613e93565b809150509295509295909350565b600060208284031215613fff57600080fd5b61393282613b9b565b6000806000806080858703121561401e57600080fd5b61402785613b9b565b935061403560208601613b9b565b93969395505050506040820135916060013590565b80151581146134a357600080fd5b8035613bb38161404a565b60006020828403121561407557600080fd5b81356139328161404a565b60006020828403121561409257600080fd5b813567ffffffffffffffff8111156140a957600080fd5b6140b584828501613cd0565b949350505050565b60008060008060008060008060006101208a8c0312156140dc57600080fd5b89356140e781613e93565b985060208a01356140f781613e93565b975061410560408b01613eb5565b965060608a0135955061411a60808b01613eb5565b945061412860a08b01614058565b935060c08a013567ffffffffffffffff8082111561414557600080fd5b6141518d838e01613cd0565b945061415f60e08d01613b9b565b93506101008c013591508082111561417657600080fd5b506141838c828d01613cd0565b9150509295985092959850929598565b6000602082840312156141a557600080fd5b5035919050565b600060208083850312156141bf57600080fd5b823567ffffffffffffffff808211156141d757600080fd5b818501915085601f8301126141eb57600080fd5b81356141f9613dab82613cac565b81815260059190911b8301840190848101908883111561421857600080fd5b8585015b83811015613e86578035858111156142345760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181131561426a5760008081fd5b614272613c3a565b89830135888111156142845760008081fd5b6142928e8c83870101613cd0565b8252506040808401358b8301526142aa838501613b9b565b908201528552505091860191860161421c565b600080604083850312156142d057600080fd5b823567ffffffffffffffff8111156142e757600080fd5b6142f385828601613cd0565b95602094909401359450505050565b600181811c9082168061431657607f821691505b60208210810361434f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036143d0576143d0614384565b6001019392505050565b6000602082840312156143ec57600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361442457614424614384565b5060010190565b600067ffffffffffffffff8381169083168181101561444c5761444c614384565b039392505050565b60008282101561446657614466614384565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144a3576144a3614384565b500290565b600082516144ba818460208701613b12565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614502576145026144c4565b500690565b61012081016040808784376000838201818152879190815b600281101561453f5784848337908401828152928401929060010161451f565b5050828760c0870137610100850181815286935091505b6001811015614575578251825260209283019290910190600101614556565b50505095945050505050565b60006020828403121561459357600080fd5b81516139328161404a565b600067ffffffffffffffff8083168185168083038211156145c1576145c1614384565b01949350505050565b6000826145d9576145d96144c4565b500490565b601f82111561365957600081815260208120601f850160051c810160208610156146055750805b601f850160051c820191505b8181101561462457828155600101614611565b505050505050565b815167ffffffffffffffff81111561464657614646613be2565b61465a816146548454614302565b846145de565b602080601f8311600181146146ad57600084156146775750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614624565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156146fa578886015182559484019460019091019084016146db565b508582101561473657878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000821982111561475957614759614384565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006147936060830184613b3e565b9594505050505056fea26469706673582212202292bd2e610d331108ed905e1a87f79aceb1dcccb827238286e21cb9fbe8168564736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102de5760003560e01c80639b79676011610186578063d02103ca116100e3578063d8f54db011610097578063eaeb077b11610071578063eaeb077b14610739578063f2fde38b1461074c578063f75527611461075f57600080fd5b8063d8f54db0146106ac578063e7a7ed02146106e9578063e8bf92ed1461071957600080fd5b8063d2fd1b31116100c8578063d2fd1b3114610673578063d307b74314610686578063d8d1091b1461069957600080fd5b8063d02103ca14610640578063d0ae98dd1461066057600080fd5b8063b4d63f581161013a578063c0cad3021161011f578063c0cad302146105ee578063c89e42df14610601578063cfa8ed471461061457600080fd5b8063b4d63f58146105a8578063b6b0b097146105c857600080fd5b8063ac2eba981161016b578063ac2eba9814610582578063adc879e91461058b578063b02286c01461059f57600080fd5b80639b79676014610565578063ab9fc5ef1461057857600080fd5b80636b8616ce1161023f57806379847057116101f35780638da5cb5b116101cd5780638da5cb5b1461050b57806396dc3d391461054a57806399f5634e1461055d57600080fd5b806379847057146104dc5780637fcb3653146104e45780638c4a0af7146104f857600080fd5b8063715018a611610224578063715018a6146104ae5780637152facf146104b6578063748608de146104c957600080fd5b80636b8616ce1461047b5780636ff512cc1461049b57600080fd5b806345605267116102965780635437988d1161027b5780635437988d146103a657806355b925e6146103b9578063574f649e146103cc57600080fd5b80634560526714610376578063542028d51461039e57600080fd5b80631a26da14116102c75780631a26da141461032e5780633c15826714610343578063423fa8561461035657600080fd5b8063107bf28c146102e357806319d8ac6114610301575b600080fd5b6102eb61076e565b6040516102f89190613b88565b60405180910390f35b6003546103159067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102f8565b61034161033c366004613bb8565b6107fc565b005b610341610351366004613d5e565b610821565b6003546103159068010000000000000000900467ffffffffffffffff1681565b60035461031590700100000000000000000000000000000000900467ffffffffffffffff1681565b6102eb611153565b6103416103b4366004613ec0565b611160565b6103416103c7366004613ef4565b6111af565b61046d6103da366004613f77565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b6040519081526020016102f8565b61046d610489366004613fed565b60016020526000908152604090205481565b6103416104a9366004613ec0565b61171f565b61034161185a565b6102eb6104c4366004614008565b61186e565b6103416104d7366004613ef4565b611a00565b61046d611e09565b6004546103159067ffffffffffffffff1681565b610341610506366004614063565b611e83565b603d5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102f8565b610341610558366004613fed565b611fb7565b61046d611ffa565b610341610573366004613fed565b612129565b61031562093a8081565b61046d60065481565b6009546103159067ffffffffffffffff1681565b61046d61ea6081565b61046d6105b6366004613fed565b60026020526000908152604090205481565b6000546105259062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6103416105fc366004614080565b612178565b61034161060f366004614080565b612190565b6004546105259068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546105259073ffffffffffffffffffffffffffffffffffffffff1681565b61046d61066e366004614008565b61227f565b6103416106813660046140bd565b612579565b610341610694366004614193565b61286e565b6103416106a73660046141ac565b61287b565b6004546106d9907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016102f8565b600354610315907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6007546105259073ffffffffffffffffffffffffffffffffffffffff1681565b6103416107473660046142bd565b612f21565b61034161075a366004613ec0565b6133ef565b61046d67016345785d8a000081565b600a805461077b90614302565b80601f01602080910402602001604051908101604052809291908181526020018280546107a790614302565b80156107f45780601f106107c9576101008083540402835291602001916107f4565b820191906000526020600020905b8154815290600101906020018083116107d757829003601f168201915b505050505081565b6108046134a6565b67ffffffffffffffff909116600090815260026020526040902055565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146108d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b805160035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610f2957600087828151811061094157610941614355565b602002602001015190506000816060015167ffffffffffffffff161115610bac578361096c816143b3565b9450506000816000015180519060200120826020015183606001516040516020016109cf93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114610ad4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610ba6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016108d0565b50610d7a565b60208101511580610c5b575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610c159160040190815260200190565b6020604051808303816000875af1158015610c34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5891906143da565b15155b610ce7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016108d0565b80515161ea6011610d7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016108d0565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610db0575042816040015167ffffffffffffffff1611155b610e62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610f0b906143b3565b95505080604001519550508080610f21906143f3565b915050610925565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610fe6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016108d0565b60035460009061101490700100000000000000000000000000000000900467ffffffffffffffff168461442b565b6110289067ffffffffffffffff1687614454565b6003805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152600260205260409020839055905061110633306110df8467016345785d8a000061446b565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16929190613527565b6003546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b6008805461077b90614302565b6111686134a6565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60045467ffffffffffffffff888116911614611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c6173745665726966696564426174636820646f6573206e6f74206d6160648201527f7463680000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8667ffffffffffffffff168667ffffffffffffffff161161133c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a4016108d0565b60035467ffffffffffffffff680100000000000000009091048116908716111561140f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a76657269667942617463686573908201527f3a20626174636820646f6573206e6f742068617665206265656e20736571756560648201527f6e63656400000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b600061141d8888888861186e565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161145291906144a8565b602060405180830381855afa15801561146f573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061149291906143da565b61149c91906144f3565b6007546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916115069189918991899190600401614507565b602060405180830381865afa158015611523573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115479190614581565b6115d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016108d0565b611623336115e18b8b61442b565b67ffffffffffffffff166115f3611ffa565b6115fd919061446b565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff169190613603565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a1617815560068790556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820189905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b1580156116c557600080fd5b505af11580156116d9573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8b1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a3505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146117d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b6118626134a6565b61186c600061365e565b565b67ffffffffffffffff8085166000908152600260205260408082205492861682529020546060919080611949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b6006546009546040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b1660208201526034810192909252605482018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607485015291821b8116607c8401526084830187905260a4830184905260c483018890529088901b1660e482015260ec0160405160208183030381529060405292505050949350505050565b611a086134a6565b60045467ffffffffffffffff888116911614611acc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8667ffffffffffffffff168667ffffffffffffffff1611611b95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff6801000000000000000090910481169087161115611c67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b67ffffffffffffffff861660009081526002602052604090205480611d0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f74206578697374000060648201526084016108d0565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff891617815560068690556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820188905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b158015611db057600080fd5b505af1158015611dc4573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8a1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a35050505050505050565b60035460009067ffffffffffffffff7001000000000000000000000000000000008204811691611e5891780100000000000000000000000000000000000000000000000090910416600161459e565b611e62919061442b565b611e7e9067ffffffffffffffff16670de0b6b3a764000061446b565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611f36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061184f90831515815260200190565b611fbf6134a6565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b600080546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829162010000900473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561206f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209391906143da565b60045460035491925060009167ffffffffffffffff918216916801000000000000000082048116916120f8917001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041661442b565b612102919061459e565b61210c919061442b565b67ffffffffffffffff16905061212281836145ca565b9250505090565b6121316134a6565b6003805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b6121806134a6565b600a61218c828261462c565b5050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600861224f828261462c565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161184f9190613b88565b60045460009067ffffffffffffffff868116911614612346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8467ffffffffffffffff168467ffffffffffffffff161161240f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff68010000000000000000909104811690851611156124e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b60006124ef8686868661186e565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161252491906144a8565b602060405180830381855afa158015612541573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061256491906143da565b61256e91906144f3565b979650505050505050565b600054610100900460ff16158080156125995750600054600160ff909116105b806125b35750303b1580156125b3575060005460ff166001145b61263f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016108d0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561269d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602179055600780549091168a83161790556006889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c01000000000000000000000000000000000000000000000000000000008715150217905560086127b5858261462c565b50600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600a6127f6838261462c565b506127ff6136d5565b801561286257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6128766134a6565b600655565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108d0565b805180612a0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612a58918491700100000000000000000000000000000000900416614746565b1115612ae6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016108d0565b60035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205491937001000000000000000000000000000000009004909216915b84811015612e51576000868281518110612b4657612b46614355565b602002602001015190508380612b5b906143b3565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114612cb4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016108d0565b612cbf600188614454565b8303612d97574262093a808360400151612cd9919061459e565b67ffffffffffffffff161115612d97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016108d0565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612e39906143b3565b96505050508080612e49906143f3565b915050612b2a565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260026020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612ffe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108d0565b6000613008611e09565b90508181111561309a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016108d0565b61ea6083511061312c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016108d0565b6000546131579062010000900473ffffffffffffffffffffffffffffffffffffffff16333084613527565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa1580156131c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131eb91906143da565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613225836143b3565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161329e93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000908152600190935291205532330361338c57600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26133e9565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516133e09392919061475e565b60405180910390a25b50505050565b6133f76134a6565b73ffffffffffffffffffffffffffffffffffffffff811661349a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108d0565b6134a38161365e565b50565b603d5473ffffffffffffffffffffffffffffffffffffffff16331461186c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526133e99085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613774565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526136599084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401613581565b505050565b603d805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661376c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d0565b61186c613880565b60006137d6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166139209092919063ffffffff16565b80519091501561365957808060200190518101906137f49190614581565b613659576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108d0565b600054610100900460ff16613917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d0565b61186c3361365e565b606061392f8484600085613939565b90505b9392505050565b6060824710156139cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016108d0565b73ffffffffffffffffffffffffffffffffffffffff85163b613a49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108d0565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613a7291906144a8565b60006040518083038185875af1925050503d8060008114613aaf576040519150601f19603f3d011682016040523d82523d6000602084013e613ab4565b606091505b509150915061256e82828660608315613ace575081613932565b825115613ade5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d09190613b88565b60005b83811015613b2d578181015183820152602001613b15565b838111156133e95750506000910152565b60008151808452613b56816020860160208601613b12565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006139326020830184613b3e565b803567ffffffffffffffff81168114613bb357600080fd5b919050565b60008060408385031215613bcb57600080fd5b613bd483613b9b565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613c3457613c34613be2565b60405290565b6040516060810167ffffffffffffffff81118282101715613c3457613c34613be2565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613ca457613ca4613be2565b604052919050565b600067ffffffffffffffff821115613cc657613cc6613be2565b5060051b60200190565b600082601f830112613ce157600080fd5b813567ffffffffffffffff811115613cfb57613cfb613be2565b613d2c60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613c5d565b818152846020838601011115613d4157600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613d7157600080fd5b823567ffffffffffffffff80821115613d8957600080fd5b818501915085601f830112613d9d57600080fd5b8135613db0613dab82613cac565b613c5d565b81815260059190911b83018401908481019088831115613dcf57600080fd5b8585015b83811015613e8657803585811115613deb5760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001811315613e215760008081fd5b613e29613c11565b8983013588811115613e3b5760008081fd5b613e498e8c83870101613cd0565b8252506040808401358b8301526060613e63818601613b9b565b82840152613e72848601613b9b565b908301525085525050918601918601613dd3565b5098975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146134a357600080fd5b8035613bb381613e93565b600060208284031215613ed257600080fd5b813561393281613e93565b8060408101831015613eee57600080fd5b92915050565b6000806000806000806000610180888a031215613f1057600080fd5b613f1988613b9b565b9650613f2760208901613b9b565b95506040880135945060608801359350613f448960808a01613edd565b9250610140880189811115613f5857600080fd5b60c089019250613f688a82613edd565b91505092959891949750929550565b600080600080600060a08688031215613f8f57600080fd5b85359450602086013567ffffffffffffffff811115613fad57600080fd5b613fb988828901613cd0565b94505060408601359250613fcf60608701613b9b565b91506080860135613fdf81613e93565b809150509295509295909350565b600060208284031215613fff57600080fd5b61393282613b9b565b6000806000806080858703121561401e57600080fd5b61402785613b9b565b935061403560208601613b9b565b93969395505050506040820135916060013590565b80151581146134a357600080fd5b8035613bb38161404a565b60006020828403121561407557600080fd5b81356139328161404a565b60006020828403121561409257600080fd5b813567ffffffffffffffff8111156140a957600080fd5b6140b584828501613cd0565b949350505050565b60008060008060008060008060006101208a8c0312156140dc57600080fd5b89356140e781613e93565b985060208a01356140f781613e93565b975061410560408b01613eb5565b965060608a0135955061411a60808b01613eb5565b945061412860a08b01614058565b935060c08a013567ffffffffffffffff8082111561414557600080fd5b6141518d838e01613cd0565b945061415f60e08d01613b9b565b93506101008c013591508082111561417657600080fd5b506141838c828d01613cd0565b9150509295985092959850929598565b6000602082840312156141a557600080fd5b5035919050565b600060208083850312156141bf57600080fd5b823567ffffffffffffffff808211156141d757600080fd5b818501915085601f8301126141eb57600080fd5b81356141f9613dab82613cac565b81815260059190911b8301840190848101908883111561421857600080fd5b8585015b83811015613e86578035858111156142345760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181131561426a5760008081fd5b614272613c3a565b89830135888111156142845760008081fd5b6142928e8c83870101613cd0565b8252506040808401358b8301526142aa838501613b9b565b908201528552505091860191860161421c565b600080604083850312156142d057600080fd5b823567ffffffffffffffff8111156142e757600080fd5b6142f385828601613cd0565b95602094909401359450505050565b600181811c9082168061431657607f821691505b60208210810361434f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036143d0576143d0614384565b6001019392505050565b6000602082840312156143ec57600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361442457614424614384565b5060010190565b600067ffffffffffffffff8381169083168181101561444c5761444c614384565b039392505050565b60008282101561446657614466614384565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144a3576144a3614384565b500290565b600082516144ba818460208701613b12565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614502576145026144c4565b500690565b61012081016040808784376000838201818152879190815b600281101561453f5784848337908401828152928401929060010161451f565b5050828760c0870137610100850181815286935091505b6001811015614575578251825260209283019290910190600101614556565b50505095945050505050565b60006020828403121561459357600080fd5b81516139328161404a565b600067ffffffffffffffff8083168185168083038211156145c1576145c1614384565b01949350505050565b6000826145d9576145d96144c4565b500490565b601f82111561365957600081815260208120601f850160051c810160208610156146055750805b601f850160051c820191505b8181101561462457828155600101614611565b505050505050565b815167ffffffffffffffff81111561464657614646613be2565b61465a816146548454614302565b846145de565b602080601f8311600181146146ad57600084156146775750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614624565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156146fa578886015182559484019460019091019084016146db565b508582101561473657878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000821982111561475957614759614384565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006147936060830184613b3e565b9594505050505056fea26469706673582212202292bd2e610d331108ed905e1a87f79aceb1dcccb827238286e21cb9fbe8168564736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506147d2806100206000396000f3fe608060405234801561001057600080fd5b50600436106102de5760003560e01c80639b79676011610186578063d02103ca116100e3578063d8f54db011610097578063eaeb077b11610071578063eaeb077b14610739578063f2fde38b1461074c578063f75527611461075f57600080fd5b8063d8f54db0146106ac578063e7a7ed02146106e9578063e8bf92ed1461071957600080fd5b8063d2fd1b31116100c8578063d2fd1b3114610673578063d307b74314610686578063d8d1091b1461069957600080fd5b8063d02103ca14610640578063d0ae98dd1461066057600080fd5b8063b4d63f581161013a578063c0cad3021161011f578063c0cad302146105ee578063c89e42df14610601578063cfa8ed471461061457600080fd5b8063b4d63f58146105a8578063b6b0b097146105c857600080fd5b8063ac2eba981161016b578063ac2eba9814610582578063adc879e91461058b578063b02286c01461059f57600080fd5b80639b79676014610565578063ab9fc5ef1461057857600080fd5b80636b8616ce1161023f57806379847057116101f35780638da5cb5b116101cd5780638da5cb5b1461050b57806396dc3d391461054a57806399f5634e1461055d57600080fd5b806379847057146104dc5780637fcb3653146104e45780638c4a0af7146104f857600080fd5b8063715018a611610224578063715018a6146104ae5780637152facf146104b6578063748608de146104c957600080fd5b80636b8616ce1461047b5780636ff512cc1461049b57600080fd5b806345605267116102965780635437988d1161027b5780635437988d146103a657806355b925e6146103b9578063574f649e146103cc57600080fd5b80634560526714610376578063542028d51461039e57600080fd5b80631a26da14116102c75780631a26da141461032e5780633c15826714610343578063423fa8561461035657600080fd5b8063107bf28c146102e357806319d8ac6114610301575b600080fd5b6102eb61076e565b6040516102f89190613b88565b60405180910390f35b6003546103159067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102f8565b61034161033c366004613bb8565b6107fc565b005b610341610351366004613d5e565b610821565b6003546103159068010000000000000000900467ffffffffffffffff1681565b60035461031590700100000000000000000000000000000000900467ffffffffffffffff1681565b6102eb611153565b6103416103b4366004613ec0565b611160565b6103416103c7366004613ef4565b6111af565b61046d6103da366004613f77565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b6040519081526020016102f8565b61046d610489366004613fed565b60016020526000908152604090205481565b6103416104a9366004613ec0565b61171f565b61034161185a565b6102eb6104c4366004614008565b61186e565b6103416104d7366004613ef4565b611a00565b61046d611e09565b6004546103159067ffffffffffffffff1681565b610341610506366004614063565b611e83565b603d5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102f8565b610341610558366004613fed565b611fb7565b61046d611ffa565b610341610573366004613fed565b612129565b61031562093a8081565b61046d60065481565b6009546103159067ffffffffffffffff1681565b61046d61ea6081565b61046d6105b6366004613fed565b60026020526000908152604090205481565b6000546105259062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6103416105fc366004614080565b612178565b61034161060f366004614080565b612190565b6004546105259068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546105259073ffffffffffffffffffffffffffffffffffffffff1681565b61046d61066e366004614008565b61227f565b6103416106813660046140bd565b612579565b610341610694366004614193565b61286e565b6103416106a73660046141ac565b61287b565b6004546106d9907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016102f8565b600354610315907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6007546105259073ffffffffffffffffffffffffffffffffffffffff1681565b6103416107473660046142bd565b612f21565b61034161075a366004613ec0565b6133ef565b61046d67016345785d8a000081565b600a805461077b90614302565b80601f01602080910402602001604051908101604052809291908181526020018280546107a790614302565b80156107f45780601f106107c9576101008083540402835291602001916107f4565b820191906000526020600020905b8154815290600101906020018083116107d757829003601f168201915b505050505081565b6108046134a6565b67ffffffffffffffff909116600090815260026020526040902055565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146108d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b805160035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610f2957600087828151811061094157610941614355565b602002602001015190506000816060015167ffffffffffffffff161115610bac578361096c816143b3565b9450506000816000015180519060200120826020015183606001516040516020016109cf93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114610ad4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610ba6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016108d0565b50610d7a565b60208101511580610c5b575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610c159160040190815260200190565b6020604051808303816000875af1158015610c34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5891906143da565b15155b610ce7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016108d0565b80515161ea6011610d7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016108d0565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610db0575042816040015167ffffffffffffffff1611155b610e62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610f0b906143b3565b95505080604001519550508080610f21906143f3565b915050610925565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610fe6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016108d0565b60035460009061101490700100000000000000000000000000000000900467ffffffffffffffff168461442b565b6110289067ffffffffffffffff1687614454565b6003805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152600260205260409020839055905061110633306110df8467016345785d8a000061446b565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16929190613527565b6003546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b6008805461077b90614302565b6111686134a6565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60045467ffffffffffffffff888116911614611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c6173745665726966696564426174636820646f6573206e6f74206d6160648201527f7463680000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8667ffffffffffffffff168667ffffffffffffffff161161133c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a4016108d0565b60035467ffffffffffffffff680100000000000000009091048116908716111561140f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a76657269667942617463686573908201527f3a20626174636820646f6573206e6f742068617665206265656e20736571756560648201527f6e63656400000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b600061141d8888888861186e565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161145291906144a8565b602060405180830381855afa15801561146f573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061149291906143da565b61149c91906144f3565b6007546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916115069189918991899190600401614507565b602060405180830381865afa158015611523573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115479190614581565b6115d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016108d0565b611623336115e18b8b61442b565b67ffffffffffffffff166115f3611ffa565b6115fd919061446b565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff169190613603565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a1617815560068790556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820189905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b1580156116c557600080fd5b505af11580156116d9573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8b1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a3505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146117d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b6118626134a6565b61186c600061365e565b565b67ffffffffffffffff8085166000908152600260205260408082205492861682529020546060919080611949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b6006546009546040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b1660208201526034810192909252605482018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607485015291821b8116607c8401526084830187905260a4830184905260c483018890529088901b1660e482015260ec0160405160208183030381529060405292505050949350505050565b611a086134a6565b60045467ffffffffffffffff888116911614611acc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8667ffffffffffffffff168667ffffffffffffffff1611611b95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff6801000000000000000090910481169087161115611c67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b67ffffffffffffffff861660009081526002602052604090205480611d0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f74206578697374000060648201526084016108d0565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff891617815560068690556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820188905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b158015611db057600080fd5b505af1158015611dc4573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8a1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a35050505050505050565b60035460009067ffffffffffffffff7001000000000000000000000000000000008204811691611e5891780100000000000000000000000000000000000000000000000090910416600161459e565b611e62919061442b565b611e7e9067ffffffffffffffff16670de0b6b3a764000061446b565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611f36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061184f90831515815260200190565b611fbf6134a6565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b600080546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829162010000900473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561206f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209391906143da565b60045460035491925060009167ffffffffffffffff918216916801000000000000000082048116916120f8917001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041661442b565b612102919061459e565b61210c919061442b565b67ffffffffffffffff16905061212281836145ca565b9250505090565b6121316134a6565b6003805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b6121806134a6565b600a61218c828261462c565b5050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600861224f828261462c565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161184f9190613b88565b60045460009067ffffffffffffffff868116911614612346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8467ffffffffffffffff168467ffffffffffffffff161161240f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff68010000000000000000909104811690851611156124e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b60006124ef8686868661186e565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161252491906144a8565b602060405180830381855afa158015612541573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061256491906143da565b61256e91906144f3565b979650505050505050565b600054610100900460ff16158080156125995750600054600160ff909116105b806125b35750303b1580156125b3575060005460ff166001145b61263f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016108d0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561269d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602179055600780549091168a83161790556006889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c01000000000000000000000000000000000000000000000000000000008715150217905560086127b5858261462c565b50600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600a6127f6838261462c565b506127ff6136d5565b801561286257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6128766134a6565b600655565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108d0565b805180612a0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612a58918491700100000000000000000000000000000000900416614746565b1115612ae6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016108d0565b60035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205491937001000000000000000000000000000000009004909216915b84811015612e51576000868281518110612b4657612b46614355565b602002602001015190508380612b5b906143b3565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114612cb4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016108d0565b612cbf600188614454565b8303612d97574262093a808360400151612cd9919061459e565b67ffffffffffffffff161115612d97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016108d0565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612e39906143b3565b96505050508080612e49906143f3565b915050612b2a565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260026020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612ffe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108d0565b6000613008611e09565b90508181111561309a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016108d0565b61ea6083511061312c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016108d0565b6000546131579062010000900473ffffffffffffffffffffffffffffffffffffffff16333084613527565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa1580156131c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131eb91906143da565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613225836143b3565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161329e93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000908152600190935291205532330361338c57600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26133e9565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516133e09392919061475e565b60405180910390a25b50505050565b6133f76134a6565b73ffffffffffffffffffffffffffffffffffffffff811661349a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108d0565b6134a38161365e565b50565b603d5473ffffffffffffffffffffffffffffffffffffffff16331461186c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526133e99085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613774565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526136599084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401613581565b505050565b603d805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661376c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d0565b61186c613880565b60006137d6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166139209092919063ffffffff16565b80519091501561365957808060200190518101906137f49190614581565b613659576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108d0565b600054610100900460ff16613917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d0565b61186c3361365e565b606061392f8484600085613939565b90505b9392505050565b6060824710156139cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016108d0565b73ffffffffffffffffffffffffffffffffffffffff85163b613a49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108d0565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613a7291906144a8565b60006040518083038185875af1925050503d8060008114613aaf576040519150601f19603f3d011682016040523d82523d6000602084013e613ab4565b606091505b509150915061256e82828660608315613ace575081613932565b825115613ade5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d09190613b88565b60005b83811015613b2d578181015183820152602001613b15565b838111156133e95750506000910152565b60008151808452613b56816020860160208601613b12565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006139326020830184613b3e565b803567ffffffffffffffff81168114613bb357600080fd5b919050565b60008060408385031215613bcb57600080fd5b613bd483613b9b565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613c3457613c34613be2565b60405290565b6040516060810167ffffffffffffffff81118282101715613c3457613c34613be2565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613ca457613ca4613be2565b604052919050565b600067ffffffffffffffff821115613cc657613cc6613be2565b5060051b60200190565b600082601f830112613ce157600080fd5b813567ffffffffffffffff811115613cfb57613cfb613be2565b613d2c60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613c5d565b818152846020838601011115613d4157600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613d7157600080fd5b823567ffffffffffffffff80821115613d8957600080fd5b818501915085601f830112613d9d57600080fd5b8135613db0613dab82613cac565b613c5d565b81815260059190911b83018401908481019088831115613dcf57600080fd5b8585015b83811015613e8657803585811115613deb5760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001811315613e215760008081fd5b613e29613c11565b8983013588811115613e3b5760008081fd5b613e498e8c83870101613cd0565b8252506040808401358b8301526060613e63818601613b9b565b82840152613e72848601613b9b565b908301525085525050918601918601613dd3565b5098975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146134a357600080fd5b8035613bb381613e93565b600060208284031215613ed257600080fd5b813561393281613e93565b8060408101831015613eee57600080fd5b92915050565b6000806000806000806000610180888a031215613f1057600080fd5b613f1988613b9b565b9650613f2760208901613b9b565b95506040880135945060608801359350613f448960808a01613edd565b9250610140880189811115613f5857600080fd5b60c089019250613f688a82613edd565b91505092959891949750929550565b600080600080600060a08688031215613f8f57600080fd5b85359450602086013567ffffffffffffffff811115613fad57600080fd5b613fb988828901613cd0565b94505060408601359250613fcf60608701613b9b565b91506080860135613fdf81613e93565b809150509295509295909350565b600060208284031215613fff57600080fd5b61393282613b9b565b6000806000806080858703121561401e57600080fd5b61402785613b9b565b935061403560208601613b9b565b93969395505050506040820135916060013590565b80151581146134a357600080fd5b8035613bb38161404a565b60006020828403121561407557600080fd5b81356139328161404a565b60006020828403121561409257600080fd5b813567ffffffffffffffff8111156140a957600080fd5b6140b584828501613cd0565b949350505050565b60008060008060008060008060006101208a8c0312156140dc57600080fd5b89356140e781613e93565b985060208a01356140f781613e93565b975061410560408b01613eb5565b965060608a0135955061411a60808b01613eb5565b945061412860a08b01614058565b935060c08a013567ffffffffffffffff8082111561414557600080fd5b6141518d838e01613cd0565b945061415f60e08d01613b9b565b93506101008c013591508082111561417657600080fd5b506141838c828d01613cd0565b9150509295985092959850929598565b6000602082840312156141a557600080fd5b5035919050565b600060208083850312156141bf57600080fd5b823567ffffffffffffffff808211156141d757600080fd5b818501915085601f8301126141eb57600080fd5b81356141f9613dab82613cac565b81815260059190911b8301840190848101908883111561421857600080fd5b8585015b83811015613e86578035858111156142345760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181131561426a5760008081fd5b614272613c3a565b89830135888111156142845760008081fd5b6142928e8c83870101613cd0565b8252506040808401358b8301526142aa838501613b9b565b908201528552505091860191860161421c565b600080604083850312156142d057600080fd5b823567ffffffffffffffff8111156142e757600080fd5b6142f385828601613cd0565b95602094909401359450505050565b600181811c9082168061431657607f821691505b60208210810361434f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036143d0576143d0614384565b6001019392505050565b6000602082840312156143ec57600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361442457614424614384565b5060010190565b600067ffffffffffffffff8381169083168181101561444c5761444c614384565b039392505050565b60008282101561446657614466614384565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144a3576144a3614384565b500290565b600082516144ba818460208701613b12565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614502576145026144c4565b500690565b61012081016040808784376000838201818152879190815b600281101561453f5784848337908401828152928401929060010161451f565b5050828760c0870137610100850181815286935091505b6001811015614575578251825260209283019290910190600101614556565b50505095945050505050565b60006020828403121561459357600080fd5b81516139328161404a565b600067ffffffffffffffff8083168185168083038211156145c1576145c1614384565b01949350505050565b6000826145d9576145d96144c4565b500490565b601f82111561365957600081815260208120601f850160051c810160208610156146055750805b601f850160051c820191505b8181101561462457828155600101614611565b505050505050565b815167ffffffffffffffff81111561464657614646613be2565b61465a816146548454614302565b846145de565b602080601f8311600181146146ad57600084156146775750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614624565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156146fa578886015182559484019460019091019084016146db565b508582101561473657878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000821982111561475957614759614384565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006147936060830184613b3e565b9594505050505056fea26469706673582212205a9a1deeb7db16f2005fedc28f6c98579cecadb633923d1989fee6f570d6a24564736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102de5760003560e01c80639b79676011610186578063d02103ca116100e3578063d8f54db011610097578063eaeb077b11610071578063eaeb077b14610739578063f2fde38b1461074c578063f75527611461075f57600080fd5b8063d8f54db0146106ac578063e7a7ed02146106e9578063e8bf92ed1461071957600080fd5b8063d2fd1b31116100c8578063d2fd1b3114610673578063d307b74314610686578063d8d1091b1461069957600080fd5b8063d02103ca14610640578063d0ae98dd1461066057600080fd5b8063b4d63f581161013a578063c0cad3021161011f578063c0cad302146105ee578063c89e42df14610601578063cfa8ed471461061457600080fd5b8063b4d63f58146105a8578063b6b0b097146105c857600080fd5b8063ac2eba981161016b578063ac2eba9814610582578063adc879e91461058b578063b02286c01461059f57600080fd5b80639b79676014610565578063ab9fc5ef1461057857600080fd5b80636b8616ce1161023f57806379847057116101f35780638da5cb5b116101cd5780638da5cb5b1461050b57806396dc3d391461054a57806399f5634e1461055d57600080fd5b806379847057146104dc5780637fcb3653146104e45780638c4a0af7146104f857600080fd5b8063715018a611610224578063715018a6146104ae5780637152facf146104b6578063748608de146104c957600080fd5b80636b8616ce1461047b5780636ff512cc1461049b57600080fd5b806345605267116102965780635437988d1161027b5780635437988d146103a657806355b925e6146103b9578063574f649e146103cc57600080fd5b80634560526714610376578063542028d51461039e57600080fd5b80631a26da14116102c75780631a26da141461032e5780633c15826714610343578063423fa8561461035657600080fd5b8063107bf28c146102e357806319d8ac6114610301575b600080fd5b6102eb61076e565b6040516102f89190613b88565b60405180910390f35b6003546103159067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102f8565b61034161033c366004613bb8565b6107fc565b005b610341610351366004613d5e565b610821565b6003546103159068010000000000000000900467ffffffffffffffff1681565b60035461031590700100000000000000000000000000000000900467ffffffffffffffff1681565b6102eb611153565b6103416103b4366004613ec0565b611160565b6103416103c7366004613ef4565b6111af565b61046d6103da366004613f77565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b6040519081526020016102f8565b61046d610489366004613fed565b60016020526000908152604090205481565b6103416104a9366004613ec0565b61171f565b61034161185a565b6102eb6104c4366004614008565b61186e565b6103416104d7366004613ef4565b611a00565b61046d611e09565b6004546103159067ffffffffffffffff1681565b610341610506366004614063565b611e83565b603d5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102f8565b610341610558366004613fed565b611fb7565b61046d611ffa565b610341610573366004613fed565b612129565b61031562093a8081565b61046d60065481565b6009546103159067ffffffffffffffff1681565b61046d61ea6081565b61046d6105b6366004613fed565b60026020526000908152604090205481565b6000546105259062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6103416105fc366004614080565b612178565b61034161060f366004614080565b612190565b6004546105259068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546105259073ffffffffffffffffffffffffffffffffffffffff1681565b61046d61066e366004614008565b61227f565b6103416106813660046140bd565b612579565b610341610694366004614193565b61286e565b6103416106a73660046141ac565b61287b565b6004546106d9907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016102f8565b600354610315907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6007546105259073ffffffffffffffffffffffffffffffffffffffff1681565b6103416107473660046142bd565b612f21565b61034161075a366004613ec0565b6133ef565b61046d67016345785d8a000081565b600a805461077b90614302565b80601f01602080910402602001604051908101604052809291908181526020018280546107a790614302565b80156107f45780601f106107c9576101008083540402835291602001916107f4565b820191906000526020600020905b8154815290600101906020018083116107d757829003601f168201915b505050505081565b6108046134a6565b67ffffffffffffffff909116600090815260026020526040902055565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146108d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b805160035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610f2957600087828151811061094157610941614355565b602002602001015190506000816060015167ffffffffffffffff161115610bac578361096c816143b3565b9450506000816000015180519060200120826020015183606001516040516020016109cf93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114610ad4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610ba6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016108d0565b50610d7a565b60208101511580610c5b575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610c159160040190815260200190565b6020604051808303816000875af1158015610c34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5891906143da565b15155b610ce7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016108d0565b80515161ea6011610d7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016108d0565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610db0575042816040015167ffffffffffffffff1611155b610e62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610f0b906143b3565b95505080604001519550508080610f21906143f3565b915050610925565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610fe6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016108d0565b60035460009061101490700100000000000000000000000000000000900467ffffffffffffffff168461442b565b6110289067ffffffffffffffff1687614454565b6003805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152600260205260409020839055905061110633306110df8467016345785d8a000061446b565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16929190613527565b6003546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b6008805461077b90614302565b6111686134a6565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60045467ffffffffffffffff888116911614611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c6173745665726966696564426174636820646f6573206e6f74206d6160648201527f7463680000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8667ffffffffffffffff168667ffffffffffffffff161161133c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a4016108d0565b60035467ffffffffffffffff680100000000000000009091048116908716111561140f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a76657269667942617463686573908201527f3a20626174636820646f6573206e6f742068617665206265656e20736571756560648201527f6e63656400000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b600061141d8888888861186e565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161145291906144a8565b602060405180830381855afa15801561146f573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061149291906143da565b61149c91906144f3565b6007546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916115069189918991899190600401614507565b602060405180830381865afa158015611523573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115479190614581565b6115d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016108d0565b611623336115e18b8b61442b565b67ffffffffffffffff166115f3611ffa565b6115fd919061446b565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff169190613603565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a1617815560068790556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820189905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b1580156116c557600080fd5b505af11580156116d9573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8b1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a3505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146117d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b6118626134a6565b61186c600061365e565b565b67ffffffffffffffff8085166000908152600260205260408082205492861682529020546060919080611949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b6006546009546040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b1660208201526034810192909252605482018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607485015291821b8116607c8401526084830187905260a4830184905260c483018890529088901b1660e482015260ec0160405160208183030381529060405292505050949350505050565b611a086134a6565b60045467ffffffffffffffff888116911614611acc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8667ffffffffffffffff168667ffffffffffffffff1611611b95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff6801000000000000000090910481169087161115611c67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b67ffffffffffffffff861660009081526002602052604090205480611d0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f74206578697374000060648201526084016108d0565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff891617815560068690556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820188905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b158015611db057600080fd5b505af1158015611dc4573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8a1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a35050505050505050565b60035460009067ffffffffffffffff7001000000000000000000000000000000008204811691611e5891780100000000000000000000000000000000000000000000000090910416600161459e565b611e62919061442b565b611e7e9067ffffffffffffffff16670de0b6b3a764000061446b565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611f36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061184f90831515815260200190565b611fbf6134a6565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b600080546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829162010000900473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561206f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209391906143da565b60045460035491925060009167ffffffffffffffff918216916801000000000000000082048116916120f8917001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041661442b565b612102919061459e565b61210c919061442b565b67ffffffffffffffff16905061212281836145ca565b9250505090565b6121316134a6565b6003805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b6121806134a6565b600a61218c828261462c565b5050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600861224f828261462c565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161184f9190613b88565b60045460009067ffffffffffffffff868116911614612346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8467ffffffffffffffff168467ffffffffffffffff161161240f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff68010000000000000000909104811690851611156124e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b60006124ef8686868661186e565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161252491906144a8565b602060405180830381855afa158015612541573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061256491906143da565b61256e91906144f3565b979650505050505050565b600054610100900460ff16158080156125995750600054600160ff909116105b806125b35750303b1580156125b3575060005460ff166001145b61263f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016108d0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561269d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602179055600780549091168a83161790556006889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c01000000000000000000000000000000000000000000000000000000008715150217905560086127b5858261462c565b50600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600a6127f6838261462c565b506127ff6136d5565b801561286257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6128766134a6565b600655565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108d0565b805180612a0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612a58918491700100000000000000000000000000000000900416614746565b1115612ae6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016108d0565b60035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205491937001000000000000000000000000000000009004909216915b84811015612e51576000868281518110612b4657612b46614355565b602002602001015190508380612b5b906143b3565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114612cb4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016108d0565b612cbf600188614454565b8303612d97574262093a808360400151612cd9919061459e565b67ffffffffffffffff161115612d97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016108d0565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612e39906143b3565b96505050508080612e49906143f3565b915050612b2a565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260026020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612ffe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108d0565b6000613008611e09565b90508181111561309a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016108d0565b61ea6083511061312c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016108d0565b6000546131579062010000900473ffffffffffffffffffffffffffffffffffffffff16333084613527565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa1580156131c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131eb91906143da565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613225836143b3565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161329e93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000908152600190935291205532330361338c57600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26133e9565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516133e09392919061475e565b60405180910390a25b50505050565b6133f76134a6565b73ffffffffffffffffffffffffffffffffffffffff811661349a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108d0565b6134a38161365e565b50565b603d5473ffffffffffffffffffffffffffffffffffffffff16331461186c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526133e99085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613774565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526136599084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401613581565b505050565b603d805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661376c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d0565b61186c613880565b60006137d6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166139209092919063ffffffff16565b80519091501561365957808060200190518101906137f49190614581565b613659576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108d0565b600054610100900460ff16613917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d0565b61186c3361365e565b606061392f8484600085613939565b90505b9392505050565b6060824710156139cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016108d0565b73ffffffffffffffffffffffffffffffffffffffff85163b613a49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108d0565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613a7291906144a8565b60006040518083038185875af1925050503d8060008114613aaf576040519150601f19603f3d011682016040523d82523d6000602084013e613ab4565b606091505b509150915061256e82828660608315613ace575081613932565b825115613ade5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d09190613b88565b60005b83811015613b2d578181015183820152602001613b15565b838111156133e95750506000910152565b60008151808452613b56816020860160208601613b12565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006139326020830184613b3e565b803567ffffffffffffffff81168114613bb357600080fd5b919050565b60008060408385031215613bcb57600080fd5b613bd483613b9b565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613c3457613c34613be2565b60405290565b6040516060810167ffffffffffffffff81118282101715613c3457613c34613be2565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613ca457613ca4613be2565b604052919050565b600067ffffffffffffffff821115613cc657613cc6613be2565b5060051b60200190565b600082601f830112613ce157600080fd5b813567ffffffffffffffff811115613cfb57613cfb613be2565b613d2c60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613c5d565b818152846020838601011115613d4157600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613d7157600080fd5b823567ffffffffffffffff80821115613d8957600080fd5b818501915085601f830112613d9d57600080fd5b8135613db0613dab82613cac565b613c5d565b81815260059190911b83018401908481019088831115613dcf57600080fd5b8585015b83811015613e8657803585811115613deb5760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001811315613e215760008081fd5b613e29613c11565b8983013588811115613e3b5760008081fd5b613e498e8c83870101613cd0565b8252506040808401358b8301526060613e63818601613b9b565b82840152613e72848601613b9b565b908301525085525050918601918601613dd3565b5098975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146134a357600080fd5b8035613bb381613e93565b600060208284031215613ed257600080fd5b813561393281613e93565b8060408101831015613eee57600080fd5b92915050565b6000806000806000806000610180888a031215613f1057600080fd5b613f1988613b9b565b9650613f2760208901613b9b565b95506040880135945060608801359350613f448960808a01613edd565b9250610140880189811115613f5857600080fd5b60c089019250613f688a82613edd565b91505092959891949750929550565b600080600080600060a08688031215613f8f57600080fd5b85359450602086013567ffffffffffffffff811115613fad57600080fd5b613fb988828901613cd0565b94505060408601359250613fcf60608701613b9b565b91506080860135613fdf81613e93565b809150509295509295909350565b600060208284031215613fff57600080fd5b61393282613b9b565b6000806000806080858703121561401e57600080fd5b61402785613b9b565b935061403560208601613b9b565b93969395505050506040820135916060013590565b80151581146134a357600080fd5b8035613bb38161404a565b60006020828403121561407557600080fd5b81356139328161404a565b60006020828403121561409257600080fd5b813567ffffffffffffffff8111156140a957600080fd5b6140b584828501613cd0565b949350505050565b60008060008060008060008060006101208a8c0312156140dc57600080fd5b89356140e781613e93565b985060208a01356140f781613e93565b975061410560408b01613eb5565b965060608a0135955061411a60808b01613eb5565b945061412860a08b01614058565b935060c08a013567ffffffffffffffff8082111561414557600080fd5b6141518d838e01613cd0565b945061415f60e08d01613b9b565b93506101008c013591508082111561417657600080fd5b506141838c828d01613cd0565b9150509295985092959850929598565b6000602082840312156141a557600080fd5b5035919050565b600060208083850312156141bf57600080fd5b823567ffffffffffffffff808211156141d757600080fd5b818501915085601f8301126141eb57600080fd5b81356141f9613dab82613cac565b81815260059190911b8301840190848101908883111561421857600080fd5b8585015b83811015613e86578035858111156142345760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181131561426a5760008081fd5b614272613c3a565b89830135888111156142845760008081fd5b6142928e8c83870101613cd0565b8252506040808401358b8301526142aa838501613b9b565b908201528552505091860191860161421c565b600080604083850312156142d057600080fd5b823567ffffffffffffffff8111156142e757600080fd5b6142f385828601613cd0565b95602094909401359450505050565b600181811c9082168061431657607f821691505b60208210810361434f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036143d0576143d0614384565b6001019392505050565b6000602082840312156143ec57600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361442457614424614384565b5060010190565b600067ffffffffffffffff8381169083168181101561444c5761444c614384565b039392505050565b60008282101561446657614466614384565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144a3576144a3614384565b500290565b600082516144ba818460208701613b12565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614502576145026144c4565b500690565b61012081016040808784376000838201818152879190815b600281101561453f5784848337908401828152928401929060010161451f565b5050828760c0870137610100850181815286935091505b6001811015614575578251825260209283019290910190600101614556565b50505095945050505050565b60006020828403121561459357600080fd5b81516139328161404a565b600067ffffffffffffffff8083168185168083038211156145c1576145c1614384565b01949350505050565b6000826145d9576145d96144c4565b500490565b601f82111561365957600081815260208120601f850160051c810160208610156146055750805b601f850160051c820191505b8181101561462457828155600101614611565b505050505050565b815167ffffffffffffffff81111561464657614646613be2565b61465a816146548454614302565b846145de565b602080601f8311600181146146ad57600084156146775750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614624565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156146fa578886015182559484019460019091019084016146db565b508582101561473657878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000821982111561475957614759614384565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006147936060830184613b3e565b9594505050505056fea26469706673582212205a9a1deeb7db16f2005fedc28f6c98579cecadb633923d1989fee6f570d6a24564736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/Bridge.sol b/contracts/Bridge.sol index 876ad9cbf..9ed038ff7 100644 --- a/contracts/Bridge.sol +++ b/contracts/Bridge.sol @@ -26,6 +26,9 @@ contract Bridge is DepositContract { // bytes4(keccak256(bytes("permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"))); bytes4 constant _PERMIT_SIGNATURE = 0xd505accf; + // bytes4(keccak256(bytes("permit(address,address,uint256,uint256,bool,uint8,bytes32,bytes32)"))); + bytes4 constant _PERMIT_SIGNATURE_DAI = 0x8fcbaf0c; + // Mainnet indentifier uint32 public constant MAINNET_NETWORK_ID = 0; @@ -576,47 +579,110 @@ contract Bridge is DepositContract { bytes calldata permitData ) internal { bytes4 sig = _getSelector(permitData); - require(sig == _PERMIT_SIGNATURE, "Bridge::_permit: NOT_VALID_CALL"); - ( - address owner, - address spender, - uint256 value, - uint256 deadline, - uint8 v, - bytes32 r, - bytes32 s - ) = abi.decode( - permitData[4:], - (address, address, uint256, uint256, uint8, bytes32, bytes32) + if (sig == _PERMIT_SIGNATURE) { + ( + address owner, + address spender, + uint256 value, + uint256 deadline, + uint8 v, + bytes32 r, + bytes32 s + ) = abi.decode( + permitData[4:], + ( + address, + address, + uint256, + uint256, + uint8, + bytes32, + bytes32 + ) + ); + require( + owner == msg.sender, + "Bridge::_permit: PERMIT_OWNER_MUST_BE_THE_SENDER" + ); + require( + spender == address(this), + "Bridge::_permit: SPENDER_MUST_BE_THIS" + ); + require( + value == amount, + "Bridge::_permit: PERMIT_AMOUNT_DOES_NOT_MATCH" ); - require( - owner == msg.sender, - "Bridge::_permit: PERMIT_OWNER_MUST_BE_THE_SENDER" - ); - require( - spender == address(this), - "Bridge::_permit: SPENDER_MUST_BE_THIS" - ); - require( - value == amount, - "Bridge::_permit: PERMIT_AMOUNT_DOES_NOT_MATCH" - ); - // we call without checking the result, in case it fails and he doesn't have enough balance - // the following transferFrom should be fail. This prevents DoS attacks from using a signature - // before the smartcontract call - /* solhint-disable avoid-low-level-calls */ - address(token).call( - abi.encodeWithSelector( - _PERMIT_SIGNATURE, - owner, - spender, - value, - deadline, - v, - r, - s - ) - ); + // we call without checking the result, in case it fails and he doesn't have enough balance + // the following transferFrom should be fail. This prevents DoS attacks from using a signature + // before the smartcontract call + /* solhint-disable avoid-low-level-calls */ + address(token).call( + abi.encodeWithSelector( + _PERMIT_SIGNATURE, + owner, + spender, + value, + deadline, + v, + r, + s + ) + ); + } else { + require( + sig == _PERMIT_SIGNATURE_DAI, + "Bridge::_permit: NOT_VALID_CALL" + ); + + ( + address holder, + address spender, + uint256 nonce, + uint256 expiry, + bool allowed, + uint8 v, + bytes32 r, + bytes32 s + ) = abi.decode( + permitData[4:], + ( + address, + address, + uint256, + uint256, + bool, + uint8, + bytes32, + bytes32 + ) + ); + require( + holder == msg.sender, + "Bridge::_permit: PERMIT_OWNER_MUST_BE_THE_SENDER" + ); + require( + spender == address(this), + "Bridge::_permit: SPENDER_MUST_BE_THIS" + ); + + // we call without checking the result, in case it fails and he doesn't have enough balance + // the following transferFrom should be fail. This prevents DoS attacks from using a signature + // before the smartcontract call + /* solhint-disable avoid-low-level-calls */ + address(token).call( + abi.encodeWithSelector( + _PERMIT_SIGNATURE_DAI, + holder, + spender, + nonce, + expiry, + allowed, + v, + r, + s + ) + ); + } } } diff --git a/contracts/ProofOfEfficiency.sol b/contracts/ProofOfEfficiency.sol index c7f35fb86..2333268ce 100644 --- a/contracts/ProofOfEfficiency.sol +++ b/contracts/ProofOfEfficiency.sol @@ -274,7 +274,7 @@ contract ProofOfEfficiency is Initializable { ); } - // Check Batch parameters are correct + // Check Batch timestamps are correct require( currentBatch.timestamp >= currentTimestamp && currentBatch.timestamp <= block.timestamp, diff --git a/contracts/mocks/DAI.sol b/contracts/mocks/DAI.sol new file mode 100644 index 000000000..73e531174 --- /dev/null +++ b/contracts/mocks/DAI.sol @@ -0,0 +1,239 @@ +/** + *Submitted for verification at Etherscan.io on 2019-11-14 + */ + +// hevm: flattened sources of /nix/store/8xb41r4qd0cjb63wcrxf1qmfg88p0961-dss-6fd7de0/src/dai.sol +pragma solidity =0.5.12; + +////// /nix/store/8xb41r4qd0cjb63wcrxf1qmfg88p0961-dss-6fd7de0/src/lib.sol +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +/* pragma solidity 0.5.12; */ + +contract LibNote { + event LogNote( + bytes4 indexed sig, + address indexed usr, + bytes32 indexed arg1, + bytes32 indexed arg2, + bytes data + ) anonymous; + + modifier note() { + _; + assembly { + // log an 'anonymous' event with a constant 6 words of calldata + // and four indexed topics: selector, caller, arg1 and arg2 + let mark := msize // end of memory ensures zero + mstore(0x40, add(mark, 288)) // update free memory pointer + mstore(mark, 0x20) // bytes type data offset + mstore(add(mark, 0x20), 224) // bytes size (padded) + calldatacopy(add(mark, 0x40), 0, 224) // bytes payload + log4( + mark, + 288, // calldata + shl(224, shr(224, calldataload(0))), // msg.sig + caller, // msg.sender + calldataload(4), // arg1 + calldataload(36) // arg2 + ) + } + } +} + +////// /nix/store/8xb41r4qd0cjb63wcrxf1qmfg88p0961-dss-6fd7de0/src/dai.sol +// Copyright (C) 2017, 2018, 2019 dbrock, rain, mrchico + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +/* pragma solidity 0.5.12; */ + +/* import "./lib.sol"; */ + +contract Dai is LibNote { + // --- Auth --- + mapping(address => uint256) public wards; + + function rely(address guy) external note auth { + wards[guy] = 1; + } + + function deny(address guy) external note auth { + wards[guy] = 0; + } + + modifier auth() { + require(wards[msg.sender] == 1, "Dai/not-authorized"); + _; + } + + // --- ERC20 Data --- + string public constant name = "Dai Stablecoin"; + string public constant symbol = "DAI"; + string public constant version = "1"; + uint8 public constant decimals = 18; + uint256 public totalSupply; + + mapping(address => uint256) public balanceOf; + mapping(address => mapping(address => uint256)) public allowance; + mapping(address => uint256) public nonces; + + event Approval(address indexed src, address indexed guy, uint256 wad); + event Transfer(address indexed src, address indexed dst, uint256 wad); + + // --- Math --- + function add(uint256 x, uint256 y) internal pure returns (uint256 z) { + require((z = x + y) >= x); + } + + function sub(uint256 x, uint256 y) internal pure returns (uint256 z) { + require((z = x - y) <= x); + } + + // --- EIP712 niceties --- + bytes32 public DOMAIN_SEPARATOR; + // bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address holder,address spender,uint256 nonce,uint256 expiry,bool allowed)"); + bytes32 public constant PERMIT_TYPEHASH = + 0xea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb; + + constructor(uint256 chainId_) public { + wards[msg.sender] = 1; + DOMAIN_SEPARATOR = keccak256( + abi.encode( + keccak256( + "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" + ), + keccak256(bytes(name)), + keccak256(bytes(version)), + chainId_, + address(this) + ) + ); + } + + // --- Token --- + function transfer(address dst, uint256 wad) external returns (bool) { + return transferFrom(msg.sender, dst, wad); + } + + function transferFrom( + address src, + address dst, + uint256 wad + ) public returns (bool) { + require(balanceOf[src] >= wad, "Dai/insufficient-balance"); + if (src != msg.sender && allowance[src][msg.sender] != uint256(-1)) { + require( + allowance[src][msg.sender] >= wad, + "Dai/insufficient-allowance" + ); + allowance[src][msg.sender] = sub(allowance[src][msg.sender], wad); + } + balanceOf[src] = sub(balanceOf[src], wad); + balanceOf[dst] = add(balanceOf[dst], wad); + emit Transfer(src, dst, wad); + return true; + } + + function mint(address usr, uint256 wad) external auth { + balanceOf[usr] = add(balanceOf[usr], wad); + totalSupply = add(totalSupply, wad); + emit Transfer(address(0), usr, wad); + } + + function burn(address usr, uint256 wad) external { + require(balanceOf[usr] >= wad, "Dai/insufficient-balance"); + if (usr != msg.sender && allowance[usr][msg.sender] != uint256(-1)) { + require( + allowance[usr][msg.sender] >= wad, + "Dai/insufficient-allowance" + ); + allowance[usr][msg.sender] = sub(allowance[usr][msg.sender], wad); + } + balanceOf[usr] = sub(balanceOf[usr], wad); + totalSupply = sub(totalSupply, wad); + emit Transfer(usr, address(0), wad); + } + + function approve(address usr, uint256 wad) external returns (bool) { + allowance[msg.sender][usr] = wad; + emit Approval(msg.sender, usr, wad); + return true; + } + + // --- Alias --- + function push(address usr, uint256 wad) external { + transferFrom(msg.sender, usr, wad); + } + + function pull(address usr, uint256 wad) external { + transferFrom(usr, msg.sender, wad); + } + + function move( + address src, + address dst, + uint256 wad + ) external { + transferFrom(src, dst, wad); + } + + // --- Approve by signature --- + function permit( + address holder, + address spender, + uint256 nonce, + uint256 expiry, + bool allowed, + uint8 v, + bytes32 r, + bytes32 s + ) external { + bytes32 digest = keccak256( + abi.encodePacked( + "\x19\x01", + DOMAIN_SEPARATOR, + keccak256( + abi.encode( + PERMIT_TYPEHASH, + holder, + spender, + nonce, + expiry, + allowed + ) + ) + ) + ); + + require(holder != address(0), "Dai/invalid-address-0"); + require(holder == ecrecover(digest, v, r, s), "Dai/invalid-permit"); + require(expiry == 0 || now <= expiry, "Dai/permit-expired"); + require(nonce == nonces[holder]++, "Dai/invalid-nonce"); + uint256 wad = allowed ? uint256(-1) : 0; + allowance[holder][spender] = wad; + emit Approval(holder, spender, wad); + } +} diff --git a/contracts/mocks/Uni.sol b/contracts/mocks/Uni.sol new file mode 100644 index 000000000..3a24a6c5a --- /dev/null +++ b/contracts/mocks/Uni.sol @@ -0,0 +1,799 @@ +/** + *Submitted for verification at Etherscan.io on 2020-09-16 + */ + +/** + *Submitted for verification at Etherscan.io on 2020-09-15 + */ + +pragma solidity ^0.5.16; +pragma experimental ABIEncoderV2; + +// From https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/math/Math.sol +// Subject to the MIT license. + +/** + * @dev Wrappers over Solidity's arithmetic operations with added overflow + * checks. + * + * Arithmetic operations in Solidity wrap on overflow. This can easily result + * in bugs, because programmers usually assume that an overflow raises an + * error, which is the standard behavior in high level programming languages. + * `SafeMath` restores this intuition by reverting the transaction when an + * operation overflows. + * + * Using this library instead of the unchecked operations eliminates an entire + * class of bugs, so it's recommended to use it always. + */ +library SafeMath { + /** + * @dev Returns the addition of two unsigned integers, reverting on overflow. + * + * Counterpart to Solidity's `+` operator. + * + * Requirements: + * - Addition cannot overflow. + */ + function add(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a + b; + require(c >= a, "SafeMath: addition overflow"); + + return c; + } + + /** + * @dev Returns the addition of two unsigned integers, reverting with custom message on overflow. + * + * Counterpart to Solidity's `+` operator. + * + * Requirements: + * - Addition cannot overflow. + */ + function add( + uint256 a, + uint256 b, + string memory errorMessage + ) internal pure returns (uint256) { + uint256 c = a + b; + require(c >= a, errorMessage); + + return c; + } + + /** + * @dev Returns the subtraction of two unsigned integers, reverting on underflow (when the result is negative). + * + * Counterpart to Solidity's `-` operator. + * + * Requirements: + * - Subtraction cannot underflow. + */ + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + return sub(a, b, "SafeMath: subtraction underflow"); + } + + /** + * @dev Returns the subtraction of two unsigned integers, reverting with custom message on underflow (when the result is negative). + * + * Counterpart to Solidity's `-` operator. + * + * Requirements: + * - Subtraction cannot underflow. + */ + function sub( + uint256 a, + uint256 b, + string memory errorMessage + ) internal pure returns (uint256) { + require(b <= a, errorMessage); + uint256 c = a - b; + + return c; + } + + /** + * @dev Returns the multiplication of two unsigned integers, reverting on overflow. + * + * Counterpart to Solidity's `*` operator. + * + * Requirements: + * - Multiplication cannot overflow. + */ + function mul(uint256 a, uint256 b) internal pure returns (uint256) { + // Gas optimization: this is cheaper than requiring 'a' not being zero, but the + // benefit is lost if 'b' is also tested. + // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 + if (a == 0) { + return 0; + } + + uint256 c = a * b; + require(c / a == b, "SafeMath: multiplication overflow"); + + return c; + } + + /** + * @dev Returns the multiplication of two unsigned integers, reverting on overflow. + * + * Counterpart to Solidity's `*` operator. + * + * Requirements: + * - Multiplication cannot overflow. + */ + function mul( + uint256 a, + uint256 b, + string memory errorMessage + ) internal pure returns (uint256) { + // Gas optimization: this is cheaper than requiring 'a' not being zero, but the + // benefit is lost if 'b' is also tested. + // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 + if (a == 0) { + return 0; + } + + uint256 c = a * b; + require(c / a == b, errorMessage); + + return c; + } + + /** + * @dev Returns the integer division of two unsigned integers. + * Reverts on division by zero. The result is rounded towards zero. + * + * Counterpart to Solidity's `/` operator. Note: this function uses a + * `revert` opcode (which leaves remaining gas untouched) while Solidity + * uses an invalid opcode to revert (consuming all remaining gas). + * + * Requirements: + * - The divisor cannot be zero. + */ + function div(uint256 a, uint256 b) internal pure returns (uint256) { + return div(a, b, "SafeMath: division by zero"); + } + + /** + * @dev Returns the integer division of two unsigned integers. + * Reverts with custom message on division by zero. The result is rounded towards zero. + * + * Counterpart to Solidity's `/` operator. Note: this function uses a + * `revert` opcode (which leaves remaining gas untouched) while Solidity + * uses an invalid opcode to revert (consuming all remaining gas). + * + * Requirements: + * - The divisor cannot be zero. + */ + function div( + uint256 a, + uint256 b, + string memory errorMessage + ) internal pure returns (uint256) { + // Solidity only automatically asserts when dividing by 0 + require(b > 0, errorMessage); + uint256 c = a / b; + // assert(a == b * c + a % b); // There is no case in which this doesn't hold + + return c; + } + + /** + * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), + * Reverts when dividing by zero. + * + * Counterpart to Solidity's `%` operator. This function uses a `revert` + * opcode (which leaves remaining gas untouched) while Solidity uses an + * invalid opcode to revert (consuming all remaining gas). + * + * Requirements: + * - The divisor cannot be zero. + */ + function mod(uint256 a, uint256 b) internal pure returns (uint256) { + return mod(a, b, "SafeMath: modulo by zero"); + } + + /** + * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), + * Reverts with custom message when dividing by zero. + * + * Counterpart to Solidity's `%` operator. This function uses a `revert` + * opcode (which leaves remaining gas untouched) while Solidity uses an + * invalid opcode to revert (consuming all remaining gas). + * + * Requirements: + * - The divisor cannot be zero. + */ + function mod( + uint256 a, + uint256 b, + string memory errorMessage + ) internal pure returns (uint256) { + require(b != 0, errorMessage); + return a % b; + } +} + +contract Uni { + /// @notice EIP-20 token name for this token + string public constant name = "Uniswap"; + + /// @notice EIP-20 token symbol for this token + string public constant symbol = "UNI"; + + /// @notice EIP-20 token decimals for this token + uint8 public constant decimals = 18; + + /// @notice Total number of tokens in circulation + uint256 public totalSupply = 1_000_000_000e18; // 1 billion Uni + + /// @notice Address which may mint new tokens + address public minter; + + /// @notice The timestamp after which minting may occur + uint256 public mintingAllowedAfter; + + /// @notice Minimum time between mints + uint32 public constant minimumTimeBetweenMints = 1 days * 365; + + /// @notice Cap on the percentage of totalSupply that can be minted at each mint + uint8 public constant mintCap = 2; + + /// @notice Allowance amounts on behalf of others + mapping(address => mapping(address => uint96)) internal allowances; + + /// @notice Official record of token balances for each account + mapping(address => uint96) internal balances; + + /// @notice A record of each accounts delegate + mapping(address => address) public delegates; + + /// @notice A checkpoint for marking number of votes from a given block + struct Checkpoint { + uint32 fromBlock; + uint96 votes; + } + + /// @notice A record of votes checkpoints for each account, by index + mapping(address => mapping(uint32 => Checkpoint)) public checkpoints; + + /// @notice The number of checkpoints for each account + mapping(address => uint32) public numCheckpoints; + + /// @notice The EIP-712 typehash for the contract's domain + bytes32 public constant DOMAIN_TYPEHASH = + keccak256( + "EIP712Domain(string name,uint256 chainId,address verifyingContract)" + ); + + /// @notice The EIP-712 typehash for the delegation struct used by the contract + bytes32 public constant DELEGATION_TYPEHASH = + keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)"); + + /// @notice The EIP-712 typehash for the permit struct used by the contract + bytes32 public constant PERMIT_TYPEHASH = + keccak256( + "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" + ); + + /// @notice A record of states for signing / validating signatures + mapping(address => uint256) public nonces; + + /// @notice An event thats emitted when the minter address is changed + event MinterChanged(address minter, address newMinter); + + /// @notice An event thats emitted when an account changes its delegate + event DelegateChanged( + address indexed delegator, + address indexed fromDelegate, + address indexed toDelegate + ); + + /// @notice An event thats emitted when a delegate account's vote balance changes + event DelegateVotesChanged( + address indexed delegate, + uint256 previousBalance, + uint256 newBalance + ); + + /// @notice The standard EIP-20 transfer event + event Transfer(address indexed from, address indexed to, uint256 amount); + + /// @notice The standard EIP-20 approval event + event Approval( + address indexed owner, + address indexed spender, + uint256 amount + ); + + /** + * @notice Construct a new Uni token + * @param account The initial account to grant all the tokens + * @param minter_ The account with minting ability + * @param mintingAllowedAfter_ The timestamp after which minting may occur + */ + constructor( + address account, + address minter_, + uint256 mintingAllowedAfter_ + ) public { + require( + mintingAllowedAfter_ >= block.timestamp, + "Uni::constructor: minting can only begin after deployment" + ); + + balances[account] = uint96(totalSupply); + emit Transfer(address(0), account, totalSupply); + minter = minter_; + emit MinterChanged(address(0), minter); + mintingAllowedAfter = mintingAllowedAfter_; + } + + /** + * @notice Change the minter address + * @param minter_ The address of the new minter + */ + function setMinter(address minter_) external { + require( + msg.sender == minter, + "Uni::setMinter: only the minter can change the minter address" + ); + emit MinterChanged(minter, minter_); + minter = minter_; + } + + /** + * @notice Mint new tokens + * @param dst The address of the destination account + * @param rawAmount The number of tokens to be minted + */ + function mint(address dst, uint256 rawAmount) external { + require(msg.sender == minter, "Uni::mint: only the minter can mint"); + require( + block.timestamp >= mintingAllowedAfter, + "Uni::mint: minting not allowed yet" + ); + require( + dst != address(0), + "Uni::mint: cannot transfer to the zero address" + ); + + // record the mint + mintingAllowedAfter = SafeMath.add( + block.timestamp, + minimumTimeBetweenMints + ); + + // mint the amount + uint96 amount = safe96(rawAmount, "Uni::mint: amount exceeds 96 bits"); + require( + amount <= SafeMath.div(SafeMath.mul(totalSupply, mintCap), 100), + "Uni::mint: exceeded mint cap" + ); + totalSupply = safe96( + SafeMath.add(totalSupply, amount), + "Uni::mint: totalSupply exceeds 96 bits" + ); + + // transfer the amount to the recipient + balances[dst] = add96( + balances[dst], + amount, + "Uni::mint: transfer amount overflows" + ); + emit Transfer(address(0), dst, amount); + + // move delegates + _moveDelegates(address(0), delegates[dst], amount); + } + + /** + * @notice Get the number of tokens `spender` is approved to spend on behalf of `account` + * @param account The address of the account holding the funds + * @param spender The address of the account spending the funds + * @return The number of tokens approved + */ + function allowance(address account, address spender) + external + view + returns (uint256) + { + return allowances[account][spender]; + } + + /** + * @notice Approve `spender` to transfer up to `amount` from `src` + * @dev This will overwrite the approval amount for `spender` + * and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve) + * @param spender The address of the account which may transfer tokens + * @param rawAmount The number of tokens that are approved (2^256-1 means infinite) + * @return Whether or not the approval succeeded + */ + function approve(address spender, uint256 rawAmount) + external + returns (bool) + { + uint96 amount; + if (rawAmount == uint256(-1)) { + amount = uint96(-1); + } else { + amount = safe96(rawAmount, "Uni::approve: amount exceeds 96 bits"); + } + + allowances[msg.sender][spender] = amount; + + emit Approval(msg.sender, spender, amount); + return true; + } + + /** + * @notice Triggers an approval from owner to spends + * @param owner The address to approve from + * @param spender The address to be approved + * @param rawAmount The number of tokens that are approved (2^256-1 means infinite) + * @param deadline The time at which to expire the signature + * @param v The recovery byte of the signature + * @param r Half of the ECDSA signature pair + * @param s Half of the ECDSA signature pair + */ + function permit( + address owner, + address spender, + uint256 rawAmount, + uint256 deadline, + uint8 v, + bytes32 r, + bytes32 s + ) external { + uint96 amount; + if (rawAmount == uint256(-1)) { + amount = uint96(-1); + } else { + amount = safe96(rawAmount, "Uni::permit: amount exceeds 96 bits"); + } + + bytes32 domainSeparator = keccak256( + abi.encode( + DOMAIN_TYPEHASH, + keccak256(bytes(name)), + getChainId(), + address(this) + ) + ); + bytes32 structHash = keccak256( + abi.encode( + PERMIT_TYPEHASH, + owner, + spender, + rawAmount, + nonces[owner]++, + deadline + ) + ); + bytes32 digest = keccak256( + abi.encodePacked("\x19\x01", domainSeparator, structHash) + ); + address signatory = ecrecover(digest, v, r, s); + require(signatory != address(0), "Uni::permit: invalid signature"); + require(signatory == owner, "Uni::permit: unauthorized"); + require(now <= deadline, "Uni::permit: signature expired"); + + allowances[owner][spender] = amount; + + emit Approval(owner, spender, amount); + } + + /** + * @notice Get the number of tokens held by the `account` + * @param account The address of the account to get the balance of + * @return The number of tokens held + */ + function balanceOf(address account) external view returns (uint256) { + return balances[account]; + } + + /** + * @notice Transfer `amount` tokens from `msg.sender` to `dst` + * @param dst The address of the destination account + * @param rawAmount The number of tokens to transfer + * @return Whether or not the transfer succeeded + */ + function transfer(address dst, uint256 rawAmount) external returns (bool) { + uint96 amount = safe96( + rawAmount, + "Uni::transfer: amount exceeds 96 bits" + ); + _transferTokens(msg.sender, dst, amount); + return true; + } + + /** + * @notice Transfer `amount` tokens from `src` to `dst` + * @param src The address of the source account + * @param dst The address of the destination account + * @param rawAmount The number of tokens to transfer + * @return Whether or not the transfer succeeded + */ + function transferFrom( + address src, + address dst, + uint256 rawAmount + ) external returns (bool) { + address spender = msg.sender; + uint96 spenderAllowance = allowances[src][spender]; + uint96 amount = safe96( + rawAmount, + "Uni::approve: amount exceeds 96 bits" + ); + + if (spender != src && spenderAllowance != uint96(-1)) { + uint96 newAllowance = sub96( + spenderAllowance, + amount, + "Uni::transferFrom: transfer amount exceeds spender allowance" + ); + allowances[src][spender] = newAllowance; + + emit Approval(src, spender, newAllowance); + } + + _transferTokens(src, dst, amount); + return true; + } + + /** + * @notice Delegate votes from `msg.sender` to `delegatee` + * @param delegatee The address to delegate votes to + */ + function delegate(address delegatee) public { + return _delegate(msg.sender, delegatee); + } + + /** + * @notice Delegates votes from signatory to `delegatee` + * @param delegatee The address to delegate votes to + * @param nonce The contract state required to match the signature + * @param expiry The time at which to expire the signature + * @param v The recovery byte of the signature + * @param r Half of the ECDSA signature pair + * @param s Half of the ECDSA signature pair + */ + function delegateBySig( + address delegatee, + uint256 nonce, + uint256 expiry, + uint8 v, + bytes32 r, + bytes32 s + ) public { + bytes32 domainSeparator = keccak256( + abi.encode( + DOMAIN_TYPEHASH, + keccak256(bytes(name)), + getChainId(), + address(this) + ) + ); + bytes32 structHash = keccak256( + abi.encode(DELEGATION_TYPEHASH, delegatee, nonce, expiry) + ); + bytes32 digest = keccak256( + abi.encodePacked("\x19\x01", domainSeparator, structHash) + ); + address signatory = ecrecover(digest, v, r, s); + require( + signatory != address(0), + "Uni::delegateBySig: invalid signature" + ); + require( + nonce == nonces[signatory]++, + "Uni::delegateBySig: invalid nonce" + ); + require(now <= expiry, "Uni::delegateBySig: signature expired"); + return _delegate(signatory, delegatee); + } + + /** + * @notice Gets the current votes balance for `account` + * @param account The address to get votes balance + * @return The number of current votes for `account` + */ + function getCurrentVotes(address account) external view returns (uint96) { + uint32 nCheckpoints = numCheckpoints[account]; + return + nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0; + } + + /** + * @notice Determine the prior number of votes for an account as of a block number + * @dev Block number must be a finalized block or else this function will revert to prevent misinformation. + * @param account The address of the account to check + * @param blockNumber The block number to get the vote balance at + * @return The number of votes the account had as of the given block + */ + function getPriorVotes(address account, uint256 blockNumber) + public + view + returns (uint96) + { + require( + blockNumber < block.number, + "Uni::getPriorVotes: not yet determined" + ); + + uint32 nCheckpoints = numCheckpoints[account]; + if (nCheckpoints == 0) { + return 0; + } + + // First check most recent balance + if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) { + return checkpoints[account][nCheckpoints - 1].votes; + } + + // Next check implicit zero balance + if (checkpoints[account][0].fromBlock > blockNumber) { + return 0; + } + + uint32 lower = 0; + uint32 upper = nCheckpoints - 1; + while (upper > lower) { + uint32 center = upper - (upper - lower) / 2; // ceil, avoiding overflow + Checkpoint memory cp = checkpoints[account][center]; + if (cp.fromBlock == blockNumber) { + return cp.votes; + } else if (cp.fromBlock < blockNumber) { + lower = center; + } else { + upper = center - 1; + } + } + return checkpoints[account][lower].votes; + } + + function _delegate(address delegator, address delegatee) internal { + address currentDelegate = delegates[delegator]; + uint96 delegatorBalance = balances[delegator]; + delegates[delegator] = delegatee; + + emit DelegateChanged(delegator, currentDelegate, delegatee); + + _moveDelegates(currentDelegate, delegatee, delegatorBalance); + } + + function _transferTokens( + address src, + address dst, + uint96 amount + ) internal { + require( + src != address(0), + "Uni::_transferTokens: cannot transfer from the zero address" + ); + require( + dst != address(0), + "Uni::_transferTokens: cannot transfer to the zero address" + ); + + balances[src] = sub96( + balances[src], + amount, + "Uni::_transferTokens: transfer amount exceeds balance" + ); + balances[dst] = add96( + balances[dst], + amount, + "Uni::_transferTokens: transfer amount overflows" + ); + emit Transfer(src, dst, amount); + + _moveDelegates(delegates[src], delegates[dst], amount); + } + + function _moveDelegates( + address srcRep, + address dstRep, + uint96 amount + ) internal { + if (srcRep != dstRep && amount > 0) { + if (srcRep != address(0)) { + uint32 srcRepNum = numCheckpoints[srcRep]; + uint96 srcRepOld = srcRepNum > 0 + ? checkpoints[srcRep][srcRepNum - 1].votes + : 0; + uint96 srcRepNew = sub96( + srcRepOld, + amount, + "Uni::_moveVotes: vote amount underflows" + ); + _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew); + } + + if (dstRep != address(0)) { + uint32 dstRepNum = numCheckpoints[dstRep]; + uint96 dstRepOld = dstRepNum > 0 + ? checkpoints[dstRep][dstRepNum - 1].votes + : 0; + uint96 dstRepNew = add96( + dstRepOld, + amount, + "Uni::_moveVotes: vote amount overflows" + ); + _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew); + } + } + } + + function _writeCheckpoint( + address delegatee, + uint32 nCheckpoints, + uint96 oldVotes, + uint96 newVotes + ) internal { + uint32 blockNumber = safe32( + block.number, + "Uni::_writeCheckpoint: block number exceeds 32 bits" + ); + + if ( + nCheckpoints > 0 && + checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber + ) { + checkpoints[delegatee][nCheckpoints - 1].votes = newVotes; + } else { + checkpoints[delegatee][nCheckpoints] = Checkpoint( + blockNumber, + newVotes + ); + numCheckpoints[delegatee] = nCheckpoints + 1; + } + + emit DelegateVotesChanged(delegatee, oldVotes, newVotes); + } + + function safe32(uint256 n, string memory errorMessage) + internal + pure + returns (uint32) + { + require(n < 2**32, errorMessage); + return uint32(n); + } + + function safe96(uint256 n, string memory errorMessage) + internal + pure + returns (uint96) + { + require(n < 2**96, errorMessage); + return uint96(n); + } + + function add96( + uint96 a, + uint96 b, + string memory errorMessage + ) internal pure returns (uint96) { + uint96 c = a + b; + require(c >= a, errorMessage); + return c; + } + + function sub96( + uint96 a, + uint96 b, + string memory errorMessage + ) internal pure returns (uint96) { + require(b <= a, errorMessage); + return a - b; + } + + function getChainId() internal pure returns (uint256) { + uint256 chainId; + assembly { + chainId := chainid() + } + return chainId; + } +} diff --git a/deployment/deployment_v2-0/README.md b/deployment/deployment_v2-0/README.md index e34eb33ba..ec228caa9 100644 --- a/deployment/deployment_v2-0/README.md +++ b/deployment/deployment_v2-0/README.md @@ -33,6 +33,24 @@ To verify contracts run `npm run verify:PoE2_0:${network}`, for example: npm run verify:PoE2_0:goerli ``` +## deploy-parameters.json + +- `trustedSequencerURL`: string, trustedSequencer URL +- `forceBatchAllowed`: boolean, allow force batches +- `trustedSequencerAddress`: address, trusted sequencer addresss +- `realVerifier`: boolean, deploy or not a real verifier +- `chainID`: uint64, chainID +- `networkName`: string, networkName + +### Optional Parameters + +- `privateKey`: string, privateKey of the deployment +- `maxFeePerGas`:string, maxFeePerGas of all txs +- `maxPriorityFeePerGas`:string, maxPriorityFeePerGas of all txs +- `multiplierGas`: number, Gas multiplier. If maxFeePerGas and maxPriorityFeePerGas are set, will not take effect +- `trustedSequencerPvtKey`: string, Trusted sequencer pvtKey in order to approve the matic tokens +- `bridgeMock`:Boolean, Wheather the bridge will be mock or not ( the mock version has a ether limitation on deposits) + ## Notes - `gensis.json` has been generated using the tool: `https://github.com/0xPolygonHermez/zkevm-commonjs/blob/main/tools/fill-genesis/create-genesis.js` using as generator file: `genesis-gen.json` diff --git a/deployment/deployment_v2-0/deployPoE_v2-0.js b/deployment/deployment_v2-0/deployPoE_v2-0.js index f4f1ff3c7..66531ab44 100644 --- a/deployment/deployment_v2-0/deployPoE_v2-0.js +++ b/deployment/deployment_v2-0/deployPoE_v2-0.js @@ -48,8 +48,10 @@ async function main() { let deployer; if (deployParameters.privateKey) { deployer = new ethers.Wallet(deployParameters.privateKey, currentProvider); - } else { + } else if (process.env.MNEMONIC) { deployer = ethers.Wallet.fromMnemonic(process.env.MNEMONIC, 'm/44\'/60\'/0\'/0/0').connect(currentProvider); + } else { + [deployer] = (await ethers.getSigners()); } /* diff --git a/hardhat.config.js b/hardhat.config.js index 43a71f2c6..c8a92958a 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -33,6 +33,24 @@ module.exports = { runs: 999999 } } + }, + { + version: "0.5.12", + settings: { + optimizer: { + enabled: true, + runs: 999999 + } + } + }, + { + version: "0.5.16", + settings: { + optimizer: { + enabled: true, + runs: 999999 + } + } } ] }, diff --git a/src/permit-helper.js b/src/permit-helper.js index 8c5ef3194..d479b19c1 100644 --- a/src/permit-helper.js +++ b/src/permit-helper.js @@ -1,4 +1,4 @@ -const ethers = require('ethers'); +const { ethers } = require('hardhat'); const { expect } = require('chai'); /** @@ -51,12 +51,125 @@ async function createPermitSignature(tokenContractInstance, wallet, spenderAddre return signature; } + +/** + * Create a permit signature with the EIP-712 standar + * @param {Object} tokenContractInstance - EthersJS contract instance of the token + * @param {Object} wallet - EthersJs wallet instance that will sign the permit + * @param {String} spenderAddress - Spender address, usually the contract that the permit will interact with + * @param {String} value - Value of the permit + * @param {String} nonce - Nonce of the permit + * @param {String} expiry - expiry of the permit + * @returns {Object} - Signature obejct, { v, r, s} + */ +async function createPermitSignatureDaiType(tokenContractInstance, wallet, spenderAddress, nonce, expiry) { + const chainId = (await ethers.provider.getNetwork()).chainId + const name = await tokenContractInstance.name(); + const version = await tokenContractInstance.version(); + + // The domain + const domain = { + name, + version, + chainId, + verifyingContract: tokenContractInstance.address, + }; + + // The named list of all type definitions + const types = { + Permit: [ + { name: 'holder', type: 'address' }, + { name: 'spender', type: 'address' }, + { name: 'nonce', type: 'uint256' }, + { name: 'expiry', type: 'uint256' }, + { name: 'allowed', type: 'bool' }, + ], + }; + + // The data to sign + const values = { + holder: wallet.address, + spender: spenderAddress, + nonce, + expiry, + allowed: true + }; + + const rawSignature = await wallet._signTypedData(domain, types, values); + const signature = ethers.utils.splitSignature(rawSignature); + const recoveredAddressTyped = ethers.utils.verifyTypedData(domain, types, values, rawSignature); + + expect(recoveredAddressTyped).to.be.equal(wallet.address); + + return signature; +} + + + +/** + * Create a permit signature with the EIP-712 standar + * @param {Object} tokenContractInstance - EthersJS contract instance of the token + * @param {Object} wallet - EthersJs wallet instance that will sign the permit + * @param {String} spenderAddress - Spender address, usually the contract that the permit will interact with + * @param {String} value - Value of the permit + * @param {String} nonce - Nonce of the permit + * @param {String} deadline - Deadline of the permit + * @returns {Object} - Signature obejct, { v, r, s} + */ +async function createPermitSignatureUniType(tokenContractInstance, wallet, spenderAddress, value, nonce, deadline) { + const chainId = (await ethers.provider.getNetwork()).chainId + const name = await tokenContractInstance.name(); + + // The domain + const domain = { + name, + chainId, + verifyingContract: tokenContractInstance.address, + }; + + // The named list of all type definitions + const types = { + Permit: [ + { name: 'owner', type: 'address' }, + { name: 'spender', type: 'address' }, + { name: 'value', type: 'uint256' }, + { name: 'nonce', type: 'uint256' }, + { name: 'deadline', type: 'uint256' }, + ], + }; + + // The data to sign + const values = { + owner: wallet.address, + spender: spenderAddress, + value, + nonce, + deadline, + }; + + const rawSignature = await wallet._signTypedData(domain, types, values); + const signature = ethers.utils.splitSignature(rawSignature); + const recoveredAddressTyped = ethers.utils.verifyTypedData(domain, types, values, rawSignature); + expect(recoveredAddressTyped).to.be.equal(wallet.address); + + return signature; +} + + /** * Permit interface */ const ifacePermit = new ethers.utils.Interface(['function permit(address,address,uint256,uint256,uint8,bytes32,bytes32)']); +/** + * Permit interface DAI + */ +const ifacePermitDAI = new ethers.utils.Interface(['function permit(address,address,uint256,uint256,bool,uint8,bytes32,bytes32)']); + module.exports = { createPermitSignature, + createPermitSignatureDaiType, ifacePermit, + ifacePermitDAI, + createPermitSignatureUniType }; diff --git a/test/contracts/bridge.test.js b/test/contracts/bridge.test.js index 594656cb5..a2a6e6cd7 100644 --- a/test/contracts/bridge.test.js +++ b/test/contracts/bridge.test.js @@ -9,6 +9,9 @@ const { const { createPermitSignature, ifacePermit, + createPermitSignatureDaiType, + ifacePermitDAI, + createPermitSignatureUniType, } = require('../../src/permit-helper'); function calculateGlobalExitRoot(mainnetExitRoot, rollupExitRoot) { @@ -1162,4 +1165,198 @@ describe('Bridge Contract', () => { metadata, )).to.be.revertedWith('Bridge::claim: ALREADY_CLAIMED'); }); + it('should bridge with permit DAI type contracts', async () => { + const { chainId } = await ethers.provider.getNetwork(); + const daiTokenFactory = await ethers.getContractFactory('Dai'); + const daiContract = await daiTokenFactory.deploy( + chainId, + ); + await daiContract.deployed(); + await daiContract.mint(deployer.address, ethers.utils.parseEther('100')); + + const depositCount = await bridgeContract.depositCount(); + const originNetwork = networkIDMainnet; + const tokenAddress = daiContract.address; + const amount = ethers.utils.parseEther('10'); + const destinationNetwork = networkIDRollup; + const destinationAddress = deployer.address; + + const metadata = ethers.utils.defaultAbiCoder.encode( + ['string', 'string', 'uint8'], + [await daiContract.name(), await daiContract.symbol(), await daiContract.decimals()], + ); + const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); + + const balanceDeployer = await daiContract.balanceOf(deployer.address); + const balanceBridge = await daiContract.balanceOf(bridgeContract.address); + + const rollupExitRoot = await globalExitRootManager.lastRollupExitRoot(); + const lastGlobalExitRootNum = await globalExitRootManager.lastGlobalExitRootNum(); + + // pre compute root merkle tree in Js + const height = 32; + const merkleTree = new MerkleTreeBridge(height); + const leafValue = getLeafValue( + LEAF_TYPE_ASSET, + originNetwork, + tokenAddress, + destinationNetwork, + destinationAddress, + amount, + metadataHash, + ); + merkleTree.add(leafValue); + const rootJSMainnet = merkleTree.getRoot(); + + await expect(bridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x')) + .to.be.revertedWith('Dai/insufficient-allowance'); + + // user permit + const nonce = await daiContract.nonces(deployer.address); + const deadline = ethers.constants.MaxUint256; + const { v, r, s } = await createPermitSignatureDaiType( + daiContract, + deployer, + bridgeContract.address, + nonce, + deadline, + ); + const dataPermit = ifacePermitDAI.encodeFunctionData('permit', [ + deployer.address, + bridgeContract.address, + nonce, + deadline, + true, + v, + r, + s, + ]); + + await expect(bridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, dataPermit)) + .to.emit(bridgeContract, 'BridgeEvent') + .withArgs(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount) + .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') + .withArgs(lastGlobalExitRootNum + 1, rootJSMainnet, rollupExitRoot); + + expect(await daiContract.balanceOf(deployer.address)).to.be.equal(balanceDeployer.sub(amount)); + expect(await daiContract.balanceOf(bridgeContract.address)).to.be.equal(balanceBridge.add(amount)); + + // check merkle root with SC + const rootSCMainnet = await bridgeContract.getDepositRoot(); + expect(rootSCMainnet).to.be.equal(rootJSMainnet); + + // check merkle proof + const proof = merkleTree.getProofTreeByIndex(0); + const index = 0; + + // verify merkle proof + expect(verifyMerkleProof(leafValue, proof, index, rootSCMainnet)).to.be.equal(true); + expect(await bridgeContract.verifyMerkleProof( + leafValue, + proof, + index, + rootSCMainnet, + )).to.be.equal(true); + + const computedGlobalExitRoot = calculateGlobalExitRoot(rootJSMainnet, rollupExitRoot); + expect(computedGlobalExitRoot).to.be.equal(await globalExitRootManager.getLastGlobalExitRoot()); + }); + + it('should bridge with permit UNI type contracts', async () => { + const uniTokenFactory = await ethers.getContractFactory('Uni'); + const uniContract = await uniTokenFactory.deploy( + deployer.address, + deployer.address, + (await ethers.provider.getBlock()).timestamp + 1, + ); + await uniContract.deployed(); + await uniContract.mint(deployer.address, ethers.utils.parseEther('100')); + + const depositCount = await bridgeContract.depositCount(); + const originNetwork = networkIDMainnet; + const tokenAddress = uniContract.address; + const amount = ethers.utils.parseEther('10'); + const destinationNetwork = networkIDRollup; + const destinationAddress = deployer.address; + + const metadata = ethers.utils.defaultAbiCoder.encode( + ['string', 'string', 'uint8'], + [await uniContract.name(), await uniContract.symbol(), await uniContract.decimals()], + ); + const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); + + const balanceDeployer = await uniContract.balanceOf(deployer.address); + const balanceBridge = await uniContract.balanceOf(bridgeContract.address); + + const rollupExitRoot = await globalExitRootManager.lastRollupExitRoot(); + const lastGlobalExitRootNum = await globalExitRootManager.lastGlobalExitRootNum(); + + // pre compute root merkle tree in Js + const height = 32; + const merkleTree = new MerkleTreeBridge(height); + const leafValue = getLeafValue( + LEAF_TYPE_ASSET, + originNetwork, + tokenAddress, + destinationNetwork, + destinationAddress, + amount, + metadataHash, + ); + merkleTree.add(leafValue); + const rootJSMainnet = merkleTree.getRoot(); + + await expect(bridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x')) + .to.be.revertedWith('Uni::transferFrom: transfer amount exceeds spender allowance'); + + // user permit + const nonce = await uniContract.nonces(deployer.address); + const deadline = ethers.constants.MaxUint256; + const { v, r, s } = await createPermitSignatureUniType( + uniContract, + deployer, + bridgeContract.address, + amount, + nonce, + deadline, + ); + const dataPermit = ifacePermit.encodeFunctionData('permit', [ + deployer.address, + bridgeContract.address, + amount, + deadline, + v, + r, + s, + ]); + + await expect(bridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, dataPermit)) + .to.emit(bridgeContract, 'BridgeEvent') + .withArgs(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount) + .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') + .withArgs(lastGlobalExitRootNum + 1, rootJSMainnet, rollupExitRoot); + + expect(await uniContract.balanceOf(deployer.address)).to.be.equal(balanceDeployer.sub(amount)); + expect(await uniContract.balanceOf(bridgeContract.address)).to.be.equal(balanceBridge.add(amount)); + + // check merkle root with SC + const rootSCMainnet = await bridgeContract.getDepositRoot(); + expect(rootSCMainnet).to.be.equal(rootJSMainnet); + + // check merkle proof + const proof = merkleTree.getProofTreeByIndex(0); + const index = 0; + + // verify merkle proof + expect(verifyMerkleProof(leafValue, proof, index, rootSCMainnet)).to.be.equal(true); + expect(await bridgeContract.verifyMerkleProof( + leafValue, + proof, + index, + rootSCMainnet, + )).to.be.equal(true); + + const computedGlobalExitRoot = calculateGlobalExitRoot(rootJSMainnet, rollupExitRoot); + expect(computedGlobalExitRoot).to.be.equal(await globalExitRootManager.getLastGlobalExitRoot()); + }); }); From d9a422acf97523e40110e489f1a4d2bc3367e251 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Tue, 8 Nov 2022 19:01:58 +0100 Subject: [PATCH 14/71] small refactor --- compiled-contracts/ERC20PermitMock.json | 17 +- contracts/mocks/ERC20PermitMock.sol | 13 + test/contracts/bridge.permit.test.js | 350 ++++++++++++++++++++++++ test/contracts/bridge.test.js | 288 ------------------- 4 files changed, 378 insertions(+), 290 deletions(-) create mode 100644 test/contracts/bridge.permit.test.js diff --git a/compiled-contracts/ERC20PermitMock.json b/compiled-contracts/ERC20PermitMock.json index 9e5ff27c7..6459c9aec 100644 --- a/compiled-contracts/ERC20PermitMock.json +++ b/compiled-contracts/ERC20PermitMock.json @@ -79,6 +79,19 @@ "name": "Transfer", "type": "event" }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "EIP712DOMAIN_HASH", @@ -504,8 +517,8 @@ "type": "function" } ], - "bytecode": "0x6080604052604051620019323803806200193283398101604081905262000026916200022b565b838360036200003683826200034c565b5060046200004582826200034c565b5050506200005a82826200007160201b60201c565b50508151602090920191909120600655506200043f565b6001600160a01b038216620000cc5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620000e0919062000418565b90915550506001600160a01b038216600090815260208190526040812080548392906200010f90849062000418565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200018657600080fd5b81516001600160401b0380821115620001a357620001a36200015e565b604051601f8301601f19908116603f01168101908282118183101715620001ce57620001ce6200015e565b81604052838152602092508683858801011115620001eb57600080fd5b600091505b838210156200020f5785820183015181830184015290820190620001f0565b83821115620002215760008385830101525b9695505050505050565b600080600080608085870312156200024257600080fd5b84516001600160401b03808211156200025a57600080fd5b620002688883890162000174565b955060208701519150808211156200027f57600080fd5b506200028e8782880162000174565b604087015190945090506001600160a01b0381168114620002ae57600080fd5b6060959095015193969295505050565b600181811c90821680620002d357607f821691505b602082108103620002f457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200015957600081815260208120601f850160051c81016020861015620003235750805b601f850160051c820191505b8181101562000344578281556001016200032f565b505050505050565b81516001600160401b038111156200036857620003686200015e565b6200038081620003798454620002be565b84620002fa565b602080601f831160018114620003b857600084156200039f5750858301515b600019600386901b1c1916600185901b17855562000344565b600085815260208120601f198616915b82811015620003e957888601518255948401946001909101908401620003c8565b5085821015620004085787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156200043a57634e487b7160e01b600052601160045260246000fd5b500190565b6114e3806200044f6000396000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c806342966c68116100d85780639e4e73181161008c578063c473af3311610066578063c473af331461033e578063d505accf14610365578063dd62ed3e1461037857600080fd5b80639e4e7318146102f1578063a457c2d714610318578063a9059cbb1461032b57600080fd5b806370a08231116100bd57806370a08231146102935780637ecebe00146102c957806395d89b41146102e957600080fd5b806342966c681461026d57806356189cb41461028057600080fd5b806323b872dd1161013a5780633408e470116101145780633408e47014610241578063395093511461024757806340c10f191461025a57600080fd5b806323b872dd146101f857806330adf81f1461020b578063313ce5671461023257600080fd5b8063095ea7b31161016b578063095ea7b3146101b857806318160ddd146101db578063222f5be0146101e357600080fd5b806304622c2e1461018757806306fdde03146101a3575b600080fd5b61019060065481565b6040519081526020015b60405180910390f35b6101ab6103be565b60405161019a91906111e1565b6101cb6101c636600461127d565b610450565b604051901515815260200161019a565b600254610190565b6101f66101f13660046112a7565b610468565b005b6101cb6102063660046112a7565b610478565b6101907f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6040516012815260200161019a565b46610190565b6101cb61025536600461127d565b61049c565b6101f661026836600461127d565b6104e8565b6101f661027b3660046112e3565b6104f6565b6101f661028e3660046112a7565b610503565b6101906102a13660046112fc565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101906102d73660046112fc565b60056020526000908152604090205481565b6101ab61050e565b6101907fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc681565b6101cb61032636600461127d565b61051d565b6101cb61033936600461127d565b6105f3565b6101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101f661037336600461131e565b610601565b610190610386366004611391565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546103cd906113c4565b80601f01602080910402602001604051908101604052809291908181526020018280546103f9906113c4565b80156104465780601f1061041b57610100808354040283529160200191610446565b820191906000526020600020905b81548152906001019060200180831161042957829003601f168201915b5050505050905090565b60003361045e818585610748565b5060019392505050565b6104738383836108fb565b505050565b600033610486858285610bb0565b6104918585856108fb565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061045e90829086906104e3908790611446565b610748565b6104f28282610c81565b5050565b6105003382610da1565b50565b610473838383610748565b6060600480546103cd906113c4565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156105e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6104918286868403610748565b60003361045e8185856108fb565b4284101561066b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f48455a3a3a7065726d69743a20415554485f455850495245440000000000000060448201526064016105dd565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260056020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866106c58361145e565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506107338882868686610f8e565b61073e888888610748565b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166107ea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016105dd565b73ffffffffffffffffffffffffffffffffffffffff821661088d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016105dd565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff831661099e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016105dd565b73ffffffffffffffffffffffffffffffffffffffff8216610a41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016105dd565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610af7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016105dd565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610b3b908490611446565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ba191815260200190565b60405180910390a35b50505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610baa5781811015610c74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016105dd565b610baa8484848403610748565b73ffffffffffffffffffffffffffffffffffffffff8216610cfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016105dd565b8060026000828254610d109190611446565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610d4a908490611446565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8216610e44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016105dd565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610efa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016105dd565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610f36908490611496565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600654604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f602080830191909152818301939093527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528251808303909101815260c08201909252815191909201207f190100000000000000000000000000000000000000000000000000000000000060e083015260e2820181905261010282018690529060009061012201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156110da573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81161580159061115557508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b61073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f48455a3a3a5f76616c69646174655369676e6564446174613a20494e56414c4960448201527f445f5349474e415455524500000000000000000000000000000000000000000060648201526084016105dd565b600060208083528351808285015260005b8181101561120e578581018301518582016040015282016111f2565b81811115611220576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461127857600080fd5b919050565b6000806040838503121561129057600080fd5b61129983611254565b946020939093013593505050565b6000806000606084860312156112bc57600080fd5b6112c584611254565b92506112d360208501611254565b9150604084013590509250925092565b6000602082840312156112f557600080fd5b5035919050565b60006020828403121561130e57600080fd5b61131782611254565b9392505050565b600080600080600080600060e0888a03121561133957600080fd5b61134288611254565b965061135060208901611254565b95506040880135945060608801359350608088013560ff8116811461137457600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156113a457600080fd5b6113ad83611254565b91506113bb60208401611254565b90509250929050565b600181811c908216806113d857607f821691505b602082108103611411577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561145957611459611417565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361148f5761148f611417565b5060010190565b6000828210156114a8576114a8611417565b50039056fea26469706673582212203ef8967fc0a0cf6f36f4a204db93aa36afb7f0d36a7d09f746ac161e8713bd6464736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101825760003560e01c806342966c68116100d85780639e4e73181161008c578063c473af3311610066578063c473af331461033e578063d505accf14610365578063dd62ed3e1461037857600080fd5b80639e4e7318146102f1578063a457c2d714610318578063a9059cbb1461032b57600080fd5b806370a08231116100bd57806370a08231146102935780637ecebe00146102c957806395d89b41146102e957600080fd5b806342966c681461026d57806356189cb41461028057600080fd5b806323b872dd1161013a5780633408e470116101145780633408e47014610241578063395093511461024757806340c10f191461025a57600080fd5b806323b872dd146101f857806330adf81f1461020b578063313ce5671461023257600080fd5b8063095ea7b31161016b578063095ea7b3146101b857806318160ddd146101db578063222f5be0146101e357600080fd5b806304622c2e1461018757806306fdde03146101a3575b600080fd5b61019060065481565b6040519081526020015b60405180910390f35b6101ab6103be565b60405161019a91906111e1565b6101cb6101c636600461127d565b610450565b604051901515815260200161019a565b600254610190565b6101f66101f13660046112a7565b610468565b005b6101cb6102063660046112a7565b610478565b6101907f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6040516012815260200161019a565b46610190565b6101cb61025536600461127d565b61049c565b6101f661026836600461127d565b6104e8565b6101f661027b3660046112e3565b6104f6565b6101f661028e3660046112a7565b610503565b6101906102a13660046112fc565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101906102d73660046112fc565b60056020526000908152604090205481565b6101ab61050e565b6101907fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc681565b6101cb61032636600461127d565b61051d565b6101cb61033936600461127d565b6105f3565b6101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101f661037336600461131e565b610601565b610190610386366004611391565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546103cd906113c4565b80601f01602080910402602001604051908101604052809291908181526020018280546103f9906113c4565b80156104465780601f1061041b57610100808354040283529160200191610446565b820191906000526020600020905b81548152906001019060200180831161042957829003601f168201915b5050505050905090565b60003361045e818585610748565b5060019392505050565b6104738383836108fb565b505050565b600033610486858285610bb0565b6104918585856108fb565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061045e90829086906104e3908790611446565b610748565b6104f28282610c81565b5050565b6105003382610da1565b50565b610473838383610748565b6060600480546103cd906113c4565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156105e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6104918286868403610748565b60003361045e8185856108fb565b4284101561066b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f48455a3a3a7065726d69743a20415554485f455850495245440000000000000060448201526064016105dd565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260056020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866106c58361145e565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506107338882868686610f8e565b61073e888888610748565b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166107ea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016105dd565b73ffffffffffffffffffffffffffffffffffffffff821661088d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016105dd565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff831661099e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016105dd565b73ffffffffffffffffffffffffffffffffffffffff8216610a41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016105dd565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610af7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016105dd565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610b3b908490611446565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ba191815260200190565b60405180910390a35b50505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610baa5781811015610c74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016105dd565b610baa8484848403610748565b73ffffffffffffffffffffffffffffffffffffffff8216610cfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016105dd565b8060026000828254610d109190611446565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610d4a908490611446565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8216610e44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016105dd565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610efa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016105dd565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610f36908490611496565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600654604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f602080830191909152818301939093527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528251808303909101815260c08201909252815191909201207f190100000000000000000000000000000000000000000000000000000000000060e083015260e2820181905261010282018690529060009061012201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156110da573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81161580159061115557508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b61073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f48455a3a3a5f76616c69646174655369676e6564446174613a20494e56414c4960448201527f445f5349474e415455524500000000000000000000000000000000000000000060648201526084016105dd565b600060208083528351808285015260005b8181101561120e578581018301518582016040015282016111f2565b81811115611220576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461127857600080fd5b919050565b6000806040838503121561129057600080fd5b61129983611254565b946020939093013593505050565b6000806000606084860312156112bc57600080fd5b6112c584611254565b92506112d360208501611254565b9150604084013590509250925092565b6000602082840312156112f557600080fd5b5035919050565b60006020828403121561130e57600080fd5b61131782611254565b9392505050565b600080600080600080600060e0888a03121561133957600080fd5b61134288611254565b965061135060208901611254565b95506040880135945060608801359350608088013560ff8116811461137457600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156113a457600080fd5b6113ad83611254565b91506113bb60208401611254565b90509250929050565b600181811c908216806113d857607f821691505b602082108103611411577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561145957611459611417565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361148f5761148f611417565b5060010190565b6000828210156114a8576114a8611417565b50039056fea26469706673582212203ef8967fc0a0cf6f36f4a204db93aa36afb7f0d36a7d09f746ac161e8713bd6464736f6c634300080f0033", + "bytecode": "0x6080604052604051620019ca380380620019ca83398101604081905262000026916200022b565b838360036200003683826200034c565b5060046200004582826200034c565b5050506200005a82826200007160201b60201c565b50508151602090920191909120600655506200043f565b6001600160a01b038216620000cc5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620000e0919062000418565b90915550506001600160a01b038216600090815260208190526040812080548392906200010f90849062000418565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200018657600080fd5b81516001600160401b0380821115620001a357620001a36200015e565b604051601f8301601f19908116603f01168101908282118183101715620001ce57620001ce6200015e565b81604052838152602092508683858801011115620001eb57600080fd5b600091505b838210156200020f5785820183015181830184015290820190620001f0565b83821115620002215760008385830101525b9695505050505050565b600080600080608085870312156200024257600080fd5b84516001600160401b03808211156200025a57600080fd5b620002688883890162000174565b955060208701519150808211156200027f57600080fd5b506200028e8782880162000174565b604087015190945090506001600160a01b0381168114620002ae57600080fd5b6060959095015193969295505050565b600181811c90821680620002d357607f821691505b602082108103620002f457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200015957600081815260208120601f850160051c81016020861015620003235750805b601f850160051c820191505b8181101562000344578281556001016200032f565b505050505050565b81516001600160401b038111156200036857620003686200015e565b6200038081620003798454620002be565b84620002fa565b602080601f831160018114620003b857600084156200039f5750858301515b600019600386901b1c1916600185901b17855562000344565b600085815260208120601f198616915b82811015620003e957888601518255948401946001909101908401620003c8565b5085821015620004085787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156200043a57634e487b7160e01b600052601160045260246000fd5b500190565b61157b806200044f6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806340c10f19116100e35780639e4e73181161008c578063c473af3311610066578063c473af33146103d6578063d505accf146103fd578063dd62ed3e1461041057600080fd5b80639e4e731814610389578063a457c2d7146103b0578063a9059cbb146103c357600080fd5b806370a08231116100bd57806370a082311461032b5780637ecebe001461036157806395d89b411461038157600080fd5b806340c10f19146102f257806342966c681461030557806356189cb41461031857600080fd5b806323b872dd116101455780633408e4701161011f5780633408e4701461024c5780633644e5151461025257806339509351146102df57600080fd5b806323b872dd1461020357806330adf81f14610216578063313ce5671461023d57600080fd5b8063095ea7b311610176578063095ea7b3146101c357806318160ddd146101e6578063222f5be0146101ee57600080fd5b806304622c2e1461019257806306fdde03146101ae575b600080fd5b61019b60065481565b6040519081526020015b60405180910390f35b6101b6610456565b6040516101a59190611279565b6101d66101d1366004611315565b6104e8565b60405190151581526020016101a5565b60025461019b565b6102016101fc36600461133f565b610500565b005b6101d661021136600461133f565b610510565b61019b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b604051601281526020016101a5565b4661019b565b61019b6006546000907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f907fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc646604080516020810195909552840192909252606083015260808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6101d66102ed366004611315565b610534565b610201610300366004611315565b610580565b61020161031336600461137b565b61058e565b61020161032636600461133f565b61059b565b61019b610339366004611394565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b61019b61036f366004611394565b60056020526000908152604090205481565b6101b66105a6565b61019b7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc681565b6101d66103be366004611315565b6105b5565b6101d66103d1366004611315565b61068b565b61019b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61020161040b3660046113b6565b610699565b61019b61041e366004611429565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546104659061145c565b80601f01602080910402602001604051908101604052809291908181526020018280546104919061145c565b80156104de5780601f106104b3576101008083540402835291602001916104de565b820191906000526020600020905b8154815290600101906020018083116104c157829003601f168201915b5050505050905090565b6000336104f68185856107e0565b5060019392505050565b61050b838383610993565b505050565b60003361051e858285610c48565b610529858585610993565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104f6908290869061057b9087906114de565b6107e0565b61058a8282610d19565b5050565b6105983382610e39565b50565b61050b8383836107e0565b6060600480546104659061145c565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091908381101561067e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61052982868684036107e0565b6000336104f6818585610993565b42841015610703576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f48455a3a3a7065726d69743a20415554485f45585049524544000000000000006044820152606401610675565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260056020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661075d836114f6565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506107cb8882868686611026565b6107d68888886107e0565b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610882576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610675565b73ffffffffffffffffffffffffffffffffffffffff8216610925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610675565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610a36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610675565b73ffffffffffffffffffffffffffffffffffffffff8216610ad9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610675565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610b8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610675565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610bd39084906114de565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c3991815260200190565b60405180910390a35b50505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610c425781811015610d0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610675565b610c4284848484036107e0565b73ffffffffffffffffffffffffffffffffffffffff8216610d96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610675565b8060026000828254610da891906114de565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610de29084906114de565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8216610edc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610675565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610f92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610675565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610fce90849061152e565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600654604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f602080830191909152818301939093527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528251808303909101815260c08201909252815191909201207f190100000000000000000000000000000000000000000000000000000000000060e083015260e2820181905261010282018690529060009061012201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015611172573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116158015906111ed57508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6107d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f48455a3a3a5f76616c69646174655369676e6564446174613a20494e56414c4960448201527f445f5349474e41545552450000000000000000000000000000000000000000006064820152608401610675565b600060208083528351808285015260005b818110156112a65785810183015185820160400152820161128a565b818111156112b8576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461131057600080fd5b919050565b6000806040838503121561132857600080fd5b611331836112ec565b946020939093013593505050565b60008060006060848603121561135457600080fd5b61135d846112ec565b925061136b602085016112ec565b9150604084013590509250925092565b60006020828403121561138d57600080fd5b5035919050565b6000602082840312156113a657600080fd5b6113af826112ec565b9392505050565b600080600080600080600060e0888a0312156113d157600080fd5b6113da886112ec565b96506113e8602089016112ec565b95506040880135945060608801359350608088013560ff8116811461140c57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561143c57600080fd5b611445836112ec565b9150611453602084016112ec565b90509250929050565b600181811c9082168061147057607f821691505b6020821081036114a9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156114f1576114f16114af565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611527576115276114af565b5060010190565b600082821015611540576115406114af565b50039056fea2646970667358221220b4ef9d6d69b2f9cc14de05689f71f20ae178454360aaddeb70ecdfdeb02cada964736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061018d5760003560e01c806340c10f19116100e35780639e4e73181161008c578063c473af3311610066578063c473af33146103d6578063d505accf146103fd578063dd62ed3e1461041057600080fd5b80639e4e731814610389578063a457c2d7146103b0578063a9059cbb146103c357600080fd5b806370a08231116100bd57806370a082311461032b5780637ecebe001461036157806395d89b411461038157600080fd5b806340c10f19146102f257806342966c681461030557806356189cb41461031857600080fd5b806323b872dd116101455780633408e4701161011f5780633408e4701461024c5780633644e5151461025257806339509351146102df57600080fd5b806323b872dd1461020357806330adf81f14610216578063313ce5671461023d57600080fd5b8063095ea7b311610176578063095ea7b3146101c357806318160ddd146101e6578063222f5be0146101ee57600080fd5b806304622c2e1461019257806306fdde03146101ae575b600080fd5b61019b60065481565b6040519081526020015b60405180910390f35b6101b6610456565b6040516101a59190611279565b6101d66101d1366004611315565b6104e8565b60405190151581526020016101a5565b60025461019b565b6102016101fc36600461133f565b610500565b005b6101d661021136600461133f565b610510565b61019b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b604051601281526020016101a5565b4661019b565b61019b6006546000907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f907fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc646604080516020810195909552840192909252606083015260808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6101d66102ed366004611315565b610534565b610201610300366004611315565b610580565b61020161031336600461137b565b61058e565b61020161032636600461133f565b61059b565b61019b610339366004611394565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b61019b61036f366004611394565b60056020526000908152604090205481565b6101b66105a6565b61019b7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc681565b6101d66103be366004611315565b6105b5565b6101d66103d1366004611315565b61068b565b61019b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61020161040b3660046113b6565b610699565b61019b61041e366004611429565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546104659061145c565b80601f01602080910402602001604051908101604052809291908181526020018280546104919061145c565b80156104de5780601f106104b3576101008083540402835291602001916104de565b820191906000526020600020905b8154815290600101906020018083116104c157829003601f168201915b5050505050905090565b6000336104f68185856107e0565b5060019392505050565b61050b838383610993565b505050565b60003361051e858285610c48565b610529858585610993565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104f6908290869061057b9087906114de565b6107e0565b61058a8282610d19565b5050565b6105983382610e39565b50565b61050b8383836107e0565b6060600480546104659061145c565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091908381101561067e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61052982868684036107e0565b6000336104f6818585610993565b42841015610703576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f48455a3a3a7065726d69743a20415554485f45585049524544000000000000006044820152606401610675565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260056020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661075d836114f6565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506107cb8882868686611026565b6107d68888886107e0565b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610882576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610675565b73ffffffffffffffffffffffffffffffffffffffff8216610925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610675565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610a36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610675565b73ffffffffffffffffffffffffffffffffffffffff8216610ad9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610675565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610b8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610675565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610bd39084906114de565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c3991815260200190565b60405180910390a35b50505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610c425781811015610d0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610675565b610c4284848484036107e0565b73ffffffffffffffffffffffffffffffffffffffff8216610d96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610675565b8060026000828254610da891906114de565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610de29084906114de565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8216610edc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610675565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610f92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610675565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610fce90849061152e565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600654604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f602080830191909152818301939093527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528251808303909101815260c08201909252815191909201207f190100000000000000000000000000000000000000000000000000000000000060e083015260e2820181905261010282018690529060009061012201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015611172573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116158015906111ed57508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6107d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f48455a3a3a5f76616c69646174655369676e6564446174613a20494e56414c4960448201527f445f5349474e41545552450000000000000000000000000000000000000000006064820152608401610675565b600060208083528351808285015260005b818110156112a65785810183015185820160400152820161128a565b818111156112b8576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461131057600080fd5b919050565b6000806040838503121561132857600080fd5b611331836112ec565b946020939093013593505050565b60008060006060848603121561135457600080fd5b61135d846112ec565b925061136b602085016112ec565b9150604084013590509250925092565b60006020828403121561138d57600080fd5b5035919050565b6000602082840312156113a657600080fd5b6113af826112ec565b9392505050565b600080600080600080600060e0888a0312156113d157600080fd5b6113da886112ec565b96506113e8602089016112ec565b95506040880135945060608801359350608088013560ff8116811461140c57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561143c57600080fd5b611445836112ec565b9150611453602084016112ec565b90509250929050565b600181811c9082168061147057607f821691505b6020821081036114a9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156114f1576114f16114af565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611527576115276114af565b5060010190565b600082821015611540576115406114af565b50039056fea2646970667358221220b4ef9d6d69b2f9cc14de05689f71f20ae178454360aaddeb70ecdfdeb02cada964736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/mocks/ERC20PermitMock.sol b/contracts/mocks/ERC20PermitMock.sol index c04f2749b..6297ae9ab 100644 --- a/contracts/mocks/ERC20PermitMock.sol +++ b/contracts/mocks/ERC20PermitMock.sol @@ -116,4 +116,17 @@ contract ERC20PermitMock is ERC20 { _validateSignedData(owner, encodeData, v, r, s); _approve(owner, spender, value); } + + function DOMAIN_SEPARATOR() external view returns (bytes32) { + return + keccak256( + abi.encode( + EIP712DOMAIN_HASH, + NAME_HASH, + VERSION_HASH, + getChainId(), + address(this) + ) + ); + } } diff --git a/test/contracts/bridge.permit.test.js b/test/contracts/bridge.permit.test.js new file mode 100644 index 000000000..5482b3bbd --- /dev/null +++ b/test/contracts/bridge.permit.test.js @@ -0,0 +1,350 @@ +const { expect } = require('chai'); +const { ethers, upgrades } = require('hardhat'); +const MerkleTreeBridge = require('@0xpolygonhermez/zkevm-commonjs').MTBridge; +const { + verifyMerkleProof, + getLeafValue, +} = require('@0xpolygonhermez/zkevm-commonjs').mtBridgeUtils; + +const { + createPermitSignature, + ifacePermit, + createPermitSignatureDaiType, + ifacePermitDAI, + createPermitSignatureUniType, +} = require('../../src/permit-helper'); + +function calculateGlobalExitRoot(mainnetExitRoot, rollupExitRoot) { + return ethers.utils.solidityKeccak256(['bytes32', 'bytes32'], [mainnetExitRoot, rollupExitRoot]); +} + +describe('Bridge Contract', () => { + let deployer; + let rollup; + + let globalExitRootManager; + let bridgeContract; + let tokenContract; + + const tokenName = 'Matic Token'; + const tokenSymbol = 'MATIC'; + const decimals = 18; + const tokenInitialBalance = ethers.utils.parseEther('20000000'); + const metadataToken = ethers.utils.defaultAbiCoder.encode( + ['string', 'string', 'uint8'], + [tokenName, tokenSymbol, decimals], + ); + + const networkIDMainnet = 0; + const networkIDRollup = 1; + + const LEAF_TYPE_ASSET = 0; + + beforeEach('Deploy contracts', async () => { + // load signers + [deployer, rollup] = await ethers.getSigners(); + + // deploy global exit root manager + const globalExitRootManagerFactory = await ethers.getContractFactory('GlobalExitRootManager'); + globalExitRootManager = await upgrades.deployProxy(globalExitRootManagerFactory, [], { initializer: false }); + + // deploy bridge + const bridgeFactory = await ethers.getContractFactory('Bridge'); + bridgeContract = await upgrades.deployProxy(bridgeFactory, [], { initializer: false }); + + await globalExitRootManager.initialize(rollup.address, bridgeContract.address); + await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address); + + // deploy token + const maticTokenFactory = await ethers.getContractFactory('ERC20PermitMock'); + tokenContract = await maticTokenFactory.deploy( + tokenName, + tokenSymbol, + deployer.address, + tokenInitialBalance, + ); + await tokenContract.deployed(); + }); + + it('should bridge and with permit eip-2612 compilant', async () => { + const depositCount = await bridgeContract.depositCount(); + const originNetwork = networkIDMainnet; + const tokenAddress = tokenContract.address; + const amount = ethers.utils.parseEther('10'); + const destinationNetwork = networkIDRollup; + const destinationAddress = deployer.address; + + const metadata = metadataToken; + const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); + + const balanceDeployer = await tokenContract.balanceOf(deployer.address); + const balanceBridge = await tokenContract.balanceOf(bridgeContract.address); + + const rollupExitRoot = await globalExitRootManager.lastRollupExitRoot(); + const lastGlobalExitRootNum = await globalExitRootManager.lastGlobalExitRootNum(); + + // pre compute root merkle tree in Js + const height = 32; + const merkleTree = new MerkleTreeBridge(height); + const leafValue = getLeafValue( + LEAF_TYPE_ASSET, + originNetwork, + tokenAddress, + destinationNetwork, + destinationAddress, + amount, + metadataHash, + ); + merkleTree.add(leafValue); + const rootJSMainnet = merkleTree.getRoot(); + + await expect(bridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x')) + .to.be.revertedWith('ERC20: insufficient allowance'); + + // user permit + const nonce = await tokenContract.nonces(deployer.address); + const deadline = ethers.constants.MaxUint256; + const { v, r, s } = await createPermitSignature( + tokenContract, + deployer, + bridgeContract.address, + amount, + nonce, + deadline, + ); + + const dataPermit = ifacePermit.encodeFunctionData('permit', [ + deployer.address, + bridgeContract.address, + amount, + deadline, + v, + r, + s, + ]); + + await expect(bridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, dataPermit)) + .to.emit(bridgeContract, 'BridgeEvent') + .withArgs(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount) + .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') + .withArgs(lastGlobalExitRootNum + 1, rootJSMainnet, rollupExitRoot); + + expect(await tokenContract.balanceOf(deployer.address)).to.be.equal(balanceDeployer.sub(amount)); + expect(await tokenContract.balanceOf(bridgeContract.address)).to.be.equal(balanceBridge.add(amount)); + + // check merkle root with SC + const rootSCMainnet = await bridgeContract.getDepositRoot(); + expect(rootSCMainnet).to.be.equal(rootJSMainnet); + + // check merkle proof + const proof = merkleTree.getProofTreeByIndex(0); + const index = 0; + + // verify merkle proof + expect(verifyMerkleProof(leafValue, proof, index, rootSCMainnet)).to.be.equal(true); + expect(await bridgeContract.verifyMerkleProof( + leafValue, + proof, + index, + rootSCMainnet, + )).to.be.equal(true); + + const computedGlobalExitRoot = calculateGlobalExitRoot(rootJSMainnet, rollupExitRoot); + expect(computedGlobalExitRoot).to.be.equal(await globalExitRootManager.getLastGlobalExitRoot()); + }); + + it('should bridge with permit DAI type contracts', async () => { + const { chainId } = await ethers.provider.getNetwork(); + const daiTokenFactory = await ethers.getContractFactory('Dai'); + const daiContract = await daiTokenFactory.deploy( + chainId, + ); + await daiContract.deployed(); + await daiContract.mint(deployer.address, ethers.utils.parseEther('100')); + + const depositCount = await bridgeContract.depositCount(); + const originNetwork = networkIDMainnet; + const tokenAddress = daiContract.address; + const amount = ethers.utils.parseEther('10'); + const destinationNetwork = networkIDRollup; + const destinationAddress = deployer.address; + + const metadata = ethers.utils.defaultAbiCoder.encode( + ['string', 'string', 'uint8'], + [await daiContract.name(), await daiContract.symbol(), await daiContract.decimals()], + ); + const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); + + const balanceDeployer = await daiContract.balanceOf(deployer.address); + const balanceBridge = await daiContract.balanceOf(bridgeContract.address); + + const rollupExitRoot = await globalExitRootManager.lastRollupExitRoot(); + const lastGlobalExitRootNum = await globalExitRootManager.lastGlobalExitRootNum(); + + // pre compute root merkle tree in Js + const height = 32; + const merkleTree = new MerkleTreeBridge(height); + const leafValue = getLeafValue( + LEAF_TYPE_ASSET, + originNetwork, + tokenAddress, + destinationNetwork, + destinationAddress, + amount, + metadataHash, + ); + merkleTree.add(leafValue); + const rootJSMainnet = merkleTree.getRoot(); + + await expect(bridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x')) + .to.be.revertedWith('Dai/insufficient-allowance'); + + // user permit + const nonce = await daiContract.nonces(deployer.address); + const deadline = ethers.constants.MaxUint256; + const { v, r, s } = await createPermitSignatureDaiType( + daiContract, + deployer, + bridgeContract.address, + nonce, + deadline, + ); + const dataPermit = ifacePermitDAI.encodeFunctionData('permit', [ + deployer.address, + bridgeContract.address, + nonce, + deadline, + true, + v, + r, + s, + ]); + + await expect(bridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, dataPermit)) + .to.emit(bridgeContract, 'BridgeEvent') + .withArgs(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount) + .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') + .withArgs(lastGlobalExitRootNum + 1, rootJSMainnet, rollupExitRoot); + + expect(await daiContract.balanceOf(deployer.address)).to.be.equal(balanceDeployer.sub(amount)); + expect(await daiContract.balanceOf(bridgeContract.address)).to.be.equal(balanceBridge.add(amount)); + + // check merkle root with SC + const rootSCMainnet = await bridgeContract.getDepositRoot(); + expect(rootSCMainnet).to.be.equal(rootJSMainnet); + + // check merkle proof + const proof = merkleTree.getProofTreeByIndex(0); + const index = 0; + + // verify merkle proof + expect(verifyMerkleProof(leafValue, proof, index, rootSCMainnet)).to.be.equal(true); + expect(await bridgeContract.verifyMerkleProof( + leafValue, + proof, + index, + rootSCMainnet, + )).to.be.equal(true); + + const computedGlobalExitRoot = calculateGlobalExitRoot(rootJSMainnet, rollupExitRoot); + expect(computedGlobalExitRoot).to.be.equal(await globalExitRootManager.getLastGlobalExitRoot()); + }); + + it('should bridge with permit UNI type contracts', async () => { + const uniTokenFactory = await ethers.getContractFactory('Uni'); + const uniContract = await uniTokenFactory.deploy( + deployer.address, + deployer.address, + (await ethers.provider.getBlock()).timestamp + 1, + ); + await uniContract.deployed(); + await uniContract.mint(deployer.address, ethers.utils.parseEther('100')); + + const depositCount = await bridgeContract.depositCount(); + const originNetwork = networkIDMainnet; + const tokenAddress = uniContract.address; + const amount = ethers.utils.parseEther('10'); + const destinationNetwork = networkIDRollup; + const destinationAddress = deployer.address; + + const metadata = ethers.utils.defaultAbiCoder.encode( + ['string', 'string', 'uint8'], + [await uniContract.name(), await uniContract.symbol(), await uniContract.decimals()], + ); + const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); + + const balanceDeployer = await uniContract.balanceOf(deployer.address); + const balanceBridge = await uniContract.balanceOf(bridgeContract.address); + + const rollupExitRoot = await globalExitRootManager.lastRollupExitRoot(); + const lastGlobalExitRootNum = await globalExitRootManager.lastGlobalExitRootNum(); + + // pre compute root merkle tree in Js + const height = 32; + const merkleTree = new MerkleTreeBridge(height); + const leafValue = getLeafValue( + LEAF_TYPE_ASSET, + originNetwork, + tokenAddress, + destinationNetwork, + destinationAddress, + amount, + metadataHash, + ); + merkleTree.add(leafValue); + const rootJSMainnet = merkleTree.getRoot(); + + await expect(bridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x')) + .to.be.revertedWith('Uni::transferFrom: transfer amount exceeds spender allowance'); + + // user permit + const nonce = await uniContract.nonces(deployer.address); + const deadline = ethers.constants.MaxUint256; + const { v, r, s } = await createPermitSignatureUniType( + uniContract, + deployer, + bridgeContract.address, + amount, + nonce, + deadline, + ); + const dataPermit = ifacePermit.encodeFunctionData('permit', [ + deployer.address, + bridgeContract.address, + amount, + deadline, + v, + r, + s, + ]); + + await expect(bridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, dataPermit)) + .to.emit(bridgeContract, 'BridgeEvent') + .withArgs(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount) + .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') + .withArgs(lastGlobalExitRootNum + 1, rootJSMainnet, rollupExitRoot); + + expect(await uniContract.balanceOf(deployer.address)).to.be.equal(balanceDeployer.sub(amount)); + expect(await uniContract.balanceOf(bridgeContract.address)).to.be.equal(balanceBridge.add(amount)); + + // check merkle root with SC + const rootSCMainnet = await bridgeContract.getDepositRoot(); + expect(rootSCMainnet).to.be.equal(rootJSMainnet); + + // check merkle proof + const proof = merkleTree.getProofTreeByIndex(0); + const index = 0; + + // verify merkle proof + expect(verifyMerkleProof(leafValue, proof, index, rootSCMainnet)).to.be.equal(true); + expect(await bridgeContract.verifyMerkleProof( + leafValue, + proof, + index, + rootSCMainnet, + )).to.be.equal(true); + + const computedGlobalExitRoot = calculateGlobalExitRoot(rootJSMainnet, rollupExitRoot); + expect(computedGlobalExitRoot).to.be.equal(await globalExitRootManager.getLastGlobalExitRoot()); + }); +}); diff --git a/test/contracts/bridge.test.js b/test/contracts/bridge.test.js index a2a6e6cd7..66bad4212 100644 --- a/test/contracts/bridge.test.js +++ b/test/contracts/bridge.test.js @@ -6,14 +6,6 @@ const { getLeafValue, } = require('@0xpolygonhermez/zkevm-commonjs').mtBridgeUtils; -const { - createPermitSignature, - ifacePermit, - createPermitSignatureDaiType, - ifacePermitDAI, - createPermitSignatureUniType, -} = require('../../src/permit-helper'); - function calculateGlobalExitRoot(mainnetExitRoot, rollupExitRoot) { return ethers.utils.solidityKeccak256(['bytes32', 'bytes32'], [mainnetExitRoot, rollupExitRoot]); } @@ -78,92 +70,6 @@ describe('Bridge Contract', () => { ); expect(await bridgeContract.tokenImplementation()).to.be.equal(calcualteImplAddr); }); - it('should bridge and with permit', async () => { - const depositCount = await bridgeContract.depositCount(); - const originNetwork = networkIDMainnet; - const tokenAddress = tokenContract.address; - const amount = ethers.utils.parseEther('10'); - const destinationNetwork = networkIDRollup; - const destinationAddress = deployer.address; - - const metadata = metadataToken; - const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); - - const balanceDeployer = await tokenContract.balanceOf(deployer.address); - const balanceBridge = await tokenContract.balanceOf(bridgeContract.address); - - const rollupExitRoot = await globalExitRootManager.lastRollupExitRoot(); - const lastGlobalExitRootNum = await globalExitRootManager.lastGlobalExitRootNum(); - - // pre compute root merkle tree in Js - const height = 32; - const merkleTree = new MerkleTreeBridge(height); - const leafValue = getLeafValue( - LEAF_TYPE_ASSET, - originNetwork, - tokenAddress, - destinationNetwork, - destinationAddress, - amount, - metadataHash, - ); - merkleTree.add(leafValue); - const rootJSMainnet = merkleTree.getRoot(); - - await expect(bridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x')) - .to.be.revertedWith('ERC20: insufficient allowance'); - - // user permit - const nonce = await tokenContract.nonces(deployer.address); - const deadline = ethers.constants.MaxUint256; - const { v, r, s } = await createPermitSignature( - tokenContract, - deployer, - bridgeContract.address, - amount, - nonce, - deadline, - ); - - const dataPermit = ifacePermit.encodeFunctionData('permit', [ - deployer.address, - bridgeContract.address, - amount, - deadline, - v, - r, - s, - ]); - - await expect(bridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, dataPermit)) - .to.emit(bridgeContract, 'BridgeEvent') - .withArgs(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount) - .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') - .withArgs(lastGlobalExitRootNum + 1, rootJSMainnet, rollupExitRoot); - - expect(await tokenContract.balanceOf(deployer.address)).to.be.equal(balanceDeployer.sub(amount)); - expect(await tokenContract.balanceOf(bridgeContract.address)).to.be.equal(balanceBridge.add(amount)); - - // check merkle root with SC - const rootSCMainnet = await bridgeContract.getDepositRoot(); - expect(rootSCMainnet).to.be.equal(rootJSMainnet); - - // check merkle proof - const proof = merkleTree.getProofTreeByIndex(0); - const index = 0; - - // verify merkle proof - expect(verifyMerkleProof(leafValue, proof, index, rootSCMainnet)).to.be.equal(true); - expect(await bridgeContract.verifyMerkleProof( - leafValue, - proof, - index, - rootSCMainnet, - )).to.be.equal(true); - - const computedGlobalExitRoot = calculateGlobalExitRoot(rootJSMainnet, rollupExitRoot); - expect(computedGlobalExitRoot).to.be.equal(await globalExitRootManager.getLastGlobalExitRoot()); - }); it('should bridge and verify merkle proof', async () => { const depositCount = await bridgeContract.depositCount(); @@ -1165,198 +1071,4 @@ describe('Bridge Contract', () => { metadata, )).to.be.revertedWith('Bridge::claim: ALREADY_CLAIMED'); }); - it('should bridge with permit DAI type contracts', async () => { - const { chainId } = await ethers.provider.getNetwork(); - const daiTokenFactory = await ethers.getContractFactory('Dai'); - const daiContract = await daiTokenFactory.deploy( - chainId, - ); - await daiContract.deployed(); - await daiContract.mint(deployer.address, ethers.utils.parseEther('100')); - - const depositCount = await bridgeContract.depositCount(); - const originNetwork = networkIDMainnet; - const tokenAddress = daiContract.address; - const amount = ethers.utils.parseEther('10'); - const destinationNetwork = networkIDRollup; - const destinationAddress = deployer.address; - - const metadata = ethers.utils.defaultAbiCoder.encode( - ['string', 'string', 'uint8'], - [await daiContract.name(), await daiContract.symbol(), await daiContract.decimals()], - ); - const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); - - const balanceDeployer = await daiContract.balanceOf(deployer.address); - const balanceBridge = await daiContract.balanceOf(bridgeContract.address); - - const rollupExitRoot = await globalExitRootManager.lastRollupExitRoot(); - const lastGlobalExitRootNum = await globalExitRootManager.lastGlobalExitRootNum(); - - // pre compute root merkle tree in Js - const height = 32; - const merkleTree = new MerkleTreeBridge(height); - const leafValue = getLeafValue( - LEAF_TYPE_ASSET, - originNetwork, - tokenAddress, - destinationNetwork, - destinationAddress, - amount, - metadataHash, - ); - merkleTree.add(leafValue); - const rootJSMainnet = merkleTree.getRoot(); - - await expect(bridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x')) - .to.be.revertedWith('Dai/insufficient-allowance'); - - // user permit - const nonce = await daiContract.nonces(deployer.address); - const deadline = ethers.constants.MaxUint256; - const { v, r, s } = await createPermitSignatureDaiType( - daiContract, - deployer, - bridgeContract.address, - nonce, - deadline, - ); - const dataPermit = ifacePermitDAI.encodeFunctionData('permit', [ - deployer.address, - bridgeContract.address, - nonce, - deadline, - true, - v, - r, - s, - ]); - - await expect(bridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, dataPermit)) - .to.emit(bridgeContract, 'BridgeEvent') - .withArgs(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount) - .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') - .withArgs(lastGlobalExitRootNum + 1, rootJSMainnet, rollupExitRoot); - - expect(await daiContract.balanceOf(deployer.address)).to.be.equal(balanceDeployer.sub(amount)); - expect(await daiContract.balanceOf(bridgeContract.address)).to.be.equal(balanceBridge.add(amount)); - - // check merkle root with SC - const rootSCMainnet = await bridgeContract.getDepositRoot(); - expect(rootSCMainnet).to.be.equal(rootJSMainnet); - - // check merkle proof - const proof = merkleTree.getProofTreeByIndex(0); - const index = 0; - - // verify merkle proof - expect(verifyMerkleProof(leafValue, proof, index, rootSCMainnet)).to.be.equal(true); - expect(await bridgeContract.verifyMerkleProof( - leafValue, - proof, - index, - rootSCMainnet, - )).to.be.equal(true); - - const computedGlobalExitRoot = calculateGlobalExitRoot(rootJSMainnet, rollupExitRoot); - expect(computedGlobalExitRoot).to.be.equal(await globalExitRootManager.getLastGlobalExitRoot()); - }); - - it('should bridge with permit UNI type contracts', async () => { - const uniTokenFactory = await ethers.getContractFactory('Uni'); - const uniContract = await uniTokenFactory.deploy( - deployer.address, - deployer.address, - (await ethers.provider.getBlock()).timestamp + 1, - ); - await uniContract.deployed(); - await uniContract.mint(deployer.address, ethers.utils.parseEther('100')); - - const depositCount = await bridgeContract.depositCount(); - const originNetwork = networkIDMainnet; - const tokenAddress = uniContract.address; - const amount = ethers.utils.parseEther('10'); - const destinationNetwork = networkIDRollup; - const destinationAddress = deployer.address; - - const metadata = ethers.utils.defaultAbiCoder.encode( - ['string', 'string', 'uint8'], - [await uniContract.name(), await uniContract.symbol(), await uniContract.decimals()], - ); - const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); - - const balanceDeployer = await uniContract.balanceOf(deployer.address); - const balanceBridge = await uniContract.balanceOf(bridgeContract.address); - - const rollupExitRoot = await globalExitRootManager.lastRollupExitRoot(); - const lastGlobalExitRootNum = await globalExitRootManager.lastGlobalExitRootNum(); - - // pre compute root merkle tree in Js - const height = 32; - const merkleTree = new MerkleTreeBridge(height); - const leafValue = getLeafValue( - LEAF_TYPE_ASSET, - originNetwork, - tokenAddress, - destinationNetwork, - destinationAddress, - amount, - metadataHash, - ); - merkleTree.add(leafValue); - const rootJSMainnet = merkleTree.getRoot(); - - await expect(bridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x')) - .to.be.revertedWith('Uni::transferFrom: transfer amount exceeds spender allowance'); - - // user permit - const nonce = await uniContract.nonces(deployer.address); - const deadline = ethers.constants.MaxUint256; - const { v, r, s } = await createPermitSignatureUniType( - uniContract, - deployer, - bridgeContract.address, - amount, - nonce, - deadline, - ); - const dataPermit = ifacePermit.encodeFunctionData('permit', [ - deployer.address, - bridgeContract.address, - amount, - deadline, - v, - r, - s, - ]); - - await expect(bridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, dataPermit)) - .to.emit(bridgeContract, 'BridgeEvent') - .withArgs(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount) - .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') - .withArgs(lastGlobalExitRootNum + 1, rootJSMainnet, rollupExitRoot); - - expect(await uniContract.balanceOf(deployer.address)).to.be.equal(balanceDeployer.sub(amount)); - expect(await uniContract.balanceOf(bridgeContract.address)).to.be.equal(balanceBridge.add(amount)); - - // check merkle root with SC - const rootSCMainnet = await bridgeContract.getDepositRoot(); - expect(rootSCMainnet).to.be.equal(rootJSMainnet); - - // check merkle proof - const proof = merkleTree.getProofTreeByIndex(0); - const index = 0; - - // verify merkle proof - expect(verifyMerkleProof(leafValue, proof, index, rootSCMainnet)).to.be.equal(true); - expect(await bridgeContract.verifyMerkleProof( - leafValue, - proof, - index, - rootSCMainnet, - )).to.be.equal(true); - - const computedGlobalExitRoot = calculateGlobalExitRoot(rootJSMainnet, rollupExitRoot); - expect(computedGlobalExitRoot).to.be.equal(await globalExitRootManager.getLastGlobalExitRoot()); - }); }); From 67acb19bf34d9879c447a6eb5979b1649782efb0 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Thu, 10 Nov 2022 23:40:42 +0100 Subject: [PATCH 15/71] PR fixes --- package.json | 4 ++-- src/permit-helper.js | 24 ++++++++----------- ...e.permit.test.js => bridge_permit.test.js} | 5 ++++ 3 files changed, 17 insertions(+), 16 deletions(-) rename test/contracts/{bridge.permit.test.js => bridge_permit.test.js} (99%) diff --git a/package.json b/package.json index 2c3180527..fd86303ce 100644 --- a/package.json +++ b/package.json @@ -61,8 +61,8 @@ "deploy:PoE2_0:hardhat": "npx hardhat run deployment/deployment_v2-0/deployPoE_v2-0.js --network hardhat", "deploy:PoE2_0:goerli": "npx hardhat run deployment/deployment_v2-0/deployPoE_v2-0.js --network goerli", "verify:PoE2_0:goerli": "npx hardhat run deployment/deployment_v2-0/verifyPoE_v2-0.js --network goerli", - "lint": "npx eslint ./test && npx eslint ./docker/scripts && npx eslint ./deployment/deployment_v2-0", - "lint:fix": "npx eslint ./test --fix && npx eslint ./docker/scripts --fix && npx eslint ./deployment/deployment_v2-0 --fix", + "lint": "npx eslint ./test && npx eslint ./docker/scripts && npx eslint ./deployment/deployment_v2-0 && npx eslint ./src", + "lint:fix": "npx eslint ./test --fix && npx eslint ./docker/scripts --fix && npx eslint ./deployment/deployment_v2-0 --fix && npx eslint ./src --fix", "compile": "npx hardhat compile", "check:deploy:PoE": "npx hardhat node > /dev/null 2>&1 & npx hardhat run --network localhost deployment/testnet/deployPoETestnet.js && npx hardhat run --network localhost deployment/testnet/checkDeployment.js && pkill -f 'hardhat'", "docker:contracts": "./docker/scripts/deploy-docker.sh", diff --git a/src/permit-helper.js b/src/permit-helper.js index d479b19c1..33328aef2 100644 --- a/src/permit-helper.js +++ b/src/permit-helper.js @@ -1,8 +1,8 @@ -const { ethers } = require('hardhat'); +const { ethers } = require('ethers'); const { expect } = require('chai'); /** - * Create a permit signature with the EIP-712 standar + * Create a permit signature with the EIP-2612 standard * @param {Object} tokenContractInstance - EthersJS contract instance of the token * @param {Object} wallet - EthersJs wallet instance that will sign the permit * @param {String} spenderAddress - Spender address, usually the contract that the permit will interact with @@ -51,19 +51,18 @@ async function createPermitSignature(tokenContractInstance, wallet, spenderAddre return signature; } - /** - * Create a permit signature with the EIP-712 standar + * Create a permit signature with the DAi approach * @param {Object} tokenContractInstance - EthersJS contract instance of the token * @param {Object} wallet - EthersJs wallet instance that will sign the permit * @param {String} spenderAddress - Spender address, usually the contract that the permit will interact with * @param {String} value - Value of the permit * @param {String} nonce - Nonce of the permit * @param {String} expiry - expiry of the permit + * @param {Number} chainId - expiry of the permit * @returns {Object} - Signature obejct, { v, r, s} */ -async function createPermitSignatureDaiType(tokenContractInstance, wallet, spenderAddress, nonce, expiry) { - const chainId = (await ethers.provider.getNetwork()).chainId +async function createPermitSignatureDaiType(tokenContractInstance, wallet, spenderAddress, nonce, expiry, chainId) { const name = await tokenContractInstance.name(); const version = await tokenContractInstance.version(); @@ -92,7 +91,7 @@ async function createPermitSignatureDaiType(tokenContractInstance, wallet, spend spender: spenderAddress, nonce, expiry, - allowed: true + allowed: true, }; const rawSignature = await wallet._signTypedData(domain, types, values); @@ -104,20 +103,18 @@ async function createPermitSignatureDaiType(tokenContractInstance, wallet, spend return signature; } - - /** - * Create a permit signature with the EIP-712 standar + * Create a permit signature with the UNI approach * @param {Object} tokenContractInstance - EthersJS contract instance of the token * @param {Object} wallet - EthersJs wallet instance that will sign the permit * @param {String} spenderAddress - Spender address, usually the contract that the permit will interact with * @param {String} value - Value of the permit * @param {String} nonce - Nonce of the permit * @param {String} deadline - Deadline of the permit + * @param {Number} chainId - expiry of the permit * @returns {Object} - Signature obejct, { v, r, s} */ -async function createPermitSignatureUniType(tokenContractInstance, wallet, spenderAddress, value, nonce, deadline) { - const chainId = (await ethers.provider.getNetwork()).chainId +async function createPermitSignatureUniType(tokenContractInstance, wallet, spenderAddress, value, nonce, deadline, chainId) { const name = await tokenContractInstance.name(); // The domain @@ -155,7 +152,6 @@ async function createPermitSignatureUniType(tokenContractInstance, wallet, spend return signature; } - /** * Permit interface */ @@ -171,5 +167,5 @@ module.exports = { createPermitSignatureDaiType, ifacePermit, ifacePermitDAI, - createPermitSignatureUniType + createPermitSignatureUniType, }; diff --git a/test/contracts/bridge.permit.test.js b/test/contracts/bridge_permit.test.js similarity index 99% rename from test/contracts/bridge.permit.test.js rename to test/contracts/bridge_permit.test.js index 5482b3bbd..5d49ac460 100644 --- a/test/contracts/bridge.permit.test.js +++ b/test/contracts/bridge_permit.test.js @@ -202,12 +202,14 @@ describe('Bridge Contract', () => { // user permit const nonce = await daiContract.nonces(deployer.address); const deadline = ethers.constants.MaxUint256; + const { v, r, s } = await createPermitSignatureDaiType( daiContract, deployer, bridgeContract.address, nonce, deadline, + chainId, ); const dataPermit = ifacePermitDAI.encodeFunctionData('permit', [ deployer.address, @@ -300,6 +302,8 @@ describe('Bridge Contract', () => { // user permit const nonce = await uniContract.nonces(deployer.address); const deadline = ethers.constants.MaxUint256; + const { chainId } = await ethers.provider.getNetwork(); + const { v, r, s } = await createPermitSignatureUniType( uniContract, deployer, @@ -307,6 +311,7 @@ describe('Bridge Contract', () => { amount, nonce, deadline, + chainId, ); const dataPermit = ifacePermit.encodeFunctionData('permit', [ deployer.address, From d2d5fddd3580b61eb3bdc86e3f93c78eda2c8297 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Thu, 10 Nov 2022 23:57:28 +0100 Subject: [PATCH 16/71] reduce -50k on getRoot --- compiled-contracts/Bridge.json | 4 ++-- compiled-contracts/BridgeMock.json | 4 ++-- contracts/Bridge.sol | 1 - contracts/lib/DepositContract.sol | 23 +++++++---------------- contracts/mocks/BridgeMock.sol | 1 - contracts/mocks/DepositContractMock.sol | 4 +--- docs/lib/DepositContract.md | 9 --------- test/contracts/bridgeMock.test.js | 2 +- test/contracts/bridge_permit.test.js | 2 +- 9 files changed, 14 insertions(+), 36 deletions(-) diff --git a/compiled-contracts/Bridge.json b/compiled-contracts/Bridge.json index 9eed5f559..7cd3359ca 100644 --- a/compiled-contracts/Bridge.json +++ b/compiled-contracts/Bridge.json @@ -621,8 +621,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50615a5b806100206000396000f3fe6080604052600436106200017b5760003560e01c806381b1c17411620000cf578063d02103ca116200007d578063e73758811162000060578063e73758811462000589578063ed6be5c914620005bd578063ff634ed714620005d457600080fd5b8063d02103ca1462000543578063d96a15f7146200057257600080fd5b8063a08e8a0811620000b2578063a08e8a0814620004bf578063b7e6a7d414620004e9578063bab161bf146200050e57600080fd5b806381b1c17414620004535780638624c35c146200049a57600080fd5b80633ae05047116200012d5780633e19704311620001105780633e19704314620003155780634638554914620004095780637b6323c1146200042e57600080fd5b80633ae0504714620002c75780633da8168214620002df57600080fd5b80632dfdf0b511620001625780632dfdf0b514620001e85780632f3a3d5d146200020f578063318aee3d146200023e57600080fd5b80630871e971146200018057806322e95f2c1462000199575b600080fd5b6200019762000191366004620035c3565b620005eb565b005b348015620001a657600080fd5b50620001be620001b83660046200367f565b62000bdf565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015620001f557600080fd5b506200020060415481565b604051908152602001620001df565b3480156200021c57600080fd5b50604754620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200024b57600080fd5b50620002956200025d366004620036bb565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201620001df565b348015620002d457600080fd5b506200020062000c82565b348015620002ec57600080fd5b5062000304620002fe366004620037da565b62000d5c565b6040519015158152602001620001df565b3480156200032257600080fd5b50620002006200033436600462003858565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200041657600080fd5b50620001976200042836600462003987565b62000e5c565b3480156200043b57600080fd5b50620001976200044d36600462003987565b62001617565b3480156200046057600080fd5b50620001be6200047236600462003a6e565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620004a757600080fd5b5062000197620004b93660046200367f565b620020c2565b348015620004cc57600080fd5b50620004d6600081565b60405160ff9091168152602001620001df565b348015620004f657600080fd5b50620001be620005083660046200367f565b62002340565b3480156200051b57600080fd5b506042546200052d9063ffffffff1681565b60405163ffffffff9091168152602001620001df565b3480156200055057600080fd5b50604654620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b620001976200058336600462003a88565b62002409565b3480156200059657600080fd5b5062000304620005a836600462003a6e565b60436020526000908152604090205460ff1681565b348015620005ca57600080fd5b506200052d600081565b348015620005e157600080fd5b50620004d6600181565b60425463ffffffff908116908616036200068c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff891662000748578534146200073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c55450000000000000000000000000000000000606482015260840162000683565b6000915062000a5c565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000849576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562000810573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000836919062003aff565b5060208101518151909450925062000a5a565b84156200085e576200085e8a88888862002656565b6200088273ffffffffffffffffffffffffffffffffffffffff8b1633308a62002d80565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200092e919081019062003b9a565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200097a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620009c2919081019062003b9a565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a34919062003bd3565b60405160200162000a489392919062003c3f565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760415460405162000a9e98979695949392919062003c7c565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000b599062002e64565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000b8162000c82565b6040518263ffffffff1660e01b815260040162000ba091815260200190565b600060405180830381600087803b15801562000bbb57600080fd5b505af115801562000bd0573d6000803e3d6000fd5b50505050505050505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6041546000908190815b602081101562000d54578160011660010362000cec576001816020811062000cb85762000cb862003cf5565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000d30565b826021826020811062000d035762000d0362003cf5565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b62000d3d60028362003d53565b91508062000d4b8162003d8f565b91505062000c8c565b509092915050565b60008467ffffffffffffffff8416825b602081101562000e4f578160011660010362000dd95786818151811062000d975762000d9762003cf5565b60200260200101518360405160200162000dbb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000e2b565b8287828151811062000def5762000def62003cf5565b602002602001015160405160200162000e12929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000e3860028362003d53565b91508062000e468162003d8f565b91505062000d6c565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000f04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d4544000000000000000000000000000000000000000000000000000000606482015260840162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000f9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fc3919062003dca565b60000362001054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000606482015260840162000683565b60425463ffffffff858116911614620010f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000606482015260840162000683565b60425463ffffffff166200126e578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620011da905b8b8b63ffffffff168a62000d5c565b62001268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b620013d8565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200134a905b8b8b63ffffffff168b62000d5c565b620013d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff8516908490620014469089908b90879060240162003de4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f20000000000000000000000000000000000000000000000000000000017905251620014c9919062003e2a565b60006040518083038185875af1925050503d806000811462001508576040519150601f19603f3d011682016040523d82523d6000602084013e6200150d565b606091505b50509050806200159f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c454400000000000000000000000000000000000000000000000000000000606482015260840162000683565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b63ffffffff891660009081526043602052604090205460ff161562001699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d45440000604482015260640162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001732573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001758919062003dca565b600003620017e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d41544348000000000000000000000000000000000000606482015260840162000683565b60425463ffffffff85811691161462001885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d41544348000000000000000000000000000000606482015260840162000683565b60425463ffffffff16620019b4578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200194690620011cb565b620019ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b62001acf565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062001a67906200133b565b62001acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff851662001c40576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001b62919062003e2a565b60006040518083038185875af1925050503d806000811462001ba1576040519150601f19603f3d011682016040523d82523d6000602084013e62001ba6565b606091505b505090508062001c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f4544000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b506200204b565b60425463ffffffff9081169087160362001c7d5762001c7773ffffffffffffffffffffffffffffffffffffffff8616848462002fdd565b6200204b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001faa5760475460009062001d689073ffffffffffffffffffffffffffffffffffffffff168462003035565b905060008060008680602001905181019062001d85919062003e48565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001dce95949392919062003ec9565b600060405180830381600087803b15801562001de957600080fd5b505af115801562001dfe573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001f989392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062002048565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562002020573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002046919062003aff565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff1615808015620020e35750600054600160ff909116105b80620020ff5750303b158015620020ff575060005460ff166001145b6200218d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840162000683565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620021ec57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556040516200226a906200356b565b604051809103906000f08015801562002287573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055620022d762003115565b80156200233b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620024019073ffffffffffffffffffffffffffffffffffffffff16826200325d565b949350505050565b60425463ffffffff90811690841603620024a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c4600000000000000000000000000000000000000000000606482015260840162000683565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620024f39260019263ffffffff9092169133918991899134918a919062003c7c565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620025d69062002e64565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d620025fe62000c82565b6040518263ffffffff1660e01b81526004016200261d91815260200190565b600060405180830381600087803b1580156200263857600080fd5b505af11580156200264d573d6000803e3d6000fd5b50505050505050565b60006200269983838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620032e192505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002a1d576000808080808080620026fc896004818d62003f29565b8101906200270b919062003f55565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614620027d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000683565b73ffffffffffffffffffffffffffffffffffffffff861630146200287d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000683565b8a85146200290e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d4154434800000000000000000000000000000000000000606482015260840162000683565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e1691620029c9919062003e2a565b6000604051808303816000865af19150503d806000811462002a08576040519150601f19603f3d011682016040523d82523d6000602084013e62002a0d565b606091505b5050505050505050505062002d79565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002aca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000683565b60008080808080808062002ae28a6004818e62003f29565b81019062002af1919062003fb0565b975097509750975097509750975097503373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161462002bbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000683565b73ffffffffffffffffffffffffffffffffffffffff8716301462002c65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000683565b6040805173ffffffffffffffffffffffffffffffffffffffff8a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002d29919062003e2a565b6000604051808303816000865af19150503d806000811462002d68576040519150601f19603f3d011682016040523d82523d6000602084013e62002d6d565b606091505b50505050505050505050505b5050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905262002e5e9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152620032e8565b50505050565b80600162002e756020600262004175565b62002e81919062004183565b6041541062002f13576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c00000000000000000000000000000000000000000000606482015260840162000683565b60016041600082825462002f2891906200419d565b909155505060415460005b602081101562002fd2578160011660010362002f6857826001826020811062002f605762002f6062003cf5565b015550505050565b6001816020811062002f7e5762002f7e62003cf5565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002fbb919062003d53565b91508062002fc98162003d8f565b91505062002f33565b506200233b620041b8565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526200233b9084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002ddb565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000c7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640162000683565b600054610100900460ff16620031ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000683565b60005b620031bf6001602062004183565b8110156200325a5760218160208110620031dd57620031dd62003cf5565b015460218260208110620031f557620031f562003cf5565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012060218260016200323091906200419d565b6020811062003243576200324362003cf5565b015580620032518162003d8f565b915050620031b1565b50565b6000620032da8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b60006200334c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620033fb9092919063ffffffff16565b8051909150156200233b57808060200190518101906200336d919062003aff565b6200233b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000683565b60606200240184846000858573ffffffffffffffffffffffffffffffffffffffff85163b62003487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000683565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620034b2919062003e2a565b60006040518083038185875af1925050503d8060008114620034f1576040519150601f19603f3d011682016040523d82523d6000602084013e620034f6565b606091505b50915091506200350882828662003513565b979650505050505050565b6060831562003524575081620032da565b825115620035355782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006839190620041e7565b61182980620041fd83390190565b73ffffffffffffffffffffffffffffffffffffffff811681146200325a57600080fd5b8035620035a98162003579565b919050565b803563ffffffff81168114620035a957600080fd5b60008060008060008060a08789031215620035dd57600080fd5b8635620035ea8162003579565b9550620035fa60208801620035ae565b945060408701356200360c8162003579565b935060608701359250608087013567ffffffffffffffff808211156200363157600080fd5b818901915089601f8301126200364657600080fd5b8135818111156200365657600080fd5b8a60208285010111156200366957600080fd5b6020830194508093505050509295509295509295565b600080604083850312156200369357600080fd5b6200369e83620035ae565b91506020830135620036b08162003579565b809150509250929050565b600060208284031215620036ce57600080fd5b8135620032da8162003579565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620037545762003754620036db565b604052919050565b600082601f8301126200376e57600080fd5b8135602067ffffffffffffffff8211156200378d576200378d620036db565b8160051b6200379e8282016200370a565b9283528481018201928281019087851115620037b957600080fd5b83870192505b848310156200350857823582529183019190830190620037bf565b60008060008060808587031215620037f157600080fd5b84359350602085013567ffffffffffffffff808211156200381157600080fd5b6200381f888389016200375c565b94506040870135915080821682146200383757600080fd5b509396929550929360600135925050565b60ff811681146200325a57600080fd5b600080600080600080600060e0888a0312156200387457600080fd5b8735620038818162003848565b96506200389160208901620035ae565b95506040880135620038a38162003579565b9450620038b360608901620035ae565b93506080880135620038c58162003579565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620038ff57620038ff620036db565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126200393d57600080fd5b8135620039546200394e82620038e2565b6200370a565b8181528460208386010111156200396a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620039a857600080fd5b8a3567ffffffffffffffff80821115620039c157600080fd5b620039cf8e838f016200375c565b9b50620039df60208e01620035ae565b9a5060408d0135995060608d01359850620039fd60808e01620035ae565b975062003a0d60a08e016200359c565b965062003a1d60c08e01620035ae565b955062003a2d60e08e016200359c565b94506101008d013593506101208d013591508082111562003a4d57600080fd5b5062003a5c8d828e016200392b565b9150509295989b9194979a5092959850565b60006020828403121562003a8157600080fd5b5035919050565b60008060006060848603121562003a9e57600080fd5b62003aa984620035ae565b9250602084013562003abb8162003579565b9150604084013567ffffffffffffffff81111562003ad857600080fd5b62003ae6868287016200392b565b9150509250925092565b80151581146200325a57600080fd5b60006020828403121562003b1257600080fd5b8151620032da8162003af0565b60005b8381101562003b3c57818101518382015260200162003b22565b8381111562002e5e5750506000910152565b600082601f83011262003b6057600080fd5b815162003b716200394e82620038e2565b81815284602083860101111562003b8757600080fd5b6200240182602083016020870162003b1f565b60006020828403121562003bad57600080fd5b815167ffffffffffffffff81111562003bc557600080fd5b620024018482850162003b4e565b60006020828403121562003be657600080fd5b8151620032da8162003848565b6000815180845262003c0d81602086016020860162003b1f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60608152600062003c54606083018662003bf3565b828103602084015262003c68818662003bf3565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003cdc8285018762003bf3565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003d8a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003dc35762003dc362003d24565b5060010190565b60006020828403121562003ddd57600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003e21606083018462003bf3565b95945050505050565b6000825162003e3e81846020870162003b1f565b9190910192915050565b60008060006060848603121562003e5e57600080fd5b835167ffffffffffffffff8082111562003e7757600080fd5b62003e858783880162003b4e565b9450602086015191508082111562003e9c57600080fd5b5062003eab8682870162003b4e565b925050604084015162003ebe8162003848565b809150509250925092565b60a08152600062003ede60a083018862003bf3565b828103602084015262003ef2818862003bf3565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000808585111562003f3a57600080fd5b8386111562003f4857600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003f7157600080fd5b873562003f7e8162003579565b9650602088013562003f908162003579565b955060408801359450606088013593506080880135620038c58162003848565b600080600080600080600080610100898b03121562003fce57600080fd5b883562003fdb8162003579565b9750602089013562003fed8162003579565b9650604089013595506060890135945060808901356200400d8162003af0565b935060a08901356200401f8162003848565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200409b57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156200407f576200407f62003d24565b808516156200408d57918102915b93841c939080029062004041565b509250929050565b600082620040b45750600162000c7c565b81620040c35750600062000c7c565b8160018114620040dc5760028114620040e75762004107565b600191505062000c7c565b60ff841115620040fb57620040fb62003d24565b50506001821b62000c7c565b5060208310610133831016604e8410600b84101617156200412c575081810a62000c7c565b6200413883836200403c565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156200416d576200416d62003d24565b029392505050565b6000620032da8383620040a3565b60008282101562004198576200419862003d24565b500390565b60008219821115620041b357620041b362003d24565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b602081526000620032da602083018462003bf356fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a26469706673582212201f26b56f29f92ab7c5c3e914710fd2272ffb42c30a12b7548f18f27e034c925e64736f6c634300080f0033", - "deployedBytecode": "0x6080604052600436106200017b5760003560e01c806381b1c17411620000cf578063d02103ca116200007d578063e73758811162000060578063e73758811462000589578063ed6be5c914620005bd578063ff634ed714620005d457600080fd5b8063d02103ca1462000543578063d96a15f7146200057257600080fd5b8063a08e8a0811620000b2578063a08e8a0814620004bf578063b7e6a7d414620004e9578063bab161bf146200050e57600080fd5b806381b1c17414620004535780638624c35c146200049a57600080fd5b80633ae05047116200012d5780633e19704311620001105780633e19704314620003155780634638554914620004095780637b6323c1146200042e57600080fd5b80633ae0504714620002c75780633da8168214620002df57600080fd5b80632dfdf0b511620001625780632dfdf0b514620001e85780632f3a3d5d146200020f578063318aee3d146200023e57600080fd5b80630871e971146200018057806322e95f2c1462000199575b600080fd5b6200019762000191366004620035c3565b620005eb565b005b348015620001a657600080fd5b50620001be620001b83660046200367f565b62000bdf565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015620001f557600080fd5b506200020060415481565b604051908152602001620001df565b3480156200021c57600080fd5b50604754620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200024b57600080fd5b50620002956200025d366004620036bb565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201620001df565b348015620002d457600080fd5b506200020062000c82565b348015620002ec57600080fd5b5062000304620002fe366004620037da565b62000d5c565b6040519015158152602001620001df565b3480156200032257600080fd5b50620002006200033436600462003858565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200041657600080fd5b50620001976200042836600462003987565b62000e5c565b3480156200043b57600080fd5b50620001976200044d36600462003987565b62001617565b3480156200046057600080fd5b50620001be6200047236600462003a6e565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620004a757600080fd5b5062000197620004b93660046200367f565b620020c2565b348015620004cc57600080fd5b50620004d6600081565b60405160ff9091168152602001620001df565b348015620004f657600080fd5b50620001be620005083660046200367f565b62002340565b3480156200051b57600080fd5b506042546200052d9063ffffffff1681565b60405163ffffffff9091168152602001620001df565b3480156200055057600080fd5b50604654620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b620001976200058336600462003a88565b62002409565b3480156200059657600080fd5b5062000304620005a836600462003a6e565b60436020526000908152604090205460ff1681565b348015620005ca57600080fd5b506200052d600081565b348015620005e157600080fd5b50620004d6600181565b60425463ffffffff908116908616036200068c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff891662000748578534146200073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c55450000000000000000000000000000000000606482015260840162000683565b6000915062000a5c565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000849576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562000810573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000836919062003aff565b5060208101518151909450925062000a5a565b84156200085e576200085e8a88888862002656565b6200088273ffffffffffffffffffffffffffffffffffffffff8b1633308a62002d80565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200092e919081019062003b9a565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200097a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620009c2919081019062003b9a565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a34919062003bd3565b60405160200162000a489392919062003c3f565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760415460405162000a9e98979695949392919062003c7c565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000b599062002e64565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000b8162000c82565b6040518263ffffffff1660e01b815260040162000ba091815260200190565b600060405180830381600087803b15801562000bbb57600080fd5b505af115801562000bd0573d6000803e3d6000fd5b50505050505050505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6041546000908190815b602081101562000d54578160011660010362000cec576001816020811062000cb85762000cb862003cf5565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000d30565b826021826020811062000d035762000d0362003cf5565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b62000d3d60028362003d53565b91508062000d4b8162003d8f565b91505062000c8c565b509092915050565b60008467ffffffffffffffff8416825b602081101562000e4f578160011660010362000dd95786818151811062000d975762000d9762003cf5565b60200260200101518360405160200162000dbb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000e2b565b8287828151811062000def5762000def62003cf5565b602002602001015160405160200162000e12929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000e3860028362003d53565b91508062000e468162003d8f565b91505062000d6c565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000f04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d4544000000000000000000000000000000000000000000000000000000606482015260840162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000f9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fc3919062003dca565b60000362001054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000606482015260840162000683565b60425463ffffffff858116911614620010f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000606482015260840162000683565b60425463ffffffff166200126e578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620011da905b8b8b63ffffffff168a62000d5c565b62001268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b620013d8565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200134a905b8b8b63ffffffff168b62000d5c565b620013d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff8516908490620014469089908b90879060240162003de4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f20000000000000000000000000000000000000000000000000000000017905251620014c9919062003e2a565b60006040518083038185875af1925050503d806000811462001508576040519150601f19603f3d011682016040523d82523d6000602084013e6200150d565b606091505b50509050806200159f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c454400000000000000000000000000000000000000000000000000000000606482015260840162000683565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b63ffffffff891660009081526043602052604090205460ff161562001699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d45440000604482015260640162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001732573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001758919062003dca565b600003620017e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d41544348000000000000000000000000000000000000606482015260840162000683565b60425463ffffffff85811691161462001885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d41544348000000000000000000000000000000606482015260840162000683565b60425463ffffffff16620019b4578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200194690620011cb565b620019ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b62001acf565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062001a67906200133b565b62001acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff851662001c40576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001b62919062003e2a565b60006040518083038185875af1925050503d806000811462001ba1576040519150601f19603f3d011682016040523d82523d6000602084013e62001ba6565b606091505b505090508062001c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f4544000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b506200204b565b60425463ffffffff9081169087160362001c7d5762001c7773ffffffffffffffffffffffffffffffffffffffff8616848462002fdd565b6200204b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001faa5760475460009062001d689073ffffffffffffffffffffffffffffffffffffffff168462003035565b905060008060008680602001905181019062001d85919062003e48565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001dce95949392919062003ec9565b600060405180830381600087803b15801562001de957600080fd5b505af115801562001dfe573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001f989392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062002048565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562002020573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002046919062003aff565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff1615808015620020e35750600054600160ff909116105b80620020ff5750303b158015620020ff575060005460ff166001145b6200218d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840162000683565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620021ec57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556040516200226a906200356b565b604051809103906000f08015801562002287573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055620022d762003115565b80156200233b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620024019073ffffffffffffffffffffffffffffffffffffffff16826200325d565b949350505050565b60425463ffffffff90811690841603620024a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c4600000000000000000000000000000000000000000000606482015260840162000683565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620024f39260019263ffffffff9092169133918991899134918a919062003c7c565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620025d69062002e64565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d620025fe62000c82565b6040518263ffffffff1660e01b81526004016200261d91815260200190565b600060405180830381600087803b1580156200263857600080fd5b505af11580156200264d573d6000803e3d6000fd5b50505050505050565b60006200269983838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620032e192505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002a1d576000808080808080620026fc896004818d62003f29565b8101906200270b919062003f55565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614620027d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000683565b73ffffffffffffffffffffffffffffffffffffffff861630146200287d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000683565b8a85146200290e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d4154434800000000000000000000000000000000000000606482015260840162000683565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e1691620029c9919062003e2a565b6000604051808303816000865af19150503d806000811462002a08576040519150601f19603f3d011682016040523d82523d6000602084013e62002a0d565b606091505b5050505050505050505062002d79565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002aca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000683565b60008080808080808062002ae28a6004818e62003f29565b81019062002af1919062003fb0565b975097509750975097509750975097503373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161462002bbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000683565b73ffffffffffffffffffffffffffffffffffffffff8716301462002c65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000683565b6040805173ffffffffffffffffffffffffffffffffffffffff8a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002d29919062003e2a565b6000604051808303816000865af19150503d806000811462002d68576040519150601f19603f3d011682016040523d82523d6000602084013e62002d6d565b606091505b50505050505050505050505b5050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905262002e5e9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152620032e8565b50505050565b80600162002e756020600262004175565b62002e81919062004183565b6041541062002f13576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c00000000000000000000000000000000000000000000606482015260840162000683565b60016041600082825462002f2891906200419d565b909155505060415460005b602081101562002fd2578160011660010362002f6857826001826020811062002f605762002f6062003cf5565b015550505050565b6001816020811062002f7e5762002f7e62003cf5565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002fbb919062003d53565b91508062002fc98162003d8f565b91505062002f33565b506200233b620041b8565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526200233b9084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002ddb565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000c7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640162000683565b600054610100900460ff16620031ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000683565b60005b620031bf6001602062004183565b8110156200325a5760218160208110620031dd57620031dd62003cf5565b015460218260208110620031f557620031f562003cf5565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012060218260016200323091906200419d565b6020811062003243576200324362003cf5565b015580620032518162003d8f565b915050620031b1565b50565b6000620032da8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b60006200334c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620033fb9092919063ffffffff16565b8051909150156200233b57808060200190518101906200336d919062003aff565b6200233b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000683565b60606200240184846000858573ffffffffffffffffffffffffffffffffffffffff85163b62003487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000683565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620034b2919062003e2a565b60006040518083038185875af1925050503d8060008114620034f1576040519150601f19603f3d011682016040523d82523d6000602084013e620034f6565b606091505b50915091506200350882828662003513565b979650505050505050565b6060831562003524575081620032da565b825115620035355782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006839190620041e7565b61182980620041fd83390190565b73ffffffffffffffffffffffffffffffffffffffff811681146200325a57600080fd5b8035620035a98162003579565b919050565b803563ffffffff81168114620035a957600080fd5b60008060008060008060a08789031215620035dd57600080fd5b8635620035ea8162003579565b9550620035fa60208801620035ae565b945060408701356200360c8162003579565b935060608701359250608087013567ffffffffffffffff808211156200363157600080fd5b818901915089601f8301126200364657600080fd5b8135818111156200365657600080fd5b8a60208285010111156200366957600080fd5b6020830194508093505050509295509295509295565b600080604083850312156200369357600080fd5b6200369e83620035ae565b91506020830135620036b08162003579565b809150509250929050565b600060208284031215620036ce57600080fd5b8135620032da8162003579565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620037545762003754620036db565b604052919050565b600082601f8301126200376e57600080fd5b8135602067ffffffffffffffff8211156200378d576200378d620036db565b8160051b6200379e8282016200370a565b9283528481018201928281019087851115620037b957600080fd5b83870192505b848310156200350857823582529183019190830190620037bf565b60008060008060808587031215620037f157600080fd5b84359350602085013567ffffffffffffffff808211156200381157600080fd5b6200381f888389016200375c565b94506040870135915080821682146200383757600080fd5b509396929550929360600135925050565b60ff811681146200325a57600080fd5b600080600080600080600060e0888a0312156200387457600080fd5b8735620038818162003848565b96506200389160208901620035ae565b95506040880135620038a38162003579565b9450620038b360608901620035ae565b93506080880135620038c58162003579565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620038ff57620038ff620036db565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126200393d57600080fd5b8135620039546200394e82620038e2565b6200370a565b8181528460208386010111156200396a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620039a857600080fd5b8a3567ffffffffffffffff80821115620039c157600080fd5b620039cf8e838f016200375c565b9b50620039df60208e01620035ae565b9a5060408d0135995060608d01359850620039fd60808e01620035ae565b975062003a0d60a08e016200359c565b965062003a1d60c08e01620035ae565b955062003a2d60e08e016200359c565b94506101008d013593506101208d013591508082111562003a4d57600080fd5b5062003a5c8d828e016200392b565b9150509295989b9194979a5092959850565b60006020828403121562003a8157600080fd5b5035919050565b60008060006060848603121562003a9e57600080fd5b62003aa984620035ae565b9250602084013562003abb8162003579565b9150604084013567ffffffffffffffff81111562003ad857600080fd5b62003ae6868287016200392b565b9150509250925092565b80151581146200325a57600080fd5b60006020828403121562003b1257600080fd5b8151620032da8162003af0565b60005b8381101562003b3c57818101518382015260200162003b22565b8381111562002e5e5750506000910152565b600082601f83011262003b6057600080fd5b815162003b716200394e82620038e2565b81815284602083860101111562003b8757600080fd5b6200240182602083016020870162003b1f565b60006020828403121562003bad57600080fd5b815167ffffffffffffffff81111562003bc557600080fd5b620024018482850162003b4e565b60006020828403121562003be657600080fd5b8151620032da8162003848565b6000815180845262003c0d81602086016020860162003b1f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60608152600062003c54606083018662003bf3565b828103602084015262003c68818662003bf3565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003cdc8285018762003bf3565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003d8a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003dc35762003dc362003d24565b5060010190565b60006020828403121562003ddd57600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003e21606083018462003bf3565b95945050505050565b6000825162003e3e81846020870162003b1f565b9190910192915050565b60008060006060848603121562003e5e57600080fd5b835167ffffffffffffffff8082111562003e7757600080fd5b62003e858783880162003b4e565b9450602086015191508082111562003e9c57600080fd5b5062003eab8682870162003b4e565b925050604084015162003ebe8162003848565b809150509250925092565b60a08152600062003ede60a083018862003bf3565b828103602084015262003ef2818862003bf3565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000808585111562003f3a57600080fd5b8386111562003f4857600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003f7157600080fd5b873562003f7e8162003579565b9650602088013562003f908162003579565b955060408801359450606088013593506080880135620038c58162003848565b600080600080600080600080610100898b03121562003fce57600080fd5b883562003fdb8162003579565b9750602089013562003fed8162003579565b9650604089013595506060890135945060808901356200400d8162003af0565b935060a08901356200401f8162003848565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200409b57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156200407f576200407f62003d24565b808516156200408d57918102915b93841c939080029062004041565b509250929050565b600082620040b45750600162000c7c565b81620040c35750600062000c7c565b8160018114620040dc5760028114620040e75762004107565b600191505062000c7c565b60ff841115620040fb57620040fb62003d24565b50506001821b62000c7c565b5060208310610133831016604e8410600b84101617156200412c575081810a62000c7c565b6200413883836200403c565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156200416d576200416d62003d24565b029392505050565b6000620032da8383620040a3565b60008282101562004198576200419862003d24565b500390565b60008219821115620041b357620041b362003d24565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b602081526000620032da602083018462003bf356fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a26469706673582212201f26b56f29f92ab7c5c3e914710fd2272ffb42c30a12b7548f18f27e034c925e64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50615954806100206000396000f3fe6080604052600436106200017b5760003560e01c806381b1c17411620000cf578063d02103ca116200007d578063e73758811162000060578063e73758811462000589578063ed6be5c914620005bd578063ff634ed714620005d457600080fd5b8063d02103ca1462000543578063d96a15f7146200057257600080fd5b8063a08e8a0811620000b2578063a08e8a0814620004bf578063b7e6a7d414620004e9578063bab161bf146200050e57600080fd5b806381b1c17414620004535780638624c35c146200049a57600080fd5b80633ae05047116200012d5780633e19704311620001105780633e19704314620003155780634638554914620004095780637b6323c1146200042e57600080fd5b80633ae0504714620002c75780633da8168214620002df57600080fd5b80632dfdf0b511620001625780632dfdf0b514620001e85780632f3a3d5d146200020f578063318aee3d146200023e57600080fd5b80630871e971146200018057806322e95f2c1462000199575b600080fd5b6200019762000191366004620034bc565b620005eb565b005b348015620001a657600080fd5b50620001be620001b836600462003578565b62000bdf565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015620001f557600080fd5b506200020060215481565b604051908152602001620001df565b3480156200021c57600080fd5b50602754620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200024b57600080fd5b50620002956200025d366004620035b4565b60256020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201620001df565b348015620002d457600080fd5b506200020062000cb1565b348015620002ec57600080fd5b5062000304620002fe366004620036d3565b62000da4565b6040519015158152602001620001df565b3480156200032257600080fd5b50620002006200033436600462003751565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200041657600080fd5b50620001976200042836600462003880565b62000ea4565b3480156200043b57600080fd5b50620001976200044d36600462003880565b6200165f565b3480156200046057600080fd5b50620001be6200047236600462003967565b60246020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620004a757600080fd5b5062000197620004b936600462003578565b6200210a565b348015620004cc57600080fd5b50620004d6600081565b60405160ff9091168152602001620001df565b348015620004f657600080fd5b50620001be6200050836600462003578565b6200237e565b3480156200051b57600080fd5b506022546200052d9063ffffffff1681565b60405163ffffffff9091168152602001620001df565b3480156200055057600080fd5b50602654620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b620001976200058336600462003981565b62002447565b3480156200059657600080fd5b5062000304620005a836600462003967565b60236020526000908152604090205460ff1681565b348015620005ca57600080fd5b506200052d600081565b348015620005e157600080fd5b50620004d6600181565b60225463ffffffff908116908616036200068c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff891662000748578534146200073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c55450000000000000000000000000000000000606482015260840162000683565b6000915062000a5c565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526025602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000849576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562000810573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008369190620039f8565b5060208101518151909450925062000a5a565b84156200085e576200085e8a88888862002694565b6200088273ffffffffffffffffffffffffffffffffffffffff8b1633308a62002dbe565b899350602260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200092e919081019062003a93565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200097a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620009c2919081019062003a93565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a34919062003acc565b60405160200162000a489392919062003b38565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162000a9e98979695949392919062003b75565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000b599062002ea2565b60265473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000b8162000cb1565b6040518263ffffffff1660e01b815260040162000ba091815260200190565b600060405180830381600087803b15801562000bbb57600080fd5b505af115801562000bd0573d6000803e3d6000fd5b50505050505050505050505050565b600060246000848460405160200162000c4e92919060e09290921b7fffffffff0000000000000000000000000000000000000000000000000000000016825260601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600482015260180190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181528151602092830120835290820192909252016000205473ffffffffffffffffffffffffffffffffffffffff1690505b92915050565b602154600090819081805b602081101562000d9b578260011660010362000d1c576001816020811062000ce85762000ce862003bee565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000d49565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000d5660028462003c4c565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000d929062003c88565b91505062000cbc565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000e97578160011660010362000e215786818151811062000ddf5762000ddf62003bee565b60200260200101518360405160200162000e03929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000e73565b8287828151811062000e375762000e3762003bee565b602002602001015160405160200162000e5a929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000e8060028362003c4c565b91508062000e8e8162003c88565b91505062000db4565b5050909114949350505050565b63ffffffff891660009081526023602052604090205460ff161562000f4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d4544000000000000000000000000000000000000000000000000000000606482015260840162000683565b6026546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000fe5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200100b919062003cc3565b6000036200109c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000606482015260840162000683565b60225463ffffffff85811691161462001138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000606482015260840162000683565b60225463ffffffff16620012b6578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062001222905b8b8b63ffffffff168a62000da4565b620012b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b62001420565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062001392905b8b8b63ffffffff168b62000da4565b62001420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b63ffffffff891660009081526023602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff85169084906200148e9089908b90879060240162003cdd565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001511919062003d23565b60006040518083038185875af1925050503d806000811462001550576040519150601f19603f3d011682016040523d82523d6000602084013e62001555565b606091505b5050905080620015e7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c454400000000000000000000000000000000000000000000000000000000606482015260840162000683565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b63ffffffff891660009081526023602052604090205460ff1615620016e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d45440000604482015260640162000683565b6026546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af11580156200177a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017a0919062003cc3565b60000362001831576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d41544348000000000000000000000000000000000000606482015260840162000683565b60225463ffffffff858116911614620018cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d41544348000000000000000000000000000000606482015260840162000683565b60225463ffffffff16620019fc578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200198e9062001213565b620019f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b62001b17565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062001aaf9062001383565b62001b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b63ffffffff8916600090815260236020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff851662001c88576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001baa919062003d23565b60006040518083038185875af1925050503d806000811462001be9576040519150601f19603f3d011682016040523d82523d6000602084013e62001bee565b606091505b505090508062001c81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f4544000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b5062002093565b60225463ffffffff9081169087160362001cc55762001cbf73ffffffffffffffffffffffffffffffffffffffff861684846200301b565b62002093565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152602490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001ff25760275460009062001db09073ffffffffffffffffffffffffffffffffffffffff168462003073565b905060008060008680602001905181019062001dcd919062003d41565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001e1695949392919062003dc2565b600060405180830381600087803b15801562001e3157600080fd5b505af115801562001e46573d6000803e3d6000fd5b50505050836024600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250602560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001fe09392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062002090565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562002068573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200208e9190620039f8565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff16158080156200212b5750600054600160ff909116105b80620021475750303b15801562002147575060005460ff166001145b620021d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840162000683565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156200223457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b602280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055602680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055604051620022b29062003461565b604051809103906000f080158015620022cf573d6000803e3d6000fd5b50602780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905580156200237957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101206027549091506200243f9073ffffffffffffffffffffffffffffffffffffffff168262003153565b949350505050565b60225463ffffffff90811690841603620024e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c4600000000000000000000000000000000000000000000606482015260840162000683565b6022546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620025319260019263ffffffff9092169133918991899134918a919062003b75565b60405180910390a16022548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620026149062002ea2565b60265473ffffffffffffffffffffffffffffffffffffffff166333d6247d6200263c62000cb1565b6040518263ffffffff1660e01b81526004016200265b91815260200190565b600060405180830381600087803b1580156200267657600080fd5b505af11580156200268b573d6000803e3d6000fd5b50505050505050565b6000620026d783838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620031d792505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002a5b5760008080808080806200273a896004818d62003e22565b81019062002749919062003e4e565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462002814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000683565b73ffffffffffffffffffffffffffffffffffffffff86163014620028bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000683565b8a85146200294c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d4154434800000000000000000000000000000000000000606482015260840162000683565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002a07919062003d23565b6000604051808303816000865af19150503d806000811462002a46576040519150601f19603f3d011682016040523d82523d6000602084013e62002a4b565b606091505b5050505050505050505062002db7565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002b08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000683565b60008080808080808062002b208a6004818e62003e22565b81019062002b2f919062003ea9565b975097509750975097509750975097503373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161462002bfc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000683565b73ffffffffffffffffffffffffffffffffffffffff8716301462002ca3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000683565b6040805173ffffffffffffffffffffffffffffffffffffffff8a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002d67919062003d23565b6000604051808303816000865af19150503d806000811462002da6576040519150601f19603f3d011682016040523d82523d6000602084013e62002dab565b606091505b50505050505050505050505b5050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905262002e9c9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152620031de565b50505050565b80600162002eb3602060026200406e565b62002ebf91906200407c565b6021541062002f51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c00000000000000000000000000000000000000000000606482015260840162000683565b60016021600082825462002f66919062004096565b909155505060215460005b602081101562003010578160011660010362002fa657826001826020811062002f9e5762002f9e62003bee565b015550505050565b6001816020811062002fbc5762002fbc62003bee565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002ff9919062003c4c565b915080620030078162003c88565b91505062002f71565b5062002379620040b1565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052620023799084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002e19565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000cab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640162000683565b6000620031d08383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b600062003242826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620032f19092919063ffffffff16565b805190915015620023795780806020019051810190620032639190620039f8565b62002379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000683565b60606200243f84846000858573ffffffffffffffffffffffffffffffffffffffff85163b6200337d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000683565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620033a8919062003d23565b60006040518083038185875af1925050503d8060008114620033e7576040519150601f19603f3d011682016040523d82523d6000602084013e620033ec565b606091505b5091509150620033fe82828662003409565b979650505050505050565b606083156200341a575081620031d0565b8251156200342b5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006839190620040e0565b61182980620040f683390190565b73ffffffffffffffffffffffffffffffffffffffff811681146200349257600080fd5b50565b8035620034a2816200346f565b919050565b803563ffffffff81168114620034a257600080fd5b60008060008060008060a08789031215620034d657600080fd5b8635620034e3816200346f565b9550620034f360208801620034a7565b9450604087013562003505816200346f565b935060608701359250608087013567ffffffffffffffff808211156200352a57600080fd5b818901915089601f8301126200353f57600080fd5b8135818111156200354f57600080fd5b8a60208285010111156200356257600080fd5b6020830194508093505050509295509295509295565b600080604083850312156200358c57600080fd5b6200359783620034a7565b91506020830135620035a9816200346f565b809150509250929050565b600060208284031215620035c757600080fd5b8135620031d0816200346f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156200364d576200364d620035d4565b604052919050565b600082601f8301126200366757600080fd5b8135602067ffffffffffffffff821115620036865762003686620035d4565b8160051b6200369782820162003603565b9283528481018201928281019087851115620036b257600080fd5b83870192505b84831015620033fe57823582529183019190830190620036b8565b60008060008060808587031215620036ea57600080fd5b84359350602085013567ffffffffffffffff808211156200370a57600080fd5b620037188883890162003655565b94506040870135915080821682146200373057600080fd5b509396929550929360600135925050565b60ff811681146200349257600080fd5b600080600080600080600060e0888a0312156200376d57600080fd5b87356200377a8162003741565b96506200378a60208901620034a7565b955060408801356200379c816200346f565b9450620037ac60608901620034a7565b93506080880135620037be816200346f565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620037f857620037f8620035d4565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126200383657600080fd5b81356200384d6200384782620037db565b62003603565b8181528460208386010111156200386357600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620038a157600080fd5b8a3567ffffffffffffffff80821115620038ba57600080fd5b620038c88e838f0162003655565b9b50620038d860208e01620034a7565b9a5060408d0135995060608d01359850620038f660808e01620034a7565b97506200390660a08e0162003495565b96506200391660c08e01620034a7565b95506200392660e08e0162003495565b94506101008d013593506101208d01359150808211156200394657600080fd5b50620039558d828e0162003824565b9150509295989b9194979a5092959850565b6000602082840312156200397a57600080fd5b5035919050565b6000806000606084860312156200399757600080fd5b620039a284620034a7565b92506020840135620039b4816200346f565b9150604084013567ffffffffffffffff811115620039d157600080fd5b620039df8682870162003824565b9150509250925092565b80151581146200349257600080fd5b60006020828403121562003a0b57600080fd5b8151620031d081620039e9565b60005b8381101562003a3557818101518382015260200162003a1b565b8381111562002e9c5750506000910152565b600082601f83011262003a5957600080fd5b815162003a6a6200384782620037db565b81815284602083860101111562003a8057600080fd5b6200243f82602083016020870162003a18565b60006020828403121562003aa657600080fd5b815167ffffffffffffffff81111562003abe57600080fd5b6200243f8482850162003a47565b60006020828403121562003adf57600080fd5b8151620031d08162003741565b6000815180845262003b0681602086016020860162003a18565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60608152600062003b4d606083018662003aec565b828103602084015262003b61818662003aec565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003bd58285018762003aec565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003c83577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003cbc5762003cbc62003c1d565b5060010190565b60006020828403121562003cd657600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003d1a606083018462003aec565b95945050505050565b6000825162003d3781846020870162003a18565b9190910192915050565b60008060006060848603121562003d5757600080fd5b835167ffffffffffffffff8082111562003d7057600080fd5b62003d7e8783880162003a47565b9450602086015191508082111562003d9557600080fd5b5062003da48682870162003a47565b925050604084015162003db78162003741565b809150509250925092565b60a08152600062003dd760a083018862003aec565b828103602084015262003deb818862003aec565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000808585111562003e3357600080fd5b8386111562003e4157600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003e6a57600080fd5b873562003e77816200346f565b9650602088013562003e89816200346f565b955060408801359450606088013593506080880135620037be8162003741565b600080600080600080600080610100898b03121562003ec757600080fd5b883562003ed4816200346f565b9750602089013562003ee6816200346f565b96506040890135955060608901359450608089013562003f0681620039e9565b935060a089013562003f188162003741565b979a969950949793969295929450505060c08201359160e0013590565b600181815b8085111562003f9457817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003f785762003f7862003c1d565b8085161562003f8657918102915b93841c939080029062003f3a565b509250929050565b60008262003fad5750600162000cab565b8162003fbc5750600062000cab565b816001811462003fd5576002811462003fe05762004000565b600191505062000cab565b60ff84111562003ff45762003ff462003c1d565b50506001821b62000cab565b5060208310610133831016604e8410600b841016171562004025575081810a62000cab565b62004031838362003f35565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562004066576200406662003c1d565b029392505050565b6000620031d0838362003f9c565b60008282101562004091576200409162003c1d565b500390565b60008219821115620040ac57620040ac62003c1d565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b602081526000620031d0602083018462003aec56fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a2646970667358221220bdf94d69e63e347f03bee03a33cb2ab4b50d84e75b48c38164c94a1a1647481d64736f6c634300080f0033", + "deployedBytecode": "0x6080604052600436106200017b5760003560e01c806381b1c17411620000cf578063d02103ca116200007d578063e73758811162000060578063e73758811462000589578063ed6be5c914620005bd578063ff634ed714620005d457600080fd5b8063d02103ca1462000543578063d96a15f7146200057257600080fd5b8063a08e8a0811620000b2578063a08e8a0814620004bf578063b7e6a7d414620004e9578063bab161bf146200050e57600080fd5b806381b1c17414620004535780638624c35c146200049a57600080fd5b80633ae05047116200012d5780633e19704311620001105780633e19704314620003155780634638554914620004095780637b6323c1146200042e57600080fd5b80633ae0504714620002c75780633da8168214620002df57600080fd5b80632dfdf0b511620001625780632dfdf0b514620001e85780632f3a3d5d146200020f578063318aee3d146200023e57600080fd5b80630871e971146200018057806322e95f2c1462000199575b600080fd5b6200019762000191366004620034bc565b620005eb565b005b348015620001a657600080fd5b50620001be620001b836600462003578565b62000bdf565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015620001f557600080fd5b506200020060215481565b604051908152602001620001df565b3480156200021c57600080fd5b50602754620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200024b57600080fd5b50620002956200025d366004620035b4565b60256020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201620001df565b348015620002d457600080fd5b506200020062000cb1565b348015620002ec57600080fd5b5062000304620002fe366004620036d3565b62000da4565b6040519015158152602001620001df565b3480156200032257600080fd5b50620002006200033436600462003751565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200041657600080fd5b50620001976200042836600462003880565b62000ea4565b3480156200043b57600080fd5b50620001976200044d36600462003880565b6200165f565b3480156200046057600080fd5b50620001be6200047236600462003967565b60246020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620004a757600080fd5b5062000197620004b936600462003578565b6200210a565b348015620004cc57600080fd5b50620004d6600081565b60405160ff9091168152602001620001df565b348015620004f657600080fd5b50620001be6200050836600462003578565b6200237e565b3480156200051b57600080fd5b506022546200052d9063ffffffff1681565b60405163ffffffff9091168152602001620001df565b3480156200055057600080fd5b50602654620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b620001976200058336600462003981565b62002447565b3480156200059657600080fd5b5062000304620005a836600462003967565b60236020526000908152604090205460ff1681565b348015620005ca57600080fd5b506200052d600081565b348015620005e157600080fd5b50620004d6600181565b60225463ffffffff908116908616036200068c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff891662000748578534146200073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c55450000000000000000000000000000000000606482015260840162000683565b6000915062000a5c565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526025602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000849576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562000810573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008369190620039f8565b5060208101518151909450925062000a5a565b84156200085e576200085e8a88888862002694565b6200088273ffffffffffffffffffffffffffffffffffffffff8b1633308a62002dbe565b899350602260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200092e919081019062003a93565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200097a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620009c2919081019062003a93565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a34919062003acc565b60405160200162000a489392919062003b38565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162000a9e98979695949392919062003b75565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000b599062002ea2565b60265473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000b8162000cb1565b6040518263ffffffff1660e01b815260040162000ba091815260200190565b600060405180830381600087803b15801562000bbb57600080fd5b505af115801562000bd0573d6000803e3d6000fd5b50505050505050505050505050565b600060246000848460405160200162000c4e92919060e09290921b7fffffffff0000000000000000000000000000000000000000000000000000000016825260601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600482015260180190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181528151602092830120835290820192909252016000205473ffffffffffffffffffffffffffffffffffffffff1690505b92915050565b602154600090819081805b602081101562000d9b578260011660010362000d1c576001816020811062000ce85762000ce862003bee565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000d49565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000d5660028462003c4c565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000d929062003c88565b91505062000cbc565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000e97578160011660010362000e215786818151811062000ddf5762000ddf62003bee565b60200260200101518360405160200162000e03929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000e73565b8287828151811062000e375762000e3762003bee565b602002602001015160405160200162000e5a929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000e8060028362003c4c565b91508062000e8e8162003c88565b91505062000db4565b5050909114949350505050565b63ffffffff891660009081526023602052604090205460ff161562000f4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d4544000000000000000000000000000000000000000000000000000000606482015260840162000683565b6026546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000fe5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200100b919062003cc3565b6000036200109c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000606482015260840162000683565b60225463ffffffff85811691161462001138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000606482015260840162000683565b60225463ffffffff16620012b6578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062001222905b8b8b63ffffffff168a62000da4565b620012b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b62001420565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062001392905b8b8b63ffffffff168b62000da4565b62001420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b63ffffffff891660009081526023602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff85169084906200148e9089908b90879060240162003cdd565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001511919062003d23565b60006040518083038185875af1925050503d806000811462001550576040519150601f19603f3d011682016040523d82523d6000602084013e62001555565b606091505b5050905080620015e7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c454400000000000000000000000000000000000000000000000000000000606482015260840162000683565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b63ffffffff891660009081526023602052604090205460ff1615620016e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d45440000604482015260640162000683565b6026546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af11580156200177a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017a0919062003cc3565b60000362001831576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d41544348000000000000000000000000000000000000606482015260840162000683565b60225463ffffffff858116911614620018cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d41544348000000000000000000000000000000606482015260840162000683565b60225463ffffffff16620019fc578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200198e9062001213565b620019f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b62001b17565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062001aaf9062001383565b62001b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b63ffffffff8916600090815260236020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff851662001c88576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001baa919062003d23565b60006040518083038185875af1925050503d806000811462001be9576040519150601f19603f3d011682016040523d82523d6000602084013e62001bee565b606091505b505090508062001c81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f4544000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b5062002093565b60225463ffffffff9081169087160362001cc55762001cbf73ffffffffffffffffffffffffffffffffffffffff861684846200301b565b62002093565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152602490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001ff25760275460009062001db09073ffffffffffffffffffffffffffffffffffffffff168462003073565b905060008060008680602001905181019062001dcd919062003d41565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001e1695949392919062003dc2565b600060405180830381600087803b15801562001e3157600080fd5b505af115801562001e46573d6000803e3d6000fd5b50505050836024600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250602560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001fe09392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062002090565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562002068573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200208e9190620039f8565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff16158080156200212b5750600054600160ff909116105b80620021475750303b15801562002147575060005460ff166001145b620021d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840162000683565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156200223457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b602280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055602680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055604051620022b29062003461565b604051809103906000f080158015620022cf573d6000803e3d6000fd5b50602780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905580156200237957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101206027549091506200243f9073ffffffffffffffffffffffffffffffffffffffff168262003153565b949350505050565b60225463ffffffff90811690841603620024e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c4600000000000000000000000000000000000000000000606482015260840162000683565b6022546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620025319260019263ffffffff9092169133918991899134918a919062003b75565b60405180910390a16022548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620026149062002ea2565b60265473ffffffffffffffffffffffffffffffffffffffff166333d6247d6200263c62000cb1565b6040518263ffffffff1660e01b81526004016200265b91815260200190565b600060405180830381600087803b1580156200267657600080fd5b505af11580156200268b573d6000803e3d6000fd5b50505050505050565b6000620026d783838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620031d792505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002a5b5760008080808080806200273a896004818d62003e22565b81019062002749919062003e4e565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462002814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000683565b73ffffffffffffffffffffffffffffffffffffffff86163014620028bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000683565b8a85146200294c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d4154434800000000000000000000000000000000000000606482015260840162000683565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002a07919062003d23565b6000604051808303816000865af19150503d806000811462002a46576040519150601f19603f3d011682016040523d82523d6000602084013e62002a4b565b606091505b5050505050505050505062002db7565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002b08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000683565b60008080808080808062002b208a6004818e62003e22565b81019062002b2f919062003ea9565b975097509750975097509750975097503373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161462002bfc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000683565b73ffffffffffffffffffffffffffffffffffffffff8716301462002ca3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000683565b6040805173ffffffffffffffffffffffffffffffffffffffff8a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002d67919062003d23565b6000604051808303816000865af19150503d806000811462002da6576040519150601f19603f3d011682016040523d82523d6000602084013e62002dab565b606091505b50505050505050505050505b5050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905262002e9c9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152620031de565b50505050565b80600162002eb3602060026200406e565b62002ebf91906200407c565b6021541062002f51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c00000000000000000000000000000000000000000000606482015260840162000683565b60016021600082825462002f66919062004096565b909155505060215460005b602081101562003010578160011660010362002fa657826001826020811062002f9e5762002f9e62003bee565b015550505050565b6001816020811062002fbc5762002fbc62003bee565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002ff9919062003c4c565b915080620030078162003c88565b91505062002f71565b5062002379620040b1565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052620023799084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002e19565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000cab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640162000683565b6000620031d08383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b600062003242826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620032f19092919063ffffffff16565b805190915015620023795780806020019051810190620032639190620039f8565b62002379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000683565b60606200243f84846000858573ffffffffffffffffffffffffffffffffffffffff85163b6200337d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000683565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620033a8919062003d23565b60006040518083038185875af1925050503d8060008114620033e7576040519150601f19603f3d011682016040523d82523d6000602084013e620033ec565b606091505b5091509150620033fe82828662003409565b979650505050505050565b606083156200341a575081620031d0565b8251156200342b5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006839190620040e0565b61182980620040f683390190565b73ffffffffffffffffffffffffffffffffffffffff811681146200349257600080fd5b50565b8035620034a2816200346f565b919050565b803563ffffffff81168114620034a257600080fd5b60008060008060008060a08789031215620034d657600080fd5b8635620034e3816200346f565b9550620034f360208801620034a7565b9450604087013562003505816200346f565b935060608701359250608087013567ffffffffffffffff808211156200352a57600080fd5b818901915089601f8301126200353f57600080fd5b8135818111156200354f57600080fd5b8a60208285010111156200356257600080fd5b6020830194508093505050509295509295509295565b600080604083850312156200358c57600080fd5b6200359783620034a7565b91506020830135620035a9816200346f565b809150509250929050565b600060208284031215620035c757600080fd5b8135620031d0816200346f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156200364d576200364d620035d4565b604052919050565b600082601f8301126200366757600080fd5b8135602067ffffffffffffffff821115620036865762003686620035d4565b8160051b6200369782820162003603565b9283528481018201928281019087851115620036b257600080fd5b83870192505b84831015620033fe57823582529183019190830190620036b8565b60008060008060808587031215620036ea57600080fd5b84359350602085013567ffffffffffffffff808211156200370a57600080fd5b620037188883890162003655565b94506040870135915080821682146200373057600080fd5b509396929550929360600135925050565b60ff811681146200349257600080fd5b600080600080600080600060e0888a0312156200376d57600080fd5b87356200377a8162003741565b96506200378a60208901620034a7565b955060408801356200379c816200346f565b9450620037ac60608901620034a7565b93506080880135620037be816200346f565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620037f857620037f8620035d4565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126200383657600080fd5b81356200384d6200384782620037db565b62003603565b8181528460208386010111156200386357600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620038a157600080fd5b8a3567ffffffffffffffff80821115620038ba57600080fd5b620038c88e838f0162003655565b9b50620038d860208e01620034a7565b9a5060408d0135995060608d01359850620038f660808e01620034a7565b97506200390660a08e0162003495565b96506200391660c08e01620034a7565b95506200392660e08e0162003495565b94506101008d013593506101208d01359150808211156200394657600080fd5b50620039558d828e0162003824565b9150509295989b9194979a5092959850565b6000602082840312156200397a57600080fd5b5035919050565b6000806000606084860312156200399757600080fd5b620039a284620034a7565b92506020840135620039b4816200346f565b9150604084013567ffffffffffffffff811115620039d157600080fd5b620039df8682870162003824565b9150509250925092565b80151581146200349257600080fd5b60006020828403121562003a0b57600080fd5b8151620031d081620039e9565b60005b8381101562003a3557818101518382015260200162003a1b565b8381111562002e9c5750506000910152565b600082601f83011262003a5957600080fd5b815162003a6a6200384782620037db565b81815284602083860101111562003a8057600080fd5b6200243f82602083016020870162003a18565b60006020828403121562003aa657600080fd5b815167ffffffffffffffff81111562003abe57600080fd5b6200243f8482850162003a47565b60006020828403121562003adf57600080fd5b8151620031d08162003741565b6000815180845262003b0681602086016020860162003a18565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60608152600062003b4d606083018662003aec565b828103602084015262003b61818662003aec565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003bd58285018762003aec565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003c83577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003cbc5762003cbc62003c1d565b5060010190565b60006020828403121562003cd657600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003d1a606083018462003aec565b95945050505050565b6000825162003d3781846020870162003a18565b9190910192915050565b60008060006060848603121562003d5757600080fd5b835167ffffffffffffffff8082111562003d7057600080fd5b62003d7e8783880162003a47565b9450602086015191508082111562003d9557600080fd5b5062003da48682870162003a47565b925050604084015162003db78162003741565b809150509250925092565b60a08152600062003dd760a083018862003aec565b828103602084015262003deb818862003aec565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000808585111562003e3357600080fd5b8386111562003e4157600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003e6a57600080fd5b873562003e77816200346f565b9650602088013562003e89816200346f565b955060408801359450606088013593506080880135620037be8162003741565b600080600080600080600080610100898b03121562003ec757600080fd5b883562003ed4816200346f565b9750602089013562003ee6816200346f565b96506040890135955060608901359450608089013562003f0681620039e9565b935060a089013562003f188162003741565b979a969950949793969295929450505060c08201359160e0013590565b600181815b8085111562003f9457817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003f785762003f7862003c1d565b8085161562003f8657918102915b93841c939080029062003f3a565b509250929050565b60008262003fad5750600162000cab565b8162003fbc5750600062000cab565b816001811462003fd5576002811462003fe05762004000565b600191505062000cab565b60ff84111562003ff45762003ff462003c1d565b50506001821b62000cab565b5060208310610133831016604e8410600b841016171562004025575081810a62000cab565b62004031838362003f35565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562004066576200406662003c1d565b029392505050565b6000620031d0838362003f9c565b60008282101562004091576200409162003c1d565b500390565b60008219821115620040ac57620040ac62003c1d565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b602081526000620031d0602083018462003aec56fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a2646970667358221220bdf94d69e63e347f03bee03a33cb2ab4b50d84e75b48c38164c94a1a1647481d64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/BridgeMock.json b/compiled-contracts/BridgeMock.json index 0ffe0a3ee..dd095fe44 100644 --- a/compiled-contracts/BridgeMock.json +++ b/compiled-contracts/BridgeMock.json @@ -712,8 +712,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50615fd8806100206000396000f3fe608060405260043610620001c35760003560e01c806381b1c17411620000f3578063bab161bf1162000095578063e7375881116200006c578063e73758811462000678578063ed6be5c914620006ac578063f2fde38b14620006c3578063ff634ed714620006e857600080fd5b8063bab161bf14620005fd578063d02103ca1462000632578063d96a15f7146200066157600080fd5b806391e57e2d11620000ca57806391e57e2d1462000596578063a08e8a0814620005ae578063b7e6a7d414620005d857600080fd5b806381b1c17414620004fd5780638624c35c14620005445780638da5cb5b146200056957600080fd5b8063318aee3d11620001695780633e19704311620001405780633e19704314620003a757806346385549146200049b578063715018a614620004c05780637b6323c114620004d857600080fd5b8063318aee3d14620002d05780633ae0504714620003595780633da81682146200037157600080fd5b80632c3f58cd116200019e5780632c3f58cd14620002555780632dfdf0b5146200027a5780632f3a3d5d14620002a157600080fd5b80630871e97114620001c857806322e95f2c14620001e15780632b5e42e71462000230575b600080fd5b620001df620001d936600462003b22565b620006ff565b005b348015620001ee57600080fd5b50620002066200020036600462003bde565b620007d5565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200023d57600080fd5b50620001df6200024f36600462003c1a565b62000878565b3480156200026257600080fd5b50620001df6200027436600462003c34565b62000887565b3480156200028757600080fd5b506200029260415481565b60405190815260200162000227565b348015620002ae57600080fd5b50604754620002069073ffffffffffffffffffffffffffffffffffffffff1681565b348015620002dd57600080fd5b5062000327620002ef36600462003c52565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000227565b3480156200036657600080fd5b5062000292620008c8565b3480156200037e57600080fd5b50620003966200039036600462003d71565b620009a2565b604051901515815260200162000227565b348015620003b457600080fd5b5062000292620003c636600462003def565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004a857600080fd5b50620001df620004ba36600462003f1e565b62000aa2565b348015620004cd57600080fd5b50620001df6200125d565b348015620004e557600080fd5b50620001df620004f736600462003f1e565b62001275565b3480156200050a57600080fd5b50620002066200051c36600462003c1a565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200055157600080fd5b50620001df6200056336600462003bde565b62001d20565b3480156200057657600080fd5b50607a5473ffffffffffffffffffffffffffffffffffffffff1662000206565b348015620005a357600080fd5b506200029260ac5481565b348015620005bb57600080fd5b50620005c5600081565b60405160ff909116815260200162000227565b348015620005e557600080fd5b5062000206620005f736600462003bde565b62001fb4565b3480156200060a57600080fd5b506042546200061c9063ffffffff1681565b60405163ffffffff909116815260200162000227565b3480156200063f57600080fd5b50604654620002069073ffffffffffffffffffffffffffffffffffffffff1681565b620001df6200067236600462004005565b6200207d565b3480156200068557600080fd5b50620003966200069736600462003c1a565b60436020526000908152604090205460ff1681565b348015620006b957600080fd5b506200061c600081565b348015620006d057600080fd5b50620001df620006e236600462003c52565b620022ca565b348015620006f557600080fd5b50620005c5600181565b60ac54341115620007bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b620007cd86868686868662002387565b505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6200088262002977565b60ac55565b6200089162002977565b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b6041546000908190815b60208110156200099a5781600116600103620009325760018160208110620008fe57620008fe6200406d565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000976565b82602182602081106200094957620009496200406d565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b62000983600283620040cb565b915080620009918162004107565b915050620008d2565b509092915050565b60008467ffffffffffffffff8416825b602081101562000a95578160011660010362000a1f57868181518110620009dd57620009dd6200406d565b60200260200101518360405160200162000a01929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000a71565b8287828151811062000a355762000a356200406d565b602002602001015160405160200162000a58929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000a7e600283620040cb565b91508062000a8c8162004107565b915050620009b2565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000b4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d45440000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000be3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c09919062004142565b60000362000c9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d4154434800000000000000000000006064820152608401620007b4565b60425463ffffffff85811691161462000d36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000006064820152608401620007b4565b60425463ffffffff1662000eb4578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062000e20905b8b8b63ffffffff168a620009a2565b62000eae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6200101e565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062000f90905b8b8b63ffffffff168b620009a2565b6200101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff85169084906200108c9089908b908790602401620041d7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f200000000000000000000000000000000000000000000000000000000179052516200110f91906200421d565b60006040518083038185875af1925050503d80600081146200114e576040519150601f19603f3d011682016040523d82523d6000602084013e62001153565b606091505b5050905080620011e5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b6200126762002977565b620012736000620029fa565b565b63ffffffff891660009081526043602052604090205460ff1615620012f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d454400006044820152606401620007b4565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001390573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013b6919062004142565b60000362001447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d415443480000000000000000000000000000000000006064820152608401620007b4565b60425463ffffffff858116911614620014e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d415443480000000000000000000000000000006064820152608401620007b4565b60425463ffffffff1662001612578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620015a49062000e11565b6200160c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007b4565b6200172d565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620016c59062000f81565b6200172d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007b4565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff85166200189e576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff8516908490604051620017c091906200421d565b60006040518083038185875af1925050503d8060008114620017ff576040519150601f19603f3d011682016040523d82523d6000602084013e62001804565b606091505b505090508062001897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f45440000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b5062001ca9565b60425463ffffffff90811690871603620018db57620018d573ffffffffffffffffffffffffffffffffffffffff8616848462002a71565b62001ca9565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001c0857604754600090620019c69073ffffffffffffffffffffffffffffffffffffffff168462002b47565b9050600080600086806020019051810190620019e3919062004287565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001a2c95949392919062004308565b600060405180830381600087803b15801562001a4757600080fd5b505af115801562001a5c573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001bf69392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062001ca6565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001c7e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ca4919062004377565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff161580801562001d415750600054600160ff909116105b8062001d5d5750303b15801562001d5d575060005460ff166001145b62001deb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007b4565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801562001e4a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841617905560405162001ec89062003aca565b604051809103906000f08015801562001ee5573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905562001f3562002c27565b62001f3f62002d6c565b6703782dace9d9000060ac55801562001faf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620020759073ffffffffffffffffffffffffffffffffffffffff168262002e0f565b949350505050565b60425463ffffffff908116908416036200211a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007b4565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620021679260019263ffffffff9092169133918991899134918a919062004397565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200224a9062002e93565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62002272620008c8565b6040518263ffffffff1660e01b81526004016200229191815260200190565b600060405180830381600087803b158015620022ac57600080fd5b505af1158015620022c1573d6000803e3d6000fd5b50505050505050565b620022d462002977565b73ffffffffffffffffffffffffffffffffffffffff811662002379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007b4565b6200238481620029fa565b50565b60425463ffffffff9081169086160362002424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007b4565b600080606073ffffffffffffffffffffffffffffffffffffffff8916620024e057853414620024d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007b4565b60009150620027f4565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620025e1576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af1158015620025a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620025ce919062004377565b50602081015181519094509250620027f2565b8415620025f657620025f68a8888886200300c565b6200261a73ffffffffffffffffffffffffffffffffffffffff8b1633308a62003736565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200267e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620026c6919081019062004410565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562002712573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200275a919081019062004410565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620027a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620027cc919062004449565b604051602001620027e09392919062004469565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876041546040516200283698979695949392919062004397565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620028f19062002e93565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62002919620008c8565b6040518263ffffffff1660e01b81526004016200293891815260200190565b600060405180830381600087803b1580156200295357600080fd5b505af115801562002968573d6000803e3d6000fd5b50505050505050505050505050565b607a5473ffffffffffffffffffffffffffffffffffffffff16331462001273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007b4565b607a805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262001faf9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526200379c565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401620007b4565b600054610100900460ff1662002cc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b60005b62002cd160016020620044a6565b81101562002384576021816020811062002cef5762002cef6200406d565b01546021826020811062002d075762002d076200406d565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002d429190620044c0565b6020811062002d555762002d556200406d565b01558062002d638162004107565b91505062002cc3565b600054610100900460ff1662002e05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b62001273620038af565b600062002e8c8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b80600162002ea46020600262004614565b62002eb09190620044a6565b6041541062002f42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007b4565b60016041600082825462002f579190620044c0565b909155505060415460005b602081101562003001578160011660010362002f9757826001826020811062002f8f5762002f8f6200406d565b015550505050565b6001816020811062002fad5762002fad6200406d565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002fea9190620040cb565b91508062002ff88162004107565b91505062002f62565b5062001faf62004622565b60006200304f83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200395392505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620033d3576000808080808080620030b2896004818d62004651565b810190620030c191906200467d565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16146200318c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007b4565b73ffffffffffffffffffffffffffffffffffffffff8616301462003233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007b4565b8a8514620032c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007b4565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e16916200337f91906200421d565b6000604051808303816000865af19150503d8060008114620033be576040519150601f19603f3d011682016040523d82523d6000602084013e620033c3565b606091505b505050505050505050506200372f565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462003480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007b4565b600080808080808080620034988a6004818e62004651565b810190620034a79190620046d8565b975097509750975097509750975097503373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161462003574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007b4565b73ffffffffffffffffffffffffffffffffffffffff871630146200361b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6040805173ffffffffffffffffffffffffffffffffffffffff8a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f1691620036df91906200421d565b6000604051808303816000865af19150503d80600081146200371e576040519150601f19603f3d011682016040523d82523d6000602084013e62003723565b606091505b50505050505050505050505b5050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052620037969085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002ac4565b50505050565b600062003800826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166200395a9092919063ffffffff16565b80519091501562001faf578080602001905181019062003821919062004377565b62001faf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007b4565b600054610100900460ff1662003948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b6200127333620029fa565b6020015190565b60606200207584846000858573ffffffffffffffffffffffffffffffffffffffff85163b620039e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007b4565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405162003a1191906200421d565b60006040518083038185875af1925050503d806000811462003a50576040519150601f19603f3d011682016040523d82523d6000602084013e62003a55565b606091505b509150915062003a6782828662003a72565b979650505050505050565b6060831562003a8357508162002e8c565b82511562003a945782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007b4919062004764565b611829806200477a83390190565b73ffffffffffffffffffffffffffffffffffffffff811681146200238457600080fd5b803562003b088162003ad8565b919050565b803563ffffffff8116811462003b0857600080fd5b60008060008060008060a0878903121562003b3c57600080fd5b863562003b498162003ad8565b955062003b596020880162003b0d565b9450604087013562003b6b8162003ad8565b935060608701359250608087013567ffffffffffffffff8082111562003b9057600080fd5b818901915089601f83011262003ba557600080fd5b81358181111562003bb557600080fd5b8a602082850101111562003bc857600080fd5b6020830194508093505050509295509295509295565b6000806040838503121562003bf257600080fd5b62003bfd8362003b0d565b9150602083013562003c0f8162003ad8565b809150509250929050565b60006020828403121562003c2d57600080fd5b5035919050565b60006020828403121562003c4757600080fd5b62002e8c8262003b0d565b60006020828403121562003c6557600080fd5b813562002e8c8162003ad8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171562003ceb5762003ceb62003c72565b604052919050565b600082601f83011262003d0557600080fd5b8135602067ffffffffffffffff82111562003d245762003d2462003c72565b8160051b62003d3582820162003ca1565b928352848101820192828101908785111562003d5057600080fd5b83870192505b8483101562003a675782358252918301919083019062003d56565b6000806000806080858703121562003d8857600080fd5b84359350602085013567ffffffffffffffff8082111562003da857600080fd5b62003db68883890162003cf3565b945060408701359150808216821462003dce57600080fd5b509396929550929360600135925050565b60ff811681146200238457600080fd5b600080600080600080600060e0888a03121562003e0b57600080fd5b873562003e188162003ddf565b965062003e286020890162003b0d565b9550604088013562003e3a8162003ad8565b945062003e4a6060890162003b0d565b9350608088013562003e5c8162003ad8565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562003e965762003e9662003c72565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011262003ed457600080fd5b813562003eeb62003ee58262003e79565b62003ca1565b81815284602083860101111562003f0157600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562003f3f57600080fd5b8a3567ffffffffffffffff8082111562003f5857600080fd5b62003f668e838f0162003cf3565b9b5062003f7660208e0162003b0d565b9a5060408d0135995060608d0135985062003f9460808e0162003b0d565b975062003fa460a08e0162003afb565b965062003fb460c08e0162003b0d565b955062003fc460e08e0162003afb565b94506101008d013593506101208d013591508082111562003fe457600080fd5b5062003ff38d828e0162003ec2565b9150509295989b9194979a5092959850565b6000806000606084860312156200401b57600080fd5b620040268462003b0d565b92506020840135620040388162003ad8565b9150604084013567ffffffffffffffff8111156200405557600080fd5b620040638682870162003ec2565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262004102577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200413b576200413b6200409c565b5060010190565b6000602082840312156200415557600080fd5b5051919050565b60005b83811015620041795781810151838201526020016200415f565b83811115620037965750506000910152565b60008151808452620041a58160208601602086016200415c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff831660208201526060604082015260006200421460608301846200418b565b95945050505050565b60008251620042318184602087016200415c565b9190910192915050565b600082601f8301126200424d57600080fd5b81516200425e62003ee58262003e79565b8181528460208386010111156200427457600080fd5b620020758260208301602087016200415c565b6000806000606084860312156200429d57600080fd5b835167ffffffffffffffff80821115620042b657600080fd5b620042c4878388016200423b565b94506020860151915080821115620042db57600080fd5b50620042ea868287016200423b565b9250506040840151620042fd8162003ddf565b809150509250925092565b60a0815260006200431d60a08301886200418b565b82810360208401526200433181886200418b565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b80151581146200238457600080fd5b6000602082840312156200438a57600080fd5b815162002e8c8162004368565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620043f7828501876200418b565b925080851660e085015250509998505050505050505050565b6000602082840312156200442357600080fd5b815167ffffffffffffffff8111156200443b57600080fd5b62002075848285016200423b565b6000602082840312156200445c57600080fd5b815162002e8c8162003ddf565b6060815260006200447e60608301866200418b565b82810360208401526200449281866200418b565b91505060ff83166040830152949350505050565b600082821015620044bb57620044bb6200409c565b500390565b60008219821115620044d657620044d66200409c565b500190565b600181815b808511156200453a57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156200451e576200451e6200409c565b808516156200452c57918102915b93841c9390800290620044e0565b509250929050565b600082620045535750600162000872565b81620045625750600062000872565b81600181146200457b57600281146200458657620045a6565b600191505062000872565b60ff8411156200459a576200459a6200409c565b50506001821b62000872565b5060208310610133831016604e8410600b8410161715620045cb575081810a62000872565b620045d78383620044db565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156200460c576200460c6200409c565b029392505050565b600062002e8c838362004542565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600080858511156200466257600080fd5b838611156200467057600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200469957600080fd5b8735620046a68162003ad8565b96506020880135620046b88162003ad8565b95506040880135945060608801359350608088013562003e5c8162003ddf565b600080600080600080600080610100898b031215620046f657600080fd5b8835620047038162003ad8565b97506020890135620047158162003ad8565b965060408901359550606089013594506080890135620047358162004368565b935060a0890135620047478162003ddf565b979a969950949793969295929450505060c08201359160e0013590565b60208152600062002e8c60208301846200418b56fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a26469706673582212204cbd90c00001c69b8915bc7e9f1f0630e7ce4669f77d2d4c62d1664879214b3164736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001c35760003560e01c806381b1c17411620000f3578063bab161bf1162000095578063e7375881116200006c578063e73758811462000678578063ed6be5c914620006ac578063f2fde38b14620006c3578063ff634ed714620006e857600080fd5b8063bab161bf14620005fd578063d02103ca1462000632578063d96a15f7146200066157600080fd5b806391e57e2d11620000ca57806391e57e2d1462000596578063a08e8a0814620005ae578063b7e6a7d414620005d857600080fd5b806381b1c17414620004fd5780638624c35c14620005445780638da5cb5b146200056957600080fd5b8063318aee3d11620001695780633e19704311620001405780633e19704314620003a757806346385549146200049b578063715018a614620004c05780637b6323c114620004d857600080fd5b8063318aee3d14620002d05780633ae0504714620003595780633da81682146200037157600080fd5b80632c3f58cd116200019e5780632c3f58cd14620002555780632dfdf0b5146200027a5780632f3a3d5d14620002a157600080fd5b80630871e97114620001c857806322e95f2c14620001e15780632b5e42e71462000230575b600080fd5b620001df620001d936600462003b22565b620006ff565b005b348015620001ee57600080fd5b50620002066200020036600462003bde565b620007d5565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200023d57600080fd5b50620001df6200024f36600462003c1a565b62000878565b3480156200026257600080fd5b50620001df6200027436600462003c34565b62000887565b3480156200028757600080fd5b506200029260415481565b60405190815260200162000227565b348015620002ae57600080fd5b50604754620002069073ffffffffffffffffffffffffffffffffffffffff1681565b348015620002dd57600080fd5b5062000327620002ef36600462003c52565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000227565b3480156200036657600080fd5b5062000292620008c8565b3480156200037e57600080fd5b50620003966200039036600462003d71565b620009a2565b604051901515815260200162000227565b348015620003b457600080fd5b5062000292620003c636600462003def565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004a857600080fd5b50620001df620004ba36600462003f1e565b62000aa2565b348015620004cd57600080fd5b50620001df6200125d565b348015620004e557600080fd5b50620001df620004f736600462003f1e565b62001275565b3480156200050a57600080fd5b50620002066200051c36600462003c1a565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200055157600080fd5b50620001df6200056336600462003bde565b62001d20565b3480156200057657600080fd5b50607a5473ffffffffffffffffffffffffffffffffffffffff1662000206565b348015620005a357600080fd5b506200029260ac5481565b348015620005bb57600080fd5b50620005c5600081565b60405160ff909116815260200162000227565b348015620005e557600080fd5b5062000206620005f736600462003bde565b62001fb4565b3480156200060a57600080fd5b506042546200061c9063ffffffff1681565b60405163ffffffff909116815260200162000227565b3480156200063f57600080fd5b50604654620002069073ffffffffffffffffffffffffffffffffffffffff1681565b620001df6200067236600462004005565b6200207d565b3480156200068557600080fd5b50620003966200069736600462003c1a565b60436020526000908152604090205460ff1681565b348015620006b957600080fd5b506200061c600081565b348015620006d057600080fd5b50620001df620006e236600462003c52565b620022ca565b348015620006f557600080fd5b50620005c5600181565b60ac54341115620007bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b620007cd86868686868662002387565b505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6200088262002977565b60ac55565b6200089162002977565b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b6041546000908190815b60208110156200099a5781600116600103620009325760018160208110620008fe57620008fe6200406d565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000976565b82602182602081106200094957620009496200406d565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b62000983600283620040cb565b915080620009918162004107565b915050620008d2565b509092915050565b60008467ffffffffffffffff8416825b602081101562000a95578160011660010362000a1f57868181518110620009dd57620009dd6200406d565b60200260200101518360405160200162000a01929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000a71565b8287828151811062000a355762000a356200406d565b602002602001015160405160200162000a58929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000a7e600283620040cb565b91508062000a8c8162004107565b915050620009b2565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000b4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d45440000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000be3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c09919062004142565b60000362000c9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d4154434800000000000000000000006064820152608401620007b4565b60425463ffffffff85811691161462000d36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000006064820152608401620007b4565b60425463ffffffff1662000eb4578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062000e20905b8b8b63ffffffff168a620009a2565b62000eae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6200101e565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062000f90905b8b8b63ffffffff168b620009a2565b6200101e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff85169084906200108c9089908b908790602401620041d7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f200000000000000000000000000000000000000000000000000000000179052516200110f91906200421d565b60006040518083038185875af1925050503d80600081146200114e576040519150601f19603f3d011682016040523d82523d6000602084013e62001153565b606091505b5050905080620011e5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b6200126762002977565b620012736000620029fa565b565b63ffffffff891660009081526043602052604090205460ff1615620012f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d454400006044820152606401620007b4565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001390573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013b6919062004142565b60000362001447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d415443480000000000000000000000000000000000006064820152608401620007b4565b60425463ffffffff858116911614620014e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d415443480000000000000000000000000000006064820152608401620007b4565b60425463ffffffff1662001612578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620015a49062000e11565b6200160c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007b4565b6200172d565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620016c59062000f81565b6200172d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007b4565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff85166200189e576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff8516908490604051620017c091906200421d565b60006040518083038185875af1925050503d8060008114620017ff576040519150601f19603f3d011682016040523d82523d6000602084013e62001804565b606091505b505090508062001897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f45440000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b5062001ca9565b60425463ffffffff90811690871603620018db57620018d573ffffffffffffffffffffffffffffffffffffffff8616848462002a71565b62001ca9565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001c0857604754600090620019c69073ffffffffffffffffffffffffffffffffffffffff168462002b47565b9050600080600086806020019051810190620019e3919062004287565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001a2c95949392919062004308565b600060405180830381600087803b15801562001a4757600080fd5b505af115801562001a5c573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001bf69392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062001ca6565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001c7e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ca4919062004377565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff161580801562001d415750600054600160ff909116105b8062001d5d5750303b15801562001d5d575060005460ff166001145b62001deb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007b4565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801562001e4a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841617905560405162001ec89062003aca565b604051809103906000f08015801562001ee5573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905562001f3562002c27565b62001f3f62002d6c565b6703782dace9d9000060ac55801562001faf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620020759073ffffffffffffffffffffffffffffffffffffffff168262002e0f565b949350505050565b60425463ffffffff908116908416036200211a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007b4565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620021679260019263ffffffff9092169133918991899134918a919062004397565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200224a9062002e93565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62002272620008c8565b6040518263ffffffff1660e01b81526004016200229191815260200190565b600060405180830381600087803b158015620022ac57600080fd5b505af1158015620022c1573d6000803e3d6000fd5b50505050505050565b620022d462002977565b73ffffffffffffffffffffffffffffffffffffffff811662002379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007b4565b6200238481620029fa565b50565b60425463ffffffff9081169086160362002424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007b4565b600080606073ffffffffffffffffffffffffffffffffffffffff8916620024e057853414620024d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007b4565b60009150620027f4565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620025e1576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af1158015620025a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620025ce919062004377565b50602081015181519094509250620027f2565b8415620025f657620025f68a8888886200300c565b6200261a73ffffffffffffffffffffffffffffffffffffffff8b1633308a62003736565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200267e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620026c6919081019062004410565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562002712573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200275a919081019062004410565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620027a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620027cc919062004449565b604051602001620027e09392919062004469565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876041546040516200283698979695949392919062004397565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620028f19062002e93565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62002919620008c8565b6040518263ffffffff1660e01b81526004016200293891815260200190565b600060405180830381600087803b1580156200295357600080fd5b505af115801562002968573d6000803e3d6000fd5b50505050505050505050505050565b607a5473ffffffffffffffffffffffffffffffffffffffff16331462001273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007b4565b607a805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262001faf9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526200379c565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401620007b4565b600054610100900460ff1662002cc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b60005b62002cd160016020620044a6565b81101562002384576021816020811062002cef5762002cef6200406d565b01546021826020811062002d075762002d076200406d565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002d429190620044c0565b6020811062002d555762002d556200406d565b01558062002d638162004107565b91505062002cc3565b600054610100900460ff1662002e05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b62001273620038af565b600062002e8c8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b80600162002ea46020600262004614565b62002eb09190620044a6565b6041541062002f42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007b4565b60016041600082825462002f579190620044c0565b909155505060415460005b602081101562003001578160011660010362002f9757826001826020811062002f8f5762002f8f6200406d565b015550505050565b6001816020811062002fad5762002fad6200406d565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002fea9190620040cb565b91508062002ff88162004107565b91505062002f62565b5062001faf62004622565b60006200304f83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200395392505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620033d3576000808080808080620030b2896004818d62004651565b810190620030c191906200467d565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16146200318c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007b4565b73ffffffffffffffffffffffffffffffffffffffff8616301462003233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007b4565b8a8514620032c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007b4565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e16916200337f91906200421d565b6000604051808303816000865af19150503d8060008114620033be576040519150601f19603f3d011682016040523d82523d6000602084013e620033c3565b606091505b505050505050505050506200372f565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462003480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007b4565b600080808080808080620034988a6004818e62004651565b810190620034a79190620046d8565b975097509750975097509750975097503373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161462003574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007b4565b73ffffffffffffffffffffffffffffffffffffffff871630146200361b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6040805173ffffffffffffffffffffffffffffffffffffffff8a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f1691620036df91906200421d565b6000604051808303816000865af19150503d80600081146200371e576040519150601f19603f3d011682016040523d82523d6000602084013e62003723565b606091505b50505050505050505050505b5050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052620037969085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002ac4565b50505050565b600062003800826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166200395a9092919063ffffffff16565b80519091501562001faf578080602001905181019062003821919062004377565b62001faf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007b4565b600054610100900460ff1662003948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b6200127333620029fa565b6020015190565b60606200207584846000858573ffffffffffffffffffffffffffffffffffffffff85163b620039e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007b4565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405162003a1191906200421d565b60006040518083038185875af1925050503d806000811462003a50576040519150601f19603f3d011682016040523d82523d6000602084013e62003a55565b606091505b509150915062003a6782828662003a72565b979650505050505050565b6060831562003a8357508162002e8c565b82511562003a945782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007b4919062004764565b611829806200477a83390190565b73ffffffffffffffffffffffffffffffffffffffff811681146200238457600080fd5b803562003b088162003ad8565b919050565b803563ffffffff8116811462003b0857600080fd5b60008060008060008060a0878903121562003b3c57600080fd5b863562003b498162003ad8565b955062003b596020880162003b0d565b9450604087013562003b6b8162003ad8565b935060608701359250608087013567ffffffffffffffff8082111562003b9057600080fd5b818901915089601f83011262003ba557600080fd5b81358181111562003bb557600080fd5b8a602082850101111562003bc857600080fd5b6020830194508093505050509295509295509295565b6000806040838503121562003bf257600080fd5b62003bfd8362003b0d565b9150602083013562003c0f8162003ad8565b809150509250929050565b60006020828403121562003c2d57600080fd5b5035919050565b60006020828403121562003c4757600080fd5b62002e8c8262003b0d565b60006020828403121562003c6557600080fd5b813562002e8c8162003ad8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171562003ceb5762003ceb62003c72565b604052919050565b600082601f83011262003d0557600080fd5b8135602067ffffffffffffffff82111562003d245762003d2462003c72565b8160051b62003d3582820162003ca1565b928352848101820192828101908785111562003d5057600080fd5b83870192505b8483101562003a675782358252918301919083019062003d56565b6000806000806080858703121562003d8857600080fd5b84359350602085013567ffffffffffffffff8082111562003da857600080fd5b62003db68883890162003cf3565b945060408701359150808216821462003dce57600080fd5b509396929550929360600135925050565b60ff811681146200238457600080fd5b600080600080600080600060e0888a03121562003e0b57600080fd5b873562003e188162003ddf565b965062003e286020890162003b0d565b9550604088013562003e3a8162003ad8565b945062003e4a6060890162003b0d565b9350608088013562003e5c8162003ad8565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562003e965762003e9662003c72565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011262003ed457600080fd5b813562003eeb62003ee58262003e79565b62003ca1565b81815284602083860101111562003f0157600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562003f3f57600080fd5b8a3567ffffffffffffffff8082111562003f5857600080fd5b62003f668e838f0162003cf3565b9b5062003f7660208e0162003b0d565b9a5060408d0135995060608d0135985062003f9460808e0162003b0d565b975062003fa460a08e0162003afb565b965062003fb460c08e0162003b0d565b955062003fc460e08e0162003afb565b94506101008d013593506101208d013591508082111562003fe457600080fd5b5062003ff38d828e0162003ec2565b9150509295989b9194979a5092959850565b6000806000606084860312156200401b57600080fd5b620040268462003b0d565b92506020840135620040388162003ad8565b9150604084013567ffffffffffffffff8111156200405557600080fd5b620040638682870162003ec2565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262004102577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200413b576200413b6200409c565b5060010190565b6000602082840312156200415557600080fd5b5051919050565b60005b83811015620041795781810151838201526020016200415f565b83811115620037965750506000910152565b60008151808452620041a58160208601602086016200415c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff831660208201526060604082015260006200421460608301846200418b565b95945050505050565b60008251620042318184602087016200415c565b9190910192915050565b600082601f8301126200424d57600080fd5b81516200425e62003ee58262003e79565b8181528460208386010111156200427457600080fd5b620020758260208301602087016200415c565b6000806000606084860312156200429d57600080fd5b835167ffffffffffffffff80821115620042b657600080fd5b620042c4878388016200423b565b94506020860151915080821115620042db57600080fd5b50620042ea868287016200423b565b9250506040840151620042fd8162003ddf565b809150509250925092565b60a0815260006200431d60a08301886200418b565b82810360208401526200433181886200418b565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b80151581146200238457600080fd5b6000602082840312156200438a57600080fd5b815162002e8c8162004368565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620043f7828501876200418b565b925080851660e085015250509998505050505050505050565b6000602082840312156200442357600080fd5b815167ffffffffffffffff8111156200443b57600080fd5b62002075848285016200423b565b6000602082840312156200445c57600080fd5b815162002e8c8162003ddf565b6060815260006200447e60608301866200418b565b82810360208401526200449281866200418b565b91505060ff83166040830152949350505050565b600082821015620044bb57620044bb6200409c565b500390565b60008219821115620044d657620044d66200409c565b500190565b600181815b808511156200453a57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156200451e576200451e6200409c565b808516156200452c57918102915b93841c9390800290620044e0565b509250929050565b600082620045535750600162000872565b81620045625750600062000872565b81600181146200457b57600281146200458657620045a6565b600191505062000872565b60ff8411156200459a576200459a6200409c565b50506001821b62000872565b5060208310610133831016604e8410600b8410161715620045cb575081810a62000872565b620045d78383620044db565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156200460c576200460c6200409c565b029392505050565b600062002e8c838362004542565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600080858511156200466257600080fd5b838611156200467057600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200469957600080fd5b8735620046a68162003ad8565b96506020880135620046b88162003ad8565b95506040880135945060608801359350608088013562003e5c8162003ddf565b600080600080600080600080610100898b031215620046f657600080fd5b8835620047038162003ad8565b97506020890135620047158162003ad8565b965060408901359550606089013594506080890135620047358162004368565b935060a0890135620047478162003ddf565b979a969950949793969295929450505060c08201359160e0013590565b60208152600062002e8c60208301846200418b56fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a26469706673582212204cbd90c00001c69b8915bc7e9f1f0630e7ce4669f77d2d4c62d1664879214b3164736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50615ed1806100206000396000f3fe608060405260043610620001c35760003560e01c806381b1c17411620000f3578063bab161bf1162000095578063e7375881116200006c578063e73758811462000678578063ed6be5c914620006ac578063f2fde38b14620006c3578063ff634ed714620006e857600080fd5b8063bab161bf14620005fd578063d02103ca1462000632578063d96a15f7146200066157600080fd5b806391e57e2d11620000ca57806391e57e2d1462000596578063a08e8a0814620005ae578063b7e6a7d414620005d857600080fd5b806381b1c17414620004fd5780638624c35c14620005445780638da5cb5b146200056957600080fd5b8063318aee3d11620001695780633e19704311620001405780633e19704314620003a757806346385549146200049b578063715018a614620004c05780637b6323c114620004d857600080fd5b8063318aee3d14620002d05780633ae0504714620003595780633da81682146200037157600080fd5b80632c3f58cd116200019e5780632c3f58cd14620002555780632dfdf0b5146200027a5780632f3a3d5d14620002a157600080fd5b80630871e97114620001c857806322e95f2c14620001e15780632b5e42e71462000230575b600080fd5b620001df620001d936600462003a1b565b620006ff565b005b348015620001ee57600080fd5b50620002066200020036600462003ad7565b620007d5565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200023d57600080fd5b50620001df6200024f36600462003b13565b620008a7565b3480156200026257600080fd5b50620001df6200027436600462003b2d565b620008b6565b3480156200028757600080fd5b506200029260215481565b60405190815260200162000227565b348015620002ae57600080fd5b50602754620002069073ffffffffffffffffffffffffffffffffffffffff1681565b348015620002dd57600080fd5b5062000327620002ef36600462003b4b565b60256020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000227565b3480156200036657600080fd5b5062000292620008f7565b3480156200037e57600080fd5b50620003966200039036600462003c6a565b620009ea565b604051901515815260200162000227565b348015620003b457600080fd5b5062000292620003c636600462003ce8565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004a857600080fd5b50620001df620004ba36600462003e17565b62000aea565b348015620004cd57600080fd5b50620001df620012a5565b348015620004e557600080fd5b50620001df620004f736600462003e17565b620012bd565b3480156200050a57600080fd5b50620002066200051c36600462003b13565b60246020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200055157600080fd5b50620001df6200056336600462003ad7565b62001d68565b3480156200057657600080fd5b50605a5473ffffffffffffffffffffffffffffffffffffffff1662000206565b348015620005a357600080fd5b5062000292608c5481565b348015620005bb57600080fd5b50620005c5600081565b60405160ff909116815260200162000227565b348015620005e557600080fd5b5062000206620005f736600462003ad7565b62001ff2565b3480156200060a57600080fd5b506022546200061c9063ffffffff1681565b60405163ffffffff909116815260200162000227565b3480156200063f57600080fd5b50602654620002069073ffffffffffffffffffffffffffffffffffffffff1681565b620001df6200067236600462003efe565b620020bb565b3480156200068557600080fd5b50620003966200069736600462003b13565b60236020526000908152604090205460ff1681565b348015620006b957600080fd5b506200061c600081565b348015620006d057600080fd5b50620001df620006e236600462003b4b565b62002308565b348015620006f557600080fd5b50620005c5600181565b608c54341115620007bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b620007cd868686868686620023c5565b505050505050565b60006024600084846040516020016200084492919060e09290921b7fffffffff0000000000000000000000000000000000000000000000000000000016825260601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600482015260180190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181528151602092830120835290820192909252016000205473ffffffffffffffffffffffffffffffffffffffff1690505b92915050565b620008b1620029b5565b608c55565b620008c0620029b5565b602280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b602154600090819081805b6020811015620009e157826001166001036200096257600181602081106200092e576200092e62003f66565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200098f565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200099c60028462003fc4565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620009d89062004000565b91505062000902565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000add578160011660010362000a675786818151811062000a255762000a2562003f66565b60200260200101518360405160200162000a49929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000ab9565b8287828151811062000a7d5762000a7d62003f66565b602002602001015160405160200162000aa0929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000ac660028362003fc4565b91508062000ad48162004000565b915050620009fa565b5050909114949350505050565b63ffffffff891660009081526023602052604090205460ff161562000b92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d45440000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6026546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000c2b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c5191906200403b565b60000362000ce2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d4154434800000000000000000000006064820152608401620007b4565b60225463ffffffff85811691161462000d7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000006064820152608401620007b4565b60225463ffffffff1662000efc578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062000e68905b8b8b63ffffffff168a620009ea565b62000ef6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b62001066565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062000fd8905b8b8b63ffffffff168b620009ea565b62001066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b63ffffffff891660009081526023602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff8516908490620010d49089908b908790602401620040d0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001157919062004116565b60006040518083038185875af1925050503d806000811462001196576040519150601f19603f3d011682016040523d82523d6000602084013e6200119b565b606091505b50509050806200122d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b620012af620029b5565b620012bb600062002a38565b565b63ffffffff891660009081526023602052604090205460ff16156200133f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d454400006044820152606401620007b4565b6026546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af1158015620013d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013fe91906200403b565b6000036200148f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d415443480000000000000000000000000000000000006064820152608401620007b4565b60225463ffffffff8581169116146200152b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d415443480000000000000000000000000000006064820152608401620007b4565b60225463ffffffff166200165a578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620015ec9062000e59565b62001654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007b4565b62001775565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200170d9062000fc9565b62001775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007b4565b63ffffffff8916600090815260236020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff8516620018e6576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001808919062004116565b60006040518083038185875af1925050503d806000811462001847576040519150601f19603f3d011682016040523d82523d6000602084013e6200184c565b606091505b5050905080620018df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f45440000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b5062001cf1565b60225463ffffffff9081169087160362001923576200191d73ffffffffffffffffffffffffffffffffffffffff8616848462002aaf565b62001cf1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152602490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001c505760275460009062001a0e9073ffffffffffffffffffffffffffffffffffffffff168462002b85565b905060008060008680602001905181019062001a2b919062004180565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001a7495949392919062004201565b600060405180830381600087803b15801562001a8f57600080fd5b505af115801562001aa4573d6000803e3d6000fd5b50505050836024600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250602560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001c3e9392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062001cee565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001cc6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001cec919062004270565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff161580801562001d895750600054600160ff909116105b8062001da55750303b15801562001da5575060005460ff166001145b62001e33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007b4565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801562001e9257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b602280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055602680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841617905560405162001f1090620039c3565b604051809103906000f08015801562001f2d573d6000803e3d6000fd5b50602780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905562001f7d62002c65565b6703782dace9d90000608c55801562001fed57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120602754909150620020b39073ffffffffffffffffffffffffffffffffffffffff168262002d08565b949350505050565b60225463ffffffff9081169084160362002158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007b4565b6022546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620021a59260019263ffffffff9092169133918991899134918a919062004290565b60405180910390a16022548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620022889062002d8c565b60265473ffffffffffffffffffffffffffffffffffffffff166333d6247d620022b0620008f7565b6040518263ffffffff1660e01b8152600401620022cf91815260200190565b600060405180830381600087803b158015620022ea57600080fd5b505af1158015620022ff573d6000803e3d6000fd5b50505050505050565b62002312620029b5565b73ffffffffffffffffffffffffffffffffffffffff8116620023b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007b4565b620023c28162002a38565b50565b60225463ffffffff9081169086160362002462576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007b4565b600080606073ffffffffffffffffffffffffffffffffffffffff89166200251e5785341462002514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007b4565b6000915062002832565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200261f576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af1158015620025e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200260c919062004270565b5060208101518151909450925062002830565b84156200263457620026348a88888862002f05565b6200265873ffffffffffffffffffffffffffffffffffffffff8b1633308a6200362f565b899350602260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620026bc573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262002704919081019062004309565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562002750573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262002798919081019062004309565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620027e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200280a919062004342565b6040516020016200281e9392919062004362565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200287498979695949392919062004290565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a905260718082019390935281518082039093018352609101905280519101206200292f9062002d8c565b60265473ffffffffffffffffffffffffffffffffffffffff166333d6247d62002957620008f7565b6040518263ffffffff1660e01b81526004016200297691815260200190565b600060405180830381600087803b1580156200299157600080fd5b505af1158015620029a6573d6000803e3d6000fd5b50505050505050505050505050565b605a5473ffffffffffffffffffffffffffffffffffffffff163314620012bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007b4565b605a805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262001fed9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262003695565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff8116620008a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401620007b4565b600054610100900460ff1662002cfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b620012bb620037a8565b600062002d858383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b80600162002d9d60206002620044d8565b62002da99190620044e6565b6021541062002e3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007b4565b60016021600082825462002e50919062004500565b909155505060215460005b602081101562002efa578160011660010362002e9057826001826020811062002e885762002e8862003f66565b015550505050565b6001816020811062002ea65762002ea662003f66565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002ee3919062003fc4565b91508062002ef18162004000565b91505062002e5b565b5062001fed6200451b565b600062002f4883838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200384c92505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620032cc57600080808080808062002fab896004818d6200454a565b81019062002fba919062004576565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462003085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007b4565b73ffffffffffffffffffffffffffffffffffffffff861630146200312c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007b4565b8a8514620031bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007b4565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162003278919062004116565b6000604051808303816000865af19150503d8060008114620032b7576040519150601f19603f3d011682016040523d82523d6000602084013e620032bc565b606091505b5050505050505050505062003628565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462003379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007b4565b600080808080808080620033918a6004818e6200454a565b810190620033a09190620045d1565b975097509750975097509750975097503373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146200346d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007b4565b73ffffffffffffffffffffffffffffffffffffffff8716301462003514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6040805173ffffffffffffffffffffffffffffffffffffffff8a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f1691620035d8919062004116565b6000604051808303816000865af19150503d806000811462003617576040519150601f19603f3d011682016040523d82523d6000602084013e6200361c565b606091505b50505050505050505050505b5050505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526200368f9085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002b02565b50505050565b6000620036f9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620038539092919063ffffffff16565b80519091501562001fed57808060200190518101906200371a919062004270565b62001fed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007b4565b600054610100900460ff1662003841576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b620012bb3362002a38565b6020015190565b6060620020b384846000858573ffffffffffffffffffffffffffffffffffffffff85163b620038df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007b4565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516200390a919062004116565b60006040518083038185875af1925050503d806000811462003949576040519150601f19603f3d011682016040523d82523d6000602084013e6200394e565b606091505b5091509150620039608282866200396b565b979650505050505050565b606083156200397c57508162002d85565b8251156200398d5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007b491906200465d565b611829806200467383390190565b73ffffffffffffffffffffffffffffffffffffffff81168114620023c257600080fd5b803562003a0181620039d1565b919050565b803563ffffffff8116811462003a0157600080fd5b60008060008060008060a0878903121562003a3557600080fd5b863562003a4281620039d1565b955062003a526020880162003a06565b9450604087013562003a6481620039d1565b935060608701359250608087013567ffffffffffffffff8082111562003a8957600080fd5b818901915089601f83011262003a9e57600080fd5b81358181111562003aae57600080fd5b8a602082850101111562003ac157600080fd5b6020830194508093505050509295509295509295565b6000806040838503121562003aeb57600080fd5b62003af68362003a06565b9150602083013562003b0881620039d1565b809150509250929050565b60006020828403121562003b2657600080fd5b5035919050565b60006020828403121562003b4057600080fd5b62002d858262003a06565b60006020828403121562003b5e57600080fd5b813562002d8581620039d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171562003be45762003be462003b6b565b604052919050565b600082601f83011262003bfe57600080fd5b8135602067ffffffffffffffff82111562003c1d5762003c1d62003b6b565b8160051b62003c2e82820162003b9a565b928352848101820192828101908785111562003c4957600080fd5b83870192505b84831015620039605782358252918301919083019062003c4f565b6000806000806080858703121562003c8157600080fd5b84359350602085013567ffffffffffffffff8082111562003ca157600080fd5b62003caf8883890162003bec565b945060408701359150808216821462003cc757600080fd5b509396929550929360600135925050565b60ff81168114620023c257600080fd5b600080600080600080600060e0888a03121562003d0457600080fd5b873562003d118162003cd8565b965062003d216020890162003a06565b9550604088013562003d3381620039d1565b945062003d436060890162003a06565b9350608088013562003d5581620039d1565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562003d8f5762003d8f62003b6b565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011262003dcd57600080fd5b813562003de462003dde8262003d72565b62003b9a565b81815284602083860101111562003dfa57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562003e3857600080fd5b8a3567ffffffffffffffff8082111562003e5157600080fd5b62003e5f8e838f0162003bec565b9b5062003e6f60208e0162003a06565b9a5060408d0135995060608d0135985062003e8d60808e0162003a06565b975062003e9d60a08e01620039f4565b965062003ead60c08e0162003a06565b955062003ebd60e08e01620039f4565b94506101008d013593506101208d013591508082111562003edd57600080fd5b5062003eec8d828e0162003dbb565b9150509295989b9194979a5092959850565b60008060006060848603121562003f1457600080fd5b62003f1f8462003a06565b9250602084013562003f3181620039d1565b9150604084013567ffffffffffffffff81111562003f4e57600080fd5b62003f5c8682870162003dbb565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003ffb577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362004034576200403462003f95565b5060010190565b6000602082840312156200404e57600080fd5b5051919050565b60005b838110156200407257818101518382015260200162004058565b838111156200368f5750506000910152565b600081518084526200409e81602086016020860162004055565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff831660208201526060604082015260006200410d606083018462004084565b95945050505050565b600082516200412a81846020870162004055565b9190910192915050565b600082601f8301126200414657600080fd5b81516200415762003dde8262003d72565b8181528460208386010111156200416d57600080fd5b620020b382602083016020870162004055565b6000806000606084860312156200419657600080fd5b835167ffffffffffffffff80821115620041af57600080fd5b620041bd8783880162004134565b94506020860151915080821115620041d457600080fd5b50620041e38682870162004134565b9250506040840151620041f68162003cd8565b809150509250925092565b60a0815260006200421660a083018862004084565b82810360208401526200422a818862004084565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b8015158114620023c257600080fd5b6000602082840312156200428357600080fd5b815162002d858162004261565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620042f08285018762004084565b925080851660e085015250509998505050505050505050565b6000602082840312156200431c57600080fd5b815167ffffffffffffffff8111156200433457600080fd5b620020b38482850162004134565b6000602082840312156200435557600080fd5b815162002d858162003cd8565b60608152600062004377606083018662004084565b82810360208401526200438b818662004084565b91505060ff83166040830152949350505050565b600181815b80851115620043fe57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620043e257620043e262003f95565b80851615620043f057918102915b93841c9390800290620043a4565b509250929050565b6000826200441757506001620008a1565b816200442657506000620008a1565b81600181146200443f57600281146200444a576200446a565b6001915050620008a1565b60ff8411156200445e576200445e62003f95565b50506001821b620008a1565b5060208310610133831016604e8410600b84101617156200448f575081810a620008a1565b6200449b83836200439f565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620044d057620044d062003f95565b029392505050565b600062002d85838362004406565b600082821015620044fb57620044fb62003f95565b500390565b6000821982111562004516576200451662003f95565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600080858511156200455b57600080fd5b838611156200456957600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200459257600080fd5b87356200459f81620039d1565b96506020880135620045b181620039d1565b95506040880135945060608801359350608088013562003d558162003cd8565b600080600080600080600080610100898b031215620045ef57600080fd5b8835620045fc81620039d1565b975060208901356200460e81620039d1565b9650604089013595506060890135945060808901356200462e8162004261565b935060a0890135620046408162003cd8565b979a969950949793969295929450505060c08201359160e0013590565b60208152600062002d8560208301846200408456fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a2646970667358221220d7cde18e6d7b8fe67777fcee4434557617788d681d4f614a88f0dce823ec566f64736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001c35760003560e01c806381b1c17411620000f3578063bab161bf1162000095578063e7375881116200006c578063e73758811462000678578063ed6be5c914620006ac578063f2fde38b14620006c3578063ff634ed714620006e857600080fd5b8063bab161bf14620005fd578063d02103ca1462000632578063d96a15f7146200066157600080fd5b806391e57e2d11620000ca57806391e57e2d1462000596578063a08e8a0814620005ae578063b7e6a7d414620005d857600080fd5b806381b1c17414620004fd5780638624c35c14620005445780638da5cb5b146200056957600080fd5b8063318aee3d11620001695780633e19704311620001405780633e19704314620003a757806346385549146200049b578063715018a614620004c05780637b6323c114620004d857600080fd5b8063318aee3d14620002d05780633ae0504714620003595780633da81682146200037157600080fd5b80632c3f58cd116200019e5780632c3f58cd14620002555780632dfdf0b5146200027a5780632f3a3d5d14620002a157600080fd5b80630871e97114620001c857806322e95f2c14620001e15780632b5e42e71462000230575b600080fd5b620001df620001d936600462003a1b565b620006ff565b005b348015620001ee57600080fd5b50620002066200020036600462003ad7565b620007d5565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200023d57600080fd5b50620001df6200024f36600462003b13565b620008a7565b3480156200026257600080fd5b50620001df6200027436600462003b2d565b620008b6565b3480156200028757600080fd5b506200029260215481565b60405190815260200162000227565b348015620002ae57600080fd5b50602754620002069073ffffffffffffffffffffffffffffffffffffffff1681565b348015620002dd57600080fd5b5062000327620002ef36600462003b4b565b60256020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000227565b3480156200036657600080fd5b5062000292620008f7565b3480156200037e57600080fd5b50620003966200039036600462003c6a565b620009ea565b604051901515815260200162000227565b348015620003b457600080fd5b5062000292620003c636600462003ce8565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004a857600080fd5b50620001df620004ba36600462003e17565b62000aea565b348015620004cd57600080fd5b50620001df620012a5565b348015620004e557600080fd5b50620001df620004f736600462003e17565b620012bd565b3480156200050a57600080fd5b50620002066200051c36600462003b13565b60246020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200055157600080fd5b50620001df6200056336600462003ad7565b62001d68565b3480156200057657600080fd5b50605a5473ffffffffffffffffffffffffffffffffffffffff1662000206565b348015620005a357600080fd5b5062000292608c5481565b348015620005bb57600080fd5b50620005c5600081565b60405160ff909116815260200162000227565b348015620005e557600080fd5b5062000206620005f736600462003ad7565b62001ff2565b3480156200060a57600080fd5b506022546200061c9063ffffffff1681565b60405163ffffffff909116815260200162000227565b3480156200063f57600080fd5b50602654620002069073ffffffffffffffffffffffffffffffffffffffff1681565b620001df6200067236600462003efe565b620020bb565b3480156200068557600080fd5b50620003966200069736600462003b13565b60236020526000908152604090205460ff1681565b348015620006b957600080fd5b506200061c600081565b348015620006d057600080fd5b50620001df620006e236600462003b4b565b62002308565b348015620006f557600080fd5b50620005c5600181565b608c54341115620007bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b620007cd868686868686620023c5565b505050505050565b60006024600084846040516020016200084492919060e09290921b7fffffffff0000000000000000000000000000000000000000000000000000000016825260601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600482015260180190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181528151602092830120835290820192909252016000205473ffffffffffffffffffffffffffffffffffffffff1690505b92915050565b620008b1620029b5565b608c55565b620008c0620029b5565b602280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b602154600090819081805b6020811015620009e157826001166001036200096257600181602081106200092e576200092e62003f66565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200098f565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200099c60028462003fc4565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620009d89062004000565b91505062000902565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000add578160011660010362000a675786818151811062000a255762000a2562003f66565b60200260200101518360405160200162000a49929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000ab9565b8287828151811062000a7d5762000a7d62003f66565b602002602001015160405160200162000aa0929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000ac660028362003fc4565b91508062000ad48162004000565b915050620009fa565b5050909114949350505050565b63ffffffff891660009081526023602052604090205460ff161562000b92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d45440000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6026546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000c2b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c5191906200403b565b60000362000ce2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d4154434800000000000000000000006064820152608401620007b4565b60225463ffffffff85811691161462000d7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000006064820152608401620007b4565b60225463ffffffff1662000efc578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062000e68905b8b8b63ffffffff168a620009ea565b62000ef6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b62001066565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062000fd8905b8b8b63ffffffff168b620009ea565b62001066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b63ffffffff891660009081526023602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff8516908490620010d49089908b908790602401620040d0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001157919062004116565b60006040518083038185875af1925050503d806000811462001196576040519150601f19603f3d011682016040523d82523d6000602084013e6200119b565b606091505b50509050806200122d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b620012af620029b5565b620012bb600062002a38565b565b63ffffffff891660009081526023602052604090205460ff16156200133f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d454400006044820152606401620007b4565b6026546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af1158015620013d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013fe91906200403b565b6000036200148f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d415443480000000000000000000000000000000000006064820152608401620007b4565b60225463ffffffff8581169116146200152b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d415443480000000000000000000000000000006064820152608401620007b4565b60225463ffffffff166200165a578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620015ec9062000e59565b62001654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007b4565b62001775565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200170d9062000fc9565b62001775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007b4565b63ffffffff8916600090815260236020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff8516620018e6576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001808919062004116565b60006040518083038185875af1925050503d806000811462001847576040519150601f19603f3d011682016040523d82523d6000602084013e6200184c565b606091505b5050905080620018df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f45440000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b5062001cf1565b60225463ffffffff9081169087160362001923576200191d73ffffffffffffffffffffffffffffffffffffffff8616848462002aaf565b62001cf1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152602490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001c505760275460009062001a0e9073ffffffffffffffffffffffffffffffffffffffff168462002b85565b905060008060008680602001905181019062001a2b919062004180565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001a7495949392919062004201565b600060405180830381600087803b15801562001a8f57600080fd5b505af115801562001aa4573d6000803e3d6000fd5b50505050836024600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250602560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001c3e9392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062001cee565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001cc6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001cec919062004270565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff161580801562001d895750600054600160ff909116105b8062001da55750303b15801562001da5575060005460ff166001145b62001e33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007b4565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801562001e9257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b602280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055602680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841617905560405162001f1090620039c3565b604051809103906000f08015801562001f2d573d6000803e3d6000fd5b50602780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905562001f7d62002c65565b6703782dace9d90000608c55801562001fed57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120602754909150620020b39073ffffffffffffffffffffffffffffffffffffffff168262002d08565b949350505050565b60225463ffffffff9081169084160362002158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007b4565b6022546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620021a59260019263ffffffff9092169133918991899134918a919062004290565b60405180910390a16022548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620022889062002d8c565b60265473ffffffffffffffffffffffffffffffffffffffff166333d6247d620022b0620008f7565b6040518263ffffffff1660e01b8152600401620022cf91815260200190565b600060405180830381600087803b158015620022ea57600080fd5b505af1158015620022ff573d6000803e3d6000fd5b50505050505050565b62002312620029b5565b73ffffffffffffffffffffffffffffffffffffffff8116620023b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007b4565b620023c28162002a38565b50565b60225463ffffffff9081169086160362002462576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007b4565b600080606073ffffffffffffffffffffffffffffffffffffffff89166200251e5785341462002514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007b4565b6000915062002832565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200261f576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af1158015620025e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200260c919062004270565b5060208101518151909450925062002830565b84156200263457620026348a88888862002f05565b6200265873ffffffffffffffffffffffffffffffffffffffff8b1633308a6200362f565b899350602260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620026bc573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262002704919081019062004309565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562002750573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262002798919081019062004309565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620027e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200280a919062004342565b6040516020016200281e9392919062004362565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200287498979695949392919062004290565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a905260718082019390935281518082039093018352609101905280519101206200292f9062002d8c565b60265473ffffffffffffffffffffffffffffffffffffffff166333d6247d62002957620008f7565b6040518263ffffffff1660e01b81526004016200297691815260200190565b600060405180830381600087803b1580156200299157600080fd5b505af1158015620029a6573d6000803e3d6000fd5b50505050505050505050505050565b605a5473ffffffffffffffffffffffffffffffffffffffff163314620012bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007b4565b605a805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262001fed9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262003695565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff8116620008a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401620007b4565b600054610100900460ff1662002cfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b620012bb620037a8565b600062002d858383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b80600162002d9d60206002620044d8565b62002da99190620044e6565b6021541062002e3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007b4565b60016021600082825462002e50919062004500565b909155505060215460005b602081101562002efa578160011660010362002e9057826001826020811062002e885762002e8862003f66565b015550505050565b6001816020811062002ea65762002ea662003f66565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002ee3919062003fc4565b91508062002ef18162004000565b91505062002e5b565b5062001fed6200451b565b600062002f4883838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200384c92505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620032cc57600080808080808062002fab896004818d6200454a565b81019062002fba919062004576565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462003085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007b4565b73ffffffffffffffffffffffffffffffffffffffff861630146200312c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007b4565b8a8514620031bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007b4565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162003278919062004116565b6000604051808303816000865af19150503d8060008114620032b7576040519150601f19603f3d011682016040523d82523d6000602084013e620032bc565b606091505b5050505050505050505062003628565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462003379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007b4565b600080808080808080620033918a6004818e6200454a565b810190620033a09190620045d1565b975097509750975097509750975097503373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146200346d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007b4565b73ffffffffffffffffffffffffffffffffffffffff8716301462003514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6040805173ffffffffffffffffffffffffffffffffffffffff8a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f1691620035d8919062004116565b6000604051808303816000865af19150503d806000811462003617576040519150601f19603f3d011682016040523d82523d6000602084013e6200361c565b606091505b50505050505050505050505b5050505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526200368f9085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002b02565b50505050565b6000620036f9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620038539092919063ffffffff16565b80519091501562001fed57808060200190518101906200371a919062004270565b62001fed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007b4565b600054610100900460ff1662003841576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b620012bb3362002a38565b6020015190565b6060620020b384846000858573ffffffffffffffffffffffffffffffffffffffff85163b620038df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007b4565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516200390a919062004116565b60006040518083038185875af1925050503d806000811462003949576040519150601f19603f3d011682016040523d82523d6000602084013e6200394e565b606091505b5091509150620039608282866200396b565b979650505050505050565b606083156200397c57508162002d85565b8251156200398d5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007b491906200465d565b611829806200467383390190565b73ffffffffffffffffffffffffffffffffffffffff81168114620023c257600080fd5b803562003a0181620039d1565b919050565b803563ffffffff8116811462003a0157600080fd5b60008060008060008060a0878903121562003a3557600080fd5b863562003a4281620039d1565b955062003a526020880162003a06565b9450604087013562003a6481620039d1565b935060608701359250608087013567ffffffffffffffff8082111562003a8957600080fd5b818901915089601f83011262003a9e57600080fd5b81358181111562003aae57600080fd5b8a602082850101111562003ac157600080fd5b6020830194508093505050509295509295509295565b6000806040838503121562003aeb57600080fd5b62003af68362003a06565b9150602083013562003b0881620039d1565b809150509250929050565b60006020828403121562003b2657600080fd5b5035919050565b60006020828403121562003b4057600080fd5b62002d858262003a06565b60006020828403121562003b5e57600080fd5b813562002d8581620039d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171562003be45762003be462003b6b565b604052919050565b600082601f83011262003bfe57600080fd5b8135602067ffffffffffffffff82111562003c1d5762003c1d62003b6b565b8160051b62003c2e82820162003b9a565b928352848101820192828101908785111562003c4957600080fd5b83870192505b84831015620039605782358252918301919083019062003c4f565b6000806000806080858703121562003c8157600080fd5b84359350602085013567ffffffffffffffff8082111562003ca157600080fd5b62003caf8883890162003bec565b945060408701359150808216821462003cc757600080fd5b509396929550929360600135925050565b60ff81168114620023c257600080fd5b600080600080600080600060e0888a03121562003d0457600080fd5b873562003d118162003cd8565b965062003d216020890162003a06565b9550604088013562003d3381620039d1565b945062003d436060890162003a06565b9350608088013562003d5581620039d1565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562003d8f5762003d8f62003b6b565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011262003dcd57600080fd5b813562003de462003dde8262003d72565b62003b9a565b81815284602083860101111562003dfa57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562003e3857600080fd5b8a3567ffffffffffffffff8082111562003e5157600080fd5b62003e5f8e838f0162003bec565b9b5062003e6f60208e0162003a06565b9a5060408d0135995060608d0135985062003e8d60808e0162003a06565b975062003e9d60a08e01620039f4565b965062003ead60c08e0162003a06565b955062003ebd60e08e01620039f4565b94506101008d013593506101208d013591508082111562003edd57600080fd5b5062003eec8d828e0162003dbb565b9150509295989b9194979a5092959850565b60008060006060848603121562003f1457600080fd5b62003f1f8462003a06565b9250602084013562003f3181620039d1565b9150604084013567ffffffffffffffff81111562003f4e57600080fd5b62003f5c8682870162003dbb565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003ffb577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362004034576200403462003f95565b5060010190565b6000602082840312156200404e57600080fd5b5051919050565b60005b838110156200407257818101518382015260200162004058565b838111156200368f5750506000910152565b600081518084526200409e81602086016020860162004055565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff831660208201526060604082015260006200410d606083018462004084565b95945050505050565b600082516200412a81846020870162004055565b9190910192915050565b600082601f8301126200414657600080fd5b81516200415762003dde8262003d72565b8181528460208386010111156200416d57600080fd5b620020b382602083016020870162004055565b6000806000606084860312156200419657600080fd5b835167ffffffffffffffff80821115620041af57600080fd5b620041bd8783880162004134565b94506020860151915080821115620041d457600080fd5b50620041e38682870162004134565b9250506040840151620041f68162003cd8565b809150509250925092565b60a0815260006200421660a083018862004084565b82810360208401526200422a818862004084565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b8015158114620023c257600080fd5b6000602082840312156200428357600080fd5b815162002d858162004261565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620042f08285018762004084565b925080851660e085015250509998505050505050505050565b6000602082840312156200431c57600080fd5b815167ffffffffffffffff8111156200433457600080fd5b620020b38482850162004134565b6000602082840312156200435557600080fd5b815162002d858162003cd8565b60608152600062004377606083018662004084565b82810360208401526200438b818662004084565b91505060ff83166040830152949350505050565b600181815b80851115620043fe57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620043e257620043e262003f95565b80851615620043f057918102915b93841c9390800290620043a4565b509250929050565b6000826200441757506001620008a1565b816200442657506000620008a1565b81600181146200443f57600281146200444a576200446a565b6001915050620008a1565b60ff8411156200445e576200445e62003f95565b50506001821b620008a1565b5060208310610133831016604e8410600b84101617156200448f575081810a620008a1565b6200449b83836200439f565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620044d057620044d062003f95565b029392505050565b600062002d85838362004406565b600082821015620044fb57620044fb62003f95565b500390565b6000821982111562004516576200451662003f95565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600080858511156200455b57600080fd5b838611156200456957600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200459257600080fd5b87356200459f81620039d1565b96506020880135620045b181620039d1565b95506040880135945060608801359350608088013562003d558162003cd8565b600080600080600080600080610100898b031215620045ef57600080fd5b8835620045fc81620039d1565b975060208901356200460e81620039d1565b9650604089013595506060890135945060808901356200462e8162004261565b935060a0890135620046408162003cd8565b979a969950949793969295929450505060c08201359160e0013590565b60208152600062002d8560208301846200408456fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a2646970667358221220d7cde18e6d7b8fe67777fcee4434557617788d681d4f614a88f0dce823ec566f64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/Bridge.sol b/contracts/Bridge.sol index 9ed038ff7..f2a7d96c7 100644 --- a/contracts/Bridge.sol +++ b/contracts/Bridge.sol @@ -67,7 +67,6 @@ contract Bridge is DepositContract { networkID = _networkID; globalExitRootManager = _globalExitRootManager; tokenImplementation = address(new TokenWrapped()); - __DepositContract_init(); } /** diff --git a/contracts/lib/DepositContract.sol b/contracts/lib/DepositContract.sol index 4ddbdc9c6..cea1b28cf 100644 --- a/contracts/lib/DepositContract.sol +++ b/contracts/lib/DepositContract.sol @@ -19,30 +19,17 @@ contract DepositContract is Initializable { // leaf is inserted bytes32[_DEPOSIT_CONTRACT_TREE_DEPTH] internal _branch; - // Result of hashing zeroes for every level of the tree - bytes32[_DEPOSIT_CONTRACT_TREE_DEPTH] internal _zeroHashes; - // Counter of current deposits uint256 public depositCount; - function __DepositContract_init() internal onlyInitializing { - // Compute hashes in empty sparse Merkle tree - for ( - uint256 height = 0; - height < _DEPOSIT_CONTRACT_TREE_DEPTH - 1; - height++ - ) - _zeroHashes[height + 1] = keccak256( - abi.encodePacked(_zeroHashes[height], _zeroHashes[height]) - ); - } - /** * @notice Computes and returns the merkle root */ function getDepositRoot() public view returns (bytes32) { bytes32 node; uint256 size = depositCount; + bytes32 currentZeroHashHeight = 0; + for ( uint256 height = 0; height < _DEPOSIT_CONTRACT_TREE_DEPTH; @@ -50,8 +37,12 @@ contract DepositContract is Initializable { ) { if ((size & 1) == 1) node = keccak256(abi.encodePacked(_branch[height], node)); - else node = keccak256(abi.encodePacked(node, _zeroHashes[height])); + else + node = keccak256(abi.encodePacked(node, currentZeroHashHeight)); size /= 2; + currentZeroHashHeight = keccak256( + abi.encodePacked(currentZeroHashHeight, currentZeroHashHeight) + ); } return node; } diff --git a/contracts/mocks/BridgeMock.sol b/contracts/mocks/BridgeMock.sol index 878915d92..c51d85b95 100644 --- a/contracts/mocks/BridgeMock.sol +++ b/contracts/mocks/BridgeMock.sol @@ -21,7 +21,6 @@ contract BridgeMock is Bridge, OwnableUpgradeable { networkID = _networkID; globalExitRootManager = _globalExitRootManager; tokenImplementation = address(new TokenWrapped()); - __DepositContract_init(); __Ownable_init(); maxEtherBridge = 0.25 ether; } diff --git a/contracts/mocks/DepositContractMock.sol b/contracts/mocks/DepositContractMock.sol index 52437ccdd..8ed3928b9 100644 --- a/contracts/mocks/DepositContractMock.sol +++ b/contracts/mocks/DepositContractMock.sol @@ -12,9 +12,7 @@ contract DepositContractMock is DepositContract { initialize(); } - function initialize() public initializer { - __DepositContract_init(); - } + function initialize() public initializer {} /** * @notice Given the leaf data returns the leaf value diff --git a/docs/lib/DepositContract.md b/docs/lib/DepositContract.md index a4dfcc050..d82c81bf3 100644 --- a/docs/lib/DepositContract.md +++ b/docs/lib/DepositContract.md @@ -3,15 +3,6 @@ Based on the implementation of the deposit eth2.0 contract https://github.com/et ## Functions -### __DepositContract_init -```solidity - function __DepositContract_init( - ) internal -``` - - - - ### getDepositRoot ```solidity function getDepositRoot( diff --git a/test/contracts/bridgeMock.test.js b/test/contracts/bridgeMock.test.js index 708b6cb11..717c82c68 100644 --- a/test/contracts/bridgeMock.test.js +++ b/test/contracts/bridgeMock.test.js @@ -10,7 +10,7 @@ function calculateGlobalExitRoot(mainnetExitRoot, rollupExitRoot) { return ethers.utils.solidityKeccak256(['bytes32', 'bytes32'], [mainnetExitRoot, rollupExitRoot]); } -describe('Bridge Contract', () => { +describe('Bridge Mock Contract', () => { let deployer; let rollup; diff --git a/test/contracts/bridge_permit.test.js b/test/contracts/bridge_permit.test.js index 5d49ac460..198692b9f 100644 --- a/test/contracts/bridge_permit.test.js +++ b/test/contracts/bridge_permit.test.js @@ -18,7 +18,7 @@ function calculateGlobalExitRoot(mainnetExitRoot, rollupExitRoot) { return ethers.utils.solidityKeccak256(['bytes32', 'bytes32'], [mainnetExitRoot, rollupExitRoot]); } -describe('Bridge Contract', () => { +describe('Bridge Contract Permit tests', () => { let deployer; let rollup; From a1c1281976a66dff6459d3fc4767c3da02f5f6eb Mon Sep 17 00:00:00 2001 From: invocamanman Date: Fri, 11 Nov 2022 00:29:20 +0100 Subject: [PATCH 17/71] update PoE --- compiled-contracts/ProofOfEfficiency.json | 38 ++++++++++----- compiled-contracts/ProofOfEfficiencyMock.json | 47 +++++++++++++------ contracts/ProofOfEfficiency.sol | 40 +++++++++------- contracts/mocks/ProofOfEfficiencyMock.sol | 31 ++++++------ docs/ProofOfEfficiency.md | 2 +- test/contracts/proofOfEfficiency.test.js | 22 ++------- test/contracts/snark_stark_input.test.js | 2 +- 7 files changed, 103 insertions(+), 79 deletions(-) diff --git a/compiled-contracts/ProofOfEfficiency.json b/compiled-contracts/ProofOfEfficiency.json index 7141f5ce2..ccd19c35f 100644 --- a/compiled-contracts/ProofOfEfficiency.json +++ b/compiled-contracts/ProofOfEfficiency.json @@ -121,6 +121,12 @@ "name": "numBatch", "type": "uint64" }, + { + "indexed": false, + "internalType": "bytes32", + "name": "stateRoot", + "type": "bytes32" + }, { "indexed": true, "internalType": "address", @@ -171,13 +177,19 @@ "type": "function" }, { - "inputs": [], - "name": "calculateForceProverFee", + "inputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "name": "batchNumToStateRoot", "outputs": [ { - "internalType": "uint256", + "internalType": "bytes32", "name": "", - "type": "uint256" + "type": "bytes32" } ], "stateMutability": "view", @@ -185,7 +197,7 @@ }, { "inputs": [], - "name": "calculateRewardPerBatch", + "name": "calculateForceProverFee", "outputs": [ { "internalType": "uint256", @@ -198,12 +210,12 @@ }, { "inputs": [], - "name": "chainID", + "name": "calculateRewardPerBatch", "outputs": [ { - "internalType": "uint64", + "internalType": "uint256", "name": "", - "type": "uint64" + "type": "uint256" } ], "stateMutability": "view", @@ -211,12 +223,12 @@ }, { "inputs": [], - "name": "currentStateRoot", + "name": "chainID", "outputs": [ { - "internalType": "bytes32", + "internalType": "uint64", "name": "", - "type": "bytes32" + "type": "uint64" } ], "stateMutability": "view", @@ -669,8 +681,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50613982806100206000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c8063ac2eba9811610104578063d02103ca116100a2578063e7a7ed0211610071578063e7a7ed021461048a578063e8bf92ed146104ba578063eaeb077b146104da578063f7552761146104ed57600080fd5b8063d02103ca14610407578063d2fd1b3114610427578063d8d1091b1461043a578063d8f54db01461044d57600080fd5b8063b4d63f58116100de578063b4d63f581461035d578063b6b0b0971461037d578063c89e42df146103c8578063cfa8ed47146103db57600080fd5b8063ac2eba9814610337578063adc879e914610340578063b02286c01461035457600080fd5b80636b8616ce1161017c5780637fcb36531161014b5780637fcb3653146102fe5780638c4a0af71461031257806399f5634e14610325578063ab9fc5ef1461032d57600080fd5b80636b8616ce146102a25780636ff512cc146102d05780637152facf146102e357806379847057146102f657600080fd5b8063423fa856116101b8578063423fa8561461023f578063456052671461025f578063542028d51461028757806355b925e61461028f57600080fd5b8063107bf28c146101df57806319d8ac61146101fd5780633c1582671461022a575b600080fd5b6101e76104fc565b6040516101f49190612dee565b60405180910390f35b6003546102119067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101f4565b61023d610238366004612f9a565b61058a565b005b6003546102119068010000000000000000900467ffffffffffffffff1681565b60035461021190700100000000000000000000000000000000900467ffffffffffffffff1681565b6101e7610ebc565b61023d61029d3660046130e6565b610ec9565b6102c26102b0366004613169565b60016020526000908152604090205481565b6040519081526020016101f4565b61023d6102de3660046131b4565b611439565b6101e76102f13660046131d1565b611574565b6102c2611706565b6004546102119067ffffffffffffffff1681565b61023d61032036600461322c565b611780565b6102c26118b4565b61021162093a8081565b6102c260065481565b6009546102119067ffffffffffffffff1681565b6102c261ea6081565b6102c261036b366004613169565b60026020526000908152604090205481565b6000546103a39062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f4565b61023d6103d6366004613249565b6119e3565b6004546103a39068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b61023d610435366004613286565b611ad2565b61023d61044836600461335c565b611dbf565b60045461047a907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016101f4565b600354610211907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6007546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b61023d6104e836600461346d565b612465565b6102c267016345785d8a000081565b600a8054610509906134b2565b80601f0160208091040260200160405190810160405280929190818152602001828054610535906134b2565b80156105825780601f1061055757610100808354040283529160200191610582565b820191906000526020600020905b81548152906001019060200180831161056557829003601f168201915b505050505081565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b805160035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610c925760008782815181106106aa576106aa613505565b602002602001015190506000816060015167ffffffffffffffff16111561091557836106d581613563565b94505060008160000151805190602001208260200151836060015160405160200161073893929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff881660009081526001909352912054909150811461083d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b816060015167ffffffffffffffff16826040015167ffffffffffffffff16101561090f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610639565b50610ae3565b602081015115806109c4575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b36329161097e9160040190815260200190565b6020604051808303816000875af115801561099d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c1919061358a565b15155b610a50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610639565b80515161ea6011610ae3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610639565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610b19575042816040015167ffffffffffffffff1611155b610bcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610c7490613563565b95505080604001519550508080610c8a906135a3565b91505061068e565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610d4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610639565b600354600090610d7d90700100000000000000000000000000000000900467ffffffffffffffff16846135db565b610d919067ffffffffffffffff1687613604565b6003805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c169390931793909317929092169190911790915560009081526002602052604090208390559050610e6f3330610e488467016345785d8a000061361b565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16929190612933565b6003546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60088054610509906134b2565b60045467ffffffffffffffff888116911614610f8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c6173745665726966696564426174636820646f6573206e6f74206d6160648201527f7463680000000000000000000000000000000000000000000000000000000000608482015260a401610639565b8667ffffffffffffffff168667ffffffffffffffff1611611056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610639565b60035467ffffffffffffffff6801000000000000000090910481169087161115611129576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a76657269667942617463686573908201527f3a20626174636820646f6573206e6f742068617665206265656e20736571756560648201527f6e63656400000000000000000000000000000000000000000000000000000000608482015260a401610639565b600061113788888888611574565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161116c9190613658565b602060405180830381855afa158015611189573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906111ac919061358a565b6111b691906136a3565b6007546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d9161122091899189918991906004016136b7565b602060405180830381865afa15801561123d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112619190613731565b6112ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610639565b61133d336112fb8b8b6135db565b67ffffffffffffffff1661130d6118b4565b611317919061361b565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff169190612a0f565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a1617815560068790556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820189905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b1580156113df57600080fd5b505af11580156113f3573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8b1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a3505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146114ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b67ffffffffffffffff808516600090815260026020526040808220549286168252902054606091908061164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610639565b6006546009546040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b1660208201526034810192909252605482018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607485015291821b8116607c8401526084830187905260a4830184905260c483018890529088901b1660e482015260ec0160405160208183030381529060405292505050949350505050565b60035460009067ffffffffffffffff700100000000000000000000000000000000820481169161175591780100000000000000000000000000000000000000000000000090910416600161374e565b61175f91906135db565b61177b9067ffffffffffffffff16670de0b6b3a764000061361b565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061156990831515815260200190565b600080546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829162010000900473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015611929573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194d919061358a565b60045460035491925060009167ffffffffffffffff918216916801000000000000000082048116916119b291700100000000000000000000000000000000820481169178010000000000000000000000000000000000000000000000009004166135db565b6119bc919061374e565b6119c691906135db565b67ffffffffffffffff1690506119dc818361377a565b9250505090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611a96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b6008611aa282826137dc565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b20816040516115699190612dee565b600054610100900460ff1615808015611af25750600054600160ff909116105b80611b0c5750303b158015611b0c575060005460ff166001145b611b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610639565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611bf657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602179055600780549091168a83161790556006889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c0100000000000000000000000000000000000000000000000000000000871515021790556008611d0e85826137dc565b50600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600a611d4f83826137dc565b508015611db357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114611e9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610639565b805180611f51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b60035467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691611f9c9184917001000000000000000000000000000000009004166138f6565b111561202a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610639565b60035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205491937001000000000000000000000000000000009004909216915b8481101561239557600086828151811061208a5761208a613505565b60200260200101519050838061209f90613563565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff88166000908152600190935291205490915081146121f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610639565b612203600188613604565b83036122db574262093a80836040015161221d919061374e565b67ffffffffffffffff1611156122db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610639565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209350858061237d90613563565b9650505050808061238d906135a3565b91505061206e565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260026020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610639565b600061254c611706565b9050818111156125de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610639565b61ea60835110612670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610639565b60005461269b9062010000900473ffffffffffffffffffffffffffffffffffffffff16333084612933565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa15801561270b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061272f919061358a565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff1690601861276983613563565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050838051906020012081426040516020016127e293929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260019093529120553233036128d057600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261292d565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516129249392919061390e565b60405180910390a25b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261292d9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a6a565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052612a659084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161298d565b505050565b6000612acc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612b769092919063ffffffff16565b805190915015612a655780806020019051810190612aea9190613731565b612a65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610639565b6060612b858484600085612b8f565b90505b9392505050565b606082471015612c21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610639565b73ffffffffffffffffffffffffffffffffffffffff85163b612c9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610639565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612cc89190613658565b60006040518083038185875af1925050503d8060008114612d05576040519150601f19603f3d011682016040523d82523d6000602084013e612d0a565b606091505b5091509150612d1a828286612d25565b979650505050505050565b60608315612d34575081612b88565b825115612d445782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106399190612dee565b60005b83811015612d93578181015183820152602001612d7b565b8381111561292d5750506000910152565b60008151808452612dbc816020860160208601612d78565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612b886020830184612da4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715612e5357612e53612e01565b60405290565b6040516060810167ffffffffffffffff81118282101715612e5357612e53612e01565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612ec357612ec3612e01565b604052919050565b600067ffffffffffffffff821115612ee557612ee5612e01565b5060051b60200190565b600082601f830112612f0057600080fd5b813567ffffffffffffffff811115612f1a57612f1a612e01565b612f4b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612e7c565b818152846020838601011115612f6057600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114612f9557600080fd5b919050565b60006020808385031215612fad57600080fd5b823567ffffffffffffffff80821115612fc557600080fd5b818501915085601f830112612fd957600080fd5b8135612fec612fe782612ecb565b612e7c565b81815260059190911b8301840190848101908883111561300b57600080fd5b8585015b838110156130c2578035858111156130275760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181131561305d5760008081fd5b613065612e30565b89830135888111156130775760008081fd5b6130858e8c83870101612eef565b8252506040808401358b830152606061309f818601612f7d565b828401526130ae848601612f7d565b90830152508552505091860191860161300f565b5098975050505050505050565b80604081018310156130e057600080fd5b92915050565b6000806000806000806000610180888a03121561310257600080fd5b61310b88612f7d565b965061311960208901612f7d565b955060408801359450606088013593506131368960808a016130cf565b925061014088018981111561314a57600080fd5b60c08901925061315a8a826130cf565b91505092959891949750929550565b60006020828403121561317b57600080fd5b612b8882612f7d565b73ffffffffffffffffffffffffffffffffffffffff811681146131a657600080fd5b50565b8035612f9581613184565b6000602082840312156131c657600080fd5b8135612b8881613184565b600080600080608085870312156131e757600080fd5b6131f085612f7d565b93506131fe60208601612f7d565b93969395505050506040820135916060013590565b80151581146131a657600080fd5b8035612f9581613213565b60006020828403121561323e57600080fd5b8135612b8881613213565b60006020828403121561325b57600080fd5b813567ffffffffffffffff81111561327257600080fd5b61327e84828501612eef565b949350505050565b60008060008060008060008060006101208a8c0312156132a557600080fd5b89356132b081613184565b985060208a01356132c081613184565b97506132ce60408b016131a9565b965060608a013595506132e360808b016131a9565b94506132f160a08b01613221565b935060c08a013567ffffffffffffffff8082111561330e57600080fd5b61331a8d838e01612eef565b945061332860e08d01612f7d565b93506101008c013591508082111561333f57600080fd5b5061334c8c828d01612eef565b9150509295985092959850929598565b6000602080838503121561336f57600080fd5b823567ffffffffffffffff8082111561338757600080fd5b818501915085601f83011261339b57600080fd5b81356133a9612fe782612ecb565b81815260059190911b830184019084810190888311156133c857600080fd5b8585015b838110156130c2578035858111156133e45760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181131561341a5760008081fd5b613422612e59565b89830135888111156134345760008081fd5b6134428e8c83870101612eef565b8252506040808401358b83015261345a838501612f7d565b90820152855250509186019186016133cc565b6000806040838503121561348057600080fd5b823567ffffffffffffffff81111561349757600080fd5b6134a385828601612eef565b95602094909401359450505050565b600181811c908216806134c657607f821691505b6020821081036134ff577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681810361358057613580613534565b6001019392505050565b60006020828403121561359c57600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036135d4576135d4613534565b5060010190565b600067ffffffffffffffff838116908316818110156135fc576135fc613534565b039392505050565b60008282101561361657613616613534565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561365357613653613534565b500290565b6000825161366a818460208701612d78565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826136b2576136b2613674565b500690565b61012081016040808784376000838201818152879190815b60028110156136ef578484833790840182815292840192906001016136cf565b5050828760c0870137610100850181815286935091505b6001811015613725578251825260209283019290910190600101613706565b50505095945050505050565b60006020828403121561374357600080fd5b8151612b8881613213565b600067ffffffffffffffff80831681851680830382111561377157613771613534565b01949350505050565b60008261378957613789613674565b500490565b601f821115612a6557600081815260208120601f850160051c810160208610156137b55750805b601f850160051c820191505b818110156137d4578281556001016137c1565b505050505050565b815167ffffffffffffffff8111156137f6576137f6612e01565b61380a8161380484546134b2565b8461378e565b602080601f83116001811461385d57600084156138275750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556137d4565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156138aa5788860151825594840194600190910190840161388b565b50858210156138e657878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000821982111561390957613909613534565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006139436060830184612da4565b9594505050505056fea2646970667358221220500ae6c68729300fc68a36cc6c6c4c33933b4fe2490b1e56423c47a9c14bb65964736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101da5760003560e01c8063ac2eba9811610104578063d02103ca116100a2578063e7a7ed0211610071578063e7a7ed021461048a578063e8bf92ed146104ba578063eaeb077b146104da578063f7552761146104ed57600080fd5b8063d02103ca14610407578063d2fd1b3114610427578063d8d1091b1461043a578063d8f54db01461044d57600080fd5b8063b4d63f58116100de578063b4d63f581461035d578063b6b0b0971461037d578063c89e42df146103c8578063cfa8ed47146103db57600080fd5b8063ac2eba9814610337578063adc879e914610340578063b02286c01461035457600080fd5b80636b8616ce1161017c5780637fcb36531161014b5780637fcb3653146102fe5780638c4a0af71461031257806399f5634e14610325578063ab9fc5ef1461032d57600080fd5b80636b8616ce146102a25780636ff512cc146102d05780637152facf146102e357806379847057146102f657600080fd5b8063423fa856116101b8578063423fa8561461023f578063456052671461025f578063542028d51461028757806355b925e61461028f57600080fd5b8063107bf28c146101df57806319d8ac61146101fd5780633c1582671461022a575b600080fd5b6101e76104fc565b6040516101f49190612dee565b60405180910390f35b6003546102119067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101f4565b61023d610238366004612f9a565b61058a565b005b6003546102119068010000000000000000900467ffffffffffffffff1681565b60035461021190700100000000000000000000000000000000900467ffffffffffffffff1681565b6101e7610ebc565b61023d61029d3660046130e6565b610ec9565b6102c26102b0366004613169565b60016020526000908152604090205481565b6040519081526020016101f4565b61023d6102de3660046131b4565b611439565b6101e76102f13660046131d1565b611574565b6102c2611706565b6004546102119067ffffffffffffffff1681565b61023d61032036600461322c565b611780565b6102c26118b4565b61021162093a8081565b6102c260065481565b6009546102119067ffffffffffffffff1681565b6102c261ea6081565b6102c261036b366004613169565b60026020526000908152604090205481565b6000546103a39062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f4565b61023d6103d6366004613249565b6119e3565b6004546103a39068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b61023d610435366004613286565b611ad2565b61023d61044836600461335c565b611dbf565b60045461047a907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016101f4565b600354610211907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6007546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b61023d6104e836600461346d565b612465565b6102c267016345785d8a000081565b600a8054610509906134b2565b80601f0160208091040260200160405190810160405280929190818152602001828054610535906134b2565b80156105825780601f1061055757610100808354040283529160200191610582565b820191906000526020600020905b81548152906001019060200180831161056557829003601f168201915b505050505081565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b805160035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610c925760008782815181106106aa576106aa613505565b602002602001015190506000816060015167ffffffffffffffff16111561091557836106d581613563565b94505060008160000151805190602001208260200151836060015160405160200161073893929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff881660009081526001909352912054909150811461083d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b816060015167ffffffffffffffff16826040015167ffffffffffffffff16101561090f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610639565b50610ae3565b602081015115806109c4575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b36329161097e9160040190815260200190565b6020604051808303816000875af115801561099d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c1919061358a565b15155b610a50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610639565b80515161ea6011610ae3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610639565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610b19575042816040015167ffffffffffffffff1611155b610bcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610c7490613563565b95505080604001519550508080610c8a906135a3565b91505061068e565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610d4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610639565b600354600090610d7d90700100000000000000000000000000000000900467ffffffffffffffff16846135db565b610d919067ffffffffffffffff1687613604565b6003805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c169390931793909317929092169190911790915560009081526002602052604090208390559050610e6f3330610e488467016345785d8a000061361b565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16929190612933565b6003546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60088054610509906134b2565b60045467ffffffffffffffff888116911614610f8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c6173745665726966696564426174636820646f6573206e6f74206d6160648201527f7463680000000000000000000000000000000000000000000000000000000000608482015260a401610639565b8667ffffffffffffffff168667ffffffffffffffff1611611056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610639565b60035467ffffffffffffffff6801000000000000000090910481169087161115611129576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a76657269667942617463686573908201527f3a20626174636820646f6573206e6f742068617665206265656e20736571756560648201527f6e63656400000000000000000000000000000000000000000000000000000000608482015260a401610639565b600061113788888888611574565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161116c9190613658565b602060405180830381855afa158015611189573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906111ac919061358a565b6111b691906136a3565b6007546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d9161122091899189918991906004016136b7565b602060405180830381865afa15801561123d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112619190613731565b6112ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610639565b61133d336112fb8b8b6135db565b67ffffffffffffffff1661130d6118b4565b611317919061361b565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff169190612a0f565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a1617815560068790556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820189905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b1580156113df57600080fd5b505af11580156113f3573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8b1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a3505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146114ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b67ffffffffffffffff808516600090815260026020526040808220549286168252902054606091908061164f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610639565b6006546009546040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b1660208201526034810192909252605482018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607485015291821b8116607c8401526084830187905260a4830184905260c483018890529088901b1660e482015260ec0160405160208183030381529060405292505050949350505050565b60035460009067ffffffffffffffff700100000000000000000000000000000000820481169161175591780100000000000000000000000000000000000000000000000090910416600161374e565b61175f91906135db565b61177b9067ffffffffffffffff16670de0b6b3a764000061361b565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061156990831515815260200190565b600080546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829162010000900473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015611929573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194d919061358a565b60045460035491925060009167ffffffffffffffff918216916801000000000000000082048116916119b291700100000000000000000000000000000000820481169178010000000000000000000000000000000000000000000000009004166135db565b6119bc919061374e565b6119c691906135db565b67ffffffffffffffff1690506119dc818361377a565b9250505090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611a96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610639565b6008611aa282826137dc565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b20816040516115699190612dee565b600054610100900460ff1615808015611af25750600054600160ff909116105b80611b0c5750303b158015611b0c575060005460ff166001145b611b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610639565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611bf657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602179055600780549091168a83161790556006889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c0100000000000000000000000000000000000000000000000000000000871515021790556008611d0e85826137dc565b50600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600a611d4f83826137dc565b508015611db357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114611e9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610639565b805180611f51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610639565b60035467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691611f9c9184917001000000000000000000000000000000009004166138f6565b111561202a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610639565b60035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205491937001000000000000000000000000000000009004909216915b8481101561239557600086828151811061208a5761208a613505565b60200260200101519050838061209f90613563565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff88166000908152600190935291205490915081146121f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610639565b612203600188613604565b83036122db574262093a80836040015161221d919061374e565b67ffffffffffffffff1611156122db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610639565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209350858061237d90613563565b9650505050808061238d906135a3565b91505061206e565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260026020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610639565b600061254c611706565b9050818111156125de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610639565b61ea60835110612670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610639565b60005461269b9062010000900473ffffffffffffffffffffffffffffffffffffffff16333084612933565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa15801561270b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061272f919061358a565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff1690601861276983613563565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050838051906020012081426040516020016127e293929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260019093529120553233036128d057600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261292d565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516129249392919061390e565b60405180910390a25b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261292d9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a6a565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052612a659084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161298d565b505050565b6000612acc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612b769092919063ffffffff16565b805190915015612a655780806020019051810190612aea9190613731565b612a65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610639565b6060612b858484600085612b8f565b90505b9392505050565b606082471015612c21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610639565b73ffffffffffffffffffffffffffffffffffffffff85163b612c9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610639565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612cc89190613658565b60006040518083038185875af1925050503d8060008114612d05576040519150601f19603f3d011682016040523d82523d6000602084013e612d0a565b606091505b5091509150612d1a828286612d25565b979650505050505050565b60608315612d34575081612b88565b825115612d445782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106399190612dee565b60005b83811015612d93578181015183820152602001612d7b565b8381111561292d5750506000910152565b60008151808452612dbc816020860160208601612d78565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612b886020830184612da4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715612e5357612e53612e01565b60405290565b6040516060810167ffffffffffffffff81118282101715612e5357612e53612e01565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612ec357612ec3612e01565b604052919050565b600067ffffffffffffffff821115612ee557612ee5612e01565b5060051b60200190565b600082601f830112612f0057600080fd5b813567ffffffffffffffff811115612f1a57612f1a612e01565b612f4b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612e7c565b818152846020838601011115612f6057600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114612f9557600080fd5b919050565b60006020808385031215612fad57600080fd5b823567ffffffffffffffff80821115612fc557600080fd5b818501915085601f830112612fd957600080fd5b8135612fec612fe782612ecb565b612e7c565b81815260059190911b8301840190848101908883111561300b57600080fd5b8585015b838110156130c2578035858111156130275760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181131561305d5760008081fd5b613065612e30565b89830135888111156130775760008081fd5b6130858e8c83870101612eef565b8252506040808401358b830152606061309f818601612f7d565b828401526130ae848601612f7d565b90830152508552505091860191860161300f565b5098975050505050505050565b80604081018310156130e057600080fd5b92915050565b6000806000806000806000610180888a03121561310257600080fd5b61310b88612f7d565b965061311960208901612f7d565b955060408801359450606088013593506131368960808a016130cf565b925061014088018981111561314a57600080fd5b60c08901925061315a8a826130cf565b91505092959891949750929550565b60006020828403121561317b57600080fd5b612b8882612f7d565b73ffffffffffffffffffffffffffffffffffffffff811681146131a657600080fd5b50565b8035612f9581613184565b6000602082840312156131c657600080fd5b8135612b8881613184565b600080600080608085870312156131e757600080fd5b6131f085612f7d565b93506131fe60208601612f7d565b93969395505050506040820135916060013590565b80151581146131a657600080fd5b8035612f9581613213565b60006020828403121561323e57600080fd5b8135612b8881613213565b60006020828403121561325b57600080fd5b813567ffffffffffffffff81111561327257600080fd5b61327e84828501612eef565b949350505050565b60008060008060008060008060006101208a8c0312156132a557600080fd5b89356132b081613184565b985060208a01356132c081613184565b97506132ce60408b016131a9565b965060608a013595506132e360808b016131a9565b94506132f160a08b01613221565b935060c08a013567ffffffffffffffff8082111561330e57600080fd5b61331a8d838e01612eef565b945061332860e08d01612f7d565b93506101008c013591508082111561333f57600080fd5b5061334c8c828d01612eef565b9150509295985092959850929598565b6000602080838503121561336f57600080fd5b823567ffffffffffffffff8082111561338757600080fd5b818501915085601f83011261339b57600080fd5b81356133a9612fe782612ecb565b81815260059190911b830184019084810190888311156133c857600080fd5b8585015b838110156130c2578035858111156133e45760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181131561341a5760008081fd5b613422612e59565b89830135888111156134345760008081fd5b6134428e8c83870101612eef565b8252506040808401358b83015261345a838501612f7d565b90820152855250509186019186016133cc565b6000806040838503121561348057600080fd5b823567ffffffffffffffff81111561349757600080fd5b6134a385828601612eef565b95602094909401359450505050565b600181811c908216806134c657607f821691505b6020821081036134ff577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681810361358057613580613534565b6001019392505050565b60006020828403121561359c57600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036135d4576135d4613534565b5060010190565b600067ffffffffffffffff838116908316818110156135fc576135fc613534565b039392505050565b60008282101561361657613616613534565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561365357613653613534565b500290565b6000825161366a818460208701612d78565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826136b2576136b2613674565b500690565b61012081016040808784376000838201818152879190815b60028110156136ef578484833790840182815292840192906001016136cf565b5050828760c0870137610100850181815286935091505b6001811015613725578251825260209283019290910190600101613706565b50505095945050505050565b60006020828403121561374357600080fd5b8151612b8881613213565b600067ffffffffffffffff80831681851680830382111561377157613771613534565b01949350505050565b60008261378957613789613674565b500490565b601f821115612a6557600081815260208120601f850160051c810160208610156137b55750805b601f850160051c820191505b818110156137d4578281556001016137c1565b505050505050565b815167ffffffffffffffff8111156137f6576137f6612e01565b61380a8161380484546134b2565b8461378e565b602080601f83116001811461385d57600084156138275750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556137d4565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156138aa5788860151825594840194600190910190840161388b565b50858210156138e657878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000821982111561390957613909613534565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006139436060830184612da4565b9594505050505056fea2646970667358221220500ae6c68729300fc68a36cc6c6c4c33933b4fe2490b1e56423c47a9c14bb65964736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506139eb806100206000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c8063ab9fc5ef11610104578063d02103ca116100a2578063e7a7ed0211610071578063e7a7ed02146104a1578063e8bf92ed146104d1578063eaeb077b146104f1578063f75527611461050457600080fd5b8063d02103ca1461041e578063d2fd1b311461043e578063d8d1091b14610451578063d8f54db01461046457600080fd5b8063b4d63f58116100de578063b4d63f5814610374578063b6b0b09714610394578063c89e42df146103df578063cfa8ed47146103f257600080fd5b8063ab9fc5ef1461034d578063adc879e914610357578063b02286c01461036b57600080fd5b806355b925e61161017c578063798470571161014b57806379847057146103165780637fcb36531461031e5780638c4a0af71461033257806399f5634e1461034557600080fd5b806355b925e6146102bd5780636b8616ce146102d05780636ff512cc146102f05780637152facf1461030357600080fd5b8063423fa856116101b8578063423fa8561461023f578063456052671461025f5780635392c5e014610287578063542028d5146102b557600080fd5b8063107bf28c146101df57806319d8ac61146101fd5780633c1582671461022a575b600080fd5b6101e7610513565b6040516101f49190612e57565b60405180910390f35b6003546102119067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101f4565b61023d610238366004613003565b6105a1565b005b6003546102119068010000000000000000900467ffffffffffffffff1681565b60035461021190700100000000000000000000000000000000900467ffffffffffffffff1681565b6102a7610295366004613138565b60066020526000908152604090205481565b6040519081526020016101f4565b6101e7610ed3565b61023d6102cb36600461316a565b610ee0565b6102a76102de366004613138565b60016020526000908152604090205481565b61023d6102fe36600461321d565b6113a3565b6101e761031136600461323a565b6114de565b6102a7611748565b6004546102119067ffffffffffffffff1681565b61023d610340366004613295565b6117c2565b6102a76118f6565b61021162093a8081565b6009546102119067ffffffffffffffff1681565b6102a761ea6081565b6102a7610382366004613138565b60026020526000908152604090205481565b6000546103ba9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f4565b61023d6103ed3660046132b2565b611a25565b6004546103ba9068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546103ba9073ffffffffffffffffffffffffffffffffffffffff1681565b61023d61044c3660046132ef565b611b14565b61023d61045f3660046133c5565b611e28565b600454610491907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016101f4565b600354610211907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6007546103ba9073ffffffffffffffffffffffffffffffffffffffff1681565b61023d6104ff3660046134d6565b6124ce565b6102a767016345785d8a000081565b600a80546105209061351b565b80601f016020809104026020016040519081016040528092919081815260200182805461054c9061351b565b80156105995780601f1061056e57610100808354040283529160200191610599565b820191906000526020600020905b81548152906001019060200180831161057c57829003601f168201915b505050505081565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610659576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b805160035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610ca95760008782815181106106c1576106c161356e565b602002602001015190506000816060015167ffffffffffffffff16111561092c57836106ec816135cc565b94505060008160000151805190602001208260200151836060015160405160200161074f93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114610854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610650565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610650565b50610afa565b602081015115806109db575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b3632916109959160040190815260200190565b6020604051808303816000875af11580156109b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d891906135f3565b15155b610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610650565b80515161ea6011610afa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610650565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610b30575042816040015167ffffffffffffffff1611155b610be2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610650565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610c8b906135cc565b95505080604001519550508080610ca19061360c565b9150506106a5565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610d66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610650565b600354600090610d9490700100000000000000000000000000000000900467ffffffffffffffff1684613644565b610da89067ffffffffffffffff168761366d565b6003805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c169390931793909317929092169190911790915560009081526002602052604090208390559050610e863330610e5f8467016345785d8a0000613684565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1692919061299c565b6003546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b600880546105209061351b565b60045467ffffffffffffffff9081169088161115610fa6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a401610650565b60045467ffffffffffffffff9081169087161161106b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610650565b6000611079888888886114de565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516110ae91906136c1565b602060405180830381855afa1580156110cb573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906110ee91906135f3565b6110f8919061370c565b6007546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916111629189918991899190600401613720565b602060405180830381865afa15801561117f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a3919061379a565b61122f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610650565b60045461128e90339061124c9067ffffffffffffffff168b613644565b67ffffffffffffffff1661125e6118f6565b6112689190613684565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff169190612a78565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a1690811782556000908152600660205260409081902088905560055490517f33d6247d00000000000000000000000000000000000000000000000000000000815291820189905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b15801561133f57600080fd5b505af1158015611353573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610650565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b67ffffffffffffffff80851660008181526002602052604080822054938716825290205460609291158061151157508115155b6115c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610650565b80611676576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610650565b67ffffffffffffffff87166000908152600660209081526040918290205460095492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b60035460009067ffffffffffffffff70010000000000000000000000000000000082048116916117979178010000000000000000000000000000000000000000000000009091041660016137b7565b6117a19190613644565b6117bd9067ffffffffffffffff16670de0b6b3a7640000613684565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610650565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe6906114d390831515815260200190565b600080546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829162010000900473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561196b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198f91906135f3565b60045460035491925060009167ffffffffffffffff918216916801000000000000000082048116916119f49170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416613644565b6119fe91906137b7565b611a089190613644565b67ffffffffffffffff169050611a1e81836137e3565b9250505090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611ad8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610650565b6008611ae48282613845565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b20816040516114d39190612e57565b600054610100900460ff1615808015611b345750600054600160ff909116105b80611b4e5750303b158015611b4e575060005460ff166001145b611bda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610650565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611c3857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602178155600780549092168b841617909155805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f8889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c0100000000000000000000000000000000000000000000000000000000871515021790556008611d778582613845565b50600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600a611db88382613845565b508015611e1c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114611f05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610650565b805180611fba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610650565b60035467ffffffffffffffff7801000000000000000000000000000000000000000000000000820481169161200591849170010000000000000000000000000000000090041661395f565b1115612093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610650565b60035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205491937001000000000000000000000000000000009004909216915b848110156123fe5760008682815181106120f3576120f361356e565b602002602001015190508380612108906135cc565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114612261576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610650565b61226c60018861366d565b8303612344574262093a80836040015161228691906137b7565b67ffffffffffffffff161115612344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610650565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c0160405160208183030381529060405280519060200120935085806123e6906135cc565b965050505080806123f69061360c565b9150506120d7565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260026020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146125ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610650565b60006125b5611748565b905081811115612647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610650565b61ea608351106126d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610650565b6000546127049062010000900473ffffffffffffffffffffffffffffffffffffffff1633308461299c565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015612774573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061279891906135f3565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff169060186127d2836135cc565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161284b93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000908152600190935291205532330361293957600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2612996565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161298d93929190613977565b60405180910390a25b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526129969085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612ad3565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052612ace9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016129f6565b505050565b6000612b35826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612bdf9092919063ffffffff16565b805190915015612ace5780806020019051810190612b53919061379a565b612ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610650565b6060612bee8484600085612bf8565b90505b9392505050565b606082471015612c8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610650565b73ffffffffffffffffffffffffffffffffffffffff85163b612d08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610650565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612d3191906136c1565b60006040518083038185875af1925050503d8060008114612d6e576040519150601f19603f3d011682016040523d82523d6000602084013e612d73565b606091505b5091509150612d83828286612d8e565b979650505050505050565b60608315612d9d575081612bf1565b825115612dad5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106509190612e57565b60005b83811015612dfc578181015183820152602001612de4565b838111156129965750506000910152565b60008151808452612e25816020860160208601612de1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612bf16020830184612e0d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715612ebc57612ebc612e6a565b60405290565b6040516060810167ffffffffffffffff81118282101715612ebc57612ebc612e6a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612f2c57612f2c612e6a565b604052919050565b600067ffffffffffffffff821115612f4e57612f4e612e6a565b5060051b60200190565b600082601f830112612f6957600080fd5b813567ffffffffffffffff811115612f8357612f83612e6a565b612fb460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612ee5565b818152846020838601011115612fc957600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114612ffe57600080fd5b919050565b6000602080838503121561301657600080fd5b823567ffffffffffffffff8082111561302e57600080fd5b818501915085601f83011261304257600080fd5b813561305561305082612f34565b612ee5565b81815260059190911b8301840190848101908883111561307457600080fd5b8585015b8381101561312b578035858111156130905760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018113156130c65760008081fd5b6130ce612e99565b89830135888111156130e05760008081fd5b6130ee8e8c83870101612f58565b8252506040808401358b8301526060613108818601612fe6565b82840152613117848601612fe6565b908301525085525050918601918601613078565b5098975050505050505050565b60006020828403121561314a57600080fd5b612bf182612fe6565b806040810183101561316457600080fd5b92915050565b6000806000806000806000610180888a03121561318657600080fd5b61318f88612fe6565b965061319d60208901612fe6565b955060408801359450606088013593506131ba8960808a01613153565b92506101408801898111156131ce57600080fd5b60c0890192506131de8a82613153565b91505092959891949750929550565b73ffffffffffffffffffffffffffffffffffffffff8116811461320f57600080fd5b50565b8035612ffe816131ed565b60006020828403121561322f57600080fd5b8135612bf1816131ed565b6000806000806080858703121561325057600080fd5b61325985612fe6565b935061326760208601612fe6565b93969395505050506040820135916060013590565b801515811461320f57600080fd5b8035612ffe8161327c565b6000602082840312156132a757600080fd5b8135612bf18161327c565b6000602082840312156132c457600080fd5b813567ffffffffffffffff8111156132db57600080fd5b6132e784828501612f58565b949350505050565b60008060008060008060008060006101208a8c03121561330e57600080fd5b8935613319816131ed565b985060208a0135613329816131ed565b975061333760408b01613212565b965060608a0135955061334c60808b01613212565b945061335a60a08b0161328a565b935060c08a013567ffffffffffffffff8082111561337757600080fd5b6133838d838e01612f58565b945061339160e08d01612fe6565b93506101008c01359150808211156133a857600080fd5b506133b58c828d01612f58565b9150509295985092959850929598565b600060208083850312156133d857600080fd5b823567ffffffffffffffff808211156133f057600080fd5b818501915085601f83011261340457600080fd5b813561341261305082612f34565b81815260059190911b8301840190848101908883111561343157600080fd5b8585015b8381101561312b5780358581111561344d5760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018113156134835760008081fd5b61348b612ec2565b898301358881111561349d5760008081fd5b6134ab8e8c83870101612f58565b8252506040808401358b8301526134c3838501612fe6565b9082015285525050918601918601613435565b600080604083850312156134e957600080fd5b823567ffffffffffffffff81111561350057600080fd5b61350c85828601612f58565b95602094909401359450505050565b600181811c9082168061352f57607f821691505b602082108103613568577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036135e9576135e961359d565b6001019392505050565b60006020828403121561360557600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361363d5761363d61359d565b5060010190565b600067ffffffffffffffff838116908316818110156136655761366561359d565b039392505050565b60008282101561367f5761367f61359d565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156136bc576136bc61359d565b500290565b600082516136d3818460208701612de1565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261371b5761371b6136dd565b500690565b61012081016040808784376000838201818152879190815b600281101561375857848483379084018281529284019290600101613738565b5050828760c0870137610100850181815286935091505b600181101561378e57825182526020928301929091019060010161376f565b50505095945050505050565b6000602082840312156137ac57600080fd5b8151612bf18161327c565b600067ffffffffffffffff8083168185168083038211156137da576137da61359d565b01949350505050565b6000826137f2576137f26136dd565b500490565b601f821115612ace57600081815260208120601f850160051c8101602086101561381e5750805b601f850160051c820191505b8181101561383d5782815560010161382a565b505050505050565b815167ffffffffffffffff81111561385f5761385f612e6a565b6138738161386d845461351b565b846137f7565b602080601f8311600181146138c657600084156138905750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561383d565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613913578886015182559484019460019091019084016138f4565b508582101561394f57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156139725761397261359d565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006139ac6060830184612e0d565b9594505050505056fea264697066735822122018ec4825c825ff181a582e9a24cd8b012688140492d1a67a912ff3a247a51d0264736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101da5760003560e01c8063ab9fc5ef11610104578063d02103ca116100a2578063e7a7ed0211610071578063e7a7ed02146104a1578063e8bf92ed146104d1578063eaeb077b146104f1578063f75527611461050457600080fd5b8063d02103ca1461041e578063d2fd1b311461043e578063d8d1091b14610451578063d8f54db01461046457600080fd5b8063b4d63f58116100de578063b4d63f5814610374578063b6b0b09714610394578063c89e42df146103df578063cfa8ed47146103f257600080fd5b8063ab9fc5ef1461034d578063adc879e914610357578063b02286c01461036b57600080fd5b806355b925e61161017c578063798470571161014b57806379847057146103165780637fcb36531461031e5780638c4a0af71461033257806399f5634e1461034557600080fd5b806355b925e6146102bd5780636b8616ce146102d05780636ff512cc146102f05780637152facf1461030357600080fd5b8063423fa856116101b8578063423fa8561461023f578063456052671461025f5780635392c5e014610287578063542028d5146102b557600080fd5b8063107bf28c146101df57806319d8ac61146101fd5780633c1582671461022a575b600080fd5b6101e7610513565b6040516101f49190612e57565b60405180910390f35b6003546102119067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101f4565b61023d610238366004613003565b6105a1565b005b6003546102119068010000000000000000900467ffffffffffffffff1681565b60035461021190700100000000000000000000000000000000900467ffffffffffffffff1681565b6102a7610295366004613138565b60066020526000908152604090205481565b6040519081526020016101f4565b6101e7610ed3565b61023d6102cb36600461316a565b610ee0565b6102a76102de366004613138565b60016020526000908152604090205481565b61023d6102fe36600461321d565b6113a3565b6101e761031136600461323a565b6114de565b6102a7611748565b6004546102119067ffffffffffffffff1681565b61023d610340366004613295565b6117c2565b6102a76118f6565b61021162093a8081565b6009546102119067ffffffffffffffff1681565b6102a761ea6081565b6102a7610382366004613138565b60026020526000908152604090205481565b6000546103ba9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f4565b61023d6103ed3660046132b2565b611a25565b6004546103ba9068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546103ba9073ffffffffffffffffffffffffffffffffffffffff1681565b61023d61044c3660046132ef565b611b14565b61023d61045f3660046133c5565b611e28565b600454610491907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016101f4565b600354610211907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6007546103ba9073ffffffffffffffffffffffffffffffffffffffff1681565b61023d6104ff3660046134d6565b6124ce565b6102a767016345785d8a000081565b600a80546105209061351b565b80601f016020809104026020016040519081016040528092919081815260200182805461054c9061351b565b80156105995780601f1061056e57610100808354040283529160200191610599565b820191906000526020600020905b81548152906001019060200180831161057c57829003601f168201915b505050505081565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610659576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b805160035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610ca95760008782815181106106c1576106c161356e565b602002602001015190506000816060015167ffffffffffffffff16111561092c57836106ec816135cc565b94505060008160000151805190602001208260200151836060015160405160200161074f93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114610854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610650565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610650565b50610afa565b602081015115806109db575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b3632916109959160040190815260200190565b6020604051808303816000875af11580156109b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d891906135f3565b15155b610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610650565b80515161ea6011610afa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610650565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610b30575042816040015167ffffffffffffffff1611155b610be2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610650565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610c8b906135cc565b95505080604001519550508080610ca19061360c565b9150506106a5565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610d66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610650565b600354600090610d9490700100000000000000000000000000000000900467ffffffffffffffff1684613644565b610da89067ffffffffffffffff168761366d565b6003805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c169390931793909317929092169190911790915560009081526002602052604090208390559050610e863330610e5f8467016345785d8a0000613684565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1692919061299c565b6003546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b600880546105209061351b565b60045467ffffffffffffffff9081169088161115610fa6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a401610650565b60045467ffffffffffffffff9081169087161161106b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610650565b6000611079888888886114de565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516110ae91906136c1565b602060405180830381855afa1580156110cb573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906110ee91906135f3565b6110f8919061370c565b6007546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916111629189918991899190600401613720565b602060405180830381865afa15801561117f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a3919061379a565b61122f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610650565b60045461128e90339061124c9067ffffffffffffffff168b613644565b67ffffffffffffffff1661125e6118f6565b6112689190613684565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff169190612a78565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a1690811782556000908152600660205260409081902088905560055490517f33d6247d00000000000000000000000000000000000000000000000000000000815291820189905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b15801561133f57600080fd5b505af1158015611353573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610650565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b67ffffffffffffffff80851660008181526002602052604080822054938716825290205460609291158061151157508115155b6115c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610650565b80611676576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610650565b67ffffffffffffffff87166000908152600660209081526040918290205460095492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b60035460009067ffffffffffffffff70010000000000000000000000000000000082048116916117979178010000000000000000000000000000000000000000000000009091041660016137b7565b6117a19190613644565b6117bd9067ffffffffffffffff16670de0b6b3a7640000613684565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610650565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe6906114d390831515815260200190565b600080546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829162010000900473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561196b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198f91906135f3565b60045460035491925060009167ffffffffffffffff918216916801000000000000000082048116916119f49170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416613644565b6119fe91906137b7565b611a089190613644565b67ffffffffffffffff169050611a1e81836137e3565b9250505090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611ad8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610650565b6008611ae48282613845565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b20816040516114d39190612e57565b600054610100900460ff1615808015611b345750600054600160ff909116105b80611b4e5750303b158015611b4e575060005460ff166001145b611bda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610650565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611c3857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602178155600780549092168b841617909155805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f8889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c0100000000000000000000000000000000000000000000000000000000871515021790556008611d778582613845565b50600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600a611db88382613845565b508015611e1c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114611f05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610650565b805180611fba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610650565b60035467ffffffffffffffff7801000000000000000000000000000000000000000000000000820481169161200591849170010000000000000000000000000000000090041661395f565b1115612093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610650565b60035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205491937001000000000000000000000000000000009004909216915b848110156123fe5760008682815181106120f3576120f361356e565b602002602001015190508380612108906135cc565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114612261576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610650565b61226c60018861366d565b8303612344574262093a80836040015161228691906137b7565b67ffffffffffffffff161115612344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610650565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c0160405160208183030381529060405280519060200120935085806123e6906135cc565b965050505080806123f69061360c565b9150506120d7565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260026020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146125ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610650565b60006125b5611748565b905081811115612647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610650565b61ea608351106126d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610650565b6000546127049062010000900473ffffffffffffffffffffffffffffffffffffffff1633308461299c565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015612774573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061279891906135f3565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff169060186127d2836135cc565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161284b93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000908152600190935291205532330361293957600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2612996565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161298d93929190613977565b60405180910390a25b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526129969085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612ad3565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052612ace9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016129f6565b505050565b6000612b35826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612bdf9092919063ffffffff16565b805190915015612ace5780806020019051810190612b53919061379a565b612ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610650565b6060612bee8484600085612bf8565b90505b9392505050565b606082471015612c8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610650565b73ffffffffffffffffffffffffffffffffffffffff85163b612d08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610650565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612d3191906136c1565b60006040518083038185875af1925050503d8060008114612d6e576040519150601f19603f3d011682016040523d82523d6000602084013e612d73565b606091505b5091509150612d83828286612d8e565b979650505050505050565b60608315612d9d575081612bf1565b825115612dad5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106509190612e57565b60005b83811015612dfc578181015183820152602001612de4565b838111156129965750506000910152565b60008151808452612e25816020860160208601612de1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612bf16020830184612e0d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715612ebc57612ebc612e6a565b60405290565b6040516060810167ffffffffffffffff81118282101715612ebc57612ebc612e6a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612f2c57612f2c612e6a565b604052919050565b600067ffffffffffffffff821115612f4e57612f4e612e6a565b5060051b60200190565b600082601f830112612f6957600080fd5b813567ffffffffffffffff811115612f8357612f83612e6a565b612fb460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612ee5565b818152846020838601011115612fc957600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114612ffe57600080fd5b919050565b6000602080838503121561301657600080fd5b823567ffffffffffffffff8082111561302e57600080fd5b818501915085601f83011261304257600080fd5b813561305561305082612f34565b612ee5565b81815260059190911b8301840190848101908883111561307457600080fd5b8585015b8381101561312b578035858111156130905760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018113156130c65760008081fd5b6130ce612e99565b89830135888111156130e05760008081fd5b6130ee8e8c83870101612f58565b8252506040808401358b8301526060613108818601612fe6565b82840152613117848601612fe6565b908301525085525050918601918601613078565b5098975050505050505050565b60006020828403121561314a57600080fd5b612bf182612fe6565b806040810183101561316457600080fd5b92915050565b6000806000806000806000610180888a03121561318657600080fd5b61318f88612fe6565b965061319d60208901612fe6565b955060408801359450606088013593506131ba8960808a01613153565b92506101408801898111156131ce57600080fd5b60c0890192506131de8a82613153565b91505092959891949750929550565b73ffffffffffffffffffffffffffffffffffffffff8116811461320f57600080fd5b50565b8035612ffe816131ed565b60006020828403121561322f57600080fd5b8135612bf1816131ed565b6000806000806080858703121561325057600080fd5b61325985612fe6565b935061326760208601612fe6565b93969395505050506040820135916060013590565b801515811461320f57600080fd5b8035612ffe8161327c565b6000602082840312156132a757600080fd5b8135612bf18161327c565b6000602082840312156132c457600080fd5b813567ffffffffffffffff8111156132db57600080fd5b6132e784828501612f58565b949350505050565b60008060008060008060008060006101208a8c03121561330e57600080fd5b8935613319816131ed565b985060208a0135613329816131ed565b975061333760408b01613212565b965060608a0135955061334c60808b01613212565b945061335a60a08b0161328a565b935060c08a013567ffffffffffffffff8082111561337757600080fd5b6133838d838e01612f58565b945061339160e08d01612fe6565b93506101008c01359150808211156133a857600080fd5b506133b58c828d01612f58565b9150509295985092959850929598565b600060208083850312156133d857600080fd5b823567ffffffffffffffff808211156133f057600080fd5b818501915085601f83011261340457600080fd5b813561341261305082612f34565b81815260059190911b8301840190848101908883111561343157600080fd5b8585015b8381101561312b5780358581111561344d5760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018113156134835760008081fd5b61348b612ec2565b898301358881111561349d5760008081fd5b6134ab8e8c83870101612f58565b8252506040808401358b8301526134c3838501612fe6565b9082015285525050918601918601613435565b600080604083850312156134e957600080fd5b823567ffffffffffffffff81111561350057600080fd5b61350c85828601612f58565b95602094909401359450505050565b600181811c9082168061352f57607f821691505b602082108103613568577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036135e9576135e961359d565b6001019392505050565b60006020828403121561360557600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361363d5761363d61359d565b5060010190565b600067ffffffffffffffff838116908316818110156136655761366561359d565b039392505050565b60008282101561367f5761367f61359d565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156136bc576136bc61359d565b500290565b600082516136d3818460208701612de1565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261371b5761371b6136dd565b500690565b61012081016040808784376000838201818152879190815b600281101561375857848483379084018281529284019290600101613738565b5050828760c0870137610100850181815286935091505b600181101561378e57825182526020928301929091019060010161376f565b50505095945050505050565b6000602082840312156137ac57600080fd5b8151612bf18161327c565b600067ffffffffffffffff8083168185168083038211156137da576137da61359d565b01949350505050565b6000826137f2576137f26136dd565b500490565b601f821115612ace57600081815260208120601f850160051c8101602086101561381e5750805b601f850160051c820191505b8181101561383d5782815560010161382a565b505050505050565b815167ffffffffffffffff81111561385f5761385f612e6a565b6138738161386d845461351b565b846137f7565b602080601f8311600181146138c657600084156138905750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561383d565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613913578886015182559484019460019091019084016138f4565b508582101561394f57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156139725761397261359d565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006139ac6060830184612e0d565b9594505050505056fea264697066735822122018ec4825c825ff181a582e9a24cd8b012688140492d1a67a912ff3a247a51d0264736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/ProofOfEfficiencyMock.json b/compiled-contracts/ProofOfEfficiencyMock.json index 9ccddabc3..a70972072 100644 --- a/compiled-contracts/ProofOfEfficiencyMock.json +++ b/compiled-contracts/ProofOfEfficiencyMock.json @@ -140,6 +140,12 @@ "name": "numBatch", "type": "uint64" }, + { + "indexed": false, + "internalType": "bytes32", + "name": "stateRoot", + "type": "bytes32" + }, { "indexed": true, "internalType": "address", @@ -189,6 +195,25 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "name": "batchNumToStateRoot", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -267,19 +292,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "currentStateRoot", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -735,6 +747,11 @@ "internalType": "bytes32", "name": "newStateRoot", "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "batchNum", + "type": "uint64" } ], "name": "setStateRoot", @@ -920,8 +937,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506147d2806100206000396000f3fe608060405234801561001057600080fd5b50600436106102de5760003560e01c80639b79676011610186578063d02103ca116100e3578063d8f54db011610097578063eaeb077b11610071578063eaeb077b14610739578063f2fde38b1461074c578063f75527611461075f57600080fd5b8063d8f54db0146106ac578063e7a7ed02146106e9578063e8bf92ed1461071957600080fd5b8063d2fd1b31116100c8578063d2fd1b3114610673578063d307b74314610686578063d8d1091b1461069957600080fd5b8063d02103ca14610640578063d0ae98dd1461066057600080fd5b8063b4d63f581161013a578063c0cad3021161011f578063c0cad302146105ee578063c89e42df14610601578063cfa8ed471461061457600080fd5b8063b4d63f58146105a8578063b6b0b097146105c857600080fd5b8063ac2eba981161016b578063ac2eba9814610582578063adc879e91461058b578063b02286c01461059f57600080fd5b80639b79676014610565578063ab9fc5ef1461057857600080fd5b80636b8616ce1161023f57806379847057116101f35780638da5cb5b116101cd5780638da5cb5b1461050b57806396dc3d391461054a57806399f5634e1461055d57600080fd5b806379847057146104dc5780637fcb3653146104e45780638c4a0af7146104f857600080fd5b8063715018a611610224578063715018a6146104ae5780637152facf146104b6578063748608de146104c957600080fd5b80636b8616ce1461047b5780636ff512cc1461049b57600080fd5b806345605267116102965780635437988d1161027b5780635437988d146103a657806355b925e6146103b9578063574f649e146103cc57600080fd5b80634560526714610376578063542028d51461039e57600080fd5b80631a26da14116102c75780631a26da141461032e5780633c15826714610343578063423fa8561461035657600080fd5b8063107bf28c146102e357806319d8ac6114610301575b600080fd5b6102eb61076e565b6040516102f89190613b88565b60405180910390f35b6003546103159067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102f8565b61034161033c366004613bb8565b6107fc565b005b610341610351366004613d5e565b610821565b6003546103159068010000000000000000900467ffffffffffffffff1681565b60035461031590700100000000000000000000000000000000900467ffffffffffffffff1681565b6102eb611153565b6103416103b4366004613ec0565b611160565b6103416103c7366004613ef4565b6111af565b61046d6103da366004613f77565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b6040519081526020016102f8565b61046d610489366004613fed565b60016020526000908152604090205481565b6103416104a9366004613ec0565b61171f565b61034161185a565b6102eb6104c4366004614008565b61186e565b6103416104d7366004613ef4565b611a00565b61046d611e09565b6004546103159067ffffffffffffffff1681565b610341610506366004614063565b611e83565b603d5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102f8565b610341610558366004613fed565b611fb7565b61046d611ffa565b610341610573366004613fed565b612129565b61031562093a8081565b61046d60065481565b6009546103159067ffffffffffffffff1681565b61046d61ea6081565b61046d6105b6366004613fed565b60026020526000908152604090205481565b6000546105259062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6103416105fc366004614080565b612178565b61034161060f366004614080565b612190565b6004546105259068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546105259073ffffffffffffffffffffffffffffffffffffffff1681565b61046d61066e366004614008565b61227f565b6103416106813660046140bd565b612579565b610341610694366004614193565b61286e565b6103416106a73660046141ac565b61287b565b6004546106d9907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016102f8565b600354610315907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6007546105259073ffffffffffffffffffffffffffffffffffffffff1681565b6103416107473660046142bd565b612f21565b61034161075a366004613ec0565b6133ef565b61046d67016345785d8a000081565b600a805461077b90614302565b80601f01602080910402602001604051908101604052809291908181526020018280546107a790614302565b80156107f45780601f106107c9576101008083540402835291602001916107f4565b820191906000526020600020905b8154815290600101906020018083116107d757829003601f168201915b505050505081565b6108046134a6565b67ffffffffffffffff909116600090815260026020526040902055565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146108d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b805160035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610f2957600087828151811061094157610941614355565b602002602001015190506000816060015167ffffffffffffffff161115610bac578361096c816143b3565b9450506000816000015180519060200120826020015183606001516040516020016109cf93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114610ad4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610ba6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016108d0565b50610d7a565b60208101511580610c5b575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610c159160040190815260200190565b6020604051808303816000875af1158015610c34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5891906143da565b15155b610ce7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016108d0565b80515161ea6011610d7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016108d0565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610db0575042816040015167ffffffffffffffff1611155b610e62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610f0b906143b3565b95505080604001519550508080610f21906143f3565b915050610925565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610fe6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016108d0565b60035460009061101490700100000000000000000000000000000000900467ffffffffffffffff168461442b565b6110289067ffffffffffffffff1687614454565b6003805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152600260205260409020839055905061110633306110df8467016345785d8a000061446b565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16929190613527565b6003546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b6008805461077b90614302565b6111686134a6565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60045467ffffffffffffffff888116911614611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c6173745665726966696564426174636820646f6573206e6f74206d6160648201527f7463680000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8667ffffffffffffffff168667ffffffffffffffff161161133c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a4016108d0565b60035467ffffffffffffffff680100000000000000009091048116908716111561140f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a76657269667942617463686573908201527f3a20626174636820646f6573206e6f742068617665206265656e20736571756560648201527f6e63656400000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b600061141d8888888861186e565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161145291906144a8565b602060405180830381855afa15801561146f573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061149291906143da565b61149c91906144f3565b6007546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916115069189918991899190600401614507565b602060405180830381865afa158015611523573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115479190614581565b6115d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016108d0565b611623336115e18b8b61442b565b67ffffffffffffffff166115f3611ffa565b6115fd919061446b565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff169190613603565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a1617815560068790556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820189905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b1580156116c557600080fd5b505af11580156116d9573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8b1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a3505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146117d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b6118626134a6565b61186c600061365e565b565b67ffffffffffffffff8085166000908152600260205260408082205492861682529020546060919080611949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b6006546009546040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b1660208201526034810192909252605482018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607485015291821b8116607c8401526084830187905260a4830184905260c483018890529088901b1660e482015260ec0160405160208183030381529060405292505050949350505050565b611a086134a6565b60045467ffffffffffffffff888116911614611acc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8667ffffffffffffffff168667ffffffffffffffff1611611b95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff6801000000000000000090910481169087161115611c67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b67ffffffffffffffff861660009081526002602052604090205480611d0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f74206578697374000060648201526084016108d0565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff891617815560068690556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820188905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b158015611db057600080fd5b505af1158015611dc4573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8a1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a35050505050505050565b60035460009067ffffffffffffffff7001000000000000000000000000000000008204811691611e5891780100000000000000000000000000000000000000000000000090910416600161459e565b611e62919061442b565b611e7e9067ffffffffffffffff16670de0b6b3a764000061446b565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611f36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061184f90831515815260200190565b611fbf6134a6565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b600080546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829162010000900473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561206f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209391906143da565b60045460035491925060009167ffffffffffffffff918216916801000000000000000082048116916120f8917001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041661442b565b612102919061459e565b61210c919061442b565b67ffffffffffffffff16905061212281836145ca565b9250505090565b6121316134a6565b6003805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b6121806134a6565b600a61218c828261462c565b5050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600861224f828261462c565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161184f9190613b88565b60045460009067ffffffffffffffff868116911614612346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8467ffffffffffffffff168467ffffffffffffffff161161240f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff68010000000000000000909104811690851611156124e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b60006124ef8686868661186e565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161252491906144a8565b602060405180830381855afa158015612541573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061256491906143da565b61256e91906144f3565b979650505050505050565b600054610100900460ff16158080156125995750600054600160ff909116105b806125b35750303b1580156125b3575060005460ff166001145b61263f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016108d0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561269d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602179055600780549091168a83161790556006889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c01000000000000000000000000000000000000000000000000000000008715150217905560086127b5858261462c565b50600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600a6127f6838261462c565b506127ff6136d5565b801561286257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6128766134a6565b600655565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108d0565b805180612a0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612a58918491700100000000000000000000000000000000900416614746565b1115612ae6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016108d0565b60035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205491937001000000000000000000000000000000009004909216915b84811015612e51576000868281518110612b4657612b46614355565b602002602001015190508380612b5b906143b3565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114612cb4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016108d0565b612cbf600188614454565b8303612d97574262093a808360400151612cd9919061459e565b67ffffffffffffffff161115612d97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016108d0565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612e39906143b3565b96505050508080612e49906143f3565b915050612b2a565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260026020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612ffe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108d0565b6000613008611e09565b90508181111561309a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016108d0565b61ea6083511061312c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016108d0565b6000546131579062010000900473ffffffffffffffffffffffffffffffffffffffff16333084613527565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa1580156131c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131eb91906143da565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613225836143b3565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161329e93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000908152600190935291205532330361338c57600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26133e9565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516133e09392919061475e565b60405180910390a25b50505050565b6133f76134a6565b73ffffffffffffffffffffffffffffffffffffffff811661349a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108d0565b6134a38161365e565b50565b603d5473ffffffffffffffffffffffffffffffffffffffff16331461186c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526133e99085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613774565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526136599084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401613581565b505050565b603d805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661376c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d0565b61186c613880565b60006137d6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166139209092919063ffffffff16565b80519091501561365957808060200190518101906137f49190614581565b613659576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108d0565b600054610100900460ff16613917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d0565b61186c3361365e565b606061392f8484600085613939565b90505b9392505050565b6060824710156139cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016108d0565b73ffffffffffffffffffffffffffffffffffffffff85163b613a49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108d0565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613a7291906144a8565b60006040518083038185875af1925050503d8060008114613aaf576040519150601f19603f3d011682016040523d82523d6000602084013e613ab4565b606091505b509150915061256e82828660608315613ace575081613932565b825115613ade5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d09190613b88565b60005b83811015613b2d578181015183820152602001613b15565b838111156133e95750506000910152565b60008151808452613b56816020860160208601613b12565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006139326020830184613b3e565b803567ffffffffffffffff81168114613bb357600080fd5b919050565b60008060408385031215613bcb57600080fd5b613bd483613b9b565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613c3457613c34613be2565b60405290565b6040516060810167ffffffffffffffff81118282101715613c3457613c34613be2565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613ca457613ca4613be2565b604052919050565b600067ffffffffffffffff821115613cc657613cc6613be2565b5060051b60200190565b600082601f830112613ce157600080fd5b813567ffffffffffffffff811115613cfb57613cfb613be2565b613d2c60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613c5d565b818152846020838601011115613d4157600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613d7157600080fd5b823567ffffffffffffffff80821115613d8957600080fd5b818501915085601f830112613d9d57600080fd5b8135613db0613dab82613cac565b613c5d565b81815260059190911b83018401908481019088831115613dcf57600080fd5b8585015b83811015613e8657803585811115613deb5760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001811315613e215760008081fd5b613e29613c11565b8983013588811115613e3b5760008081fd5b613e498e8c83870101613cd0565b8252506040808401358b8301526060613e63818601613b9b565b82840152613e72848601613b9b565b908301525085525050918601918601613dd3565b5098975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146134a357600080fd5b8035613bb381613e93565b600060208284031215613ed257600080fd5b813561393281613e93565b8060408101831015613eee57600080fd5b92915050565b6000806000806000806000610180888a031215613f1057600080fd5b613f1988613b9b565b9650613f2760208901613b9b565b95506040880135945060608801359350613f448960808a01613edd565b9250610140880189811115613f5857600080fd5b60c089019250613f688a82613edd565b91505092959891949750929550565b600080600080600060a08688031215613f8f57600080fd5b85359450602086013567ffffffffffffffff811115613fad57600080fd5b613fb988828901613cd0565b94505060408601359250613fcf60608701613b9b565b91506080860135613fdf81613e93565b809150509295509295909350565b600060208284031215613fff57600080fd5b61393282613b9b565b6000806000806080858703121561401e57600080fd5b61402785613b9b565b935061403560208601613b9b565b93969395505050506040820135916060013590565b80151581146134a357600080fd5b8035613bb38161404a565b60006020828403121561407557600080fd5b81356139328161404a565b60006020828403121561409257600080fd5b813567ffffffffffffffff8111156140a957600080fd5b6140b584828501613cd0565b949350505050565b60008060008060008060008060006101208a8c0312156140dc57600080fd5b89356140e781613e93565b985060208a01356140f781613e93565b975061410560408b01613eb5565b965060608a0135955061411a60808b01613eb5565b945061412860a08b01614058565b935060c08a013567ffffffffffffffff8082111561414557600080fd5b6141518d838e01613cd0565b945061415f60e08d01613b9b565b93506101008c013591508082111561417657600080fd5b506141838c828d01613cd0565b9150509295985092959850929598565b6000602082840312156141a557600080fd5b5035919050565b600060208083850312156141bf57600080fd5b823567ffffffffffffffff808211156141d757600080fd5b818501915085601f8301126141eb57600080fd5b81356141f9613dab82613cac565b81815260059190911b8301840190848101908883111561421857600080fd5b8585015b83811015613e86578035858111156142345760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181131561426a5760008081fd5b614272613c3a565b89830135888111156142845760008081fd5b6142928e8c83870101613cd0565b8252506040808401358b8301526142aa838501613b9b565b908201528552505091860191860161421c565b600080604083850312156142d057600080fd5b823567ffffffffffffffff8111156142e757600080fd5b6142f385828601613cd0565b95602094909401359450505050565b600181811c9082168061431657607f821691505b60208210810361434f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036143d0576143d0614384565b6001019392505050565b6000602082840312156143ec57600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361442457614424614384565b5060010190565b600067ffffffffffffffff8381169083168181101561444c5761444c614384565b039392505050565b60008282101561446657614466614384565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144a3576144a3614384565b500290565b600082516144ba818460208701613b12565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614502576145026144c4565b500690565b61012081016040808784376000838201818152879190815b600281101561453f5784848337908401828152928401929060010161451f565b5050828760c0870137610100850181815286935091505b6001811015614575578251825260209283019290910190600101614556565b50505095945050505050565b60006020828403121561459357600080fd5b81516139328161404a565b600067ffffffffffffffff8083168185168083038211156145c1576145c1614384565b01949350505050565b6000826145d9576145d96144c4565b500490565b601f82111561365957600081815260208120601f850160051c810160208610156146055750805b601f850160051c820191505b8181101561462457828155600101614611565b505050505050565b815167ffffffffffffffff81111561464657614646613be2565b61465a816146548454614302565b846145de565b602080601f8311600181146146ad57600084156146775750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614624565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156146fa578886015182559484019460019091019084016146db565b508582101561473657878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000821982111561475957614759614384565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006147936060830184613b3e565b9594505050505056fea26469706673582212205a9a1deeb7db16f2005fedc28f6c98579cecadb633923d1989fee6f570d6a24564736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102de5760003560e01c80639b79676011610186578063d02103ca116100e3578063d8f54db011610097578063eaeb077b11610071578063eaeb077b14610739578063f2fde38b1461074c578063f75527611461075f57600080fd5b8063d8f54db0146106ac578063e7a7ed02146106e9578063e8bf92ed1461071957600080fd5b8063d2fd1b31116100c8578063d2fd1b3114610673578063d307b74314610686578063d8d1091b1461069957600080fd5b8063d02103ca14610640578063d0ae98dd1461066057600080fd5b8063b4d63f581161013a578063c0cad3021161011f578063c0cad302146105ee578063c89e42df14610601578063cfa8ed471461061457600080fd5b8063b4d63f58146105a8578063b6b0b097146105c857600080fd5b8063ac2eba981161016b578063ac2eba9814610582578063adc879e91461058b578063b02286c01461059f57600080fd5b80639b79676014610565578063ab9fc5ef1461057857600080fd5b80636b8616ce1161023f57806379847057116101f35780638da5cb5b116101cd5780638da5cb5b1461050b57806396dc3d391461054a57806399f5634e1461055d57600080fd5b806379847057146104dc5780637fcb3653146104e45780638c4a0af7146104f857600080fd5b8063715018a611610224578063715018a6146104ae5780637152facf146104b6578063748608de146104c957600080fd5b80636b8616ce1461047b5780636ff512cc1461049b57600080fd5b806345605267116102965780635437988d1161027b5780635437988d146103a657806355b925e6146103b9578063574f649e146103cc57600080fd5b80634560526714610376578063542028d51461039e57600080fd5b80631a26da14116102c75780631a26da141461032e5780633c15826714610343578063423fa8561461035657600080fd5b8063107bf28c146102e357806319d8ac6114610301575b600080fd5b6102eb61076e565b6040516102f89190613b88565b60405180910390f35b6003546103159067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102f8565b61034161033c366004613bb8565b6107fc565b005b610341610351366004613d5e565b610821565b6003546103159068010000000000000000900467ffffffffffffffff1681565b60035461031590700100000000000000000000000000000000900467ffffffffffffffff1681565b6102eb611153565b6103416103b4366004613ec0565b611160565b6103416103c7366004613ef4565b6111af565b61046d6103da366004613f77565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b6040519081526020016102f8565b61046d610489366004613fed565b60016020526000908152604090205481565b6103416104a9366004613ec0565b61171f565b61034161185a565b6102eb6104c4366004614008565b61186e565b6103416104d7366004613ef4565b611a00565b61046d611e09565b6004546103159067ffffffffffffffff1681565b610341610506366004614063565b611e83565b603d5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102f8565b610341610558366004613fed565b611fb7565b61046d611ffa565b610341610573366004613fed565b612129565b61031562093a8081565b61046d60065481565b6009546103159067ffffffffffffffff1681565b61046d61ea6081565b61046d6105b6366004613fed565b60026020526000908152604090205481565b6000546105259062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6103416105fc366004614080565b612178565b61034161060f366004614080565b612190565b6004546105259068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546105259073ffffffffffffffffffffffffffffffffffffffff1681565b61046d61066e366004614008565b61227f565b6103416106813660046140bd565b612579565b610341610694366004614193565b61286e565b6103416106a73660046141ac565b61287b565b6004546106d9907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016102f8565b600354610315907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6007546105259073ffffffffffffffffffffffffffffffffffffffff1681565b6103416107473660046142bd565b612f21565b61034161075a366004613ec0565b6133ef565b61046d67016345785d8a000081565b600a805461077b90614302565b80601f01602080910402602001604051908101604052809291908181526020018280546107a790614302565b80156107f45780601f106107c9576101008083540402835291602001916107f4565b820191906000526020600020905b8154815290600101906020018083116107d757829003601f168201915b505050505081565b6108046134a6565b67ffffffffffffffff909116600090815260026020526040902055565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146108d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b805160035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610f2957600087828151811061094157610941614355565b602002602001015190506000816060015167ffffffffffffffff161115610bac578361096c816143b3565b9450506000816000015180519060200120826020015183606001516040516020016109cf93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114610ad4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610ba6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016108d0565b50610d7a565b60208101511580610c5b575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610c159160040190815260200190565b6020604051808303816000875af1158015610c34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5891906143da565b15155b610ce7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016108d0565b80515161ea6011610d7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016108d0565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610db0575042816040015167ffffffffffffffff1611155b610e62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610f0b906143b3565b95505080604001519550508080610f21906143f3565b915050610925565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610fe6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016108d0565b60035460009061101490700100000000000000000000000000000000900467ffffffffffffffff168461442b565b6110289067ffffffffffffffff1687614454565b6003805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152600260205260409020839055905061110633306110df8467016345785d8a000061446b565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16929190613527565b6003546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b6008805461077b90614302565b6111686134a6565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60045467ffffffffffffffff888116911614611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c6173745665726966696564426174636820646f6573206e6f74206d6160648201527f7463680000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8667ffffffffffffffff168667ffffffffffffffff161161133c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a4016108d0565b60035467ffffffffffffffff680100000000000000009091048116908716111561140f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a76657269667942617463686573908201527f3a20626174636820646f6573206e6f742068617665206265656e20736571756560648201527f6e63656400000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b600061141d8888888861186e565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161145291906144a8565b602060405180830381855afa15801561146f573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061149291906143da565b61149c91906144f3565b6007546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916115069189918991899190600401614507565b602060405180830381865afa158015611523573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115479190614581565b6115d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016108d0565b611623336115e18b8b61442b565b67ffffffffffffffff166115f3611ffa565b6115fd919061446b565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff169190613603565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a1617815560068790556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820189905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b1580156116c557600080fd5b505af11580156116d9573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8b1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a3505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146117d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b6118626134a6565b61186c600061365e565b565b67ffffffffffffffff8085166000908152600260205260408082205492861682529020546060919080611949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b6006546009546040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b1660208201526034810192909252605482018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607485015291821b8116607c8401526084830187905260a4830184905260c483018890529088901b1660e482015260ec0160405160208183030381529060405292505050949350505050565b611a086134a6565b60045467ffffffffffffffff888116911614611acc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8667ffffffffffffffff168667ffffffffffffffff1611611b95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff6801000000000000000090910481169087161115611c67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b67ffffffffffffffff861660009081526002602052604090205480611d0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f74206578697374000060648201526084016108d0565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff891617815560068690556005546040517f33d6247d00000000000000000000000000000000000000000000000000000000815291820188905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b158015611db057600080fd5b505af1158015611dc4573d6000803e3d6000fd5b505060405133925067ffffffffffffffff8a1691507f9026f258d76afa912681d3fc727111cbab19565af9f03c5323627d6e51dda08390600090a35050505050505050565b60035460009067ffffffffffffffff7001000000000000000000000000000000008204811691611e5891780100000000000000000000000000000000000000000000000090910416600161459e565b611e62919061442b565b611e7e9067ffffffffffffffff16670de0b6b3a764000061446b565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611f36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061184f90831515815260200190565b611fbf6134a6565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b600080546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829162010000900473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561206f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209391906143da565b60045460035491925060009167ffffffffffffffff918216916801000000000000000082048116916120f8917001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041661442b565b612102919061459e565b61210c919061442b565b67ffffffffffffffff16905061212281836145ca565b9250505090565b6121316134a6565b6003805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b6121806134a6565b600a61218c828261462c565b5050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108d0565b600861224f828261462c565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161184f9190613b88565b60045460009067ffffffffffffffff868116911614612346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b8467ffffffffffffffff168467ffffffffffffffff161161240f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff68010000000000000000909104811690851611156124e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b60006124ef8686868661186e565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161252491906144a8565b602060405180830381855afa158015612541573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061256491906143da565b61256e91906144f3565b979650505050505050565b600054610100900460ff16158080156125995750600054600160ff909116105b806125b35750303b1580156125b3575060005460ff166001145b61263f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016108d0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561269d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602179055600780549091168a83161790556006889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c01000000000000000000000000000000000000000000000000000000008715150217905560086127b5858261462c565b50600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600a6127f6838261462c565b506127ff6136d5565b801561286257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6128766134a6565b600655565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108d0565b805180612a0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108d0565b60035467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612a58918491700100000000000000000000000000000000900416614746565b1115612ae6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016108d0565b60035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205491937001000000000000000000000000000000009004909216915b84811015612e51576000868281518110612b4657612b46614355565b602002602001015190508380612b5b906143b3565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114612cb4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016108d0565b612cbf600188614454565b8303612d97574262093a808360400151612cd9919061459e565b67ffffffffffffffff161115612d97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016108d0565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612e39906143b3565b96505050508080612e49906143f3565b915050612b2a565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260026020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612ffe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108d0565b6000613008611e09565b90508181111561309a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016108d0565b61ea6083511061312c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016108d0565b6000546131579062010000900473ffffffffffffffffffffffffffffffffffffffff16333084613527565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa1580156131c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131eb91906143da565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613225836143b3565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161329e93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000908152600190935291205532330361338c57600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26133e9565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516133e09392919061475e565b60405180910390a25b50505050565b6133f76134a6565b73ffffffffffffffffffffffffffffffffffffffff811661349a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108d0565b6134a38161365e565b50565b603d5473ffffffffffffffffffffffffffffffffffffffff16331461186c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526133e99085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613774565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526136599084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401613581565b505050565b603d805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661376c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d0565b61186c613880565b60006137d6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166139209092919063ffffffff16565b80519091501561365957808060200190518101906137f49190614581565b613659576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108d0565b600054610100900460ff16613917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d0565b61186c3361365e565b606061392f8484600085613939565b90505b9392505050565b6060824710156139cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016108d0565b73ffffffffffffffffffffffffffffffffffffffff85163b613a49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108d0565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613a7291906144a8565b60006040518083038185875af1925050503d8060008114613aaf576040519150601f19603f3d011682016040523d82523d6000602084013e613ab4565b606091505b509150915061256e82828660608315613ace575081613932565b825115613ade5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d09190613b88565b60005b83811015613b2d578181015183820152602001613b15565b838111156133e95750506000910152565b60008151808452613b56816020860160208601613b12565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006139326020830184613b3e565b803567ffffffffffffffff81168114613bb357600080fd5b919050565b60008060408385031215613bcb57600080fd5b613bd483613b9b565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613c3457613c34613be2565b60405290565b6040516060810167ffffffffffffffff81118282101715613c3457613c34613be2565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613ca457613ca4613be2565b604052919050565b600067ffffffffffffffff821115613cc657613cc6613be2565b5060051b60200190565b600082601f830112613ce157600080fd5b813567ffffffffffffffff811115613cfb57613cfb613be2565b613d2c60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613c5d565b818152846020838601011115613d4157600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613d7157600080fd5b823567ffffffffffffffff80821115613d8957600080fd5b818501915085601f830112613d9d57600080fd5b8135613db0613dab82613cac565b613c5d565b81815260059190911b83018401908481019088831115613dcf57600080fd5b8585015b83811015613e8657803585811115613deb5760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001811315613e215760008081fd5b613e29613c11565b8983013588811115613e3b5760008081fd5b613e498e8c83870101613cd0565b8252506040808401358b8301526060613e63818601613b9b565b82840152613e72848601613b9b565b908301525085525050918601918601613dd3565b5098975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146134a357600080fd5b8035613bb381613e93565b600060208284031215613ed257600080fd5b813561393281613e93565b8060408101831015613eee57600080fd5b92915050565b6000806000806000806000610180888a031215613f1057600080fd5b613f1988613b9b565b9650613f2760208901613b9b565b95506040880135945060608801359350613f448960808a01613edd565b9250610140880189811115613f5857600080fd5b60c089019250613f688a82613edd565b91505092959891949750929550565b600080600080600060a08688031215613f8f57600080fd5b85359450602086013567ffffffffffffffff811115613fad57600080fd5b613fb988828901613cd0565b94505060408601359250613fcf60608701613b9b565b91506080860135613fdf81613e93565b809150509295509295909350565b600060208284031215613fff57600080fd5b61393282613b9b565b6000806000806080858703121561401e57600080fd5b61402785613b9b565b935061403560208601613b9b565b93969395505050506040820135916060013590565b80151581146134a357600080fd5b8035613bb38161404a565b60006020828403121561407557600080fd5b81356139328161404a565b60006020828403121561409257600080fd5b813567ffffffffffffffff8111156140a957600080fd5b6140b584828501613cd0565b949350505050565b60008060008060008060008060006101208a8c0312156140dc57600080fd5b89356140e781613e93565b985060208a01356140f781613e93565b975061410560408b01613eb5565b965060608a0135955061411a60808b01613eb5565b945061412860a08b01614058565b935060c08a013567ffffffffffffffff8082111561414557600080fd5b6141518d838e01613cd0565b945061415f60e08d01613b9b565b93506101008c013591508082111561417657600080fd5b506141838c828d01613cd0565b9150509295985092959850929598565b6000602082840312156141a557600080fd5b5035919050565b600060208083850312156141bf57600080fd5b823567ffffffffffffffff808211156141d757600080fd5b818501915085601f8301126141eb57600080fd5b81356141f9613dab82613cac565b81815260059190911b8301840190848101908883111561421857600080fd5b8585015b83811015613e86578035858111156142345760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181131561426a5760008081fd5b614272613c3a565b89830135888111156142845760008081fd5b6142928e8c83870101613cd0565b8252506040808401358b8301526142aa838501613b9b565b908201528552505091860191860161421c565b600080604083850312156142d057600080fd5b823567ffffffffffffffff8111156142e757600080fd5b6142f385828601613cd0565b95602094909401359450505050565b600181811c9082168061431657607f821691505b60208210810361434f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036143d0576143d0614384565b6001019392505050565b6000602082840312156143ec57600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361442457614424614384565b5060010190565b600067ffffffffffffffff8381169083168181101561444c5761444c614384565b039392505050565b60008282101561446657614466614384565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144a3576144a3614384565b500290565b600082516144ba818460208701613b12565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614502576145026144c4565b500690565b61012081016040808784376000838201818152879190815b600281101561453f5784848337908401828152928401929060010161451f565b5050828760c0870137610100850181815286935091505b6001811015614575578251825260209283019290910190600101614556565b50505095945050505050565b60006020828403121561459357600080fd5b81516139328161404a565b600067ffffffffffffffff8083168185168083038211156145c1576145c1614384565b01949350505050565b6000826145d9576145d96144c4565b500490565b601f82111561365957600081815260208120601f850160051c810160208610156146055750805b601f850160051c820191505b8181101561462457828155600101614611565b505050505050565b815167ffffffffffffffff81111561464657614646613be2565b61465a816146548454614302565b846145de565b602080601f8311600181146146ad57600084156146775750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614624565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156146fa578886015182559484019460019091019084016146db565b508582101561473657878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000821982111561475957614759614384565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006147936060830184613b3e565b9594505050505056fea26469706673582212205a9a1deeb7db16f2005fedc28f6c98579cecadb633923d1989fee6f570d6a24564736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5061472c806100206000396000f3fe608060405234801561001057600080fd5b50600436106102de5760003560e01c806399f5634e11610186578063d02103ca116100e3578063e7a7ed0211610097578063f2fde38b11610071578063f2fde38b14610750578063f755276114610763578063fe16564f1461077257600080fd5b8063e7a7ed02146106ed578063e8bf92ed1461071d578063eaeb077b1461073d57600080fd5b8063d2fd1b31116100c8578063d2fd1b311461068a578063d8d1091b1461069d578063d8f54db0146106b057600080fd5b8063d02103ca14610657578063d0ae98dd1461067757600080fd5b8063b4d63f581161013a578063c0cad3021161011f578063c0cad30214610605578063c89e42df14610618578063cfa8ed471461062b57600080fd5b8063b4d63f58146105bf578063b6b0b097146105df57600080fd5b8063ab9fc5ef1161016b578063ab9fc5ef14610598578063adc879e9146105a2578063b02286c0146105b657600080fd5b806399f5634e1461057d5780639b7967601461058557600080fd5b8063574f649e1161023f578063748608de116101f35780638c4a0af7116101cd5780638c4a0af7146105185780638da5cb5b1461052b57806396dc3d391461056a57600080fd5b8063748608de146104e957806379847057146104fc5780637fcb36531461050457600080fd5b80636ff512cc116102245780636ff512cc146104bb578063715018a6146104ce5780637152facf146104d657600080fd5b8063574f649e146103fa5780636b8616ce1461049b57600080fd5b80634560526711610296578063542028d51161027b578063542028d5146103cc5780635437988d146103d457806355b925e6146103e757600080fd5b806345605267146103765780635392c5e01461039e57600080fd5b80631a26da14116102c75780631a26da141461032e5780633c15826714610343578063423fa8561461035657600080fd5b8063107bf28c146102e357806319d8ac6114610301575b600080fd5b6102eb610785565b6040516102f89190613acf565b60405180910390f35b6003546103159067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102f8565b61034161033c366004613aff565b610813565b005b610341610351366004613ca5565b610838565b6003546103159068010000000000000000900467ffffffffffffffff1681565b60035461031590700100000000000000000000000000000000900467ffffffffffffffff1681565b6103be6103ac366004613dda565b60066020526000908152604090205481565b6040519081526020016102f8565b6102eb61116a565b6103416103e2366004613e22565b611177565b6103416103f5366004613e56565b6111c6565b6103be610408366004613ed9565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b6103be6104a9366004613dda565b60016020526000908152604090205481565b6103416104c9366004613e22565b611689565b6103416117c4565b6102eb6104e4366004613f4f565b6117d8565b6103416104f7366004613e56565b611a42565b6103be611d13565b6004546103159067ffffffffffffffff1681565b610341610526366004613faa565b611d8d565b603d5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102f8565b610341610578366004613dda565b611ec1565b6103be611f04565b610341610593366004613dda565b612033565b61031562093a8081565b6009546103159067ffffffffffffffff1681565b6103be61ea6081565b6103be6105cd366004613dda565b60026020526000908152604090205481565b6000546105459062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b610341610613366004613fc7565b612082565b610341610626366004613fc7565b61209a565b6004546105459068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546105459073ffffffffffffffffffffffffffffffffffffffff1681565b6103be610685366004613f4f565b612189565b610341610698366004614004565b612483565b6103416106ab3660046140da565b61279f565b6004546106dd907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016102f8565b600354610315907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6007546105459073ffffffffffffffffffffffffffffffffffffffff1681565b61034161074b3660046141eb565b612e45565b61034161075e366004613e22565b613313565b6103be67016345785d8a000081565b610341610780366004614230565b6133ca565b600a80546107929061425c565b80601f01602080910402602001604051908101604052809291908181526020018280546107be9061425c565b801561080b5780601f106107e05761010080835404028352916020019161080b565b820191906000526020600020905b8154815290600101906020018083116107ee57829003601f168201915b505050505081565b61081b6133ed565b67ffffffffffffffff909116600090815260026020526040902055565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b805160035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610f40576000878281518110610958576109586142af565b602002602001015190506000816060015167ffffffffffffffff161115610bc357836109838161430d565b9450506000816000015180519060200120826020015183606001516040516020016109e693929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114610aeb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108e7565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610bbd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016108e7565b50610d91565b60208101511580610c72575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610c2c9160040190815260200190565b6020604051808303816000875af1158015610c4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6f9190614334565b15155b610cfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016108e7565b80515161ea6011610d91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016108e7565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610dc7575042816040015167ffffffffffffffff1611155b610e79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016108e7565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610f229061430d565b95505080604001519550508080610f389061434d565b91505061093c565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610ffd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016108e7565b60035460009061102b90700100000000000000000000000000000000900467ffffffffffffffff1684614385565b61103f9067ffffffffffffffff16876143ae565b6003805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152600260205260409020839055905061111d33306110f68467016345785d8a00006143c5565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1692919061346e565b6003546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b600880546107929061425c565b61117f6133ed565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60045467ffffffffffffffff908116908816111561128c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a4016108e7565b60045467ffffffffffffffff90811690871611611351576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a4016108e7565b600061135f888888886117d8565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516113949190614402565b602060405180830381855afa1580156113b1573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906113d49190614334565b6113de919061444d565b6007546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916114489189918991899190600401614461565b602060405180830381865afa158015611465573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148991906144db565b611515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016108e7565b6004546115749033906115329067ffffffffffffffff168b614385565b67ffffffffffffffff16611544611f04565b61154e91906143c5565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16919061354a565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a1690811782556000908152600660205260409081902088905560055490517f33d6247d00000000000000000000000000000000000000000000000000000000815291820189905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b15801561162557600080fd5b505af1158015611639573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461173c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108e7565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b6117cc6133ed565b6117d660006135a5565b565b67ffffffffffffffff80851660008181526002602052604080822054938716825290205460609291158061180b57508115155b6118bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016108e7565b80611970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016108e7565b67ffffffffffffffff87166000908152600660209081526040918290205460095492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b611a4a6133ed565b60045467ffffffffffffffff9081169088161115611b10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a4016108e7565b60045467ffffffffffffffff90811690871611611bd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a4016108e7565b67ffffffffffffffff80881660009081526002602052604080822054928916825290205481611c86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f74206578697374000060648201526084016108e7565b80611574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f74206578697374000060648201526084016108e7565b60035460009067ffffffffffffffff7001000000000000000000000000000000008204811691611d629178010000000000000000000000000000000000000000000000009091041660016144f8565b611d6c9190614385565b611d889067ffffffffffffffff16670de0b6b3a76400006143c5565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611e40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108e7565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe6906117b990831515815260200190565b611ec96133ed565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b600080546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829162010000900473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015611f79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f9d9190614334565b60045460035491925060009167ffffffffffffffff918216916801000000000000000082048116916120029170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614385565b61200c91906144f8565b6120169190614385565b67ffffffffffffffff16905061202c8183614524565b9250505090565b61203b6133ed565b6003805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b61208a6133ed565b600a6120968282614586565b5050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461214d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108e7565b60086121598282614586565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b20816040516117b99190613acf565b60045460009067ffffffffffffffff868116911614612250576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a4016108e7565b8467ffffffffffffffff168467ffffffffffffffff1611612319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a4016108e7565b60035467ffffffffffffffff68010000000000000000909104811690851611156123eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016108e7565b60006123f9868686866117d8565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161242e9190614402565b602060405180830381855afa15801561244b573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061246e9190614334565b612478919061444d565b979650505050505050565b600054610100900460ff16158080156124a35750600054600160ff909116105b806124bd5750303b1580156124bd575060005460ff166001145b612549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016108e7565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156125a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602178155600780549092168b841617909155805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f8889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c01000000000000000000000000000000000000000000000000000000008715150217905560086126e68582614586565b50600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600a6127278382614586565b5061273061361c565b801561279357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461287c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108e7565b805180612931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108e7565b60035467ffffffffffffffff7801000000000000000000000000000000000000000000000000820481169161297c9184917001000000000000000000000000000000009004166146a0565b1115612a0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016108e7565b60035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205491937001000000000000000000000000000000009004909216915b84811015612d75576000868281518110612a6a57612a6a6142af565b602002602001015190508380612a7f9061430d565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114612bd8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016108e7565b612be36001886143ae565b8303612cbb574262093a808360400151612bfd91906144f8565b67ffffffffffffffff161115612cbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016108e7565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612d5d9061430d565b96505050508080612d6d9061434d565b915050612a4e565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260026020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612f22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108e7565b6000612f2c611d13565b905081811115612fbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016108e7565b61ea60835110613050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016108e7565b60005461307b9062010000900473ffffffffffffffffffffffffffffffffffffffff1633308461346e565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa1580156130eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310f9190614334565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff169060186131498361430d565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050838051906020012081426040516020016131c293929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260019093529120553233036132b057600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261330d565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613304939291906146b8565b60405180910390a25b50505050565b61331b6133ed565b73ffffffffffffffffffffffffffffffffffffffff81166133be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108e7565b6133c7816135a5565b50565b6133d26133ed565b67ffffffffffffffff16600090815260066020526040902055565b603d5473ffffffffffffffffffffffffffffffffffffffff1633146117d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108e7565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261330d9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526136bb565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526135a09084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016134c8565b505050565b603d805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166136b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e7565b6117d66137c7565b600061371d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166138679092919063ffffffff16565b8051909150156135a0578080602001905181019061373b91906144db565b6135a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108e7565b600054610100900460ff1661385e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e7565b6117d6336135a5565b60606138768484600085613880565b90505b9392505050565b606082471015613912576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016108e7565b73ffffffffffffffffffffffffffffffffffffffff85163b613990576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516139b99190614402565b60006040518083038185875af1925050503d80600081146139f6576040519150601f19603f3d011682016040523d82523d6000602084013e6139fb565b606091505b509150915061247882828660608315613a15575081613879565b825115613a255782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e79190613acf565b60005b83811015613a74578181015183820152602001613a5c565b8381111561330d5750506000910152565b60008151808452613a9d816020860160208601613a59565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006138796020830184613a85565b803567ffffffffffffffff81168114613afa57600080fd5b919050565b60008060408385031215613b1257600080fd5b613b1b83613ae2565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613b7b57613b7b613b29565b60405290565b6040516060810167ffffffffffffffff81118282101715613b7b57613b7b613b29565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613beb57613beb613b29565b604052919050565b600067ffffffffffffffff821115613c0d57613c0d613b29565b5060051b60200190565b600082601f830112613c2857600080fd5b813567ffffffffffffffff811115613c4257613c42613b29565b613c7360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613ba4565b818152846020838601011115613c8857600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613cb857600080fd5b823567ffffffffffffffff80821115613cd057600080fd5b818501915085601f830112613ce457600080fd5b8135613cf7613cf282613bf3565b613ba4565b81815260059190911b83018401908481019088831115613d1657600080fd5b8585015b83811015613dcd57803585811115613d325760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001811315613d685760008081fd5b613d70613b58565b8983013588811115613d825760008081fd5b613d908e8c83870101613c17565b8252506040808401358b8301526060613daa818601613ae2565b82840152613db9848601613ae2565b908301525085525050918601918601613d1a565b5098975050505050505050565b600060208284031215613dec57600080fd5b61387982613ae2565b73ffffffffffffffffffffffffffffffffffffffff811681146133c757600080fd5b8035613afa81613df5565b600060208284031215613e3457600080fd5b813561387981613df5565b8060408101831015613e5057600080fd5b92915050565b6000806000806000806000610180888a031215613e7257600080fd5b613e7b88613ae2565b9650613e8960208901613ae2565b95506040880135945060608801359350613ea68960808a01613e3f565b9250610140880189811115613eba57600080fd5b60c089019250613eca8a82613e3f565b91505092959891949750929550565b600080600080600060a08688031215613ef157600080fd5b85359450602086013567ffffffffffffffff811115613f0f57600080fd5b613f1b88828901613c17565b94505060408601359250613f3160608701613ae2565b91506080860135613f4181613df5565b809150509295509295909350565b60008060008060808587031215613f6557600080fd5b613f6e85613ae2565b9350613f7c60208601613ae2565b93969395505050506040820135916060013590565b80151581146133c757600080fd5b8035613afa81613f91565b600060208284031215613fbc57600080fd5b813561387981613f91565b600060208284031215613fd957600080fd5b813567ffffffffffffffff811115613ff057600080fd5b613ffc84828501613c17565b949350505050565b60008060008060008060008060006101208a8c03121561402357600080fd5b893561402e81613df5565b985060208a013561403e81613df5565b975061404c60408b01613e17565b965060608a0135955061406160808b01613e17565b945061406f60a08b01613f9f565b935060c08a013567ffffffffffffffff8082111561408c57600080fd5b6140988d838e01613c17565b94506140a660e08d01613ae2565b93506101008c01359150808211156140bd57600080fd5b506140ca8c828d01613c17565b9150509295985092959850929598565b600060208083850312156140ed57600080fd5b823567ffffffffffffffff8082111561410557600080fd5b818501915085601f83011261411957600080fd5b8135614127613cf282613bf3565b81815260059190911b8301840190848101908883111561414657600080fd5b8585015b83811015613dcd578035858111156141625760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018113156141985760008081fd5b6141a0613b81565b89830135888111156141b25760008081fd5b6141c08e8c83870101613c17565b8252506040808401358b8301526141d8838501613ae2565b908201528552505091860191860161414a565b600080604083850312156141fe57600080fd5b823567ffffffffffffffff81111561421557600080fd5b61422185828601613c17565b95602094909401359450505050565b6000806040838503121561424357600080fd5b8235915061425360208401613ae2565b90509250929050565b600181811c9082168061427057607f821691505b6020821081036142a9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681810361432a5761432a6142de565b6001019392505050565b60006020828403121561434657600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361437e5761437e6142de565b5060010190565b600067ffffffffffffffff838116908316818110156143a6576143a66142de565b039392505050565b6000828210156143c0576143c06142de565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143fd576143fd6142de565b500290565b60008251614414818460208701613a59565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261445c5761445c61441e565b500690565b61012081016040808784376000838201818152879190815b600281101561449957848483379084018281529284019290600101614479565b5050828760c0870137610100850181815286935091505b60018110156144cf5782518252602092830192909101906001016144b0565b50505095945050505050565b6000602082840312156144ed57600080fd5b815161387981613f91565b600067ffffffffffffffff80831681851680830382111561451b5761451b6142de565b01949350505050565b6000826145335761453361441e565b500490565b601f8211156135a057600081815260208120601f850160051c8101602086101561455f5750805b601f850160051c820191505b8181101561457e5782815560010161456b565b505050505050565b815167ffffffffffffffff8111156145a0576145a0613b29565b6145b4816145ae845461425c565b84614538565b602080601f83116001811461460757600084156145d15750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561457e565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561465457888601518255948401946001909101908401614635565b508582101561469057878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156146b3576146b36142de565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006146ed6060830184613a85565b9594505050505056fea264697066735822122011cc0f88e8f948fc39973e6a5afa2bbcf5b2d81afd9943bfa71ec264bf4da45e64736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102de5760003560e01c806399f5634e11610186578063d02103ca116100e3578063e7a7ed0211610097578063f2fde38b11610071578063f2fde38b14610750578063f755276114610763578063fe16564f1461077257600080fd5b8063e7a7ed02146106ed578063e8bf92ed1461071d578063eaeb077b1461073d57600080fd5b8063d2fd1b31116100c8578063d2fd1b311461068a578063d8d1091b1461069d578063d8f54db0146106b057600080fd5b8063d02103ca14610657578063d0ae98dd1461067757600080fd5b8063b4d63f581161013a578063c0cad3021161011f578063c0cad30214610605578063c89e42df14610618578063cfa8ed471461062b57600080fd5b8063b4d63f58146105bf578063b6b0b097146105df57600080fd5b8063ab9fc5ef1161016b578063ab9fc5ef14610598578063adc879e9146105a2578063b02286c0146105b657600080fd5b806399f5634e1461057d5780639b7967601461058557600080fd5b8063574f649e1161023f578063748608de116101f35780638c4a0af7116101cd5780638c4a0af7146105185780638da5cb5b1461052b57806396dc3d391461056a57600080fd5b8063748608de146104e957806379847057146104fc5780637fcb36531461050457600080fd5b80636ff512cc116102245780636ff512cc146104bb578063715018a6146104ce5780637152facf146104d657600080fd5b8063574f649e146103fa5780636b8616ce1461049b57600080fd5b80634560526711610296578063542028d51161027b578063542028d5146103cc5780635437988d146103d457806355b925e6146103e757600080fd5b806345605267146103765780635392c5e01461039e57600080fd5b80631a26da14116102c75780631a26da141461032e5780633c15826714610343578063423fa8561461035657600080fd5b8063107bf28c146102e357806319d8ac6114610301575b600080fd5b6102eb610785565b6040516102f89190613acf565b60405180910390f35b6003546103159067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102f8565b61034161033c366004613aff565b610813565b005b610341610351366004613ca5565b610838565b6003546103159068010000000000000000900467ffffffffffffffff1681565b60035461031590700100000000000000000000000000000000900467ffffffffffffffff1681565b6103be6103ac366004613dda565b60066020526000908152604090205481565b6040519081526020016102f8565b6102eb61116a565b6103416103e2366004613e22565b611177565b6103416103f5366004613e56565b6111c6565b6103be610408366004613ed9565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b6103be6104a9366004613dda565b60016020526000908152604090205481565b6103416104c9366004613e22565b611689565b6103416117c4565b6102eb6104e4366004613f4f565b6117d8565b6103416104f7366004613e56565b611a42565b6103be611d13565b6004546103159067ffffffffffffffff1681565b610341610526366004613faa565b611d8d565b603d5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102f8565b610341610578366004613dda565b611ec1565b6103be611f04565b610341610593366004613dda565b612033565b61031562093a8081565b6009546103159067ffffffffffffffff1681565b6103be61ea6081565b6103be6105cd366004613dda565b60026020526000908152604090205481565b6000546105459062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b610341610613366004613fc7565b612082565b610341610626366004613fc7565b61209a565b6004546105459068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546105459073ffffffffffffffffffffffffffffffffffffffff1681565b6103be610685366004613f4f565b612189565b610341610698366004614004565b612483565b6103416106ab3660046140da565b61279f565b6004546106dd907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016102f8565b600354610315907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6007546105459073ffffffffffffffffffffffffffffffffffffffff1681565b61034161074b3660046141eb565b612e45565b61034161075e366004613e22565b613313565b6103be67016345785d8a000081565b610341610780366004614230565b6133ca565b600a80546107929061425c565b80601f01602080910402602001604051908101604052809291908181526020018280546107be9061425c565b801561080b5780601f106107e05761010080835404028352916020019161080b565b820191906000526020600020905b8154815290600101906020018083116107ee57829003601f168201915b505050505081565b61081b6133ed565b67ffffffffffffffff909116600090815260026020526040902055565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b805160035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610f40576000878281518110610958576109586142af565b602002602001015190506000816060015167ffffffffffffffff161115610bc357836109838161430d565b9450506000816000015180519060200120826020015183606001516040516020016109e693929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114610aeb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108e7565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610bbd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016108e7565b50610d91565b60208101511580610c72575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610c2c9160040190815260200190565b6020604051808303816000875af1158015610c4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6f9190614334565b15155b610cfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016108e7565b80515161ea6011610d91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016108e7565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610dc7575042816040015167ffffffffffffffff1611155b610e79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016108e7565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610f229061430d565b95505080604001519550508080610f389061434d565b91505061093c565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610ffd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016108e7565b60035460009061102b90700100000000000000000000000000000000900467ffffffffffffffff1684614385565b61103f9067ffffffffffffffff16876143ae565b6003805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152600260205260409020839055905061111d33306110f68467016345785d8a00006143c5565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1692919061346e565b6003546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b600880546107929061425c565b61117f6133ed565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60045467ffffffffffffffff908116908816111561128c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a4016108e7565b60045467ffffffffffffffff90811690871611611351576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a4016108e7565b600061135f888888886117d8565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516113949190614402565b602060405180830381855afa1580156113b1573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906113d49190614334565b6113de919061444d565b6007546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916114489189918991899190600401614461565b602060405180830381865afa158015611465573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148991906144db565b611515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016108e7565b6004546115749033906115329067ffffffffffffffff168b614385565b67ffffffffffffffff16611544611f04565b61154e91906143c5565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16919061354a565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a1690811782556000908152600660205260409081902088905560055490517f33d6247d00000000000000000000000000000000000000000000000000000000815291820189905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b15801561162557600080fd5b505af1158015611639573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461173c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108e7565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b6117cc6133ed565b6117d660006135a5565b565b67ffffffffffffffff80851660008181526002602052604080822054938716825290205460609291158061180b57508115155b6118bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016108e7565b80611970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016108e7565b67ffffffffffffffff87166000908152600660209081526040918290205460095492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b611a4a6133ed565b60045467ffffffffffffffff9081169088161115611b10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a4016108e7565b60045467ffffffffffffffff90811690871611611bd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a4016108e7565b67ffffffffffffffff80881660009081526002602052604080822054928916825290205481611c86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f74206578697374000060648201526084016108e7565b80611574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f74206578697374000060648201526084016108e7565b60035460009067ffffffffffffffff7001000000000000000000000000000000008204811691611d629178010000000000000000000000000000000000000000000000009091041660016144f8565b611d6c9190614385565b611d889067ffffffffffffffff16670de0b6b3a76400006143c5565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611e40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108e7565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe6906117b990831515815260200190565b611ec96133ed565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b600080546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829162010000900473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015611f79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f9d9190614334565b60045460035491925060009167ffffffffffffffff918216916801000000000000000082048116916120029170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614385565b61200c91906144f8565b6120169190614385565b67ffffffffffffffff16905061202c8183614524565b9250505090565b61203b6133ed565b6003805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b61208a6133ed565b600a6120968282614586565b5050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461214d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108e7565b60086121598282614586565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b20816040516117b99190613acf565b60045460009067ffffffffffffffff868116911614612250576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a4016108e7565b8467ffffffffffffffff168467ffffffffffffffff1611612319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a4016108e7565b60035467ffffffffffffffff68010000000000000000909104811690851611156123eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016108e7565b60006123f9868686866117d8565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161242e9190614402565b602060405180830381855afa15801561244b573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061246e9190614334565b612478919061444d565b979650505050505050565b600054610100900460ff16158080156124a35750600054600160ff909116105b806124bd5750303b1580156124bd575060005460ff166001145b612549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016108e7565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156125a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602178155600780549092168b841617909155805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f8889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c01000000000000000000000000000000000000000000000000000000008715150217905560086126e68582614586565b50600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600a6127278382614586565b5061273061361c565b801561279357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461287c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108e7565b805180612931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108e7565b60035467ffffffffffffffff7801000000000000000000000000000000000000000000000000820481169161297c9184917001000000000000000000000000000000009004166146a0565b1115612a0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016108e7565b60035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205491937001000000000000000000000000000000009004909216915b84811015612d75576000868281518110612a6a57612a6a6142af565b602002602001015190508380612a7f9061430d565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114612bd8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016108e7565b612be36001886143ae565b8303612cbb574262093a808360400151612bfd91906144f8565b67ffffffffffffffff161115612cbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016108e7565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612d5d9061430d565b96505050508080612d6d9061434d565b915050612a4e565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260026020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612f22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108e7565b6000612f2c611d13565b905081811115612fbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016108e7565b61ea60835110613050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016108e7565b60005461307b9062010000900473ffffffffffffffffffffffffffffffffffffffff1633308461346e565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa1580156130eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310f9190614334565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff169060186131498361430d565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050838051906020012081426040516020016131c293929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260019093529120553233036132b057600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261330d565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613304939291906146b8565b60405180910390a25b50505050565b61331b6133ed565b73ffffffffffffffffffffffffffffffffffffffff81166133be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108e7565b6133c7816135a5565b50565b6133d26133ed565b67ffffffffffffffff16600090815260066020526040902055565b603d5473ffffffffffffffffffffffffffffffffffffffff1633146117d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108e7565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261330d9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526136bb565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526135a09084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016134c8565b505050565b603d805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166136b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e7565b6117d66137c7565b600061371d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166138679092919063ffffffff16565b8051909150156135a0578080602001905181019061373b91906144db565b6135a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108e7565b600054610100900460ff1661385e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e7565b6117d6336135a5565b60606138768484600085613880565b90505b9392505050565b606082471015613912576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016108e7565b73ffffffffffffffffffffffffffffffffffffffff85163b613990576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516139b99190614402565b60006040518083038185875af1925050503d80600081146139f6576040519150601f19603f3d011682016040523d82523d6000602084013e6139fb565b606091505b509150915061247882828660608315613a15575081613879565b825115613a255782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e79190613acf565b60005b83811015613a74578181015183820152602001613a5c565b8381111561330d5750506000910152565b60008151808452613a9d816020860160208601613a59565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006138796020830184613a85565b803567ffffffffffffffff81168114613afa57600080fd5b919050565b60008060408385031215613b1257600080fd5b613b1b83613ae2565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613b7b57613b7b613b29565b60405290565b6040516060810167ffffffffffffffff81118282101715613b7b57613b7b613b29565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613beb57613beb613b29565b604052919050565b600067ffffffffffffffff821115613c0d57613c0d613b29565b5060051b60200190565b600082601f830112613c2857600080fd5b813567ffffffffffffffff811115613c4257613c42613b29565b613c7360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613ba4565b818152846020838601011115613c8857600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613cb857600080fd5b823567ffffffffffffffff80821115613cd057600080fd5b818501915085601f830112613ce457600080fd5b8135613cf7613cf282613bf3565b613ba4565b81815260059190911b83018401908481019088831115613d1657600080fd5b8585015b83811015613dcd57803585811115613d325760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001811315613d685760008081fd5b613d70613b58565b8983013588811115613d825760008081fd5b613d908e8c83870101613c17565b8252506040808401358b8301526060613daa818601613ae2565b82840152613db9848601613ae2565b908301525085525050918601918601613d1a565b5098975050505050505050565b600060208284031215613dec57600080fd5b61387982613ae2565b73ffffffffffffffffffffffffffffffffffffffff811681146133c757600080fd5b8035613afa81613df5565b600060208284031215613e3457600080fd5b813561387981613df5565b8060408101831015613e5057600080fd5b92915050565b6000806000806000806000610180888a031215613e7257600080fd5b613e7b88613ae2565b9650613e8960208901613ae2565b95506040880135945060608801359350613ea68960808a01613e3f565b9250610140880189811115613eba57600080fd5b60c089019250613eca8a82613e3f565b91505092959891949750929550565b600080600080600060a08688031215613ef157600080fd5b85359450602086013567ffffffffffffffff811115613f0f57600080fd5b613f1b88828901613c17565b94505060408601359250613f3160608701613ae2565b91506080860135613f4181613df5565b809150509295509295909350565b60008060008060808587031215613f6557600080fd5b613f6e85613ae2565b9350613f7c60208601613ae2565b93969395505050506040820135916060013590565b80151581146133c757600080fd5b8035613afa81613f91565b600060208284031215613fbc57600080fd5b813561387981613f91565b600060208284031215613fd957600080fd5b813567ffffffffffffffff811115613ff057600080fd5b613ffc84828501613c17565b949350505050565b60008060008060008060008060006101208a8c03121561402357600080fd5b893561402e81613df5565b985060208a013561403e81613df5565b975061404c60408b01613e17565b965060608a0135955061406160808b01613e17565b945061406f60a08b01613f9f565b935060c08a013567ffffffffffffffff8082111561408c57600080fd5b6140988d838e01613c17565b94506140a660e08d01613ae2565b93506101008c01359150808211156140bd57600080fd5b506140ca8c828d01613c17565b9150509295985092959850929598565b600060208083850312156140ed57600080fd5b823567ffffffffffffffff8082111561410557600080fd5b818501915085601f83011261411957600080fd5b8135614127613cf282613bf3565b81815260059190911b8301840190848101908883111561414657600080fd5b8585015b83811015613dcd578035858111156141625760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018113156141985760008081fd5b6141a0613b81565b89830135888111156141b25760008081fd5b6141c08e8c83870101613c17565b8252506040808401358b8301526141d8838501613ae2565b908201528552505091860191860161414a565b600080604083850312156141fe57600080fd5b823567ffffffffffffffff81111561421557600080fd5b61422185828601613c17565b95602094909401359450505050565b6000806040838503121561424357600080fd5b8235915061425360208401613ae2565b90509250929050565b600181811c9082168061427057607f821691505b6020821081036142a9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681810361432a5761432a6142de565b6001019392505050565b60006020828403121561434657600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361437e5761437e6142de565b5060010190565b600067ffffffffffffffff838116908316818110156143a6576143a66142de565b039392505050565b6000828210156143c0576143c06142de565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143fd576143fd6142de565b500290565b60008251614414818460208701613a59565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261445c5761445c61441e565b500690565b61012081016040808784376000838201818152879190815b600281101561449957848483379084018281529284019290600101614479565b5050828760c0870137610100850181815286935091505b60018110156144cf5782518252602092830192909101906001016144b0565b50505095945050505050565b6000602082840312156144ed57600080fd5b815161387981613f91565b600067ffffffffffffffff80831681851680830382111561451b5761451b6142de565b01949350505050565b6000826145335761453361441e565b500490565b601f8211156135a057600081815260208120601f850160051c8101602086101561455f5750805b601f850160051c820191505b8181101561457e5782815560010161456b565b505050505050565b815167ffffffffffffffff8111156145a0576145a0613b29565b6145b4816145ae845461425c565b84614538565b602080601f83116001811461460757600084156145d15750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561457e565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561465457888601518255948401946001909101908401614635565b508582101561469057878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156146b3576146b36142de565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006146ed6060830184613a85565b9594505050505056fea264697066735822122011cc0f88e8f948fc39973e6a5afa2bbcf5b2d81afd9943bfa71ec264bf4da45e64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/ProofOfEfficiency.sol b/contracts/ProofOfEfficiency.sol index 2333268ce..11dd10381 100644 --- a/contracts/ProofOfEfficiency.sol +++ b/contracts/ProofOfEfficiency.sol @@ -108,8 +108,9 @@ contract ProofOfEfficiency is Initializable { // Global Exit Root interface IGlobalExitRootManager public globalExitRootManager; - // Current state root - bytes32 public currentStateRoot; + // State root mapping + // BatchNum --> state root + mapping(uint64 => bytes32) public batchNumToStateRoot; // Rollup verifier interface IVerifierRollup public rollupVerifier; @@ -146,7 +147,11 @@ contract ProofOfEfficiency is Initializable { /** * @dev Emitted when a aggregator verifies a new batch */ - event VerifyBatches(uint64 indexed numBatch, address indexed aggregator); + event VerifyBatches( + uint64 indexed numBatch, + bytes32 stateRoot, + address indexed aggregator + ); /** * @dev Emitted when a trusted sequencer update his address @@ -188,7 +193,7 @@ contract ProofOfEfficiency is Initializable { globalExitRootManager = _globalExitRootManager; matic = _matic; rollupVerifier = _rollupVerifier; - currentStateRoot = genesisRoot; + batchNumToStateRoot[0] = genesisRoot; trustedSequencer = _trustedSequencer; forceBatchAllowed = _forceBatchAllowed; trustedSequencerURL = _trustedSequencerURL; @@ -326,7 +331,7 @@ contract ProofOfEfficiency is Initializable { /** * @notice Allows an aggregator to verify a batch - * @param _lastVerifiedBatch Last verified Batch, used as a sanity check + * @param _lastVerifiedBatch Last verified Batch * @param newVerifiedBatch Last batch that the aggregator intends to verify * @param newLocalExitRoot New local exit root once the batch is processed * @param newStateRoot New State root once the batch is processed @@ -343,22 +348,16 @@ contract ProofOfEfficiency is Initializable { uint256[2][2] calldata proofB, uint256[2] calldata proofC ) public { - // sanity check require( - _lastVerifiedBatch == lastVerifiedBatch, - "ProofOfEfficiency::verifyBatches: _lastVerifiedBatch does not match" + _lastVerifiedBatch <= lastVerifiedBatch, + "ProofOfEfficiency::verifyBatches: _lastVerifiedBatch must be less or equal" ); require( - newVerifiedBatch > _lastVerifiedBatch, + newVerifiedBatch > lastVerifiedBatch, "ProofOfEfficiency::verifyBatches: newVerifiedBatch must be bigger than lastVerifiedBatch" ); - require( - newVerifiedBatch <= lastBatchSequenced, - "ProofOfEfficiency::verifyBatches: batch does not have been sequenced" - ); - bytes memory snarkHashBytes = getInputSnarkBytes( _lastVerifiedBatch, newVerifiedBatch, @@ -378,17 +377,17 @@ contract ProofOfEfficiency is Initializable { // Get MATIC reward matic.safeTransfer( msg.sender, - calculateRewardPerBatch() * (newVerifiedBatch - _lastVerifiedBatch) + calculateRewardPerBatch() * (newVerifiedBatch - lastVerifiedBatch) ); // Update state lastVerifiedBatch = newVerifiedBatch; - currentStateRoot = newStateRoot; + batchNumToStateRoot[newVerifiedBatch] = newStateRoot; // Interact with globalExitRoot globalExitRootManager.updateExitRoot(newLocalExitRoot); - emit VerifyBatches(newVerifiedBatch, msg.sender); + emit VerifyBatches(newVerifiedBatch, newStateRoot, msg.sender); } /** @@ -593,6 +592,11 @@ contract ProofOfEfficiency is Initializable { bytes32 oldAccInputHash = sequencedBatches[_lastVerifiedBatch]; bytes32 newAccInputHash = sequencedBatches[newVerifiedBatch]; + require( + _lastVerifiedBatch == 0 || oldAccInputHash != bytes32(0), + "ProofOfEfficiency::getInputSnarkBytes: oldAccInputHash does not exist" + ); + require( newAccInputHash != bytes32(0), "ProofOfEfficiency::getInputSnarkBytes: newAccInputHash does not exist" @@ -601,7 +605,7 @@ contract ProofOfEfficiency is Initializable { return abi.encodePacked( msg.sender, - currentStateRoot, + batchNumToStateRoot[_lastVerifiedBatch], oldAccInputHash, _lastVerifiedBatch, chainID, diff --git a/contracts/mocks/ProofOfEfficiencyMock.sol b/contracts/mocks/ProofOfEfficiencyMock.sol index c42e13622..5231890c4 100644 --- a/contracts/mocks/ProofOfEfficiencyMock.sol +++ b/contracts/mocks/ProofOfEfficiencyMock.sol @@ -36,7 +36,7 @@ contract ProofOfEfficiencyMock is ProofOfEfficiency, OwnableUpgradeable { globalExitRootManager = _globalExitRootManager; matic = _matic; rollupVerifier = _rollupVerifier; - currentStateRoot = genesisRoot; + batchNumToStateRoot[0] = genesisRoot; trustedSequencer = _trustedSequencer; forceBatchAllowed = _forceBatchAllowed; trustedSequencerURL = _trustedSequencerURL; @@ -116,8 +116,11 @@ contract ProofOfEfficiencyMock is ProofOfEfficiency, OwnableUpgradeable { * @notice Set state root * @param newStateRoot New State root ¡ */ - function setStateRoot(bytes32 newStateRoot) public onlyOwner { - currentStateRoot = newStateRoot; + function setStateRoot(bytes32 newStateRoot, uint64 batchNum) + public + onlyOwner + { + batchNumToStateRoot[batchNum] = newStateRoot; } /** @@ -183,24 +186,24 @@ contract ProofOfEfficiencyMock is ProofOfEfficiency, OwnableUpgradeable { uint256[2][2] calldata proofB, uint256[2] calldata proofC ) public onlyOwner { - // sanity check require( - _lastVerifiedBatch == lastVerifiedBatch, - "ProofOfEfficiency::verifyBatch: _lastVerifiedBatch does not match" + _lastVerifiedBatch <= lastVerifiedBatch, + "ProofOfEfficiency::verifyBatches: _lastVerifiedBatch must be less or equal" ); require( - newVerifiedBatch > _lastVerifiedBatch, - "ProofOfEfficiency::verifyBatch: newVerifiedBatch must be bigger than lastVerifiedBatch" + newVerifiedBatch > lastVerifiedBatch, + "ProofOfEfficiency::verifyBatches: newVerifiedBatch must be bigger than lastVerifiedBatch" ); + bytes32 oldAccInputHash = sequencedBatches[_lastVerifiedBatch]; + bytes32 newAccInputHash = sequencedBatches[newVerifiedBatch]; + require( - newVerifiedBatch <= lastBatchSequenced, - "ProofOfEfficiency::verifyBatch: batch does not have been sequenced" + oldAccInputHash != bytes32(0), + "ProofOfEfficiency::verifyBatch: oldAccInputHash does not exist" ); - bytes32 newAccInputHash = sequencedBatches[newVerifiedBatch]; - require( newAccInputHash != bytes32(0), "ProofOfEfficiency::verifyBatch: newAccInputHash does not exist" @@ -214,11 +217,11 @@ contract ProofOfEfficiencyMock is ProofOfEfficiency, OwnableUpgradeable { // Update state lastVerifiedBatch = newVerifiedBatch; - currentStateRoot = newStateRoot; + batchNumToStateRoot[newVerifiedBatch] = newStateRoot; // Interact with globalExitRoot globalExitRootManager.updateExitRoot(newLocalExitRoot); - emit VerifyBatches(newVerifiedBatch, msg.sender); + emit VerifyBatches(newVerifiedBatch, newStateRoot, msg.sender); } } diff --git a/docs/ProofOfEfficiency.md b/docs/ProofOfEfficiency.md index 1830cb156..977994780 100644 --- a/docs/ProofOfEfficiency.md +++ b/docs/ProofOfEfficiency.md @@ -68,7 +68,7 @@ Allows an aggregator to verify a batch #### Parameters: | Name | Type | Description | | :--- | :--- | :------------------------------------------------------------------- | -|`_lastVerifiedBatch` | uint64 | Last verified Batch, used as a sanity check +|`_lastVerifiedBatch` | uint64 | Last verified Batch |`newVerifiedBatch` | uint64 | Last batch that the aggregator intends to verify |`newLocalExitRoot` | bytes32 | New local exit root once the batch is processed |`newStateRoot` | bytes32 | New State root once the batch is processed diff --git a/test/contracts/proofOfEfficiency.test.js b/test/contracts/proofOfEfficiency.test.js index 7e5053b6b..a2b36f1c9 100644 --- a/test/contracts/proofOfEfficiency.test.js +++ b/test/contracts/proofOfEfficiency.test.js @@ -82,7 +82,7 @@ describe('Proof of efficiency', () => { expect(await proofOfEfficiencyContract.globalExitRootManager()).to.be.equal(globalExitRootManager.address); expect(await proofOfEfficiencyContract.matic()).to.be.equal(maticTokenContract.address); expect(await proofOfEfficiencyContract.rollupVerifier()).to.be.equal(verifierContract.address); - expect(await proofOfEfficiencyContract.currentStateRoot()).to.be.equal(genesisRoot); + expect(await proofOfEfficiencyContract.batchNumToStateRoot(0)).to.be.equal(genesisRoot); expect(await proofOfEfficiencyContract.trustedSequencer()).to.be.equal(trustedSequencer.address); expect(await proofOfEfficiencyContract.forceBatchAllowed()).to.be.equal(allowForcebatches); }); @@ -588,18 +588,6 @@ describe('Proof of efficiency', () => { await aggregator.getAddress(), ); - await expect( - proofOfEfficiencyContract.connect(aggregator).verifyBatches( - numBatch, - numBatch, - newLocalExitRoot, - newStateRoot, - proofA, - proofB, - proofC, - ), - ).to.be.revertedWith('ProofOfEfficiency::verifyBatches: _lastVerifiedBatch does not match'); - await expect( proofOfEfficiencyContract.connect(aggregator).verifyBatches( numBatch - 1, @@ -622,7 +610,7 @@ describe('Proof of efficiency', () => { proofB, proofC, ), - ).to.be.revertedWith('ProofOfEfficiency::verifyBatches: batch does not have been sequenced'); + ).to.be.revertedWith('ProofOfEfficiency::getInputSnarkBytes: newAccInputHash does not exist'); // Verify batch await expect( @@ -636,7 +624,7 @@ describe('Proof of efficiency', () => { proofC, ), ).to.emit(proofOfEfficiencyContract, 'VerifyBatches') - .withArgs(numBatch, aggregator.address); + .withArgs(numBatch, newStateRoot, aggregator.address); const finalAggregatorMatic = await maticTokenContract.balanceOf( await aggregator.getAddress(), @@ -753,7 +741,7 @@ describe('Proof of efficiency', () => { expect(sentBatchHash).to.be.equal(batchAccInputHashJs); // Compute circuit input with the SC function - const currentStateRoot = await proofOfEfficiencyContract.currentStateRoot(); + const currentStateRoot = await proofOfEfficiencyContract.batchNumToStateRoot(0); const newStateRoot = '0x0000000000000000000000000000000000000000000000000000000000001234'; const newLocalExitRoot = '0x0000000000000000000000000000000000000000000000000000000000000456'; const numBatch = (await proofOfEfficiencyContract.lastVerifiedBatch()) + 1; @@ -827,7 +815,7 @@ describe('Proof of efficiency', () => { expect(batchAccInputHash).to.be.equal(batchAccInputHashJs); // Compute circuit input with the SC function - const currentStateRoot = await proofOfEfficiencyContract.currentStateRoot(); + const currentStateRoot = await proofOfEfficiencyContract.batchNumToStateRoot(0); const newStateRoot = '0x0000000000000000000000000000000000000000000000000000000000001234'; const newLocalExitRoot = '0x0000000000000000000000000000000000000000000000000000000000000456'; const numBatch = (await proofOfEfficiencyContract.lastVerifiedBatch()) + 1; diff --git a/test/contracts/snark_stark_input.test.js b/test/contracts/snark_stark_input.test.js index 72ba7f1b6..864498121 100644 --- a/test/contracts/snark_stark_input.test.js +++ b/test/contracts/snark_stark_input.test.js @@ -75,7 +75,7 @@ describe('Proof of efficiency snark stark input test', () => { const expectedSnarkInputHash = '15588448576060468525242870965361192827910782996030023758348255084502752104347'; // set smart contract with correct parameters - await proofOfEfficiencyContract.setStateRoot(oldStateRoot); + await proofOfEfficiencyContract.setStateRoot(oldStateRoot, oldNumBatch); await proofOfEfficiencyContract.setSequencedBatches(newNumBatch, newAccInputHash); await proofOfEfficiencyContract.setSequencedBatch(1); From 179493dd55d3126af5a1104209edd0b2fa10e864 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Wed, 16 Nov 2022 12:39:43 +0100 Subject: [PATCH 18/71] first approach --- compiled-contracts/Bridge.json | 75 ++++++- compiled-contracts/BridgeMock.json | 75 ++++++- compiled-contracts/GlobalExitRootManager.json | 23 +- .../GlobalExitRootManagerMock.json | 40 +--- compiled-contracts/ProofOfEfficiency.json | 210 +++++++++++++++++- compiled-contracts/ProofOfEfficiencyMock.json | 158 ++++++++++++- contracts/Bridge.sol | 163 +++++++------- contracts/GlobalExitRootManager.sol | 18 +- contracts/ProofOfEfficiency.sol | 203 ++++++++++++++--- contracts/interfaces/IBridge.sol | 49 ++++ .../interfaces/IGlobalExitRootManager.sol | 2 - contracts/mocks/BridgeMock.sol | 6 +- contracts/mocks/GlobalExitRootManagerMock.sol | 14 +- contracts/mocks/ProofOfEfficiencyMock.sol | 37 +-- docs/Bridge.md | 20 ++ docs/ProofOfEfficiency.md | 96 +++++++- 16 files changed, 941 insertions(+), 248 deletions(-) create mode 100644 contracts/interfaces/IBridge.sol diff --git a/compiled-contracts/Bridge.json b/compiled-contracts/Bridge.json index 7cd3359ca..5ebf7465c 100644 --- a/compiled-contracts/Bridge.json +++ b/compiled-contracts/Bridge.json @@ -133,6 +133,32 @@ "name": "NewWrappedToken", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, { "inputs": [], "name": "LEAF_TYPE_ASSET", @@ -486,6 +512,11 @@ "internalType": "contract IGlobalExitRootManager", "name": "_globalExitRootManager", "type": "address" + }, + { + "internalType": "address", + "name": "_poeAddress", + "type": "address" } ], "name": "initialize", @@ -506,6 +537,39 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "poeAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -562,6 +626,13 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -621,8 +692,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50615954806100206000396000f3fe6080604052600436106200017b5760003560e01c806381b1c17411620000cf578063d02103ca116200007d578063e73758811162000060578063e73758811462000589578063ed6be5c914620005bd578063ff634ed714620005d457600080fd5b8063d02103ca1462000543578063d96a15f7146200057257600080fd5b8063a08e8a0811620000b2578063a08e8a0814620004bf578063b7e6a7d414620004e9578063bab161bf146200050e57600080fd5b806381b1c17414620004535780638624c35c146200049a57600080fd5b80633ae05047116200012d5780633e19704311620001105780633e19704314620003155780634638554914620004095780637b6323c1146200042e57600080fd5b80633ae0504714620002c75780633da8168214620002df57600080fd5b80632dfdf0b511620001625780632dfdf0b514620001e85780632f3a3d5d146200020f578063318aee3d146200023e57600080fd5b80630871e971146200018057806322e95f2c1462000199575b600080fd5b6200019762000191366004620034bc565b620005eb565b005b348015620001a657600080fd5b50620001be620001b836600462003578565b62000bdf565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015620001f557600080fd5b506200020060215481565b604051908152602001620001df565b3480156200021c57600080fd5b50602754620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200024b57600080fd5b50620002956200025d366004620035b4565b60256020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201620001df565b348015620002d457600080fd5b506200020062000cb1565b348015620002ec57600080fd5b5062000304620002fe366004620036d3565b62000da4565b6040519015158152602001620001df565b3480156200032257600080fd5b50620002006200033436600462003751565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200041657600080fd5b50620001976200042836600462003880565b62000ea4565b3480156200043b57600080fd5b50620001976200044d36600462003880565b6200165f565b3480156200046057600080fd5b50620001be6200047236600462003967565b60246020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620004a757600080fd5b5062000197620004b936600462003578565b6200210a565b348015620004cc57600080fd5b50620004d6600081565b60405160ff9091168152602001620001df565b348015620004f657600080fd5b50620001be6200050836600462003578565b6200237e565b3480156200051b57600080fd5b506022546200052d9063ffffffff1681565b60405163ffffffff9091168152602001620001df565b3480156200055057600080fd5b50602654620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b620001976200058336600462003981565b62002447565b3480156200059657600080fd5b5062000304620005a836600462003967565b60236020526000908152604090205460ff1681565b348015620005ca57600080fd5b506200052d600081565b348015620005e157600080fd5b50620004d6600181565b60225463ffffffff908116908616036200068c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff891662000748578534146200073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c55450000000000000000000000000000000000606482015260840162000683565b6000915062000a5c565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526025602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000849576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562000810573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008369190620039f8565b5060208101518151909450925062000a5a565b84156200085e576200085e8a88888862002694565b6200088273ffffffffffffffffffffffffffffffffffffffff8b1633308a62002dbe565b899350602260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200092e919081019062003a93565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200097a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620009c2919081019062003a93565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a34919062003acc565b60405160200162000a489392919062003b38565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162000a9e98979695949392919062003b75565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000b599062002ea2565b60265473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000b8162000cb1565b6040518263ffffffff1660e01b815260040162000ba091815260200190565b600060405180830381600087803b15801562000bbb57600080fd5b505af115801562000bd0573d6000803e3d6000fd5b50505050505050505050505050565b600060246000848460405160200162000c4e92919060e09290921b7fffffffff0000000000000000000000000000000000000000000000000000000016825260601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600482015260180190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181528151602092830120835290820192909252016000205473ffffffffffffffffffffffffffffffffffffffff1690505b92915050565b602154600090819081805b602081101562000d9b578260011660010362000d1c576001816020811062000ce85762000ce862003bee565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000d49565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000d5660028462003c4c565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000d929062003c88565b91505062000cbc565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000e97578160011660010362000e215786818151811062000ddf5762000ddf62003bee565b60200260200101518360405160200162000e03929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000e73565b8287828151811062000e375762000e3762003bee565b602002602001015160405160200162000e5a929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000e8060028362003c4c565b91508062000e8e8162003c88565b91505062000db4565b5050909114949350505050565b63ffffffff891660009081526023602052604090205460ff161562000f4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d4544000000000000000000000000000000000000000000000000000000606482015260840162000683565b6026546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000fe5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200100b919062003cc3565b6000036200109c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000606482015260840162000683565b60225463ffffffff85811691161462001138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000606482015260840162000683565b60225463ffffffff16620012b6578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062001222905b8b8b63ffffffff168a62000da4565b620012b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b62001420565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062001392905b8b8b63ffffffff168b62000da4565b62001420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b63ffffffff891660009081526023602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff85169084906200148e9089908b90879060240162003cdd565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001511919062003d23565b60006040518083038185875af1925050503d806000811462001550576040519150601f19603f3d011682016040523d82523d6000602084013e62001555565b606091505b5050905080620015e7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c454400000000000000000000000000000000000000000000000000000000606482015260840162000683565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b63ffffffff891660009081526023602052604090205460ff1615620016e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d45440000604482015260640162000683565b6026546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af11580156200177a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017a0919062003cc3565b60000362001831576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d41544348000000000000000000000000000000000000606482015260840162000683565b60225463ffffffff858116911614620018cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d41544348000000000000000000000000000000606482015260840162000683565b60225463ffffffff16620019fc578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200198e9062001213565b620019f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b62001b17565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062001aaf9062001383565b62001b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b63ffffffff8916600090815260236020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff851662001c88576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001baa919062003d23565b60006040518083038185875af1925050503d806000811462001be9576040519150601f19603f3d011682016040523d82523d6000602084013e62001bee565b606091505b505090508062001c81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f4544000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b5062002093565b60225463ffffffff9081169087160362001cc55762001cbf73ffffffffffffffffffffffffffffffffffffffff861684846200301b565b62002093565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152602490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001ff25760275460009062001db09073ffffffffffffffffffffffffffffffffffffffff168462003073565b905060008060008680602001905181019062001dcd919062003d41565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001e1695949392919062003dc2565b600060405180830381600087803b15801562001e3157600080fd5b505af115801562001e46573d6000803e3d6000fd5b50505050836024600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250602560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001fe09392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062002090565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562002068573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200208e9190620039f8565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff16158080156200212b5750600054600160ff909116105b80620021475750303b15801562002147575060005460ff166001145b620021d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840162000683565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156200223457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b602280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055602680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055604051620022b29062003461565b604051809103906000f080158015620022cf573d6000803e3d6000fd5b50602780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905580156200237957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101206027549091506200243f9073ffffffffffffffffffffffffffffffffffffffff168262003153565b949350505050565b60225463ffffffff90811690841603620024e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c4600000000000000000000000000000000000000000000606482015260840162000683565b6022546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620025319260019263ffffffff9092169133918991899134918a919062003b75565b60405180910390a16022548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620026149062002ea2565b60265473ffffffffffffffffffffffffffffffffffffffff166333d6247d6200263c62000cb1565b6040518263ffffffff1660e01b81526004016200265b91815260200190565b600060405180830381600087803b1580156200267657600080fd5b505af11580156200268b573d6000803e3d6000fd5b50505050505050565b6000620026d783838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620031d792505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002a5b5760008080808080806200273a896004818d62003e22565b81019062002749919062003e4e565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462002814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000683565b73ffffffffffffffffffffffffffffffffffffffff86163014620028bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000683565b8a85146200294c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d4154434800000000000000000000000000000000000000606482015260840162000683565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002a07919062003d23565b6000604051808303816000865af19150503d806000811462002a46576040519150601f19603f3d011682016040523d82523d6000602084013e62002a4b565b606091505b5050505050505050505062002db7565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002b08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000683565b60008080808080808062002b208a6004818e62003e22565b81019062002b2f919062003ea9565b975097509750975097509750975097503373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161462002bfc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000683565b73ffffffffffffffffffffffffffffffffffffffff8716301462002ca3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000683565b6040805173ffffffffffffffffffffffffffffffffffffffff8a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002d67919062003d23565b6000604051808303816000865af19150503d806000811462002da6576040519150601f19603f3d011682016040523d82523d6000602084013e62002dab565b606091505b50505050505050505050505b5050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905262002e9c9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152620031de565b50505050565b80600162002eb3602060026200406e565b62002ebf91906200407c565b6021541062002f51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c00000000000000000000000000000000000000000000606482015260840162000683565b60016021600082825462002f66919062004096565b909155505060215460005b602081101562003010578160011660010362002fa657826001826020811062002f9e5762002f9e62003bee565b015550505050565b6001816020811062002fbc5762002fbc62003bee565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002ff9919062003c4c565b915080620030078162003c88565b91505062002f71565b5062002379620040b1565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052620023799084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002e19565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000cab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640162000683565b6000620031d08383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b600062003242826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620032f19092919063ffffffff16565b805190915015620023795780806020019051810190620032639190620039f8565b62002379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000683565b60606200243f84846000858573ffffffffffffffffffffffffffffffffffffffff85163b6200337d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000683565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620033a8919062003d23565b60006040518083038185875af1925050503d8060008114620033e7576040519150601f19603f3d011682016040523d82523d6000602084013e620033ec565b606091505b5091509150620033fe82828662003409565b979650505050505050565b606083156200341a575081620031d0565b8251156200342b5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006839190620040e0565b61182980620040f683390190565b73ffffffffffffffffffffffffffffffffffffffff811681146200349257600080fd5b50565b8035620034a2816200346f565b919050565b803563ffffffff81168114620034a257600080fd5b60008060008060008060a08789031215620034d657600080fd5b8635620034e3816200346f565b9550620034f360208801620034a7565b9450604087013562003505816200346f565b935060608701359250608087013567ffffffffffffffff808211156200352a57600080fd5b818901915089601f8301126200353f57600080fd5b8135818111156200354f57600080fd5b8a60208285010111156200356257600080fd5b6020830194508093505050509295509295509295565b600080604083850312156200358c57600080fd5b6200359783620034a7565b91506020830135620035a9816200346f565b809150509250929050565b600060208284031215620035c757600080fd5b8135620031d0816200346f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156200364d576200364d620035d4565b604052919050565b600082601f8301126200366757600080fd5b8135602067ffffffffffffffff821115620036865762003686620035d4565b8160051b6200369782820162003603565b9283528481018201928281019087851115620036b257600080fd5b83870192505b84831015620033fe57823582529183019190830190620036b8565b60008060008060808587031215620036ea57600080fd5b84359350602085013567ffffffffffffffff808211156200370a57600080fd5b620037188883890162003655565b94506040870135915080821682146200373057600080fd5b509396929550929360600135925050565b60ff811681146200349257600080fd5b600080600080600080600060e0888a0312156200376d57600080fd5b87356200377a8162003741565b96506200378a60208901620034a7565b955060408801356200379c816200346f565b9450620037ac60608901620034a7565b93506080880135620037be816200346f565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620037f857620037f8620035d4565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126200383657600080fd5b81356200384d6200384782620037db565b62003603565b8181528460208386010111156200386357600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620038a157600080fd5b8a3567ffffffffffffffff80821115620038ba57600080fd5b620038c88e838f0162003655565b9b50620038d860208e01620034a7565b9a5060408d0135995060608d01359850620038f660808e01620034a7565b97506200390660a08e0162003495565b96506200391660c08e01620034a7565b95506200392660e08e0162003495565b94506101008d013593506101208d01359150808211156200394657600080fd5b50620039558d828e0162003824565b9150509295989b9194979a5092959850565b6000602082840312156200397a57600080fd5b5035919050565b6000806000606084860312156200399757600080fd5b620039a284620034a7565b92506020840135620039b4816200346f565b9150604084013567ffffffffffffffff811115620039d157600080fd5b620039df8682870162003824565b9150509250925092565b80151581146200349257600080fd5b60006020828403121562003a0b57600080fd5b8151620031d081620039e9565b60005b8381101562003a3557818101518382015260200162003a1b565b8381111562002e9c5750506000910152565b600082601f83011262003a5957600080fd5b815162003a6a6200384782620037db565b81815284602083860101111562003a8057600080fd5b6200243f82602083016020870162003a18565b60006020828403121562003aa657600080fd5b815167ffffffffffffffff81111562003abe57600080fd5b6200243f8482850162003a47565b60006020828403121562003adf57600080fd5b8151620031d08162003741565b6000815180845262003b0681602086016020860162003a18565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60608152600062003b4d606083018662003aec565b828103602084015262003b61818662003aec565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003bd58285018762003aec565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003c83577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003cbc5762003cbc62003c1d565b5060010190565b60006020828403121562003cd657600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003d1a606083018462003aec565b95945050505050565b6000825162003d3781846020870162003a18565b9190910192915050565b60008060006060848603121562003d5757600080fd5b835167ffffffffffffffff8082111562003d7057600080fd5b62003d7e8783880162003a47565b9450602086015191508082111562003d9557600080fd5b5062003da48682870162003a47565b925050604084015162003db78162003741565b809150509250925092565b60a08152600062003dd760a083018862003aec565b828103602084015262003deb818862003aec565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000808585111562003e3357600080fd5b8386111562003e4157600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003e6a57600080fd5b873562003e77816200346f565b9650602088013562003e89816200346f565b955060408801359450606088013593506080880135620037be8162003741565b600080600080600080600080610100898b03121562003ec757600080fd5b883562003ed4816200346f565b9750602089013562003ee6816200346f565b96506040890135955060608901359450608089013562003f0681620039e9565b935060a089013562003f188162003741565b979a969950949793969295929450505060c08201359160e0013590565b600181815b8085111562003f9457817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003f785762003f7862003c1d565b8085161562003f8657918102915b93841c939080029062003f3a565b509250929050565b60008262003fad5750600162000cab565b8162003fbc5750600062000cab565b816001811462003fd5576002811462003fe05762004000565b600191505062000cab565b60ff84111562003ff45762003ff462003c1d565b50506001821b62000cab565b5060208310610133831016604e8410600b841016171562004025575081810a62000cab565b62004031838362003f35565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562004066576200406662003c1d565b029392505050565b6000620031d0838362003f9c565b60008282101562004091576200409162003c1d565b500390565b60008219821115620040ac57620040ac62003c1d565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b602081526000620031d0602083018462003aec56fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a2646970667358221220bdf94d69e63e347f03bee03a33cb2ab4b50d84e75b48c38164c94a1a1647481d64736f6c634300080f0033", - "deployedBytecode": "0x6080604052600436106200017b5760003560e01c806381b1c17411620000cf578063d02103ca116200007d578063e73758811162000060578063e73758811462000589578063ed6be5c914620005bd578063ff634ed714620005d457600080fd5b8063d02103ca1462000543578063d96a15f7146200057257600080fd5b8063a08e8a0811620000b2578063a08e8a0814620004bf578063b7e6a7d414620004e9578063bab161bf146200050e57600080fd5b806381b1c17414620004535780638624c35c146200049a57600080fd5b80633ae05047116200012d5780633e19704311620001105780633e19704314620003155780634638554914620004095780637b6323c1146200042e57600080fd5b80633ae0504714620002c75780633da8168214620002df57600080fd5b80632dfdf0b511620001625780632dfdf0b514620001e85780632f3a3d5d146200020f578063318aee3d146200023e57600080fd5b80630871e971146200018057806322e95f2c1462000199575b600080fd5b6200019762000191366004620034bc565b620005eb565b005b348015620001a657600080fd5b50620001be620001b836600462003578565b62000bdf565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015620001f557600080fd5b506200020060215481565b604051908152602001620001df565b3480156200021c57600080fd5b50602754620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200024b57600080fd5b50620002956200025d366004620035b4565b60256020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201620001df565b348015620002d457600080fd5b506200020062000cb1565b348015620002ec57600080fd5b5062000304620002fe366004620036d3565b62000da4565b6040519015158152602001620001df565b3480156200032257600080fd5b50620002006200033436600462003751565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200041657600080fd5b50620001976200042836600462003880565b62000ea4565b3480156200043b57600080fd5b50620001976200044d36600462003880565b6200165f565b3480156200046057600080fd5b50620001be6200047236600462003967565b60246020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620004a757600080fd5b5062000197620004b936600462003578565b6200210a565b348015620004cc57600080fd5b50620004d6600081565b60405160ff9091168152602001620001df565b348015620004f657600080fd5b50620001be6200050836600462003578565b6200237e565b3480156200051b57600080fd5b506022546200052d9063ffffffff1681565b60405163ffffffff9091168152602001620001df565b3480156200055057600080fd5b50602654620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b620001976200058336600462003981565b62002447565b3480156200059657600080fd5b5062000304620005a836600462003967565b60236020526000908152604090205460ff1681565b348015620005ca57600080fd5b506200052d600081565b348015620005e157600080fd5b50620004d6600181565b60225463ffffffff908116908616036200068c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff891662000748578534146200073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c55450000000000000000000000000000000000606482015260840162000683565b6000915062000a5c565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526025602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000849576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562000810573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008369190620039f8565b5060208101518151909450925062000a5a565b84156200085e576200085e8a88888862002694565b6200088273ffffffffffffffffffffffffffffffffffffffff8b1633308a62002dbe565b899350602260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200092e919081019062003a93565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200097a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620009c2919081019062003a93565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a34919062003acc565b60405160200162000a489392919062003b38565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162000a9e98979695949392919062003b75565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000b599062002ea2565b60265473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000b8162000cb1565b6040518263ffffffff1660e01b815260040162000ba091815260200190565b600060405180830381600087803b15801562000bbb57600080fd5b505af115801562000bd0573d6000803e3d6000fd5b50505050505050505050505050565b600060246000848460405160200162000c4e92919060e09290921b7fffffffff0000000000000000000000000000000000000000000000000000000016825260601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600482015260180190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181528151602092830120835290820192909252016000205473ffffffffffffffffffffffffffffffffffffffff1690505b92915050565b602154600090819081805b602081101562000d9b578260011660010362000d1c576001816020811062000ce85762000ce862003bee565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000d49565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000d5660028462003c4c565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000d929062003c88565b91505062000cbc565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000e97578160011660010362000e215786818151811062000ddf5762000ddf62003bee565b60200260200101518360405160200162000e03929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000e73565b8287828151811062000e375762000e3762003bee565b602002602001015160405160200162000e5a929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000e8060028362003c4c565b91508062000e8e8162003c88565b91505062000db4565b5050909114949350505050565b63ffffffff891660009081526023602052604090205460ff161562000f4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d4544000000000000000000000000000000000000000000000000000000606482015260840162000683565b6026546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000fe5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200100b919062003cc3565b6000036200109c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000606482015260840162000683565b60225463ffffffff85811691161462001138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000606482015260840162000683565b60225463ffffffff16620012b6578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062001222905b8b8b63ffffffff168a62000da4565b620012b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b62001420565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062001392905b8b8b63ffffffff168b62000da4565b62001420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b63ffffffff891660009081526023602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff85169084906200148e9089908b90879060240162003cdd565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001511919062003d23565b60006040518083038185875af1925050503d806000811462001550576040519150601f19603f3d011682016040523d82523d6000602084013e62001555565b606091505b5050905080620015e7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c454400000000000000000000000000000000000000000000000000000000606482015260840162000683565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b63ffffffff891660009081526023602052604090205460ff1615620016e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d45440000604482015260640162000683565b6026546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af11580156200177a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017a0919062003cc3565b60000362001831576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d41544348000000000000000000000000000000000000606482015260840162000683565b60225463ffffffff858116911614620018cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d41544348000000000000000000000000000000606482015260840162000683565b60225463ffffffff16620019fc578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200198e9062001213565b620019f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b62001b17565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062001aaf9062001383565b62001b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b63ffffffff8916600090815260236020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff851662001c88576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001baa919062003d23565b60006040518083038185875af1925050503d806000811462001be9576040519150601f19603f3d011682016040523d82523d6000602084013e62001bee565b606091505b505090508062001c81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f4544000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b5062002093565b60225463ffffffff9081169087160362001cc55762001cbf73ffffffffffffffffffffffffffffffffffffffff861684846200301b565b62002093565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152602490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001ff25760275460009062001db09073ffffffffffffffffffffffffffffffffffffffff168462003073565b905060008060008680602001905181019062001dcd919062003d41565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001e1695949392919062003dc2565b600060405180830381600087803b15801562001e3157600080fd5b505af115801562001e46573d6000803e3d6000fd5b50505050836024600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250602560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001fe09392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062002090565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562002068573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200208e9190620039f8565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff16158080156200212b5750600054600160ff909116105b80620021475750303b15801562002147575060005460ff166001145b620021d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840162000683565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156200223457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b602280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055602680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055604051620022b29062003461565b604051809103906000f080158015620022cf573d6000803e3d6000fd5b50602780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905580156200237957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101206027549091506200243f9073ffffffffffffffffffffffffffffffffffffffff168262003153565b949350505050565b60225463ffffffff90811690841603620024e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c4600000000000000000000000000000000000000000000606482015260840162000683565b6022546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620025319260019263ffffffff9092169133918991899134918a919062003b75565b60405180910390a16022548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620026149062002ea2565b60265473ffffffffffffffffffffffffffffffffffffffff166333d6247d6200263c62000cb1565b6040518263ffffffff1660e01b81526004016200265b91815260200190565b600060405180830381600087803b1580156200267657600080fd5b505af11580156200268b573d6000803e3d6000fd5b50505050505050565b6000620026d783838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620031d792505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002a5b5760008080808080806200273a896004818d62003e22565b81019062002749919062003e4e565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462002814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000683565b73ffffffffffffffffffffffffffffffffffffffff86163014620028bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000683565b8a85146200294c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d4154434800000000000000000000000000000000000000606482015260840162000683565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002a07919062003d23565b6000604051808303816000865af19150503d806000811462002a46576040519150601f19603f3d011682016040523d82523d6000602084013e62002a4b565b606091505b5050505050505050505062002db7565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002b08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000683565b60008080808080808062002b208a6004818e62003e22565b81019062002b2f919062003ea9565b975097509750975097509750975097503373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161462002bfc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000683565b73ffffffffffffffffffffffffffffffffffffffff8716301462002ca3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000683565b6040805173ffffffffffffffffffffffffffffffffffffffff8a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002d67919062003d23565b6000604051808303816000865af19150503d806000811462002da6576040519150601f19603f3d011682016040523d82523d6000602084013e62002dab565b606091505b50505050505050505050505b5050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905262002e9c9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152620031de565b50505050565b80600162002eb3602060026200406e565b62002ebf91906200407c565b6021541062002f51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c00000000000000000000000000000000000000000000606482015260840162000683565b60016021600082825462002f66919062004096565b909155505060215460005b602081101562003010578160011660010362002fa657826001826020811062002f9e5762002f9e62003bee565b015550505050565b6001816020811062002fbc5762002fbc62003bee565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002ff9919062003c4c565b915080620030078162003c88565b91505062002f71565b5062002379620040b1565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052620023799084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002e19565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000cab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640162000683565b6000620031d08383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b600062003242826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620032f19092919063ffffffff16565b805190915015620023795780806020019051810190620032639190620039f8565b62002379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000683565b60606200243f84846000858573ffffffffffffffffffffffffffffffffffffffff85163b6200337d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000683565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620033a8919062003d23565b60006040518083038185875af1925050503d8060008114620033e7576040519150601f19603f3d011682016040523d82523d6000602084013e620033ec565b606091505b5091509150620033fe82828662003409565b979650505050505050565b606083156200341a575081620031d0565b8251156200342b5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006839190620040e0565b61182980620040f683390190565b73ffffffffffffffffffffffffffffffffffffffff811681146200349257600080fd5b50565b8035620034a2816200346f565b919050565b803563ffffffff81168114620034a257600080fd5b60008060008060008060a08789031215620034d657600080fd5b8635620034e3816200346f565b9550620034f360208801620034a7565b9450604087013562003505816200346f565b935060608701359250608087013567ffffffffffffffff808211156200352a57600080fd5b818901915089601f8301126200353f57600080fd5b8135818111156200354f57600080fd5b8a60208285010111156200356257600080fd5b6020830194508093505050509295509295509295565b600080604083850312156200358c57600080fd5b6200359783620034a7565b91506020830135620035a9816200346f565b809150509250929050565b600060208284031215620035c757600080fd5b8135620031d0816200346f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156200364d576200364d620035d4565b604052919050565b600082601f8301126200366757600080fd5b8135602067ffffffffffffffff821115620036865762003686620035d4565b8160051b6200369782820162003603565b9283528481018201928281019087851115620036b257600080fd5b83870192505b84831015620033fe57823582529183019190830190620036b8565b60008060008060808587031215620036ea57600080fd5b84359350602085013567ffffffffffffffff808211156200370a57600080fd5b620037188883890162003655565b94506040870135915080821682146200373057600080fd5b509396929550929360600135925050565b60ff811681146200349257600080fd5b600080600080600080600060e0888a0312156200376d57600080fd5b87356200377a8162003741565b96506200378a60208901620034a7565b955060408801356200379c816200346f565b9450620037ac60608901620034a7565b93506080880135620037be816200346f565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620037f857620037f8620035d4565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126200383657600080fd5b81356200384d6200384782620037db565b62003603565b8181528460208386010111156200386357600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620038a157600080fd5b8a3567ffffffffffffffff80821115620038ba57600080fd5b620038c88e838f0162003655565b9b50620038d860208e01620034a7565b9a5060408d0135995060608d01359850620038f660808e01620034a7565b97506200390660a08e0162003495565b96506200391660c08e01620034a7565b95506200392660e08e0162003495565b94506101008d013593506101208d01359150808211156200394657600080fd5b50620039558d828e0162003824565b9150509295989b9194979a5092959850565b6000602082840312156200397a57600080fd5b5035919050565b6000806000606084860312156200399757600080fd5b620039a284620034a7565b92506020840135620039b4816200346f565b9150604084013567ffffffffffffffff811115620039d157600080fd5b620039df8682870162003824565b9150509250925092565b80151581146200349257600080fd5b60006020828403121562003a0b57600080fd5b8151620031d081620039e9565b60005b8381101562003a3557818101518382015260200162003a1b565b8381111562002e9c5750506000910152565b600082601f83011262003a5957600080fd5b815162003a6a6200384782620037db565b81815284602083860101111562003a8057600080fd5b6200243f82602083016020870162003a18565b60006020828403121562003aa657600080fd5b815167ffffffffffffffff81111562003abe57600080fd5b6200243f8482850162003a47565b60006020828403121562003adf57600080fd5b8151620031d08162003741565b6000815180845262003b0681602086016020860162003a18565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60608152600062003b4d606083018662003aec565b828103602084015262003b61818662003aec565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003bd58285018762003aec565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003c83577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003cbc5762003cbc62003c1d565b5060010190565b60006020828403121562003cd657600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003d1a606083018462003aec565b95945050505050565b6000825162003d3781846020870162003a18565b9190910192915050565b60008060006060848603121562003d5757600080fd5b835167ffffffffffffffff8082111562003d7057600080fd5b62003d7e8783880162003a47565b9450602086015191508082111562003d9557600080fd5b5062003da48682870162003a47565b925050604084015162003db78162003741565b809150509250925092565b60a08152600062003dd760a083018862003aec565b828103602084015262003deb818862003aec565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000808585111562003e3357600080fd5b8386111562003e4157600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003e6a57600080fd5b873562003e77816200346f565b9650602088013562003e89816200346f565b955060408801359450606088013593506080880135620037be8162003741565b600080600080600080600080610100898b03121562003ec757600080fd5b883562003ed4816200346f565b9750602089013562003ee6816200346f565b96506040890135955060608901359450608089013562003f0681620039e9565b935060a089013562003f188162003741565b979a969950949793969295929450505060c08201359160e0013590565b600181815b8085111562003f9457817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003f785762003f7862003c1d565b8085161562003f8657918102915b93841c939080029062003f3a565b509250929050565b60008262003fad5750600162000cab565b8162003fbc5750600062000cab565b816001811462003fd5576002811462003fe05762004000565b600191505062000cab565b60ff84111562003ff45762003ff462003c1d565b50506001821b62000cab565b5060208310610133831016604e8410600b841016171562004025575081810a62000cab565b62004031838362003f35565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562004066576200406662003c1d565b029392505050565b6000620031d0838362003f9c565b60008282101562004091576200409162003c1d565b500390565b60008219821115620040ac57620040ac62003c1d565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b602081526000620031d0602083018462003aec56fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a2646970667358221220bdf94d69e63e347f03bee03a33cb2ab4b50d84e75b48c38164c94a1a1647481d64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50615c38806100206000396000f3fe608060405260043610620001ab5760003560e01c80637b6323c111620000e7578063bab161bf1162000089578063e73758811162000060578063e73758811462000632578063ed6be5c91462000666578063ff634ed7146200067d57600080fd5b8063bab161bf14620005b7578063d02103ca14620005ec578063d96a15f7146200061b57600080fd5b80638f61151911620000be5780638f6115191462000539578063a08e8a081462000568578063b7e6a7d4146200059257600080fd5b80637b6323c114620004b557806381b1c17414620004da5780638456cb59146200052157600080fd5b80633da8168211620001515780634638554911620001285780634638554914620004515780635c975abb1462000476578063647c576c146200049057600080fd5b80633da81682146200030f5780633e19704314620003455780633f4ba83a146200043957600080fd5b80632f3a3d5d11620001865780632f3a3d5d146200023f578063318aee3d146200026e5780633ae0504714620002f757600080fd5b80630871e97114620001b057806322e95f2c14620001c95780632dfdf0b51462000218575b600080fd5b620001c7620001c13660046200375b565b62000694565b005b348015620001d657600080fd5b50620001ee620001e836600462003817565b62000c92565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200022557600080fd5b506200023060215481565b6040519081526020016200020f565b3480156200024c57600080fd5b50608b54620001ee9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200027b57600080fd5b50620002c56200028d36600462003853565b60896020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff9091166020830152016200020f565b3480156200030457600080fd5b506200023062000d35565b3480156200031c57600080fd5b50620003346200032e36600462003972565b62000e28565b60405190151581526020016200020f565b3480156200035257600080fd5b506200023062000364366004620039f0565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200044657600080fd5b50620001c762000f28565b3480156200045e57600080fd5b50620001c76200047036600462003b1f565b62001003565b3480156200048357600080fd5b5060545460ff1662000334565b3480156200049d57600080fd5b50620001c7620004af36600462003c06565b62001667565b348015620004c257600080fd5b50620001c7620004d436600462003b1f565b620018f5565b348015620004e757600080fd5b50620001ee620004f936600462003c56565b60886020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200052e57600080fd5b50620001c7620022be565b3480156200054657600080fd5b50608c54620001ee9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200057557600080fd5b506200057f600081565b60405160ff90911681526020016200020f565b3480156200059f57600080fd5b50620001ee620005b136600462003817565b62002397565b348015620005c457600080fd5b50608654620005d69063ffffffff1681565b60405163ffffffff90911681526020016200020f565b348015620005f957600080fd5b50608a54620001ee9073ffffffffffffffffffffffffffffffffffffffff1681565b620001c76200062c36600462003c70565b62002460565b3480156200063f57600080fd5b50620003346200065136600462003c56565b60876020526000908152604090205460ff1681565b3480156200067357600080fd5b50620005d6600081565b3480156200068a57600080fd5b506200057f600181565b6200069e620026b7565b60865463ffffffff908116908616036200073f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff8916620007fb57853414620007f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c55450000000000000000000000000000000000606482015260840162000736565b6000915062000b0f565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526089602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620008fc576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af1158015620008c3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008e9919062003ce7565b5060208101518151909450925062000b0d565b84156200091157620009118a88888862002726565b6200093573ffffffffffffffffffffffffffffffffffffffff8b1633308a62002e50565b899350608660009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000999573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620009e1919081019062003d82565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000a2d573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262000a75919081019062003d82565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ac1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ae7919062003dbb565b60405160200162000afb9392919062003e27565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162000b5198979695949392919062003e64565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000c0c9062002f2e565b608a5473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000c3462000d35565b6040518263ffffffff1660e01b815260040162000c5391815260200190565b600060405180830381600087803b15801562000c6e57600080fd5b505af115801562000c83573d6000803e3d6000fd5b50505050505050505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526088909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b602154600090819081805b602081101562000e1f578260011660010362000da0576001816020811062000d6c5762000d6c62003edd565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000dcd565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000dda60028462003f3b565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000e169062003f77565b91505062000d40565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000f1b578160011660010362000ea55786818151811062000e635762000e6362003edd565b60200260200101518360405160200162000e87929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000ef7565b8287828151811062000ebb5762000ebb62003edd565b602002602001015160405160200162000ede929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000f0460028362003f3b565b91508062000f128162003f77565b91505062000e38565b5050909114949350505050565b608c5473ffffffffffffffffffffffffffffffffffffffff16331462000ff7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a40162000736565b62001001620030ac565b565b6200100d620026b7565b63ffffffff891660009081526087602052604090205460ff1615620010b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d4544000000000000000000000000000000000000000000000000000000606482015260840162000736565b608a546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af11580156200114e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001174919062003fb2565b60000362001205576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000606482015260840162000736565b60865463ffffffff858116911614620012a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000606482015260840162000736565b60865460009063ffffffff16620012ba575086620012bd565b50875b8151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08c811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608d811b82166025860152918c901b909216603984015289901b16603d82015260518101879052607180820193909352815180820390930183526091019052805191012062001399905b8c8c63ffffffff168462000e28565b62001427576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000736565b63ffffffff8a1660009081526087602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff861690859062001495908a908c90889060240162003fcc565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001518919062004012565b60006040518083038185875af1925050503d806000811462001557576040519150601f19603f3d011682016040523d82523d6000602084013e6200155c565b606091505b5050905080620015ee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c454400000000000000000000000000000000000000000000000000000000606482015260840162000736565b6040805163ffffffff8d811682528a16602082015273ffffffffffffffffffffffffffffffffffffffff89811682840152871660608201526080810186905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a1505050505050505050505050565b600054610100900460ff1615808015620016885750600054600160ff909116105b80620016a45750303b158015620016a4575060005460ff166001145b62001732576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840162000736565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156200179157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b608680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8616179055608a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790556040516200180f9062003700565b604051809103906000f0801580156200182c573d6000803e3d6000fd5b50608b80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff93841617909155608c80549091169184169190911790556200188b6200312b565b8015620018ef57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b620018ff620026b7565b63ffffffff891660009081526087602052604090205460ff1615620019a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4272696467653a3a636c61696d41737365743a20414c52454144595f434c414960448201527f4d45440000000000000000000000000000000000000000000000000000000000606482015260840162000736565b608a546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001a40573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a66919062003fb2565b60000362001af7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f4272696467653a3a636c61696d41737365743a20474c4f42414c5f455849545f60448201527f524f4f545f444f45535f4e4f545f4d4154434800000000000000000000000000606482015260840162000736565b60865463ffffffff85811691161462001b93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4272696467653a3a636c61696d41737365743a2044455354494e4154494f4e5f60448201527f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000000000606482015260840162000736565b60865460009063ffffffff1662001bac57508662001baf565b50875b8151602080840191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08c811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608d811b82166025860152918c901b909216603984015289901b16603d82015260518101879052607180820193909352815180820390930183526091019052805191012062001c62906200138a565b62001cca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a636c61696d41737365743a20534d545f494e56414c494400604482015260640162000736565b63ffffffff8a16600090815260876020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff861662001e3b576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff861690859060405162001d5d919062004012565b60006040518083038185875af1925050503d806000811462001d9c576040519150601f19603f3d011682016040523d82523d6000602084013e62001da1565b606091505b505090508062001e34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c454400000000000000000000000000000000000000000000000000606482015260840162000736565b5062002246565b60865463ffffffff9081169088160362001e785762001e7273ffffffffffffffffffffffffffffffffffffffff87168585620031ee565b62002246565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606088901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152608890935291205490915073ffffffffffffffffffffffffffffffffffffffff1680620021a557608b5460009062001f639073ffffffffffffffffffffffffffffffffffffffff168462003246565b905060008060008780602001905181019062001f80919062004030565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848e8e6040518663ffffffff1660e01b815260040162001fc9959493929190620040a6565b600060405180830381600087803b15801562001fe457600080fd5b505af115801562001ff9573d6000803e3d6000fd5b50505050836088600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808e63ffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815250608960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598d8d86604051620021939392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062002243565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018790528216906340c10f19906044016020604051808303816000875af11580156200221b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002241919062003ce7565b505b50505b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b608c5473ffffffffffffffffffffffffffffffffffffffff1633146200238d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a40162000736565b6200100162003326565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120608b54909150620024589073ffffffffffffffffffffffffffffffffffffffff168262003384565b949350505050565b6200246a620026b7565b60865463ffffffff9081169084160362002507576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c4600000000000000000000000000000000000000000000606482015260840162000736565b6086546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620025549260019263ffffffff9092169133918991899134918a919062003e64565b60405180910390a16086548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620026379062002f2e565b608a5473ffffffffffffffffffffffffffffffffffffffff166333d6247d6200265f62000d35565b6040518263ffffffff1660e01b81526004016200267e91815260200190565b600060405180830381600087803b1580156200269957600080fd5b505af1158015620026ae573d6000803e3d6000fd5b50505050505050565b60545460ff161562001001576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015260640162000736565b60006200276983838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200340892505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002aed576000808080808080620027cc896004818d62004106565b810190620027db919062004132565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614620028a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000736565b73ffffffffffffffffffffffffffffffffffffffff861630146200294d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000736565b8a8514620029de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d4154434800000000000000000000000000000000000000606482015260840162000736565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002a99919062004012565b6000604051808303816000865af19150503d806000811462002ad8576040519150601f19603f3d011682016040523d82523d6000602084013e62002add565b606091505b5050505050505050505062002e49565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002b9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000736565b60008080808080808062002bb28a6004818e62004106565b81019062002bc191906200418d565b975097509750975097509750975097503373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161462002c8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000736565b73ffffffffffffffffffffffffffffffffffffffff8716301462002d35576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000736565b6040805173ffffffffffffffffffffffffffffffffffffffff8a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002df9919062004012565b6000604051808303816000865af19150503d806000811462002e38576040519150601f19603f3d011682016040523d82523d6000602084013e62002e3d565b606091505b50505050505050505050505b5050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052620018ef9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526200340f565b80600162002f3f6020600262004352565b62002f4b919062004360565b6021541062002fdd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c00000000000000000000000000000000000000000000606482015260840162000736565b60016021600082825462002ff291906200437a565b909155505060215460005b60208110156200309c5781600116600103620030325782600182602081106200302a576200302a62003edd565b015550505050565b6001816020811062003048576200304862003edd565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262003085919062003f3b565b915080620030938162003f77565b91505062002ffd565b50620030a762004395565b505050565b620030b662003522565b605480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b600054610100900460ff16620031c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000736565b605480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052620030a79084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002eab565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000d2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640162000736565b62003330620026b7565b605480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258620031013390565b6000620034018383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b600062003473826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620035909092919063ffffffff16565b805190915015620030a7578080602001905181019062003494919062003ce7565b620030a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000736565b60545460ff1662001001576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015260640162000736565b60606200245884846000858573ffffffffffffffffffffffffffffffffffffffff85163b6200361c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000736565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405162003647919062004012565b60006040518083038185875af1925050503d806000811462003686576040519150601f19603f3d011682016040523d82523d6000602084013e6200368b565b606091505b50915091506200369d828286620036a8565b979650505050505050565b60608315620036b957508162003401565b825115620036ca5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007369190620043c4565b61182980620043da83390190565b73ffffffffffffffffffffffffffffffffffffffff811681146200373157600080fd5b50565b803562003741816200370e565b919050565b803563ffffffff811681146200374157600080fd5b60008060008060008060a087890312156200377557600080fd5b863562003782816200370e565b9550620037926020880162003746565b94506040870135620037a4816200370e565b935060608701359250608087013567ffffffffffffffff80821115620037c957600080fd5b818901915089601f830112620037de57600080fd5b813581811115620037ee57600080fd5b8a60208285010111156200380157600080fd5b6020830194508093505050509295509295509295565b600080604083850312156200382b57600080fd5b620038368362003746565b9150602083013562003848816200370e565b809150509250929050565b6000602082840312156200386657600080fd5b813562003401816200370e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620038ec57620038ec62003873565b604052919050565b600082601f8301126200390657600080fd5b8135602067ffffffffffffffff82111562003925576200392562003873565b8160051b62003936828201620038a2565b92835284810182019282810190878511156200395157600080fd5b83870192505b848310156200369d5782358252918301919083019062003957565b600080600080608085870312156200398957600080fd5b84359350602085013567ffffffffffffffff80821115620039a957600080fd5b620039b788838901620038f4565b9450604087013591508082168214620039cf57600080fd5b509396929550929360600135925050565b60ff811681146200373157600080fd5b600080600080600080600060e0888a03121562003a0c57600080fd5b873562003a1981620039e0565b965062003a296020890162003746565b9550604088013562003a3b816200370e565b945062003a4b6060890162003746565b9350608088013562003a5d816200370e565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562003a975762003a9762003873565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011262003ad557600080fd5b813562003aec62003ae68262003a7a565b620038a2565b81815284602083860101111562003b0257600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562003b4057600080fd5b8a3567ffffffffffffffff8082111562003b5957600080fd5b62003b678e838f01620038f4565b9b5062003b7760208e0162003746565b9a5060408d0135995060608d0135985062003b9560808e0162003746565b975062003ba560a08e0162003734565b965062003bb560c08e0162003746565b955062003bc560e08e0162003734565b94506101008d013593506101208d013591508082111562003be557600080fd5b5062003bf48d828e0162003ac3565b9150509295989b9194979a5092959850565b60008060006060848603121562003c1c57600080fd5b62003c278462003746565b9250602084013562003c39816200370e565b9150604084013562003c4b816200370e565b809150509250925092565b60006020828403121562003c6957600080fd5b5035919050565b60008060006060848603121562003c8657600080fd5b62003c918462003746565b9250602084013562003ca3816200370e565b9150604084013567ffffffffffffffff81111562003cc057600080fd5b62003cce8682870162003ac3565b9150509250925092565b80151581146200373157600080fd5b60006020828403121562003cfa57600080fd5b8151620034018162003cd8565b60005b8381101562003d2457818101518382015260200162003d0a565b83811115620018ef5750506000910152565b600082601f83011262003d4857600080fd5b815162003d5962003ae68262003a7a565b81815284602083860101111562003d6f57600080fd5b6200245882602083016020870162003d07565b60006020828403121562003d9557600080fd5b815167ffffffffffffffff81111562003dad57600080fd5b620024588482850162003d36565b60006020828403121562003dce57600080fd5b81516200340181620039e0565b6000815180845262003df581602086016020860162003d07565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60608152600062003e3c606083018662003ddb565b828103602084015262003e50818662003ddb565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003ec48285018762003ddb565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003f72577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003fab5762003fab62003f0c565b5060010190565b60006020828403121562003fc557600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062004009606083018462003ddb565b95945050505050565b600082516200402681846020870162003d07565b9190910192915050565b6000806000606084860312156200404657600080fd5b835167ffffffffffffffff808211156200405f57600080fd5b6200406d8783880162003d36565b945060208601519150808211156200408457600080fd5b50620040938682870162003d36565b925050604084015162003c4b81620039e0565b60a081526000620040bb60a083018862003ddb565b8281036020840152620040cf818862003ddb565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b600080858511156200411757600080fd5b838611156200412557600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200414e57600080fd5b87356200415b816200370e565b965060208801356200416d816200370e565b95506040880135945060608801359350608088013562003a5d81620039e0565b600080600080600080600080610100898b031215620041ab57600080fd5b8835620041b8816200370e565b97506020890135620041ca816200370e565b965060408901359550606089013594506080890135620041ea8162003cd8565b935060a0890135620041fc81620039e0565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200427857817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156200425c576200425c62003f0c565b808516156200426a57918102915b93841c93908002906200421e565b509250929050565b600082620042915750600162000d2f565b81620042a05750600062000d2f565b8160018114620042b95760028114620042c457620042e4565b600191505062000d2f565b60ff841115620042d857620042d862003f0c565b50506001821b62000d2f565b5060208310610133831016604e8410600b841016171562004309575081810a62000d2f565b62004315838362004219565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156200434a576200434a62003f0c565b029392505050565b600062003401838362004280565b60008282101562004375576200437562003f0c565b500390565b6000821982111562004390576200439062003f0c565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60208152600062003401602083018462003ddb56fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a264697066735822122057eea8bc30140fac426a3ce5af5ced0f516e15d62de7a29d50ba5e2d711e9f2364736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001ab5760003560e01c80637b6323c111620000e7578063bab161bf1162000089578063e73758811162000060578063e73758811462000632578063ed6be5c91462000666578063ff634ed7146200067d57600080fd5b8063bab161bf14620005b7578063d02103ca14620005ec578063d96a15f7146200061b57600080fd5b80638f61151911620000be5780638f6115191462000539578063a08e8a081462000568578063b7e6a7d4146200059257600080fd5b80637b6323c114620004b557806381b1c17414620004da5780638456cb59146200052157600080fd5b80633da8168211620001515780634638554911620001285780634638554914620004515780635c975abb1462000476578063647c576c146200049057600080fd5b80633da81682146200030f5780633e19704314620003455780633f4ba83a146200043957600080fd5b80632f3a3d5d11620001865780632f3a3d5d146200023f578063318aee3d146200026e5780633ae0504714620002f757600080fd5b80630871e97114620001b057806322e95f2c14620001c95780632dfdf0b51462000218575b600080fd5b620001c7620001c13660046200375b565b62000694565b005b348015620001d657600080fd5b50620001ee620001e836600462003817565b62000c92565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200022557600080fd5b506200023060215481565b6040519081526020016200020f565b3480156200024c57600080fd5b50608b54620001ee9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200027b57600080fd5b50620002c56200028d36600462003853565b60896020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff9091166020830152016200020f565b3480156200030457600080fd5b506200023062000d35565b3480156200031c57600080fd5b50620003346200032e36600462003972565b62000e28565b60405190151581526020016200020f565b3480156200035257600080fd5b506200023062000364366004620039f0565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200044657600080fd5b50620001c762000f28565b3480156200045e57600080fd5b50620001c76200047036600462003b1f565b62001003565b3480156200048357600080fd5b5060545460ff1662000334565b3480156200049d57600080fd5b50620001c7620004af36600462003c06565b62001667565b348015620004c257600080fd5b50620001c7620004d436600462003b1f565b620018f5565b348015620004e757600080fd5b50620001ee620004f936600462003c56565b60886020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200052e57600080fd5b50620001c7620022be565b3480156200054657600080fd5b50608c54620001ee9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200057557600080fd5b506200057f600081565b60405160ff90911681526020016200020f565b3480156200059f57600080fd5b50620001ee620005b136600462003817565b62002397565b348015620005c457600080fd5b50608654620005d69063ffffffff1681565b60405163ffffffff90911681526020016200020f565b348015620005f957600080fd5b50608a54620001ee9073ffffffffffffffffffffffffffffffffffffffff1681565b620001c76200062c36600462003c70565b62002460565b3480156200063f57600080fd5b50620003346200065136600462003c56565b60876020526000908152604090205460ff1681565b3480156200067357600080fd5b50620005d6600081565b3480156200068a57600080fd5b506200057f600181565b6200069e620026b7565b60865463ffffffff908116908616036200073f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff8916620007fb57853414620007f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c55450000000000000000000000000000000000606482015260840162000736565b6000915062000b0f565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526089602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620008fc576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af1158015620008c3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008e9919062003ce7565b5060208101518151909450925062000b0d565b84156200091157620009118a88888862002726565b6200093573ffffffffffffffffffffffffffffffffffffffff8b1633308a62002e50565b899350608660009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000999573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620009e1919081019062003d82565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000a2d573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262000a75919081019062003d82565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ac1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ae7919062003dbb565b60405160200162000afb9392919062003e27565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162000b5198979695949392919062003e64565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000c0c9062002f2e565b608a5473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000c3462000d35565b6040518263ffffffff1660e01b815260040162000c5391815260200190565b600060405180830381600087803b15801562000c6e57600080fd5b505af115801562000c83573d6000803e3d6000fd5b50505050505050505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526088909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b602154600090819081805b602081101562000e1f578260011660010362000da0576001816020811062000d6c5762000d6c62003edd565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000dcd565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000dda60028462003f3b565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000e169062003f77565b91505062000d40565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000f1b578160011660010362000ea55786818151811062000e635762000e6362003edd565b60200260200101518360405160200162000e87929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000ef7565b8287828151811062000ebb5762000ebb62003edd565b602002602001015160405160200162000ede929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000f0460028362003f3b565b91508062000f128162003f77565b91505062000e38565b5050909114949350505050565b608c5473ffffffffffffffffffffffffffffffffffffffff16331462000ff7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a40162000736565b62001001620030ac565b565b6200100d620026b7565b63ffffffff891660009081526087602052604090205460ff1615620010b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d4544000000000000000000000000000000000000000000000000000000606482015260840162000736565b608a546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af11580156200114e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001174919062003fb2565b60000362001205576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000606482015260840162000736565b60865463ffffffff858116911614620012a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000606482015260840162000736565b60865460009063ffffffff16620012ba575086620012bd565b50875b8151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08c811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608d811b82166025860152918c901b909216603984015289901b16603d82015260518101879052607180820193909352815180820390930183526091019052805191012062001399905b8c8c63ffffffff168462000e28565b62001427576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000736565b63ffffffff8a1660009081526087602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff861690859062001495908a908c90889060240162003fcc565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001518919062004012565b60006040518083038185875af1925050503d806000811462001557576040519150601f19603f3d011682016040523d82523d6000602084013e6200155c565b606091505b5050905080620015ee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c454400000000000000000000000000000000000000000000000000000000606482015260840162000736565b6040805163ffffffff8d811682528a16602082015273ffffffffffffffffffffffffffffffffffffffff89811682840152871660608201526080810186905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a1505050505050505050505050565b600054610100900460ff1615808015620016885750600054600160ff909116105b80620016a45750303b158015620016a4575060005460ff166001145b62001732576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840162000736565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156200179157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b608680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8616179055608a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790556040516200180f9062003700565b604051809103906000f0801580156200182c573d6000803e3d6000fd5b50608b80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff93841617909155608c80549091169184169190911790556200188b6200312b565b8015620018ef57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b620018ff620026b7565b63ffffffff891660009081526087602052604090205460ff1615620019a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4272696467653a3a636c61696d41737365743a20414c52454144595f434c414960448201527f4d45440000000000000000000000000000000000000000000000000000000000606482015260840162000736565b608a546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001a40573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a66919062003fb2565b60000362001af7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f4272696467653a3a636c61696d41737365743a20474c4f42414c5f455849545f60448201527f524f4f545f444f45535f4e4f545f4d4154434800000000000000000000000000606482015260840162000736565b60865463ffffffff85811691161462001b93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4272696467653a3a636c61696d41737365743a2044455354494e4154494f4e5f60448201527f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000000000606482015260840162000736565b60865460009063ffffffff1662001bac57508662001baf565b50875b8151602080840191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08c811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608d811b82166025860152918c901b909216603984015289901b16603d82015260518101879052607180820193909352815180820390930183526091019052805191012062001c62906200138a565b62001cca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a636c61696d41737365743a20534d545f494e56414c494400604482015260640162000736565b63ffffffff8a16600090815260876020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff861662001e3b576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff861690859060405162001d5d919062004012565b60006040518083038185875af1925050503d806000811462001d9c576040519150601f19603f3d011682016040523d82523d6000602084013e62001da1565b606091505b505090508062001e34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c454400000000000000000000000000000000000000000000000000606482015260840162000736565b5062002246565b60865463ffffffff9081169088160362001e785762001e7273ffffffffffffffffffffffffffffffffffffffff87168585620031ee565b62002246565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606088901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152608890935291205490915073ffffffffffffffffffffffffffffffffffffffff1680620021a557608b5460009062001f639073ffffffffffffffffffffffffffffffffffffffff168462003246565b905060008060008780602001905181019062001f80919062004030565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848e8e6040518663ffffffff1660e01b815260040162001fc9959493929190620040a6565b600060405180830381600087803b15801562001fe457600080fd5b505af115801562001ff9573d6000803e3d6000fd5b50505050836088600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808e63ffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815250608960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598d8d86604051620021939392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062002243565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018790528216906340c10f19906044016020604051808303816000875af11580156200221b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002241919062003ce7565b505b50505b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b608c5473ffffffffffffffffffffffffffffffffffffffff1633146200238d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a40162000736565b6200100162003326565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120608b54909150620024589073ffffffffffffffffffffffffffffffffffffffff168262003384565b949350505050565b6200246a620026b7565b60865463ffffffff9081169084160362002507576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c4600000000000000000000000000000000000000000000606482015260840162000736565b6086546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620025549260019263ffffffff9092169133918991899134918a919062003e64565b60405180910390a16086548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620026379062002f2e565b608a5473ffffffffffffffffffffffffffffffffffffffff166333d6247d6200265f62000d35565b6040518263ffffffff1660e01b81526004016200267e91815260200190565b600060405180830381600087803b1580156200269957600080fd5b505af1158015620026ae573d6000803e3d6000fd5b50505050505050565b60545460ff161562001001576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015260640162000736565b60006200276983838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200340892505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002aed576000808080808080620027cc896004818d62004106565b810190620027db919062004132565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614620028a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000736565b73ffffffffffffffffffffffffffffffffffffffff861630146200294d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000736565b8a8514620029de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d4154434800000000000000000000000000000000000000606482015260840162000736565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002a99919062004012565b6000604051808303816000865af19150503d806000811462002ad8576040519150601f19603f3d011682016040523d82523d6000602084013e62002add565b606091505b5050505050505050505062002e49565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002b9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000736565b60008080808080808062002bb28a6004818e62004106565b81019062002bc191906200418d565b975097509750975097509750975097503373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161462002c8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000736565b73ffffffffffffffffffffffffffffffffffffffff8716301462002d35576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000736565b6040805173ffffffffffffffffffffffffffffffffffffffff8a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002df9919062004012565b6000604051808303816000865af19150503d806000811462002e38576040519150601f19603f3d011682016040523d82523d6000602084013e62002e3d565b606091505b50505050505050505050505b5050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052620018ef9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526200340f565b80600162002f3f6020600262004352565b62002f4b919062004360565b6021541062002fdd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c00000000000000000000000000000000000000000000606482015260840162000736565b60016021600082825462002ff291906200437a565b909155505060215460005b60208110156200309c5781600116600103620030325782600182602081106200302a576200302a62003edd565b015550505050565b6001816020811062003048576200304862003edd565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262003085919062003f3b565b915080620030938162003f77565b91505062002ffd565b50620030a762004395565b505050565b620030b662003522565b605480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b600054610100900460ff16620031c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000736565b605480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052620030a79084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002eab565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000d2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640162000736565b62003330620026b7565b605480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258620031013390565b6000620034018383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b600062003473826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620035909092919063ffffffff16565b805190915015620030a7578080602001905181019062003494919062003ce7565b620030a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000736565b60545460ff1662001001576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015260640162000736565b60606200245884846000858573ffffffffffffffffffffffffffffffffffffffff85163b6200361c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000736565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405162003647919062004012565b60006040518083038185875af1925050503d806000811462003686576040519150601f19603f3d011682016040523d82523d6000602084013e6200368b565b606091505b50915091506200369d828286620036a8565b979650505050505050565b60608315620036b957508162003401565b825115620036ca5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007369190620043c4565b61182980620043da83390190565b73ffffffffffffffffffffffffffffffffffffffff811681146200373157600080fd5b50565b803562003741816200370e565b919050565b803563ffffffff811681146200374157600080fd5b60008060008060008060a087890312156200377557600080fd5b863562003782816200370e565b9550620037926020880162003746565b94506040870135620037a4816200370e565b935060608701359250608087013567ffffffffffffffff80821115620037c957600080fd5b818901915089601f830112620037de57600080fd5b813581811115620037ee57600080fd5b8a60208285010111156200380157600080fd5b6020830194508093505050509295509295509295565b600080604083850312156200382b57600080fd5b620038368362003746565b9150602083013562003848816200370e565b809150509250929050565b6000602082840312156200386657600080fd5b813562003401816200370e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620038ec57620038ec62003873565b604052919050565b600082601f8301126200390657600080fd5b8135602067ffffffffffffffff82111562003925576200392562003873565b8160051b62003936828201620038a2565b92835284810182019282810190878511156200395157600080fd5b83870192505b848310156200369d5782358252918301919083019062003957565b600080600080608085870312156200398957600080fd5b84359350602085013567ffffffffffffffff80821115620039a957600080fd5b620039b788838901620038f4565b9450604087013591508082168214620039cf57600080fd5b509396929550929360600135925050565b60ff811681146200373157600080fd5b600080600080600080600060e0888a03121562003a0c57600080fd5b873562003a1981620039e0565b965062003a296020890162003746565b9550604088013562003a3b816200370e565b945062003a4b6060890162003746565b9350608088013562003a5d816200370e565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562003a975762003a9762003873565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011262003ad557600080fd5b813562003aec62003ae68262003a7a565b620038a2565b81815284602083860101111562003b0257600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562003b4057600080fd5b8a3567ffffffffffffffff8082111562003b5957600080fd5b62003b678e838f01620038f4565b9b5062003b7760208e0162003746565b9a5060408d0135995060608d0135985062003b9560808e0162003746565b975062003ba560a08e0162003734565b965062003bb560c08e0162003746565b955062003bc560e08e0162003734565b94506101008d013593506101208d013591508082111562003be557600080fd5b5062003bf48d828e0162003ac3565b9150509295989b9194979a5092959850565b60008060006060848603121562003c1c57600080fd5b62003c278462003746565b9250602084013562003c39816200370e565b9150604084013562003c4b816200370e565b809150509250925092565b60006020828403121562003c6957600080fd5b5035919050565b60008060006060848603121562003c8657600080fd5b62003c918462003746565b9250602084013562003ca3816200370e565b9150604084013567ffffffffffffffff81111562003cc057600080fd5b62003cce8682870162003ac3565b9150509250925092565b80151581146200373157600080fd5b60006020828403121562003cfa57600080fd5b8151620034018162003cd8565b60005b8381101562003d2457818101518382015260200162003d0a565b83811115620018ef5750506000910152565b600082601f83011262003d4857600080fd5b815162003d5962003ae68262003a7a565b81815284602083860101111562003d6f57600080fd5b6200245882602083016020870162003d07565b60006020828403121562003d9557600080fd5b815167ffffffffffffffff81111562003dad57600080fd5b620024588482850162003d36565b60006020828403121562003dce57600080fd5b81516200340181620039e0565b6000815180845262003df581602086016020860162003d07565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60608152600062003e3c606083018662003ddb565b828103602084015262003e50818662003ddb565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003ec48285018762003ddb565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003f72577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003fab5762003fab62003f0c565b5060010190565b60006020828403121562003fc557600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062004009606083018462003ddb565b95945050505050565b600082516200402681846020870162003d07565b9190910192915050565b6000806000606084860312156200404657600080fd5b835167ffffffffffffffff808211156200405f57600080fd5b6200406d8783880162003d36565b945060208601519150808211156200408457600080fd5b50620040938682870162003d36565b925050604084015162003c4b81620039e0565b60a081526000620040bb60a083018862003ddb565b8281036020840152620040cf818862003ddb565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b600080858511156200411757600080fd5b838611156200412557600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200414e57600080fd5b87356200415b816200370e565b965060208801356200416d816200370e565b95506040880135945060608801359350608088013562003a5d81620039e0565b600080600080600080600080610100898b031215620041ab57600080fd5b8835620041b8816200370e565b97506020890135620041ca816200370e565b965060408901359550606089013594506080890135620041ea8162003cd8565b935060a0890135620041fc81620039e0565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200427857817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156200425c576200425c62003f0c565b808516156200426a57918102915b93841c93908002906200421e565b509250929050565b600082620042915750600162000d2f565b81620042a05750600062000d2f565b8160018114620042b95760028114620042c457620042e4565b600191505062000d2f565b60ff841115620042d857620042d862003f0c565b50506001821b62000d2f565b5060208310610133831016604e8410600b841016171562004309575081810a62000d2f565b62004315838362004219565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156200434a576200434a62003f0c565b029392505050565b600062003401838362004280565b60008282101562004375576200437562003f0c565b500390565b6000821982111562004390576200439062003f0c565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60208152600062003401602083018462003ddb56fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a264697066735822122057eea8bc30140fac426a3ce5af5ced0f516e15d62de7a29d50ba5e2d711e9f2364736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/BridgeMock.json b/compiled-contracts/BridgeMock.json index dd095fe44..73cf61ded 100644 --- a/compiled-contracts/BridgeMock.json +++ b/compiled-contracts/BridgeMock.json @@ -152,6 +152,32 @@ "name": "OwnershipTransferred", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, { "inputs": [], "name": "LEAF_TYPE_ASSET", @@ -505,6 +531,11 @@ "internalType": "contract IGlobalExitRootManager", "name": "_globalExitRootManager", "type": "address" + }, + { + "internalType": "address", + "name": "_poeAddress", + "type": "address" } ], "name": "initialize", @@ -551,6 +582,39 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "poeAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -653,6 +717,13 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -712,8 +783,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50615ed1806100206000396000f3fe608060405260043610620001c35760003560e01c806381b1c17411620000f3578063bab161bf1162000095578063e7375881116200006c578063e73758811462000678578063ed6be5c914620006ac578063f2fde38b14620006c3578063ff634ed714620006e857600080fd5b8063bab161bf14620005fd578063d02103ca1462000632578063d96a15f7146200066157600080fd5b806391e57e2d11620000ca57806391e57e2d1462000596578063a08e8a0814620005ae578063b7e6a7d414620005d857600080fd5b806381b1c17414620004fd5780638624c35c14620005445780638da5cb5b146200056957600080fd5b8063318aee3d11620001695780633e19704311620001405780633e19704314620003a757806346385549146200049b578063715018a614620004c05780637b6323c114620004d857600080fd5b8063318aee3d14620002d05780633ae0504714620003595780633da81682146200037157600080fd5b80632c3f58cd116200019e5780632c3f58cd14620002555780632dfdf0b5146200027a5780632f3a3d5d14620002a157600080fd5b80630871e97114620001c857806322e95f2c14620001e15780632b5e42e71462000230575b600080fd5b620001df620001d936600462003a1b565b620006ff565b005b348015620001ee57600080fd5b50620002066200020036600462003ad7565b620007d5565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200023d57600080fd5b50620001df6200024f36600462003b13565b620008a7565b3480156200026257600080fd5b50620001df6200027436600462003b2d565b620008b6565b3480156200028757600080fd5b506200029260215481565b60405190815260200162000227565b348015620002ae57600080fd5b50602754620002069073ffffffffffffffffffffffffffffffffffffffff1681565b348015620002dd57600080fd5b5062000327620002ef36600462003b4b565b60256020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000227565b3480156200036657600080fd5b5062000292620008f7565b3480156200037e57600080fd5b50620003966200039036600462003c6a565b620009ea565b604051901515815260200162000227565b348015620003b457600080fd5b5062000292620003c636600462003ce8565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004a857600080fd5b50620001df620004ba36600462003e17565b62000aea565b348015620004cd57600080fd5b50620001df620012a5565b348015620004e557600080fd5b50620001df620004f736600462003e17565b620012bd565b3480156200050a57600080fd5b50620002066200051c36600462003b13565b60246020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200055157600080fd5b50620001df6200056336600462003ad7565b62001d68565b3480156200057657600080fd5b50605a5473ffffffffffffffffffffffffffffffffffffffff1662000206565b348015620005a357600080fd5b5062000292608c5481565b348015620005bb57600080fd5b50620005c5600081565b60405160ff909116815260200162000227565b348015620005e557600080fd5b5062000206620005f736600462003ad7565b62001ff2565b3480156200060a57600080fd5b506022546200061c9063ffffffff1681565b60405163ffffffff909116815260200162000227565b3480156200063f57600080fd5b50602654620002069073ffffffffffffffffffffffffffffffffffffffff1681565b620001df6200067236600462003efe565b620020bb565b3480156200068557600080fd5b50620003966200069736600462003b13565b60236020526000908152604090205460ff1681565b348015620006b957600080fd5b506200061c600081565b348015620006d057600080fd5b50620001df620006e236600462003b4b565b62002308565b348015620006f557600080fd5b50620005c5600181565b608c54341115620007bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b620007cd868686868686620023c5565b505050505050565b60006024600084846040516020016200084492919060e09290921b7fffffffff0000000000000000000000000000000000000000000000000000000016825260601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600482015260180190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181528151602092830120835290820192909252016000205473ffffffffffffffffffffffffffffffffffffffff1690505b92915050565b620008b1620029b5565b608c55565b620008c0620029b5565b602280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b602154600090819081805b6020811015620009e157826001166001036200096257600181602081106200092e576200092e62003f66565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200098f565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200099c60028462003fc4565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620009d89062004000565b91505062000902565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000add578160011660010362000a675786818151811062000a255762000a2562003f66565b60200260200101518360405160200162000a49929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000ab9565b8287828151811062000a7d5762000a7d62003f66565b602002602001015160405160200162000aa0929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000ac660028362003fc4565b91508062000ad48162004000565b915050620009fa565b5050909114949350505050565b63ffffffff891660009081526023602052604090205460ff161562000b92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d45440000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6026546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000c2b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c5191906200403b565b60000362000ce2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d4154434800000000000000000000006064820152608401620007b4565b60225463ffffffff85811691161462000d7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000006064820152608401620007b4565b60225463ffffffff1662000efc578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062000e68905b8b8b63ffffffff168a620009ea565b62000ef6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b62001066565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062000fd8905b8b8b63ffffffff168b620009ea565b62001066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b63ffffffff891660009081526023602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff8516908490620010d49089908b908790602401620040d0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001157919062004116565b60006040518083038185875af1925050503d806000811462001196576040519150601f19603f3d011682016040523d82523d6000602084013e6200119b565b606091505b50509050806200122d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b620012af620029b5565b620012bb600062002a38565b565b63ffffffff891660009081526023602052604090205460ff16156200133f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d454400006044820152606401620007b4565b6026546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af1158015620013d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013fe91906200403b565b6000036200148f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d415443480000000000000000000000000000000000006064820152608401620007b4565b60225463ffffffff8581169116146200152b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d415443480000000000000000000000000000006064820152608401620007b4565b60225463ffffffff166200165a578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620015ec9062000e59565b62001654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007b4565b62001775565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200170d9062000fc9565b62001775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007b4565b63ffffffff8916600090815260236020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff8516620018e6576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001808919062004116565b60006040518083038185875af1925050503d806000811462001847576040519150601f19603f3d011682016040523d82523d6000602084013e6200184c565b606091505b5050905080620018df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f45440000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b5062001cf1565b60225463ffffffff9081169087160362001923576200191d73ffffffffffffffffffffffffffffffffffffffff8616848462002aaf565b62001cf1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152602490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001c505760275460009062001a0e9073ffffffffffffffffffffffffffffffffffffffff168462002b85565b905060008060008680602001905181019062001a2b919062004180565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001a7495949392919062004201565b600060405180830381600087803b15801562001a8f57600080fd5b505af115801562001aa4573d6000803e3d6000fd5b50505050836024600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250602560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001c3e9392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062001cee565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001cc6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001cec919062004270565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff161580801562001d895750600054600160ff909116105b8062001da55750303b15801562001da5575060005460ff166001145b62001e33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007b4565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801562001e9257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b602280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055602680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841617905560405162001f1090620039c3565b604051809103906000f08015801562001f2d573d6000803e3d6000fd5b50602780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905562001f7d62002c65565b6703782dace9d90000608c55801562001fed57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120602754909150620020b39073ffffffffffffffffffffffffffffffffffffffff168262002d08565b949350505050565b60225463ffffffff9081169084160362002158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007b4565b6022546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620021a59260019263ffffffff9092169133918991899134918a919062004290565b60405180910390a16022548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620022889062002d8c565b60265473ffffffffffffffffffffffffffffffffffffffff166333d6247d620022b0620008f7565b6040518263ffffffff1660e01b8152600401620022cf91815260200190565b600060405180830381600087803b158015620022ea57600080fd5b505af1158015620022ff573d6000803e3d6000fd5b50505050505050565b62002312620029b5565b73ffffffffffffffffffffffffffffffffffffffff8116620023b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007b4565b620023c28162002a38565b50565b60225463ffffffff9081169086160362002462576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007b4565b600080606073ffffffffffffffffffffffffffffffffffffffff89166200251e5785341462002514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007b4565b6000915062002832565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200261f576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af1158015620025e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200260c919062004270565b5060208101518151909450925062002830565b84156200263457620026348a88888862002f05565b6200265873ffffffffffffffffffffffffffffffffffffffff8b1633308a6200362f565b899350602260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620026bc573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262002704919081019062004309565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562002750573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262002798919081019062004309565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620027e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200280a919062004342565b6040516020016200281e9392919062004362565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200287498979695949392919062004290565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a905260718082019390935281518082039093018352609101905280519101206200292f9062002d8c565b60265473ffffffffffffffffffffffffffffffffffffffff166333d6247d62002957620008f7565b6040518263ffffffff1660e01b81526004016200297691815260200190565b600060405180830381600087803b1580156200299157600080fd5b505af1158015620029a6573d6000803e3d6000fd5b50505050505050505050505050565b605a5473ffffffffffffffffffffffffffffffffffffffff163314620012bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007b4565b605a805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262001fed9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262003695565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff8116620008a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401620007b4565b600054610100900460ff1662002cfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b620012bb620037a8565b600062002d858383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b80600162002d9d60206002620044d8565b62002da99190620044e6565b6021541062002e3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007b4565b60016021600082825462002e50919062004500565b909155505060215460005b602081101562002efa578160011660010362002e9057826001826020811062002e885762002e8862003f66565b015550505050565b6001816020811062002ea65762002ea662003f66565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002ee3919062003fc4565b91508062002ef18162004000565b91505062002e5b565b5062001fed6200451b565b600062002f4883838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200384c92505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620032cc57600080808080808062002fab896004818d6200454a565b81019062002fba919062004576565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462003085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007b4565b73ffffffffffffffffffffffffffffffffffffffff861630146200312c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007b4565b8a8514620031bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007b4565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162003278919062004116565b6000604051808303816000865af19150503d8060008114620032b7576040519150601f19603f3d011682016040523d82523d6000602084013e620032bc565b606091505b5050505050505050505062003628565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462003379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007b4565b600080808080808080620033918a6004818e6200454a565b810190620033a09190620045d1565b975097509750975097509750975097503373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146200346d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007b4565b73ffffffffffffffffffffffffffffffffffffffff8716301462003514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6040805173ffffffffffffffffffffffffffffffffffffffff8a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f1691620035d8919062004116565b6000604051808303816000865af19150503d806000811462003617576040519150601f19603f3d011682016040523d82523d6000602084013e6200361c565b606091505b50505050505050505050505b5050505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526200368f9085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002b02565b50505050565b6000620036f9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620038539092919063ffffffff16565b80519091501562001fed57808060200190518101906200371a919062004270565b62001fed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007b4565b600054610100900460ff1662003841576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b620012bb3362002a38565b6020015190565b6060620020b384846000858573ffffffffffffffffffffffffffffffffffffffff85163b620038df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007b4565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516200390a919062004116565b60006040518083038185875af1925050503d806000811462003949576040519150601f19603f3d011682016040523d82523d6000602084013e6200394e565b606091505b5091509150620039608282866200396b565b979650505050505050565b606083156200397c57508162002d85565b8251156200398d5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007b491906200465d565b611829806200467383390190565b73ffffffffffffffffffffffffffffffffffffffff81168114620023c257600080fd5b803562003a0181620039d1565b919050565b803563ffffffff8116811462003a0157600080fd5b60008060008060008060a0878903121562003a3557600080fd5b863562003a4281620039d1565b955062003a526020880162003a06565b9450604087013562003a6481620039d1565b935060608701359250608087013567ffffffffffffffff8082111562003a8957600080fd5b818901915089601f83011262003a9e57600080fd5b81358181111562003aae57600080fd5b8a602082850101111562003ac157600080fd5b6020830194508093505050509295509295509295565b6000806040838503121562003aeb57600080fd5b62003af68362003a06565b9150602083013562003b0881620039d1565b809150509250929050565b60006020828403121562003b2657600080fd5b5035919050565b60006020828403121562003b4057600080fd5b62002d858262003a06565b60006020828403121562003b5e57600080fd5b813562002d8581620039d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171562003be45762003be462003b6b565b604052919050565b600082601f83011262003bfe57600080fd5b8135602067ffffffffffffffff82111562003c1d5762003c1d62003b6b565b8160051b62003c2e82820162003b9a565b928352848101820192828101908785111562003c4957600080fd5b83870192505b84831015620039605782358252918301919083019062003c4f565b6000806000806080858703121562003c8157600080fd5b84359350602085013567ffffffffffffffff8082111562003ca157600080fd5b62003caf8883890162003bec565b945060408701359150808216821462003cc757600080fd5b509396929550929360600135925050565b60ff81168114620023c257600080fd5b600080600080600080600060e0888a03121562003d0457600080fd5b873562003d118162003cd8565b965062003d216020890162003a06565b9550604088013562003d3381620039d1565b945062003d436060890162003a06565b9350608088013562003d5581620039d1565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562003d8f5762003d8f62003b6b565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011262003dcd57600080fd5b813562003de462003dde8262003d72565b62003b9a565b81815284602083860101111562003dfa57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562003e3857600080fd5b8a3567ffffffffffffffff8082111562003e5157600080fd5b62003e5f8e838f0162003bec565b9b5062003e6f60208e0162003a06565b9a5060408d0135995060608d0135985062003e8d60808e0162003a06565b975062003e9d60a08e01620039f4565b965062003ead60c08e0162003a06565b955062003ebd60e08e01620039f4565b94506101008d013593506101208d013591508082111562003edd57600080fd5b5062003eec8d828e0162003dbb565b9150509295989b9194979a5092959850565b60008060006060848603121562003f1457600080fd5b62003f1f8462003a06565b9250602084013562003f3181620039d1565b9150604084013567ffffffffffffffff81111562003f4e57600080fd5b62003f5c8682870162003dbb565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003ffb577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362004034576200403462003f95565b5060010190565b6000602082840312156200404e57600080fd5b5051919050565b60005b838110156200407257818101518382015260200162004058565b838111156200368f5750506000910152565b600081518084526200409e81602086016020860162004055565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff831660208201526060604082015260006200410d606083018462004084565b95945050505050565b600082516200412a81846020870162004055565b9190910192915050565b600082601f8301126200414657600080fd5b81516200415762003dde8262003d72565b8181528460208386010111156200416d57600080fd5b620020b382602083016020870162004055565b6000806000606084860312156200419657600080fd5b835167ffffffffffffffff80821115620041af57600080fd5b620041bd8783880162004134565b94506020860151915080821115620041d457600080fd5b50620041e38682870162004134565b9250506040840151620041f68162003cd8565b809150509250925092565b60a0815260006200421660a083018862004084565b82810360208401526200422a818862004084565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b8015158114620023c257600080fd5b6000602082840312156200428357600080fd5b815162002d858162004261565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620042f08285018762004084565b925080851660e085015250509998505050505050505050565b6000602082840312156200431c57600080fd5b815167ffffffffffffffff8111156200433457600080fd5b620020b38482850162004134565b6000602082840312156200435557600080fd5b815162002d858162003cd8565b60608152600062004377606083018662004084565b82810360208401526200438b818662004084565b91505060ff83166040830152949350505050565b600181815b80851115620043fe57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620043e257620043e262003f95565b80851615620043f057918102915b93841c9390800290620043a4565b509250929050565b6000826200441757506001620008a1565b816200442657506000620008a1565b81600181146200443f57600281146200444a576200446a565b6001915050620008a1565b60ff8411156200445e576200445e62003f95565b50506001821b620008a1565b5060208310610133831016604e8410600b84101617156200448f575081810a620008a1565b6200449b83836200439f565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620044d057620044d062003f95565b029392505050565b600062002d85838362004406565b600082821015620044fb57620044fb62003f95565b500390565b6000821982111562004516576200451662003f95565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600080858511156200455b57600080fd5b838611156200456957600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200459257600080fd5b87356200459f81620039d1565b96506020880135620045b181620039d1565b95506040880135945060608801359350608088013562003d558162003cd8565b600080600080600080600080610100898b031215620045ef57600080fd5b8835620045fc81620039d1565b975060208901356200460e81620039d1565b9650604089013595506060890135945060808901356200462e8162004261565b935060a0890135620046408162003cd8565b979a969950949793969295929450505060c08201359160e0013590565b60208152600062002d8560208301846200408456fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a2646970667358221220d7cde18e6d7b8fe67777fcee4434557617788d681d4f614a88f0dce823ec566f64736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001c35760003560e01c806381b1c17411620000f3578063bab161bf1162000095578063e7375881116200006c578063e73758811462000678578063ed6be5c914620006ac578063f2fde38b14620006c3578063ff634ed714620006e857600080fd5b8063bab161bf14620005fd578063d02103ca1462000632578063d96a15f7146200066157600080fd5b806391e57e2d11620000ca57806391e57e2d1462000596578063a08e8a0814620005ae578063b7e6a7d414620005d857600080fd5b806381b1c17414620004fd5780638624c35c14620005445780638da5cb5b146200056957600080fd5b8063318aee3d11620001695780633e19704311620001405780633e19704314620003a757806346385549146200049b578063715018a614620004c05780637b6323c114620004d857600080fd5b8063318aee3d14620002d05780633ae0504714620003595780633da81682146200037157600080fd5b80632c3f58cd116200019e5780632c3f58cd14620002555780632dfdf0b5146200027a5780632f3a3d5d14620002a157600080fd5b80630871e97114620001c857806322e95f2c14620001e15780632b5e42e71462000230575b600080fd5b620001df620001d936600462003a1b565b620006ff565b005b348015620001ee57600080fd5b50620002066200020036600462003ad7565b620007d5565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200023d57600080fd5b50620001df6200024f36600462003b13565b620008a7565b3480156200026257600080fd5b50620001df6200027436600462003b2d565b620008b6565b3480156200028757600080fd5b506200029260215481565b60405190815260200162000227565b348015620002ae57600080fd5b50602754620002069073ffffffffffffffffffffffffffffffffffffffff1681565b348015620002dd57600080fd5b5062000327620002ef36600462003b4b565b60256020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000227565b3480156200036657600080fd5b5062000292620008f7565b3480156200037e57600080fd5b50620003966200039036600462003c6a565b620009ea565b604051901515815260200162000227565b348015620003b457600080fd5b5062000292620003c636600462003ce8565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004a857600080fd5b50620001df620004ba36600462003e17565b62000aea565b348015620004cd57600080fd5b50620001df620012a5565b348015620004e557600080fd5b50620001df620004f736600462003e17565b620012bd565b3480156200050a57600080fd5b50620002066200051c36600462003b13565b60246020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200055157600080fd5b50620001df6200056336600462003ad7565b62001d68565b3480156200057657600080fd5b50605a5473ffffffffffffffffffffffffffffffffffffffff1662000206565b348015620005a357600080fd5b5062000292608c5481565b348015620005bb57600080fd5b50620005c5600081565b60405160ff909116815260200162000227565b348015620005e557600080fd5b5062000206620005f736600462003ad7565b62001ff2565b3480156200060a57600080fd5b506022546200061c9063ffffffff1681565b60405163ffffffff909116815260200162000227565b3480156200063f57600080fd5b50602654620002069073ffffffffffffffffffffffffffffffffffffffff1681565b620001df6200067236600462003efe565b620020bb565b3480156200068557600080fd5b50620003966200069736600462003b13565b60236020526000908152604090205460ff1681565b348015620006b957600080fd5b506200061c600081565b348015620006d057600080fd5b50620001df620006e236600462003b4b565b62002308565b348015620006f557600080fd5b50620005c5600181565b608c54341115620007bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b620007cd868686868686620023c5565b505050505050565b60006024600084846040516020016200084492919060e09290921b7fffffffff0000000000000000000000000000000000000000000000000000000016825260601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600482015260180190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181528151602092830120835290820192909252016000205473ffffffffffffffffffffffffffffffffffffffff1690505b92915050565b620008b1620029b5565b608c55565b620008c0620029b5565b602280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b602154600090819081805b6020811015620009e157826001166001036200096257600181602081106200092e576200092e62003f66565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200098f565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200099c60028462003fc4565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620009d89062004000565b91505062000902565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000add578160011660010362000a675786818151811062000a255762000a2562003f66565b60200260200101518360405160200162000a49929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000ab9565b8287828151811062000a7d5762000a7d62003f66565b602002602001015160405160200162000aa0929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000ac660028362003fc4565b91508062000ad48162004000565b915050620009fa565b5050909114949350505050565b63ffffffff891660009081526023602052604090205460ff161562000b92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d45440000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6026546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000c2b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c5191906200403b565b60000362000ce2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d4154434800000000000000000000006064820152608401620007b4565b60225463ffffffff85811691161462000d7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000006064820152608401620007b4565b60225463ffffffff1662000efc578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062000e68905b8b8b63ffffffff168a620009ea565b62000ef6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b62001066565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062000fd8905b8b8b63ffffffff168b620009ea565b62001066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b63ffffffff891660009081526023602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff8516908490620010d49089908b908790602401620040d0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001157919062004116565b60006040518083038185875af1925050503d806000811462001196576040519150601f19603f3d011682016040523d82523d6000602084013e6200119b565b606091505b50509050806200122d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b620012af620029b5565b620012bb600062002a38565b565b63ffffffff891660009081526023602052604090205460ff16156200133f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d454400006044820152606401620007b4565b6026546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af1158015620013d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013fe91906200403b565b6000036200148f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d415443480000000000000000000000000000000000006064820152608401620007b4565b60225463ffffffff8581169116146200152b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d415443480000000000000000000000000000006064820152608401620007b4565b60225463ffffffff166200165a578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620015ec9062000e59565b62001654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007b4565b62001775565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200170d9062000fc9565b62001775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c49440000000000006044820152606401620007b4565b63ffffffff8916600090815260236020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff8516620018e6576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001808919062004116565b60006040518083038185875af1925050503d806000811462001847576040519150601f19603f3d011682016040523d82523d6000602084013e6200184c565b606091505b5050905080620018df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f45440000000000000000000000000000000000000000000000000000000000006064820152608401620007b4565b5062001cf1565b60225463ffffffff9081169087160362001923576200191d73ffffffffffffffffffffffffffffffffffffffff8616848462002aaf565b62001cf1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152602490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001c505760275460009062001a0e9073ffffffffffffffffffffffffffffffffffffffff168462002b85565b905060008060008680602001905181019062001a2b919062004180565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001a7495949392919062004201565b600060405180830381600087803b15801562001a8f57600080fd5b505af115801562001aa4573d6000803e3d6000fd5b50505050836024600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250602560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001c3e9392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062001cee565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001cc6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001cec919062004270565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff161580801562001d895750600054600160ff909116105b8062001da55750303b15801562001da5575060005460ff166001145b62001e33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007b4565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801562001e9257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b602280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055602680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841617905560405162001f1090620039c3565b604051809103906000f08015801562001f2d573d6000803e3d6000fd5b50602780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905562001f7d62002c65565b6703782dace9d90000608c55801562001fed57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120602754909150620020b39073ffffffffffffffffffffffffffffffffffffffff168262002d08565b949350505050565b60225463ffffffff9081169084160362002158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007b4565b6022546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620021a59260019263ffffffff9092169133918991899134918a919062004290565b60405180910390a16022548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620022889062002d8c565b60265473ffffffffffffffffffffffffffffffffffffffff166333d6247d620022b0620008f7565b6040518263ffffffff1660e01b8152600401620022cf91815260200190565b600060405180830381600087803b158015620022ea57600080fd5b505af1158015620022ff573d6000803e3d6000fd5b50505050505050565b62002312620029b5565b73ffffffffffffffffffffffffffffffffffffffff8116620023b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007b4565b620023c28162002a38565b50565b60225463ffffffff9081169086160362002462576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007b4565b600080606073ffffffffffffffffffffffffffffffffffffffff89166200251e5785341462002514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007b4565b6000915062002832565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200261f576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af1158015620025e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200260c919062004270565b5060208101518151909450925062002830565b84156200263457620026348a88888862002f05565b6200265873ffffffffffffffffffffffffffffffffffffffff8b1633308a6200362f565b899350602260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620026bc573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262002704919081019062004309565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562002750573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262002798919081019062004309565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620027e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200280a919062004342565b6040516020016200281e9392919062004362565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200287498979695949392919062004290565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a905260718082019390935281518082039093018352609101905280519101206200292f9062002d8c565b60265473ffffffffffffffffffffffffffffffffffffffff166333d6247d62002957620008f7565b6040518263ffffffff1660e01b81526004016200297691815260200190565b600060405180830381600087803b1580156200299157600080fd5b505af1158015620029a6573d6000803e3d6000fd5b50505050505050505050505050565b605a5473ffffffffffffffffffffffffffffffffffffffff163314620012bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007b4565b605a805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262001fed9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262003695565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff8116620008a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401620007b4565b600054610100900460ff1662002cfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b620012bb620037a8565b600062002d858383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b80600162002d9d60206002620044d8565b62002da99190620044e6565b6021541062002e3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007b4565b60016021600082825462002e50919062004500565b909155505060215460005b602081101562002efa578160011660010362002e9057826001826020811062002e885762002e8862003f66565b015550505050565b6001816020811062002ea65762002ea662003f66565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002ee3919062003fc4565b91508062002ef18162004000565b91505062002e5b565b5062001fed6200451b565b600062002f4883838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200384c92505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620032cc57600080808080808062002fab896004818d6200454a565b81019062002fba919062004576565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462003085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007b4565b73ffffffffffffffffffffffffffffffffffffffff861630146200312c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007b4565b8a8514620031bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007b4565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162003278919062004116565b6000604051808303816000865af19150503d8060008114620032b7576040519150601f19603f3d011682016040523d82523d6000602084013e620032bc565b606091505b5050505050505050505062003628565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462003379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007b4565b600080808080808080620033918a6004818e6200454a565b810190620033a09190620045d1565b975097509750975097509750975097503373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146200346d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007b4565b73ffffffffffffffffffffffffffffffffffffffff8716301462003514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007b4565b6040805173ffffffffffffffffffffffffffffffffffffffff8a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f1691620035d8919062004116565b6000604051808303816000865af19150503d806000811462003617576040519150601f19603f3d011682016040523d82523d6000602084013e6200361c565b606091505b50505050505050505050505b5050505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526200368f9085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002b02565b50505050565b6000620036f9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620038539092919063ffffffff16565b80519091501562001fed57808060200190518101906200371a919062004270565b62001fed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007b4565b600054610100900460ff1662003841576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007b4565b620012bb3362002a38565b6020015190565b6060620020b384846000858573ffffffffffffffffffffffffffffffffffffffff85163b620038df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007b4565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516200390a919062004116565b60006040518083038185875af1925050503d806000811462003949576040519150601f19603f3d011682016040523d82523d6000602084013e6200394e565b606091505b5091509150620039608282866200396b565b979650505050505050565b606083156200397c57508162002d85565b8251156200398d5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007b491906200465d565b611829806200467383390190565b73ffffffffffffffffffffffffffffffffffffffff81168114620023c257600080fd5b803562003a0181620039d1565b919050565b803563ffffffff8116811462003a0157600080fd5b60008060008060008060a0878903121562003a3557600080fd5b863562003a4281620039d1565b955062003a526020880162003a06565b9450604087013562003a6481620039d1565b935060608701359250608087013567ffffffffffffffff8082111562003a8957600080fd5b818901915089601f83011262003a9e57600080fd5b81358181111562003aae57600080fd5b8a602082850101111562003ac157600080fd5b6020830194508093505050509295509295509295565b6000806040838503121562003aeb57600080fd5b62003af68362003a06565b9150602083013562003b0881620039d1565b809150509250929050565b60006020828403121562003b2657600080fd5b5035919050565b60006020828403121562003b4057600080fd5b62002d858262003a06565b60006020828403121562003b5e57600080fd5b813562002d8581620039d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171562003be45762003be462003b6b565b604052919050565b600082601f83011262003bfe57600080fd5b8135602067ffffffffffffffff82111562003c1d5762003c1d62003b6b565b8160051b62003c2e82820162003b9a565b928352848101820192828101908785111562003c4957600080fd5b83870192505b84831015620039605782358252918301919083019062003c4f565b6000806000806080858703121562003c8157600080fd5b84359350602085013567ffffffffffffffff8082111562003ca157600080fd5b62003caf8883890162003bec565b945060408701359150808216821462003cc757600080fd5b509396929550929360600135925050565b60ff81168114620023c257600080fd5b600080600080600080600060e0888a03121562003d0457600080fd5b873562003d118162003cd8565b965062003d216020890162003a06565b9550604088013562003d3381620039d1565b945062003d436060890162003a06565b9350608088013562003d5581620039d1565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562003d8f5762003d8f62003b6b565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011262003dcd57600080fd5b813562003de462003dde8262003d72565b62003b9a565b81815284602083860101111562003dfa57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562003e3857600080fd5b8a3567ffffffffffffffff8082111562003e5157600080fd5b62003e5f8e838f0162003bec565b9b5062003e6f60208e0162003a06565b9a5060408d0135995060608d0135985062003e8d60808e0162003a06565b975062003e9d60a08e01620039f4565b965062003ead60c08e0162003a06565b955062003ebd60e08e01620039f4565b94506101008d013593506101208d013591508082111562003edd57600080fd5b5062003eec8d828e0162003dbb565b9150509295989b9194979a5092959850565b60008060006060848603121562003f1457600080fd5b62003f1f8462003a06565b9250602084013562003f3181620039d1565b9150604084013567ffffffffffffffff81111562003f4e57600080fd5b62003f5c8682870162003dbb565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003ffb577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362004034576200403462003f95565b5060010190565b6000602082840312156200404e57600080fd5b5051919050565b60005b838110156200407257818101518382015260200162004058565b838111156200368f5750506000910152565b600081518084526200409e81602086016020860162004055565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff831660208201526060604082015260006200410d606083018462004084565b95945050505050565b600082516200412a81846020870162004055565b9190910192915050565b600082601f8301126200414657600080fd5b81516200415762003dde8262003d72565b8181528460208386010111156200416d57600080fd5b620020b382602083016020870162004055565b6000806000606084860312156200419657600080fd5b835167ffffffffffffffff80821115620041af57600080fd5b620041bd8783880162004134565b94506020860151915080821115620041d457600080fd5b50620041e38682870162004134565b9250506040840151620041f68162003cd8565b809150509250925092565b60a0815260006200421660a083018862004084565b82810360208401526200422a818862004084565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b8015158114620023c257600080fd5b6000602082840312156200428357600080fd5b815162002d858162004261565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620042f08285018762004084565b925080851660e085015250509998505050505050505050565b6000602082840312156200431c57600080fd5b815167ffffffffffffffff8111156200433457600080fd5b620020b38482850162004134565b6000602082840312156200435557600080fd5b815162002d858162003cd8565b60608152600062004377606083018662004084565b82810360208401526200438b818662004084565b91505060ff83166040830152949350505050565b600181815b80851115620043fe57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620043e257620043e262003f95565b80851615620043f057918102915b93841c9390800290620043a4565b509250929050565b6000826200441757506001620008a1565b816200442657506000620008a1565b81600181146200443f57600281146200444a576200446a565b6001915050620008a1565b60ff8411156200445e576200445e62003f95565b50506001821b620008a1565b5060208310610133831016604e8410600b84101617156200448f575081810a620008a1565b6200449b83836200439f565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620044d057620044d062003f95565b029392505050565b600062002d85838362004406565b600082821015620044fb57620044fb62003f95565b500390565b6000821982111562004516576200451662003f95565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600080858511156200455b57600080fd5b838611156200456957600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200459257600080fd5b87356200459f81620039d1565b96506020880135620045b181620039d1565b95506040880135945060608801359350608088013562003d558162003cd8565b600080600080600080600080610100898b031215620045ef57600080fd5b8835620045fc81620039d1565b975060208901356200460e81620039d1565b9650604089013595506060890135945060808901356200462e8162004261565b935060a0890135620046408162003cd8565b979a969950949793969295929450505060c08201359160e0013590565b60208152600062002d8560208301846200408456fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a2646970667358221220d7cde18e6d7b8fe67777fcee4434557617788d681d4f614a88f0dce823ec566f64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506161b3806100206000396000f3fe608060405260043610620001f35760003560e01c80637b6323c1116200010b578063b7e6a7d411620000a1578063e7375881116200006c578063e73758811462000721578063ed6be5c91462000755578063f2fde38b146200076c578063ff634ed7146200079157600080fd5b8063b7e6a7d41462000681578063bab161bf14620006a6578063d02103ca14620006db578063d96a15f7146200070a57600080fd5b80638da5cb5b11620000e25780638da5cb5b14620005e35780638f611519146200061057806391e57e2d146200063f578063a08e8a08146200065757600080fd5b80637b6323c1146200055f57806381b1c17414620005845780638456cb5914620005cb57600080fd5b80633ae05047116200018d5780634638554911620001585780634638554914620004e35780635c975abb1462000508578063647c576c1462000522578063715018a6146200054757600080fd5b80633ae0504714620003895780633da8168214620003a15780633e19704314620003d75780633f4ba83a14620004cb57600080fd5b80632c3f58cd11620001ce5780632c3f58cd14620002855780632dfdf0b514620002aa5780632f3a3d5d14620002d1578063318aee3d146200030057600080fd5b80630871e97114620001f857806322e95f2c14620002115780632b5e42e71462000260575b600080fd5b6200020f6200020936600462003cb8565b620007a8565b005b3480156200021e57600080fd5b50620002366200023036600462003d74565b6200087e565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200026d57600080fd5b506200020f6200027f36600462003db0565b62000921565b3480156200029257600080fd5b506200020f620002a436600462003dca565b62000930565b348015620002b757600080fd5b50620002c260215481565b60405190815260200162000257565b348015620002de57600080fd5b50608b54620002369073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200030d57600080fd5b50620003576200031f36600462003de8565b60896020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000257565b3480156200039657600080fd5b50620002c262000971565b348015620003ae57600080fd5b50620003c6620003c036600462003f07565b62000a64565b604051901515815260200162000257565b348015620003e457600080fd5b50620002c2620003f636600462003f85565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004d857600080fd5b506200020f62000b64565b348015620004f057600080fd5b506200020f62000502366004620040b4565b62000c3f565b3480156200051557600080fd5b5060545460ff16620003c6565b3480156200052f57600080fd5b506200020f620005413660046200419b565b620012a3565b3480156200055457600080fd5b506200020f62001547565b3480156200056c57600080fd5b506200020f6200057e366004620040b4565b6200155d565b3480156200059157600080fd5b5062000236620005a336600462003db0565b60886020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620005d857600080fd5b506200020f62001f26565b348015620005f057600080fd5b50608d5473ffffffffffffffffffffffffffffffffffffffff1662000236565b3480156200061d57600080fd5b50608c54620002369073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200064c57600080fd5b50620002c260bf5481565b3480156200066457600080fd5b506200066e600081565b60405160ff909116815260200162000257565b3480156200068e57600080fd5b5062000236620006a036600462003d74565b62001fff565b348015620006b357600080fd5b50608654620006c59063ffffffff1681565b60405163ffffffff909116815260200162000257565b348015620006e857600080fd5b50608a54620002369073ffffffffffffffffffffffffffffffffffffffff1681565b6200020f6200071b366004620041eb565b620020c8565b3480156200072e57600080fd5b50620003c66200074036600462003db0565b60876020526000908152604090205460ff1681565b3480156200076257600080fd5b50620006c5600081565b3480156200077957600080fd5b506200020f6200078b36600462003de8565b6200231f565b3480156200079e57600080fd5b506200066e600181565b60bf5434111562000866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b62000876868686868686620023dc565b505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526088909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6200092b620029d6565b60bf55565b6200093a620029d6565b608680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b602154600090819081805b602081101562000a5b5782600116600103620009dc5760018160208110620009a857620009a862004253565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000a09565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a16600284620042b1565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000a5290620042ed565b9150506200097c565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000b57578160011660010362000ae15786818151811062000a9f5762000a9f62004253565b60200260200101518360405160200162000ac3929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000b33565b8287828151811062000af75762000af762004253565b602002602001015160405160200162000b1a929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000b40600283620042b1565b91508062000b4e81620042ed565b91505062000a74565b5050909114949350505050565b608c5473ffffffffffffffffffffffffffffffffffffffff16331462000c33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200085d565b62000c3d62002a59565b565b62000c4962002ad8565b63ffffffff891660009081526087602052604090205460ff161562000cf1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d454400000000000000000000000000000000000000000000000000000060648201526084016200085d565b608a546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000d8a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000db0919062004328565b60000362000e41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d41544348000000000000000000000060648201526084016200085d565b60865463ffffffff85811691161462000edd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d41544348000000000000000060648201526084016200085d565b60865460009063ffffffff1662000ef657508662000ef9565b50875b8151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08c811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608d811b82166025860152918c901b909216603984015289901b16603d82015260518101879052607180820193909352815180820390930183526091019052805191012062000fd5905b8c8c63ffffffff168462000a64565b62001063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f440000000000000000000000000000000000000000000000000000000000000060648201526084016200085d565b63ffffffff8a1660009081526087602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff8616908590620010d1908a908c908890602401620043bd565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001154919062004403565b60006040518083038185875af1925050503d806000811462001193576040519150601f19603f3d011682016040523d82523d6000602084013e62001198565b606091505b50509050806200122a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c45440000000000000000000000000000000000000000000000000000000060648201526084016200085d565b6040805163ffffffff8d811682528a16602082015273ffffffffffffffffffffffffffffffffffffffff89811682840152871660608201526080810186905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a1505050505050505050505050565b600054610100900460ff1615808015620012c45750600054600160ff909116105b80620012e05750303b158015620012e0575060005460ff166001145b6200136e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200085d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620013cd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b608680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8616179055608a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790556040516200144b9062003c60565b604051809103906000f08015801562001468573d6000803e3d6000fd5b50608b80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff93841617909155608c8054909116918416919091179055620014c762002b47565b620014d162002c0a565b6703782dace9d9000060bf5580156200154157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62001551620029d6565b62000c3d600062002cad565b6200156762002ad8565b63ffffffff891660009081526087602052604090205460ff16156200160f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4272696467653a3a636c61696d41737365743a20414c52454144595f434c414960448201527f4d4544000000000000000000000000000000000000000000000000000000000060648201526084016200085d565b608a546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af1158015620016a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620016ce919062004328565b6000036200175f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f4272696467653a3a636c61696d41737365743a20474c4f42414c5f455849545f60448201527f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000000060648201526084016200085d565b60865463ffffffff858116911614620017fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4272696467653a3a636c61696d41737365743a2044455354494e4154494f4e5f60448201527f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000000060648201526084016200085d565b60865460009063ffffffff166200181457508662001817565b50875b8151602080840191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08c811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608d811b82166025860152918c901b909216603984015289901b16603d820152605181018790526071808201939093528151808203909301835260910190528051910120620018ca9062000fc6565b62001932576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a636c61696d41737365743a20534d545f494e56414c49440060448201526064016200085d565b63ffffffff8a16600090815260876020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff861662001aa3576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff8616908590604051620019c5919062004403565b60006040518083038185875af1925050503d806000811462001a04576040519150601f19603f3d011682016040523d82523d6000602084013e62001a09565b606091505b505090508062001a9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c45440000000000000000000000000000000000000000000000000060648201526084016200085d565b5062001eae565b60865463ffffffff9081169088160362001ae05762001ada73ffffffffffffffffffffffffffffffffffffffff8716858562002d24565b62001eae565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606088901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152608890935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001e0d57608b5460009062001bcb9073ffffffffffffffffffffffffffffffffffffffff168462002dff565b905060008060008780602001905181019062001be891906200446d565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848e8e6040518663ffffffff1660e01b815260040162001c31959493929190620044e3565b600060405180830381600087803b15801562001c4c57600080fd5b505af115801562001c61573d6000803e3d6000fd5b50505050836088600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808e63ffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815250608960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598d8d8660405162001dfb9392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062001eab565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018790528216906340c10f19906044016020604051808303816000875af115801562001e83573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ea9919062004552565b505b50505b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b608c5473ffffffffffffffffffffffffffffffffffffffff16331462001ff5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200085d565b62000c3d62002edf565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120608b54909150620020c09073ffffffffffffffffffffffffffffffffffffffff168262002f3d565b949350505050565b620020d262002ad8565b60865463ffffffff908116908416036200216f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200085d565b6086546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620021bc9260019263ffffffff9092169133918991899134918a919062004572565b60405180910390a16086548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200229f9062002fc1565b608a5473ffffffffffffffffffffffffffffffffffffffff166333d6247d620022c762000971565b6040518263ffffffff1660e01b8152600401620022e691815260200190565b600060405180830381600087803b1580156200230157600080fd5b505af115801562002316573d6000803e3d6000fd5b50505050505050565b62002329620029d6565b73ffffffffffffffffffffffffffffffffffffffff8116620023ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016200085d565b620023d98162002cad565b50565b620023e662002ad8565b60865463ffffffff9081169086160362002483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200085d565b600080606073ffffffffffffffffffffffffffffffffffffffff89166200253f5785341462002535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200085d565b6000915062002853565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526089602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562002640576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562002607573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200262d919062004552565b5060208101518151909450925062002851565b84156200265557620026558a8888886200313a565b6200267973ffffffffffffffffffffffffffffffffffffffff8b1633308a62003864565b899350608660009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620026dd573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620027259190810190620045eb565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562002771573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620027b99190810190620045eb565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002805573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200282b919062004624565b6040516020016200283f9392919062004644565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200289598979695949392919062004572565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620029509062002fc1565b608a5473ffffffffffffffffffffffffffffffffffffffff166333d6247d6200297862000971565b6040518263ffffffff1660e01b81526004016200299791815260200190565b600060405180830381600087803b158015620029b257600080fd5b505af1158015620029c7573d6000803e3d6000fd5b50505050505050505050505050565b608d5473ffffffffffffffffffffffffffffffffffffffff16331462000c3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200085d565b62002a63620038c4565b605480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60545460ff161562000c3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016200085d565b600054610100900460ff1662002be0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200085d565b605480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b600054610100900460ff1662002ca3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200085d565b62000c3d62003932565b608d805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262002dfa9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152620039d6565b505050565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff81166200091b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c656400000000000000000060448201526064016200085d565b62002ee962002ad8565b605480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25862002aae3390565b600062002fba8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b80600162002fd260206002620047ba565b62002fde9190620047c8565b6021541062003070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200085d565b600160216000828254620030859190620047e2565b909155505060215460005b60208110156200312f5781600116600103620030c5578260018260208110620030bd57620030bd62004253565b015550505050565b60018160208110620030db57620030db62004253565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620031189190620042b1565b9150806200312681620042ed565b91505062003090565b5062002dfa620047fd565b60006200317d83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062003ae992505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162003501576000808080808080620031e0896004818d6200482c565b810190620031ef919062004858565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614620032ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200085d565b73ffffffffffffffffffffffffffffffffffffffff8616301462003361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200085d565b8a8514620033f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200085d565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e1691620034ad919062004403565b6000604051808303816000865af19150503d8060008114620034ec576040519150601f19603f3d011682016040523d82523d6000602084013e620034f1565b606091505b505050505050505050506200385d565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c0000000000000000000000000000000000000000000000000000000014620035ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200085d565b600080808080808080620035c68a6004818e6200482c565b810190620035d59190620048b3565b975097509750975097509750975097503373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614620036a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200085d565b73ffffffffffffffffffffffffffffffffffffffff8716301462003749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200085d565b6040805173ffffffffffffffffffffffffffffffffffffffff8a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f16916200380d919062004403565b6000604051808303816000865af19150503d80600081146200384c576040519150601f19603f3d011682016040523d82523d6000602084013e62003851565b606091505b50505050505050505050505b5050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052620015419085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002d77565b60545460ff1662000c3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016200085d565b600054610100900460ff16620039cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200085d565b62000c3d3362002cad565b600062003a3a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1662003af09092919063ffffffff16565b80519091501562002dfa578080602001905181019062003a5b919062004552565b62002dfa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200085d565b6020015190565b6060620020c084846000858573ffffffffffffffffffffffffffffffffffffffff85163b62003b7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200085d565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405162003ba7919062004403565b60006040518083038185875af1925050503d806000811462003be6576040519150601f19603f3d011682016040523d82523d6000602084013e62003beb565b606091505b509150915062003bfd82828662003c08565b979650505050505050565b6060831562003c1957508162002fba565b82511562003c2a5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200085d91906200493f565b611829806200495583390190565b73ffffffffffffffffffffffffffffffffffffffff81168114620023d957600080fd5b803562003c9e8162003c6e565b919050565b803563ffffffff8116811462003c9e57600080fd5b60008060008060008060a0878903121562003cd257600080fd5b863562003cdf8162003c6e565b955062003cef6020880162003ca3565b9450604087013562003d018162003c6e565b935060608701359250608087013567ffffffffffffffff8082111562003d2657600080fd5b818901915089601f83011262003d3b57600080fd5b81358181111562003d4b57600080fd5b8a602082850101111562003d5e57600080fd5b6020830194508093505050509295509295509295565b6000806040838503121562003d8857600080fd5b62003d938362003ca3565b9150602083013562003da58162003c6e565b809150509250929050565b60006020828403121562003dc357600080fd5b5035919050565b60006020828403121562003ddd57600080fd5b62002fba8262003ca3565b60006020828403121562003dfb57600080fd5b813562002fba8162003c6e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171562003e815762003e8162003e08565b604052919050565b600082601f83011262003e9b57600080fd5b8135602067ffffffffffffffff82111562003eba5762003eba62003e08565b8160051b62003ecb82820162003e37565b928352848101820192828101908785111562003ee657600080fd5b83870192505b8483101562003bfd5782358252918301919083019062003eec565b6000806000806080858703121562003f1e57600080fd5b84359350602085013567ffffffffffffffff8082111562003f3e57600080fd5b62003f4c8883890162003e89565b945060408701359150808216821462003f6457600080fd5b509396929550929360600135925050565b60ff81168114620023d957600080fd5b600080600080600080600060e0888a03121562003fa157600080fd5b873562003fae8162003f75565b965062003fbe6020890162003ca3565b9550604088013562003fd08162003c6e565b945062003fe06060890162003ca3565b9350608088013562003ff28162003c6e565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200402c576200402c62003e08565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126200406a57600080fd5b8135620040816200407b826200400f565b62003e37565b8181528460208386010111156200409757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620040d557600080fd5b8a3567ffffffffffffffff80821115620040ee57600080fd5b620040fc8e838f0162003e89565b9b506200410c60208e0162003ca3565b9a5060408d0135995060608d013598506200412a60808e0162003ca3565b97506200413a60a08e0162003c91565b96506200414a60c08e0162003ca3565b95506200415a60e08e0162003c91565b94506101008d013593506101208d01359150808211156200417a57600080fd5b50620041898d828e0162004058565b9150509295989b9194979a5092959850565b600080600060608486031215620041b157600080fd5b620041bc8462003ca3565b92506020840135620041ce8162003c6e565b91506040840135620041e08162003c6e565b809150509250925092565b6000806000606084860312156200420157600080fd5b6200420c8462003ca3565b925060208401356200421e8162003c6e565b9150604084013567ffffffffffffffff8111156200423b57600080fd5b620042498682870162004058565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082620042e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362004321576200432162004282565b5060010190565b6000602082840312156200433b57600080fd5b5051919050565b60005b838110156200435f57818101518382015260200162004345565b83811115620015415750506000910152565b600081518084526200438b81602086016020860162004342565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff83166020820152606060408201526000620043fa606083018462004371565b95945050505050565b600082516200441781846020870162004342565b9190910192915050565b600082601f8301126200443357600080fd5b8151620044446200407b826200400f565b8181528460208386010111156200445a57600080fd5b620020c082602083016020870162004342565b6000806000606084860312156200448357600080fd5b835167ffffffffffffffff808211156200449c57600080fd5b620044aa8783880162004421565b94506020860151915080821115620044c157600080fd5b50620044d08682870162004421565b9250506040840151620041e08162003f75565b60a081526000620044f860a083018862004371565b82810360208401526200450c818862004371565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b8015158114620023d957600080fd5b6000602082840312156200456557600080fd5b815162002fba8162004543565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620045d28285018762004371565b925080851660e085015250509998505050505050505050565b600060208284031215620045fe57600080fd5b815167ffffffffffffffff8111156200461657600080fd5b620020c08482850162004421565b6000602082840312156200463757600080fd5b815162002fba8162003f75565b60608152600062004659606083018662004371565b82810360208401526200466d818662004371565b91505060ff83166040830152949350505050565b600181815b80851115620046e057817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620046c457620046c462004282565b80851615620046d257918102915b93841c939080029062004686565b509250929050565b600082620046f9575060016200091b565b8162004708575060006200091b565b81600181146200472157600281146200472c576200474c565b60019150506200091b565b60ff84111562004740576200474062004282565b50506001821b6200091b565b5060208310610133831016604e8410600b841016171562004771575081810a6200091b565b6200477d838362004681565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620047b257620047b262004282565b029392505050565b600062002fba8383620046e8565b600082821015620047dd57620047dd62004282565b500390565b60008219821115620047f857620047f862004282565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600080858511156200483d57600080fd5b838611156200484b57600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200487457600080fd5b8735620048818162003c6e565b96506020880135620048938162003c6e565b95506040880135945060608801359350608088013562003ff28162003f75565b600080600080600080600080610100898b031215620048d157600080fd5b8835620048de8162003c6e565b97506020890135620048f08162003c6e565b965060408901359550606089013594506080890135620049108162004543565b935060a0890135620049228162003f75565b979a969950949793969295929450505060c08201359160e0013590565b60208152600062002fba60208301846200437156fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a26469706673582212200c7e24244b8a018e593e0d7152ca542b8e67229f6829c3f3c7b6723793fadec664736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001f35760003560e01c80637b6323c1116200010b578063b7e6a7d411620000a1578063e7375881116200006c578063e73758811462000721578063ed6be5c91462000755578063f2fde38b146200076c578063ff634ed7146200079157600080fd5b8063b7e6a7d41462000681578063bab161bf14620006a6578063d02103ca14620006db578063d96a15f7146200070a57600080fd5b80638da5cb5b11620000e25780638da5cb5b14620005e35780638f611519146200061057806391e57e2d146200063f578063a08e8a08146200065757600080fd5b80637b6323c1146200055f57806381b1c17414620005845780638456cb5914620005cb57600080fd5b80633ae05047116200018d5780634638554911620001585780634638554914620004e35780635c975abb1462000508578063647c576c1462000522578063715018a6146200054757600080fd5b80633ae0504714620003895780633da8168214620003a15780633e19704314620003d75780633f4ba83a14620004cb57600080fd5b80632c3f58cd11620001ce5780632c3f58cd14620002855780632dfdf0b514620002aa5780632f3a3d5d14620002d1578063318aee3d146200030057600080fd5b80630871e97114620001f857806322e95f2c14620002115780632b5e42e71462000260575b600080fd5b6200020f6200020936600462003cb8565b620007a8565b005b3480156200021e57600080fd5b50620002366200023036600462003d74565b6200087e565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200026d57600080fd5b506200020f6200027f36600462003db0565b62000921565b3480156200029257600080fd5b506200020f620002a436600462003dca565b62000930565b348015620002b757600080fd5b50620002c260215481565b60405190815260200162000257565b348015620002de57600080fd5b50608b54620002369073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200030d57600080fd5b50620003576200031f36600462003de8565b60896020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000257565b3480156200039657600080fd5b50620002c262000971565b348015620003ae57600080fd5b50620003c6620003c036600462003f07565b62000a64565b604051901515815260200162000257565b348015620003e457600080fd5b50620002c2620003f636600462003f85565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004d857600080fd5b506200020f62000b64565b348015620004f057600080fd5b506200020f62000502366004620040b4565b62000c3f565b3480156200051557600080fd5b5060545460ff16620003c6565b3480156200052f57600080fd5b506200020f620005413660046200419b565b620012a3565b3480156200055457600080fd5b506200020f62001547565b3480156200056c57600080fd5b506200020f6200057e366004620040b4565b6200155d565b3480156200059157600080fd5b5062000236620005a336600462003db0565b60886020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620005d857600080fd5b506200020f62001f26565b348015620005f057600080fd5b50608d5473ffffffffffffffffffffffffffffffffffffffff1662000236565b3480156200061d57600080fd5b50608c54620002369073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200064c57600080fd5b50620002c260bf5481565b3480156200066457600080fd5b506200066e600081565b60405160ff909116815260200162000257565b3480156200068e57600080fd5b5062000236620006a036600462003d74565b62001fff565b348015620006b357600080fd5b50608654620006c59063ffffffff1681565b60405163ffffffff909116815260200162000257565b348015620006e857600080fd5b50608a54620002369073ffffffffffffffffffffffffffffffffffffffff1681565b6200020f6200071b366004620041eb565b620020c8565b3480156200072e57600080fd5b50620003c66200074036600462003db0565b60876020526000908152604090205460ff1681565b3480156200076257600080fd5b50620006c5600081565b3480156200077957600080fd5b506200020f6200078b36600462003de8565b6200231f565b3480156200079e57600080fd5b506200066e600181565b60bf5434111562000866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b62000876868686868686620023dc565b505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526088909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6200092b620029d6565b60bf55565b6200093a620029d6565b608680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b602154600090819081805b602081101562000a5b5782600116600103620009dc5760018160208110620009a857620009a862004253565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000a09565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a16600284620042b1565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000a5290620042ed565b9150506200097c565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000b57578160011660010362000ae15786818151811062000a9f5762000a9f62004253565b60200260200101518360405160200162000ac3929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000b33565b8287828151811062000af75762000af762004253565b602002602001015160405160200162000b1a929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000b40600283620042b1565b91508062000b4e81620042ed565b91505062000a74565b5050909114949350505050565b608c5473ffffffffffffffffffffffffffffffffffffffff16331462000c33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200085d565b62000c3d62002a59565b565b62000c4962002ad8565b63ffffffff891660009081526087602052604090205460ff161562000cf1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d454400000000000000000000000000000000000000000000000000000060648201526084016200085d565b608a546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000d8a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000db0919062004328565b60000362000e41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d41544348000000000000000000000060648201526084016200085d565b60865463ffffffff85811691161462000edd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d41544348000000000000000060648201526084016200085d565b60865460009063ffffffff1662000ef657508662000ef9565b50875b8151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08c811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608d811b82166025860152918c901b909216603984015289901b16603d82015260518101879052607180820193909352815180820390930183526091019052805191012062000fd5905b8c8c63ffffffff168462000a64565b62001063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f440000000000000000000000000000000000000000000000000000000000000060648201526084016200085d565b63ffffffff8a1660009081526087602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff8616908590620010d1908a908c908890602401620043bd565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001154919062004403565b60006040518083038185875af1925050503d806000811462001193576040519150601f19603f3d011682016040523d82523d6000602084013e62001198565b606091505b50509050806200122a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c45440000000000000000000000000000000000000000000000000000000060648201526084016200085d565b6040805163ffffffff8d811682528a16602082015273ffffffffffffffffffffffffffffffffffffffff89811682840152871660608201526080810186905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a1505050505050505050505050565b600054610100900460ff1615808015620012c45750600054600160ff909116105b80620012e05750303b158015620012e0575060005460ff166001145b6200136e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200085d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620013cd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b608680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8616179055608a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790556040516200144b9062003c60565b604051809103906000f08015801562001468573d6000803e3d6000fd5b50608b80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff93841617909155608c8054909116918416919091179055620014c762002b47565b620014d162002c0a565b6703782dace9d9000060bf5580156200154157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62001551620029d6565b62000c3d600062002cad565b6200156762002ad8565b63ffffffff891660009081526087602052604090205460ff16156200160f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4272696467653a3a636c61696d41737365743a20414c52454144595f434c414960448201527f4d4544000000000000000000000000000000000000000000000000000000000060648201526084016200085d565b608a546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af1158015620016a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620016ce919062004328565b6000036200175f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f4272696467653a3a636c61696d41737365743a20474c4f42414c5f455849545f60448201527f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000000060648201526084016200085d565b60865463ffffffff858116911614620017fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4272696467653a3a636c61696d41737365743a2044455354494e4154494f4e5f60448201527f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000000060648201526084016200085d565b60865460009063ffffffff166200181457508662001817565b50875b8151602080840191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08c811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608d811b82166025860152918c901b909216603984015289901b16603d820152605181018790526071808201939093528151808203909301835260910190528051910120620018ca9062000fc6565b62001932576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a636c61696d41737365743a20534d545f494e56414c49440060448201526064016200085d565b63ffffffff8a16600090815260876020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff861662001aa3576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff8616908590604051620019c5919062004403565b60006040518083038185875af1925050503d806000811462001a04576040519150601f19603f3d011682016040523d82523d6000602084013e62001a09565b606091505b505090508062001a9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c45440000000000000000000000000000000000000000000000000060648201526084016200085d565b5062001eae565b60865463ffffffff9081169088160362001ae05762001ada73ffffffffffffffffffffffffffffffffffffffff8716858562002d24565b62001eae565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606088901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152608890935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001e0d57608b5460009062001bcb9073ffffffffffffffffffffffffffffffffffffffff168462002dff565b905060008060008780602001905181019062001be891906200446d565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848e8e6040518663ffffffff1660e01b815260040162001c31959493929190620044e3565b600060405180830381600087803b15801562001c4c57600080fd5b505af115801562001c61573d6000803e3d6000fd5b50505050836088600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808e63ffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815250608960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598d8d8660405162001dfb9392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062001eab565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018790528216906340c10f19906044016020604051808303816000875af115801562001e83573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ea9919062004552565b505b50505b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b608c5473ffffffffffffffffffffffffffffffffffffffff16331462001ff5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200085d565b62000c3d62002edf565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120608b54909150620020c09073ffffffffffffffffffffffffffffffffffffffff168262002f3d565b949350505050565b620020d262002ad8565b60865463ffffffff908116908416036200216f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200085d565b6086546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620021bc9260019263ffffffff9092169133918991899134918a919062004572565b60405180910390a16086548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200229f9062002fc1565b608a5473ffffffffffffffffffffffffffffffffffffffff166333d6247d620022c762000971565b6040518263ffffffff1660e01b8152600401620022e691815260200190565b600060405180830381600087803b1580156200230157600080fd5b505af115801562002316573d6000803e3d6000fd5b50505050505050565b62002329620029d6565b73ffffffffffffffffffffffffffffffffffffffff8116620023ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016200085d565b620023d98162002cad565b50565b620023e662002ad8565b60865463ffffffff9081169086160362002483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200085d565b600080606073ffffffffffffffffffffffffffffffffffffffff89166200253f5785341462002535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200085d565b6000915062002853565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526089602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562002640576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562002607573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200262d919062004552565b5060208101518151909450925062002851565b84156200265557620026558a8888886200313a565b6200267973ffffffffffffffffffffffffffffffffffffffff8b1633308a62003864565b899350608660009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620026dd573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620027259190810190620045eb565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562002771573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620027b99190810190620045eb565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002805573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200282b919062004624565b6040516020016200283f9392919062004644565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200289598979695949392919062004572565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620029509062002fc1565b608a5473ffffffffffffffffffffffffffffffffffffffff166333d6247d6200297862000971565b6040518263ffffffff1660e01b81526004016200299791815260200190565b600060405180830381600087803b158015620029b257600080fd5b505af1158015620029c7573d6000803e3d6000fd5b50505050505050505050505050565b608d5473ffffffffffffffffffffffffffffffffffffffff16331462000c3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200085d565b62002a63620038c4565b605480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60545460ff161562000c3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016200085d565b600054610100900460ff1662002be0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200085d565b605480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b600054610100900460ff1662002ca3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200085d565b62000c3d62003932565b608d805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262002dfa9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152620039d6565b505050565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff81166200091b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c656400000000000000000060448201526064016200085d565b62002ee962002ad8565b605480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25862002aae3390565b600062002fba8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b80600162002fd260206002620047ba565b62002fde9190620047c8565b6021541062003070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200085d565b600160216000828254620030859190620047e2565b909155505060215460005b60208110156200312f5781600116600103620030c5578260018260208110620030bd57620030bd62004253565b015550505050565b60018160208110620030db57620030db62004253565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620031189190620042b1565b9150806200312681620042ed565b91505062003090565b5062002dfa620047fd565b60006200317d83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062003ae992505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162003501576000808080808080620031e0896004818d6200482c565b810190620031ef919062004858565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614620032ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200085d565b73ffffffffffffffffffffffffffffffffffffffff8616301462003361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200085d565b8a8514620033f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200085d565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e1691620034ad919062004403565b6000604051808303816000865af19150503d8060008114620034ec576040519150601f19603f3d011682016040523d82523d6000602084013e620034f1565b606091505b505050505050505050506200385d565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c0000000000000000000000000000000000000000000000000000000014620035ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200085d565b600080808080808080620035c68a6004818e6200482c565b810190620035d59190620048b3565b975097509750975097509750975097503373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614620036a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200085d565b73ffffffffffffffffffffffffffffffffffffffff8716301462003749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200085d565b6040805173ffffffffffffffffffffffffffffffffffffffff8a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f16916200380d919062004403565b6000604051808303816000865af19150503d80600081146200384c576040519150601f19603f3d011682016040523d82523d6000602084013e62003851565b606091505b50505050505050505050505b5050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052620015419085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002d77565b60545460ff1662000c3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016200085d565b600054610100900460ff16620039cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200085d565b62000c3d3362002cad565b600062003a3a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1662003af09092919063ffffffff16565b80519091501562002dfa578080602001905181019062003a5b919062004552565b62002dfa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200085d565b6020015190565b6060620020c084846000858573ffffffffffffffffffffffffffffffffffffffff85163b62003b7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200085d565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405162003ba7919062004403565b60006040518083038185875af1925050503d806000811462003be6576040519150601f19603f3d011682016040523d82523d6000602084013e62003beb565b606091505b509150915062003bfd82828662003c08565b979650505050505050565b6060831562003c1957508162002fba565b82511562003c2a5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200085d91906200493f565b611829806200495583390190565b73ffffffffffffffffffffffffffffffffffffffff81168114620023d957600080fd5b803562003c9e8162003c6e565b919050565b803563ffffffff8116811462003c9e57600080fd5b60008060008060008060a0878903121562003cd257600080fd5b863562003cdf8162003c6e565b955062003cef6020880162003ca3565b9450604087013562003d018162003c6e565b935060608701359250608087013567ffffffffffffffff8082111562003d2657600080fd5b818901915089601f83011262003d3b57600080fd5b81358181111562003d4b57600080fd5b8a602082850101111562003d5e57600080fd5b6020830194508093505050509295509295509295565b6000806040838503121562003d8857600080fd5b62003d938362003ca3565b9150602083013562003da58162003c6e565b809150509250929050565b60006020828403121562003dc357600080fd5b5035919050565b60006020828403121562003ddd57600080fd5b62002fba8262003ca3565b60006020828403121562003dfb57600080fd5b813562002fba8162003c6e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171562003e815762003e8162003e08565b604052919050565b600082601f83011262003e9b57600080fd5b8135602067ffffffffffffffff82111562003eba5762003eba62003e08565b8160051b62003ecb82820162003e37565b928352848101820192828101908785111562003ee657600080fd5b83870192505b8483101562003bfd5782358252918301919083019062003eec565b6000806000806080858703121562003f1e57600080fd5b84359350602085013567ffffffffffffffff8082111562003f3e57600080fd5b62003f4c8883890162003e89565b945060408701359150808216821462003f6457600080fd5b509396929550929360600135925050565b60ff81168114620023d957600080fd5b600080600080600080600060e0888a03121562003fa157600080fd5b873562003fae8162003f75565b965062003fbe6020890162003ca3565b9550604088013562003fd08162003c6e565b945062003fe06060890162003ca3565b9350608088013562003ff28162003c6e565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200402c576200402c62003e08565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126200406a57600080fd5b8135620040816200407b826200400f565b62003e37565b8181528460208386010111156200409757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620040d557600080fd5b8a3567ffffffffffffffff80821115620040ee57600080fd5b620040fc8e838f0162003e89565b9b506200410c60208e0162003ca3565b9a5060408d0135995060608d013598506200412a60808e0162003ca3565b97506200413a60a08e0162003c91565b96506200414a60c08e0162003ca3565b95506200415a60e08e0162003c91565b94506101008d013593506101208d01359150808211156200417a57600080fd5b50620041898d828e0162004058565b9150509295989b9194979a5092959850565b600080600060608486031215620041b157600080fd5b620041bc8462003ca3565b92506020840135620041ce8162003c6e565b91506040840135620041e08162003c6e565b809150509250925092565b6000806000606084860312156200420157600080fd5b6200420c8462003ca3565b925060208401356200421e8162003c6e565b9150604084013567ffffffffffffffff8111156200423b57600080fd5b620042498682870162004058565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082620042e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362004321576200432162004282565b5060010190565b6000602082840312156200433b57600080fd5b5051919050565b60005b838110156200435f57818101518382015260200162004345565b83811115620015415750506000910152565b600081518084526200438b81602086016020860162004342565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff83166020820152606060408201526000620043fa606083018462004371565b95945050505050565b600082516200441781846020870162004342565b9190910192915050565b600082601f8301126200443357600080fd5b8151620044446200407b826200400f565b8181528460208386010111156200445a57600080fd5b620020c082602083016020870162004342565b6000806000606084860312156200448357600080fd5b835167ffffffffffffffff808211156200449c57600080fd5b620044aa8783880162004421565b94506020860151915080821115620044c157600080fd5b50620044d08682870162004421565b9250506040840151620041e08162003f75565b60a081526000620044f860a083018862004371565b82810360208401526200450c818862004371565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b8015158114620023d957600080fd5b6000602082840312156200456557600080fd5b815162002fba8162004543565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620045d28285018762004371565b925080851660e085015250509998505050505050505050565b600060208284031215620045fe57600080fd5b815167ffffffffffffffff8111156200461657600080fd5b620020c08482850162004421565b6000602082840312156200463757600080fd5b815162002fba8162003f75565b60608152600062004659606083018662004371565b82810360208401526200466d818662004371565b91505060ff83166040830152949350505050565b600181815b80851115620046e057817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620046c457620046c462004282565b80851615620046d257918102915b93841c939080029062004686565b509250929050565b600082620046f9575060016200091b565b8162004708575060006200091b565b81600181146200472157600281146200472c576200474c565b60019150506200091b565b60ff84111562004740576200474062004282565b50506001821b6200091b565b5060208310610133831016604e8410600b841016171562004771575081810a6200091b565b6200477d838362004681565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620047b257620047b262004282565b029392505050565b600062002fba8383620046e8565b600082821015620047dd57620047dd62004282565b500390565b60008219821115620047f857620047f862004282565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600080858511156200483d57600080fd5b838611156200484b57600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200487457600080fd5b8735620048818162003c6e565b96506020880135620048938162003c6e565b95506040880135945060608801359350608088013562003ff28162003f75565b600080600080600080600080610100898b031215620048d157600080fd5b8835620048de8162003c6e565b97506020890135620048f08162003c6e565b965060408901359550606089013594506080890135620049108162004543565b935060a0890135620049228162003f75565b979a969950949793969295929450505060c08201359160e0013590565b60208152600062002fba60208301846200437156fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a26469706673582212200c7e24244b8a018e593e0d7152ca542b8e67229f6829c3f3c7b6723793fadec664736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/GlobalExitRootManager.json b/compiled-contracts/GlobalExitRootManager.json index a98604242..d86f154f7 100644 --- a/compiled-contracts/GlobalExitRootManager.json +++ b/compiled-contracts/GlobalExitRootManager.json @@ -19,12 +19,6 @@ { "anonymous": false, "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "globalExitRootNum", - "type": "uint256" - }, { "indexed": true, "internalType": "bytes32", @@ -104,19 +98,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [], - "name": "lastGlobalExitRootNum", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "lastMainnetExitRoot", @@ -170,8 +151,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5061066c806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c806333d6247d11610076578063485cc9551161005b578063485cc955146101445780635ec6a8df14610157578063a3c573eb1461019c57600080fd5b806333d6247d146100f65780633ed691ef1461010b57600080fd5b806301fd9044146100a8578063029f2793146100c4578063257b3632146100cd578063319cf735146100ed575b600080fd5b6100b160015481565b6040519081526020015b60405180910390f35b6100b160045481565b6100b16100db366004610562565b60036020526000908152604090205481565b6100b160025481565b610109610104366004610562565b6101bc565b005b6100b160025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6101096101523660046105a4565b610381565b6006546101779073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100bb565b6005546101779073ffffffffffffffffffffffffffffffffffffffff1681565b60065473ffffffffffffffffffffffffffffffffffffffff163314806101f9575060055473ffffffffffffffffffffffffffffffffffffffff1633145b61028a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b60065473ffffffffffffffffffffffffffffffffffffffff1633036102af5760018190555b60055473ffffffffffffffffffffffffffffffffffffffff1633036102d45760028190555b600480549060006102e4836105d7565b9091555050600254600154604080516020810193909352820152600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012060045460008281526003909352928220839055600154600254919550939092917fb7c409af8cb511116b88f38824d48a0196194596241fdb2d177210d3d3b89fbf91a45050565b600054610100900460ff16158080156103a15750600054600160ff909116105b806103bb5750303b1580156103bb575060005460ff166001145b610447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610281565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156104a557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6006805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556005805492851692909116919091179055801561055d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561057457600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461059f57600080fd5b919050565b600080604083850312156105b757600080fd5b6105c08361057b565b91506105ce6020840161057b565b90509250929050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361062f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea2646970667358221220738beb42344c036b42990556122fd29a54fb7e20c627a663de9099b2856fb92364736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a35760003560e01c806333d6247d11610076578063485cc9551161005b578063485cc955146101445780635ec6a8df14610157578063a3c573eb1461019c57600080fd5b806333d6247d146100f65780633ed691ef1461010b57600080fd5b806301fd9044146100a8578063029f2793146100c4578063257b3632146100cd578063319cf735146100ed575b600080fd5b6100b160015481565b6040519081526020015b60405180910390f35b6100b160045481565b6100b16100db366004610562565b60036020526000908152604090205481565b6100b160025481565b610109610104366004610562565b6101bc565b005b6100b160025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6101096101523660046105a4565b610381565b6006546101779073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100bb565b6005546101779073ffffffffffffffffffffffffffffffffffffffff1681565b60065473ffffffffffffffffffffffffffffffffffffffff163314806101f9575060055473ffffffffffffffffffffffffffffffffffffffff1633145b61028a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b60065473ffffffffffffffffffffffffffffffffffffffff1633036102af5760018190555b60055473ffffffffffffffffffffffffffffffffffffffff1633036102d45760028190555b600480549060006102e4836105d7565b9091555050600254600154604080516020810193909352820152600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012060045460008281526003909352928220839055600154600254919550939092917fb7c409af8cb511116b88f38824d48a0196194596241fdb2d177210d3d3b89fbf91a45050565b600054610100900460ff16158080156103a15750600054600160ff909116105b806103bb5750303b1580156103bb575060005460ff166001145b610447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610281565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156104a557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6006805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556005805492851692909116919091179055801561055d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561057457600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461059f57600080fd5b919050565b600080604083850312156105b757600080fd5b6105c08361057b565b91506105ce6020840161057b565b90509250929050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361062f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea2646970667358221220738beb42344c036b42990556122fd29a54fb7e20c627a663de9099b2856fb92364736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506105cf806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461017857600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610524565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610524565b610198565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e366004610566565b610343565b6005546101539073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100a0565b6004546101539073ffffffffffffffffffffffffffffffffffffffff1681565b60055473ffffffffffffffffffffffffffffffffffffffff163314806101d5575060045473ffffffffffffffffffffffffffffffffffffffff1633145b610266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b60055473ffffffffffffffffffffffffffffffffffffffff16330361028b5760018190555b60045473ffffffffffffffffffffffffffffffffffffffff1633036102b05760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036103105760008181526003602052604090204290555b6001546002546040517f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce390600090a35050565b600054610100900460ff16158080156103635750600054600160ff909116105b8061037d5750303b15801561037d575060005460ff166001145b610409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161025d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561046757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6005805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556004805492851692909116919091179055801561051f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561053657600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461056157600080fd5b919050565b6000806040838503121561057957600080fd5b6105828361053d565b91506105906020840161053d565b9050925092905056fea2646970667358221220616596d3022a715405ca5d84c007e9e9a4ab050c3f523745545b68758c05550164736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461017857600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610524565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610524565b610198565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e366004610566565b610343565b6005546101539073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100a0565b6004546101539073ffffffffffffffffffffffffffffffffffffffff1681565b60055473ffffffffffffffffffffffffffffffffffffffff163314806101d5575060045473ffffffffffffffffffffffffffffffffffffffff1633145b610266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b60055473ffffffffffffffffffffffffffffffffffffffff16330361028b5760018190555b60045473ffffffffffffffffffffffffffffffffffffffff1633036102b05760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036103105760008181526003602052604090204290555b6001546002546040517f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce390600090a35050565b600054610100900460ff16158080156103635750600054600160ff909116105b8061037d5750303b15801561037d575060005460ff166001145b610409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161025d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561046757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6005805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556004805492851692909116919091179055801561051f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561053657600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461056157600080fd5b919050565b6000806040838503121561057957600080fd5b6105828361053d565b91506105906020840161053d565b9050925092905056fea2646970667358221220616596d3022a715405ca5d84c007e9e9a4ab050c3f523745545b68758c05550164736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/GlobalExitRootManagerMock.json b/compiled-contracts/GlobalExitRootManagerMock.json index 669fe2945..c16f4aea2 100644 --- a/compiled-contracts/GlobalExitRootManagerMock.json +++ b/compiled-contracts/GlobalExitRootManagerMock.json @@ -35,12 +35,6 @@ { "anonymous": false, "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "globalExitRootNum", - "type": "uint256" - }, { "indexed": true, "internalType": "bytes32", @@ -120,19 +114,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [], - "name": "lastGlobalExitRootNum", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "lastMainnetExitRoot", @@ -172,28 +153,15 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "globalExitRoot", - "type": "bytes32" - } - ], - "name": "setLastGlobalExitRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { "internalType": "uint256", - "name": "_lastGlobalExitRootNum", + "name": "timestamp", "type": "uint256" } ], - "name": "setLastGlobalExitRootNum", + "name": "setLastGlobalExitRoot", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -212,8 +180,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506040516108e13803806108e183398101604081905261002f916101bb565b6100398282610040565b50506101ee565b600054610100900460ff16158080156100605750600054600160ff909116105b8061008b57506100793061019060201b6105be1760201c565b15801561008b575060005460ff166001145b6100f25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015610115576000805461ff0019166101001790555b600680546001600160a01b038086166001600160a01b0319928316179092556005805492851692909116919091179055801561018b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b80516001600160a01b03811681146101b657600080fd5b919050565b600080604083850312156101ce57600080fd5b6101d78361019f565b91506101e56020840161019f565b90509250929050565b6106e4806101fd6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80633ed691ef116100815780635ec6a8df1161005b5780635ec6a8df146101a0578063a3c573eb146101e5578063eb4157d21461020557600080fd5b80633ed691ef14610131578063485cc9551461016a5780635b8202441461017d57600080fd5b8063257b3632116100b2578063257b3632146100f3578063319cf7351461011357806333d6247d1461011c57600080fd5b806301fd9044146100ce578063029f2793146100ea575b600080fd5b6100d760015481565b6040519081526020015b60405180910390f35b6100d760045481565b6100d76101013660046105da565b60036020526000908152604090205481565b6100d760025481565b61012f61012a3660046105da565b610218565b005b6100d760025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b61012f61017836600461061c565b6103dd565b61012f61018b3660046105da565b60045460009182526003602052604090912055565b6006546101c09073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100e1565b6005546101c09073ffffffffffffffffffffffffffffffffffffffff1681565b61012f6102133660046105da565b600455565b60065473ffffffffffffffffffffffffffffffffffffffff16331480610255575060055473ffffffffffffffffffffffffffffffffffffffff1633145b6102e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b60065473ffffffffffffffffffffffffffffffffffffffff16330361030b5760018190555b60055473ffffffffffffffffffffffffffffffffffffffff1633036103305760028190555b600480549060006103408361064f565b9091555050600254600154604080516020810193909352820152600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012060045460008281526003909352928220839055600154600254919550939092917fb7c409af8cb511116b88f38824d48a0196194596241fdb2d177210d3d3b89fbf91a45050565b600054610100900460ff16158080156103fd5750600054600160ff909116105b806104175750303b158015610417575060005460ff166001145b6104a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016102dd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561050157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6006805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255600580549285169290911691909117905580156105b957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000602082840312156105ec57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461061757600080fd5b919050565b6000806040838503121561062f57600080fd5b610638836105f3565b9150610646602084016105f3565b90509250929050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036106a7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea264697066735822122048530d2d229ea6e7ef4e6b72e7db2eda340f70e5f83cbb0ad46110bcaa23e42f64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100c95760003560e01c80633ed691ef116100815780635ec6a8df1161005b5780635ec6a8df146101a0578063a3c573eb146101e5578063eb4157d21461020557600080fd5b80633ed691ef14610131578063485cc9551461016a5780635b8202441461017d57600080fd5b8063257b3632116100b2578063257b3632146100f3578063319cf7351461011357806333d6247d1461011c57600080fd5b806301fd9044146100ce578063029f2793146100ea575b600080fd5b6100d760015481565b6040519081526020015b60405180910390f35b6100d760045481565b6100d76101013660046105da565b60036020526000908152604090205481565b6100d760025481565b61012f61012a3660046105da565b610218565b005b6100d760025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b61012f61017836600461061c565b6103dd565b61012f61018b3660046105da565b60045460009182526003602052604090912055565b6006546101c09073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100e1565b6005546101c09073ffffffffffffffffffffffffffffffffffffffff1681565b61012f6102133660046105da565b600455565b60065473ffffffffffffffffffffffffffffffffffffffff16331480610255575060055473ffffffffffffffffffffffffffffffffffffffff1633145b6102e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b60065473ffffffffffffffffffffffffffffffffffffffff16330361030b5760018190555b60055473ffffffffffffffffffffffffffffffffffffffff1633036103305760028190555b600480549060006103408361064f565b9091555050600254600154604080516020810193909352820152600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012060045460008281526003909352928220839055600154600254919550939092917fb7c409af8cb511116b88f38824d48a0196194596241fdb2d177210d3d3b89fbf91a45050565b600054610100900460ff16158080156103fd5750600054600160ff909116105b806104175750303b158015610417575060005460ff166001145b6104a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016102dd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561050157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6006805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255600580549285169290911691909117905580156105b957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000602082840312156105ec57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461061757600080fd5b919050565b6000806040838503121561062f57600080fd5b610638836105f3565b9150610646602084016105f3565b90509250929050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036106a7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea264697066735822122048530d2d229ea6e7ef4e6b72e7db2eda340f70e5f83cbb0ad46110bcaa23e42f64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5060405161086838038061086883398101604081905261002f916101bb565b6100398282610040565b50506101ee565b600054610100900460ff16158080156100605750600054600160ff909116105b8061008b57506100793061019060201b6105a41760201c565b15801561008b575060005460ff166001145b6100f25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015610115576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561018b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b80516001600160a01b03811681146101b657600080fd5b919050565b600080604083850312156101ce57600080fd5b6101d78361019f565b91506101e56020840161019f565b90509250929050565b61066b806101fd6000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c806333d6247d11610076578063485cc9551161005b578063485cc9551461014e5780635ec6a8df14610161578063a3c573eb146101a657600080fd5b806333d6247d146101025780633ed691ef1461011557600080fd5b806301fd9044146100a8578063051a9e28146100c4578063257b3632146100d9578063319cf735146100f9575b600080fd5b6100b160015481565b6040519081526020015b60405180910390f35b6100d76100d23660046105c0565b6101c6565b005b6100b16100e73660046105c0565b60036020526000908152604090205481565b6100b160025481565b6100d76101103660046105c0565b610218565b6100b160025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d761015c366004610602565b6103c3565b6005546101819073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100bb565b6004546101819073ffffffffffffffffffffffffffffffffffffffff1681565b806003600061020460025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b60055473ffffffffffffffffffffffffffffffffffffffff16331480610255575060045473ffffffffffffffffffffffffffffffffffffffff1633145b6102e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b60055473ffffffffffffffffffffffffffffffffffffffff16330361030b5760018190555b60045473ffffffffffffffffffffffffffffffffffffffff1633036103305760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036103905760008181526003602052604090204290555b6001546002546040517f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce390600090a35050565b600054610100900460ff16158080156103e35750600054600160ff909116105b806103fd5750303b1580156103fd575060005460ff166001145b610489576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016102dd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156104e757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6005805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556004805492851692909116919091179055801561059f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000602082840312156105d257600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146105fd57600080fd5b919050565b6000806040838503121561061557600080fd5b61061e836105d9565b915061062c602084016105d9565b9050925092905056fea2646970667358221220c20953716f47032c9608f2c9d1656cbadaf5e6708c4dfb96635026f6eb2f2b6764736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a35760003560e01c806333d6247d11610076578063485cc9551161005b578063485cc9551461014e5780635ec6a8df14610161578063a3c573eb146101a657600080fd5b806333d6247d146101025780633ed691ef1461011557600080fd5b806301fd9044146100a8578063051a9e28146100c4578063257b3632146100d9578063319cf735146100f9575b600080fd5b6100b160015481565b6040519081526020015b60405180910390f35b6100d76100d23660046105c0565b6101c6565b005b6100b16100e73660046105c0565b60036020526000908152604090205481565b6100b160025481565b6100d76101103660046105c0565b610218565b6100b160025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d761015c366004610602565b6103c3565b6005546101819073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100bb565b6004546101819073ffffffffffffffffffffffffffffffffffffffff1681565b806003600061020460025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b60055473ffffffffffffffffffffffffffffffffffffffff16331480610255575060045473ffffffffffffffffffffffffffffffffffffffff1633145b6102e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b60055473ffffffffffffffffffffffffffffffffffffffff16330361030b5760018190555b60045473ffffffffffffffffffffffffffffffffffffffff1633036103305760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036103905760008181526003602052604090204290555b6001546002546040517f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce390600090a35050565b600054610100900460ff16158080156103e35750600054600160ff909116105b806103fd5750303b1580156103fd575060005460ff166001145b610489576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016102dd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156104e757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6005805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556004805492851692909116919091179055801561059f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000602082840312156105d257600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146105fd57600080fd5b919050565b6000806040838503121561061557600080fd5b61061e836105d9565b915061062c602084016105d9565b9050925092905056fea2646970667358221220c20953716f47032c9608f2c9d1656cbadaf5e6708c4dfb96635026f6eb2f2b6764736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/ProofOfEfficiency.json b/compiled-contracts/ProofOfEfficiency.json index ccd19c35f..62dc2a516 100644 --- a/compiled-contracts/ProofOfEfficiency.json +++ b/compiled-contracts/ProofOfEfficiency.json @@ -47,6 +47,57 @@ "name": "Initialized", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "storedStateRoot", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "provedStateRoot", + "type": "bytes32" + } + ], + "name": "ProofDifferentState", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -112,6 +163,19 @@ "name": "SetTrustedSequencerURL", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -176,6 +240,13 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "activateEmergencyState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -195,6 +266,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "bridgeAddress", + "outputs": [ + { + "internalType": "contract IBridge", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "calculateForceProverFee", @@ -234,6 +318,13 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "deactivateEmergencyState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -288,12 +379,12 @@ "inputs": [ { "internalType": "uint64", - "name": "_lastVerifiedBatch", + "name": "initNumBatch", "type": "uint64" }, { "internalType": "uint64", - "name": "newVerifiedBatch", + "name": "finalNewBatch", "type": "uint64" }, { @@ -377,6 +468,11 @@ "internalType": "string", "name": "_networkName", "type": "string" + }, + { + "internalType": "contract IBridge", + "name": "_bridgeAddress", + "type": "address" } ], "name": "initialize", @@ -475,6 +571,82 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "initNumBatch", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "finalNewBatch", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "newLocalExitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "newStateRoot", + "type": "bytes32" + }, + { + "internalType": "uint256[2]", + "name": "proofA", + "type": "uint256[2]" + }, + { + "internalType": "uint256[2][2]", + "name": "proofB", + "type": "uint256[2][2]" + }, + { + "internalType": "uint256[2]", + "name": "proofC", + "type": "uint256[2]" + } + ], + "name": "proofDifferentState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "rollupVerifier", @@ -488,6 +660,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "securityCouncil", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -611,6 +796,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "trustedSequencer", @@ -641,12 +839,12 @@ "inputs": [ { "internalType": "uint64", - "name": "_lastVerifiedBatch", + "name": "initNumBatch", "type": "uint64" }, { "internalType": "uint64", - "name": "newVerifiedBatch", + "name": "finalNewBatch", "type": "uint64" }, { @@ -681,8 +879,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506139eb806100206000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c8063ab9fc5ef11610104578063d02103ca116100a2578063e7a7ed0211610071578063e7a7ed02146104a1578063e8bf92ed146104d1578063eaeb077b146104f1578063f75527611461050457600080fd5b8063d02103ca1461041e578063d2fd1b311461043e578063d8d1091b14610451578063d8f54db01461046457600080fd5b8063b4d63f58116100de578063b4d63f5814610374578063b6b0b09714610394578063c89e42df146103df578063cfa8ed47146103f257600080fd5b8063ab9fc5ef1461034d578063adc879e914610357578063b02286c01461036b57600080fd5b806355b925e61161017c578063798470571161014b57806379847057146103165780637fcb36531461031e5780638c4a0af71461033257806399f5634e1461034557600080fd5b806355b925e6146102bd5780636b8616ce146102d05780636ff512cc146102f05780637152facf1461030357600080fd5b8063423fa856116101b8578063423fa8561461023f578063456052671461025f5780635392c5e014610287578063542028d5146102b557600080fd5b8063107bf28c146101df57806319d8ac61146101fd5780633c1582671461022a575b600080fd5b6101e7610513565b6040516101f49190612e57565b60405180910390f35b6003546102119067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101f4565b61023d610238366004613003565b6105a1565b005b6003546102119068010000000000000000900467ffffffffffffffff1681565b60035461021190700100000000000000000000000000000000900467ffffffffffffffff1681565b6102a7610295366004613138565b60066020526000908152604090205481565b6040519081526020016101f4565b6101e7610ed3565b61023d6102cb36600461316a565b610ee0565b6102a76102de366004613138565b60016020526000908152604090205481565b61023d6102fe36600461321d565b6113a3565b6101e761031136600461323a565b6114de565b6102a7611748565b6004546102119067ffffffffffffffff1681565b61023d610340366004613295565b6117c2565b6102a76118f6565b61021162093a8081565b6009546102119067ffffffffffffffff1681565b6102a761ea6081565b6102a7610382366004613138565b60026020526000908152604090205481565b6000546103ba9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f4565b61023d6103ed3660046132b2565b611a25565b6004546103ba9068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546103ba9073ffffffffffffffffffffffffffffffffffffffff1681565b61023d61044c3660046132ef565b611b14565b61023d61045f3660046133c5565b611e28565b600454610491907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016101f4565b600354610211907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6007546103ba9073ffffffffffffffffffffffffffffffffffffffff1681565b61023d6104ff3660046134d6565b6124ce565b6102a767016345785d8a000081565b600a80546105209061351b565b80601f016020809104026020016040519081016040528092919081815260200182805461054c9061351b565b80156105995780601f1061056e57610100808354040283529160200191610599565b820191906000526020600020905b81548152906001019060200180831161057c57829003601f168201915b505050505081565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610659576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b805160035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610ca95760008782815181106106c1576106c161356e565b602002602001015190506000816060015167ffffffffffffffff16111561092c57836106ec816135cc565b94505060008160000151805190602001208260200151836060015160405160200161074f93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114610854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610650565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610650565b50610afa565b602081015115806109db575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b3632916109959160040190815260200190565b6020604051808303816000875af11580156109b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d891906135f3565b15155b610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610650565b80515161ea6011610afa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610650565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610b30575042816040015167ffffffffffffffff1611155b610be2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610650565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610c8b906135cc565b95505080604001519550508080610ca19061360c565b9150506106a5565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610d66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610650565b600354600090610d9490700100000000000000000000000000000000900467ffffffffffffffff1684613644565b610da89067ffffffffffffffff168761366d565b6003805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c169390931793909317929092169190911790915560009081526002602052604090208390559050610e863330610e5f8467016345785d8a0000613684565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1692919061299c565b6003546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b600880546105209061351b565b60045467ffffffffffffffff9081169088161115610fa6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a401610650565b60045467ffffffffffffffff9081169087161161106b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610650565b6000611079888888886114de565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516110ae91906136c1565b602060405180830381855afa1580156110cb573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906110ee91906135f3565b6110f8919061370c565b6007546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916111629189918991899190600401613720565b602060405180830381865afa15801561117f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a3919061379a565b61122f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610650565b60045461128e90339061124c9067ffffffffffffffff168b613644565b67ffffffffffffffff1661125e6118f6565b6112689190613684565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff169190612a78565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a1690811782556000908152600660205260409081902088905560055490517f33d6247d00000000000000000000000000000000000000000000000000000000815291820189905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b15801561133f57600080fd5b505af1158015611353573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610650565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b67ffffffffffffffff80851660008181526002602052604080822054938716825290205460609291158061151157508115155b6115c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610650565b80611676576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610650565b67ffffffffffffffff87166000908152600660209081526040918290205460095492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b60035460009067ffffffffffffffff70010000000000000000000000000000000082048116916117979178010000000000000000000000000000000000000000000000009091041660016137b7565b6117a19190613644565b6117bd9067ffffffffffffffff16670de0b6b3a7640000613684565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610650565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe6906114d390831515815260200190565b600080546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829162010000900473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561196b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198f91906135f3565b60045460035491925060009167ffffffffffffffff918216916801000000000000000082048116916119f49170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416613644565b6119fe91906137b7565b611a089190613644565b67ffffffffffffffff169050611a1e81836137e3565b9250505090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611ad8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610650565b6008611ae48282613845565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b20816040516114d39190612e57565b600054610100900460ff1615808015611b345750600054600160ff909116105b80611b4e5750303b158015611b4e575060005460ff166001145b611bda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610650565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611c3857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602178155600780549092168b841617909155805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f8889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c0100000000000000000000000000000000000000000000000000000000871515021790556008611d778582613845565b50600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600a611db88382613845565b508015611e1c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114611f05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610650565b805180611fba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610650565b60035467ffffffffffffffff7801000000000000000000000000000000000000000000000000820481169161200591849170010000000000000000000000000000000090041661395f565b1115612093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610650565b60035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205491937001000000000000000000000000000000009004909216915b848110156123fe5760008682815181106120f3576120f361356e565b602002602001015190508380612108906135cc565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114612261576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610650565b61226c60018861366d565b8303612344574262093a80836040015161228691906137b7565b67ffffffffffffffff161115612344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610650565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c0160405160208183030381529060405280519060200120935085806123e6906135cc565b965050505080806123f69061360c565b9150506120d7565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260026020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146125ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610650565b60006125b5611748565b905081811115612647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610650565b61ea608351106126d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610650565b6000546127049062010000900473ffffffffffffffffffffffffffffffffffffffff1633308461299c565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015612774573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061279891906135f3565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff169060186127d2836135cc565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161284b93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000908152600190935291205532330361293957600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2612996565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161298d93929190613977565b60405180910390a25b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526129969085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612ad3565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052612ace9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016129f6565b505050565b6000612b35826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612bdf9092919063ffffffff16565b805190915015612ace5780806020019051810190612b53919061379a565b612ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610650565b6060612bee8484600085612bf8565b90505b9392505050565b606082471015612c8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610650565b73ffffffffffffffffffffffffffffffffffffffff85163b612d08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610650565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612d3191906136c1565b60006040518083038185875af1925050503d8060008114612d6e576040519150601f19603f3d011682016040523d82523d6000602084013e612d73565b606091505b5091509150612d83828286612d8e565b979650505050505050565b60608315612d9d575081612bf1565b825115612dad5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106509190612e57565b60005b83811015612dfc578181015183820152602001612de4565b838111156129965750506000910152565b60008151808452612e25816020860160208601612de1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612bf16020830184612e0d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715612ebc57612ebc612e6a565b60405290565b6040516060810167ffffffffffffffff81118282101715612ebc57612ebc612e6a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612f2c57612f2c612e6a565b604052919050565b600067ffffffffffffffff821115612f4e57612f4e612e6a565b5060051b60200190565b600082601f830112612f6957600080fd5b813567ffffffffffffffff811115612f8357612f83612e6a565b612fb460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612ee5565b818152846020838601011115612fc957600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114612ffe57600080fd5b919050565b6000602080838503121561301657600080fd5b823567ffffffffffffffff8082111561302e57600080fd5b818501915085601f83011261304257600080fd5b813561305561305082612f34565b612ee5565b81815260059190911b8301840190848101908883111561307457600080fd5b8585015b8381101561312b578035858111156130905760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018113156130c65760008081fd5b6130ce612e99565b89830135888111156130e05760008081fd5b6130ee8e8c83870101612f58565b8252506040808401358b8301526060613108818601612fe6565b82840152613117848601612fe6565b908301525085525050918601918601613078565b5098975050505050505050565b60006020828403121561314a57600080fd5b612bf182612fe6565b806040810183101561316457600080fd5b92915050565b6000806000806000806000610180888a03121561318657600080fd5b61318f88612fe6565b965061319d60208901612fe6565b955060408801359450606088013593506131ba8960808a01613153565b92506101408801898111156131ce57600080fd5b60c0890192506131de8a82613153565b91505092959891949750929550565b73ffffffffffffffffffffffffffffffffffffffff8116811461320f57600080fd5b50565b8035612ffe816131ed565b60006020828403121561322f57600080fd5b8135612bf1816131ed565b6000806000806080858703121561325057600080fd5b61325985612fe6565b935061326760208601612fe6565b93969395505050506040820135916060013590565b801515811461320f57600080fd5b8035612ffe8161327c565b6000602082840312156132a757600080fd5b8135612bf18161327c565b6000602082840312156132c457600080fd5b813567ffffffffffffffff8111156132db57600080fd5b6132e784828501612f58565b949350505050565b60008060008060008060008060006101208a8c03121561330e57600080fd5b8935613319816131ed565b985060208a0135613329816131ed565b975061333760408b01613212565b965060608a0135955061334c60808b01613212565b945061335a60a08b0161328a565b935060c08a013567ffffffffffffffff8082111561337757600080fd5b6133838d838e01612f58565b945061339160e08d01612fe6565b93506101008c01359150808211156133a857600080fd5b506133b58c828d01612f58565b9150509295985092959850929598565b600060208083850312156133d857600080fd5b823567ffffffffffffffff808211156133f057600080fd5b818501915085601f83011261340457600080fd5b813561341261305082612f34565b81815260059190911b8301840190848101908883111561343157600080fd5b8585015b8381101561312b5780358581111561344d5760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018113156134835760008081fd5b61348b612ec2565b898301358881111561349d5760008081fd5b6134ab8e8c83870101612f58565b8252506040808401358b8301526134c3838501612fe6565b9082015285525050918601918601613435565b600080604083850312156134e957600080fd5b823567ffffffffffffffff81111561350057600080fd5b61350c85828601612f58565b95602094909401359450505050565b600181811c9082168061352f57607f821691505b602082108103613568577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036135e9576135e961359d565b6001019392505050565b60006020828403121561360557600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361363d5761363d61359d565b5060010190565b600067ffffffffffffffff838116908316818110156136655761366561359d565b039392505050565b60008282101561367f5761367f61359d565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156136bc576136bc61359d565b500290565b600082516136d3818460208701612de1565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261371b5761371b6136dd565b500690565b61012081016040808784376000838201818152879190815b600281101561375857848483379084018281529284019290600101613738565b5050828760c0870137610100850181815286935091505b600181101561378e57825182526020928301929091019060010161376f565b50505095945050505050565b6000602082840312156137ac57600080fd5b8151612bf18161327c565b600067ffffffffffffffff8083168185168083038211156137da576137da61359d565b01949350505050565b6000826137f2576137f26136dd565b500490565b601f821115612ace57600081815260208120601f850160051c8101602086101561381e5750805b601f850160051c820191505b8181101561383d5782815560010161382a565b505050505050565b815167ffffffffffffffff81111561385f5761385f612e6a565b6138738161386d845461351b565b846137f7565b602080601f8311600181146138c657600084156138905750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561383d565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613913578886015182559484019460019091019084016138f4565b508582101561394f57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156139725761397261359d565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006139ac6060830184612e0d565b9594505050505056fea264697066735822122018ec4825c825ff181a582e9a24cd8b012688140492d1a67a912ff3a247a51d0264736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101da5760003560e01c8063ab9fc5ef11610104578063d02103ca116100a2578063e7a7ed0211610071578063e7a7ed02146104a1578063e8bf92ed146104d1578063eaeb077b146104f1578063f75527611461050457600080fd5b8063d02103ca1461041e578063d2fd1b311461043e578063d8d1091b14610451578063d8f54db01461046457600080fd5b8063b4d63f58116100de578063b4d63f5814610374578063b6b0b09714610394578063c89e42df146103df578063cfa8ed47146103f257600080fd5b8063ab9fc5ef1461034d578063adc879e914610357578063b02286c01461036b57600080fd5b806355b925e61161017c578063798470571161014b57806379847057146103165780637fcb36531461031e5780638c4a0af71461033257806399f5634e1461034557600080fd5b806355b925e6146102bd5780636b8616ce146102d05780636ff512cc146102f05780637152facf1461030357600080fd5b8063423fa856116101b8578063423fa8561461023f578063456052671461025f5780635392c5e014610287578063542028d5146102b557600080fd5b8063107bf28c146101df57806319d8ac61146101fd5780633c1582671461022a575b600080fd5b6101e7610513565b6040516101f49190612e57565b60405180910390f35b6003546102119067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101f4565b61023d610238366004613003565b6105a1565b005b6003546102119068010000000000000000900467ffffffffffffffff1681565b60035461021190700100000000000000000000000000000000900467ffffffffffffffff1681565b6102a7610295366004613138565b60066020526000908152604090205481565b6040519081526020016101f4565b6101e7610ed3565b61023d6102cb36600461316a565b610ee0565b6102a76102de366004613138565b60016020526000908152604090205481565b61023d6102fe36600461321d565b6113a3565b6101e761031136600461323a565b6114de565b6102a7611748565b6004546102119067ffffffffffffffff1681565b61023d610340366004613295565b6117c2565b6102a76118f6565b61021162093a8081565b6009546102119067ffffffffffffffff1681565b6102a761ea6081565b6102a7610382366004613138565b60026020526000908152604090205481565b6000546103ba9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f4565b61023d6103ed3660046132b2565b611a25565b6004546103ba9068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546103ba9073ffffffffffffffffffffffffffffffffffffffff1681565b61023d61044c3660046132ef565b611b14565b61023d61045f3660046133c5565b611e28565b600454610491907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016101f4565b600354610211907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6007546103ba9073ffffffffffffffffffffffffffffffffffffffff1681565b61023d6104ff3660046134d6565b6124ce565b6102a767016345785d8a000081565b600a80546105209061351b565b80601f016020809104026020016040519081016040528092919081815260200182805461054c9061351b565b80156105995780601f1061056e57610100808354040283529160200191610599565b820191906000526020600020905b81548152906001019060200180831161057c57829003601f168201915b505050505081565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610659576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b805160035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610ca95760008782815181106106c1576106c161356e565b602002602001015190506000816060015167ffffffffffffffff16111561092c57836106ec816135cc565b94505060008160000151805190602001208260200151836060015160405160200161074f93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114610854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610650565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610650565b50610afa565b602081015115806109db575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b3632916109959160040190815260200190565b6020604051808303816000875af11580156109b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d891906135f3565b15155b610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610650565b80515161ea6011610afa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610650565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610b30575042816040015167ffffffffffffffff1611155b610be2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610650565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610c8b906135cc565b95505080604001519550508080610ca19061360c565b9150506106a5565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610d66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610650565b600354600090610d9490700100000000000000000000000000000000900467ffffffffffffffff1684613644565b610da89067ffffffffffffffff168761366d565b6003805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c169390931793909317929092169190911790915560009081526002602052604090208390559050610e863330610e5f8467016345785d8a0000613684565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1692919061299c565b6003546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b600880546105209061351b565b60045467ffffffffffffffff9081169088161115610fa6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a401610650565b60045467ffffffffffffffff9081169087161161106b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610650565b6000611079888888886114de565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516110ae91906136c1565b602060405180830381855afa1580156110cb573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906110ee91906135f3565b6110f8919061370c565b6007546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916111629189918991899190600401613720565b602060405180830381865afa15801561117f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a3919061379a565b61122f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610650565b60045461128e90339061124c9067ffffffffffffffff168b613644565b67ffffffffffffffff1661125e6118f6565b6112689190613684565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff169190612a78565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a1690811782556000908152600660205260409081902088905560055490517f33d6247d00000000000000000000000000000000000000000000000000000000815291820189905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b15801561133f57600080fd5b505af1158015611353573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610650565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b67ffffffffffffffff80851660008181526002602052604080822054938716825290205460609291158061151157508115155b6115c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610650565b80611676576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610650565b67ffffffffffffffff87166000908152600660209081526040918290205460095492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b60035460009067ffffffffffffffff70010000000000000000000000000000000082048116916117979178010000000000000000000000000000000000000000000000009091041660016137b7565b6117a19190613644565b6117bd9067ffffffffffffffff16670de0b6b3a7640000613684565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610650565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe6906114d390831515815260200190565b600080546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829162010000900473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561196b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198f91906135f3565b60045460035491925060009167ffffffffffffffff918216916801000000000000000082048116916119f49170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416613644565b6119fe91906137b7565b611a089190613644565b67ffffffffffffffff169050611a1e81836137e3565b9250505090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611ad8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610650565b6008611ae48282613845565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b20816040516114d39190612e57565b600054610100900460ff1615808015611b345750600054600160ff909116105b80611b4e5750303b158015611b4e575060005460ff166001145b611bda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610650565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611c3857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602178155600780549092168b841617909155805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f8889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c0100000000000000000000000000000000000000000000000000000000871515021790556008611d778582613845565b50600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600a611db88382613845565b508015611e1c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114611f05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610650565b805180611fba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610650565b60035467ffffffffffffffff7801000000000000000000000000000000000000000000000000820481169161200591849170010000000000000000000000000000000090041661395f565b1115612093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610650565b60035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205491937001000000000000000000000000000000009004909216915b848110156123fe5760008682815181106120f3576120f361356e565b602002602001015190508380612108906135cc565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114612261576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610650565b61226c60018861366d565b8303612344574262093a80836040015161228691906137b7565b67ffffffffffffffff161115612344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610650565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c0160405160208183030381529060405280519060200120935085806123e6906135cc565b965050505080806123f69061360c565b9150506120d7565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260026020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146125ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610650565b60006125b5611748565b905081811115612647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610650565b61ea608351106126d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610650565b6000546127049062010000900473ffffffffffffffffffffffffffffffffffffffff1633308461299c565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015612774573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061279891906135f3565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff169060186127d2836135cc565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161284b93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000908152600190935291205532330361293957600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2612996565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161298d93929190613977565b60405180910390a25b50505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526129969085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612ad3565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052612ace9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016129f6565b505050565b6000612b35826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612bdf9092919063ffffffff16565b805190915015612ace5780806020019051810190612b53919061379a565b612ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610650565b6060612bee8484600085612bf8565b90505b9392505050565b606082471015612c8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610650565b73ffffffffffffffffffffffffffffffffffffffff85163b612d08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610650565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612d3191906136c1565b60006040518083038185875af1925050503d8060008114612d6e576040519150601f19603f3d011682016040523d82523d6000602084013e612d73565b606091505b5091509150612d83828286612d8e565b979650505050505050565b60608315612d9d575081612bf1565b825115612dad5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106509190612e57565b60005b83811015612dfc578181015183820152602001612de4565b838111156129965750506000910152565b60008151808452612e25816020860160208601612de1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612bf16020830184612e0d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715612ebc57612ebc612e6a565b60405290565b6040516060810167ffffffffffffffff81118282101715612ebc57612ebc612e6a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612f2c57612f2c612e6a565b604052919050565b600067ffffffffffffffff821115612f4e57612f4e612e6a565b5060051b60200190565b600082601f830112612f6957600080fd5b813567ffffffffffffffff811115612f8357612f83612e6a565b612fb460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612ee5565b818152846020838601011115612fc957600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114612ffe57600080fd5b919050565b6000602080838503121561301657600080fd5b823567ffffffffffffffff8082111561302e57600080fd5b818501915085601f83011261304257600080fd5b813561305561305082612f34565b612ee5565b81815260059190911b8301840190848101908883111561307457600080fd5b8585015b8381101561312b578035858111156130905760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018113156130c65760008081fd5b6130ce612e99565b89830135888111156130e05760008081fd5b6130ee8e8c83870101612f58565b8252506040808401358b8301526060613108818601612fe6565b82840152613117848601612fe6565b908301525085525050918601918601613078565b5098975050505050505050565b60006020828403121561314a57600080fd5b612bf182612fe6565b806040810183101561316457600080fd5b92915050565b6000806000806000806000610180888a03121561318657600080fd5b61318f88612fe6565b965061319d60208901612fe6565b955060408801359450606088013593506131ba8960808a01613153565b92506101408801898111156131ce57600080fd5b60c0890192506131de8a82613153565b91505092959891949750929550565b73ffffffffffffffffffffffffffffffffffffffff8116811461320f57600080fd5b50565b8035612ffe816131ed565b60006020828403121561322f57600080fd5b8135612bf1816131ed565b6000806000806080858703121561325057600080fd5b61325985612fe6565b935061326760208601612fe6565b93969395505050506040820135916060013590565b801515811461320f57600080fd5b8035612ffe8161327c565b6000602082840312156132a757600080fd5b8135612bf18161327c565b6000602082840312156132c457600080fd5b813567ffffffffffffffff8111156132db57600080fd5b6132e784828501612f58565b949350505050565b60008060008060008060008060006101208a8c03121561330e57600080fd5b8935613319816131ed565b985060208a0135613329816131ed565b975061333760408b01613212565b965060608a0135955061334c60808b01613212565b945061335a60a08b0161328a565b935060c08a013567ffffffffffffffff8082111561337757600080fd5b6133838d838e01612f58565b945061339160e08d01612fe6565b93506101008c01359150808211156133a857600080fd5b506133b58c828d01612f58565b9150509295985092959850929598565b600060208083850312156133d857600080fd5b823567ffffffffffffffff808211156133f057600080fd5b818501915085601f83011261340457600080fd5b813561341261305082612f34565b81815260059190911b8301840190848101908883111561343157600080fd5b8585015b8381101561312b5780358581111561344d5760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018113156134835760008081fd5b61348b612ec2565b898301358881111561349d5760008081fd5b6134ab8e8c83870101612f58565b8252506040808401358b8301526134c3838501612fe6565b9082015285525050918601918601613435565b600080604083850312156134e957600080fd5b823567ffffffffffffffff81111561350057600080fd5b61350c85828601612f58565b95602094909401359450505050565b600181811c9082168061352f57607f821691505b602082108103613568577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036135e9576135e961359d565b6001019392505050565b60006020828403121561360557600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361363d5761363d61359d565b5060010190565b600067ffffffffffffffff838116908316818110156136655761366561359d565b039392505050565b60008282101561367f5761367f61359d565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156136bc576136bc61359d565b500290565b600082516136d3818460208701612de1565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261371b5761371b6136dd565b500690565b61012081016040808784376000838201818152879190815b600281101561375857848483379084018281529284019290600101613738565b5050828760c0870137610100850181815286935091505b600181101561378e57825182526020928301929091019060010161376f565b50505095945050505050565b6000602082840312156137ac57600080fd5b8151612bf18161327c565b600067ffffffffffffffff8083168185168083038211156137da576137da61359d565b01949350505050565b6000826137f2576137f26136dd565b500490565b601f821115612ace57600081815260208120601f850160051c8101602086101561381e5750805b601f850160051c820191505b8181101561383d5782815560010161382a565b505050505050565b815167ffffffffffffffff81111561385f5761385f612e6a565b6138738161386d845461351b565b846137f7565b602080601f8311600181146138c657600084156138905750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561383d565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613913578886015182559484019460019091019084016138f4565b508582101561394f57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156139725761397261359d565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006139ac6060830184612e0d565b9594505050505056fea264697066735822122018ec4825c825ff181a582e9a24cd8b012688140492d1a67a912ff3a247a51d0264736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50614869806100206000396000f3fe608060405234801561001057600080fd5b50600436106102ad5760003560e01c80638da5cb5b1161017b578063cfa8ed47116100d8578063e7a7ed021161008c578063eaeb077b11610071578063eaeb077b1461064e578063f2fde38b14610661578063f75527611461067457600080fd5b8063e7a7ed02146105fe578063e8bf92ed1461062e57600080fd5b8063d8d1091b116100bd578063d8d1091b146105b6578063d8f54db0146105c9578063dbc16976146105f657600080fd5b8063cfa8ed471461056a578063d02103ca1461059657600080fd5b8063b02286c01161012f578063b6b0b09711610114578063b6b0b09714610524578063c89e42df14610544578063ca8103661461055757600080fd5b8063b02286c0146104fb578063b4d63f581461050457600080fd5b8063a3c573eb11610160578063a3c573eb146104bd578063ab9fc5ef146104dd578063adc879e9146104e757600080fd5b80638da5cb5b1461049757806399f5634e146104b557600080fd5b806355b925e611610229578063715018a6116101dd57806379847057116101c257806379847057146104685780637fcb3653146104705780638c4a0af71461048457600080fd5b8063715018a61461044d5780637152facf1461045557600080fd5b80636766f09d1161020e5780636766f09d146104075780636b8616ce1461041a5780636ff512cc1461043a57600080fd5b806355b925e6146103dd5780635c975abb146103f057600080fd5b80633c158267116102805780634560526711610265578063456052671461037f5780635392c5e0146103a7578063542028d5146103d557600080fd5b80633c1582671461034c578063423fa8561461035f57600080fd5b8063107bf28c146102b257806319d8ac61146102d05780632072f6c5146102fd57806327eb6c0f14610307575b600080fd5b6102ba610683565b6040516102c79190613cca565b60405180910390f35b609a546102e49067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102c7565b610305610711565b005b60a2546103279073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102c7565b61030561035a366004613e76565b610723565b609a546102e49068010000000000000000900467ffffffffffffffff1681565b609a546102e490700100000000000000000000000000000000900467ffffffffffffffff1681565b6103c76103b5366004613fab565b609d6020526000908152604090205481565b6040519081526020016102c7565b6102ba611057565b6103056103eb366004613fdd565b611064565b60655460ff165b60405190151581526020016102c7565b610305610415366004613fdd565b61152d565b6103c7610428366004613fab565b60986020526000908152604090205481565b61030561044836600461408d565b611b63565b610305611c9e565b6102ba6104633660046140aa565b611cb0565b6103c7611f1a565b609b546102e49067ffffffffffffffff1681565b610305610492366004614105565b611f94565b60335473ffffffffffffffffffffffffffffffffffffffff16610327565b6103c76120c8565b60a3546103279073ffffffffffffffffffffffffffffffffffffffff1681565b6102e462093a8081565b60a0546102e49067ffffffffffffffff1681565b6103c761ea6081565b6103c7610512366004613fab565b60996020526000908152604090205481565b6097546103279073ffffffffffffffffffffffffffffffffffffffff1681565b610305610552366004614122565b6121f5565b61030561056536600461415f565b6122e4565b609b546103279068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b609c546103279073ffffffffffffffffffffffffffffffffffffffff1681565b6103056105c4366004614243565b612625565b609b546103f7907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610305612cd3565b609a546102e4907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b609e546103279073ffffffffffffffffffffffffffffffffffffffff1681565b61030561065c366004614354565b612d82565b61030561066f36600461408d565b613252565b6103c767016345785d8a000081565b60a1805461069090614399565b80601f01602080910402602001604051908101604052809291908181526020018280546106bc90614399565b80156107095780601f106106de57610100808354040283529160200191610709565b820191906000526020600020905b8154815290600101906020018083116106ec57829003601f168201915b505050505081565b610719613309565b61072161338a565b565b61072b613410565b609b5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146107e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b8051609a5467ffffffffffffffff680100000000000000008204811660008181526099602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610e3357600087828151811061084b5761084b6143ec565b602002602001015190506000816060015167ffffffffffffffff161115610ab657836108768161444a565b9450506000816000015180519060200120826020015183606001516040516020016108d993929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff88166000908152609890935291205490915081146109de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107da565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610ab0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016107da565b50610c84565b60208101511580610b655750609c5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610b1f9160040190815260200190565b6020604051808303816000875af1158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b629190614471565b15155b610bf1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016107da565b80515161ea6011610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016107da565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610cba575042816040015167ffffffffffffffff1611155b610d6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016107da565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610e159061444a565b95505080604001519550508080610e2b9061448a565b91505061082f565b50609a5467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610ef0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016107da565b609a54600090610f1e90700100000000000000000000000000000000900467ffffffffffffffff16846144c2565b610f329067ffffffffffffffff16876144eb565b609a805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152609960205260409020839055905061100a3330610fe98467016345785d8a0000614502565b60975473ffffffffffffffffffffffffffffffffffffffff1692919061347d565b609a546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b609f805461069090614399565b61106c613410565b609b5467ffffffffffffffff9081169088161115611132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016107da565b609b5467ffffffffffffffff908116908716116111f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016107da565b600061120588888888611cb0565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161123a919061453f565b602060405180830381855afa158015611257573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061127a9190614471565b611284919061458a565b609e546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916112ee918991899189919060040161459e565b602060405180830381865afa15801561130b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132f9190614618565b6113bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016107da565b609b546114149033906113d89067ffffffffffffffff168b6144c2565b67ffffffffffffffff166113ea6120c8565b6113f49190614502565b60975473ffffffffffffffffffffffffffffffffffffffff169190613559565b609b80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152609d602052604090819020879055609c5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b1580156114c957600080fd5b505af11580156114dd573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b8567ffffffffffffffff168767ffffffffffffffff16106115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e65774261746368206d75737420626520626960648201527f67676572207468616e20696e69744e756d426174636800000000000000000000608482015260a4016107da565b609b5467ffffffffffffffff90811690871611156116bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d4261746368206d757374206265206c657360648201527f73207468616e206c617374566572696669656442617463680000000000000000608482015260a4016107da565b67ffffffffffffffff871615806116eb575067ffffffffffffffff87166000908152609d602052604090205415155b61179d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d426174636820737461746520726f6f742060648201527f646f6573206e6f74206578697374000000000000000000000000000000000000608482015260a4016107da565b67ffffffffffffffff86166000908152609d6020526040902054611869576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e6577426174636820737461746520726f6f7460648201527f20646f6573206e6f742065786973740000000000000000000000000000000000608482015260a4016107da565b600061187788888888611cb0565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516118ac919061453f565b602060405180830381855afa1580156118c9573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906118ec9190614471565b6118f6919061458a565b609e546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611960918991899189919060040161459e565b602060405180830381865afa15801561197d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a19190614618565b611a2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20494e56414c49445f50524f4f46000000000000000000000060648201526084016107da565b67ffffffffffffffff88166000908152609d6020526040902054869003611afc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2073746f72656420726f6f74206d757374206265206469666660648201527f6572656e74207468616e206e657720737461746520726f6f7400000000000000608482015260a4016107da565b67ffffffffffffffff88166000908152609d60209081526040918290205482519081529081018890527fe579d6d18f02941e1d0f59bff70f1b2c894edc991badab38343786df2846fe55910160405180910390a1611b5861338a565b505050505050505050565b609b5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611c16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107da565b609b80547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b611ca6613309565b61072160006135b4565b67ffffffffffffffff808516600081815260996020526040808220549387168252902054606092911580611ce357508115155b611d95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107da565b80611e48576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107da565b67ffffffffffffffff87166000908152609d60209081526040918290205460a05492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b609a5460009067ffffffffffffffff7001000000000000000000000000000000008204811691611f69917801000000000000000000000000000000000000000000000000909104166001614635565b611f7391906144c2565b611f8f9067ffffffffffffffff16670de0b6b3a7640000614502565b905090565b609b5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107da565b609b80548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690611c9390831515815260200190565b6097546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829173ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa15801561213b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215f9190614471565b609b54609a5491925060009167ffffffffffffffff918216916801000000000000000082048116916121c491700100000000000000000000000000000000820481169178010000000000000000000000000000000000000000000000009004166144c2565b6121ce9190614635565b6121d891906144c2565b67ffffffffffffffff1690506121ee8183614661565b9250505090565b609b5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146122a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107da565b609f6122b482826146c3565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051611c939190613cca565b600054610100900460ff16158080156123045750600054600160ff909116105b8061231e5750303b15801561231e575060005460ff166001145b6123aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107da565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561240857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b609c80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8e8116919091179092556097805482168d8416179055609e80549091168b831617905560008052609d6020527fc5dc36ae4e7617e4c4d23ddfcde33c79e9ed64c300aed766a9288a6b9b31f63d899055609b80547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928a16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000088151502179055609f61252386826146c3565b5060a080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861617905560a161256484826146c3565b5060a380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556125ad61362b565b6125b56136cb565b801561261857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b61262d613410565b609b547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461270a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107da565b8051806127bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107da565b609a5467ffffffffffffffff7801000000000000000000000000000000000000000000000000820481169161280a9184917001000000000000000000000000000000009004166147dd565b1115612898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016107da565b609a5467ffffffffffffffff680100000000000000008204811660008181526099602052604081205491937001000000000000000000000000000000009004909216915b84811015612c035760008682815181106128f8576128f86143ec565b60200260200101519050838061290d9061444a565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260989093529120549091508114612a66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016107da565b612a716001886144eb565b8303612b49574262093a808360400151612a8b9190614635565b67ffffffffffffffff161115612b49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016107da565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612beb9061444a565b96505050508080612bfb9061448a565b9150506128dc565b50609a80544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260996020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60a25473ffffffffffffffffffffffffffffffffffffffff163314612d7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016107da565b61072161378c565b612d8a613410565b609b547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612e67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107da565b6000612e71611f1a565b905081811115612f03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016107da565b61ea60835110612f95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016107da565b609754612fba9073ffffffffffffffffffffffffffffffffffffffff1633308461347d565b609c54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa15801561302a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061304e9190614471565b609a8054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff169060186130888361444a565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161310193929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181529181528151602092830120609a547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260989093529120553233036131ef57609a54604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261324c565b609a60189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613243939291906147f5565b60405180910390a25b50505050565b61325a613309565b73ffffffffffffffffffffffffffffffffffffffff81166132fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107da565b613306816135b4565b50565b60335473ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107da565b6133926137fe565b60a360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156133fc57600080fd5b505af115801561324c573d6000803e3d6000fd5b60655460ff1615610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016107da565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261324c9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613883565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526135af9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016134d7565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166136c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107da565b610721336135b4565b600054610100900460ff16613762576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107da565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b61379461398f565b60a360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156133fc57600080fd5b613806613410565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586138593390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60006138e5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166139e69092919063ffffffff16565b8051909150156135af57808060200190518101906139039190614618565b6135af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107da565b6139976139ff565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33613859565b60606139f58484600085613a6b565b90505b9392505050565b60655460ff16610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016107da565b606082471015613afd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016107da565b73ffffffffffffffffffffffffffffffffffffffff85163b613b7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107da565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613ba4919061453f565b60006040518083038185875af1925050503d8060008114613be1576040519150601f19603f3d011682016040523d82523d6000602084013e613be6565b606091505b5091509150613bf6828286613c01565b979650505050505050565b60608315613c105750816139f8565b825115613c205782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107da9190613cca565b60005b83811015613c6f578181015183820152602001613c57565b8381111561324c5750506000910152565b60008151808452613c98816020860160208601613c54565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006139f86020830184613c80565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613d2f57613d2f613cdd565b60405290565b6040516060810167ffffffffffffffff81118282101715613d2f57613d2f613cdd565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613d9f57613d9f613cdd565b604052919050565b600067ffffffffffffffff821115613dc157613dc1613cdd565b5060051b60200190565b600082601f830112613ddc57600080fd5b813567ffffffffffffffff811115613df657613df6613cdd565b613e2760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613d58565b818152846020838601011115613e3c57600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613e7157600080fd5b919050565b60006020808385031215613e8957600080fd5b823567ffffffffffffffff80821115613ea157600080fd5b818501915085601f830112613eb557600080fd5b8135613ec8613ec382613da7565b613d58565b81815260059190911b83018401908481019088831115613ee757600080fd5b8585015b83811015613f9e57803585811115613f035760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001811315613f395760008081fd5b613f41613d0c565b8983013588811115613f535760008081fd5b613f618e8c83870101613dcb565b8252506040808401358b8301526060613f7b818601613e59565b82840152613f8a848601613e59565b908301525085525050918601918601613eeb565b5098975050505050505050565b600060208284031215613fbd57600080fd5b6139f882613e59565b8060408101831015613fd757600080fd5b92915050565b6000806000806000806000610180888a031215613ff957600080fd5b61400288613e59565b965061401060208901613e59565b9550604088013594506060880135935061402d8960808a01613fc6565b925061014088018981111561404157600080fd5b60c0890192506140518a82613fc6565b91505092959891949750929550565b73ffffffffffffffffffffffffffffffffffffffff8116811461330657600080fd5b8035613e7181614060565b60006020828403121561409f57600080fd5b81356139f881614060565b600080600080608085870312156140c057600080fd5b6140c985613e59565b93506140d760208601613e59565b93969395505050506040820135916060013590565b801515811461330657600080fd5b8035613e71816140ec565b60006020828403121561411757600080fd5b81356139f8816140ec565b60006020828403121561413457600080fd5b813567ffffffffffffffff81111561414b57600080fd5b61415784828501613dcb565b949350505050565b6000806000806000806000806000806101408b8d03121561417f57600080fd5b6141888b614082565b995061419660208c01614082565b98506141a460408c01614082565b975060608b013596506141b960808c01614082565b95506141c760a08c016140fa565b945060c08b013567ffffffffffffffff808211156141e457600080fd5b6141f08e838f01613dcb565b95506141fe60e08e01613e59565b94506101008d013591508082111561421557600080fd5b506142228d828e01613dcb565b9250506142326101208c01614082565b90509295989b9194979a5092959850565b6000602080838503121561425657600080fd5b823567ffffffffffffffff8082111561426e57600080fd5b818501915085601f83011261428257600080fd5b8135614290613ec382613da7565b81815260059190911b830184019084810190888311156142af57600080fd5b8585015b83811015613f9e578035858111156142cb5760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018113156143015760008081fd5b614309613d35565b898301358881111561431b5760008081fd5b6143298e8c83870101613dcb565b8252506040808401358b830152614341838501613e59565b90820152855250509186019186016142b3565b6000806040838503121561436757600080fd5b823567ffffffffffffffff81111561437e57600080fd5b61438a85828601613dcb565b95602094909401359450505050565b600181811c908216806143ad57607f821691505b6020821081036143e6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036144675761446761441b565b6001019392505050565b60006020828403121561448357600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036144bb576144bb61441b565b5060010190565b600067ffffffffffffffff838116908316818110156144e3576144e361441b565b039392505050565b6000828210156144fd576144fd61441b565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561453a5761453a61441b565b500290565b60008251614551818460208701613c54565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826145995761459961455b565b500690565b61012081016040808784376000838201818152879190815b60028110156145d6578484833790840182815292840192906001016145b6565b5050828760c0870137610100850181815286935091505b600181101561460c5782518252602092830192909101906001016145ed565b50505095945050505050565b60006020828403121561462a57600080fd5b81516139f8816140ec565b600067ffffffffffffffff8083168185168083038211156146585761465861441b565b01949350505050565b6000826146705761467061455b565b500490565b601f8211156135af57600081815260208120601f850160051c8101602086101561469c5750805b601f850160051c820191505b818110156146bb578281556001016146a8565b505050505050565b815167ffffffffffffffff8111156146dd576146dd613cdd565b6146f1816146eb8454614399565b84614675565b602080601f831160018114614744576000841561470e5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556146bb565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561479157888601518255948401946001909101908401614772565b50858210156147cd57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156147f0576147f061441b565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff8316602082015260606040820152600061482a6060830184613c80565b9594505050505056fea2646970667358221220a53b562b076cd0253795eb85a552ed26fb2bfc0997144bffb51a13e0f4a780c564736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102ad5760003560e01c80638da5cb5b1161017b578063cfa8ed47116100d8578063e7a7ed021161008c578063eaeb077b11610071578063eaeb077b1461064e578063f2fde38b14610661578063f75527611461067457600080fd5b8063e7a7ed02146105fe578063e8bf92ed1461062e57600080fd5b8063d8d1091b116100bd578063d8d1091b146105b6578063d8f54db0146105c9578063dbc16976146105f657600080fd5b8063cfa8ed471461056a578063d02103ca1461059657600080fd5b8063b02286c01161012f578063b6b0b09711610114578063b6b0b09714610524578063c89e42df14610544578063ca8103661461055757600080fd5b8063b02286c0146104fb578063b4d63f581461050457600080fd5b8063a3c573eb11610160578063a3c573eb146104bd578063ab9fc5ef146104dd578063adc879e9146104e757600080fd5b80638da5cb5b1461049757806399f5634e146104b557600080fd5b806355b925e611610229578063715018a6116101dd57806379847057116101c257806379847057146104685780637fcb3653146104705780638c4a0af71461048457600080fd5b8063715018a61461044d5780637152facf1461045557600080fd5b80636766f09d1161020e5780636766f09d146104075780636b8616ce1461041a5780636ff512cc1461043a57600080fd5b806355b925e6146103dd5780635c975abb146103f057600080fd5b80633c158267116102805780634560526711610265578063456052671461037f5780635392c5e0146103a7578063542028d5146103d557600080fd5b80633c1582671461034c578063423fa8561461035f57600080fd5b8063107bf28c146102b257806319d8ac61146102d05780632072f6c5146102fd57806327eb6c0f14610307575b600080fd5b6102ba610683565b6040516102c79190613cca565b60405180910390f35b609a546102e49067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102c7565b610305610711565b005b60a2546103279073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102c7565b61030561035a366004613e76565b610723565b609a546102e49068010000000000000000900467ffffffffffffffff1681565b609a546102e490700100000000000000000000000000000000900467ffffffffffffffff1681565b6103c76103b5366004613fab565b609d6020526000908152604090205481565b6040519081526020016102c7565b6102ba611057565b6103056103eb366004613fdd565b611064565b60655460ff165b60405190151581526020016102c7565b610305610415366004613fdd565b61152d565b6103c7610428366004613fab565b60986020526000908152604090205481565b61030561044836600461408d565b611b63565b610305611c9e565b6102ba6104633660046140aa565b611cb0565b6103c7611f1a565b609b546102e49067ffffffffffffffff1681565b610305610492366004614105565b611f94565b60335473ffffffffffffffffffffffffffffffffffffffff16610327565b6103c76120c8565b60a3546103279073ffffffffffffffffffffffffffffffffffffffff1681565b6102e462093a8081565b60a0546102e49067ffffffffffffffff1681565b6103c761ea6081565b6103c7610512366004613fab565b60996020526000908152604090205481565b6097546103279073ffffffffffffffffffffffffffffffffffffffff1681565b610305610552366004614122565b6121f5565b61030561056536600461415f565b6122e4565b609b546103279068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b609c546103279073ffffffffffffffffffffffffffffffffffffffff1681565b6103056105c4366004614243565b612625565b609b546103f7907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610305612cd3565b609a546102e4907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b609e546103279073ffffffffffffffffffffffffffffffffffffffff1681565b61030561065c366004614354565b612d82565b61030561066f36600461408d565b613252565b6103c767016345785d8a000081565b60a1805461069090614399565b80601f01602080910402602001604051908101604052809291908181526020018280546106bc90614399565b80156107095780601f106106de57610100808354040283529160200191610709565b820191906000526020600020905b8154815290600101906020018083116106ec57829003601f168201915b505050505081565b610719613309565b61072161338a565b565b61072b613410565b609b5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146107e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b8051609a5467ffffffffffffffff680100000000000000008204811660008181526099602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610e3357600087828151811061084b5761084b6143ec565b602002602001015190506000816060015167ffffffffffffffff161115610ab657836108768161444a565b9450506000816000015180519060200120826020015183606001516040516020016108d993929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff88166000908152609890935291205490915081146109de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107da565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610ab0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016107da565b50610c84565b60208101511580610b655750609c5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610b1f9160040190815260200190565b6020604051808303816000875af1158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b629190614471565b15155b610bf1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016107da565b80515161ea6011610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016107da565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610cba575042816040015167ffffffffffffffff1611155b610d6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016107da565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610e159061444a565b95505080604001519550508080610e2b9061448a565b91505061082f565b50609a5467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610ef0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016107da565b609a54600090610f1e90700100000000000000000000000000000000900467ffffffffffffffff16846144c2565b610f329067ffffffffffffffff16876144eb565b609a805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152609960205260409020839055905061100a3330610fe98467016345785d8a0000614502565b60975473ffffffffffffffffffffffffffffffffffffffff1692919061347d565b609a546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b609f805461069090614399565b61106c613410565b609b5467ffffffffffffffff9081169088161115611132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016107da565b609b5467ffffffffffffffff908116908716116111f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016107da565b600061120588888888611cb0565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161123a919061453f565b602060405180830381855afa158015611257573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061127a9190614471565b611284919061458a565b609e546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916112ee918991899189919060040161459e565b602060405180830381865afa15801561130b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132f9190614618565b6113bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016107da565b609b546114149033906113d89067ffffffffffffffff168b6144c2565b67ffffffffffffffff166113ea6120c8565b6113f49190614502565b60975473ffffffffffffffffffffffffffffffffffffffff169190613559565b609b80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152609d602052604090819020879055609c5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b1580156114c957600080fd5b505af11580156114dd573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b8567ffffffffffffffff168767ffffffffffffffff16106115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e65774261746368206d75737420626520626960648201527f67676572207468616e20696e69744e756d426174636800000000000000000000608482015260a4016107da565b609b5467ffffffffffffffff90811690871611156116bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d4261746368206d757374206265206c657360648201527f73207468616e206c617374566572696669656442617463680000000000000000608482015260a4016107da565b67ffffffffffffffff871615806116eb575067ffffffffffffffff87166000908152609d602052604090205415155b61179d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d426174636820737461746520726f6f742060648201527f646f6573206e6f74206578697374000000000000000000000000000000000000608482015260a4016107da565b67ffffffffffffffff86166000908152609d6020526040902054611869576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e6577426174636820737461746520726f6f7460648201527f20646f6573206e6f742065786973740000000000000000000000000000000000608482015260a4016107da565b600061187788888888611cb0565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516118ac919061453f565b602060405180830381855afa1580156118c9573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906118ec9190614471565b6118f6919061458a565b609e546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611960918991899189919060040161459e565b602060405180830381865afa15801561197d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a19190614618565b611a2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20494e56414c49445f50524f4f46000000000000000000000060648201526084016107da565b67ffffffffffffffff88166000908152609d6020526040902054869003611afc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2073746f72656420726f6f74206d757374206265206469666660648201527f6572656e74207468616e206e657720737461746520726f6f7400000000000000608482015260a4016107da565b67ffffffffffffffff88166000908152609d60209081526040918290205482519081529081018890527fe579d6d18f02941e1d0f59bff70f1b2c894edc991badab38343786df2846fe55910160405180910390a1611b5861338a565b505050505050505050565b609b5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611c16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107da565b609b80547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b611ca6613309565b61072160006135b4565b67ffffffffffffffff808516600081815260996020526040808220549387168252902054606092911580611ce357508115155b611d95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107da565b80611e48576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107da565b67ffffffffffffffff87166000908152609d60209081526040918290205460a05492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b609a5460009067ffffffffffffffff7001000000000000000000000000000000008204811691611f69917801000000000000000000000000000000000000000000000000909104166001614635565b611f7391906144c2565b611f8f9067ffffffffffffffff16670de0b6b3a7640000614502565b905090565b609b5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107da565b609b80548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690611c9390831515815260200190565b6097546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829173ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa15801561213b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215f9190614471565b609b54609a5491925060009167ffffffffffffffff918216916801000000000000000082048116916121c491700100000000000000000000000000000000820481169178010000000000000000000000000000000000000000000000009004166144c2565b6121ce9190614635565b6121d891906144c2565b67ffffffffffffffff1690506121ee8183614661565b9250505090565b609b5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146122a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107da565b609f6122b482826146c3565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051611c939190613cca565b600054610100900460ff16158080156123045750600054600160ff909116105b8061231e5750303b15801561231e575060005460ff166001145b6123aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107da565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561240857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b609c80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8e8116919091179092556097805482168d8416179055609e80549091168b831617905560008052609d6020527fc5dc36ae4e7617e4c4d23ddfcde33c79e9ed64c300aed766a9288a6b9b31f63d899055609b80547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928a16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000088151502179055609f61252386826146c3565b5060a080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861617905560a161256484826146c3565b5060a380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556125ad61362b565b6125b56136cb565b801561261857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b61262d613410565b609b547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461270a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107da565b8051806127bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107da565b609a5467ffffffffffffffff7801000000000000000000000000000000000000000000000000820481169161280a9184917001000000000000000000000000000000009004166147dd565b1115612898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016107da565b609a5467ffffffffffffffff680100000000000000008204811660008181526099602052604081205491937001000000000000000000000000000000009004909216915b84811015612c035760008682815181106128f8576128f86143ec565b60200260200101519050838061290d9061444a565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260989093529120549091508114612a66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016107da565b612a716001886144eb565b8303612b49574262093a808360400151612a8b9190614635565b67ffffffffffffffff161115612b49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016107da565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612beb9061444a565b96505050508080612bfb9061448a565b9150506128dc565b50609a80544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260996020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60a25473ffffffffffffffffffffffffffffffffffffffff163314612d7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016107da565b61072161378c565b612d8a613410565b609b547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612e67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107da565b6000612e71611f1a565b905081811115612f03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016107da565b61ea60835110612f95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016107da565b609754612fba9073ffffffffffffffffffffffffffffffffffffffff1633308461347d565b609c54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa15801561302a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061304e9190614471565b609a8054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff169060186130888361444a565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161310193929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181529181528151602092830120609a547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260989093529120553233036131ef57609a54604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261324c565b609a60189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613243939291906147f5565b60405180910390a25b50505050565b61325a613309565b73ffffffffffffffffffffffffffffffffffffffff81166132fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107da565b613306816135b4565b50565b60335473ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107da565b6133926137fe565b60a360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156133fc57600080fd5b505af115801561324c573d6000803e3d6000fd5b60655460ff1615610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016107da565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261324c9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613883565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526135af9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016134d7565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166136c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107da565b610721336135b4565b600054610100900460ff16613762576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107da565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b61379461398f565b60a360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156133fc57600080fd5b613806613410565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586138593390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60006138e5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166139e69092919063ffffffff16565b8051909150156135af57808060200190518101906139039190614618565b6135af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107da565b6139976139ff565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33613859565b60606139f58484600085613a6b565b90505b9392505050565b60655460ff16610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016107da565b606082471015613afd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016107da565b73ffffffffffffffffffffffffffffffffffffffff85163b613b7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107da565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613ba4919061453f565b60006040518083038185875af1925050503d8060008114613be1576040519150601f19603f3d011682016040523d82523d6000602084013e613be6565b606091505b5091509150613bf6828286613c01565b979650505050505050565b60608315613c105750816139f8565b825115613c205782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107da9190613cca565b60005b83811015613c6f578181015183820152602001613c57565b8381111561324c5750506000910152565b60008151808452613c98816020860160208601613c54565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006139f86020830184613c80565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613d2f57613d2f613cdd565b60405290565b6040516060810167ffffffffffffffff81118282101715613d2f57613d2f613cdd565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613d9f57613d9f613cdd565b604052919050565b600067ffffffffffffffff821115613dc157613dc1613cdd565b5060051b60200190565b600082601f830112613ddc57600080fd5b813567ffffffffffffffff811115613df657613df6613cdd565b613e2760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613d58565b818152846020838601011115613e3c57600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613e7157600080fd5b919050565b60006020808385031215613e8957600080fd5b823567ffffffffffffffff80821115613ea157600080fd5b818501915085601f830112613eb557600080fd5b8135613ec8613ec382613da7565b613d58565b81815260059190911b83018401908481019088831115613ee757600080fd5b8585015b83811015613f9e57803585811115613f035760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001811315613f395760008081fd5b613f41613d0c565b8983013588811115613f535760008081fd5b613f618e8c83870101613dcb565b8252506040808401358b8301526060613f7b818601613e59565b82840152613f8a848601613e59565b908301525085525050918601918601613eeb565b5098975050505050505050565b600060208284031215613fbd57600080fd5b6139f882613e59565b8060408101831015613fd757600080fd5b92915050565b6000806000806000806000610180888a031215613ff957600080fd5b61400288613e59565b965061401060208901613e59565b9550604088013594506060880135935061402d8960808a01613fc6565b925061014088018981111561404157600080fd5b60c0890192506140518a82613fc6565b91505092959891949750929550565b73ffffffffffffffffffffffffffffffffffffffff8116811461330657600080fd5b8035613e7181614060565b60006020828403121561409f57600080fd5b81356139f881614060565b600080600080608085870312156140c057600080fd5b6140c985613e59565b93506140d760208601613e59565b93969395505050506040820135916060013590565b801515811461330657600080fd5b8035613e71816140ec565b60006020828403121561411757600080fd5b81356139f8816140ec565b60006020828403121561413457600080fd5b813567ffffffffffffffff81111561414b57600080fd5b61415784828501613dcb565b949350505050565b6000806000806000806000806000806101408b8d03121561417f57600080fd5b6141888b614082565b995061419660208c01614082565b98506141a460408c01614082565b975060608b013596506141b960808c01614082565b95506141c760a08c016140fa565b945060c08b013567ffffffffffffffff808211156141e457600080fd5b6141f08e838f01613dcb565b95506141fe60e08e01613e59565b94506101008d013591508082111561421557600080fd5b506142228d828e01613dcb565b9250506142326101208c01614082565b90509295989b9194979a5092959850565b6000602080838503121561425657600080fd5b823567ffffffffffffffff8082111561426e57600080fd5b818501915085601f83011261428257600080fd5b8135614290613ec382613da7565b81815260059190911b830184019084810190888311156142af57600080fd5b8585015b83811015613f9e578035858111156142cb5760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018113156143015760008081fd5b614309613d35565b898301358881111561431b5760008081fd5b6143298e8c83870101613dcb565b8252506040808401358b830152614341838501613e59565b90820152855250509186019186016142b3565b6000806040838503121561436757600080fd5b823567ffffffffffffffff81111561437e57600080fd5b61438a85828601613dcb565b95602094909401359450505050565b600181811c908216806143ad57607f821691505b6020821081036143e6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036144675761446761441b565b6001019392505050565b60006020828403121561448357600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036144bb576144bb61441b565b5060010190565b600067ffffffffffffffff838116908316818110156144e3576144e361441b565b039392505050565b6000828210156144fd576144fd61441b565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561453a5761453a61441b565b500290565b60008251614551818460208701613c54565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826145995761459961455b565b500690565b61012081016040808784376000838201818152879190815b60028110156145d6578484833790840182815292840192906001016145b6565b5050828760c0870137610100850181815286935091505b600181101561460c5782518252602092830192909101906001016145ed565b50505095945050505050565b60006020828403121561462a57600080fd5b81516139f8816140ec565b600067ffffffffffffffff8083168185168083038211156146585761465861441b565b01949350505050565b6000826146705761467061455b565b500490565b601f8211156135af57600081815260208120601f850160051c8101602086101561469c5750805b601f850160051c820191505b818110156146bb578281556001016146a8565b505050505050565b815167ffffffffffffffff8111156146dd576146dd613cdd565b6146f1816146eb8454614399565b84614675565b602080601f831160018114614744576000841561470e5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556146bb565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561479157888601518255948401946001909101908401614772565b50858210156147cd57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156147f0576147f061441b565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff8316602082015260606040820152600061482a6060830184613c80565b9594505050505056fea2646970667358221220a53b562b076cd0253795eb85a552ed26fb2bfc0997144bffb51a13e0f4a780c564736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/ProofOfEfficiencyMock.json b/compiled-contracts/ProofOfEfficiencyMock.json index a70972072..c5a6afb04 100644 --- a/compiled-contracts/ProofOfEfficiencyMock.json +++ b/compiled-contracts/ProofOfEfficiencyMock.json @@ -66,6 +66,38 @@ "name": "OwnershipTransferred", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "storedStateRoot", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "provedStateRoot", + "type": "bytes32" + } + ], + "name": "ProofDifferentState", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -131,6 +163,19 @@ "name": "SetTrustedSequencerURL", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -195,6 +240,13 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "activateEmergencyState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -214,6 +266,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "bridgeAddress", + "outputs": [ + { + "internalType": "contract IBridge", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -292,6 +357,13 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "deactivateEmergencyState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -346,12 +418,12 @@ "inputs": [ { "internalType": "uint64", - "name": "_lastVerifiedBatch", + "name": "initNumBatch", "type": "uint64" }, { "internalType": "uint64", - "name": "newVerifiedBatch", + "name": "finalNewBatch", "type": "uint64" }, { @@ -469,6 +541,11 @@ "internalType": "string", "name": "_networkName", "type": "string" + }, + { + "internalType": "contract IBridge", + "name": "_bridgeAddress", + "type": "address" } ], "name": "initialize", @@ -580,6 +657,62 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "initNumBatch", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "finalNewBatch", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "newLocalExitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "newStateRoot", + "type": "bytes32" + }, + { + "internalType": "uint256[2]", + "name": "proofA", + "type": "uint256[2]" + }, + { + "internalType": "uint256[2][2]", + "name": "proofB", + "type": "uint256[2][2]" + }, + { + "internalType": "uint256[2]", + "name": "proofC", + "type": "uint256[2]" + } + ], + "name": "proofDifferentState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "renounceOwnership", @@ -600,6 +733,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "securityCouncil", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -854,12 +1000,12 @@ "inputs": [ { "internalType": "uint64", - "name": "_lastVerifiedBatch", + "name": "initNumBatch", "type": "uint64" }, { "internalType": "uint64", - "name": "newVerifiedBatch", + "name": "finalNewBatch", "type": "uint64" }, { @@ -937,8 +1083,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5061472c806100206000396000f3fe608060405234801561001057600080fd5b50600436106102de5760003560e01c806399f5634e11610186578063d02103ca116100e3578063e7a7ed0211610097578063f2fde38b11610071578063f2fde38b14610750578063f755276114610763578063fe16564f1461077257600080fd5b8063e7a7ed02146106ed578063e8bf92ed1461071d578063eaeb077b1461073d57600080fd5b8063d2fd1b31116100c8578063d2fd1b311461068a578063d8d1091b1461069d578063d8f54db0146106b057600080fd5b8063d02103ca14610657578063d0ae98dd1461067757600080fd5b8063b4d63f581161013a578063c0cad3021161011f578063c0cad30214610605578063c89e42df14610618578063cfa8ed471461062b57600080fd5b8063b4d63f58146105bf578063b6b0b097146105df57600080fd5b8063ab9fc5ef1161016b578063ab9fc5ef14610598578063adc879e9146105a2578063b02286c0146105b657600080fd5b806399f5634e1461057d5780639b7967601461058557600080fd5b8063574f649e1161023f578063748608de116101f35780638c4a0af7116101cd5780638c4a0af7146105185780638da5cb5b1461052b57806396dc3d391461056a57600080fd5b8063748608de146104e957806379847057146104fc5780637fcb36531461050457600080fd5b80636ff512cc116102245780636ff512cc146104bb578063715018a6146104ce5780637152facf146104d657600080fd5b8063574f649e146103fa5780636b8616ce1461049b57600080fd5b80634560526711610296578063542028d51161027b578063542028d5146103cc5780635437988d146103d457806355b925e6146103e757600080fd5b806345605267146103765780635392c5e01461039e57600080fd5b80631a26da14116102c75780631a26da141461032e5780633c15826714610343578063423fa8561461035657600080fd5b8063107bf28c146102e357806319d8ac6114610301575b600080fd5b6102eb610785565b6040516102f89190613acf565b60405180910390f35b6003546103159067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102f8565b61034161033c366004613aff565b610813565b005b610341610351366004613ca5565b610838565b6003546103159068010000000000000000900467ffffffffffffffff1681565b60035461031590700100000000000000000000000000000000900467ffffffffffffffff1681565b6103be6103ac366004613dda565b60066020526000908152604090205481565b6040519081526020016102f8565b6102eb61116a565b6103416103e2366004613e22565b611177565b6103416103f5366004613e56565b6111c6565b6103be610408366004613ed9565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b6103be6104a9366004613dda565b60016020526000908152604090205481565b6103416104c9366004613e22565b611689565b6103416117c4565b6102eb6104e4366004613f4f565b6117d8565b6103416104f7366004613e56565b611a42565b6103be611d13565b6004546103159067ffffffffffffffff1681565b610341610526366004613faa565b611d8d565b603d5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102f8565b610341610578366004613dda565b611ec1565b6103be611f04565b610341610593366004613dda565b612033565b61031562093a8081565b6009546103159067ffffffffffffffff1681565b6103be61ea6081565b6103be6105cd366004613dda565b60026020526000908152604090205481565b6000546105459062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b610341610613366004613fc7565b612082565b610341610626366004613fc7565b61209a565b6004546105459068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546105459073ffffffffffffffffffffffffffffffffffffffff1681565b6103be610685366004613f4f565b612189565b610341610698366004614004565b612483565b6103416106ab3660046140da565b61279f565b6004546106dd907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016102f8565b600354610315907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6007546105459073ffffffffffffffffffffffffffffffffffffffff1681565b61034161074b3660046141eb565b612e45565b61034161075e366004613e22565b613313565b6103be67016345785d8a000081565b610341610780366004614230565b6133ca565b600a80546107929061425c565b80601f01602080910402602001604051908101604052809291908181526020018280546107be9061425c565b801561080b5780601f106107e05761010080835404028352916020019161080b565b820191906000526020600020905b8154815290600101906020018083116107ee57829003601f168201915b505050505081565b61081b6133ed565b67ffffffffffffffff909116600090815260026020526040902055565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b805160035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610f40576000878281518110610958576109586142af565b602002602001015190506000816060015167ffffffffffffffff161115610bc357836109838161430d565b9450506000816000015180519060200120826020015183606001516040516020016109e693929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114610aeb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108e7565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610bbd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016108e7565b50610d91565b60208101511580610c72575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610c2c9160040190815260200190565b6020604051808303816000875af1158015610c4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6f9190614334565b15155b610cfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016108e7565b80515161ea6011610d91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016108e7565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610dc7575042816040015167ffffffffffffffff1611155b610e79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016108e7565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610f229061430d565b95505080604001519550508080610f389061434d565b91505061093c565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610ffd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016108e7565b60035460009061102b90700100000000000000000000000000000000900467ffffffffffffffff1684614385565b61103f9067ffffffffffffffff16876143ae565b6003805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152600260205260409020839055905061111d33306110f68467016345785d8a00006143c5565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1692919061346e565b6003546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b600880546107929061425c565b61117f6133ed565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60045467ffffffffffffffff908116908816111561128c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a4016108e7565b60045467ffffffffffffffff90811690871611611351576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a4016108e7565b600061135f888888886117d8565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516113949190614402565b602060405180830381855afa1580156113b1573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906113d49190614334565b6113de919061444d565b6007546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916114489189918991899190600401614461565b602060405180830381865afa158015611465573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148991906144db565b611515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016108e7565b6004546115749033906115329067ffffffffffffffff168b614385565b67ffffffffffffffff16611544611f04565b61154e91906143c5565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16919061354a565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a1690811782556000908152600660205260409081902088905560055490517f33d6247d00000000000000000000000000000000000000000000000000000000815291820189905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b15801561162557600080fd5b505af1158015611639573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461173c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108e7565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b6117cc6133ed565b6117d660006135a5565b565b67ffffffffffffffff80851660008181526002602052604080822054938716825290205460609291158061180b57508115155b6118bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016108e7565b80611970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016108e7565b67ffffffffffffffff87166000908152600660209081526040918290205460095492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b611a4a6133ed565b60045467ffffffffffffffff9081169088161115611b10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a4016108e7565b60045467ffffffffffffffff90811690871611611bd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a4016108e7565b67ffffffffffffffff80881660009081526002602052604080822054928916825290205481611c86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f74206578697374000060648201526084016108e7565b80611574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f74206578697374000060648201526084016108e7565b60035460009067ffffffffffffffff7001000000000000000000000000000000008204811691611d629178010000000000000000000000000000000000000000000000009091041660016144f8565b611d6c9190614385565b611d889067ffffffffffffffff16670de0b6b3a76400006143c5565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611e40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108e7565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe6906117b990831515815260200190565b611ec96133ed565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b600080546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829162010000900473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015611f79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f9d9190614334565b60045460035491925060009167ffffffffffffffff918216916801000000000000000082048116916120029170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614385565b61200c91906144f8565b6120169190614385565b67ffffffffffffffff16905061202c8183614524565b9250505090565b61203b6133ed565b6003805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b61208a6133ed565b600a6120968282614586565b5050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461214d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108e7565b60086121598282614586565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b20816040516117b99190613acf565b60045460009067ffffffffffffffff868116911614612250576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a4016108e7565b8467ffffffffffffffff168467ffffffffffffffff1611612319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a4016108e7565b60035467ffffffffffffffff68010000000000000000909104811690851611156123eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016108e7565b60006123f9868686866117d8565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161242e9190614402565b602060405180830381855afa15801561244b573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061246e9190614334565b612478919061444d565b979650505050505050565b600054610100900460ff16158080156124a35750600054600160ff909116105b806124bd5750303b1580156124bd575060005460ff166001145b612549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016108e7565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156125a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602178155600780549092168b841617909155805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f8889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c01000000000000000000000000000000000000000000000000000000008715150217905560086126e68582614586565b50600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600a6127278382614586565b5061273061361c565b801561279357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461287c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108e7565b805180612931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108e7565b60035467ffffffffffffffff7801000000000000000000000000000000000000000000000000820481169161297c9184917001000000000000000000000000000000009004166146a0565b1115612a0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016108e7565b60035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205491937001000000000000000000000000000000009004909216915b84811015612d75576000868281518110612a6a57612a6a6142af565b602002602001015190508380612a7f9061430d565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114612bd8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016108e7565b612be36001886143ae565b8303612cbb574262093a808360400151612bfd91906144f8565b67ffffffffffffffff161115612cbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016108e7565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612d5d9061430d565b96505050508080612d6d9061434d565b915050612a4e565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260026020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612f22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108e7565b6000612f2c611d13565b905081811115612fbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016108e7565b61ea60835110613050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016108e7565b60005461307b9062010000900473ffffffffffffffffffffffffffffffffffffffff1633308461346e565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa1580156130eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310f9190614334565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff169060186131498361430d565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050838051906020012081426040516020016131c293929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260019093529120553233036132b057600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261330d565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613304939291906146b8565b60405180910390a25b50505050565b61331b6133ed565b73ffffffffffffffffffffffffffffffffffffffff81166133be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108e7565b6133c7816135a5565b50565b6133d26133ed565b67ffffffffffffffff16600090815260066020526040902055565b603d5473ffffffffffffffffffffffffffffffffffffffff1633146117d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108e7565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261330d9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526136bb565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526135a09084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016134c8565b505050565b603d805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166136b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e7565b6117d66137c7565b600061371d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166138679092919063ffffffff16565b8051909150156135a0578080602001905181019061373b91906144db565b6135a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108e7565b600054610100900460ff1661385e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e7565b6117d6336135a5565b60606138768484600085613880565b90505b9392505050565b606082471015613912576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016108e7565b73ffffffffffffffffffffffffffffffffffffffff85163b613990576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516139b99190614402565b60006040518083038185875af1925050503d80600081146139f6576040519150601f19603f3d011682016040523d82523d6000602084013e6139fb565b606091505b509150915061247882828660608315613a15575081613879565b825115613a255782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e79190613acf565b60005b83811015613a74578181015183820152602001613a5c565b8381111561330d5750506000910152565b60008151808452613a9d816020860160208601613a59565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006138796020830184613a85565b803567ffffffffffffffff81168114613afa57600080fd5b919050565b60008060408385031215613b1257600080fd5b613b1b83613ae2565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613b7b57613b7b613b29565b60405290565b6040516060810167ffffffffffffffff81118282101715613b7b57613b7b613b29565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613beb57613beb613b29565b604052919050565b600067ffffffffffffffff821115613c0d57613c0d613b29565b5060051b60200190565b600082601f830112613c2857600080fd5b813567ffffffffffffffff811115613c4257613c42613b29565b613c7360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613ba4565b818152846020838601011115613c8857600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613cb857600080fd5b823567ffffffffffffffff80821115613cd057600080fd5b818501915085601f830112613ce457600080fd5b8135613cf7613cf282613bf3565b613ba4565b81815260059190911b83018401908481019088831115613d1657600080fd5b8585015b83811015613dcd57803585811115613d325760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001811315613d685760008081fd5b613d70613b58565b8983013588811115613d825760008081fd5b613d908e8c83870101613c17565b8252506040808401358b8301526060613daa818601613ae2565b82840152613db9848601613ae2565b908301525085525050918601918601613d1a565b5098975050505050505050565b600060208284031215613dec57600080fd5b61387982613ae2565b73ffffffffffffffffffffffffffffffffffffffff811681146133c757600080fd5b8035613afa81613df5565b600060208284031215613e3457600080fd5b813561387981613df5565b8060408101831015613e5057600080fd5b92915050565b6000806000806000806000610180888a031215613e7257600080fd5b613e7b88613ae2565b9650613e8960208901613ae2565b95506040880135945060608801359350613ea68960808a01613e3f565b9250610140880189811115613eba57600080fd5b60c089019250613eca8a82613e3f565b91505092959891949750929550565b600080600080600060a08688031215613ef157600080fd5b85359450602086013567ffffffffffffffff811115613f0f57600080fd5b613f1b88828901613c17565b94505060408601359250613f3160608701613ae2565b91506080860135613f4181613df5565b809150509295509295909350565b60008060008060808587031215613f6557600080fd5b613f6e85613ae2565b9350613f7c60208601613ae2565b93969395505050506040820135916060013590565b80151581146133c757600080fd5b8035613afa81613f91565b600060208284031215613fbc57600080fd5b813561387981613f91565b600060208284031215613fd957600080fd5b813567ffffffffffffffff811115613ff057600080fd5b613ffc84828501613c17565b949350505050565b60008060008060008060008060006101208a8c03121561402357600080fd5b893561402e81613df5565b985060208a013561403e81613df5565b975061404c60408b01613e17565b965060608a0135955061406160808b01613e17565b945061406f60a08b01613f9f565b935060c08a013567ffffffffffffffff8082111561408c57600080fd5b6140988d838e01613c17565b94506140a660e08d01613ae2565b93506101008c01359150808211156140bd57600080fd5b506140ca8c828d01613c17565b9150509295985092959850929598565b600060208083850312156140ed57600080fd5b823567ffffffffffffffff8082111561410557600080fd5b818501915085601f83011261411957600080fd5b8135614127613cf282613bf3565b81815260059190911b8301840190848101908883111561414657600080fd5b8585015b83811015613dcd578035858111156141625760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018113156141985760008081fd5b6141a0613b81565b89830135888111156141b25760008081fd5b6141c08e8c83870101613c17565b8252506040808401358b8301526141d8838501613ae2565b908201528552505091860191860161414a565b600080604083850312156141fe57600080fd5b823567ffffffffffffffff81111561421557600080fd5b61422185828601613c17565b95602094909401359450505050565b6000806040838503121561424357600080fd5b8235915061425360208401613ae2565b90509250929050565b600181811c9082168061427057607f821691505b6020821081036142a9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681810361432a5761432a6142de565b6001019392505050565b60006020828403121561434657600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361437e5761437e6142de565b5060010190565b600067ffffffffffffffff838116908316818110156143a6576143a66142de565b039392505050565b6000828210156143c0576143c06142de565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143fd576143fd6142de565b500290565b60008251614414818460208701613a59565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261445c5761445c61441e565b500690565b61012081016040808784376000838201818152879190815b600281101561449957848483379084018281529284019290600101614479565b5050828760c0870137610100850181815286935091505b60018110156144cf5782518252602092830192909101906001016144b0565b50505095945050505050565b6000602082840312156144ed57600080fd5b815161387981613f91565b600067ffffffffffffffff80831681851680830382111561451b5761451b6142de565b01949350505050565b6000826145335761453361441e565b500490565b601f8211156135a057600081815260208120601f850160051c8101602086101561455f5750805b601f850160051c820191505b8181101561457e5782815560010161456b565b505050505050565b815167ffffffffffffffff8111156145a0576145a0613b29565b6145b4816145ae845461425c565b84614538565b602080601f83116001811461460757600084156145d15750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561457e565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561465457888601518255948401946001909101908401614635565b508582101561469057878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156146b3576146b36142de565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006146ed6060830184613a85565b9594505050505056fea264697066735822122011cc0f88e8f948fc39973e6a5afa2bbcf5b2d81afd9943bfa71ec264bf4da45e64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102de5760003560e01c806399f5634e11610186578063d02103ca116100e3578063e7a7ed0211610097578063f2fde38b11610071578063f2fde38b14610750578063f755276114610763578063fe16564f1461077257600080fd5b8063e7a7ed02146106ed578063e8bf92ed1461071d578063eaeb077b1461073d57600080fd5b8063d2fd1b31116100c8578063d2fd1b311461068a578063d8d1091b1461069d578063d8f54db0146106b057600080fd5b8063d02103ca14610657578063d0ae98dd1461067757600080fd5b8063b4d63f581161013a578063c0cad3021161011f578063c0cad30214610605578063c89e42df14610618578063cfa8ed471461062b57600080fd5b8063b4d63f58146105bf578063b6b0b097146105df57600080fd5b8063ab9fc5ef1161016b578063ab9fc5ef14610598578063adc879e9146105a2578063b02286c0146105b657600080fd5b806399f5634e1461057d5780639b7967601461058557600080fd5b8063574f649e1161023f578063748608de116101f35780638c4a0af7116101cd5780638c4a0af7146105185780638da5cb5b1461052b57806396dc3d391461056a57600080fd5b8063748608de146104e957806379847057146104fc5780637fcb36531461050457600080fd5b80636ff512cc116102245780636ff512cc146104bb578063715018a6146104ce5780637152facf146104d657600080fd5b8063574f649e146103fa5780636b8616ce1461049b57600080fd5b80634560526711610296578063542028d51161027b578063542028d5146103cc5780635437988d146103d457806355b925e6146103e757600080fd5b806345605267146103765780635392c5e01461039e57600080fd5b80631a26da14116102c75780631a26da141461032e5780633c15826714610343578063423fa8561461035657600080fd5b8063107bf28c146102e357806319d8ac6114610301575b600080fd5b6102eb610785565b6040516102f89190613acf565b60405180910390f35b6003546103159067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102f8565b61034161033c366004613aff565b610813565b005b610341610351366004613ca5565b610838565b6003546103159068010000000000000000900467ffffffffffffffff1681565b60035461031590700100000000000000000000000000000000900467ffffffffffffffff1681565b6103be6103ac366004613dda565b60066020526000908152604090205481565b6040519081526020016102f8565b6102eb61116a565b6103416103e2366004613e22565b611177565b6103416103f5366004613e56565b6111c6565b6103be610408366004613ed9565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b6103be6104a9366004613dda565b60016020526000908152604090205481565b6103416104c9366004613e22565b611689565b6103416117c4565b6102eb6104e4366004613f4f565b6117d8565b6103416104f7366004613e56565b611a42565b6103be611d13565b6004546103159067ffffffffffffffff1681565b610341610526366004613faa565b611d8d565b603d5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102f8565b610341610578366004613dda565b611ec1565b6103be611f04565b610341610593366004613dda565b612033565b61031562093a8081565b6009546103159067ffffffffffffffff1681565b6103be61ea6081565b6103be6105cd366004613dda565b60026020526000908152604090205481565b6000546105459062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b610341610613366004613fc7565b612082565b610341610626366004613fc7565b61209a565b6004546105459068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6005546105459073ffffffffffffffffffffffffffffffffffffffff1681565b6103be610685366004613f4f565b612189565b610341610698366004614004565b612483565b6103416106ab3660046140da565b61279f565b6004546106dd907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016102f8565b600354610315907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b6007546105459073ffffffffffffffffffffffffffffffffffffffff1681565b61034161074b3660046141eb565b612e45565b61034161075e366004613e22565b613313565b6103be67016345785d8a000081565b610341610780366004614230565b6133ca565b600a80546107929061425c565b80601f01602080910402602001604051908101604052809291908181526020018280546107be9061425c565b801561080b5780601f106107e05761010080835404028352916020019161080b565b820191906000526020600020905b8154815290600101906020018083116107ee57829003601f168201915b505050505081565b61081b6133ed565b67ffffffffffffffff909116600090815260026020526040902055565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b805160035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610f40576000878281518110610958576109586142af565b602002602001015190506000816060015167ffffffffffffffff161115610bc357836109838161430d565b9450506000816000015180519060200120826020015183606001516040516020016109e693929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114610aeb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108e7565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610bbd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016108e7565b50610d91565b60208101511580610c72575060055460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610c2c9160040190815260200190565b6020604051808303816000875af1158015610c4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6f9190614334565b15155b610cfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016108e7565b80515161ea6011610d91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016108e7565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610dc7575042816040015167ffffffffffffffff1611155b610e79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016108e7565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610f229061430d565b95505080604001519550508080610f389061434d565b91505061093c565b5060035467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610ffd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016108e7565b60035460009061102b90700100000000000000000000000000000000900467ffffffffffffffff1684614385565b61103f9067ffffffffffffffff16876143ae565b6003805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152600260205260409020839055905061111d33306110f68467016345785d8a00006143c5565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1692919061346e565b6003546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b600880546107929061425c565b61117f6133ed565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60045467ffffffffffffffff908116908816111561128c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a4016108e7565b60045467ffffffffffffffff90811690871611611351576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a4016108e7565b600061135f888888886117d8565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516113949190614402565b602060405180830381855afa1580156113b1573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906113d49190614334565b6113de919061444d565b6007546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916114489189918991899190600401614461565b602060405180830381865afa158015611465573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148991906144db565b611515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016108e7565b6004546115749033906115329067ffffffffffffffff168b614385565b67ffffffffffffffff16611544611f04565b61154e91906143c5565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16919061354a565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a1690811782556000908152600660205260409081902088905560055490517f33d6247d00000000000000000000000000000000000000000000000000000000815291820189905273ffffffffffffffffffffffffffffffffffffffff16906333d6247d90602401600060405180830381600087803b15801561162557600080fd5b505af1158015611639573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461173c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108e7565b600480547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b6117cc6133ed565b6117d660006135a5565b565b67ffffffffffffffff80851660008181526002602052604080822054938716825290205460609291158061180b57508115155b6118bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016108e7565b80611970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016108e7565b67ffffffffffffffff87166000908152600660209081526040918290205460095492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b611a4a6133ed565b60045467ffffffffffffffff9081169088161115611b10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a4016108e7565b60045467ffffffffffffffff90811690871611611bd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a4016108e7565b67ffffffffffffffff80881660009081526002602052604080822054928916825290205481611c86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f74206578697374000060648201526084016108e7565b80611574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f74206578697374000060648201526084016108e7565b60035460009067ffffffffffffffff7001000000000000000000000000000000008204811691611d629178010000000000000000000000000000000000000000000000009091041660016144f8565b611d6c9190614385565b611d889067ffffffffffffffff16670de0b6b3a76400006143c5565b905090565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611e40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108e7565b600480548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe6906117b990831515815260200190565b611ec96133ed565b600480547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b600080546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152829162010000900473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015611f79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f9d9190614334565b60045460035491925060009167ffffffffffffffff918216916801000000000000000082048116916120029170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614385565b61200c91906144f8565b6120169190614385565b67ffffffffffffffff16905061202c8183614524565b9250505090565b61203b6133ed565b6003805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b61208a6133ed565b600a6120968282614586565b5050565b60045468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461214d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016108e7565b60086121598282614586565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b20816040516117b99190613acf565b60045460009067ffffffffffffffff868116911614612250576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a4016108e7565b8467ffffffffffffffff168467ffffffffffffffff1611612319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a4016108e7565b60035467ffffffffffffffff68010000000000000000909104811690851611156123eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016108e7565b60006123f9868686866117d8565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161242e9190614402565b602060405180830381855afa15801561244b573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061246e9190614334565b612478919061444d565b979650505050505050565b600054610100900460ff16158080156124a35750600054600160ff909116105b806124bd5750303b1580156124bd575060005460ff166001145b612549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016108e7565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156125a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b600580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8d811691909117909255600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100008d851602178155600780549092168b841617909155805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f8889055600480547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928916929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c01000000000000000000000000000000000000000000000000000000008715150217905560086126e68582614586565b50600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8516179055600a6127278382614586565b5061273061361c565b801561279357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461287c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108e7565b805180612931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016108e7565b60035467ffffffffffffffff7801000000000000000000000000000000000000000000000000820481169161297c9184917001000000000000000000000000000000009004166146a0565b1115612a0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016108e7565b60035467ffffffffffffffff680100000000000000008204811660008181526002602052604081205491937001000000000000000000000000000000009004909216915b84811015612d75576000868281518110612a6a57612a6a6142af565b602002602001015190508380612a7f9061430d565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260019093529120549091508114612bd8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016108e7565b612be36001886143ae565b8303612cbb574262093a808360400151612bfd91906144f8565b67ffffffffffffffff161115612cbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016108e7565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612d5d9061430d565b96505050508080612d6d9061434d565b915050612a4e565b50600380544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260026020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b6004547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612f22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016108e7565b6000612f2c611d13565b905081811115612fbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016108e7565b61ea60835110613050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016108e7565b60005461307b9062010000900473ffffffffffffffffffffffffffffffffffffffff1633308461346e565b600554604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa1580156130eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310f9190614334565b60038054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff169060186131498361430d565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050838051906020012081426040516020016131c293929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291815281516020928301206003547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260019093529120553233036132b057600354604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261330d565b600360189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613304939291906146b8565b60405180910390a25b50505050565b61331b6133ed565b73ffffffffffffffffffffffffffffffffffffffff81166133be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108e7565b6133c7816135a5565b50565b6133d26133ed565b67ffffffffffffffff16600090815260066020526040902055565b603d5473ffffffffffffffffffffffffffffffffffffffff1633146117d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108e7565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261330d9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526136bb565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526135a09084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016134c8565b505050565b603d805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166136b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e7565b6117d66137c7565b600061371d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166138679092919063ffffffff16565b8051909150156135a0578080602001905181019061373b91906144db565b6135a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108e7565b600054610100900460ff1661385e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e7565b6117d6336135a5565b60606138768484600085613880565b90505b9392505050565b606082471015613912576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016108e7565b73ffffffffffffffffffffffffffffffffffffffff85163b613990576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516139b99190614402565b60006040518083038185875af1925050503d80600081146139f6576040519150601f19603f3d011682016040523d82523d6000602084013e6139fb565b606091505b509150915061247882828660608315613a15575081613879565b825115613a255782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e79190613acf565b60005b83811015613a74578181015183820152602001613a5c565b8381111561330d5750506000910152565b60008151808452613a9d816020860160208601613a59565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006138796020830184613a85565b803567ffffffffffffffff81168114613afa57600080fd5b919050565b60008060408385031215613b1257600080fd5b613b1b83613ae2565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613b7b57613b7b613b29565b60405290565b6040516060810167ffffffffffffffff81118282101715613b7b57613b7b613b29565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613beb57613beb613b29565b604052919050565b600067ffffffffffffffff821115613c0d57613c0d613b29565b5060051b60200190565b600082601f830112613c2857600080fd5b813567ffffffffffffffff811115613c4257613c42613b29565b613c7360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613ba4565b818152846020838601011115613c8857600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613cb857600080fd5b823567ffffffffffffffff80821115613cd057600080fd5b818501915085601f830112613ce457600080fd5b8135613cf7613cf282613bf3565b613ba4565b81815260059190911b83018401908481019088831115613d1657600080fd5b8585015b83811015613dcd57803585811115613d325760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001811315613d685760008081fd5b613d70613b58565b8983013588811115613d825760008081fd5b613d908e8c83870101613c17565b8252506040808401358b8301526060613daa818601613ae2565b82840152613db9848601613ae2565b908301525085525050918601918601613d1a565b5098975050505050505050565b600060208284031215613dec57600080fd5b61387982613ae2565b73ffffffffffffffffffffffffffffffffffffffff811681146133c757600080fd5b8035613afa81613df5565b600060208284031215613e3457600080fd5b813561387981613df5565b8060408101831015613e5057600080fd5b92915050565b6000806000806000806000610180888a031215613e7257600080fd5b613e7b88613ae2565b9650613e8960208901613ae2565b95506040880135945060608801359350613ea68960808a01613e3f565b9250610140880189811115613eba57600080fd5b60c089019250613eca8a82613e3f565b91505092959891949750929550565b600080600080600060a08688031215613ef157600080fd5b85359450602086013567ffffffffffffffff811115613f0f57600080fd5b613f1b88828901613c17565b94505060408601359250613f3160608701613ae2565b91506080860135613f4181613df5565b809150509295509295909350565b60008060008060808587031215613f6557600080fd5b613f6e85613ae2565b9350613f7c60208601613ae2565b93969395505050506040820135916060013590565b80151581146133c757600080fd5b8035613afa81613f91565b600060208284031215613fbc57600080fd5b813561387981613f91565b600060208284031215613fd957600080fd5b813567ffffffffffffffff811115613ff057600080fd5b613ffc84828501613c17565b949350505050565b60008060008060008060008060006101208a8c03121561402357600080fd5b893561402e81613df5565b985060208a013561403e81613df5565b975061404c60408b01613e17565b965060608a0135955061406160808b01613e17565b945061406f60a08b01613f9f565b935060c08a013567ffffffffffffffff8082111561408c57600080fd5b6140988d838e01613c17565b94506140a660e08d01613ae2565b93506101008c01359150808211156140bd57600080fd5b506140ca8c828d01613c17565b9150509295985092959850929598565b600060208083850312156140ed57600080fd5b823567ffffffffffffffff8082111561410557600080fd5b818501915085601f83011261411957600080fd5b8135614127613cf282613bf3565b81815260059190911b8301840190848101908883111561414657600080fd5b8585015b83811015613dcd578035858111156141625760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018113156141985760008081fd5b6141a0613b81565b89830135888111156141b25760008081fd5b6141c08e8c83870101613c17565b8252506040808401358b8301526141d8838501613ae2565b908201528552505091860191860161414a565b600080604083850312156141fe57600080fd5b823567ffffffffffffffff81111561421557600080fd5b61422185828601613c17565b95602094909401359450505050565b6000806040838503121561424357600080fd5b8235915061425360208401613ae2565b90509250929050565b600181811c9082168061427057607f821691505b6020821081036142a9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681810361432a5761432a6142de565b6001019392505050565b60006020828403121561434657600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361437e5761437e6142de565b5060010190565b600067ffffffffffffffff838116908316818110156143a6576143a66142de565b039392505050565b6000828210156143c0576143c06142de565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143fd576143fd6142de565b500290565b60008251614414818460208701613a59565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261445c5761445c61441e565b500690565b61012081016040808784376000838201818152879190815b600281101561449957848483379084018281529284019290600101614479565b5050828760c0870137610100850181815286935091505b60018110156144cf5782518252602092830192909101906001016144b0565b50505095945050505050565b6000602082840312156144ed57600080fd5b815161387981613f91565b600067ffffffffffffffff80831681851680830382111561451b5761451b6142de565b01949350505050565b6000826145335761453361441e565b500490565b601f8211156135a057600081815260208120601f850160051c8101602086101561455f5750805b601f850160051c820191505b8181101561457e5782815560010161456b565b505050505050565b815167ffffffffffffffff8111156145a0576145a0613b29565b6145b4816145ae845461425c565b84614538565b602080601f83116001811461460757600084156145d15750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561457e565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561465457888601518255948401946001909101908401614635565b508582101561469057878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156146b3576146b36142de565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006146ed6060830184613a85565b9594505050505056fea264697066735822122011cc0f88e8f948fc39973e6a5afa2bbcf5b2d81afd9943bfa71ec264bf4da45e64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506151dd806100206000396000f3fe608060405234801561001057600080fd5b50600436106103205760003560e01c806396dc3d39116101a7578063cfa8ed47116100ee578063e7a7ed0211610097578063f2fde38b11610071578063f2fde38b146107fa578063f75527611461080d578063fe16564f1461081c57600080fd5b8063e7a7ed0214610797578063e8bf92ed146107c7578063eaeb077b146107e757600080fd5b8063d8d1091b116100c8578063d8d1091b1461074f578063d8f54db014610762578063dbc169761461078f57600080fd5b8063cfa8ed47146106f0578063d02103ca1461071c578063d0ae98dd1461073c57600080fd5b8063b02286c011610150578063c0cad3021161012a578063c0cad302146106b7578063c89e42df146106ca578063ca810366146106dd57600080fd5b8063b02286c01461066e578063b4d63f5814610677578063b6b0b0971461069757600080fd5b8063a3c573eb11610181578063a3c573eb14610630578063ab9fc5ef14610650578063adc879e91461065a57600080fd5b806396dc3d391461060257806399f5634e146106155780639b7967601461061d57600080fd5b8063574f649e1161026b5780637152facf116102145780637fcb3653116101ee5780637fcb3653146105bd5780638c4a0af7146105d15780638da5cb5b146105e457600080fd5b80637152facf1461058f578063748608de146105a257806379847057146105b557600080fd5b80636b8616ce116102455780636b8616ce146105545780636ff512cc14610574578063715018a61461058757600080fd5b8063574f649e146104895780635c975abb1461052a5780636766f09d1461054157600080fd5b8063423fa856116102cd578063542028d5116102a7578063542028d51461045b5780635437988d1461046357806355b925e61461047657600080fd5b8063423fa856146103e557806345605267146104055780635392c5e01461042d57600080fd5b80632072f6c5116102fe5780632072f6c51461038557806327eb6c0f1461038d5780633c158267146103d257600080fd5b8063107bf28c1461032557806319d8ac61146103435780631a26da1414610370575b600080fd5b61032d61082f565b60405161033a9190614572565b60405180910390f35b609a546103579067ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161033a565b61038361037e3660046145a2565b6108bd565b005b6103836108e2565b60a2546103ad9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161033a565b6103836103e0366004614748565b6108f4565b609a546103579068010000000000000000900467ffffffffffffffff1681565b609a5461035790700100000000000000000000000000000000900467ffffffffffffffff1681565b61044d61043b36600461487d565b609d6020526000908152604090205481565b60405190815260200161033a565b61032d611228565b6103836104713660046148c5565b611235565b6103836104843660046148f9565b611284565b61044d61049736600461497c565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b60655460ff165b604051901515815260200161033a565b61038361054f3660046148f9565b61174d565b61044d61056236600461487d565b60986020526000908152604090205481565b6103836105823660046148c5565b611d83565b610383611ebe565b61032d61059d3660046149f2565b611ed0565b6103836105b03660046148f9565b61213a565b61044d61240b565b609b546103579067ffffffffffffffff1681565b6103836105df366004614a4d565b612485565b60335473ffffffffffffffffffffffffffffffffffffffff166103ad565b61038361061036600461487d565b6125b9565b61044d6125fc565b61038361062b36600461487d565b612729565b60a3546103ad9073ffffffffffffffffffffffffffffffffffffffff1681565b61035762093a8081565b60a0546103579067ffffffffffffffff1681565b61044d61ea6081565b61044d61068536600461487d565b60996020526000908152604090205481565b6097546103ad9073ffffffffffffffffffffffffffffffffffffffff1681565b6103836106c5366004614a6a565b612778565b6103836106d8366004614a6a565b612790565b6103836106eb366004614aa7565b61287f565b609b546103ad9068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b609c546103ad9073ffffffffffffffffffffffffffffffffffffffff1681565b61044d61074a3660046149f2565b612bc0565b61038361075d366004614b8b565b612eba565b609b54610531907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610383613568565b609a54610357907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b609e546103ad9073ffffffffffffffffffffffffffffffffffffffff1681565b6103836107f5366004614c9c565b613617565b6103836108083660046148c5565b613ae7565b61044d67016345785d8a000081565b61038361082a366004614ce1565b613b9e565b60a1805461083c90614d0d565b80601f016020809104026020016040519081016040528092919081815260200182805461086890614d0d565b80156108b55780601f1061088a576101008083540402835291602001916108b5565b820191906000526020600020905b81548152906001019060200180831161089857829003601f168201915b505050505081565b6108c5613bc1565b67ffffffffffffffff909116600090815260996020526040902055565b6108ea613bc1565b6108f2613c42565b565b6108fc613cc8565b609b5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146109b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b8051609a5467ffffffffffffffff680100000000000000008204811660008181526099602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015611004576000878281518110610a1c57610a1c614d60565b602002602001015190506000816060015167ffffffffffffffff161115610c875783610a4781614dbe565b945050600081600001518051906020012082602001518360600151604051602001610aaa93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260989093529120549091508114610baf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016109ab565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610c81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016109ab565b50610e55565b60208101511580610d365750609c5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610cf09160040190815260200190565b6020604051808303816000875af1158015610d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d339190614de5565b15155b610dc2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016109ab565b80515161ea6011610e55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016109ab565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610e8b575042816040015167ffffffffffffffff1611155b610f3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016109ab565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610fe690614dbe565b95505080604001519550508080610ffc90614dfe565b915050610a00565b50609a5467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156110c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016109ab565b609a546000906110ef90700100000000000000000000000000000000900467ffffffffffffffff1684614e36565b6111039067ffffffffffffffff1687614e5f565b609a805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c1693909317939093179290921691909117909155600090815260996020526040902083905590506111db33306111ba8467016345785d8a0000614e76565b60975473ffffffffffffffffffffffffffffffffffffffff16929190613d35565b609a546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b609f805461083c90614d0d565b61123d613bc1565b609e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61128c613cc8565b609b5467ffffffffffffffff9081169088161115611352576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016109ab565b609b5467ffffffffffffffff90811690871611611417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016109ab565b600061142588888888611ed0565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161145a9190614eb3565b602060405180830381855afa158015611477573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061149a9190614de5565b6114a49190614efe565b609e546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d9161150e9189918991899190600401614f12565b602060405180830381865afa15801561152b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154f9190614f8c565b6115db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016109ab565b609b546116349033906115f89067ffffffffffffffff168b614e36565b67ffffffffffffffff1661160a6125fc565b6116149190614e76565b60975473ffffffffffffffffffffffffffffffffffffffff169190613e11565b609b80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152609d602052604090819020879055609c5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b1580156116e957600080fd5b505af11580156116fd573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b8567ffffffffffffffff168767ffffffffffffffff1610611816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e65774261746368206d75737420626520626960648201527f67676572207468616e20696e69744e756d426174636800000000000000000000608482015260a4016109ab565b609b5467ffffffffffffffff90811690871611156118dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d4261746368206d757374206265206c657360648201527f73207468616e206c617374566572696669656442617463680000000000000000608482015260a4016109ab565b67ffffffffffffffff8716158061190b575067ffffffffffffffff87166000908152609d602052604090205415155b6119bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d426174636820737461746520726f6f742060648201527f646f6573206e6f74206578697374000000000000000000000000000000000000608482015260a4016109ab565b67ffffffffffffffff86166000908152609d6020526040902054611a89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e6577426174636820737461746520726f6f7460648201527f20646f6573206e6f742065786973740000000000000000000000000000000000608482015260a4016109ab565b6000611a9788888888611ed0565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051611acc9190614eb3565b602060405180830381855afa158015611ae9573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611b0c9190614de5565b611b169190614efe565b609e546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611b809189918991899190600401614f12565b602060405180830381865afa158015611b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc19190614f8c565b611c4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20494e56414c49445f50524f4f46000000000000000000000060648201526084016109ab565b67ffffffffffffffff88166000908152609d6020526040902054869003611d1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2073746f72656420726f6f74206d757374206265206469666660648201527f6572656e74207468616e206e657720737461746520726f6f7400000000000000608482015260a4016109ab565b67ffffffffffffffff88166000908152609d60209081526040918290205482519081529081018890527fe579d6d18f02941e1d0f59bff70f1b2c894edc991badab38343786df2846fe55910160405180910390a1611d78613c42565b505050505050505050565b609b5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611e36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016109ab565b609b80547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b611ec6613bc1565b6108f26000613e6c565b67ffffffffffffffff808516600081815260996020526040808220549387168252902054606092911580611f0357508115155b611fb5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016109ab565b80612068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016109ab565b67ffffffffffffffff87166000908152609d60209081526040918290205460a05492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b612142613bc1565b609b5467ffffffffffffffff9081169088161115612208576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a4016109ab565b609b5467ffffffffffffffff908116908716116122cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a4016109ab565b67ffffffffffffffff8088166000908152609960205260408082205492891682529020548161237e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f74206578697374000060648201526084016109ab565b80611634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f74206578697374000060648201526084016109ab565b609a5460009067ffffffffffffffff700100000000000000000000000000000000820481169161245a917801000000000000000000000000000000000000000000000000909104166001614fa9565b6124649190614e36565b6124809067ffffffffffffffff16670de0b6b3a7640000614e76565b905090565b609b5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016109ab565b609b80548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690611eb390831515815260200190565b6125c1613bc1565b609b80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6097546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829173ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa15801561266f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126939190614de5565b609b54609a5491925060009167ffffffffffffffff918216916801000000000000000082048116916126f89170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614e36565b6127029190614fa9565b61270c9190614e36565b67ffffffffffffffff1690506127228183614fd5565b9250505090565b612731613bc1565b609a805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b612780613bc1565b60a161278c8282615037565b5050565b609b5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016109ab565b609f61284f8282615037565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051611eb39190614572565b600054610100900460ff161580801561289f5750600054600160ff909116105b806128b95750303b1580156128b9575060005460ff166001145b612945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016109ab565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156129a357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b609c80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8e8116919091179092556097805482168d8416179055609e80549091168b831617905560008052609d6020527fc5dc36ae4e7617e4c4d23ddfcde33c79e9ed64c300aed766a9288a6b9b31f63d899055609b80547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928a16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000088151502179055609f612abe8682615037565b5060a080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861617905560a1612aff8482615037565b5060a380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055612b48613ee3565b612b50613f83565b8015612bb357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b609b5460009067ffffffffffffffff868116911614612c87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a4016109ab565b8467ffffffffffffffff168467ffffffffffffffff1611612d50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a4016109ab565b609a5467ffffffffffffffff6801000000000000000090910481169085161115612e22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016109ab565b6000612e3086868686611ed0565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051612e659190614eb3565b602060405180830381855afa158015612e82573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612ea59190614de5565b612eaf9190614efe565b979650505050505050565b612ec2613cc8565b609b547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612f9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016109ab565b805180613054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016109ab565b609a5467ffffffffffffffff7801000000000000000000000000000000000000000000000000820481169161309f918491700100000000000000000000000000000000900416615151565b111561312d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016109ab565b609a5467ffffffffffffffff680100000000000000008204811660008181526099602052604081205491937001000000000000000000000000000000009004909216915b8481101561349857600086828151811061318d5761318d614d60565b6020026020010151905083806131a290614dbe565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff88166000908152609890935291205490915081146132fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016109ab565b613306600188614e5f565b83036133de574262093a8083604001516133209190614fa9565b67ffffffffffffffff1611156133de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016109ab565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209350858061348090614dbe565b9650505050808061349090614dfe565b915050613171565b50609a80544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260996020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60a25473ffffffffffffffffffffffffffffffffffffffff16331461360f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016109ab565b6108f2614044565b61361f613cc8565b609b547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146136fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016109ab565b600061370661240b565b905081811115613798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016109ab565b61ea6083511061382a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016109ab565b60975461384f9073ffffffffffffffffffffffffffffffffffffffff16333084613d35565b609c54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa1580156138bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138e39190614de5565b609a8054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff1690601861391d83614dbe565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161399693929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181529181528151602092830120609a547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526098909352912055323303613a8457609a54604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613ae1565b609a60189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613ad893929190615169565b60405180910390a25b50505050565b613aef613bc1565b73ffffffffffffffffffffffffffffffffffffffff8116613b92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016109ab565b613b9b81613e6c565b50565b613ba6613bc1565b67ffffffffffffffff166000908152609d6020526040902055565b60335473ffffffffffffffffffffffffffffffffffffffff1633146108f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109ab565b613c4a6140b6565b60a360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613cb457600080fd5b505af1158015613ae1573d6000803e3d6000fd5b60655460ff16156108f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016109ab565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052613ae19085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261413b565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052613e679084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401613d8f565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16613f7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109ab565b6108f233613e6c565b600054610100900460ff1661401a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109ab565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b61404c614247565b60a360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613cb457600080fd5b6140be613cc8565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586141113390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b600061419d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661429e9092919063ffffffff16565b805190915015613e6757808060200190518101906141bb9190614f8c565b613e67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016109ab565b61424f6142b7565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33614111565b60606142ad8484600085614323565b90505b9392505050565b60655460ff166108f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016109ab565b6060824710156143b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016109ab565b73ffffffffffffffffffffffffffffffffffffffff85163b614433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109ab565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161445c9190614eb3565b60006040518083038185875af1925050503d8060008114614499576040519150601f19603f3d011682016040523d82523d6000602084013e61449e565b606091505b5091509150612eaf828286606083156144b85750816142b0565b8251156144c85782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ab9190614572565b60005b838110156145175781810151838201526020016144ff565b83811115613ae15750506000910152565b600081518084526145408160208601602086016144fc565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006142b06020830184614528565b803567ffffffffffffffff8116811461459d57600080fd5b919050565b600080604083850312156145b557600080fd5b6145be83614585565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171561461e5761461e6145cc565b60405290565b6040516060810167ffffffffffffffff8111828210171561461e5761461e6145cc565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561468e5761468e6145cc565b604052919050565b600067ffffffffffffffff8211156146b0576146b06145cc565b5060051b60200190565b600082601f8301126146cb57600080fd5b813567ffffffffffffffff8111156146e5576146e56145cc565b61471660207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614647565b81815284602083860101111561472b57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561475b57600080fd5b823567ffffffffffffffff8082111561477357600080fd5b818501915085601f83011261478757600080fd5b813561479a61479582614696565b614647565b81815260059190911b830184019084810190888311156147b957600080fd5b8585015b83811015614870578035858111156147d55760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181131561480b5760008081fd5b6148136145fb565b89830135888111156148255760008081fd5b6148338e8c838701016146ba565b8252506040808401358b830152606061484d818601614585565b8284015261485c848601614585565b9083015250855250509186019186016147bd565b5098975050505050505050565b60006020828403121561488f57600080fd5b6142b082614585565b73ffffffffffffffffffffffffffffffffffffffff81168114613b9b57600080fd5b803561459d81614898565b6000602082840312156148d757600080fd5b81356142b081614898565b80604081018310156148f357600080fd5b92915050565b6000806000806000806000610180888a03121561491557600080fd5b61491e88614585565b965061492c60208901614585565b955060408801359450606088013593506149498960808a016148e2565b925061014088018981111561495d57600080fd5b60c08901925061496d8a826148e2565b91505092959891949750929550565b600080600080600060a0868803121561499457600080fd5b85359450602086013567ffffffffffffffff8111156149b257600080fd5b6149be888289016146ba565b945050604086013592506149d460608701614585565b915060808601356149e481614898565b809150509295509295909350565b60008060008060808587031215614a0857600080fd5b614a1185614585565b9350614a1f60208601614585565b93969395505050506040820135916060013590565b8015158114613b9b57600080fd5b803561459d81614a34565b600060208284031215614a5f57600080fd5b81356142b081614a34565b600060208284031215614a7c57600080fd5b813567ffffffffffffffff811115614a9357600080fd5b614a9f848285016146ba565b949350505050565b6000806000806000806000806000806101408b8d031215614ac757600080fd5b614ad08b6148ba565b9950614ade60208c016148ba565b9850614aec60408c016148ba565b975060608b01359650614b0160808c016148ba565b9550614b0f60a08c01614a42565b945060c08b013567ffffffffffffffff80821115614b2c57600080fd5b614b388e838f016146ba565b9550614b4660e08e01614585565b94506101008d0135915080821115614b5d57600080fd5b50614b6a8d828e016146ba565b925050614b7a6101208c016148ba565b90509295989b9194979a5092959850565b60006020808385031215614b9e57600080fd5b823567ffffffffffffffff80821115614bb657600080fd5b818501915085601f830112614bca57600080fd5b8135614bd861479582614696565b81815260059190911b83018401908481019088831115614bf757600080fd5b8585015b8381101561487057803585811115614c135760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001811315614c495760008081fd5b614c51614624565b8983013588811115614c635760008081fd5b614c718e8c838701016146ba565b8252506040808401358b830152614c89838501614585565b9082015285525050918601918601614bfb565b60008060408385031215614caf57600080fd5b823567ffffffffffffffff811115614cc657600080fd5b614cd2858286016146ba565b95602094909401359450505050565b60008060408385031215614cf457600080fd5b82359150614d0460208401614585565b90509250929050565b600181811c90821680614d2157607f821691505b602082108103614d5a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614ddb57614ddb614d8f565b6001019392505050565b600060208284031215614df757600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e2f57614e2f614d8f565b5060010190565b600067ffffffffffffffff83811690831681811015614e5757614e57614d8f565b039392505050565b600082821015614e7157614e71614d8f565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614eae57614eae614d8f565b500290565b60008251614ec58184602087016144fc565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614f0d57614f0d614ecf565b500690565b61012081016040808784376000838201818152879190815b6002811015614f4a57848483379084018281529284019290600101614f2a565b5050828760c0870137610100850181815286935091505b6001811015614f80578251825260209283019290910190600101614f61565b50505095945050505050565b600060208284031215614f9e57600080fd5b81516142b081614a34565b600067ffffffffffffffff808316818516808303821115614fcc57614fcc614d8f565b01949350505050565b600082614fe457614fe4614ecf565b500490565b601f821115613e6757600081815260208120601f850160051c810160208610156150105750805b601f850160051c820191505b8181101561502f5782815560010161501c565b505050505050565b815167ffffffffffffffff811115615051576150516145cc565b6150658161505f8454614d0d565b84614fe9565b602080601f8311600181146150b857600084156150825750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561502f565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015615105578886015182559484019460019091019084016150e6565b508582101561514157878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000821982111561516457615164614d8f565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff8316602082015260606040820152600061519e6060830184614528565b9594505050505056fea2646970667358221220201327290f830f468beb202a477ac5abec6f76764bb865b8007014247823a8a664736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103205760003560e01c806396dc3d39116101a7578063cfa8ed47116100ee578063e7a7ed0211610097578063f2fde38b11610071578063f2fde38b146107fa578063f75527611461080d578063fe16564f1461081c57600080fd5b8063e7a7ed0214610797578063e8bf92ed146107c7578063eaeb077b146107e757600080fd5b8063d8d1091b116100c8578063d8d1091b1461074f578063d8f54db014610762578063dbc169761461078f57600080fd5b8063cfa8ed47146106f0578063d02103ca1461071c578063d0ae98dd1461073c57600080fd5b8063b02286c011610150578063c0cad3021161012a578063c0cad302146106b7578063c89e42df146106ca578063ca810366146106dd57600080fd5b8063b02286c01461066e578063b4d63f5814610677578063b6b0b0971461069757600080fd5b8063a3c573eb11610181578063a3c573eb14610630578063ab9fc5ef14610650578063adc879e91461065a57600080fd5b806396dc3d391461060257806399f5634e146106155780639b7967601461061d57600080fd5b8063574f649e1161026b5780637152facf116102145780637fcb3653116101ee5780637fcb3653146105bd5780638c4a0af7146105d15780638da5cb5b146105e457600080fd5b80637152facf1461058f578063748608de146105a257806379847057146105b557600080fd5b80636b8616ce116102455780636b8616ce146105545780636ff512cc14610574578063715018a61461058757600080fd5b8063574f649e146104895780635c975abb1461052a5780636766f09d1461054157600080fd5b8063423fa856116102cd578063542028d5116102a7578063542028d51461045b5780635437988d1461046357806355b925e61461047657600080fd5b8063423fa856146103e557806345605267146104055780635392c5e01461042d57600080fd5b80632072f6c5116102fe5780632072f6c51461038557806327eb6c0f1461038d5780633c158267146103d257600080fd5b8063107bf28c1461032557806319d8ac61146103435780631a26da1414610370575b600080fd5b61032d61082f565b60405161033a9190614572565b60405180910390f35b609a546103579067ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161033a565b61038361037e3660046145a2565b6108bd565b005b6103836108e2565b60a2546103ad9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161033a565b6103836103e0366004614748565b6108f4565b609a546103579068010000000000000000900467ffffffffffffffff1681565b609a5461035790700100000000000000000000000000000000900467ffffffffffffffff1681565b61044d61043b36600461487d565b609d6020526000908152604090205481565b60405190815260200161033a565b61032d611228565b6103836104713660046148c5565b611235565b6103836104843660046148f9565b611284565b61044d61049736600461497c565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b60655460ff165b604051901515815260200161033a565b61038361054f3660046148f9565b61174d565b61044d61056236600461487d565b60986020526000908152604090205481565b6103836105823660046148c5565b611d83565b610383611ebe565b61032d61059d3660046149f2565b611ed0565b6103836105b03660046148f9565b61213a565b61044d61240b565b609b546103579067ffffffffffffffff1681565b6103836105df366004614a4d565b612485565b60335473ffffffffffffffffffffffffffffffffffffffff166103ad565b61038361061036600461487d565b6125b9565b61044d6125fc565b61038361062b36600461487d565b612729565b60a3546103ad9073ffffffffffffffffffffffffffffffffffffffff1681565b61035762093a8081565b60a0546103579067ffffffffffffffff1681565b61044d61ea6081565b61044d61068536600461487d565b60996020526000908152604090205481565b6097546103ad9073ffffffffffffffffffffffffffffffffffffffff1681565b6103836106c5366004614a6a565b612778565b6103836106d8366004614a6a565b612790565b6103836106eb366004614aa7565b61287f565b609b546103ad9068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b609c546103ad9073ffffffffffffffffffffffffffffffffffffffff1681565b61044d61074a3660046149f2565b612bc0565b61038361075d366004614b8b565b612eba565b609b54610531907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610383613568565b609a54610357907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b609e546103ad9073ffffffffffffffffffffffffffffffffffffffff1681565b6103836107f5366004614c9c565b613617565b6103836108083660046148c5565b613ae7565b61044d67016345785d8a000081565b61038361082a366004614ce1565b613b9e565b60a1805461083c90614d0d565b80601f016020809104026020016040519081016040528092919081815260200182805461086890614d0d565b80156108b55780601f1061088a576101008083540402835291602001916108b5565b820191906000526020600020905b81548152906001019060200180831161089857829003601f168201915b505050505081565b6108c5613bc1565b67ffffffffffffffff909116600090815260996020526040902055565b6108ea613bc1565b6108f2613c42565b565b6108fc613cc8565b609b5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146109b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b8051609a5467ffffffffffffffff680100000000000000008204811660008181526099602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015611004576000878281518110610a1c57610a1c614d60565b602002602001015190506000816060015167ffffffffffffffff161115610c875783610a4781614dbe565b945050600081600001518051906020012082602001518360600151604051602001610aaa93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260989093529120549091508114610baf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016109ab565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610c81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016109ab565b50610e55565b60208101511580610d365750609c5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610cf09160040190815260200190565b6020604051808303816000875af1158015610d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d339190614de5565b15155b610dc2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016109ab565b80515161ea6011610e55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016109ab565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610e8b575042816040015167ffffffffffffffff1611155b610f3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016109ab565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610fe690614dbe565b95505080604001519550508080610ffc90614dfe565b915050610a00565b50609a5467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156110c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016109ab565b609a546000906110ef90700100000000000000000000000000000000900467ffffffffffffffff1684614e36565b6111039067ffffffffffffffff1687614e5f565b609a805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c1693909317939093179290921691909117909155600090815260996020526040902083905590506111db33306111ba8467016345785d8a0000614e76565b60975473ffffffffffffffffffffffffffffffffffffffff16929190613d35565b609a546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b609f805461083c90614d0d565b61123d613bc1565b609e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61128c613cc8565b609b5467ffffffffffffffff9081169088161115611352576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016109ab565b609b5467ffffffffffffffff90811690871611611417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016109ab565b600061142588888888611ed0565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161145a9190614eb3565b602060405180830381855afa158015611477573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061149a9190614de5565b6114a49190614efe565b609e546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d9161150e9189918991899190600401614f12565b602060405180830381865afa15801561152b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154f9190614f8c565b6115db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016109ab565b609b546116349033906115f89067ffffffffffffffff168b614e36565b67ffffffffffffffff1661160a6125fc565b6116149190614e76565b60975473ffffffffffffffffffffffffffffffffffffffff169190613e11565b609b80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152609d602052604090819020879055609c5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b1580156116e957600080fd5b505af11580156116fd573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b8567ffffffffffffffff168767ffffffffffffffff1610611816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e65774261746368206d75737420626520626960648201527f67676572207468616e20696e69744e756d426174636800000000000000000000608482015260a4016109ab565b609b5467ffffffffffffffff90811690871611156118dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d4261746368206d757374206265206c657360648201527f73207468616e206c617374566572696669656442617463680000000000000000608482015260a4016109ab565b67ffffffffffffffff8716158061190b575067ffffffffffffffff87166000908152609d602052604090205415155b6119bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d426174636820737461746520726f6f742060648201527f646f6573206e6f74206578697374000000000000000000000000000000000000608482015260a4016109ab565b67ffffffffffffffff86166000908152609d6020526040902054611a89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e6577426174636820737461746520726f6f7460648201527f20646f6573206e6f742065786973740000000000000000000000000000000000608482015260a4016109ab565b6000611a9788888888611ed0565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051611acc9190614eb3565b602060405180830381855afa158015611ae9573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611b0c9190614de5565b611b169190614efe565b609e546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611b809189918991899190600401614f12565b602060405180830381865afa158015611b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc19190614f8c565b611c4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20494e56414c49445f50524f4f46000000000000000000000060648201526084016109ab565b67ffffffffffffffff88166000908152609d6020526040902054869003611d1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2073746f72656420726f6f74206d757374206265206469666660648201527f6572656e74207468616e206e657720737461746520726f6f7400000000000000608482015260a4016109ab565b67ffffffffffffffff88166000908152609d60209081526040918290205482519081529081018890527fe579d6d18f02941e1d0f59bff70f1b2c894edc991badab38343786df2846fe55910160405180910390a1611d78613c42565b505050505050505050565b609b5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611e36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016109ab565b609b80547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b611ec6613bc1565b6108f26000613e6c565b67ffffffffffffffff808516600081815260996020526040808220549387168252902054606092911580611f0357508115155b611fb5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016109ab565b80612068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016109ab565b67ffffffffffffffff87166000908152609d60209081526040918290205460a05492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b612142613bc1565b609b5467ffffffffffffffff9081169088161115612208576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a4016109ab565b609b5467ffffffffffffffff908116908716116122cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a4016109ab565b67ffffffffffffffff8088166000908152609960205260408082205492891682529020548161237e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f74206578697374000060648201526084016109ab565b80611634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f74206578697374000060648201526084016109ab565b609a5460009067ffffffffffffffff700100000000000000000000000000000000820481169161245a917801000000000000000000000000000000000000000000000000909104166001614fa9565b6124649190614e36565b6124809067ffffffffffffffff16670de0b6b3a7640000614e76565b905090565b609b5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016109ab565b609b80548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690611eb390831515815260200190565b6125c1613bc1565b609b80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6097546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829173ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa15801561266f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126939190614de5565b609b54609a5491925060009167ffffffffffffffff918216916801000000000000000082048116916126f89170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614e36565b6127029190614fa9565b61270c9190614e36565b67ffffffffffffffff1690506127228183614fd5565b9250505090565b612731613bc1565b609a805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b612780613bc1565b60a161278c8282615037565b5050565b609b5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016109ab565b609f61284f8282615037565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051611eb39190614572565b600054610100900460ff161580801561289f5750600054600160ff909116105b806128b95750303b1580156128b9575060005460ff166001145b612945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016109ab565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156129a357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b609c80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8e8116919091179092556097805482168d8416179055609e80549091168b831617905560008052609d6020527fc5dc36ae4e7617e4c4d23ddfcde33c79e9ed64c300aed766a9288a6b9b31f63d899055609b80547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928a16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000088151502179055609f612abe8682615037565b5060a080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861617905560a1612aff8482615037565b5060a380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055612b48613ee3565b612b50613f83565b8015612bb357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b609b5460009067ffffffffffffffff868116911614612c87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a4016109ab565b8467ffffffffffffffff168467ffffffffffffffff1611612d50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a4016109ab565b609a5467ffffffffffffffff6801000000000000000090910481169085161115612e22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016109ab565b6000612e3086868686611ed0565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051612e659190614eb3565b602060405180830381855afa158015612e82573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612ea59190614de5565b612eaf9190614efe565b979650505050505050565b612ec2613cc8565b609b547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612f9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016109ab565b805180613054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016109ab565b609a5467ffffffffffffffff7801000000000000000000000000000000000000000000000000820481169161309f918491700100000000000000000000000000000000900416615151565b111561312d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016109ab565b609a5467ffffffffffffffff680100000000000000008204811660008181526099602052604081205491937001000000000000000000000000000000009004909216915b8481101561349857600086828151811061318d5761318d614d60565b6020026020010151905083806131a290614dbe565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff88166000908152609890935291205490915081146132fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016109ab565b613306600188614e5f565b83036133de574262093a8083604001516133209190614fa9565b67ffffffffffffffff1611156133de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016109ab565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209350858061348090614dbe565b9650505050808061349090614dfe565b915050613171565b50609a80544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260996020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60a25473ffffffffffffffffffffffffffffffffffffffff16331461360f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016109ab565b6108f2614044565b61361f613cc8565b609b547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146136fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016109ab565b600061370661240b565b905081811115613798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016109ab565b61ea6083511061382a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016109ab565b60975461384f9073ffffffffffffffffffffffffffffffffffffffff16333084613d35565b609c54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa1580156138bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138e39190614de5565b609a8054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff1690601861391d83614dbe565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161399693929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181529181528151602092830120609a547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526098909352912055323303613a8457609a54604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613ae1565b609a60189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613ad893929190615169565b60405180910390a25b50505050565b613aef613bc1565b73ffffffffffffffffffffffffffffffffffffffff8116613b92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016109ab565b613b9b81613e6c565b50565b613ba6613bc1565b67ffffffffffffffff166000908152609d6020526040902055565b60335473ffffffffffffffffffffffffffffffffffffffff1633146108f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109ab565b613c4a6140b6565b60a360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613cb457600080fd5b505af1158015613ae1573d6000803e3d6000fd5b60655460ff16156108f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016109ab565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052613ae19085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261413b565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052613e679084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401613d8f565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16613f7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109ab565b6108f233613e6c565b600054610100900460ff1661401a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109ab565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b61404c614247565b60a360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613cb457600080fd5b6140be613cc8565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586141113390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b600061419d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661429e9092919063ffffffff16565b805190915015613e6757808060200190518101906141bb9190614f8c565b613e67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016109ab565b61424f6142b7565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33614111565b60606142ad8484600085614323565b90505b9392505050565b60655460ff166108f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016109ab565b6060824710156143b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016109ab565b73ffffffffffffffffffffffffffffffffffffffff85163b614433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109ab565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161445c9190614eb3565b60006040518083038185875af1925050503d8060008114614499576040519150601f19603f3d011682016040523d82523d6000602084013e61449e565b606091505b5091509150612eaf828286606083156144b85750816142b0565b8251156144c85782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ab9190614572565b60005b838110156145175781810151838201526020016144ff565b83811115613ae15750506000910152565b600081518084526145408160208601602086016144fc565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006142b06020830184614528565b803567ffffffffffffffff8116811461459d57600080fd5b919050565b600080604083850312156145b557600080fd5b6145be83614585565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171561461e5761461e6145cc565b60405290565b6040516060810167ffffffffffffffff8111828210171561461e5761461e6145cc565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561468e5761468e6145cc565b604052919050565b600067ffffffffffffffff8211156146b0576146b06145cc565b5060051b60200190565b600082601f8301126146cb57600080fd5b813567ffffffffffffffff8111156146e5576146e56145cc565b61471660207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614647565b81815284602083860101111561472b57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561475b57600080fd5b823567ffffffffffffffff8082111561477357600080fd5b818501915085601f83011261478757600080fd5b813561479a61479582614696565b614647565b81815260059190911b830184019084810190888311156147b957600080fd5b8585015b83811015614870578035858111156147d55760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181131561480b5760008081fd5b6148136145fb565b89830135888111156148255760008081fd5b6148338e8c838701016146ba565b8252506040808401358b830152606061484d818601614585565b8284015261485c848601614585565b9083015250855250509186019186016147bd565b5098975050505050505050565b60006020828403121561488f57600080fd5b6142b082614585565b73ffffffffffffffffffffffffffffffffffffffff81168114613b9b57600080fd5b803561459d81614898565b6000602082840312156148d757600080fd5b81356142b081614898565b80604081018310156148f357600080fd5b92915050565b6000806000806000806000610180888a03121561491557600080fd5b61491e88614585565b965061492c60208901614585565b955060408801359450606088013593506149498960808a016148e2565b925061014088018981111561495d57600080fd5b60c08901925061496d8a826148e2565b91505092959891949750929550565b600080600080600060a0868803121561499457600080fd5b85359450602086013567ffffffffffffffff8111156149b257600080fd5b6149be888289016146ba565b945050604086013592506149d460608701614585565b915060808601356149e481614898565b809150509295509295909350565b60008060008060808587031215614a0857600080fd5b614a1185614585565b9350614a1f60208601614585565b93969395505050506040820135916060013590565b8015158114613b9b57600080fd5b803561459d81614a34565b600060208284031215614a5f57600080fd5b81356142b081614a34565b600060208284031215614a7c57600080fd5b813567ffffffffffffffff811115614a9357600080fd5b614a9f848285016146ba565b949350505050565b6000806000806000806000806000806101408b8d031215614ac757600080fd5b614ad08b6148ba565b9950614ade60208c016148ba565b9850614aec60408c016148ba565b975060608b01359650614b0160808c016148ba565b9550614b0f60a08c01614a42565b945060c08b013567ffffffffffffffff80821115614b2c57600080fd5b614b388e838f016146ba565b9550614b4660e08e01614585565b94506101008d0135915080821115614b5d57600080fd5b50614b6a8d828e016146ba565b925050614b7a6101208c016148ba565b90509295989b9194979a5092959850565b60006020808385031215614b9e57600080fd5b823567ffffffffffffffff80821115614bb657600080fd5b818501915085601f830112614bca57600080fd5b8135614bd861479582614696565b81815260059190911b83018401908481019088831115614bf757600080fd5b8585015b8381101561487057803585811115614c135760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001811315614c495760008081fd5b614c51614624565b8983013588811115614c635760008081fd5b614c718e8c838701016146ba565b8252506040808401358b830152614c89838501614585565b9082015285525050918601918601614bfb565b60008060408385031215614caf57600080fd5b823567ffffffffffffffff811115614cc657600080fd5b614cd2858286016146ba565b95602094909401359450505050565b60008060408385031215614cf457600080fd5b82359150614d0460208401614585565b90509250929050565b600181811c90821680614d2157607f821691505b602082108103614d5a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614ddb57614ddb614d8f565b6001019392505050565b600060208284031215614df757600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e2f57614e2f614d8f565b5060010190565b600067ffffffffffffffff83811690831681811015614e5757614e57614d8f565b039392505050565b600082821015614e7157614e71614d8f565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614eae57614eae614d8f565b500290565b60008251614ec58184602087016144fc565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614f0d57614f0d614ecf565b500690565b61012081016040808784376000838201818152879190815b6002811015614f4a57848483379084018281529284019290600101614f2a565b5050828760c0870137610100850181815286935091505b6001811015614f80578251825260209283019290910190600101614f61565b50505095945050505050565b600060208284031215614f9e57600080fd5b81516142b081614a34565b600067ffffffffffffffff808316818516808303821115614fcc57614fcc614d8f565b01949350505050565b600082614fe457614fe4614ecf565b500490565b601f821115613e6757600081815260208120601f850160051c810160208610156150105750805b601f850160051c820191505b8181101561502f5782815560010161501c565b505050505050565b815167ffffffffffffffff811115615051576150516145cc565b6150658161505f8454614d0d565b84614fe9565b602080601f8311600181146150b857600084156150825750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561502f565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015615105578886015182559484019460019091019084016150e6565b508582101561514157878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000821982111561516457615164614d8f565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff8316602082015260606040820152600061519e6060830184614528565b9594505050505056fea2646970667358221220201327290f830f468beb202a477ac5abec6f76764bb865b8007014247823a8a664736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/Bridge.sol b/contracts/Bridge.sol index f2a7d96c7..fb3458612 100644 --- a/contracts/Bridge.sol +++ b/contracts/Bridge.sol @@ -7,14 +7,16 @@ import "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeab import "./lib/TokenWrapped.sol"; import "./interfaces/IGlobalExitRootManager.sol"; import "./interfaces/IBridgeMessageReceiver.sol"; +import "./interfaces/IBridge.sol"; import "@openzeppelin/contracts-upgradeable/proxy/ClonesUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol"; /** * Bridge that will be deployed on both networks Ethereum and Polygon zkEVM * Contract responsible to manage the token interactions with other networks */ -contract Bridge is DepositContract { +contract Bridge is DepositContract, PausableUpgradeable, IBridge { using SafeERC20Upgradeable for IERC20Upgradeable; // Wrapped Token information struct @@ -56,17 +58,32 @@ contract Bridge is DepositContract { // Addres of the token wrapped implementation address public tokenImplementation; + // Proof of Efficiency address + address public poeAddress; + /** * @param _networkID networkID * @param _globalExitRootManager global exit root manager address */ function initialize( uint32 _networkID, - IGlobalExitRootManager _globalExitRootManager + IGlobalExitRootManager _globalExitRootManager, + address _poeAddress ) public virtual initializer { networkID = _networkID; globalExitRootManager = _globalExitRootManager; tokenImplementation = address(new TokenWrapped()); + poeAddress = _poeAddress; + + __Pausable_init_unchained(); + } + + modifier onlyProofOfEfficiency() { + require( + poeAddress == msg.sender, + "ProofOfEfficiency::onlyProofOfEfficiency: only Proof of Efficiency contract" + ); + _; } /** @@ -117,7 +134,7 @@ contract Bridge is DepositContract { address destinationAddress, uint256 amount, bytes calldata permitData - ) public payable virtual { + ) public payable virtual whenNotPaused { require( destinationNetwork != networkID, "Bridge::bridge: DESTINATION_CANT_BE_ITSELF" @@ -207,7 +224,7 @@ contract Bridge is DepositContract { uint32 destinationNetwork, address destinationAddress, bytes memory metadata - ) public payable virtual { + ) public payable whenNotPaused { require( destinationNetwork != networkID, "Bridge::bridge: DESTINATION_CANT_BE_ITSELF" @@ -264,11 +281,11 @@ contract Bridge is DepositContract { address destinationAddress, uint256 amount, bytes memory metadata - ) public { + ) public whenNotPaused { // Check nullifier require( claimNullifier[index] == false, - "Bridge::claim: ALREADY_CLAIMED" + "Bridge::claimAsset: ALREADY_CLAIMED" ); // Check that the merkle proof belongs to some global exit root @@ -277,55 +294,40 @@ contract Bridge is DepositContract { globalExitRootManager.globalExitRootMap( keccak256(abi.encodePacked(mainnetExitRoot, rollupExitRoot)) ) != 0, - "Bridge::claim: GLOBAL_EXIT_ROOT_DOES_NOT_MATCH" + "Bridge::claimAsset: GLOBAL_EXIT_ROOT_DOES_NOT_MATCH" ); // Destination network must be networkID require( destinationNetwork == networkID, - "Bridge::claim: DESTINATION_NETWORK_DOES_NOT_MATCH" + "Bridge::claimAsset: DESTINATION_NETWORK_DOES_NOT_MATCH" ); + bytes32 claimRoot; if (networkID == MAINNET_NETWORK_ID) { // Verify merkle proof using rollup exit root - require( - verifyMerkleProof( - getLeafValue( - LEAF_TYPE_ASSET, - originNetwork, - originTokenAddress, - destinationNetwork, - destinationAddress, - amount, - keccak256(metadata) - ), - smtProof, - index, - rollupExitRoot - ), - "Bridge::claim: SMT_INVALID" - ); + claimRoot = rollupExitRoot; } else { // Verify merkle proof using mainnet exit root - require( - verifyMerkleProof( - getLeafValue( - LEAF_TYPE_ASSET, - originNetwork, - originTokenAddress, - destinationNetwork, - destinationAddress, - amount, - keccak256(metadata) - ), - smtProof, - index, - mainnetExitRoot - ), - "Bridge::claim: SMT_INVALID" - ); + claimRoot = mainnetExitRoot; } - + require( + verifyMerkleProof( + getLeafValue( + LEAF_TYPE_ASSET, + originNetwork, + originTokenAddress, + destinationNetwork, + destinationAddress, + amount, + keccak256(metadata) + ), + smtProof, + index, + claimRoot + ), + "Bridge::claimAsset: SMT_INVALID" + ); // Update nullifier claimNullifier[index] = true; @@ -336,7 +338,7 @@ contract Bridge is DepositContract { (bool success, ) = destinationAddress.call{value: amount}( new bytes(0) ); - require(success, "Bridge::claim: ETH_TRANSFER_FAILED"); + require(success, "Bridge::claimAsset: ETH_TRANSFER_FAILED"); } else { // Transfer tokens if (originNetwork == networkID) { @@ -432,8 +434,7 @@ contract Bridge is DepositContract { address destinationAddress, uint256 amount, bytes memory metadata - ) public { - // Should check if is a claimMessage or a claimAssetl + ) public whenNotPaused { // Check nullifier require( claimNullifier[index] == false, @@ -455,45 +456,31 @@ contract Bridge is DepositContract { "Bridge::claimMessage: DESTINATION_NETWORK_DOES_NOT_MATCH" ); + bytes32 claimRoot; if (networkID == MAINNET_NETWORK_ID) { // Verify merkle proof using rollup exit root - require( - verifyMerkleProof( - getLeafValue( - LEAF_TYPE_MESSAGE, - originNetwork, - originAddress, - destinationNetwork, - destinationAddress, - amount, - keccak256(metadata) - ), - smtProof, - index, - rollupExitRoot - ), - "Bridge::claimMessage: SMT_INVALID" - ); + claimRoot = rollupExitRoot; } else { // Verify merkle proof using mainnet exit root - require( - verifyMerkleProof( - getLeafValue( - LEAF_TYPE_MESSAGE, - originNetwork, - originAddress, - destinationNetwork, - destinationAddress, - amount, - keccak256(metadata) - ), - smtProof, - index, - mainnetExitRoot - ), - "Bridge::claimMessage: SMT_INVALID" - ); + claimRoot = mainnetExitRoot; } + require( + verifyMerkleProof( + getLeafValue( + LEAF_TYPE_MESSAGE, + originNetwork, + originAddress, + destinationNetwork, + destinationAddress, + amount, + keccak256(metadata) + ), + smtProof, + index, + claimRoot + ), + "Bridge::claimMessage: SMT_INVALID" + ); // Update nullifier claimNullifier[index] = true; @@ -552,6 +539,22 @@ contract Bridge is DepositContract { ]; } + /** + * @notice Function to pause the contract + " Can only be called by the proof of efficiency in extreme situations + */ + function pause() external onlyProofOfEfficiency { + _pause(); + } + + /** + * @notice Function to unpause the contract + " Can only be called by the proof of efficiency + */ + function unpause() external onlyProofOfEfficiency { + _unpause(); + } + /** * @notice Function to extract the selector of a bytes calldata * @param _data The calldata bytes diff --git a/contracts/GlobalExitRootManager.sol b/contracts/GlobalExitRootManager.sol index c0b6d1fee..08cb66204 100644 --- a/contracts/GlobalExitRootManager.sol +++ b/contracts/GlobalExitRootManager.sol @@ -18,9 +18,6 @@ contract GlobalExitRootManager is IGlobalExitRootManager, Initializable { // Store every global exit root: Root --> rootNum mapping(bytes32 => uint256) public globalExitRootMap; - // Current global exit roots stored - uint256 public lastGlobalExitRootNum; - // Bridge address address public bridgeAddress; @@ -31,7 +28,6 @@ contract GlobalExitRootManager is IGlobalExitRootManager, Initializable { * @dev Emitted when the the global exit root is updated */ event UpdateGlobalExitRoot( - uint256 indexed globalExitRootNum, bytes32 indexed mainnetExitRoot, bytes32 indexed rollupExitRoot ); @@ -64,18 +60,16 @@ contract GlobalExitRootManager is IGlobalExitRootManager, Initializable { lastMainnetExitRoot = newRoot; } - lastGlobalExitRootNum++; - bytes32 newGlobalExitRoot = keccak256( abi.encodePacked(lastMainnetExitRoot, lastRollupExitRoot) ); - globalExitRootMap[newGlobalExitRoot] = lastGlobalExitRootNum; - emit UpdateGlobalExitRoot( - lastGlobalExitRootNum, - lastMainnetExitRoot, - lastRollupExitRoot - ); + // If it already exist, do not modify the timestamp + if (globalExitRootMap[newGlobalExitRoot] == 0) { + globalExitRootMap[newGlobalExitRoot] = block.timestamp; + } + + emit UpdateGlobalExitRoot(lastMainnetExitRoot, lastRollupExitRoot); } /** diff --git a/contracts/ProofOfEfficiency.sol b/contracts/ProofOfEfficiency.sol index 11dd10381..99eb7ace1 100644 --- a/contracts/ProofOfEfficiency.sol +++ b/contracts/ProofOfEfficiency.sol @@ -6,6 +6,9 @@ import "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20Burnable import "./interfaces/IVerifierRollup.sol"; import "./interfaces/IGlobalExitRootManager.sol"; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; +import "./interfaces/IBridge.sol"; /** * Contract responsible for managing the states and the updates of L2 network @@ -15,7 +18,11 @@ import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; * The aggregators will be able to actually verify the sequenced state with zkProofs and be to perform withdrawals from L2 network * To enter and exit of the L2 network will be used a Bridge smart contract that will be deployed in both networks */ -contract ProofOfEfficiency is Initializable { +contract ProofOfEfficiency is + Initializable, + OwnableUpgradeable, + PausableUpgradeable +{ using SafeERC20Upgradeable for IERC20Upgradeable; /** @@ -124,6 +131,12 @@ contract ProofOfEfficiency is Initializable { // L2 network name string public networkName; + // Security council, only can take action if extraordinary conditions happens + address public securityCouncil; + + // Bridge Address + IBridge public bridgeAddress; + /** * @dev Emitted when the trusted sequencer sends a new batch of transactions */ @@ -168,6 +181,11 @@ contract ProofOfEfficiency is Initializable { */ event SetTrustedSequencerURL(string newTrustedSequencerURL); + /** + * @dev Emitted when is proved a different state given the same batches + */ + event ProofDifferentState(bytes32 storedStateRoot, bytes32 provedStateRoot); + /** * @param _globalExitRootManager global exit root manager address * @param _matic MATIC token address @@ -188,8 +206,9 @@ contract ProofOfEfficiency is Initializable { bool _forceBatchAllowed, string memory _trustedSequencerURL, uint64 _chainID, - string memory _networkName - ) public virtual initializer { + string memory _networkName, + IBridge _bridgeAddress + ) public initializer { globalExitRootManager = _globalExitRootManager; matic = _matic; rollupVerifier = _rollupVerifier; @@ -199,6 +218,19 @@ contract ProofOfEfficiency is Initializable { trustedSequencerURL = _trustedSequencerURL; chainID = _chainID; networkName = _networkName; + bridgeAddress = _bridgeAddress; + + // Initialize OZ contracts + __Ownable_init_unchained(); + __Pausable_init_unchained(); + } + + modifier onlySecurityCouncil() { + require( + securityCouncil == msg.sender, + "ProofOfEfficiency::onlySecurityCouncil: only security council" + ); + _; } modifier onlyTrustedSequencer() { @@ -224,6 +256,7 @@ contract ProofOfEfficiency is Initializable { */ function sequenceBatches(BatchData[] memory batches) public + whenNotPaused onlyTrustedSequencer { uint256 batchesNum = batches.length; @@ -330,9 +363,9 @@ contract ProofOfEfficiency is Initializable { } /** - * @notice Allows an aggregator to verify a batch - * @param _lastVerifiedBatch Last verified Batch - * @param newVerifiedBatch Last batch that the aggregator intends to verify + * @notice Allows an aggregator to verify a multiple batches + * @param initNumBatch Batch which the aggregator starts the verification + * @param finalNewBatch Last batch aggregator intends to verify * @param newLocalExitRoot New local exit root once the batch is processed * @param newStateRoot New State root once the batch is processed * @param proofA zk-snark input @@ -340,27 +373,27 @@ contract ProofOfEfficiency is Initializable { * @param proofC zk-snark input */ function verifyBatches( - uint64 _lastVerifiedBatch, - uint64 newVerifiedBatch, + uint64 initNumBatch, + uint64 finalNewBatch, bytes32 newLocalExitRoot, bytes32 newStateRoot, uint256[2] calldata proofA, uint256[2][2] calldata proofB, uint256[2] calldata proofC - ) public { + ) public whenNotPaused { require( - _lastVerifiedBatch <= lastVerifiedBatch, - "ProofOfEfficiency::verifyBatches: _lastVerifiedBatch must be less or equal" + initNumBatch <= lastVerifiedBatch, + "ProofOfEfficiency::verifyBatches: initNumBatch must be less or equal than lastVerifiedBatch" ); require( - newVerifiedBatch > lastVerifiedBatch, - "ProofOfEfficiency::verifyBatches: newVerifiedBatch must be bigger than lastVerifiedBatch" + finalNewBatch > lastVerifiedBatch, + "ProofOfEfficiency::verifyBatches: finalNewBatch must be bigger than lastVerifiedBatch" ); bytes memory snarkHashBytes = getInputSnarkBytes( - _lastVerifiedBatch, - newVerifiedBatch, + initNumBatch, + finalNewBatch, newLocalExitRoot, newStateRoot ); @@ -377,17 +410,17 @@ contract ProofOfEfficiency is Initializable { // Get MATIC reward matic.safeTransfer( msg.sender, - calculateRewardPerBatch() * (newVerifiedBatch - lastVerifiedBatch) + calculateRewardPerBatch() * (finalNewBatch - lastVerifiedBatch) ); // Update state - lastVerifiedBatch = newVerifiedBatch; - batchNumToStateRoot[newVerifiedBatch] = newStateRoot; + lastVerifiedBatch = finalNewBatch; + batchNumToStateRoot[finalNewBatch] = newStateRoot; // Interact with globalExitRoot globalExitRootManager.updateExitRoot(newLocalExitRoot); - emit VerifyBatches(newVerifiedBatch, newStateRoot, msg.sender); + emit VerifyBatches(finalNewBatch, newStateRoot, msg.sender); } /** @@ -398,6 +431,7 @@ contract ProofOfEfficiency is Initializable { */ function forceBatch(bytes memory transactions, uint256 maticAmount) public + whenNotPaused isForceBatchAllowed { // Calculate matic collateral @@ -450,6 +484,7 @@ contract ProofOfEfficiency is Initializable { */ function sequenceForceBatches(ForceBatchData[] memory batches) public + whenNotPaused isForceBatchAllowed { uint256 batchesNum = batches.length; @@ -583,17 +618,131 @@ contract ProofOfEfficiency is Initializable { return currentBalance / totalBatchesToVerify; } + /** + * @notice Allows to stop the zk-evm if its possible to proof a different state root give the same batches. + * @param initNumBatch Batch which the aggregator starts the verification + * @param finalNewBatch Last batch aggregator intends to verify + * @param newLocalExitRoot New local exit root once the batch is processed + * @param newStateRoot New State root once the batch is processed + * @param proofA zk-snark input + * @param proofB zk-snark input + * @param proofC zk-snark input + */ + function proofDifferentState( + uint64 initNumBatch, + uint64 finalNewBatch, + bytes32 newLocalExitRoot, + bytes32 newStateRoot, + uint256[2] calldata proofA, + uint256[2][2] calldata proofB, + uint256[2] calldata proofC + ) public { + require( + initNumBatch < finalNewBatch, + "ProofOfEfficiency::proofDifferentState: finalNewBatch must be bigger than initNumBatch" + ); + + require( + finalNewBatch <= lastVerifiedBatch, + "ProofOfEfficiency::proofDifferentState: initNumBatch must be less than lastVerifiedBatch" + ); + + require( + initNumBatch == 0 || + batchNumToStateRoot[initNumBatch] != bytes32(0), + "ProofOfEfficiency::proofDifferentState: initNumBatch state root does not exist" + ); + + require( + batchNumToStateRoot[finalNewBatch] != bytes32(0), + "ProofOfEfficiency::proofDifferentState: finalNewBatch state root does not exist" + ); + + bytes memory snarkHashBytes = getInputSnarkBytes( + initNumBatch, + finalNewBatch, + newLocalExitRoot, + newStateRoot + ); + + // Calulate the snark input + uint256 inputSnark = uint256(sha256(snarkHashBytes)) % _RFIELD; + + // Verify proof + require( + rollupVerifier.verifyProof(proofA, proofB, proofC, [inputSnark]), + "ProofOfEfficiency::proofDifferentState: INVALID_PROOF" + ); + + require( + batchNumToStateRoot[finalNewBatch] != newStateRoot, + "ProofOfEfficiency::proofDifferentState: stored root must be different than new state root" + ); + + emit ProofDifferentState( + batchNumToStateRoot[finalNewBatch], + newStateRoot + ); + _activateEmergencyState(); + } + + /** + * @notice Function to activate emergency state, pause both PoE and Bridge contrats + * Only can be called by a owner in the bootstrap phase, once the owner is renounced, the system + * can only be paused proving a distinct state root givne the same batches + */ + function activateEmergencyState() external onlyOwner { + _activateEmergencyState(); + } + + /** + * @notice Function to deactivate emergency state, unpause both PoE and Bridge contrats + * Only can be called by the security council + */ + function deactivateEmergencyState() external onlySecurityCouncil { + _deactivateEmergencyState(); + } + + /** + * @notice Function to activate emergency state, pause both PoE and Bridge contrats + */ + function _activateEmergencyState() internal { + // Pause PoE + _pause(); + + // Pause brige + bridgeAddress.pause(); + } + + /** + * @notice Function to activate emergency state, pause both PoE and Bridge contrats + */ + function _deactivateEmergencyState() internal { + // Unpause PoE + _unpause(); + + // Unpause brige + bridgeAddress.unpause(); + } + + /** + * @notice Function to calculate the input snark bytes + * @param initNumBatch Batch which the aggregator starts teh verification + * @param finalNewBatch Last batch aggregator intends to verify + * @param newLocalExitRoot New local exit root once the batch is processed + * @param newStateRoot New State root once the batch is processed + */ function getInputSnarkBytes( - uint64 _lastVerifiedBatch, - uint64 newVerifiedBatch, + uint64 initNumBatch, + uint64 finalNewBatch, bytes32 newLocalExitRoot, bytes32 newStateRoot ) public view returns (bytes memory) { - bytes32 oldAccInputHash = sequencedBatches[_lastVerifiedBatch]; - bytes32 newAccInputHash = sequencedBatches[newVerifiedBatch]; + bytes32 oldAccInputHash = sequencedBatches[initNumBatch]; + bytes32 newAccInputHash = sequencedBatches[finalNewBatch]; require( - _lastVerifiedBatch == 0 || oldAccInputHash != bytes32(0), + initNumBatch == 0 || oldAccInputHash != bytes32(0), "ProofOfEfficiency::getInputSnarkBytes: oldAccInputHash does not exist" ); @@ -605,14 +754,14 @@ contract ProofOfEfficiency is Initializable { return abi.encodePacked( msg.sender, - batchNumToStateRoot[_lastVerifiedBatch], + batchNumToStateRoot[initNumBatch], oldAccInputHash, - _lastVerifiedBatch, + initNumBatch, chainID, newStateRoot, newAccInputHash, newLocalExitRoot, - newVerifiedBatch + finalNewBatch ); } } diff --git a/contracts/interfaces/IBridge.sol b/contracts/interfaces/IBridge.sol new file mode 100644 index 000000000..605ec21b0 --- /dev/null +++ b/contracts/interfaces/IBridge.sol @@ -0,0 +1,49 @@ +// SPDX-License-Identifier: AGPL-3.0 + +pragma solidity 0.8.15; + +interface IBridge { + function bridgeAsset( + address token, + uint32 destinationNetwork, + address destinationAddress, + uint256 amount, + bytes calldata permitData + ) external payable; + + function bridgeMessage( + uint32 destinationNetwork, + address destinationAddress, + bytes memory metadata + ) external payable; + + function claimAsset( + bytes32[] memory smtProof, + uint32 index, + bytes32 mainnetExitRoot, + bytes32 rollupExitRoot, + uint32 originNetwork, + address originTokenAddress, + uint32 destinationNetwork, + address destinationAddress, + uint256 amount, + bytes memory metadata + ) external; + + function claimMessage( + bytes32[] memory smtProof, + uint32 index, + bytes32 mainnetExitRoot, + bytes32 rollupExitRoot, + uint32 originNetwork, + address originAddress, + uint32 destinationNetwork, + address destinationAddress, + uint256 amount, + bytes memory metadata + ) external; + + function pause() external; + + function unpause() external; +} diff --git a/contracts/interfaces/IGlobalExitRootManager.sol b/contracts/interfaces/IGlobalExitRootManager.sol index 3278ac16b..939e6e5d7 100644 --- a/contracts/interfaces/IGlobalExitRootManager.sol +++ b/contracts/interfaces/IGlobalExitRootManager.sol @@ -10,6 +10,4 @@ interface IGlobalExitRootManager { function globalExitRootMap(bytes32 globalExitRootNum) external returns (uint256); - - function lastGlobalExitRootNum() external returns (uint256); } diff --git a/contracts/mocks/BridgeMock.sol b/contracts/mocks/BridgeMock.sol index c51d85b95..8b8387c26 100644 --- a/contracts/mocks/BridgeMock.sol +++ b/contracts/mocks/BridgeMock.sol @@ -16,11 +16,15 @@ contract BridgeMock is Bridge, OwnableUpgradeable { */ function initialize( uint32 _networkID, - IGlobalExitRootManager _globalExitRootManager + IGlobalExitRootManager _globalExitRootManager, + address _poeAddress ) public override initializer { networkID = _networkID; globalExitRootManager = _globalExitRootManager; tokenImplementation = address(new TokenWrapped()); + poeAddress = _poeAddress; + __Pausable_init_unchained(); + __Ownable_init(); maxEtherBridge = 0.25 ether; } diff --git a/contracts/mocks/GlobalExitRootManagerMock.sol b/contracts/mocks/GlobalExitRootManagerMock.sol index b5a2efa2b..6a69f578d 100644 --- a/contracts/mocks/GlobalExitRootManagerMock.sol +++ b/contracts/mocks/GlobalExitRootManagerMock.sol @@ -18,17 +18,9 @@ contract GlobalExitRootManagerMock is GlobalExitRootManager { /** * @notice Set last global exit root - * @param globalExitRoot New global exit root + * @param timestamp timestamp */ - function setLastGlobalExitRoot(bytes32 globalExitRoot) public { - globalExitRootMap[globalExitRoot] = lastGlobalExitRootNum; - } - - /** - * @notice Set last global exit root num - * @param _lastGlobalExitRootNum New global exit root - */ - function setLastGlobalExitRootNum(uint256 _lastGlobalExitRootNum) public { - lastGlobalExitRootNum = _lastGlobalExitRootNum; + function setLastGlobalExitRoot(uint256 timestamp) public { + globalExitRootMap[getLastGlobalExitRoot()] = timestamp; } } diff --git a/contracts/mocks/ProofOfEfficiencyMock.sol b/contracts/mocks/ProofOfEfficiencyMock.sol index 5231890c4..ace89e1e7 100644 --- a/contracts/mocks/ProofOfEfficiencyMock.sol +++ b/contracts/mocks/ProofOfEfficiencyMock.sol @@ -2,7 +2,6 @@ pragma solidity 0.8.15; import "../ProofOfEfficiency.sol"; -import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; /** * Contract responsible for managing the state and the updates of the L2 network @@ -10,41 +9,7 @@ import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; * The aggregators are forced to process and validate the sequencers transactions in the same order by using a verifier. * To enter and exit of the L2 network will be used a Bridge smart contract */ -contract ProofOfEfficiencyMock is ProofOfEfficiency, OwnableUpgradeable { - /** - * @param _globalExitRootManager global exit root manager address - * @param _matic MATIC token address - * @param _rollupVerifier rollup verifier address - * @param genesisRoot rollup genesis root - * @param _trustedSequencer trusted sequencer address - * @param _forceBatchAllowed indicates wheather the force batch functionality is available - * @param _trustedSequencerURL trusted sequencer URL - * @param _chainID L2 chainID - * @param _networkName L2 network name - */ - function initialize( - IGlobalExitRootManager _globalExitRootManager, - IERC20Upgradeable _matic, - IVerifierRollup _rollupVerifier, - bytes32 genesisRoot, - address _trustedSequencer, - bool _forceBatchAllowed, - string memory _trustedSequencerURL, - uint64 _chainID, - string memory _networkName - ) public override initializer { - globalExitRootManager = _globalExitRootManager; - matic = _matic; - rollupVerifier = _rollupVerifier; - batchNumToStateRoot[0] = genesisRoot; - trustedSequencer = _trustedSequencer; - forceBatchAllowed = _forceBatchAllowed; - trustedSequencerURL = _trustedSequencerURL; - chainID = _chainID; - networkName = _networkName; - __Ownable_init(); - } - +contract ProofOfEfficiencyMock is ProofOfEfficiency { /** * @notice calculate accumulate input hash from parameters * @param currentAccInputHash Accumulate input hash diff --git a/docs/Bridge.md b/docs/Bridge.md index 6a5f26d05..1f0ee9126 100644 --- a/docs/Bridge.md +++ b/docs/Bridge.md @@ -154,6 +154,26 @@ Returns the address of a wrapper using the token information if already exist |`originNetwork` | uint32 | Origin network |`originTokenAddress` | address | Origin token address, 0 address is reserved for ether +### pause +```solidity + function pause( + ) external +``` +Function to pause the contract + " Can only be called by the proof of efficiency in extreme situations + + + +### unpause +```solidity + function unpause( + ) external +``` +Function to unpause the contract + " Can only be called by the proof of efficiency + + + ### _permit ```solidity function _permit( diff --git a/docs/ProofOfEfficiency.md b/docs/ProofOfEfficiency.md index 977994780..a0e2729a4 100644 --- a/docs/ProofOfEfficiency.md +++ b/docs/ProofOfEfficiency.md @@ -53,8 +53,8 @@ Allows a sequencer to send multiple batches ### verifyBatches ```solidity function verifyBatches( - uint64 _lastVerifiedBatch, - uint64 newVerifiedBatch, + uint64 initNumBatch, + uint64 finalNewBatch, bytes32 newLocalExitRoot, bytes32 newStateRoot, uint256[2] proofA, @@ -62,14 +62,14 @@ Allows a sequencer to send multiple batches uint256[2] proofC ) public ``` -Allows an aggregator to verify a batch +Allows an aggregator to verify a multiple batches #### Parameters: | Name | Type | Description | | :--- | :--- | :------------------------------------------------------------------- | -|`_lastVerifiedBatch` | uint64 | Last verified Batch -|`newVerifiedBatch` | uint64 | Last batch that the aggregator intends to verify +|`initNumBatch` | uint64 | Batch which the aggregator starts the verification +|`finalNewBatch` | uint64 | Last batch aggregator intends to verify |`newLocalExitRoot` | bytes32 | New local exit root once the batch is processed |`newStateRoot` | bytes32 | New State root once the batch is processed |`proofA` | uint256[2] | zk-snark input @@ -168,14 +168,90 @@ Function to calculate the reward to verify a single batch +### proofDifferentState +```solidity + function proofDifferentState( + uint64 initNumBatch, + uint64 finalNewBatch, + bytes32 newLocalExitRoot, + bytes32 newStateRoot, + uint256[2] proofA, + uint256[2][2] proofB, + uint256[2] proofC + ) public +``` +Allows to stop the zk-evm if its possible to proof a different state root give the same batches. + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`initNumBatch` | uint64 | Batch which the aggregator starts the verification +|`finalNewBatch` | uint64 | Last batch aggregator intends to verify +|`newLocalExitRoot` | bytes32 | New local exit root once the batch is processed +|`newStateRoot` | bytes32 | New State root once the batch is processed +|`proofA` | uint256[2] | zk-snark input +|`proofB` | uint256[2][2] | zk-snark input +|`proofC` | uint256[2] | zk-snark input + +### activateEmergencyState +```solidity + function activateEmergencyState( + ) external +``` +Function to activate emergency state, pause both PoE and Bridge contrats +Only can be called by a owner in the bootstrap phase, once the owner is renounced, the system +can only be paused proving a distinct state root givne the same batches + + + +### deactivateEmergencyState +```solidity + function deactivateEmergencyState( + ) external +``` +Function to deactivate emergency state, unpause both PoE and Bridge contrats +Only can be called by the security council + + + +### _activateEmergencyState +```solidity + function _activateEmergencyState( + ) internal +``` +Function to activate emergency state, pause both PoE and Bridge contrats + + + +### _deactivateEmergencyState +```solidity + function _deactivateEmergencyState( + ) internal +``` +Function to activate emergency state, pause both PoE and Bridge contrats + + + ### getInputSnarkBytes ```solidity function getInputSnarkBytes( + uint64 initNumBatch, + uint64 finalNewBatch, + bytes32 newLocalExitRoot, + bytes32 newStateRoot ) public returns (bytes) ``` +Function to calculate the input snark bytes - +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`initNumBatch` | uint64 | Batch which the aggregator starts teh verification +|`finalNewBatch` | uint64 | Last batch aggregator intends to verify +|`newLocalExitRoot` | bytes32 | New local exit root once the batch is processed +|`newStateRoot` | bytes32 | New State root once the batch is processed ## Events ### SequenceBatches @@ -234,3 +310,11 @@ Emitted when a trusted sequencer update the forcebatch boolean Emitted when a trusted sequencer update his URL +### ProofDifferentState +```solidity + event ProofDifferentState( + ) +``` + +Emitted when is proved a different state given the same batches + From e8c6344c27efbdfda4c9c6d03332fe030bea962c Mon Sep 17 00:00:00 2001 From: invocamanman Date: Fri, 18 Nov 2022 17:47:36 +0100 Subject: [PATCH 19/71] add emergency state --- compiled-contracts/Bridge.json | 110 ++++---- compiled-contracts/BridgeMock.json | 122 ++++---- compiled-contracts/ERC20PermitMock.json | 4 +- compiled-contracts/GlobalExitRootManager.json | 4 +- .../GlobalExitRootManagerL2.json | 4 +- .../GlobalExitRootManagerL2Mock.json | 4 +- .../GlobalExitRootManagerMock.json | 4 +- compiled-contracts/ProofOfEfficiency.json | 88 +++--- compiled-contracts/ProofOfEfficiencyMock.json | 88 +++--- compiled-contracts/TokenWrapped.json | 195 +++++++++---- .../VerifierRollupHelperMock.json | 4 +- contracts/Bridge.sol | 265 +++++++++--------- contracts/GlobalExitRootManager.sol | 3 +- contracts/ProofOfEfficiency.sol | 104 ++++--- contracts/interfaces/IBridge.sol | 4 +- contracts/lib/EmergencyManager.sol | 59 ++++ contracts/lib/TokenWrapped.sol | 122 +++++++- contracts/mocks/BridgeMock.sol | 2 - docs/Bridge.md | 25 +- docs/ProofOfEfficiency.md | 65 +++-- docs/lib/EmergencyManager.md | 39 +++ docs/lib/TokenWrapped.md | 22 +- hardhat.config.js | 4 +- test/contracts/bridge.test.js | 66 ++--- 24 files changed, 866 insertions(+), 541 deletions(-) create mode 100644 contracts/lib/EmergencyManager.sol create mode 100644 docs/lib/EmergencyManager.md diff --git a/compiled-contracts/Bridge.json b/compiled-contracts/Bridge.json index 5ebf7465c..151cad9d3 100644 --- a/compiled-contracts/Bridge.json +++ b/compiled-contracts/Bridge.json @@ -95,6 +95,18 @@ "name": "ClaimEvent", "type": "event" }, + { + "anonymous": false, + "inputs": [], + "name": "EmergencyStateActivated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "EmergencyStateDeactivated", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -133,32 +145,6 @@ "name": "NewWrappedToken", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, { "inputs": [], "name": "LEAF_TYPE_ASSET", @@ -198,6 +184,13 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "activateEmergencyState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -389,6 +382,13 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "deactivateEmergencyState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "depositCount", @@ -526,12 +526,12 @@ }, { "inputs": [], - "name": "networkID", + "name": "isEmergencyState", "outputs": [ { - "internalType": "uint32", + "internalType": "bool", "name": "", - "type": "uint32" + "type": "bool" } ], "stateMutability": "view", @@ -539,19 +539,12 @@ }, { "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", + "name": "networkID", "outputs": [ { - "internalType": "bool", + "internalType": "uint32", "name": "", - "type": "bool" + "type": "uint32" } ], "stateMutability": "view", @@ -581,22 +574,24 @@ "internalType": "address", "name": "originTokenAddress", "type": "address" - } - ], - "name": "precalculatedWrapperAddress", - "outputs": [ + }, { - "internalType": "address", - "name": "", - "type": "address" + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "uint8", + "name": "decimals", + "type": "uint8" } ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "tokenImplementation", + "name": "precalculatedWrapperAddress", "outputs": [ { "internalType": "address", @@ -626,13 +621,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -692,8 +680,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50615c38806100206000396000f3fe608060405260043610620001ab5760003560e01c80637b6323c111620000e7578063bab161bf1162000089578063e73758811162000060578063e73758811462000632578063ed6be5c91462000666578063ff634ed7146200067d57600080fd5b8063bab161bf14620005b7578063d02103ca14620005ec578063d96a15f7146200061b57600080fd5b80638f61151911620000be5780638f6115191462000539578063a08e8a081462000568578063b7e6a7d4146200059257600080fd5b80637b6323c114620004b557806381b1c17414620004da5780638456cb59146200052157600080fd5b80633da8168211620001515780634638554911620001285780634638554914620004515780635c975abb1462000476578063647c576c146200049057600080fd5b80633da81682146200030f5780633e19704314620003455780633f4ba83a146200043957600080fd5b80632f3a3d5d11620001865780632f3a3d5d146200023f578063318aee3d146200026e5780633ae0504714620002f757600080fd5b80630871e97114620001b057806322e95f2c14620001c95780632dfdf0b51462000218575b600080fd5b620001c7620001c13660046200375b565b62000694565b005b348015620001d657600080fd5b50620001ee620001e836600462003817565b62000c92565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200022557600080fd5b506200023060215481565b6040519081526020016200020f565b3480156200024c57600080fd5b50608b54620001ee9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200027b57600080fd5b50620002c56200028d36600462003853565b60896020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff9091166020830152016200020f565b3480156200030457600080fd5b506200023062000d35565b3480156200031c57600080fd5b50620003346200032e36600462003972565b62000e28565b60405190151581526020016200020f565b3480156200035257600080fd5b506200023062000364366004620039f0565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200044657600080fd5b50620001c762000f28565b3480156200045e57600080fd5b50620001c76200047036600462003b1f565b62001003565b3480156200048357600080fd5b5060545460ff1662000334565b3480156200049d57600080fd5b50620001c7620004af36600462003c06565b62001667565b348015620004c257600080fd5b50620001c7620004d436600462003b1f565b620018f5565b348015620004e757600080fd5b50620001ee620004f936600462003c56565b60886020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200052e57600080fd5b50620001c7620022be565b3480156200054657600080fd5b50608c54620001ee9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200057557600080fd5b506200057f600081565b60405160ff90911681526020016200020f565b3480156200059f57600080fd5b50620001ee620005b136600462003817565b62002397565b348015620005c457600080fd5b50608654620005d69063ffffffff1681565b60405163ffffffff90911681526020016200020f565b348015620005f957600080fd5b50608a54620001ee9073ffffffffffffffffffffffffffffffffffffffff1681565b620001c76200062c36600462003c70565b62002460565b3480156200063f57600080fd5b50620003346200065136600462003c56565b60876020526000908152604090205460ff1681565b3480156200067357600080fd5b50620005d6600081565b3480156200068a57600080fd5b506200057f600181565b6200069e620026b7565b60865463ffffffff908116908616036200073f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff8916620007fb57853414620007f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c55450000000000000000000000000000000000606482015260840162000736565b6000915062000b0f565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526089602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620008fc576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af1158015620008c3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008e9919062003ce7565b5060208101518151909450925062000b0d565b84156200091157620009118a88888862002726565b6200093573ffffffffffffffffffffffffffffffffffffffff8b1633308a62002e50565b899350608660009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000999573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620009e1919081019062003d82565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000a2d573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262000a75919081019062003d82565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ac1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ae7919062003dbb565b60405160200162000afb9392919062003e27565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162000b5198979695949392919062003e64565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000c0c9062002f2e565b608a5473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000c3462000d35565b6040518263ffffffff1660e01b815260040162000c5391815260200190565b600060405180830381600087803b15801562000c6e57600080fd5b505af115801562000c83573d6000803e3d6000fd5b50505050505050505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526088909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b602154600090819081805b602081101562000e1f578260011660010362000da0576001816020811062000d6c5762000d6c62003edd565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000dcd565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000dda60028462003f3b565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000e169062003f77565b91505062000d40565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000f1b578160011660010362000ea55786818151811062000e635762000e6362003edd565b60200260200101518360405160200162000e87929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000ef7565b8287828151811062000ebb5762000ebb62003edd565b602002602001015160405160200162000ede929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000f0460028362003f3b565b91508062000f128162003f77565b91505062000e38565b5050909114949350505050565b608c5473ffffffffffffffffffffffffffffffffffffffff16331462000ff7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a40162000736565b62001001620030ac565b565b6200100d620026b7565b63ffffffff891660009081526087602052604090205460ff1615620010b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d4544000000000000000000000000000000000000000000000000000000606482015260840162000736565b608a546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af11580156200114e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001174919062003fb2565b60000362001205576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000606482015260840162000736565b60865463ffffffff858116911614620012a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000606482015260840162000736565b60865460009063ffffffff16620012ba575086620012bd565b50875b8151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08c811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608d811b82166025860152918c901b909216603984015289901b16603d82015260518101879052607180820193909352815180820390930183526091019052805191012062001399905b8c8c63ffffffff168462000e28565b62001427576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000736565b63ffffffff8a1660009081526087602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff861690859062001495908a908c90889060240162003fcc565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001518919062004012565b60006040518083038185875af1925050503d806000811462001557576040519150601f19603f3d011682016040523d82523d6000602084013e6200155c565b606091505b5050905080620015ee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c454400000000000000000000000000000000000000000000000000000000606482015260840162000736565b6040805163ffffffff8d811682528a16602082015273ffffffffffffffffffffffffffffffffffffffff89811682840152871660608201526080810186905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a1505050505050505050505050565b600054610100900460ff1615808015620016885750600054600160ff909116105b80620016a45750303b158015620016a4575060005460ff166001145b62001732576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840162000736565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156200179157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b608680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8616179055608a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790556040516200180f9062003700565b604051809103906000f0801580156200182c573d6000803e3d6000fd5b50608b80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff93841617909155608c80549091169184169190911790556200188b6200312b565b8015620018ef57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b620018ff620026b7565b63ffffffff891660009081526087602052604090205460ff1615620019a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4272696467653a3a636c61696d41737365743a20414c52454144595f434c414960448201527f4d45440000000000000000000000000000000000000000000000000000000000606482015260840162000736565b608a546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001a40573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a66919062003fb2565b60000362001af7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f4272696467653a3a636c61696d41737365743a20474c4f42414c5f455849545f60448201527f524f4f545f444f45535f4e4f545f4d4154434800000000000000000000000000606482015260840162000736565b60865463ffffffff85811691161462001b93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4272696467653a3a636c61696d41737365743a2044455354494e4154494f4e5f60448201527f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000000000606482015260840162000736565b60865460009063ffffffff1662001bac57508662001baf565b50875b8151602080840191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08c811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608d811b82166025860152918c901b909216603984015289901b16603d82015260518101879052607180820193909352815180820390930183526091019052805191012062001c62906200138a565b62001cca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a636c61696d41737365743a20534d545f494e56414c494400604482015260640162000736565b63ffffffff8a16600090815260876020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff861662001e3b576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff861690859060405162001d5d919062004012565b60006040518083038185875af1925050503d806000811462001d9c576040519150601f19603f3d011682016040523d82523d6000602084013e62001da1565b606091505b505090508062001e34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c454400000000000000000000000000000000000000000000000000606482015260840162000736565b5062002246565b60865463ffffffff9081169088160362001e785762001e7273ffffffffffffffffffffffffffffffffffffffff87168585620031ee565b62002246565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606088901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152608890935291205490915073ffffffffffffffffffffffffffffffffffffffff1680620021a557608b5460009062001f639073ffffffffffffffffffffffffffffffffffffffff168462003246565b905060008060008780602001905181019062001f80919062004030565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848e8e6040518663ffffffff1660e01b815260040162001fc9959493929190620040a6565b600060405180830381600087803b15801562001fe457600080fd5b505af115801562001ff9573d6000803e3d6000fd5b50505050836088600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808e63ffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815250608960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598d8d86604051620021939392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062002243565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018790528216906340c10f19906044016020604051808303816000875af11580156200221b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002241919062003ce7565b505b50505b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b608c5473ffffffffffffffffffffffffffffffffffffffff1633146200238d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a40162000736565b6200100162003326565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120608b54909150620024589073ffffffffffffffffffffffffffffffffffffffff168262003384565b949350505050565b6200246a620026b7565b60865463ffffffff9081169084160362002507576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c4600000000000000000000000000000000000000000000606482015260840162000736565b6086546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620025549260019263ffffffff9092169133918991899134918a919062003e64565b60405180910390a16086548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620026379062002f2e565b608a5473ffffffffffffffffffffffffffffffffffffffff166333d6247d6200265f62000d35565b6040518263ffffffff1660e01b81526004016200267e91815260200190565b600060405180830381600087803b1580156200269957600080fd5b505af1158015620026ae573d6000803e3d6000fd5b50505050505050565b60545460ff161562001001576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015260640162000736565b60006200276983838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200340892505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002aed576000808080808080620027cc896004818d62004106565b810190620027db919062004132565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614620028a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000736565b73ffffffffffffffffffffffffffffffffffffffff861630146200294d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000736565b8a8514620029de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d4154434800000000000000000000000000000000000000606482015260840162000736565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002a99919062004012565b6000604051808303816000865af19150503d806000811462002ad8576040519150601f19603f3d011682016040523d82523d6000602084013e62002add565b606091505b5050505050505050505062002e49565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002b9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000736565b60008080808080808062002bb28a6004818e62004106565b81019062002bc191906200418d565b975097509750975097509750975097503373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161462002c8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000736565b73ffffffffffffffffffffffffffffffffffffffff8716301462002d35576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000736565b6040805173ffffffffffffffffffffffffffffffffffffffff8a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002df9919062004012565b6000604051808303816000865af19150503d806000811462002e38576040519150601f19603f3d011682016040523d82523d6000602084013e62002e3d565b606091505b50505050505050505050505b5050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052620018ef9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526200340f565b80600162002f3f6020600262004352565b62002f4b919062004360565b6021541062002fdd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c00000000000000000000000000000000000000000000606482015260840162000736565b60016021600082825462002ff291906200437a565b909155505060215460005b60208110156200309c5781600116600103620030325782600182602081106200302a576200302a62003edd565b015550505050565b6001816020811062003048576200304862003edd565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262003085919062003f3b565b915080620030938162003f77565b91505062002ffd565b50620030a762004395565b505050565b620030b662003522565b605480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b600054610100900460ff16620031c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000736565b605480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052620030a79084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002eab565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000d2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640162000736565b62003330620026b7565b605480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258620031013390565b6000620034018383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b600062003473826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620035909092919063ffffffff16565b805190915015620030a7578080602001905181019062003494919062003ce7565b620030a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000736565b60545460ff1662001001576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015260640162000736565b60606200245884846000858573ffffffffffffffffffffffffffffffffffffffff85163b6200361c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000736565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405162003647919062004012565b60006040518083038185875af1925050503d806000811462003686576040519150601f19603f3d011682016040523d82523d6000602084013e6200368b565b606091505b50915091506200369d828286620036a8565b979650505050505050565b60608315620036b957508162003401565b825115620036ca5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007369190620043c4565b61182980620043da83390190565b73ffffffffffffffffffffffffffffffffffffffff811681146200373157600080fd5b50565b803562003741816200370e565b919050565b803563ffffffff811681146200374157600080fd5b60008060008060008060a087890312156200377557600080fd5b863562003782816200370e565b9550620037926020880162003746565b94506040870135620037a4816200370e565b935060608701359250608087013567ffffffffffffffff80821115620037c957600080fd5b818901915089601f830112620037de57600080fd5b813581811115620037ee57600080fd5b8a60208285010111156200380157600080fd5b6020830194508093505050509295509295509295565b600080604083850312156200382b57600080fd5b620038368362003746565b9150602083013562003848816200370e565b809150509250929050565b6000602082840312156200386657600080fd5b813562003401816200370e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620038ec57620038ec62003873565b604052919050565b600082601f8301126200390657600080fd5b8135602067ffffffffffffffff82111562003925576200392562003873565b8160051b62003936828201620038a2565b92835284810182019282810190878511156200395157600080fd5b83870192505b848310156200369d5782358252918301919083019062003957565b600080600080608085870312156200398957600080fd5b84359350602085013567ffffffffffffffff80821115620039a957600080fd5b620039b788838901620038f4565b9450604087013591508082168214620039cf57600080fd5b509396929550929360600135925050565b60ff811681146200373157600080fd5b600080600080600080600060e0888a03121562003a0c57600080fd5b873562003a1981620039e0565b965062003a296020890162003746565b9550604088013562003a3b816200370e565b945062003a4b6060890162003746565b9350608088013562003a5d816200370e565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562003a975762003a9762003873565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011262003ad557600080fd5b813562003aec62003ae68262003a7a565b620038a2565b81815284602083860101111562003b0257600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562003b4057600080fd5b8a3567ffffffffffffffff8082111562003b5957600080fd5b62003b678e838f01620038f4565b9b5062003b7760208e0162003746565b9a5060408d0135995060608d0135985062003b9560808e0162003746565b975062003ba560a08e0162003734565b965062003bb560c08e0162003746565b955062003bc560e08e0162003734565b94506101008d013593506101208d013591508082111562003be557600080fd5b5062003bf48d828e0162003ac3565b9150509295989b9194979a5092959850565b60008060006060848603121562003c1c57600080fd5b62003c278462003746565b9250602084013562003c39816200370e565b9150604084013562003c4b816200370e565b809150509250925092565b60006020828403121562003c6957600080fd5b5035919050565b60008060006060848603121562003c8657600080fd5b62003c918462003746565b9250602084013562003ca3816200370e565b9150604084013567ffffffffffffffff81111562003cc057600080fd5b62003cce8682870162003ac3565b9150509250925092565b80151581146200373157600080fd5b60006020828403121562003cfa57600080fd5b8151620034018162003cd8565b60005b8381101562003d2457818101518382015260200162003d0a565b83811115620018ef5750506000910152565b600082601f83011262003d4857600080fd5b815162003d5962003ae68262003a7a565b81815284602083860101111562003d6f57600080fd5b6200245882602083016020870162003d07565b60006020828403121562003d9557600080fd5b815167ffffffffffffffff81111562003dad57600080fd5b620024588482850162003d36565b60006020828403121562003dce57600080fd5b81516200340181620039e0565b6000815180845262003df581602086016020860162003d07565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60608152600062003e3c606083018662003ddb565b828103602084015262003e50818662003ddb565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003ec48285018762003ddb565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003f72577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003fab5762003fab62003f0c565b5060010190565b60006020828403121562003fc557600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062004009606083018462003ddb565b95945050505050565b600082516200402681846020870162003d07565b9190910192915050565b6000806000606084860312156200404657600080fd5b835167ffffffffffffffff808211156200405f57600080fd5b6200406d8783880162003d36565b945060208601519150808211156200408457600080fd5b50620040938682870162003d36565b925050604084015162003c4b81620039e0565b60a081526000620040bb60a083018862003ddb565b8281036020840152620040cf818862003ddb565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b600080858511156200411757600080fd5b838611156200412557600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200414e57600080fd5b87356200415b816200370e565b965060208801356200416d816200370e565b95506040880135945060608801359350608088013562003a5d81620039e0565b600080600080600080600080610100898b031215620041ab57600080fd5b8835620041b8816200370e565b97506020890135620041ca816200370e565b965060408901359550606089013594506080890135620041ea8162003cd8565b935060a0890135620041fc81620039e0565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200427857817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156200425c576200425c62003f0c565b808516156200426a57918102915b93841c93908002906200421e565b509250929050565b600082620042915750600162000d2f565b81620042a05750600062000d2f565b8160018114620042b95760028114620042c457620042e4565b600191505062000d2f565b60ff841115620042d857620042d862003f0c565b50506001821b62000d2f565b5060208310610133831016604e8410600b841016171562004309575081810a62000d2f565b62004315838362004219565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156200434a576200434a62003f0c565b029392505050565b600062003401838362004280565b60008282101562004375576200437562003f0c565b500390565b6000821982111562004390576200439062003f0c565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60208152600062003401602083018462003ddb56fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a264697066735822122057eea8bc30140fac426a3ce5af5ced0f516e15d62de7a29d50ba5e2d711e9f2364736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001ab5760003560e01c80637b6323c111620000e7578063bab161bf1162000089578063e73758811162000060578063e73758811462000632578063ed6be5c91462000666578063ff634ed7146200067d57600080fd5b8063bab161bf14620005b7578063d02103ca14620005ec578063d96a15f7146200061b57600080fd5b80638f61151911620000be5780638f6115191462000539578063a08e8a081462000568578063b7e6a7d4146200059257600080fd5b80637b6323c114620004b557806381b1c17414620004da5780638456cb59146200052157600080fd5b80633da8168211620001515780634638554911620001285780634638554914620004515780635c975abb1462000476578063647c576c146200049057600080fd5b80633da81682146200030f5780633e19704314620003455780633f4ba83a146200043957600080fd5b80632f3a3d5d11620001865780632f3a3d5d146200023f578063318aee3d146200026e5780633ae0504714620002f757600080fd5b80630871e97114620001b057806322e95f2c14620001c95780632dfdf0b51462000218575b600080fd5b620001c7620001c13660046200375b565b62000694565b005b348015620001d657600080fd5b50620001ee620001e836600462003817565b62000c92565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200022557600080fd5b506200023060215481565b6040519081526020016200020f565b3480156200024c57600080fd5b50608b54620001ee9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200027b57600080fd5b50620002c56200028d36600462003853565b60896020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff9091166020830152016200020f565b3480156200030457600080fd5b506200023062000d35565b3480156200031c57600080fd5b50620003346200032e36600462003972565b62000e28565b60405190151581526020016200020f565b3480156200035257600080fd5b506200023062000364366004620039f0565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200044657600080fd5b50620001c762000f28565b3480156200045e57600080fd5b50620001c76200047036600462003b1f565b62001003565b3480156200048357600080fd5b5060545460ff1662000334565b3480156200049d57600080fd5b50620001c7620004af36600462003c06565b62001667565b348015620004c257600080fd5b50620001c7620004d436600462003b1f565b620018f5565b348015620004e757600080fd5b50620001ee620004f936600462003c56565b60886020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156200052e57600080fd5b50620001c7620022be565b3480156200054657600080fd5b50608c54620001ee9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200057557600080fd5b506200057f600081565b60405160ff90911681526020016200020f565b3480156200059f57600080fd5b50620001ee620005b136600462003817565b62002397565b348015620005c457600080fd5b50608654620005d69063ffffffff1681565b60405163ffffffff90911681526020016200020f565b348015620005f957600080fd5b50608a54620001ee9073ffffffffffffffffffffffffffffffffffffffff1681565b620001c76200062c36600462003c70565b62002460565b3480156200063f57600080fd5b50620003346200065136600462003c56565b60876020526000908152604090205460ff1681565b3480156200067357600080fd5b50620005d6600081565b3480156200068a57600080fd5b506200057f600181565b6200069e620026b7565b60865463ffffffff908116908616036200073f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff8916620007fb57853414620007f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c55450000000000000000000000000000000000606482015260840162000736565b6000915062000b0f565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526089602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620008fc576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af1158015620008c3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008e9919062003ce7565b5060208101518151909450925062000b0d565b84156200091157620009118a88888862002726565b6200093573ffffffffffffffffffffffffffffffffffffffff8b1633308a62002e50565b899350608660009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000999573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620009e1919081019062003d82565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000a2d573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262000a75919081019062003d82565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ac1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ae7919062003dbb565b60405160200162000afb9392919062003e27565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162000b5198979695949392919062003e64565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000c0c9062002f2e565b608a5473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000c3462000d35565b6040518263ffffffff1660e01b815260040162000c5391815260200190565b600060405180830381600087803b15801562000c6e57600080fd5b505af115801562000c83573d6000803e3d6000fd5b50505050505050505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526088909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b602154600090819081805b602081101562000e1f578260011660010362000da0576001816020811062000d6c5762000d6c62003edd565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000dcd565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000dda60028462003f3b565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000e169062003f77565b91505062000d40565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000f1b578160011660010362000ea55786818151811062000e635762000e6362003edd565b60200260200101518360405160200162000e87929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000ef7565b8287828151811062000ebb5762000ebb62003edd565b602002602001015160405160200162000ede929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000f0460028362003f3b565b91508062000f128162003f77565b91505062000e38565b5050909114949350505050565b608c5473ffffffffffffffffffffffffffffffffffffffff16331462000ff7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a40162000736565b62001001620030ac565b565b6200100d620026b7565b63ffffffff891660009081526087602052604090205460ff1615620010b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d4544000000000000000000000000000000000000000000000000000000606482015260840162000736565b608a546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af11580156200114e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001174919062003fb2565b60000362001205576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000606482015260840162000736565b60865463ffffffff858116911614620012a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000606482015260840162000736565b60865460009063ffffffff16620012ba575086620012bd565b50875b8151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08c811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608d811b82166025860152918c901b909216603984015289901b16603d82015260518101879052607180820193909352815180820390930183526091019052805191012062001399905b8c8c63ffffffff168462000e28565b62001427576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000736565b63ffffffff8a1660009081526087602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff861690859062001495908a908c90889060240162003fcc565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001518919062004012565b60006040518083038185875af1925050503d806000811462001557576040519150601f19603f3d011682016040523d82523d6000602084013e6200155c565b606091505b5050905080620015ee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c454400000000000000000000000000000000000000000000000000000000606482015260840162000736565b6040805163ffffffff8d811682528a16602082015273ffffffffffffffffffffffffffffffffffffffff89811682840152871660608201526080810186905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a1505050505050505050505050565b600054610100900460ff1615808015620016885750600054600160ff909116105b80620016a45750303b158015620016a4575060005460ff166001145b62001732576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840162000736565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156200179157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b608680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8616179055608a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790556040516200180f9062003700565b604051809103906000f0801580156200182c573d6000803e3d6000fd5b50608b80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff93841617909155608c80549091169184169190911790556200188b6200312b565b8015620018ef57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b620018ff620026b7565b63ffffffff891660009081526087602052604090205460ff1615620019a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4272696467653a3a636c61696d41737365743a20414c52454144595f434c414960448201527f4d45440000000000000000000000000000000000000000000000000000000000606482015260840162000736565b608a546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001a40573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a66919062003fb2565b60000362001af7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f4272696467653a3a636c61696d41737365743a20474c4f42414c5f455849545f60448201527f524f4f545f444f45535f4e4f545f4d4154434800000000000000000000000000606482015260840162000736565b60865463ffffffff85811691161462001b93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4272696467653a3a636c61696d41737365743a2044455354494e4154494f4e5f60448201527f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000000000606482015260840162000736565b60865460009063ffffffff1662001bac57508662001baf565b50875b8151602080840191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08c811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608d811b82166025860152918c901b909216603984015289901b16603d82015260518101879052607180820193909352815180820390930183526091019052805191012062001c62906200138a565b62001cca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a636c61696d41737365743a20534d545f494e56414c494400604482015260640162000736565b63ffffffff8a16600090815260876020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff861662001e3b576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff861690859060405162001d5d919062004012565b60006040518083038185875af1925050503d806000811462001d9c576040519150601f19603f3d011682016040523d82523d6000602084013e62001da1565b606091505b505090508062001e34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c454400000000000000000000000000000000000000000000000000606482015260840162000736565b5062002246565b60865463ffffffff9081169088160362001e785762001e7273ffffffffffffffffffffffffffffffffffffffff87168585620031ee565b62002246565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606088901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152608890935291205490915073ffffffffffffffffffffffffffffffffffffffff1680620021a557608b5460009062001f639073ffffffffffffffffffffffffffffffffffffffff168462003246565b905060008060008780602001905181019062001f80919062004030565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848e8e6040518663ffffffff1660e01b815260040162001fc9959493929190620040a6565b600060405180830381600087803b15801562001fe457600080fd5b505af115801562001ff9573d6000803e3d6000fd5b50505050836088600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808e63ffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815250608960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598d8d86604051620021939392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062002243565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018790528216906340c10f19906044016020604051808303816000875af11580156200221b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002241919062003ce7565b505b50505b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b608c5473ffffffffffffffffffffffffffffffffffffffff1633146200238d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a40162000736565b6200100162003326565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120608b54909150620024589073ffffffffffffffffffffffffffffffffffffffff168262003384565b949350505050565b6200246a620026b7565b60865463ffffffff9081169084160362002507576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c4600000000000000000000000000000000000000000000606482015260840162000736565b6086546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620025549260019263ffffffff9092169133918991899134918a919062003e64565b60405180910390a16086548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620026379062002f2e565b608a5473ffffffffffffffffffffffffffffffffffffffff166333d6247d6200265f62000d35565b6040518263ffffffff1660e01b81526004016200267e91815260200190565b600060405180830381600087803b1580156200269957600080fd5b505af1158015620026ae573d6000803e3d6000fd5b50505050505050565b60545460ff161562001001576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015260640162000736565b60006200276983838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200340892505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002aed576000808080808080620027cc896004818d62004106565b810190620027db919062004132565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614620028a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000736565b73ffffffffffffffffffffffffffffffffffffffff861630146200294d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000736565b8a8514620029de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d4154434800000000000000000000000000000000000000606482015260840162000736565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002a99919062004012565b6000604051808303816000865af19150503d806000811462002ad8576040519150601f19603f3d011682016040523d82523d6000602084013e62002add565b606091505b5050505050505050505062002e49565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002b9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000736565b60008080808080808062002bb28a6004818e62004106565b81019062002bc191906200418d565b975097509750975097509750975097503373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161462002c8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000736565b73ffffffffffffffffffffffffffffffffffffffff8716301462002d35576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000736565b6040805173ffffffffffffffffffffffffffffffffffffffff8a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002df9919062004012565b6000604051808303816000865af19150503d806000811462002e38576040519150601f19603f3d011682016040523d82523d6000602084013e62002e3d565b606091505b50505050505050505050505b5050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052620018ef9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526200340f565b80600162002f3f6020600262004352565b62002f4b919062004360565b6021541062002fdd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c00000000000000000000000000000000000000000000606482015260840162000736565b60016021600082825462002ff291906200437a565b909155505060215460005b60208110156200309c5781600116600103620030325782600182602081106200302a576200302a62003edd565b015550505050565b6001816020811062003048576200304862003edd565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262003085919062003f3b565b915080620030938162003f77565b91505062002ffd565b50620030a762004395565b505050565b620030b662003522565b605480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b600054610100900460ff16620031c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000736565b605480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052620030a79084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002eab565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000d2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640162000736565b62003330620026b7565b605480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258620031013390565b6000620034018383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b600062003473826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620035909092919063ffffffff16565b805190915015620030a7578080602001905181019062003494919062003ce7565b620030a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000736565b60545460ff1662001001576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015260640162000736565b60606200245884846000858573ffffffffffffffffffffffffffffffffffffffff85163b6200361c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000736565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405162003647919062004012565b60006040518083038185875af1925050503d806000811462003686576040519150601f19603f3d011682016040523d82523d6000602084013e6200368b565b606091505b50915091506200369d828286620036a8565b979650505050505050565b60608315620036b957508162003401565b825115620036ca5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007369190620043c4565b61182980620043da83390190565b73ffffffffffffffffffffffffffffffffffffffff811681146200373157600080fd5b50565b803562003741816200370e565b919050565b803563ffffffff811681146200374157600080fd5b60008060008060008060a087890312156200377557600080fd5b863562003782816200370e565b9550620037926020880162003746565b94506040870135620037a4816200370e565b935060608701359250608087013567ffffffffffffffff80821115620037c957600080fd5b818901915089601f830112620037de57600080fd5b813581811115620037ee57600080fd5b8a60208285010111156200380157600080fd5b6020830194508093505050509295509295509295565b600080604083850312156200382b57600080fd5b620038368362003746565b9150602083013562003848816200370e565b809150509250929050565b6000602082840312156200386657600080fd5b813562003401816200370e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620038ec57620038ec62003873565b604052919050565b600082601f8301126200390657600080fd5b8135602067ffffffffffffffff82111562003925576200392562003873565b8160051b62003936828201620038a2565b92835284810182019282810190878511156200395157600080fd5b83870192505b848310156200369d5782358252918301919083019062003957565b600080600080608085870312156200398957600080fd5b84359350602085013567ffffffffffffffff80821115620039a957600080fd5b620039b788838901620038f4565b9450604087013591508082168214620039cf57600080fd5b509396929550929360600135925050565b60ff811681146200373157600080fd5b600080600080600080600060e0888a03121562003a0c57600080fd5b873562003a1981620039e0565b965062003a296020890162003746565b9550604088013562003a3b816200370e565b945062003a4b6060890162003746565b9350608088013562003a5d816200370e565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562003a975762003a9762003873565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011262003ad557600080fd5b813562003aec62003ae68262003a7a565b620038a2565b81815284602083860101111562003b0257600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562003b4057600080fd5b8a3567ffffffffffffffff8082111562003b5957600080fd5b62003b678e838f01620038f4565b9b5062003b7760208e0162003746565b9a5060408d0135995060608d0135985062003b9560808e0162003746565b975062003ba560a08e0162003734565b965062003bb560c08e0162003746565b955062003bc560e08e0162003734565b94506101008d013593506101208d013591508082111562003be557600080fd5b5062003bf48d828e0162003ac3565b9150509295989b9194979a5092959850565b60008060006060848603121562003c1c57600080fd5b62003c278462003746565b9250602084013562003c39816200370e565b9150604084013562003c4b816200370e565b809150509250925092565b60006020828403121562003c6957600080fd5b5035919050565b60008060006060848603121562003c8657600080fd5b62003c918462003746565b9250602084013562003ca3816200370e565b9150604084013567ffffffffffffffff81111562003cc057600080fd5b62003cce8682870162003ac3565b9150509250925092565b80151581146200373157600080fd5b60006020828403121562003cfa57600080fd5b8151620034018162003cd8565b60005b8381101562003d2457818101518382015260200162003d0a565b83811115620018ef5750506000910152565b600082601f83011262003d4857600080fd5b815162003d5962003ae68262003a7a565b81815284602083860101111562003d6f57600080fd5b6200245882602083016020870162003d07565b60006020828403121562003d9557600080fd5b815167ffffffffffffffff81111562003dad57600080fd5b620024588482850162003d36565b60006020828403121562003dce57600080fd5b81516200340181620039e0565b6000815180845262003df581602086016020860162003d07565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60608152600062003e3c606083018662003ddb565b828103602084015262003e50818662003ddb565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003ec48285018762003ddb565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003f72577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003fab5762003fab62003f0c565b5060010190565b60006020828403121562003fc557600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062004009606083018462003ddb565b95945050505050565b600082516200402681846020870162003d07565b9190910192915050565b6000806000606084860312156200404657600080fd5b835167ffffffffffffffff808211156200405f57600080fd5b6200406d8783880162003d36565b945060208601519150808211156200408457600080fd5b50620040938682870162003d36565b925050604084015162003c4b81620039e0565b60a081526000620040bb60a083018862003ddb565b8281036020840152620040cf818862003ddb565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b600080858511156200411757600080fd5b838611156200412557600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200414e57600080fd5b87356200415b816200370e565b965060208801356200416d816200370e565b95506040880135945060608801359350608088013562003a5d81620039e0565b600080600080600080600080610100898b031215620041ab57600080fd5b8835620041b8816200370e565b97506020890135620041ca816200370e565b965060408901359550606089013594506080890135620041ea8162003cd8565b935060a0890135620041fc81620039e0565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200427857817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156200425c576200425c62003f0c565b808516156200426a57918102915b93841c93908002906200421e565b509250929050565b600082620042915750600162000d2f565b81620042a05750600062000d2f565b8160018114620042b95760028114620042c457620042e4565b600191505062000d2f565b60ff841115620042d857620042d862003f0c565b50506001821b62000d2f565b5060208310610133831016604e8410600b841016171562004309575081810a62000d2f565b62004315838362004219565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156200434a576200434a62003f0c565b029392505050565b600062003401838362004280565b60008282101562004375576200437562003f0c565b500390565b6000821982111562004390576200439062003f0c565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60208152600062003401602083018462003ddb56fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a264697066735822122057eea8bc30140fac426a3ce5af5ced0f516e15d62de7a29d50ba5e2d711e9f2364736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506157fb806100206000396000f3fe6080604052600436106200019f5760003560e01c80637b6323c111620000e7578063d02103ca1162000089578063e73758811162000060578063e7375881146200059d578063ed6be5c914620005d1578063ff634ed714620005e857600080fd5b8063d02103ca146200054c578063d96a15f7146200056e578063dbc16976146200058557600080fd5b8063a08e8a0811620000be578063a08e8a0814620004c3578063aaa13cc214620004ed578063bab161bf146200051257600080fd5b80637b6323c1146200044257806381b1c17414620004675780638f61151914620004a157600080fd5b8063318aee3d11620001515780633e19704311620001285780633e19704314620003175780634638554914620003f8578063647c576c146200041d57600080fd5b8063318aee3d146200026b5780633ae0504714620002da5780633da8168214620002f257600080fd5b80632072f6c511620001865780632072f6c514620001ee57806322e95f2c14620002065780632dfdf0b5146200024457600080fd5b80630871e97114620001a457806315064c9614620001bd575b600080fd5b620001bb620001b536600462003077565b620005ff565b005b348015620001ca57600080fd5b50602254620001d99060ff1681565b60405190151581526020015b60405180910390f35b348015620001fb57600080fd5b50620001bb62000bae565b3480156200021357600080fd5b506200022b6200022536600462003104565b62000c62565b6040516001600160a01b039091168152602001620001e5565b3480156200025157600080fd5b506200025c60215481565b604051908152602001620001e5565b3480156200027857600080fd5b50620002b56200028a36600462003140565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001e5565b348015620002e757600080fd5b506200025c62000cf6565b348015620002ff57600080fd5b50620001d96200031136600462003241565b62000de9565b3480156200032457600080fd5b506200025c62000336366004620032bf565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200040557600080fd5b50620001bb62000417366004620033d0565b62000ee9565b3480156200042a57600080fd5b50620001bb6200043c366004620034b7565b6200116f565b3480156200044f57600080fd5b50620001bb62000461366004620033d0565b62001349565b3480156200047457600080fd5b506200022b6200048636600462003507565b6024602052600090815260409020546001600160a01b031681565b348015620004ae57600080fd5b506027546200022b906001600160a01b031681565b348015620004d057600080fd5b50620004da600081565b60405160ff9091168152602001620001e5565b348015620004fa57600080fd5b506200022b6200050c36600462003521565b6200193f565b3480156200051f57600080fd5b506022546200053690610100900463ffffffff1681565b60405163ffffffff9091168152602001620001e5565b3480156200055957600080fd5b506026546200022b906001600160a01b031681565b620001bb6200057f366004620035d5565b62001aab565b3480156200059257600080fd5b50620001bb62001d70565b348015620005aa57600080fd5b50620001d9620005bc36600462003507565b60236020526000908152604090205460ff1681565b348015620005de57600080fd5b5062000536600081565b348015620005f557600080fd5b50620004da600181565b60225460ff1615620006a45760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60225463ffffffff6101009091048116908616036200072c5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200069b565b60008060606001600160a01b038916620007c157853414620007b75760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200069b565b6000915062000a4b565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620008a8576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af11580156200086f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200089591906200364c565b5060208101518151909450925062000a49565b8415620008bd57620008bd8a88888862001e22565b620008d46001600160a01b038b1633308a62002448565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200092b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620009559190810190620036ef565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000994573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620009be9190810190620036ef565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620009fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a23919062003728565b60405160200162000a379392919062003776565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162000a8d989796959493929190620037b3565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000b3590620024fb565b6026546001600160a01b03166333d6247d62000b5062000cf6565b6040518263ffffffff1660e01b815260040162000b6f91815260200190565b600060405180830381600087803b15801562000b8a57600080fd5b505af115801562000b9f573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b0316331462000c565760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200069b565b62000c606200265f565b565b600060246000848460405160200162000cbe92919060e09290921b7fffffffff0000000000000000000000000000000000000000000000000000000016825260601b6bffffffffffffffffffffffff1916600482015260180190565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000de0578260011660010362000d61576001816020811062000d2d5762000d2d6200381f565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000d8e565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000d9b6002846200387d565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000dd790620038b9565b91505062000d01565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000edc578160011660010362000e665786818151811062000e245762000e246200381f565b60200260200101518360405160200162000e48929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000eb8565b8287828151811062000e7c5762000e7c6200381f565b602002602001015160405160200162000e9f929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000ec56002836200387d565b91508062000ed381620038b9565b91505062000df9565b5050909114949350505050565b60225460ff161562000f8a5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200069b565b62000fa08a8a8a8a8a8a8a8a8a8a600162002738565b63ffffffff8916600090815260236020526040808220805460ff19166001179055516001600160a01b03851690849062000fe39089908b908790602401620038f4565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f200000000000000000000000000000000000000000000000000000000179052516200104891906200392d565b60006040518083038185875af1925050503d806000811462001087576040519150601f19603f3d011682016040523d82523d6000602084013e6200108c565b606091505b5050905080620011045760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c45440000000000000000000000000000000000000000000000000000000060648201526084016200069b565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff1615808015620011905750600054600160ff909116105b80620011ac5750303b158015620011ac575060005460ff166001145b620012205760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200069b565b6000805460ff1916600117905580156200126157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6022805463ffffffff8616610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff909116179055602680546001600160a01b038086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255602780549285169290911691909117905580156200134357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff1615620013ea5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200069b565b620014008a8a8a8a8a8a8a8a8a8a600062002738565b63ffffffff89166000908152602360205260409020805460ff191660011790556001600160a01b0385166200151f57604080516000808252602082019092526001600160a01b0385169084906040516200145b91906200392d565b60006040518083038185875af1925050503d80600081146200149a576040519150601f19603f3d011682016040523d82523d6000602084013e6200149f565b606091505b5050905080620015185760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c45440000000000000000000000000000000000000000000000000060648201526084016200069b565b50620018d5565b60225463ffffffff61010090910481169087160362001554576200154e6001600160a01b038616848462002ac0565b620018d5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200184157600080600085806020019051810190620015f491906200394b565b9250925092506000858484846040516200160e9062002fe0565b6200161c9392919062003776565b8190604051809103906000f59050801580156200163d573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af1158015620016ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620016d191906200364c565b50620016dd8162002b0b565b620016e88462002b86565b620016f38362002b86565b620017018260ff1662002bfb565b806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200182f9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620018d2565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620018aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018d091906200364c565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620019c29062002fe0565b601f1982820381018352601f909101166040819052620019ef908d908d908d908d908d90602001620039ec565b60408051601f198184030181529082905262001a0f929160200162003a2d565b6040516020818303038152906040528051906020012060405160200162001a8594939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff161562001b4c5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200069b565b60225463ffffffff61010090910481169084160362001bd45760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200069b565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff16338686348760215460405162001c28989796959493929190620037b3565b60405180910390a16022548151602080840191909120604080517f01000000000000000000000000000000000000000000000000000000000000008185015261010090940460e090811b7fffffffff00000000000000000000000000000000000000000000000000000000908116602187015233606090811b6bffffffffffffffffffffffff199081166025890152928a901b909116603987015287901b16603d850152346051850152607180850192909252805180850390920182526091909301909252815191012062001cfd90620024fb565b6026546001600160a01b03166333d6247d62001d1862000cf6565b6040518263ffffffff1660e01b815260040162001d3791815260200190565b600060405180830381600087803b15801562001d5257600080fd5b505af115801562001d67573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b0316331462001e185760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200069b565b62000c6062002c71565b600062001e6583838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002d2192505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008216016200216757600080808080808062001ec8896004818d62003a60565b81019062001ed7919062003a8c565b9650965096509650965096509650336001600160a01b0316876001600160a01b03161462001f6e5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200069b565b6001600160a01b038616301462001fee5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200069b565b8a8514620020655760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200069b565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e16916200211391906200392d565b6000604051808303816000865af19150503d806000811462002152576040519150601f19603f3d011682016040523d82523d6000602084013e62002157565b606091505b5050505050505050505062002441565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c0000000000000000000000000000000000000000000000000000000014620021fa5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200069b565b600080808080808080620022128a6004818e62003a60565b81019062002221919062003ae7565b97509750975097509750975097509750336001600160a01b0316886001600160a01b031614620022ba5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200069b565b6001600160a01b03871630146200233a5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200069b565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f1691620023f191906200392d565b6000604051808303816000865af19150503d806000811462002430576040519150601f19603f3d011682016040523d82523d6000602084013e62002435565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b0380851660248301528316604482015260648101829052620013439085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002d28565b8060016200250c6020600262003cac565b62002518919062003cba565b60215410620025905760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200069b565b600160216000828254620025a5919062003cd4565b909155505060215460005b60208110156200264f5781600116600103620025e5578260018260208110620025dd57620025dd6200381f565b015550505050565b60018160208110620025fb57620025fb6200381f565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200263891906200387d565b9150806200264681620038b9565b915050620025b0565b506200265a62003cef565b505050565b60225460ff1615620027005760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200069b565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b63ffffffff8a1660009081526023602052604090205460ff1615620027c55760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d45440000000000000000000000000000000000000000000000000000000060648201526084016200069b565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526001600160a01b039091169063257b3632906084016020604051808303816000875af115801562002851573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002877919062003d1e565b600003620028ee5760405162461bcd60e51b815260206004820152603460248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f444f45535f4e4f545f4d4154434800000000000000000000000060648201526084016200069b565b60225463ffffffff8681166101009092041614620029755760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000000060648201526084016200069b565b602254600090610100900463ffffffff166200299357508762002996565b50885b8251602080850191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f887901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08d811b821660218401526bffffffffffffffffffffffff1960608e811b82166025860152918d901b90921660398401528a901b16603d82015260518101889052607180820193909352815180820390930183526091019052805191012062002a64908d8d63ffffffff168462000de9565b62002ab25760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c494460448201526064016200069b565b505050505050505050505050565b6040516001600160a01b0383166024820152604481018290526200265a9084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002496565b6040516001600160a01b038216602482015262002b839060440160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f2c2ecbc20000000000000000000000000000000000000000000000000000000017905262002e14565b50565b62002b838160405160240162002b9d919062003d38565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f41304fac0000000000000000000000000000000000000000000000000000000017905262002e14565b62002b838160405160240162002c1391815260200190565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff82c50f10000000000000000000000000000000000000000000000000000000017905262002e14565b60225460ff161562002cec5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016200069b565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002d7f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662002e359092919063ffffffff16565b8051909150156200265a578080602001905181019062002da091906200364c565b6200265a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200069b565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b606062002e46848460008562002e50565b90505b9392505050565b60608247101562002eca5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016200069b565b6001600160a01b0385163b62002f235760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200069b565b600080866001600160a01b0316858760405162002f4191906200392d565b60006040518083038185875af1925050503d806000811462002f80576040519150601f19603f3d011682016040523d82523d6000602084013e62002f85565b606091505b509150915062002f9782828662002fa2565b979650505050505050565b6060831562002fb357508162002e49565b82511562002fc45782518084602001fd5b8160405162461bcd60e51b81526004016200069b919062003d38565b611a788062003d4e83390190565b6001600160a01b038116811462002b8357600080fd5b8035620030118162002fee565b919050565b803563ffffffff811681146200301157600080fd5b60008083601f8401126200303e57600080fd5b50813567ffffffffffffffff8111156200305757600080fd5b6020830191508360208285010111156200307057600080fd5b9250929050565b60008060008060008060a087890312156200309157600080fd5b86356200309e8162002fee565b9550620030ae6020880162003016565b94506040870135620030c08162002fee565b935060608701359250608087013567ffffffffffffffff811115620030e457600080fd5b620030f289828a016200302b565b979a9699509497509295939492505050565b600080604083850312156200311857600080fd5b620031238362003016565b91506020830135620031358162002fee565b809150509250929050565b6000602082840312156200315357600080fd5b813562002e498162002fee565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620031bb57620031bb62003160565b604052919050565b600082601f830112620031d557600080fd5b8135602067ffffffffffffffff821115620031f457620031f462003160565b8160051b620032058282016200318f565b92835284810182019282810190878511156200322057600080fd5b83870192505b8483101562002f975782358252918301919083019062003226565b600080600080608085870312156200325857600080fd5b84359350602085013567ffffffffffffffff808211156200327857600080fd5b6200328688838901620031c3565b94506040870135915080821682146200329e57600080fd5b509396929550929360600135925050565b60ff8116811462002b8357600080fd5b600080600080600080600060e0888a031215620032db57600080fd5b8735620032e881620032af565b9650620032f86020890162003016565b955060408801356200330a8162002fee565b94506200331a6060890162003016565b935060808801356200332c8162002fee565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562003366576200336662003160565b50601f01601f191660200190565b600082601f8301126200338657600080fd5b81356200339d620033978262003349565b6200318f565b818152846020838601011115620033b357600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620033f157600080fd5b8a3567ffffffffffffffff808211156200340a57600080fd5b620034188e838f01620031c3565b9b506200342860208e0162003016565b9a5060408d0135995060608d013598506200344660808e0162003016565b97506200345660a08e0162003004565b96506200346660c08e0162003016565b95506200347660e08e0162003004565b94506101008d013593506101208d01359150808211156200349657600080fd5b50620034a58d828e0162003374565b9150509295989b9194979a5092959850565b600080600060608486031215620034cd57600080fd5b620034d88462003016565b92506020840135620034ea8162002fee565b91506040840135620034fc8162002fee565b809150509250925092565b6000602082840312156200351a57600080fd5b5035919050565b600080600080600080600060a0888a0312156200353d57600080fd5b620035488862003016565b965060208801356200355a8162002fee565b9550604088013567ffffffffffffffff808211156200357857600080fd5b620035868b838c016200302b565b909750955060608a0135915080821115620035a057600080fd5b50620035af8a828b016200302b565b9094509250506080880135620035c581620032af565b8091505092959891949750929550565b600080600060608486031215620035eb57600080fd5b620035f68462003016565b92506020840135620036088162002fee565b9150604084013567ffffffffffffffff8111156200362557600080fd5b620036338682870162003374565b9150509250925092565b801515811462002b8357600080fd5b6000602082840312156200365f57600080fd5b815162002e49816200363d565b60005b83811015620036895781810151838201526020016200366f565b83811115620013435750506000910152565b600082601f830112620036ad57600080fd5b8151620036be620033978262003349565b818152846020838601011115620036d457600080fd5b620036e78260208301602087016200366c565b949350505050565b6000602082840312156200370257600080fd5b815167ffffffffffffffff8111156200371a57600080fd5b620036e7848285016200369b565b6000602082840312156200373b57600080fd5b815162002e4981620032af565b60008151808452620037628160208601602086016200366c565b601f01601f19169290920160200192915050565b6060815260006200378b606083018662003748565b82810360208401526200379f818662003748565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620038068285018762003748565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082620038b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620038ed57620038ed6200384e565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003924606083018462003748565b95945050505050565b60008251620039418184602087016200366c565b9190910192915050565b6000806000606084860312156200396157600080fd5b835167ffffffffffffffff808211156200397a57600080fd5b62003988878388016200369b565b945060208601519150808211156200399f57600080fd5b50620039ae868287016200369b565b9250506040840151620034fc81620032af565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003a02606083018789620039c1565b828103602084015262003a17818688620039c1565b91505060ff831660408301529695505050505050565b6000835162003a418184602088016200366c565b83519083019062003a578183602088016200366c565b01949350505050565b6000808585111562003a7157600080fd5b8386111562003a7f57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003aa857600080fd5b873562003ab58162002fee565b9650602088013562003ac78162002fee565b9550604088013594506060880135935060808801356200332c81620032af565b600080600080600080600080610100898b03121562003b0557600080fd5b883562003b128162002fee565b9750602089013562003b248162002fee565b96506040890135955060608901359450608089013562003b44816200363d565b935060a089013562003b5681620032af565b979a969950949793969295929450505060c08201359160e0013590565b600181815b8085111562003bd257817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003bb65762003bb66200384e565b8085161562003bc457918102915b93841c939080029062003b78565b509250929050565b60008262003beb5750600162000cf0565b8162003bfa5750600062000cf0565b816001811462003c13576002811462003c1e5762003c3e565b600191505062000cf0565b60ff84111562003c325762003c326200384e565b50506001821b62000cf0565b5060208310610133831016604e8410600b841016171562003c63575081810a62000cf0565b62003c6f838362003b73565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003ca45762003ca46200384e565b029392505050565b600062002e49838362003bda565b60008282101562003ccf5762003ccf6200384e565b500390565b6000821982111562003cea5762003cea6200384e565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60006020828403121562003d3157600080fd5b5051919050565b60208152600062002e4960208301846200374856fe60c06040523480156200001157600080fd5b5060405162001a7838038062001a788339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516115be620004ba600039600061053001526000818161036f01526104fa01526115be6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b60405161019191906112d5565b60405180910390f35b6101ad6101a8366004611371565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad61020436600461139b565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad610276366004611371565b610552565b6101ad610289366004611371565b61059e565b6101c161029c3660046113d7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d23660046113d7565b60066020526000908152604090205481565b610184610645565b6101ad6102fa366004611371565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad610352366004611371565b6106ed565b6101ad610365366004611371565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f3660046113f9565b6107b2565b005b6101c16103b436600461146c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6060600380546104379061149f565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061149f565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f56565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611521565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c838361101e565b50600192915050565b6060600480546104379061149f565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c8383611124565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661088183611539565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ee3908490611521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4991815260200190565b60405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f81610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166110815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b80600260008282546110939190611521565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906110cd908490611521565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156112495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611285908490611571565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c27565b600060208083528351808285015260005b81811015611302578581018301518582016040015282016112e6565b81811115611314576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136c57600080fd5b919050565b6000806040838503121561138457600080fd5b61138d83611348565b946020939093013593505050565b6000806000606084860312156113b057600080fd5b6113b984611348565b92506113c760208501611348565b9150604084013590509250925092565b6000602082840312156113e957600080fd5b6113f282611348565b9392505050565b600080600080600080600060e0888a03121561141457600080fd5b61141d88611348565b965061142b60208901611348565b95506040880135945060608801359350608088013560ff8116811461144f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561147f57600080fd5b61148883611348565b915061149660208401611348565b90509250929050565b600181811c908216806114b357607f821691505b6020821081036114ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611534576115346114f2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156a5761156a6114f2565b5060010190565b600082821015611583576115836114f2565b50039056fea2646970667358221220dc9c54325b6ec8c11c8bc6a1630cfb64202b6d54611cd1004e705ceca7826a4f64736f6c634300080f0033a2646970667358221220627991e62c01a013ef386af2c4355efefce98d0a6bed55179ac547ada65b748864736f6c634300080f0033", + "deployedBytecode": "0x6080604052600436106200019f5760003560e01c80637b6323c111620000e7578063d02103ca1162000089578063e73758811162000060578063e7375881146200059d578063ed6be5c914620005d1578063ff634ed714620005e857600080fd5b8063d02103ca146200054c578063d96a15f7146200056e578063dbc16976146200058557600080fd5b8063a08e8a0811620000be578063a08e8a0814620004c3578063aaa13cc214620004ed578063bab161bf146200051257600080fd5b80637b6323c1146200044257806381b1c17414620004675780638f61151914620004a157600080fd5b8063318aee3d11620001515780633e19704311620001285780633e19704314620003175780634638554914620003f8578063647c576c146200041d57600080fd5b8063318aee3d146200026b5780633ae0504714620002da5780633da8168214620002f257600080fd5b80632072f6c511620001865780632072f6c514620001ee57806322e95f2c14620002065780632dfdf0b5146200024457600080fd5b80630871e97114620001a457806315064c9614620001bd575b600080fd5b620001bb620001b536600462003077565b620005ff565b005b348015620001ca57600080fd5b50602254620001d99060ff1681565b60405190151581526020015b60405180910390f35b348015620001fb57600080fd5b50620001bb62000bae565b3480156200021357600080fd5b506200022b6200022536600462003104565b62000c62565b6040516001600160a01b039091168152602001620001e5565b3480156200025157600080fd5b506200025c60215481565b604051908152602001620001e5565b3480156200027857600080fd5b50620002b56200028a36600462003140565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001e5565b348015620002e757600080fd5b506200025c62000cf6565b348015620002ff57600080fd5b50620001d96200031136600462003241565b62000de9565b3480156200032457600080fd5b506200025c62000336366004620032bf565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200040557600080fd5b50620001bb62000417366004620033d0565b62000ee9565b3480156200042a57600080fd5b50620001bb6200043c366004620034b7565b6200116f565b3480156200044f57600080fd5b50620001bb62000461366004620033d0565b62001349565b3480156200047457600080fd5b506200022b6200048636600462003507565b6024602052600090815260409020546001600160a01b031681565b348015620004ae57600080fd5b506027546200022b906001600160a01b031681565b348015620004d057600080fd5b50620004da600081565b60405160ff9091168152602001620001e5565b348015620004fa57600080fd5b506200022b6200050c36600462003521565b6200193f565b3480156200051f57600080fd5b506022546200053690610100900463ffffffff1681565b60405163ffffffff9091168152602001620001e5565b3480156200055957600080fd5b506026546200022b906001600160a01b031681565b620001bb6200057f366004620035d5565b62001aab565b3480156200059257600080fd5b50620001bb62001d70565b348015620005aa57600080fd5b50620001d9620005bc36600462003507565b60236020526000908152604090205460ff1681565b348015620005de57600080fd5b5062000536600081565b348015620005f557600080fd5b50620004da600181565b60225460ff1615620006a45760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60225463ffffffff6101009091048116908616036200072c5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200069b565b60008060606001600160a01b038916620007c157853414620007b75760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200069b565b6000915062000a4b565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620008a8576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af11580156200086f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200089591906200364c565b5060208101518151909450925062000a49565b8415620008bd57620008bd8a88888862001e22565b620008d46001600160a01b038b1633308a62002448565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200092b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620009559190810190620036ef565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000994573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620009be9190810190620036ef565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620009fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a23919062003728565b60405160200162000a379392919062003776565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162000a8d989796959493929190620037b3565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000b3590620024fb565b6026546001600160a01b03166333d6247d62000b5062000cf6565b6040518263ffffffff1660e01b815260040162000b6f91815260200190565b600060405180830381600087803b15801562000b8a57600080fd5b505af115801562000b9f573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b0316331462000c565760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200069b565b62000c606200265f565b565b600060246000848460405160200162000cbe92919060e09290921b7fffffffff0000000000000000000000000000000000000000000000000000000016825260601b6bffffffffffffffffffffffff1916600482015260180190565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000de0578260011660010362000d61576001816020811062000d2d5762000d2d6200381f565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000d8e565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000d9b6002846200387d565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000dd790620038b9565b91505062000d01565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000edc578160011660010362000e665786818151811062000e245762000e246200381f565b60200260200101518360405160200162000e48929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000eb8565b8287828151811062000e7c5762000e7c6200381f565b602002602001015160405160200162000e9f929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000ec56002836200387d565b91508062000ed381620038b9565b91505062000df9565b5050909114949350505050565b60225460ff161562000f8a5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200069b565b62000fa08a8a8a8a8a8a8a8a8a8a600162002738565b63ffffffff8916600090815260236020526040808220805460ff19166001179055516001600160a01b03851690849062000fe39089908b908790602401620038f4565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f200000000000000000000000000000000000000000000000000000000179052516200104891906200392d565b60006040518083038185875af1925050503d806000811462001087576040519150601f19603f3d011682016040523d82523d6000602084013e6200108c565b606091505b5050905080620011045760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c45440000000000000000000000000000000000000000000000000000000060648201526084016200069b565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff1615808015620011905750600054600160ff909116105b80620011ac5750303b158015620011ac575060005460ff166001145b620012205760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200069b565b6000805460ff1916600117905580156200126157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6022805463ffffffff8616610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff909116179055602680546001600160a01b038086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255602780549285169290911691909117905580156200134357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff1615620013ea5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200069b565b620014008a8a8a8a8a8a8a8a8a8a600062002738565b63ffffffff89166000908152602360205260409020805460ff191660011790556001600160a01b0385166200151f57604080516000808252602082019092526001600160a01b0385169084906040516200145b91906200392d565b60006040518083038185875af1925050503d80600081146200149a576040519150601f19603f3d011682016040523d82523d6000602084013e6200149f565b606091505b5050905080620015185760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c45440000000000000000000000000000000000000000000000000060648201526084016200069b565b50620018d5565b60225463ffffffff61010090910481169087160362001554576200154e6001600160a01b038616848462002ac0565b620018d5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200184157600080600085806020019051810190620015f491906200394b565b9250925092506000858484846040516200160e9062002fe0565b6200161c9392919062003776565b8190604051809103906000f59050801580156200163d573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af1158015620016ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620016d191906200364c565b50620016dd8162002b0b565b620016e88462002b86565b620016f38362002b86565b620017018260ff1662002bfb565b806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200182f9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620018d2565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620018aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018d091906200364c565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620019c29062002fe0565b601f1982820381018352601f909101166040819052620019ef908d908d908d908d908d90602001620039ec565b60408051601f198184030181529082905262001a0f929160200162003a2d565b6040516020818303038152906040528051906020012060405160200162001a8594939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff161562001b4c5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200069b565b60225463ffffffff61010090910481169084160362001bd45760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200069b565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff16338686348760215460405162001c28989796959493929190620037b3565b60405180910390a16022548151602080840191909120604080517f01000000000000000000000000000000000000000000000000000000000000008185015261010090940460e090811b7fffffffff00000000000000000000000000000000000000000000000000000000908116602187015233606090811b6bffffffffffffffffffffffff199081166025890152928a901b909116603987015287901b16603d850152346051850152607180850192909252805180850390920182526091909301909252815191012062001cfd90620024fb565b6026546001600160a01b03166333d6247d62001d1862000cf6565b6040518263ffffffff1660e01b815260040162001d3791815260200190565b600060405180830381600087803b15801562001d5257600080fd5b505af115801562001d67573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b0316331462001e185760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200069b565b62000c6062002c71565b600062001e6583838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002d2192505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008216016200216757600080808080808062001ec8896004818d62003a60565b81019062001ed7919062003a8c565b9650965096509650965096509650336001600160a01b0316876001600160a01b03161462001f6e5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200069b565b6001600160a01b038616301462001fee5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200069b565b8a8514620020655760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200069b565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e16916200211391906200392d565b6000604051808303816000865af19150503d806000811462002152576040519150601f19603f3d011682016040523d82523d6000602084013e62002157565b606091505b5050505050505050505062002441565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c0000000000000000000000000000000000000000000000000000000014620021fa5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200069b565b600080808080808080620022128a6004818e62003a60565b81019062002221919062003ae7565b97509750975097509750975097509750336001600160a01b0316886001600160a01b031614620022ba5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200069b565b6001600160a01b03871630146200233a5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200069b565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f1691620023f191906200392d565b6000604051808303816000865af19150503d806000811462002430576040519150601f19603f3d011682016040523d82523d6000602084013e62002435565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b0380851660248301528316604482015260648101829052620013439085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002d28565b8060016200250c6020600262003cac565b62002518919062003cba565b60215410620025905760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200069b565b600160216000828254620025a5919062003cd4565b909155505060215460005b60208110156200264f5781600116600103620025e5578260018260208110620025dd57620025dd6200381f565b015550505050565b60018160208110620025fb57620025fb6200381f565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200263891906200387d565b9150806200264681620038b9565b915050620025b0565b506200265a62003cef565b505050565b60225460ff1615620027005760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200069b565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b63ffffffff8a1660009081526023602052604090205460ff1615620027c55760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d45440000000000000000000000000000000000000000000000000000000060648201526084016200069b565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526001600160a01b039091169063257b3632906084016020604051808303816000875af115801562002851573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002877919062003d1e565b600003620028ee5760405162461bcd60e51b815260206004820152603460248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f444f45535f4e4f545f4d4154434800000000000000000000000060648201526084016200069b565b60225463ffffffff8681166101009092041614620029755760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000000060648201526084016200069b565b602254600090610100900463ffffffff166200299357508762002996565b50885b8251602080850191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f887901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08d811b821660218401526bffffffffffffffffffffffff1960608e811b82166025860152918d901b90921660398401528a901b16603d82015260518101889052607180820193909352815180820390930183526091019052805191012062002a64908d8d63ffffffff168462000de9565b62002ab25760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c494460448201526064016200069b565b505050505050505050505050565b6040516001600160a01b0383166024820152604481018290526200265a9084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002496565b6040516001600160a01b038216602482015262002b839060440160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f2c2ecbc20000000000000000000000000000000000000000000000000000000017905262002e14565b50565b62002b838160405160240162002b9d919062003d38565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f41304fac0000000000000000000000000000000000000000000000000000000017905262002e14565b62002b838160405160240162002c1391815260200190565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff82c50f10000000000000000000000000000000000000000000000000000000017905262002e14565b60225460ff161562002cec5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016200069b565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002d7f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662002e359092919063ffffffff16565b8051909150156200265a578080602001905181019062002da091906200364c565b6200265a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200069b565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b606062002e46848460008562002e50565b90505b9392505050565b60608247101562002eca5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016200069b565b6001600160a01b0385163b62002f235760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200069b565b600080866001600160a01b0316858760405162002f4191906200392d565b60006040518083038185875af1925050503d806000811462002f80576040519150601f19603f3d011682016040523d82523d6000602084013e62002f85565b606091505b509150915062002f9782828662002fa2565b979650505050505050565b6060831562002fb357508162002e49565b82511562002fc45782518084602001fd5b8160405162461bcd60e51b81526004016200069b919062003d38565b611a788062003d4e83390190565b6001600160a01b038116811462002b8357600080fd5b8035620030118162002fee565b919050565b803563ffffffff811681146200301157600080fd5b60008083601f8401126200303e57600080fd5b50813567ffffffffffffffff8111156200305757600080fd5b6020830191508360208285010111156200307057600080fd5b9250929050565b60008060008060008060a087890312156200309157600080fd5b86356200309e8162002fee565b9550620030ae6020880162003016565b94506040870135620030c08162002fee565b935060608701359250608087013567ffffffffffffffff811115620030e457600080fd5b620030f289828a016200302b565b979a9699509497509295939492505050565b600080604083850312156200311857600080fd5b620031238362003016565b91506020830135620031358162002fee565b809150509250929050565b6000602082840312156200315357600080fd5b813562002e498162002fee565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620031bb57620031bb62003160565b604052919050565b600082601f830112620031d557600080fd5b8135602067ffffffffffffffff821115620031f457620031f462003160565b8160051b620032058282016200318f565b92835284810182019282810190878511156200322057600080fd5b83870192505b8483101562002f975782358252918301919083019062003226565b600080600080608085870312156200325857600080fd5b84359350602085013567ffffffffffffffff808211156200327857600080fd5b6200328688838901620031c3565b94506040870135915080821682146200329e57600080fd5b509396929550929360600135925050565b60ff8116811462002b8357600080fd5b600080600080600080600060e0888a031215620032db57600080fd5b8735620032e881620032af565b9650620032f86020890162003016565b955060408801356200330a8162002fee565b94506200331a6060890162003016565b935060808801356200332c8162002fee565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562003366576200336662003160565b50601f01601f191660200190565b600082601f8301126200338657600080fd5b81356200339d620033978262003349565b6200318f565b818152846020838601011115620033b357600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620033f157600080fd5b8a3567ffffffffffffffff808211156200340a57600080fd5b620034188e838f01620031c3565b9b506200342860208e0162003016565b9a5060408d0135995060608d013598506200344660808e0162003016565b97506200345660a08e0162003004565b96506200346660c08e0162003016565b95506200347660e08e0162003004565b94506101008d013593506101208d01359150808211156200349657600080fd5b50620034a58d828e0162003374565b9150509295989b9194979a5092959850565b600080600060608486031215620034cd57600080fd5b620034d88462003016565b92506020840135620034ea8162002fee565b91506040840135620034fc8162002fee565b809150509250925092565b6000602082840312156200351a57600080fd5b5035919050565b600080600080600080600060a0888a0312156200353d57600080fd5b620035488862003016565b965060208801356200355a8162002fee565b9550604088013567ffffffffffffffff808211156200357857600080fd5b620035868b838c016200302b565b909750955060608a0135915080821115620035a057600080fd5b50620035af8a828b016200302b565b9094509250506080880135620035c581620032af565b8091505092959891949750929550565b600080600060608486031215620035eb57600080fd5b620035f68462003016565b92506020840135620036088162002fee565b9150604084013567ffffffffffffffff8111156200362557600080fd5b620036338682870162003374565b9150509250925092565b801515811462002b8357600080fd5b6000602082840312156200365f57600080fd5b815162002e49816200363d565b60005b83811015620036895781810151838201526020016200366f565b83811115620013435750506000910152565b600082601f830112620036ad57600080fd5b8151620036be620033978262003349565b818152846020838601011115620036d457600080fd5b620036e78260208301602087016200366c565b949350505050565b6000602082840312156200370257600080fd5b815167ffffffffffffffff8111156200371a57600080fd5b620036e7848285016200369b565b6000602082840312156200373b57600080fd5b815162002e4981620032af565b60008151808452620037628160208601602086016200366c565b601f01601f19169290920160200192915050565b6060815260006200378b606083018662003748565b82810360208401526200379f818662003748565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620038068285018762003748565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082620038b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620038ed57620038ed6200384e565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003924606083018462003748565b95945050505050565b60008251620039418184602087016200366c565b9190910192915050565b6000806000606084860312156200396157600080fd5b835167ffffffffffffffff808211156200397a57600080fd5b62003988878388016200369b565b945060208601519150808211156200399f57600080fd5b50620039ae868287016200369b565b9250506040840151620034fc81620032af565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003a02606083018789620039c1565b828103602084015262003a17818688620039c1565b91505060ff831660408301529695505050505050565b6000835162003a418184602088016200366c565b83519083019062003a578183602088016200366c565b01949350505050565b6000808585111562003a7157600080fd5b8386111562003a7f57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003aa857600080fd5b873562003ab58162002fee565b9650602088013562003ac78162002fee565b9550604088013594506060880135935060808801356200332c81620032af565b600080600080600080600080610100898b03121562003b0557600080fd5b883562003b128162002fee565b9750602089013562003b248162002fee565b96506040890135955060608901359450608089013562003b44816200363d565b935060a089013562003b5681620032af565b979a969950949793969295929450505060c08201359160e0013590565b600181815b8085111562003bd257817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003bb65762003bb66200384e565b8085161562003bc457918102915b93841c939080029062003b78565b509250929050565b60008262003beb5750600162000cf0565b8162003bfa5750600062000cf0565b816001811462003c13576002811462003c1e5762003c3e565b600191505062000cf0565b60ff84111562003c325762003c326200384e565b50506001821b62000cf0565b5060208310610133831016604e8410600b841016171562003c63575081810a62000cf0565b62003c6f838362003b73565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003ca45762003ca46200384e565b029392505050565b600062002e49838362003bda565b60008282101562003ccf5762003ccf6200384e565b500390565b6000821982111562003cea5762003cea6200384e565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60006020828403121562003d3157600080fd5b5051919050565b60208152600062002e4960208301846200374856fe60c06040523480156200001157600080fd5b5060405162001a7838038062001a788339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516115be620004ba600039600061053001526000818161036f01526104fa01526115be6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b60405161019191906112d5565b60405180910390f35b6101ad6101a8366004611371565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad61020436600461139b565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad610276366004611371565b610552565b6101ad610289366004611371565b61059e565b6101c161029c3660046113d7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d23660046113d7565b60066020526000908152604090205481565b610184610645565b6101ad6102fa366004611371565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad610352366004611371565b6106ed565b6101ad610365366004611371565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f3660046113f9565b6107b2565b005b6101c16103b436600461146c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6060600380546104379061149f565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061149f565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f56565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611521565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c838361101e565b50600192915050565b6060600480546104379061149f565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c8383611124565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661088183611539565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ee3908490611521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4991815260200190565b60405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f81610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166110815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b80600260008282546110939190611521565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906110cd908490611521565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156112495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611285908490611571565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c27565b600060208083528351808285015260005b81811015611302578581018301518582016040015282016112e6565b81811115611314576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136c57600080fd5b919050565b6000806040838503121561138457600080fd5b61138d83611348565b946020939093013593505050565b6000806000606084860312156113b057600080fd5b6113b984611348565b92506113c760208501611348565b9150604084013590509250925092565b6000602082840312156113e957600080fd5b6113f282611348565b9392505050565b600080600080600080600060e0888a03121561141457600080fd5b61141d88611348565b965061142b60208901611348565b95506040880135945060608801359350608088013560ff8116811461144f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561147f57600080fd5b61148883611348565b915061149660208401611348565b90509250929050565b600181811c908216806114b357607f821691505b6020821081036114ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611534576115346114f2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156a5761156a6114f2565b5060010190565b600082821015611583576115836114f2565b50039056fea2646970667358221220dc9c54325b6ec8c11c8bc6a1630cfb64202b6d54611cd1004e705ceca7826a4f64736f6c634300080f0033a2646970667358221220627991e62c01a013ef386af2c4355efefce98d0a6bed55179ac547ada65b748864736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/BridgeMock.json b/compiled-contracts/BridgeMock.json index 73cf61ded..b096babcd 100644 --- a/compiled-contracts/BridgeMock.json +++ b/compiled-contracts/BridgeMock.json @@ -95,6 +95,18 @@ "name": "ClaimEvent", "type": "event" }, + { + "anonymous": false, + "inputs": [], + "name": "EmergencyStateActivated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "EmergencyStateDeactivated", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -152,32 +164,6 @@ "name": "OwnershipTransferred", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, { "inputs": [], "name": "LEAF_TYPE_ASSET", @@ -217,6 +203,13 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "activateEmergencyState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -408,6 +401,13 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "deactivateEmergencyState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "depositCount", @@ -545,12 +545,12 @@ }, { "inputs": [], - "name": "maxEtherBridge", + "name": "isEmergencyState", "outputs": [ { - "internalType": "uint256", + "internalType": "bool", "name": "", - "type": "uint256" + "type": "bool" } ], "stateMutability": "view", @@ -558,12 +558,12 @@ }, { "inputs": [], - "name": "networkID", + "name": "maxEtherBridge", "outputs": [ { - "internalType": "uint32", + "internalType": "uint256", "name": "", - "type": "uint32" + "type": "uint256" } ], "stateMutability": "view", @@ -571,12 +571,12 @@ }, { "inputs": [], - "name": "owner", + "name": "networkID", "outputs": [ { - "internalType": "address", + "internalType": "uint32", "name": "", - "type": "address" + "type": "uint32" } ], "stateMutability": "view", @@ -584,19 +584,12 @@ }, { "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", + "name": "owner", "outputs": [ { - "internalType": "bool", + "internalType": "address", "name": "", - "type": "bool" + "type": "address" } ], "stateMutability": "view", @@ -626,6 +619,21 @@ "internalType": "address", "name": "originTokenAddress", "type": "address" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "uint8", + "name": "decimals", + "type": "uint8" } ], "name": "precalculatedWrapperAddress", @@ -672,19 +680,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [], - "name": "tokenImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -717,13 +712,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -783,8 +771,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506161b3806100206000396000f3fe608060405260043610620001f35760003560e01c80637b6323c1116200010b578063b7e6a7d411620000a1578063e7375881116200006c578063e73758811462000721578063ed6be5c91462000755578063f2fde38b146200076c578063ff634ed7146200079157600080fd5b8063b7e6a7d41462000681578063bab161bf14620006a6578063d02103ca14620006db578063d96a15f7146200070a57600080fd5b80638da5cb5b11620000e25780638da5cb5b14620005e35780638f611519146200061057806391e57e2d146200063f578063a08e8a08146200065757600080fd5b80637b6323c1146200055f57806381b1c17414620005845780638456cb5914620005cb57600080fd5b80633ae05047116200018d5780634638554911620001585780634638554914620004e35780635c975abb1462000508578063647c576c1462000522578063715018a6146200054757600080fd5b80633ae0504714620003895780633da8168214620003a15780633e19704314620003d75780633f4ba83a14620004cb57600080fd5b80632c3f58cd11620001ce5780632c3f58cd14620002855780632dfdf0b514620002aa5780632f3a3d5d14620002d1578063318aee3d146200030057600080fd5b80630871e97114620001f857806322e95f2c14620002115780632b5e42e71462000260575b600080fd5b6200020f6200020936600462003cb8565b620007a8565b005b3480156200021e57600080fd5b50620002366200023036600462003d74565b6200087e565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200026d57600080fd5b506200020f6200027f36600462003db0565b62000921565b3480156200029257600080fd5b506200020f620002a436600462003dca565b62000930565b348015620002b757600080fd5b50620002c260215481565b60405190815260200162000257565b348015620002de57600080fd5b50608b54620002369073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200030d57600080fd5b50620003576200031f36600462003de8565b60896020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000257565b3480156200039657600080fd5b50620002c262000971565b348015620003ae57600080fd5b50620003c6620003c036600462003f07565b62000a64565b604051901515815260200162000257565b348015620003e457600080fd5b50620002c2620003f636600462003f85565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004d857600080fd5b506200020f62000b64565b348015620004f057600080fd5b506200020f62000502366004620040b4565b62000c3f565b3480156200051557600080fd5b5060545460ff16620003c6565b3480156200052f57600080fd5b506200020f620005413660046200419b565b620012a3565b3480156200055457600080fd5b506200020f62001547565b3480156200056c57600080fd5b506200020f6200057e366004620040b4565b6200155d565b3480156200059157600080fd5b5062000236620005a336600462003db0565b60886020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620005d857600080fd5b506200020f62001f26565b348015620005f057600080fd5b50608d5473ffffffffffffffffffffffffffffffffffffffff1662000236565b3480156200061d57600080fd5b50608c54620002369073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200064c57600080fd5b50620002c260bf5481565b3480156200066457600080fd5b506200066e600081565b60405160ff909116815260200162000257565b3480156200068e57600080fd5b5062000236620006a036600462003d74565b62001fff565b348015620006b357600080fd5b50608654620006c59063ffffffff1681565b60405163ffffffff909116815260200162000257565b348015620006e857600080fd5b50608a54620002369073ffffffffffffffffffffffffffffffffffffffff1681565b6200020f6200071b366004620041eb565b620020c8565b3480156200072e57600080fd5b50620003c66200074036600462003db0565b60876020526000908152604090205460ff1681565b3480156200076257600080fd5b50620006c5600081565b3480156200077957600080fd5b506200020f6200078b36600462003de8565b6200231f565b3480156200079e57600080fd5b506200066e600181565b60bf5434111562000866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b62000876868686868686620023dc565b505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526088909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6200092b620029d6565b60bf55565b6200093a620029d6565b608680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b602154600090819081805b602081101562000a5b5782600116600103620009dc5760018160208110620009a857620009a862004253565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000a09565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a16600284620042b1565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000a5290620042ed565b9150506200097c565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000b57578160011660010362000ae15786818151811062000a9f5762000a9f62004253565b60200260200101518360405160200162000ac3929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000b33565b8287828151811062000af75762000af762004253565b602002602001015160405160200162000b1a929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000b40600283620042b1565b91508062000b4e81620042ed565b91505062000a74565b5050909114949350505050565b608c5473ffffffffffffffffffffffffffffffffffffffff16331462000c33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200085d565b62000c3d62002a59565b565b62000c4962002ad8565b63ffffffff891660009081526087602052604090205460ff161562000cf1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d454400000000000000000000000000000000000000000000000000000060648201526084016200085d565b608a546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000d8a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000db0919062004328565b60000362000e41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d41544348000000000000000000000060648201526084016200085d565b60865463ffffffff85811691161462000edd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d41544348000000000000000060648201526084016200085d565b60865460009063ffffffff1662000ef657508662000ef9565b50875b8151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08c811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608d811b82166025860152918c901b909216603984015289901b16603d82015260518101879052607180820193909352815180820390930183526091019052805191012062000fd5905b8c8c63ffffffff168462000a64565b62001063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f440000000000000000000000000000000000000000000000000000000000000060648201526084016200085d565b63ffffffff8a1660009081526087602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff8616908590620010d1908a908c908890602401620043bd565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001154919062004403565b60006040518083038185875af1925050503d806000811462001193576040519150601f19603f3d011682016040523d82523d6000602084013e62001198565b606091505b50509050806200122a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c45440000000000000000000000000000000000000000000000000000000060648201526084016200085d565b6040805163ffffffff8d811682528a16602082015273ffffffffffffffffffffffffffffffffffffffff89811682840152871660608201526080810186905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a1505050505050505050505050565b600054610100900460ff1615808015620012c45750600054600160ff909116105b80620012e05750303b158015620012e0575060005460ff166001145b6200136e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200085d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620013cd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b608680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8616179055608a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790556040516200144b9062003c60565b604051809103906000f08015801562001468573d6000803e3d6000fd5b50608b80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff93841617909155608c8054909116918416919091179055620014c762002b47565b620014d162002c0a565b6703782dace9d9000060bf5580156200154157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62001551620029d6565b62000c3d600062002cad565b6200156762002ad8565b63ffffffff891660009081526087602052604090205460ff16156200160f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4272696467653a3a636c61696d41737365743a20414c52454144595f434c414960448201527f4d4544000000000000000000000000000000000000000000000000000000000060648201526084016200085d565b608a546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af1158015620016a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620016ce919062004328565b6000036200175f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f4272696467653a3a636c61696d41737365743a20474c4f42414c5f455849545f60448201527f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000000060648201526084016200085d565b60865463ffffffff858116911614620017fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4272696467653a3a636c61696d41737365743a2044455354494e4154494f4e5f60448201527f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000000060648201526084016200085d565b60865460009063ffffffff166200181457508662001817565b50875b8151602080840191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08c811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608d811b82166025860152918c901b909216603984015289901b16603d820152605181018790526071808201939093528151808203909301835260910190528051910120620018ca9062000fc6565b62001932576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a636c61696d41737365743a20534d545f494e56414c49440060448201526064016200085d565b63ffffffff8a16600090815260876020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff861662001aa3576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff8616908590604051620019c5919062004403565b60006040518083038185875af1925050503d806000811462001a04576040519150601f19603f3d011682016040523d82523d6000602084013e62001a09565b606091505b505090508062001a9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c45440000000000000000000000000000000000000000000000000060648201526084016200085d565b5062001eae565b60865463ffffffff9081169088160362001ae05762001ada73ffffffffffffffffffffffffffffffffffffffff8716858562002d24565b62001eae565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606088901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152608890935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001e0d57608b5460009062001bcb9073ffffffffffffffffffffffffffffffffffffffff168462002dff565b905060008060008780602001905181019062001be891906200446d565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848e8e6040518663ffffffff1660e01b815260040162001c31959493929190620044e3565b600060405180830381600087803b15801562001c4c57600080fd5b505af115801562001c61573d6000803e3d6000fd5b50505050836088600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808e63ffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815250608960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598d8d8660405162001dfb9392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062001eab565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018790528216906340c10f19906044016020604051808303816000875af115801562001e83573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ea9919062004552565b505b50505b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b608c5473ffffffffffffffffffffffffffffffffffffffff16331462001ff5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200085d565b62000c3d62002edf565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120608b54909150620020c09073ffffffffffffffffffffffffffffffffffffffff168262002f3d565b949350505050565b620020d262002ad8565b60865463ffffffff908116908416036200216f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200085d565b6086546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620021bc9260019263ffffffff9092169133918991899134918a919062004572565b60405180910390a16086548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200229f9062002fc1565b608a5473ffffffffffffffffffffffffffffffffffffffff166333d6247d620022c762000971565b6040518263ffffffff1660e01b8152600401620022e691815260200190565b600060405180830381600087803b1580156200230157600080fd5b505af115801562002316573d6000803e3d6000fd5b50505050505050565b62002329620029d6565b73ffffffffffffffffffffffffffffffffffffffff8116620023ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016200085d565b620023d98162002cad565b50565b620023e662002ad8565b60865463ffffffff9081169086160362002483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200085d565b600080606073ffffffffffffffffffffffffffffffffffffffff89166200253f5785341462002535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200085d565b6000915062002853565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526089602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562002640576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562002607573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200262d919062004552565b5060208101518151909450925062002851565b84156200265557620026558a8888886200313a565b6200267973ffffffffffffffffffffffffffffffffffffffff8b1633308a62003864565b899350608660009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620026dd573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620027259190810190620045eb565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562002771573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620027b99190810190620045eb565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002805573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200282b919062004624565b6040516020016200283f9392919062004644565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200289598979695949392919062004572565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620029509062002fc1565b608a5473ffffffffffffffffffffffffffffffffffffffff166333d6247d6200297862000971565b6040518263ffffffff1660e01b81526004016200299791815260200190565b600060405180830381600087803b158015620029b257600080fd5b505af1158015620029c7573d6000803e3d6000fd5b50505050505050505050505050565b608d5473ffffffffffffffffffffffffffffffffffffffff16331462000c3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200085d565b62002a63620038c4565b605480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60545460ff161562000c3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016200085d565b600054610100900460ff1662002be0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200085d565b605480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b600054610100900460ff1662002ca3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200085d565b62000c3d62003932565b608d805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262002dfa9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152620039d6565b505050565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff81166200091b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c656400000000000000000060448201526064016200085d565b62002ee962002ad8565b605480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25862002aae3390565b600062002fba8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b80600162002fd260206002620047ba565b62002fde9190620047c8565b6021541062003070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200085d565b600160216000828254620030859190620047e2565b909155505060215460005b60208110156200312f5781600116600103620030c5578260018260208110620030bd57620030bd62004253565b015550505050565b60018160208110620030db57620030db62004253565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620031189190620042b1565b9150806200312681620042ed565b91505062003090565b5062002dfa620047fd565b60006200317d83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062003ae992505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162003501576000808080808080620031e0896004818d6200482c565b810190620031ef919062004858565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614620032ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200085d565b73ffffffffffffffffffffffffffffffffffffffff8616301462003361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200085d565b8a8514620033f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200085d565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e1691620034ad919062004403565b6000604051808303816000865af19150503d8060008114620034ec576040519150601f19603f3d011682016040523d82523d6000602084013e620034f1565b606091505b505050505050505050506200385d565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c0000000000000000000000000000000000000000000000000000000014620035ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200085d565b600080808080808080620035c68a6004818e6200482c565b810190620035d59190620048b3565b975097509750975097509750975097503373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614620036a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200085d565b73ffffffffffffffffffffffffffffffffffffffff8716301462003749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200085d565b6040805173ffffffffffffffffffffffffffffffffffffffff8a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f16916200380d919062004403565b6000604051808303816000865af19150503d80600081146200384c576040519150601f19603f3d011682016040523d82523d6000602084013e62003851565b606091505b50505050505050505050505b5050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052620015419085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002d77565b60545460ff1662000c3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016200085d565b600054610100900460ff16620039cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200085d565b62000c3d3362002cad565b600062003a3a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1662003af09092919063ffffffff16565b80519091501562002dfa578080602001905181019062003a5b919062004552565b62002dfa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200085d565b6020015190565b6060620020c084846000858573ffffffffffffffffffffffffffffffffffffffff85163b62003b7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200085d565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405162003ba7919062004403565b60006040518083038185875af1925050503d806000811462003be6576040519150601f19603f3d011682016040523d82523d6000602084013e62003beb565b606091505b509150915062003bfd82828662003c08565b979650505050505050565b6060831562003c1957508162002fba565b82511562003c2a5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200085d91906200493f565b611829806200495583390190565b73ffffffffffffffffffffffffffffffffffffffff81168114620023d957600080fd5b803562003c9e8162003c6e565b919050565b803563ffffffff8116811462003c9e57600080fd5b60008060008060008060a0878903121562003cd257600080fd5b863562003cdf8162003c6e565b955062003cef6020880162003ca3565b9450604087013562003d018162003c6e565b935060608701359250608087013567ffffffffffffffff8082111562003d2657600080fd5b818901915089601f83011262003d3b57600080fd5b81358181111562003d4b57600080fd5b8a602082850101111562003d5e57600080fd5b6020830194508093505050509295509295509295565b6000806040838503121562003d8857600080fd5b62003d938362003ca3565b9150602083013562003da58162003c6e565b809150509250929050565b60006020828403121562003dc357600080fd5b5035919050565b60006020828403121562003ddd57600080fd5b62002fba8262003ca3565b60006020828403121562003dfb57600080fd5b813562002fba8162003c6e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171562003e815762003e8162003e08565b604052919050565b600082601f83011262003e9b57600080fd5b8135602067ffffffffffffffff82111562003eba5762003eba62003e08565b8160051b62003ecb82820162003e37565b928352848101820192828101908785111562003ee657600080fd5b83870192505b8483101562003bfd5782358252918301919083019062003eec565b6000806000806080858703121562003f1e57600080fd5b84359350602085013567ffffffffffffffff8082111562003f3e57600080fd5b62003f4c8883890162003e89565b945060408701359150808216821462003f6457600080fd5b509396929550929360600135925050565b60ff81168114620023d957600080fd5b600080600080600080600060e0888a03121562003fa157600080fd5b873562003fae8162003f75565b965062003fbe6020890162003ca3565b9550604088013562003fd08162003c6e565b945062003fe06060890162003ca3565b9350608088013562003ff28162003c6e565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200402c576200402c62003e08565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126200406a57600080fd5b8135620040816200407b826200400f565b62003e37565b8181528460208386010111156200409757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620040d557600080fd5b8a3567ffffffffffffffff80821115620040ee57600080fd5b620040fc8e838f0162003e89565b9b506200410c60208e0162003ca3565b9a5060408d0135995060608d013598506200412a60808e0162003ca3565b97506200413a60a08e0162003c91565b96506200414a60c08e0162003ca3565b95506200415a60e08e0162003c91565b94506101008d013593506101208d01359150808211156200417a57600080fd5b50620041898d828e0162004058565b9150509295989b9194979a5092959850565b600080600060608486031215620041b157600080fd5b620041bc8462003ca3565b92506020840135620041ce8162003c6e565b91506040840135620041e08162003c6e565b809150509250925092565b6000806000606084860312156200420157600080fd5b6200420c8462003ca3565b925060208401356200421e8162003c6e565b9150604084013567ffffffffffffffff8111156200423b57600080fd5b620042498682870162004058565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082620042e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362004321576200432162004282565b5060010190565b6000602082840312156200433b57600080fd5b5051919050565b60005b838110156200435f57818101518382015260200162004345565b83811115620015415750506000910152565b600081518084526200438b81602086016020860162004342565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff83166020820152606060408201526000620043fa606083018462004371565b95945050505050565b600082516200441781846020870162004342565b9190910192915050565b600082601f8301126200443357600080fd5b8151620044446200407b826200400f565b8181528460208386010111156200445a57600080fd5b620020c082602083016020870162004342565b6000806000606084860312156200448357600080fd5b835167ffffffffffffffff808211156200449c57600080fd5b620044aa8783880162004421565b94506020860151915080821115620044c157600080fd5b50620044d08682870162004421565b9250506040840151620041e08162003f75565b60a081526000620044f860a083018862004371565b82810360208401526200450c818862004371565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b8015158114620023d957600080fd5b6000602082840312156200456557600080fd5b815162002fba8162004543565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620045d28285018762004371565b925080851660e085015250509998505050505050505050565b600060208284031215620045fe57600080fd5b815167ffffffffffffffff8111156200461657600080fd5b620020c08482850162004421565b6000602082840312156200463757600080fd5b815162002fba8162003f75565b60608152600062004659606083018662004371565b82810360208401526200466d818662004371565b91505060ff83166040830152949350505050565b600181815b80851115620046e057817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620046c457620046c462004282565b80851615620046d257918102915b93841c939080029062004686565b509250929050565b600082620046f9575060016200091b565b8162004708575060006200091b565b81600181146200472157600281146200472c576200474c565b60019150506200091b565b60ff84111562004740576200474062004282565b50506001821b6200091b565b5060208310610133831016604e8410600b841016171562004771575081810a6200091b565b6200477d838362004681565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620047b257620047b262004282565b029392505050565b600062002fba8383620046e8565b600082821015620047dd57620047dd62004282565b500390565b60008219821115620047f857620047f862004282565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600080858511156200483d57600080fd5b838611156200484b57600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200487457600080fd5b8735620048818162003c6e565b96506020880135620048938162003c6e565b95506040880135945060608801359350608088013562003ff28162003f75565b600080600080600080600080610100898b031215620048d157600080fd5b8835620048de8162003c6e565b97506020890135620048f08162003c6e565b965060408901359550606089013594506080890135620049108162004543565b935060a0890135620049228162003f75565b979a969950949793969295929450505060c08201359160e0013590565b60208152600062002fba60208301846200437156fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a26469706673582212200c7e24244b8a018e593e0d7152ca542b8e67229f6829c3f3c7b6723793fadec664736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001f35760003560e01c80637b6323c1116200010b578063b7e6a7d411620000a1578063e7375881116200006c578063e73758811462000721578063ed6be5c91462000755578063f2fde38b146200076c578063ff634ed7146200079157600080fd5b8063b7e6a7d41462000681578063bab161bf14620006a6578063d02103ca14620006db578063d96a15f7146200070a57600080fd5b80638da5cb5b11620000e25780638da5cb5b14620005e35780638f611519146200061057806391e57e2d146200063f578063a08e8a08146200065757600080fd5b80637b6323c1146200055f57806381b1c17414620005845780638456cb5914620005cb57600080fd5b80633ae05047116200018d5780634638554911620001585780634638554914620004e35780635c975abb1462000508578063647c576c1462000522578063715018a6146200054757600080fd5b80633ae0504714620003895780633da8168214620003a15780633e19704314620003d75780633f4ba83a14620004cb57600080fd5b80632c3f58cd11620001ce5780632c3f58cd14620002855780632dfdf0b514620002aa5780632f3a3d5d14620002d1578063318aee3d146200030057600080fd5b80630871e97114620001f857806322e95f2c14620002115780632b5e42e71462000260575b600080fd5b6200020f6200020936600462003cb8565b620007a8565b005b3480156200021e57600080fd5b50620002366200023036600462003d74565b6200087e565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156200026d57600080fd5b506200020f6200027f36600462003db0565b62000921565b3480156200029257600080fd5b506200020f620002a436600462003dca565b62000930565b348015620002b757600080fd5b50620002c260215481565b60405190815260200162000257565b348015620002de57600080fd5b50608b54620002369073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200030d57600080fd5b50620003576200031f36600462003de8565b60896020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff90911660208301520162000257565b3480156200039657600080fd5b50620002c262000971565b348015620003ae57600080fd5b50620003c6620003c036600462003f07565b62000a64565b604051901515815260200162000257565b348015620003e457600080fd5b50620002c2620003f636600462003f85565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004d857600080fd5b506200020f62000b64565b348015620004f057600080fd5b506200020f62000502366004620040b4565b62000c3f565b3480156200051557600080fd5b5060545460ff16620003c6565b3480156200052f57600080fd5b506200020f620005413660046200419b565b620012a3565b3480156200055457600080fd5b506200020f62001547565b3480156200056c57600080fd5b506200020f6200057e366004620040b4565b6200155d565b3480156200059157600080fd5b5062000236620005a336600462003db0565b60886020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620005d857600080fd5b506200020f62001f26565b348015620005f057600080fd5b50608d5473ffffffffffffffffffffffffffffffffffffffff1662000236565b3480156200061d57600080fd5b50608c54620002369073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200064c57600080fd5b50620002c260bf5481565b3480156200066457600080fd5b506200066e600081565b60405160ff909116815260200162000257565b3480156200068e57600080fd5b5062000236620006a036600462003d74565b62001fff565b348015620006b357600080fd5b50608654620006c59063ffffffff1681565b60405163ffffffff909116815260200162000257565b348015620006e857600080fd5b50608a54620002369073ffffffffffffffffffffffffffffffffffffffff1681565b6200020f6200071b366004620041eb565b620020c8565b3480156200072e57600080fd5b50620003c66200074036600462003db0565b60876020526000908152604090205460ff1681565b3480156200076257600080fd5b50620006c5600081565b3480156200077957600080fd5b506200020f6200078b36600462003de8565b6200231f565b3480156200079e57600080fd5b506200066e600181565b60bf5434111562000866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b62000876868686868686620023dc565b505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526088909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6200092b620029d6565b60bf55565b6200093a620029d6565b608680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b602154600090819081805b602081101562000a5b5782600116600103620009dc5760018160208110620009a857620009a862004253565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000a09565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a16600284620042b1565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000a5290620042ed565b9150506200097c565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000b57578160011660010362000ae15786818151811062000a9f5762000a9f62004253565b60200260200101518360405160200162000ac3929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000b33565b8287828151811062000af75762000af762004253565b602002602001015160405160200162000b1a929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000b40600283620042b1565b91508062000b4e81620042ed565b91505062000a74565b5050909114949350505050565b608c5473ffffffffffffffffffffffffffffffffffffffff16331462000c33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200085d565b62000c3d62002a59565b565b62000c4962002ad8565b63ffffffff891660009081526087602052604090205460ff161562000cf1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d454400000000000000000000000000000000000000000000000000000060648201526084016200085d565b608a546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000d8a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000db0919062004328565b60000362000e41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d41544348000000000000000000000060648201526084016200085d565b60865463ffffffff85811691161462000edd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d41544348000000000000000060648201526084016200085d565b60865460009063ffffffff1662000ef657508662000ef9565b50875b8151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08c811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608d811b82166025860152918c901b909216603984015289901b16603d82015260518101879052607180820193909352815180820390930183526091019052805191012062000fd5905b8c8c63ffffffff168462000a64565b62001063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f440000000000000000000000000000000000000000000000000000000000000060648201526084016200085d565b63ffffffff8a1660009081526087602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff8616908590620010d1908a908c908890602401620043bd565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001154919062004403565b60006040518083038185875af1925050503d806000811462001193576040519150601f19603f3d011682016040523d82523d6000602084013e62001198565b606091505b50509050806200122a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c45440000000000000000000000000000000000000000000000000000000060648201526084016200085d565b6040805163ffffffff8d811682528a16602082015273ffffffffffffffffffffffffffffffffffffffff89811682840152871660608201526080810186905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a1505050505050505050505050565b600054610100900460ff1615808015620012c45750600054600160ff909116105b80620012e05750303b158015620012e0575060005460ff166001145b6200136e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200085d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620013cd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b608680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8616179055608a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790556040516200144b9062003c60565b604051809103906000f08015801562001468573d6000803e3d6000fd5b50608b80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff93841617909155608c8054909116918416919091179055620014c762002b47565b620014d162002c0a565b6703782dace9d9000060bf5580156200154157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62001551620029d6565b62000c3d600062002cad565b6200156762002ad8565b63ffffffff891660009081526087602052604090205460ff16156200160f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4272696467653a3a636c61696d41737365743a20414c52454144595f434c414960448201527f4d4544000000000000000000000000000000000000000000000000000000000060648201526084016200085d565b608a546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af1158015620016a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620016ce919062004328565b6000036200175f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f4272696467653a3a636c61696d41737365743a20474c4f42414c5f455849545f60448201527f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000000060648201526084016200085d565b60865463ffffffff858116911614620017fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4272696467653a3a636c61696d41737365743a2044455354494e4154494f4e5f60448201527f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000000060648201526084016200085d565b60865460009063ffffffff166200181457508662001817565b50875b8151602080840191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08c811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608d811b82166025860152918c901b909216603984015289901b16603d820152605181018790526071808201939093528151808203909301835260910190528051910120620018ca9062000fc6565b62001932576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a636c61696d41737365743a20534d545f494e56414c49440060448201526064016200085d565b63ffffffff8a16600090815260876020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff861662001aa3576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff8616908590604051620019c5919062004403565b60006040518083038185875af1925050503d806000811462001a04576040519150601f19603f3d011682016040523d82523d6000602084013e62001a09565b606091505b505090508062001a9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c45440000000000000000000000000000000000000000000000000060648201526084016200085d565b5062001eae565b60865463ffffffff9081169088160362001ae05762001ada73ffffffffffffffffffffffffffffffffffffffff8716858562002d24565b62001eae565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606088901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152608890935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001e0d57608b5460009062001bcb9073ffffffffffffffffffffffffffffffffffffffff168462002dff565b905060008060008780602001905181019062001be891906200446d565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848e8e6040518663ffffffff1660e01b815260040162001c31959493929190620044e3565b600060405180830381600087803b15801562001c4c57600080fd5b505af115801562001c61573d6000803e3d6000fd5b50505050836088600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808e63ffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff16815250608960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598d8d8660405162001dfb9392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062001eab565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018790528216906340c10f19906044016020604051808303816000875af115801562001e83573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ea9919062004552565b505b50505b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b608c5473ffffffffffffffffffffffffffffffffffffffff16331462001ff5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200085d565b62000c3d62002edf565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120608b54909150620020c09073ffffffffffffffffffffffffffffffffffffffff168262002f3d565b949350505050565b620020d262002ad8565b60865463ffffffff908116908416036200216f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200085d565b6086546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620021bc9260019263ffffffff9092169133918991899134918a919062004572565b60405180910390a16086548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200229f9062002fc1565b608a5473ffffffffffffffffffffffffffffffffffffffff166333d6247d620022c762000971565b6040518263ffffffff1660e01b8152600401620022e691815260200190565b600060405180830381600087803b1580156200230157600080fd5b505af115801562002316573d6000803e3d6000fd5b50505050505050565b62002329620029d6565b73ffffffffffffffffffffffffffffffffffffffff8116620023ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016200085d565b620023d98162002cad565b50565b620023e662002ad8565b60865463ffffffff9081169086160362002483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200085d565b600080606073ffffffffffffffffffffffffffffffffffffffff89166200253f5785341462002535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200085d565b6000915062002853565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526089602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562002640576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562002607573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200262d919062004552565b5060208101518151909450925062002851565b84156200265557620026558a8888886200313a565b6200267973ffffffffffffffffffffffffffffffffffffffff8b1633308a62003864565b899350608660009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620026dd573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620027259190810190620045eb565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562002771573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620027b99190810190620045eb565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002805573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200282b919062004624565b6040516020016200283f9392919062004644565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200289598979695949392919062004572565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620029509062002fc1565b608a5473ffffffffffffffffffffffffffffffffffffffff166333d6247d6200297862000971565b6040518263ffffffff1660e01b81526004016200299791815260200190565b600060405180830381600087803b158015620029b257600080fd5b505af1158015620029c7573d6000803e3d6000fd5b50505050505050505050505050565b608d5473ffffffffffffffffffffffffffffffffffffffff16331462000c3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200085d565b62002a63620038c4565b605480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60545460ff161562000c3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016200085d565b600054610100900460ff1662002be0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200085d565b605480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b600054610100900460ff1662002ca3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200085d565b62000c3d62003932565b608d805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905262002dfa9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152620039d6565b505050565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff81166200091b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c656400000000000000000060448201526064016200085d565b62002ee962002ad8565b605480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25862002aae3390565b600062002fba8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b80600162002fd260206002620047ba565b62002fde9190620047c8565b6021541062003070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200085d565b600160216000828254620030859190620047e2565b909155505060215460005b60208110156200312f5781600116600103620030c5578260018260208110620030bd57620030bd62004253565b015550505050565b60018160208110620030db57620030db62004253565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620031189190620042b1565b9150806200312681620042ed565b91505062003090565b5062002dfa620047fd565b60006200317d83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062003ae992505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162003501576000808080808080620031e0896004818d6200482c565b810190620031ef919062004858565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614620032ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200085d565b73ffffffffffffffffffffffffffffffffffffffff8616301462003361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200085d565b8a8514620033f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200085d565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e1691620034ad919062004403565b6000604051808303816000865af19150503d8060008114620034ec576040519150601f19603f3d011682016040523d82523d6000602084013e620034f1565b606091505b505050505050505050506200385d565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c0000000000000000000000000000000000000000000000000000000014620035ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200085d565b600080808080808080620035c68a6004818e6200482c565b810190620035d59190620048b3565b975097509750975097509750975097503373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614620036a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200085d565b73ffffffffffffffffffffffffffffffffffffffff8716301462003749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200085d565b6040805173ffffffffffffffffffffffffffffffffffffffff8a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f16916200380d919062004403565b6000604051808303816000865af19150503d80600081146200384c576040519150601f19603f3d011682016040523d82523d6000602084013e62003851565b606091505b50505050505050505050505b5050505050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052620015419085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002d77565b60545460ff1662000c3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016200085d565b600054610100900460ff16620039cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200085d565b62000c3d3362002cad565b600062003a3a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1662003af09092919063ffffffff16565b80519091501562002dfa578080602001905181019062003a5b919062004552565b62002dfa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200085d565b6020015190565b6060620020c084846000858573ffffffffffffffffffffffffffffffffffffffff85163b62003b7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200085d565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405162003ba7919062004403565b60006040518083038185875af1925050503d806000811462003be6576040519150601f19603f3d011682016040523d82523d6000602084013e62003beb565b606091505b509150915062003bfd82828662003c08565b979650505050505050565b6060831562003c1957508162002fba565b82511562003c2a5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200085d91906200493f565b611829806200495583390190565b73ffffffffffffffffffffffffffffffffffffffff81168114620023d957600080fd5b803562003c9e8162003c6e565b919050565b803563ffffffff8116811462003c9e57600080fd5b60008060008060008060a0878903121562003cd257600080fd5b863562003cdf8162003c6e565b955062003cef6020880162003ca3565b9450604087013562003d018162003c6e565b935060608701359250608087013567ffffffffffffffff8082111562003d2657600080fd5b818901915089601f83011262003d3b57600080fd5b81358181111562003d4b57600080fd5b8a602082850101111562003d5e57600080fd5b6020830194508093505050509295509295509295565b6000806040838503121562003d8857600080fd5b62003d938362003ca3565b9150602083013562003da58162003c6e565b809150509250929050565b60006020828403121562003dc357600080fd5b5035919050565b60006020828403121562003ddd57600080fd5b62002fba8262003ca3565b60006020828403121562003dfb57600080fd5b813562002fba8162003c6e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171562003e815762003e8162003e08565b604052919050565b600082601f83011262003e9b57600080fd5b8135602067ffffffffffffffff82111562003eba5762003eba62003e08565b8160051b62003ecb82820162003e37565b928352848101820192828101908785111562003ee657600080fd5b83870192505b8483101562003bfd5782358252918301919083019062003eec565b6000806000806080858703121562003f1e57600080fd5b84359350602085013567ffffffffffffffff8082111562003f3e57600080fd5b62003f4c8883890162003e89565b945060408701359150808216821462003f6457600080fd5b509396929550929360600135925050565b60ff81168114620023d957600080fd5b600080600080600080600060e0888a03121562003fa157600080fd5b873562003fae8162003f75565b965062003fbe6020890162003ca3565b9550604088013562003fd08162003c6e565b945062003fe06060890162003ca3565b9350608088013562003ff28162003c6e565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200402c576200402c62003e08565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126200406a57600080fd5b8135620040816200407b826200400f565b62003e37565b8181528460208386010111156200409757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620040d557600080fd5b8a3567ffffffffffffffff80821115620040ee57600080fd5b620040fc8e838f0162003e89565b9b506200410c60208e0162003ca3565b9a5060408d0135995060608d013598506200412a60808e0162003ca3565b97506200413a60a08e0162003c91565b96506200414a60c08e0162003ca3565b95506200415a60e08e0162003c91565b94506101008d013593506101208d01359150808211156200417a57600080fd5b50620041898d828e0162004058565b9150509295989b9194979a5092959850565b600080600060608486031215620041b157600080fd5b620041bc8462003ca3565b92506020840135620041ce8162003c6e565b91506040840135620041e08162003c6e565b809150509250925092565b6000806000606084860312156200420157600080fd5b6200420c8462003ca3565b925060208401356200421e8162003c6e565b9150604084013567ffffffffffffffff8111156200423b57600080fd5b620042498682870162004058565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082620042e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362004321576200432162004282565b5060010190565b6000602082840312156200433b57600080fd5b5051919050565b60005b838110156200435f57818101518382015260200162004345565b83811115620015415750506000910152565b600081518084526200438b81602086016020860162004342565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff83166020820152606060408201526000620043fa606083018462004371565b95945050505050565b600082516200441781846020870162004342565b9190910192915050565b600082601f8301126200443357600080fd5b8151620044446200407b826200400f565b8181528460208386010111156200445a57600080fd5b620020c082602083016020870162004342565b6000806000606084860312156200448357600080fd5b835167ffffffffffffffff808211156200449c57600080fd5b620044aa8783880162004421565b94506020860151915080821115620044c157600080fd5b50620044d08682870162004421565b9250506040840151620041e08162003f75565b60a081526000620044f860a083018862004371565b82810360208401526200450c818862004371565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b8015158114620023d957600080fd5b6000602082840312156200456557600080fd5b815162002fba8162004543565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620045d28285018762004371565b925080851660e085015250509998505050505050505050565b600060208284031215620045fe57600080fd5b815167ffffffffffffffff8111156200461657600080fd5b620020c08482850162004421565b6000602082840312156200463757600080fd5b815162002fba8162003f75565b60608152600062004659606083018662004371565b82810360208401526200466d818662004371565b91505060ff83166040830152949350505050565b600181815b80851115620046e057817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620046c457620046c462004282565b80851615620046d257918102915b93841c939080029062004686565b509250929050565b600082620046f9575060016200091b565b8162004708575060006200091b565b81600181146200472157600281146200472c576200474c565b60019150506200091b565b60ff84111562004740576200474062004282565b50506001821b6200091b565b5060208310610133831016604e8410600b841016171562004771575081810a6200091b565b6200477d838362004681565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115620047b257620047b262004282565b029392505050565b600062002fba8383620046e8565b600082821015620047dd57620047dd62004282565b500390565b60008219821115620047f857620047f862004282565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600080858511156200483d57600080fd5b838611156200484b57600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200487457600080fd5b8735620048818162003c6e565b96506020880135620048938162003c6e565b95506040880135945060608801359350608088013562003ff28162003f75565b600080600080600080600080610100898b031215620048d157600080fd5b8835620048de8162003c6e565b97506020890135620048f08162003c6e565b965060408901359550606089013594506080890135620049108162004543565b935060a0890135620049228162003f75565b979a969950949793969295929450505060c08201359160e0013590565b60208152600062002fba60208301846200437156fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a26469706673582212200c7e24244b8a018e593e0d7152ca542b8e67229f6829c3f3c7b6723793fadec664736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50615cc5806100206000396000f3fe608060405260043610620001e75760003560e01c80637b6323c1116200010b578063bab161bf11620000a1578063e7375881116200006c578063e7375881146200067f578063ed6be5c914620006b3578063f2fde38b14620006ca578063ff634ed714620006ef57600080fd5b8063bab161bf14620005f4578063d02103ca146200062e578063d96a15f71462000650578063dbc16976146200066757600080fd5b80638f61151911620000e25780638f611519146200056b57806391e57e2d146200058d578063a08e8a0814620005a5578063aaa13cc214620005cf57600080fd5b80637b6323c114620004ec57806381b1c17414620005115780638da5cb5b146200054b57600080fd5b8063318aee3d11620001815780633e19704311620001585780633e19704314620003a957806346385549146200048a578063647c576c14620004af578063715018a614620004d457600080fd5b8063318aee3d14620002fd5780633ae05047146200036c5780633da81682146200038457600080fd5b806322e95f2c11620001c257806322e95f2c146200024e5780632b5e42e7146200028c5780632c3f58cd14620002b15780632dfdf0b514620002d657600080fd5b80630871e97114620001ec57806315064c9614620002055780632072f6c51462000236575b600080fd5b62000203620001fd36600462003523565b62000706565b005b3480156200021257600080fd5b50602254620002219060ff1681565b60405190151581526020015b60405180910390f35b3480156200024357600080fd5b5062000203620007c2565b3480156200025b57600080fd5b50620002736200026d366004620035b0565b62000876565b6040516001600160a01b0390911681526020016200022d565b3480156200029957600080fd5b5062000203620002ab366004620035ec565b6200090a565b348015620002be57600080fd5b5062000203620002d036600462003606565b62000919565b348015620002e357600080fd5b50620002ee60215481565b6040519081526020016200022d565b3480156200030a57600080fd5b50620003476200031c36600462003624565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200022d565b3480156200037957600080fd5b50620002ee6200095f565b3480156200039157600080fd5b5062000221620003a336600462003725565b62000a52565b348015620003b657600080fd5b50620002ee620003c8366004620037a3565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200049757600080fd5b5062000203620004a9366004620038b4565b62000b52565b348015620004bc57600080fd5b5062000203620004ce3660046200399b565b62000dd8565b348015620004e157600080fd5b506200020362000fc8565b348015620004f957600080fd5b50620002036200050b366004620038b4565b62000fde565b3480156200051e57600080fd5b506200027362000530366004620035ec565b6024602052600090815260409020546001600160a01b031681565b3480156200055857600080fd5b50605a546001600160a01b031662000273565b3480156200057857600080fd5b5060275462000273906001600160a01b031681565b3480156200059a57600080fd5b50620002ee608c5481565b348015620005b257600080fd5b50620005bc600081565b60405160ff90911681526020016200022d565b348015620005dc57600080fd5b5062000273620005ee366004620039eb565b620015d4565b3480156200060157600080fd5b506022546200061890610100900463ffffffff1681565b60405163ffffffff90911681526020016200022d565b3480156200063b57600080fd5b5060265462000273906001600160a01b031681565b620002036200066136600462003a9f565b62001740565b3480156200067457600080fd5b506200020362001a05565b3480156200068c57600080fd5b50620002216200069e366004620035ec565b60236020526000908152604090205460ff1681565b348015620006c057600080fd5b5062000618600081565b348015620006d757600080fd5b5062000203620006e936600462003624565b62001ab7565b348015620006fc57600080fd5b50620005bc600181565b608c54341115620007aa5760405162461bcd60e51b815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b620007ba86868686868662001b4d565b505050505050565b6027546001600160a01b031633146200086a5760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007a1565b62000874620020f8565b565b6000602460008484604051602001620008d292919060e09290921b7fffffffff0000000000000000000000000000000000000000000000000000000016825260601b6bffffffffffffffffffffffff1916600482015260180190565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b62000914620021d1565b608c55565b62000923620021d1565b6022805463ffffffff909216610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff909216919091179055565b602154600090819081805b602081101562000a495782600116600103620009ca576001816020811062000996576200099662003b07565b01546040805160208101929092528101859052606001604051602081830303815290604052805190602001209350620009f7565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a0460028462003b65565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000a409062003ba1565b9150506200096a565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000b45578160011660010362000acf5786818151811062000a8d5762000a8d62003b07565b60200260200101518360405160200162000ab1929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000b21565b8287828151811062000ae55762000ae562003b07565b602002602001015160405160200162000b08929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000b2e60028362003b65565b91508062000b3c8162003ba1565b91505062000a62565b5050909114949350505050565b60225460ff161562000bf35760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007a1565b62000c098a8a8a8a8a8a8a8a8a8a60016200222d565b63ffffffff8916600090815260236020526040808220805460ff19166001179055516001600160a01b03851690849062000c4c9089908b90879060240162003c39565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162000cb1919062003c72565b60006040518083038185875af1925050503d806000811462000cf0576040519150601f19603f3d011682016040523d82523d6000602084013e62000cf5565b606091505b505090508062000d6d5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007a1565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff161580801562000df95750600054600160ff909116105b8062000e155750303b15801562000e15575060005460ff166001145b62000e895760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007a1565b6000805460ff19166001179055801562000eca57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6022805463ffffffff8616610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff909116179055602680546001600160a01b038086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255602780549285169290911691909117905562000f52620025b5565b6703782dace9d90000608c55801562000fc257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000fd2620021d1565b6200087460006200263e565b60225460ff16156200107f5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007a1565b620010958a8a8a8a8a8a8a8a8a8a60006200222d565b63ffffffff89166000908152602360205260409020805460ff191660011790556001600160a01b038516620011b457604080516000808252602082019092526001600160a01b038516908490604051620010f0919062003c72565b60006040518083038185875af1925050503d80600081146200112f576040519150601f19603f3d011682016040523d82523d6000602084013e62001134565b606091505b5050905080620011ad5760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c4544000000000000000000000000000000000000000000000000006064820152608401620007a1565b506200156a565b60225463ffffffff610100909104811690871603620011e957620011e36001600160a01b0386168484620026a8565b6200156a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620014d65760008060008580602001905181019062001289919062003ce4565b925092509250600085848484604051620012a3906200348c565b620012b19392919062003d5a565b8190604051809103906000f5905080158015620012d2573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001340573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001366919062003da6565b50620013728162002758565b6200137d84620027d0565b6200138883620027d0565b620013968260ff1662002845565b806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620014c49392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001567565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200153f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001565919062003da6565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162001657906200348c565b601f1982820381018352601f90910116604081905262001684908d908d908d908d908d9060200162003df1565b60408051601f1981840301815290829052620016a4929160200162003e32565b604051602081830303815290604052805190602001206040516020016200171a94939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620017e15760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007a1565b60225463ffffffff610100909104811690841603620018695760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007a1565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620018bd98979695949392919062003e65565b60405180910390a16022548151602080840191909120604080517f01000000000000000000000000000000000000000000000000000000000000008185015261010090940460e090811b7fffffffff00000000000000000000000000000000000000000000000000000000908116602187015233606090811b6bffffffffffffffffffffffff199081166025890152928a901b909116603987015287901b16603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200199290620028bb565b6026546001600160a01b03166333d6247d620019ad6200095f565b6040518263ffffffff1660e01b8152600401620019cc91815260200190565b600060405180830381600087803b158015620019e757600080fd5b505af1158015620019fc573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b0316331462001aad5760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007a1565b6200087462002a1a565b62001ac1620021d1565b6001600160a01b03811662001b3f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007a1565b62001b4a816200263e565b50565b60225460ff161562001bee5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007a1565b60225463ffffffff61010090910481169086160362001c765760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007a1565b60008060606001600160a01b03891662001d0b5785341462001d015760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007a1565b6000915062001f95565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001df2576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562001db9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ddf919062003da6565b5060208101518151909450925062001f93565b841562001e075762001e078a88888862002aca565b62001e1e6001600160a01b038b1633308a620030f0565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001e75573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001e9f919081019062003ed1565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001ede573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001f08919081019062003ed1565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001f47573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f6d919062003f0a565b60405160200162001f819392919062003d5a565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162001fd798979695949392919062003e65565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a905260718082019390935281518082039093018352609101905280519101206200207f90620028bb565b6026546001600160a01b03166333d6247d6200209a6200095f565b6040518263ffffffff1660e01b8152600401620020b991815260200190565b600060405180830381600087803b158015620020d457600080fd5b505af1158015620020e9573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff1615620021995760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007a1565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620008745760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007a1565b63ffffffff8a1660009081526023602052604090205460ff1615620022ba5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d4544000000000000000000000000000000000000000000000000000000006064820152608401620007a1565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526001600160a01b039091169063257b3632906084016020604051808303816000875af115801562002346573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200236c919062003f2a565b600003620023e35760405162461bcd60e51b815260206004820152603460248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000006064820152608401620007a1565b60225463ffffffff86811661010090920416146200246a5760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000006064820152608401620007a1565b602254600090610100900463ffffffff16620024885750876200248b565b50885b8251602080850191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f887901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08d811b821660218401526bffffffffffffffffffffffff1960608e811b82166025860152918d901b90921660398401528a901b16603d82015260518101889052607180820193909352815180820390930183526091019052805191012062002559908d8d63ffffffff168462000a52565b620025a75760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c49446044820152606401620007a1565b505050505050505050505050565b600054610100900460ff16620026345760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007a1565b6200087462003143565b605a80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620027539084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152620031cd565b505050565b6040516001600160a01b038216602482015262001b4a9060440160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f2c2ecbc200000000000000000000000000000000000000000000000000000000179052620032b9565b62001b4a81604051602401620027e7919062003f44565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f41304fac00000000000000000000000000000000000000000000000000000000179052620032b9565b62001b4a816040516024016200285d91815260200190565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff82c50f100000000000000000000000000000000000000000000000000000000179052620032b9565b806001620028cc6020600262004092565b620028d89190620040a0565b60215410620029505760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007a1565b600160216000828254620029659190620040ba565b909155505060215460005b602081101562002a0f5781600116600103620029a55782600182602081106200299d576200299d62003b07565b015550505050565b60018160208110620029bb57620029bb62003b07565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620029f8919062003b65565b91508062002a068162003ba1565b91505062002970565b5062002753620040d5565b60225460ff161562002a955760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620007a1565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b600062002b0d83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620032da92505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002e0f57600080808080808062002b70896004818d62004104565b81019062002b7f919062004130565b9650965096509650965096509650336001600160a01b0316876001600160a01b03161462002c165760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007a1565b6001600160a01b038616301462002c965760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007a1565b8a851462002d0d5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007a1565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002dbb919062003c72565b6000604051808303816000865af19150503d806000811462002dfa576040519150601f19603f3d011682016040523d82523d6000602084013e62002dff565b606091505b50505050505050505050620030e9565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002ea25760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007a1565b60008080808080808062002eba8a6004818e62004104565b81019062002ec991906200418b565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462002f625760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007a1565b6001600160a01b038716301462002fe25760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007a1565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162003099919062003c72565b6000604051808303816000865af19150503d8060008114620030d8576040519150601f19603f3d011682016040523d82523d6000602084013e620030dd565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fc29085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401620026ee565b600054610100900460ff16620031c25760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007a1565b62000874336200263e565b600062003224826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620032e19092919063ffffffff16565b80519091501562002753578080602001905181019062003245919062003da6565b620027535760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007a1565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b6020015190565b6060620032f28484600085620032fc565b90505b9392505050565b606082471015620033765760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401620007a1565b6001600160a01b0385163b620033cf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007a1565b600080866001600160a01b03168587604051620033ed919062003c72565b60006040518083038185875af1925050503d80600081146200342c576040519150601f19603f3d011682016040523d82523d6000602084013e62003431565b606091505b5091509150620034438282866200344e565b979650505050505050565b606083156200345f575081620032f5565b825115620034705782518084602001fd5b8160405162461bcd60e51b8152600401620007a1919062003f44565b611a78806200421883390190565b6001600160a01b038116811462001b4a57600080fd5b8035620034bd816200349a565b919050565b803563ffffffff81168114620034bd57600080fd5b60008083601f840112620034ea57600080fd5b50813567ffffffffffffffff8111156200350357600080fd5b6020830191508360208285010111156200351c57600080fd5b9250929050565b60008060008060008060a087890312156200353d57600080fd5b86356200354a816200349a565b95506200355a60208801620034c2565b945060408701356200356c816200349a565b935060608701359250608087013567ffffffffffffffff8111156200359057600080fd5b6200359e89828a01620034d7565b979a9699509497509295939492505050565b60008060408385031215620035c457600080fd5b620035cf83620034c2565b91506020830135620035e1816200349a565b809150509250929050565b600060208284031215620035ff57600080fd5b5035919050565b6000602082840312156200361957600080fd5b620032f582620034c2565b6000602082840312156200363757600080fd5b8135620032f5816200349a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200369f576200369f62003644565b604052919050565b600082601f830112620036b957600080fd5b8135602067ffffffffffffffff821115620036d857620036d862003644565b8160051b620036e982820162003673565b92835284810182019282810190878511156200370457600080fd5b83870192505b8483101562003443578235825291830191908301906200370a565b600080600080608085870312156200373c57600080fd5b84359350602085013567ffffffffffffffff808211156200375c57600080fd5b6200376a88838901620036a7565b94506040870135915080821682146200378257600080fd5b509396929550929360600135925050565b60ff8116811462001b4a57600080fd5b600080600080600080600060e0888a031215620037bf57600080fd5b8735620037cc8162003793565b9650620037dc60208901620034c2565b95506040880135620037ee816200349a565b9450620037fe60608901620034c2565b9350608088013562003810816200349a565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200384a576200384a62003644565b50601f01601f191660200190565b600082601f8301126200386a57600080fd5b8135620038816200387b826200382d565b62003673565b8181528460208386010111156200389757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620038d557600080fd5b8a3567ffffffffffffffff80821115620038ee57600080fd5b620038fc8e838f01620036a7565b9b506200390c60208e01620034c2565b9a5060408d0135995060608d013598506200392a60808e01620034c2565b97506200393a60a08e01620034b0565b96506200394a60c08e01620034c2565b95506200395a60e08e01620034b0565b94506101008d013593506101208d01359150808211156200397a57600080fd5b50620039898d828e0162003858565b9150509295989b9194979a5092959850565b600080600060608486031215620039b157600080fd5b620039bc84620034c2565b92506020840135620039ce816200349a565b91506040840135620039e0816200349a565b809150509250925092565b600080600080600080600060a0888a03121562003a0757600080fd5b62003a1288620034c2565b9650602088013562003a24816200349a565b9550604088013567ffffffffffffffff8082111562003a4257600080fd5b62003a508b838c01620034d7565b909750955060608a013591508082111562003a6a57600080fd5b5062003a798a828b01620034d7565b909450925050608088013562003a8f8162003793565b8091505092959891949750929550565b60008060006060848603121562003ab557600080fd5b62003ac084620034c2565b9250602084013562003ad2816200349a565b9150604084013567ffffffffffffffff81111562003aef57600080fd5b62003afd8682870162003858565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003b9c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003bd55762003bd562003b36565b5060010190565b60005b8381101562003bf957818101518382015260200162003bdf565b8381111562000fc25750506000910152565b6000815180845262003c2581602086016020860162003bdc565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003c69606083018462003c0b565b95945050505050565b6000825162003c8681846020870162003bdc565b9190910192915050565b600082601f83011262003ca257600080fd5b815162003cb36200387b826200382d565b81815284602083860101111562003cc957600080fd5b62003cdc82602083016020870162003bdc565b949350505050565b60008060006060848603121562003cfa57600080fd5b835167ffffffffffffffff8082111562003d1357600080fd5b62003d218783880162003c90565b9450602086015191508082111562003d3857600080fd5b5062003d478682870162003c90565b9250506040840151620039e08162003793565b60608152600062003d6f606083018662003c0b565b828103602084015262003d83818662003c0b565b91505060ff83166040830152949350505050565b801515811462001b4a57600080fd5b60006020828403121562003db957600080fd5b8151620032f58162003d97565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003e0760608301878962003dc6565b828103602084015262003e1c81868862003dc6565b91505060ff831660408301529695505050505050565b6000835162003e4681846020880162003bdc565b83519083019062003e5c81836020880162003bdc565b01949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003eb88285018762003c0b565b925080851660e085015250509998505050505050505050565b60006020828403121562003ee457600080fd5b815167ffffffffffffffff81111562003efc57600080fd5b62003cdc8482850162003c90565b60006020828403121562003f1d57600080fd5b8151620032f58162003793565b60006020828403121562003f3d57600080fd5b5051919050565b602081526000620032f5602083018462003c0b565b600181815b8085111562003fb857817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003f9c5762003f9c62003b36565b8085161562003faa57918102915b93841c939080029062003f5e565b509250929050565b60008262003fd15750600162000904565b8162003fe05750600062000904565b816001811462003ff95760028114620040045762004024565b600191505062000904565b60ff84111562004018576200401862003b36565b50506001821b62000904565b5060208310610133831016604e8410600b841016171562004049575081810a62000904565b62004055838362003f59565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156200408a576200408a62003b36565b029392505050565b6000620032f5838362003fc0565b600082821015620040b557620040b562003b36565b500390565b60008219821115620040d057620040d062003b36565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600080858511156200411557600080fd5b838611156200412357600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200414c57600080fd5b873562004159816200349a565b965060208801356200416b816200349a565b955060408801359450606088013593506080880135620038108162003793565b600080600080600080600080610100898b031215620041a957600080fd5b8835620041b6816200349a565b97506020890135620041c8816200349a565b965060408901359550606089013594506080890135620041e88162003d97565b935060a0890135620041fa8162003793565b979a969950949793969295929450505060c08201359160e001359056fe60c06040523480156200001157600080fd5b5060405162001a7838038062001a788339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516115be620004ba600039600061053001526000818161036f01526104fa01526115be6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b60405161019191906112d5565b60405180910390f35b6101ad6101a8366004611371565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad61020436600461139b565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad610276366004611371565b610552565b6101ad610289366004611371565b61059e565b6101c161029c3660046113d7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d23660046113d7565b60066020526000908152604090205481565b610184610645565b6101ad6102fa366004611371565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad610352366004611371565b6106ed565b6101ad610365366004611371565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f3660046113f9565b6107b2565b005b6101c16103b436600461146c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6060600380546104379061149f565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061149f565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f56565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611521565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c838361101e565b50600192915050565b6060600480546104379061149f565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c8383611124565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661088183611539565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ee3908490611521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4991815260200190565b60405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f81610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166110815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b80600260008282546110939190611521565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906110cd908490611521565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156112495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611285908490611571565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c27565b600060208083528351808285015260005b81811015611302578581018301518582016040015282016112e6565b81811115611314576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136c57600080fd5b919050565b6000806040838503121561138457600080fd5b61138d83611348565b946020939093013593505050565b6000806000606084860312156113b057600080fd5b6113b984611348565b92506113c760208501611348565b9150604084013590509250925092565b6000602082840312156113e957600080fd5b6113f282611348565b9392505050565b600080600080600080600060e0888a03121561141457600080fd5b61141d88611348565b965061142b60208901611348565b95506040880135945060608801359350608088013560ff8116811461144f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561147f57600080fd5b61148883611348565b915061149660208401611348565b90509250929050565b600181811c908216806114b357607f821691505b6020821081036114ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611534576115346114f2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156a5761156a6114f2565b5060010190565b600082821015611583576115836114f2565b50039056fea2646970667358221220dc9c54325b6ec8c11c8bc6a1630cfb64202b6d54611cd1004e705ceca7826a4f64736f6c634300080f0033a2646970667358221220d5e32f6ffbd5cc460bd0a72e00ddd4d753b780a14f41dfbed29efb3720e9bfdf64736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001e75760003560e01c80637b6323c1116200010b578063bab161bf11620000a1578063e7375881116200006c578063e7375881146200067f578063ed6be5c914620006b3578063f2fde38b14620006ca578063ff634ed714620006ef57600080fd5b8063bab161bf14620005f4578063d02103ca146200062e578063d96a15f71462000650578063dbc16976146200066757600080fd5b80638f61151911620000e25780638f611519146200056b57806391e57e2d146200058d578063a08e8a0814620005a5578063aaa13cc214620005cf57600080fd5b80637b6323c114620004ec57806381b1c17414620005115780638da5cb5b146200054b57600080fd5b8063318aee3d11620001815780633e19704311620001585780633e19704314620003a957806346385549146200048a578063647c576c14620004af578063715018a614620004d457600080fd5b8063318aee3d14620002fd5780633ae05047146200036c5780633da81682146200038457600080fd5b806322e95f2c11620001c257806322e95f2c146200024e5780632b5e42e7146200028c5780632c3f58cd14620002b15780632dfdf0b514620002d657600080fd5b80630871e97114620001ec57806315064c9614620002055780632072f6c51462000236575b600080fd5b62000203620001fd36600462003523565b62000706565b005b3480156200021257600080fd5b50602254620002219060ff1681565b60405190151581526020015b60405180910390f35b3480156200024357600080fd5b5062000203620007c2565b3480156200025b57600080fd5b50620002736200026d366004620035b0565b62000876565b6040516001600160a01b0390911681526020016200022d565b3480156200029957600080fd5b5062000203620002ab366004620035ec565b6200090a565b348015620002be57600080fd5b5062000203620002d036600462003606565b62000919565b348015620002e357600080fd5b50620002ee60215481565b6040519081526020016200022d565b3480156200030a57600080fd5b50620003476200031c36600462003624565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200022d565b3480156200037957600080fd5b50620002ee6200095f565b3480156200039157600080fd5b5062000221620003a336600462003725565b62000a52565b348015620003b657600080fd5b50620002ee620003c8366004620037a3565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200049757600080fd5b5062000203620004a9366004620038b4565b62000b52565b348015620004bc57600080fd5b5062000203620004ce3660046200399b565b62000dd8565b348015620004e157600080fd5b506200020362000fc8565b348015620004f957600080fd5b50620002036200050b366004620038b4565b62000fde565b3480156200051e57600080fd5b506200027362000530366004620035ec565b6024602052600090815260409020546001600160a01b031681565b3480156200055857600080fd5b50605a546001600160a01b031662000273565b3480156200057857600080fd5b5060275462000273906001600160a01b031681565b3480156200059a57600080fd5b50620002ee608c5481565b348015620005b257600080fd5b50620005bc600081565b60405160ff90911681526020016200022d565b348015620005dc57600080fd5b5062000273620005ee366004620039eb565b620015d4565b3480156200060157600080fd5b506022546200061890610100900463ffffffff1681565b60405163ffffffff90911681526020016200022d565b3480156200063b57600080fd5b5060265462000273906001600160a01b031681565b620002036200066136600462003a9f565b62001740565b3480156200067457600080fd5b506200020362001a05565b3480156200068c57600080fd5b50620002216200069e366004620035ec565b60236020526000908152604090205460ff1681565b348015620006c057600080fd5b5062000618600081565b348015620006d757600080fd5b5062000203620006e936600462003624565b62001ab7565b348015620006fc57600080fd5b50620005bc600181565b608c54341115620007aa5760405162461bcd60e51b815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b620007ba86868686868662001b4d565b505050505050565b6027546001600160a01b031633146200086a5760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007a1565b62000874620020f8565b565b6000602460008484604051602001620008d292919060e09290921b7fffffffff0000000000000000000000000000000000000000000000000000000016825260601b6bffffffffffffffffffffffff1916600482015260180190565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b62000914620021d1565b608c55565b62000923620021d1565b6022805463ffffffff909216610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff909216919091179055565b602154600090819081805b602081101562000a495782600116600103620009ca576001816020811062000996576200099662003b07565b01546040805160208101929092528101859052606001604051602081830303815290604052805190602001209350620009f7565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a0460028462003b65565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000a409062003ba1565b9150506200096a565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000b45578160011660010362000acf5786818151811062000a8d5762000a8d62003b07565b60200260200101518360405160200162000ab1929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000b21565b8287828151811062000ae55762000ae562003b07565b602002602001015160405160200162000b08929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000b2e60028362003b65565b91508062000b3c8162003ba1565b91505062000a62565b5050909114949350505050565b60225460ff161562000bf35760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007a1565b62000c098a8a8a8a8a8a8a8a8a8a60016200222d565b63ffffffff8916600090815260236020526040808220805460ff19166001179055516001600160a01b03851690849062000c4c9089908b90879060240162003c39565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162000cb1919062003c72565b60006040518083038185875af1925050503d806000811462000cf0576040519150601f19603f3d011682016040523d82523d6000602084013e62000cf5565b606091505b505090508062000d6d5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007a1565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff161580801562000df95750600054600160ff909116105b8062000e155750303b15801562000e15575060005460ff166001145b62000e895760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007a1565b6000805460ff19166001179055801562000eca57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6022805463ffffffff8616610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff909116179055602680546001600160a01b038086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255602780549285169290911691909117905562000f52620025b5565b6703782dace9d90000608c55801562000fc257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000fd2620021d1565b6200087460006200263e565b60225460ff16156200107f5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007a1565b620010958a8a8a8a8a8a8a8a8a8a60006200222d565b63ffffffff89166000908152602360205260409020805460ff191660011790556001600160a01b038516620011b457604080516000808252602082019092526001600160a01b038516908490604051620010f0919062003c72565b60006040518083038185875af1925050503d80600081146200112f576040519150601f19603f3d011682016040523d82523d6000602084013e62001134565b606091505b5050905080620011ad5760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c4544000000000000000000000000000000000000000000000000006064820152608401620007a1565b506200156a565b60225463ffffffff610100909104811690871603620011e957620011e36001600160a01b0386168484620026a8565b6200156a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620014d65760008060008580602001905181019062001289919062003ce4565b925092509250600085848484604051620012a3906200348c565b620012b19392919062003d5a565b8190604051809103906000f5905080158015620012d2573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001340573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001366919062003da6565b50620013728162002758565b6200137d84620027d0565b6200138883620027d0565b620013968260ff1662002845565b806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620014c49392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001567565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200153f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001565919062003da6565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162001657906200348c565b601f1982820381018352601f90910116604081905262001684908d908d908d908d908d9060200162003df1565b60408051601f1981840301815290829052620016a4929160200162003e32565b604051602081830303815290604052805190602001206040516020016200171a94939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620017e15760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007a1565b60225463ffffffff610100909104811690841603620018695760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007a1565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620018bd98979695949392919062003e65565b60405180910390a16022548151602080840191909120604080517f01000000000000000000000000000000000000000000000000000000000000008185015261010090940460e090811b7fffffffff00000000000000000000000000000000000000000000000000000000908116602187015233606090811b6bffffffffffffffffffffffff199081166025890152928a901b909116603987015287901b16603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200199290620028bb565b6026546001600160a01b03166333d6247d620019ad6200095f565b6040518263ffffffff1660e01b8152600401620019cc91815260200190565b600060405180830381600087803b158015620019e757600080fd5b505af1158015620019fc573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b0316331462001aad5760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007a1565b6200087462002a1a565b62001ac1620021d1565b6001600160a01b03811662001b3f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007a1565b62001b4a816200263e565b50565b60225460ff161562001bee5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007a1565b60225463ffffffff61010090910481169086160362001c765760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007a1565b60008060606001600160a01b03891662001d0b5785341462001d015760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007a1565b6000915062001f95565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001df2576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562001db9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ddf919062003da6565b5060208101518151909450925062001f93565b841562001e075762001e078a88888862002aca565b62001e1e6001600160a01b038b1633308a620030f0565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001e75573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001e9f919081019062003ed1565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001ede573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001f08919081019062003ed1565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001f47573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f6d919062003f0a565b60405160200162001f819392919062003d5a565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162001fd798979695949392919062003e65565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a905260718082019390935281518082039093018352609101905280519101206200207f90620028bb565b6026546001600160a01b03166333d6247d6200209a6200095f565b6040518263ffffffff1660e01b8152600401620020b991815260200190565b600060405180830381600087803b158015620020d457600080fd5b505af1158015620020e9573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff1615620021995760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007a1565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620008745760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007a1565b63ffffffff8a1660009081526023602052604090205460ff1615620022ba5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d4544000000000000000000000000000000000000000000000000000000006064820152608401620007a1565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526001600160a01b039091169063257b3632906084016020604051808303816000875af115801562002346573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200236c919062003f2a565b600003620023e35760405162461bcd60e51b815260206004820152603460248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000006064820152608401620007a1565b60225463ffffffff86811661010090920416146200246a5760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000006064820152608401620007a1565b602254600090610100900463ffffffff16620024885750876200248b565b50885b8251602080850191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f887901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08d811b821660218401526bffffffffffffffffffffffff1960608e811b82166025860152918d901b90921660398401528a901b16603d82015260518101889052607180820193909352815180820390930183526091019052805191012062002559908d8d63ffffffff168462000a52565b620025a75760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c49446044820152606401620007a1565b505050505050505050505050565b600054610100900460ff16620026345760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007a1565b6200087462003143565b605a80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620027539084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152620031cd565b505050565b6040516001600160a01b038216602482015262001b4a9060440160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f2c2ecbc200000000000000000000000000000000000000000000000000000000179052620032b9565b62001b4a81604051602401620027e7919062003f44565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f41304fac00000000000000000000000000000000000000000000000000000000179052620032b9565b62001b4a816040516024016200285d91815260200190565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff82c50f100000000000000000000000000000000000000000000000000000000179052620032b9565b806001620028cc6020600262004092565b620028d89190620040a0565b60215410620029505760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007a1565b600160216000828254620029659190620040ba565b909155505060215460005b602081101562002a0f5781600116600103620029a55782600182602081106200299d576200299d62003b07565b015550505050565b60018160208110620029bb57620029bb62003b07565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620029f8919062003b65565b91508062002a068162003ba1565b91505062002970565b5062002753620040d5565b60225460ff161562002a955760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620007a1565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b600062002b0d83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620032da92505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002e0f57600080808080808062002b70896004818d62004104565b81019062002b7f919062004130565b9650965096509650965096509650336001600160a01b0316876001600160a01b03161462002c165760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007a1565b6001600160a01b038616301462002c965760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007a1565b8a851462002d0d5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007a1565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002dbb919062003c72565b6000604051808303816000865af19150503d806000811462002dfa576040519150601f19603f3d011682016040523d82523d6000602084013e62002dff565b606091505b50505050505050505050620030e9565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002ea25760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007a1565b60008080808080808062002eba8a6004818e62004104565b81019062002ec991906200418b565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462002f625760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007a1565b6001600160a01b038716301462002fe25760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007a1565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162003099919062003c72565b6000604051808303816000865af19150503d8060008114620030d8576040519150601f19603f3d011682016040523d82523d6000602084013e620030dd565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fc29085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401620026ee565b600054610100900460ff16620031c25760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007a1565b62000874336200263e565b600062003224826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620032e19092919063ffffffff16565b80519091501562002753578080602001905181019062003245919062003da6565b620027535760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007a1565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b6020015190565b6060620032f28484600085620032fc565b90505b9392505050565b606082471015620033765760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401620007a1565b6001600160a01b0385163b620033cf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007a1565b600080866001600160a01b03168587604051620033ed919062003c72565b60006040518083038185875af1925050503d80600081146200342c576040519150601f19603f3d011682016040523d82523d6000602084013e62003431565b606091505b5091509150620034438282866200344e565b979650505050505050565b606083156200345f575081620032f5565b825115620034705782518084602001fd5b8160405162461bcd60e51b8152600401620007a1919062003f44565b611a78806200421883390190565b6001600160a01b038116811462001b4a57600080fd5b8035620034bd816200349a565b919050565b803563ffffffff81168114620034bd57600080fd5b60008083601f840112620034ea57600080fd5b50813567ffffffffffffffff8111156200350357600080fd5b6020830191508360208285010111156200351c57600080fd5b9250929050565b60008060008060008060a087890312156200353d57600080fd5b86356200354a816200349a565b95506200355a60208801620034c2565b945060408701356200356c816200349a565b935060608701359250608087013567ffffffffffffffff8111156200359057600080fd5b6200359e89828a01620034d7565b979a9699509497509295939492505050565b60008060408385031215620035c457600080fd5b620035cf83620034c2565b91506020830135620035e1816200349a565b809150509250929050565b600060208284031215620035ff57600080fd5b5035919050565b6000602082840312156200361957600080fd5b620032f582620034c2565b6000602082840312156200363757600080fd5b8135620032f5816200349a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200369f576200369f62003644565b604052919050565b600082601f830112620036b957600080fd5b8135602067ffffffffffffffff821115620036d857620036d862003644565b8160051b620036e982820162003673565b92835284810182019282810190878511156200370457600080fd5b83870192505b8483101562003443578235825291830191908301906200370a565b600080600080608085870312156200373c57600080fd5b84359350602085013567ffffffffffffffff808211156200375c57600080fd5b6200376a88838901620036a7565b94506040870135915080821682146200378257600080fd5b509396929550929360600135925050565b60ff8116811462001b4a57600080fd5b600080600080600080600060e0888a031215620037bf57600080fd5b8735620037cc8162003793565b9650620037dc60208901620034c2565b95506040880135620037ee816200349a565b9450620037fe60608901620034c2565b9350608088013562003810816200349a565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200384a576200384a62003644565b50601f01601f191660200190565b600082601f8301126200386a57600080fd5b8135620038816200387b826200382d565b62003673565b8181528460208386010111156200389757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620038d557600080fd5b8a3567ffffffffffffffff80821115620038ee57600080fd5b620038fc8e838f01620036a7565b9b506200390c60208e01620034c2565b9a5060408d0135995060608d013598506200392a60808e01620034c2565b97506200393a60a08e01620034b0565b96506200394a60c08e01620034c2565b95506200395a60e08e01620034b0565b94506101008d013593506101208d01359150808211156200397a57600080fd5b50620039898d828e0162003858565b9150509295989b9194979a5092959850565b600080600060608486031215620039b157600080fd5b620039bc84620034c2565b92506020840135620039ce816200349a565b91506040840135620039e0816200349a565b809150509250925092565b600080600080600080600060a0888a03121562003a0757600080fd5b62003a1288620034c2565b9650602088013562003a24816200349a565b9550604088013567ffffffffffffffff8082111562003a4257600080fd5b62003a508b838c01620034d7565b909750955060608a013591508082111562003a6a57600080fd5b5062003a798a828b01620034d7565b909450925050608088013562003a8f8162003793565b8091505092959891949750929550565b60008060006060848603121562003ab557600080fd5b62003ac084620034c2565b9250602084013562003ad2816200349a565b9150604084013567ffffffffffffffff81111562003aef57600080fd5b62003afd8682870162003858565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003b9c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003bd55762003bd562003b36565b5060010190565b60005b8381101562003bf957818101518382015260200162003bdf565b8381111562000fc25750506000910152565b6000815180845262003c2581602086016020860162003bdc565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003c69606083018462003c0b565b95945050505050565b6000825162003c8681846020870162003bdc565b9190910192915050565b600082601f83011262003ca257600080fd5b815162003cb36200387b826200382d565b81815284602083860101111562003cc957600080fd5b62003cdc82602083016020870162003bdc565b949350505050565b60008060006060848603121562003cfa57600080fd5b835167ffffffffffffffff8082111562003d1357600080fd5b62003d218783880162003c90565b9450602086015191508082111562003d3857600080fd5b5062003d478682870162003c90565b9250506040840151620039e08162003793565b60608152600062003d6f606083018662003c0b565b828103602084015262003d83818662003c0b565b91505060ff83166040830152949350505050565b801515811462001b4a57600080fd5b60006020828403121562003db957600080fd5b8151620032f58162003d97565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003e0760608301878962003dc6565b828103602084015262003e1c81868862003dc6565b91505060ff831660408301529695505050505050565b6000835162003e4681846020880162003bdc565b83519083019062003e5c81836020880162003bdc565b01949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003eb88285018762003c0b565b925080851660e085015250509998505050505050505050565b60006020828403121562003ee457600080fd5b815167ffffffffffffffff81111562003efc57600080fd5b62003cdc8482850162003c90565b60006020828403121562003f1d57600080fd5b8151620032f58162003793565b60006020828403121562003f3d57600080fd5b5051919050565b602081526000620032f5602083018462003c0b565b600181815b8085111562003fb857817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003f9c5762003f9c62003b36565b8085161562003faa57918102915b93841c939080029062003f5e565b509250929050565b60008262003fd15750600162000904565b8162003fe05750600062000904565b816001811462003ff95760028114620040045762004024565b600191505062000904565b60ff84111562004018576200401862003b36565b50506001821b62000904565b5060208310610133831016604e8410600b841016171562004049575081810a62000904565b62004055838362003f59565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156200408a576200408a62003b36565b029392505050565b6000620032f5838362003fc0565b600082821015620040b557620040b562003b36565b500390565b60008219821115620040d057620040d062003b36565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600080858511156200411557600080fd5b838611156200412357600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200414c57600080fd5b873562004159816200349a565b965060208801356200416b816200349a565b955060408801359450606088013593506080880135620038108162003793565b600080600080600080600080610100898b031215620041a957600080fd5b8835620041b6816200349a565b97506020890135620041c8816200349a565b965060408901359550606089013594506080890135620041e88162003d97565b935060a0890135620041fa8162003793565b979a969950949793969295929450505060c08201359160e001359056fe60c06040523480156200001157600080fd5b5060405162001a7838038062001a788339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516115be620004ba600039600061053001526000818161036f01526104fa01526115be6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b60405161019191906112d5565b60405180910390f35b6101ad6101a8366004611371565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad61020436600461139b565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad610276366004611371565b610552565b6101ad610289366004611371565b61059e565b6101c161029c3660046113d7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d23660046113d7565b60066020526000908152604090205481565b610184610645565b6101ad6102fa366004611371565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad610352366004611371565b6106ed565b6101ad610365366004611371565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f3660046113f9565b6107b2565b005b6101c16103b436600461146c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6060600380546104379061149f565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061149f565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f56565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611521565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c838361101e565b50600192915050565b6060600480546104379061149f565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c8383611124565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661088183611539565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ee3908490611521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4991815260200190565b60405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f81610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166110815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b80600260008282546110939190611521565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906110cd908490611521565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156112495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611285908490611571565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c27565b600060208083528351808285015260005b81811015611302578581018301518582016040015282016112e6565b81811115611314576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136c57600080fd5b919050565b6000806040838503121561138457600080fd5b61138d83611348565b946020939093013593505050565b6000806000606084860312156113b057600080fd5b6113b984611348565b92506113c760208501611348565b9150604084013590509250925092565b6000602082840312156113e957600080fd5b6113f282611348565b9392505050565b600080600080600080600060e0888a03121561141457600080fd5b61141d88611348565b965061142b60208901611348565b95506040880135945060608801359350608088013560ff8116811461144f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561147f57600080fd5b61148883611348565b915061149660208401611348565b90509250929050565b600181811c908216806114b357607f821691505b6020821081036114ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611534576115346114f2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156a5761156a6114f2565b5060010190565b600082821015611583576115836114f2565b50039056fea2646970667358221220dc9c54325b6ec8c11c8bc6a1630cfb64202b6d54611cd1004e705ceca7826a4f64736f6c634300080f0033a2646970667358221220d5e32f6ffbd5cc460bd0a72e00ddd4d753b780a14f41dfbed29efb3720e9bfdf64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/ERC20PermitMock.json b/compiled-contracts/ERC20PermitMock.json index 6459c9aec..9514a4230 100644 --- a/compiled-contracts/ERC20PermitMock.json +++ b/compiled-contracts/ERC20PermitMock.json @@ -517,8 +517,8 @@ "type": "function" } ], - "bytecode": "0x6080604052604051620019ca380380620019ca83398101604081905262000026916200022b565b838360036200003683826200034c565b5060046200004582826200034c565b5050506200005a82826200007160201b60201c565b50508151602090920191909120600655506200043f565b6001600160a01b038216620000cc5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620000e0919062000418565b90915550506001600160a01b038216600090815260208190526040812080548392906200010f90849062000418565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200018657600080fd5b81516001600160401b0380821115620001a357620001a36200015e565b604051601f8301601f19908116603f01168101908282118183101715620001ce57620001ce6200015e565b81604052838152602092508683858801011115620001eb57600080fd5b600091505b838210156200020f5785820183015181830184015290820190620001f0565b83821115620002215760008385830101525b9695505050505050565b600080600080608085870312156200024257600080fd5b84516001600160401b03808211156200025a57600080fd5b620002688883890162000174565b955060208701519150808211156200027f57600080fd5b506200028e8782880162000174565b604087015190945090506001600160a01b0381168114620002ae57600080fd5b6060959095015193969295505050565b600181811c90821680620002d357607f821691505b602082108103620002f457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200015957600081815260208120601f850160051c81016020861015620003235750805b601f850160051c820191505b8181101562000344578281556001016200032f565b505050505050565b81516001600160401b038111156200036857620003686200015e565b6200038081620003798454620002be565b84620002fa565b602080601f831160018114620003b857600084156200039f5750858301515b600019600386901b1c1916600185901b17855562000344565b600085815260208120601f198616915b82811015620003e957888601518255948401946001909101908401620003c8565b5085821015620004085787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156200043a57634e487b7160e01b600052601160045260246000fd5b500190565b61157b806200044f6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806340c10f19116100e35780639e4e73181161008c578063c473af3311610066578063c473af33146103d6578063d505accf146103fd578063dd62ed3e1461041057600080fd5b80639e4e731814610389578063a457c2d7146103b0578063a9059cbb146103c357600080fd5b806370a08231116100bd57806370a082311461032b5780637ecebe001461036157806395d89b411461038157600080fd5b806340c10f19146102f257806342966c681461030557806356189cb41461031857600080fd5b806323b872dd116101455780633408e4701161011f5780633408e4701461024c5780633644e5151461025257806339509351146102df57600080fd5b806323b872dd1461020357806330adf81f14610216578063313ce5671461023d57600080fd5b8063095ea7b311610176578063095ea7b3146101c357806318160ddd146101e6578063222f5be0146101ee57600080fd5b806304622c2e1461019257806306fdde03146101ae575b600080fd5b61019b60065481565b6040519081526020015b60405180910390f35b6101b6610456565b6040516101a59190611279565b6101d66101d1366004611315565b6104e8565b60405190151581526020016101a5565b60025461019b565b6102016101fc36600461133f565b610500565b005b6101d661021136600461133f565b610510565b61019b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b604051601281526020016101a5565b4661019b565b61019b6006546000907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f907fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc646604080516020810195909552840192909252606083015260808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6101d66102ed366004611315565b610534565b610201610300366004611315565b610580565b61020161031336600461137b565b61058e565b61020161032636600461133f565b61059b565b61019b610339366004611394565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b61019b61036f366004611394565b60056020526000908152604090205481565b6101b66105a6565b61019b7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc681565b6101d66103be366004611315565b6105b5565b6101d66103d1366004611315565b61068b565b61019b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61020161040b3660046113b6565b610699565b61019b61041e366004611429565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546104659061145c565b80601f01602080910402602001604051908101604052809291908181526020018280546104919061145c565b80156104de5780601f106104b3576101008083540402835291602001916104de565b820191906000526020600020905b8154815290600101906020018083116104c157829003601f168201915b5050505050905090565b6000336104f68185856107e0565b5060019392505050565b61050b838383610993565b505050565b60003361051e858285610c48565b610529858585610993565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104f6908290869061057b9087906114de565b6107e0565b61058a8282610d19565b5050565b6105983382610e39565b50565b61050b8383836107e0565b6060600480546104659061145c565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091908381101561067e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61052982868684036107e0565b6000336104f6818585610993565b42841015610703576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f48455a3a3a7065726d69743a20415554485f45585049524544000000000000006044820152606401610675565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260056020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661075d836114f6565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506107cb8882868686611026565b6107d68888886107e0565b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610882576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610675565b73ffffffffffffffffffffffffffffffffffffffff8216610925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610675565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610a36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610675565b73ffffffffffffffffffffffffffffffffffffffff8216610ad9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610675565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610b8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610675565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610bd39084906114de565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c3991815260200190565b60405180910390a35b50505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610c425781811015610d0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610675565b610c4284848484036107e0565b73ffffffffffffffffffffffffffffffffffffffff8216610d96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610675565b8060026000828254610da891906114de565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610de29084906114de565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8216610edc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610675565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610f92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610675565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610fce90849061152e565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600654604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f602080830191909152818301939093527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528251808303909101815260c08201909252815191909201207f190100000000000000000000000000000000000000000000000000000000000060e083015260e2820181905261010282018690529060009061012201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015611172573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116158015906111ed57508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6107d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f48455a3a3a5f76616c69646174655369676e6564446174613a20494e56414c4960448201527f445f5349474e41545552450000000000000000000000000000000000000000006064820152608401610675565b600060208083528351808285015260005b818110156112a65785810183015185820160400152820161128a565b818111156112b8576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461131057600080fd5b919050565b6000806040838503121561132857600080fd5b611331836112ec565b946020939093013593505050565b60008060006060848603121561135457600080fd5b61135d846112ec565b925061136b602085016112ec565b9150604084013590509250925092565b60006020828403121561138d57600080fd5b5035919050565b6000602082840312156113a657600080fd5b6113af826112ec565b9392505050565b600080600080600080600060e0888a0312156113d157600080fd5b6113da886112ec565b96506113e8602089016112ec565b95506040880135945060608801359350608088013560ff8116811461140c57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561143c57600080fd5b611445836112ec565b9150611453602084016112ec565b90509250929050565b600181811c9082168061147057607f821691505b6020821081036114a9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156114f1576114f16114af565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611527576115276114af565b5060010190565b600082821015611540576115406114af565b50039056fea2646970667358221220b4ef9d6d69b2f9cc14de05689f71f20ae178454360aaddeb70ecdfdeb02cada964736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061018d5760003560e01c806340c10f19116100e35780639e4e73181161008c578063c473af3311610066578063c473af33146103d6578063d505accf146103fd578063dd62ed3e1461041057600080fd5b80639e4e731814610389578063a457c2d7146103b0578063a9059cbb146103c357600080fd5b806370a08231116100bd57806370a082311461032b5780637ecebe001461036157806395d89b411461038157600080fd5b806340c10f19146102f257806342966c681461030557806356189cb41461031857600080fd5b806323b872dd116101455780633408e4701161011f5780633408e4701461024c5780633644e5151461025257806339509351146102df57600080fd5b806323b872dd1461020357806330adf81f14610216578063313ce5671461023d57600080fd5b8063095ea7b311610176578063095ea7b3146101c357806318160ddd146101e6578063222f5be0146101ee57600080fd5b806304622c2e1461019257806306fdde03146101ae575b600080fd5b61019b60065481565b6040519081526020015b60405180910390f35b6101b6610456565b6040516101a59190611279565b6101d66101d1366004611315565b6104e8565b60405190151581526020016101a5565b60025461019b565b6102016101fc36600461133f565b610500565b005b6101d661021136600461133f565b610510565b61019b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b604051601281526020016101a5565b4661019b565b61019b6006546000907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f907fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc646604080516020810195909552840192909252606083015260808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6101d66102ed366004611315565b610534565b610201610300366004611315565b610580565b61020161031336600461137b565b61058e565b61020161032636600461133f565b61059b565b61019b610339366004611394565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b61019b61036f366004611394565b60056020526000908152604090205481565b6101b66105a6565b61019b7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc681565b6101d66103be366004611315565b6105b5565b6101d66103d1366004611315565b61068b565b61019b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61020161040b3660046113b6565b610699565b61019b61041e366004611429565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546104659061145c565b80601f01602080910402602001604051908101604052809291908181526020018280546104919061145c565b80156104de5780601f106104b3576101008083540402835291602001916104de565b820191906000526020600020905b8154815290600101906020018083116104c157829003601f168201915b5050505050905090565b6000336104f68185856107e0565b5060019392505050565b61050b838383610993565b505050565b60003361051e858285610c48565b610529858585610993565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104f6908290869061057b9087906114de565b6107e0565b61058a8282610d19565b5050565b6105983382610e39565b50565b61050b8383836107e0565b6060600480546104659061145c565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091908381101561067e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61052982868684036107e0565b6000336104f6818585610993565b42841015610703576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f48455a3a3a7065726d69743a20415554485f45585049524544000000000000006044820152606401610675565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260056020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661075d836114f6565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506107cb8882868686611026565b6107d68888886107e0565b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610882576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610675565b73ffffffffffffffffffffffffffffffffffffffff8216610925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610675565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610a36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610675565b73ffffffffffffffffffffffffffffffffffffffff8216610ad9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610675565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610b8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610675565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610bd39084906114de565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c3991815260200190565b60405180910390a35b50505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610c425781811015610d0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610675565b610c4284848484036107e0565b73ffffffffffffffffffffffffffffffffffffffff8216610d96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610675565b8060026000828254610da891906114de565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610de29084906114de565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8216610edc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610675565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610f92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610675565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610fce90849061152e565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600654604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f602080830191909152818301939093527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528251808303909101815260c08201909252815191909201207f190100000000000000000000000000000000000000000000000000000000000060e083015260e2820181905261010282018690529060009061012201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015611172573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116158015906111ed57508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6107d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f48455a3a3a5f76616c69646174655369676e6564446174613a20494e56414c4960448201527f445f5349474e41545552450000000000000000000000000000000000000000006064820152608401610675565b600060208083528351808285015260005b818110156112a65785810183015185820160400152820161128a565b818111156112b8576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461131057600080fd5b919050565b6000806040838503121561132857600080fd5b611331836112ec565b946020939093013593505050565b60008060006060848603121561135457600080fd5b61135d846112ec565b925061136b602085016112ec565b9150604084013590509250925092565b60006020828403121561138d57600080fd5b5035919050565b6000602082840312156113a657600080fd5b6113af826112ec565b9392505050565b600080600080600080600060e0888a0312156113d157600080fd5b6113da886112ec565b96506113e8602089016112ec565b95506040880135945060608801359350608088013560ff8116811461140c57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561143c57600080fd5b611445836112ec565b9150611453602084016112ec565b90509250929050565b600181811c9082168061147057607f821691505b6020821081036114a9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156114f1576114f16114af565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611527576115276114af565b5060010190565b600082821015611540576115406114af565b50039056fea2646970667358221220b4ef9d6d69b2f9cc14de05689f71f20ae178454360aaddeb70ecdfdeb02cada964736f6c634300080f0033", + "bytecode": "0x6080604052604051620018923803806200189283398101604081905262000026916200022b565b838360036200003683826200034c565b5060046200004582826200034c565b5050506200005a82826200007160201b60201c565b50508151602090920191909120600655506200043f565b6001600160a01b038216620000cc5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620000e0919062000418565b90915550506001600160a01b038216600090815260208190526040812080548392906200010f90849062000418565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200018657600080fd5b81516001600160401b0380821115620001a357620001a36200015e565b604051601f8301601f19908116603f01168101908282118183101715620001ce57620001ce6200015e565b81604052838152602092508683858801011115620001eb57600080fd5b600091505b838210156200020f5785820183015181830184015290820190620001f0565b83821115620002215760008385830101525b9695505050505050565b600080600080608085870312156200024257600080fd5b84516001600160401b03808211156200025a57600080fd5b620002688883890162000174565b955060208701519150808211156200027f57600080fd5b506200028e8782880162000174565b604087015190945090506001600160a01b0381168114620002ae57600080fd5b6060959095015193969295505050565b600181811c90821680620002d357607f821691505b602082108103620002f457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200015957600081815260208120601f850160051c81016020861015620003235750805b601f850160051c820191505b8181101562000344578281556001016200032f565b505050505050565b81516001600160401b038111156200036857620003686200015e565b6200038081620003798454620002be565b84620002fa565b602080601f831160018114620003b857600084156200039f5750858301515b600019600386901b1c1916600185901b17855562000344565b600085815260208120601f198616915b82811015620003e957888601518255948401946001909101908401620003c8565b5085821015620004085787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156200043a57634e487b7160e01b600052601160045260246000fd5b500190565b611443806200044f6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806340c10f19116100e35780639e4e73181161008c578063c473af3311610066578063c473af33146103d6578063d505accf146103fd578063dd62ed3e1461041057600080fd5b80639e4e731814610389578063a457c2d7146103b0578063a9059cbb146103c357600080fd5b806370a08231116100bd57806370a082311461032b5780637ecebe001461036157806395d89b411461038157600080fd5b806340c10f19146102f257806342966c681461030557806356189cb41461031857600080fd5b806323b872dd116101455780633408e4701161011f5780633408e4701461024c5780633644e5151461025257806339509351146102df57600080fd5b806323b872dd1461020357806330adf81f14610216578063313ce5671461023d57600080fd5b8063095ea7b311610176578063095ea7b3146101c357806318160ddd146101e6578063222f5be0146101ee57600080fd5b806304622c2e1461019257806306fdde03146101ae575b600080fd5b61019b60065481565b6040519081526020015b60405180910390f35b6101b6610456565b6040516101a59190611141565b6101d66101d13660046111dd565b6104e8565b60405190151581526020016101a5565b60025461019b565b6102016101fc366004611207565b610500565b005b6101d6610211366004611207565b610510565b61019b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b604051601281526020016101a5565b4661019b565b61019b6006546000907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f907fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc646604080516020810195909552840192909252606083015260808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6101d66102ed3660046111dd565b610534565b6102016103003660046111dd565b610580565b610201610313366004611243565b61058e565b610201610326366004611207565b61059b565b61019b61033936600461125c565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b61019b61036f36600461125c565b60056020526000908152604090205481565b6101b66105a6565b61019b7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc681565b6101d66103be3660046111dd565b6105b5565b6101d66103d13660046111dd565b610671565b61019b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61020161040b36600461127e565b61067f565b61019b61041e3660046112f1565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461046590611324565b80601f016020809104026020016040519081016040528092919081815260200182805461049190611324565b80156104de5780601f106104b3576101008083540402835291602001916104de565b820191906000526020600020905b8154815290600101906020018083116104c157829003601f168201915b5050505050905090565b6000336104f68185856107ac565b5060019392505050565b61050b83838361092b565b505050565b60003361051e858285610b92565b61052985858561092b565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104f6908290869061057b9087906113a6565b6107ac565b61058a8282610c49565b5050565b6105983382610d4f565b50565b61050b8383836107ac565b60606004805461046590611324565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156106645760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61052982868684036107ac565b6000336104f681858561092b565b428410156106cf5760405162461bcd60e51b815260206004820152601960248201527f48455a3a3a7065726d69743a20415554485f4558504952454400000000000000604482015260640161065b565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260056020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a919086610729836113be565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506107978882868686610f08565b6107a28888886107ac565b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166108345760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff82166108bd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff83166109b45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff8216610a3d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ad95760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610b1d9084906113a6565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610b8391815260200190565b60405180910390a35b50505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b8c5781811015610c3c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161065b565b610b8c84848484036107ac565b73ffffffffffffffffffffffffffffffffffffffff8216610cac5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161065b565b8060026000828254610cbe91906113a6565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610cf89084906113a6565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8216610dd85760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610e745760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610eb09084906113f6565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600654604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f602080830191909152818301939093527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528251808303909101815260c08201909252815191909201207f190100000000000000000000000000000000000000000000000000000000000060e083015260e2820181905261010282018690529060009061012201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015611054573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116158015906110cf57508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6107a25760405162461bcd60e51b815260206004820152602b60248201527f48455a3a3a5f76616c69646174655369676e6564446174613a20494e56414c4960448201527f445f5349474e4154555245000000000000000000000000000000000000000000606482015260840161065b565b600060208083528351808285015260005b8181101561116e57858101830151858201604001528201611152565b81811115611180576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111d857600080fd5b919050565b600080604083850312156111f057600080fd5b6111f9836111b4565b946020939093013593505050565b60008060006060848603121561121c57600080fd5b611225846111b4565b9250611233602085016111b4565b9150604084013590509250925092565b60006020828403121561125557600080fd5b5035919050565b60006020828403121561126e57600080fd5b611277826111b4565b9392505050565b600080600080600080600060e0888a03121561129957600080fd5b6112a2886111b4565b96506112b0602089016111b4565b95506040880135945060608801359350608088013560ff811681146112d457600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561130457600080fd5b61130d836111b4565b915061131b602084016111b4565b90509250929050565b600181811c9082168061133857607f821691505b602082108103611371577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113b9576113b9611377565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036113ef576113ef611377565b5060010190565b60008282101561140857611408611377565b50039056fea2646970667358221220fca20729a90e81ceeeaa5285d72846fd512c992192630ec1c849572ca45c3ec264736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061018d5760003560e01c806340c10f19116100e35780639e4e73181161008c578063c473af3311610066578063c473af33146103d6578063d505accf146103fd578063dd62ed3e1461041057600080fd5b80639e4e731814610389578063a457c2d7146103b0578063a9059cbb146103c357600080fd5b806370a08231116100bd57806370a082311461032b5780637ecebe001461036157806395d89b411461038157600080fd5b806340c10f19146102f257806342966c681461030557806356189cb41461031857600080fd5b806323b872dd116101455780633408e4701161011f5780633408e4701461024c5780633644e5151461025257806339509351146102df57600080fd5b806323b872dd1461020357806330adf81f14610216578063313ce5671461023d57600080fd5b8063095ea7b311610176578063095ea7b3146101c357806318160ddd146101e6578063222f5be0146101ee57600080fd5b806304622c2e1461019257806306fdde03146101ae575b600080fd5b61019b60065481565b6040519081526020015b60405180910390f35b6101b6610456565b6040516101a59190611141565b6101d66101d13660046111dd565b6104e8565b60405190151581526020016101a5565b60025461019b565b6102016101fc366004611207565b610500565b005b6101d6610211366004611207565b610510565b61019b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b604051601281526020016101a5565b4661019b565b61019b6006546000907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f907fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc646604080516020810195909552840192909252606083015260808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6101d66102ed3660046111dd565b610534565b6102016103003660046111dd565b610580565b610201610313366004611243565b61058e565b610201610326366004611207565b61059b565b61019b61033936600461125c565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b61019b61036f36600461125c565b60056020526000908152604090205481565b6101b66105a6565b61019b7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc681565b6101d66103be3660046111dd565b6105b5565b6101d66103d13660046111dd565b610671565b61019b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61020161040b36600461127e565b61067f565b61019b61041e3660046112f1565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461046590611324565b80601f016020809104026020016040519081016040528092919081815260200182805461049190611324565b80156104de5780601f106104b3576101008083540402835291602001916104de565b820191906000526020600020905b8154815290600101906020018083116104c157829003601f168201915b5050505050905090565b6000336104f68185856107ac565b5060019392505050565b61050b83838361092b565b505050565b60003361051e858285610b92565b61052985858561092b565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104f6908290869061057b9087906113a6565b6107ac565b61058a8282610c49565b5050565b6105983382610d4f565b50565b61050b8383836107ac565b60606004805461046590611324565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156106645760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61052982868684036107ac565b6000336104f681858561092b565b428410156106cf5760405162461bcd60e51b815260206004820152601960248201527f48455a3a3a7065726d69743a20415554485f4558504952454400000000000000604482015260640161065b565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260056020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a919086610729836113be565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506107978882868686610f08565b6107a28888886107ac565b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166108345760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff82166108bd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff83166109b45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff8216610a3d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ad95760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610b1d9084906113a6565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610b8391815260200190565b60405180910390a35b50505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b8c5781811015610c3c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161065b565b610b8c84848484036107ac565b73ffffffffffffffffffffffffffffffffffffffff8216610cac5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161065b565b8060026000828254610cbe91906113a6565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610cf89084906113a6565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8216610dd85760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610e745760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610eb09084906113f6565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600654604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f602080830191909152818301939093527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528251808303909101815260c08201909252815191909201207f190100000000000000000000000000000000000000000000000000000000000060e083015260e2820181905261010282018690529060009061012201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015611054573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116158015906110cf57508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6107a25760405162461bcd60e51b815260206004820152602b60248201527f48455a3a3a5f76616c69646174655369676e6564446174613a20494e56414c4960448201527f445f5349474e4154555245000000000000000000000000000000000000000000606482015260840161065b565b600060208083528351808285015260005b8181101561116e57858101830151858201604001528201611152565b81811115611180576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111d857600080fd5b919050565b600080604083850312156111f057600080fd5b6111f9836111b4565b946020939093013593505050565b60008060006060848603121561121c57600080fd5b611225846111b4565b9250611233602085016111b4565b9150604084013590509250925092565b60006020828403121561125557600080fd5b5035919050565b60006020828403121561126e57600080fd5b611277826111b4565b9392505050565b600080600080600080600060e0888a03121561129957600080fd5b6112a2886111b4565b96506112b0602089016111b4565b95506040880135945060608801359350608088013560ff811681146112d457600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561130457600080fd5b61130d836111b4565b915061131b602084016111b4565b90509250929050565b600181811c9082168061133857607f821691505b602082108103611371577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113b9576113b9611377565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036113ef576113ef611377565b5060010190565b60008282101561140857611408611377565b50039056fea2646970667358221220fca20729a90e81ceeeaa5285d72846fd512c992192630ec1c849572ca45c3ec264736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/GlobalExitRootManager.json b/compiled-contracts/GlobalExitRootManager.json index d86f154f7..4338fecb3 100644 --- a/compiled-contracts/GlobalExitRootManager.json +++ b/compiled-contracts/GlobalExitRootManager.json @@ -151,8 +151,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506105cf806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461017857600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610524565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610524565b610198565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e366004610566565b610343565b6005546101539073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100a0565b6004546101539073ffffffffffffffffffffffffffffffffffffffff1681565b60055473ffffffffffffffffffffffffffffffffffffffff163314806101d5575060045473ffffffffffffffffffffffffffffffffffffffff1633145b610266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b60055473ffffffffffffffffffffffffffffffffffffffff16330361028b5760018190555b60045473ffffffffffffffffffffffffffffffffffffffff1633036102b05760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036103105760008181526003602052604090204290555b6001546002546040517f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce390600090a35050565b600054610100900460ff16158080156103635750600054600160ff909116105b8061037d5750303b15801561037d575060005460ff166001145b610409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161025d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561046757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6005805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556004805492851692909116919091179055801561051f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561053657600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461056157600080fd5b919050565b6000806040838503121561057957600080fd5b6105828361053d565b91506105906020840161053d565b9050925092905056fea2646970667358221220616596d3022a715405ca5d84c007e9e9a4ab050c3f523745545b68758c05550164736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461017857600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610524565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610524565b610198565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e366004610566565b610343565b6005546101539073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100a0565b6004546101539073ffffffffffffffffffffffffffffffffffffffff1681565b60055473ffffffffffffffffffffffffffffffffffffffff163314806101d5575060045473ffffffffffffffffffffffffffffffffffffffff1633145b610266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b60055473ffffffffffffffffffffffffffffffffffffffff16330361028b5760018190555b60045473ffffffffffffffffffffffffffffffffffffffff1633036102b05760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036103105760008181526003602052604090204290555b6001546002546040517f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce390600090a35050565b600054610100900460ff16158080156103635750600054600160ff909116105b8061037d5750303b15801561037d575060005460ff166001145b610409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161025d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561046757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6005805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556004805492851692909116919091179055801561051f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561053657600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461056157600080fd5b919050565b6000806040838503121561057957600080fd5b6105828361053d565b91506105906020840161053d565b9050925092905056fea2646970667358221220616596d3022a715405ca5d84c007e9e9a4ab050c3f523745545b68758c05550164736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506105ce806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461017857600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610523565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610523565b610198565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e366004610565565b610342565b6005546101539073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100a0565b6004546101539073ffffffffffffffffffffffffffffffffffffffff1681565b60055473ffffffffffffffffffffffffffffffffffffffff163314806101d5575060045473ffffffffffffffffffffffffffffffffffffffff1633145b610266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b60055473ffffffffffffffffffffffffffffffffffffffff16330361028b5760018190555b60045473ffffffffffffffffffffffffffffffffffffffff1633036102b05760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361033e57600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103625750600054600160ff909116105b8061037c5750303b15801561037c575060005460ff166001145b610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161025d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561046657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6005805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556004805492851692909116919091179055801561051e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561053557600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461056057600080fd5b919050565b6000806040838503121561057857600080fd5b6105818361053c565b915061058f6020840161053c565b9050925092905056fea2646970667358221220423e83d388a63ed7ac53287c741e2b54c7d39b0614d1fb089d983befe87d324564736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461017857600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610523565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610523565b610198565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e366004610565565b610342565b6005546101539073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100a0565b6004546101539073ffffffffffffffffffffffffffffffffffffffff1681565b60055473ffffffffffffffffffffffffffffffffffffffff163314806101d5575060045473ffffffffffffffffffffffffffffffffffffffff1633145b610266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b60055473ffffffffffffffffffffffffffffffffffffffff16330361028b5760018190555b60045473ffffffffffffffffffffffffffffffffffffffff1633036102b05760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361033e57600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103625750600054600160ff909116105b8061037c5750303b15801561037c575060005460ff166001145b610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161025d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561046657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6005805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556004805492851692909116919091179055801561051e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561053557600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461056057600080fd5b919050565b6000806040838503121561057857600080fd5b6105818361053c565b915061058f6020840161053c565b9050925092905056fea2646970667358221220423e83d388a63ed7ac53287c741e2b54c7d39b0614d1fb089d983befe87d324564736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/GlobalExitRootManagerL2.json b/compiled-contracts/GlobalExitRootManagerL2.json index 99a2851b1..f923b07aa 100644 --- a/compiled-contracts/GlobalExitRootManagerL2.json +++ b/compiled-contracts/GlobalExitRootManagerL2.json @@ -73,8 +73,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5060405161027938038061027983398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b6101e6806100936000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610197565b60006020819052908152604090205481565b6100a061009b366004610197565b6100e7565b005b6002546100c29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610064565b60025473ffffffffffffffffffffffffffffffffffffffff163314610192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a7570646174654560448201527f786974526f6f743a204f4e4c595f425249444745000000000000000000000000606482015260840160405180910390fd5b600155565b6000602082840312156101a957600080fd5b503591905056fea2646970667358221220b6ba072419f510d5d5b9a55d9605786898f58415125e7e2ac3f699371fda0cbc64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610197565b60006020819052908152604090205481565b6100a061009b366004610197565b6100e7565b005b6002546100c29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610064565b60025473ffffffffffffffffffffffffffffffffffffffff163314610192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a7570646174654560448201527f786974526f6f743a204f4e4c595f425249444745000000000000000000000000606482015260840160405180910390fd5b600155565b6000602082840312156101a957600080fd5b503591905056fea2646970667358221220b6ba072419f510d5d5b9a55d9605786898f58415125e7e2ac3f699371fda0cbc64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5060405161027938038061027983398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b6101e6806100936000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610197565b60006020819052908152604090205481565b6100a061009b366004610197565b6100e7565b005b6002546100c29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610064565b60025473ffffffffffffffffffffffffffffffffffffffff163314610192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a7570646174654560448201527f786974526f6f743a204f4e4c595f425249444745000000000000000000000000606482015260840160405180910390fd5b600155565b6000602082840312156101a957600080fd5b503591905056fea2646970667358221220016d470f475254214f39dcc99bd9d9791546fd270bad790bf7a87e10c2e92c0464736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610197565b60006020819052908152604090205481565b6100a061009b366004610197565b6100e7565b005b6002546100c29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610064565b60025473ffffffffffffffffffffffffffffffffffffffff163314610192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a7570646174654560448201527f786974526f6f743a204f4e4c595f425249444745000000000000000000000000606482015260840160405180910390fd5b600155565b6000602082840312156101a957600080fd5b503591905056fea2646970667358221220016d470f475254214f39dcc99bd9d9791546fd270bad790bf7a87e10c2e92c0464736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/GlobalExitRootManagerL2Mock.json b/compiled-contracts/GlobalExitRootManagerL2Mock.json index 9c182bd97..0d152dbb0 100644 --- a/compiled-contracts/GlobalExitRootManagerL2Mock.json +++ b/compiled-contracts/GlobalExitRootManagerL2Mock.json @@ -104,8 +104,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506040516102ef3803806102ef83398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b61025c806100936000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c806333d6247d1161005057806333d6247d146100c857806396e07459146100db578063a3c573eb146100fb57600080fd5b806301fd904414610077578063116c40c314610093578063257b3632146100a8575b600080fd5b61008060015481565b6040519081526020015b60405180910390f35b6100a66100a13660046101eb565b600155565b005b6100806100b63660046101eb565b60006020819052908152604090205481565b6100a66100d63660046101eb565b610140565b6100a66100e9366004610204565b60009182526020829052604090912055565b60025461011b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161008a565b60025473ffffffffffffffffffffffffffffffffffffffff1633146100a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a7570646174654560448201527f786974526f6f743a204f4e4c595f425249444745000000000000000000000000606482015260840160405180910390fd5b6000602082840312156101fd57600080fd5b5035919050565b6000806040838503121561021757600080fd5b5050803592602090910135915056fea2646970667358221220b5299fd37506b241168499cc73585b9402aa8d231b8c57b2c82dfee1d770466164736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100725760003560e01c806333d6247d1161005057806333d6247d146100c857806396e07459146100db578063a3c573eb146100fb57600080fd5b806301fd904414610077578063116c40c314610093578063257b3632146100a8575b600080fd5b61008060015481565b6040519081526020015b60405180910390f35b6100a66100a13660046101eb565b600155565b005b6100806100b63660046101eb565b60006020819052908152604090205481565b6100a66100d63660046101eb565b610140565b6100a66100e9366004610204565b60009182526020829052604090912055565b60025461011b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161008a565b60025473ffffffffffffffffffffffffffffffffffffffff1633146100a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a7570646174654560448201527f786974526f6f743a204f4e4c595f425249444745000000000000000000000000606482015260840160405180910390fd5b6000602082840312156101fd57600080fd5b5035919050565b6000806040838503121561021757600080fd5b5050803592602090910135915056fea2646970667358221220b5299fd37506b241168499cc73585b9402aa8d231b8c57b2c82dfee1d770466164736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506040516102ef3803806102ef83398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b61025c806100936000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c806333d6247d1161005057806333d6247d146100c857806396e07459146100db578063a3c573eb146100fb57600080fd5b806301fd904414610077578063116c40c314610093578063257b3632146100a8575b600080fd5b61008060015481565b6040519081526020015b60405180910390f35b6100a66100a13660046101eb565b600155565b005b6100806100b63660046101eb565b60006020819052908152604090205481565b6100a66100d63660046101eb565b610140565b6100a66100e9366004610204565b60009182526020829052604090912055565b60025461011b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161008a565b60025473ffffffffffffffffffffffffffffffffffffffff1633146100a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a7570646174654560448201527f786974526f6f743a204f4e4c595f425249444745000000000000000000000000606482015260840160405180910390fd5b6000602082840312156101fd57600080fd5b5035919050565b6000806040838503121561021757600080fd5b5050803592602090910135915056fea2646970667358221220d2bef258c77ff9dd55a7e99fcc3d972c4394423f9643b3e5c0f7ae83e2da961864736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100725760003560e01c806333d6247d1161005057806333d6247d146100c857806396e07459146100db578063a3c573eb146100fb57600080fd5b806301fd904414610077578063116c40c314610093578063257b3632146100a8575b600080fd5b61008060015481565b6040519081526020015b60405180910390f35b6100a66100a13660046101eb565b600155565b005b6100806100b63660046101eb565b60006020819052908152604090205481565b6100a66100d63660046101eb565b610140565b6100a66100e9366004610204565b60009182526020829052604090912055565b60025461011b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161008a565b60025473ffffffffffffffffffffffffffffffffffffffff1633146100a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a7570646174654560448201527f786974526f6f743a204f4e4c595f425249444745000000000000000000000000606482015260840160405180910390fd5b6000602082840312156101fd57600080fd5b5035919050565b6000806040838503121561021757600080fd5b5050803592602090910135915056fea2646970667358221220d2bef258c77ff9dd55a7e99fcc3d972c4394423f9643b3e5c0f7ae83e2da961864736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/GlobalExitRootManagerMock.json b/compiled-contracts/GlobalExitRootManagerMock.json index c16f4aea2..2aaeb5173 100644 --- a/compiled-contracts/GlobalExitRootManagerMock.json +++ b/compiled-contracts/GlobalExitRootManagerMock.json @@ -180,8 +180,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5060405161086838038061086883398101604081905261002f916101bb565b6100398282610040565b50506101ee565b600054610100900460ff16158080156100605750600054600160ff909116105b8061008b57506100793061019060201b6105a41760201c565b15801561008b575060005460ff166001145b6100f25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015610115576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561018b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b80516001600160a01b03811681146101b657600080fd5b919050565b600080604083850312156101ce57600080fd5b6101d78361019f565b91506101e56020840161019f565b90509250929050565b61066b806101fd6000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c806333d6247d11610076578063485cc9551161005b578063485cc9551461014e5780635ec6a8df14610161578063a3c573eb146101a657600080fd5b806333d6247d146101025780633ed691ef1461011557600080fd5b806301fd9044146100a8578063051a9e28146100c4578063257b3632146100d9578063319cf735146100f9575b600080fd5b6100b160015481565b6040519081526020015b60405180910390f35b6100d76100d23660046105c0565b6101c6565b005b6100b16100e73660046105c0565b60036020526000908152604090205481565b6100b160025481565b6100d76101103660046105c0565b610218565b6100b160025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d761015c366004610602565b6103c3565b6005546101819073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100bb565b6004546101819073ffffffffffffffffffffffffffffffffffffffff1681565b806003600061020460025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b60055473ffffffffffffffffffffffffffffffffffffffff16331480610255575060045473ffffffffffffffffffffffffffffffffffffffff1633145b6102e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b60055473ffffffffffffffffffffffffffffffffffffffff16330361030b5760018190555b60045473ffffffffffffffffffffffffffffffffffffffff1633036103305760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036103905760008181526003602052604090204290555b6001546002546040517f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce390600090a35050565b600054610100900460ff16158080156103e35750600054600160ff909116105b806103fd5750303b1580156103fd575060005460ff166001145b610489576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016102dd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156104e757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6005805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556004805492851692909116919091179055801561059f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000602082840312156105d257600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146105fd57600080fd5b919050565b6000806040838503121561061557600080fd5b61061e836105d9565b915061062c602084016105d9565b9050925092905056fea2646970667358221220c20953716f47032c9608f2c9d1656cbadaf5e6708c4dfb96635026f6eb2f2b6764736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a35760003560e01c806333d6247d11610076578063485cc9551161005b578063485cc9551461014e5780635ec6a8df14610161578063a3c573eb146101a657600080fd5b806333d6247d146101025780633ed691ef1461011557600080fd5b806301fd9044146100a8578063051a9e28146100c4578063257b3632146100d9578063319cf735146100f9575b600080fd5b6100b160015481565b6040519081526020015b60405180910390f35b6100d76100d23660046105c0565b6101c6565b005b6100b16100e73660046105c0565b60036020526000908152604090205481565b6100b160025481565b6100d76101103660046105c0565b610218565b6100b160025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d761015c366004610602565b6103c3565b6005546101819073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100bb565b6004546101819073ffffffffffffffffffffffffffffffffffffffff1681565b806003600061020460025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b60055473ffffffffffffffffffffffffffffffffffffffff16331480610255575060045473ffffffffffffffffffffffffffffffffffffffff1633145b6102e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b60055473ffffffffffffffffffffffffffffffffffffffff16330361030b5760018190555b60045473ffffffffffffffffffffffffffffffffffffffff1633036103305760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036103905760008181526003602052604090204290555b6001546002546040517f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce390600090a35050565b600054610100900460ff16158080156103e35750600054600160ff909116105b806103fd5750303b1580156103fd575060005460ff166001145b610489576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016102dd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156104e757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6005805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556004805492851692909116919091179055801561059f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000602082840312156105d257600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146105fd57600080fd5b919050565b6000806040838503121561061557600080fd5b61061e836105d9565b915061062c602084016105d9565b9050925092905056fea2646970667358221220c20953716f47032c9608f2c9d1656cbadaf5e6708c4dfb96635026f6eb2f2b6764736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5060405161086738038061086783398101604081905261002f916101bb565b6100398282610040565b50506101ee565b600054610100900460ff16158080156100605750600054600160ff909116105b8061008b57506100793061019060201b6105a31760201c565b15801561008b575060005460ff166001145b6100f25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015610115576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561018b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b80516001600160a01b03811681146101b657600080fd5b919050565b600080604083850312156101ce57600080fd5b6101d78361019f565b91506101e56020840161019f565b90509250929050565b61066a806101fd6000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c806333d6247d11610076578063485cc9551161005b578063485cc9551461014e5780635ec6a8df14610161578063a3c573eb146101a657600080fd5b806333d6247d146101025780633ed691ef1461011557600080fd5b806301fd9044146100a8578063051a9e28146100c4578063257b3632146100d9578063319cf735146100f9575b600080fd5b6100b160015481565b6040519081526020015b60405180910390f35b6100d76100d23660046105bf565b6101c6565b005b6100b16100e73660046105bf565b60036020526000908152604090205481565b6100b160025481565b6100d76101103660046105bf565b610218565b6100b160025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d761015c366004610601565b6103c2565b6005546101819073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100bb565b6004546101819073ffffffffffffffffffffffffffffffffffffffff1681565b806003600061020460025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b60055473ffffffffffffffffffffffffffffffffffffffff16331480610255575060045473ffffffffffffffffffffffffffffffffffffffff1633145b6102e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b60055473ffffffffffffffffffffffffffffffffffffffff16330361030b5760018190555b60045473ffffffffffffffffffffffffffffffffffffffff1633036103305760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036103be57600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103e25750600054600160ff909116105b806103fc5750303b1580156103fc575060005460ff166001145b610488576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016102dd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156104e657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6005805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556004805492851692909116919091179055801561059e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000602082840312156105d157600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146105fc57600080fd5b919050565b6000806040838503121561061457600080fd5b61061d836105d8565b915061062b602084016105d8565b9050925092905056fea2646970667358221220555671f0d50a061db0af5627095739ecf0ab0b4036de759223f1070b30a96be464736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a35760003560e01c806333d6247d11610076578063485cc9551161005b578063485cc9551461014e5780635ec6a8df14610161578063a3c573eb146101a657600080fd5b806333d6247d146101025780633ed691ef1461011557600080fd5b806301fd9044146100a8578063051a9e28146100c4578063257b3632146100d9578063319cf735146100f9575b600080fd5b6100b160015481565b6040519081526020015b60405180910390f35b6100d76100d23660046105bf565b6101c6565b005b6100b16100e73660046105bf565b60036020526000908152604090205481565b6100b160025481565b6100d76101103660046105bf565b610218565b6100b160025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d761015c366004610601565b6103c2565b6005546101819073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100bb565b6004546101819073ffffffffffffffffffffffffffffffffffffffff1681565b806003600061020460025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b60055473ffffffffffffffffffffffffffffffffffffffff16331480610255575060045473ffffffffffffffffffffffffffffffffffffffff1633145b6102e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b60055473ffffffffffffffffffffffffffffffffffffffff16330361030b5760018190555b60045473ffffffffffffffffffffffffffffffffffffffff1633036103305760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036103be57600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103e25750600054600160ff909116105b806103fc5750303b1580156103fc575060005460ff166001145b610488576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016102dd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156104e657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6005805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556004805492851692909116919091179055801561059e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000602082840312156105d157600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146105fc57600080fd5b919050565b6000806040838503121561061457600080fd5b61061d836105d8565b915061062b602084016105d8565b9050925092905056fea2646970667358221220555671f0d50a061db0af5627095739ecf0ab0b4036de759223f1070b30a96be464736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/ProofOfEfficiency.json b/compiled-contracts/ProofOfEfficiency.json index 62dc2a516..865a8cc73 100644 --- a/compiled-contracts/ProofOfEfficiency.json +++ b/compiled-contracts/ProofOfEfficiency.json @@ -3,6 +3,18 @@ "contractName": "ProofOfEfficiency", "sourceName": "contracts/ProofOfEfficiency.sol", "abi": [ + { + "anonymous": false, + "inputs": [], + "name": "EmergencyStateActivated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "EmergencyStateDeactivated", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -66,19 +78,6 @@ "name": "OwnershipTransferred", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -143,11 +142,11 @@ { "indexed": false, "internalType": "address", - "name": "newTrustedSequencer", + "name": "newSecurityCouncil", "type": "address" } ], - "name": "SetTrustedSequencer", + "name": "SetSecurityCouncil", "type": "event" }, { @@ -155,12 +154,12 @@ "inputs": [ { "indexed": false, - "internalType": "string", - "name": "newTrustedSequencerURL", - "type": "string" + "internalType": "address", + "name": "newTrustedSequencer", + "type": "address" } ], - "name": "SetTrustedSequencerURL", + "name": "SetTrustedSequencer", "type": "event" }, { @@ -168,12 +167,12 @@ "inputs": [ { "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" + "internalType": "string", + "name": "newTrustedSequencerURL", + "type": "string" } ], - "name": "Unpaused", + "name": "SetTrustedSequencerURL", "type": "event" }, { @@ -480,6 +479,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "isEmergencyState", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "lastBatchSequenced", @@ -584,19 +596,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -770,6 +769,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "newSecurityCouncil", + "type": "address" + } + ], + "name": "setSecurityCouncil", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -879,8 +891,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50614869806100206000396000f3fe608060405234801561001057600080fd5b50600436106102ad5760003560e01c80638da5cb5b1161017b578063cfa8ed47116100d8578063e7a7ed021161008c578063eaeb077b11610071578063eaeb077b1461064e578063f2fde38b14610661578063f75527611461067457600080fd5b8063e7a7ed02146105fe578063e8bf92ed1461062e57600080fd5b8063d8d1091b116100bd578063d8d1091b146105b6578063d8f54db0146105c9578063dbc16976146105f657600080fd5b8063cfa8ed471461056a578063d02103ca1461059657600080fd5b8063b02286c01161012f578063b6b0b09711610114578063b6b0b09714610524578063c89e42df14610544578063ca8103661461055757600080fd5b8063b02286c0146104fb578063b4d63f581461050457600080fd5b8063a3c573eb11610160578063a3c573eb146104bd578063ab9fc5ef146104dd578063adc879e9146104e757600080fd5b80638da5cb5b1461049757806399f5634e146104b557600080fd5b806355b925e611610229578063715018a6116101dd57806379847057116101c257806379847057146104685780637fcb3653146104705780638c4a0af71461048457600080fd5b8063715018a61461044d5780637152facf1461045557600080fd5b80636766f09d1161020e5780636766f09d146104075780636b8616ce1461041a5780636ff512cc1461043a57600080fd5b806355b925e6146103dd5780635c975abb146103f057600080fd5b80633c158267116102805780634560526711610265578063456052671461037f5780635392c5e0146103a7578063542028d5146103d557600080fd5b80633c1582671461034c578063423fa8561461035f57600080fd5b8063107bf28c146102b257806319d8ac61146102d05780632072f6c5146102fd57806327eb6c0f14610307575b600080fd5b6102ba610683565b6040516102c79190613cca565b60405180910390f35b609a546102e49067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102c7565b610305610711565b005b60a2546103279073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102c7565b61030561035a366004613e76565b610723565b609a546102e49068010000000000000000900467ffffffffffffffff1681565b609a546102e490700100000000000000000000000000000000900467ffffffffffffffff1681565b6103c76103b5366004613fab565b609d6020526000908152604090205481565b6040519081526020016102c7565b6102ba611057565b6103056103eb366004613fdd565b611064565b60655460ff165b60405190151581526020016102c7565b610305610415366004613fdd565b61152d565b6103c7610428366004613fab565b60986020526000908152604090205481565b61030561044836600461408d565b611b63565b610305611c9e565b6102ba6104633660046140aa565b611cb0565b6103c7611f1a565b609b546102e49067ffffffffffffffff1681565b610305610492366004614105565b611f94565b60335473ffffffffffffffffffffffffffffffffffffffff16610327565b6103c76120c8565b60a3546103279073ffffffffffffffffffffffffffffffffffffffff1681565b6102e462093a8081565b60a0546102e49067ffffffffffffffff1681565b6103c761ea6081565b6103c7610512366004613fab565b60996020526000908152604090205481565b6097546103279073ffffffffffffffffffffffffffffffffffffffff1681565b610305610552366004614122565b6121f5565b61030561056536600461415f565b6122e4565b609b546103279068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b609c546103279073ffffffffffffffffffffffffffffffffffffffff1681565b6103056105c4366004614243565b612625565b609b546103f7907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610305612cd3565b609a546102e4907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b609e546103279073ffffffffffffffffffffffffffffffffffffffff1681565b61030561065c366004614354565b612d82565b61030561066f36600461408d565b613252565b6103c767016345785d8a000081565b60a1805461069090614399565b80601f01602080910402602001604051908101604052809291908181526020018280546106bc90614399565b80156107095780601f106106de57610100808354040283529160200191610709565b820191906000526020600020905b8154815290600101906020018083116106ec57829003601f168201915b505050505081565b610719613309565b61072161338a565b565b61072b613410565b609b5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146107e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b8051609a5467ffffffffffffffff680100000000000000008204811660008181526099602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610e3357600087828151811061084b5761084b6143ec565b602002602001015190506000816060015167ffffffffffffffff161115610ab657836108768161444a565b9450506000816000015180519060200120826020015183606001516040516020016108d993929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff88166000908152609890935291205490915081146109de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107da565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610ab0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016107da565b50610c84565b60208101511580610b655750609c5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610b1f9160040190815260200190565b6020604051808303816000875af1158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b629190614471565b15155b610bf1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016107da565b80515161ea6011610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016107da565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610cba575042816040015167ffffffffffffffff1611155b610d6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016107da565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610e159061444a565b95505080604001519550508080610e2b9061448a565b91505061082f565b50609a5467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610ef0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016107da565b609a54600090610f1e90700100000000000000000000000000000000900467ffffffffffffffff16846144c2565b610f329067ffffffffffffffff16876144eb565b609a805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152609960205260409020839055905061100a3330610fe98467016345785d8a0000614502565b60975473ffffffffffffffffffffffffffffffffffffffff1692919061347d565b609a546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b609f805461069090614399565b61106c613410565b609b5467ffffffffffffffff9081169088161115611132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016107da565b609b5467ffffffffffffffff908116908716116111f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016107da565b600061120588888888611cb0565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161123a919061453f565b602060405180830381855afa158015611257573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061127a9190614471565b611284919061458a565b609e546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916112ee918991899189919060040161459e565b602060405180830381865afa15801561130b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132f9190614618565b6113bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016107da565b609b546114149033906113d89067ffffffffffffffff168b6144c2565b67ffffffffffffffff166113ea6120c8565b6113f49190614502565b60975473ffffffffffffffffffffffffffffffffffffffff169190613559565b609b80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152609d602052604090819020879055609c5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b1580156114c957600080fd5b505af11580156114dd573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b8567ffffffffffffffff168767ffffffffffffffff16106115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e65774261746368206d75737420626520626960648201527f67676572207468616e20696e69744e756d426174636800000000000000000000608482015260a4016107da565b609b5467ffffffffffffffff90811690871611156116bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d4261746368206d757374206265206c657360648201527f73207468616e206c617374566572696669656442617463680000000000000000608482015260a4016107da565b67ffffffffffffffff871615806116eb575067ffffffffffffffff87166000908152609d602052604090205415155b61179d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d426174636820737461746520726f6f742060648201527f646f6573206e6f74206578697374000000000000000000000000000000000000608482015260a4016107da565b67ffffffffffffffff86166000908152609d6020526040902054611869576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e6577426174636820737461746520726f6f7460648201527f20646f6573206e6f742065786973740000000000000000000000000000000000608482015260a4016107da565b600061187788888888611cb0565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516118ac919061453f565b602060405180830381855afa1580156118c9573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906118ec9190614471565b6118f6919061458a565b609e546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611960918991899189919060040161459e565b602060405180830381865afa15801561197d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a19190614618565b611a2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20494e56414c49445f50524f4f46000000000000000000000060648201526084016107da565b67ffffffffffffffff88166000908152609d6020526040902054869003611afc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2073746f72656420726f6f74206d757374206265206469666660648201527f6572656e74207468616e206e657720737461746520726f6f7400000000000000608482015260a4016107da565b67ffffffffffffffff88166000908152609d60209081526040918290205482519081529081018890527fe579d6d18f02941e1d0f59bff70f1b2c894edc991badab38343786df2846fe55910160405180910390a1611b5861338a565b505050505050505050565b609b5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611c16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107da565b609b80547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b611ca6613309565b61072160006135b4565b67ffffffffffffffff808516600081815260996020526040808220549387168252902054606092911580611ce357508115155b611d95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107da565b80611e48576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107da565b67ffffffffffffffff87166000908152609d60209081526040918290205460a05492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b609a5460009067ffffffffffffffff7001000000000000000000000000000000008204811691611f69917801000000000000000000000000000000000000000000000000909104166001614635565b611f7391906144c2565b611f8f9067ffffffffffffffff16670de0b6b3a7640000614502565b905090565b609b5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107da565b609b80548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690611c9390831515815260200190565b6097546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829173ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa15801561213b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215f9190614471565b609b54609a5491925060009167ffffffffffffffff918216916801000000000000000082048116916121c491700100000000000000000000000000000000820481169178010000000000000000000000000000000000000000000000009004166144c2565b6121ce9190614635565b6121d891906144c2565b67ffffffffffffffff1690506121ee8183614661565b9250505090565b609b5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146122a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107da565b609f6122b482826146c3565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051611c939190613cca565b600054610100900460ff16158080156123045750600054600160ff909116105b8061231e5750303b15801561231e575060005460ff166001145b6123aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107da565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561240857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b609c80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8e8116919091179092556097805482168d8416179055609e80549091168b831617905560008052609d6020527fc5dc36ae4e7617e4c4d23ddfcde33c79e9ed64c300aed766a9288a6b9b31f63d899055609b80547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928a16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000088151502179055609f61252386826146c3565b5060a080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861617905560a161256484826146c3565b5060a380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556125ad61362b565b6125b56136cb565b801561261857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b61262d613410565b609b547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461270a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107da565b8051806127bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107da565b609a5467ffffffffffffffff7801000000000000000000000000000000000000000000000000820481169161280a9184917001000000000000000000000000000000009004166147dd565b1115612898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016107da565b609a5467ffffffffffffffff680100000000000000008204811660008181526099602052604081205491937001000000000000000000000000000000009004909216915b84811015612c035760008682815181106128f8576128f86143ec565b60200260200101519050838061290d9061444a565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260989093529120549091508114612a66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016107da565b612a716001886144eb565b8303612b49574262093a808360400151612a8b9190614635565b67ffffffffffffffff161115612b49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016107da565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612beb9061444a565b96505050508080612bfb9061448a565b9150506128dc565b50609a80544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260996020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60a25473ffffffffffffffffffffffffffffffffffffffff163314612d7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016107da565b61072161378c565b612d8a613410565b609b547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612e67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107da565b6000612e71611f1a565b905081811115612f03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016107da565b61ea60835110612f95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016107da565b609754612fba9073ffffffffffffffffffffffffffffffffffffffff1633308461347d565b609c54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa15801561302a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061304e9190614471565b609a8054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff169060186130888361444a565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161310193929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181529181528151602092830120609a547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260989093529120553233036131ef57609a54604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261324c565b609a60189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613243939291906147f5565b60405180910390a25b50505050565b61325a613309565b73ffffffffffffffffffffffffffffffffffffffff81166132fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107da565b613306816135b4565b50565b60335473ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107da565b6133926137fe565b60a360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156133fc57600080fd5b505af115801561324c573d6000803e3d6000fd5b60655460ff1615610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016107da565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261324c9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613883565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526135af9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016134d7565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166136c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107da565b610721336135b4565b600054610100900460ff16613762576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107da565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b61379461398f565b60a360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156133fc57600080fd5b613806613410565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586138593390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60006138e5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166139e69092919063ffffffff16565b8051909150156135af57808060200190518101906139039190614618565b6135af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107da565b6139976139ff565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33613859565b60606139f58484600085613a6b565b90505b9392505050565b60655460ff16610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016107da565b606082471015613afd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016107da565b73ffffffffffffffffffffffffffffffffffffffff85163b613b7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107da565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613ba4919061453f565b60006040518083038185875af1925050503d8060008114613be1576040519150601f19603f3d011682016040523d82523d6000602084013e613be6565b606091505b5091509150613bf6828286613c01565b979650505050505050565b60608315613c105750816139f8565b825115613c205782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107da9190613cca565b60005b83811015613c6f578181015183820152602001613c57565b8381111561324c5750506000910152565b60008151808452613c98816020860160208601613c54565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006139f86020830184613c80565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613d2f57613d2f613cdd565b60405290565b6040516060810167ffffffffffffffff81118282101715613d2f57613d2f613cdd565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613d9f57613d9f613cdd565b604052919050565b600067ffffffffffffffff821115613dc157613dc1613cdd565b5060051b60200190565b600082601f830112613ddc57600080fd5b813567ffffffffffffffff811115613df657613df6613cdd565b613e2760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613d58565b818152846020838601011115613e3c57600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613e7157600080fd5b919050565b60006020808385031215613e8957600080fd5b823567ffffffffffffffff80821115613ea157600080fd5b818501915085601f830112613eb557600080fd5b8135613ec8613ec382613da7565b613d58565b81815260059190911b83018401908481019088831115613ee757600080fd5b8585015b83811015613f9e57803585811115613f035760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001811315613f395760008081fd5b613f41613d0c565b8983013588811115613f535760008081fd5b613f618e8c83870101613dcb565b8252506040808401358b8301526060613f7b818601613e59565b82840152613f8a848601613e59565b908301525085525050918601918601613eeb565b5098975050505050505050565b600060208284031215613fbd57600080fd5b6139f882613e59565b8060408101831015613fd757600080fd5b92915050565b6000806000806000806000610180888a031215613ff957600080fd5b61400288613e59565b965061401060208901613e59565b9550604088013594506060880135935061402d8960808a01613fc6565b925061014088018981111561404157600080fd5b60c0890192506140518a82613fc6565b91505092959891949750929550565b73ffffffffffffffffffffffffffffffffffffffff8116811461330657600080fd5b8035613e7181614060565b60006020828403121561409f57600080fd5b81356139f881614060565b600080600080608085870312156140c057600080fd5b6140c985613e59565b93506140d760208601613e59565b93969395505050506040820135916060013590565b801515811461330657600080fd5b8035613e71816140ec565b60006020828403121561411757600080fd5b81356139f8816140ec565b60006020828403121561413457600080fd5b813567ffffffffffffffff81111561414b57600080fd5b61415784828501613dcb565b949350505050565b6000806000806000806000806000806101408b8d03121561417f57600080fd5b6141888b614082565b995061419660208c01614082565b98506141a460408c01614082565b975060608b013596506141b960808c01614082565b95506141c760a08c016140fa565b945060c08b013567ffffffffffffffff808211156141e457600080fd5b6141f08e838f01613dcb565b95506141fe60e08e01613e59565b94506101008d013591508082111561421557600080fd5b506142228d828e01613dcb565b9250506142326101208c01614082565b90509295989b9194979a5092959850565b6000602080838503121561425657600080fd5b823567ffffffffffffffff8082111561426e57600080fd5b818501915085601f83011261428257600080fd5b8135614290613ec382613da7565b81815260059190911b830184019084810190888311156142af57600080fd5b8585015b83811015613f9e578035858111156142cb5760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018113156143015760008081fd5b614309613d35565b898301358881111561431b5760008081fd5b6143298e8c83870101613dcb565b8252506040808401358b830152614341838501613e59565b90820152855250509186019186016142b3565b6000806040838503121561436757600080fd5b823567ffffffffffffffff81111561437e57600080fd5b61438a85828601613dcb565b95602094909401359450505050565b600181811c908216806143ad57607f821691505b6020821081036143e6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036144675761446761441b565b6001019392505050565b60006020828403121561448357600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036144bb576144bb61441b565b5060010190565b600067ffffffffffffffff838116908316818110156144e3576144e361441b565b039392505050565b6000828210156144fd576144fd61441b565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561453a5761453a61441b565b500290565b60008251614551818460208701613c54565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826145995761459961455b565b500690565b61012081016040808784376000838201818152879190815b60028110156145d6578484833790840182815292840192906001016145b6565b5050828760c0870137610100850181815286935091505b600181101561460c5782518252602092830192909101906001016145ed565b50505095945050505050565b60006020828403121561462a57600080fd5b81516139f8816140ec565b600067ffffffffffffffff8083168185168083038211156146585761465861441b565b01949350505050565b6000826146705761467061455b565b500490565b601f8211156135af57600081815260208120601f850160051c8101602086101561469c5750805b601f850160051c820191505b818110156146bb578281556001016146a8565b505050505050565b815167ffffffffffffffff8111156146dd576146dd613cdd565b6146f1816146eb8454614399565b84614675565b602080601f831160018114614744576000841561470e5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556146bb565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561479157888601518255948401946001909101908401614772565b50858210156147cd57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156147f0576147f061441b565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff8316602082015260606040820152600061482a6060830184613c80565b9594505050505056fea2646970667358221220a53b562b076cd0253795eb85a552ed26fb2bfc0997144bffb51a13e0f4a780c564736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102ad5760003560e01c80638da5cb5b1161017b578063cfa8ed47116100d8578063e7a7ed021161008c578063eaeb077b11610071578063eaeb077b1461064e578063f2fde38b14610661578063f75527611461067457600080fd5b8063e7a7ed02146105fe578063e8bf92ed1461062e57600080fd5b8063d8d1091b116100bd578063d8d1091b146105b6578063d8f54db0146105c9578063dbc16976146105f657600080fd5b8063cfa8ed471461056a578063d02103ca1461059657600080fd5b8063b02286c01161012f578063b6b0b09711610114578063b6b0b09714610524578063c89e42df14610544578063ca8103661461055757600080fd5b8063b02286c0146104fb578063b4d63f581461050457600080fd5b8063a3c573eb11610160578063a3c573eb146104bd578063ab9fc5ef146104dd578063adc879e9146104e757600080fd5b80638da5cb5b1461049757806399f5634e146104b557600080fd5b806355b925e611610229578063715018a6116101dd57806379847057116101c257806379847057146104685780637fcb3653146104705780638c4a0af71461048457600080fd5b8063715018a61461044d5780637152facf1461045557600080fd5b80636766f09d1161020e5780636766f09d146104075780636b8616ce1461041a5780636ff512cc1461043a57600080fd5b806355b925e6146103dd5780635c975abb146103f057600080fd5b80633c158267116102805780634560526711610265578063456052671461037f5780635392c5e0146103a7578063542028d5146103d557600080fd5b80633c1582671461034c578063423fa8561461035f57600080fd5b8063107bf28c146102b257806319d8ac61146102d05780632072f6c5146102fd57806327eb6c0f14610307575b600080fd5b6102ba610683565b6040516102c79190613cca565b60405180910390f35b609a546102e49067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102c7565b610305610711565b005b60a2546103279073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102c7565b61030561035a366004613e76565b610723565b609a546102e49068010000000000000000900467ffffffffffffffff1681565b609a546102e490700100000000000000000000000000000000900467ffffffffffffffff1681565b6103c76103b5366004613fab565b609d6020526000908152604090205481565b6040519081526020016102c7565b6102ba611057565b6103056103eb366004613fdd565b611064565b60655460ff165b60405190151581526020016102c7565b610305610415366004613fdd565b61152d565b6103c7610428366004613fab565b60986020526000908152604090205481565b61030561044836600461408d565b611b63565b610305611c9e565b6102ba6104633660046140aa565b611cb0565b6103c7611f1a565b609b546102e49067ffffffffffffffff1681565b610305610492366004614105565b611f94565b60335473ffffffffffffffffffffffffffffffffffffffff16610327565b6103c76120c8565b60a3546103279073ffffffffffffffffffffffffffffffffffffffff1681565b6102e462093a8081565b60a0546102e49067ffffffffffffffff1681565b6103c761ea6081565b6103c7610512366004613fab565b60996020526000908152604090205481565b6097546103279073ffffffffffffffffffffffffffffffffffffffff1681565b610305610552366004614122565b6121f5565b61030561056536600461415f565b6122e4565b609b546103279068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b609c546103279073ffffffffffffffffffffffffffffffffffffffff1681565b6103056105c4366004614243565b612625565b609b546103f7907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610305612cd3565b609a546102e4907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b609e546103279073ffffffffffffffffffffffffffffffffffffffff1681565b61030561065c366004614354565b612d82565b61030561066f36600461408d565b613252565b6103c767016345785d8a000081565b60a1805461069090614399565b80601f01602080910402602001604051908101604052809291908181526020018280546106bc90614399565b80156107095780601f106106de57610100808354040283529160200191610709565b820191906000526020600020905b8154815290600101906020018083116106ec57829003601f168201915b505050505081565b610719613309565b61072161338a565b565b61072b613410565b609b5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146107e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b8051609a5467ffffffffffffffff680100000000000000008204811660008181526099602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610e3357600087828151811061084b5761084b6143ec565b602002602001015190506000816060015167ffffffffffffffff161115610ab657836108768161444a565b9450506000816000015180519060200120826020015183606001516040516020016108d993929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff88166000908152609890935291205490915081146109de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107da565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610ab0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016107da565b50610c84565b60208101511580610b655750609c5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610b1f9160040190815260200190565b6020604051808303816000875af1158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b629190614471565b15155b610bf1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016107da565b80515161ea6011610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016107da565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610cba575042816040015167ffffffffffffffff1611155b610d6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016107da565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610e159061444a565b95505080604001519550508080610e2b9061448a565b91505061082f565b50609a5467ffffffffffffffff780100000000000000000000000000000000000000000000000090910481169083161115610ef0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016107da565b609a54600090610f1e90700100000000000000000000000000000000900467ffffffffffffffff16846144c2565b610f329067ffffffffffffffff16876144eb565b609a805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152609960205260409020839055905061100a3330610fe98467016345785d8a0000614502565b60975473ffffffffffffffffffffffffffffffffffffffff1692919061347d565b609a546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b609f805461069090614399565b61106c613410565b609b5467ffffffffffffffff9081169088161115611132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016107da565b609b5467ffffffffffffffff908116908716116111f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016107da565b600061120588888888611cb0565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161123a919061453f565b602060405180830381855afa158015611257573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061127a9190614471565b611284919061458a565b609e546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916112ee918991899189919060040161459e565b602060405180830381865afa15801561130b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132f9190614618565b6113bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016107da565b609b546114149033906113d89067ffffffffffffffff168b6144c2565b67ffffffffffffffff166113ea6120c8565b6113f49190614502565b60975473ffffffffffffffffffffffffffffffffffffffff169190613559565b609b80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152609d602052604090819020879055609c5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b1580156114c957600080fd5b505af11580156114dd573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b8567ffffffffffffffff168767ffffffffffffffff16106115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e65774261746368206d75737420626520626960648201527f67676572207468616e20696e69744e756d426174636800000000000000000000608482015260a4016107da565b609b5467ffffffffffffffff90811690871611156116bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d4261746368206d757374206265206c657360648201527f73207468616e206c617374566572696669656442617463680000000000000000608482015260a4016107da565b67ffffffffffffffff871615806116eb575067ffffffffffffffff87166000908152609d602052604090205415155b61179d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d426174636820737461746520726f6f742060648201527f646f6573206e6f74206578697374000000000000000000000000000000000000608482015260a4016107da565b67ffffffffffffffff86166000908152609d6020526040902054611869576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e6577426174636820737461746520726f6f7460648201527f20646f6573206e6f742065786973740000000000000000000000000000000000608482015260a4016107da565b600061187788888888611cb0565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516118ac919061453f565b602060405180830381855afa1580156118c9573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906118ec9190614471565b6118f6919061458a565b609e546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611960918991899189919060040161459e565b602060405180830381865afa15801561197d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a19190614618565b611a2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20494e56414c49445f50524f4f46000000000000000000000060648201526084016107da565b67ffffffffffffffff88166000908152609d6020526040902054869003611afc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2073746f72656420726f6f74206d757374206265206469666660648201527f6572656e74207468616e206e657720737461746520726f6f7400000000000000608482015260a4016107da565b67ffffffffffffffff88166000908152609d60209081526040918290205482519081529081018890527fe579d6d18f02941e1d0f59bff70f1b2c894edc991badab38343786df2846fe55910160405180910390a1611b5861338a565b505050505050505050565b609b5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611c16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107da565b609b80547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b611ca6613309565b61072160006135b4565b67ffffffffffffffff808516600081815260996020526040808220549387168252902054606092911580611ce357508115155b611d95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107da565b80611e48576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107da565b67ffffffffffffffff87166000908152609d60209081526040918290205460a05492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b609a5460009067ffffffffffffffff7001000000000000000000000000000000008204811691611f69917801000000000000000000000000000000000000000000000000909104166001614635565b611f7391906144c2565b611f8f9067ffffffffffffffff16670de0b6b3a7640000614502565b905090565b609b5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107da565b609b80548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690611c9390831515815260200190565b6097546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829173ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa15801561213b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215f9190614471565b609b54609a5491925060009167ffffffffffffffff918216916801000000000000000082048116916121c491700100000000000000000000000000000000820481169178010000000000000000000000000000000000000000000000009004166144c2565b6121ce9190614635565b6121d891906144c2565b67ffffffffffffffff1690506121ee8183614661565b9250505090565b609b5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146122a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107da565b609f6122b482826146c3565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051611c939190613cca565b600054610100900460ff16158080156123045750600054600160ff909116105b8061231e5750303b15801561231e575060005460ff166001145b6123aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107da565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561240857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b609c80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8e8116919091179092556097805482168d8416179055609e80549091168b831617905560008052609d6020527fc5dc36ae4e7617e4c4d23ddfcde33c79e9ed64c300aed766a9288a6b9b31f63d899055609b80547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928a16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000088151502179055609f61252386826146c3565b5060a080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861617905560a161256484826146c3565b5060a380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556125ad61362b565b6125b56136cb565b801561261857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b61262d613410565b609b547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461270a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107da565b8051806127bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107da565b609a5467ffffffffffffffff7801000000000000000000000000000000000000000000000000820481169161280a9184917001000000000000000000000000000000009004166147dd565b1115612898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016107da565b609a5467ffffffffffffffff680100000000000000008204811660008181526099602052604081205491937001000000000000000000000000000000009004909216915b84811015612c035760008682815181106128f8576128f86143ec565b60200260200101519050838061290d9061444a565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260989093529120549091508114612a66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016107da565b612a716001886144eb565b8303612b49574262093a808360400151612a8b9190614635565b67ffffffffffffffff161115612b49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016107da565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612beb9061444a565b96505050508080612bfb9061448a565b9150506128dc565b50609a80544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260996020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60a25473ffffffffffffffffffffffffffffffffffffffff163314612d7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016107da565b61072161378c565b612d8a613410565b609b547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612e67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107da565b6000612e71611f1a565b905081811115612f03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016107da565b61ea60835110612f95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016107da565b609754612fba9073ffffffffffffffffffffffffffffffffffffffff1633308461347d565b609c54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa15801561302a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061304e9190614471565b609a8054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff169060186130888361444a565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161310193929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181529181528151602092830120609a547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260989093529120553233036131ef57609a54604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261324c565b609a60189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613243939291906147f5565b60405180910390a25b50505050565b61325a613309565b73ffffffffffffffffffffffffffffffffffffffff81166132fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107da565b613306816135b4565b50565b60335473ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107da565b6133926137fe565b60a360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156133fc57600080fd5b505af115801561324c573d6000803e3d6000fd5b60655460ff1615610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016107da565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261324c9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613883565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526135af9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016134d7565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166136c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107da565b610721336135b4565b600054610100900460ff16613762576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107da565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b61379461398f565b60a360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156133fc57600080fd5b613806613410565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586138593390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60006138e5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166139e69092919063ffffffff16565b8051909150156135af57808060200190518101906139039190614618565b6135af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107da565b6139976139ff565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33613859565b60606139f58484600085613a6b565b90505b9392505050565b60655460ff16610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016107da565b606082471015613afd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016107da565b73ffffffffffffffffffffffffffffffffffffffff85163b613b7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107da565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613ba4919061453f565b60006040518083038185875af1925050503d8060008114613be1576040519150601f19603f3d011682016040523d82523d6000602084013e613be6565b606091505b5091509150613bf6828286613c01565b979650505050505050565b60608315613c105750816139f8565b825115613c205782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107da9190613cca565b60005b83811015613c6f578181015183820152602001613c57565b8381111561324c5750506000910152565b60008151808452613c98816020860160208601613c54565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006139f86020830184613c80565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613d2f57613d2f613cdd565b60405290565b6040516060810167ffffffffffffffff81118282101715613d2f57613d2f613cdd565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613d9f57613d9f613cdd565b604052919050565b600067ffffffffffffffff821115613dc157613dc1613cdd565b5060051b60200190565b600082601f830112613ddc57600080fd5b813567ffffffffffffffff811115613df657613df6613cdd565b613e2760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613d58565b818152846020838601011115613e3c57600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613e7157600080fd5b919050565b60006020808385031215613e8957600080fd5b823567ffffffffffffffff80821115613ea157600080fd5b818501915085601f830112613eb557600080fd5b8135613ec8613ec382613da7565b613d58565b81815260059190911b83018401908481019088831115613ee757600080fd5b8585015b83811015613f9e57803585811115613f035760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001811315613f395760008081fd5b613f41613d0c565b8983013588811115613f535760008081fd5b613f618e8c83870101613dcb565b8252506040808401358b8301526060613f7b818601613e59565b82840152613f8a848601613e59565b908301525085525050918601918601613eeb565b5098975050505050505050565b600060208284031215613fbd57600080fd5b6139f882613e59565b8060408101831015613fd757600080fd5b92915050565b6000806000806000806000610180888a031215613ff957600080fd5b61400288613e59565b965061401060208901613e59565b9550604088013594506060880135935061402d8960808a01613fc6565b925061014088018981111561404157600080fd5b60c0890192506140518a82613fc6565b91505092959891949750929550565b73ffffffffffffffffffffffffffffffffffffffff8116811461330657600080fd5b8035613e7181614060565b60006020828403121561409f57600080fd5b81356139f881614060565b600080600080608085870312156140c057600080fd5b6140c985613e59565b93506140d760208601613e59565b93969395505050506040820135916060013590565b801515811461330657600080fd5b8035613e71816140ec565b60006020828403121561411757600080fd5b81356139f8816140ec565b60006020828403121561413457600080fd5b813567ffffffffffffffff81111561414b57600080fd5b61415784828501613dcb565b949350505050565b6000806000806000806000806000806101408b8d03121561417f57600080fd5b6141888b614082565b995061419660208c01614082565b98506141a460408c01614082565b975060608b013596506141b960808c01614082565b95506141c760a08c016140fa565b945060c08b013567ffffffffffffffff808211156141e457600080fd5b6141f08e838f01613dcb565b95506141fe60e08e01613e59565b94506101008d013591508082111561421557600080fd5b506142228d828e01613dcb565b9250506142326101208c01614082565b90509295989b9194979a5092959850565b6000602080838503121561425657600080fd5b823567ffffffffffffffff8082111561426e57600080fd5b818501915085601f83011261428257600080fd5b8135614290613ec382613da7565b81815260059190911b830184019084810190888311156142af57600080fd5b8585015b83811015613f9e578035858111156142cb5760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018113156143015760008081fd5b614309613d35565b898301358881111561431b5760008081fd5b6143298e8c83870101613dcb565b8252506040808401358b830152614341838501613e59565b90820152855250509186019186016142b3565b6000806040838503121561436757600080fd5b823567ffffffffffffffff81111561437e57600080fd5b61438a85828601613dcb565b95602094909401359450505050565b600181811c908216806143ad57607f821691505b6020821081036143e6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036144675761446761441b565b6001019392505050565b60006020828403121561448357600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036144bb576144bb61441b565b5060010190565b600067ffffffffffffffff838116908316818110156144e3576144e361441b565b039392505050565b6000828210156144fd576144fd61441b565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561453a5761453a61441b565b500290565b60008251614551818460208701613c54565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826145995761459961455b565b500690565b61012081016040808784376000838201818152879190815b60028110156145d6578484833790840182815292840192906001016145b6565b5050828760c0870137610100850181815286935091505b600181101561460c5782518252602092830192909101906001016145ed565b50505095945050505050565b60006020828403121561462a57600080fd5b81516139f8816140ec565b600067ffffffffffffffff8083168185168083038211156146585761465861441b565b01949350505050565b6000826146705761467061455b565b500490565b601f8211156135af57600081815260208120601f850160051c8101602086101561469c5750805b601f850160051c820191505b818110156146bb578281556001016146a8565b505050505050565b815167ffffffffffffffff8111156146dd576146dd613cdd565b6146f1816146eb8454614399565b84614675565b602080601f831160018114614744576000841561470e5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556146bb565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561479157888601518255948401946001909101908401614772565b50858210156147cd57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156147f0576147f061441b565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff8316602082015260606040820152600061482a6060830184613c80565b9594505050505056fea2646970667358221220a53b562b076cd0253795eb85a552ed26fb2bfc0997144bffb51a13e0f4a780c564736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5061483b806100206000396000f3fe608060405234801561001057600080fd5b50600436106102c85760003560e01c80638da5cb5b1161017b578063cfa8ed47116100d8578063e7a7ed021161008c578063eaeb077b11610071578063eaeb077b14610687578063f2fde38b1461069a578063f7552761146106ad57600080fd5b8063e7a7ed0214610637578063e8bf92ed1461066757600080fd5b8063d8d1091b116100bd578063d8d1091b146105ef578063d8f54db014610602578063dbc169761461062f57600080fd5b8063cfa8ed47146105a3578063d02103ca146105cf57600080fd5b8063b02286c01161012f578063b6b0b09711610114578063b6b0b09714610558578063c89e42df1461057d578063ca8103661461059057600080fd5b8063b02286c01461052f578063b4d63f581461053857600080fd5b8063a3c573eb11610160578063a3c573eb146104f1578063ab9fc5ef14610511578063adc879e91461051b57600080fd5b80638da5cb5b146104cb57806399f5634e146104e957600080fd5b8063542028d511610229578063715018a6116101dd57806379847057116101c2578063798470571461049c5780637fcb3653146104a45780638c4a0af7146104b857600080fd5b8063715018a6146104815780637152facf1461048957600080fd5b80636766f09d1161020e5780636766f09d1461043b5780636b8616ce1461044e5780636ff512cc1461046e57600080fd5b8063542028d51461042057806355b925e61461042857600080fd5b806327eb6c0f11610280578063423fa85611610265578063423fa856146103aa57806345605267146103ca5780635392c5e0146103f257600080fd5b806327eb6c0f146103525780633c1582671461039757600080fd5b806319d8ac61116102b157806319d8ac61146103085780631c1083e2146103355780632072f6c51461034a57600080fd5b8063107bf28c146102cd57806315064c96146102eb575b600080fd5b6102d56106bc565b6040516102e29190613d32565b60405180910390f35b6065546102f89060ff1681565b60405190151581526020016102e2565b60685461031c9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102e2565b610348610343366004613d77565b61074a565b005b610348610856565b6070546103729073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e2565b6103486103a5366004613eec565b610907565b60685461031c9068010000000000000000900467ffffffffffffffff1681565b60685461031c90700100000000000000000000000000000000900467ffffffffffffffff1681565b610412610400366004614003565b606b6020526000908152604090205481565b6040519081526020016102e2565b6102d56111fe565b610348610436366004614035565b61120b565b610348610449366004614035565b611722565b61041261045c366004614003565b60666020526000908152604090205481565b61034861047c366004613d77565b611d5b565b610348611e75565b6102d56104973660046140b8565b611e87565b6104126120bd565b60695461031c9067ffffffffffffffff1681565b6103486104c6366004614113565b612137565b60335473ffffffffffffffffffffffffffffffffffffffff16610372565b610412612251565b6071546103729073ffffffffffffffffffffffffffffffffffffffff1681565b61031c62093a8081565b606e5461031c9067ffffffffffffffff1681565b61041261ea6081565b610412610546366004614003565b60676020526000908152604090205481565b60655461037290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b61034861058b366004614130565b612382565b61034861059e36600461416d565b612457565b6069546103729068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103729073ffffffffffffffffffffffffffffffffffffffff1681565b6103486105fd366004614251565b61279a565b6069546102f8907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610348612e3f565b60685461031c907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103729073ffffffffffffffffffffffffffffffffffffffff1681565b610348610695366004614344565b612fcf565b6103486106a8366004613d77565b6134cf565b61041267016345785d8a000081565b606f80546106c990614389565b80601f01602080910402602001604051908101604052809291908181526020018280546106f590614389565b80156107425780601f1061071757610100808354040283529160200191610742565b820191906000526020600020905b81548152906001019060200180831161072557829003601f168201915b505050505081565b60705473ffffffffffffffffffffffffffffffffffffffff1633146107dc5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff16156108f55760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6108fd61356c565b6109056135d3565b565b60655460ff16156109a65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610a3f5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b805160685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610fef576000878281518110610aa757610aa76143dc565b602002602001015190506000816060015167ffffffffffffffff161115610cc05783610ad28161443a565b945050600081600001518051906020012082602001518360600151604051602001610b3593929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610c025760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610cba5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016107d3565b50610e5a565b60208101511580610d6f5750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610d299160040190815260200190565b6020604051808303816000875af1158015610d48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6c9190614461565b15155b610de15760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016107d3565b80515161ea6011610e5a5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016107d3565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610e90575042816040015167ffffffffffffffff1611155b610f285760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610fd19061443a565b95505080604001519550508080610fe79061447a565b915050610a8b565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156110925760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016107d3565b6068546000906110c090700100000000000000000000000000000000900467ffffffffffffffff16846144b2565b6110d49067ffffffffffffffff16876144db565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c1693909317939093179290921691909117909155600090815260676020526040902083905590506111b1333061118b8467016345785d8a00006144f2565b606554610100900473ffffffffffffffffffffffffffffffffffffffff1692919061365d565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d80546106c990614389565b60655460ff16156112aa5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695467ffffffffffffffff90811690881611156113565760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016107d3565b60695467ffffffffffffffff908116908716116114015760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016107d3565b600061140f88888888611e87565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051611444919061452f565b602060405180830381855afa158015611461573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906114849190614461565b61148e919061457a565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916114f8918991899189919060040161458e565b602060405180830381865afa158015611515573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115399190614608565b6115ab5760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016107d3565b6069546116099033906115c89067ffffffffffffffff168b6144b2565b67ffffffffffffffff166115da612251565b6115e491906144f2565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16919061371b565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b1580156116be57600080fd5b505af11580156116d2573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60655460ff16156117c15760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b8567ffffffffffffffff168767ffffffffffffffff16106118705760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e65774261746368206d75737420626520626960648201527f67676572207468616e20696e69744e756d426174636800000000000000000000608482015260a4016107d3565b60695467ffffffffffffffff908116908716111561191c5760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d4261746368206d757374206265206c657360648201527f73207468616e206c617374566572696669656442617463680000000000000000608482015260a4016107d3565b67ffffffffffffffff8716158061194b575067ffffffffffffffff87166000908152606b602052604090205415155b6119e35760405162461bcd60e51b815260206004820152604e60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d426174636820737461746520726f6f742060648201527f646f6573206e6f74206578697374000000000000000000000000000000000000608482015260a4016107d3565b67ffffffffffffffff86166000908152606b6020526040902054611a955760405162461bcd60e51b815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e6577426174636820737461746520726f6f7460648201527f20646f6573206e6f742065786973740000000000000000000000000000000000608482015260a4016107d3565b6000611aa388888888611e87565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051611ad8919061452f565b602060405180830381855afa158015611af5573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611b189190614461565b611b22919061457a565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611b8c918991899189919060040161458e565b602060405180830381865afa158015611ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcd9190614608565b611c3f5760405162461bcd60e51b815260206004820152603560248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20494e56414c49445f50524f4f46000000000000000000000060648201526084016107d3565b67ffffffffffffffff88166000908152606b6020526040902054869003611cf45760405162461bcd60e51b815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2073746f72656420726f6f74206d757374206265206469666660648201527f6572656e74207468616e206e657720737461746520726f6f7400000000000000608482015260a4016107d3565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527fe579d6d18f02941e1d0f59bff70f1b2c894edc991badab38343786df2846fe55910160405180910390a1611d506135d3565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611df45760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161084b565b611e7d61356c565b6109056000613776565b67ffffffffffffffff808516600081815260676020526040808220549387168252902054606092911580611eba57508115155b611f525760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b80611feb5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b60685460009067ffffffffffffffff700100000000000000000000000000000000820481169161210c917801000000000000000000000000000000000000000000000000909104166001614625565b61211691906144b2565b6121329067ffffffffffffffff16670de0b6b3a76400006144f2565b905090565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146121d05760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061084b90831515815260200190565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156122c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ec9190614461565b60695460685491925060009167ffffffffffffffff9182169168010000000000000000820481169161235191700100000000000000000000000000000000820481169178010000000000000000000000000000000000000000000000009004166144b2565b61235b9190614625565b61236591906144b2565b67ffffffffffffffff16905061237b8183614651565b9250505090565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461241b5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606d61242782826146b3565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161084b9190613d32565b600054610100900460ff16158080156124775750600054600160ff909116105b806124915750303b158015612491575060005460ff166001145b6125035760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107d3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561256157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8e811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008e851602179055606c80549091168b831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b899055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928a16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000088151502179055606d6126a086826146b3565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8616179055606f6126e184826146b3565b50607180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841617905561272a6137ed565b801561278d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b60655460ff16156128395760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146128fc5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b8051806129975760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60685467ffffffffffffffff780100000000000000000000000000000000000000000000000082048116916129e29184917001000000000000000000000000000000009004166147af565b1115612a565760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016107d3565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b84811015612d6f576000868281518110612ab657612ab66143dc565b602002602001015190508380612acb9061443a565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114612bec5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016107d3565b612bf76001886144db565b8303612cb5574262093a808360400151612c119190614625565b67ffffffffffffffff161115612cb55760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016107d3565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612d579061443a565b96505050508080612d679061447a565b915050612a9a565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff1615612eb85760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b60705473ffffffffffffffffffffffffffffffffffffffff163314612f455760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612faf57600080fd5b505af1158015612fc3573d6000803e3d6000fd5b50505050610905613873565b60655460ff161561306e5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146131315760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b600061313b6120bd565b9050818111156131b35760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016107d3565b61ea6083511061322b5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016107d3565b60655461325590610100900473ffffffffffffffffffffffffffffffffffffffff1633308461365d565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa1580156132c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132e99190614461565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff169060186133238361443a565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161339c93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000908152606690935291205532330361346c57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26134c9565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516134c0939291906147c7565b60405180910390a25b50505050565b6134d761356c565b73ffffffffffffffffffffffffffffffffffffffff81166135605760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107d3565b61356981613776565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109055760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561363d57600080fd5b505af1158015613651573d6000803e3d6000fd5b5050505061090561393f565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526134c99085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613a34565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526137719084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016136b7565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661386a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107d3565b61090533613776565b60655460ff16156138ec5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff16156139de5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6000613a96826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613b269092919063ffffffff16565b8051909150156137715780806020019051810190613ab49190614608565b6137715760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107d3565b6060613b358484600085613b3f565b90505b9392505050565b606082471015613bb75760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016107d3565b73ffffffffffffffffffffffffffffffffffffffff85163b613c1b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107d3565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c44919061452f565b60006040518083038185875af1925050503d8060008114613c81576040519150601f19603f3d011682016040523d82523d6000602084013e613c86565b606091505b5091509150613c96828286613ca1565b979650505050505050565b60608315613cb0575081613b38565b825115613cc05782518084602001fd5b8160405162461bcd60e51b81526004016107d39190613d32565b60005b83811015613cf5578181015183820152602001613cdd565b838111156134c95750506000910152565b60008151808452613d1e816020860160208601613cda565b601f01601f19169290920160200192915050565b602081526000613b386020830184613d06565b73ffffffffffffffffffffffffffffffffffffffff8116811461356957600080fd5b8035613d7281613d45565b919050565b600060208284031215613d8957600080fd5b8135613b3881613d45565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613de657613de6613d94565b60405290565b6040516060810167ffffffffffffffff81118282101715613de657613de6613d94565b604051601f8201601f1916810167ffffffffffffffff81118282101715613e3857613e38613d94565b604052919050565b600067ffffffffffffffff821115613e5a57613e5a613d94565b5060051b60200190565b600082601f830112613e7557600080fd5b813567ffffffffffffffff811115613e8f57613e8f613d94565b613ea26020601f19601f84011601613e0f565b818152846020838601011115613eb757600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613d7257600080fd5b60006020808385031215613eff57600080fd5b823567ffffffffffffffff80821115613f1757600080fd5b818501915085601f830112613f2b57600080fd5b8135613f3e613f3982613e40565b613e0f565b81815260059190911b83018401908481019088831115613f5d57600080fd5b8585015b83811015613ff657803585811115613f795760008081fd5b86016080818c03601f1901811315613f915760008081fd5b613f99613dc3565b8983013588811115613fab5760008081fd5b613fb98e8c83870101613e64565b8252506040808401358b8301526060613fd3818601613ed4565b82840152613fe2848601613ed4565b908301525085525050918601918601613f61565b5098975050505050505050565b60006020828403121561401557600080fd5b613b3882613ed4565b806040810183101561402f57600080fd5b92915050565b6000806000806000806000610180888a03121561405157600080fd5b61405a88613ed4565b965061406860208901613ed4565b955060408801359450606088013593506140858960808a0161401e565b925061014088018981111561409957600080fd5b60c0890192506140a98a8261401e565b91505092959891949750929550565b600080600080608085870312156140ce57600080fd5b6140d785613ed4565b93506140e560208601613ed4565b93969395505050506040820135916060013590565b801515811461356957600080fd5b8035613d72816140fa565b60006020828403121561412557600080fd5b8135613b38816140fa565b60006020828403121561414257600080fd5b813567ffffffffffffffff81111561415957600080fd5b61416584828501613e64565b949350505050565b6000806000806000806000806000806101408b8d03121561418d57600080fd5b6141968b613d67565b99506141a460208c01613d67565b98506141b260408c01613d67565b975060608b013596506141c760808c01613d67565b95506141d560a08c01614108565b945060c08b013567ffffffffffffffff808211156141f257600080fd5b6141fe8e838f01613e64565b955061420c60e08e01613ed4565b94506101008d013591508082111561422357600080fd5b506142308d828e01613e64565b9250506142406101208c01613d67565b90509295989b9194979a5092959850565b6000602080838503121561426457600080fd5b823567ffffffffffffffff8082111561427c57600080fd5b818501915085601f83011261429057600080fd5b813561429e613f3982613e40565b81815260059190911b830184019084810190888311156142bd57600080fd5b8585015b83811015613ff6578035858111156142d95760008081fd5b86016060818c03601f19018113156142f15760008081fd5b6142f9613dec565b898301358881111561430b5760008081fd5b6143198e8c83870101613e64565b8252506040808401358b830152614331838501613ed4565b90820152855250509186019186016142c1565b6000806040838503121561435757600080fd5b823567ffffffffffffffff81111561436e57600080fd5b61437a85828601613e64565b95602094909401359450505050565b600181811c9082168061439d57607f821691505b6020821081036143d6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036144575761445761440b565b6001019392505050565b60006020828403121561447357600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036144ab576144ab61440b565b5060010190565b600067ffffffffffffffff838116908316818110156144d3576144d361440b565b039392505050565b6000828210156144ed576144ed61440b565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561452a5761452a61440b565b500290565b60008251614541818460208701613cda565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826145895761458961454b565b500690565b61012081016040808784376000838201818152879190815b60028110156145c6578484833790840182815292840192906001016145a6565b5050828760c0870137610100850181815286935091505b60018110156145fc5782518252602092830192909101906001016145dd565b50505095945050505050565b60006020828403121561461a57600080fd5b8151613b38816140fa565b600067ffffffffffffffff8083168185168083038211156146485761464861440b565b01949350505050565b6000826146605761466061454b565b500490565b601f82111561377157600081815260208120601f850160051c8101602086101561468c5750805b601f850160051c820191505b818110156146ab57828155600101614698565b505050505050565b815167ffffffffffffffff8111156146cd576146cd613d94565b6146e1816146db8454614389565b84614665565b602080601f83116001811461473457600084156146fe5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556146ab565b600085815260208120601f198616915b8281101561476357888601518255948401946001909101908401614744565b508582101561479f57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156147c2576147c261440b565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006147fc6060830184613d06565b9594505050505056fea2646970667358221220459c0629eb0008b4daf59e555a322fe762cb05b1da8712377c085651a8bff70664736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102c85760003560e01c80638da5cb5b1161017b578063cfa8ed47116100d8578063e7a7ed021161008c578063eaeb077b11610071578063eaeb077b14610687578063f2fde38b1461069a578063f7552761146106ad57600080fd5b8063e7a7ed0214610637578063e8bf92ed1461066757600080fd5b8063d8d1091b116100bd578063d8d1091b146105ef578063d8f54db014610602578063dbc169761461062f57600080fd5b8063cfa8ed47146105a3578063d02103ca146105cf57600080fd5b8063b02286c01161012f578063b6b0b09711610114578063b6b0b09714610558578063c89e42df1461057d578063ca8103661461059057600080fd5b8063b02286c01461052f578063b4d63f581461053857600080fd5b8063a3c573eb11610160578063a3c573eb146104f1578063ab9fc5ef14610511578063adc879e91461051b57600080fd5b80638da5cb5b146104cb57806399f5634e146104e957600080fd5b8063542028d511610229578063715018a6116101dd57806379847057116101c2578063798470571461049c5780637fcb3653146104a45780638c4a0af7146104b857600080fd5b8063715018a6146104815780637152facf1461048957600080fd5b80636766f09d1161020e5780636766f09d1461043b5780636b8616ce1461044e5780636ff512cc1461046e57600080fd5b8063542028d51461042057806355b925e61461042857600080fd5b806327eb6c0f11610280578063423fa85611610265578063423fa856146103aa57806345605267146103ca5780635392c5e0146103f257600080fd5b806327eb6c0f146103525780633c1582671461039757600080fd5b806319d8ac61116102b157806319d8ac61146103085780631c1083e2146103355780632072f6c51461034a57600080fd5b8063107bf28c146102cd57806315064c96146102eb575b600080fd5b6102d56106bc565b6040516102e29190613d32565b60405180910390f35b6065546102f89060ff1681565b60405190151581526020016102e2565b60685461031c9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102e2565b610348610343366004613d77565b61074a565b005b610348610856565b6070546103729073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e2565b6103486103a5366004613eec565b610907565b60685461031c9068010000000000000000900467ffffffffffffffff1681565b60685461031c90700100000000000000000000000000000000900467ffffffffffffffff1681565b610412610400366004614003565b606b6020526000908152604090205481565b6040519081526020016102e2565b6102d56111fe565b610348610436366004614035565b61120b565b610348610449366004614035565b611722565b61041261045c366004614003565b60666020526000908152604090205481565b61034861047c366004613d77565b611d5b565b610348611e75565b6102d56104973660046140b8565b611e87565b6104126120bd565b60695461031c9067ffffffffffffffff1681565b6103486104c6366004614113565b612137565b60335473ffffffffffffffffffffffffffffffffffffffff16610372565b610412612251565b6071546103729073ffffffffffffffffffffffffffffffffffffffff1681565b61031c62093a8081565b606e5461031c9067ffffffffffffffff1681565b61041261ea6081565b610412610546366004614003565b60676020526000908152604090205481565b60655461037290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b61034861058b366004614130565b612382565b61034861059e36600461416d565b612457565b6069546103729068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103729073ffffffffffffffffffffffffffffffffffffffff1681565b6103486105fd366004614251565b61279a565b6069546102f8907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610348612e3f565b60685461031c907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103729073ffffffffffffffffffffffffffffffffffffffff1681565b610348610695366004614344565b612fcf565b6103486106a8366004613d77565b6134cf565b61041267016345785d8a000081565b606f80546106c990614389565b80601f01602080910402602001604051908101604052809291908181526020018280546106f590614389565b80156107425780601f1061071757610100808354040283529160200191610742565b820191906000526020600020905b81548152906001019060200180831161072557829003601f168201915b505050505081565b60705473ffffffffffffffffffffffffffffffffffffffff1633146107dc5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff16156108f55760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6108fd61356c565b6109056135d3565b565b60655460ff16156109a65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610a3f5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b805160685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610fef576000878281518110610aa757610aa76143dc565b602002602001015190506000816060015167ffffffffffffffff161115610cc05783610ad28161443a565b945050600081600001518051906020012082602001518360600151604051602001610b3593929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610c025760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610cba5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016107d3565b50610e5a565b60208101511580610d6f5750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610d299160040190815260200190565b6020604051808303816000875af1158015610d48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6c9190614461565b15155b610de15760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016107d3565b80515161ea6011610e5a5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016107d3565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610e90575042816040015167ffffffffffffffff1611155b610f285760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610fd19061443a565b95505080604001519550508080610fe79061447a565b915050610a8b565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156110925760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016107d3565b6068546000906110c090700100000000000000000000000000000000900467ffffffffffffffff16846144b2565b6110d49067ffffffffffffffff16876144db565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c1693909317939093179290921691909117909155600090815260676020526040902083905590506111b1333061118b8467016345785d8a00006144f2565b606554610100900473ffffffffffffffffffffffffffffffffffffffff1692919061365d565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d80546106c990614389565b60655460ff16156112aa5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695467ffffffffffffffff90811690881611156113565760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016107d3565b60695467ffffffffffffffff908116908716116114015760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016107d3565b600061140f88888888611e87565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051611444919061452f565b602060405180830381855afa158015611461573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906114849190614461565b61148e919061457a565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916114f8918991899189919060040161458e565b602060405180830381865afa158015611515573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115399190614608565b6115ab5760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016107d3565b6069546116099033906115c89067ffffffffffffffff168b6144b2565b67ffffffffffffffff166115da612251565b6115e491906144f2565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16919061371b565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b1580156116be57600080fd5b505af11580156116d2573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60655460ff16156117c15760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b8567ffffffffffffffff168767ffffffffffffffff16106118705760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e65774261746368206d75737420626520626960648201527f67676572207468616e20696e69744e756d426174636800000000000000000000608482015260a4016107d3565b60695467ffffffffffffffff908116908716111561191c5760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d4261746368206d757374206265206c657360648201527f73207468616e206c617374566572696669656442617463680000000000000000608482015260a4016107d3565b67ffffffffffffffff8716158061194b575067ffffffffffffffff87166000908152606b602052604090205415155b6119e35760405162461bcd60e51b815260206004820152604e60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d426174636820737461746520726f6f742060648201527f646f6573206e6f74206578697374000000000000000000000000000000000000608482015260a4016107d3565b67ffffffffffffffff86166000908152606b6020526040902054611a955760405162461bcd60e51b815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e6577426174636820737461746520726f6f7460648201527f20646f6573206e6f742065786973740000000000000000000000000000000000608482015260a4016107d3565b6000611aa388888888611e87565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051611ad8919061452f565b602060405180830381855afa158015611af5573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611b189190614461565b611b22919061457a565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611b8c918991899189919060040161458e565b602060405180830381865afa158015611ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcd9190614608565b611c3f5760405162461bcd60e51b815260206004820152603560248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20494e56414c49445f50524f4f46000000000000000000000060648201526084016107d3565b67ffffffffffffffff88166000908152606b6020526040902054869003611cf45760405162461bcd60e51b815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2073746f72656420726f6f74206d757374206265206469666660648201527f6572656e74207468616e206e657720737461746520726f6f7400000000000000608482015260a4016107d3565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527fe579d6d18f02941e1d0f59bff70f1b2c894edc991badab38343786df2846fe55910160405180910390a1611d506135d3565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611df45760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161084b565b611e7d61356c565b6109056000613776565b67ffffffffffffffff808516600081815260676020526040808220549387168252902054606092911580611eba57508115155b611f525760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b80611feb5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b60685460009067ffffffffffffffff700100000000000000000000000000000000820481169161210c917801000000000000000000000000000000000000000000000000909104166001614625565b61211691906144b2565b6121329067ffffffffffffffff16670de0b6b3a76400006144f2565b905090565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146121d05760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061084b90831515815260200190565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156122c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ec9190614461565b60695460685491925060009167ffffffffffffffff9182169168010000000000000000820481169161235191700100000000000000000000000000000000820481169178010000000000000000000000000000000000000000000000009004166144b2565b61235b9190614625565b61236591906144b2565b67ffffffffffffffff16905061237b8183614651565b9250505090565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461241b5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606d61242782826146b3565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161084b9190613d32565b600054610100900460ff16158080156124775750600054600160ff909116105b806124915750303b158015612491575060005460ff166001145b6125035760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107d3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561256157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8e811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008e851602179055606c80549091168b831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b899055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928a16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000088151502179055606d6126a086826146b3565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8616179055606f6126e184826146b3565b50607180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841617905561272a6137ed565b801561278d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b60655460ff16156128395760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146128fc5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b8051806129975760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60685467ffffffffffffffff780100000000000000000000000000000000000000000000000082048116916129e29184917001000000000000000000000000000000009004166147af565b1115612a565760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016107d3565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b84811015612d6f576000868281518110612ab657612ab66143dc565b602002602001015190508380612acb9061443a565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114612bec5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016107d3565b612bf76001886144db565b8303612cb5574262093a808360400151612c119190614625565b67ffffffffffffffff161115612cb55760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016107d3565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612d579061443a565b96505050508080612d679061447a565b915050612a9a565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff1615612eb85760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b60705473ffffffffffffffffffffffffffffffffffffffff163314612f455760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612faf57600080fd5b505af1158015612fc3573d6000803e3d6000fd5b50505050610905613873565b60655460ff161561306e5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146131315760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b600061313b6120bd565b9050818111156131b35760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016107d3565b61ea6083511061322b5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016107d3565b60655461325590610100900473ffffffffffffffffffffffffffffffffffffffff1633308461365d565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa1580156132c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132e99190614461565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff169060186133238361443a565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161339c93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000908152606690935291205532330361346c57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26134c9565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516134c0939291906147c7565b60405180910390a25b50505050565b6134d761356c565b73ffffffffffffffffffffffffffffffffffffffff81166135605760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107d3565b61356981613776565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109055760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561363d57600080fd5b505af1158015613651573d6000803e3d6000fd5b5050505061090561393f565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526134c99085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613a34565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526137719084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016136b7565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661386a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107d3565b61090533613776565b60655460ff16156138ec5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff16156139de5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6000613a96826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613b269092919063ffffffff16565b8051909150156137715780806020019051810190613ab49190614608565b6137715760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107d3565b6060613b358484600085613b3f565b90505b9392505050565b606082471015613bb75760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016107d3565b73ffffffffffffffffffffffffffffffffffffffff85163b613c1b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107d3565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c44919061452f565b60006040518083038185875af1925050503d8060008114613c81576040519150601f19603f3d011682016040523d82523d6000602084013e613c86565b606091505b5091509150613c96828286613ca1565b979650505050505050565b60608315613cb0575081613b38565b825115613cc05782518084602001fd5b8160405162461bcd60e51b81526004016107d39190613d32565b60005b83811015613cf5578181015183820152602001613cdd565b838111156134c95750506000910152565b60008151808452613d1e816020860160208601613cda565b601f01601f19169290920160200192915050565b602081526000613b386020830184613d06565b73ffffffffffffffffffffffffffffffffffffffff8116811461356957600080fd5b8035613d7281613d45565b919050565b600060208284031215613d8957600080fd5b8135613b3881613d45565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613de657613de6613d94565b60405290565b6040516060810167ffffffffffffffff81118282101715613de657613de6613d94565b604051601f8201601f1916810167ffffffffffffffff81118282101715613e3857613e38613d94565b604052919050565b600067ffffffffffffffff821115613e5a57613e5a613d94565b5060051b60200190565b600082601f830112613e7557600080fd5b813567ffffffffffffffff811115613e8f57613e8f613d94565b613ea26020601f19601f84011601613e0f565b818152846020838601011115613eb757600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613d7257600080fd5b60006020808385031215613eff57600080fd5b823567ffffffffffffffff80821115613f1757600080fd5b818501915085601f830112613f2b57600080fd5b8135613f3e613f3982613e40565b613e0f565b81815260059190911b83018401908481019088831115613f5d57600080fd5b8585015b83811015613ff657803585811115613f795760008081fd5b86016080818c03601f1901811315613f915760008081fd5b613f99613dc3565b8983013588811115613fab5760008081fd5b613fb98e8c83870101613e64565b8252506040808401358b8301526060613fd3818601613ed4565b82840152613fe2848601613ed4565b908301525085525050918601918601613f61565b5098975050505050505050565b60006020828403121561401557600080fd5b613b3882613ed4565b806040810183101561402f57600080fd5b92915050565b6000806000806000806000610180888a03121561405157600080fd5b61405a88613ed4565b965061406860208901613ed4565b955060408801359450606088013593506140858960808a0161401e565b925061014088018981111561409957600080fd5b60c0890192506140a98a8261401e565b91505092959891949750929550565b600080600080608085870312156140ce57600080fd5b6140d785613ed4565b93506140e560208601613ed4565b93969395505050506040820135916060013590565b801515811461356957600080fd5b8035613d72816140fa565b60006020828403121561412557600080fd5b8135613b38816140fa565b60006020828403121561414257600080fd5b813567ffffffffffffffff81111561415957600080fd5b61416584828501613e64565b949350505050565b6000806000806000806000806000806101408b8d03121561418d57600080fd5b6141968b613d67565b99506141a460208c01613d67565b98506141b260408c01613d67565b975060608b013596506141c760808c01613d67565b95506141d560a08c01614108565b945060c08b013567ffffffffffffffff808211156141f257600080fd5b6141fe8e838f01613e64565b955061420c60e08e01613ed4565b94506101008d013591508082111561422357600080fd5b506142308d828e01613e64565b9250506142406101208c01613d67565b90509295989b9194979a5092959850565b6000602080838503121561426457600080fd5b823567ffffffffffffffff8082111561427c57600080fd5b818501915085601f83011261429057600080fd5b813561429e613f3982613e40565b81815260059190911b830184019084810190888311156142bd57600080fd5b8585015b83811015613ff6578035858111156142d95760008081fd5b86016060818c03601f19018113156142f15760008081fd5b6142f9613dec565b898301358881111561430b5760008081fd5b6143198e8c83870101613e64565b8252506040808401358b830152614331838501613ed4565b90820152855250509186019186016142c1565b6000806040838503121561435757600080fd5b823567ffffffffffffffff81111561436e57600080fd5b61437a85828601613e64565b95602094909401359450505050565b600181811c9082168061439d57607f821691505b6020821081036143d6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036144575761445761440b565b6001019392505050565b60006020828403121561447357600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036144ab576144ab61440b565b5060010190565b600067ffffffffffffffff838116908316818110156144d3576144d361440b565b039392505050565b6000828210156144ed576144ed61440b565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561452a5761452a61440b565b500290565b60008251614541818460208701613cda565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826145895761458961454b565b500690565b61012081016040808784376000838201818152879190815b60028110156145c6578484833790840182815292840192906001016145a6565b5050828760c0870137610100850181815286935091505b60018110156145fc5782518252602092830192909101906001016145dd565b50505095945050505050565b60006020828403121561461a57600080fd5b8151613b38816140fa565b600067ffffffffffffffff8083168185168083038211156146485761464861440b565b01949350505050565b6000826146605761466061454b565b500490565b601f82111561377157600081815260208120601f850160051c8101602086101561468c5750805b601f850160051c820191505b818110156146ab57828155600101614698565b505050505050565b815167ffffffffffffffff8111156146cd576146cd613d94565b6146e1816146db8454614389565b84614665565b602080601f83116001811461473457600084156146fe5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556146ab565b600085815260208120601f198616915b8281101561476357888601518255948401946001909101908401614744565b508582101561479f57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156147c2576147c261440b565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006147fc6060830184613d06565b9594505050505056fea2646970667358221220459c0629eb0008b4daf59e555a322fe762cb05b1da8712377c085651a8bff70664736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/ProofOfEfficiencyMock.json b/compiled-contracts/ProofOfEfficiencyMock.json index c5a6afb04..7f90e7c84 100644 --- a/compiled-contracts/ProofOfEfficiencyMock.json +++ b/compiled-contracts/ProofOfEfficiencyMock.json @@ -3,6 +3,18 @@ "contractName": "ProofOfEfficiencyMock", "sourceName": "contracts/mocks/ProofOfEfficiencyMock.sol", "abi": [ + { + "anonymous": false, + "inputs": [], + "name": "EmergencyStateActivated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "EmergencyStateDeactivated", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -66,19 +78,6 @@ "name": "OwnershipTransferred", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -143,11 +142,11 @@ { "indexed": false, "internalType": "address", - "name": "newTrustedSequencer", + "name": "newSecurityCouncil", "type": "address" } ], - "name": "SetTrustedSequencer", + "name": "SetSecurityCouncil", "type": "event" }, { @@ -155,12 +154,12 @@ "inputs": [ { "indexed": false, - "internalType": "string", - "name": "newTrustedSequencerURL", - "type": "string" + "internalType": "address", + "name": "newTrustedSequencer", + "type": "address" } ], - "name": "SetTrustedSequencerURL", + "name": "SetTrustedSequencer", "type": "event" }, { @@ -168,12 +167,12 @@ "inputs": [ { "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" + "internalType": "string", + "name": "newTrustedSequencerURL", + "type": "string" } ], - "name": "Unpaused", + "name": "SetTrustedSequencerURL", "type": "event" }, { @@ -553,6 +552,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "isEmergencyState", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "lastBatchSequenced", @@ -657,19 +669,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -856,6 +855,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "newSecurityCouncil", + "type": "address" + } + ], + "name": "setSecurityCouncil", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -1083,8 +1095,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506151dd806100206000396000f3fe608060405234801561001057600080fd5b50600436106103205760003560e01c806396dc3d39116101a7578063cfa8ed47116100ee578063e7a7ed0211610097578063f2fde38b11610071578063f2fde38b146107fa578063f75527611461080d578063fe16564f1461081c57600080fd5b8063e7a7ed0214610797578063e8bf92ed146107c7578063eaeb077b146107e757600080fd5b8063d8d1091b116100c8578063d8d1091b1461074f578063d8f54db014610762578063dbc169761461078f57600080fd5b8063cfa8ed47146106f0578063d02103ca1461071c578063d0ae98dd1461073c57600080fd5b8063b02286c011610150578063c0cad3021161012a578063c0cad302146106b7578063c89e42df146106ca578063ca810366146106dd57600080fd5b8063b02286c01461066e578063b4d63f5814610677578063b6b0b0971461069757600080fd5b8063a3c573eb11610181578063a3c573eb14610630578063ab9fc5ef14610650578063adc879e91461065a57600080fd5b806396dc3d391461060257806399f5634e146106155780639b7967601461061d57600080fd5b8063574f649e1161026b5780637152facf116102145780637fcb3653116101ee5780637fcb3653146105bd5780638c4a0af7146105d15780638da5cb5b146105e457600080fd5b80637152facf1461058f578063748608de146105a257806379847057146105b557600080fd5b80636b8616ce116102455780636b8616ce146105545780636ff512cc14610574578063715018a61461058757600080fd5b8063574f649e146104895780635c975abb1461052a5780636766f09d1461054157600080fd5b8063423fa856116102cd578063542028d5116102a7578063542028d51461045b5780635437988d1461046357806355b925e61461047657600080fd5b8063423fa856146103e557806345605267146104055780635392c5e01461042d57600080fd5b80632072f6c5116102fe5780632072f6c51461038557806327eb6c0f1461038d5780633c158267146103d257600080fd5b8063107bf28c1461032557806319d8ac61146103435780631a26da1414610370575b600080fd5b61032d61082f565b60405161033a9190614572565b60405180910390f35b609a546103579067ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161033a565b61038361037e3660046145a2565b6108bd565b005b6103836108e2565b60a2546103ad9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161033a565b6103836103e0366004614748565b6108f4565b609a546103579068010000000000000000900467ffffffffffffffff1681565b609a5461035790700100000000000000000000000000000000900467ffffffffffffffff1681565b61044d61043b36600461487d565b609d6020526000908152604090205481565b60405190815260200161033a565b61032d611228565b6103836104713660046148c5565b611235565b6103836104843660046148f9565b611284565b61044d61049736600461497c565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b60655460ff165b604051901515815260200161033a565b61038361054f3660046148f9565b61174d565b61044d61056236600461487d565b60986020526000908152604090205481565b6103836105823660046148c5565b611d83565b610383611ebe565b61032d61059d3660046149f2565b611ed0565b6103836105b03660046148f9565b61213a565b61044d61240b565b609b546103579067ffffffffffffffff1681565b6103836105df366004614a4d565b612485565b60335473ffffffffffffffffffffffffffffffffffffffff166103ad565b61038361061036600461487d565b6125b9565b61044d6125fc565b61038361062b36600461487d565b612729565b60a3546103ad9073ffffffffffffffffffffffffffffffffffffffff1681565b61035762093a8081565b60a0546103579067ffffffffffffffff1681565b61044d61ea6081565b61044d61068536600461487d565b60996020526000908152604090205481565b6097546103ad9073ffffffffffffffffffffffffffffffffffffffff1681565b6103836106c5366004614a6a565b612778565b6103836106d8366004614a6a565b612790565b6103836106eb366004614aa7565b61287f565b609b546103ad9068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b609c546103ad9073ffffffffffffffffffffffffffffffffffffffff1681565b61044d61074a3660046149f2565b612bc0565b61038361075d366004614b8b565b612eba565b609b54610531907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610383613568565b609a54610357907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b609e546103ad9073ffffffffffffffffffffffffffffffffffffffff1681565b6103836107f5366004614c9c565b613617565b6103836108083660046148c5565b613ae7565b61044d67016345785d8a000081565b61038361082a366004614ce1565b613b9e565b60a1805461083c90614d0d565b80601f016020809104026020016040519081016040528092919081815260200182805461086890614d0d565b80156108b55780601f1061088a576101008083540402835291602001916108b5565b820191906000526020600020905b81548152906001019060200180831161089857829003601f168201915b505050505081565b6108c5613bc1565b67ffffffffffffffff909116600090815260996020526040902055565b6108ea613bc1565b6108f2613c42565b565b6108fc613cc8565b609b5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146109b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b8051609a5467ffffffffffffffff680100000000000000008204811660008181526099602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015611004576000878281518110610a1c57610a1c614d60565b602002602001015190506000816060015167ffffffffffffffff161115610c875783610a4781614dbe565b945050600081600001518051906020012082602001518360600151604051602001610aaa93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260989093529120549091508114610baf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016109ab565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610c81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016109ab565b50610e55565b60208101511580610d365750609c5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610cf09160040190815260200190565b6020604051808303816000875af1158015610d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d339190614de5565b15155b610dc2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016109ab565b80515161ea6011610e55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016109ab565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610e8b575042816040015167ffffffffffffffff1611155b610f3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016109ab565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610fe690614dbe565b95505080604001519550508080610ffc90614dfe565b915050610a00565b50609a5467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156110c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016109ab565b609a546000906110ef90700100000000000000000000000000000000900467ffffffffffffffff1684614e36565b6111039067ffffffffffffffff1687614e5f565b609a805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c1693909317939093179290921691909117909155600090815260996020526040902083905590506111db33306111ba8467016345785d8a0000614e76565b60975473ffffffffffffffffffffffffffffffffffffffff16929190613d35565b609a546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b609f805461083c90614d0d565b61123d613bc1565b609e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61128c613cc8565b609b5467ffffffffffffffff9081169088161115611352576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016109ab565b609b5467ffffffffffffffff90811690871611611417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016109ab565b600061142588888888611ed0565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161145a9190614eb3565b602060405180830381855afa158015611477573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061149a9190614de5565b6114a49190614efe565b609e546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d9161150e9189918991899190600401614f12565b602060405180830381865afa15801561152b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154f9190614f8c565b6115db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016109ab565b609b546116349033906115f89067ffffffffffffffff168b614e36565b67ffffffffffffffff1661160a6125fc565b6116149190614e76565b60975473ffffffffffffffffffffffffffffffffffffffff169190613e11565b609b80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152609d602052604090819020879055609c5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b1580156116e957600080fd5b505af11580156116fd573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b8567ffffffffffffffff168767ffffffffffffffff1610611816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e65774261746368206d75737420626520626960648201527f67676572207468616e20696e69744e756d426174636800000000000000000000608482015260a4016109ab565b609b5467ffffffffffffffff90811690871611156118dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d4261746368206d757374206265206c657360648201527f73207468616e206c617374566572696669656442617463680000000000000000608482015260a4016109ab565b67ffffffffffffffff8716158061190b575067ffffffffffffffff87166000908152609d602052604090205415155b6119bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d426174636820737461746520726f6f742060648201527f646f6573206e6f74206578697374000000000000000000000000000000000000608482015260a4016109ab565b67ffffffffffffffff86166000908152609d6020526040902054611a89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e6577426174636820737461746520726f6f7460648201527f20646f6573206e6f742065786973740000000000000000000000000000000000608482015260a4016109ab565b6000611a9788888888611ed0565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051611acc9190614eb3565b602060405180830381855afa158015611ae9573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611b0c9190614de5565b611b169190614efe565b609e546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611b809189918991899190600401614f12565b602060405180830381865afa158015611b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc19190614f8c565b611c4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20494e56414c49445f50524f4f46000000000000000000000060648201526084016109ab565b67ffffffffffffffff88166000908152609d6020526040902054869003611d1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2073746f72656420726f6f74206d757374206265206469666660648201527f6572656e74207468616e206e657720737461746520726f6f7400000000000000608482015260a4016109ab565b67ffffffffffffffff88166000908152609d60209081526040918290205482519081529081018890527fe579d6d18f02941e1d0f59bff70f1b2c894edc991badab38343786df2846fe55910160405180910390a1611d78613c42565b505050505050505050565b609b5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611e36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016109ab565b609b80547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b611ec6613bc1565b6108f26000613e6c565b67ffffffffffffffff808516600081815260996020526040808220549387168252902054606092911580611f0357508115155b611fb5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016109ab565b80612068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016109ab565b67ffffffffffffffff87166000908152609d60209081526040918290205460a05492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b612142613bc1565b609b5467ffffffffffffffff9081169088161115612208576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a4016109ab565b609b5467ffffffffffffffff908116908716116122cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a4016109ab565b67ffffffffffffffff8088166000908152609960205260408082205492891682529020548161237e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f74206578697374000060648201526084016109ab565b80611634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f74206578697374000060648201526084016109ab565b609a5460009067ffffffffffffffff700100000000000000000000000000000000820481169161245a917801000000000000000000000000000000000000000000000000909104166001614fa9565b6124649190614e36565b6124809067ffffffffffffffff16670de0b6b3a7640000614e76565b905090565b609b5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016109ab565b609b80548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690611eb390831515815260200190565b6125c1613bc1565b609b80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6097546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829173ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa15801561266f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126939190614de5565b609b54609a5491925060009167ffffffffffffffff918216916801000000000000000082048116916126f89170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614e36565b6127029190614fa9565b61270c9190614e36565b67ffffffffffffffff1690506127228183614fd5565b9250505090565b612731613bc1565b609a805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b612780613bc1565b60a161278c8282615037565b5050565b609b5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016109ab565b609f61284f8282615037565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051611eb39190614572565b600054610100900460ff161580801561289f5750600054600160ff909116105b806128b95750303b1580156128b9575060005460ff166001145b612945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016109ab565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156129a357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b609c80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8e8116919091179092556097805482168d8416179055609e80549091168b831617905560008052609d6020527fc5dc36ae4e7617e4c4d23ddfcde33c79e9ed64c300aed766a9288a6b9b31f63d899055609b80547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928a16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000088151502179055609f612abe8682615037565b5060a080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861617905560a1612aff8482615037565b5060a380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055612b48613ee3565b612b50613f83565b8015612bb357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b609b5460009067ffffffffffffffff868116911614612c87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a4016109ab565b8467ffffffffffffffff168467ffffffffffffffff1611612d50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a4016109ab565b609a5467ffffffffffffffff6801000000000000000090910481169085161115612e22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016109ab565b6000612e3086868686611ed0565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051612e659190614eb3565b602060405180830381855afa158015612e82573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612ea59190614de5565b612eaf9190614efe565b979650505050505050565b612ec2613cc8565b609b547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612f9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016109ab565b805180613054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016109ab565b609a5467ffffffffffffffff7801000000000000000000000000000000000000000000000000820481169161309f918491700100000000000000000000000000000000900416615151565b111561312d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016109ab565b609a5467ffffffffffffffff680100000000000000008204811660008181526099602052604081205491937001000000000000000000000000000000009004909216915b8481101561349857600086828151811061318d5761318d614d60565b6020026020010151905083806131a290614dbe565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff88166000908152609890935291205490915081146132fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016109ab565b613306600188614e5f565b83036133de574262093a8083604001516133209190614fa9565b67ffffffffffffffff1611156133de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016109ab565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209350858061348090614dbe565b9650505050808061349090614dfe565b915050613171565b50609a80544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260996020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60a25473ffffffffffffffffffffffffffffffffffffffff16331461360f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016109ab565b6108f2614044565b61361f613cc8565b609b547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146136fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016109ab565b600061370661240b565b905081811115613798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016109ab565b61ea6083511061382a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016109ab565b60975461384f9073ffffffffffffffffffffffffffffffffffffffff16333084613d35565b609c54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa1580156138bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138e39190614de5565b609a8054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff1690601861391d83614dbe565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161399693929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181529181528151602092830120609a547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526098909352912055323303613a8457609a54604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613ae1565b609a60189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613ad893929190615169565b60405180910390a25b50505050565b613aef613bc1565b73ffffffffffffffffffffffffffffffffffffffff8116613b92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016109ab565b613b9b81613e6c565b50565b613ba6613bc1565b67ffffffffffffffff166000908152609d6020526040902055565b60335473ffffffffffffffffffffffffffffffffffffffff1633146108f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109ab565b613c4a6140b6565b60a360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613cb457600080fd5b505af1158015613ae1573d6000803e3d6000fd5b60655460ff16156108f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016109ab565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052613ae19085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261413b565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052613e679084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401613d8f565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16613f7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109ab565b6108f233613e6c565b600054610100900460ff1661401a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109ab565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b61404c614247565b60a360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613cb457600080fd5b6140be613cc8565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586141113390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b600061419d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661429e9092919063ffffffff16565b805190915015613e6757808060200190518101906141bb9190614f8c565b613e67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016109ab565b61424f6142b7565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33614111565b60606142ad8484600085614323565b90505b9392505050565b60655460ff166108f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016109ab565b6060824710156143b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016109ab565b73ffffffffffffffffffffffffffffffffffffffff85163b614433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109ab565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161445c9190614eb3565b60006040518083038185875af1925050503d8060008114614499576040519150601f19603f3d011682016040523d82523d6000602084013e61449e565b606091505b5091509150612eaf828286606083156144b85750816142b0565b8251156144c85782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ab9190614572565b60005b838110156145175781810151838201526020016144ff565b83811115613ae15750506000910152565b600081518084526145408160208601602086016144fc565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006142b06020830184614528565b803567ffffffffffffffff8116811461459d57600080fd5b919050565b600080604083850312156145b557600080fd5b6145be83614585565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171561461e5761461e6145cc565b60405290565b6040516060810167ffffffffffffffff8111828210171561461e5761461e6145cc565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561468e5761468e6145cc565b604052919050565b600067ffffffffffffffff8211156146b0576146b06145cc565b5060051b60200190565b600082601f8301126146cb57600080fd5b813567ffffffffffffffff8111156146e5576146e56145cc565b61471660207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614647565b81815284602083860101111561472b57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561475b57600080fd5b823567ffffffffffffffff8082111561477357600080fd5b818501915085601f83011261478757600080fd5b813561479a61479582614696565b614647565b81815260059190911b830184019084810190888311156147b957600080fd5b8585015b83811015614870578035858111156147d55760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181131561480b5760008081fd5b6148136145fb565b89830135888111156148255760008081fd5b6148338e8c838701016146ba565b8252506040808401358b830152606061484d818601614585565b8284015261485c848601614585565b9083015250855250509186019186016147bd565b5098975050505050505050565b60006020828403121561488f57600080fd5b6142b082614585565b73ffffffffffffffffffffffffffffffffffffffff81168114613b9b57600080fd5b803561459d81614898565b6000602082840312156148d757600080fd5b81356142b081614898565b80604081018310156148f357600080fd5b92915050565b6000806000806000806000610180888a03121561491557600080fd5b61491e88614585565b965061492c60208901614585565b955060408801359450606088013593506149498960808a016148e2565b925061014088018981111561495d57600080fd5b60c08901925061496d8a826148e2565b91505092959891949750929550565b600080600080600060a0868803121561499457600080fd5b85359450602086013567ffffffffffffffff8111156149b257600080fd5b6149be888289016146ba565b945050604086013592506149d460608701614585565b915060808601356149e481614898565b809150509295509295909350565b60008060008060808587031215614a0857600080fd5b614a1185614585565b9350614a1f60208601614585565b93969395505050506040820135916060013590565b8015158114613b9b57600080fd5b803561459d81614a34565b600060208284031215614a5f57600080fd5b81356142b081614a34565b600060208284031215614a7c57600080fd5b813567ffffffffffffffff811115614a9357600080fd5b614a9f848285016146ba565b949350505050565b6000806000806000806000806000806101408b8d031215614ac757600080fd5b614ad08b6148ba565b9950614ade60208c016148ba565b9850614aec60408c016148ba565b975060608b01359650614b0160808c016148ba565b9550614b0f60a08c01614a42565b945060c08b013567ffffffffffffffff80821115614b2c57600080fd5b614b388e838f016146ba565b9550614b4660e08e01614585565b94506101008d0135915080821115614b5d57600080fd5b50614b6a8d828e016146ba565b925050614b7a6101208c016148ba565b90509295989b9194979a5092959850565b60006020808385031215614b9e57600080fd5b823567ffffffffffffffff80821115614bb657600080fd5b818501915085601f830112614bca57600080fd5b8135614bd861479582614696565b81815260059190911b83018401908481019088831115614bf757600080fd5b8585015b8381101561487057803585811115614c135760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001811315614c495760008081fd5b614c51614624565b8983013588811115614c635760008081fd5b614c718e8c838701016146ba565b8252506040808401358b830152614c89838501614585565b9082015285525050918601918601614bfb565b60008060408385031215614caf57600080fd5b823567ffffffffffffffff811115614cc657600080fd5b614cd2858286016146ba565b95602094909401359450505050565b60008060408385031215614cf457600080fd5b82359150614d0460208401614585565b90509250929050565b600181811c90821680614d2157607f821691505b602082108103614d5a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614ddb57614ddb614d8f565b6001019392505050565b600060208284031215614df757600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e2f57614e2f614d8f565b5060010190565b600067ffffffffffffffff83811690831681811015614e5757614e57614d8f565b039392505050565b600082821015614e7157614e71614d8f565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614eae57614eae614d8f565b500290565b60008251614ec58184602087016144fc565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614f0d57614f0d614ecf565b500690565b61012081016040808784376000838201818152879190815b6002811015614f4a57848483379084018281529284019290600101614f2a565b5050828760c0870137610100850181815286935091505b6001811015614f80578251825260209283019290910190600101614f61565b50505095945050505050565b600060208284031215614f9e57600080fd5b81516142b081614a34565b600067ffffffffffffffff808316818516808303821115614fcc57614fcc614d8f565b01949350505050565b600082614fe457614fe4614ecf565b500490565b601f821115613e6757600081815260208120601f850160051c810160208610156150105750805b601f850160051c820191505b8181101561502f5782815560010161501c565b505050505050565b815167ffffffffffffffff811115615051576150516145cc565b6150658161505f8454614d0d565b84614fe9565b602080601f8311600181146150b857600084156150825750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561502f565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015615105578886015182559484019460019091019084016150e6565b508582101561514157878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000821982111561516457615164614d8f565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff8316602082015260606040820152600061519e6060830184614528565b9594505050505056fea2646970667358221220201327290f830f468beb202a477ac5abec6f76764bb865b8007014247823a8a664736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103205760003560e01c806396dc3d39116101a7578063cfa8ed47116100ee578063e7a7ed0211610097578063f2fde38b11610071578063f2fde38b146107fa578063f75527611461080d578063fe16564f1461081c57600080fd5b8063e7a7ed0214610797578063e8bf92ed146107c7578063eaeb077b146107e757600080fd5b8063d8d1091b116100c8578063d8d1091b1461074f578063d8f54db014610762578063dbc169761461078f57600080fd5b8063cfa8ed47146106f0578063d02103ca1461071c578063d0ae98dd1461073c57600080fd5b8063b02286c011610150578063c0cad3021161012a578063c0cad302146106b7578063c89e42df146106ca578063ca810366146106dd57600080fd5b8063b02286c01461066e578063b4d63f5814610677578063b6b0b0971461069757600080fd5b8063a3c573eb11610181578063a3c573eb14610630578063ab9fc5ef14610650578063adc879e91461065a57600080fd5b806396dc3d391461060257806399f5634e146106155780639b7967601461061d57600080fd5b8063574f649e1161026b5780637152facf116102145780637fcb3653116101ee5780637fcb3653146105bd5780638c4a0af7146105d15780638da5cb5b146105e457600080fd5b80637152facf1461058f578063748608de146105a257806379847057146105b557600080fd5b80636b8616ce116102455780636b8616ce146105545780636ff512cc14610574578063715018a61461058757600080fd5b8063574f649e146104895780635c975abb1461052a5780636766f09d1461054157600080fd5b8063423fa856116102cd578063542028d5116102a7578063542028d51461045b5780635437988d1461046357806355b925e61461047657600080fd5b8063423fa856146103e557806345605267146104055780635392c5e01461042d57600080fd5b80632072f6c5116102fe5780632072f6c51461038557806327eb6c0f1461038d5780633c158267146103d257600080fd5b8063107bf28c1461032557806319d8ac61146103435780631a26da1414610370575b600080fd5b61032d61082f565b60405161033a9190614572565b60405180910390f35b609a546103579067ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161033a565b61038361037e3660046145a2565b6108bd565b005b6103836108e2565b60a2546103ad9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161033a565b6103836103e0366004614748565b6108f4565b609a546103579068010000000000000000900467ffffffffffffffff1681565b609a5461035790700100000000000000000000000000000000900467ffffffffffffffff1681565b61044d61043b36600461487d565b609d6020526000908152604090205481565b60405190815260200161033a565b61032d611228565b6103836104713660046148c5565b611235565b6103836104843660046148f9565b611284565b61044d61049736600461497c565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b60655460ff165b604051901515815260200161033a565b61038361054f3660046148f9565b61174d565b61044d61056236600461487d565b60986020526000908152604090205481565b6103836105823660046148c5565b611d83565b610383611ebe565b61032d61059d3660046149f2565b611ed0565b6103836105b03660046148f9565b61213a565b61044d61240b565b609b546103579067ffffffffffffffff1681565b6103836105df366004614a4d565b612485565b60335473ffffffffffffffffffffffffffffffffffffffff166103ad565b61038361061036600461487d565b6125b9565b61044d6125fc565b61038361062b36600461487d565b612729565b60a3546103ad9073ffffffffffffffffffffffffffffffffffffffff1681565b61035762093a8081565b60a0546103579067ffffffffffffffff1681565b61044d61ea6081565b61044d61068536600461487d565b60996020526000908152604090205481565b6097546103ad9073ffffffffffffffffffffffffffffffffffffffff1681565b6103836106c5366004614a6a565b612778565b6103836106d8366004614a6a565b612790565b6103836106eb366004614aa7565b61287f565b609b546103ad9068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b609c546103ad9073ffffffffffffffffffffffffffffffffffffffff1681565b61044d61074a3660046149f2565b612bc0565b61038361075d366004614b8b565b612eba565b609b54610531907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610383613568565b609a54610357907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b609e546103ad9073ffffffffffffffffffffffffffffffffffffffff1681565b6103836107f5366004614c9c565b613617565b6103836108083660046148c5565b613ae7565b61044d67016345785d8a000081565b61038361082a366004614ce1565b613b9e565b60a1805461083c90614d0d565b80601f016020809104026020016040519081016040528092919081815260200182805461086890614d0d565b80156108b55780601f1061088a576101008083540402835291602001916108b5565b820191906000526020600020905b81548152906001019060200180831161089857829003601f168201915b505050505081565b6108c5613bc1565b67ffffffffffffffff909116600090815260996020526040902055565b6108ea613bc1565b6108f2613c42565b565b6108fc613cc8565b609b5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146109b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084015b60405180910390fd5b8051609a5467ffffffffffffffff680100000000000000008204811660008181526099602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015611004576000878281518110610a1c57610a1c614d60565b602002602001015190506000816060015167ffffffffffffffff161115610c875783610a4781614dbe565b945050600081600001518051906020012082602001518360600151604051602001610aaa93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8816600090815260989093529120549091508114610baf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016109ab565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610c81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016109ab565b50610e55565b60208101511580610d365750609c5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610cf09160040190815260200190565b6020604051808303816000875af1158015610d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d339190614de5565b15155b610dc2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016109ab565b80515161ea6011610e55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016109ab565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610e8b575042816040015167ffffffffffffffff1611155b610f3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016109ab565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610fe690614dbe565b95505080604001519550508080610ffc90614dfe565b915050610a00565b50609a5467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156110c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016109ab565b609a546000906110ef90700100000000000000000000000000000000900467ffffffffffffffff1684614e36565b6111039067ffffffffffffffff1687614e5f565b609a805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c1693909317939093179290921691909117909155600090815260996020526040902083905590506111db33306111ba8467016345785d8a0000614e76565b60975473ffffffffffffffffffffffffffffffffffffffff16929190613d35565b609a546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b609f805461083c90614d0d565b61123d613bc1565b609e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61128c613cc8565b609b5467ffffffffffffffff9081169088161115611352576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016109ab565b609b5467ffffffffffffffff90811690871611611417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016109ab565b600061142588888888611ed0565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161145a9190614eb3565b602060405180830381855afa158015611477573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061149a9190614de5565b6114a49190614efe565b609e546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d9161150e9189918991899190600401614f12565b602060405180830381865afa15801561152b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154f9190614f8c565b6115db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016109ab565b609b546116349033906115f89067ffffffffffffffff168b614e36565b67ffffffffffffffff1661160a6125fc565b6116149190614e76565b60975473ffffffffffffffffffffffffffffffffffffffff169190613e11565b609b80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152609d602052604090819020879055609c5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b1580156116e957600080fd5b505af11580156116fd573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b8567ffffffffffffffff168767ffffffffffffffff1610611816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e65774261746368206d75737420626520626960648201527f67676572207468616e20696e69744e756d426174636800000000000000000000608482015260a4016109ab565b609b5467ffffffffffffffff90811690871611156118dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d4261746368206d757374206265206c657360648201527f73207468616e206c617374566572696669656442617463680000000000000000608482015260a4016109ab565b67ffffffffffffffff8716158061190b575067ffffffffffffffff87166000908152609d602052604090205415155b6119bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d426174636820737461746520726f6f742060648201527f646f6573206e6f74206578697374000000000000000000000000000000000000608482015260a4016109ab565b67ffffffffffffffff86166000908152609d6020526040902054611a89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e6577426174636820737461746520726f6f7460648201527f20646f6573206e6f742065786973740000000000000000000000000000000000608482015260a4016109ab565b6000611a9788888888611ed0565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051611acc9190614eb3565b602060405180830381855afa158015611ae9573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611b0c9190614de5565b611b169190614efe565b609e546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611b809189918991899190600401614f12565b602060405180830381865afa158015611b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc19190614f8c565b611c4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20494e56414c49445f50524f4f46000000000000000000000060648201526084016109ab565b67ffffffffffffffff88166000908152609d6020526040902054869003611d1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2073746f72656420726f6f74206d757374206265206469666660648201527f6572656e74207468616e206e657720737461746520726f6f7400000000000000608482015260a4016109ab565b67ffffffffffffffff88166000908152609d60209081526040918290205482519081529081018890527fe579d6d18f02941e1d0f59bff70f1b2c894edc991badab38343786df2846fe55910160405180910390a1611d78613c42565b505050505050505050565b609b5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611e36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016109ab565b609b80547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc0906020015b60405180910390a150565b611ec6613bc1565b6108f26000613e6c565b67ffffffffffffffff808516600081815260996020526040808220549387168252902054606092911580611f0357508115155b611fb5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016109ab565b80612068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016109ab565b67ffffffffffffffff87166000908152609d60209081526040918290205460a05492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b612142613bc1565b609b5467ffffffffffffffff9081169088161115612208576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a4016109ab565b609b5467ffffffffffffffff908116908716116122cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a4016109ab565b67ffffffffffffffff8088166000908152609960205260408082205492891682529020548161237e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f74206578697374000060648201526084016109ab565b80611634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f74206578697374000060648201526084016109ab565b609a5460009067ffffffffffffffff700100000000000000000000000000000000820481169161245a917801000000000000000000000000000000000000000000000000909104166001614fa9565b6124649190614e36565b6124809067ffffffffffffffff16670de0b6b3a7640000614e76565b905090565b609b5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016109ab565b609b80548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690611eb390831515815260200190565b6125c1613bc1565b609b80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6097546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829173ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa15801561266f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126939190614de5565b609b54609a5491925060009167ffffffffffffffff918216916801000000000000000082048116916126f89170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614e36565b6127029190614fa9565b61270c9190614e36565b67ffffffffffffffff1690506127228183614fd5565b9250505090565b612731613bc1565b609a805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b612780613bc1565b60a161278c8282615037565b5050565b609b5468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016109ab565b609f61284f8282615037565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051611eb39190614572565b600054610100900460ff161580801561289f5750600054600160ff909116105b806128b95750303b1580156128b9575060005460ff166001145b612945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016109ab565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156129a357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b609c80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8e8116919091179092556097805482168d8416179055609e80549091168b831617905560008052609d6020527fc5dc36ae4e7617e4c4d23ddfcde33c79e9ed64c300aed766a9288a6b9b31f63d899055609b80547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928a16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000088151502179055609f612abe8682615037565b5060a080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff861617905560a1612aff8482615037565b5060a380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055612b48613ee3565b612b50613f83565b8015612bb357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b609b5460009067ffffffffffffffff868116911614612c87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a4016109ab565b8467ffffffffffffffff168467ffffffffffffffff1611612d50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a4016109ab565b609a5467ffffffffffffffff6801000000000000000090910481169085161115612e22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016109ab565b6000612e3086868686611ed0565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051612e659190614eb3565b602060405180830381855afa158015612e82573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612ea59190614de5565b612eaf9190614efe565b979650505050505050565b612ec2613cc8565b609b547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612f9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016109ab565b805180613054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016109ab565b609a5467ffffffffffffffff7801000000000000000000000000000000000000000000000000820481169161309f918491700100000000000000000000000000000000900416615151565b111561312d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016109ab565b609a5467ffffffffffffffff680100000000000000008204811660008181526099602052604081205491937001000000000000000000000000000000009004909216915b8481101561349857600086828151811061318d5761318d614d60565b6020026020010151905083806131a290614dbe565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016606082015290955060009150606801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff88166000908152609890935291205490915081146132fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016109ab565b613306600188614e5f565b83036133de574262093a8083604001516133209190614fa9565b67ffffffffffffffff1611156133de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016109ab565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209350858061348090614dbe565b9650505050808061349090614dfe565b915050613171565b50609a80544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260996020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60a25473ffffffffffffffffffffffffffffffffffffffff16331461360f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016109ab565b6108f2614044565b61361f613cc8565b609b547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146136fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016109ab565b600061370661240b565b905081811115613798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016109ab565b61ea6083511061382a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016109ab565b60975461384f9073ffffffffffffffffffffffffffffffffffffffff16333084613d35565b609c54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa1580156138bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138e39190614de5565b609a8054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff1690601861391d83614dbe565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161399693929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181529181528151602092830120609a547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526098909352912055323303613a8457609a54604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613ae1565b609a60189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613ad893929190615169565b60405180910390a25b50505050565b613aef613bc1565b73ffffffffffffffffffffffffffffffffffffffff8116613b92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016109ab565b613b9b81613e6c565b50565b613ba6613bc1565b67ffffffffffffffff166000908152609d6020526040902055565b60335473ffffffffffffffffffffffffffffffffffffffff1633146108f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109ab565b613c4a6140b6565b60a360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613cb457600080fd5b505af1158015613ae1573d6000803e3d6000fd5b60655460ff16156108f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016109ab565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052613ae19085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261413b565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052613e679084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401613d8f565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16613f7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109ab565b6108f233613e6c565b600054610100900460ff1661401a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109ab565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b61404c614247565b60a360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613cb457600080fd5b6140be613cc8565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586141113390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b600061419d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661429e9092919063ffffffff16565b805190915015613e6757808060200190518101906141bb9190614f8c565b613e67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016109ab565b61424f6142b7565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33614111565b60606142ad8484600085614323565b90505b9392505050565b60655460ff166108f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016109ab565b6060824710156143b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016109ab565b73ffffffffffffffffffffffffffffffffffffffff85163b614433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109ab565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161445c9190614eb3565b60006040518083038185875af1925050503d8060008114614499576040519150601f19603f3d011682016040523d82523d6000602084013e61449e565b606091505b5091509150612eaf828286606083156144b85750816142b0565b8251156144c85782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ab9190614572565b60005b838110156145175781810151838201526020016144ff565b83811115613ae15750506000910152565b600081518084526145408160208601602086016144fc565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006142b06020830184614528565b803567ffffffffffffffff8116811461459d57600080fd5b919050565b600080604083850312156145b557600080fd5b6145be83614585565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171561461e5761461e6145cc565b60405290565b6040516060810167ffffffffffffffff8111828210171561461e5761461e6145cc565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561468e5761468e6145cc565b604052919050565b600067ffffffffffffffff8211156146b0576146b06145cc565b5060051b60200190565b600082601f8301126146cb57600080fd5b813567ffffffffffffffff8111156146e5576146e56145cc565b61471660207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614647565b81815284602083860101111561472b57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561475b57600080fd5b823567ffffffffffffffff8082111561477357600080fd5b818501915085601f83011261478757600080fd5b813561479a61479582614696565b614647565b81815260059190911b830184019084810190888311156147b957600080fd5b8585015b83811015614870578035858111156147d55760008081fd5b86016080818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181131561480b5760008081fd5b6148136145fb565b89830135888111156148255760008081fd5b6148338e8c838701016146ba565b8252506040808401358b830152606061484d818601614585565b8284015261485c848601614585565b9083015250855250509186019186016147bd565b5098975050505050505050565b60006020828403121561488f57600080fd5b6142b082614585565b73ffffffffffffffffffffffffffffffffffffffff81168114613b9b57600080fd5b803561459d81614898565b6000602082840312156148d757600080fd5b81356142b081614898565b80604081018310156148f357600080fd5b92915050565b6000806000806000806000610180888a03121561491557600080fd5b61491e88614585565b965061492c60208901614585565b955060408801359450606088013593506149498960808a016148e2565b925061014088018981111561495d57600080fd5b60c08901925061496d8a826148e2565b91505092959891949750929550565b600080600080600060a0868803121561499457600080fd5b85359450602086013567ffffffffffffffff8111156149b257600080fd5b6149be888289016146ba565b945050604086013592506149d460608701614585565b915060808601356149e481614898565b809150509295509295909350565b60008060008060808587031215614a0857600080fd5b614a1185614585565b9350614a1f60208601614585565b93969395505050506040820135916060013590565b8015158114613b9b57600080fd5b803561459d81614a34565b600060208284031215614a5f57600080fd5b81356142b081614a34565b600060208284031215614a7c57600080fd5b813567ffffffffffffffff811115614a9357600080fd5b614a9f848285016146ba565b949350505050565b6000806000806000806000806000806101408b8d031215614ac757600080fd5b614ad08b6148ba565b9950614ade60208c016148ba565b9850614aec60408c016148ba565b975060608b01359650614b0160808c016148ba565b9550614b0f60a08c01614a42565b945060c08b013567ffffffffffffffff80821115614b2c57600080fd5b614b388e838f016146ba565b9550614b4660e08e01614585565b94506101008d0135915080821115614b5d57600080fd5b50614b6a8d828e016146ba565b925050614b7a6101208c016148ba565b90509295989b9194979a5092959850565b60006020808385031215614b9e57600080fd5b823567ffffffffffffffff80821115614bb657600080fd5b818501915085601f830112614bca57600080fd5b8135614bd861479582614696565b81815260059190911b83018401908481019088831115614bf757600080fd5b8585015b8381101561487057803585811115614c135760008081fd5b86016060818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001811315614c495760008081fd5b614c51614624565b8983013588811115614c635760008081fd5b614c718e8c838701016146ba565b8252506040808401358b830152614c89838501614585565b9082015285525050918601918601614bfb565b60008060408385031215614caf57600080fd5b823567ffffffffffffffff811115614cc657600080fd5b614cd2858286016146ba565b95602094909401359450505050565b60008060408385031215614cf457600080fd5b82359150614d0460208401614585565b90509250929050565b600181811c90821680614d2157607f821691505b602082108103614d5a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614ddb57614ddb614d8f565b6001019392505050565b600060208284031215614df757600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e2f57614e2f614d8f565b5060010190565b600067ffffffffffffffff83811690831681811015614e5757614e57614d8f565b039392505050565b600082821015614e7157614e71614d8f565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614eae57614eae614d8f565b500290565b60008251614ec58184602087016144fc565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614f0d57614f0d614ecf565b500690565b61012081016040808784376000838201818152879190815b6002811015614f4a57848483379084018281529284019290600101614f2a565b5050828760c0870137610100850181815286935091505b6001811015614f80578251825260209283019290910190600101614f61565b50505095945050505050565b600060208284031215614f9e57600080fd5b81516142b081614a34565b600067ffffffffffffffff808316818516808303821115614fcc57614fcc614d8f565b01949350505050565b600082614fe457614fe4614ecf565b500490565b601f821115613e6757600081815260208120601f850160051c810160208610156150105750805b601f850160051c820191505b8181101561502f5782815560010161501c565b505050505050565b815167ffffffffffffffff811115615051576150516145cc565b6150658161505f8454614d0d565b84614fe9565b602080601f8311600181146150b857600084156150825750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561502f565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015615105578886015182559484019460019091019084016150e6565b508582101561514157878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000821982111561516457615164614d8f565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff8316602082015260606040820152600061519e6060830184614528565b9594505050505056fea2646970667358221220201327290f830f468beb202a477ac5abec6f76764bb865b8007014247823a8a664736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506150e9806100206000396000f3fe608060405234801561001057600080fd5b506004361061032b5760003560e01c80638da5cb5b116101b2578063ca810366116100f9578063dbc16976116100a2578063eaeb077b1161007c578063eaeb077b14610810578063f2fde38b14610823578063f755276114610836578063fe16564f1461084557600080fd5b8063dbc16976146107b8578063e7a7ed02146107c0578063e8bf92ed146107f057600080fd5b8063d0ae98dd116100d3578063d0ae98dd14610765578063d8d1091b14610778578063d8f54db01461078b57600080fd5b8063ca81036614610706578063cfa8ed4714610719578063d02103ca1461074557600080fd5b8063adc879e91161015b578063b6b0b09711610135578063b6b0b097146106bb578063c0cad302146106e0578063c89e42df146106f357600080fd5b8063adc879e91461067e578063b02286c014610692578063b4d63f581461069b57600080fd5b80639b7967601161018c5780639b79676014610641578063a3c573eb14610654578063ab9fc5ef1461067457600080fd5b80638da5cb5b1461060857806396dc3d391461062657806399f5634e1461063957600080fd5b80635437988d11610276578063715018a61161021f57806379847057116101f957806379847057146105d95780637fcb3653146105e15780638c4a0af7146105f557600080fd5b8063715018a6146105ab5780637152facf146105b3578063748608de146105c657600080fd5b80636766f09d116102505780636766f09d146105655780636b8616ce146105785780636ff512cc1461059857600080fd5b80635437988d1461049e57806355b925e6146104b1578063574f649e146104c457600080fd5b806327eb6c0f116102d857806345605267116102b257806345605267146104405780635392c5e014610468578063542028d51461049657600080fd5b806327eb6c0f146103c85780633c1582671461040d578063423fa8561461042057600080fd5b80631a26da14116103095780631a26da14146103985780631c1083e2146103ad5780632072f6c5146103c057600080fd5b8063107bf28c1461033057806315064c961461034e57806319d8ac611461036b575b600080fd5b610338610858565b6040516103459190614514565b60405180910390f35b60655461035b9060ff1681565b6040519015158152602001610345565b60685461037f9067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610345565b6103ab6103a6366004614544565b6108e6565b005b6103ab6103bb36600461459b565b61090b565b6103ab610a17565b6070546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610345565b6103ab61041b3660046146f8565b610ac8565b60685461037f9068010000000000000000900467ffffffffffffffff1681565b60685461037f90700100000000000000000000000000000000900467ffffffffffffffff1681565b61048861047636600461480f565b606b6020526000908152604090205481565b604051908152602001610345565b6103386113bf565b6103ab6104ac36600461459b565b6113cc565b6103ab6104bf366004614841565b61141b565b6104886104d23660046148c4565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b6103ab610573366004614841565b611932565b61048861058636600461480f565b60666020526000908152604090205481565b6103ab6105a636600461459b565b611f6b565b6103ab612085565b6103386105c136600461493a565b612097565b6103ab6105d4366004614841565b6122cd565b610488612536565b60695461037f9067ffffffffffffffff1681565b6103ab610603366004614995565b6125b0565b60335473ffffffffffffffffffffffffffffffffffffffff166103e8565b6103ab61063436600461480f565b6126ca565b61048861270d565b6103ab61064f36600461480f565b61283e565b6071546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b61037f62093a8081565b606e5461037f9067ffffffffffffffff1681565b61048861ea6081565b6104886106a936600461480f565b60676020526000908152604090205481565b6065546103e890610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6103ab6106ee3660046149b2565b61288d565b6103ab6107013660046149b2565b6128a5565b6103ab6107143660046149ef565b61297a565b6069546103e89068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b61048861077336600461493a565b612cbd565b6103ab610786366004614ad3565b612f69565b60695461035b907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b6103ab61360e565b60685461037f907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b6103ab61081e366004614bc6565b61379e565b6103ab61083136600461459b565b613c9e565b61048867016345785d8a000081565b6103ab610853366004614c0b565b613d3b565b606f805461086590614c37565b80601f016020809104026020016040519081016040528092919081815260200182805461089190614c37565b80156108de5780601f106108b3576101008083540402835291602001916108de565b820191906000526020600020905b8154815290600101906020018083116108c157829003601f168201915b505050505081565b6108ee613d5e565b67ffffffffffffffff909116600090815260676020526040902055565b60705473ffffffffffffffffffffffffffffffffffffffff16331461099d5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff1615610ab65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b610abe613d5e565b610ac6613dc5565b565b60655460ff1615610b675760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610c005760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b805160685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b858110156111b0576000878281518110610c6857610c68614c8a565b602002602001015190506000816060015167ffffffffffffffff161115610e815783610c9381614ce8565b945050600081600001518051906020012082602001518360600151604051602001610cf693929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610dc35760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610e7b5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610994565b5061101b565b60208101511580610f305750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610eea9160040190815260200190565b6020604051808303816000875af1158015610f09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2d9190614d0f565b15155b610fa25760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610994565b80515161ea601161101b5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610994565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015611051575042816040015167ffffffffffffffff1611155b6110e95760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061119290614ce8565b955050806040015195505080806111a890614d28565b915050610c4c565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156112535760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610994565b60685460009061128190700100000000000000000000000000000000900467ffffffffffffffff1684614d60565b6112959067ffffffffffffffff1687614d89565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c169390931793909317929092169190911790915560009081526067602052604090208390559050611372333061134c8467016345785d8a0000614da0565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613e4f565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d805461086590614c37565b6113d4613d5e565b606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60655460ff16156114ba5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff90811690881611156115665760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a401610994565b60695467ffffffffffffffff908116908716116116115760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a401610994565b600061161f88888888612097565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516116549190614ddd565b602060405180830381855afa158015611671573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906116949190614d0f565b61169e9190614e28565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916117089189918991899190600401614e3c565b602060405180830381865afa158015611725573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117499190614eb6565b6117bb5760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610994565b6069546118199033906117d89067ffffffffffffffff168b614d60565b67ffffffffffffffff166117ea61270d565b6117f49190614da0565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169190613f0d565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b1580156118ce57600080fd5b505af11580156118e2573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60655460ff16156119d15760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8567ffffffffffffffff168767ffffffffffffffff1610611a805760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e65774261746368206d75737420626520626960648201527f67676572207468616e20696e69744e756d426174636800000000000000000000608482015260a401610994565b60695467ffffffffffffffff9081169087161115611b2c5760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d4261746368206d757374206265206c657360648201527f73207468616e206c617374566572696669656442617463680000000000000000608482015260a401610994565b67ffffffffffffffff87161580611b5b575067ffffffffffffffff87166000908152606b602052604090205415155b611bf35760405162461bcd60e51b815260206004820152604e60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d426174636820737461746520726f6f742060648201527f646f6573206e6f74206578697374000000000000000000000000000000000000608482015260a401610994565b67ffffffffffffffff86166000908152606b6020526040902054611ca55760405162461bcd60e51b815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e6577426174636820737461746520726f6f7460648201527f20646f6573206e6f742065786973740000000000000000000000000000000000608482015260a401610994565b6000611cb388888888612097565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051611ce89190614ddd565b602060405180830381855afa158015611d05573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611d289190614d0f565b611d329190614e28565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611d9c9189918991899190600401614e3c565b602060405180830381865afa158015611db9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ddd9190614eb6565b611e4f5760405162461bcd60e51b815260206004820152603560248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20494e56414c49445f50524f4f4600000000000000000000006064820152608401610994565b67ffffffffffffffff88166000908152606b6020526040902054869003611f045760405162461bcd60e51b815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2073746f72656420726f6f74206d757374206265206469666660648201527f6572656e74207468616e206e657720737461746520726f6f7400000000000000608482015260a401610994565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527fe579d6d18f02941e1d0f59bff70f1b2c894edc991badab38343786df2846fe55910160405180910390a1611f60613dc5565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146120045760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610a0c565b61208d613d5e565b610ac66000613f68565b67ffffffffffffffff8085166000818152606760205260408082205493871682529020546060929115806120ca57508115155b6121625760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b806121fb5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b6122d5613d5e565b60695467ffffffffffffffff90811690881611156123815760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff9081169087161161242c5760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610994565b67ffffffffffffffff808816600090815260676020526040808220549289168252902054816124c35760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b806118195760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691612585917801000000000000000000000000000000000000000000000000909104166001614ed3565b61258f9190614d60565b6125ab9067ffffffffffffffff16670de0b6b3a7640000614da0565b905090565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146126495760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a0c90831515815260200190565b6126d2613d5e565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612784573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a89190614d0f565b60695460685491925060009167ffffffffffffffff9182169168010000000000000000820481169161280d9170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614d60565b6128179190614ed3565b6128219190614d60565b67ffffffffffffffff1690506128378183614eff565b9250505090565b612846613d5e565b6068805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b612895613d5e565b606f6128a18282614f61565b5050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461293e5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606d61294a8282614f61565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a0c9190614514565b600054610100900460ff161580801561299a5750600054600160ff909116105b806129b45750303b1580156129b4575060005460ff166001145b612a265760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610994565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015612a8457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8e811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008e851602179055606c80549091168b831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b899055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928a16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000088151502179055606d612bc38682614f61565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8616179055606f612c048482614f61565b50607180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055612c4d613fdf565b8015612cb057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b60695460009067ffffffffffffffff868116911614612d6a5760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8467ffffffffffffffff168467ffffffffffffffff1611612e195760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a401610994565b60685467ffffffffffffffff6801000000000000000090910481169085161115612ed15760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6000612edf86868686612097565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051612f149190614ddd565b602060405180830381855afa158015612f31573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612f549190614d0f565b612f5e9190614e28565b979650505050505050565b60655460ff16156130085760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146130cb5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b8051806131665760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60685467ffffffffffffffff780100000000000000000000000000000000000000000000000082048116916131b191849170010000000000000000000000000000000090041661505d565b11156132255760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610994565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b8481101561353e57600086828151811061328557613285614c8a565b60200260200101519050838061329a90614ce8565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff88166000908152606690935291205490915081146133bb5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610994565b6133c6600188614d89565b8303613484574262093a8083604001516133e09190614ed3565b67ffffffffffffffff1611156134845760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610994565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209350858061352690614ce8565b9650505050808061353690614d28565b915050613269565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16156136875760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b60705473ffffffffffffffffffffffffffffffffffffffff1633146137145760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c0000006064820152608401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561377e57600080fd5b505af1158015613792573d6000803e3d6000fd5b50505050610ac6614065565b60655460ff161561383d5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146139005760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b600061390a612536565b9050818111156139825760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610994565b61ea608351106139fa5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610994565b606554613a2490610100900473ffffffffffffffffffffffffffffffffffffffff16333084613e4f565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613a94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ab89190614d0f565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613af283614ce8565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505083805190602001208142604051602001613b6b93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526066909352912055323303613c3b57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613c98565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613c8f93929190615075565b60405180910390a25b50505050565b613ca6613d5e565b73ffffffffffffffffffffffffffffffffffffffff8116613d2f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610994565b613d3881613f68565b50565b613d43613d5e565b67ffffffffffffffff166000908152606b6020526040902055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ac65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613e2f57600080fd5b505af1158015613e43573d6000803e3d6000fd5b50505050610ac6614131565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052613c989085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152614226565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052613f639084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401613ea9565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661405c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610994565b610ac633613f68565b60655460ff16156140de5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff16156141d05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6000614288826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166143189092919063ffffffff16565b805190915015613f6357808060200190518101906142a69190614eb6565b613f635760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610994565b60606143278484600085614331565b90505b9392505050565b6060824710156143a95760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610994565b73ffffffffffffffffffffffffffffffffffffffff85163b61440d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610994565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516144369190614ddd565b60006040518083038185875af1925050503d8060008114614473576040519150601f19603f3d011682016040523d82523d6000602084013e614478565b606091505b5091509150612f5e8282866060831561449257508161432a565b8251156144a25782518084602001fd5b8160405162461bcd60e51b81526004016109949190614514565b60005b838110156144d75781810151838201526020016144bf565b83811115613c985750506000910152565b600081518084526145008160208601602086016144bc565b601f01601f19169290920160200192915050565b60208152600061432a60208301846144e8565b803567ffffffffffffffff8116811461453f57600080fd5b919050565b6000806040838503121561455757600080fd5b61456083614527565b946020939093013593505050565b73ffffffffffffffffffffffffffffffffffffffff81168114613d3857600080fd5b803561453f8161456e565b6000602082840312156145ad57600080fd5b813561432a8161456e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171561460a5761460a6145b8565b60405290565b6040516060810167ffffffffffffffff8111828210171561460a5761460a6145b8565b604051601f8201601f1916810167ffffffffffffffff8111828210171561465c5761465c6145b8565b604052919050565b600067ffffffffffffffff82111561467e5761467e6145b8565b5060051b60200190565b600082601f83011261469957600080fd5b813567ffffffffffffffff8111156146b3576146b36145b8565b6146c66020601f19601f84011601614633565b8181528460208386010111156146db57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561470b57600080fd5b823567ffffffffffffffff8082111561472357600080fd5b818501915085601f83011261473757600080fd5b813561474a61474582614664565b614633565b81815260059190911b8301840190848101908883111561476957600080fd5b8585015b83811015614802578035858111156147855760008081fd5b86016080818c03601f190181131561479d5760008081fd5b6147a56145e7565b89830135888111156147b75760008081fd5b6147c58e8c83870101614688565b8252506040808401358b83015260606147df818601614527565b828401526147ee848601614527565b90830152508552505091860191860161476d565b5098975050505050505050565b60006020828403121561482157600080fd5b61432a82614527565b806040810183101561483b57600080fd5b92915050565b6000806000806000806000610180888a03121561485d57600080fd5b61486688614527565b965061487460208901614527565b955060408801359450606088013593506148918960808a0161482a565b92506101408801898111156148a557600080fd5b60c0890192506148b58a8261482a565b91505092959891949750929550565b600080600080600060a086880312156148dc57600080fd5b85359450602086013567ffffffffffffffff8111156148fa57600080fd5b61490688828901614688565b9450506040860135925061491c60608701614527565b9150608086013561492c8161456e565b809150509295509295909350565b6000806000806080858703121561495057600080fd5b61495985614527565b935061496760208601614527565b93969395505050506040820135916060013590565b8015158114613d3857600080fd5b803561453f8161497c565b6000602082840312156149a757600080fd5b813561432a8161497c565b6000602082840312156149c457600080fd5b813567ffffffffffffffff8111156149db57600080fd5b6149e784828501614688565b949350505050565b6000806000806000806000806000806101408b8d031215614a0f57600080fd5b614a188b614590565b9950614a2660208c01614590565b9850614a3460408c01614590565b975060608b01359650614a4960808c01614590565b9550614a5760a08c0161498a565b945060c08b013567ffffffffffffffff80821115614a7457600080fd5b614a808e838f01614688565b9550614a8e60e08e01614527565b94506101008d0135915080821115614aa557600080fd5b50614ab28d828e01614688565b925050614ac26101208c01614590565b90509295989b9194979a5092959850565b60006020808385031215614ae657600080fd5b823567ffffffffffffffff80821115614afe57600080fd5b818501915085601f830112614b1257600080fd5b8135614b2061474582614664565b81815260059190911b83018401908481019088831115614b3f57600080fd5b8585015b8381101561480257803585811115614b5b5760008081fd5b86016060818c03601f1901811315614b735760008081fd5b614b7b614610565b8983013588811115614b8d5760008081fd5b614b9b8e8c83870101614688565b8252506040808401358b830152614bb3838501614527565b9082015285525050918601918601614b43565b60008060408385031215614bd957600080fd5b823567ffffffffffffffff811115614bf057600080fd5b614bfc85828601614688565b95602094909401359450505050565b60008060408385031215614c1e57600080fd5b82359150614c2e60208401614527565b90509250929050565b600181811c90821680614c4b57607f821691505b602082108103614c84577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614d0557614d05614cb9565b6001019392505050565b600060208284031215614d2157600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614d5957614d59614cb9565b5060010190565b600067ffffffffffffffff83811690831681811015614d8157614d81614cb9565b039392505050565b600082821015614d9b57614d9b614cb9565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614dd857614dd8614cb9565b500290565b60008251614def8184602087016144bc565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614e3757614e37614df9565b500690565b61012081016040808784376000838201818152879190815b6002811015614e7457848483379084018281529284019290600101614e54565b5050828760c0870137610100850181815286935091505b6001811015614eaa578251825260209283019290910190600101614e8b565b50505095945050505050565b600060208284031215614ec857600080fd5b815161432a8161497c565b600067ffffffffffffffff808316818516808303821115614ef657614ef6614cb9565b01949350505050565b600082614f0e57614f0e614df9565b500490565b601f821115613f6357600081815260208120601f850160051c81016020861015614f3a5750805b601f850160051c820191505b81811015614f5957828155600101614f46565b505050505050565b815167ffffffffffffffff811115614f7b57614f7b6145b8565b614f8f81614f898454614c37565b84614f13565b602080601f831160018114614fe25760008415614fac5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614f59565b600085815260208120601f198616915b8281101561501157888601518255948401946001909101908401614ff2565b508582101561504d57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000821982111561507057615070614cb9565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006150aa60608301846144e8565b9594505050505056fea2646970667358221220dbec0337eaff482385055b567f46a3136d562e38d52dbd6f9939ee9e82edfe3464736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061032b5760003560e01c80638da5cb5b116101b2578063ca810366116100f9578063dbc16976116100a2578063eaeb077b1161007c578063eaeb077b14610810578063f2fde38b14610823578063f755276114610836578063fe16564f1461084557600080fd5b8063dbc16976146107b8578063e7a7ed02146107c0578063e8bf92ed146107f057600080fd5b8063d0ae98dd116100d3578063d0ae98dd14610765578063d8d1091b14610778578063d8f54db01461078b57600080fd5b8063ca81036614610706578063cfa8ed4714610719578063d02103ca1461074557600080fd5b8063adc879e91161015b578063b6b0b09711610135578063b6b0b097146106bb578063c0cad302146106e0578063c89e42df146106f357600080fd5b8063adc879e91461067e578063b02286c014610692578063b4d63f581461069b57600080fd5b80639b7967601161018c5780639b79676014610641578063a3c573eb14610654578063ab9fc5ef1461067457600080fd5b80638da5cb5b1461060857806396dc3d391461062657806399f5634e1461063957600080fd5b80635437988d11610276578063715018a61161021f57806379847057116101f957806379847057146105d95780637fcb3653146105e15780638c4a0af7146105f557600080fd5b8063715018a6146105ab5780637152facf146105b3578063748608de146105c657600080fd5b80636766f09d116102505780636766f09d146105655780636b8616ce146105785780636ff512cc1461059857600080fd5b80635437988d1461049e57806355b925e6146104b1578063574f649e146104c457600080fd5b806327eb6c0f116102d857806345605267116102b257806345605267146104405780635392c5e014610468578063542028d51461049657600080fd5b806327eb6c0f146103c85780633c1582671461040d578063423fa8561461042057600080fd5b80631a26da14116103095780631a26da14146103985780631c1083e2146103ad5780632072f6c5146103c057600080fd5b8063107bf28c1461033057806315064c961461034e57806319d8ac611461036b575b600080fd5b610338610858565b6040516103459190614514565b60405180910390f35b60655461035b9060ff1681565b6040519015158152602001610345565b60685461037f9067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610345565b6103ab6103a6366004614544565b6108e6565b005b6103ab6103bb36600461459b565b61090b565b6103ab610a17565b6070546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610345565b6103ab61041b3660046146f8565b610ac8565b60685461037f9068010000000000000000900467ffffffffffffffff1681565b60685461037f90700100000000000000000000000000000000900467ffffffffffffffff1681565b61048861047636600461480f565b606b6020526000908152604090205481565b604051908152602001610345565b6103386113bf565b6103ab6104ac36600461459b565b6113cc565b6103ab6104bf366004614841565b61141b565b6104886104d23660046148c4565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b6103ab610573366004614841565b611932565b61048861058636600461480f565b60666020526000908152604090205481565b6103ab6105a636600461459b565b611f6b565b6103ab612085565b6103386105c136600461493a565b612097565b6103ab6105d4366004614841565b6122cd565b610488612536565b60695461037f9067ffffffffffffffff1681565b6103ab610603366004614995565b6125b0565b60335473ffffffffffffffffffffffffffffffffffffffff166103e8565b6103ab61063436600461480f565b6126ca565b61048861270d565b6103ab61064f36600461480f565b61283e565b6071546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b61037f62093a8081565b606e5461037f9067ffffffffffffffff1681565b61048861ea6081565b6104886106a936600461480f565b60676020526000908152604090205481565b6065546103e890610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6103ab6106ee3660046149b2565b61288d565b6103ab6107013660046149b2565b6128a5565b6103ab6107143660046149ef565b61297a565b6069546103e89068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b61048861077336600461493a565b612cbd565b6103ab610786366004614ad3565b612f69565b60695461035b907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b6103ab61360e565b60685461037f907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b6103ab61081e366004614bc6565b61379e565b6103ab61083136600461459b565b613c9e565b61048867016345785d8a000081565b6103ab610853366004614c0b565b613d3b565b606f805461086590614c37565b80601f016020809104026020016040519081016040528092919081815260200182805461089190614c37565b80156108de5780601f106108b3576101008083540402835291602001916108de565b820191906000526020600020905b8154815290600101906020018083116108c157829003601f168201915b505050505081565b6108ee613d5e565b67ffffffffffffffff909116600090815260676020526040902055565b60705473ffffffffffffffffffffffffffffffffffffffff16331461099d5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff1615610ab65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b610abe613d5e565b610ac6613dc5565b565b60655460ff1615610b675760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610c005760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b805160685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b858110156111b0576000878281518110610c6857610c68614c8a565b602002602001015190506000816060015167ffffffffffffffff161115610e815783610c9381614ce8565b945050600081600001518051906020012082602001518360600151604051602001610cf693929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610dc35760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610e7b5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610994565b5061101b565b60208101511580610f305750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610eea9160040190815260200190565b6020604051808303816000875af1158015610f09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2d9190614d0f565b15155b610fa25760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610994565b80515161ea601161101b5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610994565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015611051575042816040015167ffffffffffffffff1611155b6110e95760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061119290614ce8565b955050806040015195505080806111a890614d28565b915050610c4c565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156112535760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610994565b60685460009061128190700100000000000000000000000000000000900467ffffffffffffffff1684614d60565b6112959067ffffffffffffffff1687614d89565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c169390931793909317929092169190911790915560009081526067602052604090208390559050611372333061134c8467016345785d8a0000614da0565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613e4f565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d805461086590614c37565b6113d4613d5e565b606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60655460ff16156114ba5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff90811690881611156115665760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a401610994565b60695467ffffffffffffffff908116908716116116115760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a401610994565b600061161f88888888612097565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516116549190614ddd565b602060405180830381855afa158015611671573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906116949190614d0f565b61169e9190614e28565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916117089189918991899190600401614e3c565b602060405180830381865afa158015611725573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117499190614eb6565b6117bb5760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610994565b6069546118199033906117d89067ffffffffffffffff168b614d60565b67ffffffffffffffff166117ea61270d565b6117f49190614da0565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169190613f0d565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b1580156118ce57600080fd5b505af11580156118e2573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60655460ff16156119d15760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8567ffffffffffffffff168767ffffffffffffffff1610611a805760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e65774261746368206d75737420626520626960648201527f67676572207468616e20696e69744e756d426174636800000000000000000000608482015260a401610994565b60695467ffffffffffffffff9081169087161115611b2c5760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d4261746368206d757374206265206c657360648201527f73207468616e206c617374566572696669656442617463680000000000000000608482015260a401610994565b67ffffffffffffffff87161580611b5b575067ffffffffffffffff87166000908152606b602052604090205415155b611bf35760405162461bcd60e51b815260206004820152604e60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d426174636820737461746520726f6f742060648201527f646f6573206e6f74206578697374000000000000000000000000000000000000608482015260a401610994565b67ffffffffffffffff86166000908152606b6020526040902054611ca55760405162461bcd60e51b815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e6577426174636820737461746520726f6f7460648201527f20646f6573206e6f742065786973740000000000000000000000000000000000608482015260a401610994565b6000611cb388888888612097565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051611ce89190614ddd565b602060405180830381855afa158015611d05573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611d289190614d0f565b611d329190614e28565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611d9c9189918991899190600401614e3c565b602060405180830381865afa158015611db9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ddd9190614eb6565b611e4f5760405162461bcd60e51b815260206004820152603560248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20494e56414c49445f50524f4f4600000000000000000000006064820152608401610994565b67ffffffffffffffff88166000908152606b6020526040902054869003611f045760405162461bcd60e51b815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2073746f72656420726f6f74206d757374206265206469666660648201527f6572656e74207468616e206e657720737461746520726f6f7400000000000000608482015260a401610994565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527fe579d6d18f02941e1d0f59bff70f1b2c894edc991badab38343786df2846fe55910160405180910390a1611f60613dc5565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146120045760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610a0c565b61208d613d5e565b610ac66000613f68565b67ffffffffffffffff8085166000818152606760205260408082205493871682529020546060929115806120ca57508115155b6121625760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b806121fb5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b6122d5613d5e565b60695467ffffffffffffffff90811690881611156123815760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff9081169087161161242c5760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610994565b67ffffffffffffffff808816600090815260676020526040808220549289168252902054816124c35760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b806118195760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691612585917801000000000000000000000000000000000000000000000000909104166001614ed3565b61258f9190614d60565b6125ab9067ffffffffffffffff16670de0b6b3a7640000614da0565b905090565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146126495760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a0c90831515815260200190565b6126d2613d5e565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612784573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a89190614d0f565b60695460685491925060009167ffffffffffffffff9182169168010000000000000000820481169161280d9170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614d60565b6128179190614ed3565b6128219190614d60565b67ffffffffffffffff1690506128378183614eff565b9250505090565b612846613d5e565b6068805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b612895613d5e565b606f6128a18282614f61565b5050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461293e5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606d61294a8282614f61565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a0c9190614514565b600054610100900460ff161580801561299a5750600054600160ff909116105b806129b45750303b1580156129b4575060005460ff166001145b612a265760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610994565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015612a8457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8e811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008e851602179055606c80549091168b831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b899055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928a16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000088151502179055606d612bc38682614f61565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8616179055606f612c048482614f61565b50607180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055612c4d613fdf565b8015612cb057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b60695460009067ffffffffffffffff868116911614612d6a5760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8467ffffffffffffffff168467ffffffffffffffff1611612e195760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a401610994565b60685467ffffffffffffffff6801000000000000000090910481169085161115612ed15760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6000612edf86868686612097565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051612f149190614ddd565b602060405180830381855afa158015612f31573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612f549190614d0f565b612f5e9190614e28565b979650505050505050565b60655460ff16156130085760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146130cb5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b8051806131665760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60685467ffffffffffffffff780100000000000000000000000000000000000000000000000082048116916131b191849170010000000000000000000000000000000090041661505d565b11156132255760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610994565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b8481101561353e57600086828151811061328557613285614c8a565b60200260200101519050838061329a90614ce8565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff88166000908152606690935291205490915081146133bb5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610994565b6133c6600188614d89565b8303613484574262093a8083604001516133e09190614ed3565b67ffffffffffffffff1611156134845760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610994565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209350858061352690614ce8565b9650505050808061353690614d28565b915050613269565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16156136875760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b60705473ffffffffffffffffffffffffffffffffffffffff1633146137145760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c0000006064820152608401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561377e57600080fd5b505af1158015613792573d6000803e3d6000fd5b50505050610ac6614065565b60655460ff161561383d5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146139005760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b600061390a612536565b9050818111156139825760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610994565b61ea608351106139fa5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610994565b606554613a2490610100900473ffffffffffffffffffffffffffffffffffffffff16333084613e4f565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613a94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ab89190614d0f565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613af283614ce8565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505083805190602001208142604051602001613b6b93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526066909352912055323303613c3b57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613c98565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613c8f93929190615075565b60405180910390a25b50505050565b613ca6613d5e565b73ffffffffffffffffffffffffffffffffffffffff8116613d2f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610994565b613d3881613f68565b50565b613d43613d5e565b67ffffffffffffffff166000908152606b6020526040902055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ac65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613e2f57600080fd5b505af1158015613e43573d6000803e3d6000fd5b50505050610ac6614131565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052613c989085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152614226565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052613f639084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401613ea9565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661405c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610994565b610ac633613f68565b60655460ff16156140de5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff16156141d05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6000614288826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166143189092919063ffffffff16565b805190915015613f6357808060200190518101906142a69190614eb6565b613f635760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610994565b60606143278484600085614331565b90505b9392505050565b6060824710156143a95760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610994565b73ffffffffffffffffffffffffffffffffffffffff85163b61440d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610994565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516144369190614ddd565b60006040518083038185875af1925050503d8060008114614473576040519150601f19603f3d011682016040523d82523d6000602084013e614478565b606091505b5091509150612f5e8282866060831561449257508161432a565b8251156144a25782518084602001fd5b8160405162461bcd60e51b81526004016109949190614514565b60005b838110156144d75781810151838201526020016144bf565b83811115613c985750506000910152565b600081518084526145008160208601602086016144bc565b601f01601f19169290920160200192915050565b60208152600061432a60208301846144e8565b803567ffffffffffffffff8116811461453f57600080fd5b919050565b6000806040838503121561455757600080fd5b61456083614527565b946020939093013593505050565b73ffffffffffffffffffffffffffffffffffffffff81168114613d3857600080fd5b803561453f8161456e565b6000602082840312156145ad57600080fd5b813561432a8161456e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171561460a5761460a6145b8565b60405290565b6040516060810167ffffffffffffffff8111828210171561460a5761460a6145b8565b604051601f8201601f1916810167ffffffffffffffff8111828210171561465c5761465c6145b8565b604052919050565b600067ffffffffffffffff82111561467e5761467e6145b8565b5060051b60200190565b600082601f83011261469957600080fd5b813567ffffffffffffffff8111156146b3576146b36145b8565b6146c66020601f19601f84011601614633565b8181528460208386010111156146db57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561470b57600080fd5b823567ffffffffffffffff8082111561472357600080fd5b818501915085601f83011261473757600080fd5b813561474a61474582614664565b614633565b81815260059190911b8301840190848101908883111561476957600080fd5b8585015b83811015614802578035858111156147855760008081fd5b86016080818c03601f190181131561479d5760008081fd5b6147a56145e7565b89830135888111156147b75760008081fd5b6147c58e8c83870101614688565b8252506040808401358b83015260606147df818601614527565b828401526147ee848601614527565b90830152508552505091860191860161476d565b5098975050505050505050565b60006020828403121561482157600080fd5b61432a82614527565b806040810183101561483b57600080fd5b92915050565b6000806000806000806000610180888a03121561485d57600080fd5b61486688614527565b965061487460208901614527565b955060408801359450606088013593506148918960808a0161482a565b92506101408801898111156148a557600080fd5b60c0890192506148b58a8261482a565b91505092959891949750929550565b600080600080600060a086880312156148dc57600080fd5b85359450602086013567ffffffffffffffff8111156148fa57600080fd5b61490688828901614688565b9450506040860135925061491c60608701614527565b9150608086013561492c8161456e565b809150509295509295909350565b6000806000806080858703121561495057600080fd5b61495985614527565b935061496760208601614527565b93969395505050506040820135916060013590565b8015158114613d3857600080fd5b803561453f8161497c565b6000602082840312156149a757600080fd5b813561432a8161497c565b6000602082840312156149c457600080fd5b813567ffffffffffffffff8111156149db57600080fd5b6149e784828501614688565b949350505050565b6000806000806000806000806000806101408b8d031215614a0f57600080fd5b614a188b614590565b9950614a2660208c01614590565b9850614a3460408c01614590565b975060608b01359650614a4960808c01614590565b9550614a5760a08c0161498a565b945060c08b013567ffffffffffffffff80821115614a7457600080fd5b614a808e838f01614688565b9550614a8e60e08e01614527565b94506101008d0135915080821115614aa557600080fd5b50614ab28d828e01614688565b925050614ac26101208c01614590565b90509295989b9194979a5092959850565b60006020808385031215614ae657600080fd5b823567ffffffffffffffff80821115614afe57600080fd5b818501915085601f830112614b1257600080fd5b8135614b2061474582614664565b81815260059190911b83018401908481019088831115614b3f57600080fd5b8585015b8381101561480257803585811115614b5b5760008081fd5b86016060818c03601f1901811315614b735760008081fd5b614b7b614610565b8983013588811115614b8d5760008081fd5b614b9b8e8c83870101614688565b8252506040808401358b830152614bb3838501614527565b9082015285525050918601918601614b43565b60008060408385031215614bd957600080fd5b823567ffffffffffffffff811115614bf057600080fd5b614bfc85828601614688565b95602094909401359450505050565b60008060408385031215614c1e57600080fd5b82359150614c2e60208401614527565b90509250929050565b600181811c90821680614c4b57607f821691505b602082108103614c84577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614d0557614d05614cb9565b6001019392505050565b600060208284031215614d2157600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614d5957614d59614cb9565b5060010190565b600067ffffffffffffffff83811690831681811015614d8157614d81614cb9565b039392505050565b600082821015614d9b57614d9b614cb9565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614dd857614dd8614cb9565b500290565b60008251614def8184602087016144bc565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614e3757614e37614df9565b500690565b61012081016040808784376000838201818152879190815b6002811015614e7457848483379084018281529284019290600101614e54565b5050828760c0870137610100850181815286935091505b6001811015614eaa578251825260209283019290910190600101614e8b565b50505095945050505050565b600060208284031215614ec857600080fd5b815161432a8161497c565b600067ffffffffffffffff808316818516808303821115614ef657614ef6614cb9565b01949350505050565b600082614f0e57614f0e614df9565b500490565b601f821115613f6357600081815260208120601f850160051c81016020861015614f3a5750805b601f850160051c820191505b81811015614f5957828155600101614f46565b505050505050565b815167ffffffffffffffff811115614f7b57614f7b6145b8565b614f8f81614f898454614c37565b84614f13565b602080601f831160018114614fe25760008415614fac5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614f59565b600085815260208120601f198616915b8281101561501157888601518255948401946001909101908401614ff2565b508582101561504d57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000821982111561507057615070614cb9565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006150aa60608301846144e8565b9594505050505056fea2646970667358221220dbec0337eaff482385055b567f46a3136d562e38d52dbd6f9939ee9e82edfe3464736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/TokenWrapped.json b/compiled-contracts/TokenWrapped.json index 7de539357..c2059e4d3 100644 --- a/compiled-contracts/TokenWrapped.json +++ b/compiled-contracts/TokenWrapped.json @@ -4,7 +4,23 @@ "sourceName": "contracts/lib/TokenWrapped.sol", "abi": [ { - "inputs": [], + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "uint8", + "name": "decimals", + "type": "uint8" + } + ], "stateMutability": "nonpayable", "type": "constructor" }, @@ -33,19 +49,6 @@ "name": "Approval", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -71,6 +74,58 @@ "name": "Transfer", "type": "event" }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DOMAIN_TYPEHASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PERMIT_TYPEHASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "VERSION", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -212,6 +267,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "deploymentChainId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -236,39 +304,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - }, - { - "internalType": "uint8", - "name": "decimals", - "type": "uint8" - }, - { - "internalType": "address", - "name": "initialAccount", - "type": "address" - }, - { - "internalType": "uint256", - "name": "initialBalance", - "type": "uint256" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -306,6 +341,68 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "symbol", @@ -386,8 +483,8 @@ "type": "function" } ], - "bytecode": "0x60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033", + "bytecode": "0x60c06040523480156200001157600080fd5b5060405162001a7838038062001a788339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516115be620004ba600039600061053001526000818161036f01526104fa01526115be6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b60405161019191906112d5565b60405180910390f35b6101ad6101a8366004611371565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad61020436600461139b565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad610276366004611371565b610552565b6101ad610289366004611371565b61059e565b6101c161029c3660046113d7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d23660046113d7565b60066020526000908152604090205481565b610184610645565b6101ad6102fa366004611371565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad610352366004611371565b6106ed565b6101ad610365366004611371565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f3660046113f9565b6107b2565b005b6101c16103b436600461146c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6060600380546104379061149f565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061149f565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f56565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611521565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c838361101e565b50600192915050565b6060600480546104379061149f565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c8383611124565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661088183611539565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ee3908490611521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4991815260200190565b60405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f81610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166110815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b80600260008282546110939190611521565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906110cd908490611521565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156112495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611285908490611571565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c27565b600060208083528351808285015260005b81811015611302578581018301518582016040015282016112e6565b81811115611314576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136c57600080fd5b919050565b6000806040838503121561138457600080fd5b61138d83611348565b946020939093013593505050565b6000806000606084860312156113b057600080fd5b6113b984611348565b92506113c760208501611348565b9150604084013590509250925092565b6000602082840312156113e957600080fd5b6113f282611348565b9392505050565b600080600080600080600060e0888a03121561141457600080fd5b61141d88611348565b965061142b60208901611348565b95506040880135945060608801359350608088013560ff8116811461144f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561147f57600080fd5b61148883611348565b915061149660208401611348565b90509250929050565b600181811c908216806114b357607f821691505b6020821081036114ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611534576115346114f2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156a5761156a6114f2565b5060010190565b600082821015611583576115836114f2565b50039056fea2646970667358221220dc9c54325b6ec8c11c8bc6a1630cfb64202b6d54611cd1004e705ceca7826a4f64736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b60405161019191906112d5565b60405180910390f35b6101ad6101a8366004611371565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad61020436600461139b565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad610276366004611371565b610552565b6101ad610289366004611371565b61059e565b6101c161029c3660046113d7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d23660046113d7565b60066020526000908152604090205481565b610184610645565b6101ad6102fa366004611371565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad610352366004611371565b6106ed565b6101ad610365366004611371565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f3660046113f9565b6107b2565b005b6101c16103b436600461146c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6060600380546104379061149f565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061149f565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f56565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611521565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c838361101e565b50600192915050565b6060600480546104379061149f565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c8383611124565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661088183611539565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ee3908490611521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4991815260200190565b60405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f81610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166110815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b80600260008282546110939190611521565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906110cd908490611521565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156112495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611285908490611571565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c27565b600060208083528351808285015260005b81811015611302578581018301518582016040015282016112e6565b81811115611314576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136c57600080fd5b919050565b6000806040838503121561138457600080fd5b61138d83611348565b946020939093013593505050565b6000806000606084860312156113b057600080fd5b6113b984611348565b92506113c760208501611348565b9150604084013590509250925092565b6000602082840312156113e957600080fd5b6113f282611348565b9392505050565b600080600080600080600060e0888a03121561141457600080fd5b61141d88611348565b965061142b60208901611348565b95506040880135945060608801359350608088013560ff8116811461144f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561147f57600080fd5b61148883611348565b915061149660208401611348565b90509250929050565b600181811c908216806114b357607f821691505b6020821081036114ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611534576115346114f2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156a5761156a6114f2565b5060010190565b600082821015611583576115836114f2565b50039056fea2646970667358221220dc9c54325b6ec8c11c8bc6a1630cfb64202b6d54611cd1004e705ceca7826a4f64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/VerifierRollupHelperMock.json b/compiled-contracts/VerifierRollupHelperMock.json index e501efcf4..8256410d1 100644 --- a/compiled-contracts/VerifierRollupHelperMock.json +++ b/compiled-contracts/VerifierRollupHelperMock.json @@ -38,8 +38,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50610101806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c806343753b4d14602d575b600080fd5b60426038366004606c565b6001949350505050565b604051901515815260200160405180910390f35b8060408101831015606657600080fd5b92915050565b600080600080610120808688031215608357600080fd5b608b87876056565b945060c0860187811115609d57600080fd5b60408701945060ab88826056565b93505086818701111560bc57600080fd5b5092959194509261010001915056fea264697066735822122026e36e4a0d19f3b56feec1530c2ac9673aee17d3ddd1781db283eac72a2ab24d64736f6c634300080f0033", - "deployedBytecode": "0x6080604052348015600f57600080fd5b506004361060285760003560e01c806343753b4d14602d575b600080fd5b60426038366004606c565b6001949350505050565b604051901515815260200160405180910390f35b8060408101831015606657600080fd5b92915050565b600080600080610120808688031215608357600080fd5b608b87876056565b945060c0860187811115609d57600080fd5b60408701945060ab88826056565b93505086818701111560bc57600080fd5b5092959194509261010001915056fea264697066735822122026e36e4a0d19f3b56feec1530c2ac9673aee17d3ddd1781db283eac72a2ab24d64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50610101806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c806343753b4d14602d575b600080fd5b60426038366004606c565b6001949350505050565b604051901515815260200160405180910390f35b8060408101831015606657600080fd5b92915050565b600080600080610120808688031215608357600080fd5b608b87876056565b945060c0860187811115609d57600080fd5b60408701945060ab88826056565b93505086818701111560bc57600080fd5b5092959194509261010001915056fea2646970667358221220b422763ff2e677768ee57d5c9acce68d8fa4f3d60928f25d40d779538621ee7764736f6c634300080f0033", + "deployedBytecode": "0x6080604052348015600f57600080fd5b506004361060285760003560e01c806343753b4d14602d575b600080fd5b60426038366004606c565b6001949350505050565b604051901515815260200160405180910390f35b8060408101831015606657600080fd5b92915050565b600080600080610120808688031215608357600080fd5b608b87876056565b945060c0860187811115609d57600080fd5b60408701945060ab88826056565b93505086818701111560bc57600080fd5b5092959194509261010001915056fea2646970667358221220b422763ff2e677768ee57d5c9acce68d8fa4f3d60928f25d40d779538621ee7764736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/Bridge.sol b/contracts/Bridge.sol index fb3458612..5826c95dc 100644 --- a/contracts/Bridge.sol +++ b/contracts/Bridge.sol @@ -8,15 +8,15 @@ import "./lib/TokenWrapped.sol"; import "./interfaces/IGlobalExitRootManager.sol"; import "./interfaces/IBridgeMessageReceiver.sol"; import "./interfaces/IBridge.sol"; -import "@openzeppelin/contracts-upgradeable/proxy/ClonesUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol"; -import "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol"; +import "./lib/EmergencyManager.sol"; +import "hardhat/console.sol"; /** * Bridge that will be deployed on both networks Ethereum and Polygon zkEVM * Contract responsible to manage the token interactions with other networks */ -contract Bridge is DepositContract, PausableUpgradeable, IBridge { +contract Bridge is DepositContract, EmergencyManager, IBridge { using SafeERC20Upgradeable for IERC20Upgradeable; // Wrapped Token information struct @@ -55,9 +55,6 @@ contract Bridge is DepositContract, PausableUpgradeable, IBridge { // Global Exit Root address IGlobalExitRootManager public globalExitRootManager; - // Addres of the token wrapped implementation - address public tokenImplementation; - // Proof of Efficiency address address public poeAddress; @@ -72,10 +69,7 @@ contract Bridge is DepositContract, PausableUpgradeable, IBridge { ) public virtual initializer { networkID = _networkID; globalExitRootManager = _globalExitRootManager; - tokenImplementation = address(new TokenWrapped()); poeAddress = _poeAddress; - - __Pausable_init_unchained(); } modifier onlyProofOfEfficiency() { @@ -134,7 +128,7 @@ contract Bridge is DepositContract, PausableUpgradeable, IBridge { address destinationAddress, uint256 amount, bytes calldata permitData - ) public payable virtual whenNotPaused { + ) public payable virtual ifNotEmergencyState { require( destinationNetwork != networkID, "Bridge::bridge: DESTINATION_CANT_BE_ITSELF" @@ -224,7 +218,7 @@ contract Bridge is DepositContract, PausableUpgradeable, IBridge { uint32 destinationNetwork, address destinationAddress, bytes memory metadata - ) public payable whenNotPaused { + ) public payable ifNotEmergencyState { require( destinationNetwork != networkID, "Bridge::bridge: DESTINATION_CANT_BE_ITSELF" @@ -281,53 +275,22 @@ contract Bridge is DepositContract, PausableUpgradeable, IBridge { address destinationAddress, uint256 amount, bytes memory metadata - ) public whenNotPaused { - // Check nullifier - require( - claimNullifier[index] == false, - "Bridge::claimAsset: ALREADY_CLAIMED" - ); - - // Check that the merkle proof belongs to some global exit root - // TODO this should be a SMTproof - require( - globalExitRootManager.globalExitRootMap( - keccak256(abi.encodePacked(mainnetExitRoot, rollupExitRoot)) - ) != 0, - "Bridge::claimAsset: GLOBAL_EXIT_ROOT_DOES_NOT_MATCH" - ); - - // Destination network must be networkID - require( - destinationNetwork == networkID, - "Bridge::claimAsset: DESTINATION_NETWORK_DOES_NOT_MATCH" + ) public ifNotEmergencyState { + // Verify leaf exist and it does not ahve been claimed + _verifyLeaf( + smtProof, + index, + mainnetExitRoot, + rollupExitRoot, + originNetwork, + originTokenAddress, + destinationNetwork, + destinationAddress, + amount, + metadata, + LEAF_TYPE_ASSET ); - bytes32 claimRoot; - if (networkID == MAINNET_NETWORK_ID) { - // Verify merkle proof using rollup exit root - claimRoot = rollupExitRoot; - } else { - // Verify merkle proof using mainnet exit root - claimRoot = mainnetExitRoot; - } - require( - verifyMerkleProof( - getLeafValue( - LEAF_TYPE_ASSET, - originNetwork, - originTokenAddress, - destinationNetwork, - destinationAddress, - amount, - keccak256(metadata) - ), - smtProof, - index, - claimRoot - ), - "Bridge::claimAsset: SMT_INVALID" - ); // Update nullifier claimNullifier[index] = true; @@ -356,14 +319,6 @@ contract Bridge is DepositContract, PausableUpgradeable, IBridge { address wrappedToken = tokenInfoToWrappedToken[tokenInfoHash]; if (wrappedToken == address(0)) { - // Create a new wrapped erc20 - TokenWrapped newWrappedToken = TokenWrapped( - ClonesUpgradeable.cloneDeterministic( - tokenImplementation, - tokenInfoHash - ) - ); - // Get ERC20 metadata ( string memory name, @@ -371,14 +326,16 @@ contract Bridge is DepositContract, PausableUpgradeable, IBridge { uint8 decimals ) = abi.decode(metadata, (string, string, uint8)); - // Initialize wrapped token - newWrappedToken.initialize( - name, - symbol, - decimals, - destinationAddress, - amount - ); + // Create a new wrapped erc20 + TokenWrapped newWrappedToken = (new TokenWrapped){ + salt: tokenInfoHash + }(name, symbol, decimals); + + newWrappedToken.mint(destinationAddress, amount); + console.log(address(newWrappedToken)); + console.log(name); + console.log(symbol); + console.log(decimals); // Create mappings tokenInfoToWrappedToken[tokenInfoHash] = address( @@ -434,52 +391,20 @@ contract Bridge is DepositContract, PausableUpgradeable, IBridge { address destinationAddress, uint256 amount, bytes memory metadata - ) public whenNotPaused { - // Check nullifier - require( - claimNullifier[index] == false, - "Bridge::claimMessage: ALREADY_CLAIMED" - ); - - // Check that the merkle proof belongs to some global exit root - // TODO this should be a SMTproof - require( - globalExitRootManager.globalExitRootMap( - keccak256(abi.encodePacked(mainnetExitRoot, rollupExitRoot)) - ) != 0, - "Bridge::claimMessage: GLOBAL_EXIT_ROOT_DOES_NOT_MATCH" - ); - - // Destination network must be networkID - require( - destinationNetwork == networkID, - "Bridge::claimMessage: DESTINATION_NETWORK_DOES_NOT_MATCH" - ); - - bytes32 claimRoot; - if (networkID == MAINNET_NETWORK_ID) { - // Verify merkle proof using rollup exit root - claimRoot = rollupExitRoot; - } else { - // Verify merkle proof using mainnet exit root - claimRoot = mainnetExitRoot; - } - require( - verifyMerkleProof( - getLeafValue( - LEAF_TYPE_MESSAGE, - originNetwork, - originAddress, - destinationNetwork, - destinationAddress, - amount, - keccak256(metadata) - ), - smtProof, - index, - claimRoot - ), - "Bridge::claimMessage: SMT_INVALID" + ) public ifNotEmergencyState { + // Verify leaf exist and it does not ahve been claimed + _verifyLeaf( + smtProof, + index, + mainnetExitRoot, + rollupExitRoot, + originNetwork, + originAddress, + destinationNetwork, + destinationAddress, + amount, + metadata, + LEAF_TYPE_MESSAGE ); // Update nullifier @@ -512,16 +437,31 @@ contract Bridge is DepositContract, PausableUpgradeable, IBridge { */ function precalculatedWrapperAddress( uint32 originNetwork, - address originTokenAddress + address originTokenAddress, + string calldata name, + string calldata symbol, + uint8 decimals ) public view returns (address) { bytes32 salt = keccak256( abi.encodePacked(originNetwork, originTokenAddress) ); - return - ClonesUpgradeable.predictDeterministicAddress( - tokenImplementation, - salt - ); + + bytes32 hashCreate2 = keccak256( + abi.encodePacked( + bytes1(0xff), + address(this), + salt, + keccak256( + abi.encodePacked( + type(TokenWrapped).creationCode, + abi.encode(name, symbol, decimals) + ) + ) + ) + ); + + // csat last 20 bytes of hash to address + return address(uint160(uint256(hashCreate2))); } /** @@ -540,19 +480,80 @@ contract Bridge is DepositContract, PausableUpgradeable, IBridge { } /** - * @notice Function to pause the contract - " Can only be called by the proof of efficiency in extreme situations + * @notice Function to activate the emergency state + " Only can be called by the proof of efficiency in extreme situations */ - function pause() external onlyProofOfEfficiency { - _pause(); + function activateEmergencyState() external onlyProofOfEfficiency { + _activateEmergencyState(); } /** - * @notice Function to unpause the contract - " Can only be called by the proof of efficiency + * @notice Function to deactivate the emergency state + " Only can be called by the proof of efficiency */ - function unpause() external onlyProofOfEfficiency { - _unpause(); + function deactivateEmergencyState() external onlyProofOfEfficiency { + _deactivateEmergencyState(); + } + + function _verifyLeaf( + bytes32[] memory smtProof, + uint32 index, + bytes32 mainnetExitRoot, + bytes32 rollupExitRoot, + uint32 originNetwork, + address originAddress, + uint32 destinationNetwork, + address destinationAddress, + uint256 amount, + bytes memory metadata, + uint8 leafType + ) internal { + // Check nullifier + require( + claimNullifier[index] == false, + "Bridge::_verifyLeaf: ALREADY_CLAIMED" + ); + + // Check that the merkle proof belongs to some global exit root + // TODO this should be a SMTproof + require( + globalExitRootManager.globalExitRootMap( + keccak256(abi.encodePacked(mainnetExitRoot, rollupExitRoot)) + ) != 0, + "Bridge::_verifyLeaf: GLOBAL_EXIT_ROOT_DOES_NOT_MATCH" + ); + + // Destination network must be networkID + require( + destinationNetwork == networkID, + "Bridge::_verifyLeaf: DESTINATION_NETWORK_DOES_NOT_MATCH" + ); + + bytes32 claimRoot; + if (networkID == MAINNET_NETWORK_ID) { + // Verify merkle proof using rollup exit root + claimRoot = rollupExitRoot; + } else { + // Verify merkle proof using mainnet exit root + claimRoot = mainnetExitRoot; + } + require( + verifyMerkleProof( + getLeafValue( + leafType, + originNetwork, + originAddress, + destinationNetwork, + destinationAddress, + amount, + keccak256(metadata) + ), + smtProof, + index, + claimRoot + ), + "Bridge::_verifyLeaf: SMT_INVALID" + ); } /** diff --git a/contracts/GlobalExitRootManager.sol b/contracts/GlobalExitRootManager.sol index 08cb66204..5b8715882 100644 --- a/contracts/GlobalExitRootManager.sol +++ b/contracts/GlobalExitRootManager.sol @@ -67,9 +67,8 @@ contract GlobalExitRootManager is IGlobalExitRootManager, Initializable { // If it already exist, do not modify the timestamp if (globalExitRootMap[newGlobalExitRoot] == 0) { globalExitRootMap[newGlobalExitRoot] = block.timestamp; + emit UpdateGlobalExitRoot(lastMainnetExitRoot, lastRollupExitRoot); } - - emit UpdateGlobalExitRoot(lastMainnetExitRoot, lastRollupExitRoot); } /** diff --git a/contracts/ProofOfEfficiency.sol b/contracts/ProofOfEfficiency.sol index 99eb7ace1..16cd12347 100644 --- a/contracts/ProofOfEfficiency.sol +++ b/contracts/ProofOfEfficiency.sol @@ -6,9 +6,9 @@ import "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20Burnable import "./interfaces/IVerifierRollup.sol"; import "./interfaces/IGlobalExitRootManager.sol"; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; -import "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; import "./interfaces/IBridge.sol"; +import "./lib/EmergencyManager.sol"; /** * Contract responsible for managing the states and the updates of L2 network @@ -21,7 +21,7 @@ import "./interfaces/IBridge.sol"; contract ProofOfEfficiency is Initializable, OwnableUpgradeable, - PausableUpgradeable + EmergencyManager { using SafeERC20Upgradeable for IERC20Upgradeable; @@ -181,6 +181,11 @@ contract ProofOfEfficiency is */ event SetTrustedSequencerURL(string newTrustedSequencerURL); + /** + * @dev Emitted when security council update his address + */ + event SetSecurityCouncil(address newSecurityCouncil); + /** * @dev Emitted when is proved a different state given the same batches */ @@ -222,7 +227,6 @@ contract ProofOfEfficiency is // Initialize OZ contracts __Ownable_init_unchained(); - __Pausable_init_unchained(); } modifier onlySecurityCouncil() { @@ -256,7 +260,7 @@ contract ProofOfEfficiency is */ function sequenceBatches(BatchData[] memory batches) public - whenNotPaused + ifNotEmergencyState onlyTrustedSequencer { uint256 batchesNum = batches.length; @@ -380,7 +384,7 @@ contract ProofOfEfficiency is uint256[2] calldata proofA, uint256[2][2] calldata proofB, uint256[2] calldata proofC - ) public whenNotPaused { + ) public ifNotEmergencyState { require( initNumBatch <= lastVerifiedBatch, "ProofOfEfficiency::verifyBatches: initNumBatch must be less or equal than lastVerifiedBatch" @@ -431,7 +435,7 @@ contract ProofOfEfficiency is */ function forceBatch(bytes memory transactions, uint256 maticAmount) public - whenNotPaused + ifNotEmergencyState isForceBatchAllowed { // Calculate matic collateral @@ -484,7 +488,7 @@ contract ProofOfEfficiency is */ function sequenceForceBatches(ForceBatchData[] memory batches) public - whenNotPaused + ifNotEmergencyState isForceBatchAllowed { uint256 batchesNum = batches.length; @@ -598,24 +602,16 @@ contract ProofOfEfficiency is } /** - * @notice Function to calculate the sequencer collateral depending on the congestion of the batches - // TODO + * @notice Allow the current security council to set a new security council address + * @param newSecurityCouncil Address of the new security council */ - function calculateForceProverFee() public view returns (uint256) { - return 1 ether * uint256(1 + lastForceBatch - lastForceBatchSequenced); - } - - /** - * @notice Function to calculate the reward to verify a single batch - */ - function calculateRewardPerBatch() public view returns (uint256) { - uint256 currentBalance = matic.balanceOf(address(this)); + function setSecurityCouncil(address newSecurityCouncil) + public + onlySecurityCouncil + { + securityCouncil = newSecurityCouncil; - // Total Sequenced Batches = forcedBatches to be sequenced (total forced Batches - sequenced Batches) + sequencedBatches - // Total Batches to be verified = Total Sequenced Batches - verified Batches - uint256 totalBatchesToVerify = ((lastForceBatch - - lastForceBatchSequenced) + lastBatchSequenced) - lastVerifiedBatch; - return currentBalance / totalBatchesToVerify; + emit SetSecurityCouncil(newSecurityCouncil); } /** @@ -636,7 +632,7 @@ contract ProofOfEfficiency is uint256[2] calldata proofA, uint256[2][2] calldata proofB, uint256[2] calldata proofC - ) public { + ) public ifNotEmergencyState { require( initNumBatch < finalNewBatch, "ProofOfEfficiency::proofDifferentState: finalNewBatch must be bigger than initNumBatch" @@ -683,46 +679,55 @@ contract ProofOfEfficiency is batchNumToStateRoot[finalNewBatch], newStateRoot ); + + // Activate emergency state _activateEmergencyState(); } /** - * @notice Function to activate emergency state, pause both PoE and Bridge contrats - * Only can be called by a owner in the bootstrap phase, once the owner is renounced, the system - * can only be paused proving a distinct state root givne the same batches + * @notice Function to activate emergency state on both PoE and Bridge contrats + * Only can be called by the owner in the bootstrap phase, once the owner is renounced, the system + * can only be put on this state by proving a distinct state root given the same batches */ - function activateEmergencyState() external onlyOwner { + function activateEmergencyState() external ifNotEmergencyState onlyOwner { _activateEmergencyState(); } /** - * @notice Function to deactivate emergency state, unpause both PoE and Bridge contrats + * @notice Function to deactivate emergency state on both PoE and Bridge contrats * Only can be called by the security council */ - function deactivateEmergencyState() external onlySecurityCouncil { - _deactivateEmergencyState(); + function deactivateEmergencyState() + external + ifEmergencyState + onlySecurityCouncil + { + // Deactivate emergency state on bridge + bridgeAddress.deactivateEmergencyState(); + + // Deactivate emergency state on this contract + super._deactivateEmergencyState(); } /** - * @notice Function to activate emergency state, pause both PoE and Bridge contrats + * @notice Function to calculate the sequencer collateral depending on the congestion of the batches + // TODO */ - function _activateEmergencyState() internal { - // Pause PoE - _pause(); - - // Pause brige - bridgeAddress.pause(); + function calculateForceProverFee() public view returns (uint256) { + return 1 ether * uint256(1 + lastForceBatch - lastForceBatchSequenced); } /** - * @notice Function to activate emergency state, pause both PoE and Bridge contrats + * @notice Function to calculate the reward to verify a single batch */ - function _deactivateEmergencyState() internal { - // Unpause PoE - _unpause(); + function calculateRewardPerBatch() public view returns (uint256) { + uint256 currentBalance = matic.balanceOf(address(this)); - // Unpause brige - bridgeAddress.unpause(); + // Total Sequenced Batches = forcedBatches to be sequenced (total forced Batches - sequenced Batches) + sequencedBatches + // Total Batches to be verified = Total Sequenced Batches - verified Batches + uint256 totalBatchesToVerify = ((lastForceBatch - + lastForceBatchSequenced) + lastBatchSequenced) - lastVerifiedBatch; + return currentBalance / totalBatchesToVerify; } /** @@ -764,4 +769,15 @@ contract ProofOfEfficiency is finalNewBatch ); } + + /** + * @notice Internal function to activate emergency state on both PoE and Bridge contrats + */ + function _activateEmergencyState() internal override { + // Activate emergency state on bridge + bridgeAddress.activateEmergencyState(); + + // Activate emergency state on this contract + super._activateEmergencyState(); + } } diff --git a/contracts/interfaces/IBridge.sol b/contracts/interfaces/IBridge.sol index 605ec21b0..adab6bae7 100644 --- a/contracts/interfaces/IBridge.sol +++ b/contracts/interfaces/IBridge.sol @@ -43,7 +43,7 @@ interface IBridge { bytes memory metadata ) external; - function pause() external; + function activateEmergencyState() external; - function unpause() external; + function deactivateEmergencyState() external; } diff --git a/contracts/lib/EmergencyManager.sol b/contracts/lib/EmergencyManager.sol new file mode 100644 index 000000000..d94faa6ff --- /dev/null +++ b/contracts/lib/EmergencyManager.sol @@ -0,0 +1,59 @@ +// SPDX-License-Identifier: AGPL-3.0 + +pragma solidity 0.8.15; + +/** + * @dev Contract helper responsible to manage the emergency state + */ +contract EmergencyManager { + // Indicates wheather the emergency state is active or not + bool public isEmergencyState; + + /** + * @dev Emitted when emergency state is activated + */ + event EmergencyStateActivated(); + + /** + * @dev Emitted when emergency state is deactivated + */ + event EmergencyStateDeactivated(); + + /** + * @notice Only allows a function to be callable if emergency state is unactive + */ + modifier ifNotEmergencyState() { + require( + !isEmergencyState, + "EmergencyManager::ifNotEmergencyState: only if not emergency state" + ); + _; + } + + /** + * @notice Only allows a function to be callable if emergency state is active + */ + modifier ifEmergencyState() { + require( + !isEmergencyState, + "EmergencyManager::ifEmergencyState: only if emergency state" + ); + _; + } + + /** + * @notice Activate emergency state + */ + function _activateEmergencyState() internal virtual ifNotEmergencyState { + isEmergencyState = true; + emit EmergencyStateActivated(); + } + + /** + * @notice Deactivate emergency state + */ + function _deactivateEmergencyState() internal virtual ifEmergencyState { + isEmergencyState = false; + emit EmergencyStateDeactivated(); + } +} diff --git a/contracts/lib/TokenWrapped.sol b/contracts/lib/TokenWrapped.sol index 76cbecbc0..2bd550a27 100644 --- a/contracts/lib/TokenWrapped.sol +++ b/contracts/lib/TokenWrapped.sol @@ -1,32 +1,58 @@ // SPDX-License-Identifier: GPL-3.0 - +// Implementation of permit based on https://github.com/WETH10/WETH10/blob/main/contracts/WETH10.sol pragma solidity 0.8.15; -import "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; + +contract TokenWrapped is ERC20 { + // Domain typehash + bytes32 public constant DOMAIN_TYPEHASH = + keccak256( + "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" + ); + // Permit typehash + bytes32 public constant PERMIT_TYPEHASH = + keccak256( + "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" + ); + + // Version + string public constant VERSION = "1"; + + // Chain id on deployment + uint256 public immutable deploymentChainId; + + // Domain separator calculated on deployment + bytes32 private immutable _DEPLOYMENT_DOMAIN_SEPARATOR; -contract TokenWrapped is Initializable, ERC20Upgradeable { + // Bridge address address public bridgeAddress; + + // Decimals uint8 private _decimals; + // Permit nonces + mapping(address => uint256) public nonces; + modifier onlyBridge() { - require(msg.sender == bridgeAddress, "TokenWrapped:NOT_BRIDGE"); + require( + msg.sender == bridgeAddress, + "TokenWrapped::onlyBridge: NOT_BRIDGE" + ); _; } - // This is used to avoid the initialization of the implementation contract. - constructor() initializer {} - - function initialize( + constructor( string memory name, string memory symbol, - uint8 decimals, - address initialAccount, - uint256 initialBalance - ) public initializer { - __ERC20_init(name, symbol); + uint8 decimals + ) ERC20(name, symbol) { bridgeAddress = msg.sender; _decimals = decimals; - _mint(initialAccount, initialBalance); + + // initialize inmutable variables + deploymentChainId = block.chainid; + _DEPLOYMENT_DOMAIN_SEPARATOR = _calculateDomainSeparator(block.chainid); } function mint(address to, uint256 value) @@ -50,4 +76,72 @@ contract TokenWrapped is Initializable, ERC20Upgradeable { function decimals() public view virtual override returns (uint8) { return _decimals; } + + // Permit relative functions + function permit( + address owner, + address spender, + uint256 value, + uint256 deadline, + uint8 v, + bytes32 r, + bytes32 s + ) external { + require( + block.timestamp <= deadline, + "TokenWrapped::permit: Expired permit" + ); + + bytes32 hashStruct = keccak256( + abi.encode( + PERMIT_TYPEHASH, + owner, + spender, + value, + nonces[owner]++, + deadline + ) + ); + + bytes32 digest = keccak256( + abi.encodePacked("\x19\x01", DOMAIN_SEPARATOR(), hashStruct) + ); + + address signer = ecrecover(digest, v, r, s); + require( + signer != address(0) && signer == owner, + "TokenWrapped::permit: Invalid signature" + ); + + _approve(owner, spender, value); + } + + /** + * @notice Calculate domain separator, given a chainID. + * @param chainId Current chainID + */ + function _calculateDomainSeparator(uint256 chainId) + private + view + returns (bytes32) + { + return + keccak256( + abi.encode( + DOMAIN_TYPEHASH, + keccak256(bytes(name())), + keccak256(bytes(VERSION)), + chainId, + address(this) + ) + ); + } + + /// @dev Return the DOMAIN_SEPARATOR. + function DOMAIN_SEPARATOR() public view returns (bytes32) { + return + block.chainid == deploymentChainId + ? _DEPLOYMENT_DOMAIN_SEPARATOR + : _calculateDomainSeparator(block.chainid); + } } diff --git a/contracts/mocks/BridgeMock.sol b/contracts/mocks/BridgeMock.sol index 8b8387c26..958c874f6 100644 --- a/contracts/mocks/BridgeMock.sol +++ b/contracts/mocks/BridgeMock.sol @@ -21,9 +21,7 @@ contract BridgeMock is Bridge, OwnableUpgradeable { ) public override initializer { networkID = _networkID; globalExitRootManager = _globalExitRootManager; - tokenImplementation = address(new TokenWrapped()); poeAddress = _poeAddress; - __Pausable_init_unchained(); __Ownable_init(); maxEtherBridge = 0.25 ether; diff --git a/docs/Bridge.md b/docs/Bridge.md index 1f0ee9126..08bb6630f 100644 --- a/docs/Bridge.md +++ b/docs/Bridge.md @@ -154,23 +154,32 @@ Returns the address of a wrapper using the token information if already exist |`originNetwork` | uint32 | Origin network |`originTokenAddress` | address | Origin token address, 0 address is reserved for ether -### pause +### activateEmergencyState ```solidity - function pause( + function activateEmergencyState( ) external ``` -Function to pause the contract - " Can only be called by the proof of efficiency in extreme situations +Function to activate the emergency state + " Only can be called by the proof of efficiency in extreme situations -### unpause +### deactivateEmergencyState ```solidity - function unpause( + function deactivateEmergencyState( ) external ``` -Function to unpause the contract - " Can only be called by the proof of efficiency +Function to deactivate the emergency state + " Only can be called by the proof of efficiency + + + +### _verifyLeaf +```solidity + function _verifyLeaf( + ) internal +``` + diff --git a/docs/ProofOfEfficiency.md b/docs/ProofOfEfficiency.md index a0e2729a4..e37c67bc2 100644 --- a/docs/ProofOfEfficiency.md +++ b/docs/ProofOfEfficiency.md @@ -149,24 +149,19 @@ Allow the trusted sequencer to set the trusted sequencer URL | :--- | :--- | :------------------------------------------------------------------- | |`newTrustedSequencerURL` | string | URL of trusted sequencer -### calculateForceProverFee -```solidity - function calculateForceProverFee( - ) public returns (uint256) -``` -Function to calculate the sequencer collateral depending on the congestion of the batches - // TODO - - - -### calculateRewardPerBatch +### setSecurityCouncil ```solidity - function calculateRewardPerBatch( - ) public returns (uint256) + function setSecurityCouncil( + address newSecurityCouncil + ) public ``` -Function to calculate the reward to verify a single batch +Allow the current security council to set a new security council address +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`newSecurityCouncil` | address | Address of the new security council ### proofDifferentState ```solidity @@ -199,9 +194,9 @@ Allows to stop the zk-evm if its possible to proof a different state root give t function activateEmergencyState( ) external ``` -Function to activate emergency state, pause both PoE and Bridge contrats -Only can be called by a owner in the bootstrap phase, once the owner is renounced, the system -can only be paused proving a distinct state root givne the same batches +Function to activate emergency state on both PoE and Bridge contrats +Only can be called by the owner in the bootstrap phase, once the owner is renounced, the system +can only be put on this state by proving a distinct state root given the same batches @@ -210,26 +205,27 @@ can only be paused proving a distinct state root givne the same batches function deactivateEmergencyState( ) external ``` -Function to deactivate emergency state, unpause both PoE and Bridge contrats +Function to deactivate emergency state on both PoE and Bridge contrats Only can be called by the security council -### _activateEmergencyState +### calculateForceProverFee ```solidity - function _activateEmergencyState( - ) internal + function calculateForceProverFee( + ) public returns (uint256) ``` -Function to activate emergency state, pause both PoE and Bridge contrats +Function to calculate the sequencer collateral depending on the congestion of the batches + // TODO -### _deactivateEmergencyState +### calculateRewardPerBatch ```solidity - function _deactivateEmergencyState( - ) internal + function calculateRewardPerBatch( + ) public returns (uint256) ``` -Function to activate emergency state, pause both PoE and Bridge contrats +Function to calculate the reward to verify a single batch @@ -253,6 +249,15 @@ Function to calculate the input snark bytes |`newLocalExitRoot` | bytes32 | New local exit root once the batch is processed |`newStateRoot` | bytes32 | New State root once the batch is processed +### _activateEmergencyState +```solidity + function _activateEmergencyState( + ) internal +``` +Internal function to activate emergency state on both PoE and Bridge contrats + + + ## Events ### SequenceBatches ```solidity @@ -310,6 +315,14 @@ Emitted when a trusted sequencer update the forcebatch boolean Emitted when a trusted sequencer update his URL +### SetSecurityCouncil +```solidity + event SetSecurityCouncil( + ) +``` + +Emitted when security council update his address + ### ProofDifferentState ```solidity event ProofDifferentState( diff --git a/docs/lib/EmergencyManager.md b/docs/lib/EmergencyManager.md new file mode 100644 index 000000000..c1b6860f3 --- /dev/null +++ b/docs/lib/EmergencyManager.md @@ -0,0 +1,39 @@ + +Contract helper responsible to manage the emergency state + +## Functions +### _activateEmergencyState +```solidity + function _activateEmergencyState( + ) internal +``` +Activate emergency state + + + +### _deactivateEmergencyState +```solidity + function _deactivateEmergencyState( + ) internal +``` +Deactivate emergency state + + + +## Events +### EmergencyStateActivated +```solidity + event EmergencyStateActivated( + ) +``` + +Emitted when emergency state is activated + +### EmergencyStateDeactivated +```solidity + event EmergencyStateDeactivated( + ) +``` + +Emitted when emergency state is deactivated + diff --git a/docs/lib/TokenWrapped.md b/docs/lib/TokenWrapped.md index 8a2f1553b..d28fcc887 100644 --- a/docs/lib/TokenWrapped.md +++ b/docs/lib/TokenWrapped.md @@ -2,9 +2,9 @@ ## Functions -### initialize +### constructor ```solidity - function initialize( + function constructor( ) public ``` @@ -38,3 +38,21 @@ +### permit +```solidity + function permit( + ) external +``` + + + + +### DOMAIN_SEPARATOR +```solidity + function DOMAIN_SEPARATOR( + ) public returns (bytes32) +``` + +Return the DOMAIN_SEPARATOR. + + diff --git a/hardhat.config.js b/hardhat.config.js index c8a92958a..1e2346609 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -21,7 +21,7 @@ module.exports = { settings: { optimizer: { enabled: true, - runs: 999999 + runs: 9999 } } }, @@ -113,7 +113,7 @@ module.exports = { gasReporter: { currency: "USD", coinmarketcap: process.env.COINMARKETCAP_KEY, - enabled: process.env.REPORT_GAS ? true : false, + enabled: true, }, etherscan: { apiKey: `${process.env.ETHERSCAN_API_KEY}` diff --git a/test/contracts/bridge.test.js b/test/contracts/bridge.test.js index 66bad4212..2df6e16d0 100644 --- a/test/contracts/bridge.test.js +++ b/test/contracts/bridge.test.js @@ -34,6 +34,8 @@ describe('Bridge Contract', () => { const LEAF_TYPE_ASSET = 0; const MESSAGE_TYPE_ASSET = 1; + const proofOfEfficiencyAddress = ethers.constants.AddressZero; + beforeEach('Deploy contracts', async () => { // load signers [deployer, rollup, acc1] = await ethers.getSigners(); @@ -47,7 +49,8 @@ describe('Bridge Contract', () => { bridgeContract = await upgrades.deployProxy(bridgeFactory, [], { initializer: false }); await globalExitRootManager.initialize(rollup.address, bridgeContract.address); - await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address); + + await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, proofOfEfficiencyAddress); // deploy token const maticTokenFactory = await ethers.getContractFactory('ERC20PermitMock'); @@ -63,12 +66,6 @@ describe('Bridge Contract', () => { it('should check the constructor parameters', async () => { expect(await bridgeContract.globalExitRootManager()).to.be.equal(globalExitRootManager.address); expect(await bridgeContract.networkID()).to.be.equal(networkIDMainnet); - - // Smart contracts start with nonce = 1 - const calcualteImplAddr = await ethers.utils.getContractAddress( - { from: bridgeContract.address, nonce: 1 }, - ); - expect(await bridgeContract.tokenImplementation()).to.be.equal(calcualteImplAddr); }); it('should bridge and verify merkle proof', async () => { @@ -86,7 +83,6 @@ describe('Bridge Contract', () => { const balanceBridge = await tokenContract.balanceOf(bridgeContract.address); const rollupExitRoot = await globalExitRootManager.lastRollupExitRoot(); - const lastGlobalExitRootNum = await globalExitRootManager.lastGlobalExitRootNum(); // create a new deposit await expect(tokenContract.approve(bridgeContract.address, amount)) @@ -112,7 +108,7 @@ describe('Bridge Contract', () => { .to.emit(bridgeContract, 'BridgeEvent') .withArgs(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount) .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') - .withArgs(lastGlobalExitRootNum + 1, rootJSMainnet, rollupExitRoot); + .withArgs(rootJSMainnet, rollupExitRoot); expect(await tokenContract.balanceOf(deployer.address)).to.be.equal(balanceDeployer.sub(amount)); expect(await tokenContract.balanceOf(bridgeContract.address)).to.be.equal(balanceBridge.add(amount)); @@ -149,7 +145,6 @@ describe('Bridge Contract', () => { const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); const mainnetExitRoot = await globalExitRootManager.lastMainnetExitRoot(); - let lastGlobalExitRootNum = await globalExitRootManager.lastGlobalExitRootNum(); // compute root merkle tree in Js const height = 32; @@ -175,7 +170,7 @@ describe('Bridge Contract', () => { // add rollup Merkle root await expect(globalExitRootManager.connect(rollup).updateExitRoot(rootJSRollup)) .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') - .withArgs(lastGlobalExitRootNum + 1, mainnetExitRoot, rootJSRollup); + .withArgs(mainnetExitRoot, rootJSRollup); // check roots const rollupExitRootSC = await globalExitRootManager.lastRollupExitRoot(); @@ -187,7 +182,6 @@ describe('Bridge Contract', () => { // check merkle proof const proof = merkleTree.getProofTreeByIndex(0); const index = 0; - lastGlobalExitRootNum += 1; // verify merkle proof expect(verifyMerkleProof(leafValue, proof, index, rootJSRollup)).to.be.equal(true); @@ -254,7 +248,7 @@ describe('Bridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('Bridge::claim: ALREADY_CLAIMED'); + )).to.be.revertedWith('Bridge::_verifyLeaf: ALREADY_CLAIMED'); }); it('should claim tokens from Rollup to Mainnet', async () => { @@ -268,7 +262,6 @@ describe('Bridge Contract', () => { const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); const mainnetExitRoot = await globalExitRootManager.lastMainnetExitRoot(); - let lastGlobalExitRootNum = await globalExitRootManager.lastGlobalExitRootNum(); // compute root merkle tree in Js const height = 32; @@ -294,7 +287,7 @@ describe('Bridge Contract', () => { // add rollup Merkle root await expect(globalExitRootManager.connect(rollup).updateExitRoot(rootJSRollup)) .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') - .withArgs(lastGlobalExitRootNum + 1, mainnetExitRoot, rootJSRollup); + .withArgs(mainnetExitRoot, rootJSRollup); // check roots const rollupExitRootSC = await globalExitRootManager.lastRollupExitRoot(); @@ -306,7 +299,6 @@ describe('Bridge Contract', () => { // check merkle proof const proof = merkleTreeRollup.getProofTreeByIndex(0); const index = 0; - lastGlobalExitRootNum += 1; // verify merkle proof expect(verifyMerkleProof(leafValue, proof, index, rootJSRollup)).to.be.equal(true); @@ -323,12 +315,9 @@ describe('Bridge Contract', () => { const tokenWrappedFactory = await ethers.getContractFactory('TokenWrapped'); // create2 parameters - const tokenImplementationAddress = await bridgeContract.tokenImplementation(); const salt = ethers.utils.solidityKeccak256(['uint32', 'address'], [networkIDRollup, tokenAddress]); - // Bytecode proxy from this blog https://blog.openzeppelin.com/deep-dive-into-the-minimal-proxy-contract/ - const minimalBytecodeProxy = `0x3d602d80600a3d3981f3363d3d373d3d3d363d73${tokenImplementationAddress.slice(2)}5af43d82803e903d91602b57fd5bf3`; - const hashInitCode = ethers.utils.keccak256(minimalBytecodeProxy); - + const minimalBytecodeProxy = tokenWrappedFactory.bytecode; + const hashInitCode = ethers.utils.solidityKeccak256(['bytes', 'bytes'], [minimalBytecodeProxy, metadataToken]); const precalculateWrappedErc20 = await ethers.utils.getCreate2Address(bridgeContract.address, salt, hashInitCode); const newWrappedToken = tokenWrappedFactory.attach(precalculateWrappedErc20); @@ -383,7 +372,7 @@ describe('Bridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('Bridge::claim: ALREADY_CLAIMED'); + )).to.be.revertedWith('Bridge::_verifyLeaf: ALREADY_CLAIMED'); // Check new token expect(await newWrappedToken.totalSupply()).to.be.equal(amount); @@ -394,7 +383,6 @@ describe('Bridge Contract', () => { const newDestinationNetwork = networkIDRollup; const rollupExitRoot = await globalExitRootManager.lastRollupExitRoot(); - lastGlobalExitRootNum = await globalExitRootManager.lastGlobalExitRootNum(); // create a new deposit await expect(newWrappedToken.approve(bridgeContract.address, amount)) @@ -439,7 +427,7 @@ describe('Bridge Contract', () => { .to.emit(bridgeContract, 'BridgeEvent') .withArgs(originNetwork, originTokenAddress, newDestinationNetwork, destinationAddress, amount, metadataMainnet, depositCount) .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') - .withArgs(Number(lastGlobalExitRootNum) + 1, rootJSMainnet, rollupExitRoot) + .withArgs(rootJSMainnet, rollupExitRoot) .to.emit(newWrappedToken, 'Transfer') .withArgs(deployer.address, ethers.constants.AddressZero, amount); @@ -594,7 +582,6 @@ describe('Bridge Contract', () => { const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); const mainnetExitRoot = await globalExitRootManager.lastMainnetExitRoot(); - let lastGlobalExitRootNum = await globalExitRootManager.lastGlobalExitRootNum(); // compute root merkle tree in Js const height = 32; @@ -616,7 +603,7 @@ describe('Bridge Contract', () => { // add rollup Merkle root await expect(globalExitRootManager.connect(rollup).updateExitRoot(rootJSRollup)) .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') - .withArgs(lastGlobalExitRootNum + 1, mainnetExitRoot, rootJSRollup); + .withArgs(mainnetExitRoot, rootJSRollup); // check roots const rollupExitRootSC = await globalExitRootManager.lastRollupExitRoot(); @@ -628,7 +615,6 @@ describe('Bridge Contract', () => { // check merkle proof const proof = merkleTree.getProofTreeByIndex(0); const index = 0; - lastGlobalExitRootNum += 1; // verify merkle proof expect(verifyMerkleProof(leafValue, proof, index, rootJSRollup)).to.be.equal(true); @@ -670,7 +656,7 @@ describe('Bridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('Bridge::claim: DESTINATION_NETWORK_DOES_NOT_MATCH'); + )).to.be.revertedWith('Bridge::_verifyLeaf: DESTINATION_NETWORK_DOES_NOT_MATCH'); // Check GLOBAL_EXIT_ROOT_DOES_NOT_MATCH assert await expect(bridgeContract.claimAsset( @@ -684,7 +670,7 @@ describe('Bridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('Bridge::claim: GLOBAL_EXIT_ROOT_DOES_NOT_MATCH'); + )).to.be.revertedWith('Bridge::_verifyLeaf: GLOBAL_EXIT_ROOT_DOES_NOT_MATCH'); // Check SMT_INVALID assert await expect(bridgeContract.claimAsset( @@ -698,7 +684,7 @@ describe('Bridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('Bridge::claim: SMT_INVALID'); + )).to.be.revertedWith('Bridge::_verifyLeaf: SMT_INVALID'); await expect(bridgeContract.claimAsset( proof, @@ -734,7 +720,7 @@ describe('Bridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('Bridge::claim: ALREADY_CLAIMED'); + )).to.be.revertedWith('Bridge::_verifyLeaf: ALREADY_CLAIMED'); }); it('should claim ether', async () => { @@ -749,7 +735,6 @@ describe('Bridge Contract', () => { const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); const mainnetExitRoot = await globalExitRootManager.lastMainnetExitRoot(); - let lastGlobalExitRootNum = await globalExitRootManager.lastGlobalExitRootNum(); // compute root merkle tree in Js const height = 32; @@ -771,7 +756,7 @@ describe('Bridge Contract', () => { // add rollup Merkle root await expect(globalExitRootManager.connect(rollup).updateExitRoot(rootJSRollup)) .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') - .withArgs(lastGlobalExitRootNum + 1, mainnetExitRoot, rootJSRollup); + .withArgs(mainnetExitRoot, rootJSRollup); // check roots const rollupExitRootSC = await globalExitRootManager.lastRollupExitRoot(); @@ -783,7 +768,6 @@ describe('Bridge Contract', () => { // check merkle proof const proof = merkleTree.getProofTreeByIndex(0); const index = 0; - lastGlobalExitRootNum += 1; // verify merkle proof expect(verifyMerkleProof(leafValue, proof, index, rootJSRollup)).to.be.equal(true); @@ -809,7 +793,7 @@ describe('Bridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('Bridge::claim: ETH_TRANSFER_FAILED'); + )).to.be.revertedWith('Bridge::claimAsset: ETH_TRANSFER_FAILED'); const balanceDeployer = await ethers.provider.getBalance(deployer.address); /* @@ -886,7 +870,7 @@ describe('Bridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('Bridge::claim: ALREADY_CLAIMED'); + )).to.be.revertedWith('Bridge::_verifyLeaf: ALREADY_CLAIMED'); }); it('should claim message', async () => { @@ -901,7 +885,6 @@ describe('Bridge Contract', () => { const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); const mainnetExitRoot = await globalExitRootManager.lastMainnetExitRoot(); - let lastGlobalExitRootNum = await globalExitRootManager.lastGlobalExitRootNum(); // compute root merkle tree in Js const height = 32; @@ -923,7 +906,7 @@ describe('Bridge Contract', () => { // add rollup Merkle root await expect(globalExitRootManager.connect(rollup).updateExitRoot(rootJSRollup)) .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') - .withArgs(lastGlobalExitRootNum + 1, mainnetExitRoot, rootJSRollup); + .withArgs(mainnetExitRoot, rootJSRollup); // check roots const rollupExitRootSC = await globalExitRootManager.lastRollupExitRoot(); @@ -935,7 +918,6 @@ describe('Bridge Contract', () => { // check merkle proof const proof = merkleTree.getProofTreeByIndex(0); const index = 0; - lastGlobalExitRootNum += 1; // verify merkle proof expect(verifyMerkleProof(leafValue, proof, index, rootJSRollup)).to.be.equal(true); @@ -961,7 +943,7 @@ describe('Bridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('Bridge::claim: SMT_INVALID'); + )).to.be.revertedWith('Bridge::_verifyLeaf: SMT_INVALID'); /* * claim @@ -1030,7 +1012,7 @@ describe('Bridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('Bridge::claim: SMT_INVALID'); + )).to.be.revertedWith('Bridge::_verifyLeaf: SMT_INVALID'); await expect(bridgeContract.claimMessage( proof, @@ -1069,6 +1051,6 @@ describe('Bridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('Bridge::claim: ALREADY_CLAIMED'); + )).to.be.revertedWith('Bridge::_verifyLeaf: ALREADY_CLAIMED'); }); }); From cc8e867abcbadfc3ec4789511ea60691ee54dfb4 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Mon, 21 Nov 2022 00:09:18 +0100 Subject: [PATCH 20/71] almost done --- compiled-contracts/Bridge.json | 100 ++++++- compiled-contracts/BridgeMock.json | 48 ++- compiled-contracts/ProofOfEfficiency.json | 9 +- compiled-contracts/ProofOfEfficiencyMock.json | 9 +- compiled-contracts/Verifier.json | 4 +- contracts/Bridge.sol | 57 +++- contracts/ProofOfEfficiency.sol | 14 +- contracts/mocks/BridgeMock.sol | 8 +- contracts/verifiers/Verifier.sol | 16 +- docs/Bridge.md | 18 ++ docs/ProofOfEfficiency.md | 6 +- hardhat.config.js | 2 +- src/permit-helper.js | 3 +- test/contracts/bridge.test.js | 150 +++++++++- test/contracts/bridgeMock.test.js | 13 +- test/contracts/bridge_permit.test.js | 25 +- test/contracts/emergencyModeTest.js | 275 ++++++++++++++++++ test/contracts/globalExitRootManager.test.js | 8 +- .../contracts/globalExitRootManagerL2.test.js | 4 +- test/contracts/proofOfEfficiency.test.js | 18 +- test/contracts/real-prover/real-flow.test.js | 7 +- test/contracts/snark_stark_input.test.js | 3 +- 22 files changed, 714 insertions(+), 83 deletions(-) create mode 100644 test/contracts/emergencyModeTest.js diff --git a/compiled-contracts/Bridge.json b/compiled-contracts/Bridge.json index 151cad9d3..3b93bd0b9 100644 --- a/compiled-contracts/Bridge.json +++ b/compiled-contracts/Bridge.json @@ -145,6 +145,38 @@ "name": "NewWrappedToken", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newClaimTimeout", + "type": "uint256" + } + ], + "name": "SetClaimTimeout", + "type": "event" + }, { "inputs": [], "name": "LEAF_TYPE_ASSET", @@ -382,6 +414,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "claimTimeout", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "deactivateEmergencyState", @@ -517,6 +562,11 @@ "internalType": "address", "name": "_poeAddress", "type": "address" + }, + { + "internalType": "uint256", + "name": "_claimTimeout", + "type": "uint256" } ], "name": "initialize", @@ -550,6 +600,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "poeAddress", @@ -602,6 +665,26 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newClaimTimeout", + "type": "uint256" + } + ], + "name": "setClaimTimeout", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -621,6 +704,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -680,8 +776,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506157fb806100206000396000f3fe6080604052600436106200019f5760003560e01c80637b6323c111620000e7578063d02103ca1162000089578063e73758811162000060578063e7375881146200059d578063ed6be5c914620005d1578063ff634ed714620005e857600080fd5b8063d02103ca146200054c578063d96a15f7146200056e578063dbc16976146200058557600080fd5b8063a08e8a0811620000be578063a08e8a0814620004c3578063aaa13cc214620004ed578063bab161bf146200051257600080fd5b80637b6323c1146200044257806381b1c17414620004675780638f61151914620004a157600080fd5b8063318aee3d11620001515780633e19704311620001285780633e19704314620003175780634638554914620003f8578063647c576c146200041d57600080fd5b8063318aee3d146200026b5780633ae0504714620002da5780633da8168214620002f257600080fd5b80632072f6c511620001865780632072f6c514620001ee57806322e95f2c14620002065780632dfdf0b5146200024457600080fd5b80630871e97114620001a457806315064c9614620001bd575b600080fd5b620001bb620001b536600462003077565b620005ff565b005b348015620001ca57600080fd5b50602254620001d99060ff1681565b60405190151581526020015b60405180910390f35b348015620001fb57600080fd5b50620001bb62000bae565b3480156200021357600080fd5b506200022b6200022536600462003104565b62000c62565b6040516001600160a01b039091168152602001620001e5565b3480156200025157600080fd5b506200025c60215481565b604051908152602001620001e5565b3480156200027857600080fd5b50620002b56200028a36600462003140565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001e5565b348015620002e757600080fd5b506200025c62000cf6565b348015620002ff57600080fd5b50620001d96200031136600462003241565b62000de9565b3480156200032457600080fd5b506200025c62000336366004620032bf565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200040557600080fd5b50620001bb62000417366004620033d0565b62000ee9565b3480156200042a57600080fd5b50620001bb6200043c366004620034b7565b6200116f565b3480156200044f57600080fd5b50620001bb62000461366004620033d0565b62001349565b3480156200047457600080fd5b506200022b6200048636600462003507565b6024602052600090815260409020546001600160a01b031681565b348015620004ae57600080fd5b506027546200022b906001600160a01b031681565b348015620004d057600080fd5b50620004da600081565b60405160ff9091168152602001620001e5565b348015620004fa57600080fd5b506200022b6200050c36600462003521565b6200193f565b3480156200051f57600080fd5b506022546200053690610100900463ffffffff1681565b60405163ffffffff9091168152602001620001e5565b3480156200055957600080fd5b506026546200022b906001600160a01b031681565b620001bb6200057f366004620035d5565b62001aab565b3480156200059257600080fd5b50620001bb62001d70565b348015620005aa57600080fd5b50620001d9620005bc36600462003507565b60236020526000908152604090205460ff1681565b348015620005de57600080fd5b5062000536600081565b348015620005f557600080fd5b50620004da600181565b60225460ff1615620006a45760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60225463ffffffff6101009091048116908616036200072c5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200069b565b60008060606001600160a01b038916620007c157853414620007b75760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200069b565b6000915062000a4b565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620008a8576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af11580156200086f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200089591906200364c565b5060208101518151909450925062000a49565b8415620008bd57620008bd8a88888862001e22565b620008d46001600160a01b038b1633308a62002448565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200092b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620009559190810190620036ef565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000994573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620009be9190810190620036ef565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620009fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a23919062003728565b60405160200162000a379392919062003776565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162000a8d989796959493929190620037b3565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000b3590620024fb565b6026546001600160a01b03166333d6247d62000b5062000cf6565b6040518263ffffffff1660e01b815260040162000b6f91815260200190565b600060405180830381600087803b15801562000b8a57600080fd5b505af115801562000b9f573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b0316331462000c565760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200069b565b62000c606200265f565b565b600060246000848460405160200162000cbe92919060e09290921b7fffffffff0000000000000000000000000000000000000000000000000000000016825260601b6bffffffffffffffffffffffff1916600482015260180190565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000de0578260011660010362000d61576001816020811062000d2d5762000d2d6200381f565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000d8e565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000d9b6002846200387d565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000dd790620038b9565b91505062000d01565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000edc578160011660010362000e665786818151811062000e245762000e246200381f565b60200260200101518360405160200162000e48929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000eb8565b8287828151811062000e7c5762000e7c6200381f565b602002602001015160405160200162000e9f929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000ec56002836200387d565b91508062000ed381620038b9565b91505062000df9565b5050909114949350505050565b60225460ff161562000f8a5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200069b565b62000fa08a8a8a8a8a8a8a8a8a8a600162002738565b63ffffffff8916600090815260236020526040808220805460ff19166001179055516001600160a01b03851690849062000fe39089908b908790602401620038f4565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f200000000000000000000000000000000000000000000000000000000179052516200104891906200392d565b60006040518083038185875af1925050503d806000811462001087576040519150601f19603f3d011682016040523d82523d6000602084013e6200108c565b606091505b5050905080620011045760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c45440000000000000000000000000000000000000000000000000000000060648201526084016200069b565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff1615808015620011905750600054600160ff909116105b80620011ac5750303b158015620011ac575060005460ff166001145b620012205760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200069b565b6000805460ff1916600117905580156200126157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6022805463ffffffff8616610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff909116179055602680546001600160a01b038086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255602780549285169290911691909117905580156200134357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff1615620013ea5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200069b565b620014008a8a8a8a8a8a8a8a8a8a600062002738565b63ffffffff89166000908152602360205260409020805460ff191660011790556001600160a01b0385166200151f57604080516000808252602082019092526001600160a01b0385169084906040516200145b91906200392d565b60006040518083038185875af1925050503d80600081146200149a576040519150601f19603f3d011682016040523d82523d6000602084013e6200149f565b606091505b5050905080620015185760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c45440000000000000000000000000000000000000000000000000060648201526084016200069b565b50620018d5565b60225463ffffffff61010090910481169087160362001554576200154e6001600160a01b038616848462002ac0565b620018d5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200184157600080600085806020019051810190620015f491906200394b565b9250925092506000858484846040516200160e9062002fe0565b6200161c9392919062003776565b8190604051809103906000f59050801580156200163d573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af1158015620016ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620016d191906200364c565b50620016dd8162002b0b565b620016e88462002b86565b620016f38362002b86565b620017018260ff1662002bfb565b806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200182f9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620018d2565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620018aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018d091906200364c565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620019c29062002fe0565b601f1982820381018352601f909101166040819052620019ef908d908d908d908d908d90602001620039ec565b60408051601f198184030181529082905262001a0f929160200162003a2d565b6040516020818303038152906040528051906020012060405160200162001a8594939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff161562001b4c5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200069b565b60225463ffffffff61010090910481169084160362001bd45760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200069b565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff16338686348760215460405162001c28989796959493929190620037b3565b60405180910390a16022548151602080840191909120604080517f01000000000000000000000000000000000000000000000000000000000000008185015261010090940460e090811b7fffffffff00000000000000000000000000000000000000000000000000000000908116602187015233606090811b6bffffffffffffffffffffffff199081166025890152928a901b909116603987015287901b16603d850152346051850152607180850192909252805180850390920182526091909301909252815191012062001cfd90620024fb565b6026546001600160a01b03166333d6247d62001d1862000cf6565b6040518263ffffffff1660e01b815260040162001d3791815260200190565b600060405180830381600087803b15801562001d5257600080fd5b505af115801562001d67573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b0316331462001e185760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200069b565b62000c6062002c71565b600062001e6583838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002d2192505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008216016200216757600080808080808062001ec8896004818d62003a60565b81019062001ed7919062003a8c565b9650965096509650965096509650336001600160a01b0316876001600160a01b03161462001f6e5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200069b565b6001600160a01b038616301462001fee5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200069b565b8a8514620020655760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200069b565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e16916200211391906200392d565b6000604051808303816000865af19150503d806000811462002152576040519150601f19603f3d011682016040523d82523d6000602084013e62002157565b606091505b5050505050505050505062002441565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c0000000000000000000000000000000000000000000000000000000014620021fa5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200069b565b600080808080808080620022128a6004818e62003a60565b81019062002221919062003ae7565b97509750975097509750975097509750336001600160a01b0316886001600160a01b031614620022ba5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200069b565b6001600160a01b03871630146200233a5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200069b565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f1691620023f191906200392d565b6000604051808303816000865af19150503d806000811462002430576040519150601f19603f3d011682016040523d82523d6000602084013e62002435565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b0380851660248301528316604482015260648101829052620013439085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002d28565b8060016200250c6020600262003cac565b62002518919062003cba565b60215410620025905760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200069b565b600160216000828254620025a5919062003cd4565b909155505060215460005b60208110156200264f5781600116600103620025e5578260018260208110620025dd57620025dd6200381f565b015550505050565b60018160208110620025fb57620025fb6200381f565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200263891906200387d565b9150806200264681620038b9565b915050620025b0565b506200265a62003cef565b505050565b60225460ff1615620027005760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200069b565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b63ffffffff8a1660009081526023602052604090205460ff1615620027c55760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d45440000000000000000000000000000000000000000000000000000000060648201526084016200069b565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526001600160a01b039091169063257b3632906084016020604051808303816000875af115801562002851573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002877919062003d1e565b600003620028ee5760405162461bcd60e51b815260206004820152603460248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f444f45535f4e4f545f4d4154434800000000000000000000000060648201526084016200069b565b60225463ffffffff8681166101009092041614620029755760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000000060648201526084016200069b565b602254600090610100900463ffffffff166200299357508762002996565b50885b8251602080850191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f887901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08d811b821660218401526bffffffffffffffffffffffff1960608e811b82166025860152918d901b90921660398401528a901b16603d82015260518101889052607180820193909352815180820390930183526091019052805191012062002a64908d8d63ffffffff168462000de9565b62002ab25760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c494460448201526064016200069b565b505050505050505050505050565b6040516001600160a01b0383166024820152604481018290526200265a9084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002496565b6040516001600160a01b038216602482015262002b839060440160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f2c2ecbc20000000000000000000000000000000000000000000000000000000017905262002e14565b50565b62002b838160405160240162002b9d919062003d38565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f41304fac0000000000000000000000000000000000000000000000000000000017905262002e14565b62002b838160405160240162002c1391815260200190565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff82c50f10000000000000000000000000000000000000000000000000000000017905262002e14565b60225460ff161562002cec5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016200069b565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002d7f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662002e359092919063ffffffff16565b8051909150156200265a578080602001905181019062002da091906200364c565b6200265a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200069b565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b606062002e46848460008562002e50565b90505b9392505050565b60608247101562002eca5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016200069b565b6001600160a01b0385163b62002f235760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200069b565b600080866001600160a01b0316858760405162002f4191906200392d565b60006040518083038185875af1925050503d806000811462002f80576040519150601f19603f3d011682016040523d82523d6000602084013e62002f85565b606091505b509150915062002f9782828662002fa2565b979650505050505050565b6060831562002fb357508162002e49565b82511562002fc45782518084602001fd5b8160405162461bcd60e51b81526004016200069b919062003d38565b611a788062003d4e83390190565b6001600160a01b038116811462002b8357600080fd5b8035620030118162002fee565b919050565b803563ffffffff811681146200301157600080fd5b60008083601f8401126200303e57600080fd5b50813567ffffffffffffffff8111156200305757600080fd5b6020830191508360208285010111156200307057600080fd5b9250929050565b60008060008060008060a087890312156200309157600080fd5b86356200309e8162002fee565b9550620030ae6020880162003016565b94506040870135620030c08162002fee565b935060608701359250608087013567ffffffffffffffff811115620030e457600080fd5b620030f289828a016200302b565b979a9699509497509295939492505050565b600080604083850312156200311857600080fd5b620031238362003016565b91506020830135620031358162002fee565b809150509250929050565b6000602082840312156200315357600080fd5b813562002e498162002fee565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620031bb57620031bb62003160565b604052919050565b600082601f830112620031d557600080fd5b8135602067ffffffffffffffff821115620031f457620031f462003160565b8160051b620032058282016200318f565b92835284810182019282810190878511156200322057600080fd5b83870192505b8483101562002f975782358252918301919083019062003226565b600080600080608085870312156200325857600080fd5b84359350602085013567ffffffffffffffff808211156200327857600080fd5b6200328688838901620031c3565b94506040870135915080821682146200329e57600080fd5b509396929550929360600135925050565b60ff8116811462002b8357600080fd5b600080600080600080600060e0888a031215620032db57600080fd5b8735620032e881620032af565b9650620032f86020890162003016565b955060408801356200330a8162002fee565b94506200331a6060890162003016565b935060808801356200332c8162002fee565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562003366576200336662003160565b50601f01601f191660200190565b600082601f8301126200338657600080fd5b81356200339d620033978262003349565b6200318f565b818152846020838601011115620033b357600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620033f157600080fd5b8a3567ffffffffffffffff808211156200340a57600080fd5b620034188e838f01620031c3565b9b506200342860208e0162003016565b9a5060408d0135995060608d013598506200344660808e0162003016565b97506200345660a08e0162003004565b96506200346660c08e0162003016565b95506200347660e08e0162003004565b94506101008d013593506101208d01359150808211156200349657600080fd5b50620034a58d828e0162003374565b9150509295989b9194979a5092959850565b600080600060608486031215620034cd57600080fd5b620034d88462003016565b92506020840135620034ea8162002fee565b91506040840135620034fc8162002fee565b809150509250925092565b6000602082840312156200351a57600080fd5b5035919050565b600080600080600080600060a0888a0312156200353d57600080fd5b620035488862003016565b965060208801356200355a8162002fee565b9550604088013567ffffffffffffffff808211156200357857600080fd5b620035868b838c016200302b565b909750955060608a0135915080821115620035a057600080fd5b50620035af8a828b016200302b565b9094509250506080880135620035c581620032af565b8091505092959891949750929550565b600080600060608486031215620035eb57600080fd5b620035f68462003016565b92506020840135620036088162002fee565b9150604084013567ffffffffffffffff8111156200362557600080fd5b620036338682870162003374565b9150509250925092565b801515811462002b8357600080fd5b6000602082840312156200365f57600080fd5b815162002e49816200363d565b60005b83811015620036895781810151838201526020016200366f565b83811115620013435750506000910152565b600082601f830112620036ad57600080fd5b8151620036be620033978262003349565b818152846020838601011115620036d457600080fd5b620036e78260208301602087016200366c565b949350505050565b6000602082840312156200370257600080fd5b815167ffffffffffffffff8111156200371a57600080fd5b620036e7848285016200369b565b6000602082840312156200373b57600080fd5b815162002e4981620032af565b60008151808452620037628160208601602086016200366c565b601f01601f19169290920160200192915050565b6060815260006200378b606083018662003748565b82810360208401526200379f818662003748565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620038068285018762003748565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082620038b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620038ed57620038ed6200384e565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003924606083018462003748565b95945050505050565b60008251620039418184602087016200366c565b9190910192915050565b6000806000606084860312156200396157600080fd5b835167ffffffffffffffff808211156200397a57600080fd5b62003988878388016200369b565b945060208601519150808211156200399f57600080fd5b50620039ae868287016200369b565b9250506040840151620034fc81620032af565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003a02606083018789620039c1565b828103602084015262003a17818688620039c1565b91505060ff831660408301529695505050505050565b6000835162003a418184602088016200366c565b83519083019062003a578183602088016200366c565b01949350505050565b6000808585111562003a7157600080fd5b8386111562003a7f57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003aa857600080fd5b873562003ab58162002fee565b9650602088013562003ac78162002fee565b9550604088013594506060880135935060808801356200332c81620032af565b600080600080600080600080610100898b03121562003b0557600080fd5b883562003b128162002fee565b9750602089013562003b248162002fee565b96506040890135955060608901359450608089013562003b44816200363d565b935060a089013562003b5681620032af565b979a969950949793969295929450505060c08201359160e0013590565b600181815b8085111562003bd257817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003bb65762003bb66200384e565b8085161562003bc457918102915b93841c939080029062003b78565b509250929050565b60008262003beb5750600162000cf0565b8162003bfa5750600062000cf0565b816001811462003c13576002811462003c1e5762003c3e565b600191505062000cf0565b60ff84111562003c325762003c326200384e565b50506001821b62000cf0565b5060208310610133831016604e8410600b841016171562003c63575081810a62000cf0565b62003c6f838362003b73565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003ca45762003ca46200384e565b029392505050565b600062002e49838362003bda565b60008282101562003ccf5762003ccf6200384e565b500390565b6000821982111562003cea5762003cea6200384e565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60006020828403121562003d3157600080fd5b5051919050565b60208152600062002e4960208301846200374856fe60c06040523480156200001157600080fd5b5060405162001a7838038062001a788339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516115be620004ba600039600061053001526000818161036f01526104fa01526115be6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b60405161019191906112d5565b60405180910390f35b6101ad6101a8366004611371565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad61020436600461139b565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad610276366004611371565b610552565b6101ad610289366004611371565b61059e565b6101c161029c3660046113d7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d23660046113d7565b60066020526000908152604090205481565b610184610645565b6101ad6102fa366004611371565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad610352366004611371565b6106ed565b6101ad610365366004611371565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f3660046113f9565b6107b2565b005b6101c16103b436600461146c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6060600380546104379061149f565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061149f565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f56565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611521565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c838361101e565b50600192915050565b6060600480546104379061149f565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c8383611124565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661088183611539565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ee3908490611521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4991815260200190565b60405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f81610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166110815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b80600260008282546110939190611521565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906110cd908490611521565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156112495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611285908490611571565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c27565b600060208083528351808285015260005b81811015611302578581018301518582016040015282016112e6565b81811115611314576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136c57600080fd5b919050565b6000806040838503121561138457600080fd5b61138d83611348565b946020939093013593505050565b6000806000606084860312156113b057600080fd5b6113b984611348565b92506113c760208501611348565b9150604084013590509250925092565b6000602082840312156113e957600080fd5b6113f282611348565b9392505050565b600080600080600080600060e0888a03121561141457600080fd5b61141d88611348565b965061142b60208901611348565b95506040880135945060608801359350608088013560ff8116811461144f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561147f57600080fd5b61148883611348565b915061149660208401611348565b90509250929050565b600181811c908216806114b357607f821691505b6020821081036114ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611534576115346114f2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156a5761156a6114f2565b5060010190565b600082821015611583576115836114f2565b50039056fea2646970667358221220dc9c54325b6ec8c11c8bc6a1630cfb64202b6d54611cd1004e705ceca7826a4f64736f6c634300080f0033a2646970667358221220627991e62c01a013ef386af2c4355efefce98d0a6bed55179ac547ada65b748864736f6c634300080f0033", - "deployedBytecode": "0x6080604052600436106200019f5760003560e01c80637b6323c111620000e7578063d02103ca1162000089578063e73758811162000060578063e7375881146200059d578063ed6be5c914620005d1578063ff634ed714620005e857600080fd5b8063d02103ca146200054c578063d96a15f7146200056e578063dbc16976146200058557600080fd5b8063a08e8a0811620000be578063a08e8a0814620004c3578063aaa13cc214620004ed578063bab161bf146200051257600080fd5b80637b6323c1146200044257806381b1c17414620004675780638f61151914620004a157600080fd5b8063318aee3d11620001515780633e19704311620001285780633e19704314620003175780634638554914620003f8578063647c576c146200041d57600080fd5b8063318aee3d146200026b5780633ae0504714620002da5780633da8168214620002f257600080fd5b80632072f6c511620001865780632072f6c514620001ee57806322e95f2c14620002065780632dfdf0b5146200024457600080fd5b80630871e97114620001a457806315064c9614620001bd575b600080fd5b620001bb620001b536600462003077565b620005ff565b005b348015620001ca57600080fd5b50602254620001d99060ff1681565b60405190151581526020015b60405180910390f35b348015620001fb57600080fd5b50620001bb62000bae565b3480156200021357600080fd5b506200022b6200022536600462003104565b62000c62565b6040516001600160a01b039091168152602001620001e5565b3480156200025157600080fd5b506200025c60215481565b604051908152602001620001e5565b3480156200027857600080fd5b50620002b56200028a36600462003140565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001e5565b348015620002e757600080fd5b506200025c62000cf6565b348015620002ff57600080fd5b50620001d96200031136600462003241565b62000de9565b3480156200032457600080fd5b506200025c62000336366004620032bf565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200040557600080fd5b50620001bb62000417366004620033d0565b62000ee9565b3480156200042a57600080fd5b50620001bb6200043c366004620034b7565b6200116f565b3480156200044f57600080fd5b50620001bb62000461366004620033d0565b62001349565b3480156200047457600080fd5b506200022b6200048636600462003507565b6024602052600090815260409020546001600160a01b031681565b348015620004ae57600080fd5b506027546200022b906001600160a01b031681565b348015620004d057600080fd5b50620004da600081565b60405160ff9091168152602001620001e5565b348015620004fa57600080fd5b506200022b6200050c36600462003521565b6200193f565b3480156200051f57600080fd5b506022546200053690610100900463ffffffff1681565b60405163ffffffff9091168152602001620001e5565b3480156200055957600080fd5b506026546200022b906001600160a01b031681565b620001bb6200057f366004620035d5565b62001aab565b3480156200059257600080fd5b50620001bb62001d70565b348015620005aa57600080fd5b50620001d9620005bc36600462003507565b60236020526000908152604090205460ff1681565b348015620005de57600080fd5b5062000536600081565b348015620005f557600080fd5b50620004da600181565b60225460ff1615620006a45760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60225463ffffffff6101009091048116908616036200072c5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200069b565b60008060606001600160a01b038916620007c157853414620007b75760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200069b565b6000915062000a4b565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620008a8576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af11580156200086f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200089591906200364c565b5060208101518151909450925062000a49565b8415620008bd57620008bd8a88888862001e22565b620008d46001600160a01b038b1633308a62002448565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200092b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620009559190810190620036ef565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000994573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620009be9190810190620036ef565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620009fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a23919062003728565b60405160200162000a379392919062003776565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162000a8d989796959493929190620037b3565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000b3590620024fb565b6026546001600160a01b03166333d6247d62000b5062000cf6565b6040518263ffffffff1660e01b815260040162000b6f91815260200190565b600060405180830381600087803b15801562000b8a57600080fd5b505af115801562000b9f573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b0316331462000c565760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200069b565b62000c606200265f565b565b600060246000848460405160200162000cbe92919060e09290921b7fffffffff0000000000000000000000000000000000000000000000000000000016825260601b6bffffffffffffffffffffffff1916600482015260180190565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000de0578260011660010362000d61576001816020811062000d2d5762000d2d6200381f565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000d8e565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000d9b6002846200387d565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000dd790620038b9565b91505062000d01565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000edc578160011660010362000e665786818151811062000e245762000e246200381f565b60200260200101518360405160200162000e48929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000eb8565b8287828151811062000e7c5762000e7c6200381f565b602002602001015160405160200162000e9f929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000ec56002836200387d565b91508062000ed381620038b9565b91505062000df9565b5050909114949350505050565b60225460ff161562000f8a5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200069b565b62000fa08a8a8a8a8a8a8a8a8a8a600162002738565b63ffffffff8916600090815260236020526040808220805460ff19166001179055516001600160a01b03851690849062000fe39089908b908790602401620038f4565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f200000000000000000000000000000000000000000000000000000000179052516200104891906200392d565b60006040518083038185875af1925050503d806000811462001087576040519150601f19603f3d011682016040523d82523d6000602084013e6200108c565b606091505b5050905080620011045760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c45440000000000000000000000000000000000000000000000000000000060648201526084016200069b565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff1615808015620011905750600054600160ff909116105b80620011ac5750303b158015620011ac575060005460ff166001145b620012205760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200069b565b6000805460ff1916600117905580156200126157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6022805463ffffffff8616610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff909116179055602680546001600160a01b038086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255602780549285169290911691909117905580156200134357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff1615620013ea5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200069b565b620014008a8a8a8a8a8a8a8a8a8a600062002738565b63ffffffff89166000908152602360205260409020805460ff191660011790556001600160a01b0385166200151f57604080516000808252602082019092526001600160a01b0385169084906040516200145b91906200392d565b60006040518083038185875af1925050503d80600081146200149a576040519150601f19603f3d011682016040523d82523d6000602084013e6200149f565b606091505b5050905080620015185760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c45440000000000000000000000000000000000000000000000000060648201526084016200069b565b50620018d5565b60225463ffffffff61010090910481169087160362001554576200154e6001600160a01b038616848462002ac0565b620018d5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200184157600080600085806020019051810190620015f491906200394b565b9250925092506000858484846040516200160e9062002fe0565b6200161c9392919062003776565b8190604051809103906000f59050801580156200163d573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af1158015620016ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620016d191906200364c565b50620016dd8162002b0b565b620016e88462002b86565b620016f38362002b86565b620017018260ff1662002bfb565b806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200182f9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620018d2565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620018aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018d091906200364c565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620019c29062002fe0565b601f1982820381018352601f909101166040819052620019ef908d908d908d908d908d90602001620039ec565b60408051601f198184030181529082905262001a0f929160200162003a2d565b6040516020818303038152906040528051906020012060405160200162001a8594939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff161562001b4c5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200069b565b60225463ffffffff61010090910481169084160362001bd45760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200069b565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff16338686348760215460405162001c28989796959493929190620037b3565b60405180910390a16022548151602080840191909120604080517f01000000000000000000000000000000000000000000000000000000000000008185015261010090940460e090811b7fffffffff00000000000000000000000000000000000000000000000000000000908116602187015233606090811b6bffffffffffffffffffffffff199081166025890152928a901b909116603987015287901b16603d850152346051850152607180850192909252805180850390920182526091909301909252815191012062001cfd90620024fb565b6026546001600160a01b03166333d6247d62001d1862000cf6565b6040518263ffffffff1660e01b815260040162001d3791815260200190565b600060405180830381600087803b15801562001d5257600080fd5b505af115801562001d67573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b0316331462001e185760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200069b565b62000c6062002c71565b600062001e6583838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002d2192505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008216016200216757600080808080808062001ec8896004818d62003a60565b81019062001ed7919062003a8c565b9650965096509650965096509650336001600160a01b0316876001600160a01b03161462001f6e5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200069b565b6001600160a01b038616301462001fee5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200069b565b8a8514620020655760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200069b565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e16916200211391906200392d565b6000604051808303816000865af19150503d806000811462002152576040519150601f19603f3d011682016040523d82523d6000602084013e62002157565b606091505b5050505050505050505062002441565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c0000000000000000000000000000000000000000000000000000000014620021fa5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200069b565b600080808080808080620022128a6004818e62003a60565b81019062002221919062003ae7565b97509750975097509750975097509750336001600160a01b0316886001600160a01b031614620022ba5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200069b565b6001600160a01b03871630146200233a5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200069b565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f1691620023f191906200392d565b6000604051808303816000865af19150503d806000811462002430576040519150601f19603f3d011682016040523d82523d6000602084013e62002435565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b0380851660248301528316604482015260648101829052620013439085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002d28565b8060016200250c6020600262003cac565b62002518919062003cba565b60215410620025905760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200069b565b600160216000828254620025a5919062003cd4565b909155505060215460005b60208110156200264f5781600116600103620025e5578260018260208110620025dd57620025dd6200381f565b015550505050565b60018160208110620025fb57620025fb6200381f565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200263891906200387d565b9150806200264681620038b9565b915050620025b0565b506200265a62003cef565b505050565b60225460ff1615620027005760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200069b565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b63ffffffff8a1660009081526023602052604090205460ff1615620027c55760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d45440000000000000000000000000000000000000000000000000000000060648201526084016200069b565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526001600160a01b039091169063257b3632906084016020604051808303816000875af115801562002851573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002877919062003d1e565b600003620028ee5760405162461bcd60e51b815260206004820152603460248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f444f45535f4e4f545f4d4154434800000000000000000000000060648201526084016200069b565b60225463ffffffff8681166101009092041614620029755760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000000060648201526084016200069b565b602254600090610100900463ffffffff166200299357508762002996565b50885b8251602080850191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f887901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08d811b821660218401526bffffffffffffffffffffffff1960608e811b82166025860152918d901b90921660398401528a901b16603d82015260518101889052607180820193909352815180820390930183526091019052805191012062002a64908d8d63ffffffff168462000de9565b62002ab25760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c494460448201526064016200069b565b505050505050505050505050565b6040516001600160a01b0383166024820152604481018290526200265a9084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002496565b6040516001600160a01b038216602482015262002b839060440160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f2c2ecbc20000000000000000000000000000000000000000000000000000000017905262002e14565b50565b62002b838160405160240162002b9d919062003d38565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f41304fac0000000000000000000000000000000000000000000000000000000017905262002e14565b62002b838160405160240162002c1391815260200190565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff82c50f10000000000000000000000000000000000000000000000000000000017905262002e14565b60225460ff161562002cec5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016200069b565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002d7f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662002e359092919063ffffffff16565b8051909150156200265a578080602001905181019062002da091906200364c565b6200265a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200069b565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b606062002e46848460008562002e50565b90505b9392505050565b60608247101562002eca5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016200069b565b6001600160a01b0385163b62002f235760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200069b565b600080866001600160a01b0316858760405162002f4191906200392d565b60006040518083038185875af1925050503d806000811462002f80576040519150601f19603f3d011682016040523d82523d6000602084013e62002f85565b606091505b509150915062002f9782828662002fa2565b979650505050505050565b6060831562002fb357508162002e49565b82511562002fc45782518084602001fd5b8160405162461bcd60e51b81526004016200069b919062003d38565b611a788062003d4e83390190565b6001600160a01b038116811462002b8357600080fd5b8035620030118162002fee565b919050565b803563ffffffff811681146200301157600080fd5b60008083601f8401126200303e57600080fd5b50813567ffffffffffffffff8111156200305757600080fd5b6020830191508360208285010111156200307057600080fd5b9250929050565b60008060008060008060a087890312156200309157600080fd5b86356200309e8162002fee565b9550620030ae6020880162003016565b94506040870135620030c08162002fee565b935060608701359250608087013567ffffffffffffffff811115620030e457600080fd5b620030f289828a016200302b565b979a9699509497509295939492505050565b600080604083850312156200311857600080fd5b620031238362003016565b91506020830135620031358162002fee565b809150509250929050565b6000602082840312156200315357600080fd5b813562002e498162002fee565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620031bb57620031bb62003160565b604052919050565b600082601f830112620031d557600080fd5b8135602067ffffffffffffffff821115620031f457620031f462003160565b8160051b620032058282016200318f565b92835284810182019282810190878511156200322057600080fd5b83870192505b8483101562002f975782358252918301919083019062003226565b600080600080608085870312156200325857600080fd5b84359350602085013567ffffffffffffffff808211156200327857600080fd5b6200328688838901620031c3565b94506040870135915080821682146200329e57600080fd5b509396929550929360600135925050565b60ff8116811462002b8357600080fd5b600080600080600080600060e0888a031215620032db57600080fd5b8735620032e881620032af565b9650620032f86020890162003016565b955060408801356200330a8162002fee565b94506200331a6060890162003016565b935060808801356200332c8162002fee565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562003366576200336662003160565b50601f01601f191660200190565b600082601f8301126200338657600080fd5b81356200339d620033978262003349565b6200318f565b818152846020838601011115620033b357600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620033f157600080fd5b8a3567ffffffffffffffff808211156200340a57600080fd5b620034188e838f01620031c3565b9b506200342860208e0162003016565b9a5060408d0135995060608d013598506200344660808e0162003016565b97506200345660a08e0162003004565b96506200346660c08e0162003016565b95506200347660e08e0162003004565b94506101008d013593506101208d01359150808211156200349657600080fd5b50620034a58d828e0162003374565b9150509295989b9194979a5092959850565b600080600060608486031215620034cd57600080fd5b620034d88462003016565b92506020840135620034ea8162002fee565b91506040840135620034fc8162002fee565b809150509250925092565b6000602082840312156200351a57600080fd5b5035919050565b600080600080600080600060a0888a0312156200353d57600080fd5b620035488862003016565b965060208801356200355a8162002fee565b9550604088013567ffffffffffffffff808211156200357857600080fd5b620035868b838c016200302b565b909750955060608a0135915080821115620035a057600080fd5b50620035af8a828b016200302b565b9094509250506080880135620035c581620032af565b8091505092959891949750929550565b600080600060608486031215620035eb57600080fd5b620035f68462003016565b92506020840135620036088162002fee565b9150604084013567ffffffffffffffff8111156200362557600080fd5b620036338682870162003374565b9150509250925092565b801515811462002b8357600080fd5b6000602082840312156200365f57600080fd5b815162002e49816200363d565b60005b83811015620036895781810151838201526020016200366f565b83811115620013435750506000910152565b600082601f830112620036ad57600080fd5b8151620036be620033978262003349565b818152846020838601011115620036d457600080fd5b620036e78260208301602087016200366c565b949350505050565b6000602082840312156200370257600080fd5b815167ffffffffffffffff8111156200371a57600080fd5b620036e7848285016200369b565b6000602082840312156200373b57600080fd5b815162002e4981620032af565b60008151808452620037628160208601602086016200366c565b601f01601f19169290920160200192915050565b6060815260006200378b606083018662003748565b82810360208401526200379f818662003748565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620038068285018762003748565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082620038b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620038ed57620038ed6200384e565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003924606083018462003748565b95945050505050565b60008251620039418184602087016200366c565b9190910192915050565b6000806000606084860312156200396157600080fd5b835167ffffffffffffffff808211156200397a57600080fd5b62003988878388016200369b565b945060208601519150808211156200399f57600080fd5b50620039ae868287016200369b565b9250506040840151620034fc81620032af565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003a02606083018789620039c1565b828103602084015262003a17818688620039c1565b91505060ff831660408301529695505050505050565b6000835162003a418184602088016200366c565b83519083019062003a578183602088016200366c565b01949350505050565b6000808585111562003a7157600080fd5b8386111562003a7f57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003aa857600080fd5b873562003ab58162002fee565b9650602088013562003ac78162002fee565b9550604088013594506060880135935060808801356200332c81620032af565b600080600080600080600080610100898b03121562003b0557600080fd5b883562003b128162002fee565b9750602089013562003b248162002fee565b96506040890135955060608901359450608089013562003b44816200363d565b935060a089013562003b5681620032af565b979a969950949793969295929450505060c08201359160e0013590565b600181815b8085111562003bd257817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003bb65762003bb66200384e565b8085161562003bc457918102915b93841c939080029062003b78565b509250929050565b60008262003beb5750600162000cf0565b8162003bfa5750600062000cf0565b816001811462003c13576002811462003c1e5762003c3e565b600191505062000cf0565b60ff84111562003c325762003c326200384e565b50506001821b62000cf0565b5060208310610133831016604e8410600b841016171562003c63575081810a62000cf0565b62003c6f838362003b73565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003ca45762003ca46200384e565b029392505050565b600062002e49838362003bda565b60008282101562003ccf5762003ccf6200384e565b500390565b6000821982111562003cea5762003cea6200384e565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60006020828403121562003d3157600080fd5b5051919050565b60208152600062002e4960208301846200374856fe60c06040523480156200001157600080fd5b5060405162001a7838038062001a788339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516115be620004ba600039600061053001526000818161036f01526104fa01526115be6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b60405161019191906112d5565b60405180910390f35b6101ad6101a8366004611371565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad61020436600461139b565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad610276366004611371565b610552565b6101ad610289366004611371565b61059e565b6101c161029c3660046113d7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d23660046113d7565b60066020526000908152604090205481565b610184610645565b6101ad6102fa366004611371565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad610352366004611371565b6106ed565b6101ad610365366004611371565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f3660046113f9565b6107b2565b005b6101c16103b436600461146c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6060600380546104379061149f565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061149f565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f56565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611521565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c838361101e565b50600192915050565b6060600480546104379061149f565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c8383611124565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661088183611539565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ee3908490611521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4991815260200190565b60405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f81610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166110815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b80600260008282546110939190611521565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906110cd908490611521565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156112495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611285908490611571565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c27565b600060208083528351808285015260005b81811015611302578581018301518582016040015282016112e6565b81811115611314576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136c57600080fd5b919050565b6000806040838503121561138457600080fd5b61138d83611348565b946020939093013593505050565b6000806000606084860312156113b057600080fd5b6113b984611348565b92506113c760208501611348565b9150604084013590509250925092565b6000602082840312156113e957600080fd5b6113f282611348565b9392505050565b600080600080600080600060e0888a03121561141457600080fd5b61141d88611348565b965061142b60208901611348565b95506040880135945060608801359350608088013560ff8116811461144f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561147f57600080fd5b61148883611348565b915061149660208401611348565b90509250929050565b600181811c908216806114b357607f821691505b6020821081036114ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611534576115346114f2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156a5761156a6114f2565b5060010190565b600082821015611583576115836114f2565b50039056fea2646970667358221220dc9c54325b6ec8c11c8bc6a1630cfb64202b6d54611cd1004e705ceca7826a4f64736f6c634300080f0033a2646970667358221220627991e62c01a013ef386af2c4355efefce98d0a6bed55179ac547ada65b748864736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50615952806100206000396000f3fe608060405260043610620001db5760003560e01c806381b1c17411620000ff578063d96a15f71162000095578063e7a5b4ea116200006c578063e7a5b4ea1462000658578063ed6be5c9146200067d578063f2fde38b1462000694578063ff634ed714620006b957600080fd5b8063d96a15f714620005f5578063dbc16976146200060c578063e7375881146200062457600080fd5b8063a08e8a0811620000d6578063a08e8a08146200054f578063aaa13cc21462000579578063bab161bf146200059e578063d02103ca14620005d357600080fd5b806381b1c17414620004d35780638da5cb5b146200050d5780638f611519146200052d57600080fd5b80633ae05047116200017557806346385549116200014c57806346385549146200044c578063655595401462000471578063715018a614620004965780637b6323c114620004ae57600080fd5b80633ae05047146200032e5780633da8168214620003465780633e197043146200036b57600080fd5b80632072f6c511620001b65780632072f6c5146200025157806322e95f2c14620002695780632dfdf0b514620002a7578063318aee3d14620002bf57600080fd5b80630871e97114620001e05780630e1da6c314620001f957806315064c961462000224575b600080fd5b620001f7620001f1366004620031bd565b620006d0565b005b3480156200020657600080fd5b5062000211608d5481565b6040519081526020015b60405180910390f35b3480156200023157600080fd5b50602254620002409060ff1681565b60405190151581526020016200021b565b3480156200025e57600080fd5b50620001f762000c7a565b3480156200027657600080fd5b506200028e620002883660046200324a565b62000d2e565b6040516001600160a01b0390911681526020016200021b565b348015620002b457600080fd5b506200021160215481565b348015620002cc57600080fd5b5062000309620002de36600462003286565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200021b565b3480156200033b57600080fd5b506200021162000db1565b3480156200035357600080fd5b50620002406200036536600462003387565b62000ea4565b3480156200037857600080fd5b50620002116200038a36600462003405565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200045957600080fd5b50620001f76200046b36600462003516565b62000fa4565b3480156200047e57600080fd5b50620001f762000490366004620035fd565b6200122a565b348015620004a357600080fd5b50620001f762001410565b348015620004bb57600080fd5b50620001f7620004cd36600462003516565b62001426565b348015620004e057600080fd5b506200028e620004f236600462003653565b6089602052600090815260409020546001600160a01b031681565b3480156200051a57600080fd5b506055546001600160a01b03166200028e565b3480156200053a57600080fd5b50608c546200028e906001600160a01b031681565b3480156200055c57600080fd5b5062000566600081565b60405160ff90911681526020016200021b565b3480156200058657600080fd5b506200028e620005983660046200366d565b620019e8565b348015620005ab57600080fd5b50608754620005bd9063ffffffff1681565b60405163ffffffff90911681526020016200021b565b348015620005e057600080fd5b50608b546200028e906001600160a01b031681565b620001f76200060636600462003721565b62001b54565b3480156200061957600080fd5b50620001f762001e08565b3480156200063157600080fd5b50620002406200064336600462003653565b60886020526000908152604090205460ff1681565b3480156200066557600080fd5b50620001f76200067736600462003653565b62001eba565b3480156200068a57600080fd5b50620005bd600081565b348015620006a157600080fd5b50620001f7620006b336600462003286565b62001eff565b348015620006c657600080fd5b5062000566600181565b60225460ff1615620007755760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60875463ffffffff90811690861603620007f85760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b60008060606001600160a01b0389166200088d57853414620008835760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200076c565b6000915062000b17565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000974576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af11580156200093b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000961919062003798565b5060208101518151909450925062000b15565b84156200098957620009898a88888862001f95565b620009a06001600160a01b038b1633308a620025ba565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620009f7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a2191908101906200383b565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000a60573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a8a91908101906200383b565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ac9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aef919062003874565b60405160200162000b0393929190620038c2565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162000b59989796959493929190620038ff565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000c019062002673565b608b546001600160a01b03166333d6247d62000c1c62000db1565b6040518263ffffffff1660e01b815260040162000c3b91815260200190565b600060405180830381600087803b15801562000c5657600080fd5b505af115801562000c6b573d6000803e3d6000fd5b50505050505050505050505050565b608c546001600160a01b0316331462000d225760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c620027d7565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b602154600090819081805b602081101562000e9b578260011660010362000e1c576001816020811062000de85762000de86200396b565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000e49565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000e56600284620039c9565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000e929062003a05565b91505062000dbc565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000f97578160011660010362000f215786818151811062000edf5762000edf6200396b565b60200260200101518360405160200162000f03929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000f73565b8287828151811062000f375762000f376200396b565b602002602001015160405160200162000f5a929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000f80600283620039c9565b91508062000f8e8162003a05565b91505062000eb4565b5050909114949350505050565b60225460ff1615620010455760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6200105b8a8a8a8a8a8a8a8a8a8a6001620028b0565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b0385169084906200109e9089908b90879060240162003a40565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001103919062003a79565b60006040518083038185875af1925050503d806000811462001142576040519150601f19603f3d011682016040523d82523d6000602084013e62001147565b606091505b5050905080620011bf5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff16158080156200124b5750600054600160ff909116105b80620012675750303b15801562001267575060005460ff166001145b620012db5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200076c565b6000805460ff1916600117905580156200131c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d829055620013a562002c3d565b80156200140957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6200141a62002cc7565b62000d2c600062002d23565b60225460ff1615620014c75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b620014dd8a8a8a8a8a8a8a8a8a8a6000620028b0565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620015fc57604080516000808252602082019092526001600160a01b03851690849060405162001538919062003a79565b60006040518083038185875af1925050503d806000811462001577576040519150601f19603f3d011682016040523d82523d6000602084013e6200157c565b606091505b5050905080620015f55760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c45440000000000000000000000000000000000000000000000000060648201526084016200076c565b506200197e565b60875463ffffffff908116908716036200162c57620016266001600160a01b038616848462002d8d565b6200197e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620018ea57600080600085806020019051810190620016cc919062003a97565b925092509250600085848484604051620016e69062003126565b620016f493929190620038c2565b8190604051809103906000f590508015801562001715573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001783573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017a9919062003798565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620018d89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200197b565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001953573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001979919062003798565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162001a6b9062003126565b601f1982820381018352601f90910116604081905262001a98908d908d908d908d908d9060200162003b43565b60408051601f198184030181529082905262001ab8929160200162003b84565b6040516020818303038152906040528051906020012060405160200162001b2e94939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff161562001bf55760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b60875463ffffffff9081169084160362001c785760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b9262001cc59260019263ffffffff9092169133918991899134918a9190620038ff565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d850152346051850152607180850192909252805180850390920182526091909301909252815191012062001d959062002673565b608b546001600160a01b03166333d6247d62001db062000db1565b6040518263ffffffff1660e01b815260040162001dcf91815260200190565b600060405180830381600087803b15801562001dea57600080fd5b505af115801562001dff573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001eb05760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c62002dd8565b62001ec462002cc7565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001f0962002cc7565b6001600160a01b03811662001f875760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016200076c565b62001f928162002d23565b50565b600062001fd883838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002e8892505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620022da5760008080808080806200203b896004818d62003bb7565b8101906200204a919062003be3565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620020e15760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0386163014620021615760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b8a8514620021d85760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002286919062003a79565b6000604051808303816000865af19150503d8060008114620022c5576040519150601f19603f3d011682016040523d82523d6000602084013e620022ca565b606091505b5050505050505050505062001409565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c00000000000000000000000000000000000000000000000000000000146200236d5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200076c565b600080808080808080620023858a6004818e62003bb7565b81019062002394919062003c3e565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200242d5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0387163014620024ad5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002564919062003a79565b6000604051808303816000865af19150503d8060008114620025a3576040519150601f19603f3d011682016040523d82523d6000602084013e620025a8565b606091505b50505050505050505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526200266d9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002e8f565b50505050565b806001620026846020600262003e03565b62002690919062003e11565b60215410620027085760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200076c565b6001602160008282546200271d919062003e2b565b909155505060215460005b6020811015620027c757816001166001036200275d5782600182602081106200275557620027556200396b565b015550505050565b600181602081106200277357620027736200396b565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620027b09190620039c9565b915080620027be8162003a05565b91505062002728565b50620027d262003e46565b505050565b60225460ff1615620028785760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b63ffffffff8a1660009081526088602052604090205460ff16156200293d5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af1158015620029ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620029f0919062003e75565b9050801580159062002a0f5750608d5462002a0c824262003e11565b10155b62002a835760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c49440000000000000000000000000000000000000060648201526084016200076c565b60875463ffffffff87811691161462002b055760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000000060648201526084016200076c565b60875460009063ffffffff1662002b1e57508862002b21565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d82015260518101899052607180820193909352815180820390930183526091019052805191012062002bef908e8e63ffffffff168462000ea4565b62000c6b5760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c494460448201526064016200076c565b600054610100900460ff1662002cbc5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200076c565b62000d2c3362002d23565b6055546001600160a01b0316331462000d2c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200076c565b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620027d29084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002608565b60225460ff161562002e535760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016200076c565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002ee6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662002f7b9092919063ffffffff16565b805190915015620027d2578080602001905181019062002f07919062003798565b620027d25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200076c565b606062002f8c848460008562002f96565b90505b9392505050565b606082471015620030105760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016200076c565b6001600160a01b0385163b620030695760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200076c565b600080866001600160a01b0316858760405162003087919062003a79565b60006040518083038185875af1925050503d8060008114620030c6576040519150601f19603f3d011682016040523d82523d6000602084013e620030cb565b606091505b5091509150620030dd828286620030e8565b979650505050505050565b60608315620030f957508162002f8f565b8251156200310a5782518084602001fd5b8160405162461bcd60e51b81526004016200076c919062003e8f565b611a788062003ea583390190565b6001600160a01b038116811462001f9257600080fd5b8035620031578162003134565b919050565b803563ffffffff811681146200315757600080fd5b60008083601f8401126200318457600080fd5b50813567ffffffffffffffff8111156200319d57600080fd5b602083019150836020828501011115620031b657600080fd5b9250929050565b60008060008060008060a08789031215620031d757600080fd5b8635620031e48162003134565b9550620031f4602088016200315c565b94506040870135620032068162003134565b935060608701359250608087013567ffffffffffffffff8111156200322a57600080fd5b6200323889828a0162003171565b979a9699509497509295939492505050565b600080604083850312156200325e57600080fd5b62003269836200315c565b915060208301356200327b8162003134565b809150509250929050565b6000602082840312156200329957600080fd5b813562002f8f8162003134565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620033015762003301620032a6565b604052919050565b600082601f8301126200331b57600080fd5b8135602067ffffffffffffffff8211156200333a576200333a620032a6565b8160051b6200334b828201620032d5565b92835284810182019282810190878511156200336657600080fd5b83870192505b84831015620030dd578235825291830191908301906200336c565b600080600080608085870312156200339e57600080fd5b84359350602085013567ffffffffffffffff80821115620033be57600080fd5b620033cc8883890162003309565b9450604087013591508082168214620033e457600080fd5b509396929550929360600135925050565b60ff8116811462001f9257600080fd5b600080600080600080600060e0888a0312156200342157600080fd5b87356200342e81620033f5565b96506200343e602089016200315c565b95506040880135620034508162003134565b945062003460606089016200315c565b93506080880135620034728162003134565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620034ac57620034ac620032a6565b50601f01601f191660200190565b600082601f830112620034cc57600080fd5b8135620034e3620034dd826200348f565b620032d5565b818152846020838601011115620034f957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200353757600080fd5b8a3567ffffffffffffffff808211156200355057600080fd5b6200355e8e838f0162003309565b9b506200356e60208e016200315c565b9a5060408d0135995060608d013598506200358c60808e016200315c565b97506200359c60a08e016200314a565b9650620035ac60c08e016200315c565b9550620035bc60e08e016200314a565b94506101008d013593506101208d0135915080821115620035dc57600080fd5b50620035eb8d828e01620034ba565b9150509295989b9194979a5092959850565b600080600080608085870312156200361457600080fd5b6200361f856200315c565b93506020850135620036318162003134565b92506040850135620036438162003134565b9396929550929360600135925050565b6000602082840312156200366657600080fd5b5035919050565b600080600080600080600060a0888a0312156200368957600080fd5b62003694886200315c565b96506020880135620036a68162003134565b9550604088013567ffffffffffffffff80821115620036c457600080fd5b620036d28b838c0162003171565b909750955060608a0135915080821115620036ec57600080fd5b50620036fb8a828b0162003171565b90945092505060808801356200371181620033f5565b8091505092959891949750929550565b6000806000606084860312156200373757600080fd5b62003742846200315c565b92506020840135620037548162003134565b9150604084013567ffffffffffffffff8111156200377157600080fd5b6200377f86828701620034ba565b9150509250925092565b801515811462001f9257600080fd5b600060208284031215620037ab57600080fd5b815162002f8f8162003789565b60005b83811015620037d5578181015183820152602001620037bb565b838111156200266d5750506000910152565b600082601f830112620037f957600080fd5b81516200380a620034dd826200348f565b8181528460208386010111156200382057600080fd5b62003833826020830160208701620037b8565b949350505050565b6000602082840312156200384e57600080fd5b815167ffffffffffffffff8111156200386657600080fd5b6200383384828501620037e7565b6000602082840312156200388757600080fd5b815162002f8f81620033f5565b60008151808452620038ae816020860160208601620037b8565b601f01601f19169290920160200192915050565b606081526000620038d7606083018662003894565b8281036020840152620038eb818662003894565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620039528285018762003894565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003a00577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003a395762003a396200399a565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003a70606083018462003894565b95945050505050565b6000825162003a8d818460208701620037b8565b9190910192915050565b60008060006060848603121562003aad57600080fd5b835167ffffffffffffffff8082111562003ac657600080fd5b62003ad487838801620037e7565b9450602086015191508082111562003aeb57600080fd5b5062003afa86828701620037e7565b925050604084015162003b0d81620033f5565b809150509250925092565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003b5960608301878962003b18565b828103602084015262003b6e81868862003b18565b91505060ff831660408301529695505050505050565b6000835162003b98818460208801620037b8565b83519083019062003bae818360208801620037b8565b01949350505050565b6000808585111562003bc857600080fd5b8386111562003bd657600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003bff57600080fd5b873562003c0c8162003134565b9650602088013562003c1e8162003134565b9550604088013594506060880135935060808801356200347281620033f5565b600080600080600080600080610100898b03121562003c5c57600080fd5b883562003c698162003134565b9750602089013562003c7b8162003134565b96506040890135955060608901359450608089013562003c9b8162003789565b935060a089013562003cad81620033f5565b979a969950949793969295929450505060c08201359160e0013590565b600181815b8085111562003d2957817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d0d5762003d0d6200399a565b8085161562003d1b57918102915b93841c939080029062003ccf565b509250929050565b60008262003d425750600162000dab565b8162003d515750600062000dab565b816001811462003d6a576002811462003d755762003d95565b600191505062000dab565b60ff84111562003d895762003d896200399a565b50506001821b62000dab565b5060208310610133831016604e8410600b841016171562003dba575081810a62000dab565b62003dc6838362003cca565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003dfb5762003dfb6200399a565b029392505050565b600062002f8f838362003d31565b60008282101562003e265762003e266200399a565b500390565b6000821982111562003e415762003e416200399a565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60006020828403121562003e8857600080fd5b5051919050565b60208152600062002f8f60208301846200389456fe60c06040523480156200001157600080fd5b5060405162001a7838038062001a788339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516115be620004ba600039600061053001526000818161036f01526104fa01526115be6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b60405161019191906112d5565b60405180910390f35b6101ad6101a8366004611371565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad61020436600461139b565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad610276366004611371565b610552565b6101ad610289366004611371565b61059e565b6101c161029c3660046113d7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d23660046113d7565b60066020526000908152604090205481565b610184610645565b6101ad6102fa366004611371565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad610352366004611371565b6106ed565b6101ad610365366004611371565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f3660046113f9565b6107b2565b005b6101c16103b436600461146c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6060600380546104379061149f565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061149f565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f56565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611521565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c838361101e565b50600192915050565b6060600480546104379061149f565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c8383611124565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661088183611539565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ee3908490611521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4991815260200190565b60405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f81610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166110815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b80600260008282546110939190611521565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906110cd908490611521565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156112495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611285908490611571565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c27565b600060208083528351808285015260005b81811015611302578581018301518582016040015282016112e6565b81811115611314576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136c57600080fd5b919050565b6000806040838503121561138457600080fd5b61138d83611348565b946020939093013593505050565b6000806000606084860312156113b057600080fd5b6113b984611348565b92506113c760208501611348565b9150604084013590509250925092565b6000602082840312156113e957600080fd5b6113f282611348565b9392505050565b600080600080600080600060e0888a03121561141457600080fd5b61141d88611348565b965061142b60208901611348565b95506040880135945060608801359350608088013560ff8116811461144f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561147f57600080fd5b61148883611348565b915061149660208401611348565b90509250929050565b600181811c908216806114b357607f821691505b6020821081036114ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611534576115346114f2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156a5761156a6114f2565b5060010190565b600082821015611583576115836114f2565b50039056fea2646970667358221220dc9c54325b6ec8c11c8bc6a1630cfb64202b6d54611cd1004e705ceca7826a4f64736f6c634300080f0033a26469706673582212209325864155c9b73893997ddf3831325bde53e92ebc8e3e0cd1d1c21523d6dae364736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001db5760003560e01c806381b1c17411620000ff578063d96a15f71162000095578063e7a5b4ea116200006c578063e7a5b4ea1462000658578063ed6be5c9146200067d578063f2fde38b1462000694578063ff634ed714620006b957600080fd5b8063d96a15f714620005f5578063dbc16976146200060c578063e7375881146200062457600080fd5b8063a08e8a0811620000d6578063a08e8a08146200054f578063aaa13cc21462000579578063bab161bf146200059e578063d02103ca14620005d357600080fd5b806381b1c17414620004d35780638da5cb5b146200050d5780638f611519146200052d57600080fd5b80633ae05047116200017557806346385549116200014c57806346385549146200044c578063655595401462000471578063715018a614620004965780637b6323c114620004ae57600080fd5b80633ae05047146200032e5780633da8168214620003465780633e197043146200036b57600080fd5b80632072f6c511620001b65780632072f6c5146200025157806322e95f2c14620002695780632dfdf0b514620002a7578063318aee3d14620002bf57600080fd5b80630871e97114620001e05780630e1da6c314620001f957806315064c961462000224575b600080fd5b620001f7620001f1366004620031bd565b620006d0565b005b3480156200020657600080fd5b5062000211608d5481565b6040519081526020015b60405180910390f35b3480156200023157600080fd5b50602254620002409060ff1681565b60405190151581526020016200021b565b3480156200025e57600080fd5b50620001f762000c7a565b3480156200027657600080fd5b506200028e620002883660046200324a565b62000d2e565b6040516001600160a01b0390911681526020016200021b565b348015620002b457600080fd5b506200021160215481565b348015620002cc57600080fd5b5062000309620002de36600462003286565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200021b565b3480156200033b57600080fd5b506200021162000db1565b3480156200035357600080fd5b50620002406200036536600462003387565b62000ea4565b3480156200037857600080fd5b50620002116200038a36600462003405565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200045957600080fd5b50620001f76200046b36600462003516565b62000fa4565b3480156200047e57600080fd5b50620001f762000490366004620035fd565b6200122a565b348015620004a357600080fd5b50620001f762001410565b348015620004bb57600080fd5b50620001f7620004cd36600462003516565b62001426565b348015620004e057600080fd5b506200028e620004f236600462003653565b6089602052600090815260409020546001600160a01b031681565b3480156200051a57600080fd5b506055546001600160a01b03166200028e565b3480156200053a57600080fd5b50608c546200028e906001600160a01b031681565b3480156200055c57600080fd5b5062000566600081565b60405160ff90911681526020016200021b565b3480156200058657600080fd5b506200028e620005983660046200366d565b620019e8565b348015620005ab57600080fd5b50608754620005bd9063ffffffff1681565b60405163ffffffff90911681526020016200021b565b348015620005e057600080fd5b50608b546200028e906001600160a01b031681565b620001f76200060636600462003721565b62001b54565b3480156200061957600080fd5b50620001f762001e08565b3480156200063157600080fd5b50620002406200064336600462003653565b60886020526000908152604090205460ff1681565b3480156200066557600080fd5b50620001f76200067736600462003653565b62001eba565b3480156200068a57600080fd5b50620005bd600081565b348015620006a157600080fd5b50620001f7620006b336600462003286565b62001eff565b348015620006c657600080fd5b5062000566600181565b60225460ff1615620007755760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60875463ffffffff90811690861603620007f85760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b60008060606001600160a01b0389166200088d57853414620008835760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200076c565b6000915062000b17565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000974576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af11580156200093b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000961919062003798565b5060208101518151909450925062000b15565b84156200098957620009898a88888862001f95565b620009a06001600160a01b038b1633308a620025ba565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620009f7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a2191908101906200383b565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000a60573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a8a91908101906200383b565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ac9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aef919062003874565b60405160200162000b0393929190620038c2565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162000b59989796959493929190620038ff565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000c019062002673565b608b546001600160a01b03166333d6247d62000c1c62000db1565b6040518263ffffffff1660e01b815260040162000c3b91815260200190565b600060405180830381600087803b15801562000c5657600080fd5b505af115801562000c6b573d6000803e3d6000fd5b50505050505050505050505050565b608c546001600160a01b0316331462000d225760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c620027d7565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b602154600090819081805b602081101562000e9b578260011660010362000e1c576001816020811062000de85762000de86200396b565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000e49565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000e56600284620039c9565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000e929062003a05565b91505062000dbc565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000f97578160011660010362000f215786818151811062000edf5762000edf6200396b565b60200260200101518360405160200162000f03929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000f73565b8287828151811062000f375762000f376200396b565b602002602001015160405160200162000f5a929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000f80600283620039c9565b91508062000f8e8162003a05565b91505062000eb4565b5050909114949350505050565b60225460ff1615620010455760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6200105b8a8a8a8a8a8a8a8a8a8a6001620028b0565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b0385169084906200109e9089908b90879060240162003a40565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001103919062003a79565b60006040518083038185875af1925050503d806000811462001142576040519150601f19603f3d011682016040523d82523d6000602084013e62001147565b606091505b5050905080620011bf5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff16158080156200124b5750600054600160ff909116105b80620012675750303b15801562001267575060005460ff166001145b620012db5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200076c565b6000805460ff1916600117905580156200131c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d829055620013a562002c3d565b80156200140957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6200141a62002cc7565b62000d2c600062002d23565b60225460ff1615620014c75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b620014dd8a8a8a8a8a8a8a8a8a8a6000620028b0565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620015fc57604080516000808252602082019092526001600160a01b03851690849060405162001538919062003a79565b60006040518083038185875af1925050503d806000811462001577576040519150601f19603f3d011682016040523d82523d6000602084013e6200157c565b606091505b5050905080620015f55760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c45440000000000000000000000000000000000000000000000000060648201526084016200076c565b506200197e565b60875463ffffffff908116908716036200162c57620016266001600160a01b038616848462002d8d565b6200197e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620018ea57600080600085806020019051810190620016cc919062003a97565b925092509250600085848484604051620016e69062003126565b620016f493929190620038c2565b8190604051809103906000f590508015801562001715573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001783573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017a9919062003798565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620018d89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200197b565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001953573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001979919062003798565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162001a6b9062003126565b601f1982820381018352601f90910116604081905262001a98908d908d908d908d908d9060200162003b43565b60408051601f198184030181529082905262001ab8929160200162003b84565b6040516020818303038152906040528051906020012060405160200162001b2e94939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff161562001bf55760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b60875463ffffffff9081169084160362001c785760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b9262001cc59260019263ffffffff9092169133918991899134918a9190620038ff565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d850152346051850152607180850192909252805180850390920182526091909301909252815191012062001d959062002673565b608b546001600160a01b03166333d6247d62001db062000db1565b6040518263ffffffff1660e01b815260040162001dcf91815260200190565b600060405180830381600087803b15801562001dea57600080fd5b505af115801562001dff573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001eb05760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c62002dd8565b62001ec462002cc7565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001f0962002cc7565b6001600160a01b03811662001f875760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016200076c565b62001f928162002d23565b50565b600062001fd883838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002e8892505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620022da5760008080808080806200203b896004818d62003bb7565b8101906200204a919062003be3565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620020e15760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0386163014620021615760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b8a8514620021d85760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002286919062003a79565b6000604051808303816000865af19150503d8060008114620022c5576040519150601f19603f3d011682016040523d82523d6000602084013e620022ca565b606091505b5050505050505050505062001409565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c00000000000000000000000000000000000000000000000000000000146200236d5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200076c565b600080808080808080620023858a6004818e62003bb7565b81019062002394919062003c3e565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200242d5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0387163014620024ad5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002564919062003a79565b6000604051808303816000865af19150503d8060008114620025a3576040519150601f19603f3d011682016040523d82523d6000602084013e620025a8565b606091505b50505050505050505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526200266d9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002e8f565b50505050565b806001620026846020600262003e03565b62002690919062003e11565b60215410620027085760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200076c565b6001602160008282546200271d919062003e2b565b909155505060215460005b6020811015620027c757816001166001036200275d5782600182602081106200275557620027556200396b565b015550505050565b600181602081106200277357620027736200396b565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620027b09190620039c9565b915080620027be8162003a05565b91505062002728565b50620027d262003e46565b505050565b60225460ff1615620028785760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b63ffffffff8a1660009081526088602052604090205460ff16156200293d5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af1158015620029ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620029f0919062003e75565b9050801580159062002a0f5750608d5462002a0c824262003e11565b10155b62002a835760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c49440000000000000000000000000000000000000060648201526084016200076c565b60875463ffffffff87811691161462002b055760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000000060648201526084016200076c565b60875460009063ffffffff1662002b1e57508862002b21565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d82015260518101899052607180820193909352815180820390930183526091019052805191012062002bef908e8e63ffffffff168462000ea4565b62000c6b5760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c494460448201526064016200076c565b600054610100900460ff1662002cbc5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200076c565b62000d2c3362002d23565b6055546001600160a01b0316331462000d2c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200076c565b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620027d29084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002608565b60225460ff161562002e535760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016200076c565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002ee6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662002f7b9092919063ffffffff16565b805190915015620027d2578080602001905181019062002f07919062003798565b620027d25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200076c565b606062002f8c848460008562002f96565b90505b9392505050565b606082471015620030105760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016200076c565b6001600160a01b0385163b620030695760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200076c565b600080866001600160a01b0316858760405162003087919062003a79565b60006040518083038185875af1925050503d8060008114620030c6576040519150601f19603f3d011682016040523d82523d6000602084013e620030cb565b606091505b5091509150620030dd828286620030e8565b979650505050505050565b60608315620030f957508162002f8f565b8251156200310a5782518084602001fd5b8160405162461bcd60e51b81526004016200076c919062003e8f565b611a788062003ea583390190565b6001600160a01b038116811462001f9257600080fd5b8035620031578162003134565b919050565b803563ffffffff811681146200315757600080fd5b60008083601f8401126200318457600080fd5b50813567ffffffffffffffff8111156200319d57600080fd5b602083019150836020828501011115620031b657600080fd5b9250929050565b60008060008060008060a08789031215620031d757600080fd5b8635620031e48162003134565b9550620031f4602088016200315c565b94506040870135620032068162003134565b935060608701359250608087013567ffffffffffffffff8111156200322a57600080fd5b6200323889828a0162003171565b979a9699509497509295939492505050565b600080604083850312156200325e57600080fd5b62003269836200315c565b915060208301356200327b8162003134565b809150509250929050565b6000602082840312156200329957600080fd5b813562002f8f8162003134565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620033015762003301620032a6565b604052919050565b600082601f8301126200331b57600080fd5b8135602067ffffffffffffffff8211156200333a576200333a620032a6565b8160051b6200334b828201620032d5565b92835284810182019282810190878511156200336657600080fd5b83870192505b84831015620030dd578235825291830191908301906200336c565b600080600080608085870312156200339e57600080fd5b84359350602085013567ffffffffffffffff80821115620033be57600080fd5b620033cc8883890162003309565b9450604087013591508082168214620033e457600080fd5b509396929550929360600135925050565b60ff8116811462001f9257600080fd5b600080600080600080600060e0888a0312156200342157600080fd5b87356200342e81620033f5565b96506200343e602089016200315c565b95506040880135620034508162003134565b945062003460606089016200315c565b93506080880135620034728162003134565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620034ac57620034ac620032a6565b50601f01601f191660200190565b600082601f830112620034cc57600080fd5b8135620034e3620034dd826200348f565b620032d5565b818152846020838601011115620034f957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200353757600080fd5b8a3567ffffffffffffffff808211156200355057600080fd5b6200355e8e838f0162003309565b9b506200356e60208e016200315c565b9a5060408d0135995060608d013598506200358c60808e016200315c565b97506200359c60a08e016200314a565b9650620035ac60c08e016200315c565b9550620035bc60e08e016200314a565b94506101008d013593506101208d0135915080821115620035dc57600080fd5b50620035eb8d828e01620034ba565b9150509295989b9194979a5092959850565b600080600080608085870312156200361457600080fd5b6200361f856200315c565b93506020850135620036318162003134565b92506040850135620036438162003134565b9396929550929360600135925050565b6000602082840312156200366657600080fd5b5035919050565b600080600080600080600060a0888a0312156200368957600080fd5b62003694886200315c565b96506020880135620036a68162003134565b9550604088013567ffffffffffffffff80821115620036c457600080fd5b620036d28b838c0162003171565b909750955060608a0135915080821115620036ec57600080fd5b50620036fb8a828b0162003171565b90945092505060808801356200371181620033f5565b8091505092959891949750929550565b6000806000606084860312156200373757600080fd5b62003742846200315c565b92506020840135620037548162003134565b9150604084013567ffffffffffffffff8111156200377157600080fd5b6200377f86828701620034ba565b9150509250925092565b801515811462001f9257600080fd5b600060208284031215620037ab57600080fd5b815162002f8f8162003789565b60005b83811015620037d5578181015183820152602001620037bb565b838111156200266d5750506000910152565b600082601f830112620037f957600080fd5b81516200380a620034dd826200348f565b8181528460208386010111156200382057600080fd5b62003833826020830160208701620037b8565b949350505050565b6000602082840312156200384e57600080fd5b815167ffffffffffffffff8111156200386657600080fd5b6200383384828501620037e7565b6000602082840312156200388757600080fd5b815162002f8f81620033f5565b60008151808452620038ae816020860160208601620037b8565b601f01601f19169290920160200192915050565b606081526000620038d7606083018662003894565b8281036020840152620038eb818662003894565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620039528285018762003894565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003a00577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003a395762003a396200399a565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003a70606083018462003894565b95945050505050565b6000825162003a8d818460208701620037b8565b9190910192915050565b60008060006060848603121562003aad57600080fd5b835167ffffffffffffffff8082111562003ac657600080fd5b62003ad487838801620037e7565b9450602086015191508082111562003aeb57600080fd5b5062003afa86828701620037e7565b925050604084015162003b0d81620033f5565b809150509250925092565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003b5960608301878962003b18565b828103602084015262003b6e81868862003b18565b91505060ff831660408301529695505050505050565b6000835162003b98818460208801620037b8565b83519083019062003bae818360208801620037b8565b01949350505050565b6000808585111562003bc857600080fd5b8386111562003bd657600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003bff57600080fd5b873562003c0c8162003134565b9650602088013562003c1e8162003134565b9550604088013594506060880135935060808801356200347281620033f5565b600080600080600080600080610100898b03121562003c5c57600080fd5b883562003c698162003134565b9750602089013562003c7b8162003134565b96506040890135955060608901359450608089013562003c9b8162003789565b935060a089013562003cad81620033f5565b979a969950949793969295929450505060c08201359160e0013590565b600181815b8085111562003d2957817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d0d5762003d0d6200399a565b8085161562003d1b57918102915b93841c939080029062003ccf565b509250929050565b60008262003d425750600162000dab565b8162003d515750600062000dab565b816001811462003d6a576002811462003d755762003d95565b600191505062000dab565b60ff84111562003d895762003d896200399a565b50506001821b62000dab565b5060208310610133831016604e8410600b841016171562003dba575081810a62000dab565b62003dc6838362003cca565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003dfb5762003dfb6200399a565b029392505050565b600062002f8f838362003d31565b60008282101562003e265762003e266200399a565b500390565b6000821982111562003e415762003e416200399a565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60006020828403121562003e8857600080fd5b5051919050565b60208152600062002f8f60208301846200389456fe60c06040523480156200001157600080fd5b5060405162001a7838038062001a788339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516115be620004ba600039600061053001526000818161036f01526104fa01526115be6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b60405161019191906112d5565b60405180910390f35b6101ad6101a8366004611371565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad61020436600461139b565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad610276366004611371565b610552565b6101ad610289366004611371565b61059e565b6101c161029c3660046113d7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d23660046113d7565b60066020526000908152604090205481565b610184610645565b6101ad6102fa366004611371565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad610352366004611371565b6106ed565b6101ad610365366004611371565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f3660046113f9565b6107b2565b005b6101c16103b436600461146c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6060600380546104379061149f565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061149f565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f56565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611521565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c838361101e565b50600192915050565b6060600480546104379061149f565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c8383611124565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661088183611539565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ee3908490611521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4991815260200190565b60405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f81610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166110815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b80600260008282546110939190611521565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906110cd908490611521565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156112495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611285908490611571565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c27565b600060208083528351808285015260005b81811015611302578581018301518582016040015282016112e6565b81811115611314576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136c57600080fd5b919050565b6000806040838503121561138457600080fd5b61138d83611348565b946020939093013593505050565b6000806000606084860312156113b057600080fd5b6113b984611348565b92506113c760208501611348565b9150604084013590509250925092565b6000602082840312156113e957600080fd5b6113f282611348565b9392505050565b600080600080600080600060e0888a03121561141457600080fd5b61141d88611348565b965061142b60208901611348565b95506040880135945060608801359350608088013560ff8116811461144f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561147f57600080fd5b61148883611348565b915061149660208401611348565b90509250929050565b600181811c908216806114b357607f821691505b6020821081036114ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611534576115346114f2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156a5761156a6114f2565b5060010190565b600082821015611583576115836114f2565b50039056fea2646970667358221220dc9c54325b6ec8c11c8bc6a1630cfb64202b6d54611cd1004e705ceca7826a4f64736f6c634300080f0033a26469706673582212209325864155c9b73893997ddf3831325bde53e92ebc8e3e0cd1d1c21523d6dae364736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/BridgeMock.json b/compiled-contracts/BridgeMock.json index b096babcd..94d974276 100644 --- a/compiled-contracts/BridgeMock.json +++ b/compiled-contracts/BridgeMock.json @@ -164,6 +164,19 @@ "name": "OwnershipTransferred", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newClaimTimeout", + "type": "uint256" + } + ], + "name": "SetClaimTimeout", + "type": "event" + }, { "inputs": [], "name": "LEAF_TYPE_ASSET", @@ -401,6 +414,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "claimTimeout", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "deactivateEmergencyState", @@ -536,6 +562,11 @@ "internalType": "address", "name": "_poeAddress", "type": "address" + }, + { + "internalType": "uint256", + "name": "_claimTimeout", + "type": "uint256" } ], "name": "initialize", @@ -654,6 +685,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newClaimTimeout", + "type": "uint256" + } + ], + "name": "setClaimTimeout", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -771,8 +815,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50615cc5806100206000396000f3fe608060405260043610620001e75760003560e01c80637b6323c1116200010b578063bab161bf11620000a1578063e7375881116200006c578063e7375881146200067f578063ed6be5c914620006b3578063f2fde38b14620006ca578063ff634ed714620006ef57600080fd5b8063bab161bf14620005f4578063d02103ca146200062e578063d96a15f71462000650578063dbc16976146200066757600080fd5b80638f61151911620000e25780638f611519146200056b57806391e57e2d146200058d578063a08e8a0814620005a5578063aaa13cc214620005cf57600080fd5b80637b6323c114620004ec57806381b1c17414620005115780638da5cb5b146200054b57600080fd5b8063318aee3d11620001815780633e19704311620001585780633e19704314620003a957806346385549146200048a578063647c576c14620004af578063715018a614620004d457600080fd5b8063318aee3d14620002fd5780633ae05047146200036c5780633da81682146200038457600080fd5b806322e95f2c11620001c257806322e95f2c146200024e5780632b5e42e7146200028c5780632c3f58cd14620002b15780632dfdf0b514620002d657600080fd5b80630871e97114620001ec57806315064c9614620002055780632072f6c51462000236575b600080fd5b62000203620001fd36600462003523565b62000706565b005b3480156200021257600080fd5b50602254620002219060ff1681565b60405190151581526020015b60405180910390f35b3480156200024357600080fd5b5062000203620007c2565b3480156200025b57600080fd5b50620002736200026d366004620035b0565b62000876565b6040516001600160a01b0390911681526020016200022d565b3480156200029957600080fd5b5062000203620002ab366004620035ec565b6200090a565b348015620002be57600080fd5b5062000203620002d036600462003606565b62000919565b348015620002e357600080fd5b50620002ee60215481565b6040519081526020016200022d565b3480156200030a57600080fd5b50620003476200031c36600462003624565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200022d565b3480156200037957600080fd5b50620002ee6200095f565b3480156200039157600080fd5b5062000221620003a336600462003725565b62000a52565b348015620003b657600080fd5b50620002ee620003c8366004620037a3565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200049757600080fd5b5062000203620004a9366004620038b4565b62000b52565b348015620004bc57600080fd5b5062000203620004ce3660046200399b565b62000dd8565b348015620004e157600080fd5b506200020362000fc8565b348015620004f957600080fd5b50620002036200050b366004620038b4565b62000fde565b3480156200051e57600080fd5b506200027362000530366004620035ec565b6024602052600090815260409020546001600160a01b031681565b3480156200055857600080fd5b50605a546001600160a01b031662000273565b3480156200057857600080fd5b5060275462000273906001600160a01b031681565b3480156200059a57600080fd5b50620002ee608c5481565b348015620005b257600080fd5b50620005bc600081565b60405160ff90911681526020016200022d565b348015620005dc57600080fd5b5062000273620005ee366004620039eb565b620015d4565b3480156200060157600080fd5b506022546200061890610100900463ffffffff1681565b60405163ffffffff90911681526020016200022d565b3480156200063b57600080fd5b5060265462000273906001600160a01b031681565b620002036200066136600462003a9f565b62001740565b3480156200067457600080fd5b506200020362001a05565b3480156200068c57600080fd5b50620002216200069e366004620035ec565b60236020526000908152604090205460ff1681565b348015620006c057600080fd5b5062000618600081565b348015620006d757600080fd5b5062000203620006e936600462003624565b62001ab7565b348015620006fc57600080fd5b50620005bc600181565b608c54341115620007aa5760405162461bcd60e51b815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b620007ba86868686868662001b4d565b505050505050565b6027546001600160a01b031633146200086a5760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007a1565b62000874620020f8565b565b6000602460008484604051602001620008d292919060e09290921b7fffffffff0000000000000000000000000000000000000000000000000000000016825260601b6bffffffffffffffffffffffff1916600482015260180190565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b62000914620021d1565b608c55565b62000923620021d1565b6022805463ffffffff909216610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff909216919091179055565b602154600090819081805b602081101562000a495782600116600103620009ca576001816020811062000996576200099662003b07565b01546040805160208101929092528101859052606001604051602081830303815290604052805190602001209350620009f7565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a0460028462003b65565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000a409062003ba1565b9150506200096a565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000b45578160011660010362000acf5786818151811062000a8d5762000a8d62003b07565b60200260200101518360405160200162000ab1929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000b21565b8287828151811062000ae55762000ae562003b07565b602002602001015160405160200162000b08929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000b2e60028362003b65565b91508062000b3c8162003ba1565b91505062000a62565b5050909114949350505050565b60225460ff161562000bf35760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007a1565b62000c098a8a8a8a8a8a8a8a8a8a60016200222d565b63ffffffff8916600090815260236020526040808220805460ff19166001179055516001600160a01b03851690849062000c4c9089908b90879060240162003c39565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162000cb1919062003c72565b60006040518083038185875af1925050503d806000811462000cf0576040519150601f19603f3d011682016040523d82523d6000602084013e62000cf5565b606091505b505090508062000d6d5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007a1565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff161580801562000df95750600054600160ff909116105b8062000e155750303b15801562000e15575060005460ff166001145b62000e895760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007a1565b6000805460ff19166001179055801562000eca57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6022805463ffffffff8616610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff909116179055602680546001600160a01b038086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255602780549285169290911691909117905562000f52620025b5565b6703782dace9d90000608c55801562000fc257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000fd2620021d1565b6200087460006200263e565b60225460ff16156200107f5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007a1565b620010958a8a8a8a8a8a8a8a8a8a60006200222d565b63ffffffff89166000908152602360205260409020805460ff191660011790556001600160a01b038516620011b457604080516000808252602082019092526001600160a01b038516908490604051620010f0919062003c72565b60006040518083038185875af1925050503d80600081146200112f576040519150601f19603f3d011682016040523d82523d6000602084013e62001134565b606091505b5050905080620011ad5760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c4544000000000000000000000000000000000000000000000000006064820152608401620007a1565b506200156a565b60225463ffffffff610100909104811690871603620011e957620011e36001600160a01b0386168484620026a8565b6200156a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620014d65760008060008580602001905181019062001289919062003ce4565b925092509250600085848484604051620012a3906200348c565b620012b19392919062003d5a565b8190604051809103906000f5905080158015620012d2573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001340573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001366919062003da6565b50620013728162002758565b6200137d84620027d0565b6200138883620027d0565b620013968260ff1662002845565b806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620014c49392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001567565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200153f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001565919062003da6565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162001657906200348c565b601f1982820381018352601f90910116604081905262001684908d908d908d908d908d9060200162003df1565b60408051601f1981840301815290829052620016a4929160200162003e32565b604051602081830303815290604052805190602001206040516020016200171a94939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620017e15760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007a1565b60225463ffffffff610100909104811690841603620018695760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007a1565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620018bd98979695949392919062003e65565b60405180910390a16022548151602080840191909120604080517f01000000000000000000000000000000000000000000000000000000000000008185015261010090940460e090811b7fffffffff00000000000000000000000000000000000000000000000000000000908116602187015233606090811b6bffffffffffffffffffffffff199081166025890152928a901b909116603987015287901b16603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200199290620028bb565b6026546001600160a01b03166333d6247d620019ad6200095f565b6040518263ffffffff1660e01b8152600401620019cc91815260200190565b600060405180830381600087803b158015620019e757600080fd5b505af1158015620019fc573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b0316331462001aad5760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007a1565b6200087462002a1a565b62001ac1620021d1565b6001600160a01b03811662001b3f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007a1565b62001b4a816200263e565b50565b60225460ff161562001bee5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007a1565b60225463ffffffff61010090910481169086160362001c765760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007a1565b60008060606001600160a01b03891662001d0b5785341462001d015760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007a1565b6000915062001f95565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001df2576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562001db9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ddf919062003da6565b5060208101518151909450925062001f93565b841562001e075762001e078a88888862002aca565b62001e1e6001600160a01b038b1633308a620030f0565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001e75573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001e9f919081019062003ed1565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001ede573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001f08919081019062003ed1565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001f47573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f6d919062003f0a565b60405160200162001f819392919062003d5a565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162001fd798979695949392919062003e65565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a905260718082019390935281518082039093018352609101905280519101206200207f90620028bb565b6026546001600160a01b03166333d6247d6200209a6200095f565b6040518263ffffffff1660e01b8152600401620020b991815260200190565b600060405180830381600087803b158015620020d457600080fd5b505af1158015620020e9573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff1615620021995760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007a1565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620008745760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007a1565b63ffffffff8a1660009081526023602052604090205460ff1615620022ba5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d4544000000000000000000000000000000000000000000000000000000006064820152608401620007a1565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526001600160a01b039091169063257b3632906084016020604051808303816000875af115801562002346573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200236c919062003f2a565b600003620023e35760405162461bcd60e51b815260206004820152603460248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000006064820152608401620007a1565b60225463ffffffff86811661010090920416146200246a5760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000006064820152608401620007a1565b602254600090610100900463ffffffff16620024885750876200248b565b50885b8251602080850191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f887901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08d811b821660218401526bffffffffffffffffffffffff1960608e811b82166025860152918d901b90921660398401528a901b16603d82015260518101889052607180820193909352815180820390930183526091019052805191012062002559908d8d63ffffffff168462000a52565b620025a75760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c49446044820152606401620007a1565b505050505050505050505050565b600054610100900460ff16620026345760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007a1565b6200087462003143565b605a80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620027539084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152620031cd565b505050565b6040516001600160a01b038216602482015262001b4a9060440160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f2c2ecbc200000000000000000000000000000000000000000000000000000000179052620032b9565b62001b4a81604051602401620027e7919062003f44565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f41304fac00000000000000000000000000000000000000000000000000000000179052620032b9565b62001b4a816040516024016200285d91815260200190565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff82c50f100000000000000000000000000000000000000000000000000000000179052620032b9565b806001620028cc6020600262004092565b620028d89190620040a0565b60215410620029505760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007a1565b600160216000828254620029659190620040ba565b909155505060215460005b602081101562002a0f5781600116600103620029a55782600182602081106200299d576200299d62003b07565b015550505050565b60018160208110620029bb57620029bb62003b07565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620029f8919062003b65565b91508062002a068162003ba1565b91505062002970565b5062002753620040d5565b60225460ff161562002a955760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620007a1565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b600062002b0d83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620032da92505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002e0f57600080808080808062002b70896004818d62004104565b81019062002b7f919062004130565b9650965096509650965096509650336001600160a01b0316876001600160a01b03161462002c165760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007a1565b6001600160a01b038616301462002c965760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007a1565b8a851462002d0d5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007a1565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002dbb919062003c72565b6000604051808303816000865af19150503d806000811462002dfa576040519150601f19603f3d011682016040523d82523d6000602084013e62002dff565b606091505b50505050505050505050620030e9565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002ea25760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007a1565b60008080808080808062002eba8a6004818e62004104565b81019062002ec991906200418b565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462002f625760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007a1565b6001600160a01b038716301462002fe25760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007a1565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162003099919062003c72565b6000604051808303816000865af19150503d8060008114620030d8576040519150601f19603f3d011682016040523d82523d6000602084013e620030dd565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fc29085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401620026ee565b600054610100900460ff16620031c25760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007a1565b62000874336200263e565b600062003224826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620032e19092919063ffffffff16565b80519091501562002753578080602001905181019062003245919062003da6565b620027535760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007a1565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b6020015190565b6060620032f28484600085620032fc565b90505b9392505050565b606082471015620033765760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401620007a1565b6001600160a01b0385163b620033cf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007a1565b600080866001600160a01b03168587604051620033ed919062003c72565b60006040518083038185875af1925050503d80600081146200342c576040519150601f19603f3d011682016040523d82523d6000602084013e62003431565b606091505b5091509150620034438282866200344e565b979650505050505050565b606083156200345f575081620032f5565b825115620034705782518084602001fd5b8160405162461bcd60e51b8152600401620007a1919062003f44565b611a78806200421883390190565b6001600160a01b038116811462001b4a57600080fd5b8035620034bd816200349a565b919050565b803563ffffffff81168114620034bd57600080fd5b60008083601f840112620034ea57600080fd5b50813567ffffffffffffffff8111156200350357600080fd5b6020830191508360208285010111156200351c57600080fd5b9250929050565b60008060008060008060a087890312156200353d57600080fd5b86356200354a816200349a565b95506200355a60208801620034c2565b945060408701356200356c816200349a565b935060608701359250608087013567ffffffffffffffff8111156200359057600080fd5b6200359e89828a01620034d7565b979a9699509497509295939492505050565b60008060408385031215620035c457600080fd5b620035cf83620034c2565b91506020830135620035e1816200349a565b809150509250929050565b600060208284031215620035ff57600080fd5b5035919050565b6000602082840312156200361957600080fd5b620032f582620034c2565b6000602082840312156200363757600080fd5b8135620032f5816200349a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200369f576200369f62003644565b604052919050565b600082601f830112620036b957600080fd5b8135602067ffffffffffffffff821115620036d857620036d862003644565b8160051b620036e982820162003673565b92835284810182019282810190878511156200370457600080fd5b83870192505b8483101562003443578235825291830191908301906200370a565b600080600080608085870312156200373c57600080fd5b84359350602085013567ffffffffffffffff808211156200375c57600080fd5b6200376a88838901620036a7565b94506040870135915080821682146200378257600080fd5b509396929550929360600135925050565b60ff8116811462001b4a57600080fd5b600080600080600080600060e0888a031215620037bf57600080fd5b8735620037cc8162003793565b9650620037dc60208901620034c2565b95506040880135620037ee816200349a565b9450620037fe60608901620034c2565b9350608088013562003810816200349a565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200384a576200384a62003644565b50601f01601f191660200190565b600082601f8301126200386a57600080fd5b8135620038816200387b826200382d565b62003673565b8181528460208386010111156200389757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620038d557600080fd5b8a3567ffffffffffffffff80821115620038ee57600080fd5b620038fc8e838f01620036a7565b9b506200390c60208e01620034c2565b9a5060408d0135995060608d013598506200392a60808e01620034c2565b97506200393a60a08e01620034b0565b96506200394a60c08e01620034c2565b95506200395a60e08e01620034b0565b94506101008d013593506101208d01359150808211156200397a57600080fd5b50620039898d828e0162003858565b9150509295989b9194979a5092959850565b600080600060608486031215620039b157600080fd5b620039bc84620034c2565b92506020840135620039ce816200349a565b91506040840135620039e0816200349a565b809150509250925092565b600080600080600080600060a0888a03121562003a0757600080fd5b62003a1288620034c2565b9650602088013562003a24816200349a565b9550604088013567ffffffffffffffff8082111562003a4257600080fd5b62003a508b838c01620034d7565b909750955060608a013591508082111562003a6a57600080fd5b5062003a798a828b01620034d7565b909450925050608088013562003a8f8162003793565b8091505092959891949750929550565b60008060006060848603121562003ab557600080fd5b62003ac084620034c2565b9250602084013562003ad2816200349a565b9150604084013567ffffffffffffffff81111562003aef57600080fd5b62003afd8682870162003858565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003b9c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003bd55762003bd562003b36565b5060010190565b60005b8381101562003bf957818101518382015260200162003bdf565b8381111562000fc25750506000910152565b6000815180845262003c2581602086016020860162003bdc565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003c69606083018462003c0b565b95945050505050565b6000825162003c8681846020870162003bdc565b9190910192915050565b600082601f83011262003ca257600080fd5b815162003cb36200387b826200382d565b81815284602083860101111562003cc957600080fd5b62003cdc82602083016020870162003bdc565b949350505050565b60008060006060848603121562003cfa57600080fd5b835167ffffffffffffffff8082111562003d1357600080fd5b62003d218783880162003c90565b9450602086015191508082111562003d3857600080fd5b5062003d478682870162003c90565b9250506040840151620039e08162003793565b60608152600062003d6f606083018662003c0b565b828103602084015262003d83818662003c0b565b91505060ff83166040830152949350505050565b801515811462001b4a57600080fd5b60006020828403121562003db957600080fd5b8151620032f58162003d97565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003e0760608301878962003dc6565b828103602084015262003e1c81868862003dc6565b91505060ff831660408301529695505050505050565b6000835162003e4681846020880162003bdc565b83519083019062003e5c81836020880162003bdc565b01949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003eb88285018762003c0b565b925080851660e085015250509998505050505050505050565b60006020828403121562003ee457600080fd5b815167ffffffffffffffff81111562003efc57600080fd5b62003cdc8482850162003c90565b60006020828403121562003f1d57600080fd5b8151620032f58162003793565b60006020828403121562003f3d57600080fd5b5051919050565b602081526000620032f5602083018462003c0b565b600181815b8085111562003fb857817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003f9c5762003f9c62003b36565b8085161562003faa57918102915b93841c939080029062003f5e565b509250929050565b60008262003fd15750600162000904565b8162003fe05750600062000904565b816001811462003ff95760028114620040045762004024565b600191505062000904565b60ff84111562004018576200401862003b36565b50506001821b62000904565b5060208310610133831016604e8410600b841016171562004049575081810a62000904565b62004055838362003f59565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156200408a576200408a62003b36565b029392505050565b6000620032f5838362003fc0565b600082821015620040b557620040b562003b36565b500390565b60008219821115620040d057620040d062003b36565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600080858511156200411557600080fd5b838611156200412357600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200414c57600080fd5b873562004159816200349a565b965060208801356200416b816200349a565b955060408801359450606088013593506080880135620038108162003793565b600080600080600080600080610100898b031215620041a957600080fd5b8835620041b6816200349a565b97506020890135620041c8816200349a565b965060408901359550606089013594506080890135620041e88162003d97565b935060a0890135620041fa8162003793565b979a969950949793969295929450505060c08201359160e001359056fe60c06040523480156200001157600080fd5b5060405162001a7838038062001a788339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516115be620004ba600039600061053001526000818161036f01526104fa01526115be6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b60405161019191906112d5565b60405180910390f35b6101ad6101a8366004611371565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad61020436600461139b565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad610276366004611371565b610552565b6101ad610289366004611371565b61059e565b6101c161029c3660046113d7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d23660046113d7565b60066020526000908152604090205481565b610184610645565b6101ad6102fa366004611371565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad610352366004611371565b6106ed565b6101ad610365366004611371565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f3660046113f9565b6107b2565b005b6101c16103b436600461146c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6060600380546104379061149f565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061149f565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f56565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611521565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c838361101e565b50600192915050565b6060600480546104379061149f565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c8383611124565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661088183611539565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ee3908490611521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4991815260200190565b60405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f81610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166110815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b80600260008282546110939190611521565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906110cd908490611521565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156112495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611285908490611571565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c27565b600060208083528351808285015260005b81811015611302578581018301518582016040015282016112e6565b81811115611314576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136c57600080fd5b919050565b6000806040838503121561138457600080fd5b61138d83611348565b946020939093013593505050565b6000806000606084860312156113b057600080fd5b6113b984611348565b92506113c760208501611348565b9150604084013590509250925092565b6000602082840312156113e957600080fd5b6113f282611348565b9392505050565b600080600080600080600060e0888a03121561141457600080fd5b61141d88611348565b965061142b60208901611348565b95506040880135945060608801359350608088013560ff8116811461144f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561147f57600080fd5b61148883611348565b915061149660208401611348565b90509250929050565b600181811c908216806114b357607f821691505b6020821081036114ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611534576115346114f2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156a5761156a6114f2565b5060010190565b600082821015611583576115836114f2565b50039056fea2646970667358221220dc9c54325b6ec8c11c8bc6a1630cfb64202b6d54611cd1004e705ceca7826a4f64736f6c634300080f0033a2646970667358221220d5e32f6ffbd5cc460bd0a72e00ddd4d753b780a14f41dfbed29efb3720e9bfdf64736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001e75760003560e01c80637b6323c1116200010b578063bab161bf11620000a1578063e7375881116200006c578063e7375881146200067f578063ed6be5c914620006b3578063f2fde38b14620006ca578063ff634ed714620006ef57600080fd5b8063bab161bf14620005f4578063d02103ca146200062e578063d96a15f71462000650578063dbc16976146200066757600080fd5b80638f61151911620000e25780638f611519146200056b57806391e57e2d146200058d578063a08e8a0814620005a5578063aaa13cc214620005cf57600080fd5b80637b6323c114620004ec57806381b1c17414620005115780638da5cb5b146200054b57600080fd5b8063318aee3d11620001815780633e19704311620001585780633e19704314620003a957806346385549146200048a578063647c576c14620004af578063715018a614620004d457600080fd5b8063318aee3d14620002fd5780633ae05047146200036c5780633da81682146200038457600080fd5b806322e95f2c11620001c257806322e95f2c146200024e5780632b5e42e7146200028c5780632c3f58cd14620002b15780632dfdf0b514620002d657600080fd5b80630871e97114620001ec57806315064c9614620002055780632072f6c51462000236575b600080fd5b62000203620001fd36600462003523565b62000706565b005b3480156200021257600080fd5b50602254620002219060ff1681565b60405190151581526020015b60405180910390f35b3480156200024357600080fd5b5062000203620007c2565b3480156200025b57600080fd5b50620002736200026d366004620035b0565b62000876565b6040516001600160a01b0390911681526020016200022d565b3480156200029957600080fd5b5062000203620002ab366004620035ec565b6200090a565b348015620002be57600080fd5b5062000203620002d036600462003606565b62000919565b348015620002e357600080fd5b50620002ee60215481565b6040519081526020016200022d565b3480156200030a57600080fd5b50620003476200031c36600462003624565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200022d565b3480156200037957600080fd5b50620002ee6200095f565b3480156200039157600080fd5b5062000221620003a336600462003725565b62000a52565b348015620003b657600080fd5b50620002ee620003c8366004620037a3565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200049757600080fd5b5062000203620004a9366004620038b4565b62000b52565b348015620004bc57600080fd5b5062000203620004ce3660046200399b565b62000dd8565b348015620004e157600080fd5b506200020362000fc8565b348015620004f957600080fd5b50620002036200050b366004620038b4565b62000fde565b3480156200051e57600080fd5b506200027362000530366004620035ec565b6024602052600090815260409020546001600160a01b031681565b3480156200055857600080fd5b50605a546001600160a01b031662000273565b3480156200057857600080fd5b5060275462000273906001600160a01b031681565b3480156200059a57600080fd5b50620002ee608c5481565b348015620005b257600080fd5b50620005bc600081565b60405160ff90911681526020016200022d565b348015620005dc57600080fd5b5062000273620005ee366004620039eb565b620015d4565b3480156200060157600080fd5b506022546200061890610100900463ffffffff1681565b60405163ffffffff90911681526020016200022d565b3480156200063b57600080fd5b5060265462000273906001600160a01b031681565b620002036200066136600462003a9f565b62001740565b3480156200067457600080fd5b506200020362001a05565b3480156200068c57600080fd5b50620002216200069e366004620035ec565b60236020526000908152604090205460ff1681565b348015620006c057600080fd5b5062000618600081565b348015620006d757600080fd5b5062000203620006e936600462003624565b62001ab7565b348015620006fc57600080fd5b50620005bc600181565b608c54341115620007aa5760405162461bcd60e51b815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b620007ba86868686868662001b4d565b505050505050565b6027546001600160a01b031633146200086a5760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007a1565b62000874620020f8565b565b6000602460008484604051602001620008d292919060e09290921b7fffffffff0000000000000000000000000000000000000000000000000000000016825260601b6bffffffffffffffffffffffff1916600482015260180190565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b62000914620021d1565b608c55565b62000923620021d1565b6022805463ffffffff909216610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff909216919091179055565b602154600090819081805b602081101562000a495782600116600103620009ca576001816020811062000996576200099662003b07565b01546040805160208101929092528101859052606001604051602081830303815290604052805190602001209350620009f7565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a0460028462003b65565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000a409062003ba1565b9150506200096a565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000b45578160011660010362000acf5786818151811062000a8d5762000a8d62003b07565b60200260200101518360405160200162000ab1929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000b21565b8287828151811062000ae55762000ae562003b07565b602002602001015160405160200162000b08929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000b2e60028362003b65565b91508062000b3c8162003ba1565b91505062000a62565b5050909114949350505050565b60225460ff161562000bf35760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007a1565b62000c098a8a8a8a8a8a8a8a8a8a60016200222d565b63ffffffff8916600090815260236020526040808220805460ff19166001179055516001600160a01b03851690849062000c4c9089908b90879060240162003c39565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162000cb1919062003c72565b60006040518083038185875af1925050503d806000811462000cf0576040519150601f19603f3d011682016040523d82523d6000602084013e62000cf5565b606091505b505090508062000d6d5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007a1565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff161580801562000df95750600054600160ff909116105b8062000e155750303b15801562000e15575060005460ff166001145b62000e895760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007a1565b6000805460ff19166001179055801562000eca57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6022805463ffffffff8616610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff909116179055602680546001600160a01b038086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255602780549285169290911691909117905562000f52620025b5565b6703782dace9d90000608c55801562000fc257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000fd2620021d1565b6200087460006200263e565b60225460ff16156200107f5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007a1565b620010958a8a8a8a8a8a8a8a8a8a60006200222d565b63ffffffff89166000908152602360205260409020805460ff191660011790556001600160a01b038516620011b457604080516000808252602082019092526001600160a01b038516908490604051620010f0919062003c72565b60006040518083038185875af1925050503d80600081146200112f576040519150601f19603f3d011682016040523d82523d6000602084013e62001134565b606091505b5050905080620011ad5760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c4544000000000000000000000000000000000000000000000000006064820152608401620007a1565b506200156a565b60225463ffffffff610100909104811690871603620011e957620011e36001600160a01b0386168484620026a8565b6200156a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620014d65760008060008580602001905181019062001289919062003ce4565b925092509250600085848484604051620012a3906200348c565b620012b19392919062003d5a565b8190604051809103906000f5905080158015620012d2573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001340573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001366919062003da6565b50620013728162002758565b6200137d84620027d0565b6200138883620027d0565b620013968260ff1662002845565b806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620014c49392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001567565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200153f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001565919062003da6565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162001657906200348c565b601f1982820381018352601f90910116604081905262001684908d908d908d908d908d9060200162003df1565b60408051601f1981840301815290829052620016a4929160200162003e32565b604051602081830303815290604052805190602001206040516020016200171a94939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620017e15760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007a1565b60225463ffffffff610100909104811690841603620018695760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007a1565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620018bd98979695949392919062003e65565b60405180910390a16022548151602080840191909120604080517f01000000000000000000000000000000000000000000000000000000000000008185015261010090940460e090811b7fffffffff00000000000000000000000000000000000000000000000000000000908116602187015233606090811b6bffffffffffffffffffffffff199081166025890152928a901b909116603987015287901b16603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200199290620028bb565b6026546001600160a01b03166333d6247d620019ad6200095f565b6040518263ffffffff1660e01b8152600401620019cc91815260200190565b600060405180830381600087803b158015620019e757600080fd5b505af1158015620019fc573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b0316331462001aad5760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007a1565b6200087462002a1a565b62001ac1620021d1565b6001600160a01b03811662001b3f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007a1565b62001b4a816200263e565b50565b60225460ff161562001bee5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007a1565b60225463ffffffff61010090910481169086160362001c765760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007a1565b60008060606001600160a01b03891662001d0b5785341462001d015760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007a1565b6000915062001f95565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001df2576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562001db9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ddf919062003da6565b5060208101518151909450925062001f93565b841562001e075762001e078a88888862002aca565b62001e1e6001600160a01b038b1633308a620030f0565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001e75573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001e9f919081019062003ed1565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001ede573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001f08919081019062003ed1565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001f47573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f6d919062003f0a565b60405160200162001f819392919062003d5a565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162001fd798979695949392919062003e65565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a905260718082019390935281518082039093018352609101905280519101206200207f90620028bb565b6026546001600160a01b03166333d6247d6200209a6200095f565b6040518263ffffffff1660e01b8152600401620020b991815260200190565b600060405180830381600087803b158015620020d457600080fd5b505af1158015620020e9573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff1615620021995760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007a1565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620008745760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007a1565b63ffffffff8a1660009081526023602052604090205460ff1615620022ba5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d4544000000000000000000000000000000000000000000000000000000006064820152608401620007a1565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526001600160a01b039091169063257b3632906084016020604051808303816000875af115801562002346573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200236c919062003f2a565b600003620023e35760405162461bcd60e51b815260206004820152603460248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000006064820152608401620007a1565b60225463ffffffff86811661010090920416146200246a5760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000006064820152608401620007a1565b602254600090610100900463ffffffff16620024885750876200248b565b50885b8251602080850191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f887901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08d811b821660218401526bffffffffffffffffffffffff1960608e811b82166025860152918d901b90921660398401528a901b16603d82015260518101889052607180820193909352815180820390930183526091019052805191012062002559908d8d63ffffffff168462000a52565b620025a75760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c49446044820152606401620007a1565b505050505050505050505050565b600054610100900460ff16620026345760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007a1565b6200087462003143565b605a80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620027539084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152620031cd565b505050565b6040516001600160a01b038216602482015262001b4a9060440160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f2c2ecbc200000000000000000000000000000000000000000000000000000000179052620032b9565b62001b4a81604051602401620027e7919062003f44565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f41304fac00000000000000000000000000000000000000000000000000000000179052620032b9565b62001b4a816040516024016200285d91815260200190565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff82c50f100000000000000000000000000000000000000000000000000000000179052620032b9565b806001620028cc6020600262004092565b620028d89190620040a0565b60215410620029505760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007a1565b600160216000828254620029659190620040ba565b909155505060215460005b602081101562002a0f5781600116600103620029a55782600182602081106200299d576200299d62003b07565b015550505050565b60018160208110620029bb57620029bb62003b07565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620029f8919062003b65565b91508062002a068162003ba1565b91505062002970565b5062002753620040d5565b60225460ff161562002a955760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620007a1565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b600062002b0d83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620032da92505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002e0f57600080808080808062002b70896004818d62004104565b81019062002b7f919062004130565b9650965096509650965096509650336001600160a01b0316876001600160a01b03161462002c165760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007a1565b6001600160a01b038616301462002c965760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007a1565b8a851462002d0d5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007a1565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002dbb919062003c72565b6000604051808303816000865af19150503d806000811462002dfa576040519150601f19603f3d011682016040523d82523d6000602084013e62002dff565b606091505b50505050505050505050620030e9565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002ea25760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007a1565b60008080808080808062002eba8a6004818e62004104565b81019062002ec991906200418b565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462002f625760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007a1565b6001600160a01b038716301462002fe25760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007a1565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162003099919062003c72565b6000604051808303816000865af19150503d8060008114620030d8576040519150601f19603f3d011682016040523d82523d6000602084013e620030dd565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fc29085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401620026ee565b600054610100900460ff16620031c25760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007a1565b62000874336200263e565b600062003224826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620032e19092919063ffffffff16565b80519091501562002753578080602001905181019062003245919062003da6565b620027535760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007a1565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b6020015190565b6060620032f28484600085620032fc565b90505b9392505050565b606082471015620033765760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401620007a1565b6001600160a01b0385163b620033cf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007a1565b600080866001600160a01b03168587604051620033ed919062003c72565b60006040518083038185875af1925050503d80600081146200342c576040519150601f19603f3d011682016040523d82523d6000602084013e62003431565b606091505b5091509150620034438282866200344e565b979650505050505050565b606083156200345f575081620032f5565b825115620034705782518084602001fd5b8160405162461bcd60e51b8152600401620007a1919062003f44565b611a78806200421883390190565b6001600160a01b038116811462001b4a57600080fd5b8035620034bd816200349a565b919050565b803563ffffffff81168114620034bd57600080fd5b60008083601f840112620034ea57600080fd5b50813567ffffffffffffffff8111156200350357600080fd5b6020830191508360208285010111156200351c57600080fd5b9250929050565b60008060008060008060a087890312156200353d57600080fd5b86356200354a816200349a565b95506200355a60208801620034c2565b945060408701356200356c816200349a565b935060608701359250608087013567ffffffffffffffff8111156200359057600080fd5b6200359e89828a01620034d7565b979a9699509497509295939492505050565b60008060408385031215620035c457600080fd5b620035cf83620034c2565b91506020830135620035e1816200349a565b809150509250929050565b600060208284031215620035ff57600080fd5b5035919050565b6000602082840312156200361957600080fd5b620032f582620034c2565b6000602082840312156200363757600080fd5b8135620032f5816200349a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200369f576200369f62003644565b604052919050565b600082601f830112620036b957600080fd5b8135602067ffffffffffffffff821115620036d857620036d862003644565b8160051b620036e982820162003673565b92835284810182019282810190878511156200370457600080fd5b83870192505b8483101562003443578235825291830191908301906200370a565b600080600080608085870312156200373c57600080fd5b84359350602085013567ffffffffffffffff808211156200375c57600080fd5b6200376a88838901620036a7565b94506040870135915080821682146200378257600080fd5b509396929550929360600135925050565b60ff8116811462001b4a57600080fd5b600080600080600080600060e0888a031215620037bf57600080fd5b8735620037cc8162003793565b9650620037dc60208901620034c2565b95506040880135620037ee816200349a565b9450620037fe60608901620034c2565b9350608088013562003810816200349a565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200384a576200384a62003644565b50601f01601f191660200190565b600082601f8301126200386a57600080fd5b8135620038816200387b826200382d565b62003673565b8181528460208386010111156200389757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620038d557600080fd5b8a3567ffffffffffffffff80821115620038ee57600080fd5b620038fc8e838f01620036a7565b9b506200390c60208e01620034c2565b9a5060408d0135995060608d013598506200392a60808e01620034c2565b97506200393a60a08e01620034b0565b96506200394a60c08e01620034c2565b95506200395a60e08e01620034b0565b94506101008d013593506101208d01359150808211156200397a57600080fd5b50620039898d828e0162003858565b9150509295989b9194979a5092959850565b600080600060608486031215620039b157600080fd5b620039bc84620034c2565b92506020840135620039ce816200349a565b91506040840135620039e0816200349a565b809150509250925092565b600080600080600080600060a0888a03121562003a0757600080fd5b62003a1288620034c2565b9650602088013562003a24816200349a565b9550604088013567ffffffffffffffff8082111562003a4257600080fd5b62003a508b838c01620034d7565b909750955060608a013591508082111562003a6a57600080fd5b5062003a798a828b01620034d7565b909450925050608088013562003a8f8162003793565b8091505092959891949750929550565b60008060006060848603121562003ab557600080fd5b62003ac084620034c2565b9250602084013562003ad2816200349a565b9150604084013567ffffffffffffffff81111562003aef57600080fd5b62003afd8682870162003858565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003b9c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003bd55762003bd562003b36565b5060010190565b60005b8381101562003bf957818101518382015260200162003bdf565b8381111562000fc25750506000910152565b6000815180845262003c2581602086016020860162003bdc565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003c69606083018462003c0b565b95945050505050565b6000825162003c8681846020870162003bdc565b9190910192915050565b600082601f83011262003ca257600080fd5b815162003cb36200387b826200382d565b81815284602083860101111562003cc957600080fd5b62003cdc82602083016020870162003bdc565b949350505050565b60008060006060848603121562003cfa57600080fd5b835167ffffffffffffffff8082111562003d1357600080fd5b62003d218783880162003c90565b9450602086015191508082111562003d3857600080fd5b5062003d478682870162003c90565b9250506040840151620039e08162003793565b60608152600062003d6f606083018662003c0b565b828103602084015262003d83818662003c0b565b91505060ff83166040830152949350505050565b801515811462001b4a57600080fd5b60006020828403121562003db957600080fd5b8151620032f58162003d97565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003e0760608301878962003dc6565b828103602084015262003e1c81868862003dc6565b91505060ff831660408301529695505050505050565b6000835162003e4681846020880162003bdc565b83519083019062003e5c81836020880162003bdc565b01949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003eb88285018762003c0b565b925080851660e085015250509998505050505050505050565b60006020828403121562003ee457600080fd5b815167ffffffffffffffff81111562003efc57600080fd5b62003cdc8482850162003c90565b60006020828403121562003f1d57600080fd5b8151620032f58162003793565b60006020828403121562003f3d57600080fd5b5051919050565b602081526000620032f5602083018462003c0b565b600181815b8085111562003fb857817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003f9c5762003f9c62003b36565b8085161562003faa57918102915b93841c939080029062003f5e565b509250929050565b60008262003fd15750600162000904565b8162003fe05750600062000904565b816001811462003ff95760028114620040045762004024565b600191505062000904565b60ff84111562004018576200401862003b36565b50506001821b62000904565b5060208310610133831016604e8410600b841016171562004049575081810a62000904565b62004055838362003f59565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156200408a576200408a62003b36565b029392505050565b6000620032f5838362003fc0565b600082821015620040b557620040b562003b36565b500390565b60008219821115620040d057620040d062003b36565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600080858511156200411557600080fd5b838611156200412357600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200414c57600080fd5b873562004159816200349a565b965060208801356200416b816200349a565b955060408801359450606088013593506080880135620038108162003793565b600080600080600080600080610100898b031215620041a957600080fd5b8835620041b6816200349a565b97506020890135620041c8816200349a565b965060408901359550606089013594506080890135620041e88162003d97565b935060a0890135620041fa8162003793565b979a969950949793969295929450505060c08201359160e001359056fe60c06040523480156200001157600080fd5b5060405162001a7838038062001a788339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516115be620004ba600039600061053001526000818161036f01526104fa01526115be6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b60405161019191906112d5565b60405180910390f35b6101ad6101a8366004611371565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad61020436600461139b565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad610276366004611371565b610552565b6101ad610289366004611371565b61059e565b6101c161029c3660046113d7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d23660046113d7565b60066020526000908152604090205481565b610184610645565b6101ad6102fa366004611371565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad610352366004611371565b6106ed565b6101ad610365366004611371565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f3660046113f9565b6107b2565b005b6101c16103b436600461146c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6060600380546104379061149f565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061149f565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f56565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611521565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c838361101e565b50600192915050565b6060600480546104379061149f565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c8383611124565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661088183611539565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ee3908490611521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4991815260200190565b60405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f81610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166110815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b80600260008282546110939190611521565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906110cd908490611521565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156112495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611285908490611571565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c27565b600060208083528351808285015260005b81811015611302578581018301518582016040015282016112e6565b81811115611314576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136c57600080fd5b919050565b6000806040838503121561138457600080fd5b61138d83611348565b946020939093013593505050565b6000806000606084860312156113b057600080fd5b6113b984611348565b92506113c760208501611348565b9150604084013590509250925092565b6000602082840312156113e957600080fd5b6113f282611348565b9392505050565b600080600080600080600060e0888a03121561141457600080fd5b61141d88611348565b965061142b60208901611348565b95506040880135945060608801359350608088013560ff8116811461144f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561147f57600080fd5b61148883611348565b915061149660208401611348565b90509250929050565b600181811c908216806114b357607f821691505b6020821081036114ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611534576115346114f2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156a5761156a6114f2565b5060010190565b600082821015611583576115836114f2565b50039056fea2646970667358221220dc9c54325b6ec8c11c8bc6a1630cfb64202b6d54611cd1004e705ceca7826a4f64736f6c634300080f0033a2646970667358221220d5e32f6ffbd5cc460bd0a72e00ddd4d753b780a14f41dfbed29efb3720e9bfdf64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50615a76806100206000396000f3fe608060405260043610620001ff5760003560e01c80637b6323c11162000117578063d02103ca11620000a1578063e7a5b4ea116200006c578063e7a5b4ea14620006de578063ed6be5c91462000703578063f2fde38b146200071a578063ff634ed7146200073f57600080fd5b8063d02103ca1462000659578063d96a15f7146200067b578063dbc169761462000692578063e737588114620006aa57600080fd5b806391e57e2d11620000e257806391e57e2d14620005bd578063a08e8a0814620005d5578063aaa13cc214620005ff578063bab161bf146200062457600080fd5b80637b6323c1146200051c57806381b1c17414620005415780638da5cb5b146200057b5780638f611519146200059b57600080fd5b80632dfdf0b511620001995780633e19704311620001645780633e19704314620003d95780634638554914620004ba5780636555954014620004df578063715018a6146200050457600080fd5b80632dfdf0b51462000315578063318aee3d146200032d5780633ae05047146200039c5780633da8168214620003b457600080fd5b80632072f6c511620001da5780632072f6c5146200027557806322e95f2c146200028d5780632b5e42e714620002cb5780632c3f58cd14620002f057600080fd5b80630871e97114620002045780630e1da6c3146200021d57806315064c961462000248575b600080fd5b6200021b62000215366004620032c3565b62000756565b005b3480156200022a57600080fd5b5062000235608d5481565b6040519081526020015b60405180910390f35b3480156200025557600080fd5b50602254620002649060ff1681565b60405190151581526020016200023f565b3480156200028257600080fd5b506200021b62000812565b3480156200029a57600080fd5b50620002b2620002ac36600462003350565b620008c6565b6040516001600160a01b0390911681526020016200023f565b348015620002d857600080fd5b506200021b620002ea3660046200338c565b62000949565b348015620002fd57600080fd5b506200021b6200030f366004620033a6565b62000958565b3480156200032257600080fd5b506200023560215481565b3480156200033a57600080fd5b50620003776200034c366004620033c4565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200023f565b348015620003a957600080fd5b506200023562000999565b348015620003c157600080fd5b5062000264620003d3366004620034c5565b62000a8c565b348015620003e657600080fd5b5062000235620003f836600462003543565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004c757600080fd5b506200021b620004d936600462003654565b62000b8c565b348015620004ec57600080fd5b506200021b620004fe3660046200373b565b62000e12565b3480156200051157600080fd5b506200021b62000ffa565b3480156200052957600080fd5b506200021b6200053b36600462003654565b62001010565b3480156200054e57600080fd5b50620002b2620005603660046200338c565b6089602052600090815260409020546001600160a01b031681565b3480156200058857600080fd5b506055546001600160a01b0316620002b2565b348015620005a857600080fd5b50608c54620002b2906001600160a01b031681565b348015620005ca57600080fd5b5062000235608e5481565b348015620005e257600080fd5b50620005ec600081565b60405160ff90911681526020016200023f565b3480156200060c57600080fd5b50620002b26200061e36600462003791565b620015d2565b3480156200063157600080fd5b50608754620006439063ffffffff1681565b60405163ffffffff90911681526020016200023f565b3480156200066657600080fd5b50608b54620002b2906001600160a01b031681565b6200021b6200068c36600462003845565b6200173e565b3480156200069f57600080fd5b506200021b620019f2565b348015620006b757600080fd5b5062000264620006c93660046200338c565b60886020526000908152604090205460ff1681565b348015620006eb57600080fd5b506200021b620006fd3660046200338c565b62001aa4565b3480156200071057600080fd5b5062000643600081565b3480156200072757600080fd5b506200021b62000739366004620033c4565b62001ae9565b3480156200074c57600080fd5b50620005ec600181565b608e54341115620007fa5760405162461bcd60e51b815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6200080a86868686868662001b7f565b505050505050565b608c546001600160a01b03163314620008ba5760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c462002125565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b62000953620021fe565b608e55565b62000962620021fe565b608780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b602154600090819081805b602081101562000a83578260011660010362000a045760018160208110620009d057620009d0620038ad565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000a31565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a3e6002846200390b565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000a7a9062003947565b915050620009a4565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000b7f578160011660010362000b095786818151811062000ac75762000ac7620038ad565b60200260200101518360405160200162000aeb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000b5b565b8287828151811062000b1f5762000b1f620038ad565b602002602001015160405160200162000b42929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000b686002836200390b565b91508062000b768162003947565b91505062000a9c565b5050909114949350505050565b60225460ff161562000c2d5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b62000c438a8a8a8a8a8a8a8a8a8a60016200225a565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b03851690849062000c869089908b908790602401620039df565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162000ceb919062003a18565b60006040518083038185875af1925050503d806000811462000d2a576040519150601f19603f3d011682016040523d82523d6000602084013e62000d2f565b606091505b505090508062000da75760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff161580801562000e335750600054600160ff909116105b8062000e4f5750303b15801562000e4f575060005460ff166001145b62000ec35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007f1565b6000805460ff19166001179055801562000f0457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d8290556703782dace9d90000608e55801562000ff357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b62001004620021fe565b620008c46000620025e7565b60225460ff1615620010b15760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b620010c78a8a8a8a8a8a8a8a8a8a60006200225a565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620011e657604080516000808252602082019092526001600160a01b03851690849060405162001122919062003a18565b60006040518083038185875af1925050503d806000811462001161576040519150601f19603f3d011682016040523d82523d6000602084013e62001166565b606091505b5050905080620011df5760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c4544000000000000000000000000000000000000000000000000006064820152608401620007f1565b5062001568565b60875463ffffffff908116908716036200121657620012106001600160a01b038616848462002651565b62001568565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620014d457600080600085806020019051810190620012b6919062003a8a565b925092509250600085848484604051620012d0906200322c565b620012de9392919062003b0b565b8190604051809103906000f5905080158015620012ff573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af11580156200136d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001393919062003b57565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620014c29392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001565565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200153d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001563919062003b57565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162001655906200322c565b601f1982820381018352601f90910116604081905262001682908d908d908d908d908d9060200162003ba2565b60408051601f1981840301815290829052620016a2929160200162003be3565b604051602081830303815290604052805190602001206040516020016200171894939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620017df5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff90811690841603620018625760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620018af9260019263ffffffff9092169133918991899134918a919062003c16565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200197f9062002701565b608b546001600160a01b03166333d6247d6200199a62000999565b6040518263ffffffff1660e01b8152600401620019b991815260200190565b600060405180830381600087803b158015620019d457600080fd5b505af1158015620019e9573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001a9a5760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c462002860565b62001aae620021fe565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001af3620021fe565b6001600160a01b03811662001b715760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007f1565b62001b7c81620025e7565b50565b60225460ff161562001c205760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff9081169086160362001ca35760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b60008060606001600160a01b03891662001d385785341462001d2e5760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007f1565b6000915062001fc2565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001e1f576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562001de6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e0c919062003b57565b5060208101518151909450925062001fc0565b841562001e345762001e348a88888862002910565b62001e4b6001600160a01b038b1633308a62002f35565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001ea2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001ecc919081019062003c82565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001f0b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001f35919081019062003c82565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001f74573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f9a919062003cbb565b60405160200162001fae9392919062003b0b565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200200498979695949392919062003c16565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620020ac9062002701565b608b546001600160a01b03166333d6247d620020c762000999565b6040518263ffffffff1660e01b8152600401620020e691815260200190565b600060405180830381600087803b1580156200210157600080fd5b505af115801562002116573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff1615620021c65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6055546001600160a01b03163314620008c45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007f1565b63ffffffff8a1660009081526088602052604090205460ff1615620022e75760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562002374573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200239a919062003cdb565b90508015801590620023b95750608d54620023b6824262003cf5565b10155b6200242d5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c4944000000000000000000000000000000000000006064820152608401620007f1565b60875463ffffffff878116911614620024af5760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000006064820152608401620007f1565b60875460009063ffffffff16620024c8575088620024cb565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d82015260518101899052607180820193909352815180820390930183526091019052805191012062002599908e8e63ffffffff168462000a8c565b620021165760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c49446044820152606401620007f1565b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620026fc9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002f8e565b505050565b806001620027126020600262003e48565b6200271e919062003cf5565b60215410620027965760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007f1565b600160216000828254620027ab919062003e56565b909155505060215460005b6020811015620028555781600116600103620027eb578260018260208110620027e357620027e3620038ad565b015550505050565b60018160208110620028015762002801620038ad565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200283e91906200390b565b9150806200284c8162003947565b915050620027b6565b50620026fc62003e71565b60225460ff1615620028db5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620007f1565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200295383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200307a92505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002c55576000808080808080620029b6896004818d62003ea0565b810190620029c5919062003ecc565b9650965096509650965096509650336001600160a01b0316876001600160a01b03161462002a5c5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038616301462002adc5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b8a851462002b535760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002c01919062003a18565b6000604051808303816000865af19150503d806000811462002c40576040519150601f19603f3d011682016040523d82523d6000602084013e62002c45565b606091505b5050505050505050505062000ff3565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002ce85760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007f1565b60008080808080808062002d008a6004818e62003ea0565b81019062002d0f919062003f27565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462002da85760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038716301462002e285760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002edf919062003a18565b6000604051808303816000865af19150503d806000811462002f1e576040519150601f19603f3d011682016040523d82523d6000602084013e62002f23565b606091505b50505050505050505050505050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262002f889085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002697565b50505050565b600062002fe5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620030819092919063ffffffff16565b805190915015620026fc578080602001905181019062003006919062003b57565b620026fc5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007f1565b6020015190565b60606200309284846000856200309c565b90505b9392505050565b606082471015620031165760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401620007f1565b6001600160a01b0385163b6200316f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007f1565b600080866001600160a01b031685876040516200318d919062003a18565b60006040518083038185875af1925050503d8060008114620031cc576040519150601f19603f3d011682016040523d82523d6000602084013e620031d1565b606091505b5091509150620031e3828286620031ee565b979650505050505050565b60608315620031ff57508162003095565b825115620032105782518084602001fd5b8160405162461bcd60e51b8152600401620007f1919062003fb3565b611a788062003fc983390190565b6001600160a01b038116811462001b7c57600080fd5b80356200325d816200323a565b919050565b803563ffffffff811681146200325d57600080fd5b60008083601f8401126200328a57600080fd5b50813567ffffffffffffffff811115620032a357600080fd5b602083019150836020828501011115620032bc57600080fd5b9250929050565b60008060008060008060a08789031215620032dd57600080fd5b8635620032ea816200323a565b9550620032fa6020880162003262565b945060408701356200330c816200323a565b935060608701359250608087013567ffffffffffffffff8111156200333057600080fd5b6200333e89828a0162003277565b979a9699509497509295939492505050565b600080604083850312156200336457600080fd5b6200336f8362003262565b9150602083013562003381816200323a565b809150509250929050565b6000602082840312156200339f57600080fd5b5035919050565b600060208284031215620033b957600080fd5b620030958262003262565b600060208284031215620033d757600080fd5b813562003095816200323a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200343f576200343f620033e4565b604052919050565b600082601f8301126200345957600080fd5b8135602067ffffffffffffffff821115620034785762003478620033e4565b8160051b6200348982820162003413565b9283528481018201928281019087851115620034a457600080fd5b83870192505b84831015620031e357823582529183019190830190620034aa565b60008060008060808587031215620034dc57600080fd5b84359350602085013567ffffffffffffffff80821115620034fc57600080fd5b6200350a8883890162003447565b94506040870135915080821682146200352257600080fd5b509396929550929360600135925050565b60ff8116811462001b7c57600080fd5b600080600080600080600060e0888a0312156200355f57600080fd5b87356200356c8162003533565b96506200357c6020890162003262565b955060408801356200358e816200323a565b94506200359e6060890162003262565b93506080880135620035b0816200323a565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620035ea57620035ea620033e4565b50601f01601f191660200190565b600082601f8301126200360a57600080fd5b8135620036216200361b82620035cd565b62003413565b8181528460208386010111156200363757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200367557600080fd5b8a3567ffffffffffffffff808211156200368e57600080fd5b6200369c8e838f0162003447565b9b50620036ac60208e0162003262565b9a5060408d0135995060608d01359850620036ca60808e0162003262565b9750620036da60a08e0162003250565b9650620036ea60c08e0162003262565b9550620036fa60e08e0162003250565b94506101008d013593506101208d01359150808211156200371a57600080fd5b50620037298d828e01620035f8565b9150509295989b9194979a5092959850565b600080600080608085870312156200375257600080fd5b6200375d8562003262565b935060208501356200376f816200323a565b9250604085013562003781816200323a565b9396929550929360600135925050565b600080600080600080600060a0888a031215620037ad57600080fd5b620037b88862003262565b96506020880135620037ca816200323a565b9550604088013567ffffffffffffffff80821115620037e857600080fd5b620037f68b838c0162003277565b909750955060608a01359150808211156200381057600080fd5b506200381f8a828b0162003277565b9094509250506080880135620038358162003533565b8091505092959891949750929550565b6000806000606084860312156200385b57600080fd5b620038668462003262565b9250602084013562003878816200323a565b9150604084013567ffffffffffffffff8111156200389557600080fd5b620038a386828701620035f8565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003942577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200397b576200397b620038dc565b5060010190565b60005b838110156200399f57818101518382015260200162003985565b8381111562002f885750506000910152565b60008151808452620039cb81602086016020860162003982565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003a0f6060830184620039b1565b95945050505050565b6000825162003a2c81846020870162003982565b9190910192915050565b600082601f83011262003a4857600080fd5b815162003a596200361b82620035cd565b81815284602083860101111562003a6f57600080fd5b62003a8282602083016020870162003982565b949350505050565b60008060006060848603121562003aa057600080fd5b835167ffffffffffffffff8082111562003ab957600080fd5b62003ac78783880162003a36565b9450602086015191508082111562003ade57600080fd5b5062003aed8682870162003a36565b925050604084015162003b008162003533565b809150509250925092565b60608152600062003b206060830186620039b1565b828103602084015262003b348186620039b1565b91505060ff83166040830152949350505050565b801515811462001b7c57600080fd5b60006020828403121562003b6a57600080fd5b8151620030958162003b48565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003bb860608301878962003b77565b828103602084015262003bcd81868862003b77565b91505060ff831660408301529695505050505050565b6000835162003bf781846020880162003982565b83519083019062003c0d81836020880162003982565b01949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003c6982850187620039b1565b925080851660e085015250509998505050505050505050565b60006020828403121562003c9557600080fd5b815167ffffffffffffffff81111562003cad57600080fd5b62003a828482850162003a36565b60006020828403121562003cce57600080fd5b8151620030958162003533565b60006020828403121562003cee57600080fd5b5051919050565b60008282101562003d0a5762003d0a620038dc565b500390565b600181815b8085111562003d6e57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d525762003d52620038dc565b8085161562003d6057918102915b93841c939080029062003d14565b509250929050565b60008262003d875750600162000943565b8162003d965750600062000943565b816001811462003daf576002811462003dba5762003dda565b600191505062000943565b60ff84111562003dce5762003dce620038dc565b50506001821b62000943565b5060208310610133831016604e8410600b841016171562003dff575081810a62000943565b62003e0b838362003d0f565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003e405762003e40620038dc565b029392505050565b600062003095838362003d76565b6000821982111562003e6c5762003e6c620038dc565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000808585111562003eb157600080fd5b8386111562003ebf57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003ee857600080fd5b873562003ef5816200323a565b9650602088013562003f07816200323a565b955060408801359450606088013593506080880135620035b08162003533565b600080600080600080600080610100898b03121562003f4557600080fd5b883562003f52816200323a565b9750602089013562003f64816200323a565b96506040890135955060608901359450608089013562003f848162003b48565b935060a089013562003f968162003533565b979a969950949793969295929450505060c08201359160e0013590565b602081526000620030956020830184620039b156fe60c06040523480156200001157600080fd5b5060405162001a7838038062001a788339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516115be620004ba600039600061053001526000818161036f01526104fa01526115be6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b60405161019191906112d5565b60405180910390f35b6101ad6101a8366004611371565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad61020436600461139b565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad610276366004611371565b610552565b6101ad610289366004611371565b61059e565b6101c161029c3660046113d7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d23660046113d7565b60066020526000908152604090205481565b610184610645565b6101ad6102fa366004611371565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad610352366004611371565b6106ed565b6101ad610365366004611371565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f3660046113f9565b6107b2565b005b6101c16103b436600461146c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6060600380546104379061149f565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061149f565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f56565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611521565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c838361101e565b50600192915050565b6060600480546104379061149f565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c8383611124565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661088183611539565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ee3908490611521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4991815260200190565b60405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f81610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166110815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b80600260008282546110939190611521565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906110cd908490611521565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156112495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611285908490611571565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c27565b600060208083528351808285015260005b81811015611302578581018301518582016040015282016112e6565b81811115611314576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136c57600080fd5b919050565b6000806040838503121561138457600080fd5b61138d83611348565b946020939093013593505050565b6000806000606084860312156113b057600080fd5b6113b984611348565b92506113c760208501611348565b9150604084013590509250925092565b6000602082840312156113e957600080fd5b6113f282611348565b9392505050565b600080600080600080600060e0888a03121561141457600080fd5b61141d88611348565b965061142b60208901611348565b95506040880135945060608801359350608088013560ff8116811461144f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561147f57600080fd5b61148883611348565b915061149660208401611348565b90509250929050565b600181811c908216806114b357607f821691505b6020821081036114ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611534576115346114f2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156a5761156a6114f2565b5060010190565b600082821015611583576115836114f2565b50039056fea2646970667358221220dc9c54325b6ec8c11c8bc6a1630cfb64202b6d54611cd1004e705ceca7826a4f64736f6c634300080f0033a2646970667358221220c467ba10b618fc297021f80dcd4868a7cf64d7fc688e050fefecaa7192f4dd1e64736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001ff5760003560e01c80637b6323c11162000117578063d02103ca11620000a1578063e7a5b4ea116200006c578063e7a5b4ea14620006de578063ed6be5c91462000703578063f2fde38b146200071a578063ff634ed7146200073f57600080fd5b8063d02103ca1462000659578063d96a15f7146200067b578063dbc169761462000692578063e737588114620006aa57600080fd5b806391e57e2d11620000e257806391e57e2d14620005bd578063a08e8a0814620005d5578063aaa13cc214620005ff578063bab161bf146200062457600080fd5b80637b6323c1146200051c57806381b1c17414620005415780638da5cb5b146200057b5780638f611519146200059b57600080fd5b80632dfdf0b511620001995780633e19704311620001645780633e19704314620003d95780634638554914620004ba5780636555954014620004df578063715018a6146200050457600080fd5b80632dfdf0b51462000315578063318aee3d146200032d5780633ae05047146200039c5780633da8168214620003b457600080fd5b80632072f6c511620001da5780632072f6c5146200027557806322e95f2c146200028d5780632b5e42e714620002cb5780632c3f58cd14620002f057600080fd5b80630871e97114620002045780630e1da6c3146200021d57806315064c961462000248575b600080fd5b6200021b62000215366004620032c3565b62000756565b005b3480156200022a57600080fd5b5062000235608d5481565b6040519081526020015b60405180910390f35b3480156200025557600080fd5b50602254620002649060ff1681565b60405190151581526020016200023f565b3480156200028257600080fd5b506200021b62000812565b3480156200029a57600080fd5b50620002b2620002ac36600462003350565b620008c6565b6040516001600160a01b0390911681526020016200023f565b348015620002d857600080fd5b506200021b620002ea3660046200338c565b62000949565b348015620002fd57600080fd5b506200021b6200030f366004620033a6565b62000958565b3480156200032257600080fd5b506200023560215481565b3480156200033a57600080fd5b50620003776200034c366004620033c4565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200023f565b348015620003a957600080fd5b506200023562000999565b348015620003c157600080fd5b5062000264620003d3366004620034c5565b62000a8c565b348015620003e657600080fd5b5062000235620003f836600462003543565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004c757600080fd5b506200021b620004d936600462003654565b62000b8c565b348015620004ec57600080fd5b506200021b620004fe3660046200373b565b62000e12565b3480156200051157600080fd5b506200021b62000ffa565b3480156200052957600080fd5b506200021b6200053b36600462003654565b62001010565b3480156200054e57600080fd5b50620002b2620005603660046200338c565b6089602052600090815260409020546001600160a01b031681565b3480156200058857600080fd5b506055546001600160a01b0316620002b2565b348015620005a857600080fd5b50608c54620002b2906001600160a01b031681565b348015620005ca57600080fd5b5062000235608e5481565b348015620005e257600080fd5b50620005ec600081565b60405160ff90911681526020016200023f565b3480156200060c57600080fd5b50620002b26200061e36600462003791565b620015d2565b3480156200063157600080fd5b50608754620006439063ffffffff1681565b60405163ffffffff90911681526020016200023f565b3480156200066657600080fd5b50608b54620002b2906001600160a01b031681565b6200021b6200068c36600462003845565b6200173e565b3480156200069f57600080fd5b506200021b620019f2565b348015620006b757600080fd5b5062000264620006c93660046200338c565b60886020526000908152604090205460ff1681565b348015620006eb57600080fd5b506200021b620006fd3660046200338c565b62001aa4565b3480156200071057600080fd5b5062000643600081565b3480156200072757600080fd5b506200021b62000739366004620033c4565b62001ae9565b3480156200074c57600080fd5b50620005ec600181565b608e54341115620007fa5760405162461bcd60e51b815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6200080a86868686868662001b7f565b505050505050565b608c546001600160a01b03163314620008ba5760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c462002125565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b62000953620021fe565b608e55565b62000962620021fe565b608780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b602154600090819081805b602081101562000a83578260011660010362000a045760018160208110620009d057620009d0620038ad565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000a31565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a3e6002846200390b565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000a7a9062003947565b915050620009a4565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000b7f578160011660010362000b095786818151811062000ac75762000ac7620038ad565b60200260200101518360405160200162000aeb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000b5b565b8287828151811062000b1f5762000b1f620038ad565b602002602001015160405160200162000b42929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000b686002836200390b565b91508062000b768162003947565b91505062000a9c565b5050909114949350505050565b60225460ff161562000c2d5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b62000c438a8a8a8a8a8a8a8a8a8a60016200225a565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b03851690849062000c869089908b908790602401620039df565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162000ceb919062003a18565b60006040518083038185875af1925050503d806000811462000d2a576040519150601f19603f3d011682016040523d82523d6000602084013e62000d2f565b606091505b505090508062000da75760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff161580801562000e335750600054600160ff909116105b8062000e4f5750303b15801562000e4f575060005460ff166001145b62000ec35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007f1565b6000805460ff19166001179055801562000f0457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d8290556703782dace9d90000608e55801562000ff357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b62001004620021fe565b620008c46000620025e7565b60225460ff1615620010b15760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b620010c78a8a8a8a8a8a8a8a8a8a60006200225a565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620011e657604080516000808252602082019092526001600160a01b03851690849060405162001122919062003a18565b60006040518083038185875af1925050503d806000811462001161576040519150601f19603f3d011682016040523d82523d6000602084013e62001166565b606091505b5050905080620011df5760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c4544000000000000000000000000000000000000000000000000006064820152608401620007f1565b5062001568565b60875463ffffffff908116908716036200121657620012106001600160a01b038616848462002651565b62001568565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620014d457600080600085806020019051810190620012b6919062003a8a565b925092509250600085848484604051620012d0906200322c565b620012de9392919062003b0b565b8190604051809103906000f5905080158015620012ff573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af11580156200136d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001393919062003b57565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620014c29392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001565565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200153d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001563919062003b57565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162001655906200322c565b601f1982820381018352601f90910116604081905262001682908d908d908d908d908d9060200162003ba2565b60408051601f1981840301815290829052620016a2929160200162003be3565b604051602081830303815290604052805190602001206040516020016200171894939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620017df5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff90811690841603620018625760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620018af9260019263ffffffff9092169133918991899134918a919062003c16565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200197f9062002701565b608b546001600160a01b03166333d6247d6200199a62000999565b6040518263ffffffff1660e01b8152600401620019b991815260200190565b600060405180830381600087803b158015620019d457600080fd5b505af1158015620019e9573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001a9a5760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c462002860565b62001aae620021fe565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001af3620021fe565b6001600160a01b03811662001b715760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007f1565b62001b7c81620025e7565b50565b60225460ff161562001c205760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff9081169086160362001ca35760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b60008060606001600160a01b03891662001d385785341462001d2e5760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007f1565b6000915062001fc2565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001e1f576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562001de6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e0c919062003b57565b5060208101518151909450925062001fc0565b841562001e345762001e348a88888862002910565b62001e4b6001600160a01b038b1633308a62002f35565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001ea2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001ecc919081019062003c82565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001f0b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001f35919081019062003c82565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001f74573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f9a919062003cbb565b60405160200162001fae9392919062003b0b565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200200498979695949392919062003c16565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620020ac9062002701565b608b546001600160a01b03166333d6247d620020c762000999565b6040518263ffffffff1660e01b8152600401620020e691815260200190565b600060405180830381600087803b1580156200210157600080fd5b505af115801562002116573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff1615620021c65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6055546001600160a01b03163314620008c45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007f1565b63ffffffff8a1660009081526088602052604090205460ff1615620022e75760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562002374573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200239a919062003cdb565b90508015801590620023b95750608d54620023b6824262003cf5565b10155b6200242d5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c4944000000000000000000000000000000000000006064820152608401620007f1565b60875463ffffffff878116911614620024af5760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000006064820152608401620007f1565b60875460009063ffffffff16620024c8575088620024cb565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d82015260518101899052607180820193909352815180820390930183526091019052805191012062002599908e8e63ffffffff168462000a8c565b620021165760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c49446044820152606401620007f1565b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620026fc9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002f8e565b505050565b806001620027126020600262003e48565b6200271e919062003cf5565b60215410620027965760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007f1565b600160216000828254620027ab919062003e56565b909155505060215460005b6020811015620028555781600116600103620027eb578260018260208110620027e357620027e3620038ad565b015550505050565b60018160208110620028015762002801620038ad565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200283e91906200390b565b9150806200284c8162003947565b915050620027b6565b50620026fc62003e71565b60225460ff1615620028db5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620007f1565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200295383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200307a92505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002c55576000808080808080620029b6896004818d62003ea0565b810190620029c5919062003ecc565b9650965096509650965096509650336001600160a01b0316876001600160a01b03161462002a5c5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038616301462002adc5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b8a851462002b535760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002c01919062003a18565b6000604051808303816000865af19150503d806000811462002c40576040519150601f19603f3d011682016040523d82523d6000602084013e62002c45565b606091505b5050505050505050505062000ff3565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002ce85760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007f1565b60008080808080808062002d008a6004818e62003ea0565b81019062002d0f919062003f27565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462002da85760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038716301462002e285760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002edf919062003a18565b6000604051808303816000865af19150503d806000811462002f1e576040519150601f19603f3d011682016040523d82523d6000602084013e62002f23565b606091505b50505050505050505050505050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262002f889085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002697565b50505050565b600062002fe5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620030819092919063ffffffff16565b805190915015620026fc578080602001905181019062003006919062003b57565b620026fc5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007f1565b6020015190565b60606200309284846000856200309c565b90505b9392505050565b606082471015620031165760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401620007f1565b6001600160a01b0385163b6200316f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007f1565b600080866001600160a01b031685876040516200318d919062003a18565b60006040518083038185875af1925050503d8060008114620031cc576040519150601f19603f3d011682016040523d82523d6000602084013e620031d1565b606091505b5091509150620031e3828286620031ee565b979650505050505050565b60608315620031ff57508162003095565b825115620032105782518084602001fd5b8160405162461bcd60e51b8152600401620007f1919062003fb3565b611a788062003fc983390190565b6001600160a01b038116811462001b7c57600080fd5b80356200325d816200323a565b919050565b803563ffffffff811681146200325d57600080fd5b60008083601f8401126200328a57600080fd5b50813567ffffffffffffffff811115620032a357600080fd5b602083019150836020828501011115620032bc57600080fd5b9250929050565b60008060008060008060a08789031215620032dd57600080fd5b8635620032ea816200323a565b9550620032fa6020880162003262565b945060408701356200330c816200323a565b935060608701359250608087013567ffffffffffffffff8111156200333057600080fd5b6200333e89828a0162003277565b979a9699509497509295939492505050565b600080604083850312156200336457600080fd5b6200336f8362003262565b9150602083013562003381816200323a565b809150509250929050565b6000602082840312156200339f57600080fd5b5035919050565b600060208284031215620033b957600080fd5b620030958262003262565b600060208284031215620033d757600080fd5b813562003095816200323a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200343f576200343f620033e4565b604052919050565b600082601f8301126200345957600080fd5b8135602067ffffffffffffffff821115620034785762003478620033e4565b8160051b6200348982820162003413565b9283528481018201928281019087851115620034a457600080fd5b83870192505b84831015620031e357823582529183019190830190620034aa565b60008060008060808587031215620034dc57600080fd5b84359350602085013567ffffffffffffffff80821115620034fc57600080fd5b6200350a8883890162003447565b94506040870135915080821682146200352257600080fd5b509396929550929360600135925050565b60ff8116811462001b7c57600080fd5b600080600080600080600060e0888a0312156200355f57600080fd5b87356200356c8162003533565b96506200357c6020890162003262565b955060408801356200358e816200323a565b94506200359e6060890162003262565b93506080880135620035b0816200323a565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620035ea57620035ea620033e4565b50601f01601f191660200190565b600082601f8301126200360a57600080fd5b8135620036216200361b82620035cd565b62003413565b8181528460208386010111156200363757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200367557600080fd5b8a3567ffffffffffffffff808211156200368e57600080fd5b6200369c8e838f0162003447565b9b50620036ac60208e0162003262565b9a5060408d0135995060608d01359850620036ca60808e0162003262565b9750620036da60a08e0162003250565b9650620036ea60c08e0162003262565b9550620036fa60e08e0162003250565b94506101008d013593506101208d01359150808211156200371a57600080fd5b50620037298d828e01620035f8565b9150509295989b9194979a5092959850565b600080600080608085870312156200375257600080fd5b6200375d8562003262565b935060208501356200376f816200323a565b9250604085013562003781816200323a565b9396929550929360600135925050565b600080600080600080600060a0888a031215620037ad57600080fd5b620037b88862003262565b96506020880135620037ca816200323a565b9550604088013567ffffffffffffffff80821115620037e857600080fd5b620037f68b838c0162003277565b909750955060608a01359150808211156200381057600080fd5b506200381f8a828b0162003277565b9094509250506080880135620038358162003533565b8091505092959891949750929550565b6000806000606084860312156200385b57600080fd5b620038668462003262565b9250602084013562003878816200323a565b9150604084013567ffffffffffffffff8111156200389557600080fd5b620038a386828701620035f8565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003942577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200397b576200397b620038dc565b5060010190565b60005b838110156200399f57818101518382015260200162003985565b8381111562002f885750506000910152565b60008151808452620039cb81602086016020860162003982565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003a0f6060830184620039b1565b95945050505050565b6000825162003a2c81846020870162003982565b9190910192915050565b600082601f83011262003a4857600080fd5b815162003a596200361b82620035cd565b81815284602083860101111562003a6f57600080fd5b62003a8282602083016020870162003982565b949350505050565b60008060006060848603121562003aa057600080fd5b835167ffffffffffffffff8082111562003ab957600080fd5b62003ac78783880162003a36565b9450602086015191508082111562003ade57600080fd5b5062003aed8682870162003a36565b925050604084015162003b008162003533565b809150509250925092565b60608152600062003b206060830186620039b1565b828103602084015262003b348186620039b1565b91505060ff83166040830152949350505050565b801515811462001b7c57600080fd5b60006020828403121562003b6a57600080fd5b8151620030958162003b48565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003bb860608301878962003b77565b828103602084015262003bcd81868862003b77565b91505060ff831660408301529695505050505050565b6000835162003bf781846020880162003982565b83519083019062003c0d81836020880162003982565b01949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003c6982850187620039b1565b925080851660e085015250509998505050505050505050565b60006020828403121562003c9557600080fd5b815167ffffffffffffffff81111562003cad57600080fd5b62003a828482850162003a36565b60006020828403121562003cce57600080fd5b8151620030958162003533565b60006020828403121562003cee57600080fd5b5051919050565b60008282101562003d0a5762003d0a620038dc565b500390565b600181815b8085111562003d6e57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d525762003d52620038dc565b8085161562003d6057918102915b93841c939080029062003d14565b509250929050565b60008262003d875750600162000943565b8162003d965750600062000943565b816001811462003daf576002811462003dba5762003dda565b600191505062000943565b60ff84111562003dce5762003dce620038dc565b50506001821b62000943565b5060208310610133831016604e8410600b841016171562003dff575081810a62000943565b62003e0b838362003d0f565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003e405762003e40620038dc565b029392505050565b600062003095838362003d76565b6000821982111562003e6c5762003e6c620038dc565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000808585111562003eb157600080fd5b8386111562003ebf57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003ee857600080fd5b873562003ef5816200323a565b9650602088013562003f07816200323a565b955060408801359450606088013593506080880135620035b08162003533565b600080600080600080600080610100898b03121562003f4557600080fd5b883562003f52816200323a565b9750602089013562003f64816200323a565b96506040890135955060608901359450608089013562003f848162003b48565b935060a089013562003f968162003533565b979a969950949793969295929450505060c08201359160e0013590565b602081526000620030956020830184620039b156fe60c06040523480156200001157600080fd5b5060405162001a7838038062001a788339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516115be620004ba600039600061053001526000818161036f01526104fa01526115be6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b60405161019191906112d5565b60405180910390f35b6101ad6101a8366004611371565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad61020436600461139b565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad610276366004611371565b610552565b6101ad610289366004611371565b61059e565b6101c161029c3660046113d7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d23660046113d7565b60066020526000908152604090205481565b610184610645565b6101ad6102fa366004611371565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad610352366004611371565b6106ed565b6101ad610365366004611371565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f3660046113f9565b6107b2565b005b6101c16103b436600461146c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6060600380546104379061149f565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061149f565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f56565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611521565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c838361101e565b50600192915050565b6060600480546104379061149f565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c8383611124565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661088183611539565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ee3908490611521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4991815260200190565b60405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f81610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166110815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b80600260008282546110939190611521565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906110cd908490611521565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156112495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611285908490611571565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c27565b600060208083528351808285015260005b81811015611302578581018301518582016040015282016112e6565b81811115611314576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136c57600080fd5b919050565b6000806040838503121561138457600080fd5b61138d83611348565b946020939093013593505050565b6000806000606084860312156113b057600080fd5b6113b984611348565b92506113c760208501611348565b9150604084013590509250925092565b6000602082840312156113e957600080fd5b6113f282611348565b9392505050565b600080600080600080600060e0888a03121561141457600080fd5b61141d88611348565b965061142b60208901611348565b95506040880135945060608801359350608088013560ff8116811461144f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561147f57600080fd5b61148883611348565b915061149660208401611348565b90509250929050565b600181811c908216806114b357607f821691505b6020821081036114ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611534576115346114f2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156a5761156a6114f2565b5060010190565b600082821015611583576115836114f2565b50039056fea2646970667358221220dc9c54325b6ec8c11c8bc6a1630cfb64202b6d54611cd1004e705ceca7826a4f64736f6c634300080f0033a2646970667358221220c467ba10b618fc297021f80dcd4868a7cf64d7fc688e050fefecaa7192f4dd1e64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/ProofOfEfficiency.json b/compiled-contracts/ProofOfEfficiency.json index 865a8cc73..b6c8bd202 100644 --- a/compiled-contracts/ProofOfEfficiency.json +++ b/compiled-contracts/ProofOfEfficiency.json @@ -472,6 +472,11 @@ "internalType": "contract IBridge", "name": "_bridgeAddress", "type": "address" + }, + { + "internalType": "address", + "name": "_securityCouncil", + "type": "address" } ], "name": "initialize", @@ -891,8 +896,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5061483b806100206000396000f3fe608060405234801561001057600080fd5b50600436106102c85760003560e01c80638da5cb5b1161017b578063cfa8ed47116100d8578063e7a7ed021161008c578063eaeb077b11610071578063eaeb077b14610687578063f2fde38b1461069a578063f7552761146106ad57600080fd5b8063e7a7ed0214610637578063e8bf92ed1461066757600080fd5b8063d8d1091b116100bd578063d8d1091b146105ef578063d8f54db014610602578063dbc169761461062f57600080fd5b8063cfa8ed47146105a3578063d02103ca146105cf57600080fd5b8063b02286c01161012f578063b6b0b09711610114578063b6b0b09714610558578063c89e42df1461057d578063ca8103661461059057600080fd5b8063b02286c01461052f578063b4d63f581461053857600080fd5b8063a3c573eb11610160578063a3c573eb146104f1578063ab9fc5ef14610511578063adc879e91461051b57600080fd5b80638da5cb5b146104cb57806399f5634e146104e957600080fd5b8063542028d511610229578063715018a6116101dd57806379847057116101c2578063798470571461049c5780637fcb3653146104a45780638c4a0af7146104b857600080fd5b8063715018a6146104815780637152facf1461048957600080fd5b80636766f09d1161020e5780636766f09d1461043b5780636b8616ce1461044e5780636ff512cc1461046e57600080fd5b8063542028d51461042057806355b925e61461042857600080fd5b806327eb6c0f11610280578063423fa85611610265578063423fa856146103aa57806345605267146103ca5780635392c5e0146103f257600080fd5b806327eb6c0f146103525780633c1582671461039757600080fd5b806319d8ac61116102b157806319d8ac61146103085780631c1083e2146103355780632072f6c51461034a57600080fd5b8063107bf28c146102cd57806315064c96146102eb575b600080fd5b6102d56106bc565b6040516102e29190613d32565b60405180910390f35b6065546102f89060ff1681565b60405190151581526020016102e2565b60685461031c9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102e2565b610348610343366004613d77565b61074a565b005b610348610856565b6070546103729073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e2565b6103486103a5366004613eec565b610907565b60685461031c9068010000000000000000900467ffffffffffffffff1681565b60685461031c90700100000000000000000000000000000000900467ffffffffffffffff1681565b610412610400366004614003565b606b6020526000908152604090205481565b6040519081526020016102e2565b6102d56111fe565b610348610436366004614035565b61120b565b610348610449366004614035565b611722565b61041261045c366004614003565b60666020526000908152604090205481565b61034861047c366004613d77565b611d5b565b610348611e75565b6102d56104973660046140b8565b611e87565b6104126120bd565b60695461031c9067ffffffffffffffff1681565b6103486104c6366004614113565b612137565b60335473ffffffffffffffffffffffffffffffffffffffff16610372565b610412612251565b6071546103729073ffffffffffffffffffffffffffffffffffffffff1681565b61031c62093a8081565b606e5461031c9067ffffffffffffffff1681565b61041261ea6081565b610412610546366004614003565b60676020526000908152604090205481565b60655461037290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b61034861058b366004614130565b612382565b61034861059e36600461416d565b612457565b6069546103729068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103729073ffffffffffffffffffffffffffffffffffffffff1681565b6103486105fd366004614251565b61279a565b6069546102f8907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610348612e3f565b60685461031c907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103729073ffffffffffffffffffffffffffffffffffffffff1681565b610348610695366004614344565b612fcf565b6103486106a8366004613d77565b6134cf565b61041267016345785d8a000081565b606f80546106c990614389565b80601f01602080910402602001604051908101604052809291908181526020018280546106f590614389565b80156107425780601f1061071757610100808354040283529160200191610742565b820191906000526020600020905b81548152906001019060200180831161072557829003601f168201915b505050505081565b60705473ffffffffffffffffffffffffffffffffffffffff1633146107dc5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff16156108f55760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6108fd61356c565b6109056135d3565b565b60655460ff16156109a65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610a3f5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b805160685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610fef576000878281518110610aa757610aa76143dc565b602002602001015190506000816060015167ffffffffffffffff161115610cc05783610ad28161443a565b945050600081600001518051906020012082602001518360600151604051602001610b3593929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610c025760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610cba5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016107d3565b50610e5a565b60208101511580610d6f5750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610d299160040190815260200190565b6020604051808303816000875af1158015610d48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6c9190614461565b15155b610de15760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016107d3565b80515161ea6011610e5a5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016107d3565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610e90575042816040015167ffffffffffffffff1611155b610f285760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610fd19061443a565b95505080604001519550508080610fe79061447a565b915050610a8b565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156110925760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016107d3565b6068546000906110c090700100000000000000000000000000000000900467ffffffffffffffff16846144b2565b6110d49067ffffffffffffffff16876144db565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c1693909317939093179290921691909117909155600090815260676020526040902083905590506111b1333061118b8467016345785d8a00006144f2565b606554610100900473ffffffffffffffffffffffffffffffffffffffff1692919061365d565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d80546106c990614389565b60655460ff16156112aa5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695467ffffffffffffffff90811690881611156113565760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016107d3565b60695467ffffffffffffffff908116908716116114015760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016107d3565b600061140f88888888611e87565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051611444919061452f565b602060405180830381855afa158015611461573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906114849190614461565b61148e919061457a565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916114f8918991899189919060040161458e565b602060405180830381865afa158015611515573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115399190614608565b6115ab5760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016107d3565b6069546116099033906115c89067ffffffffffffffff168b6144b2565b67ffffffffffffffff166115da612251565b6115e491906144f2565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16919061371b565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b1580156116be57600080fd5b505af11580156116d2573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60655460ff16156117c15760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b8567ffffffffffffffff168767ffffffffffffffff16106118705760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e65774261746368206d75737420626520626960648201527f67676572207468616e20696e69744e756d426174636800000000000000000000608482015260a4016107d3565b60695467ffffffffffffffff908116908716111561191c5760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d4261746368206d757374206265206c657360648201527f73207468616e206c617374566572696669656442617463680000000000000000608482015260a4016107d3565b67ffffffffffffffff8716158061194b575067ffffffffffffffff87166000908152606b602052604090205415155b6119e35760405162461bcd60e51b815260206004820152604e60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d426174636820737461746520726f6f742060648201527f646f6573206e6f74206578697374000000000000000000000000000000000000608482015260a4016107d3565b67ffffffffffffffff86166000908152606b6020526040902054611a955760405162461bcd60e51b815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e6577426174636820737461746520726f6f7460648201527f20646f6573206e6f742065786973740000000000000000000000000000000000608482015260a4016107d3565b6000611aa388888888611e87565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051611ad8919061452f565b602060405180830381855afa158015611af5573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611b189190614461565b611b22919061457a565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611b8c918991899189919060040161458e565b602060405180830381865afa158015611ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcd9190614608565b611c3f5760405162461bcd60e51b815260206004820152603560248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20494e56414c49445f50524f4f46000000000000000000000060648201526084016107d3565b67ffffffffffffffff88166000908152606b6020526040902054869003611cf45760405162461bcd60e51b815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2073746f72656420726f6f74206d757374206265206469666660648201527f6572656e74207468616e206e657720737461746520726f6f7400000000000000608482015260a4016107d3565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527fe579d6d18f02941e1d0f59bff70f1b2c894edc991badab38343786df2846fe55910160405180910390a1611d506135d3565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611df45760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161084b565b611e7d61356c565b6109056000613776565b67ffffffffffffffff808516600081815260676020526040808220549387168252902054606092911580611eba57508115155b611f525760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b80611feb5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b60685460009067ffffffffffffffff700100000000000000000000000000000000820481169161210c917801000000000000000000000000000000000000000000000000909104166001614625565b61211691906144b2565b6121329067ffffffffffffffff16670de0b6b3a76400006144f2565b905090565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146121d05760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061084b90831515815260200190565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156122c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ec9190614461565b60695460685491925060009167ffffffffffffffff9182169168010000000000000000820481169161235191700100000000000000000000000000000000820481169178010000000000000000000000000000000000000000000000009004166144b2565b61235b9190614625565b61236591906144b2565b67ffffffffffffffff16905061237b8183614651565b9250505090565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461241b5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606d61242782826146b3565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161084b9190613d32565b600054610100900460ff16158080156124775750600054600160ff909116105b806124915750303b158015612491575060005460ff166001145b6125035760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107d3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561256157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8e811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008e851602179055606c80549091168b831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b899055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928a16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000088151502179055606d6126a086826146b3565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8616179055606f6126e184826146b3565b50607180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841617905561272a6137ed565b801561278d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b60655460ff16156128395760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146128fc5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b8051806129975760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60685467ffffffffffffffff780100000000000000000000000000000000000000000000000082048116916129e29184917001000000000000000000000000000000009004166147af565b1115612a565760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016107d3565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b84811015612d6f576000868281518110612ab657612ab66143dc565b602002602001015190508380612acb9061443a565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114612bec5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016107d3565b612bf76001886144db565b8303612cb5574262093a808360400151612c119190614625565b67ffffffffffffffff161115612cb55760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016107d3565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612d579061443a565b96505050508080612d679061447a565b915050612a9a565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff1615612eb85760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b60705473ffffffffffffffffffffffffffffffffffffffff163314612f455760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612faf57600080fd5b505af1158015612fc3573d6000803e3d6000fd5b50505050610905613873565b60655460ff161561306e5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146131315760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b600061313b6120bd565b9050818111156131b35760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016107d3565b61ea6083511061322b5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016107d3565b60655461325590610100900473ffffffffffffffffffffffffffffffffffffffff1633308461365d565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa1580156132c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132e99190614461565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff169060186133238361443a565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161339c93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000908152606690935291205532330361346c57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26134c9565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516134c0939291906147c7565b60405180910390a25b50505050565b6134d761356c565b73ffffffffffffffffffffffffffffffffffffffff81166135605760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107d3565b61356981613776565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109055760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561363d57600080fd5b505af1158015613651573d6000803e3d6000fd5b5050505061090561393f565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526134c99085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613a34565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526137719084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016136b7565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661386a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107d3565b61090533613776565b60655460ff16156138ec5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff16156139de5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6000613a96826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613b269092919063ffffffff16565b8051909150156137715780806020019051810190613ab49190614608565b6137715760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107d3565b6060613b358484600085613b3f565b90505b9392505050565b606082471015613bb75760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016107d3565b73ffffffffffffffffffffffffffffffffffffffff85163b613c1b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107d3565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c44919061452f565b60006040518083038185875af1925050503d8060008114613c81576040519150601f19603f3d011682016040523d82523d6000602084013e613c86565b606091505b5091509150613c96828286613ca1565b979650505050505050565b60608315613cb0575081613b38565b825115613cc05782518084602001fd5b8160405162461bcd60e51b81526004016107d39190613d32565b60005b83811015613cf5578181015183820152602001613cdd565b838111156134c95750506000910152565b60008151808452613d1e816020860160208601613cda565b601f01601f19169290920160200192915050565b602081526000613b386020830184613d06565b73ffffffffffffffffffffffffffffffffffffffff8116811461356957600080fd5b8035613d7281613d45565b919050565b600060208284031215613d8957600080fd5b8135613b3881613d45565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613de657613de6613d94565b60405290565b6040516060810167ffffffffffffffff81118282101715613de657613de6613d94565b604051601f8201601f1916810167ffffffffffffffff81118282101715613e3857613e38613d94565b604052919050565b600067ffffffffffffffff821115613e5a57613e5a613d94565b5060051b60200190565b600082601f830112613e7557600080fd5b813567ffffffffffffffff811115613e8f57613e8f613d94565b613ea26020601f19601f84011601613e0f565b818152846020838601011115613eb757600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613d7257600080fd5b60006020808385031215613eff57600080fd5b823567ffffffffffffffff80821115613f1757600080fd5b818501915085601f830112613f2b57600080fd5b8135613f3e613f3982613e40565b613e0f565b81815260059190911b83018401908481019088831115613f5d57600080fd5b8585015b83811015613ff657803585811115613f795760008081fd5b86016080818c03601f1901811315613f915760008081fd5b613f99613dc3565b8983013588811115613fab5760008081fd5b613fb98e8c83870101613e64565b8252506040808401358b8301526060613fd3818601613ed4565b82840152613fe2848601613ed4565b908301525085525050918601918601613f61565b5098975050505050505050565b60006020828403121561401557600080fd5b613b3882613ed4565b806040810183101561402f57600080fd5b92915050565b6000806000806000806000610180888a03121561405157600080fd5b61405a88613ed4565b965061406860208901613ed4565b955060408801359450606088013593506140858960808a0161401e565b925061014088018981111561409957600080fd5b60c0890192506140a98a8261401e565b91505092959891949750929550565b600080600080608085870312156140ce57600080fd5b6140d785613ed4565b93506140e560208601613ed4565b93969395505050506040820135916060013590565b801515811461356957600080fd5b8035613d72816140fa565b60006020828403121561412557600080fd5b8135613b38816140fa565b60006020828403121561414257600080fd5b813567ffffffffffffffff81111561415957600080fd5b61416584828501613e64565b949350505050565b6000806000806000806000806000806101408b8d03121561418d57600080fd5b6141968b613d67565b99506141a460208c01613d67565b98506141b260408c01613d67565b975060608b013596506141c760808c01613d67565b95506141d560a08c01614108565b945060c08b013567ffffffffffffffff808211156141f257600080fd5b6141fe8e838f01613e64565b955061420c60e08e01613ed4565b94506101008d013591508082111561422357600080fd5b506142308d828e01613e64565b9250506142406101208c01613d67565b90509295989b9194979a5092959850565b6000602080838503121561426457600080fd5b823567ffffffffffffffff8082111561427c57600080fd5b818501915085601f83011261429057600080fd5b813561429e613f3982613e40565b81815260059190911b830184019084810190888311156142bd57600080fd5b8585015b83811015613ff6578035858111156142d95760008081fd5b86016060818c03601f19018113156142f15760008081fd5b6142f9613dec565b898301358881111561430b5760008081fd5b6143198e8c83870101613e64565b8252506040808401358b830152614331838501613ed4565b90820152855250509186019186016142c1565b6000806040838503121561435757600080fd5b823567ffffffffffffffff81111561436e57600080fd5b61437a85828601613e64565b95602094909401359450505050565b600181811c9082168061439d57607f821691505b6020821081036143d6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036144575761445761440b565b6001019392505050565b60006020828403121561447357600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036144ab576144ab61440b565b5060010190565b600067ffffffffffffffff838116908316818110156144d3576144d361440b565b039392505050565b6000828210156144ed576144ed61440b565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561452a5761452a61440b565b500290565b60008251614541818460208701613cda565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826145895761458961454b565b500690565b61012081016040808784376000838201818152879190815b60028110156145c6578484833790840182815292840192906001016145a6565b5050828760c0870137610100850181815286935091505b60018110156145fc5782518252602092830192909101906001016145dd565b50505095945050505050565b60006020828403121561461a57600080fd5b8151613b38816140fa565b600067ffffffffffffffff8083168185168083038211156146485761464861440b565b01949350505050565b6000826146605761466061454b565b500490565b601f82111561377157600081815260208120601f850160051c8101602086101561468c5750805b601f850160051c820191505b818110156146ab57828155600101614698565b505050505050565b815167ffffffffffffffff8111156146cd576146cd613d94565b6146e1816146db8454614389565b84614665565b602080601f83116001811461473457600084156146fe5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556146ab565b600085815260208120601f198616915b8281101561476357888601518255948401946001909101908401614744565b508582101561479f57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156147c2576147c261440b565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006147fc6060830184613d06565b9594505050505056fea2646970667358221220459c0629eb0008b4daf59e555a322fe762cb05b1da8712377c085651a8bff70664736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102c85760003560e01c80638da5cb5b1161017b578063cfa8ed47116100d8578063e7a7ed021161008c578063eaeb077b11610071578063eaeb077b14610687578063f2fde38b1461069a578063f7552761146106ad57600080fd5b8063e7a7ed0214610637578063e8bf92ed1461066757600080fd5b8063d8d1091b116100bd578063d8d1091b146105ef578063d8f54db014610602578063dbc169761461062f57600080fd5b8063cfa8ed47146105a3578063d02103ca146105cf57600080fd5b8063b02286c01161012f578063b6b0b09711610114578063b6b0b09714610558578063c89e42df1461057d578063ca8103661461059057600080fd5b8063b02286c01461052f578063b4d63f581461053857600080fd5b8063a3c573eb11610160578063a3c573eb146104f1578063ab9fc5ef14610511578063adc879e91461051b57600080fd5b80638da5cb5b146104cb57806399f5634e146104e957600080fd5b8063542028d511610229578063715018a6116101dd57806379847057116101c2578063798470571461049c5780637fcb3653146104a45780638c4a0af7146104b857600080fd5b8063715018a6146104815780637152facf1461048957600080fd5b80636766f09d1161020e5780636766f09d1461043b5780636b8616ce1461044e5780636ff512cc1461046e57600080fd5b8063542028d51461042057806355b925e61461042857600080fd5b806327eb6c0f11610280578063423fa85611610265578063423fa856146103aa57806345605267146103ca5780635392c5e0146103f257600080fd5b806327eb6c0f146103525780633c1582671461039757600080fd5b806319d8ac61116102b157806319d8ac61146103085780631c1083e2146103355780632072f6c51461034a57600080fd5b8063107bf28c146102cd57806315064c96146102eb575b600080fd5b6102d56106bc565b6040516102e29190613d32565b60405180910390f35b6065546102f89060ff1681565b60405190151581526020016102e2565b60685461031c9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102e2565b610348610343366004613d77565b61074a565b005b610348610856565b6070546103729073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e2565b6103486103a5366004613eec565b610907565b60685461031c9068010000000000000000900467ffffffffffffffff1681565b60685461031c90700100000000000000000000000000000000900467ffffffffffffffff1681565b610412610400366004614003565b606b6020526000908152604090205481565b6040519081526020016102e2565b6102d56111fe565b610348610436366004614035565b61120b565b610348610449366004614035565b611722565b61041261045c366004614003565b60666020526000908152604090205481565b61034861047c366004613d77565b611d5b565b610348611e75565b6102d56104973660046140b8565b611e87565b6104126120bd565b60695461031c9067ffffffffffffffff1681565b6103486104c6366004614113565b612137565b60335473ffffffffffffffffffffffffffffffffffffffff16610372565b610412612251565b6071546103729073ffffffffffffffffffffffffffffffffffffffff1681565b61031c62093a8081565b606e5461031c9067ffffffffffffffff1681565b61041261ea6081565b610412610546366004614003565b60676020526000908152604090205481565b60655461037290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b61034861058b366004614130565b612382565b61034861059e36600461416d565b612457565b6069546103729068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103729073ffffffffffffffffffffffffffffffffffffffff1681565b6103486105fd366004614251565b61279a565b6069546102f8907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610348612e3f565b60685461031c907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103729073ffffffffffffffffffffffffffffffffffffffff1681565b610348610695366004614344565b612fcf565b6103486106a8366004613d77565b6134cf565b61041267016345785d8a000081565b606f80546106c990614389565b80601f01602080910402602001604051908101604052809291908181526020018280546106f590614389565b80156107425780601f1061071757610100808354040283529160200191610742565b820191906000526020600020905b81548152906001019060200180831161072557829003601f168201915b505050505081565b60705473ffffffffffffffffffffffffffffffffffffffff1633146107dc5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff16156108f55760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6108fd61356c565b6109056135d3565b565b60655460ff16156109a65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610a3f5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b805160685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610fef576000878281518110610aa757610aa76143dc565b602002602001015190506000816060015167ffffffffffffffff161115610cc05783610ad28161443a565b945050600081600001518051906020012082602001518360600151604051602001610b3593929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610c025760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610cba5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016107d3565b50610e5a565b60208101511580610d6f5750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610d299160040190815260200190565b6020604051808303816000875af1158015610d48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6c9190614461565b15155b610de15760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016107d3565b80515161ea6011610e5a5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016107d3565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610e90575042816040015167ffffffffffffffff1611155b610f285760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610fd19061443a565b95505080604001519550508080610fe79061447a565b915050610a8b565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156110925760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016107d3565b6068546000906110c090700100000000000000000000000000000000900467ffffffffffffffff16846144b2565b6110d49067ffffffffffffffff16876144db565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c1693909317939093179290921691909117909155600090815260676020526040902083905590506111b1333061118b8467016345785d8a00006144f2565b606554610100900473ffffffffffffffffffffffffffffffffffffffff1692919061365d565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d80546106c990614389565b60655460ff16156112aa5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695467ffffffffffffffff90811690881611156113565760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016107d3565b60695467ffffffffffffffff908116908716116114015760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016107d3565b600061140f88888888611e87565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051611444919061452f565b602060405180830381855afa158015611461573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906114849190614461565b61148e919061457a565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916114f8918991899189919060040161458e565b602060405180830381865afa158015611515573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115399190614608565b6115ab5760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016107d3565b6069546116099033906115c89067ffffffffffffffff168b6144b2565b67ffffffffffffffff166115da612251565b6115e491906144f2565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16919061371b565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b1580156116be57600080fd5b505af11580156116d2573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60655460ff16156117c15760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b8567ffffffffffffffff168767ffffffffffffffff16106118705760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e65774261746368206d75737420626520626960648201527f67676572207468616e20696e69744e756d426174636800000000000000000000608482015260a4016107d3565b60695467ffffffffffffffff908116908716111561191c5760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d4261746368206d757374206265206c657360648201527f73207468616e206c617374566572696669656442617463680000000000000000608482015260a4016107d3565b67ffffffffffffffff8716158061194b575067ffffffffffffffff87166000908152606b602052604090205415155b6119e35760405162461bcd60e51b815260206004820152604e60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d426174636820737461746520726f6f742060648201527f646f6573206e6f74206578697374000000000000000000000000000000000000608482015260a4016107d3565b67ffffffffffffffff86166000908152606b6020526040902054611a955760405162461bcd60e51b815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e6577426174636820737461746520726f6f7460648201527f20646f6573206e6f742065786973740000000000000000000000000000000000608482015260a4016107d3565b6000611aa388888888611e87565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051611ad8919061452f565b602060405180830381855afa158015611af5573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611b189190614461565b611b22919061457a565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611b8c918991899189919060040161458e565b602060405180830381865afa158015611ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcd9190614608565b611c3f5760405162461bcd60e51b815260206004820152603560248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20494e56414c49445f50524f4f46000000000000000000000060648201526084016107d3565b67ffffffffffffffff88166000908152606b6020526040902054869003611cf45760405162461bcd60e51b815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2073746f72656420726f6f74206d757374206265206469666660648201527f6572656e74207468616e206e657720737461746520726f6f7400000000000000608482015260a4016107d3565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527fe579d6d18f02941e1d0f59bff70f1b2c894edc991badab38343786df2846fe55910160405180910390a1611d506135d3565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611df45760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161084b565b611e7d61356c565b6109056000613776565b67ffffffffffffffff808516600081815260676020526040808220549387168252902054606092911580611eba57508115155b611f525760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b80611feb5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b60685460009067ffffffffffffffff700100000000000000000000000000000000820481169161210c917801000000000000000000000000000000000000000000000000909104166001614625565b61211691906144b2565b6121329067ffffffffffffffff16670de0b6b3a76400006144f2565b905090565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146121d05760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061084b90831515815260200190565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156122c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ec9190614461565b60695460685491925060009167ffffffffffffffff9182169168010000000000000000820481169161235191700100000000000000000000000000000000820481169178010000000000000000000000000000000000000000000000009004166144b2565b61235b9190614625565b61236591906144b2565b67ffffffffffffffff16905061237b8183614651565b9250505090565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461241b5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606d61242782826146b3565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161084b9190613d32565b600054610100900460ff16158080156124775750600054600160ff909116105b806124915750303b158015612491575060005460ff166001145b6125035760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107d3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561256157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8e811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008e851602179055606c80549091168b831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b899055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928a16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000088151502179055606d6126a086826146b3565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8616179055606f6126e184826146b3565b50607180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841617905561272a6137ed565b801561278d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b60655460ff16156128395760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146128fc5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b8051806129975760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60685467ffffffffffffffff780100000000000000000000000000000000000000000000000082048116916129e29184917001000000000000000000000000000000009004166147af565b1115612a565760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016107d3565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b84811015612d6f576000868281518110612ab657612ab66143dc565b602002602001015190508380612acb9061443a565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114612bec5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016107d3565b612bf76001886144db565b8303612cb5574262093a808360400151612c119190614625565b67ffffffffffffffff161115612cb55760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016107d3565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612d579061443a565b96505050508080612d679061447a565b915050612a9a565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff1615612eb85760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b60705473ffffffffffffffffffffffffffffffffffffffff163314612f455760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612faf57600080fd5b505af1158015612fc3573d6000803e3d6000fd5b50505050610905613873565b60655460ff161561306e5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146131315760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b600061313b6120bd565b9050818111156131b35760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016107d3565b61ea6083511061322b5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016107d3565b60655461325590610100900473ffffffffffffffffffffffffffffffffffffffff1633308461365d565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa1580156132c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132e99190614461565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff169060186133238361443a565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161339c93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000908152606690935291205532330361346c57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26134c9565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516134c0939291906147c7565b60405180910390a25b50505050565b6134d761356c565b73ffffffffffffffffffffffffffffffffffffffff81166135605760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107d3565b61356981613776565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109055760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561363d57600080fd5b505af1158015613651573d6000803e3d6000fd5b5050505061090561393f565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526134c99085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613a34565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526137719084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016136b7565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661386a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107d3565b61090533613776565b60655460ff16156138ec5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff16156139de5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6000613a96826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613b269092919063ffffffff16565b8051909150156137715780806020019051810190613ab49190614608565b6137715760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107d3565b6060613b358484600085613b3f565b90505b9392505050565b606082471015613bb75760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016107d3565b73ffffffffffffffffffffffffffffffffffffffff85163b613c1b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107d3565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c44919061452f565b60006040518083038185875af1925050503d8060008114613c81576040519150601f19603f3d011682016040523d82523d6000602084013e613c86565b606091505b5091509150613c96828286613ca1565b979650505050505050565b60608315613cb0575081613b38565b825115613cc05782518084602001fd5b8160405162461bcd60e51b81526004016107d39190613d32565b60005b83811015613cf5578181015183820152602001613cdd565b838111156134c95750506000910152565b60008151808452613d1e816020860160208601613cda565b601f01601f19169290920160200192915050565b602081526000613b386020830184613d06565b73ffffffffffffffffffffffffffffffffffffffff8116811461356957600080fd5b8035613d7281613d45565b919050565b600060208284031215613d8957600080fd5b8135613b3881613d45565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613de657613de6613d94565b60405290565b6040516060810167ffffffffffffffff81118282101715613de657613de6613d94565b604051601f8201601f1916810167ffffffffffffffff81118282101715613e3857613e38613d94565b604052919050565b600067ffffffffffffffff821115613e5a57613e5a613d94565b5060051b60200190565b600082601f830112613e7557600080fd5b813567ffffffffffffffff811115613e8f57613e8f613d94565b613ea26020601f19601f84011601613e0f565b818152846020838601011115613eb757600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613d7257600080fd5b60006020808385031215613eff57600080fd5b823567ffffffffffffffff80821115613f1757600080fd5b818501915085601f830112613f2b57600080fd5b8135613f3e613f3982613e40565b613e0f565b81815260059190911b83018401908481019088831115613f5d57600080fd5b8585015b83811015613ff657803585811115613f795760008081fd5b86016080818c03601f1901811315613f915760008081fd5b613f99613dc3565b8983013588811115613fab5760008081fd5b613fb98e8c83870101613e64565b8252506040808401358b8301526060613fd3818601613ed4565b82840152613fe2848601613ed4565b908301525085525050918601918601613f61565b5098975050505050505050565b60006020828403121561401557600080fd5b613b3882613ed4565b806040810183101561402f57600080fd5b92915050565b6000806000806000806000610180888a03121561405157600080fd5b61405a88613ed4565b965061406860208901613ed4565b955060408801359450606088013593506140858960808a0161401e565b925061014088018981111561409957600080fd5b60c0890192506140a98a8261401e565b91505092959891949750929550565b600080600080608085870312156140ce57600080fd5b6140d785613ed4565b93506140e560208601613ed4565b93969395505050506040820135916060013590565b801515811461356957600080fd5b8035613d72816140fa565b60006020828403121561412557600080fd5b8135613b38816140fa565b60006020828403121561414257600080fd5b813567ffffffffffffffff81111561415957600080fd5b61416584828501613e64565b949350505050565b6000806000806000806000806000806101408b8d03121561418d57600080fd5b6141968b613d67565b99506141a460208c01613d67565b98506141b260408c01613d67565b975060608b013596506141c760808c01613d67565b95506141d560a08c01614108565b945060c08b013567ffffffffffffffff808211156141f257600080fd5b6141fe8e838f01613e64565b955061420c60e08e01613ed4565b94506101008d013591508082111561422357600080fd5b506142308d828e01613e64565b9250506142406101208c01613d67565b90509295989b9194979a5092959850565b6000602080838503121561426457600080fd5b823567ffffffffffffffff8082111561427c57600080fd5b818501915085601f83011261429057600080fd5b813561429e613f3982613e40565b81815260059190911b830184019084810190888311156142bd57600080fd5b8585015b83811015613ff6578035858111156142d95760008081fd5b86016060818c03601f19018113156142f15760008081fd5b6142f9613dec565b898301358881111561430b5760008081fd5b6143198e8c83870101613e64565b8252506040808401358b830152614331838501613ed4565b90820152855250509186019186016142c1565b6000806040838503121561435757600080fd5b823567ffffffffffffffff81111561436e57600080fd5b61437a85828601613e64565b95602094909401359450505050565b600181811c9082168061439d57607f821691505b6020821081036143d6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036144575761445761440b565b6001019392505050565b60006020828403121561447357600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036144ab576144ab61440b565b5060010190565b600067ffffffffffffffff838116908316818110156144d3576144d361440b565b039392505050565b6000828210156144ed576144ed61440b565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561452a5761452a61440b565b500290565b60008251614541818460208701613cda565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826145895761458961454b565b500690565b61012081016040808784376000838201818152879190815b60028110156145c6578484833790840182815292840192906001016145a6565b5050828760c0870137610100850181815286935091505b60018110156145fc5782518252602092830192909101906001016145dd565b50505095945050505050565b60006020828403121561461a57600080fd5b8151613b38816140fa565b600067ffffffffffffffff8083168185168083038211156146485761464861440b565b01949350505050565b6000826146605761466061454b565b500490565b601f82111561377157600081815260208120601f850160051c8101602086101561468c5750805b601f850160051c820191505b818110156146ab57828155600101614698565b505050505050565b815167ffffffffffffffff8111156146cd576146cd613d94565b6146e1816146db8454614389565b84614665565b602080601f83116001811461473457600084156146fe5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556146ab565b600085815260208120601f198616915b8281101561476357888601518255948401946001909101908401614744565b508582101561479f57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156147c2576147c261440b565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006147fc6060830184613d06565b9594505050505056fea2646970667358221220459c0629eb0008b4daf59e555a322fe762cb05b1da8712377c085651a8bff70664736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50614904806100206000396000f3fe608060405234801561001057600080fd5b50600436106102c85760003560e01c80638c4a0af71161017b578063cfa8ed47116100d8578063e7a7ed021161008c578063eaeb077b11610071578063eaeb077b14610687578063f2fde38b1461069a578063f7552761146106ad57600080fd5b8063e7a7ed0214610637578063e8bf92ed1461066757600080fd5b8063d8d1091b116100bd578063d8d1091b146105ef578063d8f54db014610602578063dbc169761461062f57600080fd5b8063cfa8ed47146105a3578063d02103ca146105cf57600080fd5b8063adc879e91161012f578063b4d63f5811610114578063b4d63f581461054b578063b6b0b0971461056b578063c89e42df1461059057600080fd5b8063adc879e91461052e578063b02286c01461054257600080fd5b806399f5634e1161016057806399f5634e146104fc578063a3c573eb14610504578063ab9fc5ef1461052457600080fd5b80638c4a0af7146104cb5780638da5cb5b146104de57600080fd5b8063542028d511610229578063715018a6116101dd57806379847057116101c2578063798470571461049c5780637fcb3653146104a457806381df7d3f146104b857600080fd5b8063715018a6146104815780637152facf1461048957600080fd5b80636766f09d1161020e5780636766f09d1461043b5780636b8616ce1461044e5780636ff512cc1461046e57600080fd5b8063542028d51461042057806355b925e61461042857600080fd5b806327eb6c0f11610280578063423fa85611610265578063423fa856146103aa57806345605267146103ca5780635392c5e0146103f257600080fd5b806327eb6c0f146103525780633c1582671461039757600080fd5b806319d8ac61116102b157806319d8ac61146103085780631c1083e2146103355780632072f6c51461034a57600080fd5b8063107bf28c146102cd57806315064c96146102eb575b600080fd5b6102d56106bc565b6040516102e29190613de5565b60405180910390f35b6065546102f89060ff1681565b60405190151581526020016102e2565b60685461031c9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102e2565b610348610343366004613e2a565b61074a565b005b610348610856565b6070546103729073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e2565b6103486103a5366004613f9f565b610907565b60685461031c9068010000000000000000900467ffffffffffffffff1681565b60685461031c90700100000000000000000000000000000000900467ffffffffffffffff1681565b6104126104003660046140b6565b606b6020526000908152604090205481565b6040519081526020016102e2565b6102d56111fe565b6103486104363660046140e8565b61120b565b6103486104493660046140e8565b6117d4565b61041261045c3660046140b6565b60666020526000908152604090205481565b61034861047c366004613e2a565b611df8565b610348611f12565b6102d561049736600461416b565b611f24565b61041261215a565b60695461031c9067ffffffffffffffff1681565b6103486104c63660046141c6565b6121d4565b6103486104d93660046142c0565b61252d565b60335473ffffffffffffffffffffffffffffffffffffffff16610372565b610412612647565b6071546103729073ffffffffffffffffffffffffffffffffffffffff1681565b61031c62093a8081565b606e5461031c9067ffffffffffffffff1681565b61041261ea6081565b6104126105593660046140b6565b60676020526000908152604090205481565b60655461037290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b61034861059e3660046142dd565b612778565b6069546103729068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103729073ffffffffffffffffffffffffffffffffffffffff1681565b6103486105fd36600461431a565b61284d565b6069546102f8907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610348612ef2565b60685461031c907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103729073ffffffffffffffffffffffffffffffffffffffff1681565b61034861069536600461440d565b613082565b6103486106a8366004613e2a565b613582565b61041267016345785d8a000081565b606f80546106c990614452565b80601f01602080910402602001604051908101604052809291908181526020018280546106f590614452565b80156107425780601f1061071757610100808354040283529160200191610742565b820191906000526020600020905b81548152906001019060200180831161072557829003601f168201915b505050505081565b60705473ffffffffffffffffffffffffffffffffffffffff1633146107dc5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff16156108f55760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6108fd61361f565b610905613686565b565b60655460ff16156109a65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610a3f5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b805160685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610fef576000878281518110610aa757610aa76144a5565b602002602001015190506000816060015167ffffffffffffffff161115610cc05783610ad281614503565b945050600081600001518051906020012082602001518360600151604051602001610b3593929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610c025760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610cba5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016107d3565b50610e5a565b60208101511580610d6f5750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610d299160040190815260200190565b6020604051808303816000875af1158015610d48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6c919061452a565b15155b610de15760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016107d3565b80515161ea6011610e5a5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016107d3565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610e90575042816040015167ffffffffffffffff1611155b610f285760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610fd190614503565b95505080604001519550508080610fe790614543565b915050610a8b565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156110925760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016107d3565b6068546000906110c090700100000000000000000000000000000000900467ffffffffffffffff168461457b565b6110d49067ffffffffffffffff16876145a4565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c1693909317939093179290921691909117909155600090815260676020526040902083905590506111b1333061118b8467016345785d8a00006145bb565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613710565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d80546106c990614452565b60655460ff16156112aa5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695467ffffffffffffffff90811690881611156113565760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016107d3565b60695467ffffffffffffffff908116908716116114015760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b60205260409020546114b35760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a4016107d3565b60006114c188888888611f24565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516114f691906145f8565b602060405180830381855afa158015611513573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611536919061452a565b6115409190614643565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916115aa9189918991899190600401614657565b602060405180830381865afa1580156115c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115eb91906146d1565b61165d5760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016107d3565b6069546116bb90339061167a9067ffffffffffffffff168b61457b565b67ffffffffffffffff1661168c612647565b61169691906145bb565b606554610100900473ffffffffffffffffffffffffffffffffffffffff1691906137ce565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b15801561177057600080fd5b505af1158015611784573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60655460ff16156118735760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b8567ffffffffffffffff168767ffffffffffffffff16106119225760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e65774261746368206d75737420626520626960648201527f67676572207468616e20696e69744e756d426174636800000000000000000000608482015260a4016107d3565b60695467ffffffffffffffff90811690871611156119ce5760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d4261746368206d757374206265206c657360648201527f73207468616e206c617374566572696669656442617463680000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b6020526040902054611a805760405162461bcd60e51b815260206004820152604e60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d426174636820737461746520726f6f742060648201527f646f6573206e6f74206578697374000000000000000000000000000000000000608482015260a4016107d3565b67ffffffffffffffff86166000908152606b6020526040902054611b325760405162461bcd60e51b815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e6577426174636820737461746520726f6f7460648201527f20646f6573206e6f742065786973740000000000000000000000000000000000608482015260a4016107d3565b6000611b4088888888611f24565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051611b7591906145f8565b602060405180830381855afa158015611b92573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611bb5919061452a565b611bbf9190614643565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611c299189918991899190600401614657565b602060405180830381865afa158015611c46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6a91906146d1565b611cdc5760405162461bcd60e51b815260206004820152603560248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20494e56414c49445f50524f4f46000000000000000000000060648201526084016107d3565b67ffffffffffffffff88166000908152606b6020526040902054869003611d915760405162461bcd60e51b815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2073746f72656420726f6f74206d757374206265206469666660648201527f6572656e74207468616e206e657720737461746520726f6f7400000000000000608482015260a4016107d3565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527fe579d6d18f02941e1d0f59bff70f1b2c894edc991badab38343786df2846fe55910160405180910390a1611ded613686565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611e915760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161084b565b611f1a61361f565b6109056000613829565b67ffffffffffffffff808516600081815260676020526040808220549387168252902054606092911580611f5757508115155b611fef5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b806120885760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b60685460009067ffffffffffffffff70010000000000000000000000000000000082048116916121a99178010000000000000000000000000000000000000000000000009091041660016146ee565b6121b3919061457b565b6121cf9067ffffffffffffffff16670de0b6b3a76400006145bb565b905090565b600054610100900460ff16158080156121f45750600054600160ff909116105b8061220e5750303b15801561220e575060005460ff166001145b6122805760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107d3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156122de57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d61241d8782614768565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f61245e8582614768565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560708054928516929091169190911790556124bc6138a0565b801561251f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146125c65760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061084b90831515815260200190565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156126be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e2919061452a565b60695460685491925060009167ffffffffffffffff91821691680100000000000000008204811691612747917001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041661457b565b61275191906146ee565b61275b919061457b565b67ffffffffffffffff1690506127718183614864565b9250505090565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146128115760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606d61281d8282614768565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161084b9190613de5565b60655460ff16156128ec5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146129af5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180612a4a5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60685467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612a95918491700100000000000000000000000000000000900416614878565b1115612b095760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016107d3565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b84811015612e22576000868281518110612b6957612b696144a5565b602002602001015190508380612b7e90614503565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114612c9f5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016107d3565b612caa6001886145a4565b8303612d68574262093a808360400151612cc491906146ee565b67ffffffffffffffff161115612d685760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016107d3565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612e0a90614503565b96505050508080612e1a90614543565b915050612b4d565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff1615612f6b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b60705473ffffffffffffffffffffffffffffffffffffffff163314612ff85760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561306257600080fd5b505af1158015613076573d6000803e3d6000fd5b50505050610905613926565b60655460ff16156131215760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146131e45760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b60006131ee61215a565b9050818111156132665760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016107d3565b61ea608351106132de5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016107d3565b60655461330890610100900473ffffffffffffffffffffffffffffffffffffffff16333084613710565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613378573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061339c919061452a565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff169060186133d683614503565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161344f93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000908152606690935291205532330361351f57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261357c565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161357393929190614890565b60405180910390a25b50505050565b61358a61361f565b73ffffffffffffffffffffffffffffffffffffffff81166136135760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107d3565b61361c81613829565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109055760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156136f057600080fd5b505af1158015613704573d6000803e3d6000fd5b505050506109056139f2565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261357c9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613ae7565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526138249084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161376a565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661391d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107d3565b61090533613829565b60655460ff161561399f5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff1615613a915760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6000613b49826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613bd99092919063ffffffff16565b8051909150156138245780806020019051810190613b6791906146d1565b6138245760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107d3565b6060613be88484600085613bf2565b90505b9392505050565b606082471015613c6a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016107d3565b73ffffffffffffffffffffffffffffffffffffffff85163b613cce5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107d3565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613cf791906145f8565b60006040518083038185875af1925050503d8060008114613d34576040519150601f19603f3d011682016040523d82523d6000602084013e613d39565b606091505b5091509150613d49828286613d54565b979650505050505050565b60608315613d63575081613beb565b825115613d735782518084602001fd5b8160405162461bcd60e51b81526004016107d39190613de5565b60005b83811015613da8578181015183820152602001613d90565b8381111561357c5750506000910152565b60008151808452613dd1816020860160208601613d8d565b601f01601f19169290920160200192915050565b602081526000613beb6020830184613db9565b73ffffffffffffffffffffffffffffffffffffffff8116811461361c57600080fd5b8035613e2581613df8565b919050565b600060208284031215613e3c57600080fd5b8135613beb81613df8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613e9957613e99613e47565b60405290565b6040516060810167ffffffffffffffff81118282101715613e9957613e99613e47565b604051601f8201601f1916810167ffffffffffffffff81118282101715613eeb57613eeb613e47565b604052919050565b600067ffffffffffffffff821115613f0d57613f0d613e47565b5060051b60200190565b600082601f830112613f2857600080fd5b813567ffffffffffffffff811115613f4257613f42613e47565b613f556020601f19601f84011601613ec2565b818152846020838601011115613f6a57600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613e2557600080fd5b60006020808385031215613fb257600080fd5b823567ffffffffffffffff80821115613fca57600080fd5b818501915085601f830112613fde57600080fd5b8135613ff1613fec82613ef3565b613ec2565b81815260059190911b8301840190848101908883111561401057600080fd5b8585015b838110156140a95780358581111561402c5760008081fd5b86016080818c03601f19018113156140445760008081fd5b61404c613e76565b898301358881111561405e5760008081fd5b61406c8e8c83870101613f17565b8252506040808401358b8301526060614086818601613f87565b82840152614095848601613f87565b908301525085525050918601918601614014565b5098975050505050505050565b6000602082840312156140c857600080fd5b613beb82613f87565b80604081018310156140e257600080fd5b92915050565b6000806000806000806000610180888a03121561410457600080fd5b61410d88613f87565b965061411b60208901613f87565b955060408801359450606088013593506141388960808a016140d1565b925061014088018981111561414c57600080fd5b60c08901925061415c8a826140d1565b91505092959891949750929550565b6000806000806080858703121561418157600080fd5b61418a85613f87565b935061419860208601613f87565b93969395505050506040820135916060013590565b801515811461361c57600080fd5b8035613e25816141ad565b60008060008060008060008060008060006101608c8e0312156141e857600080fd5b6141f18c613e1a565b9a506141ff60208d01613e1a565b995061420d60408d01613e1a565b985060608c0135975061422260808d01613e1a565b965061423060a08d016141bb565b955067ffffffffffffffff8060c08e0135111561424c57600080fd5b61425c8e60c08f01358f01613f17565b955061426a60e08e01613f87565b9450806101008e0135111561427e57600080fd5b506142908d6101008e01358e01613f17565b925061429f6101208d01613e1a565b91506142ae6101408d01613e1a565b90509295989b509295989b9093969950565b6000602082840312156142d257600080fd5b8135613beb816141ad565b6000602082840312156142ef57600080fd5b813567ffffffffffffffff81111561430657600080fd5b61431284828501613f17565b949350505050565b6000602080838503121561432d57600080fd5b823567ffffffffffffffff8082111561434557600080fd5b818501915085601f83011261435957600080fd5b8135614367613fec82613ef3565b81815260059190911b8301840190848101908883111561438657600080fd5b8585015b838110156140a9578035858111156143a25760008081fd5b86016060818c03601f19018113156143ba5760008081fd5b6143c2613e9f565b89830135888111156143d45760008081fd5b6143e28e8c83870101613f17565b8252506040808401358b8301526143fa838501613f87565b908201528552505091860191860161438a565b6000806040838503121561442057600080fd5b823567ffffffffffffffff81111561443757600080fd5b61444385828601613f17565b95602094909401359450505050565b600181811c9082168061446657607f821691505b60208210810361449f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614520576145206144d4565b6001019392505050565b60006020828403121561453c57600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614574576145746144d4565b5060010190565b600067ffffffffffffffff8381169083168181101561459c5761459c6144d4565b039392505050565b6000828210156145b6576145b66144d4565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145f3576145f36144d4565b500290565b6000825161460a818460208701613d8d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261465257614652614614565b500690565b61012081016040808784376000838201818152879190815b600281101561468f5784848337908401828152928401929060010161466f565b5050828760c0870137610100850181815286935091505b60018110156146c55782518252602092830192909101906001016146a6565b50505095945050505050565b6000602082840312156146e357600080fd5b8151613beb816141ad565b600067ffffffffffffffff808316818516808303821115614711576147116144d4565b01949350505050565b601f82111561382457600081815260208120601f850160051c810160208610156147415750805b601f850160051c820191505b818110156147605782815560010161474d565b505050505050565b815167ffffffffffffffff81111561478257614782613e47565b614796816147908454614452565b8461471a565b602080601f8311600181146147e957600084156147b35750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614760565b600085815260208120601f198616915b82811015614818578886015182559484019460019091019084016147f9565b508582101561485457878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008261487357614873614614565b500490565b6000821982111561488b5761488b6144d4565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006148c56060830184613db9565b9594505050505056fea26469706673582212207548bb40f22d0292fea9433de5d772967eae2e559f083e79f095795049cde6f264736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102c85760003560e01c80638c4a0af71161017b578063cfa8ed47116100d8578063e7a7ed021161008c578063eaeb077b11610071578063eaeb077b14610687578063f2fde38b1461069a578063f7552761146106ad57600080fd5b8063e7a7ed0214610637578063e8bf92ed1461066757600080fd5b8063d8d1091b116100bd578063d8d1091b146105ef578063d8f54db014610602578063dbc169761461062f57600080fd5b8063cfa8ed47146105a3578063d02103ca146105cf57600080fd5b8063adc879e91161012f578063b4d63f5811610114578063b4d63f581461054b578063b6b0b0971461056b578063c89e42df1461059057600080fd5b8063adc879e91461052e578063b02286c01461054257600080fd5b806399f5634e1161016057806399f5634e146104fc578063a3c573eb14610504578063ab9fc5ef1461052457600080fd5b80638c4a0af7146104cb5780638da5cb5b146104de57600080fd5b8063542028d511610229578063715018a6116101dd57806379847057116101c2578063798470571461049c5780637fcb3653146104a457806381df7d3f146104b857600080fd5b8063715018a6146104815780637152facf1461048957600080fd5b80636766f09d1161020e5780636766f09d1461043b5780636b8616ce1461044e5780636ff512cc1461046e57600080fd5b8063542028d51461042057806355b925e61461042857600080fd5b806327eb6c0f11610280578063423fa85611610265578063423fa856146103aa57806345605267146103ca5780635392c5e0146103f257600080fd5b806327eb6c0f146103525780633c1582671461039757600080fd5b806319d8ac61116102b157806319d8ac61146103085780631c1083e2146103355780632072f6c51461034a57600080fd5b8063107bf28c146102cd57806315064c96146102eb575b600080fd5b6102d56106bc565b6040516102e29190613de5565b60405180910390f35b6065546102f89060ff1681565b60405190151581526020016102e2565b60685461031c9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102e2565b610348610343366004613e2a565b61074a565b005b610348610856565b6070546103729073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e2565b6103486103a5366004613f9f565b610907565b60685461031c9068010000000000000000900467ffffffffffffffff1681565b60685461031c90700100000000000000000000000000000000900467ffffffffffffffff1681565b6104126104003660046140b6565b606b6020526000908152604090205481565b6040519081526020016102e2565b6102d56111fe565b6103486104363660046140e8565b61120b565b6103486104493660046140e8565b6117d4565b61041261045c3660046140b6565b60666020526000908152604090205481565b61034861047c366004613e2a565b611df8565b610348611f12565b6102d561049736600461416b565b611f24565b61041261215a565b60695461031c9067ffffffffffffffff1681565b6103486104c63660046141c6565b6121d4565b6103486104d93660046142c0565b61252d565b60335473ffffffffffffffffffffffffffffffffffffffff16610372565b610412612647565b6071546103729073ffffffffffffffffffffffffffffffffffffffff1681565b61031c62093a8081565b606e5461031c9067ffffffffffffffff1681565b61041261ea6081565b6104126105593660046140b6565b60676020526000908152604090205481565b60655461037290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b61034861059e3660046142dd565b612778565b6069546103729068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103729073ffffffffffffffffffffffffffffffffffffffff1681565b6103486105fd36600461431a565b61284d565b6069546102f8907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610348612ef2565b60685461031c907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103729073ffffffffffffffffffffffffffffffffffffffff1681565b61034861069536600461440d565b613082565b6103486106a8366004613e2a565b613582565b61041267016345785d8a000081565b606f80546106c990614452565b80601f01602080910402602001604051908101604052809291908181526020018280546106f590614452565b80156107425780601f1061071757610100808354040283529160200191610742565b820191906000526020600020905b81548152906001019060200180831161072557829003601f168201915b505050505081565b60705473ffffffffffffffffffffffffffffffffffffffff1633146107dc5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff16156108f55760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6108fd61361f565b610905613686565b565b60655460ff16156109a65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610a3f5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b805160685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610fef576000878281518110610aa757610aa76144a5565b602002602001015190506000816060015167ffffffffffffffff161115610cc05783610ad281614503565b945050600081600001518051906020012082602001518360600151604051602001610b3593929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610c025760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610cba5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016107d3565b50610e5a565b60208101511580610d6f5750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610d299160040190815260200190565b6020604051808303816000875af1158015610d48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6c919061452a565b15155b610de15760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016107d3565b80515161ea6011610e5a5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016107d3565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610e90575042816040015167ffffffffffffffff1611155b610f285760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610fd190614503565b95505080604001519550508080610fe790614543565b915050610a8b565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156110925760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016107d3565b6068546000906110c090700100000000000000000000000000000000900467ffffffffffffffff168461457b565b6110d49067ffffffffffffffff16876145a4565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c1693909317939093179290921691909117909155600090815260676020526040902083905590506111b1333061118b8467016345785d8a00006145bb565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613710565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d80546106c990614452565b60655460ff16156112aa5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695467ffffffffffffffff90811690881611156113565760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016107d3565b60695467ffffffffffffffff908116908716116114015760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b60205260409020546114b35760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a4016107d3565b60006114c188888888611f24565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516114f691906145f8565b602060405180830381855afa158015611513573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611536919061452a565b6115409190614643565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916115aa9189918991899190600401614657565b602060405180830381865afa1580156115c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115eb91906146d1565b61165d5760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016107d3565b6069546116bb90339061167a9067ffffffffffffffff168b61457b565b67ffffffffffffffff1661168c612647565b61169691906145bb565b606554610100900473ffffffffffffffffffffffffffffffffffffffff1691906137ce565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b15801561177057600080fd5b505af1158015611784573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60655460ff16156118735760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b8567ffffffffffffffff168767ffffffffffffffff16106119225760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e65774261746368206d75737420626520626960648201527f67676572207468616e20696e69744e756d426174636800000000000000000000608482015260a4016107d3565b60695467ffffffffffffffff90811690871611156119ce5760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d4261746368206d757374206265206c657360648201527f73207468616e206c617374566572696669656442617463680000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b6020526040902054611a805760405162461bcd60e51b815260206004820152604e60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d426174636820737461746520726f6f742060648201527f646f6573206e6f74206578697374000000000000000000000000000000000000608482015260a4016107d3565b67ffffffffffffffff86166000908152606b6020526040902054611b325760405162461bcd60e51b815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e6577426174636820737461746520726f6f7460648201527f20646f6573206e6f742065786973740000000000000000000000000000000000608482015260a4016107d3565b6000611b4088888888611f24565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051611b7591906145f8565b602060405180830381855afa158015611b92573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611bb5919061452a565b611bbf9190614643565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611c299189918991899190600401614657565b602060405180830381865afa158015611c46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6a91906146d1565b611cdc5760405162461bcd60e51b815260206004820152603560248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20494e56414c49445f50524f4f46000000000000000000000060648201526084016107d3565b67ffffffffffffffff88166000908152606b6020526040902054869003611d915760405162461bcd60e51b815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2073746f72656420726f6f74206d757374206265206469666660648201527f6572656e74207468616e206e657720737461746520726f6f7400000000000000608482015260a4016107d3565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527fe579d6d18f02941e1d0f59bff70f1b2c894edc991badab38343786df2846fe55910160405180910390a1611ded613686565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611e915760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161084b565b611f1a61361f565b6109056000613829565b67ffffffffffffffff808516600081815260676020526040808220549387168252902054606092911580611f5757508115155b611fef5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b806120885760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b60685460009067ffffffffffffffff70010000000000000000000000000000000082048116916121a99178010000000000000000000000000000000000000000000000009091041660016146ee565b6121b3919061457b565b6121cf9067ffffffffffffffff16670de0b6b3a76400006145bb565b905090565b600054610100900460ff16158080156121f45750600054600160ff909116105b8061220e5750303b15801561220e575060005460ff166001145b6122805760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107d3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156122de57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d61241d8782614768565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f61245e8582614768565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560708054928516929091169190911790556124bc6138a0565b801561251f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146125c65760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061084b90831515815260200190565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156126be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e2919061452a565b60695460685491925060009167ffffffffffffffff91821691680100000000000000008204811691612747917001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041661457b565b61275191906146ee565b61275b919061457b565b67ffffffffffffffff1690506127718183614864565b9250505090565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146128115760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606d61281d8282614768565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161084b9190613de5565b60655460ff16156128ec5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146129af5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180612a4a5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60685467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612a95918491700100000000000000000000000000000000900416614878565b1115612b095760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016107d3565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b84811015612e22576000868281518110612b6957612b696144a5565b602002602001015190508380612b7e90614503565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114612c9f5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016107d3565b612caa6001886145a4565b8303612d68574262093a808360400151612cc491906146ee565b67ffffffffffffffff161115612d685760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016107d3565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612e0a90614503565b96505050508080612e1a90614543565b915050612b4d565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff1615612f6b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b60705473ffffffffffffffffffffffffffffffffffffffff163314612ff85760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561306257600080fd5b505af1158015613076573d6000803e3d6000fd5b50505050610905613926565b60655460ff16156131215760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146131e45760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b60006131ee61215a565b9050818111156132665760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016107d3565b61ea608351106132de5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016107d3565b60655461330890610100900473ffffffffffffffffffffffffffffffffffffffff16333084613710565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613378573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061339c919061452a565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff169060186133d683614503565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161344f93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000908152606690935291205532330361351f57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261357c565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161357393929190614890565b60405180910390a25b50505050565b61358a61361f565b73ffffffffffffffffffffffffffffffffffffffff81166136135760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107d3565b61361c81613829565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109055760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156136f057600080fd5b505af1158015613704573d6000803e3d6000fd5b505050506109056139f2565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261357c9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613ae7565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526138249084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161376a565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661391d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107d3565b61090533613829565b60655460ff161561399f5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff1615613a915760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6000613b49826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613bd99092919063ffffffff16565b8051909150156138245780806020019051810190613b6791906146d1565b6138245760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107d3565b6060613be88484600085613bf2565b90505b9392505050565b606082471015613c6a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016107d3565b73ffffffffffffffffffffffffffffffffffffffff85163b613cce5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107d3565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613cf791906145f8565b60006040518083038185875af1925050503d8060008114613d34576040519150601f19603f3d011682016040523d82523d6000602084013e613d39565b606091505b5091509150613d49828286613d54565b979650505050505050565b60608315613d63575081613beb565b825115613d735782518084602001fd5b8160405162461bcd60e51b81526004016107d39190613de5565b60005b83811015613da8578181015183820152602001613d90565b8381111561357c5750506000910152565b60008151808452613dd1816020860160208601613d8d565b601f01601f19169290920160200192915050565b602081526000613beb6020830184613db9565b73ffffffffffffffffffffffffffffffffffffffff8116811461361c57600080fd5b8035613e2581613df8565b919050565b600060208284031215613e3c57600080fd5b8135613beb81613df8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613e9957613e99613e47565b60405290565b6040516060810167ffffffffffffffff81118282101715613e9957613e99613e47565b604051601f8201601f1916810167ffffffffffffffff81118282101715613eeb57613eeb613e47565b604052919050565b600067ffffffffffffffff821115613f0d57613f0d613e47565b5060051b60200190565b600082601f830112613f2857600080fd5b813567ffffffffffffffff811115613f4257613f42613e47565b613f556020601f19601f84011601613ec2565b818152846020838601011115613f6a57600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613e2557600080fd5b60006020808385031215613fb257600080fd5b823567ffffffffffffffff80821115613fca57600080fd5b818501915085601f830112613fde57600080fd5b8135613ff1613fec82613ef3565b613ec2565b81815260059190911b8301840190848101908883111561401057600080fd5b8585015b838110156140a95780358581111561402c5760008081fd5b86016080818c03601f19018113156140445760008081fd5b61404c613e76565b898301358881111561405e5760008081fd5b61406c8e8c83870101613f17565b8252506040808401358b8301526060614086818601613f87565b82840152614095848601613f87565b908301525085525050918601918601614014565b5098975050505050505050565b6000602082840312156140c857600080fd5b613beb82613f87565b80604081018310156140e257600080fd5b92915050565b6000806000806000806000610180888a03121561410457600080fd5b61410d88613f87565b965061411b60208901613f87565b955060408801359450606088013593506141388960808a016140d1565b925061014088018981111561414c57600080fd5b60c08901925061415c8a826140d1565b91505092959891949750929550565b6000806000806080858703121561418157600080fd5b61418a85613f87565b935061419860208601613f87565b93969395505050506040820135916060013590565b801515811461361c57600080fd5b8035613e25816141ad565b60008060008060008060008060008060006101608c8e0312156141e857600080fd5b6141f18c613e1a565b9a506141ff60208d01613e1a565b995061420d60408d01613e1a565b985060608c0135975061422260808d01613e1a565b965061423060a08d016141bb565b955067ffffffffffffffff8060c08e0135111561424c57600080fd5b61425c8e60c08f01358f01613f17565b955061426a60e08e01613f87565b9450806101008e0135111561427e57600080fd5b506142908d6101008e01358e01613f17565b925061429f6101208d01613e1a565b91506142ae6101408d01613e1a565b90509295989b509295989b9093969950565b6000602082840312156142d257600080fd5b8135613beb816141ad565b6000602082840312156142ef57600080fd5b813567ffffffffffffffff81111561430657600080fd5b61431284828501613f17565b949350505050565b6000602080838503121561432d57600080fd5b823567ffffffffffffffff8082111561434557600080fd5b818501915085601f83011261435957600080fd5b8135614367613fec82613ef3565b81815260059190911b8301840190848101908883111561438657600080fd5b8585015b838110156140a9578035858111156143a25760008081fd5b86016060818c03601f19018113156143ba5760008081fd5b6143c2613e9f565b89830135888111156143d45760008081fd5b6143e28e8c83870101613f17565b8252506040808401358b8301526143fa838501613f87565b908201528552505091860191860161438a565b6000806040838503121561442057600080fd5b823567ffffffffffffffff81111561443757600080fd5b61444385828601613f17565b95602094909401359450505050565b600181811c9082168061446657607f821691505b60208210810361449f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614520576145206144d4565b6001019392505050565b60006020828403121561453c57600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614574576145746144d4565b5060010190565b600067ffffffffffffffff8381169083168181101561459c5761459c6144d4565b039392505050565b6000828210156145b6576145b66144d4565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145f3576145f36144d4565b500290565b6000825161460a818460208701613d8d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261465257614652614614565b500690565b61012081016040808784376000838201818152879190815b600281101561468f5784848337908401828152928401929060010161466f565b5050828760c0870137610100850181815286935091505b60018110156146c55782518252602092830192909101906001016146a6565b50505095945050505050565b6000602082840312156146e357600080fd5b8151613beb816141ad565b600067ffffffffffffffff808316818516808303821115614711576147116144d4565b01949350505050565b601f82111561382457600081815260208120601f850160051c810160208610156147415750805b601f850160051c820191505b818110156147605782815560010161474d565b505050505050565b815167ffffffffffffffff81111561478257614782613e47565b614796816147908454614452565b8461471a565b602080601f8311600181146147e957600084156147b35750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614760565b600085815260208120601f198616915b82811015614818578886015182559484019460019091019084016147f9565b508582101561485457878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008261487357614873614614565b500490565b6000821982111561488b5761488b6144d4565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006148c56060830184613db9565b9594505050505056fea26469706673582212207548bb40f22d0292fea9433de5d772967eae2e559f083e79f095795049cde6f264736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/ProofOfEfficiencyMock.json b/compiled-contracts/ProofOfEfficiencyMock.json index 7f90e7c84..4a787d5ba 100644 --- a/compiled-contracts/ProofOfEfficiencyMock.json +++ b/compiled-contracts/ProofOfEfficiencyMock.json @@ -545,6 +545,11 @@ "internalType": "contract IBridge", "name": "_bridgeAddress", "type": "address" + }, + { + "internalType": "address", + "name": "_securityCouncil", + "type": "address" } ], "name": "initialize", @@ -1095,8 +1100,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506150e9806100206000396000f3fe608060405234801561001057600080fd5b506004361061032b5760003560e01c80638da5cb5b116101b2578063ca810366116100f9578063dbc16976116100a2578063eaeb077b1161007c578063eaeb077b14610810578063f2fde38b14610823578063f755276114610836578063fe16564f1461084557600080fd5b8063dbc16976146107b8578063e7a7ed02146107c0578063e8bf92ed146107f057600080fd5b8063d0ae98dd116100d3578063d0ae98dd14610765578063d8d1091b14610778578063d8f54db01461078b57600080fd5b8063ca81036614610706578063cfa8ed4714610719578063d02103ca1461074557600080fd5b8063adc879e91161015b578063b6b0b09711610135578063b6b0b097146106bb578063c0cad302146106e0578063c89e42df146106f357600080fd5b8063adc879e91461067e578063b02286c014610692578063b4d63f581461069b57600080fd5b80639b7967601161018c5780639b79676014610641578063a3c573eb14610654578063ab9fc5ef1461067457600080fd5b80638da5cb5b1461060857806396dc3d391461062657806399f5634e1461063957600080fd5b80635437988d11610276578063715018a61161021f57806379847057116101f957806379847057146105d95780637fcb3653146105e15780638c4a0af7146105f557600080fd5b8063715018a6146105ab5780637152facf146105b3578063748608de146105c657600080fd5b80636766f09d116102505780636766f09d146105655780636b8616ce146105785780636ff512cc1461059857600080fd5b80635437988d1461049e57806355b925e6146104b1578063574f649e146104c457600080fd5b806327eb6c0f116102d857806345605267116102b257806345605267146104405780635392c5e014610468578063542028d51461049657600080fd5b806327eb6c0f146103c85780633c1582671461040d578063423fa8561461042057600080fd5b80631a26da14116103095780631a26da14146103985780631c1083e2146103ad5780632072f6c5146103c057600080fd5b8063107bf28c1461033057806315064c961461034e57806319d8ac611461036b575b600080fd5b610338610858565b6040516103459190614514565b60405180910390f35b60655461035b9060ff1681565b6040519015158152602001610345565b60685461037f9067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610345565b6103ab6103a6366004614544565b6108e6565b005b6103ab6103bb36600461459b565b61090b565b6103ab610a17565b6070546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610345565b6103ab61041b3660046146f8565b610ac8565b60685461037f9068010000000000000000900467ffffffffffffffff1681565b60685461037f90700100000000000000000000000000000000900467ffffffffffffffff1681565b61048861047636600461480f565b606b6020526000908152604090205481565b604051908152602001610345565b6103386113bf565b6103ab6104ac36600461459b565b6113cc565b6103ab6104bf366004614841565b61141b565b6104886104d23660046148c4565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b6103ab610573366004614841565b611932565b61048861058636600461480f565b60666020526000908152604090205481565b6103ab6105a636600461459b565b611f6b565b6103ab612085565b6103386105c136600461493a565b612097565b6103ab6105d4366004614841565b6122cd565b610488612536565b60695461037f9067ffffffffffffffff1681565b6103ab610603366004614995565b6125b0565b60335473ffffffffffffffffffffffffffffffffffffffff166103e8565b6103ab61063436600461480f565b6126ca565b61048861270d565b6103ab61064f36600461480f565b61283e565b6071546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b61037f62093a8081565b606e5461037f9067ffffffffffffffff1681565b61048861ea6081565b6104886106a936600461480f565b60676020526000908152604090205481565b6065546103e890610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6103ab6106ee3660046149b2565b61288d565b6103ab6107013660046149b2565b6128a5565b6103ab6107143660046149ef565b61297a565b6069546103e89068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b61048861077336600461493a565b612cbd565b6103ab610786366004614ad3565b612f69565b60695461035b907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b6103ab61360e565b60685461037f907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b6103ab61081e366004614bc6565b61379e565b6103ab61083136600461459b565b613c9e565b61048867016345785d8a000081565b6103ab610853366004614c0b565b613d3b565b606f805461086590614c37565b80601f016020809104026020016040519081016040528092919081815260200182805461089190614c37565b80156108de5780601f106108b3576101008083540402835291602001916108de565b820191906000526020600020905b8154815290600101906020018083116108c157829003601f168201915b505050505081565b6108ee613d5e565b67ffffffffffffffff909116600090815260676020526040902055565b60705473ffffffffffffffffffffffffffffffffffffffff16331461099d5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff1615610ab65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b610abe613d5e565b610ac6613dc5565b565b60655460ff1615610b675760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610c005760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b805160685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b858110156111b0576000878281518110610c6857610c68614c8a565b602002602001015190506000816060015167ffffffffffffffff161115610e815783610c9381614ce8565b945050600081600001518051906020012082602001518360600151604051602001610cf693929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610dc35760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610e7b5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610994565b5061101b565b60208101511580610f305750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610eea9160040190815260200190565b6020604051808303816000875af1158015610f09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2d9190614d0f565b15155b610fa25760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610994565b80515161ea601161101b5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610994565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015611051575042816040015167ffffffffffffffff1611155b6110e95760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061119290614ce8565b955050806040015195505080806111a890614d28565b915050610c4c565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156112535760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610994565b60685460009061128190700100000000000000000000000000000000900467ffffffffffffffff1684614d60565b6112959067ffffffffffffffff1687614d89565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c169390931793909317929092169190911790915560009081526067602052604090208390559050611372333061134c8467016345785d8a0000614da0565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613e4f565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d805461086590614c37565b6113d4613d5e565b606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60655460ff16156114ba5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff90811690881611156115665760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a401610994565b60695467ffffffffffffffff908116908716116116115760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a401610994565b600061161f88888888612097565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516116549190614ddd565b602060405180830381855afa158015611671573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906116949190614d0f565b61169e9190614e28565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916117089189918991899190600401614e3c565b602060405180830381865afa158015611725573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117499190614eb6565b6117bb5760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610994565b6069546118199033906117d89067ffffffffffffffff168b614d60565b67ffffffffffffffff166117ea61270d565b6117f49190614da0565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169190613f0d565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b1580156118ce57600080fd5b505af11580156118e2573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60655460ff16156119d15760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8567ffffffffffffffff168767ffffffffffffffff1610611a805760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e65774261746368206d75737420626520626960648201527f67676572207468616e20696e69744e756d426174636800000000000000000000608482015260a401610994565b60695467ffffffffffffffff9081169087161115611b2c5760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d4261746368206d757374206265206c657360648201527f73207468616e206c617374566572696669656442617463680000000000000000608482015260a401610994565b67ffffffffffffffff87161580611b5b575067ffffffffffffffff87166000908152606b602052604090205415155b611bf35760405162461bcd60e51b815260206004820152604e60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d426174636820737461746520726f6f742060648201527f646f6573206e6f74206578697374000000000000000000000000000000000000608482015260a401610994565b67ffffffffffffffff86166000908152606b6020526040902054611ca55760405162461bcd60e51b815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e6577426174636820737461746520726f6f7460648201527f20646f6573206e6f742065786973740000000000000000000000000000000000608482015260a401610994565b6000611cb388888888612097565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051611ce89190614ddd565b602060405180830381855afa158015611d05573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611d289190614d0f565b611d329190614e28565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611d9c9189918991899190600401614e3c565b602060405180830381865afa158015611db9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ddd9190614eb6565b611e4f5760405162461bcd60e51b815260206004820152603560248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20494e56414c49445f50524f4f4600000000000000000000006064820152608401610994565b67ffffffffffffffff88166000908152606b6020526040902054869003611f045760405162461bcd60e51b815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2073746f72656420726f6f74206d757374206265206469666660648201527f6572656e74207468616e206e657720737461746520726f6f7400000000000000608482015260a401610994565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527fe579d6d18f02941e1d0f59bff70f1b2c894edc991badab38343786df2846fe55910160405180910390a1611f60613dc5565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146120045760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610a0c565b61208d613d5e565b610ac66000613f68565b67ffffffffffffffff8085166000818152606760205260408082205493871682529020546060929115806120ca57508115155b6121625760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b806121fb5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b6122d5613d5e565b60695467ffffffffffffffff90811690881611156123815760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff9081169087161161242c5760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610994565b67ffffffffffffffff808816600090815260676020526040808220549289168252902054816124c35760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b806118195760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691612585917801000000000000000000000000000000000000000000000000909104166001614ed3565b61258f9190614d60565b6125ab9067ffffffffffffffff16670de0b6b3a7640000614da0565b905090565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146126495760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a0c90831515815260200190565b6126d2613d5e565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612784573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a89190614d0f565b60695460685491925060009167ffffffffffffffff9182169168010000000000000000820481169161280d9170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614d60565b6128179190614ed3565b6128219190614d60565b67ffffffffffffffff1690506128378183614eff565b9250505090565b612846613d5e565b6068805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b612895613d5e565b606f6128a18282614f61565b5050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461293e5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606d61294a8282614f61565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a0c9190614514565b600054610100900460ff161580801561299a5750600054600160ff909116105b806129b45750303b1580156129b4575060005460ff166001145b612a265760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610994565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015612a8457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8e811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008e851602179055606c80549091168b831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b899055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928a16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000088151502179055606d612bc38682614f61565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8616179055606f612c048482614f61565b50607180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055612c4d613fdf565b8015612cb057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b60695460009067ffffffffffffffff868116911614612d6a5760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8467ffffffffffffffff168467ffffffffffffffff1611612e195760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a401610994565b60685467ffffffffffffffff6801000000000000000090910481169085161115612ed15760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6000612edf86868686612097565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051612f149190614ddd565b602060405180830381855afa158015612f31573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612f549190614d0f565b612f5e9190614e28565b979650505050505050565b60655460ff16156130085760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146130cb5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b8051806131665760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60685467ffffffffffffffff780100000000000000000000000000000000000000000000000082048116916131b191849170010000000000000000000000000000000090041661505d565b11156132255760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610994565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b8481101561353e57600086828151811061328557613285614c8a565b60200260200101519050838061329a90614ce8565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff88166000908152606690935291205490915081146133bb5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610994565b6133c6600188614d89565b8303613484574262093a8083604001516133e09190614ed3565b67ffffffffffffffff1611156134845760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610994565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209350858061352690614ce8565b9650505050808061353690614d28565b915050613269565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16156136875760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b60705473ffffffffffffffffffffffffffffffffffffffff1633146137145760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c0000006064820152608401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561377e57600080fd5b505af1158015613792573d6000803e3d6000fd5b50505050610ac6614065565b60655460ff161561383d5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146139005760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b600061390a612536565b9050818111156139825760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610994565b61ea608351106139fa5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610994565b606554613a2490610100900473ffffffffffffffffffffffffffffffffffffffff16333084613e4f565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613a94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ab89190614d0f565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613af283614ce8565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505083805190602001208142604051602001613b6b93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526066909352912055323303613c3b57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613c98565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613c8f93929190615075565b60405180910390a25b50505050565b613ca6613d5e565b73ffffffffffffffffffffffffffffffffffffffff8116613d2f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610994565b613d3881613f68565b50565b613d43613d5e565b67ffffffffffffffff166000908152606b6020526040902055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ac65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613e2f57600080fd5b505af1158015613e43573d6000803e3d6000fd5b50505050610ac6614131565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052613c989085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152614226565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052613f639084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401613ea9565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661405c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610994565b610ac633613f68565b60655460ff16156140de5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff16156141d05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6000614288826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166143189092919063ffffffff16565b805190915015613f6357808060200190518101906142a69190614eb6565b613f635760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610994565b60606143278484600085614331565b90505b9392505050565b6060824710156143a95760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610994565b73ffffffffffffffffffffffffffffffffffffffff85163b61440d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610994565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516144369190614ddd565b60006040518083038185875af1925050503d8060008114614473576040519150601f19603f3d011682016040523d82523d6000602084013e614478565b606091505b5091509150612f5e8282866060831561449257508161432a565b8251156144a25782518084602001fd5b8160405162461bcd60e51b81526004016109949190614514565b60005b838110156144d75781810151838201526020016144bf565b83811115613c985750506000910152565b600081518084526145008160208601602086016144bc565b601f01601f19169290920160200192915050565b60208152600061432a60208301846144e8565b803567ffffffffffffffff8116811461453f57600080fd5b919050565b6000806040838503121561455757600080fd5b61456083614527565b946020939093013593505050565b73ffffffffffffffffffffffffffffffffffffffff81168114613d3857600080fd5b803561453f8161456e565b6000602082840312156145ad57600080fd5b813561432a8161456e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171561460a5761460a6145b8565b60405290565b6040516060810167ffffffffffffffff8111828210171561460a5761460a6145b8565b604051601f8201601f1916810167ffffffffffffffff8111828210171561465c5761465c6145b8565b604052919050565b600067ffffffffffffffff82111561467e5761467e6145b8565b5060051b60200190565b600082601f83011261469957600080fd5b813567ffffffffffffffff8111156146b3576146b36145b8565b6146c66020601f19601f84011601614633565b8181528460208386010111156146db57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561470b57600080fd5b823567ffffffffffffffff8082111561472357600080fd5b818501915085601f83011261473757600080fd5b813561474a61474582614664565b614633565b81815260059190911b8301840190848101908883111561476957600080fd5b8585015b83811015614802578035858111156147855760008081fd5b86016080818c03601f190181131561479d5760008081fd5b6147a56145e7565b89830135888111156147b75760008081fd5b6147c58e8c83870101614688565b8252506040808401358b83015260606147df818601614527565b828401526147ee848601614527565b90830152508552505091860191860161476d565b5098975050505050505050565b60006020828403121561482157600080fd5b61432a82614527565b806040810183101561483b57600080fd5b92915050565b6000806000806000806000610180888a03121561485d57600080fd5b61486688614527565b965061487460208901614527565b955060408801359450606088013593506148918960808a0161482a565b92506101408801898111156148a557600080fd5b60c0890192506148b58a8261482a565b91505092959891949750929550565b600080600080600060a086880312156148dc57600080fd5b85359450602086013567ffffffffffffffff8111156148fa57600080fd5b61490688828901614688565b9450506040860135925061491c60608701614527565b9150608086013561492c8161456e565b809150509295509295909350565b6000806000806080858703121561495057600080fd5b61495985614527565b935061496760208601614527565b93969395505050506040820135916060013590565b8015158114613d3857600080fd5b803561453f8161497c565b6000602082840312156149a757600080fd5b813561432a8161497c565b6000602082840312156149c457600080fd5b813567ffffffffffffffff8111156149db57600080fd5b6149e784828501614688565b949350505050565b6000806000806000806000806000806101408b8d031215614a0f57600080fd5b614a188b614590565b9950614a2660208c01614590565b9850614a3460408c01614590565b975060608b01359650614a4960808c01614590565b9550614a5760a08c0161498a565b945060c08b013567ffffffffffffffff80821115614a7457600080fd5b614a808e838f01614688565b9550614a8e60e08e01614527565b94506101008d0135915080821115614aa557600080fd5b50614ab28d828e01614688565b925050614ac26101208c01614590565b90509295989b9194979a5092959850565b60006020808385031215614ae657600080fd5b823567ffffffffffffffff80821115614afe57600080fd5b818501915085601f830112614b1257600080fd5b8135614b2061474582614664565b81815260059190911b83018401908481019088831115614b3f57600080fd5b8585015b8381101561480257803585811115614b5b5760008081fd5b86016060818c03601f1901811315614b735760008081fd5b614b7b614610565b8983013588811115614b8d5760008081fd5b614b9b8e8c83870101614688565b8252506040808401358b830152614bb3838501614527565b9082015285525050918601918601614b43565b60008060408385031215614bd957600080fd5b823567ffffffffffffffff811115614bf057600080fd5b614bfc85828601614688565b95602094909401359450505050565b60008060408385031215614c1e57600080fd5b82359150614c2e60208401614527565b90509250929050565b600181811c90821680614c4b57607f821691505b602082108103614c84577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614d0557614d05614cb9565b6001019392505050565b600060208284031215614d2157600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614d5957614d59614cb9565b5060010190565b600067ffffffffffffffff83811690831681811015614d8157614d81614cb9565b039392505050565b600082821015614d9b57614d9b614cb9565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614dd857614dd8614cb9565b500290565b60008251614def8184602087016144bc565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614e3757614e37614df9565b500690565b61012081016040808784376000838201818152879190815b6002811015614e7457848483379084018281529284019290600101614e54565b5050828760c0870137610100850181815286935091505b6001811015614eaa578251825260209283019290910190600101614e8b565b50505095945050505050565b600060208284031215614ec857600080fd5b815161432a8161497c565b600067ffffffffffffffff808316818516808303821115614ef657614ef6614cb9565b01949350505050565b600082614f0e57614f0e614df9565b500490565b601f821115613f6357600081815260208120601f850160051c81016020861015614f3a5750805b601f850160051c820191505b81811015614f5957828155600101614f46565b505050505050565b815167ffffffffffffffff811115614f7b57614f7b6145b8565b614f8f81614f898454614c37565b84614f13565b602080601f831160018114614fe25760008415614fac5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614f59565b600085815260208120601f198616915b8281101561501157888601518255948401946001909101908401614ff2565b508582101561504d57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000821982111561507057615070614cb9565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006150aa60608301846144e8565b9594505050505056fea2646970667358221220dbec0337eaff482385055b567f46a3136d562e38d52dbd6f9939ee9e82edfe3464736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061032b5760003560e01c80638da5cb5b116101b2578063ca810366116100f9578063dbc16976116100a2578063eaeb077b1161007c578063eaeb077b14610810578063f2fde38b14610823578063f755276114610836578063fe16564f1461084557600080fd5b8063dbc16976146107b8578063e7a7ed02146107c0578063e8bf92ed146107f057600080fd5b8063d0ae98dd116100d3578063d0ae98dd14610765578063d8d1091b14610778578063d8f54db01461078b57600080fd5b8063ca81036614610706578063cfa8ed4714610719578063d02103ca1461074557600080fd5b8063adc879e91161015b578063b6b0b09711610135578063b6b0b097146106bb578063c0cad302146106e0578063c89e42df146106f357600080fd5b8063adc879e91461067e578063b02286c014610692578063b4d63f581461069b57600080fd5b80639b7967601161018c5780639b79676014610641578063a3c573eb14610654578063ab9fc5ef1461067457600080fd5b80638da5cb5b1461060857806396dc3d391461062657806399f5634e1461063957600080fd5b80635437988d11610276578063715018a61161021f57806379847057116101f957806379847057146105d95780637fcb3653146105e15780638c4a0af7146105f557600080fd5b8063715018a6146105ab5780637152facf146105b3578063748608de146105c657600080fd5b80636766f09d116102505780636766f09d146105655780636b8616ce146105785780636ff512cc1461059857600080fd5b80635437988d1461049e57806355b925e6146104b1578063574f649e146104c457600080fd5b806327eb6c0f116102d857806345605267116102b257806345605267146104405780635392c5e014610468578063542028d51461049657600080fd5b806327eb6c0f146103c85780633c1582671461040d578063423fa8561461042057600080fd5b80631a26da14116103095780631a26da14146103985780631c1083e2146103ad5780632072f6c5146103c057600080fd5b8063107bf28c1461033057806315064c961461034e57806319d8ac611461036b575b600080fd5b610338610858565b6040516103459190614514565b60405180910390f35b60655461035b9060ff1681565b6040519015158152602001610345565b60685461037f9067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610345565b6103ab6103a6366004614544565b6108e6565b005b6103ab6103bb36600461459b565b61090b565b6103ab610a17565b6070546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610345565b6103ab61041b3660046146f8565b610ac8565b60685461037f9068010000000000000000900467ffffffffffffffff1681565b60685461037f90700100000000000000000000000000000000900467ffffffffffffffff1681565b61048861047636600461480f565b606b6020526000908152604090205481565b604051908152602001610345565b6103386113bf565b6103ab6104ac36600461459b565b6113cc565b6103ab6104bf366004614841565b61141b565b6104886104d23660046148c4565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b6103ab610573366004614841565b611932565b61048861058636600461480f565b60666020526000908152604090205481565b6103ab6105a636600461459b565b611f6b565b6103ab612085565b6103386105c136600461493a565b612097565b6103ab6105d4366004614841565b6122cd565b610488612536565b60695461037f9067ffffffffffffffff1681565b6103ab610603366004614995565b6125b0565b60335473ffffffffffffffffffffffffffffffffffffffff166103e8565b6103ab61063436600461480f565b6126ca565b61048861270d565b6103ab61064f36600461480f565b61283e565b6071546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b61037f62093a8081565b606e5461037f9067ffffffffffffffff1681565b61048861ea6081565b6104886106a936600461480f565b60676020526000908152604090205481565b6065546103e890610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6103ab6106ee3660046149b2565b61288d565b6103ab6107013660046149b2565b6128a5565b6103ab6107143660046149ef565b61297a565b6069546103e89068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b61048861077336600461493a565b612cbd565b6103ab610786366004614ad3565b612f69565b60695461035b907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b6103ab61360e565b60685461037f907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b6103ab61081e366004614bc6565b61379e565b6103ab61083136600461459b565b613c9e565b61048867016345785d8a000081565b6103ab610853366004614c0b565b613d3b565b606f805461086590614c37565b80601f016020809104026020016040519081016040528092919081815260200182805461089190614c37565b80156108de5780601f106108b3576101008083540402835291602001916108de565b820191906000526020600020905b8154815290600101906020018083116108c157829003601f168201915b505050505081565b6108ee613d5e565b67ffffffffffffffff909116600090815260676020526040902055565b60705473ffffffffffffffffffffffffffffffffffffffff16331461099d5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff1615610ab65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b610abe613d5e565b610ac6613dc5565b565b60655460ff1615610b675760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610c005760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b805160685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b858110156111b0576000878281518110610c6857610c68614c8a565b602002602001015190506000816060015167ffffffffffffffff161115610e815783610c9381614ce8565b945050600081600001518051906020012082602001518360600151604051602001610cf693929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610dc35760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610e7b5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610994565b5061101b565b60208101511580610f305750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610eea9160040190815260200190565b6020604051808303816000875af1158015610f09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2d9190614d0f565b15155b610fa25760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610994565b80515161ea601161101b5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610994565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015611051575042816040015167ffffffffffffffff1611155b6110e95760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061119290614ce8565b955050806040015195505080806111a890614d28565b915050610c4c565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156112535760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610994565b60685460009061128190700100000000000000000000000000000000900467ffffffffffffffff1684614d60565b6112959067ffffffffffffffff1687614d89565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c169390931793909317929092169190911790915560009081526067602052604090208390559050611372333061134c8467016345785d8a0000614da0565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613e4f565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d805461086590614c37565b6113d4613d5e565b606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60655460ff16156114ba5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff90811690881611156115665760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a401610994565b60695467ffffffffffffffff908116908716116116115760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a401610994565b600061161f88888888612097565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516116549190614ddd565b602060405180830381855afa158015611671573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906116949190614d0f565b61169e9190614e28565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916117089189918991899190600401614e3c565b602060405180830381865afa158015611725573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117499190614eb6565b6117bb5760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610994565b6069546118199033906117d89067ffffffffffffffff168b614d60565b67ffffffffffffffff166117ea61270d565b6117f49190614da0565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169190613f0d565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b1580156118ce57600080fd5b505af11580156118e2573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60655460ff16156119d15760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8567ffffffffffffffff168767ffffffffffffffff1610611a805760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e65774261746368206d75737420626520626960648201527f67676572207468616e20696e69744e756d426174636800000000000000000000608482015260a401610994565b60695467ffffffffffffffff9081169087161115611b2c5760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d4261746368206d757374206265206c657360648201527f73207468616e206c617374566572696669656442617463680000000000000000608482015260a401610994565b67ffffffffffffffff87161580611b5b575067ffffffffffffffff87166000908152606b602052604090205415155b611bf35760405162461bcd60e51b815260206004820152604e60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d426174636820737461746520726f6f742060648201527f646f6573206e6f74206578697374000000000000000000000000000000000000608482015260a401610994565b67ffffffffffffffff86166000908152606b6020526040902054611ca55760405162461bcd60e51b815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e6577426174636820737461746520726f6f7460648201527f20646f6573206e6f742065786973740000000000000000000000000000000000608482015260a401610994565b6000611cb388888888612097565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051611ce89190614ddd565b602060405180830381855afa158015611d05573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611d289190614d0f565b611d329190614e28565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611d9c9189918991899190600401614e3c565b602060405180830381865afa158015611db9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ddd9190614eb6565b611e4f5760405162461bcd60e51b815260206004820152603560248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20494e56414c49445f50524f4f4600000000000000000000006064820152608401610994565b67ffffffffffffffff88166000908152606b6020526040902054869003611f045760405162461bcd60e51b815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2073746f72656420726f6f74206d757374206265206469666660648201527f6572656e74207468616e206e657720737461746520726f6f7400000000000000608482015260a401610994565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527fe579d6d18f02941e1d0f59bff70f1b2c894edc991badab38343786df2846fe55910160405180910390a1611f60613dc5565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146120045760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610a0c565b61208d613d5e565b610ac66000613f68565b67ffffffffffffffff8085166000818152606760205260408082205493871682529020546060929115806120ca57508115155b6121625760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b806121fb5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b6122d5613d5e565b60695467ffffffffffffffff90811690881611156123815760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff9081169087161161242c5760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610994565b67ffffffffffffffff808816600090815260676020526040808220549289168252902054816124c35760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b806118195760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691612585917801000000000000000000000000000000000000000000000000909104166001614ed3565b61258f9190614d60565b6125ab9067ffffffffffffffff16670de0b6b3a7640000614da0565b905090565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146126495760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a0c90831515815260200190565b6126d2613d5e565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612784573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a89190614d0f565b60695460685491925060009167ffffffffffffffff9182169168010000000000000000820481169161280d9170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614d60565b6128179190614ed3565b6128219190614d60565b67ffffffffffffffff1690506128378183614eff565b9250505090565b612846613d5e565b6068805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b612895613d5e565b606f6128a18282614f61565b5050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461293e5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606d61294a8282614f61565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a0c9190614514565b600054610100900460ff161580801561299a5750600054600160ff909116105b806129b45750303b1580156129b4575060005460ff166001145b612a265760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610994565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015612a8457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8e811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008e851602179055606c80549091168b831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b899055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928a16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000088151502179055606d612bc38682614f61565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8616179055606f612c048482614f61565b50607180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055612c4d613fdf565b8015612cb057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b60695460009067ffffffffffffffff868116911614612d6a5760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8467ffffffffffffffff168467ffffffffffffffff1611612e195760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a401610994565b60685467ffffffffffffffff6801000000000000000090910481169085161115612ed15760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6000612edf86868686612097565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051612f149190614ddd565b602060405180830381855afa158015612f31573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612f549190614d0f565b612f5e9190614e28565b979650505050505050565b60655460ff16156130085760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146130cb5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b8051806131665760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60685467ffffffffffffffff780100000000000000000000000000000000000000000000000082048116916131b191849170010000000000000000000000000000000090041661505d565b11156132255760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610994565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b8481101561353e57600086828151811061328557613285614c8a565b60200260200101519050838061329a90614ce8565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff88166000908152606690935291205490915081146133bb5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610994565b6133c6600188614d89565b8303613484574262093a8083604001516133e09190614ed3565b67ffffffffffffffff1611156134845760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610994565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209350858061352690614ce8565b9650505050808061353690614d28565b915050613269565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16156136875760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b60705473ffffffffffffffffffffffffffffffffffffffff1633146137145760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c0000006064820152608401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561377e57600080fd5b505af1158015613792573d6000803e3d6000fd5b50505050610ac6614065565b60655460ff161561383d5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146139005760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b600061390a612536565b9050818111156139825760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610994565b61ea608351106139fa5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610994565b606554613a2490610100900473ffffffffffffffffffffffffffffffffffffffff16333084613e4f565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613a94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ab89190614d0f565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613af283614ce8565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505083805190602001208142604051602001613b6b93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526066909352912055323303613c3b57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613c98565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613c8f93929190615075565b60405180910390a25b50505050565b613ca6613d5e565b73ffffffffffffffffffffffffffffffffffffffff8116613d2f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610994565b613d3881613f68565b50565b613d43613d5e565b67ffffffffffffffff166000908152606b6020526040902055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ac65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613e2f57600080fd5b505af1158015613e43573d6000803e3d6000fd5b50505050610ac6614131565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052613c989085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152614226565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052613f639084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401613ea9565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661405c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610994565b610ac633613f68565b60655460ff16156140de5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff16156141d05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6000614288826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166143189092919063ffffffff16565b805190915015613f6357808060200190518101906142a69190614eb6565b613f635760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610994565b60606143278484600085614331565b90505b9392505050565b6060824710156143a95760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610994565b73ffffffffffffffffffffffffffffffffffffffff85163b61440d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610994565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516144369190614ddd565b60006040518083038185875af1925050503d8060008114614473576040519150601f19603f3d011682016040523d82523d6000602084013e614478565b606091505b5091509150612f5e8282866060831561449257508161432a565b8251156144a25782518084602001fd5b8160405162461bcd60e51b81526004016109949190614514565b60005b838110156144d75781810151838201526020016144bf565b83811115613c985750506000910152565b600081518084526145008160208601602086016144bc565b601f01601f19169290920160200192915050565b60208152600061432a60208301846144e8565b803567ffffffffffffffff8116811461453f57600080fd5b919050565b6000806040838503121561455757600080fd5b61456083614527565b946020939093013593505050565b73ffffffffffffffffffffffffffffffffffffffff81168114613d3857600080fd5b803561453f8161456e565b6000602082840312156145ad57600080fd5b813561432a8161456e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171561460a5761460a6145b8565b60405290565b6040516060810167ffffffffffffffff8111828210171561460a5761460a6145b8565b604051601f8201601f1916810167ffffffffffffffff8111828210171561465c5761465c6145b8565b604052919050565b600067ffffffffffffffff82111561467e5761467e6145b8565b5060051b60200190565b600082601f83011261469957600080fd5b813567ffffffffffffffff8111156146b3576146b36145b8565b6146c66020601f19601f84011601614633565b8181528460208386010111156146db57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561470b57600080fd5b823567ffffffffffffffff8082111561472357600080fd5b818501915085601f83011261473757600080fd5b813561474a61474582614664565b614633565b81815260059190911b8301840190848101908883111561476957600080fd5b8585015b83811015614802578035858111156147855760008081fd5b86016080818c03601f190181131561479d5760008081fd5b6147a56145e7565b89830135888111156147b75760008081fd5b6147c58e8c83870101614688565b8252506040808401358b83015260606147df818601614527565b828401526147ee848601614527565b90830152508552505091860191860161476d565b5098975050505050505050565b60006020828403121561482157600080fd5b61432a82614527565b806040810183101561483b57600080fd5b92915050565b6000806000806000806000610180888a03121561485d57600080fd5b61486688614527565b965061487460208901614527565b955060408801359450606088013593506148918960808a0161482a565b92506101408801898111156148a557600080fd5b60c0890192506148b58a8261482a565b91505092959891949750929550565b600080600080600060a086880312156148dc57600080fd5b85359450602086013567ffffffffffffffff8111156148fa57600080fd5b61490688828901614688565b9450506040860135925061491c60608701614527565b9150608086013561492c8161456e565b809150509295509295909350565b6000806000806080858703121561495057600080fd5b61495985614527565b935061496760208601614527565b93969395505050506040820135916060013590565b8015158114613d3857600080fd5b803561453f8161497c565b6000602082840312156149a757600080fd5b813561432a8161497c565b6000602082840312156149c457600080fd5b813567ffffffffffffffff8111156149db57600080fd5b6149e784828501614688565b949350505050565b6000806000806000806000806000806101408b8d031215614a0f57600080fd5b614a188b614590565b9950614a2660208c01614590565b9850614a3460408c01614590565b975060608b01359650614a4960808c01614590565b9550614a5760a08c0161498a565b945060c08b013567ffffffffffffffff80821115614a7457600080fd5b614a808e838f01614688565b9550614a8e60e08e01614527565b94506101008d0135915080821115614aa557600080fd5b50614ab28d828e01614688565b925050614ac26101208c01614590565b90509295989b9194979a5092959850565b60006020808385031215614ae657600080fd5b823567ffffffffffffffff80821115614afe57600080fd5b818501915085601f830112614b1257600080fd5b8135614b2061474582614664565b81815260059190911b83018401908481019088831115614b3f57600080fd5b8585015b8381101561480257803585811115614b5b5760008081fd5b86016060818c03601f1901811315614b735760008081fd5b614b7b614610565b8983013588811115614b8d5760008081fd5b614b9b8e8c83870101614688565b8252506040808401358b830152614bb3838501614527565b9082015285525050918601918601614b43565b60008060408385031215614bd957600080fd5b823567ffffffffffffffff811115614bf057600080fd5b614bfc85828601614688565b95602094909401359450505050565b60008060408385031215614c1e57600080fd5b82359150614c2e60208401614527565b90509250929050565b600181811c90821680614c4b57607f821691505b602082108103614c84577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614d0557614d05614cb9565b6001019392505050565b600060208284031215614d2157600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614d5957614d59614cb9565b5060010190565b600067ffffffffffffffff83811690831681811015614d8157614d81614cb9565b039392505050565b600082821015614d9b57614d9b614cb9565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614dd857614dd8614cb9565b500290565b60008251614def8184602087016144bc565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614e3757614e37614df9565b500690565b61012081016040808784376000838201818152879190815b6002811015614e7457848483379084018281529284019290600101614e54565b5050828760c0870137610100850181815286935091505b6001811015614eaa578251825260209283019290910190600101614e8b565b50505095945050505050565b600060208284031215614ec857600080fd5b815161432a8161497c565b600067ffffffffffffffff808316818516808303821115614ef657614ef6614cb9565b01949350505050565b600082614f0e57614f0e614df9565b500490565b601f821115613f6357600081815260208120601f850160051c81016020861015614f3a5750805b601f850160051c820191505b81811015614f5957828155600101614f46565b505050505050565b815167ffffffffffffffff811115614f7b57614f7b6145b8565b614f8f81614f898454614c37565b84614f13565b602080601f831160018114614fe25760008415614fac5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614f59565b600085815260208120601f198616915b8281101561501157888601518255948401946001909101908401614ff2565b508582101561504d57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000821982111561507057615070614cb9565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006150aa60608301846144e8565b9594505050505056fea2646970667358221220dbec0337eaff482385055b567f46a3136d562e38d52dbd6f9939ee9e82edfe3464736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506151b2806100206000396000f3fe608060405234801561001057600080fd5b506004361061032b5760003560e01c80638c4a0af7116101b2578063c89e42df116100f9578063dbc16976116100a2578063eaeb077b1161007c578063eaeb077b14610810578063f2fde38b14610823578063f755276114610836578063fe16564f1461084557600080fd5b8063dbc16976146107b8578063e7a7ed02146107c0578063e8bf92ed146107f057600080fd5b8063d0ae98dd116100d3578063d0ae98dd14610765578063d8d1091b14610778578063d8f54db01461078b57600080fd5b8063c89e42df14610706578063cfa8ed4714610719578063d02103ca1461074557600080fd5b8063ab9fc5ef1161015b578063b4d63f5811610135578063b4d63f58146106ae578063b6b0b097146106ce578063c0cad302146106f357600080fd5b8063ab9fc5ef14610687578063adc879e914610691578063b02286c0146106a557600080fd5b806399f5634e1161018c57806399f5634e1461064c5780639b79676014610654578063a3c573eb1461066757600080fd5b80638c4a0af7146106085780638da5cb5b1461061b57806396dc3d391461063957600080fd5b80635437988d11610276578063715018a61161021f57806379847057116101f957806379847057146105d95780637fcb3653146105e157806381df7d3f146105f557600080fd5b8063715018a6146105ab5780637152facf146105b3578063748608de146105c657600080fd5b80636766f09d116102505780636766f09d146105655780636b8616ce146105785780636ff512cc1461059857600080fd5b80635437988d1461049e57806355b925e6146104b1578063574f649e146104c457600080fd5b806327eb6c0f116102d857806345605267116102b257806345605267146104405780635392c5e014610468578063542028d51461049657600080fd5b806327eb6c0f146103c85780633c1582671461040d578063423fa8561461042057600080fd5b80631a26da14116103095780631a26da14146103985780631c1083e2146103ad5780632072f6c5146103c057600080fd5b8063107bf28c1461033057806315064c961461034e57806319d8ac611461036b575b600080fd5b610338610858565b60405161034591906145c7565b60405180910390f35b60655461035b9060ff1681565b6040519015158152602001610345565b60685461037f9067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610345565b6103ab6103a63660046145f7565b6108e6565b005b6103ab6103bb36600461464e565b61090b565b6103ab610a17565b6070546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610345565b6103ab61041b3660046147ab565b610ac8565b60685461037f9068010000000000000000900467ffffffffffffffff1681565b60685461037f90700100000000000000000000000000000000900467ffffffffffffffff1681565b6104886104763660046148c2565b606b6020526000908152604090205481565b604051908152602001610345565b6103386113bf565b6103ab6104ac36600461464e565b6113cc565b6103ab6104bf3660046148f4565b61141b565b6104886104d2366004614977565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b6103ab6105733660046148f4565b6119e4565b6104886105863660046148c2565b60666020526000908152604090205481565b6103ab6105a636600461464e565b612008565b6103ab612122565b6103386105c13660046149ed565b612134565b6103ab6105d43660046148f4565b61236a565b6104886125d3565b60695461037f9067ffffffffffffffff1681565b6103ab610603366004614a48565b61264d565b6103ab610616366004614b42565b6129a6565b60335473ffffffffffffffffffffffffffffffffffffffff166103e8565b6103ab6106473660046148c2565b612ac0565b610488612b03565b6103ab6106623660046148c2565b612c34565b6071546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b61037f62093a8081565b606e5461037f9067ffffffffffffffff1681565b61048861ea6081565b6104886106bc3660046148c2565b60676020526000908152604090205481565b6065546103e890610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6103ab610701366004614b5f565b612c83565b6103ab610714366004614b5f565b612c9b565b6069546103e89068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b6104886107733660046149ed565b612d70565b6103ab610786366004614b9c565b61301c565b60695461035b907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b6103ab6136c1565b60685461037f907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b6103ab61081e366004614c8f565b613851565b6103ab61083136600461464e565b613d51565b61048867016345785d8a000081565b6103ab610853366004614cd4565b613dee565b606f805461086590614d00565b80601f016020809104026020016040519081016040528092919081815260200182805461089190614d00565b80156108de5780601f106108b3576101008083540402835291602001916108de565b820191906000526020600020905b8154815290600101906020018083116108c157829003601f168201915b505050505081565b6108ee613e11565b67ffffffffffffffff909116600090815260676020526040902055565b60705473ffffffffffffffffffffffffffffffffffffffff16331461099d5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff1615610ab65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b610abe613e11565b610ac6613e78565b565b60655460ff1615610b675760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610c005760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b805160685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b858110156111b0576000878281518110610c6857610c68614d53565b602002602001015190506000816060015167ffffffffffffffff161115610e815783610c9381614db1565b945050600081600001518051906020012082602001518360600151604051602001610cf693929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610dc35760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610e7b5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610994565b5061101b565b60208101511580610f305750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610eea9160040190815260200190565b6020604051808303816000875af1158015610f09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2d9190614dd8565b15155b610fa25760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610994565b80515161ea601161101b5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610994565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015611051575042816040015167ffffffffffffffff1611155b6110e95760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061119290614db1565b955050806040015195505080806111a890614df1565b915050610c4c565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156112535760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610994565b60685460009061128190700100000000000000000000000000000000900467ffffffffffffffff1684614e29565b6112959067ffffffffffffffff1687614e52565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c169390931793909317929092169190911790915560009081526067602052604090208390559050611372333061134c8467016345785d8a0000614e69565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613f02565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d805461086590614d00565b6113d4613e11565b606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60655460ff16156114ba5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff90811690881611156115665760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a401610994565b60695467ffffffffffffffff908116908716116116115760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b60205260409020546116c35760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a401610994565b60006116d188888888612134565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516117069190614ea6565b602060405180830381855afa158015611723573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906117469190614dd8565b6117509190614ef1565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916117ba9189918991899190600401614f05565b602060405180830381865afa1580156117d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117fb9190614f7f565b61186d5760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610994565b6069546118cb90339061188a9067ffffffffffffffff168b614e29565b67ffffffffffffffff1661189c612b03565b6118a69190614e69565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169190613fc0565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b15801561198057600080fd5b505af1158015611994573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60655460ff1615611a835760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8567ffffffffffffffff168767ffffffffffffffff1610611b325760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e65774261746368206d75737420626520626960648201527f67676572207468616e20696e69744e756d426174636800000000000000000000608482015260a401610994565b60695467ffffffffffffffff9081169087161115611bde5760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d4261746368206d757374206265206c657360648201527f73207468616e206c617374566572696669656442617463680000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b6020526040902054611c905760405162461bcd60e51b815260206004820152604e60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d426174636820737461746520726f6f742060648201527f646f6573206e6f74206578697374000000000000000000000000000000000000608482015260a401610994565b67ffffffffffffffff86166000908152606b6020526040902054611d425760405162461bcd60e51b815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e6577426174636820737461746520726f6f7460648201527f20646f6573206e6f742065786973740000000000000000000000000000000000608482015260a401610994565b6000611d5088888888612134565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051611d859190614ea6565b602060405180830381855afa158015611da2573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611dc59190614dd8565b611dcf9190614ef1565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611e399189918991899190600401614f05565b602060405180830381865afa158015611e56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7a9190614f7f565b611eec5760405162461bcd60e51b815260206004820152603560248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20494e56414c49445f50524f4f4600000000000000000000006064820152608401610994565b67ffffffffffffffff88166000908152606b6020526040902054869003611fa15760405162461bcd60e51b815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2073746f72656420726f6f74206d757374206265206469666660648201527f6572656e74207468616e206e657720737461746520726f6f7400000000000000608482015260a401610994565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527fe579d6d18f02941e1d0f59bff70f1b2c894edc991badab38343786df2846fe55910160405180910390a1611ffd613e78565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146120a15760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610a0c565b61212a613e11565b610ac6600061401b565b67ffffffffffffffff80851660008181526067602052604080822054938716825290205460609291158061216757508115155b6121ff5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b806122985760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b612372613e11565b60695467ffffffffffffffff908116908816111561241e5760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff908116908716116124c95760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610994565b67ffffffffffffffff808816600090815260676020526040808220549289168252902054816125605760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b806118cb5760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691612622917801000000000000000000000000000000000000000000000000909104166001614f9c565b61262c9190614e29565b6126489067ffffffffffffffff16670de0b6b3a7640000614e69565b905090565b600054610100900460ff161580801561266d5750600054600160ff909116105b806126875750303b158015612687575060005460ff166001145b6126f95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610994565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561275757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d6128968782615016565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f6128d78582615016565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556070805492851692909116919091179055612935614092565b801561299857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612a3f5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a0c90831515815260200190565b612ac8613e11565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612b7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b9e9190614dd8565b60695460685491925060009167ffffffffffffffff91821691680100000000000000008204811691612c039170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614e29565b612c0d9190614f9c565b612c179190614e29565b67ffffffffffffffff169050612c2d8183615112565b9250505090565b612c3c613e11565b6068805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b612c8b613e11565b606f612c978282615016565b5050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612d345760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606d612d408282615016565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a0c91906145c7565b60695460009067ffffffffffffffff868116911614612e1d5760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8467ffffffffffffffff168467ffffffffffffffff1611612ecc5760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a401610994565b60685467ffffffffffffffff6801000000000000000090910481169085161115612f845760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6000612f9286868686612134565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051612fc79190614ea6565b602060405180830381855afa158015612fe4573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906130079190614dd8565b6130119190614ef1565b979650505050505050565b60655460ff16156130bb5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461317e5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b8051806132195760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60685467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691613264918491700100000000000000000000000000000000900416615126565b11156132d85760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610994565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b848110156135f157600086828151811061333857613338614d53565b60200260200101519050838061334d90614db1565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff881660009081526066909352912054909150811461346e5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610994565b613479600188614e52565b8303613537574262093a8083604001516134939190614f9c565b67ffffffffffffffff1611156135375760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610994565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c0160405160208183030381529060405280519060200120935085806135d990614db1565b965050505080806135e990614df1565b91505061331c565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff161561373a5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b60705473ffffffffffffffffffffffffffffffffffffffff1633146137c75760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c0000006064820152608401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561383157600080fd5b505af1158015613845573d6000803e3d6000fd5b50505050610ac6614118565b60655460ff16156138f05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146139b35760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b60006139bd6125d3565b905081811115613a355760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610994565b61ea60835110613aad5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610994565b606554613ad790610100900473ffffffffffffffffffffffffffffffffffffffff16333084613f02565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613b47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b6b9190614dd8565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613ba583614db1565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505083805190602001208142604051602001613c1e93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526066909352912055323303613cee57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613d4b565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613d429392919061513e565b60405180910390a25b50505050565b613d59613e11565b73ffffffffffffffffffffffffffffffffffffffff8116613de25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610994565b613deb8161401b565b50565b613df6613e11565b67ffffffffffffffff166000908152606b6020526040902055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ac65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613ee257600080fd5b505af1158015613ef6573d6000803e3d6000fd5b50505050610ac66141e4565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052613d4b9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526142d9565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526140169084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401613f5c565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661410f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610994565b610ac63361401b565b60655460ff16156141915760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff16156142835760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b600061433b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166143cb9092919063ffffffff16565b80519091501561401657808060200190518101906143599190614f7f565b6140165760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610994565b60606143da84846000856143e4565b90505b9392505050565b60608247101561445c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610994565b73ffffffffffffffffffffffffffffffffffffffff85163b6144c05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610994565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516144e99190614ea6565b60006040518083038185875af1925050503d8060008114614526576040519150601f19603f3d011682016040523d82523d6000602084013e61452b565b606091505b5091509150613011828286606083156145455750816143dd565b8251156145555782518084602001fd5b8160405162461bcd60e51b815260040161099491906145c7565b60005b8381101561458a578181015183820152602001614572565b83811115613d4b5750506000910152565b600081518084526145b381602086016020860161456f565b601f01601f19169290920160200192915050565b6020815260006143dd602083018461459b565b803567ffffffffffffffff811681146145f257600080fd5b919050565b6000806040838503121561460a57600080fd5b614613836145da565b946020939093013593505050565b73ffffffffffffffffffffffffffffffffffffffff81168114613deb57600080fd5b80356145f281614621565b60006020828403121561466057600080fd5b81356143dd81614621565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff811182821017156146bd576146bd61466b565b60405290565b6040516060810167ffffffffffffffff811182821017156146bd576146bd61466b565b604051601f8201601f1916810167ffffffffffffffff8111828210171561470f5761470f61466b565b604052919050565b600067ffffffffffffffff8211156147315761473161466b565b5060051b60200190565b600082601f83011261474c57600080fd5b813567ffffffffffffffff8111156147665761476661466b565b6147796020601f19601f840116016146e6565b81815284602083860101111561478e57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208083850312156147be57600080fd5b823567ffffffffffffffff808211156147d657600080fd5b818501915085601f8301126147ea57600080fd5b81356147fd6147f882614717565b6146e6565b81815260059190911b8301840190848101908883111561481c57600080fd5b8585015b838110156148b5578035858111156148385760008081fd5b86016080818c03601f19018113156148505760008081fd5b61485861469a565b898301358881111561486a5760008081fd5b6148788e8c8387010161473b565b8252506040808401358b83015260606148928186016145da565b828401526148a18486016145da565b908301525085525050918601918601614820565b5098975050505050505050565b6000602082840312156148d457600080fd5b6143dd826145da565b80604081018310156148ee57600080fd5b92915050565b6000806000806000806000610180888a03121561491057600080fd5b614919886145da565b9650614927602089016145da565b955060408801359450606088013593506149448960808a016148dd565b925061014088018981111561495857600080fd5b60c0890192506149688a826148dd565b91505092959891949750929550565b600080600080600060a0868803121561498f57600080fd5b85359450602086013567ffffffffffffffff8111156149ad57600080fd5b6149b98882890161473b565b945050604086013592506149cf606087016145da565b915060808601356149df81614621565b809150509295509295909350565b60008060008060808587031215614a0357600080fd5b614a0c856145da565b9350614a1a602086016145da565b93969395505050506040820135916060013590565b8015158114613deb57600080fd5b80356145f281614a2f565b60008060008060008060008060008060006101608c8e031215614a6a57600080fd5b614a738c614643565b9a50614a8160208d01614643565b9950614a8f60408d01614643565b985060608c01359750614aa460808d01614643565b9650614ab260a08d01614a3d565b955067ffffffffffffffff8060c08e01351115614ace57600080fd5b614ade8e60c08f01358f0161473b565b9550614aec60e08e016145da565b9450806101008e01351115614b0057600080fd5b50614b128d6101008e01358e0161473b565b9250614b216101208d01614643565b9150614b306101408d01614643565b90509295989b509295989b9093969950565b600060208284031215614b5457600080fd5b81356143dd81614a2f565b600060208284031215614b7157600080fd5b813567ffffffffffffffff811115614b8857600080fd5b614b948482850161473b565b949350505050565b60006020808385031215614baf57600080fd5b823567ffffffffffffffff80821115614bc757600080fd5b818501915085601f830112614bdb57600080fd5b8135614be96147f882614717565b81815260059190911b83018401908481019088831115614c0857600080fd5b8585015b838110156148b557803585811115614c245760008081fd5b86016060818c03601f1901811315614c3c5760008081fd5b614c446146c3565b8983013588811115614c565760008081fd5b614c648e8c8387010161473b565b8252506040808401358b830152614c7c8385016145da565b9082015285525050918601918601614c0c565b60008060408385031215614ca257600080fd5b823567ffffffffffffffff811115614cb957600080fd5b614cc58582860161473b565b95602094909401359450505050565b60008060408385031215614ce757600080fd5b82359150614cf7602084016145da565b90509250929050565b600181811c90821680614d1457607f821691505b602082108103614d4d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614dce57614dce614d82565b6001019392505050565b600060208284031215614dea57600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e2257614e22614d82565b5060010190565b600067ffffffffffffffff83811690831681811015614e4a57614e4a614d82565b039392505050565b600082821015614e6457614e64614d82565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ea157614ea1614d82565b500290565b60008251614eb881846020870161456f565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614f0057614f00614ec2565b500690565b61012081016040808784376000838201818152879190815b6002811015614f3d57848483379084018281529284019290600101614f1d565b5050828760c0870137610100850181815286935091505b6001811015614f73578251825260209283019290910190600101614f54565b50505095945050505050565b600060208284031215614f9157600080fd5b81516143dd81614a2f565b600067ffffffffffffffff808316818516808303821115614fbf57614fbf614d82565b01949350505050565b601f82111561401657600081815260208120601f850160051c81016020861015614fef5750805b601f850160051c820191505b8181101561500e57828155600101614ffb565b505050505050565b815167ffffffffffffffff8111156150305761503061466b565b6150448161503e8454614d00565b84614fc8565b602080601f83116001811461509757600084156150615750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561500e565b600085815260208120601f198616915b828110156150c6578886015182559484019460019091019084016150a7565b508582101561510257878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008261512157615121614ec2565b500490565b6000821982111561513957615139614d82565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff83166020820152606060408201526000615173606083018461459b565b9594505050505056fea26469706673582212201002a0be18bc33019714770ac596cf0268b1a00cfca1b5d696d7dc00e4a8255464736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061032b5760003560e01c80638c4a0af7116101b2578063c89e42df116100f9578063dbc16976116100a2578063eaeb077b1161007c578063eaeb077b14610810578063f2fde38b14610823578063f755276114610836578063fe16564f1461084557600080fd5b8063dbc16976146107b8578063e7a7ed02146107c0578063e8bf92ed146107f057600080fd5b8063d0ae98dd116100d3578063d0ae98dd14610765578063d8d1091b14610778578063d8f54db01461078b57600080fd5b8063c89e42df14610706578063cfa8ed4714610719578063d02103ca1461074557600080fd5b8063ab9fc5ef1161015b578063b4d63f5811610135578063b4d63f58146106ae578063b6b0b097146106ce578063c0cad302146106f357600080fd5b8063ab9fc5ef14610687578063adc879e914610691578063b02286c0146106a557600080fd5b806399f5634e1161018c57806399f5634e1461064c5780639b79676014610654578063a3c573eb1461066757600080fd5b80638c4a0af7146106085780638da5cb5b1461061b57806396dc3d391461063957600080fd5b80635437988d11610276578063715018a61161021f57806379847057116101f957806379847057146105d95780637fcb3653146105e157806381df7d3f146105f557600080fd5b8063715018a6146105ab5780637152facf146105b3578063748608de146105c657600080fd5b80636766f09d116102505780636766f09d146105655780636b8616ce146105785780636ff512cc1461059857600080fd5b80635437988d1461049e57806355b925e6146104b1578063574f649e146104c457600080fd5b806327eb6c0f116102d857806345605267116102b257806345605267146104405780635392c5e014610468578063542028d51461049657600080fd5b806327eb6c0f146103c85780633c1582671461040d578063423fa8561461042057600080fd5b80631a26da14116103095780631a26da14146103985780631c1083e2146103ad5780632072f6c5146103c057600080fd5b8063107bf28c1461033057806315064c961461034e57806319d8ac611461036b575b600080fd5b610338610858565b60405161034591906145c7565b60405180910390f35b60655461035b9060ff1681565b6040519015158152602001610345565b60685461037f9067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610345565b6103ab6103a63660046145f7565b6108e6565b005b6103ab6103bb36600461464e565b61090b565b6103ab610a17565b6070546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610345565b6103ab61041b3660046147ab565b610ac8565b60685461037f9068010000000000000000900467ffffffffffffffff1681565b60685461037f90700100000000000000000000000000000000900467ffffffffffffffff1681565b6104886104763660046148c2565b606b6020526000908152604090205481565b604051908152602001610345565b6103386113bf565b6103ab6104ac36600461464e565b6113cc565b6103ab6104bf3660046148f4565b61141b565b6104886104d2366004614977565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b6103ab6105733660046148f4565b6119e4565b6104886105863660046148c2565b60666020526000908152604090205481565b6103ab6105a636600461464e565b612008565b6103ab612122565b6103386105c13660046149ed565b612134565b6103ab6105d43660046148f4565b61236a565b6104886125d3565b60695461037f9067ffffffffffffffff1681565b6103ab610603366004614a48565b61264d565b6103ab610616366004614b42565b6129a6565b60335473ffffffffffffffffffffffffffffffffffffffff166103e8565b6103ab6106473660046148c2565b612ac0565b610488612b03565b6103ab6106623660046148c2565b612c34565b6071546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b61037f62093a8081565b606e5461037f9067ffffffffffffffff1681565b61048861ea6081565b6104886106bc3660046148c2565b60676020526000908152604090205481565b6065546103e890610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6103ab610701366004614b5f565b612c83565b6103ab610714366004614b5f565b612c9b565b6069546103e89068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b6104886107733660046149ed565b612d70565b6103ab610786366004614b9c565b61301c565b60695461035b907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b6103ab6136c1565b60685461037f907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b6103ab61081e366004614c8f565b613851565b6103ab61083136600461464e565b613d51565b61048867016345785d8a000081565b6103ab610853366004614cd4565b613dee565b606f805461086590614d00565b80601f016020809104026020016040519081016040528092919081815260200182805461089190614d00565b80156108de5780601f106108b3576101008083540402835291602001916108de565b820191906000526020600020905b8154815290600101906020018083116108c157829003601f168201915b505050505081565b6108ee613e11565b67ffffffffffffffff909116600090815260676020526040902055565b60705473ffffffffffffffffffffffffffffffffffffffff16331461099d5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff1615610ab65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b610abe613e11565b610ac6613e78565b565b60655460ff1615610b675760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610c005760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b805160685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b858110156111b0576000878281518110610c6857610c68614d53565b602002602001015190506000816060015167ffffffffffffffff161115610e815783610c9381614db1565b945050600081600001518051906020012082602001518360600151604051602001610cf693929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610dc35760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610e7b5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610994565b5061101b565b60208101511580610f305750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610eea9160040190815260200190565b6020604051808303816000875af1158015610f09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2d9190614dd8565b15155b610fa25760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610994565b80515161ea601161101b5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610994565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015611051575042816040015167ffffffffffffffff1611155b6110e95760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061119290614db1565b955050806040015195505080806111a890614df1565b915050610c4c565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156112535760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610994565b60685460009061128190700100000000000000000000000000000000900467ffffffffffffffff1684614e29565b6112959067ffffffffffffffff1687614e52565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c169390931793909317929092169190911790915560009081526067602052604090208390559050611372333061134c8467016345785d8a0000614e69565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613f02565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d805461086590614d00565b6113d4613e11565b606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60655460ff16156114ba5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff90811690881611156115665760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a401610994565b60695467ffffffffffffffff908116908716116116115760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b60205260409020546116c35760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a401610994565b60006116d188888888612134565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516117069190614ea6565b602060405180830381855afa158015611723573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906117469190614dd8565b6117509190614ef1565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916117ba9189918991899190600401614f05565b602060405180830381865afa1580156117d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117fb9190614f7f565b61186d5760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610994565b6069546118cb90339061188a9067ffffffffffffffff168b614e29565b67ffffffffffffffff1661189c612b03565b6118a69190614e69565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169190613fc0565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b15801561198057600080fd5b505af1158015611994573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60655460ff1615611a835760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8567ffffffffffffffff168767ffffffffffffffff1610611b325760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e65774261746368206d75737420626520626960648201527f67676572207468616e20696e69744e756d426174636800000000000000000000608482015260a401610994565b60695467ffffffffffffffff9081169087161115611bde5760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d4261746368206d757374206265206c657360648201527f73207468616e206c617374566572696669656442617463680000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b6020526040902054611c905760405162461bcd60e51b815260206004820152604e60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d426174636820737461746520726f6f742060648201527f646f6573206e6f74206578697374000000000000000000000000000000000000608482015260a401610994565b67ffffffffffffffff86166000908152606b6020526040902054611d425760405162461bcd60e51b815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e6577426174636820737461746520726f6f7460648201527f20646f6573206e6f742065786973740000000000000000000000000000000000608482015260a401610994565b6000611d5088888888612134565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051611d859190614ea6565b602060405180830381855afa158015611da2573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611dc59190614dd8565b611dcf9190614ef1565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611e399189918991899190600401614f05565b602060405180830381865afa158015611e56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7a9190614f7f565b611eec5760405162461bcd60e51b815260206004820152603560248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20494e56414c49445f50524f4f4600000000000000000000006064820152608401610994565b67ffffffffffffffff88166000908152606b6020526040902054869003611fa15760405162461bcd60e51b815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2073746f72656420726f6f74206d757374206265206469666660648201527f6572656e74207468616e206e657720737461746520726f6f7400000000000000608482015260a401610994565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527fe579d6d18f02941e1d0f59bff70f1b2c894edc991badab38343786df2846fe55910160405180910390a1611ffd613e78565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146120a15760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610a0c565b61212a613e11565b610ac6600061401b565b67ffffffffffffffff80851660008181526067602052604080822054938716825290205460609291158061216757508115155b6121ff5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b806122985760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b612372613e11565b60695467ffffffffffffffff908116908816111561241e5760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff908116908716116124c95760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610994565b67ffffffffffffffff808816600090815260676020526040808220549289168252902054816125605760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b806118cb5760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691612622917801000000000000000000000000000000000000000000000000909104166001614f9c565b61262c9190614e29565b6126489067ffffffffffffffff16670de0b6b3a7640000614e69565b905090565b600054610100900460ff161580801561266d5750600054600160ff909116105b806126875750303b158015612687575060005460ff166001145b6126f95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610994565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561275757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d6128968782615016565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f6128d78582615016565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556070805492851692909116919091179055612935614092565b801561299857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612a3f5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a0c90831515815260200190565b612ac8613e11565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612b7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b9e9190614dd8565b60695460685491925060009167ffffffffffffffff91821691680100000000000000008204811691612c039170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614e29565b612c0d9190614f9c565b612c179190614e29565b67ffffffffffffffff169050612c2d8183615112565b9250505090565b612c3c613e11565b6068805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b612c8b613e11565b606f612c978282615016565b5050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612d345760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606d612d408282615016565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a0c91906145c7565b60695460009067ffffffffffffffff868116911614612e1d5760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8467ffffffffffffffff168467ffffffffffffffff1611612ecc5760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a401610994565b60685467ffffffffffffffff6801000000000000000090910481169085161115612f845760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6000612f9286868686612134565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051612fc79190614ea6565b602060405180830381855afa158015612fe4573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906130079190614dd8565b6130119190614ef1565b979650505050505050565b60655460ff16156130bb5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461317e5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b8051806132195760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60685467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691613264918491700100000000000000000000000000000000900416615126565b11156132d85760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610994565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b848110156135f157600086828151811061333857613338614d53565b60200260200101519050838061334d90614db1565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff881660009081526066909352912054909150811461346e5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610994565b613479600188614e52565b8303613537574262093a8083604001516134939190614f9c565b67ffffffffffffffff1611156135375760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610994565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c0160405160208183030381529060405280519060200120935085806135d990614db1565b965050505080806135e990614df1565b91505061331c565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff161561373a5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b60705473ffffffffffffffffffffffffffffffffffffffff1633146137c75760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c0000006064820152608401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561383157600080fd5b505af1158015613845573d6000803e3d6000fd5b50505050610ac6614118565b60655460ff16156138f05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146139b35760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b60006139bd6125d3565b905081811115613a355760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610994565b61ea60835110613aad5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610994565b606554613ad790610100900473ffffffffffffffffffffffffffffffffffffffff16333084613f02565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613b47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b6b9190614dd8565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613ba583614db1565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505083805190602001208142604051602001613c1e93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526066909352912055323303613cee57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613d4b565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613d429392919061513e565b60405180910390a25b50505050565b613d59613e11565b73ffffffffffffffffffffffffffffffffffffffff8116613de25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610994565b613deb8161401b565b50565b613df6613e11565b67ffffffffffffffff166000908152606b6020526040902055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ac65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613ee257600080fd5b505af1158015613ef6573d6000803e3d6000fd5b50505050610ac66141e4565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052613d4b9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526142d9565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526140169084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401613f5c565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661410f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610994565b610ac63361401b565b60655460ff16156141915760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff16156142835760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b600061433b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166143cb9092919063ffffffff16565b80519091501561401657808060200190518101906143599190614f7f565b6140165760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610994565b60606143da84846000856143e4565b90505b9392505050565b60608247101561445c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610994565b73ffffffffffffffffffffffffffffffffffffffff85163b6144c05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610994565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516144e99190614ea6565b60006040518083038185875af1925050503d8060008114614526576040519150601f19603f3d011682016040523d82523d6000602084013e61452b565b606091505b5091509150613011828286606083156145455750816143dd565b8251156145555782518084602001fd5b8160405162461bcd60e51b815260040161099491906145c7565b60005b8381101561458a578181015183820152602001614572565b83811115613d4b5750506000910152565b600081518084526145b381602086016020860161456f565b601f01601f19169290920160200192915050565b6020815260006143dd602083018461459b565b803567ffffffffffffffff811681146145f257600080fd5b919050565b6000806040838503121561460a57600080fd5b614613836145da565b946020939093013593505050565b73ffffffffffffffffffffffffffffffffffffffff81168114613deb57600080fd5b80356145f281614621565b60006020828403121561466057600080fd5b81356143dd81614621565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff811182821017156146bd576146bd61466b565b60405290565b6040516060810167ffffffffffffffff811182821017156146bd576146bd61466b565b604051601f8201601f1916810167ffffffffffffffff8111828210171561470f5761470f61466b565b604052919050565b600067ffffffffffffffff8211156147315761473161466b565b5060051b60200190565b600082601f83011261474c57600080fd5b813567ffffffffffffffff8111156147665761476661466b565b6147796020601f19601f840116016146e6565b81815284602083860101111561478e57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208083850312156147be57600080fd5b823567ffffffffffffffff808211156147d657600080fd5b818501915085601f8301126147ea57600080fd5b81356147fd6147f882614717565b6146e6565b81815260059190911b8301840190848101908883111561481c57600080fd5b8585015b838110156148b5578035858111156148385760008081fd5b86016080818c03601f19018113156148505760008081fd5b61485861469a565b898301358881111561486a5760008081fd5b6148788e8c8387010161473b565b8252506040808401358b83015260606148928186016145da565b828401526148a18486016145da565b908301525085525050918601918601614820565b5098975050505050505050565b6000602082840312156148d457600080fd5b6143dd826145da565b80604081018310156148ee57600080fd5b92915050565b6000806000806000806000610180888a03121561491057600080fd5b614919886145da565b9650614927602089016145da565b955060408801359450606088013593506149448960808a016148dd565b925061014088018981111561495857600080fd5b60c0890192506149688a826148dd565b91505092959891949750929550565b600080600080600060a0868803121561498f57600080fd5b85359450602086013567ffffffffffffffff8111156149ad57600080fd5b6149b98882890161473b565b945050604086013592506149cf606087016145da565b915060808601356149df81614621565b809150509295509295909350565b60008060008060808587031215614a0357600080fd5b614a0c856145da565b9350614a1a602086016145da565b93969395505050506040820135916060013590565b8015158114613deb57600080fd5b80356145f281614a2f565b60008060008060008060008060008060006101608c8e031215614a6a57600080fd5b614a738c614643565b9a50614a8160208d01614643565b9950614a8f60408d01614643565b985060608c01359750614aa460808d01614643565b9650614ab260a08d01614a3d565b955067ffffffffffffffff8060c08e01351115614ace57600080fd5b614ade8e60c08f01358f0161473b565b9550614aec60e08e016145da565b9450806101008e01351115614b0057600080fd5b50614b128d6101008e01358e0161473b565b9250614b216101208d01614643565b9150614b306101408d01614643565b90509295989b509295989b9093969950565b600060208284031215614b5457600080fd5b81356143dd81614a2f565b600060208284031215614b7157600080fd5b813567ffffffffffffffff811115614b8857600080fd5b614b948482850161473b565b949350505050565b60006020808385031215614baf57600080fd5b823567ffffffffffffffff80821115614bc757600080fd5b818501915085601f830112614bdb57600080fd5b8135614be96147f882614717565b81815260059190911b83018401908481019088831115614c0857600080fd5b8585015b838110156148b557803585811115614c245760008081fd5b86016060818c03601f1901811315614c3c5760008081fd5b614c446146c3565b8983013588811115614c565760008081fd5b614c648e8c8387010161473b565b8252506040808401358b830152614c7c8385016145da565b9082015285525050918601918601614c0c565b60008060408385031215614ca257600080fd5b823567ffffffffffffffff811115614cb957600080fd5b614cc58582860161473b565b95602094909401359450505050565b60008060408385031215614ce757600080fd5b82359150614cf7602084016145da565b90509250929050565b600181811c90821680614d1457607f821691505b602082108103614d4d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614dce57614dce614d82565b6001019392505050565b600060208284031215614dea57600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e2257614e22614d82565b5060010190565b600067ffffffffffffffff83811690831681811015614e4a57614e4a614d82565b039392505050565b600082821015614e6457614e64614d82565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ea157614ea1614d82565b500290565b60008251614eb881846020870161456f565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614f0057614f00614ec2565b500690565b61012081016040808784376000838201818152879190815b6002811015614f3d57848483379084018281529284019290600101614f1d565b5050828760c0870137610100850181815286935091505b6001811015614f73578251825260209283019290910190600101614f54565b50505095945050505050565b600060208284031215614f9157600080fd5b81516143dd81614a2f565b600067ffffffffffffffff808316818516808303821115614fbf57614fbf614d82565b01949350505050565b601f82111561401657600081815260208120601f850160051c81016020861015614fef5750805b601f850160051c820191505b8181101561500e57828155600101614ffb565b505050505050565b815167ffffffffffffffff8111156150305761503061466b565b6150448161503e8454614d00565b84614fc8565b602080601f83116001811461509757600084156150615750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561500e565b600085815260208120601f198616915b828110156150c6578886015182559484019460019091019084016150a7565b508582101561510257878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008261512157615121614ec2565b500490565b6000821982111561513957615139614d82565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff83166020820152606060408201526000615173606083018461459b565b9594505050505056fea26469706673582212201002a0be18bc33019714770ac596cf0268b1a00cfca1b5d696d7dc00e4a8255464736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/Verifier.json b/compiled-contracts/Verifier.json index 7d7af5122..9ac689d46 100644 --- a/compiled-contracts/Verifier.json +++ b/compiled-contracts/Verifier.json @@ -38,8 +38,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50610f6a806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c806343753b4d14610030575b600080fd5b61012c600480360361012081101561004757600080fd5b6040805180820182529183019291818301918390600290839083908082843760009201829052506040805180820190915293969594608081019493509150600290835b828210156100c8576040805180820182529080840286019060029083908390808284376000920191909152505050815260019091019060200161008a565b5050604080518082018252939695948181019493509150600290839083908082843760009201919091525050604080516020818101909252929594938181019392509060019083908390808284376000920191909152509194506101409350505050565b604080519115158252519081900360200190f35b600061014a610e09565b6040805180820182528751815260208089015181830152908352815160808101835287515181840190815288518301516060808401919091529082528351808501855289840180515182525184015181850152828401528483019190915282518084018452875181528783015181840152848401528251600180825281850190945290929091828101908036833701905050905060005b600181101561021a578481600181106101f657fe5b602002015182828151811061020757fe5b60209081029190910101526001016101e1565b506102258183610243565b6102345760019250505061023b565b6000925050505b949350505050565b60007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161026e610e3b565b61027661045a565b90508060800151518551600101146102ef57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f76657269666965722d6261642d696e7075740000000000000000000000000000604482015290519081900360640190fd5b6102f7610e82565b50604080518082019091526000808252602082018190525b86518110156103e3578387828151811061032557fe5b60200260200101511061039957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f76657269666965722d6774652d736e61726b2d7363616c61722d6669656c6400604482015290519081900360640190fd5b6103d9826103d4856080015184600101815181106103b357fe5b60200260200101518a85815181106103c757fe5b60200260200101516107db565b610895565b915060010161030f565b506104068183608001516000815181106103f957fe5b6020026020010151610895565b905061043c610418866000015161094b565b8660200151846000015185602001518587604001518b6040015189606001516109d7565b61044c5760019350505050610454565b600093505050505b92915050565b610462610e3b565b6040805180820182527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e281527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d19266020808301919091529083528151608080820184527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c8285019081527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab606080850191909152908352845180860186527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a781527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8818601528385015285840192909252835180820185527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28186019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed828501528152845180860186527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa818601528185015285850152835190810184527f149cc67450cc0b57517bf2c3e5020ba1cdf35a2900fe957806127df2c7cd61da8185019081527f0e53069683fe7b6c4ee4636794d4aa4af8e1627ed2493cd7bf4b0b085879ae54828401528152835180850185527f14845dafef22a7e921846536baebdbadb8af4dacecdce74479eb89a799f35d7481527f242e0edb3f3eebaad1bf4c139fb67307b30089f886ba9268ba3d2d7f5d42c514818501528184015281850152825160028082529181019093529082015b6106e3610e82565b8152602001906001900390816106db57505060808201908152604080518082019091527f0a62552ead70cc720c64330cb12af8ab556068a90018a1746fa06b97070d143981527f11ab94b291e96ebca8cf24c151a4a27e1836a962e31b59ec61f541eabb63ef9160208201529051805160009061075c57fe5b602002602001018190525060405180604001604052807f15e1c3522e6b80779f853a2f3adbf49bddca621c61c06ea8455188f14b8d2ebe81526020017f1617cd9b0971e93431a417a5894fb155881781803e60c7d740d9915d97c797a981525081608001516001815181106107cd57fe5b602002602001018190525090565b6107e3610e82565b6107eb610e9c565b835181526020808501519082015260408101839052600060608360808460076107d05a03fa905080801561081e57610820565bfe5b508061088d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f70616972696e672d6d756c2d6661696c65640000000000000000000000000000604482015290519081900360640190fd5b505092915050565b61089d610e82565b6108a5610eba565b8351815260208085015181830152835160408301528301516060808301919091526000908360c08460066107d05a03fa905080801561081e57508061088d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f70616972696e672d6164642d6661696c65640000000000000000000000000000604482015290519081900360640190fd5b610953610e82565b81517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd479015801561098657506020830151155b156109a657505060408051808201909152600080825260208201526109d2565b604051806040016040528084600001518152602001828560200151816109c857fe5b0683038152509150505b919050565b60408051600480825260a0820190925260009160609190816020015b6109fb610e82565b8152602001906001900390816109f357505060408051600480825260a0820190925291925060609190602082015b610a31610ed8565b815260200190600190039081610a295790505090508a82600081518110610a5457fe5b60200260200101819052508882600181518110610a6d57fe5b60200260200101819052508682600281518110610a8657fe5b60200260200101819052508482600381518110610a9f57fe5b60200260200101819052508981600081518110610ab857fe5b60200260200101819052508781600181518110610ad157fe5b60200260200101819052508581600281518110610aea57fe5b60200260200101819052508381600381518110610b0357fe5b6020026020010181905250610b188282610b27565b9b9a5050505050505050505050565b60008151835114610b9957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f70616972696e672d6c656e677468732d6661696c656400000000000000000000604482015290519081900360640190fd5b82516006810260608167ffffffffffffffff81118015610bb857600080fd5b50604051908082528060200260200182016040528015610be2578160200160208202803683370190505b50905060005b83811015610d6757868181518110610bfc57fe5b602002602001015160000151828260060260000181518110610c1a57fe5b602002602001018181525050868181518110610c3257fe5b602002602001015160200151828260060260010181518110610c5057fe5b602002602001018181525050858181518110610c6857fe5b602090810291909101015151518251839060026006850201908110610c8957fe5b602002602001018181525050858181518110610ca157fe5b60209081029190910101515160016020020151828260060260030181518110610cc657fe5b602002602001018181525050858181518110610cde57fe5b602002602001015160200151600060028110610cf657fe5b6020020151828260060260040181518110610d0d57fe5b602002602001018181525050858181518110610d2557fe5b602002602001015160200151600160028110610d3d57fe5b6020020151828260060260050181518110610d5457fe5b6020908102919091010152600101610be8565b50610d70610ef8565b6000602082602086026020860160086107d05a03fa905080801561081e575080610dfb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f70616972696e672d6f70636f64652d6661696c65640000000000000000000000604482015290519081900360640190fd5b505115159695505050505050565b6040518060600160405280610e1c610e82565b8152602001610e29610ed8565b8152602001610e36610e82565b905290565b6040518060a00160405280610e4e610e82565b8152602001610e5b610ed8565b8152602001610e68610ed8565b8152602001610e75610ed8565b8152602001606081525090565b604051806040016040528060008152602001600081525090565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280610eeb610f16565b8152602001610e36610f16565b60405180602001604052806001906020820280368337509192915050565b6040518060400160405280600290602082028036833750919291505056fea26469706673582212202241f10cd6498ef81db98523a90ed16614b709c8ed58ddd16ad45f4f3bed5a1f64736f6c634300060b0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c806343753b4d14610030575b600080fd5b61012c600480360361012081101561004757600080fd5b6040805180820182529183019291818301918390600290839083908082843760009201829052506040805180820190915293969594608081019493509150600290835b828210156100c8576040805180820182529080840286019060029083908390808284376000920191909152505050815260019091019060200161008a565b5050604080518082018252939695948181019493509150600290839083908082843760009201919091525050604080516020818101909252929594938181019392509060019083908390808284376000920191909152509194506101409350505050565b604080519115158252519081900360200190f35b600061014a610e09565b6040805180820182528751815260208089015181830152908352815160808101835287515181840190815288518301516060808401919091529082528351808501855289840180515182525184015181850152828401528483019190915282518084018452875181528783015181840152848401528251600180825281850190945290929091828101908036833701905050905060005b600181101561021a578481600181106101f657fe5b602002015182828151811061020757fe5b60209081029190910101526001016101e1565b506102258183610243565b6102345760019250505061023b565b6000925050505b949350505050565b60007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161026e610e3b565b61027661045a565b90508060800151518551600101146102ef57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f76657269666965722d6261642d696e7075740000000000000000000000000000604482015290519081900360640190fd5b6102f7610e82565b50604080518082019091526000808252602082018190525b86518110156103e3578387828151811061032557fe5b60200260200101511061039957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f76657269666965722d6774652d736e61726b2d7363616c61722d6669656c6400604482015290519081900360640190fd5b6103d9826103d4856080015184600101815181106103b357fe5b60200260200101518a85815181106103c757fe5b60200260200101516107db565b610895565b915060010161030f565b506104068183608001516000815181106103f957fe5b6020026020010151610895565b905061043c610418866000015161094b565b8660200151846000015185602001518587604001518b6040015189606001516109d7565b61044c5760019350505050610454565b600093505050505b92915050565b610462610e3b565b6040805180820182527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e281527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d19266020808301919091529083528151608080820184527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c8285019081527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab606080850191909152908352845180860186527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a781527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8818601528385015285840192909252835180820185527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28186019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed828501528152845180860186527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa818601528185015285850152835190810184527f149cc67450cc0b57517bf2c3e5020ba1cdf35a2900fe957806127df2c7cd61da8185019081527f0e53069683fe7b6c4ee4636794d4aa4af8e1627ed2493cd7bf4b0b085879ae54828401528152835180850185527f14845dafef22a7e921846536baebdbadb8af4dacecdce74479eb89a799f35d7481527f242e0edb3f3eebaad1bf4c139fb67307b30089f886ba9268ba3d2d7f5d42c514818501528184015281850152825160028082529181019093529082015b6106e3610e82565b8152602001906001900390816106db57505060808201908152604080518082019091527f0a62552ead70cc720c64330cb12af8ab556068a90018a1746fa06b97070d143981527f11ab94b291e96ebca8cf24c151a4a27e1836a962e31b59ec61f541eabb63ef9160208201529051805160009061075c57fe5b602002602001018190525060405180604001604052807f15e1c3522e6b80779f853a2f3adbf49bddca621c61c06ea8455188f14b8d2ebe81526020017f1617cd9b0971e93431a417a5894fb155881781803e60c7d740d9915d97c797a981525081608001516001815181106107cd57fe5b602002602001018190525090565b6107e3610e82565b6107eb610e9c565b835181526020808501519082015260408101839052600060608360808460076107d05a03fa905080801561081e57610820565bfe5b508061088d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f70616972696e672d6d756c2d6661696c65640000000000000000000000000000604482015290519081900360640190fd5b505092915050565b61089d610e82565b6108a5610eba565b8351815260208085015181830152835160408301528301516060808301919091526000908360c08460066107d05a03fa905080801561081e57508061088d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f70616972696e672d6164642d6661696c65640000000000000000000000000000604482015290519081900360640190fd5b610953610e82565b81517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd479015801561098657506020830151155b156109a657505060408051808201909152600080825260208201526109d2565b604051806040016040528084600001518152602001828560200151816109c857fe5b0683038152509150505b919050565b60408051600480825260a0820190925260009160609190816020015b6109fb610e82565b8152602001906001900390816109f357505060408051600480825260a0820190925291925060609190602082015b610a31610ed8565b815260200190600190039081610a295790505090508a82600081518110610a5457fe5b60200260200101819052508882600181518110610a6d57fe5b60200260200101819052508682600281518110610a8657fe5b60200260200101819052508482600381518110610a9f57fe5b60200260200101819052508981600081518110610ab857fe5b60200260200101819052508781600181518110610ad157fe5b60200260200101819052508581600281518110610aea57fe5b60200260200101819052508381600381518110610b0357fe5b6020026020010181905250610b188282610b27565b9b9a5050505050505050505050565b60008151835114610b9957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f70616972696e672d6c656e677468732d6661696c656400000000000000000000604482015290519081900360640190fd5b82516006810260608167ffffffffffffffff81118015610bb857600080fd5b50604051908082528060200260200182016040528015610be2578160200160208202803683370190505b50905060005b83811015610d6757868181518110610bfc57fe5b602002602001015160000151828260060260000181518110610c1a57fe5b602002602001018181525050868181518110610c3257fe5b602002602001015160200151828260060260010181518110610c5057fe5b602002602001018181525050858181518110610c6857fe5b602090810291909101015151518251839060026006850201908110610c8957fe5b602002602001018181525050858181518110610ca157fe5b60209081029190910101515160016020020151828260060260030181518110610cc657fe5b602002602001018181525050858181518110610cde57fe5b602002602001015160200151600060028110610cf657fe5b6020020151828260060260040181518110610d0d57fe5b602002602001018181525050858181518110610d2557fe5b602002602001015160200151600160028110610d3d57fe5b6020020151828260060260050181518110610d5457fe5b6020908102919091010152600101610be8565b50610d70610ef8565b6000602082602086026020860160086107d05a03fa905080801561081e575080610dfb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f70616972696e672d6f70636f64652d6661696c65640000000000000000000000604482015290519081900360640190fd5b505115159695505050505050565b6040518060600160405280610e1c610e82565b8152602001610e29610ed8565b8152602001610e36610e82565b905290565b6040518060a00160405280610e4e610e82565b8152602001610e5b610ed8565b8152602001610e68610ed8565b8152602001610e75610ed8565b8152602001606081525090565b604051806040016040528060008152602001600081525090565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280610eeb610f16565b8152602001610e36610f16565b60405180602001604052806001906020820280368337509192915050565b6040518060400160405280600290602082028036833750919291505056fea26469706673582212202241f10cd6498ef81db98523a90ed16614b709c8ed58ddd16ad45f4f3bed5a1f64736f6c634300060b0033", + "bytecode": "0x608060405234801561001057600080fd5b50610f6a806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c806343753b4d14610030575b600080fd5b61012c600480360361012081101561004757600080fd5b6040805180820182529183019291818301918390600290839083908082843760009201829052506040805180820190915293969594608081019493509150600290835b828210156100c8576040805180820182529080840286019060029083908390808284376000920191909152505050815260019091019060200161008a565b5050604080518082018252939695948181019493509150600290839083908082843760009201919091525050604080516020818101909252929594938181019392509060019083908390808284376000920191909152509194506101409350505050565b604080519115158252519081900360200190f35b600061014a610e09565b6040805180820182528751815260208089015181830152908352815160808101835287515181840190815288518301516060808401919091529082528351808501855289840180515182525184015181850152828401528483019190915282518084018452875181528783015181840152848401528251600180825281850190945290929091828101908036833701905050905060005b600181101561021a578481600181106101f657fe5b602002015182828151811061020757fe5b60209081029190910101526001016101e1565b506102258183610243565b6102345760019250505061023b565b6000925050505b949350505050565b60007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161026e610e3b565b61027661045a565b90508060800151518551600101146102ef57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f76657269666965722d6261642d696e7075740000000000000000000000000000604482015290519081900360640190fd5b6102f7610e82565b50604080518082019091526000808252602082018190525b86518110156103e3578387828151811061032557fe5b60200260200101511061039957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f76657269666965722d6774652d736e61726b2d7363616c61722d6669656c6400604482015290519081900360640190fd5b6103d9826103d4856080015184600101815181106103b357fe5b60200260200101518a85815181106103c757fe5b60200260200101516107db565b610895565b915060010161030f565b506104068183608001516000815181106103f957fe5b6020026020010151610895565b905061043c610418866000015161094b565b8660200151846000015185602001518587604001518b6040015189606001516109d7565b61044c5760019350505050610454565b600093505050505b92915050565b610462610e3b565b6040805180820182527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e281527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d19266020808301919091529083528151608080820184527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c8285019081527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab606080850191909152908352845180860186527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a781527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8818601528385015285840192909252835180820185527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28186019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed828501528152845180860186527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa818601528185015285850152835190810184527f0b6c455a7409441597236351cc9b3820c78b453bcf684be41b138ee35e2999e78185019081527f25eaa70ebbee7f72a4ff6bd186a2bd03d2aa94a38e3f177169edd16e58f96cb1828401528152835180850185527f0d2859dcef884436015a427d6d371c5c935d13ed24eef9f9c4ddc310c66b74bf81527f1c956f84580110eae3c13cd60f2dec6a2ca632f596101bf7db477543daa3db1c818501528184015281850152825160028082529181019093529082015b6106e3610e82565b8152602001906001900390816106db57505060808201908152604080518082019091527f1b14ccd8ecada725463ff917550a6ff911c78396ed48e2f5bd2e1b6b5015e43181527f26a9b3dd6cfd45d98f7fc6fca79577ee07a2d8899d87b2efd5cb63d40b90ec2260208201529051805160009061075c57fe5b602002602001018190525060405180604001604052807f22c24f7779cd44fa8bad17df8e601b7b2d948320d25830cd4b2097ae59a0db5681526020017f1e28066a7dc90ebe7f16a9db9e5e50d480ac009ee7deb7fb076903d4571c4d5f81525081608001516001815181106107cd57fe5b602002602001018190525090565b6107e3610e82565b6107eb610e9c565b835181526020808501519082015260408101839052600060608360808460076107d05a03fa905080801561081e57610820565bfe5b508061088d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f70616972696e672d6d756c2d6661696c65640000000000000000000000000000604482015290519081900360640190fd5b505092915050565b61089d610e82565b6108a5610eba565b8351815260208085015181830152835160408301528301516060808301919091526000908360c08460066107d05a03fa905080801561081e57508061088d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f70616972696e672d6164642d6661696c65640000000000000000000000000000604482015290519081900360640190fd5b610953610e82565b81517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd479015801561098657506020830151155b156109a657505060408051808201909152600080825260208201526109d2565b604051806040016040528084600001518152602001828560200151816109c857fe5b0683038152509150505b919050565b60408051600480825260a0820190925260009160609190816020015b6109fb610e82565b8152602001906001900390816109f357505060408051600480825260a0820190925291925060609190602082015b610a31610ed8565b815260200190600190039081610a295790505090508a82600081518110610a5457fe5b60200260200101819052508882600181518110610a6d57fe5b60200260200101819052508682600281518110610a8657fe5b60200260200101819052508482600381518110610a9f57fe5b60200260200101819052508981600081518110610ab857fe5b60200260200101819052508781600181518110610ad157fe5b60200260200101819052508581600281518110610aea57fe5b60200260200101819052508381600381518110610b0357fe5b6020026020010181905250610b188282610b27565b9b9a5050505050505050505050565b60008151835114610b9957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f70616972696e672d6c656e677468732d6661696c656400000000000000000000604482015290519081900360640190fd5b82516006810260608167ffffffffffffffff81118015610bb857600080fd5b50604051908082528060200260200182016040528015610be2578160200160208202803683370190505b50905060005b83811015610d6757868181518110610bfc57fe5b602002602001015160000151828260060260000181518110610c1a57fe5b602002602001018181525050868181518110610c3257fe5b602002602001015160200151828260060260010181518110610c5057fe5b602002602001018181525050858181518110610c6857fe5b602090810291909101015151518251839060026006850201908110610c8957fe5b602002602001018181525050858181518110610ca157fe5b60209081029190910101515160016020020151828260060260030181518110610cc657fe5b602002602001018181525050858181518110610cde57fe5b602002602001015160200151600060028110610cf657fe5b6020020151828260060260040181518110610d0d57fe5b602002602001018181525050858181518110610d2557fe5b602002602001015160200151600160028110610d3d57fe5b6020020151828260060260050181518110610d5457fe5b6020908102919091010152600101610be8565b50610d70610ef8565b6000602082602086026020860160086107d05a03fa905080801561081e575080610dfb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f70616972696e672d6f70636f64652d6661696c65640000000000000000000000604482015290519081900360640190fd5b505115159695505050505050565b6040518060600160405280610e1c610e82565b8152602001610e29610ed8565b8152602001610e36610e82565b905290565b6040518060a00160405280610e4e610e82565b8152602001610e5b610ed8565b8152602001610e68610ed8565b8152602001610e75610ed8565b8152602001606081525090565b604051806040016040528060008152602001600081525090565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280610eeb610f16565b8152602001610e36610f16565b60405180602001604052806001906020820280368337509192915050565b6040518060400160405280600290602082028036833750919291505056fea26469706673582212204487892e304acb994c5d5b9cb868fea63f7402b83c7257de032d2b26011d688464736f6c634300060b0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c806343753b4d14610030575b600080fd5b61012c600480360361012081101561004757600080fd5b6040805180820182529183019291818301918390600290839083908082843760009201829052506040805180820190915293969594608081019493509150600290835b828210156100c8576040805180820182529080840286019060029083908390808284376000920191909152505050815260019091019060200161008a565b5050604080518082018252939695948181019493509150600290839083908082843760009201919091525050604080516020818101909252929594938181019392509060019083908390808284376000920191909152509194506101409350505050565b604080519115158252519081900360200190f35b600061014a610e09565b6040805180820182528751815260208089015181830152908352815160808101835287515181840190815288518301516060808401919091529082528351808501855289840180515182525184015181850152828401528483019190915282518084018452875181528783015181840152848401528251600180825281850190945290929091828101908036833701905050905060005b600181101561021a578481600181106101f657fe5b602002015182828151811061020757fe5b60209081029190910101526001016101e1565b506102258183610243565b6102345760019250505061023b565b6000925050505b949350505050565b60007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161026e610e3b565b61027661045a565b90508060800151518551600101146102ef57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f76657269666965722d6261642d696e7075740000000000000000000000000000604482015290519081900360640190fd5b6102f7610e82565b50604080518082019091526000808252602082018190525b86518110156103e3578387828151811061032557fe5b60200260200101511061039957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f76657269666965722d6774652d736e61726b2d7363616c61722d6669656c6400604482015290519081900360640190fd5b6103d9826103d4856080015184600101815181106103b357fe5b60200260200101518a85815181106103c757fe5b60200260200101516107db565b610895565b915060010161030f565b506104068183608001516000815181106103f957fe5b6020026020010151610895565b905061043c610418866000015161094b565b8660200151846000015185602001518587604001518b6040015189606001516109d7565b61044c5760019350505050610454565b600093505050505b92915050565b610462610e3b565b6040805180820182527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e281527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d19266020808301919091529083528151608080820184527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c8285019081527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab606080850191909152908352845180860186527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a781527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8818601528385015285840192909252835180820185527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28186019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed828501528152845180860186527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa818601528185015285850152835190810184527f0b6c455a7409441597236351cc9b3820c78b453bcf684be41b138ee35e2999e78185019081527f25eaa70ebbee7f72a4ff6bd186a2bd03d2aa94a38e3f177169edd16e58f96cb1828401528152835180850185527f0d2859dcef884436015a427d6d371c5c935d13ed24eef9f9c4ddc310c66b74bf81527f1c956f84580110eae3c13cd60f2dec6a2ca632f596101bf7db477543daa3db1c818501528184015281850152825160028082529181019093529082015b6106e3610e82565b8152602001906001900390816106db57505060808201908152604080518082019091527f1b14ccd8ecada725463ff917550a6ff911c78396ed48e2f5bd2e1b6b5015e43181527f26a9b3dd6cfd45d98f7fc6fca79577ee07a2d8899d87b2efd5cb63d40b90ec2260208201529051805160009061075c57fe5b602002602001018190525060405180604001604052807f22c24f7779cd44fa8bad17df8e601b7b2d948320d25830cd4b2097ae59a0db5681526020017f1e28066a7dc90ebe7f16a9db9e5e50d480ac009ee7deb7fb076903d4571c4d5f81525081608001516001815181106107cd57fe5b602002602001018190525090565b6107e3610e82565b6107eb610e9c565b835181526020808501519082015260408101839052600060608360808460076107d05a03fa905080801561081e57610820565bfe5b508061088d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f70616972696e672d6d756c2d6661696c65640000000000000000000000000000604482015290519081900360640190fd5b505092915050565b61089d610e82565b6108a5610eba565b8351815260208085015181830152835160408301528301516060808301919091526000908360c08460066107d05a03fa905080801561081e57508061088d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f70616972696e672d6164642d6661696c65640000000000000000000000000000604482015290519081900360640190fd5b610953610e82565b81517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd479015801561098657506020830151155b156109a657505060408051808201909152600080825260208201526109d2565b604051806040016040528084600001518152602001828560200151816109c857fe5b0683038152509150505b919050565b60408051600480825260a0820190925260009160609190816020015b6109fb610e82565b8152602001906001900390816109f357505060408051600480825260a0820190925291925060609190602082015b610a31610ed8565b815260200190600190039081610a295790505090508a82600081518110610a5457fe5b60200260200101819052508882600181518110610a6d57fe5b60200260200101819052508682600281518110610a8657fe5b60200260200101819052508482600381518110610a9f57fe5b60200260200101819052508981600081518110610ab857fe5b60200260200101819052508781600181518110610ad157fe5b60200260200101819052508581600281518110610aea57fe5b60200260200101819052508381600381518110610b0357fe5b6020026020010181905250610b188282610b27565b9b9a5050505050505050505050565b60008151835114610b9957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f70616972696e672d6c656e677468732d6661696c656400000000000000000000604482015290519081900360640190fd5b82516006810260608167ffffffffffffffff81118015610bb857600080fd5b50604051908082528060200260200182016040528015610be2578160200160208202803683370190505b50905060005b83811015610d6757868181518110610bfc57fe5b602002602001015160000151828260060260000181518110610c1a57fe5b602002602001018181525050868181518110610c3257fe5b602002602001015160200151828260060260010181518110610c5057fe5b602002602001018181525050858181518110610c6857fe5b602090810291909101015151518251839060026006850201908110610c8957fe5b602002602001018181525050858181518110610ca157fe5b60209081029190910101515160016020020151828260060260030181518110610cc657fe5b602002602001018181525050858181518110610cde57fe5b602002602001015160200151600060028110610cf657fe5b6020020151828260060260040181518110610d0d57fe5b602002602001018181525050858181518110610d2557fe5b602002602001015160200151600160028110610d3d57fe5b6020020151828260060260050181518110610d5457fe5b6020908102919091010152600101610be8565b50610d70610ef8565b6000602082602086026020860160086107d05a03fa905080801561081e575080610dfb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f70616972696e672d6f70636f64652d6661696c65640000000000000000000000604482015290519081900360640190fd5b505115159695505050505050565b6040518060600160405280610e1c610e82565b8152602001610e29610ed8565b8152602001610e36610e82565b905290565b6040518060a00160405280610e4e610e82565b8152602001610e5b610ed8565b8152602001610e68610ed8565b8152602001610e75610ed8565b8152602001606081525090565b604051806040016040528060008152602001600081525090565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280610eeb610f16565b8152602001610e36610f16565b60405180602001604052806001906020820280368337509192915050565b6040518060400160405280600290602082028036833750919291505056fea26469706673582212204487892e304acb994c5d5b9cb868fea63f7402b83c7257de032d2b26011d688464736f6c634300060b0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/Bridge.sol b/contracts/Bridge.sol index 5826c95dc..386f98105 100644 --- a/contracts/Bridge.sol +++ b/contracts/Bridge.sol @@ -10,13 +10,18 @@ import "./interfaces/IBridgeMessageReceiver.sol"; import "./interfaces/IBridge.sol"; import "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol"; import "./lib/EmergencyManager.sol"; -import "hardhat/console.sol"; +import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; /** * Bridge that will be deployed on both networks Ethereum and Polygon zkEVM * Contract responsible to manage the token interactions with other networks */ -contract Bridge is DepositContract, EmergencyManager, IBridge { +contract Bridge is + DepositContract, + EmergencyManager, + IBridge, + OwnableUpgradeable +{ using SafeERC20Upgradeable for IERC20Upgradeable; // Wrapped Token information struct @@ -58,6 +63,9 @@ contract Bridge is DepositContract, EmergencyManager, IBridge { // Proof of Efficiency address address public poeAddress; + // Claim timeout period + uint256 public claimTimeout; + /** * @param _networkID networkID * @param _globalExitRootManager global exit root manager address @@ -65,11 +73,16 @@ contract Bridge is DepositContract, EmergencyManager, IBridge { function initialize( uint32 _networkID, IGlobalExitRootManager _globalExitRootManager, - address _poeAddress + address _poeAddress, + uint256 _claimTimeout ) public virtual initializer { networkID = _networkID; globalExitRootManager = _globalExitRootManager; poeAddress = _poeAddress; + claimTimeout = _claimTimeout; + + // Initialize OZ contracts + __Ownable_init_unchained(); } modifier onlyProofOfEfficiency() { @@ -114,6 +127,11 @@ contract Bridge is DepositContract, EmergencyManager, IBridge { address wrappedTokenAddress ); + /** + * @dev Emitted when a a new wrapped token is created + */ + event SetClaimTimeout(uint256 newClaimTimeout); + /** * @notice Deposit add a new leaf to the merkle tree * @param token Token address, 0 address is reserved for ether @@ -326,16 +344,13 @@ contract Bridge is DepositContract, EmergencyManager, IBridge { uint8 decimals ) = abi.decode(metadata, (string, string, uint8)); - // Create a new wrapped erc20 + // Create a new wrapped erc20 using create2 TokenWrapped newWrappedToken = (new TokenWrapped){ salt: tokenInfoHash }(name, symbol, decimals); + // Mint tokens for the destination address newWrappedToken.mint(destinationAddress, amount); - console.log(address(newWrappedToken)); - console.log(name); - console.log(symbol); - console.log(decimals); // Create mappings tokenInfoToWrappedToken[tokenInfoHash] = address( @@ -460,7 +475,7 @@ contract Bridge is DepositContract, EmergencyManager, IBridge { ) ); - // csat last 20 bytes of hash to address + // last 20 bytes of hash to address return address(uint160(uint256(hashCreate2))); } @@ -495,6 +510,15 @@ contract Bridge is DepositContract, EmergencyManager, IBridge { _deactivateEmergencyState(); } + /** + * @notice Function to deactivate the emergency state + " Only can be called by the proof of efficiency + */ + function setClaimTimeout(uint256 newClaimTimeout) external onlyOwner { + claimTimeout = newClaimTimeout; + emit SetClaimTimeout(newClaimTimeout); + } + function _verifyLeaf( bytes32[] memory smtProof, uint32 index, @@ -514,13 +538,16 @@ contract Bridge is DepositContract, EmergencyManager, IBridge { "Bridge::_verifyLeaf: ALREADY_CLAIMED" ); - // Check that the merkle proof belongs to some global exit root - // TODO this should be a SMTproof - require( - globalExitRootManager.globalExitRootMap( + // Check timestamp where the global exit root was set + uint256 timestampGlobalExitRoot = globalExitRootManager + .globalExitRootMap( keccak256(abi.encodePacked(mainnetExitRoot, rollupExitRoot)) - ) != 0, - "Bridge::_verifyLeaf: GLOBAL_EXIT_ROOT_DOES_NOT_MATCH" + ); + + require( + timestampGlobalExitRoot != 0 && + (block.timestamp - timestampGlobalExitRoot) >= claimTimeout, + "Bridge::_verifyLeaf: GLOBAL_EXIT_ROOT_INVALID" ); // Destination network must be networkID diff --git a/contracts/ProofOfEfficiency.sol b/contracts/ProofOfEfficiency.sol index 16cd12347..71c8cbe6e 100644 --- a/contracts/ProofOfEfficiency.sol +++ b/contracts/ProofOfEfficiency.sol @@ -201,6 +201,8 @@ contract ProofOfEfficiency is * @param _trustedSequencerURL trusted sequencer URL * @param _chainID L2 chainID * @param _networkName L2 network name + * @param _bridgeAddress bridge address + * @param _securityCouncil security council */ function initialize( IGlobalExitRootManager _globalExitRootManager, @@ -212,7 +214,8 @@ contract ProofOfEfficiency is string memory _trustedSequencerURL, uint64 _chainID, string memory _networkName, - IBridge _bridgeAddress + IBridge _bridgeAddress, + address _securityCouncil ) public initializer { globalExitRootManager = _globalExitRootManager; matic = _matic; @@ -224,6 +227,7 @@ contract ProofOfEfficiency is chainID = _chainID; networkName = _networkName; bridgeAddress = _bridgeAddress; + securityCouncil = _securityCouncil; // Initialize OZ contracts __Ownable_init_unchained(); @@ -395,6 +399,11 @@ contract ProofOfEfficiency is "ProofOfEfficiency::verifyBatches: finalNewBatch must be bigger than lastVerifiedBatch" ); + require( + batchNumToStateRoot[initNumBatch] != bytes32(0), + "ProofOfEfficiency::verifyBatches: initNumBatch state root does not exist" + ); + bytes memory snarkHashBytes = getInputSnarkBytes( initNumBatch, finalNewBatch, @@ -644,8 +653,7 @@ contract ProofOfEfficiency is ); require( - initNumBatch == 0 || - batchNumToStateRoot[initNumBatch] != bytes32(0), + batchNumToStateRoot[initNumBatch] != bytes32(0), "ProofOfEfficiency::proofDifferentState: initNumBatch state root does not exist" ); diff --git a/contracts/mocks/BridgeMock.sol b/contracts/mocks/BridgeMock.sol index 958c874f6..4da69540b 100644 --- a/contracts/mocks/BridgeMock.sol +++ b/contracts/mocks/BridgeMock.sol @@ -1,13 +1,12 @@ // SPDX-License-Identifier: AGPL-3.0 pragma solidity 0.8.15; import "../Bridge.sol"; -import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; /** * Bridge that will be deployed on both networks Ethereum and Polygon zkEVM * Contract responsible to manage the token interactions with other networks */ -contract BridgeMock is Bridge, OwnableUpgradeable { +contract BridgeMock is Bridge { uint256 public maxEtherBridge; /** @@ -17,13 +16,14 @@ contract BridgeMock is Bridge, OwnableUpgradeable { function initialize( uint32 _networkID, IGlobalExitRootManager _globalExitRootManager, - address _poeAddress + address _poeAddress, + uint256 _claimTimeout ) public override initializer { networkID = _networkID; globalExitRootManager = _globalExitRootManager; poeAddress = _poeAddress; + claimTimeout = _claimTimeout; - __Ownable_init(); maxEtherBridge = 0.25 ether; } diff --git a/contracts/verifiers/Verifier.sol b/contracts/verifiers/Verifier.sol index ca13824b2..b3c680d40 100644 --- a/contracts/verifiers/Verifier.sol +++ b/contracts/verifiers/Verifier.sol @@ -258,24 +258,24 @@ contract Verifier { ); vk.delta2 = Pairing.G2Point( [ - 9323254795410155934317886258153980279081426610749196235000311998299411145178, - 6479073654913014233772394750621041835506255427082238002943424857315655396948 + 5166739476525161998279127555945377846817167507000096942371674429228912843239, + 17150170599609676531144701456233439733620504581071386406563768754073729854641 ], [ - 9280127389800887092328006043921887611974838461240735264622632515836426018164, - 16364640049315129232931905622442811407477599613809745929957309002580825916692 + 5951361126012424029872139543886489891562224748155298287734148781315143201983, + 12928789634808812184433255215537433503271573851948409990657171984828126714652 ] ); vk.IC = new Pairing.G1Point[](2); vk.IC[0] = Pairing.G1Point( - 4696867405043398552403617342815149295361060026389051711565585276031715841081, - 7992475546688774958783613881878924186908859575652356711382969076851702755217 + 12249197657572123050734566699158494796851312997080609819257215670345193088049, + 17487726782333876568924702133049450362476123519223034945965699111411971583010 ); vk.IC[1] = Pairing.G1Point( - 9897458465965570598905236047800806366352001136795638520287997492087260786366, - 9992939189109259730671274431440102542613311982204982073059522006827208775593 + 15721953641420343855042948053786530455240345418506082035858148079525611756374, + 13640103621568301241206789510953343876721931144273359140619349897407767530847 ); } diff --git a/docs/Bridge.md b/docs/Bridge.md index 08bb6630f..3f637b6c8 100644 --- a/docs/Bridge.md +++ b/docs/Bridge.md @@ -174,6 +174,16 @@ Function to deactivate the emergency state +### setClaimTimeout +```solidity + function setClaimTimeout( + ) external +``` +Function to deactivate the emergency state + " Only can be called by the proof of efficiency + + + ### _verifyLeaf ```solidity function _verifyLeaf( @@ -225,3 +235,11 @@ Emitted when a claim is done from another network Emitted when a a new wrapped token is created +### SetClaimTimeout +```solidity + event SetClaimTimeout( + ) +``` + +Emitted when a a new wrapped token is created + diff --git a/docs/ProofOfEfficiency.md b/docs/ProofOfEfficiency.md index e37c67bc2..3ccc59b48 100644 --- a/docs/ProofOfEfficiency.md +++ b/docs/ProofOfEfficiency.md @@ -18,7 +18,9 @@ To enter and exit of the L2 network will be used a Bridge smart contract that wi bool _forceBatchAllowed, string _trustedSequencerURL, uint64 _chainID, - string _networkName + string _networkName, + contract IBridge _bridgeAddress, + address _securityCouncil ) public ``` @@ -35,6 +37,8 @@ To enter and exit of the L2 network will be used a Bridge smart contract that wi |`_trustedSequencerURL` | string | trusted sequencer URL |`_chainID` | uint64 | L2 chainID |`_networkName` | string | L2 network name +|`_bridgeAddress` | contract IBridge | bridge address +|`_securityCouncil` | address | security council ### sequenceBatches ```solidity diff --git a/hardhat.config.js b/hardhat.config.js index 1e2346609..74ee8238a 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -113,7 +113,7 @@ module.exports = { gasReporter: { currency: "USD", coinmarketcap: process.env.COINMARKETCAP_KEY, - enabled: true, + enabled: process.env.REPORT_GAS ? true : false, }, etherscan: { apiKey: `${process.env.ETHERSCAN_API_KEY}` diff --git a/src/permit-helper.js b/src/permit-helper.js index 33328aef2..752010f7d 100644 --- a/src/permit-helper.js +++ b/src/permit-helper.js @@ -11,8 +11,7 @@ const { expect } = require('chai'); * @param {String} deadline - Deadline of the permit * @returns {Object} - Signature obejct, { v, r, s} */ -async function createPermitSignature(tokenContractInstance, wallet, spenderAddress, value, nonce, deadline) { - const chainId = (await tokenContractInstance.getChainId()); +async function createPermitSignature(tokenContractInstance, wallet, spenderAddress, value, nonce, deadline, chainId) { const name = await tokenContractInstance.name(); // The domain diff --git a/test/contracts/bridge.test.js b/test/contracts/bridge.test.js index 2df6e16d0..41b296a03 100644 --- a/test/contracts/bridge.test.js +++ b/test/contracts/bridge.test.js @@ -35,6 +35,7 @@ describe('Bridge Contract', () => { const MESSAGE_TYPE_ASSET = 1; const proofOfEfficiencyAddress = ethers.constants.AddressZero; + const claimTimeout = 0; beforeEach('Deploy contracts', async () => { // load signers @@ -50,7 +51,7 @@ describe('Bridge Contract', () => { await globalExitRootManager.initialize(rollup.address, bridgeContract.address); - await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, proofOfEfficiencyAddress); + await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, proofOfEfficiencyAddress, claimTimeout); // deploy token const maticTokenFactory = await ethers.getContractFactory('ERC20PermitMock'); @@ -66,6 +67,8 @@ describe('Bridge Contract', () => { it('should check the constructor parameters', async () => { expect(await bridgeContract.globalExitRootManager()).to.be.equal(globalExitRootManager.address); expect(await bridgeContract.networkID()).to.be.equal(networkIDMainnet); + expect(await bridgeContract.poeAddress()).to.be.equal(proofOfEfficiencyAddress); + expect(await bridgeContract.claimTimeout()).to.be.equal(claimTimeout); }); it('should bridge and verify merkle proof', async () => { @@ -321,6 +324,15 @@ describe('Bridge Contract', () => { const precalculateWrappedErc20 = await ethers.utils.getCreate2Address(bridgeContract.address, salt, hashInitCode); const newWrappedToken = tokenWrappedFactory.attach(precalculateWrappedErc20); + // Use precalculatedWrapperAddress and check if matches + expect(await bridgeContract.precalculatedWrapperAddress( + networkIDRollup, + tokenAddress, + tokenName, + tokenSymbol, + decimals, + )).to.be.equal(precalculateWrappedErc20); + await expect(bridgeContract.claimAsset( proof, index, @@ -658,7 +670,7 @@ describe('Bridge Contract', () => { metadata, )).to.be.revertedWith('Bridge::_verifyLeaf: DESTINATION_NETWORK_DOES_NOT_MATCH'); - // Check GLOBAL_EXIT_ROOT_DOES_NOT_MATCH assert + // Check GLOBAL_EXIT_ROOT_INVALID assert await expect(bridgeContract.claimAsset( proof, index, @@ -670,7 +682,7 @@ describe('Bridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('Bridge::_verifyLeaf: GLOBAL_EXIT_ROOT_DOES_NOT_MATCH'); + )).to.be.revertedWith('Bridge::_verifyLeaf: GLOBAL_EXIT_ROOT_INVALID'); // Check SMT_INVALID assert await expect(bridgeContract.claimAsset( @@ -1053,4 +1065,136 @@ describe('Bridge Contract', () => { metadata, )).to.be.revertedWith('Bridge::_verifyLeaf: ALREADY_CLAIMED'); }); + + it('should test claim timeout', async () => { + const originNetwork = networkIDMainnet; + const tokenAddress = tokenContract.address; + const amount = ethers.utils.parseEther('10'); + const destinationNetwork = networkIDMainnet; + const destinationAddress = acc1.address; + + const metadata = metadataToken; + const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); + + const mainnetExitRoot = await globalExitRootManager.lastMainnetExitRoot(); + + // compute root merkle tree in Js + const height = 32; + const merkleTree = new MerkleTreeBridge(height); + const leafValue = getLeafValue( + LEAF_TYPE_ASSET, + originNetwork, + tokenAddress, + destinationNetwork, + destinationAddress, + amount, + metadataHash, + ); + merkleTree.add(leafValue); + + // check merkle root with SC + const rootJSRollup = merkleTree.getRoot(); + + // add rollup Merkle root + await expect(globalExitRootManager.connect(rollup).updateExitRoot(rootJSRollup)) + .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') + .withArgs(mainnetExitRoot, rootJSRollup); + + // check roots + const rollupExitRootSC = await globalExitRootManager.lastRollupExitRoot(); + const computedGlobalExitRoot = calculateGlobalExitRoot(mainnetExitRoot, rollupExitRootSC); + + // check merkle proof + const proof = merkleTree.getProofTreeByIndex(0); + const index = 0; + + /* + * claim + * Can't claim without tokens + */ + await expect(bridgeContract.claimAsset( + proof, + index, + mainnetExitRoot, + rollupExitRootSC, + originNetwork, + tokenAddress, + destinationNetwork, + destinationAddress, + amount, + metadata, + )).to.be.revertedWith('ERC20: transfer amount exceeds balance'); + + // transfer tokens, then claim + await expect(tokenContract.transfer(bridgeContract.address, amount)) + .to.emit(tokenContract, 'Transfer') + .withArgs(deployer.address, bridgeContract.address, amount); + + // Check claimTimeout + expect(await bridgeContract.claimTimeout()).to.be.equal(claimTimeout); + + // Check globalExitRoot timestamp and current timestamp + const globalExitRootTimestamp = await globalExitRootManager.globalExitRootMap(computedGlobalExitRoot); + + // Set claimTimeout + const newClaimTimeout = 1000; + await expect(bridgeContract.connect(acc1).setClaimTimeout(newClaimTimeout)) + .to.be.revertedWith('owner'); + + await expect(bridgeContract.setClaimTimeout(newClaimTimeout)) + .to.emit(bridgeContract, 'SetClaimTimeout') + .withArgs(newClaimTimeout); + + // Can't claim because claim timeout does not expired yet + await expect(bridgeContract.claimAsset( + proof, + index, + mainnetExitRoot, + rollupExitRootSC, + originNetwork, + tokenAddress, + destinationNetwork, + destinationAddress, + amount, + metadata, + )).to.be.revertedWith('Bridge::_verifyLeaf: GLOBAL_EXIT_ROOT_INVALID'); + + // Can't claim because claim timeout does not expired yet ( edge case) + await ethers.provider.send('evm_setNextBlockTimestamp', [(globalExitRootTimestamp.toNumber() + newClaimTimeout) - 1]); + await expect(bridgeContract.claimAsset( + proof, + index, + mainnetExitRoot, + rollupExitRootSC, + originNetwork, + tokenAddress, + destinationNetwork, + destinationAddress, + amount, + metadata, + )).to.be.revertedWith('Bridge::_verifyLeaf: GLOBAL_EXIT_ROOT_INVALID'); + + // Now can claim! + await expect(bridgeContract.claimAsset( + proof, + index, + mainnetExitRoot, + rollupExitRootSC, + originNetwork, + tokenAddress, + destinationNetwork, + destinationAddress, + amount, + metadata, + )) + .to.emit(bridgeContract, 'ClaimEvent') + .withArgs( + index, + originNetwork, + tokenAddress, + destinationAddress, + amount, + ).to.emit(tokenContract, 'Transfer') + .withArgs(bridgeContract.address, acc1.address, amount); + }); }); diff --git a/test/contracts/bridgeMock.test.js b/test/contracts/bridgeMock.test.js index 717c82c68..14d07d90e 100644 --- a/test/contracts/bridgeMock.test.js +++ b/test/contracts/bridgeMock.test.js @@ -31,6 +31,8 @@ describe('Bridge Mock Contract', () => { const networkIDRollup = 1; const LEAF_TYPE_ASSET = 0; + const proofOfEfficiencyAddress = ethers.constants.AddressZero; + const claimTimeout = 0; beforeEach('Deploy contracts', async () => { // load signers @@ -45,7 +47,7 @@ describe('Bridge Mock Contract', () => { bridgeContract = await upgrades.deployProxy(bridgeFactory, [], { initializer: false }); await globalExitRootManager.initialize(rollup.address, bridgeContract.address); - await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address); + await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, proofOfEfficiencyAddress, claimTimeout); // deploy token const maticTokenFactory = await ethers.getContractFactory('ERC20PermitMock'); @@ -61,12 +63,6 @@ describe('Bridge Mock Contract', () => { it('should check the constructor parameters', async () => { expect(await bridgeContract.globalExitRootManager()).to.be.equal(globalExitRootManager.address); expect(await bridgeContract.networkID()).to.be.equal(networkIDMainnet); - - // Smart contracts start with nonce = 1 - const calcualteImplAddr = await ethers.utils.getContractAddress( - { from: bridgeContract.address, nonce: 1 }, - ); - expect(await bridgeContract.tokenImplementation()).to.be.equal(calcualteImplAddr); }); it('should bridge and verify merkle proof', async () => { @@ -84,7 +80,6 @@ describe('Bridge Mock Contract', () => { const balanceBridge = await tokenContract.balanceOf(bridgeContract.address); const rollupExitRoot = await globalExitRootManager.lastRollupExitRoot(); - const lastGlobalExitRootNum = await globalExitRootManager.lastGlobalExitRootNum(); // create a new deposit await expect(tokenContract.approve(bridgeContract.address, amount)) @@ -110,7 +105,7 @@ describe('Bridge Mock Contract', () => { .to.emit(bridgeContract, 'BridgeEvent') .withArgs(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount) .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') - .withArgs(lastGlobalExitRootNum + 1, rootJSMainnet, rollupExitRoot); + .withArgs(rootJSMainnet, rollupExitRoot); expect(await tokenContract.balanceOf(deployer.address)).to.be.equal(balanceDeployer.sub(amount)); expect(await tokenContract.balanceOf(bridgeContract.address)).to.be.equal(balanceBridge.add(amount)); diff --git a/test/contracts/bridge_permit.test.js b/test/contracts/bridge_permit.test.js index 198692b9f..b5b149b6b 100644 --- a/test/contracts/bridge_permit.test.js +++ b/test/contracts/bridge_permit.test.js @@ -37,9 +37,11 @@ describe('Bridge Contract Permit tests', () => { const networkIDMainnet = 0; const networkIDRollup = 1; - const LEAF_TYPE_ASSET = 0; + const proofOfEfficiencyAddress = ethers.constants.AddressZero; + const claimTimeout = 0; + beforeEach('Deploy contracts', async () => { // load signers [deployer, rollup] = await ethers.getSigners(); @@ -53,17 +55,18 @@ describe('Bridge Contract Permit tests', () => { bridgeContract = await upgrades.deployProxy(bridgeFactory, [], { initializer: false }); await globalExitRootManager.initialize(rollup.address, bridgeContract.address); - await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address); + await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, proofOfEfficiencyAddress, claimTimeout); // deploy token - const maticTokenFactory = await ethers.getContractFactory('ERC20PermitMock'); + const maticTokenFactory = await ethers.getContractFactory('TokenWrapped'); tokenContract = await maticTokenFactory.deploy( tokenName, tokenSymbol, - deployer.address, - tokenInitialBalance, + decimals, ); await tokenContract.deployed(); + + await tokenContract.mint(deployer.address, tokenInitialBalance); }); it('should bridge and with permit eip-2612 compilant', async () => { @@ -81,7 +84,6 @@ describe('Bridge Contract Permit tests', () => { const balanceBridge = await tokenContract.balanceOf(bridgeContract.address); const rollupExitRoot = await globalExitRootManager.lastRollupExitRoot(); - const lastGlobalExitRootNum = await globalExitRootManager.lastGlobalExitRootNum(); // pre compute root merkle tree in Js const height = 32; @@ -104,6 +106,8 @@ describe('Bridge Contract Permit tests', () => { // user permit const nonce = await tokenContract.nonces(deployer.address); const deadline = ethers.constants.MaxUint256; + const { chainId } = await ethers.provider.getNetwork(); + const { v, r, s } = await createPermitSignature( tokenContract, deployer, @@ -111,6 +115,7 @@ describe('Bridge Contract Permit tests', () => { amount, nonce, deadline, + chainId, ); const dataPermit = ifacePermit.encodeFunctionData('permit', [ @@ -127,7 +132,7 @@ describe('Bridge Contract Permit tests', () => { .to.emit(bridgeContract, 'BridgeEvent') .withArgs(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount) .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') - .withArgs(lastGlobalExitRootNum + 1, rootJSMainnet, rollupExitRoot); + .withArgs(rootJSMainnet, rollupExitRoot); expect(await tokenContract.balanceOf(deployer.address)).to.be.equal(balanceDeployer.sub(amount)); expect(await tokenContract.balanceOf(bridgeContract.address)).to.be.equal(balanceBridge.add(amount)); @@ -179,7 +184,6 @@ describe('Bridge Contract Permit tests', () => { const balanceBridge = await daiContract.balanceOf(bridgeContract.address); const rollupExitRoot = await globalExitRootManager.lastRollupExitRoot(); - const lastGlobalExitRootNum = await globalExitRootManager.lastGlobalExitRootNum(); // pre compute root merkle tree in Js const height = 32; @@ -226,7 +230,7 @@ describe('Bridge Contract Permit tests', () => { .to.emit(bridgeContract, 'BridgeEvent') .withArgs(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount) .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') - .withArgs(lastGlobalExitRootNum + 1, rootJSMainnet, rollupExitRoot); + .withArgs(rootJSMainnet, rollupExitRoot); expect(await daiContract.balanceOf(deployer.address)).to.be.equal(balanceDeployer.sub(amount)); expect(await daiContract.balanceOf(bridgeContract.address)).to.be.equal(balanceBridge.add(amount)); @@ -279,7 +283,6 @@ describe('Bridge Contract Permit tests', () => { const balanceBridge = await uniContract.balanceOf(bridgeContract.address); const rollupExitRoot = await globalExitRootManager.lastRollupExitRoot(); - const lastGlobalExitRootNum = await globalExitRootManager.lastGlobalExitRootNum(); // pre compute root merkle tree in Js const height = 32; @@ -327,7 +330,7 @@ describe('Bridge Contract Permit tests', () => { .to.emit(bridgeContract, 'BridgeEvent') .withArgs(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount) .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') - .withArgs(lastGlobalExitRootNum + 1, rootJSMainnet, rollupExitRoot); + .withArgs(rootJSMainnet, rollupExitRoot); expect(await uniContract.balanceOf(deployer.address)).to.be.equal(balanceDeployer.sub(amount)); expect(await uniContract.balanceOf(bridgeContract.address)).to.be.equal(balanceBridge.add(amount)); diff --git a/test/contracts/emergencyModeTest.js b/test/contracts/emergencyModeTest.js new file mode 100644 index 000000000..2beff6db9 --- /dev/null +++ b/test/contracts/emergencyModeTest.js @@ -0,0 +1,275 @@ +const { expect } = require('chai'); +const { ethers, upgrades } = require('hardhat'); + +const { contractUtils } = require('@0xpolygonhermez/zkevm-commonjs'); + +const { calculateAccInputHash, calculateBatchHashData } = contractUtils; + +describe('Proof of efficiency', () => { + let deployer; + let aggregator; + let trustedSequencer; + let securityCouncil; + + let verifierContract; + let bridgeContract; + let proofOfEfficiencyContract; + let maticTokenContract; + let globalExitRootManager; + + const maticTokenName = 'Matic Token'; + const maticTokenSymbol = 'MATIC'; + const maticTokenInitialBalance = ethers.utils.parseEther('20000000'); + + const genesisRoot = '0x0000000000000000000000000000000000000000000000000000000000000001'; + + const networkIDMainnet = 0; + const allowForcebatches = true; + const urlSequencer = 'http://zkevm-json-rpc:8123'; + const chainID = 1000; + const networkName = 'zkevm'; + + beforeEach('Deploy contract', async () => { + // load signers + [deployer, aggregator, trustedSequencer, securityCouncil] = await ethers.getSigners(); + + // deploy mock verifier + const VerifierRollupHelperFactory = await ethers.getContractFactory( + 'VerifierRollupHelperMock', + ); + verifierContract = await VerifierRollupHelperFactory.deploy(); + + // deploy MATIC + const maticTokenFactory = await ethers.getContractFactory('ERC20PermitMock'); + maticTokenContract = await maticTokenFactory.deploy( + maticTokenName, + maticTokenSymbol, + deployer.address, + maticTokenInitialBalance, + ); + await maticTokenContract.deployed(); + + // deploy global exit root manager + const globalExitRootManagerFactory = await ethers.getContractFactory('GlobalExitRootManager'); + globalExitRootManager = await upgrades.deployProxy(globalExitRootManagerFactory, [], { initializer: false }); + + // deploy bridge + const bridgeFactory = await ethers.getContractFactory('Bridge'); + bridgeContract = await upgrades.deployProxy(bridgeFactory, [], { initializer: false }); + + // deploy PoE + const ProofOfEfficiencyFactory = await ethers.getContractFactory('ProofOfEfficiencyMock'); + proofOfEfficiencyContract = await upgrades.deployProxy(ProofOfEfficiencyFactory, [], { initializer: false }); + + const claimTimeout = 0; + await globalExitRootManager.initialize(proofOfEfficiencyContract.address, bridgeContract.address); + await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, proofOfEfficiencyContract.address, claimTimeout); + await proofOfEfficiencyContract.initialize( + globalExitRootManager.address, + maticTokenContract.address, + verifierContract.address, + genesisRoot, + trustedSequencer.address, + allowForcebatches, + urlSequencer, + chainID, + networkName, + bridgeContract.address, + securityCouncil.address, + ); + + // fund sequencer address with Matic tokens + await maticTokenContract.transfer(trustedSequencer.address, ethers.utils.parseEther('100')); + }); + + it('should sequence a batch as truested sequencer', async () => { + const l2txData = '0x123456'; + const maticAmount = await proofOfEfficiencyContract.TRUSTED_SEQUENCER_FEE(); + const currentTimestamp = (await ethers.provider.getBlock()).timestamp; + + const sequence = { + transactions: l2txData, + globalExitRoot: ethers.constants.HashZero, + timestamp: ethers.BigNumber.from(currentTimestamp), + minForcedTimestamp: 0, + }; + + // revert because sender is not truested sequencer + await expect(proofOfEfficiencyContract.sequenceBatches([sequence])) + .to.be.revertedWith('ProofOfEfficiency::onlyTrustedSequencer: only trusted sequencer'); + + // revert because tokens were not approved + await expect(proofOfEfficiencyContract.connect(trustedSequencer).sequenceBatches([sequence])) + .to.be.revertedWith('ERC20: insufficient allowance'); + + const initialOwnerBalance = await maticTokenContract.balanceOf( + await trustedSequencer.getAddress(), + ); + + // Approve tokens + await expect( + maticTokenContract.connect(trustedSequencer).approve(proofOfEfficiencyContract.address, maticAmount), + ).to.emit(maticTokenContract, 'Approval'); + + const lastBatchSequenced = await proofOfEfficiencyContract.lastBatchSequenced(); + + // Sequence batch + await expect(proofOfEfficiencyContract.connect(trustedSequencer).sequenceBatches([sequence])) + .to.emit(proofOfEfficiencyContract, 'SequenceBatches') + .withArgs(lastBatchSequenced + 1); + + const finalOwnerBalance = await maticTokenContract.balanceOf( + await trustedSequencer.getAddress(), + ); + expect(finalOwnerBalance).to.equal( + ethers.BigNumber.from(initialOwnerBalance).sub(ethers.BigNumber.from(maticAmount)), + ); + + // Check batch mapping + const batchAccInputHash = await proofOfEfficiencyContract.sequencedBatches(1); + + const batchAccInputHashJs = calculateAccInputHash( + await proofOfEfficiencyContract.sequencedBatches(0), + calculateBatchHashData(sequence.transactions), + sequence.globalExitRoot, + sequence.timestamp, + trustedSequencer.address, + ); + expect(batchAccInputHash).to.be.equal(batchAccInputHashJs); + }); + + it('should force a batch of transactions', async () => { + const l2txData = '0x123456'; + const maticAmount = await proofOfEfficiencyContract.calculateForceProverFee(); + const lastGlobalExitRoot = await globalExitRootManager.getLastGlobalExitRoot(); + + expect(maticAmount.toString()).to.be.equal((await proofOfEfficiencyContract.calculateForceProverFee()).toString()); + + // revert because the maxMatic amount is less than the necessary to pay + await expect(proofOfEfficiencyContract.forceBatch(l2txData, maticAmount.sub(1))) + .to.be.revertedWith('ProofOfEfficiency::forceBatch: not enough matic'); + + // revert because tokens were not approved + await expect(proofOfEfficiencyContract.forceBatch(l2txData, maticAmount)) + .to.be.revertedWith('ERC20: insufficient allowance'); + + const initialOwnerBalance = await maticTokenContract.balanceOf( + await deployer.getAddress(), + ); + await expect( + maticTokenContract.approve(proofOfEfficiencyContract.address, maticAmount), + ).to.emit(maticTokenContract, 'Approval'); + + const lastForceBatch = await proofOfEfficiencyContract.lastForceBatch(); + + // Force batch + await expect(proofOfEfficiencyContract.forceBatch(l2txData, maticAmount)) + .to.emit(proofOfEfficiencyContract, 'ForceBatch') + .withArgs(lastForceBatch + 1, lastGlobalExitRoot, deployer.address, '0x'); + + const finalOwnerBalance = await maticTokenContract.balanceOf( + await deployer.getAddress(), + ); + expect(finalOwnerBalance).to.equal( + ethers.BigNumber.from(initialOwnerBalance).sub(ethers.BigNumber.from(maticAmount)), + ); + + // Check force batches struct + const batchHash = await proofOfEfficiencyContract.forcedBatches(1); + const timestampForceBatch = (await ethers.provider.getBlock()).timestamp; + + const batchHashJs = ethers.utils.solidityKeccak256( + ['bytes32', 'bytes32', 'uint64'], + [ + calculateBatchHashData(l2txData), + lastGlobalExitRoot, + timestampForceBatch, + ], + ); + expect(batchHashJs).to.be.equal(batchHash); + }); + + it('should verify a sequenced batch', async () => { + const l2txData = '0x123456'; + const maticAmount = await proofOfEfficiencyContract.TRUSTED_SEQUENCER_FEE(); + const currentTimestamp = (await ethers.provider.getBlock()).timestamp; + + const sequence = { + transactions: l2txData, + globalExitRoot: ethers.constants.HashZero, + timestamp: currentTimestamp, + minForcedTimestamp: 0, + }; + + // Approve tokens + await expect( + maticTokenContract.connect(trustedSequencer).approve(proofOfEfficiencyContract.address, maticAmount), + ).to.emit(maticTokenContract, 'Approval'); + + const lastBatchSequenced = await proofOfEfficiencyContract.lastBatchSequenced(); + // Sequence Batches + await expect(proofOfEfficiencyContract.connect(trustedSequencer).sequenceBatches([sequence])) + .to.emit(proofOfEfficiencyContract, 'SequenceBatches') + .withArgs(lastBatchSequenced + 1); + + // aggregator forge the batch + const newLocalExitRoot = '0x0000000000000000000000000000000000000000000000000000000000000000'; + const newStateRoot = '0x0000000000000000000000000000000000000000000000000000000000000000'; + const numBatch = (await proofOfEfficiencyContract.lastVerifiedBatch()) + 1; + const proofA = ['0', '0']; + const proofB = [ + ['0', '0'], + ['0', '0'], + ]; + const proofC = ['0', '0']; + + const initialAggregatorMatic = await maticTokenContract.balanceOf( + await aggregator.getAddress(), + ); + + await expect( + proofOfEfficiencyContract.connect(aggregator).verifyBatches( + numBatch - 1, + numBatch - 1, + newLocalExitRoot, + newStateRoot, + proofA, + proofB, + proofC, + ), + ).to.be.revertedWith('ProofOfEfficiency::verifyBatches: finalNewBatch must be bigger than lastVerifiedBatch'); + + await expect( + proofOfEfficiencyContract.connect(aggregator).verifyBatches( + numBatch - 1, + numBatch + 1, + newLocalExitRoot, + newStateRoot, + proofA, + proofB, + proofC, + ), + ).to.be.revertedWith('ProofOfEfficiency::getInputSnarkBytes: newAccInputHash does not exist'); + + // Verify batch + await expect( + proofOfEfficiencyContract.connect(aggregator).verifyBatches( + numBatch - 1, + numBatch, + newLocalExitRoot, + newStateRoot, + proofA, + proofB, + proofC, + ), + ).to.emit(proofOfEfficiencyContract, 'VerifyBatches') + .withArgs(numBatch, newStateRoot, aggregator.address); + + const finalAggregatorMatic = await maticTokenContract.balanceOf( + await aggregator.getAddress(), + ); + expect(finalAggregatorMatic).to.equal( + ethers.BigNumber.from(initialAggregatorMatic).add(ethers.BigNumber.from(maticAmount)), + ); + }); +}); diff --git a/test/contracts/globalExitRootManager.test.js b/test/contracts/globalExitRootManager.test.js index f60937bf1..22f46cd56 100644 --- a/test/contracts/globalExitRootManager.test.js +++ b/test/contracts/globalExitRootManager.test.js @@ -22,7 +22,6 @@ describe('Global Exit Root', () => { }); it('should check the constructor parameters', async () => { - expect(await globalExitRootManager.lastGlobalExitRootNum()).to.be.equal(0); expect(await globalExitRootManager.rollupAddress()).to.be.equal(rollup.address); expect(await globalExitRootManager.bridgeAddress()).to.be.equal(bridge.address); expect(await globalExitRootManager.lastRollupExitRoot()).to.be.equal(zero32bytes); @@ -30,7 +29,6 @@ describe('Global Exit Root', () => { }); it('should update root and check global exit root', async () => { - let lastGlobalExitRootNum = Number(await globalExitRootManager.lastGlobalExitRootNum()); const newRootRollup = ethers.utils.hexlify(ethers.utils.randomBytes(32)); await expect(globalExitRootManager.updateExitRoot(newRootRollup)) @@ -39,18 +37,16 @@ describe('Global Exit Root', () => { // Update root from the rollup await expect(globalExitRootManager.connect(rollup).updateExitRoot(newRootRollup)) .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') - .withArgs(lastGlobalExitRootNum + 1, zero32bytes, newRootRollup); + .withArgs(zero32bytes, newRootRollup); - expect(await globalExitRootManager.lastRollupExitRoot()).to.be.equal(newRootRollup); expect(await globalExitRootManager.getLastGlobalExitRoot()) .to.be.equal(calculateGlobalExitRoot(zero32bytes, newRootRollup)); // Update root from the bridge - lastGlobalExitRootNum += 1; const newRootBridge = ethers.utils.hexlify(ethers.utils.randomBytes(32)); await expect(globalExitRootManager.connect(bridge).updateExitRoot(newRootBridge)) .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') - .withArgs(lastGlobalExitRootNum + 1, newRootBridge, newRootRollup); + .withArgs(newRootBridge, newRootRollup); expect(await globalExitRootManager.lastMainnetExitRoot()).to.be.equal(newRootBridge); expect(await globalExitRootManager.getLastGlobalExitRoot()) diff --git a/test/contracts/globalExitRootManagerL2.test.js b/test/contracts/globalExitRootManagerL2.test.js index 42e4974d7..2cd391fda 100644 --- a/test/contracts/globalExitRootManagerL2.test.js +++ b/test/contracts/globalExitRootManagerL2.test.js @@ -6,6 +6,8 @@ const zero32bytes = '0x000000000000000000000000000000000000000000000000000000000 describe('Global Exit Root L2', () => { let bridge; let globalExitRootManager; + const proofOfEfficiencyAddress = ethers.constants.AddressZero; + const claimTimeout = 0; beforeEach('Deploy contracts', async () => { const networkIDRollup = 1; @@ -20,7 +22,7 @@ describe('Global Exit Root L2', () => { const globalExitRootManagerFactory = await ethers.getContractFactory('GlobalExitRootManagerL2Mock', deployer); globalExitRootManager = await globalExitRootManagerFactory.deploy(bridge.address); - await bridge.initialize(networkIDRollup, globalExitRootManager.address); + await bridge.initialize(networkIDRollup, globalExitRootManager.address, proofOfEfficiencyAddress, claimTimeout); }); it('should check the constructor parameters', async () => { diff --git a/test/contracts/proofOfEfficiency.test.js b/test/contracts/proofOfEfficiency.test.js index a2b36f1c9..336edfa3c 100644 --- a/test/contracts/proofOfEfficiency.test.js +++ b/test/contracts/proofOfEfficiency.test.js @@ -9,6 +9,7 @@ describe('Proof of efficiency', () => { let deployer; let aggregator; let trustedSequencer; + let securityCouncil; let verifierContract; let bridgeContract; @@ -20,7 +21,7 @@ describe('Proof of efficiency', () => { const maticTokenSymbol = 'MATIC'; const maticTokenInitialBalance = ethers.utils.parseEther('20000000'); - const genesisRoot = ethers.constants.HashZero; + const genesisRoot = '0x0000000000000000000000000000000000000000000000000000000000000001'; const networkIDMainnet = 0; const allowForcebatches = true; @@ -30,7 +31,7 @@ describe('Proof of efficiency', () => { beforeEach('Deploy contract', async () => { // load signers - [deployer, aggregator, trustedSequencer] = await ethers.getSigners(); + [deployer, aggregator, trustedSequencer, securityCouncil] = await ethers.getSigners(); // deploy mock verifier const VerifierRollupHelperFactory = await ethers.getContractFactory( @@ -60,8 +61,9 @@ describe('Proof of efficiency', () => { const ProofOfEfficiencyFactory = await ethers.getContractFactory('ProofOfEfficiencyMock'); proofOfEfficiencyContract = await upgrades.deployProxy(ProofOfEfficiencyFactory, [], { initializer: false }); + const claimTimeout = 0; await globalExitRootManager.initialize(proofOfEfficiencyContract.address, bridgeContract.address); - await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address); + await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, proofOfEfficiencyContract.address, claimTimeout); await proofOfEfficiencyContract.initialize( globalExitRootManager.address, maticTokenContract.address, @@ -72,6 +74,8 @@ describe('Proof of efficiency', () => { urlSequencer, chainID, networkName, + bridgeContract.address, + securityCouncil.address, ); // fund sequencer address with Matic tokens @@ -85,6 +89,8 @@ describe('Proof of efficiency', () => { expect(await proofOfEfficiencyContract.batchNumToStateRoot(0)).to.be.equal(genesisRoot); expect(await proofOfEfficiencyContract.trustedSequencer()).to.be.equal(trustedSequencer.address); expect(await proofOfEfficiencyContract.forceBatchAllowed()).to.be.equal(allowForcebatches); + expect(await proofOfEfficiencyContract.bridgeAddress()).to.be.equal(bridgeContract.address); + expect(await proofOfEfficiencyContract.securityCouncil()).to.be.equal(securityCouncil.address); }); it('should check setters of trusted sequencer', async () => { @@ -118,7 +124,7 @@ describe('Proof of efficiency', () => { expect(await proofOfEfficiencyContract.trustedSequencerURL()).to.be.equal(url); }); - it('should sequence a batch as super sequencer', async () => { + it('should sequence a batch as truested sequencer', async () => { const l2txData = '0x123456'; const maticAmount = await proofOfEfficiencyContract.TRUSTED_SEQUENCER_FEE(); const currentTimestamp = (await ethers.provider.getBlock()).timestamp; @@ -130,7 +136,7 @@ describe('Proof of efficiency', () => { minForcedTimestamp: 0, }; - // revert because sender is not super sequencer + // revert because sender is not truested sequencer await expect(proofOfEfficiencyContract.sequenceBatches([sequence])) .to.be.revertedWith('ProofOfEfficiency::onlyTrustedSequencer: only trusted sequencer'); @@ -598,7 +604,7 @@ describe('Proof of efficiency', () => { proofB, proofC, ), - ).to.be.revertedWith('ProofOfEfficiency::verifyBatches: newVerifiedBatch must be bigger than lastVerifiedBatch'); + ).to.be.revertedWith('ProofOfEfficiency::verifyBatches: finalNewBatch must be bigger than lastVerifiedBatch'); await expect( proofOfEfficiencyContract.connect(aggregator).verifyBatches( diff --git a/test/contracts/real-prover/real-flow.test.js b/test/contracts/real-prover/real-flow.test.js index 227b5b37f..1da2bea3f 100644 --- a/test/contracts/real-prover/real-flow.test.js +++ b/test/contracts/real-prover/real-flow.test.js @@ -25,7 +25,7 @@ describe('Real flow test', () => { const maticTokenSymbol = 'MATIC'; const maticTokenInitialBalance = ethers.utils.parseEther('20000000'); - const genesisRoot = ethers.constants.HashZero; + const genesisRoot = '0x0000000000000000000000000000000000000000000000000000000000000001'; const networkIDMainnet = 0; const allowForcebatches = true; @@ -71,8 +71,10 @@ describe('Real flow test', () => { // deploy global exit root manager const globalExitRootManagerFactory = await ethers.getContractFactory('GlobalExitRootManagerMock'); + const claimTimeout = 0; + globalExitRootManager = await globalExitRootManagerFactory.deploy(proofOfEfficiencyContract.address, bridgeContract.address); - await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address); + await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, proofOfEfficiencyContract.address, claimTimeout); await proofOfEfficiencyContract.initialize( globalExitRootManager.address, @@ -84,6 +86,7 @@ describe('Real flow test', () => { urlSequencer, chainID, networkName, + bridgeContract.address, ); // fund sequencer address with Matic tokens diff --git a/test/contracts/snark_stark_input.test.js b/test/contracts/snark_stark_input.test.js index 864498121..e148e57c0 100644 --- a/test/contracts/snark_stark_input.test.js +++ b/test/contracts/snark_stark_input.test.js @@ -5,7 +5,7 @@ const { contractUtils } = require('@0xpolygonhermez/zkevm-commonjs'); describe('Proof of efficiency snark stark input test', () => { let proofOfEfficiencyContract; - const genesisRoot = ethers.constants.HashZero; + const genesisRoot = '0x0000000000000000000000000000000000000000000000000000000000000001'; let randomSigner; const allowForcebatches = true; @@ -32,6 +32,7 @@ describe('Proof of efficiency snark stark input test', () => { urlSequencer, chainID, networkName, + ethers.constants.AddressZero, ], ); await proofOfEfficiencyContract.deployed(); From 6781972802d37f671c14eb79e26baa8eaa8418fe Mon Sep 17 00:00:00 2001 From: invocamanman Date: Mon, 21 Nov 2022 01:40:25 +0100 Subject: [PATCH 21/71] at leeast --- compiled-contracts/Bridge.json | 4 +- compiled-contracts/BridgeMock.json | 4 +- compiled-contracts/ProofOfEfficiency.json | 4 +- compiled-contracts/ProofOfEfficiencyMock.json | 4 +- contracts/Bridge.sol | 4 +- contracts/ProofOfEfficiency.sol | 2 +- contracts/lib/EmergencyManager.sol | 2 +- contracts/mocks/BridgeMock.sol | 3 + deployment/deployment_v2-0/deployPoE_v2-0.js | 48 ++- .../deploy_parameters.json.example | 4 +- test/contracts/bridge.test.js | 81 ++++- test/contracts/emergencyManager.test.js | 301 ++++++++++++++++++ test/contracts/emergencyModeTest.js | 275 ---------------- test/contracts/proofOfEfficiency.test.js | 1 + test/contracts/real-prover/real-flow.test.js | 1 + test/contracts/snark_stark_input.test.js | 1 + 16 files changed, 435 insertions(+), 304 deletions(-) create mode 100644 test/contracts/emergencyManager.test.js delete mode 100644 test/contracts/emergencyModeTest.js diff --git a/compiled-contracts/Bridge.json b/compiled-contracts/Bridge.json index 3b93bd0b9..d4f7c9b94 100644 --- a/compiled-contracts/Bridge.json +++ b/compiled-contracts/Bridge.json @@ -776,8 +776,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50615952806100206000396000f3fe608060405260043610620001db5760003560e01c806381b1c17411620000ff578063d96a15f71162000095578063e7a5b4ea116200006c578063e7a5b4ea1462000658578063ed6be5c9146200067d578063f2fde38b1462000694578063ff634ed714620006b957600080fd5b8063d96a15f714620005f5578063dbc16976146200060c578063e7375881146200062457600080fd5b8063a08e8a0811620000d6578063a08e8a08146200054f578063aaa13cc21462000579578063bab161bf146200059e578063d02103ca14620005d357600080fd5b806381b1c17414620004d35780638da5cb5b146200050d5780638f611519146200052d57600080fd5b80633ae05047116200017557806346385549116200014c57806346385549146200044c578063655595401462000471578063715018a614620004965780637b6323c114620004ae57600080fd5b80633ae05047146200032e5780633da8168214620003465780633e197043146200036b57600080fd5b80632072f6c511620001b65780632072f6c5146200025157806322e95f2c14620002695780632dfdf0b514620002a7578063318aee3d14620002bf57600080fd5b80630871e97114620001e05780630e1da6c314620001f957806315064c961462000224575b600080fd5b620001f7620001f1366004620031bd565b620006d0565b005b3480156200020657600080fd5b5062000211608d5481565b6040519081526020015b60405180910390f35b3480156200023157600080fd5b50602254620002409060ff1681565b60405190151581526020016200021b565b3480156200025e57600080fd5b50620001f762000c7a565b3480156200027657600080fd5b506200028e620002883660046200324a565b62000d2e565b6040516001600160a01b0390911681526020016200021b565b348015620002b457600080fd5b506200021160215481565b348015620002cc57600080fd5b5062000309620002de36600462003286565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200021b565b3480156200033b57600080fd5b506200021162000db1565b3480156200035357600080fd5b50620002406200036536600462003387565b62000ea4565b3480156200037857600080fd5b50620002116200038a36600462003405565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200045957600080fd5b50620001f76200046b36600462003516565b62000fa4565b3480156200047e57600080fd5b50620001f762000490366004620035fd565b6200122a565b348015620004a357600080fd5b50620001f762001410565b348015620004bb57600080fd5b50620001f7620004cd36600462003516565b62001426565b348015620004e057600080fd5b506200028e620004f236600462003653565b6089602052600090815260409020546001600160a01b031681565b3480156200051a57600080fd5b506055546001600160a01b03166200028e565b3480156200053a57600080fd5b50608c546200028e906001600160a01b031681565b3480156200055c57600080fd5b5062000566600081565b60405160ff90911681526020016200021b565b3480156200058657600080fd5b506200028e620005983660046200366d565b620019e8565b348015620005ab57600080fd5b50608754620005bd9063ffffffff1681565b60405163ffffffff90911681526020016200021b565b348015620005e057600080fd5b50608b546200028e906001600160a01b031681565b620001f76200060636600462003721565b62001b54565b3480156200061957600080fd5b50620001f762001e08565b3480156200063157600080fd5b50620002406200064336600462003653565b60886020526000908152604090205460ff1681565b3480156200066557600080fd5b50620001f76200067736600462003653565b62001eba565b3480156200068a57600080fd5b50620005bd600081565b348015620006a157600080fd5b50620001f7620006b336600462003286565b62001eff565b348015620006c657600080fd5b5062000566600181565b60225460ff1615620007755760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60875463ffffffff90811690861603620007f85760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b60008060606001600160a01b0389166200088d57853414620008835760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200076c565b6000915062000b17565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000974576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af11580156200093b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000961919062003798565b5060208101518151909450925062000b15565b84156200098957620009898a88888862001f95565b620009a06001600160a01b038b1633308a620025ba565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620009f7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a2191908101906200383b565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000a60573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a8a91908101906200383b565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ac9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aef919062003874565b60405160200162000b0393929190620038c2565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162000b59989796959493929190620038ff565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000c019062002673565b608b546001600160a01b03166333d6247d62000c1c62000db1565b6040518263ffffffff1660e01b815260040162000c3b91815260200190565b600060405180830381600087803b15801562000c5657600080fd5b505af115801562000c6b573d6000803e3d6000fd5b50505050505050505050505050565b608c546001600160a01b0316331462000d225760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c620027d7565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b602154600090819081805b602081101562000e9b578260011660010362000e1c576001816020811062000de85762000de86200396b565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000e49565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000e56600284620039c9565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000e929062003a05565b91505062000dbc565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000f97578160011660010362000f215786818151811062000edf5762000edf6200396b565b60200260200101518360405160200162000f03929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000f73565b8287828151811062000f375762000f376200396b565b602002602001015160405160200162000f5a929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000f80600283620039c9565b91508062000f8e8162003a05565b91505062000eb4565b5050909114949350505050565b60225460ff1615620010455760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6200105b8a8a8a8a8a8a8a8a8a8a6001620028b0565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b0385169084906200109e9089908b90879060240162003a40565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001103919062003a79565b60006040518083038185875af1925050503d806000811462001142576040519150601f19603f3d011682016040523d82523d6000602084013e62001147565b606091505b5050905080620011bf5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff16158080156200124b5750600054600160ff909116105b80620012675750303b15801562001267575060005460ff166001145b620012db5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200076c565b6000805460ff1916600117905580156200131c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d829055620013a562002c3d565b80156200140957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6200141a62002cc7565b62000d2c600062002d23565b60225460ff1615620014c75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b620014dd8a8a8a8a8a8a8a8a8a8a6000620028b0565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620015fc57604080516000808252602082019092526001600160a01b03851690849060405162001538919062003a79565b60006040518083038185875af1925050503d806000811462001577576040519150601f19603f3d011682016040523d82523d6000602084013e6200157c565b606091505b5050905080620015f55760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c45440000000000000000000000000000000000000000000000000060648201526084016200076c565b506200197e565b60875463ffffffff908116908716036200162c57620016266001600160a01b038616848462002d8d565b6200197e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620018ea57600080600085806020019051810190620016cc919062003a97565b925092509250600085848484604051620016e69062003126565b620016f493929190620038c2565b8190604051809103906000f590508015801562001715573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001783573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017a9919062003798565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620018d89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200197b565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001953573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001979919062003798565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162001a6b9062003126565b601f1982820381018352601f90910116604081905262001a98908d908d908d908d908d9060200162003b43565b60408051601f198184030181529082905262001ab8929160200162003b84565b6040516020818303038152906040528051906020012060405160200162001b2e94939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff161562001bf55760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b60875463ffffffff9081169084160362001c785760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b9262001cc59260019263ffffffff9092169133918991899134918a9190620038ff565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d850152346051850152607180850192909252805180850390920182526091909301909252815191012062001d959062002673565b608b546001600160a01b03166333d6247d62001db062000db1565b6040518263ffffffff1660e01b815260040162001dcf91815260200190565b600060405180830381600087803b15801562001dea57600080fd5b505af115801562001dff573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001eb05760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c62002dd8565b62001ec462002cc7565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001f0962002cc7565b6001600160a01b03811662001f875760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016200076c565b62001f928162002d23565b50565b600062001fd883838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002e8892505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620022da5760008080808080806200203b896004818d62003bb7565b8101906200204a919062003be3565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620020e15760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0386163014620021615760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b8a8514620021d85760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002286919062003a79565b6000604051808303816000865af19150503d8060008114620022c5576040519150601f19603f3d011682016040523d82523d6000602084013e620022ca565b606091505b5050505050505050505062001409565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c00000000000000000000000000000000000000000000000000000000146200236d5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200076c565b600080808080808080620023858a6004818e62003bb7565b81019062002394919062003c3e565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200242d5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0387163014620024ad5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002564919062003a79565b6000604051808303816000865af19150503d8060008114620025a3576040519150601f19603f3d011682016040523d82523d6000602084013e620025a8565b606091505b50505050505050505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526200266d9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002e8f565b50505050565b806001620026846020600262003e03565b62002690919062003e11565b60215410620027085760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200076c565b6001602160008282546200271d919062003e2b565b909155505060215460005b6020811015620027c757816001166001036200275d5782600182602081106200275557620027556200396b565b015550505050565b600181602081106200277357620027736200396b565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620027b09190620039c9565b915080620027be8162003a05565b91505062002728565b50620027d262003e46565b505050565b60225460ff1615620028785760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b63ffffffff8a1660009081526088602052604090205460ff16156200293d5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af1158015620029ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620029f0919062003e75565b9050801580159062002a0f5750608d5462002a0c824262003e11565b10155b62002a835760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c49440000000000000000000000000000000000000060648201526084016200076c565b60875463ffffffff87811691161462002b055760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000000060648201526084016200076c565b60875460009063ffffffff1662002b1e57508862002b21565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d82015260518101899052607180820193909352815180820390930183526091019052805191012062002bef908e8e63ffffffff168462000ea4565b62000c6b5760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c494460448201526064016200076c565b600054610100900460ff1662002cbc5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200076c565b62000d2c3362002d23565b6055546001600160a01b0316331462000d2c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200076c565b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620027d29084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002608565b60225460ff161562002e535760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016200076c565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002ee6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662002f7b9092919063ffffffff16565b805190915015620027d2578080602001905181019062002f07919062003798565b620027d25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200076c565b606062002f8c848460008562002f96565b90505b9392505050565b606082471015620030105760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016200076c565b6001600160a01b0385163b620030695760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200076c565b600080866001600160a01b0316858760405162003087919062003a79565b60006040518083038185875af1925050503d8060008114620030c6576040519150601f19603f3d011682016040523d82523d6000602084013e620030cb565b606091505b5091509150620030dd828286620030e8565b979650505050505050565b60608315620030f957508162002f8f565b8251156200310a5782518084602001fd5b8160405162461bcd60e51b81526004016200076c919062003e8f565b611a788062003ea583390190565b6001600160a01b038116811462001f9257600080fd5b8035620031578162003134565b919050565b803563ffffffff811681146200315757600080fd5b60008083601f8401126200318457600080fd5b50813567ffffffffffffffff8111156200319d57600080fd5b602083019150836020828501011115620031b657600080fd5b9250929050565b60008060008060008060a08789031215620031d757600080fd5b8635620031e48162003134565b9550620031f4602088016200315c565b94506040870135620032068162003134565b935060608701359250608087013567ffffffffffffffff8111156200322a57600080fd5b6200323889828a0162003171565b979a9699509497509295939492505050565b600080604083850312156200325e57600080fd5b62003269836200315c565b915060208301356200327b8162003134565b809150509250929050565b6000602082840312156200329957600080fd5b813562002f8f8162003134565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620033015762003301620032a6565b604052919050565b600082601f8301126200331b57600080fd5b8135602067ffffffffffffffff8211156200333a576200333a620032a6565b8160051b6200334b828201620032d5565b92835284810182019282810190878511156200336657600080fd5b83870192505b84831015620030dd578235825291830191908301906200336c565b600080600080608085870312156200339e57600080fd5b84359350602085013567ffffffffffffffff80821115620033be57600080fd5b620033cc8883890162003309565b9450604087013591508082168214620033e457600080fd5b509396929550929360600135925050565b60ff8116811462001f9257600080fd5b600080600080600080600060e0888a0312156200342157600080fd5b87356200342e81620033f5565b96506200343e602089016200315c565b95506040880135620034508162003134565b945062003460606089016200315c565b93506080880135620034728162003134565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620034ac57620034ac620032a6565b50601f01601f191660200190565b600082601f830112620034cc57600080fd5b8135620034e3620034dd826200348f565b620032d5565b818152846020838601011115620034f957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200353757600080fd5b8a3567ffffffffffffffff808211156200355057600080fd5b6200355e8e838f0162003309565b9b506200356e60208e016200315c565b9a5060408d0135995060608d013598506200358c60808e016200315c565b97506200359c60a08e016200314a565b9650620035ac60c08e016200315c565b9550620035bc60e08e016200314a565b94506101008d013593506101208d0135915080821115620035dc57600080fd5b50620035eb8d828e01620034ba565b9150509295989b9194979a5092959850565b600080600080608085870312156200361457600080fd5b6200361f856200315c565b93506020850135620036318162003134565b92506040850135620036438162003134565b9396929550929360600135925050565b6000602082840312156200366657600080fd5b5035919050565b600080600080600080600060a0888a0312156200368957600080fd5b62003694886200315c565b96506020880135620036a68162003134565b9550604088013567ffffffffffffffff80821115620036c457600080fd5b620036d28b838c0162003171565b909750955060608a0135915080821115620036ec57600080fd5b50620036fb8a828b0162003171565b90945092505060808801356200371181620033f5565b8091505092959891949750929550565b6000806000606084860312156200373757600080fd5b62003742846200315c565b92506020840135620037548162003134565b9150604084013567ffffffffffffffff8111156200377157600080fd5b6200377f86828701620034ba565b9150509250925092565b801515811462001f9257600080fd5b600060208284031215620037ab57600080fd5b815162002f8f8162003789565b60005b83811015620037d5578181015183820152602001620037bb565b838111156200266d5750506000910152565b600082601f830112620037f957600080fd5b81516200380a620034dd826200348f565b8181528460208386010111156200382057600080fd5b62003833826020830160208701620037b8565b949350505050565b6000602082840312156200384e57600080fd5b815167ffffffffffffffff8111156200386657600080fd5b6200383384828501620037e7565b6000602082840312156200388757600080fd5b815162002f8f81620033f5565b60008151808452620038ae816020860160208601620037b8565b601f01601f19169290920160200192915050565b606081526000620038d7606083018662003894565b8281036020840152620038eb818662003894565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620039528285018762003894565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003a00577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003a395762003a396200399a565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003a70606083018462003894565b95945050505050565b6000825162003a8d818460208701620037b8565b9190910192915050565b60008060006060848603121562003aad57600080fd5b835167ffffffffffffffff8082111562003ac657600080fd5b62003ad487838801620037e7565b9450602086015191508082111562003aeb57600080fd5b5062003afa86828701620037e7565b925050604084015162003b0d81620033f5565b809150509250925092565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003b5960608301878962003b18565b828103602084015262003b6e81868862003b18565b91505060ff831660408301529695505050505050565b6000835162003b98818460208801620037b8565b83519083019062003bae818360208801620037b8565b01949350505050565b6000808585111562003bc857600080fd5b8386111562003bd657600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003bff57600080fd5b873562003c0c8162003134565b9650602088013562003c1e8162003134565b9550604088013594506060880135935060808801356200347281620033f5565b600080600080600080600080610100898b03121562003c5c57600080fd5b883562003c698162003134565b9750602089013562003c7b8162003134565b96506040890135955060608901359450608089013562003c9b8162003789565b935060a089013562003cad81620033f5565b979a969950949793969295929450505060c08201359160e0013590565b600181815b8085111562003d2957817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d0d5762003d0d6200399a565b8085161562003d1b57918102915b93841c939080029062003ccf565b509250929050565b60008262003d425750600162000dab565b8162003d515750600062000dab565b816001811462003d6a576002811462003d755762003d95565b600191505062000dab565b60ff84111562003d895762003d896200399a565b50506001821b62000dab565b5060208310610133831016604e8410600b841016171562003dba575081810a62000dab565b62003dc6838362003cca565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003dfb5762003dfb6200399a565b029392505050565b600062002f8f838362003d31565b60008282101562003e265762003e266200399a565b500390565b6000821982111562003e415762003e416200399a565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60006020828403121562003e8857600080fd5b5051919050565b60208152600062002f8f60208301846200389456fe60c06040523480156200001157600080fd5b5060405162001a7838038062001a788339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516115be620004ba600039600061053001526000818161036f01526104fa01526115be6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b60405161019191906112d5565b60405180910390f35b6101ad6101a8366004611371565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad61020436600461139b565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad610276366004611371565b610552565b6101ad610289366004611371565b61059e565b6101c161029c3660046113d7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d23660046113d7565b60066020526000908152604090205481565b610184610645565b6101ad6102fa366004611371565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad610352366004611371565b6106ed565b6101ad610365366004611371565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f3660046113f9565b6107b2565b005b6101c16103b436600461146c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6060600380546104379061149f565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061149f565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f56565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611521565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c838361101e565b50600192915050565b6060600480546104379061149f565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c8383611124565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661088183611539565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ee3908490611521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4991815260200190565b60405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f81610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166110815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b80600260008282546110939190611521565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906110cd908490611521565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156112495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611285908490611571565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c27565b600060208083528351808285015260005b81811015611302578581018301518582016040015282016112e6565b81811115611314576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136c57600080fd5b919050565b6000806040838503121561138457600080fd5b61138d83611348565b946020939093013593505050565b6000806000606084860312156113b057600080fd5b6113b984611348565b92506113c760208501611348565b9150604084013590509250925092565b6000602082840312156113e957600080fd5b6113f282611348565b9392505050565b600080600080600080600060e0888a03121561141457600080fd5b61141d88611348565b965061142b60208901611348565b95506040880135945060608801359350608088013560ff8116811461144f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561147f57600080fd5b61148883611348565b915061149660208401611348565b90509250929050565b600181811c908216806114b357607f821691505b6020821081036114ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611534576115346114f2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156a5761156a6114f2565b5060010190565b600082821015611583576115836114f2565b50039056fea2646970667358221220dc9c54325b6ec8c11c8bc6a1630cfb64202b6d54611cd1004e705ceca7826a4f64736f6c634300080f0033a26469706673582212209325864155c9b73893997ddf3831325bde53e92ebc8e3e0cd1d1c21523d6dae364736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001db5760003560e01c806381b1c17411620000ff578063d96a15f71162000095578063e7a5b4ea116200006c578063e7a5b4ea1462000658578063ed6be5c9146200067d578063f2fde38b1462000694578063ff634ed714620006b957600080fd5b8063d96a15f714620005f5578063dbc16976146200060c578063e7375881146200062457600080fd5b8063a08e8a0811620000d6578063a08e8a08146200054f578063aaa13cc21462000579578063bab161bf146200059e578063d02103ca14620005d357600080fd5b806381b1c17414620004d35780638da5cb5b146200050d5780638f611519146200052d57600080fd5b80633ae05047116200017557806346385549116200014c57806346385549146200044c578063655595401462000471578063715018a614620004965780637b6323c114620004ae57600080fd5b80633ae05047146200032e5780633da8168214620003465780633e197043146200036b57600080fd5b80632072f6c511620001b65780632072f6c5146200025157806322e95f2c14620002695780632dfdf0b514620002a7578063318aee3d14620002bf57600080fd5b80630871e97114620001e05780630e1da6c314620001f957806315064c961462000224575b600080fd5b620001f7620001f1366004620031bd565b620006d0565b005b3480156200020657600080fd5b5062000211608d5481565b6040519081526020015b60405180910390f35b3480156200023157600080fd5b50602254620002409060ff1681565b60405190151581526020016200021b565b3480156200025e57600080fd5b50620001f762000c7a565b3480156200027657600080fd5b506200028e620002883660046200324a565b62000d2e565b6040516001600160a01b0390911681526020016200021b565b348015620002b457600080fd5b506200021160215481565b348015620002cc57600080fd5b5062000309620002de36600462003286565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200021b565b3480156200033b57600080fd5b506200021162000db1565b3480156200035357600080fd5b50620002406200036536600462003387565b62000ea4565b3480156200037857600080fd5b50620002116200038a36600462003405565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200045957600080fd5b50620001f76200046b36600462003516565b62000fa4565b3480156200047e57600080fd5b50620001f762000490366004620035fd565b6200122a565b348015620004a357600080fd5b50620001f762001410565b348015620004bb57600080fd5b50620001f7620004cd36600462003516565b62001426565b348015620004e057600080fd5b506200028e620004f236600462003653565b6089602052600090815260409020546001600160a01b031681565b3480156200051a57600080fd5b506055546001600160a01b03166200028e565b3480156200053a57600080fd5b50608c546200028e906001600160a01b031681565b3480156200055c57600080fd5b5062000566600081565b60405160ff90911681526020016200021b565b3480156200058657600080fd5b506200028e620005983660046200366d565b620019e8565b348015620005ab57600080fd5b50608754620005bd9063ffffffff1681565b60405163ffffffff90911681526020016200021b565b348015620005e057600080fd5b50608b546200028e906001600160a01b031681565b620001f76200060636600462003721565b62001b54565b3480156200061957600080fd5b50620001f762001e08565b3480156200063157600080fd5b50620002406200064336600462003653565b60886020526000908152604090205460ff1681565b3480156200066557600080fd5b50620001f76200067736600462003653565b62001eba565b3480156200068a57600080fd5b50620005bd600081565b348015620006a157600080fd5b50620001f7620006b336600462003286565b62001eff565b348015620006c657600080fd5b5062000566600181565b60225460ff1615620007755760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60875463ffffffff90811690861603620007f85760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b60008060606001600160a01b0389166200088d57853414620008835760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200076c565b6000915062000b17565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000974576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af11580156200093b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000961919062003798565b5060208101518151909450925062000b15565b84156200098957620009898a88888862001f95565b620009a06001600160a01b038b1633308a620025ba565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620009f7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a2191908101906200383b565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000a60573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a8a91908101906200383b565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ac9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aef919062003874565b60405160200162000b0393929190620038c2565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162000b59989796959493929190620038ff565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000c019062002673565b608b546001600160a01b03166333d6247d62000c1c62000db1565b6040518263ffffffff1660e01b815260040162000c3b91815260200190565b600060405180830381600087803b15801562000c5657600080fd5b505af115801562000c6b573d6000803e3d6000fd5b50505050505050505050505050565b608c546001600160a01b0316331462000d225760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c620027d7565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b602154600090819081805b602081101562000e9b578260011660010362000e1c576001816020811062000de85762000de86200396b565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000e49565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000e56600284620039c9565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000e929062003a05565b91505062000dbc565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000f97578160011660010362000f215786818151811062000edf5762000edf6200396b565b60200260200101518360405160200162000f03929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000f73565b8287828151811062000f375762000f376200396b565b602002602001015160405160200162000f5a929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000f80600283620039c9565b91508062000f8e8162003a05565b91505062000eb4565b5050909114949350505050565b60225460ff1615620010455760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6200105b8a8a8a8a8a8a8a8a8a8a6001620028b0565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b0385169084906200109e9089908b90879060240162003a40565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001103919062003a79565b60006040518083038185875af1925050503d806000811462001142576040519150601f19603f3d011682016040523d82523d6000602084013e62001147565b606091505b5050905080620011bf5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff16158080156200124b5750600054600160ff909116105b80620012675750303b15801562001267575060005460ff166001145b620012db5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200076c565b6000805460ff1916600117905580156200131c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d829055620013a562002c3d565b80156200140957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6200141a62002cc7565b62000d2c600062002d23565b60225460ff1615620014c75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b620014dd8a8a8a8a8a8a8a8a8a8a6000620028b0565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620015fc57604080516000808252602082019092526001600160a01b03851690849060405162001538919062003a79565b60006040518083038185875af1925050503d806000811462001577576040519150601f19603f3d011682016040523d82523d6000602084013e6200157c565b606091505b5050905080620015f55760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c45440000000000000000000000000000000000000000000000000060648201526084016200076c565b506200197e565b60875463ffffffff908116908716036200162c57620016266001600160a01b038616848462002d8d565b6200197e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620018ea57600080600085806020019051810190620016cc919062003a97565b925092509250600085848484604051620016e69062003126565b620016f493929190620038c2565b8190604051809103906000f590508015801562001715573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001783573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017a9919062003798565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620018d89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200197b565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001953573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001979919062003798565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162001a6b9062003126565b601f1982820381018352601f90910116604081905262001a98908d908d908d908d908d9060200162003b43565b60408051601f198184030181529082905262001ab8929160200162003b84565b6040516020818303038152906040528051906020012060405160200162001b2e94939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff161562001bf55760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b60875463ffffffff9081169084160362001c785760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b9262001cc59260019263ffffffff9092169133918991899134918a9190620038ff565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d850152346051850152607180850192909252805180850390920182526091909301909252815191012062001d959062002673565b608b546001600160a01b03166333d6247d62001db062000db1565b6040518263ffffffff1660e01b815260040162001dcf91815260200190565b600060405180830381600087803b15801562001dea57600080fd5b505af115801562001dff573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001eb05760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c62002dd8565b62001ec462002cc7565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001f0962002cc7565b6001600160a01b03811662001f875760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016200076c565b62001f928162002d23565b50565b600062001fd883838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002e8892505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620022da5760008080808080806200203b896004818d62003bb7565b8101906200204a919062003be3565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620020e15760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0386163014620021615760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b8a8514620021d85760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002286919062003a79565b6000604051808303816000865af19150503d8060008114620022c5576040519150601f19603f3d011682016040523d82523d6000602084013e620022ca565b606091505b5050505050505050505062001409565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c00000000000000000000000000000000000000000000000000000000146200236d5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200076c565b600080808080808080620023858a6004818e62003bb7565b81019062002394919062003c3e565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200242d5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0387163014620024ad5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002564919062003a79565b6000604051808303816000865af19150503d8060008114620025a3576040519150601f19603f3d011682016040523d82523d6000602084013e620025a8565b606091505b50505050505050505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526200266d9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002e8f565b50505050565b806001620026846020600262003e03565b62002690919062003e11565b60215410620027085760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200076c565b6001602160008282546200271d919062003e2b565b909155505060215460005b6020811015620027c757816001166001036200275d5782600182602081106200275557620027556200396b565b015550505050565b600181602081106200277357620027736200396b565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620027b09190620039c9565b915080620027be8162003a05565b91505062002728565b50620027d262003e46565b505050565b60225460ff1615620028785760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b63ffffffff8a1660009081526088602052604090205460ff16156200293d5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af1158015620029ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620029f0919062003e75565b9050801580159062002a0f5750608d5462002a0c824262003e11565b10155b62002a835760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c49440000000000000000000000000000000000000060648201526084016200076c565b60875463ffffffff87811691161462002b055760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000000060648201526084016200076c565b60875460009063ffffffff1662002b1e57508862002b21565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d82015260518101899052607180820193909352815180820390930183526091019052805191012062002bef908e8e63ffffffff168462000ea4565b62000c6b5760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c494460448201526064016200076c565b600054610100900460ff1662002cbc5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200076c565b62000d2c3362002d23565b6055546001600160a01b0316331462000d2c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200076c565b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620027d29084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002608565b60225460ff161562002e535760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016200076c565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002ee6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662002f7b9092919063ffffffff16565b805190915015620027d2578080602001905181019062002f07919062003798565b620027d25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200076c565b606062002f8c848460008562002f96565b90505b9392505050565b606082471015620030105760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016200076c565b6001600160a01b0385163b620030695760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200076c565b600080866001600160a01b0316858760405162003087919062003a79565b60006040518083038185875af1925050503d8060008114620030c6576040519150601f19603f3d011682016040523d82523d6000602084013e620030cb565b606091505b5091509150620030dd828286620030e8565b979650505050505050565b60608315620030f957508162002f8f565b8251156200310a5782518084602001fd5b8160405162461bcd60e51b81526004016200076c919062003e8f565b611a788062003ea583390190565b6001600160a01b038116811462001f9257600080fd5b8035620031578162003134565b919050565b803563ffffffff811681146200315757600080fd5b60008083601f8401126200318457600080fd5b50813567ffffffffffffffff8111156200319d57600080fd5b602083019150836020828501011115620031b657600080fd5b9250929050565b60008060008060008060a08789031215620031d757600080fd5b8635620031e48162003134565b9550620031f4602088016200315c565b94506040870135620032068162003134565b935060608701359250608087013567ffffffffffffffff8111156200322a57600080fd5b6200323889828a0162003171565b979a9699509497509295939492505050565b600080604083850312156200325e57600080fd5b62003269836200315c565b915060208301356200327b8162003134565b809150509250929050565b6000602082840312156200329957600080fd5b813562002f8f8162003134565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620033015762003301620032a6565b604052919050565b600082601f8301126200331b57600080fd5b8135602067ffffffffffffffff8211156200333a576200333a620032a6565b8160051b6200334b828201620032d5565b92835284810182019282810190878511156200336657600080fd5b83870192505b84831015620030dd578235825291830191908301906200336c565b600080600080608085870312156200339e57600080fd5b84359350602085013567ffffffffffffffff80821115620033be57600080fd5b620033cc8883890162003309565b9450604087013591508082168214620033e457600080fd5b509396929550929360600135925050565b60ff8116811462001f9257600080fd5b600080600080600080600060e0888a0312156200342157600080fd5b87356200342e81620033f5565b96506200343e602089016200315c565b95506040880135620034508162003134565b945062003460606089016200315c565b93506080880135620034728162003134565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620034ac57620034ac620032a6565b50601f01601f191660200190565b600082601f830112620034cc57600080fd5b8135620034e3620034dd826200348f565b620032d5565b818152846020838601011115620034f957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200353757600080fd5b8a3567ffffffffffffffff808211156200355057600080fd5b6200355e8e838f0162003309565b9b506200356e60208e016200315c565b9a5060408d0135995060608d013598506200358c60808e016200315c565b97506200359c60a08e016200314a565b9650620035ac60c08e016200315c565b9550620035bc60e08e016200314a565b94506101008d013593506101208d0135915080821115620035dc57600080fd5b50620035eb8d828e01620034ba565b9150509295989b9194979a5092959850565b600080600080608085870312156200361457600080fd5b6200361f856200315c565b93506020850135620036318162003134565b92506040850135620036438162003134565b9396929550929360600135925050565b6000602082840312156200366657600080fd5b5035919050565b600080600080600080600060a0888a0312156200368957600080fd5b62003694886200315c565b96506020880135620036a68162003134565b9550604088013567ffffffffffffffff80821115620036c457600080fd5b620036d28b838c0162003171565b909750955060608a0135915080821115620036ec57600080fd5b50620036fb8a828b0162003171565b90945092505060808801356200371181620033f5565b8091505092959891949750929550565b6000806000606084860312156200373757600080fd5b62003742846200315c565b92506020840135620037548162003134565b9150604084013567ffffffffffffffff8111156200377157600080fd5b6200377f86828701620034ba565b9150509250925092565b801515811462001f9257600080fd5b600060208284031215620037ab57600080fd5b815162002f8f8162003789565b60005b83811015620037d5578181015183820152602001620037bb565b838111156200266d5750506000910152565b600082601f830112620037f957600080fd5b81516200380a620034dd826200348f565b8181528460208386010111156200382057600080fd5b62003833826020830160208701620037b8565b949350505050565b6000602082840312156200384e57600080fd5b815167ffffffffffffffff8111156200386657600080fd5b6200383384828501620037e7565b6000602082840312156200388757600080fd5b815162002f8f81620033f5565b60008151808452620038ae816020860160208601620037b8565b601f01601f19169290920160200192915050565b606081526000620038d7606083018662003894565b8281036020840152620038eb818662003894565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620039528285018762003894565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003a00577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003a395762003a396200399a565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003a70606083018462003894565b95945050505050565b6000825162003a8d818460208701620037b8565b9190910192915050565b60008060006060848603121562003aad57600080fd5b835167ffffffffffffffff8082111562003ac657600080fd5b62003ad487838801620037e7565b9450602086015191508082111562003aeb57600080fd5b5062003afa86828701620037e7565b925050604084015162003b0d81620033f5565b809150509250925092565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003b5960608301878962003b18565b828103602084015262003b6e81868862003b18565b91505060ff831660408301529695505050505050565b6000835162003b98818460208801620037b8565b83519083019062003bae818360208801620037b8565b01949350505050565b6000808585111562003bc857600080fd5b8386111562003bd657600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003bff57600080fd5b873562003c0c8162003134565b9650602088013562003c1e8162003134565b9550604088013594506060880135935060808801356200347281620033f5565b600080600080600080600080610100898b03121562003c5c57600080fd5b883562003c698162003134565b9750602089013562003c7b8162003134565b96506040890135955060608901359450608089013562003c9b8162003789565b935060a089013562003cad81620033f5565b979a969950949793969295929450505060c08201359160e0013590565b600181815b8085111562003d2957817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d0d5762003d0d6200399a565b8085161562003d1b57918102915b93841c939080029062003ccf565b509250929050565b60008262003d425750600162000dab565b8162003d515750600062000dab565b816001811462003d6a576002811462003d755762003d95565b600191505062000dab565b60ff84111562003d895762003d896200399a565b50506001821b62000dab565b5060208310610133831016604e8410600b841016171562003dba575081810a62000dab565b62003dc6838362003cca565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003dfb5762003dfb6200399a565b029392505050565b600062002f8f838362003d31565b60008282101562003e265762003e266200399a565b500390565b6000821982111562003e415762003e416200399a565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60006020828403121562003e8857600080fd5b5051919050565b60208152600062002f8f60208301846200389456fe60c06040523480156200001157600080fd5b5060405162001a7838038062001a788339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516115be620004ba600039600061053001526000818161036f01526104fa01526115be6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b60405161019191906112d5565b60405180910390f35b6101ad6101a8366004611371565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad61020436600461139b565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad610276366004611371565b610552565b6101ad610289366004611371565b61059e565b6101c161029c3660046113d7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d23660046113d7565b60066020526000908152604090205481565b610184610645565b6101ad6102fa366004611371565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad610352366004611371565b6106ed565b6101ad610365366004611371565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f3660046113f9565b6107b2565b005b6101c16103b436600461146c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6060600380546104379061149f565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061149f565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f56565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611521565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c838361101e565b50600192915050565b6060600480546104379061149f565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c8383611124565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661088183611539565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ee3908490611521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4991815260200190565b60405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f81610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166110815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b80600260008282546110939190611521565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906110cd908490611521565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156112495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611285908490611571565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c27565b600060208083528351808285015260005b81811015611302578581018301518582016040015282016112e6565b81811115611314576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136c57600080fd5b919050565b6000806040838503121561138457600080fd5b61138d83611348565b946020939093013593505050565b6000806000606084860312156113b057600080fd5b6113b984611348565b92506113c760208501611348565b9150604084013590509250925092565b6000602082840312156113e957600080fd5b6113f282611348565b9392505050565b600080600080600080600060e0888a03121561141457600080fd5b61141d88611348565b965061142b60208901611348565b95506040880135945060608801359350608088013560ff8116811461144f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561147f57600080fd5b61148883611348565b915061149660208401611348565b90509250929050565b600181811c908216806114b357607f821691505b6020821081036114ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611534576115346114f2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156a5761156a6114f2565b5060010190565b600082821015611583576115836114f2565b50039056fea2646970667358221220dc9c54325b6ec8c11c8bc6a1630cfb64202b6d54611cd1004e705ceca7826a4f64736f6c634300080f0033a26469706673582212209325864155c9b73893997ddf3831325bde53e92ebc8e3e0cd1d1c21523d6dae364736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50615951806100206000396000f3fe608060405260043610620001db5760003560e01c806381b1c17411620000ff578063d96a15f71162000095578063e7a5b4ea116200006c578063e7a5b4ea1462000658578063ed6be5c9146200067d578063f2fde38b1462000694578063ff634ed714620006b957600080fd5b8063d96a15f714620005f5578063dbc16976146200060c578063e7375881146200062457600080fd5b8063a08e8a0811620000d6578063a08e8a08146200054f578063aaa13cc21462000579578063bab161bf146200059e578063d02103ca14620005d357600080fd5b806381b1c17414620004d35780638da5cb5b146200050d5780638f611519146200052d57600080fd5b80633ae05047116200017557806346385549116200014c57806346385549146200044c578063655595401462000471578063715018a614620004965780637b6323c114620004ae57600080fd5b80633ae05047146200032e5780633da8168214620003465780633e197043146200036b57600080fd5b80632072f6c511620001b65780632072f6c5146200025157806322e95f2c14620002695780632dfdf0b514620002a7578063318aee3d14620002bf57600080fd5b80630871e97114620001e05780630e1da6c314620001f957806315064c961462000224575b600080fd5b620001f7620001f1366004620031bc565b620006d0565b005b3480156200020657600080fd5b5062000211608d5481565b6040519081526020015b60405180910390f35b3480156200023157600080fd5b50602254620002409060ff1681565b60405190151581526020016200021b565b3480156200025e57600080fd5b50620001f762000c7a565b3480156200027657600080fd5b506200028e6200028836600462003249565b62000d2e565b6040516001600160a01b0390911681526020016200021b565b348015620002b457600080fd5b506200021160215481565b348015620002cc57600080fd5b5062000309620002de36600462003285565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200021b565b3480156200033b57600080fd5b506200021162000db1565b3480156200035357600080fd5b50620002406200036536600462003386565b62000ea4565b3480156200037857600080fd5b50620002116200038a36600462003404565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200045957600080fd5b50620001f76200046b36600462003515565b62000fa4565b3480156200047e57600080fd5b50620001f762000490366004620035fc565b6200122a565b348015620004a357600080fd5b50620001f762001410565b348015620004bb57600080fd5b50620001f7620004cd36600462003515565b62001426565b348015620004e057600080fd5b506200028e620004f236600462003652565b6089602052600090815260409020546001600160a01b031681565b3480156200051a57600080fd5b506055546001600160a01b03166200028e565b3480156200053a57600080fd5b50608c546200028e906001600160a01b031681565b3480156200055c57600080fd5b5062000566600081565b60405160ff90911681526020016200021b565b3480156200058657600080fd5b506200028e620005983660046200366c565b620019e8565b348015620005ab57600080fd5b50608754620005bd9063ffffffff1681565b60405163ffffffff90911681526020016200021b565b348015620005e057600080fd5b50608b546200028e906001600160a01b031681565b620001f76200060636600462003720565b62001b54565b3480156200061957600080fd5b50620001f762001e08565b3480156200063157600080fd5b50620002406200064336600462003652565b60886020526000908152604090205460ff1681565b3480156200066557600080fd5b50620001f76200067736600462003652565b62001eba565b3480156200068a57600080fd5b50620005bd600081565b348015620006a157600080fd5b50620001f7620006b336600462003285565b62001eff565b348015620006c657600080fd5b5062000566600181565b60225460ff1615620007755760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60875463ffffffff90811690861603620007f85760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b60008060606001600160a01b0389166200088d57853414620008835760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200076c565b6000915062000b17565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000974576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af11580156200093b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000961919062003797565b5060208101518151909450925062000b15565b84156200098957620009898a88888862001f95565b620009a06001600160a01b038b1633308a620025ba565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620009f7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a2191908101906200383a565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000a60573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a8a91908101906200383a565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ac9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aef919062003873565b60405160200162000b0393929190620038c1565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162000b59989796959493929190620038fe565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000c019062002673565b608b546001600160a01b03166333d6247d62000c1c62000db1565b6040518263ffffffff1660e01b815260040162000c3b91815260200190565b600060405180830381600087803b15801562000c5657600080fd5b505af115801562000c6b573d6000803e3d6000fd5b50505050505050505050505050565b608c546001600160a01b0316331462000d225760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c620027d7565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b602154600090819081805b602081101562000e9b578260011660010362000e1c576001816020811062000de85762000de86200396a565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000e49565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000e56600284620039c8565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000e929062003a04565b91505062000dbc565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000f97578160011660010362000f215786818151811062000edf5762000edf6200396a565b60200260200101518360405160200162000f03929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000f73565b8287828151811062000f375762000f376200396a565b602002602001015160405160200162000f5a929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000f80600283620039c8565b91508062000f8e8162003a04565b91505062000eb4565b5050909114949350505050565b60225460ff1615620010455760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6200105b8a8a8a8a8a8a8a8a8a8a6001620028b0565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b0385169084906200109e9089908b90879060240162003a3f565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001103919062003a78565b60006040518083038185875af1925050503d806000811462001142576040519150601f19603f3d011682016040523d82523d6000602084013e62001147565b606091505b5050905080620011bf5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff16158080156200124b5750600054600160ff909116105b80620012675750303b15801562001267575060005460ff166001145b620012db5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200076c565b6000805460ff1916600117905580156200131c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d829055620013a562002c3d565b80156200140957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6200141a62002cc7565b62000d2c600062002d23565b60225460ff1615620014c75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b620014dd8a8a8a8a8a8a8a8a8a8a6000620028b0565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620015fc57604080516000808252602082019092526001600160a01b03851690849060405162001538919062003a78565b60006040518083038185875af1925050503d806000811462001577576040519150601f19603f3d011682016040523d82523d6000602084013e6200157c565b606091505b5050905080620015f55760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c45440000000000000000000000000000000000000000000000000060648201526084016200076c565b506200197e565b60875463ffffffff908116908716036200162c57620016266001600160a01b038616848462002d8d565b6200197e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620018ea57600080600085806020019051810190620016cc919062003a96565b925092509250600085848484604051620016e69062003125565b620016f493929190620038c1565b8190604051809103906000f590508015801562001715573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001783573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017a9919062003797565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620018d89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200197b565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001953573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001979919062003797565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162001a6b9062003125565b601f1982820381018352601f90910116604081905262001a98908d908d908d908d908d9060200162003b42565b60408051601f198184030181529082905262001ab8929160200162003b83565b6040516020818303038152906040528051906020012060405160200162001b2e94939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff161562001bf55760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b60875463ffffffff9081169084160362001c785760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b9262001cc59260019263ffffffff9092169133918991899134918a9190620038fe565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d850152346051850152607180850192909252805180850390920182526091909301909252815191012062001d959062002673565b608b546001600160a01b03166333d6247d62001db062000db1565b6040518263ffffffff1660e01b815260040162001dcf91815260200190565b600060405180830381600087803b15801562001dea57600080fd5b505af115801562001dff573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001eb05760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c62002dd8565b62001ec462002cc7565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001f0962002cc7565b6001600160a01b03811662001f875760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016200076c565b62001f928162002d23565b50565b600062001fd883838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002e8792505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620022da5760008080808080806200203b896004818d62003bb6565b8101906200204a919062003be2565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620020e15760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0386163014620021615760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b8a8514620021d85760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002286919062003a78565b6000604051808303816000865af19150503d8060008114620022c5576040519150601f19603f3d011682016040523d82523d6000602084013e620022ca565b606091505b5050505050505050505062001409565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c00000000000000000000000000000000000000000000000000000000146200236d5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200076c565b600080808080808080620023858a6004818e62003bb6565b81019062002394919062003c3d565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200242d5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0387163014620024ad5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002564919062003a78565b6000604051808303816000865af19150503d8060008114620025a3576040519150601f19603f3d011682016040523d82523d6000602084013e620025a8565b606091505b50505050505050505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526200266d9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002e8e565b50505050565b806001620026846020600262003e02565b62002690919062003e10565b60215410620027085760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200076c565b6001602160008282546200271d919062003e2a565b909155505060215460005b6020811015620027c757816001166001036200275d5782600182602081106200275557620027556200396a565b015550505050565b600181602081106200277357620027736200396a565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620027b09190620039c8565b915080620027be8162003a04565b91505062002728565b50620027d262003e45565b505050565b60225460ff1615620028785760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b63ffffffff8a1660009081526088602052604090205460ff16156200293d5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af1158015620029ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620029f0919062003e74565b9050801580159062002a0f5750608d5462002a0c824262003e10565b10155b62002a835760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c49440000000000000000000000000000000000000060648201526084016200076c565b60875463ffffffff87811691161462002b055760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000000060648201526084016200076c565b60875460009063ffffffff1662002b1e57508862002b21565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d82015260518101899052607180820193909352815180820390930183526091019052805191012062002bef908e8e63ffffffff168462000ea4565b62000c6b5760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c494460448201526064016200076c565b600054610100900460ff1662002cbc5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200076c565b62000d2c3362002d23565b6055546001600160a01b0316331462000d2c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200076c565b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620027d29084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002608565b60225460ff1662002e525760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016200076c565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002ee5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662002f7a9092919063ffffffff16565b805190915015620027d2578080602001905181019062002f06919062003797565b620027d25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200076c565b606062002f8b848460008562002f95565b90505b9392505050565b6060824710156200300f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016200076c565b6001600160a01b0385163b620030685760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200076c565b600080866001600160a01b0316858760405162003086919062003a78565b60006040518083038185875af1925050503d8060008114620030c5576040519150601f19603f3d011682016040523d82523d6000602084013e620030ca565b606091505b5091509150620030dc828286620030e7565b979650505050505050565b60608315620030f857508162002f8e565b825115620031095782518084602001fd5b8160405162461bcd60e51b81526004016200076c919062003e8e565b611a788062003ea483390190565b6001600160a01b038116811462001f9257600080fd5b8035620031568162003133565b919050565b803563ffffffff811681146200315657600080fd5b60008083601f8401126200318357600080fd5b50813567ffffffffffffffff8111156200319c57600080fd5b602083019150836020828501011115620031b557600080fd5b9250929050565b60008060008060008060a08789031215620031d657600080fd5b8635620031e38162003133565b9550620031f3602088016200315b565b94506040870135620032058162003133565b935060608701359250608087013567ffffffffffffffff8111156200322957600080fd5b6200323789828a0162003170565b979a9699509497509295939492505050565b600080604083850312156200325d57600080fd5b62003268836200315b565b915060208301356200327a8162003133565b809150509250929050565b6000602082840312156200329857600080fd5b813562002f8e8162003133565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620033005762003300620032a5565b604052919050565b600082601f8301126200331a57600080fd5b8135602067ffffffffffffffff821115620033395762003339620032a5565b8160051b6200334a828201620032d4565b92835284810182019282810190878511156200336557600080fd5b83870192505b84831015620030dc578235825291830191908301906200336b565b600080600080608085870312156200339d57600080fd5b84359350602085013567ffffffffffffffff80821115620033bd57600080fd5b620033cb8883890162003308565b9450604087013591508082168214620033e357600080fd5b509396929550929360600135925050565b60ff8116811462001f9257600080fd5b600080600080600080600060e0888a0312156200342057600080fd5b87356200342d81620033f4565b96506200343d602089016200315b565b955060408801356200344f8162003133565b94506200345f606089016200315b565b93506080880135620034718162003133565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620034ab57620034ab620032a5565b50601f01601f191660200190565b600082601f830112620034cb57600080fd5b8135620034e2620034dc826200348e565b620032d4565b818152846020838601011115620034f857600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200353657600080fd5b8a3567ffffffffffffffff808211156200354f57600080fd5b6200355d8e838f0162003308565b9b506200356d60208e016200315b565b9a5060408d0135995060608d013598506200358b60808e016200315b565b97506200359b60a08e0162003149565b9650620035ab60c08e016200315b565b9550620035bb60e08e0162003149565b94506101008d013593506101208d0135915080821115620035db57600080fd5b50620035ea8d828e01620034b9565b9150509295989b9194979a5092959850565b600080600080608085870312156200361357600080fd5b6200361e856200315b565b93506020850135620036308162003133565b92506040850135620036428162003133565b9396929550929360600135925050565b6000602082840312156200366557600080fd5b5035919050565b600080600080600080600060a0888a0312156200368857600080fd5b62003693886200315b565b96506020880135620036a58162003133565b9550604088013567ffffffffffffffff80821115620036c357600080fd5b620036d18b838c0162003170565b909750955060608a0135915080821115620036eb57600080fd5b50620036fa8a828b0162003170565b90945092505060808801356200371081620033f4565b8091505092959891949750929550565b6000806000606084860312156200373657600080fd5b62003741846200315b565b92506020840135620037538162003133565b9150604084013567ffffffffffffffff8111156200377057600080fd5b6200377e86828701620034b9565b9150509250925092565b801515811462001f9257600080fd5b600060208284031215620037aa57600080fd5b815162002f8e8162003788565b60005b83811015620037d4578181015183820152602001620037ba565b838111156200266d5750506000910152565b600082601f830112620037f857600080fd5b815162003809620034dc826200348e565b8181528460208386010111156200381f57600080fd5b62003832826020830160208701620037b7565b949350505050565b6000602082840312156200384d57600080fd5b815167ffffffffffffffff8111156200386557600080fd5b6200383284828501620037e6565b6000602082840312156200388657600080fd5b815162002f8e81620033f4565b60008151808452620038ad816020860160208601620037b7565b601f01601f19169290920160200192915050565b606081526000620038d6606083018662003893565b8281036020840152620038ea818662003893565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620039518285018762003893565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082620039ff577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003a385762003a3862003999565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003a6f606083018462003893565b95945050505050565b6000825162003a8c818460208701620037b7565b9190910192915050565b60008060006060848603121562003aac57600080fd5b835167ffffffffffffffff8082111562003ac557600080fd5b62003ad387838801620037e6565b9450602086015191508082111562003aea57600080fd5b5062003af986828701620037e6565b925050604084015162003b0c81620033f4565b809150509250925092565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003b5860608301878962003b17565b828103602084015262003b6d81868862003b17565b91505060ff831660408301529695505050505050565b6000835162003b97818460208801620037b7565b83519083019062003bad818360208801620037b7565b01949350505050565b6000808585111562003bc757600080fd5b8386111562003bd557600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003bfe57600080fd5b873562003c0b8162003133565b9650602088013562003c1d8162003133565b9550604088013594506060880135935060808801356200347181620033f4565b600080600080600080600080610100898b03121562003c5b57600080fd5b883562003c688162003133565b9750602089013562003c7a8162003133565b96506040890135955060608901359450608089013562003c9a8162003788565b935060a089013562003cac81620033f4565b979a969950949793969295929450505060c08201359160e0013590565b600181815b8085111562003d2857817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d0c5762003d0c62003999565b8085161562003d1a57918102915b93841c939080029062003cce565b509250929050565b60008262003d415750600162000dab565b8162003d505750600062000dab565b816001811462003d69576002811462003d745762003d94565b600191505062000dab565b60ff84111562003d885762003d8862003999565b50506001821b62000dab565b5060208310610133831016604e8410600b841016171562003db9575081810a62000dab565b62003dc5838362003cc9565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003dfa5762003dfa62003999565b029392505050565b600062002f8e838362003d30565b60008282101562003e255762003e2562003999565b500390565b6000821982111562003e405762003e4062003999565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60006020828403121562003e8757600080fd5b5051919050565b60208152600062002f8e60208301846200389356fe60c06040523480156200001157600080fd5b5060405162001a7838038062001a788339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516115be620004ba600039600061053001526000818161036f01526104fa01526115be6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b60405161019191906112d5565b60405180910390f35b6101ad6101a8366004611371565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad61020436600461139b565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad610276366004611371565b610552565b6101ad610289366004611371565b61059e565b6101c161029c3660046113d7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d23660046113d7565b60066020526000908152604090205481565b610184610645565b6101ad6102fa366004611371565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad610352366004611371565b6106ed565b6101ad610365366004611371565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f3660046113f9565b6107b2565b005b6101c16103b436600461146c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6060600380546104379061149f565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061149f565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f56565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611521565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c838361101e565b50600192915050565b6060600480546104379061149f565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c8383611124565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661088183611539565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ee3908490611521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4991815260200190565b60405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f81610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166110815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b80600260008282546110939190611521565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906110cd908490611521565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156112495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611285908490611571565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c27565b600060208083528351808285015260005b81811015611302578581018301518582016040015282016112e6565b81811115611314576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136c57600080fd5b919050565b6000806040838503121561138457600080fd5b61138d83611348565b946020939093013593505050565b6000806000606084860312156113b057600080fd5b6113b984611348565b92506113c760208501611348565b9150604084013590509250925092565b6000602082840312156113e957600080fd5b6113f282611348565b9392505050565b600080600080600080600060e0888a03121561141457600080fd5b61141d88611348565b965061142b60208901611348565b95506040880135945060608801359350608088013560ff8116811461144f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561147f57600080fd5b61148883611348565b915061149660208401611348565b90509250929050565b600181811c908216806114b357607f821691505b6020821081036114ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611534576115346114f2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156a5761156a6114f2565b5060010190565b600082821015611583576115836114f2565b50039056fea2646970667358221220dc9c54325b6ec8c11c8bc6a1630cfb64202b6d54611cd1004e705ceca7826a4f64736f6c634300080f0033a2646970667358221220cd5d627eb44db0ac502a5df7e6b4905941374829b022d6f8f6fd4be1a279530c64736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001db5760003560e01c806381b1c17411620000ff578063d96a15f71162000095578063e7a5b4ea116200006c578063e7a5b4ea1462000658578063ed6be5c9146200067d578063f2fde38b1462000694578063ff634ed714620006b957600080fd5b8063d96a15f714620005f5578063dbc16976146200060c578063e7375881146200062457600080fd5b8063a08e8a0811620000d6578063a08e8a08146200054f578063aaa13cc21462000579578063bab161bf146200059e578063d02103ca14620005d357600080fd5b806381b1c17414620004d35780638da5cb5b146200050d5780638f611519146200052d57600080fd5b80633ae05047116200017557806346385549116200014c57806346385549146200044c578063655595401462000471578063715018a614620004965780637b6323c114620004ae57600080fd5b80633ae05047146200032e5780633da8168214620003465780633e197043146200036b57600080fd5b80632072f6c511620001b65780632072f6c5146200025157806322e95f2c14620002695780632dfdf0b514620002a7578063318aee3d14620002bf57600080fd5b80630871e97114620001e05780630e1da6c314620001f957806315064c961462000224575b600080fd5b620001f7620001f1366004620031bc565b620006d0565b005b3480156200020657600080fd5b5062000211608d5481565b6040519081526020015b60405180910390f35b3480156200023157600080fd5b50602254620002409060ff1681565b60405190151581526020016200021b565b3480156200025e57600080fd5b50620001f762000c7a565b3480156200027657600080fd5b506200028e6200028836600462003249565b62000d2e565b6040516001600160a01b0390911681526020016200021b565b348015620002b457600080fd5b506200021160215481565b348015620002cc57600080fd5b5062000309620002de36600462003285565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200021b565b3480156200033b57600080fd5b506200021162000db1565b3480156200035357600080fd5b50620002406200036536600462003386565b62000ea4565b3480156200037857600080fd5b50620002116200038a36600462003404565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200045957600080fd5b50620001f76200046b36600462003515565b62000fa4565b3480156200047e57600080fd5b50620001f762000490366004620035fc565b6200122a565b348015620004a357600080fd5b50620001f762001410565b348015620004bb57600080fd5b50620001f7620004cd36600462003515565b62001426565b348015620004e057600080fd5b506200028e620004f236600462003652565b6089602052600090815260409020546001600160a01b031681565b3480156200051a57600080fd5b506055546001600160a01b03166200028e565b3480156200053a57600080fd5b50608c546200028e906001600160a01b031681565b3480156200055c57600080fd5b5062000566600081565b60405160ff90911681526020016200021b565b3480156200058657600080fd5b506200028e620005983660046200366c565b620019e8565b348015620005ab57600080fd5b50608754620005bd9063ffffffff1681565b60405163ffffffff90911681526020016200021b565b348015620005e057600080fd5b50608b546200028e906001600160a01b031681565b620001f76200060636600462003720565b62001b54565b3480156200061957600080fd5b50620001f762001e08565b3480156200063157600080fd5b50620002406200064336600462003652565b60886020526000908152604090205460ff1681565b3480156200066557600080fd5b50620001f76200067736600462003652565b62001eba565b3480156200068a57600080fd5b50620005bd600081565b348015620006a157600080fd5b50620001f7620006b336600462003285565b62001eff565b348015620006c657600080fd5b5062000566600181565b60225460ff1615620007755760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60875463ffffffff90811690861603620007f85760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b60008060606001600160a01b0389166200088d57853414620008835760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200076c565b6000915062000b17565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000974576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af11580156200093b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000961919062003797565b5060208101518151909450925062000b15565b84156200098957620009898a88888862001f95565b620009a06001600160a01b038b1633308a620025ba565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620009f7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a2191908101906200383a565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000a60573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a8a91908101906200383a565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ac9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aef919062003873565b60405160200162000b0393929190620038c1565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162000b59989796959493929190620038fe565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000c019062002673565b608b546001600160a01b03166333d6247d62000c1c62000db1565b6040518263ffffffff1660e01b815260040162000c3b91815260200190565b600060405180830381600087803b15801562000c5657600080fd5b505af115801562000c6b573d6000803e3d6000fd5b50505050505050505050505050565b608c546001600160a01b0316331462000d225760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c620027d7565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b602154600090819081805b602081101562000e9b578260011660010362000e1c576001816020811062000de85762000de86200396a565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000e49565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000e56600284620039c8565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000e929062003a04565b91505062000dbc565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000f97578160011660010362000f215786818151811062000edf5762000edf6200396a565b60200260200101518360405160200162000f03929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000f73565b8287828151811062000f375762000f376200396a565b602002602001015160405160200162000f5a929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000f80600283620039c8565b91508062000f8e8162003a04565b91505062000eb4565b5050909114949350505050565b60225460ff1615620010455760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6200105b8a8a8a8a8a8a8a8a8a8a6001620028b0565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b0385169084906200109e9089908b90879060240162003a3f565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001103919062003a78565b60006040518083038185875af1925050503d806000811462001142576040519150601f19603f3d011682016040523d82523d6000602084013e62001147565b606091505b5050905080620011bf5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff16158080156200124b5750600054600160ff909116105b80620012675750303b15801562001267575060005460ff166001145b620012db5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200076c565b6000805460ff1916600117905580156200131c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d829055620013a562002c3d565b80156200140957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6200141a62002cc7565b62000d2c600062002d23565b60225460ff1615620014c75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b620014dd8a8a8a8a8a8a8a8a8a8a6000620028b0565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620015fc57604080516000808252602082019092526001600160a01b03851690849060405162001538919062003a78565b60006040518083038185875af1925050503d806000811462001577576040519150601f19603f3d011682016040523d82523d6000602084013e6200157c565b606091505b5050905080620015f55760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c45440000000000000000000000000000000000000000000000000060648201526084016200076c565b506200197e565b60875463ffffffff908116908716036200162c57620016266001600160a01b038616848462002d8d565b6200197e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620018ea57600080600085806020019051810190620016cc919062003a96565b925092509250600085848484604051620016e69062003125565b620016f493929190620038c1565b8190604051809103906000f590508015801562001715573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001783573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017a9919062003797565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620018d89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200197b565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001953573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001979919062003797565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162001a6b9062003125565b601f1982820381018352601f90910116604081905262001a98908d908d908d908d908d9060200162003b42565b60408051601f198184030181529082905262001ab8929160200162003b83565b6040516020818303038152906040528051906020012060405160200162001b2e94939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff161562001bf55760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b60875463ffffffff9081169084160362001c785760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b9262001cc59260019263ffffffff9092169133918991899134918a9190620038fe565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d850152346051850152607180850192909252805180850390920182526091909301909252815191012062001d959062002673565b608b546001600160a01b03166333d6247d62001db062000db1565b6040518263ffffffff1660e01b815260040162001dcf91815260200190565b600060405180830381600087803b15801562001dea57600080fd5b505af115801562001dff573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001eb05760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c62002dd8565b62001ec462002cc7565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001f0962002cc7565b6001600160a01b03811662001f875760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016200076c565b62001f928162002d23565b50565b600062001fd883838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002e8792505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620022da5760008080808080806200203b896004818d62003bb6565b8101906200204a919062003be2565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620020e15760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0386163014620021615760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b8a8514620021d85760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002286919062003a78565b6000604051808303816000865af19150503d8060008114620022c5576040519150601f19603f3d011682016040523d82523d6000602084013e620022ca565b606091505b5050505050505050505062001409565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c00000000000000000000000000000000000000000000000000000000146200236d5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200076c565b600080808080808080620023858a6004818e62003bb6565b81019062002394919062003c3d565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200242d5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0387163014620024ad5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002564919062003a78565b6000604051808303816000865af19150503d8060008114620025a3576040519150601f19603f3d011682016040523d82523d6000602084013e620025a8565b606091505b50505050505050505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526200266d9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002e8e565b50505050565b806001620026846020600262003e02565b62002690919062003e10565b60215410620027085760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200076c565b6001602160008282546200271d919062003e2a565b909155505060215460005b6020811015620027c757816001166001036200275d5782600182602081106200275557620027556200396a565b015550505050565b600181602081106200277357620027736200396a565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620027b09190620039c8565b915080620027be8162003a04565b91505062002728565b50620027d262003e45565b505050565b60225460ff1615620028785760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b63ffffffff8a1660009081526088602052604090205460ff16156200293d5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af1158015620029ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620029f0919062003e74565b9050801580159062002a0f5750608d5462002a0c824262003e10565b10155b62002a835760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c49440000000000000000000000000000000000000060648201526084016200076c565b60875463ffffffff87811691161462002b055760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000000060648201526084016200076c565b60875460009063ffffffff1662002b1e57508862002b21565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d82015260518101899052607180820193909352815180820390930183526091019052805191012062002bef908e8e63ffffffff168462000ea4565b62000c6b5760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c494460448201526064016200076c565b600054610100900460ff1662002cbc5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200076c565b62000d2c3362002d23565b6055546001600160a01b0316331462000d2c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200076c565b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620027d29084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002608565b60225460ff1662002e525760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016200076c565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002ee5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662002f7a9092919063ffffffff16565b805190915015620027d2578080602001905181019062002f06919062003797565b620027d25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200076c565b606062002f8b848460008562002f95565b90505b9392505050565b6060824710156200300f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016200076c565b6001600160a01b0385163b620030685760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200076c565b600080866001600160a01b0316858760405162003086919062003a78565b60006040518083038185875af1925050503d8060008114620030c5576040519150601f19603f3d011682016040523d82523d6000602084013e620030ca565b606091505b5091509150620030dc828286620030e7565b979650505050505050565b60608315620030f857508162002f8e565b825115620031095782518084602001fd5b8160405162461bcd60e51b81526004016200076c919062003e8e565b611a788062003ea483390190565b6001600160a01b038116811462001f9257600080fd5b8035620031568162003133565b919050565b803563ffffffff811681146200315657600080fd5b60008083601f8401126200318357600080fd5b50813567ffffffffffffffff8111156200319c57600080fd5b602083019150836020828501011115620031b557600080fd5b9250929050565b60008060008060008060a08789031215620031d657600080fd5b8635620031e38162003133565b9550620031f3602088016200315b565b94506040870135620032058162003133565b935060608701359250608087013567ffffffffffffffff8111156200322957600080fd5b6200323789828a0162003170565b979a9699509497509295939492505050565b600080604083850312156200325d57600080fd5b62003268836200315b565b915060208301356200327a8162003133565b809150509250929050565b6000602082840312156200329857600080fd5b813562002f8e8162003133565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620033005762003300620032a5565b604052919050565b600082601f8301126200331a57600080fd5b8135602067ffffffffffffffff821115620033395762003339620032a5565b8160051b6200334a828201620032d4565b92835284810182019282810190878511156200336557600080fd5b83870192505b84831015620030dc578235825291830191908301906200336b565b600080600080608085870312156200339d57600080fd5b84359350602085013567ffffffffffffffff80821115620033bd57600080fd5b620033cb8883890162003308565b9450604087013591508082168214620033e357600080fd5b509396929550929360600135925050565b60ff8116811462001f9257600080fd5b600080600080600080600060e0888a0312156200342057600080fd5b87356200342d81620033f4565b96506200343d602089016200315b565b955060408801356200344f8162003133565b94506200345f606089016200315b565b93506080880135620034718162003133565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620034ab57620034ab620032a5565b50601f01601f191660200190565b600082601f830112620034cb57600080fd5b8135620034e2620034dc826200348e565b620032d4565b818152846020838601011115620034f857600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200353657600080fd5b8a3567ffffffffffffffff808211156200354f57600080fd5b6200355d8e838f0162003308565b9b506200356d60208e016200315b565b9a5060408d0135995060608d013598506200358b60808e016200315b565b97506200359b60a08e0162003149565b9650620035ab60c08e016200315b565b9550620035bb60e08e0162003149565b94506101008d013593506101208d0135915080821115620035db57600080fd5b50620035ea8d828e01620034b9565b9150509295989b9194979a5092959850565b600080600080608085870312156200361357600080fd5b6200361e856200315b565b93506020850135620036308162003133565b92506040850135620036428162003133565b9396929550929360600135925050565b6000602082840312156200366557600080fd5b5035919050565b600080600080600080600060a0888a0312156200368857600080fd5b62003693886200315b565b96506020880135620036a58162003133565b9550604088013567ffffffffffffffff80821115620036c357600080fd5b620036d18b838c0162003170565b909750955060608a0135915080821115620036eb57600080fd5b50620036fa8a828b0162003170565b90945092505060808801356200371081620033f4565b8091505092959891949750929550565b6000806000606084860312156200373657600080fd5b62003741846200315b565b92506020840135620037538162003133565b9150604084013567ffffffffffffffff8111156200377057600080fd5b6200377e86828701620034b9565b9150509250925092565b801515811462001f9257600080fd5b600060208284031215620037aa57600080fd5b815162002f8e8162003788565b60005b83811015620037d4578181015183820152602001620037ba565b838111156200266d5750506000910152565b600082601f830112620037f857600080fd5b815162003809620034dc826200348e565b8181528460208386010111156200381f57600080fd5b62003832826020830160208701620037b7565b949350505050565b6000602082840312156200384d57600080fd5b815167ffffffffffffffff8111156200386557600080fd5b6200383284828501620037e6565b6000602082840312156200388657600080fd5b815162002f8e81620033f4565b60008151808452620038ad816020860160208601620037b7565b601f01601f19169290920160200192915050565b606081526000620038d6606083018662003893565b8281036020840152620038ea818662003893565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620039518285018762003893565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082620039ff577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003a385762003a3862003999565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003a6f606083018462003893565b95945050505050565b6000825162003a8c818460208701620037b7565b9190910192915050565b60008060006060848603121562003aac57600080fd5b835167ffffffffffffffff8082111562003ac557600080fd5b62003ad387838801620037e6565b9450602086015191508082111562003aea57600080fd5b5062003af986828701620037e6565b925050604084015162003b0c81620033f4565b809150509250925092565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003b5860608301878962003b17565b828103602084015262003b6d81868862003b17565b91505060ff831660408301529695505050505050565b6000835162003b97818460208801620037b7565b83519083019062003bad818360208801620037b7565b01949350505050565b6000808585111562003bc757600080fd5b8386111562003bd557600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003bfe57600080fd5b873562003c0b8162003133565b9650602088013562003c1d8162003133565b9550604088013594506060880135935060808801356200347181620033f4565b600080600080600080600080610100898b03121562003c5b57600080fd5b883562003c688162003133565b9750602089013562003c7a8162003133565b96506040890135955060608901359450608089013562003c9a8162003788565b935060a089013562003cac81620033f4565b979a969950949793969295929450505060c08201359160e0013590565b600181815b8085111562003d2857817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d0c5762003d0c62003999565b8085161562003d1a57918102915b93841c939080029062003cce565b509250929050565b60008262003d415750600162000dab565b8162003d505750600062000dab565b816001811462003d69576002811462003d745762003d94565b600191505062000dab565b60ff84111562003d885762003d8862003999565b50506001821b62000dab565b5060208310610133831016604e8410600b841016171562003db9575081810a62000dab565b62003dc5838362003cc9565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003dfa5762003dfa62003999565b029392505050565b600062002f8e838362003d30565b60008282101562003e255762003e2562003999565b500390565b6000821982111562003e405762003e4062003999565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60006020828403121562003e8757600080fd5b5051919050565b60208152600062002f8e60208301846200389356fe60c06040523480156200001157600080fd5b5060405162001a7838038062001a788339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516115be620004ba600039600061053001526000818161036f01526104fa01526115be6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b60405161019191906112d5565b60405180910390f35b6101ad6101a8366004611371565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad61020436600461139b565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad610276366004611371565b610552565b6101ad610289366004611371565b61059e565b6101c161029c3660046113d7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d23660046113d7565b60066020526000908152604090205481565b610184610645565b6101ad6102fa366004611371565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad610352366004611371565b6106ed565b6101ad610365366004611371565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f3660046113f9565b6107b2565b005b6101c16103b436600461146c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6060600380546104379061149f565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061149f565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f56565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611521565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c838361101e565b50600192915050565b6060600480546104379061149f565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c8383611124565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661088183611539565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ee3908490611521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4991815260200190565b60405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f81610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166110815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b80600260008282546110939190611521565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906110cd908490611521565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156112495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611285908490611571565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c27565b600060208083528351808285015260005b81811015611302578581018301518582016040015282016112e6565b81811115611314576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136c57600080fd5b919050565b6000806040838503121561138457600080fd5b61138d83611348565b946020939093013593505050565b6000806000606084860312156113b057600080fd5b6113b984611348565b92506113c760208501611348565b9150604084013590509250925092565b6000602082840312156113e957600080fd5b6113f282611348565b9392505050565b600080600080600080600060e0888a03121561141457600080fd5b61141d88611348565b965061142b60208901611348565b95506040880135945060608801359350608088013560ff8116811461144f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561147f57600080fd5b61148883611348565b915061149660208401611348565b90509250929050565b600181811c908216806114b357607f821691505b6020821081036114ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611534576115346114f2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156a5761156a6114f2565b5060010190565b600082821015611583576115836114f2565b50039056fea2646970667358221220dc9c54325b6ec8c11c8bc6a1630cfb64202b6d54611cd1004e705ceca7826a4f64736f6c634300080f0033a2646970667358221220cd5d627eb44db0ac502a5df7e6b4905941374829b022d6f8f6fd4be1a279530c64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/BridgeMock.json b/compiled-contracts/BridgeMock.json index 94d974276..27a807c3d 100644 --- a/compiled-contracts/BridgeMock.json +++ b/compiled-contracts/BridgeMock.json @@ -815,8 +815,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50615a76806100206000396000f3fe608060405260043610620001ff5760003560e01c80637b6323c11162000117578063d02103ca11620000a1578063e7a5b4ea116200006c578063e7a5b4ea14620006de578063ed6be5c91462000703578063f2fde38b146200071a578063ff634ed7146200073f57600080fd5b8063d02103ca1462000659578063d96a15f7146200067b578063dbc169761462000692578063e737588114620006aa57600080fd5b806391e57e2d11620000e257806391e57e2d14620005bd578063a08e8a0814620005d5578063aaa13cc214620005ff578063bab161bf146200062457600080fd5b80637b6323c1146200051c57806381b1c17414620005415780638da5cb5b146200057b5780638f611519146200059b57600080fd5b80632dfdf0b511620001995780633e19704311620001645780633e19704314620003d95780634638554914620004ba5780636555954014620004df578063715018a6146200050457600080fd5b80632dfdf0b51462000315578063318aee3d146200032d5780633ae05047146200039c5780633da8168214620003b457600080fd5b80632072f6c511620001da5780632072f6c5146200027557806322e95f2c146200028d5780632b5e42e714620002cb5780632c3f58cd14620002f057600080fd5b80630871e97114620002045780630e1da6c3146200021d57806315064c961462000248575b600080fd5b6200021b62000215366004620032c3565b62000756565b005b3480156200022a57600080fd5b5062000235608d5481565b6040519081526020015b60405180910390f35b3480156200025557600080fd5b50602254620002649060ff1681565b60405190151581526020016200023f565b3480156200028257600080fd5b506200021b62000812565b3480156200029a57600080fd5b50620002b2620002ac36600462003350565b620008c6565b6040516001600160a01b0390911681526020016200023f565b348015620002d857600080fd5b506200021b620002ea3660046200338c565b62000949565b348015620002fd57600080fd5b506200021b6200030f366004620033a6565b62000958565b3480156200032257600080fd5b506200023560215481565b3480156200033a57600080fd5b50620003776200034c366004620033c4565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200023f565b348015620003a957600080fd5b506200023562000999565b348015620003c157600080fd5b5062000264620003d3366004620034c5565b62000a8c565b348015620003e657600080fd5b5062000235620003f836600462003543565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004c757600080fd5b506200021b620004d936600462003654565b62000b8c565b348015620004ec57600080fd5b506200021b620004fe3660046200373b565b62000e12565b3480156200051157600080fd5b506200021b62000ffa565b3480156200052957600080fd5b506200021b6200053b36600462003654565b62001010565b3480156200054e57600080fd5b50620002b2620005603660046200338c565b6089602052600090815260409020546001600160a01b031681565b3480156200058857600080fd5b506055546001600160a01b0316620002b2565b348015620005a857600080fd5b50608c54620002b2906001600160a01b031681565b348015620005ca57600080fd5b5062000235608e5481565b348015620005e257600080fd5b50620005ec600081565b60405160ff90911681526020016200023f565b3480156200060c57600080fd5b50620002b26200061e36600462003791565b620015d2565b3480156200063157600080fd5b50608754620006439063ffffffff1681565b60405163ffffffff90911681526020016200023f565b3480156200066657600080fd5b50608b54620002b2906001600160a01b031681565b6200021b6200068c36600462003845565b6200173e565b3480156200069f57600080fd5b506200021b620019f2565b348015620006b757600080fd5b5062000264620006c93660046200338c565b60886020526000908152604090205460ff1681565b348015620006eb57600080fd5b506200021b620006fd3660046200338c565b62001aa4565b3480156200071057600080fd5b5062000643600081565b3480156200072757600080fd5b506200021b62000739366004620033c4565b62001ae9565b3480156200074c57600080fd5b50620005ec600181565b608e54341115620007fa5760405162461bcd60e51b815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6200080a86868686868662001b7f565b505050505050565b608c546001600160a01b03163314620008ba5760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c462002125565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b62000953620021fe565b608e55565b62000962620021fe565b608780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b602154600090819081805b602081101562000a83578260011660010362000a045760018160208110620009d057620009d0620038ad565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000a31565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a3e6002846200390b565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000a7a9062003947565b915050620009a4565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000b7f578160011660010362000b095786818151811062000ac75762000ac7620038ad565b60200260200101518360405160200162000aeb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000b5b565b8287828151811062000b1f5762000b1f620038ad565b602002602001015160405160200162000b42929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000b686002836200390b565b91508062000b768162003947565b91505062000a9c565b5050909114949350505050565b60225460ff161562000c2d5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b62000c438a8a8a8a8a8a8a8a8a8a60016200225a565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b03851690849062000c869089908b908790602401620039df565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162000ceb919062003a18565b60006040518083038185875af1925050503d806000811462000d2a576040519150601f19603f3d011682016040523d82523d6000602084013e62000d2f565b606091505b505090508062000da75760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff161580801562000e335750600054600160ff909116105b8062000e4f5750303b15801562000e4f575060005460ff166001145b62000ec35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007f1565b6000805460ff19166001179055801562000f0457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d8290556703782dace9d90000608e55801562000ff357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b62001004620021fe565b620008c46000620025e7565b60225460ff1615620010b15760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b620010c78a8a8a8a8a8a8a8a8a8a60006200225a565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620011e657604080516000808252602082019092526001600160a01b03851690849060405162001122919062003a18565b60006040518083038185875af1925050503d806000811462001161576040519150601f19603f3d011682016040523d82523d6000602084013e62001166565b606091505b5050905080620011df5760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c4544000000000000000000000000000000000000000000000000006064820152608401620007f1565b5062001568565b60875463ffffffff908116908716036200121657620012106001600160a01b038616848462002651565b62001568565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620014d457600080600085806020019051810190620012b6919062003a8a565b925092509250600085848484604051620012d0906200322c565b620012de9392919062003b0b565b8190604051809103906000f5905080158015620012ff573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af11580156200136d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001393919062003b57565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620014c29392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001565565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200153d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001563919062003b57565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162001655906200322c565b601f1982820381018352601f90910116604081905262001682908d908d908d908d908d9060200162003ba2565b60408051601f1981840301815290829052620016a2929160200162003be3565b604051602081830303815290604052805190602001206040516020016200171894939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620017df5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff90811690841603620018625760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620018af9260019263ffffffff9092169133918991899134918a919062003c16565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200197f9062002701565b608b546001600160a01b03166333d6247d6200199a62000999565b6040518263ffffffff1660e01b8152600401620019b991815260200190565b600060405180830381600087803b158015620019d457600080fd5b505af1158015620019e9573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001a9a5760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c462002860565b62001aae620021fe565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001af3620021fe565b6001600160a01b03811662001b715760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007f1565b62001b7c81620025e7565b50565b60225460ff161562001c205760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff9081169086160362001ca35760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b60008060606001600160a01b03891662001d385785341462001d2e5760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007f1565b6000915062001fc2565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001e1f576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562001de6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e0c919062003b57565b5060208101518151909450925062001fc0565b841562001e345762001e348a88888862002910565b62001e4b6001600160a01b038b1633308a62002f35565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001ea2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001ecc919081019062003c82565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001f0b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001f35919081019062003c82565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001f74573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f9a919062003cbb565b60405160200162001fae9392919062003b0b565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200200498979695949392919062003c16565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620020ac9062002701565b608b546001600160a01b03166333d6247d620020c762000999565b6040518263ffffffff1660e01b8152600401620020e691815260200190565b600060405180830381600087803b1580156200210157600080fd5b505af115801562002116573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff1615620021c65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6055546001600160a01b03163314620008c45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007f1565b63ffffffff8a1660009081526088602052604090205460ff1615620022e75760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562002374573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200239a919062003cdb565b90508015801590620023b95750608d54620023b6824262003cf5565b10155b6200242d5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c4944000000000000000000000000000000000000006064820152608401620007f1565b60875463ffffffff878116911614620024af5760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000006064820152608401620007f1565b60875460009063ffffffff16620024c8575088620024cb565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d82015260518101899052607180820193909352815180820390930183526091019052805191012062002599908e8e63ffffffff168462000a8c565b620021165760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c49446044820152606401620007f1565b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620026fc9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002f8e565b505050565b806001620027126020600262003e48565b6200271e919062003cf5565b60215410620027965760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007f1565b600160216000828254620027ab919062003e56565b909155505060215460005b6020811015620028555781600116600103620027eb578260018260208110620027e357620027e3620038ad565b015550505050565b60018160208110620028015762002801620038ad565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200283e91906200390b565b9150806200284c8162003947565b915050620027b6565b50620026fc62003e71565b60225460ff1615620028db5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620007f1565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200295383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200307a92505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002c55576000808080808080620029b6896004818d62003ea0565b810190620029c5919062003ecc565b9650965096509650965096509650336001600160a01b0316876001600160a01b03161462002a5c5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038616301462002adc5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b8a851462002b535760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002c01919062003a18565b6000604051808303816000865af19150503d806000811462002c40576040519150601f19603f3d011682016040523d82523d6000602084013e62002c45565b606091505b5050505050505050505062000ff3565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002ce85760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007f1565b60008080808080808062002d008a6004818e62003ea0565b81019062002d0f919062003f27565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462002da85760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038716301462002e285760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002edf919062003a18565b6000604051808303816000865af19150503d806000811462002f1e576040519150601f19603f3d011682016040523d82523d6000602084013e62002f23565b606091505b50505050505050505050505050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262002f889085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002697565b50505050565b600062002fe5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620030819092919063ffffffff16565b805190915015620026fc578080602001905181019062003006919062003b57565b620026fc5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007f1565b6020015190565b60606200309284846000856200309c565b90505b9392505050565b606082471015620031165760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401620007f1565b6001600160a01b0385163b6200316f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007f1565b600080866001600160a01b031685876040516200318d919062003a18565b60006040518083038185875af1925050503d8060008114620031cc576040519150601f19603f3d011682016040523d82523d6000602084013e620031d1565b606091505b5091509150620031e3828286620031ee565b979650505050505050565b60608315620031ff57508162003095565b825115620032105782518084602001fd5b8160405162461bcd60e51b8152600401620007f1919062003fb3565b611a788062003fc983390190565b6001600160a01b038116811462001b7c57600080fd5b80356200325d816200323a565b919050565b803563ffffffff811681146200325d57600080fd5b60008083601f8401126200328a57600080fd5b50813567ffffffffffffffff811115620032a357600080fd5b602083019150836020828501011115620032bc57600080fd5b9250929050565b60008060008060008060a08789031215620032dd57600080fd5b8635620032ea816200323a565b9550620032fa6020880162003262565b945060408701356200330c816200323a565b935060608701359250608087013567ffffffffffffffff8111156200333057600080fd5b6200333e89828a0162003277565b979a9699509497509295939492505050565b600080604083850312156200336457600080fd5b6200336f8362003262565b9150602083013562003381816200323a565b809150509250929050565b6000602082840312156200339f57600080fd5b5035919050565b600060208284031215620033b957600080fd5b620030958262003262565b600060208284031215620033d757600080fd5b813562003095816200323a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200343f576200343f620033e4565b604052919050565b600082601f8301126200345957600080fd5b8135602067ffffffffffffffff821115620034785762003478620033e4565b8160051b6200348982820162003413565b9283528481018201928281019087851115620034a457600080fd5b83870192505b84831015620031e357823582529183019190830190620034aa565b60008060008060808587031215620034dc57600080fd5b84359350602085013567ffffffffffffffff80821115620034fc57600080fd5b6200350a8883890162003447565b94506040870135915080821682146200352257600080fd5b509396929550929360600135925050565b60ff8116811462001b7c57600080fd5b600080600080600080600060e0888a0312156200355f57600080fd5b87356200356c8162003533565b96506200357c6020890162003262565b955060408801356200358e816200323a565b94506200359e6060890162003262565b93506080880135620035b0816200323a565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620035ea57620035ea620033e4565b50601f01601f191660200190565b600082601f8301126200360a57600080fd5b8135620036216200361b82620035cd565b62003413565b8181528460208386010111156200363757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200367557600080fd5b8a3567ffffffffffffffff808211156200368e57600080fd5b6200369c8e838f0162003447565b9b50620036ac60208e0162003262565b9a5060408d0135995060608d01359850620036ca60808e0162003262565b9750620036da60a08e0162003250565b9650620036ea60c08e0162003262565b9550620036fa60e08e0162003250565b94506101008d013593506101208d01359150808211156200371a57600080fd5b50620037298d828e01620035f8565b9150509295989b9194979a5092959850565b600080600080608085870312156200375257600080fd5b6200375d8562003262565b935060208501356200376f816200323a565b9250604085013562003781816200323a565b9396929550929360600135925050565b600080600080600080600060a0888a031215620037ad57600080fd5b620037b88862003262565b96506020880135620037ca816200323a565b9550604088013567ffffffffffffffff80821115620037e857600080fd5b620037f68b838c0162003277565b909750955060608a01359150808211156200381057600080fd5b506200381f8a828b0162003277565b9094509250506080880135620038358162003533565b8091505092959891949750929550565b6000806000606084860312156200385b57600080fd5b620038668462003262565b9250602084013562003878816200323a565b9150604084013567ffffffffffffffff8111156200389557600080fd5b620038a386828701620035f8565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003942577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200397b576200397b620038dc565b5060010190565b60005b838110156200399f57818101518382015260200162003985565b8381111562002f885750506000910152565b60008151808452620039cb81602086016020860162003982565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003a0f6060830184620039b1565b95945050505050565b6000825162003a2c81846020870162003982565b9190910192915050565b600082601f83011262003a4857600080fd5b815162003a596200361b82620035cd565b81815284602083860101111562003a6f57600080fd5b62003a8282602083016020870162003982565b949350505050565b60008060006060848603121562003aa057600080fd5b835167ffffffffffffffff8082111562003ab957600080fd5b62003ac78783880162003a36565b9450602086015191508082111562003ade57600080fd5b5062003aed8682870162003a36565b925050604084015162003b008162003533565b809150509250925092565b60608152600062003b206060830186620039b1565b828103602084015262003b348186620039b1565b91505060ff83166040830152949350505050565b801515811462001b7c57600080fd5b60006020828403121562003b6a57600080fd5b8151620030958162003b48565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003bb860608301878962003b77565b828103602084015262003bcd81868862003b77565b91505060ff831660408301529695505050505050565b6000835162003bf781846020880162003982565b83519083019062003c0d81836020880162003982565b01949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003c6982850187620039b1565b925080851660e085015250509998505050505050505050565b60006020828403121562003c9557600080fd5b815167ffffffffffffffff81111562003cad57600080fd5b62003a828482850162003a36565b60006020828403121562003cce57600080fd5b8151620030958162003533565b60006020828403121562003cee57600080fd5b5051919050565b60008282101562003d0a5762003d0a620038dc565b500390565b600181815b8085111562003d6e57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d525762003d52620038dc565b8085161562003d6057918102915b93841c939080029062003d14565b509250929050565b60008262003d875750600162000943565b8162003d965750600062000943565b816001811462003daf576002811462003dba5762003dda565b600191505062000943565b60ff84111562003dce5762003dce620038dc565b50506001821b62000943565b5060208310610133831016604e8410600b841016171562003dff575081810a62000943565b62003e0b838362003d0f565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003e405762003e40620038dc565b029392505050565b600062003095838362003d76565b6000821982111562003e6c5762003e6c620038dc565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000808585111562003eb157600080fd5b8386111562003ebf57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003ee857600080fd5b873562003ef5816200323a565b9650602088013562003f07816200323a565b955060408801359450606088013593506080880135620035b08162003533565b600080600080600080600080610100898b03121562003f4557600080fd5b883562003f52816200323a565b9750602089013562003f64816200323a565b96506040890135955060608901359450608089013562003f848162003b48565b935060a089013562003f968162003533565b979a969950949793969295929450505060c08201359160e0013590565b602081526000620030956020830184620039b156fe60c06040523480156200001157600080fd5b5060405162001a7838038062001a788339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516115be620004ba600039600061053001526000818161036f01526104fa01526115be6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b60405161019191906112d5565b60405180910390f35b6101ad6101a8366004611371565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad61020436600461139b565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad610276366004611371565b610552565b6101ad610289366004611371565b61059e565b6101c161029c3660046113d7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d23660046113d7565b60066020526000908152604090205481565b610184610645565b6101ad6102fa366004611371565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad610352366004611371565b6106ed565b6101ad610365366004611371565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f3660046113f9565b6107b2565b005b6101c16103b436600461146c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6060600380546104379061149f565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061149f565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f56565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611521565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c838361101e565b50600192915050565b6060600480546104379061149f565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c8383611124565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661088183611539565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ee3908490611521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4991815260200190565b60405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f81610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166110815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b80600260008282546110939190611521565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906110cd908490611521565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156112495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611285908490611571565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c27565b600060208083528351808285015260005b81811015611302578581018301518582016040015282016112e6565b81811115611314576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136c57600080fd5b919050565b6000806040838503121561138457600080fd5b61138d83611348565b946020939093013593505050565b6000806000606084860312156113b057600080fd5b6113b984611348565b92506113c760208501611348565b9150604084013590509250925092565b6000602082840312156113e957600080fd5b6113f282611348565b9392505050565b600080600080600080600060e0888a03121561141457600080fd5b61141d88611348565b965061142b60208901611348565b95506040880135945060608801359350608088013560ff8116811461144f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561147f57600080fd5b61148883611348565b915061149660208401611348565b90509250929050565b600181811c908216806114b357607f821691505b6020821081036114ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611534576115346114f2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156a5761156a6114f2565b5060010190565b600082821015611583576115836114f2565b50039056fea2646970667358221220dc9c54325b6ec8c11c8bc6a1630cfb64202b6d54611cd1004e705ceca7826a4f64736f6c634300080f0033a2646970667358221220c467ba10b618fc297021f80dcd4868a7cf64d7fc688e050fefecaa7192f4dd1e64736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001ff5760003560e01c80637b6323c11162000117578063d02103ca11620000a1578063e7a5b4ea116200006c578063e7a5b4ea14620006de578063ed6be5c91462000703578063f2fde38b146200071a578063ff634ed7146200073f57600080fd5b8063d02103ca1462000659578063d96a15f7146200067b578063dbc169761462000692578063e737588114620006aa57600080fd5b806391e57e2d11620000e257806391e57e2d14620005bd578063a08e8a0814620005d5578063aaa13cc214620005ff578063bab161bf146200062457600080fd5b80637b6323c1146200051c57806381b1c17414620005415780638da5cb5b146200057b5780638f611519146200059b57600080fd5b80632dfdf0b511620001995780633e19704311620001645780633e19704314620003d95780634638554914620004ba5780636555954014620004df578063715018a6146200050457600080fd5b80632dfdf0b51462000315578063318aee3d146200032d5780633ae05047146200039c5780633da8168214620003b457600080fd5b80632072f6c511620001da5780632072f6c5146200027557806322e95f2c146200028d5780632b5e42e714620002cb5780632c3f58cd14620002f057600080fd5b80630871e97114620002045780630e1da6c3146200021d57806315064c961462000248575b600080fd5b6200021b62000215366004620032c3565b62000756565b005b3480156200022a57600080fd5b5062000235608d5481565b6040519081526020015b60405180910390f35b3480156200025557600080fd5b50602254620002649060ff1681565b60405190151581526020016200023f565b3480156200028257600080fd5b506200021b62000812565b3480156200029a57600080fd5b50620002b2620002ac36600462003350565b620008c6565b6040516001600160a01b0390911681526020016200023f565b348015620002d857600080fd5b506200021b620002ea3660046200338c565b62000949565b348015620002fd57600080fd5b506200021b6200030f366004620033a6565b62000958565b3480156200032257600080fd5b506200023560215481565b3480156200033a57600080fd5b50620003776200034c366004620033c4565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200023f565b348015620003a957600080fd5b506200023562000999565b348015620003c157600080fd5b5062000264620003d3366004620034c5565b62000a8c565b348015620003e657600080fd5b5062000235620003f836600462003543565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004c757600080fd5b506200021b620004d936600462003654565b62000b8c565b348015620004ec57600080fd5b506200021b620004fe3660046200373b565b62000e12565b3480156200051157600080fd5b506200021b62000ffa565b3480156200052957600080fd5b506200021b6200053b36600462003654565b62001010565b3480156200054e57600080fd5b50620002b2620005603660046200338c565b6089602052600090815260409020546001600160a01b031681565b3480156200058857600080fd5b506055546001600160a01b0316620002b2565b348015620005a857600080fd5b50608c54620002b2906001600160a01b031681565b348015620005ca57600080fd5b5062000235608e5481565b348015620005e257600080fd5b50620005ec600081565b60405160ff90911681526020016200023f565b3480156200060c57600080fd5b50620002b26200061e36600462003791565b620015d2565b3480156200063157600080fd5b50608754620006439063ffffffff1681565b60405163ffffffff90911681526020016200023f565b3480156200066657600080fd5b50608b54620002b2906001600160a01b031681565b6200021b6200068c36600462003845565b6200173e565b3480156200069f57600080fd5b506200021b620019f2565b348015620006b757600080fd5b5062000264620006c93660046200338c565b60886020526000908152604090205460ff1681565b348015620006eb57600080fd5b506200021b620006fd3660046200338c565b62001aa4565b3480156200071057600080fd5b5062000643600081565b3480156200072757600080fd5b506200021b62000739366004620033c4565b62001ae9565b3480156200074c57600080fd5b50620005ec600181565b608e54341115620007fa5760405162461bcd60e51b815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6200080a86868686868662001b7f565b505050505050565b608c546001600160a01b03163314620008ba5760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c462002125565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b62000953620021fe565b608e55565b62000962620021fe565b608780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b602154600090819081805b602081101562000a83578260011660010362000a045760018160208110620009d057620009d0620038ad565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000a31565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a3e6002846200390b565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000a7a9062003947565b915050620009a4565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000b7f578160011660010362000b095786818151811062000ac75762000ac7620038ad565b60200260200101518360405160200162000aeb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000b5b565b8287828151811062000b1f5762000b1f620038ad565b602002602001015160405160200162000b42929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000b686002836200390b565b91508062000b768162003947565b91505062000a9c565b5050909114949350505050565b60225460ff161562000c2d5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b62000c438a8a8a8a8a8a8a8a8a8a60016200225a565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b03851690849062000c869089908b908790602401620039df565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162000ceb919062003a18565b60006040518083038185875af1925050503d806000811462000d2a576040519150601f19603f3d011682016040523d82523d6000602084013e62000d2f565b606091505b505090508062000da75760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff161580801562000e335750600054600160ff909116105b8062000e4f5750303b15801562000e4f575060005460ff166001145b62000ec35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007f1565b6000805460ff19166001179055801562000f0457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d8290556703782dace9d90000608e55801562000ff357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b62001004620021fe565b620008c46000620025e7565b60225460ff1615620010b15760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b620010c78a8a8a8a8a8a8a8a8a8a60006200225a565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620011e657604080516000808252602082019092526001600160a01b03851690849060405162001122919062003a18565b60006040518083038185875af1925050503d806000811462001161576040519150601f19603f3d011682016040523d82523d6000602084013e62001166565b606091505b5050905080620011df5760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c4544000000000000000000000000000000000000000000000000006064820152608401620007f1565b5062001568565b60875463ffffffff908116908716036200121657620012106001600160a01b038616848462002651565b62001568565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620014d457600080600085806020019051810190620012b6919062003a8a565b925092509250600085848484604051620012d0906200322c565b620012de9392919062003b0b565b8190604051809103906000f5905080158015620012ff573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af11580156200136d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001393919062003b57565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620014c29392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001565565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200153d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001563919062003b57565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162001655906200322c565b601f1982820381018352601f90910116604081905262001682908d908d908d908d908d9060200162003ba2565b60408051601f1981840301815290829052620016a2929160200162003be3565b604051602081830303815290604052805190602001206040516020016200171894939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620017df5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff90811690841603620018625760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620018af9260019263ffffffff9092169133918991899134918a919062003c16565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200197f9062002701565b608b546001600160a01b03166333d6247d6200199a62000999565b6040518263ffffffff1660e01b8152600401620019b991815260200190565b600060405180830381600087803b158015620019d457600080fd5b505af1158015620019e9573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001a9a5760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c462002860565b62001aae620021fe565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001af3620021fe565b6001600160a01b03811662001b715760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007f1565b62001b7c81620025e7565b50565b60225460ff161562001c205760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff9081169086160362001ca35760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b60008060606001600160a01b03891662001d385785341462001d2e5760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007f1565b6000915062001fc2565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001e1f576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562001de6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e0c919062003b57565b5060208101518151909450925062001fc0565b841562001e345762001e348a88888862002910565b62001e4b6001600160a01b038b1633308a62002f35565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001ea2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001ecc919081019062003c82565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001f0b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001f35919081019062003c82565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001f74573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f9a919062003cbb565b60405160200162001fae9392919062003b0b565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200200498979695949392919062003c16565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620020ac9062002701565b608b546001600160a01b03166333d6247d620020c762000999565b6040518263ffffffff1660e01b8152600401620020e691815260200190565b600060405180830381600087803b1580156200210157600080fd5b505af115801562002116573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff1615620021c65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6055546001600160a01b03163314620008c45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007f1565b63ffffffff8a1660009081526088602052604090205460ff1615620022e75760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562002374573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200239a919062003cdb565b90508015801590620023b95750608d54620023b6824262003cf5565b10155b6200242d5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c4944000000000000000000000000000000000000006064820152608401620007f1565b60875463ffffffff878116911614620024af5760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000006064820152608401620007f1565b60875460009063ffffffff16620024c8575088620024cb565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d82015260518101899052607180820193909352815180820390930183526091019052805191012062002599908e8e63ffffffff168462000a8c565b620021165760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c49446044820152606401620007f1565b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620026fc9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002f8e565b505050565b806001620027126020600262003e48565b6200271e919062003cf5565b60215410620027965760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007f1565b600160216000828254620027ab919062003e56565b909155505060215460005b6020811015620028555781600116600103620027eb578260018260208110620027e357620027e3620038ad565b015550505050565b60018160208110620028015762002801620038ad565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200283e91906200390b565b9150806200284c8162003947565b915050620027b6565b50620026fc62003e71565b60225460ff1615620028db5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620007f1565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200295383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200307a92505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002c55576000808080808080620029b6896004818d62003ea0565b810190620029c5919062003ecc565b9650965096509650965096509650336001600160a01b0316876001600160a01b03161462002a5c5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038616301462002adc5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b8a851462002b535760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002c01919062003a18565b6000604051808303816000865af19150503d806000811462002c40576040519150601f19603f3d011682016040523d82523d6000602084013e62002c45565b606091505b5050505050505050505062000ff3565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002ce85760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007f1565b60008080808080808062002d008a6004818e62003ea0565b81019062002d0f919062003f27565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462002da85760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038716301462002e285760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002edf919062003a18565b6000604051808303816000865af19150503d806000811462002f1e576040519150601f19603f3d011682016040523d82523d6000602084013e62002f23565b606091505b50505050505050505050505050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262002f889085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002697565b50505050565b600062002fe5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620030819092919063ffffffff16565b805190915015620026fc578080602001905181019062003006919062003b57565b620026fc5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007f1565b6020015190565b60606200309284846000856200309c565b90505b9392505050565b606082471015620031165760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401620007f1565b6001600160a01b0385163b6200316f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007f1565b600080866001600160a01b031685876040516200318d919062003a18565b60006040518083038185875af1925050503d8060008114620031cc576040519150601f19603f3d011682016040523d82523d6000602084013e620031d1565b606091505b5091509150620031e3828286620031ee565b979650505050505050565b60608315620031ff57508162003095565b825115620032105782518084602001fd5b8160405162461bcd60e51b8152600401620007f1919062003fb3565b611a788062003fc983390190565b6001600160a01b038116811462001b7c57600080fd5b80356200325d816200323a565b919050565b803563ffffffff811681146200325d57600080fd5b60008083601f8401126200328a57600080fd5b50813567ffffffffffffffff811115620032a357600080fd5b602083019150836020828501011115620032bc57600080fd5b9250929050565b60008060008060008060a08789031215620032dd57600080fd5b8635620032ea816200323a565b9550620032fa6020880162003262565b945060408701356200330c816200323a565b935060608701359250608087013567ffffffffffffffff8111156200333057600080fd5b6200333e89828a0162003277565b979a9699509497509295939492505050565b600080604083850312156200336457600080fd5b6200336f8362003262565b9150602083013562003381816200323a565b809150509250929050565b6000602082840312156200339f57600080fd5b5035919050565b600060208284031215620033b957600080fd5b620030958262003262565b600060208284031215620033d757600080fd5b813562003095816200323a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200343f576200343f620033e4565b604052919050565b600082601f8301126200345957600080fd5b8135602067ffffffffffffffff821115620034785762003478620033e4565b8160051b6200348982820162003413565b9283528481018201928281019087851115620034a457600080fd5b83870192505b84831015620031e357823582529183019190830190620034aa565b60008060008060808587031215620034dc57600080fd5b84359350602085013567ffffffffffffffff80821115620034fc57600080fd5b6200350a8883890162003447565b94506040870135915080821682146200352257600080fd5b509396929550929360600135925050565b60ff8116811462001b7c57600080fd5b600080600080600080600060e0888a0312156200355f57600080fd5b87356200356c8162003533565b96506200357c6020890162003262565b955060408801356200358e816200323a565b94506200359e6060890162003262565b93506080880135620035b0816200323a565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620035ea57620035ea620033e4565b50601f01601f191660200190565b600082601f8301126200360a57600080fd5b8135620036216200361b82620035cd565b62003413565b8181528460208386010111156200363757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200367557600080fd5b8a3567ffffffffffffffff808211156200368e57600080fd5b6200369c8e838f0162003447565b9b50620036ac60208e0162003262565b9a5060408d0135995060608d01359850620036ca60808e0162003262565b9750620036da60a08e0162003250565b9650620036ea60c08e0162003262565b9550620036fa60e08e0162003250565b94506101008d013593506101208d01359150808211156200371a57600080fd5b50620037298d828e01620035f8565b9150509295989b9194979a5092959850565b600080600080608085870312156200375257600080fd5b6200375d8562003262565b935060208501356200376f816200323a565b9250604085013562003781816200323a565b9396929550929360600135925050565b600080600080600080600060a0888a031215620037ad57600080fd5b620037b88862003262565b96506020880135620037ca816200323a565b9550604088013567ffffffffffffffff80821115620037e857600080fd5b620037f68b838c0162003277565b909750955060608a01359150808211156200381057600080fd5b506200381f8a828b0162003277565b9094509250506080880135620038358162003533565b8091505092959891949750929550565b6000806000606084860312156200385b57600080fd5b620038668462003262565b9250602084013562003878816200323a565b9150604084013567ffffffffffffffff8111156200389557600080fd5b620038a386828701620035f8565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003942577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200397b576200397b620038dc565b5060010190565b60005b838110156200399f57818101518382015260200162003985565b8381111562002f885750506000910152565b60008151808452620039cb81602086016020860162003982565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003a0f6060830184620039b1565b95945050505050565b6000825162003a2c81846020870162003982565b9190910192915050565b600082601f83011262003a4857600080fd5b815162003a596200361b82620035cd565b81815284602083860101111562003a6f57600080fd5b62003a8282602083016020870162003982565b949350505050565b60008060006060848603121562003aa057600080fd5b835167ffffffffffffffff8082111562003ab957600080fd5b62003ac78783880162003a36565b9450602086015191508082111562003ade57600080fd5b5062003aed8682870162003a36565b925050604084015162003b008162003533565b809150509250925092565b60608152600062003b206060830186620039b1565b828103602084015262003b348186620039b1565b91505060ff83166040830152949350505050565b801515811462001b7c57600080fd5b60006020828403121562003b6a57600080fd5b8151620030958162003b48565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003bb860608301878962003b77565b828103602084015262003bcd81868862003b77565b91505060ff831660408301529695505050505050565b6000835162003bf781846020880162003982565b83519083019062003c0d81836020880162003982565b01949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003c6982850187620039b1565b925080851660e085015250509998505050505050505050565b60006020828403121562003c9557600080fd5b815167ffffffffffffffff81111562003cad57600080fd5b62003a828482850162003a36565b60006020828403121562003cce57600080fd5b8151620030958162003533565b60006020828403121562003cee57600080fd5b5051919050565b60008282101562003d0a5762003d0a620038dc565b500390565b600181815b8085111562003d6e57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d525762003d52620038dc565b8085161562003d6057918102915b93841c939080029062003d14565b509250929050565b60008262003d875750600162000943565b8162003d965750600062000943565b816001811462003daf576002811462003dba5762003dda565b600191505062000943565b60ff84111562003dce5762003dce620038dc565b50506001821b62000943565b5060208310610133831016604e8410600b841016171562003dff575081810a62000943565b62003e0b838362003d0f565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003e405762003e40620038dc565b029392505050565b600062003095838362003d76565b6000821982111562003e6c5762003e6c620038dc565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000808585111562003eb157600080fd5b8386111562003ebf57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003ee857600080fd5b873562003ef5816200323a565b9650602088013562003f07816200323a565b955060408801359450606088013593506080880135620035b08162003533565b600080600080600080600080610100898b03121562003f4557600080fd5b883562003f52816200323a565b9750602089013562003f64816200323a565b96506040890135955060608901359450608089013562003f848162003b48565b935060a089013562003f968162003533565b979a969950949793969295929450505060c08201359160e0013590565b602081526000620030956020830184620039b156fe60c06040523480156200001157600080fd5b5060405162001a7838038062001a788339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516115be620004ba600039600061053001526000818161036f01526104fa01526115be6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b60405161019191906112d5565b60405180910390f35b6101ad6101a8366004611371565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad61020436600461139b565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad610276366004611371565b610552565b6101ad610289366004611371565b61059e565b6101c161029c3660046113d7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d23660046113d7565b60066020526000908152604090205481565b610184610645565b6101ad6102fa366004611371565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad610352366004611371565b6106ed565b6101ad610365366004611371565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f3660046113f9565b6107b2565b005b6101c16103b436600461146c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6060600380546104379061149f565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061149f565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f56565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611521565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c838361101e565b50600192915050565b6060600480546104379061149f565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c8383611124565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661088183611539565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ee3908490611521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4991815260200190565b60405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f81610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166110815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b80600260008282546110939190611521565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906110cd908490611521565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156112495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611285908490611571565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c27565b600060208083528351808285015260005b81811015611302578581018301518582016040015282016112e6565b81811115611314576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136c57600080fd5b919050565b6000806040838503121561138457600080fd5b61138d83611348565b946020939093013593505050565b6000806000606084860312156113b057600080fd5b6113b984611348565b92506113c760208501611348565b9150604084013590509250925092565b6000602082840312156113e957600080fd5b6113f282611348565b9392505050565b600080600080600080600060e0888a03121561141457600080fd5b61141d88611348565b965061142b60208901611348565b95506040880135945060608801359350608088013560ff8116811461144f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561147f57600080fd5b61148883611348565b915061149660208401611348565b90509250929050565b600181811c908216806114b357607f821691505b6020821081036114ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611534576115346114f2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156a5761156a6114f2565b5060010190565b600082821015611583576115836114f2565b50039056fea2646970667358221220dc9c54325b6ec8c11c8bc6a1630cfb64202b6d54611cd1004e705ceca7826a4f64736f6c634300080f0033a2646970667358221220c467ba10b618fc297021f80dcd4868a7cf64d7fc688e050fefecaa7192f4dd1e64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50615b04806100206000396000f3fe608060405260043610620001ff5760003560e01c80637b6323c11162000117578063d02103ca11620000a1578063e7a5b4ea116200006c578063e7a5b4ea14620006de578063ed6be5c91462000703578063f2fde38b146200071a578063ff634ed7146200073f57600080fd5b8063d02103ca1462000659578063d96a15f7146200067b578063dbc169761462000692578063e737588114620006aa57600080fd5b806391e57e2d11620000e257806391e57e2d14620005bd578063a08e8a0814620005d5578063aaa13cc214620005ff578063bab161bf146200062457600080fd5b80637b6323c1146200051c57806381b1c17414620005415780638da5cb5b146200057b5780638f611519146200059b57600080fd5b80632dfdf0b511620001995780633e19704311620001645780633e19704314620003d95780634638554914620004ba5780636555954014620004df578063715018a6146200050457600080fd5b80632dfdf0b51462000315578063318aee3d146200032d5780633ae05047146200039c5780633da8168214620003b457600080fd5b80632072f6c511620001da5780632072f6c5146200027557806322e95f2c146200028d5780632b5e42e714620002cb5780632c3f58cd14620002f057600080fd5b80630871e97114620002045780630e1da6c3146200021d57806315064c961462000248575b600080fd5b6200021b6200021536600462003351565b62000756565b005b3480156200022a57600080fd5b5062000235608d5481565b6040519081526020015b60405180910390f35b3480156200025557600080fd5b50602254620002649060ff1681565b60405190151581526020016200023f565b3480156200028257600080fd5b506200021b62000812565b3480156200029a57600080fd5b50620002b2620002ac366004620033de565b620008c6565b6040516001600160a01b0390911681526020016200023f565b348015620002d857600080fd5b506200021b620002ea3660046200341a565b62000949565b348015620002fd57600080fd5b506200021b6200030f36600462003434565b62000958565b3480156200032257600080fd5b506200023560215481565b3480156200033a57600080fd5b50620003776200034c36600462003452565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200023f565b348015620003a957600080fd5b506200023562000999565b348015620003c157600080fd5b5062000264620003d336600462003553565b62000a8c565b348015620003e657600080fd5b5062000235620003f8366004620035d1565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004c757600080fd5b506200021b620004d9366004620036e2565b62000b8c565b348015620004ec57600080fd5b506200021b620004fe366004620037c9565b62000e12565b3480156200051157600080fd5b506200021b62001004565b3480156200052957600080fd5b506200021b6200053b366004620036e2565b6200101a565b3480156200054e57600080fd5b50620002b2620005603660046200341a565b6089602052600090815260409020546001600160a01b031681565b3480156200058857600080fd5b506055546001600160a01b0316620002b2565b348015620005a857600080fd5b50608c54620002b2906001600160a01b031681565b348015620005ca57600080fd5b5062000235608e5481565b348015620005e257600080fd5b50620005ec600081565b60405160ff90911681526020016200023f565b3480156200060c57600080fd5b50620002b26200061e3660046200381f565b620015dc565b3480156200063157600080fd5b50608754620006439063ffffffff1681565b60405163ffffffff90911681526020016200023f565b3480156200066657600080fd5b50608b54620002b2906001600160a01b031681565b6200021b6200068c366004620038d3565b62001748565b3480156200069f57600080fd5b506200021b620019fc565b348015620006b757600080fd5b5062000264620006c93660046200341a565b60886020526000908152604090205460ff1681565b348015620006eb57600080fd5b506200021b620006fd3660046200341a565b62001aae565b3480156200071057600080fd5b5062000643600081565b3480156200072757600080fd5b506200021b6200073936600462003452565b62001af3565b3480156200074c57600080fd5b50620005ec600181565b608e54341115620007fa5760405162461bcd60e51b815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6200080a86868686868662001b89565b505050505050565b608c546001600160a01b03163314620008ba5760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c46200212f565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b6200095362002208565b608e55565b6200096262002208565b608780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b602154600090819081805b602081101562000a83578260011660010362000a045760018160208110620009d057620009d06200393b565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000a31565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a3e60028462003999565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000a7a90620039d5565b915050620009a4565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000b7f578160011660010362000b095786818151811062000ac75762000ac76200393b565b60200260200101518360405160200162000aeb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000b5b565b8287828151811062000b1f5762000b1f6200393b565b602002602001015160405160200162000b42929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000b6860028362003999565b91508062000b7681620039d5565b91505062000a9c565b5050909114949350505050565b60225460ff161562000c2d5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b62000c438a8a8a8a8a8a8a8a8a8a600162002264565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b03851690849062000c869089908b90879060240162003a6d565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162000ceb919062003aa6565b60006040518083038185875af1925050503d806000811462000d2a576040519150601f19603f3d011682016040523d82523d6000602084013e62000d2f565b606091505b505090508062000da75760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff161580801562000e335750600054600160ff909116105b8062000e4f5750303b15801562000e4f575060005460ff166001145b62000ec35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007f1565b6000805460ff19166001179055801562000f0457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d8290556703782dace9d90000608e5562000f99620025f1565b801562000ffd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6200100e62002208565b620008c4600062002676565b60225460ff1615620010bb5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b620010d18a8a8a8a8a8a8a8a8a8a600062002264565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620011f057604080516000808252602082019092526001600160a01b0385169084906040516200112c919062003aa6565b60006040518083038185875af1925050503d80600081146200116b576040519150601f19603f3d011682016040523d82523d6000602084013e62001170565b606091505b5050905080620011e95760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c4544000000000000000000000000000000000000000000000000006064820152608401620007f1565b5062001572565b60875463ffffffff9081169087160362001220576200121a6001600160a01b0386168484620026e0565b62001572565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620014de57600080600085806020019051810190620012c0919062003b18565b925092509250600085848484604051620012da90620032ba565b620012e89392919062003b99565b8190604051809103906000f590508015801562001309573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001377573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200139d919062003be5565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620014cc9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200156f565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001547573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200156d919062003be5565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200165f90620032ba565b601f1982820381018352601f9091011660408190526200168c908d908d908d908d908d9060200162003c30565b60408051601f1981840301815290829052620016ac929160200162003c71565b604051602081830303815290604052805190602001206040516020016200172294939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620017e95760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff908116908416036200186c5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620018b99260019263ffffffff9092169133918991899134918a919062003ca4565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620019899062002790565b608b546001600160a01b03166333d6247d620019a462000999565b6040518263ffffffff1660e01b8152600401620019c391815260200190565b600060405180830381600087803b158015620019de57600080fd5b505af1158015620019f3573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001aa45760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c4620028ef565b62001ab862002208565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001afd62002208565b6001600160a01b03811662001b7b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007f1565b62001b868162002676565b50565b60225460ff161562001c2a5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff9081169086160362001cad5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b60008060606001600160a01b03891662001d425785341462001d385760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007f1565b6000915062001fcc565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001e29576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562001df0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e16919062003be5565b5060208101518151909450925062001fca565b841562001e3e5762001e3e8a8888886200299e565b62001e556001600160a01b038b1633308a62002fc3565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001eac573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001ed6919081019062003d10565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001f15573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001f3f919081019062003d10565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001f7e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001fa4919062003d49565b60405160200162001fb89392919062003b99565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200200e98979695949392919062003ca4565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620020b69062002790565b608b546001600160a01b03166333d6247d620020d162000999565b6040518263ffffffff1660e01b8152600401620020f091815260200190565b600060405180830381600087803b1580156200210b57600080fd5b505af115801562002120573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff1615620021d05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6055546001600160a01b03163314620008c45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007f1565b63ffffffff8a1660009081526088602052604090205460ff1615620022f15760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af11580156200237e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620023a4919062003d69565b90508015801590620023c35750608d54620023c0824262003d83565b10155b620024375760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c4944000000000000000000000000000000000000006064820152608401620007f1565b60875463ffffffff878116911614620024b95760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000006064820152608401620007f1565b60875460009063ffffffff16620024d2575088620024d5565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d820152605181018990526071808201939093528151808203909301835260910190528051910120620025a3908e8e63ffffffff168462000a8c565b620021205760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c49446044820152606401620007f1565b600054610100900460ff16620026705760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007f1565b620008c4335b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b0383166024820152604481018290526200278b9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526200301c565b505050565b806001620027a16020600262003ed6565b620027ad919062003d83565b60215410620028255760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007f1565b6001602160008282546200283a919062003ee4565b909155505060215460005b6020811015620028e457816001166001036200287a5782600182602081106200287257620028726200393b565b015550505050565b600181602081106200289057620028906200393b565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620028cd919062003999565b915080620028db81620039d5565b91505062002845565b506200278b62003eff565b60225460ff16620029695760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620007f1565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000620029e183838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200310892505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002ce357600080808080808062002a44896004818d62003f2e565b81019062002a53919062003f5a565b9650965096509650965096509650336001600160a01b0316876001600160a01b03161462002aea5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038616301462002b6a5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b8a851462002be15760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002c8f919062003aa6565b6000604051808303816000865af19150503d806000811462002cce576040519150601f19603f3d011682016040523d82523d6000602084013e62002cd3565b606091505b5050505050505050505062000ffd565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002d765760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007f1565b60008080808080808062002d8e8a6004818e62003f2e565b81019062002d9d919062003fb5565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462002e365760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038716301462002eb65760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002f6d919062003aa6565b6000604051808303816000865af19150503d806000811462002fac576040519150601f19603f3d011682016040523d82523d6000602084013e62002fb1565b606091505b50505050505050505050505050505050565b6040516001600160a01b0380851660248301528316604482015260648101829052620030169085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002726565b50505050565b600062003073826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166200310f9092919063ffffffff16565b8051909150156200278b578080602001905181019062003094919062003be5565b6200278b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007f1565b6020015190565b60606200312084846000856200312a565b90505b9392505050565b606082471015620031a45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401620007f1565b6001600160a01b0385163b620031fd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007f1565b600080866001600160a01b031685876040516200321b919062003aa6565b60006040518083038185875af1925050503d80600081146200325a576040519150601f19603f3d011682016040523d82523d6000602084013e6200325f565b606091505b5091509150620032718282866200327c565b979650505050505050565b606083156200328d57508162003123565b8251156200329e5782518084602001fd5b8160405162461bcd60e51b8152600401620007f1919062004041565b611a78806200405783390190565b6001600160a01b038116811462001b8657600080fd5b8035620032eb81620032c8565b919050565b803563ffffffff81168114620032eb57600080fd5b60008083601f8401126200331857600080fd5b50813567ffffffffffffffff8111156200333157600080fd5b6020830191508360208285010111156200334a57600080fd5b9250929050565b60008060008060008060a087890312156200336b57600080fd5b86356200337881620032c8565b95506200338860208801620032f0565b945060408701356200339a81620032c8565b935060608701359250608087013567ffffffffffffffff811115620033be57600080fd5b620033cc89828a0162003305565b979a9699509497509295939492505050565b60008060408385031215620033f257600080fd5b620033fd83620032f0565b915060208301356200340f81620032c8565b809150509250929050565b6000602082840312156200342d57600080fd5b5035919050565b6000602082840312156200344757600080fd5b6200312382620032f0565b6000602082840312156200346557600080fd5b81356200312381620032c8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620034cd57620034cd62003472565b604052919050565b600082601f830112620034e757600080fd5b8135602067ffffffffffffffff82111562003506576200350662003472565b8160051b62003517828201620034a1565b92835284810182019282810190878511156200353257600080fd5b83870192505b84831015620032715782358252918301919083019062003538565b600080600080608085870312156200356a57600080fd5b84359350602085013567ffffffffffffffff808211156200358a57600080fd5b6200359888838901620034d5565b9450604087013591508082168214620035b057600080fd5b509396929550929360600135925050565b60ff8116811462001b8657600080fd5b600080600080600080600060e0888a031215620035ed57600080fd5b8735620035fa81620035c1565b96506200360a60208901620032f0565b955060408801356200361c81620032c8565b94506200362c60608901620032f0565b935060808801356200363e81620032c8565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562003678576200367862003472565b50601f01601f191660200190565b600082601f8301126200369857600080fd5b8135620036af620036a9826200365b565b620034a1565b818152846020838601011115620036c557600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200370357600080fd5b8a3567ffffffffffffffff808211156200371c57600080fd5b6200372a8e838f01620034d5565b9b506200373a60208e01620032f0565b9a5060408d0135995060608d013598506200375860808e01620032f0565b97506200376860a08e01620032de565b96506200377860c08e01620032f0565b95506200378860e08e01620032de565b94506101008d013593506101208d0135915080821115620037a857600080fd5b50620037b78d828e0162003686565b9150509295989b9194979a5092959850565b60008060008060808587031215620037e057600080fd5b620037eb85620032f0565b93506020850135620037fd81620032c8565b925060408501356200380f81620032c8565b9396929550929360600135925050565b600080600080600080600060a0888a0312156200383b57600080fd5b6200384688620032f0565b965060208801356200385881620032c8565b9550604088013567ffffffffffffffff808211156200387657600080fd5b620038848b838c0162003305565b909750955060608a01359150808211156200389e57600080fd5b50620038ad8a828b0162003305565b9094509250506080880135620038c381620035c1565b8091505092959891949750929550565b600080600060608486031215620038e957600080fd5b620038f484620032f0565b925060208401356200390681620032c8565b9150604084013567ffffffffffffffff8111156200392357600080fd5b620039318682870162003686565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082620039d0577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003a095762003a096200396a565b5060010190565b60005b8381101562003a2d57818101518382015260200162003a13565b83811115620030165750506000910152565b6000815180845262003a5981602086016020860162003a10565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003a9d606083018462003a3f565b95945050505050565b6000825162003aba81846020870162003a10565b9190910192915050565b600082601f83011262003ad657600080fd5b815162003ae7620036a9826200365b565b81815284602083860101111562003afd57600080fd5b62003b1082602083016020870162003a10565b949350505050565b60008060006060848603121562003b2e57600080fd5b835167ffffffffffffffff8082111562003b4757600080fd5b62003b558783880162003ac4565b9450602086015191508082111562003b6c57600080fd5b5062003b7b8682870162003ac4565b925050604084015162003b8e81620035c1565b809150509250925092565b60608152600062003bae606083018662003a3f565b828103602084015262003bc2818662003a3f565b91505060ff83166040830152949350505050565b801515811462001b8657600080fd5b60006020828403121562003bf857600080fd5b8151620031238162003bd6565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003c4660608301878962003c05565b828103602084015262003c5b81868862003c05565b91505060ff831660408301529695505050505050565b6000835162003c8581846020880162003a10565b83519083019062003c9b81836020880162003a10565b01949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003cf78285018762003a3f565b925080851660e085015250509998505050505050505050565b60006020828403121562003d2357600080fd5b815167ffffffffffffffff81111562003d3b57600080fd5b62003b108482850162003ac4565b60006020828403121562003d5c57600080fd5b81516200312381620035c1565b60006020828403121562003d7c57600080fd5b5051919050565b60008282101562003d985762003d986200396a565b500390565b600181815b8085111562003dfc57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003de05762003de06200396a565b8085161562003dee57918102915b93841c939080029062003da2565b509250929050565b60008262003e155750600162000943565b8162003e245750600062000943565b816001811462003e3d576002811462003e485762003e68565b600191505062000943565b60ff84111562003e5c5762003e5c6200396a565b50506001821b62000943565b5060208310610133831016604e8410600b841016171562003e8d575081810a62000943565b62003e99838362003d9d565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003ece5762003ece6200396a565b029392505050565b600062003123838362003e04565b6000821982111562003efa5762003efa6200396a565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000808585111562003f3f57600080fd5b8386111562003f4d57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003f7657600080fd5b873562003f8381620032c8565b9650602088013562003f9581620032c8565b9550604088013594506060880135935060808801356200363e81620035c1565b600080600080600080600080610100898b03121562003fd357600080fd5b883562003fe081620032c8565b9750602089013562003ff281620032c8565b965060408901359550606089013594506080890135620040128162003bd6565b935060a08901356200402481620035c1565b979a969950949793969295929450505060c08201359160e0013590565b60208152600062003123602083018462003a3f56fe60c06040523480156200001157600080fd5b5060405162001a7838038062001a788339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516115be620004ba600039600061053001526000818161036f01526104fa01526115be6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b60405161019191906112d5565b60405180910390f35b6101ad6101a8366004611371565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad61020436600461139b565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad610276366004611371565b610552565b6101ad610289366004611371565b61059e565b6101c161029c3660046113d7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d23660046113d7565b60066020526000908152604090205481565b610184610645565b6101ad6102fa366004611371565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad610352366004611371565b6106ed565b6101ad610365366004611371565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f3660046113f9565b6107b2565b005b6101c16103b436600461146c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6060600380546104379061149f565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061149f565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f56565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611521565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c838361101e565b50600192915050565b6060600480546104379061149f565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c8383611124565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661088183611539565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ee3908490611521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4991815260200190565b60405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f81610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166110815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b80600260008282546110939190611521565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906110cd908490611521565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156112495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611285908490611571565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c27565b600060208083528351808285015260005b81811015611302578581018301518582016040015282016112e6565b81811115611314576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136c57600080fd5b919050565b6000806040838503121561138457600080fd5b61138d83611348565b946020939093013593505050565b6000806000606084860312156113b057600080fd5b6113b984611348565b92506113c760208501611348565b9150604084013590509250925092565b6000602082840312156113e957600080fd5b6113f282611348565b9392505050565b600080600080600080600060e0888a03121561141457600080fd5b61141d88611348565b965061142b60208901611348565b95506040880135945060608801359350608088013560ff8116811461144f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561147f57600080fd5b61148883611348565b915061149660208401611348565b90509250929050565b600181811c908216806114b357607f821691505b6020821081036114ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611534576115346114f2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156a5761156a6114f2565b5060010190565b600082821015611583576115836114f2565b50039056fea2646970667358221220dc9c54325b6ec8c11c8bc6a1630cfb64202b6d54611cd1004e705ceca7826a4f64736f6c634300080f0033a26469706673582212200919f5a3762d01f3cfafc4ef3510eb9345e2cfabcf15ccf729268403fdb9d61064736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001ff5760003560e01c80637b6323c11162000117578063d02103ca11620000a1578063e7a5b4ea116200006c578063e7a5b4ea14620006de578063ed6be5c91462000703578063f2fde38b146200071a578063ff634ed7146200073f57600080fd5b8063d02103ca1462000659578063d96a15f7146200067b578063dbc169761462000692578063e737588114620006aa57600080fd5b806391e57e2d11620000e257806391e57e2d14620005bd578063a08e8a0814620005d5578063aaa13cc214620005ff578063bab161bf146200062457600080fd5b80637b6323c1146200051c57806381b1c17414620005415780638da5cb5b146200057b5780638f611519146200059b57600080fd5b80632dfdf0b511620001995780633e19704311620001645780633e19704314620003d95780634638554914620004ba5780636555954014620004df578063715018a6146200050457600080fd5b80632dfdf0b51462000315578063318aee3d146200032d5780633ae05047146200039c5780633da8168214620003b457600080fd5b80632072f6c511620001da5780632072f6c5146200027557806322e95f2c146200028d5780632b5e42e714620002cb5780632c3f58cd14620002f057600080fd5b80630871e97114620002045780630e1da6c3146200021d57806315064c961462000248575b600080fd5b6200021b6200021536600462003351565b62000756565b005b3480156200022a57600080fd5b5062000235608d5481565b6040519081526020015b60405180910390f35b3480156200025557600080fd5b50602254620002649060ff1681565b60405190151581526020016200023f565b3480156200028257600080fd5b506200021b62000812565b3480156200029a57600080fd5b50620002b2620002ac366004620033de565b620008c6565b6040516001600160a01b0390911681526020016200023f565b348015620002d857600080fd5b506200021b620002ea3660046200341a565b62000949565b348015620002fd57600080fd5b506200021b6200030f36600462003434565b62000958565b3480156200032257600080fd5b506200023560215481565b3480156200033a57600080fd5b50620003776200034c36600462003452565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200023f565b348015620003a957600080fd5b506200023562000999565b348015620003c157600080fd5b5062000264620003d336600462003553565b62000a8c565b348015620003e657600080fd5b5062000235620003f8366004620035d1565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004c757600080fd5b506200021b620004d9366004620036e2565b62000b8c565b348015620004ec57600080fd5b506200021b620004fe366004620037c9565b62000e12565b3480156200051157600080fd5b506200021b62001004565b3480156200052957600080fd5b506200021b6200053b366004620036e2565b6200101a565b3480156200054e57600080fd5b50620002b2620005603660046200341a565b6089602052600090815260409020546001600160a01b031681565b3480156200058857600080fd5b506055546001600160a01b0316620002b2565b348015620005a857600080fd5b50608c54620002b2906001600160a01b031681565b348015620005ca57600080fd5b5062000235608e5481565b348015620005e257600080fd5b50620005ec600081565b60405160ff90911681526020016200023f565b3480156200060c57600080fd5b50620002b26200061e3660046200381f565b620015dc565b3480156200063157600080fd5b50608754620006439063ffffffff1681565b60405163ffffffff90911681526020016200023f565b3480156200066657600080fd5b50608b54620002b2906001600160a01b031681565b6200021b6200068c366004620038d3565b62001748565b3480156200069f57600080fd5b506200021b620019fc565b348015620006b757600080fd5b5062000264620006c93660046200341a565b60886020526000908152604090205460ff1681565b348015620006eb57600080fd5b506200021b620006fd3660046200341a565b62001aae565b3480156200071057600080fd5b5062000643600081565b3480156200072757600080fd5b506200021b6200073936600462003452565b62001af3565b3480156200074c57600080fd5b50620005ec600181565b608e54341115620007fa5760405162461bcd60e51b815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6200080a86868686868662001b89565b505050505050565b608c546001600160a01b03163314620008ba5760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c46200212f565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b6200095362002208565b608e55565b6200096262002208565b608780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b602154600090819081805b602081101562000a83578260011660010362000a045760018160208110620009d057620009d06200393b565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000a31565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a3e60028462003999565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000a7a90620039d5565b915050620009a4565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000b7f578160011660010362000b095786818151811062000ac75762000ac76200393b565b60200260200101518360405160200162000aeb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000b5b565b8287828151811062000b1f5762000b1f6200393b565b602002602001015160405160200162000b42929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000b6860028362003999565b91508062000b7681620039d5565b91505062000a9c565b5050909114949350505050565b60225460ff161562000c2d5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b62000c438a8a8a8a8a8a8a8a8a8a600162002264565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b03851690849062000c869089908b90879060240162003a6d565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162000ceb919062003aa6565b60006040518083038185875af1925050503d806000811462000d2a576040519150601f19603f3d011682016040523d82523d6000602084013e62000d2f565b606091505b505090508062000da75760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff161580801562000e335750600054600160ff909116105b8062000e4f5750303b15801562000e4f575060005460ff166001145b62000ec35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007f1565b6000805460ff19166001179055801562000f0457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d8290556703782dace9d90000608e5562000f99620025f1565b801562000ffd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6200100e62002208565b620008c4600062002676565b60225460ff1615620010bb5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b620010d18a8a8a8a8a8a8a8a8a8a600062002264565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620011f057604080516000808252602082019092526001600160a01b0385169084906040516200112c919062003aa6565b60006040518083038185875af1925050503d80600081146200116b576040519150601f19603f3d011682016040523d82523d6000602084013e62001170565b606091505b5050905080620011e95760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c4544000000000000000000000000000000000000000000000000006064820152608401620007f1565b5062001572565b60875463ffffffff9081169087160362001220576200121a6001600160a01b0386168484620026e0565b62001572565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620014de57600080600085806020019051810190620012c0919062003b18565b925092509250600085848484604051620012da90620032ba565b620012e89392919062003b99565b8190604051809103906000f590508015801562001309573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001377573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200139d919062003be5565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620014cc9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200156f565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001547573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200156d919062003be5565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200165f90620032ba565b601f1982820381018352601f9091011660408190526200168c908d908d908d908d908d9060200162003c30565b60408051601f1981840301815290829052620016ac929160200162003c71565b604051602081830303815290604052805190602001206040516020016200172294939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620017e95760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff908116908416036200186c5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620018b99260019263ffffffff9092169133918991899134918a919062003ca4565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620019899062002790565b608b546001600160a01b03166333d6247d620019a462000999565b6040518263ffffffff1660e01b8152600401620019c391815260200190565b600060405180830381600087803b158015620019de57600080fd5b505af1158015620019f3573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001aa45760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c4620028ef565b62001ab862002208565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001afd62002208565b6001600160a01b03811662001b7b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007f1565b62001b868162002676565b50565b60225460ff161562001c2a5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff9081169086160362001cad5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b60008060606001600160a01b03891662001d425785341462001d385760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007f1565b6000915062001fcc565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001e29576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562001df0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e16919062003be5565b5060208101518151909450925062001fca565b841562001e3e5762001e3e8a8888886200299e565b62001e556001600160a01b038b1633308a62002fc3565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001eac573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001ed6919081019062003d10565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001f15573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001f3f919081019062003d10565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001f7e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001fa4919062003d49565b60405160200162001fb89392919062003b99565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200200e98979695949392919062003ca4565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620020b69062002790565b608b546001600160a01b03166333d6247d620020d162000999565b6040518263ffffffff1660e01b8152600401620020f091815260200190565b600060405180830381600087803b1580156200210b57600080fd5b505af115801562002120573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff1615620021d05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6055546001600160a01b03163314620008c45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007f1565b63ffffffff8a1660009081526088602052604090205460ff1615620022f15760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af11580156200237e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620023a4919062003d69565b90508015801590620023c35750608d54620023c0824262003d83565b10155b620024375760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c4944000000000000000000000000000000000000006064820152608401620007f1565b60875463ffffffff878116911614620024b95760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000006064820152608401620007f1565b60875460009063ffffffff16620024d2575088620024d5565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d820152605181018990526071808201939093528151808203909301835260910190528051910120620025a3908e8e63ffffffff168462000a8c565b620021205760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c49446044820152606401620007f1565b600054610100900460ff16620026705760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007f1565b620008c4335b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b0383166024820152604481018290526200278b9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526200301c565b505050565b806001620027a16020600262003ed6565b620027ad919062003d83565b60215410620028255760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007f1565b6001602160008282546200283a919062003ee4565b909155505060215460005b6020811015620028e457816001166001036200287a5782600182602081106200287257620028726200393b565b015550505050565b600181602081106200289057620028906200393b565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620028cd919062003999565b915080620028db81620039d5565b91505062002845565b506200278b62003eff565b60225460ff16620029695760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620007f1565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000620029e183838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200310892505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002ce357600080808080808062002a44896004818d62003f2e565b81019062002a53919062003f5a565b9650965096509650965096509650336001600160a01b0316876001600160a01b03161462002aea5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038616301462002b6a5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b8a851462002be15760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002c8f919062003aa6565b6000604051808303816000865af19150503d806000811462002cce576040519150601f19603f3d011682016040523d82523d6000602084013e62002cd3565b606091505b5050505050505050505062000ffd565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002d765760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007f1565b60008080808080808062002d8e8a6004818e62003f2e565b81019062002d9d919062003fb5565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462002e365760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038716301462002eb65760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002f6d919062003aa6565b6000604051808303816000865af19150503d806000811462002fac576040519150601f19603f3d011682016040523d82523d6000602084013e62002fb1565b606091505b50505050505050505050505050505050565b6040516001600160a01b0380851660248301528316604482015260648101829052620030169085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002726565b50505050565b600062003073826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166200310f9092919063ffffffff16565b8051909150156200278b578080602001905181019062003094919062003be5565b6200278b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007f1565b6020015190565b60606200312084846000856200312a565b90505b9392505050565b606082471015620031a45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401620007f1565b6001600160a01b0385163b620031fd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007f1565b600080866001600160a01b031685876040516200321b919062003aa6565b60006040518083038185875af1925050503d80600081146200325a576040519150601f19603f3d011682016040523d82523d6000602084013e6200325f565b606091505b5091509150620032718282866200327c565b979650505050505050565b606083156200328d57508162003123565b8251156200329e5782518084602001fd5b8160405162461bcd60e51b8152600401620007f1919062004041565b611a78806200405783390190565b6001600160a01b038116811462001b8657600080fd5b8035620032eb81620032c8565b919050565b803563ffffffff81168114620032eb57600080fd5b60008083601f8401126200331857600080fd5b50813567ffffffffffffffff8111156200333157600080fd5b6020830191508360208285010111156200334a57600080fd5b9250929050565b60008060008060008060a087890312156200336b57600080fd5b86356200337881620032c8565b95506200338860208801620032f0565b945060408701356200339a81620032c8565b935060608701359250608087013567ffffffffffffffff811115620033be57600080fd5b620033cc89828a0162003305565b979a9699509497509295939492505050565b60008060408385031215620033f257600080fd5b620033fd83620032f0565b915060208301356200340f81620032c8565b809150509250929050565b6000602082840312156200342d57600080fd5b5035919050565b6000602082840312156200344757600080fd5b6200312382620032f0565b6000602082840312156200346557600080fd5b81356200312381620032c8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620034cd57620034cd62003472565b604052919050565b600082601f830112620034e757600080fd5b8135602067ffffffffffffffff82111562003506576200350662003472565b8160051b62003517828201620034a1565b92835284810182019282810190878511156200353257600080fd5b83870192505b84831015620032715782358252918301919083019062003538565b600080600080608085870312156200356a57600080fd5b84359350602085013567ffffffffffffffff808211156200358a57600080fd5b6200359888838901620034d5565b9450604087013591508082168214620035b057600080fd5b509396929550929360600135925050565b60ff8116811462001b8657600080fd5b600080600080600080600060e0888a031215620035ed57600080fd5b8735620035fa81620035c1565b96506200360a60208901620032f0565b955060408801356200361c81620032c8565b94506200362c60608901620032f0565b935060808801356200363e81620032c8565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562003678576200367862003472565b50601f01601f191660200190565b600082601f8301126200369857600080fd5b8135620036af620036a9826200365b565b620034a1565b818152846020838601011115620036c557600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200370357600080fd5b8a3567ffffffffffffffff808211156200371c57600080fd5b6200372a8e838f01620034d5565b9b506200373a60208e01620032f0565b9a5060408d0135995060608d013598506200375860808e01620032f0565b97506200376860a08e01620032de565b96506200377860c08e01620032f0565b95506200378860e08e01620032de565b94506101008d013593506101208d0135915080821115620037a857600080fd5b50620037b78d828e0162003686565b9150509295989b9194979a5092959850565b60008060008060808587031215620037e057600080fd5b620037eb85620032f0565b93506020850135620037fd81620032c8565b925060408501356200380f81620032c8565b9396929550929360600135925050565b600080600080600080600060a0888a0312156200383b57600080fd5b6200384688620032f0565b965060208801356200385881620032c8565b9550604088013567ffffffffffffffff808211156200387657600080fd5b620038848b838c0162003305565b909750955060608a01359150808211156200389e57600080fd5b50620038ad8a828b0162003305565b9094509250506080880135620038c381620035c1565b8091505092959891949750929550565b600080600060608486031215620038e957600080fd5b620038f484620032f0565b925060208401356200390681620032c8565b9150604084013567ffffffffffffffff8111156200392357600080fd5b620039318682870162003686565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082620039d0577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003a095762003a096200396a565b5060010190565b60005b8381101562003a2d57818101518382015260200162003a13565b83811115620030165750506000910152565b6000815180845262003a5981602086016020860162003a10565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003a9d606083018462003a3f565b95945050505050565b6000825162003aba81846020870162003a10565b9190910192915050565b600082601f83011262003ad657600080fd5b815162003ae7620036a9826200365b565b81815284602083860101111562003afd57600080fd5b62003b1082602083016020870162003a10565b949350505050565b60008060006060848603121562003b2e57600080fd5b835167ffffffffffffffff8082111562003b4757600080fd5b62003b558783880162003ac4565b9450602086015191508082111562003b6c57600080fd5b5062003b7b8682870162003ac4565b925050604084015162003b8e81620035c1565b809150509250925092565b60608152600062003bae606083018662003a3f565b828103602084015262003bc2818662003a3f565b91505060ff83166040830152949350505050565b801515811462001b8657600080fd5b60006020828403121562003bf857600080fd5b8151620031238162003bd6565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003c4660608301878962003c05565b828103602084015262003c5b81868862003c05565b91505060ff831660408301529695505050505050565b6000835162003c8581846020880162003a10565b83519083019062003c9b81836020880162003a10565b01949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003cf78285018762003a3f565b925080851660e085015250509998505050505050505050565b60006020828403121562003d2357600080fd5b815167ffffffffffffffff81111562003d3b57600080fd5b62003b108482850162003ac4565b60006020828403121562003d5c57600080fd5b81516200312381620035c1565b60006020828403121562003d7c57600080fd5b5051919050565b60008282101562003d985762003d986200396a565b500390565b600181815b8085111562003dfc57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003de05762003de06200396a565b8085161562003dee57918102915b93841c939080029062003da2565b509250929050565b60008262003e155750600162000943565b8162003e245750600062000943565b816001811462003e3d576002811462003e485762003e68565b600191505062000943565b60ff84111562003e5c5762003e5c6200396a565b50506001821b62000943565b5060208310610133831016604e8410600b841016171562003e8d575081810a62000943565b62003e99838362003d9d565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003ece5762003ece6200396a565b029392505050565b600062003123838362003e04565b6000821982111562003efa5762003efa6200396a565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000808585111562003f3f57600080fd5b8386111562003f4d57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003f7657600080fd5b873562003f8381620032c8565b9650602088013562003f9581620032c8565b9550604088013594506060880135935060808801356200363e81620035c1565b600080600080600080600080610100898b03121562003fd357600080fd5b883562003fe081620032c8565b9750602089013562003ff281620032c8565b965060408901359550606089013594506080890135620040128162003bd6565b935060a08901356200402481620035c1565b979a969950949793969295929450505060c08201359160e0013590565b60208152600062003123602083018462003a3f56fe60c06040523480156200001157600080fd5b5060405162001a7838038062001a788339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516115be620004ba600039600061053001526000818161036f01526104fa01526115be6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b60405161019191906112d5565b60405180910390f35b6101ad6101a8366004611371565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad61020436600461139b565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad610276366004611371565b610552565b6101ad610289366004611371565b61059e565b6101c161029c3660046113d7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d23660046113d7565b60066020526000908152604090205481565b610184610645565b6101ad6102fa366004611371565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad610352366004611371565b6106ed565b6101ad610365366004611371565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f3660046113f9565b6107b2565b005b6101c16103b436600461146c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6060600380546104379061149f565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061149f565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f56565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611521565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c838361101e565b50600192915050565b6060600480546104379061149f565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c8383611124565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661088183611539565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ee3908490611521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4991815260200190565b60405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f81610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166110815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b80600260008282546110939190611521565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906110cd908490611521565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156112495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611285908490611571565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c27565b600060208083528351808285015260005b81811015611302578581018301518582016040015282016112e6565b81811115611314576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136c57600080fd5b919050565b6000806040838503121561138457600080fd5b61138d83611348565b946020939093013593505050565b6000806000606084860312156113b057600080fd5b6113b984611348565b92506113c760208501611348565b9150604084013590509250925092565b6000602082840312156113e957600080fd5b6113f282611348565b9392505050565b600080600080600080600060e0888a03121561141457600080fd5b61141d88611348565b965061142b60208901611348565b95506040880135945060608801359350608088013560ff8116811461144f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561147f57600080fd5b61148883611348565b915061149660208401611348565b90509250929050565b600181811c908216806114b357607f821691505b6020821081036114ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611534576115346114f2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156a5761156a6114f2565b5060010190565b600082821015611583576115836114f2565b50039056fea2646970667358221220dc9c54325b6ec8c11c8bc6a1630cfb64202b6d54611cd1004e705ceca7826a4f64736f6c634300080f0033a26469706673582212200919f5a3762d01f3cfafc4ef3510eb9345e2cfabcf15ccf729268403fdb9d61064736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/ProofOfEfficiency.json b/compiled-contracts/ProofOfEfficiency.json index b6c8bd202..ebab26c60 100644 --- a/compiled-contracts/ProofOfEfficiency.json +++ b/compiled-contracts/ProofOfEfficiency.json @@ -896,8 +896,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50614904806100206000396000f3fe608060405234801561001057600080fd5b50600436106102c85760003560e01c80638c4a0af71161017b578063cfa8ed47116100d8578063e7a7ed021161008c578063eaeb077b11610071578063eaeb077b14610687578063f2fde38b1461069a578063f7552761146106ad57600080fd5b8063e7a7ed0214610637578063e8bf92ed1461066757600080fd5b8063d8d1091b116100bd578063d8d1091b146105ef578063d8f54db014610602578063dbc169761461062f57600080fd5b8063cfa8ed47146105a3578063d02103ca146105cf57600080fd5b8063adc879e91161012f578063b4d63f5811610114578063b4d63f581461054b578063b6b0b0971461056b578063c89e42df1461059057600080fd5b8063adc879e91461052e578063b02286c01461054257600080fd5b806399f5634e1161016057806399f5634e146104fc578063a3c573eb14610504578063ab9fc5ef1461052457600080fd5b80638c4a0af7146104cb5780638da5cb5b146104de57600080fd5b8063542028d511610229578063715018a6116101dd57806379847057116101c2578063798470571461049c5780637fcb3653146104a457806381df7d3f146104b857600080fd5b8063715018a6146104815780637152facf1461048957600080fd5b80636766f09d1161020e5780636766f09d1461043b5780636b8616ce1461044e5780636ff512cc1461046e57600080fd5b8063542028d51461042057806355b925e61461042857600080fd5b806327eb6c0f11610280578063423fa85611610265578063423fa856146103aa57806345605267146103ca5780635392c5e0146103f257600080fd5b806327eb6c0f146103525780633c1582671461039757600080fd5b806319d8ac61116102b157806319d8ac61146103085780631c1083e2146103355780632072f6c51461034a57600080fd5b8063107bf28c146102cd57806315064c96146102eb575b600080fd5b6102d56106bc565b6040516102e29190613de5565b60405180910390f35b6065546102f89060ff1681565b60405190151581526020016102e2565b60685461031c9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102e2565b610348610343366004613e2a565b61074a565b005b610348610856565b6070546103729073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e2565b6103486103a5366004613f9f565b610907565b60685461031c9068010000000000000000900467ffffffffffffffff1681565b60685461031c90700100000000000000000000000000000000900467ffffffffffffffff1681565b6104126104003660046140b6565b606b6020526000908152604090205481565b6040519081526020016102e2565b6102d56111fe565b6103486104363660046140e8565b61120b565b6103486104493660046140e8565b6117d4565b61041261045c3660046140b6565b60666020526000908152604090205481565b61034861047c366004613e2a565b611df8565b610348611f12565b6102d561049736600461416b565b611f24565b61041261215a565b60695461031c9067ffffffffffffffff1681565b6103486104c63660046141c6565b6121d4565b6103486104d93660046142c0565b61252d565b60335473ffffffffffffffffffffffffffffffffffffffff16610372565b610412612647565b6071546103729073ffffffffffffffffffffffffffffffffffffffff1681565b61031c62093a8081565b606e5461031c9067ffffffffffffffff1681565b61041261ea6081565b6104126105593660046140b6565b60676020526000908152604090205481565b60655461037290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b61034861059e3660046142dd565b612778565b6069546103729068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103729073ffffffffffffffffffffffffffffffffffffffff1681565b6103486105fd36600461431a565b61284d565b6069546102f8907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610348612ef2565b60685461031c907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103729073ffffffffffffffffffffffffffffffffffffffff1681565b61034861069536600461440d565b613082565b6103486106a8366004613e2a565b613582565b61041267016345785d8a000081565b606f80546106c990614452565b80601f01602080910402602001604051908101604052809291908181526020018280546106f590614452565b80156107425780601f1061071757610100808354040283529160200191610742565b820191906000526020600020905b81548152906001019060200180831161072557829003601f168201915b505050505081565b60705473ffffffffffffffffffffffffffffffffffffffff1633146107dc5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff16156108f55760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6108fd61361f565b610905613686565b565b60655460ff16156109a65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610a3f5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b805160685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610fef576000878281518110610aa757610aa76144a5565b602002602001015190506000816060015167ffffffffffffffff161115610cc05783610ad281614503565b945050600081600001518051906020012082602001518360600151604051602001610b3593929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610c025760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610cba5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016107d3565b50610e5a565b60208101511580610d6f5750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610d299160040190815260200190565b6020604051808303816000875af1158015610d48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6c919061452a565b15155b610de15760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016107d3565b80515161ea6011610e5a5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016107d3565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610e90575042816040015167ffffffffffffffff1611155b610f285760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610fd190614503565b95505080604001519550508080610fe790614543565b915050610a8b565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156110925760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016107d3565b6068546000906110c090700100000000000000000000000000000000900467ffffffffffffffff168461457b565b6110d49067ffffffffffffffff16876145a4565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c1693909317939093179290921691909117909155600090815260676020526040902083905590506111b1333061118b8467016345785d8a00006145bb565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613710565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d80546106c990614452565b60655460ff16156112aa5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695467ffffffffffffffff90811690881611156113565760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016107d3565b60695467ffffffffffffffff908116908716116114015760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b60205260409020546114b35760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a4016107d3565b60006114c188888888611f24565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516114f691906145f8565b602060405180830381855afa158015611513573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611536919061452a565b6115409190614643565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916115aa9189918991899190600401614657565b602060405180830381865afa1580156115c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115eb91906146d1565b61165d5760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016107d3565b6069546116bb90339061167a9067ffffffffffffffff168b61457b565b67ffffffffffffffff1661168c612647565b61169691906145bb565b606554610100900473ffffffffffffffffffffffffffffffffffffffff1691906137ce565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b15801561177057600080fd5b505af1158015611784573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60655460ff16156118735760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b8567ffffffffffffffff168767ffffffffffffffff16106119225760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e65774261746368206d75737420626520626960648201527f67676572207468616e20696e69744e756d426174636800000000000000000000608482015260a4016107d3565b60695467ffffffffffffffff90811690871611156119ce5760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d4261746368206d757374206265206c657360648201527f73207468616e206c617374566572696669656442617463680000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b6020526040902054611a805760405162461bcd60e51b815260206004820152604e60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d426174636820737461746520726f6f742060648201527f646f6573206e6f74206578697374000000000000000000000000000000000000608482015260a4016107d3565b67ffffffffffffffff86166000908152606b6020526040902054611b325760405162461bcd60e51b815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e6577426174636820737461746520726f6f7460648201527f20646f6573206e6f742065786973740000000000000000000000000000000000608482015260a4016107d3565b6000611b4088888888611f24565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051611b7591906145f8565b602060405180830381855afa158015611b92573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611bb5919061452a565b611bbf9190614643565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611c299189918991899190600401614657565b602060405180830381865afa158015611c46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6a91906146d1565b611cdc5760405162461bcd60e51b815260206004820152603560248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20494e56414c49445f50524f4f46000000000000000000000060648201526084016107d3565b67ffffffffffffffff88166000908152606b6020526040902054869003611d915760405162461bcd60e51b815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2073746f72656420726f6f74206d757374206265206469666660648201527f6572656e74207468616e206e657720737461746520726f6f7400000000000000608482015260a4016107d3565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527fe579d6d18f02941e1d0f59bff70f1b2c894edc991badab38343786df2846fe55910160405180910390a1611ded613686565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611e915760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161084b565b611f1a61361f565b6109056000613829565b67ffffffffffffffff808516600081815260676020526040808220549387168252902054606092911580611f5757508115155b611fef5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b806120885760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b60685460009067ffffffffffffffff70010000000000000000000000000000000082048116916121a99178010000000000000000000000000000000000000000000000009091041660016146ee565b6121b3919061457b565b6121cf9067ffffffffffffffff16670de0b6b3a76400006145bb565b905090565b600054610100900460ff16158080156121f45750600054600160ff909116105b8061220e5750303b15801561220e575060005460ff166001145b6122805760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107d3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156122de57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d61241d8782614768565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f61245e8582614768565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560708054928516929091169190911790556124bc6138a0565b801561251f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146125c65760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061084b90831515815260200190565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156126be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e2919061452a565b60695460685491925060009167ffffffffffffffff91821691680100000000000000008204811691612747917001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041661457b565b61275191906146ee565b61275b919061457b565b67ffffffffffffffff1690506127718183614864565b9250505090565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146128115760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606d61281d8282614768565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161084b9190613de5565b60655460ff16156128ec5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146129af5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180612a4a5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60685467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612a95918491700100000000000000000000000000000000900416614878565b1115612b095760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016107d3565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b84811015612e22576000868281518110612b6957612b696144a5565b602002602001015190508380612b7e90614503565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114612c9f5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016107d3565b612caa6001886145a4565b8303612d68574262093a808360400151612cc491906146ee565b67ffffffffffffffff161115612d685760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016107d3565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612e0a90614503565b96505050508080612e1a90614543565b915050612b4d565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff1615612f6b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b60705473ffffffffffffffffffffffffffffffffffffffff163314612ff85760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561306257600080fd5b505af1158015613076573d6000803e3d6000fd5b50505050610905613926565b60655460ff16156131215760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146131e45760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b60006131ee61215a565b9050818111156132665760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016107d3565b61ea608351106132de5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016107d3565b60655461330890610100900473ffffffffffffffffffffffffffffffffffffffff16333084613710565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613378573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061339c919061452a565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff169060186133d683614503565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161344f93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000908152606690935291205532330361351f57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261357c565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161357393929190614890565b60405180910390a25b50505050565b61358a61361f565b73ffffffffffffffffffffffffffffffffffffffff81166136135760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107d3565b61361c81613829565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109055760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156136f057600080fd5b505af1158015613704573d6000803e3d6000fd5b505050506109056139f2565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261357c9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613ae7565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526138249084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161376a565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661391d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107d3565b61090533613829565b60655460ff161561399f5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff1615613a915760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6000613b49826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613bd99092919063ffffffff16565b8051909150156138245780806020019051810190613b6791906146d1565b6138245760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107d3565b6060613be88484600085613bf2565b90505b9392505050565b606082471015613c6a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016107d3565b73ffffffffffffffffffffffffffffffffffffffff85163b613cce5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107d3565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613cf791906145f8565b60006040518083038185875af1925050503d8060008114613d34576040519150601f19603f3d011682016040523d82523d6000602084013e613d39565b606091505b5091509150613d49828286613d54565b979650505050505050565b60608315613d63575081613beb565b825115613d735782518084602001fd5b8160405162461bcd60e51b81526004016107d39190613de5565b60005b83811015613da8578181015183820152602001613d90565b8381111561357c5750506000910152565b60008151808452613dd1816020860160208601613d8d565b601f01601f19169290920160200192915050565b602081526000613beb6020830184613db9565b73ffffffffffffffffffffffffffffffffffffffff8116811461361c57600080fd5b8035613e2581613df8565b919050565b600060208284031215613e3c57600080fd5b8135613beb81613df8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613e9957613e99613e47565b60405290565b6040516060810167ffffffffffffffff81118282101715613e9957613e99613e47565b604051601f8201601f1916810167ffffffffffffffff81118282101715613eeb57613eeb613e47565b604052919050565b600067ffffffffffffffff821115613f0d57613f0d613e47565b5060051b60200190565b600082601f830112613f2857600080fd5b813567ffffffffffffffff811115613f4257613f42613e47565b613f556020601f19601f84011601613ec2565b818152846020838601011115613f6a57600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613e2557600080fd5b60006020808385031215613fb257600080fd5b823567ffffffffffffffff80821115613fca57600080fd5b818501915085601f830112613fde57600080fd5b8135613ff1613fec82613ef3565b613ec2565b81815260059190911b8301840190848101908883111561401057600080fd5b8585015b838110156140a95780358581111561402c5760008081fd5b86016080818c03601f19018113156140445760008081fd5b61404c613e76565b898301358881111561405e5760008081fd5b61406c8e8c83870101613f17565b8252506040808401358b8301526060614086818601613f87565b82840152614095848601613f87565b908301525085525050918601918601614014565b5098975050505050505050565b6000602082840312156140c857600080fd5b613beb82613f87565b80604081018310156140e257600080fd5b92915050565b6000806000806000806000610180888a03121561410457600080fd5b61410d88613f87565b965061411b60208901613f87565b955060408801359450606088013593506141388960808a016140d1565b925061014088018981111561414c57600080fd5b60c08901925061415c8a826140d1565b91505092959891949750929550565b6000806000806080858703121561418157600080fd5b61418a85613f87565b935061419860208601613f87565b93969395505050506040820135916060013590565b801515811461361c57600080fd5b8035613e25816141ad565b60008060008060008060008060008060006101608c8e0312156141e857600080fd5b6141f18c613e1a565b9a506141ff60208d01613e1a565b995061420d60408d01613e1a565b985060608c0135975061422260808d01613e1a565b965061423060a08d016141bb565b955067ffffffffffffffff8060c08e0135111561424c57600080fd5b61425c8e60c08f01358f01613f17565b955061426a60e08e01613f87565b9450806101008e0135111561427e57600080fd5b506142908d6101008e01358e01613f17565b925061429f6101208d01613e1a565b91506142ae6101408d01613e1a565b90509295989b509295989b9093969950565b6000602082840312156142d257600080fd5b8135613beb816141ad565b6000602082840312156142ef57600080fd5b813567ffffffffffffffff81111561430657600080fd5b61431284828501613f17565b949350505050565b6000602080838503121561432d57600080fd5b823567ffffffffffffffff8082111561434557600080fd5b818501915085601f83011261435957600080fd5b8135614367613fec82613ef3565b81815260059190911b8301840190848101908883111561438657600080fd5b8585015b838110156140a9578035858111156143a25760008081fd5b86016060818c03601f19018113156143ba5760008081fd5b6143c2613e9f565b89830135888111156143d45760008081fd5b6143e28e8c83870101613f17565b8252506040808401358b8301526143fa838501613f87565b908201528552505091860191860161438a565b6000806040838503121561442057600080fd5b823567ffffffffffffffff81111561443757600080fd5b61444385828601613f17565b95602094909401359450505050565b600181811c9082168061446657607f821691505b60208210810361449f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614520576145206144d4565b6001019392505050565b60006020828403121561453c57600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614574576145746144d4565b5060010190565b600067ffffffffffffffff8381169083168181101561459c5761459c6144d4565b039392505050565b6000828210156145b6576145b66144d4565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145f3576145f36144d4565b500290565b6000825161460a818460208701613d8d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261465257614652614614565b500690565b61012081016040808784376000838201818152879190815b600281101561468f5784848337908401828152928401929060010161466f565b5050828760c0870137610100850181815286935091505b60018110156146c55782518252602092830192909101906001016146a6565b50505095945050505050565b6000602082840312156146e357600080fd5b8151613beb816141ad565b600067ffffffffffffffff808316818516808303821115614711576147116144d4565b01949350505050565b601f82111561382457600081815260208120601f850160051c810160208610156147415750805b601f850160051c820191505b818110156147605782815560010161474d565b505050505050565b815167ffffffffffffffff81111561478257614782613e47565b614796816147908454614452565b8461471a565b602080601f8311600181146147e957600084156147b35750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614760565b600085815260208120601f198616915b82811015614818578886015182559484019460019091019084016147f9565b508582101561485457878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008261487357614873614614565b500490565b6000821982111561488b5761488b6144d4565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006148c56060830184613db9565b9594505050505056fea26469706673582212207548bb40f22d0292fea9433de5d772967eae2e559f083e79f095795049cde6f264736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102c85760003560e01c80638c4a0af71161017b578063cfa8ed47116100d8578063e7a7ed021161008c578063eaeb077b11610071578063eaeb077b14610687578063f2fde38b1461069a578063f7552761146106ad57600080fd5b8063e7a7ed0214610637578063e8bf92ed1461066757600080fd5b8063d8d1091b116100bd578063d8d1091b146105ef578063d8f54db014610602578063dbc169761461062f57600080fd5b8063cfa8ed47146105a3578063d02103ca146105cf57600080fd5b8063adc879e91161012f578063b4d63f5811610114578063b4d63f581461054b578063b6b0b0971461056b578063c89e42df1461059057600080fd5b8063adc879e91461052e578063b02286c01461054257600080fd5b806399f5634e1161016057806399f5634e146104fc578063a3c573eb14610504578063ab9fc5ef1461052457600080fd5b80638c4a0af7146104cb5780638da5cb5b146104de57600080fd5b8063542028d511610229578063715018a6116101dd57806379847057116101c2578063798470571461049c5780637fcb3653146104a457806381df7d3f146104b857600080fd5b8063715018a6146104815780637152facf1461048957600080fd5b80636766f09d1161020e5780636766f09d1461043b5780636b8616ce1461044e5780636ff512cc1461046e57600080fd5b8063542028d51461042057806355b925e61461042857600080fd5b806327eb6c0f11610280578063423fa85611610265578063423fa856146103aa57806345605267146103ca5780635392c5e0146103f257600080fd5b806327eb6c0f146103525780633c1582671461039757600080fd5b806319d8ac61116102b157806319d8ac61146103085780631c1083e2146103355780632072f6c51461034a57600080fd5b8063107bf28c146102cd57806315064c96146102eb575b600080fd5b6102d56106bc565b6040516102e29190613de5565b60405180910390f35b6065546102f89060ff1681565b60405190151581526020016102e2565b60685461031c9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102e2565b610348610343366004613e2a565b61074a565b005b610348610856565b6070546103729073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e2565b6103486103a5366004613f9f565b610907565b60685461031c9068010000000000000000900467ffffffffffffffff1681565b60685461031c90700100000000000000000000000000000000900467ffffffffffffffff1681565b6104126104003660046140b6565b606b6020526000908152604090205481565b6040519081526020016102e2565b6102d56111fe565b6103486104363660046140e8565b61120b565b6103486104493660046140e8565b6117d4565b61041261045c3660046140b6565b60666020526000908152604090205481565b61034861047c366004613e2a565b611df8565b610348611f12565b6102d561049736600461416b565b611f24565b61041261215a565b60695461031c9067ffffffffffffffff1681565b6103486104c63660046141c6565b6121d4565b6103486104d93660046142c0565b61252d565b60335473ffffffffffffffffffffffffffffffffffffffff16610372565b610412612647565b6071546103729073ffffffffffffffffffffffffffffffffffffffff1681565b61031c62093a8081565b606e5461031c9067ffffffffffffffff1681565b61041261ea6081565b6104126105593660046140b6565b60676020526000908152604090205481565b60655461037290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b61034861059e3660046142dd565b612778565b6069546103729068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103729073ffffffffffffffffffffffffffffffffffffffff1681565b6103486105fd36600461431a565b61284d565b6069546102f8907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610348612ef2565b60685461031c907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103729073ffffffffffffffffffffffffffffffffffffffff1681565b61034861069536600461440d565b613082565b6103486106a8366004613e2a565b613582565b61041267016345785d8a000081565b606f80546106c990614452565b80601f01602080910402602001604051908101604052809291908181526020018280546106f590614452565b80156107425780601f1061071757610100808354040283529160200191610742565b820191906000526020600020905b81548152906001019060200180831161072557829003601f168201915b505050505081565b60705473ffffffffffffffffffffffffffffffffffffffff1633146107dc5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff16156108f55760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6108fd61361f565b610905613686565b565b60655460ff16156109a65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610a3f5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b805160685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610fef576000878281518110610aa757610aa76144a5565b602002602001015190506000816060015167ffffffffffffffff161115610cc05783610ad281614503565b945050600081600001518051906020012082602001518360600151604051602001610b3593929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610c025760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610cba5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016107d3565b50610e5a565b60208101511580610d6f5750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610d299160040190815260200190565b6020604051808303816000875af1158015610d48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6c919061452a565b15155b610de15760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016107d3565b80515161ea6011610e5a5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016107d3565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610e90575042816040015167ffffffffffffffff1611155b610f285760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610fd190614503565b95505080604001519550508080610fe790614543565b915050610a8b565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156110925760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016107d3565b6068546000906110c090700100000000000000000000000000000000900467ffffffffffffffff168461457b565b6110d49067ffffffffffffffff16876145a4565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c1693909317939093179290921691909117909155600090815260676020526040902083905590506111b1333061118b8467016345785d8a00006145bb565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613710565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d80546106c990614452565b60655460ff16156112aa5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695467ffffffffffffffff90811690881611156113565760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016107d3565b60695467ffffffffffffffff908116908716116114015760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b60205260409020546114b35760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a4016107d3565b60006114c188888888611f24565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516114f691906145f8565b602060405180830381855afa158015611513573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611536919061452a565b6115409190614643565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916115aa9189918991899190600401614657565b602060405180830381865afa1580156115c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115eb91906146d1565b61165d5760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016107d3565b6069546116bb90339061167a9067ffffffffffffffff168b61457b565b67ffffffffffffffff1661168c612647565b61169691906145bb565b606554610100900473ffffffffffffffffffffffffffffffffffffffff1691906137ce565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b15801561177057600080fd5b505af1158015611784573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60655460ff16156118735760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b8567ffffffffffffffff168767ffffffffffffffff16106119225760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e65774261746368206d75737420626520626960648201527f67676572207468616e20696e69744e756d426174636800000000000000000000608482015260a4016107d3565b60695467ffffffffffffffff90811690871611156119ce5760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d4261746368206d757374206265206c657360648201527f73207468616e206c617374566572696669656442617463680000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b6020526040902054611a805760405162461bcd60e51b815260206004820152604e60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d426174636820737461746520726f6f742060648201527f646f6573206e6f74206578697374000000000000000000000000000000000000608482015260a4016107d3565b67ffffffffffffffff86166000908152606b6020526040902054611b325760405162461bcd60e51b815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e6577426174636820737461746520726f6f7460648201527f20646f6573206e6f742065786973740000000000000000000000000000000000608482015260a4016107d3565b6000611b4088888888611f24565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051611b7591906145f8565b602060405180830381855afa158015611b92573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611bb5919061452a565b611bbf9190614643565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611c299189918991899190600401614657565b602060405180830381865afa158015611c46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6a91906146d1565b611cdc5760405162461bcd60e51b815260206004820152603560248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20494e56414c49445f50524f4f46000000000000000000000060648201526084016107d3565b67ffffffffffffffff88166000908152606b6020526040902054869003611d915760405162461bcd60e51b815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2073746f72656420726f6f74206d757374206265206469666660648201527f6572656e74207468616e206e657720737461746520726f6f7400000000000000608482015260a4016107d3565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527fe579d6d18f02941e1d0f59bff70f1b2c894edc991badab38343786df2846fe55910160405180910390a1611ded613686565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611e915760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161084b565b611f1a61361f565b6109056000613829565b67ffffffffffffffff808516600081815260676020526040808220549387168252902054606092911580611f5757508115155b611fef5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b806120885760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b60685460009067ffffffffffffffff70010000000000000000000000000000000082048116916121a99178010000000000000000000000000000000000000000000000009091041660016146ee565b6121b3919061457b565b6121cf9067ffffffffffffffff16670de0b6b3a76400006145bb565b905090565b600054610100900460ff16158080156121f45750600054600160ff909116105b8061220e5750303b15801561220e575060005460ff166001145b6122805760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107d3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156122de57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d61241d8782614768565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f61245e8582614768565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560708054928516929091169190911790556124bc6138a0565b801561251f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146125c65760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061084b90831515815260200190565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156126be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e2919061452a565b60695460685491925060009167ffffffffffffffff91821691680100000000000000008204811691612747917001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041661457b565b61275191906146ee565b61275b919061457b565b67ffffffffffffffff1690506127718183614864565b9250505090565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146128115760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606d61281d8282614768565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161084b9190613de5565b60655460ff16156128ec5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146129af5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180612a4a5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60685467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612a95918491700100000000000000000000000000000000900416614878565b1115612b095760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016107d3565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b84811015612e22576000868281518110612b6957612b696144a5565b602002602001015190508380612b7e90614503565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114612c9f5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016107d3565b612caa6001886145a4565b8303612d68574262093a808360400151612cc491906146ee565b67ffffffffffffffff161115612d685760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016107d3565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612e0a90614503565b96505050508080612e1a90614543565b915050612b4d565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff1615612f6b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b60705473ffffffffffffffffffffffffffffffffffffffff163314612ff85760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561306257600080fd5b505af1158015613076573d6000803e3d6000fd5b50505050610905613926565b60655460ff16156131215760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146131e45760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b60006131ee61215a565b9050818111156132665760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016107d3565b61ea608351106132de5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016107d3565b60655461330890610100900473ffffffffffffffffffffffffffffffffffffffff16333084613710565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613378573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061339c919061452a565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff169060186133d683614503565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161344f93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000908152606690935291205532330361351f57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261357c565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161357393929190614890565b60405180910390a25b50505050565b61358a61361f565b73ffffffffffffffffffffffffffffffffffffffff81166136135760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107d3565b61361c81613829565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109055760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156136f057600080fd5b505af1158015613704573d6000803e3d6000fd5b505050506109056139f2565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261357c9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613ae7565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526138249084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161376a565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661391d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107d3565b61090533613829565b60655460ff161561399f5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff1615613a915760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6000613b49826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613bd99092919063ffffffff16565b8051909150156138245780806020019051810190613b6791906146d1565b6138245760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107d3565b6060613be88484600085613bf2565b90505b9392505050565b606082471015613c6a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016107d3565b73ffffffffffffffffffffffffffffffffffffffff85163b613cce5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107d3565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613cf791906145f8565b60006040518083038185875af1925050503d8060008114613d34576040519150601f19603f3d011682016040523d82523d6000602084013e613d39565b606091505b5091509150613d49828286613d54565b979650505050505050565b60608315613d63575081613beb565b825115613d735782518084602001fd5b8160405162461bcd60e51b81526004016107d39190613de5565b60005b83811015613da8578181015183820152602001613d90565b8381111561357c5750506000910152565b60008151808452613dd1816020860160208601613d8d565b601f01601f19169290920160200192915050565b602081526000613beb6020830184613db9565b73ffffffffffffffffffffffffffffffffffffffff8116811461361c57600080fd5b8035613e2581613df8565b919050565b600060208284031215613e3c57600080fd5b8135613beb81613df8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613e9957613e99613e47565b60405290565b6040516060810167ffffffffffffffff81118282101715613e9957613e99613e47565b604051601f8201601f1916810167ffffffffffffffff81118282101715613eeb57613eeb613e47565b604052919050565b600067ffffffffffffffff821115613f0d57613f0d613e47565b5060051b60200190565b600082601f830112613f2857600080fd5b813567ffffffffffffffff811115613f4257613f42613e47565b613f556020601f19601f84011601613ec2565b818152846020838601011115613f6a57600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613e2557600080fd5b60006020808385031215613fb257600080fd5b823567ffffffffffffffff80821115613fca57600080fd5b818501915085601f830112613fde57600080fd5b8135613ff1613fec82613ef3565b613ec2565b81815260059190911b8301840190848101908883111561401057600080fd5b8585015b838110156140a95780358581111561402c5760008081fd5b86016080818c03601f19018113156140445760008081fd5b61404c613e76565b898301358881111561405e5760008081fd5b61406c8e8c83870101613f17565b8252506040808401358b8301526060614086818601613f87565b82840152614095848601613f87565b908301525085525050918601918601614014565b5098975050505050505050565b6000602082840312156140c857600080fd5b613beb82613f87565b80604081018310156140e257600080fd5b92915050565b6000806000806000806000610180888a03121561410457600080fd5b61410d88613f87565b965061411b60208901613f87565b955060408801359450606088013593506141388960808a016140d1565b925061014088018981111561414c57600080fd5b60c08901925061415c8a826140d1565b91505092959891949750929550565b6000806000806080858703121561418157600080fd5b61418a85613f87565b935061419860208601613f87565b93969395505050506040820135916060013590565b801515811461361c57600080fd5b8035613e25816141ad565b60008060008060008060008060008060006101608c8e0312156141e857600080fd5b6141f18c613e1a565b9a506141ff60208d01613e1a565b995061420d60408d01613e1a565b985060608c0135975061422260808d01613e1a565b965061423060a08d016141bb565b955067ffffffffffffffff8060c08e0135111561424c57600080fd5b61425c8e60c08f01358f01613f17565b955061426a60e08e01613f87565b9450806101008e0135111561427e57600080fd5b506142908d6101008e01358e01613f17565b925061429f6101208d01613e1a565b91506142ae6101408d01613e1a565b90509295989b509295989b9093969950565b6000602082840312156142d257600080fd5b8135613beb816141ad565b6000602082840312156142ef57600080fd5b813567ffffffffffffffff81111561430657600080fd5b61431284828501613f17565b949350505050565b6000602080838503121561432d57600080fd5b823567ffffffffffffffff8082111561434557600080fd5b818501915085601f83011261435957600080fd5b8135614367613fec82613ef3565b81815260059190911b8301840190848101908883111561438657600080fd5b8585015b838110156140a9578035858111156143a25760008081fd5b86016060818c03601f19018113156143ba5760008081fd5b6143c2613e9f565b89830135888111156143d45760008081fd5b6143e28e8c83870101613f17565b8252506040808401358b8301526143fa838501613f87565b908201528552505091860191860161438a565b6000806040838503121561442057600080fd5b823567ffffffffffffffff81111561443757600080fd5b61444385828601613f17565b95602094909401359450505050565b600181811c9082168061446657607f821691505b60208210810361449f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614520576145206144d4565b6001019392505050565b60006020828403121561453c57600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614574576145746144d4565b5060010190565b600067ffffffffffffffff8381169083168181101561459c5761459c6144d4565b039392505050565b6000828210156145b6576145b66144d4565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145f3576145f36144d4565b500290565b6000825161460a818460208701613d8d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261465257614652614614565b500690565b61012081016040808784376000838201818152879190815b600281101561468f5784848337908401828152928401929060010161466f565b5050828760c0870137610100850181815286935091505b60018110156146c55782518252602092830192909101906001016146a6565b50505095945050505050565b6000602082840312156146e357600080fd5b8151613beb816141ad565b600067ffffffffffffffff808316818516808303821115614711576147116144d4565b01949350505050565b601f82111561382457600081815260208120601f850160051c810160208610156147415750805b601f850160051c820191505b818110156147605782815560010161474d565b505050505050565b815167ffffffffffffffff81111561478257614782613e47565b614796816147908454614452565b8461471a565b602080601f8311600181146147e957600084156147b35750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614760565b600085815260208120601f198616915b82811015614818578886015182559484019460019091019084016147f9565b508582101561485457878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008261487357614873614614565b500490565b6000821982111561488b5761488b6144d4565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006148c56060830184613db9565b9594505050505056fea26469706673582212207548bb40f22d0292fea9433de5d772967eae2e559f083e79f095795049cde6f264736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50614928806100206000396000f3fe608060405234801561001057600080fd5b50600436106102c85760003560e01c80638c4a0af71161017b578063cfa8ed47116100d8578063e7a7ed021161008c578063eaeb077b11610071578063eaeb077b14610687578063f2fde38b1461069a578063f7552761146106ad57600080fd5b8063e7a7ed0214610637578063e8bf92ed1461066757600080fd5b8063d8d1091b116100bd578063d8d1091b146105ef578063d8f54db014610602578063dbc169761461062f57600080fd5b8063cfa8ed47146105a3578063d02103ca146105cf57600080fd5b8063adc879e91161012f578063b4d63f5811610114578063b4d63f581461054b578063b6b0b0971461056b578063c89e42df1461059057600080fd5b8063adc879e91461052e578063b02286c01461054257600080fd5b806399f5634e1161016057806399f5634e146104fc578063a3c573eb14610504578063ab9fc5ef1461052457600080fd5b80638c4a0af7146104cb5780638da5cb5b146104de57600080fd5b8063542028d511610229578063715018a6116101dd57806379847057116101c2578063798470571461049c5780637fcb3653146104a457806381df7d3f146104b857600080fd5b8063715018a6146104815780637152facf1461048957600080fd5b80636766f09d1161020e5780636766f09d1461043b5780636b8616ce1461044e5780636ff512cc1461046e57600080fd5b8063542028d51461042057806355b925e61461042857600080fd5b806327eb6c0f11610280578063423fa85611610265578063423fa856146103aa57806345605267146103ca5780635392c5e0146103f257600080fd5b806327eb6c0f146103525780633c1582671461039757600080fd5b806319d8ac61116102b157806319d8ac61146103085780631c1083e2146103355780632072f6c51461034a57600080fd5b8063107bf28c146102cd57806315064c96146102eb575b600080fd5b6102d56106bc565b6040516102e29190613e09565b60405180910390f35b6065546102f89060ff1681565b60405190151581526020016102e2565b60685461031c9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102e2565b610348610343366004613e4e565b61074a565b005b610348610856565b6070546103729073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e2565b6103486103a5366004613fc3565b610907565b60685461031c9068010000000000000000900467ffffffffffffffff1681565b60685461031c90700100000000000000000000000000000000900467ffffffffffffffff1681565b6104126104003660046140da565b606b6020526000908152604090205481565b6040519081526020016102e2565b6102d56111fe565b61034861043636600461410c565b61120b565b61034861044936600461410c565b6117d4565b61041261045c3660046140da565b60666020526000908152604090205481565b61034861047c366004613e4e565b611e1e565b610348611f38565b6102d561049736600461418f565b611f4a565b610412612180565b60695461031c9067ffffffffffffffff1681565b6103486104c63660046141ea565b6121fa565b6103486104d93660046142e4565b612553565b60335473ffffffffffffffffffffffffffffffffffffffff16610372565b61041261266d565b6071546103729073ffffffffffffffffffffffffffffffffffffffff1681565b61031c62093a8081565b606e5461031c9067ffffffffffffffff1681565b61041261ea6081565b6104126105593660046140da565b60676020526000908152604090205481565b60655461037290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b61034861059e366004614301565b61279e565b6069546103729068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103729073ffffffffffffffffffffffffffffffffffffffff1681565b6103486105fd36600461433e565b612873565b6069546102f8907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610348612f18565b60685461031c907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103729073ffffffffffffffffffffffffffffffffffffffff1681565b610348610695366004614431565b6130a7565b6103486106a8366004613e4e565b6135a7565b61041267016345785d8a000081565b606f80546106c990614476565b80601f01602080910402602001604051908101604052809291908181526020018280546106f590614476565b80156107425780601f1061071757610100808354040283529160200191610742565b820191906000526020600020905b81548152906001019060200180831161072557829003601f168201915b505050505081565b60705473ffffffffffffffffffffffffffffffffffffffff1633146107dc5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff16156108f55760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6108fd613644565b6109056136ab565b565b60655460ff16156109a65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610a3f5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b805160685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610fef576000878281518110610aa757610aa76144c9565b602002602001015190506000816060015167ffffffffffffffff161115610cc05783610ad281614527565b945050600081600001518051906020012082602001518360600151604051602001610b3593929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610c025760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610cba5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016107d3565b50610e5a565b60208101511580610d6f5750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610d299160040190815260200190565b6020604051808303816000875af1158015610d48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6c919061454e565b15155b610de15760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016107d3565b80515161ea6011610e5a5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016107d3565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610e90575042816040015167ffffffffffffffff1611155b610f285760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610fd190614527565b95505080604001519550508080610fe790614567565b915050610a8b565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156110925760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016107d3565b6068546000906110c090700100000000000000000000000000000000900467ffffffffffffffff168461459f565b6110d49067ffffffffffffffff16876145c8565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c1693909317939093179290921691909117909155600090815260676020526040902083905590506111b1333061118b8467016345785d8a00006145df565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613735565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d80546106c990614476565b60655460ff16156112aa5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695467ffffffffffffffff90811690881611156113565760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016107d3565b60695467ffffffffffffffff908116908716116114015760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b60205260409020546114b35760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a4016107d3565b60006114c188888888611f4a565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516114f6919061461c565b602060405180830381855afa158015611513573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611536919061454e565b6115409190614667565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916115aa918991899189919060040161467b565b602060405180830381865afa1580156115c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115eb91906146f5565b61165d5760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016107d3565b6069546116bb90339061167a9067ffffffffffffffff168b61459f565b67ffffffffffffffff1661168c61266d565b61169691906145df565b606554610100900473ffffffffffffffffffffffffffffffffffffffff1691906137f3565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b15801561177057600080fd5b505af1158015611784573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60655460ff16156118735760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b8567ffffffffffffffff168767ffffffffffffffff16106119225760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e65774261746368206d75737420626520626960648201527f67676572207468616e20696e69744e756d426174636800000000000000000000608482015260a4016107d3565b60695467ffffffffffffffff90811690871611156119f45760405162461bcd60e51b815260206004820152606260248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e65774261746368206d757374206265206c6560648201527f7373206f7220657175616c207468616e206c617374566572696669656442617460848201527f636800000000000000000000000000000000000000000000000000000000000060a482015260c4016107d3565b67ffffffffffffffff87166000908152606b6020526040902054611aa65760405162461bcd60e51b815260206004820152604e60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d426174636820737461746520726f6f742060648201527f646f6573206e6f74206578697374000000000000000000000000000000000000608482015260a4016107d3565b67ffffffffffffffff86166000908152606b6020526040902054611b585760405162461bcd60e51b815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e6577426174636820737461746520726f6f7460648201527f20646f6573206e6f742065786973740000000000000000000000000000000000608482015260a4016107d3565b6000611b6688888888611f4a565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051611b9b919061461c565b602060405180830381855afa158015611bb8573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611bdb919061454e565b611be59190614667565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611c4f918991899189919060040161467b565b602060405180830381865afa158015611c6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c9091906146f5565b611d025760405162461bcd60e51b815260206004820152603560248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20494e56414c49445f50524f4f46000000000000000000000060648201526084016107d3565b67ffffffffffffffff88166000908152606b6020526040902054869003611db75760405162461bcd60e51b815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2073746f72656420726f6f74206d757374206265206469666660648201527f6572656e74207468616e206e657720737461746520726f6f7400000000000000608482015260a4016107d3565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527fe579d6d18f02941e1d0f59bff70f1b2c894edc991badab38343786df2846fe55910160405180910390a1611e136136ab565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611eb75760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161084b565b611f40613644565b610905600061384e565b67ffffffffffffffff808516600081815260676020526040808220549387168252902054606092911580611f7d57508115155b6120155760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b806120ae5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b60685460009067ffffffffffffffff70010000000000000000000000000000000082048116916121cf917801000000000000000000000000000000000000000000000000909104166001614712565b6121d9919061459f565b6121f59067ffffffffffffffff16670de0b6b3a76400006145df565b905090565b600054610100900460ff161580801561221a5750600054600160ff909116105b806122345750303b158015612234575060005460ff166001145b6122a65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107d3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561230457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d612443878261478c565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f612484858261478c565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560708054928516929091169190911790556124e26138c5565b801561254557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146125ec5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061084b90831515815260200190565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156126e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612708919061454e565b60695460685491925060009167ffffffffffffffff9182169168010000000000000000820481169161276d917001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041661459f565b6127779190614712565b612781919061459f565b67ffffffffffffffff1690506127978183614888565b9250505090565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146128375760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606d612843828261478c565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161084b9190613e09565b60655460ff16156129125760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146129d55760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180612a705760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60685467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612abb91849170010000000000000000000000000000000090041661489c565b1115612b2f5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016107d3565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b84811015612e48576000868281518110612b8f57612b8f6144c9565b602002602001015190508380612ba490614527565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114612cc55760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016107d3565b612cd06001886145c8565b8303612d8e574262093a808360400151612cea9190614712565b67ffffffffffffffff161115612d8e5760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016107d3565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612e3090614527565b96505050508080612e4090614567565b915050612b73565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612f905760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b60705473ffffffffffffffffffffffffffffffffffffffff16331461301d5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561308757600080fd5b505af115801561309b573d6000803e3d6000fd5b5050505061090561394b565b60655460ff16156131465760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146132095760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b6000613213612180565b90508181111561328b5760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016107d3565b61ea608351106133035760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016107d3565b60655461332d90610100900473ffffffffffffffffffffffffffffffffffffffff16333084613735565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa15801561339d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133c1919061454e565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff169060186133fb83614527565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161347493929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000908152606690935291205532330361354457606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26135a1565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613598939291906148b4565b60405180910390a25b50505050565b6135af613644565b73ffffffffffffffffffffffffffffffffffffffff81166136385760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107d3565b6136418161384e565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109055760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561371557600080fd5b505af1158015613729573d6000803e3d6000fd5b50505050610905613a16565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526135a19085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613b0b565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526138499084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161378f565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166139425760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107d3565b6109053361384e565b60655460ff166139c35760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff1615613ab55760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6000613b6d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613bfd9092919063ffffffff16565b8051909150156138495780806020019051810190613b8b91906146f5565b6138495760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107d3565b6060613c0c8484600085613c16565b90505b9392505050565b606082471015613c8e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016107d3565b73ffffffffffffffffffffffffffffffffffffffff85163b613cf25760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107d3565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613d1b919061461c565b60006040518083038185875af1925050503d8060008114613d58576040519150601f19603f3d011682016040523d82523d6000602084013e613d5d565b606091505b5091509150613d6d828286613d78565b979650505050505050565b60608315613d87575081613c0f565b825115613d975782518084602001fd5b8160405162461bcd60e51b81526004016107d39190613e09565b60005b83811015613dcc578181015183820152602001613db4565b838111156135a15750506000910152565b60008151808452613df5816020860160208601613db1565b601f01601f19169290920160200192915050565b602081526000613c0f6020830184613ddd565b73ffffffffffffffffffffffffffffffffffffffff8116811461364157600080fd5b8035613e4981613e1c565b919050565b600060208284031215613e6057600080fd5b8135613c0f81613e1c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613ebd57613ebd613e6b565b60405290565b6040516060810167ffffffffffffffff81118282101715613ebd57613ebd613e6b565b604051601f8201601f1916810167ffffffffffffffff81118282101715613f0f57613f0f613e6b565b604052919050565b600067ffffffffffffffff821115613f3157613f31613e6b565b5060051b60200190565b600082601f830112613f4c57600080fd5b813567ffffffffffffffff811115613f6657613f66613e6b565b613f796020601f19601f84011601613ee6565b818152846020838601011115613f8e57600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613e4957600080fd5b60006020808385031215613fd657600080fd5b823567ffffffffffffffff80821115613fee57600080fd5b818501915085601f83011261400257600080fd5b813561401561401082613f17565b613ee6565b81815260059190911b8301840190848101908883111561403457600080fd5b8585015b838110156140cd578035858111156140505760008081fd5b86016080818c03601f19018113156140685760008081fd5b614070613e9a565b89830135888111156140825760008081fd5b6140908e8c83870101613f3b565b8252506040808401358b83015260606140aa818601613fab565b828401526140b9848601613fab565b908301525085525050918601918601614038565b5098975050505050505050565b6000602082840312156140ec57600080fd5b613c0f82613fab565b806040810183101561410657600080fd5b92915050565b6000806000806000806000610180888a03121561412857600080fd5b61413188613fab565b965061413f60208901613fab565b9550604088013594506060880135935061415c8960808a016140f5565b925061014088018981111561417057600080fd5b60c0890192506141808a826140f5565b91505092959891949750929550565b600080600080608085870312156141a557600080fd5b6141ae85613fab565b93506141bc60208601613fab565b93969395505050506040820135916060013590565b801515811461364157600080fd5b8035613e49816141d1565b60008060008060008060008060008060006101608c8e03121561420c57600080fd5b6142158c613e3e565b9a5061422360208d01613e3e565b995061423160408d01613e3e565b985060608c0135975061424660808d01613e3e565b965061425460a08d016141df565b955067ffffffffffffffff8060c08e0135111561427057600080fd5b6142808e60c08f01358f01613f3b565b955061428e60e08e01613fab565b9450806101008e013511156142a257600080fd5b506142b48d6101008e01358e01613f3b565b92506142c36101208d01613e3e565b91506142d26101408d01613e3e565b90509295989b509295989b9093969950565b6000602082840312156142f657600080fd5b8135613c0f816141d1565b60006020828403121561431357600080fd5b813567ffffffffffffffff81111561432a57600080fd5b61433684828501613f3b565b949350505050565b6000602080838503121561435157600080fd5b823567ffffffffffffffff8082111561436957600080fd5b818501915085601f83011261437d57600080fd5b813561438b61401082613f17565b81815260059190911b830184019084810190888311156143aa57600080fd5b8585015b838110156140cd578035858111156143c65760008081fd5b86016060818c03601f19018113156143de5760008081fd5b6143e6613ec3565b89830135888111156143f85760008081fd5b6144068e8c83870101613f3b565b8252506040808401358b83015261441e838501613fab565b90820152855250509186019186016143ae565b6000806040838503121561444457600080fd5b823567ffffffffffffffff81111561445b57600080fd5b61446785828601613f3b565b95602094909401359450505050565b600181811c9082168061448a57607f821691505b6020821081036144c3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614544576145446144f8565b6001019392505050565b60006020828403121561456057600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614598576145986144f8565b5060010190565b600067ffffffffffffffff838116908316818110156145c0576145c06144f8565b039392505050565b6000828210156145da576145da6144f8565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614617576146176144f8565b500290565b6000825161462e818460208701613db1565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261467657614676614638565b500690565b61012081016040808784376000838201818152879190815b60028110156146b357848483379084018281529284019290600101614693565b5050828760c0870137610100850181815286935091505b60018110156146e95782518252602092830192909101906001016146ca565b50505095945050505050565b60006020828403121561470757600080fd5b8151613c0f816141d1565b600067ffffffffffffffff808316818516808303821115614735576147356144f8565b01949350505050565b601f82111561384957600081815260208120601f850160051c810160208610156147655750805b601f850160051c820191505b8181101561478457828155600101614771565b505050505050565b815167ffffffffffffffff8111156147a6576147a6613e6b565b6147ba816147b48454614476565b8461473e565b602080601f83116001811461480d57600084156147d75750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614784565b600085815260208120601f198616915b8281101561483c5788860151825594840194600190910190840161481d565b508582101561487857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008261489757614897614638565b500490565b600082198211156148af576148af6144f8565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006148e96060830184613ddd565b9594505050505056fea26469706673582212203146999accd90085aed82493dac693741e15c8a3fe634147953b164c9909fc4764736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102c85760003560e01c80638c4a0af71161017b578063cfa8ed47116100d8578063e7a7ed021161008c578063eaeb077b11610071578063eaeb077b14610687578063f2fde38b1461069a578063f7552761146106ad57600080fd5b8063e7a7ed0214610637578063e8bf92ed1461066757600080fd5b8063d8d1091b116100bd578063d8d1091b146105ef578063d8f54db014610602578063dbc169761461062f57600080fd5b8063cfa8ed47146105a3578063d02103ca146105cf57600080fd5b8063adc879e91161012f578063b4d63f5811610114578063b4d63f581461054b578063b6b0b0971461056b578063c89e42df1461059057600080fd5b8063adc879e91461052e578063b02286c01461054257600080fd5b806399f5634e1161016057806399f5634e146104fc578063a3c573eb14610504578063ab9fc5ef1461052457600080fd5b80638c4a0af7146104cb5780638da5cb5b146104de57600080fd5b8063542028d511610229578063715018a6116101dd57806379847057116101c2578063798470571461049c5780637fcb3653146104a457806381df7d3f146104b857600080fd5b8063715018a6146104815780637152facf1461048957600080fd5b80636766f09d1161020e5780636766f09d1461043b5780636b8616ce1461044e5780636ff512cc1461046e57600080fd5b8063542028d51461042057806355b925e61461042857600080fd5b806327eb6c0f11610280578063423fa85611610265578063423fa856146103aa57806345605267146103ca5780635392c5e0146103f257600080fd5b806327eb6c0f146103525780633c1582671461039757600080fd5b806319d8ac61116102b157806319d8ac61146103085780631c1083e2146103355780632072f6c51461034a57600080fd5b8063107bf28c146102cd57806315064c96146102eb575b600080fd5b6102d56106bc565b6040516102e29190613e09565b60405180910390f35b6065546102f89060ff1681565b60405190151581526020016102e2565b60685461031c9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102e2565b610348610343366004613e4e565b61074a565b005b610348610856565b6070546103729073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e2565b6103486103a5366004613fc3565b610907565b60685461031c9068010000000000000000900467ffffffffffffffff1681565b60685461031c90700100000000000000000000000000000000900467ffffffffffffffff1681565b6104126104003660046140da565b606b6020526000908152604090205481565b6040519081526020016102e2565b6102d56111fe565b61034861043636600461410c565b61120b565b61034861044936600461410c565b6117d4565b61041261045c3660046140da565b60666020526000908152604090205481565b61034861047c366004613e4e565b611e1e565b610348611f38565b6102d561049736600461418f565b611f4a565b610412612180565b60695461031c9067ffffffffffffffff1681565b6103486104c63660046141ea565b6121fa565b6103486104d93660046142e4565b612553565b60335473ffffffffffffffffffffffffffffffffffffffff16610372565b61041261266d565b6071546103729073ffffffffffffffffffffffffffffffffffffffff1681565b61031c62093a8081565b606e5461031c9067ffffffffffffffff1681565b61041261ea6081565b6104126105593660046140da565b60676020526000908152604090205481565b60655461037290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b61034861059e366004614301565b61279e565b6069546103729068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103729073ffffffffffffffffffffffffffffffffffffffff1681565b6103486105fd36600461433e565b612873565b6069546102f8907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610348612f18565b60685461031c907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103729073ffffffffffffffffffffffffffffffffffffffff1681565b610348610695366004614431565b6130a7565b6103486106a8366004613e4e565b6135a7565b61041267016345785d8a000081565b606f80546106c990614476565b80601f01602080910402602001604051908101604052809291908181526020018280546106f590614476565b80156107425780601f1061071757610100808354040283529160200191610742565b820191906000526020600020905b81548152906001019060200180831161072557829003601f168201915b505050505081565b60705473ffffffffffffffffffffffffffffffffffffffff1633146107dc5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff16156108f55760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6108fd613644565b6109056136ab565b565b60655460ff16156109a65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610a3f5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b805160685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610fef576000878281518110610aa757610aa76144c9565b602002602001015190506000816060015167ffffffffffffffff161115610cc05783610ad281614527565b945050600081600001518051906020012082602001518360600151604051602001610b3593929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610c025760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610cba5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016107d3565b50610e5a565b60208101511580610d6f5750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610d299160040190815260200190565b6020604051808303816000875af1158015610d48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6c919061454e565b15155b610de15760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016107d3565b80515161ea6011610e5a5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016107d3565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610e90575042816040015167ffffffffffffffff1611155b610f285760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610fd190614527565b95505080604001519550508080610fe790614567565b915050610a8b565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156110925760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016107d3565b6068546000906110c090700100000000000000000000000000000000900467ffffffffffffffff168461459f565b6110d49067ffffffffffffffff16876145c8565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c1693909317939093179290921691909117909155600090815260676020526040902083905590506111b1333061118b8467016345785d8a00006145df565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613735565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d80546106c990614476565b60655460ff16156112aa5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695467ffffffffffffffff90811690881611156113565760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016107d3565b60695467ffffffffffffffff908116908716116114015760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b60205260409020546114b35760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a4016107d3565b60006114c188888888611f4a565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516114f6919061461c565b602060405180830381855afa158015611513573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611536919061454e565b6115409190614667565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916115aa918991899189919060040161467b565b602060405180830381865afa1580156115c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115eb91906146f5565b61165d5760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016107d3565b6069546116bb90339061167a9067ffffffffffffffff168b61459f565b67ffffffffffffffff1661168c61266d565b61169691906145df565b606554610100900473ffffffffffffffffffffffffffffffffffffffff1691906137f3565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b15801561177057600080fd5b505af1158015611784573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60655460ff16156118735760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b8567ffffffffffffffff168767ffffffffffffffff16106119225760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e65774261746368206d75737420626520626960648201527f67676572207468616e20696e69744e756d426174636800000000000000000000608482015260a4016107d3565b60695467ffffffffffffffff90811690871611156119f45760405162461bcd60e51b815260206004820152606260248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e65774261746368206d757374206265206c6560648201527f7373206f7220657175616c207468616e206c617374566572696669656442617460848201527f636800000000000000000000000000000000000000000000000000000000000060a482015260c4016107d3565b67ffffffffffffffff87166000908152606b6020526040902054611aa65760405162461bcd60e51b815260206004820152604e60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d426174636820737461746520726f6f742060648201527f646f6573206e6f74206578697374000000000000000000000000000000000000608482015260a4016107d3565b67ffffffffffffffff86166000908152606b6020526040902054611b585760405162461bcd60e51b815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e6577426174636820737461746520726f6f7460648201527f20646f6573206e6f742065786973740000000000000000000000000000000000608482015260a4016107d3565b6000611b6688888888611f4a565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051611b9b919061461c565b602060405180830381855afa158015611bb8573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611bdb919061454e565b611be59190614667565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611c4f918991899189919060040161467b565b602060405180830381865afa158015611c6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c9091906146f5565b611d025760405162461bcd60e51b815260206004820152603560248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20494e56414c49445f50524f4f46000000000000000000000060648201526084016107d3565b67ffffffffffffffff88166000908152606b6020526040902054869003611db75760405162461bcd60e51b815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2073746f72656420726f6f74206d757374206265206469666660648201527f6572656e74207468616e206e657720737461746520726f6f7400000000000000608482015260a4016107d3565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527fe579d6d18f02941e1d0f59bff70f1b2c894edc991badab38343786df2846fe55910160405180910390a1611e136136ab565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611eb75760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161084b565b611f40613644565b610905600061384e565b67ffffffffffffffff808516600081815260676020526040808220549387168252902054606092911580611f7d57508115155b6120155760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b806120ae5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b60685460009067ffffffffffffffff70010000000000000000000000000000000082048116916121cf917801000000000000000000000000000000000000000000000000909104166001614712565b6121d9919061459f565b6121f59067ffffffffffffffff16670de0b6b3a76400006145df565b905090565b600054610100900460ff161580801561221a5750600054600160ff909116105b806122345750303b158015612234575060005460ff166001145b6122a65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107d3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561230457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d612443878261478c565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f612484858261478c565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560708054928516929091169190911790556124e26138c5565b801561254557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146125ec5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061084b90831515815260200190565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156126e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612708919061454e565b60695460685491925060009167ffffffffffffffff9182169168010000000000000000820481169161276d917001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041661459f565b6127779190614712565b612781919061459f565b67ffffffffffffffff1690506127978183614888565b9250505090565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146128375760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606d612843828261478c565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161084b9190613e09565b60655460ff16156129125760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146129d55760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180612a705760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60685467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612abb91849170010000000000000000000000000000000090041661489c565b1115612b2f5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016107d3565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b84811015612e48576000868281518110612b8f57612b8f6144c9565b602002602001015190508380612ba490614527565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114612cc55760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016107d3565b612cd06001886145c8565b8303612d8e574262093a808360400151612cea9190614712565b67ffffffffffffffff161115612d8e5760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016107d3565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612e3090614527565b96505050508080612e4090614567565b915050612b73565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612f905760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b60705473ffffffffffffffffffffffffffffffffffffffff16331461301d5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561308757600080fd5b505af115801561309b573d6000803e3d6000fd5b5050505061090561394b565b60655460ff16156131465760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146132095760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b6000613213612180565b90508181111561328b5760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016107d3565b61ea608351106133035760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016107d3565b60655461332d90610100900473ffffffffffffffffffffffffffffffffffffffff16333084613735565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa15801561339d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133c1919061454e565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff169060186133fb83614527565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161347493929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000908152606690935291205532330361354457606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26135a1565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613598939291906148b4565b60405180910390a25b50505050565b6135af613644565b73ffffffffffffffffffffffffffffffffffffffff81166136385760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107d3565b6136418161384e565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109055760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561371557600080fd5b505af1158015613729573d6000803e3d6000fd5b50505050610905613a16565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526135a19085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613b0b565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526138499084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161378f565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166139425760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107d3565b6109053361384e565b60655460ff166139c35760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff1615613ab55760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6000613b6d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613bfd9092919063ffffffff16565b8051909150156138495780806020019051810190613b8b91906146f5565b6138495760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107d3565b6060613c0c8484600085613c16565b90505b9392505050565b606082471015613c8e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016107d3565b73ffffffffffffffffffffffffffffffffffffffff85163b613cf25760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107d3565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613d1b919061461c565b60006040518083038185875af1925050503d8060008114613d58576040519150601f19603f3d011682016040523d82523d6000602084013e613d5d565b606091505b5091509150613d6d828286613d78565b979650505050505050565b60608315613d87575081613c0f565b825115613d975782518084602001fd5b8160405162461bcd60e51b81526004016107d39190613e09565b60005b83811015613dcc578181015183820152602001613db4565b838111156135a15750506000910152565b60008151808452613df5816020860160208601613db1565b601f01601f19169290920160200192915050565b602081526000613c0f6020830184613ddd565b73ffffffffffffffffffffffffffffffffffffffff8116811461364157600080fd5b8035613e4981613e1c565b919050565b600060208284031215613e6057600080fd5b8135613c0f81613e1c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613ebd57613ebd613e6b565b60405290565b6040516060810167ffffffffffffffff81118282101715613ebd57613ebd613e6b565b604051601f8201601f1916810167ffffffffffffffff81118282101715613f0f57613f0f613e6b565b604052919050565b600067ffffffffffffffff821115613f3157613f31613e6b565b5060051b60200190565b600082601f830112613f4c57600080fd5b813567ffffffffffffffff811115613f6657613f66613e6b565b613f796020601f19601f84011601613ee6565b818152846020838601011115613f8e57600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613e4957600080fd5b60006020808385031215613fd657600080fd5b823567ffffffffffffffff80821115613fee57600080fd5b818501915085601f83011261400257600080fd5b813561401561401082613f17565b613ee6565b81815260059190911b8301840190848101908883111561403457600080fd5b8585015b838110156140cd578035858111156140505760008081fd5b86016080818c03601f19018113156140685760008081fd5b614070613e9a565b89830135888111156140825760008081fd5b6140908e8c83870101613f3b565b8252506040808401358b83015260606140aa818601613fab565b828401526140b9848601613fab565b908301525085525050918601918601614038565b5098975050505050505050565b6000602082840312156140ec57600080fd5b613c0f82613fab565b806040810183101561410657600080fd5b92915050565b6000806000806000806000610180888a03121561412857600080fd5b61413188613fab565b965061413f60208901613fab565b9550604088013594506060880135935061415c8960808a016140f5565b925061014088018981111561417057600080fd5b60c0890192506141808a826140f5565b91505092959891949750929550565b600080600080608085870312156141a557600080fd5b6141ae85613fab565b93506141bc60208601613fab565b93969395505050506040820135916060013590565b801515811461364157600080fd5b8035613e49816141d1565b60008060008060008060008060008060006101608c8e03121561420c57600080fd5b6142158c613e3e565b9a5061422360208d01613e3e565b995061423160408d01613e3e565b985060608c0135975061424660808d01613e3e565b965061425460a08d016141df565b955067ffffffffffffffff8060c08e0135111561427057600080fd5b6142808e60c08f01358f01613f3b565b955061428e60e08e01613fab565b9450806101008e013511156142a257600080fd5b506142b48d6101008e01358e01613f3b565b92506142c36101208d01613e3e565b91506142d26101408d01613e3e565b90509295989b509295989b9093969950565b6000602082840312156142f657600080fd5b8135613c0f816141d1565b60006020828403121561431357600080fd5b813567ffffffffffffffff81111561432a57600080fd5b61433684828501613f3b565b949350505050565b6000602080838503121561435157600080fd5b823567ffffffffffffffff8082111561436957600080fd5b818501915085601f83011261437d57600080fd5b813561438b61401082613f17565b81815260059190911b830184019084810190888311156143aa57600080fd5b8585015b838110156140cd578035858111156143c65760008081fd5b86016060818c03601f19018113156143de5760008081fd5b6143e6613ec3565b89830135888111156143f85760008081fd5b6144068e8c83870101613f3b565b8252506040808401358b83015261441e838501613fab565b90820152855250509186019186016143ae565b6000806040838503121561444457600080fd5b823567ffffffffffffffff81111561445b57600080fd5b61446785828601613f3b565b95602094909401359450505050565b600181811c9082168061448a57607f821691505b6020821081036144c3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614544576145446144f8565b6001019392505050565b60006020828403121561456057600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614598576145986144f8565b5060010190565b600067ffffffffffffffff838116908316818110156145c0576145c06144f8565b039392505050565b6000828210156145da576145da6144f8565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614617576146176144f8565b500290565b6000825161462e818460208701613db1565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261467657614676614638565b500690565b61012081016040808784376000838201818152879190815b60028110156146b357848483379084018281529284019290600101614693565b5050828760c0870137610100850181815286935091505b60018110156146e95782518252602092830192909101906001016146ca565b50505095945050505050565b60006020828403121561470757600080fd5b8151613c0f816141d1565b600067ffffffffffffffff808316818516808303821115614735576147356144f8565b01949350505050565b601f82111561384957600081815260208120601f850160051c810160208610156147655750805b601f850160051c820191505b8181101561478457828155600101614771565b505050505050565b815167ffffffffffffffff8111156147a6576147a6613e6b565b6147ba816147b48454614476565b8461473e565b602080601f83116001811461480d57600084156147d75750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614784565b600085815260208120601f198616915b8281101561483c5788860151825594840194600190910190840161481d565b508582101561487857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008261489757614897614638565b500490565b600082198211156148af576148af6144f8565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006148e96060830184613ddd565b9594505050505056fea26469706673582212203146999accd90085aed82493dac693741e15c8a3fe634147953b164c9909fc4764736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/ProofOfEfficiencyMock.json b/compiled-contracts/ProofOfEfficiencyMock.json index 4a787d5ba..f042c11ab 100644 --- a/compiled-contracts/ProofOfEfficiencyMock.json +++ b/compiled-contracts/ProofOfEfficiencyMock.json @@ -1100,8 +1100,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506151b2806100206000396000f3fe608060405234801561001057600080fd5b506004361061032b5760003560e01c80638c4a0af7116101b2578063c89e42df116100f9578063dbc16976116100a2578063eaeb077b1161007c578063eaeb077b14610810578063f2fde38b14610823578063f755276114610836578063fe16564f1461084557600080fd5b8063dbc16976146107b8578063e7a7ed02146107c0578063e8bf92ed146107f057600080fd5b8063d0ae98dd116100d3578063d0ae98dd14610765578063d8d1091b14610778578063d8f54db01461078b57600080fd5b8063c89e42df14610706578063cfa8ed4714610719578063d02103ca1461074557600080fd5b8063ab9fc5ef1161015b578063b4d63f5811610135578063b4d63f58146106ae578063b6b0b097146106ce578063c0cad302146106f357600080fd5b8063ab9fc5ef14610687578063adc879e914610691578063b02286c0146106a557600080fd5b806399f5634e1161018c57806399f5634e1461064c5780639b79676014610654578063a3c573eb1461066757600080fd5b80638c4a0af7146106085780638da5cb5b1461061b57806396dc3d391461063957600080fd5b80635437988d11610276578063715018a61161021f57806379847057116101f957806379847057146105d95780637fcb3653146105e157806381df7d3f146105f557600080fd5b8063715018a6146105ab5780637152facf146105b3578063748608de146105c657600080fd5b80636766f09d116102505780636766f09d146105655780636b8616ce146105785780636ff512cc1461059857600080fd5b80635437988d1461049e57806355b925e6146104b1578063574f649e146104c457600080fd5b806327eb6c0f116102d857806345605267116102b257806345605267146104405780635392c5e014610468578063542028d51461049657600080fd5b806327eb6c0f146103c85780633c1582671461040d578063423fa8561461042057600080fd5b80631a26da14116103095780631a26da14146103985780631c1083e2146103ad5780632072f6c5146103c057600080fd5b8063107bf28c1461033057806315064c961461034e57806319d8ac611461036b575b600080fd5b610338610858565b60405161034591906145c7565b60405180910390f35b60655461035b9060ff1681565b6040519015158152602001610345565b60685461037f9067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610345565b6103ab6103a63660046145f7565b6108e6565b005b6103ab6103bb36600461464e565b61090b565b6103ab610a17565b6070546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610345565b6103ab61041b3660046147ab565b610ac8565b60685461037f9068010000000000000000900467ffffffffffffffff1681565b60685461037f90700100000000000000000000000000000000900467ffffffffffffffff1681565b6104886104763660046148c2565b606b6020526000908152604090205481565b604051908152602001610345565b6103386113bf565b6103ab6104ac36600461464e565b6113cc565b6103ab6104bf3660046148f4565b61141b565b6104886104d2366004614977565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b6103ab6105733660046148f4565b6119e4565b6104886105863660046148c2565b60666020526000908152604090205481565b6103ab6105a636600461464e565b612008565b6103ab612122565b6103386105c13660046149ed565b612134565b6103ab6105d43660046148f4565b61236a565b6104886125d3565b60695461037f9067ffffffffffffffff1681565b6103ab610603366004614a48565b61264d565b6103ab610616366004614b42565b6129a6565b60335473ffffffffffffffffffffffffffffffffffffffff166103e8565b6103ab6106473660046148c2565b612ac0565b610488612b03565b6103ab6106623660046148c2565b612c34565b6071546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b61037f62093a8081565b606e5461037f9067ffffffffffffffff1681565b61048861ea6081565b6104886106bc3660046148c2565b60676020526000908152604090205481565b6065546103e890610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6103ab610701366004614b5f565b612c83565b6103ab610714366004614b5f565b612c9b565b6069546103e89068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b6104886107733660046149ed565b612d70565b6103ab610786366004614b9c565b61301c565b60695461035b907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b6103ab6136c1565b60685461037f907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b6103ab61081e366004614c8f565b613851565b6103ab61083136600461464e565b613d51565b61048867016345785d8a000081565b6103ab610853366004614cd4565b613dee565b606f805461086590614d00565b80601f016020809104026020016040519081016040528092919081815260200182805461089190614d00565b80156108de5780601f106108b3576101008083540402835291602001916108de565b820191906000526020600020905b8154815290600101906020018083116108c157829003601f168201915b505050505081565b6108ee613e11565b67ffffffffffffffff909116600090815260676020526040902055565b60705473ffffffffffffffffffffffffffffffffffffffff16331461099d5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff1615610ab65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b610abe613e11565b610ac6613e78565b565b60655460ff1615610b675760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610c005760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b805160685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b858110156111b0576000878281518110610c6857610c68614d53565b602002602001015190506000816060015167ffffffffffffffff161115610e815783610c9381614db1565b945050600081600001518051906020012082602001518360600151604051602001610cf693929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610dc35760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610e7b5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610994565b5061101b565b60208101511580610f305750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610eea9160040190815260200190565b6020604051808303816000875af1158015610f09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2d9190614dd8565b15155b610fa25760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610994565b80515161ea601161101b5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610994565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015611051575042816040015167ffffffffffffffff1611155b6110e95760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061119290614db1565b955050806040015195505080806111a890614df1565b915050610c4c565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156112535760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610994565b60685460009061128190700100000000000000000000000000000000900467ffffffffffffffff1684614e29565b6112959067ffffffffffffffff1687614e52565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c169390931793909317929092169190911790915560009081526067602052604090208390559050611372333061134c8467016345785d8a0000614e69565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613f02565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d805461086590614d00565b6113d4613e11565b606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60655460ff16156114ba5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff90811690881611156115665760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a401610994565b60695467ffffffffffffffff908116908716116116115760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b60205260409020546116c35760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a401610994565b60006116d188888888612134565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516117069190614ea6565b602060405180830381855afa158015611723573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906117469190614dd8565b6117509190614ef1565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916117ba9189918991899190600401614f05565b602060405180830381865afa1580156117d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117fb9190614f7f565b61186d5760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610994565b6069546118cb90339061188a9067ffffffffffffffff168b614e29565b67ffffffffffffffff1661189c612b03565b6118a69190614e69565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169190613fc0565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b15801561198057600080fd5b505af1158015611994573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60655460ff1615611a835760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8567ffffffffffffffff168767ffffffffffffffff1610611b325760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e65774261746368206d75737420626520626960648201527f67676572207468616e20696e69744e756d426174636800000000000000000000608482015260a401610994565b60695467ffffffffffffffff9081169087161115611bde5760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d4261746368206d757374206265206c657360648201527f73207468616e206c617374566572696669656442617463680000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b6020526040902054611c905760405162461bcd60e51b815260206004820152604e60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d426174636820737461746520726f6f742060648201527f646f6573206e6f74206578697374000000000000000000000000000000000000608482015260a401610994565b67ffffffffffffffff86166000908152606b6020526040902054611d425760405162461bcd60e51b815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e6577426174636820737461746520726f6f7460648201527f20646f6573206e6f742065786973740000000000000000000000000000000000608482015260a401610994565b6000611d5088888888612134565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051611d859190614ea6565b602060405180830381855afa158015611da2573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611dc59190614dd8565b611dcf9190614ef1565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611e399189918991899190600401614f05565b602060405180830381865afa158015611e56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7a9190614f7f565b611eec5760405162461bcd60e51b815260206004820152603560248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20494e56414c49445f50524f4f4600000000000000000000006064820152608401610994565b67ffffffffffffffff88166000908152606b6020526040902054869003611fa15760405162461bcd60e51b815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2073746f72656420726f6f74206d757374206265206469666660648201527f6572656e74207468616e206e657720737461746520726f6f7400000000000000608482015260a401610994565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527fe579d6d18f02941e1d0f59bff70f1b2c894edc991badab38343786df2846fe55910160405180910390a1611ffd613e78565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146120a15760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610a0c565b61212a613e11565b610ac6600061401b565b67ffffffffffffffff80851660008181526067602052604080822054938716825290205460609291158061216757508115155b6121ff5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b806122985760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b612372613e11565b60695467ffffffffffffffff908116908816111561241e5760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff908116908716116124c95760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610994565b67ffffffffffffffff808816600090815260676020526040808220549289168252902054816125605760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b806118cb5760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691612622917801000000000000000000000000000000000000000000000000909104166001614f9c565b61262c9190614e29565b6126489067ffffffffffffffff16670de0b6b3a7640000614e69565b905090565b600054610100900460ff161580801561266d5750600054600160ff909116105b806126875750303b158015612687575060005460ff166001145b6126f95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610994565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561275757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d6128968782615016565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f6128d78582615016565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556070805492851692909116919091179055612935614092565b801561299857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612a3f5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a0c90831515815260200190565b612ac8613e11565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612b7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b9e9190614dd8565b60695460685491925060009167ffffffffffffffff91821691680100000000000000008204811691612c039170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614e29565b612c0d9190614f9c565b612c179190614e29565b67ffffffffffffffff169050612c2d8183615112565b9250505090565b612c3c613e11565b6068805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b612c8b613e11565b606f612c978282615016565b5050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612d345760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606d612d408282615016565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a0c91906145c7565b60695460009067ffffffffffffffff868116911614612e1d5760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8467ffffffffffffffff168467ffffffffffffffff1611612ecc5760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a401610994565b60685467ffffffffffffffff6801000000000000000090910481169085161115612f845760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6000612f9286868686612134565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051612fc79190614ea6565b602060405180830381855afa158015612fe4573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906130079190614dd8565b6130119190614ef1565b979650505050505050565b60655460ff16156130bb5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461317e5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b8051806132195760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60685467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691613264918491700100000000000000000000000000000000900416615126565b11156132d85760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610994565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b848110156135f157600086828151811061333857613338614d53565b60200260200101519050838061334d90614db1565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff881660009081526066909352912054909150811461346e5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610994565b613479600188614e52565b8303613537574262093a8083604001516134939190614f9c565b67ffffffffffffffff1611156135375760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610994565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c0160405160208183030381529060405280519060200120935085806135d990614db1565b965050505080806135e990614df1565b91505061331c565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff161561373a5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b60705473ffffffffffffffffffffffffffffffffffffffff1633146137c75760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c0000006064820152608401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561383157600080fd5b505af1158015613845573d6000803e3d6000fd5b50505050610ac6614118565b60655460ff16156138f05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146139b35760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b60006139bd6125d3565b905081811115613a355760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610994565b61ea60835110613aad5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610994565b606554613ad790610100900473ffffffffffffffffffffffffffffffffffffffff16333084613f02565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613b47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b6b9190614dd8565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613ba583614db1565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505083805190602001208142604051602001613c1e93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526066909352912055323303613cee57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613d4b565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613d429392919061513e565b60405180910390a25b50505050565b613d59613e11565b73ffffffffffffffffffffffffffffffffffffffff8116613de25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610994565b613deb8161401b565b50565b613df6613e11565b67ffffffffffffffff166000908152606b6020526040902055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ac65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613ee257600080fd5b505af1158015613ef6573d6000803e3d6000fd5b50505050610ac66141e4565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052613d4b9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526142d9565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526140169084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401613f5c565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661410f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610994565b610ac63361401b565b60655460ff16156141915760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff16156142835760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b600061433b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166143cb9092919063ffffffff16565b80519091501561401657808060200190518101906143599190614f7f565b6140165760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610994565b60606143da84846000856143e4565b90505b9392505050565b60608247101561445c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610994565b73ffffffffffffffffffffffffffffffffffffffff85163b6144c05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610994565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516144e99190614ea6565b60006040518083038185875af1925050503d8060008114614526576040519150601f19603f3d011682016040523d82523d6000602084013e61452b565b606091505b5091509150613011828286606083156145455750816143dd565b8251156145555782518084602001fd5b8160405162461bcd60e51b815260040161099491906145c7565b60005b8381101561458a578181015183820152602001614572565b83811115613d4b5750506000910152565b600081518084526145b381602086016020860161456f565b601f01601f19169290920160200192915050565b6020815260006143dd602083018461459b565b803567ffffffffffffffff811681146145f257600080fd5b919050565b6000806040838503121561460a57600080fd5b614613836145da565b946020939093013593505050565b73ffffffffffffffffffffffffffffffffffffffff81168114613deb57600080fd5b80356145f281614621565b60006020828403121561466057600080fd5b81356143dd81614621565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff811182821017156146bd576146bd61466b565b60405290565b6040516060810167ffffffffffffffff811182821017156146bd576146bd61466b565b604051601f8201601f1916810167ffffffffffffffff8111828210171561470f5761470f61466b565b604052919050565b600067ffffffffffffffff8211156147315761473161466b565b5060051b60200190565b600082601f83011261474c57600080fd5b813567ffffffffffffffff8111156147665761476661466b565b6147796020601f19601f840116016146e6565b81815284602083860101111561478e57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208083850312156147be57600080fd5b823567ffffffffffffffff808211156147d657600080fd5b818501915085601f8301126147ea57600080fd5b81356147fd6147f882614717565b6146e6565b81815260059190911b8301840190848101908883111561481c57600080fd5b8585015b838110156148b5578035858111156148385760008081fd5b86016080818c03601f19018113156148505760008081fd5b61485861469a565b898301358881111561486a5760008081fd5b6148788e8c8387010161473b565b8252506040808401358b83015260606148928186016145da565b828401526148a18486016145da565b908301525085525050918601918601614820565b5098975050505050505050565b6000602082840312156148d457600080fd5b6143dd826145da565b80604081018310156148ee57600080fd5b92915050565b6000806000806000806000610180888a03121561491057600080fd5b614919886145da565b9650614927602089016145da565b955060408801359450606088013593506149448960808a016148dd565b925061014088018981111561495857600080fd5b60c0890192506149688a826148dd565b91505092959891949750929550565b600080600080600060a0868803121561498f57600080fd5b85359450602086013567ffffffffffffffff8111156149ad57600080fd5b6149b98882890161473b565b945050604086013592506149cf606087016145da565b915060808601356149df81614621565b809150509295509295909350565b60008060008060808587031215614a0357600080fd5b614a0c856145da565b9350614a1a602086016145da565b93969395505050506040820135916060013590565b8015158114613deb57600080fd5b80356145f281614a2f565b60008060008060008060008060008060006101608c8e031215614a6a57600080fd5b614a738c614643565b9a50614a8160208d01614643565b9950614a8f60408d01614643565b985060608c01359750614aa460808d01614643565b9650614ab260a08d01614a3d565b955067ffffffffffffffff8060c08e01351115614ace57600080fd5b614ade8e60c08f01358f0161473b565b9550614aec60e08e016145da565b9450806101008e01351115614b0057600080fd5b50614b128d6101008e01358e0161473b565b9250614b216101208d01614643565b9150614b306101408d01614643565b90509295989b509295989b9093969950565b600060208284031215614b5457600080fd5b81356143dd81614a2f565b600060208284031215614b7157600080fd5b813567ffffffffffffffff811115614b8857600080fd5b614b948482850161473b565b949350505050565b60006020808385031215614baf57600080fd5b823567ffffffffffffffff80821115614bc757600080fd5b818501915085601f830112614bdb57600080fd5b8135614be96147f882614717565b81815260059190911b83018401908481019088831115614c0857600080fd5b8585015b838110156148b557803585811115614c245760008081fd5b86016060818c03601f1901811315614c3c5760008081fd5b614c446146c3565b8983013588811115614c565760008081fd5b614c648e8c8387010161473b565b8252506040808401358b830152614c7c8385016145da565b9082015285525050918601918601614c0c565b60008060408385031215614ca257600080fd5b823567ffffffffffffffff811115614cb957600080fd5b614cc58582860161473b565b95602094909401359450505050565b60008060408385031215614ce757600080fd5b82359150614cf7602084016145da565b90509250929050565b600181811c90821680614d1457607f821691505b602082108103614d4d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614dce57614dce614d82565b6001019392505050565b600060208284031215614dea57600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e2257614e22614d82565b5060010190565b600067ffffffffffffffff83811690831681811015614e4a57614e4a614d82565b039392505050565b600082821015614e6457614e64614d82565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ea157614ea1614d82565b500290565b60008251614eb881846020870161456f565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614f0057614f00614ec2565b500690565b61012081016040808784376000838201818152879190815b6002811015614f3d57848483379084018281529284019290600101614f1d565b5050828760c0870137610100850181815286935091505b6001811015614f73578251825260209283019290910190600101614f54565b50505095945050505050565b600060208284031215614f9157600080fd5b81516143dd81614a2f565b600067ffffffffffffffff808316818516808303821115614fbf57614fbf614d82565b01949350505050565b601f82111561401657600081815260208120601f850160051c81016020861015614fef5750805b601f850160051c820191505b8181101561500e57828155600101614ffb565b505050505050565b815167ffffffffffffffff8111156150305761503061466b565b6150448161503e8454614d00565b84614fc8565b602080601f83116001811461509757600084156150615750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561500e565b600085815260208120601f198616915b828110156150c6578886015182559484019460019091019084016150a7565b508582101561510257878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008261512157615121614ec2565b500490565b6000821982111561513957615139614d82565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff83166020820152606060408201526000615173606083018461459b565b9594505050505056fea26469706673582212201002a0be18bc33019714770ac596cf0268b1a00cfca1b5d696d7dc00e4a8255464736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061032b5760003560e01c80638c4a0af7116101b2578063c89e42df116100f9578063dbc16976116100a2578063eaeb077b1161007c578063eaeb077b14610810578063f2fde38b14610823578063f755276114610836578063fe16564f1461084557600080fd5b8063dbc16976146107b8578063e7a7ed02146107c0578063e8bf92ed146107f057600080fd5b8063d0ae98dd116100d3578063d0ae98dd14610765578063d8d1091b14610778578063d8f54db01461078b57600080fd5b8063c89e42df14610706578063cfa8ed4714610719578063d02103ca1461074557600080fd5b8063ab9fc5ef1161015b578063b4d63f5811610135578063b4d63f58146106ae578063b6b0b097146106ce578063c0cad302146106f357600080fd5b8063ab9fc5ef14610687578063adc879e914610691578063b02286c0146106a557600080fd5b806399f5634e1161018c57806399f5634e1461064c5780639b79676014610654578063a3c573eb1461066757600080fd5b80638c4a0af7146106085780638da5cb5b1461061b57806396dc3d391461063957600080fd5b80635437988d11610276578063715018a61161021f57806379847057116101f957806379847057146105d95780637fcb3653146105e157806381df7d3f146105f557600080fd5b8063715018a6146105ab5780637152facf146105b3578063748608de146105c657600080fd5b80636766f09d116102505780636766f09d146105655780636b8616ce146105785780636ff512cc1461059857600080fd5b80635437988d1461049e57806355b925e6146104b1578063574f649e146104c457600080fd5b806327eb6c0f116102d857806345605267116102b257806345605267146104405780635392c5e014610468578063542028d51461049657600080fd5b806327eb6c0f146103c85780633c1582671461040d578063423fa8561461042057600080fd5b80631a26da14116103095780631a26da14146103985780631c1083e2146103ad5780632072f6c5146103c057600080fd5b8063107bf28c1461033057806315064c961461034e57806319d8ac611461036b575b600080fd5b610338610858565b60405161034591906145c7565b60405180910390f35b60655461035b9060ff1681565b6040519015158152602001610345565b60685461037f9067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610345565b6103ab6103a63660046145f7565b6108e6565b005b6103ab6103bb36600461464e565b61090b565b6103ab610a17565b6070546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610345565b6103ab61041b3660046147ab565b610ac8565b60685461037f9068010000000000000000900467ffffffffffffffff1681565b60685461037f90700100000000000000000000000000000000900467ffffffffffffffff1681565b6104886104763660046148c2565b606b6020526000908152604090205481565b604051908152602001610345565b6103386113bf565b6103ab6104ac36600461464e565b6113cc565b6103ab6104bf3660046148f4565b61141b565b6104886104d2366004614977565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b6103ab6105733660046148f4565b6119e4565b6104886105863660046148c2565b60666020526000908152604090205481565b6103ab6105a636600461464e565b612008565b6103ab612122565b6103386105c13660046149ed565b612134565b6103ab6105d43660046148f4565b61236a565b6104886125d3565b60695461037f9067ffffffffffffffff1681565b6103ab610603366004614a48565b61264d565b6103ab610616366004614b42565b6129a6565b60335473ffffffffffffffffffffffffffffffffffffffff166103e8565b6103ab6106473660046148c2565b612ac0565b610488612b03565b6103ab6106623660046148c2565b612c34565b6071546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b61037f62093a8081565b606e5461037f9067ffffffffffffffff1681565b61048861ea6081565b6104886106bc3660046148c2565b60676020526000908152604090205481565b6065546103e890610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6103ab610701366004614b5f565b612c83565b6103ab610714366004614b5f565b612c9b565b6069546103e89068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b6104886107733660046149ed565b612d70565b6103ab610786366004614b9c565b61301c565b60695461035b907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b6103ab6136c1565b60685461037f907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b6103ab61081e366004614c8f565b613851565b6103ab61083136600461464e565b613d51565b61048867016345785d8a000081565b6103ab610853366004614cd4565b613dee565b606f805461086590614d00565b80601f016020809104026020016040519081016040528092919081815260200182805461089190614d00565b80156108de5780601f106108b3576101008083540402835291602001916108de565b820191906000526020600020905b8154815290600101906020018083116108c157829003601f168201915b505050505081565b6108ee613e11565b67ffffffffffffffff909116600090815260676020526040902055565b60705473ffffffffffffffffffffffffffffffffffffffff16331461099d5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff1615610ab65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b610abe613e11565b610ac6613e78565b565b60655460ff1615610b675760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610c005760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b805160685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b858110156111b0576000878281518110610c6857610c68614d53565b602002602001015190506000816060015167ffffffffffffffff161115610e815783610c9381614db1565b945050600081600001518051906020012082602001518360600151604051602001610cf693929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610dc35760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610e7b5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610994565b5061101b565b60208101511580610f305750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610eea9160040190815260200190565b6020604051808303816000875af1158015610f09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2d9190614dd8565b15155b610fa25760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610994565b80515161ea601161101b5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610994565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015611051575042816040015167ffffffffffffffff1611155b6110e95760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061119290614db1565b955050806040015195505080806111a890614df1565b915050610c4c565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156112535760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610994565b60685460009061128190700100000000000000000000000000000000900467ffffffffffffffff1684614e29565b6112959067ffffffffffffffff1687614e52565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c169390931793909317929092169190911790915560009081526067602052604090208390559050611372333061134c8467016345785d8a0000614e69565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613f02565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d805461086590614d00565b6113d4613e11565b606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60655460ff16156114ba5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff90811690881611156115665760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a401610994565b60695467ffffffffffffffff908116908716116116115760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b60205260409020546116c35760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a401610994565b60006116d188888888612134565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516117069190614ea6565b602060405180830381855afa158015611723573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906117469190614dd8565b6117509190614ef1565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916117ba9189918991899190600401614f05565b602060405180830381865afa1580156117d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117fb9190614f7f565b61186d5760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610994565b6069546118cb90339061188a9067ffffffffffffffff168b614e29565b67ffffffffffffffff1661189c612b03565b6118a69190614e69565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169190613fc0565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b15801561198057600080fd5b505af1158015611994573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60655460ff1615611a835760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8567ffffffffffffffff168767ffffffffffffffff1610611b325760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e65774261746368206d75737420626520626960648201527f67676572207468616e20696e69744e756d426174636800000000000000000000608482015260a401610994565b60695467ffffffffffffffff9081169087161115611bde5760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d4261746368206d757374206265206c657360648201527f73207468616e206c617374566572696669656442617463680000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b6020526040902054611c905760405162461bcd60e51b815260206004820152604e60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d426174636820737461746520726f6f742060648201527f646f6573206e6f74206578697374000000000000000000000000000000000000608482015260a401610994565b67ffffffffffffffff86166000908152606b6020526040902054611d425760405162461bcd60e51b815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e6577426174636820737461746520726f6f7460648201527f20646f6573206e6f742065786973740000000000000000000000000000000000608482015260a401610994565b6000611d5088888888612134565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051611d859190614ea6565b602060405180830381855afa158015611da2573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611dc59190614dd8565b611dcf9190614ef1565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611e399189918991899190600401614f05565b602060405180830381865afa158015611e56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7a9190614f7f565b611eec5760405162461bcd60e51b815260206004820152603560248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20494e56414c49445f50524f4f4600000000000000000000006064820152608401610994565b67ffffffffffffffff88166000908152606b6020526040902054869003611fa15760405162461bcd60e51b815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2073746f72656420726f6f74206d757374206265206469666660648201527f6572656e74207468616e206e657720737461746520726f6f7400000000000000608482015260a401610994565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527fe579d6d18f02941e1d0f59bff70f1b2c894edc991badab38343786df2846fe55910160405180910390a1611ffd613e78565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146120a15760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610a0c565b61212a613e11565b610ac6600061401b565b67ffffffffffffffff80851660008181526067602052604080822054938716825290205460609291158061216757508115155b6121ff5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b806122985760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b612372613e11565b60695467ffffffffffffffff908116908816111561241e5760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff908116908716116124c95760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610994565b67ffffffffffffffff808816600090815260676020526040808220549289168252902054816125605760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b806118cb5760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691612622917801000000000000000000000000000000000000000000000000909104166001614f9c565b61262c9190614e29565b6126489067ffffffffffffffff16670de0b6b3a7640000614e69565b905090565b600054610100900460ff161580801561266d5750600054600160ff909116105b806126875750303b158015612687575060005460ff166001145b6126f95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610994565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561275757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d6128968782615016565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f6128d78582615016565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556070805492851692909116919091179055612935614092565b801561299857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612a3f5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a0c90831515815260200190565b612ac8613e11565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612b7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b9e9190614dd8565b60695460685491925060009167ffffffffffffffff91821691680100000000000000008204811691612c039170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614e29565b612c0d9190614f9c565b612c179190614e29565b67ffffffffffffffff169050612c2d8183615112565b9250505090565b612c3c613e11565b6068805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b612c8b613e11565b606f612c978282615016565b5050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612d345760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606d612d408282615016565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a0c91906145c7565b60695460009067ffffffffffffffff868116911614612e1d5760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8467ffffffffffffffff168467ffffffffffffffff1611612ecc5760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a401610994565b60685467ffffffffffffffff6801000000000000000090910481169085161115612f845760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6000612f9286868686612134565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051612fc79190614ea6565b602060405180830381855afa158015612fe4573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906130079190614dd8565b6130119190614ef1565b979650505050505050565b60655460ff16156130bb5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461317e5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b8051806132195760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60685467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691613264918491700100000000000000000000000000000000900416615126565b11156132d85760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610994565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b848110156135f157600086828151811061333857613338614d53565b60200260200101519050838061334d90614db1565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff881660009081526066909352912054909150811461346e5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610994565b613479600188614e52565b8303613537574262093a8083604001516134939190614f9c565b67ffffffffffffffff1611156135375760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610994565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c0160405160208183030381529060405280519060200120935085806135d990614db1565b965050505080806135e990614df1565b91505061331c565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff161561373a5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b60705473ffffffffffffffffffffffffffffffffffffffff1633146137c75760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c0000006064820152608401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561383157600080fd5b505af1158015613845573d6000803e3d6000fd5b50505050610ac6614118565b60655460ff16156138f05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146139b35760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b60006139bd6125d3565b905081811115613a355760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610994565b61ea60835110613aad5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610994565b606554613ad790610100900473ffffffffffffffffffffffffffffffffffffffff16333084613f02565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613b47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b6b9190614dd8565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613ba583614db1565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505083805190602001208142604051602001613c1e93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526066909352912055323303613cee57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613d4b565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613d429392919061513e565b60405180910390a25b50505050565b613d59613e11565b73ffffffffffffffffffffffffffffffffffffffff8116613de25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610994565b613deb8161401b565b50565b613df6613e11565b67ffffffffffffffff166000908152606b6020526040902055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ac65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613ee257600080fd5b505af1158015613ef6573d6000803e3d6000fd5b50505050610ac66141e4565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052613d4b9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526142d9565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526140169084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401613f5c565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661410f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610994565b610ac63361401b565b60655460ff16156141915760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff16156142835760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b600061433b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166143cb9092919063ffffffff16565b80519091501561401657808060200190518101906143599190614f7f565b6140165760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610994565b60606143da84846000856143e4565b90505b9392505050565b60608247101561445c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610994565b73ffffffffffffffffffffffffffffffffffffffff85163b6144c05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610994565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516144e99190614ea6565b60006040518083038185875af1925050503d8060008114614526576040519150601f19603f3d011682016040523d82523d6000602084013e61452b565b606091505b5091509150613011828286606083156145455750816143dd565b8251156145555782518084602001fd5b8160405162461bcd60e51b815260040161099491906145c7565b60005b8381101561458a578181015183820152602001614572565b83811115613d4b5750506000910152565b600081518084526145b381602086016020860161456f565b601f01601f19169290920160200192915050565b6020815260006143dd602083018461459b565b803567ffffffffffffffff811681146145f257600080fd5b919050565b6000806040838503121561460a57600080fd5b614613836145da565b946020939093013593505050565b73ffffffffffffffffffffffffffffffffffffffff81168114613deb57600080fd5b80356145f281614621565b60006020828403121561466057600080fd5b81356143dd81614621565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff811182821017156146bd576146bd61466b565b60405290565b6040516060810167ffffffffffffffff811182821017156146bd576146bd61466b565b604051601f8201601f1916810167ffffffffffffffff8111828210171561470f5761470f61466b565b604052919050565b600067ffffffffffffffff8211156147315761473161466b565b5060051b60200190565b600082601f83011261474c57600080fd5b813567ffffffffffffffff8111156147665761476661466b565b6147796020601f19601f840116016146e6565b81815284602083860101111561478e57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208083850312156147be57600080fd5b823567ffffffffffffffff808211156147d657600080fd5b818501915085601f8301126147ea57600080fd5b81356147fd6147f882614717565b6146e6565b81815260059190911b8301840190848101908883111561481c57600080fd5b8585015b838110156148b5578035858111156148385760008081fd5b86016080818c03601f19018113156148505760008081fd5b61485861469a565b898301358881111561486a5760008081fd5b6148788e8c8387010161473b565b8252506040808401358b83015260606148928186016145da565b828401526148a18486016145da565b908301525085525050918601918601614820565b5098975050505050505050565b6000602082840312156148d457600080fd5b6143dd826145da565b80604081018310156148ee57600080fd5b92915050565b6000806000806000806000610180888a03121561491057600080fd5b614919886145da565b9650614927602089016145da565b955060408801359450606088013593506149448960808a016148dd565b925061014088018981111561495857600080fd5b60c0890192506149688a826148dd565b91505092959891949750929550565b600080600080600060a0868803121561498f57600080fd5b85359450602086013567ffffffffffffffff8111156149ad57600080fd5b6149b98882890161473b565b945050604086013592506149cf606087016145da565b915060808601356149df81614621565b809150509295509295909350565b60008060008060808587031215614a0357600080fd5b614a0c856145da565b9350614a1a602086016145da565b93969395505050506040820135916060013590565b8015158114613deb57600080fd5b80356145f281614a2f565b60008060008060008060008060008060006101608c8e031215614a6a57600080fd5b614a738c614643565b9a50614a8160208d01614643565b9950614a8f60408d01614643565b985060608c01359750614aa460808d01614643565b9650614ab260a08d01614a3d565b955067ffffffffffffffff8060c08e01351115614ace57600080fd5b614ade8e60c08f01358f0161473b565b9550614aec60e08e016145da565b9450806101008e01351115614b0057600080fd5b50614b128d6101008e01358e0161473b565b9250614b216101208d01614643565b9150614b306101408d01614643565b90509295989b509295989b9093969950565b600060208284031215614b5457600080fd5b81356143dd81614a2f565b600060208284031215614b7157600080fd5b813567ffffffffffffffff811115614b8857600080fd5b614b948482850161473b565b949350505050565b60006020808385031215614baf57600080fd5b823567ffffffffffffffff80821115614bc757600080fd5b818501915085601f830112614bdb57600080fd5b8135614be96147f882614717565b81815260059190911b83018401908481019088831115614c0857600080fd5b8585015b838110156148b557803585811115614c245760008081fd5b86016060818c03601f1901811315614c3c5760008081fd5b614c446146c3565b8983013588811115614c565760008081fd5b614c648e8c8387010161473b565b8252506040808401358b830152614c7c8385016145da565b9082015285525050918601918601614c0c565b60008060408385031215614ca257600080fd5b823567ffffffffffffffff811115614cb957600080fd5b614cc58582860161473b565b95602094909401359450505050565b60008060408385031215614ce757600080fd5b82359150614cf7602084016145da565b90509250929050565b600181811c90821680614d1457607f821691505b602082108103614d4d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614dce57614dce614d82565b6001019392505050565b600060208284031215614dea57600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e2257614e22614d82565b5060010190565b600067ffffffffffffffff83811690831681811015614e4a57614e4a614d82565b039392505050565b600082821015614e6457614e64614d82565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ea157614ea1614d82565b500290565b60008251614eb881846020870161456f565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614f0057614f00614ec2565b500690565b61012081016040808784376000838201818152879190815b6002811015614f3d57848483379084018281529284019290600101614f1d565b5050828760c0870137610100850181815286935091505b6001811015614f73578251825260209283019290910190600101614f54565b50505095945050505050565b600060208284031215614f9157600080fd5b81516143dd81614a2f565b600067ffffffffffffffff808316818516808303821115614fbf57614fbf614d82565b01949350505050565b601f82111561401657600081815260208120601f850160051c81016020861015614fef5750805b601f850160051c820191505b8181101561500e57828155600101614ffb565b505050505050565b815167ffffffffffffffff8111156150305761503061466b565b6150448161503e8454614d00565b84614fc8565b602080601f83116001811461509757600084156150615750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561500e565b600085815260208120601f198616915b828110156150c6578886015182559484019460019091019084016150a7565b508582101561510257878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008261512157615121614ec2565b500490565b6000821982111561513957615139614d82565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff83166020820152606060408201526000615173606083018461459b565b9594505050505056fea26469706673582212201002a0be18bc33019714770ac596cf0268b1a00cfca1b5d696d7dc00e4a8255464736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506151d6806100206000396000f3fe608060405234801561001057600080fd5b506004361061032b5760003560e01c80638c4a0af7116101b2578063c89e42df116100f9578063dbc16976116100a2578063eaeb077b1161007c578063eaeb077b14610810578063f2fde38b14610823578063f755276114610836578063fe16564f1461084557600080fd5b8063dbc16976146107b8578063e7a7ed02146107c0578063e8bf92ed146107f057600080fd5b8063d0ae98dd116100d3578063d0ae98dd14610765578063d8d1091b14610778578063d8f54db01461078b57600080fd5b8063c89e42df14610706578063cfa8ed4714610719578063d02103ca1461074557600080fd5b8063ab9fc5ef1161015b578063b4d63f5811610135578063b4d63f58146106ae578063b6b0b097146106ce578063c0cad302146106f357600080fd5b8063ab9fc5ef14610687578063adc879e914610691578063b02286c0146106a557600080fd5b806399f5634e1161018c57806399f5634e1461064c5780639b79676014610654578063a3c573eb1461066757600080fd5b80638c4a0af7146106085780638da5cb5b1461061b57806396dc3d391461063957600080fd5b80635437988d11610276578063715018a61161021f57806379847057116101f957806379847057146105d95780637fcb3653146105e157806381df7d3f146105f557600080fd5b8063715018a6146105ab5780637152facf146105b3578063748608de146105c657600080fd5b80636766f09d116102505780636766f09d146105655780636b8616ce146105785780636ff512cc1461059857600080fd5b80635437988d1461049e57806355b925e6146104b1578063574f649e146104c457600080fd5b806327eb6c0f116102d857806345605267116102b257806345605267146104405780635392c5e014610468578063542028d51461049657600080fd5b806327eb6c0f146103c85780633c1582671461040d578063423fa8561461042057600080fd5b80631a26da14116103095780631a26da14146103985780631c1083e2146103ad5780632072f6c5146103c057600080fd5b8063107bf28c1461033057806315064c961461034e57806319d8ac611461036b575b600080fd5b610338610858565b60405161034591906145eb565b60405180910390f35b60655461035b9060ff1681565b6040519015158152602001610345565b60685461037f9067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610345565b6103ab6103a636600461461b565b6108e6565b005b6103ab6103bb366004614672565b61090b565b6103ab610a17565b6070546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610345565b6103ab61041b3660046147cf565b610ac8565b60685461037f9068010000000000000000900467ffffffffffffffff1681565b60685461037f90700100000000000000000000000000000000900467ffffffffffffffff1681565b6104886104763660046148e6565b606b6020526000908152604090205481565b604051908152602001610345565b6103386113bf565b6103ab6104ac366004614672565b6113cc565b6103ab6104bf366004614918565b61141b565b6104886104d236600461499b565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b6103ab610573366004614918565b6119e4565b6104886105863660046148e6565b60666020526000908152604090205481565b6103ab6105a6366004614672565b61202e565b6103ab612148565b6103386105c1366004614a11565b61215a565b6103ab6105d4366004614918565b612390565b6104886125f9565b60695461037f9067ffffffffffffffff1681565b6103ab610603366004614a6c565b612673565b6103ab610616366004614b66565b6129cc565b60335473ffffffffffffffffffffffffffffffffffffffff166103e8565b6103ab6106473660046148e6565b612ae6565b610488612b29565b6103ab6106623660046148e6565b612c5a565b6071546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b61037f62093a8081565b606e5461037f9067ffffffffffffffff1681565b61048861ea6081565b6104886106bc3660046148e6565b60676020526000908152604090205481565b6065546103e890610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6103ab610701366004614b83565b612ca9565b6103ab610714366004614b83565b612cc1565b6069546103e89068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b610488610773366004614a11565b612d96565b6103ab610786366004614bc0565b613042565b60695461035b907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b6103ab6136e7565b60685461037f907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b6103ab61081e366004614cb3565b613876565b6103ab610831366004614672565b613d76565b61048867016345785d8a000081565b6103ab610853366004614cf8565b613e13565b606f805461086590614d24565b80601f016020809104026020016040519081016040528092919081815260200182805461089190614d24565b80156108de5780601f106108b3576101008083540402835291602001916108de565b820191906000526020600020905b8154815290600101906020018083116108c157829003601f168201915b505050505081565b6108ee613e36565b67ffffffffffffffff909116600090815260676020526040902055565b60705473ffffffffffffffffffffffffffffffffffffffff16331461099d5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff1615610ab65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b610abe613e36565b610ac6613e9d565b565b60655460ff1615610b675760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610c005760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b805160685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b858110156111b0576000878281518110610c6857610c68614d77565b602002602001015190506000816060015167ffffffffffffffff161115610e815783610c9381614dd5565b945050600081600001518051906020012082602001518360600151604051602001610cf693929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610dc35760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610e7b5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610994565b5061101b565b60208101511580610f305750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610eea9160040190815260200190565b6020604051808303816000875af1158015610f09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2d9190614dfc565b15155b610fa25760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610994565b80515161ea601161101b5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610994565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015611051575042816040015167ffffffffffffffff1611155b6110e95760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061119290614dd5565b955050806040015195505080806111a890614e15565b915050610c4c565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156112535760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610994565b60685460009061128190700100000000000000000000000000000000900467ffffffffffffffff1684614e4d565b6112959067ffffffffffffffff1687614e76565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c169390931793909317929092169190911790915560009081526067602052604090208390559050611372333061134c8467016345785d8a0000614e8d565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613f27565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d805461086590614d24565b6113d4613e36565b606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60655460ff16156114ba5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff90811690881611156115665760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a401610994565b60695467ffffffffffffffff908116908716116116115760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b60205260409020546116c35760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a401610994565b60006116d18888888861215a565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516117069190614eca565b602060405180830381855afa158015611723573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906117469190614dfc565b6117509190614f15565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916117ba9189918991899190600401614f29565b602060405180830381865afa1580156117d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117fb9190614fa3565b61186d5760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610994565b6069546118cb90339061188a9067ffffffffffffffff168b614e4d565b67ffffffffffffffff1661189c612b29565b6118a69190614e8d565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169190613fe5565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b15801561198057600080fd5b505af1158015611994573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60655460ff1615611a835760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8567ffffffffffffffff168767ffffffffffffffff1610611b325760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e65774261746368206d75737420626520626960648201527f67676572207468616e20696e69744e756d426174636800000000000000000000608482015260a401610994565b60695467ffffffffffffffff9081169087161115611c045760405162461bcd60e51b815260206004820152606260248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e65774261746368206d757374206265206c6560648201527f7373206f7220657175616c207468616e206c617374566572696669656442617460848201527f636800000000000000000000000000000000000000000000000000000000000060a482015260c401610994565b67ffffffffffffffff87166000908152606b6020526040902054611cb65760405162461bcd60e51b815260206004820152604e60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d426174636820737461746520726f6f742060648201527f646f6573206e6f74206578697374000000000000000000000000000000000000608482015260a401610994565b67ffffffffffffffff86166000908152606b6020526040902054611d685760405162461bcd60e51b815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e6577426174636820737461746520726f6f7460648201527f20646f6573206e6f742065786973740000000000000000000000000000000000608482015260a401610994565b6000611d768888888861215a565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051611dab9190614eca565b602060405180830381855afa158015611dc8573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611deb9190614dfc565b611df59190614f15565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611e5f9189918991899190600401614f29565b602060405180830381865afa158015611e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea09190614fa3565b611f125760405162461bcd60e51b815260206004820152603560248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20494e56414c49445f50524f4f4600000000000000000000006064820152608401610994565b67ffffffffffffffff88166000908152606b6020526040902054869003611fc75760405162461bcd60e51b815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2073746f72656420726f6f74206d757374206265206469666660648201527f6572656e74207468616e206e657720737461746520726f6f7400000000000000608482015260a401610994565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527fe579d6d18f02941e1d0f59bff70f1b2c894edc991badab38343786df2846fe55910160405180910390a1612023613e9d565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146120c75760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610a0c565b612150613e36565b610ac66000614040565b67ffffffffffffffff80851660008181526067602052604080822054938716825290205460609291158061218d57508115155b6122255760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b806122be5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b612398613e36565b60695467ffffffffffffffff90811690881611156124445760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff908116908716116124ef5760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610994565b67ffffffffffffffff808816600090815260676020526040808220549289168252902054816125865760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b806118cb5760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691612648917801000000000000000000000000000000000000000000000000909104166001614fc0565b6126529190614e4d565b61266e9067ffffffffffffffff16670de0b6b3a7640000614e8d565b905090565b600054610100900460ff16158080156126935750600054600160ff909116105b806126ad5750303b1580156126ad575060005460ff166001145b61271f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610994565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561277d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d6128bc878261503a565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f6128fd858261503a565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255607080549285169290911691909117905561295b6140b7565b80156129be57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612a655760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a0c90831515815260200190565b612aee613e36565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612ba0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc49190614dfc565b60695460685491925060009167ffffffffffffffff91821691680100000000000000008204811691612c299170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614e4d565b612c339190614fc0565b612c3d9190614e4d565b67ffffffffffffffff169050612c538183615136565b9250505090565b612c62613e36565b6068805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b612cb1613e36565b606f612cbd828261503a565b5050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612d5a5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606d612d66828261503a565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a0c91906145eb565b60695460009067ffffffffffffffff868116911614612e435760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8467ffffffffffffffff168467ffffffffffffffff1611612ef25760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a401610994565b60685467ffffffffffffffff6801000000000000000090910481169085161115612faa5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6000612fb88686868661215a565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051612fed9190614eca565b602060405180830381855afa15801561300a573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061302d9190614dfc565b6130379190614f15565b979650505050505050565b60655460ff16156130e15760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146131a45760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b80518061323f5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60685467ffffffffffffffff7801000000000000000000000000000000000000000000000000820481169161328a91849170010000000000000000000000000000000090041661514a565b11156132fe5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610994565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b8481101561361757600086828151811061335e5761335e614d77565b60200260200101519050838061337390614dd5565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff88166000908152606690935291205490915081146134945760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610994565b61349f600188614e76565b830361355d574262093a8083604001516134b99190614fc0565b67ffffffffffffffff16111561355d5760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610994565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c0160405160208183030381529060405280519060200120935085806135ff90614dd5565b9650505050808061360f90614e15565b915050613342565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff1661375f5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b60705473ffffffffffffffffffffffffffffffffffffffff1633146137ec5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c0000006064820152608401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561385657600080fd5b505af115801561386a573d6000803e3d6000fd5b50505050610ac661413d565b60655460ff16156139155760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146139d85760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b60006139e26125f9565b905081811115613a5a5760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610994565b61ea60835110613ad25760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610994565b606554613afc90610100900473ffffffffffffffffffffffffffffffffffffffff16333084613f27565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613b6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b909190614dfc565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613bca83614dd5565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505083805190602001208142604051602001613c4393929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526066909352912055323303613d1357606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613d70565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613d6793929190615162565b60405180910390a25b50505050565b613d7e613e36565b73ffffffffffffffffffffffffffffffffffffffff8116613e075760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610994565b613e1081614040565b50565b613e1b613e36565b67ffffffffffffffff166000908152606b6020526040902055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ac65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613f0757600080fd5b505af1158015613f1b573d6000803e3d6000fd5b50505050610ac6614208565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052613d709085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526142fd565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261403b9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401613f81565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166141345760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610994565b610ac633614040565b60655460ff166141b55760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff16156142a75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b600061435f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166143ef9092919063ffffffff16565b80519091501561403b578080602001905181019061437d9190614fa3565b61403b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610994565b60606143fe8484600085614408565b90505b9392505050565b6060824710156144805760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610994565b73ffffffffffffffffffffffffffffffffffffffff85163b6144e45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610994565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161450d9190614eca565b60006040518083038185875af1925050503d806000811461454a576040519150601f19603f3d011682016040523d82523d6000602084013e61454f565b606091505b509150915061303782828660608315614569575081614401565b8251156145795782518084602001fd5b8160405162461bcd60e51b815260040161099491906145eb565b60005b838110156145ae578181015183820152602001614596565b83811115613d705750506000910152565b600081518084526145d7816020860160208601614593565b601f01601f19169290920160200192915050565b60208152600061440160208301846145bf565b803567ffffffffffffffff8116811461461657600080fd5b919050565b6000806040838503121561462e57600080fd5b614637836145fe565b946020939093013593505050565b73ffffffffffffffffffffffffffffffffffffffff81168114613e1057600080fd5b803561461681614645565b60006020828403121561468457600080fd5b813561440181614645565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff811182821017156146e1576146e161468f565b60405290565b6040516060810167ffffffffffffffff811182821017156146e1576146e161468f565b604051601f8201601f1916810167ffffffffffffffff811182821017156147335761473361468f565b604052919050565b600067ffffffffffffffff8211156147555761475561468f565b5060051b60200190565b600082601f83011261477057600080fd5b813567ffffffffffffffff81111561478a5761478a61468f565b61479d6020601f19601f8401160161470a565b8181528460208386010111156147b257600080fd5b816020850160208301376000918101602001919091529392505050565b600060208083850312156147e257600080fd5b823567ffffffffffffffff808211156147fa57600080fd5b818501915085601f83011261480e57600080fd5b813561482161481c8261473b565b61470a565b81815260059190911b8301840190848101908883111561484057600080fd5b8585015b838110156148d95780358581111561485c5760008081fd5b86016080818c03601f19018113156148745760008081fd5b61487c6146be565b898301358881111561488e5760008081fd5b61489c8e8c8387010161475f565b8252506040808401358b83015260606148b68186016145fe565b828401526148c58486016145fe565b908301525085525050918601918601614844565b5098975050505050505050565b6000602082840312156148f857600080fd5b614401826145fe565b806040810183101561491257600080fd5b92915050565b6000806000806000806000610180888a03121561493457600080fd5b61493d886145fe565b965061494b602089016145fe565b955060408801359450606088013593506149688960808a01614901565b925061014088018981111561497c57600080fd5b60c08901925061498c8a82614901565b91505092959891949750929550565b600080600080600060a086880312156149b357600080fd5b85359450602086013567ffffffffffffffff8111156149d157600080fd5b6149dd8882890161475f565b945050604086013592506149f3606087016145fe565b91506080860135614a0381614645565b809150509295509295909350565b60008060008060808587031215614a2757600080fd5b614a30856145fe565b9350614a3e602086016145fe565b93969395505050506040820135916060013590565b8015158114613e1057600080fd5b803561461681614a53565b60008060008060008060008060008060006101608c8e031215614a8e57600080fd5b614a978c614667565b9a50614aa560208d01614667565b9950614ab360408d01614667565b985060608c01359750614ac860808d01614667565b9650614ad660a08d01614a61565b955067ffffffffffffffff8060c08e01351115614af257600080fd5b614b028e60c08f01358f0161475f565b9550614b1060e08e016145fe565b9450806101008e01351115614b2457600080fd5b50614b368d6101008e01358e0161475f565b9250614b456101208d01614667565b9150614b546101408d01614667565b90509295989b509295989b9093969950565b600060208284031215614b7857600080fd5b813561440181614a53565b600060208284031215614b9557600080fd5b813567ffffffffffffffff811115614bac57600080fd5b614bb88482850161475f565b949350505050565b60006020808385031215614bd357600080fd5b823567ffffffffffffffff80821115614beb57600080fd5b818501915085601f830112614bff57600080fd5b8135614c0d61481c8261473b565b81815260059190911b83018401908481019088831115614c2c57600080fd5b8585015b838110156148d957803585811115614c485760008081fd5b86016060818c03601f1901811315614c605760008081fd5b614c686146e7565b8983013588811115614c7a5760008081fd5b614c888e8c8387010161475f565b8252506040808401358b830152614ca08385016145fe565b9082015285525050918601918601614c30565b60008060408385031215614cc657600080fd5b823567ffffffffffffffff811115614cdd57600080fd5b614ce98582860161475f565b95602094909401359450505050565b60008060408385031215614d0b57600080fd5b82359150614d1b602084016145fe565b90509250929050565b600181811c90821680614d3857607f821691505b602082108103614d71577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614df257614df2614da6565b6001019392505050565b600060208284031215614e0e57600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e4657614e46614da6565b5060010190565b600067ffffffffffffffff83811690831681811015614e6e57614e6e614da6565b039392505050565b600082821015614e8857614e88614da6565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ec557614ec5614da6565b500290565b60008251614edc818460208701614593565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614f2457614f24614ee6565b500690565b61012081016040808784376000838201818152879190815b6002811015614f6157848483379084018281529284019290600101614f41565b5050828760c0870137610100850181815286935091505b6001811015614f97578251825260209283019290910190600101614f78565b50505095945050505050565b600060208284031215614fb557600080fd5b815161440181614a53565b600067ffffffffffffffff808316818516808303821115614fe357614fe3614da6565b01949350505050565b601f82111561403b57600081815260208120601f850160051c810160208610156150135750805b601f850160051c820191505b818110156150325782815560010161501f565b505050505050565b815167ffffffffffffffff8111156150545761505461468f565b615068816150628454614d24565b84614fec565b602080601f8311600181146150bb57600084156150855750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555615032565b600085815260208120601f198616915b828110156150ea578886015182559484019460019091019084016150cb565b508582101561512657878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008261514557615145614ee6565b500490565b6000821982111561515d5761515d614da6565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff8316602082015260606040820152600061519760608301846145bf565b9594505050505056fea26469706673582212208552e321306e2f9188d5ca8e7c86580615c0151b5d2e9c81b876214ae57ff2bc64736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061032b5760003560e01c80638c4a0af7116101b2578063c89e42df116100f9578063dbc16976116100a2578063eaeb077b1161007c578063eaeb077b14610810578063f2fde38b14610823578063f755276114610836578063fe16564f1461084557600080fd5b8063dbc16976146107b8578063e7a7ed02146107c0578063e8bf92ed146107f057600080fd5b8063d0ae98dd116100d3578063d0ae98dd14610765578063d8d1091b14610778578063d8f54db01461078b57600080fd5b8063c89e42df14610706578063cfa8ed4714610719578063d02103ca1461074557600080fd5b8063ab9fc5ef1161015b578063b4d63f5811610135578063b4d63f58146106ae578063b6b0b097146106ce578063c0cad302146106f357600080fd5b8063ab9fc5ef14610687578063adc879e914610691578063b02286c0146106a557600080fd5b806399f5634e1161018c57806399f5634e1461064c5780639b79676014610654578063a3c573eb1461066757600080fd5b80638c4a0af7146106085780638da5cb5b1461061b57806396dc3d391461063957600080fd5b80635437988d11610276578063715018a61161021f57806379847057116101f957806379847057146105d95780637fcb3653146105e157806381df7d3f146105f557600080fd5b8063715018a6146105ab5780637152facf146105b3578063748608de146105c657600080fd5b80636766f09d116102505780636766f09d146105655780636b8616ce146105785780636ff512cc1461059857600080fd5b80635437988d1461049e57806355b925e6146104b1578063574f649e146104c457600080fd5b806327eb6c0f116102d857806345605267116102b257806345605267146104405780635392c5e014610468578063542028d51461049657600080fd5b806327eb6c0f146103c85780633c1582671461040d578063423fa8561461042057600080fd5b80631a26da14116103095780631a26da14146103985780631c1083e2146103ad5780632072f6c5146103c057600080fd5b8063107bf28c1461033057806315064c961461034e57806319d8ac611461036b575b600080fd5b610338610858565b60405161034591906145eb565b60405180910390f35b60655461035b9060ff1681565b6040519015158152602001610345565b60685461037f9067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610345565b6103ab6103a636600461461b565b6108e6565b005b6103ab6103bb366004614672565b61090b565b6103ab610a17565b6070546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610345565b6103ab61041b3660046147cf565b610ac8565b60685461037f9068010000000000000000900467ffffffffffffffff1681565b60685461037f90700100000000000000000000000000000000900467ffffffffffffffff1681565b6104886104763660046148e6565b606b6020526000908152604090205481565b604051908152602001610345565b6103386113bf565b6103ab6104ac366004614672565b6113cc565b6103ab6104bf366004614918565b61141b565b6104886104d236600461499b565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b6103ab610573366004614918565b6119e4565b6104886105863660046148e6565b60666020526000908152604090205481565b6103ab6105a6366004614672565b61202e565b6103ab612148565b6103386105c1366004614a11565b61215a565b6103ab6105d4366004614918565b612390565b6104886125f9565b60695461037f9067ffffffffffffffff1681565b6103ab610603366004614a6c565b612673565b6103ab610616366004614b66565b6129cc565b60335473ffffffffffffffffffffffffffffffffffffffff166103e8565b6103ab6106473660046148e6565b612ae6565b610488612b29565b6103ab6106623660046148e6565b612c5a565b6071546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b61037f62093a8081565b606e5461037f9067ffffffffffffffff1681565b61048861ea6081565b6104886106bc3660046148e6565b60676020526000908152604090205481565b6065546103e890610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6103ab610701366004614b83565b612ca9565b6103ab610714366004614b83565b612cc1565b6069546103e89068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b610488610773366004614a11565b612d96565b6103ab610786366004614bc0565b613042565b60695461035b907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b6103ab6136e7565b60685461037f907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b6103ab61081e366004614cb3565b613876565b6103ab610831366004614672565b613d76565b61048867016345785d8a000081565b6103ab610853366004614cf8565b613e13565b606f805461086590614d24565b80601f016020809104026020016040519081016040528092919081815260200182805461089190614d24565b80156108de5780601f106108b3576101008083540402835291602001916108de565b820191906000526020600020905b8154815290600101906020018083116108c157829003601f168201915b505050505081565b6108ee613e36565b67ffffffffffffffff909116600090815260676020526040902055565b60705473ffffffffffffffffffffffffffffffffffffffff16331461099d5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff1615610ab65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b610abe613e36565b610ac6613e9d565b565b60655460ff1615610b675760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610c005760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b805160685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b858110156111b0576000878281518110610c6857610c68614d77565b602002602001015190506000816060015167ffffffffffffffff161115610e815783610c9381614dd5565b945050600081600001518051906020012082602001518360600151604051602001610cf693929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610dc35760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610e7b5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610994565b5061101b565b60208101511580610f305750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610eea9160040190815260200190565b6020604051808303816000875af1158015610f09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2d9190614dfc565b15155b610fa25760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610994565b80515161ea601161101b5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610994565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015611051575042816040015167ffffffffffffffff1611155b6110e95760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061119290614dd5565b955050806040015195505080806111a890614e15565b915050610c4c565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156112535760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610994565b60685460009061128190700100000000000000000000000000000000900467ffffffffffffffff1684614e4d565b6112959067ffffffffffffffff1687614e76565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c169390931793909317929092169190911790915560009081526067602052604090208390559050611372333061134c8467016345785d8a0000614e8d565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613f27565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d805461086590614d24565b6113d4613e36565b606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60655460ff16156114ba5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff90811690881611156115665760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a401610994565b60695467ffffffffffffffff908116908716116116115760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b60205260409020546116c35760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a401610994565b60006116d18888888861215a565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516117069190614eca565b602060405180830381855afa158015611723573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906117469190614dfc565b6117509190614f15565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916117ba9189918991899190600401614f29565b602060405180830381865afa1580156117d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117fb9190614fa3565b61186d5760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610994565b6069546118cb90339061188a9067ffffffffffffffff168b614e4d565b67ffffffffffffffff1661189c612b29565b6118a69190614e8d565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169190613fe5565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b15801561198057600080fd5b505af1158015611994573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60655460ff1615611a835760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8567ffffffffffffffff168767ffffffffffffffff1610611b325760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e65774261746368206d75737420626520626960648201527f67676572207468616e20696e69744e756d426174636800000000000000000000608482015260a401610994565b60695467ffffffffffffffff9081169087161115611c045760405162461bcd60e51b815260206004820152606260248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e65774261746368206d757374206265206c6560648201527f7373206f7220657175616c207468616e206c617374566572696669656442617460848201527f636800000000000000000000000000000000000000000000000000000000000060a482015260c401610994565b67ffffffffffffffff87166000908152606b6020526040902054611cb65760405162461bcd60e51b815260206004820152604e60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d426174636820737461746520726f6f742060648201527f646f6573206e6f74206578697374000000000000000000000000000000000000608482015260a401610994565b67ffffffffffffffff86166000908152606b6020526040902054611d685760405162461bcd60e51b815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e6577426174636820737461746520726f6f7460648201527f20646f6573206e6f742065786973740000000000000000000000000000000000608482015260a401610994565b6000611d768888888861215a565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051611dab9190614eca565b602060405180830381855afa158015611dc8573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611deb9190614dfc565b611df59190614f15565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611e5f9189918991899190600401614f29565b602060405180830381865afa158015611e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea09190614fa3565b611f125760405162461bcd60e51b815260206004820152603560248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20494e56414c49445f50524f4f4600000000000000000000006064820152608401610994565b67ffffffffffffffff88166000908152606b6020526040902054869003611fc75760405162461bcd60e51b815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2073746f72656420726f6f74206d757374206265206469666660648201527f6572656e74207468616e206e657720737461746520726f6f7400000000000000608482015260a401610994565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527fe579d6d18f02941e1d0f59bff70f1b2c894edc991badab38343786df2846fe55910160405180910390a1612023613e9d565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146120c75760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610a0c565b612150613e36565b610ac66000614040565b67ffffffffffffffff80851660008181526067602052604080822054938716825290205460609291158061218d57508115155b6122255760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b806122be5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b612398613e36565b60695467ffffffffffffffff90811690881611156124445760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff908116908716116124ef5760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610994565b67ffffffffffffffff808816600090815260676020526040808220549289168252902054816125865760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b806118cb5760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691612648917801000000000000000000000000000000000000000000000000909104166001614fc0565b6126529190614e4d565b61266e9067ffffffffffffffff16670de0b6b3a7640000614e8d565b905090565b600054610100900460ff16158080156126935750600054600160ff909116105b806126ad5750303b1580156126ad575060005460ff166001145b61271f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610994565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561277d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d6128bc878261503a565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f6128fd858261503a565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255607080549285169290911691909117905561295b6140b7565b80156129be57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612a655760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a0c90831515815260200190565b612aee613e36565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612ba0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc49190614dfc565b60695460685491925060009167ffffffffffffffff91821691680100000000000000008204811691612c299170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614e4d565b612c339190614fc0565b612c3d9190614e4d565b67ffffffffffffffff169050612c538183615136565b9250505090565b612c62613e36565b6068805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b612cb1613e36565b606f612cbd828261503a565b5050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612d5a5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606d612d66828261503a565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a0c91906145eb565b60695460009067ffffffffffffffff868116911614612e435760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8467ffffffffffffffff168467ffffffffffffffff1611612ef25760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a401610994565b60685467ffffffffffffffff6801000000000000000090910481169085161115612faa5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6000612fb88686868661215a565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051612fed9190614eca565b602060405180830381855afa15801561300a573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061302d9190614dfc565b6130379190614f15565b979650505050505050565b60655460ff16156130e15760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146131a45760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b80518061323f5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60685467ffffffffffffffff7801000000000000000000000000000000000000000000000000820481169161328a91849170010000000000000000000000000000000090041661514a565b11156132fe5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610994565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b8481101561361757600086828151811061335e5761335e614d77565b60200260200101519050838061337390614dd5565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff88166000908152606690935291205490915081146134945760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610994565b61349f600188614e76565b830361355d574262093a8083604001516134b99190614fc0565b67ffffffffffffffff16111561355d5760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610994565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c0160405160208183030381529060405280519060200120935085806135ff90614dd5565b9650505050808061360f90614e15565b915050613342565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff1661375f5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b60705473ffffffffffffffffffffffffffffffffffffffff1633146137ec5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c0000006064820152608401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561385657600080fd5b505af115801561386a573d6000803e3d6000fd5b50505050610ac661413d565b60655460ff16156139155760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146139d85760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b60006139e26125f9565b905081811115613a5a5760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610994565b61ea60835110613ad25760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610994565b606554613afc90610100900473ffffffffffffffffffffffffffffffffffffffff16333084613f27565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613b6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b909190614dfc565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613bca83614dd5565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505083805190602001208142604051602001613c4393929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526066909352912055323303613d1357606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613d70565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613d6793929190615162565b60405180910390a25b50505050565b613d7e613e36565b73ffffffffffffffffffffffffffffffffffffffff8116613e075760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610994565b613e1081614040565b50565b613e1b613e36565b67ffffffffffffffff166000908152606b6020526040902055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ac65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613f0757600080fd5b505af1158015613f1b573d6000803e3d6000fd5b50505050610ac6614208565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052613d709085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526142fd565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261403b9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401613f81565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166141345760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610994565b610ac633614040565b60655460ff166141b55760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff16156142a75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b600061435f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166143ef9092919063ffffffff16565b80519091501561403b578080602001905181019061437d9190614fa3565b61403b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610994565b60606143fe8484600085614408565b90505b9392505050565b6060824710156144805760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610994565b73ffffffffffffffffffffffffffffffffffffffff85163b6144e45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610994565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161450d9190614eca565b60006040518083038185875af1925050503d806000811461454a576040519150601f19603f3d011682016040523d82523d6000602084013e61454f565b606091505b509150915061303782828660608315614569575081614401565b8251156145795782518084602001fd5b8160405162461bcd60e51b815260040161099491906145eb565b60005b838110156145ae578181015183820152602001614596565b83811115613d705750506000910152565b600081518084526145d7816020860160208601614593565b601f01601f19169290920160200192915050565b60208152600061440160208301846145bf565b803567ffffffffffffffff8116811461461657600080fd5b919050565b6000806040838503121561462e57600080fd5b614637836145fe565b946020939093013593505050565b73ffffffffffffffffffffffffffffffffffffffff81168114613e1057600080fd5b803561461681614645565b60006020828403121561468457600080fd5b813561440181614645565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff811182821017156146e1576146e161468f565b60405290565b6040516060810167ffffffffffffffff811182821017156146e1576146e161468f565b604051601f8201601f1916810167ffffffffffffffff811182821017156147335761473361468f565b604052919050565b600067ffffffffffffffff8211156147555761475561468f565b5060051b60200190565b600082601f83011261477057600080fd5b813567ffffffffffffffff81111561478a5761478a61468f565b61479d6020601f19601f8401160161470a565b8181528460208386010111156147b257600080fd5b816020850160208301376000918101602001919091529392505050565b600060208083850312156147e257600080fd5b823567ffffffffffffffff808211156147fa57600080fd5b818501915085601f83011261480e57600080fd5b813561482161481c8261473b565b61470a565b81815260059190911b8301840190848101908883111561484057600080fd5b8585015b838110156148d95780358581111561485c5760008081fd5b86016080818c03601f19018113156148745760008081fd5b61487c6146be565b898301358881111561488e5760008081fd5b61489c8e8c8387010161475f565b8252506040808401358b83015260606148b68186016145fe565b828401526148c58486016145fe565b908301525085525050918601918601614844565b5098975050505050505050565b6000602082840312156148f857600080fd5b614401826145fe565b806040810183101561491257600080fd5b92915050565b6000806000806000806000610180888a03121561493457600080fd5b61493d886145fe565b965061494b602089016145fe565b955060408801359450606088013593506149688960808a01614901565b925061014088018981111561497c57600080fd5b60c08901925061498c8a82614901565b91505092959891949750929550565b600080600080600060a086880312156149b357600080fd5b85359450602086013567ffffffffffffffff8111156149d157600080fd5b6149dd8882890161475f565b945050604086013592506149f3606087016145fe565b91506080860135614a0381614645565b809150509295509295909350565b60008060008060808587031215614a2757600080fd5b614a30856145fe565b9350614a3e602086016145fe565b93969395505050506040820135916060013590565b8015158114613e1057600080fd5b803561461681614a53565b60008060008060008060008060008060006101608c8e031215614a8e57600080fd5b614a978c614667565b9a50614aa560208d01614667565b9950614ab360408d01614667565b985060608c01359750614ac860808d01614667565b9650614ad660a08d01614a61565b955067ffffffffffffffff8060c08e01351115614af257600080fd5b614b028e60c08f01358f0161475f565b9550614b1060e08e016145fe565b9450806101008e01351115614b2457600080fd5b50614b368d6101008e01358e0161475f565b9250614b456101208d01614667565b9150614b546101408d01614667565b90509295989b509295989b9093969950565b600060208284031215614b7857600080fd5b813561440181614a53565b600060208284031215614b9557600080fd5b813567ffffffffffffffff811115614bac57600080fd5b614bb88482850161475f565b949350505050565b60006020808385031215614bd357600080fd5b823567ffffffffffffffff80821115614beb57600080fd5b818501915085601f830112614bff57600080fd5b8135614c0d61481c8261473b565b81815260059190911b83018401908481019088831115614c2c57600080fd5b8585015b838110156148d957803585811115614c485760008081fd5b86016060818c03601f1901811315614c605760008081fd5b614c686146e7565b8983013588811115614c7a5760008081fd5b614c888e8c8387010161475f565b8252506040808401358b830152614ca08385016145fe565b9082015285525050918601918601614c30565b60008060408385031215614cc657600080fd5b823567ffffffffffffffff811115614cdd57600080fd5b614ce98582860161475f565b95602094909401359450505050565b60008060408385031215614d0b57600080fd5b82359150614d1b602084016145fe565b90509250929050565b600181811c90821680614d3857607f821691505b602082108103614d71577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614df257614df2614da6565b6001019392505050565b600060208284031215614e0e57600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e4657614e46614da6565b5060010190565b600067ffffffffffffffff83811690831681811015614e6e57614e6e614da6565b039392505050565b600082821015614e8857614e88614da6565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ec557614ec5614da6565b500290565b60008251614edc818460208701614593565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614f2457614f24614ee6565b500690565b61012081016040808784376000838201818152879190815b6002811015614f6157848483379084018281529284019290600101614f41565b5050828760c0870137610100850181815286935091505b6001811015614f97578251825260209283019290910190600101614f78565b50505095945050505050565b600060208284031215614fb557600080fd5b815161440181614a53565b600067ffffffffffffffff808316818516808303821115614fe357614fe3614da6565b01949350505050565b601f82111561403b57600081815260208120601f850160051c810160208610156150135750805b601f850160051c820191505b818110156150325782815560010161501f565b505050505050565b815167ffffffffffffffff8111156150545761505461468f565b615068816150628454614d24565b84614fec565b602080601f8311600181146150bb57600084156150855750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555615032565b600085815260208120601f198616915b828110156150ea578886015182559484019460019091019084016150cb565b508582101561512657878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008261514557615145614ee6565b500490565b6000821982111561515d5761515d614da6565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff8316602082015260606040820152600061519760608301846145bf565b9594505050505056fea26469706673582212208552e321306e2f9188d5ca8e7c86580615c0151b5d2e9c81b876214ae57ff2bc64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/Bridge.sol b/contracts/Bridge.sol index 386f98105..faf01c404 100644 --- a/contracts/Bridge.sol +++ b/contracts/Bridge.sol @@ -31,10 +31,10 @@ contract Bridge is } // bytes4(keccak256(bytes("permit(address,address,uint256,uint256,uint8,bytes32,bytes32)"))); - bytes4 constant _PERMIT_SIGNATURE = 0xd505accf; + bytes4 private constant _PERMIT_SIGNATURE = 0xd505accf; // bytes4(keccak256(bytes("permit(address,address,uint256,uint256,bool,uint8,bytes32,bytes32)"))); - bytes4 constant _PERMIT_SIGNATURE_DAI = 0x8fcbaf0c; + bytes4 private constant _PERMIT_SIGNATURE_DAI = 0x8fcbaf0c; // Mainnet indentifier uint32 public constant MAINNET_NETWORK_ID = 0; diff --git a/contracts/ProofOfEfficiency.sol b/contracts/ProofOfEfficiency.sol index 71c8cbe6e..16a994745 100644 --- a/contracts/ProofOfEfficiency.sol +++ b/contracts/ProofOfEfficiency.sol @@ -649,7 +649,7 @@ contract ProofOfEfficiency is require( finalNewBatch <= lastVerifiedBatch, - "ProofOfEfficiency::proofDifferentState: initNumBatch must be less than lastVerifiedBatch" + "ProofOfEfficiency::proofDifferentState: finalNewBatch must be less or equal than lastVerifiedBatch" ); require( diff --git a/contracts/lib/EmergencyManager.sol b/contracts/lib/EmergencyManager.sol index d94faa6ff..7ccbba063 100644 --- a/contracts/lib/EmergencyManager.sol +++ b/contracts/lib/EmergencyManager.sol @@ -35,7 +35,7 @@ contract EmergencyManager { */ modifier ifEmergencyState() { require( - !isEmergencyState, + isEmergencyState, "EmergencyManager::ifEmergencyState: only if emergency state" ); _; diff --git a/contracts/mocks/BridgeMock.sol b/contracts/mocks/BridgeMock.sol index 4da69540b..e7edbe74a 100644 --- a/contracts/mocks/BridgeMock.sol +++ b/contracts/mocks/BridgeMock.sol @@ -25,6 +25,9 @@ contract BridgeMock is Bridge { claimTimeout = _claimTimeout; maxEtherBridge = 0.25 ether; + + // Initialize OZ contracts + __Ownable_init_unchained(); } function setNetworkID(uint32 _networkID) public onlyOwner { diff --git a/deployment/deployment_v2-0/deployPoE_v2-0.js b/deployment/deployment_v2-0/deployPoE_v2-0.js index 66531ab44..a70453117 100644 --- a/deployment/deployment_v2-0/deployPoE_v2-0.js +++ b/deployment/deployment_v2-0/deployPoE_v2-0.js @@ -17,6 +17,7 @@ async function main() { const trustedSequencer = deployParameters.trustedSequencerAddress; const trustedSequencerURL = deployParameters.trustedSequencerURL || 'http://zkevm-json-rpc:8123'; const realVerifier = deployParameters.realVerifier || false; + const claimTimeout = deployParameters.claimTimeout || 0; const { chainID, networkName } = deployParameters; const atemptsDeployProxy = 20; @@ -53,6 +54,7 @@ async function main() { } else { [deployer] = (await ethers.getSigners()); } + const securityCouncilAddress = deployParameters.securityCouncilAddress || deployer.address; /* *Deployment MATIC @@ -106,6 +108,9 @@ async function main() { } } + console.log('#######################\n'); + console.log('globalExitRootManager deployed to:', globalExitRootManager.address); + // deploy bridge let bridgeFactory; if (deployParameters.bridgeMock) { @@ -125,6 +130,9 @@ async function main() { } } + console.log('#######################\n'); + console.log('Bridge deployed to:', bridgeContract.address); + // deploy PoE const ProofOfEfficiencyFactory = await ethers.getContractFactory('ProofOfEfficiencyMock', deployer); let proofOfEfficiencyContract; @@ -138,18 +146,32 @@ async function main() { } } - await globalExitRootManager.initialize(proofOfEfficiencyContract.address, bridgeContract.address); - console.log('#######################\n'); - console.log('globalExitRootManager deployed to:', globalExitRootManager.address); + console.log('Proof of Efficiency deployed to:', proofOfEfficiencyContract.address); + + /* + * Initialize globalExitRootManager + */ + await globalExitRootManager.initialize(proofOfEfficiencyContract.address, bridgeContract.address); /* * Initialize Bridge */ - await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address); + await (await bridgeContract.initialize( + networkIDMainnet, + globalExitRootManager.address, + proofOfEfficiencyContract.address, + claimTimeout, + )).wait(); - console.log('#######################\n'); - console.log('Bridge deployed to:', bridgeContract.address); + console.log('\n#######################'); + console.log('##### Checks Bridge #####'); + console.log('#######################'); + console.log('globalExitRootManagerAddress:', await bridgeContract.globalExitRootManager()); + console.log('networkID:', await bridgeContract.networkID()); + console.log('poeAddress:', await bridgeContract.poeAddress()); + console.log('claimTimeout:', await bridgeContract.claimTimeout()); + console.log('owner:', await bridgeContract.owner()); /* * Initialize proof of efficiency @@ -170,6 +192,8 @@ async function main() { console.log('trustedSequencerURL:', trustedSequencerURL); console.log('chainID:', chainID); console.log('networkName:', networkName); + console.log('bridgeContract:', bridgeContract.address); + console.log('securityCouncil:', securityCouncilAddress); await (await proofOfEfficiencyContract.initialize( globalExitRootManager.address, @@ -181,25 +205,27 @@ async function main() { trustedSequencerURL, chainID, networkName, + bridgeContract.address, + securityCouncilAddress, )).wait(); - console.log('#######################\n'); - console.log('Proof of Efficiency deployed to:', proofOfEfficiencyContract.address); - const deploymentBlockNumber = (await proofOfEfficiencyContract.deployTransaction.wait()).blockNumber; console.log('\n#######################'); - console.log('##### Checks #####'); + console.log('##### Checks PoE #####'); console.log('#######################'); console.log('globalExitRootManagerAddress:', await proofOfEfficiencyContract.globalExitRootManager()); console.log('maticTokenAddress:', await proofOfEfficiencyContract.matic()); console.log('verifierMockAddress:', await proofOfEfficiencyContract.rollupVerifier()); - console.log('genesiRoot:', await proofOfEfficiencyContract.currentStateRoot()); + console.log('genesiRoot:', await proofOfEfficiencyContract.batchNumToStateRoot(0)); console.log('trustedSequencer:', await proofOfEfficiencyContract.trustedSequencer()); console.log('forceBatchAllowed:', await proofOfEfficiencyContract.forceBatchAllowed()); console.log('trustedSequencerURL:', await proofOfEfficiencyContract.trustedSequencerURL()); console.log('chainID:', Number(await proofOfEfficiencyContract.chainID())); console.log('networkName:', await proofOfEfficiencyContract.networkName()); + console.log('bridgeContract:', await proofOfEfficiencyContract.bridgeAddress()); + console.log('securityCouncil:', await proofOfEfficiencyContract.securityCouncil()); + console.log('owner:', await proofOfEfficiencyContract.owner()); // fund account with tokens and ether if it have less than 0.1 ether. const balanceEther = await ethers.provider.getBalance(trustedSequencer); diff --git a/deployment/deployment_v2-0/deploy_parameters.json.example b/deployment/deployment_v2-0/deploy_parameters.json.example index 2ea0431df..cae431930 100644 --- a/deployment/deployment_v2-0/deploy_parameters.json.example +++ b/deployment/deployment_v2-0/deploy_parameters.json.example @@ -5,10 +5,12 @@ "realVerifier": false, "chainID": 1001, "networkName": "zkevm", + "claimTimeout": 0, "privateKey": "", "maxFeePerGas":0, "maxPriorityFeePerGas":0, "multiplierGas": 0, "trustedSequencerPvtKey":"", - "bridgeMock":false + "bridgeMock":false, + "securityCouncilAddress":"0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D" } \ No newline at end of file diff --git a/test/contracts/bridge.test.js b/test/contracts/bridge.test.js index 41b296a03..421d29d14 100644 --- a/test/contracts/bridge.test.js +++ b/test/contracts/bridge.test.js @@ -32,7 +32,7 @@ describe('Bridge Contract', () => { const networkIDRollup = 1; const LEAF_TYPE_ASSET = 0; - const MESSAGE_TYPE_ASSET = 1; + const LEAF_TYPE_MESSAGE = 1; const proofOfEfficiencyAddress = ethers.constants.AddressZero; const claimTimeout = 0; @@ -69,9 +69,10 @@ describe('Bridge Contract', () => { expect(await bridgeContract.networkID()).to.be.equal(networkIDMainnet); expect(await bridgeContract.poeAddress()).to.be.equal(proofOfEfficiencyAddress); expect(await bridgeContract.claimTimeout()).to.be.equal(claimTimeout); + expect(await bridgeContract.owner()).to.be.equal(deployer.address); }); - it('should bridge and verify merkle proof', async () => { + it('should bridge asset and verify merkle proof', async () => { const depositCount = await bridgeContract.depositCount(); const originNetwork = networkIDMainnet; const tokenAddress = tokenContract.address; @@ -109,7 +110,7 @@ describe('Bridge Contract', () => { await expect(bridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x')) .to.emit(bridgeContract, 'BridgeEvent') - .withArgs(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount) + .withArgs(LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount) .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') .withArgs(rootJSMainnet, rollupExitRoot); @@ -137,6 +138,67 @@ describe('Bridge Contract', () => { expect(computedGlobalExitRoot).to.be.equal(await globalExitRootManager.getLastGlobalExitRoot()); }); + it('should bridge message and verify merkle proof', async () => { + const depositCount = await bridgeContract.depositCount(); + const originNetwork = networkIDMainnet; + const originAddress = deployer.address; + const amount = ethers.utils.parseEther('10'); + const destinationNetwork = networkIDRollup; + const destinationAddress = deployer.address; + + const metadata = metadataToken; + const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); + const rollupExitRoot = await globalExitRootManager.lastRollupExitRoot(); + + // pre compute root merkle tree in Js + const height = 32; + const merkleTree = new MerkleTreeBridge(height); + const leafValue = getLeafValue( + LEAF_TYPE_MESSAGE, + originNetwork, + originAddress, + destinationNetwork, + destinationAddress, + amount, + metadataHash, + ); + merkleTree.add(leafValue); + const rootJSMainnet = merkleTree.getRoot(); + + await expect(bridgeContract.bridgeMessage(destinationNetwork, destinationAddress, metadata, { value: amount })) + .to.emit(bridgeContract, 'BridgeEvent') + .withArgs( + LEAF_TYPE_MESSAGE, + originNetwork, + originAddress, + destinationNetwork, + destinationAddress, + amount, + metadata, + depositCount, + ); + + // check merkle root with SC + const rootSCMainnet = await bridgeContract.getDepositRoot(); + expect(rootSCMainnet).to.be.equal(rootJSMainnet); + + // check merkle proof + const proof = merkleTree.getProofTreeByIndex(0); + const index = 0; + + // verify merkle proof + expect(verifyMerkleProof(leafValue, proof, index, rootSCMainnet)).to.be.equal(true); + expect(await bridgeContract.verifyMerkleProof( + leafValue, + proof, + index, + rootSCMainnet, + )).to.be.equal(true); + + const computedGlobalExitRoot = calculateGlobalExitRoot(rootJSMainnet, rollupExitRoot); + expect(computedGlobalExitRoot).to.be.equal(await globalExitRootManager.getLastGlobalExitRoot()); + }); + it('should claim tokens from Mainnet to Mainnet', async () => { const originNetwork = networkIDMainnet; const tokenAddress = tokenContract.address; @@ -437,7 +499,16 @@ describe('Bridge Contract', () => { // Tokens are burnt await expect(bridgeContract.bridgeAsset(wrappedTokenAddress, newDestinationNetwork, destinationAddress, amount, '0x')) .to.emit(bridgeContract, 'BridgeEvent') - .withArgs(originNetwork, originTokenAddress, newDestinationNetwork, destinationAddress, amount, metadataMainnet, depositCount) + .withArgs( + LEAF_TYPE_ASSET, + originNetwork, + originTokenAddress, + newDestinationNetwork, + destinationAddress, + amount, + metadataMainnet, + depositCount, + ) .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') .withArgs(rootJSMainnet, rollupExitRoot) .to.emit(newWrappedToken, 'Transfer') @@ -902,7 +973,7 @@ describe('Bridge Contract', () => { const height = 32; const merkleTree = new MerkleTreeBridge(height); const leafValue = getLeafValue( - MESSAGE_TYPE_ASSET, + LEAF_TYPE_MESSAGE, originNetwork, tokenAddress, destinationNetwork, diff --git a/test/contracts/emergencyManager.test.js b/test/contracts/emergencyManager.test.js new file mode 100644 index 000000000..c557537d1 --- /dev/null +++ b/test/contracts/emergencyManager.test.js @@ -0,0 +1,301 @@ +const { expect } = require('chai'); +const { ethers, upgrades } = require('hardhat'); + +describe('Emergency mode test', () => { + let deployer; + let aggregator; + let trustedSequencer; + let securityCouncil; + + let verifierContract; + let bridgeContract; + let proofOfEfficiencyContract; + let maticTokenContract; + let globalExitRootManager; + + const maticTokenName = 'Matic Token'; + const maticTokenSymbol = 'MATIC'; + const maticTokenInitialBalance = ethers.utils.parseEther('20000000'); + + const genesisRoot = '0x0000000000000000000000000000000000000000000000000000000000000001'; + + const networkIDMainnet = 0; + const allowForcebatches = true; + const urlSequencer = 'http://zkevm-json-rpc:8123'; + const chainID = 1000; + const networkName = 'zkevm'; + + beforeEach('Deploy contract', async () => { + // load signers + [deployer, aggregator, trustedSequencer, securityCouncil] = await ethers.getSigners(); + + // deploy mock verifier + const VerifierRollupHelperFactory = await ethers.getContractFactory( + 'VerifierRollupHelperMock', + ); + verifierContract = await VerifierRollupHelperFactory.deploy(); + + // deploy MATIC + const maticTokenFactory = await ethers.getContractFactory('ERC20PermitMock'); + maticTokenContract = await maticTokenFactory.deploy( + maticTokenName, + maticTokenSymbol, + deployer.address, + maticTokenInitialBalance, + ); + await maticTokenContract.deployed(); + + // deploy global exit root manager + const globalExitRootManagerFactory = await ethers.getContractFactory('GlobalExitRootManager'); + globalExitRootManager = await upgrades.deployProxy(globalExitRootManagerFactory, [], { initializer: false }); + + // deploy bridge + const bridgeFactory = await ethers.getContractFactory('Bridge'); + bridgeContract = await upgrades.deployProxy(bridgeFactory, [], { initializer: false }); + + // deploy PoE + const ProofOfEfficiencyFactory = await ethers.getContractFactory('ProofOfEfficiencyMock'); + proofOfEfficiencyContract = await upgrades.deployProxy(ProofOfEfficiencyFactory, [], { initializer: false }); + + const claimTimeout = 0; + await globalExitRootManager.initialize(proofOfEfficiencyContract.address, bridgeContract.address); + await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, proofOfEfficiencyContract.address, claimTimeout); + await proofOfEfficiencyContract.initialize( + globalExitRootManager.address, + maticTokenContract.address, + verifierContract.address, + genesisRoot, + trustedSequencer.address, + allowForcebatches, + urlSequencer, + chainID, + networkName, + bridgeContract.address, + securityCouncil.address, + ); + + // fund sequencer address with Matic tokens + await maticTokenContract.transfer(trustedSequencer.address, ethers.utils.parseEther('100')); + }); + + it('should activate emergency mode', async () => { + // Check isEmergencyState + expect(await proofOfEfficiencyContract.isEmergencyState()).to.be.equal(false); + expect(await bridgeContract.isEmergencyState()).to.be.equal(false); + + // Set isEmergencyState + await expect(proofOfEfficiencyContract.connect(securityCouncil).activateEmergencyState()) + .to.be.revertedWith('owner'); + + await expect(bridgeContract.connect(securityCouncil).activateEmergencyState()) + .to.be.revertedWith('ProofOfEfficiency::onlyProofOfEfficiency: only Proof of Efficiency contract'); + + await expect(proofOfEfficiencyContract.activateEmergencyState()) + .to.emit(proofOfEfficiencyContract, 'EmergencyStateActivated') + .to.emit(bridgeContract, 'EmergencyStateActivated'); + + expect(await proofOfEfficiencyContract.isEmergencyState()).to.be.equal(true); + expect(await bridgeContract.isEmergencyState()).to.be.equal(true); + + // Once in emergency state no sequenceBatches/forceBatches can be done + const l2txData = '0x123456'; + const maticAmount = await proofOfEfficiencyContract.TRUSTED_SEQUENCER_FEE(); + const currentTimestamp = (await ethers.provider.getBlock()).timestamp; + + const sequence = { + transactions: l2txData, + globalExitRoot: ethers.constants.HashZero, + timestamp: ethers.BigNumber.from(currentTimestamp), + minForcedTimestamp: 0, + }; + + // revert because emergency state + await expect(proofOfEfficiencyContract.sequenceBatches([sequence])) + .to.be.revertedWith('EmergencyManager::ifNotEmergencyState: only if not emergency state'); + + // revert because emergency state + await expect(proofOfEfficiencyContract.sequenceForceBatches([sequence])) + .to.be.revertedWith('EmergencyManager::ifNotEmergencyState: only if not emergency state'); + + // revert because emergency state + await expect(proofOfEfficiencyContract.forceBatch(l2txData, maticAmount)) + .to.be.revertedWith('EmergencyManager::ifNotEmergencyState: only if not emergency state'); + + // aggregator forge the batch + const newLocalExitRoot = '0x0000000000000000000000000000000000000000000000000000000000000001'; + const newStateRoot = '0x0000000000000000000000000000000000000000000000000000000000000001'; + const numBatch = (await proofOfEfficiencyContract.lastVerifiedBatch()).toNumber() + 1; + const proofA = ['0', '0']; + const proofB = [ + ['0', '0'], + ['0', '0'], + ]; + const proofC = ['0', '0']; + + await expect( + proofOfEfficiencyContract.connect(aggregator).verifyBatches( + numBatch - 1, + numBatch, + newLocalExitRoot, + newStateRoot, + proofA, + proofB, + proofC, + ), + ).to.be.revertedWith('EmergencyManager::ifNotEmergencyState: only if not emergency state'); + + // Check bridge no bridge is in emergency state also + const tokenAddress = ethers.constants.AddressZero; + const amount = ethers.utils.parseEther('10'); + const destinationNetwork = 1; + const destinationAddress = deployer.address; + + await expect(bridgeContract.bridgeAsset( + tokenAddress, + destinationNetwork, + destinationAddress, + amount, + '0x', + )).to.be.revertedWith('EmergencyManager::ifNotEmergencyState: only if not emergency state'); + + await expect(bridgeContract.bridgeMessage( + destinationNetwork, + destinationAddress, + '0x', + )).to.be.revertedWith('EmergencyManager::ifNotEmergencyState: only if not emergency state'); + + const proof = [ethers.constants.HashZero, ethers.constants.HashZero]; + const index = 0; + const root = ethers.constants.HashZero; + + await expect(bridgeContract.claimAsset( + proof, + index, + root, + root, + 0, + tokenAddress, + destinationNetwork, + destinationAddress, + amount, + '0x', + )).to.be.revertedWith('EmergencyManager::ifNotEmergencyState: only if not emergency state'); + + await expect(bridgeContract.claimMessage( + proof, + index, + root, + root, + 0, + tokenAddress, + destinationNetwork, + destinationAddress, + amount, + '0x', + )).to.be.revertedWith('EmergencyManager::ifNotEmergencyState: only if not emergency state'); + + // Emergency council should deactivate emergency mode + await expect(proofOfEfficiencyContract.activateEmergencyState()) + .to.be.revertedWith('EmergencyManager::ifNotEmergencyState: only if not emergency state'); + + await expect(bridgeContract.connect(securityCouncil).deactivateEmergencyState()) + .to.be.revertedWith('ProofOfEfficiency::onlyProofOfEfficiency: only Proof of Efficiency contract'); + + await expect(proofOfEfficiencyContract.deactivateEmergencyState()) + .to.be.revertedWith('ProofOfEfficiency::onlySecurityCouncil: only security council'); + + await expect(proofOfEfficiencyContract.connect(securityCouncil).deactivateEmergencyState()) + .to.emit(proofOfEfficiencyContract, 'EmergencyStateDeactivated') + .to.emit(bridgeContract, 'EmergencyStateDeactivated'); + + // Check isEmergencyState + expect(await proofOfEfficiencyContract.isEmergencyState()).to.be.equal(false); + expect(await bridgeContract.isEmergencyState()).to.be.equal(false); + + /* + * Continue normal flow + * Approve tokens + */ + await expect( + maticTokenContract.connect(trustedSequencer).approve(proofOfEfficiencyContract.address, maticAmount), + ).to.emit(maticTokenContract, 'Approval'); + + const lastBatchSequenced = await proofOfEfficiencyContract.lastBatchSequenced(); + // Sequence Batches + await expect(proofOfEfficiencyContract.connect(trustedSequencer).sequenceBatches([sequence])) + .to.emit(proofOfEfficiencyContract, 'SequenceBatches') + .withArgs(lastBatchSequenced + 1); + + // aggregator forge the batch + const initialAggregatorMatic = await maticTokenContract.balanceOf( + await aggregator.getAddress(), + ); + + // Verify batch + await expect( + proofOfEfficiencyContract.connect(aggregator).verifyBatches( + numBatch - 1, + numBatch, + newLocalExitRoot, + newStateRoot, + proofA, + proofB, + proofC, + ), + ).to.emit(proofOfEfficiencyContract, 'VerifyBatches') + .withArgs(numBatch, newStateRoot, aggregator.address); + + const finalAggregatorMatic = await maticTokenContract.balanceOf( + await aggregator.getAddress(), + ); + expect(finalAggregatorMatic).to.equal( + ethers.BigNumber.from(initialAggregatorMatic).add(ethers.BigNumber.from(maticAmount)), + ); + + // Finally enter in emergency mode again proving distinc state + + await expect( + proofOfEfficiencyContract.connect(aggregator).proofDifferentState( + numBatch - 1, + numBatch - 1, + newLocalExitRoot, + newStateRoot, + proofA, + proofB, + proofC, + ), + ).to.be.revertedWith('ProofOfEfficiency::proofDifferentState: finalNewBatch must be bigger than initNumBatch'); + + await expect( + proofOfEfficiencyContract.connect(aggregator).proofDifferentState( + numBatch - 1, + numBatch + 1, + newLocalExitRoot, + newStateRoot, + proofA, + proofB, + proofC, + ), + ).to.be.revertedWith('ProofOfEfficiency::proofDifferentState: finalNewBatch must be less or equal than lastVerifiedBatch'); + + const newStateRootDistinct = '0x0000000000000000000000000000000000000000000000000000000000000002'; + + await expect( + proofOfEfficiencyContract.proofDifferentState( + numBatch - 1, + numBatch, + newLocalExitRoot, + newStateRootDistinct, + proofA, + proofB, + proofC, + ), + ).to.emit(proofOfEfficiencyContract, 'ProofDifferentState').withArgs(newStateRoot, newStateRootDistinct) + .to.emit(proofOfEfficiencyContract, 'EmergencyStateActivated') + .to.emit(bridgeContract, 'EmergencyStateActivated'); + + // Check emergency state is active + expect(await proofOfEfficiencyContract.isEmergencyState()).to.be.equal(true); + expect(await bridgeContract.isEmergencyState()).to.be.equal(true); + }); +}); diff --git a/test/contracts/emergencyModeTest.js b/test/contracts/emergencyModeTest.js deleted file mode 100644 index 2beff6db9..000000000 --- a/test/contracts/emergencyModeTest.js +++ /dev/null @@ -1,275 +0,0 @@ -const { expect } = require('chai'); -const { ethers, upgrades } = require('hardhat'); - -const { contractUtils } = require('@0xpolygonhermez/zkevm-commonjs'); - -const { calculateAccInputHash, calculateBatchHashData } = contractUtils; - -describe('Proof of efficiency', () => { - let deployer; - let aggregator; - let trustedSequencer; - let securityCouncil; - - let verifierContract; - let bridgeContract; - let proofOfEfficiencyContract; - let maticTokenContract; - let globalExitRootManager; - - const maticTokenName = 'Matic Token'; - const maticTokenSymbol = 'MATIC'; - const maticTokenInitialBalance = ethers.utils.parseEther('20000000'); - - const genesisRoot = '0x0000000000000000000000000000000000000000000000000000000000000001'; - - const networkIDMainnet = 0; - const allowForcebatches = true; - const urlSequencer = 'http://zkevm-json-rpc:8123'; - const chainID = 1000; - const networkName = 'zkevm'; - - beforeEach('Deploy contract', async () => { - // load signers - [deployer, aggregator, trustedSequencer, securityCouncil] = await ethers.getSigners(); - - // deploy mock verifier - const VerifierRollupHelperFactory = await ethers.getContractFactory( - 'VerifierRollupHelperMock', - ); - verifierContract = await VerifierRollupHelperFactory.deploy(); - - // deploy MATIC - const maticTokenFactory = await ethers.getContractFactory('ERC20PermitMock'); - maticTokenContract = await maticTokenFactory.deploy( - maticTokenName, - maticTokenSymbol, - deployer.address, - maticTokenInitialBalance, - ); - await maticTokenContract.deployed(); - - // deploy global exit root manager - const globalExitRootManagerFactory = await ethers.getContractFactory('GlobalExitRootManager'); - globalExitRootManager = await upgrades.deployProxy(globalExitRootManagerFactory, [], { initializer: false }); - - // deploy bridge - const bridgeFactory = await ethers.getContractFactory('Bridge'); - bridgeContract = await upgrades.deployProxy(bridgeFactory, [], { initializer: false }); - - // deploy PoE - const ProofOfEfficiencyFactory = await ethers.getContractFactory('ProofOfEfficiencyMock'); - proofOfEfficiencyContract = await upgrades.deployProxy(ProofOfEfficiencyFactory, [], { initializer: false }); - - const claimTimeout = 0; - await globalExitRootManager.initialize(proofOfEfficiencyContract.address, bridgeContract.address); - await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, proofOfEfficiencyContract.address, claimTimeout); - await proofOfEfficiencyContract.initialize( - globalExitRootManager.address, - maticTokenContract.address, - verifierContract.address, - genesisRoot, - trustedSequencer.address, - allowForcebatches, - urlSequencer, - chainID, - networkName, - bridgeContract.address, - securityCouncil.address, - ); - - // fund sequencer address with Matic tokens - await maticTokenContract.transfer(trustedSequencer.address, ethers.utils.parseEther('100')); - }); - - it('should sequence a batch as truested sequencer', async () => { - const l2txData = '0x123456'; - const maticAmount = await proofOfEfficiencyContract.TRUSTED_SEQUENCER_FEE(); - const currentTimestamp = (await ethers.provider.getBlock()).timestamp; - - const sequence = { - transactions: l2txData, - globalExitRoot: ethers.constants.HashZero, - timestamp: ethers.BigNumber.from(currentTimestamp), - minForcedTimestamp: 0, - }; - - // revert because sender is not truested sequencer - await expect(proofOfEfficiencyContract.sequenceBatches([sequence])) - .to.be.revertedWith('ProofOfEfficiency::onlyTrustedSequencer: only trusted sequencer'); - - // revert because tokens were not approved - await expect(proofOfEfficiencyContract.connect(trustedSequencer).sequenceBatches([sequence])) - .to.be.revertedWith('ERC20: insufficient allowance'); - - const initialOwnerBalance = await maticTokenContract.balanceOf( - await trustedSequencer.getAddress(), - ); - - // Approve tokens - await expect( - maticTokenContract.connect(trustedSequencer).approve(proofOfEfficiencyContract.address, maticAmount), - ).to.emit(maticTokenContract, 'Approval'); - - const lastBatchSequenced = await proofOfEfficiencyContract.lastBatchSequenced(); - - // Sequence batch - await expect(proofOfEfficiencyContract.connect(trustedSequencer).sequenceBatches([sequence])) - .to.emit(proofOfEfficiencyContract, 'SequenceBatches') - .withArgs(lastBatchSequenced + 1); - - const finalOwnerBalance = await maticTokenContract.balanceOf( - await trustedSequencer.getAddress(), - ); - expect(finalOwnerBalance).to.equal( - ethers.BigNumber.from(initialOwnerBalance).sub(ethers.BigNumber.from(maticAmount)), - ); - - // Check batch mapping - const batchAccInputHash = await proofOfEfficiencyContract.sequencedBatches(1); - - const batchAccInputHashJs = calculateAccInputHash( - await proofOfEfficiencyContract.sequencedBatches(0), - calculateBatchHashData(sequence.transactions), - sequence.globalExitRoot, - sequence.timestamp, - trustedSequencer.address, - ); - expect(batchAccInputHash).to.be.equal(batchAccInputHashJs); - }); - - it('should force a batch of transactions', async () => { - const l2txData = '0x123456'; - const maticAmount = await proofOfEfficiencyContract.calculateForceProverFee(); - const lastGlobalExitRoot = await globalExitRootManager.getLastGlobalExitRoot(); - - expect(maticAmount.toString()).to.be.equal((await proofOfEfficiencyContract.calculateForceProverFee()).toString()); - - // revert because the maxMatic amount is less than the necessary to pay - await expect(proofOfEfficiencyContract.forceBatch(l2txData, maticAmount.sub(1))) - .to.be.revertedWith('ProofOfEfficiency::forceBatch: not enough matic'); - - // revert because tokens were not approved - await expect(proofOfEfficiencyContract.forceBatch(l2txData, maticAmount)) - .to.be.revertedWith('ERC20: insufficient allowance'); - - const initialOwnerBalance = await maticTokenContract.balanceOf( - await deployer.getAddress(), - ); - await expect( - maticTokenContract.approve(proofOfEfficiencyContract.address, maticAmount), - ).to.emit(maticTokenContract, 'Approval'); - - const lastForceBatch = await proofOfEfficiencyContract.lastForceBatch(); - - // Force batch - await expect(proofOfEfficiencyContract.forceBatch(l2txData, maticAmount)) - .to.emit(proofOfEfficiencyContract, 'ForceBatch') - .withArgs(lastForceBatch + 1, lastGlobalExitRoot, deployer.address, '0x'); - - const finalOwnerBalance = await maticTokenContract.balanceOf( - await deployer.getAddress(), - ); - expect(finalOwnerBalance).to.equal( - ethers.BigNumber.from(initialOwnerBalance).sub(ethers.BigNumber.from(maticAmount)), - ); - - // Check force batches struct - const batchHash = await proofOfEfficiencyContract.forcedBatches(1); - const timestampForceBatch = (await ethers.provider.getBlock()).timestamp; - - const batchHashJs = ethers.utils.solidityKeccak256( - ['bytes32', 'bytes32', 'uint64'], - [ - calculateBatchHashData(l2txData), - lastGlobalExitRoot, - timestampForceBatch, - ], - ); - expect(batchHashJs).to.be.equal(batchHash); - }); - - it('should verify a sequenced batch', async () => { - const l2txData = '0x123456'; - const maticAmount = await proofOfEfficiencyContract.TRUSTED_SEQUENCER_FEE(); - const currentTimestamp = (await ethers.provider.getBlock()).timestamp; - - const sequence = { - transactions: l2txData, - globalExitRoot: ethers.constants.HashZero, - timestamp: currentTimestamp, - minForcedTimestamp: 0, - }; - - // Approve tokens - await expect( - maticTokenContract.connect(trustedSequencer).approve(proofOfEfficiencyContract.address, maticAmount), - ).to.emit(maticTokenContract, 'Approval'); - - const lastBatchSequenced = await proofOfEfficiencyContract.lastBatchSequenced(); - // Sequence Batches - await expect(proofOfEfficiencyContract.connect(trustedSequencer).sequenceBatches([sequence])) - .to.emit(proofOfEfficiencyContract, 'SequenceBatches') - .withArgs(lastBatchSequenced + 1); - - // aggregator forge the batch - const newLocalExitRoot = '0x0000000000000000000000000000000000000000000000000000000000000000'; - const newStateRoot = '0x0000000000000000000000000000000000000000000000000000000000000000'; - const numBatch = (await proofOfEfficiencyContract.lastVerifiedBatch()) + 1; - const proofA = ['0', '0']; - const proofB = [ - ['0', '0'], - ['0', '0'], - ]; - const proofC = ['0', '0']; - - const initialAggregatorMatic = await maticTokenContract.balanceOf( - await aggregator.getAddress(), - ); - - await expect( - proofOfEfficiencyContract.connect(aggregator).verifyBatches( - numBatch - 1, - numBatch - 1, - newLocalExitRoot, - newStateRoot, - proofA, - proofB, - proofC, - ), - ).to.be.revertedWith('ProofOfEfficiency::verifyBatches: finalNewBatch must be bigger than lastVerifiedBatch'); - - await expect( - proofOfEfficiencyContract.connect(aggregator).verifyBatches( - numBatch - 1, - numBatch + 1, - newLocalExitRoot, - newStateRoot, - proofA, - proofB, - proofC, - ), - ).to.be.revertedWith('ProofOfEfficiency::getInputSnarkBytes: newAccInputHash does not exist'); - - // Verify batch - await expect( - proofOfEfficiencyContract.connect(aggregator).verifyBatches( - numBatch - 1, - numBatch, - newLocalExitRoot, - newStateRoot, - proofA, - proofB, - proofC, - ), - ).to.emit(proofOfEfficiencyContract, 'VerifyBatches') - .withArgs(numBatch, newStateRoot, aggregator.address); - - const finalAggregatorMatic = await maticTokenContract.balanceOf( - await aggregator.getAddress(), - ); - expect(finalAggregatorMatic).to.equal( - ethers.BigNumber.from(initialAggregatorMatic).add(ethers.BigNumber.from(maticAmount)), - ); - }); -}); diff --git a/test/contracts/proofOfEfficiency.test.js b/test/contracts/proofOfEfficiency.test.js index 336edfa3c..fd6ad760b 100644 --- a/test/contracts/proofOfEfficiency.test.js +++ b/test/contracts/proofOfEfficiency.test.js @@ -91,6 +91,7 @@ describe('Proof of efficiency', () => { expect(await proofOfEfficiencyContract.forceBatchAllowed()).to.be.equal(allowForcebatches); expect(await proofOfEfficiencyContract.bridgeAddress()).to.be.equal(bridgeContract.address); expect(await proofOfEfficiencyContract.securityCouncil()).to.be.equal(securityCouncil.address); + expect(await proofOfEfficiencyContract.owner()).to.be.equal(deployer.address); }); it('should check setters of trusted sequencer', async () => { diff --git a/test/contracts/real-prover/real-flow.test.js b/test/contracts/real-prover/real-flow.test.js index 1da2bea3f..bc6881f9f 100644 --- a/test/contracts/real-prover/real-flow.test.js +++ b/test/contracts/real-prover/real-flow.test.js @@ -87,6 +87,7 @@ describe('Real flow test', () => { chainID, networkName, bridgeContract.address, + ethers.constants.AddressZero, ); // fund sequencer address with Matic tokens diff --git a/test/contracts/snark_stark_input.test.js b/test/contracts/snark_stark_input.test.js index e148e57c0..360bc4e78 100644 --- a/test/contracts/snark_stark_input.test.js +++ b/test/contracts/snark_stark_input.test.js @@ -33,6 +33,7 @@ describe('Proof of efficiency snark stark input test', () => { chainID, networkName, ethers.constants.AddressZero, + ethers.constants.AddressZero, ], ); await proofOfEfficiencyContract.deployed(); From 79f98d18d6e94debb65fce13b18ac3ebe080549c Mon Sep 17 00:00:00 2001 From: invocamanman Date: Wed, 23 Nov 2022 11:15:42 +0100 Subject: [PATCH 22/71] now proofs works ^^ --- .solhint.json | 5 +- compiled-contracts/Bridge.json | 4 +- compiled-contracts/BridgeMock.json | 4 +- compiled-contracts/ERC20PermitMock.json | 4 +- compiled-contracts/GlobalExitRootManager.json | 4 +- .../GlobalExitRootManagerL2.json | 4 +- .../GlobalExitRootManagerL2Mock.json | 4 +- .../GlobalExitRootManagerMock.json | 22 +- compiled-contracts/ProofOfEfficiency.json | 8 +- compiled-contracts/ProofOfEfficiencyMock.json | 8 +- compiled-contracts/TokenWrapped.json | 4 +- compiled-contracts/Verifier.json | 4 +- contracts/Bridge.sol | 8 +- contracts/ProofOfEfficiency.sol | 81 +- contracts/lib/TokenWrapped.sol | 26 +- contracts/mocks/GlobalExitRootManagerMock.sol | 10 + contracts/verifiers/Verifier.sol | 82 +- docs/ProofOfEfficiency.md | 10 +- package.json | 2 +- test/contracts/emergencyManager.test.js | 12 +- test/contracts/real-prover/real-flow.test.js | 159 ++- .../real-prover/test-inputs/input.json | 1098 ++++++++++++++++- .../real-prover/test-inputs/proof.json | 17 +- .../real-prover/test-inputs/public.json | 2 +- 24 files changed, 1352 insertions(+), 230 deletions(-) diff --git a/.solhint.json b/.solhint.json index 0b450c45f..2e017cb06 100644 --- a/.solhint.json +++ b/.solhint.json @@ -6,6 +6,9 @@ "compiler-version": ["error", "0.8.15"], "private-vars-leading-underscore": "error", "bracket-align": "off", - "reason-string": "off" + "reason-string": "off", + "not-rely-on-time": "off", + "no-inline-assembly": "off", + "check-send-result": "off" } } diff --git a/compiled-contracts/Bridge.json b/compiled-contracts/Bridge.json index d4f7c9b94..717f4e0bc 100644 --- a/compiled-contracts/Bridge.json +++ b/compiled-contracts/Bridge.json @@ -776,8 +776,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50615951806100206000396000f3fe608060405260043610620001db5760003560e01c806381b1c17411620000ff578063d96a15f71162000095578063e7a5b4ea116200006c578063e7a5b4ea1462000658578063ed6be5c9146200067d578063f2fde38b1462000694578063ff634ed714620006b957600080fd5b8063d96a15f714620005f5578063dbc16976146200060c578063e7375881146200062457600080fd5b8063a08e8a0811620000d6578063a08e8a08146200054f578063aaa13cc21462000579578063bab161bf146200059e578063d02103ca14620005d357600080fd5b806381b1c17414620004d35780638da5cb5b146200050d5780638f611519146200052d57600080fd5b80633ae05047116200017557806346385549116200014c57806346385549146200044c578063655595401462000471578063715018a614620004965780637b6323c114620004ae57600080fd5b80633ae05047146200032e5780633da8168214620003465780633e197043146200036b57600080fd5b80632072f6c511620001b65780632072f6c5146200025157806322e95f2c14620002695780632dfdf0b514620002a7578063318aee3d14620002bf57600080fd5b80630871e97114620001e05780630e1da6c314620001f957806315064c961462000224575b600080fd5b620001f7620001f1366004620031bc565b620006d0565b005b3480156200020657600080fd5b5062000211608d5481565b6040519081526020015b60405180910390f35b3480156200023157600080fd5b50602254620002409060ff1681565b60405190151581526020016200021b565b3480156200025e57600080fd5b50620001f762000c7a565b3480156200027657600080fd5b506200028e6200028836600462003249565b62000d2e565b6040516001600160a01b0390911681526020016200021b565b348015620002b457600080fd5b506200021160215481565b348015620002cc57600080fd5b5062000309620002de36600462003285565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200021b565b3480156200033b57600080fd5b506200021162000db1565b3480156200035357600080fd5b50620002406200036536600462003386565b62000ea4565b3480156200037857600080fd5b50620002116200038a36600462003404565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200045957600080fd5b50620001f76200046b36600462003515565b62000fa4565b3480156200047e57600080fd5b50620001f762000490366004620035fc565b6200122a565b348015620004a357600080fd5b50620001f762001410565b348015620004bb57600080fd5b50620001f7620004cd36600462003515565b62001426565b348015620004e057600080fd5b506200028e620004f236600462003652565b6089602052600090815260409020546001600160a01b031681565b3480156200051a57600080fd5b506055546001600160a01b03166200028e565b3480156200053a57600080fd5b50608c546200028e906001600160a01b031681565b3480156200055c57600080fd5b5062000566600081565b60405160ff90911681526020016200021b565b3480156200058657600080fd5b506200028e620005983660046200366c565b620019e8565b348015620005ab57600080fd5b50608754620005bd9063ffffffff1681565b60405163ffffffff90911681526020016200021b565b348015620005e057600080fd5b50608b546200028e906001600160a01b031681565b620001f76200060636600462003720565b62001b54565b3480156200061957600080fd5b50620001f762001e08565b3480156200063157600080fd5b50620002406200064336600462003652565b60886020526000908152604090205460ff1681565b3480156200066557600080fd5b50620001f76200067736600462003652565b62001eba565b3480156200068a57600080fd5b50620005bd600081565b348015620006a157600080fd5b50620001f7620006b336600462003285565b62001eff565b348015620006c657600080fd5b5062000566600181565b60225460ff1615620007755760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60875463ffffffff90811690861603620007f85760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b60008060606001600160a01b0389166200088d57853414620008835760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200076c565b6000915062000b17565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000974576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af11580156200093b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000961919062003797565b5060208101518151909450925062000b15565b84156200098957620009898a88888862001f95565b620009a06001600160a01b038b1633308a620025ba565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620009f7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a2191908101906200383a565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000a60573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a8a91908101906200383a565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ac9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aef919062003873565b60405160200162000b0393929190620038c1565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162000b59989796959493929190620038fe565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000c019062002673565b608b546001600160a01b03166333d6247d62000c1c62000db1565b6040518263ffffffff1660e01b815260040162000c3b91815260200190565b600060405180830381600087803b15801562000c5657600080fd5b505af115801562000c6b573d6000803e3d6000fd5b50505050505050505050505050565b608c546001600160a01b0316331462000d225760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c620027d7565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b602154600090819081805b602081101562000e9b578260011660010362000e1c576001816020811062000de85762000de86200396a565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000e49565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000e56600284620039c8565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000e929062003a04565b91505062000dbc565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000f97578160011660010362000f215786818151811062000edf5762000edf6200396a565b60200260200101518360405160200162000f03929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000f73565b8287828151811062000f375762000f376200396a565b602002602001015160405160200162000f5a929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000f80600283620039c8565b91508062000f8e8162003a04565b91505062000eb4565b5050909114949350505050565b60225460ff1615620010455760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6200105b8a8a8a8a8a8a8a8a8a8a6001620028b0565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b0385169084906200109e9089908b90879060240162003a3f565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001103919062003a78565b60006040518083038185875af1925050503d806000811462001142576040519150601f19603f3d011682016040523d82523d6000602084013e62001147565b606091505b5050905080620011bf5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff16158080156200124b5750600054600160ff909116105b80620012675750303b15801562001267575060005460ff166001145b620012db5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200076c565b6000805460ff1916600117905580156200131c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d829055620013a562002c3d565b80156200140957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6200141a62002cc7565b62000d2c600062002d23565b60225460ff1615620014c75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b620014dd8a8a8a8a8a8a8a8a8a8a6000620028b0565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620015fc57604080516000808252602082019092526001600160a01b03851690849060405162001538919062003a78565b60006040518083038185875af1925050503d806000811462001577576040519150601f19603f3d011682016040523d82523d6000602084013e6200157c565b606091505b5050905080620015f55760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c45440000000000000000000000000000000000000000000000000060648201526084016200076c565b506200197e565b60875463ffffffff908116908716036200162c57620016266001600160a01b038616848462002d8d565b6200197e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620018ea57600080600085806020019051810190620016cc919062003a96565b925092509250600085848484604051620016e69062003125565b620016f493929190620038c1565b8190604051809103906000f590508015801562001715573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001783573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017a9919062003797565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620018d89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200197b565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001953573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001979919062003797565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162001a6b9062003125565b601f1982820381018352601f90910116604081905262001a98908d908d908d908d908d9060200162003b42565b60408051601f198184030181529082905262001ab8929160200162003b83565b6040516020818303038152906040528051906020012060405160200162001b2e94939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff161562001bf55760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b60875463ffffffff9081169084160362001c785760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b9262001cc59260019263ffffffff9092169133918991899134918a9190620038fe565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d850152346051850152607180850192909252805180850390920182526091909301909252815191012062001d959062002673565b608b546001600160a01b03166333d6247d62001db062000db1565b6040518263ffffffff1660e01b815260040162001dcf91815260200190565b600060405180830381600087803b15801562001dea57600080fd5b505af115801562001dff573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001eb05760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c62002dd8565b62001ec462002cc7565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001f0962002cc7565b6001600160a01b03811662001f875760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016200076c565b62001f928162002d23565b50565b600062001fd883838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002e8792505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620022da5760008080808080806200203b896004818d62003bb6565b8101906200204a919062003be2565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620020e15760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0386163014620021615760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b8a8514620021d85760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002286919062003a78565b6000604051808303816000865af19150503d8060008114620022c5576040519150601f19603f3d011682016040523d82523d6000602084013e620022ca565b606091505b5050505050505050505062001409565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c00000000000000000000000000000000000000000000000000000000146200236d5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200076c565b600080808080808080620023858a6004818e62003bb6565b81019062002394919062003c3d565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200242d5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0387163014620024ad5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002564919062003a78565b6000604051808303816000865af19150503d8060008114620025a3576040519150601f19603f3d011682016040523d82523d6000602084013e620025a8565b606091505b50505050505050505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526200266d9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002e8e565b50505050565b806001620026846020600262003e02565b62002690919062003e10565b60215410620027085760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200076c565b6001602160008282546200271d919062003e2a565b909155505060215460005b6020811015620027c757816001166001036200275d5782600182602081106200275557620027556200396a565b015550505050565b600181602081106200277357620027736200396a565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620027b09190620039c8565b915080620027be8162003a04565b91505062002728565b50620027d262003e45565b505050565b60225460ff1615620028785760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b63ffffffff8a1660009081526088602052604090205460ff16156200293d5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af1158015620029ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620029f0919062003e74565b9050801580159062002a0f5750608d5462002a0c824262003e10565b10155b62002a835760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c49440000000000000000000000000000000000000060648201526084016200076c565b60875463ffffffff87811691161462002b055760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000000060648201526084016200076c565b60875460009063ffffffff1662002b1e57508862002b21565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d82015260518101899052607180820193909352815180820390930183526091019052805191012062002bef908e8e63ffffffff168462000ea4565b62000c6b5760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c494460448201526064016200076c565b600054610100900460ff1662002cbc5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200076c565b62000d2c3362002d23565b6055546001600160a01b0316331462000d2c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200076c565b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620027d29084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002608565b60225460ff1662002e525760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016200076c565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002ee5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662002f7a9092919063ffffffff16565b805190915015620027d2578080602001905181019062002f06919062003797565b620027d25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200076c565b606062002f8b848460008562002f95565b90505b9392505050565b6060824710156200300f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016200076c565b6001600160a01b0385163b620030685760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200076c565b600080866001600160a01b0316858760405162003086919062003a78565b60006040518083038185875af1925050503d8060008114620030c5576040519150601f19603f3d011682016040523d82523d6000602084013e620030ca565b606091505b5091509150620030dc828286620030e7565b979650505050505050565b60608315620030f857508162002f8e565b825115620031095782518084602001fd5b8160405162461bcd60e51b81526004016200076c919062003e8e565b611a788062003ea483390190565b6001600160a01b038116811462001f9257600080fd5b8035620031568162003133565b919050565b803563ffffffff811681146200315657600080fd5b60008083601f8401126200318357600080fd5b50813567ffffffffffffffff8111156200319c57600080fd5b602083019150836020828501011115620031b557600080fd5b9250929050565b60008060008060008060a08789031215620031d657600080fd5b8635620031e38162003133565b9550620031f3602088016200315b565b94506040870135620032058162003133565b935060608701359250608087013567ffffffffffffffff8111156200322957600080fd5b6200323789828a0162003170565b979a9699509497509295939492505050565b600080604083850312156200325d57600080fd5b62003268836200315b565b915060208301356200327a8162003133565b809150509250929050565b6000602082840312156200329857600080fd5b813562002f8e8162003133565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620033005762003300620032a5565b604052919050565b600082601f8301126200331a57600080fd5b8135602067ffffffffffffffff821115620033395762003339620032a5565b8160051b6200334a828201620032d4565b92835284810182019282810190878511156200336557600080fd5b83870192505b84831015620030dc578235825291830191908301906200336b565b600080600080608085870312156200339d57600080fd5b84359350602085013567ffffffffffffffff80821115620033bd57600080fd5b620033cb8883890162003308565b9450604087013591508082168214620033e357600080fd5b509396929550929360600135925050565b60ff8116811462001f9257600080fd5b600080600080600080600060e0888a0312156200342057600080fd5b87356200342d81620033f4565b96506200343d602089016200315b565b955060408801356200344f8162003133565b94506200345f606089016200315b565b93506080880135620034718162003133565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620034ab57620034ab620032a5565b50601f01601f191660200190565b600082601f830112620034cb57600080fd5b8135620034e2620034dc826200348e565b620032d4565b818152846020838601011115620034f857600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200353657600080fd5b8a3567ffffffffffffffff808211156200354f57600080fd5b6200355d8e838f0162003308565b9b506200356d60208e016200315b565b9a5060408d0135995060608d013598506200358b60808e016200315b565b97506200359b60a08e0162003149565b9650620035ab60c08e016200315b565b9550620035bb60e08e0162003149565b94506101008d013593506101208d0135915080821115620035db57600080fd5b50620035ea8d828e01620034b9565b9150509295989b9194979a5092959850565b600080600080608085870312156200361357600080fd5b6200361e856200315b565b93506020850135620036308162003133565b92506040850135620036428162003133565b9396929550929360600135925050565b6000602082840312156200366557600080fd5b5035919050565b600080600080600080600060a0888a0312156200368857600080fd5b62003693886200315b565b96506020880135620036a58162003133565b9550604088013567ffffffffffffffff80821115620036c357600080fd5b620036d18b838c0162003170565b909750955060608a0135915080821115620036eb57600080fd5b50620036fa8a828b0162003170565b90945092505060808801356200371081620033f4565b8091505092959891949750929550565b6000806000606084860312156200373657600080fd5b62003741846200315b565b92506020840135620037538162003133565b9150604084013567ffffffffffffffff8111156200377057600080fd5b6200377e86828701620034b9565b9150509250925092565b801515811462001f9257600080fd5b600060208284031215620037aa57600080fd5b815162002f8e8162003788565b60005b83811015620037d4578181015183820152602001620037ba565b838111156200266d5750506000910152565b600082601f830112620037f857600080fd5b815162003809620034dc826200348e565b8181528460208386010111156200381f57600080fd5b62003832826020830160208701620037b7565b949350505050565b6000602082840312156200384d57600080fd5b815167ffffffffffffffff8111156200386557600080fd5b6200383284828501620037e6565b6000602082840312156200388657600080fd5b815162002f8e81620033f4565b60008151808452620038ad816020860160208601620037b7565b601f01601f19169290920160200192915050565b606081526000620038d6606083018662003893565b8281036020840152620038ea818662003893565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620039518285018762003893565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082620039ff577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003a385762003a3862003999565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003a6f606083018462003893565b95945050505050565b6000825162003a8c818460208701620037b7565b9190910192915050565b60008060006060848603121562003aac57600080fd5b835167ffffffffffffffff8082111562003ac557600080fd5b62003ad387838801620037e6565b9450602086015191508082111562003aea57600080fd5b5062003af986828701620037e6565b925050604084015162003b0c81620033f4565b809150509250925092565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003b5860608301878962003b17565b828103602084015262003b6d81868862003b17565b91505060ff831660408301529695505050505050565b6000835162003b97818460208801620037b7565b83519083019062003bad818360208801620037b7565b01949350505050565b6000808585111562003bc757600080fd5b8386111562003bd557600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003bfe57600080fd5b873562003c0b8162003133565b9650602088013562003c1d8162003133565b9550604088013594506060880135935060808801356200347181620033f4565b600080600080600080600080610100898b03121562003c5b57600080fd5b883562003c688162003133565b9750602089013562003c7a8162003133565b96506040890135955060608901359450608089013562003c9a8162003788565b935060a089013562003cac81620033f4565b979a969950949793969295929450505060c08201359160e0013590565b600181815b8085111562003d2857817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d0c5762003d0c62003999565b8085161562003d1a57918102915b93841c939080029062003cce565b509250929050565b60008262003d415750600162000dab565b8162003d505750600062000dab565b816001811462003d69576002811462003d745762003d94565b600191505062000dab565b60ff84111562003d885762003d8862003999565b50506001821b62000dab565b5060208310610133831016604e8410600b841016171562003db9575081810a62000dab565b62003dc5838362003cc9565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003dfa5762003dfa62003999565b029392505050565b600062002f8e838362003d30565b60008282101562003e255762003e2562003999565b500390565b6000821982111562003e405762003e4062003999565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60006020828403121562003e8757600080fd5b5051919050565b60208152600062002f8e60208301846200389356fe60c06040523480156200001157600080fd5b5060405162001a7838038062001a788339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516115be620004ba600039600061053001526000818161036f01526104fa01526115be6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b60405161019191906112d5565b60405180910390f35b6101ad6101a8366004611371565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad61020436600461139b565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad610276366004611371565b610552565b6101ad610289366004611371565b61059e565b6101c161029c3660046113d7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d23660046113d7565b60066020526000908152604090205481565b610184610645565b6101ad6102fa366004611371565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad610352366004611371565b6106ed565b6101ad610365366004611371565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f3660046113f9565b6107b2565b005b6101c16103b436600461146c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6060600380546104379061149f565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061149f565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f56565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611521565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c838361101e565b50600192915050565b6060600480546104379061149f565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c8383611124565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661088183611539565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ee3908490611521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4991815260200190565b60405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f81610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166110815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b80600260008282546110939190611521565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906110cd908490611521565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156112495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611285908490611571565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c27565b600060208083528351808285015260005b81811015611302578581018301518582016040015282016112e6565b81811115611314576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136c57600080fd5b919050565b6000806040838503121561138457600080fd5b61138d83611348565b946020939093013593505050565b6000806000606084860312156113b057600080fd5b6113b984611348565b92506113c760208501611348565b9150604084013590509250925092565b6000602082840312156113e957600080fd5b6113f282611348565b9392505050565b600080600080600080600060e0888a03121561141457600080fd5b61141d88611348565b965061142b60208901611348565b95506040880135945060608801359350608088013560ff8116811461144f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561147f57600080fd5b61148883611348565b915061149660208401611348565b90509250929050565b600181811c908216806114b357607f821691505b6020821081036114ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611534576115346114f2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156a5761156a6114f2565b5060010190565b600082821015611583576115836114f2565b50039056fea2646970667358221220dc9c54325b6ec8c11c8bc6a1630cfb64202b6d54611cd1004e705ceca7826a4f64736f6c634300080f0033a2646970667358221220cd5d627eb44db0ac502a5df7e6b4905941374829b022d6f8f6fd4be1a279530c64736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001db5760003560e01c806381b1c17411620000ff578063d96a15f71162000095578063e7a5b4ea116200006c578063e7a5b4ea1462000658578063ed6be5c9146200067d578063f2fde38b1462000694578063ff634ed714620006b957600080fd5b8063d96a15f714620005f5578063dbc16976146200060c578063e7375881146200062457600080fd5b8063a08e8a0811620000d6578063a08e8a08146200054f578063aaa13cc21462000579578063bab161bf146200059e578063d02103ca14620005d357600080fd5b806381b1c17414620004d35780638da5cb5b146200050d5780638f611519146200052d57600080fd5b80633ae05047116200017557806346385549116200014c57806346385549146200044c578063655595401462000471578063715018a614620004965780637b6323c114620004ae57600080fd5b80633ae05047146200032e5780633da8168214620003465780633e197043146200036b57600080fd5b80632072f6c511620001b65780632072f6c5146200025157806322e95f2c14620002695780632dfdf0b514620002a7578063318aee3d14620002bf57600080fd5b80630871e97114620001e05780630e1da6c314620001f957806315064c961462000224575b600080fd5b620001f7620001f1366004620031bc565b620006d0565b005b3480156200020657600080fd5b5062000211608d5481565b6040519081526020015b60405180910390f35b3480156200023157600080fd5b50602254620002409060ff1681565b60405190151581526020016200021b565b3480156200025e57600080fd5b50620001f762000c7a565b3480156200027657600080fd5b506200028e6200028836600462003249565b62000d2e565b6040516001600160a01b0390911681526020016200021b565b348015620002b457600080fd5b506200021160215481565b348015620002cc57600080fd5b5062000309620002de36600462003285565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200021b565b3480156200033b57600080fd5b506200021162000db1565b3480156200035357600080fd5b50620002406200036536600462003386565b62000ea4565b3480156200037857600080fd5b50620002116200038a36600462003404565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200045957600080fd5b50620001f76200046b36600462003515565b62000fa4565b3480156200047e57600080fd5b50620001f762000490366004620035fc565b6200122a565b348015620004a357600080fd5b50620001f762001410565b348015620004bb57600080fd5b50620001f7620004cd36600462003515565b62001426565b348015620004e057600080fd5b506200028e620004f236600462003652565b6089602052600090815260409020546001600160a01b031681565b3480156200051a57600080fd5b506055546001600160a01b03166200028e565b3480156200053a57600080fd5b50608c546200028e906001600160a01b031681565b3480156200055c57600080fd5b5062000566600081565b60405160ff90911681526020016200021b565b3480156200058657600080fd5b506200028e620005983660046200366c565b620019e8565b348015620005ab57600080fd5b50608754620005bd9063ffffffff1681565b60405163ffffffff90911681526020016200021b565b348015620005e057600080fd5b50608b546200028e906001600160a01b031681565b620001f76200060636600462003720565b62001b54565b3480156200061957600080fd5b50620001f762001e08565b3480156200063157600080fd5b50620002406200064336600462003652565b60886020526000908152604090205460ff1681565b3480156200066557600080fd5b50620001f76200067736600462003652565b62001eba565b3480156200068a57600080fd5b50620005bd600081565b348015620006a157600080fd5b50620001f7620006b336600462003285565b62001eff565b348015620006c657600080fd5b5062000566600181565b60225460ff1615620007755760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60875463ffffffff90811690861603620007f85760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b60008060606001600160a01b0389166200088d57853414620008835760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200076c565b6000915062000b17565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000974576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af11580156200093b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000961919062003797565b5060208101518151909450925062000b15565b84156200098957620009898a88888862001f95565b620009a06001600160a01b038b1633308a620025ba565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620009f7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a2191908101906200383a565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000a60573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a8a91908101906200383a565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ac9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aef919062003873565b60405160200162000b0393929190620038c1565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162000b59989796959493929190620038fe565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000c019062002673565b608b546001600160a01b03166333d6247d62000c1c62000db1565b6040518263ffffffff1660e01b815260040162000c3b91815260200190565b600060405180830381600087803b15801562000c5657600080fd5b505af115801562000c6b573d6000803e3d6000fd5b50505050505050505050505050565b608c546001600160a01b0316331462000d225760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c620027d7565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b602154600090819081805b602081101562000e9b578260011660010362000e1c576001816020811062000de85762000de86200396a565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000e49565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000e56600284620039c8565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000e929062003a04565b91505062000dbc565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000f97578160011660010362000f215786818151811062000edf5762000edf6200396a565b60200260200101518360405160200162000f03929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000f73565b8287828151811062000f375762000f376200396a565b602002602001015160405160200162000f5a929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000f80600283620039c8565b91508062000f8e8162003a04565b91505062000eb4565b5050909114949350505050565b60225460ff1615620010455760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6200105b8a8a8a8a8a8a8a8a8a8a6001620028b0565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b0385169084906200109e9089908b90879060240162003a3f565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001103919062003a78565b60006040518083038185875af1925050503d806000811462001142576040519150601f19603f3d011682016040523d82523d6000602084013e62001147565b606091505b5050905080620011bf5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff16158080156200124b5750600054600160ff909116105b80620012675750303b15801562001267575060005460ff166001145b620012db5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200076c565b6000805460ff1916600117905580156200131c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d829055620013a562002c3d565b80156200140957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6200141a62002cc7565b62000d2c600062002d23565b60225460ff1615620014c75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b620014dd8a8a8a8a8a8a8a8a8a8a6000620028b0565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620015fc57604080516000808252602082019092526001600160a01b03851690849060405162001538919062003a78565b60006040518083038185875af1925050503d806000811462001577576040519150601f19603f3d011682016040523d82523d6000602084013e6200157c565b606091505b5050905080620015f55760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c45440000000000000000000000000000000000000000000000000060648201526084016200076c565b506200197e565b60875463ffffffff908116908716036200162c57620016266001600160a01b038616848462002d8d565b6200197e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620018ea57600080600085806020019051810190620016cc919062003a96565b925092509250600085848484604051620016e69062003125565b620016f493929190620038c1565b8190604051809103906000f590508015801562001715573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001783573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017a9919062003797565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620018d89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200197b565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001953573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001979919062003797565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162001a6b9062003125565b601f1982820381018352601f90910116604081905262001a98908d908d908d908d908d9060200162003b42565b60408051601f198184030181529082905262001ab8929160200162003b83565b6040516020818303038152906040528051906020012060405160200162001b2e94939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff161562001bf55760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b60875463ffffffff9081169084160362001c785760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b9262001cc59260019263ffffffff9092169133918991899134918a9190620038fe565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d850152346051850152607180850192909252805180850390920182526091909301909252815191012062001d959062002673565b608b546001600160a01b03166333d6247d62001db062000db1565b6040518263ffffffff1660e01b815260040162001dcf91815260200190565b600060405180830381600087803b15801562001dea57600080fd5b505af115801562001dff573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001eb05760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c62002dd8565b62001ec462002cc7565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001f0962002cc7565b6001600160a01b03811662001f875760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016200076c565b62001f928162002d23565b50565b600062001fd883838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002e8792505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620022da5760008080808080806200203b896004818d62003bb6565b8101906200204a919062003be2565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620020e15760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0386163014620021615760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b8a8514620021d85760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002286919062003a78565b6000604051808303816000865af19150503d8060008114620022c5576040519150601f19603f3d011682016040523d82523d6000602084013e620022ca565b606091505b5050505050505050505062001409565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c00000000000000000000000000000000000000000000000000000000146200236d5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200076c565b600080808080808080620023858a6004818e62003bb6565b81019062002394919062003c3d565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200242d5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0387163014620024ad5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002564919062003a78565b6000604051808303816000865af19150503d8060008114620025a3576040519150601f19603f3d011682016040523d82523d6000602084013e620025a8565b606091505b50505050505050505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526200266d9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002e8e565b50505050565b806001620026846020600262003e02565b62002690919062003e10565b60215410620027085760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200076c565b6001602160008282546200271d919062003e2a565b909155505060215460005b6020811015620027c757816001166001036200275d5782600182602081106200275557620027556200396a565b015550505050565b600181602081106200277357620027736200396a565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620027b09190620039c8565b915080620027be8162003a04565b91505062002728565b50620027d262003e45565b505050565b60225460ff1615620028785760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b63ffffffff8a1660009081526088602052604090205460ff16156200293d5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af1158015620029ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620029f0919062003e74565b9050801580159062002a0f5750608d5462002a0c824262003e10565b10155b62002a835760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c49440000000000000000000000000000000000000060648201526084016200076c565b60875463ffffffff87811691161462002b055760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000000060648201526084016200076c565b60875460009063ffffffff1662002b1e57508862002b21565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d82015260518101899052607180820193909352815180820390930183526091019052805191012062002bef908e8e63ffffffff168462000ea4565b62000c6b5760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c494460448201526064016200076c565b600054610100900460ff1662002cbc5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200076c565b62000d2c3362002d23565b6055546001600160a01b0316331462000d2c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200076c565b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620027d29084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002608565b60225460ff1662002e525760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016200076c565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002ee5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662002f7a9092919063ffffffff16565b805190915015620027d2578080602001905181019062002f06919062003797565b620027d25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200076c565b606062002f8b848460008562002f95565b90505b9392505050565b6060824710156200300f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016200076c565b6001600160a01b0385163b620030685760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200076c565b600080866001600160a01b0316858760405162003086919062003a78565b60006040518083038185875af1925050503d8060008114620030c5576040519150601f19603f3d011682016040523d82523d6000602084013e620030ca565b606091505b5091509150620030dc828286620030e7565b979650505050505050565b60608315620030f857508162002f8e565b825115620031095782518084602001fd5b8160405162461bcd60e51b81526004016200076c919062003e8e565b611a788062003ea483390190565b6001600160a01b038116811462001f9257600080fd5b8035620031568162003133565b919050565b803563ffffffff811681146200315657600080fd5b60008083601f8401126200318357600080fd5b50813567ffffffffffffffff8111156200319c57600080fd5b602083019150836020828501011115620031b557600080fd5b9250929050565b60008060008060008060a08789031215620031d657600080fd5b8635620031e38162003133565b9550620031f3602088016200315b565b94506040870135620032058162003133565b935060608701359250608087013567ffffffffffffffff8111156200322957600080fd5b6200323789828a0162003170565b979a9699509497509295939492505050565b600080604083850312156200325d57600080fd5b62003268836200315b565b915060208301356200327a8162003133565b809150509250929050565b6000602082840312156200329857600080fd5b813562002f8e8162003133565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620033005762003300620032a5565b604052919050565b600082601f8301126200331a57600080fd5b8135602067ffffffffffffffff821115620033395762003339620032a5565b8160051b6200334a828201620032d4565b92835284810182019282810190878511156200336557600080fd5b83870192505b84831015620030dc578235825291830191908301906200336b565b600080600080608085870312156200339d57600080fd5b84359350602085013567ffffffffffffffff80821115620033bd57600080fd5b620033cb8883890162003308565b9450604087013591508082168214620033e357600080fd5b509396929550929360600135925050565b60ff8116811462001f9257600080fd5b600080600080600080600060e0888a0312156200342057600080fd5b87356200342d81620033f4565b96506200343d602089016200315b565b955060408801356200344f8162003133565b94506200345f606089016200315b565b93506080880135620034718162003133565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620034ab57620034ab620032a5565b50601f01601f191660200190565b600082601f830112620034cb57600080fd5b8135620034e2620034dc826200348e565b620032d4565b818152846020838601011115620034f857600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200353657600080fd5b8a3567ffffffffffffffff808211156200354f57600080fd5b6200355d8e838f0162003308565b9b506200356d60208e016200315b565b9a5060408d0135995060608d013598506200358b60808e016200315b565b97506200359b60a08e0162003149565b9650620035ab60c08e016200315b565b9550620035bb60e08e0162003149565b94506101008d013593506101208d0135915080821115620035db57600080fd5b50620035ea8d828e01620034b9565b9150509295989b9194979a5092959850565b600080600080608085870312156200361357600080fd5b6200361e856200315b565b93506020850135620036308162003133565b92506040850135620036428162003133565b9396929550929360600135925050565b6000602082840312156200366557600080fd5b5035919050565b600080600080600080600060a0888a0312156200368857600080fd5b62003693886200315b565b96506020880135620036a58162003133565b9550604088013567ffffffffffffffff80821115620036c357600080fd5b620036d18b838c0162003170565b909750955060608a0135915080821115620036eb57600080fd5b50620036fa8a828b0162003170565b90945092505060808801356200371081620033f4565b8091505092959891949750929550565b6000806000606084860312156200373657600080fd5b62003741846200315b565b92506020840135620037538162003133565b9150604084013567ffffffffffffffff8111156200377057600080fd5b6200377e86828701620034b9565b9150509250925092565b801515811462001f9257600080fd5b600060208284031215620037aa57600080fd5b815162002f8e8162003788565b60005b83811015620037d4578181015183820152602001620037ba565b838111156200266d5750506000910152565b600082601f830112620037f857600080fd5b815162003809620034dc826200348e565b8181528460208386010111156200381f57600080fd5b62003832826020830160208701620037b7565b949350505050565b6000602082840312156200384d57600080fd5b815167ffffffffffffffff8111156200386557600080fd5b6200383284828501620037e6565b6000602082840312156200388657600080fd5b815162002f8e81620033f4565b60008151808452620038ad816020860160208601620037b7565b601f01601f19169290920160200192915050565b606081526000620038d6606083018662003893565b8281036020840152620038ea818662003893565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620039518285018762003893565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082620039ff577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003a385762003a3862003999565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003a6f606083018462003893565b95945050505050565b6000825162003a8c818460208701620037b7565b9190910192915050565b60008060006060848603121562003aac57600080fd5b835167ffffffffffffffff8082111562003ac557600080fd5b62003ad387838801620037e6565b9450602086015191508082111562003aea57600080fd5b5062003af986828701620037e6565b925050604084015162003b0c81620033f4565b809150509250925092565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003b5860608301878962003b17565b828103602084015262003b6d81868862003b17565b91505060ff831660408301529695505050505050565b6000835162003b97818460208801620037b7565b83519083019062003bad818360208801620037b7565b01949350505050565b6000808585111562003bc757600080fd5b8386111562003bd557600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003bfe57600080fd5b873562003c0b8162003133565b9650602088013562003c1d8162003133565b9550604088013594506060880135935060808801356200347181620033f4565b600080600080600080600080610100898b03121562003c5b57600080fd5b883562003c688162003133565b9750602089013562003c7a8162003133565b96506040890135955060608901359450608089013562003c9a8162003788565b935060a089013562003cac81620033f4565b979a969950949793969295929450505060c08201359160e0013590565b600181815b8085111562003d2857817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d0c5762003d0c62003999565b8085161562003d1a57918102915b93841c939080029062003cce565b509250929050565b60008262003d415750600162000dab565b8162003d505750600062000dab565b816001811462003d69576002811462003d745762003d94565b600191505062000dab565b60ff84111562003d885762003d8862003999565b50506001821b62000dab565b5060208310610133831016604e8410600b841016171562003db9575081810a62000dab565b62003dc5838362003cc9565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003dfa5762003dfa62003999565b029392505050565b600062002f8e838362003d30565b60008282101562003e255762003e2562003999565b500390565b6000821982111562003e405762003e4062003999565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60006020828403121562003e8757600080fd5b5051919050565b60208152600062002f8e60208301846200389356fe60c06040523480156200001157600080fd5b5060405162001a7838038062001a788339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516115be620004ba600039600061053001526000818161036f01526104fa01526115be6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b60405161019191906112d5565b60405180910390f35b6101ad6101a8366004611371565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad61020436600461139b565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad610276366004611371565b610552565b6101ad610289366004611371565b61059e565b6101c161029c3660046113d7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d23660046113d7565b60066020526000908152604090205481565b610184610645565b6101ad6102fa366004611371565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad610352366004611371565b6106ed565b6101ad610365366004611371565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f3660046113f9565b6107b2565b005b6101c16103b436600461146c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6060600380546104379061149f565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061149f565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f56565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611521565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c838361101e565b50600192915050565b6060600480546104379061149f565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c8383611124565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661088183611539565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ee3908490611521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4991815260200190565b60405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f81610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166110815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b80600260008282546110939190611521565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906110cd908490611521565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156112495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611285908490611571565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c27565b600060208083528351808285015260005b81811015611302578581018301518582016040015282016112e6565b81811115611314576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136c57600080fd5b919050565b6000806040838503121561138457600080fd5b61138d83611348565b946020939093013593505050565b6000806000606084860312156113b057600080fd5b6113b984611348565b92506113c760208501611348565b9150604084013590509250925092565b6000602082840312156113e957600080fd5b6113f282611348565b9392505050565b600080600080600080600060e0888a03121561141457600080fd5b61141d88611348565b965061142b60208901611348565b95506040880135945060608801359350608088013560ff8116811461144f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561147f57600080fd5b61148883611348565b915061149660208401611348565b90509250929050565b600181811c908216806114b357607f821691505b6020821081036114ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611534576115346114f2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156a5761156a6114f2565b5060010190565b600082821015611583576115836114f2565b50039056fea2646970667358221220dc9c54325b6ec8c11c8bc6a1630cfb64202b6d54611cd1004e705ceca7826a4f64736f6c634300080f0033a2646970667358221220cd5d627eb44db0ac502a5df7e6b4905941374829b022d6f8f6fd4be1a279530c64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50615829806100206000396000f3fe608060405260043610620001db5760003560e01c806381b1c17411620000ff578063d96a15f71162000095578063e7a5b4ea116200006c578063e7a5b4ea1462000658578063ed6be5c9146200067d578063f2fde38b1462000694578063ff634ed714620006b957600080fd5b8063d96a15f714620005f5578063dbc16976146200060c578063e7375881146200062457600080fd5b8063a08e8a0811620000d6578063a08e8a08146200054f578063aaa13cc21462000579578063bab161bf146200059e578063d02103ca14620005d357600080fd5b806381b1c17414620004d35780638da5cb5b146200050d5780638f611519146200052d57600080fd5b80633ae05047116200017557806346385549116200014c57806346385549146200044c578063655595401462000471578063715018a614620004965780637b6323c114620004ae57600080fd5b80633ae05047146200032e5780633da8168214620003465780633e197043146200036b57600080fd5b80632072f6c511620001b65780632072f6c5146200025157806322e95f2c14620002695780632dfdf0b514620002a7578063318aee3d14620002bf57600080fd5b80630871e97114620001e05780630e1da6c314620001f957806315064c961462000224575b600080fd5b620001f7620001f136600462003146565b620006d0565b005b3480156200020657600080fd5b5062000211608d5481565b6040519081526020015b60405180910390f35b3480156200023157600080fd5b50602254620002409060ff1681565b60405190151581526020016200021b565b3480156200025e57600080fd5b50620001f762000c7a565b3480156200027657600080fd5b506200028e62000288366004620031d3565b62000d2e565b6040516001600160a01b0390911681526020016200021b565b348015620002b457600080fd5b506200021160215481565b348015620002cc57600080fd5b5062000309620002de3660046200320f565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200021b565b3480156200033b57600080fd5b506200021162000db1565b3480156200035357600080fd5b50620002406200036536600462003317565b62000ea4565b3480156200037857600080fd5b50620002116200038a36600462003395565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200045957600080fd5b50620001f76200046b366004620034a6565b62000fa6565b3480156200047e57600080fd5b50620001f7620004903660046200358d565b6200122c565b348015620004a357600080fd5b50620001f762001412565b348015620004bb57600080fd5b50620001f7620004cd366004620034a6565b62001428565b348015620004e057600080fd5b506200028e620004f2366004620035e3565b6089602052600090815260409020546001600160a01b031681565b3480156200051a57600080fd5b506055546001600160a01b03166200028e565b3480156200053a57600080fd5b50608c546200028e906001600160a01b031681565b3480156200055c57600080fd5b5062000566600081565b60405160ff90911681526020016200021b565b3480156200058657600080fd5b506200028e62000598366004620035fd565b620019ea565b348015620005ab57600080fd5b50608754620005bd9063ffffffff1681565b60405163ffffffff90911681526020016200021b565b348015620005e057600080fd5b50608b546200028e906001600160a01b031681565b620001f762000606366004620036b1565b62001b56565b3480156200061957600080fd5b50620001f762001e0a565b3480156200063157600080fd5b506200024062000643366004620035e3565b60886020526000908152604090205460ff1681565b3480156200066557600080fd5b50620001f762000677366004620035e3565b62001ebc565b3480156200068a57600080fd5b50620005bd600081565b348015620006a157600080fd5b50620001f7620006b33660046200320f565b62001f01565b348015620006c657600080fd5b5062000566600181565b60225460ff1615620007755760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60875463ffffffff90811690861603620007f85760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b60008060606001600160a01b0389166200088d57853414620008835760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200076c565b6000915062000b17565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000974576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af11580156200093b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000961919062003728565b5060208101518151909450925062000b15565b84156200098957620009898a88888862001f97565b620009a06001600160a01b038b1633308a620025bc565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620009f7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a219190810190620037c3565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000a60573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a8a9190810190620037c3565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ac9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aef9190620037fc565b60405160200162000b03939291906200384a565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162000b5998979695949392919062003887565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000c019062002675565b608b546001600160a01b03166333d6247d62000c1c62000db1565b6040518263ffffffff1660e01b815260040162000c3b91815260200190565b600060405180830381600087803b15801562000c5657600080fd5b505af115801562000c6b573d6000803e3d6000fd5b50505050505050505050505050565b608c546001600160a01b0316331462000d225760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c620027d9565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b602154600090819081805b602081101562000e9b578260011660010362000e1c576001816020811062000de85762000de8620038f3565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000e49565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000e5660028462003951565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000e92906200398d565b91505062000dbc565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000f97578160011660010362000f215786818151811062000edf5762000edf620038f3565b60200260200101518360405160200162000f03929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000f73565b8287828151811062000f375762000f37620038f3565b602002602001015160405160200162000f5a929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000f8060028362003951565b91508062000f8e816200398d565b91505062000eb4565b5050821490505b949350505050565b60225460ff1615620010475760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6200105d8a8a8a8a8a8a8a8a8a8a6001620028b2565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b038516908490620010a09089908b908790602401620039c8565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001105919062003a01565b60006040518083038185875af1925050503d806000811462001144576040519150601f19603f3d011682016040523d82523d6000602084013e62001149565b606091505b5050905080620011c15760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff16158080156200124d5750600054600160ff909116105b80620012695750303b15801562001269575060005460ff166001145b620012dd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200076c565b6000805460ff1916600117905580156200131e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d829055620013a762002c3f565b80156200140b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6200141c62002cc9565b62000d2c600062002d25565b60225460ff1615620014c95760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b620014df8a8a8a8a8a8a8a8a8a8a6000620028b2565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620015fe57604080516000808252602082019092526001600160a01b0385169084906040516200153a919062003a01565b60006040518083038185875af1925050503d806000811462001579576040519150601f19603f3d011682016040523d82523d6000602084013e6200157e565b606091505b5050905080620015f75760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c45440000000000000000000000000000000000000000000000000060648201526084016200076c565b5062001980565b60875463ffffffff908116908716036200162e57620016286001600160a01b038616848462002d8f565b62001980565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620018ec57600080600085806020019051810190620016ce919062003a1f565b925092509250600085848484604051620016e890620030af565b620016f6939291906200384a565b8190604051809103906000f590508015801562001717573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001785573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017ab919062003728565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620018da9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200197d565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001955573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200197b919062003728565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162001a6d90620030af565b601f1982820381018352601f90910116604081905262001a9a908d908d908d908d908d9060200162003acb565b60408051601f198184030181529082905262001aba929160200162003b0c565b6040516020818303038152906040528051906020012060405160200162001b3094939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff161562001bf75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b60875463ffffffff9081169084160362001c7a5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b9262001cc79260019263ffffffff9092169133918991899134918a919062003887565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d850152346051850152607180850192909252805180850390920182526091909301909252815191012062001d979062002675565b608b546001600160a01b03166333d6247d62001db262000db1565b6040518263ffffffff1660e01b815260040162001dd191815260200190565b600060405180830381600087803b15801562001dec57600080fd5b505af115801562001e01573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001eb25760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c62002dda565b62001ec662002cc9565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001f0b62002cc9565b6001600160a01b03811662001f895760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016200076c565b62001f948162002d25565b50565b600062001fda83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002e8992505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620022dc5760008080808080806200203d896004818d62003b3f565b8101906200204c919062003b6b565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620020e35760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0386163014620021635760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b8a8514620021da5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002288919062003a01565b6000604051808303816000865af19150503d8060008114620022c7576040519150601f19603f3d011682016040523d82523d6000602084013e620022cc565b606091505b505050505050505050506200140b565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c00000000000000000000000000000000000000000000000000000000146200236f5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200076c565b600080808080808080620023878a6004818e62003b3f565b81019062002396919062003bc6565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200242f5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0387163014620024af5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002566919062003a01565b6000604051808303816000865af19150503d8060008114620025a5576040519150601f19603f3d011682016040523d82523d6000602084013e620025aa565b606091505b50505050505050505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526200266f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002e90565b50505050565b806001620026866020600262003d8b565b62002692919062003d99565b602154106200270a5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200076c565b6001602160008282546200271f919062003db3565b909155505060215460005b6020811015620027c957816001166001036200275f578260018260208110620027575762002757620038f3565b015550505050565b60018160208110620027755762002775620038f3565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620027b2919062003951565b915080620027c0816200398d565b9150506200272a565b50620027d462003dce565b505050565b60225460ff16156200287a5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b63ffffffff8a1660009081526088602052604090205460ff16156200293f5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af1158015620029cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620029f2919062003dfd565b9050801580159062002a115750608d5462002a0e824262003d99565b10155b62002a855760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c49440000000000000000000000000000000000000060648201526084016200076c565b60875463ffffffff87811691161462002b075760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000000060648201526084016200076c565b60875460009063ffffffff1662002b2057508862002b23565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d82015260518101899052607180820193909352815180820390930183526091019052805191012062002bf1908e8e63ffffffff168462000ea4565b62000c6b5760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c494460448201526064016200076c565b600054610100900460ff1662002cbe5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200076c565b62000d2c3362002d25565b6055546001600160a01b0316331462000d2c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200076c565b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620027d49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016200260a565b60225460ff1662002e545760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016200076c565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002ee7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662002f7c9092919063ffffffff16565b805190915015620027d4578080602001905181019062002f08919062003728565b620027d45760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200076c565b606062000f9e848460008585600080866001600160a01b0316858760405162002fa6919062003a01565b60006040518083038185875af1925050503d806000811462002fe5576040519150601f19603f3d011682016040523d82523d6000602084013e62002fea565b606091505b509150915062002ffd8783838762003008565b979650505050505050565b606083156200307c57825160000362003074576001600160a01b0385163b620030745760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200076c565b508162000f9e565b62000f9e8383815115620030935781518083602001fd5b8060405162461bcd60e51b81526004016200076c919062003e17565b6119c78062003e2d83390190565b6001600160a01b038116811462001f9457600080fd5b8035620030e081620030bd565b919050565b803563ffffffff81168114620030e057600080fd5b60008083601f8401126200310d57600080fd5b50813567ffffffffffffffff8111156200312657600080fd5b6020830191508360208285010111156200313f57600080fd5b9250929050565b60008060008060008060a087890312156200316057600080fd5b86356200316d81620030bd565b95506200317d60208801620030e5565b945060408701356200318f81620030bd565b935060608701359250608087013567ffffffffffffffff811115620031b357600080fd5b620031c189828a01620030fa565b979a9699509497509295939492505050565b60008060408385031215620031e757600080fd5b620031f283620030e5565b915060208301356200320481620030bd565b809150509250929050565b6000602082840312156200322257600080fd5b81356200322f81620030bd565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171562003291576200329162003236565b604052919050565b600082601f830112620032ab57600080fd5b8135602067ffffffffffffffff821115620032ca57620032ca62003236565b8160051b620032db82820162003265565b9283528481018201928281019087851115620032f657600080fd5b83870192505b8483101562002ffd57823582529183019190830190620032fc565b600080600080608085870312156200332e57600080fd5b84359350602085013567ffffffffffffffff808211156200334e57600080fd5b6200335c8883890162003299565b94506040870135915080821682146200337457600080fd5b509396929550929360600135925050565b60ff8116811462001f9457600080fd5b600080600080600080600060e0888a031215620033b157600080fd5b8735620033be8162003385565b9650620033ce60208901620030e5565b95506040880135620033e081620030bd565b9450620033f060608901620030e5565b935060808801356200340281620030bd565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200343c576200343c62003236565b50601f01601f191660200190565b600082601f8301126200345c57600080fd5b8135620034736200346d826200341f565b62003265565b8181528460208386010111156200348957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620034c757600080fd5b8a3567ffffffffffffffff80821115620034e057600080fd5b620034ee8e838f0162003299565b9b50620034fe60208e01620030e5565b9a5060408d0135995060608d013598506200351c60808e01620030e5565b97506200352c60a08e01620030d3565b96506200353c60c08e01620030e5565b95506200354c60e08e01620030d3565b94506101008d013593506101208d01359150808211156200356c57600080fd5b506200357b8d828e016200344a565b9150509295989b9194979a5092959850565b60008060008060808587031215620035a457600080fd5b620035af85620030e5565b93506020850135620035c181620030bd565b92506040850135620035d381620030bd565b9396929550929360600135925050565b600060208284031215620035f657600080fd5b5035919050565b600080600080600080600060a0888a0312156200361957600080fd5b6200362488620030e5565b965060208801356200363681620030bd565b9550604088013567ffffffffffffffff808211156200365457600080fd5b620036628b838c01620030fa565b909750955060608a01359150808211156200367c57600080fd5b506200368b8a828b01620030fa565b9094509250506080880135620036a18162003385565b8091505092959891949750929550565b600080600060608486031215620036c757600080fd5b620036d284620030e5565b92506020840135620036e481620030bd565b9150604084013567ffffffffffffffff8111156200370157600080fd5b6200370f868287016200344a565b9150509250925092565b801515811462001f9457600080fd5b6000602082840312156200373b57600080fd5b81516200322f8162003719565b60005b83811015620037655781810151838201526020016200374b565b838111156200266f5750506000910152565b600082601f8301126200378957600080fd5b81516200379a6200346d826200341f565b818152846020838601011115620037b057600080fd5b62000f9e82602083016020870162003748565b600060208284031215620037d657600080fd5b815167ffffffffffffffff811115620037ee57600080fd5b62000f9e8482850162003777565b6000602082840312156200380f57600080fd5b81516200322f8162003385565b600081518084526200383681602086016020860162003748565b601f01601f19169290920160200192915050565b6060815260006200385f60608301866200381c565b82810360208401526200387381866200381c565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620038da828501876200381c565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003988577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620039c157620039c162003922565b5060010190565b6001600160a01b038416815263ffffffff83166020820152606060408201526000620039f860608301846200381c565b95945050505050565b6000825162003a1581846020870162003748565b9190910192915050565b60008060006060848603121562003a3557600080fd5b835167ffffffffffffffff8082111562003a4e57600080fd5b62003a5c8783880162003777565b9450602086015191508082111562003a7357600080fd5b5062003a828682870162003777565b925050604084015162003a958162003385565b809150509250925092565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003ae160608301878962003aa0565b828103602084015262003af681868862003aa0565b91505060ff831660408301529695505050505050565b6000835162003b2081846020880162003748565b83519083019062003b3681836020880162003748565b01949350505050565b6000808585111562003b5057600080fd5b8386111562003b5e57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003b8757600080fd5b873562003b9481620030bd565b9650602088013562003ba681620030bd565b955060408801359450606088013593506080880135620034028162003385565b600080600080600080600080610100898b03121562003be457600080fd5b883562003bf181620030bd565b9750602089013562003c0381620030bd565b96506040890135955060608901359450608089013562003c238162003719565b935060a089013562003c358162003385565b979a969950949793969295929450505060c08201359160e0013590565b600181815b8085111562003cb157817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003c955762003c9562003922565b8085161562003ca357918102915b93841c939080029062003c57565b509250929050565b60008262003cca5750600162000dab565b8162003cd95750600062000dab565b816001811462003cf2576002811462003cfd5762003d1d565b600191505062000dab565b60ff84111562003d115762003d1162003922565b50506001821b62000dab565b5060208310610133831016604e8410600b841016171562003d42575081810a62000dab565b62003d4e838362003c52565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d835762003d8362003922565b029392505050565b60006200322f838362003cb9565b60008282101562003dae5762003dae62003922565b500390565b6000821982111562003dc95762003dc962003922565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60006020828403121562003e1057600080fd5b5051919050565b6020815260006200322f60208301846200381c56fe60c06040523480156200001157600080fd5b50604051620019c7380380620019c78339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161150d620004ba600039600061053001526000818161036f01526104fa015261150d6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b604051610191919061123b565b60405180910390f35b6101ad6101a83660046112d7565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad610204366004611301565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad6102763660046112d7565b610552565b6101ad6102893660046112d7565b61059e565b6101c161029c36600461133d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d236600461133d565b60066020526000908152604090205481565b610184610645565b6101ad6102fa3660046112d7565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad6103523660046112d7565b6106ed565b6101ad6103653660046112d7565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f36600461135f565b6107b2565b005b6101c16103b43660046113d2565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043790611405565b80601f016020809104026020016040519081016040528092919081815260200182805461046390611405565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f12565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611487565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c8383610fda565b50600192915050565b60606004805461043790611405565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c83836110b3565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866108818361149f565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f3d610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff821661103d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b806002600082825461104f9190611487565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff821661113c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156111d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610c27565b600060208083528351808285015260005b818110156112685785810183015185820160400152820161124c565b8181111561127a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112d257600080fd5b919050565b600080604083850312156112ea57600080fd5b6112f3836112ae565b946020939093013593505050565b60008060006060848603121561131657600080fd5b61131f846112ae565b925061132d602085016112ae565b9150604084013590509250925092565b60006020828403121561134f57600080fd5b611358826112ae565b9392505050565b600080600080600080600060e0888a03121561137a57600080fd5b611383886112ae565b9650611391602089016112ae565b95506040880135945060608801359350608088013560ff811681146113b557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156113e557600080fd5b6113ee836112ae565b91506113fc602084016112ae565b90509250929050565b600181811c9082168061141957607f821691505b602082108103611452577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561149a5761149a611458565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036114d0576114d0611458565b506001019056fea264697066735822122094134962e5fa2f6357086a2590b7f3a754d340b16e5312664d82a308bc23a0df64736f6c634300080f0033a264697066735822122038131c24024bbc952c3d2f624475606fbf73b929bdaad1a58995cc43510513a064736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001db5760003560e01c806381b1c17411620000ff578063d96a15f71162000095578063e7a5b4ea116200006c578063e7a5b4ea1462000658578063ed6be5c9146200067d578063f2fde38b1462000694578063ff634ed714620006b957600080fd5b8063d96a15f714620005f5578063dbc16976146200060c578063e7375881146200062457600080fd5b8063a08e8a0811620000d6578063a08e8a08146200054f578063aaa13cc21462000579578063bab161bf146200059e578063d02103ca14620005d357600080fd5b806381b1c17414620004d35780638da5cb5b146200050d5780638f611519146200052d57600080fd5b80633ae05047116200017557806346385549116200014c57806346385549146200044c578063655595401462000471578063715018a614620004965780637b6323c114620004ae57600080fd5b80633ae05047146200032e5780633da8168214620003465780633e197043146200036b57600080fd5b80632072f6c511620001b65780632072f6c5146200025157806322e95f2c14620002695780632dfdf0b514620002a7578063318aee3d14620002bf57600080fd5b80630871e97114620001e05780630e1da6c314620001f957806315064c961462000224575b600080fd5b620001f7620001f136600462003146565b620006d0565b005b3480156200020657600080fd5b5062000211608d5481565b6040519081526020015b60405180910390f35b3480156200023157600080fd5b50602254620002409060ff1681565b60405190151581526020016200021b565b3480156200025e57600080fd5b50620001f762000c7a565b3480156200027657600080fd5b506200028e62000288366004620031d3565b62000d2e565b6040516001600160a01b0390911681526020016200021b565b348015620002b457600080fd5b506200021160215481565b348015620002cc57600080fd5b5062000309620002de3660046200320f565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200021b565b3480156200033b57600080fd5b506200021162000db1565b3480156200035357600080fd5b50620002406200036536600462003317565b62000ea4565b3480156200037857600080fd5b50620002116200038a36600462003395565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200045957600080fd5b50620001f76200046b366004620034a6565b62000fa6565b3480156200047e57600080fd5b50620001f7620004903660046200358d565b6200122c565b348015620004a357600080fd5b50620001f762001412565b348015620004bb57600080fd5b50620001f7620004cd366004620034a6565b62001428565b348015620004e057600080fd5b506200028e620004f2366004620035e3565b6089602052600090815260409020546001600160a01b031681565b3480156200051a57600080fd5b506055546001600160a01b03166200028e565b3480156200053a57600080fd5b50608c546200028e906001600160a01b031681565b3480156200055c57600080fd5b5062000566600081565b60405160ff90911681526020016200021b565b3480156200058657600080fd5b506200028e62000598366004620035fd565b620019ea565b348015620005ab57600080fd5b50608754620005bd9063ffffffff1681565b60405163ffffffff90911681526020016200021b565b348015620005e057600080fd5b50608b546200028e906001600160a01b031681565b620001f762000606366004620036b1565b62001b56565b3480156200061957600080fd5b50620001f762001e0a565b3480156200063157600080fd5b506200024062000643366004620035e3565b60886020526000908152604090205460ff1681565b3480156200066557600080fd5b50620001f762000677366004620035e3565b62001ebc565b3480156200068a57600080fd5b50620005bd600081565b348015620006a157600080fd5b50620001f7620006b33660046200320f565b62001f01565b348015620006c657600080fd5b5062000566600181565b60225460ff1615620007755760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60875463ffffffff90811690861603620007f85760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b60008060606001600160a01b0389166200088d57853414620008835760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200076c565b6000915062000b17565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000974576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af11580156200093b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000961919062003728565b5060208101518151909450925062000b15565b84156200098957620009898a88888862001f97565b620009a06001600160a01b038b1633308a620025bc565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620009f7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a219190810190620037c3565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000a60573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a8a9190810190620037c3565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ac9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aef9190620037fc565b60405160200162000b03939291906200384a565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162000b5998979695949392919062003887565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000c019062002675565b608b546001600160a01b03166333d6247d62000c1c62000db1565b6040518263ffffffff1660e01b815260040162000c3b91815260200190565b600060405180830381600087803b15801562000c5657600080fd5b505af115801562000c6b573d6000803e3d6000fd5b50505050505050505050505050565b608c546001600160a01b0316331462000d225760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c620027d9565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b602154600090819081805b602081101562000e9b578260011660010362000e1c576001816020811062000de85762000de8620038f3565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000e49565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000e5660028462003951565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000e92906200398d565b91505062000dbc565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000f97578160011660010362000f215786818151811062000edf5762000edf620038f3565b60200260200101518360405160200162000f03929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000f73565b8287828151811062000f375762000f37620038f3565b602002602001015160405160200162000f5a929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000f8060028362003951565b91508062000f8e816200398d565b91505062000eb4565b5050821490505b949350505050565b60225460ff1615620010475760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6200105d8a8a8a8a8a8a8a8a8a8a6001620028b2565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b038516908490620010a09089908b908790602401620039c8565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001105919062003a01565b60006040518083038185875af1925050503d806000811462001144576040519150601f19603f3d011682016040523d82523d6000602084013e62001149565b606091505b5050905080620011c15760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff16158080156200124d5750600054600160ff909116105b80620012695750303b15801562001269575060005460ff166001145b620012dd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200076c565b6000805460ff1916600117905580156200131e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d829055620013a762002c3f565b80156200140b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6200141c62002cc9565b62000d2c600062002d25565b60225460ff1615620014c95760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b620014df8a8a8a8a8a8a8a8a8a8a6000620028b2565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620015fe57604080516000808252602082019092526001600160a01b0385169084906040516200153a919062003a01565b60006040518083038185875af1925050503d806000811462001579576040519150601f19603f3d011682016040523d82523d6000602084013e6200157e565b606091505b5050905080620015f75760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c45440000000000000000000000000000000000000000000000000060648201526084016200076c565b5062001980565b60875463ffffffff908116908716036200162e57620016286001600160a01b038616848462002d8f565b62001980565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620018ec57600080600085806020019051810190620016ce919062003a1f565b925092509250600085848484604051620016e890620030af565b620016f6939291906200384a565b8190604051809103906000f590508015801562001717573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001785573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017ab919062003728565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620018da9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200197d565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001955573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200197b919062003728565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162001a6d90620030af565b601f1982820381018352601f90910116604081905262001a9a908d908d908d908d908d9060200162003acb565b60408051601f198184030181529082905262001aba929160200162003b0c565b6040516020818303038152906040528051906020012060405160200162001b3094939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff161562001bf75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b60875463ffffffff9081169084160362001c7a5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b9262001cc79260019263ffffffff9092169133918991899134918a919062003887565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d850152346051850152607180850192909252805180850390920182526091909301909252815191012062001d979062002675565b608b546001600160a01b03166333d6247d62001db262000db1565b6040518263ffffffff1660e01b815260040162001dd191815260200190565b600060405180830381600087803b15801562001dec57600080fd5b505af115801562001e01573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001eb25760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c62002dda565b62001ec662002cc9565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001f0b62002cc9565b6001600160a01b03811662001f895760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016200076c565b62001f948162002d25565b50565b600062001fda83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002e8992505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620022dc5760008080808080806200203d896004818d62003b3f565b8101906200204c919062003b6b565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620020e35760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0386163014620021635760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b8a8514620021da5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002288919062003a01565b6000604051808303816000865af19150503d8060008114620022c7576040519150601f19603f3d011682016040523d82523d6000602084013e620022cc565b606091505b505050505050505050506200140b565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c00000000000000000000000000000000000000000000000000000000146200236f5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200076c565b600080808080808080620023878a6004818e62003b3f565b81019062002396919062003bc6565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200242f5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0387163014620024af5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002566919062003a01565b6000604051808303816000865af19150503d8060008114620025a5576040519150601f19603f3d011682016040523d82523d6000602084013e620025aa565b606091505b50505050505050505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526200266f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002e90565b50505050565b806001620026866020600262003d8b565b62002692919062003d99565b602154106200270a5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200076c565b6001602160008282546200271f919062003db3565b909155505060215460005b6020811015620027c957816001166001036200275f578260018260208110620027575762002757620038f3565b015550505050565b60018160208110620027755762002775620038f3565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620027b2919062003951565b915080620027c0816200398d565b9150506200272a565b50620027d462003dce565b505050565b60225460ff16156200287a5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b63ffffffff8a1660009081526088602052604090205460ff16156200293f5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af1158015620029cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620029f2919062003dfd565b9050801580159062002a115750608d5462002a0e824262003d99565b10155b62002a855760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c49440000000000000000000000000000000000000060648201526084016200076c565b60875463ffffffff87811691161462002b075760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000000060648201526084016200076c565b60875460009063ffffffff1662002b2057508862002b23565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d82015260518101899052607180820193909352815180820390930183526091019052805191012062002bf1908e8e63ffffffff168462000ea4565b62000c6b5760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c494460448201526064016200076c565b600054610100900460ff1662002cbe5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200076c565b62000d2c3362002d25565b6055546001600160a01b0316331462000d2c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200076c565b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620027d49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016200260a565b60225460ff1662002e545760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016200076c565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002ee7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662002f7c9092919063ffffffff16565b805190915015620027d4578080602001905181019062002f08919062003728565b620027d45760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200076c565b606062000f9e848460008585600080866001600160a01b0316858760405162002fa6919062003a01565b60006040518083038185875af1925050503d806000811462002fe5576040519150601f19603f3d011682016040523d82523d6000602084013e62002fea565b606091505b509150915062002ffd8783838762003008565b979650505050505050565b606083156200307c57825160000362003074576001600160a01b0385163b620030745760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200076c565b508162000f9e565b62000f9e8383815115620030935781518083602001fd5b8060405162461bcd60e51b81526004016200076c919062003e17565b6119c78062003e2d83390190565b6001600160a01b038116811462001f9457600080fd5b8035620030e081620030bd565b919050565b803563ffffffff81168114620030e057600080fd5b60008083601f8401126200310d57600080fd5b50813567ffffffffffffffff8111156200312657600080fd5b6020830191508360208285010111156200313f57600080fd5b9250929050565b60008060008060008060a087890312156200316057600080fd5b86356200316d81620030bd565b95506200317d60208801620030e5565b945060408701356200318f81620030bd565b935060608701359250608087013567ffffffffffffffff811115620031b357600080fd5b620031c189828a01620030fa565b979a9699509497509295939492505050565b60008060408385031215620031e757600080fd5b620031f283620030e5565b915060208301356200320481620030bd565b809150509250929050565b6000602082840312156200322257600080fd5b81356200322f81620030bd565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171562003291576200329162003236565b604052919050565b600082601f830112620032ab57600080fd5b8135602067ffffffffffffffff821115620032ca57620032ca62003236565b8160051b620032db82820162003265565b9283528481018201928281019087851115620032f657600080fd5b83870192505b8483101562002ffd57823582529183019190830190620032fc565b600080600080608085870312156200332e57600080fd5b84359350602085013567ffffffffffffffff808211156200334e57600080fd5b6200335c8883890162003299565b94506040870135915080821682146200337457600080fd5b509396929550929360600135925050565b60ff8116811462001f9457600080fd5b600080600080600080600060e0888a031215620033b157600080fd5b8735620033be8162003385565b9650620033ce60208901620030e5565b95506040880135620033e081620030bd565b9450620033f060608901620030e5565b935060808801356200340281620030bd565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200343c576200343c62003236565b50601f01601f191660200190565b600082601f8301126200345c57600080fd5b8135620034736200346d826200341f565b62003265565b8181528460208386010111156200348957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620034c757600080fd5b8a3567ffffffffffffffff80821115620034e057600080fd5b620034ee8e838f0162003299565b9b50620034fe60208e01620030e5565b9a5060408d0135995060608d013598506200351c60808e01620030e5565b97506200352c60a08e01620030d3565b96506200353c60c08e01620030e5565b95506200354c60e08e01620030d3565b94506101008d013593506101208d01359150808211156200356c57600080fd5b506200357b8d828e016200344a565b9150509295989b9194979a5092959850565b60008060008060808587031215620035a457600080fd5b620035af85620030e5565b93506020850135620035c181620030bd565b92506040850135620035d381620030bd565b9396929550929360600135925050565b600060208284031215620035f657600080fd5b5035919050565b600080600080600080600060a0888a0312156200361957600080fd5b6200362488620030e5565b965060208801356200363681620030bd565b9550604088013567ffffffffffffffff808211156200365457600080fd5b620036628b838c01620030fa565b909750955060608a01359150808211156200367c57600080fd5b506200368b8a828b01620030fa565b9094509250506080880135620036a18162003385565b8091505092959891949750929550565b600080600060608486031215620036c757600080fd5b620036d284620030e5565b92506020840135620036e481620030bd565b9150604084013567ffffffffffffffff8111156200370157600080fd5b6200370f868287016200344a565b9150509250925092565b801515811462001f9457600080fd5b6000602082840312156200373b57600080fd5b81516200322f8162003719565b60005b83811015620037655781810151838201526020016200374b565b838111156200266f5750506000910152565b600082601f8301126200378957600080fd5b81516200379a6200346d826200341f565b818152846020838601011115620037b057600080fd5b62000f9e82602083016020870162003748565b600060208284031215620037d657600080fd5b815167ffffffffffffffff811115620037ee57600080fd5b62000f9e8482850162003777565b6000602082840312156200380f57600080fd5b81516200322f8162003385565b600081518084526200383681602086016020860162003748565b601f01601f19169290920160200192915050565b6060815260006200385f60608301866200381c565b82810360208401526200387381866200381c565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620038da828501876200381c565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003988577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620039c157620039c162003922565b5060010190565b6001600160a01b038416815263ffffffff83166020820152606060408201526000620039f860608301846200381c565b95945050505050565b6000825162003a1581846020870162003748565b9190910192915050565b60008060006060848603121562003a3557600080fd5b835167ffffffffffffffff8082111562003a4e57600080fd5b62003a5c8783880162003777565b9450602086015191508082111562003a7357600080fd5b5062003a828682870162003777565b925050604084015162003a958162003385565b809150509250925092565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003ae160608301878962003aa0565b828103602084015262003af681868862003aa0565b91505060ff831660408301529695505050505050565b6000835162003b2081846020880162003748565b83519083019062003b3681836020880162003748565b01949350505050565b6000808585111562003b5057600080fd5b8386111562003b5e57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003b8757600080fd5b873562003b9481620030bd565b9650602088013562003ba681620030bd565b955060408801359450606088013593506080880135620034028162003385565b600080600080600080600080610100898b03121562003be457600080fd5b883562003bf181620030bd565b9750602089013562003c0381620030bd565b96506040890135955060608901359450608089013562003c238162003719565b935060a089013562003c358162003385565b979a969950949793969295929450505060c08201359160e0013590565b600181815b8085111562003cb157817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003c955762003c9562003922565b8085161562003ca357918102915b93841c939080029062003c57565b509250929050565b60008262003cca5750600162000dab565b8162003cd95750600062000dab565b816001811462003cf2576002811462003cfd5762003d1d565b600191505062000dab565b60ff84111562003d115762003d1162003922565b50506001821b62000dab565b5060208310610133831016604e8410600b841016171562003d42575081810a62000dab565b62003d4e838362003c52565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d835762003d8362003922565b029392505050565b60006200322f838362003cb9565b60008282101562003dae5762003dae62003922565b500390565b6000821982111562003dc95762003dc962003922565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60006020828403121562003e1057600080fd5b5051919050565b6020815260006200322f60208301846200381c56fe60c06040523480156200001157600080fd5b50604051620019c7380380620019c78339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161150d620004ba600039600061053001526000818161036f01526104fa015261150d6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b604051610191919061123b565b60405180910390f35b6101ad6101a83660046112d7565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad610204366004611301565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad6102763660046112d7565b610552565b6101ad6102893660046112d7565b61059e565b6101c161029c36600461133d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d236600461133d565b60066020526000908152604090205481565b610184610645565b6101ad6102fa3660046112d7565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad6103523660046112d7565b6106ed565b6101ad6103653660046112d7565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f36600461135f565b6107b2565b005b6101c16103b43660046113d2565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043790611405565b80601f016020809104026020016040519081016040528092919081815260200182805461046390611405565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f12565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611487565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c8383610fda565b50600192915050565b60606004805461043790611405565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c83836110b3565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866108818361149f565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f3d610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff821661103d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b806002600082825461104f9190611487565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff821661113c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156111d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610c27565b600060208083528351808285015260005b818110156112685785810183015185820160400152820161124c565b8181111561127a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112d257600080fd5b919050565b600080604083850312156112ea57600080fd5b6112f3836112ae565b946020939093013593505050565b60008060006060848603121561131657600080fd5b61131f846112ae565b925061132d602085016112ae565b9150604084013590509250925092565b60006020828403121561134f57600080fd5b611358826112ae565b9392505050565b600080600080600080600060e0888a03121561137a57600080fd5b611383886112ae565b9650611391602089016112ae565b95506040880135945060608801359350608088013560ff811681146113b557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156113e557600080fd5b6113ee836112ae565b91506113fc602084016112ae565b90509250929050565b600181811c9082168061141957607f821691505b602082108103611452577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561149a5761149a611458565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036114d0576114d0611458565b506001019056fea264697066735822122094134962e5fa2f6357086a2590b7f3a754d340b16e5312664d82a308bc23a0df64736f6c634300080f0033a264697066735822122038131c24024bbc952c3d2f624475606fbf73b929bdaad1a58995cc43510513a064736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/BridgeMock.json b/compiled-contracts/BridgeMock.json index 27a807c3d..777068e20 100644 --- a/compiled-contracts/BridgeMock.json +++ b/compiled-contracts/BridgeMock.json @@ -815,8 +815,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50615b04806100206000396000f3fe608060405260043610620001ff5760003560e01c80637b6323c11162000117578063d02103ca11620000a1578063e7a5b4ea116200006c578063e7a5b4ea14620006de578063ed6be5c91462000703578063f2fde38b146200071a578063ff634ed7146200073f57600080fd5b8063d02103ca1462000659578063d96a15f7146200067b578063dbc169761462000692578063e737588114620006aa57600080fd5b806391e57e2d11620000e257806391e57e2d14620005bd578063a08e8a0814620005d5578063aaa13cc214620005ff578063bab161bf146200062457600080fd5b80637b6323c1146200051c57806381b1c17414620005415780638da5cb5b146200057b5780638f611519146200059b57600080fd5b80632dfdf0b511620001995780633e19704311620001645780633e19704314620003d95780634638554914620004ba5780636555954014620004df578063715018a6146200050457600080fd5b80632dfdf0b51462000315578063318aee3d146200032d5780633ae05047146200039c5780633da8168214620003b457600080fd5b80632072f6c511620001da5780632072f6c5146200027557806322e95f2c146200028d5780632b5e42e714620002cb5780632c3f58cd14620002f057600080fd5b80630871e97114620002045780630e1da6c3146200021d57806315064c961462000248575b600080fd5b6200021b6200021536600462003351565b62000756565b005b3480156200022a57600080fd5b5062000235608d5481565b6040519081526020015b60405180910390f35b3480156200025557600080fd5b50602254620002649060ff1681565b60405190151581526020016200023f565b3480156200028257600080fd5b506200021b62000812565b3480156200029a57600080fd5b50620002b2620002ac366004620033de565b620008c6565b6040516001600160a01b0390911681526020016200023f565b348015620002d857600080fd5b506200021b620002ea3660046200341a565b62000949565b348015620002fd57600080fd5b506200021b6200030f36600462003434565b62000958565b3480156200032257600080fd5b506200023560215481565b3480156200033a57600080fd5b50620003776200034c36600462003452565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200023f565b348015620003a957600080fd5b506200023562000999565b348015620003c157600080fd5b5062000264620003d336600462003553565b62000a8c565b348015620003e657600080fd5b5062000235620003f8366004620035d1565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004c757600080fd5b506200021b620004d9366004620036e2565b62000b8c565b348015620004ec57600080fd5b506200021b620004fe366004620037c9565b62000e12565b3480156200051157600080fd5b506200021b62001004565b3480156200052957600080fd5b506200021b6200053b366004620036e2565b6200101a565b3480156200054e57600080fd5b50620002b2620005603660046200341a565b6089602052600090815260409020546001600160a01b031681565b3480156200058857600080fd5b506055546001600160a01b0316620002b2565b348015620005a857600080fd5b50608c54620002b2906001600160a01b031681565b348015620005ca57600080fd5b5062000235608e5481565b348015620005e257600080fd5b50620005ec600081565b60405160ff90911681526020016200023f565b3480156200060c57600080fd5b50620002b26200061e3660046200381f565b620015dc565b3480156200063157600080fd5b50608754620006439063ffffffff1681565b60405163ffffffff90911681526020016200023f565b3480156200066657600080fd5b50608b54620002b2906001600160a01b031681565b6200021b6200068c366004620038d3565b62001748565b3480156200069f57600080fd5b506200021b620019fc565b348015620006b757600080fd5b5062000264620006c93660046200341a565b60886020526000908152604090205460ff1681565b348015620006eb57600080fd5b506200021b620006fd3660046200341a565b62001aae565b3480156200071057600080fd5b5062000643600081565b3480156200072757600080fd5b506200021b6200073936600462003452565b62001af3565b3480156200074c57600080fd5b50620005ec600181565b608e54341115620007fa5760405162461bcd60e51b815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6200080a86868686868662001b89565b505050505050565b608c546001600160a01b03163314620008ba5760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c46200212f565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b6200095362002208565b608e55565b6200096262002208565b608780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b602154600090819081805b602081101562000a83578260011660010362000a045760018160208110620009d057620009d06200393b565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000a31565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a3e60028462003999565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000a7a90620039d5565b915050620009a4565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000b7f578160011660010362000b095786818151811062000ac75762000ac76200393b565b60200260200101518360405160200162000aeb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000b5b565b8287828151811062000b1f5762000b1f6200393b565b602002602001015160405160200162000b42929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000b6860028362003999565b91508062000b7681620039d5565b91505062000a9c565b5050909114949350505050565b60225460ff161562000c2d5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b62000c438a8a8a8a8a8a8a8a8a8a600162002264565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b03851690849062000c869089908b90879060240162003a6d565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162000ceb919062003aa6565b60006040518083038185875af1925050503d806000811462000d2a576040519150601f19603f3d011682016040523d82523d6000602084013e62000d2f565b606091505b505090508062000da75760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff161580801562000e335750600054600160ff909116105b8062000e4f5750303b15801562000e4f575060005460ff166001145b62000ec35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007f1565b6000805460ff19166001179055801562000f0457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d8290556703782dace9d90000608e5562000f99620025f1565b801562000ffd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6200100e62002208565b620008c4600062002676565b60225460ff1615620010bb5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b620010d18a8a8a8a8a8a8a8a8a8a600062002264565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620011f057604080516000808252602082019092526001600160a01b0385169084906040516200112c919062003aa6565b60006040518083038185875af1925050503d80600081146200116b576040519150601f19603f3d011682016040523d82523d6000602084013e62001170565b606091505b5050905080620011e95760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c4544000000000000000000000000000000000000000000000000006064820152608401620007f1565b5062001572565b60875463ffffffff9081169087160362001220576200121a6001600160a01b0386168484620026e0565b62001572565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620014de57600080600085806020019051810190620012c0919062003b18565b925092509250600085848484604051620012da90620032ba565b620012e89392919062003b99565b8190604051809103906000f590508015801562001309573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001377573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200139d919062003be5565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620014cc9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200156f565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001547573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200156d919062003be5565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200165f90620032ba565b601f1982820381018352601f9091011660408190526200168c908d908d908d908d908d9060200162003c30565b60408051601f1981840301815290829052620016ac929160200162003c71565b604051602081830303815290604052805190602001206040516020016200172294939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620017e95760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff908116908416036200186c5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620018b99260019263ffffffff9092169133918991899134918a919062003ca4565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620019899062002790565b608b546001600160a01b03166333d6247d620019a462000999565b6040518263ffffffff1660e01b8152600401620019c391815260200190565b600060405180830381600087803b158015620019de57600080fd5b505af1158015620019f3573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001aa45760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c4620028ef565b62001ab862002208565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001afd62002208565b6001600160a01b03811662001b7b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007f1565b62001b868162002676565b50565b60225460ff161562001c2a5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff9081169086160362001cad5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b60008060606001600160a01b03891662001d425785341462001d385760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007f1565b6000915062001fcc565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001e29576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562001df0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e16919062003be5565b5060208101518151909450925062001fca565b841562001e3e5762001e3e8a8888886200299e565b62001e556001600160a01b038b1633308a62002fc3565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001eac573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001ed6919081019062003d10565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001f15573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001f3f919081019062003d10565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001f7e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001fa4919062003d49565b60405160200162001fb89392919062003b99565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200200e98979695949392919062003ca4565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620020b69062002790565b608b546001600160a01b03166333d6247d620020d162000999565b6040518263ffffffff1660e01b8152600401620020f091815260200190565b600060405180830381600087803b1580156200210b57600080fd5b505af115801562002120573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff1615620021d05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6055546001600160a01b03163314620008c45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007f1565b63ffffffff8a1660009081526088602052604090205460ff1615620022f15760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af11580156200237e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620023a4919062003d69565b90508015801590620023c35750608d54620023c0824262003d83565b10155b620024375760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c4944000000000000000000000000000000000000006064820152608401620007f1565b60875463ffffffff878116911614620024b95760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000006064820152608401620007f1565b60875460009063ffffffff16620024d2575088620024d5565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d820152605181018990526071808201939093528151808203909301835260910190528051910120620025a3908e8e63ffffffff168462000a8c565b620021205760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c49446044820152606401620007f1565b600054610100900460ff16620026705760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007f1565b620008c4335b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b0383166024820152604481018290526200278b9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526200301c565b505050565b806001620027a16020600262003ed6565b620027ad919062003d83565b60215410620028255760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007f1565b6001602160008282546200283a919062003ee4565b909155505060215460005b6020811015620028e457816001166001036200287a5782600182602081106200287257620028726200393b565b015550505050565b600181602081106200289057620028906200393b565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620028cd919062003999565b915080620028db81620039d5565b91505062002845565b506200278b62003eff565b60225460ff16620029695760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620007f1565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000620029e183838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200310892505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002ce357600080808080808062002a44896004818d62003f2e565b81019062002a53919062003f5a565b9650965096509650965096509650336001600160a01b0316876001600160a01b03161462002aea5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038616301462002b6a5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b8a851462002be15760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002c8f919062003aa6565b6000604051808303816000865af19150503d806000811462002cce576040519150601f19603f3d011682016040523d82523d6000602084013e62002cd3565b606091505b5050505050505050505062000ffd565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002d765760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007f1565b60008080808080808062002d8e8a6004818e62003f2e565b81019062002d9d919062003fb5565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462002e365760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038716301462002eb65760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002f6d919062003aa6565b6000604051808303816000865af19150503d806000811462002fac576040519150601f19603f3d011682016040523d82523d6000602084013e62002fb1565b606091505b50505050505050505050505050505050565b6040516001600160a01b0380851660248301528316604482015260648101829052620030169085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002726565b50505050565b600062003073826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166200310f9092919063ffffffff16565b8051909150156200278b578080602001905181019062003094919062003be5565b6200278b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007f1565b6020015190565b60606200312084846000856200312a565b90505b9392505050565b606082471015620031a45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401620007f1565b6001600160a01b0385163b620031fd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007f1565b600080866001600160a01b031685876040516200321b919062003aa6565b60006040518083038185875af1925050503d80600081146200325a576040519150601f19603f3d011682016040523d82523d6000602084013e6200325f565b606091505b5091509150620032718282866200327c565b979650505050505050565b606083156200328d57508162003123565b8251156200329e5782518084602001fd5b8160405162461bcd60e51b8152600401620007f1919062004041565b611a78806200405783390190565b6001600160a01b038116811462001b8657600080fd5b8035620032eb81620032c8565b919050565b803563ffffffff81168114620032eb57600080fd5b60008083601f8401126200331857600080fd5b50813567ffffffffffffffff8111156200333157600080fd5b6020830191508360208285010111156200334a57600080fd5b9250929050565b60008060008060008060a087890312156200336b57600080fd5b86356200337881620032c8565b95506200338860208801620032f0565b945060408701356200339a81620032c8565b935060608701359250608087013567ffffffffffffffff811115620033be57600080fd5b620033cc89828a0162003305565b979a9699509497509295939492505050565b60008060408385031215620033f257600080fd5b620033fd83620032f0565b915060208301356200340f81620032c8565b809150509250929050565b6000602082840312156200342d57600080fd5b5035919050565b6000602082840312156200344757600080fd5b6200312382620032f0565b6000602082840312156200346557600080fd5b81356200312381620032c8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620034cd57620034cd62003472565b604052919050565b600082601f830112620034e757600080fd5b8135602067ffffffffffffffff82111562003506576200350662003472565b8160051b62003517828201620034a1565b92835284810182019282810190878511156200353257600080fd5b83870192505b84831015620032715782358252918301919083019062003538565b600080600080608085870312156200356a57600080fd5b84359350602085013567ffffffffffffffff808211156200358a57600080fd5b6200359888838901620034d5565b9450604087013591508082168214620035b057600080fd5b509396929550929360600135925050565b60ff8116811462001b8657600080fd5b600080600080600080600060e0888a031215620035ed57600080fd5b8735620035fa81620035c1565b96506200360a60208901620032f0565b955060408801356200361c81620032c8565b94506200362c60608901620032f0565b935060808801356200363e81620032c8565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562003678576200367862003472565b50601f01601f191660200190565b600082601f8301126200369857600080fd5b8135620036af620036a9826200365b565b620034a1565b818152846020838601011115620036c557600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200370357600080fd5b8a3567ffffffffffffffff808211156200371c57600080fd5b6200372a8e838f01620034d5565b9b506200373a60208e01620032f0565b9a5060408d0135995060608d013598506200375860808e01620032f0565b97506200376860a08e01620032de565b96506200377860c08e01620032f0565b95506200378860e08e01620032de565b94506101008d013593506101208d0135915080821115620037a857600080fd5b50620037b78d828e0162003686565b9150509295989b9194979a5092959850565b60008060008060808587031215620037e057600080fd5b620037eb85620032f0565b93506020850135620037fd81620032c8565b925060408501356200380f81620032c8565b9396929550929360600135925050565b600080600080600080600060a0888a0312156200383b57600080fd5b6200384688620032f0565b965060208801356200385881620032c8565b9550604088013567ffffffffffffffff808211156200387657600080fd5b620038848b838c0162003305565b909750955060608a01359150808211156200389e57600080fd5b50620038ad8a828b0162003305565b9094509250506080880135620038c381620035c1565b8091505092959891949750929550565b600080600060608486031215620038e957600080fd5b620038f484620032f0565b925060208401356200390681620032c8565b9150604084013567ffffffffffffffff8111156200392357600080fd5b620039318682870162003686565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082620039d0577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003a095762003a096200396a565b5060010190565b60005b8381101562003a2d57818101518382015260200162003a13565b83811115620030165750506000910152565b6000815180845262003a5981602086016020860162003a10565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003a9d606083018462003a3f565b95945050505050565b6000825162003aba81846020870162003a10565b9190910192915050565b600082601f83011262003ad657600080fd5b815162003ae7620036a9826200365b565b81815284602083860101111562003afd57600080fd5b62003b1082602083016020870162003a10565b949350505050565b60008060006060848603121562003b2e57600080fd5b835167ffffffffffffffff8082111562003b4757600080fd5b62003b558783880162003ac4565b9450602086015191508082111562003b6c57600080fd5b5062003b7b8682870162003ac4565b925050604084015162003b8e81620035c1565b809150509250925092565b60608152600062003bae606083018662003a3f565b828103602084015262003bc2818662003a3f565b91505060ff83166040830152949350505050565b801515811462001b8657600080fd5b60006020828403121562003bf857600080fd5b8151620031238162003bd6565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003c4660608301878962003c05565b828103602084015262003c5b81868862003c05565b91505060ff831660408301529695505050505050565b6000835162003c8581846020880162003a10565b83519083019062003c9b81836020880162003a10565b01949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003cf78285018762003a3f565b925080851660e085015250509998505050505050505050565b60006020828403121562003d2357600080fd5b815167ffffffffffffffff81111562003d3b57600080fd5b62003b108482850162003ac4565b60006020828403121562003d5c57600080fd5b81516200312381620035c1565b60006020828403121562003d7c57600080fd5b5051919050565b60008282101562003d985762003d986200396a565b500390565b600181815b8085111562003dfc57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003de05762003de06200396a565b8085161562003dee57918102915b93841c939080029062003da2565b509250929050565b60008262003e155750600162000943565b8162003e245750600062000943565b816001811462003e3d576002811462003e485762003e68565b600191505062000943565b60ff84111562003e5c5762003e5c6200396a565b50506001821b62000943565b5060208310610133831016604e8410600b841016171562003e8d575081810a62000943565b62003e99838362003d9d565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003ece5762003ece6200396a565b029392505050565b600062003123838362003e04565b6000821982111562003efa5762003efa6200396a565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000808585111562003f3f57600080fd5b8386111562003f4d57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003f7657600080fd5b873562003f8381620032c8565b9650602088013562003f9581620032c8565b9550604088013594506060880135935060808801356200363e81620035c1565b600080600080600080600080610100898b03121562003fd357600080fd5b883562003fe081620032c8565b9750602089013562003ff281620032c8565b965060408901359550606089013594506080890135620040128162003bd6565b935060a08901356200402481620035c1565b979a969950949793969295929450505060c08201359160e0013590565b60208152600062003123602083018462003a3f56fe60c06040523480156200001157600080fd5b5060405162001a7838038062001a788339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516115be620004ba600039600061053001526000818161036f01526104fa01526115be6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b60405161019191906112d5565b60405180910390f35b6101ad6101a8366004611371565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad61020436600461139b565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad610276366004611371565b610552565b6101ad610289366004611371565b61059e565b6101c161029c3660046113d7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d23660046113d7565b60066020526000908152604090205481565b610184610645565b6101ad6102fa366004611371565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad610352366004611371565b6106ed565b6101ad610365366004611371565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f3660046113f9565b6107b2565b005b6101c16103b436600461146c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6060600380546104379061149f565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061149f565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f56565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611521565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c838361101e565b50600192915050565b6060600480546104379061149f565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c8383611124565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661088183611539565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ee3908490611521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4991815260200190565b60405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f81610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166110815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b80600260008282546110939190611521565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906110cd908490611521565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156112495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611285908490611571565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c27565b600060208083528351808285015260005b81811015611302578581018301518582016040015282016112e6565b81811115611314576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136c57600080fd5b919050565b6000806040838503121561138457600080fd5b61138d83611348565b946020939093013593505050565b6000806000606084860312156113b057600080fd5b6113b984611348565b92506113c760208501611348565b9150604084013590509250925092565b6000602082840312156113e957600080fd5b6113f282611348565b9392505050565b600080600080600080600060e0888a03121561141457600080fd5b61141d88611348565b965061142b60208901611348565b95506040880135945060608801359350608088013560ff8116811461144f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561147f57600080fd5b61148883611348565b915061149660208401611348565b90509250929050565b600181811c908216806114b357607f821691505b6020821081036114ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611534576115346114f2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156a5761156a6114f2565b5060010190565b600082821015611583576115836114f2565b50039056fea2646970667358221220dc9c54325b6ec8c11c8bc6a1630cfb64202b6d54611cd1004e705ceca7826a4f64736f6c634300080f0033a26469706673582212200919f5a3762d01f3cfafc4ef3510eb9345e2cfabcf15ccf729268403fdb9d61064736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001ff5760003560e01c80637b6323c11162000117578063d02103ca11620000a1578063e7a5b4ea116200006c578063e7a5b4ea14620006de578063ed6be5c91462000703578063f2fde38b146200071a578063ff634ed7146200073f57600080fd5b8063d02103ca1462000659578063d96a15f7146200067b578063dbc169761462000692578063e737588114620006aa57600080fd5b806391e57e2d11620000e257806391e57e2d14620005bd578063a08e8a0814620005d5578063aaa13cc214620005ff578063bab161bf146200062457600080fd5b80637b6323c1146200051c57806381b1c17414620005415780638da5cb5b146200057b5780638f611519146200059b57600080fd5b80632dfdf0b511620001995780633e19704311620001645780633e19704314620003d95780634638554914620004ba5780636555954014620004df578063715018a6146200050457600080fd5b80632dfdf0b51462000315578063318aee3d146200032d5780633ae05047146200039c5780633da8168214620003b457600080fd5b80632072f6c511620001da5780632072f6c5146200027557806322e95f2c146200028d5780632b5e42e714620002cb5780632c3f58cd14620002f057600080fd5b80630871e97114620002045780630e1da6c3146200021d57806315064c961462000248575b600080fd5b6200021b6200021536600462003351565b62000756565b005b3480156200022a57600080fd5b5062000235608d5481565b6040519081526020015b60405180910390f35b3480156200025557600080fd5b50602254620002649060ff1681565b60405190151581526020016200023f565b3480156200028257600080fd5b506200021b62000812565b3480156200029a57600080fd5b50620002b2620002ac366004620033de565b620008c6565b6040516001600160a01b0390911681526020016200023f565b348015620002d857600080fd5b506200021b620002ea3660046200341a565b62000949565b348015620002fd57600080fd5b506200021b6200030f36600462003434565b62000958565b3480156200032257600080fd5b506200023560215481565b3480156200033a57600080fd5b50620003776200034c36600462003452565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200023f565b348015620003a957600080fd5b506200023562000999565b348015620003c157600080fd5b5062000264620003d336600462003553565b62000a8c565b348015620003e657600080fd5b5062000235620003f8366004620035d1565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004c757600080fd5b506200021b620004d9366004620036e2565b62000b8c565b348015620004ec57600080fd5b506200021b620004fe366004620037c9565b62000e12565b3480156200051157600080fd5b506200021b62001004565b3480156200052957600080fd5b506200021b6200053b366004620036e2565b6200101a565b3480156200054e57600080fd5b50620002b2620005603660046200341a565b6089602052600090815260409020546001600160a01b031681565b3480156200058857600080fd5b506055546001600160a01b0316620002b2565b348015620005a857600080fd5b50608c54620002b2906001600160a01b031681565b348015620005ca57600080fd5b5062000235608e5481565b348015620005e257600080fd5b50620005ec600081565b60405160ff90911681526020016200023f565b3480156200060c57600080fd5b50620002b26200061e3660046200381f565b620015dc565b3480156200063157600080fd5b50608754620006439063ffffffff1681565b60405163ffffffff90911681526020016200023f565b3480156200066657600080fd5b50608b54620002b2906001600160a01b031681565b6200021b6200068c366004620038d3565b62001748565b3480156200069f57600080fd5b506200021b620019fc565b348015620006b757600080fd5b5062000264620006c93660046200341a565b60886020526000908152604090205460ff1681565b348015620006eb57600080fd5b506200021b620006fd3660046200341a565b62001aae565b3480156200071057600080fd5b5062000643600081565b3480156200072757600080fd5b506200021b6200073936600462003452565b62001af3565b3480156200074c57600080fd5b50620005ec600181565b608e54341115620007fa5760405162461bcd60e51b815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6200080a86868686868662001b89565b505050505050565b608c546001600160a01b03163314620008ba5760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c46200212f565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b6200095362002208565b608e55565b6200096262002208565b608780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b602154600090819081805b602081101562000a83578260011660010362000a045760018160208110620009d057620009d06200393b565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000a31565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a3e60028462003999565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000a7a90620039d5565b915050620009a4565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000b7f578160011660010362000b095786818151811062000ac75762000ac76200393b565b60200260200101518360405160200162000aeb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000b5b565b8287828151811062000b1f5762000b1f6200393b565b602002602001015160405160200162000b42929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000b6860028362003999565b91508062000b7681620039d5565b91505062000a9c565b5050909114949350505050565b60225460ff161562000c2d5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b62000c438a8a8a8a8a8a8a8a8a8a600162002264565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b03851690849062000c869089908b90879060240162003a6d565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162000ceb919062003aa6565b60006040518083038185875af1925050503d806000811462000d2a576040519150601f19603f3d011682016040523d82523d6000602084013e62000d2f565b606091505b505090508062000da75760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff161580801562000e335750600054600160ff909116105b8062000e4f5750303b15801562000e4f575060005460ff166001145b62000ec35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007f1565b6000805460ff19166001179055801562000f0457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d8290556703782dace9d90000608e5562000f99620025f1565b801562000ffd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6200100e62002208565b620008c4600062002676565b60225460ff1615620010bb5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b620010d18a8a8a8a8a8a8a8a8a8a600062002264565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620011f057604080516000808252602082019092526001600160a01b0385169084906040516200112c919062003aa6565b60006040518083038185875af1925050503d80600081146200116b576040519150601f19603f3d011682016040523d82523d6000602084013e62001170565b606091505b5050905080620011e95760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c4544000000000000000000000000000000000000000000000000006064820152608401620007f1565b5062001572565b60875463ffffffff9081169087160362001220576200121a6001600160a01b0386168484620026e0565b62001572565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620014de57600080600085806020019051810190620012c0919062003b18565b925092509250600085848484604051620012da90620032ba565b620012e89392919062003b99565b8190604051809103906000f590508015801562001309573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001377573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200139d919062003be5565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620014cc9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200156f565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001547573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200156d919062003be5565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200165f90620032ba565b601f1982820381018352601f9091011660408190526200168c908d908d908d908d908d9060200162003c30565b60408051601f1981840301815290829052620016ac929160200162003c71565b604051602081830303815290604052805190602001206040516020016200172294939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620017e95760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff908116908416036200186c5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620018b99260019263ffffffff9092169133918991899134918a919062003ca4565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620019899062002790565b608b546001600160a01b03166333d6247d620019a462000999565b6040518263ffffffff1660e01b8152600401620019c391815260200190565b600060405180830381600087803b158015620019de57600080fd5b505af1158015620019f3573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001aa45760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c4620028ef565b62001ab862002208565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001afd62002208565b6001600160a01b03811662001b7b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007f1565b62001b868162002676565b50565b60225460ff161562001c2a5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff9081169086160362001cad5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b60008060606001600160a01b03891662001d425785341462001d385760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007f1565b6000915062001fcc565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001e29576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562001df0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e16919062003be5565b5060208101518151909450925062001fca565b841562001e3e5762001e3e8a8888886200299e565b62001e556001600160a01b038b1633308a62002fc3565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001eac573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001ed6919081019062003d10565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001f15573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001f3f919081019062003d10565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001f7e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001fa4919062003d49565b60405160200162001fb89392919062003b99565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200200e98979695949392919062003ca4565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620020b69062002790565b608b546001600160a01b03166333d6247d620020d162000999565b6040518263ffffffff1660e01b8152600401620020f091815260200190565b600060405180830381600087803b1580156200210b57600080fd5b505af115801562002120573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff1615620021d05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6055546001600160a01b03163314620008c45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007f1565b63ffffffff8a1660009081526088602052604090205460ff1615620022f15760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af11580156200237e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620023a4919062003d69565b90508015801590620023c35750608d54620023c0824262003d83565b10155b620024375760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c4944000000000000000000000000000000000000006064820152608401620007f1565b60875463ffffffff878116911614620024b95760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000006064820152608401620007f1565b60875460009063ffffffff16620024d2575088620024d5565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d820152605181018990526071808201939093528151808203909301835260910190528051910120620025a3908e8e63ffffffff168462000a8c565b620021205760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c49446044820152606401620007f1565b600054610100900460ff16620026705760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007f1565b620008c4335b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b0383166024820152604481018290526200278b9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526200301c565b505050565b806001620027a16020600262003ed6565b620027ad919062003d83565b60215410620028255760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007f1565b6001602160008282546200283a919062003ee4565b909155505060215460005b6020811015620028e457816001166001036200287a5782600182602081106200287257620028726200393b565b015550505050565b600181602081106200289057620028906200393b565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620028cd919062003999565b915080620028db81620039d5565b91505062002845565b506200278b62003eff565b60225460ff16620029695760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620007f1565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000620029e183838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200310892505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002ce357600080808080808062002a44896004818d62003f2e565b81019062002a53919062003f5a565b9650965096509650965096509650336001600160a01b0316876001600160a01b03161462002aea5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038616301462002b6a5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b8a851462002be15760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002c8f919062003aa6565b6000604051808303816000865af19150503d806000811462002cce576040519150601f19603f3d011682016040523d82523d6000602084013e62002cd3565b606091505b5050505050505050505062000ffd565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002d765760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007f1565b60008080808080808062002d8e8a6004818e62003f2e565b81019062002d9d919062003fb5565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462002e365760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038716301462002eb65760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002f6d919062003aa6565b6000604051808303816000865af19150503d806000811462002fac576040519150601f19603f3d011682016040523d82523d6000602084013e62002fb1565b606091505b50505050505050505050505050505050565b6040516001600160a01b0380851660248301528316604482015260648101829052620030169085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002726565b50505050565b600062003073826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166200310f9092919063ffffffff16565b8051909150156200278b578080602001905181019062003094919062003be5565b6200278b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007f1565b6020015190565b60606200312084846000856200312a565b90505b9392505050565b606082471015620031a45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401620007f1565b6001600160a01b0385163b620031fd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007f1565b600080866001600160a01b031685876040516200321b919062003aa6565b60006040518083038185875af1925050503d80600081146200325a576040519150601f19603f3d011682016040523d82523d6000602084013e6200325f565b606091505b5091509150620032718282866200327c565b979650505050505050565b606083156200328d57508162003123565b8251156200329e5782518084602001fd5b8160405162461bcd60e51b8152600401620007f1919062004041565b611a78806200405783390190565b6001600160a01b038116811462001b8657600080fd5b8035620032eb81620032c8565b919050565b803563ffffffff81168114620032eb57600080fd5b60008083601f8401126200331857600080fd5b50813567ffffffffffffffff8111156200333157600080fd5b6020830191508360208285010111156200334a57600080fd5b9250929050565b60008060008060008060a087890312156200336b57600080fd5b86356200337881620032c8565b95506200338860208801620032f0565b945060408701356200339a81620032c8565b935060608701359250608087013567ffffffffffffffff811115620033be57600080fd5b620033cc89828a0162003305565b979a9699509497509295939492505050565b60008060408385031215620033f257600080fd5b620033fd83620032f0565b915060208301356200340f81620032c8565b809150509250929050565b6000602082840312156200342d57600080fd5b5035919050565b6000602082840312156200344757600080fd5b6200312382620032f0565b6000602082840312156200346557600080fd5b81356200312381620032c8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620034cd57620034cd62003472565b604052919050565b600082601f830112620034e757600080fd5b8135602067ffffffffffffffff82111562003506576200350662003472565b8160051b62003517828201620034a1565b92835284810182019282810190878511156200353257600080fd5b83870192505b84831015620032715782358252918301919083019062003538565b600080600080608085870312156200356a57600080fd5b84359350602085013567ffffffffffffffff808211156200358a57600080fd5b6200359888838901620034d5565b9450604087013591508082168214620035b057600080fd5b509396929550929360600135925050565b60ff8116811462001b8657600080fd5b600080600080600080600060e0888a031215620035ed57600080fd5b8735620035fa81620035c1565b96506200360a60208901620032f0565b955060408801356200361c81620032c8565b94506200362c60608901620032f0565b935060808801356200363e81620032c8565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562003678576200367862003472565b50601f01601f191660200190565b600082601f8301126200369857600080fd5b8135620036af620036a9826200365b565b620034a1565b818152846020838601011115620036c557600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200370357600080fd5b8a3567ffffffffffffffff808211156200371c57600080fd5b6200372a8e838f01620034d5565b9b506200373a60208e01620032f0565b9a5060408d0135995060608d013598506200375860808e01620032f0565b97506200376860a08e01620032de565b96506200377860c08e01620032f0565b95506200378860e08e01620032de565b94506101008d013593506101208d0135915080821115620037a857600080fd5b50620037b78d828e0162003686565b9150509295989b9194979a5092959850565b60008060008060808587031215620037e057600080fd5b620037eb85620032f0565b93506020850135620037fd81620032c8565b925060408501356200380f81620032c8565b9396929550929360600135925050565b600080600080600080600060a0888a0312156200383b57600080fd5b6200384688620032f0565b965060208801356200385881620032c8565b9550604088013567ffffffffffffffff808211156200387657600080fd5b620038848b838c0162003305565b909750955060608a01359150808211156200389e57600080fd5b50620038ad8a828b0162003305565b9094509250506080880135620038c381620035c1565b8091505092959891949750929550565b600080600060608486031215620038e957600080fd5b620038f484620032f0565b925060208401356200390681620032c8565b9150604084013567ffffffffffffffff8111156200392357600080fd5b620039318682870162003686565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082620039d0577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003a095762003a096200396a565b5060010190565b60005b8381101562003a2d57818101518382015260200162003a13565b83811115620030165750506000910152565b6000815180845262003a5981602086016020860162003a10565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003a9d606083018462003a3f565b95945050505050565b6000825162003aba81846020870162003a10565b9190910192915050565b600082601f83011262003ad657600080fd5b815162003ae7620036a9826200365b565b81815284602083860101111562003afd57600080fd5b62003b1082602083016020870162003a10565b949350505050565b60008060006060848603121562003b2e57600080fd5b835167ffffffffffffffff8082111562003b4757600080fd5b62003b558783880162003ac4565b9450602086015191508082111562003b6c57600080fd5b5062003b7b8682870162003ac4565b925050604084015162003b8e81620035c1565b809150509250925092565b60608152600062003bae606083018662003a3f565b828103602084015262003bc2818662003a3f565b91505060ff83166040830152949350505050565b801515811462001b8657600080fd5b60006020828403121562003bf857600080fd5b8151620031238162003bd6565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003c4660608301878962003c05565b828103602084015262003c5b81868862003c05565b91505060ff831660408301529695505050505050565b6000835162003c8581846020880162003a10565b83519083019062003c9b81836020880162003a10565b01949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003cf78285018762003a3f565b925080851660e085015250509998505050505050505050565b60006020828403121562003d2357600080fd5b815167ffffffffffffffff81111562003d3b57600080fd5b62003b108482850162003ac4565b60006020828403121562003d5c57600080fd5b81516200312381620035c1565b60006020828403121562003d7c57600080fd5b5051919050565b60008282101562003d985762003d986200396a565b500390565b600181815b8085111562003dfc57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003de05762003de06200396a565b8085161562003dee57918102915b93841c939080029062003da2565b509250929050565b60008262003e155750600162000943565b8162003e245750600062000943565b816001811462003e3d576002811462003e485762003e68565b600191505062000943565b60ff84111562003e5c5762003e5c6200396a565b50506001821b62000943565b5060208310610133831016604e8410600b841016171562003e8d575081810a62000943565b62003e99838362003d9d565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003ece5762003ece6200396a565b029392505050565b600062003123838362003e04565b6000821982111562003efa5762003efa6200396a565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000808585111562003f3f57600080fd5b8386111562003f4d57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003f7657600080fd5b873562003f8381620032c8565b9650602088013562003f9581620032c8565b9550604088013594506060880135935060808801356200363e81620035c1565b600080600080600080600080610100898b03121562003fd357600080fd5b883562003fe081620032c8565b9750602089013562003ff281620032c8565b965060408901359550606089013594506080890135620040128162003bd6565b935060a08901356200402481620035c1565b979a969950949793969295929450505060c08201359160e0013590565b60208152600062003123602083018462003a3f56fe60c06040523480156200001157600080fd5b5060405162001a7838038062001a788339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516115be620004ba600039600061053001526000818161036f01526104fa01526115be6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b60405161019191906112d5565b60405180910390f35b6101ad6101a8366004611371565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad61020436600461139b565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad610276366004611371565b610552565b6101ad610289366004611371565b61059e565b6101c161029c3660046113d7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d23660046113d7565b60066020526000908152604090205481565b610184610645565b6101ad6102fa366004611371565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad610352366004611371565b6106ed565b6101ad610365366004611371565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f3660046113f9565b6107b2565b005b6101c16103b436600461146c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6060600380546104379061149f565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061149f565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f56565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611521565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c838361101e565b50600192915050565b6060600480546104379061149f565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c8383611124565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661088183611539565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ee3908490611521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4991815260200190565b60405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f81610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166110815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b80600260008282546110939190611521565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906110cd908490611521565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156112495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611285908490611571565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c27565b600060208083528351808285015260005b81811015611302578581018301518582016040015282016112e6565b81811115611314576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136c57600080fd5b919050565b6000806040838503121561138457600080fd5b61138d83611348565b946020939093013593505050565b6000806000606084860312156113b057600080fd5b6113b984611348565b92506113c760208501611348565b9150604084013590509250925092565b6000602082840312156113e957600080fd5b6113f282611348565b9392505050565b600080600080600080600060e0888a03121561141457600080fd5b61141d88611348565b965061142b60208901611348565b95506040880135945060608801359350608088013560ff8116811461144f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561147f57600080fd5b61148883611348565b915061149660208401611348565b90509250929050565b600181811c908216806114b357607f821691505b6020821081036114ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611534576115346114f2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156a5761156a6114f2565b5060010190565b600082821015611583576115836114f2565b50039056fea2646970667358221220dc9c54325b6ec8c11c8bc6a1630cfb64202b6d54611cd1004e705ceca7826a4f64736f6c634300080f0033a26469706673582212200919f5a3762d01f3cfafc4ef3510eb9345e2cfabcf15ccf729268403fdb9d61064736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506159dc806100206000396000f3fe608060405260043610620001ff5760003560e01c80637b6323c11162000117578063d02103ca11620000a1578063e7a5b4ea116200006c578063e7a5b4ea14620006de578063ed6be5c91462000703578063f2fde38b146200071a578063ff634ed7146200073f57600080fd5b8063d02103ca1462000659578063d96a15f7146200067b578063dbc169761462000692578063e737588114620006aa57600080fd5b806391e57e2d11620000e257806391e57e2d14620005bd578063a08e8a0814620005d5578063aaa13cc214620005ff578063bab161bf146200062457600080fd5b80637b6323c1146200051c57806381b1c17414620005415780638da5cb5b146200057b5780638f611519146200059b57600080fd5b80632dfdf0b511620001995780633e19704311620001645780633e19704314620003d95780634638554914620004ba5780636555954014620004df578063715018a6146200050457600080fd5b80632dfdf0b51462000315578063318aee3d146200032d5780633ae05047146200039c5780633da8168214620003b457600080fd5b80632072f6c511620001da5780632072f6c5146200027557806322e95f2c146200028d5780632b5e42e714620002cb5780632c3f58cd14620002f057600080fd5b80630871e97114620002045780630e1da6c3146200021d57806315064c961462000248575b600080fd5b6200021b62000215366004620032db565b62000756565b005b3480156200022a57600080fd5b5062000235608d5481565b6040519081526020015b60405180910390f35b3480156200025557600080fd5b50602254620002649060ff1681565b60405190151581526020016200023f565b3480156200028257600080fd5b506200021b62000812565b3480156200029a57600080fd5b50620002b2620002ac36600462003368565b620008c6565b6040516001600160a01b0390911681526020016200023f565b348015620002d857600080fd5b506200021b620002ea366004620033a4565b62000949565b348015620002fd57600080fd5b506200021b6200030f366004620033be565b62000958565b3480156200032257600080fd5b506200023560215481565b3480156200033a57600080fd5b50620003776200034c366004620033e3565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200023f565b348015620003a957600080fd5b506200023562000999565b348015620003c157600080fd5b5062000264620003d3366004620034e4565b62000a8c565b348015620003e657600080fd5b5062000235620003f836600462003562565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004c757600080fd5b506200021b620004d936600462003673565b62000b8e565b348015620004ec57600080fd5b506200021b620004fe3660046200375a565b62000e14565b3480156200051157600080fd5b506200021b62001006565b3480156200052957600080fd5b506200021b6200053b36600462003673565b6200101c565b3480156200054e57600080fd5b50620002b262000560366004620033a4565b6089602052600090815260409020546001600160a01b031681565b3480156200058857600080fd5b506055546001600160a01b0316620002b2565b348015620005a857600080fd5b50608c54620002b2906001600160a01b031681565b348015620005ca57600080fd5b5062000235608e5481565b348015620005e257600080fd5b50620005ec600081565b60405160ff90911681526020016200023f565b3480156200060c57600080fd5b50620002b26200061e366004620037b0565b620015de565b3480156200063157600080fd5b50608754620006439063ffffffff1681565b60405163ffffffff90911681526020016200023f565b3480156200066657600080fd5b50608b54620002b2906001600160a01b031681565b6200021b6200068c36600462003864565b6200174a565b3480156200069f57600080fd5b506200021b620019fe565b348015620006b757600080fd5b5062000264620006c9366004620033a4565b60886020526000908152604090205460ff1681565b348015620006eb57600080fd5b506200021b620006fd366004620033a4565b62001ab0565b3480156200071057600080fd5b5062000643600081565b3480156200072757600080fd5b506200021b62000739366004620033e3565b62001af5565b3480156200074c57600080fd5b50620005ec600181565b608e54341115620007fa5760405162461bcd60e51b815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6200080a86868686868662001b8b565b505050505050565b608c546001600160a01b03163314620008ba5760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c462002131565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b620009536200220a565b608e55565b620009626200220a565b608780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b602154600090819081805b602081101562000a83578260011660010362000a045760018160208110620009d057620009d0620038cc565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000a31565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a3e6002846200392a565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000a7a9062003966565b915050620009a4565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000b7f578160011660010362000b095786818151811062000ac75762000ac7620038cc565b60200260200101518360405160200162000aeb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000b5b565b8287828151811062000b1f5762000b1f620038cc565b602002602001015160405160200162000b42929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000b686002836200392a565b91508062000b768162003966565b91505062000a9c565b5050821490505b949350505050565b60225460ff161562000c2f5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b62000c458a8a8a8a8a8a8a8a8a8a600162002266565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b03851690849062000c889089908b908790602401620039fe565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162000ced919062003a37565b60006040518083038185875af1925050503d806000811462000d2c576040519150601f19603f3d011682016040523d82523d6000602084013e62000d31565b606091505b505090508062000da95760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff161580801562000e355750600054600160ff909116105b8062000e515750303b15801562000e51575060005460ff166001145b62000ec55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007f1565b6000805460ff19166001179055801562000f0657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d8290556703782dace9d90000608e5562000f9b620025f3565b801562000fff57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b620010106200220a565b620008c4600062002678565b60225460ff1615620010bd5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b620010d38a8a8a8a8a8a8a8a8a8a600062002266565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620011f257604080516000808252602082019092526001600160a01b0385169084906040516200112e919062003a37565b60006040518083038185875af1925050503d80600081146200116d576040519150601f19603f3d011682016040523d82523d6000602084013e62001172565b606091505b5050905080620011eb5760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c4544000000000000000000000000000000000000000000000000006064820152608401620007f1565b5062001574565b60875463ffffffff9081169087160362001222576200121c6001600160a01b0386168484620026e2565b62001574565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620014e057600080600085806020019051810190620012c2919062003aa1565b925092509250600085848484604051620012dc9062003244565b620012ea9392919062003b22565b8190604051809103906000f59050801580156200130b573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001379573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200139f919062003b6e565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620014ce9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001571565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001549573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200156f919062003b6e565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620016619062003244565b601f1982820381018352601f9091011660408190526200168e908d908d908d908d908d9060200162003bb9565b60408051601f1981840301815290829052620016ae929160200162003bfa565b604051602081830303815290604052805190602001206040516020016200172494939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620017eb5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff908116908416036200186e5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620018bb9260019263ffffffff9092169133918991899134918a919062003c2d565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200198b9062002792565b608b546001600160a01b03166333d6247d620019a662000999565b6040518263ffffffff1660e01b8152600401620019c591815260200190565b600060405180830381600087803b158015620019e057600080fd5b505af1158015620019f5573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001aa65760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c4620028f1565b62001aba6200220a565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001aff6200220a565b6001600160a01b03811662001b7d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007f1565b62001b888162002678565b50565b60225460ff161562001c2c5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff9081169086160362001caf5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b60008060606001600160a01b03891662001d445785341462001d3a5760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007f1565b6000915062001fce565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001e2b576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562001df2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e18919062003b6e565b5060208101518151909450925062001fcc565b841562001e405762001e408a888888620029a0565b62001e576001600160a01b038b1633308a62002fc5565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001eae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001ed8919081019062003c99565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001f17573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001f41919081019062003c99565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001f80573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001fa6919062003cd2565b60405160200162001fba9392919062003b22565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200201098979695949392919062003c2d565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620020b89062002792565b608b546001600160a01b03166333d6247d620020d362000999565b6040518263ffffffff1660e01b8152600401620020f291815260200190565b600060405180830381600087803b1580156200210d57600080fd5b505af115801562002122573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff1615620021d25760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6055546001600160a01b03163314620008c45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007f1565b63ffffffff8a1660009081526088602052604090205460ff1615620022f35760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562002380573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620023a6919062003cf2565b90508015801590620023c55750608d54620023c2824262003d0c565b10155b620024395760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c4944000000000000000000000000000000000000006064820152608401620007f1565b60875463ffffffff878116911614620024bb5760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000006064820152608401620007f1565b60875460009063ffffffff16620024d4575088620024d7565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d820152605181018990526071808201939093528151808203909301835260910190528051910120620025a5908e8e63ffffffff168462000a8c565b620021225760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c49446044820152606401620007f1565b600054610100900460ff16620026725760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007f1565b620008c4335b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b0383166024820152604481018290526200278d9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526200301e565b505050565b806001620027a36020600262003e5f565b620027af919062003d0c565b60215410620028275760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007f1565b6001602160008282546200283c919062003e6d565b909155505060215460005b6020811015620028e657816001166001036200287c578260018260208110620028745762002874620038cc565b015550505050565b60018160208110620028925762002892620038cc565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620028cf91906200392a565b915080620028dd8162003966565b91505062002847565b506200278d62003e88565b60225460ff166200296b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620007f1565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000620029e383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200310a92505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002ce557600080808080808062002a46896004818d62003eb7565b81019062002a55919062003ee3565b9650965096509650965096509650336001600160a01b0316876001600160a01b03161462002aec5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038616301462002b6c5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b8a851462002be35760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002c91919062003a37565b6000604051808303816000865af19150503d806000811462002cd0576040519150601f19603f3d011682016040523d82523d6000602084013e62002cd5565b606091505b5050505050505050505062000fff565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002d785760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007f1565b60008080808080808062002d908a6004818e62003eb7565b81019062002d9f919062003f3e565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462002e385760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038716301462002eb85760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002f6f919062003a37565b6000604051808303816000865af19150503d806000811462002fae576040519150601f19603f3d011682016040523d82523d6000602084013e62002fb3565b606091505b50505050505050505050505050505050565b6040516001600160a01b0380851660248301528316604482015260648101829052620030189085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002728565b50505050565b600062003075826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620031119092919063ffffffff16565b8051909150156200278d578080602001905181019062003096919062003b6e565b6200278d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007f1565b6020015190565b606062000b86848460008585600080866001600160a01b031685876040516200313b919062003a37565b60006040518083038185875af1925050503d80600081146200317a576040519150601f19603f3d011682016040523d82523d6000602084013e6200317f565b606091505b509150915062003192878383876200319d565b979650505050505050565b606083156200321157825160000362003209576001600160a01b0385163b620032095760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007f1565b508162000b86565b62000b868383815115620032285781518083602001fd5b8060405162461bcd60e51b8152600401620007f1919062003fca565b6119c78062003fe083390190565b6001600160a01b038116811462001b8857600080fd5b8035620032758162003252565b919050565b803563ffffffff811681146200327557600080fd5b60008083601f840112620032a257600080fd5b50813567ffffffffffffffff811115620032bb57600080fd5b602083019150836020828501011115620032d457600080fd5b9250929050565b60008060008060008060a08789031215620032f557600080fd5b8635620033028162003252565b955062003312602088016200327a565b94506040870135620033248162003252565b935060608701359250608087013567ffffffffffffffff8111156200334857600080fd5b6200335689828a016200328f565b979a9699509497509295939492505050565b600080604083850312156200337c57600080fd5b62003387836200327a565b91506020830135620033998162003252565b809150509250929050565b600060208284031215620033b757600080fd5b5035919050565b600060208284031215620033d157600080fd5b620033dc826200327a565b9392505050565b600060208284031215620033f657600080fd5b8135620033dc8162003252565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200345e576200345e62003403565b604052919050565b600082601f8301126200347857600080fd5b8135602067ffffffffffffffff82111562003497576200349762003403565b8160051b620034a882820162003432565b9283528481018201928281019087851115620034c357600080fd5b83870192505b848310156200319257823582529183019190830190620034c9565b60008060008060808587031215620034fb57600080fd5b84359350602085013567ffffffffffffffff808211156200351b57600080fd5b620035298883890162003466565b94506040870135915080821682146200354157600080fd5b509396929550929360600135925050565b60ff8116811462001b8857600080fd5b600080600080600080600060e0888a0312156200357e57600080fd5b87356200358b8162003552565b96506200359b602089016200327a565b95506040880135620035ad8162003252565b9450620035bd606089016200327a565b93506080880135620035cf8162003252565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562003609576200360962003403565b50601f01601f191660200190565b600082601f8301126200362957600080fd5b8135620036406200363a82620035ec565b62003432565b8181528460208386010111156200365657600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200369457600080fd5b8a3567ffffffffffffffff80821115620036ad57600080fd5b620036bb8e838f0162003466565b9b50620036cb60208e016200327a565b9a5060408d0135995060608d01359850620036e960808e016200327a565b9750620036f960a08e0162003268565b96506200370960c08e016200327a565b95506200371960e08e0162003268565b94506101008d013593506101208d01359150808211156200373957600080fd5b50620037488d828e0162003617565b9150509295989b9194979a5092959850565b600080600080608085870312156200377157600080fd5b6200377c856200327a565b935060208501356200378e8162003252565b92506040850135620037a08162003252565b9396929550929360600135925050565b600080600080600080600060a0888a031215620037cc57600080fd5b620037d7886200327a565b96506020880135620037e98162003252565b9550604088013567ffffffffffffffff808211156200380757600080fd5b620038158b838c016200328f565b909750955060608a01359150808211156200382f57600080fd5b506200383e8a828b016200328f565b9094509250506080880135620038548162003552565b8091505092959891949750929550565b6000806000606084860312156200387a57600080fd5b62003885846200327a565b92506020840135620038978162003252565b9150604084013567ffffffffffffffff811115620038b457600080fd5b620038c28682870162003617565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003961577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200399a576200399a620038fb565b5060010190565b60005b83811015620039be578181015183820152602001620039a4565b83811115620030185750506000910152565b60008151808452620039ea816020860160208601620039a1565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003a2e6060830184620039d0565b95945050505050565b6000825162003a4b818460208701620039a1565b9190910192915050565b600082601f83011262003a6757600080fd5b815162003a786200363a82620035ec565b81815284602083860101111562003a8e57600080fd5b62000b86826020830160208701620039a1565b60008060006060848603121562003ab757600080fd5b835167ffffffffffffffff8082111562003ad057600080fd5b62003ade8783880162003a55565b9450602086015191508082111562003af557600080fd5b5062003b048682870162003a55565b925050604084015162003b178162003552565b809150509250925092565b60608152600062003b376060830186620039d0565b828103602084015262003b4b8186620039d0565b91505060ff83166040830152949350505050565b801515811462001b8857600080fd5b60006020828403121562003b8157600080fd5b8151620033dc8162003b5f565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003bcf60608301878962003b8e565b828103602084015262003be481868862003b8e565b91505060ff831660408301529695505050505050565b6000835162003c0e818460208801620039a1565b83519083019062003c24818360208801620039a1565b01949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003c8082850187620039d0565b925080851660e085015250509998505050505050505050565b60006020828403121562003cac57600080fd5b815167ffffffffffffffff81111562003cc457600080fd5b62000b868482850162003a55565b60006020828403121562003ce557600080fd5b8151620033dc8162003552565b60006020828403121562003d0557600080fd5b5051919050565b60008282101562003d215762003d21620038fb565b500390565b600181815b8085111562003d8557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d695762003d69620038fb565b8085161562003d7757918102915b93841c939080029062003d2b565b509250929050565b60008262003d9e5750600162000943565b8162003dad5750600062000943565b816001811462003dc6576002811462003dd15762003df1565b600191505062000943565b60ff84111562003de55762003de5620038fb565b50506001821b62000943565b5060208310610133831016604e8410600b841016171562003e16575081810a62000943565b62003e22838362003d26565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003e575762003e57620038fb565b029392505050565b6000620033dc838362003d8d565b6000821982111562003e835762003e83620038fb565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000808585111562003ec857600080fd5b8386111562003ed657600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003eff57600080fd5b873562003f0c8162003252565b9650602088013562003f1e8162003252565b955060408801359450606088013593506080880135620035cf8162003552565b600080600080600080600080610100898b03121562003f5c57600080fd5b883562003f698162003252565b9750602089013562003f7b8162003252565b96506040890135955060608901359450608089013562003f9b8162003b5f565b935060a089013562003fad8162003552565b979a969950949793969295929450505060c08201359160e0013590565b602081526000620033dc6020830184620039d056fe60c06040523480156200001157600080fd5b50604051620019c7380380620019c78339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161150d620004ba600039600061053001526000818161036f01526104fa015261150d6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b604051610191919061123b565b60405180910390f35b6101ad6101a83660046112d7565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad610204366004611301565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad6102763660046112d7565b610552565b6101ad6102893660046112d7565b61059e565b6101c161029c36600461133d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d236600461133d565b60066020526000908152604090205481565b610184610645565b6101ad6102fa3660046112d7565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad6103523660046112d7565b6106ed565b6101ad6103653660046112d7565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f36600461135f565b6107b2565b005b6101c16103b43660046113d2565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043790611405565b80601f016020809104026020016040519081016040528092919081815260200182805461046390611405565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f12565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611487565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c8383610fda565b50600192915050565b60606004805461043790611405565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c83836110b3565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866108818361149f565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f3d610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff821661103d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b806002600082825461104f9190611487565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff821661113c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156111d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610c27565b600060208083528351808285015260005b818110156112685785810183015185820160400152820161124c565b8181111561127a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112d257600080fd5b919050565b600080604083850312156112ea57600080fd5b6112f3836112ae565b946020939093013593505050565b60008060006060848603121561131657600080fd5b61131f846112ae565b925061132d602085016112ae565b9150604084013590509250925092565b60006020828403121561134f57600080fd5b611358826112ae565b9392505050565b600080600080600080600060e0888a03121561137a57600080fd5b611383886112ae565b9650611391602089016112ae565b95506040880135945060608801359350608088013560ff811681146113b557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156113e557600080fd5b6113ee836112ae565b91506113fc602084016112ae565b90509250929050565b600181811c9082168061141957607f821691505b602082108103611452577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561149a5761149a611458565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036114d0576114d0611458565b506001019056fea264697066735822122094134962e5fa2f6357086a2590b7f3a754d340b16e5312664d82a308bc23a0df64736f6c634300080f0033a2646970667358221220fa289e5d6107b7c3d0d8121dac9d073a816dd5186ba86cef1d20063f64fac49864736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001ff5760003560e01c80637b6323c11162000117578063d02103ca11620000a1578063e7a5b4ea116200006c578063e7a5b4ea14620006de578063ed6be5c91462000703578063f2fde38b146200071a578063ff634ed7146200073f57600080fd5b8063d02103ca1462000659578063d96a15f7146200067b578063dbc169761462000692578063e737588114620006aa57600080fd5b806391e57e2d11620000e257806391e57e2d14620005bd578063a08e8a0814620005d5578063aaa13cc214620005ff578063bab161bf146200062457600080fd5b80637b6323c1146200051c57806381b1c17414620005415780638da5cb5b146200057b5780638f611519146200059b57600080fd5b80632dfdf0b511620001995780633e19704311620001645780633e19704314620003d95780634638554914620004ba5780636555954014620004df578063715018a6146200050457600080fd5b80632dfdf0b51462000315578063318aee3d146200032d5780633ae05047146200039c5780633da8168214620003b457600080fd5b80632072f6c511620001da5780632072f6c5146200027557806322e95f2c146200028d5780632b5e42e714620002cb5780632c3f58cd14620002f057600080fd5b80630871e97114620002045780630e1da6c3146200021d57806315064c961462000248575b600080fd5b6200021b62000215366004620032db565b62000756565b005b3480156200022a57600080fd5b5062000235608d5481565b6040519081526020015b60405180910390f35b3480156200025557600080fd5b50602254620002649060ff1681565b60405190151581526020016200023f565b3480156200028257600080fd5b506200021b62000812565b3480156200029a57600080fd5b50620002b2620002ac36600462003368565b620008c6565b6040516001600160a01b0390911681526020016200023f565b348015620002d857600080fd5b506200021b620002ea366004620033a4565b62000949565b348015620002fd57600080fd5b506200021b6200030f366004620033be565b62000958565b3480156200032257600080fd5b506200023560215481565b3480156200033a57600080fd5b50620003776200034c366004620033e3565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200023f565b348015620003a957600080fd5b506200023562000999565b348015620003c157600080fd5b5062000264620003d3366004620034e4565b62000a8c565b348015620003e657600080fd5b5062000235620003f836600462003562565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004c757600080fd5b506200021b620004d936600462003673565b62000b8e565b348015620004ec57600080fd5b506200021b620004fe3660046200375a565b62000e14565b3480156200051157600080fd5b506200021b62001006565b3480156200052957600080fd5b506200021b6200053b36600462003673565b6200101c565b3480156200054e57600080fd5b50620002b262000560366004620033a4565b6089602052600090815260409020546001600160a01b031681565b3480156200058857600080fd5b506055546001600160a01b0316620002b2565b348015620005a857600080fd5b50608c54620002b2906001600160a01b031681565b348015620005ca57600080fd5b5062000235608e5481565b348015620005e257600080fd5b50620005ec600081565b60405160ff90911681526020016200023f565b3480156200060c57600080fd5b50620002b26200061e366004620037b0565b620015de565b3480156200063157600080fd5b50608754620006439063ffffffff1681565b60405163ffffffff90911681526020016200023f565b3480156200066657600080fd5b50608b54620002b2906001600160a01b031681565b6200021b6200068c36600462003864565b6200174a565b3480156200069f57600080fd5b506200021b620019fe565b348015620006b757600080fd5b5062000264620006c9366004620033a4565b60886020526000908152604090205460ff1681565b348015620006eb57600080fd5b506200021b620006fd366004620033a4565b62001ab0565b3480156200071057600080fd5b5062000643600081565b3480156200072757600080fd5b506200021b62000739366004620033e3565b62001af5565b3480156200074c57600080fd5b50620005ec600181565b608e54341115620007fa5760405162461bcd60e51b815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6200080a86868686868662001b8b565b505050505050565b608c546001600160a01b03163314620008ba5760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c462002131565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b620009536200220a565b608e55565b620009626200220a565b608780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b602154600090819081805b602081101562000a83578260011660010362000a045760018160208110620009d057620009d0620038cc565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000a31565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a3e6002846200392a565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000a7a9062003966565b915050620009a4565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000b7f578160011660010362000b095786818151811062000ac75762000ac7620038cc565b60200260200101518360405160200162000aeb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000b5b565b8287828151811062000b1f5762000b1f620038cc565b602002602001015160405160200162000b42929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000b686002836200392a565b91508062000b768162003966565b91505062000a9c565b5050821490505b949350505050565b60225460ff161562000c2f5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b62000c458a8a8a8a8a8a8a8a8a8a600162002266565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b03851690849062000c889089908b908790602401620039fe565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162000ced919062003a37565b60006040518083038185875af1925050503d806000811462000d2c576040519150601f19603f3d011682016040523d82523d6000602084013e62000d31565b606091505b505090508062000da95760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff161580801562000e355750600054600160ff909116105b8062000e515750303b15801562000e51575060005460ff166001145b62000ec55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007f1565b6000805460ff19166001179055801562000f0657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d8290556703782dace9d90000608e5562000f9b620025f3565b801562000fff57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b620010106200220a565b620008c4600062002678565b60225460ff1615620010bd5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b620010d38a8a8a8a8a8a8a8a8a8a600062002266565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620011f257604080516000808252602082019092526001600160a01b0385169084906040516200112e919062003a37565b60006040518083038185875af1925050503d80600081146200116d576040519150601f19603f3d011682016040523d82523d6000602084013e62001172565b606091505b5050905080620011eb5760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c4544000000000000000000000000000000000000000000000000006064820152608401620007f1565b5062001574565b60875463ffffffff9081169087160362001222576200121c6001600160a01b0386168484620026e2565b62001574565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620014e057600080600085806020019051810190620012c2919062003aa1565b925092509250600085848484604051620012dc9062003244565b620012ea9392919062003b22565b8190604051809103906000f59050801580156200130b573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001379573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200139f919062003b6e565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620014ce9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001571565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001549573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200156f919062003b6e565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620016619062003244565b601f1982820381018352601f9091011660408190526200168e908d908d908d908d908d9060200162003bb9565b60408051601f1981840301815290829052620016ae929160200162003bfa565b604051602081830303815290604052805190602001206040516020016200172494939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620017eb5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff908116908416036200186e5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620018bb9260019263ffffffff9092169133918991899134918a919062003c2d565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200198b9062002792565b608b546001600160a01b03166333d6247d620019a662000999565b6040518263ffffffff1660e01b8152600401620019c591815260200190565b600060405180830381600087803b158015620019e057600080fd5b505af1158015620019f5573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001aa65760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c4620028f1565b62001aba6200220a565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001aff6200220a565b6001600160a01b03811662001b7d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007f1565b62001b888162002678565b50565b60225460ff161562001c2c5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff9081169086160362001caf5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b60008060606001600160a01b03891662001d445785341462001d3a5760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007f1565b6000915062001fce565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001e2b576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562001df2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e18919062003b6e565b5060208101518151909450925062001fcc565b841562001e405762001e408a888888620029a0565b62001e576001600160a01b038b1633308a62002fc5565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001eae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001ed8919081019062003c99565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001f17573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001f41919081019062003c99565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001f80573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001fa6919062003cd2565b60405160200162001fba9392919062003b22565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200201098979695949392919062003c2d565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620020b89062002792565b608b546001600160a01b03166333d6247d620020d362000999565b6040518263ffffffff1660e01b8152600401620020f291815260200190565b600060405180830381600087803b1580156200210d57600080fd5b505af115801562002122573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff1615620021d25760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6055546001600160a01b03163314620008c45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007f1565b63ffffffff8a1660009081526088602052604090205460ff1615620022f35760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562002380573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620023a6919062003cf2565b90508015801590620023c55750608d54620023c2824262003d0c565b10155b620024395760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c4944000000000000000000000000000000000000006064820152608401620007f1565b60875463ffffffff878116911614620024bb5760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000006064820152608401620007f1565b60875460009063ffffffff16620024d4575088620024d7565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d820152605181018990526071808201939093528151808203909301835260910190528051910120620025a5908e8e63ffffffff168462000a8c565b620021225760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c49446044820152606401620007f1565b600054610100900460ff16620026725760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007f1565b620008c4335b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b0383166024820152604481018290526200278d9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526200301e565b505050565b806001620027a36020600262003e5f565b620027af919062003d0c565b60215410620028275760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007f1565b6001602160008282546200283c919062003e6d565b909155505060215460005b6020811015620028e657816001166001036200287c578260018260208110620028745762002874620038cc565b015550505050565b60018160208110620028925762002892620038cc565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620028cf91906200392a565b915080620028dd8162003966565b91505062002847565b506200278d62003e88565b60225460ff166200296b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620007f1565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000620029e383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200310a92505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002ce557600080808080808062002a46896004818d62003eb7565b81019062002a55919062003ee3565b9650965096509650965096509650336001600160a01b0316876001600160a01b03161462002aec5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038616301462002b6c5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b8a851462002be35760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002c91919062003a37565b6000604051808303816000865af19150503d806000811462002cd0576040519150601f19603f3d011682016040523d82523d6000602084013e62002cd5565b606091505b5050505050505050505062000fff565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002d785760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007f1565b60008080808080808062002d908a6004818e62003eb7565b81019062002d9f919062003f3e565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462002e385760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038716301462002eb85760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002f6f919062003a37565b6000604051808303816000865af19150503d806000811462002fae576040519150601f19603f3d011682016040523d82523d6000602084013e62002fb3565b606091505b50505050505050505050505050505050565b6040516001600160a01b0380851660248301528316604482015260648101829052620030189085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002728565b50505050565b600062003075826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620031119092919063ffffffff16565b8051909150156200278d578080602001905181019062003096919062003b6e565b6200278d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007f1565b6020015190565b606062000b86848460008585600080866001600160a01b031685876040516200313b919062003a37565b60006040518083038185875af1925050503d80600081146200317a576040519150601f19603f3d011682016040523d82523d6000602084013e6200317f565b606091505b509150915062003192878383876200319d565b979650505050505050565b606083156200321157825160000362003209576001600160a01b0385163b620032095760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007f1565b508162000b86565b62000b868383815115620032285781518083602001fd5b8060405162461bcd60e51b8152600401620007f1919062003fca565b6119c78062003fe083390190565b6001600160a01b038116811462001b8857600080fd5b8035620032758162003252565b919050565b803563ffffffff811681146200327557600080fd5b60008083601f840112620032a257600080fd5b50813567ffffffffffffffff811115620032bb57600080fd5b602083019150836020828501011115620032d457600080fd5b9250929050565b60008060008060008060a08789031215620032f557600080fd5b8635620033028162003252565b955062003312602088016200327a565b94506040870135620033248162003252565b935060608701359250608087013567ffffffffffffffff8111156200334857600080fd5b6200335689828a016200328f565b979a9699509497509295939492505050565b600080604083850312156200337c57600080fd5b62003387836200327a565b91506020830135620033998162003252565b809150509250929050565b600060208284031215620033b757600080fd5b5035919050565b600060208284031215620033d157600080fd5b620033dc826200327a565b9392505050565b600060208284031215620033f657600080fd5b8135620033dc8162003252565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200345e576200345e62003403565b604052919050565b600082601f8301126200347857600080fd5b8135602067ffffffffffffffff82111562003497576200349762003403565b8160051b620034a882820162003432565b9283528481018201928281019087851115620034c357600080fd5b83870192505b848310156200319257823582529183019190830190620034c9565b60008060008060808587031215620034fb57600080fd5b84359350602085013567ffffffffffffffff808211156200351b57600080fd5b620035298883890162003466565b94506040870135915080821682146200354157600080fd5b509396929550929360600135925050565b60ff8116811462001b8857600080fd5b600080600080600080600060e0888a0312156200357e57600080fd5b87356200358b8162003552565b96506200359b602089016200327a565b95506040880135620035ad8162003252565b9450620035bd606089016200327a565b93506080880135620035cf8162003252565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562003609576200360962003403565b50601f01601f191660200190565b600082601f8301126200362957600080fd5b8135620036406200363a82620035ec565b62003432565b8181528460208386010111156200365657600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200369457600080fd5b8a3567ffffffffffffffff80821115620036ad57600080fd5b620036bb8e838f0162003466565b9b50620036cb60208e016200327a565b9a5060408d0135995060608d01359850620036e960808e016200327a565b9750620036f960a08e0162003268565b96506200370960c08e016200327a565b95506200371960e08e0162003268565b94506101008d013593506101208d01359150808211156200373957600080fd5b50620037488d828e0162003617565b9150509295989b9194979a5092959850565b600080600080608085870312156200377157600080fd5b6200377c856200327a565b935060208501356200378e8162003252565b92506040850135620037a08162003252565b9396929550929360600135925050565b600080600080600080600060a0888a031215620037cc57600080fd5b620037d7886200327a565b96506020880135620037e98162003252565b9550604088013567ffffffffffffffff808211156200380757600080fd5b620038158b838c016200328f565b909750955060608a01359150808211156200382f57600080fd5b506200383e8a828b016200328f565b9094509250506080880135620038548162003552565b8091505092959891949750929550565b6000806000606084860312156200387a57600080fd5b62003885846200327a565b92506020840135620038978162003252565b9150604084013567ffffffffffffffff811115620038b457600080fd5b620038c28682870162003617565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003961577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200399a576200399a620038fb565b5060010190565b60005b83811015620039be578181015183820152602001620039a4565b83811115620030185750506000910152565b60008151808452620039ea816020860160208601620039a1565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003a2e6060830184620039d0565b95945050505050565b6000825162003a4b818460208701620039a1565b9190910192915050565b600082601f83011262003a6757600080fd5b815162003a786200363a82620035ec565b81815284602083860101111562003a8e57600080fd5b62000b86826020830160208701620039a1565b60008060006060848603121562003ab757600080fd5b835167ffffffffffffffff8082111562003ad057600080fd5b62003ade8783880162003a55565b9450602086015191508082111562003af557600080fd5b5062003b048682870162003a55565b925050604084015162003b178162003552565b809150509250925092565b60608152600062003b376060830186620039d0565b828103602084015262003b4b8186620039d0565b91505060ff83166040830152949350505050565b801515811462001b8857600080fd5b60006020828403121562003b8157600080fd5b8151620033dc8162003b5f565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003bcf60608301878962003b8e565b828103602084015262003be481868862003b8e565b91505060ff831660408301529695505050505050565b6000835162003c0e818460208801620039a1565b83519083019062003c24818360208801620039a1565b01949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003c8082850187620039d0565b925080851660e085015250509998505050505050505050565b60006020828403121562003cac57600080fd5b815167ffffffffffffffff81111562003cc457600080fd5b62000b868482850162003a55565b60006020828403121562003ce557600080fd5b8151620033dc8162003552565b60006020828403121562003d0557600080fd5b5051919050565b60008282101562003d215762003d21620038fb565b500390565b600181815b8085111562003d8557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d695762003d69620038fb565b8085161562003d7757918102915b93841c939080029062003d2b565b509250929050565b60008262003d9e5750600162000943565b8162003dad5750600062000943565b816001811462003dc6576002811462003dd15762003df1565b600191505062000943565b60ff84111562003de55762003de5620038fb565b50506001821b62000943565b5060208310610133831016604e8410600b841016171562003e16575081810a62000943565b62003e22838362003d26565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003e575762003e57620038fb565b029392505050565b6000620033dc838362003d8d565b6000821982111562003e835762003e83620038fb565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000808585111562003ec857600080fd5b8386111562003ed657600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003eff57600080fd5b873562003f0c8162003252565b9650602088013562003f1e8162003252565b955060408801359450606088013593506080880135620035cf8162003552565b600080600080600080600080610100898b03121562003f5c57600080fd5b883562003f698162003252565b9750602089013562003f7b8162003252565b96506040890135955060608901359450608089013562003f9b8162003b5f565b935060a089013562003fad8162003552565b979a969950949793969295929450505060c08201359160e0013590565b602081526000620033dc6020830184620039d056fe60c06040523480156200001157600080fd5b50604051620019c7380380620019c78339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161150d620004ba600039600061053001526000818161036f01526104fa015261150d6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b604051610191919061123b565b60405180910390f35b6101ad6101a83660046112d7565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad610204366004611301565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad6102763660046112d7565b610552565b6101ad6102893660046112d7565b61059e565b6101c161029c36600461133d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d236600461133d565b60066020526000908152604090205481565b610184610645565b6101ad6102fa3660046112d7565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad6103523660046112d7565b6106ed565b6101ad6103653660046112d7565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f36600461135f565b6107b2565b005b6101c16103b43660046113d2565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043790611405565b80601f016020809104026020016040519081016040528092919081815260200182805461046390611405565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f12565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611487565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c8383610fda565b50600192915050565b60606004805461043790611405565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c83836110b3565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866108818361149f565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f3d610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff821661103d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b806002600082825461104f9190611487565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff821661113c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156111d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610c27565b600060208083528351808285015260005b818110156112685785810183015185820160400152820161124c565b8181111561127a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112d257600080fd5b919050565b600080604083850312156112ea57600080fd5b6112f3836112ae565b946020939093013593505050565b60008060006060848603121561131657600080fd5b61131f846112ae565b925061132d602085016112ae565b9150604084013590509250925092565b60006020828403121561134f57600080fd5b611358826112ae565b9392505050565b600080600080600080600060e0888a03121561137a57600080fd5b611383886112ae565b9650611391602089016112ae565b95506040880135945060608801359350608088013560ff811681146113b557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156113e557600080fd5b6113ee836112ae565b91506113fc602084016112ae565b90509250929050565b600181811c9082168061141957607f821691505b602082108103611452577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561149a5761149a611458565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036114d0576114d0611458565b506001019056fea264697066735822122094134962e5fa2f6357086a2590b7f3a754d340b16e5312664d82a308bc23a0df64736f6c634300080f0033a2646970667358221220fa289e5d6107b7c3d0d8121dac9d073a816dd5186ba86cef1d20063f64fac49864736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/ERC20PermitMock.json b/compiled-contracts/ERC20PermitMock.json index 9514a4230..7c0d2b30b 100644 --- a/compiled-contracts/ERC20PermitMock.json +++ b/compiled-contracts/ERC20PermitMock.json @@ -517,8 +517,8 @@ "type": "function" } ], - "bytecode": "0x6080604052604051620018923803806200189283398101604081905262000026916200022b565b838360036200003683826200034c565b5060046200004582826200034c565b5050506200005a82826200007160201b60201c565b50508151602090920191909120600655506200043f565b6001600160a01b038216620000cc5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620000e0919062000418565b90915550506001600160a01b038216600090815260208190526040812080548392906200010f90849062000418565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200018657600080fd5b81516001600160401b0380821115620001a357620001a36200015e565b604051601f8301601f19908116603f01168101908282118183101715620001ce57620001ce6200015e565b81604052838152602092508683858801011115620001eb57600080fd5b600091505b838210156200020f5785820183015181830184015290820190620001f0565b83821115620002215760008385830101525b9695505050505050565b600080600080608085870312156200024257600080fd5b84516001600160401b03808211156200025a57600080fd5b620002688883890162000174565b955060208701519150808211156200027f57600080fd5b506200028e8782880162000174565b604087015190945090506001600160a01b0381168114620002ae57600080fd5b6060959095015193969295505050565b600181811c90821680620002d357607f821691505b602082108103620002f457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200015957600081815260208120601f850160051c81016020861015620003235750805b601f850160051c820191505b8181101562000344578281556001016200032f565b505050505050565b81516001600160401b038111156200036857620003686200015e565b6200038081620003798454620002be565b84620002fa565b602080601f831160018114620003b857600084156200039f5750858301515b600019600386901b1c1916600185901b17855562000344565b600085815260208120601f198616915b82811015620003e957888601518255948401946001909101908401620003c8565b5085821015620004085787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156200043a57634e487b7160e01b600052601160045260246000fd5b500190565b611443806200044f6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806340c10f19116100e35780639e4e73181161008c578063c473af3311610066578063c473af33146103d6578063d505accf146103fd578063dd62ed3e1461041057600080fd5b80639e4e731814610389578063a457c2d7146103b0578063a9059cbb146103c357600080fd5b806370a08231116100bd57806370a082311461032b5780637ecebe001461036157806395d89b411461038157600080fd5b806340c10f19146102f257806342966c681461030557806356189cb41461031857600080fd5b806323b872dd116101455780633408e4701161011f5780633408e4701461024c5780633644e5151461025257806339509351146102df57600080fd5b806323b872dd1461020357806330adf81f14610216578063313ce5671461023d57600080fd5b8063095ea7b311610176578063095ea7b3146101c357806318160ddd146101e6578063222f5be0146101ee57600080fd5b806304622c2e1461019257806306fdde03146101ae575b600080fd5b61019b60065481565b6040519081526020015b60405180910390f35b6101b6610456565b6040516101a59190611141565b6101d66101d13660046111dd565b6104e8565b60405190151581526020016101a5565b60025461019b565b6102016101fc366004611207565b610500565b005b6101d6610211366004611207565b610510565b61019b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b604051601281526020016101a5565b4661019b565b61019b6006546000907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f907fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc646604080516020810195909552840192909252606083015260808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6101d66102ed3660046111dd565b610534565b6102016103003660046111dd565b610580565b610201610313366004611243565b61058e565b610201610326366004611207565b61059b565b61019b61033936600461125c565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b61019b61036f36600461125c565b60056020526000908152604090205481565b6101b66105a6565b61019b7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc681565b6101d66103be3660046111dd565b6105b5565b6101d66103d13660046111dd565b610671565b61019b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61020161040b36600461127e565b61067f565b61019b61041e3660046112f1565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461046590611324565b80601f016020809104026020016040519081016040528092919081815260200182805461049190611324565b80156104de5780601f106104b3576101008083540402835291602001916104de565b820191906000526020600020905b8154815290600101906020018083116104c157829003601f168201915b5050505050905090565b6000336104f68185856107ac565b5060019392505050565b61050b83838361092b565b505050565b60003361051e858285610b92565b61052985858561092b565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104f6908290869061057b9087906113a6565b6107ac565b61058a8282610c49565b5050565b6105983382610d4f565b50565b61050b8383836107ac565b60606004805461046590611324565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156106645760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61052982868684036107ac565b6000336104f681858561092b565b428410156106cf5760405162461bcd60e51b815260206004820152601960248201527f48455a3a3a7065726d69743a20415554485f4558504952454400000000000000604482015260640161065b565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260056020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a919086610729836113be565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506107978882868686610f08565b6107a28888886107ac565b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166108345760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff82166108bd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff83166109b45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff8216610a3d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ad95760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610b1d9084906113a6565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610b8391815260200190565b60405180910390a35b50505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b8c5781811015610c3c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161065b565b610b8c84848484036107ac565b73ffffffffffffffffffffffffffffffffffffffff8216610cac5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161065b565b8060026000828254610cbe91906113a6565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610cf89084906113a6565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8216610dd85760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610e745760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610eb09084906113f6565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600654604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f602080830191909152818301939093527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528251808303909101815260c08201909252815191909201207f190100000000000000000000000000000000000000000000000000000000000060e083015260e2820181905261010282018690529060009061012201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015611054573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116158015906110cf57508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6107a25760405162461bcd60e51b815260206004820152602b60248201527f48455a3a3a5f76616c69646174655369676e6564446174613a20494e56414c4960448201527f445f5349474e4154555245000000000000000000000000000000000000000000606482015260840161065b565b600060208083528351808285015260005b8181101561116e57858101830151858201604001528201611152565b81811115611180576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111d857600080fd5b919050565b600080604083850312156111f057600080fd5b6111f9836111b4565b946020939093013593505050565b60008060006060848603121561121c57600080fd5b611225846111b4565b9250611233602085016111b4565b9150604084013590509250925092565b60006020828403121561125557600080fd5b5035919050565b60006020828403121561126e57600080fd5b611277826111b4565b9392505050565b600080600080600080600060e0888a03121561129957600080fd5b6112a2886111b4565b96506112b0602089016111b4565b95506040880135945060608801359350608088013560ff811681146112d457600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561130457600080fd5b61130d836111b4565b915061131b602084016111b4565b90509250929050565b600181811c9082168061133857607f821691505b602082108103611371577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113b9576113b9611377565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036113ef576113ef611377565b5060010190565b60008282101561140857611408611377565b50039056fea2646970667358221220fca20729a90e81ceeeaa5285d72846fd512c992192630ec1c849572ca45c3ec264736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061018d5760003560e01c806340c10f19116100e35780639e4e73181161008c578063c473af3311610066578063c473af33146103d6578063d505accf146103fd578063dd62ed3e1461041057600080fd5b80639e4e731814610389578063a457c2d7146103b0578063a9059cbb146103c357600080fd5b806370a08231116100bd57806370a082311461032b5780637ecebe001461036157806395d89b411461038157600080fd5b806340c10f19146102f257806342966c681461030557806356189cb41461031857600080fd5b806323b872dd116101455780633408e4701161011f5780633408e4701461024c5780633644e5151461025257806339509351146102df57600080fd5b806323b872dd1461020357806330adf81f14610216578063313ce5671461023d57600080fd5b8063095ea7b311610176578063095ea7b3146101c357806318160ddd146101e6578063222f5be0146101ee57600080fd5b806304622c2e1461019257806306fdde03146101ae575b600080fd5b61019b60065481565b6040519081526020015b60405180910390f35b6101b6610456565b6040516101a59190611141565b6101d66101d13660046111dd565b6104e8565b60405190151581526020016101a5565b60025461019b565b6102016101fc366004611207565b610500565b005b6101d6610211366004611207565b610510565b61019b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b604051601281526020016101a5565b4661019b565b61019b6006546000907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f907fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc646604080516020810195909552840192909252606083015260808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6101d66102ed3660046111dd565b610534565b6102016103003660046111dd565b610580565b610201610313366004611243565b61058e565b610201610326366004611207565b61059b565b61019b61033936600461125c565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b61019b61036f36600461125c565b60056020526000908152604090205481565b6101b66105a6565b61019b7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc681565b6101d66103be3660046111dd565b6105b5565b6101d66103d13660046111dd565b610671565b61019b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61020161040b36600461127e565b61067f565b61019b61041e3660046112f1565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461046590611324565b80601f016020809104026020016040519081016040528092919081815260200182805461049190611324565b80156104de5780601f106104b3576101008083540402835291602001916104de565b820191906000526020600020905b8154815290600101906020018083116104c157829003601f168201915b5050505050905090565b6000336104f68185856107ac565b5060019392505050565b61050b83838361092b565b505050565b60003361051e858285610b92565b61052985858561092b565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104f6908290869061057b9087906113a6565b6107ac565b61058a8282610c49565b5050565b6105983382610d4f565b50565b61050b8383836107ac565b60606004805461046590611324565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156106645760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61052982868684036107ac565b6000336104f681858561092b565b428410156106cf5760405162461bcd60e51b815260206004820152601960248201527f48455a3a3a7065726d69743a20415554485f4558504952454400000000000000604482015260640161065b565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260056020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a919086610729836113be565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506107978882868686610f08565b6107a28888886107ac565b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166108345760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff82166108bd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff83166109b45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff8216610a3d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ad95760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610b1d9084906113a6565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610b8391815260200190565b60405180910390a35b50505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b8c5781811015610c3c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161065b565b610b8c84848484036107ac565b73ffffffffffffffffffffffffffffffffffffffff8216610cac5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161065b565b8060026000828254610cbe91906113a6565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610cf89084906113a6565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8216610dd85760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610e745760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610eb09084906113f6565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600654604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f602080830191909152818301939093527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528251808303909101815260c08201909252815191909201207f190100000000000000000000000000000000000000000000000000000000000060e083015260e2820181905261010282018690529060009061012201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015611054573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116158015906110cf57508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6107a25760405162461bcd60e51b815260206004820152602b60248201527f48455a3a3a5f76616c69646174655369676e6564446174613a20494e56414c4960448201527f445f5349474e4154555245000000000000000000000000000000000000000000606482015260840161065b565b600060208083528351808285015260005b8181101561116e57858101830151858201604001528201611152565b81811115611180576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111d857600080fd5b919050565b600080604083850312156111f057600080fd5b6111f9836111b4565b946020939093013593505050565b60008060006060848603121561121c57600080fd5b611225846111b4565b9250611233602085016111b4565b9150604084013590509250925092565b60006020828403121561125557600080fd5b5035919050565b60006020828403121561126e57600080fd5b611277826111b4565b9392505050565b600080600080600080600060e0888a03121561129957600080fd5b6112a2886111b4565b96506112b0602089016111b4565b95506040880135945060608801359350608088013560ff811681146112d457600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561130457600080fd5b61130d836111b4565b915061131b602084016111b4565b90509250929050565b600181811c9082168061133857607f821691505b602082108103611371577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113b9576113b9611377565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036113ef576113ef611377565b5060010190565b60008282101561140857611408611377565b50039056fea2646970667358221220fca20729a90e81ceeeaa5285d72846fd512c992192630ec1c849572ca45c3ec264736f6c634300080f0033", + "bytecode": "0x6080604052604051620017bf380380620017bf833981016040819052620000269162000209565b838360036200003683826200032a565b5060046200004582826200032a565b5050506200005a82826200007160201b60201c565b50508151602090920191909120600655506200041d565b6001600160a01b038216620000cc5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620000e09190620003f6565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200016457600080fd5b81516001600160401b03808211156200018157620001816200013c565b604051601f8301601f19908116603f01168101908282118183101715620001ac57620001ac6200013c565b81604052838152602092508683858801011115620001c957600080fd5b600091505b83821015620001ed5785820183015181830184015290820190620001ce565b83821115620001ff5760008385830101525b9695505050505050565b600080600080608085870312156200022057600080fd5b84516001600160401b03808211156200023857600080fd5b620002468883890162000152565b955060208701519150808211156200025d57600080fd5b506200026c8782880162000152565b604087015190945090506001600160a01b03811681146200028c57600080fd5b6060959095015193969295505050565b600181811c90821680620002b157607f821691505b602082108103620002d257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200013757600081815260208120601f850160051c81016020861015620003015750805b601f850160051c820191505b8181101562000322578281556001016200030d565b505050505050565b81516001600160401b038111156200034657620003466200013c565b6200035e816200035784546200029c565b84620002d8565b602080601f8311600181146200039657600084156200037d5750858301515b600019600386901b1c1916600185901b17855562000322565b600085815260208120601f198616915b82811015620003c757888601518255948401946001909101908401620003a6565b5085821015620003e65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156200041857634e487b7160e01b600052601160045260246000fd5b500190565b611392806200042d6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806340c10f19116100e35780639e4e73181161008c578063c473af3311610066578063c473af33146103d6578063d505accf146103fd578063dd62ed3e1461041057600080fd5b80639e4e731814610389578063a457c2d7146103b0578063a9059cbb146103c357600080fd5b806370a08231116100bd57806370a082311461032b5780637ecebe001461036157806395d89b411461038157600080fd5b806340c10f19146102f257806342966c681461030557806356189cb41461031857600080fd5b806323b872dd116101455780633408e4701161011f5780633408e4701461024c5780633644e5151461025257806339509351146102df57600080fd5b806323b872dd1461020357806330adf81f14610216578063313ce5671461023d57600080fd5b8063095ea7b311610176578063095ea7b3146101c357806318160ddd146101e6578063222f5be0146101ee57600080fd5b806304622c2e1461019257806306fdde03146101ae575b600080fd5b61019b60065481565b6040519081526020015b60405180910390f35b6101b6610456565b6040516101a591906110a7565b6101d66101d1366004611143565b6104e8565b60405190151581526020016101a5565b60025461019b565b6102016101fc36600461116d565b610500565b005b6101d661021136600461116d565b610510565b61019b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b604051601281526020016101a5565b4661019b565b61019b6006546000907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f907fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc646604080516020810195909552840192909252606083015260808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6101d66102ed366004611143565b610534565b610201610300366004611143565b610580565b6102016103133660046111a9565b61058e565b61020161032636600461116d565b61059b565b61019b6103393660046111c2565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b61019b61036f3660046111c2565b60056020526000908152604090205481565b6101b66105a6565b61019b7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc681565b6101d66103be366004611143565b6105b5565b6101d66103d1366004611143565b610671565b61019b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61020161040b3660046111e4565b61067f565b61019b61041e366004611257565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546104659061128a565b80601f01602080910402602001604051908101604052809291908181526020018280546104919061128a565b80156104de5780601f106104b3576101008083540402835291602001916104de565b820191906000526020600020905b8154815290600101906020018083116104c157829003601f168201915b5050505050905090565b6000336104f68185856107ac565b5060019392505050565b61050b83838361092b565b505050565b60003361051e858285610b4e565b61052985858561092b565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104f6908290869061057b90879061130c565b6107ac565b61058a8282610c05565b5050565b6105983382610cde565b50565b61050b8383836107ac565b6060600480546104659061128a565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156106645760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61052982868684036107ac565b6000336104f681858561092b565b428410156106cf5760405162461bcd60e51b815260206004820152601960248201527f48455a3a3a7065726d69743a20415554485f4558504952454400000000000000604482015260640161065b565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260056020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661072983611324565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506107978882868686610e6e565b6107a28888886107ac565b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166108345760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff82166108bd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff83166109b45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff8216610a3d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ad95760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b50505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b485781811015610bf85760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161065b565b610b4884848484036107ac565b73ffffffffffffffffffffffffffffffffffffffff8216610c685760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161065b565b8060026000828254610c7a919061130c565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8216610d675760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610e035760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600654604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f602080830191909152818301939093527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528251808303909101815260c08201909252815191909201207f190100000000000000000000000000000000000000000000000000000000000060e083015260e2820181905261010282018690529060009061012201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610fba573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81161580159061103557508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6107a25760405162461bcd60e51b815260206004820152602b60248201527f48455a3a3a5f76616c69646174655369676e6564446174613a20494e56414c4960448201527f445f5349474e4154555245000000000000000000000000000000000000000000606482015260840161065b565b600060208083528351808285015260005b818110156110d4578581018301518582016040015282016110b8565b818111156110e6576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461113e57600080fd5b919050565b6000806040838503121561115657600080fd5b61115f8361111a565b946020939093013593505050565b60008060006060848603121561118257600080fd5b61118b8461111a565b92506111996020850161111a565b9150604084013590509250925092565b6000602082840312156111bb57600080fd5b5035919050565b6000602082840312156111d457600080fd5b6111dd8261111a565b9392505050565b600080600080600080600060e0888a0312156111ff57600080fd5b6112088861111a565b96506112166020890161111a565b95506040880135945060608801359350608088013560ff8116811461123a57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561126a57600080fd5b6112738361111a565b91506112816020840161111a565b90509250929050565b600181811c9082168061129e57607f821691505b6020821081036112d7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561131f5761131f6112dd565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611355576113556112dd565b506001019056fea2646970667358221220bf0b7db976f560dd85f7767838a1135c53a57d85ccd2df4b815db0784342a3dc64736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061018d5760003560e01c806340c10f19116100e35780639e4e73181161008c578063c473af3311610066578063c473af33146103d6578063d505accf146103fd578063dd62ed3e1461041057600080fd5b80639e4e731814610389578063a457c2d7146103b0578063a9059cbb146103c357600080fd5b806370a08231116100bd57806370a082311461032b5780637ecebe001461036157806395d89b411461038157600080fd5b806340c10f19146102f257806342966c681461030557806356189cb41461031857600080fd5b806323b872dd116101455780633408e4701161011f5780633408e4701461024c5780633644e5151461025257806339509351146102df57600080fd5b806323b872dd1461020357806330adf81f14610216578063313ce5671461023d57600080fd5b8063095ea7b311610176578063095ea7b3146101c357806318160ddd146101e6578063222f5be0146101ee57600080fd5b806304622c2e1461019257806306fdde03146101ae575b600080fd5b61019b60065481565b6040519081526020015b60405180910390f35b6101b6610456565b6040516101a591906110a7565b6101d66101d1366004611143565b6104e8565b60405190151581526020016101a5565b60025461019b565b6102016101fc36600461116d565b610500565b005b6101d661021136600461116d565b610510565b61019b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b604051601281526020016101a5565b4661019b565b61019b6006546000907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f907fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc646604080516020810195909552840192909252606083015260808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6101d66102ed366004611143565b610534565b610201610300366004611143565b610580565b6102016103133660046111a9565b61058e565b61020161032636600461116d565b61059b565b61019b6103393660046111c2565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b61019b61036f3660046111c2565b60056020526000908152604090205481565b6101b66105a6565b61019b7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc681565b6101d66103be366004611143565b6105b5565b6101d66103d1366004611143565b610671565b61019b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61020161040b3660046111e4565b61067f565b61019b61041e366004611257565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546104659061128a565b80601f01602080910402602001604051908101604052809291908181526020018280546104919061128a565b80156104de5780601f106104b3576101008083540402835291602001916104de565b820191906000526020600020905b8154815290600101906020018083116104c157829003601f168201915b5050505050905090565b6000336104f68185856107ac565b5060019392505050565b61050b83838361092b565b505050565b60003361051e858285610b4e565b61052985858561092b565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104f6908290869061057b90879061130c565b6107ac565b61058a8282610c05565b5050565b6105983382610cde565b50565b61050b8383836107ac565b6060600480546104659061128a565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156106645760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61052982868684036107ac565b6000336104f681858561092b565b428410156106cf5760405162461bcd60e51b815260206004820152601960248201527f48455a3a3a7065726d69743a20415554485f4558504952454400000000000000604482015260640161065b565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260056020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661072983611324565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506107978882868686610e6e565b6107a28888886107ac565b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166108345760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff82166108bd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff83166109b45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff8216610a3d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ad95760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b50505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b485781811015610bf85760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161065b565b610b4884848484036107ac565b73ffffffffffffffffffffffffffffffffffffffff8216610c685760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161065b565b8060026000828254610c7a919061130c565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8216610d675760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610e035760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600654604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f602080830191909152818301939093527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528251808303909101815260c08201909252815191909201207f190100000000000000000000000000000000000000000000000000000000000060e083015260e2820181905261010282018690529060009061012201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610fba573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81161580159061103557508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6107a25760405162461bcd60e51b815260206004820152602b60248201527f48455a3a3a5f76616c69646174655369676e6564446174613a20494e56414c4960448201527f445f5349474e4154555245000000000000000000000000000000000000000000606482015260840161065b565b600060208083528351808285015260005b818110156110d4578581018301518582016040015282016110b8565b818111156110e6576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461113e57600080fd5b919050565b6000806040838503121561115657600080fd5b61115f8361111a565b946020939093013593505050565b60008060006060848603121561118257600080fd5b61118b8461111a565b92506111996020850161111a565b9150604084013590509250925092565b6000602082840312156111bb57600080fd5b5035919050565b6000602082840312156111d457600080fd5b6111dd8261111a565b9392505050565b600080600080600080600060e0888a0312156111ff57600080fd5b6112088861111a565b96506112166020890161111a565b95506040880135945060608801359350608088013560ff8116811461123a57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561126a57600080fd5b6112738361111a565b91506112816020840161111a565b90509250929050565b600181811c9082168061129e57607f821691505b6020821081036112d7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561131f5761131f6112dd565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611355576113556112dd565b506001019056fea2646970667358221220bf0b7db976f560dd85f7767838a1135c53a57d85ccd2df4b815db0784342a3dc64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/GlobalExitRootManager.json b/compiled-contracts/GlobalExitRootManager.json index 4338fecb3..79803eb35 100644 --- a/compiled-contracts/GlobalExitRootManager.json +++ b/compiled-contracts/GlobalExitRootManager.json @@ -151,8 +151,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506105ce806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461017857600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610523565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610523565b610198565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e366004610565565b610342565b6005546101539073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100a0565b6004546101539073ffffffffffffffffffffffffffffffffffffffff1681565b60055473ffffffffffffffffffffffffffffffffffffffff163314806101d5575060045473ffffffffffffffffffffffffffffffffffffffff1633145b610266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b60055473ffffffffffffffffffffffffffffffffffffffff16330361028b5760018190555b60045473ffffffffffffffffffffffffffffffffffffffff1633036102b05760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361033e57600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103625750600054600160ff909116105b8061037c5750303b15801561037c575060005460ff166001145b610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161025d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561046657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6005805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556004805492851692909116919091179055801561051e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561053557600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461056057600080fd5b919050565b6000806040838503121561057857600080fd5b6105818361053c565b915061058f6020840161053c565b9050925092905056fea2646970667358221220423e83d388a63ed7ac53287c741e2b54c7d39b0614d1fb089d983befe87d324564736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461017857600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610523565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610523565b610198565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e366004610565565b610342565b6005546101539073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100a0565b6004546101539073ffffffffffffffffffffffffffffffffffffffff1681565b60055473ffffffffffffffffffffffffffffffffffffffff163314806101d5575060045473ffffffffffffffffffffffffffffffffffffffff1633145b610266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b60055473ffffffffffffffffffffffffffffffffffffffff16330361028b5760018190555b60045473ffffffffffffffffffffffffffffffffffffffff1633036102b05760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361033e57600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103625750600054600160ff909116105b8061037c5750303b15801561037c575060005460ff166001145b610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161025d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561046657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6005805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556004805492851692909116919091179055801561051e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561053557600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461056057600080fd5b919050565b6000806040838503121561057857600080fd5b6105818361053c565b915061058f6020840161053c565b9050925092905056fea2646970667358221220423e83d388a63ed7ac53287c741e2b54c7d39b0614d1fb089d983befe87d324564736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506105ce806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461017857600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610523565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610523565b610198565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e366004610565565b610342565b6005546101539073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100a0565b6004546101539073ffffffffffffffffffffffffffffffffffffffff1681565b60055473ffffffffffffffffffffffffffffffffffffffff163314806101d5575060045473ffffffffffffffffffffffffffffffffffffffff1633145b610266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b60055473ffffffffffffffffffffffffffffffffffffffff16330361028b5760018190555b60045473ffffffffffffffffffffffffffffffffffffffff1633036102b05760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361033e57600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103625750600054600160ff909116105b8061037c5750303b15801561037c575060005460ff166001145b610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161025d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561046657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6005805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556004805492851692909116919091179055801561051e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561053557600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461056057600080fd5b919050565b6000806040838503121561057857600080fd5b6105818361053c565b915061058f6020840161053c565b9050925092905056fea264697066735822122087c7663431492f30a105bf22524206fa2a82b4aead6816ddcf7c2da40b828ee964736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461017857600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610523565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610523565b610198565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e366004610565565b610342565b6005546101539073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100a0565b6004546101539073ffffffffffffffffffffffffffffffffffffffff1681565b60055473ffffffffffffffffffffffffffffffffffffffff163314806101d5575060045473ffffffffffffffffffffffffffffffffffffffff1633145b610266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b60055473ffffffffffffffffffffffffffffffffffffffff16330361028b5760018190555b60045473ffffffffffffffffffffffffffffffffffffffff1633036102b05760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361033e57600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103625750600054600160ff909116105b8061037c5750303b15801561037c575060005460ff166001145b610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161025d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561046657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6005805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556004805492851692909116919091179055801561051e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561053557600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461056057600080fd5b919050565b6000806040838503121561057857600080fd5b6105818361053c565b915061058f6020840161053c565b9050925092905056fea264697066735822122087c7663431492f30a105bf22524206fa2a82b4aead6816ddcf7c2da40b828ee964736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/GlobalExitRootManagerL2.json b/compiled-contracts/GlobalExitRootManagerL2.json index f923b07aa..87cb86c5c 100644 --- a/compiled-contracts/GlobalExitRootManagerL2.json +++ b/compiled-contracts/GlobalExitRootManagerL2.json @@ -73,8 +73,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5060405161027938038061027983398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b6101e6806100936000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610197565b60006020819052908152604090205481565b6100a061009b366004610197565b6100e7565b005b6002546100c29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610064565b60025473ffffffffffffffffffffffffffffffffffffffff163314610192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a7570646174654560448201527f786974526f6f743a204f4e4c595f425249444745000000000000000000000000606482015260840160405180910390fd5b600155565b6000602082840312156101a957600080fd5b503591905056fea2646970667358221220016d470f475254214f39dcc99bd9d9791546fd270bad790bf7a87e10c2e92c0464736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610197565b60006020819052908152604090205481565b6100a061009b366004610197565b6100e7565b005b6002546100c29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610064565b60025473ffffffffffffffffffffffffffffffffffffffff163314610192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a7570646174654560448201527f786974526f6f743a204f4e4c595f425249444745000000000000000000000000606482015260840160405180910390fd5b600155565b6000602082840312156101a957600080fd5b503591905056fea2646970667358221220016d470f475254214f39dcc99bd9d9791546fd270bad790bf7a87e10c2e92c0464736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5060405161027938038061027983398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b6101e6806100936000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610197565b60006020819052908152604090205481565b6100a061009b366004610197565b6100e7565b005b6002546100c29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610064565b60025473ffffffffffffffffffffffffffffffffffffffff163314610192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a7570646174654560448201527f786974526f6f743a204f4e4c595f425249444745000000000000000000000000606482015260840160405180910390fd5b600155565b6000602082840312156101a957600080fd5b503591905056fea2646970667358221220fea7fcab965a97796cf30d6ff699830b40cf06628fa4f9baf7c5725155af254564736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610197565b60006020819052908152604090205481565b6100a061009b366004610197565b6100e7565b005b6002546100c29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610064565b60025473ffffffffffffffffffffffffffffffffffffffff163314610192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a7570646174654560448201527f786974526f6f743a204f4e4c595f425249444745000000000000000000000000606482015260840160405180910390fd5b600155565b6000602082840312156101a957600080fd5b503591905056fea2646970667358221220fea7fcab965a97796cf30d6ff699830b40cf06628fa4f9baf7c5725155af254564736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/GlobalExitRootManagerL2Mock.json b/compiled-contracts/GlobalExitRootManagerL2Mock.json index 0d152dbb0..ce1bc72d1 100644 --- a/compiled-contracts/GlobalExitRootManagerL2Mock.json +++ b/compiled-contracts/GlobalExitRootManagerL2Mock.json @@ -104,8 +104,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506040516102ef3803806102ef83398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b61025c806100936000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c806333d6247d1161005057806333d6247d146100c857806396e07459146100db578063a3c573eb146100fb57600080fd5b806301fd904414610077578063116c40c314610093578063257b3632146100a8575b600080fd5b61008060015481565b6040519081526020015b60405180910390f35b6100a66100a13660046101eb565b600155565b005b6100806100b63660046101eb565b60006020819052908152604090205481565b6100a66100d63660046101eb565b610140565b6100a66100e9366004610204565b60009182526020829052604090912055565b60025461011b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161008a565b60025473ffffffffffffffffffffffffffffffffffffffff1633146100a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a7570646174654560448201527f786974526f6f743a204f4e4c595f425249444745000000000000000000000000606482015260840160405180910390fd5b6000602082840312156101fd57600080fd5b5035919050565b6000806040838503121561021757600080fd5b5050803592602090910135915056fea2646970667358221220d2bef258c77ff9dd55a7e99fcc3d972c4394423f9643b3e5c0f7ae83e2da961864736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100725760003560e01c806333d6247d1161005057806333d6247d146100c857806396e07459146100db578063a3c573eb146100fb57600080fd5b806301fd904414610077578063116c40c314610093578063257b3632146100a8575b600080fd5b61008060015481565b6040519081526020015b60405180910390f35b6100a66100a13660046101eb565b600155565b005b6100806100b63660046101eb565b60006020819052908152604090205481565b6100a66100d63660046101eb565b610140565b6100a66100e9366004610204565b60009182526020829052604090912055565b60025461011b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161008a565b60025473ffffffffffffffffffffffffffffffffffffffff1633146100a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a7570646174654560448201527f786974526f6f743a204f4e4c595f425249444745000000000000000000000000606482015260840160405180910390fd5b6000602082840312156101fd57600080fd5b5035919050565b6000806040838503121561021757600080fd5b5050803592602090910135915056fea2646970667358221220d2bef258c77ff9dd55a7e99fcc3d972c4394423f9643b3e5c0f7ae83e2da961864736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506040516102ef3803806102ef83398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b61025c806100936000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c806333d6247d1161005057806333d6247d146100c857806396e07459146100db578063a3c573eb146100fb57600080fd5b806301fd904414610077578063116c40c314610093578063257b3632146100a8575b600080fd5b61008060015481565b6040519081526020015b60405180910390f35b6100a66100a13660046101eb565b600155565b005b6100806100b63660046101eb565b60006020819052908152604090205481565b6100a66100d63660046101eb565b610140565b6100a66100e9366004610204565b60009182526020829052604090912055565b60025461011b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161008a565b60025473ffffffffffffffffffffffffffffffffffffffff1633146100a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a7570646174654560448201527f786974526f6f743a204f4e4c595f425249444745000000000000000000000000606482015260840160405180910390fd5b6000602082840312156101fd57600080fd5b5035919050565b6000806040838503121561021757600080fd5b5050803592602090910135915056fea2646970667358221220a32bf46736e715c19b2284ac2bb76ce1543e9344b11d06b9403153cc6c8f964b64736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100725760003560e01c806333d6247d1161005057806333d6247d146100c857806396e07459146100db578063a3c573eb146100fb57600080fd5b806301fd904414610077578063116c40c314610093578063257b3632146100a8575b600080fd5b61008060015481565b6040519081526020015b60405180910390f35b6100a66100a13660046101eb565b600155565b005b6100806100b63660046101eb565b60006020819052908152604090205481565b6100a66100d63660046101eb565b610140565b6100a66100e9366004610204565b60009182526020829052604090912055565b60025461011b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161008a565b60025473ffffffffffffffffffffffffffffffffffffffff1633146100a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a7570646174654560448201527f786974526f6f743a204f4e4c595f425249444745000000000000000000000000606482015260840160405180910390fd5b6000602082840312156101fd57600080fd5b5035919050565b6000806040838503121561021757600080fd5b5050803592602090910135915056fea2646970667358221220a32bf46736e715c19b2284ac2bb76ce1543e9344b11d06b9403153cc6c8f964b64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/GlobalExitRootManagerMock.json b/compiled-contracts/GlobalExitRootManagerMock.json index 2aaeb5173..5ef303ca5 100644 --- a/compiled-contracts/GlobalExitRootManagerMock.json +++ b/compiled-contracts/GlobalExitRootManagerMock.json @@ -153,6 +153,24 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "globalExitRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "name": "setGlobalExitRoot", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -180,8 +198,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5060405161086738038061086783398101604081905261002f916101bb565b6100398282610040565b50506101ee565b600054610100900460ff16158080156100605750600054600160ff909116105b8061008b57506100793061019060201b6105a31760201c565b15801561008b575060005460ff166001145b6100f25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015610115576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561018b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b80516001600160a01b03811681146101b657600080fd5b919050565b600080604083850312156101ce57600080fd5b6101d78361019f565b91506101e56020840161019f565b90509250929050565b61066a806101fd6000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c806333d6247d11610076578063485cc9551161005b578063485cc9551461014e5780635ec6a8df14610161578063a3c573eb146101a657600080fd5b806333d6247d146101025780633ed691ef1461011557600080fd5b806301fd9044146100a8578063051a9e28146100c4578063257b3632146100d9578063319cf735146100f9575b600080fd5b6100b160015481565b6040519081526020015b60405180910390f35b6100d76100d23660046105bf565b6101c6565b005b6100b16100e73660046105bf565b60036020526000908152604090205481565b6100b160025481565b6100d76101103660046105bf565b610218565b6100b160025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d761015c366004610601565b6103c2565b6005546101819073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100bb565b6004546101819073ffffffffffffffffffffffffffffffffffffffff1681565b806003600061020460025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b60055473ffffffffffffffffffffffffffffffffffffffff16331480610255575060045473ffffffffffffffffffffffffffffffffffffffff1633145b6102e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b60055473ffffffffffffffffffffffffffffffffffffffff16330361030b5760018190555b60045473ffffffffffffffffffffffffffffffffffffffff1633036103305760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036103be57600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103e25750600054600160ff909116105b806103fc5750303b1580156103fc575060005460ff166001145b610488576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016102dd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156104e657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6005805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556004805492851692909116919091179055801561059e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000602082840312156105d157600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146105fc57600080fd5b919050565b6000806040838503121561061457600080fd5b61061d836105d8565b915061062b602084016105d8565b9050925092905056fea2646970667358221220555671f0d50a061db0af5627095739ecf0ab0b4036de759223f1070b30a96be464736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a35760003560e01c806333d6247d11610076578063485cc9551161005b578063485cc9551461014e5780635ec6a8df14610161578063a3c573eb146101a657600080fd5b806333d6247d146101025780633ed691ef1461011557600080fd5b806301fd9044146100a8578063051a9e28146100c4578063257b3632146100d9578063319cf735146100f9575b600080fd5b6100b160015481565b6040519081526020015b60405180910390f35b6100d76100d23660046105bf565b6101c6565b005b6100b16100e73660046105bf565b60036020526000908152604090205481565b6100b160025481565b6100d76101103660046105bf565b610218565b6100b160025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d761015c366004610601565b6103c2565b6005546101819073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100bb565b6004546101819073ffffffffffffffffffffffffffffffffffffffff1681565b806003600061020460025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b60055473ffffffffffffffffffffffffffffffffffffffff16331480610255575060045473ffffffffffffffffffffffffffffffffffffffff1633145b6102e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b60055473ffffffffffffffffffffffffffffffffffffffff16330361030b5760018190555b60045473ffffffffffffffffffffffffffffffffffffffff1633036103305760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036103be57600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103e25750600054600160ff909116105b806103fc5750303b1580156103fc575060005460ff166001145b610488576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016102dd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156104e657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6005805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556004805492851692909116919091179055801561059e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000602082840312156105d157600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146105fc57600080fd5b919050565b6000806040838503121561061457600080fd5b61061d836105d8565b915061062b602084016105d8565b9050925092905056fea2646970667358221220555671f0d50a061db0af5627095739ecf0ab0b4036de759223f1070b30a96be464736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506040516108c43803806108c483398101604081905261002f916101bb565b6100398282610040565b50506101ee565b600054610100900460ff16158080156100605750600054600160ff909116105b8061008b57506100793061019060201b6105de1760201c565b15801561008b575060005460ff166001145b6100f25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015610115576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561018b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b80516001600160a01b03811681146101b657600080fd5b919050565b600080604083850312156101ce57600080fd5b6101d78361019f565b91506101e56020840161019f565b90509250929050565b6106c7806101fd6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c80633ed691ef116100765780635bcef6731161005b5780635bcef6731461017c5780635ec6a8df1461019c578063a3c573eb146101e157600080fd5b80633ed691ef14610130578063485cc9551461016957600080fd5b8063257b3632116100a7578063257b3632146100f4578063319cf7351461011457806333d6247d1461011d57600080fd5b806301fd9044146100c3578063051a9e28146100df575b600080fd5b6100cc60015481565b6040519081526020015b60405180910390f35b6100f26100ed3660046105fa565b610201565b005b6100cc6101023660046105fa565b60036020526000908152604090205481565b6100cc60025481565b6100f261012b3660046105fa565b610253565b6100cc60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100f261017736600461063c565b6103fd565b6100f261018a36600461066f565b60009182526003602052604090912055565b6005546101bc9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100d6565b6004546101bc9073ffffffffffffffffffffffffffffffffffffffff1681565b806003600061023f60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b60055473ffffffffffffffffffffffffffffffffffffffff16331480610290575060045473ffffffffffffffffffffffffffffffffffffffff1633145b610321576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b60055473ffffffffffffffffffffffffffffffffffffffff1633036103465760018190555b60045473ffffffffffffffffffffffffffffffffffffffff16330361036b5760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036103f957600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff161580801561041d5750600054600160ff909116105b806104375750303b158015610437575060005460ff166001145b6104c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610318565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561052157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6005805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255600480549285169290911691909117905580156105d957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60006020828403121561060c57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461063757600080fd5b919050565b6000806040838503121561064f57600080fd5b61065883610613565b915061066660208401610613565b90509250929050565b6000806040838503121561068257600080fd5b5050803592602090910135915056fea26469706673582212206d13783be5c9904d415bd5901458df71375f44b8010a7e57e675fc68a3a845c964736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100be5760003560e01c80633ed691ef116100765780635bcef6731161005b5780635bcef6731461017c5780635ec6a8df1461019c578063a3c573eb146101e157600080fd5b80633ed691ef14610130578063485cc9551461016957600080fd5b8063257b3632116100a7578063257b3632146100f4578063319cf7351461011457806333d6247d1461011d57600080fd5b806301fd9044146100c3578063051a9e28146100df575b600080fd5b6100cc60015481565b6040519081526020015b60405180910390f35b6100f26100ed3660046105fa565b610201565b005b6100cc6101023660046105fa565b60036020526000908152604090205481565b6100cc60025481565b6100f261012b3660046105fa565b610253565b6100cc60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100f261017736600461063c565b6103fd565b6100f261018a36600461066f565b60009182526003602052604090912055565b6005546101bc9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100d6565b6004546101bc9073ffffffffffffffffffffffffffffffffffffffff1681565b806003600061023f60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b60055473ffffffffffffffffffffffffffffffffffffffff16331480610290575060045473ffffffffffffffffffffffffffffffffffffffff1633145b610321576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b60055473ffffffffffffffffffffffffffffffffffffffff1633036103465760018190555b60045473ffffffffffffffffffffffffffffffffffffffff16330361036b5760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036103f957600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff161580801561041d5750600054600160ff909116105b806104375750303b158015610437575060005460ff166001145b6104c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610318565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561052157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6005805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255600480549285169290911691909117905580156105d957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60006020828403121561060c57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461063757600080fd5b919050565b6000806040838503121561064f57600080fd5b61065883610613565b915061066660208401610613565b90509250929050565b6000806040838503121561068257600080fd5b5050803592602090910135915056fea26469706673582212206d13783be5c9904d415bd5901458df71375f44b8010a7e57e675fc68a3a845c964736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/ProofOfEfficiency.json b/compiled-contracts/ProofOfEfficiency.json index ebab26c60..8ea94b688 100644 --- a/compiled-contracts/ProofOfEfficiency.json +++ b/compiled-contracts/ProofOfEfficiency.json @@ -94,7 +94,7 @@ "type": "bytes32" } ], - "name": "ProofDifferentState", + "name": "ProveNonDeterministicState", "type": "event" }, { @@ -639,7 +639,7 @@ "type": "uint256[2]" } ], - "name": "proofDifferentState", + "name": "proveNonDeterministicState", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -896,8 +896,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50614928806100206000396000f3fe608060405234801561001057600080fd5b50600436106102c85760003560e01c80638c4a0af71161017b578063cfa8ed47116100d8578063e7a7ed021161008c578063eaeb077b11610071578063eaeb077b14610687578063f2fde38b1461069a578063f7552761146106ad57600080fd5b8063e7a7ed0214610637578063e8bf92ed1461066757600080fd5b8063d8d1091b116100bd578063d8d1091b146105ef578063d8f54db014610602578063dbc169761461062f57600080fd5b8063cfa8ed47146105a3578063d02103ca146105cf57600080fd5b8063adc879e91161012f578063b4d63f5811610114578063b4d63f581461054b578063b6b0b0971461056b578063c89e42df1461059057600080fd5b8063adc879e91461052e578063b02286c01461054257600080fd5b806399f5634e1161016057806399f5634e146104fc578063a3c573eb14610504578063ab9fc5ef1461052457600080fd5b80638c4a0af7146104cb5780638da5cb5b146104de57600080fd5b8063542028d511610229578063715018a6116101dd57806379847057116101c2578063798470571461049c5780637fcb3653146104a457806381df7d3f146104b857600080fd5b8063715018a6146104815780637152facf1461048957600080fd5b80636766f09d1161020e5780636766f09d1461043b5780636b8616ce1461044e5780636ff512cc1461046e57600080fd5b8063542028d51461042057806355b925e61461042857600080fd5b806327eb6c0f11610280578063423fa85611610265578063423fa856146103aa57806345605267146103ca5780635392c5e0146103f257600080fd5b806327eb6c0f146103525780633c1582671461039757600080fd5b806319d8ac61116102b157806319d8ac61146103085780631c1083e2146103355780632072f6c51461034a57600080fd5b8063107bf28c146102cd57806315064c96146102eb575b600080fd5b6102d56106bc565b6040516102e29190613e09565b60405180910390f35b6065546102f89060ff1681565b60405190151581526020016102e2565b60685461031c9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102e2565b610348610343366004613e4e565b61074a565b005b610348610856565b6070546103729073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e2565b6103486103a5366004613fc3565b610907565b60685461031c9068010000000000000000900467ffffffffffffffff1681565b60685461031c90700100000000000000000000000000000000900467ffffffffffffffff1681565b6104126104003660046140da565b606b6020526000908152604090205481565b6040519081526020016102e2565b6102d56111fe565b61034861043636600461410c565b61120b565b61034861044936600461410c565b6117d4565b61041261045c3660046140da565b60666020526000908152604090205481565b61034861047c366004613e4e565b611e1e565b610348611f38565b6102d561049736600461418f565b611f4a565b610412612180565b60695461031c9067ffffffffffffffff1681565b6103486104c63660046141ea565b6121fa565b6103486104d93660046142e4565b612553565b60335473ffffffffffffffffffffffffffffffffffffffff16610372565b61041261266d565b6071546103729073ffffffffffffffffffffffffffffffffffffffff1681565b61031c62093a8081565b606e5461031c9067ffffffffffffffff1681565b61041261ea6081565b6104126105593660046140da565b60676020526000908152604090205481565b60655461037290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b61034861059e366004614301565b61279e565b6069546103729068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103729073ffffffffffffffffffffffffffffffffffffffff1681565b6103486105fd36600461433e565b612873565b6069546102f8907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610348612f18565b60685461031c907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103729073ffffffffffffffffffffffffffffffffffffffff1681565b610348610695366004614431565b6130a7565b6103486106a8366004613e4e565b6135a7565b61041267016345785d8a000081565b606f80546106c990614476565b80601f01602080910402602001604051908101604052809291908181526020018280546106f590614476565b80156107425780601f1061071757610100808354040283529160200191610742565b820191906000526020600020905b81548152906001019060200180831161072557829003601f168201915b505050505081565b60705473ffffffffffffffffffffffffffffffffffffffff1633146107dc5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff16156108f55760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6108fd613644565b6109056136ab565b565b60655460ff16156109a65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610a3f5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b805160685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610fef576000878281518110610aa757610aa76144c9565b602002602001015190506000816060015167ffffffffffffffff161115610cc05783610ad281614527565b945050600081600001518051906020012082602001518360600151604051602001610b3593929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610c025760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610cba5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016107d3565b50610e5a565b60208101511580610d6f5750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610d299160040190815260200190565b6020604051808303816000875af1158015610d48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6c919061454e565b15155b610de15760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016107d3565b80515161ea6011610e5a5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016107d3565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610e90575042816040015167ffffffffffffffff1611155b610f285760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610fd190614527565b95505080604001519550508080610fe790614567565b915050610a8b565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156110925760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016107d3565b6068546000906110c090700100000000000000000000000000000000900467ffffffffffffffff168461459f565b6110d49067ffffffffffffffff16876145c8565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c1693909317939093179290921691909117909155600090815260676020526040902083905590506111b1333061118b8467016345785d8a00006145df565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613735565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d80546106c990614476565b60655460ff16156112aa5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695467ffffffffffffffff90811690881611156113565760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016107d3565b60695467ffffffffffffffff908116908716116114015760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b60205260409020546114b35760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a4016107d3565b60006114c188888888611f4a565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516114f6919061461c565b602060405180830381855afa158015611513573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611536919061454e565b6115409190614667565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916115aa918991899189919060040161467b565b602060405180830381865afa1580156115c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115eb91906146f5565b61165d5760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016107d3565b6069546116bb90339061167a9067ffffffffffffffff168b61459f565b67ffffffffffffffff1661168c61266d565b61169691906145df565b606554610100900473ffffffffffffffffffffffffffffffffffffffff1691906137f3565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b15801561177057600080fd5b505af1158015611784573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60655460ff16156118735760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b8567ffffffffffffffff168767ffffffffffffffff16106119225760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e65774261746368206d75737420626520626960648201527f67676572207468616e20696e69744e756d426174636800000000000000000000608482015260a4016107d3565b60695467ffffffffffffffff90811690871611156119f45760405162461bcd60e51b815260206004820152606260248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e65774261746368206d757374206265206c6560648201527f7373206f7220657175616c207468616e206c617374566572696669656442617460848201527f636800000000000000000000000000000000000000000000000000000000000060a482015260c4016107d3565b67ffffffffffffffff87166000908152606b6020526040902054611aa65760405162461bcd60e51b815260206004820152604e60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d426174636820737461746520726f6f742060648201527f646f6573206e6f74206578697374000000000000000000000000000000000000608482015260a4016107d3565b67ffffffffffffffff86166000908152606b6020526040902054611b585760405162461bcd60e51b815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e6577426174636820737461746520726f6f7460648201527f20646f6573206e6f742065786973740000000000000000000000000000000000608482015260a4016107d3565b6000611b6688888888611f4a565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051611b9b919061461c565b602060405180830381855afa158015611bb8573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611bdb919061454e565b611be59190614667565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611c4f918991899189919060040161467b565b602060405180830381865afa158015611c6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c9091906146f5565b611d025760405162461bcd60e51b815260206004820152603560248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20494e56414c49445f50524f4f46000000000000000000000060648201526084016107d3565b67ffffffffffffffff88166000908152606b6020526040902054869003611db75760405162461bcd60e51b815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2073746f72656420726f6f74206d757374206265206469666660648201527f6572656e74207468616e206e657720737461746520726f6f7400000000000000608482015260a4016107d3565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527fe579d6d18f02941e1d0f59bff70f1b2c894edc991badab38343786df2846fe55910160405180910390a1611e136136ab565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611eb75760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161084b565b611f40613644565b610905600061384e565b67ffffffffffffffff808516600081815260676020526040808220549387168252902054606092911580611f7d57508115155b6120155760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b806120ae5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b60685460009067ffffffffffffffff70010000000000000000000000000000000082048116916121cf917801000000000000000000000000000000000000000000000000909104166001614712565b6121d9919061459f565b6121f59067ffffffffffffffff16670de0b6b3a76400006145df565b905090565b600054610100900460ff161580801561221a5750600054600160ff909116105b806122345750303b158015612234575060005460ff166001145b6122a65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107d3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561230457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d612443878261478c565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f612484858261478c565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560708054928516929091169190911790556124e26138c5565b801561254557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146125ec5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061084b90831515815260200190565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156126e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612708919061454e565b60695460685491925060009167ffffffffffffffff9182169168010000000000000000820481169161276d917001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041661459f565b6127779190614712565b612781919061459f565b67ffffffffffffffff1690506127978183614888565b9250505090565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146128375760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606d612843828261478c565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161084b9190613e09565b60655460ff16156129125760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146129d55760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180612a705760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60685467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612abb91849170010000000000000000000000000000000090041661489c565b1115612b2f5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016107d3565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b84811015612e48576000868281518110612b8f57612b8f6144c9565b602002602001015190508380612ba490614527565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114612cc55760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016107d3565b612cd06001886145c8565b8303612d8e574262093a808360400151612cea9190614712565b67ffffffffffffffff161115612d8e5760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016107d3565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612e3090614527565b96505050508080612e4090614567565b915050612b73565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612f905760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b60705473ffffffffffffffffffffffffffffffffffffffff16331461301d5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561308757600080fd5b505af115801561309b573d6000803e3d6000fd5b5050505061090561394b565b60655460ff16156131465760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146132095760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b6000613213612180565b90508181111561328b5760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016107d3565b61ea608351106133035760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016107d3565b60655461332d90610100900473ffffffffffffffffffffffffffffffffffffffff16333084613735565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa15801561339d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133c1919061454e565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff169060186133fb83614527565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161347493929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000908152606690935291205532330361354457606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26135a1565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613598939291906148b4565b60405180910390a25b50505050565b6135af613644565b73ffffffffffffffffffffffffffffffffffffffff81166136385760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107d3565b6136418161384e565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109055760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561371557600080fd5b505af1158015613729573d6000803e3d6000fd5b50505050610905613a16565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526135a19085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613b0b565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526138499084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161378f565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166139425760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107d3565b6109053361384e565b60655460ff166139c35760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff1615613ab55760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6000613b6d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613bfd9092919063ffffffff16565b8051909150156138495780806020019051810190613b8b91906146f5565b6138495760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107d3565b6060613c0c8484600085613c16565b90505b9392505050565b606082471015613c8e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016107d3565b73ffffffffffffffffffffffffffffffffffffffff85163b613cf25760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107d3565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613d1b919061461c565b60006040518083038185875af1925050503d8060008114613d58576040519150601f19603f3d011682016040523d82523d6000602084013e613d5d565b606091505b5091509150613d6d828286613d78565b979650505050505050565b60608315613d87575081613c0f565b825115613d975782518084602001fd5b8160405162461bcd60e51b81526004016107d39190613e09565b60005b83811015613dcc578181015183820152602001613db4565b838111156135a15750506000910152565b60008151808452613df5816020860160208601613db1565b601f01601f19169290920160200192915050565b602081526000613c0f6020830184613ddd565b73ffffffffffffffffffffffffffffffffffffffff8116811461364157600080fd5b8035613e4981613e1c565b919050565b600060208284031215613e6057600080fd5b8135613c0f81613e1c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613ebd57613ebd613e6b565b60405290565b6040516060810167ffffffffffffffff81118282101715613ebd57613ebd613e6b565b604051601f8201601f1916810167ffffffffffffffff81118282101715613f0f57613f0f613e6b565b604052919050565b600067ffffffffffffffff821115613f3157613f31613e6b565b5060051b60200190565b600082601f830112613f4c57600080fd5b813567ffffffffffffffff811115613f6657613f66613e6b565b613f796020601f19601f84011601613ee6565b818152846020838601011115613f8e57600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613e4957600080fd5b60006020808385031215613fd657600080fd5b823567ffffffffffffffff80821115613fee57600080fd5b818501915085601f83011261400257600080fd5b813561401561401082613f17565b613ee6565b81815260059190911b8301840190848101908883111561403457600080fd5b8585015b838110156140cd578035858111156140505760008081fd5b86016080818c03601f19018113156140685760008081fd5b614070613e9a565b89830135888111156140825760008081fd5b6140908e8c83870101613f3b565b8252506040808401358b83015260606140aa818601613fab565b828401526140b9848601613fab565b908301525085525050918601918601614038565b5098975050505050505050565b6000602082840312156140ec57600080fd5b613c0f82613fab565b806040810183101561410657600080fd5b92915050565b6000806000806000806000610180888a03121561412857600080fd5b61413188613fab565b965061413f60208901613fab565b9550604088013594506060880135935061415c8960808a016140f5565b925061014088018981111561417057600080fd5b60c0890192506141808a826140f5565b91505092959891949750929550565b600080600080608085870312156141a557600080fd5b6141ae85613fab565b93506141bc60208601613fab565b93969395505050506040820135916060013590565b801515811461364157600080fd5b8035613e49816141d1565b60008060008060008060008060008060006101608c8e03121561420c57600080fd5b6142158c613e3e565b9a5061422360208d01613e3e565b995061423160408d01613e3e565b985060608c0135975061424660808d01613e3e565b965061425460a08d016141df565b955067ffffffffffffffff8060c08e0135111561427057600080fd5b6142808e60c08f01358f01613f3b565b955061428e60e08e01613fab565b9450806101008e013511156142a257600080fd5b506142b48d6101008e01358e01613f3b565b92506142c36101208d01613e3e565b91506142d26101408d01613e3e565b90509295989b509295989b9093969950565b6000602082840312156142f657600080fd5b8135613c0f816141d1565b60006020828403121561431357600080fd5b813567ffffffffffffffff81111561432a57600080fd5b61433684828501613f3b565b949350505050565b6000602080838503121561435157600080fd5b823567ffffffffffffffff8082111561436957600080fd5b818501915085601f83011261437d57600080fd5b813561438b61401082613f17565b81815260059190911b830184019084810190888311156143aa57600080fd5b8585015b838110156140cd578035858111156143c65760008081fd5b86016060818c03601f19018113156143de5760008081fd5b6143e6613ec3565b89830135888111156143f85760008081fd5b6144068e8c83870101613f3b565b8252506040808401358b83015261441e838501613fab565b90820152855250509186019186016143ae565b6000806040838503121561444457600080fd5b823567ffffffffffffffff81111561445b57600080fd5b61446785828601613f3b565b95602094909401359450505050565b600181811c9082168061448a57607f821691505b6020821081036144c3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614544576145446144f8565b6001019392505050565b60006020828403121561456057600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614598576145986144f8565b5060010190565b600067ffffffffffffffff838116908316818110156145c0576145c06144f8565b039392505050565b6000828210156145da576145da6144f8565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614617576146176144f8565b500290565b6000825161462e818460208701613db1565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261467657614676614638565b500690565b61012081016040808784376000838201818152879190815b60028110156146b357848483379084018281529284019290600101614693565b5050828760c0870137610100850181815286935091505b60018110156146e95782518252602092830192909101906001016146ca565b50505095945050505050565b60006020828403121561470757600080fd5b8151613c0f816141d1565b600067ffffffffffffffff808316818516808303821115614735576147356144f8565b01949350505050565b601f82111561384957600081815260208120601f850160051c810160208610156147655750805b601f850160051c820191505b8181101561478457828155600101614771565b505050505050565b815167ffffffffffffffff8111156147a6576147a6613e6b565b6147ba816147b48454614476565b8461473e565b602080601f83116001811461480d57600084156147d75750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614784565b600085815260208120601f198616915b8281101561483c5788860151825594840194600190910190840161481d565b508582101561487857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008261489757614897614638565b500490565b600082198211156148af576148af6144f8565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006148e96060830184613ddd565b9594505050505056fea26469706673582212203146999accd90085aed82493dac693741e15c8a3fe634147953b164c9909fc4764736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102c85760003560e01c80638c4a0af71161017b578063cfa8ed47116100d8578063e7a7ed021161008c578063eaeb077b11610071578063eaeb077b14610687578063f2fde38b1461069a578063f7552761146106ad57600080fd5b8063e7a7ed0214610637578063e8bf92ed1461066757600080fd5b8063d8d1091b116100bd578063d8d1091b146105ef578063d8f54db014610602578063dbc169761461062f57600080fd5b8063cfa8ed47146105a3578063d02103ca146105cf57600080fd5b8063adc879e91161012f578063b4d63f5811610114578063b4d63f581461054b578063b6b0b0971461056b578063c89e42df1461059057600080fd5b8063adc879e91461052e578063b02286c01461054257600080fd5b806399f5634e1161016057806399f5634e146104fc578063a3c573eb14610504578063ab9fc5ef1461052457600080fd5b80638c4a0af7146104cb5780638da5cb5b146104de57600080fd5b8063542028d511610229578063715018a6116101dd57806379847057116101c2578063798470571461049c5780637fcb3653146104a457806381df7d3f146104b857600080fd5b8063715018a6146104815780637152facf1461048957600080fd5b80636766f09d1161020e5780636766f09d1461043b5780636b8616ce1461044e5780636ff512cc1461046e57600080fd5b8063542028d51461042057806355b925e61461042857600080fd5b806327eb6c0f11610280578063423fa85611610265578063423fa856146103aa57806345605267146103ca5780635392c5e0146103f257600080fd5b806327eb6c0f146103525780633c1582671461039757600080fd5b806319d8ac61116102b157806319d8ac61146103085780631c1083e2146103355780632072f6c51461034a57600080fd5b8063107bf28c146102cd57806315064c96146102eb575b600080fd5b6102d56106bc565b6040516102e29190613e09565b60405180910390f35b6065546102f89060ff1681565b60405190151581526020016102e2565b60685461031c9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102e2565b610348610343366004613e4e565b61074a565b005b610348610856565b6070546103729073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e2565b6103486103a5366004613fc3565b610907565b60685461031c9068010000000000000000900467ffffffffffffffff1681565b60685461031c90700100000000000000000000000000000000900467ffffffffffffffff1681565b6104126104003660046140da565b606b6020526000908152604090205481565b6040519081526020016102e2565b6102d56111fe565b61034861043636600461410c565b61120b565b61034861044936600461410c565b6117d4565b61041261045c3660046140da565b60666020526000908152604090205481565b61034861047c366004613e4e565b611e1e565b610348611f38565b6102d561049736600461418f565b611f4a565b610412612180565b60695461031c9067ffffffffffffffff1681565b6103486104c63660046141ea565b6121fa565b6103486104d93660046142e4565b612553565b60335473ffffffffffffffffffffffffffffffffffffffff16610372565b61041261266d565b6071546103729073ffffffffffffffffffffffffffffffffffffffff1681565b61031c62093a8081565b606e5461031c9067ffffffffffffffff1681565b61041261ea6081565b6104126105593660046140da565b60676020526000908152604090205481565b60655461037290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b61034861059e366004614301565b61279e565b6069546103729068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103729073ffffffffffffffffffffffffffffffffffffffff1681565b6103486105fd36600461433e565b612873565b6069546102f8907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610348612f18565b60685461031c907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103729073ffffffffffffffffffffffffffffffffffffffff1681565b610348610695366004614431565b6130a7565b6103486106a8366004613e4e565b6135a7565b61041267016345785d8a000081565b606f80546106c990614476565b80601f01602080910402602001604051908101604052809291908181526020018280546106f590614476565b80156107425780601f1061071757610100808354040283529160200191610742565b820191906000526020600020905b81548152906001019060200180831161072557829003601f168201915b505050505081565b60705473ffffffffffffffffffffffffffffffffffffffff1633146107dc5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff16156108f55760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6108fd613644565b6109056136ab565b565b60655460ff16156109a65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610a3f5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b805160685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015610fef576000878281518110610aa757610aa76144c9565b602002602001015190506000816060015167ffffffffffffffff161115610cc05783610ad281614527565b945050600081600001518051906020012082602001518360600151604051602001610b3593929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610c025760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610cba5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016107d3565b50610e5a565b60208101511580610d6f5750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610d299160040190815260200190565b6020604051808303816000875af1158015610d48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6c919061454e565b15155b610de15760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016107d3565b80515161ea6011610e5a5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016107d3565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610e90575042816040015167ffffffffffffffff1611155b610f285760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012092508480610fd190614527565b95505080604001519550508080610fe790614567565b915050610a8b565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156110925760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016107d3565b6068546000906110c090700100000000000000000000000000000000900467ffffffffffffffff168461459f565b6110d49067ffffffffffffffff16876145c8565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c1693909317939093179290921691909117909155600090815260676020526040902083905590506111b1333061118b8467016345785d8a00006145df565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613735565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d80546106c990614476565b60655460ff16156112aa5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695467ffffffffffffffff90811690881611156113565760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016107d3565b60695467ffffffffffffffff908116908716116114015760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b60205260409020546114b35760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a4016107d3565b60006114c188888888611f4a565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516114f6919061461c565b602060405180830381855afa158015611513573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611536919061454e565b6115409190614667565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916115aa918991899189919060040161467b565b602060405180830381865afa1580156115c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115eb91906146f5565b61165d5760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016107d3565b6069546116bb90339061167a9067ffffffffffffffff168b61459f565b67ffffffffffffffff1661168c61266d565b61169691906145df565b606554610100900473ffffffffffffffffffffffffffffffffffffffff1691906137f3565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b15801561177057600080fd5b505af1158015611784573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60655460ff16156118735760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b8567ffffffffffffffff168767ffffffffffffffff16106119225760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e65774261746368206d75737420626520626960648201527f67676572207468616e20696e69744e756d426174636800000000000000000000608482015260a4016107d3565b60695467ffffffffffffffff90811690871611156119f45760405162461bcd60e51b815260206004820152606260248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e65774261746368206d757374206265206c6560648201527f7373206f7220657175616c207468616e206c617374566572696669656442617460848201527f636800000000000000000000000000000000000000000000000000000000000060a482015260c4016107d3565b67ffffffffffffffff87166000908152606b6020526040902054611aa65760405162461bcd60e51b815260206004820152604e60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d426174636820737461746520726f6f742060648201527f646f6573206e6f74206578697374000000000000000000000000000000000000608482015260a4016107d3565b67ffffffffffffffff86166000908152606b6020526040902054611b585760405162461bcd60e51b815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e6577426174636820737461746520726f6f7460648201527f20646f6573206e6f742065786973740000000000000000000000000000000000608482015260a4016107d3565b6000611b6688888888611f4a565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051611b9b919061461c565b602060405180830381855afa158015611bb8573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611bdb919061454e565b611be59190614667565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611c4f918991899189919060040161467b565b602060405180830381865afa158015611c6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c9091906146f5565b611d025760405162461bcd60e51b815260206004820152603560248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20494e56414c49445f50524f4f46000000000000000000000060648201526084016107d3565b67ffffffffffffffff88166000908152606b6020526040902054869003611db75760405162461bcd60e51b815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2073746f72656420726f6f74206d757374206265206469666660648201527f6572656e74207468616e206e657720737461746520726f6f7400000000000000608482015260a4016107d3565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527fe579d6d18f02941e1d0f59bff70f1b2c894edc991badab38343786df2846fe55910160405180910390a1611e136136ab565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611eb75760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161084b565b611f40613644565b610905600061384e565b67ffffffffffffffff808516600081815260676020526040808220549387168252902054606092911580611f7d57508115155b6120155760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b806120ae5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b60685460009067ffffffffffffffff70010000000000000000000000000000000082048116916121cf917801000000000000000000000000000000000000000000000000909104166001614712565b6121d9919061459f565b6121f59067ffffffffffffffff16670de0b6b3a76400006145df565b905090565b600054610100900460ff161580801561221a5750600054600160ff909116105b806122345750303b158015612234575060005460ff166001145b6122a65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107d3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561230457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d612443878261478c565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f612484858261478c565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560708054928516929091169190911790556124e26138c5565b801561254557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146125ec5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061084b90831515815260200190565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156126e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612708919061454e565b60695460685491925060009167ffffffffffffffff9182169168010000000000000000820481169161276d917001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041661459f565b6127779190614712565b612781919061459f565b67ffffffffffffffff1690506127978183614888565b9250505090565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146128375760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606d612843828261478c565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161084b9190613e09565b60655460ff16156129125760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146129d55760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180612a705760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60685467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612abb91849170010000000000000000000000000000000090041661489c565b1115612b2f5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016107d3565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b84811015612e48576000868281518110612b8f57612b8f6144c9565b602002602001015190508380612ba490614527565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114612cc55760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016107d3565b612cd06001886145c8565b8303612d8e574262093a808360400151612cea9190614712565b67ffffffffffffffff161115612d8e5760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016107d3565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612e3090614527565b96505050508080612e4090614567565b915050612b73565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612f905760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b60705473ffffffffffffffffffffffffffffffffffffffff16331461301d5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561308757600080fd5b505af115801561309b573d6000803e3d6000fd5b5050505061090561394b565b60655460ff16156131465760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146132095760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b6000613213612180565b90508181111561328b5760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016107d3565b61ea608351106133035760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016107d3565b60655461332d90610100900473ffffffffffffffffffffffffffffffffffffffff16333084613735565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa15801561339d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133c1919061454e565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff169060186133fb83614527565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161347493929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000908152606690935291205532330361354457606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26135a1565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613598939291906148b4565b60405180910390a25b50505050565b6135af613644565b73ffffffffffffffffffffffffffffffffffffffff81166136385760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107d3565b6136418161384e565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109055760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561371557600080fd5b505af1158015613729573d6000803e3d6000fd5b50505050610905613a16565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526135a19085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613b0b565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526138499084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161378f565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166139425760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107d3565b6109053361384e565b60655460ff166139c35760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff1615613ab55760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6000613b6d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613bfd9092919063ffffffff16565b8051909150156138495780806020019051810190613b8b91906146f5565b6138495760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107d3565b6060613c0c8484600085613c16565b90505b9392505050565b606082471015613c8e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016107d3565b73ffffffffffffffffffffffffffffffffffffffff85163b613cf25760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107d3565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613d1b919061461c565b60006040518083038185875af1925050503d8060008114613d58576040519150601f19603f3d011682016040523d82523d6000602084013e613d5d565b606091505b5091509150613d6d828286613d78565b979650505050505050565b60608315613d87575081613c0f565b825115613d975782518084602001fd5b8160405162461bcd60e51b81526004016107d39190613e09565b60005b83811015613dcc578181015183820152602001613db4565b838111156135a15750506000910152565b60008151808452613df5816020860160208601613db1565b601f01601f19169290920160200192915050565b602081526000613c0f6020830184613ddd565b73ffffffffffffffffffffffffffffffffffffffff8116811461364157600080fd5b8035613e4981613e1c565b919050565b600060208284031215613e6057600080fd5b8135613c0f81613e1c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613ebd57613ebd613e6b565b60405290565b6040516060810167ffffffffffffffff81118282101715613ebd57613ebd613e6b565b604051601f8201601f1916810167ffffffffffffffff81118282101715613f0f57613f0f613e6b565b604052919050565b600067ffffffffffffffff821115613f3157613f31613e6b565b5060051b60200190565b600082601f830112613f4c57600080fd5b813567ffffffffffffffff811115613f6657613f66613e6b565b613f796020601f19601f84011601613ee6565b818152846020838601011115613f8e57600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613e4957600080fd5b60006020808385031215613fd657600080fd5b823567ffffffffffffffff80821115613fee57600080fd5b818501915085601f83011261400257600080fd5b813561401561401082613f17565b613ee6565b81815260059190911b8301840190848101908883111561403457600080fd5b8585015b838110156140cd578035858111156140505760008081fd5b86016080818c03601f19018113156140685760008081fd5b614070613e9a565b89830135888111156140825760008081fd5b6140908e8c83870101613f3b565b8252506040808401358b83015260606140aa818601613fab565b828401526140b9848601613fab565b908301525085525050918601918601614038565b5098975050505050505050565b6000602082840312156140ec57600080fd5b613c0f82613fab565b806040810183101561410657600080fd5b92915050565b6000806000806000806000610180888a03121561412857600080fd5b61413188613fab565b965061413f60208901613fab565b9550604088013594506060880135935061415c8960808a016140f5565b925061014088018981111561417057600080fd5b60c0890192506141808a826140f5565b91505092959891949750929550565b600080600080608085870312156141a557600080fd5b6141ae85613fab565b93506141bc60208601613fab565b93969395505050506040820135916060013590565b801515811461364157600080fd5b8035613e49816141d1565b60008060008060008060008060008060006101608c8e03121561420c57600080fd5b6142158c613e3e565b9a5061422360208d01613e3e565b995061423160408d01613e3e565b985060608c0135975061424660808d01613e3e565b965061425460a08d016141df565b955067ffffffffffffffff8060c08e0135111561427057600080fd5b6142808e60c08f01358f01613f3b565b955061428e60e08e01613fab565b9450806101008e013511156142a257600080fd5b506142b48d6101008e01358e01613f3b565b92506142c36101208d01613e3e565b91506142d26101408d01613e3e565b90509295989b509295989b9093969950565b6000602082840312156142f657600080fd5b8135613c0f816141d1565b60006020828403121561431357600080fd5b813567ffffffffffffffff81111561432a57600080fd5b61433684828501613f3b565b949350505050565b6000602080838503121561435157600080fd5b823567ffffffffffffffff8082111561436957600080fd5b818501915085601f83011261437d57600080fd5b813561438b61401082613f17565b81815260059190911b830184019084810190888311156143aa57600080fd5b8585015b838110156140cd578035858111156143c65760008081fd5b86016060818c03601f19018113156143de5760008081fd5b6143e6613ec3565b89830135888111156143f85760008081fd5b6144068e8c83870101613f3b565b8252506040808401358b83015261441e838501613fab565b90820152855250509186019186016143ae565b6000806040838503121561444457600080fd5b823567ffffffffffffffff81111561445b57600080fd5b61446785828601613f3b565b95602094909401359450505050565b600181811c9082168061448a57607f821691505b6020821081036144c3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614544576145446144f8565b6001019392505050565b60006020828403121561456057600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614598576145986144f8565b5060010190565b600067ffffffffffffffff838116908316818110156145c0576145c06144f8565b039392505050565b6000828210156145da576145da6144f8565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614617576146176144f8565b500290565b6000825161462e818460208701613db1565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261467657614676614638565b500690565b61012081016040808784376000838201818152879190815b60028110156146b357848483379084018281529284019290600101614693565b5050828760c0870137610100850181815286935091505b60018110156146e95782518252602092830192909101906001016146ca565b50505095945050505050565b60006020828403121561470757600080fd5b8151613c0f816141d1565b600067ffffffffffffffff808316818516808303821115614735576147356144f8565b01949350505050565b601f82111561384957600081815260208120601f850160051c810160208610156147655750805b601f850160051c820191505b8181101561478457828155600101614771565b505050505050565b815167ffffffffffffffff8111156147a6576147a6613e6b565b6147ba816147b48454614476565b8461473e565b602080601f83116001811461480d57600084156147d75750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614784565b600085815260208120601f198616915b8281101561483c5788860151825594840194600190910190840161481d565b508582101561487857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008261489757614897614638565b500490565b600082198211156148af576148af6144f8565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006148e96060830184613ddd565b9594505050505056fea26469706673582212203146999accd90085aed82493dac693741e15c8a3fe634147953b164c9909fc4764736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5061494a806100206000396000f3fe608060405234801561001057600080fd5b50600436106102c85760003560e01c80638da5cb5b1161017b578063cfa8ed47116100d8578063e7a7ed021161008c578063eaeb077b11610071578063eaeb077b14610687578063f2fde38b1461069a578063f7552761146106ad57600080fd5b8063e7a7ed0214610637578063e8bf92ed1461066757600080fd5b8063d8d1091b116100bd578063d8d1091b146105ef578063d8f54db014610602578063dbc169761461062f57600080fd5b8063cfa8ed47146105a3578063d02103ca146105cf57600080fd5b8063b02286c01161012f578063b6b0b09711610114578063b6b0b09714610558578063c3fd0f9c1461057d578063c89e42df1461059057600080fd5b8063b02286c01461052f578063b4d63f581461053857600080fd5b8063a3c573eb11610160578063a3c573eb146104f1578063ab9fc5ef14610511578063adc879e91461051b57600080fd5b80638da5cb5b146104cb57806399f5634e146104e957600080fd5b8063542028d5116102295780637152facf116101dd5780637fcb3653116101c25780637fcb36531461049157806381df7d3f146104a55780638c4a0af7146104b857600080fd5b80637152facf14610476578063798470571461048957600080fd5b80636b8616ce1161020e5780636b8616ce1461043b5780636ff512cc1461045b578063715018a61461046e57600080fd5b8063542028d51461042057806355b925e61461042857600080fd5b806327eb6c0f11610280578063423fa85611610265578063423fa856146103aa57806345605267146103ca5780635392c5e0146103f257600080fd5b806327eb6c0f146103525780633c1582671461039757600080fd5b806319d8ac61116102b157806319d8ac61146103085780631c1083e2146103355780632072f6c51461034a57600080fd5b8063107bf28c146102cd57806315064c96146102eb575b600080fd5b6102d56106bc565b6040516102e29190613e2c565b60405180910390f35b6065546102f89060ff1681565b60405190151581526020016102e2565b60685461031c9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102e2565b610348610343366004613e78565b61074a565b005b610348610856565b6070546103729073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e2565b6103486103a5366004613fed565b610907565b60685461031c9068010000000000000000900467ffffffffffffffff1681565b60685461031c90700100000000000000000000000000000000900467ffffffffffffffff1681565b610412610400366004614104565b606b6020526000908152604090205481565b6040519081526020016102e2565b6102d5611297565b610348610436366004614136565b6112a4565b610412610449366004614104565b60666020526000908152604090205481565b610348610469366004613e78565b61186d565b610348611987565b6102d56104843660046141b9565b611999565b610412611bd0565b60695461031c9067ffffffffffffffff1681565b6103486104b3366004614214565b611c4a565b6103486104c636600461430e565b611fa3565b60335473ffffffffffffffffffffffffffffffffffffffff16610372565b6104126120bd565b6071546103729073ffffffffffffffffffffffffffffffffffffffff1681565b61031c62093a8081565b606e5461031c9067ffffffffffffffff1681565b61041261ea6081565b610412610546366004614104565b60676020526000908152604090205481565b60655461037290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b61034861058b366004614136565b6121ee565b61034861059e36600461432b565b612838565b6069546103729068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103729073ffffffffffffffffffffffffffffffffffffffff1681565b6103486105fd366004614360565b61290d565b6069546102f8907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610348612fb2565b60685461031c907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103729073ffffffffffffffffffffffffffffffffffffffff1681565b610348610695366004614453565b613141565b6103486106a8366004613e78565b613641565b61041267016345785d8a000081565b606f80546106c990614498565b80601f01602080910402602001604051908101604052809291908181526020018280546106f590614498565b80156107425780601f1061071757610100808354040283529160200191610742565b820191906000526020600020905b81548152906001019060200180831161072557829003601f168201915b505050505081565b60705473ffffffffffffffffffffffffffffffffffffffff1633146107dc5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff16156108f55760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6108fd6136de565b610905613745565b565b60655460ff16156109a65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610a3f5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b805180610ada5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015611088576000878281518110610b4057610b406144eb565b602002602001015190506000816060015167ffffffffffffffff161115610d595783610b6b81614549565b945050600081600001518051906020012082602001518360600151604051602001610bce93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610c9b5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610d535760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016107d3565b50610ef3565b60208101511580610e085750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610dc29160040190815260200190565b6020604051808303816000875af1158015610de1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e059190614570565b15155b610e7a5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016107d3565b80515161ea6011610ef35760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016107d3565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610f29575042816040015167ffffffffffffffff1611155b610fc15760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061106a90614549565b9550508060400151955050808061108090614589565b915050610b24565b5060685467ffffffffffffffff78010000000000000000000000000000000000000000000000009091048116908316111561112b5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016107d3565b60685460009061115990700100000000000000000000000000000000900467ffffffffffffffff16846145c1565b61116d9067ffffffffffffffff16876145ea565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061124a33306112248467016345785d8a0000614601565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169291906137cf565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d80546106c990614498565b60655460ff16156113435760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695467ffffffffffffffff90811690881611156113ef5760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016107d3565b60695467ffffffffffffffff9081169087161161149a5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b602052604090205461154c5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a4016107d3565b600061155a88888888611999565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161158f919061463e565b602060405180830381855afa1580156115ac573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906115cf9190614570565b6115d99190614689565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611643918991899189919060040161469d565b602060405180830381865afa158015611660573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116849190614717565b6116f65760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016107d3565b6069546117549033906117139067ffffffffffffffff168b6145c1565b67ffffffffffffffff166117256120bd565b61172f9190614601565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16919061388d565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b15801561180957600080fd5b505af115801561181d573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146119065760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161084b565b61198f6136de565b61090560006138e8565b67ffffffffffffffff8085166000818152606760205260408082205493871682529020546060929115806119cc57508115155b611a645760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b80611afd5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec01604051602081830303815290604052925050505b949350505050565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691611c1f917801000000000000000000000000000000000000000000000000909104166001614734565b611c2991906145c1565b611c459067ffffffffffffffff16670de0b6b3a7640000614601565b905090565b600054610100900460ff1615808015611c6a5750600054600160ff909116105b80611c845750303b158015611c84575060005460ff166001145b611cf65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107d3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611d5457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d611e9387826147ae565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f611ed485826147ae565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556070805492851692909116919091179055611f3261395f565b8015611f9557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461203c5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061084b90831515815260200190565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612134573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121589190614570565b60695460685491925060009167ffffffffffffffff918216916801000000000000000082048116916121bd91700100000000000000000000000000000000820481169178010000000000000000000000000000000000000000000000009004166145c1565b6121c79190614734565b6121d191906145c1565b67ffffffffffffffff1690506121e781836148aa565b9250505090565b60655460ff161561228d5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b8567ffffffffffffffff168767ffffffffffffffff161061233c5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a4016107d3565b60695467ffffffffffffffff908116908716111561240e5760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c4016107d3565b67ffffffffffffffff87166000908152606b60205260409020546124c05760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a4016107d3565b67ffffffffffffffff86166000908152606b60205260409020546125725760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a4016107d3565b600061258088888888611999565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516125b5919061463e565b602060405180830381855afa1580156125d2573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906125f59190614570565b6125ff9190614689565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91612669918991899189919060040161469d565b602060405180830381865afa158015612686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126aa9190614717565b61271c5760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f460000000060648201526084016107d3565b67ffffffffffffffff88166000908152606b60205260409020548690036127d15760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a4016107d3565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a161282d613745565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146128d15760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606d6128dd82826147ae565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161084b9190613e2c565b60655460ff16156129ac5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612a6f5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180612b0a5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60685467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612b559184917001000000000000000000000000000000009004166148be565b1115612bc95760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016107d3565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b84811015612ee2576000868281518110612c2957612c296144eb565b602002602001015190508380612c3e90614549565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114612d5f5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016107d3565b612d6a6001886145ea565b8303612e28574262093a808360400151612d849190614734565b67ffffffffffffffff161115612e285760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016107d3565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612eca90614549565b96505050508080612eda90614589565b915050612c0d565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff1661302a5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b60705473ffffffffffffffffffffffffffffffffffffffff1633146130b75760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561312157600080fd5b505af1158015613135573d6000803e3d6000fd5b505050506109056139e5565b60655460ff16156131e05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146132a35760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b60006132ad611bd0565b9050818111156133255760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016107d3565b61ea6083511061339d5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016107d3565b6065546133c790610100900473ffffffffffffffffffffffffffffffffffffffff163330846137cf565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345b9190614570565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff1690601861349583614549565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161350e93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260669093529120553233036135de57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261363b565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613632939291906148d6565b60405180910390a25b50505050565b6136496136de565b73ffffffffffffffffffffffffffffffffffffffff81166136d25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107d3565b6136db816138e8565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109055760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156137af57600080fd5b505af11580156137c3573d6000803e3d6000fd5b50505050610905613ab0565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261363b9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613ba5565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526138e39084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401613829565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166139dc5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107d3565b610905336138e8565b60655460ff16613a5d5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff1615613b4f5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6000613c07826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613c979092919063ffffffff16565b8051909150156138e35780806020019051810190613c259190614717565b6138e35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107d3565b6060611bc88484600085856000808673ffffffffffffffffffffffffffffffffffffffff168587604051613ccb919061463e565b60006040518083038185875af1925050503d8060008114613d08576040519150601f19603f3d011682016040523d82523d6000602084013e613d0d565b606091505b5091509150613d1e87838387613d29565b979650505050505050565b60608315613da5578251600003613d9e5773ffffffffffffffffffffffffffffffffffffffff85163b613d9e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107d3565b5081611bc8565b611bc88383815115613dba5781518083602001fd5b8060405162461bcd60e51b81526004016107d39190613e2c565b60005b83811015613def578181015183820152602001613dd7565b8381111561363b5750506000910152565b60008151808452613e18816020860160208601613dd4565b601f01601f19169290920160200192915050565b602081526000613e3f6020830184613e00565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146136db57600080fd5b8035613e7381613e46565b919050565b600060208284031215613e8a57600080fd5b8135613e3f81613e46565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613ee757613ee7613e95565b60405290565b6040516060810167ffffffffffffffff81118282101715613ee757613ee7613e95565b604051601f8201601f1916810167ffffffffffffffff81118282101715613f3957613f39613e95565b604052919050565b600067ffffffffffffffff821115613f5b57613f5b613e95565b5060051b60200190565b600082601f830112613f7657600080fd5b813567ffffffffffffffff811115613f9057613f90613e95565b613fa36020601f19601f84011601613f10565b818152846020838601011115613fb857600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613e7357600080fd5b6000602080838503121561400057600080fd5b823567ffffffffffffffff8082111561401857600080fd5b818501915085601f83011261402c57600080fd5b813561403f61403a82613f41565b613f10565b81815260059190911b8301840190848101908883111561405e57600080fd5b8585015b838110156140f75780358581111561407a5760008081fd5b86016080818c03601f19018113156140925760008081fd5b61409a613ec4565b89830135888111156140ac5760008081fd5b6140ba8e8c83870101613f65565b8252506040808401358b83015260606140d4818601613fd5565b828401526140e3848601613fd5565b908301525085525050918601918601614062565b5098975050505050505050565b60006020828403121561411657600080fd5b613e3f82613fd5565b806040810183101561413057600080fd5b92915050565b6000806000806000806000610180888a03121561415257600080fd5b61415b88613fd5565b965061416960208901613fd5565b955060408801359450606088013593506141868960808a0161411f565b925061014088018981111561419a57600080fd5b60c0890192506141aa8a8261411f565b91505092959891949750929550565b600080600080608085870312156141cf57600080fd5b6141d885613fd5565b93506141e660208601613fd5565b93969395505050506040820135916060013590565b80151581146136db57600080fd5b8035613e73816141fb565b60008060008060008060008060008060006101608c8e03121561423657600080fd5b61423f8c613e68565b9a5061424d60208d01613e68565b995061425b60408d01613e68565b985060608c0135975061427060808d01613e68565b965061427e60a08d01614209565b955067ffffffffffffffff8060c08e0135111561429a57600080fd5b6142aa8e60c08f01358f01613f65565b95506142b860e08e01613fd5565b9450806101008e013511156142cc57600080fd5b506142de8d6101008e01358e01613f65565b92506142ed6101208d01613e68565b91506142fc6101408d01613e68565b90509295989b509295989b9093969950565b60006020828403121561432057600080fd5b8135613e3f816141fb565b60006020828403121561433d57600080fd5b813567ffffffffffffffff81111561435457600080fd5b611bc884828501613f65565b6000602080838503121561437357600080fd5b823567ffffffffffffffff8082111561438b57600080fd5b818501915085601f83011261439f57600080fd5b81356143ad61403a82613f41565b81815260059190911b830184019084810190888311156143cc57600080fd5b8585015b838110156140f7578035858111156143e85760008081fd5b86016060818c03601f19018113156144005760008081fd5b614408613eed565b898301358881111561441a5760008081fd5b6144288e8c83870101613f65565b8252506040808401358b830152614440838501613fd5565b90820152855250509186019186016143d0565b6000806040838503121561446657600080fd5b823567ffffffffffffffff81111561447d57600080fd5b61448985828601613f65565b95602094909401359450505050565b600181811c908216806144ac57607f821691505b6020821081036144e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036145665761456661451a565b6001019392505050565b60006020828403121561458257600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036145ba576145ba61451a565b5060010190565b600067ffffffffffffffff838116908316818110156145e2576145e261451a565b039392505050565b6000828210156145fc576145fc61451a565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146395761463961451a565b500290565b60008251614650818460208701613dd4565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826146985761469861465a565b500690565b61012081016040808784376000838201818152879190815b60028110156146d5578484833790840182815292840192906001016146b5565b5050828760c0870137610100850181815286935091505b600181101561470b5782518252602092830192909101906001016146ec565b50505095945050505050565b60006020828403121561472957600080fd5b8151613e3f816141fb565b600067ffffffffffffffff8083168185168083038211156147575761475761451a565b01949350505050565b601f8211156138e357600081815260208120601f850160051c810160208610156147875750805b601f850160051c820191505b818110156147a657828155600101614793565b505050505050565b815167ffffffffffffffff8111156147c8576147c8613e95565b6147dc816147d68454614498565b84614760565b602080601f83116001811461482f57600084156147f95750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556147a6565b600085815260208120601f198616915b8281101561485e5788860151825594840194600190910190840161483f565b508582101561489a57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000826148b9576148b961465a565b500490565b600082198211156148d1576148d161451a565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff8316602082015260606040820152600061490b6060830184613e00565b9594505050505056fea26469706673582212207c6b25ea7b3ac634e02bf0cce36a2d1a9ef1d74d076f5577d417755d876e61f664736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102c85760003560e01c80638da5cb5b1161017b578063cfa8ed47116100d8578063e7a7ed021161008c578063eaeb077b11610071578063eaeb077b14610687578063f2fde38b1461069a578063f7552761146106ad57600080fd5b8063e7a7ed0214610637578063e8bf92ed1461066757600080fd5b8063d8d1091b116100bd578063d8d1091b146105ef578063d8f54db014610602578063dbc169761461062f57600080fd5b8063cfa8ed47146105a3578063d02103ca146105cf57600080fd5b8063b02286c01161012f578063b6b0b09711610114578063b6b0b09714610558578063c3fd0f9c1461057d578063c89e42df1461059057600080fd5b8063b02286c01461052f578063b4d63f581461053857600080fd5b8063a3c573eb11610160578063a3c573eb146104f1578063ab9fc5ef14610511578063adc879e91461051b57600080fd5b80638da5cb5b146104cb57806399f5634e146104e957600080fd5b8063542028d5116102295780637152facf116101dd5780637fcb3653116101c25780637fcb36531461049157806381df7d3f146104a55780638c4a0af7146104b857600080fd5b80637152facf14610476578063798470571461048957600080fd5b80636b8616ce1161020e5780636b8616ce1461043b5780636ff512cc1461045b578063715018a61461046e57600080fd5b8063542028d51461042057806355b925e61461042857600080fd5b806327eb6c0f11610280578063423fa85611610265578063423fa856146103aa57806345605267146103ca5780635392c5e0146103f257600080fd5b806327eb6c0f146103525780633c1582671461039757600080fd5b806319d8ac61116102b157806319d8ac61146103085780631c1083e2146103355780632072f6c51461034a57600080fd5b8063107bf28c146102cd57806315064c96146102eb575b600080fd5b6102d56106bc565b6040516102e29190613e2c565b60405180910390f35b6065546102f89060ff1681565b60405190151581526020016102e2565b60685461031c9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102e2565b610348610343366004613e78565b61074a565b005b610348610856565b6070546103729073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e2565b6103486103a5366004613fed565b610907565b60685461031c9068010000000000000000900467ffffffffffffffff1681565b60685461031c90700100000000000000000000000000000000900467ffffffffffffffff1681565b610412610400366004614104565b606b6020526000908152604090205481565b6040519081526020016102e2565b6102d5611297565b610348610436366004614136565b6112a4565b610412610449366004614104565b60666020526000908152604090205481565b610348610469366004613e78565b61186d565b610348611987565b6102d56104843660046141b9565b611999565b610412611bd0565b60695461031c9067ffffffffffffffff1681565b6103486104b3366004614214565b611c4a565b6103486104c636600461430e565b611fa3565b60335473ffffffffffffffffffffffffffffffffffffffff16610372565b6104126120bd565b6071546103729073ffffffffffffffffffffffffffffffffffffffff1681565b61031c62093a8081565b606e5461031c9067ffffffffffffffff1681565b61041261ea6081565b610412610546366004614104565b60676020526000908152604090205481565b60655461037290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b61034861058b366004614136565b6121ee565b61034861059e36600461432b565b612838565b6069546103729068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103729073ffffffffffffffffffffffffffffffffffffffff1681565b6103486105fd366004614360565b61290d565b6069546102f8907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610348612fb2565b60685461031c907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103729073ffffffffffffffffffffffffffffffffffffffff1681565b610348610695366004614453565b613141565b6103486106a8366004613e78565b613641565b61041267016345785d8a000081565b606f80546106c990614498565b80601f01602080910402602001604051908101604052809291908181526020018280546106f590614498565b80156107425780601f1061071757610100808354040283529160200191610742565b820191906000526020600020905b81548152906001019060200180831161072557829003601f168201915b505050505081565b60705473ffffffffffffffffffffffffffffffffffffffff1633146107dc5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff16156108f55760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6108fd6136de565b610905613745565b565b60655460ff16156109a65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610a3f5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b805180610ada5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015611088576000878281518110610b4057610b406144eb565b602002602001015190506000816060015167ffffffffffffffff161115610d595783610b6b81614549565b945050600081600001518051906020012082602001518360600151604051602001610bce93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610c9b5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610d535760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016107d3565b50610ef3565b60208101511580610e085750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610dc29160040190815260200190565b6020604051808303816000875af1158015610de1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e059190614570565b15155b610e7a5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016107d3565b80515161ea6011610ef35760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016107d3565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610f29575042816040015167ffffffffffffffff1611155b610fc15760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061106a90614549565b9550508060400151955050808061108090614589565b915050610b24565b5060685467ffffffffffffffff78010000000000000000000000000000000000000000000000009091048116908316111561112b5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016107d3565b60685460009061115990700100000000000000000000000000000000900467ffffffffffffffff16846145c1565b61116d9067ffffffffffffffff16876145ea565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061124a33306112248467016345785d8a0000614601565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169291906137cf565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d80546106c990614498565b60655460ff16156113435760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695467ffffffffffffffff90811690881611156113ef5760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016107d3565b60695467ffffffffffffffff9081169087161161149a5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b602052604090205461154c5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a4016107d3565b600061155a88888888611999565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161158f919061463e565b602060405180830381855afa1580156115ac573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906115cf9190614570565b6115d99190614689565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611643918991899189919060040161469d565b602060405180830381865afa158015611660573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116849190614717565b6116f65760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016107d3565b6069546117549033906117139067ffffffffffffffff168b6145c1565b67ffffffffffffffff166117256120bd565b61172f9190614601565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16919061388d565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b15801561180957600080fd5b505af115801561181d573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146119065760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161084b565b61198f6136de565b61090560006138e8565b67ffffffffffffffff8085166000818152606760205260408082205493871682529020546060929115806119cc57508115155b611a645760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b80611afd5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec01604051602081830303815290604052925050505b949350505050565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691611c1f917801000000000000000000000000000000000000000000000000909104166001614734565b611c2991906145c1565b611c459067ffffffffffffffff16670de0b6b3a7640000614601565b905090565b600054610100900460ff1615808015611c6a5750600054600160ff909116105b80611c845750303b158015611c84575060005460ff166001145b611cf65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107d3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611d5457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d611e9387826147ae565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f611ed485826147ae565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556070805492851692909116919091179055611f3261395f565b8015611f9557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461203c5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061084b90831515815260200190565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612134573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121589190614570565b60695460685491925060009167ffffffffffffffff918216916801000000000000000082048116916121bd91700100000000000000000000000000000000820481169178010000000000000000000000000000000000000000000000009004166145c1565b6121c79190614734565b6121d191906145c1565b67ffffffffffffffff1690506121e781836148aa565b9250505090565b60655460ff161561228d5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b8567ffffffffffffffff168767ffffffffffffffff161061233c5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a4016107d3565b60695467ffffffffffffffff908116908716111561240e5760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c4016107d3565b67ffffffffffffffff87166000908152606b60205260409020546124c05760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a4016107d3565b67ffffffffffffffff86166000908152606b60205260409020546125725760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a4016107d3565b600061258088888888611999565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516125b5919061463e565b602060405180830381855afa1580156125d2573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906125f59190614570565b6125ff9190614689565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91612669918991899189919060040161469d565b602060405180830381865afa158015612686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126aa9190614717565b61271c5760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f460000000060648201526084016107d3565b67ffffffffffffffff88166000908152606b60205260409020548690036127d15760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a4016107d3565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a161282d613745565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146128d15760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606d6128dd82826147ae565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161084b9190613e2c565b60655460ff16156129ac5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612a6f5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180612b0a5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60685467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612b559184917001000000000000000000000000000000009004166148be565b1115612bc95760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016107d3565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b84811015612ee2576000868281518110612c2957612c296144eb565b602002602001015190508380612c3e90614549565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114612d5f5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016107d3565b612d6a6001886145ea565b8303612e28574262093a808360400151612d849190614734565b67ffffffffffffffff161115612e285760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016107d3565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612eca90614549565b96505050508080612eda90614589565b915050612c0d565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff1661302a5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b60705473ffffffffffffffffffffffffffffffffffffffff1633146130b75760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561312157600080fd5b505af1158015613135573d6000803e3d6000fd5b505050506109056139e5565b60655460ff16156131e05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146132a35760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b60006132ad611bd0565b9050818111156133255760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016107d3565b61ea6083511061339d5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016107d3565b6065546133c790610100900473ffffffffffffffffffffffffffffffffffffffff163330846137cf565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345b9190614570565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff1690601861349583614549565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161350e93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260669093529120553233036135de57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261363b565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613632939291906148d6565b60405180910390a25b50505050565b6136496136de565b73ffffffffffffffffffffffffffffffffffffffff81166136d25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107d3565b6136db816138e8565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109055760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156137af57600080fd5b505af11580156137c3573d6000803e3d6000fd5b50505050610905613ab0565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261363b9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613ba5565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526138e39084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401613829565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166139dc5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107d3565b610905336138e8565b60655460ff16613a5d5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff1615613b4f5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6000613c07826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613c979092919063ffffffff16565b8051909150156138e35780806020019051810190613c259190614717565b6138e35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107d3565b6060611bc88484600085856000808673ffffffffffffffffffffffffffffffffffffffff168587604051613ccb919061463e565b60006040518083038185875af1925050503d8060008114613d08576040519150601f19603f3d011682016040523d82523d6000602084013e613d0d565b606091505b5091509150613d1e87838387613d29565b979650505050505050565b60608315613da5578251600003613d9e5773ffffffffffffffffffffffffffffffffffffffff85163b613d9e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107d3565b5081611bc8565b611bc88383815115613dba5781518083602001fd5b8060405162461bcd60e51b81526004016107d39190613e2c565b60005b83811015613def578181015183820152602001613dd7565b8381111561363b5750506000910152565b60008151808452613e18816020860160208601613dd4565b601f01601f19169290920160200192915050565b602081526000613e3f6020830184613e00565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146136db57600080fd5b8035613e7381613e46565b919050565b600060208284031215613e8a57600080fd5b8135613e3f81613e46565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613ee757613ee7613e95565b60405290565b6040516060810167ffffffffffffffff81118282101715613ee757613ee7613e95565b604051601f8201601f1916810167ffffffffffffffff81118282101715613f3957613f39613e95565b604052919050565b600067ffffffffffffffff821115613f5b57613f5b613e95565b5060051b60200190565b600082601f830112613f7657600080fd5b813567ffffffffffffffff811115613f9057613f90613e95565b613fa36020601f19601f84011601613f10565b818152846020838601011115613fb857600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613e7357600080fd5b6000602080838503121561400057600080fd5b823567ffffffffffffffff8082111561401857600080fd5b818501915085601f83011261402c57600080fd5b813561403f61403a82613f41565b613f10565b81815260059190911b8301840190848101908883111561405e57600080fd5b8585015b838110156140f75780358581111561407a5760008081fd5b86016080818c03601f19018113156140925760008081fd5b61409a613ec4565b89830135888111156140ac5760008081fd5b6140ba8e8c83870101613f65565b8252506040808401358b83015260606140d4818601613fd5565b828401526140e3848601613fd5565b908301525085525050918601918601614062565b5098975050505050505050565b60006020828403121561411657600080fd5b613e3f82613fd5565b806040810183101561413057600080fd5b92915050565b6000806000806000806000610180888a03121561415257600080fd5b61415b88613fd5565b965061416960208901613fd5565b955060408801359450606088013593506141868960808a0161411f565b925061014088018981111561419a57600080fd5b60c0890192506141aa8a8261411f565b91505092959891949750929550565b600080600080608085870312156141cf57600080fd5b6141d885613fd5565b93506141e660208601613fd5565b93969395505050506040820135916060013590565b80151581146136db57600080fd5b8035613e73816141fb565b60008060008060008060008060008060006101608c8e03121561423657600080fd5b61423f8c613e68565b9a5061424d60208d01613e68565b995061425b60408d01613e68565b985060608c0135975061427060808d01613e68565b965061427e60a08d01614209565b955067ffffffffffffffff8060c08e0135111561429a57600080fd5b6142aa8e60c08f01358f01613f65565b95506142b860e08e01613fd5565b9450806101008e013511156142cc57600080fd5b506142de8d6101008e01358e01613f65565b92506142ed6101208d01613e68565b91506142fc6101408d01613e68565b90509295989b509295989b9093969950565b60006020828403121561432057600080fd5b8135613e3f816141fb565b60006020828403121561433d57600080fd5b813567ffffffffffffffff81111561435457600080fd5b611bc884828501613f65565b6000602080838503121561437357600080fd5b823567ffffffffffffffff8082111561438b57600080fd5b818501915085601f83011261439f57600080fd5b81356143ad61403a82613f41565b81815260059190911b830184019084810190888311156143cc57600080fd5b8585015b838110156140f7578035858111156143e85760008081fd5b86016060818c03601f19018113156144005760008081fd5b614408613eed565b898301358881111561441a5760008081fd5b6144288e8c83870101613f65565b8252506040808401358b830152614440838501613fd5565b90820152855250509186019186016143d0565b6000806040838503121561446657600080fd5b823567ffffffffffffffff81111561447d57600080fd5b61448985828601613f65565b95602094909401359450505050565b600181811c908216806144ac57607f821691505b6020821081036144e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036145665761456661451a565b6001019392505050565b60006020828403121561458257600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036145ba576145ba61451a565b5060010190565b600067ffffffffffffffff838116908316818110156145e2576145e261451a565b039392505050565b6000828210156145fc576145fc61451a565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146395761463961451a565b500290565b60008251614650818460208701613dd4565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826146985761469861465a565b500690565b61012081016040808784376000838201818152879190815b60028110156146d5578484833790840182815292840192906001016146b5565b5050828760c0870137610100850181815286935091505b600181101561470b5782518252602092830192909101906001016146ec565b50505095945050505050565b60006020828403121561472957600080fd5b8151613e3f816141fb565b600067ffffffffffffffff8083168185168083038211156147575761475761451a565b01949350505050565b601f8211156138e357600081815260208120601f850160051c810160208610156147875750805b601f850160051c820191505b818110156147a657828155600101614793565b505050505050565b815167ffffffffffffffff8111156147c8576147c8613e95565b6147dc816147d68454614498565b84614760565b602080601f83116001811461482f57600084156147f95750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556147a6565b600085815260208120601f198616915b8281101561485e5788860151825594840194600190910190840161483f565b508582101561489a57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000826148b9576148b961465a565b500490565b600082198211156148d1576148d161451a565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff8316602082015260606040820152600061490b6060830184613e00565b9594505050505056fea26469706673582212207c6b25ea7b3ac634e02bf0cce36a2d1a9ef1d74d076f5577d417755d876e61f664736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/ProofOfEfficiencyMock.json b/compiled-contracts/ProofOfEfficiencyMock.json index f042c11ab..6cc13b143 100644 --- a/compiled-contracts/ProofOfEfficiencyMock.json +++ b/compiled-contracts/ProofOfEfficiencyMock.json @@ -94,7 +94,7 @@ "type": "bytes32" } ], - "name": "ProofDifferentState", + "name": "ProveNonDeterministicState", "type": "event" }, { @@ -712,7 +712,7 @@ "type": "uint256[2]" } ], - "name": "proofDifferentState", + "name": "proveNonDeterministicState", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -1100,8 +1100,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506151d6806100206000396000f3fe608060405234801561001057600080fd5b506004361061032b5760003560e01c80638c4a0af7116101b2578063c89e42df116100f9578063dbc16976116100a2578063eaeb077b1161007c578063eaeb077b14610810578063f2fde38b14610823578063f755276114610836578063fe16564f1461084557600080fd5b8063dbc16976146107b8578063e7a7ed02146107c0578063e8bf92ed146107f057600080fd5b8063d0ae98dd116100d3578063d0ae98dd14610765578063d8d1091b14610778578063d8f54db01461078b57600080fd5b8063c89e42df14610706578063cfa8ed4714610719578063d02103ca1461074557600080fd5b8063ab9fc5ef1161015b578063b4d63f5811610135578063b4d63f58146106ae578063b6b0b097146106ce578063c0cad302146106f357600080fd5b8063ab9fc5ef14610687578063adc879e914610691578063b02286c0146106a557600080fd5b806399f5634e1161018c57806399f5634e1461064c5780639b79676014610654578063a3c573eb1461066757600080fd5b80638c4a0af7146106085780638da5cb5b1461061b57806396dc3d391461063957600080fd5b80635437988d11610276578063715018a61161021f57806379847057116101f957806379847057146105d95780637fcb3653146105e157806381df7d3f146105f557600080fd5b8063715018a6146105ab5780637152facf146105b3578063748608de146105c657600080fd5b80636766f09d116102505780636766f09d146105655780636b8616ce146105785780636ff512cc1461059857600080fd5b80635437988d1461049e57806355b925e6146104b1578063574f649e146104c457600080fd5b806327eb6c0f116102d857806345605267116102b257806345605267146104405780635392c5e014610468578063542028d51461049657600080fd5b806327eb6c0f146103c85780633c1582671461040d578063423fa8561461042057600080fd5b80631a26da14116103095780631a26da14146103985780631c1083e2146103ad5780632072f6c5146103c057600080fd5b8063107bf28c1461033057806315064c961461034e57806319d8ac611461036b575b600080fd5b610338610858565b60405161034591906145eb565b60405180910390f35b60655461035b9060ff1681565b6040519015158152602001610345565b60685461037f9067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610345565b6103ab6103a636600461461b565b6108e6565b005b6103ab6103bb366004614672565b61090b565b6103ab610a17565b6070546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610345565b6103ab61041b3660046147cf565b610ac8565b60685461037f9068010000000000000000900467ffffffffffffffff1681565b60685461037f90700100000000000000000000000000000000900467ffffffffffffffff1681565b6104886104763660046148e6565b606b6020526000908152604090205481565b604051908152602001610345565b6103386113bf565b6103ab6104ac366004614672565b6113cc565b6103ab6104bf366004614918565b61141b565b6104886104d236600461499b565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b6103ab610573366004614918565b6119e4565b6104886105863660046148e6565b60666020526000908152604090205481565b6103ab6105a6366004614672565b61202e565b6103ab612148565b6103386105c1366004614a11565b61215a565b6103ab6105d4366004614918565b612390565b6104886125f9565b60695461037f9067ffffffffffffffff1681565b6103ab610603366004614a6c565b612673565b6103ab610616366004614b66565b6129cc565b60335473ffffffffffffffffffffffffffffffffffffffff166103e8565b6103ab6106473660046148e6565b612ae6565b610488612b29565b6103ab6106623660046148e6565b612c5a565b6071546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b61037f62093a8081565b606e5461037f9067ffffffffffffffff1681565b61048861ea6081565b6104886106bc3660046148e6565b60676020526000908152604090205481565b6065546103e890610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6103ab610701366004614b83565b612ca9565b6103ab610714366004614b83565b612cc1565b6069546103e89068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b610488610773366004614a11565b612d96565b6103ab610786366004614bc0565b613042565b60695461035b907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b6103ab6136e7565b60685461037f907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b6103ab61081e366004614cb3565b613876565b6103ab610831366004614672565b613d76565b61048867016345785d8a000081565b6103ab610853366004614cf8565b613e13565b606f805461086590614d24565b80601f016020809104026020016040519081016040528092919081815260200182805461089190614d24565b80156108de5780601f106108b3576101008083540402835291602001916108de565b820191906000526020600020905b8154815290600101906020018083116108c157829003601f168201915b505050505081565b6108ee613e36565b67ffffffffffffffff909116600090815260676020526040902055565b60705473ffffffffffffffffffffffffffffffffffffffff16331461099d5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff1615610ab65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b610abe613e36565b610ac6613e9d565b565b60655460ff1615610b675760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610c005760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b805160685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b858110156111b0576000878281518110610c6857610c68614d77565b602002602001015190506000816060015167ffffffffffffffff161115610e815783610c9381614dd5565b945050600081600001518051906020012082602001518360600151604051602001610cf693929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610dc35760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610e7b5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610994565b5061101b565b60208101511580610f305750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610eea9160040190815260200190565b6020604051808303816000875af1158015610f09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2d9190614dfc565b15155b610fa25760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610994565b80515161ea601161101b5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610994565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015611051575042816040015167ffffffffffffffff1611155b6110e95760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061119290614dd5565b955050806040015195505080806111a890614e15565b915050610c4c565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156112535760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610994565b60685460009061128190700100000000000000000000000000000000900467ffffffffffffffff1684614e4d565b6112959067ffffffffffffffff1687614e76565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c169390931793909317929092169190911790915560009081526067602052604090208390559050611372333061134c8467016345785d8a0000614e8d565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613f27565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d805461086590614d24565b6113d4613e36565b606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60655460ff16156114ba5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff90811690881611156115665760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a401610994565b60695467ffffffffffffffff908116908716116116115760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b60205260409020546116c35760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a401610994565b60006116d18888888861215a565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516117069190614eca565b602060405180830381855afa158015611723573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906117469190614dfc565b6117509190614f15565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916117ba9189918991899190600401614f29565b602060405180830381865afa1580156117d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117fb9190614fa3565b61186d5760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610994565b6069546118cb90339061188a9067ffffffffffffffff168b614e4d565b67ffffffffffffffff1661189c612b29565b6118a69190614e8d565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169190613fe5565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b15801561198057600080fd5b505af1158015611994573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60655460ff1615611a835760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8567ffffffffffffffff168767ffffffffffffffff1610611b325760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e65774261746368206d75737420626520626960648201527f67676572207468616e20696e69744e756d426174636800000000000000000000608482015260a401610994565b60695467ffffffffffffffff9081169087161115611c045760405162461bcd60e51b815260206004820152606260248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e65774261746368206d757374206265206c6560648201527f7373206f7220657175616c207468616e206c617374566572696669656442617460848201527f636800000000000000000000000000000000000000000000000000000000000060a482015260c401610994565b67ffffffffffffffff87166000908152606b6020526040902054611cb65760405162461bcd60e51b815260206004820152604e60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d426174636820737461746520726f6f742060648201527f646f6573206e6f74206578697374000000000000000000000000000000000000608482015260a401610994565b67ffffffffffffffff86166000908152606b6020526040902054611d685760405162461bcd60e51b815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e6577426174636820737461746520726f6f7460648201527f20646f6573206e6f742065786973740000000000000000000000000000000000608482015260a401610994565b6000611d768888888861215a565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051611dab9190614eca565b602060405180830381855afa158015611dc8573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611deb9190614dfc565b611df59190614f15565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611e5f9189918991899190600401614f29565b602060405180830381865afa158015611e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea09190614fa3565b611f125760405162461bcd60e51b815260206004820152603560248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20494e56414c49445f50524f4f4600000000000000000000006064820152608401610994565b67ffffffffffffffff88166000908152606b6020526040902054869003611fc75760405162461bcd60e51b815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2073746f72656420726f6f74206d757374206265206469666660648201527f6572656e74207468616e206e657720737461746520726f6f7400000000000000608482015260a401610994565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527fe579d6d18f02941e1d0f59bff70f1b2c894edc991badab38343786df2846fe55910160405180910390a1612023613e9d565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146120c75760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610a0c565b612150613e36565b610ac66000614040565b67ffffffffffffffff80851660008181526067602052604080822054938716825290205460609291158061218d57508115155b6122255760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b806122be5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b612398613e36565b60695467ffffffffffffffff90811690881611156124445760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff908116908716116124ef5760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610994565b67ffffffffffffffff808816600090815260676020526040808220549289168252902054816125865760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b806118cb5760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691612648917801000000000000000000000000000000000000000000000000909104166001614fc0565b6126529190614e4d565b61266e9067ffffffffffffffff16670de0b6b3a7640000614e8d565b905090565b600054610100900460ff16158080156126935750600054600160ff909116105b806126ad5750303b1580156126ad575060005460ff166001145b61271f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610994565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561277d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d6128bc878261503a565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f6128fd858261503a565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255607080549285169290911691909117905561295b6140b7565b80156129be57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612a655760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a0c90831515815260200190565b612aee613e36565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612ba0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc49190614dfc565b60695460685491925060009167ffffffffffffffff91821691680100000000000000008204811691612c299170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614e4d565b612c339190614fc0565b612c3d9190614e4d565b67ffffffffffffffff169050612c538183615136565b9250505090565b612c62613e36565b6068805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b612cb1613e36565b606f612cbd828261503a565b5050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612d5a5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606d612d66828261503a565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a0c91906145eb565b60695460009067ffffffffffffffff868116911614612e435760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8467ffffffffffffffff168467ffffffffffffffff1611612ef25760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a401610994565b60685467ffffffffffffffff6801000000000000000090910481169085161115612faa5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6000612fb88686868661215a565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051612fed9190614eca565b602060405180830381855afa15801561300a573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061302d9190614dfc565b6130379190614f15565b979650505050505050565b60655460ff16156130e15760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146131a45760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b80518061323f5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60685467ffffffffffffffff7801000000000000000000000000000000000000000000000000820481169161328a91849170010000000000000000000000000000000090041661514a565b11156132fe5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610994565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b8481101561361757600086828151811061335e5761335e614d77565b60200260200101519050838061337390614dd5565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff88166000908152606690935291205490915081146134945760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610994565b61349f600188614e76565b830361355d574262093a8083604001516134b99190614fc0565b67ffffffffffffffff16111561355d5760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610994565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c0160405160208183030381529060405280519060200120935085806135ff90614dd5565b9650505050808061360f90614e15565b915050613342565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff1661375f5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b60705473ffffffffffffffffffffffffffffffffffffffff1633146137ec5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c0000006064820152608401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561385657600080fd5b505af115801561386a573d6000803e3d6000fd5b50505050610ac661413d565b60655460ff16156139155760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146139d85760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b60006139e26125f9565b905081811115613a5a5760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610994565b61ea60835110613ad25760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610994565b606554613afc90610100900473ffffffffffffffffffffffffffffffffffffffff16333084613f27565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613b6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b909190614dfc565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613bca83614dd5565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505083805190602001208142604051602001613c4393929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526066909352912055323303613d1357606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613d70565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613d6793929190615162565b60405180910390a25b50505050565b613d7e613e36565b73ffffffffffffffffffffffffffffffffffffffff8116613e075760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610994565b613e1081614040565b50565b613e1b613e36565b67ffffffffffffffff166000908152606b6020526040902055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ac65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613f0757600080fd5b505af1158015613f1b573d6000803e3d6000fd5b50505050610ac6614208565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052613d709085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526142fd565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261403b9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401613f81565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166141345760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610994565b610ac633614040565b60655460ff166141b55760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff16156142a75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b600061435f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166143ef9092919063ffffffff16565b80519091501561403b578080602001905181019061437d9190614fa3565b61403b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610994565b60606143fe8484600085614408565b90505b9392505050565b6060824710156144805760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610994565b73ffffffffffffffffffffffffffffffffffffffff85163b6144e45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610994565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161450d9190614eca565b60006040518083038185875af1925050503d806000811461454a576040519150601f19603f3d011682016040523d82523d6000602084013e61454f565b606091505b509150915061303782828660608315614569575081614401565b8251156145795782518084602001fd5b8160405162461bcd60e51b815260040161099491906145eb565b60005b838110156145ae578181015183820152602001614596565b83811115613d705750506000910152565b600081518084526145d7816020860160208601614593565b601f01601f19169290920160200192915050565b60208152600061440160208301846145bf565b803567ffffffffffffffff8116811461461657600080fd5b919050565b6000806040838503121561462e57600080fd5b614637836145fe565b946020939093013593505050565b73ffffffffffffffffffffffffffffffffffffffff81168114613e1057600080fd5b803561461681614645565b60006020828403121561468457600080fd5b813561440181614645565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff811182821017156146e1576146e161468f565b60405290565b6040516060810167ffffffffffffffff811182821017156146e1576146e161468f565b604051601f8201601f1916810167ffffffffffffffff811182821017156147335761473361468f565b604052919050565b600067ffffffffffffffff8211156147555761475561468f565b5060051b60200190565b600082601f83011261477057600080fd5b813567ffffffffffffffff81111561478a5761478a61468f565b61479d6020601f19601f8401160161470a565b8181528460208386010111156147b257600080fd5b816020850160208301376000918101602001919091529392505050565b600060208083850312156147e257600080fd5b823567ffffffffffffffff808211156147fa57600080fd5b818501915085601f83011261480e57600080fd5b813561482161481c8261473b565b61470a565b81815260059190911b8301840190848101908883111561484057600080fd5b8585015b838110156148d95780358581111561485c5760008081fd5b86016080818c03601f19018113156148745760008081fd5b61487c6146be565b898301358881111561488e5760008081fd5b61489c8e8c8387010161475f565b8252506040808401358b83015260606148b68186016145fe565b828401526148c58486016145fe565b908301525085525050918601918601614844565b5098975050505050505050565b6000602082840312156148f857600080fd5b614401826145fe565b806040810183101561491257600080fd5b92915050565b6000806000806000806000610180888a03121561493457600080fd5b61493d886145fe565b965061494b602089016145fe565b955060408801359450606088013593506149688960808a01614901565b925061014088018981111561497c57600080fd5b60c08901925061498c8a82614901565b91505092959891949750929550565b600080600080600060a086880312156149b357600080fd5b85359450602086013567ffffffffffffffff8111156149d157600080fd5b6149dd8882890161475f565b945050604086013592506149f3606087016145fe565b91506080860135614a0381614645565b809150509295509295909350565b60008060008060808587031215614a2757600080fd5b614a30856145fe565b9350614a3e602086016145fe565b93969395505050506040820135916060013590565b8015158114613e1057600080fd5b803561461681614a53565b60008060008060008060008060008060006101608c8e031215614a8e57600080fd5b614a978c614667565b9a50614aa560208d01614667565b9950614ab360408d01614667565b985060608c01359750614ac860808d01614667565b9650614ad660a08d01614a61565b955067ffffffffffffffff8060c08e01351115614af257600080fd5b614b028e60c08f01358f0161475f565b9550614b1060e08e016145fe565b9450806101008e01351115614b2457600080fd5b50614b368d6101008e01358e0161475f565b9250614b456101208d01614667565b9150614b546101408d01614667565b90509295989b509295989b9093969950565b600060208284031215614b7857600080fd5b813561440181614a53565b600060208284031215614b9557600080fd5b813567ffffffffffffffff811115614bac57600080fd5b614bb88482850161475f565b949350505050565b60006020808385031215614bd357600080fd5b823567ffffffffffffffff80821115614beb57600080fd5b818501915085601f830112614bff57600080fd5b8135614c0d61481c8261473b565b81815260059190911b83018401908481019088831115614c2c57600080fd5b8585015b838110156148d957803585811115614c485760008081fd5b86016060818c03601f1901811315614c605760008081fd5b614c686146e7565b8983013588811115614c7a5760008081fd5b614c888e8c8387010161475f565b8252506040808401358b830152614ca08385016145fe565b9082015285525050918601918601614c30565b60008060408385031215614cc657600080fd5b823567ffffffffffffffff811115614cdd57600080fd5b614ce98582860161475f565b95602094909401359450505050565b60008060408385031215614d0b57600080fd5b82359150614d1b602084016145fe565b90509250929050565b600181811c90821680614d3857607f821691505b602082108103614d71577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614df257614df2614da6565b6001019392505050565b600060208284031215614e0e57600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e4657614e46614da6565b5060010190565b600067ffffffffffffffff83811690831681811015614e6e57614e6e614da6565b039392505050565b600082821015614e8857614e88614da6565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ec557614ec5614da6565b500290565b60008251614edc818460208701614593565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614f2457614f24614ee6565b500690565b61012081016040808784376000838201818152879190815b6002811015614f6157848483379084018281529284019290600101614f41565b5050828760c0870137610100850181815286935091505b6001811015614f97578251825260209283019290910190600101614f78565b50505095945050505050565b600060208284031215614fb557600080fd5b815161440181614a53565b600067ffffffffffffffff808316818516808303821115614fe357614fe3614da6565b01949350505050565b601f82111561403b57600081815260208120601f850160051c810160208610156150135750805b601f850160051c820191505b818110156150325782815560010161501f565b505050505050565b815167ffffffffffffffff8111156150545761505461468f565b615068816150628454614d24565b84614fec565b602080601f8311600181146150bb57600084156150855750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555615032565b600085815260208120601f198616915b828110156150ea578886015182559484019460019091019084016150cb565b508582101561512657878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008261514557615145614ee6565b500490565b6000821982111561515d5761515d614da6565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff8316602082015260606040820152600061519760608301846145bf565b9594505050505056fea26469706673582212208552e321306e2f9188d5ca8e7c86580615c0151b5d2e9c81b876214ae57ff2bc64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061032b5760003560e01c80638c4a0af7116101b2578063c89e42df116100f9578063dbc16976116100a2578063eaeb077b1161007c578063eaeb077b14610810578063f2fde38b14610823578063f755276114610836578063fe16564f1461084557600080fd5b8063dbc16976146107b8578063e7a7ed02146107c0578063e8bf92ed146107f057600080fd5b8063d0ae98dd116100d3578063d0ae98dd14610765578063d8d1091b14610778578063d8f54db01461078b57600080fd5b8063c89e42df14610706578063cfa8ed4714610719578063d02103ca1461074557600080fd5b8063ab9fc5ef1161015b578063b4d63f5811610135578063b4d63f58146106ae578063b6b0b097146106ce578063c0cad302146106f357600080fd5b8063ab9fc5ef14610687578063adc879e914610691578063b02286c0146106a557600080fd5b806399f5634e1161018c57806399f5634e1461064c5780639b79676014610654578063a3c573eb1461066757600080fd5b80638c4a0af7146106085780638da5cb5b1461061b57806396dc3d391461063957600080fd5b80635437988d11610276578063715018a61161021f57806379847057116101f957806379847057146105d95780637fcb3653146105e157806381df7d3f146105f557600080fd5b8063715018a6146105ab5780637152facf146105b3578063748608de146105c657600080fd5b80636766f09d116102505780636766f09d146105655780636b8616ce146105785780636ff512cc1461059857600080fd5b80635437988d1461049e57806355b925e6146104b1578063574f649e146104c457600080fd5b806327eb6c0f116102d857806345605267116102b257806345605267146104405780635392c5e014610468578063542028d51461049657600080fd5b806327eb6c0f146103c85780633c1582671461040d578063423fa8561461042057600080fd5b80631a26da14116103095780631a26da14146103985780631c1083e2146103ad5780632072f6c5146103c057600080fd5b8063107bf28c1461033057806315064c961461034e57806319d8ac611461036b575b600080fd5b610338610858565b60405161034591906145eb565b60405180910390f35b60655461035b9060ff1681565b6040519015158152602001610345565b60685461037f9067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610345565b6103ab6103a636600461461b565b6108e6565b005b6103ab6103bb366004614672565b61090b565b6103ab610a17565b6070546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610345565b6103ab61041b3660046147cf565b610ac8565b60685461037f9068010000000000000000900467ffffffffffffffff1681565b60685461037f90700100000000000000000000000000000000900467ffffffffffffffff1681565b6104886104763660046148e6565b606b6020526000908152604090205481565b604051908152602001610345565b6103386113bf565b6103ab6104ac366004614672565b6113cc565b6103ab6104bf366004614918565b61141b565b6104886104d236600461499b565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b6103ab610573366004614918565b6119e4565b6104886105863660046148e6565b60666020526000908152604090205481565b6103ab6105a6366004614672565b61202e565b6103ab612148565b6103386105c1366004614a11565b61215a565b6103ab6105d4366004614918565b612390565b6104886125f9565b60695461037f9067ffffffffffffffff1681565b6103ab610603366004614a6c565b612673565b6103ab610616366004614b66565b6129cc565b60335473ffffffffffffffffffffffffffffffffffffffff166103e8565b6103ab6106473660046148e6565b612ae6565b610488612b29565b6103ab6106623660046148e6565b612c5a565b6071546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b61037f62093a8081565b606e5461037f9067ffffffffffffffff1681565b61048861ea6081565b6104886106bc3660046148e6565b60676020526000908152604090205481565b6065546103e890610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6103ab610701366004614b83565b612ca9565b6103ab610714366004614b83565b612cc1565b6069546103e89068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b610488610773366004614a11565b612d96565b6103ab610786366004614bc0565b613042565b60695461035b907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b6103ab6136e7565b60685461037f907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b6103ab61081e366004614cb3565b613876565b6103ab610831366004614672565b613d76565b61048867016345785d8a000081565b6103ab610853366004614cf8565b613e13565b606f805461086590614d24565b80601f016020809104026020016040519081016040528092919081815260200182805461089190614d24565b80156108de5780601f106108b3576101008083540402835291602001916108de565b820191906000526020600020905b8154815290600101906020018083116108c157829003601f168201915b505050505081565b6108ee613e36565b67ffffffffffffffff909116600090815260676020526040902055565b60705473ffffffffffffffffffffffffffffffffffffffff16331461099d5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff1615610ab65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b610abe613e36565b610ac6613e9d565b565b60655460ff1615610b675760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610c005760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b805160685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b858110156111b0576000878281518110610c6857610c68614d77565b602002602001015190506000816060015167ffffffffffffffff161115610e815783610c9381614dd5565b945050600081600001518051906020012082602001518360600151604051602001610cf693929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610dc35760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610e7b5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610994565b5061101b565b60208101511580610f305750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610eea9160040190815260200190565b6020604051808303816000875af1158015610f09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2d9190614dfc565b15155b610fa25760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610994565b80515161ea601161101b5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610994565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015611051575042816040015167ffffffffffffffff1611155b6110e95760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061119290614dd5565b955050806040015195505080806111a890614e15565b915050610c4c565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156112535760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610994565b60685460009061128190700100000000000000000000000000000000900467ffffffffffffffff1684614e4d565b6112959067ffffffffffffffff1687614e76565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c169390931793909317929092169190911790915560009081526067602052604090208390559050611372333061134c8467016345785d8a0000614e8d565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613f27565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d805461086590614d24565b6113d4613e36565b606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60655460ff16156114ba5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff90811690881611156115665760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a401610994565b60695467ffffffffffffffff908116908716116116115760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b60205260409020546116c35760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a401610994565b60006116d18888888861215a565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516117069190614eca565b602060405180830381855afa158015611723573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906117469190614dfc565b6117509190614f15565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916117ba9189918991899190600401614f29565b602060405180830381865afa1580156117d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117fb9190614fa3565b61186d5760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610994565b6069546118cb90339061188a9067ffffffffffffffff168b614e4d565b67ffffffffffffffff1661189c612b29565b6118a69190614e8d565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169190613fe5565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b15801561198057600080fd5b505af1158015611994573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60655460ff1615611a835760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8567ffffffffffffffff168767ffffffffffffffff1610611b325760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e65774261746368206d75737420626520626960648201527f67676572207468616e20696e69744e756d426174636800000000000000000000608482015260a401610994565b60695467ffffffffffffffff9081169087161115611c045760405162461bcd60e51b815260206004820152606260248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e65774261746368206d757374206265206c6560648201527f7373206f7220657175616c207468616e206c617374566572696669656442617460848201527f636800000000000000000000000000000000000000000000000000000000000060a482015260c401610994565b67ffffffffffffffff87166000908152606b6020526040902054611cb65760405162461bcd60e51b815260206004820152604e60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20696e69744e756d426174636820737461746520726f6f742060648201527f646f6573206e6f74206578697374000000000000000000000000000000000000608482015260a401610994565b67ffffffffffffffff86166000908152606b6020526040902054611d685760405162461bcd60e51b815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2066696e616c4e6577426174636820737461746520726f6f7460648201527f20646f6573206e6f742065786973740000000000000000000000000000000000608482015260a401610994565b6000611d768888888861215a565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051611dab9190614eca565b602060405180830381855afa158015611dc8573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611deb9190614dfc565b611df59190614f15565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611e5f9189918991899190600401614f29565b602060405180830381865afa158015611e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea09190614fa3565b611f125760405162461bcd60e51b815260206004820152603560248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a20494e56414c49445f50524f4f4600000000000000000000006064820152608401610994565b67ffffffffffffffff88166000908152606b6020526040902054869003611fc75760405162461bcd60e51b815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a70726f6f66446966666572656e60448201527f7453746174653a2073746f72656420726f6f74206d757374206265206469666660648201527f6572656e74207468616e206e657720737461746520726f6f7400000000000000608482015260a401610994565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527fe579d6d18f02941e1d0f59bff70f1b2c894edc991badab38343786df2846fe55910160405180910390a1612023613e9d565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146120c75760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610a0c565b612150613e36565b610ac66000614040565b67ffffffffffffffff80851660008181526067602052604080822054938716825290205460609291158061218d57508115155b6122255760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b806122be5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b612398613e36565b60695467ffffffffffffffff90811690881611156124445760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff908116908716116124ef5760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610994565b67ffffffffffffffff808816600090815260676020526040808220549289168252902054816125865760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b806118cb5760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691612648917801000000000000000000000000000000000000000000000000909104166001614fc0565b6126529190614e4d565b61266e9067ffffffffffffffff16670de0b6b3a7640000614e8d565b905090565b600054610100900460ff16158080156126935750600054600160ff909116105b806126ad5750303b1580156126ad575060005460ff166001145b61271f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610994565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561277d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d6128bc878261503a565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f6128fd858261503a565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255607080549285169290911691909117905561295b6140b7565b80156129be57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612a655760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a0c90831515815260200190565b612aee613e36565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612ba0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc49190614dfc565b60695460685491925060009167ffffffffffffffff91821691680100000000000000008204811691612c299170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614e4d565b612c339190614fc0565b612c3d9190614e4d565b67ffffffffffffffff169050612c538183615136565b9250505090565b612c62613e36565b6068805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b612cb1613e36565b606f612cbd828261503a565b5050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612d5a5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606d612d66828261503a565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a0c91906145eb565b60695460009067ffffffffffffffff868116911614612e435760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8467ffffffffffffffff168467ffffffffffffffff1611612ef25760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a401610994565b60685467ffffffffffffffff6801000000000000000090910481169085161115612faa5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6000612fb88686868661215a565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051612fed9190614eca565b602060405180830381855afa15801561300a573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061302d9190614dfc565b6130379190614f15565b979650505050505050565b60655460ff16156130e15760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146131a45760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b80518061323f5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60685467ffffffffffffffff7801000000000000000000000000000000000000000000000000820481169161328a91849170010000000000000000000000000000000090041661514a565b11156132fe5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610994565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b8481101561361757600086828151811061335e5761335e614d77565b60200260200101519050838061337390614dd5565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff88166000908152606690935291205490915081146134945760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610994565b61349f600188614e76565b830361355d574262093a8083604001516134b99190614fc0565b67ffffffffffffffff16111561355d5760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610994565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c0160405160208183030381529060405280519060200120935085806135ff90614dd5565b9650505050808061360f90614e15565b915050613342565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff1661375f5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b60705473ffffffffffffffffffffffffffffffffffffffff1633146137ec5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c0000006064820152608401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561385657600080fd5b505af115801561386a573d6000803e3d6000fd5b50505050610ac661413d565b60655460ff16156139155760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146139d85760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b60006139e26125f9565b905081811115613a5a5760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610994565b61ea60835110613ad25760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610994565b606554613afc90610100900473ffffffffffffffffffffffffffffffffffffffff16333084613f27565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613b6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b909190614dfc565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613bca83614dd5565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505083805190602001208142604051602001613c4393929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526066909352912055323303613d1357606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613d70565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613d6793929190615162565b60405180910390a25b50505050565b613d7e613e36565b73ffffffffffffffffffffffffffffffffffffffff8116613e075760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610994565b613e1081614040565b50565b613e1b613e36565b67ffffffffffffffff166000908152606b6020526040902055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ac65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613f0757600080fd5b505af1158015613f1b573d6000803e3d6000fd5b50505050610ac6614208565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052613d709085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526142fd565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261403b9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401613f81565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166141345760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610994565b610ac633614040565b60655460ff166141b55760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff16156142a75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b600061435f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166143ef9092919063ffffffff16565b80519091501561403b578080602001905181019061437d9190614fa3565b61403b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610994565b60606143fe8484600085614408565b90505b9392505050565b6060824710156144805760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610994565b73ffffffffffffffffffffffffffffffffffffffff85163b6144e45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610994565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161450d9190614eca565b60006040518083038185875af1925050503d806000811461454a576040519150601f19603f3d011682016040523d82523d6000602084013e61454f565b606091505b509150915061303782828660608315614569575081614401565b8251156145795782518084602001fd5b8160405162461bcd60e51b815260040161099491906145eb565b60005b838110156145ae578181015183820152602001614596565b83811115613d705750506000910152565b600081518084526145d7816020860160208601614593565b601f01601f19169290920160200192915050565b60208152600061440160208301846145bf565b803567ffffffffffffffff8116811461461657600080fd5b919050565b6000806040838503121561462e57600080fd5b614637836145fe565b946020939093013593505050565b73ffffffffffffffffffffffffffffffffffffffff81168114613e1057600080fd5b803561461681614645565b60006020828403121561468457600080fd5b813561440181614645565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff811182821017156146e1576146e161468f565b60405290565b6040516060810167ffffffffffffffff811182821017156146e1576146e161468f565b604051601f8201601f1916810167ffffffffffffffff811182821017156147335761473361468f565b604052919050565b600067ffffffffffffffff8211156147555761475561468f565b5060051b60200190565b600082601f83011261477057600080fd5b813567ffffffffffffffff81111561478a5761478a61468f565b61479d6020601f19601f8401160161470a565b8181528460208386010111156147b257600080fd5b816020850160208301376000918101602001919091529392505050565b600060208083850312156147e257600080fd5b823567ffffffffffffffff808211156147fa57600080fd5b818501915085601f83011261480e57600080fd5b813561482161481c8261473b565b61470a565b81815260059190911b8301840190848101908883111561484057600080fd5b8585015b838110156148d95780358581111561485c5760008081fd5b86016080818c03601f19018113156148745760008081fd5b61487c6146be565b898301358881111561488e5760008081fd5b61489c8e8c8387010161475f565b8252506040808401358b83015260606148b68186016145fe565b828401526148c58486016145fe565b908301525085525050918601918601614844565b5098975050505050505050565b6000602082840312156148f857600080fd5b614401826145fe565b806040810183101561491257600080fd5b92915050565b6000806000806000806000610180888a03121561493457600080fd5b61493d886145fe565b965061494b602089016145fe565b955060408801359450606088013593506149688960808a01614901565b925061014088018981111561497c57600080fd5b60c08901925061498c8a82614901565b91505092959891949750929550565b600080600080600060a086880312156149b357600080fd5b85359450602086013567ffffffffffffffff8111156149d157600080fd5b6149dd8882890161475f565b945050604086013592506149f3606087016145fe565b91506080860135614a0381614645565b809150509295509295909350565b60008060008060808587031215614a2757600080fd5b614a30856145fe565b9350614a3e602086016145fe565b93969395505050506040820135916060013590565b8015158114613e1057600080fd5b803561461681614a53565b60008060008060008060008060008060006101608c8e031215614a8e57600080fd5b614a978c614667565b9a50614aa560208d01614667565b9950614ab360408d01614667565b985060608c01359750614ac860808d01614667565b9650614ad660a08d01614a61565b955067ffffffffffffffff8060c08e01351115614af257600080fd5b614b028e60c08f01358f0161475f565b9550614b1060e08e016145fe565b9450806101008e01351115614b2457600080fd5b50614b368d6101008e01358e0161475f565b9250614b456101208d01614667565b9150614b546101408d01614667565b90509295989b509295989b9093969950565b600060208284031215614b7857600080fd5b813561440181614a53565b600060208284031215614b9557600080fd5b813567ffffffffffffffff811115614bac57600080fd5b614bb88482850161475f565b949350505050565b60006020808385031215614bd357600080fd5b823567ffffffffffffffff80821115614beb57600080fd5b818501915085601f830112614bff57600080fd5b8135614c0d61481c8261473b565b81815260059190911b83018401908481019088831115614c2c57600080fd5b8585015b838110156148d957803585811115614c485760008081fd5b86016060818c03601f1901811315614c605760008081fd5b614c686146e7565b8983013588811115614c7a5760008081fd5b614c888e8c8387010161475f565b8252506040808401358b830152614ca08385016145fe565b9082015285525050918601918601614c30565b60008060408385031215614cc657600080fd5b823567ffffffffffffffff811115614cdd57600080fd5b614ce98582860161475f565b95602094909401359450505050565b60008060408385031215614d0b57600080fd5b82359150614d1b602084016145fe565b90509250929050565b600181811c90821680614d3857607f821691505b602082108103614d71577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614df257614df2614da6565b6001019392505050565b600060208284031215614e0e57600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e4657614e46614da6565b5060010190565b600067ffffffffffffffff83811690831681811015614e6e57614e6e614da6565b039392505050565b600082821015614e8857614e88614da6565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ec557614ec5614da6565b500290565b60008251614edc818460208701614593565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614f2457614f24614ee6565b500690565b61012081016040808784376000838201818152879190815b6002811015614f6157848483379084018281529284019290600101614f41565b5050828760c0870137610100850181815286935091505b6001811015614f97578251825260209283019290910190600101614f78565b50505095945050505050565b600060208284031215614fb557600080fd5b815161440181614a53565b600067ffffffffffffffff808316818516808303821115614fe357614fe3614da6565b01949350505050565b601f82111561403b57600081815260208120601f850160051c810160208610156150135750805b601f850160051c820191505b818110156150325782815560010161501f565b505050505050565b815167ffffffffffffffff8111156150545761505461468f565b615068816150628454614d24565b84614fec565b602080601f8311600181146150bb57600084156150855750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555615032565b600085815260208120601f198616915b828110156150ea578886015182559484019460019091019084016150cb565b508582101561512657878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008261514557615145614ee6565b500490565b6000821982111561515d5761515d614da6565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff8316602082015260606040820152600061519760608301846145bf565b9594505050505056fea26469706673582212208552e321306e2f9188d5ca8e7c86580615c0151b5d2e9c81b876214ae57ff2bc64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506151f8806100206000396000f3fe608060405234801561001057600080fd5b506004361061032b5760003560e01c80638da5cb5b116101b2578063c89e42df116100f9578063dbc16976116100a2578063eaeb077b1161007c578063eaeb077b14610810578063f2fde38b14610823578063f755276114610836578063fe16564f1461084557600080fd5b8063dbc16976146107b8578063e7a7ed02146107c0578063e8bf92ed146107f057600080fd5b8063d0ae98dd116100d3578063d0ae98dd14610765578063d8d1091b14610778578063d8f54db01461078b57600080fd5b8063c89e42df14610706578063cfa8ed4714610719578063d02103ca1461074557600080fd5b8063adc879e91161015b578063b6b0b09711610135578063b6b0b097146106bb578063c0cad302146106e0578063c3fd0f9c146106f357600080fd5b8063adc879e91461067e578063b02286c014610692578063b4d63f581461069b57600080fd5b80639b7967601161018c5780639b79676014610641578063a3c573eb14610654578063ab9fc5ef1461067457600080fd5b80638da5cb5b1461060857806396dc3d391461062657806399f5634e1461063957600080fd5b80635437988d116102765780637152facf1161021f5780637fcb3653116101f95780637fcb3653146105ce57806381df7d3f146105e25780638c4a0af7146105f557600080fd5b80637152facf146105a0578063748608de146105b357806379847057146105c657600080fd5b80636b8616ce116102505780636b8616ce146105655780636ff512cc14610585578063715018a61461059857600080fd5b80635437988d1461049e57806355b925e6146104b1578063574f649e146104c457600080fd5b806327eb6c0f116102d857806345605267116102b257806345605267146104405780635392c5e014610468578063542028d51461049657600080fd5b806327eb6c0f146103c85780633c1582671461040d578063423fa8561461042057600080fd5b80631a26da14116103095780631a26da14146103985780631c1083e2146103ad5780632072f6c5146103c057600080fd5b8063107bf28c1461033057806315064c961461034e57806319d8ac611461036b575b600080fd5b610338610858565b604051610345919061460e565b60405180910390f35b60655461035b9060ff1681565b6040519015158152602001610345565b60685461037f9067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610345565b6103ab6103a6366004614645565b6108e6565b005b6103ab6103bb36600461469c565b61090b565b6103ab610a17565b6070546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610345565b6103ab61041b3660046147f9565b610ac8565b60685461037f9068010000000000000000900467ffffffffffffffff1681565b60685461037f90700100000000000000000000000000000000900467ffffffffffffffff1681565b610488610476366004614910565b606b6020526000908152604090205481565b604051908152602001610345565b610338611458565b6103ab6104ac36600461469c565b611465565b6103ab6104bf366004614942565b6114b4565b6104886104d23660046149c5565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b610488610573366004614910565b60666020526000908152604090205481565b6103ab61059336600461469c565b611a7d565b6103ab611b97565b6103386105ae366004614a3b565b611ba9565b6103ab6105c1366004614942565b611de0565b610488612049565b60695461037f9067ffffffffffffffff1681565b6103ab6105f0366004614a96565b6120c3565b6103ab610603366004614b90565b61241c565b60335473ffffffffffffffffffffffffffffffffffffffff166103e8565b6103ab610634366004614910565b612536565b610488612579565b6103ab61064f366004614910565b6126aa565b6071546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b61037f62093a8081565b606e5461037f9067ffffffffffffffff1681565b61048861ea6081565b6104886106a9366004614910565b60676020526000908152604090205481565b6065546103e890610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6103ab6106ee366004614bad565b6126f9565b6103ab610701366004614942565b612711565b6103ab610714366004614bad565b612d5b565b6069546103e89068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b610488610773366004614a3b565b612e30565b6103ab610786366004614be2565b6130dc565b60695461035b907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b6103ab613781565b60685461037f907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b6103ab61081e366004614cd5565b613910565b6103ab61083136600461469c565b613e10565b61048867016345785d8a000081565b6103ab610853366004614d1a565b613ead565b606f805461086590614d46565b80601f016020809104026020016040519081016040528092919081815260200182805461089190614d46565b80156108de5780601f106108b3576101008083540402835291602001916108de565b820191906000526020600020905b8154815290600101906020018083116108c157829003601f168201915b505050505081565b6108ee613ed0565b67ffffffffffffffff909116600090815260676020526040902055565b60705473ffffffffffffffffffffffffffffffffffffffff16331461099d5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff1615610ab65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b610abe613ed0565b610ac6613f37565b565b60655460ff1615610b675760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610c005760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b805180610c9b5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015611249576000878281518110610d0157610d01614d99565b602002602001015190506000816060015167ffffffffffffffff161115610f1a5783610d2c81614df7565b945050600081600001518051906020012082602001518360600151604051602001610d8f93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610e5c5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610f145760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610994565b506110b4565b60208101511580610fc95750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610f839160040190815260200190565b6020604051808303816000875af1158015610fa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc69190614e1e565b15155b61103b5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610994565b80515161ea60116110b45760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610994565b8567ffffffffffffffff16816040015167ffffffffffffffff16101580156110ea575042816040015167ffffffffffffffff1611155b6111825760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061122b90614df7565b9550508060400151955050808061124190614e37565b915050610ce5565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156112ec5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610994565b60685460009061131a90700100000000000000000000000000000000900467ffffffffffffffff1684614e6f565b61132e9067ffffffffffffffff1687614e98565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061140b33306113e58467016345785d8a0000614eaf565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613fc1565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d805461086590614d46565b61146d613ed0565b606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60655460ff16156115535760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff90811690881611156115ff5760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a401610994565b60695467ffffffffffffffff908116908716116116aa5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b602052604090205461175c5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a401610994565b600061176a88888888611ba9565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161179f9190614eec565b602060405180830381855afa1580156117bc573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906117df9190614e1e565b6117e99190614f37565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916118539189918991899190600401614f4b565b602060405180830381865afa158015611870573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118949190614fc5565b6119065760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610994565b6069546119649033906119239067ffffffffffffffff168b614e6f565b67ffffffffffffffff16611935612579565b61193f9190614eaf565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16919061407f565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b158015611a1957600080fd5b505af1158015611a2d573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611b165760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610a0c565b611b9f613ed0565b610ac660006140da565b67ffffffffffffffff808516600081815260676020526040808220549387168252902054606092911580611bdc57508115155b611c745760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b80611d0d5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec01604051602081830303815290604052925050505b949350505050565b611de8613ed0565b60695467ffffffffffffffff9081169088161115611e945760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff90811690871611611f3f5760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610994565b67ffffffffffffffff80881660009081526067602052604080822054928916825290205481611fd65760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b806119645760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691612098917801000000000000000000000000000000000000000000000000909104166001614fe2565b6120a29190614e6f565b6120be9067ffffffffffffffff16670de0b6b3a7640000614eaf565b905090565b600054610100900460ff16158080156120e35750600054600160ff909116105b806120fd5750303b1580156120fd575060005460ff166001145b61216f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610994565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156121cd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d61230c878261505c565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f61234d858261505c565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560708054928516929091169190911790556123ab614151565b801561240e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146124b55760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a0c90831515815260200190565b61253e613ed0565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156125f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126149190614e1e565b60695460685491925060009167ffffffffffffffff918216916801000000000000000082048116916126799170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614e6f565b6126839190614fe2565b61268d9190614e6f565b67ffffffffffffffff1690506126a38183615158565b9250505090565b6126b2613ed0565b6068805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b612701613ed0565b606f61270d828261505c565b5050565b60655460ff16156127b05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8567ffffffffffffffff168767ffffffffffffffff161061285f5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a401610994565b60695467ffffffffffffffff90811690871611156129315760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c401610994565b67ffffffffffffffff87166000908152606b60205260409020546129e35760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a401610994565b67ffffffffffffffff86166000908152606b6020526040902054612a955760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a401610994565b6000612aa388888888611ba9565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051612ad89190614eec565b602060405180830381855afa158015612af5573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612b189190614e1e565b612b229190614f37565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91612b8c9189918991899190600401614f4b565b602060405180830381865afa158015612ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bcd9190614fc5565b612c3f5760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f46000000006064820152608401610994565b67ffffffffffffffff88166000908152606b6020526040902054869003612cf45760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a401610994565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a1612d50613f37565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612df45760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606d612e00828261505c565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a0c919061460e565b60695460009067ffffffffffffffff868116911614612edd5760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8467ffffffffffffffff168467ffffffffffffffff1611612f8c5760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a401610994565b60685467ffffffffffffffff68010000000000000000909104811690851611156130445760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b600061305286868686611ba9565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516130879190614eec565b602060405180830381855afa1580156130a4573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906130c79190614e1e565b6130d19190614f37565b979650505050505050565b60655460ff161561317b5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461323e5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b8051806132d95760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60685467ffffffffffffffff7801000000000000000000000000000000000000000000000000820481169161332491849170010000000000000000000000000000000090041661516c565b11156133985760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610994565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b848110156136b15760008682815181106133f8576133f8614d99565b60200260200101519050838061340d90614df7565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff881660009081526066909352912054909150811461352e5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610994565b613539600188614e98565b83036135f7574262093a8083604001516135539190614fe2565b67ffffffffffffffff1611156135f75760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610994565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209350858061369990614df7565b965050505080806136a990614e37565b9150506133dc565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166137f95760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b60705473ffffffffffffffffffffffffffffffffffffffff1633146138865760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c0000006064820152608401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156138f057600080fd5b505af1158015613904573d6000803e3d6000fd5b50505050610ac66141d7565b60655460ff16156139af5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114613a725760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b6000613a7c612049565b905081811115613af45760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610994565b61ea60835110613b6c5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610994565b606554613b9690610100900473ffffffffffffffffffffffffffffffffffffffff16333084613fc1565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613c06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2a9190614e1e565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613c6483614df7565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505083805190602001208142604051602001613cdd93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526066909352912055323303613dad57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613e0a565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613e0193929190615184565b60405180910390a25b50505050565b613e18613ed0565b73ffffffffffffffffffffffffffffffffffffffff8116613ea15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610994565b613eaa816140da565b50565b613eb5613ed0565b67ffffffffffffffff166000908152606b6020526040902055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ac65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613fa157600080fd5b505af1158015613fb5573d6000803e3d6000fd5b50505050610ac66142a2565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052613e0a9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152614397565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526140d59084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161401b565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166141ce5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610994565b610ac6336140da565b60655460ff1661424f5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff16156143415760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60006143f9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166144899092919063ffffffff16565b8051909150156140d557808060200190518101906144179190614fc5565b6140d55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610994565b6060611dd88484600085856000808673ffffffffffffffffffffffffffffffffffffffff1685876040516144bd9190614eec565b60006040518083038185875af1925050503d80600081146144fa576040519150601f19603f3d011682016040523d82523d6000602084013e6144ff565b606091505b50915091506130d187838387606083156145875782516000036145805773ffffffffffffffffffffffffffffffffffffffff85163b6145805760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610994565b5081611dd8565b611dd8838381511561459c5781518083602001fd5b8060405162461bcd60e51b8152600401610994919061460e565b60005b838110156145d15781810151838201526020016145b9565b83811115613e0a5750506000910152565b600081518084526145fa8160208601602086016145b6565b601f01601f19169290920160200192915050565b60208152600061462160208301846145e2565b9392505050565b803567ffffffffffffffff8116811461464057600080fd5b919050565b6000806040838503121561465857600080fd5b61466183614628565b946020939093013593505050565b73ffffffffffffffffffffffffffffffffffffffff81168114613eaa57600080fd5b80356146408161466f565b6000602082840312156146ae57600080fd5b81356146218161466f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171561470b5761470b6146b9565b60405290565b6040516060810167ffffffffffffffff8111828210171561470b5761470b6146b9565b604051601f8201601f1916810167ffffffffffffffff8111828210171561475d5761475d6146b9565b604052919050565b600067ffffffffffffffff82111561477f5761477f6146b9565b5060051b60200190565b600082601f83011261479a57600080fd5b813567ffffffffffffffff8111156147b4576147b46146b9565b6147c76020601f19601f84011601614734565b8181528460208386010111156147dc57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561480c57600080fd5b823567ffffffffffffffff8082111561482457600080fd5b818501915085601f83011261483857600080fd5b813561484b61484682614765565b614734565b81815260059190911b8301840190848101908883111561486a57600080fd5b8585015b83811015614903578035858111156148865760008081fd5b86016080818c03601f190181131561489e5760008081fd5b6148a66146e8565b89830135888111156148b85760008081fd5b6148c68e8c83870101614789565b8252506040808401358b83015260606148e0818601614628565b828401526148ef848601614628565b90830152508552505091860191860161486e565b5098975050505050505050565b60006020828403121561492257600080fd5b61462182614628565b806040810183101561493c57600080fd5b92915050565b6000806000806000806000610180888a03121561495e57600080fd5b61496788614628565b965061497560208901614628565b955060408801359450606088013593506149928960808a0161492b565b92506101408801898111156149a657600080fd5b60c0890192506149b68a8261492b565b91505092959891949750929550565b600080600080600060a086880312156149dd57600080fd5b85359450602086013567ffffffffffffffff8111156149fb57600080fd5b614a0788828901614789565b94505060408601359250614a1d60608701614628565b91506080860135614a2d8161466f565b809150509295509295909350565b60008060008060808587031215614a5157600080fd5b614a5a85614628565b9350614a6860208601614628565b93969395505050506040820135916060013590565b8015158114613eaa57600080fd5b803561464081614a7d565b60008060008060008060008060008060006101608c8e031215614ab857600080fd5b614ac18c614691565b9a50614acf60208d01614691565b9950614add60408d01614691565b985060608c01359750614af260808d01614691565b9650614b0060a08d01614a8b565b955067ffffffffffffffff8060c08e01351115614b1c57600080fd5b614b2c8e60c08f01358f01614789565b9550614b3a60e08e01614628565b9450806101008e01351115614b4e57600080fd5b50614b608d6101008e01358e01614789565b9250614b6f6101208d01614691565b9150614b7e6101408d01614691565b90509295989b509295989b9093969950565b600060208284031215614ba257600080fd5b813561462181614a7d565b600060208284031215614bbf57600080fd5b813567ffffffffffffffff811115614bd657600080fd5b611dd884828501614789565b60006020808385031215614bf557600080fd5b823567ffffffffffffffff80821115614c0d57600080fd5b818501915085601f830112614c2157600080fd5b8135614c2f61484682614765565b81815260059190911b83018401908481019088831115614c4e57600080fd5b8585015b8381101561490357803585811115614c6a5760008081fd5b86016060818c03601f1901811315614c825760008081fd5b614c8a614711565b8983013588811115614c9c5760008081fd5b614caa8e8c83870101614789565b8252506040808401358b830152614cc2838501614628565b9082015285525050918601918601614c52565b60008060408385031215614ce857600080fd5b823567ffffffffffffffff811115614cff57600080fd5b614d0b85828601614789565b95602094909401359450505050565b60008060408385031215614d2d57600080fd5b82359150614d3d60208401614628565b90509250929050565b600181811c90821680614d5a57607f821691505b602082108103614d93577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614e1457614e14614dc8565b6001019392505050565b600060208284031215614e3057600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e6857614e68614dc8565b5060010190565b600067ffffffffffffffff83811690831681811015614e9057614e90614dc8565b039392505050565b600082821015614eaa57614eaa614dc8565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ee757614ee7614dc8565b500290565b60008251614efe8184602087016145b6565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614f4657614f46614f08565b500690565b61012081016040808784376000838201818152879190815b6002811015614f8357848483379084018281529284019290600101614f63565b5050828760c0870137610100850181815286935091505b6001811015614fb9578251825260209283019290910190600101614f9a565b50505095945050505050565b600060208284031215614fd757600080fd5b815161462181614a7d565b600067ffffffffffffffff80831681851680830382111561500557615005614dc8565b01949350505050565b601f8211156140d557600081815260208120601f850160051c810160208610156150355750805b601f850160051c820191505b8181101561505457828155600101615041565b505050505050565b815167ffffffffffffffff811115615076576150766146b9565b61508a816150848454614d46565b8461500e565b602080601f8311600181146150dd57600084156150a75750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555615054565b600085815260208120601f198616915b8281101561510c578886015182559484019460019091019084016150ed565b508582101561514857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008261516757615167614f08565b500490565b6000821982111561517f5761517f614dc8565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006151b960608301846145e2565b9594505050505056fea2646970667358221220e08ced41d4270e65705ee9e498f554a781dd1c769981d219d457cb4ce80198e364736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061032b5760003560e01c80638da5cb5b116101b2578063c89e42df116100f9578063dbc16976116100a2578063eaeb077b1161007c578063eaeb077b14610810578063f2fde38b14610823578063f755276114610836578063fe16564f1461084557600080fd5b8063dbc16976146107b8578063e7a7ed02146107c0578063e8bf92ed146107f057600080fd5b8063d0ae98dd116100d3578063d0ae98dd14610765578063d8d1091b14610778578063d8f54db01461078b57600080fd5b8063c89e42df14610706578063cfa8ed4714610719578063d02103ca1461074557600080fd5b8063adc879e91161015b578063b6b0b09711610135578063b6b0b097146106bb578063c0cad302146106e0578063c3fd0f9c146106f357600080fd5b8063adc879e91461067e578063b02286c014610692578063b4d63f581461069b57600080fd5b80639b7967601161018c5780639b79676014610641578063a3c573eb14610654578063ab9fc5ef1461067457600080fd5b80638da5cb5b1461060857806396dc3d391461062657806399f5634e1461063957600080fd5b80635437988d116102765780637152facf1161021f5780637fcb3653116101f95780637fcb3653146105ce57806381df7d3f146105e25780638c4a0af7146105f557600080fd5b80637152facf146105a0578063748608de146105b357806379847057146105c657600080fd5b80636b8616ce116102505780636b8616ce146105655780636ff512cc14610585578063715018a61461059857600080fd5b80635437988d1461049e57806355b925e6146104b1578063574f649e146104c457600080fd5b806327eb6c0f116102d857806345605267116102b257806345605267146104405780635392c5e014610468578063542028d51461049657600080fd5b806327eb6c0f146103c85780633c1582671461040d578063423fa8561461042057600080fd5b80631a26da14116103095780631a26da14146103985780631c1083e2146103ad5780632072f6c5146103c057600080fd5b8063107bf28c1461033057806315064c961461034e57806319d8ac611461036b575b600080fd5b610338610858565b604051610345919061460e565b60405180910390f35b60655461035b9060ff1681565b6040519015158152602001610345565b60685461037f9067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610345565b6103ab6103a6366004614645565b6108e6565b005b6103ab6103bb36600461469c565b61090b565b6103ab610a17565b6070546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610345565b6103ab61041b3660046147f9565b610ac8565b60685461037f9068010000000000000000900467ffffffffffffffff1681565b60685461037f90700100000000000000000000000000000000900467ffffffffffffffff1681565b610488610476366004614910565b606b6020526000908152604090205481565b604051908152602001610345565b610338611458565b6103ab6104ac36600461469c565b611465565b6103ab6104bf366004614942565b6114b4565b6104886104d23660046149c5565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b610488610573366004614910565b60666020526000908152604090205481565b6103ab61059336600461469c565b611a7d565b6103ab611b97565b6103386105ae366004614a3b565b611ba9565b6103ab6105c1366004614942565b611de0565b610488612049565b60695461037f9067ffffffffffffffff1681565b6103ab6105f0366004614a96565b6120c3565b6103ab610603366004614b90565b61241c565b60335473ffffffffffffffffffffffffffffffffffffffff166103e8565b6103ab610634366004614910565b612536565b610488612579565b6103ab61064f366004614910565b6126aa565b6071546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b61037f62093a8081565b606e5461037f9067ffffffffffffffff1681565b61048861ea6081565b6104886106a9366004614910565b60676020526000908152604090205481565b6065546103e890610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6103ab6106ee366004614bad565b6126f9565b6103ab610701366004614942565b612711565b6103ab610714366004614bad565b612d5b565b6069546103e89068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b610488610773366004614a3b565b612e30565b6103ab610786366004614be2565b6130dc565b60695461035b907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b6103ab613781565b60685461037f907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b6103ab61081e366004614cd5565b613910565b6103ab61083136600461469c565b613e10565b61048867016345785d8a000081565b6103ab610853366004614d1a565b613ead565b606f805461086590614d46565b80601f016020809104026020016040519081016040528092919081815260200182805461089190614d46565b80156108de5780601f106108b3576101008083540402835291602001916108de565b820191906000526020600020905b8154815290600101906020018083116108c157829003601f168201915b505050505081565b6108ee613ed0565b67ffffffffffffffff909116600090815260676020526040902055565b60705473ffffffffffffffffffffffffffffffffffffffff16331461099d5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff1615610ab65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b610abe613ed0565b610ac6613f37565b565b60655460ff1615610b675760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610c005760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b805180610c9b5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015611249576000878281518110610d0157610d01614d99565b602002602001015190506000816060015167ffffffffffffffff161115610f1a5783610d2c81614df7565b945050600081600001518051906020012082602001518360600151604051602001610d8f93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610e5c5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610f145760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610994565b506110b4565b60208101511580610fc95750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610f839160040190815260200190565b6020604051808303816000875af1158015610fa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc69190614e1e565b15155b61103b5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610994565b80515161ea60116110b45760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610994565b8567ffffffffffffffff16816040015167ffffffffffffffff16101580156110ea575042816040015167ffffffffffffffff1611155b6111825760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061122b90614df7565b9550508060400151955050808061124190614e37565b915050610ce5565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156112ec5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610994565b60685460009061131a90700100000000000000000000000000000000900467ffffffffffffffff1684614e6f565b61132e9067ffffffffffffffff1687614e98565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061140b33306113e58467016345785d8a0000614eaf565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613fc1565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d805461086590614d46565b61146d613ed0565b606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60655460ff16156115535760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff90811690881611156115ff5760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a401610994565b60695467ffffffffffffffff908116908716116116aa5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b602052604090205461175c5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a401610994565b600061176a88888888611ba9565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161179f9190614eec565b602060405180830381855afa1580156117bc573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906117df9190614e1e565b6117e99190614f37565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916118539189918991899190600401614f4b565b602060405180830381865afa158015611870573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118949190614fc5565b6119065760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610994565b6069546119649033906119239067ffffffffffffffff168b614e6f565b67ffffffffffffffff16611935612579565b61193f9190614eaf565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16919061407f565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b158015611a1957600080fd5b505af1158015611a2d573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611b165760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610a0c565b611b9f613ed0565b610ac660006140da565b67ffffffffffffffff808516600081815260676020526040808220549387168252902054606092911580611bdc57508115155b611c745760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b80611d0d5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec01604051602081830303815290604052925050505b949350505050565b611de8613ed0565b60695467ffffffffffffffff9081169088161115611e945760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff90811690871611611f3f5760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610994565b67ffffffffffffffff80881660009081526067602052604080822054928916825290205481611fd65760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b806119645760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691612098917801000000000000000000000000000000000000000000000000909104166001614fe2565b6120a29190614e6f565b6120be9067ffffffffffffffff16670de0b6b3a7640000614eaf565b905090565b600054610100900460ff16158080156120e35750600054600160ff909116105b806120fd5750303b1580156120fd575060005460ff166001145b61216f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610994565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156121cd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d61230c878261505c565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f61234d858261505c565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560708054928516929091169190911790556123ab614151565b801561240e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146124b55760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a0c90831515815260200190565b61253e613ed0565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156125f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126149190614e1e565b60695460685491925060009167ffffffffffffffff918216916801000000000000000082048116916126799170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614e6f565b6126839190614fe2565b61268d9190614e6f565b67ffffffffffffffff1690506126a38183615158565b9250505090565b6126b2613ed0565b6068805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b612701613ed0565b606f61270d828261505c565b5050565b60655460ff16156127b05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8567ffffffffffffffff168767ffffffffffffffff161061285f5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a401610994565b60695467ffffffffffffffff90811690871611156129315760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c401610994565b67ffffffffffffffff87166000908152606b60205260409020546129e35760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a401610994565b67ffffffffffffffff86166000908152606b6020526040902054612a955760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a401610994565b6000612aa388888888611ba9565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051612ad89190614eec565b602060405180830381855afa158015612af5573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612b189190614e1e565b612b229190614f37565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91612b8c9189918991899190600401614f4b565b602060405180830381865afa158015612ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bcd9190614fc5565b612c3f5760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f46000000006064820152608401610994565b67ffffffffffffffff88166000908152606b6020526040902054869003612cf45760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a401610994565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a1612d50613f37565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612df45760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606d612e00828261505c565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a0c919061460e565b60695460009067ffffffffffffffff868116911614612edd5760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8467ffffffffffffffff168467ffffffffffffffff1611612f8c5760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a401610994565b60685467ffffffffffffffff68010000000000000000909104811690851611156130445760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b600061305286868686611ba9565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516130879190614eec565b602060405180830381855afa1580156130a4573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906130c79190614e1e565b6130d19190614f37565b979650505050505050565b60655460ff161561317b5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461323e5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b8051806132d95760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60685467ffffffffffffffff7801000000000000000000000000000000000000000000000000820481169161332491849170010000000000000000000000000000000090041661516c565b11156133985760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610994565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b848110156136b15760008682815181106133f8576133f8614d99565b60200260200101519050838061340d90614df7565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff881660009081526066909352912054909150811461352e5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610994565b613539600188614e98565b83036135f7574262093a8083604001516135539190614fe2565b67ffffffffffffffff1611156135f75760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610994565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209350858061369990614df7565b965050505080806136a990614e37565b9150506133dc565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166137f95760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b60705473ffffffffffffffffffffffffffffffffffffffff1633146138865760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c0000006064820152608401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156138f057600080fd5b505af1158015613904573d6000803e3d6000fd5b50505050610ac66141d7565b60655460ff16156139af5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114613a725760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b6000613a7c612049565b905081811115613af45760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610994565b61ea60835110613b6c5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610994565b606554613b9690610100900473ffffffffffffffffffffffffffffffffffffffff16333084613fc1565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613c06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2a9190614e1e565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613c6483614df7565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505083805190602001208142604051602001613cdd93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526066909352912055323303613dad57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613e0a565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613e0193929190615184565b60405180910390a25b50505050565b613e18613ed0565b73ffffffffffffffffffffffffffffffffffffffff8116613ea15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610994565b613eaa816140da565b50565b613eb5613ed0565b67ffffffffffffffff166000908152606b6020526040902055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ac65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613fa157600080fd5b505af1158015613fb5573d6000803e3d6000fd5b50505050610ac66142a2565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052613e0a9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152614397565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526140d59084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161401b565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166141ce5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610994565b610ac6336140da565b60655460ff1661424f5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff16156143415760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60006143f9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166144899092919063ffffffff16565b8051909150156140d557808060200190518101906144179190614fc5565b6140d55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610994565b6060611dd88484600085856000808673ffffffffffffffffffffffffffffffffffffffff1685876040516144bd9190614eec565b60006040518083038185875af1925050503d80600081146144fa576040519150601f19603f3d011682016040523d82523d6000602084013e6144ff565b606091505b50915091506130d187838387606083156145875782516000036145805773ffffffffffffffffffffffffffffffffffffffff85163b6145805760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610994565b5081611dd8565b611dd8838381511561459c5781518083602001fd5b8060405162461bcd60e51b8152600401610994919061460e565b60005b838110156145d15781810151838201526020016145b9565b83811115613e0a5750506000910152565b600081518084526145fa8160208601602086016145b6565b601f01601f19169290920160200192915050565b60208152600061462160208301846145e2565b9392505050565b803567ffffffffffffffff8116811461464057600080fd5b919050565b6000806040838503121561465857600080fd5b61466183614628565b946020939093013593505050565b73ffffffffffffffffffffffffffffffffffffffff81168114613eaa57600080fd5b80356146408161466f565b6000602082840312156146ae57600080fd5b81356146218161466f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171561470b5761470b6146b9565b60405290565b6040516060810167ffffffffffffffff8111828210171561470b5761470b6146b9565b604051601f8201601f1916810167ffffffffffffffff8111828210171561475d5761475d6146b9565b604052919050565b600067ffffffffffffffff82111561477f5761477f6146b9565b5060051b60200190565b600082601f83011261479a57600080fd5b813567ffffffffffffffff8111156147b4576147b46146b9565b6147c76020601f19601f84011601614734565b8181528460208386010111156147dc57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561480c57600080fd5b823567ffffffffffffffff8082111561482457600080fd5b818501915085601f83011261483857600080fd5b813561484b61484682614765565b614734565b81815260059190911b8301840190848101908883111561486a57600080fd5b8585015b83811015614903578035858111156148865760008081fd5b86016080818c03601f190181131561489e5760008081fd5b6148a66146e8565b89830135888111156148b85760008081fd5b6148c68e8c83870101614789565b8252506040808401358b83015260606148e0818601614628565b828401526148ef848601614628565b90830152508552505091860191860161486e565b5098975050505050505050565b60006020828403121561492257600080fd5b61462182614628565b806040810183101561493c57600080fd5b92915050565b6000806000806000806000610180888a03121561495e57600080fd5b61496788614628565b965061497560208901614628565b955060408801359450606088013593506149928960808a0161492b565b92506101408801898111156149a657600080fd5b60c0890192506149b68a8261492b565b91505092959891949750929550565b600080600080600060a086880312156149dd57600080fd5b85359450602086013567ffffffffffffffff8111156149fb57600080fd5b614a0788828901614789565b94505060408601359250614a1d60608701614628565b91506080860135614a2d8161466f565b809150509295509295909350565b60008060008060808587031215614a5157600080fd5b614a5a85614628565b9350614a6860208601614628565b93969395505050506040820135916060013590565b8015158114613eaa57600080fd5b803561464081614a7d565b60008060008060008060008060008060006101608c8e031215614ab857600080fd5b614ac18c614691565b9a50614acf60208d01614691565b9950614add60408d01614691565b985060608c01359750614af260808d01614691565b9650614b0060a08d01614a8b565b955067ffffffffffffffff8060c08e01351115614b1c57600080fd5b614b2c8e60c08f01358f01614789565b9550614b3a60e08e01614628565b9450806101008e01351115614b4e57600080fd5b50614b608d6101008e01358e01614789565b9250614b6f6101208d01614691565b9150614b7e6101408d01614691565b90509295989b509295989b9093969950565b600060208284031215614ba257600080fd5b813561462181614a7d565b600060208284031215614bbf57600080fd5b813567ffffffffffffffff811115614bd657600080fd5b611dd884828501614789565b60006020808385031215614bf557600080fd5b823567ffffffffffffffff80821115614c0d57600080fd5b818501915085601f830112614c2157600080fd5b8135614c2f61484682614765565b81815260059190911b83018401908481019088831115614c4e57600080fd5b8585015b8381101561490357803585811115614c6a5760008081fd5b86016060818c03601f1901811315614c825760008081fd5b614c8a614711565b8983013588811115614c9c5760008081fd5b614caa8e8c83870101614789565b8252506040808401358b830152614cc2838501614628565b9082015285525050918601918601614c52565b60008060408385031215614ce857600080fd5b823567ffffffffffffffff811115614cff57600080fd5b614d0b85828601614789565b95602094909401359450505050565b60008060408385031215614d2d57600080fd5b82359150614d3d60208401614628565b90509250929050565b600181811c90821680614d5a57607f821691505b602082108103614d93577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614e1457614e14614dc8565b6001019392505050565b600060208284031215614e3057600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e6857614e68614dc8565b5060010190565b600067ffffffffffffffff83811690831681811015614e9057614e90614dc8565b039392505050565b600082821015614eaa57614eaa614dc8565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ee757614ee7614dc8565b500290565b60008251614efe8184602087016145b6565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614f4657614f46614f08565b500690565b61012081016040808784376000838201818152879190815b6002811015614f8357848483379084018281529284019290600101614f63565b5050828760c0870137610100850181815286935091505b6001811015614fb9578251825260209283019290910190600101614f9a565b50505095945050505050565b600060208284031215614fd757600080fd5b815161462181614a7d565b600067ffffffffffffffff80831681851680830382111561500557615005614dc8565b01949350505050565b601f8211156140d557600081815260208120601f850160051c810160208610156150355750805b601f850160051c820191505b8181101561505457828155600101615041565b505050505050565b815167ffffffffffffffff811115615076576150766146b9565b61508a816150848454614d46565b8461500e565b602080601f8311600181146150dd57600084156150a75750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555615054565b600085815260208120601f198616915b8281101561510c578886015182559484019460019091019084016150ed565b508582101561514857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008261516757615167614f08565b500490565b6000821982111561517f5761517f614dc8565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006151b960608301846145e2565b9594505050505056fea2646970667358221220e08ced41d4270e65705ee9e498f554a781dd1c769981d219d457cb4ce80198e364736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/TokenWrapped.json b/compiled-contracts/TokenWrapped.json index c2059e4d3..aa970f783 100644 --- a/compiled-contracts/TokenWrapped.json +++ b/compiled-contracts/TokenWrapped.json @@ -483,8 +483,8 @@ "type": "function" } ], - "bytecode": "0x60c06040523480156200001157600080fd5b5060405162001a7838038062001a788339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516115be620004ba600039600061053001526000818161036f01526104fa01526115be6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b60405161019191906112d5565b60405180910390f35b6101ad6101a8366004611371565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad61020436600461139b565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad610276366004611371565b610552565b6101ad610289366004611371565b61059e565b6101c161029c3660046113d7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d23660046113d7565b60066020526000908152604090205481565b610184610645565b6101ad6102fa366004611371565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad610352366004611371565b6106ed565b6101ad610365366004611371565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f3660046113f9565b6107b2565b005b6101c16103b436600461146c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6060600380546104379061149f565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061149f565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f56565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611521565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c838361101e565b50600192915050565b6060600480546104379061149f565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c8383611124565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661088183611539565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ee3908490611521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4991815260200190565b60405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f81610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166110815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b80600260008282546110939190611521565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906110cd908490611521565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156112495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611285908490611571565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c27565b600060208083528351808285015260005b81811015611302578581018301518582016040015282016112e6565b81811115611314576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136c57600080fd5b919050565b6000806040838503121561138457600080fd5b61138d83611348565b946020939093013593505050565b6000806000606084860312156113b057600080fd5b6113b984611348565b92506113c760208501611348565b9150604084013590509250925092565b6000602082840312156113e957600080fd5b6113f282611348565b9392505050565b600080600080600080600060e0888a03121561141457600080fd5b61141d88611348565b965061142b60208901611348565b95506040880135945060608801359350608088013560ff8116811461144f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561147f57600080fd5b61148883611348565b915061149660208401611348565b90509250929050565b600181811c908216806114b357607f821691505b6020821081036114ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611534576115346114f2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156a5761156a6114f2565b5060010190565b600082821015611583576115836114f2565b50039056fea2646970667358221220dc9c54325b6ec8c11c8bc6a1630cfb64202b6d54611cd1004e705ceca7826a4f64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b60405161019191906112d5565b60405180910390f35b6101ad6101a8366004611371565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad61020436600461139b565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad610276366004611371565b610552565b6101ad610289366004611371565b61059e565b6101c161029c3660046113d7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d23660046113d7565b60066020526000908152604090205481565b610184610645565b6101ad6102fa366004611371565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad610352366004611371565b6106ed565b6101ad610365366004611371565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f3660046113f9565b6107b2565b005b6101c16103b436600461146c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6060600380546104379061149f565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061149f565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f56565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611521565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c838361101e565b50600192915050565b6060600480546104379061149f565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c8383611124565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661088183611539565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ee3908490611521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4991815260200190565b60405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f81610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166110815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b80600260008282546110939190611521565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906110cd908490611521565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156112495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611285908490611571565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c27565b600060208083528351808285015260005b81811015611302578581018301518582016040015282016112e6565b81811115611314576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136c57600080fd5b919050565b6000806040838503121561138457600080fd5b61138d83611348565b946020939093013593505050565b6000806000606084860312156113b057600080fd5b6113b984611348565b92506113c760208501611348565b9150604084013590509250925092565b6000602082840312156113e957600080fd5b6113f282611348565b9392505050565b600080600080600080600060e0888a03121561141457600080fd5b61141d88611348565b965061142b60208901611348565b95506040880135945060608801359350608088013560ff8116811461144f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561147f57600080fd5b61148883611348565b915061149660208401611348565b90509250929050565b600181811c908216806114b357607f821691505b6020821081036114ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611534576115346114f2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156a5761156a6114f2565b5060010190565b600082821015611583576115836114f2565b50039056fea2646970667358221220dc9c54325b6ec8c11c8bc6a1630cfb64202b6d54611cd1004e705ceca7826a4f64736f6c634300080f0033", + "bytecode": "0x60c06040523480156200001157600080fd5b50604051620019c7380380620019c78339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161150d620004ba600039600061053001526000818161036f01526104fa015261150d6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b604051610191919061123b565b60405180910390f35b6101ad6101a83660046112d7565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad610204366004611301565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad6102763660046112d7565b610552565b6101ad6102893660046112d7565b61059e565b6101c161029c36600461133d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d236600461133d565b60066020526000908152604090205481565b610184610645565b6101ad6102fa3660046112d7565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad6103523660046112d7565b6106ed565b6101ad6103653660046112d7565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f36600461135f565b6107b2565b005b6101c16103b43660046113d2565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043790611405565b80601f016020809104026020016040519081016040528092919081815260200182805461046390611405565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f12565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611487565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c8383610fda565b50600192915050565b60606004805461043790611405565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c83836110b3565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866108818361149f565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f3d610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff821661103d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b806002600082825461104f9190611487565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff821661113c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156111d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610c27565b600060208083528351808285015260005b818110156112685785810183015185820160400152820161124c565b8181111561127a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112d257600080fd5b919050565b600080604083850312156112ea57600080fd5b6112f3836112ae565b946020939093013593505050565b60008060006060848603121561131657600080fd5b61131f846112ae565b925061132d602085016112ae565b9150604084013590509250925092565b60006020828403121561134f57600080fd5b611358826112ae565b9392505050565b600080600080600080600060e0888a03121561137a57600080fd5b611383886112ae565b9650611391602089016112ae565b95506040880135945060608801359350608088013560ff811681146113b557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156113e557600080fd5b6113ee836112ae565b91506113fc602084016112ae565b90509250929050565b600181811c9082168061141957607f821691505b602082108103611452577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561149a5761149a611458565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036114d0576114d0611458565b506001019056fea264697066735822122094134962e5fa2f6357086a2590b7f3a754d340b16e5312664d82a308bc23a0df64736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b604051610191919061123b565b60405180910390f35b6101ad6101a83660046112d7565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad610204366004611301565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad6102763660046112d7565b610552565b6101ad6102893660046112d7565b61059e565b6101c161029c36600461133d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d236600461133d565b60066020526000908152604090205481565b610184610645565b6101ad6102fa3660046112d7565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad6103523660046112d7565b6106ed565b6101ad6103653660046112d7565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f36600461135f565b6107b2565b005b6101c16103b43660046113d2565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043790611405565b80601f016020809104026020016040519081016040528092919081815260200182805461046390611405565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f12565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611487565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c8383610fda565b50600192915050565b60606004805461043790611405565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c83836110b3565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866108818361149f565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f3d610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff821661103d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b806002600082825461104f9190611487565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff821661113c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156111d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610c27565b600060208083528351808285015260005b818110156112685785810183015185820160400152820161124c565b8181111561127a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112d257600080fd5b919050565b600080604083850312156112ea57600080fd5b6112f3836112ae565b946020939093013593505050565b60008060006060848603121561131657600080fd5b61131f846112ae565b925061132d602085016112ae565b9150604084013590509250925092565b60006020828403121561134f57600080fd5b611358826112ae565b9392505050565b600080600080600080600060e0888a03121561137a57600080fd5b611383886112ae565b9650611391602089016112ae565b95506040880135945060608801359350608088013560ff811681146113b557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156113e557600080fd5b6113ee836112ae565b91506113fc602084016112ae565b90509250929050565b600181811c9082168061141957607f821691505b602082108103611452577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561149a5761149a611458565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036114d0576114d0611458565b506001019056fea264697066735822122094134962e5fa2f6357086a2590b7f3a754d340b16e5312664d82a308bc23a0df64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/Verifier.json b/compiled-contracts/Verifier.json index 9ac689d46..f658d4998 100644 --- a/compiled-contracts/Verifier.json +++ b/compiled-contracts/Verifier.json @@ -38,8 +38,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50610f6a806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c806343753b4d14610030575b600080fd5b61012c600480360361012081101561004757600080fd5b6040805180820182529183019291818301918390600290839083908082843760009201829052506040805180820190915293969594608081019493509150600290835b828210156100c8576040805180820182529080840286019060029083908390808284376000920191909152505050815260019091019060200161008a565b5050604080518082018252939695948181019493509150600290839083908082843760009201919091525050604080516020818101909252929594938181019392509060019083908390808284376000920191909152509194506101409350505050565b604080519115158252519081900360200190f35b600061014a610e09565b6040805180820182528751815260208089015181830152908352815160808101835287515181840190815288518301516060808401919091529082528351808501855289840180515182525184015181850152828401528483019190915282518084018452875181528783015181840152848401528251600180825281850190945290929091828101908036833701905050905060005b600181101561021a578481600181106101f657fe5b602002015182828151811061020757fe5b60209081029190910101526001016101e1565b506102258183610243565b6102345760019250505061023b565b6000925050505b949350505050565b60007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161026e610e3b565b61027661045a565b90508060800151518551600101146102ef57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f76657269666965722d6261642d696e7075740000000000000000000000000000604482015290519081900360640190fd5b6102f7610e82565b50604080518082019091526000808252602082018190525b86518110156103e3578387828151811061032557fe5b60200260200101511061039957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f76657269666965722d6774652d736e61726b2d7363616c61722d6669656c6400604482015290519081900360640190fd5b6103d9826103d4856080015184600101815181106103b357fe5b60200260200101518a85815181106103c757fe5b60200260200101516107db565b610895565b915060010161030f565b506104068183608001516000815181106103f957fe5b6020026020010151610895565b905061043c610418866000015161094b565b8660200151846000015185602001518587604001518b6040015189606001516109d7565b61044c5760019350505050610454565b600093505050505b92915050565b610462610e3b565b6040805180820182527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e281527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d19266020808301919091529083528151608080820184527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c8285019081527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab606080850191909152908352845180860186527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a781527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8818601528385015285840192909252835180820185527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28186019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed828501528152845180860186527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa818601528185015285850152835190810184527f0b6c455a7409441597236351cc9b3820c78b453bcf684be41b138ee35e2999e78185019081527f25eaa70ebbee7f72a4ff6bd186a2bd03d2aa94a38e3f177169edd16e58f96cb1828401528152835180850185527f0d2859dcef884436015a427d6d371c5c935d13ed24eef9f9c4ddc310c66b74bf81527f1c956f84580110eae3c13cd60f2dec6a2ca632f596101bf7db477543daa3db1c818501528184015281850152825160028082529181019093529082015b6106e3610e82565b8152602001906001900390816106db57505060808201908152604080518082019091527f1b14ccd8ecada725463ff917550a6ff911c78396ed48e2f5bd2e1b6b5015e43181527f26a9b3dd6cfd45d98f7fc6fca79577ee07a2d8899d87b2efd5cb63d40b90ec2260208201529051805160009061075c57fe5b602002602001018190525060405180604001604052807f22c24f7779cd44fa8bad17df8e601b7b2d948320d25830cd4b2097ae59a0db5681526020017f1e28066a7dc90ebe7f16a9db9e5e50d480ac009ee7deb7fb076903d4571c4d5f81525081608001516001815181106107cd57fe5b602002602001018190525090565b6107e3610e82565b6107eb610e9c565b835181526020808501519082015260408101839052600060608360808460076107d05a03fa905080801561081e57610820565bfe5b508061088d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f70616972696e672d6d756c2d6661696c65640000000000000000000000000000604482015290519081900360640190fd5b505092915050565b61089d610e82565b6108a5610eba565b8351815260208085015181830152835160408301528301516060808301919091526000908360c08460066107d05a03fa905080801561081e57508061088d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f70616972696e672d6164642d6661696c65640000000000000000000000000000604482015290519081900360640190fd5b610953610e82565b81517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd479015801561098657506020830151155b156109a657505060408051808201909152600080825260208201526109d2565b604051806040016040528084600001518152602001828560200151816109c857fe5b0683038152509150505b919050565b60408051600480825260a0820190925260009160609190816020015b6109fb610e82565b8152602001906001900390816109f357505060408051600480825260a0820190925291925060609190602082015b610a31610ed8565b815260200190600190039081610a295790505090508a82600081518110610a5457fe5b60200260200101819052508882600181518110610a6d57fe5b60200260200101819052508682600281518110610a8657fe5b60200260200101819052508482600381518110610a9f57fe5b60200260200101819052508981600081518110610ab857fe5b60200260200101819052508781600181518110610ad157fe5b60200260200101819052508581600281518110610aea57fe5b60200260200101819052508381600381518110610b0357fe5b6020026020010181905250610b188282610b27565b9b9a5050505050505050505050565b60008151835114610b9957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f70616972696e672d6c656e677468732d6661696c656400000000000000000000604482015290519081900360640190fd5b82516006810260608167ffffffffffffffff81118015610bb857600080fd5b50604051908082528060200260200182016040528015610be2578160200160208202803683370190505b50905060005b83811015610d6757868181518110610bfc57fe5b602002602001015160000151828260060260000181518110610c1a57fe5b602002602001018181525050868181518110610c3257fe5b602002602001015160200151828260060260010181518110610c5057fe5b602002602001018181525050858181518110610c6857fe5b602090810291909101015151518251839060026006850201908110610c8957fe5b602002602001018181525050858181518110610ca157fe5b60209081029190910101515160016020020151828260060260030181518110610cc657fe5b602002602001018181525050858181518110610cde57fe5b602002602001015160200151600060028110610cf657fe5b6020020151828260060260040181518110610d0d57fe5b602002602001018181525050858181518110610d2557fe5b602002602001015160200151600160028110610d3d57fe5b6020020151828260060260050181518110610d5457fe5b6020908102919091010152600101610be8565b50610d70610ef8565b6000602082602086026020860160086107d05a03fa905080801561081e575080610dfb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f70616972696e672d6f70636f64652d6661696c65640000000000000000000000604482015290519081900360640190fd5b505115159695505050505050565b6040518060600160405280610e1c610e82565b8152602001610e29610ed8565b8152602001610e36610e82565b905290565b6040518060a00160405280610e4e610e82565b8152602001610e5b610ed8565b8152602001610e68610ed8565b8152602001610e75610ed8565b8152602001606081525090565b604051806040016040528060008152602001600081525090565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280610eeb610f16565b8152602001610e36610f16565b60405180602001604052806001906020820280368337509192915050565b6040518060400160405280600290602082028036833750919291505056fea26469706673582212204487892e304acb994c5d5b9cb868fea63f7402b83c7257de032d2b26011d688464736f6c634300060b0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c806343753b4d14610030575b600080fd5b61012c600480360361012081101561004757600080fd5b6040805180820182529183019291818301918390600290839083908082843760009201829052506040805180820190915293969594608081019493509150600290835b828210156100c8576040805180820182529080840286019060029083908390808284376000920191909152505050815260019091019060200161008a565b5050604080518082018252939695948181019493509150600290839083908082843760009201919091525050604080516020818101909252929594938181019392509060019083908390808284376000920191909152509194506101409350505050565b604080519115158252519081900360200190f35b600061014a610e09565b6040805180820182528751815260208089015181830152908352815160808101835287515181840190815288518301516060808401919091529082528351808501855289840180515182525184015181850152828401528483019190915282518084018452875181528783015181840152848401528251600180825281850190945290929091828101908036833701905050905060005b600181101561021a578481600181106101f657fe5b602002015182828151811061020757fe5b60209081029190910101526001016101e1565b506102258183610243565b6102345760019250505061023b565b6000925050505b949350505050565b60007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161026e610e3b565b61027661045a565b90508060800151518551600101146102ef57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f76657269666965722d6261642d696e7075740000000000000000000000000000604482015290519081900360640190fd5b6102f7610e82565b50604080518082019091526000808252602082018190525b86518110156103e3578387828151811061032557fe5b60200260200101511061039957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f76657269666965722d6774652d736e61726b2d7363616c61722d6669656c6400604482015290519081900360640190fd5b6103d9826103d4856080015184600101815181106103b357fe5b60200260200101518a85815181106103c757fe5b60200260200101516107db565b610895565b915060010161030f565b506104068183608001516000815181106103f957fe5b6020026020010151610895565b905061043c610418866000015161094b565b8660200151846000015185602001518587604001518b6040015189606001516109d7565b61044c5760019350505050610454565b600093505050505b92915050565b610462610e3b565b6040805180820182527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e281527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d19266020808301919091529083528151608080820184527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c8285019081527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab606080850191909152908352845180860186527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a781527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8818601528385015285840192909252835180820185527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28186019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed828501528152845180860186527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa818601528185015285850152835190810184527f0b6c455a7409441597236351cc9b3820c78b453bcf684be41b138ee35e2999e78185019081527f25eaa70ebbee7f72a4ff6bd186a2bd03d2aa94a38e3f177169edd16e58f96cb1828401528152835180850185527f0d2859dcef884436015a427d6d371c5c935d13ed24eef9f9c4ddc310c66b74bf81527f1c956f84580110eae3c13cd60f2dec6a2ca632f596101bf7db477543daa3db1c818501528184015281850152825160028082529181019093529082015b6106e3610e82565b8152602001906001900390816106db57505060808201908152604080518082019091527f1b14ccd8ecada725463ff917550a6ff911c78396ed48e2f5bd2e1b6b5015e43181527f26a9b3dd6cfd45d98f7fc6fca79577ee07a2d8899d87b2efd5cb63d40b90ec2260208201529051805160009061075c57fe5b602002602001018190525060405180604001604052807f22c24f7779cd44fa8bad17df8e601b7b2d948320d25830cd4b2097ae59a0db5681526020017f1e28066a7dc90ebe7f16a9db9e5e50d480ac009ee7deb7fb076903d4571c4d5f81525081608001516001815181106107cd57fe5b602002602001018190525090565b6107e3610e82565b6107eb610e9c565b835181526020808501519082015260408101839052600060608360808460076107d05a03fa905080801561081e57610820565bfe5b508061088d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f70616972696e672d6d756c2d6661696c65640000000000000000000000000000604482015290519081900360640190fd5b505092915050565b61089d610e82565b6108a5610eba565b8351815260208085015181830152835160408301528301516060808301919091526000908360c08460066107d05a03fa905080801561081e57508061088d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f70616972696e672d6164642d6661696c65640000000000000000000000000000604482015290519081900360640190fd5b610953610e82565b81517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd479015801561098657506020830151155b156109a657505060408051808201909152600080825260208201526109d2565b604051806040016040528084600001518152602001828560200151816109c857fe5b0683038152509150505b919050565b60408051600480825260a0820190925260009160609190816020015b6109fb610e82565b8152602001906001900390816109f357505060408051600480825260a0820190925291925060609190602082015b610a31610ed8565b815260200190600190039081610a295790505090508a82600081518110610a5457fe5b60200260200101819052508882600181518110610a6d57fe5b60200260200101819052508682600281518110610a8657fe5b60200260200101819052508482600381518110610a9f57fe5b60200260200101819052508981600081518110610ab857fe5b60200260200101819052508781600181518110610ad157fe5b60200260200101819052508581600281518110610aea57fe5b60200260200101819052508381600381518110610b0357fe5b6020026020010181905250610b188282610b27565b9b9a5050505050505050505050565b60008151835114610b9957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f70616972696e672d6c656e677468732d6661696c656400000000000000000000604482015290519081900360640190fd5b82516006810260608167ffffffffffffffff81118015610bb857600080fd5b50604051908082528060200260200182016040528015610be2578160200160208202803683370190505b50905060005b83811015610d6757868181518110610bfc57fe5b602002602001015160000151828260060260000181518110610c1a57fe5b602002602001018181525050868181518110610c3257fe5b602002602001015160200151828260060260010181518110610c5057fe5b602002602001018181525050858181518110610c6857fe5b602090810291909101015151518251839060026006850201908110610c8957fe5b602002602001018181525050858181518110610ca157fe5b60209081029190910101515160016020020151828260060260030181518110610cc657fe5b602002602001018181525050858181518110610cde57fe5b602002602001015160200151600060028110610cf657fe5b6020020151828260060260040181518110610d0d57fe5b602002602001018181525050858181518110610d2557fe5b602002602001015160200151600160028110610d3d57fe5b6020020151828260060260050181518110610d5457fe5b6020908102919091010152600101610be8565b50610d70610ef8565b6000602082602086026020860160086107d05a03fa905080801561081e575080610dfb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f70616972696e672d6f70636f64652d6661696c65640000000000000000000000604482015290519081900360640190fd5b505115159695505050505050565b6040518060600160405280610e1c610e82565b8152602001610e29610ed8565b8152602001610e36610e82565b905290565b6040518060a00160405280610e4e610e82565b8152602001610e5b610ed8565b8152602001610e68610ed8565b8152602001610e75610ed8565b8152602001606081525090565b604051806040016040528060008152602001600081525090565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280610eeb610f16565b8152602001610e36610f16565b60405180602001604052806001906020820280368337509192915050565b6040518060400160405280600290602082028036833750919291505056fea26469706673582212204487892e304acb994c5d5b9cb868fea63f7402b83c7257de032d2b26011d688464736f6c634300060b0033", + "bytecode": "0x608060405234801561001057600080fd5b50610f6a806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c806343753b4d14610030575b600080fd5b61012c600480360361012081101561004757600080fd5b6040805180820182529183019291818301918390600290839083908082843760009201829052506040805180820190915293969594608081019493509150600290835b828210156100c8576040805180820182529080840286019060029083908390808284376000920191909152505050815260019091019060200161008a565b5050604080518082018252939695948181019493509150600290839083908082843760009201919091525050604080516020818101909252929594938181019392509060019083908390808284376000920191909152509194506101409350505050565b604080519115158252519081900360200190f35b600061014a610e09565b6040805180820182528751815260208089015181830152908352815160808101835287515181840190815288518301516060808401919091529082528351808501855289840180515182525184015181850152828401528483019190915282518084018452875181528783015181840152848401528251600180825281850190945290929091828101908036833701905050905060005b600181101561021a578481600181106101f657fe5b602002015182828151811061020757fe5b60209081029190910101526001016101e1565b506102258183610243565b6102345760019250505061023b565b6000925050505b949350505050565b60007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161026e610e3b565b61027661045a565b90508060800151518551600101146102ef57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f76657269666965722d6261642d696e7075740000000000000000000000000000604482015290519081900360640190fd5b6102f7610e82565b50604080518082019091526000808252602082018190525b86518110156103e3578387828151811061032557fe5b60200260200101511061039957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f76657269666965722d6774652d736e61726b2d7363616c61722d6669656c6400604482015290519081900360640190fd5b6103d9826103d4856080015184600101815181106103b357fe5b60200260200101518a85815181106103c757fe5b60200260200101516107db565b610895565b915060010161030f565b506104068183608001516000815181106103f957fe5b6020026020010151610895565b905061043c610418866000015161094b565b8660200151846000015185602001518587604001518b6040015189606001516109d7565b61044c5760019350505050610454565b600093505050505b92915050565b610462610e3b565b6040805180820182527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e281527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d19266020808301919091529083528151608080820184527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c8285019081527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab606080850191909152908352845180860186527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a781527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8818601528385015285840192909252835180820185527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28186019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed828501528152845180860186527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa818601528185015285850152835190810184527f1c54dd0e0553498d9ad235eba24f03388a6d59de79a7e230d1af04b6265c332a8185019081527f04838e83a3ca2ed7495b2bc24d0e13df73aebb38529a720294593229266b6a60828401528152835180850185527f28b1fa81466521b85e5417203033af0e2966cb612c66c866a78544b3a4c2888281527f23d69a4e817251288cb1703587e30eaedec5b9bab022897756b5f160f755f03e818501528184015281850152825160028082529181019093529082015b6106e3610e82565b8152602001906001900390816106db57505060808201908152604080518082019091527f1b14ccd8ecada725463ff917550a6ff911c78396ed48e2f5bd2e1b6b5015e43181527f26a9b3dd6cfd45d98f7fc6fca79577ee07a2d8899d87b2efd5cb63d40b90ec2260208201529051805160009061075c57fe5b602002602001018190525060405180604001604052807f22c24f7779cd44fa8bad17df8e601b7b2d948320d25830cd4b2097ae59a0db5681526020017f1e28066a7dc90ebe7f16a9db9e5e50d480ac009ee7deb7fb076903d4571c4d5f81525081608001516001815181106107cd57fe5b602002602001018190525090565b6107e3610e82565b6107eb610e9c565b835181526020808501519082015260408101839052600060608360808460076107d05a03fa905080801561081e57610820565bfe5b508061088d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f70616972696e672d6d756c2d6661696c65640000000000000000000000000000604482015290519081900360640190fd5b505092915050565b61089d610e82565b6108a5610eba565b8351815260208085015181830152835160408301528301516060808301919091526000908360c08460066107d05a03fa905080801561081e57508061088d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f70616972696e672d6164642d6661696c65640000000000000000000000000000604482015290519081900360640190fd5b610953610e82565b81517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd479015801561098657506020830151155b156109a657505060408051808201909152600080825260208201526109d2565b604051806040016040528084600001518152602001828560200151816109c857fe5b0683038152509150505b919050565b60408051600480825260a0820190925260009160609190816020015b6109fb610e82565b8152602001906001900390816109f357505060408051600480825260a0820190925291925060609190602082015b610a31610ed8565b815260200190600190039081610a295790505090508a82600081518110610a5457fe5b60200260200101819052508882600181518110610a6d57fe5b60200260200101819052508682600281518110610a8657fe5b60200260200101819052508482600381518110610a9f57fe5b60200260200101819052508981600081518110610ab857fe5b60200260200101819052508781600181518110610ad157fe5b60200260200101819052508581600281518110610aea57fe5b60200260200101819052508381600381518110610b0357fe5b6020026020010181905250610b188282610b27565b9b9a5050505050505050505050565b60008151835114610b9957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f70616972696e672d6c656e677468732d6661696c656400000000000000000000604482015290519081900360640190fd5b82516006810260608167ffffffffffffffff81118015610bb857600080fd5b50604051908082528060200260200182016040528015610be2578160200160208202803683370190505b50905060005b83811015610d6757868181518110610bfc57fe5b602002602001015160000151828260060260000181518110610c1a57fe5b602002602001018181525050868181518110610c3257fe5b602002602001015160200151828260060260010181518110610c5057fe5b602002602001018181525050858181518110610c6857fe5b602090810291909101015151518251839060026006850201908110610c8957fe5b602002602001018181525050858181518110610ca157fe5b60209081029190910101515160016020020151828260060260030181518110610cc657fe5b602002602001018181525050858181518110610cde57fe5b602002602001015160200151600060028110610cf657fe5b6020020151828260060260040181518110610d0d57fe5b602002602001018181525050858181518110610d2557fe5b602002602001015160200151600160028110610d3d57fe5b6020020151828260060260050181518110610d5457fe5b6020908102919091010152600101610be8565b50610d70610ef8565b6000602082602086026020860160086107d05a03fa905080801561081e575080610dfb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f70616972696e672d6f70636f64652d6661696c65640000000000000000000000604482015290519081900360640190fd5b505115159695505050505050565b6040518060600160405280610e1c610e82565b8152602001610e29610ed8565b8152602001610e36610e82565b905290565b6040518060a00160405280610e4e610e82565b8152602001610e5b610ed8565b8152602001610e68610ed8565b8152602001610e75610ed8565b8152602001606081525090565b604051806040016040528060008152602001600081525090565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280610eeb610f16565b8152602001610e36610f16565b60405180602001604052806001906020820280368337509192915050565b6040518060400160405280600290602082028036833750919291505056fea264697066735822122098324ddce9e84c978330c7212c926e6b6ea251702f68746d297acfc078338f4864736f6c634300060b0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c806343753b4d14610030575b600080fd5b61012c600480360361012081101561004757600080fd5b6040805180820182529183019291818301918390600290839083908082843760009201829052506040805180820190915293969594608081019493509150600290835b828210156100c8576040805180820182529080840286019060029083908390808284376000920191909152505050815260019091019060200161008a565b5050604080518082018252939695948181019493509150600290839083908082843760009201919091525050604080516020818101909252929594938181019392509060019083908390808284376000920191909152509194506101409350505050565b604080519115158252519081900360200190f35b600061014a610e09565b6040805180820182528751815260208089015181830152908352815160808101835287515181840190815288518301516060808401919091529082528351808501855289840180515182525184015181850152828401528483019190915282518084018452875181528783015181840152848401528251600180825281850190945290929091828101908036833701905050905060005b600181101561021a578481600181106101f657fe5b602002015182828151811061020757fe5b60209081029190910101526001016101e1565b506102258183610243565b6102345760019250505061023b565b6000925050505b949350505050565b60007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161026e610e3b565b61027661045a565b90508060800151518551600101146102ef57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f76657269666965722d6261642d696e7075740000000000000000000000000000604482015290519081900360640190fd5b6102f7610e82565b50604080518082019091526000808252602082018190525b86518110156103e3578387828151811061032557fe5b60200260200101511061039957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f76657269666965722d6774652d736e61726b2d7363616c61722d6669656c6400604482015290519081900360640190fd5b6103d9826103d4856080015184600101815181106103b357fe5b60200260200101518a85815181106103c757fe5b60200260200101516107db565b610895565b915060010161030f565b506104068183608001516000815181106103f957fe5b6020026020010151610895565b905061043c610418866000015161094b565b8660200151846000015185602001518587604001518b6040015189606001516109d7565b61044c5760019350505050610454565b600093505050505b92915050565b610462610e3b565b6040805180820182527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e281527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d19266020808301919091529083528151608080820184527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c8285019081527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab606080850191909152908352845180860186527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a781527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8818601528385015285840192909252835180820185527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28186019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed828501528152845180860186527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa818601528185015285850152835190810184527f1c54dd0e0553498d9ad235eba24f03388a6d59de79a7e230d1af04b6265c332a8185019081527f04838e83a3ca2ed7495b2bc24d0e13df73aebb38529a720294593229266b6a60828401528152835180850185527f28b1fa81466521b85e5417203033af0e2966cb612c66c866a78544b3a4c2888281527f23d69a4e817251288cb1703587e30eaedec5b9bab022897756b5f160f755f03e818501528184015281850152825160028082529181019093529082015b6106e3610e82565b8152602001906001900390816106db57505060808201908152604080518082019091527f1b14ccd8ecada725463ff917550a6ff911c78396ed48e2f5bd2e1b6b5015e43181527f26a9b3dd6cfd45d98f7fc6fca79577ee07a2d8899d87b2efd5cb63d40b90ec2260208201529051805160009061075c57fe5b602002602001018190525060405180604001604052807f22c24f7779cd44fa8bad17df8e601b7b2d948320d25830cd4b2097ae59a0db5681526020017f1e28066a7dc90ebe7f16a9db9e5e50d480ac009ee7deb7fb076903d4571c4d5f81525081608001516001815181106107cd57fe5b602002602001018190525090565b6107e3610e82565b6107eb610e9c565b835181526020808501519082015260408101839052600060608360808460076107d05a03fa905080801561081e57610820565bfe5b508061088d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f70616972696e672d6d756c2d6661696c65640000000000000000000000000000604482015290519081900360640190fd5b505092915050565b61089d610e82565b6108a5610eba565b8351815260208085015181830152835160408301528301516060808301919091526000908360c08460066107d05a03fa905080801561081e57508061088d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f70616972696e672d6164642d6661696c65640000000000000000000000000000604482015290519081900360640190fd5b610953610e82565b81517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd479015801561098657506020830151155b156109a657505060408051808201909152600080825260208201526109d2565b604051806040016040528084600001518152602001828560200151816109c857fe5b0683038152509150505b919050565b60408051600480825260a0820190925260009160609190816020015b6109fb610e82565b8152602001906001900390816109f357505060408051600480825260a0820190925291925060609190602082015b610a31610ed8565b815260200190600190039081610a295790505090508a82600081518110610a5457fe5b60200260200101819052508882600181518110610a6d57fe5b60200260200101819052508682600281518110610a8657fe5b60200260200101819052508482600381518110610a9f57fe5b60200260200101819052508981600081518110610ab857fe5b60200260200101819052508781600181518110610ad157fe5b60200260200101819052508581600281518110610aea57fe5b60200260200101819052508381600381518110610b0357fe5b6020026020010181905250610b188282610b27565b9b9a5050505050505050505050565b60008151835114610b9957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f70616972696e672d6c656e677468732d6661696c656400000000000000000000604482015290519081900360640190fd5b82516006810260608167ffffffffffffffff81118015610bb857600080fd5b50604051908082528060200260200182016040528015610be2578160200160208202803683370190505b50905060005b83811015610d6757868181518110610bfc57fe5b602002602001015160000151828260060260000181518110610c1a57fe5b602002602001018181525050868181518110610c3257fe5b602002602001015160200151828260060260010181518110610c5057fe5b602002602001018181525050858181518110610c6857fe5b602090810291909101015151518251839060026006850201908110610c8957fe5b602002602001018181525050858181518110610ca157fe5b60209081029190910101515160016020020151828260060260030181518110610cc657fe5b602002602001018181525050858181518110610cde57fe5b602002602001015160200151600060028110610cf657fe5b6020020151828260060260040181518110610d0d57fe5b602002602001018181525050858181518110610d2557fe5b602002602001015160200151600160028110610d3d57fe5b6020020151828260060260050181518110610d5457fe5b6020908102919091010152600101610be8565b50610d70610ef8565b6000602082602086026020860160086107d05a03fa905080801561081e575080610dfb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f70616972696e672d6f70636f64652d6661696c65640000000000000000000000604482015290519081900360640190fd5b505115159695505050505050565b6040518060600160405280610e1c610e82565b8152602001610e29610ed8565b8152602001610e36610e82565b905290565b6040518060a00160405280610e4e610e82565b8152602001610e5b610ed8565b8152602001610e68610ed8565b8152602001610e75610ed8565b8152602001606081525090565b604051806040016040528060008152602001600081525090565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280610eeb610f16565b8152602001610e36610f16565b60405180602001604052806001906020820280368337509192915050565b6040518060400160405280600290602082028036833750919291505056fea264697066735822122098324ddce9e84c978330c7212c926e6b6ea251702f68746d297acfc078338f4864736f6c634300060b0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/Bridge.sol b/contracts/Bridge.sol index faf01c404..4a06ddd37 100644 --- a/contracts/Bridge.sol +++ b/contracts/Bridge.sol @@ -587,11 +587,9 @@ contract Bridge is * @notice Function to extract the selector of a bytes calldata * @param _data The calldata bytes */ - function _getSelector(bytes memory _data) - private - pure - returns (bytes4 sig) - { + function _getSelector( + bytes memory _data + ) private pure returns (bytes4 sig) { assembly { sig := mload(add(_data, 32)) } diff --git a/contracts/ProofOfEfficiency.sol b/contracts/ProofOfEfficiency.sol index 16a994745..c9839eb44 100644 --- a/contracts/ProofOfEfficiency.sol +++ b/contracts/ProofOfEfficiency.sol @@ -189,7 +189,10 @@ contract ProofOfEfficiency is /** * @dev Emitted when is proved a different state given the same batches */ - event ProofDifferentState(bytes32 storedStateRoot, bytes32 provedStateRoot); + event ProveNonDeterministicState( + bytes32 storedStateRoot, + bytes32 provedStateRoot + ); /** * @param _globalExitRootManager global exit root manager address @@ -262,13 +265,14 @@ contract ProofOfEfficiency is * @notice Allows a sequencer to send multiple batches * @param batches Struct array which the necessary data to append new batces ot the sequence */ - function sequenceBatches(BatchData[] memory batches) - public - ifNotEmergencyState - onlyTrustedSequencer - { + function sequenceBatches( + BatchData[] memory batches + ) public ifNotEmergencyState onlyTrustedSequencer { uint256 batchesNum = batches.length; - + require( + batchesNum > 0, + "ProofOfEfficiency::sequenceBatches: At least must sequence 1 batch" + ); // Store storage variables in memory, to save gas, because will be overrided multiple times uint64 currentTimestamp = lastTimestamp; uint64 currentBatchSequenced = lastBatchSequenced; @@ -442,11 +446,10 @@ contract ProofOfEfficiency is * @param transactions L2 ethereum transactions EIP-155 or pre-EIP-155 with signature: * @param maticAmount Max amount of MATIC tokens that the sender is willing to pay */ - function forceBatch(bytes memory transactions, uint256 maticAmount) - public - ifNotEmergencyState - isForceBatchAllowed - { + function forceBatch( + bytes memory transactions, + uint256 maticAmount + ) public ifNotEmergencyState isForceBatchAllowed { // Calculate matic collateral uint256 maticFee = calculateForceProverFee(); @@ -495,11 +498,9 @@ contract ProofOfEfficiency is * @notice Allows anyone to sequence forced Batches if the trusted sequencer do not have done it in the timeout period * @param batches Struct array which the necessary data to append new batces ot the sequence */ - function sequenceForceBatches(ForceBatchData[] memory batches) - public - ifNotEmergencyState - isForceBatchAllowed - { + function sequenceForceBatches( + ForceBatchData[] memory batches + ) public ifNotEmergencyState isForceBatchAllowed { uint256 batchesNum = batches.length; require( @@ -575,10 +576,9 @@ contract ProofOfEfficiency is * @notice Allow the current trusted sequencer to set a new trusted sequencer * @param newTrustedSequencer Address of the new trusted sequuencer */ - function setTrustedSequencer(address newTrustedSequencer) - public - onlyTrustedSequencer - { + function setTrustedSequencer( + address newTrustedSequencer + ) public onlyTrustedSequencer { trustedSequencer = newTrustedSequencer; emit SetTrustedSequencer(newTrustedSequencer); @@ -588,10 +588,9 @@ contract ProofOfEfficiency is * @notice Allow the current trusted sequencer to allow/disallow the forceBatch functionality * @param newForceBatchAllowed Whether is allowed or not the forceBatch functionality */ - function setForceBatchAllowed(bool newForceBatchAllowed) - public - onlyTrustedSequencer - { + function setForceBatchAllowed( + bool newForceBatchAllowed + ) public onlyTrustedSequencer { forceBatchAllowed = newForceBatchAllowed; emit SetForceBatchAllowed(newForceBatchAllowed); @@ -601,10 +600,9 @@ contract ProofOfEfficiency is * @notice Allow the trusted sequencer to set the trusted sequencer URL * @param newTrustedSequencerURL URL of trusted sequencer */ - function setTrustedSequencerURL(string memory newTrustedSequencerURL) - public - onlyTrustedSequencer - { + function setTrustedSequencerURL( + string memory newTrustedSequencerURL + ) public onlyTrustedSequencer { trustedSequencerURL = newTrustedSequencerURL; emit SetTrustedSequencerURL(newTrustedSequencerURL); @@ -614,17 +612,16 @@ contract ProofOfEfficiency is * @notice Allow the current security council to set a new security council address * @param newSecurityCouncil Address of the new security council */ - function setSecurityCouncil(address newSecurityCouncil) - public - onlySecurityCouncil - { + function setSecurityCouncil( + address newSecurityCouncil + ) public onlySecurityCouncil { securityCouncil = newSecurityCouncil; emit SetSecurityCouncil(newSecurityCouncil); } /** - * @notice Allows to stop the zk-evm if its possible to proof a different state root give the same batches. + * @notice Allows to stop the zk-evm if its possible to prove a different state root give the same batches. * @param initNumBatch Batch which the aggregator starts the verification * @param finalNewBatch Last batch aggregator intends to verify * @param newLocalExitRoot New local exit root once the batch is processed @@ -633,7 +630,7 @@ contract ProofOfEfficiency is * @param proofB zk-snark input * @param proofC zk-snark input */ - function proofDifferentState( + function proveNonDeterministicState( uint64 initNumBatch, uint64 finalNewBatch, bytes32 newLocalExitRoot, @@ -644,22 +641,22 @@ contract ProofOfEfficiency is ) public ifNotEmergencyState { require( initNumBatch < finalNewBatch, - "ProofOfEfficiency::proofDifferentState: finalNewBatch must be bigger than initNumBatch" + "ProofOfEfficiency::proveNonDeterministicState: finalNewBatch must be bigger than initNumBatch" ); require( finalNewBatch <= lastVerifiedBatch, - "ProofOfEfficiency::proofDifferentState: finalNewBatch must be less or equal than lastVerifiedBatch" + "ProofOfEfficiency::proveNonDeterministicState: finalNewBatch must be less or equal than lastVerifiedBatch" ); require( batchNumToStateRoot[initNumBatch] != bytes32(0), - "ProofOfEfficiency::proofDifferentState: initNumBatch state root does not exist" + "ProofOfEfficiency::proveNonDeterministicState: initNumBatch state root does not exist" ); require( batchNumToStateRoot[finalNewBatch] != bytes32(0), - "ProofOfEfficiency::proofDifferentState: finalNewBatch state root does not exist" + "ProofOfEfficiency::proveNonDeterministicState: finalNewBatch state root does not exist" ); bytes memory snarkHashBytes = getInputSnarkBytes( @@ -675,15 +672,15 @@ contract ProofOfEfficiency is // Verify proof require( rollupVerifier.verifyProof(proofA, proofB, proofC, [inputSnark]), - "ProofOfEfficiency::proofDifferentState: INVALID_PROOF" + "ProofOfEfficiency::proveNonDeterministicState: INVALID_PROOF" ); require( batchNumToStateRoot[finalNewBatch] != newStateRoot, - "ProofOfEfficiency::proofDifferentState: stored root must be different than new state root" + "ProofOfEfficiency::proveNonDeterministicState: stored root must be different than new state root" ); - emit ProofDifferentState( + emit ProveNonDeterministicState( batchNumToStateRoot[finalNewBatch], newStateRoot ); diff --git a/contracts/lib/TokenWrapped.sol b/contracts/lib/TokenWrapped.sol index 2bd550a27..92b7609d2 100644 --- a/contracts/lib/TokenWrapped.sol +++ b/contracts/lib/TokenWrapped.sol @@ -55,20 +55,18 @@ contract TokenWrapped is ERC20 { _DEPLOYMENT_DOMAIN_SEPARATOR = _calculateDomainSeparator(block.chainid); } - function mint(address to, uint256 value) - external - onlyBridge - returns (bool) - { + function mint( + address to, + uint256 value + ) external onlyBridge returns (bool) { _mint(to, value); return true; } - function burn(address account, uint256 value) - external - onlyBridge - returns (bool) - { + function burn( + address account, + uint256 value + ) external onlyBridge returns (bool) { _burn(account, value); return true; } @@ -120,11 +118,9 @@ contract TokenWrapped is ERC20 { * @notice Calculate domain separator, given a chainID. * @param chainId Current chainID */ - function _calculateDomainSeparator(uint256 chainId) - private - view - returns (bytes32) - { + function _calculateDomainSeparator( + uint256 chainId + ) private view returns (bytes32) { return keccak256( abi.encode( diff --git a/contracts/mocks/GlobalExitRootManagerMock.sol b/contracts/mocks/GlobalExitRootManagerMock.sol index 6a69f578d..e2b0f0a33 100644 --- a/contracts/mocks/GlobalExitRootManagerMock.sol +++ b/contracts/mocks/GlobalExitRootManagerMock.sol @@ -23,4 +23,14 @@ contract GlobalExitRootManagerMock is GlobalExitRootManager { function setLastGlobalExitRoot(uint256 timestamp) public { globalExitRootMap[getLastGlobalExitRoot()] = timestamp; } + + /** + * @notice Set last global exit root + * @param timestamp timestamp + */ + function setGlobalExitRoot(bytes32 globalExitRoot, uint256 timestamp) + public + { + globalExitRootMap[globalExitRoot] = timestamp; + } } diff --git a/contracts/verifiers/Verifier.sol b/contracts/verifiers/Verifier.sol index b3c680d40..b485f03f6 100644 --- a/contracts/verifiers/Verifier.sol +++ b/contracts/verifiers/Verifier.sol @@ -15,13 +15,13 @@ pragma solidity ^0.6.11; library Pairing { struct G1Point { - uint256 X; - uint256 Y; + uint X; + uint Y; } // Encoding of field elements is: X[0] * z + X[1] struct G2Point { - uint256[2] X; - uint256[2] Y; + uint[2] X; + uint[2] Y; } /// @return the generator of G1 @@ -58,18 +58,17 @@ library Pairing { /// @return r the negation of p, i.e. p.addition(p.negate()) should be zero. function negate(G1Point memory p) internal pure returns (G1Point memory r) { // The prime q in the base field F_q for G1 - uint256 q = 21888242871839275222246405745257275088696311157297823662689037894645226208583; + uint q = 21888242871839275222246405745257275088696311157297823662689037894645226208583; if (p.X == 0 && p.Y == 0) return G1Point(0, 0); return G1Point(p.X, q - (p.Y % q)); } /// @return r the sum of two points of G1 - function addition(G1Point memory p1, G1Point memory p2) - internal - view - returns (G1Point memory r) - { - uint256[4] memory input; + function addition( + G1Point memory p1, + G1Point memory p2 + ) internal view returns (G1Point memory r) { + uint[4] memory input; input[0] = p1.X; input[1] = p1.Y; input[2] = p2.X; @@ -89,12 +88,11 @@ library Pairing { /// @return r the product of a point on G1 and a scalar, i.e. /// p == p.scalar_mul(1) and p.addition(p) == p.scalar_mul(2) for all points p. - function scalar_mul(G1Point memory p, uint256 s) - internal - view - returns (G1Point memory r) - { - uint256[3] memory input; + function scalar_mul( + G1Point memory p, + uint s + ) internal view returns (G1Point memory r) { + uint[3] memory input; input[0] = p.X; input[1] = p.Y; input[2] = s; @@ -115,16 +113,15 @@ library Pairing { /// e(p1[0], p2[0]) * .... * e(p1[n], p2[n]) == 1 /// For example pairing([P1(), P1().negate()], [P2(), P2()]) should /// return true. - function pairing(G1Point[] memory p1, G2Point[] memory p2) - internal - view - returns (bool) - { + function pairing( + G1Point[] memory p1, + G2Point[] memory p2 + ) internal view returns (bool) { require(p1.length == p2.length, "pairing-lengths-failed"); - uint256 elements = p1.length; - uint256 inputSize = elements * 6; - uint256[] memory input = new uint256[](inputSize); - for (uint256 i = 0; i < elements; i++) { + uint elements = p1.length; + uint inputSize = elements * 6; + uint[] memory input = new uint[](inputSize); + for (uint i = 0; i < elements; i++) { input[i * 6 + 0] = p1[i].X; input[i * 6 + 1] = p1[i].Y; input[i * 6 + 2] = p2[i].X[0]; @@ -132,7 +129,7 @@ library Pairing { input[i * 6 + 4] = p2[i].Y[0]; input[i * 6 + 5] = p2[i].Y[1]; } - uint256[1] memory out; + uint[1] memory out; bool success; // solium-disable-next-line security/no-inline-assembly assembly { @@ -258,12 +255,12 @@ contract Verifier { ); vk.delta2 = Pairing.G2Point( [ - 5166739476525161998279127555945377846817167507000096942371674429228912843239, - 17150170599609676531144701456233439733620504581071386406563768754073729854641 + 12814700577715561086096033427148961091750918964504032570646700444819578958634, + 2041691956802368350105476040949274775250346775892291306599620810817556671072 ], [ - 5951361126012424029872139543886489891562224748155298287734148781315143201983, - 12928789634808812184433255215537433503271573851948409990657171984828126714652 + 18406974795629710857775073192913245904417477578893270042123797230867871598722, + 16210119957722456545813311284028623129612781001767663812083464631006254198846 ] ); vk.IC = new Pairing.G1Point[](2); @@ -279,17 +276,16 @@ contract Verifier { ); } - function verify(uint256[] memory input, Proof memory proof) - internal - view - returns (uint256) - { + function verify( + uint[] memory input, + Proof memory proof + ) internal view returns (uint) { uint256 snark_scalar_field = 21888242871839275222246405745257275088548364400416034343698204186575808495617; VerifyingKey memory vk = verifyingKey(); require(input.length + 1 == vk.IC.length, "verifier-bad-input"); // Compute the linear combination vk_x Pairing.G1Point memory vk_x = Pairing.G1Point(0, 0); - for (uint256 i = 0; i < input.length; i++) { + for (uint i = 0; i < input.length; i++) { require( input[i] < snark_scalar_field, "verifier-gte-snark-scalar-field" @@ -317,17 +313,17 @@ contract Verifier { /// @return r bool true if proof is valid function verifyProof( - uint256[2] memory a, - uint256[2][2] memory b, - uint256[2] memory c, - uint256[1] memory input + uint[2] memory a, + uint[2][2] memory b, + uint[2] memory c, + uint[1] memory input ) public view returns (bool r) { Proof memory proof; proof.A = Pairing.G1Point(a[0], a[1]); proof.B = Pairing.G2Point([b[0][0], b[0][1]], [b[1][0], b[1][1]]); proof.C = Pairing.G1Point(c[0], c[1]); - uint256[] memory inputValues = new uint256[](input.length); - for (uint256 i = 0; i < input.length; i++) { + uint[] memory inputValues = new uint[](input.length); + for (uint i = 0; i < input.length; i++) { inputValues[i] = input[i]; } if (verify(inputValues, proof) == 0) { diff --git a/docs/ProofOfEfficiency.md b/docs/ProofOfEfficiency.md index 3ccc59b48..5c1bc8415 100644 --- a/docs/ProofOfEfficiency.md +++ b/docs/ProofOfEfficiency.md @@ -167,9 +167,9 @@ Allow the current security council to set a new security council address | :--- | :--- | :------------------------------------------------------------------- | |`newSecurityCouncil` | address | Address of the new security council -### proofDifferentState +### proveNonDeterministicState ```solidity - function proofDifferentState( + function proveNonDeterministicState( uint64 initNumBatch, uint64 finalNewBatch, bytes32 newLocalExitRoot, @@ -179,7 +179,7 @@ Allow the current security council to set a new security council address uint256[2] proofC ) public ``` -Allows to stop the zk-evm if its possible to proof a different state root give the same batches. +Allows to stop the zk-evm if its possible to prove a different state root give the same batches. #### Parameters: @@ -327,9 +327,9 @@ Emitted when a trusted sequencer update his URL Emitted when security council update his address -### ProofDifferentState +### ProveNonDeterministicState ```solidity - event ProofDifferentState( + event ProveNonDeterministicState( ) ``` diff --git a/package.json b/package.json index fd86303ce..98a095c61 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "homepage": "https://github.com/0xPolygonHermez/contracts-zkEVM#readme", "license": "pending", "dependencies": { - "@0xpolygonhermez/zkevm-commonjs": "github:0xPolygonHermez/zkevm-commonjs#recursive", + "@0xpolygonhermez/zkevm-commonjs": "github:0xPolygonHermez/zkevm-commonjs#v0.5.0.0", "@nomiclabs/hardhat-ethers": "^2.0.2", "@nomiclabs/hardhat-etherscan": "^3.1.0", "@nomiclabs/hardhat-waffle": "^2.0.3", diff --git a/test/contracts/emergencyManager.test.js b/test/contracts/emergencyManager.test.js index c557537d1..786f4c4d6 100644 --- a/test/contracts/emergencyManager.test.js +++ b/test/contracts/emergencyManager.test.js @@ -255,7 +255,7 @@ describe('Emergency mode test', () => { // Finally enter in emergency mode again proving distinc state await expect( - proofOfEfficiencyContract.connect(aggregator).proofDifferentState( + proofOfEfficiencyContract.connect(aggregator).proveNonDeterministicState( numBatch - 1, numBatch - 1, newLocalExitRoot, @@ -264,10 +264,10 @@ describe('Emergency mode test', () => { proofB, proofC, ), - ).to.be.revertedWith('ProofOfEfficiency::proofDifferentState: finalNewBatch must be bigger than initNumBatch'); + ).to.be.revertedWith('ProofOfEfficiency::proveNonDeterministicState: finalNewBatch must be bigger than initNumBatch'); await expect( - proofOfEfficiencyContract.connect(aggregator).proofDifferentState( + proofOfEfficiencyContract.connect(aggregator).proveNonDeterministicState( numBatch - 1, numBatch + 1, newLocalExitRoot, @@ -276,12 +276,12 @@ describe('Emergency mode test', () => { proofB, proofC, ), - ).to.be.revertedWith('ProofOfEfficiency::proofDifferentState: finalNewBatch must be less or equal than lastVerifiedBatch'); + ).to.be.revertedWith('ProofOfEfficiency::proveNonDeterministicState: finalNewBatch must be less or equal than lastVerifiedBatch'); const newStateRootDistinct = '0x0000000000000000000000000000000000000000000000000000000000000002'; await expect( - proofOfEfficiencyContract.proofDifferentState( + proofOfEfficiencyContract.proveNonDeterministicState( numBatch - 1, numBatch, newLocalExitRoot, @@ -290,7 +290,7 @@ describe('Emergency mode test', () => { proofB, proofC, ), - ).to.emit(proofOfEfficiencyContract, 'ProofDifferentState').withArgs(newStateRoot, newStateRootDistinct) + ).to.emit(proofOfEfficiencyContract, 'ProveNonDeterministicState').withArgs(newStateRoot, newStateRootDistinct) .to.emit(proofOfEfficiencyContract, 'EmergencyStateActivated') .to.emit(bridgeContract, 'EmergencyStateActivated'); diff --git a/test/contracts/real-prover/real-flow.test.js b/test/contracts/real-prover/real-flow.test.js index bc6881f9f..fa0de2ebe 100644 --- a/test/contracts/real-prover/real-flow.test.js +++ b/test/contracts/real-prover/real-flow.test.js @@ -1,3 +1,5 @@ +/* eslint-disable no-await-in-loop */ + const { expect } = require('chai'); const { ethers, upgrades } = require('hardhat'); const { Scalar } = require('ffjavascript'); @@ -25,19 +27,20 @@ describe('Real flow test', () => { const maticTokenSymbol = 'MATIC'; const maticTokenInitialBalance = ethers.utils.parseEther('20000000'); - const genesisRoot = '0x0000000000000000000000000000000000000000000000000000000000000001'; + const genesisRoot = inputJson.oldStateRoot; const networkIDMainnet = 0; const allowForcebatches = true; const urlSequencer = 'http://zkevm-json-rpc:8123'; - const chainID = inputJson.chainId; + const { chainID } = inputJson; const networkName = 'zkevm'; beforeEach('Deploy contract', async () => { // load signers [deployer] = await ethers.getSigners(); - const trustedSequencerAddress = inputJson.sequencerAddr; + // Could be different address teorically but for now it's fine + const trustedSequencerAddress = inputJson.singleBatchData[0].sequencerAddr; await ethers.provider.send('hardhat_impersonateAccount', [trustedSequencerAddress]); trustedSequencer = await ethers.getSigner(trustedSequencerAddress); await deployer.sendTransaction({ @@ -95,91 +98,121 @@ describe('Real flow test', () => { }); it('Test real prover', async () => { + const batchesData = inputJson.singleBatchData; + const batchesNum = batchesData.length; + + // Approve tokens + const maticAmount = await proofOfEfficiencyContract.TRUSTED_SEQUENCER_FEE(); + await expect( + maticTokenContract.connect(trustedSequencer).approve(proofOfEfficiencyContract.address, maticAmount.mul(batchesNum)), + ).to.emit(maticTokenContract, 'Approval'); + + // prepare PoE + await proofOfEfficiencyContract.setVerifiedBatch(inputJson.oldNumBatch); + await proofOfEfficiencyContract.setSequencedBatch(inputJson.oldNumBatch); + const lastTimestamp = batchesData[batchesNum - 1].timestamp; + await ethers.provider.send('evm_setNextBlockTimestamp', [lastTimestamp]); + + for (let i = 0; i < batchesNum; i++) { + // set timestamp for the sendBatch call + const currentBatchData = batchesData[i]; + + const currentSequence = { + transactions: currentBatchData.batchL2Data, + globalExitRoot: currentBatchData.globalExitRoot, + timestamp: currentBatchData.timestamp, + minForcedTimestamp: 0, + }; + + const batchAccInputHashJs = calculateAccInputHash( + currentBatchData.oldAccInputHash, + calculateBatchHashData(currentBatchData.batchL2Data), + currentBatchData.globalExitRoot, + currentBatchData.timestamp, + currentBatchData.sequencerAddr, // fix + ); + expect(batchAccInputHashJs).to.be.eq(currentBatchData.newAccInputHash); + + // prapare globalExitRoot + const randomTimestamp = 1001; + const { globalExitRoot } = batchesData[0]; + await globalExitRootManager.setGlobalExitRoot(globalExitRoot, randomTimestamp); + + const lastBatchSequenced = await proofOfEfficiencyContract.lastBatchSequenced(); + + // check trusted sequencer + const trustedSequencerAddress = inputJson.singleBatchData[i].sequencerAddr; + if (trustedSequencer.address !== trustedSequencerAddress) { + await proofOfEfficiencyContract.connect(trustedSequencer).setTrustedSequencer(trustedSequencerAddress); + await ethers.provider.send('hardhat_impersonateAccount', [trustedSequencerAddress]); + trustedSequencer = await ethers.getSigner(trustedSequencerAddress); + await deployer.sendTransaction({ + to: trustedSequencerAddress, + value: ethers.utils.parseEther('4'), + }); + await expect( + maticTokenContract.connect(trustedSequencer).approve(proofOfEfficiencyContract.address, maticAmount.mul(batchesNum)), + ).to.emit(maticTokenContract, 'Approval'); + await maticTokenContract.transfer(trustedSequencer.address, ethers.utils.parseEther('100')); + } + + // Sequence Batches + await expect(proofOfEfficiencyContract.connect(trustedSequencer).sequenceBatches([currentSequence])) + .to.emit(proofOfEfficiencyContract, 'SequenceBatches') + .withArgs(Number(lastBatchSequenced) + 1); + } + + // Set state and exit root + await proofOfEfficiencyContract.setStateRoot(inputJson.oldStateRoot, inputJson.oldNumBatch); + + const { aggregatorAddress } = inputJson; + await ethers.provider.send('hardhat_impersonateAccount', [aggregatorAddress]); + const aggregator = await ethers.getSigner(aggregatorAddress); + await deployer.sendTransaction({ + to: aggregatorAddress, + value: ethers.utils.parseEther('4'), + }); + + const batchAccInputHash = await proofOfEfficiencyContract.sequencedBatches(inputJson.newNumBatch); + expect(batchAccInputHash).to.be.equal(inputJson.newAccInputHash); + const { proofA, proofB, proofC, input, } = generateSolidityInputs(proofJson, publicJson); - const batchAccInputHashJs = calculateAccInputHash( - inputJson.oldAccInputHash, - calculateBatchHashData(inputJson.batchL2Data), - inputJson.globalExitRoot, - inputJson.timestamp, - inputJson.sequencerAddr, - ); - expect(batchAccInputHashJs).to.be.eq(inputJson.newAccInputHash); - + // Verify snark input const circuitInputStarkJS = await calculateSnarkInput( inputJson.oldStateRoot, inputJson.newStateRoot, inputJson.newLocalExitRoot, inputJson.oldAccInputHash, inputJson.newAccInputHash, - inputJson.numBatch - 1, - inputJson.numBatch, - inputJson.timestamp, - inputJson.chainId, + inputJson.oldNumBatch, + inputJson.newNumBatch, + inputJson.chainID, inputJson.aggregatorAddress, ); - expect(circuitInputStarkJS).to.be.eq(Scalar.e(input[0])); - - // Approve tokens - const maticAmount = await proofOfEfficiencyContract.TRUSTED_SEQUENCER_FEE(); - await expect( - maticTokenContract.connect(trustedSequencer).approve(proofOfEfficiencyContract.address, maticAmount), - ).to.emit(maticTokenContract, 'Approval'); - - // set timestamp for the sendBatch call - const sequence = { - transactions: inputJson.batchL2Data, - globalExitRoot: inputJson.globalExitRoot, - timestamp: inputJson.timestamp, - forceBatchesTimestamp: [], - }; - - // prapare globalExitRoot - await globalExitRootManager.setLastGlobalExitRootNum(1); - await globalExitRootManager.setLastGlobalExitRoot(sequence.globalExitRoot); - - await proofOfEfficiencyContract.setVerifiedBatch(inputJson.numBatch - 1); - await proofOfEfficiencyContract.setSequencedBatch(inputJson.numBatch - 1); - - const lastBatchSequenced = await proofOfEfficiencyContract.lastBatchSequenced(); - - await ethers.provider.send('evm_setNextBlockTimestamp', [sequence.timestamp]); - // Sequence Batches - await expect(proofOfEfficiencyContract.connect(trustedSequencer).sequenceBatches([sequence])) - .to.emit(proofOfEfficiencyContract, 'SequenceBatches') - .withArgs(Number(lastBatchSequenced) + 1); + expect(circuitInputStarkJS).to.be.eq(Scalar.e(input[0])); // aggregator forge the batch const { newLocalExitRoot } = inputJson; const { newStateRoot } = inputJson; - const { numBatch } = inputJson; - - // Set state and exit root - await proofOfEfficiencyContract.setStateRoot(inputJson.oldStateRoot); - await proofOfEfficiencyContract.setExitRoot(inputJson.oldLocalExitRoot); - - const { aggregatorAddress } = inputJson; - await ethers.provider.send('hardhat_impersonateAccount', [aggregatorAddress]); - const aggregator = await ethers.getSigner(aggregatorAddress); - await deployer.sendTransaction({ - to: aggregatorAddress, - value: ethers.utils.parseEther('4'), - }); + const { oldNumBatch } = inputJson; + const { newNumBatch } = inputJson; // Verify batch await expect( - proofOfEfficiencyContract.connect(aggregator).verifyBatch( + proofOfEfficiencyContract.connect(aggregator).verifyBatches( + oldNumBatch, + newNumBatch, newLocalExitRoot, newStateRoot, - numBatch, proofA, proofB, proofC, ), - ).to.emit(proofOfEfficiencyContract, 'VerifyBatch') - .withArgs(numBatch, aggregator.address); + ).to.emit(proofOfEfficiencyContract, 'VerifyBatches') + .withArgs(newNumBatch, newStateRoot, aggregator.address); }); }); diff --git a/test/contracts/real-prover/test-inputs/input.json b/test/contracts/real-prover/test-inputs/input.json index 6de53a4e4..62f5edd91 100644 --- a/test/contracts/real-prover/test-inputs/input.json +++ b/test/contracts/real-prover/test-inputs/input.json @@ -1,16 +1,1086 @@ { - "aggregatorAddress": "0x292c1b849531C841e422BD38a6F6c70Ca7Ae1e8F", - "batchL2Data": "0xed03843b9aca00825208943fab184622dc19b6109349b94811493bf2a4536288016345785d8a00008082057980805e020faf21744658c2c0d8058f1264533edc969d8dc8ca2cda0c04b2a2a0efaf1b0d326d5778de72715de172ce5a9f39e99ac4e8a760dc5f8c6d871180ca90641c", - "chainId": 1401, - "contractsBytecode": {}, - "db": {}, - "from": "", - "globalExitRoot": "0xa5188a238fcbb387479e5e3108339d0314e807a0b14d141390d723dbe8e45687", + "singleBatchData": [ + { + "oldStateRoot": "0x3ca39a7b5b419d1c50c89a8d15d1234f6cbc8baadb465efb609832bbc19f9026", + "newStateRoot": "0x61b31caaff4a8feedcc97d4da7b7f739ef8e17e384c57557135cba347a000c66", + "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newAccInputHash": "0x070c0c1abe776249fe4011d71b63a0cce202069584af3801d5df2dccf64a2d9a", + "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "oldNumBatch": 0, + "newNumBatch": 1, + "chainID": 1000, + "batchL2Data": "0xef80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff8901314fb37062980000808203e88080f9ea8e90ae323e360a22bd0b1a972d15cb33df6ccbfbada4a0d49792d1164ea56029d84d5093a7186fb5bf2f1b7258d57e9c09ac89c4cb8eb44a3c961c4dd89b1b", + "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", + "timestamp": 1944498031, + "sequencerAddr": "0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D", + "batchHashData": "0x0e8a7e57fe270ab7780cb10ca4b4a39792432701268b0d3a64e6870729e506d1", + "contractsBytecode": {}, + "db": { + "0x3ca39a7b5b419d1c50c89a8d15d1234f6cbc8baadb465efb609832bbc19f9026": [ + "cddc57c0d0fdd4ed", + "d24df1950f2d8f15", + "4c2f3e938869b82d", + "649e63bfe1247ba4", + "b69b044f5e694795", + "f57d81efba5d4445", + "339438195426ad0a", + "3efad1dd58c2259d", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x3efad1dd58c2259d339438195426ad0af57d81efba5d4445b69b044f5e694795": [ + "00000000dea00000", + "0000000035c9adc5", + "0000000000000036", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ] + } + }, + { + "oldStateRoot": "0x61b31caaff4a8feedcc97d4da7b7f739ef8e17e384c57557135cba347a000c66", + "newStateRoot": "0x29f3d65c49b538ea6072d1f9343fa2f0f223c1656f0432e9db337553963449d2", + "oldAccInputHash": "0x070c0c1abe776249fe4011d71b63a0cce202069584af3801d5df2dccf64a2d9a", + "newAccInputHash": "0x389bc63239f455750717b4efb5e9440d7b08751241b546e70ffe6075509d6c32", + "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "oldNumBatch": 1, + "newNumBatch": 2, + "chainID": 1000, + "batchL2Data": "0xee80843b9aca00830186a094617b3a3528f9cdd6630fd3301b9c8911f7bf063d881bc16d674ec80000808203e880804902102bdd9b91ae389102098dd7d8cb6e732410851223a1153cbe78b0c54d1e63bd7740451f2efcf88bbebdcc334ff3b3e3c332fbbf5703e4699124454663ba1b", + "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", + "timestamp": 1944498032, + "sequencerAddr": "0x4d5Cf5032B2a844602278b01199ED191A86c93ff", + "batchHashData": "0xe2058260b8a93dc906fd253c2af22d4cb6136e6833b110a2655f6e0637952e07", + "contractsBytecode": {}, + "db": { + "0x61b31caaff4a8feedcc97d4da7b7f739ef8e17e384c57557135cba347a000c66": [ + "763daf39d9de9f97", + "ef7790a09a67a7ce", + "b7b8e536f40b4237", + "17f9ab2454f54c72", + "3eb5df14d4bdc47c", + "ef2191d6cdc0bf45", + "8f7fb26dd51e6103", + "55e7e82ae2a7af55", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x17f9ab2454f54c72b7b8e536f40b4237ef7790a09a67a7ce763daf39d9de9f97": [ + "ae5eef5438ed0e3f", + "5c4895355f3e4439", + "cf826865dbad9c26", + "696681d0aa7090c5", + "e73738b8e2170ab5", + "535da0a6128c7d7a", + "8a3fb83b447c6895", + "5482cba788eb1c48", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x696681d0aa7090c5cf826865dbad9c265c4895355f3e4439ae5eef5438ed0e3f": [ + "48a46a8e735c5308", + "13c524e0f8adc42e", + "4e2074fc48c70ae0", + "85bf62d5f65b9449", + "0e27e92c28029aec", + "98e0c826ec17d37a", + "65597af607e1af8b", + "ace107db9858f320", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xace107db9858f32065597af607e1af8b98e0c826ec17d37a0e27e92c28029aec": [ + "0000000073e6af6f", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x5482cba788eb1c488a3fb83b447c6895535da0a6128c7d7ae73738b8e2170ab5": [ + "40508102aa6cabc7", + "501c2393cf10d5fd", + "107bff077a0db30f", + "ef85c8c00a446ae6", + "8970fbd8a8e998b0", + "78ae1b24331feafe", + "4b733a42af75c0d1", + "8bed5904c253e80b", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x8bed5904c253e80b4b733a42af75c0d178ae1b24331feafe8970fbd8a8e998b0": [ + "00000000d2582b99", + "00000000dfc171ed", + "0000000070a9b538", + "000000003cf71b6a", + "00000000f175a4f8", + "0000000091639493", + "0000000084a5333b", + "00000000c8a0cb4b" + ], + "0x55e7e82ae2a7af558f7fb26dd51e6103ef2191d6cdc0bf453eb5df14d4bdc47c": [ + "1c4f1ba045cf5b95", + "bc713c1bbad32c2e", + "4281764be58d6a22", + "9e3757e8ec1272dd", + "bd7c49e380253fa5", + "e372e59a3b60703c", + "a451273cbbb1e1e5", + "98918ae937e2cf3e", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x9e3757e8ec1272dd4281764be58d6a22bc713c1bbad32c2e1c4f1ba045cf5b95": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "95ab0f1313448263", + "014f76d48abc1a5a", + "abac7bde3231c7b3", + "725f5f7511034537", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x725f5f7511034537abac7bde3231c7b3014f76d48abc1a5a95ab0f1313448263": [ + "f9afb01623f15c79", + "308cdd5740bc023c", + "322e20e4c0dcef74", + "87cca53735cec736", + "7fe9e067044258cd", + "c1c7a23630d74438", + "f6d76a253178385f", + "617c2a11f77ff536", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x87cca53735cec736322e20e4c0dcef74308cdd5740bc023cf9afb01623f15c79": [ + "16dde42596b907f0", + "49015d7e991a1528", + "4a6eced6e8304885", + "305a6af4d7a8a00c", + "85b8fc8024db5e5c", + "cb9fc9e8676fe5f9", + "900609fbcf391183", + "41e5632337836bc5", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x41e5632337836bc5900609fbcf391183cb9fc9e8676fe5f985b8fc8024db5e5c": [ + "0000000062980000", + "00000000314fb370", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x617c2a11f77ff536f6d76a253178385fc1c7a23630d744387fe9e067044258cd": [ + "11c8725c9dfdb98b", + "7ffbf50ba07b42f8", + "7c18430af73c190c", + "1c3e76134671e490", + "d074b8cee5dcf415", + "2346a1b4c0f390e8", + "47969c1f5a6a25b1", + "da62fdf84a21108e", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xda62fdf84a21108e47969c1f5a6a25b12346a1b4c0f390e8d074b8cee5dcf415": [ + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x98918ae937e2cf3ea451273cbbb1e1e5e372e59a3b60703cbd7c49e380253fa5": [ + "d43f2781cecb9cea", + "a8ef821b2d1a19c4", + "8d39c881d94606f2", + "571c41938781a282", + "c4066ba8c32e8a54", + "99ccbd6826c25549", + "1bbff6a9558c13d8", + "5c34e8b7e09eb9d2", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x571c41938781a2828d39c881d94606f2a8ef821b2d1a19c4d43f2781cecb9cea": [ + "442f7573a4097cf2", + "3520bc74612a2ea9", + "143ce4e61bf52251", + "da69a3c4a8007a5a", + "d074b8cee5dcf415", + "2346a1b4c0f390e8", + "47969c1f5a6a25b1", + "da62fdf84a21108e", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x5c34e8b7e09eb9d21bbff6a9558c13d899ccbd6826c25549c4066ba8c32e8a54": [ + "66ee2be0687eea76", + "6926f8ca8796c78a", + "26179f49c434dc16", + "649e63bfe1247ba4", + "8d6f4bb1f77e3231", + "e8588d537a7fd215", + "06643ffe76ca3417", + "ac6fb937ba074e4f", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xac6fb937ba074e4f06643ffe76ca3417e8588d537a7fd2158d6f4bb1f77e3231": [ + "000000007c080000", + "000000000479fa55", + "0000000000000035", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ] + } + }, + { + "oldStateRoot": "0x29f3d65c49b538ea6072d1f9343fa2f0f223c1656f0432e9db337553963449d2", + "newStateRoot": "0xdda07776ee34dbee557cd839abeb522b89540a9a670cea4856af7bdc40396a86", + "oldAccInputHash": "0x389bc63239f455750717b4efb5e9440d7b08751241b546e70ffe6075509d6c32", + "newAccInputHash": "0xad1915669aaf61a83bbfad1f4360c1a32245e38ffb67b1afa68c825135890fc9", + "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "oldNumBatch": 2, + "newNumBatch": 3, + "chainID": 1000, + "batchL2Data": "0xee01843b9aca00830186a094617b3a3528f9cdd6630fd3301b9c8911f7bf063d880de0b6b3a7640000808203e88080d71f728226f6e692289eab9f2c9565036ffda72650c88e2b9c001b95a5f1a2e647612249728261ab90977a2c50b22b8fd486f88b356a921f4487327e5d2775651cee02843b9aca00830186a094617b3a3528f9cdd6630fd3301b9c8911f7bf063d880de0b6b3a7640000808203e880808ab4d93e176f0762b48dfd8382f97200e134eb1e8e6423951d70af8f99e53c805b61ee8721981423a592c0c1af55c482bed43a45e2e3c1ecc70d350e2083ebc11b", + "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", + "timestamp": 1944498032, + "sequencerAddr": "0x4d5Cf5032B2a844602278b01199ED191A86c93ff", + "batchHashData": "0xe0b9d084dae9d015aaf65bc9b013b37c12b3cc31ae4e9590296c50eda518d8a1", + "contractsBytecode": {}, + "db": { + "0x29f3d65c49b538ea6072d1f9343fa2f0f223c1656f0432e9db337553963449d2": [ + "1018ebe383c647ad", + "cd43656bcbfc3732", + "0b77cf26ccee9906", + "eacbc39a60f6d880", + "e943bd867c50d30b", + "2c8f4640b65622b0", + "95925ccc615890b0", + "7cdcd8ebadd60547", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xeacbc39a60f6d8800b77cf26ccee9906cd43656bcbfc37321018ebe383c647ad": [ + "7244456069b61fb9", + "f12d0c78f0b1c456", + "943aaafaef062428", + "34f19f4397af5227", + "8fd6f5c37f9bb325", + "950a04795fbeb2db", + "be6612ff525b0376", + "f00fadceb542d347", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x34f19f4397af5227943aaafaef062428f12d0c78f0b1c4567244456069b61fb9": [ + "48a46a8e735c5308", + "13c524e0f8adc42e", + "4e2074fc48c70ae0", + "85bf62d5f65b9449", + "6fb863e332cedfef", + "7ba318532e17ee63", + "7d196528afb0b2b3", + "1e96f77a2789e4a8", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x1e96f77a2789e4a87d196528afb0b2b37ba318532e17ee636fb863e332cedfef": [ + "0000000073e6af70", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xf00fadceb542d347be6612ff525b0376950a04795fbeb2db8fd6f5c37f9bb325": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4edf8b56eb3c5376", + "1773c8ab7b8f07ff", + "6893cb015c9115ed", + "5d67b5c2b28c5a0c", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x5d67b5c2b28c5a0c6893cb015c9115ed1773c8ab7b8f07ff4edf8b56eb3c5376": [ + "68dc9aa005dd4256", + "052b594470e09489", + "b1b8073c14badad7", + "6e27d2fec2bd936d", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x6e27d2fec2bd936db1b8073c14badad7052b594470e0948968dc9aa005dd4256": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "cc2cd52e96562eb5", + "0df53656880949f3", + "34cc70683f25a9f4", + "05c87aa905c964fc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x05c87aa905c964fc34cc70683f25a9f40df53656880949f3cc2cd52e96562eb5": [ + "0913ff64639f31f1", + "5f9f9c7ae3c1a51b", + "6ce95a01c39f7eb4", + "98fd5d75b176ec04", + "fa21c802e3203385", + "6994f11f82f251e6", + "f0bd59a452d4d0ee", + "e8ee44891402527a", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x98fd5d75b176ec046ce95a01c39f7eb45f9f9c7ae3c1a51b0913ff64639f31f1": [ + "37866cdbe5877c88", + "2d62534cb92ee170", + "6bf2c9fd6a3aa16c", + "325ba19f4ab866aa", + "d074b8cee5dcf415", + "2346a1b4c0f390e8", + "47969c1f5a6a25b1", + "da62fdf84a21108e", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xda62fdf84a21108e47969c1f5a6a25b12346a1b4c0f390e8d074b8cee5dcf415": [ + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xe8ee44891402527af0bd59a452d4d0ee6994f11f82f251e6fa21c802e3203385": [ + "20284081553655e3", + "280e11c9e7886afe", + "083dff83bd06d987", + "77c2e46005223573", + "8970fbd8a8e998b0", + "78ae1b24331feafe", + "4b733a42af75c0d1", + "8bed5904c253e80b", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x8bed5904c253e80b4b733a42af75c0d178ae1b24331feafe8970fbd8a8e998b0": [ + "00000000d2582b99", + "00000000dfc171ed", + "0000000070a9b538", + "000000003cf71b6a", + "00000000f175a4f8", + "0000000091639493", + "0000000084a5333b", + "00000000c8a0cb4b" + ], + "0x7cdcd8ebadd6054795925ccc615890b02c8f4640b65622b0e943bd867c50d30b": [ + "a79f72adf8dd62fa", + "70063394d1df00c5", + "5f821a2304f84d60", + "1934fff4c5941ee1", + "59e2c5ebf37b16c4", + "45e8448258381bee", + "bc82aa48f01be494", + "e392fbc37bc4d6e2", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x1934fff4c5941ee15f821a2304f84d6070063394d1df00c5a79f72adf8dd62fa": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "8c9dd4d6dd9556e2", + "1f3ffcfcc152941f", + "cc6de1a34247b76a", + "20cb4f0747788c63", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x20cb4f0747788c63cc6de1a34247b76a1f3ffcfcc152941f8c9dd4d6dd9556e2": [ + "f7edfb994664d84d", + "161450b849bf3951", + "3e9f9bb44d29def1", + "436c8be3776a6612", + "8f641912be821d66", + "9c74208e5f23cc3d", + "dff4e79c0aa1dd7a", + "a56cb315200b6a24", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x436c8be3776a66123e9f9bb44d29def1161450b849bf3951f7edfb994664d84d": [ + "16dde42596b907f0", + "49015d7e991a1528", + "4a6eced6e8304885", + "305a6af4d7a8a00c", + "18c9513b1e7d9904", + "0b6835f79f991d71", + "a8751b2d01a9def9", + "5bc67a31279947d0", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x5bc67a31279947d0a8751b2d01a9def90b6835f79f991d7118c9513b1e7d9904": [ + "0000000013d00000", + "00000000158e4609", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xa56cb315200b6a24dff4e79c0aa1dd7a9c74208e5f23cc3d8f641912be821d66": [ + "11c8725c9dfdb98b", + "7ffbf50ba07b42f8", + "7c18430af73c190c", + "1c3e76134671e490", + "7615b40971dc29f2", + "303a082109d64fe0", + "54f2216c0b37148d", + "adb5787a1f8676b5", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xadb5787a1f8676b554f2216c0b37148d303a082109d64fe07615b40971dc29f2": [ + "0000000000000002", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xe392fbc37bc4d6e2bc82aa48f01be49445e8448258381bee59e2c5ebf37b16c4": [ + "7843a2ed5bec46b1", + "a5be26d73ae537cf", + "8efd80841dd5d382", + "ef28409ad26e7282", + "88de93befbb5aaa4", + "0daef15f24ea3e20", + "02ef2f6176cbbf97", + "69d5f78b6a46aa1d", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xef28409ad26e72828efd80841dd5d382a5be26d73ae537cf7843a2ed5bec46b1": [ + "205c77d6b9f5eefc", + "28f8d6d672c9506b", + "4eb97b136c3768b6", + "1a621134ad618159", + "dce2eeec6b8d221c", + "1dc936ab2b3ea242", + "3c4663d36bdee9df", + "63533e6d4b9e1288", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x1a621134ad6181594eb97b136c3768b628f8d6d672c9506b205c77d6b9f5eefc": [ + "442f7573a4097cf2", + "3520bc74612a2ea9", + "143ce4e61bf52251", + "6d34d1e254003d2d", + "d074b8cee5dcf415", + "2346a1b4c0f390e8", + "47969c1f5a6a25b1", + "da62fdf84a21108e", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x63533e6d4b9e12883c4663d36bdee9df1dc936ab2b3ea242dce2eeec6b8d221c": [ + "7160cca03ed221b2", + "347a16f174192c56", + "2a3e1067115745c2", + "5c330b93d4700b22", + "4e0a8f01cc63c656", + "f9b87ebb3b907221", + "e2675816f35ac228", + "d806a369a18d0eb0", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xd806a369a18d0eb0e2675816f35ac228f9b87ebb3b9072214e0a8f01cc63c656": [ + "00000000faa6b288", + "000000004777b8f2", + "00000000a99b03b4", + "00000000186c44ac", + "000000007b5f11f5", + "000000008173b0e3", + "00000000c3ec5a6e", + "00000000ca213a0c" + ], + "0x69d5f78b6a46aa1d02ef2f6176cbbf970daef15f24ea3e2088de93befbb5aaa4": [ + "66ee2be0687eea76", + "6926f8ca8796c78a", + "26179f49c434dc16", + "649e63bfe1247ba4", + "5e83cc15f9f05fa9", + "4098e44c091c5d81", + "1a9584e1365c3ec9", + "021fc6d3425cd2f6", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x021fc6d3425cd2f61a9584e1365c3ec94098e44c091c5d815e83cc15f9f05fa9": [ + "00000000cad00000", + "00000000203b67bc", + "0000000000000035", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ] + } + }, + { + "oldStateRoot": "0xdda07776ee34dbee557cd839abeb522b89540a9a670cea4856af7bdc40396a86", + "newStateRoot": "0x46620e8b8298f31c6999d0547d716a5c1d0e754cff5f1b85ed75eb10cdbb623f", + "oldAccInputHash": "0xad1915669aaf61a83bbfad1f4360c1a32245e38ffb67b1afa68c825135890fc9", + "newAccInputHash": "0xbd71644a8d0eff3d5ae771310c7f15c097dddffe7199e6db738479b01729abfe", + "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "oldNumBatch": 3, + "newNumBatch": 4, + "chainID": 1000, + "batchL2Data": "0xee01843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff883782dace9d900000808203e88080d7d8b23bdec805a0c758de3e2289077b1e4c8401ddff73c7e59e2f9351d14f5f6f04e7bbb69548737581cd5a6e3bac8695776bfd41dc1c8fc9921c4b08e008031bee02843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff8829a2241af62c0000808203e88080ee8448de88596fff6a98af2e603c9a10ccafa114815e844c8b7e8c52cb3fd1470d81101bb5a4a0aa5f459f29da0f6e95cd9e178774f0f3f1c48733618d7bd2231c", + "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", + "timestamp": 1944498032, + "sequencerAddr": "0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D", + "batchHashData": "0x763d3272e66b10bef69106ea07750823c580d20802fb1141b69b5ec56790a449", + "contractsBytecode": {}, + "db": { + "0xdda07776ee34dbee557cd839abeb522b89540a9a670cea4856af7bdc40396a86": [ + "40dc16d040c6ba85", + "b2698618c8f843f9", + "f0af1ef6889f802f", + "fc2a002025d1be5b", + "7d7c02eae0895a66", + "5948c213d37bb227", + "5e531c61117ad836", + "bd75163b28195b06", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xfc2a002025d1be5bf0af1ef6889f802fb2698618c8f843f940dc16d040c6ba85": [ + "7244456069b61fb9", + "f12d0c78f0b1c456", + "943aaafaef062428", + "34f19f4397af5227", + "4ea7b634b1655b6c", + "2e77cc35af85d3b2", + "ee0023cd0349c382", + "dbb1f8deeca11a8c", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x34f19f4397af5227943aaafaef062428f12d0c78f0b1c4567244456069b61fb9": [ + "48a46a8e735c5308", + "13c524e0f8adc42e", + "4e2074fc48c70ae0", + "85bf62d5f65b9449", + "6fb863e332cedfef", + "7ba318532e17ee63", + "7d196528afb0b2b3", + "1e96f77a2789e4a8", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x1e96f77a2789e4a87d196528afb0b2b37ba318532e17ee636fb863e332cedfef": [ + "0000000073e6af70", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xdbb1f8deeca11a8cee0023cd0349c3822e77cc35af85d3b24ea7b634b1655b6c": [ + "35ac5b0725e77088", + "c618dbf7e28aca4a", + "3bba9183ae3604c1", + "5443b2d236f92f8c", + "ccb0872229d9428a", + "392384aa92e3b62d", + "a04678bfaf40c3aa", + "7d38466a7779520d", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x5443b2d236f92f8c3bba9183ae3604c1c618dbf7e28aca4a35ac5b0725e77088": [ + "02aa707693b30b9c", + "6cfec68811f9460f", + "5180f56a58386690", + "bcc3f4d2c3de39da", + "ebceab13bad9b083", + "ace90eb2eea0f82e", + "49ddab955b7b0641", + "793f19b91b3ce843", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x793f19b91b3ce84349ddab955b7b0641ace90eb2eea0f82eebceab13bad9b083": [ + "0000000093a18eac", + "0000000087949e1c", + "0000000013081c6e", + "000000000a969138", + "000000008cd388cd", + "0000000076a8a603", + "000000000b052f92", + "000000002a5654e4" + ], + "0x7d38466a7779520da04678bfaf40c3aa392384aa92e3b62dccb0872229d9428a": [ + "de85f6b6f35eb434", + "ff72d70ff218137c", + "3cddc2a902a47f90", + "bf636d7f9cca148b", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xbf636d7f9cca148b3cddc2a902a47f90ff72d70ff218137cde85f6b6f35eb434": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "f6043722b533d688", + "cccaa4ea742a40a8", + "e1dc1c6be86ad10d", + "86ed3025c1099697", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x86ed3025c1099697e1dc1c6be86ad10dcccaa4ea742a40a8f6043722b533d688": [ + "94c9b6c977fd6b62", + "63d51a718f1d4595", + "0af1d54b83576182", + "e7ead4cf47b5f6a7", + "fa21c802e3203385", + "6994f11f82f251e6", + "f0bd59a452d4d0ee", + "e8ee44891402527a", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xe7ead4cf47b5f6a70af1d54b8357618263d51a718f1d459594c9b6c977fd6b62": [ + "37866cdbe5877c88", + "2d62534cb92ee170", + "6bf2c9fd6a3aa16c", + "325ba19f4ab866aa", + "cad6cdbfa198be91", + "cd0e941b466a39b4", + "a7e6b3f9d3f197d5", + "a2135065f1605059", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xa2135065f1605059a7e6b3f9d3f197d5cd0e941b466a39b4cad6cdbfa198be91": [ + "0000000000000003", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xe8ee44891402527af0bd59a452d4d0ee6994f11f82f251e6fa21c802e3203385": [ + "20284081553655e3", + "280e11c9e7886afe", + "083dff83bd06d987", + "77c2e46005223573", + "8970fbd8a8e998b0", + "78ae1b24331feafe", + "4b733a42af75c0d1", + "8bed5904c253e80b", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x8bed5904c253e80b4b733a42af75c0d178ae1b24331feafe8970fbd8a8e998b0": [ + "00000000d2582b99", + "00000000dfc171ed", + "0000000070a9b538", + "000000003cf71b6a", + "00000000f175a4f8", + "0000000091639493", + "0000000084a5333b", + "00000000c8a0cb4b" + ], + "0xbd75163b28195b065e531c61117ad8365948c213d37bb2277d7c02eae0895a66": [ + "19efe935ba345c27", + "167065d5fb45cf79", + "c99a67590ae8aea9", + "2f462c5fc4528cf8", + "5eba2d109e922180", + "da049cc067bea39f", + "5ab65c767fe694f5", + "7f26bc92a5af4db7", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x2f462c5fc4528cf8c99a67590ae8aea9167065d5fb45cf7919efe935ba345c27": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "368b0865baecd9c2", + "7775aaf79f32f5c8", + "54387e71b92da6f2", + "b3a335227978ed6a", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xb3a335227978ed6a54387e71b92da6f27775aaf79f32f5c8368b0865baecd9c2": [ + "9e0f700ca62c18b6", + "ad28cf8357819cbe", + "5755654f95ffb169", + "080d700756d33b65", + "f98791bc36627ac1", + "9d19818035e75ffc", + "6e5b6469442f0ab2", + "0d0c1d7a608e2f53", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x080d700756d33b655755654f95ffb169ad28cf8357819cbe9e0f700ca62c18b6": [ + "16dde42596b907f0", + "49015d7e991a1528", + "4a6eced6e8304885", + "305a6af4d7a8a00c", + "90e98ea2a6fee2b3", + "09b4104e4b0f1f42", + "3c656749691cf3af", + "4b1d11a97ceff72f", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x4b1d11a97ceff72f3c656749691cf3af09b4104e4b0f1f4290e98ea2a6fee2b3": [ + "00000000c5080000", + "00000000f9ccd8a1", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x0d0c1d7a608e2f536e5b6469442f0ab29d19818035e75ffcf98791bc36627ac1": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0589b4d3d34413e4", + "17f2dd178ca7a06c", + "0f6d82a74b80007e", + "0dbd903a50b61fac", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x0dbd903a50b61fac0f6d82a74b80007e17f2dd178ca7a06c0589b4d3d34413e4": [ + "e37ad7988d2734e1", + "b48ff1a2d485bf8b", + "b8479aa634e0301f", + "02299c9ad4460ab2", + "7957101cb7ff1c74", + "ec1ec8d879a1614f", + "86ea87d83fdcc756", + "d5b032ca00c9d4d6", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x02299c9ad4460ab2b8479aa634e0301fb48ff1a2d485bf8be37ad7988d2734e1": [ + "08e4392e4efedcc5", + "3ffdfa85d03da17c", + "7c18430af73c190c", + "1c3e76134671e490", + "a27c610b929c5373", + "d822841a75cff991", + "d5fd2275e32107a8", + "eebb7a70544ab6b3", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xeebb7a70544ab6b3d5fd2275e32107a8d822841a75cff991a27c610b929c5373": [ + "0000000000000004", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xd5b032ca00c9d4d686ea87d83fdcc756ec1ec8d879a1614f7957101cb7ff1c74": [ + "25fd1dddf4354e7c", + "2b1a0e19c11639a0", + "4b2ece4042b09d92", + "58a82e472c5b400b", + "e40e5d8032e287d0", + "ddc592fc73ab0b86", + "ed3905301252378f", + "46abddcc5b6acb19", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x46abddcc5b6acb19ed3905301252378fddc592fc73ab0b86e40e5d8032e287d0": [ + "000000003a81fe5f", + "00000000370767ab", + "00000000d45c560b", + "00000000f45450eb", + "000000000a951648", + "00000000a006c34f", + "00000000ce4715e3", + "00000000618ee1d1" + ], + "0x7f26bc92a5af4db75ab65c767fe694f5da049cc067bea39f5eba2d109e922180": [ + "7843a2ed5bec46b1", + "a5be26d73ae537cf", + "8efd80841dd5d382", + "ef28409ad26e7282", + "2b6429747753e992", + "8de937d8391bc07c", + "0ba2467e6b2a03b8", + "43ce72d79779e851", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xef28409ad26e72828efd80841dd5d382a5be26d73ae537cf7843a2ed5bec46b1": [ + "205c77d6b9f5eefc", + "28f8d6d672c9506b", + "4eb97b136c3768b6", + "1a621134ad618159", + "dce2eeec6b8d221c", + "1dc936ab2b3ea242", + "3c4663d36bdee9df", + "63533e6d4b9e1288", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x1a621134ad6181594eb97b136c3768b628f8d6d672c9506b205c77d6b9f5eefc": [ + "442f7573a4097cf2", + "3520bc74612a2ea9", + "143ce4e61bf52251", + "6d34d1e254003d2d", + "d074b8cee5dcf415", + "2346a1b4c0f390e8", + "47969c1f5a6a25b1", + "da62fdf84a21108e", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xda62fdf84a21108e47969c1f5a6a25b12346a1b4c0f390e8d074b8cee5dcf415": [ + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x63533e6d4b9e12883c4663d36bdee9df1dc936ab2b3ea242dce2eeec6b8d221c": [ + "7160cca03ed221b2", + "347a16f174192c56", + "2a3e1067115745c2", + "5c330b93d4700b22", + "4e0a8f01cc63c656", + "f9b87ebb3b907221", + "e2675816f35ac228", + "d806a369a18d0eb0", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xd806a369a18d0eb0e2675816f35ac228f9b87ebb3b9072214e0a8f01cc63c656": [ + "00000000faa6b288", + "000000004777b8f2", + "00000000a99b03b4", + "00000000186c44ac", + "000000007b5f11f5", + "000000008173b0e3", + "00000000c3ec5a6e", + "00000000ca213a0c" + ], + "0x43ce72d79779e8510ba2467e6b2a03b88de937d8391bc07c2b6429747753e992": [ + "66ee2be0687eea76", + "6926f8ca8796c78a", + "26179f49c434dc16", + "649e63bfe1247ba4", + "67bbfffd0982dfa4", + "93c661c88448b5ed", + "cec2687622ccc942", + "4e709c8e17913749", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x4e709c8e17913749cec2687622ccc94293c661c88448b5ed67bbfffd0982dfa4": [ + "0000000019980000", + "000000003bfcd524", + "0000000000000035", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ] + } + } + ], + "oldStateRoot": "0x3ca39a7b5b419d1c50c89a8d15d1234f6cbc8baadb465efb609832bbc19f9026", + "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "oldNumBatch": 0, + "newStateRoot": "0x46620e8b8298f31c6999d0547d716a5c1d0e754cff5f1b85ed75eb10cdbb623f", + "newAccInputHash": "0xbd71644a8d0eff3d5ae771310c7f15c097dddffe7199e6db738479b01729abfe", "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "newStateRoot": "0xa37d06ecd291d1269a9f532535d7a269260959ef3c07b384947482cfc3550c15", - "numBatch": 7, - "oldLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "oldStateRoot": "0xc6b9bf11177fa5ed4435be8c6a53e19723f9ed187f9ed7b1bec4d404919543b6", - "sequencerAddr": "0x292c1b849531C841e422BD38a6F6c70Ca7Ae1e8F", - "timestamp": 1664801979 -} \ No newline at end of file + "newNumBatch": 4, + "chainID": 1000, + "aggregatorAddress": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "inputSnark": "0x0ddde9228cc399ab644e2c625c328a0bd5fc0c9b29361a9aea0a9fce01879c9f" + } \ No newline at end of file diff --git a/test/contracts/real-prover/test-inputs/proof.json b/test/contracts/real-prover/test-inputs/proof.json index 699c0c16a..bdeced9e2 100644 --- a/test/contracts/real-prover/test-inputs/proof.json +++ b/test/contracts/real-prover/test-inputs/proof.json @@ -1,17 +1,18 @@ + { "pi_a": [ - "17725108043689880547430607796818332710218314664673646389603828095215371918732", - "1335461676644128156881925797208139685107783862126666539158173153568879099363", + "92720107533401008849053778558049219855365383482526087085452173073370760805", + "13826838703389754954030947414105187663814967588576084571406321808291125843435", "1" ], "pi_b": [ [ - "16304460975589797287003167247933239446176783294882676519884713714599437456843", - "16640637784844881573042215118601236347460897560434471171094286617480508294627" + "5475858851212457450955721661678670781624308838111317524369599592504160527901", + "17941023582557154607979891126610962501834920288981572906618674423793027994818" ], [ - "6303774052270993994311235288724936877187618510707699010859529060893477592809", - "8991077555601611883015086273110156838576071012533949653761592875588327996919" + "133141362172752167181464746908147091611715494326322188365259936101242370441", + "15283277295854565461827967770178761605443770145623911758153795385044736856957" ], [ "1", @@ -19,8 +20,8 @@ ] ], "pi_c": [ - "9598701645615535400366987688017391893737769376674613307030003600552498644879", - "19085338477615102388762142090535176605512726097732361175107940295515808620357", + "1242071955068832938180609069213946031298425379167551849613080735211649206690", + "9399857286493874866222544675489603818689332155558918500289148827560827908499", "1" ], "protocol": "groth16" diff --git a/test/contracts/real-prover/test-inputs/public.json b/test/contracts/real-prover/test-inputs/public.json index 8c405e042..4a2c29301 100644 --- a/test/contracts/real-prover/test-inputs/public.json +++ b/test/contracts/real-prover/test-inputs/public.json @@ -1,3 +1,3 @@ [ - "1195089806287684402577889461684836130221392963785446391283718830064330600935" + "6723147925435946818494446359291442548017141378035998979955073992179800955505" ] \ No newline at end of file From ebe85a6844ef0d43e85d6b70cb08af2d1ef74f04 Mon Sep 17 00:00:00 2001 From: krlosMata Date: Wed, 23 Nov 2022 09:31:15 +0100 Subject: [PATCH 23/71] fix rebase --- compiled-contracts/Bridge.json | 4 +- compiled-contracts/BridgeMock.json | 4 +- compiled-contracts/ProofOfEfficiency.json | 4 +- compiled-contracts/ProofOfEfficiencyMock.json | 4 +- contracts/Bridge.sol | 27 ++++++++++--- contracts/ProofOfEfficiency.sol | 2 +- contracts/lib/EmergencyManager.sol | 2 +- docs/Bridge.md | 40 ++++++++++++++++--- docs/ProofOfEfficiency.md | 2 +- 9 files changed, 67 insertions(+), 22 deletions(-) diff --git a/compiled-contracts/Bridge.json b/compiled-contracts/Bridge.json index 717f4e0bc..34b76d590 100644 --- a/compiled-contracts/Bridge.json +++ b/compiled-contracts/Bridge.json @@ -776,8 +776,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50615829806100206000396000f3fe608060405260043610620001db5760003560e01c806381b1c17411620000ff578063d96a15f71162000095578063e7a5b4ea116200006c578063e7a5b4ea1462000658578063ed6be5c9146200067d578063f2fde38b1462000694578063ff634ed714620006b957600080fd5b8063d96a15f714620005f5578063dbc16976146200060c578063e7375881146200062457600080fd5b8063a08e8a0811620000d6578063a08e8a08146200054f578063aaa13cc21462000579578063bab161bf146200059e578063d02103ca14620005d357600080fd5b806381b1c17414620004d35780638da5cb5b146200050d5780638f611519146200052d57600080fd5b80633ae05047116200017557806346385549116200014c57806346385549146200044c578063655595401462000471578063715018a614620004965780637b6323c114620004ae57600080fd5b80633ae05047146200032e5780633da8168214620003465780633e197043146200036b57600080fd5b80632072f6c511620001b65780632072f6c5146200025157806322e95f2c14620002695780632dfdf0b514620002a7578063318aee3d14620002bf57600080fd5b80630871e97114620001e05780630e1da6c314620001f957806315064c961462000224575b600080fd5b620001f7620001f136600462003146565b620006d0565b005b3480156200020657600080fd5b5062000211608d5481565b6040519081526020015b60405180910390f35b3480156200023157600080fd5b50602254620002409060ff1681565b60405190151581526020016200021b565b3480156200025e57600080fd5b50620001f762000c7a565b3480156200027657600080fd5b506200028e62000288366004620031d3565b62000d2e565b6040516001600160a01b0390911681526020016200021b565b348015620002b457600080fd5b506200021160215481565b348015620002cc57600080fd5b5062000309620002de3660046200320f565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200021b565b3480156200033b57600080fd5b506200021162000db1565b3480156200035357600080fd5b50620002406200036536600462003317565b62000ea4565b3480156200037857600080fd5b50620002116200038a36600462003395565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200045957600080fd5b50620001f76200046b366004620034a6565b62000fa6565b3480156200047e57600080fd5b50620001f7620004903660046200358d565b6200122c565b348015620004a357600080fd5b50620001f762001412565b348015620004bb57600080fd5b50620001f7620004cd366004620034a6565b62001428565b348015620004e057600080fd5b506200028e620004f2366004620035e3565b6089602052600090815260409020546001600160a01b031681565b3480156200051a57600080fd5b506055546001600160a01b03166200028e565b3480156200053a57600080fd5b50608c546200028e906001600160a01b031681565b3480156200055c57600080fd5b5062000566600081565b60405160ff90911681526020016200021b565b3480156200058657600080fd5b506200028e62000598366004620035fd565b620019ea565b348015620005ab57600080fd5b50608754620005bd9063ffffffff1681565b60405163ffffffff90911681526020016200021b565b348015620005e057600080fd5b50608b546200028e906001600160a01b031681565b620001f762000606366004620036b1565b62001b56565b3480156200061957600080fd5b50620001f762001e0a565b3480156200063157600080fd5b506200024062000643366004620035e3565b60886020526000908152604090205460ff1681565b3480156200066557600080fd5b50620001f762000677366004620035e3565b62001ebc565b3480156200068a57600080fd5b50620005bd600081565b348015620006a157600080fd5b50620001f7620006b33660046200320f565b62001f01565b348015620006c657600080fd5b5062000566600181565b60225460ff1615620007755760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60875463ffffffff90811690861603620007f85760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b60008060606001600160a01b0389166200088d57853414620008835760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200076c565b6000915062000b17565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000974576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af11580156200093b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000961919062003728565b5060208101518151909450925062000b15565b84156200098957620009898a88888862001f97565b620009a06001600160a01b038b1633308a620025bc565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620009f7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a219190810190620037c3565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000a60573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a8a9190810190620037c3565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ac9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aef9190620037fc565b60405160200162000b03939291906200384a565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162000b5998979695949392919062003887565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000c019062002675565b608b546001600160a01b03166333d6247d62000c1c62000db1565b6040518263ffffffff1660e01b815260040162000c3b91815260200190565b600060405180830381600087803b15801562000c5657600080fd5b505af115801562000c6b573d6000803e3d6000fd5b50505050505050505050505050565b608c546001600160a01b0316331462000d225760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c620027d9565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b602154600090819081805b602081101562000e9b578260011660010362000e1c576001816020811062000de85762000de8620038f3565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000e49565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000e5660028462003951565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000e92906200398d565b91505062000dbc565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000f97578160011660010362000f215786818151811062000edf5762000edf620038f3565b60200260200101518360405160200162000f03929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000f73565b8287828151811062000f375762000f37620038f3565b602002602001015160405160200162000f5a929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000f8060028362003951565b91508062000f8e816200398d565b91505062000eb4565b5050821490505b949350505050565b60225460ff1615620010475760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6200105d8a8a8a8a8a8a8a8a8a8a6001620028b2565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b038516908490620010a09089908b908790602401620039c8565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001105919062003a01565b60006040518083038185875af1925050503d806000811462001144576040519150601f19603f3d011682016040523d82523d6000602084013e62001149565b606091505b5050905080620011c15760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff16158080156200124d5750600054600160ff909116105b80620012695750303b15801562001269575060005460ff166001145b620012dd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200076c565b6000805460ff1916600117905580156200131e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d829055620013a762002c3f565b80156200140b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6200141c62002cc9565b62000d2c600062002d25565b60225460ff1615620014c95760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b620014df8a8a8a8a8a8a8a8a8a8a6000620028b2565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620015fe57604080516000808252602082019092526001600160a01b0385169084906040516200153a919062003a01565b60006040518083038185875af1925050503d806000811462001579576040519150601f19603f3d011682016040523d82523d6000602084013e6200157e565b606091505b5050905080620015f75760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c45440000000000000000000000000000000000000000000000000060648201526084016200076c565b5062001980565b60875463ffffffff908116908716036200162e57620016286001600160a01b038616848462002d8f565b62001980565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620018ec57600080600085806020019051810190620016ce919062003a1f565b925092509250600085848484604051620016e890620030af565b620016f6939291906200384a565b8190604051809103906000f590508015801562001717573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001785573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017ab919062003728565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620018da9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200197d565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001955573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200197b919062003728565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162001a6d90620030af565b601f1982820381018352601f90910116604081905262001a9a908d908d908d908d908d9060200162003acb565b60408051601f198184030181529082905262001aba929160200162003b0c565b6040516020818303038152906040528051906020012060405160200162001b3094939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff161562001bf75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b60875463ffffffff9081169084160362001c7a5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b9262001cc79260019263ffffffff9092169133918991899134918a919062003887565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d850152346051850152607180850192909252805180850390920182526091909301909252815191012062001d979062002675565b608b546001600160a01b03166333d6247d62001db262000db1565b6040518263ffffffff1660e01b815260040162001dd191815260200190565b600060405180830381600087803b15801562001dec57600080fd5b505af115801562001e01573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001eb25760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c62002dda565b62001ec662002cc9565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001f0b62002cc9565b6001600160a01b03811662001f895760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016200076c565b62001f948162002d25565b50565b600062001fda83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002e8992505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620022dc5760008080808080806200203d896004818d62003b3f565b8101906200204c919062003b6b565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620020e35760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0386163014620021635760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b8a8514620021da5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002288919062003a01565b6000604051808303816000865af19150503d8060008114620022c7576040519150601f19603f3d011682016040523d82523d6000602084013e620022cc565b606091505b505050505050505050506200140b565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c00000000000000000000000000000000000000000000000000000000146200236f5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200076c565b600080808080808080620023878a6004818e62003b3f565b81019062002396919062003bc6565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200242f5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0387163014620024af5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002566919062003a01565b6000604051808303816000865af19150503d8060008114620025a5576040519150601f19603f3d011682016040523d82523d6000602084013e620025aa565b606091505b50505050505050505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526200266f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002e90565b50505050565b806001620026866020600262003d8b565b62002692919062003d99565b602154106200270a5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200076c565b6001602160008282546200271f919062003db3565b909155505060215460005b6020811015620027c957816001166001036200275f578260018260208110620027575762002757620038f3565b015550505050565b60018160208110620027755762002775620038f3565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620027b2919062003951565b915080620027c0816200398d565b9150506200272a565b50620027d462003dce565b505050565b60225460ff16156200287a5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b63ffffffff8a1660009081526088602052604090205460ff16156200293f5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af1158015620029cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620029f2919062003dfd565b9050801580159062002a115750608d5462002a0e824262003d99565b10155b62002a855760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c49440000000000000000000000000000000000000060648201526084016200076c565b60875463ffffffff87811691161462002b075760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000000060648201526084016200076c565b60875460009063ffffffff1662002b2057508862002b23565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d82015260518101899052607180820193909352815180820390930183526091019052805191012062002bf1908e8e63ffffffff168462000ea4565b62000c6b5760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c494460448201526064016200076c565b600054610100900460ff1662002cbe5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200076c565b62000d2c3362002d25565b6055546001600160a01b0316331462000d2c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200076c565b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620027d49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016200260a565b60225460ff1662002e545760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016200076c565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002ee7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662002f7c9092919063ffffffff16565b805190915015620027d4578080602001905181019062002f08919062003728565b620027d45760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200076c565b606062000f9e848460008585600080866001600160a01b0316858760405162002fa6919062003a01565b60006040518083038185875af1925050503d806000811462002fe5576040519150601f19603f3d011682016040523d82523d6000602084013e62002fea565b606091505b509150915062002ffd8783838762003008565b979650505050505050565b606083156200307c57825160000362003074576001600160a01b0385163b620030745760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200076c565b508162000f9e565b62000f9e8383815115620030935781518083602001fd5b8060405162461bcd60e51b81526004016200076c919062003e17565b6119c78062003e2d83390190565b6001600160a01b038116811462001f9457600080fd5b8035620030e081620030bd565b919050565b803563ffffffff81168114620030e057600080fd5b60008083601f8401126200310d57600080fd5b50813567ffffffffffffffff8111156200312657600080fd5b6020830191508360208285010111156200313f57600080fd5b9250929050565b60008060008060008060a087890312156200316057600080fd5b86356200316d81620030bd565b95506200317d60208801620030e5565b945060408701356200318f81620030bd565b935060608701359250608087013567ffffffffffffffff811115620031b357600080fd5b620031c189828a01620030fa565b979a9699509497509295939492505050565b60008060408385031215620031e757600080fd5b620031f283620030e5565b915060208301356200320481620030bd565b809150509250929050565b6000602082840312156200322257600080fd5b81356200322f81620030bd565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171562003291576200329162003236565b604052919050565b600082601f830112620032ab57600080fd5b8135602067ffffffffffffffff821115620032ca57620032ca62003236565b8160051b620032db82820162003265565b9283528481018201928281019087851115620032f657600080fd5b83870192505b8483101562002ffd57823582529183019190830190620032fc565b600080600080608085870312156200332e57600080fd5b84359350602085013567ffffffffffffffff808211156200334e57600080fd5b6200335c8883890162003299565b94506040870135915080821682146200337457600080fd5b509396929550929360600135925050565b60ff8116811462001f9457600080fd5b600080600080600080600060e0888a031215620033b157600080fd5b8735620033be8162003385565b9650620033ce60208901620030e5565b95506040880135620033e081620030bd565b9450620033f060608901620030e5565b935060808801356200340281620030bd565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200343c576200343c62003236565b50601f01601f191660200190565b600082601f8301126200345c57600080fd5b8135620034736200346d826200341f565b62003265565b8181528460208386010111156200348957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620034c757600080fd5b8a3567ffffffffffffffff80821115620034e057600080fd5b620034ee8e838f0162003299565b9b50620034fe60208e01620030e5565b9a5060408d0135995060608d013598506200351c60808e01620030e5565b97506200352c60a08e01620030d3565b96506200353c60c08e01620030e5565b95506200354c60e08e01620030d3565b94506101008d013593506101208d01359150808211156200356c57600080fd5b506200357b8d828e016200344a565b9150509295989b9194979a5092959850565b60008060008060808587031215620035a457600080fd5b620035af85620030e5565b93506020850135620035c181620030bd565b92506040850135620035d381620030bd565b9396929550929360600135925050565b600060208284031215620035f657600080fd5b5035919050565b600080600080600080600060a0888a0312156200361957600080fd5b6200362488620030e5565b965060208801356200363681620030bd565b9550604088013567ffffffffffffffff808211156200365457600080fd5b620036628b838c01620030fa565b909750955060608a01359150808211156200367c57600080fd5b506200368b8a828b01620030fa565b9094509250506080880135620036a18162003385565b8091505092959891949750929550565b600080600060608486031215620036c757600080fd5b620036d284620030e5565b92506020840135620036e481620030bd565b9150604084013567ffffffffffffffff8111156200370157600080fd5b6200370f868287016200344a565b9150509250925092565b801515811462001f9457600080fd5b6000602082840312156200373b57600080fd5b81516200322f8162003719565b60005b83811015620037655781810151838201526020016200374b565b838111156200266f5750506000910152565b600082601f8301126200378957600080fd5b81516200379a6200346d826200341f565b818152846020838601011115620037b057600080fd5b62000f9e82602083016020870162003748565b600060208284031215620037d657600080fd5b815167ffffffffffffffff811115620037ee57600080fd5b62000f9e8482850162003777565b6000602082840312156200380f57600080fd5b81516200322f8162003385565b600081518084526200383681602086016020860162003748565b601f01601f19169290920160200192915050565b6060815260006200385f60608301866200381c565b82810360208401526200387381866200381c565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620038da828501876200381c565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003988577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620039c157620039c162003922565b5060010190565b6001600160a01b038416815263ffffffff83166020820152606060408201526000620039f860608301846200381c565b95945050505050565b6000825162003a1581846020870162003748565b9190910192915050565b60008060006060848603121562003a3557600080fd5b835167ffffffffffffffff8082111562003a4e57600080fd5b62003a5c8783880162003777565b9450602086015191508082111562003a7357600080fd5b5062003a828682870162003777565b925050604084015162003a958162003385565b809150509250925092565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003ae160608301878962003aa0565b828103602084015262003af681868862003aa0565b91505060ff831660408301529695505050505050565b6000835162003b2081846020880162003748565b83519083019062003b3681836020880162003748565b01949350505050565b6000808585111562003b5057600080fd5b8386111562003b5e57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003b8757600080fd5b873562003b9481620030bd565b9650602088013562003ba681620030bd565b955060408801359450606088013593506080880135620034028162003385565b600080600080600080600080610100898b03121562003be457600080fd5b883562003bf181620030bd565b9750602089013562003c0381620030bd565b96506040890135955060608901359450608089013562003c238162003719565b935060a089013562003c358162003385565b979a969950949793969295929450505060c08201359160e0013590565b600181815b8085111562003cb157817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003c955762003c9562003922565b8085161562003ca357918102915b93841c939080029062003c57565b509250929050565b60008262003cca5750600162000dab565b8162003cd95750600062000dab565b816001811462003cf2576002811462003cfd5762003d1d565b600191505062000dab565b60ff84111562003d115762003d1162003922565b50506001821b62000dab565b5060208310610133831016604e8410600b841016171562003d42575081810a62000dab565b62003d4e838362003c52565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d835762003d8362003922565b029392505050565b60006200322f838362003cb9565b60008282101562003dae5762003dae62003922565b500390565b6000821982111562003dc95762003dc962003922565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60006020828403121562003e1057600080fd5b5051919050565b6020815260006200322f60208301846200381c56fe60c06040523480156200001157600080fd5b50604051620019c7380380620019c78339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161150d620004ba600039600061053001526000818161036f01526104fa015261150d6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b604051610191919061123b565b60405180910390f35b6101ad6101a83660046112d7565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad610204366004611301565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad6102763660046112d7565b610552565b6101ad6102893660046112d7565b61059e565b6101c161029c36600461133d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d236600461133d565b60066020526000908152604090205481565b610184610645565b6101ad6102fa3660046112d7565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad6103523660046112d7565b6106ed565b6101ad6103653660046112d7565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f36600461135f565b6107b2565b005b6101c16103b43660046113d2565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043790611405565b80601f016020809104026020016040519081016040528092919081815260200182805461046390611405565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f12565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611487565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c8383610fda565b50600192915050565b60606004805461043790611405565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c83836110b3565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866108818361149f565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f3d610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff821661103d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b806002600082825461104f9190611487565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff821661113c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156111d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610c27565b600060208083528351808285015260005b818110156112685785810183015185820160400152820161124c565b8181111561127a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112d257600080fd5b919050565b600080604083850312156112ea57600080fd5b6112f3836112ae565b946020939093013593505050565b60008060006060848603121561131657600080fd5b61131f846112ae565b925061132d602085016112ae565b9150604084013590509250925092565b60006020828403121561134f57600080fd5b611358826112ae565b9392505050565b600080600080600080600060e0888a03121561137a57600080fd5b611383886112ae565b9650611391602089016112ae565b95506040880135945060608801359350608088013560ff811681146113b557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156113e557600080fd5b6113ee836112ae565b91506113fc602084016112ae565b90509250929050565b600181811c9082168061141957607f821691505b602082108103611452577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561149a5761149a611458565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036114d0576114d0611458565b506001019056fea264697066735822122094134962e5fa2f6357086a2590b7f3a754d340b16e5312664d82a308bc23a0df64736f6c634300080f0033a264697066735822122038131c24024bbc952c3d2f624475606fbf73b929bdaad1a58995cc43510513a064736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001db5760003560e01c806381b1c17411620000ff578063d96a15f71162000095578063e7a5b4ea116200006c578063e7a5b4ea1462000658578063ed6be5c9146200067d578063f2fde38b1462000694578063ff634ed714620006b957600080fd5b8063d96a15f714620005f5578063dbc16976146200060c578063e7375881146200062457600080fd5b8063a08e8a0811620000d6578063a08e8a08146200054f578063aaa13cc21462000579578063bab161bf146200059e578063d02103ca14620005d357600080fd5b806381b1c17414620004d35780638da5cb5b146200050d5780638f611519146200052d57600080fd5b80633ae05047116200017557806346385549116200014c57806346385549146200044c578063655595401462000471578063715018a614620004965780637b6323c114620004ae57600080fd5b80633ae05047146200032e5780633da8168214620003465780633e197043146200036b57600080fd5b80632072f6c511620001b65780632072f6c5146200025157806322e95f2c14620002695780632dfdf0b514620002a7578063318aee3d14620002bf57600080fd5b80630871e97114620001e05780630e1da6c314620001f957806315064c961462000224575b600080fd5b620001f7620001f136600462003146565b620006d0565b005b3480156200020657600080fd5b5062000211608d5481565b6040519081526020015b60405180910390f35b3480156200023157600080fd5b50602254620002409060ff1681565b60405190151581526020016200021b565b3480156200025e57600080fd5b50620001f762000c7a565b3480156200027657600080fd5b506200028e62000288366004620031d3565b62000d2e565b6040516001600160a01b0390911681526020016200021b565b348015620002b457600080fd5b506200021160215481565b348015620002cc57600080fd5b5062000309620002de3660046200320f565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200021b565b3480156200033b57600080fd5b506200021162000db1565b3480156200035357600080fd5b50620002406200036536600462003317565b62000ea4565b3480156200037857600080fd5b50620002116200038a36600462003395565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200045957600080fd5b50620001f76200046b366004620034a6565b62000fa6565b3480156200047e57600080fd5b50620001f7620004903660046200358d565b6200122c565b348015620004a357600080fd5b50620001f762001412565b348015620004bb57600080fd5b50620001f7620004cd366004620034a6565b62001428565b348015620004e057600080fd5b506200028e620004f2366004620035e3565b6089602052600090815260409020546001600160a01b031681565b3480156200051a57600080fd5b506055546001600160a01b03166200028e565b3480156200053a57600080fd5b50608c546200028e906001600160a01b031681565b3480156200055c57600080fd5b5062000566600081565b60405160ff90911681526020016200021b565b3480156200058657600080fd5b506200028e62000598366004620035fd565b620019ea565b348015620005ab57600080fd5b50608754620005bd9063ffffffff1681565b60405163ffffffff90911681526020016200021b565b348015620005e057600080fd5b50608b546200028e906001600160a01b031681565b620001f762000606366004620036b1565b62001b56565b3480156200061957600080fd5b50620001f762001e0a565b3480156200063157600080fd5b506200024062000643366004620035e3565b60886020526000908152604090205460ff1681565b3480156200066557600080fd5b50620001f762000677366004620035e3565b62001ebc565b3480156200068a57600080fd5b50620005bd600081565b348015620006a157600080fd5b50620001f7620006b33660046200320f565b62001f01565b348015620006c657600080fd5b5062000566600181565b60225460ff1615620007755760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60875463ffffffff90811690861603620007f85760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b60008060606001600160a01b0389166200088d57853414620008835760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200076c565b6000915062000b17565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000974576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af11580156200093b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000961919062003728565b5060208101518151909450925062000b15565b84156200098957620009898a88888862001f97565b620009a06001600160a01b038b1633308a620025bc565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620009f7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a219190810190620037c3565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000a60573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a8a9190810190620037c3565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ac9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aef9190620037fc565b60405160200162000b03939291906200384a565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162000b5998979695949392919062003887565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000c019062002675565b608b546001600160a01b03166333d6247d62000c1c62000db1565b6040518263ffffffff1660e01b815260040162000c3b91815260200190565b600060405180830381600087803b15801562000c5657600080fd5b505af115801562000c6b573d6000803e3d6000fd5b50505050505050505050505050565b608c546001600160a01b0316331462000d225760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c620027d9565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b602154600090819081805b602081101562000e9b578260011660010362000e1c576001816020811062000de85762000de8620038f3565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000e49565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000e5660028462003951565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000e92906200398d565b91505062000dbc565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000f97578160011660010362000f215786818151811062000edf5762000edf620038f3565b60200260200101518360405160200162000f03929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000f73565b8287828151811062000f375762000f37620038f3565b602002602001015160405160200162000f5a929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000f8060028362003951565b91508062000f8e816200398d565b91505062000eb4565b5050821490505b949350505050565b60225460ff1615620010475760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6200105d8a8a8a8a8a8a8a8a8a8a6001620028b2565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b038516908490620010a09089908b908790602401620039c8565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001105919062003a01565b60006040518083038185875af1925050503d806000811462001144576040519150601f19603f3d011682016040523d82523d6000602084013e62001149565b606091505b5050905080620011c15760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff16158080156200124d5750600054600160ff909116105b80620012695750303b15801562001269575060005460ff166001145b620012dd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200076c565b6000805460ff1916600117905580156200131e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d829055620013a762002c3f565b80156200140b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6200141c62002cc9565b62000d2c600062002d25565b60225460ff1615620014c95760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b620014df8a8a8a8a8a8a8a8a8a8a6000620028b2565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620015fe57604080516000808252602082019092526001600160a01b0385169084906040516200153a919062003a01565b60006040518083038185875af1925050503d806000811462001579576040519150601f19603f3d011682016040523d82523d6000602084013e6200157e565b606091505b5050905080620015f75760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c45440000000000000000000000000000000000000000000000000060648201526084016200076c565b5062001980565b60875463ffffffff908116908716036200162e57620016286001600160a01b038616848462002d8f565b62001980565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620018ec57600080600085806020019051810190620016ce919062003a1f565b925092509250600085848484604051620016e890620030af565b620016f6939291906200384a565b8190604051809103906000f590508015801562001717573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001785573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017ab919062003728565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620018da9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200197d565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001955573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200197b919062003728565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162001a6d90620030af565b601f1982820381018352601f90910116604081905262001a9a908d908d908d908d908d9060200162003acb565b60408051601f198184030181529082905262001aba929160200162003b0c565b6040516020818303038152906040528051906020012060405160200162001b3094939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff161562001bf75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b60875463ffffffff9081169084160362001c7a5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b9262001cc79260019263ffffffff9092169133918991899134918a919062003887565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d850152346051850152607180850192909252805180850390920182526091909301909252815191012062001d979062002675565b608b546001600160a01b03166333d6247d62001db262000db1565b6040518263ffffffff1660e01b815260040162001dd191815260200190565b600060405180830381600087803b15801562001dec57600080fd5b505af115801562001e01573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001eb25760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c62002dda565b62001ec662002cc9565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001f0b62002cc9565b6001600160a01b03811662001f895760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016200076c565b62001f948162002d25565b50565b600062001fda83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002e8992505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620022dc5760008080808080806200203d896004818d62003b3f565b8101906200204c919062003b6b565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620020e35760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0386163014620021635760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b8a8514620021da5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002288919062003a01565b6000604051808303816000865af19150503d8060008114620022c7576040519150601f19603f3d011682016040523d82523d6000602084013e620022cc565b606091505b505050505050505050506200140b565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c00000000000000000000000000000000000000000000000000000000146200236f5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200076c565b600080808080808080620023878a6004818e62003b3f565b81019062002396919062003bc6565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200242f5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0387163014620024af5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002566919062003a01565b6000604051808303816000865af19150503d8060008114620025a5576040519150601f19603f3d011682016040523d82523d6000602084013e620025aa565b606091505b50505050505050505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526200266f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002e90565b50505050565b806001620026866020600262003d8b565b62002692919062003d99565b602154106200270a5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200076c565b6001602160008282546200271f919062003db3565b909155505060215460005b6020811015620027c957816001166001036200275f578260018260208110620027575762002757620038f3565b015550505050565b60018160208110620027755762002775620038f3565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620027b2919062003951565b915080620027c0816200398d565b9150506200272a565b50620027d462003dce565b505050565b60225460ff16156200287a5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b63ffffffff8a1660009081526088602052604090205460ff16156200293f5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af1158015620029cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620029f2919062003dfd565b9050801580159062002a115750608d5462002a0e824262003d99565b10155b62002a855760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c49440000000000000000000000000000000000000060648201526084016200076c565b60875463ffffffff87811691161462002b075760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000000060648201526084016200076c565b60875460009063ffffffff1662002b2057508862002b23565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d82015260518101899052607180820193909352815180820390930183526091019052805191012062002bf1908e8e63ffffffff168462000ea4565b62000c6b5760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c494460448201526064016200076c565b600054610100900460ff1662002cbe5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200076c565b62000d2c3362002d25565b6055546001600160a01b0316331462000d2c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200076c565b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620027d49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016200260a565b60225460ff1662002e545760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016200076c565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002ee7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662002f7c9092919063ffffffff16565b805190915015620027d4578080602001905181019062002f08919062003728565b620027d45760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200076c565b606062000f9e848460008585600080866001600160a01b0316858760405162002fa6919062003a01565b60006040518083038185875af1925050503d806000811462002fe5576040519150601f19603f3d011682016040523d82523d6000602084013e62002fea565b606091505b509150915062002ffd8783838762003008565b979650505050505050565b606083156200307c57825160000362003074576001600160a01b0385163b620030745760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200076c565b508162000f9e565b62000f9e8383815115620030935781518083602001fd5b8060405162461bcd60e51b81526004016200076c919062003e17565b6119c78062003e2d83390190565b6001600160a01b038116811462001f9457600080fd5b8035620030e081620030bd565b919050565b803563ffffffff81168114620030e057600080fd5b60008083601f8401126200310d57600080fd5b50813567ffffffffffffffff8111156200312657600080fd5b6020830191508360208285010111156200313f57600080fd5b9250929050565b60008060008060008060a087890312156200316057600080fd5b86356200316d81620030bd565b95506200317d60208801620030e5565b945060408701356200318f81620030bd565b935060608701359250608087013567ffffffffffffffff811115620031b357600080fd5b620031c189828a01620030fa565b979a9699509497509295939492505050565b60008060408385031215620031e757600080fd5b620031f283620030e5565b915060208301356200320481620030bd565b809150509250929050565b6000602082840312156200322257600080fd5b81356200322f81620030bd565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171562003291576200329162003236565b604052919050565b600082601f830112620032ab57600080fd5b8135602067ffffffffffffffff821115620032ca57620032ca62003236565b8160051b620032db82820162003265565b9283528481018201928281019087851115620032f657600080fd5b83870192505b8483101562002ffd57823582529183019190830190620032fc565b600080600080608085870312156200332e57600080fd5b84359350602085013567ffffffffffffffff808211156200334e57600080fd5b6200335c8883890162003299565b94506040870135915080821682146200337457600080fd5b509396929550929360600135925050565b60ff8116811462001f9457600080fd5b600080600080600080600060e0888a031215620033b157600080fd5b8735620033be8162003385565b9650620033ce60208901620030e5565b95506040880135620033e081620030bd565b9450620033f060608901620030e5565b935060808801356200340281620030bd565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200343c576200343c62003236565b50601f01601f191660200190565b600082601f8301126200345c57600080fd5b8135620034736200346d826200341f565b62003265565b8181528460208386010111156200348957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620034c757600080fd5b8a3567ffffffffffffffff80821115620034e057600080fd5b620034ee8e838f0162003299565b9b50620034fe60208e01620030e5565b9a5060408d0135995060608d013598506200351c60808e01620030e5565b97506200352c60a08e01620030d3565b96506200353c60c08e01620030e5565b95506200354c60e08e01620030d3565b94506101008d013593506101208d01359150808211156200356c57600080fd5b506200357b8d828e016200344a565b9150509295989b9194979a5092959850565b60008060008060808587031215620035a457600080fd5b620035af85620030e5565b93506020850135620035c181620030bd565b92506040850135620035d381620030bd565b9396929550929360600135925050565b600060208284031215620035f657600080fd5b5035919050565b600080600080600080600060a0888a0312156200361957600080fd5b6200362488620030e5565b965060208801356200363681620030bd565b9550604088013567ffffffffffffffff808211156200365457600080fd5b620036628b838c01620030fa565b909750955060608a01359150808211156200367c57600080fd5b506200368b8a828b01620030fa565b9094509250506080880135620036a18162003385565b8091505092959891949750929550565b600080600060608486031215620036c757600080fd5b620036d284620030e5565b92506020840135620036e481620030bd565b9150604084013567ffffffffffffffff8111156200370157600080fd5b6200370f868287016200344a565b9150509250925092565b801515811462001f9457600080fd5b6000602082840312156200373b57600080fd5b81516200322f8162003719565b60005b83811015620037655781810151838201526020016200374b565b838111156200266f5750506000910152565b600082601f8301126200378957600080fd5b81516200379a6200346d826200341f565b818152846020838601011115620037b057600080fd5b62000f9e82602083016020870162003748565b600060208284031215620037d657600080fd5b815167ffffffffffffffff811115620037ee57600080fd5b62000f9e8482850162003777565b6000602082840312156200380f57600080fd5b81516200322f8162003385565b600081518084526200383681602086016020860162003748565b601f01601f19169290920160200192915050565b6060815260006200385f60608301866200381c565b82810360208401526200387381866200381c565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620038da828501876200381c565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003988577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620039c157620039c162003922565b5060010190565b6001600160a01b038416815263ffffffff83166020820152606060408201526000620039f860608301846200381c565b95945050505050565b6000825162003a1581846020870162003748565b9190910192915050565b60008060006060848603121562003a3557600080fd5b835167ffffffffffffffff8082111562003a4e57600080fd5b62003a5c8783880162003777565b9450602086015191508082111562003a7357600080fd5b5062003a828682870162003777565b925050604084015162003a958162003385565b809150509250925092565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003ae160608301878962003aa0565b828103602084015262003af681868862003aa0565b91505060ff831660408301529695505050505050565b6000835162003b2081846020880162003748565b83519083019062003b3681836020880162003748565b01949350505050565b6000808585111562003b5057600080fd5b8386111562003b5e57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003b8757600080fd5b873562003b9481620030bd565b9650602088013562003ba681620030bd565b955060408801359450606088013593506080880135620034028162003385565b600080600080600080600080610100898b03121562003be457600080fd5b883562003bf181620030bd565b9750602089013562003c0381620030bd565b96506040890135955060608901359450608089013562003c238162003719565b935060a089013562003c358162003385565b979a969950949793969295929450505060c08201359160e0013590565b600181815b8085111562003cb157817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003c955762003c9562003922565b8085161562003ca357918102915b93841c939080029062003c57565b509250929050565b60008262003cca5750600162000dab565b8162003cd95750600062000dab565b816001811462003cf2576002811462003cfd5762003d1d565b600191505062000dab565b60ff84111562003d115762003d1162003922565b50506001821b62000dab565b5060208310610133831016604e8410600b841016171562003d42575081810a62000dab565b62003d4e838362003c52565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d835762003d8362003922565b029392505050565b60006200322f838362003cb9565b60008282101562003dae5762003dae62003922565b500390565b6000821982111562003dc95762003dc962003922565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60006020828403121562003e1057600080fd5b5051919050565b6020815260006200322f60208301846200381c56fe60c06040523480156200001157600080fd5b50604051620019c7380380620019c78339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161150d620004ba600039600061053001526000818161036f01526104fa015261150d6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b604051610191919061123b565b60405180910390f35b6101ad6101a83660046112d7565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad610204366004611301565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad6102763660046112d7565b610552565b6101ad6102893660046112d7565b61059e565b6101c161029c36600461133d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d236600461133d565b60066020526000908152604090205481565b610184610645565b6101ad6102fa3660046112d7565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad6103523660046112d7565b6106ed565b6101ad6103653660046112d7565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f36600461135f565b6107b2565b005b6101c16103b43660046113d2565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043790611405565b80601f016020809104026020016040519081016040528092919081815260200182805461046390611405565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f12565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611487565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c8383610fda565b50600192915050565b60606004805461043790611405565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c83836110b3565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866108818361149f565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f3d610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff821661103d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b806002600082825461104f9190611487565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff821661113c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156111d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610c27565b600060208083528351808285015260005b818110156112685785810183015185820160400152820161124c565b8181111561127a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112d257600080fd5b919050565b600080604083850312156112ea57600080fd5b6112f3836112ae565b946020939093013593505050565b60008060006060848603121561131657600080fd5b61131f846112ae565b925061132d602085016112ae565b9150604084013590509250925092565b60006020828403121561134f57600080fd5b611358826112ae565b9392505050565b600080600080600080600060e0888a03121561137a57600080fd5b611383886112ae565b9650611391602089016112ae565b95506040880135945060608801359350608088013560ff811681146113b557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156113e557600080fd5b6113ee836112ae565b91506113fc602084016112ae565b90509250929050565b600181811c9082168061141957607f821691505b602082108103611452577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561149a5761149a611458565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036114d0576114d0611458565b506001019056fea264697066735822122094134962e5fa2f6357086a2590b7f3a754d340b16e5312664d82a308bc23a0df64736f6c634300080f0033a264697066735822122038131c24024bbc952c3d2f624475606fbf73b929bdaad1a58995cc43510513a064736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50615829806100206000396000f3fe608060405260043610620001db5760003560e01c806381b1c17411620000ff578063d96a15f71162000095578063e7a5b4ea116200006c578063e7a5b4ea1462000658578063ed6be5c9146200067d578063f2fde38b1462000694578063ff634ed714620006b957600080fd5b8063d96a15f714620005f5578063dbc16976146200060c578063e7375881146200062457600080fd5b8063a08e8a0811620000d6578063a08e8a08146200054f578063aaa13cc21462000579578063bab161bf146200059e578063d02103ca14620005d357600080fd5b806381b1c17414620004d35780638da5cb5b146200050d5780638f611519146200052d57600080fd5b80633ae05047116200017557806346385549116200014c57806346385549146200044c578063655595401462000471578063715018a614620004965780637b6323c114620004ae57600080fd5b80633ae05047146200032e5780633da8168214620003465780633e197043146200036b57600080fd5b80632072f6c511620001b65780632072f6c5146200025157806322e95f2c14620002695780632dfdf0b514620002a7578063318aee3d14620002bf57600080fd5b80630871e97114620001e05780630e1da6c314620001f957806315064c961462000224575b600080fd5b620001f7620001f136600462003146565b620006d0565b005b3480156200020657600080fd5b5062000211608d5481565b6040519081526020015b60405180910390f35b3480156200023157600080fd5b50602254620002409060ff1681565b60405190151581526020016200021b565b3480156200025e57600080fd5b50620001f762000c7a565b3480156200027657600080fd5b506200028e62000288366004620031d3565b62000d2e565b6040516001600160a01b0390911681526020016200021b565b348015620002b457600080fd5b506200021160215481565b348015620002cc57600080fd5b5062000309620002de3660046200320f565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200021b565b3480156200033b57600080fd5b506200021162000db1565b3480156200035357600080fd5b50620002406200036536600462003317565b62000ea4565b3480156200037857600080fd5b50620002116200038a36600462003395565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200045957600080fd5b50620001f76200046b366004620034a6565b62000fa6565b3480156200047e57600080fd5b50620001f7620004903660046200358d565b6200122c565b348015620004a357600080fd5b50620001f762001412565b348015620004bb57600080fd5b50620001f7620004cd366004620034a6565b62001428565b348015620004e057600080fd5b506200028e620004f2366004620035e3565b6089602052600090815260409020546001600160a01b031681565b3480156200051a57600080fd5b506055546001600160a01b03166200028e565b3480156200053a57600080fd5b50608c546200028e906001600160a01b031681565b3480156200055c57600080fd5b5062000566600081565b60405160ff90911681526020016200021b565b3480156200058657600080fd5b506200028e62000598366004620035fd565b620019ea565b348015620005ab57600080fd5b50608754620005bd9063ffffffff1681565b60405163ffffffff90911681526020016200021b565b348015620005e057600080fd5b50608b546200028e906001600160a01b031681565b620001f762000606366004620036b1565b62001b56565b3480156200061957600080fd5b50620001f762001e0a565b3480156200063157600080fd5b506200024062000643366004620035e3565b60886020526000908152604090205460ff1681565b3480156200066557600080fd5b50620001f762000677366004620035e3565b62001ebc565b3480156200068a57600080fd5b50620005bd600081565b348015620006a157600080fd5b50620001f7620006b33660046200320f565b62001f01565b348015620006c657600080fd5b5062000566600181565b60225460ff1615620007755760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60875463ffffffff90811690861603620007f85760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b60008060606001600160a01b0389166200088d57853414620008835760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200076c565b6000915062000b17565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000974576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af11580156200093b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000961919062003728565b5060208101518151909450925062000b15565b84156200098957620009898a88888862001f97565b620009a06001600160a01b038b1633308a620025bc565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620009f7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a219190810190620037c3565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000a60573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a8a9190810190620037c3565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ac9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aef9190620037fc565b60405160200162000b03939291906200384a565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162000b5998979695949392919062003887565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000c019062002675565b608b546001600160a01b03166333d6247d62000c1c62000db1565b6040518263ffffffff1660e01b815260040162000c3b91815260200190565b600060405180830381600087803b15801562000c5657600080fd5b505af115801562000c6b573d6000803e3d6000fd5b50505050505050505050505050565b608c546001600160a01b0316331462000d225760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c620027d9565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b602154600090819081805b602081101562000e9b578260011660010362000e1c576001816020811062000de85762000de8620038f3565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000e49565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000e5660028462003951565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000e92906200398d565b91505062000dbc565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000f97578160011660010362000f215786818151811062000edf5762000edf620038f3565b60200260200101518360405160200162000f03929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000f73565b8287828151811062000f375762000f37620038f3565b602002602001015160405160200162000f5a929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000f8060028362003951565b91508062000f8e816200398d565b91505062000eb4565b5050821490505b949350505050565b60225460ff1615620010475760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6200105d8a8a8a8a8a8a8a8a8a8a6001620028b2565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b038516908490620010a09089908b908790602401620039c8565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001105919062003a01565b60006040518083038185875af1925050503d806000811462001144576040519150601f19603f3d011682016040523d82523d6000602084013e62001149565b606091505b5050905080620011c15760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff16158080156200124d5750600054600160ff909116105b80620012695750303b15801562001269575060005460ff166001145b620012dd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200076c565b6000805460ff1916600117905580156200131e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d829055620013a762002c3f565b80156200140b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6200141c62002cc9565b62000d2c600062002d25565b60225460ff1615620014c95760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b620014df8a8a8a8a8a8a8a8a8a8a6000620028b2565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620015fe57604080516000808252602082019092526001600160a01b0385169084906040516200153a919062003a01565b60006040518083038185875af1925050503d806000811462001579576040519150601f19603f3d011682016040523d82523d6000602084013e6200157e565b606091505b5050905080620015f75760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c45440000000000000000000000000000000000000000000000000060648201526084016200076c565b5062001980565b60875463ffffffff908116908716036200162e57620016286001600160a01b038616848462002d8f565b62001980565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620018ec57600080600085806020019051810190620016ce919062003a1f565b925092509250600085848484604051620016e890620030af565b620016f6939291906200384a565b8190604051809103906000f590508015801562001717573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001785573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017ab919062003728565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620018da9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200197d565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001955573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200197b919062003728565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162001a6d90620030af565b601f1982820381018352601f90910116604081905262001a9a908d908d908d908d908d9060200162003acb565b60408051601f198184030181529082905262001aba929160200162003b0c565b6040516020818303038152906040528051906020012060405160200162001b3094939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff161562001bf75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b60875463ffffffff9081169084160362001c7a5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b9262001cc79260019263ffffffff9092169133918991899134918a919062003887565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d850152346051850152607180850192909252805180850390920182526091909301909252815191012062001d979062002675565b608b546001600160a01b03166333d6247d62001db262000db1565b6040518263ffffffff1660e01b815260040162001dd191815260200190565b600060405180830381600087803b15801562001dec57600080fd5b505af115801562001e01573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001eb25760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c62002dda565b62001ec662002cc9565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001f0b62002cc9565b6001600160a01b03811662001f895760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016200076c565b62001f948162002d25565b50565b600062001fda83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002e8992505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620022dc5760008080808080806200203d896004818d62003b3f565b8101906200204c919062003b6b565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620020e35760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0386163014620021635760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b8a8514620021da5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002288919062003a01565b6000604051808303816000865af19150503d8060008114620022c7576040519150601f19603f3d011682016040523d82523d6000602084013e620022cc565b606091505b505050505050505050506200140b565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c00000000000000000000000000000000000000000000000000000000146200236f5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200076c565b600080808080808080620023878a6004818e62003b3f565b81019062002396919062003bc6565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200242f5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0387163014620024af5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002566919062003a01565b6000604051808303816000865af19150503d8060008114620025a5576040519150601f19603f3d011682016040523d82523d6000602084013e620025aa565b606091505b50505050505050505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526200266f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002e90565b50505050565b806001620026866020600262003d8b565b62002692919062003d99565b602154106200270a5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200076c565b6001602160008282546200271f919062003db3565b909155505060215460005b6020811015620027c957816001166001036200275f578260018260208110620027575762002757620038f3565b015550505050565b60018160208110620027755762002775620038f3565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620027b2919062003951565b915080620027c0816200398d565b9150506200272a565b50620027d462003dce565b505050565b60225460ff16156200287a5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b63ffffffff8a1660009081526088602052604090205460ff16156200293f5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af1158015620029cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620029f2919062003dfd565b9050801580159062002a115750608d5462002a0e824262003d99565b10155b62002a855760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c49440000000000000000000000000000000000000060648201526084016200076c565b60875463ffffffff87811691161462002b075760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000000060648201526084016200076c565b60875460009063ffffffff1662002b2057508862002b23565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d82015260518101899052607180820193909352815180820390930183526091019052805191012062002bf1908e8e63ffffffff168462000ea4565b62000c6b5760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c494460448201526064016200076c565b600054610100900460ff1662002cbe5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200076c565b62000d2c3362002d25565b6055546001600160a01b0316331462000d2c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200076c565b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620027d49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016200260a565b60225460ff1662002e545760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016200076c565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002ee7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662002f7c9092919063ffffffff16565b805190915015620027d4578080602001905181019062002f08919062003728565b620027d45760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200076c565b606062000f9e848460008585600080866001600160a01b0316858760405162002fa6919062003a01565b60006040518083038185875af1925050503d806000811462002fe5576040519150601f19603f3d011682016040523d82523d6000602084013e62002fea565b606091505b509150915062002ffd8783838762003008565b979650505050505050565b606083156200307c57825160000362003074576001600160a01b0385163b620030745760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200076c565b508162000f9e565b62000f9e8383815115620030935781518083602001fd5b8060405162461bcd60e51b81526004016200076c919062003e17565b6119c78062003e2d83390190565b6001600160a01b038116811462001f9457600080fd5b8035620030e081620030bd565b919050565b803563ffffffff81168114620030e057600080fd5b60008083601f8401126200310d57600080fd5b50813567ffffffffffffffff8111156200312657600080fd5b6020830191508360208285010111156200313f57600080fd5b9250929050565b60008060008060008060a087890312156200316057600080fd5b86356200316d81620030bd565b95506200317d60208801620030e5565b945060408701356200318f81620030bd565b935060608701359250608087013567ffffffffffffffff811115620031b357600080fd5b620031c189828a01620030fa565b979a9699509497509295939492505050565b60008060408385031215620031e757600080fd5b620031f283620030e5565b915060208301356200320481620030bd565b809150509250929050565b6000602082840312156200322257600080fd5b81356200322f81620030bd565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171562003291576200329162003236565b604052919050565b600082601f830112620032ab57600080fd5b8135602067ffffffffffffffff821115620032ca57620032ca62003236565b8160051b620032db82820162003265565b9283528481018201928281019087851115620032f657600080fd5b83870192505b8483101562002ffd57823582529183019190830190620032fc565b600080600080608085870312156200332e57600080fd5b84359350602085013567ffffffffffffffff808211156200334e57600080fd5b6200335c8883890162003299565b94506040870135915080821682146200337457600080fd5b509396929550929360600135925050565b60ff8116811462001f9457600080fd5b600080600080600080600060e0888a031215620033b157600080fd5b8735620033be8162003385565b9650620033ce60208901620030e5565b95506040880135620033e081620030bd565b9450620033f060608901620030e5565b935060808801356200340281620030bd565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200343c576200343c62003236565b50601f01601f191660200190565b600082601f8301126200345c57600080fd5b8135620034736200346d826200341f565b62003265565b8181528460208386010111156200348957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620034c757600080fd5b8a3567ffffffffffffffff80821115620034e057600080fd5b620034ee8e838f0162003299565b9b50620034fe60208e01620030e5565b9a5060408d0135995060608d013598506200351c60808e01620030e5565b97506200352c60a08e01620030d3565b96506200353c60c08e01620030e5565b95506200354c60e08e01620030d3565b94506101008d013593506101208d01359150808211156200356c57600080fd5b506200357b8d828e016200344a565b9150509295989b9194979a5092959850565b60008060008060808587031215620035a457600080fd5b620035af85620030e5565b93506020850135620035c181620030bd565b92506040850135620035d381620030bd565b9396929550929360600135925050565b600060208284031215620035f657600080fd5b5035919050565b600080600080600080600060a0888a0312156200361957600080fd5b6200362488620030e5565b965060208801356200363681620030bd565b9550604088013567ffffffffffffffff808211156200365457600080fd5b620036628b838c01620030fa565b909750955060608a01359150808211156200367c57600080fd5b506200368b8a828b01620030fa565b9094509250506080880135620036a18162003385565b8091505092959891949750929550565b600080600060608486031215620036c757600080fd5b620036d284620030e5565b92506020840135620036e481620030bd565b9150604084013567ffffffffffffffff8111156200370157600080fd5b6200370f868287016200344a565b9150509250925092565b801515811462001f9457600080fd5b6000602082840312156200373b57600080fd5b81516200322f8162003719565b60005b83811015620037655781810151838201526020016200374b565b838111156200266f5750506000910152565b600082601f8301126200378957600080fd5b81516200379a6200346d826200341f565b818152846020838601011115620037b057600080fd5b62000f9e82602083016020870162003748565b600060208284031215620037d657600080fd5b815167ffffffffffffffff811115620037ee57600080fd5b62000f9e8482850162003777565b6000602082840312156200380f57600080fd5b81516200322f8162003385565b600081518084526200383681602086016020860162003748565b601f01601f19169290920160200192915050565b6060815260006200385f60608301866200381c565b82810360208401526200387381866200381c565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620038da828501876200381c565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003988577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620039c157620039c162003922565b5060010190565b6001600160a01b038416815263ffffffff83166020820152606060408201526000620039f860608301846200381c565b95945050505050565b6000825162003a1581846020870162003748565b9190910192915050565b60008060006060848603121562003a3557600080fd5b835167ffffffffffffffff8082111562003a4e57600080fd5b62003a5c8783880162003777565b9450602086015191508082111562003a7357600080fd5b5062003a828682870162003777565b925050604084015162003a958162003385565b809150509250925092565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003ae160608301878962003aa0565b828103602084015262003af681868862003aa0565b91505060ff831660408301529695505050505050565b6000835162003b2081846020880162003748565b83519083019062003b3681836020880162003748565b01949350505050565b6000808585111562003b5057600080fd5b8386111562003b5e57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003b8757600080fd5b873562003b9481620030bd565b9650602088013562003ba681620030bd565b955060408801359450606088013593506080880135620034028162003385565b600080600080600080600080610100898b03121562003be457600080fd5b883562003bf181620030bd565b9750602089013562003c0381620030bd565b96506040890135955060608901359450608089013562003c238162003719565b935060a089013562003c358162003385565b979a969950949793969295929450505060c08201359160e0013590565b600181815b8085111562003cb157817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003c955762003c9562003922565b8085161562003ca357918102915b93841c939080029062003c57565b509250929050565b60008262003cca5750600162000dab565b8162003cd95750600062000dab565b816001811462003cf2576002811462003cfd5762003d1d565b600191505062000dab565b60ff84111562003d115762003d1162003922565b50506001821b62000dab565b5060208310610133831016604e8410600b841016171562003d42575081810a62000dab565b62003d4e838362003c52565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d835762003d8362003922565b029392505050565b60006200322f838362003cb9565b60008282101562003dae5762003dae62003922565b500390565b6000821982111562003dc95762003dc962003922565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60006020828403121562003e1057600080fd5b5051919050565b6020815260006200322f60208301846200381c56fe60c06040523480156200001157600080fd5b50604051620019c7380380620019c78339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161150d620004ba600039600061053001526000818161036f01526104fa015261150d6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b604051610191919061123b565b60405180910390f35b6101ad6101a83660046112d7565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad610204366004611301565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad6102763660046112d7565b610552565b6101ad6102893660046112d7565b61059e565b6101c161029c36600461133d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d236600461133d565b60066020526000908152604090205481565b610184610645565b6101ad6102fa3660046112d7565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad6103523660046112d7565b6106ed565b6101ad6103653660046112d7565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f36600461135f565b6107b2565b005b6101c16103b43660046113d2565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043790611405565b80601f016020809104026020016040519081016040528092919081815260200182805461046390611405565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f12565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611487565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c8383610fda565b50600192915050565b60606004805461043790611405565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c83836110b3565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866108818361149f565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f3d610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff821661103d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b806002600082825461104f9190611487565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff821661113c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156111d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610c27565b600060208083528351808285015260005b818110156112685785810183015185820160400152820161124c565b8181111561127a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112d257600080fd5b919050565b600080604083850312156112ea57600080fd5b6112f3836112ae565b946020939093013593505050565b60008060006060848603121561131657600080fd5b61131f846112ae565b925061132d602085016112ae565b9150604084013590509250925092565b60006020828403121561134f57600080fd5b611358826112ae565b9392505050565b600080600080600080600060e0888a03121561137a57600080fd5b611383886112ae565b9650611391602089016112ae565b95506040880135945060608801359350608088013560ff811681146113b557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156113e557600080fd5b6113ee836112ae565b91506113fc602084016112ae565b90509250929050565b600181811c9082168061141957607f821691505b602082108103611452577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561149a5761149a611458565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036114d0576114d0611458565b506001019056fea264697066735822122094134962e5fa2f6357086a2590b7f3a754d340b16e5312664d82a308bc23a0df64736f6c634300080f0033a26469706673582212205fe92e73a9d814c47728c0c663c06d86a6ecd1c16944312d7e8053db89a30c6b64736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001db5760003560e01c806381b1c17411620000ff578063d96a15f71162000095578063e7a5b4ea116200006c578063e7a5b4ea1462000658578063ed6be5c9146200067d578063f2fde38b1462000694578063ff634ed714620006b957600080fd5b8063d96a15f714620005f5578063dbc16976146200060c578063e7375881146200062457600080fd5b8063a08e8a0811620000d6578063a08e8a08146200054f578063aaa13cc21462000579578063bab161bf146200059e578063d02103ca14620005d357600080fd5b806381b1c17414620004d35780638da5cb5b146200050d5780638f611519146200052d57600080fd5b80633ae05047116200017557806346385549116200014c57806346385549146200044c578063655595401462000471578063715018a614620004965780637b6323c114620004ae57600080fd5b80633ae05047146200032e5780633da8168214620003465780633e197043146200036b57600080fd5b80632072f6c511620001b65780632072f6c5146200025157806322e95f2c14620002695780632dfdf0b514620002a7578063318aee3d14620002bf57600080fd5b80630871e97114620001e05780630e1da6c314620001f957806315064c961462000224575b600080fd5b620001f7620001f136600462003146565b620006d0565b005b3480156200020657600080fd5b5062000211608d5481565b6040519081526020015b60405180910390f35b3480156200023157600080fd5b50602254620002409060ff1681565b60405190151581526020016200021b565b3480156200025e57600080fd5b50620001f762000c7a565b3480156200027657600080fd5b506200028e62000288366004620031d3565b62000d2e565b6040516001600160a01b0390911681526020016200021b565b348015620002b457600080fd5b506200021160215481565b348015620002cc57600080fd5b5062000309620002de3660046200320f565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200021b565b3480156200033b57600080fd5b506200021162000db1565b3480156200035357600080fd5b50620002406200036536600462003317565b62000ea4565b3480156200037857600080fd5b50620002116200038a36600462003395565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200045957600080fd5b50620001f76200046b366004620034a6565b62000fa6565b3480156200047e57600080fd5b50620001f7620004903660046200358d565b6200122c565b348015620004a357600080fd5b50620001f762001412565b348015620004bb57600080fd5b50620001f7620004cd366004620034a6565b62001428565b348015620004e057600080fd5b506200028e620004f2366004620035e3565b6089602052600090815260409020546001600160a01b031681565b3480156200051a57600080fd5b506055546001600160a01b03166200028e565b3480156200053a57600080fd5b50608c546200028e906001600160a01b031681565b3480156200055c57600080fd5b5062000566600081565b60405160ff90911681526020016200021b565b3480156200058657600080fd5b506200028e62000598366004620035fd565b620019ea565b348015620005ab57600080fd5b50608754620005bd9063ffffffff1681565b60405163ffffffff90911681526020016200021b565b348015620005e057600080fd5b50608b546200028e906001600160a01b031681565b620001f762000606366004620036b1565b62001b56565b3480156200061957600080fd5b50620001f762001e0a565b3480156200063157600080fd5b506200024062000643366004620035e3565b60886020526000908152604090205460ff1681565b3480156200066557600080fd5b50620001f762000677366004620035e3565b62001ebc565b3480156200068a57600080fd5b50620005bd600081565b348015620006a157600080fd5b50620001f7620006b33660046200320f565b62001f01565b348015620006c657600080fd5b5062000566600181565b60225460ff1615620007755760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60875463ffffffff90811690861603620007f85760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b60008060606001600160a01b0389166200088d57853414620008835760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200076c565b6000915062000b17565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000974576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af11580156200093b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000961919062003728565b5060208101518151909450925062000b15565b84156200098957620009898a88888862001f97565b620009a06001600160a01b038b1633308a620025bc565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620009f7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a219190810190620037c3565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000a60573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a8a9190810190620037c3565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ac9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aef9190620037fc565b60405160200162000b03939291906200384a565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162000b5998979695949392919062003887565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000c019062002675565b608b546001600160a01b03166333d6247d62000c1c62000db1565b6040518263ffffffff1660e01b815260040162000c3b91815260200190565b600060405180830381600087803b15801562000c5657600080fd5b505af115801562000c6b573d6000803e3d6000fd5b50505050505050505050505050565b608c546001600160a01b0316331462000d225760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c620027d9565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b602154600090819081805b602081101562000e9b578260011660010362000e1c576001816020811062000de85762000de8620038f3565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000e49565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000e5660028462003951565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000e92906200398d565b91505062000dbc565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000f97578160011660010362000f215786818151811062000edf5762000edf620038f3565b60200260200101518360405160200162000f03929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000f73565b8287828151811062000f375762000f37620038f3565b602002602001015160405160200162000f5a929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000f8060028362003951565b91508062000f8e816200398d565b91505062000eb4565b5050821490505b949350505050565b60225460ff1615620010475760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6200105d8a8a8a8a8a8a8a8a8a8a6001620028b2565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b038516908490620010a09089908b908790602401620039c8565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001105919062003a01565b60006040518083038185875af1925050503d806000811462001144576040519150601f19603f3d011682016040523d82523d6000602084013e62001149565b606091505b5050905080620011c15760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff16158080156200124d5750600054600160ff909116105b80620012695750303b15801562001269575060005460ff166001145b620012dd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200076c565b6000805460ff1916600117905580156200131e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d829055620013a762002c3f565b80156200140b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6200141c62002cc9565b62000d2c600062002d25565b60225460ff1615620014c95760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b620014df8a8a8a8a8a8a8a8a8a8a6000620028b2565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620015fe57604080516000808252602082019092526001600160a01b0385169084906040516200153a919062003a01565b60006040518083038185875af1925050503d806000811462001579576040519150601f19603f3d011682016040523d82523d6000602084013e6200157e565b606091505b5050905080620015f75760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c45440000000000000000000000000000000000000000000000000060648201526084016200076c565b5062001980565b60875463ffffffff908116908716036200162e57620016286001600160a01b038616848462002d8f565b62001980565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620018ec57600080600085806020019051810190620016ce919062003a1f565b925092509250600085848484604051620016e890620030af565b620016f6939291906200384a565b8190604051809103906000f590508015801562001717573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001785573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017ab919062003728565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620018da9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200197d565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001955573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200197b919062003728565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162001a6d90620030af565b601f1982820381018352601f90910116604081905262001a9a908d908d908d908d908d9060200162003acb565b60408051601f198184030181529082905262001aba929160200162003b0c565b6040516020818303038152906040528051906020012060405160200162001b3094939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff161562001bf75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b60875463ffffffff9081169084160362001c7a5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b9262001cc79260019263ffffffff9092169133918991899134918a919062003887565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d850152346051850152607180850192909252805180850390920182526091909301909252815191012062001d979062002675565b608b546001600160a01b03166333d6247d62001db262000db1565b6040518263ffffffff1660e01b815260040162001dd191815260200190565b600060405180830381600087803b15801562001dec57600080fd5b505af115801562001e01573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001eb25760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c62002dda565b62001ec662002cc9565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001f0b62002cc9565b6001600160a01b03811662001f895760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016200076c565b62001f948162002d25565b50565b600062001fda83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002e8992505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620022dc5760008080808080806200203d896004818d62003b3f565b8101906200204c919062003b6b565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620020e35760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0386163014620021635760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b8a8514620021da5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002288919062003a01565b6000604051808303816000865af19150503d8060008114620022c7576040519150601f19603f3d011682016040523d82523d6000602084013e620022cc565b606091505b505050505050505050506200140b565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c00000000000000000000000000000000000000000000000000000000146200236f5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200076c565b600080808080808080620023878a6004818e62003b3f565b81019062002396919062003bc6565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200242f5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0387163014620024af5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002566919062003a01565b6000604051808303816000865af19150503d8060008114620025a5576040519150601f19603f3d011682016040523d82523d6000602084013e620025aa565b606091505b50505050505050505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526200266f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002e90565b50505050565b806001620026866020600262003d8b565b62002692919062003d99565b602154106200270a5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200076c565b6001602160008282546200271f919062003db3565b909155505060215460005b6020811015620027c957816001166001036200275f578260018260208110620027575762002757620038f3565b015550505050565b60018160208110620027755762002775620038f3565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620027b2919062003951565b915080620027c0816200398d565b9150506200272a565b50620027d462003dce565b505050565b60225460ff16156200287a5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b63ffffffff8a1660009081526088602052604090205460ff16156200293f5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af1158015620029cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620029f2919062003dfd565b9050801580159062002a115750608d5462002a0e824262003d99565b10155b62002a855760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c49440000000000000000000000000000000000000060648201526084016200076c565b60875463ffffffff87811691161462002b075760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000000060648201526084016200076c565b60875460009063ffffffff1662002b2057508862002b23565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d82015260518101899052607180820193909352815180820390930183526091019052805191012062002bf1908e8e63ffffffff168462000ea4565b62000c6b5760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c494460448201526064016200076c565b600054610100900460ff1662002cbe5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200076c565b62000d2c3362002d25565b6055546001600160a01b0316331462000d2c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200076c565b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620027d49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016200260a565b60225460ff1662002e545760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016200076c565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002ee7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662002f7c9092919063ffffffff16565b805190915015620027d4578080602001905181019062002f08919062003728565b620027d45760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200076c565b606062000f9e848460008585600080866001600160a01b0316858760405162002fa6919062003a01565b60006040518083038185875af1925050503d806000811462002fe5576040519150601f19603f3d011682016040523d82523d6000602084013e62002fea565b606091505b509150915062002ffd8783838762003008565b979650505050505050565b606083156200307c57825160000362003074576001600160a01b0385163b620030745760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200076c565b508162000f9e565b62000f9e8383815115620030935781518083602001fd5b8060405162461bcd60e51b81526004016200076c919062003e17565b6119c78062003e2d83390190565b6001600160a01b038116811462001f9457600080fd5b8035620030e081620030bd565b919050565b803563ffffffff81168114620030e057600080fd5b60008083601f8401126200310d57600080fd5b50813567ffffffffffffffff8111156200312657600080fd5b6020830191508360208285010111156200313f57600080fd5b9250929050565b60008060008060008060a087890312156200316057600080fd5b86356200316d81620030bd565b95506200317d60208801620030e5565b945060408701356200318f81620030bd565b935060608701359250608087013567ffffffffffffffff811115620031b357600080fd5b620031c189828a01620030fa565b979a9699509497509295939492505050565b60008060408385031215620031e757600080fd5b620031f283620030e5565b915060208301356200320481620030bd565b809150509250929050565b6000602082840312156200322257600080fd5b81356200322f81620030bd565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171562003291576200329162003236565b604052919050565b600082601f830112620032ab57600080fd5b8135602067ffffffffffffffff821115620032ca57620032ca62003236565b8160051b620032db82820162003265565b9283528481018201928281019087851115620032f657600080fd5b83870192505b8483101562002ffd57823582529183019190830190620032fc565b600080600080608085870312156200332e57600080fd5b84359350602085013567ffffffffffffffff808211156200334e57600080fd5b6200335c8883890162003299565b94506040870135915080821682146200337457600080fd5b509396929550929360600135925050565b60ff8116811462001f9457600080fd5b600080600080600080600060e0888a031215620033b157600080fd5b8735620033be8162003385565b9650620033ce60208901620030e5565b95506040880135620033e081620030bd565b9450620033f060608901620030e5565b935060808801356200340281620030bd565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200343c576200343c62003236565b50601f01601f191660200190565b600082601f8301126200345c57600080fd5b8135620034736200346d826200341f565b62003265565b8181528460208386010111156200348957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620034c757600080fd5b8a3567ffffffffffffffff80821115620034e057600080fd5b620034ee8e838f0162003299565b9b50620034fe60208e01620030e5565b9a5060408d0135995060608d013598506200351c60808e01620030e5565b97506200352c60a08e01620030d3565b96506200353c60c08e01620030e5565b95506200354c60e08e01620030d3565b94506101008d013593506101208d01359150808211156200356c57600080fd5b506200357b8d828e016200344a565b9150509295989b9194979a5092959850565b60008060008060808587031215620035a457600080fd5b620035af85620030e5565b93506020850135620035c181620030bd565b92506040850135620035d381620030bd565b9396929550929360600135925050565b600060208284031215620035f657600080fd5b5035919050565b600080600080600080600060a0888a0312156200361957600080fd5b6200362488620030e5565b965060208801356200363681620030bd565b9550604088013567ffffffffffffffff808211156200365457600080fd5b620036628b838c01620030fa565b909750955060608a01359150808211156200367c57600080fd5b506200368b8a828b01620030fa565b9094509250506080880135620036a18162003385565b8091505092959891949750929550565b600080600060608486031215620036c757600080fd5b620036d284620030e5565b92506020840135620036e481620030bd565b9150604084013567ffffffffffffffff8111156200370157600080fd5b6200370f868287016200344a565b9150509250925092565b801515811462001f9457600080fd5b6000602082840312156200373b57600080fd5b81516200322f8162003719565b60005b83811015620037655781810151838201526020016200374b565b838111156200266f5750506000910152565b600082601f8301126200378957600080fd5b81516200379a6200346d826200341f565b818152846020838601011115620037b057600080fd5b62000f9e82602083016020870162003748565b600060208284031215620037d657600080fd5b815167ffffffffffffffff811115620037ee57600080fd5b62000f9e8482850162003777565b6000602082840312156200380f57600080fd5b81516200322f8162003385565b600081518084526200383681602086016020860162003748565b601f01601f19169290920160200192915050565b6060815260006200385f60608301866200381c565b82810360208401526200387381866200381c565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620038da828501876200381c565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003988577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620039c157620039c162003922565b5060010190565b6001600160a01b038416815263ffffffff83166020820152606060408201526000620039f860608301846200381c565b95945050505050565b6000825162003a1581846020870162003748565b9190910192915050565b60008060006060848603121562003a3557600080fd5b835167ffffffffffffffff8082111562003a4e57600080fd5b62003a5c8783880162003777565b9450602086015191508082111562003a7357600080fd5b5062003a828682870162003777565b925050604084015162003a958162003385565b809150509250925092565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003ae160608301878962003aa0565b828103602084015262003af681868862003aa0565b91505060ff831660408301529695505050505050565b6000835162003b2081846020880162003748565b83519083019062003b3681836020880162003748565b01949350505050565b6000808585111562003b5057600080fd5b8386111562003b5e57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003b8757600080fd5b873562003b9481620030bd565b9650602088013562003ba681620030bd565b955060408801359450606088013593506080880135620034028162003385565b600080600080600080600080610100898b03121562003be457600080fd5b883562003bf181620030bd565b9750602089013562003c0381620030bd565b96506040890135955060608901359450608089013562003c238162003719565b935060a089013562003c358162003385565b979a969950949793969295929450505060c08201359160e0013590565b600181815b8085111562003cb157817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003c955762003c9562003922565b8085161562003ca357918102915b93841c939080029062003c57565b509250929050565b60008262003cca5750600162000dab565b8162003cd95750600062000dab565b816001811462003cf2576002811462003cfd5762003d1d565b600191505062000dab565b60ff84111562003d115762003d1162003922565b50506001821b62000dab565b5060208310610133831016604e8410600b841016171562003d42575081810a62000dab565b62003d4e838362003c52565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d835762003d8362003922565b029392505050565b60006200322f838362003cb9565b60008282101562003dae5762003dae62003922565b500390565b6000821982111562003dc95762003dc962003922565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60006020828403121562003e1057600080fd5b5051919050565b6020815260006200322f60208301846200381c56fe60c06040523480156200001157600080fd5b50604051620019c7380380620019c78339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161150d620004ba600039600061053001526000818161036f01526104fa015261150d6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b604051610191919061123b565b60405180910390f35b6101ad6101a83660046112d7565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad610204366004611301565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad6102763660046112d7565b610552565b6101ad6102893660046112d7565b61059e565b6101c161029c36600461133d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d236600461133d565b60066020526000908152604090205481565b610184610645565b6101ad6102fa3660046112d7565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad6103523660046112d7565b6106ed565b6101ad6103653660046112d7565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f36600461135f565b6107b2565b005b6101c16103b43660046113d2565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043790611405565b80601f016020809104026020016040519081016040528092919081815260200182805461046390611405565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f12565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611487565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c8383610fda565b50600192915050565b60606004805461043790611405565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c83836110b3565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866108818361149f565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f3d610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff821661103d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b806002600082825461104f9190611487565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff821661113c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156111d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610c27565b600060208083528351808285015260005b818110156112685785810183015185820160400152820161124c565b8181111561127a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112d257600080fd5b919050565b600080604083850312156112ea57600080fd5b6112f3836112ae565b946020939093013593505050565b60008060006060848603121561131657600080fd5b61131f846112ae565b925061132d602085016112ae565b9150604084013590509250925092565b60006020828403121561134f57600080fd5b611358826112ae565b9392505050565b600080600080600080600060e0888a03121561137a57600080fd5b611383886112ae565b9650611391602089016112ae565b95506040880135945060608801359350608088013560ff811681146113b557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156113e557600080fd5b6113ee836112ae565b91506113fc602084016112ae565b90509250929050565b600181811c9082168061141957607f821691505b602082108103611452577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561149a5761149a611458565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036114d0576114d0611458565b506001019056fea264697066735822122094134962e5fa2f6357086a2590b7f3a754d340b16e5312664d82a308bc23a0df64736f6c634300080f0033a26469706673582212205fe92e73a9d814c47728c0c663c06d86a6ecd1c16944312d7e8053db89a30c6b64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/BridgeMock.json b/compiled-contracts/BridgeMock.json index 777068e20..53ffab780 100644 --- a/compiled-contracts/BridgeMock.json +++ b/compiled-contracts/BridgeMock.json @@ -815,8 +815,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506159dc806100206000396000f3fe608060405260043610620001ff5760003560e01c80637b6323c11162000117578063d02103ca11620000a1578063e7a5b4ea116200006c578063e7a5b4ea14620006de578063ed6be5c91462000703578063f2fde38b146200071a578063ff634ed7146200073f57600080fd5b8063d02103ca1462000659578063d96a15f7146200067b578063dbc169761462000692578063e737588114620006aa57600080fd5b806391e57e2d11620000e257806391e57e2d14620005bd578063a08e8a0814620005d5578063aaa13cc214620005ff578063bab161bf146200062457600080fd5b80637b6323c1146200051c57806381b1c17414620005415780638da5cb5b146200057b5780638f611519146200059b57600080fd5b80632dfdf0b511620001995780633e19704311620001645780633e19704314620003d95780634638554914620004ba5780636555954014620004df578063715018a6146200050457600080fd5b80632dfdf0b51462000315578063318aee3d146200032d5780633ae05047146200039c5780633da8168214620003b457600080fd5b80632072f6c511620001da5780632072f6c5146200027557806322e95f2c146200028d5780632b5e42e714620002cb5780632c3f58cd14620002f057600080fd5b80630871e97114620002045780630e1da6c3146200021d57806315064c961462000248575b600080fd5b6200021b62000215366004620032db565b62000756565b005b3480156200022a57600080fd5b5062000235608d5481565b6040519081526020015b60405180910390f35b3480156200025557600080fd5b50602254620002649060ff1681565b60405190151581526020016200023f565b3480156200028257600080fd5b506200021b62000812565b3480156200029a57600080fd5b50620002b2620002ac36600462003368565b620008c6565b6040516001600160a01b0390911681526020016200023f565b348015620002d857600080fd5b506200021b620002ea366004620033a4565b62000949565b348015620002fd57600080fd5b506200021b6200030f366004620033be565b62000958565b3480156200032257600080fd5b506200023560215481565b3480156200033a57600080fd5b50620003776200034c366004620033e3565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200023f565b348015620003a957600080fd5b506200023562000999565b348015620003c157600080fd5b5062000264620003d3366004620034e4565b62000a8c565b348015620003e657600080fd5b5062000235620003f836600462003562565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004c757600080fd5b506200021b620004d936600462003673565b62000b8e565b348015620004ec57600080fd5b506200021b620004fe3660046200375a565b62000e14565b3480156200051157600080fd5b506200021b62001006565b3480156200052957600080fd5b506200021b6200053b36600462003673565b6200101c565b3480156200054e57600080fd5b50620002b262000560366004620033a4565b6089602052600090815260409020546001600160a01b031681565b3480156200058857600080fd5b506055546001600160a01b0316620002b2565b348015620005a857600080fd5b50608c54620002b2906001600160a01b031681565b348015620005ca57600080fd5b5062000235608e5481565b348015620005e257600080fd5b50620005ec600081565b60405160ff90911681526020016200023f565b3480156200060c57600080fd5b50620002b26200061e366004620037b0565b620015de565b3480156200063157600080fd5b50608754620006439063ffffffff1681565b60405163ffffffff90911681526020016200023f565b3480156200066657600080fd5b50608b54620002b2906001600160a01b031681565b6200021b6200068c36600462003864565b6200174a565b3480156200069f57600080fd5b506200021b620019fe565b348015620006b757600080fd5b5062000264620006c9366004620033a4565b60886020526000908152604090205460ff1681565b348015620006eb57600080fd5b506200021b620006fd366004620033a4565b62001ab0565b3480156200071057600080fd5b5062000643600081565b3480156200072757600080fd5b506200021b62000739366004620033e3565b62001af5565b3480156200074c57600080fd5b50620005ec600181565b608e54341115620007fa5760405162461bcd60e51b815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6200080a86868686868662001b8b565b505050505050565b608c546001600160a01b03163314620008ba5760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c462002131565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b620009536200220a565b608e55565b620009626200220a565b608780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b602154600090819081805b602081101562000a83578260011660010362000a045760018160208110620009d057620009d0620038cc565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000a31565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a3e6002846200392a565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000a7a9062003966565b915050620009a4565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000b7f578160011660010362000b095786818151811062000ac75762000ac7620038cc565b60200260200101518360405160200162000aeb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000b5b565b8287828151811062000b1f5762000b1f620038cc565b602002602001015160405160200162000b42929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000b686002836200392a565b91508062000b768162003966565b91505062000a9c565b5050821490505b949350505050565b60225460ff161562000c2f5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b62000c458a8a8a8a8a8a8a8a8a8a600162002266565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b03851690849062000c889089908b908790602401620039fe565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162000ced919062003a37565b60006040518083038185875af1925050503d806000811462000d2c576040519150601f19603f3d011682016040523d82523d6000602084013e62000d31565b606091505b505090508062000da95760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff161580801562000e355750600054600160ff909116105b8062000e515750303b15801562000e51575060005460ff166001145b62000ec55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007f1565b6000805460ff19166001179055801562000f0657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d8290556703782dace9d90000608e5562000f9b620025f3565b801562000fff57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b620010106200220a565b620008c4600062002678565b60225460ff1615620010bd5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b620010d38a8a8a8a8a8a8a8a8a8a600062002266565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620011f257604080516000808252602082019092526001600160a01b0385169084906040516200112e919062003a37565b60006040518083038185875af1925050503d80600081146200116d576040519150601f19603f3d011682016040523d82523d6000602084013e62001172565b606091505b5050905080620011eb5760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c4544000000000000000000000000000000000000000000000000006064820152608401620007f1565b5062001574565b60875463ffffffff9081169087160362001222576200121c6001600160a01b0386168484620026e2565b62001574565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620014e057600080600085806020019051810190620012c2919062003aa1565b925092509250600085848484604051620012dc9062003244565b620012ea9392919062003b22565b8190604051809103906000f59050801580156200130b573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001379573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200139f919062003b6e565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620014ce9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001571565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001549573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200156f919062003b6e565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620016619062003244565b601f1982820381018352601f9091011660408190526200168e908d908d908d908d908d9060200162003bb9565b60408051601f1981840301815290829052620016ae929160200162003bfa565b604051602081830303815290604052805190602001206040516020016200172494939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620017eb5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff908116908416036200186e5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620018bb9260019263ffffffff9092169133918991899134918a919062003c2d565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200198b9062002792565b608b546001600160a01b03166333d6247d620019a662000999565b6040518263ffffffff1660e01b8152600401620019c591815260200190565b600060405180830381600087803b158015620019e057600080fd5b505af1158015620019f5573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001aa65760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c4620028f1565b62001aba6200220a565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001aff6200220a565b6001600160a01b03811662001b7d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007f1565b62001b888162002678565b50565b60225460ff161562001c2c5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff9081169086160362001caf5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b60008060606001600160a01b03891662001d445785341462001d3a5760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007f1565b6000915062001fce565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001e2b576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562001df2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e18919062003b6e565b5060208101518151909450925062001fcc565b841562001e405762001e408a888888620029a0565b62001e576001600160a01b038b1633308a62002fc5565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001eae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001ed8919081019062003c99565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001f17573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001f41919081019062003c99565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001f80573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001fa6919062003cd2565b60405160200162001fba9392919062003b22565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200201098979695949392919062003c2d565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620020b89062002792565b608b546001600160a01b03166333d6247d620020d362000999565b6040518263ffffffff1660e01b8152600401620020f291815260200190565b600060405180830381600087803b1580156200210d57600080fd5b505af115801562002122573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff1615620021d25760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6055546001600160a01b03163314620008c45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007f1565b63ffffffff8a1660009081526088602052604090205460ff1615620022f35760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562002380573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620023a6919062003cf2565b90508015801590620023c55750608d54620023c2824262003d0c565b10155b620024395760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c4944000000000000000000000000000000000000006064820152608401620007f1565b60875463ffffffff878116911614620024bb5760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000006064820152608401620007f1565b60875460009063ffffffff16620024d4575088620024d7565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d820152605181018990526071808201939093528151808203909301835260910190528051910120620025a5908e8e63ffffffff168462000a8c565b620021225760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c49446044820152606401620007f1565b600054610100900460ff16620026725760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007f1565b620008c4335b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b0383166024820152604481018290526200278d9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526200301e565b505050565b806001620027a36020600262003e5f565b620027af919062003d0c565b60215410620028275760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007f1565b6001602160008282546200283c919062003e6d565b909155505060215460005b6020811015620028e657816001166001036200287c578260018260208110620028745762002874620038cc565b015550505050565b60018160208110620028925762002892620038cc565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620028cf91906200392a565b915080620028dd8162003966565b91505062002847565b506200278d62003e88565b60225460ff166200296b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620007f1565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000620029e383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200310a92505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002ce557600080808080808062002a46896004818d62003eb7565b81019062002a55919062003ee3565b9650965096509650965096509650336001600160a01b0316876001600160a01b03161462002aec5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038616301462002b6c5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b8a851462002be35760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002c91919062003a37565b6000604051808303816000865af19150503d806000811462002cd0576040519150601f19603f3d011682016040523d82523d6000602084013e62002cd5565b606091505b5050505050505050505062000fff565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002d785760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007f1565b60008080808080808062002d908a6004818e62003eb7565b81019062002d9f919062003f3e565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462002e385760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038716301462002eb85760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002f6f919062003a37565b6000604051808303816000865af19150503d806000811462002fae576040519150601f19603f3d011682016040523d82523d6000602084013e62002fb3565b606091505b50505050505050505050505050505050565b6040516001600160a01b0380851660248301528316604482015260648101829052620030189085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002728565b50505050565b600062003075826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620031119092919063ffffffff16565b8051909150156200278d578080602001905181019062003096919062003b6e565b6200278d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007f1565b6020015190565b606062000b86848460008585600080866001600160a01b031685876040516200313b919062003a37565b60006040518083038185875af1925050503d80600081146200317a576040519150601f19603f3d011682016040523d82523d6000602084013e6200317f565b606091505b509150915062003192878383876200319d565b979650505050505050565b606083156200321157825160000362003209576001600160a01b0385163b620032095760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007f1565b508162000b86565b62000b868383815115620032285781518083602001fd5b8060405162461bcd60e51b8152600401620007f1919062003fca565b6119c78062003fe083390190565b6001600160a01b038116811462001b8857600080fd5b8035620032758162003252565b919050565b803563ffffffff811681146200327557600080fd5b60008083601f840112620032a257600080fd5b50813567ffffffffffffffff811115620032bb57600080fd5b602083019150836020828501011115620032d457600080fd5b9250929050565b60008060008060008060a08789031215620032f557600080fd5b8635620033028162003252565b955062003312602088016200327a565b94506040870135620033248162003252565b935060608701359250608087013567ffffffffffffffff8111156200334857600080fd5b6200335689828a016200328f565b979a9699509497509295939492505050565b600080604083850312156200337c57600080fd5b62003387836200327a565b91506020830135620033998162003252565b809150509250929050565b600060208284031215620033b757600080fd5b5035919050565b600060208284031215620033d157600080fd5b620033dc826200327a565b9392505050565b600060208284031215620033f657600080fd5b8135620033dc8162003252565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200345e576200345e62003403565b604052919050565b600082601f8301126200347857600080fd5b8135602067ffffffffffffffff82111562003497576200349762003403565b8160051b620034a882820162003432565b9283528481018201928281019087851115620034c357600080fd5b83870192505b848310156200319257823582529183019190830190620034c9565b60008060008060808587031215620034fb57600080fd5b84359350602085013567ffffffffffffffff808211156200351b57600080fd5b620035298883890162003466565b94506040870135915080821682146200354157600080fd5b509396929550929360600135925050565b60ff8116811462001b8857600080fd5b600080600080600080600060e0888a0312156200357e57600080fd5b87356200358b8162003552565b96506200359b602089016200327a565b95506040880135620035ad8162003252565b9450620035bd606089016200327a565b93506080880135620035cf8162003252565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562003609576200360962003403565b50601f01601f191660200190565b600082601f8301126200362957600080fd5b8135620036406200363a82620035ec565b62003432565b8181528460208386010111156200365657600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200369457600080fd5b8a3567ffffffffffffffff80821115620036ad57600080fd5b620036bb8e838f0162003466565b9b50620036cb60208e016200327a565b9a5060408d0135995060608d01359850620036e960808e016200327a565b9750620036f960a08e0162003268565b96506200370960c08e016200327a565b95506200371960e08e0162003268565b94506101008d013593506101208d01359150808211156200373957600080fd5b50620037488d828e0162003617565b9150509295989b9194979a5092959850565b600080600080608085870312156200377157600080fd5b6200377c856200327a565b935060208501356200378e8162003252565b92506040850135620037a08162003252565b9396929550929360600135925050565b600080600080600080600060a0888a031215620037cc57600080fd5b620037d7886200327a565b96506020880135620037e98162003252565b9550604088013567ffffffffffffffff808211156200380757600080fd5b620038158b838c016200328f565b909750955060608a01359150808211156200382f57600080fd5b506200383e8a828b016200328f565b9094509250506080880135620038548162003552565b8091505092959891949750929550565b6000806000606084860312156200387a57600080fd5b62003885846200327a565b92506020840135620038978162003252565b9150604084013567ffffffffffffffff811115620038b457600080fd5b620038c28682870162003617565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003961577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200399a576200399a620038fb565b5060010190565b60005b83811015620039be578181015183820152602001620039a4565b83811115620030185750506000910152565b60008151808452620039ea816020860160208601620039a1565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003a2e6060830184620039d0565b95945050505050565b6000825162003a4b818460208701620039a1565b9190910192915050565b600082601f83011262003a6757600080fd5b815162003a786200363a82620035ec565b81815284602083860101111562003a8e57600080fd5b62000b86826020830160208701620039a1565b60008060006060848603121562003ab757600080fd5b835167ffffffffffffffff8082111562003ad057600080fd5b62003ade8783880162003a55565b9450602086015191508082111562003af557600080fd5b5062003b048682870162003a55565b925050604084015162003b178162003552565b809150509250925092565b60608152600062003b376060830186620039d0565b828103602084015262003b4b8186620039d0565b91505060ff83166040830152949350505050565b801515811462001b8857600080fd5b60006020828403121562003b8157600080fd5b8151620033dc8162003b5f565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003bcf60608301878962003b8e565b828103602084015262003be481868862003b8e565b91505060ff831660408301529695505050505050565b6000835162003c0e818460208801620039a1565b83519083019062003c24818360208801620039a1565b01949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003c8082850187620039d0565b925080851660e085015250509998505050505050505050565b60006020828403121562003cac57600080fd5b815167ffffffffffffffff81111562003cc457600080fd5b62000b868482850162003a55565b60006020828403121562003ce557600080fd5b8151620033dc8162003552565b60006020828403121562003d0557600080fd5b5051919050565b60008282101562003d215762003d21620038fb565b500390565b600181815b8085111562003d8557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d695762003d69620038fb565b8085161562003d7757918102915b93841c939080029062003d2b565b509250929050565b60008262003d9e5750600162000943565b8162003dad5750600062000943565b816001811462003dc6576002811462003dd15762003df1565b600191505062000943565b60ff84111562003de55762003de5620038fb565b50506001821b62000943565b5060208310610133831016604e8410600b841016171562003e16575081810a62000943565b62003e22838362003d26565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003e575762003e57620038fb565b029392505050565b6000620033dc838362003d8d565b6000821982111562003e835762003e83620038fb565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000808585111562003ec857600080fd5b8386111562003ed657600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003eff57600080fd5b873562003f0c8162003252565b9650602088013562003f1e8162003252565b955060408801359450606088013593506080880135620035cf8162003552565b600080600080600080600080610100898b03121562003f5c57600080fd5b883562003f698162003252565b9750602089013562003f7b8162003252565b96506040890135955060608901359450608089013562003f9b8162003b5f565b935060a089013562003fad8162003552565b979a969950949793969295929450505060c08201359160e0013590565b602081526000620033dc6020830184620039d056fe60c06040523480156200001157600080fd5b50604051620019c7380380620019c78339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161150d620004ba600039600061053001526000818161036f01526104fa015261150d6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b604051610191919061123b565b60405180910390f35b6101ad6101a83660046112d7565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad610204366004611301565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad6102763660046112d7565b610552565b6101ad6102893660046112d7565b61059e565b6101c161029c36600461133d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d236600461133d565b60066020526000908152604090205481565b610184610645565b6101ad6102fa3660046112d7565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad6103523660046112d7565b6106ed565b6101ad6103653660046112d7565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f36600461135f565b6107b2565b005b6101c16103b43660046113d2565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043790611405565b80601f016020809104026020016040519081016040528092919081815260200182805461046390611405565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f12565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611487565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c8383610fda565b50600192915050565b60606004805461043790611405565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c83836110b3565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866108818361149f565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f3d610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff821661103d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b806002600082825461104f9190611487565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff821661113c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156111d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610c27565b600060208083528351808285015260005b818110156112685785810183015185820160400152820161124c565b8181111561127a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112d257600080fd5b919050565b600080604083850312156112ea57600080fd5b6112f3836112ae565b946020939093013593505050565b60008060006060848603121561131657600080fd5b61131f846112ae565b925061132d602085016112ae565b9150604084013590509250925092565b60006020828403121561134f57600080fd5b611358826112ae565b9392505050565b600080600080600080600060e0888a03121561137a57600080fd5b611383886112ae565b9650611391602089016112ae565b95506040880135945060608801359350608088013560ff811681146113b557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156113e557600080fd5b6113ee836112ae565b91506113fc602084016112ae565b90509250929050565b600181811c9082168061141957607f821691505b602082108103611452577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561149a5761149a611458565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036114d0576114d0611458565b506001019056fea264697066735822122094134962e5fa2f6357086a2590b7f3a754d340b16e5312664d82a308bc23a0df64736f6c634300080f0033a2646970667358221220fa289e5d6107b7c3d0d8121dac9d073a816dd5186ba86cef1d20063f64fac49864736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001ff5760003560e01c80637b6323c11162000117578063d02103ca11620000a1578063e7a5b4ea116200006c578063e7a5b4ea14620006de578063ed6be5c91462000703578063f2fde38b146200071a578063ff634ed7146200073f57600080fd5b8063d02103ca1462000659578063d96a15f7146200067b578063dbc169761462000692578063e737588114620006aa57600080fd5b806391e57e2d11620000e257806391e57e2d14620005bd578063a08e8a0814620005d5578063aaa13cc214620005ff578063bab161bf146200062457600080fd5b80637b6323c1146200051c57806381b1c17414620005415780638da5cb5b146200057b5780638f611519146200059b57600080fd5b80632dfdf0b511620001995780633e19704311620001645780633e19704314620003d95780634638554914620004ba5780636555954014620004df578063715018a6146200050457600080fd5b80632dfdf0b51462000315578063318aee3d146200032d5780633ae05047146200039c5780633da8168214620003b457600080fd5b80632072f6c511620001da5780632072f6c5146200027557806322e95f2c146200028d5780632b5e42e714620002cb5780632c3f58cd14620002f057600080fd5b80630871e97114620002045780630e1da6c3146200021d57806315064c961462000248575b600080fd5b6200021b62000215366004620032db565b62000756565b005b3480156200022a57600080fd5b5062000235608d5481565b6040519081526020015b60405180910390f35b3480156200025557600080fd5b50602254620002649060ff1681565b60405190151581526020016200023f565b3480156200028257600080fd5b506200021b62000812565b3480156200029a57600080fd5b50620002b2620002ac36600462003368565b620008c6565b6040516001600160a01b0390911681526020016200023f565b348015620002d857600080fd5b506200021b620002ea366004620033a4565b62000949565b348015620002fd57600080fd5b506200021b6200030f366004620033be565b62000958565b3480156200032257600080fd5b506200023560215481565b3480156200033a57600080fd5b50620003776200034c366004620033e3565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200023f565b348015620003a957600080fd5b506200023562000999565b348015620003c157600080fd5b5062000264620003d3366004620034e4565b62000a8c565b348015620003e657600080fd5b5062000235620003f836600462003562565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004c757600080fd5b506200021b620004d936600462003673565b62000b8e565b348015620004ec57600080fd5b506200021b620004fe3660046200375a565b62000e14565b3480156200051157600080fd5b506200021b62001006565b3480156200052957600080fd5b506200021b6200053b36600462003673565b6200101c565b3480156200054e57600080fd5b50620002b262000560366004620033a4565b6089602052600090815260409020546001600160a01b031681565b3480156200058857600080fd5b506055546001600160a01b0316620002b2565b348015620005a857600080fd5b50608c54620002b2906001600160a01b031681565b348015620005ca57600080fd5b5062000235608e5481565b348015620005e257600080fd5b50620005ec600081565b60405160ff90911681526020016200023f565b3480156200060c57600080fd5b50620002b26200061e366004620037b0565b620015de565b3480156200063157600080fd5b50608754620006439063ffffffff1681565b60405163ffffffff90911681526020016200023f565b3480156200066657600080fd5b50608b54620002b2906001600160a01b031681565b6200021b6200068c36600462003864565b6200174a565b3480156200069f57600080fd5b506200021b620019fe565b348015620006b757600080fd5b5062000264620006c9366004620033a4565b60886020526000908152604090205460ff1681565b348015620006eb57600080fd5b506200021b620006fd366004620033a4565b62001ab0565b3480156200071057600080fd5b5062000643600081565b3480156200072757600080fd5b506200021b62000739366004620033e3565b62001af5565b3480156200074c57600080fd5b50620005ec600181565b608e54341115620007fa5760405162461bcd60e51b815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6200080a86868686868662001b8b565b505050505050565b608c546001600160a01b03163314620008ba5760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c462002131565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b620009536200220a565b608e55565b620009626200220a565b608780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b602154600090819081805b602081101562000a83578260011660010362000a045760018160208110620009d057620009d0620038cc565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000a31565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a3e6002846200392a565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000a7a9062003966565b915050620009a4565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000b7f578160011660010362000b095786818151811062000ac75762000ac7620038cc565b60200260200101518360405160200162000aeb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000b5b565b8287828151811062000b1f5762000b1f620038cc565b602002602001015160405160200162000b42929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000b686002836200392a565b91508062000b768162003966565b91505062000a9c565b5050821490505b949350505050565b60225460ff161562000c2f5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b62000c458a8a8a8a8a8a8a8a8a8a600162002266565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b03851690849062000c889089908b908790602401620039fe565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162000ced919062003a37565b60006040518083038185875af1925050503d806000811462000d2c576040519150601f19603f3d011682016040523d82523d6000602084013e62000d31565b606091505b505090508062000da95760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff161580801562000e355750600054600160ff909116105b8062000e515750303b15801562000e51575060005460ff166001145b62000ec55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007f1565b6000805460ff19166001179055801562000f0657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d8290556703782dace9d90000608e5562000f9b620025f3565b801562000fff57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b620010106200220a565b620008c4600062002678565b60225460ff1615620010bd5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b620010d38a8a8a8a8a8a8a8a8a8a600062002266565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620011f257604080516000808252602082019092526001600160a01b0385169084906040516200112e919062003a37565b60006040518083038185875af1925050503d80600081146200116d576040519150601f19603f3d011682016040523d82523d6000602084013e62001172565b606091505b5050905080620011eb5760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c4544000000000000000000000000000000000000000000000000006064820152608401620007f1565b5062001574565b60875463ffffffff9081169087160362001222576200121c6001600160a01b0386168484620026e2565b62001574565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620014e057600080600085806020019051810190620012c2919062003aa1565b925092509250600085848484604051620012dc9062003244565b620012ea9392919062003b22565b8190604051809103906000f59050801580156200130b573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001379573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200139f919062003b6e565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620014ce9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001571565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001549573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200156f919062003b6e565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620016619062003244565b601f1982820381018352601f9091011660408190526200168e908d908d908d908d908d9060200162003bb9565b60408051601f1981840301815290829052620016ae929160200162003bfa565b604051602081830303815290604052805190602001206040516020016200172494939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620017eb5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff908116908416036200186e5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620018bb9260019263ffffffff9092169133918991899134918a919062003c2d565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200198b9062002792565b608b546001600160a01b03166333d6247d620019a662000999565b6040518263ffffffff1660e01b8152600401620019c591815260200190565b600060405180830381600087803b158015620019e057600080fd5b505af1158015620019f5573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001aa65760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c4620028f1565b62001aba6200220a565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001aff6200220a565b6001600160a01b03811662001b7d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007f1565b62001b888162002678565b50565b60225460ff161562001c2c5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff9081169086160362001caf5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b60008060606001600160a01b03891662001d445785341462001d3a5760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007f1565b6000915062001fce565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001e2b576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562001df2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e18919062003b6e565b5060208101518151909450925062001fcc565b841562001e405762001e408a888888620029a0565b62001e576001600160a01b038b1633308a62002fc5565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001eae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001ed8919081019062003c99565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001f17573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001f41919081019062003c99565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001f80573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001fa6919062003cd2565b60405160200162001fba9392919062003b22565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200201098979695949392919062003c2d565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620020b89062002792565b608b546001600160a01b03166333d6247d620020d362000999565b6040518263ffffffff1660e01b8152600401620020f291815260200190565b600060405180830381600087803b1580156200210d57600080fd5b505af115801562002122573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff1615620021d25760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6055546001600160a01b03163314620008c45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007f1565b63ffffffff8a1660009081526088602052604090205460ff1615620022f35760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562002380573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620023a6919062003cf2565b90508015801590620023c55750608d54620023c2824262003d0c565b10155b620024395760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c4944000000000000000000000000000000000000006064820152608401620007f1565b60875463ffffffff878116911614620024bb5760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000006064820152608401620007f1565b60875460009063ffffffff16620024d4575088620024d7565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d820152605181018990526071808201939093528151808203909301835260910190528051910120620025a5908e8e63ffffffff168462000a8c565b620021225760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c49446044820152606401620007f1565b600054610100900460ff16620026725760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007f1565b620008c4335b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b0383166024820152604481018290526200278d9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526200301e565b505050565b806001620027a36020600262003e5f565b620027af919062003d0c565b60215410620028275760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007f1565b6001602160008282546200283c919062003e6d565b909155505060215460005b6020811015620028e657816001166001036200287c578260018260208110620028745762002874620038cc565b015550505050565b60018160208110620028925762002892620038cc565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620028cf91906200392a565b915080620028dd8162003966565b91505062002847565b506200278d62003e88565b60225460ff166200296b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620007f1565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000620029e383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200310a92505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002ce557600080808080808062002a46896004818d62003eb7565b81019062002a55919062003ee3565b9650965096509650965096509650336001600160a01b0316876001600160a01b03161462002aec5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038616301462002b6c5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b8a851462002be35760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002c91919062003a37565b6000604051808303816000865af19150503d806000811462002cd0576040519150601f19603f3d011682016040523d82523d6000602084013e62002cd5565b606091505b5050505050505050505062000fff565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002d785760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007f1565b60008080808080808062002d908a6004818e62003eb7565b81019062002d9f919062003f3e565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462002e385760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038716301462002eb85760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002f6f919062003a37565b6000604051808303816000865af19150503d806000811462002fae576040519150601f19603f3d011682016040523d82523d6000602084013e62002fb3565b606091505b50505050505050505050505050505050565b6040516001600160a01b0380851660248301528316604482015260648101829052620030189085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002728565b50505050565b600062003075826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620031119092919063ffffffff16565b8051909150156200278d578080602001905181019062003096919062003b6e565b6200278d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007f1565b6020015190565b606062000b86848460008585600080866001600160a01b031685876040516200313b919062003a37565b60006040518083038185875af1925050503d80600081146200317a576040519150601f19603f3d011682016040523d82523d6000602084013e6200317f565b606091505b509150915062003192878383876200319d565b979650505050505050565b606083156200321157825160000362003209576001600160a01b0385163b620032095760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007f1565b508162000b86565b62000b868383815115620032285781518083602001fd5b8060405162461bcd60e51b8152600401620007f1919062003fca565b6119c78062003fe083390190565b6001600160a01b038116811462001b8857600080fd5b8035620032758162003252565b919050565b803563ffffffff811681146200327557600080fd5b60008083601f840112620032a257600080fd5b50813567ffffffffffffffff811115620032bb57600080fd5b602083019150836020828501011115620032d457600080fd5b9250929050565b60008060008060008060a08789031215620032f557600080fd5b8635620033028162003252565b955062003312602088016200327a565b94506040870135620033248162003252565b935060608701359250608087013567ffffffffffffffff8111156200334857600080fd5b6200335689828a016200328f565b979a9699509497509295939492505050565b600080604083850312156200337c57600080fd5b62003387836200327a565b91506020830135620033998162003252565b809150509250929050565b600060208284031215620033b757600080fd5b5035919050565b600060208284031215620033d157600080fd5b620033dc826200327a565b9392505050565b600060208284031215620033f657600080fd5b8135620033dc8162003252565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200345e576200345e62003403565b604052919050565b600082601f8301126200347857600080fd5b8135602067ffffffffffffffff82111562003497576200349762003403565b8160051b620034a882820162003432565b9283528481018201928281019087851115620034c357600080fd5b83870192505b848310156200319257823582529183019190830190620034c9565b60008060008060808587031215620034fb57600080fd5b84359350602085013567ffffffffffffffff808211156200351b57600080fd5b620035298883890162003466565b94506040870135915080821682146200354157600080fd5b509396929550929360600135925050565b60ff8116811462001b8857600080fd5b600080600080600080600060e0888a0312156200357e57600080fd5b87356200358b8162003552565b96506200359b602089016200327a565b95506040880135620035ad8162003252565b9450620035bd606089016200327a565b93506080880135620035cf8162003252565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562003609576200360962003403565b50601f01601f191660200190565b600082601f8301126200362957600080fd5b8135620036406200363a82620035ec565b62003432565b8181528460208386010111156200365657600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200369457600080fd5b8a3567ffffffffffffffff80821115620036ad57600080fd5b620036bb8e838f0162003466565b9b50620036cb60208e016200327a565b9a5060408d0135995060608d01359850620036e960808e016200327a565b9750620036f960a08e0162003268565b96506200370960c08e016200327a565b95506200371960e08e0162003268565b94506101008d013593506101208d01359150808211156200373957600080fd5b50620037488d828e0162003617565b9150509295989b9194979a5092959850565b600080600080608085870312156200377157600080fd5b6200377c856200327a565b935060208501356200378e8162003252565b92506040850135620037a08162003252565b9396929550929360600135925050565b600080600080600080600060a0888a031215620037cc57600080fd5b620037d7886200327a565b96506020880135620037e98162003252565b9550604088013567ffffffffffffffff808211156200380757600080fd5b620038158b838c016200328f565b909750955060608a01359150808211156200382f57600080fd5b506200383e8a828b016200328f565b9094509250506080880135620038548162003552565b8091505092959891949750929550565b6000806000606084860312156200387a57600080fd5b62003885846200327a565b92506020840135620038978162003252565b9150604084013567ffffffffffffffff811115620038b457600080fd5b620038c28682870162003617565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003961577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200399a576200399a620038fb565b5060010190565b60005b83811015620039be578181015183820152602001620039a4565b83811115620030185750506000910152565b60008151808452620039ea816020860160208601620039a1565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003a2e6060830184620039d0565b95945050505050565b6000825162003a4b818460208701620039a1565b9190910192915050565b600082601f83011262003a6757600080fd5b815162003a786200363a82620035ec565b81815284602083860101111562003a8e57600080fd5b62000b86826020830160208701620039a1565b60008060006060848603121562003ab757600080fd5b835167ffffffffffffffff8082111562003ad057600080fd5b62003ade8783880162003a55565b9450602086015191508082111562003af557600080fd5b5062003b048682870162003a55565b925050604084015162003b178162003552565b809150509250925092565b60608152600062003b376060830186620039d0565b828103602084015262003b4b8186620039d0565b91505060ff83166040830152949350505050565b801515811462001b8857600080fd5b60006020828403121562003b8157600080fd5b8151620033dc8162003b5f565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003bcf60608301878962003b8e565b828103602084015262003be481868862003b8e565b91505060ff831660408301529695505050505050565b6000835162003c0e818460208801620039a1565b83519083019062003c24818360208801620039a1565b01949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003c8082850187620039d0565b925080851660e085015250509998505050505050505050565b60006020828403121562003cac57600080fd5b815167ffffffffffffffff81111562003cc457600080fd5b62000b868482850162003a55565b60006020828403121562003ce557600080fd5b8151620033dc8162003552565b60006020828403121562003d0557600080fd5b5051919050565b60008282101562003d215762003d21620038fb565b500390565b600181815b8085111562003d8557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d695762003d69620038fb565b8085161562003d7757918102915b93841c939080029062003d2b565b509250929050565b60008262003d9e5750600162000943565b8162003dad5750600062000943565b816001811462003dc6576002811462003dd15762003df1565b600191505062000943565b60ff84111562003de55762003de5620038fb565b50506001821b62000943565b5060208310610133831016604e8410600b841016171562003e16575081810a62000943565b62003e22838362003d26565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003e575762003e57620038fb565b029392505050565b6000620033dc838362003d8d565b6000821982111562003e835762003e83620038fb565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000808585111562003ec857600080fd5b8386111562003ed657600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003eff57600080fd5b873562003f0c8162003252565b9650602088013562003f1e8162003252565b955060408801359450606088013593506080880135620035cf8162003552565b600080600080600080600080610100898b03121562003f5c57600080fd5b883562003f698162003252565b9750602089013562003f7b8162003252565b96506040890135955060608901359450608089013562003f9b8162003b5f565b935060a089013562003fad8162003552565b979a969950949793969295929450505060c08201359160e0013590565b602081526000620033dc6020830184620039d056fe60c06040523480156200001157600080fd5b50604051620019c7380380620019c78339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161150d620004ba600039600061053001526000818161036f01526104fa015261150d6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b604051610191919061123b565b60405180910390f35b6101ad6101a83660046112d7565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad610204366004611301565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad6102763660046112d7565b610552565b6101ad6102893660046112d7565b61059e565b6101c161029c36600461133d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d236600461133d565b60066020526000908152604090205481565b610184610645565b6101ad6102fa3660046112d7565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad6103523660046112d7565b6106ed565b6101ad6103653660046112d7565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f36600461135f565b6107b2565b005b6101c16103b43660046113d2565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043790611405565b80601f016020809104026020016040519081016040528092919081815260200182805461046390611405565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f12565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611487565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c8383610fda565b50600192915050565b60606004805461043790611405565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c83836110b3565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866108818361149f565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f3d610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff821661103d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b806002600082825461104f9190611487565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff821661113c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156111d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610c27565b600060208083528351808285015260005b818110156112685785810183015185820160400152820161124c565b8181111561127a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112d257600080fd5b919050565b600080604083850312156112ea57600080fd5b6112f3836112ae565b946020939093013593505050565b60008060006060848603121561131657600080fd5b61131f846112ae565b925061132d602085016112ae565b9150604084013590509250925092565b60006020828403121561134f57600080fd5b611358826112ae565b9392505050565b600080600080600080600060e0888a03121561137a57600080fd5b611383886112ae565b9650611391602089016112ae565b95506040880135945060608801359350608088013560ff811681146113b557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156113e557600080fd5b6113ee836112ae565b91506113fc602084016112ae565b90509250929050565b600181811c9082168061141957607f821691505b602082108103611452577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561149a5761149a611458565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036114d0576114d0611458565b506001019056fea264697066735822122094134962e5fa2f6357086a2590b7f3a754d340b16e5312664d82a308bc23a0df64736f6c634300080f0033a2646970667358221220fa289e5d6107b7c3d0d8121dac9d073a816dd5186ba86cef1d20063f64fac49864736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506159dc806100206000396000f3fe608060405260043610620001ff5760003560e01c80637b6323c11162000117578063d02103ca11620000a1578063e7a5b4ea116200006c578063e7a5b4ea14620006de578063ed6be5c91462000703578063f2fde38b146200071a578063ff634ed7146200073f57600080fd5b8063d02103ca1462000659578063d96a15f7146200067b578063dbc169761462000692578063e737588114620006aa57600080fd5b806391e57e2d11620000e257806391e57e2d14620005bd578063a08e8a0814620005d5578063aaa13cc214620005ff578063bab161bf146200062457600080fd5b80637b6323c1146200051c57806381b1c17414620005415780638da5cb5b146200057b5780638f611519146200059b57600080fd5b80632dfdf0b511620001995780633e19704311620001645780633e19704314620003d95780634638554914620004ba5780636555954014620004df578063715018a6146200050457600080fd5b80632dfdf0b51462000315578063318aee3d146200032d5780633ae05047146200039c5780633da8168214620003b457600080fd5b80632072f6c511620001da5780632072f6c5146200027557806322e95f2c146200028d5780632b5e42e714620002cb5780632c3f58cd14620002f057600080fd5b80630871e97114620002045780630e1da6c3146200021d57806315064c961462000248575b600080fd5b6200021b62000215366004620032db565b62000756565b005b3480156200022a57600080fd5b5062000235608d5481565b6040519081526020015b60405180910390f35b3480156200025557600080fd5b50602254620002649060ff1681565b60405190151581526020016200023f565b3480156200028257600080fd5b506200021b62000812565b3480156200029a57600080fd5b50620002b2620002ac36600462003368565b620008c6565b6040516001600160a01b0390911681526020016200023f565b348015620002d857600080fd5b506200021b620002ea366004620033a4565b62000949565b348015620002fd57600080fd5b506200021b6200030f366004620033be565b62000958565b3480156200032257600080fd5b506200023560215481565b3480156200033a57600080fd5b50620003776200034c366004620033e3565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200023f565b348015620003a957600080fd5b506200023562000999565b348015620003c157600080fd5b5062000264620003d3366004620034e4565b62000a8c565b348015620003e657600080fd5b5062000235620003f836600462003562565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004c757600080fd5b506200021b620004d936600462003673565b62000b8e565b348015620004ec57600080fd5b506200021b620004fe3660046200375a565b62000e14565b3480156200051157600080fd5b506200021b62001006565b3480156200052957600080fd5b506200021b6200053b36600462003673565b6200101c565b3480156200054e57600080fd5b50620002b262000560366004620033a4565b6089602052600090815260409020546001600160a01b031681565b3480156200058857600080fd5b506055546001600160a01b0316620002b2565b348015620005a857600080fd5b50608c54620002b2906001600160a01b031681565b348015620005ca57600080fd5b5062000235608e5481565b348015620005e257600080fd5b50620005ec600081565b60405160ff90911681526020016200023f565b3480156200060c57600080fd5b50620002b26200061e366004620037b0565b620015de565b3480156200063157600080fd5b50608754620006439063ffffffff1681565b60405163ffffffff90911681526020016200023f565b3480156200066657600080fd5b50608b54620002b2906001600160a01b031681565b6200021b6200068c36600462003864565b6200174a565b3480156200069f57600080fd5b506200021b620019fe565b348015620006b757600080fd5b5062000264620006c9366004620033a4565b60886020526000908152604090205460ff1681565b348015620006eb57600080fd5b506200021b620006fd366004620033a4565b62001ab0565b3480156200071057600080fd5b5062000643600081565b3480156200072757600080fd5b506200021b62000739366004620033e3565b62001af5565b3480156200074c57600080fd5b50620005ec600181565b608e54341115620007fa5760405162461bcd60e51b815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6200080a86868686868662001b8b565b505050505050565b608c546001600160a01b03163314620008ba5760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c462002131565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b620009536200220a565b608e55565b620009626200220a565b608780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b602154600090819081805b602081101562000a83578260011660010362000a045760018160208110620009d057620009d0620038cc565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000a31565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a3e6002846200392a565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000a7a9062003966565b915050620009a4565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000b7f578160011660010362000b095786818151811062000ac75762000ac7620038cc565b60200260200101518360405160200162000aeb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000b5b565b8287828151811062000b1f5762000b1f620038cc565b602002602001015160405160200162000b42929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000b686002836200392a565b91508062000b768162003966565b91505062000a9c565b5050821490505b949350505050565b60225460ff161562000c2f5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b62000c458a8a8a8a8a8a8a8a8a8a600162002266565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b03851690849062000c889089908b908790602401620039fe565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162000ced919062003a37565b60006040518083038185875af1925050503d806000811462000d2c576040519150601f19603f3d011682016040523d82523d6000602084013e62000d31565b606091505b505090508062000da95760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff161580801562000e355750600054600160ff909116105b8062000e515750303b15801562000e51575060005460ff166001145b62000ec55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007f1565b6000805460ff19166001179055801562000f0657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d8290556703782dace9d90000608e5562000f9b620025f3565b801562000fff57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b620010106200220a565b620008c4600062002678565b60225460ff1615620010bd5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b620010d38a8a8a8a8a8a8a8a8a8a600062002266565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620011f257604080516000808252602082019092526001600160a01b0385169084906040516200112e919062003a37565b60006040518083038185875af1925050503d80600081146200116d576040519150601f19603f3d011682016040523d82523d6000602084013e62001172565b606091505b5050905080620011eb5760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c4544000000000000000000000000000000000000000000000000006064820152608401620007f1565b5062001574565b60875463ffffffff9081169087160362001222576200121c6001600160a01b0386168484620026e2565b62001574565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620014e057600080600085806020019051810190620012c2919062003aa1565b925092509250600085848484604051620012dc9062003244565b620012ea9392919062003b22565b8190604051809103906000f59050801580156200130b573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001379573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200139f919062003b6e565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620014ce9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001571565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001549573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200156f919062003b6e565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620016619062003244565b601f1982820381018352601f9091011660408190526200168e908d908d908d908d908d9060200162003bb9565b60408051601f1981840301815290829052620016ae929160200162003bfa565b604051602081830303815290604052805190602001206040516020016200172494939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620017eb5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff908116908416036200186e5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620018bb9260019263ffffffff9092169133918991899134918a919062003c2d565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200198b9062002792565b608b546001600160a01b03166333d6247d620019a662000999565b6040518263ffffffff1660e01b8152600401620019c591815260200190565b600060405180830381600087803b158015620019e057600080fd5b505af1158015620019f5573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001aa65760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c4620028f1565b62001aba6200220a565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001aff6200220a565b6001600160a01b03811662001b7d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007f1565b62001b888162002678565b50565b60225460ff161562001c2c5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff9081169086160362001caf5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b60008060606001600160a01b03891662001d445785341462001d3a5760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007f1565b6000915062001fce565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001e2b576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562001df2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e18919062003b6e565b5060208101518151909450925062001fcc565b841562001e405762001e408a888888620029a0565b62001e576001600160a01b038b1633308a62002fc5565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001eae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001ed8919081019062003c99565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001f17573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001f41919081019062003c99565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001f80573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001fa6919062003cd2565b60405160200162001fba9392919062003b22565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200201098979695949392919062003c2d565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620020b89062002792565b608b546001600160a01b03166333d6247d620020d362000999565b6040518263ffffffff1660e01b8152600401620020f291815260200190565b600060405180830381600087803b1580156200210d57600080fd5b505af115801562002122573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff1615620021d25760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6055546001600160a01b03163314620008c45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007f1565b63ffffffff8a1660009081526088602052604090205460ff1615620022f35760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562002380573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620023a6919062003cf2565b90508015801590620023c55750608d54620023c2824262003d0c565b10155b620024395760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c4944000000000000000000000000000000000000006064820152608401620007f1565b60875463ffffffff878116911614620024bb5760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000006064820152608401620007f1565b60875460009063ffffffff16620024d4575088620024d7565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d820152605181018990526071808201939093528151808203909301835260910190528051910120620025a5908e8e63ffffffff168462000a8c565b620021225760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c49446044820152606401620007f1565b600054610100900460ff16620026725760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007f1565b620008c4335b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b0383166024820152604481018290526200278d9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526200301e565b505050565b806001620027a36020600262003e5f565b620027af919062003d0c565b60215410620028275760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007f1565b6001602160008282546200283c919062003e6d565b909155505060215460005b6020811015620028e657816001166001036200287c578260018260208110620028745762002874620038cc565b015550505050565b60018160208110620028925762002892620038cc565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620028cf91906200392a565b915080620028dd8162003966565b91505062002847565b506200278d62003e88565b60225460ff166200296b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620007f1565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000620029e383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200310a92505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002ce557600080808080808062002a46896004818d62003eb7565b81019062002a55919062003ee3565b9650965096509650965096509650336001600160a01b0316876001600160a01b03161462002aec5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038616301462002b6c5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b8a851462002be35760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002c91919062003a37565b6000604051808303816000865af19150503d806000811462002cd0576040519150601f19603f3d011682016040523d82523d6000602084013e62002cd5565b606091505b5050505050505050505062000fff565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002d785760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007f1565b60008080808080808062002d908a6004818e62003eb7565b81019062002d9f919062003f3e565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462002e385760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038716301462002eb85760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002f6f919062003a37565b6000604051808303816000865af19150503d806000811462002fae576040519150601f19603f3d011682016040523d82523d6000602084013e62002fb3565b606091505b50505050505050505050505050505050565b6040516001600160a01b0380851660248301528316604482015260648101829052620030189085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002728565b50505050565b600062003075826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620031119092919063ffffffff16565b8051909150156200278d578080602001905181019062003096919062003b6e565b6200278d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007f1565b6020015190565b606062000b86848460008585600080866001600160a01b031685876040516200313b919062003a37565b60006040518083038185875af1925050503d80600081146200317a576040519150601f19603f3d011682016040523d82523d6000602084013e6200317f565b606091505b509150915062003192878383876200319d565b979650505050505050565b606083156200321157825160000362003209576001600160a01b0385163b620032095760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007f1565b508162000b86565b62000b868383815115620032285781518083602001fd5b8060405162461bcd60e51b8152600401620007f1919062003fca565b6119c78062003fe083390190565b6001600160a01b038116811462001b8857600080fd5b8035620032758162003252565b919050565b803563ffffffff811681146200327557600080fd5b60008083601f840112620032a257600080fd5b50813567ffffffffffffffff811115620032bb57600080fd5b602083019150836020828501011115620032d457600080fd5b9250929050565b60008060008060008060a08789031215620032f557600080fd5b8635620033028162003252565b955062003312602088016200327a565b94506040870135620033248162003252565b935060608701359250608087013567ffffffffffffffff8111156200334857600080fd5b6200335689828a016200328f565b979a9699509497509295939492505050565b600080604083850312156200337c57600080fd5b62003387836200327a565b91506020830135620033998162003252565b809150509250929050565b600060208284031215620033b757600080fd5b5035919050565b600060208284031215620033d157600080fd5b620033dc826200327a565b9392505050565b600060208284031215620033f657600080fd5b8135620033dc8162003252565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200345e576200345e62003403565b604052919050565b600082601f8301126200347857600080fd5b8135602067ffffffffffffffff82111562003497576200349762003403565b8160051b620034a882820162003432565b9283528481018201928281019087851115620034c357600080fd5b83870192505b848310156200319257823582529183019190830190620034c9565b60008060008060808587031215620034fb57600080fd5b84359350602085013567ffffffffffffffff808211156200351b57600080fd5b620035298883890162003466565b94506040870135915080821682146200354157600080fd5b509396929550929360600135925050565b60ff8116811462001b8857600080fd5b600080600080600080600060e0888a0312156200357e57600080fd5b87356200358b8162003552565b96506200359b602089016200327a565b95506040880135620035ad8162003252565b9450620035bd606089016200327a565b93506080880135620035cf8162003252565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562003609576200360962003403565b50601f01601f191660200190565b600082601f8301126200362957600080fd5b8135620036406200363a82620035ec565b62003432565b8181528460208386010111156200365657600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200369457600080fd5b8a3567ffffffffffffffff80821115620036ad57600080fd5b620036bb8e838f0162003466565b9b50620036cb60208e016200327a565b9a5060408d0135995060608d01359850620036e960808e016200327a565b9750620036f960a08e0162003268565b96506200370960c08e016200327a565b95506200371960e08e0162003268565b94506101008d013593506101208d01359150808211156200373957600080fd5b50620037488d828e0162003617565b9150509295989b9194979a5092959850565b600080600080608085870312156200377157600080fd5b6200377c856200327a565b935060208501356200378e8162003252565b92506040850135620037a08162003252565b9396929550929360600135925050565b600080600080600080600060a0888a031215620037cc57600080fd5b620037d7886200327a565b96506020880135620037e98162003252565b9550604088013567ffffffffffffffff808211156200380757600080fd5b620038158b838c016200328f565b909750955060608a01359150808211156200382f57600080fd5b506200383e8a828b016200328f565b9094509250506080880135620038548162003552565b8091505092959891949750929550565b6000806000606084860312156200387a57600080fd5b62003885846200327a565b92506020840135620038978162003252565b9150604084013567ffffffffffffffff811115620038b457600080fd5b620038c28682870162003617565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003961577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200399a576200399a620038fb565b5060010190565b60005b83811015620039be578181015183820152602001620039a4565b83811115620030185750506000910152565b60008151808452620039ea816020860160208601620039a1565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003a2e6060830184620039d0565b95945050505050565b6000825162003a4b818460208701620039a1565b9190910192915050565b600082601f83011262003a6757600080fd5b815162003a786200363a82620035ec565b81815284602083860101111562003a8e57600080fd5b62000b86826020830160208701620039a1565b60008060006060848603121562003ab757600080fd5b835167ffffffffffffffff8082111562003ad057600080fd5b62003ade8783880162003a55565b9450602086015191508082111562003af557600080fd5b5062003b048682870162003a55565b925050604084015162003b178162003552565b809150509250925092565b60608152600062003b376060830186620039d0565b828103602084015262003b4b8186620039d0565b91505060ff83166040830152949350505050565b801515811462001b8857600080fd5b60006020828403121562003b8157600080fd5b8151620033dc8162003b5f565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003bcf60608301878962003b8e565b828103602084015262003be481868862003b8e565b91505060ff831660408301529695505050505050565b6000835162003c0e818460208801620039a1565b83519083019062003c24818360208801620039a1565b01949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003c8082850187620039d0565b925080851660e085015250509998505050505050505050565b60006020828403121562003cac57600080fd5b815167ffffffffffffffff81111562003cc457600080fd5b62000b868482850162003a55565b60006020828403121562003ce557600080fd5b8151620033dc8162003552565b60006020828403121562003d0557600080fd5b5051919050565b60008282101562003d215762003d21620038fb565b500390565b600181815b8085111562003d8557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d695762003d69620038fb565b8085161562003d7757918102915b93841c939080029062003d2b565b509250929050565b60008262003d9e5750600162000943565b8162003dad5750600062000943565b816001811462003dc6576002811462003dd15762003df1565b600191505062000943565b60ff84111562003de55762003de5620038fb565b50506001821b62000943565b5060208310610133831016604e8410600b841016171562003e16575081810a62000943565b62003e22838362003d26565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003e575762003e57620038fb565b029392505050565b6000620033dc838362003d8d565b6000821982111562003e835762003e83620038fb565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000808585111562003ec857600080fd5b8386111562003ed657600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003eff57600080fd5b873562003f0c8162003252565b9650602088013562003f1e8162003252565b955060408801359450606088013593506080880135620035cf8162003552565b600080600080600080600080610100898b03121562003f5c57600080fd5b883562003f698162003252565b9750602089013562003f7b8162003252565b96506040890135955060608901359450608089013562003f9b8162003b5f565b935060a089013562003fad8162003552565b979a969950949793969295929450505060c08201359160e0013590565b602081526000620033dc6020830184620039d056fe60c06040523480156200001157600080fd5b50604051620019c7380380620019c78339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161150d620004ba600039600061053001526000818161036f01526104fa015261150d6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b604051610191919061123b565b60405180910390f35b6101ad6101a83660046112d7565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad610204366004611301565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad6102763660046112d7565b610552565b6101ad6102893660046112d7565b61059e565b6101c161029c36600461133d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d236600461133d565b60066020526000908152604090205481565b610184610645565b6101ad6102fa3660046112d7565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad6103523660046112d7565b6106ed565b6101ad6103653660046112d7565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f36600461135f565b6107b2565b005b6101c16103b43660046113d2565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043790611405565b80601f016020809104026020016040519081016040528092919081815260200182805461046390611405565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f12565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611487565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c8383610fda565b50600192915050565b60606004805461043790611405565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c83836110b3565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866108818361149f565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f3d610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff821661103d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b806002600082825461104f9190611487565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff821661113c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156111d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610c27565b600060208083528351808285015260005b818110156112685785810183015185820160400152820161124c565b8181111561127a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112d257600080fd5b919050565b600080604083850312156112ea57600080fd5b6112f3836112ae565b946020939093013593505050565b60008060006060848603121561131657600080fd5b61131f846112ae565b925061132d602085016112ae565b9150604084013590509250925092565b60006020828403121561134f57600080fd5b611358826112ae565b9392505050565b600080600080600080600060e0888a03121561137a57600080fd5b611383886112ae565b9650611391602089016112ae565b95506040880135945060608801359350608088013560ff811681146113b557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156113e557600080fd5b6113ee836112ae565b91506113fc602084016112ae565b90509250929050565b600181811c9082168061141957607f821691505b602082108103611452577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561149a5761149a611458565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036114d0576114d0611458565b506001019056fea264697066735822122094134962e5fa2f6357086a2590b7f3a754d340b16e5312664d82a308bc23a0df64736f6c634300080f0033a26469706673582212208ab6fb3903678943dce239f2d5af5eb41bb3f9557f221a30c64e308f374fa28464736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001ff5760003560e01c80637b6323c11162000117578063d02103ca11620000a1578063e7a5b4ea116200006c578063e7a5b4ea14620006de578063ed6be5c91462000703578063f2fde38b146200071a578063ff634ed7146200073f57600080fd5b8063d02103ca1462000659578063d96a15f7146200067b578063dbc169761462000692578063e737588114620006aa57600080fd5b806391e57e2d11620000e257806391e57e2d14620005bd578063a08e8a0814620005d5578063aaa13cc214620005ff578063bab161bf146200062457600080fd5b80637b6323c1146200051c57806381b1c17414620005415780638da5cb5b146200057b5780638f611519146200059b57600080fd5b80632dfdf0b511620001995780633e19704311620001645780633e19704314620003d95780634638554914620004ba5780636555954014620004df578063715018a6146200050457600080fd5b80632dfdf0b51462000315578063318aee3d146200032d5780633ae05047146200039c5780633da8168214620003b457600080fd5b80632072f6c511620001da5780632072f6c5146200027557806322e95f2c146200028d5780632b5e42e714620002cb5780632c3f58cd14620002f057600080fd5b80630871e97114620002045780630e1da6c3146200021d57806315064c961462000248575b600080fd5b6200021b62000215366004620032db565b62000756565b005b3480156200022a57600080fd5b5062000235608d5481565b6040519081526020015b60405180910390f35b3480156200025557600080fd5b50602254620002649060ff1681565b60405190151581526020016200023f565b3480156200028257600080fd5b506200021b62000812565b3480156200029a57600080fd5b50620002b2620002ac36600462003368565b620008c6565b6040516001600160a01b0390911681526020016200023f565b348015620002d857600080fd5b506200021b620002ea366004620033a4565b62000949565b348015620002fd57600080fd5b506200021b6200030f366004620033be565b62000958565b3480156200032257600080fd5b506200023560215481565b3480156200033a57600080fd5b50620003776200034c366004620033e3565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200023f565b348015620003a957600080fd5b506200023562000999565b348015620003c157600080fd5b5062000264620003d3366004620034e4565b62000a8c565b348015620003e657600080fd5b5062000235620003f836600462003562565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004c757600080fd5b506200021b620004d936600462003673565b62000b8e565b348015620004ec57600080fd5b506200021b620004fe3660046200375a565b62000e14565b3480156200051157600080fd5b506200021b62001006565b3480156200052957600080fd5b506200021b6200053b36600462003673565b6200101c565b3480156200054e57600080fd5b50620002b262000560366004620033a4565b6089602052600090815260409020546001600160a01b031681565b3480156200058857600080fd5b506055546001600160a01b0316620002b2565b348015620005a857600080fd5b50608c54620002b2906001600160a01b031681565b348015620005ca57600080fd5b5062000235608e5481565b348015620005e257600080fd5b50620005ec600081565b60405160ff90911681526020016200023f565b3480156200060c57600080fd5b50620002b26200061e366004620037b0565b620015de565b3480156200063157600080fd5b50608754620006439063ffffffff1681565b60405163ffffffff90911681526020016200023f565b3480156200066657600080fd5b50608b54620002b2906001600160a01b031681565b6200021b6200068c36600462003864565b6200174a565b3480156200069f57600080fd5b506200021b620019fe565b348015620006b757600080fd5b5062000264620006c9366004620033a4565b60886020526000908152604090205460ff1681565b348015620006eb57600080fd5b506200021b620006fd366004620033a4565b62001ab0565b3480156200071057600080fd5b5062000643600081565b3480156200072757600080fd5b506200021b62000739366004620033e3565b62001af5565b3480156200074c57600080fd5b50620005ec600181565b608e54341115620007fa5760405162461bcd60e51b815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6200080a86868686868662001b8b565b505050505050565b608c546001600160a01b03163314620008ba5760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c462002131565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b620009536200220a565b608e55565b620009626200220a565b608780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b602154600090819081805b602081101562000a83578260011660010362000a045760018160208110620009d057620009d0620038cc565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000a31565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a3e6002846200392a565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000a7a9062003966565b915050620009a4565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000b7f578160011660010362000b095786818151811062000ac75762000ac7620038cc565b60200260200101518360405160200162000aeb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000b5b565b8287828151811062000b1f5762000b1f620038cc565b602002602001015160405160200162000b42929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000b686002836200392a565b91508062000b768162003966565b91505062000a9c565b5050821490505b949350505050565b60225460ff161562000c2f5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b62000c458a8a8a8a8a8a8a8a8a8a600162002266565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b03851690849062000c889089908b908790602401620039fe565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162000ced919062003a37565b60006040518083038185875af1925050503d806000811462000d2c576040519150601f19603f3d011682016040523d82523d6000602084013e62000d31565b606091505b505090508062000da95760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff161580801562000e355750600054600160ff909116105b8062000e515750303b15801562000e51575060005460ff166001145b62000ec55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007f1565b6000805460ff19166001179055801562000f0657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d8290556703782dace9d90000608e5562000f9b620025f3565b801562000fff57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b620010106200220a565b620008c4600062002678565b60225460ff1615620010bd5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b620010d38a8a8a8a8a8a8a8a8a8a600062002266565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620011f257604080516000808252602082019092526001600160a01b0385169084906040516200112e919062003a37565b60006040518083038185875af1925050503d80600081146200116d576040519150601f19603f3d011682016040523d82523d6000602084013e62001172565b606091505b5050905080620011eb5760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c4544000000000000000000000000000000000000000000000000006064820152608401620007f1565b5062001574565b60875463ffffffff9081169087160362001222576200121c6001600160a01b0386168484620026e2565b62001574565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620014e057600080600085806020019051810190620012c2919062003aa1565b925092509250600085848484604051620012dc9062003244565b620012ea9392919062003b22565b8190604051809103906000f59050801580156200130b573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001379573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200139f919062003b6e565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620014ce9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001571565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001549573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200156f919062003b6e565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620016619062003244565b601f1982820381018352601f9091011660408190526200168e908d908d908d908d908d9060200162003bb9565b60408051601f1981840301815290829052620016ae929160200162003bfa565b604051602081830303815290604052805190602001206040516020016200172494939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620017eb5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff908116908416036200186e5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620018bb9260019263ffffffff9092169133918991899134918a919062003c2d565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200198b9062002792565b608b546001600160a01b03166333d6247d620019a662000999565b6040518263ffffffff1660e01b8152600401620019c591815260200190565b600060405180830381600087803b158015620019e057600080fd5b505af1158015620019f5573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001aa65760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c4620028f1565b62001aba6200220a565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001aff6200220a565b6001600160a01b03811662001b7d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007f1565b62001b888162002678565b50565b60225460ff161562001c2c5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff9081169086160362001caf5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b60008060606001600160a01b03891662001d445785341462001d3a5760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007f1565b6000915062001fce565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001e2b576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562001df2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e18919062003b6e565b5060208101518151909450925062001fcc565b841562001e405762001e408a888888620029a0565b62001e576001600160a01b038b1633308a62002fc5565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001eae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001ed8919081019062003c99565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001f17573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001f41919081019062003c99565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001f80573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001fa6919062003cd2565b60405160200162001fba9392919062003b22565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200201098979695949392919062003c2d565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620020b89062002792565b608b546001600160a01b03166333d6247d620020d362000999565b6040518263ffffffff1660e01b8152600401620020f291815260200190565b600060405180830381600087803b1580156200210d57600080fd5b505af115801562002122573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff1615620021d25760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6055546001600160a01b03163314620008c45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007f1565b63ffffffff8a1660009081526088602052604090205460ff1615620022f35760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562002380573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620023a6919062003cf2565b90508015801590620023c55750608d54620023c2824262003d0c565b10155b620024395760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c4944000000000000000000000000000000000000006064820152608401620007f1565b60875463ffffffff878116911614620024bb5760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000006064820152608401620007f1565b60875460009063ffffffff16620024d4575088620024d7565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d820152605181018990526071808201939093528151808203909301835260910190528051910120620025a5908e8e63ffffffff168462000a8c565b620021225760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c49446044820152606401620007f1565b600054610100900460ff16620026725760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007f1565b620008c4335b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b0383166024820152604481018290526200278d9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526200301e565b505050565b806001620027a36020600262003e5f565b620027af919062003d0c565b60215410620028275760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007f1565b6001602160008282546200283c919062003e6d565b909155505060215460005b6020811015620028e657816001166001036200287c578260018260208110620028745762002874620038cc565b015550505050565b60018160208110620028925762002892620038cc565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620028cf91906200392a565b915080620028dd8162003966565b91505062002847565b506200278d62003e88565b60225460ff166200296b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620007f1565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000620029e383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200310a92505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002ce557600080808080808062002a46896004818d62003eb7565b81019062002a55919062003ee3565b9650965096509650965096509650336001600160a01b0316876001600160a01b03161462002aec5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038616301462002b6c5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b8a851462002be35760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002c91919062003a37565b6000604051808303816000865af19150503d806000811462002cd0576040519150601f19603f3d011682016040523d82523d6000602084013e62002cd5565b606091505b5050505050505050505062000fff565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002d785760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007f1565b60008080808080808062002d908a6004818e62003eb7565b81019062002d9f919062003f3e565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462002e385760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038716301462002eb85760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002f6f919062003a37565b6000604051808303816000865af19150503d806000811462002fae576040519150601f19603f3d011682016040523d82523d6000602084013e62002fb3565b606091505b50505050505050505050505050505050565b6040516001600160a01b0380851660248301528316604482015260648101829052620030189085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002728565b50505050565b600062003075826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620031119092919063ffffffff16565b8051909150156200278d578080602001905181019062003096919062003b6e565b6200278d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007f1565b6020015190565b606062000b86848460008585600080866001600160a01b031685876040516200313b919062003a37565b60006040518083038185875af1925050503d80600081146200317a576040519150601f19603f3d011682016040523d82523d6000602084013e6200317f565b606091505b509150915062003192878383876200319d565b979650505050505050565b606083156200321157825160000362003209576001600160a01b0385163b620032095760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007f1565b508162000b86565b62000b868383815115620032285781518083602001fd5b8060405162461bcd60e51b8152600401620007f1919062003fca565b6119c78062003fe083390190565b6001600160a01b038116811462001b8857600080fd5b8035620032758162003252565b919050565b803563ffffffff811681146200327557600080fd5b60008083601f840112620032a257600080fd5b50813567ffffffffffffffff811115620032bb57600080fd5b602083019150836020828501011115620032d457600080fd5b9250929050565b60008060008060008060a08789031215620032f557600080fd5b8635620033028162003252565b955062003312602088016200327a565b94506040870135620033248162003252565b935060608701359250608087013567ffffffffffffffff8111156200334857600080fd5b6200335689828a016200328f565b979a9699509497509295939492505050565b600080604083850312156200337c57600080fd5b62003387836200327a565b91506020830135620033998162003252565b809150509250929050565b600060208284031215620033b757600080fd5b5035919050565b600060208284031215620033d157600080fd5b620033dc826200327a565b9392505050565b600060208284031215620033f657600080fd5b8135620033dc8162003252565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200345e576200345e62003403565b604052919050565b600082601f8301126200347857600080fd5b8135602067ffffffffffffffff82111562003497576200349762003403565b8160051b620034a882820162003432565b9283528481018201928281019087851115620034c357600080fd5b83870192505b848310156200319257823582529183019190830190620034c9565b60008060008060808587031215620034fb57600080fd5b84359350602085013567ffffffffffffffff808211156200351b57600080fd5b620035298883890162003466565b94506040870135915080821682146200354157600080fd5b509396929550929360600135925050565b60ff8116811462001b8857600080fd5b600080600080600080600060e0888a0312156200357e57600080fd5b87356200358b8162003552565b96506200359b602089016200327a565b95506040880135620035ad8162003252565b9450620035bd606089016200327a565b93506080880135620035cf8162003252565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562003609576200360962003403565b50601f01601f191660200190565b600082601f8301126200362957600080fd5b8135620036406200363a82620035ec565b62003432565b8181528460208386010111156200365657600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200369457600080fd5b8a3567ffffffffffffffff80821115620036ad57600080fd5b620036bb8e838f0162003466565b9b50620036cb60208e016200327a565b9a5060408d0135995060608d01359850620036e960808e016200327a565b9750620036f960a08e0162003268565b96506200370960c08e016200327a565b95506200371960e08e0162003268565b94506101008d013593506101208d01359150808211156200373957600080fd5b50620037488d828e0162003617565b9150509295989b9194979a5092959850565b600080600080608085870312156200377157600080fd5b6200377c856200327a565b935060208501356200378e8162003252565b92506040850135620037a08162003252565b9396929550929360600135925050565b600080600080600080600060a0888a031215620037cc57600080fd5b620037d7886200327a565b96506020880135620037e98162003252565b9550604088013567ffffffffffffffff808211156200380757600080fd5b620038158b838c016200328f565b909750955060608a01359150808211156200382f57600080fd5b506200383e8a828b016200328f565b9094509250506080880135620038548162003552565b8091505092959891949750929550565b6000806000606084860312156200387a57600080fd5b62003885846200327a565b92506020840135620038978162003252565b9150604084013567ffffffffffffffff811115620038b457600080fd5b620038c28682870162003617565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003961577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200399a576200399a620038fb565b5060010190565b60005b83811015620039be578181015183820152602001620039a4565b83811115620030185750506000910152565b60008151808452620039ea816020860160208601620039a1565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003a2e6060830184620039d0565b95945050505050565b6000825162003a4b818460208701620039a1565b9190910192915050565b600082601f83011262003a6757600080fd5b815162003a786200363a82620035ec565b81815284602083860101111562003a8e57600080fd5b62000b86826020830160208701620039a1565b60008060006060848603121562003ab757600080fd5b835167ffffffffffffffff8082111562003ad057600080fd5b62003ade8783880162003a55565b9450602086015191508082111562003af557600080fd5b5062003b048682870162003a55565b925050604084015162003b178162003552565b809150509250925092565b60608152600062003b376060830186620039d0565b828103602084015262003b4b8186620039d0565b91505060ff83166040830152949350505050565b801515811462001b8857600080fd5b60006020828403121562003b8157600080fd5b8151620033dc8162003b5f565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003bcf60608301878962003b8e565b828103602084015262003be481868862003b8e565b91505060ff831660408301529695505050505050565b6000835162003c0e818460208801620039a1565b83519083019062003c24818360208801620039a1565b01949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003c8082850187620039d0565b925080851660e085015250509998505050505050505050565b60006020828403121562003cac57600080fd5b815167ffffffffffffffff81111562003cc457600080fd5b62000b868482850162003a55565b60006020828403121562003ce557600080fd5b8151620033dc8162003552565b60006020828403121562003d0557600080fd5b5051919050565b60008282101562003d215762003d21620038fb565b500390565b600181815b8085111562003d8557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d695762003d69620038fb565b8085161562003d7757918102915b93841c939080029062003d2b565b509250929050565b60008262003d9e5750600162000943565b8162003dad5750600062000943565b816001811462003dc6576002811462003dd15762003df1565b600191505062000943565b60ff84111562003de55762003de5620038fb565b50506001821b62000943565b5060208310610133831016604e8410600b841016171562003e16575081810a62000943565b62003e22838362003d26565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003e575762003e57620038fb565b029392505050565b6000620033dc838362003d8d565b6000821982111562003e835762003e83620038fb565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000808585111562003ec857600080fd5b8386111562003ed657600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003eff57600080fd5b873562003f0c8162003252565b9650602088013562003f1e8162003252565b955060408801359450606088013593506080880135620035cf8162003552565b600080600080600080600080610100898b03121562003f5c57600080fd5b883562003f698162003252565b9750602089013562003f7b8162003252565b96506040890135955060608901359450608089013562003f9b8162003b5f565b935060a089013562003fad8162003552565b979a969950949793969295929450505060c08201359160e0013590565b602081526000620033dc6020830184620039d056fe60c06040523480156200001157600080fd5b50604051620019c7380380620019c78339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161150d620004ba600039600061053001526000818161036f01526104fa015261150d6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b604051610191919061123b565b60405180910390f35b6101ad6101a83660046112d7565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad610204366004611301565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad6102763660046112d7565b610552565b6101ad6102893660046112d7565b61059e565b6101c161029c36600461133d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d236600461133d565b60066020526000908152604090205481565b610184610645565b6101ad6102fa3660046112d7565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad6103523660046112d7565b6106ed565b6101ad6103653660046112d7565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f36600461135f565b6107b2565b005b6101c16103b43660046113d2565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043790611405565b80601f016020809104026020016040519081016040528092919081815260200182805461046390611405565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f12565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611487565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c8383610fda565b50600192915050565b60606004805461043790611405565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c83836110b3565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866108818361149f565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f3d610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff821661103d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b806002600082825461104f9190611487565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff821661113c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156111d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610c27565b600060208083528351808285015260005b818110156112685785810183015185820160400152820161124c565b8181111561127a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112d257600080fd5b919050565b600080604083850312156112ea57600080fd5b6112f3836112ae565b946020939093013593505050565b60008060006060848603121561131657600080fd5b61131f846112ae565b925061132d602085016112ae565b9150604084013590509250925092565b60006020828403121561134f57600080fd5b611358826112ae565b9392505050565b600080600080600080600060e0888a03121561137a57600080fd5b611383886112ae565b9650611391602089016112ae565b95506040880135945060608801359350608088013560ff811681146113b557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156113e557600080fd5b6113ee836112ae565b91506113fc602084016112ae565b90509250929050565b600181811c9082168061141957607f821691505b602082108103611452577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561149a5761149a611458565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036114d0576114d0611458565b506001019056fea264697066735822122094134962e5fa2f6357086a2590b7f3a754d340b16e5312664d82a308bc23a0df64736f6c634300080f0033a26469706673582212208ab6fb3903678943dce239f2d5af5eb41bb3f9557f221a30c64e308f374fa28464736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/ProofOfEfficiency.json b/compiled-contracts/ProofOfEfficiency.json index 8ea94b688..6a8b74565 100644 --- a/compiled-contracts/ProofOfEfficiency.json +++ b/compiled-contracts/ProofOfEfficiency.json @@ -896,8 +896,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5061494a806100206000396000f3fe608060405234801561001057600080fd5b50600436106102c85760003560e01c80638da5cb5b1161017b578063cfa8ed47116100d8578063e7a7ed021161008c578063eaeb077b11610071578063eaeb077b14610687578063f2fde38b1461069a578063f7552761146106ad57600080fd5b8063e7a7ed0214610637578063e8bf92ed1461066757600080fd5b8063d8d1091b116100bd578063d8d1091b146105ef578063d8f54db014610602578063dbc169761461062f57600080fd5b8063cfa8ed47146105a3578063d02103ca146105cf57600080fd5b8063b02286c01161012f578063b6b0b09711610114578063b6b0b09714610558578063c3fd0f9c1461057d578063c89e42df1461059057600080fd5b8063b02286c01461052f578063b4d63f581461053857600080fd5b8063a3c573eb11610160578063a3c573eb146104f1578063ab9fc5ef14610511578063adc879e91461051b57600080fd5b80638da5cb5b146104cb57806399f5634e146104e957600080fd5b8063542028d5116102295780637152facf116101dd5780637fcb3653116101c25780637fcb36531461049157806381df7d3f146104a55780638c4a0af7146104b857600080fd5b80637152facf14610476578063798470571461048957600080fd5b80636b8616ce1161020e5780636b8616ce1461043b5780636ff512cc1461045b578063715018a61461046e57600080fd5b8063542028d51461042057806355b925e61461042857600080fd5b806327eb6c0f11610280578063423fa85611610265578063423fa856146103aa57806345605267146103ca5780635392c5e0146103f257600080fd5b806327eb6c0f146103525780633c1582671461039757600080fd5b806319d8ac61116102b157806319d8ac61146103085780631c1083e2146103355780632072f6c51461034a57600080fd5b8063107bf28c146102cd57806315064c96146102eb575b600080fd5b6102d56106bc565b6040516102e29190613e2c565b60405180910390f35b6065546102f89060ff1681565b60405190151581526020016102e2565b60685461031c9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102e2565b610348610343366004613e78565b61074a565b005b610348610856565b6070546103729073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e2565b6103486103a5366004613fed565b610907565b60685461031c9068010000000000000000900467ffffffffffffffff1681565b60685461031c90700100000000000000000000000000000000900467ffffffffffffffff1681565b610412610400366004614104565b606b6020526000908152604090205481565b6040519081526020016102e2565b6102d5611297565b610348610436366004614136565b6112a4565b610412610449366004614104565b60666020526000908152604090205481565b610348610469366004613e78565b61186d565b610348611987565b6102d56104843660046141b9565b611999565b610412611bd0565b60695461031c9067ffffffffffffffff1681565b6103486104b3366004614214565b611c4a565b6103486104c636600461430e565b611fa3565b60335473ffffffffffffffffffffffffffffffffffffffff16610372565b6104126120bd565b6071546103729073ffffffffffffffffffffffffffffffffffffffff1681565b61031c62093a8081565b606e5461031c9067ffffffffffffffff1681565b61041261ea6081565b610412610546366004614104565b60676020526000908152604090205481565b60655461037290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b61034861058b366004614136565b6121ee565b61034861059e36600461432b565b612838565b6069546103729068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103729073ffffffffffffffffffffffffffffffffffffffff1681565b6103486105fd366004614360565b61290d565b6069546102f8907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610348612fb2565b60685461031c907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103729073ffffffffffffffffffffffffffffffffffffffff1681565b610348610695366004614453565b613141565b6103486106a8366004613e78565b613641565b61041267016345785d8a000081565b606f80546106c990614498565b80601f01602080910402602001604051908101604052809291908181526020018280546106f590614498565b80156107425780601f1061071757610100808354040283529160200191610742565b820191906000526020600020905b81548152906001019060200180831161072557829003601f168201915b505050505081565b60705473ffffffffffffffffffffffffffffffffffffffff1633146107dc5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff16156108f55760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6108fd6136de565b610905613745565b565b60655460ff16156109a65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610a3f5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b805180610ada5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015611088576000878281518110610b4057610b406144eb565b602002602001015190506000816060015167ffffffffffffffff161115610d595783610b6b81614549565b945050600081600001518051906020012082602001518360600151604051602001610bce93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610c9b5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610d535760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016107d3565b50610ef3565b60208101511580610e085750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610dc29160040190815260200190565b6020604051808303816000875af1158015610de1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e059190614570565b15155b610e7a5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016107d3565b80515161ea6011610ef35760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016107d3565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610f29575042816040015167ffffffffffffffff1611155b610fc15760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061106a90614549565b9550508060400151955050808061108090614589565b915050610b24565b5060685467ffffffffffffffff78010000000000000000000000000000000000000000000000009091048116908316111561112b5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016107d3565b60685460009061115990700100000000000000000000000000000000900467ffffffffffffffff16846145c1565b61116d9067ffffffffffffffff16876145ea565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061124a33306112248467016345785d8a0000614601565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169291906137cf565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d80546106c990614498565b60655460ff16156113435760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695467ffffffffffffffff90811690881611156113ef5760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016107d3565b60695467ffffffffffffffff9081169087161161149a5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b602052604090205461154c5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a4016107d3565b600061155a88888888611999565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161158f919061463e565b602060405180830381855afa1580156115ac573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906115cf9190614570565b6115d99190614689565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611643918991899189919060040161469d565b602060405180830381865afa158015611660573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116849190614717565b6116f65760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016107d3565b6069546117549033906117139067ffffffffffffffff168b6145c1565b67ffffffffffffffff166117256120bd565b61172f9190614601565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16919061388d565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b15801561180957600080fd5b505af115801561181d573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146119065760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161084b565b61198f6136de565b61090560006138e8565b67ffffffffffffffff8085166000818152606760205260408082205493871682529020546060929115806119cc57508115155b611a645760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b80611afd5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec01604051602081830303815290604052925050505b949350505050565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691611c1f917801000000000000000000000000000000000000000000000000909104166001614734565b611c2991906145c1565b611c459067ffffffffffffffff16670de0b6b3a7640000614601565b905090565b600054610100900460ff1615808015611c6a5750600054600160ff909116105b80611c845750303b158015611c84575060005460ff166001145b611cf65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107d3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611d5457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d611e9387826147ae565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f611ed485826147ae565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556070805492851692909116919091179055611f3261395f565b8015611f9557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461203c5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061084b90831515815260200190565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612134573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121589190614570565b60695460685491925060009167ffffffffffffffff918216916801000000000000000082048116916121bd91700100000000000000000000000000000000820481169178010000000000000000000000000000000000000000000000009004166145c1565b6121c79190614734565b6121d191906145c1565b67ffffffffffffffff1690506121e781836148aa565b9250505090565b60655460ff161561228d5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b8567ffffffffffffffff168767ffffffffffffffff161061233c5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a4016107d3565b60695467ffffffffffffffff908116908716111561240e5760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c4016107d3565b67ffffffffffffffff87166000908152606b60205260409020546124c05760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a4016107d3565b67ffffffffffffffff86166000908152606b60205260409020546125725760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a4016107d3565b600061258088888888611999565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516125b5919061463e565b602060405180830381855afa1580156125d2573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906125f59190614570565b6125ff9190614689565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91612669918991899189919060040161469d565b602060405180830381865afa158015612686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126aa9190614717565b61271c5760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f460000000060648201526084016107d3565b67ffffffffffffffff88166000908152606b60205260409020548690036127d15760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a4016107d3565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a161282d613745565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146128d15760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606d6128dd82826147ae565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161084b9190613e2c565b60655460ff16156129ac5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612a6f5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180612b0a5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60685467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612b559184917001000000000000000000000000000000009004166148be565b1115612bc95760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016107d3565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b84811015612ee2576000868281518110612c2957612c296144eb565b602002602001015190508380612c3e90614549565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114612d5f5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016107d3565b612d6a6001886145ea565b8303612e28574262093a808360400151612d849190614734565b67ffffffffffffffff161115612e285760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016107d3565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612eca90614549565b96505050508080612eda90614589565b915050612c0d565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff1661302a5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b60705473ffffffffffffffffffffffffffffffffffffffff1633146130b75760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561312157600080fd5b505af1158015613135573d6000803e3d6000fd5b505050506109056139e5565b60655460ff16156131e05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146132a35760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b60006132ad611bd0565b9050818111156133255760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016107d3565b61ea6083511061339d5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016107d3565b6065546133c790610100900473ffffffffffffffffffffffffffffffffffffffff163330846137cf565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345b9190614570565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff1690601861349583614549565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161350e93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260669093529120553233036135de57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261363b565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613632939291906148d6565b60405180910390a25b50505050565b6136496136de565b73ffffffffffffffffffffffffffffffffffffffff81166136d25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107d3565b6136db816138e8565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109055760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156137af57600080fd5b505af11580156137c3573d6000803e3d6000fd5b50505050610905613ab0565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261363b9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613ba5565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526138e39084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401613829565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166139dc5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107d3565b610905336138e8565b60655460ff16613a5d5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff1615613b4f5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6000613c07826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613c979092919063ffffffff16565b8051909150156138e35780806020019051810190613c259190614717565b6138e35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107d3565b6060611bc88484600085856000808673ffffffffffffffffffffffffffffffffffffffff168587604051613ccb919061463e565b60006040518083038185875af1925050503d8060008114613d08576040519150601f19603f3d011682016040523d82523d6000602084013e613d0d565b606091505b5091509150613d1e87838387613d29565b979650505050505050565b60608315613da5578251600003613d9e5773ffffffffffffffffffffffffffffffffffffffff85163b613d9e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107d3565b5081611bc8565b611bc88383815115613dba5781518083602001fd5b8060405162461bcd60e51b81526004016107d39190613e2c565b60005b83811015613def578181015183820152602001613dd7565b8381111561363b5750506000910152565b60008151808452613e18816020860160208601613dd4565b601f01601f19169290920160200192915050565b602081526000613e3f6020830184613e00565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146136db57600080fd5b8035613e7381613e46565b919050565b600060208284031215613e8a57600080fd5b8135613e3f81613e46565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613ee757613ee7613e95565b60405290565b6040516060810167ffffffffffffffff81118282101715613ee757613ee7613e95565b604051601f8201601f1916810167ffffffffffffffff81118282101715613f3957613f39613e95565b604052919050565b600067ffffffffffffffff821115613f5b57613f5b613e95565b5060051b60200190565b600082601f830112613f7657600080fd5b813567ffffffffffffffff811115613f9057613f90613e95565b613fa36020601f19601f84011601613f10565b818152846020838601011115613fb857600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613e7357600080fd5b6000602080838503121561400057600080fd5b823567ffffffffffffffff8082111561401857600080fd5b818501915085601f83011261402c57600080fd5b813561403f61403a82613f41565b613f10565b81815260059190911b8301840190848101908883111561405e57600080fd5b8585015b838110156140f75780358581111561407a5760008081fd5b86016080818c03601f19018113156140925760008081fd5b61409a613ec4565b89830135888111156140ac5760008081fd5b6140ba8e8c83870101613f65565b8252506040808401358b83015260606140d4818601613fd5565b828401526140e3848601613fd5565b908301525085525050918601918601614062565b5098975050505050505050565b60006020828403121561411657600080fd5b613e3f82613fd5565b806040810183101561413057600080fd5b92915050565b6000806000806000806000610180888a03121561415257600080fd5b61415b88613fd5565b965061416960208901613fd5565b955060408801359450606088013593506141868960808a0161411f565b925061014088018981111561419a57600080fd5b60c0890192506141aa8a8261411f565b91505092959891949750929550565b600080600080608085870312156141cf57600080fd5b6141d885613fd5565b93506141e660208601613fd5565b93969395505050506040820135916060013590565b80151581146136db57600080fd5b8035613e73816141fb565b60008060008060008060008060008060006101608c8e03121561423657600080fd5b61423f8c613e68565b9a5061424d60208d01613e68565b995061425b60408d01613e68565b985060608c0135975061427060808d01613e68565b965061427e60a08d01614209565b955067ffffffffffffffff8060c08e0135111561429a57600080fd5b6142aa8e60c08f01358f01613f65565b95506142b860e08e01613fd5565b9450806101008e013511156142cc57600080fd5b506142de8d6101008e01358e01613f65565b92506142ed6101208d01613e68565b91506142fc6101408d01613e68565b90509295989b509295989b9093969950565b60006020828403121561432057600080fd5b8135613e3f816141fb565b60006020828403121561433d57600080fd5b813567ffffffffffffffff81111561435457600080fd5b611bc884828501613f65565b6000602080838503121561437357600080fd5b823567ffffffffffffffff8082111561438b57600080fd5b818501915085601f83011261439f57600080fd5b81356143ad61403a82613f41565b81815260059190911b830184019084810190888311156143cc57600080fd5b8585015b838110156140f7578035858111156143e85760008081fd5b86016060818c03601f19018113156144005760008081fd5b614408613eed565b898301358881111561441a5760008081fd5b6144288e8c83870101613f65565b8252506040808401358b830152614440838501613fd5565b90820152855250509186019186016143d0565b6000806040838503121561446657600080fd5b823567ffffffffffffffff81111561447d57600080fd5b61448985828601613f65565b95602094909401359450505050565b600181811c908216806144ac57607f821691505b6020821081036144e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036145665761456661451a565b6001019392505050565b60006020828403121561458257600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036145ba576145ba61451a565b5060010190565b600067ffffffffffffffff838116908316818110156145e2576145e261451a565b039392505050565b6000828210156145fc576145fc61451a565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146395761463961451a565b500290565b60008251614650818460208701613dd4565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826146985761469861465a565b500690565b61012081016040808784376000838201818152879190815b60028110156146d5578484833790840182815292840192906001016146b5565b5050828760c0870137610100850181815286935091505b600181101561470b5782518252602092830192909101906001016146ec565b50505095945050505050565b60006020828403121561472957600080fd5b8151613e3f816141fb565b600067ffffffffffffffff8083168185168083038211156147575761475761451a565b01949350505050565b601f8211156138e357600081815260208120601f850160051c810160208610156147875750805b601f850160051c820191505b818110156147a657828155600101614793565b505050505050565b815167ffffffffffffffff8111156147c8576147c8613e95565b6147dc816147d68454614498565b84614760565b602080601f83116001811461482f57600084156147f95750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556147a6565b600085815260208120601f198616915b8281101561485e5788860151825594840194600190910190840161483f565b508582101561489a57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000826148b9576148b961465a565b500490565b600082198211156148d1576148d161451a565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff8316602082015260606040820152600061490b6060830184613e00565b9594505050505056fea26469706673582212207c6b25ea7b3ac634e02bf0cce36a2d1a9ef1d74d076f5577d417755d876e61f664736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102c85760003560e01c80638da5cb5b1161017b578063cfa8ed47116100d8578063e7a7ed021161008c578063eaeb077b11610071578063eaeb077b14610687578063f2fde38b1461069a578063f7552761146106ad57600080fd5b8063e7a7ed0214610637578063e8bf92ed1461066757600080fd5b8063d8d1091b116100bd578063d8d1091b146105ef578063d8f54db014610602578063dbc169761461062f57600080fd5b8063cfa8ed47146105a3578063d02103ca146105cf57600080fd5b8063b02286c01161012f578063b6b0b09711610114578063b6b0b09714610558578063c3fd0f9c1461057d578063c89e42df1461059057600080fd5b8063b02286c01461052f578063b4d63f581461053857600080fd5b8063a3c573eb11610160578063a3c573eb146104f1578063ab9fc5ef14610511578063adc879e91461051b57600080fd5b80638da5cb5b146104cb57806399f5634e146104e957600080fd5b8063542028d5116102295780637152facf116101dd5780637fcb3653116101c25780637fcb36531461049157806381df7d3f146104a55780638c4a0af7146104b857600080fd5b80637152facf14610476578063798470571461048957600080fd5b80636b8616ce1161020e5780636b8616ce1461043b5780636ff512cc1461045b578063715018a61461046e57600080fd5b8063542028d51461042057806355b925e61461042857600080fd5b806327eb6c0f11610280578063423fa85611610265578063423fa856146103aa57806345605267146103ca5780635392c5e0146103f257600080fd5b806327eb6c0f146103525780633c1582671461039757600080fd5b806319d8ac61116102b157806319d8ac61146103085780631c1083e2146103355780632072f6c51461034a57600080fd5b8063107bf28c146102cd57806315064c96146102eb575b600080fd5b6102d56106bc565b6040516102e29190613e2c565b60405180910390f35b6065546102f89060ff1681565b60405190151581526020016102e2565b60685461031c9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102e2565b610348610343366004613e78565b61074a565b005b610348610856565b6070546103729073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e2565b6103486103a5366004613fed565b610907565b60685461031c9068010000000000000000900467ffffffffffffffff1681565b60685461031c90700100000000000000000000000000000000900467ffffffffffffffff1681565b610412610400366004614104565b606b6020526000908152604090205481565b6040519081526020016102e2565b6102d5611297565b610348610436366004614136565b6112a4565b610412610449366004614104565b60666020526000908152604090205481565b610348610469366004613e78565b61186d565b610348611987565b6102d56104843660046141b9565b611999565b610412611bd0565b60695461031c9067ffffffffffffffff1681565b6103486104b3366004614214565b611c4a565b6103486104c636600461430e565b611fa3565b60335473ffffffffffffffffffffffffffffffffffffffff16610372565b6104126120bd565b6071546103729073ffffffffffffffffffffffffffffffffffffffff1681565b61031c62093a8081565b606e5461031c9067ffffffffffffffff1681565b61041261ea6081565b610412610546366004614104565b60676020526000908152604090205481565b60655461037290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b61034861058b366004614136565b6121ee565b61034861059e36600461432b565b612838565b6069546103729068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103729073ffffffffffffffffffffffffffffffffffffffff1681565b6103486105fd366004614360565b61290d565b6069546102f8907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610348612fb2565b60685461031c907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103729073ffffffffffffffffffffffffffffffffffffffff1681565b610348610695366004614453565b613141565b6103486106a8366004613e78565b613641565b61041267016345785d8a000081565b606f80546106c990614498565b80601f01602080910402602001604051908101604052809291908181526020018280546106f590614498565b80156107425780601f1061071757610100808354040283529160200191610742565b820191906000526020600020905b81548152906001019060200180831161072557829003601f168201915b505050505081565b60705473ffffffffffffffffffffffffffffffffffffffff1633146107dc5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff16156108f55760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6108fd6136de565b610905613745565b565b60655460ff16156109a65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610a3f5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b805180610ada5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015611088576000878281518110610b4057610b406144eb565b602002602001015190506000816060015167ffffffffffffffff161115610d595783610b6b81614549565b945050600081600001518051906020012082602001518360600151604051602001610bce93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610c9b5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610d535760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016107d3565b50610ef3565b60208101511580610e085750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610dc29160040190815260200190565b6020604051808303816000875af1158015610de1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e059190614570565b15155b610e7a5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016107d3565b80515161ea6011610ef35760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016107d3565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610f29575042816040015167ffffffffffffffff1611155b610fc15760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061106a90614549565b9550508060400151955050808061108090614589565b915050610b24565b5060685467ffffffffffffffff78010000000000000000000000000000000000000000000000009091048116908316111561112b5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016107d3565b60685460009061115990700100000000000000000000000000000000900467ffffffffffffffff16846145c1565b61116d9067ffffffffffffffff16876145ea565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061124a33306112248467016345785d8a0000614601565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169291906137cf565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d80546106c990614498565b60655460ff16156113435760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695467ffffffffffffffff90811690881611156113ef5760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016107d3565b60695467ffffffffffffffff9081169087161161149a5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b602052604090205461154c5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a4016107d3565b600061155a88888888611999565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161158f919061463e565b602060405180830381855afa1580156115ac573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906115cf9190614570565b6115d99190614689565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611643918991899189919060040161469d565b602060405180830381865afa158015611660573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116849190614717565b6116f65760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016107d3565b6069546117549033906117139067ffffffffffffffff168b6145c1565b67ffffffffffffffff166117256120bd565b61172f9190614601565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16919061388d565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b15801561180957600080fd5b505af115801561181d573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146119065760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161084b565b61198f6136de565b61090560006138e8565b67ffffffffffffffff8085166000818152606760205260408082205493871682529020546060929115806119cc57508115155b611a645760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b80611afd5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec01604051602081830303815290604052925050505b949350505050565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691611c1f917801000000000000000000000000000000000000000000000000909104166001614734565b611c2991906145c1565b611c459067ffffffffffffffff16670de0b6b3a7640000614601565b905090565b600054610100900460ff1615808015611c6a5750600054600160ff909116105b80611c845750303b158015611c84575060005460ff166001145b611cf65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107d3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611d5457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d611e9387826147ae565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f611ed485826147ae565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556070805492851692909116919091179055611f3261395f565b8015611f9557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461203c5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061084b90831515815260200190565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612134573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121589190614570565b60695460685491925060009167ffffffffffffffff918216916801000000000000000082048116916121bd91700100000000000000000000000000000000820481169178010000000000000000000000000000000000000000000000009004166145c1565b6121c79190614734565b6121d191906145c1565b67ffffffffffffffff1690506121e781836148aa565b9250505090565b60655460ff161561228d5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b8567ffffffffffffffff168767ffffffffffffffff161061233c5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a4016107d3565b60695467ffffffffffffffff908116908716111561240e5760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c4016107d3565b67ffffffffffffffff87166000908152606b60205260409020546124c05760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a4016107d3565b67ffffffffffffffff86166000908152606b60205260409020546125725760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a4016107d3565b600061258088888888611999565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516125b5919061463e565b602060405180830381855afa1580156125d2573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906125f59190614570565b6125ff9190614689565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91612669918991899189919060040161469d565b602060405180830381865afa158015612686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126aa9190614717565b61271c5760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f460000000060648201526084016107d3565b67ffffffffffffffff88166000908152606b60205260409020548690036127d15760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a4016107d3565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a161282d613745565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146128d15760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606d6128dd82826147ae565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161084b9190613e2c565b60655460ff16156129ac5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612a6f5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180612b0a5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60685467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612b559184917001000000000000000000000000000000009004166148be565b1115612bc95760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016107d3565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b84811015612ee2576000868281518110612c2957612c296144eb565b602002602001015190508380612c3e90614549565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114612d5f5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016107d3565b612d6a6001886145ea565b8303612e28574262093a808360400151612d849190614734565b67ffffffffffffffff161115612e285760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016107d3565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612eca90614549565b96505050508080612eda90614589565b915050612c0d565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff1661302a5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b60705473ffffffffffffffffffffffffffffffffffffffff1633146130b75760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561312157600080fd5b505af1158015613135573d6000803e3d6000fd5b505050506109056139e5565b60655460ff16156131e05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146132a35760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b60006132ad611bd0565b9050818111156133255760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016107d3565b61ea6083511061339d5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016107d3565b6065546133c790610100900473ffffffffffffffffffffffffffffffffffffffff163330846137cf565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345b9190614570565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff1690601861349583614549565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161350e93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260669093529120553233036135de57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261363b565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613632939291906148d6565b60405180910390a25b50505050565b6136496136de565b73ffffffffffffffffffffffffffffffffffffffff81166136d25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107d3565b6136db816138e8565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109055760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156137af57600080fd5b505af11580156137c3573d6000803e3d6000fd5b50505050610905613ab0565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261363b9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613ba5565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526138e39084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401613829565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166139dc5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107d3565b610905336138e8565b60655460ff16613a5d5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff1615613b4f5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6000613c07826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613c979092919063ffffffff16565b8051909150156138e35780806020019051810190613c259190614717565b6138e35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107d3565b6060611bc88484600085856000808673ffffffffffffffffffffffffffffffffffffffff168587604051613ccb919061463e565b60006040518083038185875af1925050503d8060008114613d08576040519150601f19603f3d011682016040523d82523d6000602084013e613d0d565b606091505b5091509150613d1e87838387613d29565b979650505050505050565b60608315613da5578251600003613d9e5773ffffffffffffffffffffffffffffffffffffffff85163b613d9e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107d3565b5081611bc8565b611bc88383815115613dba5781518083602001fd5b8060405162461bcd60e51b81526004016107d39190613e2c565b60005b83811015613def578181015183820152602001613dd7565b8381111561363b5750506000910152565b60008151808452613e18816020860160208601613dd4565b601f01601f19169290920160200192915050565b602081526000613e3f6020830184613e00565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146136db57600080fd5b8035613e7381613e46565b919050565b600060208284031215613e8a57600080fd5b8135613e3f81613e46565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613ee757613ee7613e95565b60405290565b6040516060810167ffffffffffffffff81118282101715613ee757613ee7613e95565b604051601f8201601f1916810167ffffffffffffffff81118282101715613f3957613f39613e95565b604052919050565b600067ffffffffffffffff821115613f5b57613f5b613e95565b5060051b60200190565b600082601f830112613f7657600080fd5b813567ffffffffffffffff811115613f9057613f90613e95565b613fa36020601f19601f84011601613f10565b818152846020838601011115613fb857600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613e7357600080fd5b6000602080838503121561400057600080fd5b823567ffffffffffffffff8082111561401857600080fd5b818501915085601f83011261402c57600080fd5b813561403f61403a82613f41565b613f10565b81815260059190911b8301840190848101908883111561405e57600080fd5b8585015b838110156140f75780358581111561407a5760008081fd5b86016080818c03601f19018113156140925760008081fd5b61409a613ec4565b89830135888111156140ac5760008081fd5b6140ba8e8c83870101613f65565b8252506040808401358b83015260606140d4818601613fd5565b828401526140e3848601613fd5565b908301525085525050918601918601614062565b5098975050505050505050565b60006020828403121561411657600080fd5b613e3f82613fd5565b806040810183101561413057600080fd5b92915050565b6000806000806000806000610180888a03121561415257600080fd5b61415b88613fd5565b965061416960208901613fd5565b955060408801359450606088013593506141868960808a0161411f565b925061014088018981111561419a57600080fd5b60c0890192506141aa8a8261411f565b91505092959891949750929550565b600080600080608085870312156141cf57600080fd5b6141d885613fd5565b93506141e660208601613fd5565b93969395505050506040820135916060013590565b80151581146136db57600080fd5b8035613e73816141fb565b60008060008060008060008060008060006101608c8e03121561423657600080fd5b61423f8c613e68565b9a5061424d60208d01613e68565b995061425b60408d01613e68565b985060608c0135975061427060808d01613e68565b965061427e60a08d01614209565b955067ffffffffffffffff8060c08e0135111561429a57600080fd5b6142aa8e60c08f01358f01613f65565b95506142b860e08e01613fd5565b9450806101008e013511156142cc57600080fd5b506142de8d6101008e01358e01613f65565b92506142ed6101208d01613e68565b91506142fc6101408d01613e68565b90509295989b509295989b9093969950565b60006020828403121561432057600080fd5b8135613e3f816141fb565b60006020828403121561433d57600080fd5b813567ffffffffffffffff81111561435457600080fd5b611bc884828501613f65565b6000602080838503121561437357600080fd5b823567ffffffffffffffff8082111561438b57600080fd5b818501915085601f83011261439f57600080fd5b81356143ad61403a82613f41565b81815260059190911b830184019084810190888311156143cc57600080fd5b8585015b838110156140f7578035858111156143e85760008081fd5b86016060818c03601f19018113156144005760008081fd5b614408613eed565b898301358881111561441a5760008081fd5b6144288e8c83870101613f65565b8252506040808401358b830152614440838501613fd5565b90820152855250509186019186016143d0565b6000806040838503121561446657600080fd5b823567ffffffffffffffff81111561447d57600080fd5b61448985828601613f65565b95602094909401359450505050565b600181811c908216806144ac57607f821691505b6020821081036144e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036145665761456661451a565b6001019392505050565b60006020828403121561458257600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036145ba576145ba61451a565b5060010190565b600067ffffffffffffffff838116908316818110156145e2576145e261451a565b039392505050565b6000828210156145fc576145fc61451a565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146395761463961451a565b500290565b60008251614650818460208701613dd4565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826146985761469861465a565b500690565b61012081016040808784376000838201818152879190815b60028110156146d5578484833790840182815292840192906001016146b5565b5050828760c0870137610100850181815286935091505b600181101561470b5782518252602092830192909101906001016146ec565b50505095945050505050565b60006020828403121561472957600080fd5b8151613e3f816141fb565b600067ffffffffffffffff8083168185168083038211156147575761475761451a565b01949350505050565b601f8211156138e357600081815260208120601f850160051c810160208610156147875750805b601f850160051c820191505b818110156147a657828155600101614793565b505050505050565b815167ffffffffffffffff8111156147c8576147c8613e95565b6147dc816147d68454614498565b84614760565b602080601f83116001811461482f57600084156147f95750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556147a6565b600085815260208120601f198616915b8281101561485e5788860151825594840194600190910190840161483f565b508582101561489a57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000826148b9576148b961465a565b500490565b600082198211156148d1576148d161451a565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff8316602082015260606040820152600061490b6060830184613e00565b9594505050505056fea26469706673582212207c6b25ea7b3ac634e02bf0cce36a2d1a9ef1d74d076f5577d417755d876e61f664736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5061494a806100206000396000f3fe608060405234801561001057600080fd5b50600436106102c85760003560e01c80638da5cb5b1161017b578063cfa8ed47116100d8578063e7a7ed021161008c578063eaeb077b11610071578063eaeb077b14610687578063f2fde38b1461069a578063f7552761146106ad57600080fd5b8063e7a7ed0214610637578063e8bf92ed1461066757600080fd5b8063d8d1091b116100bd578063d8d1091b146105ef578063d8f54db014610602578063dbc169761461062f57600080fd5b8063cfa8ed47146105a3578063d02103ca146105cf57600080fd5b8063b02286c01161012f578063b6b0b09711610114578063b6b0b09714610558578063c3fd0f9c1461057d578063c89e42df1461059057600080fd5b8063b02286c01461052f578063b4d63f581461053857600080fd5b8063a3c573eb11610160578063a3c573eb146104f1578063ab9fc5ef14610511578063adc879e91461051b57600080fd5b80638da5cb5b146104cb57806399f5634e146104e957600080fd5b8063542028d5116102295780637152facf116101dd5780637fcb3653116101c25780637fcb36531461049157806381df7d3f146104a55780638c4a0af7146104b857600080fd5b80637152facf14610476578063798470571461048957600080fd5b80636b8616ce1161020e5780636b8616ce1461043b5780636ff512cc1461045b578063715018a61461046e57600080fd5b8063542028d51461042057806355b925e61461042857600080fd5b806327eb6c0f11610280578063423fa85611610265578063423fa856146103aa57806345605267146103ca5780635392c5e0146103f257600080fd5b806327eb6c0f146103525780633c1582671461039757600080fd5b806319d8ac61116102b157806319d8ac61146103085780631c1083e2146103355780632072f6c51461034a57600080fd5b8063107bf28c146102cd57806315064c96146102eb575b600080fd5b6102d56106bc565b6040516102e29190613e2c565b60405180910390f35b6065546102f89060ff1681565b60405190151581526020016102e2565b60685461031c9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102e2565b610348610343366004613e78565b61074a565b005b610348610856565b6070546103729073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e2565b6103486103a5366004613fed565b610907565b60685461031c9068010000000000000000900467ffffffffffffffff1681565b60685461031c90700100000000000000000000000000000000900467ffffffffffffffff1681565b610412610400366004614104565b606b6020526000908152604090205481565b6040519081526020016102e2565b6102d5611297565b610348610436366004614136565b6112a4565b610412610449366004614104565b60666020526000908152604090205481565b610348610469366004613e78565b61186d565b610348611987565b6102d56104843660046141b9565b611999565b610412611bd0565b60695461031c9067ffffffffffffffff1681565b6103486104b3366004614214565b611c4a565b6103486104c636600461430e565b611fa3565b60335473ffffffffffffffffffffffffffffffffffffffff16610372565b6104126120bd565b6071546103729073ffffffffffffffffffffffffffffffffffffffff1681565b61031c62093a8081565b606e5461031c9067ffffffffffffffff1681565b61041261ea6081565b610412610546366004614104565b60676020526000908152604090205481565b60655461037290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b61034861058b366004614136565b6121ee565b61034861059e36600461432b565b612838565b6069546103729068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103729073ffffffffffffffffffffffffffffffffffffffff1681565b6103486105fd366004614360565b61290d565b6069546102f8907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610348612fb2565b60685461031c907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103729073ffffffffffffffffffffffffffffffffffffffff1681565b610348610695366004614453565b613141565b6103486106a8366004613e78565b613641565b61041267016345785d8a000081565b606f80546106c990614498565b80601f01602080910402602001604051908101604052809291908181526020018280546106f590614498565b80156107425780601f1061071757610100808354040283529160200191610742565b820191906000526020600020905b81548152906001019060200180831161072557829003601f168201915b505050505081565b60705473ffffffffffffffffffffffffffffffffffffffff1633146107dc5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff16156108f55760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6108fd6136de565b610905613745565b565b60655460ff16156109a65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610a3f5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b805180610ada5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015611088576000878281518110610b4057610b406144eb565b602002602001015190506000816060015167ffffffffffffffff161115610d595783610b6b81614549565b945050600081600001518051906020012082602001518360600151604051602001610bce93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610c9b5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610d535760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016107d3565b50610ef3565b60208101511580610e085750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610dc29160040190815260200190565b6020604051808303816000875af1158015610de1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e059190614570565b15155b610e7a5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016107d3565b80515161ea6011610ef35760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016107d3565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610f29575042816040015167ffffffffffffffff1611155b610fc15760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061106a90614549565b9550508060400151955050808061108090614589565b915050610b24565b5060685467ffffffffffffffff78010000000000000000000000000000000000000000000000009091048116908316111561112b5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016107d3565b60685460009061115990700100000000000000000000000000000000900467ffffffffffffffff16846145c1565b61116d9067ffffffffffffffff16876145ea565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061124a33306112248467016345785d8a0000614601565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169291906137cf565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d80546106c990614498565b60655460ff16156113435760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695467ffffffffffffffff90811690881611156113ef5760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016107d3565b60695467ffffffffffffffff9081169087161161149a5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b602052604090205461154c5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a4016107d3565b600061155a88888888611999565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161158f919061463e565b602060405180830381855afa1580156115ac573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906115cf9190614570565b6115d99190614689565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611643918991899189919060040161469d565b602060405180830381865afa158015611660573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116849190614717565b6116f65760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016107d3565b6069546117549033906117139067ffffffffffffffff168b6145c1565b67ffffffffffffffff166117256120bd565b61172f9190614601565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16919061388d565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b15801561180957600080fd5b505af115801561181d573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146119065760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161084b565b61198f6136de565b61090560006138e8565b67ffffffffffffffff8085166000818152606760205260408082205493871682529020546060929115806119cc57508115155b611a645760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b80611afd5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec01604051602081830303815290604052925050505b949350505050565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691611c1f917801000000000000000000000000000000000000000000000000909104166001614734565b611c2991906145c1565b611c459067ffffffffffffffff16670de0b6b3a7640000614601565b905090565b600054610100900460ff1615808015611c6a5750600054600160ff909116105b80611c845750303b158015611c84575060005460ff166001145b611cf65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107d3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611d5457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d611e9387826147ae565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f611ed485826147ae565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556070805492851692909116919091179055611f3261395f565b8015611f9557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461203c5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061084b90831515815260200190565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612134573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121589190614570565b60695460685491925060009167ffffffffffffffff918216916801000000000000000082048116916121bd91700100000000000000000000000000000000820481169178010000000000000000000000000000000000000000000000009004166145c1565b6121c79190614734565b6121d191906145c1565b67ffffffffffffffff1690506121e781836148aa565b9250505090565b60655460ff161561228d5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b8567ffffffffffffffff168767ffffffffffffffff161061233c5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a4016107d3565b60695467ffffffffffffffff908116908716111561240e5760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c4016107d3565b67ffffffffffffffff87166000908152606b60205260409020546124c05760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a4016107d3565b67ffffffffffffffff86166000908152606b60205260409020546125725760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a4016107d3565b600061258088888888611999565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516125b5919061463e565b602060405180830381855afa1580156125d2573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906125f59190614570565b6125ff9190614689565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91612669918991899189919060040161469d565b602060405180830381865afa158015612686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126aa9190614717565b61271c5760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f460000000060648201526084016107d3565b67ffffffffffffffff88166000908152606b60205260409020548690036127d15760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a4016107d3565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a161282d613745565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146128d15760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606d6128dd82826147ae565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161084b9190613e2c565b60655460ff16156129ac5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612a6f5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180612b0a5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60685467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612b559184917001000000000000000000000000000000009004166148be565b1115612bc95760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016107d3565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b84811015612ee2576000868281518110612c2957612c296144eb565b602002602001015190508380612c3e90614549565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114612d5f5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016107d3565b612d6a6001886145ea565b8303612e28574262093a808360400151612d849190614734565b67ffffffffffffffff161115612e285760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016107d3565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612eca90614549565b96505050508080612eda90614589565b915050612c0d565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff1661302a5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b60705473ffffffffffffffffffffffffffffffffffffffff1633146130b75760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561312157600080fd5b505af1158015613135573d6000803e3d6000fd5b505050506109056139e5565b60655460ff16156131e05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146132a35760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b60006132ad611bd0565b9050818111156133255760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016107d3565b61ea6083511061339d5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016107d3565b6065546133c790610100900473ffffffffffffffffffffffffffffffffffffffff163330846137cf565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345b9190614570565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff1690601861349583614549565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161350e93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260669093529120553233036135de57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261363b565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613632939291906148d6565b60405180910390a25b50505050565b6136496136de565b73ffffffffffffffffffffffffffffffffffffffff81166136d25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107d3565b6136db816138e8565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109055760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156137af57600080fd5b505af11580156137c3573d6000803e3d6000fd5b50505050610905613ab0565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261363b9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613ba5565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526138e39084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401613829565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166139dc5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107d3565b610905336138e8565b60655460ff16613a5d5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff1615613b4f5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6000613c07826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613c979092919063ffffffff16565b8051909150156138e35780806020019051810190613c259190614717565b6138e35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107d3565b6060611bc88484600085856000808673ffffffffffffffffffffffffffffffffffffffff168587604051613ccb919061463e565b60006040518083038185875af1925050503d8060008114613d08576040519150601f19603f3d011682016040523d82523d6000602084013e613d0d565b606091505b5091509150613d1e87838387613d29565b979650505050505050565b60608315613da5578251600003613d9e5773ffffffffffffffffffffffffffffffffffffffff85163b613d9e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107d3565b5081611bc8565b611bc88383815115613dba5781518083602001fd5b8060405162461bcd60e51b81526004016107d39190613e2c565b60005b83811015613def578181015183820152602001613dd7565b8381111561363b5750506000910152565b60008151808452613e18816020860160208601613dd4565b601f01601f19169290920160200192915050565b602081526000613e3f6020830184613e00565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146136db57600080fd5b8035613e7381613e46565b919050565b600060208284031215613e8a57600080fd5b8135613e3f81613e46565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613ee757613ee7613e95565b60405290565b6040516060810167ffffffffffffffff81118282101715613ee757613ee7613e95565b604051601f8201601f1916810167ffffffffffffffff81118282101715613f3957613f39613e95565b604052919050565b600067ffffffffffffffff821115613f5b57613f5b613e95565b5060051b60200190565b600082601f830112613f7657600080fd5b813567ffffffffffffffff811115613f9057613f90613e95565b613fa36020601f19601f84011601613f10565b818152846020838601011115613fb857600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613e7357600080fd5b6000602080838503121561400057600080fd5b823567ffffffffffffffff8082111561401857600080fd5b818501915085601f83011261402c57600080fd5b813561403f61403a82613f41565b613f10565b81815260059190911b8301840190848101908883111561405e57600080fd5b8585015b838110156140f75780358581111561407a5760008081fd5b86016080818c03601f19018113156140925760008081fd5b61409a613ec4565b89830135888111156140ac5760008081fd5b6140ba8e8c83870101613f65565b8252506040808401358b83015260606140d4818601613fd5565b828401526140e3848601613fd5565b908301525085525050918601918601614062565b5098975050505050505050565b60006020828403121561411657600080fd5b613e3f82613fd5565b806040810183101561413057600080fd5b92915050565b6000806000806000806000610180888a03121561415257600080fd5b61415b88613fd5565b965061416960208901613fd5565b955060408801359450606088013593506141868960808a0161411f565b925061014088018981111561419a57600080fd5b60c0890192506141aa8a8261411f565b91505092959891949750929550565b600080600080608085870312156141cf57600080fd5b6141d885613fd5565b93506141e660208601613fd5565b93969395505050506040820135916060013590565b80151581146136db57600080fd5b8035613e73816141fb565b60008060008060008060008060008060006101608c8e03121561423657600080fd5b61423f8c613e68565b9a5061424d60208d01613e68565b995061425b60408d01613e68565b985060608c0135975061427060808d01613e68565b965061427e60a08d01614209565b955067ffffffffffffffff8060c08e0135111561429a57600080fd5b6142aa8e60c08f01358f01613f65565b95506142b860e08e01613fd5565b9450806101008e013511156142cc57600080fd5b506142de8d6101008e01358e01613f65565b92506142ed6101208d01613e68565b91506142fc6101408d01613e68565b90509295989b509295989b9093969950565b60006020828403121561432057600080fd5b8135613e3f816141fb565b60006020828403121561433d57600080fd5b813567ffffffffffffffff81111561435457600080fd5b611bc884828501613f65565b6000602080838503121561437357600080fd5b823567ffffffffffffffff8082111561438b57600080fd5b818501915085601f83011261439f57600080fd5b81356143ad61403a82613f41565b81815260059190911b830184019084810190888311156143cc57600080fd5b8585015b838110156140f7578035858111156143e85760008081fd5b86016060818c03601f19018113156144005760008081fd5b614408613eed565b898301358881111561441a5760008081fd5b6144288e8c83870101613f65565b8252506040808401358b830152614440838501613fd5565b90820152855250509186019186016143d0565b6000806040838503121561446657600080fd5b823567ffffffffffffffff81111561447d57600080fd5b61448985828601613f65565b95602094909401359450505050565b600181811c908216806144ac57607f821691505b6020821081036144e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036145665761456661451a565b6001019392505050565b60006020828403121561458257600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036145ba576145ba61451a565b5060010190565b600067ffffffffffffffff838116908316818110156145e2576145e261451a565b039392505050565b6000828210156145fc576145fc61451a565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146395761463961451a565b500290565b60008251614650818460208701613dd4565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826146985761469861465a565b500690565b61012081016040808784376000838201818152879190815b60028110156146d5578484833790840182815292840192906001016146b5565b5050828760c0870137610100850181815286935091505b600181101561470b5782518252602092830192909101906001016146ec565b50505095945050505050565b60006020828403121561472957600080fd5b8151613e3f816141fb565b600067ffffffffffffffff8083168185168083038211156147575761475761451a565b01949350505050565b601f8211156138e357600081815260208120601f850160051c810160208610156147875750805b601f850160051c820191505b818110156147a657828155600101614793565b505050505050565b815167ffffffffffffffff8111156147c8576147c8613e95565b6147dc816147d68454614498565b84614760565b602080601f83116001811461482f57600084156147f95750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556147a6565b600085815260208120601f198616915b8281101561485e5788860151825594840194600190910190840161483f565b508582101561489a57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000826148b9576148b961465a565b500490565b600082198211156148d1576148d161451a565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff8316602082015260606040820152600061490b6060830184613e00565b9594505050505056fea2646970667358221220e060d003a6df3b282d02b727e8541fe86ad6aa5154fa08bedc64fae66b56376464736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102c85760003560e01c80638da5cb5b1161017b578063cfa8ed47116100d8578063e7a7ed021161008c578063eaeb077b11610071578063eaeb077b14610687578063f2fde38b1461069a578063f7552761146106ad57600080fd5b8063e7a7ed0214610637578063e8bf92ed1461066757600080fd5b8063d8d1091b116100bd578063d8d1091b146105ef578063d8f54db014610602578063dbc169761461062f57600080fd5b8063cfa8ed47146105a3578063d02103ca146105cf57600080fd5b8063b02286c01161012f578063b6b0b09711610114578063b6b0b09714610558578063c3fd0f9c1461057d578063c89e42df1461059057600080fd5b8063b02286c01461052f578063b4d63f581461053857600080fd5b8063a3c573eb11610160578063a3c573eb146104f1578063ab9fc5ef14610511578063adc879e91461051b57600080fd5b80638da5cb5b146104cb57806399f5634e146104e957600080fd5b8063542028d5116102295780637152facf116101dd5780637fcb3653116101c25780637fcb36531461049157806381df7d3f146104a55780638c4a0af7146104b857600080fd5b80637152facf14610476578063798470571461048957600080fd5b80636b8616ce1161020e5780636b8616ce1461043b5780636ff512cc1461045b578063715018a61461046e57600080fd5b8063542028d51461042057806355b925e61461042857600080fd5b806327eb6c0f11610280578063423fa85611610265578063423fa856146103aa57806345605267146103ca5780635392c5e0146103f257600080fd5b806327eb6c0f146103525780633c1582671461039757600080fd5b806319d8ac61116102b157806319d8ac61146103085780631c1083e2146103355780632072f6c51461034a57600080fd5b8063107bf28c146102cd57806315064c96146102eb575b600080fd5b6102d56106bc565b6040516102e29190613e2c565b60405180910390f35b6065546102f89060ff1681565b60405190151581526020016102e2565b60685461031c9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102e2565b610348610343366004613e78565b61074a565b005b610348610856565b6070546103729073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e2565b6103486103a5366004613fed565b610907565b60685461031c9068010000000000000000900467ffffffffffffffff1681565b60685461031c90700100000000000000000000000000000000900467ffffffffffffffff1681565b610412610400366004614104565b606b6020526000908152604090205481565b6040519081526020016102e2565b6102d5611297565b610348610436366004614136565b6112a4565b610412610449366004614104565b60666020526000908152604090205481565b610348610469366004613e78565b61186d565b610348611987565b6102d56104843660046141b9565b611999565b610412611bd0565b60695461031c9067ffffffffffffffff1681565b6103486104b3366004614214565b611c4a565b6103486104c636600461430e565b611fa3565b60335473ffffffffffffffffffffffffffffffffffffffff16610372565b6104126120bd565b6071546103729073ffffffffffffffffffffffffffffffffffffffff1681565b61031c62093a8081565b606e5461031c9067ffffffffffffffff1681565b61041261ea6081565b610412610546366004614104565b60676020526000908152604090205481565b60655461037290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b61034861058b366004614136565b6121ee565b61034861059e36600461432b565b612838565b6069546103729068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103729073ffffffffffffffffffffffffffffffffffffffff1681565b6103486105fd366004614360565b61290d565b6069546102f8907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610348612fb2565b60685461031c907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103729073ffffffffffffffffffffffffffffffffffffffff1681565b610348610695366004614453565b613141565b6103486106a8366004613e78565b613641565b61041267016345785d8a000081565b606f80546106c990614498565b80601f01602080910402602001604051908101604052809291908181526020018280546106f590614498565b80156107425780601f1061071757610100808354040283529160200191610742565b820191906000526020600020905b81548152906001019060200180831161072557829003601f168201915b505050505081565b60705473ffffffffffffffffffffffffffffffffffffffff1633146107dc5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff16156108f55760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6108fd6136de565b610905613745565b565b60655460ff16156109a65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610a3f5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b805180610ada5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015611088576000878281518110610b4057610b406144eb565b602002602001015190506000816060015167ffffffffffffffff161115610d595783610b6b81614549565b945050600081600001518051906020012082602001518360600151604051602001610bce93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610c9b5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610d535760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016107d3565b50610ef3565b60208101511580610e085750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610dc29160040190815260200190565b6020604051808303816000875af1158015610de1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e059190614570565b15155b610e7a5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016107d3565b80515161ea6011610ef35760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016107d3565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610f29575042816040015167ffffffffffffffff1611155b610fc15760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061106a90614549565b9550508060400151955050808061108090614589565b915050610b24565b5060685467ffffffffffffffff78010000000000000000000000000000000000000000000000009091048116908316111561112b5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016107d3565b60685460009061115990700100000000000000000000000000000000900467ffffffffffffffff16846145c1565b61116d9067ffffffffffffffff16876145ea565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061124a33306112248467016345785d8a0000614601565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169291906137cf565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d80546106c990614498565b60655460ff16156113435760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695467ffffffffffffffff90811690881611156113ef5760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016107d3565b60695467ffffffffffffffff9081169087161161149a5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b602052604090205461154c5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a4016107d3565b600061155a88888888611999565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161158f919061463e565b602060405180830381855afa1580156115ac573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906115cf9190614570565b6115d99190614689565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611643918991899189919060040161469d565b602060405180830381865afa158015611660573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116849190614717565b6116f65760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016107d3565b6069546117549033906117139067ffffffffffffffff168b6145c1565b67ffffffffffffffff166117256120bd565b61172f9190614601565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16919061388d565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b15801561180957600080fd5b505af115801561181d573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146119065760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161084b565b61198f6136de565b61090560006138e8565b67ffffffffffffffff8085166000818152606760205260408082205493871682529020546060929115806119cc57508115155b611a645760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b80611afd5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec01604051602081830303815290604052925050505b949350505050565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691611c1f917801000000000000000000000000000000000000000000000000909104166001614734565b611c2991906145c1565b611c459067ffffffffffffffff16670de0b6b3a7640000614601565b905090565b600054610100900460ff1615808015611c6a5750600054600160ff909116105b80611c845750303b158015611c84575060005460ff166001145b611cf65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107d3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611d5457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d611e9387826147ae565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f611ed485826147ae565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556070805492851692909116919091179055611f3261395f565b8015611f9557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461203c5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061084b90831515815260200190565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612134573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121589190614570565b60695460685491925060009167ffffffffffffffff918216916801000000000000000082048116916121bd91700100000000000000000000000000000000820481169178010000000000000000000000000000000000000000000000009004166145c1565b6121c79190614734565b6121d191906145c1565b67ffffffffffffffff1690506121e781836148aa565b9250505090565b60655460ff161561228d5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b8567ffffffffffffffff168767ffffffffffffffff161061233c5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a4016107d3565b60695467ffffffffffffffff908116908716111561240e5760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c4016107d3565b67ffffffffffffffff87166000908152606b60205260409020546124c05760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a4016107d3565b67ffffffffffffffff86166000908152606b60205260409020546125725760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a4016107d3565b600061258088888888611999565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516125b5919061463e565b602060405180830381855afa1580156125d2573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906125f59190614570565b6125ff9190614689565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91612669918991899189919060040161469d565b602060405180830381865afa158015612686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126aa9190614717565b61271c5760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f460000000060648201526084016107d3565b67ffffffffffffffff88166000908152606b60205260409020548690036127d15760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a4016107d3565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a161282d613745565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146128d15760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606d6128dd82826147ae565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161084b9190613e2c565b60655460ff16156129ac5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612a6f5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180612b0a5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60685467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612b559184917001000000000000000000000000000000009004166148be565b1115612bc95760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016107d3565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b84811015612ee2576000868281518110612c2957612c296144eb565b602002602001015190508380612c3e90614549565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114612d5f5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016107d3565b612d6a6001886145ea565b8303612e28574262093a808360400151612d849190614734565b67ffffffffffffffff161115612e285760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016107d3565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612eca90614549565b96505050508080612eda90614589565b915050612c0d565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff1661302a5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b60705473ffffffffffffffffffffffffffffffffffffffff1633146130b75760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561312157600080fd5b505af1158015613135573d6000803e3d6000fd5b505050506109056139e5565b60655460ff16156131e05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146132a35760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b60006132ad611bd0565b9050818111156133255760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016107d3565b61ea6083511061339d5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016107d3565b6065546133c790610100900473ffffffffffffffffffffffffffffffffffffffff163330846137cf565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345b9190614570565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff1690601861349583614549565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161350e93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260669093529120553233036135de57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261363b565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613632939291906148d6565b60405180910390a25b50505050565b6136496136de565b73ffffffffffffffffffffffffffffffffffffffff81166136d25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107d3565b6136db816138e8565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109055760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156137af57600080fd5b505af11580156137c3573d6000803e3d6000fd5b50505050610905613ab0565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261363b9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613ba5565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526138e39084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401613829565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166139dc5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107d3565b610905336138e8565b60655460ff16613a5d5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff1615613b4f5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6000613c07826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613c979092919063ffffffff16565b8051909150156138e35780806020019051810190613c259190614717565b6138e35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107d3565b6060611bc88484600085856000808673ffffffffffffffffffffffffffffffffffffffff168587604051613ccb919061463e565b60006040518083038185875af1925050503d8060008114613d08576040519150601f19603f3d011682016040523d82523d6000602084013e613d0d565b606091505b5091509150613d1e87838387613d29565b979650505050505050565b60608315613da5578251600003613d9e5773ffffffffffffffffffffffffffffffffffffffff85163b613d9e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107d3565b5081611bc8565b611bc88383815115613dba5781518083602001fd5b8060405162461bcd60e51b81526004016107d39190613e2c565b60005b83811015613def578181015183820152602001613dd7565b8381111561363b5750506000910152565b60008151808452613e18816020860160208601613dd4565b601f01601f19169290920160200192915050565b602081526000613e3f6020830184613e00565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146136db57600080fd5b8035613e7381613e46565b919050565b600060208284031215613e8a57600080fd5b8135613e3f81613e46565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613ee757613ee7613e95565b60405290565b6040516060810167ffffffffffffffff81118282101715613ee757613ee7613e95565b604051601f8201601f1916810167ffffffffffffffff81118282101715613f3957613f39613e95565b604052919050565b600067ffffffffffffffff821115613f5b57613f5b613e95565b5060051b60200190565b600082601f830112613f7657600080fd5b813567ffffffffffffffff811115613f9057613f90613e95565b613fa36020601f19601f84011601613f10565b818152846020838601011115613fb857600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613e7357600080fd5b6000602080838503121561400057600080fd5b823567ffffffffffffffff8082111561401857600080fd5b818501915085601f83011261402c57600080fd5b813561403f61403a82613f41565b613f10565b81815260059190911b8301840190848101908883111561405e57600080fd5b8585015b838110156140f75780358581111561407a5760008081fd5b86016080818c03601f19018113156140925760008081fd5b61409a613ec4565b89830135888111156140ac5760008081fd5b6140ba8e8c83870101613f65565b8252506040808401358b83015260606140d4818601613fd5565b828401526140e3848601613fd5565b908301525085525050918601918601614062565b5098975050505050505050565b60006020828403121561411657600080fd5b613e3f82613fd5565b806040810183101561413057600080fd5b92915050565b6000806000806000806000610180888a03121561415257600080fd5b61415b88613fd5565b965061416960208901613fd5565b955060408801359450606088013593506141868960808a0161411f565b925061014088018981111561419a57600080fd5b60c0890192506141aa8a8261411f565b91505092959891949750929550565b600080600080608085870312156141cf57600080fd5b6141d885613fd5565b93506141e660208601613fd5565b93969395505050506040820135916060013590565b80151581146136db57600080fd5b8035613e73816141fb565b60008060008060008060008060008060006101608c8e03121561423657600080fd5b61423f8c613e68565b9a5061424d60208d01613e68565b995061425b60408d01613e68565b985060608c0135975061427060808d01613e68565b965061427e60a08d01614209565b955067ffffffffffffffff8060c08e0135111561429a57600080fd5b6142aa8e60c08f01358f01613f65565b95506142b860e08e01613fd5565b9450806101008e013511156142cc57600080fd5b506142de8d6101008e01358e01613f65565b92506142ed6101208d01613e68565b91506142fc6101408d01613e68565b90509295989b509295989b9093969950565b60006020828403121561432057600080fd5b8135613e3f816141fb565b60006020828403121561433d57600080fd5b813567ffffffffffffffff81111561435457600080fd5b611bc884828501613f65565b6000602080838503121561437357600080fd5b823567ffffffffffffffff8082111561438b57600080fd5b818501915085601f83011261439f57600080fd5b81356143ad61403a82613f41565b81815260059190911b830184019084810190888311156143cc57600080fd5b8585015b838110156140f7578035858111156143e85760008081fd5b86016060818c03601f19018113156144005760008081fd5b614408613eed565b898301358881111561441a5760008081fd5b6144288e8c83870101613f65565b8252506040808401358b830152614440838501613fd5565b90820152855250509186019186016143d0565b6000806040838503121561446657600080fd5b823567ffffffffffffffff81111561447d57600080fd5b61448985828601613f65565b95602094909401359450505050565b600181811c908216806144ac57607f821691505b6020821081036144e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036145665761456661451a565b6001019392505050565b60006020828403121561458257600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036145ba576145ba61451a565b5060010190565b600067ffffffffffffffff838116908316818110156145e2576145e261451a565b039392505050565b6000828210156145fc576145fc61451a565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146395761463961451a565b500290565b60008251614650818460208701613dd4565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826146985761469861465a565b500690565b61012081016040808784376000838201818152879190815b60028110156146d5578484833790840182815292840192906001016146b5565b5050828760c0870137610100850181815286935091505b600181101561470b5782518252602092830192909101906001016146ec565b50505095945050505050565b60006020828403121561472957600080fd5b8151613e3f816141fb565b600067ffffffffffffffff8083168185168083038211156147575761475761451a565b01949350505050565b601f8211156138e357600081815260208120601f850160051c810160208610156147875750805b601f850160051c820191505b818110156147a657828155600101614793565b505050505050565b815167ffffffffffffffff8111156147c8576147c8613e95565b6147dc816147d68454614498565b84614760565b602080601f83116001811461482f57600084156147f95750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556147a6565b600085815260208120601f198616915b8281101561485e5788860151825594840194600190910190840161483f565b508582101561489a57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000826148b9576148b961465a565b500490565b600082198211156148d1576148d161451a565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff8316602082015260606040820152600061490b6060830184613e00565b9594505050505056fea2646970667358221220e060d003a6df3b282d02b727e8541fe86ad6aa5154fa08bedc64fae66b56376464736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/ProofOfEfficiencyMock.json b/compiled-contracts/ProofOfEfficiencyMock.json index 6cc13b143..519f6574a 100644 --- a/compiled-contracts/ProofOfEfficiencyMock.json +++ b/compiled-contracts/ProofOfEfficiencyMock.json @@ -1100,8 +1100,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506151f8806100206000396000f3fe608060405234801561001057600080fd5b506004361061032b5760003560e01c80638da5cb5b116101b2578063c89e42df116100f9578063dbc16976116100a2578063eaeb077b1161007c578063eaeb077b14610810578063f2fde38b14610823578063f755276114610836578063fe16564f1461084557600080fd5b8063dbc16976146107b8578063e7a7ed02146107c0578063e8bf92ed146107f057600080fd5b8063d0ae98dd116100d3578063d0ae98dd14610765578063d8d1091b14610778578063d8f54db01461078b57600080fd5b8063c89e42df14610706578063cfa8ed4714610719578063d02103ca1461074557600080fd5b8063adc879e91161015b578063b6b0b09711610135578063b6b0b097146106bb578063c0cad302146106e0578063c3fd0f9c146106f357600080fd5b8063adc879e91461067e578063b02286c014610692578063b4d63f581461069b57600080fd5b80639b7967601161018c5780639b79676014610641578063a3c573eb14610654578063ab9fc5ef1461067457600080fd5b80638da5cb5b1461060857806396dc3d391461062657806399f5634e1461063957600080fd5b80635437988d116102765780637152facf1161021f5780637fcb3653116101f95780637fcb3653146105ce57806381df7d3f146105e25780638c4a0af7146105f557600080fd5b80637152facf146105a0578063748608de146105b357806379847057146105c657600080fd5b80636b8616ce116102505780636b8616ce146105655780636ff512cc14610585578063715018a61461059857600080fd5b80635437988d1461049e57806355b925e6146104b1578063574f649e146104c457600080fd5b806327eb6c0f116102d857806345605267116102b257806345605267146104405780635392c5e014610468578063542028d51461049657600080fd5b806327eb6c0f146103c85780633c1582671461040d578063423fa8561461042057600080fd5b80631a26da14116103095780631a26da14146103985780631c1083e2146103ad5780632072f6c5146103c057600080fd5b8063107bf28c1461033057806315064c961461034e57806319d8ac611461036b575b600080fd5b610338610858565b604051610345919061460e565b60405180910390f35b60655461035b9060ff1681565b6040519015158152602001610345565b60685461037f9067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610345565b6103ab6103a6366004614645565b6108e6565b005b6103ab6103bb36600461469c565b61090b565b6103ab610a17565b6070546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610345565b6103ab61041b3660046147f9565b610ac8565b60685461037f9068010000000000000000900467ffffffffffffffff1681565b60685461037f90700100000000000000000000000000000000900467ffffffffffffffff1681565b610488610476366004614910565b606b6020526000908152604090205481565b604051908152602001610345565b610338611458565b6103ab6104ac36600461469c565b611465565b6103ab6104bf366004614942565b6114b4565b6104886104d23660046149c5565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b610488610573366004614910565b60666020526000908152604090205481565b6103ab61059336600461469c565b611a7d565b6103ab611b97565b6103386105ae366004614a3b565b611ba9565b6103ab6105c1366004614942565b611de0565b610488612049565b60695461037f9067ffffffffffffffff1681565b6103ab6105f0366004614a96565b6120c3565b6103ab610603366004614b90565b61241c565b60335473ffffffffffffffffffffffffffffffffffffffff166103e8565b6103ab610634366004614910565b612536565b610488612579565b6103ab61064f366004614910565b6126aa565b6071546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b61037f62093a8081565b606e5461037f9067ffffffffffffffff1681565b61048861ea6081565b6104886106a9366004614910565b60676020526000908152604090205481565b6065546103e890610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6103ab6106ee366004614bad565b6126f9565b6103ab610701366004614942565b612711565b6103ab610714366004614bad565b612d5b565b6069546103e89068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b610488610773366004614a3b565b612e30565b6103ab610786366004614be2565b6130dc565b60695461035b907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b6103ab613781565b60685461037f907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b6103ab61081e366004614cd5565b613910565b6103ab61083136600461469c565b613e10565b61048867016345785d8a000081565b6103ab610853366004614d1a565b613ead565b606f805461086590614d46565b80601f016020809104026020016040519081016040528092919081815260200182805461089190614d46565b80156108de5780601f106108b3576101008083540402835291602001916108de565b820191906000526020600020905b8154815290600101906020018083116108c157829003601f168201915b505050505081565b6108ee613ed0565b67ffffffffffffffff909116600090815260676020526040902055565b60705473ffffffffffffffffffffffffffffffffffffffff16331461099d5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff1615610ab65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b610abe613ed0565b610ac6613f37565b565b60655460ff1615610b675760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610c005760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b805180610c9b5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015611249576000878281518110610d0157610d01614d99565b602002602001015190506000816060015167ffffffffffffffff161115610f1a5783610d2c81614df7565b945050600081600001518051906020012082602001518360600151604051602001610d8f93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610e5c5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610f145760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610994565b506110b4565b60208101511580610fc95750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610f839160040190815260200190565b6020604051808303816000875af1158015610fa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc69190614e1e565b15155b61103b5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610994565b80515161ea60116110b45760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610994565b8567ffffffffffffffff16816040015167ffffffffffffffff16101580156110ea575042816040015167ffffffffffffffff1611155b6111825760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061122b90614df7565b9550508060400151955050808061124190614e37565b915050610ce5565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156112ec5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610994565b60685460009061131a90700100000000000000000000000000000000900467ffffffffffffffff1684614e6f565b61132e9067ffffffffffffffff1687614e98565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061140b33306113e58467016345785d8a0000614eaf565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613fc1565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d805461086590614d46565b61146d613ed0565b606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60655460ff16156115535760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff90811690881611156115ff5760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a401610994565b60695467ffffffffffffffff908116908716116116aa5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b602052604090205461175c5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a401610994565b600061176a88888888611ba9565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161179f9190614eec565b602060405180830381855afa1580156117bc573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906117df9190614e1e565b6117e99190614f37565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916118539189918991899190600401614f4b565b602060405180830381865afa158015611870573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118949190614fc5565b6119065760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610994565b6069546119649033906119239067ffffffffffffffff168b614e6f565b67ffffffffffffffff16611935612579565b61193f9190614eaf565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16919061407f565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b158015611a1957600080fd5b505af1158015611a2d573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611b165760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610a0c565b611b9f613ed0565b610ac660006140da565b67ffffffffffffffff808516600081815260676020526040808220549387168252902054606092911580611bdc57508115155b611c745760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b80611d0d5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec01604051602081830303815290604052925050505b949350505050565b611de8613ed0565b60695467ffffffffffffffff9081169088161115611e945760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff90811690871611611f3f5760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610994565b67ffffffffffffffff80881660009081526067602052604080822054928916825290205481611fd65760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b806119645760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691612098917801000000000000000000000000000000000000000000000000909104166001614fe2565b6120a29190614e6f565b6120be9067ffffffffffffffff16670de0b6b3a7640000614eaf565b905090565b600054610100900460ff16158080156120e35750600054600160ff909116105b806120fd5750303b1580156120fd575060005460ff166001145b61216f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610994565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156121cd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d61230c878261505c565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f61234d858261505c565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560708054928516929091169190911790556123ab614151565b801561240e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146124b55760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a0c90831515815260200190565b61253e613ed0565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156125f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126149190614e1e565b60695460685491925060009167ffffffffffffffff918216916801000000000000000082048116916126799170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614e6f565b6126839190614fe2565b61268d9190614e6f565b67ffffffffffffffff1690506126a38183615158565b9250505090565b6126b2613ed0565b6068805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b612701613ed0565b606f61270d828261505c565b5050565b60655460ff16156127b05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8567ffffffffffffffff168767ffffffffffffffff161061285f5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a401610994565b60695467ffffffffffffffff90811690871611156129315760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c401610994565b67ffffffffffffffff87166000908152606b60205260409020546129e35760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a401610994565b67ffffffffffffffff86166000908152606b6020526040902054612a955760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a401610994565b6000612aa388888888611ba9565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051612ad89190614eec565b602060405180830381855afa158015612af5573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612b189190614e1e565b612b229190614f37565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91612b8c9189918991899190600401614f4b565b602060405180830381865afa158015612ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bcd9190614fc5565b612c3f5760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f46000000006064820152608401610994565b67ffffffffffffffff88166000908152606b6020526040902054869003612cf45760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a401610994565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a1612d50613f37565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612df45760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606d612e00828261505c565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a0c919061460e565b60695460009067ffffffffffffffff868116911614612edd5760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8467ffffffffffffffff168467ffffffffffffffff1611612f8c5760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a401610994565b60685467ffffffffffffffff68010000000000000000909104811690851611156130445760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b600061305286868686611ba9565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516130879190614eec565b602060405180830381855afa1580156130a4573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906130c79190614e1e565b6130d19190614f37565b979650505050505050565b60655460ff161561317b5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461323e5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b8051806132d95760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60685467ffffffffffffffff7801000000000000000000000000000000000000000000000000820481169161332491849170010000000000000000000000000000000090041661516c565b11156133985760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610994565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b848110156136b15760008682815181106133f8576133f8614d99565b60200260200101519050838061340d90614df7565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff881660009081526066909352912054909150811461352e5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610994565b613539600188614e98565b83036135f7574262093a8083604001516135539190614fe2565b67ffffffffffffffff1611156135f75760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610994565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209350858061369990614df7565b965050505080806136a990614e37565b9150506133dc565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166137f95760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b60705473ffffffffffffffffffffffffffffffffffffffff1633146138865760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c0000006064820152608401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156138f057600080fd5b505af1158015613904573d6000803e3d6000fd5b50505050610ac66141d7565b60655460ff16156139af5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114613a725760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b6000613a7c612049565b905081811115613af45760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610994565b61ea60835110613b6c5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610994565b606554613b9690610100900473ffffffffffffffffffffffffffffffffffffffff16333084613fc1565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613c06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2a9190614e1e565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613c6483614df7565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505083805190602001208142604051602001613cdd93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526066909352912055323303613dad57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613e0a565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613e0193929190615184565b60405180910390a25b50505050565b613e18613ed0565b73ffffffffffffffffffffffffffffffffffffffff8116613ea15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610994565b613eaa816140da565b50565b613eb5613ed0565b67ffffffffffffffff166000908152606b6020526040902055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ac65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613fa157600080fd5b505af1158015613fb5573d6000803e3d6000fd5b50505050610ac66142a2565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052613e0a9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152614397565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526140d59084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161401b565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166141ce5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610994565b610ac6336140da565b60655460ff1661424f5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff16156143415760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60006143f9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166144899092919063ffffffff16565b8051909150156140d557808060200190518101906144179190614fc5565b6140d55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610994565b6060611dd88484600085856000808673ffffffffffffffffffffffffffffffffffffffff1685876040516144bd9190614eec565b60006040518083038185875af1925050503d80600081146144fa576040519150601f19603f3d011682016040523d82523d6000602084013e6144ff565b606091505b50915091506130d187838387606083156145875782516000036145805773ffffffffffffffffffffffffffffffffffffffff85163b6145805760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610994565b5081611dd8565b611dd8838381511561459c5781518083602001fd5b8060405162461bcd60e51b8152600401610994919061460e565b60005b838110156145d15781810151838201526020016145b9565b83811115613e0a5750506000910152565b600081518084526145fa8160208601602086016145b6565b601f01601f19169290920160200192915050565b60208152600061462160208301846145e2565b9392505050565b803567ffffffffffffffff8116811461464057600080fd5b919050565b6000806040838503121561465857600080fd5b61466183614628565b946020939093013593505050565b73ffffffffffffffffffffffffffffffffffffffff81168114613eaa57600080fd5b80356146408161466f565b6000602082840312156146ae57600080fd5b81356146218161466f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171561470b5761470b6146b9565b60405290565b6040516060810167ffffffffffffffff8111828210171561470b5761470b6146b9565b604051601f8201601f1916810167ffffffffffffffff8111828210171561475d5761475d6146b9565b604052919050565b600067ffffffffffffffff82111561477f5761477f6146b9565b5060051b60200190565b600082601f83011261479a57600080fd5b813567ffffffffffffffff8111156147b4576147b46146b9565b6147c76020601f19601f84011601614734565b8181528460208386010111156147dc57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561480c57600080fd5b823567ffffffffffffffff8082111561482457600080fd5b818501915085601f83011261483857600080fd5b813561484b61484682614765565b614734565b81815260059190911b8301840190848101908883111561486a57600080fd5b8585015b83811015614903578035858111156148865760008081fd5b86016080818c03601f190181131561489e5760008081fd5b6148a66146e8565b89830135888111156148b85760008081fd5b6148c68e8c83870101614789565b8252506040808401358b83015260606148e0818601614628565b828401526148ef848601614628565b90830152508552505091860191860161486e565b5098975050505050505050565b60006020828403121561492257600080fd5b61462182614628565b806040810183101561493c57600080fd5b92915050565b6000806000806000806000610180888a03121561495e57600080fd5b61496788614628565b965061497560208901614628565b955060408801359450606088013593506149928960808a0161492b565b92506101408801898111156149a657600080fd5b60c0890192506149b68a8261492b565b91505092959891949750929550565b600080600080600060a086880312156149dd57600080fd5b85359450602086013567ffffffffffffffff8111156149fb57600080fd5b614a0788828901614789565b94505060408601359250614a1d60608701614628565b91506080860135614a2d8161466f565b809150509295509295909350565b60008060008060808587031215614a5157600080fd5b614a5a85614628565b9350614a6860208601614628565b93969395505050506040820135916060013590565b8015158114613eaa57600080fd5b803561464081614a7d565b60008060008060008060008060008060006101608c8e031215614ab857600080fd5b614ac18c614691565b9a50614acf60208d01614691565b9950614add60408d01614691565b985060608c01359750614af260808d01614691565b9650614b0060a08d01614a8b565b955067ffffffffffffffff8060c08e01351115614b1c57600080fd5b614b2c8e60c08f01358f01614789565b9550614b3a60e08e01614628565b9450806101008e01351115614b4e57600080fd5b50614b608d6101008e01358e01614789565b9250614b6f6101208d01614691565b9150614b7e6101408d01614691565b90509295989b509295989b9093969950565b600060208284031215614ba257600080fd5b813561462181614a7d565b600060208284031215614bbf57600080fd5b813567ffffffffffffffff811115614bd657600080fd5b611dd884828501614789565b60006020808385031215614bf557600080fd5b823567ffffffffffffffff80821115614c0d57600080fd5b818501915085601f830112614c2157600080fd5b8135614c2f61484682614765565b81815260059190911b83018401908481019088831115614c4e57600080fd5b8585015b8381101561490357803585811115614c6a5760008081fd5b86016060818c03601f1901811315614c825760008081fd5b614c8a614711565b8983013588811115614c9c5760008081fd5b614caa8e8c83870101614789565b8252506040808401358b830152614cc2838501614628565b9082015285525050918601918601614c52565b60008060408385031215614ce857600080fd5b823567ffffffffffffffff811115614cff57600080fd5b614d0b85828601614789565b95602094909401359450505050565b60008060408385031215614d2d57600080fd5b82359150614d3d60208401614628565b90509250929050565b600181811c90821680614d5a57607f821691505b602082108103614d93577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614e1457614e14614dc8565b6001019392505050565b600060208284031215614e3057600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e6857614e68614dc8565b5060010190565b600067ffffffffffffffff83811690831681811015614e9057614e90614dc8565b039392505050565b600082821015614eaa57614eaa614dc8565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ee757614ee7614dc8565b500290565b60008251614efe8184602087016145b6565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614f4657614f46614f08565b500690565b61012081016040808784376000838201818152879190815b6002811015614f8357848483379084018281529284019290600101614f63565b5050828760c0870137610100850181815286935091505b6001811015614fb9578251825260209283019290910190600101614f9a565b50505095945050505050565b600060208284031215614fd757600080fd5b815161462181614a7d565b600067ffffffffffffffff80831681851680830382111561500557615005614dc8565b01949350505050565b601f8211156140d557600081815260208120601f850160051c810160208610156150355750805b601f850160051c820191505b8181101561505457828155600101615041565b505050505050565b815167ffffffffffffffff811115615076576150766146b9565b61508a816150848454614d46565b8461500e565b602080601f8311600181146150dd57600084156150a75750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555615054565b600085815260208120601f198616915b8281101561510c578886015182559484019460019091019084016150ed565b508582101561514857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008261516757615167614f08565b500490565b6000821982111561517f5761517f614dc8565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006151b960608301846145e2565b9594505050505056fea2646970667358221220e08ced41d4270e65705ee9e498f554a781dd1c769981d219d457cb4ce80198e364736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061032b5760003560e01c80638da5cb5b116101b2578063c89e42df116100f9578063dbc16976116100a2578063eaeb077b1161007c578063eaeb077b14610810578063f2fde38b14610823578063f755276114610836578063fe16564f1461084557600080fd5b8063dbc16976146107b8578063e7a7ed02146107c0578063e8bf92ed146107f057600080fd5b8063d0ae98dd116100d3578063d0ae98dd14610765578063d8d1091b14610778578063d8f54db01461078b57600080fd5b8063c89e42df14610706578063cfa8ed4714610719578063d02103ca1461074557600080fd5b8063adc879e91161015b578063b6b0b09711610135578063b6b0b097146106bb578063c0cad302146106e0578063c3fd0f9c146106f357600080fd5b8063adc879e91461067e578063b02286c014610692578063b4d63f581461069b57600080fd5b80639b7967601161018c5780639b79676014610641578063a3c573eb14610654578063ab9fc5ef1461067457600080fd5b80638da5cb5b1461060857806396dc3d391461062657806399f5634e1461063957600080fd5b80635437988d116102765780637152facf1161021f5780637fcb3653116101f95780637fcb3653146105ce57806381df7d3f146105e25780638c4a0af7146105f557600080fd5b80637152facf146105a0578063748608de146105b357806379847057146105c657600080fd5b80636b8616ce116102505780636b8616ce146105655780636ff512cc14610585578063715018a61461059857600080fd5b80635437988d1461049e57806355b925e6146104b1578063574f649e146104c457600080fd5b806327eb6c0f116102d857806345605267116102b257806345605267146104405780635392c5e014610468578063542028d51461049657600080fd5b806327eb6c0f146103c85780633c1582671461040d578063423fa8561461042057600080fd5b80631a26da14116103095780631a26da14146103985780631c1083e2146103ad5780632072f6c5146103c057600080fd5b8063107bf28c1461033057806315064c961461034e57806319d8ac611461036b575b600080fd5b610338610858565b604051610345919061460e565b60405180910390f35b60655461035b9060ff1681565b6040519015158152602001610345565b60685461037f9067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610345565b6103ab6103a6366004614645565b6108e6565b005b6103ab6103bb36600461469c565b61090b565b6103ab610a17565b6070546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610345565b6103ab61041b3660046147f9565b610ac8565b60685461037f9068010000000000000000900467ffffffffffffffff1681565b60685461037f90700100000000000000000000000000000000900467ffffffffffffffff1681565b610488610476366004614910565b606b6020526000908152604090205481565b604051908152602001610345565b610338611458565b6103ab6104ac36600461469c565b611465565b6103ab6104bf366004614942565b6114b4565b6104886104d23660046149c5565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b610488610573366004614910565b60666020526000908152604090205481565b6103ab61059336600461469c565b611a7d565b6103ab611b97565b6103386105ae366004614a3b565b611ba9565b6103ab6105c1366004614942565b611de0565b610488612049565b60695461037f9067ffffffffffffffff1681565b6103ab6105f0366004614a96565b6120c3565b6103ab610603366004614b90565b61241c565b60335473ffffffffffffffffffffffffffffffffffffffff166103e8565b6103ab610634366004614910565b612536565b610488612579565b6103ab61064f366004614910565b6126aa565b6071546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b61037f62093a8081565b606e5461037f9067ffffffffffffffff1681565b61048861ea6081565b6104886106a9366004614910565b60676020526000908152604090205481565b6065546103e890610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6103ab6106ee366004614bad565b6126f9565b6103ab610701366004614942565b612711565b6103ab610714366004614bad565b612d5b565b6069546103e89068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b610488610773366004614a3b565b612e30565b6103ab610786366004614be2565b6130dc565b60695461035b907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b6103ab613781565b60685461037f907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b6103ab61081e366004614cd5565b613910565b6103ab61083136600461469c565b613e10565b61048867016345785d8a000081565b6103ab610853366004614d1a565b613ead565b606f805461086590614d46565b80601f016020809104026020016040519081016040528092919081815260200182805461089190614d46565b80156108de5780601f106108b3576101008083540402835291602001916108de565b820191906000526020600020905b8154815290600101906020018083116108c157829003601f168201915b505050505081565b6108ee613ed0565b67ffffffffffffffff909116600090815260676020526040902055565b60705473ffffffffffffffffffffffffffffffffffffffff16331461099d5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff1615610ab65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b610abe613ed0565b610ac6613f37565b565b60655460ff1615610b675760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610c005760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b805180610c9b5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015611249576000878281518110610d0157610d01614d99565b602002602001015190506000816060015167ffffffffffffffff161115610f1a5783610d2c81614df7565b945050600081600001518051906020012082602001518360600151604051602001610d8f93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610e5c5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610f145760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610994565b506110b4565b60208101511580610fc95750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610f839160040190815260200190565b6020604051808303816000875af1158015610fa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc69190614e1e565b15155b61103b5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610994565b80515161ea60116110b45760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610994565b8567ffffffffffffffff16816040015167ffffffffffffffff16101580156110ea575042816040015167ffffffffffffffff1611155b6111825760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061122b90614df7565b9550508060400151955050808061124190614e37565b915050610ce5565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156112ec5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610994565b60685460009061131a90700100000000000000000000000000000000900467ffffffffffffffff1684614e6f565b61132e9067ffffffffffffffff1687614e98565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061140b33306113e58467016345785d8a0000614eaf565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613fc1565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d805461086590614d46565b61146d613ed0565b606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60655460ff16156115535760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff90811690881611156115ff5760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a401610994565b60695467ffffffffffffffff908116908716116116aa5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b602052604090205461175c5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a401610994565b600061176a88888888611ba9565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161179f9190614eec565b602060405180830381855afa1580156117bc573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906117df9190614e1e565b6117e99190614f37565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916118539189918991899190600401614f4b565b602060405180830381865afa158015611870573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118949190614fc5565b6119065760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610994565b6069546119649033906119239067ffffffffffffffff168b614e6f565b67ffffffffffffffff16611935612579565b61193f9190614eaf565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16919061407f565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b158015611a1957600080fd5b505af1158015611a2d573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611b165760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610a0c565b611b9f613ed0565b610ac660006140da565b67ffffffffffffffff808516600081815260676020526040808220549387168252902054606092911580611bdc57508115155b611c745760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b80611d0d5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec01604051602081830303815290604052925050505b949350505050565b611de8613ed0565b60695467ffffffffffffffff9081169088161115611e945760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff90811690871611611f3f5760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610994565b67ffffffffffffffff80881660009081526067602052604080822054928916825290205481611fd65760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b806119645760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691612098917801000000000000000000000000000000000000000000000000909104166001614fe2565b6120a29190614e6f565b6120be9067ffffffffffffffff16670de0b6b3a7640000614eaf565b905090565b600054610100900460ff16158080156120e35750600054600160ff909116105b806120fd5750303b1580156120fd575060005460ff166001145b61216f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610994565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156121cd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d61230c878261505c565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f61234d858261505c565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560708054928516929091169190911790556123ab614151565b801561240e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146124b55760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a0c90831515815260200190565b61253e613ed0565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156125f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126149190614e1e565b60695460685491925060009167ffffffffffffffff918216916801000000000000000082048116916126799170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614e6f565b6126839190614fe2565b61268d9190614e6f565b67ffffffffffffffff1690506126a38183615158565b9250505090565b6126b2613ed0565b6068805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b612701613ed0565b606f61270d828261505c565b5050565b60655460ff16156127b05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8567ffffffffffffffff168767ffffffffffffffff161061285f5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a401610994565b60695467ffffffffffffffff90811690871611156129315760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c401610994565b67ffffffffffffffff87166000908152606b60205260409020546129e35760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a401610994565b67ffffffffffffffff86166000908152606b6020526040902054612a955760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a401610994565b6000612aa388888888611ba9565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051612ad89190614eec565b602060405180830381855afa158015612af5573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612b189190614e1e565b612b229190614f37565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91612b8c9189918991899190600401614f4b565b602060405180830381865afa158015612ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bcd9190614fc5565b612c3f5760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f46000000006064820152608401610994565b67ffffffffffffffff88166000908152606b6020526040902054869003612cf45760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a401610994565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a1612d50613f37565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612df45760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606d612e00828261505c565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a0c919061460e565b60695460009067ffffffffffffffff868116911614612edd5760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8467ffffffffffffffff168467ffffffffffffffff1611612f8c5760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a401610994565b60685467ffffffffffffffff68010000000000000000909104811690851611156130445760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b600061305286868686611ba9565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516130879190614eec565b602060405180830381855afa1580156130a4573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906130c79190614e1e565b6130d19190614f37565b979650505050505050565b60655460ff161561317b5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461323e5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b8051806132d95760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60685467ffffffffffffffff7801000000000000000000000000000000000000000000000000820481169161332491849170010000000000000000000000000000000090041661516c565b11156133985760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610994565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b848110156136b15760008682815181106133f8576133f8614d99565b60200260200101519050838061340d90614df7565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff881660009081526066909352912054909150811461352e5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610994565b613539600188614e98565b83036135f7574262093a8083604001516135539190614fe2565b67ffffffffffffffff1611156135f75760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610994565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209350858061369990614df7565b965050505080806136a990614e37565b9150506133dc565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166137f95760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b60705473ffffffffffffffffffffffffffffffffffffffff1633146138865760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c0000006064820152608401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156138f057600080fd5b505af1158015613904573d6000803e3d6000fd5b50505050610ac66141d7565b60655460ff16156139af5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114613a725760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b6000613a7c612049565b905081811115613af45760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610994565b61ea60835110613b6c5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610994565b606554613b9690610100900473ffffffffffffffffffffffffffffffffffffffff16333084613fc1565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613c06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2a9190614e1e565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613c6483614df7565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505083805190602001208142604051602001613cdd93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526066909352912055323303613dad57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613e0a565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613e0193929190615184565b60405180910390a25b50505050565b613e18613ed0565b73ffffffffffffffffffffffffffffffffffffffff8116613ea15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610994565b613eaa816140da565b50565b613eb5613ed0565b67ffffffffffffffff166000908152606b6020526040902055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ac65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613fa157600080fd5b505af1158015613fb5573d6000803e3d6000fd5b50505050610ac66142a2565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052613e0a9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152614397565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526140d59084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161401b565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166141ce5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610994565b610ac6336140da565b60655460ff1661424f5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff16156143415760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60006143f9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166144899092919063ffffffff16565b8051909150156140d557808060200190518101906144179190614fc5565b6140d55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610994565b6060611dd88484600085856000808673ffffffffffffffffffffffffffffffffffffffff1685876040516144bd9190614eec565b60006040518083038185875af1925050503d80600081146144fa576040519150601f19603f3d011682016040523d82523d6000602084013e6144ff565b606091505b50915091506130d187838387606083156145875782516000036145805773ffffffffffffffffffffffffffffffffffffffff85163b6145805760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610994565b5081611dd8565b611dd8838381511561459c5781518083602001fd5b8060405162461bcd60e51b8152600401610994919061460e565b60005b838110156145d15781810151838201526020016145b9565b83811115613e0a5750506000910152565b600081518084526145fa8160208601602086016145b6565b601f01601f19169290920160200192915050565b60208152600061462160208301846145e2565b9392505050565b803567ffffffffffffffff8116811461464057600080fd5b919050565b6000806040838503121561465857600080fd5b61466183614628565b946020939093013593505050565b73ffffffffffffffffffffffffffffffffffffffff81168114613eaa57600080fd5b80356146408161466f565b6000602082840312156146ae57600080fd5b81356146218161466f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171561470b5761470b6146b9565b60405290565b6040516060810167ffffffffffffffff8111828210171561470b5761470b6146b9565b604051601f8201601f1916810167ffffffffffffffff8111828210171561475d5761475d6146b9565b604052919050565b600067ffffffffffffffff82111561477f5761477f6146b9565b5060051b60200190565b600082601f83011261479a57600080fd5b813567ffffffffffffffff8111156147b4576147b46146b9565b6147c76020601f19601f84011601614734565b8181528460208386010111156147dc57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561480c57600080fd5b823567ffffffffffffffff8082111561482457600080fd5b818501915085601f83011261483857600080fd5b813561484b61484682614765565b614734565b81815260059190911b8301840190848101908883111561486a57600080fd5b8585015b83811015614903578035858111156148865760008081fd5b86016080818c03601f190181131561489e5760008081fd5b6148a66146e8565b89830135888111156148b85760008081fd5b6148c68e8c83870101614789565b8252506040808401358b83015260606148e0818601614628565b828401526148ef848601614628565b90830152508552505091860191860161486e565b5098975050505050505050565b60006020828403121561492257600080fd5b61462182614628565b806040810183101561493c57600080fd5b92915050565b6000806000806000806000610180888a03121561495e57600080fd5b61496788614628565b965061497560208901614628565b955060408801359450606088013593506149928960808a0161492b565b92506101408801898111156149a657600080fd5b60c0890192506149b68a8261492b565b91505092959891949750929550565b600080600080600060a086880312156149dd57600080fd5b85359450602086013567ffffffffffffffff8111156149fb57600080fd5b614a0788828901614789565b94505060408601359250614a1d60608701614628565b91506080860135614a2d8161466f565b809150509295509295909350565b60008060008060808587031215614a5157600080fd5b614a5a85614628565b9350614a6860208601614628565b93969395505050506040820135916060013590565b8015158114613eaa57600080fd5b803561464081614a7d565b60008060008060008060008060008060006101608c8e031215614ab857600080fd5b614ac18c614691565b9a50614acf60208d01614691565b9950614add60408d01614691565b985060608c01359750614af260808d01614691565b9650614b0060a08d01614a8b565b955067ffffffffffffffff8060c08e01351115614b1c57600080fd5b614b2c8e60c08f01358f01614789565b9550614b3a60e08e01614628565b9450806101008e01351115614b4e57600080fd5b50614b608d6101008e01358e01614789565b9250614b6f6101208d01614691565b9150614b7e6101408d01614691565b90509295989b509295989b9093969950565b600060208284031215614ba257600080fd5b813561462181614a7d565b600060208284031215614bbf57600080fd5b813567ffffffffffffffff811115614bd657600080fd5b611dd884828501614789565b60006020808385031215614bf557600080fd5b823567ffffffffffffffff80821115614c0d57600080fd5b818501915085601f830112614c2157600080fd5b8135614c2f61484682614765565b81815260059190911b83018401908481019088831115614c4e57600080fd5b8585015b8381101561490357803585811115614c6a5760008081fd5b86016060818c03601f1901811315614c825760008081fd5b614c8a614711565b8983013588811115614c9c5760008081fd5b614caa8e8c83870101614789565b8252506040808401358b830152614cc2838501614628565b9082015285525050918601918601614c52565b60008060408385031215614ce857600080fd5b823567ffffffffffffffff811115614cff57600080fd5b614d0b85828601614789565b95602094909401359450505050565b60008060408385031215614d2d57600080fd5b82359150614d3d60208401614628565b90509250929050565b600181811c90821680614d5a57607f821691505b602082108103614d93577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614e1457614e14614dc8565b6001019392505050565b600060208284031215614e3057600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e6857614e68614dc8565b5060010190565b600067ffffffffffffffff83811690831681811015614e9057614e90614dc8565b039392505050565b600082821015614eaa57614eaa614dc8565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ee757614ee7614dc8565b500290565b60008251614efe8184602087016145b6565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614f4657614f46614f08565b500690565b61012081016040808784376000838201818152879190815b6002811015614f8357848483379084018281529284019290600101614f63565b5050828760c0870137610100850181815286935091505b6001811015614fb9578251825260209283019290910190600101614f9a565b50505095945050505050565b600060208284031215614fd757600080fd5b815161462181614a7d565b600067ffffffffffffffff80831681851680830382111561500557615005614dc8565b01949350505050565b601f8211156140d557600081815260208120601f850160051c810160208610156150355750805b601f850160051c820191505b8181101561505457828155600101615041565b505050505050565b815167ffffffffffffffff811115615076576150766146b9565b61508a816150848454614d46565b8461500e565b602080601f8311600181146150dd57600084156150a75750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555615054565b600085815260208120601f198616915b8281101561510c578886015182559484019460019091019084016150ed565b508582101561514857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008261516757615167614f08565b500490565b6000821982111561517f5761517f614dc8565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006151b960608301846145e2565b9594505050505056fea2646970667358221220e08ced41d4270e65705ee9e498f554a781dd1c769981d219d457cb4ce80198e364736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506151f8806100206000396000f3fe608060405234801561001057600080fd5b506004361061032b5760003560e01c80638da5cb5b116101b2578063c89e42df116100f9578063dbc16976116100a2578063eaeb077b1161007c578063eaeb077b14610810578063f2fde38b14610823578063f755276114610836578063fe16564f1461084557600080fd5b8063dbc16976146107b8578063e7a7ed02146107c0578063e8bf92ed146107f057600080fd5b8063d0ae98dd116100d3578063d0ae98dd14610765578063d8d1091b14610778578063d8f54db01461078b57600080fd5b8063c89e42df14610706578063cfa8ed4714610719578063d02103ca1461074557600080fd5b8063adc879e91161015b578063b6b0b09711610135578063b6b0b097146106bb578063c0cad302146106e0578063c3fd0f9c146106f357600080fd5b8063adc879e91461067e578063b02286c014610692578063b4d63f581461069b57600080fd5b80639b7967601161018c5780639b79676014610641578063a3c573eb14610654578063ab9fc5ef1461067457600080fd5b80638da5cb5b1461060857806396dc3d391461062657806399f5634e1461063957600080fd5b80635437988d116102765780637152facf1161021f5780637fcb3653116101f95780637fcb3653146105ce57806381df7d3f146105e25780638c4a0af7146105f557600080fd5b80637152facf146105a0578063748608de146105b357806379847057146105c657600080fd5b80636b8616ce116102505780636b8616ce146105655780636ff512cc14610585578063715018a61461059857600080fd5b80635437988d1461049e57806355b925e6146104b1578063574f649e146104c457600080fd5b806327eb6c0f116102d857806345605267116102b257806345605267146104405780635392c5e014610468578063542028d51461049657600080fd5b806327eb6c0f146103c85780633c1582671461040d578063423fa8561461042057600080fd5b80631a26da14116103095780631a26da14146103985780631c1083e2146103ad5780632072f6c5146103c057600080fd5b8063107bf28c1461033057806315064c961461034e57806319d8ac611461036b575b600080fd5b610338610858565b604051610345919061460e565b60405180910390f35b60655461035b9060ff1681565b6040519015158152602001610345565b60685461037f9067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610345565b6103ab6103a6366004614645565b6108e6565b005b6103ab6103bb36600461469c565b61090b565b6103ab610a17565b6070546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610345565b6103ab61041b3660046147f9565b610ac8565b60685461037f9068010000000000000000900467ffffffffffffffff1681565b60685461037f90700100000000000000000000000000000000900467ffffffffffffffff1681565b610488610476366004614910565b606b6020526000908152604090205481565b604051908152602001610345565b610338611458565b6103ab6104ac36600461469c565b611465565b6103ab6104bf366004614942565b6114b4565b6104886104d23660046149c5565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b610488610573366004614910565b60666020526000908152604090205481565b6103ab61059336600461469c565b611a7d565b6103ab611b97565b6103386105ae366004614a3b565b611ba9565b6103ab6105c1366004614942565b611de0565b610488612049565b60695461037f9067ffffffffffffffff1681565b6103ab6105f0366004614a96565b6120c3565b6103ab610603366004614b90565b61241c565b60335473ffffffffffffffffffffffffffffffffffffffff166103e8565b6103ab610634366004614910565b612536565b610488612579565b6103ab61064f366004614910565b6126aa565b6071546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b61037f62093a8081565b606e5461037f9067ffffffffffffffff1681565b61048861ea6081565b6104886106a9366004614910565b60676020526000908152604090205481565b6065546103e890610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6103ab6106ee366004614bad565b6126f9565b6103ab610701366004614942565b612711565b6103ab610714366004614bad565b612d5b565b6069546103e89068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b610488610773366004614a3b565b612e30565b6103ab610786366004614be2565b6130dc565b60695461035b907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b6103ab613781565b60685461037f907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b6103ab61081e366004614cd5565b613910565b6103ab61083136600461469c565b613e10565b61048867016345785d8a000081565b6103ab610853366004614d1a565b613ead565b606f805461086590614d46565b80601f016020809104026020016040519081016040528092919081815260200182805461089190614d46565b80156108de5780601f106108b3576101008083540402835291602001916108de565b820191906000526020600020905b8154815290600101906020018083116108c157829003601f168201915b505050505081565b6108ee613ed0565b67ffffffffffffffff909116600090815260676020526040902055565b60705473ffffffffffffffffffffffffffffffffffffffff16331461099d5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff1615610ab65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b610abe613ed0565b610ac6613f37565b565b60655460ff1615610b675760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610c005760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b805180610c9b5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015611249576000878281518110610d0157610d01614d99565b602002602001015190506000816060015167ffffffffffffffff161115610f1a5783610d2c81614df7565b945050600081600001518051906020012082602001518360600151604051602001610d8f93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610e5c5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610f145760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610994565b506110b4565b60208101511580610fc95750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610f839160040190815260200190565b6020604051808303816000875af1158015610fa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc69190614e1e565b15155b61103b5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610994565b80515161ea60116110b45760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610994565b8567ffffffffffffffff16816040015167ffffffffffffffff16101580156110ea575042816040015167ffffffffffffffff1611155b6111825760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061122b90614df7565b9550508060400151955050808061124190614e37565b915050610ce5565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156112ec5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610994565b60685460009061131a90700100000000000000000000000000000000900467ffffffffffffffff1684614e6f565b61132e9067ffffffffffffffff1687614e98565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061140b33306113e58467016345785d8a0000614eaf565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613fc1565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d805461086590614d46565b61146d613ed0565b606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60655460ff16156115535760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff90811690881611156115ff5760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a401610994565b60695467ffffffffffffffff908116908716116116aa5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b602052604090205461175c5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a401610994565b600061176a88888888611ba9565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161179f9190614eec565b602060405180830381855afa1580156117bc573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906117df9190614e1e565b6117e99190614f37565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916118539189918991899190600401614f4b565b602060405180830381865afa158015611870573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118949190614fc5565b6119065760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610994565b6069546119649033906119239067ffffffffffffffff168b614e6f565b67ffffffffffffffff16611935612579565b61193f9190614eaf565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16919061407f565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b158015611a1957600080fd5b505af1158015611a2d573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611b165760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610a0c565b611b9f613ed0565b610ac660006140da565b67ffffffffffffffff808516600081815260676020526040808220549387168252902054606092911580611bdc57508115155b611c745760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b80611d0d5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec01604051602081830303815290604052925050505b949350505050565b611de8613ed0565b60695467ffffffffffffffff9081169088161115611e945760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff90811690871611611f3f5760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610994565b67ffffffffffffffff80881660009081526067602052604080822054928916825290205481611fd65760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b806119645760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691612098917801000000000000000000000000000000000000000000000000909104166001614fe2565b6120a29190614e6f565b6120be9067ffffffffffffffff16670de0b6b3a7640000614eaf565b905090565b600054610100900460ff16158080156120e35750600054600160ff909116105b806120fd5750303b1580156120fd575060005460ff166001145b61216f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610994565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156121cd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d61230c878261505c565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f61234d858261505c565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560708054928516929091169190911790556123ab614151565b801561240e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146124b55760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a0c90831515815260200190565b61253e613ed0565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156125f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126149190614e1e565b60695460685491925060009167ffffffffffffffff918216916801000000000000000082048116916126799170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614e6f565b6126839190614fe2565b61268d9190614e6f565b67ffffffffffffffff1690506126a38183615158565b9250505090565b6126b2613ed0565b6068805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b612701613ed0565b606f61270d828261505c565b5050565b60655460ff16156127b05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8567ffffffffffffffff168767ffffffffffffffff161061285f5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a401610994565b60695467ffffffffffffffff90811690871611156129315760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c401610994565b67ffffffffffffffff87166000908152606b60205260409020546129e35760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a401610994565b67ffffffffffffffff86166000908152606b6020526040902054612a955760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a401610994565b6000612aa388888888611ba9565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051612ad89190614eec565b602060405180830381855afa158015612af5573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612b189190614e1e565b612b229190614f37565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91612b8c9189918991899190600401614f4b565b602060405180830381865afa158015612ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bcd9190614fc5565b612c3f5760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f46000000006064820152608401610994565b67ffffffffffffffff88166000908152606b6020526040902054869003612cf45760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a401610994565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a1612d50613f37565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612df45760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606d612e00828261505c565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a0c919061460e565b60695460009067ffffffffffffffff868116911614612edd5760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8467ffffffffffffffff168467ffffffffffffffff1611612f8c5760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a401610994565b60685467ffffffffffffffff68010000000000000000909104811690851611156130445760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b600061305286868686611ba9565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516130879190614eec565b602060405180830381855afa1580156130a4573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906130c79190614e1e565b6130d19190614f37565b979650505050505050565b60655460ff161561317b5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461323e5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b8051806132d95760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60685467ffffffffffffffff7801000000000000000000000000000000000000000000000000820481169161332491849170010000000000000000000000000000000090041661516c565b11156133985760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610994565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b848110156136b15760008682815181106133f8576133f8614d99565b60200260200101519050838061340d90614df7565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff881660009081526066909352912054909150811461352e5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610994565b613539600188614e98565b83036135f7574262093a8083604001516135539190614fe2565b67ffffffffffffffff1611156135f75760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610994565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209350858061369990614df7565b965050505080806136a990614e37565b9150506133dc565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166137f95760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b60705473ffffffffffffffffffffffffffffffffffffffff1633146138865760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c0000006064820152608401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156138f057600080fd5b505af1158015613904573d6000803e3d6000fd5b50505050610ac66141d7565b60655460ff16156139af5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114613a725760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b6000613a7c612049565b905081811115613af45760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610994565b61ea60835110613b6c5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610994565b606554613b9690610100900473ffffffffffffffffffffffffffffffffffffffff16333084613fc1565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613c06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2a9190614e1e565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613c6483614df7565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505083805190602001208142604051602001613cdd93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526066909352912055323303613dad57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613e0a565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613e0193929190615184565b60405180910390a25b50505050565b613e18613ed0565b73ffffffffffffffffffffffffffffffffffffffff8116613ea15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610994565b613eaa816140da565b50565b613eb5613ed0565b67ffffffffffffffff166000908152606b6020526040902055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ac65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613fa157600080fd5b505af1158015613fb5573d6000803e3d6000fd5b50505050610ac66142a2565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052613e0a9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152614397565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526140d59084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161401b565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166141ce5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610994565b610ac6336140da565b60655460ff1661424f5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff16156143415760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60006143f9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166144899092919063ffffffff16565b8051909150156140d557808060200190518101906144179190614fc5565b6140d55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610994565b6060611dd88484600085856000808673ffffffffffffffffffffffffffffffffffffffff1685876040516144bd9190614eec565b60006040518083038185875af1925050503d80600081146144fa576040519150601f19603f3d011682016040523d82523d6000602084013e6144ff565b606091505b50915091506130d187838387606083156145875782516000036145805773ffffffffffffffffffffffffffffffffffffffff85163b6145805760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610994565b5081611dd8565b611dd8838381511561459c5781518083602001fd5b8060405162461bcd60e51b8152600401610994919061460e565b60005b838110156145d15781810151838201526020016145b9565b83811115613e0a5750506000910152565b600081518084526145fa8160208601602086016145b6565b601f01601f19169290920160200192915050565b60208152600061462160208301846145e2565b9392505050565b803567ffffffffffffffff8116811461464057600080fd5b919050565b6000806040838503121561465857600080fd5b61466183614628565b946020939093013593505050565b73ffffffffffffffffffffffffffffffffffffffff81168114613eaa57600080fd5b80356146408161466f565b6000602082840312156146ae57600080fd5b81356146218161466f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171561470b5761470b6146b9565b60405290565b6040516060810167ffffffffffffffff8111828210171561470b5761470b6146b9565b604051601f8201601f1916810167ffffffffffffffff8111828210171561475d5761475d6146b9565b604052919050565b600067ffffffffffffffff82111561477f5761477f6146b9565b5060051b60200190565b600082601f83011261479a57600080fd5b813567ffffffffffffffff8111156147b4576147b46146b9565b6147c76020601f19601f84011601614734565b8181528460208386010111156147dc57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561480c57600080fd5b823567ffffffffffffffff8082111561482457600080fd5b818501915085601f83011261483857600080fd5b813561484b61484682614765565b614734565b81815260059190911b8301840190848101908883111561486a57600080fd5b8585015b83811015614903578035858111156148865760008081fd5b86016080818c03601f190181131561489e5760008081fd5b6148a66146e8565b89830135888111156148b85760008081fd5b6148c68e8c83870101614789565b8252506040808401358b83015260606148e0818601614628565b828401526148ef848601614628565b90830152508552505091860191860161486e565b5098975050505050505050565b60006020828403121561492257600080fd5b61462182614628565b806040810183101561493c57600080fd5b92915050565b6000806000806000806000610180888a03121561495e57600080fd5b61496788614628565b965061497560208901614628565b955060408801359450606088013593506149928960808a0161492b565b92506101408801898111156149a657600080fd5b60c0890192506149b68a8261492b565b91505092959891949750929550565b600080600080600060a086880312156149dd57600080fd5b85359450602086013567ffffffffffffffff8111156149fb57600080fd5b614a0788828901614789565b94505060408601359250614a1d60608701614628565b91506080860135614a2d8161466f565b809150509295509295909350565b60008060008060808587031215614a5157600080fd5b614a5a85614628565b9350614a6860208601614628565b93969395505050506040820135916060013590565b8015158114613eaa57600080fd5b803561464081614a7d565b60008060008060008060008060008060006101608c8e031215614ab857600080fd5b614ac18c614691565b9a50614acf60208d01614691565b9950614add60408d01614691565b985060608c01359750614af260808d01614691565b9650614b0060a08d01614a8b565b955067ffffffffffffffff8060c08e01351115614b1c57600080fd5b614b2c8e60c08f01358f01614789565b9550614b3a60e08e01614628565b9450806101008e01351115614b4e57600080fd5b50614b608d6101008e01358e01614789565b9250614b6f6101208d01614691565b9150614b7e6101408d01614691565b90509295989b509295989b9093969950565b600060208284031215614ba257600080fd5b813561462181614a7d565b600060208284031215614bbf57600080fd5b813567ffffffffffffffff811115614bd657600080fd5b611dd884828501614789565b60006020808385031215614bf557600080fd5b823567ffffffffffffffff80821115614c0d57600080fd5b818501915085601f830112614c2157600080fd5b8135614c2f61484682614765565b81815260059190911b83018401908481019088831115614c4e57600080fd5b8585015b8381101561490357803585811115614c6a5760008081fd5b86016060818c03601f1901811315614c825760008081fd5b614c8a614711565b8983013588811115614c9c5760008081fd5b614caa8e8c83870101614789565b8252506040808401358b830152614cc2838501614628565b9082015285525050918601918601614c52565b60008060408385031215614ce857600080fd5b823567ffffffffffffffff811115614cff57600080fd5b614d0b85828601614789565b95602094909401359450505050565b60008060408385031215614d2d57600080fd5b82359150614d3d60208401614628565b90509250929050565b600181811c90821680614d5a57607f821691505b602082108103614d93577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614e1457614e14614dc8565b6001019392505050565b600060208284031215614e3057600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e6857614e68614dc8565b5060010190565b600067ffffffffffffffff83811690831681811015614e9057614e90614dc8565b039392505050565b600082821015614eaa57614eaa614dc8565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ee757614ee7614dc8565b500290565b60008251614efe8184602087016145b6565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614f4657614f46614f08565b500690565b61012081016040808784376000838201818152879190815b6002811015614f8357848483379084018281529284019290600101614f63565b5050828760c0870137610100850181815286935091505b6001811015614fb9578251825260209283019290910190600101614f9a565b50505095945050505050565b600060208284031215614fd757600080fd5b815161462181614a7d565b600067ffffffffffffffff80831681851680830382111561500557615005614dc8565b01949350505050565b601f8211156140d557600081815260208120601f850160051c810160208610156150355750805b601f850160051c820191505b8181101561505457828155600101615041565b505050505050565b815167ffffffffffffffff811115615076576150766146b9565b61508a816150848454614d46565b8461500e565b602080601f8311600181146150dd57600084156150a75750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555615054565b600085815260208120601f198616915b8281101561510c578886015182559484019460019091019084016150ed565b508582101561514857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008261516757615167614f08565b500490565b6000821982111561517f5761517f614dc8565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006151b960608301846145e2565b9594505050505056fea2646970667358221220e47ec43ae2df60b03bfa2f67ac0b6ab9290b8e567855ca9b4612d3496ef4271664736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061032b5760003560e01c80638da5cb5b116101b2578063c89e42df116100f9578063dbc16976116100a2578063eaeb077b1161007c578063eaeb077b14610810578063f2fde38b14610823578063f755276114610836578063fe16564f1461084557600080fd5b8063dbc16976146107b8578063e7a7ed02146107c0578063e8bf92ed146107f057600080fd5b8063d0ae98dd116100d3578063d0ae98dd14610765578063d8d1091b14610778578063d8f54db01461078b57600080fd5b8063c89e42df14610706578063cfa8ed4714610719578063d02103ca1461074557600080fd5b8063adc879e91161015b578063b6b0b09711610135578063b6b0b097146106bb578063c0cad302146106e0578063c3fd0f9c146106f357600080fd5b8063adc879e91461067e578063b02286c014610692578063b4d63f581461069b57600080fd5b80639b7967601161018c5780639b79676014610641578063a3c573eb14610654578063ab9fc5ef1461067457600080fd5b80638da5cb5b1461060857806396dc3d391461062657806399f5634e1461063957600080fd5b80635437988d116102765780637152facf1161021f5780637fcb3653116101f95780637fcb3653146105ce57806381df7d3f146105e25780638c4a0af7146105f557600080fd5b80637152facf146105a0578063748608de146105b357806379847057146105c657600080fd5b80636b8616ce116102505780636b8616ce146105655780636ff512cc14610585578063715018a61461059857600080fd5b80635437988d1461049e57806355b925e6146104b1578063574f649e146104c457600080fd5b806327eb6c0f116102d857806345605267116102b257806345605267146104405780635392c5e014610468578063542028d51461049657600080fd5b806327eb6c0f146103c85780633c1582671461040d578063423fa8561461042057600080fd5b80631a26da14116103095780631a26da14146103985780631c1083e2146103ad5780632072f6c5146103c057600080fd5b8063107bf28c1461033057806315064c961461034e57806319d8ac611461036b575b600080fd5b610338610858565b604051610345919061460e565b60405180910390f35b60655461035b9060ff1681565b6040519015158152602001610345565b60685461037f9067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610345565b6103ab6103a6366004614645565b6108e6565b005b6103ab6103bb36600461469c565b61090b565b6103ab610a17565b6070546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610345565b6103ab61041b3660046147f9565b610ac8565b60685461037f9068010000000000000000900467ffffffffffffffff1681565b60685461037f90700100000000000000000000000000000000900467ffffffffffffffff1681565b610488610476366004614910565b606b6020526000908152604090205481565b604051908152602001610345565b610338611458565b6103ab6104ac36600461469c565b611465565b6103ab6104bf366004614942565b6114b4565b6104886104d23660046149c5565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b610488610573366004614910565b60666020526000908152604090205481565b6103ab61059336600461469c565b611a7d565b6103ab611b97565b6103386105ae366004614a3b565b611ba9565b6103ab6105c1366004614942565b611de0565b610488612049565b60695461037f9067ffffffffffffffff1681565b6103ab6105f0366004614a96565b6120c3565b6103ab610603366004614b90565b61241c565b60335473ffffffffffffffffffffffffffffffffffffffff166103e8565b6103ab610634366004614910565b612536565b610488612579565b6103ab61064f366004614910565b6126aa565b6071546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b61037f62093a8081565b606e5461037f9067ffffffffffffffff1681565b61048861ea6081565b6104886106a9366004614910565b60676020526000908152604090205481565b6065546103e890610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6103ab6106ee366004614bad565b6126f9565b6103ab610701366004614942565b612711565b6103ab610714366004614bad565b612d5b565b6069546103e89068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b610488610773366004614a3b565b612e30565b6103ab610786366004614be2565b6130dc565b60695461035b907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b6103ab613781565b60685461037f907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b6103ab61081e366004614cd5565b613910565b6103ab61083136600461469c565b613e10565b61048867016345785d8a000081565b6103ab610853366004614d1a565b613ead565b606f805461086590614d46565b80601f016020809104026020016040519081016040528092919081815260200182805461089190614d46565b80156108de5780601f106108b3576101008083540402835291602001916108de565b820191906000526020600020905b8154815290600101906020018083116108c157829003601f168201915b505050505081565b6108ee613ed0565b67ffffffffffffffff909116600090815260676020526040902055565b60705473ffffffffffffffffffffffffffffffffffffffff16331461099d5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff1615610ab65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b610abe613ed0565b610ac6613f37565b565b60655460ff1615610b675760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610c005760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b805180610c9b5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015611249576000878281518110610d0157610d01614d99565b602002602001015190506000816060015167ffffffffffffffff161115610f1a5783610d2c81614df7565b945050600081600001518051906020012082602001518360600151604051602001610d8f93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610e5c5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610f145760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610994565b506110b4565b60208101511580610fc95750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610f839160040190815260200190565b6020604051808303816000875af1158015610fa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc69190614e1e565b15155b61103b5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610994565b80515161ea60116110b45760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610994565b8567ffffffffffffffff16816040015167ffffffffffffffff16101580156110ea575042816040015167ffffffffffffffff1611155b6111825760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061122b90614df7565b9550508060400151955050808061124190614e37565b915050610ce5565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156112ec5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610994565b60685460009061131a90700100000000000000000000000000000000900467ffffffffffffffff1684614e6f565b61132e9067ffffffffffffffff1687614e98565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061140b33306113e58467016345785d8a0000614eaf565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613fc1565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d805461086590614d46565b61146d613ed0565b606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60655460ff16156115535760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff90811690881611156115ff5760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a401610994565b60695467ffffffffffffffff908116908716116116aa5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b602052604090205461175c5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a401610994565b600061176a88888888611ba9565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161179f9190614eec565b602060405180830381855afa1580156117bc573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906117df9190614e1e565b6117e99190614f37565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916118539189918991899190600401614f4b565b602060405180830381865afa158015611870573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118949190614fc5565b6119065760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610994565b6069546119649033906119239067ffffffffffffffff168b614e6f565b67ffffffffffffffff16611935612579565b61193f9190614eaf565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16919061407f565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b158015611a1957600080fd5b505af1158015611a2d573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611b165760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610a0c565b611b9f613ed0565b610ac660006140da565b67ffffffffffffffff808516600081815260676020526040808220549387168252902054606092911580611bdc57508115155b611c745760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b80611d0d5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec01604051602081830303815290604052925050505b949350505050565b611de8613ed0565b60695467ffffffffffffffff9081169088161115611e945760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff90811690871611611f3f5760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610994565b67ffffffffffffffff80881660009081526067602052604080822054928916825290205481611fd65760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b806119645760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691612098917801000000000000000000000000000000000000000000000000909104166001614fe2565b6120a29190614e6f565b6120be9067ffffffffffffffff16670de0b6b3a7640000614eaf565b905090565b600054610100900460ff16158080156120e35750600054600160ff909116105b806120fd5750303b1580156120fd575060005460ff166001145b61216f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610994565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156121cd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d61230c878261505c565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f61234d858261505c565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560708054928516929091169190911790556123ab614151565b801561240e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146124b55760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a0c90831515815260200190565b61253e613ed0565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156125f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126149190614e1e565b60695460685491925060009167ffffffffffffffff918216916801000000000000000082048116916126799170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614e6f565b6126839190614fe2565b61268d9190614e6f565b67ffffffffffffffff1690506126a38183615158565b9250505090565b6126b2613ed0565b6068805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b612701613ed0565b606f61270d828261505c565b5050565b60655460ff16156127b05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8567ffffffffffffffff168767ffffffffffffffff161061285f5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a401610994565b60695467ffffffffffffffff90811690871611156129315760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c401610994565b67ffffffffffffffff87166000908152606b60205260409020546129e35760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a401610994565b67ffffffffffffffff86166000908152606b6020526040902054612a955760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a401610994565b6000612aa388888888611ba9565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051612ad89190614eec565b602060405180830381855afa158015612af5573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612b189190614e1e565b612b229190614f37565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91612b8c9189918991899190600401614f4b565b602060405180830381865afa158015612ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bcd9190614fc5565b612c3f5760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f46000000006064820152608401610994565b67ffffffffffffffff88166000908152606b6020526040902054869003612cf45760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a401610994565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a1612d50613f37565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612df45760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606d612e00828261505c565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a0c919061460e565b60695460009067ffffffffffffffff868116911614612edd5760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8467ffffffffffffffff168467ffffffffffffffff1611612f8c5760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a401610994565b60685467ffffffffffffffff68010000000000000000909104811690851611156130445760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b600061305286868686611ba9565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516130879190614eec565b602060405180830381855afa1580156130a4573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906130c79190614e1e565b6130d19190614f37565b979650505050505050565b60655460ff161561317b5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461323e5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b8051806132d95760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60685467ffffffffffffffff7801000000000000000000000000000000000000000000000000820481169161332491849170010000000000000000000000000000000090041661516c565b11156133985760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610994565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b848110156136b15760008682815181106133f8576133f8614d99565b60200260200101519050838061340d90614df7565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff881660009081526066909352912054909150811461352e5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610994565b613539600188614e98565b83036135f7574262093a8083604001516135539190614fe2565b67ffffffffffffffff1611156135f75760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610994565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209350858061369990614df7565b965050505080806136a990614e37565b9150506133dc565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166137f95760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b60705473ffffffffffffffffffffffffffffffffffffffff1633146138865760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c0000006064820152608401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156138f057600080fd5b505af1158015613904573d6000803e3d6000fd5b50505050610ac66141d7565b60655460ff16156139af5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114613a725760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b6000613a7c612049565b905081811115613af45760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610994565b61ea60835110613b6c5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610994565b606554613b9690610100900473ffffffffffffffffffffffffffffffffffffffff16333084613fc1565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613c06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2a9190614e1e565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613c6483614df7565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505083805190602001208142604051602001613cdd93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526066909352912055323303613dad57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613e0a565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613e0193929190615184565b60405180910390a25b50505050565b613e18613ed0565b73ffffffffffffffffffffffffffffffffffffffff8116613ea15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610994565b613eaa816140da565b50565b613eb5613ed0565b67ffffffffffffffff166000908152606b6020526040902055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ac65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613fa157600080fd5b505af1158015613fb5573d6000803e3d6000fd5b50505050610ac66142a2565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052613e0a9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152614397565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526140d59084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161401b565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166141ce5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610994565b610ac6336140da565b60655460ff1661424f5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff16156143415760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60006143f9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166144899092919063ffffffff16565b8051909150156140d557808060200190518101906144179190614fc5565b6140d55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610994565b6060611dd88484600085856000808673ffffffffffffffffffffffffffffffffffffffff1685876040516144bd9190614eec565b60006040518083038185875af1925050503d80600081146144fa576040519150601f19603f3d011682016040523d82523d6000602084013e6144ff565b606091505b50915091506130d187838387606083156145875782516000036145805773ffffffffffffffffffffffffffffffffffffffff85163b6145805760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610994565b5081611dd8565b611dd8838381511561459c5781518083602001fd5b8060405162461bcd60e51b8152600401610994919061460e565b60005b838110156145d15781810151838201526020016145b9565b83811115613e0a5750506000910152565b600081518084526145fa8160208601602086016145b6565b601f01601f19169290920160200192915050565b60208152600061462160208301846145e2565b9392505050565b803567ffffffffffffffff8116811461464057600080fd5b919050565b6000806040838503121561465857600080fd5b61466183614628565b946020939093013593505050565b73ffffffffffffffffffffffffffffffffffffffff81168114613eaa57600080fd5b80356146408161466f565b6000602082840312156146ae57600080fd5b81356146218161466f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171561470b5761470b6146b9565b60405290565b6040516060810167ffffffffffffffff8111828210171561470b5761470b6146b9565b604051601f8201601f1916810167ffffffffffffffff8111828210171561475d5761475d6146b9565b604052919050565b600067ffffffffffffffff82111561477f5761477f6146b9565b5060051b60200190565b600082601f83011261479a57600080fd5b813567ffffffffffffffff8111156147b4576147b46146b9565b6147c76020601f19601f84011601614734565b8181528460208386010111156147dc57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561480c57600080fd5b823567ffffffffffffffff8082111561482457600080fd5b818501915085601f83011261483857600080fd5b813561484b61484682614765565b614734565b81815260059190911b8301840190848101908883111561486a57600080fd5b8585015b83811015614903578035858111156148865760008081fd5b86016080818c03601f190181131561489e5760008081fd5b6148a66146e8565b89830135888111156148b85760008081fd5b6148c68e8c83870101614789565b8252506040808401358b83015260606148e0818601614628565b828401526148ef848601614628565b90830152508552505091860191860161486e565b5098975050505050505050565b60006020828403121561492257600080fd5b61462182614628565b806040810183101561493c57600080fd5b92915050565b6000806000806000806000610180888a03121561495e57600080fd5b61496788614628565b965061497560208901614628565b955060408801359450606088013593506149928960808a0161492b565b92506101408801898111156149a657600080fd5b60c0890192506149b68a8261492b565b91505092959891949750929550565b600080600080600060a086880312156149dd57600080fd5b85359450602086013567ffffffffffffffff8111156149fb57600080fd5b614a0788828901614789565b94505060408601359250614a1d60608701614628565b91506080860135614a2d8161466f565b809150509295509295909350565b60008060008060808587031215614a5157600080fd5b614a5a85614628565b9350614a6860208601614628565b93969395505050506040820135916060013590565b8015158114613eaa57600080fd5b803561464081614a7d565b60008060008060008060008060008060006101608c8e031215614ab857600080fd5b614ac18c614691565b9a50614acf60208d01614691565b9950614add60408d01614691565b985060608c01359750614af260808d01614691565b9650614b0060a08d01614a8b565b955067ffffffffffffffff8060c08e01351115614b1c57600080fd5b614b2c8e60c08f01358f01614789565b9550614b3a60e08e01614628565b9450806101008e01351115614b4e57600080fd5b50614b608d6101008e01358e01614789565b9250614b6f6101208d01614691565b9150614b7e6101408d01614691565b90509295989b509295989b9093969950565b600060208284031215614ba257600080fd5b813561462181614a7d565b600060208284031215614bbf57600080fd5b813567ffffffffffffffff811115614bd657600080fd5b611dd884828501614789565b60006020808385031215614bf557600080fd5b823567ffffffffffffffff80821115614c0d57600080fd5b818501915085601f830112614c2157600080fd5b8135614c2f61484682614765565b81815260059190911b83018401908481019088831115614c4e57600080fd5b8585015b8381101561490357803585811115614c6a5760008081fd5b86016060818c03601f1901811315614c825760008081fd5b614c8a614711565b8983013588811115614c9c5760008081fd5b614caa8e8c83870101614789565b8252506040808401358b830152614cc2838501614628565b9082015285525050918601918601614c52565b60008060408385031215614ce857600080fd5b823567ffffffffffffffff811115614cff57600080fd5b614d0b85828601614789565b95602094909401359450505050565b60008060408385031215614d2d57600080fd5b82359150614d3d60208401614628565b90509250929050565b600181811c90821680614d5a57607f821691505b602082108103614d93577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614e1457614e14614dc8565b6001019392505050565b600060208284031215614e3057600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e6857614e68614dc8565b5060010190565b600067ffffffffffffffff83811690831681811015614e9057614e90614dc8565b039392505050565b600082821015614eaa57614eaa614dc8565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ee757614ee7614dc8565b500290565b60008251614efe8184602087016145b6565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614f4657614f46614f08565b500690565b61012081016040808784376000838201818152879190815b6002811015614f8357848483379084018281529284019290600101614f63565b5050828760c0870137610100850181815286935091505b6001811015614fb9578251825260209283019290910190600101614f9a565b50505095945050505050565b600060208284031215614fd757600080fd5b815161462181614a7d565b600067ffffffffffffffff80831681851680830382111561500557615005614dc8565b01949350505050565b601f8211156140d557600081815260208120601f850160051c810160208610156150355750805b601f850160051c820191505b8181101561505457828155600101615041565b505050505050565b815167ffffffffffffffff811115615076576150766146b9565b61508a816150848454614d46565b8461500e565b602080601f8311600181146150dd57600084156150a75750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555615054565b600085815260208120601f198616915b8281101561510c578886015182559484019460019091019084016150ed565b508582101561514857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008261516757615167614f08565b500490565b6000821982111561517f5761517f614dc8565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006151b960608301846145e2565b9594505050505056fea2646970667358221220e47ec43ae2df60b03bfa2f67ac0b6ab9290b8e567855ca9b4612d3496ef4271664736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/Bridge.sol b/contracts/Bridge.sol index 4a06ddd37..73c8f5689 100644 --- a/contracts/Bridge.sol +++ b/contracts/Bridge.sol @@ -119,7 +119,7 @@ contract Bridge is ); /** - * @dev Emitted when a a new wrapped token is created + * @dev Emitted when a new wrapped token is created */ event NewWrappedToken( uint32 originNetwork, @@ -128,7 +128,7 @@ contract Bridge is ); /** - * @dev Emitted when a a new wrapped token is created + * @dev Emitted when newClaimTimeout is updated */ event SetClaimTimeout(uint256 newClaimTimeout); @@ -294,7 +294,7 @@ contract Bridge is uint256 amount, bytes memory metadata ) public ifNotEmergencyState { - // Verify leaf exist and it does not ahve been claimed + // Verify leaf exist and it does not have been claimed _verifyLeaf( smtProof, index, @@ -407,7 +407,7 @@ contract Bridge is uint256 amount, bytes memory metadata ) public ifNotEmergencyState { - // Verify leaf exist and it does not ahve been claimed + // Verify leaf exist and it does not have been claimed _verifyLeaf( smtProof, index, @@ -511,14 +511,29 @@ contract Bridge is } /** - * @notice Function to deactivate the emergency state - " Only can be called by the proof of efficiency + * @notice Function to update the claim timeout + * @param newClaimTimeout new claim timeout value + * Only can be called by the owner */ function setClaimTimeout(uint256 newClaimTimeout) external onlyOwner { claimTimeout = newClaimTimeout; emit SetClaimTimeout(newClaimTimeout); } + /** + * @notice Verify leaf and checks that it has not been claimed + * @param smtProof Smt proof + * @param index Index of the leaf + * @param mainnetExitRoot Mainnet exit root + * @param rollupExitRoot Rollup exit root + * @param originNetwork Origin network + * @param originAddress Origin address + * @param destinationNetwork Network destination + * @param destinationAddress Address destination + * @param amount Amount of tokens + * @param metadata Abi encoded metadata if any, empty otherwise + * @param leafType Leaf type --> [0] transfer Ether / ERC20 tokens, [1] message + */ function _verifyLeaf( bytes32[] memory smtProof, uint32 index, diff --git a/contracts/ProofOfEfficiency.sol b/contracts/ProofOfEfficiency.sol index c9839eb44..93624c92e 100644 --- a/contracts/ProofOfEfficiency.sol +++ b/contracts/ProofOfEfficiency.sol @@ -375,7 +375,7 @@ contract ProofOfEfficiency is } /** - * @notice Allows an aggregator to verify a multiple batches + * @notice Allows an aggregator to verify multiple batches * @param initNumBatch Batch which the aggregator starts the verification * @param finalNewBatch Last batch aggregator intends to verify * @param newLocalExitRoot New local exit root once the batch is processed diff --git a/contracts/lib/EmergencyManager.sol b/contracts/lib/EmergencyManager.sol index 7ccbba063..e2e1406dc 100644 --- a/contracts/lib/EmergencyManager.sol +++ b/contracts/lib/EmergencyManager.sol @@ -6,7 +6,7 @@ pragma solidity 0.8.15; * @dev Contract helper responsible to manage the emergency state */ contract EmergencyManager { - // Indicates wheather the emergency state is active or not + // Indicates whether the emergency state is active or not bool public isEmergencyState; /** diff --git a/docs/Bridge.md b/docs/Bridge.md index 3f637b6c8..6ce08839e 100644 --- a/docs/Bridge.md +++ b/docs/Bridge.md @@ -177,21 +177,51 @@ Function to deactivate the emergency state ### setClaimTimeout ```solidity function setClaimTimeout( + uint256 newClaimTimeout ) external ``` -Function to deactivate the emergency state - " Only can be called by the proof of efficiency +Function to update the claim timeout +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`newClaimTimeout` | uint256 | new claim timeout value +Only can be called by the owner ### _verifyLeaf ```solidity function _verifyLeaf( + bytes32[] smtProof, + uint32 index, + bytes32 mainnetExitRoot, + bytes32 rollupExitRoot, + uint32 originNetwork, + address originAddress, + uint32 destinationNetwork, + address destinationAddress, + uint256 amount, + bytes metadata, + uint8 leafType ) internal ``` +Verify leaf and checks that it has not been claimed - +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`smtProof` | bytes32[] | Smt proof +|`index` | uint32 | Index of the leaf +|`mainnetExitRoot` | bytes32 | Mainnet exit root +|`rollupExitRoot` | bytes32 | Rollup exit root +|`originNetwork` | uint32 | Origin network +|`originAddress` | address | Origin address +|`destinationNetwork` | uint32 | Network destination +|`destinationAddress` | address | Address destination +|`amount` | uint256 | Amount of tokens +|`metadata` | bytes | Abi encoded metadata if any, empty otherwise +|`leafType` | uint8 | Leaf type --> [0] transfer Ether / ERC20 tokens, [1] message ### _permit ```solidity @@ -233,7 +263,7 @@ Emitted when a claim is done from another network ) ``` -Emitted when a a new wrapped token is created +Emitted when a new wrapped token is created ### SetClaimTimeout ```solidity @@ -241,5 +271,5 @@ Emitted when a a new wrapped token is created ) ``` -Emitted when a a new wrapped token is created +Emitted when newClaimTimeout is updated diff --git a/docs/ProofOfEfficiency.md b/docs/ProofOfEfficiency.md index 5c1bc8415..94af6d4ad 100644 --- a/docs/ProofOfEfficiency.md +++ b/docs/ProofOfEfficiency.md @@ -66,7 +66,7 @@ Allows a sequencer to send multiple batches uint256[2] proofC ) public ``` -Allows an aggregator to verify a multiple batches +Allows an aggregator to verify multiple batches #### Parameters: From c70978d81076b80f5c7a8b476bc2e76571b24d39 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Wed, 23 Nov 2022 12:35:18 +0100 Subject: [PATCH 24/71] rebase fixes --- compiled-contracts/Bridge.json | 4 ++-- compiled-contracts/BridgeMock.json | 4 ++-- compiled-contracts/ProofOfEfficiency.json | 4 ++-- compiled-contracts/ProofOfEfficiencyMock.json | 4 ++-- contracts/Bridge.sol | 2 +- contracts/ProofOfEfficiency.sol | 2 +- docs/ProofOfEfficiency.md | 2 +- test/contracts/bridge.test.js | 8 ++++---- 8 files changed, 15 insertions(+), 15 deletions(-) diff --git a/compiled-contracts/Bridge.json b/compiled-contracts/Bridge.json index 34b76d590..8e1df7d9f 100644 --- a/compiled-contracts/Bridge.json +++ b/compiled-contracts/Bridge.json @@ -776,8 +776,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50615829806100206000396000f3fe608060405260043610620001db5760003560e01c806381b1c17411620000ff578063d96a15f71162000095578063e7a5b4ea116200006c578063e7a5b4ea1462000658578063ed6be5c9146200067d578063f2fde38b1462000694578063ff634ed714620006b957600080fd5b8063d96a15f714620005f5578063dbc16976146200060c578063e7375881146200062457600080fd5b8063a08e8a0811620000d6578063a08e8a08146200054f578063aaa13cc21462000579578063bab161bf146200059e578063d02103ca14620005d357600080fd5b806381b1c17414620004d35780638da5cb5b146200050d5780638f611519146200052d57600080fd5b80633ae05047116200017557806346385549116200014c57806346385549146200044c578063655595401462000471578063715018a614620004965780637b6323c114620004ae57600080fd5b80633ae05047146200032e5780633da8168214620003465780633e197043146200036b57600080fd5b80632072f6c511620001b65780632072f6c5146200025157806322e95f2c14620002695780632dfdf0b514620002a7578063318aee3d14620002bf57600080fd5b80630871e97114620001e05780630e1da6c314620001f957806315064c961462000224575b600080fd5b620001f7620001f136600462003146565b620006d0565b005b3480156200020657600080fd5b5062000211608d5481565b6040519081526020015b60405180910390f35b3480156200023157600080fd5b50602254620002409060ff1681565b60405190151581526020016200021b565b3480156200025e57600080fd5b50620001f762000c7a565b3480156200027657600080fd5b506200028e62000288366004620031d3565b62000d2e565b6040516001600160a01b0390911681526020016200021b565b348015620002b457600080fd5b506200021160215481565b348015620002cc57600080fd5b5062000309620002de3660046200320f565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200021b565b3480156200033b57600080fd5b506200021162000db1565b3480156200035357600080fd5b50620002406200036536600462003317565b62000ea4565b3480156200037857600080fd5b50620002116200038a36600462003395565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200045957600080fd5b50620001f76200046b366004620034a6565b62000fa6565b3480156200047e57600080fd5b50620001f7620004903660046200358d565b6200122c565b348015620004a357600080fd5b50620001f762001412565b348015620004bb57600080fd5b50620001f7620004cd366004620034a6565b62001428565b348015620004e057600080fd5b506200028e620004f2366004620035e3565b6089602052600090815260409020546001600160a01b031681565b3480156200051a57600080fd5b506055546001600160a01b03166200028e565b3480156200053a57600080fd5b50608c546200028e906001600160a01b031681565b3480156200055c57600080fd5b5062000566600081565b60405160ff90911681526020016200021b565b3480156200058657600080fd5b506200028e62000598366004620035fd565b620019ea565b348015620005ab57600080fd5b50608754620005bd9063ffffffff1681565b60405163ffffffff90911681526020016200021b565b348015620005e057600080fd5b50608b546200028e906001600160a01b031681565b620001f762000606366004620036b1565b62001b56565b3480156200061957600080fd5b50620001f762001e0a565b3480156200063157600080fd5b506200024062000643366004620035e3565b60886020526000908152604090205460ff1681565b3480156200066557600080fd5b50620001f762000677366004620035e3565b62001ebc565b3480156200068a57600080fd5b50620005bd600081565b348015620006a157600080fd5b50620001f7620006b33660046200320f565b62001f01565b348015620006c657600080fd5b5062000566600181565b60225460ff1615620007755760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60875463ffffffff90811690861603620007f85760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b60008060606001600160a01b0389166200088d57853414620008835760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200076c565b6000915062000b17565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000974576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af11580156200093b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000961919062003728565b5060208101518151909450925062000b15565b84156200098957620009898a88888862001f97565b620009a06001600160a01b038b1633308a620025bc565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620009f7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a219190810190620037c3565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000a60573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a8a9190810190620037c3565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ac9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aef9190620037fc565b60405160200162000b03939291906200384a565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162000b5998979695949392919062003887565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000c019062002675565b608b546001600160a01b03166333d6247d62000c1c62000db1565b6040518263ffffffff1660e01b815260040162000c3b91815260200190565b600060405180830381600087803b15801562000c5657600080fd5b505af115801562000c6b573d6000803e3d6000fd5b50505050505050505050505050565b608c546001600160a01b0316331462000d225760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c620027d9565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b602154600090819081805b602081101562000e9b578260011660010362000e1c576001816020811062000de85762000de8620038f3565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000e49565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000e5660028462003951565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000e92906200398d565b91505062000dbc565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000f97578160011660010362000f215786818151811062000edf5762000edf620038f3565b60200260200101518360405160200162000f03929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000f73565b8287828151811062000f375762000f37620038f3565b602002602001015160405160200162000f5a929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000f8060028362003951565b91508062000f8e816200398d565b91505062000eb4565b5050821490505b949350505050565b60225460ff1615620010475760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6200105d8a8a8a8a8a8a8a8a8a8a6001620028b2565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b038516908490620010a09089908b908790602401620039c8565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001105919062003a01565b60006040518083038185875af1925050503d806000811462001144576040519150601f19603f3d011682016040523d82523d6000602084013e62001149565b606091505b5050905080620011c15760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff16158080156200124d5750600054600160ff909116105b80620012695750303b15801562001269575060005460ff166001145b620012dd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200076c565b6000805460ff1916600117905580156200131e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d829055620013a762002c3f565b80156200140b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6200141c62002cc9565b62000d2c600062002d25565b60225460ff1615620014c95760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b620014df8a8a8a8a8a8a8a8a8a8a6000620028b2565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620015fe57604080516000808252602082019092526001600160a01b0385169084906040516200153a919062003a01565b60006040518083038185875af1925050503d806000811462001579576040519150601f19603f3d011682016040523d82523d6000602084013e6200157e565b606091505b5050905080620015f75760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c45440000000000000000000000000000000000000000000000000060648201526084016200076c565b5062001980565b60875463ffffffff908116908716036200162e57620016286001600160a01b038616848462002d8f565b62001980565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620018ec57600080600085806020019051810190620016ce919062003a1f565b925092509250600085848484604051620016e890620030af565b620016f6939291906200384a565b8190604051809103906000f590508015801562001717573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001785573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017ab919062003728565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620018da9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200197d565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001955573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200197b919062003728565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162001a6d90620030af565b601f1982820381018352601f90910116604081905262001a9a908d908d908d908d908d9060200162003acb565b60408051601f198184030181529082905262001aba929160200162003b0c565b6040516020818303038152906040528051906020012060405160200162001b3094939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff161562001bf75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b60875463ffffffff9081169084160362001c7a5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b9262001cc79260019263ffffffff9092169133918991899134918a919062003887565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d850152346051850152607180850192909252805180850390920182526091909301909252815191012062001d979062002675565b608b546001600160a01b03166333d6247d62001db262000db1565b6040518263ffffffff1660e01b815260040162001dd191815260200190565b600060405180830381600087803b15801562001dec57600080fd5b505af115801562001e01573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001eb25760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c62002dda565b62001ec662002cc9565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001f0b62002cc9565b6001600160a01b03811662001f895760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016200076c565b62001f948162002d25565b50565b600062001fda83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002e8992505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620022dc5760008080808080806200203d896004818d62003b3f565b8101906200204c919062003b6b565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620020e35760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0386163014620021635760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b8a8514620021da5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002288919062003a01565b6000604051808303816000865af19150503d8060008114620022c7576040519150601f19603f3d011682016040523d82523d6000602084013e620022cc565b606091505b505050505050505050506200140b565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c00000000000000000000000000000000000000000000000000000000146200236f5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200076c565b600080808080808080620023878a6004818e62003b3f565b81019062002396919062003bc6565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200242f5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0387163014620024af5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002566919062003a01565b6000604051808303816000865af19150503d8060008114620025a5576040519150601f19603f3d011682016040523d82523d6000602084013e620025aa565b606091505b50505050505050505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526200266f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002e90565b50505050565b806001620026866020600262003d8b565b62002692919062003d99565b602154106200270a5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200076c565b6001602160008282546200271f919062003db3565b909155505060215460005b6020811015620027c957816001166001036200275f578260018260208110620027575762002757620038f3565b015550505050565b60018160208110620027755762002775620038f3565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620027b2919062003951565b915080620027c0816200398d565b9150506200272a565b50620027d462003dce565b505050565b60225460ff16156200287a5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b63ffffffff8a1660009081526088602052604090205460ff16156200293f5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af1158015620029cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620029f2919062003dfd565b9050801580159062002a115750608d5462002a0e824262003d99565b10155b62002a855760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c49440000000000000000000000000000000000000060648201526084016200076c565b60875463ffffffff87811691161462002b075760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000000060648201526084016200076c565b60875460009063ffffffff1662002b2057508862002b23565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d82015260518101899052607180820193909352815180820390930183526091019052805191012062002bf1908e8e63ffffffff168462000ea4565b62000c6b5760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c494460448201526064016200076c565b600054610100900460ff1662002cbe5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200076c565b62000d2c3362002d25565b6055546001600160a01b0316331462000d2c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200076c565b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620027d49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016200260a565b60225460ff1662002e545760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016200076c565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002ee7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662002f7c9092919063ffffffff16565b805190915015620027d4578080602001905181019062002f08919062003728565b620027d45760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200076c565b606062000f9e848460008585600080866001600160a01b0316858760405162002fa6919062003a01565b60006040518083038185875af1925050503d806000811462002fe5576040519150601f19603f3d011682016040523d82523d6000602084013e62002fea565b606091505b509150915062002ffd8783838762003008565b979650505050505050565b606083156200307c57825160000362003074576001600160a01b0385163b620030745760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200076c565b508162000f9e565b62000f9e8383815115620030935781518083602001fd5b8060405162461bcd60e51b81526004016200076c919062003e17565b6119c78062003e2d83390190565b6001600160a01b038116811462001f9457600080fd5b8035620030e081620030bd565b919050565b803563ffffffff81168114620030e057600080fd5b60008083601f8401126200310d57600080fd5b50813567ffffffffffffffff8111156200312657600080fd5b6020830191508360208285010111156200313f57600080fd5b9250929050565b60008060008060008060a087890312156200316057600080fd5b86356200316d81620030bd565b95506200317d60208801620030e5565b945060408701356200318f81620030bd565b935060608701359250608087013567ffffffffffffffff811115620031b357600080fd5b620031c189828a01620030fa565b979a9699509497509295939492505050565b60008060408385031215620031e757600080fd5b620031f283620030e5565b915060208301356200320481620030bd565b809150509250929050565b6000602082840312156200322257600080fd5b81356200322f81620030bd565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171562003291576200329162003236565b604052919050565b600082601f830112620032ab57600080fd5b8135602067ffffffffffffffff821115620032ca57620032ca62003236565b8160051b620032db82820162003265565b9283528481018201928281019087851115620032f657600080fd5b83870192505b8483101562002ffd57823582529183019190830190620032fc565b600080600080608085870312156200332e57600080fd5b84359350602085013567ffffffffffffffff808211156200334e57600080fd5b6200335c8883890162003299565b94506040870135915080821682146200337457600080fd5b509396929550929360600135925050565b60ff8116811462001f9457600080fd5b600080600080600080600060e0888a031215620033b157600080fd5b8735620033be8162003385565b9650620033ce60208901620030e5565b95506040880135620033e081620030bd565b9450620033f060608901620030e5565b935060808801356200340281620030bd565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200343c576200343c62003236565b50601f01601f191660200190565b600082601f8301126200345c57600080fd5b8135620034736200346d826200341f565b62003265565b8181528460208386010111156200348957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620034c757600080fd5b8a3567ffffffffffffffff80821115620034e057600080fd5b620034ee8e838f0162003299565b9b50620034fe60208e01620030e5565b9a5060408d0135995060608d013598506200351c60808e01620030e5565b97506200352c60a08e01620030d3565b96506200353c60c08e01620030e5565b95506200354c60e08e01620030d3565b94506101008d013593506101208d01359150808211156200356c57600080fd5b506200357b8d828e016200344a565b9150509295989b9194979a5092959850565b60008060008060808587031215620035a457600080fd5b620035af85620030e5565b93506020850135620035c181620030bd565b92506040850135620035d381620030bd565b9396929550929360600135925050565b600060208284031215620035f657600080fd5b5035919050565b600080600080600080600060a0888a0312156200361957600080fd5b6200362488620030e5565b965060208801356200363681620030bd565b9550604088013567ffffffffffffffff808211156200365457600080fd5b620036628b838c01620030fa565b909750955060608a01359150808211156200367c57600080fd5b506200368b8a828b01620030fa565b9094509250506080880135620036a18162003385565b8091505092959891949750929550565b600080600060608486031215620036c757600080fd5b620036d284620030e5565b92506020840135620036e481620030bd565b9150604084013567ffffffffffffffff8111156200370157600080fd5b6200370f868287016200344a565b9150509250925092565b801515811462001f9457600080fd5b6000602082840312156200373b57600080fd5b81516200322f8162003719565b60005b83811015620037655781810151838201526020016200374b565b838111156200266f5750506000910152565b600082601f8301126200378957600080fd5b81516200379a6200346d826200341f565b818152846020838601011115620037b057600080fd5b62000f9e82602083016020870162003748565b600060208284031215620037d657600080fd5b815167ffffffffffffffff811115620037ee57600080fd5b62000f9e8482850162003777565b6000602082840312156200380f57600080fd5b81516200322f8162003385565b600081518084526200383681602086016020860162003748565b601f01601f19169290920160200192915050565b6060815260006200385f60608301866200381c565b82810360208401526200387381866200381c565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620038da828501876200381c565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003988577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620039c157620039c162003922565b5060010190565b6001600160a01b038416815263ffffffff83166020820152606060408201526000620039f860608301846200381c565b95945050505050565b6000825162003a1581846020870162003748565b9190910192915050565b60008060006060848603121562003a3557600080fd5b835167ffffffffffffffff8082111562003a4e57600080fd5b62003a5c8783880162003777565b9450602086015191508082111562003a7357600080fd5b5062003a828682870162003777565b925050604084015162003a958162003385565b809150509250925092565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003ae160608301878962003aa0565b828103602084015262003af681868862003aa0565b91505060ff831660408301529695505050505050565b6000835162003b2081846020880162003748565b83519083019062003b3681836020880162003748565b01949350505050565b6000808585111562003b5057600080fd5b8386111562003b5e57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003b8757600080fd5b873562003b9481620030bd565b9650602088013562003ba681620030bd565b955060408801359450606088013593506080880135620034028162003385565b600080600080600080600080610100898b03121562003be457600080fd5b883562003bf181620030bd565b9750602089013562003c0381620030bd565b96506040890135955060608901359450608089013562003c238162003719565b935060a089013562003c358162003385565b979a969950949793969295929450505060c08201359160e0013590565b600181815b8085111562003cb157817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003c955762003c9562003922565b8085161562003ca357918102915b93841c939080029062003c57565b509250929050565b60008262003cca5750600162000dab565b8162003cd95750600062000dab565b816001811462003cf2576002811462003cfd5762003d1d565b600191505062000dab565b60ff84111562003d115762003d1162003922565b50506001821b62000dab565b5060208310610133831016604e8410600b841016171562003d42575081810a62000dab565b62003d4e838362003c52565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d835762003d8362003922565b029392505050565b60006200322f838362003cb9565b60008282101562003dae5762003dae62003922565b500390565b6000821982111562003dc95762003dc962003922565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60006020828403121562003e1057600080fd5b5051919050565b6020815260006200322f60208301846200381c56fe60c06040523480156200001157600080fd5b50604051620019c7380380620019c78339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161150d620004ba600039600061053001526000818161036f01526104fa015261150d6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b604051610191919061123b565b60405180910390f35b6101ad6101a83660046112d7565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad610204366004611301565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad6102763660046112d7565b610552565b6101ad6102893660046112d7565b61059e565b6101c161029c36600461133d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d236600461133d565b60066020526000908152604090205481565b610184610645565b6101ad6102fa3660046112d7565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad6103523660046112d7565b6106ed565b6101ad6103653660046112d7565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f36600461135f565b6107b2565b005b6101c16103b43660046113d2565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043790611405565b80601f016020809104026020016040519081016040528092919081815260200182805461046390611405565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f12565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611487565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c8383610fda565b50600192915050565b60606004805461043790611405565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c83836110b3565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866108818361149f565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f3d610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff821661103d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b806002600082825461104f9190611487565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff821661113c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156111d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610c27565b600060208083528351808285015260005b818110156112685785810183015185820160400152820161124c565b8181111561127a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112d257600080fd5b919050565b600080604083850312156112ea57600080fd5b6112f3836112ae565b946020939093013593505050565b60008060006060848603121561131657600080fd5b61131f846112ae565b925061132d602085016112ae565b9150604084013590509250925092565b60006020828403121561134f57600080fd5b611358826112ae565b9392505050565b600080600080600080600060e0888a03121561137a57600080fd5b611383886112ae565b9650611391602089016112ae565b95506040880135945060608801359350608088013560ff811681146113b557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156113e557600080fd5b6113ee836112ae565b91506113fc602084016112ae565b90509250929050565b600181811c9082168061141957607f821691505b602082108103611452577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561149a5761149a611458565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036114d0576114d0611458565b506001019056fea264697066735822122094134962e5fa2f6357086a2590b7f3a754d340b16e5312664d82a308bc23a0df64736f6c634300080f0033a26469706673582212205fe92e73a9d814c47728c0c663c06d86a6ecd1c16944312d7e8053db89a30c6b64736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001db5760003560e01c806381b1c17411620000ff578063d96a15f71162000095578063e7a5b4ea116200006c578063e7a5b4ea1462000658578063ed6be5c9146200067d578063f2fde38b1462000694578063ff634ed714620006b957600080fd5b8063d96a15f714620005f5578063dbc16976146200060c578063e7375881146200062457600080fd5b8063a08e8a0811620000d6578063a08e8a08146200054f578063aaa13cc21462000579578063bab161bf146200059e578063d02103ca14620005d357600080fd5b806381b1c17414620004d35780638da5cb5b146200050d5780638f611519146200052d57600080fd5b80633ae05047116200017557806346385549116200014c57806346385549146200044c578063655595401462000471578063715018a614620004965780637b6323c114620004ae57600080fd5b80633ae05047146200032e5780633da8168214620003465780633e197043146200036b57600080fd5b80632072f6c511620001b65780632072f6c5146200025157806322e95f2c14620002695780632dfdf0b514620002a7578063318aee3d14620002bf57600080fd5b80630871e97114620001e05780630e1da6c314620001f957806315064c961462000224575b600080fd5b620001f7620001f136600462003146565b620006d0565b005b3480156200020657600080fd5b5062000211608d5481565b6040519081526020015b60405180910390f35b3480156200023157600080fd5b50602254620002409060ff1681565b60405190151581526020016200021b565b3480156200025e57600080fd5b50620001f762000c7a565b3480156200027657600080fd5b506200028e62000288366004620031d3565b62000d2e565b6040516001600160a01b0390911681526020016200021b565b348015620002b457600080fd5b506200021160215481565b348015620002cc57600080fd5b5062000309620002de3660046200320f565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200021b565b3480156200033b57600080fd5b506200021162000db1565b3480156200035357600080fd5b50620002406200036536600462003317565b62000ea4565b3480156200037857600080fd5b50620002116200038a36600462003395565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200045957600080fd5b50620001f76200046b366004620034a6565b62000fa6565b3480156200047e57600080fd5b50620001f7620004903660046200358d565b6200122c565b348015620004a357600080fd5b50620001f762001412565b348015620004bb57600080fd5b50620001f7620004cd366004620034a6565b62001428565b348015620004e057600080fd5b506200028e620004f2366004620035e3565b6089602052600090815260409020546001600160a01b031681565b3480156200051a57600080fd5b506055546001600160a01b03166200028e565b3480156200053a57600080fd5b50608c546200028e906001600160a01b031681565b3480156200055c57600080fd5b5062000566600081565b60405160ff90911681526020016200021b565b3480156200058657600080fd5b506200028e62000598366004620035fd565b620019ea565b348015620005ab57600080fd5b50608754620005bd9063ffffffff1681565b60405163ffffffff90911681526020016200021b565b348015620005e057600080fd5b50608b546200028e906001600160a01b031681565b620001f762000606366004620036b1565b62001b56565b3480156200061957600080fd5b50620001f762001e0a565b3480156200063157600080fd5b506200024062000643366004620035e3565b60886020526000908152604090205460ff1681565b3480156200066557600080fd5b50620001f762000677366004620035e3565b62001ebc565b3480156200068a57600080fd5b50620005bd600081565b348015620006a157600080fd5b50620001f7620006b33660046200320f565b62001f01565b348015620006c657600080fd5b5062000566600181565b60225460ff1615620007755760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60875463ffffffff90811690861603620007f85760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b60008060606001600160a01b0389166200088d57853414620008835760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200076c565b6000915062000b17565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000974576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af11580156200093b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000961919062003728565b5060208101518151909450925062000b15565b84156200098957620009898a88888862001f97565b620009a06001600160a01b038b1633308a620025bc565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620009f7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a219190810190620037c3565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000a60573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a8a9190810190620037c3565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ac9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aef9190620037fc565b60405160200162000b03939291906200384a565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162000b5998979695949392919062003887565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000c019062002675565b608b546001600160a01b03166333d6247d62000c1c62000db1565b6040518263ffffffff1660e01b815260040162000c3b91815260200190565b600060405180830381600087803b15801562000c5657600080fd5b505af115801562000c6b573d6000803e3d6000fd5b50505050505050505050505050565b608c546001600160a01b0316331462000d225760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c620027d9565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b602154600090819081805b602081101562000e9b578260011660010362000e1c576001816020811062000de85762000de8620038f3565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000e49565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000e5660028462003951565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000e92906200398d565b91505062000dbc565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000f97578160011660010362000f215786818151811062000edf5762000edf620038f3565b60200260200101518360405160200162000f03929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000f73565b8287828151811062000f375762000f37620038f3565b602002602001015160405160200162000f5a929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000f8060028362003951565b91508062000f8e816200398d565b91505062000eb4565b5050821490505b949350505050565b60225460ff1615620010475760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6200105d8a8a8a8a8a8a8a8a8a8a6001620028b2565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b038516908490620010a09089908b908790602401620039c8565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001105919062003a01565b60006040518083038185875af1925050503d806000811462001144576040519150601f19603f3d011682016040523d82523d6000602084013e62001149565b606091505b5050905080620011c15760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff16158080156200124d5750600054600160ff909116105b80620012695750303b15801562001269575060005460ff166001145b620012dd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200076c565b6000805460ff1916600117905580156200131e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d829055620013a762002c3f565b80156200140b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6200141c62002cc9565b62000d2c600062002d25565b60225460ff1615620014c95760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b620014df8a8a8a8a8a8a8a8a8a8a6000620028b2565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620015fe57604080516000808252602082019092526001600160a01b0385169084906040516200153a919062003a01565b60006040518083038185875af1925050503d806000811462001579576040519150601f19603f3d011682016040523d82523d6000602084013e6200157e565b606091505b5050905080620015f75760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c45440000000000000000000000000000000000000000000000000060648201526084016200076c565b5062001980565b60875463ffffffff908116908716036200162e57620016286001600160a01b038616848462002d8f565b62001980565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620018ec57600080600085806020019051810190620016ce919062003a1f565b925092509250600085848484604051620016e890620030af565b620016f6939291906200384a565b8190604051809103906000f590508015801562001717573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001785573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017ab919062003728565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620018da9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200197d565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001955573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200197b919062003728565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162001a6d90620030af565b601f1982820381018352601f90910116604081905262001a9a908d908d908d908d908d9060200162003acb565b60408051601f198184030181529082905262001aba929160200162003b0c565b6040516020818303038152906040528051906020012060405160200162001b3094939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff161562001bf75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b60875463ffffffff9081169084160362001c7a5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b9262001cc79260019263ffffffff9092169133918991899134918a919062003887565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d850152346051850152607180850192909252805180850390920182526091909301909252815191012062001d979062002675565b608b546001600160a01b03166333d6247d62001db262000db1565b6040518263ffffffff1660e01b815260040162001dd191815260200190565b600060405180830381600087803b15801562001dec57600080fd5b505af115801562001e01573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001eb25760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c62002dda565b62001ec662002cc9565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001f0b62002cc9565b6001600160a01b03811662001f895760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016200076c565b62001f948162002d25565b50565b600062001fda83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002e8992505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620022dc5760008080808080806200203d896004818d62003b3f565b8101906200204c919062003b6b565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620020e35760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0386163014620021635760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b8a8514620021da5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002288919062003a01565b6000604051808303816000865af19150503d8060008114620022c7576040519150601f19603f3d011682016040523d82523d6000602084013e620022cc565b606091505b505050505050505050506200140b565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c00000000000000000000000000000000000000000000000000000000146200236f5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200076c565b600080808080808080620023878a6004818e62003b3f565b81019062002396919062003bc6565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200242f5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0387163014620024af5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002566919062003a01565b6000604051808303816000865af19150503d8060008114620025a5576040519150601f19603f3d011682016040523d82523d6000602084013e620025aa565b606091505b50505050505050505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526200266f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002e90565b50505050565b806001620026866020600262003d8b565b62002692919062003d99565b602154106200270a5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200076c565b6001602160008282546200271f919062003db3565b909155505060215460005b6020811015620027c957816001166001036200275f578260018260208110620027575762002757620038f3565b015550505050565b60018160208110620027755762002775620038f3565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620027b2919062003951565b915080620027c0816200398d565b9150506200272a565b50620027d462003dce565b505050565b60225460ff16156200287a5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b63ffffffff8a1660009081526088602052604090205460ff16156200293f5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af1158015620029cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620029f2919062003dfd565b9050801580159062002a115750608d5462002a0e824262003d99565b10155b62002a855760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c49440000000000000000000000000000000000000060648201526084016200076c565b60875463ffffffff87811691161462002b075760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000000060648201526084016200076c565b60875460009063ffffffff1662002b2057508862002b23565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d82015260518101899052607180820193909352815180820390930183526091019052805191012062002bf1908e8e63ffffffff168462000ea4565b62000c6b5760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c494460448201526064016200076c565b600054610100900460ff1662002cbe5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200076c565b62000d2c3362002d25565b6055546001600160a01b0316331462000d2c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200076c565b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620027d49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016200260a565b60225460ff1662002e545760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016200076c565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002ee7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662002f7c9092919063ffffffff16565b805190915015620027d4578080602001905181019062002f08919062003728565b620027d45760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200076c565b606062000f9e848460008585600080866001600160a01b0316858760405162002fa6919062003a01565b60006040518083038185875af1925050503d806000811462002fe5576040519150601f19603f3d011682016040523d82523d6000602084013e62002fea565b606091505b509150915062002ffd8783838762003008565b979650505050505050565b606083156200307c57825160000362003074576001600160a01b0385163b620030745760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200076c565b508162000f9e565b62000f9e8383815115620030935781518083602001fd5b8060405162461bcd60e51b81526004016200076c919062003e17565b6119c78062003e2d83390190565b6001600160a01b038116811462001f9457600080fd5b8035620030e081620030bd565b919050565b803563ffffffff81168114620030e057600080fd5b60008083601f8401126200310d57600080fd5b50813567ffffffffffffffff8111156200312657600080fd5b6020830191508360208285010111156200313f57600080fd5b9250929050565b60008060008060008060a087890312156200316057600080fd5b86356200316d81620030bd565b95506200317d60208801620030e5565b945060408701356200318f81620030bd565b935060608701359250608087013567ffffffffffffffff811115620031b357600080fd5b620031c189828a01620030fa565b979a9699509497509295939492505050565b60008060408385031215620031e757600080fd5b620031f283620030e5565b915060208301356200320481620030bd565b809150509250929050565b6000602082840312156200322257600080fd5b81356200322f81620030bd565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171562003291576200329162003236565b604052919050565b600082601f830112620032ab57600080fd5b8135602067ffffffffffffffff821115620032ca57620032ca62003236565b8160051b620032db82820162003265565b9283528481018201928281019087851115620032f657600080fd5b83870192505b8483101562002ffd57823582529183019190830190620032fc565b600080600080608085870312156200332e57600080fd5b84359350602085013567ffffffffffffffff808211156200334e57600080fd5b6200335c8883890162003299565b94506040870135915080821682146200337457600080fd5b509396929550929360600135925050565b60ff8116811462001f9457600080fd5b600080600080600080600060e0888a031215620033b157600080fd5b8735620033be8162003385565b9650620033ce60208901620030e5565b95506040880135620033e081620030bd565b9450620033f060608901620030e5565b935060808801356200340281620030bd565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200343c576200343c62003236565b50601f01601f191660200190565b600082601f8301126200345c57600080fd5b8135620034736200346d826200341f565b62003265565b8181528460208386010111156200348957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620034c757600080fd5b8a3567ffffffffffffffff80821115620034e057600080fd5b620034ee8e838f0162003299565b9b50620034fe60208e01620030e5565b9a5060408d0135995060608d013598506200351c60808e01620030e5565b97506200352c60a08e01620030d3565b96506200353c60c08e01620030e5565b95506200354c60e08e01620030d3565b94506101008d013593506101208d01359150808211156200356c57600080fd5b506200357b8d828e016200344a565b9150509295989b9194979a5092959850565b60008060008060808587031215620035a457600080fd5b620035af85620030e5565b93506020850135620035c181620030bd565b92506040850135620035d381620030bd565b9396929550929360600135925050565b600060208284031215620035f657600080fd5b5035919050565b600080600080600080600060a0888a0312156200361957600080fd5b6200362488620030e5565b965060208801356200363681620030bd565b9550604088013567ffffffffffffffff808211156200365457600080fd5b620036628b838c01620030fa565b909750955060608a01359150808211156200367c57600080fd5b506200368b8a828b01620030fa565b9094509250506080880135620036a18162003385565b8091505092959891949750929550565b600080600060608486031215620036c757600080fd5b620036d284620030e5565b92506020840135620036e481620030bd565b9150604084013567ffffffffffffffff8111156200370157600080fd5b6200370f868287016200344a565b9150509250925092565b801515811462001f9457600080fd5b6000602082840312156200373b57600080fd5b81516200322f8162003719565b60005b83811015620037655781810151838201526020016200374b565b838111156200266f5750506000910152565b600082601f8301126200378957600080fd5b81516200379a6200346d826200341f565b818152846020838601011115620037b057600080fd5b62000f9e82602083016020870162003748565b600060208284031215620037d657600080fd5b815167ffffffffffffffff811115620037ee57600080fd5b62000f9e8482850162003777565b6000602082840312156200380f57600080fd5b81516200322f8162003385565b600081518084526200383681602086016020860162003748565b601f01601f19169290920160200192915050565b6060815260006200385f60608301866200381c565b82810360208401526200387381866200381c565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620038da828501876200381c565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003988577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620039c157620039c162003922565b5060010190565b6001600160a01b038416815263ffffffff83166020820152606060408201526000620039f860608301846200381c565b95945050505050565b6000825162003a1581846020870162003748565b9190910192915050565b60008060006060848603121562003a3557600080fd5b835167ffffffffffffffff8082111562003a4e57600080fd5b62003a5c8783880162003777565b9450602086015191508082111562003a7357600080fd5b5062003a828682870162003777565b925050604084015162003a958162003385565b809150509250925092565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003ae160608301878962003aa0565b828103602084015262003af681868862003aa0565b91505060ff831660408301529695505050505050565b6000835162003b2081846020880162003748565b83519083019062003b3681836020880162003748565b01949350505050565b6000808585111562003b5057600080fd5b8386111562003b5e57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003b8757600080fd5b873562003b9481620030bd565b9650602088013562003ba681620030bd565b955060408801359450606088013593506080880135620034028162003385565b600080600080600080600080610100898b03121562003be457600080fd5b883562003bf181620030bd565b9750602089013562003c0381620030bd565b96506040890135955060608901359450608089013562003c238162003719565b935060a089013562003c358162003385565b979a969950949793969295929450505060c08201359160e0013590565b600181815b8085111562003cb157817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003c955762003c9562003922565b8085161562003ca357918102915b93841c939080029062003c57565b509250929050565b60008262003cca5750600162000dab565b8162003cd95750600062000dab565b816001811462003cf2576002811462003cfd5762003d1d565b600191505062000dab565b60ff84111562003d115762003d1162003922565b50506001821b62000dab565b5060208310610133831016604e8410600b841016171562003d42575081810a62000dab565b62003d4e838362003c52565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d835762003d8362003922565b029392505050565b60006200322f838362003cb9565b60008282101562003dae5762003dae62003922565b500390565b6000821982111562003dc95762003dc962003922565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60006020828403121562003e1057600080fd5b5051919050565b6020815260006200322f60208301846200381c56fe60c06040523480156200001157600080fd5b50604051620019c7380380620019c78339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161150d620004ba600039600061053001526000818161036f01526104fa015261150d6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b604051610191919061123b565b60405180910390f35b6101ad6101a83660046112d7565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad610204366004611301565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad6102763660046112d7565b610552565b6101ad6102893660046112d7565b61059e565b6101c161029c36600461133d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d236600461133d565b60066020526000908152604090205481565b610184610645565b6101ad6102fa3660046112d7565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad6103523660046112d7565b6106ed565b6101ad6103653660046112d7565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f36600461135f565b6107b2565b005b6101c16103b43660046113d2565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043790611405565b80601f016020809104026020016040519081016040528092919081815260200182805461046390611405565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f12565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611487565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c8383610fda565b50600192915050565b60606004805461043790611405565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c83836110b3565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866108818361149f565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f3d610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff821661103d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b806002600082825461104f9190611487565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff821661113c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156111d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610c27565b600060208083528351808285015260005b818110156112685785810183015185820160400152820161124c565b8181111561127a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112d257600080fd5b919050565b600080604083850312156112ea57600080fd5b6112f3836112ae565b946020939093013593505050565b60008060006060848603121561131657600080fd5b61131f846112ae565b925061132d602085016112ae565b9150604084013590509250925092565b60006020828403121561134f57600080fd5b611358826112ae565b9392505050565b600080600080600080600060e0888a03121561137a57600080fd5b611383886112ae565b9650611391602089016112ae565b95506040880135945060608801359350608088013560ff811681146113b557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156113e557600080fd5b6113ee836112ae565b91506113fc602084016112ae565b90509250929050565b600181811c9082168061141957607f821691505b602082108103611452577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561149a5761149a611458565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036114d0576114d0611458565b506001019056fea264697066735822122094134962e5fa2f6357086a2590b7f3a754d340b16e5312664d82a308bc23a0df64736f6c634300080f0033a26469706673582212205fe92e73a9d814c47728c0c663c06d86a6ecd1c16944312d7e8053db89a30c6b64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5061584f806100206000396000f3fe608060405260043610620001db5760003560e01c806381b1c17411620000ff578063d96a15f71162000095578063e7a5b4ea116200006c578063e7a5b4ea1462000658578063ed6be5c9146200067d578063f2fde38b1462000694578063ff634ed714620006b957600080fd5b8063d96a15f714620005f5578063dbc16976146200060c578063e7375881146200062457600080fd5b8063a08e8a0811620000d6578063a08e8a08146200054f578063aaa13cc21462000579578063bab161bf146200059e578063d02103ca14620005d357600080fd5b806381b1c17414620004d35780638da5cb5b146200050d5780638f611519146200052d57600080fd5b80633ae05047116200017557806346385549116200014c57806346385549146200044c578063655595401462000471578063715018a614620004965780637b6323c114620004ae57600080fd5b80633ae05047146200032e5780633da8168214620003465780633e197043146200036b57600080fd5b80632072f6c511620001b65780632072f6c5146200025157806322e95f2c14620002695780632dfdf0b514620002a7578063318aee3d14620002bf57600080fd5b80630871e97114620001e05780630e1da6c314620001f957806315064c961462000224575b600080fd5b620001f7620001f13660046200316c565b620006d0565b005b3480156200020657600080fd5b5062000211608d5481565b6040519081526020015b60405180910390f35b3480156200023157600080fd5b50602254620002409060ff1681565b60405190151581526020016200021b565b3480156200025e57600080fd5b50620001f762000c7a565b3480156200027657600080fd5b506200028e62000288366004620031f9565b62000d2e565b6040516001600160a01b0390911681526020016200021b565b348015620002b457600080fd5b506200021160215481565b348015620002cc57600080fd5b5062000309620002de36600462003235565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200021b565b3480156200033b57600080fd5b506200021162000db1565b3480156200035357600080fd5b5062000240620003653660046200333d565b62000ea4565b3480156200037857600080fd5b50620002116200038a366004620033bb565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200045957600080fd5b50620001f76200046b366004620034cc565b62000fa6565b3480156200047e57600080fd5b50620001f762000490366004620035b3565b6200122c565b348015620004a357600080fd5b50620001f762001412565b348015620004bb57600080fd5b50620001f7620004cd366004620034cc565b62001428565b348015620004e057600080fd5b506200028e620004f236600462003609565b6089602052600090815260409020546001600160a01b031681565b3480156200051a57600080fd5b506055546001600160a01b03166200028e565b3480156200053a57600080fd5b50608c546200028e906001600160a01b031681565b3480156200055c57600080fd5b5062000566600081565b60405160ff90911681526020016200021b565b3480156200058657600080fd5b506200028e6200059836600462003623565b620019ea565b348015620005ab57600080fd5b50608754620005bd9063ffffffff1681565b60405163ffffffff90911681526020016200021b565b348015620005e057600080fd5b50608b546200028e906001600160a01b031681565b620001f762000606366004620036d7565b62001b56565b3480156200061957600080fd5b50620001f762001e0a565b3480156200063157600080fd5b50620002406200064336600462003609565b60886020526000908152604090205460ff1681565b3480156200066557600080fd5b50620001f76200067736600462003609565b62001ebc565b3480156200068a57600080fd5b50620005bd600081565b348015620006a157600080fd5b50620001f7620006b336600462003235565b62001f01565b348015620006c657600080fd5b5062000566600181565b60225460ff1615620007755760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60875463ffffffff90811690861603620007f85760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b60008060606001600160a01b0389166200088d57853414620008835760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200076c565b6000915062000b17565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000974576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af11580156200093b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200096191906200374e565b5060208101518151909450925062000b15565b84156200098957620009898a88888862001f97565b620009a06001600160a01b038b1633308a620025bc565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620009f7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a219190810190620037e9565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000a60573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a8a9190810190620037e9565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ac9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aef919062003822565b60405160200162000b039392919062003870565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162000b59989796959493929190620038ad565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000c019062002675565b608b546001600160a01b03166333d6247d62000c1c62000db1565b6040518263ffffffff1660e01b815260040162000c3b91815260200190565b600060405180830381600087803b15801562000c5657600080fd5b505af115801562000c6b573d6000803e3d6000fd5b50505050505050505050505050565b608c546001600160a01b0316331462000d225760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c620027d9565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b602154600090819081805b602081101562000e9b578260011660010362000e1c576001816020811062000de85762000de862003919565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000e49565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000e5660028462003977565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000e9290620039b3565b91505062000dbc565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000f97578160011660010362000f215786818151811062000edf5762000edf62003919565b60200260200101518360405160200162000f03929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000f73565b8287828151811062000f375762000f3762003919565b602002602001015160405160200162000f5a929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000f8060028362003977565b91508062000f8e81620039b3565b91505062000eb4565b5050821490505b949350505050565b60225460ff1615620010475760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6200105d8a8a8a8a8a8a8a8a8a8a6001620028b2565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b038516908490620010a09089908b908790602401620039ee565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001105919062003a27565b60006040518083038185875af1925050503d806000811462001144576040519150601f19603f3d011682016040523d82523d6000602084013e62001149565b606091505b5050905080620011c15760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff16158080156200124d5750600054600160ff909116105b80620012695750303b15801562001269575060005460ff166001145b620012dd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200076c565b6000805460ff1916600117905580156200131e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d829055620013a762002c65565b80156200140b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6200141c62002cef565b62000d2c600062002d4b565b60225460ff1615620014c95760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b620014df8a8a8a8a8a8a8a8a8a8a6000620028b2565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620015fe57604080516000808252602082019092526001600160a01b0385169084906040516200153a919062003a27565b60006040518083038185875af1925050503d806000811462001579576040519150601f19603f3d011682016040523d82523d6000602084013e6200157e565b606091505b5050905080620015f75760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c45440000000000000000000000000000000000000000000000000060648201526084016200076c565b5062001980565b60875463ffffffff908116908716036200162e57620016286001600160a01b038616848462002db5565b62001980565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620018ec57600080600085806020019051810190620016ce919062003a45565b925092509250600085848484604051620016e890620030d5565b620016f69392919062003870565b8190604051809103906000f590508015801562001717573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001785573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017ab91906200374e565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620018da9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200197d565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001955573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200197b91906200374e565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162001a6d90620030d5565b601f1982820381018352601f90910116604081905262001a9a908d908d908d908d908d9060200162003af1565b60408051601f198184030181529082905262001aba929160200162003b32565b6040516020818303038152906040528051906020012060405160200162001b3094939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff161562001bf75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b60875463ffffffff9081169084160362001c7a5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b9262001cc79260019263ffffffff9092169133918991899134918a9190620038ad565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d850152346051850152607180850192909252805180850390920182526091909301909252815191012062001d979062002675565b608b546001600160a01b03166333d6247d62001db262000db1565b6040518263ffffffff1660e01b815260040162001dd191815260200190565b600060405180830381600087803b15801562001dec57600080fd5b505af115801562001e01573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001eb25760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c62002e00565b62001ec662002cef565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001f0b62002cef565b6001600160a01b03811662001f895760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016200076c565b62001f948162002d4b565b50565b600062001fda83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002eaf92505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620022dc5760008080808080806200203d896004818d62003b65565b8101906200204c919062003b91565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620020e35760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0386163014620021635760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b8a8514620021da5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002288919062003a27565b6000604051808303816000865af19150503d8060008114620022c7576040519150601f19603f3d011682016040523d82523d6000602084013e620022cc565b606091505b505050505050505050506200140b565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c00000000000000000000000000000000000000000000000000000000146200236f5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200076c565b600080808080808080620023878a6004818e62003b65565b81019062002396919062003bec565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200242f5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0387163014620024af5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002566919062003a27565b6000604051808303816000865af19150503d8060008114620025a5576040519150601f19603f3d011682016040523d82523d6000602084013e620025aa565b606091505b50505050505050505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526200266f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002eb6565b50505050565b806001620026866020600262003db1565b62002692919062003dbf565b602154106200270a5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200076c565b6001602160008282546200271f919062003dd9565b909155505060215460005b6020811015620027c957816001166001036200275f57826001826020811062002757576200275762003919565b015550505050565b6001816020811062002775576200277562003919565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620027b2919062003977565b915080620027c081620039b3565b9150506200272a565b50620027d462003df4565b505050565b60225460ff16156200287a5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b63ffffffff8a1660009081526088602052604090205460ff16156200293f5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af1158015620029cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620029f2919062003e23565b9050801580159062002a115750608d5462002a0e824262003dbf565b10155b62002aab5760405162461bcd60e51b815260206004820152604260248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c49445f4f525f4e4f545f5945545f434c41494d414260648201527f4c45000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b60875463ffffffff87811691161462002b2d5760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000000060648201526084016200076c565b60875460009063ffffffff1662002b4657508862002b49565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d82015260518101899052607180820193909352815180820390930183526091019052805191012062002c17908e8e63ffffffff168462000ea4565b62000c6b5760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c494460448201526064016200076c565b600054610100900460ff1662002ce45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200076c565b62000d2c3362002d4b565b6055546001600160a01b0316331462000d2c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200076c565b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620027d49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016200260a565b60225460ff1662002e7a5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016200076c565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002f0d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662002fa29092919063ffffffff16565b805190915015620027d4578080602001905181019062002f2e91906200374e565b620027d45760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200076c565b606062000f9e848460008585600080866001600160a01b0316858760405162002fcc919062003a27565b60006040518083038185875af1925050503d80600081146200300b576040519150601f19603f3d011682016040523d82523d6000602084013e62003010565b606091505b509150915062003023878383876200302e565b979650505050505050565b60608315620030a25782516000036200309a576001600160a01b0385163b6200309a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200076c565b508162000f9e565b62000f9e8383815115620030b95781518083602001fd5b8060405162461bcd60e51b81526004016200076c919062003e3d565b6119c78062003e5383390190565b6001600160a01b038116811462001f9457600080fd5b80356200310681620030e3565b919050565b803563ffffffff811681146200310657600080fd5b60008083601f8401126200313357600080fd5b50813567ffffffffffffffff8111156200314c57600080fd5b6020830191508360208285010111156200316557600080fd5b9250929050565b60008060008060008060a087890312156200318657600080fd5b86356200319381620030e3565b9550620031a3602088016200310b565b94506040870135620031b581620030e3565b935060608701359250608087013567ffffffffffffffff811115620031d957600080fd5b620031e789828a0162003120565b979a9699509497509295939492505050565b600080604083850312156200320d57600080fd5b62003218836200310b565b915060208301356200322a81620030e3565b809150509250929050565b6000602082840312156200324857600080fd5b81356200325581620030e3565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620032b757620032b76200325c565b604052919050565b600082601f830112620032d157600080fd5b8135602067ffffffffffffffff821115620032f057620032f06200325c565b8160051b620033018282016200328b565b92835284810182019282810190878511156200331c57600080fd5b83870192505b84831015620030235782358252918301919083019062003322565b600080600080608085870312156200335457600080fd5b84359350602085013567ffffffffffffffff808211156200337457600080fd5b6200338288838901620032bf565b94506040870135915080821682146200339a57600080fd5b509396929550929360600135925050565b60ff8116811462001f9457600080fd5b600080600080600080600060e0888a031215620033d757600080fd5b8735620033e481620033ab565b9650620033f4602089016200310b565b955060408801356200340681620030e3565b945062003416606089016200310b565b935060808801356200342881620030e3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200346257620034626200325c565b50601f01601f191660200190565b600082601f8301126200348257600080fd5b813562003499620034938262003445565b6200328b565b818152846020838601011115620034af57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620034ed57600080fd5b8a3567ffffffffffffffff808211156200350657600080fd5b620035148e838f01620032bf565b9b506200352460208e016200310b565b9a5060408d0135995060608d013598506200354260808e016200310b565b97506200355260a08e01620030f9565b96506200356260c08e016200310b565b95506200357260e08e01620030f9565b94506101008d013593506101208d01359150808211156200359257600080fd5b50620035a18d828e0162003470565b9150509295989b9194979a5092959850565b60008060008060808587031215620035ca57600080fd5b620035d5856200310b565b93506020850135620035e781620030e3565b92506040850135620035f981620030e3565b9396929550929360600135925050565b6000602082840312156200361c57600080fd5b5035919050565b600080600080600080600060a0888a0312156200363f57600080fd5b6200364a886200310b565b965060208801356200365c81620030e3565b9550604088013567ffffffffffffffff808211156200367a57600080fd5b620036888b838c0162003120565b909750955060608a0135915080821115620036a257600080fd5b50620036b18a828b0162003120565b9094509250506080880135620036c781620033ab565b8091505092959891949750929550565b600080600060608486031215620036ed57600080fd5b620036f8846200310b565b925060208401356200370a81620030e3565b9150604084013567ffffffffffffffff8111156200372757600080fd5b620037358682870162003470565b9150509250925092565b801515811462001f9457600080fd5b6000602082840312156200376157600080fd5b815162003255816200373f565b60005b838110156200378b57818101518382015260200162003771565b838111156200266f5750506000910152565b600082601f830112620037af57600080fd5b8151620037c0620034938262003445565b818152846020838601011115620037d657600080fd5b62000f9e8260208301602087016200376e565b600060208284031215620037fc57600080fd5b815167ffffffffffffffff8111156200381457600080fd5b62000f9e848285016200379d565b6000602082840312156200383557600080fd5b81516200325581620033ab565b600081518084526200385c8160208601602086016200376e565b601f01601f19169290920160200192915050565b60608152600062003885606083018662003842565b828103602084015262003899818662003842565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620039008285018762003842565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082620039ae577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620039e757620039e762003948565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003a1e606083018462003842565b95945050505050565b6000825162003a3b8184602087016200376e565b9190910192915050565b60008060006060848603121562003a5b57600080fd5b835167ffffffffffffffff8082111562003a7457600080fd5b62003a82878388016200379d565b9450602086015191508082111562003a9957600080fd5b5062003aa8868287016200379d565b925050604084015162003abb81620033ab565b809150509250925092565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003b0760608301878962003ac6565b828103602084015262003b1c81868862003ac6565b91505060ff831660408301529695505050505050565b6000835162003b468184602088016200376e565b83519083019062003b5c8183602088016200376e565b01949350505050565b6000808585111562003b7657600080fd5b8386111562003b8457600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003bad57600080fd5b873562003bba81620030e3565b9650602088013562003bcc81620030e3565b9550604088013594506060880135935060808801356200342881620033ab565b600080600080600080600080610100898b03121562003c0a57600080fd5b883562003c1781620030e3565b9750602089013562003c2981620030e3565b96506040890135955060608901359450608089013562003c49816200373f565b935060a089013562003c5b81620033ab565b979a969950949793969295929450505060c08201359160e0013590565b600181815b8085111562003cd757817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003cbb5762003cbb62003948565b8085161562003cc957918102915b93841c939080029062003c7d565b509250929050565b60008262003cf05750600162000dab565b8162003cff5750600062000dab565b816001811462003d18576002811462003d235762003d43565b600191505062000dab565b60ff84111562003d375762003d3762003948565b50506001821b62000dab565b5060208310610133831016604e8410600b841016171562003d68575081810a62000dab565b62003d74838362003c78565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003da95762003da962003948565b029392505050565b600062003255838362003cdf565b60008282101562003dd45762003dd462003948565b500390565b6000821982111562003def5762003def62003948565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60006020828403121562003e3657600080fd5b5051919050565b6020815260006200325560208301846200384256fe60c06040523480156200001157600080fd5b50604051620019c7380380620019c78339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161150d620004ba600039600061053001526000818161036f01526104fa015261150d6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b604051610191919061123b565b60405180910390f35b6101ad6101a83660046112d7565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad610204366004611301565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad6102763660046112d7565b610552565b6101ad6102893660046112d7565b61059e565b6101c161029c36600461133d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d236600461133d565b60066020526000908152604090205481565b610184610645565b6101ad6102fa3660046112d7565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad6103523660046112d7565b6106ed565b6101ad6103653660046112d7565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f36600461135f565b6107b2565b005b6101c16103b43660046113d2565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043790611405565b80601f016020809104026020016040519081016040528092919081815260200182805461046390611405565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f12565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611487565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c8383610fda565b50600192915050565b60606004805461043790611405565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c83836110b3565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866108818361149f565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f3d610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff821661103d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b806002600082825461104f9190611487565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff821661113c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156111d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610c27565b600060208083528351808285015260005b818110156112685785810183015185820160400152820161124c565b8181111561127a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112d257600080fd5b919050565b600080604083850312156112ea57600080fd5b6112f3836112ae565b946020939093013593505050565b60008060006060848603121561131657600080fd5b61131f846112ae565b925061132d602085016112ae565b9150604084013590509250925092565b60006020828403121561134f57600080fd5b611358826112ae565b9392505050565b600080600080600080600060e0888a03121561137a57600080fd5b611383886112ae565b9650611391602089016112ae565b95506040880135945060608801359350608088013560ff811681146113b557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156113e557600080fd5b6113ee836112ae565b91506113fc602084016112ae565b90509250929050565b600181811c9082168061141957607f821691505b602082108103611452577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561149a5761149a611458565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036114d0576114d0611458565b506001019056fea264697066735822122094134962e5fa2f6357086a2590b7f3a754d340b16e5312664d82a308bc23a0df64736f6c634300080f0033a26469706673582212207d802e4c153f08d52b883999d6ed4e590e1894e2db82359c2f8cde0298f066c464736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001db5760003560e01c806381b1c17411620000ff578063d96a15f71162000095578063e7a5b4ea116200006c578063e7a5b4ea1462000658578063ed6be5c9146200067d578063f2fde38b1462000694578063ff634ed714620006b957600080fd5b8063d96a15f714620005f5578063dbc16976146200060c578063e7375881146200062457600080fd5b8063a08e8a0811620000d6578063a08e8a08146200054f578063aaa13cc21462000579578063bab161bf146200059e578063d02103ca14620005d357600080fd5b806381b1c17414620004d35780638da5cb5b146200050d5780638f611519146200052d57600080fd5b80633ae05047116200017557806346385549116200014c57806346385549146200044c578063655595401462000471578063715018a614620004965780637b6323c114620004ae57600080fd5b80633ae05047146200032e5780633da8168214620003465780633e197043146200036b57600080fd5b80632072f6c511620001b65780632072f6c5146200025157806322e95f2c14620002695780632dfdf0b514620002a7578063318aee3d14620002bf57600080fd5b80630871e97114620001e05780630e1da6c314620001f957806315064c961462000224575b600080fd5b620001f7620001f13660046200316c565b620006d0565b005b3480156200020657600080fd5b5062000211608d5481565b6040519081526020015b60405180910390f35b3480156200023157600080fd5b50602254620002409060ff1681565b60405190151581526020016200021b565b3480156200025e57600080fd5b50620001f762000c7a565b3480156200027657600080fd5b506200028e62000288366004620031f9565b62000d2e565b6040516001600160a01b0390911681526020016200021b565b348015620002b457600080fd5b506200021160215481565b348015620002cc57600080fd5b5062000309620002de36600462003235565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200021b565b3480156200033b57600080fd5b506200021162000db1565b3480156200035357600080fd5b5062000240620003653660046200333d565b62000ea4565b3480156200037857600080fd5b50620002116200038a366004620033bb565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200045957600080fd5b50620001f76200046b366004620034cc565b62000fa6565b3480156200047e57600080fd5b50620001f762000490366004620035b3565b6200122c565b348015620004a357600080fd5b50620001f762001412565b348015620004bb57600080fd5b50620001f7620004cd366004620034cc565b62001428565b348015620004e057600080fd5b506200028e620004f236600462003609565b6089602052600090815260409020546001600160a01b031681565b3480156200051a57600080fd5b506055546001600160a01b03166200028e565b3480156200053a57600080fd5b50608c546200028e906001600160a01b031681565b3480156200055c57600080fd5b5062000566600081565b60405160ff90911681526020016200021b565b3480156200058657600080fd5b506200028e6200059836600462003623565b620019ea565b348015620005ab57600080fd5b50608754620005bd9063ffffffff1681565b60405163ffffffff90911681526020016200021b565b348015620005e057600080fd5b50608b546200028e906001600160a01b031681565b620001f762000606366004620036d7565b62001b56565b3480156200061957600080fd5b50620001f762001e0a565b3480156200063157600080fd5b50620002406200064336600462003609565b60886020526000908152604090205460ff1681565b3480156200066557600080fd5b50620001f76200067736600462003609565b62001ebc565b3480156200068a57600080fd5b50620005bd600081565b348015620006a157600080fd5b50620001f7620006b336600462003235565b62001f01565b348015620006c657600080fd5b5062000566600181565b60225460ff1615620007755760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60875463ffffffff90811690861603620007f85760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b60008060606001600160a01b0389166200088d57853414620008835760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200076c565b6000915062000b17565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000974576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af11580156200093b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200096191906200374e565b5060208101518151909450925062000b15565b84156200098957620009898a88888862001f97565b620009a06001600160a01b038b1633308a620025bc565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620009f7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a219190810190620037e9565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000a60573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a8a9190810190620037e9565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ac9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aef919062003822565b60405160200162000b039392919062003870565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162000b59989796959493929190620038ad565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000c019062002675565b608b546001600160a01b03166333d6247d62000c1c62000db1565b6040518263ffffffff1660e01b815260040162000c3b91815260200190565b600060405180830381600087803b15801562000c5657600080fd5b505af115801562000c6b573d6000803e3d6000fd5b50505050505050505050505050565b608c546001600160a01b0316331462000d225760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c620027d9565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b602154600090819081805b602081101562000e9b578260011660010362000e1c576001816020811062000de85762000de862003919565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000e49565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000e5660028462003977565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000e9290620039b3565b91505062000dbc565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000f97578160011660010362000f215786818151811062000edf5762000edf62003919565b60200260200101518360405160200162000f03929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000f73565b8287828151811062000f375762000f3762003919565b602002602001015160405160200162000f5a929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000f8060028362003977565b91508062000f8e81620039b3565b91505062000eb4565b5050821490505b949350505050565b60225460ff1615620010475760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6200105d8a8a8a8a8a8a8a8a8a8a6001620028b2565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b038516908490620010a09089908b908790602401620039ee565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001105919062003a27565b60006040518083038185875af1925050503d806000811462001144576040519150601f19603f3d011682016040523d82523d6000602084013e62001149565b606091505b5050905080620011c15760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff16158080156200124d5750600054600160ff909116105b80620012695750303b15801562001269575060005460ff166001145b620012dd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200076c565b6000805460ff1916600117905580156200131e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d829055620013a762002c65565b80156200140b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6200141c62002cef565b62000d2c600062002d4b565b60225460ff1615620014c95760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b620014df8a8a8a8a8a8a8a8a8a8a6000620028b2565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620015fe57604080516000808252602082019092526001600160a01b0385169084906040516200153a919062003a27565b60006040518083038185875af1925050503d806000811462001579576040519150601f19603f3d011682016040523d82523d6000602084013e6200157e565b606091505b5050905080620015f75760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c45440000000000000000000000000000000000000000000000000060648201526084016200076c565b5062001980565b60875463ffffffff908116908716036200162e57620016286001600160a01b038616848462002db5565b62001980565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620018ec57600080600085806020019051810190620016ce919062003a45565b925092509250600085848484604051620016e890620030d5565b620016f69392919062003870565b8190604051809103906000f590508015801562001717573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001785573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017ab91906200374e565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620018da9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200197d565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001955573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200197b91906200374e565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162001a6d90620030d5565b601f1982820381018352601f90910116604081905262001a9a908d908d908d908d908d9060200162003af1565b60408051601f198184030181529082905262001aba929160200162003b32565b6040516020818303038152906040528051906020012060405160200162001b3094939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff161562001bf75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b60875463ffffffff9081169084160362001c7a5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b9262001cc79260019263ffffffff9092169133918991899134918a9190620038ad565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d850152346051850152607180850192909252805180850390920182526091909301909252815191012062001d979062002675565b608b546001600160a01b03166333d6247d62001db262000db1565b6040518263ffffffff1660e01b815260040162001dd191815260200190565b600060405180830381600087803b15801562001dec57600080fd5b505af115801562001e01573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001eb25760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c62002e00565b62001ec662002cef565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001f0b62002cef565b6001600160a01b03811662001f895760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016200076c565b62001f948162002d4b565b50565b600062001fda83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002eaf92505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620022dc5760008080808080806200203d896004818d62003b65565b8101906200204c919062003b91565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620020e35760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0386163014620021635760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b8a8514620021da5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002288919062003a27565b6000604051808303816000865af19150503d8060008114620022c7576040519150601f19603f3d011682016040523d82523d6000602084013e620022cc565b606091505b505050505050505050506200140b565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c00000000000000000000000000000000000000000000000000000000146200236f5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200076c565b600080808080808080620023878a6004818e62003b65565b81019062002396919062003bec565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200242f5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0387163014620024af5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002566919062003a27565b6000604051808303816000865af19150503d8060008114620025a5576040519150601f19603f3d011682016040523d82523d6000602084013e620025aa565b606091505b50505050505050505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526200266f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002eb6565b50505050565b806001620026866020600262003db1565b62002692919062003dbf565b602154106200270a5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200076c565b6001602160008282546200271f919062003dd9565b909155505060215460005b6020811015620027c957816001166001036200275f57826001826020811062002757576200275762003919565b015550505050565b6001816020811062002775576200277562003919565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620027b2919062003977565b915080620027c081620039b3565b9150506200272a565b50620027d462003df4565b505050565b60225460ff16156200287a5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b63ffffffff8a1660009081526088602052604090205460ff16156200293f5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af1158015620029cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620029f2919062003e23565b9050801580159062002a115750608d5462002a0e824262003dbf565b10155b62002aab5760405162461bcd60e51b815260206004820152604260248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c49445f4f525f4e4f545f5945545f434c41494d414260648201527f4c45000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b60875463ffffffff87811691161462002b2d5760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000000060648201526084016200076c565b60875460009063ffffffff1662002b4657508862002b49565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d82015260518101899052607180820193909352815180820390930183526091019052805191012062002c17908e8e63ffffffff168462000ea4565b62000c6b5760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c494460448201526064016200076c565b600054610100900460ff1662002ce45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200076c565b62000d2c3362002d4b565b6055546001600160a01b0316331462000d2c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200076c565b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620027d49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016200260a565b60225460ff1662002e7a5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016200076c565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002f0d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662002fa29092919063ffffffff16565b805190915015620027d4578080602001905181019062002f2e91906200374e565b620027d45760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200076c565b606062000f9e848460008585600080866001600160a01b0316858760405162002fcc919062003a27565b60006040518083038185875af1925050503d80600081146200300b576040519150601f19603f3d011682016040523d82523d6000602084013e62003010565b606091505b509150915062003023878383876200302e565b979650505050505050565b60608315620030a25782516000036200309a576001600160a01b0385163b6200309a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200076c565b508162000f9e565b62000f9e8383815115620030b95781518083602001fd5b8060405162461bcd60e51b81526004016200076c919062003e3d565b6119c78062003e5383390190565b6001600160a01b038116811462001f9457600080fd5b80356200310681620030e3565b919050565b803563ffffffff811681146200310657600080fd5b60008083601f8401126200313357600080fd5b50813567ffffffffffffffff8111156200314c57600080fd5b6020830191508360208285010111156200316557600080fd5b9250929050565b60008060008060008060a087890312156200318657600080fd5b86356200319381620030e3565b9550620031a3602088016200310b565b94506040870135620031b581620030e3565b935060608701359250608087013567ffffffffffffffff811115620031d957600080fd5b620031e789828a0162003120565b979a9699509497509295939492505050565b600080604083850312156200320d57600080fd5b62003218836200310b565b915060208301356200322a81620030e3565b809150509250929050565b6000602082840312156200324857600080fd5b81356200325581620030e3565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620032b757620032b76200325c565b604052919050565b600082601f830112620032d157600080fd5b8135602067ffffffffffffffff821115620032f057620032f06200325c565b8160051b620033018282016200328b565b92835284810182019282810190878511156200331c57600080fd5b83870192505b84831015620030235782358252918301919083019062003322565b600080600080608085870312156200335457600080fd5b84359350602085013567ffffffffffffffff808211156200337457600080fd5b6200338288838901620032bf565b94506040870135915080821682146200339a57600080fd5b509396929550929360600135925050565b60ff8116811462001f9457600080fd5b600080600080600080600060e0888a031215620033d757600080fd5b8735620033e481620033ab565b9650620033f4602089016200310b565b955060408801356200340681620030e3565b945062003416606089016200310b565b935060808801356200342881620030e3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200346257620034626200325c565b50601f01601f191660200190565b600082601f8301126200348257600080fd5b813562003499620034938262003445565b6200328b565b818152846020838601011115620034af57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620034ed57600080fd5b8a3567ffffffffffffffff808211156200350657600080fd5b620035148e838f01620032bf565b9b506200352460208e016200310b565b9a5060408d0135995060608d013598506200354260808e016200310b565b97506200355260a08e01620030f9565b96506200356260c08e016200310b565b95506200357260e08e01620030f9565b94506101008d013593506101208d01359150808211156200359257600080fd5b50620035a18d828e0162003470565b9150509295989b9194979a5092959850565b60008060008060808587031215620035ca57600080fd5b620035d5856200310b565b93506020850135620035e781620030e3565b92506040850135620035f981620030e3565b9396929550929360600135925050565b6000602082840312156200361c57600080fd5b5035919050565b600080600080600080600060a0888a0312156200363f57600080fd5b6200364a886200310b565b965060208801356200365c81620030e3565b9550604088013567ffffffffffffffff808211156200367a57600080fd5b620036888b838c0162003120565b909750955060608a0135915080821115620036a257600080fd5b50620036b18a828b0162003120565b9094509250506080880135620036c781620033ab565b8091505092959891949750929550565b600080600060608486031215620036ed57600080fd5b620036f8846200310b565b925060208401356200370a81620030e3565b9150604084013567ffffffffffffffff8111156200372757600080fd5b620037358682870162003470565b9150509250925092565b801515811462001f9457600080fd5b6000602082840312156200376157600080fd5b815162003255816200373f565b60005b838110156200378b57818101518382015260200162003771565b838111156200266f5750506000910152565b600082601f830112620037af57600080fd5b8151620037c0620034938262003445565b818152846020838601011115620037d657600080fd5b62000f9e8260208301602087016200376e565b600060208284031215620037fc57600080fd5b815167ffffffffffffffff8111156200381457600080fd5b62000f9e848285016200379d565b6000602082840312156200383557600080fd5b81516200325581620033ab565b600081518084526200385c8160208601602086016200376e565b601f01601f19169290920160200192915050565b60608152600062003885606083018662003842565b828103602084015262003899818662003842565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620039008285018762003842565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082620039ae577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620039e757620039e762003948565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003a1e606083018462003842565b95945050505050565b6000825162003a3b8184602087016200376e565b9190910192915050565b60008060006060848603121562003a5b57600080fd5b835167ffffffffffffffff8082111562003a7457600080fd5b62003a82878388016200379d565b9450602086015191508082111562003a9957600080fd5b5062003aa8868287016200379d565b925050604084015162003abb81620033ab565b809150509250925092565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003b0760608301878962003ac6565b828103602084015262003b1c81868862003ac6565b91505060ff831660408301529695505050505050565b6000835162003b468184602088016200376e565b83519083019062003b5c8183602088016200376e565b01949350505050565b6000808585111562003b7657600080fd5b8386111562003b8457600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003bad57600080fd5b873562003bba81620030e3565b9650602088013562003bcc81620030e3565b9550604088013594506060880135935060808801356200342881620033ab565b600080600080600080600080610100898b03121562003c0a57600080fd5b883562003c1781620030e3565b9750602089013562003c2981620030e3565b96506040890135955060608901359450608089013562003c49816200373f565b935060a089013562003c5b81620033ab565b979a969950949793969295929450505060c08201359160e0013590565b600181815b8085111562003cd757817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003cbb5762003cbb62003948565b8085161562003cc957918102915b93841c939080029062003c7d565b509250929050565b60008262003cf05750600162000dab565b8162003cff5750600062000dab565b816001811462003d18576002811462003d235762003d43565b600191505062000dab565b60ff84111562003d375762003d3762003948565b50506001821b62000dab565b5060208310610133831016604e8410600b841016171562003d68575081810a62000dab565b62003d74838362003c78565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003da95762003da962003948565b029392505050565b600062003255838362003cdf565b60008282101562003dd45762003dd462003948565b500390565b6000821982111562003def5762003def62003948565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60006020828403121562003e3657600080fd5b5051919050565b6020815260006200325560208301846200384256fe60c06040523480156200001157600080fd5b50604051620019c7380380620019c78339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161150d620004ba600039600061053001526000818161036f01526104fa015261150d6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b604051610191919061123b565b60405180910390f35b6101ad6101a83660046112d7565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad610204366004611301565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad6102763660046112d7565b610552565b6101ad6102893660046112d7565b61059e565b6101c161029c36600461133d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d236600461133d565b60066020526000908152604090205481565b610184610645565b6101ad6102fa3660046112d7565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad6103523660046112d7565b6106ed565b6101ad6103653660046112d7565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f36600461135f565b6107b2565b005b6101c16103b43660046113d2565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043790611405565b80601f016020809104026020016040519081016040528092919081815260200182805461046390611405565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f12565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611487565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c8383610fda565b50600192915050565b60606004805461043790611405565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c83836110b3565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866108818361149f565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f3d610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff821661103d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b806002600082825461104f9190611487565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff821661113c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156111d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610c27565b600060208083528351808285015260005b818110156112685785810183015185820160400152820161124c565b8181111561127a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112d257600080fd5b919050565b600080604083850312156112ea57600080fd5b6112f3836112ae565b946020939093013593505050565b60008060006060848603121561131657600080fd5b61131f846112ae565b925061132d602085016112ae565b9150604084013590509250925092565b60006020828403121561134f57600080fd5b611358826112ae565b9392505050565b600080600080600080600060e0888a03121561137a57600080fd5b611383886112ae565b9650611391602089016112ae565b95506040880135945060608801359350608088013560ff811681146113b557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156113e557600080fd5b6113ee836112ae565b91506113fc602084016112ae565b90509250929050565b600181811c9082168061141957607f821691505b602082108103611452577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561149a5761149a611458565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036114d0576114d0611458565b506001019056fea264697066735822122094134962e5fa2f6357086a2590b7f3a754d340b16e5312664d82a308bc23a0df64736f6c634300080f0033a26469706673582212207d802e4c153f08d52b883999d6ed4e590e1894e2db82359c2f8cde0298f066c464736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/BridgeMock.json b/compiled-contracts/BridgeMock.json index 53ffab780..5541a263d 100644 --- a/compiled-contracts/BridgeMock.json +++ b/compiled-contracts/BridgeMock.json @@ -815,8 +815,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506159dc806100206000396000f3fe608060405260043610620001ff5760003560e01c80637b6323c11162000117578063d02103ca11620000a1578063e7a5b4ea116200006c578063e7a5b4ea14620006de578063ed6be5c91462000703578063f2fde38b146200071a578063ff634ed7146200073f57600080fd5b8063d02103ca1462000659578063d96a15f7146200067b578063dbc169761462000692578063e737588114620006aa57600080fd5b806391e57e2d11620000e257806391e57e2d14620005bd578063a08e8a0814620005d5578063aaa13cc214620005ff578063bab161bf146200062457600080fd5b80637b6323c1146200051c57806381b1c17414620005415780638da5cb5b146200057b5780638f611519146200059b57600080fd5b80632dfdf0b511620001995780633e19704311620001645780633e19704314620003d95780634638554914620004ba5780636555954014620004df578063715018a6146200050457600080fd5b80632dfdf0b51462000315578063318aee3d146200032d5780633ae05047146200039c5780633da8168214620003b457600080fd5b80632072f6c511620001da5780632072f6c5146200027557806322e95f2c146200028d5780632b5e42e714620002cb5780632c3f58cd14620002f057600080fd5b80630871e97114620002045780630e1da6c3146200021d57806315064c961462000248575b600080fd5b6200021b62000215366004620032db565b62000756565b005b3480156200022a57600080fd5b5062000235608d5481565b6040519081526020015b60405180910390f35b3480156200025557600080fd5b50602254620002649060ff1681565b60405190151581526020016200023f565b3480156200028257600080fd5b506200021b62000812565b3480156200029a57600080fd5b50620002b2620002ac36600462003368565b620008c6565b6040516001600160a01b0390911681526020016200023f565b348015620002d857600080fd5b506200021b620002ea366004620033a4565b62000949565b348015620002fd57600080fd5b506200021b6200030f366004620033be565b62000958565b3480156200032257600080fd5b506200023560215481565b3480156200033a57600080fd5b50620003776200034c366004620033e3565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200023f565b348015620003a957600080fd5b506200023562000999565b348015620003c157600080fd5b5062000264620003d3366004620034e4565b62000a8c565b348015620003e657600080fd5b5062000235620003f836600462003562565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004c757600080fd5b506200021b620004d936600462003673565b62000b8e565b348015620004ec57600080fd5b506200021b620004fe3660046200375a565b62000e14565b3480156200051157600080fd5b506200021b62001006565b3480156200052957600080fd5b506200021b6200053b36600462003673565b6200101c565b3480156200054e57600080fd5b50620002b262000560366004620033a4565b6089602052600090815260409020546001600160a01b031681565b3480156200058857600080fd5b506055546001600160a01b0316620002b2565b348015620005a857600080fd5b50608c54620002b2906001600160a01b031681565b348015620005ca57600080fd5b5062000235608e5481565b348015620005e257600080fd5b50620005ec600081565b60405160ff90911681526020016200023f565b3480156200060c57600080fd5b50620002b26200061e366004620037b0565b620015de565b3480156200063157600080fd5b50608754620006439063ffffffff1681565b60405163ffffffff90911681526020016200023f565b3480156200066657600080fd5b50608b54620002b2906001600160a01b031681565b6200021b6200068c36600462003864565b6200174a565b3480156200069f57600080fd5b506200021b620019fe565b348015620006b757600080fd5b5062000264620006c9366004620033a4565b60886020526000908152604090205460ff1681565b348015620006eb57600080fd5b506200021b620006fd366004620033a4565b62001ab0565b3480156200071057600080fd5b5062000643600081565b3480156200072757600080fd5b506200021b62000739366004620033e3565b62001af5565b3480156200074c57600080fd5b50620005ec600181565b608e54341115620007fa5760405162461bcd60e51b815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6200080a86868686868662001b8b565b505050505050565b608c546001600160a01b03163314620008ba5760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c462002131565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b620009536200220a565b608e55565b620009626200220a565b608780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b602154600090819081805b602081101562000a83578260011660010362000a045760018160208110620009d057620009d0620038cc565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000a31565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a3e6002846200392a565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000a7a9062003966565b915050620009a4565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000b7f578160011660010362000b095786818151811062000ac75762000ac7620038cc565b60200260200101518360405160200162000aeb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000b5b565b8287828151811062000b1f5762000b1f620038cc565b602002602001015160405160200162000b42929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000b686002836200392a565b91508062000b768162003966565b91505062000a9c565b5050821490505b949350505050565b60225460ff161562000c2f5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b62000c458a8a8a8a8a8a8a8a8a8a600162002266565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b03851690849062000c889089908b908790602401620039fe565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162000ced919062003a37565b60006040518083038185875af1925050503d806000811462000d2c576040519150601f19603f3d011682016040523d82523d6000602084013e62000d31565b606091505b505090508062000da95760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff161580801562000e355750600054600160ff909116105b8062000e515750303b15801562000e51575060005460ff166001145b62000ec55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007f1565b6000805460ff19166001179055801562000f0657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d8290556703782dace9d90000608e5562000f9b620025f3565b801562000fff57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b620010106200220a565b620008c4600062002678565b60225460ff1615620010bd5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b620010d38a8a8a8a8a8a8a8a8a8a600062002266565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620011f257604080516000808252602082019092526001600160a01b0385169084906040516200112e919062003a37565b60006040518083038185875af1925050503d80600081146200116d576040519150601f19603f3d011682016040523d82523d6000602084013e62001172565b606091505b5050905080620011eb5760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c4544000000000000000000000000000000000000000000000000006064820152608401620007f1565b5062001574565b60875463ffffffff9081169087160362001222576200121c6001600160a01b0386168484620026e2565b62001574565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620014e057600080600085806020019051810190620012c2919062003aa1565b925092509250600085848484604051620012dc9062003244565b620012ea9392919062003b22565b8190604051809103906000f59050801580156200130b573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001379573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200139f919062003b6e565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620014ce9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001571565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001549573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200156f919062003b6e565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620016619062003244565b601f1982820381018352601f9091011660408190526200168e908d908d908d908d908d9060200162003bb9565b60408051601f1981840301815290829052620016ae929160200162003bfa565b604051602081830303815290604052805190602001206040516020016200172494939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620017eb5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff908116908416036200186e5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620018bb9260019263ffffffff9092169133918991899134918a919062003c2d565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200198b9062002792565b608b546001600160a01b03166333d6247d620019a662000999565b6040518263ffffffff1660e01b8152600401620019c591815260200190565b600060405180830381600087803b158015620019e057600080fd5b505af1158015620019f5573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001aa65760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c4620028f1565b62001aba6200220a565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001aff6200220a565b6001600160a01b03811662001b7d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007f1565b62001b888162002678565b50565b60225460ff161562001c2c5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff9081169086160362001caf5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b60008060606001600160a01b03891662001d445785341462001d3a5760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007f1565b6000915062001fce565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001e2b576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562001df2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e18919062003b6e565b5060208101518151909450925062001fcc565b841562001e405762001e408a888888620029a0565b62001e576001600160a01b038b1633308a62002fc5565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001eae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001ed8919081019062003c99565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001f17573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001f41919081019062003c99565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001f80573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001fa6919062003cd2565b60405160200162001fba9392919062003b22565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200201098979695949392919062003c2d565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620020b89062002792565b608b546001600160a01b03166333d6247d620020d362000999565b6040518263ffffffff1660e01b8152600401620020f291815260200190565b600060405180830381600087803b1580156200210d57600080fd5b505af115801562002122573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff1615620021d25760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6055546001600160a01b03163314620008c45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007f1565b63ffffffff8a1660009081526088602052604090205460ff1615620022f35760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562002380573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620023a6919062003cf2565b90508015801590620023c55750608d54620023c2824262003d0c565b10155b620024395760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c4944000000000000000000000000000000000000006064820152608401620007f1565b60875463ffffffff878116911614620024bb5760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000006064820152608401620007f1565b60875460009063ffffffff16620024d4575088620024d7565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d820152605181018990526071808201939093528151808203909301835260910190528051910120620025a5908e8e63ffffffff168462000a8c565b620021225760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c49446044820152606401620007f1565b600054610100900460ff16620026725760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007f1565b620008c4335b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b0383166024820152604481018290526200278d9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526200301e565b505050565b806001620027a36020600262003e5f565b620027af919062003d0c565b60215410620028275760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007f1565b6001602160008282546200283c919062003e6d565b909155505060215460005b6020811015620028e657816001166001036200287c578260018260208110620028745762002874620038cc565b015550505050565b60018160208110620028925762002892620038cc565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620028cf91906200392a565b915080620028dd8162003966565b91505062002847565b506200278d62003e88565b60225460ff166200296b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620007f1565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000620029e383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200310a92505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002ce557600080808080808062002a46896004818d62003eb7565b81019062002a55919062003ee3565b9650965096509650965096509650336001600160a01b0316876001600160a01b03161462002aec5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038616301462002b6c5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b8a851462002be35760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002c91919062003a37565b6000604051808303816000865af19150503d806000811462002cd0576040519150601f19603f3d011682016040523d82523d6000602084013e62002cd5565b606091505b5050505050505050505062000fff565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002d785760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007f1565b60008080808080808062002d908a6004818e62003eb7565b81019062002d9f919062003f3e565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462002e385760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038716301462002eb85760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002f6f919062003a37565b6000604051808303816000865af19150503d806000811462002fae576040519150601f19603f3d011682016040523d82523d6000602084013e62002fb3565b606091505b50505050505050505050505050505050565b6040516001600160a01b0380851660248301528316604482015260648101829052620030189085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002728565b50505050565b600062003075826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620031119092919063ffffffff16565b8051909150156200278d578080602001905181019062003096919062003b6e565b6200278d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007f1565b6020015190565b606062000b86848460008585600080866001600160a01b031685876040516200313b919062003a37565b60006040518083038185875af1925050503d80600081146200317a576040519150601f19603f3d011682016040523d82523d6000602084013e6200317f565b606091505b509150915062003192878383876200319d565b979650505050505050565b606083156200321157825160000362003209576001600160a01b0385163b620032095760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007f1565b508162000b86565b62000b868383815115620032285781518083602001fd5b8060405162461bcd60e51b8152600401620007f1919062003fca565b6119c78062003fe083390190565b6001600160a01b038116811462001b8857600080fd5b8035620032758162003252565b919050565b803563ffffffff811681146200327557600080fd5b60008083601f840112620032a257600080fd5b50813567ffffffffffffffff811115620032bb57600080fd5b602083019150836020828501011115620032d457600080fd5b9250929050565b60008060008060008060a08789031215620032f557600080fd5b8635620033028162003252565b955062003312602088016200327a565b94506040870135620033248162003252565b935060608701359250608087013567ffffffffffffffff8111156200334857600080fd5b6200335689828a016200328f565b979a9699509497509295939492505050565b600080604083850312156200337c57600080fd5b62003387836200327a565b91506020830135620033998162003252565b809150509250929050565b600060208284031215620033b757600080fd5b5035919050565b600060208284031215620033d157600080fd5b620033dc826200327a565b9392505050565b600060208284031215620033f657600080fd5b8135620033dc8162003252565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200345e576200345e62003403565b604052919050565b600082601f8301126200347857600080fd5b8135602067ffffffffffffffff82111562003497576200349762003403565b8160051b620034a882820162003432565b9283528481018201928281019087851115620034c357600080fd5b83870192505b848310156200319257823582529183019190830190620034c9565b60008060008060808587031215620034fb57600080fd5b84359350602085013567ffffffffffffffff808211156200351b57600080fd5b620035298883890162003466565b94506040870135915080821682146200354157600080fd5b509396929550929360600135925050565b60ff8116811462001b8857600080fd5b600080600080600080600060e0888a0312156200357e57600080fd5b87356200358b8162003552565b96506200359b602089016200327a565b95506040880135620035ad8162003252565b9450620035bd606089016200327a565b93506080880135620035cf8162003252565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562003609576200360962003403565b50601f01601f191660200190565b600082601f8301126200362957600080fd5b8135620036406200363a82620035ec565b62003432565b8181528460208386010111156200365657600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200369457600080fd5b8a3567ffffffffffffffff80821115620036ad57600080fd5b620036bb8e838f0162003466565b9b50620036cb60208e016200327a565b9a5060408d0135995060608d01359850620036e960808e016200327a565b9750620036f960a08e0162003268565b96506200370960c08e016200327a565b95506200371960e08e0162003268565b94506101008d013593506101208d01359150808211156200373957600080fd5b50620037488d828e0162003617565b9150509295989b9194979a5092959850565b600080600080608085870312156200377157600080fd5b6200377c856200327a565b935060208501356200378e8162003252565b92506040850135620037a08162003252565b9396929550929360600135925050565b600080600080600080600060a0888a031215620037cc57600080fd5b620037d7886200327a565b96506020880135620037e98162003252565b9550604088013567ffffffffffffffff808211156200380757600080fd5b620038158b838c016200328f565b909750955060608a01359150808211156200382f57600080fd5b506200383e8a828b016200328f565b9094509250506080880135620038548162003552565b8091505092959891949750929550565b6000806000606084860312156200387a57600080fd5b62003885846200327a565b92506020840135620038978162003252565b9150604084013567ffffffffffffffff811115620038b457600080fd5b620038c28682870162003617565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003961577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200399a576200399a620038fb565b5060010190565b60005b83811015620039be578181015183820152602001620039a4565b83811115620030185750506000910152565b60008151808452620039ea816020860160208601620039a1565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003a2e6060830184620039d0565b95945050505050565b6000825162003a4b818460208701620039a1565b9190910192915050565b600082601f83011262003a6757600080fd5b815162003a786200363a82620035ec565b81815284602083860101111562003a8e57600080fd5b62000b86826020830160208701620039a1565b60008060006060848603121562003ab757600080fd5b835167ffffffffffffffff8082111562003ad057600080fd5b62003ade8783880162003a55565b9450602086015191508082111562003af557600080fd5b5062003b048682870162003a55565b925050604084015162003b178162003552565b809150509250925092565b60608152600062003b376060830186620039d0565b828103602084015262003b4b8186620039d0565b91505060ff83166040830152949350505050565b801515811462001b8857600080fd5b60006020828403121562003b8157600080fd5b8151620033dc8162003b5f565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003bcf60608301878962003b8e565b828103602084015262003be481868862003b8e565b91505060ff831660408301529695505050505050565b6000835162003c0e818460208801620039a1565b83519083019062003c24818360208801620039a1565b01949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003c8082850187620039d0565b925080851660e085015250509998505050505050505050565b60006020828403121562003cac57600080fd5b815167ffffffffffffffff81111562003cc457600080fd5b62000b868482850162003a55565b60006020828403121562003ce557600080fd5b8151620033dc8162003552565b60006020828403121562003d0557600080fd5b5051919050565b60008282101562003d215762003d21620038fb565b500390565b600181815b8085111562003d8557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d695762003d69620038fb565b8085161562003d7757918102915b93841c939080029062003d2b565b509250929050565b60008262003d9e5750600162000943565b8162003dad5750600062000943565b816001811462003dc6576002811462003dd15762003df1565b600191505062000943565b60ff84111562003de55762003de5620038fb565b50506001821b62000943565b5060208310610133831016604e8410600b841016171562003e16575081810a62000943565b62003e22838362003d26565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003e575762003e57620038fb565b029392505050565b6000620033dc838362003d8d565b6000821982111562003e835762003e83620038fb565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000808585111562003ec857600080fd5b8386111562003ed657600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003eff57600080fd5b873562003f0c8162003252565b9650602088013562003f1e8162003252565b955060408801359450606088013593506080880135620035cf8162003552565b600080600080600080600080610100898b03121562003f5c57600080fd5b883562003f698162003252565b9750602089013562003f7b8162003252565b96506040890135955060608901359450608089013562003f9b8162003b5f565b935060a089013562003fad8162003552565b979a969950949793969295929450505060c08201359160e0013590565b602081526000620033dc6020830184620039d056fe60c06040523480156200001157600080fd5b50604051620019c7380380620019c78339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161150d620004ba600039600061053001526000818161036f01526104fa015261150d6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b604051610191919061123b565b60405180910390f35b6101ad6101a83660046112d7565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad610204366004611301565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad6102763660046112d7565b610552565b6101ad6102893660046112d7565b61059e565b6101c161029c36600461133d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d236600461133d565b60066020526000908152604090205481565b610184610645565b6101ad6102fa3660046112d7565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad6103523660046112d7565b6106ed565b6101ad6103653660046112d7565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f36600461135f565b6107b2565b005b6101c16103b43660046113d2565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043790611405565b80601f016020809104026020016040519081016040528092919081815260200182805461046390611405565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f12565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611487565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c8383610fda565b50600192915050565b60606004805461043790611405565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c83836110b3565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866108818361149f565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f3d610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff821661103d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b806002600082825461104f9190611487565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff821661113c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156111d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610c27565b600060208083528351808285015260005b818110156112685785810183015185820160400152820161124c565b8181111561127a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112d257600080fd5b919050565b600080604083850312156112ea57600080fd5b6112f3836112ae565b946020939093013593505050565b60008060006060848603121561131657600080fd5b61131f846112ae565b925061132d602085016112ae565b9150604084013590509250925092565b60006020828403121561134f57600080fd5b611358826112ae565b9392505050565b600080600080600080600060e0888a03121561137a57600080fd5b611383886112ae565b9650611391602089016112ae565b95506040880135945060608801359350608088013560ff811681146113b557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156113e557600080fd5b6113ee836112ae565b91506113fc602084016112ae565b90509250929050565b600181811c9082168061141957607f821691505b602082108103611452577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561149a5761149a611458565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036114d0576114d0611458565b506001019056fea264697066735822122094134962e5fa2f6357086a2590b7f3a754d340b16e5312664d82a308bc23a0df64736f6c634300080f0033a26469706673582212208ab6fb3903678943dce239f2d5af5eb41bb3f9557f221a30c64e308f374fa28464736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001ff5760003560e01c80637b6323c11162000117578063d02103ca11620000a1578063e7a5b4ea116200006c578063e7a5b4ea14620006de578063ed6be5c91462000703578063f2fde38b146200071a578063ff634ed7146200073f57600080fd5b8063d02103ca1462000659578063d96a15f7146200067b578063dbc169761462000692578063e737588114620006aa57600080fd5b806391e57e2d11620000e257806391e57e2d14620005bd578063a08e8a0814620005d5578063aaa13cc214620005ff578063bab161bf146200062457600080fd5b80637b6323c1146200051c57806381b1c17414620005415780638da5cb5b146200057b5780638f611519146200059b57600080fd5b80632dfdf0b511620001995780633e19704311620001645780633e19704314620003d95780634638554914620004ba5780636555954014620004df578063715018a6146200050457600080fd5b80632dfdf0b51462000315578063318aee3d146200032d5780633ae05047146200039c5780633da8168214620003b457600080fd5b80632072f6c511620001da5780632072f6c5146200027557806322e95f2c146200028d5780632b5e42e714620002cb5780632c3f58cd14620002f057600080fd5b80630871e97114620002045780630e1da6c3146200021d57806315064c961462000248575b600080fd5b6200021b62000215366004620032db565b62000756565b005b3480156200022a57600080fd5b5062000235608d5481565b6040519081526020015b60405180910390f35b3480156200025557600080fd5b50602254620002649060ff1681565b60405190151581526020016200023f565b3480156200028257600080fd5b506200021b62000812565b3480156200029a57600080fd5b50620002b2620002ac36600462003368565b620008c6565b6040516001600160a01b0390911681526020016200023f565b348015620002d857600080fd5b506200021b620002ea366004620033a4565b62000949565b348015620002fd57600080fd5b506200021b6200030f366004620033be565b62000958565b3480156200032257600080fd5b506200023560215481565b3480156200033a57600080fd5b50620003776200034c366004620033e3565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200023f565b348015620003a957600080fd5b506200023562000999565b348015620003c157600080fd5b5062000264620003d3366004620034e4565b62000a8c565b348015620003e657600080fd5b5062000235620003f836600462003562565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004c757600080fd5b506200021b620004d936600462003673565b62000b8e565b348015620004ec57600080fd5b506200021b620004fe3660046200375a565b62000e14565b3480156200051157600080fd5b506200021b62001006565b3480156200052957600080fd5b506200021b6200053b36600462003673565b6200101c565b3480156200054e57600080fd5b50620002b262000560366004620033a4565b6089602052600090815260409020546001600160a01b031681565b3480156200058857600080fd5b506055546001600160a01b0316620002b2565b348015620005a857600080fd5b50608c54620002b2906001600160a01b031681565b348015620005ca57600080fd5b5062000235608e5481565b348015620005e257600080fd5b50620005ec600081565b60405160ff90911681526020016200023f565b3480156200060c57600080fd5b50620002b26200061e366004620037b0565b620015de565b3480156200063157600080fd5b50608754620006439063ffffffff1681565b60405163ffffffff90911681526020016200023f565b3480156200066657600080fd5b50608b54620002b2906001600160a01b031681565b6200021b6200068c36600462003864565b6200174a565b3480156200069f57600080fd5b506200021b620019fe565b348015620006b757600080fd5b5062000264620006c9366004620033a4565b60886020526000908152604090205460ff1681565b348015620006eb57600080fd5b506200021b620006fd366004620033a4565b62001ab0565b3480156200071057600080fd5b5062000643600081565b3480156200072757600080fd5b506200021b62000739366004620033e3565b62001af5565b3480156200074c57600080fd5b50620005ec600181565b608e54341115620007fa5760405162461bcd60e51b815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6200080a86868686868662001b8b565b505050505050565b608c546001600160a01b03163314620008ba5760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c462002131565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b620009536200220a565b608e55565b620009626200220a565b608780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b602154600090819081805b602081101562000a83578260011660010362000a045760018160208110620009d057620009d0620038cc565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000a31565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a3e6002846200392a565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000a7a9062003966565b915050620009a4565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000b7f578160011660010362000b095786818151811062000ac75762000ac7620038cc565b60200260200101518360405160200162000aeb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000b5b565b8287828151811062000b1f5762000b1f620038cc565b602002602001015160405160200162000b42929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000b686002836200392a565b91508062000b768162003966565b91505062000a9c565b5050821490505b949350505050565b60225460ff161562000c2f5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b62000c458a8a8a8a8a8a8a8a8a8a600162002266565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b03851690849062000c889089908b908790602401620039fe565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162000ced919062003a37565b60006040518083038185875af1925050503d806000811462000d2c576040519150601f19603f3d011682016040523d82523d6000602084013e62000d31565b606091505b505090508062000da95760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff161580801562000e355750600054600160ff909116105b8062000e515750303b15801562000e51575060005460ff166001145b62000ec55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007f1565b6000805460ff19166001179055801562000f0657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d8290556703782dace9d90000608e5562000f9b620025f3565b801562000fff57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b620010106200220a565b620008c4600062002678565b60225460ff1615620010bd5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b620010d38a8a8a8a8a8a8a8a8a8a600062002266565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620011f257604080516000808252602082019092526001600160a01b0385169084906040516200112e919062003a37565b60006040518083038185875af1925050503d80600081146200116d576040519150601f19603f3d011682016040523d82523d6000602084013e62001172565b606091505b5050905080620011eb5760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c4544000000000000000000000000000000000000000000000000006064820152608401620007f1565b5062001574565b60875463ffffffff9081169087160362001222576200121c6001600160a01b0386168484620026e2565b62001574565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620014e057600080600085806020019051810190620012c2919062003aa1565b925092509250600085848484604051620012dc9062003244565b620012ea9392919062003b22565b8190604051809103906000f59050801580156200130b573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001379573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200139f919062003b6e565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620014ce9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001571565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001549573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200156f919062003b6e565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620016619062003244565b601f1982820381018352601f9091011660408190526200168e908d908d908d908d908d9060200162003bb9565b60408051601f1981840301815290829052620016ae929160200162003bfa565b604051602081830303815290604052805190602001206040516020016200172494939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620017eb5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff908116908416036200186e5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620018bb9260019263ffffffff9092169133918991899134918a919062003c2d565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200198b9062002792565b608b546001600160a01b03166333d6247d620019a662000999565b6040518263ffffffff1660e01b8152600401620019c591815260200190565b600060405180830381600087803b158015620019e057600080fd5b505af1158015620019f5573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001aa65760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c4620028f1565b62001aba6200220a565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001aff6200220a565b6001600160a01b03811662001b7d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007f1565b62001b888162002678565b50565b60225460ff161562001c2c5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff9081169086160362001caf5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b60008060606001600160a01b03891662001d445785341462001d3a5760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007f1565b6000915062001fce565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001e2b576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562001df2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e18919062003b6e565b5060208101518151909450925062001fcc565b841562001e405762001e408a888888620029a0565b62001e576001600160a01b038b1633308a62002fc5565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001eae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001ed8919081019062003c99565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001f17573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001f41919081019062003c99565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001f80573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001fa6919062003cd2565b60405160200162001fba9392919062003b22565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200201098979695949392919062003c2d565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620020b89062002792565b608b546001600160a01b03166333d6247d620020d362000999565b6040518263ffffffff1660e01b8152600401620020f291815260200190565b600060405180830381600087803b1580156200210d57600080fd5b505af115801562002122573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff1615620021d25760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6055546001600160a01b03163314620008c45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007f1565b63ffffffff8a1660009081526088602052604090205460ff1615620022f35760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562002380573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620023a6919062003cf2565b90508015801590620023c55750608d54620023c2824262003d0c565b10155b620024395760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c4944000000000000000000000000000000000000006064820152608401620007f1565b60875463ffffffff878116911614620024bb5760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000006064820152608401620007f1565b60875460009063ffffffff16620024d4575088620024d7565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d820152605181018990526071808201939093528151808203909301835260910190528051910120620025a5908e8e63ffffffff168462000a8c565b620021225760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c49446044820152606401620007f1565b600054610100900460ff16620026725760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007f1565b620008c4335b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b0383166024820152604481018290526200278d9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526200301e565b505050565b806001620027a36020600262003e5f565b620027af919062003d0c565b60215410620028275760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007f1565b6001602160008282546200283c919062003e6d565b909155505060215460005b6020811015620028e657816001166001036200287c578260018260208110620028745762002874620038cc565b015550505050565b60018160208110620028925762002892620038cc565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620028cf91906200392a565b915080620028dd8162003966565b91505062002847565b506200278d62003e88565b60225460ff166200296b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620007f1565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000620029e383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200310a92505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002ce557600080808080808062002a46896004818d62003eb7565b81019062002a55919062003ee3565b9650965096509650965096509650336001600160a01b0316876001600160a01b03161462002aec5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038616301462002b6c5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b8a851462002be35760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002c91919062003a37565b6000604051808303816000865af19150503d806000811462002cd0576040519150601f19603f3d011682016040523d82523d6000602084013e62002cd5565b606091505b5050505050505050505062000fff565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002d785760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007f1565b60008080808080808062002d908a6004818e62003eb7565b81019062002d9f919062003f3e565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462002e385760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038716301462002eb85760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002f6f919062003a37565b6000604051808303816000865af19150503d806000811462002fae576040519150601f19603f3d011682016040523d82523d6000602084013e62002fb3565b606091505b50505050505050505050505050505050565b6040516001600160a01b0380851660248301528316604482015260648101829052620030189085907f23b872dd000000000000000000000000000000000000000000000000000000009060840162002728565b50505050565b600062003075826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620031119092919063ffffffff16565b8051909150156200278d578080602001905181019062003096919062003b6e565b6200278d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007f1565b6020015190565b606062000b86848460008585600080866001600160a01b031685876040516200313b919062003a37565b60006040518083038185875af1925050503d80600081146200317a576040519150601f19603f3d011682016040523d82523d6000602084013e6200317f565b606091505b509150915062003192878383876200319d565b979650505050505050565b606083156200321157825160000362003209576001600160a01b0385163b620032095760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007f1565b508162000b86565b62000b868383815115620032285781518083602001fd5b8060405162461bcd60e51b8152600401620007f1919062003fca565b6119c78062003fe083390190565b6001600160a01b038116811462001b8857600080fd5b8035620032758162003252565b919050565b803563ffffffff811681146200327557600080fd5b60008083601f840112620032a257600080fd5b50813567ffffffffffffffff811115620032bb57600080fd5b602083019150836020828501011115620032d457600080fd5b9250929050565b60008060008060008060a08789031215620032f557600080fd5b8635620033028162003252565b955062003312602088016200327a565b94506040870135620033248162003252565b935060608701359250608087013567ffffffffffffffff8111156200334857600080fd5b6200335689828a016200328f565b979a9699509497509295939492505050565b600080604083850312156200337c57600080fd5b62003387836200327a565b91506020830135620033998162003252565b809150509250929050565b600060208284031215620033b757600080fd5b5035919050565b600060208284031215620033d157600080fd5b620033dc826200327a565b9392505050565b600060208284031215620033f657600080fd5b8135620033dc8162003252565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200345e576200345e62003403565b604052919050565b600082601f8301126200347857600080fd5b8135602067ffffffffffffffff82111562003497576200349762003403565b8160051b620034a882820162003432565b9283528481018201928281019087851115620034c357600080fd5b83870192505b848310156200319257823582529183019190830190620034c9565b60008060008060808587031215620034fb57600080fd5b84359350602085013567ffffffffffffffff808211156200351b57600080fd5b620035298883890162003466565b94506040870135915080821682146200354157600080fd5b509396929550929360600135925050565b60ff8116811462001b8857600080fd5b600080600080600080600060e0888a0312156200357e57600080fd5b87356200358b8162003552565b96506200359b602089016200327a565b95506040880135620035ad8162003252565b9450620035bd606089016200327a565b93506080880135620035cf8162003252565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562003609576200360962003403565b50601f01601f191660200190565b600082601f8301126200362957600080fd5b8135620036406200363a82620035ec565b62003432565b8181528460208386010111156200365657600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200369457600080fd5b8a3567ffffffffffffffff80821115620036ad57600080fd5b620036bb8e838f0162003466565b9b50620036cb60208e016200327a565b9a5060408d0135995060608d01359850620036e960808e016200327a565b9750620036f960a08e0162003268565b96506200370960c08e016200327a565b95506200371960e08e0162003268565b94506101008d013593506101208d01359150808211156200373957600080fd5b50620037488d828e0162003617565b9150509295989b9194979a5092959850565b600080600080608085870312156200377157600080fd5b6200377c856200327a565b935060208501356200378e8162003252565b92506040850135620037a08162003252565b9396929550929360600135925050565b600080600080600080600060a0888a031215620037cc57600080fd5b620037d7886200327a565b96506020880135620037e98162003252565b9550604088013567ffffffffffffffff808211156200380757600080fd5b620038158b838c016200328f565b909750955060608a01359150808211156200382f57600080fd5b506200383e8a828b016200328f565b9094509250506080880135620038548162003552565b8091505092959891949750929550565b6000806000606084860312156200387a57600080fd5b62003885846200327a565b92506020840135620038978162003252565b9150604084013567ffffffffffffffff811115620038b457600080fd5b620038c28682870162003617565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003961577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200399a576200399a620038fb565b5060010190565b60005b83811015620039be578181015183820152602001620039a4565b83811115620030185750506000910152565b60008151808452620039ea816020860160208601620039a1565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003a2e6060830184620039d0565b95945050505050565b6000825162003a4b818460208701620039a1565b9190910192915050565b600082601f83011262003a6757600080fd5b815162003a786200363a82620035ec565b81815284602083860101111562003a8e57600080fd5b62000b86826020830160208701620039a1565b60008060006060848603121562003ab757600080fd5b835167ffffffffffffffff8082111562003ad057600080fd5b62003ade8783880162003a55565b9450602086015191508082111562003af557600080fd5b5062003b048682870162003a55565b925050604084015162003b178162003552565b809150509250925092565b60608152600062003b376060830186620039d0565b828103602084015262003b4b8186620039d0565b91505060ff83166040830152949350505050565b801515811462001b8857600080fd5b60006020828403121562003b8157600080fd5b8151620033dc8162003b5f565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003bcf60608301878962003b8e565b828103602084015262003be481868862003b8e565b91505060ff831660408301529695505050505050565b6000835162003c0e818460208801620039a1565b83519083019062003c24818360208801620039a1565b01949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003c8082850187620039d0565b925080851660e085015250509998505050505050505050565b60006020828403121562003cac57600080fd5b815167ffffffffffffffff81111562003cc457600080fd5b62000b868482850162003a55565b60006020828403121562003ce557600080fd5b8151620033dc8162003552565b60006020828403121562003d0557600080fd5b5051919050565b60008282101562003d215762003d21620038fb565b500390565b600181815b8085111562003d8557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d695762003d69620038fb565b8085161562003d7757918102915b93841c939080029062003d2b565b509250929050565b60008262003d9e5750600162000943565b8162003dad5750600062000943565b816001811462003dc6576002811462003dd15762003df1565b600191505062000943565b60ff84111562003de55762003de5620038fb565b50506001821b62000943565b5060208310610133831016604e8410600b841016171562003e16575081810a62000943565b62003e22838362003d26565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003e575762003e57620038fb565b029392505050565b6000620033dc838362003d8d565b6000821982111562003e835762003e83620038fb565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000808585111562003ec857600080fd5b8386111562003ed657600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003eff57600080fd5b873562003f0c8162003252565b9650602088013562003f1e8162003252565b955060408801359450606088013593506080880135620035cf8162003552565b600080600080600080600080610100898b03121562003f5c57600080fd5b883562003f698162003252565b9750602089013562003f7b8162003252565b96506040890135955060608901359450608089013562003f9b8162003b5f565b935060a089013562003fad8162003552565b979a969950949793969295929450505060c08201359160e0013590565b602081526000620033dc6020830184620039d056fe60c06040523480156200001157600080fd5b50604051620019c7380380620019c78339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161150d620004ba600039600061053001526000818161036f01526104fa015261150d6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b604051610191919061123b565b60405180910390f35b6101ad6101a83660046112d7565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad610204366004611301565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad6102763660046112d7565b610552565b6101ad6102893660046112d7565b61059e565b6101c161029c36600461133d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d236600461133d565b60066020526000908152604090205481565b610184610645565b6101ad6102fa3660046112d7565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad6103523660046112d7565b6106ed565b6101ad6103653660046112d7565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f36600461135f565b6107b2565b005b6101c16103b43660046113d2565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043790611405565b80601f016020809104026020016040519081016040528092919081815260200182805461046390611405565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f12565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611487565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c8383610fda565b50600192915050565b60606004805461043790611405565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c83836110b3565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866108818361149f565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f3d610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff821661103d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b806002600082825461104f9190611487565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff821661113c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156111d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610c27565b600060208083528351808285015260005b818110156112685785810183015185820160400152820161124c565b8181111561127a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112d257600080fd5b919050565b600080604083850312156112ea57600080fd5b6112f3836112ae565b946020939093013593505050565b60008060006060848603121561131657600080fd5b61131f846112ae565b925061132d602085016112ae565b9150604084013590509250925092565b60006020828403121561134f57600080fd5b611358826112ae565b9392505050565b600080600080600080600060e0888a03121561137a57600080fd5b611383886112ae565b9650611391602089016112ae565b95506040880135945060608801359350608088013560ff811681146113b557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156113e557600080fd5b6113ee836112ae565b91506113fc602084016112ae565b90509250929050565b600181811c9082168061141957607f821691505b602082108103611452577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561149a5761149a611458565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036114d0576114d0611458565b506001019056fea264697066735822122094134962e5fa2f6357086a2590b7f3a754d340b16e5312664d82a308bc23a0df64736f6c634300080f0033a26469706673582212208ab6fb3903678943dce239f2d5af5eb41bb3f9557f221a30c64e308f374fa28464736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50615a02806100206000396000f3fe608060405260043610620001ff5760003560e01c80637b6323c11162000117578063d02103ca11620000a1578063e7a5b4ea116200006c578063e7a5b4ea14620006de578063ed6be5c91462000703578063f2fde38b146200071a578063ff634ed7146200073f57600080fd5b8063d02103ca1462000659578063d96a15f7146200067b578063dbc169761462000692578063e737588114620006aa57600080fd5b806391e57e2d11620000e257806391e57e2d14620005bd578063a08e8a0814620005d5578063aaa13cc214620005ff578063bab161bf146200062457600080fd5b80637b6323c1146200051c57806381b1c17414620005415780638da5cb5b146200057b5780638f611519146200059b57600080fd5b80632dfdf0b511620001995780633e19704311620001645780633e19704314620003d95780634638554914620004ba5780636555954014620004df578063715018a6146200050457600080fd5b80632dfdf0b51462000315578063318aee3d146200032d5780633ae05047146200039c5780633da8168214620003b457600080fd5b80632072f6c511620001da5780632072f6c5146200027557806322e95f2c146200028d5780632b5e42e714620002cb5780632c3f58cd14620002f057600080fd5b80630871e97114620002045780630e1da6c3146200021d57806315064c961462000248575b600080fd5b6200021b6200021536600462003301565b62000756565b005b3480156200022a57600080fd5b5062000235608d5481565b6040519081526020015b60405180910390f35b3480156200025557600080fd5b50602254620002649060ff1681565b60405190151581526020016200023f565b3480156200028257600080fd5b506200021b62000812565b3480156200029a57600080fd5b50620002b2620002ac3660046200338e565b620008c6565b6040516001600160a01b0390911681526020016200023f565b348015620002d857600080fd5b506200021b620002ea366004620033ca565b62000949565b348015620002fd57600080fd5b506200021b6200030f366004620033e4565b62000958565b3480156200032257600080fd5b506200023560215481565b3480156200033a57600080fd5b50620003776200034c36600462003409565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200023f565b348015620003a957600080fd5b506200023562000999565b348015620003c157600080fd5b5062000264620003d33660046200350a565b62000a8c565b348015620003e657600080fd5b5062000235620003f836600462003588565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004c757600080fd5b506200021b620004d936600462003699565b62000b8e565b348015620004ec57600080fd5b506200021b620004fe36600462003780565b62000e14565b3480156200051157600080fd5b506200021b62001006565b3480156200052957600080fd5b506200021b6200053b36600462003699565b6200101c565b3480156200054e57600080fd5b50620002b262000560366004620033ca565b6089602052600090815260409020546001600160a01b031681565b3480156200058857600080fd5b506055546001600160a01b0316620002b2565b348015620005a857600080fd5b50608c54620002b2906001600160a01b031681565b348015620005ca57600080fd5b5062000235608e5481565b348015620005e257600080fd5b50620005ec600081565b60405160ff90911681526020016200023f565b3480156200060c57600080fd5b50620002b26200061e366004620037d6565b620015de565b3480156200063157600080fd5b50608754620006439063ffffffff1681565b60405163ffffffff90911681526020016200023f565b3480156200066657600080fd5b50608b54620002b2906001600160a01b031681565b6200021b6200068c3660046200388a565b6200174a565b3480156200069f57600080fd5b506200021b620019fe565b348015620006b757600080fd5b5062000264620006c9366004620033ca565b60886020526000908152604090205460ff1681565b348015620006eb57600080fd5b506200021b620006fd366004620033ca565b62001ab0565b3480156200071057600080fd5b5062000643600081565b3480156200072757600080fd5b506200021b6200073936600462003409565b62001af5565b3480156200074c57600080fd5b50620005ec600181565b608e54341115620007fa5760405162461bcd60e51b815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6200080a86868686868662001b8b565b505050505050565b608c546001600160a01b03163314620008ba5760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c462002131565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b620009536200220a565b608e55565b620009626200220a565b608780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b602154600090819081805b602081101562000a83578260011660010362000a045760018160208110620009d057620009d0620038f2565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000a31565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a3e60028462003950565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000a7a906200398c565b915050620009a4565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000b7f578160011660010362000b095786818151811062000ac75762000ac7620038f2565b60200260200101518360405160200162000aeb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000b5b565b8287828151811062000b1f5762000b1f620038f2565b602002602001015160405160200162000b42929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000b6860028362003950565b91508062000b76816200398c565b91505062000a9c565b5050821490505b949350505050565b60225460ff161562000c2f5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b62000c458a8a8a8a8a8a8a8a8a8a600162002266565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b03851690849062000c889089908b90879060240162003a24565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162000ced919062003a5d565b60006040518083038185875af1925050503d806000811462000d2c576040519150601f19603f3d011682016040523d82523d6000602084013e62000d31565b606091505b505090508062000da95760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff161580801562000e355750600054600160ff909116105b8062000e515750303b15801562000e51575060005460ff166001145b62000ec55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007f1565b6000805460ff19166001179055801562000f0657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d8290556703782dace9d90000608e5562000f9b62002619565b801562000fff57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b620010106200220a565b620008c460006200269e565b60225460ff1615620010bd5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b620010d38a8a8a8a8a8a8a8a8a8a600062002266565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620011f257604080516000808252602082019092526001600160a01b0385169084906040516200112e919062003a5d565b60006040518083038185875af1925050503d80600081146200116d576040519150601f19603f3d011682016040523d82523d6000602084013e62001172565b606091505b5050905080620011eb5760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c4544000000000000000000000000000000000000000000000000006064820152608401620007f1565b5062001574565b60875463ffffffff9081169087160362001222576200121c6001600160a01b038616848462002708565b62001574565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620014e057600080600085806020019051810190620012c2919062003ac7565b925092509250600085848484604051620012dc906200326a565b620012ea9392919062003b48565b8190604051809103906000f59050801580156200130b573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001379573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200139f919062003b94565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620014ce9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001571565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001549573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200156f919062003b94565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162001661906200326a565b601f1982820381018352601f9091011660408190526200168e908d908d908d908d908d9060200162003bdf565b60408051601f1981840301815290829052620016ae929160200162003c20565b604051602081830303815290604052805190602001206040516020016200172494939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620017eb5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff908116908416036200186e5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620018bb9260019263ffffffff9092169133918991899134918a919062003c53565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200198b90620027b8565b608b546001600160a01b03166333d6247d620019a662000999565b6040518263ffffffff1660e01b8152600401620019c591815260200190565b600060405180830381600087803b158015620019e057600080fd5b505af1158015620019f5573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001aa65760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c462002917565b62001aba6200220a565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001aff6200220a565b6001600160a01b03811662001b7d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007f1565b62001b88816200269e565b50565b60225460ff161562001c2c5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff9081169086160362001caf5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b60008060606001600160a01b03891662001d445785341462001d3a5760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007f1565b6000915062001fce565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001e2b576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562001df2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e18919062003b94565b5060208101518151909450925062001fcc565b841562001e405762001e408a888888620029c6565b62001e576001600160a01b038b1633308a62002feb565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001eae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001ed8919081019062003cbf565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001f17573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001f41919081019062003cbf565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001f80573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001fa6919062003cf8565b60405160200162001fba9392919062003b48565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200201098979695949392919062003c53565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620020b890620027b8565b608b546001600160a01b03166333d6247d620020d362000999565b6040518263ffffffff1660e01b8152600401620020f291815260200190565b600060405180830381600087803b1580156200210d57600080fd5b505af115801562002122573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff1615620021d25760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6055546001600160a01b03163314620008c45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007f1565b63ffffffff8a1660009081526088602052604090205460ff1615620022f35760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562002380573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620023a6919062003d18565b90508015801590620023c55750608d54620023c2824262003d32565b10155b6200245f5760405162461bcd60e51b815260206004820152604260248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c49445f4f525f4e4f545f5945545f434c41494d414260648201527f4c45000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff878116911614620024e15760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000006064820152608401620007f1565b60875460009063ffffffff16620024fa575088620024fd565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d820152605181018990526071808201939093528151808203909301835260910190528051910120620025cb908e8e63ffffffff168462000a8c565b620021225760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c49446044820152606401620007f1565b600054610100900460ff16620026985760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007f1565b620008c4335b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620027b39084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262003044565b505050565b806001620027c96020600262003e85565b620027d5919062003d32565b602154106200284d5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007f1565b60016021600082825462002862919062003e93565b909155505060215460005b60208110156200290c5781600116600103620028a25782600182602081106200289a576200289a620038f2565b015550505050565b60018160208110620028b857620028b8620038f2565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620028f5919062003950565b91508062002903816200398c565b9150506200286d565b50620027b362003eae565b60225460ff16620029915760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620007f1565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b600062002a0983838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200313092505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002d0b57600080808080808062002a6c896004818d62003edd565b81019062002a7b919062003f09565b9650965096509650965096509650336001600160a01b0316876001600160a01b03161462002b125760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038616301462002b925760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b8a851462002c095760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002cb7919062003a5d565b6000604051808303816000865af19150503d806000811462002cf6576040519150601f19603f3d011682016040523d82523d6000602084013e62002cfb565b606091505b5050505050505050505062000fff565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002d9e5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007f1565b60008080808080808062002db68a6004818e62003edd565b81019062002dc5919062003f64565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462002e5e5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038716301462002ede5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002f95919062003a5d565b6000604051808303816000865af19150503d806000811462002fd4576040519150601f19603f3d011682016040523d82523d6000602084013e62002fd9565b606091505b50505050505050505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526200303e9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016200274e565b50505050565b60006200309b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620031379092919063ffffffff16565b805190915015620027b35780806020019051810190620030bc919062003b94565b620027b35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007f1565b6020015190565b606062000b86848460008585600080866001600160a01b0316858760405162003161919062003a5d565b60006040518083038185875af1925050503d8060008114620031a0576040519150601f19603f3d011682016040523d82523d6000602084013e620031a5565b606091505b5091509150620031b887838387620031c3565b979650505050505050565b60608315620032375782516000036200322f576001600160a01b0385163b6200322f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007f1565b508162000b86565b62000b8683838151156200324e5781518083602001fd5b8060405162461bcd60e51b8152600401620007f1919062003ff0565b6119c7806200400683390190565b6001600160a01b038116811462001b8857600080fd5b80356200329b8162003278565b919050565b803563ffffffff811681146200329b57600080fd5b60008083601f840112620032c857600080fd5b50813567ffffffffffffffff811115620032e157600080fd5b602083019150836020828501011115620032fa57600080fd5b9250929050565b60008060008060008060a087890312156200331b57600080fd5b8635620033288162003278565b95506200333860208801620032a0565b945060408701356200334a8162003278565b935060608701359250608087013567ffffffffffffffff8111156200336e57600080fd5b6200337c89828a01620032b5565b979a9699509497509295939492505050565b60008060408385031215620033a257600080fd5b620033ad83620032a0565b91506020830135620033bf8162003278565b809150509250929050565b600060208284031215620033dd57600080fd5b5035919050565b600060208284031215620033f757600080fd5b6200340282620032a0565b9392505050565b6000602082840312156200341c57600080fd5b8135620034028162003278565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171562003484576200348462003429565b604052919050565b600082601f8301126200349e57600080fd5b8135602067ffffffffffffffff821115620034bd57620034bd62003429565b8160051b620034ce82820162003458565b9283528481018201928281019087851115620034e957600080fd5b83870192505b84831015620031b857823582529183019190830190620034ef565b600080600080608085870312156200352157600080fd5b84359350602085013567ffffffffffffffff808211156200354157600080fd5b6200354f888389016200348c565b94506040870135915080821682146200356757600080fd5b509396929550929360600135925050565b60ff8116811462001b8857600080fd5b600080600080600080600060e0888a031215620035a457600080fd5b8735620035b18162003578565b9650620035c160208901620032a0565b95506040880135620035d38162003278565b9450620035e360608901620032a0565b93506080880135620035f58162003278565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200362f576200362f62003429565b50601f01601f191660200190565b600082601f8301126200364f57600080fd5b813562003666620036608262003612565b62003458565b8181528460208386010111156200367c57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620036ba57600080fd5b8a3567ffffffffffffffff80821115620036d357600080fd5b620036e18e838f016200348c565b9b50620036f160208e01620032a0565b9a5060408d0135995060608d013598506200370f60808e01620032a0565b97506200371f60a08e016200328e565b96506200372f60c08e01620032a0565b95506200373f60e08e016200328e565b94506101008d013593506101208d01359150808211156200375f57600080fd5b506200376e8d828e016200363d565b9150509295989b9194979a5092959850565b600080600080608085870312156200379757600080fd5b620037a285620032a0565b93506020850135620037b48162003278565b92506040850135620037c68162003278565b9396929550929360600135925050565b600080600080600080600060a0888a031215620037f257600080fd5b620037fd88620032a0565b965060208801356200380f8162003278565b9550604088013567ffffffffffffffff808211156200382d57600080fd5b6200383b8b838c01620032b5565b909750955060608a01359150808211156200385557600080fd5b50620038648a828b01620032b5565b90945092505060808801356200387a8162003578565b8091505092959891949750929550565b600080600060608486031215620038a057600080fd5b620038ab84620032a0565b92506020840135620038bd8162003278565b9150604084013567ffffffffffffffff811115620038da57600080fd5b620038e8868287016200363d565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003987577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620039c057620039c062003921565b5060010190565b60005b83811015620039e4578181015183820152602001620039ca565b838111156200303e5750506000910152565b6000815180845262003a10816020860160208601620039c7565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003a546060830184620039f6565b95945050505050565b6000825162003a71818460208701620039c7565b9190910192915050565b600082601f83011262003a8d57600080fd5b815162003a9e620036608262003612565b81815284602083860101111562003ab457600080fd5b62000b86826020830160208701620039c7565b60008060006060848603121562003add57600080fd5b835167ffffffffffffffff8082111562003af657600080fd5b62003b048783880162003a7b565b9450602086015191508082111562003b1b57600080fd5b5062003b2a8682870162003a7b565b925050604084015162003b3d8162003578565b809150509250925092565b60608152600062003b5d6060830186620039f6565b828103602084015262003b718186620039f6565b91505060ff83166040830152949350505050565b801515811462001b8857600080fd5b60006020828403121562003ba757600080fd5b8151620034028162003b85565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003bf560608301878962003bb4565b828103602084015262003c0a81868862003bb4565b91505060ff831660408301529695505050505050565b6000835162003c34818460208801620039c7565b83519083019062003c4a818360208801620039c7565b01949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003ca682850187620039f6565b925080851660e085015250509998505050505050505050565b60006020828403121562003cd257600080fd5b815167ffffffffffffffff81111562003cea57600080fd5b62000b868482850162003a7b565b60006020828403121562003d0b57600080fd5b8151620034028162003578565b60006020828403121562003d2b57600080fd5b5051919050565b60008282101562003d475762003d4762003921565b500390565b600181815b8085111562003dab57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d8f5762003d8f62003921565b8085161562003d9d57918102915b93841c939080029062003d51565b509250929050565b60008262003dc45750600162000943565b8162003dd35750600062000943565b816001811462003dec576002811462003df75762003e17565b600191505062000943565b60ff84111562003e0b5762003e0b62003921565b50506001821b62000943565b5060208310610133831016604e8410600b841016171562003e3c575081810a62000943565b62003e48838362003d4c565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003e7d5762003e7d62003921565b029392505050565b600062003402838362003db3565b6000821982111562003ea95762003ea962003921565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000808585111562003eee57600080fd5b8386111562003efc57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003f2557600080fd5b873562003f328162003278565b9650602088013562003f448162003278565b955060408801359450606088013593506080880135620035f58162003578565b600080600080600080600080610100898b03121562003f8257600080fd5b883562003f8f8162003278565b9750602089013562003fa18162003278565b96506040890135955060608901359450608089013562003fc18162003b85565b935060a089013562003fd38162003578565b979a969950949793969295929450505060c08201359160e0013590565b602081526000620034026020830184620039f656fe60c06040523480156200001157600080fd5b50604051620019c7380380620019c78339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161150d620004ba600039600061053001526000818161036f01526104fa015261150d6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b604051610191919061123b565b60405180910390f35b6101ad6101a83660046112d7565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad610204366004611301565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad6102763660046112d7565b610552565b6101ad6102893660046112d7565b61059e565b6101c161029c36600461133d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d236600461133d565b60066020526000908152604090205481565b610184610645565b6101ad6102fa3660046112d7565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad6103523660046112d7565b6106ed565b6101ad6103653660046112d7565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f36600461135f565b6107b2565b005b6101c16103b43660046113d2565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043790611405565b80601f016020809104026020016040519081016040528092919081815260200182805461046390611405565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f12565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611487565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c8383610fda565b50600192915050565b60606004805461043790611405565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c83836110b3565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866108818361149f565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f3d610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff821661103d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b806002600082825461104f9190611487565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff821661113c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156111d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610c27565b600060208083528351808285015260005b818110156112685785810183015185820160400152820161124c565b8181111561127a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112d257600080fd5b919050565b600080604083850312156112ea57600080fd5b6112f3836112ae565b946020939093013593505050565b60008060006060848603121561131657600080fd5b61131f846112ae565b925061132d602085016112ae565b9150604084013590509250925092565b60006020828403121561134f57600080fd5b611358826112ae565b9392505050565b600080600080600080600060e0888a03121561137a57600080fd5b611383886112ae565b9650611391602089016112ae565b95506040880135945060608801359350608088013560ff811681146113b557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156113e557600080fd5b6113ee836112ae565b91506113fc602084016112ae565b90509250929050565b600181811c9082168061141957607f821691505b602082108103611452577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561149a5761149a611458565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036114d0576114d0611458565b506001019056fea264697066735822122094134962e5fa2f6357086a2590b7f3a754d340b16e5312664d82a308bc23a0df64736f6c634300080f0033a2646970667358221220e63c82aeb9c625edac6379067d61515cfcb4e7d919995ea9f008f310c81c9e0d64736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001ff5760003560e01c80637b6323c11162000117578063d02103ca11620000a1578063e7a5b4ea116200006c578063e7a5b4ea14620006de578063ed6be5c91462000703578063f2fde38b146200071a578063ff634ed7146200073f57600080fd5b8063d02103ca1462000659578063d96a15f7146200067b578063dbc169761462000692578063e737588114620006aa57600080fd5b806391e57e2d11620000e257806391e57e2d14620005bd578063a08e8a0814620005d5578063aaa13cc214620005ff578063bab161bf146200062457600080fd5b80637b6323c1146200051c57806381b1c17414620005415780638da5cb5b146200057b5780638f611519146200059b57600080fd5b80632dfdf0b511620001995780633e19704311620001645780633e19704314620003d95780634638554914620004ba5780636555954014620004df578063715018a6146200050457600080fd5b80632dfdf0b51462000315578063318aee3d146200032d5780633ae05047146200039c5780633da8168214620003b457600080fd5b80632072f6c511620001da5780632072f6c5146200027557806322e95f2c146200028d5780632b5e42e714620002cb5780632c3f58cd14620002f057600080fd5b80630871e97114620002045780630e1da6c3146200021d57806315064c961462000248575b600080fd5b6200021b6200021536600462003301565b62000756565b005b3480156200022a57600080fd5b5062000235608d5481565b6040519081526020015b60405180910390f35b3480156200025557600080fd5b50602254620002649060ff1681565b60405190151581526020016200023f565b3480156200028257600080fd5b506200021b62000812565b3480156200029a57600080fd5b50620002b2620002ac3660046200338e565b620008c6565b6040516001600160a01b0390911681526020016200023f565b348015620002d857600080fd5b506200021b620002ea366004620033ca565b62000949565b348015620002fd57600080fd5b506200021b6200030f366004620033e4565b62000958565b3480156200032257600080fd5b506200023560215481565b3480156200033a57600080fd5b50620003776200034c36600462003409565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200023f565b348015620003a957600080fd5b506200023562000999565b348015620003c157600080fd5b5062000264620003d33660046200350a565b62000a8c565b348015620003e657600080fd5b5062000235620003f836600462003588565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004c757600080fd5b506200021b620004d936600462003699565b62000b8e565b348015620004ec57600080fd5b506200021b620004fe36600462003780565b62000e14565b3480156200051157600080fd5b506200021b62001006565b3480156200052957600080fd5b506200021b6200053b36600462003699565b6200101c565b3480156200054e57600080fd5b50620002b262000560366004620033ca565b6089602052600090815260409020546001600160a01b031681565b3480156200058857600080fd5b506055546001600160a01b0316620002b2565b348015620005a857600080fd5b50608c54620002b2906001600160a01b031681565b348015620005ca57600080fd5b5062000235608e5481565b348015620005e257600080fd5b50620005ec600081565b60405160ff90911681526020016200023f565b3480156200060c57600080fd5b50620002b26200061e366004620037d6565b620015de565b3480156200063157600080fd5b50608754620006439063ffffffff1681565b60405163ffffffff90911681526020016200023f565b3480156200066657600080fd5b50608b54620002b2906001600160a01b031681565b6200021b6200068c3660046200388a565b6200174a565b3480156200069f57600080fd5b506200021b620019fe565b348015620006b757600080fd5b5062000264620006c9366004620033ca565b60886020526000908152604090205460ff1681565b348015620006eb57600080fd5b506200021b620006fd366004620033ca565b62001ab0565b3480156200071057600080fd5b5062000643600081565b3480156200072757600080fd5b506200021b6200073936600462003409565b62001af5565b3480156200074c57600080fd5b50620005ec600181565b608e54341115620007fa5760405162461bcd60e51b815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6200080a86868686868662001b8b565b505050505050565b608c546001600160a01b03163314620008ba5760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c462002131565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b620009536200220a565b608e55565b620009626200220a565b608780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b602154600090819081805b602081101562000a83578260011660010362000a045760018160208110620009d057620009d0620038f2565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000a31565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a3e60028462003950565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000a7a906200398c565b915050620009a4565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000b7f578160011660010362000b095786818151811062000ac75762000ac7620038f2565b60200260200101518360405160200162000aeb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000b5b565b8287828151811062000b1f5762000b1f620038f2565b602002602001015160405160200162000b42929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000b6860028362003950565b91508062000b76816200398c565b91505062000a9c565b5050821490505b949350505050565b60225460ff161562000c2f5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b62000c458a8a8a8a8a8a8a8a8a8a600162002266565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b03851690849062000c889089908b90879060240162003a24565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162000ced919062003a5d565b60006040518083038185875af1925050503d806000811462000d2c576040519150601f19603f3d011682016040523d82523d6000602084013e62000d31565b606091505b505090508062000da95760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff161580801562000e355750600054600160ff909116105b8062000e515750303b15801562000e51575060005460ff166001145b62000ec55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007f1565b6000805460ff19166001179055801562000f0657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d8290556703782dace9d90000608e5562000f9b62002619565b801562000fff57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b620010106200220a565b620008c460006200269e565b60225460ff1615620010bd5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b620010d38a8a8a8a8a8a8a8a8a8a600062002266565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620011f257604080516000808252602082019092526001600160a01b0385169084906040516200112e919062003a5d565b60006040518083038185875af1925050503d80600081146200116d576040519150601f19603f3d011682016040523d82523d6000602084013e62001172565b606091505b5050905080620011eb5760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c4544000000000000000000000000000000000000000000000000006064820152608401620007f1565b5062001574565b60875463ffffffff9081169087160362001222576200121c6001600160a01b038616848462002708565b62001574565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620014e057600080600085806020019051810190620012c2919062003ac7565b925092509250600085848484604051620012dc906200326a565b620012ea9392919062003b48565b8190604051809103906000f59050801580156200130b573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001379573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200139f919062003b94565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620014ce9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001571565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001549573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200156f919062003b94565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162001661906200326a565b601f1982820381018352601f9091011660408190526200168e908d908d908d908d908d9060200162003bdf565b60408051601f1981840301815290829052620016ae929160200162003c20565b604051602081830303815290604052805190602001206040516020016200172494939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620017eb5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff908116908416036200186e5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620018bb9260019263ffffffff9092169133918991899134918a919062003c53565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200198b90620027b8565b608b546001600160a01b03166333d6247d620019a662000999565b6040518263ffffffff1660e01b8152600401620019c591815260200190565b600060405180830381600087803b158015620019e057600080fd5b505af1158015620019f5573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001aa65760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c462002917565b62001aba6200220a565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001aff6200220a565b6001600160a01b03811662001b7d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007f1565b62001b88816200269e565b50565b60225460ff161562001c2c5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff9081169086160362001caf5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b60008060606001600160a01b03891662001d445785341462001d3a5760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007f1565b6000915062001fce565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001e2b576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562001df2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e18919062003b94565b5060208101518151909450925062001fcc565b841562001e405762001e408a888888620029c6565b62001e576001600160a01b038b1633308a62002feb565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001eae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001ed8919081019062003cbf565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001f17573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001f41919081019062003cbf565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001f80573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001fa6919062003cf8565b60405160200162001fba9392919062003b48565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200201098979695949392919062003c53565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620020b890620027b8565b608b546001600160a01b03166333d6247d620020d362000999565b6040518263ffffffff1660e01b8152600401620020f291815260200190565b600060405180830381600087803b1580156200210d57600080fd5b505af115801562002122573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff1615620021d25760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6055546001600160a01b03163314620008c45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007f1565b63ffffffff8a1660009081526088602052604090205460ff1615620022f35760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562002380573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620023a6919062003d18565b90508015801590620023c55750608d54620023c2824262003d32565b10155b6200245f5760405162461bcd60e51b815260206004820152604260248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c49445f4f525f4e4f545f5945545f434c41494d414260648201527f4c45000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff878116911614620024e15760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000006064820152608401620007f1565b60875460009063ffffffff16620024fa575088620024fd565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d820152605181018990526071808201939093528151808203909301835260910190528051910120620025cb908e8e63ffffffff168462000a8c565b620021225760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c49446044820152606401620007f1565b600054610100900460ff16620026985760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007f1565b620008c4335b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620027b39084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262003044565b505050565b806001620027c96020600262003e85565b620027d5919062003d32565b602154106200284d5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007f1565b60016021600082825462002862919062003e93565b909155505060215460005b60208110156200290c5781600116600103620028a25782600182602081106200289a576200289a620038f2565b015550505050565b60018160208110620028b857620028b8620038f2565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620028f5919062003950565b91508062002903816200398c565b9150506200286d565b50620027b362003eae565b60225460ff16620029915760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620007f1565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b600062002a0983838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200313092505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002d0b57600080808080808062002a6c896004818d62003edd565b81019062002a7b919062003f09565b9650965096509650965096509650336001600160a01b0316876001600160a01b03161462002b125760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038616301462002b925760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b8a851462002c095760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002cb7919062003a5d565b6000604051808303816000865af19150503d806000811462002cf6576040519150601f19603f3d011682016040523d82523d6000602084013e62002cfb565b606091505b5050505050505050505062000fff565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002d9e5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007f1565b60008080808080808062002db68a6004818e62003edd565b81019062002dc5919062003f64565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462002e5e5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038716301462002ede5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002f95919062003a5d565b6000604051808303816000865af19150503d806000811462002fd4576040519150601f19603f3d011682016040523d82523d6000602084013e62002fd9565b606091505b50505050505050505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526200303e9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016200274e565b50505050565b60006200309b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620031379092919063ffffffff16565b805190915015620027b35780806020019051810190620030bc919062003b94565b620027b35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007f1565b6020015190565b606062000b86848460008585600080866001600160a01b0316858760405162003161919062003a5d565b60006040518083038185875af1925050503d8060008114620031a0576040519150601f19603f3d011682016040523d82523d6000602084013e620031a5565b606091505b5091509150620031b887838387620031c3565b979650505050505050565b60608315620032375782516000036200322f576001600160a01b0385163b6200322f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007f1565b508162000b86565b62000b8683838151156200324e5781518083602001fd5b8060405162461bcd60e51b8152600401620007f1919062003ff0565b6119c7806200400683390190565b6001600160a01b038116811462001b8857600080fd5b80356200329b8162003278565b919050565b803563ffffffff811681146200329b57600080fd5b60008083601f840112620032c857600080fd5b50813567ffffffffffffffff811115620032e157600080fd5b602083019150836020828501011115620032fa57600080fd5b9250929050565b60008060008060008060a087890312156200331b57600080fd5b8635620033288162003278565b95506200333860208801620032a0565b945060408701356200334a8162003278565b935060608701359250608087013567ffffffffffffffff8111156200336e57600080fd5b6200337c89828a01620032b5565b979a9699509497509295939492505050565b60008060408385031215620033a257600080fd5b620033ad83620032a0565b91506020830135620033bf8162003278565b809150509250929050565b600060208284031215620033dd57600080fd5b5035919050565b600060208284031215620033f757600080fd5b6200340282620032a0565b9392505050565b6000602082840312156200341c57600080fd5b8135620034028162003278565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171562003484576200348462003429565b604052919050565b600082601f8301126200349e57600080fd5b8135602067ffffffffffffffff821115620034bd57620034bd62003429565b8160051b620034ce82820162003458565b9283528481018201928281019087851115620034e957600080fd5b83870192505b84831015620031b857823582529183019190830190620034ef565b600080600080608085870312156200352157600080fd5b84359350602085013567ffffffffffffffff808211156200354157600080fd5b6200354f888389016200348c565b94506040870135915080821682146200356757600080fd5b509396929550929360600135925050565b60ff8116811462001b8857600080fd5b600080600080600080600060e0888a031215620035a457600080fd5b8735620035b18162003578565b9650620035c160208901620032a0565b95506040880135620035d38162003278565b9450620035e360608901620032a0565b93506080880135620035f58162003278565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200362f576200362f62003429565b50601f01601f191660200190565b600082601f8301126200364f57600080fd5b813562003666620036608262003612565b62003458565b8181528460208386010111156200367c57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620036ba57600080fd5b8a3567ffffffffffffffff80821115620036d357600080fd5b620036e18e838f016200348c565b9b50620036f160208e01620032a0565b9a5060408d0135995060608d013598506200370f60808e01620032a0565b97506200371f60a08e016200328e565b96506200372f60c08e01620032a0565b95506200373f60e08e016200328e565b94506101008d013593506101208d01359150808211156200375f57600080fd5b506200376e8d828e016200363d565b9150509295989b9194979a5092959850565b600080600080608085870312156200379757600080fd5b620037a285620032a0565b93506020850135620037b48162003278565b92506040850135620037c68162003278565b9396929550929360600135925050565b600080600080600080600060a0888a031215620037f257600080fd5b620037fd88620032a0565b965060208801356200380f8162003278565b9550604088013567ffffffffffffffff808211156200382d57600080fd5b6200383b8b838c01620032b5565b909750955060608a01359150808211156200385557600080fd5b50620038648a828b01620032b5565b90945092505060808801356200387a8162003578565b8091505092959891949750929550565b600080600060608486031215620038a057600080fd5b620038ab84620032a0565b92506020840135620038bd8162003278565b9150604084013567ffffffffffffffff811115620038da57600080fd5b620038e8868287016200363d565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003987577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620039c057620039c062003921565b5060010190565b60005b83811015620039e4578181015183820152602001620039ca565b838111156200303e5750506000910152565b6000815180845262003a10816020860160208601620039c7565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003a546060830184620039f6565b95945050505050565b6000825162003a71818460208701620039c7565b9190910192915050565b600082601f83011262003a8d57600080fd5b815162003a9e620036608262003612565b81815284602083860101111562003ab457600080fd5b62000b86826020830160208701620039c7565b60008060006060848603121562003add57600080fd5b835167ffffffffffffffff8082111562003af657600080fd5b62003b048783880162003a7b565b9450602086015191508082111562003b1b57600080fd5b5062003b2a8682870162003a7b565b925050604084015162003b3d8162003578565b809150509250925092565b60608152600062003b5d6060830186620039f6565b828103602084015262003b718186620039f6565b91505060ff83166040830152949350505050565b801515811462001b8857600080fd5b60006020828403121562003ba757600080fd5b8151620034028162003b85565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003bf560608301878962003bb4565b828103602084015262003c0a81868862003bb4565b91505060ff831660408301529695505050505050565b6000835162003c34818460208801620039c7565b83519083019062003c4a818360208801620039c7565b01949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003ca682850187620039f6565b925080851660e085015250509998505050505050505050565b60006020828403121562003cd257600080fd5b815167ffffffffffffffff81111562003cea57600080fd5b62000b868482850162003a7b565b60006020828403121562003d0b57600080fd5b8151620034028162003578565b60006020828403121562003d2b57600080fd5b5051919050565b60008282101562003d475762003d4762003921565b500390565b600181815b8085111562003dab57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d8f5762003d8f62003921565b8085161562003d9d57918102915b93841c939080029062003d51565b509250929050565b60008262003dc45750600162000943565b8162003dd35750600062000943565b816001811462003dec576002811462003df75762003e17565b600191505062000943565b60ff84111562003e0b5762003e0b62003921565b50506001821b62000943565b5060208310610133831016604e8410600b841016171562003e3c575081810a62000943565b62003e48838362003d4c565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003e7d5762003e7d62003921565b029392505050565b600062003402838362003db3565b6000821982111562003ea95762003ea962003921565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000808585111562003eee57600080fd5b8386111562003efc57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003f2557600080fd5b873562003f328162003278565b9650602088013562003f448162003278565b955060408801359450606088013593506080880135620035f58162003578565b600080600080600080600080610100898b03121562003f8257600080fd5b883562003f8f8162003278565b9750602089013562003fa18162003278565b96506040890135955060608901359450608089013562003fc18162003b85565b935060a089013562003fd38162003578565b979a969950949793969295929450505060c08201359160e0013590565b602081526000620034026020830184620039f656fe60c06040523480156200001157600080fd5b50604051620019c7380380620019c78339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161150d620004ba600039600061053001526000818161036f01526104fa015261150d6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b604051610191919061123b565b60405180910390f35b6101ad6101a83660046112d7565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad610204366004611301565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad6102763660046112d7565b610552565b6101ad6102893660046112d7565b61059e565b6101c161029c36600461133d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d236600461133d565b60066020526000908152604090205481565b610184610645565b6101ad6102fa3660046112d7565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad6103523660046112d7565b6106ed565b6101ad6103653660046112d7565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f36600461135f565b6107b2565b005b6101c16103b43660046113d2565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043790611405565b80601f016020809104026020016040519081016040528092919081815260200182805461046390611405565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f12565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611487565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c8383610fda565b50600192915050565b60606004805461043790611405565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c83836110b3565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866108818361149f565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f3d610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff821661103d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b806002600082825461104f9190611487565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff821661113c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156111d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610c27565b600060208083528351808285015260005b818110156112685785810183015185820160400152820161124c565b8181111561127a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112d257600080fd5b919050565b600080604083850312156112ea57600080fd5b6112f3836112ae565b946020939093013593505050565b60008060006060848603121561131657600080fd5b61131f846112ae565b925061132d602085016112ae565b9150604084013590509250925092565b60006020828403121561134f57600080fd5b611358826112ae565b9392505050565b600080600080600080600060e0888a03121561137a57600080fd5b611383886112ae565b9650611391602089016112ae565b95506040880135945060608801359350608088013560ff811681146113b557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156113e557600080fd5b6113ee836112ae565b91506113fc602084016112ae565b90509250929050565b600181811c9082168061141957607f821691505b602082108103611452577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561149a5761149a611458565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036114d0576114d0611458565b506001019056fea264697066735822122094134962e5fa2f6357086a2590b7f3a754d340b16e5312664d82a308bc23a0df64736f6c634300080f0033a2646970667358221220e63c82aeb9c625edac6379067d61515cfcb4e7d919995ea9f008f310c81c9e0d64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/ProofOfEfficiency.json b/compiled-contracts/ProofOfEfficiency.json index 6a8b74565..f7f531e43 100644 --- a/compiled-contracts/ProofOfEfficiency.json +++ b/compiled-contracts/ProofOfEfficiency.json @@ -896,8 +896,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5061494a806100206000396000f3fe608060405234801561001057600080fd5b50600436106102c85760003560e01c80638da5cb5b1161017b578063cfa8ed47116100d8578063e7a7ed021161008c578063eaeb077b11610071578063eaeb077b14610687578063f2fde38b1461069a578063f7552761146106ad57600080fd5b8063e7a7ed0214610637578063e8bf92ed1461066757600080fd5b8063d8d1091b116100bd578063d8d1091b146105ef578063d8f54db014610602578063dbc169761461062f57600080fd5b8063cfa8ed47146105a3578063d02103ca146105cf57600080fd5b8063b02286c01161012f578063b6b0b09711610114578063b6b0b09714610558578063c3fd0f9c1461057d578063c89e42df1461059057600080fd5b8063b02286c01461052f578063b4d63f581461053857600080fd5b8063a3c573eb11610160578063a3c573eb146104f1578063ab9fc5ef14610511578063adc879e91461051b57600080fd5b80638da5cb5b146104cb57806399f5634e146104e957600080fd5b8063542028d5116102295780637152facf116101dd5780637fcb3653116101c25780637fcb36531461049157806381df7d3f146104a55780638c4a0af7146104b857600080fd5b80637152facf14610476578063798470571461048957600080fd5b80636b8616ce1161020e5780636b8616ce1461043b5780636ff512cc1461045b578063715018a61461046e57600080fd5b8063542028d51461042057806355b925e61461042857600080fd5b806327eb6c0f11610280578063423fa85611610265578063423fa856146103aa57806345605267146103ca5780635392c5e0146103f257600080fd5b806327eb6c0f146103525780633c1582671461039757600080fd5b806319d8ac61116102b157806319d8ac61146103085780631c1083e2146103355780632072f6c51461034a57600080fd5b8063107bf28c146102cd57806315064c96146102eb575b600080fd5b6102d56106bc565b6040516102e29190613e2c565b60405180910390f35b6065546102f89060ff1681565b60405190151581526020016102e2565b60685461031c9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102e2565b610348610343366004613e78565b61074a565b005b610348610856565b6070546103729073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e2565b6103486103a5366004613fed565b610907565b60685461031c9068010000000000000000900467ffffffffffffffff1681565b60685461031c90700100000000000000000000000000000000900467ffffffffffffffff1681565b610412610400366004614104565b606b6020526000908152604090205481565b6040519081526020016102e2565b6102d5611297565b610348610436366004614136565b6112a4565b610412610449366004614104565b60666020526000908152604090205481565b610348610469366004613e78565b61186d565b610348611987565b6102d56104843660046141b9565b611999565b610412611bd0565b60695461031c9067ffffffffffffffff1681565b6103486104b3366004614214565b611c4a565b6103486104c636600461430e565b611fa3565b60335473ffffffffffffffffffffffffffffffffffffffff16610372565b6104126120bd565b6071546103729073ffffffffffffffffffffffffffffffffffffffff1681565b61031c62093a8081565b606e5461031c9067ffffffffffffffff1681565b61041261ea6081565b610412610546366004614104565b60676020526000908152604090205481565b60655461037290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b61034861058b366004614136565b6121ee565b61034861059e36600461432b565b612838565b6069546103729068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103729073ffffffffffffffffffffffffffffffffffffffff1681565b6103486105fd366004614360565b61290d565b6069546102f8907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610348612fb2565b60685461031c907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103729073ffffffffffffffffffffffffffffffffffffffff1681565b610348610695366004614453565b613141565b6103486106a8366004613e78565b613641565b61041267016345785d8a000081565b606f80546106c990614498565b80601f01602080910402602001604051908101604052809291908181526020018280546106f590614498565b80156107425780601f1061071757610100808354040283529160200191610742565b820191906000526020600020905b81548152906001019060200180831161072557829003601f168201915b505050505081565b60705473ffffffffffffffffffffffffffffffffffffffff1633146107dc5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff16156108f55760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6108fd6136de565b610905613745565b565b60655460ff16156109a65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610a3f5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b805180610ada5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015611088576000878281518110610b4057610b406144eb565b602002602001015190506000816060015167ffffffffffffffff161115610d595783610b6b81614549565b945050600081600001518051906020012082602001518360600151604051602001610bce93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610c9b5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610d535760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016107d3565b50610ef3565b60208101511580610e085750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610dc29160040190815260200190565b6020604051808303816000875af1158015610de1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e059190614570565b15155b610e7a5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016107d3565b80515161ea6011610ef35760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016107d3565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610f29575042816040015167ffffffffffffffff1611155b610fc15760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061106a90614549565b9550508060400151955050808061108090614589565b915050610b24565b5060685467ffffffffffffffff78010000000000000000000000000000000000000000000000009091048116908316111561112b5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016107d3565b60685460009061115990700100000000000000000000000000000000900467ffffffffffffffff16846145c1565b61116d9067ffffffffffffffff16876145ea565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061124a33306112248467016345785d8a0000614601565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169291906137cf565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d80546106c990614498565b60655460ff16156113435760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695467ffffffffffffffff90811690881611156113ef5760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016107d3565b60695467ffffffffffffffff9081169087161161149a5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b602052604090205461154c5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a4016107d3565b600061155a88888888611999565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161158f919061463e565b602060405180830381855afa1580156115ac573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906115cf9190614570565b6115d99190614689565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611643918991899189919060040161469d565b602060405180830381865afa158015611660573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116849190614717565b6116f65760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016107d3565b6069546117549033906117139067ffffffffffffffff168b6145c1565b67ffffffffffffffff166117256120bd565b61172f9190614601565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16919061388d565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b15801561180957600080fd5b505af115801561181d573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146119065760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161084b565b61198f6136de565b61090560006138e8565b67ffffffffffffffff8085166000818152606760205260408082205493871682529020546060929115806119cc57508115155b611a645760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b80611afd5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec01604051602081830303815290604052925050505b949350505050565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691611c1f917801000000000000000000000000000000000000000000000000909104166001614734565b611c2991906145c1565b611c459067ffffffffffffffff16670de0b6b3a7640000614601565b905090565b600054610100900460ff1615808015611c6a5750600054600160ff909116105b80611c845750303b158015611c84575060005460ff166001145b611cf65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107d3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611d5457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d611e9387826147ae565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f611ed485826147ae565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556070805492851692909116919091179055611f3261395f565b8015611f9557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461203c5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061084b90831515815260200190565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612134573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121589190614570565b60695460685491925060009167ffffffffffffffff918216916801000000000000000082048116916121bd91700100000000000000000000000000000000820481169178010000000000000000000000000000000000000000000000009004166145c1565b6121c79190614734565b6121d191906145c1565b67ffffffffffffffff1690506121e781836148aa565b9250505090565b60655460ff161561228d5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b8567ffffffffffffffff168767ffffffffffffffff161061233c5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a4016107d3565b60695467ffffffffffffffff908116908716111561240e5760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c4016107d3565b67ffffffffffffffff87166000908152606b60205260409020546124c05760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a4016107d3565b67ffffffffffffffff86166000908152606b60205260409020546125725760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a4016107d3565b600061258088888888611999565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516125b5919061463e565b602060405180830381855afa1580156125d2573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906125f59190614570565b6125ff9190614689565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91612669918991899189919060040161469d565b602060405180830381865afa158015612686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126aa9190614717565b61271c5760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f460000000060648201526084016107d3565b67ffffffffffffffff88166000908152606b60205260409020548690036127d15760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a4016107d3565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a161282d613745565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146128d15760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606d6128dd82826147ae565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161084b9190613e2c565b60655460ff16156129ac5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612a6f5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180612b0a5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60685467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612b559184917001000000000000000000000000000000009004166148be565b1115612bc95760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016107d3565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b84811015612ee2576000868281518110612c2957612c296144eb565b602002602001015190508380612c3e90614549565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114612d5f5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016107d3565b612d6a6001886145ea565b8303612e28574262093a808360400151612d849190614734565b67ffffffffffffffff161115612e285760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016107d3565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612eca90614549565b96505050508080612eda90614589565b915050612c0d565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff1661302a5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b60705473ffffffffffffffffffffffffffffffffffffffff1633146130b75760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561312157600080fd5b505af1158015613135573d6000803e3d6000fd5b505050506109056139e5565b60655460ff16156131e05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146132a35760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b60006132ad611bd0565b9050818111156133255760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016107d3565b61ea6083511061339d5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016107d3565b6065546133c790610100900473ffffffffffffffffffffffffffffffffffffffff163330846137cf565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345b9190614570565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff1690601861349583614549565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161350e93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260669093529120553233036135de57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261363b565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613632939291906148d6565b60405180910390a25b50505050565b6136496136de565b73ffffffffffffffffffffffffffffffffffffffff81166136d25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107d3565b6136db816138e8565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109055760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156137af57600080fd5b505af11580156137c3573d6000803e3d6000fd5b50505050610905613ab0565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261363b9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613ba5565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526138e39084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401613829565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166139dc5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107d3565b610905336138e8565b60655460ff16613a5d5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff1615613b4f5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6000613c07826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613c979092919063ffffffff16565b8051909150156138e35780806020019051810190613c259190614717565b6138e35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107d3565b6060611bc88484600085856000808673ffffffffffffffffffffffffffffffffffffffff168587604051613ccb919061463e565b60006040518083038185875af1925050503d8060008114613d08576040519150601f19603f3d011682016040523d82523d6000602084013e613d0d565b606091505b5091509150613d1e87838387613d29565b979650505050505050565b60608315613da5578251600003613d9e5773ffffffffffffffffffffffffffffffffffffffff85163b613d9e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107d3565b5081611bc8565b611bc88383815115613dba5781518083602001fd5b8060405162461bcd60e51b81526004016107d39190613e2c565b60005b83811015613def578181015183820152602001613dd7565b8381111561363b5750506000910152565b60008151808452613e18816020860160208601613dd4565b601f01601f19169290920160200192915050565b602081526000613e3f6020830184613e00565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146136db57600080fd5b8035613e7381613e46565b919050565b600060208284031215613e8a57600080fd5b8135613e3f81613e46565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613ee757613ee7613e95565b60405290565b6040516060810167ffffffffffffffff81118282101715613ee757613ee7613e95565b604051601f8201601f1916810167ffffffffffffffff81118282101715613f3957613f39613e95565b604052919050565b600067ffffffffffffffff821115613f5b57613f5b613e95565b5060051b60200190565b600082601f830112613f7657600080fd5b813567ffffffffffffffff811115613f9057613f90613e95565b613fa36020601f19601f84011601613f10565b818152846020838601011115613fb857600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613e7357600080fd5b6000602080838503121561400057600080fd5b823567ffffffffffffffff8082111561401857600080fd5b818501915085601f83011261402c57600080fd5b813561403f61403a82613f41565b613f10565b81815260059190911b8301840190848101908883111561405e57600080fd5b8585015b838110156140f75780358581111561407a5760008081fd5b86016080818c03601f19018113156140925760008081fd5b61409a613ec4565b89830135888111156140ac5760008081fd5b6140ba8e8c83870101613f65565b8252506040808401358b83015260606140d4818601613fd5565b828401526140e3848601613fd5565b908301525085525050918601918601614062565b5098975050505050505050565b60006020828403121561411657600080fd5b613e3f82613fd5565b806040810183101561413057600080fd5b92915050565b6000806000806000806000610180888a03121561415257600080fd5b61415b88613fd5565b965061416960208901613fd5565b955060408801359450606088013593506141868960808a0161411f565b925061014088018981111561419a57600080fd5b60c0890192506141aa8a8261411f565b91505092959891949750929550565b600080600080608085870312156141cf57600080fd5b6141d885613fd5565b93506141e660208601613fd5565b93969395505050506040820135916060013590565b80151581146136db57600080fd5b8035613e73816141fb565b60008060008060008060008060008060006101608c8e03121561423657600080fd5b61423f8c613e68565b9a5061424d60208d01613e68565b995061425b60408d01613e68565b985060608c0135975061427060808d01613e68565b965061427e60a08d01614209565b955067ffffffffffffffff8060c08e0135111561429a57600080fd5b6142aa8e60c08f01358f01613f65565b95506142b860e08e01613fd5565b9450806101008e013511156142cc57600080fd5b506142de8d6101008e01358e01613f65565b92506142ed6101208d01613e68565b91506142fc6101408d01613e68565b90509295989b509295989b9093969950565b60006020828403121561432057600080fd5b8135613e3f816141fb565b60006020828403121561433d57600080fd5b813567ffffffffffffffff81111561435457600080fd5b611bc884828501613f65565b6000602080838503121561437357600080fd5b823567ffffffffffffffff8082111561438b57600080fd5b818501915085601f83011261439f57600080fd5b81356143ad61403a82613f41565b81815260059190911b830184019084810190888311156143cc57600080fd5b8585015b838110156140f7578035858111156143e85760008081fd5b86016060818c03601f19018113156144005760008081fd5b614408613eed565b898301358881111561441a5760008081fd5b6144288e8c83870101613f65565b8252506040808401358b830152614440838501613fd5565b90820152855250509186019186016143d0565b6000806040838503121561446657600080fd5b823567ffffffffffffffff81111561447d57600080fd5b61448985828601613f65565b95602094909401359450505050565b600181811c908216806144ac57607f821691505b6020821081036144e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036145665761456661451a565b6001019392505050565b60006020828403121561458257600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036145ba576145ba61451a565b5060010190565b600067ffffffffffffffff838116908316818110156145e2576145e261451a565b039392505050565b6000828210156145fc576145fc61451a565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146395761463961451a565b500290565b60008251614650818460208701613dd4565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826146985761469861465a565b500690565b61012081016040808784376000838201818152879190815b60028110156146d5578484833790840182815292840192906001016146b5565b5050828760c0870137610100850181815286935091505b600181101561470b5782518252602092830192909101906001016146ec565b50505095945050505050565b60006020828403121561472957600080fd5b8151613e3f816141fb565b600067ffffffffffffffff8083168185168083038211156147575761475761451a565b01949350505050565b601f8211156138e357600081815260208120601f850160051c810160208610156147875750805b601f850160051c820191505b818110156147a657828155600101614793565b505050505050565b815167ffffffffffffffff8111156147c8576147c8613e95565b6147dc816147d68454614498565b84614760565b602080601f83116001811461482f57600084156147f95750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556147a6565b600085815260208120601f198616915b8281101561485e5788860151825594840194600190910190840161483f565b508582101561489a57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000826148b9576148b961465a565b500490565b600082198211156148d1576148d161451a565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff8316602082015260606040820152600061490b6060830184613e00565b9594505050505056fea2646970667358221220e060d003a6df3b282d02b727e8541fe86ad6aa5154fa08bedc64fae66b56376464736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102c85760003560e01c80638da5cb5b1161017b578063cfa8ed47116100d8578063e7a7ed021161008c578063eaeb077b11610071578063eaeb077b14610687578063f2fde38b1461069a578063f7552761146106ad57600080fd5b8063e7a7ed0214610637578063e8bf92ed1461066757600080fd5b8063d8d1091b116100bd578063d8d1091b146105ef578063d8f54db014610602578063dbc169761461062f57600080fd5b8063cfa8ed47146105a3578063d02103ca146105cf57600080fd5b8063b02286c01161012f578063b6b0b09711610114578063b6b0b09714610558578063c3fd0f9c1461057d578063c89e42df1461059057600080fd5b8063b02286c01461052f578063b4d63f581461053857600080fd5b8063a3c573eb11610160578063a3c573eb146104f1578063ab9fc5ef14610511578063adc879e91461051b57600080fd5b80638da5cb5b146104cb57806399f5634e146104e957600080fd5b8063542028d5116102295780637152facf116101dd5780637fcb3653116101c25780637fcb36531461049157806381df7d3f146104a55780638c4a0af7146104b857600080fd5b80637152facf14610476578063798470571461048957600080fd5b80636b8616ce1161020e5780636b8616ce1461043b5780636ff512cc1461045b578063715018a61461046e57600080fd5b8063542028d51461042057806355b925e61461042857600080fd5b806327eb6c0f11610280578063423fa85611610265578063423fa856146103aa57806345605267146103ca5780635392c5e0146103f257600080fd5b806327eb6c0f146103525780633c1582671461039757600080fd5b806319d8ac61116102b157806319d8ac61146103085780631c1083e2146103355780632072f6c51461034a57600080fd5b8063107bf28c146102cd57806315064c96146102eb575b600080fd5b6102d56106bc565b6040516102e29190613e2c565b60405180910390f35b6065546102f89060ff1681565b60405190151581526020016102e2565b60685461031c9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102e2565b610348610343366004613e78565b61074a565b005b610348610856565b6070546103729073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e2565b6103486103a5366004613fed565b610907565b60685461031c9068010000000000000000900467ffffffffffffffff1681565b60685461031c90700100000000000000000000000000000000900467ffffffffffffffff1681565b610412610400366004614104565b606b6020526000908152604090205481565b6040519081526020016102e2565b6102d5611297565b610348610436366004614136565b6112a4565b610412610449366004614104565b60666020526000908152604090205481565b610348610469366004613e78565b61186d565b610348611987565b6102d56104843660046141b9565b611999565b610412611bd0565b60695461031c9067ffffffffffffffff1681565b6103486104b3366004614214565b611c4a565b6103486104c636600461430e565b611fa3565b60335473ffffffffffffffffffffffffffffffffffffffff16610372565b6104126120bd565b6071546103729073ffffffffffffffffffffffffffffffffffffffff1681565b61031c62093a8081565b606e5461031c9067ffffffffffffffff1681565b61041261ea6081565b610412610546366004614104565b60676020526000908152604090205481565b60655461037290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b61034861058b366004614136565b6121ee565b61034861059e36600461432b565b612838565b6069546103729068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103729073ffffffffffffffffffffffffffffffffffffffff1681565b6103486105fd366004614360565b61290d565b6069546102f8907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610348612fb2565b60685461031c907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103729073ffffffffffffffffffffffffffffffffffffffff1681565b610348610695366004614453565b613141565b6103486106a8366004613e78565b613641565b61041267016345785d8a000081565b606f80546106c990614498565b80601f01602080910402602001604051908101604052809291908181526020018280546106f590614498565b80156107425780601f1061071757610100808354040283529160200191610742565b820191906000526020600020905b81548152906001019060200180831161072557829003601f168201915b505050505081565b60705473ffffffffffffffffffffffffffffffffffffffff1633146107dc5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff16156108f55760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6108fd6136de565b610905613745565b565b60655460ff16156109a65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610a3f5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b805180610ada5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015611088576000878281518110610b4057610b406144eb565b602002602001015190506000816060015167ffffffffffffffff161115610d595783610b6b81614549565b945050600081600001518051906020012082602001518360600151604051602001610bce93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610c9b5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610d535760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016107d3565b50610ef3565b60208101511580610e085750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610dc29160040190815260200190565b6020604051808303816000875af1158015610de1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e059190614570565b15155b610e7a5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016107d3565b80515161ea6011610ef35760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016107d3565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610f29575042816040015167ffffffffffffffff1611155b610fc15760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061106a90614549565b9550508060400151955050808061108090614589565b915050610b24565b5060685467ffffffffffffffff78010000000000000000000000000000000000000000000000009091048116908316111561112b5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016107d3565b60685460009061115990700100000000000000000000000000000000900467ffffffffffffffff16846145c1565b61116d9067ffffffffffffffff16876145ea565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061124a33306112248467016345785d8a0000614601565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169291906137cf565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d80546106c990614498565b60655460ff16156113435760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695467ffffffffffffffff90811690881611156113ef5760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016107d3565b60695467ffffffffffffffff9081169087161161149a5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b602052604090205461154c5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a4016107d3565b600061155a88888888611999565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161158f919061463e565b602060405180830381855afa1580156115ac573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906115cf9190614570565b6115d99190614689565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611643918991899189919060040161469d565b602060405180830381865afa158015611660573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116849190614717565b6116f65760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016107d3565b6069546117549033906117139067ffffffffffffffff168b6145c1565b67ffffffffffffffff166117256120bd565b61172f9190614601565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16919061388d565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b15801561180957600080fd5b505af115801561181d573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146119065760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161084b565b61198f6136de565b61090560006138e8565b67ffffffffffffffff8085166000818152606760205260408082205493871682529020546060929115806119cc57508115155b611a645760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b80611afd5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec01604051602081830303815290604052925050505b949350505050565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691611c1f917801000000000000000000000000000000000000000000000000909104166001614734565b611c2991906145c1565b611c459067ffffffffffffffff16670de0b6b3a7640000614601565b905090565b600054610100900460ff1615808015611c6a5750600054600160ff909116105b80611c845750303b158015611c84575060005460ff166001145b611cf65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107d3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611d5457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d611e9387826147ae565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f611ed485826147ae565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556070805492851692909116919091179055611f3261395f565b8015611f9557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461203c5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061084b90831515815260200190565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612134573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121589190614570565b60695460685491925060009167ffffffffffffffff918216916801000000000000000082048116916121bd91700100000000000000000000000000000000820481169178010000000000000000000000000000000000000000000000009004166145c1565b6121c79190614734565b6121d191906145c1565b67ffffffffffffffff1690506121e781836148aa565b9250505090565b60655460ff161561228d5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b8567ffffffffffffffff168767ffffffffffffffff161061233c5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a4016107d3565b60695467ffffffffffffffff908116908716111561240e5760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c4016107d3565b67ffffffffffffffff87166000908152606b60205260409020546124c05760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a4016107d3565b67ffffffffffffffff86166000908152606b60205260409020546125725760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a4016107d3565b600061258088888888611999565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516125b5919061463e565b602060405180830381855afa1580156125d2573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906125f59190614570565b6125ff9190614689565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91612669918991899189919060040161469d565b602060405180830381865afa158015612686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126aa9190614717565b61271c5760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f460000000060648201526084016107d3565b67ffffffffffffffff88166000908152606b60205260409020548690036127d15760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a4016107d3565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a161282d613745565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146128d15760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606d6128dd82826147ae565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161084b9190613e2c565b60655460ff16156129ac5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612a6f5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180612b0a5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60685467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612b559184917001000000000000000000000000000000009004166148be565b1115612bc95760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016107d3565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b84811015612ee2576000868281518110612c2957612c296144eb565b602002602001015190508380612c3e90614549565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114612d5f5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016107d3565b612d6a6001886145ea565b8303612e28574262093a808360400151612d849190614734565b67ffffffffffffffff161115612e285760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016107d3565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612eca90614549565b96505050508080612eda90614589565b915050612c0d565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff1661302a5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b60705473ffffffffffffffffffffffffffffffffffffffff1633146130b75760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561312157600080fd5b505af1158015613135573d6000803e3d6000fd5b505050506109056139e5565b60655460ff16156131e05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146132a35760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b60006132ad611bd0565b9050818111156133255760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016107d3565b61ea6083511061339d5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016107d3565b6065546133c790610100900473ffffffffffffffffffffffffffffffffffffffff163330846137cf565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345b9190614570565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff1690601861349583614549565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161350e93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260669093529120553233036135de57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261363b565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613632939291906148d6565b60405180910390a25b50505050565b6136496136de565b73ffffffffffffffffffffffffffffffffffffffff81166136d25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107d3565b6136db816138e8565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109055760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156137af57600080fd5b505af11580156137c3573d6000803e3d6000fd5b50505050610905613ab0565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261363b9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613ba5565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526138e39084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401613829565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166139dc5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107d3565b610905336138e8565b60655460ff16613a5d5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff1615613b4f5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6000613c07826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613c979092919063ffffffff16565b8051909150156138e35780806020019051810190613c259190614717565b6138e35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107d3565b6060611bc88484600085856000808673ffffffffffffffffffffffffffffffffffffffff168587604051613ccb919061463e565b60006040518083038185875af1925050503d8060008114613d08576040519150601f19603f3d011682016040523d82523d6000602084013e613d0d565b606091505b5091509150613d1e87838387613d29565b979650505050505050565b60608315613da5578251600003613d9e5773ffffffffffffffffffffffffffffffffffffffff85163b613d9e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107d3565b5081611bc8565b611bc88383815115613dba5781518083602001fd5b8060405162461bcd60e51b81526004016107d39190613e2c565b60005b83811015613def578181015183820152602001613dd7565b8381111561363b5750506000910152565b60008151808452613e18816020860160208601613dd4565b601f01601f19169290920160200192915050565b602081526000613e3f6020830184613e00565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146136db57600080fd5b8035613e7381613e46565b919050565b600060208284031215613e8a57600080fd5b8135613e3f81613e46565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613ee757613ee7613e95565b60405290565b6040516060810167ffffffffffffffff81118282101715613ee757613ee7613e95565b604051601f8201601f1916810167ffffffffffffffff81118282101715613f3957613f39613e95565b604052919050565b600067ffffffffffffffff821115613f5b57613f5b613e95565b5060051b60200190565b600082601f830112613f7657600080fd5b813567ffffffffffffffff811115613f9057613f90613e95565b613fa36020601f19601f84011601613f10565b818152846020838601011115613fb857600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613e7357600080fd5b6000602080838503121561400057600080fd5b823567ffffffffffffffff8082111561401857600080fd5b818501915085601f83011261402c57600080fd5b813561403f61403a82613f41565b613f10565b81815260059190911b8301840190848101908883111561405e57600080fd5b8585015b838110156140f75780358581111561407a5760008081fd5b86016080818c03601f19018113156140925760008081fd5b61409a613ec4565b89830135888111156140ac5760008081fd5b6140ba8e8c83870101613f65565b8252506040808401358b83015260606140d4818601613fd5565b828401526140e3848601613fd5565b908301525085525050918601918601614062565b5098975050505050505050565b60006020828403121561411657600080fd5b613e3f82613fd5565b806040810183101561413057600080fd5b92915050565b6000806000806000806000610180888a03121561415257600080fd5b61415b88613fd5565b965061416960208901613fd5565b955060408801359450606088013593506141868960808a0161411f565b925061014088018981111561419a57600080fd5b60c0890192506141aa8a8261411f565b91505092959891949750929550565b600080600080608085870312156141cf57600080fd5b6141d885613fd5565b93506141e660208601613fd5565b93969395505050506040820135916060013590565b80151581146136db57600080fd5b8035613e73816141fb565b60008060008060008060008060008060006101608c8e03121561423657600080fd5b61423f8c613e68565b9a5061424d60208d01613e68565b995061425b60408d01613e68565b985060608c0135975061427060808d01613e68565b965061427e60a08d01614209565b955067ffffffffffffffff8060c08e0135111561429a57600080fd5b6142aa8e60c08f01358f01613f65565b95506142b860e08e01613fd5565b9450806101008e013511156142cc57600080fd5b506142de8d6101008e01358e01613f65565b92506142ed6101208d01613e68565b91506142fc6101408d01613e68565b90509295989b509295989b9093969950565b60006020828403121561432057600080fd5b8135613e3f816141fb565b60006020828403121561433d57600080fd5b813567ffffffffffffffff81111561435457600080fd5b611bc884828501613f65565b6000602080838503121561437357600080fd5b823567ffffffffffffffff8082111561438b57600080fd5b818501915085601f83011261439f57600080fd5b81356143ad61403a82613f41565b81815260059190911b830184019084810190888311156143cc57600080fd5b8585015b838110156140f7578035858111156143e85760008081fd5b86016060818c03601f19018113156144005760008081fd5b614408613eed565b898301358881111561441a5760008081fd5b6144288e8c83870101613f65565b8252506040808401358b830152614440838501613fd5565b90820152855250509186019186016143d0565b6000806040838503121561446657600080fd5b823567ffffffffffffffff81111561447d57600080fd5b61448985828601613f65565b95602094909401359450505050565b600181811c908216806144ac57607f821691505b6020821081036144e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036145665761456661451a565b6001019392505050565b60006020828403121561458257600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036145ba576145ba61451a565b5060010190565b600067ffffffffffffffff838116908316818110156145e2576145e261451a565b039392505050565b6000828210156145fc576145fc61451a565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146395761463961451a565b500290565b60008251614650818460208701613dd4565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826146985761469861465a565b500690565b61012081016040808784376000838201818152879190815b60028110156146d5578484833790840182815292840192906001016146b5565b5050828760c0870137610100850181815286935091505b600181101561470b5782518252602092830192909101906001016146ec565b50505095945050505050565b60006020828403121561472957600080fd5b8151613e3f816141fb565b600067ffffffffffffffff8083168185168083038211156147575761475761451a565b01949350505050565b601f8211156138e357600081815260208120601f850160051c810160208610156147875750805b601f850160051c820191505b818110156147a657828155600101614793565b505050505050565b815167ffffffffffffffff8111156147c8576147c8613e95565b6147dc816147d68454614498565b84614760565b602080601f83116001811461482f57600084156147f95750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556147a6565b600085815260208120601f198616915b8281101561485e5788860151825594840194600190910190840161483f565b508582101561489a57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000826148b9576148b961465a565b500490565b600082198211156148d1576148d161451a565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff8316602082015260606040820152600061490b6060830184613e00565b9594505050505056fea2646970667358221220e060d003a6df3b282d02b727e8541fe86ad6aa5154fa08bedc64fae66b56376464736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5061494a806100206000396000f3fe608060405234801561001057600080fd5b50600436106102c85760003560e01c80638da5cb5b1161017b578063cfa8ed47116100d8578063e7a7ed021161008c578063eaeb077b11610071578063eaeb077b14610687578063f2fde38b1461069a578063f7552761146106ad57600080fd5b8063e7a7ed0214610637578063e8bf92ed1461066757600080fd5b8063d8d1091b116100bd578063d8d1091b146105ef578063d8f54db014610602578063dbc169761461062f57600080fd5b8063cfa8ed47146105a3578063d02103ca146105cf57600080fd5b8063b02286c01161012f578063b6b0b09711610114578063b6b0b09714610558578063c3fd0f9c1461057d578063c89e42df1461059057600080fd5b8063b02286c01461052f578063b4d63f581461053857600080fd5b8063a3c573eb11610160578063a3c573eb146104f1578063ab9fc5ef14610511578063adc879e91461051b57600080fd5b80638da5cb5b146104cb57806399f5634e146104e957600080fd5b8063542028d5116102295780637152facf116101dd5780637fcb3653116101c25780637fcb36531461049157806381df7d3f146104a55780638c4a0af7146104b857600080fd5b80637152facf14610476578063798470571461048957600080fd5b80636b8616ce1161020e5780636b8616ce1461043b5780636ff512cc1461045b578063715018a61461046e57600080fd5b8063542028d51461042057806355b925e61461042857600080fd5b806327eb6c0f11610280578063423fa85611610265578063423fa856146103aa57806345605267146103ca5780635392c5e0146103f257600080fd5b806327eb6c0f146103525780633c1582671461039757600080fd5b806319d8ac61116102b157806319d8ac61146103085780631c1083e2146103355780632072f6c51461034a57600080fd5b8063107bf28c146102cd57806315064c96146102eb575b600080fd5b6102d56106bc565b6040516102e29190613e2c565b60405180910390f35b6065546102f89060ff1681565b60405190151581526020016102e2565b60685461031c9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102e2565b610348610343366004613e78565b61074a565b005b610348610856565b6070546103729073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e2565b6103486103a5366004613fed565b610907565b60685461031c9068010000000000000000900467ffffffffffffffff1681565b60685461031c90700100000000000000000000000000000000900467ffffffffffffffff1681565b610412610400366004614104565b606b6020526000908152604090205481565b6040519081526020016102e2565b6102d5611297565b610348610436366004614136565b6112a4565b610412610449366004614104565b60666020526000908152604090205481565b610348610469366004613e78565b61186d565b610348611987565b6102d56104843660046141b9565b611999565b610412611bd0565b60695461031c9067ffffffffffffffff1681565b6103486104b3366004614214565b611c4a565b6103486104c636600461430e565b611fa3565b60335473ffffffffffffffffffffffffffffffffffffffff16610372565b6104126120bd565b6071546103729073ffffffffffffffffffffffffffffffffffffffff1681565b61031c62093a8081565b606e5461031c9067ffffffffffffffff1681565b61041261ea6081565b610412610546366004614104565b60676020526000908152604090205481565b60655461037290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b61034861058b366004614136565b6121ee565b61034861059e36600461432b565b612838565b6069546103729068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103729073ffffffffffffffffffffffffffffffffffffffff1681565b6103486105fd366004614360565b61290d565b6069546102f8907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610348612fb2565b60685461031c907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103729073ffffffffffffffffffffffffffffffffffffffff1681565b610348610695366004614453565b613141565b6103486106a8366004613e78565b613641565b61041267016345785d8a000081565b606f80546106c990614498565b80601f01602080910402602001604051908101604052809291908181526020018280546106f590614498565b80156107425780601f1061071757610100808354040283529160200191610742565b820191906000526020600020905b81548152906001019060200180831161072557829003601f168201915b505050505081565b60705473ffffffffffffffffffffffffffffffffffffffff1633146107dc5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff16156108f55760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6108fd6136de565b610905613745565b565b60655460ff16156109a65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610a3f5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b805180610ada5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015611088576000878281518110610b4057610b406144eb565b602002602001015190506000816060015167ffffffffffffffff161115610d595783610b6b81614549565b945050600081600001518051906020012082602001518360600151604051602001610bce93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610c9b5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610d535760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016107d3565b50610ef3565b60208101511580610e085750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610dc29160040190815260200190565b6020604051808303816000875af1158015610de1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e059190614570565b15155b610e7a5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016107d3565b80515161ea6011610ef35760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016107d3565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610f29575042816040015167ffffffffffffffff1611155b610fc15760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061106a90614549565b9550508060400151955050808061108090614589565b915050610b24565b5060685467ffffffffffffffff78010000000000000000000000000000000000000000000000009091048116908316111561112b5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016107d3565b60685460009061115990700100000000000000000000000000000000900467ffffffffffffffff16846145c1565b61116d9067ffffffffffffffff16876145ea565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061124a33306112248467016345785d8a0000614601565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169291906137cf565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d80546106c990614498565b60655460ff16156113435760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695467ffffffffffffffff90811690881611156113ef5760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016107d3565b60695467ffffffffffffffff9081169087161161149a5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b602052604090205461154c5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a4016107d3565b600061155a88888888611999565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161158f919061463e565b602060405180830381855afa1580156115ac573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906115cf9190614570565b6115d99190614689565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611643918991899189919060040161469d565b602060405180830381865afa158015611660573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116849190614717565b6116f65760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016107d3565b6069546117549033906117139067ffffffffffffffff168b6145c1565b67ffffffffffffffff166117256120bd565b61172f9190614601565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16919061388d565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b15801561180957600080fd5b505af115801561181d573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146119065760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161084b565b61198f6136de565b61090560006138e8565b67ffffffffffffffff8085166000818152606760205260408082205493871682529020546060929115806119cc57508115155b611a645760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b80611afd5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec01604051602081830303815290604052925050505b949350505050565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691611c1f917801000000000000000000000000000000000000000000000000909104166001614734565b611c2991906145c1565b611c459067ffffffffffffffff16670de0b6b3a7640000614601565b905090565b600054610100900460ff1615808015611c6a5750600054600160ff909116105b80611c845750303b158015611c84575060005460ff166001145b611cf65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107d3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611d5457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d611e9387826147ae565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f611ed485826147ae565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556070805492851692909116919091179055611f3261395f565b8015611f9557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461203c5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061084b90831515815260200190565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612134573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121589190614570565b60695460685491925060009167ffffffffffffffff918216916801000000000000000082048116916121bd91700100000000000000000000000000000000820481169178010000000000000000000000000000000000000000000000009004166145c1565b6121c79190614734565b6121d191906145c1565b67ffffffffffffffff1690506121e781836148aa565b9250505090565b60655460ff161561228d5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b8567ffffffffffffffff168767ffffffffffffffff161061233c5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a4016107d3565b60695467ffffffffffffffff908116908716111561240e5760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c4016107d3565b67ffffffffffffffff87166000908152606b60205260409020546124c05760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a4016107d3565b67ffffffffffffffff86166000908152606b60205260409020546125725760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a4016107d3565b600061258088888888611999565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516125b5919061463e565b602060405180830381855afa1580156125d2573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906125f59190614570565b6125ff9190614689565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91612669918991899189919060040161469d565b602060405180830381865afa158015612686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126aa9190614717565b61271c5760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f460000000060648201526084016107d3565b67ffffffffffffffff88166000908152606b60205260409020548690036127d15760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a4016107d3565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a161282d613745565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146128d15760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606d6128dd82826147ae565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161084b9190613e2c565b60655460ff16156129ac5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612a6f5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180612b0a5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60685467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612b559184917001000000000000000000000000000000009004166148be565b1115612bc95760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016107d3565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b84811015612ee2576000868281518110612c2957612c296144eb565b602002602001015190508380612c3e90614549565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114612d5f5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016107d3565b612d6a6001886145ea565b8303612e28574262093a808360400151612d849190614734565b67ffffffffffffffff161115612e285760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016107d3565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612eca90614549565b96505050508080612eda90614589565b915050612c0d565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff1661302a5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b60705473ffffffffffffffffffffffffffffffffffffffff1633146130b75760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561312157600080fd5b505af1158015613135573d6000803e3d6000fd5b505050506109056139e5565b60655460ff16156131e05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146132a35760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b60006132ad611bd0565b9050818111156133255760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016107d3565b61ea6083511061339d5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016107d3565b6065546133c790610100900473ffffffffffffffffffffffffffffffffffffffff163330846137cf565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345b9190614570565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff1690601861349583614549565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161350e93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260669093529120553233036135de57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261363b565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613632939291906148d6565b60405180910390a25b50505050565b6136496136de565b73ffffffffffffffffffffffffffffffffffffffff81166136d25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107d3565b6136db816138e8565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109055760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156137af57600080fd5b505af11580156137c3573d6000803e3d6000fd5b50505050610905613ab0565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261363b9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613ba5565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526138e39084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401613829565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166139dc5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107d3565b610905336138e8565b60655460ff16613a5d5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff1615613b4f5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6000613c07826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613c979092919063ffffffff16565b8051909150156138e35780806020019051810190613c259190614717565b6138e35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107d3565b6060611bc88484600085856000808673ffffffffffffffffffffffffffffffffffffffff168587604051613ccb919061463e565b60006040518083038185875af1925050503d8060008114613d08576040519150601f19603f3d011682016040523d82523d6000602084013e613d0d565b606091505b5091509150613d1e87838387613d29565b979650505050505050565b60608315613da5578251600003613d9e5773ffffffffffffffffffffffffffffffffffffffff85163b613d9e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107d3565b5081611bc8565b611bc88383815115613dba5781518083602001fd5b8060405162461bcd60e51b81526004016107d39190613e2c565b60005b83811015613def578181015183820152602001613dd7565b8381111561363b5750506000910152565b60008151808452613e18816020860160208601613dd4565b601f01601f19169290920160200192915050565b602081526000613e3f6020830184613e00565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146136db57600080fd5b8035613e7381613e46565b919050565b600060208284031215613e8a57600080fd5b8135613e3f81613e46565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613ee757613ee7613e95565b60405290565b6040516060810167ffffffffffffffff81118282101715613ee757613ee7613e95565b604051601f8201601f1916810167ffffffffffffffff81118282101715613f3957613f39613e95565b604052919050565b600067ffffffffffffffff821115613f5b57613f5b613e95565b5060051b60200190565b600082601f830112613f7657600080fd5b813567ffffffffffffffff811115613f9057613f90613e95565b613fa36020601f19601f84011601613f10565b818152846020838601011115613fb857600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613e7357600080fd5b6000602080838503121561400057600080fd5b823567ffffffffffffffff8082111561401857600080fd5b818501915085601f83011261402c57600080fd5b813561403f61403a82613f41565b613f10565b81815260059190911b8301840190848101908883111561405e57600080fd5b8585015b838110156140f75780358581111561407a5760008081fd5b86016080818c03601f19018113156140925760008081fd5b61409a613ec4565b89830135888111156140ac5760008081fd5b6140ba8e8c83870101613f65565b8252506040808401358b83015260606140d4818601613fd5565b828401526140e3848601613fd5565b908301525085525050918601918601614062565b5098975050505050505050565b60006020828403121561411657600080fd5b613e3f82613fd5565b806040810183101561413057600080fd5b92915050565b6000806000806000806000610180888a03121561415257600080fd5b61415b88613fd5565b965061416960208901613fd5565b955060408801359450606088013593506141868960808a0161411f565b925061014088018981111561419a57600080fd5b60c0890192506141aa8a8261411f565b91505092959891949750929550565b600080600080608085870312156141cf57600080fd5b6141d885613fd5565b93506141e660208601613fd5565b93969395505050506040820135916060013590565b80151581146136db57600080fd5b8035613e73816141fb565b60008060008060008060008060008060006101608c8e03121561423657600080fd5b61423f8c613e68565b9a5061424d60208d01613e68565b995061425b60408d01613e68565b985060608c0135975061427060808d01613e68565b965061427e60a08d01614209565b955067ffffffffffffffff8060c08e0135111561429a57600080fd5b6142aa8e60c08f01358f01613f65565b95506142b860e08e01613fd5565b9450806101008e013511156142cc57600080fd5b506142de8d6101008e01358e01613f65565b92506142ed6101208d01613e68565b91506142fc6101408d01613e68565b90509295989b509295989b9093969950565b60006020828403121561432057600080fd5b8135613e3f816141fb565b60006020828403121561433d57600080fd5b813567ffffffffffffffff81111561435457600080fd5b611bc884828501613f65565b6000602080838503121561437357600080fd5b823567ffffffffffffffff8082111561438b57600080fd5b818501915085601f83011261439f57600080fd5b81356143ad61403a82613f41565b81815260059190911b830184019084810190888311156143cc57600080fd5b8585015b838110156140f7578035858111156143e85760008081fd5b86016060818c03601f19018113156144005760008081fd5b614408613eed565b898301358881111561441a5760008081fd5b6144288e8c83870101613f65565b8252506040808401358b830152614440838501613fd5565b90820152855250509186019186016143d0565b6000806040838503121561446657600080fd5b823567ffffffffffffffff81111561447d57600080fd5b61448985828601613f65565b95602094909401359450505050565b600181811c908216806144ac57607f821691505b6020821081036144e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036145665761456661451a565b6001019392505050565b60006020828403121561458257600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036145ba576145ba61451a565b5060010190565b600067ffffffffffffffff838116908316818110156145e2576145e261451a565b039392505050565b6000828210156145fc576145fc61451a565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146395761463961451a565b500290565b60008251614650818460208701613dd4565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826146985761469861465a565b500690565b61012081016040808784376000838201818152879190815b60028110156146d5578484833790840182815292840192906001016146b5565b5050828760c0870137610100850181815286935091505b600181101561470b5782518252602092830192909101906001016146ec565b50505095945050505050565b60006020828403121561472957600080fd5b8151613e3f816141fb565b600067ffffffffffffffff8083168185168083038211156147575761475761451a565b01949350505050565b601f8211156138e357600081815260208120601f850160051c810160208610156147875750805b601f850160051c820191505b818110156147a657828155600101614793565b505050505050565b815167ffffffffffffffff8111156147c8576147c8613e95565b6147dc816147d68454614498565b84614760565b602080601f83116001811461482f57600084156147f95750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556147a6565b600085815260208120601f198616915b8281101561485e5788860151825594840194600190910190840161483f565b508582101561489a57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000826148b9576148b961465a565b500490565b600082198211156148d1576148d161451a565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff8316602082015260606040820152600061490b6060830184613e00565b9594505050505056fea2646970667358221220515451c0c1677c209ae6a20bafd437788cca076cb2ea51a63d02a471ee2f757764736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102c85760003560e01c80638da5cb5b1161017b578063cfa8ed47116100d8578063e7a7ed021161008c578063eaeb077b11610071578063eaeb077b14610687578063f2fde38b1461069a578063f7552761146106ad57600080fd5b8063e7a7ed0214610637578063e8bf92ed1461066757600080fd5b8063d8d1091b116100bd578063d8d1091b146105ef578063d8f54db014610602578063dbc169761461062f57600080fd5b8063cfa8ed47146105a3578063d02103ca146105cf57600080fd5b8063b02286c01161012f578063b6b0b09711610114578063b6b0b09714610558578063c3fd0f9c1461057d578063c89e42df1461059057600080fd5b8063b02286c01461052f578063b4d63f581461053857600080fd5b8063a3c573eb11610160578063a3c573eb146104f1578063ab9fc5ef14610511578063adc879e91461051b57600080fd5b80638da5cb5b146104cb57806399f5634e146104e957600080fd5b8063542028d5116102295780637152facf116101dd5780637fcb3653116101c25780637fcb36531461049157806381df7d3f146104a55780638c4a0af7146104b857600080fd5b80637152facf14610476578063798470571461048957600080fd5b80636b8616ce1161020e5780636b8616ce1461043b5780636ff512cc1461045b578063715018a61461046e57600080fd5b8063542028d51461042057806355b925e61461042857600080fd5b806327eb6c0f11610280578063423fa85611610265578063423fa856146103aa57806345605267146103ca5780635392c5e0146103f257600080fd5b806327eb6c0f146103525780633c1582671461039757600080fd5b806319d8ac61116102b157806319d8ac61146103085780631c1083e2146103355780632072f6c51461034a57600080fd5b8063107bf28c146102cd57806315064c96146102eb575b600080fd5b6102d56106bc565b6040516102e29190613e2c565b60405180910390f35b6065546102f89060ff1681565b60405190151581526020016102e2565b60685461031c9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102e2565b610348610343366004613e78565b61074a565b005b610348610856565b6070546103729073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e2565b6103486103a5366004613fed565b610907565b60685461031c9068010000000000000000900467ffffffffffffffff1681565b60685461031c90700100000000000000000000000000000000900467ffffffffffffffff1681565b610412610400366004614104565b606b6020526000908152604090205481565b6040519081526020016102e2565b6102d5611297565b610348610436366004614136565b6112a4565b610412610449366004614104565b60666020526000908152604090205481565b610348610469366004613e78565b61186d565b610348611987565b6102d56104843660046141b9565b611999565b610412611bd0565b60695461031c9067ffffffffffffffff1681565b6103486104b3366004614214565b611c4a565b6103486104c636600461430e565b611fa3565b60335473ffffffffffffffffffffffffffffffffffffffff16610372565b6104126120bd565b6071546103729073ffffffffffffffffffffffffffffffffffffffff1681565b61031c62093a8081565b606e5461031c9067ffffffffffffffff1681565b61041261ea6081565b610412610546366004614104565b60676020526000908152604090205481565b60655461037290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b61034861058b366004614136565b6121ee565b61034861059e36600461432b565b612838565b6069546103729068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103729073ffffffffffffffffffffffffffffffffffffffff1681565b6103486105fd366004614360565b61290d565b6069546102f8907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610348612fb2565b60685461031c907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103729073ffffffffffffffffffffffffffffffffffffffff1681565b610348610695366004614453565b613141565b6103486106a8366004613e78565b613641565b61041267016345785d8a000081565b606f80546106c990614498565b80601f01602080910402602001604051908101604052809291908181526020018280546106f590614498565b80156107425780601f1061071757610100808354040283529160200191610742565b820191906000526020600020905b81548152906001019060200180831161072557829003601f168201915b505050505081565b60705473ffffffffffffffffffffffffffffffffffffffff1633146107dc5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff16156108f55760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6108fd6136de565b610905613745565b565b60655460ff16156109a65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610a3f5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b805180610ada5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015611088576000878281518110610b4057610b406144eb565b602002602001015190506000816060015167ffffffffffffffff161115610d595783610b6b81614549565b945050600081600001518051906020012082602001518360600151604051602001610bce93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610c9b5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610d535760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016107d3565b50610ef3565b60208101511580610e085750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610dc29160040190815260200190565b6020604051808303816000875af1158015610de1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e059190614570565b15155b610e7a5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016107d3565b80515161ea6011610ef35760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016107d3565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610f29575042816040015167ffffffffffffffff1611155b610fc15760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061106a90614549565b9550508060400151955050808061108090614589565b915050610b24565b5060685467ffffffffffffffff78010000000000000000000000000000000000000000000000009091048116908316111561112b5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016107d3565b60685460009061115990700100000000000000000000000000000000900467ffffffffffffffff16846145c1565b61116d9067ffffffffffffffff16876145ea565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061124a33306112248467016345785d8a0000614601565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169291906137cf565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d80546106c990614498565b60655460ff16156113435760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695467ffffffffffffffff90811690881611156113ef5760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016107d3565b60695467ffffffffffffffff9081169087161161149a5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b602052604090205461154c5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a4016107d3565b600061155a88888888611999565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161158f919061463e565b602060405180830381855afa1580156115ac573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906115cf9190614570565b6115d99190614689565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611643918991899189919060040161469d565b602060405180830381865afa158015611660573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116849190614717565b6116f65760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016107d3565b6069546117549033906117139067ffffffffffffffff168b6145c1565b67ffffffffffffffff166117256120bd565b61172f9190614601565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16919061388d565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b15801561180957600080fd5b505af115801561181d573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146119065760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161084b565b61198f6136de565b61090560006138e8565b67ffffffffffffffff8085166000818152606760205260408082205493871682529020546060929115806119cc57508115155b611a645760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b80611afd5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec01604051602081830303815290604052925050505b949350505050565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691611c1f917801000000000000000000000000000000000000000000000000909104166001614734565b611c2991906145c1565b611c459067ffffffffffffffff16670de0b6b3a7640000614601565b905090565b600054610100900460ff1615808015611c6a5750600054600160ff909116105b80611c845750303b158015611c84575060005460ff166001145b611cf65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107d3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611d5457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d611e9387826147ae565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f611ed485826147ae565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556070805492851692909116919091179055611f3261395f565b8015611f9557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461203c5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061084b90831515815260200190565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612134573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121589190614570565b60695460685491925060009167ffffffffffffffff918216916801000000000000000082048116916121bd91700100000000000000000000000000000000820481169178010000000000000000000000000000000000000000000000009004166145c1565b6121c79190614734565b6121d191906145c1565b67ffffffffffffffff1690506121e781836148aa565b9250505090565b60655460ff161561228d5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b8567ffffffffffffffff168767ffffffffffffffff161061233c5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a4016107d3565b60695467ffffffffffffffff908116908716111561240e5760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c4016107d3565b67ffffffffffffffff87166000908152606b60205260409020546124c05760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a4016107d3565b67ffffffffffffffff86166000908152606b60205260409020546125725760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a4016107d3565b600061258088888888611999565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516125b5919061463e565b602060405180830381855afa1580156125d2573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906125f59190614570565b6125ff9190614689565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91612669918991899189919060040161469d565b602060405180830381865afa158015612686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126aa9190614717565b61271c5760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f460000000060648201526084016107d3565b67ffffffffffffffff88166000908152606b60205260409020548690036127d15760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a4016107d3565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a161282d613745565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146128d15760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606d6128dd82826147ae565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161084b9190613e2c565b60655460ff16156129ac5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612a6f5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180612b0a5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60685467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612b559184917001000000000000000000000000000000009004166148be565b1115612bc95760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016107d3565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b84811015612ee2576000868281518110612c2957612c296144eb565b602002602001015190508380612c3e90614549565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114612d5f5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016107d3565b612d6a6001886145ea565b8303612e28574262093a808360400151612d849190614734565b67ffffffffffffffff161115612e285760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016107d3565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612eca90614549565b96505050508080612eda90614589565b915050612c0d565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff1661302a5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b60705473ffffffffffffffffffffffffffffffffffffffff1633146130b75760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561312157600080fd5b505af1158015613135573d6000803e3d6000fd5b505050506109056139e5565b60655460ff16156131e05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146132a35760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b60006132ad611bd0565b9050818111156133255760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016107d3565b61ea6083511061339d5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016107d3565b6065546133c790610100900473ffffffffffffffffffffffffffffffffffffffff163330846137cf565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345b9190614570565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff1690601861349583614549565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161350e93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260669093529120553233036135de57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261363b565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613632939291906148d6565b60405180910390a25b50505050565b6136496136de565b73ffffffffffffffffffffffffffffffffffffffff81166136d25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107d3565b6136db816138e8565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109055760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156137af57600080fd5b505af11580156137c3573d6000803e3d6000fd5b50505050610905613ab0565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261363b9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613ba5565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526138e39084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401613829565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166139dc5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107d3565b610905336138e8565b60655460ff16613a5d5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff1615613b4f5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6000613c07826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613c979092919063ffffffff16565b8051909150156138e35780806020019051810190613c259190614717565b6138e35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107d3565b6060611bc88484600085856000808673ffffffffffffffffffffffffffffffffffffffff168587604051613ccb919061463e565b60006040518083038185875af1925050503d8060008114613d08576040519150601f19603f3d011682016040523d82523d6000602084013e613d0d565b606091505b5091509150613d1e87838387613d29565b979650505050505050565b60608315613da5578251600003613d9e5773ffffffffffffffffffffffffffffffffffffffff85163b613d9e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107d3565b5081611bc8565b611bc88383815115613dba5781518083602001fd5b8060405162461bcd60e51b81526004016107d39190613e2c565b60005b83811015613def578181015183820152602001613dd7565b8381111561363b5750506000910152565b60008151808452613e18816020860160208601613dd4565b601f01601f19169290920160200192915050565b602081526000613e3f6020830184613e00565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146136db57600080fd5b8035613e7381613e46565b919050565b600060208284031215613e8a57600080fd5b8135613e3f81613e46565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613ee757613ee7613e95565b60405290565b6040516060810167ffffffffffffffff81118282101715613ee757613ee7613e95565b604051601f8201601f1916810167ffffffffffffffff81118282101715613f3957613f39613e95565b604052919050565b600067ffffffffffffffff821115613f5b57613f5b613e95565b5060051b60200190565b600082601f830112613f7657600080fd5b813567ffffffffffffffff811115613f9057613f90613e95565b613fa36020601f19601f84011601613f10565b818152846020838601011115613fb857600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613e7357600080fd5b6000602080838503121561400057600080fd5b823567ffffffffffffffff8082111561401857600080fd5b818501915085601f83011261402c57600080fd5b813561403f61403a82613f41565b613f10565b81815260059190911b8301840190848101908883111561405e57600080fd5b8585015b838110156140f75780358581111561407a5760008081fd5b86016080818c03601f19018113156140925760008081fd5b61409a613ec4565b89830135888111156140ac5760008081fd5b6140ba8e8c83870101613f65565b8252506040808401358b83015260606140d4818601613fd5565b828401526140e3848601613fd5565b908301525085525050918601918601614062565b5098975050505050505050565b60006020828403121561411657600080fd5b613e3f82613fd5565b806040810183101561413057600080fd5b92915050565b6000806000806000806000610180888a03121561415257600080fd5b61415b88613fd5565b965061416960208901613fd5565b955060408801359450606088013593506141868960808a0161411f565b925061014088018981111561419a57600080fd5b60c0890192506141aa8a8261411f565b91505092959891949750929550565b600080600080608085870312156141cf57600080fd5b6141d885613fd5565b93506141e660208601613fd5565b93969395505050506040820135916060013590565b80151581146136db57600080fd5b8035613e73816141fb565b60008060008060008060008060008060006101608c8e03121561423657600080fd5b61423f8c613e68565b9a5061424d60208d01613e68565b995061425b60408d01613e68565b985060608c0135975061427060808d01613e68565b965061427e60a08d01614209565b955067ffffffffffffffff8060c08e0135111561429a57600080fd5b6142aa8e60c08f01358f01613f65565b95506142b860e08e01613fd5565b9450806101008e013511156142cc57600080fd5b506142de8d6101008e01358e01613f65565b92506142ed6101208d01613e68565b91506142fc6101408d01613e68565b90509295989b509295989b9093969950565b60006020828403121561432057600080fd5b8135613e3f816141fb565b60006020828403121561433d57600080fd5b813567ffffffffffffffff81111561435457600080fd5b611bc884828501613f65565b6000602080838503121561437357600080fd5b823567ffffffffffffffff8082111561438b57600080fd5b818501915085601f83011261439f57600080fd5b81356143ad61403a82613f41565b81815260059190911b830184019084810190888311156143cc57600080fd5b8585015b838110156140f7578035858111156143e85760008081fd5b86016060818c03601f19018113156144005760008081fd5b614408613eed565b898301358881111561441a5760008081fd5b6144288e8c83870101613f65565b8252506040808401358b830152614440838501613fd5565b90820152855250509186019186016143d0565b6000806040838503121561446657600080fd5b823567ffffffffffffffff81111561447d57600080fd5b61448985828601613f65565b95602094909401359450505050565b600181811c908216806144ac57607f821691505b6020821081036144e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036145665761456661451a565b6001019392505050565b60006020828403121561458257600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036145ba576145ba61451a565b5060010190565b600067ffffffffffffffff838116908316818110156145e2576145e261451a565b039392505050565b6000828210156145fc576145fc61451a565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146395761463961451a565b500290565b60008251614650818460208701613dd4565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826146985761469861465a565b500690565b61012081016040808784376000838201818152879190815b60028110156146d5578484833790840182815292840192906001016146b5565b5050828760c0870137610100850181815286935091505b600181101561470b5782518252602092830192909101906001016146ec565b50505095945050505050565b60006020828403121561472957600080fd5b8151613e3f816141fb565b600067ffffffffffffffff8083168185168083038211156147575761475761451a565b01949350505050565b601f8211156138e357600081815260208120601f850160051c810160208610156147875750805b601f850160051c820191505b818110156147a657828155600101614793565b505050505050565b815167ffffffffffffffff8111156147c8576147c8613e95565b6147dc816147d68454614498565b84614760565b602080601f83116001811461482f57600084156147f95750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556147a6565b600085815260208120601f198616915b8281101561485e5788860151825594840194600190910190840161483f565b508582101561489a57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000826148b9576148b961465a565b500490565b600082198211156148d1576148d161451a565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff8316602082015260606040820152600061490b6060830184613e00565b9594505050505056fea2646970667358221220515451c0c1677c209ae6a20bafd437788cca076cb2ea51a63d02a471ee2f757764736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/ProofOfEfficiencyMock.json b/compiled-contracts/ProofOfEfficiencyMock.json index 519f6574a..43afc74d1 100644 --- a/compiled-contracts/ProofOfEfficiencyMock.json +++ b/compiled-contracts/ProofOfEfficiencyMock.json @@ -1100,8 +1100,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506151f8806100206000396000f3fe608060405234801561001057600080fd5b506004361061032b5760003560e01c80638da5cb5b116101b2578063c89e42df116100f9578063dbc16976116100a2578063eaeb077b1161007c578063eaeb077b14610810578063f2fde38b14610823578063f755276114610836578063fe16564f1461084557600080fd5b8063dbc16976146107b8578063e7a7ed02146107c0578063e8bf92ed146107f057600080fd5b8063d0ae98dd116100d3578063d0ae98dd14610765578063d8d1091b14610778578063d8f54db01461078b57600080fd5b8063c89e42df14610706578063cfa8ed4714610719578063d02103ca1461074557600080fd5b8063adc879e91161015b578063b6b0b09711610135578063b6b0b097146106bb578063c0cad302146106e0578063c3fd0f9c146106f357600080fd5b8063adc879e91461067e578063b02286c014610692578063b4d63f581461069b57600080fd5b80639b7967601161018c5780639b79676014610641578063a3c573eb14610654578063ab9fc5ef1461067457600080fd5b80638da5cb5b1461060857806396dc3d391461062657806399f5634e1461063957600080fd5b80635437988d116102765780637152facf1161021f5780637fcb3653116101f95780637fcb3653146105ce57806381df7d3f146105e25780638c4a0af7146105f557600080fd5b80637152facf146105a0578063748608de146105b357806379847057146105c657600080fd5b80636b8616ce116102505780636b8616ce146105655780636ff512cc14610585578063715018a61461059857600080fd5b80635437988d1461049e57806355b925e6146104b1578063574f649e146104c457600080fd5b806327eb6c0f116102d857806345605267116102b257806345605267146104405780635392c5e014610468578063542028d51461049657600080fd5b806327eb6c0f146103c85780633c1582671461040d578063423fa8561461042057600080fd5b80631a26da14116103095780631a26da14146103985780631c1083e2146103ad5780632072f6c5146103c057600080fd5b8063107bf28c1461033057806315064c961461034e57806319d8ac611461036b575b600080fd5b610338610858565b604051610345919061460e565b60405180910390f35b60655461035b9060ff1681565b6040519015158152602001610345565b60685461037f9067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610345565b6103ab6103a6366004614645565b6108e6565b005b6103ab6103bb36600461469c565b61090b565b6103ab610a17565b6070546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610345565b6103ab61041b3660046147f9565b610ac8565b60685461037f9068010000000000000000900467ffffffffffffffff1681565b60685461037f90700100000000000000000000000000000000900467ffffffffffffffff1681565b610488610476366004614910565b606b6020526000908152604090205481565b604051908152602001610345565b610338611458565b6103ab6104ac36600461469c565b611465565b6103ab6104bf366004614942565b6114b4565b6104886104d23660046149c5565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b610488610573366004614910565b60666020526000908152604090205481565b6103ab61059336600461469c565b611a7d565b6103ab611b97565b6103386105ae366004614a3b565b611ba9565b6103ab6105c1366004614942565b611de0565b610488612049565b60695461037f9067ffffffffffffffff1681565b6103ab6105f0366004614a96565b6120c3565b6103ab610603366004614b90565b61241c565b60335473ffffffffffffffffffffffffffffffffffffffff166103e8565b6103ab610634366004614910565b612536565b610488612579565b6103ab61064f366004614910565b6126aa565b6071546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b61037f62093a8081565b606e5461037f9067ffffffffffffffff1681565b61048861ea6081565b6104886106a9366004614910565b60676020526000908152604090205481565b6065546103e890610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6103ab6106ee366004614bad565b6126f9565b6103ab610701366004614942565b612711565b6103ab610714366004614bad565b612d5b565b6069546103e89068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b610488610773366004614a3b565b612e30565b6103ab610786366004614be2565b6130dc565b60695461035b907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b6103ab613781565b60685461037f907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b6103ab61081e366004614cd5565b613910565b6103ab61083136600461469c565b613e10565b61048867016345785d8a000081565b6103ab610853366004614d1a565b613ead565b606f805461086590614d46565b80601f016020809104026020016040519081016040528092919081815260200182805461089190614d46565b80156108de5780601f106108b3576101008083540402835291602001916108de565b820191906000526020600020905b8154815290600101906020018083116108c157829003601f168201915b505050505081565b6108ee613ed0565b67ffffffffffffffff909116600090815260676020526040902055565b60705473ffffffffffffffffffffffffffffffffffffffff16331461099d5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff1615610ab65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b610abe613ed0565b610ac6613f37565b565b60655460ff1615610b675760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610c005760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b805180610c9b5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015611249576000878281518110610d0157610d01614d99565b602002602001015190506000816060015167ffffffffffffffff161115610f1a5783610d2c81614df7565b945050600081600001518051906020012082602001518360600151604051602001610d8f93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610e5c5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610f145760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610994565b506110b4565b60208101511580610fc95750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610f839160040190815260200190565b6020604051808303816000875af1158015610fa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc69190614e1e565b15155b61103b5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610994565b80515161ea60116110b45760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610994565b8567ffffffffffffffff16816040015167ffffffffffffffff16101580156110ea575042816040015167ffffffffffffffff1611155b6111825760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061122b90614df7565b9550508060400151955050808061124190614e37565b915050610ce5565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156112ec5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610994565b60685460009061131a90700100000000000000000000000000000000900467ffffffffffffffff1684614e6f565b61132e9067ffffffffffffffff1687614e98565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061140b33306113e58467016345785d8a0000614eaf565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613fc1565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d805461086590614d46565b61146d613ed0565b606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60655460ff16156115535760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff90811690881611156115ff5760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a401610994565b60695467ffffffffffffffff908116908716116116aa5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b602052604090205461175c5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a401610994565b600061176a88888888611ba9565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161179f9190614eec565b602060405180830381855afa1580156117bc573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906117df9190614e1e565b6117e99190614f37565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916118539189918991899190600401614f4b565b602060405180830381865afa158015611870573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118949190614fc5565b6119065760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610994565b6069546119649033906119239067ffffffffffffffff168b614e6f565b67ffffffffffffffff16611935612579565b61193f9190614eaf565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16919061407f565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b158015611a1957600080fd5b505af1158015611a2d573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611b165760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610a0c565b611b9f613ed0565b610ac660006140da565b67ffffffffffffffff808516600081815260676020526040808220549387168252902054606092911580611bdc57508115155b611c745760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b80611d0d5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec01604051602081830303815290604052925050505b949350505050565b611de8613ed0565b60695467ffffffffffffffff9081169088161115611e945760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff90811690871611611f3f5760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610994565b67ffffffffffffffff80881660009081526067602052604080822054928916825290205481611fd65760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b806119645760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691612098917801000000000000000000000000000000000000000000000000909104166001614fe2565b6120a29190614e6f565b6120be9067ffffffffffffffff16670de0b6b3a7640000614eaf565b905090565b600054610100900460ff16158080156120e35750600054600160ff909116105b806120fd5750303b1580156120fd575060005460ff166001145b61216f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610994565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156121cd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d61230c878261505c565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f61234d858261505c565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560708054928516929091169190911790556123ab614151565b801561240e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146124b55760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a0c90831515815260200190565b61253e613ed0565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156125f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126149190614e1e565b60695460685491925060009167ffffffffffffffff918216916801000000000000000082048116916126799170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614e6f565b6126839190614fe2565b61268d9190614e6f565b67ffffffffffffffff1690506126a38183615158565b9250505090565b6126b2613ed0565b6068805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b612701613ed0565b606f61270d828261505c565b5050565b60655460ff16156127b05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8567ffffffffffffffff168767ffffffffffffffff161061285f5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a401610994565b60695467ffffffffffffffff90811690871611156129315760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c401610994565b67ffffffffffffffff87166000908152606b60205260409020546129e35760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a401610994565b67ffffffffffffffff86166000908152606b6020526040902054612a955760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a401610994565b6000612aa388888888611ba9565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051612ad89190614eec565b602060405180830381855afa158015612af5573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612b189190614e1e565b612b229190614f37565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91612b8c9189918991899190600401614f4b565b602060405180830381865afa158015612ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bcd9190614fc5565b612c3f5760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f46000000006064820152608401610994565b67ffffffffffffffff88166000908152606b6020526040902054869003612cf45760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a401610994565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a1612d50613f37565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612df45760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606d612e00828261505c565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a0c919061460e565b60695460009067ffffffffffffffff868116911614612edd5760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8467ffffffffffffffff168467ffffffffffffffff1611612f8c5760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a401610994565b60685467ffffffffffffffff68010000000000000000909104811690851611156130445760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b600061305286868686611ba9565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516130879190614eec565b602060405180830381855afa1580156130a4573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906130c79190614e1e565b6130d19190614f37565b979650505050505050565b60655460ff161561317b5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461323e5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b8051806132d95760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60685467ffffffffffffffff7801000000000000000000000000000000000000000000000000820481169161332491849170010000000000000000000000000000000090041661516c565b11156133985760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610994565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b848110156136b15760008682815181106133f8576133f8614d99565b60200260200101519050838061340d90614df7565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff881660009081526066909352912054909150811461352e5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610994565b613539600188614e98565b83036135f7574262093a8083604001516135539190614fe2565b67ffffffffffffffff1611156135f75760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610994565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209350858061369990614df7565b965050505080806136a990614e37565b9150506133dc565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166137f95760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b60705473ffffffffffffffffffffffffffffffffffffffff1633146138865760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c0000006064820152608401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156138f057600080fd5b505af1158015613904573d6000803e3d6000fd5b50505050610ac66141d7565b60655460ff16156139af5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114613a725760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b6000613a7c612049565b905081811115613af45760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610994565b61ea60835110613b6c5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610994565b606554613b9690610100900473ffffffffffffffffffffffffffffffffffffffff16333084613fc1565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613c06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2a9190614e1e565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613c6483614df7565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505083805190602001208142604051602001613cdd93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526066909352912055323303613dad57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613e0a565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613e0193929190615184565b60405180910390a25b50505050565b613e18613ed0565b73ffffffffffffffffffffffffffffffffffffffff8116613ea15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610994565b613eaa816140da565b50565b613eb5613ed0565b67ffffffffffffffff166000908152606b6020526040902055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ac65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613fa157600080fd5b505af1158015613fb5573d6000803e3d6000fd5b50505050610ac66142a2565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052613e0a9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152614397565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526140d59084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161401b565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166141ce5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610994565b610ac6336140da565b60655460ff1661424f5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff16156143415760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60006143f9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166144899092919063ffffffff16565b8051909150156140d557808060200190518101906144179190614fc5565b6140d55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610994565b6060611dd88484600085856000808673ffffffffffffffffffffffffffffffffffffffff1685876040516144bd9190614eec565b60006040518083038185875af1925050503d80600081146144fa576040519150601f19603f3d011682016040523d82523d6000602084013e6144ff565b606091505b50915091506130d187838387606083156145875782516000036145805773ffffffffffffffffffffffffffffffffffffffff85163b6145805760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610994565b5081611dd8565b611dd8838381511561459c5781518083602001fd5b8060405162461bcd60e51b8152600401610994919061460e565b60005b838110156145d15781810151838201526020016145b9565b83811115613e0a5750506000910152565b600081518084526145fa8160208601602086016145b6565b601f01601f19169290920160200192915050565b60208152600061462160208301846145e2565b9392505050565b803567ffffffffffffffff8116811461464057600080fd5b919050565b6000806040838503121561465857600080fd5b61466183614628565b946020939093013593505050565b73ffffffffffffffffffffffffffffffffffffffff81168114613eaa57600080fd5b80356146408161466f565b6000602082840312156146ae57600080fd5b81356146218161466f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171561470b5761470b6146b9565b60405290565b6040516060810167ffffffffffffffff8111828210171561470b5761470b6146b9565b604051601f8201601f1916810167ffffffffffffffff8111828210171561475d5761475d6146b9565b604052919050565b600067ffffffffffffffff82111561477f5761477f6146b9565b5060051b60200190565b600082601f83011261479a57600080fd5b813567ffffffffffffffff8111156147b4576147b46146b9565b6147c76020601f19601f84011601614734565b8181528460208386010111156147dc57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561480c57600080fd5b823567ffffffffffffffff8082111561482457600080fd5b818501915085601f83011261483857600080fd5b813561484b61484682614765565b614734565b81815260059190911b8301840190848101908883111561486a57600080fd5b8585015b83811015614903578035858111156148865760008081fd5b86016080818c03601f190181131561489e5760008081fd5b6148a66146e8565b89830135888111156148b85760008081fd5b6148c68e8c83870101614789565b8252506040808401358b83015260606148e0818601614628565b828401526148ef848601614628565b90830152508552505091860191860161486e565b5098975050505050505050565b60006020828403121561492257600080fd5b61462182614628565b806040810183101561493c57600080fd5b92915050565b6000806000806000806000610180888a03121561495e57600080fd5b61496788614628565b965061497560208901614628565b955060408801359450606088013593506149928960808a0161492b565b92506101408801898111156149a657600080fd5b60c0890192506149b68a8261492b565b91505092959891949750929550565b600080600080600060a086880312156149dd57600080fd5b85359450602086013567ffffffffffffffff8111156149fb57600080fd5b614a0788828901614789565b94505060408601359250614a1d60608701614628565b91506080860135614a2d8161466f565b809150509295509295909350565b60008060008060808587031215614a5157600080fd5b614a5a85614628565b9350614a6860208601614628565b93969395505050506040820135916060013590565b8015158114613eaa57600080fd5b803561464081614a7d565b60008060008060008060008060008060006101608c8e031215614ab857600080fd5b614ac18c614691565b9a50614acf60208d01614691565b9950614add60408d01614691565b985060608c01359750614af260808d01614691565b9650614b0060a08d01614a8b565b955067ffffffffffffffff8060c08e01351115614b1c57600080fd5b614b2c8e60c08f01358f01614789565b9550614b3a60e08e01614628565b9450806101008e01351115614b4e57600080fd5b50614b608d6101008e01358e01614789565b9250614b6f6101208d01614691565b9150614b7e6101408d01614691565b90509295989b509295989b9093969950565b600060208284031215614ba257600080fd5b813561462181614a7d565b600060208284031215614bbf57600080fd5b813567ffffffffffffffff811115614bd657600080fd5b611dd884828501614789565b60006020808385031215614bf557600080fd5b823567ffffffffffffffff80821115614c0d57600080fd5b818501915085601f830112614c2157600080fd5b8135614c2f61484682614765565b81815260059190911b83018401908481019088831115614c4e57600080fd5b8585015b8381101561490357803585811115614c6a5760008081fd5b86016060818c03601f1901811315614c825760008081fd5b614c8a614711565b8983013588811115614c9c5760008081fd5b614caa8e8c83870101614789565b8252506040808401358b830152614cc2838501614628565b9082015285525050918601918601614c52565b60008060408385031215614ce857600080fd5b823567ffffffffffffffff811115614cff57600080fd5b614d0b85828601614789565b95602094909401359450505050565b60008060408385031215614d2d57600080fd5b82359150614d3d60208401614628565b90509250929050565b600181811c90821680614d5a57607f821691505b602082108103614d93577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614e1457614e14614dc8565b6001019392505050565b600060208284031215614e3057600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e6857614e68614dc8565b5060010190565b600067ffffffffffffffff83811690831681811015614e9057614e90614dc8565b039392505050565b600082821015614eaa57614eaa614dc8565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ee757614ee7614dc8565b500290565b60008251614efe8184602087016145b6565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614f4657614f46614f08565b500690565b61012081016040808784376000838201818152879190815b6002811015614f8357848483379084018281529284019290600101614f63565b5050828760c0870137610100850181815286935091505b6001811015614fb9578251825260209283019290910190600101614f9a565b50505095945050505050565b600060208284031215614fd757600080fd5b815161462181614a7d565b600067ffffffffffffffff80831681851680830382111561500557615005614dc8565b01949350505050565b601f8211156140d557600081815260208120601f850160051c810160208610156150355750805b601f850160051c820191505b8181101561505457828155600101615041565b505050505050565b815167ffffffffffffffff811115615076576150766146b9565b61508a816150848454614d46565b8461500e565b602080601f8311600181146150dd57600084156150a75750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555615054565b600085815260208120601f198616915b8281101561510c578886015182559484019460019091019084016150ed565b508582101561514857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008261516757615167614f08565b500490565b6000821982111561517f5761517f614dc8565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006151b960608301846145e2565b9594505050505056fea2646970667358221220e47ec43ae2df60b03bfa2f67ac0b6ab9290b8e567855ca9b4612d3496ef4271664736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061032b5760003560e01c80638da5cb5b116101b2578063c89e42df116100f9578063dbc16976116100a2578063eaeb077b1161007c578063eaeb077b14610810578063f2fde38b14610823578063f755276114610836578063fe16564f1461084557600080fd5b8063dbc16976146107b8578063e7a7ed02146107c0578063e8bf92ed146107f057600080fd5b8063d0ae98dd116100d3578063d0ae98dd14610765578063d8d1091b14610778578063d8f54db01461078b57600080fd5b8063c89e42df14610706578063cfa8ed4714610719578063d02103ca1461074557600080fd5b8063adc879e91161015b578063b6b0b09711610135578063b6b0b097146106bb578063c0cad302146106e0578063c3fd0f9c146106f357600080fd5b8063adc879e91461067e578063b02286c014610692578063b4d63f581461069b57600080fd5b80639b7967601161018c5780639b79676014610641578063a3c573eb14610654578063ab9fc5ef1461067457600080fd5b80638da5cb5b1461060857806396dc3d391461062657806399f5634e1461063957600080fd5b80635437988d116102765780637152facf1161021f5780637fcb3653116101f95780637fcb3653146105ce57806381df7d3f146105e25780638c4a0af7146105f557600080fd5b80637152facf146105a0578063748608de146105b357806379847057146105c657600080fd5b80636b8616ce116102505780636b8616ce146105655780636ff512cc14610585578063715018a61461059857600080fd5b80635437988d1461049e57806355b925e6146104b1578063574f649e146104c457600080fd5b806327eb6c0f116102d857806345605267116102b257806345605267146104405780635392c5e014610468578063542028d51461049657600080fd5b806327eb6c0f146103c85780633c1582671461040d578063423fa8561461042057600080fd5b80631a26da14116103095780631a26da14146103985780631c1083e2146103ad5780632072f6c5146103c057600080fd5b8063107bf28c1461033057806315064c961461034e57806319d8ac611461036b575b600080fd5b610338610858565b604051610345919061460e565b60405180910390f35b60655461035b9060ff1681565b6040519015158152602001610345565b60685461037f9067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610345565b6103ab6103a6366004614645565b6108e6565b005b6103ab6103bb36600461469c565b61090b565b6103ab610a17565b6070546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610345565b6103ab61041b3660046147f9565b610ac8565b60685461037f9068010000000000000000900467ffffffffffffffff1681565b60685461037f90700100000000000000000000000000000000900467ffffffffffffffff1681565b610488610476366004614910565b606b6020526000908152604090205481565b604051908152602001610345565b610338611458565b6103ab6104ac36600461469c565b611465565b6103ab6104bf366004614942565b6114b4565b6104886104d23660046149c5565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b610488610573366004614910565b60666020526000908152604090205481565b6103ab61059336600461469c565b611a7d565b6103ab611b97565b6103386105ae366004614a3b565b611ba9565b6103ab6105c1366004614942565b611de0565b610488612049565b60695461037f9067ffffffffffffffff1681565b6103ab6105f0366004614a96565b6120c3565b6103ab610603366004614b90565b61241c565b60335473ffffffffffffffffffffffffffffffffffffffff166103e8565b6103ab610634366004614910565b612536565b610488612579565b6103ab61064f366004614910565b6126aa565b6071546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b61037f62093a8081565b606e5461037f9067ffffffffffffffff1681565b61048861ea6081565b6104886106a9366004614910565b60676020526000908152604090205481565b6065546103e890610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6103ab6106ee366004614bad565b6126f9565b6103ab610701366004614942565b612711565b6103ab610714366004614bad565b612d5b565b6069546103e89068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b610488610773366004614a3b565b612e30565b6103ab610786366004614be2565b6130dc565b60695461035b907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b6103ab613781565b60685461037f907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b6103ab61081e366004614cd5565b613910565b6103ab61083136600461469c565b613e10565b61048867016345785d8a000081565b6103ab610853366004614d1a565b613ead565b606f805461086590614d46565b80601f016020809104026020016040519081016040528092919081815260200182805461089190614d46565b80156108de5780601f106108b3576101008083540402835291602001916108de565b820191906000526020600020905b8154815290600101906020018083116108c157829003601f168201915b505050505081565b6108ee613ed0565b67ffffffffffffffff909116600090815260676020526040902055565b60705473ffffffffffffffffffffffffffffffffffffffff16331461099d5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff1615610ab65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b610abe613ed0565b610ac6613f37565b565b60655460ff1615610b675760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610c005760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b805180610c9b5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015611249576000878281518110610d0157610d01614d99565b602002602001015190506000816060015167ffffffffffffffff161115610f1a5783610d2c81614df7565b945050600081600001518051906020012082602001518360600151604051602001610d8f93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610e5c5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610f145760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610994565b506110b4565b60208101511580610fc95750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610f839160040190815260200190565b6020604051808303816000875af1158015610fa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc69190614e1e565b15155b61103b5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610994565b80515161ea60116110b45760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610994565b8567ffffffffffffffff16816040015167ffffffffffffffff16101580156110ea575042816040015167ffffffffffffffff1611155b6111825760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061122b90614df7565b9550508060400151955050808061124190614e37565b915050610ce5565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156112ec5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610994565b60685460009061131a90700100000000000000000000000000000000900467ffffffffffffffff1684614e6f565b61132e9067ffffffffffffffff1687614e98565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061140b33306113e58467016345785d8a0000614eaf565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613fc1565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d805461086590614d46565b61146d613ed0565b606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60655460ff16156115535760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff90811690881611156115ff5760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a401610994565b60695467ffffffffffffffff908116908716116116aa5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b602052604090205461175c5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a401610994565b600061176a88888888611ba9565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161179f9190614eec565b602060405180830381855afa1580156117bc573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906117df9190614e1e565b6117e99190614f37565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916118539189918991899190600401614f4b565b602060405180830381865afa158015611870573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118949190614fc5565b6119065760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610994565b6069546119649033906119239067ffffffffffffffff168b614e6f565b67ffffffffffffffff16611935612579565b61193f9190614eaf565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16919061407f565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b158015611a1957600080fd5b505af1158015611a2d573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611b165760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610a0c565b611b9f613ed0565b610ac660006140da565b67ffffffffffffffff808516600081815260676020526040808220549387168252902054606092911580611bdc57508115155b611c745760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b80611d0d5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec01604051602081830303815290604052925050505b949350505050565b611de8613ed0565b60695467ffffffffffffffff9081169088161115611e945760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff90811690871611611f3f5760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610994565b67ffffffffffffffff80881660009081526067602052604080822054928916825290205481611fd65760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b806119645760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691612098917801000000000000000000000000000000000000000000000000909104166001614fe2565b6120a29190614e6f565b6120be9067ffffffffffffffff16670de0b6b3a7640000614eaf565b905090565b600054610100900460ff16158080156120e35750600054600160ff909116105b806120fd5750303b1580156120fd575060005460ff166001145b61216f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610994565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156121cd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d61230c878261505c565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f61234d858261505c565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560708054928516929091169190911790556123ab614151565b801561240e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146124b55760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a0c90831515815260200190565b61253e613ed0565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156125f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126149190614e1e565b60695460685491925060009167ffffffffffffffff918216916801000000000000000082048116916126799170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614e6f565b6126839190614fe2565b61268d9190614e6f565b67ffffffffffffffff1690506126a38183615158565b9250505090565b6126b2613ed0565b6068805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b612701613ed0565b606f61270d828261505c565b5050565b60655460ff16156127b05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8567ffffffffffffffff168767ffffffffffffffff161061285f5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a401610994565b60695467ffffffffffffffff90811690871611156129315760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c401610994565b67ffffffffffffffff87166000908152606b60205260409020546129e35760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a401610994565b67ffffffffffffffff86166000908152606b6020526040902054612a955760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a401610994565b6000612aa388888888611ba9565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051612ad89190614eec565b602060405180830381855afa158015612af5573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612b189190614e1e565b612b229190614f37565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91612b8c9189918991899190600401614f4b565b602060405180830381865afa158015612ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bcd9190614fc5565b612c3f5760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f46000000006064820152608401610994565b67ffffffffffffffff88166000908152606b6020526040902054869003612cf45760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a401610994565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a1612d50613f37565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612df45760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606d612e00828261505c565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a0c919061460e565b60695460009067ffffffffffffffff868116911614612edd5760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8467ffffffffffffffff168467ffffffffffffffff1611612f8c5760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a401610994565b60685467ffffffffffffffff68010000000000000000909104811690851611156130445760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b600061305286868686611ba9565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516130879190614eec565b602060405180830381855afa1580156130a4573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906130c79190614e1e565b6130d19190614f37565b979650505050505050565b60655460ff161561317b5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461323e5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b8051806132d95760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60685467ffffffffffffffff7801000000000000000000000000000000000000000000000000820481169161332491849170010000000000000000000000000000000090041661516c565b11156133985760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610994565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b848110156136b15760008682815181106133f8576133f8614d99565b60200260200101519050838061340d90614df7565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff881660009081526066909352912054909150811461352e5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610994565b613539600188614e98565b83036135f7574262093a8083604001516135539190614fe2565b67ffffffffffffffff1611156135f75760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610994565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209350858061369990614df7565b965050505080806136a990614e37565b9150506133dc565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166137f95760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b60705473ffffffffffffffffffffffffffffffffffffffff1633146138865760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c0000006064820152608401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156138f057600080fd5b505af1158015613904573d6000803e3d6000fd5b50505050610ac66141d7565b60655460ff16156139af5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114613a725760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b6000613a7c612049565b905081811115613af45760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610994565b61ea60835110613b6c5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610994565b606554613b9690610100900473ffffffffffffffffffffffffffffffffffffffff16333084613fc1565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613c06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2a9190614e1e565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613c6483614df7565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505083805190602001208142604051602001613cdd93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526066909352912055323303613dad57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613e0a565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613e0193929190615184565b60405180910390a25b50505050565b613e18613ed0565b73ffffffffffffffffffffffffffffffffffffffff8116613ea15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610994565b613eaa816140da565b50565b613eb5613ed0565b67ffffffffffffffff166000908152606b6020526040902055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ac65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613fa157600080fd5b505af1158015613fb5573d6000803e3d6000fd5b50505050610ac66142a2565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052613e0a9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152614397565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526140d59084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161401b565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166141ce5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610994565b610ac6336140da565b60655460ff1661424f5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff16156143415760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60006143f9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166144899092919063ffffffff16565b8051909150156140d557808060200190518101906144179190614fc5565b6140d55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610994565b6060611dd88484600085856000808673ffffffffffffffffffffffffffffffffffffffff1685876040516144bd9190614eec565b60006040518083038185875af1925050503d80600081146144fa576040519150601f19603f3d011682016040523d82523d6000602084013e6144ff565b606091505b50915091506130d187838387606083156145875782516000036145805773ffffffffffffffffffffffffffffffffffffffff85163b6145805760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610994565b5081611dd8565b611dd8838381511561459c5781518083602001fd5b8060405162461bcd60e51b8152600401610994919061460e565b60005b838110156145d15781810151838201526020016145b9565b83811115613e0a5750506000910152565b600081518084526145fa8160208601602086016145b6565b601f01601f19169290920160200192915050565b60208152600061462160208301846145e2565b9392505050565b803567ffffffffffffffff8116811461464057600080fd5b919050565b6000806040838503121561465857600080fd5b61466183614628565b946020939093013593505050565b73ffffffffffffffffffffffffffffffffffffffff81168114613eaa57600080fd5b80356146408161466f565b6000602082840312156146ae57600080fd5b81356146218161466f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171561470b5761470b6146b9565b60405290565b6040516060810167ffffffffffffffff8111828210171561470b5761470b6146b9565b604051601f8201601f1916810167ffffffffffffffff8111828210171561475d5761475d6146b9565b604052919050565b600067ffffffffffffffff82111561477f5761477f6146b9565b5060051b60200190565b600082601f83011261479a57600080fd5b813567ffffffffffffffff8111156147b4576147b46146b9565b6147c76020601f19601f84011601614734565b8181528460208386010111156147dc57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561480c57600080fd5b823567ffffffffffffffff8082111561482457600080fd5b818501915085601f83011261483857600080fd5b813561484b61484682614765565b614734565b81815260059190911b8301840190848101908883111561486a57600080fd5b8585015b83811015614903578035858111156148865760008081fd5b86016080818c03601f190181131561489e5760008081fd5b6148a66146e8565b89830135888111156148b85760008081fd5b6148c68e8c83870101614789565b8252506040808401358b83015260606148e0818601614628565b828401526148ef848601614628565b90830152508552505091860191860161486e565b5098975050505050505050565b60006020828403121561492257600080fd5b61462182614628565b806040810183101561493c57600080fd5b92915050565b6000806000806000806000610180888a03121561495e57600080fd5b61496788614628565b965061497560208901614628565b955060408801359450606088013593506149928960808a0161492b565b92506101408801898111156149a657600080fd5b60c0890192506149b68a8261492b565b91505092959891949750929550565b600080600080600060a086880312156149dd57600080fd5b85359450602086013567ffffffffffffffff8111156149fb57600080fd5b614a0788828901614789565b94505060408601359250614a1d60608701614628565b91506080860135614a2d8161466f565b809150509295509295909350565b60008060008060808587031215614a5157600080fd5b614a5a85614628565b9350614a6860208601614628565b93969395505050506040820135916060013590565b8015158114613eaa57600080fd5b803561464081614a7d565b60008060008060008060008060008060006101608c8e031215614ab857600080fd5b614ac18c614691565b9a50614acf60208d01614691565b9950614add60408d01614691565b985060608c01359750614af260808d01614691565b9650614b0060a08d01614a8b565b955067ffffffffffffffff8060c08e01351115614b1c57600080fd5b614b2c8e60c08f01358f01614789565b9550614b3a60e08e01614628565b9450806101008e01351115614b4e57600080fd5b50614b608d6101008e01358e01614789565b9250614b6f6101208d01614691565b9150614b7e6101408d01614691565b90509295989b509295989b9093969950565b600060208284031215614ba257600080fd5b813561462181614a7d565b600060208284031215614bbf57600080fd5b813567ffffffffffffffff811115614bd657600080fd5b611dd884828501614789565b60006020808385031215614bf557600080fd5b823567ffffffffffffffff80821115614c0d57600080fd5b818501915085601f830112614c2157600080fd5b8135614c2f61484682614765565b81815260059190911b83018401908481019088831115614c4e57600080fd5b8585015b8381101561490357803585811115614c6a5760008081fd5b86016060818c03601f1901811315614c825760008081fd5b614c8a614711565b8983013588811115614c9c5760008081fd5b614caa8e8c83870101614789565b8252506040808401358b830152614cc2838501614628565b9082015285525050918601918601614c52565b60008060408385031215614ce857600080fd5b823567ffffffffffffffff811115614cff57600080fd5b614d0b85828601614789565b95602094909401359450505050565b60008060408385031215614d2d57600080fd5b82359150614d3d60208401614628565b90509250929050565b600181811c90821680614d5a57607f821691505b602082108103614d93577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614e1457614e14614dc8565b6001019392505050565b600060208284031215614e3057600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e6857614e68614dc8565b5060010190565b600067ffffffffffffffff83811690831681811015614e9057614e90614dc8565b039392505050565b600082821015614eaa57614eaa614dc8565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ee757614ee7614dc8565b500290565b60008251614efe8184602087016145b6565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614f4657614f46614f08565b500690565b61012081016040808784376000838201818152879190815b6002811015614f8357848483379084018281529284019290600101614f63565b5050828760c0870137610100850181815286935091505b6001811015614fb9578251825260209283019290910190600101614f9a565b50505095945050505050565b600060208284031215614fd757600080fd5b815161462181614a7d565b600067ffffffffffffffff80831681851680830382111561500557615005614dc8565b01949350505050565b601f8211156140d557600081815260208120601f850160051c810160208610156150355750805b601f850160051c820191505b8181101561505457828155600101615041565b505050505050565b815167ffffffffffffffff811115615076576150766146b9565b61508a816150848454614d46565b8461500e565b602080601f8311600181146150dd57600084156150a75750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555615054565b600085815260208120601f198616915b8281101561510c578886015182559484019460019091019084016150ed565b508582101561514857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008261516757615167614f08565b500490565b6000821982111561517f5761517f614dc8565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006151b960608301846145e2565b9594505050505056fea2646970667358221220e47ec43ae2df60b03bfa2f67ac0b6ab9290b8e567855ca9b4612d3496ef4271664736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506151f8806100206000396000f3fe608060405234801561001057600080fd5b506004361061032b5760003560e01c80638da5cb5b116101b2578063c89e42df116100f9578063dbc16976116100a2578063eaeb077b1161007c578063eaeb077b14610810578063f2fde38b14610823578063f755276114610836578063fe16564f1461084557600080fd5b8063dbc16976146107b8578063e7a7ed02146107c0578063e8bf92ed146107f057600080fd5b8063d0ae98dd116100d3578063d0ae98dd14610765578063d8d1091b14610778578063d8f54db01461078b57600080fd5b8063c89e42df14610706578063cfa8ed4714610719578063d02103ca1461074557600080fd5b8063adc879e91161015b578063b6b0b09711610135578063b6b0b097146106bb578063c0cad302146106e0578063c3fd0f9c146106f357600080fd5b8063adc879e91461067e578063b02286c014610692578063b4d63f581461069b57600080fd5b80639b7967601161018c5780639b79676014610641578063a3c573eb14610654578063ab9fc5ef1461067457600080fd5b80638da5cb5b1461060857806396dc3d391461062657806399f5634e1461063957600080fd5b80635437988d116102765780637152facf1161021f5780637fcb3653116101f95780637fcb3653146105ce57806381df7d3f146105e25780638c4a0af7146105f557600080fd5b80637152facf146105a0578063748608de146105b357806379847057146105c657600080fd5b80636b8616ce116102505780636b8616ce146105655780636ff512cc14610585578063715018a61461059857600080fd5b80635437988d1461049e57806355b925e6146104b1578063574f649e146104c457600080fd5b806327eb6c0f116102d857806345605267116102b257806345605267146104405780635392c5e014610468578063542028d51461049657600080fd5b806327eb6c0f146103c85780633c1582671461040d578063423fa8561461042057600080fd5b80631a26da14116103095780631a26da14146103985780631c1083e2146103ad5780632072f6c5146103c057600080fd5b8063107bf28c1461033057806315064c961461034e57806319d8ac611461036b575b600080fd5b610338610858565b604051610345919061460e565b60405180910390f35b60655461035b9060ff1681565b6040519015158152602001610345565b60685461037f9067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610345565b6103ab6103a6366004614645565b6108e6565b005b6103ab6103bb36600461469c565b61090b565b6103ab610a17565b6070546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610345565b6103ab61041b3660046147f9565b610ac8565b60685461037f9068010000000000000000900467ffffffffffffffff1681565b60685461037f90700100000000000000000000000000000000900467ffffffffffffffff1681565b610488610476366004614910565b606b6020526000908152604090205481565b604051908152602001610345565b610338611458565b6103ab6104ac36600461469c565b611465565b6103ab6104bf366004614942565b6114b4565b6104886104d23660046149c5565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b610488610573366004614910565b60666020526000908152604090205481565b6103ab61059336600461469c565b611a7d565b6103ab611b97565b6103386105ae366004614a3b565b611ba9565b6103ab6105c1366004614942565b611de0565b610488612049565b60695461037f9067ffffffffffffffff1681565b6103ab6105f0366004614a96565b6120c3565b6103ab610603366004614b90565b61241c565b60335473ffffffffffffffffffffffffffffffffffffffff166103e8565b6103ab610634366004614910565b612536565b610488612579565b6103ab61064f366004614910565b6126aa565b6071546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b61037f62093a8081565b606e5461037f9067ffffffffffffffff1681565b61048861ea6081565b6104886106a9366004614910565b60676020526000908152604090205481565b6065546103e890610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6103ab6106ee366004614bad565b6126f9565b6103ab610701366004614942565b612711565b6103ab610714366004614bad565b612d5b565b6069546103e89068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b610488610773366004614a3b565b612e30565b6103ab610786366004614be2565b6130dc565b60695461035b907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b6103ab613781565b60685461037f907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b6103ab61081e366004614cd5565b613910565b6103ab61083136600461469c565b613e10565b61048867016345785d8a000081565b6103ab610853366004614d1a565b613ead565b606f805461086590614d46565b80601f016020809104026020016040519081016040528092919081815260200182805461089190614d46565b80156108de5780601f106108b3576101008083540402835291602001916108de565b820191906000526020600020905b8154815290600101906020018083116108c157829003601f168201915b505050505081565b6108ee613ed0565b67ffffffffffffffff909116600090815260676020526040902055565b60705473ffffffffffffffffffffffffffffffffffffffff16331461099d5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff1615610ab65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b610abe613ed0565b610ac6613f37565b565b60655460ff1615610b675760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610c005760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b805180610c9b5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015611249576000878281518110610d0157610d01614d99565b602002602001015190506000816060015167ffffffffffffffff161115610f1a5783610d2c81614df7565b945050600081600001518051906020012082602001518360600151604051602001610d8f93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610e5c5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610f145760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610994565b506110b4565b60208101511580610fc95750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610f839160040190815260200190565b6020604051808303816000875af1158015610fa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc69190614e1e565b15155b61103b5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610994565b80515161ea60116110b45760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610994565b8567ffffffffffffffff16816040015167ffffffffffffffff16101580156110ea575042816040015167ffffffffffffffff1611155b6111825760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061122b90614df7565b9550508060400151955050808061124190614e37565b915050610ce5565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156112ec5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610994565b60685460009061131a90700100000000000000000000000000000000900467ffffffffffffffff1684614e6f565b61132e9067ffffffffffffffff1687614e98565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061140b33306113e58467016345785d8a0000614eaf565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613fc1565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d805461086590614d46565b61146d613ed0565b606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60655460ff16156115535760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff90811690881611156115ff5760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a401610994565b60695467ffffffffffffffff908116908716116116aa5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b602052604090205461175c5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a401610994565b600061176a88888888611ba9565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161179f9190614eec565b602060405180830381855afa1580156117bc573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906117df9190614e1e565b6117e99190614f37565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916118539189918991899190600401614f4b565b602060405180830381865afa158015611870573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118949190614fc5565b6119065760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610994565b6069546119649033906119239067ffffffffffffffff168b614e6f565b67ffffffffffffffff16611935612579565b61193f9190614eaf565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16919061407f565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b158015611a1957600080fd5b505af1158015611a2d573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611b165760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610a0c565b611b9f613ed0565b610ac660006140da565b67ffffffffffffffff808516600081815260676020526040808220549387168252902054606092911580611bdc57508115155b611c745760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b80611d0d5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec01604051602081830303815290604052925050505b949350505050565b611de8613ed0565b60695467ffffffffffffffff9081169088161115611e945760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff90811690871611611f3f5760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610994565b67ffffffffffffffff80881660009081526067602052604080822054928916825290205481611fd65760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b806119645760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691612098917801000000000000000000000000000000000000000000000000909104166001614fe2565b6120a29190614e6f565b6120be9067ffffffffffffffff16670de0b6b3a7640000614eaf565b905090565b600054610100900460ff16158080156120e35750600054600160ff909116105b806120fd5750303b1580156120fd575060005460ff166001145b61216f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610994565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156121cd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d61230c878261505c565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f61234d858261505c565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560708054928516929091169190911790556123ab614151565b801561240e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146124b55760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a0c90831515815260200190565b61253e613ed0565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156125f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126149190614e1e565b60695460685491925060009167ffffffffffffffff918216916801000000000000000082048116916126799170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614e6f565b6126839190614fe2565b61268d9190614e6f565b67ffffffffffffffff1690506126a38183615158565b9250505090565b6126b2613ed0565b6068805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b612701613ed0565b606f61270d828261505c565b5050565b60655460ff16156127b05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8567ffffffffffffffff168767ffffffffffffffff161061285f5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a401610994565b60695467ffffffffffffffff90811690871611156129315760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c401610994565b67ffffffffffffffff87166000908152606b60205260409020546129e35760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a401610994565b67ffffffffffffffff86166000908152606b6020526040902054612a955760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a401610994565b6000612aa388888888611ba9565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051612ad89190614eec565b602060405180830381855afa158015612af5573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612b189190614e1e565b612b229190614f37565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91612b8c9189918991899190600401614f4b565b602060405180830381865afa158015612ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bcd9190614fc5565b612c3f5760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f46000000006064820152608401610994565b67ffffffffffffffff88166000908152606b6020526040902054869003612cf45760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a401610994565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a1612d50613f37565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612df45760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606d612e00828261505c565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a0c919061460e565b60695460009067ffffffffffffffff868116911614612edd5760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8467ffffffffffffffff168467ffffffffffffffff1611612f8c5760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a401610994565b60685467ffffffffffffffff68010000000000000000909104811690851611156130445760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b600061305286868686611ba9565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516130879190614eec565b602060405180830381855afa1580156130a4573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906130c79190614e1e565b6130d19190614f37565b979650505050505050565b60655460ff161561317b5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461323e5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b8051806132d95760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60685467ffffffffffffffff7801000000000000000000000000000000000000000000000000820481169161332491849170010000000000000000000000000000000090041661516c565b11156133985760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610994565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b848110156136b15760008682815181106133f8576133f8614d99565b60200260200101519050838061340d90614df7565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff881660009081526066909352912054909150811461352e5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610994565b613539600188614e98565b83036135f7574262093a8083604001516135539190614fe2565b67ffffffffffffffff1611156135f75760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610994565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209350858061369990614df7565b965050505080806136a990614e37565b9150506133dc565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166137f95760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b60705473ffffffffffffffffffffffffffffffffffffffff1633146138865760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c0000006064820152608401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156138f057600080fd5b505af1158015613904573d6000803e3d6000fd5b50505050610ac66141d7565b60655460ff16156139af5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114613a725760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b6000613a7c612049565b905081811115613af45760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610994565b61ea60835110613b6c5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610994565b606554613b9690610100900473ffffffffffffffffffffffffffffffffffffffff16333084613fc1565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613c06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2a9190614e1e565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613c6483614df7565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505083805190602001208142604051602001613cdd93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526066909352912055323303613dad57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613e0a565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613e0193929190615184565b60405180910390a25b50505050565b613e18613ed0565b73ffffffffffffffffffffffffffffffffffffffff8116613ea15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610994565b613eaa816140da565b50565b613eb5613ed0565b67ffffffffffffffff166000908152606b6020526040902055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ac65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613fa157600080fd5b505af1158015613fb5573d6000803e3d6000fd5b50505050610ac66142a2565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052613e0a9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152614397565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526140d59084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161401b565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166141ce5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610994565b610ac6336140da565b60655460ff1661424f5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff16156143415760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60006143f9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166144899092919063ffffffff16565b8051909150156140d557808060200190518101906144179190614fc5565b6140d55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610994565b6060611dd88484600085856000808673ffffffffffffffffffffffffffffffffffffffff1685876040516144bd9190614eec565b60006040518083038185875af1925050503d80600081146144fa576040519150601f19603f3d011682016040523d82523d6000602084013e6144ff565b606091505b50915091506130d187838387606083156145875782516000036145805773ffffffffffffffffffffffffffffffffffffffff85163b6145805760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610994565b5081611dd8565b611dd8838381511561459c5781518083602001fd5b8060405162461bcd60e51b8152600401610994919061460e565b60005b838110156145d15781810151838201526020016145b9565b83811115613e0a5750506000910152565b600081518084526145fa8160208601602086016145b6565b601f01601f19169290920160200192915050565b60208152600061462160208301846145e2565b9392505050565b803567ffffffffffffffff8116811461464057600080fd5b919050565b6000806040838503121561465857600080fd5b61466183614628565b946020939093013593505050565b73ffffffffffffffffffffffffffffffffffffffff81168114613eaa57600080fd5b80356146408161466f565b6000602082840312156146ae57600080fd5b81356146218161466f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171561470b5761470b6146b9565b60405290565b6040516060810167ffffffffffffffff8111828210171561470b5761470b6146b9565b604051601f8201601f1916810167ffffffffffffffff8111828210171561475d5761475d6146b9565b604052919050565b600067ffffffffffffffff82111561477f5761477f6146b9565b5060051b60200190565b600082601f83011261479a57600080fd5b813567ffffffffffffffff8111156147b4576147b46146b9565b6147c76020601f19601f84011601614734565b8181528460208386010111156147dc57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561480c57600080fd5b823567ffffffffffffffff8082111561482457600080fd5b818501915085601f83011261483857600080fd5b813561484b61484682614765565b614734565b81815260059190911b8301840190848101908883111561486a57600080fd5b8585015b83811015614903578035858111156148865760008081fd5b86016080818c03601f190181131561489e5760008081fd5b6148a66146e8565b89830135888111156148b85760008081fd5b6148c68e8c83870101614789565b8252506040808401358b83015260606148e0818601614628565b828401526148ef848601614628565b90830152508552505091860191860161486e565b5098975050505050505050565b60006020828403121561492257600080fd5b61462182614628565b806040810183101561493c57600080fd5b92915050565b6000806000806000806000610180888a03121561495e57600080fd5b61496788614628565b965061497560208901614628565b955060408801359450606088013593506149928960808a0161492b565b92506101408801898111156149a657600080fd5b60c0890192506149b68a8261492b565b91505092959891949750929550565b600080600080600060a086880312156149dd57600080fd5b85359450602086013567ffffffffffffffff8111156149fb57600080fd5b614a0788828901614789565b94505060408601359250614a1d60608701614628565b91506080860135614a2d8161466f565b809150509295509295909350565b60008060008060808587031215614a5157600080fd5b614a5a85614628565b9350614a6860208601614628565b93969395505050506040820135916060013590565b8015158114613eaa57600080fd5b803561464081614a7d565b60008060008060008060008060008060006101608c8e031215614ab857600080fd5b614ac18c614691565b9a50614acf60208d01614691565b9950614add60408d01614691565b985060608c01359750614af260808d01614691565b9650614b0060a08d01614a8b565b955067ffffffffffffffff8060c08e01351115614b1c57600080fd5b614b2c8e60c08f01358f01614789565b9550614b3a60e08e01614628565b9450806101008e01351115614b4e57600080fd5b50614b608d6101008e01358e01614789565b9250614b6f6101208d01614691565b9150614b7e6101408d01614691565b90509295989b509295989b9093969950565b600060208284031215614ba257600080fd5b813561462181614a7d565b600060208284031215614bbf57600080fd5b813567ffffffffffffffff811115614bd657600080fd5b611dd884828501614789565b60006020808385031215614bf557600080fd5b823567ffffffffffffffff80821115614c0d57600080fd5b818501915085601f830112614c2157600080fd5b8135614c2f61484682614765565b81815260059190911b83018401908481019088831115614c4e57600080fd5b8585015b8381101561490357803585811115614c6a5760008081fd5b86016060818c03601f1901811315614c825760008081fd5b614c8a614711565b8983013588811115614c9c5760008081fd5b614caa8e8c83870101614789565b8252506040808401358b830152614cc2838501614628565b9082015285525050918601918601614c52565b60008060408385031215614ce857600080fd5b823567ffffffffffffffff811115614cff57600080fd5b614d0b85828601614789565b95602094909401359450505050565b60008060408385031215614d2d57600080fd5b82359150614d3d60208401614628565b90509250929050565b600181811c90821680614d5a57607f821691505b602082108103614d93577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614e1457614e14614dc8565b6001019392505050565b600060208284031215614e3057600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e6857614e68614dc8565b5060010190565b600067ffffffffffffffff83811690831681811015614e9057614e90614dc8565b039392505050565b600082821015614eaa57614eaa614dc8565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ee757614ee7614dc8565b500290565b60008251614efe8184602087016145b6565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614f4657614f46614f08565b500690565b61012081016040808784376000838201818152879190815b6002811015614f8357848483379084018281529284019290600101614f63565b5050828760c0870137610100850181815286935091505b6001811015614fb9578251825260209283019290910190600101614f9a565b50505095945050505050565b600060208284031215614fd757600080fd5b815161462181614a7d565b600067ffffffffffffffff80831681851680830382111561500557615005614dc8565b01949350505050565b601f8211156140d557600081815260208120601f850160051c810160208610156150355750805b601f850160051c820191505b8181101561505457828155600101615041565b505050505050565b815167ffffffffffffffff811115615076576150766146b9565b61508a816150848454614d46565b8461500e565b602080601f8311600181146150dd57600084156150a75750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555615054565b600085815260208120601f198616915b8281101561510c578886015182559484019460019091019084016150ed565b508582101561514857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008261516757615167614f08565b500490565b6000821982111561517f5761517f614dc8565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006151b960608301846145e2565b9594505050505056fea26469706673582212206e111003f6bc21779ab20dd8da4b7e3ffaa2d3c12921bb3c57a89659abd5c04564736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061032b5760003560e01c80638da5cb5b116101b2578063c89e42df116100f9578063dbc16976116100a2578063eaeb077b1161007c578063eaeb077b14610810578063f2fde38b14610823578063f755276114610836578063fe16564f1461084557600080fd5b8063dbc16976146107b8578063e7a7ed02146107c0578063e8bf92ed146107f057600080fd5b8063d0ae98dd116100d3578063d0ae98dd14610765578063d8d1091b14610778578063d8f54db01461078b57600080fd5b8063c89e42df14610706578063cfa8ed4714610719578063d02103ca1461074557600080fd5b8063adc879e91161015b578063b6b0b09711610135578063b6b0b097146106bb578063c0cad302146106e0578063c3fd0f9c146106f357600080fd5b8063adc879e91461067e578063b02286c014610692578063b4d63f581461069b57600080fd5b80639b7967601161018c5780639b79676014610641578063a3c573eb14610654578063ab9fc5ef1461067457600080fd5b80638da5cb5b1461060857806396dc3d391461062657806399f5634e1461063957600080fd5b80635437988d116102765780637152facf1161021f5780637fcb3653116101f95780637fcb3653146105ce57806381df7d3f146105e25780638c4a0af7146105f557600080fd5b80637152facf146105a0578063748608de146105b357806379847057146105c657600080fd5b80636b8616ce116102505780636b8616ce146105655780636ff512cc14610585578063715018a61461059857600080fd5b80635437988d1461049e57806355b925e6146104b1578063574f649e146104c457600080fd5b806327eb6c0f116102d857806345605267116102b257806345605267146104405780635392c5e014610468578063542028d51461049657600080fd5b806327eb6c0f146103c85780633c1582671461040d578063423fa8561461042057600080fd5b80631a26da14116103095780631a26da14146103985780631c1083e2146103ad5780632072f6c5146103c057600080fd5b8063107bf28c1461033057806315064c961461034e57806319d8ac611461036b575b600080fd5b610338610858565b604051610345919061460e565b60405180910390f35b60655461035b9060ff1681565b6040519015158152602001610345565b60685461037f9067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610345565b6103ab6103a6366004614645565b6108e6565b005b6103ab6103bb36600461469c565b61090b565b6103ab610a17565b6070546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610345565b6103ab61041b3660046147f9565b610ac8565b60685461037f9068010000000000000000900467ffffffffffffffff1681565b60685461037f90700100000000000000000000000000000000900467ffffffffffffffff1681565b610488610476366004614910565b606b6020526000908152604090205481565b604051908152602001610345565b610338611458565b6103ab6104ac36600461469c565b611465565b6103ab6104bf366004614942565b6114b4565b6104886104d23660046149c5565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b610488610573366004614910565b60666020526000908152604090205481565b6103ab61059336600461469c565b611a7d565b6103ab611b97565b6103386105ae366004614a3b565b611ba9565b6103ab6105c1366004614942565b611de0565b610488612049565b60695461037f9067ffffffffffffffff1681565b6103ab6105f0366004614a96565b6120c3565b6103ab610603366004614b90565b61241c565b60335473ffffffffffffffffffffffffffffffffffffffff166103e8565b6103ab610634366004614910565b612536565b610488612579565b6103ab61064f366004614910565b6126aa565b6071546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b61037f62093a8081565b606e5461037f9067ffffffffffffffff1681565b61048861ea6081565b6104886106a9366004614910565b60676020526000908152604090205481565b6065546103e890610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6103ab6106ee366004614bad565b6126f9565b6103ab610701366004614942565b612711565b6103ab610714366004614bad565b612d5b565b6069546103e89068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b610488610773366004614a3b565b612e30565b6103ab610786366004614be2565b6130dc565b60695461035b907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b6103ab613781565b60685461037f907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b6103ab61081e366004614cd5565b613910565b6103ab61083136600461469c565b613e10565b61048867016345785d8a000081565b6103ab610853366004614d1a565b613ead565b606f805461086590614d46565b80601f016020809104026020016040519081016040528092919081815260200182805461089190614d46565b80156108de5780601f106108b3576101008083540402835291602001916108de565b820191906000526020600020905b8154815290600101906020018083116108c157829003601f168201915b505050505081565b6108ee613ed0565b67ffffffffffffffff909116600090815260676020526040902055565b60705473ffffffffffffffffffffffffffffffffffffffff16331461099d5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff1615610ab65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b610abe613ed0565b610ac6613f37565b565b60655460ff1615610b675760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610c005760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b805180610c9b5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015611249576000878281518110610d0157610d01614d99565b602002602001015190506000816060015167ffffffffffffffff161115610f1a5783610d2c81614df7565b945050600081600001518051906020012082602001518360600151604051602001610d8f93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610e5c5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610f145760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610994565b506110b4565b60208101511580610fc95750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610f839160040190815260200190565b6020604051808303816000875af1158015610fa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc69190614e1e565b15155b61103b5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610994565b80515161ea60116110b45760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610994565b8567ffffffffffffffff16816040015167ffffffffffffffff16101580156110ea575042816040015167ffffffffffffffff1611155b6111825760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061122b90614df7565b9550508060400151955050808061124190614e37565b915050610ce5565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156112ec5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610994565b60685460009061131a90700100000000000000000000000000000000900467ffffffffffffffff1684614e6f565b61132e9067ffffffffffffffff1687614e98565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061140b33306113e58467016345785d8a0000614eaf565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613fc1565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d805461086590614d46565b61146d613ed0565b606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60655460ff16156115535760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff90811690881611156115ff5760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a401610994565b60695467ffffffffffffffff908116908716116116aa5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b602052604090205461175c5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a401610994565b600061176a88888888611ba9565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161179f9190614eec565b602060405180830381855afa1580156117bc573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906117df9190614e1e565b6117e99190614f37565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916118539189918991899190600401614f4b565b602060405180830381865afa158015611870573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118949190614fc5565b6119065760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610994565b6069546119649033906119239067ffffffffffffffff168b614e6f565b67ffffffffffffffff16611935612579565b61193f9190614eaf565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16919061407f565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b158015611a1957600080fd5b505af1158015611a2d573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611b165760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610a0c565b611b9f613ed0565b610ac660006140da565b67ffffffffffffffff808516600081815260676020526040808220549387168252902054606092911580611bdc57508115155b611c745760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b80611d0d5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec01604051602081830303815290604052925050505b949350505050565b611de8613ed0565b60695467ffffffffffffffff9081169088161115611e945760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff90811690871611611f3f5760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610994565b67ffffffffffffffff80881660009081526067602052604080822054928916825290205481611fd65760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b806119645760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691612098917801000000000000000000000000000000000000000000000000909104166001614fe2565b6120a29190614e6f565b6120be9067ffffffffffffffff16670de0b6b3a7640000614eaf565b905090565b600054610100900460ff16158080156120e35750600054600160ff909116105b806120fd5750303b1580156120fd575060005460ff166001145b61216f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610994565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156121cd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d61230c878261505c565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f61234d858261505c565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560708054928516929091169190911790556123ab614151565b801561240e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146124b55760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a0c90831515815260200190565b61253e613ed0565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156125f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126149190614e1e565b60695460685491925060009167ffffffffffffffff918216916801000000000000000082048116916126799170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614e6f565b6126839190614fe2565b61268d9190614e6f565b67ffffffffffffffff1690506126a38183615158565b9250505090565b6126b2613ed0565b6068805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b612701613ed0565b606f61270d828261505c565b5050565b60655460ff16156127b05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8567ffffffffffffffff168767ffffffffffffffff161061285f5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a401610994565b60695467ffffffffffffffff90811690871611156129315760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c401610994565b67ffffffffffffffff87166000908152606b60205260409020546129e35760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a401610994565b67ffffffffffffffff86166000908152606b6020526040902054612a955760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a401610994565b6000612aa388888888611ba9565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051612ad89190614eec565b602060405180830381855afa158015612af5573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612b189190614e1e565b612b229190614f37565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91612b8c9189918991899190600401614f4b565b602060405180830381865afa158015612ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bcd9190614fc5565b612c3f5760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f46000000006064820152608401610994565b67ffffffffffffffff88166000908152606b6020526040902054869003612cf45760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a401610994565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a1612d50613f37565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612df45760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606d612e00828261505c565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a0c919061460e565b60695460009067ffffffffffffffff868116911614612edd5760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8467ffffffffffffffff168467ffffffffffffffff1611612f8c5760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a401610994565b60685467ffffffffffffffff68010000000000000000909104811690851611156130445760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b600061305286868686611ba9565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516130879190614eec565b602060405180830381855afa1580156130a4573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906130c79190614e1e565b6130d19190614f37565b979650505050505050565b60655460ff161561317b5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461323e5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b8051806132d95760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60685467ffffffffffffffff7801000000000000000000000000000000000000000000000000820481169161332491849170010000000000000000000000000000000090041661516c565b11156133985760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610994565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b848110156136b15760008682815181106133f8576133f8614d99565b60200260200101519050838061340d90614df7565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff881660009081526066909352912054909150811461352e5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610994565b613539600188614e98565b83036135f7574262093a8083604001516135539190614fe2565b67ffffffffffffffff1611156135f75760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610994565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209350858061369990614df7565b965050505080806136a990614e37565b9150506133dc565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166137f95760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b60705473ffffffffffffffffffffffffffffffffffffffff1633146138865760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c0000006064820152608401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156138f057600080fd5b505af1158015613904573d6000803e3d6000fd5b50505050610ac66141d7565b60655460ff16156139af5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114613a725760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b6000613a7c612049565b905081811115613af45760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610994565b61ea60835110613b6c5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610994565b606554613b9690610100900473ffffffffffffffffffffffffffffffffffffffff16333084613fc1565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613c06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2a9190614e1e565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613c6483614df7565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505083805190602001208142604051602001613cdd93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526066909352912055323303613dad57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613e0a565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613e0193929190615184565b60405180910390a25b50505050565b613e18613ed0565b73ffffffffffffffffffffffffffffffffffffffff8116613ea15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610994565b613eaa816140da565b50565b613eb5613ed0565b67ffffffffffffffff166000908152606b6020526040902055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ac65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613fa157600080fd5b505af1158015613fb5573d6000803e3d6000fd5b50505050610ac66142a2565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052613e0a9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152614397565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526140d59084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161401b565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166141ce5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610994565b610ac6336140da565b60655460ff1661424f5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff16156143415760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60006143f9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166144899092919063ffffffff16565b8051909150156140d557808060200190518101906144179190614fc5565b6140d55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610994565b6060611dd88484600085856000808673ffffffffffffffffffffffffffffffffffffffff1685876040516144bd9190614eec565b60006040518083038185875af1925050503d80600081146144fa576040519150601f19603f3d011682016040523d82523d6000602084013e6144ff565b606091505b50915091506130d187838387606083156145875782516000036145805773ffffffffffffffffffffffffffffffffffffffff85163b6145805760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610994565b5081611dd8565b611dd8838381511561459c5781518083602001fd5b8060405162461bcd60e51b8152600401610994919061460e565b60005b838110156145d15781810151838201526020016145b9565b83811115613e0a5750506000910152565b600081518084526145fa8160208601602086016145b6565b601f01601f19169290920160200192915050565b60208152600061462160208301846145e2565b9392505050565b803567ffffffffffffffff8116811461464057600080fd5b919050565b6000806040838503121561465857600080fd5b61466183614628565b946020939093013593505050565b73ffffffffffffffffffffffffffffffffffffffff81168114613eaa57600080fd5b80356146408161466f565b6000602082840312156146ae57600080fd5b81356146218161466f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171561470b5761470b6146b9565b60405290565b6040516060810167ffffffffffffffff8111828210171561470b5761470b6146b9565b604051601f8201601f1916810167ffffffffffffffff8111828210171561475d5761475d6146b9565b604052919050565b600067ffffffffffffffff82111561477f5761477f6146b9565b5060051b60200190565b600082601f83011261479a57600080fd5b813567ffffffffffffffff8111156147b4576147b46146b9565b6147c76020601f19601f84011601614734565b8181528460208386010111156147dc57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561480c57600080fd5b823567ffffffffffffffff8082111561482457600080fd5b818501915085601f83011261483857600080fd5b813561484b61484682614765565b614734565b81815260059190911b8301840190848101908883111561486a57600080fd5b8585015b83811015614903578035858111156148865760008081fd5b86016080818c03601f190181131561489e5760008081fd5b6148a66146e8565b89830135888111156148b85760008081fd5b6148c68e8c83870101614789565b8252506040808401358b83015260606148e0818601614628565b828401526148ef848601614628565b90830152508552505091860191860161486e565b5098975050505050505050565b60006020828403121561492257600080fd5b61462182614628565b806040810183101561493c57600080fd5b92915050565b6000806000806000806000610180888a03121561495e57600080fd5b61496788614628565b965061497560208901614628565b955060408801359450606088013593506149928960808a0161492b565b92506101408801898111156149a657600080fd5b60c0890192506149b68a8261492b565b91505092959891949750929550565b600080600080600060a086880312156149dd57600080fd5b85359450602086013567ffffffffffffffff8111156149fb57600080fd5b614a0788828901614789565b94505060408601359250614a1d60608701614628565b91506080860135614a2d8161466f565b809150509295509295909350565b60008060008060808587031215614a5157600080fd5b614a5a85614628565b9350614a6860208601614628565b93969395505050506040820135916060013590565b8015158114613eaa57600080fd5b803561464081614a7d565b60008060008060008060008060008060006101608c8e031215614ab857600080fd5b614ac18c614691565b9a50614acf60208d01614691565b9950614add60408d01614691565b985060608c01359750614af260808d01614691565b9650614b0060a08d01614a8b565b955067ffffffffffffffff8060c08e01351115614b1c57600080fd5b614b2c8e60c08f01358f01614789565b9550614b3a60e08e01614628565b9450806101008e01351115614b4e57600080fd5b50614b608d6101008e01358e01614789565b9250614b6f6101208d01614691565b9150614b7e6101408d01614691565b90509295989b509295989b9093969950565b600060208284031215614ba257600080fd5b813561462181614a7d565b600060208284031215614bbf57600080fd5b813567ffffffffffffffff811115614bd657600080fd5b611dd884828501614789565b60006020808385031215614bf557600080fd5b823567ffffffffffffffff80821115614c0d57600080fd5b818501915085601f830112614c2157600080fd5b8135614c2f61484682614765565b81815260059190911b83018401908481019088831115614c4e57600080fd5b8585015b8381101561490357803585811115614c6a5760008081fd5b86016060818c03601f1901811315614c825760008081fd5b614c8a614711565b8983013588811115614c9c5760008081fd5b614caa8e8c83870101614789565b8252506040808401358b830152614cc2838501614628565b9082015285525050918601918601614c52565b60008060408385031215614ce857600080fd5b823567ffffffffffffffff811115614cff57600080fd5b614d0b85828601614789565b95602094909401359450505050565b60008060408385031215614d2d57600080fd5b82359150614d3d60208401614628565b90509250929050565b600181811c90821680614d5a57607f821691505b602082108103614d93577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614e1457614e14614dc8565b6001019392505050565b600060208284031215614e3057600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e6857614e68614dc8565b5060010190565b600067ffffffffffffffff83811690831681811015614e9057614e90614dc8565b039392505050565b600082821015614eaa57614eaa614dc8565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ee757614ee7614dc8565b500290565b60008251614efe8184602087016145b6565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614f4657614f46614f08565b500690565b61012081016040808784376000838201818152879190815b6002811015614f8357848483379084018281529284019290600101614f63565b5050828760c0870137610100850181815286935091505b6001811015614fb9578251825260209283019290910190600101614f9a565b50505095945050505050565b600060208284031215614fd757600080fd5b815161462181614a7d565b600067ffffffffffffffff80831681851680830382111561500557615005614dc8565b01949350505050565b601f8211156140d557600081815260208120601f850160051c810160208610156150355750805b601f850160051c820191505b8181101561505457828155600101615041565b505050505050565b815167ffffffffffffffff811115615076576150766146b9565b61508a816150848454614d46565b8461500e565b602080601f8311600181146150dd57600084156150a75750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555615054565b600085815260208120601f198616915b8281101561510c578886015182559484019460019091019084016150ed565b508582101561514857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008261516757615167614f08565b500490565b6000821982111561517f5761517f614dc8565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006151b960608301846145e2565b9594505050505056fea26469706673582212206e111003f6bc21779ab20dd8da4b7e3ffaa2d3c12921bb3c57a89659abd5c04564736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/Bridge.sol b/contracts/Bridge.sol index 73c8f5689..19274678f 100644 --- a/contracts/Bridge.sol +++ b/contracts/Bridge.sol @@ -562,7 +562,7 @@ contract Bridge is require( timestampGlobalExitRoot != 0 && (block.timestamp - timestampGlobalExitRoot) >= claimTimeout, - "Bridge::_verifyLeaf: GLOBAL_EXIT_ROOT_INVALID" + "Bridge::_verifyLeaf: GLOBAL_EXIT_ROOT_INVALID_OR_NOT_YET_CLAIMABLE" ); // Destination network must be networkID diff --git a/contracts/ProofOfEfficiency.sol b/contracts/ProofOfEfficiency.sol index 93624c92e..8c43cd29e 100644 --- a/contracts/ProofOfEfficiency.sol +++ b/contracts/ProofOfEfficiency.sol @@ -621,7 +621,7 @@ contract ProofOfEfficiency is } /** - * @notice Allows to stop the zk-evm if its possible to prove a different state root give the same batches. + * @notice Allows to halt the PoE if its possible to prove a different state root given the same batches * @param initNumBatch Batch which the aggregator starts the verification * @param finalNewBatch Last batch aggregator intends to verify * @param newLocalExitRoot New local exit root once the batch is processed diff --git a/docs/ProofOfEfficiency.md b/docs/ProofOfEfficiency.md index 94af6d4ad..071a0b023 100644 --- a/docs/ProofOfEfficiency.md +++ b/docs/ProofOfEfficiency.md @@ -179,7 +179,7 @@ Allow the current security council to set a new security council address uint256[2] proofC ) public ``` -Allows to stop the zk-evm if its possible to prove a different state root give the same batches. +Allows to halt the PoE if its possible to prove a different state root given the same batches #### Parameters: diff --git a/test/contracts/bridge.test.js b/test/contracts/bridge.test.js index 421d29d14..c663cc3e4 100644 --- a/test/contracts/bridge.test.js +++ b/test/contracts/bridge.test.js @@ -741,7 +741,7 @@ describe('Bridge Contract', () => { metadata, )).to.be.revertedWith('Bridge::_verifyLeaf: DESTINATION_NETWORK_DOES_NOT_MATCH'); - // Check GLOBAL_EXIT_ROOT_INVALID assert + // Check GLOBAL_EXIT_ROOT_INVALID_OR_NOT_YET_CLAIMABLE assert await expect(bridgeContract.claimAsset( proof, index, @@ -753,7 +753,7 @@ describe('Bridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('Bridge::_verifyLeaf: GLOBAL_EXIT_ROOT_INVALID'); + )).to.be.revertedWith('Bridge::_verifyLeaf: GLOBAL_EXIT_ROOT_INVALID_OR_NOT_YET_CLAIMABLE'); // Check SMT_INVALID assert await expect(bridgeContract.claimAsset( @@ -1228,7 +1228,7 @@ describe('Bridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('Bridge::_verifyLeaf: GLOBAL_EXIT_ROOT_INVALID'); + )).to.be.revertedWith('Bridge::_verifyLeaf: GLOBAL_EXIT_ROOT_INVALID_OR_NOT_YET_CLAIMABLE'); // Can't claim because claim timeout does not expired yet ( edge case) await ethers.provider.send('evm_setNextBlockTimestamp', [(globalExitRootTimestamp.toNumber() + newClaimTimeout) - 1]); @@ -1243,7 +1243,7 @@ describe('Bridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('Bridge::_verifyLeaf: GLOBAL_EXIT_ROOT_INVALID'); + )).to.be.revertedWith('Bridge::_verifyLeaf: GLOBAL_EXIT_ROOT_INVALID_OR_NOT_YET_CLAIMABLE'); // Now can claim! await expect(bridgeContract.claimAsset( From 3a866d93a468cf6e879ca9c3061c2befbc539563 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Wed, 23 Nov 2022 15:54:21 +0100 Subject: [PATCH 25/71] add create genesis script --- deployment/{deployment_v2-0 => }/README.md | 2 +- .../{deployment_v2-0 => }/deployPoE_v2-0.js | 2 +- .../deploy_parameters.json.example | 0 .../deployment_v2-0/generateGenesisAddress.js | 59 ----- deployment/deployment_v2-0/genesis.json | 79 ------ .../{deployment_v2-0 => }/genesis-gen.json | 4 +- deployment/genesis.json | 34 +++ .../{deployment_v2-0 => }/verifyPoE_v2-0.js | 2 +- docker/scripts/deploy-docker.sh | 8 +- docker/scripts/genesis_docker.json | 70 ++---- docker/scripts/genesis_gen_docker.json | 4 +- package.json | 15 +- src/create-genesis.js | 224 ++++++++++++++++++ 13 files changed, 294 insertions(+), 209 deletions(-) rename deployment/{deployment_v2-0 => }/README.md (98%) rename deployment/{deployment_v2-0 => }/deployPoE_v2-0.js (99%) rename deployment/{deployment_v2-0 => }/deploy_parameters.json.example (100%) delete mode 100644 deployment/deployment_v2-0/generateGenesisAddress.js delete mode 100644 deployment/deployment_v2-0/genesis.json rename deployment/{deployment_v2-0 => }/genesis-gen.json (92%) create mode 100644 deployment/genesis.json rename deployment/{deployment_v2-0 => }/verifyPoE_v2-0.js (95%) create mode 100644 src/create-genesis.js diff --git a/deployment/deployment_v2-0/README.md b/deployment/README.md similarity index 98% rename from deployment/deployment_v2-0/README.md rename to deployment/README.md index ec228caa9..c3fd1b04c 100644 --- a/deployment/deployment_v2-0/README.md +++ b/deployment/README.md @@ -15,7 +15,7 @@ cp .env.example .env Fill `.env` with your `MNEMONIC` and `INFURA_PROJECT_ID` ``` -cd deployment/deployment_v2-0 +cd deployment cp deploy_parameters.json.example deploy_parameters.json ``` diff --git a/deployment/deployment_v2-0/deployPoE_v2-0.js b/deployment/deployPoE_v2-0.js similarity index 99% rename from deployment/deployment_v2-0/deployPoE_v2-0.js rename to deployment/deployPoE_v2-0.js index a70453117..8675fad53 100644 --- a/deployment/deployment_v2-0/deployPoE_v2-0.js +++ b/deployment/deployPoE_v2-0.js @@ -4,7 +4,7 @@ const { ethers } = require('hardhat'); const path = require('path'); const fs = require('fs'); -require('dotenv').config({ path: path.resolve(__dirname, '../../.env') }); +require('dotenv').config({ path: path.resolve(__dirname, '../.env') }); const pathOutputJson = path.join(__dirname, './deploy_output.json'); diff --git a/deployment/deployment_v2-0/deploy_parameters.json.example b/deployment/deploy_parameters.json.example similarity index 100% rename from deployment/deployment_v2-0/deploy_parameters.json.example rename to deployment/deploy_parameters.json.example diff --git a/deployment/deployment_v2-0/generateGenesisAddress.js b/deployment/deployment_v2-0/generateGenesisAddress.js deleted file mode 100644 index eec71eb20..000000000 --- a/deployment/deployment_v2-0/generateGenesisAddress.js +++ /dev/null @@ -1,59 +0,0 @@ -/* eslint-disable import/no-unresolved */ -const fs = require('fs'); -const path = require('path'); - -const deployParameters = require('./deploy_parameters.json'); - -const pathOutputJson = path.join(__dirname, './deploy_parameters.json'); - -const addressTable = ` - | Address | Owner | - |:------------------------------------------:|:---------------:| - | 0xA67CD3f603E42dcBF674ffBa511872Bd397EB895 | | - | 0xbAe5deBDDf9381686ec18a8A2B99E09ADa982adf | | - | 0xfcFC415D6D21660b90c0545CA0e91E68172B8650 | | - | 0x999b52bE90FA59fCaEf59d7243FD874aF3E43E04 | | - | 0x2536C2745Ac4A584656A830f7bdCd329c94e8F30 | | - | 0x380ed8Bd696c78395Fb1961BDa42739D2f5242a1 | | - | 0xd873F6DC68e3057e4B7da74c6b304d0eF0B484C7 | | - | 0x1EA2EBB132aBD1157831feE038F31A39674b9992 | | - | 0xb48cA794d49EeC406A5dD2c547717e37b5952a83 | | - | 0xCF7A13951c6F804E334C39F2eD81D79317e65093 | | - | 0x56b2118d90cCA76E4683EfECEEC35662372d64Cd | | - | 0xd66d09242faa9b3beae711f89d8fff0946974a21 | | - | 0x615031554479128d65f30Ffa721791D6441d9727 | | - | 0x890C6F9dAa205C93FeD6546F9ecb4d8D71cfC250 | | - | 0x8faF6d5f53cD2459aDB7D4cF8682db024dCdCD26 | | - | | | - | | | - | | | - | | | - | | | - | | | - | | | - | | | - | | | -`; -// Get address array -let currentIndex = addressTable.indexOf('0x'); -const addressArray = []; -while (currentIndex !== -1) { - // 20bytes * 2 character/byte + 0x(2 characters) = 42 characters - const currentAddres = addressTable.slice(currentIndex, currentIndex + 42); - addressArray.push(currentAddres); - currentIndex = addressTable.indexOf('0x', currentIndex + 1); -} - -// Edit genesis array from file -const { genesis } = deployParameters; -const addressesGenesis = genesis.map((accountObject) => accountObject.address); - -for (let i = 0; i < addressArray.length; i++) { - const currentAddres = addressArray[i]; - if (!addressesGenesis.includes(currentAddres)) { - const currentObject = { address: currentAddres }; - genesis.push(currentObject); - } -} - -fs.writeFileSync(pathOutputJson, JSON.stringify(deployParameters, null, 1)); diff --git a/deployment/deployment_v2-0/genesis.json b/deployment/deployment_v2-0/genesis.json deleted file mode 100644 index 890f0204d..000000000 --- a/deployment/deployment_v2-0/genesis.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "root": "0xe34f1f840af49fa52051d291c4c5eea69948374f706648378ea12b6b6e82a80b", - "genesis": [ - { - "balance": "0", - "nonce": "1", - "address": "0xae4bb80be56b819606589de61d5ec3b522eeb032", - "bytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610197565b60006020819052908152604090205481565b6100a061009b366004610197565b6100e7565b005b6002546100c29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610064565b60025473ffffffffffffffffffffffffffffffffffffffff163314610192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a7570646174654560448201527f786974526f6f743a204f4e4c595f425249444745000000000000000000000000606482015260840160405180910390fd5b600155565b6000602082840312156101a957600080fd5b503591905056fea2646970667358221220b6ba072419f510d5d5b9a55d9605786898f58415125e7e2ac3f699371fda0cbc64736f6c634300080f0033", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000002": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988" - }, - "contractName": "GlobalExitRootManagerL2" - }, - { - "balance": "100000000000000000000000", - "nonce": "2", - "address": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988", - "bytecode": "0x6080604052600436106200017b5760003560e01c806381b1c17411620000cf578063d02103ca116200007d578063e73758811162000060578063e73758811462000589578063ed6be5c914620005bd578063ff634ed714620005d457600080fd5b8063d02103ca1462000543578063d96a15f7146200057257600080fd5b8063a08e8a0811620000b2578063a08e8a0814620004bf578063b7e6a7d414620004e9578063bab161bf146200050e57600080fd5b806381b1c17414620004535780638624c35c146200049a57600080fd5b80633ae05047116200012d5780633e19704311620001105780633e19704314620003155780634638554914620004095780637b6323c1146200042e57600080fd5b80633ae0504714620002c75780633da8168214620002df57600080fd5b80632dfdf0b511620001625780632dfdf0b514620001e85780632f3a3d5d146200020f578063318aee3d146200023e57600080fd5b80630871e971146200018057806322e95f2c1462000199575b600080fd5b6200019762000191366004620032c4565b620005eb565b005b348015620001a657600080fd5b50620001be620001b836600462003380565b62000bdf565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015620001f557600080fd5b506200020060415481565b604051908152602001620001df565b3480156200021c57600080fd5b50604754620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200024b57600080fd5b50620002956200025d366004620033bc565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201620001df565b348015620002d457600080fd5b506200020062000c82565b348015620002ec57600080fd5b5062000304620002fe366004620034db565b62000d5c565b6040519015158152602001620001df565b3480156200032257600080fd5b50620002006200033436600462003559565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200041657600080fd5b50620001976200042836600462003688565b62000e5c565b3480156200043b57600080fd5b50620001976200044d36600462003688565b62001617565b3480156200046057600080fd5b50620001be620004723660046200376f565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620004a757600080fd5b5062000197620004b936600462003380565b620020c2565b348015620004cc57600080fd5b50620004d6600081565b60405160ff9091168152602001620001df565b348015620004f657600080fd5b50620001be6200050836600462003380565b62002340565b3480156200051b57600080fd5b506042546200052d9063ffffffff1681565b60405163ffffffff9091168152602001620001df565b3480156200055057600080fd5b50604654620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b620001976200058336600462003789565b62002409565b3480156200059657600080fd5b5062000304620005a83660046200376f565b60436020526000908152604090205460ff1681565b348015620005ca57600080fd5b506200052d600081565b348015620005e157600080fd5b50620004d6600181565b60425463ffffffff908116908616036200068c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff891662000748578534146200073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c55450000000000000000000000000000000000606482015260840162000683565b6000915062000a5c565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000849576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562000810573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008369190620037f1565b5060208101518151909450925062000a5a565b84156200085e576200085e8a88888862002656565b6200088273ffffffffffffffffffffffffffffffffffffffff8b1633308a62002a81565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200092e919081019062003890565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200097a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620009c2919081019062003890565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a349190620038c9565b60405160200162000a489392919062003935565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760415460405162000a9e98979695949392919062003972565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000b599062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000b8162000c82565b6040518263ffffffff1660e01b815260040162000ba091815260200190565b600060405180830381600087803b15801562000bbb57600080fd5b505af115801562000bd0573d6000803e3d6000fd5b50505050505050505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6041546000908190815b602081101562000d54578160011660010362000cec576001816020811062000cb85762000cb8620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000d30565b826021826020811062000d035762000d03620039eb565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b62000d3d60028362003a49565b91508062000d4b8162003a85565b91505062000c8c565b509092915050565b60008467ffffffffffffffff8416825b602081101562000e4f578160011660010362000dd95786818151811062000d975762000d97620039eb565b60200260200101518360405160200162000dbb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000e2b565b8287828151811062000def5762000def620039eb565b602002602001015160405160200162000e12929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000e3860028362003a49565b91508062000e468162003a85565b91505062000d6c565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000f04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d4544000000000000000000000000000000000000000000000000000000606482015260840162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000f9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fc3919062003ac0565b60000362001054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000606482015260840162000683565b60425463ffffffff858116911614620010f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000606482015260840162000683565b60425463ffffffff166200126e578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620011da905b8b8b63ffffffff168a62000d5c565b62001268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b620013d8565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200134a905b8b8b63ffffffff168b62000d5c565b620013d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff8516908490620014469089908b90879060240162003ada565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f20000000000000000000000000000000000000000000000000000000017905251620014c9919062003b20565b60006040518083038185875af1925050503d806000811462001508576040519150601f19603f3d011682016040523d82523d6000602084013e6200150d565b606091505b50509050806200159f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c454400000000000000000000000000000000000000000000000000000000606482015260840162000683565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b63ffffffff891660009081526043602052604090205460ff161562001699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d45440000604482015260640162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001732573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001758919062003ac0565b600003620017e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d41544348000000000000000000000000000000000000606482015260840162000683565b60425463ffffffff85811691161462001885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d41544348000000000000000000000000000000606482015260840162000683565b60425463ffffffff16620019b4578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200194690620011cb565b620019ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b62001acf565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062001a67906200133b565b62001acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff851662001c40576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001b62919062003b20565b60006040518083038185875af1925050503d806000811462001ba1576040519150601f19603f3d011682016040523d82523d6000602084013e62001ba6565b606091505b505090508062001c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f4544000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b506200204b565b60425463ffffffff9081169087160362001c7d5762001c7773ffffffffffffffffffffffffffffffffffffffff8616848462002cde565b6200204b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001faa5760475460009062001d689073ffffffffffffffffffffffffffffffffffffffff168462002d36565b905060008060008680602001905181019062001d85919062003b3e565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001dce95949392919062003bbf565b600060405180830381600087803b15801562001de957600080fd5b505af115801562001dfe573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001f989392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062002048565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562002020573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020469190620037f1565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff1615808015620020e35750600054600160ff909116105b80620020ff5750303b158015620020ff575060005460ff166001145b6200218d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840162000683565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620021ec57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556040516200226a906200326c565b604051809103906000f08015801562002287573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055620022d762002e16565b80156200233b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620024019073ffffffffffffffffffffffffffffffffffffffff168262002f5e565b949350505050565b60425463ffffffff90811690841603620024a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c4600000000000000000000000000000000000000000000606482015260840162000683565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620024f39260019263ffffffff9092169133918991899134918a919062003972565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620025d69062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d620025fe62000c82565b6040518263ffffffff1660e01b81526004016200261d91815260200190565b600060405180830381600087803b1580156200263857600080fd5b505af11580156200264d573d6000803e3d6000fd5b50505050505050565b60006200269983838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002fe292505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf000000000000000000000000000000000000000000000000000000001462002748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000683565b60008080808080806200275f896004818d62003c1f565b8101906200276e919062003c4b565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462002839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000683565b73ffffffffffffffffffffffffffffffffffffffff86163014620028e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000683565b8a851462002971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d4154434800000000000000000000000000000000000000606482015260840162000683565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002a2c919062003b20565b6000604051808303816000865af19150503d806000811462002a6b576040519150601f19603f3d011682016040523d82523d6000602084013e62002a70565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905262002b5f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002fe9565b50505050565b80600162002b766020600262003ddf565b62002b82919062003ded565b6041541062002c14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c00000000000000000000000000000000000000000000606482015260840162000683565b60016041600082825462002c29919062003e07565b909155505060415460005b602081101562002cd3578160011660010362002c6957826001826020811062002c615762002c61620039eb565b015550505050565b6001816020811062002c7f5762002c7f620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002cbc919062003a49565b91508062002cca8162003a85565b91505062002c34565b506200233b62003e22565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526200233b9084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002adc565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000c7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640162000683565b600054610100900460ff1662002eaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000683565b60005b62002ec06001602062003ded565b81101562002f5b576021816020811062002ede5762002ede620039eb565b01546021826020811062002ef65762002ef6620039eb565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002f31919062003e07565b6020811062002f445762002f44620039eb565b01558062002f528162003a85565b91505062002eb2565b50565b600062002fdb8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b60006200304d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620030fc9092919063ffffffff16565b8051909150156200233b57808060200190518101906200306e9190620037f1565b6200233b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000683565b60606200240184846000858573ffffffffffffffffffffffffffffffffffffffff85163b62003188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000683565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620031b3919062003b20565b60006040518083038185875af1925050503d8060008114620031f2576040519150601f19603f3d011682016040523d82523d6000602084013e620031f7565b606091505b50915091506200320982828662003214565b979650505050505050565b606083156200322557508162002fdb565b825115620032365782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000683919062003e51565b6118298062003e6783390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462002f5b57600080fd5b8035620032aa816200327a565b919050565b803563ffffffff81168114620032aa57600080fd5b60008060008060008060a08789031215620032de57600080fd5b8635620032eb816200327a565b9550620032fb60208801620032af565b945060408701356200330d816200327a565b935060608701359250608087013567ffffffffffffffff808211156200333257600080fd5b818901915089601f8301126200334757600080fd5b8135818111156200335757600080fd5b8a60208285010111156200336a57600080fd5b6020830194508093505050509295509295509295565b600080604083850312156200339457600080fd5b6200339f83620032af565b91506020830135620033b1816200327a565b809150509250929050565b600060208284031215620033cf57600080fd5b813562002fdb816200327a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620034555762003455620033dc565b604052919050565b600082601f8301126200346f57600080fd5b8135602067ffffffffffffffff8211156200348e576200348e620033dc565b8160051b6200349f8282016200340b565b9283528481018201928281019087851115620034ba57600080fd5b83870192505b848310156200320957823582529183019190830190620034c0565b60008060008060808587031215620034f257600080fd5b84359350602085013567ffffffffffffffff808211156200351257600080fd5b62003520888389016200345d565b94506040870135915080821682146200353857600080fd5b509396929550929360600135925050565b60ff8116811462002f5b57600080fd5b600080600080600080600060e0888a0312156200357557600080fd5b8735620035828162003549565b96506200359260208901620032af565b95506040880135620035a4816200327a565b9450620035b460608901620032af565b93506080880135620035c6816200327a565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620036005762003600620033dc565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126200363e57600080fd5b8135620036556200364f82620035e3565b6200340b565b8181528460208386010111156200366b57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620036a957600080fd5b8a3567ffffffffffffffff80821115620036c257600080fd5b620036d08e838f016200345d565b9b50620036e060208e01620032af565b9a5060408d0135995060608d01359850620036fe60808e01620032af565b97506200370e60a08e016200329d565b96506200371e60c08e01620032af565b95506200372e60e08e016200329d565b94506101008d013593506101208d01359150808211156200374e57600080fd5b506200375d8d828e016200362c565b9150509295989b9194979a5092959850565b6000602082840312156200378257600080fd5b5035919050565b6000806000606084860312156200379f57600080fd5b620037aa84620032af565b92506020840135620037bc816200327a565b9150604084013567ffffffffffffffff811115620037d957600080fd5b620037e7868287016200362c565b9150509250925092565b6000602082840312156200380457600080fd5b8151801515811462002fdb57600080fd5b60005b838110156200383257818101518382015260200162003818565b8381111562002b5f5750506000910152565b600082601f8301126200385657600080fd5b8151620038676200364f82620035e3565b8181528460208386010111156200387d57600080fd5b6200240182602083016020870162003815565b600060208284031215620038a357600080fd5b815167ffffffffffffffff811115620038bb57600080fd5b620024018482850162003844565b600060208284031215620038dc57600080fd5b815162002fdb8162003549565b600081518084526200390381602086016020860162003815565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6060815260006200394a6060830186620038e9565b82810360208401526200395e8186620038e9565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620039d282850187620038e9565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003a80577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003ab95762003ab962003a1a565b5060010190565b60006020828403121562003ad357600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003b176060830184620038e9565b95945050505050565b6000825162003b3481846020870162003815565b9190910192915050565b60008060006060848603121562003b5457600080fd5b835167ffffffffffffffff8082111562003b6d57600080fd5b62003b7b8783880162003844565b9450602086015191508082111562003b9257600080fd5b5062003ba18682870162003844565b925050604084015162003bb48162003549565b809150509250925092565b60a08152600062003bd460a0830188620038e9565b828103602084015262003be88188620038e9565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000808585111562003c3057600080fd5b8386111562003c3e57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003c6757600080fd5b873562003c74816200327a565b9650602088013562003c86816200327a565b955060408801359450606088013593506080880135620035c68162003549565b600181815b8085111562003d0557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003ce95762003ce962003a1a565b8085161562003cf757918102915b93841c939080029062003cab565b509250929050565b60008262003d1e5750600162000c7c565b8162003d2d5750600062000c7c565b816001811462003d46576002811462003d515762003d71565b600191505062000c7c565b60ff84111562003d655762003d6562003a1a565b50506001821b62000c7c565b5060208310610133831016604e8410600b841016171562003d96575081810a62000c7c565b62003da2838362003ca6565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003dd75762003dd762003a1a565b029392505050565b600062002fdb838362003d0d565b60008282101562003e025762003e0262003a1a565b500390565b6000821982111562003e1d5762003e1d62003a1a565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60208152600062002fdb6020830184620038e956fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a2646970667358221220270b01f138ab314b7b3b2cc1fdbdd08476271beee2d7873498fc431d3f03324964736f6c634300080f0033", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", - "0x0000000000000000000000000000000000000000000000000000000000000042": "0x01", - "0x0000000000000000000000000000000000000000000000000000000000000046": "0xae4bb80be56b819606589de61d5ec3b522eeb032", - "0x0000000000000000000000000000000000000000000000000000000000000047": "0x61ba0248b0986c2480181c6e76b6adeeaa962483", - "0x0000000000000000000000000000000000000000000000000000000000000022": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5", - "0x0000000000000000000000000000000000000000000000000000000000000023": "0xb4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d30", - "0x0000000000000000000000000000000000000000000000000000000000000024": "0x21ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba85", - "0x0000000000000000000000000000000000000000000000000000000000000025": "0xe58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a19344", - "0x0000000000000000000000000000000000000000000000000000000000000026": "0x0eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d", - "0x0000000000000000000000000000000000000000000000000000000000000027": "0x887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a1968", - "0x0000000000000000000000000000000000000000000000000000000000000028": "0xffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f83", - "0x0000000000000000000000000000000000000000000000000000000000000029": "0x9867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756af", - "0x000000000000000000000000000000000000000000000000000000000000002a": "0xcefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e0", - "0x000000000000000000000000000000000000000000000000000000000000002b": "0xf9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a5", - "0x000000000000000000000000000000000000000000000000000000000000002c": "0xf8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf892", - "0x000000000000000000000000000000000000000000000000000000000000002d": "0x3490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99c", - "0x000000000000000000000000000000000000000000000000000000000000002e": "0xc1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb", - "0x000000000000000000000000000000000000000000000000000000000000002f": "0x5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8becc", - "0x0000000000000000000000000000000000000000000000000000000000000030": "0xda7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d2", - "0x0000000000000000000000000000000000000000000000000000000000000031": "0x2733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981f", - "0x0000000000000000000000000000000000000000000000000000000000000032": "0xe1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a0", - "0x0000000000000000000000000000000000000000000000000000000000000034": "0xb46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa0", - "0x0000000000000000000000000000000000000000000000000000000000000035": "0xc65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e2", - "0x0000000000000000000000000000000000000000000000000000000000000036": "0xf4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd9", - "0x0000000000000000000000000000000000000000000000000000000000000037": "0x5a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e377", - "0x0000000000000000000000000000000000000000000000000000000000000038": "0x4df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee652", - "0x0000000000000000000000000000000000000000000000000000000000000039": "0xcdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef", - "0x000000000000000000000000000000000000000000000000000000000000003a": "0x0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618d", - "0x000000000000000000000000000000000000000000000000000000000000003b": "0xb8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d0", - "0x000000000000000000000000000000000000000000000000000000000000003c": "0x838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e", - "0x000000000000000000000000000000000000000000000000000000000000003d": "0x662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e", - "0x000000000000000000000000000000000000000000000000000000000000003e": "0x388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea322", - "0x000000000000000000000000000000000000000000000000000000000000003f": "0x93237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d735", - "0x0000000000000000000000000000000000000000000000000000000000000040": "0x8448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a9" - }, - "contractName": "Bridge" - }, - { - "balance": "0", - "nonce": "3", - "address": "0xc949254d682d8c9ad5682521675b8f43b102aec4", - "pvtKey": "0xdfd01798f92667dbf91df722434e8fbe96af0211d4d1b82bbbbc8f1def7a814f" - }, - { - "balance": "0", - "nonce": "0", - "address": "0x0000000000000000000000000000000000000000" - }, - { - "balance": "0", - "nonce": "1", - "address": "0x61ba0248b0986c2480181c6e76b6adeeaa962483", - "bytecode": "0x608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01" - } - } - ] -} \ No newline at end of file diff --git a/deployment/deployment_v2-0/genesis-gen.json b/deployment/genesis-gen.json similarity index 92% rename from deployment/deployment_v2-0/genesis-gen.json rename to deployment/genesis-gen.json index 5c6d7e4bf..d7fee36ec 100644 --- a/deployment/deployment_v2-0/genesis-gen.json +++ b/deployment/genesis-gen.json @@ -55,7 +55,9 @@ "function": "initialize", "paramsFunction": [ 1, - "0xAE4bB80bE56B819606589DE61d5ec3b522EEB032" + "0xAE4bB80bE56B819606589DE61d5ec3b522EEB032", + "0x0000000000000000000000000000000000000000", + 0 ], "contractName": "Bridge" } diff --git a/deployment/genesis.json b/deployment/genesis.json new file mode 100644 index 000000000..dc560476c --- /dev/null +++ b/deployment/genesis.json @@ -0,0 +1,34 @@ +{ + "root": "0xbc98dac82be8590e52e6bee730fbed3c154e9952949d82e4681e6a9c02fb041c", + "genesis": [ + { + "balance": "100000000000000000000000", + "nonce": "1", + "address": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988", + "bytecode": "0x608060405260043610620001db5760003560e01c806381b1c17411620000ff578063d96a15f71162000095578063e7a5b4ea116200006c578063e7a5b4ea1462000658578063ed6be5c9146200067d578063f2fde38b1462000694578063ff634ed714620006b957600080fd5b8063d96a15f714620005f5578063dbc16976146200060c578063e7375881146200062457600080fd5b8063a08e8a0811620000d6578063a08e8a08146200054f578063aaa13cc21462000579578063bab161bf146200059e578063d02103ca14620005d357600080fd5b806381b1c17414620004d35780638da5cb5b146200050d5780638f611519146200052d57600080fd5b80633ae05047116200017557806346385549116200014c57806346385549146200044c578063655595401462000471578063715018a614620004965780637b6323c114620004ae57600080fd5b80633ae05047146200032e5780633da8168214620003465780633e197043146200036b57600080fd5b80632072f6c511620001b65780632072f6c5146200025157806322e95f2c14620002695780632dfdf0b514620002a7578063318aee3d14620002bf57600080fd5b80630871e97114620001e05780630e1da6c314620001f957806315064c961462000224575b600080fd5b620001f7620001f13660046200316c565b620006d0565b005b3480156200020657600080fd5b5062000211608d5481565b6040519081526020015b60405180910390f35b3480156200023157600080fd5b50602254620002409060ff1681565b60405190151581526020016200021b565b3480156200025e57600080fd5b50620001f762000c7a565b3480156200027657600080fd5b506200028e62000288366004620031f9565b62000d2e565b6040516001600160a01b0390911681526020016200021b565b348015620002b457600080fd5b506200021160215481565b348015620002cc57600080fd5b5062000309620002de36600462003235565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200021b565b3480156200033b57600080fd5b506200021162000db1565b3480156200035357600080fd5b5062000240620003653660046200333d565b62000ea4565b3480156200037857600080fd5b50620002116200038a366004620033bb565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200045957600080fd5b50620001f76200046b366004620034cc565b62000fa6565b3480156200047e57600080fd5b50620001f762000490366004620035b3565b6200122c565b348015620004a357600080fd5b50620001f762001412565b348015620004bb57600080fd5b50620001f7620004cd366004620034cc565b62001428565b348015620004e057600080fd5b506200028e620004f236600462003609565b6089602052600090815260409020546001600160a01b031681565b3480156200051a57600080fd5b506055546001600160a01b03166200028e565b3480156200053a57600080fd5b50608c546200028e906001600160a01b031681565b3480156200055c57600080fd5b5062000566600081565b60405160ff90911681526020016200021b565b3480156200058657600080fd5b506200028e6200059836600462003623565b620019ea565b348015620005ab57600080fd5b50608754620005bd9063ffffffff1681565b60405163ffffffff90911681526020016200021b565b348015620005e057600080fd5b50608b546200028e906001600160a01b031681565b620001f762000606366004620036d7565b62001b56565b3480156200061957600080fd5b50620001f762001e0a565b3480156200063157600080fd5b50620002406200064336600462003609565b60886020526000908152604090205460ff1681565b3480156200066557600080fd5b50620001f76200067736600462003609565b62001ebc565b3480156200068a57600080fd5b50620005bd600081565b348015620006a157600080fd5b50620001f7620006b336600462003235565b62001f01565b348015620006c657600080fd5b5062000566600181565b60225460ff1615620007755760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60875463ffffffff90811690861603620007f85760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b60008060606001600160a01b0389166200088d57853414620008835760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200076c565b6000915062000b17565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000974576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af11580156200093b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200096191906200374e565b5060208101518151909450925062000b15565b84156200098957620009898a88888862001f97565b620009a06001600160a01b038b1633308a620025bc565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620009f7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a219190810190620037e9565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000a60573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a8a9190810190620037e9565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ac9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aef919062003822565b60405160200162000b039392919062003870565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162000b59989796959493929190620038ad565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000c019062002675565b608b546001600160a01b03166333d6247d62000c1c62000db1565b6040518263ffffffff1660e01b815260040162000c3b91815260200190565b600060405180830381600087803b15801562000c5657600080fd5b505af115801562000c6b573d6000803e3d6000fd5b50505050505050505050505050565b608c546001600160a01b0316331462000d225760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c620027d9565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b602154600090819081805b602081101562000e9b578260011660010362000e1c576001816020811062000de85762000de862003919565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000e49565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000e5660028462003977565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000e9290620039b3565b91505062000dbc565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000f97578160011660010362000f215786818151811062000edf5762000edf62003919565b60200260200101518360405160200162000f03929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000f73565b8287828151811062000f375762000f3762003919565b602002602001015160405160200162000f5a929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000f8060028362003977565b91508062000f8e81620039b3565b91505062000eb4565b5050821490505b949350505050565b60225460ff1615620010475760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6200105d8a8a8a8a8a8a8a8a8a8a6001620028b2565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b038516908490620010a09089908b908790602401620039ee565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001105919062003a27565b60006040518083038185875af1925050503d806000811462001144576040519150601f19603f3d011682016040523d82523d6000602084013e62001149565b606091505b5050905080620011c15760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff16158080156200124d5750600054600160ff909116105b80620012695750303b15801562001269575060005460ff166001145b620012dd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200076c565b6000805460ff1916600117905580156200131e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d829055620013a762002c65565b80156200140b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6200141c62002cef565b62000d2c600062002d4b565b60225460ff1615620014c95760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b620014df8a8a8a8a8a8a8a8a8a8a6000620028b2565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620015fe57604080516000808252602082019092526001600160a01b0385169084906040516200153a919062003a27565b60006040518083038185875af1925050503d806000811462001579576040519150601f19603f3d011682016040523d82523d6000602084013e6200157e565b606091505b5050905080620015f75760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c45440000000000000000000000000000000000000000000000000060648201526084016200076c565b5062001980565b60875463ffffffff908116908716036200162e57620016286001600160a01b038616848462002db5565b62001980565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620018ec57600080600085806020019051810190620016ce919062003a45565b925092509250600085848484604051620016e890620030d5565b620016f69392919062003870565b8190604051809103906000f590508015801562001717573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001785573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017ab91906200374e565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620018da9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200197d565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001955573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200197b91906200374e565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162001a6d90620030d5565b601f1982820381018352601f90910116604081905262001a9a908d908d908d908d908d9060200162003af1565b60408051601f198184030181529082905262001aba929160200162003b32565b6040516020818303038152906040528051906020012060405160200162001b3094939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff161562001bf75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b60875463ffffffff9081169084160362001c7a5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b9262001cc79260019263ffffffff9092169133918991899134918a9190620038ad565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d850152346051850152607180850192909252805180850390920182526091909301909252815191012062001d979062002675565b608b546001600160a01b03166333d6247d62001db262000db1565b6040518263ffffffff1660e01b815260040162001dd191815260200190565b600060405180830381600087803b15801562001dec57600080fd5b505af115801562001e01573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001eb25760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c62002e00565b62001ec662002cef565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001f0b62002cef565b6001600160a01b03811662001f895760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016200076c565b62001f948162002d4b565b50565b600062001fda83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002eaf92505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620022dc5760008080808080806200203d896004818d62003b65565b8101906200204c919062003b91565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620020e35760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0386163014620021635760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b8a8514620021da5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002288919062003a27565b6000604051808303816000865af19150503d8060008114620022c7576040519150601f19603f3d011682016040523d82523d6000602084013e620022cc565b606091505b505050505050505050506200140b565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c00000000000000000000000000000000000000000000000000000000146200236f5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200076c565b600080808080808080620023878a6004818e62003b65565b81019062002396919062003bec565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200242f5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0387163014620024af5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002566919062003a27565b6000604051808303816000865af19150503d8060008114620025a5576040519150601f19603f3d011682016040523d82523d6000602084013e620025aa565b606091505b50505050505050505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526200266f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002eb6565b50505050565b806001620026866020600262003db1565b62002692919062003dbf565b602154106200270a5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200076c565b6001602160008282546200271f919062003dd9565b909155505060215460005b6020811015620027c957816001166001036200275f57826001826020811062002757576200275762003919565b015550505050565b6001816020811062002775576200277562003919565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620027b2919062003977565b915080620027c081620039b3565b9150506200272a565b50620027d462003df4565b505050565b60225460ff16156200287a5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b63ffffffff8a1660009081526088602052604090205460ff16156200293f5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af1158015620029cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620029f2919062003e23565b9050801580159062002a115750608d5462002a0e824262003dbf565b10155b62002aab5760405162461bcd60e51b815260206004820152604260248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c49445f4f525f4e4f545f5945545f434c41494d414260648201527f4c45000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b60875463ffffffff87811691161462002b2d5760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000000060648201526084016200076c565b60875460009063ffffffff1662002b4657508862002b49565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d82015260518101899052607180820193909352815180820390930183526091019052805191012062002c17908e8e63ffffffff168462000ea4565b62000c6b5760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c494460448201526064016200076c565b600054610100900460ff1662002ce45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200076c565b62000d2c3362002d4b565b6055546001600160a01b0316331462000d2c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200076c565b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620027d49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016200260a565b60225460ff1662002e7a5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016200076c565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002f0d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662002fa29092919063ffffffff16565b805190915015620027d4578080602001905181019062002f2e91906200374e565b620027d45760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200076c565b606062000f9e848460008585600080866001600160a01b0316858760405162002fcc919062003a27565b60006040518083038185875af1925050503d80600081146200300b576040519150601f19603f3d011682016040523d82523d6000602084013e62003010565b606091505b509150915062003023878383876200302e565b979650505050505050565b60608315620030a25782516000036200309a576001600160a01b0385163b6200309a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200076c565b508162000f9e565b62000f9e8383815115620030b95781518083602001fd5b8060405162461bcd60e51b81526004016200076c919062003e3d565b6119c78062003e5383390190565b6001600160a01b038116811462001f9457600080fd5b80356200310681620030e3565b919050565b803563ffffffff811681146200310657600080fd5b60008083601f8401126200313357600080fd5b50813567ffffffffffffffff8111156200314c57600080fd5b6020830191508360208285010111156200316557600080fd5b9250929050565b60008060008060008060a087890312156200318657600080fd5b86356200319381620030e3565b9550620031a3602088016200310b565b94506040870135620031b581620030e3565b935060608701359250608087013567ffffffffffffffff811115620031d957600080fd5b620031e789828a0162003120565b979a9699509497509295939492505050565b600080604083850312156200320d57600080fd5b62003218836200310b565b915060208301356200322a81620030e3565b809150509250929050565b6000602082840312156200324857600080fd5b81356200325581620030e3565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620032b757620032b76200325c565b604052919050565b600082601f830112620032d157600080fd5b8135602067ffffffffffffffff821115620032f057620032f06200325c565b8160051b620033018282016200328b565b92835284810182019282810190878511156200331c57600080fd5b83870192505b84831015620030235782358252918301919083019062003322565b600080600080608085870312156200335457600080fd5b84359350602085013567ffffffffffffffff808211156200337457600080fd5b6200338288838901620032bf565b94506040870135915080821682146200339a57600080fd5b509396929550929360600135925050565b60ff8116811462001f9457600080fd5b600080600080600080600060e0888a031215620033d757600080fd5b8735620033e481620033ab565b9650620033f4602089016200310b565b955060408801356200340681620030e3565b945062003416606089016200310b565b935060808801356200342881620030e3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200346257620034626200325c565b50601f01601f191660200190565b600082601f8301126200348257600080fd5b813562003499620034938262003445565b6200328b565b818152846020838601011115620034af57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620034ed57600080fd5b8a3567ffffffffffffffff808211156200350657600080fd5b620035148e838f01620032bf565b9b506200352460208e016200310b565b9a5060408d0135995060608d013598506200354260808e016200310b565b97506200355260a08e01620030f9565b96506200356260c08e016200310b565b95506200357260e08e01620030f9565b94506101008d013593506101208d01359150808211156200359257600080fd5b50620035a18d828e0162003470565b9150509295989b9194979a5092959850565b60008060008060808587031215620035ca57600080fd5b620035d5856200310b565b93506020850135620035e781620030e3565b92506040850135620035f981620030e3565b9396929550929360600135925050565b6000602082840312156200361c57600080fd5b5035919050565b600080600080600080600060a0888a0312156200363f57600080fd5b6200364a886200310b565b965060208801356200365c81620030e3565b9550604088013567ffffffffffffffff808211156200367a57600080fd5b620036888b838c0162003120565b909750955060608a0135915080821115620036a257600080fd5b50620036b18a828b0162003120565b9094509250506080880135620036c781620033ab565b8091505092959891949750929550565b600080600060608486031215620036ed57600080fd5b620036f8846200310b565b925060208401356200370a81620030e3565b9150604084013567ffffffffffffffff8111156200372757600080fd5b620037358682870162003470565b9150509250925092565b801515811462001f9457600080fd5b6000602082840312156200376157600080fd5b815162003255816200373f565b60005b838110156200378b57818101518382015260200162003771565b838111156200266f5750506000910152565b600082601f830112620037af57600080fd5b8151620037c0620034938262003445565b818152846020838601011115620037d657600080fd5b62000f9e8260208301602087016200376e565b600060208284031215620037fc57600080fd5b815167ffffffffffffffff8111156200381457600080fd5b62000f9e848285016200379d565b6000602082840312156200383557600080fd5b81516200325581620033ab565b600081518084526200385c8160208601602086016200376e565b601f01601f19169290920160200192915050565b60608152600062003885606083018662003842565b828103602084015262003899818662003842565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620039008285018762003842565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082620039ae577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620039e757620039e762003948565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003a1e606083018462003842565b95945050505050565b6000825162003a3b8184602087016200376e565b9190910192915050565b60008060006060848603121562003a5b57600080fd5b835167ffffffffffffffff8082111562003a7457600080fd5b62003a82878388016200379d565b9450602086015191508082111562003a9957600080fd5b5062003aa8868287016200379d565b925050604084015162003abb81620033ab565b809150509250925092565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003b0760608301878962003ac6565b828103602084015262003b1c81868862003ac6565b91505060ff831660408301529695505050505050565b6000835162003b468184602088016200376e565b83519083019062003b5c8183602088016200376e565b01949350505050565b6000808585111562003b7657600080fd5b8386111562003b8457600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003bad57600080fd5b873562003bba81620030e3565b9650602088013562003bcc81620030e3565b9550604088013594506060880135935060808801356200342881620033ab565b600080600080600080600080610100898b03121562003c0a57600080fd5b883562003c1781620030e3565b9750602089013562003c2981620030e3565b96506040890135955060608901359450608089013562003c49816200373f565b935060a089013562003c5b81620033ab565b979a969950949793969295929450505060c08201359160e0013590565b600181815b8085111562003cd757817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003cbb5762003cbb62003948565b8085161562003cc957918102915b93841c939080029062003c7d565b509250929050565b60008262003cf05750600162000dab565b8162003cff5750600062000dab565b816001811462003d18576002811462003d235762003d43565b600191505062000dab565b60ff84111562003d375762003d3762003948565b50506001821b62000dab565b5060208310610133831016604e8410600b841016171562003d68575081810a62000dab565b62003d74838362003c78565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003da95762003da962003948565b029392505050565b600062003255838362003cdf565b60008282101562003dd45762003dd462003948565b500390565b6000821982111562003def5762003def62003948565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60006020828403121562003e3657600080fd5b5051919050565b6020815260006200325560208301846200384256fe60c06040523480156200001157600080fd5b50604051620019c7380380620019c78339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161150d620004ba600039600061053001526000818161036f01526104fa015261150d6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b604051610191919061123b565b60405180910390f35b6101ad6101a83660046112d7565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad610204366004611301565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad6102763660046112d7565b610552565b6101ad6102893660046112d7565b61059e565b6101c161029c36600461133d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d236600461133d565b60066020526000908152604090205481565b610184610645565b6101ad6102fa3660046112d7565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad6103523660046112d7565b6106ed565b6101ad6103653660046112d7565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f36600461135f565b6107b2565b005b6101c16103b43660046113d2565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043790611405565b80601f016020809104026020016040519081016040528092919081815260200182805461046390611405565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f12565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611487565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c8383610fda565b50600192915050565b60606004805461043790611405565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c83836110b3565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866108818361149f565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f3d610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff821661103d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b806002600082825461104f9190611487565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff821661113c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156111d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610c27565b600060208083528351808285015260005b818110156112685785810183015185820160400152820161124c565b8181111561127a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112d257600080fd5b919050565b600080604083850312156112ea57600080fd5b6112f3836112ae565b946020939093013593505050565b60008060006060848603121561131657600080fd5b61131f846112ae565b925061132d602085016112ae565b9150604084013590509250925092565b60006020828403121561134f57600080fd5b611358826112ae565b9392505050565b600080600080600080600060e0888a03121561137a57600080fd5b611383886112ae565b9650611391602089016112ae565b95506040880135945060608801359350608088013560ff811681146113b557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156113e557600080fd5b6113ee836112ae565b91506113fc602084016112ae565b90509250929050565b600181811c9082168061141957607f821691505b602082108103611452577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561149a5761149a611458565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036114d0576114d0611458565b506001019056fea264697066735822122094134962e5fa2f6357086a2590b7f3a754d340b16e5312664d82a308bc23a0df64736f6c634300080f0033a26469706673582212207d802e4c153f08d52b883999d6ed4e590e1894e2db82359c2f8cde0298f066c464736f6c634300080f0033", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", + "0x0000000000000000000000000000000000000000000000000000000000000055": "0xc949254d682d8c9ad5682521675b8f43b102aec4", + "0x0000000000000000000000000000000000000000000000000000000000000087": "0x01", + "0x000000000000000000000000000000000000000000000000000000000000008b": "0xae4bb80be56b819606589de61d5ec3b522eeb032" + }, + "contractName": "Bridge" + }, + { + "balance": "0", + "nonce": "3", + "address": "0xc949254d682d8c9ad5682521675b8f43b102aec4", + "pvtKey": "0xdfd01798f92667dbf91df722434e8fbe96af0211d4d1b82bbbbc8f1def7a814f" + }, + { + "balance": "0", + "nonce": "1", + "address": "0xae4bb80be56b819606589de61d5ec3b522eeb032", + "bytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610197565b60006020819052908152604090205481565b6100a061009b366004610197565b6100e7565b005b6002546100c29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610064565b60025473ffffffffffffffffffffffffffffffffffffffff163314610192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a7570646174654560448201527f786974526f6f743a204f4e4c595f425249444745000000000000000000000000606482015260840160405180910390fd5b600155565b6000602082840312156101a957600080fd5b503591905056fea2646970667358221220fea7fcab965a97796cf30d6ff699830b40cf06628fa4f9baf7c5725155af254564736f6c634300080f0033", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988" + }, + "contractName": "GlobalExitRootManagerL2" + } + ] +} \ No newline at end of file diff --git a/deployment/deployment_v2-0/verifyPoE_v2-0.js b/deployment/verifyPoE_v2-0.js similarity index 95% rename from deployment/deployment_v2-0/verifyPoE_v2-0.js rename to deployment/verifyPoE_v2-0.js index f68122fd4..60c7e6a99 100644 --- a/deployment/deployment_v2-0/verifyPoE_v2-0.js +++ b/deployment/verifyPoE_v2-0.js @@ -5,7 +5,7 @@ const hre = require('hardhat'); const { expect } = require('chai'); const { ethers } = require('hardhat'); -const openzeppelinUpgrade = require(`../../.openzeppelin/${process.env.HARDHAT_NETWORK}.json`); +const openzeppelinUpgrade = require(`../.openzeppelin/${process.env.HARDHAT_NETWORK}.json`); const pathDeployOutputParameters = path.join(__dirname, './deploy_output.json'); const deployOutputParameters = require(pathDeployOutputParameters); diff --git a/docker/scripts/deploy-docker.sh b/docker/scripts/deploy-docker.sh index bf7b1e7d7..d72bbca9e 100755 --- a/docker/scripts/deploy-docker.sh +++ b/docker/scripts/deploy-docker.sh @@ -3,11 +3,11 @@ sudo rm -rf docker/gethData/geth_data DEV_PERIOD=1 docker-compose -f docker/docker-compose.geth.yml up -d geth sleep 5 node docker/scripts/fund-accounts.js -cp docker/scripts/deploy_parameters_docker.json deployment/deployment_v2-0/deploy_parameters.json -cp docker/scripts/genesis_docker.json deployment/deployment_v2-0/genesis.json -npx hardhat run deployment/deployment_v2-0/deployPoE_v2-0.js --network localhost +cp docker/scripts/deploy_parameters_docker.json deployment/deploy_parameters.json +cp docker/scripts/genesis_docker.json deployment/genesis.json +npx hardhat run deployment/deployPoE_v2-0.js --network localhost mkdir docker/deploymentOutput -mv deployment/deployment_v2-0/deploy_output.json docker/deploymentOutput +mv deployment/deploy_output.json docker/deploymentOutput docker-compose -f docker/docker-compose.geth.yml down sudo docker build -t hermeznetwork/geth-zkevm-contracts -f docker/Dockerfile.geth . # Let it readable for the multiplatform build coming later! diff --git a/docker/scripts/genesis_docker.json b/docker/scripts/genesis_docker.json index 84479fe56..190f17418 100644 --- a/docker/scripts/genesis_docker.json +++ b/docker/scripts/genesis_docker.json @@ -1,57 +1,16 @@ { - "root": "0xa907fd86a7add05eafdb8fb6b4e1aec0ee2f23db33feb1f06070e1a19ebc97cf", + "root": "0xd95c3987484f77ca1b7d8dc210004b5fb0b5f59186c3b7f02e6e7d5aadd6485f", "genesis": [ - { - "balance": "0", - "nonce": "1", - "address": "0xae4bb80be56b819606589de61d5ec3b522eeb032", - "bytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610197565b60006020819052908152604090205481565b6100a061009b366004610197565b6100e7565b005b6002546100c29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610064565b60025473ffffffffffffffffffffffffffffffffffffffff163314610192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a7570646174654560448201527f786974526f6f743a204f4e4c595f425249444745000000000000000000000000606482015260840160405180910390fd5b600155565b6000602082840312156101a957600080fd5b503591905056fea2646970667358221220b6ba072419f510d5d5b9a55d9605786898f58415125e7e2ac3f699371fda0cbc64736f6c634300080f0033", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000002": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988" - }, - "contractName": "GlobalExitRootManagerL2" - }, { "balance": "100000000000000000000000", - "nonce": "2", + "nonce": "1", "address": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988", - "bytecode": "0x6080604052600436106200017b5760003560e01c806381b1c17411620000cf578063d02103ca116200007d578063e73758811162000060578063e73758811462000589578063ed6be5c914620005bd578063ff634ed714620005d457600080fd5b8063d02103ca1462000543578063d96a15f7146200057257600080fd5b8063a08e8a0811620000b2578063a08e8a0814620004bf578063b7e6a7d414620004e9578063bab161bf146200050e57600080fd5b806381b1c17414620004535780638624c35c146200049a57600080fd5b80633ae05047116200012d5780633e19704311620001105780633e19704314620003155780634638554914620004095780637b6323c1146200042e57600080fd5b80633ae0504714620002c75780633da8168214620002df57600080fd5b80632dfdf0b511620001625780632dfdf0b514620001e85780632f3a3d5d146200020f578063318aee3d146200023e57600080fd5b80630871e971146200018057806322e95f2c1462000199575b600080fd5b6200019762000191366004620032c4565b620005eb565b005b348015620001a657600080fd5b50620001be620001b836600462003380565b62000bdf565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015620001f557600080fd5b506200020060415481565b604051908152602001620001df565b3480156200021c57600080fd5b50604754620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156200024b57600080fd5b50620002956200025d366004620033bc565b60456020526000908152604090205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff909116602083015201620001df565b348015620002d457600080fd5b506200020062000c82565b348015620002ec57600080fd5b5062000304620002fe366004620034db565b62000d5c565b6040519015158152602001620001df565b3480156200032257600080fd5b50620002006200033436600462003559565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200041657600080fd5b50620001976200042836600462003688565b62000e5c565b3480156200043b57600080fd5b50620001976200044d36600462003688565b62001617565b3480156200046057600080fd5b50620001be620004723660046200376f565b60446020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015620004a757600080fd5b5062000197620004b936600462003380565b620020c2565b348015620004cc57600080fd5b50620004d6600081565b60405160ff9091168152602001620001df565b348015620004f657600080fd5b50620001be6200050836600462003380565b62002340565b3480156200051b57600080fd5b506042546200052d9063ffffffff1681565b60405163ffffffff9091168152602001620001df565b3480156200055057600080fd5b50604654620001be9073ffffffffffffffffffffffffffffffffffffffff1681565b620001976200058336600462003789565b62002409565b3480156200059657600080fd5b5062000304620005a83660046200376f565b60436020526000908152604090205460ff1681565b348015620005ca57600080fd5b506200052d600081565b348015620005e157600080fd5b50620004d6600181565b60425463ffffffff908116908616036200068c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080606073ffffffffffffffffffffffffffffffffffffffff891662000748578534146200073e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c55450000000000000000000000000000000000606482015260840162000683565b6000915062000a5c565b73ffffffffffffffffffffffffffffffffffffffff808a1660009081526045602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000849576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810188905273ffffffffffffffffffffffffffffffffffffffff8b1690639dc29fac906044016020604051808303816000875af115801562000810573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008369190620037f1565b5060208101518151909450925062000a5a565b84156200085e576200085e8a88888862002656565b6200088273ffffffffffffffffffffffffffffffffffffffff8b1633308a62002a81565b899350604260009054906101000a900463ffffffff1692508973ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200092e919081019062003890565b8a73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200097a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620009c2919081019062003890565b8b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a349190620038c9565b60405160200162000a489392919062003935565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760415460405162000a9e98979695949392919062003972565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000b599062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d62000b8162000c82565b6040518263ffffffff1660e01b815260040162000ba091815260200190565b600060405180830381600087803b15801562000bbb57600080fd5b505af115801562000bd0573d6000803e3d6000fd5b50505050505050505050505050565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166024830152825160188184030181526038909201835281519181019190912060009081526044909152205473ffffffffffffffffffffffffffffffffffffffff165b92915050565b6041546000908190815b602081101562000d54578160011660010362000cec576001816020811062000cb85762000cb8620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925062000d30565b826021826020811062000d035762000d03620039eb565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b62000d3d60028362003a49565b91508062000d4b8162003a85565b91505062000c8c565b509092915050565b60008467ffffffffffffffff8416825b602081101562000e4f578160011660010362000dd95786818151811062000d975762000d97620039eb565b60200260200101518360405160200162000dbb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000e2b565b8287828151811062000def5762000def620039eb565b602002602001015160405160200162000e12929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000e3860028362003a49565b91508062000e468162003a85565b91505062000d6c565b5050909114949350505050565b63ffffffff891660009081526043602052604090205460ff161562000f04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a636c61696d4d6573736167653a20414c52454144595f434c60448201527f41494d4544000000000000000000000000000000000000000000000000000000606482015260840162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562000f9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fc3919062003ac0565b60000362001054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4272696467653a3a636c61696d4d6573736167653a20474c4f42414c5f45584960448201527f545f524f4f545f444f45535f4e4f545f4d415443480000000000000000000000606482015260840162000683565b60425463ffffffff858116911614620010f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4272696467653a3a636c61696d4d6573736167653a2044455354494e4154494f60448201527f4e5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000606482015260840162000683565b60425463ffffffff166200126e578051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d820152605181018690526071808201939093528151808203909301835260910190528051910120620011da905b8b8b63ffffffff168a62000d5c565b62001268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b620013d8565b8051602080830191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200134a905b8b8b63ffffffff168b62000d5c565b620013d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4272696467653a3a636c61696d4d6573736167653a20534d545f494e56414c4960448201527f4400000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b63ffffffff891660009081526043602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555173ffffffffffffffffffffffffffffffffffffffff8516908490620014469089908b90879060240162003ada565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f20000000000000000000000000000000000000000000000000000000017905251620014c9919062003b20565b60006040518083038185875af1925050503d806000811462001508576040519150601f19603f3d011682016040523d82523d6000602084013e6200150d565b606091505b50509050806200159f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c454400000000000000000000000000000000000000000000000000000000606482015260840162000683565b6040805163ffffffff8c811682528916602082015273ffffffffffffffffffffffffffffffffffffffff88811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b63ffffffff891660009081526043602052604090205460ff161562001699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4272696467653a3a636c61696d3a20414c52454144595f434c41494d45440000604482015260640162000683565b6046546040805160208082018c90528183018b9052825180830384018152606083019384905280519101207f257b363200000000000000000000000000000000000000000000000000000000909252606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063257b3632906084016020604051808303816000875af115801562001732573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001758919062003ac0565b600003620017e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4272696467653a3a636c61696d3a20474c4f42414c5f455849545f524f4f545f60448201527f444f45535f4e4f545f4d41544348000000000000000000000000000000000000606482015260840162000683565b60425463ffffffff85811691161462001885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4272696467653a3a636c61696d3a2044455354494e4154494f4e5f4e4554574f60448201527f524b5f444f45535f4e4f545f4d41544348000000000000000000000000000000606482015260840162000683565b60425463ffffffff16620019b4578051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d8201526051810186905260718082019390935281518082039093018352609101905280519101206200194690620011cb565b620019ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b62001acf565b8051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08b811b821660218401527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c811b82166025860152918b901b909216603984015288901b16603d82015260518101869052607180820193909352815180820390930183526091019052805191012062001a67906200133b565b62001acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4272696467653a3a636c61696d3a20534d545f494e56414c4944000000000000604482015260640162000683565b63ffffffff8916600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff851662001c40576040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff851690849060405162001b62919062003b20565b60006040518083038185875af1925050503d806000811462001ba1576040519150601f19603f3d011682016040523d82523d6000602084013e62001ba6565b606091505b505090508062001c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4272696467653a3a636c61696d3a204554485f5452414e534645525f4641494c60448201527f4544000000000000000000000000000000000000000000000000000000000000606482015260840162000683565b506200204b565b60425463ffffffff9081169087160362001c7d5762001c7773ffffffffffffffffffffffffffffffffffffffff8616848462002cde565b6200204b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b166024820152600090603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152604490935291205490915073ffffffffffffffffffffffffffffffffffffffff168062001faa5760475460009062001d689073ffffffffffffffffffffffffffffffffffffffff168462002d36565b905060008060008680602001905181019062001d85919062003b3e565b9250925092508373ffffffffffffffffffffffffffffffffffffffff16636c9452218484848d8d6040518663ffffffff1660e01b815260040162001dce95949392919062003bbf565b600060405180830381600087803b15801562001de957600080fd5b505af115801562001dfe573d6000803e3d6000fd5b50505050836044600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180604001604052808d63ffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff16815250604560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c8660405162001f989392919063ffffffff93909316835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a15050505062002048565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562002020573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020469190620037f1565b505b50505b6040805163ffffffff8b811682528816602082015273ffffffffffffffffffffffffffffffffffffffff87811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b600054610100900460ff1615808015620020e35750600054600160ff909116105b80620020ff5750303b158015620020ff575060005460ff166001145b6200218d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840162000683565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015620021ec57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b604280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8516179055604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556040516200226a906200326c565b604051809103906000f08015801562002287573d6000803e3d6000fd5b50604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055620022d762002e16565b80156200233b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1660208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660248201526000908190603801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120604754909150620024019073ffffffffffffffffffffffffffffffffffffffff168262002f5e565b949350505050565b60425463ffffffff90811690841603620024a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c4600000000000000000000000000000000000000000000606482015260840162000683565b6042546041546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620024f39260019263ffffffff9092169133918991899134918a919062003972565b60405180910390a16042548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301527fffffffffffffffffffffffffffffffffffffffff00000000000000000000000033606090811b82166025850152968a901b90911660398301529487901b909416603d8501523460518501526071808501929092528051808503909201825260919093019092528151910120620025d69062002b65565b60465473ffffffffffffffffffffffffffffffffffffffff166333d6247d620025fe62000c82565b6040518263ffffffff1660e01b81526004016200261d91815260200190565b600060405180830381600087803b1580156200263857600080fd5b505af11580156200264d573d6000803e3d6000fd5b50505050505050565b60006200269983838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002fe292505050565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fd505accf000000000000000000000000000000000000000000000000000000001462002748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000683565b60008080808080806200275f896004818d62003c1f565b8101906200276e919062003c4b565b96509650965096509650965096503373ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161462002839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e44455200000000000000000000000000000000606482015260840162000683565b73ffffffffffffffffffffffffffffffffffffffff86163014620028e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f54484953000000000000000000000000000000000000000000000000000000606482015260840162000683565b8a851462002971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d4154434800000000000000000000000000000000000000606482015260840162000683565b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002a2c919062003b20565b6000604051808303816000865af19150503d806000811462002a6b576040519150601f19603f3d011682016040523d82523d6000602084013e62002a70565b606091505b505050505050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905262002b5f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002fe9565b50505050565b80600162002b766020600262003ddf565b62002b82919062003ded565b6041541062002c14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c00000000000000000000000000000000000000000000606482015260840162000683565b60016041600082825462002c29919062003e07565b909155505060415460005b602081101562002cd3578160011660010362002c6957826001826020811062002c615762002c61620039eb565b015550505050565b6001816020811062002c7f5762002c7f620039eb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002cbc919062003a49565b91508062002cca8162003a85565b91505062002c34565b506200233b62003e22565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526200233b9084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002adc565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff811662000c7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640162000683565b600054610100900460ff1662002eaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000683565b60005b62002ec06001602062003ded565b81101562002f5b576021816020811062002ede5762002ede620039eb565b01546021826020811062002ef65762002ef6620039eb565b015460408051602081019390935282015260600160405160208183030381529060405280519060200120602182600162002f31919062003e07565b6020811062002f445762002f44620039eb565b01558062002f528162003a85565b91505062002eb2565b50565b600062002fdb8383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9392505050565b6020015190565b60006200304d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620030fc9092919063ffffffff16565b8051909150156200233b57808060200190518101906200306e9190620037f1565b6200233b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000683565b60606200240184846000858573ffffffffffffffffffffffffffffffffffffffff85163b62003188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000683565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051620031b3919062003b20565b60006040518083038185875af1925050503d8060008114620031f2576040519150601f19603f3d011682016040523d82523d6000602084013e620031f7565b606091505b50915091506200320982828662003214565b979650505050505050565b606083156200322557508162002fdb565b825115620032365782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000683919062003e51565b6118298062003e6783390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462002f5b57600080fd5b8035620032aa816200327a565b919050565b803563ffffffff81168114620032aa57600080fd5b60008060008060008060a08789031215620032de57600080fd5b8635620032eb816200327a565b9550620032fb60208801620032af565b945060408701356200330d816200327a565b935060608701359250608087013567ffffffffffffffff808211156200333257600080fd5b818901915089601f8301126200334757600080fd5b8135818111156200335757600080fd5b8a60208285010111156200336a57600080fd5b6020830194508093505050509295509295509295565b600080604083850312156200339457600080fd5b6200339f83620032af565b91506020830135620033b1816200327a565b809150509250929050565b600060208284031215620033cf57600080fd5b813562002fdb816200327a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715620034555762003455620033dc565b604052919050565b600082601f8301126200346f57600080fd5b8135602067ffffffffffffffff8211156200348e576200348e620033dc565b8160051b6200349f8282016200340b565b9283528481018201928281019087851115620034ba57600080fd5b83870192505b848310156200320957823582529183019190830190620034c0565b60008060008060808587031215620034f257600080fd5b84359350602085013567ffffffffffffffff808211156200351257600080fd5b62003520888389016200345d565b94506040870135915080821682146200353857600080fd5b509396929550929360600135925050565b60ff8116811462002f5b57600080fd5b600080600080600080600060e0888a0312156200357557600080fd5b8735620035828162003549565b96506200359260208901620032af565b95506040880135620035a4816200327a565b9450620035b460608901620032af565b93506080880135620035c6816200327a565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620036005762003600620033dc565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126200363e57600080fd5b8135620036556200364f82620035e3565b6200340b565b8181528460208386010111156200366b57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620036a957600080fd5b8a3567ffffffffffffffff80821115620036c257600080fd5b620036d08e838f016200345d565b9b50620036e060208e01620032af565b9a5060408d0135995060608d01359850620036fe60808e01620032af565b97506200370e60a08e016200329d565b96506200371e60c08e01620032af565b95506200372e60e08e016200329d565b94506101008d013593506101208d01359150808211156200374e57600080fd5b506200375d8d828e016200362c565b9150509295989b9194979a5092959850565b6000602082840312156200378257600080fd5b5035919050565b6000806000606084860312156200379f57600080fd5b620037aa84620032af565b92506020840135620037bc816200327a565b9150604084013567ffffffffffffffff811115620037d957600080fd5b620037e7868287016200362c565b9150509250925092565b6000602082840312156200380457600080fd5b8151801515811462002fdb57600080fd5b60005b838110156200383257818101518382015260200162003818565b8381111562002b5f5750506000910152565b600082601f8301126200385657600080fd5b8151620038676200364f82620035e3565b8181528460208386010111156200387d57600080fd5b6200240182602083016020870162003815565b600060208284031215620038a357600080fd5b815167ffffffffffffffff811115620038bb57600080fd5b620024018482850162003844565b600060208284031215620038dc57600080fd5b815162002fdb8162003549565b600081518084526200390381602086016020860162003815565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6060815260006200394a6060830186620038e9565b82810360208401526200395e8186620038e9565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b16602085015273ffffffffffffffffffffffffffffffffffffffff808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620039d282850187620038e9565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003a80577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003ab95762003ab962003a1a565b5060010190565b60006020828403121562003ad357600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600062003b176060830184620038e9565b95945050505050565b6000825162003b3481846020870162003815565b9190910192915050565b60008060006060848603121562003b5457600080fd5b835167ffffffffffffffff8082111562003b6d57600080fd5b62003b7b8783880162003844565b9450602086015191508082111562003b9257600080fd5b5062003ba18682870162003844565b925050604084015162003bb48162003549565b809150509250925092565b60a08152600062003bd460a0830188620038e9565b828103602084015262003be88188620038e9565b60ff969096166040840152505073ffffffffffffffffffffffffffffffffffffffff92909216606083015260809091015292915050565b6000808585111562003c3057600080fd5b8386111562003c3e57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003c6757600080fd5b873562003c74816200327a565b9650602088013562003c86816200327a565b955060408801359450606088013593506080880135620035c68162003549565b600181815b8085111562003d0557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003ce95762003ce962003a1a565b8085161562003cf757918102915b93841c939080029062003cab565b509250929050565b60008262003d1e5750600162000c7c565b8162003d2d5750600062000c7c565b816001811462003d46576002811462003d515762003d71565b600191505062000c7c565b60ff84111562003d655762003d6562003a1a565b50506001821b62000c7c565b5060208310610133831016604e8410600b841016171562003d96575081810a62000c7c565b62003da2838362003ca6565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003dd75762003dd762003a1a565b029392505050565b600062002fdb838362003d0d565b60008282101562003e025762003e0262003a1a565b500390565b6000821982111562003e1d5762003e1d62003a1a565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60208152600062002fdb6020830184620038e956fe60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200080a1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6116cd806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033a2646970667358221220270b01f138ab314b7b3b2cc1fdbdd08476271beee2d7873498fc431d3f03324964736f6c634300080f0033", + "bytecode": "0x608060405260043610620001db5760003560e01c806381b1c17411620000ff578063d96a15f71162000095578063e7a5b4ea116200006c578063e7a5b4ea1462000658578063ed6be5c9146200067d578063f2fde38b1462000694578063ff634ed714620006b957600080fd5b8063d96a15f714620005f5578063dbc16976146200060c578063e7375881146200062457600080fd5b8063a08e8a0811620000d6578063a08e8a08146200054f578063aaa13cc21462000579578063bab161bf146200059e578063d02103ca14620005d357600080fd5b806381b1c17414620004d35780638da5cb5b146200050d5780638f611519146200052d57600080fd5b80633ae05047116200017557806346385549116200014c57806346385549146200044c578063655595401462000471578063715018a614620004965780637b6323c114620004ae57600080fd5b80633ae05047146200032e5780633da8168214620003465780633e197043146200036b57600080fd5b80632072f6c511620001b65780632072f6c5146200025157806322e95f2c14620002695780632dfdf0b514620002a7578063318aee3d14620002bf57600080fd5b80630871e97114620001e05780630e1da6c314620001f957806315064c961462000224575b600080fd5b620001f7620001f13660046200316c565b620006d0565b005b3480156200020657600080fd5b5062000211608d5481565b6040519081526020015b60405180910390f35b3480156200023157600080fd5b50602254620002409060ff1681565b60405190151581526020016200021b565b3480156200025e57600080fd5b50620001f762000c7a565b3480156200027657600080fd5b506200028e62000288366004620031f9565b62000d2e565b6040516001600160a01b0390911681526020016200021b565b348015620002b457600080fd5b506200021160215481565b348015620002cc57600080fd5b5062000309620002de36600462003235565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200021b565b3480156200033b57600080fd5b506200021162000db1565b3480156200035357600080fd5b5062000240620003653660046200333d565b62000ea4565b3480156200037857600080fd5b50620002116200038a366004620033bb565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200045957600080fd5b50620001f76200046b366004620034cc565b62000fa6565b3480156200047e57600080fd5b50620001f762000490366004620035b3565b6200122c565b348015620004a357600080fd5b50620001f762001412565b348015620004bb57600080fd5b50620001f7620004cd366004620034cc565b62001428565b348015620004e057600080fd5b506200028e620004f236600462003609565b6089602052600090815260409020546001600160a01b031681565b3480156200051a57600080fd5b506055546001600160a01b03166200028e565b3480156200053a57600080fd5b50608c546200028e906001600160a01b031681565b3480156200055c57600080fd5b5062000566600081565b60405160ff90911681526020016200021b565b3480156200058657600080fd5b506200028e6200059836600462003623565b620019ea565b348015620005ab57600080fd5b50608754620005bd9063ffffffff1681565b60405163ffffffff90911681526020016200021b565b348015620005e057600080fd5b50608b546200028e906001600160a01b031681565b620001f762000606366004620036d7565b62001b56565b3480156200061957600080fd5b50620001f762001e0a565b3480156200063157600080fd5b50620002406200064336600462003609565b60886020526000908152604090205460ff1681565b3480156200066557600080fd5b50620001f76200067736600462003609565b62001ebc565b3480156200068a57600080fd5b50620005bd600081565b348015620006a157600080fd5b50620001f7620006b336600462003235565b62001f01565b348015620006c657600080fd5b5062000566600181565b60225460ff1615620007755760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60875463ffffffff90811690861603620007f85760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b60008060606001600160a01b0389166200088d57853414620008835760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200076c565b6000915062000b17565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000974576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af11580156200093b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200096191906200374e565b5060208101518151909450925062000b15565b84156200098957620009898a88888862001f97565b620009a06001600160a01b038b1633308a620025bc565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620009f7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a219190810190620037e9565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000a60573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a8a9190810190620037e9565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ac9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aef919062003822565b60405160200162000b039392919062003870565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162000b59989796959493929190620038ad565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000c019062002675565b608b546001600160a01b03166333d6247d62000c1c62000db1565b6040518263ffffffff1660e01b815260040162000c3b91815260200190565b600060405180830381600087803b15801562000c5657600080fd5b505af115801562000c6b573d6000803e3d6000fd5b50505050505050505050505050565b608c546001600160a01b0316331462000d225760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c620027d9565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b602154600090819081805b602081101562000e9b578260011660010362000e1c576001816020811062000de85762000de862003919565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000e49565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000e5660028462003977565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000e9290620039b3565b91505062000dbc565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000f97578160011660010362000f215786818151811062000edf5762000edf62003919565b60200260200101518360405160200162000f03929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000f73565b8287828151811062000f375762000f3762003919565b602002602001015160405160200162000f5a929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000f8060028362003977565b91508062000f8e81620039b3565b91505062000eb4565b5050821490505b949350505050565b60225460ff1615620010475760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6200105d8a8a8a8a8a8a8a8a8a8a6001620028b2565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b038516908490620010a09089908b908790602401620039ee565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001105919062003a27565b60006040518083038185875af1925050503d806000811462001144576040519150601f19603f3d011682016040523d82523d6000602084013e62001149565b606091505b5050905080620011c15760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff16158080156200124d5750600054600160ff909116105b80620012695750303b15801562001269575060005460ff166001145b620012dd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200076c565b6000805460ff1916600117905580156200131e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d829055620013a762002c65565b80156200140b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6200141c62002cef565b62000d2c600062002d4b565b60225460ff1615620014c95760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b620014df8a8a8a8a8a8a8a8a8a8a6000620028b2565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620015fe57604080516000808252602082019092526001600160a01b0385169084906040516200153a919062003a27565b60006040518083038185875af1925050503d806000811462001579576040519150601f19603f3d011682016040523d82523d6000602084013e6200157e565b606091505b5050905080620015f75760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c45440000000000000000000000000000000000000000000000000060648201526084016200076c565b5062001980565b60875463ffffffff908116908716036200162e57620016286001600160a01b038616848462002db5565b62001980565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620018ec57600080600085806020019051810190620016ce919062003a45565b925092509250600085848484604051620016e890620030d5565b620016f69392919062003870565b8190604051809103906000f590508015801562001717573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001785573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017ab91906200374e565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620018da9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200197d565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001955573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200197b91906200374e565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162001a6d90620030d5565b601f1982820381018352601f90910116604081905262001a9a908d908d908d908d908d9060200162003af1565b60408051601f198184030181529082905262001aba929160200162003b32565b6040516020818303038152906040528051906020012060405160200162001b3094939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff161562001bf75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b60875463ffffffff9081169084160362001c7a5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b9262001cc79260019263ffffffff9092169133918991899134918a9190620038ad565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d850152346051850152607180850192909252805180850390920182526091909301909252815191012062001d979062002675565b608b546001600160a01b03166333d6247d62001db262000db1565b6040518263ffffffff1660e01b815260040162001dd191815260200190565b600060405180830381600087803b15801562001dec57600080fd5b505af115801562001e01573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001eb25760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c62002e00565b62001ec662002cef565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001f0b62002cef565b6001600160a01b03811662001f895760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016200076c565b62001f948162002d4b565b50565b600062001fda83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002eaf92505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620022dc5760008080808080806200203d896004818d62003b65565b8101906200204c919062003b91565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620020e35760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0386163014620021635760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b8a8514620021da5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002288919062003a27565b6000604051808303816000865af19150503d8060008114620022c7576040519150601f19603f3d011682016040523d82523d6000602084013e620022cc565b606091505b505050505050505050506200140b565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c00000000000000000000000000000000000000000000000000000000146200236f5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200076c565b600080808080808080620023878a6004818e62003b65565b81019062002396919062003bec565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200242f5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0387163014620024af5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002566919062003a27565b6000604051808303816000865af19150503d8060008114620025a5576040519150601f19603f3d011682016040523d82523d6000602084013e620025aa565b606091505b50505050505050505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526200266f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002eb6565b50505050565b806001620026866020600262003db1565b62002692919062003dbf565b602154106200270a5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200076c565b6001602160008282546200271f919062003dd9565b909155505060215460005b6020811015620027c957816001166001036200275f57826001826020811062002757576200275762003919565b015550505050565b6001816020811062002775576200277562003919565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620027b2919062003977565b915080620027c081620039b3565b9150506200272a565b50620027d462003df4565b505050565b60225460ff16156200287a5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b63ffffffff8a1660009081526088602052604090205460ff16156200293f5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af1158015620029cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620029f2919062003e23565b9050801580159062002a115750608d5462002a0e824262003dbf565b10155b62002aab5760405162461bcd60e51b815260206004820152604260248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c49445f4f525f4e4f545f5945545f434c41494d414260648201527f4c45000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b60875463ffffffff87811691161462002b2d5760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000000060648201526084016200076c565b60875460009063ffffffff1662002b4657508862002b49565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d82015260518101899052607180820193909352815180820390930183526091019052805191012062002c17908e8e63ffffffff168462000ea4565b62000c6b5760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c494460448201526064016200076c565b600054610100900460ff1662002ce45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200076c565b62000d2c3362002d4b565b6055546001600160a01b0316331462000d2c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200076c565b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620027d49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016200260a565b60225460ff1662002e7a5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016200076c565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002f0d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662002fa29092919063ffffffff16565b805190915015620027d4578080602001905181019062002f2e91906200374e565b620027d45760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200076c565b606062000f9e848460008585600080866001600160a01b0316858760405162002fcc919062003a27565b60006040518083038185875af1925050503d80600081146200300b576040519150601f19603f3d011682016040523d82523d6000602084013e62003010565b606091505b509150915062003023878383876200302e565b979650505050505050565b60608315620030a25782516000036200309a576001600160a01b0385163b6200309a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200076c565b508162000f9e565b62000f9e8383815115620030b95781518083602001fd5b8060405162461bcd60e51b81526004016200076c919062003e3d565b6119c78062003e5383390190565b6001600160a01b038116811462001f9457600080fd5b80356200310681620030e3565b919050565b803563ffffffff811681146200310657600080fd5b60008083601f8401126200313357600080fd5b50813567ffffffffffffffff8111156200314c57600080fd5b6020830191508360208285010111156200316557600080fd5b9250929050565b60008060008060008060a087890312156200318657600080fd5b86356200319381620030e3565b9550620031a3602088016200310b565b94506040870135620031b581620030e3565b935060608701359250608087013567ffffffffffffffff811115620031d957600080fd5b620031e789828a0162003120565b979a9699509497509295939492505050565b600080604083850312156200320d57600080fd5b62003218836200310b565b915060208301356200322a81620030e3565b809150509250929050565b6000602082840312156200324857600080fd5b81356200325581620030e3565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620032b757620032b76200325c565b604052919050565b600082601f830112620032d157600080fd5b8135602067ffffffffffffffff821115620032f057620032f06200325c565b8160051b620033018282016200328b565b92835284810182019282810190878511156200331c57600080fd5b83870192505b84831015620030235782358252918301919083019062003322565b600080600080608085870312156200335457600080fd5b84359350602085013567ffffffffffffffff808211156200337457600080fd5b6200338288838901620032bf565b94506040870135915080821682146200339a57600080fd5b509396929550929360600135925050565b60ff8116811462001f9457600080fd5b600080600080600080600060e0888a031215620033d757600080fd5b8735620033e481620033ab565b9650620033f4602089016200310b565b955060408801356200340681620030e3565b945062003416606089016200310b565b935060808801356200342881620030e3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200346257620034626200325c565b50601f01601f191660200190565b600082601f8301126200348257600080fd5b813562003499620034938262003445565b6200328b565b818152846020838601011115620034af57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620034ed57600080fd5b8a3567ffffffffffffffff808211156200350657600080fd5b620035148e838f01620032bf565b9b506200352460208e016200310b565b9a5060408d0135995060608d013598506200354260808e016200310b565b97506200355260a08e01620030f9565b96506200356260c08e016200310b565b95506200357260e08e01620030f9565b94506101008d013593506101208d01359150808211156200359257600080fd5b50620035a18d828e0162003470565b9150509295989b9194979a5092959850565b60008060008060808587031215620035ca57600080fd5b620035d5856200310b565b93506020850135620035e781620030e3565b92506040850135620035f981620030e3565b9396929550929360600135925050565b6000602082840312156200361c57600080fd5b5035919050565b600080600080600080600060a0888a0312156200363f57600080fd5b6200364a886200310b565b965060208801356200365c81620030e3565b9550604088013567ffffffffffffffff808211156200367a57600080fd5b620036888b838c0162003120565b909750955060608a0135915080821115620036a257600080fd5b50620036b18a828b0162003120565b9094509250506080880135620036c781620033ab565b8091505092959891949750929550565b600080600060608486031215620036ed57600080fd5b620036f8846200310b565b925060208401356200370a81620030e3565b9150604084013567ffffffffffffffff8111156200372757600080fd5b620037358682870162003470565b9150509250925092565b801515811462001f9457600080fd5b6000602082840312156200376157600080fd5b815162003255816200373f565b60005b838110156200378b57818101518382015260200162003771565b838111156200266f5750506000910152565b600082601f830112620037af57600080fd5b8151620037c0620034938262003445565b818152846020838601011115620037d657600080fd5b62000f9e8260208301602087016200376e565b600060208284031215620037fc57600080fd5b815167ffffffffffffffff8111156200381457600080fd5b62000f9e848285016200379d565b6000602082840312156200383557600080fd5b81516200325581620033ab565b600081518084526200385c8160208601602086016200376e565b601f01601f19169290920160200192915050565b60608152600062003885606083018662003842565b828103602084015262003899818662003842565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620039008285018762003842565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082620039ae577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620039e757620039e762003948565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003a1e606083018462003842565b95945050505050565b6000825162003a3b8184602087016200376e565b9190910192915050565b60008060006060848603121562003a5b57600080fd5b835167ffffffffffffffff8082111562003a7457600080fd5b62003a82878388016200379d565b9450602086015191508082111562003a9957600080fd5b5062003aa8868287016200379d565b925050604084015162003abb81620033ab565b809150509250925092565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003b0760608301878962003ac6565b828103602084015262003b1c81868862003ac6565b91505060ff831660408301529695505050505050565b6000835162003b468184602088016200376e565b83519083019062003b5c8183602088016200376e565b01949350505050565b6000808585111562003b7657600080fd5b8386111562003b8457600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003bad57600080fd5b873562003bba81620030e3565b9650602088013562003bcc81620030e3565b9550604088013594506060880135935060808801356200342881620033ab565b600080600080600080600080610100898b03121562003c0a57600080fd5b883562003c1781620030e3565b9750602089013562003c2981620030e3565b96506040890135955060608901359450608089013562003c49816200373f565b935060a089013562003c5b81620033ab565b979a969950949793969295929450505060c08201359160e0013590565b600181815b8085111562003cd757817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003cbb5762003cbb62003948565b8085161562003cc957918102915b93841c939080029062003c7d565b509250929050565b60008262003cf05750600162000dab565b8162003cff5750600062000dab565b816001811462003d18576002811462003d235762003d43565b600191505062000dab565b60ff84111562003d375762003d3762003948565b50506001821b62000dab565b5060208310610133831016604e8410600b841016171562003d68575081810a62000dab565b62003d74838362003c78565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003da95762003da962003948565b029392505050565b600062003255838362003cdf565b60008282101562003dd45762003dd462003948565b500390565b6000821982111562003def5762003def62003948565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60006020828403121562003e3657600080fd5b5051919050565b6020815260006200325560208301846200384256fe60c06040523480156200001157600080fd5b50604051620019c7380380620019c78339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161150d620004ba600039600061053001526000818161036f01526104fa015261150d6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b604051610191919061123b565b60405180910390f35b6101ad6101a83660046112d7565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad610204366004611301565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad6102763660046112d7565b610552565b6101ad6102893660046112d7565b61059e565b6101c161029c36600461133d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d236600461133d565b60066020526000908152604090205481565b610184610645565b6101ad6102fa3660046112d7565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad6103523660046112d7565b6106ed565b6101ad6103653660046112d7565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f36600461135f565b6107b2565b005b6101c16103b43660046113d2565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043790611405565b80601f016020809104026020016040519081016040528092919081815260200182805461046390611405565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f12565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611487565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c8383610fda565b50600192915050565b60606004805461043790611405565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c83836110b3565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866108818361149f565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f3d610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff821661103d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b806002600082825461104f9190611487565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff821661113c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156111d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610c27565b600060208083528351808285015260005b818110156112685785810183015185820160400152820161124c565b8181111561127a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112d257600080fd5b919050565b600080604083850312156112ea57600080fd5b6112f3836112ae565b946020939093013593505050565b60008060006060848603121561131657600080fd5b61131f846112ae565b925061132d602085016112ae565b9150604084013590509250925092565b60006020828403121561134f57600080fd5b611358826112ae565b9392505050565b600080600080600080600060e0888a03121561137a57600080fd5b611383886112ae565b9650611391602089016112ae565b95506040880135945060608801359350608088013560ff811681146113b557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156113e557600080fd5b6113ee836112ae565b91506113fc602084016112ae565b90509250929050565b600181811c9082168061141957607f821691505b602082108103611452577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561149a5761149a611458565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036114d0576114d0611458565b506001019056fea264697066735822122094134962e5fa2f6357086a2590b7f3a754d340b16e5312664d82a308bc23a0df64736f6c634300080f0033a26469706673582212207d802e4c153f08d52b883999d6ed4e590e1894e2db82359c2f8cde0298f066c464736f6c634300080f0033", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", - "0x0000000000000000000000000000000000000000000000000000000000000042": "0x01", - "0x0000000000000000000000000000000000000000000000000000000000000046": "0xae4bb80be56b819606589de61d5ec3b522eeb032", - "0x0000000000000000000000000000000000000000000000000000000000000047": "0x61ba0248b0986c2480181c6e76b6adeeaa962483", - "0x0000000000000000000000000000000000000000000000000000000000000022": "0xad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5", - "0x0000000000000000000000000000000000000000000000000000000000000023": "0xb4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d30", - "0x0000000000000000000000000000000000000000000000000000000000000024": "0x21ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba85", - "0x0000000000000000000000000000000000000000000000000000000000000025": "0xe58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a19344", - "0x0000000000000000000000000000000000000000000000000000000000000026": "0x0eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d", - "0x0000000000000000000000000000000000000000000000000000000000000027": "0x887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a1968", - "0x0000000000000000000000000000000000000000000000000000000000000028": "0xffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f83", - "0x0000000000000000000000000000000000000000000000000000000000000029": "0x9867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756af", - "0x000000000000000000000000000000000000000000000000000000000000002a": "0xcefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e0", - "0x000000000000000000000000000000000000000000000000000000000000002b": "0xf9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a5", - "0x000000000000000000000000000000000000000000000000000000000000002c": "0xf8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf892", - "0x000000000000000000000000000000000000000000000000000000000000002d": "0x3490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99c", - "0x000000000000000000000000000000000000000000000000000000000000002e": "0xc1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb", - "0x000000000000000000000000000000000000000000000000000000000000002f": "0x5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8becc", - "0x0000000000000000000000000000000000000000000000000000000000000030": "0xda7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d2", - "0x0000000000000000000000000000000000000000000000000000000000000031": "0x2733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981f", - "0x0000000000000000000000000000000000000000000000000000000000000032": "0xe1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a0", - "0x0000000000000000000000000000000000000000000000000000000000000034": "0xb46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa0", - "0x0000000000000000000000000000000000000000000000000000000000000035": "0xc65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e2", - "0x0000000000000000000000000000000000000000000000000000000000000036": "0xf4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd9", - "0x0000000000000000000000000000000000000000000000000000000000000037": "0x5a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e377", - "0x0000000000000000000000000000000000000000000000000000000000000038": "0x4df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee652", - "0x0000000000000000000000000000000000000000000000000000000000000039": "0xcdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef", - "0x000000000000000000000000000000000000000000000000000000000000003a": "0x0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618d", - "0x000000000000000000000000000000000000000000000000000000000000003b": "0xb8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d0", - "0x000000000000000000000000000000000000000000000000000000000000003c": "0x838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e", - "0x000000000000000000000000000000000000000000000000000000000000003d": "0x662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e", - "0x000000000000000000000000000000000000000000000000000000000000003e": "0x388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea322", - "0x000000000000000000000000000000000000000000000000000000000000003f": "0x93237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d735", - "0x0000000000000000000000000000000000000000000000000000000000000040": "0x8448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a9" + "0x0000000000000000000000000000000000000000000000000000000000000055": "0xc949254d682d8c9ad5682521675b8f43b102aec4", + "0x0000000000000000000000000000000000000000000000000000000000000087": "0x01", + "0x000000000000000000000000000000000000000000000000000000000000008b": "0xae4bb80be56b819606589de61d5ec3b522eeb032" }, "contractName": "Bridge" }, @@ -69,17 +28,18 @@ }, { "balance": "0", - "nonce": "0", - "address": "0x0000000000000000000000000000000000000000" + "nonce": "1", + "address": "0xae4bb80be56b819606589de61d5ec3b522eeb032", + "bytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610197565b60006020819052908152604090205481565b6100a061009b366004610197565b6100e7565b005b6002546100c29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610064565b60025473ffffffffffffffffffffffffffffffffffffffff163314610192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a7570646174654560448201527f786974526f6f743a204f4e4c595f425249444745000000000000000000000000606482015260840160405180910390fd5b600155565b6000602082840312156101a957600080fd5b503591905056fea2646970667358221220fea7fcab965a97796cf30d6ff699830b40cf06628fa4f9baf7c5725155af254564736f6c634300080f0033", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988" + }, + "contractName": "GlobalExitRootManagerL2" }, { "balance": "0", - "nonce": "1", - "address": "0x61ba0248b0986c2480181c6e76b6adeeaa962483", - "bytecode": "0x608060405234801561001057600080fd5b50600436106100f55760003560e01c80636c94522111610097578063a3c573eb11610066578063a3c573eb1461021c578063a457c2d714610261578063a9059cbb14610274578063dd62ed3e1461028757600080fd5b80636c945221146101b657806370a08231146101cb57806395d89b41146102015780639dc29fac1461020957600080fd5b806323b872dd116100d357806323b872dd1461014d578063313ce56714610160578063395093511461019057806340c10f19146101a357600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102cd565b60405161010f91906111c0565b60405180910390f35b61012b61012636600461125c565b61035f565b604051901515815260200161010f565b6035545b60405190815260200161010f565b61012b61015b366004611286565b610377565b60655474010000000000000000000000000000000000000000900460ff1660405160ff909116815260200161010f565b61012b61019e36600461125c565b61039b565b61012b6101b136600461125c565b6103e7565b6101c96101c436600461139c565b610483565b005b61013f6101d9366004611431565b73ffffffffffffffffffffffffffffffffffffffff1660009081526033602052604090205490565b61010261068e565b61012b61021736600461125c565b61069d565b60655461023c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b61012b61026f36600461125c565b61072b565b61012b61028236600461125c565b6107fc565b61013f610295366004611453565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260346020908152604080832093909416825291909152205490565b6060603680546102dc90611486565b80601f016020809104026020016040519081016040528092919081815260200182805461030890611486565b80156103555780601f1061032a57610100808354040283529160200191610355565b820191906000526020600020905b81548152906001019060200180831161033857829003601f168201915b5050505050905090565b60003361036d818585610826565b5060019392505050565b6000336103858582856109da565b610390858585610ab1565b506001949350505050565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061036d90829086906103e2908790611508565b610826565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f42524944474500000000000000000060448201526064015b60405180910390fd5b61047a8383610d64565b50600192915050565b600054610100900460ff16158080156104a35750600054600160ff909116105b806104bd5750303b1580156104bd575060005460ff166001145b610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610467565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156105a757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6105b18686610e85565b606580547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16177401000000000000000000000000000000000000000060ff8716021790556106238383610d64565b801561068657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6060603780546102dc90611486565b60655460009073ffffffffffffffffffffffffffffffffffffffff163314610721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f6b656e577261707065643a4e4f545f4252494447450000000000000000006044820152606401610467565b61047a8383610f26565b33600081815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610467565b6103908286868403610826565b60003361036d818585610ab1565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff83166108c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff821661096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aab5781811015610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610467565b610aab8484848403610826565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff8216610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604090205481811015610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260336020526040808220858503905591851681529081208054849290610cf1908490611508565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d5791815260200190565b60405180910390a3610aab565b73ffffffffffffffffffffffffffffffffffffffff8216610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610467565b8060356000828254610df39190611508565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526033602052604081208054839290610e2d908490611508565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600054610100900460ff16610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b610e818282611110565b73ffffffffffffffffffffffffffffffffffffffff8216610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff82166000908152603360205260409020548181101561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610467565b73ffffffffffffffffffffffffffffffffffffffff831660009081526033602052604081208383039055603580548492906110bb908490611520565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109cd565b505050565b600054610100900460ff166111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610467565b60366111b3838261157d565b50603761110b828261157d565b600060208083528351808285015260005b818110156111ed578581018301518582016040015282016111d1565b818111156111ff576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461125757600080fd5b919050565b6000806040838503121561126f57600080fd5b61127883611233565b946020939093013593505050565b60008060006060848603121561129b57600080fd5b6112a484611233565b92506112b260208501611233565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261130257600080fd5b813567ffffffffffffffff8082111561131d5761131d6112c2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611363576113636112c2565b8160405283815286602085880101111561137c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113b457600080fd5b853567ffffffffffffffff808211156113cc57600080fd5b6113d889838a016112f1565b965060208801359150808211156113ee57600080fd5b506113fb888289016112f1565b945050604086013560ff8116811461141257600080fd5b925061142060608701611233565b949793965091946080013592915050565b60006020828403121561144357600080fd5b61144c82611233565b9392505050565b6000806040838503121561146657600080fd5b61146f83611233565b915061147d60208401611233565b90509250929050565b600181811c9082168061149a57607f821691505b6020821081036114d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561151b5761151b6114d9565b500190565b600082821015611532576115326114d9565b500390565b601f82111561110b57600081815260208120601f850160051c8101602086101561155e5750805b601f850160051c820191505b818110156106865782815560010161156a565b815167ffffffffffffffff811115611597576115976112c2565b6115ab816115a58454611486565b84611537565b602080601f8311600181146115fe57600084156115c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610686565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561164b5788860151825594840194600190910190840161162c565b508582101561168757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122015dd8047eba7f7221e0d7792549e5a01ba1b6dfaad0c6a70dc82ef386e0c5cc464736f6c634300080f0033", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01" - } + "nonce": "0", + "address": "0x000000000000000000000000000000005ca1ab1e" } ] } \ No newline at end of file diff --git a/docker/scripts/genesis_gen_docker.json b/docker/scripts/genesis_gen_docker.json index 479a1d049..7f0a64301 100644 --- a/docker/scripts/genesis_gen_docker.json +++ b/docker/scripts/genesis_gen_docker.json @@ -61,7 +61,9 @@ "function": "initialize", "paramsFunction": [ 1, - "0xAE4bB80bE56B819606589DE61d5ec3b522EEB032" + "0xAE4bB80bE56B819606589DE61d5ec3b522EEB032", + "0x0000000000000000000000000000000000000000", + 0 ], "contractName": "Bridge" } diff --git a/package.json b/package.json index 98a095c61..590424aae 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "homepage": "https://github.com/0xPolygonHermez/contracts-zkEVM#readme", "license": "pending", "dependencies": { - "@0xpolygonhermez/zkevm-commonjs": "github:0xPolygonHermez/zkevm-commonjs#v0.5.0.0", + "@0xpolygonhermez/zkevm-commonjs": "github:0xPolygonHermez/zkevm-commonjs#feature/fixMultipleBatchesHash", "@nomiclabs/hardhat-ethers": "^2.0.2", "@nomiclabs/hardhat-etherscan": "^3.1.0", "@nomiclabs/hardhat-waffle": "^2.0.3", @@ -58,14 +58,15 @@ "scripts": { "test": "npx hardhat test test/contracts/**.test.js", "docgen": "npx solidity-docgen --solc-module solc-0.8 -t ./docs/templates -e ./contracts/verifiers,./contracts/mocks", - "deploy:PoE2_0:hardhat": "npx hardhat run deployment/deployment_v2-0/deployPoE_v2-0.js --network hardhat", - "deploy:PoE2_0:goerli": "npx hardhat run deployment/deployment_v2-0/deployPoE_v2-0.js --network goerli", - "verify:PoE2_0:goerli": "npx hardhat run deployment/deployment_v2-0/verifyPoE_v2-0.js --network goerli", - "lint": "npx eslint ./test && npx eslint ./docker/scripts && npx eslint ./deployment/deployment_v2-0 && npx eslint ./src", - "lint:fix": "npx eslint ./test --fix && npx eslint ./docker/scripts --fix && npx eslint ./deployment/deployment_v2-0 --fix && npx eslint ./src --fix", + "deploy:PoE2_0:hardhat": "npx hardhat run deployment/deployPoE_v2-0.js --network hardhat", + "deploy:PoE2_0:goerli": "npx hardhat run deployment/deployPoE_v2-0.js --network goerli", + "verify:PoE2_0:goerli": "npx hardhat run deployment/verifyPoE_v2-0.js --network goerli", + "lint": "npx eslint ./test && npx eslint ./docker/scripts && npx eslint ./deployment && npx eslint ./src", + "lint:fix": "npx eslint ./test --fix && npx eslint ./docker/scripts --fix && npx eslint ./deployment --fix && npx eslint ./src --fix", "compile": "npx hardhat compile", "check:deploy:PoE": "npx hardhat node > /dev/null 2>&1 & npx hardhat run --network localhost deployment/testnet/deployPoETestnet.js && npx hardhat run --network localhost deployment/testnet/checkDeployment.js && pkill -f 'hardhat'", "docker:contracts": "./docker/scripts/deploy-docker.sh", - "push:docker:contracts": "docker push hermeznetwork/geth-zkevm-contracts" + "push:docker:contracts": "docker push hermeznetwork/geth-zkevm-contracts", + "update:genesis": "node src/create-genesis.js --gen ../deployment/genesis-gen.json --out ../deployment/genesis.json && node src/create-genesis.js --gen ../docker/scripts/genesis_gen_docker.json --out ../docker/scripts/genesis_docker.json" } } diff --git a/src/create-genesis.js b/src/create-genesis.js new file mode 100644 index 000000000..4c42389aa --- /dev/null +++ b/src/create-genesis.js @@ -0,0 +1,224 @@ +/* eslint-disable global-require */ +/* eslint-disable import/no-dynamic-require */ +/* eslint-disable no-unused-expressions */ +/* eslint-disable no-console */ +/* eslint-disable multiline-comment-style */ +/* eslint-disable no-restricted-syntax */ +/* eslint-disable no-await-in-loop */ +/* eslint-disable guard-for-in */ +/* eslint-disable import/no-extraneous-dependencies */ + +const { Scalar } = require('ffjavascript'); +const fs = require('fs'); + +const ethers = require('ethers'); +const { + Address, +} = require('ethereumjs-util'); +const { defaultAbiCoder } = require('@ethersproject/abi'); +const path = require('path'); + +const { argv } = require('yargs'); +const { + MemDB, ZkEVMDB, getPoseidon, processorUtils, smtUtils, Constants, +} = require('@0xpolygonhermez/zkevm-commonjs'); +const contractsPolygonHermez = require('../index'); + +// Example of use: node create-genesis.js --gen genesis-gen.json --out genesis.json +async function main() { + // load generator + const inputPath = (typeof argv.gen === 'undefined') ? undefined : argv.gen; + if (inputPath === undefined) { throw Error('Input genesis must be provided'); } + + // load output file + const outPath = (typeof argv.out === 'undefined') ? undefined : argv.out; + if (outPath === undefined) { throw Error('Output file must be specified'); } + + const genesisGenerator = require(path.join(__dirname, inputPath)); + + const genesisOutput = {}; + const poseidon = await getPoseidon(); + const { F } = poseidon; + + const genesisRoot = [F.zero, F.zero, F.zero, F.zero]; + const accHashInput = [F.zero, F.zero, F.zero, F.zero]; + const globalExitRoot = ethers.constants.HashZero; + + const { + genesis, + txs, + sequencerAddress, + timestamp, + defaultChainId, + } = genesisGenerator; + + const db = new MemDB(F); + + // create a zkEVMDB and build a batch + const zkEVMDB = await ZkEVMDB.newZkEVM( + db, + poseidon, + genesisRoot, + accHashInput, + genesis, + null, + null, + defaultChainId, + ); + + /* + * build, sign transaction and generate rawTxs + * rawTxs would be the calldata inserted in the contract + */ + const addressToContractName = {}; + const rawTxs = []; + for (let j = 0; j < txs.length; j++) { + const currentTx = txs[j]; + + const tx = { + to: currentTx.to || '0x', + nonce: currentTx.nonce, + value: processorUtils.toHexStringRlp(ethers.utils.parseUnits(currentTx.value, 'wei')), + gasLimit: currentTx.gasLimit, + gasPrice: processorUtils.toHexStringRlp(ethers.utils.parseUnits(currentTx.gasPrice, 'wei')), + chainId: currentTx.chainId, + data: currentTx.data || '0x', + }; + + // Contract deployment from tx + let bytecode; let + abi; + if (contractsPolygonHermez[currentTx.contractName]) { + ({ bytecode, abi } = contractsPolygonHermez[currentTx.contractName]); + } + if (currentTx.function) { + const interfaceContract = new ethers.utils.Interface(abi); + tx.data = interfaceContract.encodeFunctionData(currentTx.function, currentTx.paramsFunction); + } else { + if (currentTx.paramsDeploy) { + const params = defaultAbiCoder.encode(currentTx.paramsDeploy.types, currentTx.paramsDeploy.values); + tx.data = bytecode + params.slice(2); + } else { + tx.data = bytecode; + } + const addressContract = await ethers.utils.getContractAddress( + { from: currentTx.from, nonce: currentTx.nonce }, + ); + addressToContractName[addressContract.toLowerCase()] = currentTx.contractName; + } + + let customRawTx; + const address = genesis.find((o) => o.address === currentTx.from); + const wallet = new ethers.Wallet(address.pvtKey); + if (tx.chainId === 0) { + const signData = ethers.utils.RLP.encode([ + processorUtils.toHexStringRlp(Scalar.e(tx.nonce)), + processorUtils.toHexStringRlp(tx.gasPrice), + processorUtils.toHexStringRlp(tx.gasLimit), + processorUtils.toHexStringRlp(tx.to), + processorUtils.toHexStringRlp(tx.value), + processorUtils.toHexStringRlp(tx.data), + processorUtils.toHexStringRlp(tx.chainId), + '0x', + '0x', + ]); + const digest = ethers.utils.keccak256(signData); + const signingKey = new ethers.utils.SigningKey(address.pvtKey); + const signature = signingKey.signDigest(digest); + const r = signature.r.slice(2).padStart(64, '0'); // 32 bytes + const s = signature.s.slice(2).padStart(64, '0'); // 32 bytes + const v = (signature.v).toString(16).padStart(2, '0'); // 1 bytes + customRawTx = signData.concat(r).concat(s).concat(v); + } else { + const rawTxEthers = await wallet.signTransaction(tx); + customRawTx = processorUtils.rawTxToCustomRawTx(rawTxEthers); + } + rawTxs.push(customRawTx); + } + + const skipUpdateSystemStorage = true; + const batch = await zkEVMDB.buildBatch( + timestamp, + sequencerAddress, + smtUtils.stringToH4(globalExitRoot), + undefined, + skipUpdateSystemStorage, + ); + for (let j = 0; j < rawTxs.length; j++) { + batch.addRawTx(rawTxs[j]); + } + + // execute the transactions added to the batch + await batch.executeTxs(); + // consolidate state + await zkEVMDB.consolidate(batch); + + // clean address 0 batch, clean globalExitRoot + const updatedAccounts = batch.getUpdatedAccountsBatch(); + const currentVM = batch.vm; + const accountsOutput = []; + + for (const item in updatedAccounts) { + const address = item; + const account = updatedAccounts[address]; + const currentAccountOutput = {}; + currentAccountOutput.balance = account.balance.toString(); + currentAccountOutput.nonce = account.nonce.toString(); + currentAccountOutput.address = address; + + // If account is a contract, update storage and bytecode + if (account.isContract()) { + const addressInstance = Address.fromString(address); + const smCode = await currentVM.stateManager.getContractCode(addressInstance); + const sto = await currentVM.stateManager.dumpStorage(addressInstance); + const storage = {}; + const keys = Object.keys(sto).map((v) => `0x${v}`); + const values = Object.values(sto).map((v) => `0x${v}`); + for (let k = 0; k < keys.length; k++) { + storage[keys[k]] = ethers.utils.RLP.decode(values[k]); + } + + currentAccountOutput.bytecode = `0x${smCode.toString('hex')}`; + currentAccountOutput.storage = storage; + currentAccountOutput.contractName = addressToContractName[address]; + } else if (address !== Constants.ADDRESS_SYSTEM + && address.toLowerCase() !== Constants.ADDRESS_GLOBAL_EXIT_ROOT_MANAGER_L2.toLowerCase()) { + currentAccountOutput.pvtKey = (genesis.find((o) => o.address.toLowerCase() === address.toLowerCase())).pvtKey; + } + accountsOutput.push(currentAccountOutput); + } + + // add accounts that has not been used + for (let i = 0; i < genesis.length; i++) { + const item = genesis[i]; + if (typeof updatedAccounts[item.address.toLowerCase()] === 'undefined') { + accountsOutput.push(item); + } + } + + genesisOutput.root = smtUtils.h4toString(batch.currentStateRoot); + genesisOutput.genesis = accountsOutput; + const genesisOutputPath = path.join(__dirname, outPath); + await fs.writeFileSync(genesisOutputPath, JSON.stringify(genesisOutput, null, 2)); + + if (argv.update) { + const updatePath = (typeof argv.update === 'undefined') ? undefined : argv.update; + + if (!fs.existsSync(updatePath)) { + throw new Error('Update file does not exist'); + } + + const testVectors = JSON.parse(fs.readFileSync(updatePath)); + testVectors[0].genesis = genesisOutput.genesis; + testVectors[0].expectedOldRoot = genesisOutput.root; + await fs.writeFileSync(updatePath, JSON.stringify(testVectors, null, 2)); + } +} +// We recommend this pattern to be able to use async/await everywhere +// and properly handle errors. +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); From 07d758af5e06ef0c3a39e549fd84333257269924 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Thu, 24 Nov 2022 17:06:03 +0100 Subject: [PATCH 26/71] update commonjs --- docker/scripts/genesis_docker.json | 7 +------ package.json | 2 +- src/create-genesis.js | 4 ++-- 3 files changed, 4 insertions(+), 9 deletions(-) diff --git a/docker/scripts/genesis_docker.json b/docker/scripts/genesis_docker.json index 190f17418..a7aa78090 100644 --- a/docker/scripts/genesis_docker.json +++ b/docker/scripts/genesis_docker.json @@ -1,5 +1,5 @@ { - "root": "0xd95c3987484f77ca1b7d8dc210004b5fb0b5f59186c3b7f02e6e7d5aadd6485f", + "root": "0xbf34f9a52a63229e90d1016011655bc12140bba5b771817b88cbf340d08dcbde", "genesis": [ { "balance": "100000000000000000000000", @@ -35,11 +35,6 @@ "0x0000000000000000000000000000000000000000000000000000000000000002": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988" }, "contractName": "GlobalExitRootManagerL2" - }, - { - "balance": "0", - "nonce": "0", - "address": "0x000000000000000000000000000000005ca1ab1e" } ] } \ No newline at end of file diff --git a/package.json b/package.json index 590424aae..beeac5ece 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "homepage": "https://github.com/0xPolygonHermez/contracts-zkEVM#readme", "license": "pending", "dependencies": { - "@0xpolygonhermez/zkevm-commonjs": "github:0xPolygonHermez/zkevm-commonjs#feature/fixMultipleBatchesHash", + "@0xpolygonhermez/zkevm-commonjs": "github:0xPolygonHermez/zkevm-commonjs#v0.5.0.1", "@nomiclabs/hardhat-ethers": "^2.0.2", "@nomiclabs/hardhat-etherscan": "^3.1.0", "@nomiclabs/hardhat-waffle": "^2.0.3", diff --git a/src/create-genesis.js b/src/create-genesis.js index 4c42389aa..a5728e775 100644 --- a/src/create-genesis.js +++ b/src/create-genesis.js @@ -136,13 +136,13 @@ async function main() { rawTxs.push(customRawTx); } - const skipUpdateSystemStorage = true; + const options = { skipUpdateSystemStorage: true }; const batch = await zkEVMDB.buildBatch( timestamp, sequencerAddress, smtUtils.stringToH4(globalExitRoot), undefined, - skipUpdateSystemStorage, + options, ); for (let j = 0; j < rawTxs.length; j++) { batch.addRawTx(rawTxs[j]); From 3e80ea1996f3acaf7945a7b30e8841ffada31066 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Tue, 13 Dec 2022 10:46:17 +0100 Subject: [PATCH 27/71] update verifier --- compiled-contracts/ProofOfEfficiency.json | 4 ++-- compiled-contracts/ProofOfEfficiencyMock.json | 4 ++-- compiled-contracts/Verifier.json | 4 ++-- contracts/ProofOfEfficiency.sol | 10 +++++----- contracts/verifiers/Verifier.sol | 12 ++++++------ 5 files changed, 17 insertions(+), 17 deletions(-) diff --git a/compiled-contracts/ProofOfEfficiency.json b/compiled-contracts/ProofOfEfficiency.json index f7f531e43..a3e35cc8e 100644 --- a/compiled-contracts/ProofOfEfficiency.json +++ b/compiled-contracts/ProofOfEfficiency.json @@ -896,8 +896,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5061494a806100206000396000f3fe608060405234801561001057600080fd5b50600436106102c85760003560e01c80638da5cb5b1161017b578063cfa8ed47116100d8578063e7a7ed021161008c578063eaeb077b11610071578063eaeb077b14610687578063f2fde38b1461069a578063f7552761146106ad57600080fd5b8063e7a7ed0214610637578063e8bf92ed1461066757600080fd5b8063d8d1091b116100bd578063d8d1091b146105ef578063d8f54db014610602578063dbc169761461062f57600080fd5b8063cfa8ed47146105a3578063d02103ca146105cf57600080fd5b8063b02286c01161012f578063b6b0b09711610114578063b6b0b09714610558578063c3fd0f9c1461057d578063c89e42df1461059057600080fd5b8063b02286c01461052f578063b4d63f581461053857600080fd5b8063a3c573eb11610160578063a3c573eb146104f1578063ab9fc5ef14610511578063adc879e91461051b57600080fd5b80638da5cb5b146104cb57806399f5634e146104e957600080fd5b8063542028d5116102295780637152facf116101dd5780637fcb3653116101c25780637fcb36531461049157806381df7d3f146104a55780638c4a0af7146104b857600080fd5b80637152facf14610476578063798470571461048957600080fd5b80636b8616ce1161020e5780636b8616ce1461043b5780636ff512cc1461045b578063715018a61461046e57600080fd5b8063542028d51461042057806355b925e61461042857600080fd5b806327eb6c0f11610280578063423fa85611610265578063423fa856146103aa57806345605267146103ca5780635392c5e0146103f257600080fd5b806327eb6c0f146103525780633c1582671461039757600080fd5b806319d8ac61116102b157806319d8ac61146103085780631c1083e2146103355780632072f6c51461034a57600080fd5b8063107bf28c146102cd57806315064c96146102eb575b600080fd5b6102d56106bc565b6040516102e29190613e2c565b60405180910390f35b6065546102f89060ff1681565b60405190151581526020016102e2565b60685461031c9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102e2565b610348610343366004613e78565b61074a565b005b610348610856565b6070546103729073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e2565b6103486103a5366004613fed565b610907565b60685461031c9068010000000000000000900467ffffffffffffffff1681565b60685461031c90700100000000000000000000000000000000900467ffffffffffffffff1681565b610412610400366004614104565b606b6020526000908152604090205481565b6040519081526020016102e2565b6102d5611297565b610348610436366004614136565b6112a4565b610412610449366004614104565b60666020526000908152604090205481565b610348610469366004613e78565b61186d565b610348611987565b6102d56104843660046141b9565b611999565b610412611bd0565b60695461031c9067ffffffffffffffff1681565b6103486104b3366004614214565b611c4a565b6103486104c636600461430e565b611fa3565b60335473ffffffffffffffffffffffffffffffffffffffff16610372565b6104126120bd565b6071546103729073ffffffffffffffffffffffffffffffffffffffff1681565b61031c62093a8081565b606e5461031c9067ffffffffffffffff1681565b61041261ea6081565b610412610546366004614104565b60676020526000908152604090205481565b60655461037290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b61034861058b366004614136565b6121ee565b61034861059e36600461432b565b612838565b6069546103729068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103729073ffffffffffffffffffffffffffffffffffffffff1681565b6103486105fd366004614360565b61290d565b6069546102f8907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610348612fb2565b60685461031c907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103729073ffffffffffffffffffffffffffffffffffffffff1681565b610348610695366004614453565b613141565b6103486106a8366004613e78565b613641565b61041267016345785d8a000081565b606f80546106c990614498565b80601f01602080910402602001604051908101604052809291908181526020018280546106f590614498565b80156107425780601f1061071757610100808354040283529160200191610742565b820191906000526020600020905b81548152906001019060200180831161072557829003601f168201915b505050505081565b60705473ffffffffffffffffffffffffffffffffffffffff1633146107dc5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff16156108f55760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6108fd6136de565b610905613745565b565b60655460ff16156109a65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610a3f5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b805180610ada5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015611088576000878281518110610b4057610b406144eb565b602002602001015190506000816060015167ffffffffffffffff161115610d595783610b6b81614549565b945050600081600001518051906020012082602001518360600151604051602001610bce93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610c9b5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610d535760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016107d3565b50610ef3565b60208101511580610e085750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610dc29160040190815260200190565b6020604051808303816000875af1158015610de1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e059190614570565b15155b610e7a5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016107d3565b80515161ea6011610ef35760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016107d3565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610f29575042816040015167ffffffffffffffff1611155b610fc15760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061106a90614549565b9550508060400151955050808061108090614589565b915050610b24565b5060685467ffffffffffffffff78010000000000000000000000000000000000000000000000009091048116908316111561112b5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016107d3565b60685460009061115990700100000000000000000000000000000000900467ffffffffffffffff16846145c1565b61116d9067ffffffffffffffff16876145ea565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061124a33306112248467016345785d8a0000614601565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169291906137cf565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d80546106c990614498565b60655460ff16156113435760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695467ffffffffffffffff90811690881611156113ef5760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016107d3565b60695467ffffffffffffffff9081169087161161149a5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b602052604090205461154c5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a4016107d3565b600061155a88888888611999565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161158f919061463e565b602060405180830381855afa1580156115ac573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906115cf9190614570565b6115d99190614689565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611643918991899189919060040161469d565b602060405180830381865afa158015611660573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116849190614717565b6116f65760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016107d3565b6069546117549033906117139067ffffffffffffffff168b6145c1565b67ffffffffffffffff166117256120bd565b61172f9190614601565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16919061388d565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b15801561180957600080fd5b505af115801561181d573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146119065760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161084b565b61198f6136de565b61090560006138e8565b67ffffffffffffffff8085166000818152606760205260408082205493871682529020546060929115806119cc57508115155b611a645760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b80611afd5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec01604051602081830303815290604052925050505b949350505050565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691611c1f917801000000000000000000000000000000000000000000000000909104166001614734565b611c2991906145c1565b611c459067ffffffffffffffff16670de0b6b3a7640000614601565b905090565b600054610100900460ff1615808015611c6a5750600054600160ff909116105b80611c845750303b158015611c84575060005460ff166001145b611cf65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107d3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611d5457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d611e9387826147ae565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f611ed485826147ae565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556070805492851692909116919091179055611f3261395f565b8015611f9557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461203c5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061084b90831515815260200190565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612134573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121589190614570565b60695460685491925060009167ffffffffffffffff918216916801000000000000000082048116916121bd91700100000000000000000000000000000000820481169178010000000000000000000000000000000000000000000000009004166145c1565b6121c79190614734565b6121d191906145c1565b67ffffffffffffffff1690506121e781836148aa565b9250505090565b60655460ff161561228d5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b8567ffffffffffffffff168767ffffffffffffffff161061233c5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a4016107d3565b60695467ffffffffffffffff908116908716111561240e5760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c4016107d3565b67ffffffffffffffff87166000908152606b60205260409020546124c05760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a4016107d3565b67ffffffffffffffff86166000908152606b60205260409020546125725760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a4016107d3565b600061258088888888611999565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516125b5919061463e565b602060405180830381855afa1580156125d2573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906125f59190614570565b6125ff9190614689565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91612669918991899189919060040161469d565b602060405180830381865afa158015612686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126aa9190614717565b61271c5760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f460000000060648201526084016107d3565b67ffffffffffffffff88166000908152606b60205260409020548690036127d15760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a4016107d3565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a161282d613745565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146128d15760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606d6128dd82826147ae565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161084b9190613e2c565b60655460ff16156129ac5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612a6f5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180612b0a5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60685467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612b559184917001000000000000000000000000000000009004166148be565b1115612bc95760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016107d3565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b84811015612ee2576000868281518110612c2957612c296144eb565b602002602001015190508380612c3e90614549565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114612d5f5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016107d3565b612d6a6001886145ea565b8303612e28574262093a808360400151612d849190614734565b67ffffffffffffffff161115612e285760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016107d3565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612eca90614549565b96505050508080612eda90614589565b915050612c0d565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff1661302a5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b60705473ffffffffffffffffffffffffffffffffffffffff1633146130b75760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561312157600080fd5b505af1158015613135573d6000803e3d6000fd5b505050506109056139e5565b60655460ff16156131e05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146132a35760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b60006132ad611bd0565b9050818111156133255760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016107d3565b61ea6083511061339d5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016107d3565b6065546133c790610100900473ffffffffffffffffffffffffffffffffffffffff163330846137cf565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345b9190614570565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff1690601861349583614549565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161350e93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260669093529120553233036135de57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261363b565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613632939291906148d6565b60405180910390a25b50505050565b6136496136de565b73ffffffffffffffffffffffffffffffffffffffff81166136d25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107d3565b6136db816138e8565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109055760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156137af57600080fd5b505af11580156137c3573d6000803e3d6000fd5b50505050610905613ab0565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261363b9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613ba5565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526138e39084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401613829565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166139dc5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107d3565b610905336138e8565b60655460ff16613a5d5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff1615613b4f5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6000613c07826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613c979092919063ffffffff16565b8051909150156138e35780806020019051810190613c259190614717565b6138e35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107d3565b6060611bc88484600085856000808673ffffffffffffffffffffffffffffffffffffffff168587604051613ccb919061463e565b60006040518083038185875af1925050503d8060008114613d08576040519150601f19603f3d011682016040523d82523d6000602084013e613d0d565b606091505b5091509150613d1e87838387613d29565b979650505050505050565b60608315613da5578251600003613d9e5773ffffffffffffffffffffffffffffffffffffffff85163b613d9e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107d3565b5081611bc8565b611bc88383815115613dba5781518083602001fd5b8060405162461bcd60e51b81526004016107d39190613e2c565b60005b83811015613def578181015183820152602001613dd7565b8381111561363b5750506000910152565b60008151808452613e18816020860160208601613dd4565b601f01601f19169290920160200192915050565b602081526000613e3f6020830184613e00565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146136db57600080fd5b8035613e7381613e46565b919050565b600060208284031215613e8a57600080fd5b8135613e3f81613e46565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613ee757613ee7613e95565b60405290565b6040516060810167ffffffffffffffff81118282101715613ee757613ee7613e95565b604051601f8201601f1916810167ffffffffffffffff81118282101715613f3957613f39613e95565b604052919050565b600067ffffffffffffffff821115613f5b57613f5b613e95565b5060051b60200190565b600082601f830112613f7657600080fd5b813567ffffffffffffffff811115613f9057613f90613e95565b613fa36020601f19601f84011601613f10565b818152846020838601011115613fb857600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613e7357600080fd5b6000602080838503121561400057600080fd5b823567ffffffffffffffff8082111561401857600080fd5b818501915085601f83011261402c57600080fd5b813561403f61403a82613f41565b613f10565b81815260059190911b8301840190848101908883111561405e57600080fd5b8585015b838110156140f75780358581111561407a5760008081fd5b86016080818c03601f19018113156140925760008081fd5b61409a613ec4565b89830135888111156140ac5760008081fd5b6140ba8e8c83870101613f65565b8252506040808401358b83015260606140d4818601613fd5565b828401526140e3848601613fd5565b908301525085525050918601918601614062565b5098975050505050505050565b60006020828403121561411657600080fd5b613e3f82613fd5565b806040810183101561413057600080fd5b92915050565b6000806000806000806000610180888a03121561415257600080fd5b61415b88613fd5565b965061416960208901613fd5565b955060408801359450606088013593506141868960808a0161411f565b925061014088018981111561419a57600080fd5b60c0890192506141aa8a8261411f565b91505092959891949750929550565b600080600080608085870312156141cf57600080fd5b6141d885613fd5565b93506141e660208601613fd5565b93969395505050506040820135916060013590565b80151581146136db57600080fd5b8035613e73816141fb565b60008060008060008060008060008060006101608c8e03121561423657600080fd5b61423f8c613e68565b9a5061424d60208d01613e68565b995061425b60408d01613e68565b985060608c0135975061427060808d01613e68565b965061427e60a08d01614209565b955067ffffffffffffffff8060c08e0135111561429a57600080fd5b6142aa8e60c08f01358f01613f65565b95506142b860e08e01613fd5565b9450806101008e013511156142cc57600080fd5b506142de8d6101008e01358e01613f65565b92506142ed6101208d01613e68565b91506142fc6101408d01613e68565b90509295989b509295989b9093969950565b60006020828403121561432057600080fd5b8135613e3f816141fb565b60006020828403121561433d57600080fd5b813567ffffffffffffffff81111561435457600080fd5b611bc884828501613f65565b6000602080838503121561437357600080fd5b823567ffffffffffffffff8082111561438b57600080fd5b818501915085601f83011261439f57600080fd5b81356143ad61403a82613f41565b81815260059190911b830184019084810190888311156143cc57600080fd5b8585015b838110156140f7578035858111156143e85760008081fd5b86016060818c03601f19018113156144005760008081fd5b614408613eed565b898301358881111561441a5760008081fd5b6144288e8c83870101613f65565b8252506040808401358b830152614440838501613fd5565b90820152855250509186019186016143d0565b6000806040838503121561446657600080fd5b823567ffffffffffffffff81111561447d57600080fd5b61448985828601613f65565b95602094909401359450505050565b600181811c908216806144ac57607f821691505b6020821081036144e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036145665761456661451a565b6001019392505050565b60006020828403121561458257600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036145ba576145ba61451a565b5060010190565b600067ffffffffffffffff838116908316818110156145e2576145e261451a565b039392505050565b6000828210156145fc576145fc61451a565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146395761463961451a565b500290565b60008251614650818460208701613dd4565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826146985761469861465a565b500690565b61012081016040808784376000838201818152879190815b60028110156146d5578484833790840182815292840192906001016146b5565b5050828760c0870137610100850181815286935091505b600181101561470b5782518252602092830192909101906001016146ec565b50505095945050505050565b60006020828403121561472957600080fd5b8151613e3f816141fb565b600067ffffffffffffffff8083168185168083038211156147575761475761451a565b01949350505050565b601f8211156138e357600081815260208120601f850160051c810160208610156147875750805b601f850160051c820191505b818110156147a657828155600101614793565b505050505050565b815167ffffffffffffffff8111156147c8576147c8613e95565b6147dc816147d68454614498565b84614760565b602080601f83116001811461482f57600084156147f95750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556147a6565b600085815260208120601f198616915b8281101561485e5788860151825594840194600190910190840161483f565b508582101561489a57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000826148b9576148b961465a565b500490565b600082198211156148d1576148d161451a565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff8316602082015260606040820152600061490b6060830184613e00565b9594505050505056fea2646970667358221220515451c0c1677c209ae6a20bafd437788cca076cb2ea51a63d02a471ee2f757764736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102c85760003560e01c80638da5cb5b1161017b578063cfa8ed47116100d8578063e7a7ed021161008c578063eaeb077b11610071578063eaeb077b14610687578063f2fde38b1461069a578063f7552761146106ad57600080fd5b8063e7a7ed0214610637578063e8bf92ed1461066757600080fd5b8063d8d1091b116100bd578063d8d1091b146105ef578063d8f54db014610602578063dbc169761461062f57600080fd5b8063cfa8ed47146105a3578063d02103ca146105cf57600080fd5b8063b02286c01161012f578063b6b0b09711610114578063b6b0b09714610558578063c3fd0f9c1461057d578063c89e42df1461059057600080fd5b8063b02286c01461052f578063b4d63f581461053857600080fd5b8063a3c573eb11610160578063a3c573eb146104f1578063ab9fc5ef14610511578063adc879e91461051b57600080fd5b80638da5cb5b146104cb57806399f5634e146104e957600080fd5b8063542028d5116102295780637152facf116101dd5780637fcb3653116101c25780637fcb36531461049157806381df7d3f146104a55780638c4a0af7146104b857600080fd5b80637152facf14610476578063798470571461048957600080fd5b80636b8616ce1161020e5780636b8616ce1461043b5780636ff512cc1461045b578063715018a61461046e57600080fd5b8063542028d51461042057806355b925e61461042857600080fd5b806327eb6c0f11610280578063423fa85611610265578063423fa856146103aa57806345605267146103ca5780635392c5e0146103f257600080fd5b806327eb6c0f146103525780633c1582671461039757600080fd5b806319d8ac61116102b157806319d8ac61146103085780631c1083e2146103355780632072f6c51461034a57600080fd5b8063107bf28c146102cd57806315064c96146102eb575b600080fd5b6102d56106bc565b6040516102e29190613e2c565b60405180910390f35b6065546102f89060ff1681565b60405190151581526020016102e2565b60685461031c9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102e2565b610348610343366004613e78565b61074a565b005b610348610856565b6070546103729073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e2565b6103486103a5366004613fed565b610907565b60685461031c9068010000000000000000900467ffffffffffffffff1681565b60685461031c90700100000000000000000000000000000000900467ffffffffffffffff1681565b610412610400366004614104565b606b6020526000908152604090205481565b6040519081526020016102e2565b6102d5611297565b610348610436366004614136565b6112a4565b610412610449366004614104565b60666020526000908152604090205481565b610348610469366004613e78565b61186d565b610348611987565b6102d56104843660046141b9565b611999565b610412611bd0565b60695461031c9067ffffffffffffffff1681565b6103486104b3366004614214565b611c4a565b6103486104c636600461430e565b611fa3565b60335473ffffffffffffffffffffffffffffffffffffffff16610372565b6104126120bd565b6071546103729073ffffffffffffffffffffffffffffffffffffffff1681565b61031c62093a8081565b606e5461031c9067ffffffffffffffff1681565b61041261ea6081565b610412610546366004614104565b60676020526000908152604090205481565b60655461037290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b61034861058b366004614136565b6121ee565b61034861059e36600461432b565b612838565b6069546103729068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103729073ffffffffffffffffffffffffffffffffffffffff1681565b6103486105fd366004614360565b61290d565b6069546102f8907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610348612fb2565b60685461031c907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103729073ffffffffffffffffffffffffffffffffffffffff1681565b610348610695366004614453565b613141565b6103486106a8366004613e78565b613641565b61041267016345785d8a000081565b606f80546106c990614498565b80601f01602080910402602001604051908101604052809291908181526020018280546106f590614498565b80156107425780601f1061071757610100808354040283529160200191610742565b820191906000526020600020905b81548152906001019060200180831161072557829003601f168201915b505050505081565b60705473ffffffffffffffffffffffffffffffffffffffff1633146107dc5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff16156108f55760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6108fd6136de565b610905613745565b565b60655460ff16156109a65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610a3f5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b805180610ada5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015611088576000878281518110610b4057610b406144eb565b602002602001015190506000816060015167ffffffffffffffff161115610d595783610b6b81614549565b945050600081600001518051906020012082602001518360600151604051602001610bce93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610c9b5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610d535760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016107d3565b50610ef3565b60208101511580610e085750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610dc29160040190815260200190565b6020604051808303816000875af1158015610de1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e059190614570565b15155b610e7a5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016107d3565b80515161ea6011610ef35760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016107d3565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610f29575042816040015167ffffffffffffffff1611155b610fc15760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061106a90614549565b9550508060400151955050808061108090614589565b915050610b24565b5060685467ffffffffffffffff78010000000000000000000000000000000000000000000000009091048116908316111561112b5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016107d3565b60685460009061115990700100000000000000000000000000000000900467ffffffffffffffff16846145c1565b61116d9067ffffffffffffffff16876145ea565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061124a33306112248467016345785d8a0000614601565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169291906137cf565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d80546106c990614498565b60655460ff16156113435760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60695467ffffffffffffffff90811690881611156113ef5760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016107d3565b60695467ffffffffffffffff9081169087161161149a5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b602052604090205461154c5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a4016107d3565b600061155a88888888611999565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161158f919061463e565b602060405180830381855afa1580156115ac573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906115cf9190614570565b6115d99190614689565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91611643918991899189919060040161469d565b602060405180830381865afa158015611660573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116849190614717565b6116f65760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016107d3565b6069546117549033906117139067ffffffffffffffff168b6145c1565b67ffffffffffffffff166117256120bd565b61172f9190614601565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16919061388d565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b15801561180957600080fd5b505af115801561181d573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146119065760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161084b565b61198f6136de565b61090560006138e8565b67ffffffffffffffff8085166000818152606760205260408082205493871682529020546060929115806119cc57508115155b611a645760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b80611afd5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec01604051602081830303815290604052925050505b949350505050565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691611c1f917801000000000000000000000000000000000000000000000000909104166001614734565b611c2991906145c1565b611c459067ffffffffffffffff16670de0b6b3a7640000614601565b905090565b600054610100900460ff1615808015611c6a5750600054600160ff909116105b80611c845750303b158015611c84575060005460ff166001145b611cf65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107d3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611d5457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d611e9387826147ae565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f611ed485826147ae565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556070805492851692909116919091179055611f3261395f565b8015611f9557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461203c5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061084b90831515815260200190565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612134573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121589190614570565b60695460685491925060009167ffffffffffffffff918216916801000000000000000082048116916121bd91700100000000000000000000000000000000820481169178010000000000000000000000000000000000000000000000009004166145c1565b6121c79190614734565b6121d191906145c1565b67ffffffffffffffff1690506121e781836148aa565b9250505090565b60655460ff161561228d5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b8567ffffffffffffffff168767ffffffffffffffff161061233c5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a4016107d3565b60695467ffffffffffffffff908116908716111561240e5760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c4016107d3565b67ffffffffffffffff87166000908152606b60205260409020546124c05760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a4016107d3565b67ffffffffffffffff86166000908152606b60205260409020546125725760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a4016107d3565b600061258088888888611999565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516125b5919061463e565b602060405180830381855afa1580156125d2573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906125f59190614570565b6125ff9190614689565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91612669918991899189919060040161469d565b602060405180830381865afa158015612686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126aa9190614717565b61271c5760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f460000000060648201526084016107d3565b67ffffffffffffffff88166000908152606b60205260409020548690036127d15760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a4016107d3565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a161282d613745565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146128d15760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d3565b606d6128dd82826147ae565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161084b9190613e2c565b60655460ff16156129ac5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612a6f5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b805180612b0a5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b60685467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612b559184917001000000000000000000000000000000009004166148be565b1115612bc95760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016107d3565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b84811015612ee2576000868281518110612c2957612c296144eb565b602002602001015190508380612c3e90614549565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114612d5f5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016107d3565b612d6a6001886145ea565b8303612e28574262093a808360400151612d849190614734565b67ffffffffffffffff161115612e285760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016107d3565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612eca90614549565b96505050508080612eda90614589565b915050612c0d565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff1661302a5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b60705473ffffffffffffffffffffffffffffffffffffffff1633146130b75760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561312157600080fd5b505af1158015613135573d6000803e3d6000fd5b505050506109056139e5565b60655460ff16156131e05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146132a35760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d3565b60006132ad611bd0565b9050818111156133255760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016107d3565b61ea6083511061339d5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016107d3565b6065546133c790610100900473ffffffffffffffffffffffffffffffffffffffff163330846137cf565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345b9190614570565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff1690601861349583614549565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161350e93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260669093529120553233036135de57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261363b565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613632939291906148d6565b60405180910390a25b50505050565b6136496136de565b73ffffffffffffffffffffffffffffffffffffffff81166136d25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107d3565b6136db816138e8565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109055760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d3565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156137af57600080fd5b505af11580156137c3573d6000803e3d6000fd5b50505050610905613ab0565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261363b9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613ba5565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526138e39084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401613829565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166139dc5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107d3565b610905336138e8565b60655460ff16613a5d5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff1615613b4f5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d3565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6000613c07826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613c979092919063ffffffff16565b8051909150156138e35780806020019051810190613c259190614717565b6138e35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107d3565b6060611bc88484600085856000808673ffffffffffffffffffffffffffffffffffffffff168587604051613ccb919061463e565b60006040518083038185875af1925050503d8060008114613d08576040519150601f19603f3d011682016040523d82523d6000602084013e613d0d565b606091505b5091509150613d1e87838387613d29565b979650505050505050565b60608315613da5578251600003613d9e5773ffffffffffffffffffffffffffffffffffffffff85163b613d9e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107d3565b5081611bc8565b611bc88383815115613dba5781518083602001fd5b8060405162461bcd60e51b81526004016107d39190613e2c565b60005b83811015613def578181015183820152602001613dd7565b8381111561363b5750506000910152565b60008151808452613e18816020860160208601613dd4565b601f01601f19169290920160200192915050565b602081526000613e3f6020830184613e00565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146136db57600080fd5b8035613e7381613e46565b919050565b600060208284031215613e8a57600080fd5b8135613e3f81613e46565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613ee757613ee7613e95565b60405290565b6040516060810167ffffffffffffffff81118282101715613ee757613ee7613e95565b604051601f8201601f1916810167ffffffffffffffff81118282101715613f3957613f39613e95565b604052919050565b600067ffffffffffffffff821115613f5b57613f5b613e95565b5060051b60200190565b600082601f830112613f7657600080fd5b813567ffffffffffffffff811115613f9057613f90613e95565b613fa36020601f19601f84011601613f10565b818152846020838601011115613fb857600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613e7357600080fd5b6000602080838503121561400057600080fd5b823567ffffffffffffffff8082111561401857600080fd5b818501915085601f83011261402c57600080fd5b813561403f61403a82613f41565b613f10565b81815260059190911b8301840190848101908883111561405e57600080fd5b8585015b838110156140f75780358581111561407a5760008081fd5b86016080818c03601f19018113156140925760008081fd5b61409a613ec4565b89830135888111156140ac5760008081fd5b6140ba8e8c83870101613f65565b8252506040808401358b83015260606140d4818601613fd5565b828401526140e3848601613fd5565b908301525085525050918601918601614062565b5098975050505050505050565b60006020828403121561411657600080fd5b613e3f82613fd5565b806040810183101561413057600080fd5b92915050565b6000806000806000806000610180888a03121561415257600080fd5b61415b88613fd5565b965061416960208901613fd5565b955060408801359450606088013593506141868960808a0161411f565b925061014088018981111561419a57600080fd5b60c0890192506141aa8a8261411f565b91505092959891949750929550565b600080600080608085870312156141cf57600080fd5b6141d885613fd5565b93506141e660208601613fd5565b93969395505050506040820135916060013590565b80151581146136db57600080fd5b8035613e73816141fb565b60008060008060008060008060008060006101608c8e03121561423657600080fd5b61423f8c613e68565b9a5061424d60208d01613e68565b995061425b60408d01613e68565b985060608c0135975061427060808d01613e68565b965061427e60a08d01614209565b955067ffffffffffffffff8060c08e0135111561429a57600080fd5b6142aa8e60c08f01358f01613f65565b95506142b860e08e01613fd5565b9450806101008e013511156142cc57600080fd5b506142de8d6101008e01358e01613f65565b92506142ed6101208d01613e68565b91506142fc6101408d01613e68565b90509295989b509295989b9093969950565b60006020828403121561432057600080fd5b8135613e3f816141fb565b60006020828403121561433d57600080fd5b813567ffffffffffffffff81111561435457600080fd5b611bc884828501613f65565b6000602080838503121561437357600080fd5b823567ffffffffffffffff8082111561438b57600080fd5b818501915085601f83011261439f57600080fd5b81356143ad61403a82613f41565b81815260059190911b830184019084810190888311156143cc57600080fd5b8585015b838110156140f7578035858111156143e85760008081fd5b86016060818c03601f19018113156144005760008081fd5b614408613eed565b898301358881111561441a5760008081fd5b6144288e8c83870101613f65565b8252506040808401358b830152614440838501613fd5565b90820152855250509186019186016143d0565b6000806040838503121561446657600080fd5b823567ffffffffffffffff81111561447d57600080fd5b61448985828601613f65565b95602094909401359450505050565b600181811c908216806144ac57607f821691505b6020821081036144e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036145665761456661451a565b6001019392505050565b60006020828403121561458257600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036145ba576145ba61451a565b5060010190565b600067ffffffffffffffff838116908316818110156145e2576145e261451a565b039392505050565b6000828210156145fc576145fc61451a565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146395761463961451a565b500290565b60008251614650818460208701613dd4565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826146985761469861465a565b500690565b61012081016040808784376000838201818152879190815b60028110156146d5578484833790840182815292840192906001016146b5565b5050828760c0870137610100850181815286935091505b600181101561470b5782518252602092830192909101906001016146ec565b50505095945050505050565b60006020828403121561472957600080fd5b8151613e3f816141fb565b600067ffffffffffffffff8083168185168083038211156147575761475761451a565b01949350505050565b601f8211156138e357600081815260208120601f850160051c810160208610156147875750805b601f850160051c820191505b818110156147a657828155600101614793565b505050505050565b815167ffffffffffffffff8111156147c8576147c8613e95565b6147dc816147d68454614498565b84614760565b602080601f83116001811461482f57600084156147f95750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556147a6565b600085815260208120601f198616915b8281101561485e5788860151825594840194600190910190840161483f565b508582101561489a57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000826148b9576148b961465a565b500490565b600082198211156148d1576148d161451a565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff8316602082015260606040820152600061490b6060830184613e00565b9594505050505056fea2646970667358221220515451c0c1677c209ae6a20bafd437788cca076cb2ea51a63d02a471ee2f757764736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5061494d806100206000396000f3fe608060405234801561001057600080fd5b50600436106102c85760003560e01c80638da5cb5b1161017b578063cfa8ed47116100d8578063e7a7ed021161008c578063eaeb077b11610071578063eaeb077b14610688578063f2fde38b1461069b578063f7552761146106ae57600080fd5b8063e7a7ed0214610638578063e8bf92ed1461066857600080fd5b8063d8d1091b116100bd578063d8d1091b146105f0578063d8f54db014610603578063dbc169761461063057600080fd5b8063cfa8ed47146105a4578063d02103ca146105d057600080fd5b8063b02286c01161012f578063b6b0b09711610114578063b6b0b09714610559578063c3fd0f9c1461057e578063c89e42df1461059157600080fd5b8063b02286c01461052f578063b4d63f581461053957600080fd5b8063a3c573eb11610160578063a3c573eb146104f1578063ab9fc5ef14610511578063adc879e91461051b57600080fd5b80638da5cb5b146104cb57806399f5634e146104e957600080fd5b8063542028d5116102295780637152facf116101dd5780637fcb3653116101c25780637fcb36531461049157806381df7d3f146104a55780638c4a0af7146104b857600080fd5b80637152facf14610476578063798470571461048957600080fd5b80636b8616ce1161020e5780636b8616ce1461043b5780636ff512cc1461045b578063715018a61461046e57600080fd5b8063542028d51461042057806355b925e61461042857600080fd5b806327eb6c0f11610280578063423fa85611610265578063423fa856146103aa57806345605267146103ca5780635392c5e0146103f257600080fd5b806327eb6c0f146103525780633c1582671461039757600080fd5b806319d8ac61116102b157806319d8ac61146103085780631c1083e2146103355780632072f6c51461034a57600080fd5b8063107bf28c146102cd57806315064c96146102eb575b600080fd5b6102d56106bd565b6040516102e29190613e2f565b60405180910390f35b6065546102f89060ff1681565b60405190151581526020016102e2565b60685461031c9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102e2565b610348610343366004613e7b565b61074b565b005b610348610857565b6070546103729073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e2565b6103486103a5366004613ff0565b610908565b60685461031c9068010000000000000000900467ffffffffffffffff1681565b60685461031c90700100000000000000000000000000000000900467ffffffffffffffff1681565b610412610400366004614107565b606b6020526000908152604090205481565b6040519081526020016102e2565b6102d5611299565b610348610436366004614139565b6112a6565b610412610449366004614107565b60666020526000908152604090205481565b610348610469366004613e7b565b61186f565b610348611989565b6102d56104843660046141bc565b61199b565b610412611bd2565b60695461031c9067ffffffffffffffff1681565b6103486104b3366004614217565b611c4c565b6103486104c6366004614311565b611fa5565b60335473ffffffffffffffffffffffffffffffffffffffff16610372565b6104126120bf565b6071546103729073ffffffffffffffffffffffffffffffffffffffff1681565b61031c62093a8081565b606e5461031c9067ffffffffffffffff1681565b610412620493e081565b610412610547366004614107565b60676020526000908152604090205481565b60655461037290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b61034861058c366004614139565b6121f0565b61034861059f36600461432e565b61283a565b6069546103729068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103729073ffffffffffffffffffffffffffffffffffffffff1681565b6103486105fe366004614363565b61290f565b6069546102f8907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610348612fb4565b60685461031c907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103729073ffffffffffffffffffffffffffffffffffffffff1681565b610348610696366004614456565b613143565b6103486106a9366004613e7b565b613644565b61041267016345785d8a000081565b606f80546106ca9061449b565b80601f01602080910402602001604051908101604052809291908181526020018280546106f69061449b565b80156107435780601f1061071857610100808354040283529160200191610743565b820191906000526020600020905b81548152906001019060200180831161072657829003601f168201915b505050505081565b60705473ffffffffffffffffffffffffffffffffffffffff1633146107dd5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff16156108f65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b6108fe6136e1565b610906613748565b565b60655460ff16156109a75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610a405760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d4565b805180610adb5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b8581101561108a576000878281518110610b4157610b416144ee565b602002602001015190506000816060015167ffffffffffffffff161115610d5a5783610b6c8161454c565b945050600081600001518051906020012082602001518360600151604051602001610bcf93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610c9c5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610d545760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016107d4565b50610ef5565b60208101511580610e095750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610dc39160040190815260200190565b6020604051808303816000875af1158015610de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e069190614573565b15155b610e7b5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016107d4565b805151620493e011610ef55760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016107d4565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610f2b575042816040015167ffffffffffffffff1611155b610fc35760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061106c9061454c565b955050806040015195505080806110829061458c565b915050610b25565b5060685467ffffffffffffffff78010000000000000000000000000000000000000000000000009091048116908316111561112d5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016107d4565b60685460009061115b90700100000000000000000000000000000000900467ffffffffffffffff16846145c4565b61116f9067ffffffffffffffff16876145ed565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061124c33306112268467016345785d8a0000614604565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169291906137d2565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d80546106ca9061449b565b60655460ff16156113455760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b60695467ffffffffffffffff90811690881611156113f15760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016107d4565b60695467ffffffffffffffff9081169087161161149c5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016107d4565b67ffffffffffffffff87166000908152606b602052604090205461154e5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a4016107d4565b600061155c8888888861199b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516115919190614641565b602060405180830381855afa1580156115ae573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906115d19190614573565b6115db919061468c565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d9161164591899189918991906004016146a0565b602060405180830381865afa158015611662573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611686919061471a565b6116f85760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016107d4565b6069546117569033906117159067ffffffffffffffff168b6145c4565b67ffffffffffffffff166117276120bf565b6117319190614604565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169190613890565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b15801561180b57600080fd5b505af115801561181f573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146119085760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d4565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161084c565b6119916136e1565b61090660006138eb565b67ffffffffffffffff8085166000818152606760205260408082205493871682529020546060929115806119ce57508115155b611a665760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b80611aff5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec01604051602081830303815290604052925050505b949350505050565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691611c21917801000000000000000000000000000000000000000000000000909104166001614737565b611c2b91906145c4565b611c479067ffffffffffffffff16670de0b6b3a7640000614604565b905090565b600054610100900460ff1615808015611c6c5750600054600160ff909116105b80611c865750303b158015611c86575060005460ff166001145b611cf85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107d4565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611d5657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d611e9587826147b1565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f611ed685826147b1565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556070805492851692909116919091179055611f34613962565b8015611f9757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461203e5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d4565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061084c90831515815260200190565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612136573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215a9190614573565b60695460685491925060009167ffffffffffffffff918216916801000000000000000082048116916121bf91700100000000000000000000000000000000820481169178010000000000000000000000000000000000000000000000009004166145c4565b6121c99190614737565b6121d391906145c4565b67ffffffffffffffff1690506121e981836148ad565b9250505090565b60655460ff161561228f5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b8567ffffffffffffffff168767ffffffffffffffff161061233e5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a4016107d4565b60695467ffffffffffffffff90811690871611156124105760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c4016107d4565b67ffffffffffffffff87166000908152606b60205260409020546124c25760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a4016107d4565b67ffffffffffffffff86166000908152606b60205260409020546125745760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a4016107d4565b60006125828888888861199b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516125b79190614641565b602060405180830381855afa1580156125d4573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906125f79190614573565b612601919061468c565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d9161266b91899189918991906004016146a0565b602060405180830381865afa158015612688573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ac919061471a565b61271e5760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f460000000060648201526084016107d4565b67ffffffffffffffff88166000908152606b60205260409020548690036127d35760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a4016107d4565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a161282f613748565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146128d35760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d4565b606d6128df82826147b1565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161084c9190613e2f565b60655460ff16156129ae5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612a715760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d4565b805180612b0c5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b60685467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612b579184917001000000000000000000000000000000009004166148c1565b1115612bcb5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016107d4565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b84811015612ee4576000868281518110612c2b57612c2b6144ee565b602002602001015190508380612c409061454c565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114612d615760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016107d4565b612d6c6001886145ed565b8303612e2a574262093a808360400151612d869190614737565b67ffffffffffffffff161115612e2a5760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016107d4565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612ecc9061454c565b96505050508080612edc9061458c565b915050612c0f565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff1661302c5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d4565b60705473ffffffffffffffffffffffffffffffffffffffff1633146130b95760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016107d4565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561312357600080fd5b505af1158015613137573d6000803e3d6000fd5b505050506109066139e8565b60655460ff16156131e25760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146132a55760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d4565b60006132af611bd2565b9050818111156133275760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016107d4565b620493e08351106133a05760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016107d4565b6065546133ca90610100900473ffffffffffffffffffffffffffffffffffffffff163330846137d2565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa15801561343a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345e9190614573565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff169060186134988361454c565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161351193929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260669093529120553233036135e157606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261363e565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613635939291906148d9565b60405180910390a25b50505050565b61364c6136e1565b73ffffffffffffffffffffffffffffffffffffffff81166136d55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107d4565b6136de816138eb565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109065760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d4565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156137b257600080fd5b505af11580156137c6573d6000803e3d6000fd5b50505050610906613ab3565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261363e9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613ba8565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526138e69084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161382c565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166139df5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107d4565b610906336138eb565b60655460ff16613a605760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d4565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff1615613b525760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6000613c0a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613c9a9092919063ffffffff16565b8051909150156138e65780806020019051810190613c28919061471a565b6138e65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107d4565b6060611bca8484600085856000808673ffffffffffffffffffffffffffffffffffffffff168587604051613cce9190614641565b60006040518083038185875af1925050503d8060008114613d0b576040519150601f19603f3d011682016040523d82523d6000602084013e613d10565b606091505b5091509150613d2187838387613d2c565b979650505050505050565b60608315613da8578251600003613da15773ffffffffffffffffffffffffffffffffffffffff85163b613da15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107d4565b5081611bca565b611bca8383815115613dbd5781518083602001fd5b8060405162461bcd60e51b81526004016107d49190613e2f565b60005b83811015613df2578181015183820152602001613dda565b8381111561363e5750506000910152565b60008151808452613e1b816020860160208601613dd7565b601f01601f19169290920160200192915050565b602081526000613e426020830184613e03565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146136de57600080fd5b8035613e7681613e49565b919050565b600060208284031215613e8d57600080fd5b8135613e4281613e49565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613eea57613eea613e98565b60405290565b6040516060810167ffffffffffffffff81118282101715613eea57613eea613e98565b604051601f8201601f1916810167ffffffffffffffff81118282101715613f3c57613f3c613e98565b604052919050565b600067ffffffffffffffff821115613f5e57613f5e613e98565b5060051b60200190565b600082601f830112613f7957600080fd5b813567ffffffffffffffff811115613f9357613f93613e98565b613fa66020601f19601f84011601613f13565b818152846020838601011115613fbb57600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613e7657600080fd5b6000602080838503121561400357600080fd5b823567ffffffffffffffff8082111561401b57600080fd5b818501915085601f83011261402f57600080fd5b813561404261403d82613f44565b613f13565b81815260059190911b8301840190848101908883111561406157600080fd5b8585015b838110156140fa5780358581111561407d5760008081fd5b86016080818c03601f19018113156140955760008081fd5b61409d613ec7565b89830135888111156140af5760008081fd5b6140bd8e8c83870101613f68565b8252506040808401358b83015260606140d7818601613fd8565b828401526140e6848601613fd8565b908301525085525050918601918601614065565b5098975050505050505050565b60006020828403121561411957600080fd5b613e4282613fd8565b806040810183101561413357600080fd5b92915050565b6000806000806000806000610180888a03121561415557600080fd5b61415e88613fd8565b965061416c60208901613fd8565b955060408801359450606088013593506141898960808a01614122565b925061014088018981111561419d57600080fd5b60c0890192506141ad8a82614122565b91505092959891949750929550565b600080600080608085870312156141d257600080fd5b6141db85613fd8565b93506141e960208601613fd8565b93969395505050506040820135916060013590565b80151581146136de57600080fd5b8035613e76816141fe565b60008060008060008060008060008060006101608c8e03121561423957600080fd5b6142428c613e6b565b9a5061425060208d01613e6b565b995061425e60408d01613e6b565b985060608c0135975061427360808d01613e6b565b965061428160a08d0161420c565b955067ffffffffffffffff8060c08e0135111561429d57600080fd5b6142ad8e60c08f01358f01613f68565b95506142bb60e08e01613fd8565b9450806101008e013511156142cf57600080fd5b506142e18d6101008e01358e01613f68565b92506142f06101208d01613e6b565b91506142ff6101408d01613e6b565b90509295989b509295989b9093969950565b60006020828403121561432357600080fd5b8135613e42816141fe565b60006020828403121561434057600080fd5b813567ffffffffffffffff81111561435757600080fd5b611bca84828501613f68565b6000602080838503121561437657600080fd5b823567ffffffffffffffff8082111561438e57600080fd5b818501915085601f8301126143a257600080fd5b81356143b061403d82613f44565b81815260059190911b830184019084810190888311156143cf57600080fd5b8585015b838110156140fa578035858111156143eb5760008081fd5b86016060818c03601f19018113156144035760008081fd5b61440b613ef0565b898301358881111561441d5760008081fd5b61442b8e8c83870101613f68565b8252506040808401358b830152614443838501613fd8565b90820152855250509186019186016143d3565b6000806040838503121561446957600080fd5b823567ffffffffffffffff81111561448057600080fd5b61448c85828601613f68565b95602094909401359450505050565b600181811c908216806144af57607f821691505b6020821081036144e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036145695761456961451d565b6001019392505050565b60006020828403121561458557600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036145bd576145bd61451d565b5060010190565b600067ffffffffffffffff838116908316818110156145e5576145e561451d565b039392505050565b6000828210156145ff576145ff61451d565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561463c5761463c61451d565b500290565b60008251614653818460208701613dd7565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261469b5761469b61465d565b500690565b61012081016040808784376000838201818152879190815b60028110156146d8578484833790840182815292840192906001016146b8565b5050828760c0870137610100850181815286935091505b600181101561470e5782518252602092830192909101906001016146ef565b50505095945050505050565b60006020828403121561472c57600080fd5b8151613e42816141fe565b600067ffffffffffffffff80831681851680830382111561475a5761475a61451d565b01949350505050565b601f8211156138e657600081815260208120601f850160051c8101602086101561478a5750805b601f850160051c820191505b818110156147a957828155600101614796565b505050505050565b815167ffffffffffffffff8111156147cb576147cb613e98565b6147df816147d9845461449b565b84614763565b602080601f83116001811461483257600084156147fc5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556147a9565b600085815260208120601f198616915b8281101561486157888601518255948401946001909101908401614842565b508582101561489d57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000826148bc576148bc61465d565b500490565b600082198211156148d4576148d461451d565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff8316602082015260606040820152600061490e6060830184613e03565b9594505050505056fea264697066735822122072b5c002080ce472b107b854ad5fe9f57820bd639501f2433bac96aff76973df64736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102c85760003560e01c80638da5cb5b1161017b578063cfa8ed47116100d8578063e7a7ed021161008c578063eaeb077b11610071578063eaeb077b14610688578063f2fde38b1461069b578063f7552761146106ae57600080fd5b8063e7a7ed0214610638578063e8bf92ed1461066857600080fd5b8063d8d1091b116100bd578063d8d1091b146105f0578063d8f54db014610603578063dbc169761461063057600080fd5b8063cfa8ed47146105a4578063d02103ca146105d057600080fd5b8063b02286c01161012f578063b6b0b09711610114578063b6b0b09714610559578063c3fd0f9c1461057e578063c89e42df1461059157600080fd5b8063b02286c01461052f578063b4d63f581461053957600080fd5b8063a3c573eb11610160578063a3c573eb146104f1578063ab9fc5ef14610511578063adc879e91461051b57600080fd5b80638da5cb5b146104cb57806399f5634e146104e957600080fd5b8063542028d5116102295780637152facf116101dd5780637fcb3653116101c25780637fcb36531461049157806381df7d3f146104a55780638c4a0af7146104b857600080fd5b80637152facf14610476578063798470571461048957600080fd5b80636b8616ce1161020e5780636b8616ce1461043b5780636ff512cc1461045b578063715018a61461046e57600080fd5b8063542028d51461042057806355b925e61461042857600080fd5b806327eb6c0f11610280578063423fa85611610265578063423fa856146103aa57806345605267146103ca5780635392c5e0146103f257600080fd5b806327eb6c0f146103525780633c1582671461039757600080fd5b806319d8ac61116102b157806319d8ac61146103085780631c1083e2146103355780632072f6c51461034a57600080fd5b8063107bf28c146102cd57806315064c96146102eb575b600080fd5b6102d56106bd565b6040516102e29190613e2f565b60405180910390f35b6065546102f89060ff1681565b60405190151581526020016102e2565b60685461031c9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102e2565b610348610343366004613e7b565b61074b565b005b610348610857565b6070546103729073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e2565b6103486103a5366004613ff0565b610908565b60685461031c9068010000000000000000900467ffffffffffffffff1681565b60685461031c90700100000000000000000000000000000000900467ffffffffffffffff1681565b610412610400366004614107565b606b6020526000908152604090205481565b6040519081526020016102e2565b6102d5611299565b610348610436366004614139565b6112a6565b610412610449366004614107565b60666020526000908152604090205481565b610348610469366004613e7b565b61186f565b610348611989565b6102d56104843660046141bc565b61199b565b610412611bd2565b60695461031c9067ffffffffffffffff1681565b6103486104b3366004614217565b611c4c565b6103486104c6366004614311565b611fa5565b60335473ffffffffffffffffffffffffffffffffffffffff16610372565b6104126120bf565b6071546103729073ffffffffffffffffffffffffffffffffffffffff1681565b61031c62093a8081565b606e5461031c9067ffffffffffffffff1681565b610412620493e081565b610412610547366004614107565b60676020526000908152604090205481565b60655461037290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b61034861058c366004614139565b6121f0565b61034861059f36600461432e565b61283a565b6069546103729068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103729073ffffffffffffffffffffffffffffffffffffffff1681565b6103486105fe366004614363565b61290f565b6069546102f8907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610348612fb4565b60685461031c907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103729073ffffffffffffffffffffffffffffffffffffffff1681565b610348610696366004614456565b613143565b6103486106a9366004613e7b565b613644565b61041267016345785d8a000081565b606f80546106ca9061449b565b80601f01602080910402602001604051908101604052809291908181526020018280546106f69061449b565b80156107435780601f1061071857610100808354040283529160200191610743565b820191906000526020600020905b81548152906001019060200180831161072657829003601f168201915b505050505081565b60705473ffffffffffffffffffffffffffffffffffffffff1633146107dd5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff16156108f65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b6108fe6136e1565b610906613748565b565b60655460ff16156109a75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610a405760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d4565b805180610adb5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b8581101561108a576000878281518110610b4157610b416144ee565b602002602001015190506000816060015167ffffffffffffffff161115610d5a5783610b6c8161454c565b945050600081600001518051906020012082602001518360600151604051602001610bcf93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610c9c5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610d545760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016107d4565b50610ef5565b60208101511580610e095750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610dc39160040190815260200190565b6020604051808303816000875af1158015610de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e069190614573565b15155b610e7b5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016107d4565b805151620493e011610ef55760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016107d4565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610f2b575042816040015167ffffffffffffffff1611155b610fc35760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061106c9061454c565b955050806040015195505080806110829061458c565b915050610b25565b5060685467ffffffffffffffff78010000000000000000000000000000000000000000000000009091048116908316111561112d5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016107d4565b60685460009061115b90700100000000000000000000000000000000900467ffffffffffffffff16846145c4565b61116f9067ffffffffffffffff16876145ed565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061124c33306112268467016345785d8a0000614604565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169291906137d2565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d80546106ca9061449b565b60655460ff16156113455760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b60695467ffffffffffffffff90811690881611156113f15760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016107d4565b60695467ffffffffffffffff9081169087161161149c5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016107d4565b67ffffffffffffffff87166000908152606b602052604090205461154e5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a4016107d4565b600061155c8888888861199b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516115919190614641565b602060405180830381855afa1580156115ae573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906115d19190614573565b6115db919061468c565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d9161164591899189918991906004016146a0565b602060405180830381865afa158015611662573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611686919061471a565b6116f85760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016107d4565b6069546117569033906117159067ffffffffffffffff168b6145c4565b67ffffffffffffffff166117276120bf565b6117319190614604565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169190613890565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b15801561180b57600080fd5b505af115801561181f573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146119085760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d4565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161084c565b6119916136e1565b61090660006138eb565b67ffffffffffffffff8085166000818152606760205260408082205493871682529020546060929115806119ce57508115155b611a665760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b80611aff5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec01604051602081830303815290604052925050505b949350505050565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691611c21917801000000000000000000000000000000000000000000000000909104166001614737565b611c2b91906145c4565b611c479067ffffffffffffffff16670de0b6b3a7640000614604565b905090565b600054610100900460ff1615808015611c6c5750600054600160ff909116105b80611c865750303b158015611c86575060005460ff166001145b611cf85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107d4565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611d5657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d611e9587826147b1565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f611ed685826147b1565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556070805492851692909116919091179055611f34613962565b8015611f9757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461203e5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d4565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061084c90831515815260200190565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612136573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215a9190614573565b60695460685491925060009167ffffffffffffffff918216916801000000000000000082048116916121bf91700100000000000000000000000000000000820481169178010000000000000000000000000000000000000000000000009004166145c4565b6121c99190614737565b6121d391906145c4565b67ffffffffffffffff1690506121e981836148ad565b9250505090565b60655460ff161561228f5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b8567ffffffffffffffff168767ffffffffffffffff161061233e5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a4016107d4565b60695467ffffffffffffffff90811690871611156124105760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c4016107d4565b67ffffffffffffffff87166000908152606b60205260409020546124c25760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a4016107d4565b67ffffffffffffffff86166000908152606b60205260409020546125745760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a4016107d4565b60006125828888888861199b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516125b79190614641565b602060405180830381855afa1580156125d4573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906125f79190614573565b612601919061468c565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d9161266b91899189918991906004016146a0565b602060405180830381865afa158015612688573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ac919061471a565b61271e5760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f460000000060648201526084016107d4565b67ffffffffffffffff88166000908152606b60205260409020548690036127d35760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a4016107d4565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a161282f613748565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146128d35760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d4565b606d6128df82826147b1565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161084c9190613e2f565b60655460ff16156129ae5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612a715760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d4565b805180612b0c5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b60685467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612b579184917001000000000000000000000000000000009004166148c1565b1115612bcb5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016107d4565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b84811015612ee4576000868281518110612c2b57612c2b6144ee565b602002602001015190508380612c409061454c565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114612d615760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016107d4565b612d6c6001886145ed565b8303612e2a574262093a808360400151612d869190614737565b67ffffffffffffffff161115612e2a5760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016107d4565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612ecc9061454c565b96505050508080612edc9061458c565b915050612c0f565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff1661302c5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d4565b60705473ffffffffffffffffffffffffffffffffffffffff1633146130b95760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016107d4565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561312357600080fd5b505af1158015613137573d6000803e3d6000fd5b505050506109066139e8565b60655460ff16156131e25760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146132a55760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d4565b60006132af611bd2565b9050818111156133275760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016107d4565b620493e08351106133a05760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016107d4565b6065546133ca90610100900473ffffffffffffffffffffffffffffffffffffffff163330846137d2565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa15801561343a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345e9190614573565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff169060186134988361454c565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161351193929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260669093529120553233036135e157606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261363e565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613635939291906148d9565b60405180910390a25b50505050565b61364c6136e1565b73ffffffffffffffffffffffffffffffffffffffff81166136d55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107d4565b6136de816138eb565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109065760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d4565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156137b257600080fd5b505af11580156137c6573d6000803e3d6000fd5b50505050610906613ab3565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261363e9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613ba8565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526138e69084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161382c565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166139df5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107d4565b610906336138eb565b60655460ff16613a605760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d4565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff1615613b525760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6000613c0a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613c9a9092919063ffffffff16565b8051909150156138e65780806020019051810190613c28919061471a565b6138e65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107d4565b6060611bca8484600085856000808673ffffffffffffffffffffffffffffffffffffffff168587604051613cce9190614641565b60006040518083038185875af1925050503d8060008114613d0b576040519150601f19603f3d011682016040523d82523d6000602084013e613d10565b606091505b5091509150613d2187838387613d2c565b979650505050505050565b60608315613da8578251600003613da15773ffffffffffffffffffffffffffffffffffffffff85163b613da15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107d4565b5081611bca565b611bca8383815115613dbd5781518083602001fd5b8060405162461bcd60e51b81526004016107d49190613e2f565b60005b83811015613df2578181015183820152602001613dda565b8381111561363e5750506000910152565b60008151808452613e1b816020860160208601613dd7565b601f01601f19169290920160200192915050565b602081526000613e426020830184613e03565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146136de57600080fd5b8035613e7681613e49565b919050565b600060208284031215613e8d57600080fd5b8135613e4281613e49565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613eea57613eea613e98565b60405290565b6040516060810167ffffffffffffffff81118282101715613eea57613eea613e98565b604051601f8201601f1916810167ffffffffffffffff81118282101715613f3c57613f3c613e98565b604052919050565b600067ffffffffffffffff821115613f5e57613f5e613e98565b5060051b60200190565b600082601f830112613f7957600080fd5b813567ffffffffffffffff811115613f9357613f93613e98565b613fa66020601f19601f84011601613f13565b818152846020838601011115613fbb57600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613e7657600080fd5b6000602080838503121561400357600080fd5b823567ffffffffffffffff8082111561401b57600080fd5b818501915085601f83011261402f57600080fd5b813561404261403d82613f44565b613f13565b81815260059190911b8301840190848101908883111561406157600080fd5b8585015b838110156140fa5780358581111561407d5760008081fd5b86016080818c03601f19018113156140955760008081fd5b61409d613ec7565b89830135888111156140af5760008081fd5b6140bd8e8c83870101613f68565b8252506040808401358b83015260606140d7818601613fd8565b828401526140e6848601613fd8565b908301525085525050918601918601614065565b5098975050505050505050565b60006020828403121561411957600080fd5b613e4282613fd8565b806040810183101561413357600080fd5b92915050565b6000806000806000806000610180888a03121561415557600080fd5b61415e88613fd8565b965061416c60208901613fd8565b955060408801359450606088013593506141898960808a01614122565b925061014088018981111561419d57600080fd5b60c0890192506141ad8a82614122565b91505092959891949750929550565b600080600080608085870312156141d257600080fd5b6141db85613fd8565b93506141e960208601613fd8565b93969395505050506040820135916060013590565b80151581146136de57600080fd5b8035613e76816141fe565b60008060008060008060008060008060006101608c8e03121561423957600080fd5b6142428c613e6b565b9a5061425060208d01613e6b565b995061425e60408d01613e6b565b985060608c0135975061427360808d01613e6b565b965061428160a08d0161420c565b955067ffffffffffffffff8060c08e0135111561429d57600080fd5b6142ad8e60c08f01358f01613f68565b95506142bb60e08e01613fd8565b9450806101008e013511156142cf57600080fd5b506142e18d6101008e01358e01613f68565b92506142f06101208d01613e6b565b91506142ff6101408d01613e6b565b90509295989b509295989b9093969950565b60006020828403121561432357600080fd5b8135613e42816141fe565b60006020828403121561434057600080fd5b813567ffffffffffffffff81111561435757600080fd5b611bca84828501613f68565b6000602080838503121561437657600080fd5b823567ffffffffffffffff8082111561438e57600080fd5b818501915085601f8301126143a257600080fd5b81356143b061403d82613f44565b81815260059190911b830184019084810190888311156143cf57600080fd5b8585015b838110156140fa578035858111156143eb5760008081fd5b86016060818c03601f19018113156144035760008081fd5b61440b613ef0565b898301358881111561441d5760008081fd5b61442b8e8c83870101613f68565b8252506040808401358b830152614443838501613fd8565b90820152855250509186019186016143d3565b6000806040838503121561446957600080fd5b823567ffffffffffffffff81111561448057600080fd5b61448c85828601613f68565b95602094909401359450505050565b600181811c908216806144af57607f821691505b6020821081036144e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036145695761456961451d565b6001019392505050565b60006020828403121561458557600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036145bd576145bd61451d565b5060010190565b600067ffffffffffffffff838116908316818110156145e5576145e561451d565b039392505050565b6000828210156145ff576145ff61451d565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561463c5761463c61451d565b500290565b60008251614653818460208701613dd7565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261469b5761469b61465d565b500690565b61012081016040808784376000838201818152879190815b60028110156146d8578484833790840182815292840192906001016146b8565b5050828760c0870137610100850181815286935091505b600181101561470e5782518252602092830192909101906001016146ef565b50505095945050505050565b60006020828403121561472c57600080fd5b8151613e42816141fe565b600067ffffffffffffffff80831681851680830382111561475a5761475a61451d565b01949350505050565b601f8211156138e657600081815260208120601f850160051c8101602086101561478a5750805b601f850160051c820191505b818110156147a957828155600101614796565b505050505050565b815167ffffffffffffffff8111156147cb576147cb613e98565b6147df816147d9845461449b565b84614763565b602080601f83116001811461483257600084156147fc5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556147a9565b600085815260208120601f198616915b8281101561486157888601518255948401946001909101908401614842565b508582101561489d57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000826148bc576148bc61465d565b500490565b600082198211156148d4576148d461451d565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff8316602082015260606040820152600061490e6060830184613e03565b9594505050505056fea264697066735822122072b5c002080ce472b107b854ad5fe9f57820bd639501f2433bac96aff76973df64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/ProofOfEfficiencyMock.json b/compiled-contracts/ProofOfEfficiencyMock.json index 43afc74d1..bf5840c8c 100644 --- a/compiled-contracts/ProofOfEfficiencyMock.json +++ b/compiled-contracts/ProofOfEfficiencyMock.json @@ -1100,8 +1100,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506151f8806100206000396000f3fe608060405234801561001057600080fd5b506004361061032b5760003560e01c80638da5cb5b116101b2578063c89e42df116100f9578063dbc16976116100a2578063eaeb077b1161007c578063eaeb077b14610810578063f2fde38b14610823578063f755276114610836578063fe16564f1461084557600080fd5b8063dbc16976146107b8578063e7a7ed02146107c0578063e8bf92ed146107f057600080fd5b8063d0ae98dd116100d3578063d0ae98dd14610765578063d8d1091b14610778578063d8f54db01461078b57600080fd5b8063c89e42df14610706578063cfa8ed4714610719578063d02103ca1461074557600080fd5b8063adc879e91161015b578063b6b0b09711610135578063b6b0b097146106bb578063c0cad302146106e0578063c3fd0f9c146106f357600080fd5b8063adc879e91461067e578063b02286c014610692578063b4d63f581461069b57600080fd5b80639b7967601161018c5780639b79676014610641578063a3c573eb14610654578063ab9fc5ef1461067457600080fd5b80638da5cb5b1461060857806396dc3d391461062657806399f5634e1461063957600080fd5b80635437988d116102765780637152facf1161021f5780637fcb3653116101f95780637fcb3653146105ce57806381df7d3f146105e25780638c4a0af7146105f557600080fd5b80637152facf146105a0578063748608de146105b357806379847057146105c657600080fd5b80636b8616ce116102505780636b8616ce146105655780636ff512cc14610585578063715018a61461059857600080fd5b80635437988d1461049e57806355b925e6146104b1578063574f649e146104c457600080fd5b806327eb6c0f116102d857806345605267116102b257806345605267146104405780635392c5e014610468578063542028d51461049657600080fd5b806327eb6c0f146103c85780633c1582671461040d578063423fa8561461042057600080fd5b80631a26da14116103095780631a26da14146103985780631c1083e2146103ad5780632072f6c5146103c057600080fd5b8063107bf28c1461033057806315064c961461034e57806319d8ac611461036b575b600080fd5b610338610858565b604051610345919061460e565b60405180910390f35b60655461035b9060ff1681565b6040519015158152602001610345565b60685461037f9067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610345565b6103ab6103a6366004614645565b6108e6565b005b6103ab6103bb36600461469c565b61090b565b6103ab610a17565b6070546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610345565b6103ab61041b3660046147f9565b610ac8565b60685461037f9068010000000000000000900467ffffffffffffffff1681565b60685461037f90700100000000000000000000000000000000900467ffffffffffffffff1681565b610488610476366004614910565b606b6020526000908152604090205481565b604051908152602001610345565b610338611458565b6103ab6104ac36600461469c565b611465565b6103ab6104bf366004614942565b6114b4565b6104886104d23660046149c5565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b610488610573366004614910565b60666020526000908152604090205481565b6103ab61059336600461469c565b611a7d565b6103ab611b97565b6103386105ae366004614a3b565b611ba9565b6103ab6105c1366004614942565b611de0565b610488612049565b60695461037f9067ffffffffffffffff1681565b6103ab6105f0366004614a96565b6120c3565b6103ab610603366004614b90565b61241c565b60335473ffffffffffffffffffffffffffffffffffffffff166103e8565b6103ab610634366004614910565b612536565b610488612579565b6103ab61064f366004614910565b6126aa565b6071546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b61037f62093a8081565b606e5461037f9067ffffffffffffffff1681565b61048861ea6081565b6104886106a9366004614910565b60676020526000908152604090205481565b6065546103e890610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6103ab6106ee366004614bad565b6126f9565b6103ab610701366004614942565b612711565b6103ab610714366004614bad565b612d5b565b6069546103e89068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b610488610773366004614a3b565b612e30565b6103ab610786366004614be2565b6130dc565b60695461035b907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b6103ab613781565b60685461037f907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b6103ab61081e366004614cd5565b613910565b6103ab61083136600461469c565b613e10565b61048867016345785d8a000081565b6103ab610853366004614d1a565b613ead565b606f805461086590614d46565b80601f016020809104026020016040519081016040528092919081815260200182805461089190614d46565b80156108de5780601f106108b3576101008083540402835291602001916108de565b820191906000526020600020905b8154815290600101906020018083116108c157829003601f168201915b505050505081565b6108ee613ed0565b67ffffffffffffffff909116600090815260676020526040902055565b60705473ffffffffffffffffffffffffffffffffffffffff16331461099d5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff1615610ab65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b610abe613ed0565b610ac6613f37565b565b60655460ff1615610b675760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610c005760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b805180610c9b5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015611249576000878281518110610d0157610d01614d99565b602002602001015190506000816060015167ffffffffffffffff161115610f1a5783610d2c81614df7565b945050600081600001518051906020012082602001518360600151604051602001610d8f93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610e5c5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610f145760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610994565b506110b4565b60208101511580610fc95750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610f839160040190815260200190565b6020604051808303816000875af1158015610fa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc69190614e1e565b15155b61103b5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610994565b80515161ea60116110b45760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610994565b8567ffffffffffffffff16816040015167ffffffffffffffff16101580156110ea575042816040015167ffffffffffffffff1611155b6111825760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061122b90614df7565b9550508060400151955050808061124190614e37565b915050610ce5565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156112ec5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610994565b60685460009061131a90700100000000000000000000000000000000900467ffffffffffffffff1684614e6f565b61132e9067ffffffffffffffff1687614e98565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061140b33306113e58467016345785d8a0000614eaf565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613fc1565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d805461086590614d46565b61146d613ed0565b606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60655460ff16156115535760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff90811690881611156115ff5760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a401610994565b60695467ffffffffffffffff908116908716116116aa5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b602052604090205461175c5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a401610994565b600061176a88888888611ba9565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161179f9190614eec565b602060405180830381855afa1580156117bc573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906117df9190614e1e565b6117e99190614f37565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916118539189918991899190600401614f4b565b602060405180830381865afa158015611870573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118949190614fc5565b6119065760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610994565b6069546119649033906119239067ffffffffffffffff168b614e6f565b67ffffffffffffffff16611935612579565b61193f9190614eaf565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16919061407f565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b158015611a1957600080fd5b505af1158015611a2d573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611b165760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610a0c565b611b9f613ed0565b610ac660006140da565b67ffffffffffffffff808516600081815260676020526040808220549387168252902054606092911580611bdc57508115155b611c745760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b80611d0d5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec01604051602081830303815290604052925050505b949350505050565b611de8613ed0565b60695467ffffffffffffffff9081169088161115611e945760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff90811690871611611f3f5760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610994565b67ffffffffffffffff80881660009081526067602052604080822054928916825290205481611fd65760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b806119645760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691612098917801000000000000000000000000000000000000000000000000909104166001614fe2565b6120a29190614e6f565b6120be9067ffffffffffffffff16670de0b6b3a7640000614eaf565b905090565b600054610100900460ff16158080156120e35750600054600160ff909116105b806120fd5750303b1580156120fd575060005460ff166001145b61216f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610994565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156121cd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d61230c878261505c565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f61234d858261505c565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560708054928516929091169190911790556123ab614151565b801561240e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146124b55760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a0c90831515815260200190565b61253e613ed0565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156125f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126149190614e1e565b60695460685491925060009167ffffffffffffffff918216916801000000000000000082048116916126799170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614e6f565b6126839190614fe2565b61268d9190614e6f565b67ffffffffffffffff1690506126a38183615158565b9250505090565b6126b2613ed0565b6068805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b612701613ed0565b606f61270d828261505c565b5050565b60655460ff16156127b05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8567ffffffffffffffff168767ffffffffffffffff161061285f5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a401610994565b60695467ffffffffffffffff90811690871611156129315760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c401610994565b67ffffffffffffffff87166000908152606b60205260409020546129e35760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a401610994565b67ffffffffffffffff86166000908152606b6020526040902054612a955760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a401610994565b6000612aa388888888611ba9565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051612ad89190614eec565b602060405180830381855afa158015612af5573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612b189190614e1e565b612b229190614f37565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91612b8c9189918991899190600401614f4b565b602060405180830381865afa158015612ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bcd9190614fc5565b612c3f5760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f46000000006064820152608401610994565b67ffffffffffffffff88166000908152606b6020526040902054869003612cf45760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a401610994565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a1612d50613f37565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612df45760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606d612e00828261505c565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a0c919061460e565b60695460009067ffffffffffffffff868116911614612edd5760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8467ffffffffffffffff168467ffffffffffffffff1611612f8c5760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a401610994565b60685467ffffffffffffffff68010000000000000000909104811690851611156130445760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b600061305286868686611ba9565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516130879190614eec565b602060405180830381855afa1580156130a4573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906130c79190614e1e565b6130d19190614f37565b979650505050505050565b60655460ff161561317b5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461323e5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b8051806132d95760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60685467ffffffffffffffff7801000000000000000000000000000000000000000000000000820481169161332491849170010000000000000000000000000000000090041661516c565b11156133985760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610994565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b848110156136b15760008682815181106133f8576133f8614d99565b60200260200101519050838061340d90614df7565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff881660009081526066909352912054909150811461352e5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610994565b613539600188614e98565b83036135f7574262093a8083604001516135539190614fe2565b67ffffffffffffffff1611156135f75760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610994565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209350858061369990614df7565b965050505080806136a990614e37565b9150506133dc565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166137f95760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b60705473ffffffffffffffffffffffffffffffffffffffff1633146138865760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c0000006064820152608401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156138f057600080fd5b505af1158015613904573d6000803e3d6000fd5b50505050610ac66141d7565b60655460ff16156139af5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114613a725760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b6000613a7c612049565b905081811115613af45760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610994565b61ea60835110613b6c5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610994565b606554613b9690610100900473ffffffffffffffffffffffffffffffffffffffff16333084613fc1565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613c06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2a9190614e1e565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613c6483614df7565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505083805190602001208142604051602001613cdd93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526066909352912055323303613dad57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613e0a565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613e0193929190615184565b60405180910390a25b50505050565b613e18613ed0565b73ffffffffffffffffffffffffffffffffffffffff8116613ea15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610994565b613eaa816140da565b50565b613eb5613ed0565b67ffffffffffffffff166000908152606b6020526040902055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ac65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613fa157600080fd5b505af1158015613fb5573d6000803e3d6000fd5b50505050610ac66142a2565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052613e0a9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152614397565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526140d59084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161401b565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166141ce5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610994565b610ac6336140da565b60655460ff1661424f5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff16156143415760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60006143f9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166144899092919063ffffffff16565b8051909150156140d557808060200190518101906144179190614fc5565b6140d55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610994565b6060611dd88484600085856000808673ffffffffffffffffffffffffffffffffffffffff1685876040516144bd9190614eec565b60006040518083038185875af1925050503d80600081146144fa576040519150601f19603f3d011682016040523d82523d6000602084013e6144ff565b606091505b50915091506130d187838387606083156145875782516000036145805773ffffffffffffffffffffffffffffffffffffffff85163b6145805760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610994565b5081611dd8565b611dd8838381511561459c5781518083602001fd5b8060405162461bcd60e51b8152600401610994919061460e565b60005b838110156145d15781810151838201526020016145b9565b83811115613e0a5750506000910152565b600081518084526145fa8160208601602086016145b6565b601f01601f19169290920160200192915050565b60208152600061462160208301846145e2565b9392505050565b803567ffffffffffffffff8116811461464057600080fd5b919050565b6000806040838503121561465857600080fd5b61466183614628565b946020939093013593505050565b73ffffffffffffffffffffffffffffffffffffffff81168114613eaa57600080fd5b80356146408161466f565b6000602082840312156146ae57600080fd5b81356146218161466f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171561470b5761470b6146b9565b60405290565b6040516060810167ffffffffffffffff8111828210171561470b5761470b6146b9565b604051601f8201601f1916810167ffffffffffffffff8111828210171561475d5761475d6146b9565b604052919050565b600067ffffffffffffffff82111561477f5761477f6146b9565b5060051b60200190565b600082601f83011261479a57600080fd5b813567ffffffffffffffff8111156147b4576147b46146b9565b6147c76020601f19601f84011601614734565b8181528460208386010111156147dc57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561480c57600080fd5b823567ffffffffffffffff8082111561482457600080fd5b818501915085601f83011261483857600080fd5b813561484b61484682614765565b614734565b81815260059190911b8301840190848101908883111561486a57600080fd5b8585015b83811015614903578035858111156148865760008081fd5b86016080818c03601f190181131561489e5760008081fd5b6148a66146e8565b89830135888111156148b85760008081fd5b6148c68e8c83870101614789565b8252506040808401358b83015260606148e0818601614628565b828401526148ef848601614628565b90830152508552505091860191860161486e565b5098975050505050505050565b60006020828403121561492257600080fd5b61462182614628565b806040810183101561493c57600080fd5b92915050565b6000806000806000806000610180888a03121561495e57600080fd5b61496788614628565b965061497560208901614628565b955060408801359450606088013593506149928960808a0161492b565b92506101408801898111156149a657600080fd5b60c0890192506149b68a8261492b565b91505092959891949750929550565b600080600080600060a086880312156149dd57600080fd5b85359450602086013567ffffffffffffffff8111156149fb57600080fd5b614a0788828901614789565b94505060408601359250614a1d60608701614628565b91506080860135614a2d8161466f565b809150509295509295909350565b60008060008060808587031215614a5157600080fd5b614a5a85614628565b9350614a6860208601614628565b93969395505050506040820135916060013590565b8015158114613eaa57600080fd5b803561464081614a7d565b60008060008060008060008060008060006101608c8e031215614ab857600080fd5b614ac18c614691565b9a50614acf60208d01614691565b9950614add60408d01614691565b985060608c01359750614af260808d01614691565b9650614b0060a08d01614a8b565b955067ffffffffffffffff8060c08e01351115614b1c57600080fd5b614b2c8e60c08f01358f01614789565b9550614b3a60e08e01614628565b9450806101008e01351115614b4e57600080fd5b50614b608d6101008e01358e01614789565b9250614b6f6101208d01614691565b9150614b7e6101408d01614691565b90509295989b509295989b9093969950565b600060208284031215614ba257600080fd5b813561462181614a7d565b600060208284031215614bbf57600080fd5b813567ffffffffffffffff811115614bd657600080fd5b611dd884828501614789565b60006020808385031215614bf557600080fd5b823567ffffffffffffffff80821115614c0d57600080fd5b818501915085601f830112614c2157600080fd5b8135614c2f61484682614765565b81815260059190911b83018401908481019088831115614c4e57600080fd5b8585015b8381101561490357803585811115614c6a5760008081fd5b86016060818c03601f1901811315614c825760008081fd5b614c8a614711565b8983013588811115614c9c5760008081fd5b614caa8e8c83870101614789565b8252506040808401358b830152614cc2838501614628565b9082015285525050918601918601614c52565b60008060408385031215614ce857600080fd5b823567ffffffffffffffff811115614cff57600080fd5b614d0b85828601614789565b95602094909401359450505050565b60008060408385031215614d2d57600080fd5b82359150614d3d60208401614628565b90509250929050565b600181811c90821680614d5a57607f821691505b602082108103614d93577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614e1457614e14614dc8565b6001019392505050565b600060208284031215614e3057600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e6857614e68614dc8565b5060010190565b600067ffffffffffffffff83811690831681811015614e9057614e90614dc8565b039392505050565b600082821015614eaa57614eaa614dc8565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ee757614ee7614dc8565b500290565b60008251614efe8184602087016145b6565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614f4657614f46614f08565b500690565b61012081016040808784376000838201818152879190815b6002811015614f8357848483379084018281529284019290600101614f63565b5050828760c0870137610100850181815286935091505b6001811015614fb9578251825260209283019290910190600101614f9a565b50505095945050505050565b600060208284031215614fd757600080fd5b815161462181614a7d565b600067ffffffffffffffff80831681851680830382111561500557615005614dc8565b01949350505050565b601f8211156140d557600081815260208120601f850160051c810160208610156150355750805b601f850160051c820191505b8181101561505457828155600101615041565b505050505050565b815167ffffffffffffffff811115615076576150766146b9565b61508a816150848454614d46565b8461500e565b602080601f8311600181146150dd57600084156150a75750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555615054565b600085815260208120601f198616915b8281101561510c578886015182559484019460019091019084016150ed565b508582101561514857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008261516757615167614f08565b500490565b6000821982111561517f5761517f614dc8565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006151b960608301846145e2565b9594505050505056fea26469706673582212206e111003f6bc21779ab20dd8da4b7e3ffaa2d3c12921bb3c57a89659abd5c04564736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061032b5760003560e01c80638da5cb5b116101b2578063c89e42df116100f9578063dbc16976116100a2578063eaeb077b1161007c578063eaeb077b14610810578063f2fde38b14610823578063f755276114610836578063fe16564f1461084557600080fd5b8063dbc16976146107b8578063e7a7ed02146107c0578063e8bf92ed146107f057600080fd5b8063d0ae98dd116100d3578063d0ae98dd14610765578063d8d1091b14610778578063d8f54db01461078b57600080fd5b8063c89e42df14610706578063cfa8ed4714610719578063d02103ca1461074557600080fd5b8063adc879e91161015b578063b6b0b09711610135578063b6b0b097146106bb578063c0cad302146106e0578063c3fd0f9c146106f357600080fd5b8063adc879e91461067e578063b02286c014610692578063b4d63f581461069b57600080fd5b80639b7967601161018c5780639b79676014610641578063a3c573eb14610654578063ab9fc5ef1461067457600080fd5b80638da5cb5b1461060857806396dc3d391461062657806399f5634e1461063957600080fd5b80635437988d116102765780637152facf1161021f5780637fcb3653116101f95780637fcb3653146105ce57806381df7d3f146105e25780638c4a0af7146105f557600080fd5b80637152facf146105a0578063748608de146105b357806379847057146105c657600080fd5b80636b8616ce116102505780636b8616ce146105655780636ff512cc14610585578063715018a61461059857600080fd5b80635437988d1461049e57806355b925e6146104b1578063574f649e146104c457600080fd5b806327eb6c0f116102d857806345605267116102b257806345605267146104405780635392c5e014610468578063542028d51461049657600080fd5b806327eb6c0f146103c85780633c1582671461040d578063423fa8561461042057600080fd5b80631a26da14116103095780631a26da14146103985780631c1083e2146103ad5780632072f6c5146103c057600080fd5b8063107bf28c1461033057806315064c961461034e57806319d8ac611461036b575b600080fd5b610338610858565b604051610345919061460e565b60405180910390f35b60655461035b9060ff1681565b6040519015158152602001610345565b60685461037f9067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610345565b6103ab6103a6366004614645565b6108e6565b005b6103ab6103bb36600461469c565b61090b565b6103ab610a17565b6070546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610345565b6103ab61041b3660046147f9565b610ac8565b60685461037f9068010000000000000000900467ffffffffffffffff1681565b60685461037f90700100000000000000000000000000000000900467ffffffffffffffff1681565b610488610476366004614910565b606b6020526000908152604090205481565b604051908152602001610345565b610338611458565b6103ab6104ac36600461469c565b611465565b6103ab6104bf366004614942565b6114b4565b6104886104d23660046149c5565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b610488610573366004614910565b60666020526000908152604090205481565b6103ab61059336600461469c565b611a7d565b6103ab611b97565b6103386105ae366004614a3b565b611ba9565b6103ab6105c1366004614942565b611de0565b610488612049565b60695461037f9067ffffffffffffffff1681565b6103ab6105f0366004614a96565b6120c3565b6103ab610603366004614b90565b61241c565b60335473ffffffffffffffffffffffffffffffffffffffff166103e8565b6103ab610634366004614910565b612536565b610488612579565b6103ab61064f366004614910565b6126aa565b6071546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b61037f62093a8081565b606e5461037f9067ffffffffffffffff1681565b61048861ea6081565b6104886106a9366004614910565b60676020526000908152604090205481565b6065546103e890610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6103ab6106ee366004614bad565b6126f9565b6103ab610701366004614942565b612711565b6103ab610714366004614bad565b612d5b565b6069546103e89068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b610488610773366004614a3b565b612e30565b6103ab610786366004614be2565b6130dc565b60695461035b907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b6103ab613781565b60685461037f907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b6103ab61081e366004614cd5565b613910565b6103ab61083136600461469c565b613e10565b61048867016345785d8a000081565b6103ab610853366004614d1a565b613ead565b606f805461086590614d46565b80601f016020809104026020016040519081016040528092919081815260200182805461089190614d46565b80156108de5780601f106108b3576101008083540402835291602001916108de565b820191906000526020600020905b8154815290600101906020018083116108c157829003601f168201915b505050505081565b6108ee613ed0565b67ffffffffffffffff909116600090815260676020526040902055565b60705473ffffffffffffffffffffffffffffffffffffffff16331461099d5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff1615610ab65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b610abe613ed0565b610ac6613f37565b565b60655460ff1615610b675760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610c005760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b805180610c9b5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b85811015611249576000878281518110610d0157610d01614d99565b602002602001015190506000816060015167ffffffffffffffff161115610f1a5783610d2c81614df7565b945050600081600001518051906020012082602001518360600151604051602001610d8f93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610e5c5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610f145760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610994565b506110b4565b60208101511580610fc95750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610f839160040190815260200190565b6020604051808303816000875af1158015610fa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc69190614e1e565b15155b61103b5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610994565b80515161ea60116110b45760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610994565b8567ffffffffffffffff16816040015167ffffffffffffffff16101580156110ea575042816040015167ffffffffffffffff1611155b6111825760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061122b90614df7565b9550508060400151955050808061124190614e37565b915050610ce5565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156112ec5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610994565b60685460009061131a90700100000000000000000000000000000000900467ffffffffffffffff1684614e6f565b61132e9067ffffffffffffffff1687614e98565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061140b33306113e58467016345785d8a0000614eaf565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613fc1565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d805461086590614d46565b61146d613ed0565b606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60655460ff16156115535760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff90811690881611156115ff5760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a401610994565b60695467ffffffffffffffff908116908716116116aa5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b602052604090205461175c5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a401610994565b600061176a88888888611ba9565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161179f9190614eec565b602060405180830381855afa1580156117bc573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906117df9190614e1e565b6117e99190614f37565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916118539189918991899190600401614f4b565b602060405180830381865afa158015611870573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118949190614fc5565b6119065760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610994565b6069546119649033906119239067ffffffffffffffff168b614e6f565b67ffffffffffffffff16611935612579565b61193f9190614eaf565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16919061407f565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b158015611a1957600080fd5b505af1158015611a2d573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611b165760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610a0c565b611b9f613ed0565b610ac660006140da565b67ffffffffffffffff808516600081815260676020526040808220549387168252902054606092911580611bdc57508115155b611c745760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b80611d0d5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610994565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec01604051602081830303815290604052925050505b949350505050565b611de8613ed0565b60695467ffffffffffffffff9081169088161115611e945760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a401610994565b60695467ffffffffffffffff90811690871611611f3f5760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610994565b67ffffffffffffffff80881660009081526067602052604080822054928916825290205481611fd65760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b806119645760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610994565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691612098917801000000000000000000000000000000000000000000000000909104166001614fe2565b6120a29190614e6f565b6120be9067ffffffffffffffff16670de0b6b3a7640000614eaf565b905090565b600054610100900460ff16158080156120e35750600054600160ff909116105b806120fd5750303b1580156120fd575060005460ff166001145b61216f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610994565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156121cd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d61230c878261505c565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f61234d858261505c565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560708054928516929091169190911790556123ab614151565b801561240e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146124b55760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a0c90831515815260200190565b61253e613ed0565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156125f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126149190614e1e565b60695460685491925060009167ffffffffffffffff918216916801000000000000000082048116916126799170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614e6f565b6126839190614fe2565b61268d9190614e6f565b67ffffffffffffffff1690506126a38183615158565b9250505090565b6126b2613ed0565b6068805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b612701613ed0565b606f61270d828261505c565b5050565b60655460ff16156127b05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8567ffffffffffffffff168767ffffffffffffffff161061285f5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a401610994565b60695467ffffffffffffffff90811690871611156129315760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c401610994565b67ffffffffffffffff87166000908152606b60205260409020546129e35760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a401610994565b67ffffffffffffffff86166000908152606b6020526040902054612a955760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a401610994565b6000612aa388888888611ba9565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051612ad89190614eec565b602060405180830381855afa158015612af5573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612b189190614e1e565b612b229190614f37565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91612b8c9189918991899190600401614f4b565b602060405180830381865afa158015612ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bcd9190614fc5565b612c3f5760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f46000000006064820152608401610994565b67ffffffffffffffff88166000908152606b6020526040902054869003612cf45760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a401610994565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a1612d50613f37565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612df45760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610994565b606d612e00828261505c565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a0c919061460e565b60695460009067ffffffffffffffff868116911614612edd5760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b8467ffffffffffffffff168467ffffffffffffffff1611612f8c5760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a401610994565b60685467ffffffffffffffff68010000000000000000909104811690851611156130445760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b600061305286868686611ba9565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516130879190614eec565b602060405180830381855afa1580156130a4573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906130c79190614e1e565b6130d19190614f37565b979650505050505050565b60655460ff161561317b5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461323e5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b8051806132d95760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b60685467ffffffffffffffff7801000000000000000000000000000000000000000000000000820481169161332491849170010000000000000000000000000000000090041661516c565b11156133985760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610994565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b848110156136b15760008682815181106133f8576133f8614d99565b60200260200101519050838061340d90614df7565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff881660009081526066909352912054909150811461352e5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610994565b613539600188614e98565b83036135f7574262093a8083604001516135539190614fe2565b67ffffffffffffffff1611156135f75760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610994565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209350858061369990614df7565b965050505080806136a990614e37565b9150506133dc565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166137f95760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b60705473ffffffffffffffffffffffffffffffffffffffff1633146138865760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c0000006064820152608401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156138f057600080fd5b505af1158015613904573d6000803e3d6000fd5b50505050610ac66141d7565b60655460ff16156139af5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114613a725760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610994565b6000613a7c612049565b905081811115613af45760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610994565b61ea60835110613b6c5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610994565b606554613b9690610100900473ffffffffffffffffffffffffffffffffffffffff16333084613fc1565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613c06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2a9190614e1e565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613c6483614df7565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505083805190602001208142604051602001613cdd93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526066909352912055323303613dad57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613e0a565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613e0193929190615184565b60405180910390a25b50505050565b613e18613ed0565b73ffffffffffffffffffffffffffffffffffffffff8116613ea15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610994565b613eaa816140da565b50565b613eb5613ed0565b67ffffffffffffffff166000908152606b6020526040902055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ac65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610994565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613fa157600080fd5b505af1158015613fb5573d6000803e3d6000fd5b50505050610ac66142a2565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052613e0a9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152614397565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526140d59084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161401b565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166141ce5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610994565b610ac6336140da565b60655460ff1661424f5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff16156143415760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610994565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60006143f9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166144899092919063ffffffff16565b8051909150156140d557808060200190518101906144179190614fc5565b6140d55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610994565b6060611dd88484600085856000808673ffffffffffffffffffffffffffffffffffffffff1685876040516144bd9190614eec565b60006040518083038185875af1925050503d80600081146144fa576040519150601f19603f3d011682016040523d82523d6000602084013e6144ff565b606091505b50915091506130d187838387606083156145875782516000036145805773ffffffffffffffffffffffffffffffffffffffff85163b6145805760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610994565b5081611dd8565b611dd8838381511561459c5781518083602001fd5b8060405162461bcd60e51b8152600401610994919061460e565b60005b838110156145d15781810151838201526020016145b9565b83811115613e0a5750506000910152565b600081518084526145fa8160208601602086016145b6565b601f01601f19169290920160200192915050565b60208152600061462160208301846145e2565b9392505050565b803567ffffffffffffffff8116811461464057600080fd5b919050565b6000806040838503121561465857600080fd5b61466183614628565b946020939093013593505050565b73ffffffffffffffffffffffffffffffffffffffff81168114613eaa57600080fd5b80356146408161466f565b6000602082840312156146ae57600080fd5b81356146218161466f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171561470b5761470b6146b9565b60405290565b6040516060810167ffffffffffffffff8111828210171561470b5761470b6146b9565b604051601f8201601f1916810167ffffffffffffffff8111828210171561475d5761475d6146b9565b604052919050565b600067ffffffffffffffff82111561477f5761477f6146b9565b5060051b60200190565b600082601f83011261479a57600080fd5b813567ffffffffffffffff8111156147b4576147b46146b9565b6147c76020601f19601f84011601614734565b8181528460208386010111156147dc57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561480c57600080fd5b823567ffffffffffffffff8082111561482457600080fd5b818501915085601f83011261483857600080fd5b813561484b61484682614765565b614734565b81815260059190911b8301840190848101908883111561486a57600080fd5b8585015b83811015614903578035858111156148865760008081fd5b86016080818c03601f190181131561489e5760008081fd5b6148a66146e8565b89830135888111156148b85760008081fd5b6148c68e8c83870101614789565b8252506040808401358b83015260606148e0818601614628565b828401526148ef848601614628565b90830152508552505091860191860161486e565b5098975050505050505050565b60006020828403121561492257600080fd5b61462182614628565b806040810183101561493c57600080fd5b92915050565b6000806000806000806000610180888a03121561495e57600080fd5b61496788614628565b965061497560208901614628565b955060408801359450606088013593506149928960808a0161492b565b92506101408801898111156149a657600080fd5b60c0890192506149b68a8261492b565b91505092959891949750929550565b600080600080600060a086880312156149dd57600080fd5b85359450602086013567ffffffffffffffff8111156149fb57600080fd5b614a0788828901614789565b94505060408601359250614a1d60608701614628565b91506080860135614a2d8161466f565b809150509295509295909350565b60008060008060808587031215614a5157600080fd5b614a5a85614628565b9350614a6860208601614628565b93969395505050506040820135916060013590565b8015158114613eaa57600080fd5b803561464081614a7d565b60008060008060008060008060008060006101608c8e031215614ab857600080fd5b614ac18c614691565b9a50614acf60208d01614691565b9950614add60408d01614691565b985060608c01359750614af260808d01614691565b9650614b0060a08d01614a8b565b955067ffffffffffffffff8060c08e01351115614b1c57600080fd5b614b2c8e60c08f01358f01614789565b9550614b3a60e08e01614628565b9450806101008e01351115614b4e57600080fd5b50614b608d6101008e01358e01614789565b9250614b6f6101208d01614691565b9150614b7e6101408d01614691565b90509295989b509295989b9093969950565b600060208284031215614ba257600080fd5b813561462181614a7d565b600060208284031215614bbf57600080fd5b813567ffffffffffffffff811115614bd657600080fd5b611dd884828501614789565b60006020808385031215614bf557600080fd5b823567ffffffffffffffff80821115614c0d57600080fd5b818501915085601f830112614c2157600080fd5b8135614c2f61484682614765565b81815260059190911b83018401908481019088831115614c4e57600080fd5b8585015b8381101561490357803585811115614c6a5760008081fd5b86016060818c03601f1901811315614c825760008081fd5b614c8a614711565b8983013588811115614c9c5760008081fd5b614caa8e8c83870101614789565b8252506040808401358b830152614cc2838501614628565b9082015285525050918601918601614c52565b60008060408385031215614ce857600080fd5b823567ffffffffffffffff811115614cff57600080fd5b614d0b85828601614789565b95602094909401359450505050565b60008060408385031215614d2d57600080fd5b82359150614d3d60208401614628565b90509250929050565b600181811c90821680614d5a57607f821691505b602082108103614d93577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614e1457614e14614dc8565b6001019392505050565b600060208284031215614e3057600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e6857614e68614dc8565b5060010190565b600067ffffffffffffffff83811690831681811015614e9057614e90614dc8565b039392505050565b600082821015614eaa57614eaa614dc8565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ee757614ee7614dc8565b500290565b60008251614efe8184602087016145b6565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614f4657614f46614f08565b500690565b61012081016040808784376000838201818152879190815b6002811015614f8357848483379084018281529284019290600101614f63565b5050828760c0870137610100850181815286935091505b6001811015614fb9578251825260209283019290910190600101614f9a565b50505095945050505050565b600060208284031215614fd757600080fd5b815161462181614a7d565b600067ffffffffffffffff80831681851680830382111561500557615005614dc8565b01949350505050565b601f8211156140d557600081815260208120601f850160051c810160208610156150355750805b601f850160051c820191505b8181101561505457828155600101615041565b505050505050565b815167ffffffffffffffff811115615076576150766146b9565b61508a816150848454614d46565b8461500e565b602080601f8311600181146150dd57600084156150a75750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555615054565b600085815260208120601f198616915b8281101561510c578886015182559484019460019091019084016150ed565b508582101561514857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008261516757615167614f08565b500490565b6000821982111561517f5761517f614dc8565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006151b960608301846145e2565b9594505050505056fea26469706673582212206e111003f6bc21779ab20dd8da4b7e3ffaa2d3c12921bb3c57a89659abd5c04564736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506151fb806100206000396000f3fe608060405234801561001057600080fd5b506004361061032b5760003560e01c80638da5cb5b116101b2578063c89e42df116100f9578063dbc16976116100a2578063eaeb077b1161007c578063eaeb077b14610811578063f2fde38b14610824578063f755276114610837578063fe16564f1461084657600080fd5b8063dbc16976146107b9578063e7a7ed02146107c1578063e8bf92ed146107f157600080fd5b8063d0ae98dd116100d3578063d0ae98dd14610766578063d8d1091b14610779578063d8f54db01461078c57600080fd5b8063c89e42df14610707578063cfa8ed471461071a578063d02103ca1461074657600080fd5b8063adc879e91161015b578063b6b0b09711610135578063b6b0b097146106bc578063c0cad302146106e1578063c3fd0f9c146106f457600080fd5b8063adc879e91461067e578063b02286c014610692578063b4d63f581461069c57600080fd5b80639b7967601161018c5780639b79676014610641578063a3c573eb14610654578063ab9fc5ef1461067457600080fd5b80638da5cb5b1461060857806396dc3d391461062657806399f5634e1461063957600080fd5b80635437988d116102765780637152facf1161021f5780637fcb3653116101f95780637fcb3653146105ce57806381df7d3f146105e25780638c4a0af7146105f557600080fd5b80637152facf146105a0578063748608de146105b357806379847057146105c657600080fd5b80636b8616ce116102505780636b8616ce146105655780636ff512cc14610585578063715018a61461059857600080fd5b80635437988d1461049e57806355b925e6146104b1578063574f649e146104c457600080fd5b806327eb6c0f116102d857806345605267116102b257806345605267146104405780635392c5e014610468578063542028d51461049657600080fd5b806327eb6c0f146103c85780633c1582671461040d578063423fa8561461042057600080fd5b80631a26da14116103095780631a26da14146103985780631c1083e2146103ad5780632072f6c5146103c057600080fd5b8063107bf28c1461033057806315064c961461034e57806319d8ac611461036b575b600080fd5b610338610859565b6040516103459190614611565b60405180910390f35b60655461035b9060ff1681565b6040519015158152602001610345565b60685461037f9067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610345565b6103ab6103a6366004614648565b6108e7565b005b6103ab6103bb36600461469f565b61090c565b6103ab610a18565b6070546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610345565b6103ab61041b3660046147fc565b610ac9565b60685461037f9068010000000000000000900467ffffffffffffffff1681565b60685461037f90700100000000000000000000000000000000900467ffffffffffffffff1681565b610488610476366004614913565b606b6020526000908152604090205481565b604051908152602001610345565b61033861145a565b6103ab6104ac36600461469f565b611467565b6103ab6104bf366004614945565b6114b6565b6104886104d23660046149c8565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b610488610573366004614913565b60666020526000908152604090205481565b6103ab61059336600461469f565b611a7f565b6103ab611b99565b6103386105ae366004614a3e565b611bab565b6103ab6105c1366004614945565b611de2565b61048861204b565b60695461037f9067ffffffffffffffff1681565b6103ab6105f0366004614a99565b6120c5565b6103ab610603366004614b93565b61241e565b60335473ffffffffffffffffffffffffffffffffffffffff166103e8565b6103ab610634366004614913565b612538565b61048861257b565b6103ab61064f366004614913565b6126ac565b6071546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b61037f62093a8081565b606e5461037f9067ffffffffffffffff1681565b610488620493e081565b6104886106aa366004614913565b60676020526000908152604090205481565b6065546103e890610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6103ab6106ef366004614bb0565b6126fb565b6103ab610702366004614945565b612713565b6103ab610715366004614bb0565b612d5d565b6069546103e89068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b610488610774366004614a3e565b612e32565b6103ab610787366004614be5565b6130de565b60695461035b907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b6103ab613783565b60685461037f907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b6103ab61081f366004614cd8565b613912565b6103ab61083236600461469f565b613e13565b61048867016345785d8a000081565b6103ab610854366004614d1d565b613eb0565b606f805461086690614d49565b80601f016020809104026020016040519081016040528092919081815260200182805461089290614d49565b80156108df5780601f106108b4576101008083540402835291602001916108df565b820191906000526020600020905b8154815290600101906020018083116108c257829003601f168201915b505050505081565b6108ef613ed3565b67ffffffffffffffff909116600090815260676020526040902055565b60705473ffffffffffffffffffffffffffffffffffffffff16331461099e5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff1615610ab75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b610abf613ed3565b610ac7613f3a565b565b60655460ff1615610b685760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610c015760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610995565b805180610c9c5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b8581101561124b576000878281518110610d0257610d02614d9c565b602002602001015190506000816060015167ffffffffffffffff161115610f1b5783610d2d81614dfa565b945050600081600001518051906020012082602001518360600151604051602001610d9093929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610e5d5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610f155760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610995565b506110b6565b60208101511580610fca5750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610f849160040190815260200190565b6020604051808303816000875af1158015610fa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc79190614e21565b15155b61103c5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610995565b805151620493e0116110b65760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610995565b8567ffffffffffffffff16816040015167ffffffffffffffff16101580156110ec575042816040015167ffffffffffffffff1611155b6111845760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061122d90614dfa565b9550508060400151955050808061124390614e3a565b915050610ce6565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156112ee5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610995565b60685460009061131c90700100000000000000000000000000000000900467ffffffffffffffff1684614e72565b6113309067ffffffffffffffff1687614e9b565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061140d33306113e78467016345785d8a0000614eb2565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613fc4565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d805461086690614d49565b61146f613ed3565b606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60655460ff16156115555760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b60695467ffffffffffffffff90811690881611156116015760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a401610995565b60695467ffffffffffffffff908116908716116116ac5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a401610995565b67ffffffffffffffff87166000908152606b602052604090205461175e5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a401610995565b600061176c88888888611bab565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516117a19190614eef565b602060405180830381855afa1580156117be573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906117e19190614e21565b6117eb9190614f3a565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916118559189918991899190600401614f4e565b602060405180830381865afa158015611872573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118969190614fc8565b6119085760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610995565b6069546119669033906119259067ffffffffffffffff168b614e72565b67ffffffffffffffff1661193761257b565b6119419190614eb2565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169190614082565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b158015611a1b57600080fd5b505af1158015611a2f573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611b185760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610995565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610a0d565b611ba1613ed3565b610ac760006140dd565b67ffffffffffffffff808516600081815260676020526040808220549387168252902054606092911580611bde57508115155b611c765760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610995565b80611d0f5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610995565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec01604051602081830303815290604052925050505b949350505050565b611dea613ed3565b60695467ffffffffffffffff9081169088161115611e965760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a401610995565b60695467ffffffffffffffff90811690871611611f415760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610995565b67ffffffffffffffff80881660009081526067602052604080822054928916825290205481611fd85760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610995565b806119665760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610995565b60685460009067ffffffffffffffff700100000000000000000000000000000000820481169161209a917801000000000000000000000000000000000000000000000000909104166001614fe5565b6120a49190614e72565b6120c09067ffffffffffffffff16670de0b6b3a7640000614eb2565b905090565b600054610100900460ff16158080156120e55750600054600160ff909116105b806120ff5750303b1580156120ff575060005460ff166001145b6121715760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610995565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156121cf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d61230e878261505f565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f61234f858261505f565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560708054928516929091169190911790556123ad614154565b801561241057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146124b75760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610995565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a0d90831515815260200190565b612540613ed3565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156125f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126169190614e21565b60695460685491925060009167ffffffffffffffff9182169168010000000000000000820481169161267b9170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614e72565b6126859190614fe5565b61268f9190614e72565b67ffffffffffffffff1690506126a5818361515b565b9250505090565b6126b4613ed3565b6068805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b612703613ed3565b606f61270f828261505f565b5050565b60655460ff16156127b25760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b8567ffffffffffffffff168767ffffffffffffffff16106128615760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a401610995565b60695467ffffffffffffffff90811690871611156129335760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c401610995565b67ffffffffffffffff87166000908152606b60205260409020546129e55760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a401610995565b67ffffffffffffffff86166000908152606b6020526040902054612a975760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a401610995565b6000612aa588888888611bab565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051612ada9190614eef565b602060405180830381855afa158015612af7573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612b1a9190614e21565b612b249190614f3a565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91612b8e9189918991899190600401614f4e565b602060405180830381865afa158015612bab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bcf9190614fc8565b612c415760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f46000000006064820152608401610995565b67ffffffffffffffff88166000908152606b6020526040902054869003612cf65760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a401610995565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a1612d52613f3a565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612df65760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610995565b606d612e02828261505f565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a0d9190614611565b60695460009067ffffffffffffffff868116911614612edf5760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b8467ffffffffffffffff168467ffffffffffffffff1611612f8e5760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a401610995565b60685467ffffffffffffffff68010000000000000000909104811690851611156130465760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b600061305486868686611bab565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516130899190614eef565b602060405180830381855afa1580156130a6573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906130c99190614e21565b6130d39190614f3a565b979650505050505050565b60655460ff161561317d5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146132405760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610995565b8051806132db5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b60685467ffffffffffffffff7801000000000000000000000000000000000000000000000000820481169161332691849170010000000000000000000000000000000090041661516f565b111561339a5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610995565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b848110156136b35760008682815181106133fa576133fa614d9c565b60200260200101519050838061340f90614dfa565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff88166000908152606690935291205490915081146135305760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610995565b61353b600188614e9b565b83036135f9574262093a8083604001516135559190614fe5565b67ffffffffffffffff1611156135f95760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610995565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209350858061369b90614dfa565b965050505080806136ab90614e3a565b9150506133de565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166137fb5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610995565b60705473ffffffffffffffffffffffffffffffffffffffff1633146138885760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c0000006064820152608401610995565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156138f257600080fd5b505af1158015613906573d6000803e3d6000fd5b50505050610ac76141da565b60655460ff16156139b15760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114613a745760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610995565b6000613a7e61204b565b905081811115613af65760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610995565b620493e0835110613b6f5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610995565b606554613b9990610100900473ffffffffffffffffffffffffffffffffffffffff16333084613fc4565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613c09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2d9190614e21565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613c6783614dfa565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505083805190602001208142604051602001613ce093929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526066909352912055323303613db057606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613e0d565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613e0493929190615187565b60405180910390a25b50505050565b613e1b613ed3565b73ffffffffffffffffffffffffffffffffffffffff8116613ea45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610995565b613ead816140dd565b50565b613eb8613ed3565b67ffffffffffffffff166000908152606b6020526040902055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ac75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610995565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613fa457600080fd5b505af1158015613fb8573d6000803e3d6000fd5b50505050610ac76142a5565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052613e0d9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261439a565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526140d89084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161401e565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166141d15760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610995565b610ac7336140dd565b60655460ff166142525760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610995565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff16156143445760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60006143fc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661448c9092919063ffffffff16565b8051909150156140d8578080602001905181019061441a9190614fc8565b6140d85760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610995565b6060611dda8484600085856000808673ffffffffffffffffffffffffffffffffffffffff1685876040516144c09190614eef565b60006040518083038185875af1925050503d80600081146144fd576040519150601f19603f3d011682016040523d82523d6000602084013e614502565b606091505b50915091506130d3878383876060831561458a5782516000036145835773ffffffffffffffffffffffffffffffffffffffff85163b6145835760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610995565b5081611dda565b611dda838381511561459f5781518083602001fd5b8060405162461bcd60e51b81526004016109959190614611565b60005b838110156145d45781810151838201526020016145bc565b83811115613e0d5750506000910152565b600081518084526145fd8160208601602086016145b9565b601f01601f19169290920160200192915050565b60208152600061462460208301846145e5565b9392505050565b803567ffffffffffffffff8116811461464357600080fd5b919050565b6000806040838503121561465b57600080fd5b6146648361462b565b946020939093013593505050565b73ffffffffffffffffffffffffffffffffffffffff81168114613ead57600080fd5b803561464381614672565b6000602082840312156146b157600080fd5b813561462481614672565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171561470e5761470e6146bc565b60405290565b6040516060810167ffffffffffffffff8111828210171561470e5761470e6146bc565b604051601f8201601f1916810167ffffffffffffffff81118282101715614760576147606146bc565b604052919050565b600067ffffffffffffffff821115614782576147826146bc565b5060051b60200190565b600082601f83011261479d57600080fd5b813567ffffffffffffffff8111156147b7576147b76146bc565b6147ca6020601f19601f84011601614737565b8181528460208386010111156147df57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561480f57600080fd5b823567ffffffffffffffff8082111561482757600080fd5b818501915085601f83011261483b57600080fd5b813561484e61484982614768565b614737565b81815260059190911b8301840190848101908883111561486d57600080fd5b8585015b83811015614906578035858111156148895760008081fd5b86016080818c03601f19018113156148a15760008081fd5b6148a96146eb565b89830135888111156148bb5760008081fd5b6148c98e8c8387010161478c565b8252506040808401358b83015260606148e381860161462b565b828401526148f284860161462b565b908301525085525050918601918601614871565b5098975050505050505050565b60006020828403121561492557600080fd5b6146248261462b565b806040810183101561493f57600080fd5b92915050565b6000806000806000806000610180888a03121561496157600080fd5b61496a8861462b565b96506149786020890161462b565b955060408801359450606088013593506149958960808a0161492e565b92506101408801898111156149a957600080fd5b60c0890192506149b98a8261492e565b91505092959891949750929550565b600080600080600060a086880312156149e057600080fd5b85359450602086013567ffffffffffffffff8111156149fe57600080fd5b614a0a8882890161478c565b94505060408601359250614a206060870161462b565b91506080860135614a3081614672565b809150509295509295909350565b60008060008060808587031215614a5457600080fd5b614a5d8561462b565b9350614a6b6020860161462b565b93969395505050506040820135916060013590565b8015158114613ead57600080fd5b803561464381614a80565b60008060008060008060008060008060006101608c8e031215614abb57600080fd5b614ac48c614694565b9a50614ad260208d01614694565b9950614ae060408d01614694565b985060608c01359750614af560808d01614694565b9650614b0360a08d01614a8e565b955067ffffffffffffffff8060c08e01351115614b1f57600080fd5b614b2f8e60c08f01358f0161478c565b9550614b3d60e08e0161462b565b9450806101008e01351115614b5157600080fd5b50614b638d6101008e01358e0161478c565b9250614b726101208d01614694565b9150614b816101408d01614694565b90509295989b509295989b9093969950565b600060208284031215614ba557600080fd5b813561462481614a80565b600060208284031215614bc257600080fd5b813567ffffffffffffffff811115614bd957600080fd5b611dda8482850161478c565b60006020808385031215614bf857600080fd5b823567ffffffffffffffff80821115614c1057600080fd5b818501915085601f830112614c2457600080fd5b8135614c3261484982614768565b81815260059190911b83018401908481019088831115614c5157600080fd5b8585015b8381101561490657803585811115614c6d5760008081fd5b86016060818c03601f1901811315614c855760008081fd5b614c8d614714565b8983013588811115614c9f5760008081fd5b614cad8e8c8387010161478c565b8252506040808401358b830152614cc583850161462b565b9082015285525050918601918601614c55565b60008060408385031215614ceb57600080fd5b823567ffffffffffffffff811115614d0257600080fd5b614d0e8582860161478c565b95602094909401359450505050565b60008060408385031215614d3057600080fd5b82359150614d406020840161462b565b90509250929050565b600181811c90821680614d5d57607f821691505b602082108103614d96577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614e1757614e17614dcb565b6001019392505050565b600060208284031215614e3357600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e6b57614e6b614dcb565b5060010190565b600067ffffffffffffffff83811690831681811015614e9357614e93614dcb565b039392505050565b600082821015614ead57614ead614dcb565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614eea57614eea614dcb565b500290565b60008251614f018184602087016145b9565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614f4957614f49614f0b565b500690565b61012081016040808784376000838201818152879190815b6002811015614f8657848483379084018281529284019290600101614f66565b5050828760c0870137610100850181815286935091505b6001811015614fbc578251825260209283019290910190600101614f9d565b50505095945050505050565b600060208284031215614fda57600080fd5b815161462481614a80565b600067ffffffffffffffff80831681851680830382111561500857615008614dcb565b01949350505050565b601f8211156140d857600081815260208120601f850160051c810160208610156150385750805b601f850160051c820191505b8181101561505757828155600101615044565b505050505050565b815167ffffffffffffffff811115615079576150796146bc565b61508d816150878454614d49565b84615011565b602080601f8311600181146150e057600084156150aa5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555615057565b600085815260208120601f198616915b8281101561510f578886015182559484019460019091019084016150f0565b508582101561514b57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008261516a5761516a614f0b565b500490565b6000821982111561518257615182614dcb565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006151bc60608301846145e5565b9594505050505056fea2646970667358221220041c87d1847c21581e6eba605bd8c4cf2588648976f64611c0f8f05e1fa34a0a64736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061032b5760003560e01c80638da5cb5b116101b2578063c89e42df116100f9578063dbc16976116100a2578063eaeb077b1161007c578063eaeb077b14610811578063f2fde38b14610824578063f755276114610837578063fe16564f1461084657600080fd5b8063dbc16976146107b9578063e7a7ed02146107c1578063e8bf92ed146107f157600080fd5b8063d0ae98dd116100d3578063d0ae98dd14610766578063d8d1091b14610779578063d8f54db01461078c57600080fd5b8063c89e42df14610707578063cfa8ed471461071a578063d02103ca1461074657600080fd5b8063adc879e91161015b578063b6b0b09711610135578063b6b0b097146106bc578063c0cad302146106e1578063c3fd0f9c146106f457600080fd5b8063adc879e91461067e578063b02286c014610692578063b4d63f581461069c57600080fd5b80639b7967601161018c5780639b79676014610641578063a3c573eb14610654578063ab9fc5ef1461067457600080fd5b80638da5cb5b1461060857806396dc3d391461062657806399f5634e1461063957600080fd5b80635437988d116102765780637152facf1161021f5780637fcb3653116101f95780637fcb3653146105ce57806381df7d3f146105e25780638c4a0af7146105f557600080fd5b80637152facf146105a0578063748608de146105b357806379847057146105c657600080fd5b80636b8616ce116102505780636b8616ce146105655780636ff512cc14610585578063715018a61461059857600080fd5b80635437988d1461049e57806355b925e6146104b1578063574f649e146104c457600080fd5b806327eb6c0f116102d857806345605267116102b257806345605267146104405780635392c5e014610468578063542028d51461049657600080fd5b806327eb6c0f146103c85780633c1582671461040d578063423fa8561461042057600080fd5b80631a26da14116103095780631a26da14146103985780631c1083e2146103ad5780632072f6c5146103c057600080fd5b8063107bf28c1461033057806315064c961461034e57806319d8ac611461036b575b600080fd5b610338610859565b6040516103459190614611565b60405180910390f35b60655461035b9060ff1681565b6040519015158152602001610345565b60685461037f9067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610345565b6103ab6103a6366004614648565b6108e7565b005b6103ab6103bb36600461469f565b61090c565b6103ab610a18565b6070546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610345565b6103ab61041b3660046147fc565b610ac9565b60685461037f9068010000000000000000900467ffffffffffffffff1681565b60685461037f90700100000000000000000000000000000000900467ffffffffffffffff1681565b610488610476366004614913565b606b6020526000908152604090205481565b604051908152602001610345565b61033861145a565b6103ab6104ac36600461469f565b611467565b6103ab6104bf366004614945565b6114b6565b6104886104d23660046149c8565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b610488610573366004614913565b60666020526000908152604090205481565b6103ab61059336600461469f565b611a7f565b6103ab611b99565b6103386105ae366004614a3e565b611bab565b6103ab6105c1366004614945565b611de2565b61048861204b565b60695461037f9067ffffffffffffffff1681565b6103ab6105f0366004614a99565b6120c5565b6103ab610603366004614b93565b61241e565b60335473ffffffffffffffffffffffffffffffffffffffff166103e8565b6103ab610634366004614913565b612538565b61048861257b565b6103ab61064f366004614913565b6126ac565b6071546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b61037f62093a8081565b606e5461037f9067ffffffffffffffff1681565b610488620493e081565b6104886106aa366004614913565b60676020526000908152604090205481565b6065546103e890610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6103ab6106ef366004614bb0565b6126fb565b6103ab610702366004614945565b612713565b6103ab610715366004614bb0565b612d5d565b6069546103e89068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b610488610774366004614a3e565b612e32565b6103ab610787366004614be5565b6130de565b60695461035b907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b6103ab613783565b60685461037f907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b6103ab61081f366004614cd8565b613912565b6103ab61083236600461469f565b613e13565b61048867016345785d8a000081565b6103ab610854366004614d1d565b613eb0565b606f805461086690614d49565b80601f016020809104026020016040519081016040528092919081815260200182805461089290614d49565b80156108df5780601f106108b4576101008083540402835291602001916108df565b820191906000526020600020905b8154815290600101906020018083116108c257829003601f168201915b505050505081565b6108ef613ed3565b67ffffffffffffffff909116600090815260676020526040902055565b60705473ffffffffffffffffffffffffffffffffffffffff16331461099e5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff1615610ab75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b610abf613ed3565b610ac7613f3a565b565b60655460ff1615610b685760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610c015760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610995565b805180610c9c5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b8581101561124b576000878281518110610d0257610d02614d9c565b602002602001015190506000816060015167ffffffffffffffff161115610f1b5783610d2d81614dfa565b945050600081600001518051906020012082602001518360600151604051602001610d9093929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610e5d5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610f155760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610995565b506110b6565b60208101511580610fca5750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610f849160040190815260200190565b6020604051808303816000875af1158015610fa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc79190614e21565b15155b61103c5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610995565b805151620493e0116110b65760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610995565b8567ffffffffffffffff16816040015167ffffffffffffffff16101580156110ec575042816040015167ffffffffffffffff1611155b6111845760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061122d90614dfa565b9550508060400151955050808061124390614e3a565b915050610ce6565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156112ee5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610995565b60685460009061131c90700100000000000000000000000000000000900467ffffffffffffffff1684614e72565b6113309067ffffffffffffffff1687614e9b565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061140d33306113e78467016345785d8a0000614eb2565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613fc4565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d805461086690614d49565b61146f613ed3565b606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60655460ff16156115555760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b60695467ffffffffffffffff90811690881611156116015760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a401610995565b60695467ffffffffffffffff908116908716116116ac5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a401610995565b67ffffffffffffffff87166000908152606b602052604090205461175e5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a401610995565b600061176c88888888611bab565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516117a19190614eef565b602060405180830381855afa1580156117be573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906117e19190614e21565b6117eb9190614f3a565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916118559189918991899190600401614f4e565b602060405180830381865afa158015611872573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118969190614fc8565b6119085760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610995565b6069546119669033906119259067ffffffffffffffff168b614e72565b67ffffffffffffffff1661193761257b565b6119419190614eb2565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169190614082565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b158015611a1b57600080fd5b505af1158015611a2f573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611b185760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610995565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610a0d565b611ba1613ed3565b610ac760006140dd565b67ffffffffffffffff808516600081815260676020526040808220549387168252902054606092911580611bde57508115155b611c765760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610995565b80611d0f5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610995565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec01604051602081830303815290604052925050505b949350505050565b611dea613ed3565b60695467ffffffffffffffff9081169088161115611e965760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a401610995565b60695467ffffffffffffffff90811690871611611f415760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610995565b67ffffffffffffffff80881660009081526067602052604080822054928916825290205481611fd85760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610995565b806119665760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610995565b60685460009067ffffffffffffffff700100000000000000000000000000000000820481169161209a917801000000000000000000000000000000000000000000000000909104166001614fe5565b6120a49190614e72565b6120c09067ffffffffffffffff16670de0b6b3a7640000614eb2565b905090565b600054610100900460ff16158080156120e55750600054600160ff909116105b806120ff5750303b1580156120ff575060005460ff166001145b6121715760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610995565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156121cf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d61230e878261505f565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f61234f858261505f565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560708054928516929091169190911790556123ad614154565b801561241057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146124b75760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610995565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a0d90831515815260200190565b612540613ed3565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156125f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126169190614e21565b60695460685491925060009167ffffffffffffffff9182169168010000000000000000820481169161267b9170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614e72565b6126859190614fe5565b61268f9190614e72565b67ffffffffffffffff1690506126a5818361515b565b9250505090565b6126b4613ed3565b6068805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b612703613ed3565b606f61270f828261505f565b5050565b60655460ff16156127b25760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b8567ffffffffffffffff168767ffffffffffffffff16106128615760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a401610995565b60695467ffffffffffffffff90811690871611156129335760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c401610995565b67ffffffffffffffff87166000908152606b60205260409020546129e55760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a401610995565b67ffffffffffffffff86166000908152606b6020526040902054612a975760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a401610995565b6000612aa588888888611bab565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051612ada9190614eef565b602060405180830381855afa158015612af7573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612b1a9190614e21565b612b249190614f3a565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91612b8e9189918991899190600401614f4e565b602060405180830381865afa158015612bab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bcf9190614fc8565b612c415760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f46000000006064820152608401610995565b67ffffffffffffffff88166000908152606b6020526040902054869003612cf65760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a401610995565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a1612d52613f3a565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612df65760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610995565b606d612e02828261505f565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a0d9190614611565b60695460009067ffffffffffffffff868116911614612edf5760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b8467ffffffffffffffff168467ffffffffffffffff1611612f8e5760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a401610995565b60685467ffffffffffffffff68010000000000000000909104811690851611156130465760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b600061305486868686611bab565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516130899190614eef565b602060405180830381855afa1580156130a6573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906130c99190614e21565b6130d39190614f3a565b979650505050505050565b60655460ff161561317d5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146132405760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610995565b8051806132db5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b60685467ffffffffffffffff7801000000000000000000000000000000000000000000000000820481169161332691849170010000000000000000000000000000000090041661516f565b111561339a5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610995565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b848110156136b35760008682815181106133fa576133fa614d9c565b60200260200101519050838061340f90614dfa565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff88166000908152606690935291205490915081146135305760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610995565b61353b600188614e9b565b83036135f9574262093a8083604001516135559190614fe5565b67ffffffffffffffff1611156135f95760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610995565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209350858061369b90614dfa565b965050505080806136ab90614e3a565b9150506133de565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166137fb5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610995565b60705473ffffffffffffffffffffffffffffffffffffffff1633146138885760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c0000006064820152608401610995565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156138f257600080fd5b505af1158015613906573d6000803e3d6000fd5b50505050610ac76141da565b60655460ff16156139b15760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114613a745760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610995565b6000613a7e61204b565b905081811115613af65760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610995565b620493e0835110613b6f5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610995565b606554613b9990610100900473ffffffffffffffffffffffffffffffffffffffff16333084613fc4565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613c09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2d9190614e21565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613c6783614dfa565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505083805190602001208142604051602001613ce093929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526066909352912055323303613db057606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613e0d565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613e0493929190615187565b60405180910390a25b50505050565b613e1b613ed3565b73ffffffffffffffffffffffffffffffffffffffff8116613ea45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610995565b613ead816140dd565b50565b613eb8613ed3565b67ffffffffffffffff166000908152606b6020526040902055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ac75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610995565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613fa457600080fd5b505af1158015613fb8573d6000803e3d6000fd5b50505050610ac76142a5565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052613e0d9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261439a565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526140d89084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161401e565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166141d15760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610995565b610ac7336140dd565b60655460ff166142525760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610995565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff16156143445760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60006143fc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661448c9092919063ffffffff16565b8051909150156140d8578080602001905181019061441a9190614fc8565b6140d85760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610995565b6060611dda8484600085856000808673ffffffffffffffffffffffffffffffffffffffff1685876040516144c09190614eef565b60006040518083038185875af1925050503d80600081146144fd576040519150601f19603f3d011682016040523d82523d6000602084013e614502565b606091505b50915091506130d3878383876060831561458a5782516000036145835773ffffffffffffffffffffffffffffffffffffffff85163b6145835760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610995565b5081611dda565b611dda838381511561459f5781518083602001fd5b8060405162461bcd60e51b81526004016109959190614611565b60005b838110156145d45781810151838201526020016145bc565b83811115613e0d5750506000910152565b600081518084526145fd8160208601602086016145b9565b601f01601f19169290920160200192915050565b60208152600061462460208301846145e5565b9392505050565b803567ffffffffffffffff8116811461464357600080fd5b919050565b6000806040838503121561465b57600080fd5b6146648361462b565b946020939093013593505050565b73ffffffffffffffffffffffffffffffffffffffff81168114613ead57600080fd5b803561464381614672565b6000602082840312156146b157600080fd5b813561462481614672565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171561470e5761470e6146bc565b60405290565b6040516060810167ffffffffffffffff8111828210171561470e5761470e6146bc565b604051601f8201601f1916810167ffffffffffffffff81118282101715614760576147606146bc565b604052919050565b600067ffffffffffffffff821115614782576147826146bc565b5060051b60200190565b600082601f83011261479d57600080fd5b813567ffffffffffffffff8111156147b7576147b76146bc565b6147ca6020601f19601f84011601614737565b8181528460208386010111156147df57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561480f57600080fd5b823567ffffffffffffffff8082111561482757600080fd5b818501915085601f83011261483b57600080fd5b813561484e61484982614768565b614737565b81815260059190911b8301840190848101908883111561486d57600080fd5b8585015b83811015614906578035858111156148895760008081fd5b86016080818c03601f19018113156148a15760008081fd5b6148a96146eb565b89830135888111156148bb5760008081fd5b6148c98e8c8387010161478c565b8252506040808401358b83015260606148e381860161462b565b828401526148f284860161462b565b908301525085525050918601918601614871565b5098975050505050505050565b60006020828403121561492557600080fd5b6146248261462b565b806040810183101561493f57600080fd5b92915050565b6000806000806000806000610180888a03121561496157600080fd5b61496a8861462b565b96506149786020890161462b565b955060408801359450606088013593506149958960808a0161492e565b92506101408801898111156149a957600080fd5b60c0890192506149b98a8261492e565b91505092959891949750929550565b600080600080600060a086880312156149e057600080fd5b85359450602086013567ffffffffffffffff8111156149fe57600080fd5b614a0a8882890161478c565b94505060408601359250614a206060870161462b565b91506080860135614a3081614672565b809150509295509295909350565b60008060008060808587031215614a5457600080fd5b614a5d8561462b565b9350614a6b6020860161462b565b93969395505050506040820135916060013590565b8015158114613ead57600080fd5b803561464381614a80565b60008060008060008060008060008060006101608c8e031215614abb57600080fd5b614ac48c614694565b9a50614ad260208d01614694565b9950614ae060408d01614694565b985060608c01359750614af560808d01614694565b9650614b0360a08d01614a8e565b955067ffffffffffffffff8060c08e01351115614b1f57600080fd5b614b2f8e60c08f01358f0161478c565b9550614b3d60e08e0161462b565b9450806101008e01351115614b5157600080fd5b50614b638d6101008e01358e0161478c565b9250614b726101208d01614694565b9150614b816101408d01614694565b90509295989b509295989b9093969950565b600060208284031215614ba557600080fd5b813561462481614a80565b600060208284031215614bc257600080fd5b813567ffffffffffffffff811115614bd957600080fd5b611dda8482850161478c565b60006020808385031215614bf857600080fd5b823567ffffffffffffffff80821115614c1057600080fd5b818501915085601f830112614c2457600080fd5b8135614c3261484982614768565b81815260059190911b83018401908481019088831115614c5157600080fd5b8585015b8381101561490657803585811115614c6d5760008081fd5b86016060818c03601f1901811315614c855760008081fd5b614c8d614714565b8983013588811115614c9f5760008081fd5b614cad8e8c8387010161478c565b8252506040808401358b830152614cc583850161462b565b9082015285525050918601918601614c55565b60008060408385031215614ceb57600080fd5b823567ffffffffffffffff811115614d0257600080fd5b614d0e8582860161478c565b95602094909401359450505050565b60008060408385031215614d3057600080fd5b82359150614d406020840161462b565b90509250929050565b600181811c90821680614d5d57607f821691505b602082108103614d96577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614e1757614e17614dcb565b6001019392505050565b600060208284031215614e3357600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e6b57614e6b614dcb565b5060010190565b600067ffffffffffffffff83811690831681811015614e9357614e93614dcb565b039392505050565b600082821015614ead57614ead614dcb565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614eea57614eea614dcb565b500290565b60008251614f018184602087016145b9565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614f4957614f49614f0b565b500690565b61012081016040808784376000838201818152879190815b6002811015614f8657848483379084018281529284019290600101614f66565b5050828760c0870137610100850181815286935091505b6001811015614fbc578251825260209283019290910190600101614f9d565b50505095945050505050565b600060208284031215614fda57600080fd5b815161462481614a80565b600067ffffffffffffffff80831681851680830382111561500857615008614dcb565b01949350505050565b601f8211156140d857600081815260208120601f850160051c810160208610156150385750805b601f850160051c820191505b8181101561505757828155600101615044565b505050505050565b815167ffffffffffffffff811115615079576150796146bc565b61508d816150878454614d49565b84615011565b602080601f8311600181146150e057600084156150aa5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555615057565b600085815260208120601f198616915b8281101561510f578886015182559484019460019091019084016150f0565b508582101561514b57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008261516a5761516a614f0b565b500490565b6000821982111561518257615182614dcb565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006151bc60608301846145e5565b9594505050505056fea2646970667358221220041c87d1847c21581e6eba605bd8c4cf2588648976f64611c0f8f05e1fa34a0a64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/Verifier.json b/compiled-contracts/Verifier.json index f658d4998..66edea510 100644 --- a/compiled-contracts/Verifier.json +++ b/compiled-contracts/Verifier.json @@ -38,8 +38,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50610f6a806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c806343753b4d14610030575b600080fd5b61012c600480360361012081101561004757600080fd5b6040805180820182529183019291818301918390600290839083908082843760009201829052506040805180820190915293969594608081019493509150600290835b828210156100c8576040805180820182529080840286019060029083908390808284376000920191909152505050815260019091019060200161008a565b5050604080518082018252939695948181019493509150600290839083908082843760009201919091525050604080516020818101909252929594938181019392509060019083908390808284376000920191909152509194506101409350505050565b604080519115158252519081900360200190f35b600061014a610e09565b6040805180820182528751815260208089015181830152908352815160808101835287515181840190815288518301516060808401919091529082528351808501855289840180515182525184015181850152828401528483019190915282518084018452875181528783015181840152848401528251600180825281850190945290929091828101908036833701905050905060005b600181101561021a578481600181106101f657fe5b602002015182828151811061020757fe5b60209081029190910101526001016101e1565b506102258183610243565b6102345760019250505061023b565b6000925050505b949350505050565b60007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161026e610e3b565b61027661045a565b90508060800151518551600101146102ef57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f76657269666965722d6261642d696e7075740000000000000000000000000000604482015290519081900360640190fd5b6102f7610e82565b50604080518082019091526000808252602082018190525b86518110156103e3578387828151811061032557fe5b60200260200101511061039957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f76657269666965722d6774652d736e61726b2d7363616c61722d6669656c6400604482015290519081900360640190fd5b6103d9826103d4856080015184600101815181106103b357fe5b60200260200101518a85815181106103c757fe5b60200260200101516107db565b610895565b915060010161030f565b506104068183608001516000815181106103f957fe5b6020026020010151610895565b905061043c610418866000015161094b565b8660200151846000015185602001518587604001518b6040015189606001516109d7565b61044c5760019350505050610454565b600093505050505b92915050565b610462610e3b565b6040805180820182527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e281527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d19266020808301919091529083528151608080820184527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c8285019081527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab606080850191909152908352845180860186527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a781527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8818601528385015285840192909252835180820185527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28186019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed828501528152845180860186527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa818601528185015285850152835190810184527f1c54dd0e0553498d9ad235eba24f03388a6d59de79a7e230d1af04b6265c332a8185019081527f04838e83a3ca2ed7495b2bc24d0e13df73aebb38529a720294593229266b6a60828401528152835180850185527f28b1fa81466521b85e5417203033af0e2966cb612c66c866a78544b3a4c2888281527f23d69a4e817251288cb1703587e30eaedec5b9bab022897756b5f160f755f03e818501528184015281850152825160028082529181019093529082015b6106e3610e82565b8152602001906001900390816106db57505060808201908152604080518082019091527f1b14ccd8ecada725463ff917550a6ff911c78396ed48e2f5bd2e1b6b5015e43181527f26a9b3dd6cfd45d98f7fc6fca79577ee07a2d8899d87b2efd5cb63d40b90ec2260208201529051805160009061075c57fe5b602002602001018190525060405180604001604052807f22c24f7779cd44fa8bad17df8e601b7b2d948320d25830cd4b2097ae59a0db5681526020017f1e28066a7dc90ebe7f16a9db9e5e50d480ac009ee7deb7fb076903d4571c4d5f81525081608001516001815181106107cd57fe5b602002602001018190525090565b6107e3610e82565b6107eb610e9c565b835181526020808501519082015260408101839052600060608360808460076107d05a03fa905080801561081e57610820565bfe5b508061088d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f70616972696e672d6d756c2d6661696c65640000000000000000000000000000604482015290519081900360640190fd5b505092915050565b61089d610e82565b6108a5610eba565b8351815260208085015181830152835160408301528301516060808301919091526000908360c08460066107d05a03fa905080801561081e57508061088d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f70616972696e672d6164642d6661696c65640000000000000000000000000000604482015290519081900360640190fd5b610953610e82565b81517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd479015801561098657506020830151155b156109a657505060408051808201909152600080825260208201526109d2565b604051806040016040528084600001518152602001828560200151816109c857fe5b0683038152509150505b919050565b60408051600480825260a0820190925260009160609190816020015b6109fb610e82565b8152602001906001900390816109f357505060408051600480825260a0820190925291925060609190602082015b610a31610ed8565b815260200190600190039081610a295790505090508a82600081518110610a5457fe5b60200260200101819052508882600181518110610a6d57fe5b60200260200101819052508682600281518110610a8657fe5b60200260200101819052508482600381518110610a9f57fe5b60200260200101819052508981600081518110610ab857fe5b60200260200101819052508781600181518110610ad157fe5b60200260200101819052508581600281518110610aea57fe5b60200260200101819052508381600381518110610b0357fe5b6020026020010181905250610b188282610b27565b9b9a5050505050505050505050565b60008151835114610b9957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f70616972696e672d6c656e677468732d6661696c656400000000000000000000604482015290519081900360640190fd5b82516006810260608167ffffffffffffffff81118015610bb857600080fd5b50604051908082528060200260200182016040528015610be2578160200160208202803683370190505b50905060005b83811015610d6757868181518110610bfc57fe5b602002602001015160000151828260060260000181518110610c1a57fe5b602002602001018181525050868181518110610c3257fe5b602002602001015160200151828260060260010181518110610c5057fe5b602002602001018181525050858181518110610c6857fe5b602090810291909101015151518251839060026006850201908110610c8957fe5b602002602001018181525050858181518110610ca157fe5b60209081029190910101515160016020020151828260060260030181518110610cc657fe5b602002602001018181525050858181518110610cde57fe5b602002602001015160200151600060028110610cf657fe5b6020020151828260060260040181518110610d0d57fe5b602002602001018181525050858181518110610d2557fe5b602002602001015160200151600160028110610d3d57fe5b6020020151828260060260050181518110610d5457fe5b6020908102919091010152600101610be8565b50610d70610ef8565b6000602082602086026020860160086107d05a03fa905080801561081e575080610dfb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f70616972696e672d6f70636f64652d6661696c65640000000000000000000000604482015290519081900360640190fd5b505115159695505050505050565b6040518060600160405280610e1c610e82565b8152602001610e29610ed8565b8152602001610e36610e82565b905290565b6040518060a00160405280610e4e610e82565b8152602001610e5b610ed8565b8152602001610e68610ed8565b8152602001610e75610ed8565b8152602001606081525090565b604051806040016040528060008152602001600081525090565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280610eeb610f16565b8152602001610e36610f16565b60405180602001604052806001906020820280368337509192915050565b6040518060400160405280600290602082028036833750919291505056fea264697066735822122098324ddce9e84c978330c7212c926e6b6ea251702f68746d297acfc078338f4864736f6c634300060b0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c806343753b4d14610030575b600080fd5b61012c600480360361012081101561004757600080fd5b6040805180820182529183019291818301918390600290839083908082843760009201829052506040805180820190915293969594608081019493509150600290835b828210156100c8576040805180820182529080840286019060029083908390808284376000920191909152505050815260019091019060200161008a565b5050604080518082018252939695948181019493509150600290839083908082843760009201919091525050604080516020818101909252929594938181019392509060019083908390808284376000920191909152509194506101409350505050565b604080519115158252519081900360200190f35b600061014a610e09565b6040805180820182528751815260208089015181830152908352815160808101835287515181840190815288518301516060808401919091529082528351808501855289840180515182525184015181850152828401528483019190915282518084018452875181528783015181840152848401528251600180825281850190945290929091828101908036833701905050905060005b600181101561021a578481600181106101f657fe5b602002015182828151811061020757fe5b60209081029190910101526001016101e1565b506102258183610243565b6102345760019250505061023b565b6000925050505b949350505050565b60007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161026e610e3b565b61027661045a565b90508060800151518551600101146102ef57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f76657269666965722d6261642d696e7075740000000000000000000000000000604482015290519081900360640190fd5b6102f7610e82565b50604080518082019091526000808252602082018190525b86518110156103e3578387828151811061032557fe5b60200260200101511061039957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f76657269666965722d6774652d736e61726b2d7363616c61722d6669656c6400604482015290519081900360640190fd5b6103d9826103d4856080015184600101815181106103b357fe5b60200260200101518a85815181106103c757fe5b60200260200101516107db565b610895565b915060010161030f565b506104068183608001516000815181106103f957fe5b6020026020010151610895565b905061043c610418866000015161094b565b8660200151846000015185602001518587604001518b6040015189606001516109d7565b61044c5760019350505050610454565b600093505050505b92915050565b610462610e3b565b6040805180820182527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e281527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d19266020808301919091529083528151608080820184527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c8285019081527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab606080850191909152908352845180860186527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a781527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8818601528385015285840192909252835180820185527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28186019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed828501528152845180860186527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa818601528185015285850152835190810184527f1c54dd0e0553498d9ad235eba24f03388a6d59de79a7e230d1af04b6265c332a8185019081527f04838e83a3ca2ed7495b2bc24d0e13df73aebb38529a720294593229266b6a60828401528152835180850185527f28b1fa81466521b85e5417203033af0e2966cb612c66c866a78544b3a4c2888281527f23d69a4e817251288cb1703587e30eaedec5b9bab022897756b5f160f755f03e818501528184015281850152825160028082529181019093529082015b6106e3610e82565b8152602001906001900390816106db57505060808201908152604080518082019091527f1b14ccd8ecada725463ff917550a6ff911c78396ed48e2f5bd2e1b6b5015e43181527f26a9b3dd6cfd45d98f7fc6fca79577ee07a2d8899d87b2efd5cb63d40b90ec2260208201529051805160009061075c57fe5b602002602001018190525060405180604001604052807f22c24f7779cd44fa8bad17df8e601b7b2d948320d25830cd4b2097ae59a0db5681526020017f1e28066a7dc90ebe7f16a9db9e5e50d480ac009ee7deb7fb076903d4571c4d5f81525081608001516001815181106107cd57fe5b602002602001018190525090565b6107e3610e82565b6107eb610e9c565b835181526020808501519082015260408101839052600060608360808460076107d05a03fa905080801561081e57610820565bfe5b508061088d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f70616972696e672d6d756c2d6661696c65640000000000000000000000000000604482015290519081900360640190fd5b505092915050565b61089d610e82565b6108a5610eba565b8351815260208085015181830152835160408301528301516060808301919091526000908360c08460066107d05a03fa905080801561081e57508061088d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f70616972696e672d6164642d6661696c65640000000000000000000000000000604482015290519081900360640190fd5b610953610e82565b81517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd479015801561098657506020830151155b156109a657505060408051808201909152600080825260208201526109d2565b604051806040016040528084600001518152602001828560200151816109c857fe5b0683038152509150505b919050565b60408051600480825260a0820190925260009160609190816020015b6109fb610e82565b8152602001906001900390816109f357505060408051600480825260a0820190925291925060609190602082015b610a31610ed8565b815260200190600190039081610a295790505090508a82600081518110610a5457fe5b60200260200101819052508882600181518110610a6d57fe5b60200260200101819052508682600281518110610a8657fe5b60200260200101819052508482600381518110610a9f57fe5b60200260200101819052508981600081518110610ab857fe5b60200260200101819052508781600181518110610ad157fe5b60200260200101819052508581600281518110610aea57fe5b60200260200101819052508381600381518110610b0357fe5b6020026020010181905250610b188282610b27565b9b9a5050505050505050505050565b60008151835114610b9957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f70616972696e672d6c656e677468732d6661696c656400000000000000000000604482015290519081900360640190fd5b82516006810260608167ffffffffffffffff81118015610bb857600080fd5b50604051908082528060200260200182016040528015610be2578160200160208202803683370190505b50905060005b83811015610d6757868181518110610bfc57fe5b602002602001015160000151828260060260000181518110610c1a57fe5b602002602001018181525050868181518110610c3257fe5b602002602001015160200151828260060260010181518110610c5057fe5b602002602001018181525050858181518110610c6857fe5b602090810291909101015151518251839060026006850201908110610c8957fe5b602002602001018181525050858181518110610ca157fe5b60209081029190910101515160016020020151828260060260030181518110610cc657fe5b602002602001018181525050858181518110610cde57fe5b602002602001015160200151600060028110610cf657fe5b6020020151828260060260040181518110610d0d57fe5b602002602001018181525050858181518110610d2557fe5b602002602001015160200151600160028110610d3d57fe5b6020020151828260060260050181518110610d5457fe5b6020908102919091010152600101610be8565b50610d70610ef8565b6000602082602086026020860160086107d05a03fa905080801561081e575080610dfb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f70616972696e672d6f70636f64652d6661696c65640000000000000000000000604482015290519081900360640190fd5b505115159695505050505050565b6040518060600160405280610e1c610e82565b8152602001610e29610ed8565b8152602001610e36610e82565b905290565b6040518060a00160405280610e4e610e82565b8152602001610e5b610ed8565b8152602001610e68610ed8565b8152602001610e75610ed8565b8152602001606081525090565b604051806040016040528060008152602001600081525090565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280610eeb610f16565b8152602001610e36610f16565b60405180602001604052806001906020820280368337509192915050565b6040518060400160405280600290602082028036833750919291505056fea264697066735822122098324ddce9e84c978330c7212c926e6b6ea251702f68746d297acfc078338f4864736f6c634300060b0033", + "bytecode": "0x608060405234801561001057600080fd5b50610f6a806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c806343753b4d14610030575b600080fd5b61012c600480360361012081101561004757600080fd5b6040805180820182529183019291818301918390600290839083908082843760009201829052506040805180820190915293969594608081019493509150600290835b828210156100c8576040805180820182529080840286019060029083908390808284376000920191909152505050815260019091019060200161008a565b5050604080518082018252939695948181019493509150600290839083908082843760009201919091525050604080516020818101909252929594938181019392509060019083908390808284376000920191909152509194506101409350505050565b604080519115158252519081900360200190f35b600061014a610e09565b6040805180820182528751815260208089015181830152908352815160808101835287515181840190815288518301516060808401919091529082528351808501855289840180515182525184015181850152828401528483019190915282518084018452875181528783015181840152848401528251600180825281850190945290929091828101908036833701905050905060005b600181101561021a578481600181106101f657fe5b602002015182828151811061020757fe5b60209081029190910101526001016101e1565b506102258183610243565b6102345760019250505061023b565b6000925050505b949350505050565b60007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161026e610e3b565b61027661045a565b90508060800151518551600101146102ef57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f76657269666965722d6261642d696e7075740000000000000000000000000000604482015290519081900360640190fd5b6102f7610e82565b50604080518082019091526000808252602082018190525b86518110156103e3578387828151811061032557fe5b60200260200101511061039957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f76657269666965722d6774652d736e61726b2d7363616c61722d6669656c6400604482015290519081900360640190fd5b6103d9826103d4856080015184600101815181106103b357fe5b60200260200101518a85815181106103c757fe5b60200260200101516107db565b610895565b915060010161030f565b506104068183608001516000815181106103f957fe5b6020026020010151610895565b905061043c610418866000015161094b565b8660200151846000015185602001518587604001518b6040015189606001516109d7565b61044c5760019350505050610454565b600093505050505b92915050565b610462610e3b565b6040805180820182527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e281527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d19266020808301919091529083528151608080820184527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c8285019081527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab606080850191909152908352845180860186527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a781527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8818601528385015285840192909252835180820185527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28186019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed828501528152845180860186527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa818601528185015285850152835190810184527f119f15e0f81076884d21d2cd6ac483a55c28450b386bdea8c2955def9835fbc68185019081527f14b0a9ca774507f41446d9d58e741ebdf61cb4a71169422e6e09ad4dfdcb0a82828401528152835180850185527f2357503a418433e2235411b79bea0e4b206b4b813e03c72525a67f0da54f513d81527f0bbd31dd338f7da569e1a84e9a6b1786df3e5a3dca093a8e0619ec290e3c4f1f818501528184015281850152825160028082529181019093529082015b6106e3610e82565b8152602001906001900390816106db57505060808201908152604080518082019091527f1afd0838136f18dd0d3b7889f3d0d808c2e974c3c1c91981ff1bb8a9f5b8723381527f0a68e37f4dc3ca49360df2e4b67b0e0a4344a7c72944c438eea410ea62c49e8660208201529051805160009061075c57fe5b602002602001018190525060405180604001604052807f22c24f7779cd44fa8bad17df8e601b7b2d948320d25830cd4b2097ae59a0db5681526020017f1e28066a7dc90ebe7f16a9db9e5e50d480ac009ee7deb7fb076903d4571c4d5f81525081608001516001815181106107cd57fe5b602002602001018190525090565b6107e3610e82565b6107eb610e9c565b835181526020808501519082015260408101839052600060608360808460076107d05a03fa905080801561081e57610820565bfe5b508061088d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f70616972696e672d6d756c2d6661696c65640000000000000000000000000000604482015290519081900360640190fd5b505092915050565b61089d610e82565b6108a5610eba565b8351815260208085015181830152835160408301528301516060808301919091526000908360c08460066107d05a03fa905080801561081e57508061088d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f70616972696e672d6164642d6661696c65640000000000000000000000000000604482015290519081900360640190fd5b610953610e82565b81517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd479015801561098657506020830151155b156109a657505060408051808201909152600080825260208201526109d2565b604051806040016040528084600001518152602001828560200151816109c857fe5b0683038152509150505b919050565b60408051600480825260a0820190925260009160609190816020015b6109fb610e82565b8152602001906001900390816109f357505060408051600480825260a0820190925291925060609190602082015b610a31610ed8565b815260200190600190039081610a295790505090508a82600081518110610a5457fe5b60200260200101819052508882600181518110610a6d57fe5b60200260200101819052508682600281518110610a8657fe5b60200260200101819052508482600381518110610a9f57fe5b60200260200101819052508981600081518110610ab857fe5b60200260200101819052508781600181518110610ad157fe5b60200260200101819052508581600281518110610aea57fe5b60200260200101819052508381600381518110610b0357fe5b6020026020010181905250610b188282610b27565b9b9a5050505050505050505050565b60008151835114610b9957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f70616972696e672d6c656e677468732d6661696c656400000000000000000000604482015290519081900360640190fd5b82516006810260608167ffffffffffffffff81118015610bb857600080fd5b50604051908082528060200260200182016040528015610be2578160200160208202803683370190505b50905060005b83811015610d6757868181518110610bfc57fe5b602002602001015160000151828260060260000181518110610c1a57fe5b602002602001018181525050868181518110610c3257fe5b602002602001015160200151828260060260010181518110610c5057fe5b602002602001018181525050858181518110610c6857fe5b602090810291909101015151518251839060026006850201908110610c8957fe5b602002602001018181525050858181518110610ca157fe5b60209081029190910101515160016020020151828260060260030181518110610cc657fe5b602002602001018181525050858181518110610cde57fe5b602002602001015160200151600060028110610cf657fe5b6020020151828260060260040181518110610d0d57fe5b602002602001018181525050858181518110610d2557fe5b602002602001015160200151600160028110610d3d57fe5b6020020151828260060260050181518110610d5457fe5b6020908102919091010152600101610be8565b50610d70610ef8565b6000602082602086026020860160086107d05a03fa905080801561081e575080610dfb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f70616972696e672d6f70636f64652d6661696c65640000000000000000000000604482015290519081900360640190fd5b505115159695505050505050565b6040518060600160405280610e1c610e82565b8152602001610e29610ed8565b8152602001610e36610e82565b905290565b6040518060a00160405280610e4e610e82565b8152602001610e5b610ed8565b8152602001610e68610ed8565b8152602001610e75610ed8565b8152602001606081525090565b604051806040016040528060008152602001600081525090565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280610eeb610f16565b8152602001610e36610f16565b60405180602001604052806001906020820280368337509192915050565b6040518060400160405280600290602082028036833750919291505056fea2646970667358221220743cdda0f921444b03e41cbe9737d5ae49ec7300e84e2fcc3eb25afb52123b9664736f6c634300060b0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c806343753b4d14610030575b600080fd5b61012c600480360361012081101561004757600080fd5b6040805180820182529183019291818301918390600290839083908082843760009201829052506040805180820190915293969594608081019493509150600290835b828210156100c8576040805180820182529080840286019060029083908390808284376000920191909152505050815260019091019060200161008a565b5050604080518082018252939695948181019493509150600290839083908082843760009201919091525050604080516020818101909252929594938181019392509060019083908390808284376000920191909152509194506101409350505050565b604080519115158252519081900360200190f35b600061014a610e09565b6040805180820182528751815260208089015181830152908352815160808101835287515181840190815288518301516060808401919091529082528351808501855289840180515182525184015181850152828401528483019190915282518084018452875181528783015181840152848401528251600180825281850190945290929091828101908036833701905050905060005b600181101561021a578481600181106101f657fe5b602002015182828151811061020757fe5b60209081029190910101526001016101e1565b506102258183610243565b6102345760019250505061023b565b6000925050505b949350505050565b60007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161026e610e3b565b61027661045a565b90508060800151518551600101146102ef57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f76657269666965722d6261642d696e7075740000000000000000000000000000604482015290519081900360640190fd5b6102f7610e82565b50604080518082019091526000808252602082018190525b86518110156103e3578387828151811061032557fe5b60200260200101511061039957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f76657269666965722d6774652d736e61726b2d7363616c61722d6669656c6400604482015290519081900360640190fd5b6103d9826103d4856080015184600101815181106103b357fe5b60200260200101518a85815181106103c757fe5b60200260200101516107db565b610895565b915060010161030f565b506104068183608001516000815181106103f957fe5b6020026020010151610895565b905061043c610418866000015161094b565b8660200151846000015185602001518587604001518b6040015189606001516109d7565b61044c5760019350505050610454565b600093505050505b92915050565b610462610e3b565b6040805180820182527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e281527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d19266020808301919091529083528151608080820184527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c8285019081527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab606080850191909152908352845180860186527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a781527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8818601528385015285840192909252835180820185527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28186019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed828501528152845180860186527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa818601528185015285850152835190810184527f119f15e0f81076884d21d2cd6ac483a55c28450b386bdea8c2955def9835fbc68185019081527f14b0a9ca774507f41446d9d58e741ebdf61cb4a71169422e6e09ad4dfdcb0a82828401528152835180850185527f2357503a418433e2235411b79bea0e4b206b4b813e03c72525a67f0da54f513d81527f0bbd31dd338f7da569e1a84e9a6b1786df3e5a3dca093a8e0619ec290e3c4f1f818501528184015281850152825160028082529181019093529082015b6106e3610e82565b8152602001906001900390816106db57505060808201908152604080518082019091527f1afd0838136f18dd0d3b7889f3d0d808c2e974c3c1c91981ff1bb8a9f5b8723381527f0a68e37f4dc3ca49360df2e4b67b0e0a4344a7c72944c438eea410ea62c49e8660208201529051805160009061075c57fe5b602002602001018190525060405180604001604052807f22c24f7779cd44fa8bad17df8e601b7b2d948320d25830cd4b2097ae59a0db5681526020017f1e28066a7dc90ebe7f16a9db9e5e50d480ac009ee7deb7fb076903d4571c4d5f81525081608001516001815181106107cd57fe5b602002602001018190525090565b6107e3610e82565b6107eb610e9c565b835181526020808501519082015260408101839052600060608360808460076107d05a03fa905080801561081e57610820565bfe5b508061088d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f70616972696e672d6d756c2d6661696c65640000000000000000000000000000604482015290519081900360640190fd5b505092915050565b61089d610e82565b6108a5610eba565b8351815260208085015181830152835160408301528301516060808301919091526000908360c08460066107d05a03fa905080801561081e57508061088d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f70616972696e672d6164642d6661696c65640000000000000000000000000000604482015290519081900360640190fd5b610953610e82565b81517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd479015801561098657506020830151155b156109a657505060408051808201909152600080825260208201526109d2565b604051806040016040528084600001518152602001828560200151816109c857fe5b0683038152509150505b919050565b60408051600480825260a0820190925260009160609190816020015b6109fb610e82565b8152602001906001900390816109f357505060408051600480825260a0820190925291925060609190602082015b610a31610ed8565b815260200190600190039081610a295790505090508a82600081518110610a5457fe5b60200260200101819052508882600181518110610a6d57fe5b60200260200101819052508682600281518110610a8657fe5b60200260200101819052508482600381518110610a9f57fe5b60200260200101819052508981600081518110610ab857fe5b60200260200101819052508781600181518110610ad157fe5b60200260200101819052508581600281518110610aea57fe5b60200260200101819052508381600381518110610b0357fe5b6020026020010181905250610b188282610b27565b9b9a5050505050505050505050565b60008151835114610b9957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f70616972696e672d6c656e677468732d6661696c656400000000000000000000604482015290519081900360640190fd5b82516006810260608167ffffffffffffffff81118015610bb857600080fd5b50604051908082528060200260200182016040528015610be2578160200160208202803683370190505b50905060005b83811015610d6757868181518110610bfc57fe5b602002602001015160000151828260060260000181518110610c1a57fe5b602002602001018181525050868181518110610c3257fe5b602002602001015160200151828260060260010181518110610c5057fe5b602002602001018181525050858181518110610c6857fe5b602090810291909101015151518251839060026006850201908110610c8957fe5b602002602001018181525050858181518110610ca157fe5b60209081029190910101515160016020020151828260060260030181518110610cc657fe5b602002602001018181525050858181518110610cde57fe5b602002602001015160200151600060028110610cf657fe5b6020020151828260060260040181518110610d0d57fe5b602002602001018181525050858181518110610d2557fe5b602002602001015160200151600160028110610d3d57fe5b6020020151828260060260050181518110610d5457fe5b6020908102919091010152600101610be8565b50610d70610ef8565b6000602082602086026020860160086107d05a03fa905080801561081e575080610dfb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f70616972696e672d6f70636f64652d6661696c65640000000000000000000000604482015290519081900360640190fd5b505115159695505050505050565b6040518060600160405280610e1c610e82565b8152602001610e29610ed8565b8152602001610e36610e82565b905290565b6040518060a00160405280610e4e610e82565b8152602001610e5b610ed8565b8152602001610e68610ed8565b8152602001610e75610ed8565b8152602001606081525090565b604051806040016040528060008152602001600081525090565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280610eeb610f16565b8152602001610e36610f16565b60405180602001604052806001906020820280368337509192915050565b6040518060400160405280600290602082028036833750919291505056fea2646970667358221220743cdda0f921444b03e41cbe9737d5ae49ec7300e84e2fcc3eb25afb52123b9664736f6c634300060b0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/ProofOfEfficiency.sol b/contracts/ProofOfEfficiency.sol index 8c43cd29e..0bebda320 100644 --- a/contracts/ProofOfEfficiency.sol +++ b/contracts/ProofOfEfficiency.sol @@ -64,12 +64,12 @@ contract ProofOfEfficiency is uint256 public constant TRUSTED_SEQUENCER_FEE = 0.1 ether; // TODO should be defined // Max batch byte length - // Max keccaks circuit = (2**23 / 158418) * 9 = 468 + // Max keccaks circuit = (2**23 / 158418) * 9 = 2376 // Bytes per keccak = 136 - // Minimum Static keccaks batch = 4 - // Max bytes allowed = (468 - 4) * 136 = 63104 bytes - 1 byte padding - // Rounded to 60000 bytes - uint256 public constant MAX_BATCH_LENGTH = 60000; + // Minimum Static keccaks batch = 2 + // Max bytes allowed = (2376 - 2) * 136 = 322864 bytes - 1 byte padding + // Rounded to 300000 bytes + uint256 public constant MAX_BATCH_LENGTH = 300000; // Force batch timeout uint64 public constant FORCE_BATCH_TIMEOUT = 7 days; diff --git a/contracts/verifiers/Verifier.sol b/contracts/verifiers/Verifier.sol index b485f03f6..396c8f478 100644 --- a/contracts/verifiers/Verifier.sol +++ b/contracts/verifiers/Verifier.sol @@ -255,19 +255,19 @@ contract Verifier { ); vk.delta2 = Pairing.G2Point( [ - 12814700577715561086096033427148961091750918964504032570646700444819578958634, - 2041691956802368350105476040949274775250346775892291306599620810817556671072 + 7970398111040848580630905008774386277492919809508403212228692478707040123846, + 9358393908668718222030872571494167247652698069293259985700790093611147135618 ], [ - 18406974795629710857775073192913245904417477578893270042123797230867871598722, - 16210119957722456545813311284028623129612781001767663812083464631006254198846 + 15985219105334376951759511434301214233106325655965674525023674459931146146109, + 5309719578808206656908962462706922975273643133390418594897079890933224066847 ] ); vk.IC = new Pairing.G1Point[](2); vk.IC[0] = Pairing.G1Point( - 12249197657572123050734566699158494796851312997080609819257215670345193088049, - 17487726782333876568924702133049450362476123519223034945965699111411971583010 + 12207203096328281265282381411940884949682076555049465332726723223933471453747, + 4708450709093153906807997500977557256958875411904415551340158687015285857926 ); vk.IC[1] = Pairing.G1Point( From 20e4bae1c0e21e61362be75e866d6879d40cf726 Mon Sep 17 00:00:00 2001 From: krlosMata Date: Tue, 13 Dec 2022 15:50:58 +0100 Subject: [PATCH 28/71] increase version --- compiled-contracts/Bridge.json | 4 ++-- compiled-contracts/BridgeMock.json | 4 ++-- compiled-contracts/ERC20PermitMock.json | 4 ++-- compiled-contracts/GlobalExitRootManager.json | 4 ++-- compiled-contracts/GlobalExitRootManagerL2.json | 4 ++-- compiled-contracts/GlobalExitRootManagerL2Mock.json | 4 ++-- compiled-contracts/GlobalExitRootManagerMock.json | 4 ++-- compiled-contracts/ProofOfEfficiency.json | 4 ++-- compiled-contracts/ProofOfEfficiencyMock.json | 4 ++-- compiled-contracts/TokenWrapped.json | 4 ++-- package.json | 2 +- 11 files changed, 21 insertions(+), 21 deletions(-) diff --git a/compiled-contracts/Bridge.json b/compiled-contracts/Bridge.json index 8e1df7d9f..80005225e 100644 --- a/compiled-contracts/Bridge.json +++ b/compiled-contracts/Bridge.json @@ -776,8 +776,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5061584f806100206000396000f3fe608060405260043610620001db5760003560e01c806381b1c17411620000ff578063d96a15f71162000095578063e7a5b4ea116200006c578063e7a5b4ea1462000658578063ed6be5c9146200067d578063f2fde38b1462000694578063ff634ed714620006b957600080fd5b8063d96a15f714620005f5578063dbc16976146200060c578063e7375881146200062457600080fd5b8063a08e8a0811620000d6578063a08e8a08146200054f578063aaa13cc21462000579578063bab161bf146200059e578063d02103ca14620005d357600080fd5b806381b1c17414620004d35780638da5cb5b146200050d5780638f611519146200052d57600080fd5b80633ae05047116200017557806346385549116200014c57806346385549146200044c578063655595401462000471578063715018a614620004965780637b6323c114620004ae57600080fd5b80633ae05047146200032e5780633da8168214620003465780633e197043146200036b57600080fd5b80632072f6c511620001b65780632072f6c5146200025157806322e95f2c14620002695780632dfdf0b514620002a7578063318aee3d14620002bf57600080fd5b80630871e97114620001e05780630e1da6c314620001f957806315064c961462000224575b600080fd5b620001f7620001f13660046200316c565b620006d0565b005b3480156200020657600080fd5b5062000211608d5481565b6040519081526020015b60405180910390f35b3480156200023157600080fd5b50602254620002409060ff1681565b60405190151581526020016200021b565b3480156200025e57600080fd5b50620001f762000c7a565b3480156200027657600080fd5b506200028e62000288366004620031f9565b62000d2e565b6040516001600160a01b0390911681526020016200021b565b348015620002b457600080fd5b506200021160215481565b348015620002cc57600080fd5b5062000309620002de36600462003235565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200021b565b3480156200033b57600080fd5b506200021162000db1565b3480156200035357600080fd5b5062000240620003653660046200333d565b62000ea4565b3480156200037857600080fd5b50620002116200038a366004620033bb565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200045957600080fd5b50620001f76200046b366004620034cc565b62000fa6565b3480156200047e57600080fd5b50620001f762000490366004620035b3565b6200122c565b348015620004a357600080fd5b50620001f762001412565b348015620004bb57600080fd5b50620001f7620004cd366004620034cc565b62001428565b348015620004e057600080fd5b506200028e620004f236600462003609565b6089602052600090815260409020546001600160a01b031681565b3480156200051a57600080fd5b506055546001600160a01b03166200028e565b3480156200053a57600080fd5b50608c546200028e906001600160a01b031681565b3480156200055c57600080fd5b5062000566600081565b60405160ff90911681526020016200021b565b3480156200058657600080fd5b506200028e6200059836600462003623565b620019ea565b348015620005ab57600080fd5b50608754620005bd9063ffffffff1681565b60405163ffffffff90911681526020016200021b565b348015620005e057600080fd5b50608b546200028e906001600160a01b031681565b620001f762000606366004620036d7565b62001b56565b3480156200061957600080fd5b50620001f762001e0a565b3480156200063157600080fd5b50620002406200064336600462003609565b60886020526000908152604090205460ff1681565b3480156200066557600080fd5b50620001f76200067736600462003609565b62001ebc565b3480156200068a57600080fd5b50620005bd600081565b348015620006a157600080fd5b50620001f7620006b336600462003235565b62001f01565b348015620006c657600080fd5b5062000566600181565b60225460ff1615620007755760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60875463ffffffff90811690861603620007f85760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b60008060606001600160a01b0389166200088d57853414620008835760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200076c565b6000915062000b17565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000974576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af11580156200093b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200096191906200374e565b5060208101518151909450925062000b15565b84156200098957620009898a88888862001f97565b620009a06001600160a01b038b1633308a620025bc565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620009f7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a219190810190620037e9565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000a60573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a8a9190810190620037e9565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ac9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aef919062003822565b60405160200162000b039392919062003870565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162000b59989796959493929190620038ad565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000c019062002675565b608b546001600160a01b03166333d6247d62000c1c62000db1565b6040518263ffffffff1660e01b815260040162000c3b91815260200190565b600060405180830381600087803b15801562000c5657600080fd5b505af115801562000c6b573d6000803e3d6000fd5b50505050505050505050505050565b608c546001600160a01b0316331462000d225760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c620027d9565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b602154600090819081805b602081101562000e9b578260011660010362000e1c576001816020811062000de85762000de862003919565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000e49565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000e5660028462003977565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000e9290620039b3565b91505062000dbc565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000f97578160011660010362000f215786818151811062000edf5762000edf62003919565b60200260200101518360405160200162000f03929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000f73565b8287828151811062000f375762000f3762003919565b602002602001015160405160200162000f5a929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000f8060028362003977565b91508062000f8e81620039b3565b91505062000eb4565b5050821490505b949350505050565b60225460ff1615620010475760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6200105d8a8a8a8a8a8a8a8a8a8a6001620028b2565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b038516908490620010a09089908b908790602401620039ee565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001105919062003a27565b60006040518083038185875af1925050503d806000811462001144576040519150601f19603f3d011682016040523d82523d6000602084013e62001149565b606091505b5050905080620011c15760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff16158080156200124d5750600054600160ff909116105b80620012695750303b15801562001269575060005460ff166001145b620012dd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200076c565b6000805460ff1916600117905580156200131e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d829055620013a762002c65565b80156200140b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6200141c62002cef565b62000d2c600062002d4b565b60225460ff1615620014c95760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b620014df8a8a8a8a8a8a8a8a8a8a6000620028b2565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620015fe57604080516000808252602082019092526001600160a01b0385169084906040516200153a919062003a27565b60006040518083038185875af1925050503d806000811462001579576040519150601f19603f3d011682016040523d82523d6000602084013e6200157e565b606091505b5050905080620015f75760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c45440000000000000000000000000000000000000000000000000060648201526084016200076c565b5062001980565b60875463ffffffff908116908716036200162e57620016286001600160a01b038616848462002db5565b62001980565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620018ec57600080600085806020019051810190620016ce919062003a45565b925092509250600085848484604051620016e890620030d5565b620016f69392919062003870565b8190604051809103906000f590508015801562001717573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001785573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017ab91906200374e565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620018da9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200197d565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001955573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200197b91906200374e565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162001a6d90620030d5565b601f1982820381018352601f90910116604081905262001a9a908d908d908d908d908d9060200162003af1565b60408051601f198184030181529082905262001aba929160200162003b32565b6040516020818303038152906040528051906020012060405160200162001b3094939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff161562001bf75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b60875463ffffffff9081169084160362001c7a5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b9262001cc79260019263ffffffff9092169133918991899134918a9190620038ad565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d850152346051850152607180850192909252805180850390920182526091909301909252815191012062001d979062002675565b608b546001600160a01b03166333d6247d62001db262000db1565b6040518263ffffffff1660e01b815260040162001dd191815260200190565b600060405180830381600087803b15801562001dec57600080fd5b505af115801562001e01573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001eb25760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c62002e00565b62001ec662002cef565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001f0b62002cef565b6001600160a01b03811662001f895760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016200076c565b62001f948162002d4b565b50565b600062001fda83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002eaf92505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620022dc5760008080808080806200203d896004818d62003b65565b8101906200204c919062003b91565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620020e35760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0386163014620021635760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b8a8514620021da5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002288919062003a27565b6000604051808303816000865af19150503d8060008114620022c7576040519150601f19603f3d011682016040523d82523d6000602084013e620022cc565b606091505b505050505050505050506200140b565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c00000000000000000000000000000000000000000000000000000000146200236f5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200076c565b600080808080808080620023878a6004818e62003b65565b81019062002396919062003bec565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200242f5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0387163014620024af5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002566919062003a27565b6000604051808303816000865af19150503d8060008114620025a5576040519150601f19603f3d011682016040523d82523d6000602084013e620025aa565b606091505b50505050505050505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526200266f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002eb6565b50505050565b806001620026866020600262003db1565b62002692919062003dbf565b602154106200270a5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200076c565b6001602160008282546200271f919062003dd9565b909155505060215460005b6020811015620027c957816001166001036200275f57826001826020811062002757576200275762003919565b015550505050565b6001816020811062002775576200277562003919565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620027b2919062003977565b915080620027c081620039b3565b9150506200272a565b50620027d462003df4565b505050565b60225460ff16156200287a5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b63ffffffff8a1660009081526088602052604090205460ff16156200293f5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af1158015620029cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620029f2919062003e23565b9050801580159062002a115750608d5462002a0e824262003dbf565b10155b62002aab5760405162461bcd60e51b815260206004820152604260248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c49445f4f525f4e4f545f5945545f434c41494d414260648201527f4c45000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b60875463ffffffff87811691161462002b2d5760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000000060648201526084016200076c565b60875460009063ffffffff1662002b4657508862002b49565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d82015260518101899052607180820193909352815180820390930183526091019052805191012062002c17908e8e63ffffffff168462000ea4565b62000c6b5760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c494460448201526064016200076c565b600054610100900460ff1662002ce45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200076c565b62000d2c3362002d4b565b6055546001600160a01b0316331462000d2c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200076c565b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620027d49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016200260a565b60225460ff1662002e7a5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016200076c565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002f0d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662002fa29092919063ffffffff16565b805190915015620027d4578080602001905181019062002f2e91906200374e565b620027d45760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200076c565b606062000f9e848460008585600080866001600160a01b0316858760405162002fcc919062003a27565b60006040518083038185875af1925050503d80600081146200300b576040519150601f19603f3d011682016040523d82523d6000602084013e62003010565b606091505b509150915062003023878383876200302e565b979650505050505050565b60608315620030a25782516000036200309a576001600160a01b0385163b6200309a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200076c565b508162000f9e565b62000f9e8383815115620030b95781518083602001fd5b8060405162461bcd60e51b81526004016200076c919062003e3d565b6119c78062003e5383390190565b6001600160a01b038116811462001f9457600080fd5b80356200310681620030e3565b919050565b803563ffffffff811681146200310657600080fd5b60008083601f8401126200313357600080fd5b50813567ffffffffffffffff8111156200314c57600080fd5b6020830191508360208285010111156200316557600080fd5b9250929050565b60008060008060008060a087890312156200318657600080fd5b86356200319381620030e3565b9550620031a3602088016200310b565b94506040870135620031b581620030e3565b935060608701359250608087013567ffffffffffffffff811115620031d957600080fd5b620031e789828a0162003120565b979a9699509497509295939492505050565b600080604083850312156200320d57600080fd5b62003218836200310b565b915060208301356200322a81620030e3565b809150509250929050565b6000602082840312156200324857600080fd5b81356200325581620030e3565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620032b757620032b76200325c565b604052919050565b600082601f830112620032d157600080fd5b8135602067ffffffffffffffff821115620032f057620032f06200325c565b8160051b620033018282016200328b565b92835284810182019282810190878511156200331c57600080fd5b83870192505b84831015620030235782358252918301919083019062003322565b600080600080608085870312156200335457600080fd5b84359350602085013567ffffffffffffffff808211156200337457600080fd5b6200338288838901620032bf565b94506040870135915080821682146200339a57600080fd5b509396929550929360600135925050565b60ff8116811462001f9457600080fd5b600080600080600080600060e0888a031215620033d757600080fd5b8735620033e481620033ab565b9650620033f4602089016200310b565b955060408801356200340681620030e3565b945062003416606089016200310b565b935060808801356200342881620030e3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200346257620034626200325c565b50601f01601f191660200190565b600082601f8301126200348257600080fd5b813562003499620034938262003445565b6200328b565b818152846020838601011115620034af57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620034ed57600080fd5b8a3567ffffffffffffffff808211156200350657600080fd5b620035148e838f01620032bf565b9b506200352460208e016200310b565b9a5060408d0135995060608d013598506200354260808e016200310b565b97506200355260a08e01620030f9565b96506200356260c08e016200310b565b95506200357260e08e01620030f9565b94506101008d013593506101208d01359150808211156200359257600080fd5b50620035a18d828e0162003470565b9150509295989b9194979a5092959850565b60008060008060808587031215620035ca57600080fd5b620035d5856200310b565b93506020850135620035e781620030e3565b92506040850135620035f981620030e3565b9396929550929360600135925050565b6000602082840312156200361c57600080fd5b5035919050565b600080600080600080600060a0888a0312156200363f57600080fd5b6200364a886200310b565b965060208801356200365c81620030e3565b9550604088013567ffffffffffffffff808211156200367a57600080fd5b620036888b838c0162003120565b909750955060608a0135915080821115620036a257600080fd5b50620036b18a828b0162003120565b9094509250506080880135620036c781620033ab565b8091505092959891949750929550565b600080600060608486031215620036ed57600080fd5b620036f8846200310b565b925060208401356200370a81620030e3565b9150604084013567ffffffffffffffff8111156200372757600080fd5b620037358682870162003470565b9150509250925092565b801515811462001f9457600080fd5b6000602082840312156200376157600080fd5b815162003255816200373f565b60005b838110156200378b57818101518382015260200162003771565b838111156200266f5750506000910152565b600082601f830112620037af57600080fd5b8151620037c0620034938262003445565b818152846020838601011115620037d657600080fd5b62000f9e8260208301602087016200376e565b600060208284031215620037fc57600080fd5b815167ffffffffffffffff8111156200381457600080fd5b62000f9e848285016200379d565b6000602082840312156200383557600080fd5b81516200325581620033ab565b600081518084526200385c8160208601602086016200376e565b601f01601f19169290920160200192915050565b60608152600062003885606083018662003842565b828103602084015262003899818662003842565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620039008285018762003842565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082620039ae577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620039e757620039e762003948565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003a1e606083018462003842565b95945050505050565b6000825162003a3b8184602087016200376e565b9190910192915050565b60008060006060848603121562003a5b57600080fd5b835167ffffffffffffffff8082111562003a7457600080fd5b62003a82878388016200379d565b9450602086015191508082111562003a9957600080fd5b5062003aa8868287016200379d565b925050604084015162003abb81620033ab565b809150509250925092565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003b0760608301878962003ac6565b828103602084015262003b1c81868862003ac6565b91505060ff831660408301529695505050505050565b6000835162003b468184602088016200376e565b83519083019062003b5c8183602088016200376e565b01949350505050565b6000808585111562003b7657600080fd5b8386111562003b8457600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003bad57600080fd5b873562003bba81620030e3565b9650602088013562003bcc81620030e3565b9550604088013594506060880135935060808801356200342881620033ab565b600080600080600080600080610100898b03121562003c0a57600080fd5b883562003c1781620030e3565b9750602089013562003c2981620030e3565b96506040890135955060608901359450608089013562003c49816200373f565b935060a089013562003c5b81620033ab565b979a969950949793969295929450505060c08201359160e0013590565b600181815b8085111562003cd757817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003cbb5762003cbb62003948565b8085161562003cc957918102915b93841c939080029062003c7d565b509250929050565b60008262003cf05750600162000dab565b8162003cff5750600062000dab565b816001811462003d18576002811462003d235762003d43565b600191505062000dab565b60ff84111562003d375762003d3762003948565b50506001821b62000dab565b5060208310610133831016604e8410600b841016171562003d68575081810a62000dab565b62003d74838362003c78565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003da95762003da962003948565b029392505050565b600062003255838362003cdf565b60008282101562003dd45762003dd462003948565b500390565b6000821982111562003def5762003def62003948565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60006020828403121562003e3657600080fd5b5051919050565b6020815260006200325560208301846200384256fe60c06040523480156200001157600080fd5b50604051620019c7380380620019c78339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161150d620004ba600039600061053001526000818161036f01526104fa015261150d6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b604051610191919061123b565b60405180910390f35b6101ad6101a83660046112d7565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad610204366004611301565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad6102763660046112d7565b610552565b6101ad6102893660046112d7565b61059e565b6101c161029c36600461133d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d236600461133d565b60066020526000908152604090205481565b610184610645565b6101ad6102fa3660046112d7565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad6103523660046112d7565b6106ed565b6101ad6103653660046112d7565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f36600461135f565b6107b2565b005b6101c16103b43660046113d2565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043790611405565b80601f016020809104026020016040519081016040528092919081815260200182805461046390611405565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f12565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611487565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c8383610fda565b50600192915050565b60606004805461043790611405565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c83836110b3565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866108818361149f565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f3d610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff821661103d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b806002600082825461104f9190611487565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff821661113c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156111d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610c27565b600060208083528351808285015260005b818110156112685785810183015185820160400152820161124c565b8181111561127a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112d257600080fd5b919050565b600080604083850312156112ea57600080fd5b6112f3836112ae565b946020939093013593505050565b60008060006060848603121561131657600080fd5b61131f846112ae565b925061132d602085016112ae565b9150604084013590509250925092565b60006020828403121561134f57600080fd5b611358826112ae565b9392505050565b600080600080600080600060e0888a03121561137a57600080fd5b611383886112ae565b9650611391602089016112ae565b95506040880135945060608801359350608088013560ff811681146113b557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156113e557600080fd5b6113ee836112ae565b91506113fc602084016112ae565b90509250929050565b600181811c9082168061141957607f821691505b602082108103611452577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561149a5761149a611458565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036114d0576114d0611458565b506001019056fea264697066735822122094134962e5fa2f6357086a2590b7f3a754d340b16e5312664d82a308bc23a0df64736f6c634300080f0033a26469706673582212207d802e4c153f08d52b883999d6ed4e590e1894e2db82359c2f8cde0298f066c464736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001db5760003560e01c806381b1c17411620000ff578063d96a15f71162000095578063e7a5b4ea116200006c578063e7a5b4ea1462000658578063ed6be5c9146200067d578063f2fde38b1462000694578063ff634ed714620006b957600080fd5b8063d96a15f714620005f5578063dbc16976146200060c578063e7375881146200062457600080fd5b8063a08e8a0811620000d6578063a08e8a08146200054f578063aaa13cc21462000579578063bab161bf146200059e578063d02103ca14620005d357600080fd5b806381b1c17414620004d35780638da5cb5b146200050d5780638f611519146200052d57600080fd5b80633ae05047116200017557806346385549116200014c57806346385549146200044c578063655595401462000471578063715018a614620004965780637b6323c114620004ae57600080fd5b80633ae05047146200032e5780633da8168214620003465780633e197043146200036b57600080fd5b80632072f6c511620001b65780632072f6c5146200025157806322e95f2c14620002695780632dfdf0b514620002a7578063318aee3d14620002bf57600080fd5b80630871e97114620001e05780630e1da6c314620001f957806315064c961462000224575b600080fd5b620001f7620001f13660046200316c565b620006d0565b005b3480156200020657600080fd5b5062000211608d5481565b6040519081526020015b60405180910390f35b3480156200023157600080fd5b50602254620002409060ff1681565b60405190151581526020016200021b565b3480156200025e57600080fd5b50620001f762000c7a565b3480156200027657600080fd5b506200028e62000288366004620031f9565b62000d2e565b6040516001600160a01b0390911681526020016200021b565b348015620002b457600080fd5b506200021160215481565b348015620002cc57600080fd5b5062000309620002de36600462003235565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200021b565b3480156200033b57600080fd5b506200021162000db1565b3480156200035357600080fd5b5062000240620003653660046200333d565b62000ea4565b3480156200037857600080fd5b50620002116200038a366004620033bb565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200045957600080fd5b50620001f76200046b366004620034cc565b62000fa6565b3480156200047e57600080fd5b50620001f762000490366004620035b3565b6200122c565b348015620004a357600080fd5b50620001f762001412565b348015620004bb57600080fd5b50620001f7620004cd366004620034cc565b62001428565b348015620004e057600080fd5b506200028e620004f236600462003609565b6089602052600090815260409020546001600160a01b031681565b3480156200051a57600080fd5b506055546001600160a01b03166200028e565b3480156200053a57600080fd5b50608c546200028e906001600160a01b031681565b3480156200055c57600080fd5b5062000566600081565b60405160ff90911681526020016200021b565b3480156200058657600080fd5b506200028e6200059836600462003623565b620019ea565b348015620005ab57600080fd5b50608754620005bd9063ffffffff1681565b60405163ffffffff90911681526020016200021b565b348015620005e057600080fd5b50608b546200028e906001600160a01b031681565b620001f762000606366004620036d7565b62001b56565b3480156200061957600080fd5b50620001f762001e0a565b3480156200063157600080fd5b50620002406200064336600462003609565b60886020526000908152604090205460ff1681565b3480156200066557600080fd5b50620001f76200067736600462003609565b62001ebc565b3480156200068a57600080fd5b50620005bd600081565b348015620006a157600080fd5b50620001f7620006b336600462003235565b62001f01565b348015620006c657600080fd5b5062000566600181565b60225460ff1615620007755760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60875463ffffffff90811690861603620007f85760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b60008060606001600160a01b0389166200088d57853414620008835760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200076c565b6000915062000b17565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000974576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af11580156200093b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200096191906200374e565b5060208101518151909450925062000b15565b84156200098957620009898a88888862001f97565b620009a06001600160a01b038b1633308a620025bc565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620009f7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a219190810190620037e9565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000a60573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a8a9190810190620037e9565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ac9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aef919062003822565b60405160200162000b039392919062003870565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162000b59989796959493929190620038ad565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000c019062002675565b608b546001600160a01b03166333d6247d62000c1c62000db1565b6040518263ffffffff1660e01b815260040162000c3b91815260200190565b600060405180830381600087803b15801562000c5657600080fd5b505af115801562000c6b573d6000803e3d6000fd5b50505050505050505050505050565b608c546001600160a01b0316331462000d225760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c620027d9565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b602154600090819081805b602081101562000e9b578260011660010362000e1c576001816020811062000de85762000de862003919565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000e49565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000e5660028462003977565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000e9290620039b3565b91505062000dbc565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000f97578160011660010362000f215786818151811062000edf5762000edf62003919565b60200260200101518360405160200162000f03929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000f73565b8287828151811062000f375762000f3762003919565b602002602001015160405160200162000f5a929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000f8060028362003977565b91508062000f8e81620039b3565b91505062000eb4565b5050821490505b949350505050565b60225460ff1615620010475760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6200105d8a8a8a8a8a8a8a8a8a8a6001620028b2565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b038516908490620010a09089908b908790602401620039ee565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001105919062003a27565b60006040518083038185875af1925050503d806000811462001144576040519150601f19603f3d011682016040523d82523d6000602084013e62001149565b606091505b5050905080620011c15760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff16158080156200124d5750600054600160ff909116105b80620012695750303b15801562001269575060005460ff166001145b620012dd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200076c565b6000805460ff1916600117905580156200131e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d829055620013a762002c65565b80156200140b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6200141c62002cef565b62000d2c600062002d4b565b60225460ff1615620014c95760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b620014df8a8a8a8a8a8a8a8a8a8a6000620028b2565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620015fe57604080516000808252602082019092526001600160a01b0385169084906040516200153a919062003a27565b60006040518083038185875af1925050503d806000811462001579576040519150601f19603f3d011682016040523d82523d6000602084013e6200157e565b606091505b5050905080620015f75760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c45440000000000000000000000000000000000000000000000000060648201526084016200076c565b5062001980565b60875463ffffffff908116908716036200162e57620016286001600160a01b038616848462002db5565b62001980565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620018ec57600080600085806020019051810190620016ce919062003a45565b925092509250600085848484604051620016e890620030d5565b620016f69392919062003870565b8190604051809103906000f590508015801562001717573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001785573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017ab91906200374e565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620018da9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200197d565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001955573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200197b91906200374e565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162001a6d90620030d5565b601f1982820381018352601f90910116604081905262001a9a908d908d908d908d908d9060200162003af1565b60408051601f198184030181529082905262001aba929160200162003b32565b6040516020818303038152906040528051906020012060405160200162001b3094939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff161562001bf75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b60875463ffffffff9081169084160362001c7a5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b9262001cc79260019263ffffffff9092169133918991899134918a9190620038ad565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d850152346051850152607180850192909252805180850390920182526091909301909252815191012062001d979062002675565b608b546001600160a01b03166333d6247d62001db262000db1565b6040518263ffffffff1660e01b815260040162001dd191815260200190565b600060405180830381600087803b15801562001dec57600080fd5b505af115801562001e01573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001eb25760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c62002e00565b62001ec662002cef565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001f0b62002cef565b6001600160a01b03811662001f895760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016200076c565b62001f948162002d4b565b50565b600062001fda83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002eaf92505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620022dc5760008080808080806200203d896004818d62003b65565b8101906200204c919062003b91565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620020e35760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0386163014620021635760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b8a8514620021da5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002288919062003a27565b6000604051808303816000865af19150503d8060008114620022c7576040519150601f19603f3d011682016040523d82523d6000602084013e620022cc565b606091505b505050505050505050506200140b565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c00000000000000000000000000000000000000000000000000000000146200236f5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200076c565b600080808080808080620023878a6004818e62003b65565b81019062002396919062003bec565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200242f5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0387163014620024af5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002566919062003a27565b6000604051808303816000865af19150503d8060008114620025a5576040519150601f19603f3d011682016040523d82523d6000602084013e620025aa565b606091505b50505050505050505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526200266f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002eb6565b50505050565b806001620026866020600262003db1565b62002692919062003dbf565b602154106200270a5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200076c565b6001602160008282546200271f919062003dd9565b909155505060215460005b6020811015620027c957816001166001036200275f57826001826020811062002757576200275762003919565b015550505050565b6001816020811062002775576200277562003919565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620027b2919062003977565b915080620027c081620039b3565b9150506200272a565b50620027d462003df4565b505050565b60225460ff16156200287a5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b63ffffffff8a1660009081526088602052604090205460ff16156200293f5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af1158015620029cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620029f2919062003e23565b9050801580159062002a115750608d5462002a0e824262003dbf565b10155b62002aab5760405162461bcd60e51b815260206004820152604260248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c49445f4f525f4e4f545f5945545f434c41494d414260648201527f4c45000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b60875463ffffffff87811691161462002b2d5760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000000060648201526084016200076c565b60875460009063ffffffff1662002b4657508862002b49565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d82015260518101899052607180820193909352815180820390930183526091019052805191012062002c17908e8e63ffffffff168462000ea4565b62000c6b5760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c494460448201526064016200076c565b600054610100900460ff1662002ce45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200076c565b62000d2c3362002d4b565b6055546001600160a01b0316331462000d2c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200076c565b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620027d49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016200260a565b60225460ff1662002e7a5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016200076c565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002f0d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662002fa29092919063ffffffff16565b805190915015620027d4578080602001905181019062002f2e91906200374e565b620027d45760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200076c565b606062000f9e848460008585600080866001600160a01b0316858760405162002fcc919062003a27565b60006040518083038185875af1925050503d80600081146200300b576040519150601f19603f3d011682016040523d82523d6000602084013e62003010565b606091505b509150915062003023878383876200302e565b979650505050505050565b60608315620030a25782516000036200309a576001600160a01b0385163b6200309a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200076c565b508162000f9e565b62000f9e8383815115620030b95781518083602001fd5b8060405162461bcd60e51b81526004016200076c919062003e3d565b6119c78062003e5383390190565b6001600160a01b038116811462001f9457600080fd5b80356200310681620030e3565b919050565b803563ffffffff811681146200310657600080fd5b60008083601f8401126200313357600080fd5b50813567ffffffffffffffff8111156200314c57600080fd5b6020830191508360208285010111156200316557600080fd5b9250929050565b60008060008060008060a087890312156200318657600080fd5b86356200319381620030e3565b9550620031a3602088016200310b565b94506040870135620031b581620030e3565b935060608701359250608087013567ffffffffffffffff811115620031d957600080fd5b620031e789828a0162003120565b979a9699509497509295939492505050565b600080604083850312156200320d57600080fd5b62003218836200310b565b915060208301356200322a81620030e3565b809150509250929050565b6000602082840312156200324857600080fd5b81356200325581620030e3565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620032b757620032b76200325c565b604052919050565b600082601f830112620032d157600080fd5b8135602067ffffffffffffffff821115620032f057620032f06200325c565b8160051b620033018282016200328b565b92835284810182019282810190878511156200331c57600080fd5b83870192505b84831015620030235782358252918301919083019062003322565b600080600080608085870312156200335457600080fd5b84359350602085013567ffffffffffffffff808211156200337457600080fd5b6200338288838901620032bf565b94506040870135915080821682146200339a57600080fd5b509396929550929360600135925050565b60ff8116811462001f9457600080fd5b600080600080600080600060e0888a031215620033d757600080fd5b8735620033e481620033ab565b9650620033f4602089016200310b565b955060408801356200340681620030e3565b945062003416606089016200310b565b935060808801356200342881620030e3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200346257620034626200325c565b50601f01601f191660200190565b600082601f8301126200348257600080fd5b813562003499620034938262003445565b6200328b565b818152846020838601011115620034af57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620034ed57600080fd5b8a3567ffffffffffffffff808211156200350657600080fd5b620035148e838f01620032bf565b9b506200352460208e016200310b565b9a5060408d0135995060608d013598506200354260808e016200310b565b97506200355260a08e01620030f9565b96506200356260c08e016200310b565b95506200357260e08e01620030f9565b94506101008d013593506101208d01359150808211156200359257600080fd5b50620035a18d828e0162003470565b9150509295989b9194979a5092959850565b60008060008060808587031215620035ca57600080fd5b620035d5856200310b565b93506020850135620035e781620030e3565b92506040850135620035f981620030e3565b9396929550929360600135925050565b6000602082840312156200361c57600080fd5b5035919050565b600080600080600080600060a0888a0312156200363f57600080fd5b6200364a886200310b565b965060208801356200365c81620030e3565b9550604088013567ffffffffffffffff808211156200367a57600080fd5b620036888b838c0162003120565b909750955060608a0135915080821115620036a257600080fd5b50620036b18a828b0162003120565b9094509250506080880135620036c781620033ab565b8091505092959891949750929550565b600080600060608486031215620036ed57600080fd5b620036f8846200310b565b925060208401356200370a81620030e3565b9150604084013567ffffffffffffffff8111156200372757600080fd5b620037358682870162003470565b9150509250925092565b801515811462001f9457600080fd5b6000602082840312156200376157600080fd5b815162003255816200373f565b60005b838110156200378b57818101518382015260200162003771565b838111156200266f5750506000910152565b600082601f830112620037af57600080fd5b8151620037c0620034938262003445565b818152846020838601011115620037d657600080fd5b62000f9e8260208301602087016200376e565b600060208284031215620037fc57600080fd5b815167ffffffffffffffff8111156200381457600080fd5b62000f9e848285016200379d565b6000602082840312156200383557600080fd5b81516200325581620033ab565b600081518084526200385c8160208601602086016200376e565b601f01601f19169290920160200192915050565b60608152600062003885606083018662003842565b828103602084015262003899818662003842565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620039008285018762003842565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082620039ae577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620039e757620039e762003948565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003a1e606083018462003842565b95945050505050565b6000825162003a3b8184602087016200376e565b9190910192915050565b60008060006060848603121562003a5b57600080fd5b835167ffffffffffffffff8082111562003a7457600080fd5b62003a82878388016200379d565b9450602086015191508082111562003a9957600080fd5b5062003aa8868287016200379d565b925050604084015162003abb81620033ab565b809150509250925092565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003b0760608301878962003ac6565b828103602084015262003b1c81868862003ac6565b91505060ff831660408301529695505050505050565b6000835162003b468184602088016200376e565b83519083019062003b5c8183602088016200376e565b01949350505050565b6000808585111562003b7657600080fd5b8386111562003b8457600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003bad57600080fd5b873562003bba81620030e3565b9650602088013562003bcc81620030e3565b9550604088013594506060880135935060808801356200342881620033ab565b600080600080600080600080610100898b03121562003c0a57600080fd5b883562003c1781620030e3565b9750602089013562003c2981620030e3565b96506040890135955060608901359450608089013562003c49816200373f565b935060a089013562003c5b81620033ab565b979a969950949793969295929450505060c08201359160e0013590565b600181815b8085111562003cd757817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003cbb5762003cbb62003948565b8085161562003cc957918102915b93841c939080029062003c7d565b509250929050565b60008262003cf05750600162000dab565b8162003cff5750600062000dab565b816001811462003d18576002811462003d235762003d43565b600191505062000dab565b60ff84111562003d375762003d3762003948565b50506001821b62000dab565b5060208310610133831016604e8410600b841016171562003d68575081810a62000dab565b62003d74838362003c78565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003da95762003da962003948565b029392505050565b600062003255838362003cdf565b60008282101562003dd45762003dd462003948565b500390565b6000821982111562003def5762003def62003948565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60006020828403121562003e3657600080fd5b5051919050565b6020815260006200325560208301846200384256fe60c06040523480156200001157600080fd5b50604051620019c7380380620019c78339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161150d620004ba600039600061053001526000818161036f01526104fa015261150d6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b604051610191919061123b565b60405180910390f35b6101ad6101a83660046112d7565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad610204366004611301565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad6102763660046112d7565b610552565b6101ad6102893660046112d7565b61059e565b6101c161029c36600461133d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d236600461133d565b60066020526000908152604090205481565b610184610645565b6101ad6102fa3660046112d7565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad6103523660046112d7565b6106ed565b6101ad6103653660046112d7565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f36600461135f565b6107b2565b005b6101c16103b43660046113d2565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043790611405565b80601f016020809104026020016040519081016040528092919081815260200182805461046390611405565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f12565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611487565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c8383610fda565b50600192915050565b60606004805461043790611405565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c83836110b3565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866108818361149f565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f3d610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff821661103d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b806002600082825461104f9190611487565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff821661113c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156111d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610c27565b600060208083528351808285015260005b818110156112685785810183015185820160400152820161124c565b8181111561127a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112d257600080fd5b919050565b600080604083850312156112ea57600080fd5b6112f3836112ae565b946020939093013593505050565b60008060006060848603121561131657600080fd5b61131f846112ae565b925061132d602085016112ae565b9150604084013590509250925092565b60006020828403121561134f57600080fd5b611358826112ae565b9392505050565b600080600080600080600060e0888a03121561137a57600080fd5b611383886112ae565b9650611391602089016112ae565b95506040880135945060608801359350608088013560ff811681146113b557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156113e557600080fd5b6113ee836112ae565b91506113fc602084016112ae565b90509250929050565b600181811c9082168061141957607f821691505b602082108103611452577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561149a5761149a611458565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036114d0576114d0611458565b506001019056fea264697066735822122094134962e5fa2f6357086a2590b7f3a754d340b16e5312664d82a308bc23a0df64736f6c634300080f0033a26469706673582212207d802e4c153f08d52b883999d6ed4e590e1894e2db82359c2f8cde0298f066c464736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50615977806100206000396000f3fe608060405260043610620001db5760003560e01c806381b1c17411620000ff578063d96a15f71162000095578063e7a5b4ea116200006c578063e7a5b4ea1462000658578063ed6be5c9146200067d578063f2fde38b1462000694578063ff634ed714620006b957600080fd5b8063d96a15f714620005f5578063dbc16976146200060c578063e7375881146200062457600080fd5b8063a08e8a0811620000d6578063a08e8a08146200054f578063aaa13cc21462000579578063bab161bf146200059e578063d02103ca14620005d357600080fd5b806381b1c17414620004d35780638da5cb5b146200050d5780638f611519146200052d57600080fd5b80633ae05047116200017557806346385549116200014c57806346385549146200044c578063655595401462000471578063715018a614620004965780637b6323c114620004ae57600080fd5b80633ae05047146200032e5780633da8168214620003465780633e197043146200036b57600080fd5b80632072f6c511620001b65780632072f6c5146200025157806322e95f2c14620002695780632dfdf0b514620002a7578063318aee3d14620002bf57600080fd5b80630871e97114620001e05780630e1da6c314620001f957806315064c961462000224575b600080fd5b620001f7620001f1366004620031e2565b620006d0565b005b3480156200020657600080fd5b5062000211608d5481565b6040519081526020015b60405180910390f35b3480156200023157600080fd5b50602254620002409060ff1681565b60405190151581526020016200021b565b3480156200025e57600080fd5b50620001f762000c7a565b3480156200027657600080fd5b506200028e620002883660046200326f565b62000d2e565b6040516001600160a01b0390911681526020016200021b565b348015620002b457600080fd5b506200021160215481565b348015620002cc57600080fd5b5062000309620002de366004620032ab565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200021b565b3480156200033b57600080fd5b506200021162000db1565b3480156200035357600080fd5b506200024062000365366004620033ac565b62000ea4565b3480156200037857600080fd5b50620002116200038a3660046200342a565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200045957600080fd5b50620001f76200046b3660046200353b565b62000fa4565b3480156200047e57600080fd5b50620001f76200049036600462003622565b6200122a565b348015620004a357600080fd5b50620001f762001410565b348015620004bb57600080fd5b50620001f7620004cd3660046200353b565b62001426565b348015620004e057600080fd5b506200028e620004f236600462003678565b6089602052600090815260409020546001600160a01b031681565b3480156200051a57600080fd5b506055546001600160a01b03166200028e565b3480156200053a57600080fd5b50608c546200028e906001600160a01b031681565b3480156200055c57600080fd5b5062000566600081565b60405160ff90911681526020016200021b565b3480156200058657600080fd5b506200028e6200059836600462003692565b620019e8565b348015620005ab57600080fd5b50608754620005bd9063ffffffff1681565b60405163ffffffff90911681526020016200021b565b348015620005e057600080fd5b50608b546200028e906001600160a01b031681565b620001f76200060636600462003746565b62001b54565b3480156200061957600080fd5b50620001f762001e08565b3480156200063157600080fd5b50620002406200064336600462003678565b60886020526000908152604090205460ff1681565b3480156200066557600080fd5b50620001f76200067736600462003678565b62001eba565b3480156200068a57600080fd5b50620005bd600081565b348015620006a157600080fd5b50620001f7620006b3366004620032ab565b62001eff565b348015620006c657600080fd5b5062000566600181565b60225460ff1615620007755760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60875463ffffffff90811690861603620007f85760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b60008060606001600160a01b0389166200088d57853414620008835760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200076c565b6000915062000b17565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000974576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af11580156200093b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009619190620037bd565b5060208101518151909450925062000b15565b84156200098957620009898a88888862001f95565b620009a06001600160a01b038b1633308a620025ba565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620009f7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a21919081019062003860565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000a60573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a8a919081019062003860565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ac9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aef919062003899565b60405160200162000b0393929190620038e7565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162000b5998979695949392919062003924565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000c019062002673565b608b546001600160a01b03166333d6247d62000c1c62000db1565b6040518263ffffffff1660e01b815260040162000c3b91815260200190565b600060405180830381600087803b15801562000c5657600080fd5b505af115801562000c6b573d6000803e3d6000fd5b50505050505050505050505050565b608c546001600160a01b0316331462000d225760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c620027d7565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b602154600090819081805b602081101562000e9b578260011660010362000e1c576001816020811062000de85762000de862003990565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000e49565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000e56600284620039ee565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000e929062003a2a565b91505062000dbc565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000f97578160011660010362000f215786818151811062000edf5762000edf62003990565b60200260200101518360405160200162000f03929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000f73565b8287828151811062000f375762000f3762003990565b602002602001015160405160200162000f5a929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000f80600283620039ee565b91508062000f8e8162003a2a565b91505062000eb4565b5050909114949350505050565b60225460ff1615620010455760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6200105b8a8a8a8a8a8a8a8a8a8a6001620028b0565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b0385169084906200109e9089908b90879060240162003a65565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001103919062003a9e565b60006040518083038185875af1925050503d806000811462001142576040519150601f19603f3d011682016040523d82523d6000602084013e62001147565b606091505b5050905080620011bf5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff16158080156200124b5750600054600160ff909116105b80620012675750303b15801562001267575060005460ff166001145b620012db5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200076c565b6000805460ff1916600117905580156200131c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d829055620013a562002c63565b80156200140957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6200141a62002ced565b62000d2c600062002d49565b60225460ff1615620014c75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b620014dd8a8a8a8a8a8a8a8a8a8a6000620028b0565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620015fc57604080516000808252602082019092526001600160a01b03851690849060405162001538919062003a9e565b60006040518083038185875af1925050503d806000811462001577576040519150601f19603f3d011682016040523d82523d6000602084013e6200157c565b606091505b5050905080620015f55760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c45440000000000000000000000000000000000000000000000000060648201526084016200076c565b506200197e565b60875463ffffffff908116908716036200162c57620016266001600160a01b038616848462002db3565b6200197e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620018ea57600080600085806020019051810190620016cc919062003abc565b925092509250600085848484604051620016e6906200314b565b620016f493929190620038e7565b8190604051809103906000f590508015801562001715573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001783573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017a99190620037bd565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620018d89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200197b565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001953573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019799190620037bd565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162001a6b906200314b565b601f1982820381018352601f90910116604081905262001a98908d908d908d908d908d9060200162003b68565b60408051601f198184030181529082905262001ab8929160200162003ba9565b6040516020818303038152906040528051906020012060405160200162001b2e94939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff161562001bf55760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b60875463ffffffff9081169084160362001c785760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b9262001cc59260019263ffffffff9092169133918991899134918a919062003924565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d850152346051850152607180850192909252805180850390920182526091909301909252815191012062001d959062002673565b608b546001600160a01b03166333d6247d62001db062000db1565b6040518263ffffffff1660e01b815260040162001dcf91815260200190565b600060405180830381600087803b15801562001dea57600080fd5b505af115801562001dff573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001eb05760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c62002dfe565b62001ec462002ced565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001f0962002ced565b6001600160a01b03811662001f875760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016200076c565b62001f928162002d49565b50565b600062001fd883838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002ead92505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620022da5760008080808080806200203b896004818d62003bdc565b8101906200204a919062003c08565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620020e15760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0386163014620021615760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b8a8514620021d85760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002286919062003a9e565b6000604051808303816000865af19150503d8060008114620022c5576040519150601f19603f3d011682016040523d82523d6000602084013e620022ca565b606091505b5050505050505050505062001409565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c00000000000000000000000000000000000000000000000000000000146200236d5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200076c565b600080808080808080620023858a6004818e62003bdc565b81019062002394919062003c63565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200242d5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0387163014620024ad5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002564919062003a9e565b6000604051808303816000865af19150503d8060008114620025a3576040519150601f19603f3d011682016040523d82523d6000602084013e620025a8565b606091505b50505050505050505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526200266d9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002eb4565b50505050565b806001620026846020600262003e28565b62002690919062003e36565b60215410620027085760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200076c565b6001602160008282546200271d919062003e50565b909155505060215460005b6020811015620027c757816001166001036200275d57826001826020811062002755576200275562003990565b015550505050565b6001816020811062002773576200277362003990565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620027b09190620039ee565b915080620027be8162003a2a565b91505062002728565b50620027d262003e6b565b505050565b60225460ff1615620028785760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b63ffffffff8a1660009081526088602052604090205460ff16156200293d5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af1158015620029ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620029f0919062003e9a565b9050801580159062002a0f5750608d5462002a0c824262003e36565b10155b62002aa95760405162461bcd60e51b815260206004820152604260248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c49445f4f525f4e4f545f5945545f434c41494d414260648201527f4c45000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b60875463ffffffff87811691161462002b2b5760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000000060648201526084016200076c565b60875460009063ffffffff1662002b4457508862002b47565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d82015260518101899052607180820193909352815180820390930183526091019052805191012062002c15908e8e63ffffffff168462000ea4565b62000c6b5760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c494460448201526064016200076c565b600054610100900460ff1662002ce25760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200076c565b62000d2c3362002d49565b6055546001600160a01b0316331462000d2c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200076c565b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620027d29084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002608565b60225460ff1662002e785760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016200076c565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002f0b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662002fa09092919063ffffffff16565b805190915015620027d2578080602001905181019062002f2c9190620037bd565b620027d25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200076c565b606062002fb1848460008562002fbb565b90505b9392505050565b606082471015620030355760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016200076c565b6001600160a01b0385163b6200308e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200076c565b600080866001600160a01b03168587604051620030ac919062003a9e565b60006040518083038185875af1925050503d8060008114620030eb576040519150601f19603f3d011682016040523d82523d6000602084013e620030f0565b606091505b5091509150620031028282866200310d565b979650505050505050565b606083156200311e57508162002fb4565b8251156200312f5782518084602001fd5b8160405162461bcd60e51b81526004016200076c919062003eb4565b611a788062003eca83390190565b6001600160a01b038116811462001f9257600080fd5b80356200317c8162003159565b919050565b803563ffffffff811681146200317c57600080fd5b60008083601f840112620031a957600080fd5b50813567ffffffffffffffff811115620031c257600080fd5b602083019150836020828501011115620031db57600080fd5b9250929050565b60008060008060008060a08789031215620031fc57600080fd5b8635620032098162003159565b9550620032196020880162003181565b945060408701356200322b8162003159565b935060608701359250608087013567ffffffffffffffff8111156200324f57600080fd5b6200325d89828a0162003196565b979a9699509497509295939492505050565b600080604083850312156200328357600080fd5b6200328e8362003181565b91506020830135620032a08162003159565b809150509250929050565b600060208284031215620032be57600080fd5b813562002fb48162003159565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620033265762003326620032cb565b604052919050565b600082601f8301126200334057600080fd5b8135602067ffffffffffffffff8211156200335f576200335f620032cb565b8160051b62003370828201620032fa565b92835284810182019282810190878511156200338b57600080fd5b83870192505b84831015620031025782358252918301919083019062003391565b60008060008060808587031215620033c357600080fd5b84359350602085013567ffffffffffffffff80821115620033e357600080fd5b620033f1888389016200332e565b94506040870135915080821682146200340957600080fd5b509396929550929360600135925050565b60ff8116811462001f9257600080fd5b600080600080600080600060e0888a0312156200344657600080fd5b873562003453816200341a565b9650620034636020890162003181565b95506040880135620034758162003159565b9450620034856060890162003181565b93506080880135620034978162003159565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620034d157620034d1620032cb565b50601f01601f191660200190565b600082601f830112620034f157600080fd5b8135620035086200350282620034b4565b620032fa565b8181528460208386010111156200351e57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200355c57600080fd5b8a3567ffffffffffffffff808211156200357557600080fd5b620035838e838f016200332e565b9b506200359360208e0162003181565b9a5060408d0135995060608d01359850620035b160808e0162003181565b9750620035c160a08e016200316f565b9650620035d160c08e0162003181565b9550620035e160e08e016200316f565b94506101008d013593506101208d01359150808211156200360157600080fd5b50620036108d828e01620034df565b9150509295989b9194979a5092959850565b600080600080608085870312156200363957600080fd5b620036448562003181565b93506020850135620036568162003159565b92506040850135620036688162003159565b9396929550929360600135925050565b6000602082840312156200368b57600080fd5b5035919050565b600080600080600080600060a0888a031215620036ae57600080fd5b620036b98862003181565b96506020880135620036cb8162003159565b9550604088013567ffffffffffffffff80821115620036e957600080fd5b620036f78b838c0162003196565b909750955060608a01359150808211156200371157600080fd5b50620037208a828b0162003196565b909450925050608088013562003736816200341a565b8091505092959891949750929550565b6000806000606084860312156200375c57600080fd5b620037678462003181565b92506020840135620037798162003159565b9150604084013567ffffffffffffffff8111156200379657600080fd5b620037a486828701620034df565b9150509250925092565b801515811462001f9257600080fd5b600060208284031215620037d057600080fd5b815162002fb481620037ae565b60005b83811015620037fa578181015183820152602001620037e0565b838111156200266d5750506000910152565b600082601f8301126200381e57600080fd5b81516200382f6200350282620034b4565b8181528460208386010111156200384557600080fd5b62003858826020830160208701620037dd565b949350505050565b6000602082840312156200387357600080fd5b815167ffffffffffffffff8111156200388b57600080fd5b62003858848285016200380c565b600060208284031215620038ac57600080fd5b815162002fb4816200341a565b60008151808452620038d3816020860160208601620037dd565b601f01601f19169290920160200192915050565b606081526000620038fc6060830186620038b9565b8281036020840152620039108186620038b9565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c08501526200397782850187620038b9565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003a25577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003a5e5762003a5e620039bf565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003a956060830184620038b9565b95945050505050565b6000825162003ab2818460208701620037dd565b9190910192915050565b60008060006060848603121562003ad257600080fd5b835167ffffffffffffffff8082111562003aeb57600080fd5b62003af9878388016200380c565b9450602086015191508082111562003b1057600080fd5b5062003b1f868287016200380c565b925050604084015162003b32816200341a565b809150509250925092565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003b7e60608301878962003b3d565b828103602084015262003b9381868862003b3d565b91505060ff831660408301529695505050505050565b6000835162003bbd818460208801620037dd565b83519083019062003bd3818360208801620037dd565b01949350505050565b6000808585111562003bed57600080fd5b8386111562003bfb57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003c2457600080fd5b873562003c318162003159565b9650602088013562003c438162003159565b95506040880135945060608801359350608088013562003497816200341a565b600080600080600080600080610100898b03121562003c8157600080fd5b883562003c8e8162003159565b9750602089013562003ca08162003159565b96506040890135955060608901359450608089013562003cc081620037ae565b935060a089013562003cd2816200341a565b979a969950949793969295929450505060c08201359160e0013590565b600181815b8085111562003d4e57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d325762003d32620039bf565b8085161562003d4057918102915b93841c939080029062003cf4565b509250929050565b60008262003d675750600162000dab565b8162003d765750600062000dab565b816001811462003d8f576002811462003d9a5762003dba565b600191505062000dab565b60ff84111562003dae5762003dae620039bf565b50506001821b62000dab565b5060208310610133831016604e8410600b841016171562003ddf575081810a62000dab565b62003deb838362003cef565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003e205762003e20620039bf565b029392505050565b600062002fb4838362003d56565b60008282101562003e4b5762003e4b620039bf565b500390565b6000821982111562003e665762003e66620039bf565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60006020828403121562003ead57600080fd5b5051919050565b60208152600062002fb46020830184620038b956fe60c06040523480156200001157600080fd5b5060405162001a7838038062001a788339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516115be620004ba600039600061053001526000818161036f01526104fa01526115be6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b60405161019191906112d5565b60405180910390f35b6101ad6101a8366004611371565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad61020436600461139b565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad610276366004611371565b610552565b6101ad610289366004611371565b61059e565b6101c161029c3660046113d7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d23660046113d7565b60066020526000908152604090205481565b610184610645565b6101ad6102fa366004611371565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad610352366004611371565b6106ed565b6101ad610365366004611371565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f3660046113f9565b6107b2565b005b6101c16103b436600461146c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6060600380546104379061149f565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061149f565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f56565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611521565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c838361101e565b50600192915050565b6060600480546104379061149f565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c8383611124565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661088183611539565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ee3908490611521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4991815260200190565b60405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f81610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166110815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b80600260008282546110939190611521565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906110cd908490611521565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156112495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611285908490611571565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c27565b600060208083528351808285015260005b81811015611302578581018301518582016040015282016112e6565b81811115611314576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136c57600080fd5b919050565b6000806040838503121561138457600080fd5b61138d83611348565b946020939093013593505050565b6000806000606084860312156113b057600080fd5b6113b984611348565b92506113c760208501611348565b9150604084013590509250925092565b6000602082840312156113e957600080fd5b6113f282611348565b9392505050565b600080600080600080600060e0888a03121561141457600080fd5b61141d88611348565b965061142b60208901611348565b95506040880135945060608801359350608088013560ff8116811461144f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561147f57600080fd5b61148883611348565b915061149660208401611348565b90509250929050565b600181811c908216806114b357607f821691505b6020821081036114ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611534576115346114f2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156a5761156a6114f2565b5060010190565b600082821015611583576115836114f2565b50039056fea264697066735822122074c1369adb4b03ecf20b18930bac9df5d9a48b4602516485c969475d7cadf1ac64736f6c634300080f0033a2646970667358221220bf5e197d27d3e88e08a09a330ab74adddc8922126a8a830ea281219fe236199864736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001db5760003560e01c806381b1c17411620000ff578063d96a15f71162000095578063e7a5b4ea116200006c578063e7a5b4ea1462000658578063ed6be5c9146200067d578063f2fde38b1462000694578063ff634ed714620006b957600080fd5b8063d96a15f714620005f5578063dbc16976146200060c578063e7375881146200062457600080fd5b8063a08e8a0811620000d6578063a08e8a08146200054f578063aaa13cc21462000579578063bab161bf146200059e578063d02103ca14620005d357600080fd5b806381b1c17414620004d35780638da5cb5b146200050d5780638f611519146200052d57600080fd5b80633ae05047116200017557806346385549116200014c57806346385549146200044c578063655595401462000471578063715018a614620004965780637b6323c114620004ae57600080fd5b80633ae05047146200032e5780633da8168214620003465780633e197043146200036b57600080fd5b80632072f6c511620001b65780632072f6c5146200025157806322e95f2c14620002695780632dfdf0b514620002a7578063318aee3d14620002bf57600080fd5b80630871e97114620001e05780630e1da6c314620001f957806315064c961462000224575b600080fd5b620001f7620001f1366004620031e2565b620006d0565b005b3480156200020657600080fd5b5062000211608d5481565b6040519081526020015b60405180910390f35b3480156200023157600080fd5b50602254620002409060ff1681565b60405190151581526020016200021b565b3480156200025e57600080fd5b50620001f762000c7a565b3480156200027657600080fd5b506200028e620002883660046200326f565b62000d2e565b6040516001600160a01b0390911681526020016200021b565b348015620002b457600080fd5b506200021160215481565b348015620002cc57600080fd5b5062000309620002de366004620032ab565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200021b565b3480156200033b57600080fd5b506200021162000db1565b3480156200035357600080fd5b506200024062000365366004620033ac565b62000ea4565b3480156200037857600080fd5b50620002116200038a3660046200342a565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200045957600080fd5b50620001f76200046b3660046200353b565b62000fa4565b3480156200047e57600080fd5b50620001f76200049036600462003622565b6200122a565b348015620004a357600080fd5b50620001f762001410565b348015620004bb57600080fd5b50620001f7620004cd3660046200353b565b62001426565b348015620004e057600080fd5b506200028e620004f236600462003678565b6089602052600090815260409020546001600160a01b031681565b3480156200051a57600080fd5b506055546001600160a01b03166200028e565b3480156200053a57600080fd5b50608c546200028e906001600160a01b031681565b3480156200055c57600080fd5b5062000566600081565b60405160ff90911681526020016200021b565b3480156200058657600080fd5b506200028e6200059836600462003692565b620019e8565b348015620005ab57600080fd5b50608754620005bd9063ffffffff1681565b60405163ffffffff90911681526020016200021b565b348015620005e057600080fd5b50608b546200028e906001600160a01b031681565b620001f76200060636600462003746565b62001b54565b3480156200061957600080fd5b50620001f762001e08565b3480156200063157600080fd5b50620002406200064336600462003678565b60886020526000908152604090205460ff1681565b3480156200066557600080fd5b50620001f76200067736600462003678565b62001eba565b3480156200068a57600080fd5b50620005bd600081565b348015620006a157600080fd5b50620001f7620006b3366004620032ab565b62001eff565b348015620006c657600080fd5b5062000566600181565b60225460ff1615620007755760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60875463ffffffff90811690861603620007f85760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b60008060606001600160a01b0389166200088d57853414620008835760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200076c565b6000915062000b17565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000974576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af11580156200093b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009619190620037bd565b5060208101518151909450925062000b15565b84156200098957620009898a88888862001f95565b620009a06001600160a01b038b1633308a620025ba565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620009f7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a21919081019062003860565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000a60573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a8a919081019062003860565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ac9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aef919062003899565b60405160200162000b0393929190620038e7565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162000b5998979695949392919062003924565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000c019062002673565b608b546001600160a01b03166333d6247d62000c1c62000db1565b6040518263ffffffff1660e01b815260040162000c3b91815260200190565b600060405180830381600087803b15801562000c5657600080fd5b505af115801562000c6b573d6000803e3d6000fd5b50505050505050505050505050565b608c546001600160a01b0316331462000d225760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c620027d7565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b602154600090819081805b602081101562000e9b578260011660010362000e1c576001816020811062000de85762000de862003990565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000e49565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000e56600284620039ee565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000e929062003a2a565b91505062000dbc565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000f97578160011660010362000f215786818151811062000edf5762000edf62003990565b60200260200101518360405160200162000f03929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000f73565b8287828151811062000f375762000f3762003990565b602002602001015160405160200162000f5a929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000f80600283620039ee565b91508062000f8e8162003a2a565b91505062000eb4565b5050909114949350505050565b60225460ff1615620010455760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6200105b8a8a8a8a8a8a8a8a8a8a6001620028b0565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b0385169084906200109e9089908b90879060240162003a65565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001103919062003a9e565b60006040518083038185875af1925050503d806000811462001142576040519150601f19603f3d011682016040523d82523d6000602084013e62001147565b606091505b5050905080620011bf5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff16158080156200124b5750600054600160ff909116105b80620012675750303b15801562001267575060005460ff166001145b620012db5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200076c565b6000805460ff1916600117905580156200131c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d829055620013a562002c63565b80156200140957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6200141a62002ced565b62000d2c600062002d49565b60225460ff1615620014c75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b620014dd8a8a8a8a8a8a8a8a8a8a6000620028b0565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620015fc57604080516000808252602082019092526001600160a01b03851690849060405162001538919062003a9e565b60006040518083038185875af1925050503d806000811462001577576040519150601f19603f3d011682016040523d82523d6000602084013e6200157c565b606091505b5050905080620015f55760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c45440000000000000000000000000000000000000000000000000060648201526084016200076c565b506200197e565b60875463ffffffff908116908716036200162c57620016266001600160a01b038616848462002db3565b6200197e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620018ea57600080600085806020019051810190620016cc919062003abc565b925092509250600085848484604051620016e6906200314b565b620016f493929190620038e7565b8190604051809103906000f590508015801562001715573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001783573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017a99190620037bd565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620018d89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200197b565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001953573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019799190620037bd565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162001a6b906200314b565b601f1982820381018352601f90910116604081905262001a98908d908d908d908d908d9060200162003b68565b60408051601f198184030181529082905262001ab8929160200162003ba9565b6040516020818303038152906040528051906020012060405160200162001b2e94939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff161562001bf55760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b60875463ffffffff9081169084160362001c785760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b9262001cc59260019263ffffffff9092169133918991899134918a919062003924565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d850152346051850152607180850192909252805180850390920182526091909301909252815191012062001d959062002673565b608b546001600160a01b03166333d6247d62001db062000db1565b6040518263ffffffff1660e01b815260040162001dcf91815260200190565b600060405180830381600087803b15801562001dea57600080fd5b505af115801562001dff573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001eb05760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c62002dfe565b62001ec462002ced565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001f0962002ced565b6001600160a01b03811662001f875760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016200076c565b62001f928162002d49565b50565b600062001fd883838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002ead92505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620022da5760008080808080806200203b896004818d62003bdc565b8101906200204a919062003c08565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620020e15760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0386163014620021615760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b8a8514620021d85760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002286919062003a9e565b6000604051808303816000865af19150503d8060008114620022c5576040519150601f19603f3d011682016040523d82523d6000602084013e620022ca565b606091505b5050505050505050505062001409565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c00000000000000000000000000000000000000000000000000000000146200236d5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200076c565b600080808080808080620023858a6004818e62003bdc565b81019062002394919062003c63565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200242d5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0387163014620024ad5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002564919062003a9e565b6000604051808303816000865af19150503d8060008114620025a3576040519150601f19603f3d011682016040523d82523d6000602084013e620025a8565b606091505b50505050505050505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526200266d9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002eb4565b50505050565b806001620026846020600262003e28565b62002690919062003e36565b60215410620027085760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200076c565b6001602160008282546200271d919062003e50565b909155505060215460005b6020811015620027c757816001166001036200275d57826001826020811062002755576200275562003990565b015550505050565b6001816020811062002773576200277362003990565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620027b09190620039ee565b915080620027be8162003a2a565b91505062002728565b50620027d262003e6b565b505050565b60225460ff1615620028785760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b63ffffffff8a1660009081526088602052604090205460ff16156200293d5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af1158015620029ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620029f0919062003e9a565b9050801580159062002a0f5750608d5462002a0c824262003e36565b10155b62002aa95760405162461bcd60e51b815260206004820152604260248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c49445f4f525f4e4f545f5945545f434c41494d414260648201527f4c45000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b60875463ffffffff87811691161462002b2b5760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000000060648201526084016200076c565b60875460009063ffffffff1662002b4457508862002b47565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d82015260518101899052607180820193909352815180820390930183526091019052805191012062002c15908e8e63ffffffff168462000ea4565b62000c6b5760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c494460448201526064016200076c565b600054610100900460ff1662002ce25760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200076c565b62000d2c3362002d49565b6055546001600160a01b0316331462000d2c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200076c565b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620027d29084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002608565b60225460ff1662002e785760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016200076c565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002f0b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662002fa09092919063ffffffff16565b805190915015620027d2578080602001905181019062002f2c9190620037bd565b620027d25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200076c565b606062002fb1848460008562002fbb565b90505b9392505050565b606082471015620030355760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016200076c565b6001600160a01b0385163b6200308e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200076c565b600080866001600160a01b03168587604051620030ac919062003a9e565b60006040518083038185875af1925050503d8060008114620030eb576040519150601f19603f3d011682016040523d82523d6000602084013e620030f0565b606091505b5091509150620031028282866200310d565b979650505050505050565b606083156200311e57508162002fb4565b8251156200312f5782518084602001fd5b8160405162461bcd60e51b81526004016200076c919062003eb4565b611a788062003eca83390190565b6001600160a01b038116811462001f9257600080fd5b80356200317c8162003159565b919050565b803563ffffffff811681146200317c57600080fd5b60008083601f840112620031a957600080fd5b50813567ffffffffffffffff811115620031c257600080fd5b602083019150836020828501011115620031db57600080fd5b9250929050565b60008060008060008060a08789031215620031fc57600080fd5b8635620032098162003159565b9550620032196020880162003181565b945060408701356200322b8162003159565b935060608701359250608087013567ffffffffffffffff8111156200324f57600080fd5b6200325d89828a0162003196565b979a9699509497509295939492505050565b600080604083850312156200328357600080fd5b6200328e8362003181565b91506020830135620032a08162003159565b809150509250929050565b600060208284031215620032be57600080fd5b813562002fb48162003159565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620033265762003326620032cb565b604052919050565b600082601f8301126200334057600080fd5b8135602067ffffffffffffffff8211156200335f576200335f620032cb565b8160051b62003370828201620032fa565b92835284810182019282810190878511156200338b57600080fd5b83870192505b84831015620031025782358252918301919083019062003391565b60008060008060808587031215620033c357600080fd5b84359350602085013567ffffffffffffffff80821115620033e357600080fd5b620033f1888389016200332e565b94506040870135915080821682146200340957600080fd5b509396929550929360600135925050565b60ff8116811462001f9257600080fd5b600080600080600080600060e0888a0312156200344657600080fd5b873562003453816200341a565b9650620034636020890162003181565b95506040880135620034758162003159565b9450620034856060890162003181565b93506080880135620034978162003159565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620034d157620034d1620032cb565b50601f01601f191660200190565b600082601f830112620034f157600080fd5b8135620035086200350282620034b4565b620032fa565b8181528460208386010111156200351e57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200355c57600080fd5b8a3567ffffffffffffffff808211156200357557600080fd5b620035838e838f016200332e565b9b506200359360208e0162003181565b9a5060408d0135995060608d01359850620035b160808e0162003181565b9750620035c160a08e016200316f565b9650620035d160c08e0162003181565b9550620035e160e08e016200316f565b94506101008d013593506101208d01359150808211156200360157600080fd5b50620036108d828e01620034df565b9150509295989b9194979a5092959850565b600080600080608085870312156200363957600080fd5b620036448562003181565b93506020850135620036568162003159565b92506040850135620036688162003159565b9396929550929360600135925050565b6000602082840312156200368b57600080fd5b5035919050565b600080600080600080600060a0888a031215620036ae57600080fd5b620036b98862003181565b96506020880135620036cb8162003159565b9550604088013567ffffffffffffffff80821115620036e957600080fd5b620036f78b838c0162003196565b909750955060608a01359150808211156200371157600080fd5b50620037208a828b0162003196565b909450925050608088013562003736816200341a565b8091505092959891949750929550565b6000806000606084860312156200375c57600080fd5b620037678462003181565b92506020840135620037798162003159565b9150604084013567ffffffffffffffff8111156200379657600080fd5b620037a486828701620034df565b9150509250925092565b801515811462001f9257600080fd5b600060208284031215620037d057600080fd5b815162002fb481620037ae565b60005b83811015620037fa578181015183820152602001620037e0565b838111156200266d5750506000910152565b600082601f8301126200381e57600080fd5b81516200382f6200350282620034b4565b8181528460208386010111156200384557600080fd5b62003858826020830160208701620037dd565b949350505050565b6000602082840312156200387357600080fd5b815167ffffffffffffffff8111156200388b57600080fd5b62003858848285016200380c565b600060208284031215620038ac57600080fd5b815162002fb4816200341a565b60008151808452620038d3816020860160208601620037dd565b601f01601f19169290920160200192915050565b606081526000620038fc6060830186620038b9565b8281036020840152620039108186620038b9565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c08501526200397782850187620038b9565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003a25577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003a5e5762003a5e620039bf565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003a956060830184620038b9565b95945050505050565b6000825162003ab2818460208701620037dd565b9190910192915050565b60008060006060848603121562003ad257600080fd5b835167ffffffffffffffff8082111562003aeb57600080fd5b62003af9878388016200380c565b9450602086015191508082111562003b1057600080fd5b5062003b1f868287016200380c565b925050604084015162003b32816200341a565b809150509250925092565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003b7e60608301878962003b3d565b828103602084015262003b9381868862003b3d565b91505060ff831660408301529695505050505050565b6000835162003bbd818460208801620037dd565b83519083019062003bd3818360208801620037dd565b01949350505050565b6000808585111562003bed57600080fd5b8386111562003bfb57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003c2457600080fd5b873562003c318162003159565b9650602088013562003c438162003159565b95506040880135945060608801359350608088013562003497816200341a565b600080600080600080600080610100898b03121562003c8157600080fd5b883562003c8e8162003159565b9750602089013562003ca08162003159565b96506040890135955060608901359450608089013562003cc081620037ae565b935060a089013562003cd2816200341a565b979a969950949793969295929450505060c08201359160e0013590565b600181815b8085111562003d4e57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d325762003d32620039bf565b8085161562003d4057918102915b93841c939080029062003cf4565b509250929050565b60008262003d675750600162000dab565b8162003d765750600062000dab565b816001811462003d8f576002811462003d9a5762003dba565b600191505062000dab565b60ff84111562003dae5762003dae620039bf565b50506001821b62000dab565b5060208310610133831016604e8410600b841016171562003ddf575081810a62000dab565b62003deb838362003cef565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003e205762003e20620039bf565b029392505050565b600062002fb4838362003d56565b60008282101562003e4b5762003e4b620039bf565b500390565b6000821982111562003e665762003e66620039bf565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60006020828403121562003ead57600080fd5b5051919050565b60208152600062002fb46020830184620038b956fe60c06040523480156200001157600080fd5b5060405162001a7838038062001a788339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516115be620004ba600039600061053001526000818161036f01526104fa01526115be6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b60405161019191906112d5565b60405180910390f35b6101ad6101a8366004611371565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad61020436600461139b565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad610276366004611371565b610552565b6101ad610289366004611371565b61059e565b6101c161029c3660046113d7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d23660046113d7565b60066020526000908152604090205481565b610184610645565b6101ad6102fa366004611371565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad610352366004611371565b6106ed565b6101ad610365366004611371565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f3660046113f9565b6107b2565b005b6101c16103b436600461146c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6060600380546104379061149f565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061149f565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f56565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611521565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c838361101e565b50600192915050565b6060600480546104379061149f565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c8383611124565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661088183611539565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ee3908490611521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4991815260200190565b60405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f81610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166110815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b80600260008282546110939190611521565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906110cd908490611521565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156112495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611285908490611571565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c27565b600060208083528351808285015260005b81811015611302578581018301518582016040015282016112e6565b81811115611314576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136c57600080fd5b919050565b6000806040838503121561138457600080fd5b61138d83611348565b946020939093013593505050565b6000806000606084860312156113b057600080fd5b6113b984611348565b92506113c760208501611348565b9150604084013590509250925092565b6000602082840312156113e957600080fd5b6113f282611348565b9392505050565b600080600080600080600060e0888a03121561141457600080fd5b61141d88611348565b965061142b60208901611348565b95506040880135945060608801359350608088013560ff8116811461144f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561147f57600080fd5b61148883611348565b915061149660208401611348565b90509250929050565b600181811c908216806114b357607f821691505b6020821081036114ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611534576115346114f2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156a5761156a6114f2565b5060010190565b600082821015611583576115836114f2565b50039056fea264697066735822122074c1369adb4b03ecf20b18930bac9df5d9a48b4602516485c969475d7cadf1ac64736f6c634300080f0033a2646970667358221220bf5e197d27d3e88e08a09a330ab74adddc8922126a8a830ea281219fe236199864736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/BridgeMock.json b/compiled-contracts/BridgeMock.json index 5541a263d..04164a394 100644 --- a/compiled-contracts/BridgeMock.json +++ b/compiled-contracts/BridgeMock.json @@ -815,8 +815,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50615a02806100206000396000f3fe608060405260043610620001ff5760003560e01c80637b6323c11162000117578063d02103ca11620000a1578063e7a5b4ea116200006c578063e7a5b4ea14620006de578063ed6be5c91462000703578063f2fde38b146200071a578063ff634ed7146200073f57600080fd5b8063d02103ca1462000659578063d96a15f7146200067b578063dbc169761462000692578063e737588114620006aa57600080fd5b806391e57e2d11620000e257806391e57e2d14620005bd578063a08e8a0814620005d5578063aaa13cc214620005ff578063bab161bf146200062457600080fd5b80637b6323c1146200051c57806381b1c17414620005415780638da5cb5b146200057b5780638f611519146200059b57600080fd5b80632dfdf0b511620001995780633e19704311620001645780633e19704314620003d95780634638554914620004ba5780636555954014620004df578063715018a6146200050457600080fd5b80632dfdf0b51462000315578063318aee3d146200032d5780633ae05047146200039c5780633da8168214620003b457600080fd5b80632072f6c511620001da5780632072f6c5146200027557806322e95f2c146200028d5780632b5e42e714620002cb5780632c3f58cd14620002f057600080fd5b80630871e97114620002045780630e1da6c3146200021d57806315064c961462000248575b600080fd5b6200021b6200021536600462003301565b62000756565b005b3480156200022a57600080fd5b5062000235608d5481565b6040519081526020015b60405180910390f35b3480156200025557600080fd5b50602254620002649060ff1681565b60405190151581526020016200023f565b3480156200028257600080fd5b506200021b62000812565b3480156200029a57600080fd5b50620002b2620002ac3660046200338e565b620008c6565b6040516001600160a01b0390911681526020016200023f565b348015620002d857600080fd5b506200021b620002ea366004620033ca565b62000949565b348015620002fd57600080fd5b506200021b6200030f366004620033e4565b62000958565b3480156200032257600080fd5b506200023560215481565b3480156200033a57600080fd5b50620003776200034c36600462003409565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200023f565b348015620003a957600080fd5b506200023562000999565b348015620003c157600080fd5b5062000264620003d33660046200350a565b62000a8c565b348015620003e657600080fd5b5062000235620003f836600462003588565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004c757600080fd5b506200021b620004d936600462003699565b62000b8e565b348015620004ec57600080fd5b506200021b620004fe36600462003780565b62000e14565b3480156200051157600080fd5b506200021b62001006565b3480156200052957600080fd5b506200021b6200053b36600462003699565b6200101c565b3480156200054e57600080fd5b50620002b262000560366004620033ca565b6089602052600090815260409020546001600160a01b031681565b3480156200058857600080fd5b506055546001600160a01b0316620002b2565b348015620005a857600080fd5b50608c54620002b2906001600160a01b031681565b348015620005ca57600080fd5b5062000235608e5481565b348015620005e257600080fd5b50620005ec600081565b60405160ff90911681526020016200023f565b3480156200060c57600080fd5b50620002b26200061e366004620037d6565b620015de565b3480156200063157600080fd5b50608754620006439063ffffffff1681565b60405163ffffffff90911681526020016200023f565b3480156200066657600080fd5b50608b54620002b2906001600160a01b031681565b6200021b6200068c3660046200388a565b6200174a565b3480156200069f57600080fd5b506200021b620019fe565b348015620006b757600080fd5b5062000264620006c9366004620033ca565b60886020526000908152604090205460ff1681565b348015620006eb57600080fd5b506200021b620006fd366004620033ca565b62001ab0565b3480156200071057600080fd5b5062000643600081565b3480156200072757600080fd5b506200021b6200073936600462003409565b62001af5565b3480156200074c57600080fd5b50620005ec600181565b608e54341115620007fa5760405162461bcd60e51b815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6200080a86868686868662001b8b565b505050505050565b608c546001600160a01b03163314620008ba5760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c462002131565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b620009536200220a565b608e55565b620009626200220a565b608780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b602154600090819081805b602081101562000a83578260011660010362000a045760018160208110620009d057620009d0620038f2565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000a31565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a3e60028462003950565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000a7a906200398c565b915050620009a4565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000b7f578160011660010362000b095786818151811062000ac75762000ac7620038f2565b60200260200101518360405160200162000aeb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000b5b565b8287828151811062000b1f5762000b1f620038f2565b602002602001015160405160200162000b42929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000b6860028362003950565b91508062000b76816200398c565b91505062000a9c565b5050821490505b949350505050565b60225460ff161562000c2f5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b62000c458a8a8a8a8a8a8a8a8a8a600162002266565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b03851690849062000c889089908b90879060240162003a24565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162000ced919062003a5d565b60006040518083038185875af1925050503d806000811462000d2c576040519150601f19603f3d011682016040523d82523d6000602084013e62000d31565b606091505b505090508062000da95760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff161580801562000e355750600054600160ff909116105b8062000e515750303b15801562000e51575060005460ff166001145b62000ec55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007f1565b6000805460ff19166001179055801562000f0657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d8290556703782dace9d90000608e5562000f9b62002619565b801562000fff57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b620010106200220a565b620008c460006200269e565b60225460ff1615620010bd5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b620010d38a8a8a8a8a8a8a8a8a8a600062002266565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620011f257604080516000808252602082019092526001600160a01b0385169084906040516200112e919062003a5d565b60006040518083038185875af1925050503d80600081146200116d576040519150601f19603f3d011682016040523d82523d6000602084013e62001172565b606091505b5050905080620011eb5760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c4544000000000000000000000000000000000000000000000000006064820152608401620007f1565b5062001574565b60875463ffffffff9081169087160362001222576200121c6001600160a01b038616848462002708565b62001574565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620014e057600080600085806020019051810190620012c2919062003ac7565b925092509250600085848484604051620012dc906200326a565b620012ea9392919062003b48565b8190604051809103906000f59050801580156200130b573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001379573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200139f919062003b94565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620014ce9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001571565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001549573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200156f919062003b94565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162001661906200326a565b601f1982820381018352601f9091011660408190526200168e908d908d908d908d908d9060200162003bdf565b60408051601f1981840301815290829052620016ae929160200162003c20565b604051602081830303815290604052805190602001206040516020016200172494939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620017eb5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff908116908416036200186e5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620018bb9260019263ffffffff9092169133918991899134918a919062003c53565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200198b90620027b8565b608b546001600160a01b03166333d6247d620019a662000999565b6040518263ffffffff1660e01b8152600401620019c591815260200190565b600060405180830381600087803b158015620019e057600080fd5b505af1158015620019f5573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001aa65760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c462002917565b62001aba6200220a565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001aff6200220a565b6001600160a01b03811662001b7d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007f1565b62001b88816200269e565b50565b60225460ff161562001c2c5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff9081169086160362001caf5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b60008060606001600160a01b03891662001d445785341462001d3a5760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007f1565b6000915062001fce565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001e2b576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562001df2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e18919062003b94565b5060208101518151909450925062001fcc565b841562001e405762001e408a888888620029c6565b62001e576001600160a01b038b1633308a62002feb565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001eae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001ed8919081019062003cbf565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001f17573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001f41919081019062003cbf565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001f80573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001fa6919062003cf8565b60405160200162001fba9392919062003b48565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200201098979695949392919062003c53565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620020b890620027b8565b608b546001600160a01b03166333d6247d620020d362000999565b6040518263ffffffff1660e01b8152600401620020f291815260200190565b600060405180830381600087803b1580156200210d57600080fd5b505af115801562002122573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff1615620021d25760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6055546001600160a01b03163314620008c45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007f1565b63ffffffff8a1660009081526088602052604090205460ff1615620022f35760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562002380573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620023a6919062003d18565b90508015801590620023c55750608d54620023c2824262003d32565b10155b6200245f5760405162461bcd60e51b815260206004820152604260248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c49445f4f525f4e4f545f5945545f434c41494d414260648201527f4c45000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff878116911614620024e15760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000006064820152608401620007f1565b60875460009063ffffffff16620024fa575088620024fd565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d820152605181018990526071808201939093528151808203909301835260910190528051910120620025cb908e8e63ffffffff168462000a8c565b620021225760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c49446044820152606401620007f1565b600054610100900460ff16620026985760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007f1565b620008c4335b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620027b39084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262003044565b505050565b806001620027c96020600262003e85565b620027d5919062003d32565b602154106200284d5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007f1565b60016021600082825462002862919062003e93565b909155505060215460005b60208110156200290c5781600116600103620028a25782600182602081106200289a576200289a620038f2565b015550505050565b60018160208110620028b857620028b8620038f2565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620028f5919062003950565b91508062002903816200398c565b9150506200286d565b50620027b362003eae565b60225460ff16620029915760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620007f1565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b600062002a0983838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200313092505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002d0b57600080808080808062002a6c896004818d62003edd565b81019062002a7b919062003f09565b9650965096509650965096509650336001600160a01b0316876001600160a01b03161462002b125760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038616301462002b925760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b8a851462002c095760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002cb7919062003a5d565b6000604051808303816000865af19150503d806000811462002cf6576040519150601f19603f3d011682016040523d82523d6000602084013e62002cfb565b606091505b5050505050505050505062000fff565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002d9e5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007f1565b60008080808080808062002db68a6004818e62003edd565b81019062002dc5919062003f64565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462002e5e5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038716301462002ede5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002f95919062003a5d565b6000604051808303816000865af19150503d806000811462002fd4576040519150601f19603f3d011682016040523d82523d6000602084013e62002fd9565b606091505b50505050505050505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526200303e9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016200274e565b50505050565b60006200309b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620031379092919063ffffffff16565b805190915015620027b35780806020019051810190620030bc919062003b94565b620027b35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007f1565b6020015190565b606062000b86848460008585600080866001600160a01b0316858760405162003161919062003a5d565b60006040518083038185875af1925050503d8060008114620031a0576040519150601f19603f3d011682016040523d82523d6000602084013e620031a5565b606091505b5091509150620031b887838387620031c3565b979650505050505050565b60608315620032375782516000036200322f576001600160a01b0385163b6200322f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007f1565b508162000b86565b62000b8683838151156200324e5781518083602001fd5b8060405162461bcd60e51b8152600401620007f1919062003ff0565b6119c7806200400683390190565b6001600160a01b038116811462001b8857600080fd5b80356200329b8162003278565b919050565b803563ffffffff811681146200329b57600080fd5b60008083601f840112620032c857600080fd5b50813567ffffffffffffffff811115620032e157600080fd5b602083019150836020828501011115620032fa57600080fd5b9250929050565b60008060008060008060a087890312156200331b57600080fd5b8635620033288162003278565b95506200333860208801620032a0565b945060408701356200334a8162003278565b935060608701359250608087013567ffffffffffffffff8111156200336e57600080fd5b6200337c89828a01620032b5565b979a9699509497509295939492505050565b60008060408385031215620033a257600080fd5b620033ad83620032a0565b91506020830135620033bf8162003278565b809150509250929050565b600060208284031215620033dd57600080fd5b5035919050565b600060208284031215620033f757600080fd5b6200340282620032a0565b9392505050565b6000602082840312156200341c57600080fd5b8135620034028162003278565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171562003484576200348462003429565b604052919050565b600082601f8301126200349e57600080fd5b8135602067ffffffffffffffff821115620034bd57620034bd62003429565b8160051b620034ce82820162003458565b9283528481018201928281019087851115620034e957600080fd5b83870192505b84831015620031b857823582529183019190830190620034ef565b600080600080608085870312156200352157600080fd5b84359350602085013567ffffffffffffffff808211156200354157600080fd5b6200354f888389016200348c565b94506040870135915080821682146200356757600080fd5b509396929550929360600135925050565b60ff8116811462001b8857600080fd5b600080600080600080600060e0888a031215620035a457600080fd5b8735620035b18162003578565b9650620035c160208901620032a0565b95506040880135620035d38162003278565b9450620035e360608901620032a0565b93506080880135620035f58162003278565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200362f576200362f62003429565b50601f01601f191660200190565b600082601f8301126200364f57600080fd5b813562003666620036608262003612565b62003458565b8181528460208386010111156200367c57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620036ba57600080fd5b8a3567ffffffffffffffff80821115620036d357600080fd5b620036e18e838f016200348c565b9b50620036f160208e01620032a0565b9a5060408d0135995060608d013598506200370f60808e01620032a0565b97506200371f60a08e016200328e565b96506200372f60c08e01620032a0565b95506200373f60e08e016200328e565b94506101008d013593506101208d01359150808211156200375f57600080fd5b506200376e8d828e016200363d565b9150509295989b9194979a5092959850565b600080600080608085870312156200379757600080fd5b620037a285620032a0565b93506020850135620037b48162003278565b92506040850135620037c68162003278565b9396929550929360600135925050565b600080600080600080600060a0888a031215620037f257600080fd5b620037fd88620032a0565b965060208801356200380f8162003278565b9550604088013567ffffffffffffffff808211156200382d57600080fd5b6200383b8b838c01620032b5565b909750955060608a01359150808211156200385557600080fd5b50620038648a828b01620032b5565b90945092505060808801356200387a8162003578565b8091505092959891949750929550565b600080600060608486031215620038a057600080fd5b620038ab84620032a0565b92506020840135620038bd8162003278565b9150604084013567ffffffffffffffff811115620038da57600080fd5b620038e8868287016200363d565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003987577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620039c057620039c062003921565b5060010190565b60005b83811015620039e4578181015183820152602001620039ca565b838111156200303e5750506000910152565b6000815180845262003a10816020860160208601620039c7565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003a546060830184620039f6565b95945050505050565b6000825162003a71818460208701620039c7565b9190910192915050565b600082601f83011262003a8d57600080fd5b815162003a9e620036608262003612565b81815284602083860101111562003ab457600080fd5b62000b86826020830160208701620039c7565b60008060006060848603121562003add57600080fd5b835167ffffffffffffffff8082111562003af657600080fd5b62003b048783880162003a7b565b9450602086015191508082111562003b1b57600080fd5b5062003b2a8682870162003a7b565b925050604084015162003b3d8162003578565b809150509250925092565b60608152600062003b5d6060830186620039f6565b828103602084015262003b718186620039f6565b91505060ff83166040830152949350505050565b801515811462001b8857600080fd5b60006020828403121562003ba757600080fd5b8151620034028162003b85565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003bf560608301878962003bb4565b828103602084015262003c0a81868862003bb4565b91505060ff831660408301529695505050505050565b6000835162003c34818460208801620039c7565b83519083019062003c4a818360208801620039c7565b01949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003ca682850187620039f6565b925080851660e085015250509998505050505050505050565b60006020828403121562003cd257600080fd5b815167ffffffffffffffff81111562003cea57600080fd5b62000b868482850162003a7b565b60006020828403121562003d0b57600080fd5b8151620034028162003578565b60006020828403121562003d2b57600080fd5b5051919050565b60008282101562003d475762003d4762003921565b500390565b600181815b8085111562003dab57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d8f5762003d8f62003921565b8085161562003d9d57918102915b93841c939080029062003d51565b509250929050565b60008262003dc45750600162000943565b8162003dd35750600062000943565b816001811462003dec576002811462003df75762003e17565b600191505062000943565b60ff84111562003e0b5762003e0b62003921565b50506001821b62000943565b5060208310610133831016604e8410600b841016171562003e3c575081810a62000943565b62003e48838362003d4c565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003e7d5762003e7d62003921565b029392505050565b600062003402838362003db3565b6000821982111562003ea95762003ea962003921565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000808585111562003eee57600080fd5b8386111562003efc57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003f2557600080fd5b873562003f328162003278565b9650602088013562003f448162003278565b955060408801359450606088013593506080880135620035f58162003578565b600080600080600080600080610100898b03121562003f8257600080fd5b883562003f8f8162003278565b9750602089013562003fa18162003278565b96506040890135955060608901359450608089013562003fc18162003b85565b935060a089013562003fd38162003578565b979a969950949793969295929450505060c08201359160e0013590565b602081526000620034026020830184620039f656fe60c06040523480156200001157600080fd5b50604051620019c7380380620019c78339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161150d620004ba600039600061053001526000818161036f01526104fa015261150d6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b604051610191919061123b565b60405180910390f35b6101ad6101a83660046112d7565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad610204366004611301565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad6102763660046112d7565b610552565b6101ad6102893660046112d7565b61059e565b6101c161029c36600461133d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d236600461133d565b60066020526000908152604090205481565b610184610645565b6101ad6102fa3660046112d7565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad6103523660046112d7565b6106ed565b6101ad6103653660046112d7565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f36600461135f565b6107b2565b005b6101c16103b43660046113d2565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043790611405565b80601f016020809104026020016040519081016040528092919081815260200182805461046390611405565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f12565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611487565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c8383610fda565b50600192915050565b60606004805461043790611405565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c83836110b3565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866108818361149f565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f3d610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff821661103d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b806002600082825461104f9190611487565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff821661113c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156111d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610c27565b600060208083528351808285015260005b818110156112685785810183015185820160400152820161124c565b8181111561127a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112d257600080fd5b919050565b600080604083850312156112ea57600080fd5b6112f3836112ae565b946020939093013593505050565b60008060006060848603121561131657600080fd5b61131f846112ae565b925061132d602085016112ae565b9150604084013590509250925092565b60006020828403121561134f57600080fd5b611358826112ae565b9392505050565b600080600080600080600060e0888a03121561137a57600080fd5b611383886112ae565b9650611391602089016112ae565b95506040880135945060608801359350608088013560ff811681146113b557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156113e557600080fd5b6113ee836112ae565b91506113fc602084016112ae565b90509250929050565b600181811c9082168061141957607f821691505b602082108103611452577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561149a5761149a611458565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036114d0576114d0611458565b506001019056fea264697066735822122094134962e5fa2f6357086a2590b7f3a754d340b16e5312664d82a308bc23a0df64736f6c634300080f0033a2646970667358221220e63c82aeb9c625edac6379067d61515cfcb4e7d919995ea9f008f310c81c9e0d64736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001ff5760003560e01c80637b6323c11162000117578063d02103ca11620000a1578063e7a5b4ea116200006c578063e7a5b4ea14620006de578063ed6be5c91462000703578063f2fde38b146200071a578063ff634ed7146200073f57600080fd5b8063d02103ca1462000659578063d96a15f7146200067b578063dbc169761462000692578063e737588114620006aa57600080fd5b806391e57e2d11620000e257806391e57e2d14620005bd578063a08e8a0814620005d5578063aaa13cc214620005ff578063bab161bf146200062457600080fd5b80637b6323c1146200051c57806381b1c17414620005415780638da5cb5b146200057b5780638f611519146200059b57600080fd5b80632dfdf0b511620001995780633e19704311620001645780633e19704314620003d95780634638554914620004ba5780636555954014620004df578063715018a6146200050457600080fd5b80632dfdf0b51462000315578063318aee3d146200032d5780633ae05047146200039c5780633da8168214620003b457600080fd5b80632072f6c511620001da5780632072f6c5146200027557806322e95f2c146200028d5780632b5e42e714620002cb5780632c3f58cd14620002f057600080fd5b80630871e97114620002045780630e1da6c3146200021d57806315064c961462000248575b600080fd5b6200021b6200021536600462003301565b62000756565b005b3480156200022a57600080fd5b5062000235608d5481565b6040519081526020015b60405180910390f35b3480156200025557600080fd5b50602254620002649060ff1681565b60405190151581526020016200023f565b3480156200028257600080fd5b506200021b62000812565b3480156200029a57600080fd5b50620002b2620002ac3660046200338e565b620008c6565b6040516001600160a01b0390911681526020016200023f565b348015620002d857600080fd5b506200021b620002ea366004620033ca565b62000949565b348015620002fd57600080fd5b506200021b6200030f366004620033e4565b62000958565b3480156200032257600080fd5b506200023560215481565b3480156200033a57600080fd5b50620003776200034c36600462003409565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200023f565b348015620003a957600080fd5b506200023562000999565b348015620003c157600080fd5b5062000264620003d33660046200350a565b62000a8c565b348015620003e657600080fd5b5062000235620003f836600462003588565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004c757600080fd5b506200021b620004d936600462003699565b62000b8e565b348015620004ec57600080fd5b506200021b620004fe36600462003780565b62000e14565b3480156200051157600080fd5b506200021b62001006565b3480156200052957600080fd5b506200021b6200053b36600462003699565b6200101c565b3480156200054e57600080fd5b50620002b262000560366004620033ca565b6089602052600090815260409020546001600160a01b031681565b3480156200058857600080fd5b506055546001600160a01b0316620002b2565b348015620005a857600080fd5b50608c54620002b2906001600160a01b031681565b348015620005ca57600080fd5b5062000235608e5481565b348015620005e257600080fd5b50620005ec600081565b60405160ff90911681526020016200023f565b3480156200060c57600080fd5b50620002b26200061e366004620037d6565b620015de565b3480156200063157600080fd5b50608754620006439063ffffffff1681565b60405163ffffffff90911681526020016200023f565b3480156200066657600080fd5b50608b54620002b2906001600160a01b031681565b6200021b6200068c3660046200388a565b6200174a565b3480156200069f57600080fd5b506200021b620019fe565b348015620006b757600080fd5b5062000264620006c9366004620033ca565b60886020526000908152604090205460ff1681565b348015620006eb57600080fd5b506200021b620006fd366004620033ca565b62001ab0565b3480156200071057600080fd5b5062000643600081565b3480156200072757600080fd5b506200021b6200073936600462003409565b62001af5565b3480156200074c57600080fd5b50620005ec600181565b608e54341115620007fa5760405162461bcd60e51b815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6200080a86868686868662001b8b565b505050505050565b608c546001600160a01b03163314620008ba5760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c462002131565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b620009536200220a565b608e55565b620009626200220a565b608780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b602154600090819081805b602081101562000a83578260011660010362000a045760018160208110620009d057620009d0620038f2565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000a31565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a3e60028462003950565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000a7a906200398c565b915050620009a4565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000b7f578160011660010362000b095786818151811062000ac75762000ac7620038f2565b60200260200101518360405160200162000aeb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000b5b565b8287828151811062000b1f5762000b1f620038f2565b602002602001015160405160200162000b42929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000b6860028362003950565b91508062000b76816200398c565b91505062000a9c565b5050821490505b949350505050565b60225460ff161562000c2f5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b62000c458a8a8a8a8a8a8a8a8a8a600162002266565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b03851690849062000c889089908b90879060240162003a24565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162000ced919062003a5d565b60006040518083038185875af1925050503d806000811462000d2c576040519150601f19603f3d011682016040523d82523d6000602084013e62000d31565b606091505b505090508062000da95760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff161580801562000e355750600054600160ff909116105b8062000e515750303b15801562000e51575060005460ff166001145b62000ec55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007f1565b6000805460ff19166001179055801562000f0657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d8290556703782dace9d90000608e5562000f9b62002619565b801562000fff57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b620010106200220a565b620008c460006200269e565b60225460ff1615620010bd5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b620010d38a8a8a8a8a8a8a8a8a8a600062002266565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620011f257604080516000808252602082019092526001600160a01b0385169084906040516200112e919062003a5d565b60006040518083038185875af1925050503d80600081146200116d576040519150601f19603f3d011682016040523d82523d6000602084013e62001172565b606091505b5050905080620011eb5760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c4544000000000000000000000000000000000000000000000000006064820152608401620007f1565b5062001574565b60875463ffffffff9081169087160362001222576200121c6001600160a01b038616848462002708565b62001574565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620014e057600080600085806020019051810190620012c2919062003ac7565b925092509250600085848484604051620012dc906200326a565b620012ea9392919062003b48565b8190604051809103906000f59050801580156200130b573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001379573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200139f919062003b94565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620014ce9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001571565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001549573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200156f919062003b94565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162001661906200326a565b601f1982820381018352601f9091011660408190526200168e908d908d908d908d908d9060200162003bdf565b60408051601f1981840301815290829052620016ae929160200162003c20565b604051602081830303815290604052805190602001206040516020016200172494939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620017eb5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff908116908416036200186e5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620018bb9260019263ffffffff9092169133918991899134918a919062003c53565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200198b90620027b8565b608b546001600160a01b03166333d6247d620019a662000999565b6040518263ffffffff1660e01b8152600401620019c591815260200190565b600060405180830381600087803b158015620019e057600080fd5b505af1158015620019f5573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001aa65760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c462002917565b62001aba6200220a565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001aff6200220a565b6001600160a01b03811662001b7d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007f1565b62001b88816200269e565b50565b60225460ff161562001c2c5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff9081169086160362001caf5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b60008060606001600160a01b03891662001d445785341462001d3a5760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007f1565b6000915062001fce565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001e2b576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562001df2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e18919062003b94565b5060208101518151909450925062001fcc565b841562001e405762001e408a888888620029c6565b62001e576001600160a01b038b1633308a62002feb565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001eae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001ed8919081019062003cbf565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001f17573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001f41919081019062003cbf565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001f80573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001fa6919062003cf8565b60405160200162001fba9392919062003b48565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200201098979695949392919062003c53565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620020b890620027b8565b608b546001600160a01b03166333d6247d620020d362000999565b6040518263ffffffff1660e01b8152600401620020f291815260200190565b600060405180830381600087803b1580156200210d57600080fd5b505af115801562002122573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff1615620021d25760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6055546001600160a01b03163314620008c45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007f1565b63ffffffff8a1660009081526088602052604090205460ff1615620022f35760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562002380573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620023a6919062003d18565b90508015801590620023c55750608d54620023c2824262003d32565b10155b6200245f5760405162461bcd60e51b815260206004820152604260248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c49445f4f525f4e4f545f5945545f434c41494d414260648201527f4c45000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff878116911614620024e15760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000006064820152608401620007f1565b60875460009063ffffffff16620024fa575088620024fd565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d820152605181018990526071808201939093528151808203909301835260910190528051910120620025cb908e8e63ffffffff168462000a8c565b620021225760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c49446044820152606401620007f1565b600054610100900460ff16620026985760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007f1565b620008c4335b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620027b39084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262003044565b505050565b806001620027c96020600262003e85565b620027d5919062003d32565b602154106200284d5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007f1565b60016021600082825462002862919062003e93565b909155505060215460005b60208110156200290c5781600116600103620028a25782600182602081106200289a576200289a620038f2565b015550505050565b60018160208110620028b857620028b8620038f2565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620028f5919062003950565b91508062002903816200398c565b9150506200286d565b50620027b362003eae565b60225460ff16620029915760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620007f1565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b600062002a0983838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200313092505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002d0b57600080808080808062002a6c896004818d62003edd565b81019062002a7b919062003f09565b9650965096509650965096509650336001600160a01b0316876001600160a01b03161462002b125760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038616301462002b925760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b8a851462002c095760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002cb7919062003a5d565b6000604051808303816000865af19150503d806000811462002cf6576040519150601f19603f3d011682016040523d82523d6000602084013e62002cfb565b606091505b5050505050505050505062000fff565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002d9e5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007f1565b60008080808080808062002db68a6004818e62003edd565b81019062002dc5919062003f64565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462002e5e5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038716301462002ede5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002f95919062003a5d565b6000604051808303816000865af19150503d806000811462002fd4576040519150601f19603f3d011682016040523d82523d6000602084013e62002fd9565b606091505b50505050505050505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526200303e9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016200274e565b50505050565b60006200309b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620031379092919063ffffffff16565b805190915015620027b35780806020019051810190620030bc919062003b94565b620027b35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007f1565b6020015190565b606062000b86848460008585600080866001600160a01b0316858760405162003161919062003a5d565b60006040518083038185875af1925050503d8060008114620031a0576040519150601f19603f3d011682016040523d82523d6000602084013e620031a5565b606091505b5091509150620031b887838387620031c3565b979650505050505050565b60608315620032375782516000036200322f576001600160a01b0385163b6200322f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007f1565b508162000b86565b62000b8683838151156200324e5781518083602001fd5b8060405162461bcd60e51b8152600401620007f1919062003ff0565b6119c7806200400683390190565b6001600160a01b038116811462001b8857600080fd5b80356200329b8162003278565b919050565b803563ffffffff811681146200329b57600080fd5b60008083601f840112620032c857600080fd5b50813567ffffffffffffffff811115620032e157600080fd5b602083019150836020828501011115620032fa57600080fd5b9250929050565b60008060008060008060a087890312156200331b57600080fd5b8635620033288162003278565b95506200333860208801620032a0565b945060408701356200334a8162003278565b935060608701359250608087013567ffffffffffffffff8111156200336e57600080fd5b6200337c89828a01620032b5565b979a9699509497509295939492505050565b60008060408385031215620033a257600080fd5b620033ad83620032a0565b91506020830135620033bf8162003278565b809150509250929050565b600060208284031215620033dd57600080fd5b5035919050565b600060208284031215620033f757600080fd5b6200340282620032a0565b9392505050565b6000602082840312156200341c57600080fd5b8135620034028162003278565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171562003484576200348462003429565b604052919050565b600082601f8301126200349e57600080fd5b8135602067ffffffffffffffff821115620034bd57620034bd62003429565b8160051b620034ce82820162003458565b9283528481018201928281019087851115620034e957600080fd5b83870192505b84831015620031b857823582529183019190830190620034ef565b600080600080608085870312156200352157600080fd5b84359350602085013567ffffffffffffffff808211156200354157600080fd5b6200354f888389016200348c565b94506040870135915080821682146200356757600080fd5b509396929550929360600135925050565b60ff8116811462001b8857600080fd5b600080600080600080600060e0888a031215620035a457600080fd5b8735620035b18162003578565b9650620035c160208901620032a0565b95506040880135620035d38162003278565b9450620035e360608901620032a0565b93506080880135620035f58162003278565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200362f576200362f62003429565b50601f01601f191660200190565b600082601f8301126200364f57600080fd5b813562003666620036608262003612565b62003458565b8181528460208386010111156200367c57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620036ba57600080fd5b8a3567ffffffffffffffff80821115620036d357600080fd5b620036e18e838f016200348c565b9b50620036f160208e01620032a0565b9a5060408d0135995060608d013598506200370f60808e01620032a0565b97506200371f60a08e016200328e565b96506200372f60c08e01620032a0565b95506200373f60e08e016200328e565b94506101008d013593506101208d01359150808211156200375f57600080fd5b506200376e8d828e016200363d565b9150509295989b9194979a5092959850565b600080600080608085870312156200379757600080fd5b620037a285620032a0565b93506020850135620037b48162003278565b92506040850135620037c68162003278565b9396929550929360600135925050565b600080600080600080600060a0888a031215620037f257600080fd5b620037fd88620032a0565b965060208801356200380f8162003278565b9550604088013567ffffffffffffffff808211156200382d57600080fd5b6200383b8b838c01620032b5565b909750955060608a01359150808211156200385557600080fd5b50620038648a828b01620032b5565b90945092505060808801356200387a8162003578565b8091505092959891949750929550565b600080600060608486031215620038a057600080fd5b620038ab84620032a0565b92506020840135620038bd8162003278565b9150604084013567ffffffffffffffff811115620038da57600080fd5b620038e8868287016200363d565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003987577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620039c057620039c062003921565b5060010190565b60005b83811015620039e4578181015183820152602001620039ca565b838111156200303e5750506000910152565b6000815180845262003a10816020860160208601620039c7565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003a546060830184620039f6565b95945050505050565b6000825162003a71818460208701620039c7565b9190910192915050565b600082601f83011262003a8d57600080fd5b815162003a9e620036608262003612565b81815284602083860101111562003ab457600080fd5b62000b86826020830160208701620039c7565b60008060006060848603121562003add57600080fd5b835167ffffffffffffffff8082111562003af657600080fd5b62003b048783880162003a7b565b9450602086015191508082111562003b1b57600080fd5b5062003b2a8682870162003a7b565b925050604084015162003b3d8162003578565b809150509250925092565b60608152600062003b5d6060830186620039f6565b828103602084015262003b718186620039f6565b91505060ff83166040830152949350505050565b801515811462001b8857600080fd5b60006020828403121562003ba757600080fd5b8151620034028162003b85565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003bf560608301878962003bb4565b828103602084015262003c0a81868862003bb4565b91505060ff831660408301529695505050505050565b6000835162003c34818460208801620039c7565b83519083019062003c4a818360208801620039c7565b01949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003ca682850187620039f6565b925080851660e085015250509998505050505050505050565b60006020828403121562003cd257600080fd5b815167ffffffffffffffff81111562003cea57600080fd5b62000b868482850162003a7b565b60006020828403121562003d0b57600080fd5b8151620034028162003578565b60006020828403121562003d2b57600080fd5b5051919050565b60008282101562003d475762003d4762003921565b500390565b600181815b8085111562003dab57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d8f5762003d8f62003921565b8085161562003d9d57918102915b93841c939080029062003d51565b509250929050565b60008262003dc45750600162000943565b8162003dd35750600062000943565b816001811462003dec576002811462003df75762003e17565b600191505062000943565b60ff84111562003e0b5762003e0b62003921565b50506001821b62000943565b5060208310610133831016604e8410600b841016171562003e3c575081810a62000943565b62003e48838362003d4c565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003e7d5762003e7d62003921565b029392505050565b600062003402838362003db3565b6000821982111562003ea95762003ea962003921565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000808585111562003eee57600080fd5b8386111562003efc57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003f2557600080fd5b873562003f328162003278565b9650602088013562003f448162003278565b955060408801359450606088013593506080880135620035f58162003578565b600080600080600080600080610100898b03121562003f8257600080fd5b883562003f8f8162003278565b9750602089013562003fa18162003278565b96506040890135955060608901359450608089013562003fc18162003b85565b935060a089013562003fd38162003578565b979a969950949793969295929450505060c08201359160e0013590565b602081526000620034026020830184620039f656fe60c06040523480156200001157600080fd5b50604051620019c7380380620019c78339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161150d620004ba600039600061053001526000818161036f01526104fa015261150d6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b604051610191919061123b565b60405180910390f35b6101ad6101a83660046112d7565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad610204366004611301565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad6102763660046112d7565b610552565b6101ad6102893660046112d7565b61059e565b6101c161029c36600461133d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d236600461133d565b60066020526000908152604090205481565b610184610645565b6101ad6102fa3660046112d7565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad6103523660046112d7565b6106ed565b6101ad6103653660046112d7565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f36600461135f565b6107b2565b005b6101c16103b43660046113d2565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043790611405565b80601f016020809104026020016040519081016040528092919081815260200182805461046390611405565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f12565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611487565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c8383610fda565b50600192915050565b60606004805461043790611405565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c83836110b3565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866108818361149f565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f3d610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff821661103d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b806002600082825461104f9190611487565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff821661113c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156111d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610c27565b600060208083528351808285015260005b818110156112685785810183015185820160400152820161124c565b8181111561127a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112d257600080fd5b919050565b600080604083850312156112ea57600080fd5b6112f3836112ae565b946020939093013593505050565b60008060006060848603121561131657600080fd5b61131f846112ae565b925061132d602085016112ae565b9150604084013590509250925092565b60006020828403121561134f57600080fd5b611358826112ae565b9392505050565b600080600080600080600060e0888a03121561137a57600080fd5b611383886112ae565b9650611391602089016112ae565b95506040880135945060608801359350608088013560ff811681146113b557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156113e557600080fd5b6113ee836112ae565b91506113fc602084016112ae565b90509250929050565b600181811c9082168061141957607f821691505b602082108103611452577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561149a5761149a611458565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036114d0576114d0611458565b506001019056fea264697066735822122094134962e5fa2f6357086a2590b7f3a754d340b16e5312664d82a308bc23a0df64736f6c634300080f0033a2646970667358221220e63c82aeb9c625edac6379067d61515cfcb4e7d919995ea9f008f310c81c9e0d64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50615b2a806100206000396000f3fe608060405260043610620001ff5760003560e01c80637b6323c11162000117578063d02103ca11620000a1578063e7a5b4ea116200006c578063e7a5b4ea14620006de578063ed6be5c91462000703578063f2fde38b146200071a578063ff634ed7146200073f57600080fd5b8063d02103ca1462000659578063d96a15f7146200067b578063dbc169761462000692578063e737588114620006aa57600080fd5b806391e57e2d11620000e257806391e57e2d14620005bd578063a08e8a0814620005d5578063aaa13cc214620005ff578063bab161bf146200062457600080fd5b80637b6323c1146200051c57806381b1c17414620005415780638da5cb5b146200057b5780638f611519146200059b57600080fd5b80632dfdf0b511620001995780633e19704311620001645780633e19704314620003d95780634638554914620004ba5780636555954014620004df578063715018a6146200050457600080fd5b80632dfdf0b51462000315578063318aee3d146200032d5780633ae05047146200039c5780633da8168214620003b457600080fd5b80632072f6c511620001da5780632072f6c5146200027557806322e95f2c146200028d5780632b5e42e714620002cb5780632c3f58cd14620002f057600080fd5b80630871e97114620002045780630e1da6c3146200021d57806315064c961462000248575b600080fd5b6200021b6200021536600462003377565b62000756565b005b3480156200022a57600080fd5b5062000235608d5481565b6040519081526020015b60405180910390f35b3480156200025557600080fd5b50602254620002649060ff1681565b60405190151581526020016200023f565b3480156200028257600080fd5b506200021b62000812565b3480156200029a57600080fd5b50620002b2620002ac36600462003404565b620008c6565b6040516001600160a01b0390911681526020016200023f565b348015620002d857600080fd5b506200021b620002ea36600462003440565b62000949565b348015620002fd57600080fd5b506200021b6200030f3660046200345a565b62000958565b3480156200032257600080fd5b506200023560215481565b3480156200033a57600080fd5b50620003776200034c36600462003478565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200023f565b348015620003a957600080fd5b506200023562000999565b348015620003c157600080fd5b5062000264620003d336600462003579565b62000a8c565b348015620003e657600080fd5b5062000235620003f8366004620035f7565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004c757600080fd5b506200021b620004d936600462003708565b62000b8c565b348015620004ec57600080fd5b506200021b620004fe366004620037ef565b62000e12565b3480156200051157600080fd5b506200021b62001004565b3480156200052957600080fd5b506200021b6200053b36600462003708565b6200101a565b3480156200054e57600080fd5b50620002b26200056036600462003440565b6089602052600090815260409020546001600160a01b031681565b3480156200058857600080fd5b506055546001600160a01b0316620002b2565b348015620005a857600080fd5b50608c54620002b2906001600160a01b031681565b348015620005ca57600080fd5b5062000235608e5481565b348015620005e257600080fd5b50620005ec600081565b60405160ff90911681526020016200023f565b3480156200060c57600080fd5b50620002b26200061e36600462003845565b620015dc565b3480156200063157600080fd5b50608754620006439063ffffffff1681565b60405163ffffffff90911681526020016200023f565b3480156200066657600080fd5b50608b54620002b2906001600160a01b031681565b6200021b6200068c366004620038f9565b62001748565b3480156200069f57600080fd5b506200021b620019fc565b348015620006b757600080fd5b5062000264620006c936600462003440565b60886020526000908152604090205460ff1681565b348015620006eb57600080fd5b506200021b620006fd36600462003440565b62001aae565b3480156200071057600080fd5b5062000643600081565b3480156200072757600080fd5b506200021b6200073936600462003478565b62001af3565b3480156200074c57600080fd5b50620005ec600181565b608e54341115620007fa5760405162461bcd60e51b815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6200080a86868686868662001b89565b505050505050565b608c546001600160a01b03163314620008ba5760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c46200212f565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b6200095362002208565b608e55565b6200096262002208565b608780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b602154600090819081805b602081101562000a83578260011660010362000a045760018160208110620009d057620009d062003961565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000a31565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a3e600284620039bf565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000a7a90620039fb565b915050620009a4565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000b7f578160011660010362000b095786818151811062000ac75762000ac762003961565b60200260200101518360405160200162000aeb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000b5b565b8287828151811062000b1f5762000b1f62003961565b602002602001015160405160200162000b42929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000b68600283620039bf565b91508062000b7681620039fb565b91505062000a9c565b5050909114949350505050565b60225460ff161562000c2d5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b62000c438a8a8a8a8a8a8a8a8a8a600162002264565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b03851690849062000c869089908b90879060240162003a93565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162000ceb919062003acc565b60006040518083038185875af1925050503d806000811462000d2a576040519150601f19603f3d011682016040523d82523d6000602084013e62000d2f565b606091505b505090508062000da75760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff161580801562000e335750600054600160ff909116105b8062000e4f5750303b15801562000e4f575060005460ff166001145b62000ec35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007f1565b6000805460ff19166001179055801562000f0457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d8290556703782dace9d90000608e5562000f9962002617565b801562000ffd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6200100e62002208565b620008c460006200269c565b60225460ff1615620010bb5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b620010d18a8a8a8a8a8a8a8a8a8a600062002264565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620011f057604080516000808252602082019092526001600160a01b0385169084906040516200112c919062003acc565b60006040518083038185875af1925050503d80600081146200116b576040519150601f19603f3d011682016040523d82523d6000602084013e62001170565b606091505b5050905080620011e95760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c4544000000000000000000000000000000000000000000000000006064820152608401620007f1565b5062001572565b60875463ffffffff9081169087160362001220576200121a6001600160a01b038616848462002706565b62001572565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620014de57600080600085806020019051810190620012c0919062003b3e565b925092509250600085848484604051620012da90620032e0565b620012e89392919062003bbf565b8190604051809103906000f590508015801562001309573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001377573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200139d919062003c0b565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620014cc9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200156f565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001547573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200156d919062003c0b565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200165f90620032e0565b601f1982820381018352601f9091011660408190526200168c908d908d908d908d908d9060200162003c56565b60408051601f1981840301815290829052620016ac929160200162003c97565b604051602081830303815290604052805190602001206040516020016200172294939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620017e95760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff908116908416036200186c5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620018b99260019263ffffffff9092169133918991899134918a919062003cca565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200198990620027b6565b608b546001600160a01b03166333d6247d620019a462000999565b6040518263ffffffff1660e01b8152600401620019c391815260200190565b600060405180830381600087803b158015620019de57600080fd5b505af1158015620019f3573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001aa45760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c462002915565b62001ab862002208565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001afd62002208565b6001600160a01b03811662001b7b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007f1565b62001b86816200269c565b50565b60225460ff161562001c2a5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff9081169086160362001cad5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b60008060606001600160a01b03891662001d425785341462001d385760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007f1565b6000915062001fcc565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001e29576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562001df0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e16919062003c0b565b5060208101518151909450925062001fca565b841562001e3e5762001e3e8a888888620029c4565b62001e556001600160a01b038b1633308a62002fe9565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001eac573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001ed6919081019062003d36565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001f15573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001f3f919081019062003d36565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001f7e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001fa4919062003d6f565b60405160200162001fb89392919062003bbf565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200200e98979695949392919062003cca565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620020b690620027b6565b608b546001600160a01b03166333d6247d620020d162000999565b6040518263ffffffff1660e01b8152600401620020f091815260200190565b600060405180830381600087803b1580156200210b57600080fd5b505af115801562002120573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff1615620021d05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6055546001600160a01b03163314620008c45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007f1565b63ffffffff8a1660009081526088602052604090205460ff1615620022f15760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af11580156200237e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620023a4919062003d8f565b90508015801590620023c35750608d54620023c0824262003da9565b10155b6200245d5760405162461bcd60e51b815260206004820152604260248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c49445f4f525f4e4f545f5945545f434c41494d414260648201527f4c45000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff878116911614620024df5760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000006064820152608401620007f1565b60875460009063ffffffff16620024f8575088620024fb565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d820152605181018990526071808201939093528151808203909301835260910190528051910120620025c9908e8e63ffffffff168462000a8c565b620021205760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c49446044820152606401620007f1565b600054610100900460ff16620026965760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007f1565b620008c4335b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620027b19084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262003042565b505050565b806001620027c76020600262003efc565b620027d3919062003da9565b602154106200284b5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007f1565b60016021600082825462002860919062003f0a565b909155505060215460005b60208110156200290a5781600116600103620028a057826001826020811062002898576200289862003961565b015550505050565b60018160208110620028b657620028b662003961565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620028f39190620039bf565b9150806200290181620039fb565b9150506200286b565b50620027b162003f25565b60225460ff166200298f5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620007f1565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b600062002a0783838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200312e92505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002d0957600080808080808062002a6a896004818d62003f54565b81019062002a79919062003f80565b9650965096509650965096509650336001600160a01b0316876001600160a01b03161462002b105760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038616301462002b905760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b8a851462002c075760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002cb5919062003acc565b6000604051808303816000865af19150503d806000811462002cf4576040519150601f19603f3d011682016040523d82523d6000602084013e62002cf9565b606091505b5050505050505050505062000ffd565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002d9c5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007f1565b60008080808080808062002db48a6004818e62003f54565b81019062002dc3919062003fdb565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462002e5c5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038716301462002edc5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002f93919062003acc565b6000604051808303816000865af19150503d806000811462002fd2576040519150601f19603f3d011682016040523d82523d6000602084013e62002fd7565b606091505b50505050505050505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526200303c9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016200274c565b50505050565b600062003099826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620031359092919063ffffffff16565b805190915015620027b15780806020019051810190620030ba919062003c0b565b620027b15760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007f1565b6020015190565b606062003146848460008562003150565b90505b9392505050565b606082471015620031ca5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401620007f1565b6001600160a01b0385163b620032235760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007f1565b600080866001600160a01b0316858760405162003241919062003acc565b60006040518083038185875af1925050503d806000811462003280576040519150601f19603f3d011682016040523d82523d6000602084013e62003285565b606091505b509150915062003297828286620032a2565b979650505050505050565b60608315620032b357508162003149565b825115620032c45782518084602001fd5b8160405162461bcd60e51b8152600401620007f1919062004067565b611a78806200407d83390190565b6001600160a01b038116811462001b8657600080fd5b80356200331181620032ee565b919050565b803563ffffffff811681146200331157600080fd5b60008083601f8401126200333e57600080fd5b50813567ffffffffffffffff8111156200335757600080fd5b6020830191508360208285010111156200337057600080fd5b9250929050565b60008060008060008060a087890312156200339157600080fd5b86356200339e81620032ee565b9550620033ae6020880162003316565b94506040870135620033c081620032ee565b935060608701359250608087013567ffffffffffffffff811115620033e457600080fd5b620033f289828a016200332b565b979a9699509497509295939492505050565b600080604083850312156200341857600080fd5b620034238362003316565b915060208301356200343581620032ee565b809150509250929050565b6000602082840312156200345357600080fd5b5035919050565b6000602082840312156200346d57600080fd5b620031498262003316565b6000602082840312156200348b57600080fd5b81356200314981620032ee565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620034f357620034f362003498565b604052919050565b600082601f8301126200350d57600080fd5b8135602067ffffffffffffffff8211156200352c576200352c62003498565b8160051b6200353d828201620034c7565b92835284810182019282810190878511156200355857600080fd5b83870192505b8483101562003297578235825291830191908301906200355e565b600080600080608085870312156200359057600080fd5b84359350602085013567ffffffffffffffff80821115620035b057600080fd5b620035be88838901620034fb565b9450604087013591508082168214620035d657600080fd5b509396929550929360600135925050565b60ff8116811462001b8657600080fd5b600080600080600080600060e0888a0312156200361357600080fd5b87356200362081620035e7565b9650620036306020890162003316565b955060408801356200364281620032ee565b9450620036526060890162003316565b935060808801356200366481620032ee565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200369e576200369e62003498565b50601f01601f191660200190565b600082601f830112620036be57600080fd5b8135620036d5620036cf8262003681565b620034c7565b818152846020838601011115620036eb57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200372957600080fd5b8a3567ffffffffffffffff808211156200374257600080fd5b620037508e838f01620034fb565b9b506200376060208e0162003316565b9a5060408d0135995060608d013598506200377e60808e0162003316565b97506200378e60a08e0162003304565b96506200379e60c08e0162003316565b9550620037ae60e08e0162003304565b94506101008d013593506101208d0135915080821115620037ce57600080fd5b50620037dd8d828e01620036ac565b9150509295989b9194979a5092959850565b600080600080608085870312156200380657600080fd5b620038118562003316565b935060208501356200382381620032ee565b925060408501356200383581620032ee565b9396929550929360600135925050565b600080600080600080600060a0888a0312156200386157600080fd5b6200386c8862003316565b965060208801356200387e81620032ee565b9550604088013567ffffffffffffffff808211156200389c57600080fd5b620038aa8b838c016200332b565b909750955060608a0135915080821115620038c457600080fd5b50620038d38a828b016200332b565b9094509250506080880135620038e981620035e7565b8091505092959891949750929550565b6000806000606084860312156200390f57600080fd5b6200391a8462003316565b925060208401356200392c81620032ee565b9150604084013567ffffffffffffffff8111156200394957600080fd5b6200395786828701620036ac565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082620039f6577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003a2f5762003a2f62003990565b5060010190565b60005b8381101562003a5357818101518382015260200162003a39565b838111156200303c5750506000910152565b6000815180845262003a7f81602086016020860162003a36565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003ac3606083018462003a65565b95945050505050565b6000825162003ae081846020870162003a36565b9190910192915050565b600082601f83011262003afc57600080fd5b815162003b0d620036cf8262003681565b81815284602083860101111562003b2357600080fd5b62003b3682602083016020870162003a36565b949350505050565b60008060006060848603121562003b5457600080fd5b835167ffffffffffffffff8082111562003b6d57600080fd5b62003b7b8783880162003aea565b9450602086015191508082111562003b9257600080fd5b5062003ba18682870162003aea565b925050604084015162003bb481620035e7565b809150509250925092565b60608152600062003bd4606083018662003a65565b828103602084015262003be8818662003a65565b91505060ff83166040830152949350505050565b801515811462001b8657600080fd5b60006020828403121562003c1e57600080fd5b8151620031498162003bfc565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003c6c60608301878962003c2b565b828103602084015262003c8181868862003c2b565b91505060ff831660408301529695505050505050565b6000835162003cab81846020880162003a36565b83519083019062003cc181836020880162003a36565b01949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003d1d8285018762003a65565b925080851660e085015250509998505050505050505050565b60006020828403121562003d4957600080fd5b815167ffffffffffffffff81111562003d6157600080fd5b62003b368482850162003aea565b60006020828403121562003d8257600080fd5b81516200314981620035e7565b60006020828403121562003da257600080fd5b5051919050565b60008282101562003dbe5762003dbe62003990565b500390565b600181815b8085111562003e2257817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003e065762003e0662003990565b8085161562003e1457918102915b93841c939080029062003dc8565b509250929050565b60008262003e3b5750600162000943565b8162003e4a5750600062000943565b816001811462003e63576002811462003e6e5762003e8e565b600191505062000943565b60ff84111562003e825762003e8262003990565b50506001821b62000943565b5060208310610133831016604e8410600b841016171562003eb3575081810a62000943565b62003ebf838362003dc3565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003ef45762003ef462003990565b029392505050565b600062003149838362003e2a565b6000821982111562003f205762003f2062003990565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000808585111562003f6557600080fd5b8386111562003f7357600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003f9c57600080fd5b873562003fa981620032ee565b9650602088013562003fbb81620032ee565b9550604088013594506060880135935060808801356200366481620035e7565b600080600080600080600080610100898b03121562003ff957600080fd5b88356200400681620032ee565b975060208901356200401881620032ee565b965060408901359550606089013594506080890135620040388162003bfc565b935060a08901356200404a81620035e7565b979a969950949793969295929450505060c08201359160e0013590565b60208152600062003149602083018462003a6556fe60c06040523480156200001157600080fd5b5060405162001a7838038062001a788339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516115be620004ba600039600061053001526000818161036f01526104fa01526115be6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b60405161019191906112d5565b60405180910390f35b6101ad6101a8366004611371565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad61020436600461139b565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad610276366004611371565b610552565b6101ad610289366004611371565b61059e565b6101c161029c3660046113d7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d23660046113d7565b60066020526000908152604090205481565b610184610645565b6101ad6102fa366004611371565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad610352366004611371565b6106ed565b6101ad610365366004611371565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f3660046113f9565b6107b2565b005b6101c16103b436600461146c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6060600380546104379061149f565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061149f565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f56565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611521565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c838361101e565b50600192915050565b6060600480546104379061149f565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c8383611124565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661088183611539565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ee3908490611521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4991815260200190565b60405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f81610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166110815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b80600260008282546110939190611521565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906110cd908490611521565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156112495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611285908490611571565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c27565b600060208083528351808285015260005b81811015611302578581018301518582016040015282016112e6565b81811115611314576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136c57600080fd5b919050565b6000806040838503121561138457600080fd5b61138d83611348565b946020939093013593505050565b6000806000606084860312156113b057600080fd5b6113b984611348565b92506113c760208501611348565b9150604084013590509250925092565b6000602082840312156113e957600080fd5b6113f282611348565b9392505050565b600080600080600080600060e0888a03121561141457600080fd5b61141d88611348565b965061142b60208901611348565b95506040880135945060608801359350608088013560ff8116811461144f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561147f57600080fd5b61148883611348565b915061149660208401611348565b90509250929050565b600181811c908216806114b357607f821691505b6020821081036114ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611534576115346114f2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156a5761156a6114f2565b5060010190565b600082821015611583576115836114f2565b50039056fea264697066735822122074c1369adb4b03ecf20b18930bac9df5d9a48b4602516485c969475d7cadf1ac64736f6c634300080f0033a26469706673582212206a1228c6bd1c4dac7ae6928a40eab39a5b5c3c43a9975d5dbb02be6bfa7a9dd364736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001ff5760003560e01c80637b6323c11162000117578063d02103ca11620000a1578063e7a5b4ea116200006c578063e7a5b4ea14620006de578063ed6be5c91462000703578063f2fde38b146200071a578063ff634ed7146200073f57600080fd5b8063d02103ca1462000659578063d96a15f7146200067b578063dbc169761462000692578063e737588114620006aa57600080fd5b806391e57e2d11620000e257806391e57e2d14620005bd578063a08e8a0814620005d5578063aaa13cc214620005ff578063bab161bf146200062457600080fd5b80637b6323c1146200051c57806381b1c17414620005415780638da5cb5b146200057b5780638f611519146200059b57600080fd5b80632dfdf0b511620001995780633e19704311620001645780633e19704314620003d95780634638554914620004ba5780636555954014620004df578063715018a6146200050457600080fd5b80632dfdf0b51462000315578063318aee3d146200032d5780633ae05047146200039c5780633da8168214620003b457600080fd5b80632072f6c511620001da5780632072f6c5146200027557806322e95f2c146200028d5780632b5e42e714620002cb5780632c3f58cd14620002f057600080fd5b80630871e97114620002045780630e1da6c3146200021d57806315064c961462000248575b600080fd5b6200021b6200021536600462003377565b62000756565b005b3480156200022a57600080fd5b5062000235608d5481565b6040519081526020015b60405180910390f35b3480156200025557600080fd5b50602254620002649060ff1681565b60405190151581526020016200023f565b3480156200028257600080fd5b506200021b62000812565b3480156200029a57600080fd5b50620002b2620002ac36600462003404565b620008c6565b6040516001600160a01b0390911681526020016200023f565b348015620002d857600080fd5b506200021b620002ea36600462003440565b62000949565b348015620002fd57600080fd5b506200021b6200030f3660046200345a565b62000958565b3480156200032257600080fd5b506200023560215481565b3480156200033a57600080fd5b50620003776200034c36600462003478565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200023f565b348015620003a957600080fd5b506200023562000999565b348015620003c157600080fd5b5062000264620003d336600462003579565b62000a8c565b348015620003e657600080fd5b5062000235620003f8366004620035f7565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004c757600080fd5b506200021b620004d936600462003708565b62000b8c565b348015620004ec57600080fd5b506200021b620004fe366004620037ef565b62000e12565b3480156200051157600080fd5b506200021b62001004565b3480156200052957600080fd5b506200021b6200053b36600462003708565b6200101a565b3480156200054e57600080fd5b50620002b26200056036600462003440565b6089602052600090815260409020546001600160a01b031681565b3480156200058857600080fd5b506055546001600160a01b0316620002b2565b348015620005a857600080fd5b50608c54620002b2906001600160a01b031681565b348015620005ca57600080fd5b5062000235608e5481565b348015620005e257600080fd5b50620005ec600081565b60405160ff90911681526020016200023f565b3480156200060c57600080fd5b50620002b26200061e36600462003845565b620015dc565b3480156200063157600080fd5b50608754620006439063ffffffff1681565b60405163ffffffff90911681526020016200023f565b3480156200066657600080fd5b50608b54620002b2906001600160a01b031681565b6200021b6200068c366004620038f9565b62001748565b3480156200069f57600080fd5b506200021b620019fc565b348015620006b757600080fd5b5062000264620006c936600462003440565b60886020526000908152604090205460ff1681565b348015620006eb57600080fd5b506200021b620006fd36600462003440565b62001aae565b3480156200071057600080fd5b5062000643600081565b3480156200072757600080fd5b506200021b6200073936600462003478565b62001af3565b3480156200074c57600080fd5b50620005ec600181565b608e54341115620007fa5760405162461bcd60e51b815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6200080a86868686868662001b89565b505050505050565b608c546001600160a01b03163314620008ba5760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c46200212f565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b6200095362002208565b608e55565b6200096262002208565b608780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b602154600090819081805b602081101562000a83578260011660010362000a045760018160208110620009d057620009d062003961565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000a31565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a3e600284620039bf565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000a7a90620039fb565b915050620009a4565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000b7f578160011660010362000b095786818151811062000ac75762000ac762003961565b60200260200101518360405160200162000aeb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000b5b565b8287828151811062000b1f5762000b1f62003961565b602002602001015160405160200162000b42929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000b68600283620039bf565b91508062000b7681620039fb565b91505062000a9c565b5050909114949350505050565b60225460ff161562000c2d5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b62000c438a8a8a8a8a8a8a8a8a8a600162002264565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b03851690849062000c869089908b90879060240162003a93565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162000ceb919062003acc565b60006040518083038185875af1925050503d806000811462000d2a576040519150601f19603f3d011682016040523d82523d6000602084013e62000d2f565b606091505b505090508062000da75760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff161580801562000e335750600054600160ff909116105b8062000e4f5750303b15801562000e4f575060005460ff166001145b62000ec35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007f1565b6000805460ff19166001179055801562000f0457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d8290556703782dace9d90000608e5562000f9962002617565b801562000ffd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6200100e62002208565b620008c460006200269c565b60225460ff1615620010bb5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b620010d18a8a8a8a8a8a8a8a8a8a600062002264565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620011f057604080516000808252602082019092526001600160a01b0385169084906040516200112c919062003acc565b60006040518083038185875af1925050503d80600081146200116b576040519150601f19603f3d011682016040523d82523d6000602084013e62001170565b606091505b5050905080620011e95760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c4544000000000000000000000000000000000000000000000000006064820152608401620007f1565b5062001572565b60875463ffffffff9081169087160362001220576200121a6001600160a01b038616848462002706565b62001572565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620014de57600080600085806020019051810190620012c0919062003b3e565b925092509250600085848484604051620012da90620032e0565b620012e89392919062003bbf565b8190604051809103906000f590508015801562001309573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001377573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200139d919062003c0b565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620014cc9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200156f565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001547573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200156d919062003c0b565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200165f90620032e0565b601f1982820381018352601f9091011660408190526200168c908d908d908d908d908d9060200162003c56565b60408051601f1981840301815290829052620016ac929160200162003c97565b604051602081830303815290604052805190602001206040516020016200172294939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620017e95760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff908116908416036200186c5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620018b99260019263ffffffff9092169133918991899134918a919062003cca565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200198990620027b6565b608b546001600160a01b03166333d6247d620019a462000999565b6040518263ffffffff1660e01b8152600401620019c391815260200190565b600060405180830381600087803b158015620019de57600080fd5b505af1158015620019f3573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001aa45760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c462002915565b62001ab862002208565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001afd62002208565b6001600160a01b03811662001b7b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007f1565b62001b86816200269c565b50565b60225460ff161562001c2a5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff9081169086160362001cad5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b60008060606001600160a01b03891662001d425785341462001d385760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007f1565b6000915062001fcc565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001e29576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562001df0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e16919062003c0b565b5060208101518151909450925062001fca565b841562001e3e5762001e3e8a888888620029c4565b62001e556001600160a01b038b1633308a62002fe9565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001eac573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001ed6919081019062003d36565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001f15573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001f3f919081019062003d36565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001f7e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001fa4919062003d6f565b60405160200162001fb89392919062003bbf565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200200e98979695949392919062003cca565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620020b690620027b6565b608b546001600160a01b03166333d6247d620020d162000999565b6040518263ffffffff1660e01b8152600401620020f091815260200190565b600060405180830381600087803b1580156200210b57600080fd5b505af115801562002120573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff1615620021d05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6055546001600160a01b03163314620008c45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007f1565b63ffffffff8a1660009081526088602052604090205460ff1615620022f15760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af11580156200237e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620023a4919062003d8f565b90508015801590620023c35750608d54620023c0824262003da9565b10155b6200245d5760405162461bcd60e51b815260206004820152604260248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c49445f4f525f4e4f545f5945545f434c41494d414260648201527f4c45000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff878116911614620024df5760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000006064820152608401620007f1565b60875460009063ffffffff16620024f8575088620024fb565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d820152605181018990526071808201939093528151808203909301835260910190528051910120620025c9908e8e63ffffffff168462000a8c565b620021205760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c49446044820152606401620007f1565b600054610100900460ff16620026965760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007f1565b620008c4335b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620027b19084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262003042565b505050565b806001620027c76020600262003efc565b620027d3919062003da9565b602154106200284b5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007f1565b60016021600082825462002860919062003f0a565b909155505060215460005b60208110156200290a5781600116600103620028a057826001826020811062002898576200289862003961565b015550505050565b60018160208110620028b657620028b662003961565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620028f39190620039bf565b9150806200290181620039fb565b9150506200286b565b50620027b162003f25565b60225460ff166200298f5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620007f1565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b600062002a0783838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200312e92505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002d0957600080808080808062002a6a896004818d62003f54565b81019062002a79919062003f80565b9650965096509650965096509650336001600160a01b0316876001600160a01b03161462002b105760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038616301462002b905760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b8a851462002c075760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002cb5919062003acc565b6000604051808303816000865af19150503d806000811462002cf4576040519150601f19603f3d011682016040523d82523d6000602084013e62002cf9565b606091505b5050505050505050505062000ffd565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002d9c5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007f1565b60008080808080808062002db48a6004818e62003f54565b81019062002dc3919062003fdb565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462002e5c5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038716301462002edc5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002f93919062003acc565b6000604051808303816000865af19150503d806000811462002fd2576040519150601f19603f3d011682016040523d82523d6000602084013e62002fd7565b606091505b50505050505050505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526200303c9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016200274c565b50505050565b600062003099826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620031359092919063ffffffff16565b805190915015620027b15780806020019051810190620030ba919062003c0b565b620027b15760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007f1565b6020015190565b606062003146848460008562003150565b90505b9392505050565b606082471015620031ca5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401620007f1565b6001600160a01b0385163b620032235760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007f1565b600080866001600160a01b0316858760405162003241919062003acc565b60006040518083038185875af1925050503d806000811462003280576040519150601f19603f3d011682016040523d82523d6000602084013e62003285565b606091505b509150915062003297828286620032a2565b979650505050505050565b60608315620032b357508162003149565b825115620032c45782518084602001fd5b8160405162461bcd60e51b8152600401620007f1919062004067565b611a78806200407d83390190565b6001600160a01b038116811462001b8657600080fd5b80356200331181620032ee565b919050565b803563ffffffff811681146200331157600080fd5b60008083601f8401126200333e57600080fd5b50813567ffffffffffffffff8111156200335757600080fd5b6020830191508360208285010111156200337057600080fd5b9250929050565b60008060008060008060a087890312156200339157600080fd5b86356200339e81620032ee565b9550620033ae6020880162003316565b94506040870135620033c081620032ee565b935060608701359250608087013567ffffffffffffffff811115620033e457600080fd5b620033f289828a016200332b565b979a9699509497509295939492505050565b600080604083850312156200341857600080fd5b620034238362003316565b915060208301356200343581620032ee565b809150509250929050565b6000602082840312156200345357600080fd5b5035919050565b6000602082840312156200346d57600080fd5b620031498262003316565b6000602082840312156200348b57600080fd5b81356200314981620032ee565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620034f357620034f362003498565b604052919050565b600082601f8301126200350d57600080fd5b8135602067ffffffffffffffff8211156200352c576200352c62003498565b8160051b6200353d828201620034c7565b92835284810182019282810190878511156200355857600080fd5b83870192505b8483101562003297578235825291830191908301906200355e565b600080600080608085870312156200359057600080fd5b84359350602085013567ffffffffffffffff80821115620035b057600080fd5b620035be88838901620034fb565b9450604087013591508082168214620035d657600080fd5b509396929550929360600135925050565b60ff8116811462001b8657600080fd5b600080600080600080600060e0888a0312156200361357600080fd5b87356200362081620035e7565b9650620036306020890162003316565b955060408801356200364281620032ee565b9450620036526060890162003316565b935060808801356200366481620032ee565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200369e576200369e62003498565b50601f01601f191660200190565b600082601f830112620036be57600080fd5b8135620036d5620036cf8262003681565b620034c7565b818152846020838601011115620036eb57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200372957600080fd5b8a3567ffffffffffffffff808211156200374257600080fd5b620037508e838f01620034fb565b9b506200376060208e0162003316565b9a5060408d0135995060608d013598506200377e60808e0162003316565b97506200378e60a08e0162003304565b96506200379e60c08e0162003316565b9550620037ae60e08e0162003304565b94506101008d013593506101208d0135915080821115620037ce57600080fd5b50620037dd8d828e01620036ac565b9150509295989b9194979a5092959850565b600080600080608085870312156200380657600080fd5b620038118562003316565b935060208501356200382381620032ee565b925060408501356200383581620032ee565b9396929550929360600135925050565b600080600080600080600060a0888a0312156200386157600080fd5b6200386c8862003316565b965060208801356200387e81620032ee565b9550604088013567ffffffffffffffff808211156200389c57600080fd5b620038aa8b838c016200332b565b909750955060608a0135915080821115620038c457600080fd5b50620038d38a828b016200332b565b9094509250506080880135620038e981620035e7565b8091505092959891949750929550565b6000806000606084860312156200390f57600080fd5b6200391a8462003316565b925060208401356200392c81620032ee565b9150604084013567ffffffffffffffff8111156200394957600080fd5b6200395786828701620036ac565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082620039f6577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003a2f5762003a2f62003990565b5060010190565b60005b8381101562003a5357818101518382015260200162003a39565b838111156200303c5750506000910152565b6000815180845262003a7f81602086016020860162003a36565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003ac3606083018462003a65565b95945050505050565b6000825162003ae081846020870162003a36565b9190910192915050565b600082601f83011262003afc57600080fd5b815162003b0d620036cf8262003681565b81815284602083860101111562003b2357600080fd5b62003b3682602083016020870162003a36565b949350505050565b60008060006060848603121562003b5457600080fd5b835167ffffffffffffffff8082111562003b6d57600080fd5b62003b7b8783880162003aea565b9450602086015191508082111562003b9257600080fd5b5062003ba18682870162003aea565b925050604084015162003bb481620035e7565b809150509250925092565b60608152600062003bd4606083018662003a65565b828103602084015262003be8818662003a65565b91505060ff83166040830152949350505050565b801515811462001b8657600080fd5b60006020828403121562003c1e57600080fd5b8151620031498162003bfc565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003c6c60608301878962003c2b565b828103602084015262003c8181868862003c2b565b91505060ff831660408301529695505050505050565b6000835162003cab81846020880162003a36565b83519083019062003cc181836020880162003a36565b01949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003d1d8285018762003a65565b925080851660e085015250509998505050505050505050565b60006020828403121562003d4957600080fd5b815167ffffffffffffffff81111562003d6157600080fd5b62003b368482850162003aea565b60006020828403121562003d8257600080fd5b81516200314981620035e7565b60006020828403121562003da257600080fd5b5051919050565b60008282101562003dbe5762003dbe62003990565b500390565b600181815b8085111562003e2257817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003e065762003e0662003990565b8085161562003e1457918102915b93841c939080029062003dc8565b509250929050565b60008262003e3b5750600162000943565b8162003e4a5750600062000943565b816001811462003e63576002811462003e6e5762003e8e565b600191505062000943565b60ff84111562003e825762003e8262003990565b50506001821b62000943565b5060208310610133831016604e8410600b841016171562003eb3575081810a62000943565b62003ebf838362003dc3565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003ef45762003ef462003990565b029392505050565b600062003149838362003e2a565b6000821982111562003f205762003f2062003990565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000808585111562003f6557600080fd5b8386111562003f7357600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003f9c57600080fd5b873562003fa981620032ee565b9650602088013562003fbb81620032ee565b9550604088013594506060880135935060808801356200366481620035e7565b600080600080600080600080610100898b03121562003ff957600080fd5b88356200400681620032ee565b975060208901356200401881620032ee565b965060408901359550606089013594506080890135620040388162003bfc565b935060a08901356200404a81620035e7565b979a969950949793969295929450505060c08201359160e0013590565b60208152600062003149602083018462003a6556fe60c06040523480156200001157600080fd5b5060405162001a7838038062001a788339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516115be620004ba600039600061053001526000818161036f01526104fa01526115be6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b60405161019191906112d5565b60405180910390f35b6101ad6101a8366004611371565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad61020436600461139b565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad610276366004611371565b610552565b6101ad610289366004611371565b61059e565b6101c161029c3660046113d7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d23660046113d7565b60066020526000908152604090205481565b610184610645565b6101ad6102fa366004611371565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad610352366004611371565b6106ed565b6101ad610365366004611371565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f3660046113f9565b6107b2565b005b6101c16103b436600461146c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6060600380546104379061149f565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061149f565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f56565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611521565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c838361101e565b50600192915050565b6060600480546104379061149f565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c8383611124565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661088183611539565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ee3908490611521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4991815260200190565b60405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f81610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166110815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b80600260008282546110939190611521565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906110cd908490611521565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156112495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611285908490611571565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c27565b600060208083528351808285015260005b81811015611302578581018301518582016040015282016112e6565b81811115611314576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136c57600080fd5b919050565b6000806040838503121561138457600080fd5b61138d83611348565b946020939093013593505050565b6000806000606084860312156113b057600080fd5b6113b984611348565b92506113c760208501611348565b9150604084013590509250925092565b6000602082840312156113e957600080fd5b6113f282611348565b9392505050565b600080600080600080600060e0888a03121561141457600080fd5b61141d88611348565b965061142b60208901611348565b95506040880135945060608801359350608088013560ff8116811461144f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561147f57600080fd5b61148883611348565b915061149660208401611348565b90509250929050565b600181811c908216806114b357607f821691505b6020821081036114ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611534576115346114f2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156a5761156a6114f2565b5060010190565b600082821015611583576115836114f2565b50039056fea264697066735822122074c1369adb4b03ecf20b18930bac9df5d9a48b4602516485c969475d7cadf1ac64736f6c634300080f0033a26469706673582212206a1228c6bd1c4dac7ae6928a40eab39a5b5c3c43a9975d5dbb02be6bfa7a9dd364736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/ERC20PermitMock.json b/compiled-contracts/ERC20PermitMock.json index 7c0d2b30b..9514a4230 100644 --- a/compiled-contracts/ERC20PermitMock.json +++ b/compiled-contracts/ERC20PermitMock.json @@ -517,8 +517,8 @@ "type": "function" } ], - "bytecode": "0x6080604052604051620017bf380380620017bf833981016040819052620000269162000209565b838360036200003683826200032a565b5060046200004582826200032a565b5050506200005a82826200007160201b60201c565b50508151602090920191909120600655506200041d565b6001600160a01b038216620000cc5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620000e09190620003f6565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200016457600080fd5b81516001600160401b03808211156200018157620001816200013c565b604051601f8301601f19908116603f01168101908282118183101715620001ac57620001ac6200013c565b81604052838152602092508683858801011115620001c957600080fd5b600091505b83821015620001ed5785820183015181830184015290820190620001ce565b83821115620001ff5760008385830101525b9695505050505050565b600080600080608085870312156200022057600080fd5b84516001600160401b03808211156200023857600080fd5b620002468883890162000152565b955060208701519150808211156200025d57600080fd5b506200026c8782880162000152565b604087015190945090506001600160a01b03811681146200028c57600080fd5b6060959095015193969295505050565b600181811c90821680620002b157607f821691505b602082108103620002d257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200013757600081815260208120601f850160051c81016020861015620003015750805b601f850160051c820191505b8181101562000322578281556001016200030d565b505050505050565b81516001600160401b038111156200034657620003466200013c565b6200035e816200035784546200029c565b84620002d8565b602080601f8311600181146200039657600084156200037d5750858301515b600019600386901b1c1916600185901b17855562000322565b600085815260208120601f198616915b82811015620003c757888601518255948401946001909101908401620003a6565b5085821015620003e65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156200041857634e487b7160e01b600052601160045260246000fd5b500190565b611392806200042d6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806340c10f19116100e35780639e4e73181161008c578063c473af3311610066578063c473af33146103d6578063d505accf146103fd578063dd62ed3e1461041057600080fd5b80639e4e731814610389578063a457c2d7146103b0578063a9059cbb146103c357600080fd5b806370a08231116100bd57806370a082311461032b5780637ecebe001461036157806395d89b411461038157600080fd5b806340c10f19146102f257806342966c681461030557806356189cb41461031857600080fd5b806323b872dd116101455780633408e4701161011f5780633408e4701461024c5780633644e5151461025257806339509351146102df57600080fd5b806323b872dd1461020357806330adf81f14610216578063313ce5671461023d57600080fd5b8063095ea7b311610176578063095ea7b3146101c357806318160ddd146101e6578063222f5be0146101ee57600080fd5b806304622c2e1461019257806306fdde03146101ae575b600080fd5b61019b60065481565b6040519081526020015b60405180910390f35b6101b6610456565b6040516101a591906110a7565b6101d66101d1366004611143565b6104e8565b60405190151581526020016101a5565b60025461019b565b6102016101fc36600461116d565b610500565b005b6101d661021136600461116d565b610510565b61019b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b604051601281526020016101a5565b4661019b565b61019b6006546000907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f907fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc646604080516020810195909552840192909252606083015260808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6101d66102ed366004611143565b610534565b610201610300366004611143565b610580565b6102016103133660046111a9565b61058e565b61020161032636600461116d565b61059b565b61019b6103393660046111c2565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b61019b61036f3660046111c2565b60056020526000908152604090205481565b6101b66105a6565b61019b7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc681565b6101d66103be366004611143565b6105b5565b6101d66103d1366004611143565b610671565b61019b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61020161040b3660046111e4565b61067f565b61019b61041e366004611257565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546104659061128a565b80601f01602080910402602001604051908101604052809291908181526020018280546104919061128a565b80156104de5780601f106104b3576101008083540402835291602001916104de565b820191906000526020600020905b8154815290600101906020018083116104c157829003601f168201915b5050505050905090565b6000336104f68185856107ac565b5060019392505050565b61050b83838361092b565b505050565b60003361051e858285610b4e565b61052985858561092b565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104f6908290869061057b90879061130c565b6107ac565b61058a8282610c05565b5050565b6105983382610cde565b50565b61050b8383836107ac565b6060600480546104659061128a565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156106645760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61052982868684036107ac565b6000336104f681858561092b565b428410156106cf5760405162461bcd60e51b815260206004820152601960248201527f48455a3a3a7065726d69743a20415554485f4558504952454400000000000000604482015260640161065b565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260056020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661072983611324565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506107978882868686610e6e565b6107a28888886107ac565b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166108345760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff82166108bd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff83166109b45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff8216610a3d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ad95760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b50505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b485781811015610bf85760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161065b565b610b4884848484036107ac565b73ffffffffffffffffffffffffffffffffffffffff8216610c685760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161065b565b8060026000828254610c7a919061130c565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8216610d675760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610e035760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600654604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f602080830191909152818301939093527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528251808303909101815260c08201909252815191909201207f190100000000000000000000000000000000000000000000000000000000000060e083015260e2820181905261010282018690529060009061012201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610fba573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81161580159061103557508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6107a25760405162461bcd60e51b815260206004820152602b60248201527f48455a3a3a5f76616c69646174655369676e6564446174613a20494e56414c4960448201527f445f5349474e4154555245000000000000000000000000000000000000000000606482015260840161065b565b600060208083528351808285015260005b818110156110d4578581018301518582016040015282016110b8565b818111156110e6576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461113e57600080fd5b919050565b6000806040838503121561115657600080fd5b61115f8361111a565b946020939093013593505050565b60008060006060848603121561118257600080fd5b61118b8461111a565b92506111996020850161111a565b9150604084013590509250925092565b6000602082840312156111bb57600080fd5b5035919050565b6000602082840312156111d457600080fd5b6111dd8261111a565b9392505050565b600080600080600080600060e0888a0312156111ff57600080fd5b6112088861111a565b96506112166020890161111a565b95506040880135945060608801359350608088013560ff8116811461123a57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561126a57600080fd5b6112738361111a565b91506112816020840161111a565b90509250929050565b600181811c9082168061129e57607f821691505b6020821081036112d7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561131f5761131f6112dd565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611355576113556112dd565b506001019056fea2646970667358221220bf0b7db976f560dd85f7767838a1135c53a57d85ccd2df4b815db0784342a3dc64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061018d5760003560e01c806340c10f19116100e35780639e4e73181161008c578063c473af3311610066578063c473af33146103d6578063d505accf146103fd578063dd62ed3e1461041057600080fd5b80639e4e731814610389578063a457c2d7146103b0578063a9059cbb146103c357600080fd5b806370a08231116100bd57806370a082311461032b5780637ecebe001461036157806395d89b411461038157600080fd5b806340c10f19146102f257806342966c681461030557806356189cb41461031857600080fd5b806323b872dd116101455780633408e4701161011f5780633408e4701461024c5780633644e5151461025257806339509351146102df57600080fd5b806323b872dd1461020357806330adf81f14610216578063313ce5671461023d57600080fd5b8063095ea7b311610176578063095ea7b3146101c357806318160ddd146101e6578063222f5be0146101ee57600080fd5b806304622c2e1461019257806306fdde03146101ae575b600080fd5b61019b60065481565b6040519081526020015b60405180910390f35b6101b6610456565b6040516101a591906110a7565b6101d66101d1366004611143565b6104e8565b60405190151581526020016101a5565b60025461019b565b6102016101fc36600461116d565b610500565b005b6101d661021136600461116d565b610510565b61019b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b604051601281526020016101a5565b4661019b565b61019b6006546000907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f907fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc646604080516020810195909552840192909252606083015260808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6101d66102ed366004611143565b610534565b610201610300366004611143565b610580565b6102016103133660046111a9565b61058e565b61020161032636600461116d565b61059b565b61019b6103393660046111c2565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b61019b61036f3660046111c2565b60056020526000908152604090205481565b6101b66105a6565b61019b7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc681565b6101d66103be366004611143565b6105b5565b6101d66103d1366004611143565b610671565b61019b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61020161040b3660046111e4565b61067f565b61019b61041e366004611257565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546104659061128a565b80601f01602080910402602001604051908101604052809291908181526020018280546104919061128a565b80156104de5780601f106104b3576101008083540402835291602001916104de565b820191906000526020600020905b8154815290600101906020018083116104c157829003601f168201915b5050505050905090565b6000336104f68185856107ac565b5060019392505050565b61050b83838361092b565b505050565b60003361051e858285610b4e565b61052985858561092b565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104f6908290869061057b90879061130c565b6107ac565b61058a8282610c05565b5050565b6105983382610cde565b50565b61050b8383836107ac565b6060600480546104659061128a565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156106645760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61052982868684036107ac565b6000336104f681858561092b565b428410156106cf5760405162461bcd60e51b815260206004820152601960248201527f48455a3a3a7065726d69743a20415554485f4558504952454400000000000000604482015260640161065b565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260056020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661072983611324565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506107978882868686610e6e565b6107a28888886107ac565b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166108345760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff82166108bd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff83166109b45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff8216610a3d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ad95760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b50505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b485781811015610bf85760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161065b565b610b4884848484036107ac565b73ffffffffffffffffffffffffffffffffffffffff8216610c685760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161065b565b8060026000828254610c7a919061130c565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8216610d675760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610e035760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600654604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f602080830191909152818301939093527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528251808303909101815260c08201909252815191909201207f190100000000000000000000000000000000000000000000000000000000000060e083015260e2820181905261010282018690529060009061012201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610fba573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81161580159061103557508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6107a25760405162461bcd60e51b815260206004820152602b60248201527f48455a3a3a5f76616c69646174655369676e6564446174613a20494e56414c4960448201527f445f5349474e4154555245000000000000000000000000000000000000000000606482015260840161065b565b600060208083528351808285015260005b818110156110d4578581018301518582016040015282016110b8565b818111156110e6576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461113e57600080fd5b919050565b6000806040838503121561115657600080fd5b61115f8361111a565b946020939093013593505050565b60008060006060848603121561118257600080fd5b61118b8461111a565b92506111996020850161111a565b9150604084013590509250925092565b6000602082840312156111bb57600080fd5b5035919050565b6000602082840312156111d457600080fd5b6111dd8261111a565b9392505050565b600080600080600080600060e0888a0312156111ff57600080fd5b6112088861111a565b96506112166020890161111a565b95506040880135945060608801359350608088013560ff8116811461123a57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561126a57600080fd5b6112738361111a565b91506112816020840161111a565b90509250929050565b600181811c9082168061129e57607f821691505b6020821081036112d7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561131f5761131f6112dd565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611355576113556112dd565b506001019056fea2646970667358221220bf0b7db976f560dd85f7767838a1135c53a57d85ccd2df4b815db0784342a3dc64736f6c634300080f0033", + "bytecode": "0x6080604052604051620018923803806200189283398101604081905262000026916200022b565b838360036200003683826200034c565b5060046200004582826200034c565b5050506200005a82826200007160201b60201c565b50508151602090920191909120600655506200043f565b6001600160a01b038216620000cc5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620000e0919062000418565b90915550506001600160a01b038216600090815260208190526040812080548392906200010f90849062000418565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200018657600080fd5b81516001600160401b0380821115620001a357620001a36200015e565b604051601f8301601f19908116603f01168101908282118183101715620001ce57620001ce6200015e565b81604052838152602092508683858801011115620001eb57600080fd5b600091505b838210156200020f5785820183015181830184015290820190620001f0565b83821115620002215760008385830101525b9695505050505050565b600080600080608085870312156200024257600080fd5b84516001600160401b03808211156200025a57600080fd5b620002688883890162000174565b955060208701519150808211156200027f57600080fd5b506200028e8782880162000174565b604087015190945090506001600160a01b0381168114620002ae57600080fd5b6060959095015193969295505050565b600181811c90821680620002d357607f821691505b602082108103620002f457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200015957600081815260208120601f850160051c81016020861015620003235750805b601f850160051c820191505b8181101562000344578281556001016200032f565b505050505050565b81516001600160401b038111156200036857620003686200015e565b6200038081620003798454620002be565b84620002fa565b602080601f831160018114620003b857600084156200039f5750858301515b600019600386901b1c1916600185901b17855562000344565b600085815260208120601f198616915b82811015620003e957888601518255948401946001909101908401620003c8565b5085821015620004085787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156200043a57634e487b7160e01b600052601160045260246000fd5b500190565b611443806200044f6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806340c10f19116100e35780639e4e73181161008c578063c473af3311610066578063c473af33146103d6578063d505accf146103fd578063dd62ed3e1461041057600080fd5b80639e4e731814610389578063a457c2d7146103b0578063a9059cbb146103c357600080fd5b806370a08231116100bd57806370a082311461032b5780637ecebe001461036157806395d89b411461038157600080fd5b806340c10f19146102f257806342966c681461030557806356189cb41461031857600080fd5b806323b872dd116101455780633408e4701161011f5780633408e4701461024c5780633644e5151461025257806339509351146102df57600080fd5b806323b872dd1461020357806330adf81f14610216578063313ce5671461023d57600080fd5b8063095ea7b311610176578063095ea7b3146101c357806318160ddd146101e6578063222f5be0146101ee57600080fd5b806304622c2e1461019257806306fdde03146101ae575b600080fd5b61019b60065481565b6040519081526020015b60405180910390f35b6101b6610456565b6040516101a59190611141565b6101d66101d13660046111dd565b6104e8565b60405190151581526020016101a5565b60025461019b565b6102016101fc366004611207565b610500565b005b6101d6610211366004611207565b610510565b61019b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b604051601281526020016101a5565b4661019b565b61019b6006546000907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f907fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc646604080516020810195909552840192909252606083015260808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6101d66102ed3660046111dd565b610534565b6102016103003660046111dd565b610580565b610201610313366004611243565b61058e565b610201610326366004611207565b61059b565b61019b61033936600461125c565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b61019b61036f36600461125c565b60056020526000908152604090205481565b6101b66105a6565b61019b7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc681565b6101d66103be3660046111dd565b6105b5565b6101d66103d13660046111dd565b610671565b61019b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61020161040b36600461127e565b61067f565b61019b61041e3660046112f1565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461046590611324565b80601f016020809104026020016040519081016040528092919081815260200182805461049190611324565b80156104de5780601f106104b3576101008083540402835291602001916104de565b820191906000526020600020905b8154815290600101906020018083116104c157829003601f168201915b5050505050905090565b6000336104f68185856107ac565b5060019392505050565b61050b83838361092b565b505050565b60003361051e858285610b92565b61052985858561092b565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104f6908290869061057b9087906113a6565b6107ac565b61058a8282610c49565b5050565b6105983382610d4f565b50565b61050b8383836107ac565b60606004805461046590611324565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156106645760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61052982868684036107ac565b6000336104f681858561092b565b428410156106cf5760405162461bcd60e51b815260206004820152601960248201527f48455a3a3a7065726d69743a20415554485f4558504952454400000000000000604482015260640161065b565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260056020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a919086610729836113be565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506107978882868686610f08565b6107a28888886107ac565b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166108345760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff82166108bd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff83166109b45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff8216610a3d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ad95760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610b1d9084906113a6565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610b8391815260200190565b60405180910390a35b50505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b8c5781811015610c3c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161065b565b610b8c84848484036107ac565b73ffffffffffffffffffffffffffffffffffffffff8216610cac5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161065b565b8060026000828254610cbe91906113a6565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610cf89084906113a6565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8216610dd85760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610e745760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610eb09084906113f6565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600654604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f602080830191909152818301939093527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528251808303909101815260c08201909252815191909201207f190100000000000000000000000000000000000000000000000000000000000060e083015260e2820181905261010282018690529060009061012201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015611054573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116158015906110cf57508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6107a25760405162461bcd60e51b815260206004820152602b60248201527f48455a3a3a5f76616c69646174655369676e6564446174613a20494e56414c4960448201527f445f5349474e4154555245000000000000000000000000000000000000000000606482015260840161065b565b600060208083528351808285015260005b8181101561116e57858101830151858201604001528201611152565b81811115611180576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111d857600080fd5b919050565b600080604083850312156111f057600080fd5b6111f9836111b4565b946020939093013593505050565b60008060006060848603121561121c57600080fd5b611225846111b4565b9250611233602085016111b4565b9150604084013590509250925092565b60006020828403121561125557600080fd5b5035919050565b60006020828403121561126e57600080fd5b611277826111b4565b9392505050565b600080600080600080600060e0888a03121561129957600080fd5b6112a2886111b4565b96506112b0602089016111b4565b95506040880135945060608801359350608088013560ff811681146112d457600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561130457600080fd5b61130d836111b4565b915061131b602084016111b4565b90509250929050565b600181811c9082168061133857607f821691505b602082108103611371577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113b9576113b9611377565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036113ef576113ef611377565b5060010190565b60008282101561140857611408611377565b50039056fea2646970667358221220fca20729a90e81ceeeaa5285d72846fd512c992192630ec1c849572ca45c3ec264736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061018d5760003560e01c806340c10f19116100e35780639e4e73181161008c578063c473af3311610066578063c473af33146103d6578063d505accf146103fd578063dd62ed3e1461041057600080fd5b80639e4e731814610389578063a457c2d7146103b0578063a9059cbb146103c357600080fd5b806370a08231116100bd57806370a082311461032b5780637ecebe001461036157806395d89b411461038157600080fd5b806340c10f19146102f257806342966c681461030557806356189cb41461031857600080fd5b806323b872dd116101455780633408e4701161011f5780633408e4701461024c5780633644e5151461025257806339509351146102df57600080fd5b806323b872dd1461020357806330adf81f14610216578063313ce5671461023d57600080fd5b8063095ea7b311610176578063095ea7b3146101c357806318160ddd146101e6578063222f5be0146101ee57600080fd5b806304622c2e1461019257806306fdde03146101ae575b600080fd5b61019b60065481565b6040519081526020015b60405180910390f35b6101b6610456565b6040516101a59190611141565b6101d66101d13660046111dd565b6104e8565b60405190151581526020016101a5565b60025461019b565b6102016101fc366004611207565b610500565b005b6101d6610211366004611207565b610510565b61019b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b604051601281526020016101a5565b4661019b565b61019b6006546000907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f907fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc646604080516020810195909552840192909252606083015260808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6101d66102ed3660046111dd565b610534565b6102016103003660046111dd565b610580565b610201610313366004611243565b61058e565b610201610326366004611207565b61059b565b61019b61033936600461125c565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b61019b61036f36600461125c565b60056020526000908152604090205481565b6101b66105a6565b61019b7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc681565b6101d66103be3660046111dd565b6105b5565b6101d66103d13660046111dd565b610671565b61019b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61020161040b36600461127e565b61067f565b61019b61041e3660046112f1565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461046590611324565b80601f016020809104026020016040519081016040528092919081815260200182805461049190611324565b80156104de5780601f106104b3576101008083540402835291602001916104de565b820191906000526020600020905b8154815290600101906020018083116104c157829003601f168201915b5050505050905090565b6000336104f68185856107ac565b5060019392505050565b61050b83838361092b565b505050565b60003361051e858285610b92565b61052985858561092b565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104f6908290869061057b9087906113a6565b6107ac565b61058a8282610c49565b5050565b6105983382610d4f565b50565b61050b8383836107ac565b60606004805461046590611324565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156106645760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61052982868684036107ac565b6000336104f681858561092b565b428410156106cf5760405162461bcd60e51b815260206004820152601960248201527f48455a3a3a7065726d69743a20415554485f4558504952454400000000000000604482015260640161065b565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260056020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a919086610729836113be565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506107978882868686610f08565b6107a28888886107ac565b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166108345760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff82166108bd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff83166109b45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff8216610a3d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ad95760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610b1d9084906113a6565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610b8391815260200190565b60405180910390a35b50505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b8c5781811015610c3c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161065b565b610b8c84848484036107ac565b73ffffffffffffffffffffffffffffffffffffffff8216610cac5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161065b565b8060026000828254610cbe91906113a6565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610cf89084906113a6565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8216610dd85760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610e745760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610eb09084906113f6565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600654604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f602080830191909152818301939093527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528251808303909101815260c08201909252815191909201207f190100000000000000000000000000000000000000000000000000000000000060e083015260e2820181905261010282018690529060009061012201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015611054573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116158015906110cf57508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6107a25760405162461bcd60e51b815260206004820152602b60248201527f48455a3a3a5f76616c69646174655369676e6564446174613a20494e56414c4960448201527f445f5349474e4154555245000000000000000000000000000000000000000000606482015260840161065b565b600060208083528351808285015260005b8181101561116e57858101830151858201604001528201611152565b81811115611180576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111d857600080fd5b919050565b600080604083850312156111f057600080fd5b6111f9836111b4565b946020939093013593505050565b60008060006060848603121561121c57600080fd5b611225846111b4565b9250611233602085016111b4565b9150604084013590509250925092565b60006020828403121561125557600080fd5b5035919050565b60006020828403121561126e57600080fd5b611277826111b4565b9392505050565b600080600080600080600060e0888a03121561129957600080fd5b6112a2886111b4565b96506112b0602089016111b4565b95506040880135945060608801359350608088013560ff811681146112d457600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561130457600080fd5b61130d836111b4565b915061131b602084016111b4565b90509250929050565b600181811c9082168061133857607f821691505b602082108103611371577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113b9576113b9611377565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036113ef576113ef611377565b5060010190565b60008282101561140857611408611377565b50039056fea2646970667358221220fca20729a90e81ceeeaa5285d72846fd512c992192630ec1c849572ca45c3ec264736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/GlobalExitRootManager.json b/compiled-contracts/GlobalExitRootManager.json index 79803eb35..4338fecb3 100644 --- a/compiled-contracts/GlobalExitRootManager.json +++ b/compiled-contracts/GlobalExitRootManager.json @@ -151,8 +151,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506105ce806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461017857600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610523565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610523565b610198565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e366004610565565b610342565b6005546101539073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100a0565b6004546101539073ffffffffffffffffffffffffffffffffffffffff1681565b60055473ffffffffffffffffffffffffffffffffffffffff163314806101d5575060045473ffffffffffffffffffffffffffffffffffffffff1633145b610266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b60055473ffffffffffffffffffffffffffffffffffffffff16330361028b5760018190555b60045473ffffffffffffffffffffffffffffffffffffffff1633036102b05760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361033e57600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103625750600054600160ff909116105b8061037c5750303b15801561037c575060005460ff166001145b610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161025d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561046657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6005805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556004805492851692909116919091179055801561051e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561053557600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461056057600080fd5b919050565b6000806040838503121561057857600080fd5b6105818361053c565b915061058f6020840161053c565b9050925092905056fea264697066735822122087c7663431492f30a105bf22524206fa2a82b4aead6816ddcf7c2da40b828ee964736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461017857600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610523565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610523565b610198565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e366004610565565b610342565b6005546101539073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100a0565b6004546101539073ffffffffffffffffffffffffffffffffffffffff1681565b60055473ffffffffffffffffffffffffffffffffffffffff163314806101d5575060045473ffffffffffffffffffffffffffffffffffffffff1633145b610266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b60055473ffffffffffffffffffffffffffffffffffffffff16330361028b5760018190555b60045473ffffffffffffffffffffffffffffffffffffffff1633036102b05760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361033e57600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103625750600054600160ff909116105b8061037c5750303b15801561037c575060005460ff166001145b610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161025d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561046657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6005805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556004805492851692909116919091179055801561051e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561053557600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461056057600080fd5b919050565b6000806040838503121561057857600080fd5b6105818361053c565b915061058f6020840161053c565b9050925092905056fea264697066735822122087c7663431492f30a105bf22524206fa2a82b4aead6816ddcf7c2da40b828ee964736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506105ce806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461017857600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610523565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610523565b610198565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e366004610565565b610342565b6005546101539073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100a0565b6004546101539073ffffffffffffffffffffffffffffffffffffffff1681565b60055473ffffffffffffffffffffffffffffffffffffffff163314806101d5575060045473ffffffffffffffffffffffffffffffffffffffff1633145b610266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b60055473ffffffffffffffffffffffffffffffffffffffff16330361028b5760018190555b60045473ffffffffffffffffffffffffffffffffffffffff1633036102b05760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361033e57600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103625750600054600160ff909116105b8061037c5750303b15801561037c575060005460ff166001145b610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161025d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561046657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6005805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556004805492851692909116919091179055801561051e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561053557600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461056057600080fd5b919050565b6000806040838503121561057857600080fd5b6105818361053c565b915061058f6020840161053c565b9050925092905056fea2646970667358221220423e83d388a63ed7ac53287c741e2b54c7d39b0614d1fb089d983befe87d324564736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461017857600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610523565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610523565b610198565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e366004610565565b610342565b6005546101539073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100a0565b6004546101539073ffffffffffffffffffffffffffffffffffffffff1681565b60055473ffffffffffffffffffffffffffffffffffffffff163314806101d5575060045473ffffffffffffffffffffffffffffffffffffffff1633145b610266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b60055473ffffffffffffffffffffffffffffffffffffffff16330361028b5760018190555b60045473ffffffffffffffffffffffffffffffffffffffff1633036102b05760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361033e57600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103625750600054600160ff909116105b8061037c5750303b15801561037c575060005460ff166001145b610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161025d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561046657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6005805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556004805492851692909116919091179055801561051e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561053557600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461056057600080fd5b919050565b6000806040838503121561057857600080fd5b6105818361053c565b915061058f6020840161053c565b9050925092905056fea2646970667358221220423e83d388a63ed7ac53287c741e2b54c7d39b0614d1fb089d983befe87d324564736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/GlobalExitRootManagerL2.json b/compiled-contracts/GlobalExitRootManagerL2.json index 87cb86c5c..f923b07aa 100644 --- a/compiled-contracts/GlobalExitRootManagerL2.json +++ b/compiled-contracts/GlobalExitRootManagerL2.json @@ -73,8 +73,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5060405161027938038061027983398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b6101e6806100936000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610197565b60006020819052908152604090205481565b6100a061009b366004610197565b6100e7565b005b6002546100c29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610064565b60025473ffffffffffffffffffffffffffffffffffffffff163314610192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a7570646174654560448201527f786974526f6f743a204f4e4c595f425249444745000000000000000000000000606482015260840160405180910390fd5b600155565b6000602082840312156101a957600080fd5b503591905056fea2646970667358221220fea7fcab965a97796cf30d6ff699830b40cf06628fa4f9baf7c5725155af254564736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610197565b60006020819052908152604090205481565b6100a061009b366004610197565b6100e7565b005b6002546100c29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610064565b60025473ffffffffffffffffffffffffffffffffffffffff163314610192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a7570646174654560448201527f786974526f6f743a204f4e4c595f425249444745000000000000000000000000606482015260840160405180910390fd5b600155565b6000602082840312156101a957600080fd5b503591905056fea2646970667358221220fea7fcab965a97796cf30d6ff699830b40cf06628fa4f9baf7c5725155af254564736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5060405161027938038061027983398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b6101e6806100936000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610197565b60006020819052908152604090205481565b6100a061009b366004610197565b6100e7565b005b6002546100c29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610064565b60025473ffffffffffffffffffffffffffffffffffffffff163314610192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a7570646174654560448201527f786974526f6f743a204f4e4c595f425249444745000000000000000000000000606482015260840160405180910390fd5b600155565b6000602082840312156101a957600080fd5b503591905056fea2646970667358221220016d470f475254214f39dcc99bd9d9791546fd270bad790bf7a87e10c2e92c0464736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610197565b60006020819052908152604090205481565b6100a061009b366004610197565b6100e7565b005b6002546100c29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610064565b60025473ffffffffffffffffffffffffffffffffffffffff163314610192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a7570646174654560448201527f786974526f6f743a204f4e4c595f425249444745000000000000000000000000606482015260840160405180910390fd5b600155565b6000602082840312156101a957600080fd5b503591905056fea2646970667358221220016d470f475254214f39dcc99bd9d9791546fd270bad790bf7a87e10c2e92c0464736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/GlobalExitRootManagerL2Mock.json b/compiled-contracts/GlobalExitRootManagerL2Mock.json index ce1bc72d1..0d152dbb0 100644 --- a/compiled-contracts/GlobalExitRootManagerL2Mock.json +++ b/compiled-contracts/GlobalExitRootManagerL2Mock.json @@ -104,8 +104,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506040516102ef3803806102ef83398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b61025c806100936000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c806333d6247d1161005057806333d6247d146100c857806396e07459146100db578063a3c573eb146100fb57600080fd5b806301fd904414610077578063116c40c314610093578063257b3632146100a8575b600080fd5b61008060015481565b6040519081526020015b60405180910390f35b6100a66100a13660046101eb565b600155565b005b6100806100b63660046101eb565b60006020819052908152604090205481565b6100a66100d63660046101eb565b610140565b6100a66100e9366004610204565b60009182526020829052604090912055565b60025461011b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161008a565b60025473ffffffffffffffffffffffffffffffffffffffff1633146100a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a7570646174654560448201527f786974526f6f743a204f4e4c595f425249444745000000000000000000000000606482015260840160405180910390fd5b6000602082840312156101fd57600080fd5b5035919050565b6000806040838503121561021757600080fd5b5050803592602090910135915056fea2646970667358221220a32bf46736e715c19b2284ac2bb76ce1543e9344b11d06b9403153cc6c8f964b64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100725760003560e01c806333d6247d1161005057806333d6247d146100c857806396e07459146100db578063a3c573eb146100fb57600080fd5b806301fd904414610077578063116c40c314610093578063257b3632146100a8575b600080fd5b61008060015481565b6040519081526020015b60405180910390f35b6100a66100a13660046101eb565b600155565b005b6100806100b63660046101eb565b60006020819052908152604090205481565b6100a66100d63660046101eb565b610140565b6100a66100e9366004610204565b60009182526020829052604090912055565b60025461011b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161008a565b60025473ffffffffffffffffffffffffffffffffffffffff1633146100a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a7570646174654560448201527f786974526f6f743a204f4e4c595f425249444745000000000000000000000000606482015260840160405180910390fd5b6000602082840312156101fd57600080fd5b5035919050565b6000806040838503121561021757600080fd5b5050803592602090910135915056fea2646970667358221220a32bf46736e715c19b2284ac2bb76ce1543e9344b11d06b9403153cc6c8f964b64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506040516102ef3803806102ef83398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b61025c806100936000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c806333d6247d1161005057806333d6247d146100c857806396e07459146100db578063a3c573eb146100fb57600080fd5b806301fd904414610077578063116c40c314610093578063257b3632146100a8575b600080fd5b61008060015481565b6040519081526020015b60405180910390f35b6100a66100a13660046101eb565b600155565b005b6100806100b63660046101eb565b60006020819052908152604090205481565b6100a66100d63660046101eb565b610140565b6100a66100e9366004610204565b60009182526020829052604090912055565b60025461011b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161008a565b60025473ffffffffffffffffffffffffffffffffffffffff1633146100a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a7570646174654560448201527f786974526f6f743a204f4e4c595f425249444745000000000000000000000000606482015260840160405180910390fd5b6000602082840312156101fd57600080fd5b5035919050565b6000806040838503121561021757600080fd5b5050803592602090910135915056fea2646970667358221220d2bef258c77ff9dd55a7e99fcc3d972c4394423f9643b3e5c0f7ae83e2da961864736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100725760003560e01c806333d6247d1161005057806333d6247d146100c857806396e07459146100db578063a3c573eb146100fb57600080fd5b806301fd904414610077578063116c40c314610093578063257b3632146100a8575b600080fd5b61008060015481565b6040519081526020015b60405180910390f35b6100a66100a13660046101eb565b600155565b005b6100806100b63660046101eb565b60006020819052908152604090205481565b6100a66100d63660046101eb565b610140565b6100a66100e9366004610204565b60009182526020829052604090912055565b60025461011b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161008a565b60025473ffffffffffffffffffffffffffffffffffffffff1633146100a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a7570646174654560448201527f786974526f6f743a204f4e4c595f425249444745000000000000000000000000606482015260840160405180910390fd5b6000602082840312156101fd57600080fd5b5035919050565b6000806040838503121561021757600080fd5b5050803592602090910135915056fea2646970667358221220d2bef258c77ff9dd55a7e99fcc3d972c4394423f9643b3e5c0f7ae83e2da961864736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/GlobalExitRootManagerMock.json b/compiled-contracts/GlobalExitRootManagerMock.json index 5ef303ca5..d98c0632c 100644 --- a/compiled-contracts/GlobalExitRootManagerMock.json +++ b/compiled-contracts/GlobalExitRootManagerMock.json @@ -198,8 +198,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506040516108c43803806108c483398101604081905261002f916101bb565b6100398282610040565b50506101ee565b600054610100900460ff16158080156100605750600054600160ff909116105b8061008b57506100793061019060201b6105de1760201c565b15801561008b575060005460ff166001145b6100f25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015610115576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561018b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b80516001600160a01b03811681146101b657600080fd5b919050565b600080604083850312156101ce57600080fd5b6101d78361019f565b91506101e56020840161019f565b90509250929050565b6106c7806101fd6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c80633ed691ef116100765780635bcef6731161005b5780635bcef6731461017c5780635ec6a8df1461019c578063a3c573eb146101e157600080fd5b80633ed691ef14610130578063485cc9551461016957600080fd5b8063257b3632116100a7578063257b3632146100f4578063319cf7351461011457806333d6247d1461011d57600080fd5b806301fd9044146100c3578063051a9e28146100df575b600080fd5b6100cc60015481565b6040519081526020015b60405180910390f35b6100f26100ed3660046105fa565b610201565b005b6100cc6101023660046105fa565b60036020526000908152604090205481565b6100cc60025481565b6100f261012b3660046105fa565b610253565b6100cc60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100f261017736600461063c565b6103fd565b6100f261018a36600461066f565b60009182526003602052604090912055565b6005546101bc9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100d6565b6004546101bc9073ffffffffffffffffffffffffffffffffffffffff1681565b806003600061023f60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b60055473ffffffffffffffffffffffffffffffffffffffff16331480610290575060045473ffffffffffffffffffffffffffffffffffffffff1633145b610321576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b60055473ffffffffffffffffffffffffffffffffffffffff1633036103465760018190555b60045473ffffffffffffffffffffffffffffffffffffffff16330361036b5760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036103f957600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff161580801561041d5750600054600160ff909116105b806104375750303b158015610437575060005460ff166001145b6104c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610318565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561052157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6005805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255600480549285169290911691909117905580156105d957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60006020828403121561060c57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461063757600080fd5b919050565b6000806040838503121561064f57600080fd5b61065883610613565b915061066660208401610613565b90509250929050565b6000806040838503121561068257600080fd5b5050803592602090910135915056fea26469706673582212206d13783be5c9904d415bd5901458df71375f44b8010a7e57e675fc68a3a845c964736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100be5760003560e01c80633ed691ef116100765780635bcef6731161005b5780635bcef6731461017c5780635ec6a8df1461019c578063a3c573eb146101e157600080fd5b80633ed691ef14610130578063485cc9551461016957600080fd5b8063257b3632116100a7578063257b3632146100f4578063319cf7351461011457806333d6247d1461011d57600080fd5b806301fd9044146100c3578063051a9e28146100df575b600080fd5b6100cc60015481565b6040519081526020015b60405180910390f35b6100f26100ed3660046105fa565b610201565b005b6100cc6101023660046105fa565b60036020526000908152604090205481565b6100cc60025481565b6100f261012b3660046105fa565b610253565b6100cc60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100f261017736600461063c565b6103fd565b6100f261018a36600461066f565b60009182526003602052604090912055565b6005546101bc9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100d6565b6004546101bc9073ffffffffffffffffffffffffffffffffffffffff1681565b806003600061023f60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b60055473ffffffffffffffffffffffffffffffffffffffff16331480610290575060045473ffffffffffffffffffffffffffffffffffffffff1633145b610321576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b60055473ffffffffffffffffffffffffffffffffffffffff1633036103465760018190555b60045473ffffffffffffffffffffffffffffffffffffffff16330361036b5760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036103f957600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff161580801561041d5750600054600160ff909116105b806104375750303b158015610437575060005460ff166001145b6104c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610318565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561052157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6005805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255600480549285169290911691909117905580156105d957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60006020828403121561060c57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461063757600080fd5b919050565b6000806040838503121561064f57600080fd5b61065883610613565b915061066660208401610613565b90509250929050565b6000806040838503121561068257600080fd5b5050803592602090910135915056fea26469706673582212206d13783be5c9904d415bd5901458df71375f44b8010a7e57e675fc68a3a845c964736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506040516108c43803806108c483398101604081905261002f916101bb565b6100398282610040565b50506101ee565b600054610100900460ff16158080156100605750600054600160ff909116105b8061008b57506100793061019060201b6105de1760201c565b15801561008b575060005460ff166001145b6100f25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015610115576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561018b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b80516001600160a01b03811681146101b657600080fd5b919050565b600080604083850312156101ce57600080fd5b6101d78361019f565b91506101e56020840161019f565b90509250929050565b6106c7806101fd6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c80633ed691ef116100765780635bcef6731161005b5780635bcef6731461017c5780635ec6a8df1461019c578063a3c573eb146101e157600080fd5b80633ed691ef14610130578063485cc9551461016957600080fd5b8063257b3632116100a7578063257b3632146100f4578063319cf7351461011457806333d6247d1461011d57600080fd5b806301fd9044146100c3578063051a9e28146100df575b600080fd5b6100cc60015481565b6040519081526020015b60405180910390f35b6100f26100ed3660046105fa565b610201565b005b6100cc6101023660046105fa565b60036020526000908152604090205481565b6100cc60025481565b6100f261012b3660046105fa565b610253565b6100cc60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100f261017736600461063c565b6103fd565b6100f261018a36600461066f565b60009182526003602052604090912055565b6005546101bc9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100d6565b6004546101bc9073ffffffffffffffffffffffffffffffffffffffff1681565b806003600061023f60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b60055473ffffffffffffffffffffffffffffffffffffffff16331480610290575060045473ffffffffffffffffffffffffffffffffffffffff1633145b610321576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b60055473ffffffffffffffffffffffffffffffffffffffff1633036103465760018190555b60045473ffffffffffffffffffffffffffffffffffffffff16330361036b5760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036103f957600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff161580801561041d5750600054600160ff909116105b806104375750303b158015610437575060005460ff166001145b6104c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610318565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561052157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6005805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255600480549285169290911691909117905580156105d957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60006020828403121561060c57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461063757600080fd5b919050565b6000806040838503121561064f57600080fd5b61065883610613565b915061066660208401610613565b90509250929050565b6000806040838503121561068257600080fd5b5050803592602090910135915056fea2646970667358221220cbe12c97a593b53d809a7814270492fe620120ec442f38e592e0c485bdefc76364736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100be5760003560e01c80633ed691ef116100765780635bcef6731161005b5780635bcef6731461017c5780635ec6a8df1461019c578063a3c573eb146101e157600080fd5b80633ed691ef14610130578063485cc9551461016957600080fd5b8063257b3632116100a7578063257b3632146100f4578063319cf7351461011457806333d6247d1461011d57600080fd5b806301fd9044146100c3578063051a9e28146100df575b600080fd5b6100cc60015481565b6040519081526020015b60405180910390f35b6100f26100ed3660046105fa565b610201565b005b6100cc6101023660046105fa565b60036020526000908152604090205481565b6100cc60025481565b6100f261012b3660046105fa565b610253565b6100cc60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100f261017736600461063c565b6103fd565b6100f261018a36600461066f565b60009182526003602052604090912055565b6005546101bc9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100d6565b6004546101bc9073ffffffffffffffffffffffffffffffffffffffff1681565b806003600061023f60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b60055473ffffffffffffffffffffffffffffffffffffffff16331480610290575060045473ffffffffffffffffffffffffffffffffffffffff1633145b610321576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b60055473ffffffffffffffffffffffffffffffffffffffff1633036103465760018190555b60045473ffffffffffffffffffffffffffffffffffffffff16330361036b5760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036103f957600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff161580801561041d5750600054600160ff909116105b806104375750303b158015610437575060005460ff166001145b6104c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610318565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561052157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6005805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255600480549285169290911691909117905580156105d957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60006020828403121561060c57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461063757600080fd5b919050565b6000806040838503121561064f57600080fd5b61065883610613565b915061066660208401610613565b90509250929050565b6000806040838503121561068257600080fd5b5050803592602090910135915056fea2646970667358221220cbe12c97a593b53d809a7814270492fe620120ec442f38e592e0c485bdefc76364736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/ProofOfEfficiency.json b/compiled-contracts/ProofOfEfficiency.json index a3e35cc8e..72951f9d6 100644 --- a/compiled-contracts/ProofOfEfficiency.json +++ b/compiled-contracts/ProofOfEfficiency.json @@ -896,8 +896,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5061494d806100206000396000f3fe608060405234801561001057600080fd5b50600436106102c85760003560e01c80638da5cb5b1161017b578063cfa8ed47116100d8578063e7a7ed021161008c578063eaeb077b11610071578063eaeb077b14610688578063f2fde38b1461069b578063f7552761146106ae57600080fd5b8063e7a7ed0214610638578063e8bf92ed1461066857600080fd5b8063d8d1091b116100bd578063d8d1091b146105f0578063d8f54db014610603578063dbc169761461063057600080fd5b8063cfa8ed47146105a4578063d02103ca146105d057600080fd5b8063b02286c01161012f578063b6b0b09711610114578063b6b0b09714610559578063c3fd0f9c1461057e578063c89e42df1461059157600080fd5b8063b02286c01461052f578063b4d63f581461053957600080fd5b8063a3c573eb11610160578063a3c573eb146104f1578063ab9fc5ef14610511578063adc879e91461051b57600080fd5b80638da5cb5b146104cb57806399f5634e146104e957600080fd5b8063542028d5116102295780637152facf116101dd5780637fcb3653116101c25780637fcb36531461049157806381df7d3f146104a55780638c4a0af7146104b857600080fd5b80637152facf14610476578063798470571461048957600080fd5b80636b8616ce1161020e5780636b8616ce1461043b5780636ff512cc1461045b578063715018a61461046e57600080fd5b8063542028d51461042057806355b925e61461042857600080fd5b806327eb6c0f11610280578063423fa85611610265578063423fa856146103aa57806345605267146103ca5780635392c5e0146103f257600080fd5b806327eb6c0f146103525780633c1582671461039757600080fd5b806319d8ac61116102b157806319d8ac61146103085780631c1083e2146103355780632072f6c51461034a57600080fd5b8063107bf28c146102cd57806315064c96146102eb575b600080fd5b6102d56106bd565b6040516102e29190613e2f565b60405180910390f35b6065546102f89060ff1681565b60405190151581526020016102e2565b60685461031c9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102e2565b610348610343366004613e7b565b61074b565b005b610348610857565b6070546103729073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e2565b6103486103a5366004613ff0565b610908565b60685461031c9068010000000000000000900467ffffffffffffffff1681565b60685461031c90700100000000000000000000000000000000900467ffffffffffffffff1681565b610412610400366004614107565b606b6020526000908152604090205481565b6040519081526020016102e2565b6102d5611299565b610348610436366004614139565b6112a6565b610412610449366004614107565b60666020526000908152604090205481565b610348610469366004613e7b565b61186f565b610348611989565b6102d56104843660046141bc565b61199b565b610412611bd2565b60695461031c9067ffffffffffffffff1681565b6103486104b3366004614217565b611c4c565b6103486104c6366004614311565b611fa5565b60335473ffffffffffffffffffffffffffffffffffffffff16610372565b6104126120bf565b6071546103729073ffffffffffffffffffffffffffffffffffffffff1681565b61031c62093a8081565b606e5461031c9067ffffffffffffffff1681565b610412620493e081565b610412610547366004614107565b60676020526000908152604090205481565b60655461037290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b61034861058c366004614139565b6121f0565b61034861059f36600461432e565b61283a565b6069546103729068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103729073ffffffffffffffffffffffffffffffffffffffff1681565b6103486105fe366004614363565b61290f565b6069546102f8907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610348612fb4565b60685461031c907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103729073ffffffffffffffffffffffffffffffffffffffff1681565b610348610696366004614456565b613143565b6103486106a9366004613e7b565b613644565b61041267016345785d8a000081565b606f80546106ca9061449b565b80601f01602080910402602001604051908101604052809291908181526020018280546106f69061449b565b80156107435780601f1061071857610100808354040283529160200191610743565b820191906000526020600020905b81548152906001019060200180831161072657829003601f168201915b505050505081565b60705473ffffffffffffffffffffffffffffffffffffffff1633146107dd5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff16156108f65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b6108fe6136e1565b610906613748565b565b60655460ff16156109a75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610a405760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d4565b805180610adb5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b8581101561108a576000878281518110610b4157610b416144ee565b602002602001015190506000816060015167ffffffffffffffff161115610d5a5783610b6c8161454c565b945050600081600001518051906020012082602001518360600151604051602001610bcf93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610c9c5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610d545760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016107d4565b50610ef5565b60208101511580610e095750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610dc39160040190815260200190565b6020604051808303816000875af1158015610de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e069190614573565b15155b610e7b5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016107d4565b805151620493e011610ef55760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016107d4565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610f2b575042816040015167ffffffffffffffff1611155b610fc35760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061106c9061454c565b955050806040015195505080806110829061458c565b915050610b25565b5060685467ffffffffffffffff78010000000000000000000000000000000000000000000000009091048116908316111561112d5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016107d4565b60685460009061115b90700100000000000000000000000000000000900467ffffffffffffffff16846145c4565b61116f9067ffffffffffffffff16876145ed565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061124c33306112268467016345785d8a0000614604565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169291906137d2565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d80546106ca9061449b565b60655460ff16156113455760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b60695467ffffffffffffffff90811690881611156113f15760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016107d4565b60695467ffffffffffffffff9081169087161161149c5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016107d4565b67ffffffffffffffff87166000908152606b602052604090205461154e5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a4016107d4565b600061155c8888888861199b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516115919190614641565b602060405180830381855afa1580156115ae573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906115d19190614573565b6115db919061468c565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d9161164591899189918991906004016146a0565b602060405180830381865afa158015611662573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611686919061471a565b6116f85760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016107d4565b6069546117569033906117159067ffffffffffffffff168b6145c4565b67ffffffffffffffff166117276120bf565b6117319190614604565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169190613890565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b15801561180b57600080fd5b505af115801561181f573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146119085760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d4565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161084c565b6119916136e1565b61090660006138eb565b67ffffffffffffffff8085166000818152606760205260408082205493871682529020546060929115806119ce57508115155b611a665760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b80611aff5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec01604051602081830303815290604052925050505b949350505050565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691611c21917801000000000000000000000000000000000000000000000000909104166001614737565b611c2b91906145c4565b611c479067ffffffffffffffff16670de0b6b3a7640000614604565b905090565b600054610100900460ff1615808015611c6c5750600054600160ff909116105b80611c865750303b158015611c86575060005460ff166001145b611cf85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107d4565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611d5657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d611e9587826147b1565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f611ed685826147b1565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556070805492851692909116919091179055611f34613962565b8015611f9757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461203e5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d4565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061084c90831515815260200190565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612136573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215a9190614573565b60695460685491925060009167ffffffffffffffff918216916801000000000000000082048116916121bf91700100000000000000000000000000000000820481169178010000000000000000000000000000000000000000000000009004166145c4565b6121c99190614737565b6121d391906145c4565b67ffffffffffffffff1690506121e981836148ad565b9250505090565b60655460ff161561228f5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b8567ffffffffffffffff168767ffffffffffffffff161061233e5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a4016107d4565b60695467ffffffffffffffff90811690871611156124105760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c4016107d4565b67ffffffffffffffff87166000908152606b60205260409020546124c25760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a4016107d4565b67ffffffffffffffff86166000908152606b60205260409020546125745760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a4016107d4565b60006125828888888861199b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516125b79190614641565b602060405180830381855afa1580156125d4573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906125f79190614573565b612601919061468c565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d9161266b91899189918991906004016146a0565b602060405180830381865afa158015612688573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ac919061471a565b61271e5760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f460000000060648201526084016107d4565b67ffffffffffffffff88166000908152606b60205260409020548690036127d35760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a4016107d4565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a161282f613748565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146128d35760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d4565b606d6128df82826147b1565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161084c9190613e2f565b60655460ff16156129ae5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612a715760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d4565b805180612b0c5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b60685467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612b579184917001000000000000000000000000000000009004166148c1565b1115612bcb5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016107d4565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b84811015612ee4576000868281518110612c2b57612c2b6144ee565b602002602001015190508380612c409061454c565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114612d615760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016107d4565b612d6c6001886145ed565b8303612e2a574262093a808360400151612d869190614737565b67ffffffffffffffff161115612e2a5760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016107d4565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612ecc9061454c565b96505050508080612edc9061458c565b915050612c0f565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff1661302c5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d4565b60705473ffffffffffffffffffffffffffffffffffffffff1633146130b95760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016107d4565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561312357600080fd5b505af1158015613137573d6000803e3d6000fd5b505050506109066139e8565b60655460ff16156131e25760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146132a55760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d4565b60006132af611bd2565b9050818111156133275760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016107d4565b620493e08351106133a05760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016107d4565b6065546133ca90610100900473ffffffffffffffffffffffffffffffffffffffff163330846137d2565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa15801561343a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345e9190614573565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff169060186134988361454c565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161351193929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260669093529120553233036135e157606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261363e565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613635939291906148d9565b60405180910390a25b50505050565b61364c6136e1565b73ffffffffffffffffffffffffffffffffffffffff81166136d55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107d4565b6136de816138eb565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109065760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d4565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156137b257600080fd5b505af11580156137c6573d6000803e3d6000fd5b50505050610906613ab3565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261363e9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613ba8565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526138e69084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161382c565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166139df5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107d4565b610906336138eb565b60655460ff16613a605760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d4565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff1615613b525760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6000613c0a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613c9a9092919063ffffffff16565b8051909150156138e65780806020019051810190613c28919061471a565b6138e65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107d4565b6060611bca8484600085856000808673ffffffffffffffffffffffffffffffffffffffff168587604051613cce9190614641565b60006040518083038185875af1925050503d8060008114613d0b576040519150601f19603f3d011682016040523d82523d6000602084013e613d10565b606091505b5091509150613d2187838387613d2c565b979650505050505050565b60608315613da8578251600003613da15773ffffffffffffffffffffffffffffffffffffffff85163b613da15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107d4565b5081611bca565b611bca8383815115613dbd5781518083602001fd5b8060405162461bcd60e51b81526004016107d49190613e2f565b60005b83811015613df2578181015183820152602001613dda565b8381111561363e5750506000910152565b60008151808452613e1b816020860160208601613dd7565b601f01601f19169290920160200192915050565b602081526000613e426020830184613e03565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146136de57600080fd5b8035613e7681613e49565b919050565b600060208284031215613e8d57600080fd5b8135613e4281613e49565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613eea57613eea613e98565b60405290565b6040516060810167ffffffffffffffff81118282101715613eea57613eea613e98565b604051601f8201601f1916810167ffffffffffffffff81118282101715613f3c57613f3c613e98565b604052919050565b600067ffffffffffffffff821115613f5e57613f5e613e98565b5060051b60200190565b600082601f830112613f7957600080fd5b813567ffffffffffffffff811115613f9357613f93613e98565b613fa66020601f19601f84011601613f13565b818152846020838601011115613fbb57600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613e7657600080fd5b6000602080838503121561400357600080fd5b823567ffffffffffffffff8082111561401b57600080fd5b818501915085601f83011261402f57600080fd5b813561404261403d82613f44565b613f13565b81815260059190911b8301840190848101908883111561406157600080fd5b8585015b838110156140fa5780358581111561407d5760008081fd5b86016080818c03601f19018113156140955760008081fd5b61409d613ec7565b89830135888111156140af5760008081fd5b6140bd8e8c83870101613f68565b8252506040808401358b83015260606140d7818601613fd8565b828401526140e6848601613fd8565b908301525085525050918601918601614065565b5098975050505050505050565b60006020828403121561411957600080fd5b613e4282613fd8565b806040810183101561413357600080fd5b92915050565b6000806000806000806000610180888a03121561415557600080fd5b61415e88613fd8565b965061416c60208901613fd8565b955060408801359450606088013593506141898960808a01614122565b925061014088018981111561419d57600080fd5b60c0890192506141ad8a82614122565b91505092959891949750929550565b600080600080608085870312156141d257600080fd5b6141db85613fd8565b93506141e960208601613fd8565b93969395505050506040820135916060013590565b80151581146136de57600080fd5b8035613e76816141fe565b60008060008060008060008060008060006101608c8e03121561423957600080fd5b6142428c613e6b565b9a5061425060208d01613e6b565b995061425e60408d01613e6b565b985060608c0135975061427360808d01613e6b565b965061428160a08d0161420c565b955067ffffffffffffffff8060c08e0135111561429d57600080fd5b6142ad8e60c08f01358f01613f68565b95506142bb60e08e01613fd8565b9450806101008e013511156142cf57600080fd5b506142e18d6101008e01358e01613f68565b92506142f06101208d01613e6b565b91506142ff6101408d01613e6b565b90509295989b509295989b9093969950565b60006020828403121561432357600080fd5b8135613e42816141fe565b60006020828403121561434057600080fd5b813567ffffffffffffffff81111561435757600080fd5b611bca84828501613f68565b6000602080838503121561437657600080fd5b823567ffffffffffffffff8082111561438e57600080fd5b818501915085601f8301126143a257600080fd5b81356143b061403d82613f44565b81815260059190911b830184019084810190888311156143cf57600080fd5b8585015b838110156140fa578035858111156143eb5760008081fd5b86016060818c03601f19018113156144035760008081fd5b61440b613ef0565b898301358881111561441d5760008081fd5b61442b8e8c83870101613f68565b8252506040808401358b830152614443838501613fd8565b90820152855250509186019186016143d3565b6000806040838503121561446957600080fd5b823567ffffffffffffffff81111561448057600080fd5b61448c85828601613f68565b95602094909401359450505050565b600181811c908216806144af57607f821691505b6020821081036144e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036145695761456961451d565b6001019392505050565b60006020828403121561458557600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036145bd576145bd61451d565b5060010190565b600067ffffffffffffffff838116908316818110156145e5576145e561451d565b039392505050565b6000828210156145ff576145ff61451d565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561463c5761463c61451d565b500290565b60008251614653818460208701613dd7565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261469b5761469b61465d565b500690565b61012081016040808784376000838201818152879190815b60028110156146d8578484833790840182815292840192906001016146b8565b5050828760c0870137610100850181815286935091505b600181101561470e5782518252602092830192909101906001016146ef565b50505095945050505050565b60006020828403121561472c57600080fd5b8151613e42816141fe565b600067ffffffffffffffff80831681851680830382111561475a5761475a61451d565b01949350505050565b601f8211156138e657600081815260208120601f850160051c8101602086101561478a5750805b601f850160051c820191505b818110156147a957828155600101614796565b505050505050565b815167ffffffffffffffff8111156147cb576147cb613e98565b6147df816147d9845461449b565b84614763565b602080601f83116001811461483257600084156147fc5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556147a9565b600085815260208120601f198616915b8281101561486157888601518255948401946001909101908401614842565b508582101561489d57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000826148bc576148bc61465d565b500490565b600082198211156148d4576148d461451d565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff8316602082015260606040820152600061490e6060830184613e03565b9594505050505056fea264697066735822122072b5c002080ce472b107b854ad5fe9f57820bd639501f2433bac96aff76973df64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102c85760003560e01c80638da5cb5b1161017b578063cfa8ed47116100d8578063e7a7ed021161008c578063eaeb077b11610071578063eaeb077b14610688578063f2fde38b1461069b578063f7552761146106ae57600080fd5b8063e7a7ed0214610638578063e8bf92ed1461066857600080fd5b8063d8d1091b116100bd578063d8d1091b146105f0578063d8f54db014610603578063dbc169761461063057600080fd5b8063cfa8ed47146105a4578063d02103ca146105d057600080fd5b8063b02286c01161012f578063b6b0b09711610114578063b6b0b09714610559578063c3fd0f9c1461057e578063c89e42df1461059157600080fd5b8063b02286c01461052f578063b4d63f581461053957600080fd5b8063a3c573eb11610160578063a3c573eb146104f1578063ab9fc5ef14610511578063adc879e91461051b57600080fd5b80638da5cb5b146104cb57806399f5634e146104e957600080fd5b8063542028d5116102295780637152facf116101dd5780637fcb3653116101c25780637fcb36531461049157806381df7d3f146104a55780638c4a0af7146104b857600080fd5b80637152facf14610476578063798470571461048957600080fd5b80636b8616ce1161020e5780636b8616ce1461043b5780636ff512cc1461045b578063715018a61461046e57600080fd5b8063542028d51461042057806355b925e61461042857600080fd5b806327eb6c0f11610280578063423fa85611610265578063423fa856146103aa57806345605267146103ca5780635392c5e0146103f257600080fd5b806327eb6c0f146103525780633c1582671461039757600080fd5b806319d8ac61116102b157806319d8ac61146103085780631c1083e2146103355780632072f6c51461034a57600080fd5b8063107bf28c146102cd57806315064c96146102eb575b600080fd5b6102d56106bd565b6040516102e29190613e2f565b60405180910390f35b6065546102f89060ff1681565b60405190151581526020016102e2565b60685461031c9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102e2565b610348610343366004613e7b565b61074b565b005b610348610857565b6070546103729073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e2565b6103486103a5366004613ff0565b610908565b60685461031c9068010000000000000000900467ffffffffffffffff1681565b60685461031c90700100000000000000000000000000000000900467ffffffffffffffff1681565b610412610400366004614107565b606b6020526000908152604090205481565b6040519081526020016102e2565b6102d5611299565b610348610436366004614139565b6112a6565b610412610449366004614107565b60666020526000908152604090205481565b610348610469366004613e7b565b61186f565b610348611989565b6102d56104843660046141bc565b61199b565b610412611bd2565b60695461031c9067ffffffffffffffff1681565b6103486104b3366004614217565b611c4c565b6103486104c6366004614311565b611fa5565b60335473ffffffffffffffffffffffffffffffffffffffff16610372565b6104126120bf565b6071546103729073ffffffffffffffffffffffffffffffffffffffff1681565b61031c62093a8081565b606e5461031c9067ffffffffffffffff1681565b610412620493e081565b610412610547366004614107565b60676020526000908152604090205481565b60655461037290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b61034861058c366004614139565b6121f0565b61034861059f36600461432e565b61283a565b6069546103729068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103729073ffffffffffffffffffffffffffffffffffffffff1681565b6103486105fe366004614363565b61290f565b6069546102f8907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610348612fb4565b60685461031c907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103729073ffffffffffffffffffffffffffffffffffffffff1681565b610348610696366004614456565b613143565b6103486106a9366004613e7b565b613644565b61041267016345785d8a000081565b606f80546106ca9061449b565b80601f01602080910402602001604051908101604052809291908181526020018280546106f69061449b565b80156107435780601f1061071857610100808354040283529160200191610743565b820191906000526020600020905b81548152906001019060200180831161072657829003601f168201915b505050505081565b60705473ffffffffffffffffffffffffffffffffffffffff1633146107dd5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff16156108f65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b6108fe6136e1565b610906613748565b565b60655460ff16156109a75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610a405760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d4565b805180610adb5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b8581101561108a576000878281518110610b4157610b416144ee565b602002602001015190506000816060015167ffffffffffffffff161115610d5a5783610b6c8161454c565b945050600081600001518051906020012082602001518360600151604051602001610bcf93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610c9c5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610d545760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016107d4565b50610ef5565b60208101511580610e095750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610dc39160040190815260200190565b6020604051808303816000875af1158015610de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e069190614573565b15155b610e7b5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016107d4565b805151620493e011610ef55760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016107d4565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610f2b575042816040015167ffffffffffffffff1611155b610fc35760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061106c9061454c565b955050806040015195505080806110829061458c565b915050610b25565b5060685467ffffffffffffffff78010000000000000000000000000000000000000000000000009091048116908316111561112d5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016107d4565b60685460009061115b90700100000000000000000000000000000000900467ffffffffffffffff16846145c4565b61116f9067ffffffffffffffff16876145ed565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061124c33306112268467016345785d8a0000614604565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169291906137d2565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d80546106ca9061449b565b60655460ff16156113455760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b60695467ffffffffffffffff90811690881611156113f15760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016107d4565b60695467ffffffffffffffff9081169087161161149c5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016107d4565b67ffffffffffffffff87166000908152606b602052604090205461154e5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a4016107d4565b600061155c8888888861199b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516115919190614641565b602060405180830381855afa1580156115ae573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906115d19190614573565b6115db919061468c565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d9161164591899189918991906004016146a0565b602060405180830381865afa158015611662573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611686919061471a565b6116f85760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016107d4565b6069546117569033906117159067ffffffffffffffff168b6145c4565b67ffffffffffffffff166117276120bf565b6117319190614604565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169190613890565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b15801561180b57600080fd5b505af115801561181f573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146119085760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d4565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161084c565b6119916136e1565b61090660006138eb565b67ffffffffffffffff8085166000818152606760205260408082205493871682529020546060929115806119ce57508115155b611a665760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b80611aff5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec01604051602081830303815290604052925050505b949350505050565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691611c21917801000000000000000000000000000000000000000000000000909104166001614737565b611c2b91906145c4565b611c479067ffffffffffffffff16670de0b6b3a7640000614604565b905090565b600054610100900460ff1615808015611c6c5750600054600160ff909116105b80611c865750303b158015611c86575060005460ff166001145b611cf85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107d4565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611d5657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d611e9587826147b1565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f611ed685826147b1565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556070805492851692909116919091179055611f34613962565b8015611f9757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461203e5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d4565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061084c90831515815260200190565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612136573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215a9190614573565b60695460685491925060009167ffffffffffffffff918216916801000000000000000082048116916121bf91700100000000000000000000000000000000820481169178010000000000000000000000000000000000000000000000009004166145c4565b6121c99190614737565b6121d391906145c4565b67ffffffffffffffff1690506121e981836148ad565b9250505090565b60655460ff161561228f5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b8567ffffffffffffffff168767ffffffffffffffff161061233e5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a4016107d4565b60695467ffffffffffffffff90811690871611156124105760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c4016107d4565b67ffffffffffffffff87166000908152606b60205260409020546124c25760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a4016107d4565b67ffffffffffffffff86166000908152606b60205260409020546125745760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a4016107d4565b60006125828888888861199b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516125b79190614641565b602060405180830381855afa1580156125d4573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906125f79190614573565b612601919061468c565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d9161266b91899189918991906004016146a0565b602060405180830381865afa158015612688573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ac919061471a565b61271e5760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f460000000060648201526084016107d4565b67ffffffffffffffff88166000908152606b60205260409020548690036127d35760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a4016107d4565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a161282f613748565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146128d35760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d4565b606d6128df82826147b1565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161084c9190613e2f565b60655460ff16156129ae5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612a715760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d4565b805180612b0c5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b60685467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612b579184917001000000000000000000000000000000009004166148c1565b1115612bcb5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016107d4565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b84811015612ee4576000868281518110612c2b57612c2b6144ee565b602002602001015190508380612c409061454c565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114612d615760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016107d4565b612d6c6001886145ed565b8303612e2a574262093a808360400151612d869190614737565b67ffffffffffffffff161115612e2a5760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016107d4565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612ecc9061454c565b96505050508080612edc9061458c565b915050612c0f565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff1661302c5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d4565b60705473ffffffffffffffffffffffffffffffffffffffff1633146130b95760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016107d4565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561312357600080fd5b505af1158015613137573d6000803e3d6000fd5b505050506109066139e8565b60655460ff16156131e25760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146132a55760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d4565b60006132af611bd2565b9050818111156133275760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016107d4565b620493e08351106133a05760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016107d4565b6065546133ca90610100900473ffffffffffffffffffffffffffffffffffffffff163330846137d2565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa15801561343a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345e9190614573565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff169060186134988361454c565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161351193929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260669093529120553233036135e157606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261363e565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613635939291906148d9565b60405180910390a25b50505050565b61364c6136e1565b73ffffffffffffffffffffffffffffffffffffffff81166136d55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107d4565b6136de816138eb565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109065760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d4565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156137b257600080fd5b505af11580156137c6573d6000803e3d6000fd5b50505050610906613ab3565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261363e9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613ba8565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526138e69084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161382c565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166139df5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107d4565b610906336138eb565b60655460ff16613a605760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d4565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff1615613b525760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6000613c0a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613c9a9092919063ffffffff16565b8051909150156138e65780806020019051810190613c28919061471a565b6138e65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107d4565b6060611bca8484600085856000808673ffffffffffffffffffffffffffffffffffffffff168587604051613cce9190614641565b60006040518083038185875af1925050503d8060008114613d0b576040519150601f19603f3d011682016040523d82523d6000602084013e613d10565b606091505b5091509150613d2187838387613d2c565b979650505050505050565b60608315613da8578251600003613da15773ffffffffffffffffffffffffffffffffffffffff85163b613da15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107d4565b5081611bca565b611bca8383815115613dbd5781518083602001fd5b8060405162461bcd60e51b81526004016107d49190613e2f565b60005b83811015613df2578181015183820152602001613dda565b8381111561363e5750506000910152565b60008151808452613e1b816020860160208601613dd7565b601f01601f19169290920160200192915050565b602081526000613e426020830184613e03565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146136de57600080fd5b8035613e7681613e49565b919050565b600060208284031215613e8d57600080fd5b8135613e4281613e49565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613eea57613eea613e98565b60405290565b6040516060810167ffffffffffffffff81118282101715613eea57613eea613e98565b604051601f8201601f1916810167ffffffffffffffff81118282101715613f3c57613f3c613e98565b604052919050565b600067ffffffffffffffff821115613f5e57613f5e613e98565b5060051b60200190565b600082601f830112613f7957600080fd5b813567ffffffffffffffff811115613f9357613f93613e98565b613fa66020601f19601f84011601613f13565b818152846020838601011115613fbb57600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613e7657600080fd5b6000602080838503121561400357600080fd5b823567ffffffffffffffff8082111561401b57600080fd5b818501915085601f83011261402f57600080fd5b813561404261403d82613f44565b613f13565b81815260059190911b8301840190848101908883111561406157600080fd5b8585015b838110156140fa5780358581111561407d5760008081fd5b86016080818c03601f19018113156140955760008081fd5b61409d613ec7565b89830135888111156140af5760008081fd5b6140bd8e8c83870101613f68565b8252506040808401358b83015260606140d7818601613fd8565b828401526140e6848601613fd8565b908301525085525050918601918601614065565b5098975050505050505050565b60006020828403121561411957600080fd5b613e4282613fd8565b806040810183101561413357600080fd5b92915050565b6000806000806000806000610180888a03121561415557600080fd5b61415e88613fd8565b965061416c60208901613fd8565b955060408801359450606088013593506141898960808a01614122565b925061014088018981111561419d57600080fd5b60c0890192506141ad8a82614122565b91505092959891949750929550565b600080600080608085870312156141d257600080fd5b6141db85613fd8565b93506141e960208601613fd8565b93969395505050506040820135916060013590565b80151581146136de57600080fd5b8035613e76816141fe565b60008060008060008060008060008060006101608c8e03121561423957600080fd5b6142428c613e6b565b9a5061425060208d01613e6b565b995061425e60408d01613e6b565b985060608c0135975061427360808d01613e6b565b965061428160a08d0161420c565b955067ffffffffffffffff8060c08e0135111561429d57600080fd5b6142ad8e60c08f01358f01613f68565b95506142bb60e08e01613fd8565b9450806101008e013511156142cf57600080fd5b506142e18d6101008e01358e01613f68565b92506142f06101208d01613e6b565b91506142ff6101408d01613e6b565b90509295989b509295989b9093969950565b60006020828403121561432357600080fd5b8135613e42816141fe565b60006020828403121561434057600080fd5b813567ffffffffffffffff81111561435757600080fd5b611bca84828501613f68565b6000602080838503121561437657600080fd5b823567ffffffffffffffff8082111561438e57600080fd5b818501915085601f8301126143a257600080fd5b81356143b061403d82613f44565b81815260059190911b830184019084810190888311156143cf57600080fd5b8585015b838110156140fa578035858111156143eb5760008081fd5b86016060818c03601f19018113156144035760008081fd5b61440b613ef0565b898301358881111561441d5760008081fd5b61442b8e8c83870101613f68565b8252506040808401358b830152614443838501613fd8565b90820152855250509186019186016143d3565b6000806040838503121561446957600080fd5b823567ffffffffffffffff81111561448057600080fd5b61448c85828601613f68565b95602094909401359450505050565b600181811c908216806144af57607f821691505b6020821081036144e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036145695761456961451d565b6001019392505050565b60006020828403121561458557600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036145bd576145bd61451d565b5060010190565b600067ffffffffffffffff838116908316818110156145e5576145e561451d565b039392505050565b6000828210156145ff576145ff61451d565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561463c5761463c61451d565b500290565b60008251614653818460208701613dd7565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261469b5761469b61465d565b500690565b61012081016040808784376000838201818152879190815b60028110156146d8578484833790840182815292840192906001016146b8565b5050828760c0870137610100850181815286935091505b600181101561470e5782518252602092830192909101906001016146ef565b50505095945050505050565b60006020828403121561472c57600080fd5b8151613e42816141fe565b600067ffffffffffffffff80831681851680830382111561475a5761475a61451d565b01949350505050565b601f8211156138e657600081815260208120601f850160051c8101602086101561478a5750805b601f850160051c820191505b818110156147a957828155600101614796565b505050505050565b815167ffffffffffffffff8111156147cb576147cb613e98565b6147df816147d9845461449b565b84614763565b602080601f83116001811461483257600084156147fc5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556147a9565b600085815260208120601f198616915b8281101561486157888601518255948401946001909101908401614842565b508582101561489d57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000826148bc576148bc61465d565b500490565b600082198211156148d4576148d461451d565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff8316602082015260606040820152600061490e6060830184613e03565b9594505050505056fea264697066735822122072b5c002080ce472b107b854ad5fe9f57820bd639501f2433bac96aff76973df64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506149c4806100206000396000f3fe608060405234801561001057600080fd5b50600436106102c85760003560e01c80638da5cb5b1161017b578063cfa8ed47116100d8578063e7a7ed021161008c578063eaeb077b11610071578063eaeb077b14610688578063f2fde38b1461069b578063f7552761146106ae57600080fd5b8063e7a7ed0214610638578063e8bf92ed1461066857600080fd5b8063d8d1091b116100bd578063d8d1091b146105f0578063d8f54db014610603578063dbc169761461063057600080fd5b8063cfa8ed47146105a4578063d02103ca146105d057600080fd5b8063b02286c01161012f578063b6b0b09711610114578063b6b0b09714610559578063c3fd0f9c1461057e578063c89e42df1461059157600080fd5b8063b02286c01461052f578063b4d63f581461053957600080fd5b8063a3c573eb11610160578063a3c573eb146104f1578063ab9fc5ef14610511578063adc879e91461051b57600080fd5b80638da5cb5b146104cb57806399f5634e146104e957600080fd5b8063542028d5116102295780637152facf116101dd5780637fcb3653116101c25780637fcb36531461049157806381df7d3f146104a55780638c4a0af7146104b857600080fd5b80637152facf14610476578063798470571461048957600080fd5b80636b8616ce1161020e5780636b8616ce1461043b5780636ff512cc1461045b578063715018a61461046e57600080fd5b8063542028d51461042057806355b925e61461042857600080fd5b806327eb6c0f11610280578063423fa85611610265578063423fa856146103aa57806345605267146103ca5780635392c5e0146103f257600080fd5b806327eb6c0f146103525780633c1582671461039757600080fd5b806319d8ac61116102b157806319d8ac61146103085780631c1083e2146103355780632072f6c51461034a57600080fd5b8063107bf28c146102cd57806315064c96146102eb575b600080fd5b6102d56106bd565b6040516102e29190613ea5565b60405180910390f35b6065546102f89060ff1681565b60405190151581526020016102e2565b60685461031c9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102e2565b610348610343366004613eea565b61074b565b005b610348610857565b6070546103729073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e2565b6103486103a536600461405f565b610908565b60685461031c9068010000000000000000900467ffffffffffffffff1681565b60685461031c90700100000000000000000000000000000000900467ffffffffffffffff1681565b610412610400366004614176565b606b6020526000908152604090205481565b6040519081526020016102e2565b6102d5611299565b6103486104363660046141a8565b6112a6565b610412610449366004614176565b60666020526000908152604090205481565b610348610469366004613eea565b61186f565b610348611989565b6102d561048436600461422b565b61199b565b610412611bd1565b60695461031c9067ffffffffffffffff1681565b6103486104b3366004614286565b611c4b565b6103486104c6366004614380565b611fa4565b60335473ffffffffffffffffffffffffffffffffffffffff16610372565b6104126120be565b6071546103729073ffffffffffffffffffffffffffffffffffffffff1681565b61031c62093a8081565b606e5461031c9067ffffffffffffffff1681565b610412620493e081565b610412610547366004614176565b60676020526000908152604090205481565b60655461037290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b61034861058c3660046141a8565b6121ef565b61034861059f36600461439d565b612839565b6069546103729068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103729073ffffffffffffffffffffffffffffffffffffffff1681565b6103486105fe3660046143da565b61290e565b6069546102f8907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610348612fb3565b60685461031c907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103729073ffffffffffffffffffffffffffffffffffffffff1681565b6103486106963660046144cd565b613142565b6103486106a9366004613eea565b613643565b61041267016345785d8a000081565b606f80546106ca90614512565b80601f01602080910402602001604051908101604052809291908181526020018280546106f690614512565b80156107435780601f1061071857610100808354040283529160200191610743565b820191906000526020600020905b81548152906001019060200180831161072657829003601f168201915b505050505081565b60705473ffffffffffffffffffffffffffffffffffffffff1633146107dd5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff16156108f65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b6108fe6136e0565b610906613747565b565b60655460ff16156109a75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610a405760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d4565b805180610adb5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b8581101561108a576000878281518110610b4157610b41614565565b602002602001015190506000816060015167ffffffffffffffff161115610d5a5783610b6c816145c3565b945050600081600001518051906020012082602001518360600151604051602001610bcf93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610c9c5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610d545760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016107d4565b50610ef5565b60208101511580610e095750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610dc39160040190815260200190565b6020604051808303816000875af1158015610de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0691906145ea565b15155b610e7b5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016107d4565b805151620493e011610ef55760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016107d4565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610f2b575042816040015167ffffffffffffffff1611155b610fc35760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061106c906145c3565b9550508060400151955050808061108290614603565b915050610b25565b5060685467ffffffffffffffff78010000000000000000000000000000000000000000000000009091048116908316111561112d5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016107d4565b60685460009061115b90700100000000000000000000000000000000900467ffffffffffffffff168461463b565b61116f9067ffffffffffffffff1687614664565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061124c33306112268467016345785d8a000061467b565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169291906137d1565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d80546106ca90614512565b60655460ff16156113455760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b60695467ffffffffffffffff90811690881611156113f15760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016107d4565b60695467ffffffffffffffff9081169087161161149c5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016107d4565b67ffffffffffffffff87166000908152606b602052604090205461154e5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a4016107d4565b600061155c8888888861199b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161159191906146b8565b602060405180830381855afa1580156115ae573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906115d191906145ea565b6115db9190614703565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916116459189918991899190600401614717565b602060405180830381865afa158015611662573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116869190614791565b6116f85760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016107d4565b6069546117569033906117159067ffffffffffffffff168b61463b565b67ffffffffffffffff166117276120be565b611731919061467b565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16919061388f565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b15801561180b57600080fd5b505af115801561181f573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146119085760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d4565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161084c565b6119916136e0565b61090660006138ea565b67ffffffffffffffff8085166000818152606760205260408082205493871682529020546060929115806119ce57508115155b611a665760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b80611aff5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691611c209178010000000000000000000000000000000000000000000000009091041660016147ae565b611c2a919061463b565b611c469067ffffffffffffffff16670de0b6b3a764000061467b565b905090565b600054610100900460ff1615808015611c6b5750600054600160ff909116105b80611c855750303b158015611c85575060005460ff166001145b611cf75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107d4565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611d5557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d611e948782614828565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f611ed58582614828565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556070805492851692909116919091179055611f33613961565b8015611f9657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461203d5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d4565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061084c90831515815260200190565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612135573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215991906145ea565b60695460685491925060009167ffffffffffffffff918216916801000000000000000082048116916121be917001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041661463b565b6121c891906147ae565b6121d2919061463b565b67ffffffffffffffff1690506121e88183614924565b9250505090565b60655460ff161561228e5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b8567ffffffffffffffff168767ffffffffffffffff161061233d5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a4016107d4565b60695467ffffffffffffffff908116908716111561240f5760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c4016107d4565b67ffffffffffffffff87166000908152606b60205260409020546124c15760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a4016107d4565b67ffffffffffffffff86166000908152606b60205260409020546125735760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a4016107d4565b60006125818888888861199b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516125b691906146b8565b602060405180830381855afa1580156125d3573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906125f691906145ea565b6126009190614703565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d9161266a9189918991899190600401614717565b602060405180830381865afa158015612687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ab9190614791565b61271d5760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f460000000060648201526084016107d4565b67ffffffffffffffff88166000908152606b60205260409020548690036127d25760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a4016107d4565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a161282e613747565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146128d25760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d4565b606d6128de8282614828565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161084c9190613ea5565b60655460ff16156129ad5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612a705760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d4565b805180612b0b5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b60685467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612b56918491700100000000000000000000000000000000900416614938565b1115612bca5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016107d4565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b84811015612ee3576000868281518110612c2a57612c2a614565565b602002602001015190508380612c3f906145c3565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114612d605760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016107d4565b612d6b600188614664565b8303612e29574262093a808360400151612d8591906147ae565b67ffffffffffffffff161115612e295760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016107d4565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612ecb906145c3565b96505050508080612edb90614603565b915050612c0e565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff1661302b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d4565b60705473ffffffffffffffffffffffffffffffffffffffff1633146130b85760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016107d4565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561312257600080fd5b505af1158015613136573d6000803e3d6000fd5b505050506109066139e7565b60655460ff16156131e15760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146132a45760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d4565b60006132ae611bd1565b9050818111156133265760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016107d4565b620493e083511061339f5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016107d4565b6065546133c990610100900473ffffffffffffffffffffffffffffffffffffffff163330846137d1565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345d91906145ea565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613497836145c3565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161351093929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260669093529120553233036135e057606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261363d565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161363493929190614950565b60405180910390a25b50505050565b61364b6136e0565b73ffffffffffffffffffffffffffffffffffffffff81166136d45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107d4565b6136dd816138ea565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109065760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d4565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156137b157600080fd5b505af11580156137c5573d6000803e3d6000fd5b50505050610906613ab2565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261363d9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613ba7565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526138e59084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161382b565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166139de5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107d4565b610906336138ea565b60655460ff16613a5f5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d4565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff1615613b515760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6000613c09826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613c999092919063ffffffff16565b8051909150156138e55780806020019051810190613c279190614791565b6138e55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107d4565b6060613ca88484600085613cb2565b90505b9392505050565b606082471015613d2a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016107d4565b73ffffffffffffffffffffffffffffffffffffffff85163b613d8e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107d4565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613db791906146b8565b60006040518083038185875af1925050503d8060008114613df4576040519150601f19603f3d011682016040523d82523d6000602084013e613df9565b606091505b5091509150613e09828286613e14565b979650505050505050565b60608315613e23575081613cab565b825115613e335782518084602001fd5b8160405162461bcd60e51b81526004016107d49190613ea5565b60005b83811015613e68578181015183820152602001613e50565b8381111561363d5750506000910152565b60008151808452613e91816020860160208601613e4d565b601f01601f19169290920160200192915050565b602081526000613cab6020830184613e79565b73ffffffffffffffffffffffffffffffffffffffff811681146136dd57600080fd5b8035613ee581613eb8565b919050565b600060208284031215613efc57600080fd5b8135613cab81613eb8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613f5957613f59613f07565b60405290565b6040516060810167ffffffffffffffff81118282101715613f5957613f59613f07565b604051601f8201601f1916810167ffffffffffffffff81118282101715613fab57613fab613f07565b604052919050565b600067ffffffffffffffff821115613fcd57613fcd613f07565b5060051b60200190565b600082601f830112613fe857600080fd5b813567ffffffffffffffff81111561400257614002613f07565b6140156020601f19601f84011601613f82565b81815284602083860101111561402a57600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613ee557600080fd5b6000602080838503121561407257600080fd5b823567ffffffffffffffff8082111561408a57600080fd5b818501915085601f83011261409e57600080fd5b81356140b16140ac82613fb3565b613f82565b81815260059190911b830184019084810190888311156140d057600080fd5b8585015b83811015614169578035858111156140ec5760008081fd5b86016080818c03601f19018113156141045760008081fd5b61410c613f36565b898301358881111561411e5760008081fd5b61412c8e8c83870101613fd7565b8252506040808401358b8301526060614146818601614047565b82840152614155848601614047565b9083015250855250509186019186016140d4565b5098975050505050505050565b60006020828403121561418857600080fd5b613cab82614047565b80604081018310156141a257600080fd5b92915050565b6000806000806000806000610180888a0312156141c457600080fd5b6141cd88614047565b96506141db60208901614047565b955060408801359450606088013593506141f88960808a01614191565b925061014088018981111561420c57600080fd5b60c08901925061421c8a82614191565b91505092959891949750929550565b6000806000806080858703121561424157600080fd5b61424a85614047565b935061425860208601614047565b93969395505050506040820135916060013590565b80151581146136dd57600080fd5b8035613ee58161426d565b60008060008060008060008060008060006101608c8e0312156142a857600080fd5b6142b18c613eda565b9a506142bf60208d01613eda565b99506142cd60408d01613eda565b985060608c013597506142e260808d01613eda565b96506142f060a08d0161427b565b955067ffffffffffffffff8060c08e0135111561430c57600080fd5b61431c8e60c08f01358f01613fd7565b955061432a60e08e01614047565b9450806101008e0135111561433e57600080fd5b506143508d6101008e01358e01613fd7565b925061435f6101208d01613eda565b915061436e6101408d01613eda565b90509295989b509295989b9093969950565b60006020828403121561439257600080fd5b8135613cab8161426d565b6000602082840312156143af57600080fd5b813567ffffffffffffffff8111156143c657600080fd5b6143d284828501613fd7565b949350505050565b600060208083850312156143ed57600080fd5b823567ffffffffffffffff8082111561440557600080fd5b818501915085601f83011261441957600080fd5b81356144276140ac82613fb3565b81815260059190911b8301840190848101908883111561444657600080fd5b8585015b83811015614169578035858111156144625760008081fd5b86016060818c03601f190181131561447a5760008081fd5b614482613f5f565b89830135888111156144945760008081fd5b6144a28e8c83870101613fd7565b8252506040808401358b8301526144ba838501614047565b908201528552505091860191860161444a565b600080604083850312156144e057600080fd5b823567ffffffffffffffff8111156144f757600080fd5b61450385828601613fd7565b95602094909401359450505050565b600181811c9082168061452657607f821691505b60208210810361455f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036145e0576145e0614594565b6001019392505050565b6000602082840312156145fc57600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361463457614634614594565b5060010190565b600067ffffffffffffffff8381169083168181101561465c5761465c614594565b039392505050565b60008282101561467657614676614594565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146b3576146b3614594565b500290565b600082516146ca818460208701613e4d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614712576147126146d4565b500690565b61012081016040808784376000838201818152879190815b600281101561474f5784848337908401828152928401929060010161472f565b5050828760c0870137610100850181815286935091505b6001811015614785578251825260209283019290910190600101614766565b50505095945050505050565b6000602082840312156147a357600080fd5b8151613cab8161426d565b600067ffffffffffffffff8083168185168083038211156147d1576147d1614594565b01949350505050565b601f8211156138e557600081815260208120601f850160051c810160208610156148015750805b601f850160051c820191505b818110156148205782815560010161480d565b505050505050565b815167ffffffffffffffff81111561484257614842613f07565b614856816148508454614512565b846147da565b602080601f8311600181146148a957600084156148735750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614820565b600085815260208120601f198616915b828110156148d8578886015182559484019460019091019084016148b9565b508582101561491457878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082614933576149336146d4565b500490565b6000821982111561494b5761494b614594565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006149856060830184613e79565b9594505050505056fea26469706673582212207e277784efbe8f83ff553ede664750471887c02fa33f0f412c42f49abac3f00664736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102c85760003560e01c80638da5cb5b1161017b578063cfa8ed47116100d8578063e7a7ed021161008c578063eaeb077b11610071578063eaeb077b14610688578063f2fde38b1461069b578063f7552761146106ae57600080fd5b8063e7a7ed0214610638578063e8bf92ed1461066857600080fd5b8063d8d1091b116100bd578063d8d1091b146105f0578063d8f54db014610603578063dbc169761461063057600080fd5b8063cfa8ed47146105a4578063d02103ca146105d057600080fd5b8063b02286c01161012f578063b6b0b09711610114578063b6b0b09714610559578063c3fd0f9c1461057e578063c89e42df1461059157600080fd5b8063b02286c01461052f578063b4d63f581461053957600080fd5b8063a3c573eb11610160578063a3c573eb146104f1578063ab9fc5ef14610511578063adc879e91461051b57600080fd5b80638da5cb5b146104cb57806399f5634e146104e957600080fd5b8063542028d5116102295780637152facf116101dd5780637fcb3653116101c25780637fcb36531461049157806381df7d3f146104a55780638c4a0af7146104b857600080fd5b80637152facf14610476578063798470571461048957600080fd5b80636b8616ce1161020e5780636b8616ce1461043b5780636ff512cc1461045b578063715018a61461046e57600080fd5b8063542028d51461042057806355b925e61461042857600080fd5b806327eb6c0f11610280578063423fa85611610265578063423fa856146103aa57806345605267146103ca5780635392c5e0146103f257600080fd5b806327eb6c0f146103525780633c1582671461039757600080fd5b806319d8ac61116102b157806319d8ac61146103085780631c1083e2146103355780632072f6c51461034a57600080fd5b8063107bf28c146102cd57806315064c96146102eb575b600080fd5b6102d56106bd565b6040516102e29190613ea5565b60405180910390f35b6065546102f89060ff1681565b60405190151581526020016102e2565b60685461031c9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102e2565b610348610343366004613eea565b61074b565b005b610348610857565b6070546103729073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e2565b6103486103a536600461405f565b610908565b60685461031c9068010000000000000000900467ffffffffffffffff1681565b60685461031c90700100000000000000000000000000000000900467ffffffffffffffff1681565b610412610400366004614176565b606b6020526000908152604090205481565b6040519081526020016102e2565b6102d5611299565b6103486104363660046141a8565b6112a6565b610412610449366004614176565b60666020526000908152604090205481565b610348610469366004613eea565b61186f565b610348611989565b6102d561048436600461422b565b61199b565b610412611bd1565b60695461031c9067ffffffffffffffff1681565b6103486104b3366004614286565b611c4b565b6103486104c6366004614380565b611fa4565b60335473ffffffffffffffffffffffffffffffffffffffff16610372565b6104126120be565b6071546103729073ffffffffffffffffffffffffffffffffffffffff1681565b61031c62093a8081565b606e5461031c9067ffffffffffffffff1681565b610412620493e081565b610412610547366004614176565b60676020526000908152604090205481565b60655461037290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b61034861058c3660046141a8565b6121ef565b61034861059f36600461439d565b612839565b6069546103729068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103729073ffffffffffffffffffffffffffffffffffffffff1681565b6103486105fe3660046143da565b61290e565b6069546102f8907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610348612fb3565b60685461031c907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103729073ffffffffffffffffffffffffffffffffffffffff1681565b6103486106963660046144cd565b613142565b6103486106a9366004613eea565b613643565b61041267016345785d8a000081565b606f80546106ca90614512565b80601f01602080910402602001604051908101604052809291908181526020018280546106f690614512565b80156107435780601f1061071857610100808354040283529160200191610743565b820191906000526020600020905b81548152906001019060200180831161072657829003601f168201915b505050505081565b60705473ffffffffffffffffffffffffffffffffffffffff1633146107dd5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff16156108f65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b6108fe6136e0565b610906613747565b565b60655460ff16156109a75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610a405760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d4565b805180610adb5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b8581101561108a576000878281518110610b4157610b41614565565b602002602001015190506000816060015167ffffffffffffffff161115610d5a5783610b6c816145c3565b945050600081600001518051906020012082602001518360600151604051602001610bcf93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610c9c5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610d545760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016107d4565b50610ef5565b60208101511580610e095750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610dc39160040190815260200190565b6020604051808303816000875af1158015610de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0691906145ea565b15155b610e7b5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016107d4565b805151620493e011610ef55760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016107d4565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610f2b575042816040015167ffffffffffffffff1611155b610fc35760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061106c906145c3565b9550508060400151955050808061108290614603565b915050610b25565b5060685467ffffffffffffffff78010000000000000000000000000000000000000000000000009091048116908316111561112d5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016107d4565b60685460009061115b90700100000000000000000000000000000000900467ffffffffffffffff168461463b565b61116f9067ffffffffffffffff1687614664565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061124c33306112268467016345785d8a000061467b565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169291906137d1565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d80546106ca90614512565b60655460ff16156113455760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b60695467ffffffffffffffff90811690881611156113f15760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016107d4565b60695467ffffffffffffffff9081169087161161149c5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016107d4565b67ffffffffffffffff87166000908152606b602052604090205461154e5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a4016107d4565b600061155c8888888861199b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161159191906146b8565b602060405180830381855afa1580156115ae573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906115d191906145ea565b6115db9190614703565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916116459189918991899190600401614717565b602060405180830381865afa158015611662573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116869190614791565b6116f85760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016107d4565b6069546117569033906117159067ffffffffffffffff168b61463b565b67ffffffffffffffff166117276120be565b611731919061467b565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16919061388f565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b15801561180b57600080fd5b505af115801561181f573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146119085760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d4565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161084c565b6119916136e0565b61090660006138ea565b67ffffffffffffffff8085166000818152606760205260408082205493871682529020546060929115806119ce57508115155b611a665760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b80611aff5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691611c209178010000000000000000000000000000000000000000000000009091041660016147ae565b611c2a919061463b565b611c469067ffffffffffffffff16670de0b6b3a764000061467b565b905090565b600054610100900460ff1615808015611c6b5750600054600160ff909116105b80611c855750303b158015611c85575060005460ff166001145b611cf75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107d4565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611d5557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d611e948782614828565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f611ed58582614828565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556070805492851692909116919091179055611f33613961565b8015611f9657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461203d5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d4565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061084c90831515815260200190565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612135573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215991906145ea565b60695460685491925060009167ffffffffffffffff918216916801000000000000000082048116916121be917001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041661463b565b6121c891906147ae565b6121d2919061463b565b67ffffffffffffffff1690506121e88183614924565b9250505090565b60655460ff161561228e5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b8567ffffffffffffffff168767ffffffffffffffff161061233d5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a4016107d4565b60695467ffffffffffffffff908116908716111561240f5760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c4016107d4565b67ffffffffffffffff87166000908152606b60205260409020546124c15760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a4016107d4565b67ffffffffffffffff86166000908152606b60205260409020546125735760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a4016107d4565b60006125818888888861199b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516125b691906146b8565b602060405180830381855afa1580156125d3573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906125f691906145ea565b6126009190614703565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d9161266a9189918991899190600401614717565b602060405180830381865afa158015612687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ab9190614791565b61271d5760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f460000000060648201526084016107d4565b67ffffffffffffffff88166000908152606b60205260409020548690036127d25760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a4016107d4565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a161282e613747565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146128d25760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d4565b606d6128de8282614828565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161084c9190613ea5565b60655460ff16156129ad5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612a705760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d4565b805180612b0b5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b60685467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612b56918491700100000000000000000000000000000000900416614938565b1115612bca5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016107d4565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b84811015612ee3576000868281518110612c2a57612c2a614565565b602002602001015190508380612c3f906145c3565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114612d605760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016107d4565b612d6b600188614664565b8303612e29574262093a808360400151612d8591906147ae565b67ffffffffffffffff161115612e295760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016107d4565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612ecb906145c3565b96505050508080612edb90614603565b915050612c0e565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff1661302b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d4565b60705473ffffffffffffffffffffffffffffffffffffffff1633146130b85760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016107d4565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561312257600080fd5b505af1158015613136573d6000803e3d6000fd5b505050506109066139e7565b60655460ff16156131e15760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146132a45760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d4565b60006132ae611bd1565b9050818111156133265760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016107d4565b620493e083511061339f5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016107d4565b6065546133c990610100900473ffffffffffffffffffffffffffffffffffffffff163330846137d1565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345d91906145ea565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613497836145c3565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161351093929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260669093529120553233036135e057606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261363d565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161363493929190614950565b60405180910390a25b50505050565b61364b6136e0565b73ffffffffffffffffffffffffffffffffffffffff81166136d45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107d4565b6136dd816138ea565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109065760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d4565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156137b157600080fd5b505af11580156137c5573d6000803e3d6000fd5b50505050610906613ab2565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261363d9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613ba7565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526138e59084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161382b565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166139de5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107d4565b610906336138ea565b60655460ff16613a5f5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d4565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff1615613b515760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6000613c09826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613c999092919063ffffffff16565b8051909150156138e55780806020019051810190613c279190614791565b6138e55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107d4565b6060613ca88484600085613cb2565b90505b9392505050565b606082471015613d2a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016107d4565b73ffffffffffffffffffffffffffffffffffffffff85163b613d8e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107d4565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613db791906146b8565b60006040518083038185875af1925050503d8060008114613df4576040519150601f19603f3d011682016040523d82523d6000602084013e613df9565b606091505b5091509150613e09828286613e14565b979650505050505050565b60608315613e23575081613cab565b825115613e335782518084602001fd5b8160405162461bcd60e51b81526004016107d49190613ea5565b60005b83811015613e68578181015183820152602001613e50565b8381111561363d5750506000910152565b60008151808452613e91816020860160208601613e4d565b601f01601f19169290920160200192915050565b602081526000613cab6020830184613e79565b73ffffffffffffffffffffffffffffffffffffffff811681146136dd57600080fd5b8035613ee581613eb8565b919050565b600060208284031215613efc57600080fd5b8135613cab81613eb8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613f5957613f59613f07565b60405290565b6040516060810167ffffffffffffffff81118282101715613f5957613f59613f07565b604051601f8201601f1916810167ffffffffffffffff81118282101715613fab57613fab613f07565b604052919050565b600067ffffffffffffffff821115613fcd57613fcd613f07565b5060051b60200190565b600082601f830112613fe857600080fd5b813567ffffffffffffffff81111561400257614002613f07565b6140156020601f19601f84011601613f82565b81815284602083860101111561402a57600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613ee557600080fd5b6000602080838503121561407257600080fd5b823567ffffffffffffffff8082111561408a57600080fd5b818501915085601f83011261409e57600080fd5b81356140b16140ac82613fb3565b613f82565b81815260059190911b830184019084810190888311156140d057600080fd5b8585015b83811015614169578035858111156140ec5760008081fd5b86016080818c03601f19018113156141045760008081fd5b61410c613f36565b898301358881111561411e5760008081fd5b61412c8e8c83870101613fd7565b8252506040808401358b8301526060614146818601614047565b82840152614155848601614047565b9083015250855250509186019186016140d4565b5098975050505050505050565b60006020828403121561418857600080fd5b613cab82614047565b80604081018310156141a257600080fd5b92915050565b6000806000806000806000610180888a0312156141c457600080fd5b6141cd88614047565b96506141db60208901614047565b955060408801359450606088013593506141f88960808a01614191565b925061014088018981111561420c57600080fd5b60c08901925061421c8a82614191565b91505092959891949750929550565b6000806000806080858703121561424157600080fd5b61424a85614047565b935061425860208601614047565b93969395505050506040820135916060013590565b80151581146136dd57600080fd5b8035613ee58161426d565b60008060008060008060008060008060006101608c8e0312156142a857600080fd5b6142b18c613eda565b9a506142bf60208d01613eda565b99506142cd60408d01613eda565b985060608c013597506142e260808d01613eda565b96506142f060a08d0161427b565b955067ffffffffffffffff8060c08e0135111561430c57600080fd5b61431c8e60c08f01358f01613fd7565b955061432a60e08e01614047565b9450806101008e0135111561433e57600080fd5b506143508d6101008e01358e01613fd7565b925061435f6101208d01613eda565b915061436e6101408d01613eda565b90509295989b509295989b9093969950565b60006020828403121561439257600080fd5b8135613cab8161426d565b6000602082840312156143af57600080fd5b813567ffffffffffffffff8111156143c657600080fd5b6143d284828501613fd7565b949350505050565b600060208083850312156143ed57600080fd5b823567ffffffffffffffff8082111561440557600080fd5b818501915085601f83011261441957600080fd5b81356144276140ac82613fb3565b81815260059190911b8301840190848101908883111561444657600080fd5b8585015b83811015614169578035858111156144625760008081fd5b86016060818c03601f190181131561447a5760008081fd5b614482613f5f565b89830135888111156144945760008081fd5b6144a28e8c83870101613fd7565b8252506040808401358b8301526144ba838501614047565b908201528552505091860191860161444a565b600080604083850312156144e057600080fd5b823567ffffffffffffffff8111156144f757600080fd5b61450385828601613fd7565b95602094909401359450505050565b600181811c9082168061452657607f821691505b60208210810361455f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036145e0576145e0614594565b6001019392505050565b6000602082840312156145fc57600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361463457614634614594565b5060010190565b600067ffffffffffffffff8381169083168181101561465c5761465c614594565b039392505050565b60008282101561467657614676614594565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146b3576146b3614594565b500290565b600082516146ca818460208701613e4d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614712576147126146d4565b500690565b61012081016040808784376000838201818152879190815b600281101561474f5784848337908401828152928401929060010161472f565b5050828760c0870137610100850181815286935091505b6001811015614785578251825260209283019290910190600101614766565b50505095945050505050565b6000602082840312156147a357600080fd5b8151613cab8161426d565b600067ffffffffffffffff8083168185168083038211156147d1576147d1614594565b01949350505050565b601f8211156138e557600081815260208120601f850160051c810160208610156148015750805b601f850160051c820191505b818110156148205782815560010161480d565b505050505050565b815167ffffffffffffffff81111561484257614842613f07565b614856816148508454614512565b846147da565b602080601f8311600181146148a957600084156148735750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614820565b600085815260208120601f198616915b828110156148d8578886015182559484019460019091019084016148b9565b508582101561491457878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082614933576149336146d4565b500490565b6000821982111561494b5761494b614594565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006149856060830184613e79565b9594505050505056fea26469706673582212207e277784efbe8f83ff553ede664750471887c02fa33f0f412c42f49abac3f00664736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/ProofOfEfficiencyMock.json b/compiled-contracts/ProofOfEfficiencyMock.json index bf5840c8c..20dc12972 100644 --- a/compiled-contracts/ProofOfEfficiencyMock.json +++ b/compiled-contracts/ProofOfEfficiencyMock.json @@ -1100,8 +1100,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506151fb806100206000396000f3fe608060405234801561001057600080fd5b506004361061032b5760003560e01c80638da5cb5b116101b2578063c89e42df116100f9578063dbc16976116100a2578063eaeb077b1161007c578063eaeb077b14610811578063f2fde38b14610824578063f755276114610837578063fe16564f1461084657600080fd5b8063dbc16976146107b9578063e7a7ed02146107c1578063e8bf92ed146107f157600080fd5b8063d0ae98dd116100d3578063d0ae98dd14610766578063d8d1091b14610779578063d8f54db01461078c57600080fd5b8063c89e42df14610707578063cfa8ed471461071a578063d02103ca1461074657600080fd5b8063adc879e91161015b578063b6b0b09711610135578063b6b0b097146106bc578063c0cad302146106e1578063c3fd0f9c146106f457600080fd5b8063adc879e91461067e578063b02286c014610692578063b4d63f581461069c57600080fd5b80639b7967601161018c5780639b79676014610641578063a3c573eb14610654578063ab9fc5ef1461067457600080fd5b80638da5cb5b1461060857806396dc3d391461062657806399f5634e1461063957600080fd5b80635437988d116102765780637152facf1161021f5780637fcb3653116101f95780637fcb3653146105ce57806381df7d3f146105e25780638c4a0af7146105f557600080fd5b80637152facf146105a0578063748608de146105b357806379847057146105c657600080fd5b80636b8616ce116102505780636b8616ce146105655780636ff512cc14610585578063715018a61461059857600080fd5b80635437988d1461049e57806355b925e6146104b1578063574f649e146104c457600080fd5b806327eb6c0f116102d857806345605267116102b257806345605267146104405780635392c5e014610468578063542028d51461049657600080fd5b806327eb6c0f146103c85780633c1582671461040d578063423fa8561461042057600080fd5b80631a26da14116103095780631a26da14146103985780631c1083e2146103ad5780632072f6c5146103c057600080fd5b8063107bf28c1461033057806315064c961461034e57806319d8ac611461036b575b600080fd5b610338610859565b6040516103459190614611565b60405180910390f35b60655461035b9060ff1681565b6040519015158152602001610345565b60685461037f9067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610345565b6103ab6103a6366004614648565b6108e7565b005b6103ab6103bb36600461469f565b61090c565b6103ab610a18565b6070546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610345565b6103ab61041b3660046147fc565b610ac9565b60685461037f9068010000000000000000900467ffffffffffffffff1681565b60685461037f90700100000000000000000000000000000000900467ffffffffffffffff1681565b610488610476366004614913565b606b6020526000908152604090205481565b604051908152602001610345565b61033861145a565b6103ab6104ac36600461469f565b611467565b6103ab6104bf366004614945565b6114b6565b6104886104d23660046149c8565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b610488610573366004614913565b60666020526000908152604090205481565b6103ab61059336600461469f565b611a7f565b6103ab611b99565b6103386105ae366004614a3e565b611bab565b6103ab6105c1366004614945565b611de2565b61048861204b565b60695461037f9067ffffffffffffffff1681565b6103ab6105f0366004614a99565b6120c5565b6103ab610603366004614b93565b61241e565b60335473ffffffffffffffffffffffffffffffffffffffff166103e8565b6103ab610634366004614913565b612538565b61048861257b565b6103ab61064f366004614913565b6126ac565b6071546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b61037f62093a8081565b606e5461037f9067ffffffffffffffff1681565b610488620493e081565b6104886106aa366004614913565b60676020526000908152604090205481565b6065546103e890610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6103ab6106ef366004614bb0565b6126fb565b6103ab610702366004614945565b612713565b6103ab610715366004614bb0565b612d5d565b6069546103e89068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b610488610774366004614a3e565b612e32565b6103ab610787366004614be5565b6130de565b60695461035b907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b6103ab613783565b60685461037f907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b6103ab61081f366004614cd8565b613912565b6103ab61083236600461469f565b613e13565b61048867016345785d8a000081565b6103ab610854366004614d1d565b613eb0565b606f805461086690614d49565b80601f016020809104026020016040519081016040528092919081815260200182805461089290614d49565b80156108df5780601f106108b4576101008083540402835291602001916108df565b820191906000526020600020905b8154815290600101906020018083116108c257829003601f168201915b505050505081565b6108ef613ed3565b67ffffffffffffffff909116600090815260676020526040902055565b60705473ffffffffffffffffffffffffffffffffffffffff16331461099e5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff1615610ab75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b610abf613ed3565b610ac7613f3a565b565b60655460ff1615610b685760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610c015760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610995565b805180610c9c5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b8581101561124b576000878281518110610d0257610d02614d9c565b602002602001015190506000816060015167ffffffffffffffff161115610f1b5783610d2d81614dfa565b945050600081600001518051906020012082602001518360600151604051602001610d9093929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610e5d5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610f155760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610995565b506110b6565b60208101511580610fca5750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610f849160040190815260200190565b6020604051808303816000875af1158015610fa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc79190614e21565b15155b61103c5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610995565b805151620493e0116110b65760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610995565b8567ffffffffffffffff16816040015167ffffffffffffffff16101580156110ec575042816040015167ffffffffffffffff1611155b6111845760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061122d90614dfa565b9550508060400151955050808061124390614e3a565b915050610ce6565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156112ee5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610995565b60685460009061131c90700100000000000000000000000000000000900467ffffffffffffffff1684614e72565b6113309067ffffffffffffffff1687614e9b565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061140d33306113e78467016345785d8a0000614eb2565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613fc4565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d805461086690614d49565b61146f613ed3565b606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60655460ff16156115555760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b60695467ffffffffffffffff90811690881611156116015760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a401610995565b60695467ffffffffffffffff908116908716116116ac5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a401610995565b67ffffffffffffffff87166000908152606b602052604090205461175e5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a401610995565b600061176c88888888611bab565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516117a19190614eef565b602060405180830381855afa1580156117be573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906117e19190614e21565b6117eb9190614f3a565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916118559189918991899190600401614f4e565b602060405180830381865afa158015611872573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118969190614fc8565b6119085760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610995565b6069546119669033906119259067ffffffffffffffff168b614e72565b67ffffffffffffffff1661193761257b565b6119419190614eb2565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169190614082565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b158015611a1b57600080fd5b505af1158015611a2f573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611b185760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610995565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610a0d565b611ba1613ed3565b610ac760006140dd565b67ffffffffffffffff808516600081815260676020526040808220549387168252902054606092911580611bde57508115155b611c765760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610995565b80611d0f5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610995565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec01604051602081830303815290604052925050505b949350505050565b611dea613ed3565b60695467ffffffffffffffff9081169088161115611e965760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a401610995565b60695467ffffffffffffffff90811690871611611f415760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610995565b67ffffffffffffffff80881660009081526067602052604080822054928916825290205481611fd85760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610995565b806119665760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610995565b60685460009067ffffffffffffffff700100000000000000000000000000000000820481169161209a917801000000000000000000000000000000000000000000000000909104166001614fe5565b6120a49190614e72565b6120c09067ffffffffffffffff16670de0b6b3a7640000614eb2565b905090565b600054610100900460ff16158080156120e55750600054600160ff909116105b806120ff5750303b1580156120ff575060005460ff166001145b6121715760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610995565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156121cf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d61230e878261505f565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f61234f858261505f565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560708054928516929091169190911790556123ad614154565b801561241057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146124b75760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610995565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a0d90831515815260200190565b612540613ed3565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156125f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126169190614e21565b60695460685491925060009167ffffffffffffffff9182169168010000000000000000820481169161267b9170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614e72565b6126859190614fe5565b61268f9190614e72565b67ffffffffffffffff1690506126a5818361515b565b9250505090565b6126b4613ed3565b6068805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b612703613ed3565b606f61270f828261505f565b5050565b60655460ff16156127b25760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b8567ffffffffffffffff168767ffffffffffffffff16106128615760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a401610995565b60695467ffffffffffffffff90811690871611156129335760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c401610995565b67ffffffffffffffff87166000908152606b60205260409020546129e55760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a401610995565b67ffffffffffffffff86166000908152606b6020526040902054612a975760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a401610995565b6000612aa588888888611bab565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051612ada9190614eef565b602060405180830381855afa158015612af7573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612b1a9190614e21565b612b249190614f3a565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91612b8e9189918991899190600401614f4e565b602060405180830381865afa158015612bab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bcf9190614fc8565b612c415760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f46000000006064820152608401610995565b67ffffffffffffffff88166000908152606b6020526040902054869003612cf65760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a401610995565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a1612d52613f3a565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612df65760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610995565b606d612e02828261505f565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a0d9190614611565b60695460009067ffffffffffffffff868116911614612edf5760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b8467ffffffffffffffff168467ffffffffffffffff1611612f8e5760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a401610995565b60685467ffffffffffffffff68010000000000000000909104811690851611156130465760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b600061305486868686611bab565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516130899190614eef565b602060405180830381855afa1580156130a6573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906130c99190614e21565b6130d39190614f3a565b979650505050505050565b60655460ff161561317d5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146132405760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610995565b8051806132db5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b60685467ffffffffffffffff7801000000000000000000000000000000000000000000000000820481169161332691849170010000000000000000000000000000000090041661516f565b111561339a5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610995565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b848110156136b35760008682815181106133fa576133fa614d9c565b60200260200101519050838061340f90614dfa565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff88166000908152606690935291205490915081146135305760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610995565b61353b600188614e9b565b83036135f9574262093a8083604001516135559190614fe5565b67ffffffffffffffff1611156135f95760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610995565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209350858061369b90614dfa565b965050505080806136ab90614e3a565b9150506133de565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166137fb5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610995565b60705473ffffffffffffffffffffffffffffffffffffffff1633146138885760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c0000006064820152608401610995565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156138f257600080fd5b505af1158015613906573d6000803e3d6000fd5b50505050610ac76141da565b60655460ff16156139b15760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114613a745760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610995565b6000613a7e61204b565b905081811115613af65760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610995565b620493e0835110613b6f5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610995565b606554613b9990610100900473ffffffffffffffffffffffffffffffffffffffff16333084613fc4565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613c09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2d9190614e21565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613c6783614dfa565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505083805190602001208142604051602001613ce093929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526066909352912055323303613db057606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613e0d565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613e0493929190615187565b60405180910390a25b50505050565b613e1b613ed3565b73ffffffffffffffffffffffffffffffffffffffff8116613ea45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610995565b613ead816140dd565b50565b613eb8613ed3565b67ffffffffffffffff166000908152606b6020526040902055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ac75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610995565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613fa457600080fd5b505af1158015613fb8573d6000803e3d6000fd5b50505050610ac76142a5565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052613e0d9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261439a565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526140d89084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161401e565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166141d15760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610995565b610ac7336140dd565b60655460ff166142525760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610995565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff16156143445760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60006143fc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661448c9092919063ffffffff16565b8051909150156140d8578080602001905181019061441a9190614fc8565b6140d85760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610995565b6060611dda8484600085856000808673ffffffffffffffffffffffffffffffffffffffff1685876040516144c09190614eef565b60006040518083038185875af1925050503d80600081146144fd576040519150601f19603f3d011682016040523d82523d6000602084013e614502565b606091505b50915091506130d3878383876060831561458a5782516000036145835773ffffffffffffffffffffffffffffffffffffffff85163b6145835760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610995565b5081611dda565b611dda838381511561459f5781518083602001fd5b8060405162461bcd60e51b81526004016109959190614611565b60005b838110156145d45781810151838201526020016145bc565b83811115613e0d5750506000910152565b600081518084526145fd8160208601602086016145b9565b601f01601f19169290920160200192915050565b60208152600061462460208301846145e5565b9392505050565b803567ffffffffffffffff8116811461464357600080fd5b919050565b6000806040838503121561465b57600080fd5b6146648361462b565b946020939093013593505050565b73ffffffffffffffffffffffffffffffffffffffff81168114613ead57600080fd5b803561464381614672565b6000602082840312156146b157600080fd5b813561462481614672565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171561470e5761470e6146bc565b60405290565b6040516060810167ffffffffffffffff8111828210171561470e5761470e6146bc565b604051601f8201601f1916810167ffffffffffffffff81118282101715614760576147606146bc565b604052919050565b600067ffffffffffffffff821115614782576147826146bc565b5060051b60200190565b600082601f83011261479d57600080fd5b813567ffffffffffffffff8111156147b7576147b76146bc565b6147ca6020601f19601f84011601614737565b8181528460208386010111156147df57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561480f57600080fd5b823567ffffffffffffffff8082111561482757600080fd5b818501915085601f83011261483b57600080fd5b813561484e61484982614768565b614737565b81815260059190911b8301840190848101908883111561486d57600080fd5b8585015b83811015614906578035858111156148895760008081fd5b86016080818c03601f19018113156148a15760008081fd5b6148a96146eb565b89830135888111156148bb5760008081fd5b6148c98e8c8387010161478c565b8252506040808401358b83015260606148e381860161462b565b828401526148f284860161462b565b908301525085525050918601918601614871565b5098975050505050505050565b60006020828403121561492557600080fd5b6146248261462b565b806040810183101561493f57600080fd5b92915050565b6000806000806000806000610180888a03121561496157600080fd5b61496a8861462b565b96506149786020890161462b565b955060408801359450606088013593506149958960808a0161492e565b92506101408801898111156149a957600080fd5b60c0890192506149b98a8261492e565b91505092959891949750929550565b600080600080600060a086880312156149e057600080fd5b85359450602086013567ffffffffffffffff8111156149fe57600080fd5b614a0a8882890161478c565b94505060408601359250614a206060870161462b565b91506080860135614a3081614672565b809150509295509295909350565b60008060008060808587031215614a5457600080fd5b614a5d8561462b565b9350614a6b6020860161462b565b93969395505050506040820135916060013590565b8015158114613ead57600080fd5b803561464381614a80565b60008060008060008060008060008060006101608c8e031215614abb57600080fd5b614ac48c614694565b9a50614ad260208d01614694565b9950614ae060408d01614694565b985060608c01359750614af560808d01614694565b9650614b0360a08d01614a8e565b955067ffffffffffffffff8060c08e01351115614b1f57600080fd5b614b2f8e60c08f01358f0161478c565b9550614b3d60e08e0161462b565b9450806101008e01351115614b5157600080fd5b50614b638d6101008e01358e0161478c565b9250614b726101208d01614694565b9150614b816101408d01614694565b90509295989b509295989b9093969950565b600060208284031215614ba557600080fd5b813561462481614a80565b600060208284031215614bc257600080fd5b813567ffffffffffffffff811115614bd957600080fd5b611dda8482850161478c565b60006020808385031215614bf857600080fd5b823567ffffffffffffffff80821115614c1057600080fd5b818501915085601f830112614c2457600080fd5b8135614c3261484982614768565b81815260059190911b83018401908481019088831115614c5157600080fd5b8585015b8381101561490657803585811115614c6d5760008081fd5b86016060818c03601f1901811315614c855760008081fd5b614c8d614714565b8983013588811115614c9f5760008081fd5b614cad8e8c8387010161478c565b8252506040808401358b830152614cc583850161462b565b9082015285525050918601918601614c55565b60008060408385031215614ceb57600080fd5b823567ffffffffffffffff811115614d0257600080fd5b614d0e8582860161478c565b95602094909401359450505050565b60008060408385031215614d3057600080fd5b82359150614d406020840161462b565b90509250929050565b600181811c90821680614d5d57607f821691505b602082108103614d96577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614e1757614e17614dcb565b6001019392505050565b600060208284031215614e3357600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e6b57614e6b614dcb565b5060010190565b600067ffffffffffffffff83811690831681811015614e9357614e93614dcb565b039392505050565b600082821015614ead57614ead614dcb565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614eea57614eea614dcb565b500290565b60008251614f018184602087016145b9565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614f4957614f49614f0b565b500690565b61012081016040808784376000838201818152879190815b6002811015614f8657848483379084018281529284019290600101614f66565b5050828760c0870137610100850181815286935091505b6001811015614fbc578251825260209283019290910190600101614f9d565b50505095945050505050565b600060208284031215614fda57600080fd5b815161462481614a80565b600067ffffffffffffffff80831681851680830382111561500857615008614dcb565b01949350505050565b601f8211156140d857600081815260208120601f850160051c810160208610156150385750805b601f850160051c820191505b8181101561505757828155600101615044565b505050505050565b815167ffffffffffffffff811115615079576150796146bc565b61508d816150878454614d49565b84615011565b602080601f8311600181146150e057600084156150aa5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555615057565b600085815260208120601f198616915b8281101561510f578886015182559484019460019091019084016150f0565b508582101561514b57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008261516a5761516a614f0b565b500490565b6000821982111561518257615182614dcb565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006151bc60608301846145e5565b9594505050505056fea2646970667358221220041c87d1847c21581e6eba605bd8c4cf2588648976f64611c0f8f05e1fa34a0a64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061032b5760003560e01c80638da5cb5b116101b2578063c89e42df116100f9578063dbc16976116100a2578063eaeb077b1161007c578063eaeb077b14610811578063f2fde38b14610824578063f755276114610837578063fe16564f1461084657600080fd5b8063dbc16976146107b9578063e7a7ed02146107c1578063e8bf92ed146107f157600080fd5b8063d0ae98dd116100d3578063d0ae98dd14610766578063d8d1091b14610779578063d8f54db01461078c57600080fd5b8063c89e42df14610707578063cfa8ed471461071a578063d02103ca1461074657600080fd5b8063adc879e91161015b578063b6b0b09711610135578063b6b0b097146106bc578063c0cad302146106e1578063c3fd0f9c146106f457600080fd5b8063adc879e91461067e578063b02286c014610692578063b4d63f581461069c57600080fd5b80639b7967601161018c5780639b79676014610641578063a3c573eb14610654578063ab9fc5ef1461067457600080fd5b80638da5cb5b1461060857806396dc3d391461062657806399f5634e1461063957600080fd5b80635437988d116102765780637152facf1161021f5780637fcb3653116101f95780637fcb3653146105ce57806381df7d3f146105e25780638c4a0af7146105f557600080fd5b80637152facf146105a0578063748608de146105b357806379847057146105c657600080fd5b80636b8616ce116102505780636b8616ce146105655780636ff512cc14610585578063715018a61461059857600080fd5b80635437988d1461049e57806355b925e6146104b1578063574f649e146104c457600080fd5b806327eb6c0f116102d857806345605267116102b257806345605267146104405780635392c5e014610468578063542028d51461049657600080fd5b806327eb6c0f146103c85780633c1582671461040d578063423fa8561461042057600080fd5b80631a26da14116103095780631a26da14146103985780631c1083e2146103ad5780632072f6c5146103c057600080fd5b8063107bf28c1461033057806315064c961461034e57806319d8ac611461036b575b600080fd5b610338610859565b6040516103459190614611565b60405180910390f35b60655461035b9060ff1681565b6040519015158152602001610345565b60685461037f9067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610345565b6103ab6103a6366004614648565b6108e7565b005b6103ab6103bb36600461469f565b61090c565b6103ab610a18565b6070546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610345565b6103ab61041b3660046147fc565b610ac9565b60685461037f9068010000000000000000900467ffffffffffffffff1681565b60685461037f90700100000000000000000000000000000000900467ffffffffffffffff1681565b610488610476366004614913565b606b6020526000908152604090205481565b604051908152602001610345565b61033861145a565b6103ab6104ac36600461469f565b611467565b6103ab6104bf366004614945565b6114b6565b6104886104d23660046149c8565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b610488610573366004614913565b60666020526000908152604090205481565b6103ab61059336600461469f565b611a7f565b6103ab611b99565b6103386105ae366004614a3e565b611bab565b6103ab6105c1366004614945565b611de2565b61048861204b565b60695461037f9067ffffffffffffffff1681565b6103ab6105f0366004614a99565b6120c5565b6103ab610603366004614b93565b61241e565b60335473ffffffffffffffffffffffffffffffffffffffff166103e8565b6103ab610634366004614913565b612538565b61048861257b565b6103ab61064f366004614913565b6126ac565b6071546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b61037f62093a8081565b606e5461037f9067ffffffffffffffff1681565b610488620493e081565b6104886106aa366004614913565b60676020526000908152604090205481565b6065546103e890610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6103ab6106ef366004614bb0565b6126fb565b6103ab610702366004614945565b612713565b6103ab610715366004614bb0565b612d5d565b6069546103e89068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b610488610774366004614a3e565b612e32565b6103ab610787366004614be5565b6130de565b60695461035b907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b6103ab613783565b60685461037f907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b6103ab61081f366004614cd8565b613912565b6103ab61083236600461469f565b613e13565b61048867016345785d8a000081565b6103ab610854366004614d1d565b613eb0565b606f805461086690614d49565b80601f016020809104026020016040519081016040528092919081815260200182805461089290614d49565b80156108df5780601f106108b4576101008083540402835291602001916108df565b820191906000526020600020905b8154815290600101906020018083116108c257829003601f168201915b505050505081565b6108ef613ed3565b67ffffffffffffffff909116600090815260676020526040902055565b60705473ffffffffffffffffffffffffffffffffffffffff16331461099e5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff1615610ab75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b610abf613ed3565b610ac7613f3a565b565b60655460ff1615610b685760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610c015760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610995565b805180610c9c5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b8581101561124b576000878281518110610d0257610d02614d9c565b602002602001015190506000816060015167ffffffffffffffff161115610f1b5783610d2d81614dfa565b945050600081600001518051906020012082602001518360600151604051602001610d9093929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610e5d5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610f155760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610995565b506110b6565b60208101511580610fca5750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610f849160040190815260200190565b6020604051808303816000875af1158015610fa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc79190614e21565b15155b61103c5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610995565b805151620493e0116110b65760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610995565b8567ffffffffffffffff16816040015167ffffffffffffffff16101580156110ec575042816040015167ffffffffffffffff1611155b6111845760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061122d90614dfa565b9550508060400151955050808061124390614e3a565b915050610ce6565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156112ee5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610995565b60685460009061131c90700100000000000000000000000000000000900467ffffffffffffffff1684614e72565b6113309067ffffffffffffffff1687614e9b565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061140d33306113e78467016345785d8a0000614eb2565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613fc4565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d805461086690614d49565b61146f613ed3565b606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60655460ff16156115555760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b60695467ffffffffffffffff90811690881611156116015760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a401610995565b60695467ffffffffffffffff908116908716116116ac5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a401610995565b67ffffffffffffffff87166000908152606b602052604090205461175e5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a401610995565b600061176c88888888611bab565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516117a19190614eef565b602060405180830381855afa1580156117be573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906117e19190614e21565b6117eb9190614f3a565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916118559189918991899190600401614f4e565b602060405180830381865afa158015611872573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118969190614fc8565b6119085760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610995565b6069546119669033906119259067ffffffffffffffff168b614e72565b67ffffffffffffffff1661193761257b565b6119419190614eb2565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169190614082565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b158015611a1b57600080fd5b505af1158015611a2f573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611b185760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610995565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610a0d565b611ba1613ed3565b610ac760006140dd565b67ffffffffffffffff808516600081815260676020526040808220549387168252902054606092911580611bde57508115155b611c765760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610995565b80611d0f5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610995565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec01604051602081830303815290604052925050505b949350505050565b611dea613ed3565b60695467ffffffffffffffff9081169088161115611e965760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a401610995565b60695467ffffffffffffffff90811690871611611f415760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610995565b67ffffffffffffffff80881660009081526067602052604080822054928916825290205481611fd85760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610995565b806119665760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610995565b60685460009067ffffffffffffffff700100000000000000000000000000000000820481169161209a917801000000000000000000000000000000000000000000000000909104166001614fe5565b6120a49190614e72565b6120c09067ffffffffffffffff16670de0b6b3a7640000614eb2565b905090565b600054610100900460ff16158080156120e55750600054600160ff909116105b806120ff5750303b1580156120ff575060005460ff166001145b6121715760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610995565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156121cf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d61230e878261505f565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f61234f858261505f565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560708054928516929091169190911790556123ad614154565b801561241057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146124b75760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610995565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a0d90831515815260200190565b612540613ed3565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156125f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126169190614e21565b60695460685491925060009167ffffffffffffffff9182169168010000000000000000820481169161267b9170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614e72565b6126859190614fe5565b61268f9190614e72565b67ffffffffffffffff1690506126a5818361515b565b9250505090565b6126b4613ed3565b6068805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b612703613ed3565b606f61270f828261505f565b5050565b60655460ff16156127b25760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b8567ffffffffffffffff168767ffffffffffffffff16106128615760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a401610995565b60695467ffffffffffffffff90811690871611156129335760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c401610995565b67ffffffffffffffff87166000908152606b60205260409020546129e55760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a401610995565b67ffffffffffffffff86166000908152606b6020526040902054612a975760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a401610995565b6000612aa588888888611bab565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051612ada9190614eef565b602060405180830381855afa158015612af7573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612b1a9190614e21565b612b249190614f3a565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91612b8e9189918991899190600401614f4e565b602060405180830381865afa158015612bab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bcf9190614fc8565b612c415760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f46000000006064820152608401610995565b67ffffffffffffffff88166000908152606b6020526040902054869003612cf65760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a401610995565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a1612d52613f3a565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612df65760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610995565b606d612e02828261505f565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a0d9190614611565b60695460009067ffffffffffffffff868116911614612edf5760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b8467ffffffffffffffff168467ffffffffffffffff1611612f8e5760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a401610995565b60685467ffffffffffffffff68010000000000000000909104811690851611156130465760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b600061305486868686611bab565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516130899190614eef565b602060405180830381855afa1580156130a6573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906130c99190614e21565b6130d39190614f3a565b979650505050505050565b60655460ff161561317d5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146132405760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610995565b8051806132db5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b60685467ffffffffffffffff7801000000000000000000000000000000000000000000000000820481169161332691849170010000000000000000000000000000000090041661516f565b111561339a5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610995565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b848110156136b35760008682815181106133fa576133fa614d9c565b60200260200101519050838061340f90614dfa565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff88166000908152606690935291205490915081146135305760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610995565b61353b600188614e9b565b83036135f9574262093a8083604001516135559190614fe5565b67ffffffffffffffff1611156135f95760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610995565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209350858061369b90614dfa565b965050505080806136ab90614e3a565b9150506133de565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166137fb5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610995565b60705473ffffffffffffffffffffffffffffffffffffffff1633146138885760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c0000006064820152608401610995565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156138f257600080fd5b505af1158015613906573d6000803e3d6000fd5b50505050610ac76141da565b60655460ff16156139b15760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114613a745760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610995565b6000613a7e61204b565b905081811115613af65760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610995565b620493e0835110613b6f5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610995565b606554613b9990610100900473ffffffffffffffffffffffffffffffffffffffff16333084613fc4565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613c09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2d9190614e21565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613c6783614dfa565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505083805190602001208142604051602001613ce093929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526066909352912055323303613db057606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613e0d565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613e0493929190615187565b60405180910390a25b50505050565b613e1b613ed3565b73ffffffffffffffffffffffffffffffffffffffff8116613ea45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610995565b613ead816140dd565b50565b613eb8613ed3565b67ffffffffffffffff166000908152606b6020526040902055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ac75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610995565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613fa457600080fd5b505af1158015613fb8573d6000803e3d6000fd5b50505050610ac76142a5565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052613e0d9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261439a565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526140d89084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161401e565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166141d15760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610995565b610ac7336140dd565b60655460ff166142525760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610995565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff16156143445760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60006143fc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661448c9092919063ffffffff16565b8051909150156140d8578080602001905181019061441a9190614fc8565b6140d85760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610995565b6060611dda8484600085856000808673ffffffffffffffffffffffffffffffffffffffff1685876040516144c09190614eef565b60006040518083038185875af1925050503d80600081146144fd576040519150601f19603f3d011682016040523d82523d6000602084013e614502565b606091505b50915091506130d3878383876060831561458a5782516000036145835773ffffffffffffffffffffffffffffffffffffffff85163b6145835760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610995565b5081611dda565b611dda838381511561459f5781518083602001fd5b8060405162461bcd60e51b81526004016109959190614611565b60005b838110156145d45781810151838201526020016145bc565b83811115613e0d5750506000910152565b600081518084526145fd8160208601602086016145b9565b601f01601f19169290920160200192915050565b60208152600061462460208301846145e5565b9392505050565b803567ffffffffffffffff8116811461464357600080fd5b919050565b6000806040838503121561465b57600080fd5b6146648361462b565b946020939093013593505050565b73ffffffffffffffffffffffffffffffffffffffff81168114613ead57600080fd5b803561464381614672565b6000602082840312156146b157600080fd5b813561462481614672565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171561470e5761470e6146bc565b60405290565b6040516060810167ffffffffffffffff8111828210171561470e5761470e6146bc565b604051601f8201601f1916810167ffffffffffffffff81118282101715614760576147606146bc565b604052919050565b600067ffffffffffffffff821115614782576147826146bc565b5060051b60200190565b600082601f83011261479d57600080fd5b813567ffffffffffffffff8111156147b7576147b76146bc565b6147ca6020601f19601f84011601614737565b8181528460208386010111156147df57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561480f57600080fd5b823567ffffffffffffffff8082111561482757600080fd5b818501915085601f83011261483b57600080fd5b813561484e61484982614768565b614737565b81815260059190911b8301840190848101908883111561486d57600080fd5b8585015b83811015614906578035858111156148895760008081fd5b86016080818c03601f19018113156148a15760008081fd5b6148a96146eb565b89830135888111156148bb5760008081fd5b6148c98e8c8387010161478c565b8252506040808401358b83015260606148e381860161462b565b828401526148f284860161462b565b908301525085525050918601918601614871565b5098975050505050505050565b60006020828403121561492557600080fd5b6146248261462b565b806040810183101561493f57600080fd5b92915050565b6000806000806000806000610180888a03121561496157600080fd5b61496a8861462b565b96506149786020890161462b565b955060408801359450606088013593506149958960808a0161492e565b92506101408801898111156149a957600080fd5b60c0890192506149b98a8261492e565b91505092959891949750929550565b600080600080600060a086880312156149e057600080fd5b85359450602086013567ffffffffffffffff8111156149fe57600080fd5b614a0a8882890161478c565b94505060408601359250614a206060870161462b565b91506080860135614a3081614672565b809150509295509295909350565b60008060008060808587031215614a5457600080fd5b614a5d8561462b565b9350614a6b6020860161462b565b93969395505050506040820135916060013590565b8015158114613ead57600080fd5b803561464381614a80565b60008060008060008060008060008060006101608c8e031215614abb57600080fd5b614ac48c614694565b9a50614ad260208d01614694565b9950614ae060408d01614694565b985060608c01359750614af560808d01614694565b9650614b0360a08d01614a8e565b955067ffffffffffffffff8060c08e01351115614b1f57600080fd5b614b2f8e60c08f01358f0161478c565b9550614b3d60e08e0161462b565b9450806101008e01351115614b5157600080fd5b50614b638d6101008e01358e0161478c565b9250614b726101208d01614694565b9150614b816101408d01614694565b90509295989b509295989b9093969950565b600060208284031215614ba557600080fd5b813561462481614a80565b600060208284031215614bc257600080fd5b813567ffffffffffffffff811115614bd957600080fd5b611dda8482850161478c565b60006020808385031215614bf857600080fd5b823567ffffffffffffffff80821115614c1057600080fd5b818501915085601f830112614c2457600080fd5b8135614c3261484982614768565b81815260059190911b83018401908481019088831115614c5157600080fd5b8585015b8381101561490657803585811115614c6d5760008081fd5b86016060818c03601f1901811315614c855760008081fd5b614c8d614714565b8983013588811115614c9f5760008081fd5b614cad8e8c8387010161478c565b8252506040808401358b830152614cc583850161462b565b9082015285525050918601918601614c55565b60008060408385031215614ceb57600080fd5b823567ffffffffffffffff811115614d0257600080fd5b614d0e8582860161478c565b95602094909401359450505050565b60008060408385031215614d3057600080fd5b82359150614d406020840161462b565b90509250929050565b600181811c90821680614d5d57607f821691505b602082108103614d96577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614e1757614e17614dcb565b6001019392505050565b600060208284031215614e3357600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e6b57614e6b614dcb565b5060010190565b600067ffffffffffffffff83811690831681811015614e9357614e93614dcb565b039392505050565b600082821015614ead57614ead614dcb565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614eea57614eea614dcb565b500290565b60008251614f018184602087016145b9565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614f4957614f49614f0b565b500690565b61012081016040808784376000838201818152879190815b6002811015614f8657848483379084018281529284019290600101614f66565b5050828760c0870137610100850181815286935091505b6001811015614fbc578251825260209283019290910190600101614f9d565b50505095945050505050565b600060208284031215614fda57600080fd5b815161462481614a80565b600067ffffffffffffffff80831681851680830382111561500857615008614dcb565b01949350505050565b601f8211156140d857600081815260208120601f850160051c810160208610156150385750805b601f850160051c820191505b8181101561505757828155600101615044565b505050505050565b815167ffffffffffffffff811115615079576150796146bc565b61508d816150878454614d49565b84615011565b602080601f8311600181146150e057600084156150aa5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555615057565b600085815260208120601f198616915b8281101561510f578886015182559484019460019091019084016150f0565b508582101561514b57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008261516a5761516a614f0b565b500490565b6000821982111561518257615182614dcb565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006151bc60608301846145e5565b9594505050505056fea2646970667358221220041c87d1847c21581e6eba605bd8c4cf2588648976f64611c0f8f05e1fa34a0a64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50615272806100206000396000f3fe608060405234801561001057600080fd5b506004361061032b5760003560e01c80638da5cb5b116101b2578063c89e42df116100f9578063dbc16976116100a2578063eaeb077b1161007c578063eaeb077b14610811578063f2fde38b14610824578063f755276114610837578063fe16564f1461084657600080fd5b8063dbc16976146107b9578063e7a7ed02146107c1578063e8bf92ed146107f157600080fd5b8063d0ae98dd116100d3578063d0ae98dd14610766578063d8d1091b14610779578063d8f54db01461078c57600080fd5b8063c89e42df14610707578063cfa8ed471461071a578063d02103ca1461074657600080fd5b8063adc879e91161015b578063b6b0b09711610135578063b6b0b097146106bc578063c0cad302146106e1578063c3fd0f9c146106f457600080fd5b8063adc879e91461067e578063b02286c014610692578063b4d63f581461069c57600080fd5b80639b7967601161018c5780639b79676014610641578063a3c573eb14610654578063ab9fc5ef1461067457600080fd5b80638da5cb5b1461060857806396dc3d391461062657806399f5634e1461063957600080fd5b80635437988d116102765780637152facf1161021f5780637fcb3653116101f95780637fcb3653146105ce57806381df7d3f146105e25780638c4a0af7146105f557600080fd5b80637152facf146105a0578063748608de146105b357806379847057146105c657600080fd5b80636b8616ce116102505780636b8616ce146105655780636ff512cc14610585578063715018a61461059857600080fd5b80635437988d1461049e57806355b925e6146104b1578063574f649e146104c457600080fd5b806327eb6c0f116102d857806345605267116102b257806345605267146104405780635392c5e014610468578063542028d51461049657600080fd5b806327eb6c0f146103c85780633c1582671461040d578063423fa8561461042057600080fd5b80631a26da14116103095780631a26da14146103985780631c1083e2146103ad5780632072f6c5146103c057600080fd5b8063107bf28c1461033057806315064c961461034e57806319d8ac611461036b575b600080fd5b610338610859565b6040516103459190614687565b60405180910390f35b60655461035b9060ff1681565b6040519015158152602001610345565b60685461037f9067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610345565b6103ab6103a63660046146b7565b6108e7565b005b6103ab6103bb36600461470e565b61090c565b6103ab610a18565b6070546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610345565b6103ab61041b36600461486b565b610ac9565b60685461037f9068010000000000000000900467ffffffffffffffff1681565b60685461037f90700100000000000000000000000000000000900467ffffffffffffffff1681565b610488610476366004614982565b606b6020526000908152604090205481565b604051908152602001610345565b61033861145a565b6103ab6104ac36600461470e565b611467565b6103ab6104bf3660046149b4565b6114b6565b6104886104d2366004614a37565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b610488610573366004614982565b60666020526000908152604090205481565b6103ab61059336600461470e565b611a7f565b6103ab611b99565b6103386105ae366004614aad565b611bab565b6103ab6105c13660046149b4565b611de1565b61048861204a565b60695461037f9067ffffffffffffffff1681565b6103ab6105f0366004614b08565b6120c4565b6103ab610603366004614c02565b61241d565b60335473ffffffffffffffffffffffffffffffffffffffff166103e8565b6103ab610634366004614982565b612537565b61048861257a565b6103ab61064f366004614982565b6126ab565b6071546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b61037f62093a8081565b606e5461037f9067ffffffffffffffff1681565b610488620493e081565b6104886106aa366004614982565b60676020526000908152604090205481565b6065546103e890610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6103ab6106ef366004614c1f565b6126fa565b6103ab6107023660046149b4565b612712565b6103ab610715366004614c1f565b612d5c565b6069546103e89068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b610488610774366004614aad565b612e31565b6103ab610787366004614c5c565b6130dd565b60695461035b907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b6103ab613782565b60685461037f907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b6103ab61081f366004614d4f565b613911565b6103ab61083236600461470e565b613e12565b61048867016345785d8a000081565b6103ab610854366004614d94565b613eaf565b606f805461086690614dc0565b80601f016020809104026020016040519081016040528092919081815260200182805461089290614dc0565b80156108df5780601f106108b4576101008083540402835291602001916108df565b820191906000526020600020905b8154815290600101906020018083116108c257829003601f168201915b505050505081565b6108ef613ed2565b67ffffffffffffffff909116600090815260676020526040902055565b60705473ffffffffffffffffffffffffffffffffffffffff16331461099e5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff1615610ab75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b610abf613ed2565b610ac7613f39565b565b60655460ff1615610b685760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610c015760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610995565b805180610c9c5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b8581101561124b576000878281518110610d0257610d02614e13565b602002602001015190506000816060015167ffffffffffffffff161115610f1b5783610d2d81614e71565b945050600081600001518051906020012082602001518360600151604051602001610d9093929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610e5d5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610f155760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610995565b506110b6565b60208101511580610fca5750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610f849160040190815260200190565b6020604051808303816000875af1158015610fa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc79190614e98565b15155b61103c5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610995565b805151620493e0116110b65760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610995565b8567ffffffffffffffff16816040015167ffffffffffffffff16101580156110ec575042816040015167ffffffffffffffff1611155b6111845760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061122d90614e71565b9550508060400151955050808061124390614eb1565b915050610ce6565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156112ee5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610995565b60685460009061131c90700100000000000000000000000000000000900467ffffffffffffffff1684614ee9565b6113309067ffffffffffffffff1687614f12565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061140d33306113e78467016345785d8a0000614f29565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613fc3565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d805461086690614dc0565b61146f613ed2565b606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60655460ff16156115555760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b60695467ffffffffffffffff90811690881611156116015760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a401610995565b60695467ffffffffffffffff908116908716116116ac5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a401610995565b67ffffffffffffffff87166000908152606b602052604090205461175e5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a401610995565b600061176c88888888611bab565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516117a19190614f66565b602060405180830381855afa1580156117be573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906117e19190614e98565b6117eb9190614fb1565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916118559189918991899190600401614fc5565b602060405180830381865afa158015611872573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611896919061503f565b6119085760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610995565b6069546119669033906119259067ffffffffffffffff168b614ee9565b67ffffffffffffffff1661193761257a565b6119419190614f29565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169190614081565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b158015611a1b57600080fd5b505af1158015611a2f573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611b185760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610995565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610a0d565b611ba1613ed2565b610ac760006140dc565b67ffffffffffffffff808516600081815260676020526040808220549387168252902054606092911580611bde57508115155b611c765760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610995565b80611d0f5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610995565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b611de9613ed2565b60695467ffffffffffffffff9081169088161115611e955760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a401610995565b60695467ffffffffffffffff90811690871611611f405760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610995565b67ffffffffffffffff80881660009081526067602052604080822054928916825290205481611fd75760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610995565b806119665760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610995565b60685460009067ffffffffffffffff700100000000000000000000000000000000820481169161209991780100000000000000000000000000000000000000000000000090910416600161505c565b6120a39190614ee9565b6120bf9067ffffffffffffffff16670de0b6b3a7640000614f29565b905090565b600054610100900460ff16158080156120e45750600054600160ff909116105b806120fe5750303b1580156120fe575060005460ff166001145b6121705760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610995565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156121ce57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d61230d87826150d6565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f61234e85826150d6565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560708054928516929091169190911790556123ac614153565b801561240f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146124b65760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610995565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a0d90831515815260200190565b61253f613ed2565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156125f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126159190614e98565b60695460685491925060009167ffffffffffffffff9182169168010000000000000000820481169161267a9170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614ee9565b612684919061505c565b61268e9190614ee9565b67ffffffffffffffff1690506126a481836151d2565b9250505090565b6126b3613ed2565b6068805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b612702613ed2565b606f61270e82826150d6565b5050565b60655460ff16156127b15760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b8567ffffffffffffffff168767ffffffffffffffff16106128605760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a401610995565b60695467ffffffffffffffff90811690871611156129325760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c401610995565b67ffffffffffffffff87166000908152606b60205260409020546129e45760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a401610995565b67ffffffffffffffff86166000908152606b6020526040902054612a965760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a401610995565b6000612aa488888888611bab565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051612ad99190614f66565b602060405180830381855afa158015612af6573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612b199190614e98565b612b239190614fb1565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91612b8d9189918991899190600401614fc5565b602060405180830381865afa158015612baa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bce919061503f565b612c405760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f46000000006064820152608401610995565b67ffffffffffffffff88166000908152606b6020526040902054869003612cf55760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a401610995565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a1612d51613f39565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612df55760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610995565b606d612e0182826150d6565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a0d9190614687565b60695460009067ffffffffffffffff868116911614612ede5760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b8467ffffffffffffffff168467ffffffffffffffff1611612f8d5760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a401610995565b60685467ffffffffffffffff68010000000000000000909104811690851611156130455760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b600061305386868686611bab565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516130889190614f66565b602060405180830381855afa1580156130a5573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906130c89190614e98565b6130d29190614fb1565b979650505050505050565b60655460ff161561317c5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461323f5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610995565b8051806132da5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b60685467ffffffffffffffff780100000000000000000000000000000000000000000000000082048116916133259184917001000000000000000000000000000000009004166151e6565b11156133995760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610995565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b848110156136b25760008682815181106133f9576133f9614e13565b60200260200101519050838061340e90614e71565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff881660009081526066909352912054909150811461352f5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610995565b61353a600188614f12565b83036135f8574262093a808360400151613554919061505c565b67ffffffffffffffff1611156135f85760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610995565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209350858061369a90614e71565b965050505080806136aa90614eb1565b9150506133dd565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166137fa5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610995565b60705473ffffffffffffffffffffffffffffffffffffffff1633146138875760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c0000006064820152608401610995565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156138f157600080fd5b505af1158015613905573d6000803e3d6000fd5b50505050610ac76141d9565b60655460ff16156139b05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114613a735760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610995565b6000613a7d61204a565b905081811115613af55760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610995565b620493e0835110613b6e5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610995565b606554613b9890610100900473ffffffffffffffffffffffffffffffffffffffff16333084613fc3565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2c9190614e98565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613c6683614e71565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505083805190602001208142604051602001613cdf93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526066909352912055323303613daf57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613e0c565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613e03939291906151fe565b60405180910390a25b50505050565b613e1a613ed2565b73ffffffffffffffffffffffffffffffffffffffff8116613ea35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610995565b613eac816140dc565b50565b613eb7613ed2565b67ffffffffffffffff166000908152606b6020526040902055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ac75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610995565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613fa357600080fd5b505af1158015613fb7573d6000803e3d6000fd5b50505050610ac76142a4565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052613e0c9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152614399565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526140d79084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161401d565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166141d05760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610995565b610ac7336140dc565b60655460ff166142515760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610995565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff16156143435760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60006143fb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661448b9092919063ffffffff16565b8051909150156140d75780806020019051810190614419919061503f565b6140d75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610995565b606061449a84846000856144a4565b90505b9392505050565b60608247101561451c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610995565b73ffffffffffffffffffffffffffffffffffffffff85163b6145805760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610995565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516145a99190614f66565b60006040518083038185875af1925050503d80600081146145e6576040519150601f19603f3d011682016040523d82523d6000602084013e6145eb565b606091505b50915091506130d28282866060831561460557508161449d565b8251156146155782518084602001fd5b8160405162461bcd60e51b81526004016109959190614687565b60005b8381101561464a578181015183820152602001614632565b83811115613e0c5750506000910152565b6000815180845261467381602086016020860161462f565b601f01601f19169290920160200192915050565b60208152600061449d602083018461465b565b803567ffffffffffffffff811681146146b257600080fd5b919050565b600080604083850312156146ca57600080fd5b6146d38361469a565b946020939093013593505050565b73ffffffffffffffffffffffffffffffffffffffff81168114613eac57600080fd5b80356146b2816146e1565b60006020828403121561472057600080fd5b813561449d816146e1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171561477d5761477d61472b565b60405290565b6040516060810167ffffffffffffffff8111828210171561477d5761477d61472b565b604051601f8201601f1916810167ffffffffffffffff811182821017156147cf576147cf61472b565b604052919050565b600067ffffffffffffffff8211156147f1576147f161472b565b5060051b60200190565b600082601f83011261480c57600080fd5b813567ffffffffffffffff8111156148265761482661472b565b6148396020601f19601f840116016147a6565b81815284602083860101111561484e57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561487e57600080fd5b823567ffffffffffffffff8082111561489657600080fd5b818501915085601f8301126148aa57600080fd5b81356148bd6148b8826147d7565b6147a6565b81815260059190911b830184019084810190888311156148dc57600080fd5b8585015b83811015614975578035858111156148f85760008081fd5b86016080818c03601f19018113156149105760008081fd5b61491861475a565b898301358881111561492a5760008081fd5b6149388e8c838701016147fb565b8252506040808401358b830152606061495281860161469a565b8284015261496184860161469a565b9083015250855250509186019186016148e0565b5098975050505050505050565b60006020828403121561499457600080fd5b61449d8261469a565b80604081018310156149ae57600080fd5b92915050565b6000806000806000806000610180888a0312156149d057600080fd5b6149d98861469a565b96506149e76020890161469a565b95506040880135945060608801359350614a048960808a0161499d565b9250610140880189811115614a1857600080fd5b60c089019250614a288a8261499d565b91505092959891949750929550565b600080600080600060a08688031215614a4f57600080fd5b85359450602086013567ffffffffffffffff811115614a6d57600080fd5b614a79888289016147fb565b94505060408601359250614a8f6060870161469a565b91506080860135614a9f816146e1565b809150509295509295909350565b60008060008060808587031215614ac357600080fd5b614acc8561469a565b9350614ada6020860161469a565b93969395505050506040820135916060013590565b8015158114613eac57600080fd5b80356146b281614aef565b60008060008060008060008060008060006101608c8e031215614b2a57600080fd5b614b338c614703565b9a50614b4160208d01614703565b9950614b4f60408d01614703565b985060608c01359750614b6460808d01614703565b9650614b7260a08d01614afd565b955067ffffffffffffffff8060c08e01351115614b8e57600080fd5b614b9e8e60c08f01358f016147fb565b9550614bac60e08e0161469a565b9450806101008e01351115614bc057600080fd5b50614bd28d6101008e01358e016147fb565b9250614be16101208d01614703565b9150614bf06101408d01614703565b90509295989b509295989b9093969950565b600060208284031215614c1457600080fd5b813561449d81614aef565b600060208284031215614c3157600080fd5b813567ffffffffffffffff811115614c4857600080fd5b614c54848285016147fb565b949350505050565b60006020808385031215614c6f57600080fd5b823567ffffffffffffffff80821115614c8757600080fd5b818501915085601f830112614c9b57600080fd5b8135614ca96148b8826147d7565b81815260059190911b83018401908481019088831115614cc857600080fd5b8585015b8381101561497557803585811115614ce45760008081fd5b86016060818c03601f1901811315614cfc5760008081fd5b614d04614783565b8983013588811115614d165760008081fd5b614d248e8c838701016147fb565b8252506040808401358b830152614d3c83850161469a565b9082015285525050918601918601614ccc565b60008060408385031215614d6257600080fd5b823567ffffffffffffffff811115614d7957600080fd5b614d85858286016147fb565b95602094909401359450505050565b60008060408385031215614da757600080fd5b82359150614db76020840161469a565b90509250929050565b600181811c90821680614dd457607f821691505b602082108103614e0d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614e8e57614e8e614e42565b6001019392505050565b600060208284031215614eaa57600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614ee257614ee2614e42565b5060010190565b600067ffffffffffffffff83811690831681811015614f0a57614f0a614e42565b039392505050565b600082821015614f2457614f24614e42565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f6157614f61614e42565b500290565b60008251614f7881846020870161462f565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614fc057614fc0614f82565b500690565b61012081016040808784376000838201818152879190815b6002811015614ffd57848483379084018281529284019290600101614fdd565b5050828760c0870137610100850181815286935091505b6001811015615033578251825260209283019290910190600101615014565b50505095945050505050565b60006020828403121561505157600080fd5b815161449d81614aef565b600067ffffffffffffffff80831681851680830382111561507f5761507f614e42565b01949350505050565b601f8211156140d757600081815260208120601f850160051c810160208610156150af5750805b601f850160051c820191505b818110156150ce578281556001016150bb565b505050505050565b815167ffffffffffffffff8111156150f0576150f061472b565b615104816150fe8454614dc0565b84615088565b602080601f83116001811461515757600084156151215750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556150ce565b600085815260208120601f198616915b8281101561518657888601518255948401946001909101908401615167565b50858210156151c257878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000826151e1576151e1614f82565b500490565b600082198211156151f9576151f9614e42565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff83166020820152606060408201526000615233606083018461465b565b9594505050505056fea2646970667358221220c16f5391a2335fd2bbdee61b8cea2ac3d34fb4b8ac0576fc548b330fb23fe12264736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061032b5760003560e01c80638da5cb5b116101b2578063c89e42df116100f9578063dbc16976116100a2578063eaeb077b1161007c578063eaeb077b14610811578063f2fde38b14610824578063f755276114610837578063fe16564f1461084657600080fd5b8063dbc16976146107b9578063e7a7ed02146107c1578063e8bf92ed146107f157600080fd5b8063d0ae98dd116100d3578063d0ae98dd14610766578063d8d1091b14610779578063d8f54db01461078c57600080fd5b8063c89e42df14610707578063cfa8ed471461071a578063d02103ca1461074657600080fd5b8063adc879e91161015b578063b6b0b09711610135578063b6b0b097146106bc578063c0cad302146106e1578063c3fd0f9c146106f457600080fd5b8063adc879e91461067e578063b02286c014610692578063b4d63f581461069c57600080fd5b80639b7967601161018c5780639b79676014610641578063a3c573eb14610654578063ab9fc5ef1461067457600080fd5b80638da5cb5b1461060857806396dc3d391461062657806399f5634e1461063957600080fd5b80635437988d116102765780637152facf1161021f5780637fcb3653116101f95780637fcb3653146105ce57806381df7d3f146105e25780638c4a0af7146105f557600080fd5b80637152facf146105a0578063748608de146105b357806379847057146105c657600080fd5b80636b8616ce116102505780636b8616ce146105655780636ff512cc14610585578063715018a61461059857600080fd5b80635437988d1461049e57806355b925e6146104b1578063574f649e146104c457600080fd5b806327eb6c0f116102d857806345605267116102b257806345605267146104405780635392c5e014610468578063542028d51461049657600080fd5b806327eb6c0f146103c85780633c1582671461040d578063423fa8561461042057600080fd5b80631a26da14116103095780631a26da14146103985780631c1083e2146103ad5780632072f6c5146103c057600080fd5b8063107bf28c1461033057806315064c961461034e57806319d8ac611461036b575b600080fd5b610338610859565b6040516103459190614687565b60405180910390f35b60655461035b9060ff1681565b6040519015158152602001610345565b60685461037f9067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610345565b6103ab6103a63660046146b7565b6108e7565b005b6103ab6103bb36600461470e565b61090c565b6103ab610a18565b6070546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610345565b6103ab61041b36600461486b565b610ac9565b60685461037f9068010000000000000000900467ffffffffffffffff1681565b60685461037f90700100000000000000000000000000000000900467ffffffffffffffff1681565b610488610476366004614982565b606b6020526000908152604090205481565b604051908152602001610345565b61033861145a565b6103ab6104ac36600461470e565b611467565b6103ab6104bf3660046149b4565b6114b6565b6104886104d2366004614a37565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b610488610573366004614982565b60666020526000908152604090205481565b6103ab61059336600461470e565b611a7f565b6103ab611b99565b6103386105ae366004614aad565b611bab565b6103ab6105c13660046149b4565b611de1565b61048861204a565b60695461037f9067ffffffffffffffff1681565b6103ab6105f0366004614b08565b6120c4565b6103ab610603366004614c02565b61241d565b60335473ffffffffffffffffffffffffffffffffffffffff166103e8565b6103ab610634366004614982565b612537565b61048861257a565b6103ab61064f366004614982565b6126ab565b6071546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b61037f62093a8081565b606e5461037f9067ffffffffffffffff1681565b610488620493e081565b6104886106aa366004614982565b60676020526000908152604090205481565b6065546103e890610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6103ab6106ef366004614c1f565b6126fa565b6103ab6107023660046149b4565b612712565b6103ab610715366004614c1f565b612d5c565b6069546103e89068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b610488610774366004614aad565b612e31565b6103ab610787366004614c5c565b6130dd565b60695461035b907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b6103ab613782565b60685461037f907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b6103ab61081f366004614d4f565b613911565b6103ab61083236600461470e565b613e12565b61048867016345785d8a000081565b6103ab610854366004614d94565b613eaf565b606f805461086690614dc0565b80601f016020809104026020016040519081016040528092919081815260200182805461089290614dc0565b80156108df5780601f106108b4576101008083540402835291602001916108df565b820191906000526020600020905b8154815290600101906020018083116108c257829003601f168201915b505050505081565b6108ef613ed2565b67ffffffffffffffff909116600090815260676020526040902055565b60705473ffffffffffffffffffffffffffffffffffffffff16331461099e5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff1615610ab75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b610abf613ed2565b610ac7613f39565b565b60655460ff1615610b685760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610c015760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610995565b805180610c9c5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b8581101561124b576000878281518110610d0257610d02614e13565b602002602001015190506000816060015167ffffffffffffffff161115610f1b5783610d2d81614e71565b945050600081600001518051906020012082602001518360600151604051602001610d9093929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610e5d5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610f155760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610995565b506110b6565b60208101511580610fca5750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610f849160040190815260200190565b6020604051808303816000875af1158015610fa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc79190614e98565b15155b61103c5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610995565b805151620493e0116110b65760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610995565b8567ffffffffffffffff16816040015167ffffffffffffffff16101580156110ec575042816040015167ffffffffffffffff1611155b6111845760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061122d90614e71565b9550508060400151955050808061124390614eb1565b915050610ce6565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156112ee5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610995565b60685460009061131c90700100000000000000000000000000000000900467ffffffffffffffff1684614ee9565b6113309067ffffffffffffffff1687614f12565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061140d33306113e78467016345785d8a0000614f29565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613fc3565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d805461086690614dc0565b61146f613ed2565b606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60655460ff16156115555760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b60695467ffffffffffffffff90811690881611156116015760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a401610995565b60695467ffffffffffffffff908116908716116116ac5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a401610995565b67ffffffffffffffff87166000908152606b602052604090205461175e5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a401610995565b600061176c88888888611bab565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516117a19190614f66565b602060405180830381855afa1580156117be573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906117e19190614e98565b6117eb9190614fb1565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916118559189918991899190600401614fc5565b602060405180830381865afa158015611872573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611896919061503f565b6119085760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610995565b6069546119669033906119259067ffffffffffffffff168b614ee9565b67ffffffffffffffff1661193761257a565b6119419190614f29565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169190614081565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b158015611a1b57600080fd5b505af1158015611a2f573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611b185760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610995565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610a0d565b611ba1613ed2565b610ac760006140dc565b67ffffffffffffffff808516600081815260676020526040808220549387168252902054606092911580611bde57508115155b611c765760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610995565b80611d0f5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610995565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b611de9613ed2565b60695467ffffffffffffffff9081169088161115611e955760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a401610995565b60695467ffffffffffffffff90811690871611611f405760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610995565b67ffffffffffffffff80881660009081526067602052604080822054928916825290205481611fd75760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610995565b806119665760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610995565b60685460009067ffffffffffffffff700100000000000000000000000000000000820481169161209991780100000000000000000000000000000000000000000000000090910416600161505c565b6120a39190614ee9565b6120bf9067ffffffffffffffff16670de0b6b3a7640000614f29565b905090565b600054610100900460ff16158080156120e45750600054600160ff909116105b806120fe5750303b1580156120fe575060005460ff166001145b6121705760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610995565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156121ce57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d61230d87826150d6565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f61234e85826150d6565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560708054928516929091169190911790556123ac614153565b801561240f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146124b65760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610995565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a0d90831515815260200190565b61253f613ed2565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156125f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126159190614e98565b60695460685491925060009167ffffffffffffffff9182169168010000000000000000820481169161267a9170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614ee9565b612684919061505c565b61268e9190614ee9565b67ffffffffffffffff1690506126a481836151d2565b9250505090565b6126b3613ed2565b6068805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b612702613ed2565b606f61270e82826150d6565b5050565b60655460ff16156127b15760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b8567ffffffffffffffff168767ffffffffffffffff16106128605760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a401610995565b60695467ffffffffffffffff90811690871611156129325760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c401610995565b67ffffffffffffffff87166000908152606b60205260409020546129e45760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a401610995565b67ffffffffffffffff86166000908152606b6020526040902054612a965760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a401610995565b6000612aa488888888611bab565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051612ad99190614f66565b602060405180830381855afa158015612af6573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612b199190614e98565b612b239190614fb1565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91612b8d9189918991899190600401614fc5565b602060405180830381865afa158015612baa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bce919061503f565b612c405760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f46000000006064820152608401610995565b67ffffffffffffffff88166000908152606b6020526040902054869003612cf55760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a401610995565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a1612d51613f39565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612df55760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610995565b606d612e0182826150d6565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a0d9190614687565b60695460009067ffffffffffffffff868116911614612ede5760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b8467ffffffffffffffff168467ffffffffffffffff1611612f8d5760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a401610995565b60685467ffffffffffffffff68010000000000000000909104811690851611156130455760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b600061305386868686611bab565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516130889190614f66565b602060405180830381855afa1580156130a5573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906130c89190614e98565b6130d29190614fb1565b979650505050505050565b60655460ff161561317c5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461323f5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610995565b8051806132da5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b60685467ffffffffffffffff780100000000000000000000000000000000000000000000000082048116916133259184917001000000000000000000000000000000009004166151e6565b11156133995760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610995565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b848110156136b25760008682815181106133f9576133f9614e13565b60200260200101519050838061340e90614e71565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff881660009081526066909352912054909150811461352f5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610995565b61353a600188614f12565b83036135f8574262093a808360400151613554919061505c565b67ffffffffffffffff1611156135f85760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610995565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209350858061369a90614e71565b965050505080806136aa90614eb1565b9150506133dd565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166137fa5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610995565b60705473ffffffffffffffffffffffffffffffffffffffff1633146138875760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c0000006064820152608401610995565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156138f157600080fd5b505af1158015613905573d6000803e3d6000fd5b50505050610ac76141d9565b60655460ff16156139b05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114613a735760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610995565b6000613a7d61204a565b905081811115613af55760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610995565b620493e0835110613b6e5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610995565b606554613b9890610100900473ffffffffffffffffffffffffffffffffffffffff16333084613fc3565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2c9190614e98565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613c6683614e71565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505083805190602001208142604051602001613cdf93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526066909352912055323303613daf57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613e0c565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613e03939291906151fe565b60405180910390a25b50505050565b613e1a613ed2565b73ffffffffffffffffffffffffffffffffffffffff8116613ea35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610995565b613eac816140dc565b50565b613eb7613ed2565b67ffffffffffffffff166000908152606b6020526040902055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ac75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610995565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613fa357600080fd5b505af1158015613fb7573d6000803e3d6000fd5b50505050610ac76142a4565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052613e0c9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152614399565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526140d79084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161401d565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166141d05760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610995565b610ac7336140dc565b60655460ff166142515760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610995565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff16156143435760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60006143fb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661448b9092919063ffffffff16565b8051909150156140d75780806020019051810190614419919061503f565b6140d75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610995565b606061449a84846000856144a4565b90505b9392505050565b60608247101561451c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610995565b73ffffffffffffffffffffffffffffffffffffffff85163b6145805760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610995565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516145a99190614f66565b60006040518083038185875af1925050503d80600081146145e6576040519150601f19603f3d011682016040523d82523d6000602084013e6145eb565b606091505b50915091506130d28282866060831561460557508161449d565b8251156146155782518084602001fd5b8160405162461bcd60e51b81526004016109959190614687565b60005b8381101561464a578181015183820152602001614632565b83811115613e0c5750506000910152565b6000815180845261467381602086016020860161462f565b601f01601f19169290920160200192915050565b60208152600061449d602083018461465b565b803567ffffffffffffffff811681146146b257600080fd5b919050565b600080604083850312156146ca57600080fd5b6146d38361469a565b946020939093013593505050565b73ffffffffffffffffffffffffffffffffffffffff81168114613eac57600080fd5b80356146b2816146e1565b60006020828403121561472057600080fd5b813561449d816146e1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171561477d5761477d61472b565b60405290565b6040516060810167ffffffffffffffff8111828210171561477d5761477d61472b565b604051601f8201601f1916810167ffffffffffffffff811182821017156147cf576147cf61472b565b604052919050565b600067ffffffffffffffff8211156147f1576147f161472b565b5060051b60200190565b600082601f83011261480c57600080fd5b813567ffffffffffffffff8111156148265761482661472b565b6148396020601f19601f840116016147a6565b81815284602083860101111561484e57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561487e57600080fd5b823567ffffffffffffffff8082111561489657600080fd5b818501915085601f8301126148aa57600080fd5b81356148bd6148b8826147d7565b6147a6565b81815260059190911b830184019084810190888311156148dc57600080fd5b8585015b83811015614975578035858111156148f85760008081fd5b86016080818c03601f19018113156149105760008081fd5b61491861475a565b898301358881111561492a5760008081fd5b6149388e8c838701016147fb565b8252506040808401358b830152606061495281860161469a565b8284015261496184860161469a565b9083015250855250509186019186016148e0565b5098975050505050505050565b60006020828403121561499457600080fd5b61449d8261469a565b80604081018310156149ae57600080fd5b92915050565b6000806000806000806000610180888a0312156149d057600080fd5b6149d98861469a565b96506149e76020890161469a565b95506040880135945060608801359350614a048960808a0161499d565b9250610140880189811115614a1857600080fd5b60c089019250614a288a8261499d565b91505092959891949750929550565b600080600080600060a08688031215614a4f57600080fd5b85359450602086013567ffffffffffffffff811115614a6d57600080fd5b614a79888289016147fb565b94505060408601359250614a8f6060870161469a565b91506080860135614a9f816146e1565b809150509295509295909350565b60008060008060808587031215614ac357600080fd5b614acc8561469a565b9350614ada6020860161469a565b93969395505050506040820135916060013590565b8015158114613eac57600080fd5b80356146b281614aef565b60008060008060008060008060008060006101608c8e031215614b2a57600080fd5b614b338c614703565b9a50614b4160208d01614703565b9950614b4f60408d01614703565b985060608c01359750614b6460808d01614703565b9650614b7260a08d01614afd565b955067ffffffffffffffff8060c08e01351115614b8e57600080fd5b614b9e8e60c08f01358f016147fb565b9550614bac60e08e0161469a565b9450806101008e01351115614bc057600080fd5b50614bd28d6101008e01358e016147fb565b9250614be16101208d01614703565b9150614bf06101408d01614703565b90509295989b509295989b9093969950565b600060208284031215614c1457600080fd5b813561449d81614aef565b600060208284031215614c3157600080fd5b813567ffffffffffffffff811115614c4857600080fd5b614c54848285016147fb565b949350505050565b60006020808385031215614c6f57600080fd5b823567ffffffffffffffff80821115614c8757600080fd5b818501915085601f830112614c9b57600080fd5b8135614ca96148b8826147d7565b81815260059190911b83018401908481019088831115614cc857600080fd5b8585015b8381101561497557803585811115614ce45760008081fd5b86016060818c03601f1901811315614cfc5760008081fd5b614d04614783565b8983013588811115614d165760008081fd5b614d248e8c838701016147fb565b8252506040808401358b830152614d3c83850161469a565b9082015285525050918601918601614ccc565b60008060408385031215614d6257600080fd5b823567ffffffffffffffff811115614d7957600080fd5b614d85858286016147fb565b95602094909401359450505050565b60008060408385031215614da757600080fd5b82359150614db76020840161469a565b90509250929050565b600181811c90821680614dd457607f821691505b602082108103614e0d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614e8e57614e8e614e42565b6001019392505050565b600060208284031215614eaa57600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614ee257614ee2614e42565b5060010190565b600067ffffffffffffffff83811690831681811015614f0a57614f0a614e42565b039392505050565b600082821015614f2457614f24614e42565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f6157614f61614e42565b500290565b60008251614f7881846020870161462f565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614fc057614fc0614f82565b500690565b61012081016040808784376000838201818152879190815b6002811015614ffd57848483379084018281529284019290600101614fdd565b5050828760c0870137610100850181815286935091505b6001811015615033578251825260209283019290910190600101615014565b50505095945050505050565b60006020828403121561505157600080fd5b815161449d81614aef565b600067ffffffffffffffff80831681851680830382111561507f5761507f614e42565b01949350505050565b601f8211156140d757600081815260208120601f850160051c810160208610156150af5750805b601f850160051c820191505b818110156150ce578281556001016150bb565b505050505050565b815167ffffffffffffffff8111156150f0576150f061472b565b615104816150fe8454614dc0565b84615088565b602080601f83116001811461515757600084156151215750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556150ce565b600085815260208120601f198616915b8281101561518657888601518255948401946001909101908401615167565b50858210156151c257878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000826151e1576151e1614f82565b500490565b600082198211156151f9576151f9614e42565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff83166020820152606060408201526000615233606083018461465b565b9594505050505056fea2646970667358221220c16f5391a2335fd2bbdee61b8cea2ac3d34fb4b8ac0576fc548b330fb23fe12264736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/TokenWrapped.json b/compiled-contracts/TokenWrapped.json index aa970f783..58a72fb15 100644 --- a/compiled-contracts/TokenWrapped.json +++ b/compiled-contracts/TokenWrapped.json @@ -483,8 +483,8 @@ "type": "function" } ], - "bytecode": "0x60c06040523480156200001157600080fd5b50604051620019c7380380620019c78339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161150d620004ba600039600061053001526000818161036f01526104fa015261150d6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b604051610191919061123b565b60405180910390f35b6101ad6101a83660046112d7565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad610204366004611301565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad6102763660046112d7565b610552565b6101ad6102893660046112d7565b61059e565b6101c161029c36600461133d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d236600461133d565b60066020526000908152604090205481565b610184610645565b6101ad6102fa3660046112d7565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad6103523660046112d7565b6106ed565b6101ad6103653660046112d7565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f36600461135f565b6107b2565b005b6101c16103b43660046113d2565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043790611405565b80601f016020809104026020016040519081016040528092919081815260200182805461046390611405565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f12565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611487565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c8383610fda565b50600192915050565b60606004805461043790611405565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c83836110b3565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866108818361149f565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f3d610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff821661103d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b806002600082825461104f9190611487565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff821661113c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156111d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610c27565b600060208083528351808285015260005b818110156112685785810183015185820160400152820161124c565b8181111561127a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112d257600080fd5b919050565b600080604083850312156112ea57600080fd5b6112f3836112ae565b946020939093013593505050565b60008060006060848603121561131657600080fd5b61131f846112ae565b925061132d602085016112ae565b9150604084013590509250925092565b60006020828403121561134f57600080fd5b611358826112ae565b9392505050565b600080600080600080600060e0888a03121561137a57600080fd5b611383886112ae565b9650611391602089016112ae565b95506040880135945060608801359350608088013560ff811681146113b557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156113e557600080fd5b6113ee836112ae565b91506113fc602084016112ae565b90509250929050565b600181811c9082168061141957607f821691505b602082108103611452577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561149a5761149a611458565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036114d0576114d0611458565b506001019056fea264697066735822122094134962e5fa2f6357086a2590b7f3a754d340b16e5312664d82a308bc23a0df64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b604051610191919061123b565b60405180910390f35b6101ad6101a83660046112d7565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad610204366004611301565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad6102763660046112d7565b610552565b6101ad6102893660046112d7565b61059e565b6101c161029c36600461133d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d236600461133d565b60066020526000908152604090205481565b610184610645565b6101ad6102fa3660046112d7565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad6103523660046112d7565b6106ed565b6101ad6103653660046112d7565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f36600461135f565b6107b2565b005b6101c16103b43660046113d2565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043790611405565b80601f016020809104026020016040519081016040528092919081815260200182805461046390611405565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f12565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611487565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c8383610fda565b50600192915050565b60606004805461043790611405565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c83836110b3565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866108818361149f565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f3d610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff821661103d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b806002600082825461104f9190611487565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff821661113c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156111d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610c27565b600060208083528351808285015260005b818110156112685785810183015185820160400152820161124c565b8181111561127a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112d257600080fd5b919050565b600080604083850312156112ea57600080fd5b6112f3836112ae565b946020939093013593505050565b60008060006060848603121561131657600080fd5b61131f846112ae565b925061132d602085016112ae565b9150604084013590509250925092565b60006020828403121561134f57600080fd5b611358826112ae565b9392505050565b600080600080600080600060e0888a03121561137a57600080fd5b611383886112ae565b9650611391602089016112ae565b95506040880135945060608801359350608088013560ff811681146113b557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156113e557600080fd5b6113ee836112ae565b91506113fc602084016112ae565b90509250929050565b600181811c9082168061141957607f821691505b602082108103611452577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561149a5761149a611458565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036114d0576114d0611458565b506001019056fea264697066735822122094134962e5fa2f6357086a2590b7f3a754d340b16e5312664d82a308bc23a0df64736f6c634300080f0033", + "bytecode": "0x60c06040523480156200001157600080fd5b5060405162001a7838038062001a788339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516115be620004ba600039600061053001526000818161036f01526104fa01526115be6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b60405161019191906112d5565b60405180910390f35b6101ad6101a8366004611371565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad61020436600461139b565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad610276366004611371565b610552565b6101ad610289366004611371565b61059e565b6101c161029c3660046113d7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d23660046113d7565b60066020526000908152604090205481565b610184610645565b6101ad6102fa366004611371565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad610352366004611371565b6106ed565b6101ad610365366004611371565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f3660046113f9565b6107b2565b005b6101c16103b436600461146c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6060600380546104379061149f565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061149f565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f56565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611521565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c838361101e565b50600192915050565b6060600480546104379061149f565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c8383611124565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661088183611539565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ee3908490611521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4991815260200190565b60405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f81610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166110815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b80600260008282546110939190611521565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906110cd908490611521565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156112495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611285908490611571565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c27565b600060208083528351808285015260005b81811015611302578581018301518582016040015282016112e6565b81811115611314576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136c57600080fd5b919050565b6000806040838503121561138457600080fd5b61138d83611348565b946020939093013593505050565b6000806000606084860312156113b057600080fd5b6113b984611348565b92506113c760208501611348565b9150604084013590509250925092565b6000602082840312156113e957600080fd5b6113f282611348565b9392505050565b600080600080600080600060e0888a03121561141457600080fd5b61141d88611348565b965061142b60208901611348565b95506040880135945060608801359350608088013560ff8116811461144f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561147f57600080fd5b61148883611348565b915061149660208401611348565b90509250929050565b600181811c908216806114b357607f821691505b6020821081036114ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611534576115346114f2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156a5761156a6114f2565b5060010190565b600082821015611583576115836114f2565b50039056fea264697066735822122074c1369adb4b03ecf20b18930bac9df5d9a48b4602516485c969475d7cadf1ac64736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b60405161019191906112d5565b60405180910390f35b6101ad6101a8366004611371565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad61020436600461139b565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad610276366004611371565b610552565b6101ad610289366004611371565b61059e565b6101c161029c3660046113d7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d23660046113d7565b60066020526000908152604090205481565b610184610645565b6101ad6102fa366004611371565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad610352366004611371565b6106ed565b6101ad610365366004611371565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f3660046113f9565b6107b2565b005b6101c16103b436600461146c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6060600380546104379061149f565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061149f565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f56565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611521565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c838361101e565b50600192915050565b6060600480546104379061149f565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c8383611124565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661088183611539565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ee3908490611521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4991815260200190565b60405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f81610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166110815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b80600260008282546110939190611521565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906110cd908490611521565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156112495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611285908490611571565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c27565b600060208083528351808285015260005b81811015611302578581018301518582016040015282016112e6565b81811115611314576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136c57600080fd5b919050565b6000806040838503121561138457600080fd5b61138d83611348565b946020939093013593505050565b6000806000606084860312156113b057600080fd5b6113b984611348565b92506113c760208501611348565b9150604084013590509250925092565b6000602082840312156113e957600080fd5b6113f282611348565b9392505050565b600080600080600080600060e0888a03121561141457600080fd5b61141d88611348565b965061142b60208901611348565b95506040880135945060608801359350608088013560ff8116811461144f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561147f57600080fd5b61148883611348565b915061149660208401611348565b90509250929050565b600181811c908216806114b357607f821691505b6020821081036114ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611534576115346114f2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156a5761156a6114f2565b5060010190565b600082821015611583576115836114f2565b50039056fea264697066735822122074c1369adb4b03ecf20b18930bac9df5d9a48b4602516485c969475d7cadf1ac64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/package.json b/package.json index beeac5ece..88f0aaf31 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@0xpolygonhermez/zkevm-contracts", "description": "Core contracts for the Polygon Hermez zkEVM", - "version": "0.4.0.0", + "version": "0.5.1.0", "repository": { "type": "git", "url": "git+https://github.com/0xPolygonHermez/contracts-zkEVM.git" From 6a0f1ccd3500eec08b1d60c065ab9d17c5c6e332 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Wed, 30 Nov 2022 14:27:39 +0100 Subject: [PATCH 29/71] first approach --- compiled-contracts/Bridge.json | 41 ++- compiled-contracts/BridgeMock.json | 41 ++- contracts/Bridge.sol | 49 ++- contracts/ProofOfEfficiency.sol | 163 +++++++++- contracts/Timelock.sol | 502 +++++++++++++++++++++++++++++ test/contracts/bridge.test.js | 3 + 6 files changed, 752 insertions(+), 47 deletions(-) create mode 100644 contracts/Timelock.sol diff --git a/compiled-contracts/Bridge.json b/compiled-contracts/Bridge.json index 80005225e..13999ffbb 100644 --- a/compiled-contracts/Bridge.json +++ b/compiled-contracts/Bridge.json @@ -396,27 +396,27 @@ "type": "function" }, { - "inputs": [ + "inputs": [], + "name": "claimTimeout", + "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], - "name": "claimNullifier", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], "stateMutability": "view", "type": "function" }, { - "inputs": [], - "name": "claimTimeout", + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "claimedBitMap", "outputs": [ { "internalType": "uint256", @@ -574,6 +574,25 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "isClaimed", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "isEmergencyState", diff --git a/compiled-contracts/BridgeMock.json b/compiled-contracts/BridgeMock.json index 04164a394..fac1bcb3b 100644 --- a/compiled-contracts/BridgeMock.json +++ b/compiled-contracts/BridgeMock.json @@ -396,27 +396,27 @@ "type": "function" }, { - "inputs": [ + "inputs": [], + "name": "claimTimeout", + "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], - "name": "claimNullifier", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], "stateMutability": "view", "type": "function" }, { - "inputs": [], - "name": "claimTimeout", + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "claimedBitMap", "outputs": [ { "internalType": "uint256", @@ -574,6 +574,25 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "isClaimed", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "isEmergencyState", diff --git a/contracts/Bridge.sol b/contracts/Bridge.sol index 19274678f..641c2094f 100644 --- a/contracts/Bridge.sol +++ b/contracts/Bridge.sol @@ -45,11 +45,14 @@ contract Bridge is // Leaf type message uint8 public constant LEAF_TYPE_MESSAGE = 1; + // Max claim timeout the owner is able to set + uint256 public constant MAX_CLAIM_TIMEOUT = 3 days; + // Network identifier uint32 public networkID; - // Leaf index --> claimed - mapping(uint256 => bool) public claimNullifier; + // Leaf index --> claimed bit map + mapping(uint256 => uint256) public claimedBitMap; // keccak256(OriginNetwork || tokenAddress) --> Wrapped token address mapping(bytes32 => address) public tokenInfoToWrappedToken; @@ -79,6 +82,11 @@ contract Bridge is networkID = _networkID; globalExitRootManager = _globalExitRootManager; poeAddress = _poeAddress; + + require( + _claimTimeout <= MAX_CLAIM_TIMEOUT, + "Bridge::initialize: MAX_CLAIM_TIMEOUT_EXCEEDED" + ); claimTimeout = _claimTimeout; // Initialize OZ contracts @@ -310,7 +318,7 @@ contract Bridge is ); // Update nullifier - claimNullifier[index] = true; + _setClaimed(index); // Transfer funds if (originTokenAddress == address(0)) { @@ -423,7 +431,7 @@ contract Bridge is ); // Update nullifier - claimNullifier[index] = true; + _setClaimed(index); // Execute message // Transfer ether @@ -516,6 +524,10 @@ contract Bridge is * Only can be called by the owner */ function setClaimTimeout(uint256 newClaimTimeout) external onlyOwner { + require( + newClaimTimeout <= MAX_CLAIM_TIMEOUT, + "Bridge::setClaimTimeout: MAX_CLAIM_TIMEOUT_EXCEEDED" + ); claimTimeout = newClaimTimeout; emit SetClaimTimeout(newClaimTimeout); } @@ -548,10 +560,7 @@ contract Bridge is uint8 leafType ) internal { // Check nullifier - require( - claimNullifier[index] == false, - "Bridge::_verifyLeaf: ALREADY_CLAIMED" - ); + require(!isClaimed(index), "Bridge::_verifyLeaf: ALREADY_CLAIMED"); // Check timestamp where the global exit root was set uint256 timestampGlobalExitRoot = globalExitRootManager @@ -598,6 +607,30 @@ contract Bridge is ); } + /** + * @notice Function to check if an index is claimed or not + * @param index Index + */ + function isClaimed(uint256 index) public view returns (bool) { + uint256 claimedWordIndex = index / 256; + uint256 claimedBitIndex = index % 256; + uint256 claimedWord = claimedBitMap[claimedWordIndex]; + uint256 mask = (1 << claimedBitIndex); + return claimedWord & mask == mask; + } + + /** + * @notice Function set a index as claimed + * @param index Index + */ + function _setClaimed(uint256 index) private { + uint256 claimedWordIndex = index / 256; + uint256 claimedBitIndex = index % 256; + claimedBitMap[claimedWordIndex] = + claimedBitMap[claimedWordIndex] | + (1 << claimedBitIndex); + } + /** * @notice Function to extract the selector of a bytes calldata * @param _data The calldata bytes diff --git a/contracts/ProofOfEfficiency.sol b/contracts/ProofOfEfficiency.sol index 0bebda320..7c451f13f 100644 --- a/contracts/ProofOfEfficiency.sol +++ b/contracts/ProofOfEfficiency.sol @@ -44,6 +44,8 @@ contract ProofOfEfficiency is /** * @notice Struct which will be used to call sequenceForceBatches * @param transactions L2 ethereum transactions EIP-155 or pre-EIP-155 with signature: + * EIP-155: rlp(nonce, gasprice, gasLimit, to, value, data, chainid, 0, 0,) || v || r || s + * pre-EIP-155: rlp(nonce, gasprice, gasLimit, to, value, data) || v || r || s * @param globalExitRoot Global exit root of the batch * @param minForcedTimestamp Minimum timestamp of the force batch data */ @@ -57,9 +59,6 @@ contract ProofOfEfficiency is uint256 internal constant _RFIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617; - // MATIC token address - IERC20Upgradeable public matic; - // trusted sequencer prover Fee uint256 public constant TRUSTED_SEQUENCER_FEE = 0.1 ether; // TODO should be defined @@ -79,6 +78,16 @@ contract ProofOfEfficiency is // 8 Fields * 8 Bytes (Stark input in Field Array form) * 5 (hashes), + 8 bytes * 3 (oldNumBatch, newNumBatch, chainID) + 20 bytes (aggrAddress) uint256 internal constant _SNARK_SHA_BYTES = 364; + // Trusted aggregator timeout, if an aggregation don't happen inside this frame, + // the aggregation becomes open to anyone for OPEN_AGGREGATION_TIME + uint64 public constant TRUSTED_AGGREGATOR_TIMEOUT = 1 days; + + // Time that the aggregation becomes open to anyone + uint64 public constant OPEN_AGGREGATION_TIME = 1 weeks; + + // MATIC token address + IERC20Upgradeable public matic; + // Queue of forced batches with their associated data // ForceBatchNum --> hashedForceBatchData // hashedForceBatchData: hash containing the necessary information to force a batch: @@ -91,6 +100,8 @@ contract ProofOfEfficiency is // keccak256(bytes32 oldAccInputHash, keccak256(bytes transactions), bytes32 globalExitRoot, uint64 timestamp, address seqAddress) mapping(uint64 => bytes32) public sequencedBatches; + // Storage Slot // + // Last sequenced timestamp uint64 public lastTimestamp; @@ -103,31 +114,48 @@ contract ProofOfEfficiency is // Last forced batch uint64 public lastForceBatch; + // Storage Slot // + // Last batch verified by the aggregators uint64 public lastVerifiedBatch; // Trusted sequencer address address public trustedSequencer; - // Indicates whether the force batch functionality is available - bool public forceBatchAllowed; + // Storage Slot // + + // Trusted aggregator address + address public trustedAggregator; + + // Timestamp of the last trusted aggregation + uint64 public lastTrustedAggregationTime; + + // Storage Slot // + + // Timestamp until the aggregation will be open to anyone + uint64 public openAggregationUntil; + + // Rollup verifier interface + IVerifierRollup public rollupVerifier; + + // Storage Slot // + + // L2 chain identifier + uint64 public chainID; // Global Exit Root interface IGlobalExitRootManager public globalExitRootManager; + // Indicates whether the force batch functionality is available + bool public forceBatchAllowed; + // State root mapping // BatchNum --> state root mapping(uint64 => bytes32) public batchNumToStateRoot; - // Rollup verifier interface - IVerifierRollup public rollupVerifier; - // Trusted sequencer URL string public trustedSequencerURL; - // L2 chain identifier - uint64 public chainID; - // L2 network name string public networkName; @@ -137,6 +165,9 @@ contract ProofOfEfficiency is // Bridge Address IBridge public bridgeAddress; + // Indicates whether the scape hatch is active or not + bool public scapeHatchActive; + /** * @dev Emitted when the trusted sequencer sends a new batch of transactions */ @@ -186,6 +217,11 @@ contract ProofOfEfficiency is */ event SetSecurityCouncil(address newSecurityCouncil); + /** + * @dev Emitted when a trusted aggregator update or renounce his address + */ + event SetTrustedAggreagator(address newTrustedAggreagator); + /** * @dev Emitted when is proved a different state given the same batches */ @@ -218,7 +254,8 @@ contract ProofOfEfficiency is uint64 _chainID, string memory _networkName, IBridge _bridgeAddress, - address _securityCouncil + address _securityCouncil, + address _trustedAggregator ) public initializer { globalExitRootManager = _globalExitRootManager; matic = _matic; @@ -231,6 +268,8 @@ contract ProofOfEfficiency is networkName = _networkName; bridgeAddress = _bridgeAddress; securityCouncil = _securityCouncil; + trustedAggregator = _trustedAggregator; + lastTrustedAggregationTime = uint64(block.timestamp); // Initialize OZ contracts __Ownable_init_unchained(); @@ -393,6 +432,57 @@ contract ProofOfEfficiency is uint256[2][2] calldata proofB, uint256[2] calldata proofC ) public ifNotEmergencyState { + + 5 dias timeout + check timeout sequeuenced batch, if omre thna 5 days, everyone can aggregate this + ahce mas de 7 dias que no se agrega ningun batch (contrato entra en halt) + +qiutar security council + +si forja trustedAggregator --> no hay delay en el claim +otro aggregator -> hay delay + + + logica: trusted manda + si hay trusted, manda trusted + si NO hay trsuteed, y hay uno y pasa tel tiemout vale ese ( SOLO en el timeout) // + si hay 2 no trusted, halt. ( prove non deterministic state) + +trusted aggreagator renunciara en algun punto. + + + // Check acces control + // if trusted aggregator is address 0 everyone can aggregate + if (trustedAggregator != address(0)) { + // if there's a trusted aggregator, and it's the sender update the trusted aggregator time + if (trustedAggregator == msg.sender) { + lastTrustedAggregationTime = uint64(block.timestamp); + } else { + // Check if we are on free aggregation period, if we are, anyone is free to aggregate + if (openAggregationUntil < block.timestamp) { + // Check if the openAggregationUntil must be updated + // Take the bigger timestamp from the last trusted aggregation and the last expired open aggregation period + uint256 lastTimeToCompare = openAggregationUntil > + lastTrustedAggregationTime + ? openAggregationUntil + : lastTrustedAggregationTime; + + // Require that the aggregator timeout must be expired + require( + block.timestamp - lastTimeToCompare > + TRUSTED_AGGREGATOR_TIMEOUT, + "ProofOfEfficiency::verifyBatches: AGGREGATOR_TIMEOUT_IS_NOT_EXPIRED" + ); + + // Open the aggregation to everyone for OPEN_AGGREGATION_TIME + openAggregationUntil = + uint64(block.timestamp) + + OPEN_AGGREGATION_TIME; + } + } + } + + // Assert init and final batch require( initNumBatch <= lastVerifiedBatch, "ProofOfEfficiency::verifyBatches: initNumBatch must be less or equal than lastVerifiedBatch" @@ -408,6 +498,7 @@ contract ProofOfEfficiency is "ProofOfEfficiency::verifyBatches: initNumBatch state root does not exist" ); + // Get snark bytes bytes memory snarkHashBytes = getInputSnarkBytes( initNumBatch, finalNewBatch, @@ -620,6 +711,20 @@ contract ProofOfEfficiency is emit SetSecurityCouncil(newSecurityCouncil); } + /** + * @notice Allow the current trusted aggregator to set a new trusted aggregator address + * If address 0 is set, everyone is free to aggregate + * @param newTrustedAggregator Address of the new trusted aggregator + */ + function setTrustedAggregator(address newTrustedAggregator) public { + require( + trustedAggregator == msg.sender, + "ProofOfEfficiency::setTrustedAggregator: only trusted aggregator" + ); + + emit SetTrustedAggreagator(newTrustedAggregator); + } + /** * @notice Allows to halt the PoE if its possible to prove a different state root given the same batches * @param initNumBatch Batch which the aggregator starts the verification @@ -690,11 +795,12 @@ contract ProofOfEfficiency is } /** - * @notice Function to activate emergency state on both PoE and Bridge contrats + * @notice Function to activate scape hatch, which also enable the emergency mode on both PoE and Bridge contrats * Only can be called by the owner in the bootstrap phase, once the owner is renounced, the system - * can only be put on this state by proving a distinct state root given the same batches + * can only be put on emergency mode by proving a distinct state root given the same batches */ - function activateEmergencyState() external ifNotEmergencyState onlyOwner { + function activateScapeHatch() external onlyOwner { + scapeHatchActive = true; _activateEmergencyState(); } @@ -711,17 +817,40 @@ contract ProofOfEfficiency is bridgeAddress.deactivateEmergencyState(); // Deactivate emergency state on this contract + scapeHatchActive = false; super._deactivateEmergencyState(); } /** - * @notice Function to calculate the sequencer collateral depending on the congestion of the batches + * @notice Function to calculate the fee that must be payed for every batch // TODO */ - function calculateForceProverFee() public view returns (uint256) { + function feePerBatch() public view returns (uint256) { return 1 ether * uint256(1 + lastForceBatch - lastForceBatchSequenced); } + +Prueba cada media hora + + + +batches timestamp --> payable +acctimtemt = timestmapTardado * numbatchesantiguos/numBAthcesNuevos + +acctime * numOldBatches + timestampTardado*numNewBatches / totalbatches + +debajo 15 minutos, *0.9 +encima 2 horas, *1.1 + +penar pa que no mepuedan spamear batches +En medio, linear + + +debajo tiempo X(edia hora) 0.9 ( factor decremento) +encima timepo X(media hora) *1.1 ( encima media hora incremento) +Elevar neceisto una tabla + + /** * @notice Function to calculate the reward to verify a single batch */ diff --git a/contracts/Timelock.sol b/contracts/Timelock.sol new file mode 100644 index 000000000..5f886b2c6 --- /dev/null +++ b/contracts/Timelock.sol @@ -0,0 +1,502 @@ +// SPDX-License-Identifier: MIT +// OpenZeppelin Contracts (last updated v4.8.0) (governance/TimelockController.sol) + +pragma solidity ^0.8.0; + +import "../access/AccessControl.sol"; +import "../token/ERC721/IERC721Receiver.sol"; +import "../token/ERC1155/IERC1155Receiver.sol"; +import "../utils/Address.sol"; + +/** + * @dev Contract module which acts as a timelocked controller. When set as the + * owner of an `Ownable` smart contract, it enforces a timelock on all + * `onlyOwner` maintenance operations. This gives time for users of the + * controlled contract to exit before a potentially dangerous maintenance + * operation is applied. + * + * By default, this contract is self administered, meaning administration tasks + * have to go through the timelock process. The proposer (resp executor) role + * is in charge of proposing (resp executing) operations. A common use case is + * to position this {TimelockController} as the owner of a smart contract, with + * a multisig or a DAO as the sole proposer. + * + * _Available since v3.3._ + */ +contract TimelockController is + AccessControl, + IERC721Receiver, + IERC1155Receiver +{ + bytes32 public constant TIMELOCK_ADMIN_ROLE = + keccak256("TIMELOCK_ADMIN_ROLE"); + bytes32 public constant PROPOSER_ROLE = keccak256("PROPOSER_ROLE"); + bytes32 public constant EXECUTOR_ROLE = keccak256("EXECUTOR_ROLE"); + bytes32 public constant CANCELLER_ROLE = keccak256("CANCELLER_ROLE"); + uint256 internal constant _DONE_TIMESTAMP = uint256(1); + + mapping(bytes32 => uint256) private _timestamps; + uint256 private _minDelay; + + /** + * @dev Emitted when a call is scheduled as part of operation `id`. + */ + event CallScheduled( + bytes32 indexed id, + uint256 indexed index, + address target, + uint256 value, + bytes data, + bytes32 predecessor, + uint256 delay + ); + + /** + * @dev Emitted when a call is performed as part of operation `id`. + */ + event CallExecuted( + bytes32 indexed id, + uint256 indexed index, + address target, + uint256 value, + bytes data + ); + + /** + * @dev Emitted when operation `id` is cancelled. + */ + event Cancelled(bytes32 indexed id); + + /** + * @dev Emitted when the minimum delay for future operations is modified. + */ + event MinDelayChange(uint256 oldDuration, uint256 newDuration); + + /** + * @dev Initializes the contract with the following parameters: + * + * - `minDelay`: initial minimum delay for operations + * - `proposers`: accounts to be granted proposer and canceller roles + * - `executors`: accounts to be granted executor role + * - `admin`: optional account to be granted admin role; disable with zero address + * + * IMPORTANT: The optional admin can aid with initial configuration of roles after deployment + * without being subject to delay, but this role should be subsequently renounced in favor of + * administration through timelocked proposals. Previous versions of this contract would assign + * this admin to the deployer automatically and should be renounced as well. + */ + constructor( + uint256 minDelay, + address[] memory proposers, + address[] memory executors, + address admin + ) { + _setRoleAdmin(TIMELOCK_ADMIN_ROLE, TIMELOCK_ADMIN_ROLE); + _setRoleAdmin(PROPOSER_ROLE, TIMELOCK_ADMIN_ROLE); + _setRoleAdmin(EXECUTOR_ROLE, TIMELOCK_ADMIN_ROLE); + _setRoleAdmin(CANCELLER_ROLE, TIMELOCK_ADMIN_ROLE); + + // self administration + _setupRole(TIMELOCK_ADMIN_ROLE, address(this)); + + // optional admin + if (admin != address(0)) { + _setupRole(TIMELOCK_ADMIN_ROLE, admin); + } + + // register proposers and cancellers + for (uint256 i = 0; i < proposers.length; ++i) { + _setupRole(PROPOSER_ROLE, proposers[i]); + _setupRole(CANCELLER_ROLE, proposers[i]); + } + + // register executors + for (uint256 i = 0; i < executors.length; ++i) { + _setupRole(EXECUTOR_ROLE, executors[i]); + } + + _minDelay = minDelay; + emit MinDelayChange(0, minDelay); + } + + /** + * @dev Modifier to make a function callable only by a certain role. In + * addition to checking the sender's role, `address(0)` 's role is also + * considered. Granting a role to `address(0)` is equivalent to enabling + * this role for everyone. + */ + modifier onlyRoleOrOpenRole(bytes32 role) { + if (!hasRole(role, address(0))) { + _checkRole(role, _msgSender()); + } + _; + } + + /** + * @dev Contract might receive/hold ETH as part of the maintenance process. + */ + receive() external payable {} + + /** + * @dev See {IERC165-supportsInterface}. + */ + function supportsInterface( + bytes4 interfaceId + ) public view virtual override(IERC165, AccessControl) returns (bool) { + return + interfaceId == type(IERC1155Receiver).interfaceId || + super.supportsInterface(interfaceId); + } + + /** + * @dev Returns whether an id correspond to a registered operation. This + * includes both Pending, Ready and Done operations. + */ + function isOperation( + bytes32 id + ) public view virtual returns (bool registered) { + return getTimestamp(id) > 0; + } + + /** + * @dev Returns whether an operation is pending or not. + */ + function isOperationPending( + bytes32 id + ) public view virtual returns (bool pending) { + return getTimestamp(id) > _DONE_TIMESTAMP; + } + + /** + * @dev Returns whether an operation is ready or not. + */ + function isOperationReady( + bytes32 id + ) public view virtual returns (bool ready) { + uint256 timestamp = getTimestamp(id); + return timestamp > _DONE_TIMESTAMP && timestamp <= block.timestamp; + } + + /** + * @dev Returns whether an operation is done or not. + */ + function isOperationDone( + bytes32 id + ) public view virtual returns (bool done) { + return getTimestamp(id) == _DONE_TIMESTAMP; + } + + /** + * @dev Returns the timestamp at with an operation becomes ready (0 for + * unset operations, 1 for done operations). + */ + function getTimestamp( + bytes32 id + ) public view virtual returns (uint256 timestamp) { + return _timestamps[id]; + } + + /** + * @dev Returns the minimum delay for an operation to become valid. + * + * This value can be changed by executing an operation that calls `updateDelay`. + */ + function getMinDelay() public view virtual returns (uint256 duration) { + return _minDelay; + } + + /** + * @dev Returns the identifier of an operation containing a single + * transaction. + */ + function hashOperation( + address target, + uint256 value, + bytes calldata data, + bytes32 predecessor, + bytes32 salt + ) public pure virtual returns (bytes32 hash) { + return keccak256(abi.encode(target, value, data, predecessor, salt)); + } + + /** + * @dev Returns the identifier of an operation containing a batch of + * transactions. + */ + function hashOperationBatch( + address[] calldata targets, + uint256[] calldata values, + bytes[] calldata payloads, + bytes32 predecessor, + bytes32 salt + ) public pure virtual returns (bytes32 hash) { + return + keccak256(abi.encode(targets, values, payloads, predecessor, salt)); + } + + /** + * @dev Schedule an operation containing a single transaction. + * + * Emits a {CallScheduled} event. + * + * Requirements: + * + * - the caller must have the 'proposer' role. + */ + function schedule( + address target, + uint256 value, + bytes calldata data, + bytes32 predecessor, + bytes32 salt, + uint256 delay + ) public virtual onlyRole(PROPOSER_ROLE) { + bytes32 id = hashOperation(target, value, data, predecessor, salt); + _schedule(id, delay); + emit CallScheduled(id, 0, target, value, data, predecessor, delay); + } + + /** + * @dev Schedule an operation containing a batch of transactions. + * + * Emits one {CallScheduled} event per transaction in the batch. + * + * Requirements: + * + * - the caller must have the 'proposer' role. + */ + function scheduleBatch( + address[] calldata targets, + uint256[] calldata values, + bytes[] calldata payloads, + bytes32 predecessor, + bytes32 salt, + uint256 delay + ) public virtual onlyRole(PROPOSER_ROLE) { + require( + targets.length == values.length, + "TimelockController: length mismatch" + ); + require( + targets.length == payloads.length, + "TimelockController: length mismatch" + ); + + bytes32 id = hashOperationBatch( + targets, + values, + payloads, + predecessor, + salt + ); + _schedule(id, delay); + for (uint256 i = 0; i < targets.length; ++i) { + emit CallScheduled( + id, + i, + targets[i], + values[i], + payloads[i], + predecessor, + delay + ); + } + } + + /** + * @dev Schedule an operation that is to becomes valid after a given delay. + */ + function _schedule(bytes32 id, uint256 delay) private { + require( + !isOperation(id), + "TimelockController: operation already scheduled" + ); + require( + delay >= getMinDelay(), + "TimelockController: insufficient delay" + ); + _timestamps[id] = block.timestamp + delay; + } + + /** + * @dev Cancel an operation. + * + * Requirements: + * + * - the caller must have the 'canceller' role. + */ + function cancel(bytes32 id) public virtual onlyRole(CANCELLER_ROLE) { + require( + isOperationPending(id), + "TimelockController: operation cannot be cancelled" + ); + delete _timestamps[id]; + + emit Cancelled(id); + } + + /** + * @dev Execute an (ready) operation containing a single transaction. + * + * Emits a {CallExecuted} event. + * + * Requirements: + * + * - the caller must have the 'executor' role. + */ + // This function can reenter, but it doesn't pose a risk because _afterCall checks that the proposal is pending, + // thus any modifications to the operation during reentrancy should be caught. + // slither-disable-next-line reentrancy-eth + function execute( + address target, + uint256 value, + bytes calldata payload, + bytes32 predecessor, + bytes32 salt + ) public payable virtual onlyRoleOrOpenRole(EXECUTOR_ROLE) { + bytes32 id = hashOperation(target, value, payload, predecessor, salt); + + _beforeCall(id, predecessor); + _execute(target, value, payload); + emit CallExecuted(id, 0, target, value, payload); + _afterCall(id); + } + + /** + * @dev Execute an (ready) operation containing a batch of transactions. + * + * Emits one {CallExecuted} event per transaction in the batch. + * + * Requirements: + * + * - the caller must have the 'executor' role. + */ + function executeBatch( + address[] calldata targets, + uint256[] calldata values, + bytes[] calldata payloads, + bytes32 predecessor, + bytes32 salt + ) public payable virtual onlyRoleOrOpenRole(EXECUTOR_ROLE) { + require( + targets.length == values.length, + "TimelockController: length mismatch" + ); + require( + targets.length == payloads.length, + "TimelockController: length mismatch" + ); + + bytes32 id = hashOperationBatch( + targets, + values, + payloads, + predecessor, + salt + ); + + _beforeCall(id, predecessor); + for (uint256 i = 0; i < targets.length; ++i) { + address target = targets[i]; + uint256 value = values[i]; + bytes calldata payload = payloads[i]; + _execute(target, value, payload); + emit CallExecuted(id, i, target, value, payload); + } + _afterCall(id); + } + + /** + * @dev Execute an operation's call. + */ + function _execute( + address target, + uint256 value, + bytes calldata data + ) internal virtual { + (bool success, ) = target.call{value: value}(data); + require(success, "TimelockController: underlying transaction reverted"); + } + + /** + * @dev Checks before execution of an operation's calls. + */ + function _beforeCall(bytes32 id, bytes32 predecessor) private view { + require( + isOperationReady(id), + "TimelockController: operation is not ready" + ); + require( + predecessor == bytes32(0) || isOperationDone(predecessor), + "TimelockController: missing dependency" + ); + } + + /** + * @dev Checks after execution of an operation's calls. + */ + function _afterCall(bytes32 id) private { + require( + isOperationReady(id), + "TimelockController: operation is not ready" + ); + _timestamps[id] = _DONE_TIMESTAMP; + } + + /** + * @dev Changes the minimum timelock duration for future operations. + * + * Emits a {MinDelayChange} event. + * + * Requirements: + * + * - the caller must be the timelock itself. This can only be achieved by scheduling and later executing + * an operation where the timelock is the target and the data is the ABI-encoded call to this function. + */ + function updateDelay(uint256 newDelay) external virtual { + require( + msg.sender == address(this), + "TimelockController: caller must be timelock" + ); + emit MinDelayChange(_minDelay, newDelay); + _minDelay = newDelay; + } + + /** + * @dev See {IERC721Receiver-onERC721Received}. + */ + function onERC721Received( + address, + address, + uint256, + bytes memory + ) public virtual override returns (bytes4) { + return this.onERC721Received.selector; + } + + /** + * @dev See {IERC1155Receiver-onERC1155Received}. + */ + function onERC1155Received( + address, + address, + uint256, + uint256, + bytes memory + ) public virtual override returns (bytes4) { + return this.onERC1155Received.selector; + } + + /** + * @dev See {IERC1155Receiver-onERC1155BatchReceived}. + */ + function onERC1155BatchReceived( + address, + address, + uint256[] memory, + uint256[] memory, + bytes memory + ) public virtual override returns (bytes4) { + return this.onERC1155BatchReceived.selector; + } +} diff --git a/test/contracts/bridge.test.js b/test/contracts/bridge.test.js index c663cc3e4..58fa71f23 100644 --- a/test/contracts/bridge.test.js +++ b/test/contracts/bridge.test.js @@ -279,6 +279,8 @@ describe('Bridge Contract', () => { .to.emit(tokenContract, 'Transfer') .withArgs(deployer.address, bridgeContract.address, amount); + expect(false).to.be.equal(await bridgeContract.isClaimed(index)); + await expect(bridgeContract.claimAsset( proof, index, @@ -314,6 +316,7 @@ describe('Bridge Contract', () => { amount, metadata, )).to.be.revertedWith('Bridge::_verifyLeaf: ALREADY_CLAIMED'); + expect(true).to.be.equal(await bridgeContract.isClaimed(index)); }); it('should claim tokens from Rollup to Mainnet', async () => { From 78ba1aa4d3e1d98b0b11c47f9585df90234af31f Mon Sep 17 00:00:00 2001 From: invocamanman Date: Wed, 7 Dec 2022 13:59:05 +0100 Subject: [PATCH 30/71] ongoing work --- compiled-contracts/Bridge.json | 320 +------------ compiled-contracts/BridgeMock.json | 282 +---------- compiled-contracts/ERC20PermitMock.json | 13 - compiled-contracts/GlobalExitRootManager.json | 19 + .../GlobalExitRootManagerMock.json | 30 +- compiled-contracts/ProofOfEfficiency.json | 347 ++------------ compiled-contracts/ProofOfEfficiencyMock.json | 436 +++++++----------- compiled-contracts/TokenWrapped.json | 191 ++------ .../VerifierRollupHelperMock.json | 4 +- contracts/ProofOfEfficiency.sol | 405 +++++++++++----- 10 files changed, 615 insertions(+), 1432 deletions(-) diff --git a/compiled-contracts/Bridge.json b/compiled-contracts/Bridge.json index 13999ffbb..1889a59d2 100644 --- a/compiled-contracts/Bridge.json +++ b/compiled-contracts/Bridge.json @@ -6,12 +6,6 @@ { "anonymous": false, "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "leafType", - "type": "uint8" - }, { "indexed": false, "internalType": "uint32", @@ -21,7 +15,7 @@ { "indexed": false, "internalType": "address", - "name": "originAddress", + "name": "originTokenAddress", "type": "address" }, { @@ -76,7 +70,7 @@ { "indexed": false, "internalType": "address", - "name": "originAddress", + "name": "originTokenAddress", "type": "address" }, { @@ -95,18 +89,6 @@ "name": "ClaimEvent", "type": "event" }, - { - "anonymous": false, - "inputs": [], - "name": "EmergencyStateActivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "EmergencyStateDeactivated", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -145,64 +127,6 @@ "name": "NewWrappedToken", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newClaimTimeout", - "type": "uint256" - } - ], - "name": "SetClaimTimeout", - "type": "event" - }, - { - "inputs": [], - "name": "LEAF_TYPE_ASSET", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LEAF_TYPE_MESSAGE", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "MAINNET_NETWORK_ID", @@ -216,13 +140,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "activateEmergencyState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -251,30 +168,7 @@ "type": "bytes" } ], - "name": "bridgeAsset", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "destinationNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "destinationAddress", - "type": "address" - }, - { - "internalType": "bytes", - "name": "metadata", - "type": "bytes" - } - ], - "name": "bridgeMessage", + "name": "bridge", "outputs": [], "stateMutability": "payable", "type": "function" @@ -332,82 +226,11 @@ "type": "bytes" } ], - "name": "claimAsset", + "name": "claim", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "smtProof", - "type": "bytes32[]" - }, - { - "internalType": "uint32", - "name": "index", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "mainnetExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "rollupExitRoot", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "originAddress", - "type": "address" - }, - { - "internalType": "uint32", - "name": "destinationNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "destinationAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "metadata", - "type": "bytes" - } - ], - "name": "claimMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "claimTimeout", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -416,24 +239,17 @@ "type": "uint256" } ], - "name": "claimedBitMap", + "name": "claimNullifier", "outputs": [ { - "internalType": "uint256", + "internalType": "bool", "name": "", - "type": "uint256" + "type": "bool" } ], "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "deactivateEmergencyState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [], "name": "depositCount", @@ -462,11 +278,6 @@ }, { "inputs": [ - { - "internalType": "uint8", - "name": "leafType", - "type": "uint8" - }, { "internalType": "uint32", "name": "originNetwork", @@ -474,7 +285,7 @@ }, { "internalType": "address", - "name": "originAddress", + "name": "originTokenAddress", "type": "address" }, { @@ -557,16 +368,6 @@ "internalType": "contract IGlobalExitRootManager", "name": "_globalExitRootManager", "type": "address" - }, - { - "internalType": "address", - "name": "_poeAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_claimTimeout", - "type": "uint256" } ], "name": "initialize", @@ -574,38 +375,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "isClaimed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "isEmergencyState", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "networkID", @@ -619,32 +388,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "poeAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -656,21 +399,6 @@ "internalType": "address", "name": "originTokenAddress", "type": "address" - }, - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - }, - { - "internalType": "uint8", - "name": "decimals", - "type": "uint8" } ], "name": "precalculatedWrapperAddress", @@ -686,22 +414,15 @@ }, { "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ + "name": "tokenImplementation", + "outputs": [ { - "internalType": "uint256", - "name": "newClaimTimeout", - "type": "uint256" + "internalType": "address", + "name": "", + "type": "address" } ], - "name": "setClaimTimeout", - "outputs": [], - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function" }, { @@ -723,19 +444,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { diff --git a/compiled-contracts/BridgeMock.json b/compiled-contracts/BridgeMock.json index fac1bcb3b..0e54b64d9 100644 --- a/compiled-contracts/BridgeMock.json +++ b/compiled-contracts/BridgeMock.json @@ -6,12 +6,6 @@ { "anonymous": false, "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "leafType", - "type": "uint8" - }, { "indexed": false, "internalType": "uint32", @@ -21,7 +15,7 @@ { "indexed": false, "internalType": "address", - "name": "originAddress", + "name": "originTokenAddress", "type": "address" }, { @@ -76,7 +70,7 @@ { "indexed": false, "internalType": "address", - "name": "originAddress", + "name": "originTokenAddress", "type": "address" }, { @@ -95,18 +89,6 @@ "name": "ClaimEvent", "type": "event" }, - { - "anonymous": false, - "inputs": [], - "name": "EmergencyStateActivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "EmergencyStateDeactivated", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -164,45 +146,6 @@ "name": "OwnershipTransferred", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newClaimTimeout", - "type": "uint256" - } - ], - "name": "SetClaimTimeout", - "type": "event" - }, - { - "inputs": [], - "name": "LEAF_TYPE_ASSET", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LEAF_TYPE_MESSAGE", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "MAINNET_NETWORK_ID", @@ -216,13 +159,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "activateEmergencyState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -251,30 +187,7 @@ "type": "bytes" } ], - "name": "bridgeAsset", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "destinationNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "destinationAddress", - "type": "address" - }, - { - "internalType": "bytes", - "name": "metadata", - "type": "bytes" - } - ], - "name": "bridgeMessage", + "name": "bridge", "outputs": [], "stateMutability": "payable", "type": "function" @@ -332,82 +245,11 @@ "type": "bytes" } ], - "name": "claimAsset", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "smtProof", - "type": "bytes32[]" - }, - { - "internalType": "uint32", - "name": "index", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "mainnetExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "rollupExitRoot", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "originAddress", - "type": "address" - }, - { - "internalType": "uint32", - "name": "destinationNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "destinationAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "metadata", - "type": "bytes" - } - ], - "name": "claimMessage", + "name": "claim", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [], - "name": "claimTimeout", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -416,24 +258,17 @@ "type": "uint256" } ], - "name": "claimedBitMap", + "name": "claimNullifier", "outputs": [ { - "internalType": "uint256", + "internalType": "bool", "name": "", - "type": "uint256" + "type": "bool" } ], "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "deactivateEmergencyState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [], "name": "depositCount", @@ -462,11 +297,6 @@ }, { "inputs": [ - { - "internalType": "uint8", - "name": "leafType", - "type": "uint8" - }, { "internalType": "uint32", "name": "originNetwork", @@ -474,7 +304,7 @@ }, { "internalType": "address", - "name": "originAddress", + "name": "originTokenAddress", "type": "address" }, { @@ -557,16 +387,6 @@ "internalType": "contract IGlobalExitRootManager", "name": "_globalExitRootManager", "type": "address" - }, - { - "internalType": "address", - "name": "_poeAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_claimTimeout", - "type": "uint256" } ], "name": "initialize", @@ -574,38 +394,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "isClaimed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "isEmergencyState", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "maxEtherBridge", @@ -645,19 +433,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "poeAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -669,21 +444,6 @@ "internalType": "address", "name": "originTokenAddress", "type": "address" - }, - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - }, - { - "internalType": "uint8", - "name": "decimals", - "type": "uint8" } ], "name": "precalculatedWrapperAddress", @@ -704,19 +464,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newClaimTimeout", - "type": "uint256" - } - ], - "name": "setClaimTimeout", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -743,6 +490,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "tokenImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { diff --git a/compiled-contracts/ERC20PermitMock.json b/compiled-contracts/ERC20PermitMock.json index 9514a4230..e7f2abf47 100644 --- a/compiled-contracts/ERC20PermitMock.json +++ b/compiled-contracts/ERC20PermitMock.json @@ -79,19 +79,6 @@ "name": "Transfer", "type": "event" }, - { - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "EIP712DOMAIN_HASH", diff --git a/compiled-contracts/GlobalExitRootManager.json b/compiled-contracts/GlobalExitRootManager.json index 4338fecb3..d3ffb3d75 100644 --- a/compiled-contracts/GlobalExitRootManager.json +++ b/compiled-contracts/GlobalExitRootManager.json @@ -19,6 +19,12 @@ { "anonymous": false, "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "globalExitRootNum", + "type": "uint256" + }, { "indexed": true, "internalType": "bytes32", @@ -98,6 +104,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "lastGlobalExitRootNum", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "lastMainnetExitRoot", diff --git a/compiled-contracts/GlobalExitRootManagerMock.json b/compiled-contracts/GlobalExitRootManagerMock.json index d98c0632c..ee92fdfcb 100644 --- a/compiled-contracts/GlobalExitRootManagerMock.json +++ b/compiled-contracts/GlobalExitRootManagerMock.json @@ -35,6 +35,12 @@ { "anonymous": false, "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "globalExitRootNum", + "type": "uint256" + }, { "indexed": true, "internalType": "bytes32", @@ -114,6 +120,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "lastGlobalExitRootNum", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "lastMainnetExitRoot", @@ -159,14 +178,9 @@ "internalType": "bytes32", "name": "globalExitRoot", "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" } ], - "name": "setGlobalExitRoot", + "name": "setLastGlobalExitRoot", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -175,11 +189,11 @@ "inputs": [ { "internalType": "uint256", - "name": "timestamp", + "name": "_lastGlobalExitRootNum", "type": "uint256" } ], - "name": "setLastGlobalExitRoot", + "name": "setLastGlobalExitRootNum", "outputs": [], "stateMutability": "nonpayable", "type": "function" diff --git a/compiled-contracts/ProofOfEfficiency.json b/compiled-contracts/ProofOfEfficiency.json index 72951f9d6..8e93b202f 100644 --- a/compiled-contracts/ProofOfEfficiency.json +++ b/compiled-contracts/ProofOfEfficiency.json @@ -3,18 +3,6 @@ "contractName": "ProofOfEfficiency", "sourceName": "contracts/ProofOfEfficiency.sol", "abi": [ - { - "anonymous": false, - "inputs": [], - "name": "EmergencyStateActivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "EmergencyStateDeactivated", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -59,44 +47,6 @@ "name": "Initialized", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "storedStateRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "provedStateRoot", - "type": "bytes32" - } - ], - "name": "ProveNonDeterministicState", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -136,19 +86,6 @@ "name": "SetForceBatchAllowed", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "newSecurityCouncil", - "type": "address" - } - ], - "name": "SetSecurityCouncil", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -184,12 +121,6 @@ "name": "numBatch", "type": "uint64" }, - { - "indexed": false, - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - }, { "indexed": true, "internalType": "address", @@ -197,7 +128,7 @@ "type": "address" } ], - "name": "VerifyBatches", + "name": "VerifyBatch", "type": "event" }, { @@ -241,38 +172,12 @@ }, { "inputs": [], - "name": "activateEmergencyState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "name": "batchNumToStateRoot", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "bridgeAddress", + "name": "calculateForceProverFee", "outputs": [ { - "internalType": "contract IBridge", + "internalType": "uint256", "name": "", - "type": "address" + "type": "uint256" } ], "stateMutability": "view", @@ -280,12 +185,12 @@ }, { "inputs": [], - "name": "calculateForceProverFee", + "name": "chainID", "outputs": [ { - "internalType": "uint256", + "internalType": "uint64", "name": "", - "type": "uint256" + "type": "uint64" } ], "stateMutability": "view", @@ -293,12 +198,12 @@ }, { "inputs": [], - "name": "calculateRewardPerBatch", + "name": "currentLocalExitRoot", "outputs": [ { - "internalType": "uint256", + "internalType": "bytes32", "name": "", - "type": "uint256" + "type": "bytes32" } ], "stateMutability": "view", @@ -306,24 +211,17 @@ }, { "inputs": [], - "name": "chainID", + "name": "currentStateRoot", "outputs": [ { - "internalType": "uint64", + "internalType": "bytes32", "name": "", - "type": "uint64" + "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "deactivateEmergencyState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -367,42 +265,18 @@ "outputs": [ { "internalType": "bytes32", - "name": "", + "name": "batchHashData", "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ + }, { - "internalType": "uint64", - "name": "initNumBatch", - "type": "uint64" + "internalType": "uint256", + "name": "maticFee", + "type": "uint256" }, { "internalType": "uint64", - "name": "finalNewBatch", + "name": "minTimestamp", "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "newLocalExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "newStateRoot", - "type": "bytes32" - } - ], - "name": "getInputSnarkBytes", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" } ], "stateMutability": "view", @@ -467,16 +341,6 @@ "internalType": "string", "name": "_networkName", "type": "string" - }, - { - "internalType": "contract IBridge", - "name": "_bridgeAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "_securityCouncil", - "type": "address" } ], "name": "initialize", @@ -484,19 +348,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [], - "name": "isEmergencyState", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "lastBatchSequenced", @@ -588,69 +439,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "initNumBatch", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "finalNewBatch", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "newLocalExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "newStateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256[2]", - "name": "proofA", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2][2]", - "name": "proofB", - "type": "uint256[2][2]" - }, - { - "internalType": "uint256[2]", - "name": "proofC", - "type": "uint256[2]" - } - ], - "name": "proveNonDeterministicState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [], "name": "rollupVerifier", @@ -664,19 +452,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "securityCouncil", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -697,9 +472,9 @@ "type": "uint64" }, { - "internalType": "uint64", - "name": "minForcedTimestamp", - "type": "uint64" + "internalType": "uint64[]", + "name": "forceBatchesTimestamp", + "type": "uint64[]" } ], "internalType": "struct ProofOfEfficiency.BatchData[]", @@ -715,26 +490,9 @@ { "inputs": [ { - "components": [ - { - "internalType": "bytes", - "name": "transactions", - "type": "bytes" - }, - { - "internalType": "bytes32", - "name": "globalExitRoot", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "minForcedTimestamp", - "type": "uint64" - } - ], - "internalType": "struct ProofOfEfficiency.ForceBatchData[]", - "name": "batches", - "type": "tuple[]" + "internalType": "uint64", + "name": "numForcedBatches", + "type": "uint64" } ], "name": "sequenceForceBatches", @@ -754,8 +512,18 @@ "outputs": [ { "internalType": "bytes32", - "name": "", + "name": "batchHashData", "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "forceBatchNum", + "type": "uint64" } ], "stateMutability": "view", @@ -774,19 +542,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "internalType": "address", - "name": "newSecurityCouncil", - "type": "address" - } - ], - "name": "setSecurityCouncil", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -813,19 +568,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [], "name": "trustedSequencer", @@ -854,16 +596,6 @@ }, { "inputs": [ - { - "internalType": "uint64", - "name": "initNumBatch", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "finalNewBatch", - "type": "uint64" - }, { "internalType": "bytes32", "name": "newLocalExitRoot", @@ -874,6 +606,11 @@ "name": "newStateRoot", "type": "bytes32" }, + { + "internalType": "uint64", + "name": "numBatch", + "type": "uint64" + }, { "internalType": "uint256[2]", "name": "proofA", @@ -890,7 +627,7 @@ "type": "uint256[2]" } ], - "name": "verifyBatches", + "name": "verifyBatch", "outputs": [], "stateMutability": "nonpayable", "type": "function" diff --git a/compiled-contracts/ProofOfEfficiencyMock.json b/compiled-contracts/ProofOfEfficiencyMock.json index 20dc12972..c97c8400f 100644 --- a/compiled-contracts/ProofOfEfficiencyMock.json +++ b/compiled-contracts/ProofOfEfficiencyMock.json @@ -3,18 +3,6 @@ "contractName": "ProofOfEfficiencyMock", "sourceName": "contracts/mocks/ProofOfEfficiencyMock.sol", "abi": [ - { - "anonymous": false, - "inputs": [], - "name": "EmergencyStateActivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "EmergencyStateDeactivated", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -78,25 +66,6 @@ "name": "OwnershipTransferred", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "storedStateRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "provedStateRoot", - "type": "bytes32" - } - ], - "name": "ProveNonDeterministicState", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -136,19 +105,6 @@ "name": "SetForceBatchAllowed", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "newSecurityCouncil", - "type": "address" - } - ], - "name": "SetSecurityCouncil", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -184,12 +140,6 @@ "name": "numBatch", "type": "uint64" }, - { - "indexed": false, - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - }, { "indexed": true, "internalType": "address", @@ -197,7 +147,7 @@ "type": "address" } ], - "name": "VerifyBatches", + "name": "VerifyBatch", "type": "event" }, { @@ -241,72 +191,120 @@ }, { "inputs": [], - "name": "activateEmergencyState", - "outputs": [], - "stateMutability": "nonpayable", + "name": "calculateForceProverFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", "type": "function" }, { "inputs": [ { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "name": "batchNumToStateRoot", - "outputs": [ + "internalType": "bytes32", + "name": "currentStateRoot", + "type": "bytes32" + }, { "internalType": "bytes32", - "name": "", + "name": "currentLocalExitRoot", "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "newStateRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "newLocalExitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "batchHashData", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "numBatch", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "chainID", + "type": "uint64" + }, + { + "internalType": "address", + "name": "aggregatorAddress", + "type": "address" } ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "bridgeAddress", + "name": "calculateSnarkInput", "outputs": [ { - "internalType": "contract IBridge", + "internalType": "uint256", "name": "", - "type": "address" + "type": "uint256" } ], - "stateMutability": "view", + "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "bytes32", - "name": "currentAccInputHash", + "name": "currentStateRoot", "type": "bytes32" }, { - "internalType": "bytes", - "name": "transactions", - "type": "bytes" + "internalType": "bytes32", + "name": "currentLocalExitRoot", + "type": "bytes32" }, { "internalType": "bytes32", - "name": "globalExitRoot", + "name": "newStateRoot", "type": "bytes32" }, + { + "internalType": "bytes32", + "name": "newLocalExitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "batchHashData", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "numBatch", + "type": "uint64" + }, { "internalType": "uint64", "name": "timestamp", "type": "uint64" }, { - "internalType": "address", - "name": "sequencerAddress", - "type": "address" + "internalType": "uint64", + "name": "chainID", + "type": "uint64" } ], - "name": "calculateAccInputHash", + "name": "calculateStarkInput", "outputs": [ { "internalType": "bytes32", @@ -319,12 +317,12 @@ }, { "inputs": [], - "name": "calculateForceProverFee", + "name": "chainID", "outputs": [ { - "internalType": "uint256", + "internalType": "uint64", "name": "", - "type": "uint256" + "type": "uint64" } ], "stateMutability": "view", @@ -332,12 +330,12 @@ }, { "inputs": [], - "name": "calculateRewardPerBatch", + "name": "currentLocalExitRoot", "outputs": [ { - "internalType": "uint256", + "internalType": "bytes32", "name": "", - "type": "uint256" + "type": "bytes32" } ], "stateMutability": "view", @@ -345,24 +343,17 @@ }, { "inputs": [], - "name": "chainID", + "name": "currentStateRoot", "outputs": [ { - "internalType": "uint64", + "internalType": "bytes32", "name": "", - "type": "uint64" + "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "deactivateEmergencyState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -406,42 +397,18 @@ "outputs": [ { "internalType": "bytes32", - "name": "", + "name": "batchHashData", "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ + }, { - "internalType": "uint64", - "name": "initNumBatch", - "type": "uint64" + "internalType": "uint256", + "name": "maticFee", + "type": "uint256" }, { "internalType": "uint64", - "name": "finalNewBatch", + "name": "minTimestamp", "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "newLocalExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "newStateRoot", - "type": "bytes32" - } - ], - "name": "getInputSnarkBytes", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" } ], "stateMutability": "view", @@ -449,16 +416,6 @@ }, { "inputs": [ - { - "internalType": "uint64", - "name": "_lastVerifiedBatch", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "newVerifiedBatch", - "type": "uint64" - }, { "internalType": "bytes32", "name": "newLocalExitRoot", @@ -468,6 +425,11 @@ "internalType": "bytes32", "name": "newStateRoot", "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "numBatch", + "type": "uint64" } ], "name": "getNextSnarkInput", @@ -540,16 +502,6 @@ "internalType": "string", "name": "_networkName", "type": "string" - }, - { - "internalType": "contract IBridge", - "name": "_bridgeAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "_securityCouncil", - "type": "address" } ], "name": "initialize", @@ -557,19 +509,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [], - "name": "isEmergencyState", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "lastBatchSequenced", @@ -674,18 +613,15 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ - { - "internalType": "uint64", - "name": "initNumBatch", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "finalNewBatch", - "type": "uint64" - }, { "internalType": "bytes32", "name": "newLocalExitRoot", @@ -697,41 +633,17 @@ "type": "bytes32" }, { - "internalType": "uint256[2]", - "name": "proofA", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2][2]", - "name": "proofB", - "type": "uint256[2][2]" - }, - { - "internalType": "uint256[2]", - "name": "proofC", - "type": "uint256[2]" + "internalType": "uint32", + "name": "numBatch", + "type": "uint32" } ], - "name": "proveNonDeterministicState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "rollupVerifier", + "name": "returnInputHashParameters", "outputs": [ { - "internalType": "contract IVerifierRollup", + "internalType": "bytes", "name": "", - "type": "address" + "type": "bytes" } ], "stateMutability": "view", @@ -739,10 +651,10 @@ }, { "inputs": [], - "name": "securityCouncil", + "name": "rollupVerifier", "outputs": [ { - "internalType": "address", + "internalType": "contract IVerifierRollup", "name": "", "type": "address" } @@ -770,9 +682,9 @@ "type": "uint64" }, { - "internalType": "uint64", - "name": "minForcedTimestamp", - "type": "uint64" + "internalType": "uint64[]", + "name": "forceBatchesTimestamp", + "type": "uint64[]" } ], "internalType": "struct ProofOfEfficiency.BatchData[]", @@ -788,26 +700,9 @@ { "inputs": [ { - "components": [ - { - "internalType": "bytes", - "name": "transactions", - "type": "bytes" - }, - { - "internalType": "bytes32", - "name": "globalExitRoot", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "minForcedTimestamp", - "type": "uint64" - } - ], - "internalType": "struct ProofOfEfficiency.ForceBatchData[]", - "name": "batches", - "type": "tuple[]" + "internalType": "uint64", + "name": "numForcedBatches", + "type": "uint64" } ], "name": "sequenceForceBatches", @@ -827,8 +722,18 @@ "outputs": [ { "internalType": "bytes32", - "name": "", + "name": "batchHashData", "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "forceBatchNum", + "type": "uint64" } ], "stateMutability": "view", @@ -837,12 +742,12 @@ { "inputs": [ { - "internalType": "bool", - "name": "newForceBatchAllowed", - "type": "bool" + "internalType": "bytes32", + "name": "newLocalExitRoot", + "type": "bytes32" } ], - "name": "setForceBatchAllowed", + "name": "setExitRoot", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -850,12 +755,12 @@ { "inputs": [ { - "internalType": "string", - "name": "_networkName", - "type": "string" + "internalType": "bool", + "name": "newForceBatchAllowed", + "type": "bool" } ], - "name": "setNetworkName", + "name": "setForceBatchAllowed", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -863,12 +768,12 @@ { "inputs": [ { - "internalType": "address", - "name": "newSecurityCouncil", - "type": "address" + "internalType": "string", + "name": "_networkName", + "type": "string" } ], - "name": "setSecurityCouncil", + "name": "setNetworkName", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -886,35 +791,12 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "batchNum", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "accInputData", - "type": "bytes32" - } - ], - "name": "setSequencedBatches", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { "internalType": "bytes32", "name": "newStateRoot", "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "batchNum", - "type": "uint64" } ], "name": "setStateRoot", @@ -1015,16 +897,6 @@ }, { "inputs": [ - { - "internalType": "uint64", - "name": "initNumBatch", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "finalNewBatch", - "type": "uint64" - }, { "internalType": "bytes32", "name": "newLocalExitRoot", @@ -1035,6 +907,11 @@ "name": "newStateRoot", "type": "bytes32" }, + { + "internalType": "uint64", + "name": "numBatch", + "type": "uint64" + }, { "internalType": "uint256[2]", "name": "proofA", @@ -1051,23 +928,13 @@ "type": "uint256[2]" } ], - "name": "verifyBatches", + "name": "verifyBatch", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ - { - "internalType": "uint64", - "name": "_lastVerifiedBatch", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "newVerifiedBatch", - "type": "uint64" - }, { "internalType": "bytes32", "name": "newLocalExitRoot", @@ -1078,6 +945,11 @@ "name": "newStateRoot", "type": "bytes32" }, + { + "internalType": "uint64", + "name": "numBatch", + "type": "uint64" + }, { "internalType": "uint256[2]", "name": "proofA", @@ -1094,7 +966,7 @@ "type": "uint256[2]" } ], - "name": "verifyBatchesMock", + "name": "verifyBatchMock", "outputs": [], "stateMutability": "nonpayable", "type": "function" diff --git a/compiled-contracts/TokenWrapped.json b/compiled-contracts/TokenWrapped.json index 58a72fb15..abf289df7 100644 --- a/compiled-contracts/TokenWrapped.json +++ b/compiled-contracts/TokenWrapped.json @@ -4,23 +4,7 @@ "sourceName": "contracts/lib/TokenWrapped.sol", "abi": [ { - "inputs": [ - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - }, - { - "internalType": "uint8", - "name": "decimals", - "type": "uint8" - } - ], + "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, @@ -49,6 +33,19 @@ "name": "Approval", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -74,58 +71,6 @@ "name": "Transfer", "type": "event" }, - { - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN_TYPEHASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PERMIT_TYPEHASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "VERSION", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -267,19 +212,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [], - "name": "deploymentChainId", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -304,6 +236,39 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "uint8", + "name": "decimals", + "type": "uint8" + }, + { + "internalType": "address", + "name": "initialAccount", + "type": "address" + }, + { + "internalType": "uint256", + "name": "initialBalance", + "type": "uint256" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -341,68 +306,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [], "name": "symbol", diff --git a/compiled-contracts/VerifierRollupHelperMock.json b/compiled-contracts/VerifierRollupHelperMock.json index 8256410d1..e501efcf4 100644 --- a/compiled-contracts/VerifierRollupHelperMock.json +++ b/compiled-contracts/VerifierRollupHelperMock.json @@ -38,8 +38,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50610101806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c806343753b4d14602d575b600080fd5b60426038366004606c565b6001949350505050565b604051901515815260200160405180910390f35b8060408101831015606657600080fd5b92915050565b600080600080610120808688031215608357600080fd5b608b87876056565b945060c0860187811115609d57600080fd5b60408701945060ab88826056565b93505086818701111560bc57600080fd5b5092959194509261010001915056fea2646970667358221220b422763ff2e677768ee57d5c9acce68d8fa4f3d60928f25d40d779538621ee7764736f6c634300080f0033", - "deployedBytecode": "0x6080604052348015600f57600080fd5b506004361060285760003560e01c806343753b4d14602d575b600080fd5b60426038366004606c565b6001949350505050565b604051901515815260200160405180910390f35b8060408101831015606657600080fd5b92915050565b600080600080610120808688031215608357600080fd5b608b87876056565b945060c0860187811115609d57600080fd5b60408701945060ab88826056565b93505086818701111560bc57600080fd5b5092959194509261010001915056fea2646970667358221220b422763ff2e677768ee57d5c9acce68d8fa4f3d60928f25d40d779538621ee7764736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50610101806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c806343753b4d14602d575b600080fd5b60426038366004606c565b6001949350505050565b604051901515815260200160405180910390f35b8060408101831015606657600080fd5b92915050565b600080600080610120808688031215608357600080fd5b608b87876056565b945060c0860187811115609d57600080fd5b60408701945060ab88826056565b93505086818701111560bc57600080fd5b5092959194509261010001915056fea264697066735822122026e36e4a0d19f3b56feec1530c2ac9673aee17d3ddd1781db283eac72a2ab24d64736f6c634300080f0033", + "deployedBytecode": "0x6080604052348015600f57600080fd5b506004361060285760003560e01c806343753b4d14602d575b600080fd5b60426038366004606c565b6001949350505050565b604051901515815260200160405180910390f35b8060408101831015606657600080fd5b92915050565b600080600080610120808688031215608357600080fd5b608b87876056565b945060c0860187811115609d57600080fd5b60408701945060ab88826056565b93505086818701111560bc57600080fd5b5092959194509261010001915056fea264697066735822122026e36e4a0d19f3b56feec1530c2ac9673aee17d3ddd1781db283eac72a2ab24d64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/ProofOfEfficiency.sol b/contracts/ProofOfEfficiency.sol index 7c451f13f..aec86624b 100644 --- a/contracts/ProofOfEfficiency.sol +++ b/contracts/ProofOfEfficiency.sol @@ -31,7 +31,7 @@ contract ProofOfEfficiency is * EIP-155: rlp(nonce, gasprice, gasLimit, to, value, data, chainid, 0, 0,) || v || r || s * pre-EIP-155: rlp(nonce, gasprice, gasLimit, to, value, data) || v || r || s * @param globalExitRoot Global exit root of the batch - * @param timestamp Timestamp of the batch + * @param timestamp Sequenced timestamp of the batch * @param minForcedTimestamp Minimum timestamp of the force batch data, empty when non forced batch */ struct BatchData { @@ -47,14 +47,40 @@ contract ProofOfEfficiency is * EIP-155: rlp(nonce, gasprice, gasLimit, to, value, data, chainid, 0, 0,) || v || r || s * pre-EIP-155: rlp(nonce, gasprice, gasLimit, to, value, data) || v || r || s * @param globalExitRoot Global exit root of the batch - * @param minForcedTimestamp Minimum timestamp of the force batch data + * @param minForcedTimestamp Indicates the minimum sequenced timestamp of the batch */ - struct ForceBatchData { + struct ForcedBatchData { bytes transactions; bytes32 globalExitRoot; uint64 minForcedTimestamp; } + /** + * @notice Struct which will stored for every batch sequence + * @param accInputHash Hash chain that contains all the information to process a batch: + * keccak256(bytes32 oldAccInputHash, keccak256(bytes transactions), bytes32 globalExitRoot, uint64 timestamp, address seqAddress) + * @param sequencedTimestamp Sequenced timestamp + */ + struct SequencedBatchData { + bytes32 accInputHash; + uint64 sequencedTimestamp; + } + + /** + * @notice Struct which will be used to call sequenceForceBatches + * @param transactions L2 ethereum transactions EIP-155 or pre-EIP-155 with signature: + * EIP-155: rlp(nonce, gasprice, gasLimit, to, value, data, chainid, 0, 0,) || v || r || s + * pre-EIP-155: rlp(nonce, gasprice, gasLimit, to, value, data) || v || r || s + * @param globalExitRoot Global exit root of the batch + * @param minForcedTimestamp Indicates the minimum sequenced timestamp of the batch + */ + struct PendingState { + uint64 timestamp; + uint64 lastVerifiedBatch; + bytes32 exitRoot; + bytes32 stateRoot; + } + // Modulus zkSNARK uint256 internal constant _RFIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617; @@ -78,27 +104,24 @@ contract ProofOfEfficiency is // 8 Fields * 8 Bytes (Stark input in Field Array form) * 5 (hashes), + 8 bytes * 3 (oldNumBatch, newNumBatch, chainID) + 20 bytes (aggrAddress) uint256 internal constant _SNARK_SHA_BYTES = 364; - // Trusted aggregator timeout, if an aggregation don't happen inside this frame, - // the aggregation becomes open to anyone for OPEN_AGGREGATION_TIME - uint64 public constant TRUSTED_AGGREGATOR_TIMEOUT = 1 days; + // If the time that a batch remains sequenced exceeds this timeout, the contract enters in emergency mode + uint64 public constant HALT_AGGREGATION_TIMEOUT = 1 weeks; - // Time that the aggregation becomes open to anyone - uint64 public constant OPEN_AGGREGATION_TIME = 1 weeks; + // Maximum trusted aggregator timeout that can be set + uint64 public constant MAX_TRUSTED_AGGREGATOR_TIMEOUT = 1 weeks; // MATIC token address IERC20Upgradeable public matic; // Queue of forced batches with their associated data - // ForceBatchNum --> hashedForceBatchData - // hashedForceBatchData: hash containing the necessary information to force a batch: + // ForceBatchNum --> hashedForcedBatchData + // hashedForcedBatchData: hash containing the necessary information to force a batch: // keccak256(keccak256(bytes transactions), bytes32 globalExitRoot, unint64 minTimestamp) mapping(uint64 => bytes32) public forcedBatches; // Queue of batches that defines the virtual state - // SequenceBatchNum --> accInputHash - // accInputHash: hash chain that contains all the information to process a batch: - // keccak256(bytes32 oldAccInputHash, keccak256(bytes transactions), bytes32 globalExitRoot, uint64 timestamp, address seqAddress) - mapping(uint64 => bytes32) public sequencedBatches; + // SequenceBatchNum --> SequencedBatchData + mapping(uint64 => SequencedBatchData) public sequencedBatches; // Storage Slot // @@ -165,8 +188,22 @@ contract ProofOfEfficiency is // Bridge Address IBridge public bridgeAddress; - // Indicates whether the scape hatch is active or not - bool public scapeHatchActive; + // Pending state, once the pendingStateTimeout has passed, the pending state becomes consolidated + // pendingStateNumber --> PendingState + mapping(uint256 => PendingState) public pendingStateTransitions; + + // Last pending state + uint64 public lastPendingStateNum; + + // Pending state timeout + uint64 public pendingStateTimeout; + + // Pending state timeout + uint64 public currentPendingStateNum; + + // Trusted aggregator timeout, if a batch is not aggregated in this time frame, + // everyone can aggregate that batch + uint64 public trustedAggregatorTimeout; /** * @dev Emitted when the trusted sequencer sends a new batch of transactions @@ -217,10 +254,15 @@ contract ProofOfEfficiency is */ event SetSecurityCouncil(address newSecurityCouncil); + /** + * @dev Emitted when a trusted aggregator update the trusted aggregator timeout + */ + event SetTrustedAggregatorTimeout(uint64 newTrustedAggregatorTimeout); + /** * @dev Emitted when a trusted aggregator update or renounce his address */ - event SetTrustedAggreagator(address newTrustedAggreagator); + event SetTrustedAggregator(address newTrustedAggregator); /** * @dev Emitted when is proved a different state given the same batches @@ -255,7 +297,8 @@ contract ProofOfEfficiency is string memory _networkName, IBridge _bridgeAddress, address _securityCouncil, - address _trustedAggregator + address _trustedAggregator, + uint64 trustedAggregatorTimeout ) public initializer { globalExitRootManager = _globalExitRootManager; matic = _matic; @@ -270,6 +313,7 @@ contract ProofOfEfficiency is securityCouncil = _securityCouncil; trustedAggregator = _trustedAggregator; lastTrustedAggregationTime = uint64(block.timestamp); + trustedAggregatorTimeout = trustedAggregatorTimeout; // Initialize OZ contracts __Ownable_init_unchained(); @@ -291,6 +335,14 @@ contract ProofOfEfficiency is _; } + modifier onlyTrustedAgggregator() { + require( + trustedAggregator == msg.sender, + "ProofOfEfficiency::onlyTrustedAgggregator: only trusted Aggregator" + ); + _; + } + // Only for the current version modifier isForceBatchAllowed() { require( @@ -316,7 +368,8 @@ contract ProofOfEfficiency is uint64 currentTimestamp = lastTimestamp; uint64 currentBatchSequenced = lastBatchSequenced; uint64 currentLastForceBatchSequenced = lastForceBatchSequenced; - bytes32 currentAccInputHash = sequencedBatches[currentBatchSequenced]; + bytes32 currentAccInputHash = sequencedBatches[currentBatchSequenced] + .accInputHash; for (uint256 i = 0; i < batchesNum; i++) { // Load current sequence @@ -327,7 +380,7 @@ contract ProofOfEfficiency is currentLastForceBatchSequenced++; // Check forced data matches - bytes32 hashedForceBatchData = keccak256( + bytes32 hashedForcedBatchData = keccak256( abi.encodePacked( keccak256(currentBatch.transactions), currentBatch.globalExitRoot, @@ -336,7 +389,7 @@ contract ProofOfEfficiency is ); require( - hashedForceBatchData == + hashedForcedBatchData == forcedBatches[currentLastForceBatchSequenced], "ProofOfEfficiency::sequenceBatches: Forced batches data must match" ); @@ -401,7 +454,10 @@ contract ProofOfEfficiency is lastTimestamp = currentTimestamp; lastBatchSequenced = currentBatchSequenced; lastForceBatchSequenced = currentLastForceBatchSequenced; - sequencedBatches[currentBatchSequenced] = currentAccInputHash; + sequencedBatches[currentBatchSequenced] = SequencedBatchData({ + accInputHash: currentAccInputHash, + sequencedTimestamp: uint64(block.timestamp) + }); // Pay collateral for every batch submitted matic.safeTransferFrom( @@ -424,6 +480,7 @@ contract ProofOfEfficiency is * @param proofC zk-snark input */ function verifyBatches( + uint64 pendingStateNum, uint64 initNumBatch, uint64 finalNewBatch, bytes32 newLocalExitRoot, @@ -432,70 +489,185 @@ contract ProofOfEfficiency is uint256[2][2] calldata proofB, uint256[2] calldata proofC ) public ifNotEmergencyState { + if ( + trustedAggregator == address(0) || + msg.sender == trustedAggregator || + trustedAggregatorTimeout == 0 + ) { + _verifyAndConsolidateState( + pendingStateNum, + initNumBatch, + finalNewBatch, + newLocalExitRoot, + newStateRoot, + proofA, + proofB, + proofC + ); + } else { + SequencedBatchData storage oldSequencedBatchData = sequencedBatches[ + initNumBatch + ]; + SequencedBatchData storage newSequencedBatchData = sequencedBatches[ + finalNewBatch + ]; + + bytes32 oldStateRoot; + uint64 currentLastVerifiedBatch; + + // Use pending state if any, otherwise use consolidate state + if (pendingStateNum != 0) { + require( + pendingStateNum <= lastPendingStateNum, + "ProofOfEfficiency::verifyBatches: pendingStateNum must be less or equal than lastPendingStateNum" + ); + // Use pending state + PendingState storage lastPendingState = pendingStateTransitions[ + lastPendingStateNum + ]; + + currentLastVerifiedBatch = lastPendingState.lastVerifiedBatch; + oldStateRoot = lastPendingState.stateRoot; + } else { + // Use consolidated state + require( + batchNumToStateRoot[initNumBatch] != bytes32(0), + "ProofOfEfficiency::verifyBatches: initNumBatch state root does not exist" + ); - 5 dias timeout - check timeout sequeuenced batch, if omre thna 5 days, everyone can aggregate this - ahce mas de 7 dias que no se agrega ningun batch (contrato entra en halt) + currentLastVerifiedBatch = lastVerifiedBatch; + oldStateRoot = batchNumToStateRoot[initNumBatch]; + } -qiutar security council + // Assert init and final batch + require( + initNumBatch <= currentLastVerifiedBatch, + "ProofOfEfficiency::verifyBatches: initNumBatch must be less or equal than currentLastVerifiedBatch" + ); -si forja trustedAggregator --> no hay delay en el claim -otro aggregator -> hay delay + require( + finalNewBatch > currentLastVerifiedBatch, + "ProofOfEfficiency::verifyBatches: finalNewBatch must be bigger than currentLastVerifiedBatch" + ); + // Get snark bytes + bytes memory snarkHashBytes = getInputSnarkBytes( + initNumBatch, + finalNewBatch, + newLocalExitRoot, + oldStateRoot, + newStateRoot + ); + + // Calulate the snark input + uint256 inputSnark = uint256(sha256(snarkHashBytes)) % _RFIELD; + + // Verify proof + require( + rollupVerifier.verifyProof( + proofA, + proofB, + proofC, + [inputSnark] + ), + "ProofOfEfficiency::verifyBatches: INVALID_PROOF" + ); - logica: trusted manda - si hay trusted, manda trusted - si NO hay trsuteed, y hay uno y pasa tel tiemout vale ese ( SOLO en el timeout) // - si hay 2 no trusted, halt. ( prove non deterministic state) + // Get MATIC reward + matic.safeTransfer( + msg.sender, + calculateRewardPerBatch() * + (finalNewBatch - currentLastVerifiedBatch) + ); -trusted aggreagator renunciara en algun punto. + // Update state or pending state + if (msg.sender == trustedAggregator) { + // Update state + lastVerifiedBatch = finalNewBatch; + batchNumToStateRoot[finalNewBatch] = newStateRoot; + // Clean pending state + lastPendingStateNum = 0; + currentPendingStateNum = 0; - // Check acces control - // if trusted aggregator is address 0 everyone can aggregate - if (trustedAggregator != address(0)) { - // if there's a trusted aggregator, and it's the sender update the trusted aggregator time - if (trustedAggregator == msg.sender) { - lastTrustedAggregationTime = uint64(block.timestamp); + // Interact with globalExitRoot + globalExitRootManager.updateExitRoot(newLocalExitRoot); } else { - // Check if we are on free aggregation period, if we are, anyone is free to aggregate - if (openAggregationUntil < block.timestamp) { - // Check if the openAggregationUntil must be updated - // Take the bigger timestamp from the last trusted aggregation and the last expired open aggregation period - uint256 lastTimeToCompare = openAggregationUntil > - lastTrustedAggregationTime - ? openAggregationUntil - : lastTrustedAggregationTime; - - // Require that the aggregator timeout must be expired - require( - block.timestamp - lastTimeToCompare > - TRUSTED_AGGREGATOR_TIMEOUT, - "ProofOfEfficiency::verifyBatches: AGGREGATOR_TIMEOUT_IS_NOT_EXPIRED" - ); - - // Open the aggregation to everyone for OPEN_AGGREGATION_TIME - openAggregationUntil = - uint64(block.timestamp) + - OPEN_AGGREGATION_TIME; - } + _consolidatePendingState(); + + // Update pending state + lastPendingStateNum++; + pendingStateTransitions[lastPendingStateNum] = PendingState({ + timestamp: uint64(block.timestamp), + lastVerifiedBatch: finalNewBatch, + exitRoot: newLocalExitRoot, + stateRoot: newStateRoot + }); } + + emit VerifyBatches(finalNewBatch, newStateRoot, msg.sender); } + } - // Assert init and final batch - require( - initNumBatch <= lastVerifiedBatch, - "ProofOfEfficiency::verifyBatches: initNumBatch must be less or equal than lastVerifiedBatch" - ); + function _verifyAndConsolidateState( + uint64 pendingStateNum, + uint64 initNumBatch, + uint64 finalNewBatch, + bytes32 newLocalExitRoot, + bytes32 newStateRoot, + uint256[2] calldata proofA, + uint256[2][2] calldata proofB, + uint256[2] calldata proofC + ) internal { + bytes32 oldStateRoot; + uint64 currentLastVerifiedBatch; + + // Use pending state if especified, otherwise use consolidate state + if (pendingStateNum != 0) { + // Use pending state + require( + pendingStateNum <= lastPendingStateNum, + "ProofOfEfficiency::verifyBatches: pendingStateNum must be less or equal than lastPendingStateNum" + ); + + require( + pendingStateNum > currentPendingStateNum, + "ProofOfEfficiency::verifyBatches: pendingStateNum must bigger than currentPendingStateNum" + ); + + // Check pending choosen pending state + PendingState storage lastPendingState = pendingStateTransitions[ + pendingStateNum + ]; + + // Check if pending state hasn't exceed the timeout + require( + block.timestamp - lastPendingState.timestamp <= + pendingStateTimeout, + "ProofOfEfficiency::verifyBatches: pendingStateTimeout exceeded" + ); + currentLastVerifiedBatch = lastPendingState.lastVerifiedBatch; + oldStateRoot = lastPendingState.stateRoot; + } else { + // Use consolidated state + require( + batchNumToStateRoot[initNumBatch] != bytes32(0), + "ProofOfEfficiency::verifyBatches: initNumBatch state root does not exist" + ); + currentLastVerifiedBatch = lastVerifiedBatch; + oldStateRoot = batchNumToStateRoot[initNumBatch]; + } + + // Assert init and final batch require( - finalNewBatch > lastVerifiedBatch, - "ProofOfEfficiency::verifyBatches: finalNewBatch must be bigger than lastVerifiedBatch" + initNumBatch <= currentLastVerifiedBatch, + "ProofOfEfficiency::verifyBatches: initNumBatch must be less or equal than currentLastVerifiedBatch" ); require( - batchNumToStateRoot[initNumBatch] != bytes32(0), - "ProofOfEfficiency::verifyBatches: initNumBatch state root does not exist" + finalNewBatch > currentLastVerifiedBatch, + "ProofOfEfficiency::verifyBatches: finalNewBatch must be bigger than currentLastVerifiedBatch" ); // Get snark bytes @@ -503,6 +675,7 @@ trusted aggreagator renunciara en algun punto. initNumBatch, finalNewBatch, newLocalExitRoot, + oldStateRoot, newStateRoot ); @@ -518,19 +691,34 @@ trusted aggreagator renunciara en algun punto. // Get MATIC reward matic.safeTransfer( msg.sender, - calculateRewardPerBatch() * (finalNewBatch - lastVerifiedBatch) + calculateRewardPerBatch() * + (finalNewBatch - currentLastVerifiedBatch) + // If it's overriding batches everyone "loses" matic + // Anyway trusted aggregator can damage the system, this is not that problematic + // last payed batch? ); // Update state lastVerifiedBatch = finalNewBatch; batchNumToStateRoot[finalNewBatch] = newStateRoot; - // Interact with globalExitRoot + // Clean pending state + lastPendingStateNum = 0; + currentPendingStateNum = 0; + + // Interact with globalExitRootManager globalExitRootManager.updateExitRoot(newLocalExitRoot); emit VerifyBatches(finalNewBatch, newStateRoot, msg.sender); } + /** + * @notice Internal function to consolidate pending state + */ + function _consolidatePendingState() public { + // If trusted aggregator, can consolidate whathever + } + /** * @notice Allows a sequencer/user to force a batch of L2 transactions. * This should be used only in extreme cases where the trusted sequencer does not work as expected @@ -542,7 +730,7 @@ trusted aggreagator renunciara en algun punto. uint256 maticAmount ) public ifNotEmergencyState isForceBatchAllowed { // Calculate matic collateral - uint256 maticFee = calculateForceProverFee(); + uint256 maticFee = calculateBatchFee(); require( maticFee <= maticAmount, @@ -590,7 +778,7 @@ trusted aggreagator renunciara en algun punto. * @param batches Struct array which the necessary data to append new batces ot the sequence */ function sequenceForceBatches( - ForceBatchData[] memory batches + ForcedBatchData[] memory batches ) public ifNotEmergencyState isForceBatchAllowed { uint256 batchesNum = batches.length; @@ -607,16 +795,17 @@ trusted aggreagator renunciara en algun punto. // Store storage variables in memory, to save gas, because will be overrided multiple times uint64 currentBatchSequenced = lastBatchSequenced; uint64 currentLastForceBatchSequenced = lastForceBatchSequenced; - bytes32 currentAccInputHash = sequencedBatches[currentBatchSequenced]; + bytes32 currentAccInputHash = sequencedBatches[currentBatchSequenced] + .accInputHash; // Sequence force batches for (uint256 i = 0; i < batchesNum; i++) { // Load current sequence - ForceBatchData memory currentBatch = batches[i]; + ForcedBatchData memory currentBatch = batches[i]; currentLastForceBatchSequenced++; // Check forced data matches - bytes32 hashedForceBatchData = keccak256( + bytes32 hashedForcedBatchData = keccak256( abi.encodePacked( keccak256(currentBatch.transactions), currentBatch.globalExitRoot, @@ -625,7 +814,7 @@ trusted aggreagator renunciara en algun punto. ); require( - hashedForceBatchData == + hashedForcedBatchData == forcedBatches[currentLastForceBatchSequenced], "ProofOfEfficiency::sequenceForceBatches: Forced batches data must match" ); @@ -658,7 +847,10 @@ trusted aggreagator renunciara en algun punto. // Store back the storage variables lastBatchSequenced = currentBatchSequenced; lastForceBatchSequenced = currentLastForceBatchSequenced; - sequencedBatches[currentBatchSequenced] = currentAccInputHash; + sequencedBatches[currentBatchSequenced] = SequencedBatchData({ + accInputHash: currentAccInputHash, + sequencedTimestamp: uint64(block.timestamp) + }); emit SequenceForceBatches(lastBatchSequenced); } @@ -716,13 +908,28 @@ trusted aggreagator renunciara en algun punto. * If address 0 is set, everyone is free to aggregate * @param newTrustedAggregator Address of the new trusted aggregator */ - function setTrustedAggregator(address newTrustedAggregator) public { + function setTrustedAggregator( + address newTrustedAggregator + ) public onlyTrustedAgggregator { + trustedAggregator = newTrustedAggregator; + + emit SetTrustedAggregator(newTrustedAggregator); + } + + /** + * @notice Allow the current trusted aggregator to set a new trusted aggregator timeout + * @param newTrustedAggregatorTimeout Trusted aggreagator timeout + */ + function setTrustedAggregator( + uint64 newTrustedAggregatorTimeout + ) public onlyTrustedAgggregator { require( - trustedAggregator == msg.sender, - "ProofOfEfficiency::setTrustedAggregator: only trusted aggregator" + trustedAggregatorTimeout <= MAX_TRUSTED_AGGREGATOR_TIMEOUT, + "ProofOfEfficiency::setTrustedAggregator: exceed max trusted aggregator timeout" ); + trustedAggregatorTimeout = newTrustedAggregatorTimeout; - emit SetTrustedAggreagator(newTrustedAggregator); + emit SetTrustedAggregatorTimeout(trustedAggregatorTimeout); } /** @@ -800,7 +1007,6 @@ trusted aggreagator renunciara en algun punto. * can only be put on emergency mode by proving a distinct state root given the same batches */ function activateScapeHatch() external onlyOwner { - scapeHatchActive = true; _activateEmergencyState(); } @@ -817,40 +1023,16 @@ trusted aggreagator renunciara en algun punto. bridgeAddress.deactivateEmergencyState(); // Deactivate emergency state on this contract - scapeHatchActive = false; super._deactivateEmergencyState(); } /** * @notice Function to calculate the fee that must be payed for every batch - // TODO */ - function feePerBatch() public view returns (uint256) { + function calculateBatchFee() public view returns (uint256) { return 1 ether * uint256(1 + lastForceBatch - lastForceBatchSequenced); } - -Prueba cada media hora - - - -batches timestamp --> payable -acctimtemt = timestmapTardado * numbatchesantiguos/numBAthcesNuevos - -acctime * numOldBatches + timestampTardado*numNewBatches / totalbatches - -debajo 15 minutos, *0.9 -encima 2 horas, *1.1 - -penar pa que no mepuedan spamear batches -En medio, linear - - -debajo tiempo X(edia hora) 0.9 ( factor decremento) -encima timepo X(media hora) *1.1 ( encima media hora incremento) -Elevar neceisto una tabla - - /** * @notice Function to calculate the reward to verify a single batch */ @@ -875,10 +1057,11 @@ Elevar neceisto una tabla uint64 initNumBatch, uint64 finalNewBatch, bytes32 newLocalExitRoot, + bytes32 oldStateRoot, bytes32 newStateRoot ) public view returns (bytes memory) { - bytes32 oldAccInputHash = sequencedBatches[initNumBatch]; - bytes32 newAccInputHash = sequencedBatches[finalNewBatch]; + bytes32 oldAccInputHash = sequencedBatches[initNumBatch].accInputHash; + bytes32 newAccInputHash = sequencedBatches[finalNewBatch].accInputHash; require( initNumBatch == 0 || oldAccInputHash != bytes32(0), @@ -893,7 +1076,7 @@ Elevar neceisto una tabla return abi.encodePacked( msg.sender, - batchNumToStateRoot[initNumBatch], + oldStateRoot, oldAccInputHash, initNumBatch, chainID, From d2b76e82a2ba21607f87620694b2e09833866440 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Sat, 10 Dec 2022 17:33:14 +0100 Subject: [PATCH 31/71] first approach --- contracts/Bridge.sol | 39 +-- contracts/ProofOfEfficiency.sol | 512 +++++++++++++++++++------------- 2 files changed, 305 insertions(+), 246 deletions(-) diff --git a/contracts/Bridge.sol b/contracts/Bridge.sol index 641c2094f..5a9bec6e2 100644 --- a/contracts/Bridge.sol +++ b/contracts/Bridge.sol @@ -45,9 +45,6 @@ contract Bridge is // Leaf type message uint8 public constant LEAF_TYPE_MESSAGE = 1; - // Max claim timeout the owner is able to set - uint256 public constant MAX_CLAIM_TIMEOUT = 3 days; - // Network identifier uint32 public networkID; @@ -66,9 +63,6 @@ contract Bridge is // Proof of Efficiency address address public poeAddress; - // Claim timeout period - uint256 public claimTimeout; - /** * @param _networkID networkID * @param _globalExitRootManager global exit root manager address @@ -76,19 +70,12 @@ contract Bridge is function initialize( uint32 _networkID, IGlobalExitRootManager _globalExitRootManager, - address _poeAddress, - uint256 _claimTimeout + address _poeAddress ) public virtual initializer { networkID = _networkID; globalExitRootManager = _globalExitRootManager; poeAddress = _poeAddress; - require( - _claimTimeout <= MAX_CLAIM_TIMEOUT, - "Bridge::initialize: MAX_CLAIM_TIMEOUT_EXCEEDED" - ); - claimTimeout = _claimTimeout; - // Initialize OZ contracts __Ownable_init_unchained(); } @@ -135,11 +122,6 @@ contract Bridge is address wrappedTokenAddress ); - /** - * @dev Emitted when newClaimTimeout is updated - */ - event SetClaimTimeout(uint256 newClaimTimeout); - /** * @notice Deposit add a new leaf to the merkle tree * @param token Token address, 0 address is reserved for ether @@ -518,20 +500,6 @@ contract Bridge is _deactivateEmergencyState(); } - /** - * @notice Function to update the claim timeout - * @param newClaimTimeout new claim timeout value - * Only can be called by the owner - */ - function setClaimTimeout(uint256 newClaimTimeout) external onlyOwner { - require( - newClaimTimeout <= MAX_CLAIM_TIMEOUT, - "Bridge::setClaimTimeout: MAX_CLAIM_TIMEOUT_EXCEEDED" - ); - claimTimeout = newClaimTimeout; - emit SetClaimTimeout(newClaimTimeout); - } - /** * @notice Verify leaf and checks that it has not been claimed * @param smtProof Smt proof @@ -569,9 +537,8 @@ contract Bridge is ); require( - timestampGlobalExitRoot != 0 && - (block.timestamp - timestampGlobalExitRoot) >= claimTimeout, - "Bridge::_verifyLeaf: GLOBAL_EXIT_ROOT_INVALID_OR_NOT_YET_CLAIMABLE" + timestampGlobalExitRoot != 0, + "Bridge::_verifyLeaf: GLOBAL_EXIT_ROOT_INVALID" ); // Destination network must be networkID diff --git a/contracts/ProofOfEfficiency.sol b/contracts/ProofOfEfficiency.sol index aec86624b..2b8553c02 100644 --- a/contracts/ProofOfEfficiency.sol +++ b/contracts/ProofOfEfficiency.sol @@ -150,19 +150,14 @@ contract ProofOfEfficiency is // Trusted aggregator address address public trustedAggregator; - // Timestamp of the last trusted aggregation - uint64 public lastTrustedAggregationTime; - - // Storage Slot // - // Timestamp until the aggregation will be open to anyone uint64 public openAggregationUntil; + // Storage Slot // + // Rollup verifier interface IVerifierRollup public rollupVerifier; - // Storage Slot // - // L2 chain identifier uint64 public chainID; @@ -182,9 +177,6 @@ contract ProofOfEfficiency is // L2 network name string public networkName; - // Security council, only can take action if extraordinary conditions happens - address public securityCouncil; - // Bridge Address IBridge public bridgeAddress; @@ -193,13 +185,13 @@ contract ProofOfEfficiency is mapping(uint256 => PendingState) public pendingStateTransitions; // Last pending state - uint64 public lastPendingStateNum; + uint64 public lastPendingState; // Pending state timeout - uint64 public pendingStateTimeout; + uint64 public lastPendingStateConsolidated; - // Pending state timeout - uint64 public currentPendingStateNum; + // Once a pending state exceeds this timeout it can be consolidated + uint64 public pendingStateTimeout; // Trusted aggregator timeout, if a batch is not aggregated in this time frame, // everyone can aggregate that batch @@ -226,7 +218,7 @@ contract ProofOfEfficiency is event SequenceForceBatches(uint64 indexed numBatch); /** - * @dev Emitted when a aggregator verifies a new batch + * @dev Emitted when a aggregator verifies batches */ event VerifyBatches( uint64 indexed numBatch, @@ -234,6 +226,24 @@ contract ProofOfEfficiency is address indexed aggregator ); + /** + * @dev Emitted when the trusted aggregator verifies batches + */ + event TrustedVerifyBatches( + uint64 indexed numBatch, + bytes32 stateRoot, + address indexed aggregator + ); + + /** + * @dev Emitted when pending state is consolidated + */ + event ConsolidatePendingState( + uint64 indexed numBatch, + bytes32 stateRoot, + address indexed aggregator + ); + /** * @dev Emitted when a trusted sequencer update his address */ @@ -249,11 +259,6 @@ contract ProofOfEfficiency is */ event SetTrustedSequencerURL(string newTrustedSequencerURL); - /** - * @dev Emitted when security council update his address - */ - event SetSecurityCouncil(address newSecurityCouncil); - /** * @dev Emitted when a trusted aggregator update the trusted aggregator timeout */ @@ -283,7 +288,8 @@ contract ProofOfEfficiency is * @param _chainID L2 chainID * @param _networkName L2 network name * @param _bridgeAddress bridge address - * @param _securityCouncil security council + * @param _trustedAggregator trusted aggregator + * @param trustedAggregatorTimeout trusted aggregator timeout */ function initialize( IGlobalExitRootManager _globalExitRootManager, @@ -296,7 +302,6 @@ contract ProofOfEfficiency is uint64 _chainID, string memory _networkName, IBridge _bridgeAddress, - address _securityCouncil, address _trustedAggregator, uint64 trustedAggregatorTimeout ) public initializer { @@ -310,23 +315,13 @@ contract ProofOfEfficiency is chainID = _chainID; networkName = _networkName; bridgeAddress = _bridgeAddress; - securityCouncil = _securityCouncil; trustedAggregator = _trustedAggregator; - lastTrustedAggregationTime = uint64(block.timestamp); trustedAggregatorTimeout = trustedAggregatorTimeout; // Initialize OZ contracts __Ownable_init_unchained(); } - modifier onlySecurityCouncil() { - require( - securityCouncil == msg.sender, - "ProofOfEfficiency::onlySecurityCouncil: only security council" - ); - _; - } - modifier onlyTrustedSequencer() { require( trustedSequencer == msg.sender, @@ -335,10 +330,10 @@ contract ProofOfEfficiency is _; } - modifier onlyTrustedAgggregator() { + modifier onlyTrustedAggregator() { require( trustedAggregator == msg.sender, - "ProofOfEfficiency::onlyTrustedAgggregator: only trusted Aggregator" + "ProofOfEfficiency::onlyTrustedAggregator: only trusted Aggregator" ); _; } @@ -412,7 +407,7 @@ contract ProofOfEfficiency is require( currentBatch.transactions.length < MAX_BATCH_LENGTH, - "ProofOfEfficiency::sequenceBatches: Transactions bytes overflow" + "ProofOfEfficiePendingStatecy::sequenceBatches: Transactions bytes overflow" ); } @@ -441,7 +436,7 @@ contract ProofOfEfficiency is currentTimestamp = currentBatch.timestamp; } - // Sanity check, should not be unreachable + // Sanity check, should be unreachable require( currentLastForceBatchSequenced <= lastForceBatch, "ProofOfEfficiency::sequenceBatches: Force batches overflow" @@ -466,6 +461,9 @@ contract ProofOfEfficiency is TRUSTED_SEQUENCER_FEE * nonForcedBatchesSequenced ); + // Consolidate pending state if possible + _consolidateNextPendingState(); + emit SequenceBatches(lastBatchSequenced); } @@ -489,127 +487,118 @@ contract ProofOfEfficiency is uint256[2][2] calldata proofB, uint256[2] calldata proofC ) public ifNotEmergencyState { - if ( - trustedAggregator == address(0) || - msg.sender == trustedAggregator || - trustedAggregatorTimeout == 0 - ) { - _verifyAndConsolidateState( - pendingStateNum, - initNumBatch, - finalNewBatch, - newLocalExitRoot, - newStateRoot, - proofA, - proofB, - proofC - ); - } else { - SequencedBatchData storage oldSequencedBatchData = sequencedBatches[ - initNumBatch - ]; - SequencedBatchData storage newSequencedBatchData = sequencedBatches[ - finalNewBatch - ]; + // Check if the trusted aggregator timeout expired, and the batch can be verified by another aggregator + require( + sequencedBatches[finalNewBatch].sequencedTimestamp + + trustedAggregatorTimeout <= + block.timestamp, + "ProofOfEfficiency::verifyBatches: trusted aggregator timeout not expired" + ); + bytes32 oldStateRoot; + uint64 currentLastVerifiedBatch; - bytes32 oldStateRoot; - uint64 currentLastVerifiedBatch; + // Get the last pending state if there's one, otherwise check consolidate state + if (lastPendingState > 0) { + currentLastVerifiedBatch = pendingStateTransitions[lastPendingState] + .lastVerifiedBatch; + } else { + currentLastVerifiedBatch = lastVerifiedBatch; + } - // Use pending state if any, otherwise use consolidate state - if (pendingStateNum != 0) { - require( - pendingStateNum <= lastPendingStateNum, - "ProofOfEfficiency::verifyBatches: pendingStateNum must be less or equal than lastPendingStateNum" - ); - // Use pending state - PendingState storage lastPendingState = pendingStateTransitions[ - lastPendingStateNum - ]; + // Use pending state if specified, otherwise use consolidated state + if (pendingStateNum != 0) { + // Check that pending state exist + // Already consolidated pending states can be used aswell + require( + pendingStateNum <= lastPendingState, + "ProofOfEfficiency::verifyBatches: pendingStateNum must be less or equal than lastPendingState" + ); - currentLastVerifiedBatch = lastPendingState.lastVerifiedBatch; - oldStateRoot = lastPendingState.stateRoot; - } else { - // Use consolidated state - require( - batchNumToStateRoot[initNumBatch] != bytes32(0), - "ProofOfEfficiency::verifyBatches: initNumBatch state root does not exist" - ); + // Check choosen pending state + PendingState storage currentPendingState = pendingStateTransitions[ + pendingStateNum + ]; - currentLastVerifiedBatch = lastVerifiedBatch; - oldStateRoot = batchNumToStateRoot[initNumBatch]; - } + // Get oldStateRoot from pending batch + oldStateRoot = currentPendingState.stateRoot; - // Assert init and final batch + // Check initNumBatch matches the pending state require( - initNumBatch <= currentLastVerifiedBatch, - "ProofOfEfficiency::verifyBatches: initNumBatch must be less or equal than currentLastVerifiedBatch" + initNumBatch == currentPendingState.lastVerifiedBatch, + "ProofOfEfficiency::verifyBatches: initNumBatch must match the pending state batch" ); - + } else { + // Use consolidated state require( - finalNewBatch > currentLastVerifiedBatch, - "ProofOfEfficiency::verifyBatches: finalNewBatch must be bigger than currentLastVerifiedBatch" + batchNumToStateRoot[initNumBatch] != bytes32(0), + "ProofOfEfficiency::verifyBatches: initNumBatch state root does not exist" ); + oldStateRoot = batchNumToStateRoot[initNumBatch]; - // Get snark bytes - bytes memory snarkHashBytes = getInputSnarkBytes( - initNumBatch, - finalNewBatch, - newLocalExitRoot, - oldStateRoot, - newStateRoot + // Check initNumBatch is inside the range + require( + initNumBatch <= currentLastVerifiedBatch, + "ProofOfEfficiency::verifyBatches: initNumBatch must be less or equal than currentLastVerifiedBatch" ); + } - // Calulate the snark input - uint256 inputSnark = uint256(sha256(snarkHashBytes)) % _RFIELD; + // Check final batch + require( + finalNewBatch > currentLastVerifiedBatch, + "ProofOfEfficiency::verifyBatches: finalNewBatch must be bigger than currentLastVerifiedBatch" + ); - // Verify proof - require( - rollupVerifier.verifyProof( - proofA, - proofB, - proofC, - [inputSnark] - ), - "ProofOfEfficiency::verifyBatches: INVALID_PROOF" - ); + // Get snark bytes + bytes memory snarkHashBytes = getInputSnarkBytes( + initNumBatch, + finalNewBatch, + newLocalExitRoot, + oldStateRoot, + newStateRoot + ); - // Get MATIC reward - matic.safeTransfer( - msg.sender, - calculateRewardPerBatch() * - (finalNewBatch - currentLastVerifiedBatch) - ); + // Calulate the snark input + uint256 inputSnark = uint256(sha256(snarkHashBytes)) % _RFIELD; - // Update state or pending state - if (msg.sender == trustedAggregator) { - // Update state - lastVerifiedBatch = finalNewBatch; - batchNumToStateRoot[finalNewBatch] = newStateRoot; + // Verify proof + require( + rollupVerifier.verifyProof(proofA, proofB, proofC, [inputSnark]), + "ProofOfEfficiency::verifyBatches: INVALID_PROOF" + ); + + // Get MATIC reward + matic.safeTransfer( + msg.sender, + calculateRewardPerBatch() * + (finalNewBatch - currentLastVerifiedBatch) + ); - // Clean pending state - lastPendingStateNum = 0; - currentPendingStateNum = 0; + // Consolidate pending state if possible + _consolidateNextPendingState(); - // Interact with globalExitRoot - globalExitRootManager.updateExitRoot(newLocalExitRoot); - } else { - _consolidatePendingState(); - - // Update pending state - lastPendingStateNum++; - pendingStateTransitions[lastPendingStateNum] = PendingState({ - timestamp: uint64(block.timestamp), - lastVerifiedBatch: finalNewBatch, - exitRoot: newLocalExitRoot, - stateRoot: newStateRoot - }); - } + // Update pending state + lastPendingState++; + pendingStateTransitions[lastPendingState] = PendingState({ + timestamp: uint64(block.timestamp), + lastVerifiedBatch: finalNewBatch, + exitRoot: newLocalExitRoot, + stateRoot: newStateRoot + }); - emit VerifyBatches(finalNewBatch, newStateRoot, msg.sender); - } + emit VerifyBatches(finalNewBatch, newStateRoot, msg.sender); } - function _verifyAndConsolidateState( + /** + * @notice Allows an aggregator to verify multiple batches + * @param initNumBatch Batch which the aggregator starts the verification + * @param finalNewBatch Last batch aggregator intends to verify + * @param newLocalExitRoot New local exit root once the batch is processed + * @param newStateRoot New State root once the batch is processed + * @param proofA zk-snark input + * @param proofB zk-snark input + * @param proofC zk-snark input + */ + function trustedVerifyBatches( uint64 pendingStateNum, uint64 initNumBatch, uint64 finalNewBatch, @@ -618,53 +607,48 @@ contract ProofOfEfficiency is uint256[2] calldata proofA, uint256[2][2] calldata proofB, uint256[2] calldata proofC - ) internal { + ) public onlyTrustedAggregator { bytes32 oldStateRoot; uint64 currentLastVerifiedBatch; // Use pending state if especified, otherwise use consolidate state if (pendingStateNum != 0) { - // Use pending state - require( - pendingStateNum <= lastPendingStateNum, - "ProofOfEfficiency::verifyBatches: pendingStateNum must be less or equal than lastPendingStateNum" - ); - + // Check that pending state exist + // Already consolidated pending states can be used aswell require( - pendingStateNum > currentPendingStateNum, - "ProofOfEfficiency::verifyBatches: pendingStateNum must bigger than currentPendingStateNum" + pendingStateNum <= lastPendingState, + "ProofOfEfficiency::verifyBatches: pendingStateNum must be less or equal than lastPendingState" ); - // Check pending choosen pending state - PendingState storage lastPendingState = pendingStateTransitions[ + // Check choosen pending state + PendingState storage currentPendingState = pendingStateTransitions[ pendingStateNum ]; + oldStateRoot = currentPendingState.stateRoot; - // Check if pending state hasn't exceed the timeout + // Assert init batch require( - block.timestamp - lastPendingState.timestamp <= - pendingStateTimeout, - "ProofOfEfficiency::verifyBatches: pendingStateTimeout exceeded" + initNumBatch == currentPendingState.lastVerifiedBatch, + "ProofOfEfficiency::verifyBatches: initNumBatch must be less or equal than currentLastVerifiedBatch" ); - currentLastVerifiedBatch = lastPendingState.lastVerifiedBatch; - oldStateRoot = lastPendingState.stateRoot; + currentLastVerifiedBatch = initNumBatch; } else { // Use consolidated state + oldStateRoot = batchNumToStateRoot[initNumBatch]; require( - batchNumToStateRoot[initNumBatch] != bytes32(0), + oldStateRoot != bytes32(0), "ProofOfEfficiency::verifyBatches: initNumBatch state root does not exist" ); + // Assert init batch + require( + initNumBatch <= lastVerifiedBatch, + "ProofOfEfficiency::verifyBatches: initNumBatch must be less or equal than currentLastVerifiedBatch" + ); currentLastVerifiedBatch = lastVerifiedBatch; - oldStateRoot = batchNumToStateRoot[initNumBatch]; } - // Assert init and final batch - require( - initNumBatch <= currentLastVerifiedBatch, - "ProofOfEfficiency::verifyBatches: initNumBatch must be less or equal than currentLastVerifiedBatch" - ); - + // Assert final batch require( finalNewBatch > currentLastVerifiedBatch, "ProofOfEfficiency::verifyBatches: finalNewBatch must be bigger than currentLastVerifiedBatch" @@ -693,30 +677,87 @@ contract ProofOfEfficiency is msg.sender, calculateRewardPerBatch() * (finalNewBatch - currentLastVerifiedBatch) - // If it's overriding batches everyone "loses" matic - // Anyway trusted aggregator can damage the system, this is not that problematic - // last payed batch? ); // Update state lastVerifiedBatch = finalNewBatch; batchNumToStateRoot[finalNewBatch] = newStateRoot; - // Clean pending state - lastPendingStateNum = 0; - currentPendingStateNum = 0; + // Clean pending state if any + if (lastPendingState > 0) { + lastPendingState = 0; + lastPendingStateConsolidated = 0; + } // Interact with globalExitRootManager globalExitRootManager.updateExitRoot(newLocalExitRoot); - emit VerifyBatches(finalNewBatch, newStateRoot, msg.sender); + emit TrustedVerifyBatches(finalNewBatch, newStateRoot, msg.sender); + } + + /** + * @notice Internal function to consolidate the next pending state if possible + * Otherwise do nothing + */ + function _consolidateNextPendingState() internal { + if (lastPendingState > lastPendingStateConsolidated) { + // Check if it's possible to consolidate the next pending state + uint64 nextPendingState = lastPendingStateConsolidated + 1; + + if ( + pendingStateTransitions[nextPendingState].timestamp + + pendingStateTimeout <= + block.timestamp + ) { + consolidatePendingState(nextPendingState); + } + } } /** - * @notice Internal function to consolidate pending state + * @notice Allows to consolidate any pending state that has already exceed the pendingStateTimeout + * Can be called by the trusted aggregator, which can consolidate any state without the timeout restrictions + * @param pendingStateNum Pending state to consolidate */ - function _consolidatePendingState() public { - // If trusted aggregator, can consolidate whathever + function consolidatePendingState(uint64 pendingStateNum) public { + // Check if pendingStateNum is in correct range + require( + pendingStateNum != 0 && + pendingStateNum > lastPendingStateConsolidated && + pendingStateNum <= lastPendingState, + "ProofOfEfficiency::consolidatePendingState: pendingStateNum must invalid" + ); + + // Check if pending state can be consolidated + // If trusted aggregator is the sender, do not check the timeout + PendingState storage currentPendingState = pendingStateTransitions[ + pendingStateNum + ]; + if (msg.sender != trustedAggregator) { + require( + currentPendingState.timestamp + pendingStateTimeout <= + block.timestamp, + "ProofOfEfficiency::verifyBatches: pending state is not ready to be consolidated" + ); + } + + // Update state + uint64 newLastVerifiedBatch = currentPendingState.lastVerifiedBatch; + lastVerifiedBatch = newLastVerifiedBatch; + batchNumToStateRoot[newLastVerifiedBatch] = currentPendingState + .stateRoot; + + // Update pending state + lastPendingStateConsolidated = pendingStateNum; + + // Interact with globalExitRootManager + globalExitRootManager.updateExitRoot(currentPendingState.exitRoot); + + emit ConsolidatePendingState( + newLastVerifiedBatch, + currentPendingState.stateRoot, + msg.sender + ); } /** @@ -891,18 +932,6 @@ contract ProofOfEfficiency is emit SetTrustedSequencerURL(newTrustedSequencerURL); } - /** - * @notice Allow the current security council to set a new security council address - * @param newSecurityCouncil Address of the new security council - */ - function setSecurityCouncil( - address newSecurityCouncil - ) public onlySecurityCouncil { - securityCouncil = newSecurityCouncil; - - emit SetSecurityCouncil(newSecurityCouncil); - } - /** * @notice Allow the current trusted aggregator to set a new trusted aggregator address * If address 0 is set, everyone is free to aggregate @@ -910,7 +939,7 @@ contract ProofOfEfficiency is */ function setTrustedAggregator( address newTrustedAggregator - ) public onlyTrustedAgggregator { + ) public onlyTrustedAggregator { trustedAggregator = newTrustedAggregator; emit SetTrustedAggregator(newTrustedAggregator); @@ -920,9 +949,9 @@ contract ProofOfEfficiency is * @notice Allow the current trusted aggregator to set a new trusted aggregator timeout * @param newTrustedAggregatorTimeout Trusted aggreagator timeout */ - function setTrustedAggregator( + function setTrustedAggregatorTimeout( uint64 newTrustedAggregatorTimeout - ) public onlyTrustedAgggregator { + ) public onlyTrustedAggregator { require( trustedAggregatorTimeout <= MAX_TRUSTED_AGGREGATOR_TIMEOUT, "ProofOfEfficiency::setTrustedAggregator: exceed max trusted aggregator timeout" @@ -942,7 +971,9 @@ contract ProofOfEfficiency is * @param proofB zk-snark input * @param proofC zk-snark input */ - function proveNonDeterministicState( + function proveNonDeterministicPendingState( + uint64 initPendingStateNum, + uint64 finalPendingStateNum, uint64 initNumBatch, uint64 finalNewBatch, bytes32 newLocalExitRoot, @@ -951,30 +982,66 @@ contract ProofOfEfficiency is uint256[2][2] calldata proofB, uint256[2] calldata proofC ) public ifNotEmergencyState { - require( - initNumBatch < finalNewBatch, - "ProofOfEfficiency::proveNonDeterministicState: finalNewBatch must be bigger than initNumBatch" - ); + bytes32 oldStateRoot; - require( - finalNewBatch <= lastVerifiedBatch, - "ProofOfEfficiency::proveNonDeterministicState: finalNewBatch must be less or equal than lastVerifiedBatch" - ); + // Use pending state if specified, otherwise use consolidated state + if (initPendingStateNum != 0) { + // Check that pending state exist + // Already consolidated pending states can be used aswell + require( + initPendingStateNum <= lastPendingState, + "ProofOfEfficiency::proveNonDeterministicPendingState: pendingStateNum must be less or equal than lastPendingState" + ); + + // Check choosen pending state + PendingState storage initPendingState = pendingStateTransitions[ + initPendingStateNum + ]; + // Get oldStateRoot from init pending state + oldStateRoot = initPendingState.stateRoot; + + // Check initNumBatch matches the init pending state + require( + initNumBatch == initPendingState.lastVerifiedBatch, + "ProofOfEfficiency::proveNonDeterministicPendingState: initNumBatch must match the pending state batch" + ); + } else { + // Use consolidated state + require( + batchNumToStateRoot[initNumBatch] != bytes32(0), + "ProofOfEfficiency::proveNonDeterministicPendingState: initNumBatch state root does not exist" + ); + oldStateRoot = batchNumToStateRoot[initNumBatch]; + + // Check initNumBatch is inside the range + require( + initNumBatch <= lastVerifiedBatch, + "ProofOfEfficiency::proveNonDeterministicPendingState: initNumBatch must be less or equal than currentLastVerifiedBatch" + ); + } + + // Assert final pending state num is in correct range + // Exist, is bigger than the initPending state, and it's not consolidated require( - batchNumToStateRoot[initNumBatch] != bytes32(0), - "ProofOfEfficiency::proveNonDeterministicState: initNumBatch state root does not exist" + finalPendingStateNum <= lastPendingState && + finalPendingStateNum > initPendingStateNum && + finalPendingStateNum > lastPendingStateConsolidated, + "ProofOfEfficiency::proveNonDeterministicPendingState: finalNewBatch must be bigger than currentLastVerifiedBatch" ); + // Check final num batch require( - batchNumToStateRoot[finalNewBatch] != bytes32(0), - "ProofOfEfficiency::proveNonDeterministicState: finalNewBatch state root does not exist" + finalNewBatch == + pendingStateTransitions[finalPendingStateNum].lastVerifiedBatch, + "ProofOfEfficiency::proveNonDeterministicPendingState: finalNewBatch must be bigger than currentLastVerifiedBatch" ); bytes memory snarkHashBytes = getInputSnarkBytes( initNumBatch, finalNewBatch, newLocalExitRoot, + oldStateRoot, newStateRoot ); @@ -984,16 +1051,17 @@ contract ProofOfEfficiency is // Verify proof require( rollupVerifier.verifyProof(proofA, proofB, proofC, [inputSnark]), - "ProofOfEfficiency::proveNonDeterministicState: INVALID_PROOF" + "ProofOfEfficiency::proveNonDeterministicPendingState: INVALID_PROOF" ); require( - batchNumToStateRoot[finalNewBatch] != newStateRoot, - "ProofOfEfficiency::proveNonDeterministicState: stored root must be different than new state root" + pendingStateTransitions[finalPendingStateNum].stateRoot != + newStateRoot, + "ProofOfEfficiency::proveNonDeterministicPendingState: stored root must be different than new state root" ); emit ProveNonDeterministicState( - batchNumToStateRoot[finalNewBatch], + pendingStateTransitions[finalPendingStateNum].stateRoot, newStateRoot ); @@ -1002,22 +1070,45 @@ contract ProofOfEfficiency is } /** - * @notice Function to activate scape hatch, which also enable the emergency mode on both PoE and Bridge contrats - * Only can be called by the owner in the bootstrap phase, once the owner is renounced, the system - * can only be put on emergency mode by proving a distinct state root given the same batches + * @notice Function to activate emergency state, which also enable the emergency mode on both PoE and Bridge contrats + * If not called by the owner owner must be provided a batcnNum that does not have been aggregated in a HALT_AGGREGATION_TIMEOUT period + * @param sequencedBatchNum Sequenced batch number that has not been aggreagated in HALT_AGGREGATION_TIMEOUT */ - function activateScapeHatch() external onlyOwner { + function activateEmergencyState(uint64 sequencedBatchNum) external { + if (msg.sender != owner()) { + // Only check conditions if is not called by the owner + uint256 lastVerifiedBatchToCompare; + if (lastPendingState > 0) { + lastVerifiedBatchToCompare = pendingStateTransitions[ + lastPendingState + ].lastVerifiedBatch; + } else { + lastVerifiedBatchToCompare = lastVerifiedBatch; + } + // Check that the batch has not been verified + require( + sequencedBatchNum > lastVerifiedBatchToCompare, + "ProofOfEfficiency::activateEmergencyState: Batch already verified" + ); + + // Check that has been passed HALT_AGGREGATION_TIMEOUT since it was sequenced + require( + sequencedBatches[sequencedBatchNum].sequencedTimestamp + + HALT_AGGREGATION_TIMEOUT <= + block.timestamp, + "ProofOfEfficiency::activateEmergencyState: aggregation halt timeout is not expired" + ); + } _activateEmergencyState(); } /** * @notice Function to deactivate emergency state on both PoE and Bridge contrats - * Only can be called by the security council */ function deactivateEmergencyState() external ifEmergencyState - onlySecurityCouncil + onlyTrustedAggregator { // Deactivate emergency state on bridge bridgeAddress.deactivateEmergencyState(); @@ -1060,6 +1151,7 @@ contract ProofOfEfficiency is bytes32 oldStateRoot, bytes32 newStateRoot ) public view returns (bytes memory) { + // sanity checks bytes32 oldAccInputHash = sequencedBatches[initNumBatch].accInputHash; bytes32 newAccInputHash = sequencedBatches[finalNewBatch].accInputHash; From 510661b138f40197d59dd3b2f7fcd5be4ffc1400 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Sun, 11 Dec 2022 01:22:55 +0100 Subject: [PATCH 32/71] first approach 2 --- compiled-contracts/Bridge.json | 282 ++++++- compiled-contracts/BridgeMock.json | 238 +++++- compiled-contracts/ERC20PermitMock.json | 13 + compiled-contracts/GlobalExitRootManager.json | 19 - .../GlobalExitRootManagerMock.json | 30 +- compiled-contracts/ProofOfEfficiency.json | 639 ++++++++++++++- compiled-contracts/ProofOfEfficiencyMock.json | 729 ++++++++++++++---- compiled-contracts/TokenWrapped.json | 191 +++-- .../VerifierRollupHelperMock.json | 4 +- contracts/ProofOfEfficiency.sol | 8 +- contracts/Timelock.sol | 254 ++---- contracts/mocks/BridgeMock.sol | 4 +- contracts/mocks/ProofOfEfficiencyMock.sol | 203 +++-- docs/Bridge.md | 37 +- docs/ProofOfEfficiency.md | 172 ++++- docs/Timelock.md | 235 ++++++ hardhat.config.js | 2 +- 17 files changed, 2429 insertions(+), 631 deletions(-) create mode 100644 docs/Timelock.md diff --git a/compiled-contracts/Bridge.json b/compiled-contracts/Bridge.json index 1889a59d2..007b5ffc8 100644 --- a/compiled-contracts/Bridge.json +++ b/compiled-contracts/Bridge.json @@ -6,6 +6,12 @@ { "anonymous": false, "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "leafType", + "type": "uint8" + }, { "indexed": false, "internalType": "uint32", @@ -15,7 +21,7 @@ { "indexed": false, "internalType": "address", - "name": "originTokenAddress", + "name": "originAddress", "type": "address" }, { @@ -70,7 +76,7 @@ { "indexed": false, "internalType": "address", - "name": "originTokenAddress", + "name": "originAddress", "type": "address" }, { @@ -89,6 +95,18 @@ "name": "ClaimEvent", "type": "event" }, + { + "anonymous": false, + "inputs": [], + "name": "EmergencyStateActivated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "EmergencyStateDeactivated", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -127,6 +145,51 @@ "name": "NewWrappedToken", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "LEAF_TYPE_ASSET", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "LEAF_TYPE_MESSAGE", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "MAINNET_NETWORK_ID", @@ -140,6 +203,13 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "activateEmergencyState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -168,7 +238,30 @@ "type": "bytes" } ], - "name": "bridge", + "name": "bridgeAsset", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "destinationNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "destinationAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + } + ], + "name": "bridgeMessage", "outputs": [], "stateMutability": "payable", "type": "function" @@ -226,7 +319,65 @@ "type": "bytes" } ], - "name": "claim", + "name": "claimAsset", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32[]", + "name": "smtProof", + "type": "bytes32[]" + }, + { + "internalType": "uint32", + "name": "index", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "mainnetExitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "rollupExitRoot", + "type": "bytes32" + }, + { + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "originAddress", + "type": "address" + }, + { + "internalType": "uint32", + "name": "destinationNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "destinationAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + } + ], + "name": "claimMessage", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -239,17 +390,24 @@ "type": "uint256" } ], - "name": "claimNullifier", + "name": "claimedBitMap", "outputs": [ { - "internalType": "bool", + "internalType": "uint256", "name": "", - "type": "bool" + "type": "uint256" } ], "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "deactivateEmergencyState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "depositCount", @@ -278,6 +436,11 @@ }, { "inputs": [ + { + "internalType": "uint8", + "name": "leafType", + "type": "uint8" + }, { "internalType": "uint32", "name": "originNetwork", @@ -285,7 +448,7 @@ }, { "internalType": "address", - "name": "originTokenAddress", + "name": "originAddress", "type": "address" }, { @@ -368,6 +531,11 @@ "internalType": "contract IGlobalExitRootManager", "name": "_globalExitRootManager", "type": "address" + }, + { + "internalType": "address", + "name": "_poeAddress", + "type": "address" } ], "name": "initialize", @@ -375,6 +543,38 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "isClaimed", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isEmergencyState", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "networkID", @@ -388,6 +588,32 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "poeAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -399,6 +625,21 @@ "internalType": "address", "name": "originTokenAddress", "type": "address" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "uint8", + "name": "decimals", + "type": "uint8" } ], "name": "precalculatedWrapperAddress", @@ -414,15 +655,9 @@ }, { "inputs": [], - "name": "tokenImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", "type": "function" }, { @@ -444,6 +679,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { diff --git a/compiled-contracts/BridgeMock.json b/compiled-contracts/BridgeMock.json index 0e54b64d9..fd6718dc6 100644 --- a/compiled-contracts/BridgeMock.json +++ b/compiled-contracts/BridgeMock.json @@ -6,6 +6,12 @@ { "anonymous": false, "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "leafType", + "type": "uint8" + }, { "indexed": false, "internalType": "uint32", @@ -15,7 +21,7 @@ { "indexed": false, "internalType": "address", - "name": "originTokenAddress", + "name": "originAddress", "type": "address" }, { @@ -70,7 +76,7 @@ { "indexed": false, "internalType": "address", - "name": "originTokenAddress", + "name": "originAddress", "type": "address" }, { @@ -89,6 +95,18 @@ "name": "ClaimEvent", "type": "event" }, + { + "anonymous": false, + "inputs": [], + "name": "EmergencyStateActivated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "EmergencyStateDeactivated", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -146,6 +164,32 @@ "name": "OwnershipTransferred", "type": "event" }, + { + "inputs": [], + "name": "LEAF_TYPE_ASSET", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "LEAF_TYPE_MESSAGE", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "MAINNET_NETWORK_ID", @@ -159,6 +203,13 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "activateEmergencyState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -187,7 +238,30 @@ "type": "bytes" } ], - "name": "bridge", + "name": "bridgeAsset", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "destinationNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "destinationAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + } + ], + "name": "bridgeMessage", "outputs": [], "stateMutability": "payable", "type": "function" @@ -245,7 +319,65 @@ "type": "bytes" } ], - "name": "claim", + "name": "claimAsset", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32[]", + "name": "smtProof", + "type": "bytes32[]" + }, + { + "internalType": "uint32", + "name": "index", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "mainnetExitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "rollupExitRoot", + "type": "bytes32" + }, + { + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "originAddress", + "type": "address" + }, + { + "internalType": "uint32", + "name": "destinationNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "destinationAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + } + ], + "name": "claimMessage", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -258,17 +390,24 @@ "type": "uint256" } ], - "name": "claimNullifier", + "name": "claimedBitMap", "outputs": [ { - "internalType": "bool", + "internalType": "uint256", "name": "", - "type": "bool" + "type": "uint256" } ], "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "deactivateEmergencyState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "depositCount", @@ -297,6 +436,11 @@ }, { "inputs": [ + { + "internalType": "uint8", + "name": "leafType", + "type": "uint8" + }, { "internalType": "uint32", "name": "originNetwork", @@ -304,7 +448,7 @@ }, { "internalType": "address", - "name": "originTokenAddress", + "name": "originAddress", "type": "address" }, { @@ -387,6 +531,11 @@ "internalType": "contract IGlobalExitRootManager", "name": "_globalExitRootManager", "type": "address" + }, + { + "internalType": "address", + "name": "_poeAddress", + "type": "address" } ], "name": "initialize", @@ -394,6 +543,38 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "isClaimed", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isEmergencyState", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "maxEtherBridge", @@ -433,6 +614,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "poeAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -444,6 +638,21 @@ "internalType": "address", "name": "originTokenAddress", "type": "address" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "uint8", + "name": "decimals", + "type": "uint8" } ], "name": "precalculatedWrapperAddress", @@ -490,19 +699,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [], - "name": "tokenImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { diff --git a/compiled-contracts/ERC20PermitMock.json b/compiled-contracts/ERC20PermitMock.json index e7f2abf47..9514a4230 100644 --- a/compiled-contracts/ERC20PermitMock.json +++ b/compiled-contracts/ERC20PermitMock.json @@ -79,6 +79,19 @@ "name": "Transfer", "type": "event" }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "EIP712DOMAIN_HASH", diff --git a/compiled-contracts/GlobalExitRootManager.json b/compiled-contracts/GlobalExitRootManager.json index d3ffb3d75..4338fecb3 100644 --- a/compiled-contracts/GlobalExitRootManager.json +++ b/compiled-contracts/GlobalExitRootManager.json @@ -19,12 +19,6 @@ { "anonymous": false, "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "globalExitRootNum", - "type": "uint256" - }, { "indexed": true, "internalType": "bytes32", @@ -104,19 +98,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [], - "name": "lastGlobalExitRootNum", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "lastMainnetExitRoot", diff --git a/compiled-contracts/GlobalExitRootManagerMock.json b/compiled-contracts/GlobalExitRootManagerMock.json index ee92fdfcb..d98c0632c 100644 --- a/compiled-contracts/GlobalExitRootManagerMock.json +++ b/compiled-contracts/GlobalExitRootManagerMock.json @@ -35,12 +35,6 @@ { "anonymous": false, "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "globalExitRootNum", - "type": "uint256" - }, { "indexed": true, "internalType": "bytes32", @@ -120,19 +114,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [], - "name": "lastGlobalExitRootNum", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "lastMainnetExitRoot", @@ -178,9 +159,14 @@ "internalType": "bytes32", "name": "globalExitRoot", "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" } ], - "name": "setLastGlobalExitRoot", + "name": "setGlobalExitRoot", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -189,11 +175,11 @@ "inputs": [ { "internalType": "uint256", - "name": "_lastGlobalExitRootNum", + "name": "timestamp", "type": "uint256" } ], - "name": "setLastGlobalExitRootNum", + "name": "setLastGlobalExitRoot", "outputs": [], "stateMutability": "nonpayable", "type": "function" diff --git a/compiled-contracts/ProofOfEfficiency.json b/compiled-contracts/ProofOfEfficiency.json index 8e93b202f..64aeb9e35 100644 --- a/compiled-contracts/ProofOfEfficiency.json +++ b/compiled-contracts/ProofOfEfficiency.json @@ -3,6 +3,43 @@ "contractName": "ProofOfEfficiency", "sourceName": "contracts/ProofOfEfficiency.sol", "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint64", + "name": "numBatch", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "stateRoot", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "aggregator", + "type": "address" + } + ], + "name": "ConsolidatePendingState", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "EmergencyStateActivated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "EmergencyStateDeactivated", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -47,6 +84,44 @@ "name": "Initialized", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "storedStateRoot", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "provedStateRoot", + "type": "bytes32" + } + ], + "name": "ProveNonDeterministicState", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -86,6 +161,32 @@ "name": "SetForceBatchAllowed", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedAggregator", + "type": "address" + } + ], + "name": "SetTrustedAggregator", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "newTrustedAggregatorTimeout", + "type": "uint64" + } + ], + "name": "SetTrustedAggregatorTimeout", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -121,6 +222,37 @@ "name": "numBatch", "type": "uint64" }, + { + "indexed": false, + "internalType": "bytes32", + "name": "stateRoot", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "aggregator", + "type": "address" + } + ], + "name": "TrustedVerifyBatches", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint64", + "name": "numBatch", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "stateRoot", + "type": "bytes32" + }, { "indexed": true, "internalType": "address", @@ -128,7 +260,7 @@ "type": "address" } ], - "name": "VerifyBatch", + "name": "VerifyBatches", "type": "event" }, { @@ -144,6 +276,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "HALT_AGGREGATION_TIMEOUT", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "MAX_BATCH_LENGTH", @@ -157,6 +302,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "MAX_TRUSTED_AGGREGATOR_TIMEOUT", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "TRUSTED_SEQUENCER_FEE", @@ -170,14 +328,46 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "sequencedBatchNum", + "type": "uint64" + } + ], + "name": "activateEmergencyState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "name": "batchNumToStateRoot", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], - "name": "calculateForceProverFee", + "name": "bridgeAddress", "outputs": [ { - "internalType": "uint256", + "internalType": "contract IBridge", "name": "", - "type": "uint256" + "type": "address" } ], "stateMutability": "view", @@ -185,12 +375,12 @@ }, { "inputs": [], - "name": "chainID", + "name": "calculateBatchFee", "outputs": [ { - "internalType": "uint64", + "internalType": "uint256", "name": "", - "type": "uint64" + "type": "uint256" } ], "stateMutability": "view", @@ -198,12 +388,12 @@ }, { "inputs": [], - "name": "currentLocalExitRoot", + "name": "calculateRewardPerBatch", "outputs": [ { - "internalType": "bytes32", + "internalType": "uint256", "name": "", - "type": "bytes32" + "type": "uint256" } ], "stateMutability": "view", @@ -211,17 +401,37 @@ }, { "inputs": [], - "name": "currentStateRoot", + "name": "chainID", "outputs": [ { - "internalType": "bytes32", + "internalType": "uint64", "name": "", - "type": "bytes32" + "type": "uint64" } ], "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "pendingStateNum", + "type": "uint64" + } + ], + "name": "consolidatePendingState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "deactivateEmergencyState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -265,18 +475,47 @@ "outputs": [ { "internalType": "bytes32", - "name": "batchHashData", + "name": "", "type": "bytes32" - }, + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ { - "internalType": "uint256", - "name": "maticFee", - "type": "uint256" + "internalType": "uint64", + "name": "initNumBatch", + "type": "uint64" }, { "internalType": "uint64", - "name": "minTimestamp", + "name": "finalNewBatch", "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "newLocalExitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "oldStateRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "newStateRoot", + "type": "bytes32" + } + ], + "name": "getInputSnarkBytes", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" } ], "stateMutability": "view", @@ -341,6 +580,21 @@ "internalType": "string", "name": "_networkName", "type": "string" + }, + { + "internalType": "contract IBridge", + "name": "_bridgeAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "_trustedAggregator", + "type": "address" + }, + { + "internalType": "uint64", + "name": "_trustedAggregatorTimeout", + "type": "uint64" } ], "name": "initialize", @@ -350,12 +604,12 @@ }, { "inputs": [], - "name": "lastBatchSequenced", + "name": "isEmergencyState", "outputs": [ { - "internalType": "uint64", + "internalType": "bool", "name": "", - "type": "uint64" + "type": "bool" } ], "stateMutability": "view", @@ -363,7 +617,7 @@ }, { "inputs": [], - "name": "lastForceBatch", + "name": "lastBatchSequenced", "outputs": [ { "internalType": "uint64", @@ -376,7 +630,46 @@ }, { "inputs": [], - "name": "lastForceBatchSequenced", + "name": "lastForceBatch", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastForceBatchSequenced", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastPendingState", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastPendingStateConsolidated", "outputs": [ { "internalType": "uint64", @@ -439,6 +732,139 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "openAggregationUntil", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingStateTimeout", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "pendingStateTransitions", + "outputs": [ + { + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "lastVerifiedBatch", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "exitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "stateRoot", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "initPendingStateNum", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "finalPendingStateNum", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "initNumBatch", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "finalNewBatch", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "newLocalExitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "newStateRoot", + "type": "bytes32" + }, + { + "internalType": "uint256[2]", + "name": "proofA", + "type": "uint256[2]" + }, + { + "internalType": "uint256[2][2]", + "name": "proofB", + "type": "uint256[2][2]" + }, + { + "internalType": "uint256[2]", + "name": "proofC", + "type": "uint256[2]" + } + ], + "name": "proveNonDeterministicPendingState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "rollupVerifier", @@ -472,9 +898,9 @@ "type": "uint64" }, { - "internalType": "uint64[]", - "name": "forceBatchesTimestamp", - "type": "uint64[]" + "internalType": "uint64", + "name": "minForcedTimestamp", + "type": "uint64" } ], "internalType": "struct ProofOfEfficiency.BatchData[]", @@ -490,9 +916,26 @@ { "inputs": [ { - "internalType": "uint64", - "name": "numForcedBatches", - "type": "uint64" + "components": [ + { + "internalType": "bytes", + "name": "transactions", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "globalExitRoot", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "minForcedTimestamp", + "type": "uint64" + } + ], + "internalType": "struct ProofOfEfficiency.ForcedBatchData[]", + "name": "batches", + "type": "tuple[]" } ], "name": "sequenceForceBatches", @@ -512,17 +955,12 @@ "outputs": [ { "internalType": "bytes32", - "name": "batchHashData", + "name": "accInputHash", "type": "bytes32" }, { "internalType": "uint64", - "name": "timestamp", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "forceBatchNum", + "name": "sequencedTimestamp", "type": "uint64" } ], @@ -542,6 +980,32 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "newTrustedAggregator", + "type": "address" + } + ], + "name": "setTrustedAggregator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "newTrustedAggregatorTimeout", + "type": "uint64" + } + ], + "name": "setTrustedAggregatorTimeout", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -568,6 +1032,45 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "trustedAggregator", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "trustedAggregatorTimeout", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "trustedSequencer", @@ -596,6 +1099,21 @@ }, { "inputs": [ + { + "internalType": "uint64", + "name": "pendingStateNum", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "initNumBatch", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "finalNewBatch", + "type": "uint64" + }, { "internalType": "bytes32", "name": "newLocalExitRoot", @@ -606,11 +1124,54 @@ "name": "newStateRoot", "type": "bytes32" }, + { + "internalType": "uint256[2]", + "name": "proofA", + "type": "uint256[2]" + }, + { + "internalType": "uint256[2][2]", + "name": "proofB", + "type": "uint256[2][2]" + }, + { + "internalType": "uint256[2]", + "name": "proofC", + "type": "uint256[2]" + } + ], + "name": "trustedVerifyBatches", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ { "internalType": "uint64", - "name": "numBatch", + "name": "pendingStateNum", "type": "uint64" }, + { + "internalType": "uint64", + "name": "initNumBatch", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "finalNewBatch", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "newLocalExitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "newStateRoot", + "type": "bytes32" + }, { "internalType": "uint256[2]", "name": "proofA", @@ -627,7 +1188,7 @@ "type": "uint256[2]" } ], - "name": "verifyBatch", + "name": "verifyBatches", "outputs": [], "stateMutability": "nonpayable", "type": "function" diff --git a/compiled-contracts/ProofOfEfficiencyMock.json b/compiled-contracts/ProofOfEfficiencyMock.json index c97c8400f..96dbc35bc 100644 --- a/compiled-contracts/ProofOfEfficiencyMock.json +++ b/compiled-contracts/ProofOfEfficiencyMock.json @@ -3,6 +3,43 @@ "contractName": "ProofOfEfficiencyMock", "sourceName": "contracts/mocks/ProofOfEfficiencyMock.sol", "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint64", + "name": "numBatch", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "stateRoot", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "aggregator", + "type": "address" + } + ], + "name": "ConsolidatePendingState", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "EmergencyStateActivated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "EmergencyStateDeactivated", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -66,6 +103,25 @@ "name": "OwnershipTransferred", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "storedStateRoot", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "provedStateRoot", + "type": "bytes32" + } + ], + "name": "ProveNonDeterministicState", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -105,6 +161,32 @@ "name": "SetForceBatchAllowed", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedAggregator", + "type": "address" + } + ], + "name": "SetTrustedAggregator", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "newTrustedAggregatorTimeout", + "type": "uint64" + } + ], + "name": "SetTrustedAggregatorTimeout", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -140,6 +222,37 @@ "name": "numBatch", "type": "uint64" }, + { + "indexed": false, + "internalType": "bytes32", + "name": "stateRoot", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "aggregator", + "type": "address" + } + ], + "name": "TrustedVerifyBatches", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint64", + "name": "numBatch", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "stateRoot", + "type": "bytes32" + }, { "indexed": true, "internalType": "address", @@ -147,7 +260,7 @@ "type": "address" } ], - "name": "VerifyBatch", + "name": "VerifyBatches", "type": "event" }, { @@ -163,6 +276,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "HALT_AGGREGATION_TIMEOUT", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "MAX_BATCH_LENGTH", @@ -178,12 +304,12 @@ }, { "inputs": [], - "name": "TRUSTED_SEQUENCER_FEE", + "name": "MAX_TRUSTED_AGGREGATOR_TIMEOUT", "outputs": [ { - "internalType": "uint256", + "internalType": "uint64", "name": "", - "type": "uint256" + "type": "uint64" } ], "stateMutability": "view", @@ -191,7 +317,7 @@ }, { "inputs": [], - "name": "calculateForceProverFee", + "name": "TRUSTED_SEQUENCER_FEE", "outputs": [ { "internalType": "uint256", @@ -204,107 +330,78 @@ }, { "inputs": [ - { - "internalType": "bytes32", - "name": "currentStateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "currentLocalExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "newStateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "newLocalExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "batchHashData", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "numBatch", - "type": "uint64" - }, { "internalType": "uint64", - "name": "timestamp", + "name": "sequencedBatchNum", "type": "uint64" - }, + } + ], + "name": "activateEmergencyState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ { "internalType": "uint64", - "name": "chainID", + "name": "", "type": "uint64" - }, + } + ], + "name": "batchNumToStateRoot", + "outputs": [ { - "internalType": "address", - "name": "aggregatorAddress", - "type": "address" + "internalType": "bytes32", + "name": "", + "type": "bytes32" } ], - "name": "calculateSnarkInput", + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "bridgeAddress", "outputs": [ { - "internalType": "uint256", + "internalType": "contract IBridge", "name": "", - "type": "uint256" + "type": "address" } ], - "stateMutability": "pure", + "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", - "name": "currentStateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "currentLocalExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "newStateRoot", + "name": "currentAccInputHash", "type": "bytes32" }, { - "internalType": "bytes32", - "name": "newLocalExitRoot", - "type": "bytes32" + "internalType": "bytes", + "name": "transactions", + "type": "bytes" }, { "internalType": "bytes32", - "name": "batchHashData", + "name": "globalExitRoot", "type": "bytes32" }, - { - "internalType": "uint64", - "name": "numBatch", - "type": "uint64" - }, { "internalType": "uint64", "name": "timestamp", "type": "uint64" }, { - "internalType": "uint64", - "name": "chainID", - "type": "uint64" + "internalType": "address", + "name": "sequencerAddress", + "type": "address" } ], - "name": "calculateStarkInput", + "name": "calculateAccInputHash", "outputs": [ { "internalType": "bytes32", @@ -317,12 +414,12 @@ }, { "inputs": [], - "name": "chainID", + "name": "calculateBatchFee", "outputs": [ { - "internalType": "uint64", + "internalType": "uint256", "name": "", - "type": "uint64" + "type": "uint256" } ], "stateMutability": "view", @@ -330,12 +427,12 @@ }, { "inputs": [], - "name": "currentLocalExitRoot", + "name": "calculateRewardPerBatch", "outputs": [ { - "internalType": "bytes32", + "internalType": "uint256", "name": "", - "type": "bytes32" + "type": "uint256" } ], "stateMutability": "view", @@ -343,17 +440,37 @@ }, { "inputs": [], - "name": "currentStateRoot", + "name": "chainID", "outputs": [ { - "internalType": "bytes32", + "internalType": "uint64", "name": "", - "type": "bytes32" + "type": "uint64" } ], "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "pendingStateNum", + "type": "uint64" + } + ], + "name": "consolidatePendingState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "deactivateEmergencyState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -397,18 +514,8 @@ "outputs": [ { "internalType": "bytes32", - "name": "batchHashData", + "name": "", "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "maticFee", - "type": "uint256" - }, - { - "internalType": "uint64", - "name": "minTimestamp", - "type": "uint64" } ], "stateMutability": "view", @@ -416,6 +523,16 @@ }, { "inputs": [ + { + "internalType": "uint64", + "name": "initNumBatch", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "finalNewBatch", + "type": "uint64" + }, { "internalType": "bytes32", "name": "newLocalExitRoot", @@ -423,19 +540,58 @@ }, { "internalType": "bytes32", - "name": "newStateRoot", + "name": "oldStateRoot", "type": "bytes32" }, { - "internalType": "uint64", - "name": "numBatch", - "type": "uint64" + "internalType": "bytes32", + "name": "newStateRoot", + "type": "bytes32" } ], - "name": "getNextSnarkInput", + "name": "getInputSnarkBytes", "outputs": [ { - "internalType": "uint256", + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "pendingStateNum", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "initNumBatch", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "finalNewBatch", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "newLocalExitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "newStateRoot", + "type": "bytes32" + } + ], + "name": "getNextSnarkInput", + "outputs": [ + { + "internalType": "uint256", "name": "", "type": "uint256" } @@ -502,6 +658,21 @@ "internalType": "string", "name": "_networkName", "type": "string" + }, + { + "internalType": "contract IBridge", + "name": "_bridgeAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "_trustedAggregator", + "type": "address" + }, + { + "internalType": "uint64", + "name": "_trustedAggregatorTimeout", + "type": "uint64" } ], "name": "initialize", @@ -509,6 +680,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "isEmergencyState", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "lastBatchSequenced", @@ -548,6 +732,32 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "lastPendingState", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastPendingStateConsolidated", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "lastTimestamp", @@ -600,6 +810,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "openAggregationUntil", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "owner", @@ -615,13 +838,73 @@ }, { "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", + "name": "pendingStateTimeout", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "pendingStateTransitions", + "outputs": [ + { + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "lastVerifiedBatch", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "exitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "stateRoot", + "type": "bytes32" + } + ], + "stateMutability": "view", "type": "function" }, { "inputs": [ + { + "internalType": "uint64", + "name": "initPendingStateNum", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "finalPendingStateNum", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "initNumBatch", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "finalNewBatch", + "type": "uint64" + }, { "internalType": "bytes32", "name": "newLocalExitRoot", @@ -633,20 +916,31 @@ "type": "bytes32" }, { - "internalType": "uint32", - "name": "numBatch", - "type": "uint32" - } - ], - "name": "returnInputHashParameters", - "outputs": [ + "internalType": "uint256[2]", + "name": "proofA", + "type": "uint256[2]" + }, { - "internalType": "bytes", - "name": "", - "type": "bytes" + "internalType": "uint256[2][2]", + "name": "proofB", + "type": "uint256[2][2]" + }, + { + "internalType": "uint256[2]", + "name": "proofC", + "type": "uint256[2]" } ], - "stateMutability": "view", + "name": "proveNonDeterministicPendingState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", "type": "function" }, { @@ -682,9 +976,9 @@ "type": "uint64" }, { - "internalType": "uint64[]", - "name": "forceBatchesTimestamp", - "type": "uint64[]" + "internalType": "uint64", + "name": "minForcedTimestamp", + "type": "uint64" } ], "internalType": "struct ProofOfEfficiency.BatchData[]", @@ -700,9 +994,26 @@ { "inputs": [ { - "internalType": "uint64", - "name": "numForcedBatches", - "type": "uint64" + "components": [ + { + "internalType": "bytes", + "name": "transactions", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "globalExitRoot", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "minForcedTimestamp", + "type": "uint64" + } + ], + "internalType": "struct ProofOfEfficiency.ForcedBatchData[]", + "name": "batches", + "type": "tuple[]" } ], "name": "sequenceForceBatches", @@ -722,36 +1033,18 @@ "outputs": [ { "internalType": "bytes32", - "name": "batchHashData", + "name": "accInputHash", "type": "bytes32" }, { "internalType": "uint64", - "name": "timestamp", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "forceBatchNum", + "name": "sequencedTimestamp", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "newLocalExitRoot", - "type": "bytes32" - } - ], - "name": "setExitRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -791,12 +1084,40 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "batchNum", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "accInputData", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + } + ], + "name": "setSequencedBatches", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { "internalType": "bytes32", "name": "newStateRoot", "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "batchNum", + "type": "uint64" } ], "name": "setStateRoot", @@ -804,6 +1125,32 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "newTrustedAggregator", + "type": "address" + } + ], + "name": "setTrustedAggregator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "newTrustedAggregatorTimeout", + "type": "uint64" + } + ], + "name": "setTrustedAggregatorTimeout", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -869,6 +1216,32 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "trustedAggregator", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "trustedAggregatorTimeout", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "trustedSequencer", @@ -897,6 +1270,21 @@ }, { "inputs": [ + { + "internalType": "uint64", + "name": "pendingStateNum", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "initNumBatch", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "finalNewBatch", + "type": "uint64" + }, { "internalType": "bytes32", "name": "newLocalExitRoot", @@ -907,11 +1295,6 @@ "name": "newStateRoot", "type": "bytes32" }, - { - "internalType": "uint64", - "name": "numBatch", - "type": "uint64" - }, { "internalType": "uint256[2]", "name": "proofA", @@ -928,13 +1311,28 @@ "type": "uint256[2]" } ], - "name": "verifyBatch", + "name": "trustedVerifyBatches", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ + { + "internalType": "uint64", + "name": "pendingStateNum", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "initNumBatch", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "finalNewBatch", + "type": "uint64" + }, { "internalType": "bytes32", "name": "newLocalExitRoot", @@ -945,11 +1343,54 @@ "name": "newStateRoot", "type": "bytes32" }, + { + "internalType": "uint256[2]", + "name": "proofA", + "type": "uint256[2]" + }, + { + "internalType": "uint256[2][2]", + "name": "proofB", + "type": "uint256[2][2]" + }, + { + "internalType": "uint256[2]", + "name": "proofC", + "type": "uint256[2]" + } + ], + "name": "trustedVerifyBatchesMock", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ { "internalType": "uint64", - "name": "numBatch", + "name": "pendingStateNum", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "initNumBatch", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "finalNewBatch", "type": "uint64" }, + { + "internalType": "bytes32", + "name": "newLocalExitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "newStateRoot", + "type": "bytes32" + }, { "internalType": "uint256[2]", "name": "proofA", @@ -966,7 +1407,7 @@ "type": "uint256[2]" } ], - "name": "verifyBatchMock", + "name": "verifyBatches", "outputs": [], "stateMutability": "nonpayable", "type": "function" diff --git a/compiled-contracts/TokenWrapped.json b/compiled-contracts/TokenWrapped.json index abf289df7..58a72fb15 100644 --- a/compiled-contracts/TokenWrapped.json +++ b/compiled-contracts/TokenWrapped.json @@ -4,7 +4,23 @@ "sourceName": "contracts/lib/TokenWrapped.sol", "abi": [ { - "inputs": [], + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "uint8", + "name": "decimals", + "type": "uint8" + } + ], "stateMutability": "nonpayable", "type": "constructor" }, @@ -33,19 +49,6 @@ "name": "Approval", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -71,6 +74,58 @@ "name": "Transfer", "type": "event" }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DOMAIN_TYPEHASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PERMIT_TYPEHASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "VERSION", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -212,6 +267,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "deploymentChainId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -236,39 +304,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - }, - { - "internalType": "uint8", - "name": "decimals", - "type": "uint8" - }, - { - "internalType": "address", - "name": "initialAccount", - "type": "address" - }, - { - "internalType": "uint256", - "name": "initialBalance", - "type": "uint256" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -306,6 +341,68 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "symbol", diff --git a/compiled-contracts/VerifierRollupHelperMock.json b/compiled-contracts/VerifierRollupHelperMock.json index e501efcf4..64b32a247 100644 --- a/compiled-contracts/VerifierRollupHelperMock.json +++ b/compiled-contracts/VerifierRollupHelperMock.json @@ -38,8 +38,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50610101806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c806343753b4d14602d575b600080fd5b60426038366004606c565b6001949350505050565b604051901515815260200160405180910390f35b8060408101831015606657600080fd5b92915050565b600080600080610120808688031215608357600080fd5b608b87876056565b945060c0860187811115609d57600080fd5b60408701945060ab88826056565b93505086818701111560bc57600080fd5b5092959194509261010001915056fea264697066735822122026e36e4a0d19f3b56feec1530c2ac9673aee17d3ddd1781db283eac72a2ab24d64736f6c634300080f0033", - "deployedBytecode": "0x6080604052348015600f57600080fd5b506004361060285760003560e01c806343753b4d14602d575b600080fd5b60426038366004606c565b6001949350505050565b604051901515815260200160405180910390f35b8060408101831015606657600080fd5b92915050565b600080600080610120808688031215608357600080fd5b608b87876056565b945060c0860187811115609d57600080fd5b60408701945060ab88826056565b93505086818701111560bc57600080fd5b5092959194509261010001915056fea264697066735822122026e36e4a0d19f3b56feec1530c2ac9673aee17d3ddd1781db283eac72a2ab24d64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50610101806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c806343753b4d14602d575b600080fd5b60426038366004606c565b6001949350505050565b604051901515815260200160405180910390f35b8060408101831015606657600080fd5b92915050565b600080600080610120808688031215608357600080fd5b608b87876056565b945060c0860187811115609d57600080fd5b60408701945060ab88826056565b93505086818701111560bc57600080fd5b5092959194509261010001915056fea26469706673582212202e4be8cd1c0632c178cfc195caefaebe7e71d9f73e9b4ea187ff77763908589164736f6c634300080f0033", + "deployedBytecode": "0x6080604052348015600f57600080fd5b506004361060285760003560e01c806343753b4d14602d575b600080fd5b60426038366004606c565b6001949350505050565b604051901515815260200160405180910390f35b8060408101831015606657600080fd5b92915050565b600080600080610120808688031215608357600080fd5b608b87876056565b945060c0860187811115609d57600080fd5b60408701945060ab88826056565b93505086818701111560bc57600080fd5b5092959194509261010001915056fea26469706673582212202e4be8cd1c0632c178cfc195caefaebe7e71d9f73e9b4ea187ff77763908589164736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/ProofOfEfficiency.sol b/contracts/ProofOfEfficiency.sol index 2b8553c02..034d3edb0 100644 --- a/contracts/ProofOfEfficiency.sol +++ b/contracts/ProofOfEfficiency.sol @@ -289,7 +289,7 @@ contract ProofOfEfficiency is * @param _networkName L2 network name * @param _bridgeAddress bridge address * @param _trustedAggregator trusted aggregator - * @param trustedAggregatorTimeout trusted aggregator timeout + * @param _trustedAggregatorTimeout trusted aggregator timeout */ function initialize( IGlobalExitRootManager _globalExitRootManager, @@ -303,7 +303,7 @@ contract ProofOfEfficiency is string memory _networkName, IBridge _bridgeAddress, address _trustedAggregator, - uint64 trustedAggregatorTimeout + uint64 _trustedAggregatorTimeout ) public initializer { globalExitRootManager = _globalExitRootManager; matic = _matic; @@ -316,7 +316,7 @@ contract ProofOfEfficiency is networkName = _networkName; bridgeAddress = _bridgeAddress; trustedAggregator = _trustedAggregator; - trustedAggregatorTimeout = trustedAggregatorTimeout; + trustedAggregatorTimeout = _trustedAggregatorTimeout; // Initialize OZ contracts __Ownable_init_unchained(); @@ -1061,7 +1061,7 @@ contract ProofOfEfficiency is ); emit ProveNonDeterministicState( - pendingStateTransitions[finalPendingStateNum].stateRoot, + batchNumToStateRoot[finalNewBatch], newStateRoot ); diff --git a/contracts/Timelock.sol b/contracts/Timelock.sol index 5f886b2c6..9a99e96ef 100644 --- a/contracts/Timelock.sol +++ b/contracts/Timelock.sol @@ -1,43 +1,31 @@ -// SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v4.8.0) (governance/TimelockController.sol) - -pragma solidity ^0.8.0; - -import "../access/AccessControl.sol"; -import "../token/ERC721/IERC721Receiver.sol"; -import "../token/ERC1155/IERC1155Receiver.sol"; -import "../utils/Address.sol"; +// SPDX-License-Identifier: AGPL-3.0 +pragma solidity 0.8.15; + +import "@openzeppelin/contracts/access/Ownable.sol"; +import "./ProofOfEfficiency.sol"; + +// Based on: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/governance/TimelockController.sol + +/* + * changelog: + * - Update to solidity 0.8.15 + * - Remove predecessors everywhere + * - Remove rols --> Replaced by owner + * - Remove IERC165-supportsInterface + * - Remove IERC721/IERC1155 Receivers + * - Update getMinDelay logic: if the zkEVM contracts are on emergency mode, delay is 0 + */ /** - * @dev Contract module which acts as a timelocked controller. When set as the - * owner of an `Ownable` smart contract, it enforces a timelock on all - * `onlyOwner` maintenance operations. This gives time for users of the - * controlled contract to exit before a potentially dangerous maintenance - * operation is applied. - * - * By default, this contract is self administered, meaning administration tasks - * have to go through the timelock process. The proposer (resp executor) role - * is in charge of proposing (resp executing) operations. A common use case is - * to position this {TimelockController} as the owner of a smart contract, with - * a multisig or a DAO as the sole proposer. - * - * _Available since v3.3._ + * @dev Contract module which acts as a timelocked controller. + * This gives time for users of the controlled contract to exit before a potentially dangerous maintenance operation is applied. */ -contract TimelockController is - AccessControl, - IERC721Receiver, - IERC1155Receiver -{ - bytes32 public constant TIMELOCK_ADMIN_ROLE = - keccak256("TIMELOCK_ADMIN_ROLE"); - bytes32 public constant PROPOSER_ROLE = keccak256("PROPOSER_ROLE"); - bytes32 public constant EXECUTOR_ROLE = keccak256("EXECUTOR_ROLE"); - bytes32 public constant CANCELLER_ROLE = keccak256("CANCELLER_ROLE"); +contract Timelock is Ownable { uint256 internal constant _DONE_TIMESTAMP = uint256(1); mapping(bytes32 => uint256) private _timestamps; uint256 private _minDelay; - + ProofOfEfficiency public proofOfEfficiency; /** * @dev Emitted when a call is scheduled as part of operation `id`. */ @@ -47,7 +35,6 @@ contract TimelockController is address target, uint256 value, bytes data, - bytes32 predecessor, uint256 delay ); @@ -76,103 +63,37 @@ contract TimelockController is * @dev Initializes the contract with the following parameters: * * - `minDelay`: initial minimum delay for operations - * - `proposers`: accounts to be granted proposer and canceller roles - * - `executors`: accounts to be granted executor role - * - `admin`: optional account to be granted admin role; disable with zero address - * - * IMPORTANT: The optional admin can aid with initial configuration of roles after deployment - * without being subject to delay, but this role should be subsequently renounced in favor of - * administration through timelocked proposals. Previous versions of this contract would assign - * this admin to the deployer automatically and should be renounced as well. */ - constructor( - uint256 minDelay, - address[] memory proposers, - address[] memory executors, - address admin - ) { - _setRoleAdmin(TIMELOCK_ADMIN_ROLE, TIMELOCK_ADMIN_ROLE); - _setRoleAdmin(PROPOSER_ROLE, TIMELOCK_ADMIN_ROLE); - _setRoleAdmin(EXECUTOR_ROLE, TIMELOCK_ADMIN_ROLE); - _setRoleAdmin(CANCELLER_ROLE, TIMELOCK_ADMIN_ROLE); - - // self administration - _setupRole(TIMELOCK_ADMIN_ROLE, address(this)); - - // optional admin - if (admin != address(0)) { - _setupRole(TIMELOCK_ADMIN_ROLE, admin); - } - - // register proposers and cancellers - for (uint256 i = 0; i < proposers.length; ++i) { - _setupRole(PROPOSER_ROLE, proposers[i]); - _setupRole(CANCELLER_ROLE, proposers[i]); - } - - // register executors - for (uint256 i = 0; i < executors.length; ++i) { - _setupRole(EXECUTOR_ROLE, executors[i]); - } - + constructor(uint256 minDelay, ProofOfEfficiency _proofOfEfficiency) { + proofOfEfficiency = _proofOfEfficiency; _minDelay = minDelay; emit MinDelayChange(0, minDelay); } /** - * @dev Modifier to make a function callable only by a certain role. In - * addition to checking the sender's role, `address(0)` 's role is also - * considered. Granting a role to `address(0)` is equivalent to enabling - * this role for everyone. - */ - modifier onlyRoleOrOpenRole(bytes32 role) { - if (!hasRole(role, address(0))) { - _checkRole(role, _msgSender()); - } - _; - } - - /** - * @dev Contract might receive/hold ETH as part of the maintenance process. + * @dev Contract might receive/hold ETH */ receive() external payable {} /** - * @dev See {IERC165-supportsInterface}. + * @dev Returns whether an operation exists.This + * includes Pending, Ready and Done operations. */ - function supportsInterface( - bytes4 interfaceId - ) public view virtual override(IERC165, AccessControl) returns (bool) { - return - interfaceId == type(IERC1155Receiver).interfaceId || - super.supportsInterface(interfaceId); - } - - /** - * @dev Returns whether an id correspond to a registered operation. This - * includes both Pending, Ready and Done operations. - */ - function isOperation( - bytes32 id - ) public view virtual returns (bool registered) { + function isOperation(bytes32 id) public view returns (bool registered) { return getTimestamp(id) > 0; } /** * @dev Returns whether an operation is pending or not. */ - function isOperationPending( - bytes32 id - ) public view virtual returns (bool pending) { + function isOperationPending(bytes32 id) public view returns (bool pending) { return getTimestamp(id) > _DONE_TIMESTAMP; } /** * @dev Returns whether an operation is ready or not. */ - function isOperationReady( - bytes32 id - ) public view virtual returns (bool ready) { + function isOperationReady(bytes32 id) public view returns (bool ready) { uint256 timestamp = getTimestamp(id); return timestamp > _DONE_TIMESTAMP && timestamp <= block.timestamp; } @@ -180,9 +101,7 @@ contract TimelockController is /** * @dev Returns whether an operation is done or not. */ - function isOperationDone( - bytes32 id - ) public view virtual returns (bool done) { + function isOperationDone(bytes32 id) public view returns (bool done) { return getTimestamp(id) == _DONE_TIMESTAMP; } @@ -190,9 +109,7 @@ contract TimelockController is * @dev Returns the timestamp at with an operation becomes ready (0 for * unset operations, 1 for done operations). */ - function getTimestamp( - bytes32 id - ) public view virtual returns (uint256 timestamp) { + function getTimestamp(bytes32 id) public view returns (uint256 timestamp) { return _timestamps[id]; } @@ -200,9 +117,14 @@ contract TimelockController is * @dev Returns the minimum delay for an operation to become valid. * * This value can be changed by executing an operation that calls `updateDelay`. + * If proof of efficiency is on emergency state the minDelay will be 0 instead. */ - function getMinDelay() public view virtual returns (uint256 duration) { - return _minDelay; + function getMinDelay() public view returns (uint256 duration) { + if (proofOfEfficiency.isEmergencyState()) { + return 0; + } else { + return _minDelay; + } } /** @@ -213,10 +135,9 @@ contract TimelockController is address target, uint256 value, bytes calldata data, - bytes32 predecessor, bytes32 salt - ) public pure virtual returns (bytes32 hash) { - return keccak256(abi.encode(target, value, data, predecessor, salt)); + ) public pure returns (bytes32 hash) { + return keccak256(abi.encode(target, value, data, salt)); } /** @@ -227,11 +148,9 @@ contract TimelockController is address[] calldata targets, uint256[] calldata values, bytes[] calldata payloads, - bytes32 predecessor, bytes32 salt - ) public pure virtual returns (bytes32 hash) { - return - keccak256(abi.encode(targets, values, payloads, predecessor, salt)); + ) public pure returns (bytes32 hash) { + return keccak256(abi.encode(targets, values, payloads, salt)); } /** @@ -247,13 +166,12 @@ contract TimelockController is address target, uint256 value, bytes calldata data, - bytes32 predecessor, bytes32 salt, uint256 delay - ) public virtual onlyRole(PROPOSER_ROLE) { - bytes32 id = hashOperation(target, value, data, predecessor, salt); + ) public onlyOwner { + bytes32 id = hashOperation(target, value, data, salt); _schedule(id, delay); - emit CallScheduled(id, 0, target, value, data, predecessor, delay); + emit CallScheduled(id, 0, target, value, data, delay); } /** @@ -269,10 +187,9 @@ contract TimelockController is address[] calldata targets, uint256[] calldata values, bytes[] calldata payloads, - bytes32 predecessor, bytes32 salt, uint256 delay - ) public virtual onlyRole(PROPOSER_ROLE) { + ) public onlyOwner { require( targets.length == values.length, "TimelockController: length mismatch" @@ -282,13 +199,7 @@ contract TimelockController is "TimelockController: length mismatch" ); - bytes32 id = hashOperationBatch( - targets, - values, - payloads, - predecessor, - salt - ); + bytes32 id = hashOperationBatch(targets, values, payloads, salt); _schedule(id, delay); for (uint256 i = 0; i < targets.length; ++i) { emit CallScheduled( @@ -297,7 +208,6 @@ contract TimelockController is targets[i], values[i], payloads[i], - predecessor, delay ); } @@ -325,7 +235,7 @@ contract TimelockController is * * - the caller must have the 'canceller' role. */ - function cancel(bytes32 id) public virtual onlyRole(CANCELLER_ROLE) { + function cancel(bytes32 id) public onlyOwner { require( isOperationPending(id), "TimelockController: operation cannot be cancelled" @@ -351,12 +261,11 @@ contract TimelockController is address target, uint256 value, bytes calldata payload, - bytes32 predecessor, bytes32 salt - ) public payable virtual onlyRoleOrOpenRole(EXECUTOR_ROLE) { - bytes32 id = hashOperation(target, value, payload, predecessor, salt); + ) public payable onlyOwner { + bytes32 id = hashOperation(target, value, payload, salt); - _beforeCall(id, predecessor); + _beforeCall(id); _execute(target, value, payload); emit CallExecuted(id, 0, target, value, payload); _afterCall(id); @@ -375,9 +284,8 @@ contract TimelockController is address[] calldata targets, uint256[] calldata values, bytes[] calldata payloads, - bytes32 predecessor, bytes32 salt - ) public payable virtual onlyRoleOrOpenRole(EXECUTOR_ROLE) { + ) public payable onlyOwner { require( targets.length == values.length, "TimelockController: length mismatch" @@ -387,15 +295,9 @@ contract TimelockController is "TimelockController: length mismatch" ); - bytes32 id = hashOperationBatch( - targets, - values, - payloads, - predecessor, - salt - ); + bytes32 id = hashOperationBatch(targets, values, payloads, salt); - _beforeCall(id, predecessor); + _beforeCall(id); for (uint256 i = 0; i < targets.length; ++i) { address target = targets[i]; uint256 value = values[i]; @@ -413,7 +315,7 @@ contract TimelockController is address target, uint256 value, bytes calldata data - ) internal virtual { + ) internal { (bool success, ) = target.call{value: value}(data); require(success, "TimelockController: underlying transaction reverted"); } @@ -421,15 +323,11 @@ contract TimelockController is /** * @dev Checks before execution of an operation's calls. */ - function _beforeCall(bytes32 id, bytes32 predecessor) private view { + function _beforeCall(bytes32 id) private view { require( isOperationReady(id), "TimelockController: operation is not ready" ); - require( - predecessor == bytes32(0) || isOperationDone(predecessor), - "TimelockController: missing dependency" - ); } /** @@ -453,7 +351,7 @@ contract TimelockController is * - the caller must be the timelock itself. This can only be achieved by scheduling and later executing * an operation where the timelock is the target and the data is the ABI-encoded call to this function. */ - function updateDelay(uint256 newDelay) external virtual { + function updateDelay(uint256 newDelay) external { require( msg.sender == address(this), "TimelockController: caller must be timelock" @@ -461,42 +359,4 @@ contract TimelockController is emit MinDelayChange(_minDelay, newDelay); _minDelay = newDelay; } - - /** - * @dev See {IERC721Receiver-onERC721Received}. - */ - function onERC721Received( - address, - address, - uint256, - bytes memory - ) public virtual override returns (bytes4) { - return this.onERC721Received.selector; - } - - /** - * @dev See {IERC1155Receiver-onERC1155Received}. - */ - function onERC1155Received( - address, - address, - uint256, - uint256, - bytes memory - ) public virtual override returns (bytes4) { - return this.onERC1155Received.selector; - } - - /** - * @dev See {IERC1155Receiver-onERC1155BatchReceived}. - */ - function onERC1155BatchReceived( - address, - address, - uint256[] memory, - uint256[] memory, - bytes memory - ) public virtual override returns (bytes4) { - return this.onERC1155BatchReceived.selector; - } } diff --git a/contracts/mocks/BridgeMock.sol b/contracts/mocks/BridgeMock.sol index e7edbe74a..5e9c4764c 100644 --- a/contracts/mocks/BridgeMock.sol +++ b/contracts/mocks/BridgeMock.sol @@ -16,13 +16,11 @@ contract BridgeMock is Bridge { function initialize( uint32 _networkID, IGlobalExitRootManager _globalExitRootManager, - address _poeAddress, - uint256 _claimTimeout + address _poeAddress ) public override initializer { networkID = _networkID; globalExitRootManager = _globalExitRootManager; poeAddress = _poeAddress; - claimTimeout = _claimTimeout; maxEtherBridge = 0.25 ether; diff --git a/contracts/mocks/ProofOfEfficiencyMock.sol b/contracts/mocks/ProofOfEfficiencyMock.sol index ace89e1e7..d33ef29b6 100644 --- a/contracts/mocks/ProofOfEfficiencyMock.sol +++ b/contracts/mocks/ProofOfEfficiencyMock.sol @@ -39,41 +39,85 @@ contract ProofOfEfficiencyMock is ProofOfEfficiency { /** * @notice Return the next snark input - * @param _lastVerifiedBatch Last verified Batch, used as a sanity check - * @param newVerifiedBatch Last batch that the aggregator intends to verify + * @param pendingStateNum Pending state num + * @param initNumBatch Batch which the aggregator starts the verification + * @param finalNewBatch Last batch aggregator intends to verify * @param newLocalExitRoot New local exit root once the batch is processed * @param newStateRoot New State root once the batch is processed */ function getNextSnarkInput( - uint64 _lastVerifiedBatch, - uint64 newVerifiedBatch, + uint64 pendingStateNum, + uint64 initNumBatch, + uint64 finalNewBatch, bytes32 newLocalExitRoot, bytes32 newStateRoot ) public view returns (uint256) { - // sanity check - require( - _lastVerifiedBatch == lastVerifiedBatch, - "ProofOfEfficiency::verifyBatch: _lastVerifiedBatch does not match" - ); + bytes32 oldStateRoot; + uint64 currentLastVerifiedBatch; - require( - newVerifiedBatch > _lastVerifiedBatch, - "ProofOfEfficiency::verifyBatch: newVerifiedBatch must be bigger than lastVerifiedBatch" - ); + // Get the last pending state if there's one, otherwise check consolidate state + if (lastPendingState > 0) { + currentLastVerifiedBatch = pendingStateTransitions[lastPendingState] + .lastVerifiedBatch; + } else { + currentLastVerifiedBatch = lastVerifiedBatch; + } + + // Use pending state if specified, otherwise use consolidated state + if (pendingStateNum != 0) { + // Check that pending state exist + // Already consolidated pending states can be used aswell + require( + pendingStateNum <= lastPendingState, + "ProofOfEfficiency::verifyBatches: pendingStateNum must be less or equal than lastPendingState" + ); + + // Check choosen pending state + PendingState storage currentPendingState = pendingStateTransitions[ + pendingStateNum + ]; + + // Get oldStateRoot from pending batch + oldStateRoot = currentPendingState.stateRoot; + + // Check initNumBatch matches the pending state + require( + initNumBatch == currentPendingState.lastVerifiedBatch, + "ProofOfEfficiency::verifyBatches: initNumBatch must match the pending state batch" + ); + } else { + // Use consolidated state + require( + batchNumToStateRoot[initNumBatch] != bytes32(0), + "ProofOfEfficiency::verifyBatches: initNumBatch state root does not exist" + ); + oldStateRoot = batchNumToStateRoot[initNumBatch]; + // Check initNumBatch is inside the range + require( + initNumBatch <= currentLastVerifiedBatch, + "ProofOfEfficiency::verifyBatches: initNumBatch must be less or equal than currentLastVerifiedBatch" + ); + } + + // Check final batch require( - newVerifiedBatch <= lastBatchSequenced, - "ProofOfEfficiency::verifyBatch: batch does not have been sequenced" + finalNewBatch > currentLastVerifiedBatch, + "ProofOfEfficiency::verifyBatches: finalNewBatch must be bigger than currentLastVerifiedBatch" ); + // Get snark bytes bytes memory snarkHashBytes = getInputSnarkBytes( - _lastVerifiedBatch, - newVerifiedBatch, + initNumBatch, + finalNewBatch, newLocalExitRoot, + oldStateRoot, newStateRoot ); + // Calulate the snark input uint256 inputSnark = uint256(sha256(snarkHashBytes)) % _RFIELD; + return inputSnark; } @@ -81,10 +125,10 @@ contract ProofOfEfficiencyMock is ProofOfEfficiency { * @notice Set state root * @param newStateRoot New State root ¡ */ - function setStateRoot(bytes32 newStateRoot, uint64 batchNum) - public - onlyOwner - { + function setStateRoot( + bytes32 newStateRoot, + uint64 batchNum + ) public onlyOwner { batchNumToStateRoot[batchNum] = newStateRoot; } @@ -125,68 +169,121 @@ contract ProofOfEfficiencyMock is ProofOfEfficiency { * @param batchNum bathc num * @param accInputData accInputData */ - function setSequencedBatches(uint64 batchNum, bytes32 accInputData) - public - onlyOwner - { - sequencedBatches[batchNum] = accInputData; + function setSequencedBatches( + uint64 batchNum, + bytes32 accInputData, + uint64 timestamp + ) public onlyOwner { + sequencedBatches[batchNum] = SequencedBatchData({ + accInputHash: accInputData, + sequencedTimestamp: timestamp + }); } /** - * @notice Allows an aggregator mock to verify a batch - * @param _lastVerifiedBatch Last verified Batch, used as a sanity check - * @param newVerifiedBatch Last batch that the aggregator intends to verify + * @notice Allows an aggregator to verify multiple batches + * @param initNumBatch Batch which the aggregator starts the verification + * @param finalNewBatch Last batch aggregator intends to verify * @param newLocalExitRoot New local exit root once the batch is processed * @param newStateRoot New State root once the batch is processed * @param proofA zk-snark input * @param proofB zk-snark input * @param proofC zk-snark input */ - function verifyBatchesMock( - uint64 _lastVerifiedBatch, - uint64 newVerifiedBatch, + function trustedVerifyBatchesMock( + uint64 pendingStateNum, + uint64 initNumBatch, + uint64 finalNewBatch, bytes32 newLocalExitRoot, bytes32 newStateRoot, uint256[2] calldata proofA, uint256[2][2] calldata proofB, uint256[2] calldata proofC ) public onlyOwner { - require( - _lastVerifiedBatch <= lastVerifiedBatch, - "ProofOfEfficiency::verifyBatches: _lastVerifiedBatch must be less or equal" - ); + bytes32 oldStateRoot; + uint64 currentLastVerifiedBatch; - require( - newVerifiedBatch > lastVerifiedBatch, - "ProofOfEfficiency::verifyBatches: newVerifiedBatch must be bigger than lastVerifiedBatch" - ); + // Use pending state if especified, otherwise use consolidate state + if (pendingStateNum != 0) { + // Check that pending state exist + // Already consolidated pending states can be used aswell + require( + pendingStateNum <= lastPendingState, + "ProofOfEfficiency::verifyBatches: pendingStateNum must be less or equal than lastPendingState" + ); + + // Check choosen pending state + PendingState storage currentPendingState = pendingStateTransitions[ + pendingStateNum + ]; + oldStateRoot = currentPendingState.stateRoot; - bytes32 oldAccInputHash = sequencedBatches[_lastVerifiedBatch]; - bytes32 newAccInputHash = sequencedBatches[newVerifiedBatch]; + // Assert init batch + require( + initNumBatch == currentPendingState.lastVerifiedBatch, + "ProofOfEfficiency::verifyBatches: initNumBatch must be less or equal than currentLastVerifiedBatch" + ); + currentLastVerifiedBatch = initNumBatch; + } else { + // Use consolidated state + oldStateRoot = batchNumToStateRoot[initNumBatch]; + require( + oldStateRoot != bytes32(0), + "ProofOfEfficiency::verifyBatches: initNumBatch state root does not exist" + ); + + // Assert init batch + require( + initNumBatch <= lastVerifiedBatch, + "ProofOfEfficiency::verifyBatches: initNumBatch must be less or equal than currentLastVerifiedBatch" + ); + currentLastVerifiedBatch = lastVerifiedBatch; + } + // Assert final batch require( - oldAccInputHash != bytes32(0), - "ProofOfEfficiency::verifyBatch: oldAccInputHash does not exist" + finalNewBatch > currentLastVerifiedBatch, + "ProofOfEfficiency::verifyBatches: finalNewBatch must be bigger than currentLastVerifiedBatch" ); - require( - newAccInputHash != bytes32(0), - "ProofOfEfficiency::verifyBatch: newAccInputHash does not exist" + // Get snark bytes + bytes memory snarkHashBytes = getInputSnarkBytes( + initNumBatch, + finalNewBatch, + newLocalExitRoot, + oldStateRoot, + newStateRoot ); - // // Get MATIC reward + // Calulate the snark input + uint256 inputSnark = uint256(sha256(snarkHashBytes)) % _RFIELD; + + // Verify proof + // require( + // rollupVerifier.verifyProof(proofA, proofB, proofC, [inputSnark]), + // "ProofOfEfficiency::verifyBatches: INVALID_PROOF" + // ); + + // Get MATIC reward // matic.safeTransfer( // msg.sender, - // calculateRewardPerBatch() * (newVerifiedBatch - _lastVerifiedBatch) + // calculateRewardPerBatch() * + // (finalNewBatch - currentLastVerifiedBatch) // ); // Update state - lastVerifiedBatch = newVerifiedBatch; - batchNumToStateRoot[newVerifiedBatch] = newStateRoot; + lastVerifiedBatch = finalNewBatch; + batchNumToStateRoot[finalNewBatch] = newStateRoot; + + // Clean pending state if any + if (lastPendingState > 0) { + lastPendingState = 0; + lastPendingStateConsolidated = 0; + } - // Interact with globalExitRoot + // Interact with globalExitRootManager globalExitRootManager.updateExitRoot(newLocalExitRoot); - emit VerifyBatches(newVerifiedBatch, newStateRoot, msg.sender); + emit TrustedVerifyBatches(finalNewBatch, newStateRoot, msg.sender); } } diff --git a/docs/Bridge.md b/docs/Bridge.md index 6ce08839e..7e8db84bc 100644 --- a/docs/Bridge.md +++ b/docs/Bridge.md @@ -174,21 +174,6 @@ Function to deactivate the emergency state -### setClaimTimeout -```solidity - function setClaimTimeout( - uint256 newClaimTimeout - ) external -``` -Function to update the claim timeout - - -#### Parameters: -| Name | Type | Description | -| :--- | :--- | :------------------------------------------------------------------- | -|`newClaimTimeout` | uint256 | new claim timeout value -Only can be called by the owner - ### _verifyLeaf ```solidity function _verifyLeaf( @@ -223,6 +208,20 @@ Verify leaf and checks that it has not been claimed |`metadata` | bytes | Abi encoded metadata if any, empty otherwise |`leafType` | uint8 | Leaf type --> [0] transfer Ether / ERC20 tokens, [1] message +### isClaimed +```solidity + function isClaimed( + uint256 index + ) public returns (bool) +``` +Function to check if an index is claimed or not + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`index` | uint256 | Index + ### _permit ```solidity function _permit( @@ -265,11 +264,3 @@ Emitted when a claim is done from another network Emitted when a new wrapped token is created -### SetClaimTimeout -```solidity - event SetClaimTimeout( - ) -``` - -Emitted when newClaimTimeout is updated - diff --git a/docs/ProofOfEfficiency.md b/docs/ProofOfEfficiency.md index 071a0b023..68afa9fc3 100644 --- a/docs/ProofOfEfficiency.md +++ b/docs/ProofOfEfficiency.md @@ -20,7 +20,8 @@ To enter and exit of the L2 network will be used a Bridge smart contract that wi uint64 _chainID, string _networkName, contract IBridge _bridgeAddress, - address _securityCouncil + address _trustedAggregator, + uint64 _trustedAggregatorTimeout ) public ``` @@ -38,7 +39,8 @@ To enter and exit of the L2 network will be used a Bridge smart contract that wi |`_chainID` | uint64 | L2 chainID |`_networkName` | string | L2 network name |`_bridgeAddress` | contract IBridge | bridge address -|`_securityCouncil` | address | security council +|`_trustedAggregator` | address | trusted aggregator +|`_trustedAggregatorTimeout` | uint64 | trusted aggregator timeout ### sequenceBatches ```solidity @@ -59,11 +61,11 @@ Allows a sequencer to send multiple batches function verifyBatches( uint64 initNumBatch, uint64 finalNewBatch, - bytes32 newLocalExitRoot, + uint64 newLocalExitRoot, bytes32 newStateRoot, - uint256[2] proofA, - uint256[2][2] proofB, - uint256[2] proofC + bytes32 proofA, + uint256[2] proofB, + uint256[2][2] proofC ) public ``` Allows an aggregator to verify multiple batches @@ -74,11 +76,62 @@ Allows an aggregator to verify multiple batches | :--- | :--- | :------------------------------------------------------------------- | |`initNumBatch` | uint64 | Batch which the aggregator starts the verification |`finalNewBatch` | uint64 | Last batch aggregator intends to verify -|`newLocalExitRoot` | bytes32 | New local exit root once the batch is processed +|`newLocalExitRoot` | uint64 | New local exit root once the batch is processed |`newStateRoot` | bytes32 | New State root once the batch is processed -|`proofA` | uint256[2] | zk-snark input -|`proofB` | uint256[2][2] | zk-snark input -|`proofC` | uint256[2] | zk-snark input +|`proofA` | bytes32 | zk-snark input +|`proofB` | uint256[2] | zk-snark input +|`proofC` | uint256[2][2] | zk-snark input + +### trustedVerifyBatches +```solidity + function trustedVerifyBatches( + uint64 initNumBatch, + uint64 finalNewBatch, + uint64 newLocalExitRoot, + bytes32 newStateRoot, + bytes32 proofA, + uint256[2] proofB, + uint256[2][2] proofC + ) public +``` +Allows an aggregator to verify multiple batches + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`initNumBatch` | uint64 | Batch which the aggregator starts the verification +|`finalNewBatch` | uint64 | Last batch aggregator intends to verify +|`newLocalExitRoot` | uint64 | New local exit root once the batch is processed +|`newStateRoot` | bytes32 | New State root once the batch is processed +|`proofA` | bytes32 | zk-snark input +|`proofB` | uint256[2] | zk-snark input +|`proofC` | uint256[2][2] | zk-snark input + +### _consolidateNextPendingState +```solidity + function _consolidateNextPendingState( + ) internal +``` +Internal function to consolidate the next pending state if possible +Otherwise do nothing + + + +### consolidatePendingState +```solidity + function consolidatePendingState( + uint64 pendingStateNum + ) public +``` +Allows to consolidate any pending state that has already exceed the pendingStateTimeout +Can be called by the trusted aggregator, which can consolidate any state without the timeout restrictions + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`pendingStateNum` | uint64 | Pending state to consolidate ### forceBatch ```solidity @@ -100,7 +153,7 @@ This should be used only in extreme cases where the trusted sequencer does not w ### sequenceForceBatches ```solidity function sequenceForceBatches( - struct ProofOfEfficiency.ForceBatchData[] batches + struct ProofOfEfficiency.ForcedBatchData[] batches ) public ``` Allows anyone to sequence forced Batches if the trusted sequencer do not have done it in the timeout period @@ -109,7 +162,7 @@ Allows anyone to sequence forced Batches if the trusted sequencer do not have do #### Parameters: | Name | Type | Description | | :--- | :--- | :------------------------------------------------------------------- | -|`batches` | struct ProofOfEfficiency.ForceBatchData[] | Struct array which the necessary data to append new batces ot the sequence +|`batches` | struct ProofOfEfficiency.ForcedBatchData[] | Struct array which the necessary data to append new batces ot the sequence ### setTrustedSequencer ```solidity @@ -153,29 +206,44 @@ Allow the trusted sequencer to set the trusted sequencer URL | :--- | :--- | :------------------------------------------------------------------- | |`newTrustedSequencerURL` | string | URL of trusted sequencer -### setSecurityCouncil +### setTrustedAggregator ```solidity - function setSecurityCouncil( - address newSecurityCouncil + function setTrustedAggregator( + address newTrustedAggregator ) public ``` -Allow the current security council to set a new security council address +Allow the current trusted aggregator to set a new trusted aggregator address +If address 0 is set, everyone is free to aggregate #### Parameters: | Name | Type | Description | | :--- | :--- | :------------------------------------------------------------------- | -|`newSecurityCouncil` | address | Address of the new security council +|`newTrustedAggregator` | address | Address of the new trusted aggregator -### proveNonDeterministicState +### setTrustedAggregatorTimeout ```solidity - function proveNonDeterministicState( + function setTrustedAggregatorTimeout( + uint64 newTrustedAggregatorTimeout + ) public +``` +Allow the current trusted aggregator to set a new trusted aggregator timeout + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`newTrustedAggregatorTimeout` | uint64 | Trusted aggreagator timeout + +### proveNonDeterministicPendingState +```solidity + function proveNonDeterministicPendingState( uint64 initNumBatch, uint64 finalNewBatch, - bytes32 newLocalExitRoot, - bytes32 newStateRoot, - uint256[2] proofA, - uint256[2][2] proofB, + uint64 newLocalExitRoot, + uint64 newStateRoot, + bytes32 proofA, + bytes32 proofB, uint256[2] proofC ) public ``` @@ -187,22 +255,26 @@ Allows to halt the PoE if its possible to prove a different state root given the | :--- | :--- | :------------------------------------------------------------------- | |`initNumBatch` | uint64 | Batch which the aggregator starts the verification |`finalNewBatch` | uint64 | Last batch aggregator intends to verify -|`newLocalExitRoot` | bytes32 | New local exit root once the batch is processed -|`newStateRoot` | bytes32 | New State root once the batch is processed -|`proofA` | uint256[2] | zk-snark input -|`proofB` | uint256[2][2] | zk-snark input +|`newLocalExitRoot` | uint64 | New local exit root once the batch is processed +|`newStateRoot` | uint64 | New State root once the batch is processed +|`proofA` | bytes32 | zk-snark input +|`proofB` | bytes32 | zk-snark input |`proofC` | uint256[2] | zk-snark input ### activateEmergencyState ```solidity function activateEmergencyState( + uint64 sequencedBatchNum ) external ``` -Function to activate emergency state on both PoE and Bridge contrats -Only can be called by the owner in the bootstrap phase, once the owner is renounced, the system -can only be put on this state by proving a distinct state root given the same batches +Function to activate emergency state, which also enable the emergency mode on both PoE and Bridge contrats +If not called by the owner owner must be provided a batcnNum that does not have been aggregated in a HALT_AGGREGATION_TIMEOUT period +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`sequencedBatchNum` | uint64 | Sequenced batch number that has not been aggreagated in HALT_AGGREGATION_TIMEOUT ### deactivateEmergencyState ```solidity @@ -210,17 +282,15 @@ can only be put on this state by proving a distinct state root given the same ba ) external ``` Function to deactivate emergency state on both PoE and Bridge contrats -Only can be called by the security council -### calculateForceProverFee +### calculateBatchFee ```solidity - function calculateForceProverFee( + function calculateBatchFee( ) public returns (uint256) ``` -Function to calculate the sequencer collateral depending on the congestion of the batches - // TODO +Function to calculate the fee that must be payed for every batch @@ -293,7 +363,23 @@ Emitted when forced batches are sequenced by not the trusted sequencer ) ``` -Emitted when a aggregator verifies a new batch +Emitted when a aggregator verifies batches + +### TrustedVerifyBatches +```solidity + event TrustedVerifyBatches( + ) +``` + +Emitted when the trusted aggregator verifies batches + +### ConsolidatePendingState +```solidity + event ConsolidatePendingState( + ) +``` + +Emitted when pending state is consolidated ### SetTrustedSequencer ```solidity @@ -319,13 +405,21 @@ Emitted when a trusted sequencer update the forcebatch boolean Emitted when a trusted sequencer update his URL -### SetSecurityCouncil +### SetTrustedAggregatorTimeout +```solidity + event SetTrustedAggregatorTimeout( + ) +``` + +Emitted when a trusted aggregator update the trusted aggregator timeout + +### SetTrustedAggregator ```solidity - event SetSecurityCouncil( + event SetTrustedAggregator( ) ``` -Emitted when security council update his address +Emitted when a trusted aggregator update or renounce his address ### ProveNonDeterministicState ```solidity diff --git a/docs/Timelock.md b/docs/Timelock.md new file mode 100644 index 000000000..a50ade851 --- /dev/null +++ b/docs/Timelock.md @@ -0,0 +1,235 @@ + +Contract module which acts as a timelocked controller. +This gives time for users of the controlled contract to exit before a potentially dangerous maintenance operation is applied. + +## Functions +### constructor +```solidity + function constructor( + ) public +``` + +Initializes the contract with the following parameters: + +- `minDelay`: initial minimum delay for operations + + +### receive +```solidity + function receive( + ) external +``` + +Contract might receive/hold ETH + + +### isOperation +```solidity + function isOperation( + ) public returns (bool registered) +``` + +Returns whether an operation exists.This +includes Pending, Ready and Done operations. + + +### isOperationPending +```solidity + function isOperationPending( + ) public returns (bool pending) +``` + +Returns whether an operation is pending or not. + + +### isOperationReady +```solidity + function isOperationReady( + ) public returns (bool ready) +``` + +Returns whether an operation is ready or not. + + +### isOperationDone +```solidity + function isOperationDone( + ) public returns (bool done) +``` + +Returns whether an operation is done or not. + + +### getTimestamp +```solidity + function getTimestamp( + ) public returns (uint256 timestamp) +``` + +Returns the timestamp at with an operation becomes ready (0 for +unset operations, 1 for done operations). + + +### getMinDelay +```solidity + function getMinDelay( + ) public returns (uint256 duration) +``` + +Returns the minimum delay for an operation to become valid. + +This value can be changed by executing an operation that calls `updateDelay`. +If proof of efficiency is on emergency state the minDelay will be 0 instead. + + +### hashOperation +```solidity + function hashOperation( + ) public returns (bytes32 hash) +``` + +Returns the identifier of an operation containing a single +transaction. + + +### hashOperationBatch +```solidity + function hashOperationBatch( + ) public returns (bytes32 hash) +``` + +Returns the identifier of an operation containing a batch of +transactions. + + +### schedule +```solidity + function schedule( + ) public +``` + +Schedule an operation containing a single transaction. + +Emits a {CallScheduled} event. + +Requirements: + +- the caller must have the 'proposer' role. + + +### scheduleBatch +```solidity + function scheduleBatch( + ) public +``` + +Schedule an operation containing a batch of transactions. + +Emits one {CallScheduled} event per transaction in the batch. + +Requirements: + +- the caller must have the 'proposer' role. + + +### cancel +```solidity + function cancel( + ) public +``` + +Cancel an operation. + +Requirements: + +- the caller must have the 'canceller' role. + + +### execute +```solidity + function execute( + ) public +``` + +Execute an (ready) operation containing a single transaction. + +Emits a {CallExecuted} event. + +Requirements: + +- the caller must have the 'executor' role. + + +### executeBatch +```solidity + function executeBatch( + ) public +``` + +Execute an (ready) operation containing a batch of transactions. + +Emits one {CallExecuted} event per transaction in the batch. + +Requirements: + +- the caller must have the 'executor' role. + + +### _execute +```solidity + function _execute( + ) internal +``` + +Execute an operation's call. + + +### updateDelay +```solidity + function updateDelay( + ) external +``` + +Changes the minimum timelock duration for future operations. + +Emits a {MinDelayChange} event. + +Requirements: + +- the caller must be the timelock itself. This can only be achieved by scheduling and later executing +an operation where the timelock is the target and the data is the ABI-encoded call to this function. + + +## Events +### CallScheduled +```solidity + event CallScheduled( + ) +``` + +Emitted when a call is scheduled as part of operation `id`. + +### CallExecuted +```solidity + event CallExecuted( + ) +``` + +Emitted when a call is performed as part of operation `id`. + +### Cancelled +```solidity + event Cancelled( + ) +``` + +Emitted when operation `id` is cancelled. + +### MinDelayChange +```solidity + event MinDelayChange( + ) +``` + +Emitted when the minimum delay for future operations is modified. + diff --git a/hardhat.config.js b/hardhat.config.js index 74ee8238a..f457ba0db 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -21,7 +21,7 @@ module.exports = { settings: { optimizer: { enabled: true, - runs: 9999 + runs: 999 } } }, From 3df622937f6289b2df0a3f63d60ca36038177ffd Mon Sep 17 00:00:00 2001 From: invocamanman Date: Tue, 13 Dec 2022 09:47:46 +0100 Subject: [PATCH 33/71] ongoin --- contracts/ProofOfEfficiency.sol | 16 +++++----- contracts/Timelock.sol | 52 +++++++++++++++------------------ 2 files changed, 33 insertions(+), 35 deletions(-) diff --git a/contracts/ProofOfEfficiency.sol b/contracts/ProofOfEfficiency.sol index 034d3edb0..d384c5d8a 100644 --- a/contracts/ProofOfEfficiency.sol +++ b/contracts/ProofOfEfficiency.sol @@ -85,9 +85,6 @@ contract ProofOfEfficiency is uint256 internal constant _RFIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617; - // trusted sequencer prover Fee - uint256 public constant TRUSTED_SEQUENCER_FEE = 0.1 ether; // TODO should be defined - // Max batch byte length // Max keccaks circuit = (2**23 / 158418) * 9 = 2376 // Bytes per keccak = 136 @@ -458,7 +455,7 @@ contract ProofOfEfficiency is matic.safeTransferFrom( msg.sender, address(this), - TRUSTED_SEQUENCER_FEE * nonForcedBatchesSequenced + calculateBatchFee() * nonForcedBatchesSequenced ); // Consolidate pending state if possible @@ -709,6 +706,7 @@ contract ProofOfEfficiency is pendingStateTimeout <= block.timestamp ) { + // busqueda binaria de 2 pasos consolidatePendingState(nextPendingState); } } @@ -737,7 +735,7 @@ contract ProofOfEfficiency is require( currentPendingState.timestamp + pendingStateTimeout <= block.timestamp, - "ProofOfEfficiency::verifyBatches: pending state is not ready to be consolidated" + "ProofOfEfficiency::consolidatePendingState: pending state is not ready to be consolidated" ); } @@ -957,7 +955,9 @@ contract ProofOfEfficiency is "ProofOfEfficiency::setTrustedAggregator: exceed max trusted aggregator timeout" ); trustedAggregatorTimeout = newTrustedAggregatorTimeout; - + // only decrease + // if emergency mode can update whathever + // admin address emit SetTrustedAggregatorTimeout(trustedAggregatorTimeout); } @@ -1108,8 +1108,10 @@ contract ProofOfEfficiency is function deactivateEmergencyState() external ifEmergencyState - onlyTrustedAggregator + onlyAdminAddress { + // deactivate emergency state addreess, another address ( or roles) + // Deactivate emergency state on bridge bridgeAddress.deactivateEmergencyState(); diff --git a/contracts/Timelock.sol b/contracts/Timelock.sol index 9a99e96ef..12b2005ac 100644 --- a/contracts/Timelock.sol +++ b/contracts/Timelock.sol @@ -13,6 +13,7 @@ import "./ProofOfEfficiency.sol"; * - Remove rols --> Replaced by owner * - Remove IERC165-supportsInterface * - Remove IERC721/IERC1155 Receivers + * - Rename payload --> data * - Update getMinDelay logic: if the zkEVM contracts are on emergency mode, delay is 0 */ @@ -25,7 +26,9 @@ contract Timelock is Ownable { mapping(bytes32 => uint256) private _timestamps; uint256 private _minDelay; + ProofOfEfficiency public proofOfEfficiency; + /** * @dev Emitted when a call is scheduled as part of operation `id`. */ @@ -147,10 +150,10 @@ contract Timelock is Ownable { function hashOperationBatch( address[] calldata targets, uint256[] calldata values, - bytes[] calldata payloads, + bytes[] calldata datas, bytes32 salt ) public pure returns (bytes32 hash) { - return keccak256(abi.encode(targets, values, payloads, salt)); + return keccak256(abi.encode(targets, values, datas, salt)); } /** @@ -160,7 +163,7 @@ contract Timelock is Ownable { * * Requirements: * - * - the caller must have the 'proposer' role. + * - the caller must be the owner. */ function schedule( address target, @@ -181,12 +184,12 @@ contract Timelock is Ownable { * * Requirements: * - * - the caller must have the 'proposer' role. + * - the caller must be the owner. */ function scheduleBatch( address[] calldata targets, uint256[] calldata values, - bytes[] calldata payloads, + bytes[] calldata datas, bytes32 salt, uint256 delay ) public onlyOwner { @@ -195,21 +198,14 @@ contract Timelock is Ownable { "TimelockController: length mismatch" ); require( - targets.length == payloads.length, + targets.length == datas.length, "TimelockController: length mismatch" ); - bytes32 id = hashOperationBatch(targets, values, payloads, salt); + bytes32 id = hashOperationBatch(targets, values, datas, salt); _schedule(id, delay); for (uint256 i = 0; i < targets.length; ++i) { - emit CallScheduled( - id, - i, - targets[i], - values[i], - payloads[i], - delay - ); + emit CallScheduled(id, i, targets[i], values[i], datas[i], delay); } } @@ -233,7 +229,7 @@ contract Timelock is Ownable { * * Requirements: * - * - the caller must have the 'canceller' role. + * - the caller must be the owner. */ function cancel(bytes32 id) public onlyOwner { require( @@ -252,7 +248,7 @@ contract Timelock is Ownable { * * Requirements: * - * - the caller must have the 'executor' role. + * - the caller must be the owner. */ // This function can reenter, but it doesn't pose a risk because _afterCall checks that the proposal is pending, // thus any modifications to the operation during reentrancy should be caught. @@ -260,14 +256,14 @@ contract Timelock is Ownable { function execute( address target, uint256 value, - bytes calldata payload, + bytes calldata data, bytes32 salt ) public payable onlyOwner { - bytes32 id = hashOperation(target, value, payload, salt); + bytes32 id = hashOperation(target, value, data, salt); _beforeCall(id); - _execute(target, value, payload); - emit CallExecuted(id, 0, target, value, payload); + _execute(target, value, data); + emit CallExecuted(id, 0, target, value, data); _afterCall(id); } @@ -278,12 +274,12 @@ contract Timelock is Ownable { * * Requirements: * - * - the caller must have the 'executor' role. + * - the caller must be the owner. */ function executeBatch( address[] calldata targets, uint256[] calldata values, - bytes[] calldata payloads, + bytes[] calldata datas, bytes32 salt ) public payable onlyOwner { require( @@ -291,19 +287,19 @@ contract Timelock is Ownable { "TimelockController: length mismatch" ); require( - targets.length == payloads.length, + targets.length == datas.length, "TimelockController: length mismatch" ); - bytes32 id = hashOperationBatch(targets, values, payloads, salt); + bytes32 id = hashOperationBatch(targets, values, datas, salt); _beforeCall(id); for (uint256 i = 0; i < targets.length; ++i) { address target = targets[i]; uint256 value = values[i]; - bytes calldata payload = payloads[i]; - _execute(target, value, payload); - emit CallExecuted(id, i, target, value, payload); + bytes calldata data = datas[i]; + _execute(target, value, data); + emit CallExecuted(id, i, target, value, data); } _afterCall(id); } From 42611f164902827ac4fa0195a335c929c3535e1e Mon Sep 17 00:00:00 2001 From: invocamanman Date: Wed, 14 Dec 2022 17:27:32 +0100 Subject: [PATCH 34/71] ongoing --- compiled-contracts/ProofOfEfficiency.json | 135 ++++--- compiled-contracts/ProofOfEfficiencyMock.json | 135 ++++--- contracts/ProofOfEfficiency.sol | 156 +++++--- contracts/Timelock.sol | 351 +----------------- deployment/upgradePoE.js | 24 ++ docs/ProofOfEfficiency.md | 41 +- docs/Timelock.md | 224 +---------- 7 files changed, 351 insertions(+), 715 deletions(-) create mode 100644 deployment/upgradePoE.js diff --git a/compiled-contracts/ProofOfEfficiency.json b/compiled-contracts/ProofOfEfficiency.json index 64aeb9e35..6e05bd1d8 100644 --- a/compiled-contracts/ProofOfEfficiency.json +++ b/compiled-contracts/ProofOfEfficiency.json @@ -148,6 +148,19 @@ "name": "SequenceForceBatches", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "SetAdmin", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -315,19 +328,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "TRUSTED_SEQUENCER_FEE", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -341,6 +341,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -552,49 +565,61 @@ "type": "address" }, { - "internalType": "bytes32", - "name": "genesisRoot", - "type": "bytes32" + "internalType": "contract IBridge", + "name": "_bridgeAddress", + "type": "address" }, { - "internalType": "address", - "name": "_trustedSequencer", - "type": "address" + "components": [ + { + "internalType": "address", + "name": "_admin", + "type": "address" + }, + { + "internalType": "uint64", + "name": "_chainID", + "type": "uint64" + }, + { + "internalType": "address", + "name": "_trustedSequencer", + "type": "address" + }, + { + "internalType": "bool", + "name": "_forceBatchAllowed", + "type": "bool" + }, + { + "internalType": "address", + "name": "_trustedAggregator", + "type": "address" + }, + { + "internalType": "uint64", + "name": "_trustedAggregatorTimeout", + "type": "uint64" + } + ], + "internalType": "struct ProofOfEfficiency.InitializePackedParameters", + "name": "initializePackedParameters", + "type": "tuple" }, { - "internalType": "bool", - "name": "_forceBatchAllowed", - "type": "bool" + "internalType": "bytes32", + "name": "genesisRoot", + "type": "bytes32" }, { "internalType": "string", "name": "_trustedSequencerURL", "type": "string" }, - { - "internalType": "uint64", - "name": "_chainID", - "type": "uint64" - }, { "internalType": "string", "name": "_networkName", "type": "string" - }, - { - "internalType": "contract IBridge", - "name": "_bridgeAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "_trustedAggregator", - "type": "address" - }, - { - "internalType": "uint64", - "name": "_trustedAggregatorTimeout", - "type": "uint64" } ], "name": "initialize", @@ -732,19 +757,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "openAggregationUntil", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "owner", @@ -967,6 +979,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "setAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { diff --git a/compiled-contracts/ProofOfEfficiencyMock.json b/compiled-contracts/ProofOfEfficiencyMock.json index 96dbc35bc..e043b6329 100644 --- a/compiled-contracts/ProofOfEfficiencyMock.json +++ b/compiled-contracts/ProofOfEfficiencyMock.json @@ -148,6 +148,19 @@ "name": "SequenceForceBatches", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "SetAdmin", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -315,19 +328,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "TRUSTED_SEQUENCER_FEE", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -341,6 +341,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -630,49 +643,61 @@ "type": "address" }, { - "internalType": "bytes32", - "name": "genesisRoot", - "type": "bytes32" + "internalType": "contract IBridge", + "name": "_bridgeAddress", + "type": "address" }, { - "internalType": "address", - "name": "_trustedSequencer", - "type": "address" + "components": [ + { + "internalType": "address", + "name": "_admin", + "type": "address" + }, + { + "internalType": "uint64", + "name": "_chainID", + "type": "uint64" + }, + { + "internalType": "address", + "name": "_trustedSequencer", + "type": "address" + }, + { + "internalType": "bool", + "name": "_forceBatchAllowed", + "type": "bool" + }, + { + "internalType": "address", + "name": "_trustedAggregator", + "type": "address" + }, + { + "internalType": "uint64", + "name": "_trustedAggregatorTimeout", + "type": "uint64" + } + ], + "internalType": "struct ProofOfEfficiency.InitializePackedParameters", + "name": "initializePackedParameters", + "type": "tuple" }, { - "internalType": "bool", - "name": "_forceBatchAllowed", - "type": "bool" + "internalType": "bytes32", + "name": "genesisRoot", + "type": "bytes32" }, { "internalType": "string", "name": "_trustedSequencerURL", "type": "string" }, - { - "internalType": "uint64", - "name": "_chainID", - "type": "uint64" - }, { "internalType": "string", "name": "_networkName", "type": "string" - }, - { - "internalType": "contract IBridge", - "name": "_bridgeAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "_trustedAggregator", - "type": "address" - }, - { - "internalType": "uint64", - "name": "_trustedAggregatorTimeout", - "type": "uint64" } ], "name": "initialize", @@ -810,19 +835,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "openAggregationUntil", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "owner", @@ -1045,6 +1057,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "setAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { diff --git a/contracts/ProofOfEfficiency.sol b/contracts/ProofOfEfficiency.sol index d384c5d8a..e0e28d745 100644 --- a/contracts/ProofOfEfficiency.sol +++ b/contracts/ProofOfEfficiency.sol @@ -81,6 +81,25 @@ contract ProofOfEfficiency is bytes32 stateRoot; } + /** + * @notice Struct to call initialize, this basically saves gas becasue pack the parameters that can be packed + * and avoid stack too deep errors. + * @param _admin admin address + * @param _chainID L2 chainID + * @param _trustedSequencer trusted sequencer address + * @param _forceBatchAllowed indicates wheather the force batch functionality is available + * @param _trustedAggregator trusted aggregator + * @param _trustedAggregatorTimeout trusted aggregator timeou + */ + struct InitializePackedParameters { + address _admin; + uint64 _chainID; + address _trustedSequencer; + bool _forceBatchAllowed; + address _trustedAggregator; + uint64 _trustedAggregatorTimeout; + } + // Modulus zkSNARK uint256 internal constant _RFIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617; @@ -147,23 +166,20 @@ contract ProofOfEfficiency is // Trusted aggregator address address public trustedAggregator; - // Timestamp until the aggregation will be open to anyone - uint64 public openAggregationUntil; - // Storage Slot // // Rollup verifier interface IVerifierRollup public rollupVerifier; - // L2 chain identifier - uint64 public chainID; - // Global Exit Root interface IGlobalExitRootManager public globalExitRootManager; // Indicates whether the force batch functionality is available bool public forceBatchAllowed; + // L2 chain identifier + uint64 public chainID; + // State root mapping // BatchNum --> state root mapping(uint64 => bytes32) public batchNumToStateRoot; @@ -194,6 +210,9 @@ contract ProofOfEfficiency is // everyone can aggregate that batch uint64 public trustedAggregatorTimeout; + // Address that will be able to udpate contract parameters or stop the emergency state + address public admin; + /** * @dev Emitted when the trusted sequencer sends a new batch of transactions */ @@ -266,6 +285,11 @@ contract ProofOfEfficiency is */ event SetTrustedAggregator(address newTrustedAggregator); + /** + * @dev Emitted when a admin update his address + */ + event SetAdmin(address newAdmin); + /** * @dev Emitted when is proved a different state given the same batches */ @@ -278,47 +302,49 @@ contract ProofOfEfficiency is * @param _globalExitRootManager global exit root manager address * @param _matic MATIC token address * @param _rollupVerifier rollup verifier address + * @param _bridgeAddress bridge address + * @param initializePackedParameters Struct to save gas and avoid stack too depp errors * @param genesisRoot rollup genesis root - * @param _trustedSequencer trusted sequencer address - * @param _forceBatchAllowed indicates wheather the force batch functionality is available * @param _trustedSequencerURL trusted sequencer URL - * @param _chainID L2 chainID * @param _networkName L2 network name - * @param _bridgeAddress bridge address - * @param _trustedAggregator trusted aggregator - * @param _trustedAggregatorTimeout trusted aggregator timeout */ function initialize( IGlobalExitRootManager _globalExitRootManager, IERC20Upgradeable _matic, IVerifierRollup _rollupVerifier, + IBridge _bridgeAddress, + InitializePackedParameters calldata initializePackedParameters, bytes32 genesisRoot, - address _trustedSequencer, - bool _forceBatchAllowed, string memory _trustedSequencerURL, - uint64 _chainID, - string memory _networkName, - IBridge _bridgeAddress, - address _trustedAggregator, - uint64 _trustedAggregatorTimeout + string memory _networkName ) public initializer { globalExitRootManager = _globalExitRootManager; matic = _matic; rollupVerifier = _rollupVerifier; + bridgeAddress = _bridgeAddress; + admin = initializePackedParameters._admin; + trustedSequencer = initializePackedParameters._trustedSequencer; + trustedAggregator = initializePackedParameters._trustedAggregator; batchNumToStateRoot[0] = genesisRoot; - trustedSequencer = _trustedSequencer; - forceBatchAllowed = _forceBatchAllowed; + trustedAggregatorTimeout = initializePackedParameters + ._trustedAggregatorTimeout; + chainID = initializePackedParameters._chainID; + forceBatchAllowed = initializePackedParameters._forceBatchAllowed; trustedSequencerURL = _trustedSequencerURL; - chainID = _chainID; networkName = _networkName; - bridgeAddress = _bridgeAddress; - trustedAggregator = _trustedAggregator; - trustedAggregatorTimeout = _trustedAggregatorTimeout; // Initialize OZ contracts __Ownable_init_unchained(); } + modifier onlyAdmin() { + require( + admin == msg.sender, + "ProofOfEfficiency::onlyAdmin: only admin" + ); + _; + } + modifier onlyTrustedSequencer() { require( trustedSequencer == msg.sender, @@ -335,7 +361,6 @@ contract ProofOfEfficiency is _; } - // Only for the current version modifier isForceBatchAllowed() { require( forceBatchAllowed == true, @@ -608,6 +633,14 @@ contract ProofOfEfficiency is bytes32 oldStateRoot; uint64 currentLastVerifiedBatch; + // Get the last pending state if there's one, otherwise check consolidate state + if (lastPendingState > 0) { + currentLastVerifiedBatch = pendingStateTransitions[lastPendingState] + .lastVerifiedBatch; + } else { + currentLastVerifiedBatch = lastVerifiedBatch; + } + // Use pending state if especified, otherwise use consolidate state if (pendingStateNum != 0) { // Check that pending state exist @@ -628,21 +661,19 @@ contract ProofOfEfficiency is initNumBatch == currentPendingState.lastVerifiedBatch, "ProofOfEfficiency::verifyBatches: initNumBatch must be less or equal than currentLastVerifiedBatch" ); - currentLastVerifiedBatch = initNumBatch; } else { // Use consolidated state - oldStateRoot = batchNumToStateRoot[initNumBatch]; require( oldStateRoot != bytes32(0), "ProofOfEfficiency::verifyBatches: initNumBatch state root does not exist" ); + oldStateRoot = batchNumToStateRoot[initNumBatch]; // Assert init batch require( - initNumBatch <= lastVerifiedBatch, + initNumBatch <= currentLastVerifiedBatch, "ProofOfEfficiency::verifyBatches: initNumBatch must be less or equal than currentLastVerifiedBatch" ); - currentLastVerifiedBatch = lastVerifiedBatch; } // Assert final batch @@ -706,8 +737,22 @@ contract ProofOfEfficiency is pendingStateTimeout <= block.timestamp ) { - // busqueda binaria de 2 pasos - consolidatePendingState(nextPendingState); + // TODO + // Check middle pending state ( binary search of 1 step) + uint64 middlePendingState = nextPendingState + + (lastPendingState - nextPendingState) / + 2; + + // Try to consolidate it, and if not, consolidate the nextPendingState + if ( + pendingStateTransitions[middlePendingState].timestamp + + pendingStateTimeout <= + block.timestamp + ) { + consolidatePendingState(middlePendingState); + } else { + consolidatePendingState(nextPendingState); + } } } } @@ -898,9 +943,7 @@ contract ProofOfEfficiency is * @notice Allow the current trusted sequencer to set a new trusted sequencer * @param newTrustedSequencer Address of the new trusted sequuencer */ - function setTrustedSequencer( - address newTrustedSequencer - ) public onlyTrustedSequencer { + function setTrustedSequencer(address newTrustedSequencer) public onlyAdmin { trustedSequencer = newTrustedSequencer; emit SetTrustedSequencer(newTrustedSequencer); @@ -910,9 +953,7 @@ contract ProofOfEfficiency is * @notice Allow the current trusted sequencer to allow/disallow the forceBatch functionality * @param newForceBatchAllowed Whether is allowed or not the forceBatch functionality */ - function setForceBatchAllowed( - bool newForceBatchAllowed - ) public onlyTrustedSequencer { + function setForceBatchAllowed(bool newForceBatchAllowed) public onlyAdmin { forceBatchAllowed = newForceBatchAllowed; emit SetForceBatchAllowed(newForceBatchAllowed); @@ -924,7 +965,7 @@ contract ProofOfEfficiency is */ function setTrustedSequencerURL( string memory newTrustedSequencerURL - ) public onlyTrustedSequencer { + ) public onlyAdmin { trustedSequencerURL = newTrustedSequencerURL; emit SetTrustedSequencerURL(newTrustedSequencerURL); @@ -937,7 +978,7 @@ contract ProofOfEfficiency is */ function setTrustedAggregator( address newTrustedAggregator - ) public onlyTrustedAggregator { + ) public onlyAdmin { trustedAggregator = newTrustedAggregator; emit SetTrustedAggregator(newTrustedAggregator); @@ -945,22 +986,37 @@ contract ProofOfEfficiency is /** * @notice Allow the current trusted aggregator to set a new trusted aggregator timeout + * The timeout can only be lowered, except if emergency state is active * @param newTrustedAggregatorTimeout Trusted aggreagator timeout */ function setTrustedAggregatorTimeout( uint64 newTrustedAggregatorTimeout - ) public onlyTrustedAggregator { + ) public onlyAdmin { require( trustedAggregatorTimeout <= MAX_TRUSTED_AGGREGATOR_TIMEOUT, - "ProofOfEfficiency::setTrustedAggregator: exceed max trusted aggregator timeout" + "ProofOfEfficiency::setTrustedAggregatorTimeout: exceed max trusted aggregator timeout" ); + if (!isEmergencyState) { + require( + newTrustedAggregatorTimeout < trustedAggregatorTimeout, + "ProofOfEfficiency::setTrustedAggregatorTimeout: new timeout must be lower" + ); + } + trustedAggregatorTimeout = newTrustedAggregatorTimeout; - // only decrease - // if emergency mode can update whathever - // admin address emit SetTrustedAggregatorTimeout(trustedAggregatorTimeout); } + /** + * @notice Allow the current admin to set a new admin address + * @param newAdmin Address of the new admin + */ + function setAdmin(address newAdmin) public onlyAdmin { + admin = newAdmin; + + emit SetAdmin(newAdmin); + } + /** * @notice Allows to halt the PoE if its possible to prove a different state root given the same batches * @param initNumBatch Batch which the aggregator starts the verification @@ -1105,13 +1161,7 @@ contract ProofOfEfficiency is /** * @notice Function to deactivate emergency state on both PoE and Bridge contrats */ - function deactivateEmergencyState() - external - ifEmergencyState - onlyAdminAddress - { - // deactivate emergency state addreess, another address ( or roles) - + function deactivateEmergencyState() external ifEmergencyState onlyAdmin { // Deactivate emergency state on bridge bridgeAddress.deactivateEmergencyState(); @@ -1136,6 +1186,8 @@ contract ProofOfEfficiency is // Total Batches to be verified = Total Sequenced Batches - verified Batches uint256 totalBatchesToVerify = ((lastForceBatch - lastForceBatchSequenced) + lastBatchSequenced) - lastVerifiedBatch; + + // TODO GET LAST VERIFIES BATCH in account of pending state return currentBalance / totalBatchesToVerify; } diff --git a/contracts/Timelock.sol b/contracts/Timelock.sol index 12b2005ac..1a65fa4e8 100644 --- a/contracts/Timelock.sol +++ b/contracts/Timelock.sol @@ -1,119 +1,34 @@ // SPDX-License-Identifier: AGPL-3.0 pragma solidity 0.8.15; -import "@openzeppelin/contracts/access/Ownable.sol"; +import "@openzeppelin/contracts/governance/TimelockController.sol"; import "./ProofOfEfficiency.sol"; -// Based on: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/governance/TimelockController.sol - -/* - * changelog: - * - Update to solidity 0.8.15 - * - Remove predecessors everywhere - * - Remove rols --> Replaced by owner - * - Remove IERC165-supportsInterface - * - Remove IERC721/IERC1155 Receivers - * - Rename payload --> data - * - Update getMinDelay logic: if the zkEVM contracts are on emergency mode, delay is 0 - */ - /** * @dev Contract module which acts as a timelocked controller. * This gives time for users of the controlled contract to exit before a potentially dangerous maintenance operation is applied. + * If emergency mode of the zkevm contract system is active, this timelock have no delay. */ -contract Timelock is Ownable { - uint256 internal constant _DONE_TIMESTAMP = uint256(1); - - mapping(bytes32 => uint256) private _timestamps; - uint256 private _minDelay; - +contract Timelock is TimelockController { + // Proof of efficiency address. Will be used to check if it's on emergency state. ProofOfEfficiency public proofOfEfficiency; /** - * @dev Emitted when a call is scheduled as part of operation `id`. - */ - event CallScheduled( - bytes32 indexed id, - uint256 indexed index, - address target, - uint256 value, - bytes data, - uint256 delay - ); - - /** - * @dev Emitted when a call is performed as part of operation `id`. - */ - event CallExecuted( - bytes32 indexed id, - uint256 indexed index, - address target, - uint256 value, - bytes data - ); - - /** - * @dev Emitted when operation `id` is cancelled. - */ - event Cancelled(bytes32 indexed id); - - /** - * @dev Emitted when the minimum delay for future operations is modified. - */ - event MinDelayChange(uint256 oldDuration, uint256 newDuration); - - /** - * @dev Initializes the contract with the following parameters: - * - * - `minDelay`: initial minimum delay for operations - */ - constructor(uint256 minDelay, ProofOfEfficiency _proofOfEfficiency) { + * @notice Constructor of timelock + * @param minDelay initial minimum delay for operations + * @param proposers accounts to be granted proposer and canceller roles + * @param executors accounts to be granted executor role + * @param admin optional account to be granted admin role; disable with zero address + * @param _proofOfEfficiency PoE address + **/ + constructor( + uint256 minDelay, + address[] memory proposers, + address[] memory executors, + address admin, + ProofOfEfficiency _proofOfEfficiency + ) TimelockController(minDelay, proposers, executors, admin) { proofOfEfficiency = _proofOfEfficiency; - _minDelay = minDelay; - emit MinDelayChange(0, minDelay); - } - - /** - * @dev Contract might receive/hold ETH - */ - receive() external payable {} - - /** - * @dev Returns whether an operation exists.This - * includes Pending, Ready and Done operations. - */ - function isOperation(bytes32 id) public view returns (bool registered) { - return getTimestamp(id) > 0; - } - - /** - * @dev Returns whether an operation is pending or not. - */ - function isOperationPending(bytes32 id) public view returns (bool pending) { - return getTimestamp(id) > _DONE_TIMESTAMP; - } - - /** - * @dev Returns whether an operation is ready or not. - */ - function isOperationReady(bytes32 id) public view returns (bool ready) { - uint256 timestamp = getTimestamp(id); - return timestamp > _DONE_TIMESTAMP && timestamp <= block.timestamp; - } - - /** - * @dev Returns whether an operation is done or not. - */ - function isOperationDone(bytes32 id) public view returns (bool done) { - return getTimestamp(id) == _DONE_TIMESTAMP; - } - - /** - * @dev Returns the timestamp at with an operation becomes ready (0 for - * unset operations, 1 for done operations). - */ - function getTimestamp(bytes32 id) public view returns (uint256 timestamp) { - return _timestamps[id]; } /** @@ -122,237 +37,11 @@ contract Timelock is Ownable { * This value can be changed by executing an operation that calls `updateDelay`. * If proof of efficiency is on emergency state the minDelay will be 0 instead. */ - function getMinDelay() public view returns (uint256 duration) { + function getMinDelay() public view override returns (uint256 duration) { if (proofOfEfficiency.isEmergencyState()) { return 0; } else { - return _minDelay; - } - } - - /** - * @dev Returns the identifier of an operation containing a single - * transaction. - */ - function hashOperation( - address target, - uint256 value, - bytes calldata data, - bytes32 salt - ) public pure returns (bytes32 hash) { - return keccak256(abi.encode(target, value, data, salt)); - } - - /** - * @dev Returns the identifier of an operation containing a batch of - * transactions. - */ - function hashOperationBatch( - address[] calldata targets, - uint256[] calldata values, - bytes[] calldata datas, - bytes32 salt - ) public pure returns (bytes32 hash) { - return keccak256(abi.encode(targets, values, datas, salt)); - } - - /** - * @dev Schedule an operation containing a single transaction. - * - * Emits a {CallScheduled} event. - * - * Requirements: - * - * - the caller must be the owner. - */ - function schedule( - address target, - uint256 value, - bytes calldata data, - bytes32 salt, - uint256 delay - ) public onlyOwner { - bytes32 id = hashOperation(target, value, data, salt); - _schedule(id, delay); - emit CallScheduled(id, 0, target, value, data, delay); - } - - /** - * @dev Schedule an operation containing a batch of transactions. - * - * Emits one {CallScheduled} event per transaction in the batch. - * - * Requirements: - * - * - the caller must be the owner. - */ - function scheduleBatch( - address[] calldata targets, - uint256[] calldata values, - bytes[] calldata datas, - bytes32 salt, - uint256 delay - ) public onlyOwner { - require( - targets.length == values.length, - "TimelockController: length mismatch" - ); - require( - targets.length == datas.length, - "TimelockController: length mismatch" - ); - - bytes32 id = hashOperationBatch(targets, values, datas, salt); - _schedule(id, delay); - for (uint256 i = 0; i < targets.length; ++i) { - emit CallScheduled(id, i, targets[i], values[i], datas[i], delay); + return super.getMinDelay(); } } - - /** - * @dev Schedule an operation that is to becomes valid after a given delay. - */ - function _schedule(bytes32 id, uint256 delay) private { - require( - !isOperation(id), - "TimelockController: operation already scheduled" - ); - require( - delay >= getMinDelay(), - "TimelockController: insufficient delay" - ); - _timestamps[id] = block.timestamp + delay; - } - - /** - * @dev Cancel an operation. - * - * Requirements: - * - * - the caller must be the owner. - */ - function cancel(bytes32 id) public onlyOwner { - require( - isOperationPending(id), - "TimelockController: operation cannot be cancelled" - ); - delete _timestamps[id]; - - emit Cancelled(id); - } - - /** - * @dev Execute an (ready) operation containing a single transaction. - * - * Emits a {CallExecuted} event. - * - * Requirements: - * - * - the caller must be the owner. - */ - // This function can reenter, but it doesn't pose a risk because _afterCall checks that the proposal is pending, - // thus any modifications to the operation during reentrancy should be caught. - // slither-disable-next-line reentrancy-eth - function execute( - address target, - uint256 value, - bytes calldata data, - bytes32 salt - ) public payable onlyOwner { - bytes32 id = hashOperation(target, value, data, salt); - - _beforeCall(id); - _execute(target, value, data); - emit CallExecuted(id, 0, target, value, data); - _afterCall(id); - } - - /** - * @dev Execute an (ready) operation containing a batch of transactions. - * - * Emits one {CallExecuted} event per transaction in the batch. - * - * Requirements: - * - * - the caller must be the owner. - */ - function executeBatch( - address[] calldata targets, - uint256[] calldata values, - bytes[] calldata datas, - bytes32 salt - ) public payable onlyOwner { - require( - targets.length == values.length, - "TimelockController: length mismatch" - ); - require( - targets.length == datas.length, - "TimelockController: length mismatch" - ); - - bytes32 id = hashOperationBatch(targets, values, datas, salt); - - _beforeCall(id); - for (uint256 i = 0; i < targets.length; ++i) { - address target = targets[i]; - uint256 value = values[i]; - bytes calldata data = datas[i]; - _execute(target, value, data); - emit CallExecuted(id, i, target, value, data); - } - _afterCall(id); - } - - /** - * @dev Execute an operation's call. - */ - function _execute( - address target, - uint256 value, - bytes calldata data - ) internal { - (bool success, ) = target.call{value: value}(data); - require(success, "TimelockController: underlying transaction reverted"); - } - - /** - * @dev Checks before execution of an operation's calls. - */ - function _beforeCall(bytes32 id) private view { - require( - isOperationReady(id), - "TimelockController: operation is not ready" - ); - } - - /** - * @dev Checks after execution of an operation's calls. - */ - function _afterCall(bytes32 id) private { - require( - isOperationReady(id), - "TimelockController: operation is not ready" - ); - _timestamps[id] = _DONE_TIMESTAMP; - } - - /** - * @dev Changes the minimum timelock duration for future operations. - * - * Emits a {MinDelayChange} event. - * - * Requirements: - * - * - the caller must be the timelock itself. This can only be achieved by scheduling and later executing - * an operation where the timelock is the target and the data is the ABI-encoded call to this function. - */ - function updateDelay(uint256 newDelay) external { - require( - msg.sender == address(this), - "TimelockController: caller must be timelock" - ); - emit MinDelayChange(_minDelay, newDelay); - _minDelay = newDelay; - } } diff --git a/deployment/upgradePoE.js b/deployment/upgradePoE.js new file mode 100644 index 000000000..2e2afb1c1 --- /dev/null +++ b/deployment/upgradePoE.js @@ -0,0 +1,24 @@ +/* eslint-disable no-console */ + +const hre = require('hardhat'); +const { ethers, upgrades } = require('hardhat'); + +async function main() { + // compìle contracts + await hre.run('compile'); + + const ProofOfEfficiencyFactory = await ethers.getContractFactory('ProofOfEfficiencyMock'); + const ProofOfEfficiencyProxyAddress = '0xfefefefefefefefefefefefee'; + + // Upgrade + const tx = await upgrades.upgradeProxy(ProofOfEfficiencyProxyAddress, ProofOfEfficiencyFactory); + + console.log(tx.deployTransaction); + console.log('upgrade succesfull'); +} +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/docs/ProofOfEfficiency.md b/docs/ProofOfEfficiency.md index 68afa9fc3..6e821e54c 100644 --- a/docs/ProofOfEfficiency.md +++ b/docs/ProofOfEfficiency.md @@ -13,15 +13,11 @@ To enter and exit of the L2 network will be used a Bridge smart contract that wi contract IGlobalExitRootManager _globalExitRootManager, contract IERC20Upgradeable _matic, contract IVerifierRollup _rollupVerifier, + contract IBridge _bridgeAddress, + struct ProofOfEfficiency.InitializePackedParameters initializePackedParameters, bytes32 genesisRoot, - address _trustedSequencer, - bool _forceBatchAllowed, string _trustedSequencerURL, - uint64 _chainID, - string _networkName, - contract IBridge _bridgeAddress, - address _trustedAggregator, - uint64 _trustedAggregatorTimeout + string _networkName ) public ``` @@ -32,15 +28,11 @@ To enter and exit of the L2 network will be used a Bridge smart contract that wi |`_globalExitRootManager` | contract IGlobalExitRootManager | global exit root manager address |`_matic` | contract IERC20Upgradeable | MATIC token address |`_rollupVerifier` | contract IVerifierRollup | rollup verifier address +|`_bridgeAddress` | contract IBridge | bridge address +|`initializePackedParameters` | struct ProofOfEfficiency.InitializePackedParameters | Struct to save gas and avoid stack too depp errors |`genesisRoot` | bytes32 | rollup genesis root -|`_trustedSequencer` | address | trusted sequencer address -|`_forceBatchAllowed` | bool | indicates wheather the force batch functionality is available |`_trustedSequencerURL` | string | trusted sequencer URL -|`_chainID` | uint64 | L2 chainID |`_networkName` | string | L2 network name -|`_bridgeAddress` | contract IBridge | bridge address -|`_trustedAggregator` | address | trusted aggregator -|`_trustedAggregatorTimeout` | uint64 | trusted aggregator timeout ### sequenceBatches ```solidity @@ -228,6 +220,7 @@ If address 0 is set, everyone is free to aggregate ) public ``` Allow the current trusted aggregator to set a new trusted aggregator timeout +The timeout can only be lowered, except if emergency state is active #### Parameters: @@ -235,6 +228,20 @@ Allow the current trusted aggregator to set a new trusted aggregator timeout | :--- | :--- | :------------------------------------------------------------------- | |`newTrustedAggregatorTimeout` | uint64 | Trusted aggreagator timeout +### setAdmin +```solidity + function setAdmin( + address newAdmin + ) public +``` +Allow the current admin to set a new admin address + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`newAdmin` | address | Address of the new admin + ### proveNonDeterministicPendingState ```solidity function proveNonDeterministicPendingState( @@ -421,6 +428,14 @@ Emitted when a trusted aggregator update the trusted aggregator timeout Emitted when a trusted aggregator update or renounce his address +### SetAdmin +```solidity + event SetAdmin( + ) +``` + +Emitted when a admin update his address + ### ProveNonDeterministicState ```solidity event ProveNonDeterministicState( diff --git a/docs/Timelock.md b/docs/Timelock.md index a50ade851..2a668019d 100644 --- a/docs/Timelock.md +++ b/docs/Timelock.md @@ -1,73 +1,30 @@ Contract module which acts as a timelocked controller. This gives time for users of the controlled contract to exit before a potentially dangerous maintenance operation is applied. +If emergency mode of the zkevm contract system is active, this timelock have no delay. ## Functions ### constructor ```solidity function constructor( + uint256 minDelay, + address[] proposers, + address[] executors, + address admin, + contract ProofOfEfficiency _proofOfEfficiency ) public ``` +Constructor of timelock -Initializes the contract with the following parameters: -- `minDelay`: initial minimum delay for operations - - -### receive -```solidity - function receive( - ) external -``` - -Contract might receive/hold ETH - - -### isOperation -```solidity - function isOperation( - ) public returns (bool registered) -``` - -Returns whether an operation exists.This -includes Pending, Ready and Done operations. - - -### isOperationPending -```solidity - function isOperationPending( - ) public returns (bool pending) -``` - -Returns whether an operation is pending or not. - - -### isOperationReady -```solidity - function isOperationReady( - ) public returns (bool ready) -``` - -Returns whether an operation is ready or not. - - -### isOperationDone -```solidity - function isOperationDone( - ) public returns (bool done) -``` - -Returns whether an operation is done or not. - - -### getTimestamp -```solidity - function getTimestamp( - ) public returns (uint256 timestamp) -``` - -Returns the timestamp at with an operation becomes ready (0 for -unset operations, 1 for done operations). +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`minDelay` | uint256 | initial minimum delay for operations +|`proposers` | address[] | accounts to be granted proposer and canceller roles +|`executors` | address[] | accounts to be granted executor role +|`admin` | address | optional account to be granted admin role; disable with zero address +|`_proofOfEfficiency` | contract ProofOfEfficiency | PoE address ### getMinDelay @@ -82,154 +39,3 @@ This value can be changed by executing an operation that calls `updateDelay`. If proof of efficiency is on emergency state the minDelay will be 0 instead. -### hashOperation -```solidity - function hashOperation( - ) public returns (bytes32 hash) -``` - -Returns the identifier of an operation containing a single -transaction. - - -### hashOperationBatch -```solidity - function hashOperationBatch( - ) public returns (bytes32 hash) -``` - -Returns the identifier of an operation containing a batch of -transactions. - - -### schedule -```solidity - function schedule( - ) public -``` - -Schedule an operation containing a single transaction. - -Emits a {CallScheduled} event. - -Requirements: - -- the caller must have the 'proposer' role. - - -### scheduleBatch -```solidity - function scheduleBatch( - ) public -``` - -Schedule an operation containing a batch of transactions. - -Emits one {CallScheduled} event per transaction in the batch. - -Requirements: - -- the caller must have the 'proposer' role. - - -### cancel -```solidity - function cancel( - ) public -``` - -Cancel an operation. - -Requirements: - -- the caller must have the 'canceller' role. - - -### execute -```solidity - function execute( - ) public -``` - -Execute an (ready) operation containing a single transaction. - -Emits a {CallExecuted} event. - -Requirements: - -- the caller must have the 'executor' role. - - -### executeBatch -```solidity - function executeBatch( - ) public -``` - -Execute an (ready) operation containing a batch of transactions. - -Emits one {CallExecuted} event per transaction in the batch. - -Requirements: - -- the caller must have the 'executor' role. - - -### _execute -```solidity - function _execute( - ) internal -``` - -Execute an operation's call. - - -### updateDelay -```solidity - function updateDelay( - ) external -``` - -Changes the minimum timelock duration for future operations. - -Emits a {MinDelayChange} event. - -Requirements: - -- the caller must be the timelock itself. This can only be achieved by scheduling and later executing -an operation where the timelock is the target and the data is the ABI-encoded call to this function. - - -## Events -### CallScheduled -```solidity - event CallScheduled( - ) -``` - -Emitted when a call is scheduled as part of operation `id`. - -### CallExecuted -```solidity - event CallExecuted( - ) -``` - -Emitted when a call is performed as part of operation `id`. - -### Cancelled -```solidity - event Cancelled( - ) -``` - -Emitted when operation `id` is cancelled. - -### MinDelayChange -```solidity - event MinDelayChange( - ) -``` - -Emitted when the minimum delay for future operations is modified. - From 2ada6263761431687b1dc64ef885b3f30e6dbe6f Mon Sep 17 00:00:00 2001 From: invocamanman Date: Fri, 16 Dec 2022 12:38:18 +0100 Subject: [PATCH 35/71] almost there --- compiled-contracts/ProofOfEfficiency.json | 123 +++++- compiled-contracts/ProofOfEfficiencyMock.json | 123 +++++- compiled-contracts/TokenWrapped.json | 2 +- contracts/ProofOfEfficiency.sol | 359 +++++++++++------- contracts/lib/TokenWrapped.sol | 4 +- docs/ProofOfEfficiency.md | 139 ++++++- 6 files changed, 581 insertions(+), 169 deletions(-) diff --git a/compiled-contracts/ProofOfEfficiency.json b/compiled-contracts/ProofOfEfficiency.json index 6e05bd1d8..fddd32fe4 100644 --- a/compiled-contracts/ProofOfEfficiency.json +++ b/compiled-contracts/ProofOfEfficiency.json @@ -84,6 +84,31 @@ "name": "Initialized", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint64", + "name": "numBatch", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "stateRoot", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "aggregator", + "type": "address" + } + ], + "name": "OverridePendingState", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -119,7 +144,7 @@ "type": "bytes32" } ], - "name": "ProveNonDeterministicState", + "name": "ProveNonDeterministicPendingState", "type": "event" }, { @@ -328,6 +353,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "MAX_VERIFY_BATCHES", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -534,6 +572,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "getLastVerifiedBatch", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "globalExitRootManager", @@ -573,32 +624,37 @@ "components": [ { "internalType": "address", - "name": "_admin", + "name": "admin", "type": "address" }, { "internalType": "uint64", - "name": "_chainID", + "name": "chainID", "type": "uint64" }, { "internalType": "address", - "name": "_trustedSequencer", + "name": "trustedSequencer", "type": "address" }, + { + "internalType": "uint64", + "name": "pendingStateTimeout", + "type": "uint64" + }, { "internalType": "bool", - "name": "_forceBatchAllowed", + "name": "forceBatchAllowed", "type": "bool" }, { "internalType": "address", - "name": "_trustedAggregator", + "name": "trustedAggregator", "type": "address" }, { "internalType": "uint64", - "name": "_trustedAggregatorTimeout", + "name": "trustedAggregatorTimeout", "type": "uint64" } ], @@ -757,6 +813,59 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "initPendingStateNum", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "finalPendingStateNum", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "initNumBatch", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "finalNewBatch", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "newLocalExitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "newStateRoot", + "type": "bytes32" + }, + { + "internalType": "uint256[2]", + "name": "proofA", + "type": "uint256[2]" + }, + { + "internalType": "uint256[2][2]", + "name": "proofB", + "type": "uint256[2][2]" + }, + { + "internalType": "uint256[2]", + "name": "proofC", + "type": "uint256[2]" + } + ], + "name": "overridePendingState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "owner", diff --git a/compiled-contracts/ProofOfEfficiencyMock.json b/compiled-contracts/ProofOfEfficiencyMock.json index e043b6329..83948ba4e 100644 --- a/compiled-contracts/ProofOfEfficiencyMock.json +++ b/compiled-contracts/ProofOfEfficiencyMock.json @@ -84,6 +84,31 @@ "name": "Initialized", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint64", + "name": "numBatch", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "stateRoot", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "aggregator", + "type": "address" + } + ], + "name": "OverridePendingState", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -119,7 +144,7 @@ "type": "bytes32" } ], - "name": "ProveNonDeterministicState", + "name": "ProveNonDeterministicPendingState", "type": "event" }, { @@ -328,6 +353,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "MAX_VERIFY_BATCHES", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -573,6 +611,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "getLastVerifiedBatch", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -651,32 +702,37 @@ "components": [ { "internalType": "address", - "name": "_admin", + "name": "admin", "type": "address" }, { "internalType": "uint64", - "name": "_chainID", + "name": "chainID", "type": "uint64" }, { "internalType": "address", - "name": "_trustedSequencer", + "name": "trustedSequencer", "type": "address" }, + { + "internalType": "uint64", + "name": "pendingStateTimeout", + "type": "uint64" + }, { "internalType": "bool", - "name": "_forceBatchAllowed", + "name": "forceBatchAllowed", "type": "bool" }, { "internalType": "address", - "name": "_trustedAggregator", + "name": "trustedAggregator", "type": "address" }, { "internalType": "uint64", - "name": "_trustedAggregatorTimeout", + "name": "trustedAggregatorTimeout", "type": "uint64" } ], @@ -835,6 +891,59 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "initPendingStateNum", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "finalPendingStateNum", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "initNumBatch", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "finalNewBatch", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "newLocalExitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "newStateRoot", + "type": "bytes32" + }, + { + "internalType": "uint256[2]", + "name": "proofA", + "type": "uint256[2]" + }, + { + "internalType": "uint256[2][2]", + "name": "proofB", + "type": "uint256[2][2]" + }, + { + "internalType": "uint256[2]", + "name": "proofC", + "type": "uint256[2]" + } + ], + "name": "overridePendingState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "owner", diff --git a/compiled-contracts/TokenWrapped.json b/compiled-contracts/TokenWrapped.json index 58a72fb15..3dca9ff5f 100644 --- a/compiled-contracts/TokenWrapped.json +++ b/compiled-contracts/TokenWrapped.json @@ -17,7 +17,7 @@ }, { "internalType": "uint8", - "name": "decimals", + "name": "__decimals", "type": "uint8" } ], diff --git a/contracts/ProofOfEfficiency.sol b/contracts/ProofOfEfficiency.sol index e0e28d745..6ff82aa80 100644 --- a/contracts/ProofOfEfficiency.sol +++ b/contracts/ProofOfEfficiency.sol @@ -84,20 +84,21 @@ contract ProofOfEfficiency is /** * @notice Struct to call initialize, this basically saves gas becasue pack the parameters that can be packed * and avoid stack too deep errors. - * @param _admin admin address - * @param _chainID L2 chainID - * @param _trustedSequencer trusted sequencer address - * @param _forceBatchAllowed indicates wheather the force batch functionality is available - * @param _trustedAggregator trusted aggregator - * @param _trustedAggregatorTimeout trusted aggregator timeou + * @param admin admin address + * @param chainID L2 chainID + * @param trustedSequencer trusted sequencer address + * @param forceBatchAllowed indicates wheather the force batch functionality is available + * @param trustedAggregator trusted aggregator + * @param trustedAggregatorTimeout trusted aggregator timeou */ struct InitializePackedParameters { - address _admin; - uint64 _chainID; - address _trustedSequencer; - bool _forceBatchAllowed; - address _trustedAggregator; - uint64 _trustedAggregatorTimeout; + address admin; + uint64 chainID; + address trustedSequencer; + uint64 pendingStateTimeout; + bool forceBatchAllowed; + address trustedAggregator; + uint64 trustedAggregatorTimeout; } // Modulus zkSNARK @@ -126,6 +127,10 @@ contract ProofOfEfficiency is // Maximum trusted aggregator timeout that can be set uint64 public constant MAX_TRUSTED_AGGREGATOR_TIMEOUT = 1 weeks; + // Maximum batches that can be verified in one call TODO depends on our current metrics + // This should be a protection against someone that trys to generate huge chunk of invalid batches, and we can't prove otherwise before the pending timeout expires + uint64 public constant MAX_VERIFY_BATCHES = 1000; + // MATIC token address IERC20Upgradeable public matic; @@ -210,7 +215,7 @@ contract ProofOfEfficiency is // everyone can aggregate that batch uint64 public trustedAggregatorTimeout; - // Address that will be able to udpate contract parameters or stop the emergency state + // Address that will be able to adjust contract parameters or stop the emergency state address public admin; /** @@ -293,11 +298,20 @@ contract ProofOfEfficiency is /** * @dev Emitted when is proved a different state given the same batches */ - event ProveNonDeterministicState( + event ProveNonDeterministicPendingState( bytes32 storedStateRoot, bytes32 provedStateRoot ); + /** + * @dev Emitted when the trusted aggregator overrides pending state + */ + event OverridePendingState( + uint64 indexed numBatch, + bytes32 stateRoot, + address indexed aggregator + ); + /** * @param _globalExitRootManager global exit root manager address * @param _matic MATIC token address @@ -322,14 +336,15 @@ contract ProofOfEfficiency is matic = _matic; rollupVerifier = _rollupVerifier; bridgeAddress = _bridgeAddress; - admin = initializePackedParameters._admin; - trustedSequencer = initializePackedParameters._trustedSequencer; - trustedAggregator = initializePackedParameters._trustedAggregator; + admin = initializePackedParameters.admin; + trustedSequencer = initializePackedParameters.trustedSequencer; + trustedAggregator = initializePackedParameters.trustedAggregator; batchNumToStateRoot[0] = genesisRoot; trustedAggregatorTimeout = initializePackedParameters - ._trustedAggregatorTimeout; - chainID = initializePackedParameters._chainID; - forceBatchAllowed = initializePackedParameters._forceBatchAllowed; + .trustedAggregatorTimeout; + chainID = initializePackedParameters.chainID; + pendingStateTimeout = initializePackedParameters.pendingStateTimeout; + forceBatchAllowed = initializePackedParameters.forceBatchAllowed; trustedSequencerURL = _trustedSequencerURL; networkName = _networkName; @@ -509,90 +524,28 @@ contract ProofOfEfficiency is uint256[2][2] calldata proofB, uint256[2] calldata proofC ) public ifNotEmergencyState { - // Check if the trusted aggregator timeout expired, and the batch can be verified by another aggregator + // Check if the trusted aggregator timeout expired require( sequencedBatches[finalNewBatch].sequencedTimestamp + trustedAggregatorTimeout <= block.timestamp, "ProofOfEfficiency::verifyBatches: trusted aggregator timeout not expired" ); - bytes32 oldStateRoot; - uint64 currentLastVerifiedBatch; - // Get the last pending state if there's one, otherwise check consolidate state - if (lastPendingState > 0) { - currentLastVerifiedBatch = pendingStateTransitions[lastPendingState] - .lastVerifiedBatch; - } else { - currentLastVerifiedBatch = lastVerifiedBatch; - } - - // Use pending state if specified, otherwise use consolidated state - if (pendingStateNum != 0) { - // Check that pending state exist - // Already consolidated pending states can be used aswell - require( - pendingStateNum <= lastPendingState, - "ProofOfEfficiency::verifyBatches: pendingStateNum must be less or equal than lastPendingState" - ); - - // Check choosen pending state - PendingState storage currentPendingState = pendingStateTransitions[ - pendingStateNum - ]; - - // Get oldStateRoot from pending batch - oldStateRoot = currentPendingState.stateRoot; - - // Check initNumBatch matches the pending state - require( - initNumBatch == currentPendingState.lastVerifiedBatch, - "ProofOfEfficiency::verifyBatches: initNumBatch must match the pending state batch" - ); - } else { - // Use consolidated state - require( - batchNumToStateRoot[initNumBatch] != bytes32(0), - "ProofOfEfficiency::verifyBatches: initNumBatch state root does not exist" - ); - oldStateRoot = batchNumToStateRoot[initNumBatch]; - - // Check initNumBatch is inside the range - require( - initNumBatch <= currentLastVerifiedBatch, - "ProofOfEfficiency::verifyBatches: initNumBatch must be less or equal than currentLastVerifiedBatch" - ); - } - - // Check final batch require( - finalNewBatch > currentLastVerifiedBatch, - "ProofOfEfficiency::verifyBatches: finalNewBatch must be bigger than currentLastVerifiedBatch" + finalNewBatch - initNumBatch < MAX_VERIFY_BATCHES, + "ProofOfEfficiency::verifyBatches: cannot verify that many batches" ); - // Get snark bytes - bytes memory snarkHashBytes = getInputSnarkBytes( + _verifyBatches( + pendingStateNum, initNumBatch, finalNewBatch, newLocalExitRoot, - oldStateRoot, - newStateRoot - ); - - // Calulate the snark input - uint256 inputSnark = uint256(sha256(snarkHashBytes)) % _RFIELD; - - // Verify proof - require( - rollupVerifier.verifyProof(proofA, proofB, proofC, [inputSnark]), - "ProofOfEfficiency::verifyBatches: INVALID_PROOF" - ); - - // Get MATIC reward - matic.safeTransfer( - msg.sender, - calculateRewardPerBatch() * - (finalNewBatch - currentLastVerifiedBatch) + newStateRoot, + proofA, + proofB, + proofC ); // Consolidate pending state if possible @@ -612,6 +565,7 @@ contract ProofOfEfficiency is /** * @notice Allows an aggregator to verify multiple batches + * @param pendingStateNum Init pending state, 0 when consolidated state is used * @param initNumBatch Batch which the aggregator starts the verification * @param finalNewBatch Last batch aggregator intends to verify * @param newLocalExitRoot New local exit root once the batch is processed @@ -630,18 +584,57 @@ contract ProofOfEfficiency is uint256[2][2] calldata proofB, uint256[2] calldata proofC ) public onlyTrustedAggregator { - bytes32 oldStateRoot; - uint64 currentLastVerifiedBatch; + _verifyBatches( + pendingStateNum, + initNumBatch, + finalNewBatch, + newLocalExitRoot, + newStateRoot, + proofA, + proofB, + proofC + ); + + // Consolidate state state + lastVerifiedBatch = finalNewBatch; + batchNumToStateRoot[finalNewBatch] = newStateRoot; - // Get the last pending state if there's one, otherwise check consolidate state + // Clean pending state if any if (lastPendingState > 0) { - currentLastVerifiedBatch = pendingStateTransitions[lastPendingState] - .lastVerifiedBatch; - } else { - currentLastVerifiedBatch = lastVerifiedBatch; + lastPendingState = 0; + lastPendingStateConsolidated = 0; } - // Use pending state if especified, otherwise use consolidate state + // Interact with globalExitRootManager + globalExitRootManager.updateExitRoot(newLocalExitRoot); + + emit TrustedVerifyBatches(finalNewBatch, newStateRoot, msg.sender); + } + + /** + * @notice Verify batches internal function + * @param initNumBatch Batch which the aggregator starts the verification + * @param finalNewBatch Last batch aggregator intends to verify + * @param newLocalExitRoot New local exit root once the batch is processed + * @param newStateRoot New State root once the batch is processed + * @param proofA zk-snark input + * @param proofB zk-snark input + * @param proofC zk-snark input + */ + function _verifyBatches( + uint64 pendingStateNum, + uint64 initNumBatch, + uint64 finalNewBatch, + bytes32 newLocalExitRoot, + bytes32 newStateRoot, + uint256[2] calldata proofA, + uint256[2][2] calldata proofB, + uint256[2] calldata proofC + ) internal { + bytes32 oldStateRoot; + uint64 currentLastVerifiedBatch = getLastVerifiedBatch(); + + // Use pending state if specified, otherwise use consolidated state if (pendingStateNum != 0) { // Check that pending state exist // Already consolidated pending states can be used aswell @@ -654,29 +647,31 @@ contract ProofOfEfficiency is PendingState storage currentPendingState = pendingStateTransitions[ pendingStateNum ]; + + // Get oldStateRoot from pending batch oldStateRoot = currentPendingState.stateRoot; - // Assert init batch + // Check initNumBatch matches the pending state require( initNumBatch == currentPendingState.lastVerifiedBatch, - "ProofOfEfficiency::verifyBatches: initNumBatch must be less or equal than currentLastVerifiedBatch" + "ProofOfEfficiency::verifyBatches: initNumBatch must match the pending state batch" ); } else { // Use consolidated state + oldStateRoot = batchNumToStateRoot[initNumBatch]; require( oldStateRoot != bytes32(0), "ProofOfEfficiency::verifyBatches: initNumBatch state root does not exist" ); - oldStateRoot = batchNumToStateRoot[initNumBatch]; - // Assert init batch + // Check initNumBatch is inside the range require( initNumBatch <= currentLastVerifiedBatch, "ProofOfEfficiency::verifyBatches: initNumBatch must be less or equal than currentLastVerifiedBatch" ); } - // Assert final batch + // Check final batch require( finalNewBatch > currentLastVerifiedBatch, "ProofOfEfficiency::verifyBatches: finalNewBatch must be bigger than currentLastVerifiedBatch" @@ -706,38 +701,22 @@ contract ProofOfEfficiency is calculateRewardPerBatch() * (finalNewBatch - currentLastVerifiedBatch) ); - - // Update state - lastVerifiedBatch = finalNewBatch; - batchNumToStateRoot[finalNewBatch] = newStateRoot; - - // Clean pending state if any - if (lastPendingState > 0) { - lastPendingState = 0; - lastPendingStateConsolidated = 0; - } - - // Interact with globalExitRootManager - globalExitRootManager.updateExitRoot(newLocalExitRoot); - - emit TrustedVerifyBatches(finalNewBatch, newStateRoot, msg.sender); } /** - * @notice Internal function to consolidate the next pending state if possible - * Otherwise do nothing + * @notice Internal function to consolidate the state automatically once sequence or verify batches are called + * It trys to consolidatethe first and the middle pending state */ function _consolidateNextPendingState() internal { + // Check if there's any state to consolidate if (lastPendingState > lastPendingStateConsolidated) { // Check if it's possible to consolidate the next pending state uint64 nextPendingState = lastPendingStateConsolidated + 1; - if ( pendingStateTransitions[nextPendingState].timestamp + pendingStateTimeout <= block.timestamp ) { - // TODO // Check middle pending state ( binary search of 1 step) uint64 middlePendingState = nextPendingState + (lastPendingState - nextPendingState) / @@ -764,6 +743,7 @@ contract ProofOfEfficiency is */ function consolidatePendingState(uint64 pendingStateNum) public { // Check if pendingStateNum is in correct range + // Not 0, is not consolidated, and exist require( pendingStateNum != 0 && pendingStateNum > lastPendingStateConsolidated && @@ -939,6 +919,8 @@ contract ProofOfEfficiency is emit SequenceForceBatches(lastBatchSequenced); } + // admin functions + /** * @notice Allow the current trusted sequencer to set a new trusted sequencer * @param newTrustedSequencer Address of the new trusted sequuencer @@ -1017,8 +999,63 @@ contract ProofOfEfficiency is emit SetAdmin(newAdmin); } + // Soundness protection mechanisms + + /** + * @notice Allows to halt the PoE if its possible to prove a different state root given the same batches + * @param initPendingStateNum Init pending state, 0 when consolidated state is used + * @param finalPendingStateNum Final pending state, that will be used to compare with the newStateRoot + * @param initNumBatch Batch which the aggregator starts the verification + * @param finalNewBatch Last batch aggregator intends to verify + * @param newLocalExitRoot New local exit root once the batch is processed + * @param newStateRoot New State root once the batch is processed + * @param proofA zk-snark input + * @param proofB zk-snark input + * @param proofC zk-snark input + */ + function overridePendingState( + uint64 initPendingStateNum, + uint64 finalPendingStateNum, + uint64 initNumBatch, + uint64 finalNewBatch, + bytes32 newLocalExitRoot, + bytes32 newStateRoot, + uint256[2] calldata proofA, + uint256[2][2] calldata proofB, + uint256[2] calldata proofC + ) public onlyTrustedAggregator { + _proveDistinctPendingState( + initPendingStateNum, + finalPendingStateNum, + initNumBatch, + finalNewBatch, + newLocalExitRoot, + newStateRoot, + proofA, + proofB, + proofC + ); + + // Consolidate state state + lastVerifiedBatch = finalNewBatch; + batchNumToStateRoot[finalNewBatch] = newStateRoot; + + // Clean pending state if any + if (lastPendingState > 0) { + lastPendingState = 0; + lastPendingStateConsolidated = 0; + } + + // Interact with globalExitRootManager + globalExitRootManager.updateExitRoot(newLocalExitRoot); + + emit OverridePendingState(finalNewBatch, newStateRoot, msg.sender); + } + /** * @notice Allows to halt the PoE if its possible to prove a different state root given the same batches + * @param initPendingStateNum Init pending state, 0 when consolidated state is used + * @param finalPendingStateNum Final pending state, that will be used to compare with the newStateRoot * @param initNumBatch Batch which the aggregator starts the verification * @param finalNewBatch Last batch aggregator intends to verify * @param newLocalExitRoot New local exit root once the batch is processed @@ -1038,6 +1075,50 @@ contract ProofOfEfficiency is uint256[2][2] calldata proofB, uint256[2] calldata proofC ) public ifNotEmergencyState { + _proveDistinctPendingState( + initPendingStateNum, + finalPendingStateNum, + initNumBatch, + finalNewBatch, + newLocalExitRoot, + newStateRoot, + proofA, + proofB, + proofC + ); + + emit ProveNonDeterministicPendingState( + batchNumToStateRoot[finalNewBatch], + newStateRoot + ); + + // Activate emergency state + _activateEmergencyState(); + } + + /** + * @notice Internal functoin that prove a different state root given the same batches to verify + * @param initPendingStateNum Init pending state, 0 when consolidated state is used + * @param finalPendingStateNum Final pending state, that will be used to compare with the newStateRoot + * @param initNumBatch Batch which the aggregator starts the verification + * @param finalNewBatch Last batch aggregator intends to verify + * @param newLocalExitRoot New local exit root once the batch is processed + * @param newStateRoot New State root once the batch is processed + * @param proofA zk-snark input + * @param proofB zk-snark input + * @param proofC zk-snark input + */ + function _proveDistinctPendingState( + uint64 initPendingStateNum, + uint64 finalPendingStateNum, + uint64 initNumBatch, + uint64 finalNewBatch, + bytes32 newLocalExitRoot, + bytes32 newStateRoot, + uint256[2] calldata proofA, + uint256[2][2] calldata proofB, + uint256[2] calldata proofC + ) internal view { bytes32 oldStateRoot; // Use pending state if specified, otherwise use consolidated state @@ -1064,11 +1145,11 @@ contract ProofOfEfficiency is ); } else { // Use consolidated state + oldStateRoot = batchNumToStateRoot[initNumBatch]; require( - batchNumToStateRoot[initNumBatch] != bytes32(0), + oldStateRoot != bytes32(0), "ProofOfEfficiency::proveNonDeterministicPendingState: initNumBatch state root does not exist" ); - oldStateRoot = batchNumToStateRoot[initNumBatch]; // Check initNumBatch is inside the range require( @@ -1078,7 +1159,7 @@ contract ProofOfEfficiency is } // Assert final pending state num is in correct range - // Exist, is bigger than the initPending state, and it's not consolidated + // Exist, is bigger than the initPendingstate, and it's not consolidated require( finalPendingStateNum <= lastPendingState && finalPendingStateNum > initPendingStateNum && @@ -1093,6 +1174,7 @@ contract ProofOfEfficiency is "ProofOfEfficiency::proveNonDeterministicPendingState: finalNewBatch must be bigger than currentLastVerifiedBatch" ); + // Get snark bytes bytes memory snarkHashBytes = getInputSnarkBytes( initNumBatch, finalNewBatch, @@ -1115,14 +1197,6 @@ contract ProofOfEfficiency is newStateRoot, "ProofOfEfficiency::proveNonDeterministicPendingState: stored root must be different than new state root" ); - - emit ProveNonDeterministicState( - batchNumToStateRoot[finalNewBatch], - newStateRoot - ); - - // Activate emergency state - _activateEmergencyState(); } /** @@ -1170,12 +1244,23 @@ contract ProofOfEfficiency is } /** - * @notice Function to calculate the fee that must be payed for every batch + * @notice Function to get the last verified batch */ function calculateBatchFee() public view returns (uint256) { return 1 ether * uint256(1 + lastForceBatch - lastForceBatchSequenced); } + /** + * @notice Get the last verified batch + */ + function getLastVerifiedBatch() public view returns (uint64) { + if (lastPendingState > 0) { + return pendingStateTransitions[lastPendingState].lastVerifiedBatch; + } else { + return lastVerifiedBatch; + } + } + /** * @notice Function to calculate the reward to verify a single batch */ @@ -1185,9 +1270,9 @@ contract ProofOfEfficiency is // Total Sequenced Batches = forcedBatches to be sequenced (total forced Batches - sequenced Batches) + sequencedBatches // Total Batches to be verified = Total Sequenced Batches - verified Batches uint256 totalBatchesToVerify = ((lastForceBatch - - lastForceBatchSequenced) + lastBatchSequenced) - lastVerifiedBatch; + lastForceBatchSequenced) + lastBatchSequenced) - + getLastVerifiedBatch(); - // TODO GET LAST VERIFIES BATCH in account of pending state return currentBalance / totalBatchesToVerify; } diff --git a/contracts/lib/TokenWrapped.sol b/contracts/lib/TokenWrapped.sol index 92b7609d2..a979c6065 100644 --- a/contracts/lib/TokenWrapped.sol +++ b/contracts/lib/TokenWrapped.sol @@ -45,10 +45,10 @@ contract TokenWrapped is ERC20 { constructor( string memory name, string memory symbol, - uint8 decimals + uint8 __decimals ) ERC20(name, symbol) { bridgeAddress = msg.sender; - _decimals = decimals; + _decimals = __decimals; // initialize inmutable variables deploymentChainId = block.chainid; diff --git a/docs/ProofOfEfficiency.md b/docs/ProofOfEfficiency.md index 6e821e54c..fc64d194a 100644 --- a/docs/ProofOfEfficiency.md +++ b/docs/ProofOfEfficiency.md @@ -77,6 +77,34 @@ Allows an aggregator to verify multiple batches ### trustedVerifyBatches ```solidity function trustedVerifyBatches( + uint64 pendingStateNum, + uint64 initNumBatch, + uint64 finalNewBatch, + bytes32 newLocalExitRoot, + bytes32 newStateRoot, + uint256[2] proofA, + uint256[2][2] proofB, + uint256[2] proofC + ) public +``` +Allows an aggregator to verify multiple batches + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`pendingStateNum` | uint64 | Init pending state, 0 when consolidated state is used +|`initNumBatch` | uint64 | Batch which the aggregator starts the verification +|`finalNewBatch` | uint64 | Last batch aggregator intends to verify +|`newLocalExitRoot` | bytes32 | New local exit root once the batch is processed +|`newStateRoot` | bytes32 | New State root once the batch is processed +|`proofA` | uint256[2] | zk-snark input +|`proofB` | uint256[2][2] | zk-snark input +|`proofC` | uint256[2] | zk-snark input + +### _verifyBatches +```solidity + function _verifyBatches( uint64 initNumBatch, uint64 finalNewBatch, uint64 newLocalExitRoot, @@ -84,9 +112,9 @@ Allows an aggregator to verify multiple batches bytes32 proofA, uint256[2] proofB, uint256[2][2] proofC - ) public + ) internal ``` -Allows an aggregator to verify multiple batches +Verify batches internal function #### Parameters: @@ -105,8 +133,8 @@ Allows an aggregator to verify multiple batches function _consolidateNextPendingState( ) internal ``` -Internal function to consolidate the next pending state if possible -Otherwise do nothing +Internal function to consolidate the state automatically once sequence or verify batches are called +It trys to consolidatethe first and the middle pending state @@ -242,15 +270,47 @@ Allow the current admin to set a new admin address | :--- | :--- | :------------------------------------------------------------------- | |`newAdmin` | address | Address of the new admin +### overridePendingState +```solidity + function overridePendingState( + uint64 initPendingStateNum, + uint64 finalPendingStateNum, + uint64 initNumBatch, + uint64 finalNewBatch, + bytes32 newLocalExitRoot, + bytes32 newStateRoot, + uint256[2] proofA, + uint256[2][2] proofB, + uint256[2] proofC + ) public +``` +Allows to halt the PoE if its possible to prove a different state root given the same batches + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`initPendingStateNum` | uint64 | Init pending state, 0 when consolidated state is used +|`finalPendingStateNum` | uint64 | Final pending state, that will be used to compare with the newStateRoot +|`initNumBatch` | uint64 | Batch which the aggregator starts the verification +|`finalNewBatch` | uint64 | Last batch aggregator intends to verify +|`newLocalExitRoot` | bytes32 | New local exit root once the batch is processed +|`newStateRoot` | bytes32 | New State root once the batch is processed +|`proofA` | uint256[2] | zk-snark input +|`proofB` | uint256[2][2] | zk-snark input +|`proofC` | uint256[2] | zk-snark input + ### proveNonDeterministicPendingState ```solidity function proveNonDeterministicPendingState( + uint64 initPendingStateNum, + uint64 finalPendingStateNum, uint64 initNumBatch, uint64 finalNewBatch, - uint64 newLocalExitRoot, - uint64 newStateRoot, - bytes32 proofA, - bytes32 proofB, + bytes32 newLocalExitRoot, + bytes32 newStateRoot, + uint256[2] proofA, + uint256[2][2] proofB, uint256[2] proofC ) public ``` @@ -260,12 +320,44 @@ Allows to halt the PoE if its possible to prove a different state root given the #### Parameters: | Name | Type | Description | | :--- | :--- | :------------------------------------------------------------------- | +|`initPendingStateNum` | uint64 | Init pending state, 0 when consolidated state is used +|`finalPendingStateNum` | uint64 | Final pending state, that will be used to compare with the newStateRoot |`initNumBatch` | uint64 | Batch which the aggregator starts the verification |`finalNewBatch` | uint64 | Last batch aggregator intends to verify -|`newLocalExitRoot` | uint64 | New local exit root once the batch is processed -|`newStateRoot` | uint64 | New State root once the batch is processed -|`proofA` | bytes32 | zk-snark input -|`proofB` | bytes32 | zk-snark input +|`newLocalExitRoot` | bytes32 | New local exit root once the batch is processed +|`newStateRoot` | bytes32 | New State root once the batch is processed +|`proofA` | uint256[2] | zk-snark input +|`proofB` | uint256[2][2] | zk-snark input +|`proofC` | uint256[2] | zk-snark input + +### _proveDistinctPendingState +```solidity + function _proveDistinctPendingState( + uint64 initPendingStateNum, + uint64 finalPendingStateNum, + uint64 initNumBatch, + uint64 finalNewBatch, + bytes32 newLocalExitRoot, + bytes32 newStateRoot, + uint256[2] proofA, + uint256[2][2] proofB, + uint256[2] proofC + ) internal +``` +Internal functoin that prove a different state root given the same batches to verify + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`initPendingStateNum` | uint64 | Init pending state, 0 when consolidated state is used +|`finalPendingStateNum` | uint64 | Final pending state, that will be used to compare with the newStateRoot +|`initNumBatch` | uint64 | Batch which the aggregator starts the verification +|`finalNewBatch` | uint64 | Last batch aggregator intends to verify +|`newLocalExitRoot` | bytes32 | New local exit root once the batch is processed +|`newStateRoot` | bytes32 | New State root once the batch is processed +|`proofA` | uint256[2] | zk-snark input +|`proofB` | uint256[2][2] | zk-snark input |`proofC` | uint256[2] | zk-snark input ### activateEmergencyState @@ -297,7 +389,16 @@ Function to deactivate emergency state on both PoE and Bridge contrats function calculateBatchFee( ) public returns (uint256) ``` -Function to calculate the fee that must be payed for every batch +Function to get the last verified batch + + + +### getLastVerifiedBatch +```solidity + function getLastVerifiedBatch( + ) public returns (uint64) +``` +Get the last verified batch @@ -436,11 +537,19 @@ Emitted when a trusted aggregator update or renounce his address Emitted when a admin update his address -### ProveNonDeterministicState +### ProveNonDeterministicPendingState ```solidity - event ProveNonDeterministicState( + event ProveNonDeterministicPendingState( ) ``` Emitted when is proved a different state given the same batches +### OverridePendingState +```solidity + event OverridePendingState( + ) +``` + +Emitted when the trusted aggregator overrides pending state + From e6fab0a8581e7dd2b02677015c3b02b72cf28a9f Mon Sep 17 00:00:00 2001 From: invocamanman Date: Fri, 16 Dec 2022 13:05:38 +0100 Subject: [PATCH 36/71] quick test --- contracts/ProofOfEfficiency.sol | 57 ++++++++++++++++++++++++--------- 1 file changed, 42 insertions(+), 15 deletions(-) diff --git a/contracts/ProofOfEfficiency.sol b/contracts/ProofOfEfficiency.sol index 6ff82aa80..27a02bb69 100644 --- a/contracts/ProofOfEfficiency.sol +++ b/contracts/ProofOfEfficiency.sol @@ -712,22 +712,14 @@ contract ProofOfEfficiency is if (lastPendingState > lastPendingStateConsolidated) { // Check if it's possible to consolidate the next pending state uint64 nextPendingState = lastPendingStateConsolidated + 1; - if ( - pendingStateTransitions[nextPendingState].timestamp + - pendingStateTimeout <= - block.timestamp - ) { + if (isPendingStateConsolidable(nextPendingState)) { // Check middle pending state ( binary search of 1 step) uint64 middlePendingState = nextPendingState + (lastPendingState - nextPendingState) / 2; // Try to consolidate it, and if not, consolidate the nextPendingState - if ( - pendingStateTransitions[middlePendingState].timestamp + - pendingStateTimeout <= - block.timestamp - ) { + if (isPendingStateConsolidable(middlePendingState)) { consolidatePendingState(middlePendingState); } else { consolidatePendingState(nextPendingState); @@ -753,17 +745,17 @@ contract ProofOfEfficiency is // Check if pending state can be consolidated // If trusted aggregator is the sender, do not check the timeout - PendingState storage currentPendingState = pendingStateTransitions[ - pendingStateNum - ]; if (msg.sender != trustedAggregator) { require( - currentPendingState.timestamp + pendingStateTimeout <= - block.timestamp, + isPendingStateConsolidable(pendingStateNum), "ProofOfEfficiency::consolidatePendingState: pending state is not ready to be consolidated" ); } + PendingState storage currentPendingState = pendingStateTransitions[ + pendingStateNum + ]; + // Update state uint64 newLastVerifiedBatch = currentPendingState.lastVerifiedBatch; lastVerifiedBatch = newLastVerifiedBatch; @@ -989,6 +981,29 @@ contract ProofOfEfficiency is emit SetTrustedAggregatorTimeout(trustedAggregatorTimeout); } + /** + * @notice Allow the current trusted aggregator to set a new trusted aggregator timeout + * The timeout can only be lowered, except if emergency state is active + * @param newPendingStateTimeout Trusted aggreagator timeout + */ + function setPendingStateTimeout( + uint64 newPendingStateTimeout + ) public onlyAdmin { + require( + pendingStateTimeout <= MAX_TRUSTED_AGGREGATOR_TIMEOUT, + "ProofOfEfficiency::setPendingStateTimeout: exceed max trusted aggregator timeout" + ); + if (!isEmergencyState) { + require( + newPendingStateTimeout < pendingStateTimeout, + "ProofOfEfficiency::setPendingStateTimeout: new timeout must be lower" + ); + } + + pendingStateTimeout = newPendingStateTimeout; + emit SetPendingStateTimeout(newPendingStateTimeout); + } + /** * @notice Allow the current admin to set a new admin address * @param newAdmin Address of the new admin @@ -1261,6 +1276,18 @@ contract ProofOfEfficiency is } } + /** + * @notice Returns a boolean indicatinf is the pendingStateNum is or not consolidable + * Note that his function do not check if the pending state currently exist, or if it's consolidated already + */ + function isPendingStateConsolidable( + uint64 pendingStateNum + ) public view returns (bool) { + return (pendingStateTransitions[pendingStateNum].timestamp + + pendingStateTimeout <= + block.timestamp); + } + /** * @notice Function to calculate the reward to verify a single batch */ From 35e380f96925c29a4c2e207a3933fcbdef2569ee Mon Sep 17 00:00:00 2001 From: invocamanman Date: Fri, 16 Dec 2022 14:57:52 +0100 Subject: [PATCH 37/71] asd --- compiled-contracts/ProofOfEfficiency.json | 58 ++++++++++++++----- compiled-contracts/ProofOfEfficiencyMock.json | 58 ++++++++++++++----- contracts/ProofOfEfficiency.sol | 37 ++++++++---- docs/ProofOfEfficiency.md | 43 ++++++++++++-- 4 files changed, 153 insertions(+), 43 deletions(-) diff --git a/compiled-contracts/ProofOfEfficiency.json b/compiled-contracts/ProofOfEfficiency.json index fddd32fe4..45d83e950 100644 --- a/compiled-contracts/ProofOfEfficiency.json +++ b/compiled-contracts/ProofOfEfficiency.json @@ -199,6 +199,19 @@ "name": "SetForceBatchAllowed", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "newPendingStateTimeout", + "type": "uint64" + } + ], + "name": "SetPendingStateTimeout", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -340,19 +353,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "MAX_TRUSTED_AGGREGATOR_TIMEOUT", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "MAX_VERIFY_BATCHES", @@ -696,6 +696,25 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "pendingStateNum", + "type": "uint64" + } + ], + "name": "isPendingStateConsolidable", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "lastBatchSequenced", @@ -1114,6 +1133,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "newPendingStateTimeout", + "type": "uint64" + } + ], + "name": "setPendingStateTimeout", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { diff --git a/compiled-contracts/ProofOfEfficiencyMock.json b/compiled-contracts/ProofOfEfficiencyMock.json index 83948ba4e..7b828da51 100644 --- a/compiled-contracts/ProofOfEfficiencyMock.json +++ b/compiled-contracts/ProofOfEfficiencyMock.json @@ -199,6 +199,19 @@ "name": "SetForceBatchAllowed", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "newPendingStateTimeout", + "type": "uint64" + } + ], + "name": "SetPendingStateTimeout", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -340,19 +353,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "MAX_TRUSTED_AGGREGATOR_TIMEOUT", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "MAX_VERIFY_BATCHES", @@ -774,6 +774,25 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "pendingStateNum", + "type": "uint64" + } + ], + "name": "isPendingStateConsolidable", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "lastBatchSequenced", @@ -1205,6 +1224,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "newPendingStateTimeout", + "type": "uint64" + } + ], + "name": "setPendingStateTimeout", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { diff --git a/contracts/ProofOfEfficiency.sol b/contracts/ProofOfEfficiency.sol index 27a02bb69..71492cac4 100644 --- a/contracts/ProofOfEfficiency.sol +++ b/contracts/ProofOfEfficiency.sol @@ -124,9 +124,6 @@ contract ProofOfEfficiency is // If the time that a batch remains sequenced exceeds this timeout, the contract enters in emergency mode uint64 public constant HALT_AGGREGATION_TIMEOUT = 1 weeks; - // Maximum trusted aggregator timeout that can be set - uint64 public constant MAX_TRUSTED_AGGREGATOR_TIMEOUT = 1 weeks; - // Maximum batches that can be verified in one call TODO depends on our current metrics // This should be a protection against someone that trys to generate huge chunk of invalid batches, and we can't prove otherwise before the pending timeout expires uint64 public constant MAX_VERIFY_BATCHES = 1000; @@ -266,27 +263,32 @@ contract ProofOfEfficiency is ); /** - * @dev Emitted when a trusted sequencer update his address + * @dev Emitted when the admin update the trusted sequencer address */ event SetTrustedSequencer(address newTrustedSequencer); /** - * @dev Emitted when a trusted sequencer update the forcebatch boolean + * @dev Emitted when the admin update the forcebatch boolean */ event SetForceBatchAllowed(bool newForceBatchAllowed); /** - * @dev Emitted when a trusted sequencer update his URL + * @dev Emitted when the admin update the seequencer URL */ event SetTrustedSequencerURL(string newTrustedSequencerURL); /** - * @dev Emitted when a trusted aggregator update the trusted aggregator timeout + * @dev Emitted when the admin update the trusted aggregator timeout */ event SetTrustedAggregatorTimeout(uint64 newTrustedAggregatorTimeout); /** - * @dev Emitted when a trusted aggregator update or renounce his address + * @dev Emitted when the admin update the pending state timeout + */ + event SetPendingStateTimeout(uint64 newPendingStateTimeout); + + /** + * @dev Emitted when the admin update the trusted aggregator address */ event SetTrustedAggregator(address newTrustedAggregator); @@ -396,6 +398,12 @@ contract ProofOfEfficiency is batchesNum > 0, "ProofOfEfficiency::sequenceBatches: At least must sequence 1 batch" ); + + require( + batchesNum < MAX_VERIFY_BATCHES, + "ProofOfEfficiency::verifyBatches: cannot verify that many batches" + ); + // Store storage variables in memory, to save gas, because will be overrided multiple times uint64 currentTimestamp = lastTimestamp; uint64 currentBatchSequenced = lastBatchSequenced; @@ -843,6 +851,11 @@ contract ProofOfEfficiency is "ProofOfEfficiency::sequenceForceBatch: Must force at least 1 batch" ); + require( + batchesNum < MAX_VERIFY_BATCHES, + "ProofOfEfficiency::verifyBatches: cannot verify that many batches" + ); + require( lastForceBatchSequenced + batchesNum <= lastForceBatch, "ProofOfEfficiency::sequenceForceBatch: Force batch invalid" @@ -967,8 +980,8 @@ contract ProofOfEfficiency is uint64 newTrustedAggregatorTimeout ) public onlyAdmin { require( - trustedAggregatorTimeout <= MAX_TRUSTED_AGGREGATOR_TIMEOUT, - "ProofOfEfficiency::setTrustedAggregatorTimeout: exceed max trusted aggregator timeout" + newTrustedAggregatorTimeout <= HALT_AGGREGATION_TIMEOUT, + "ProofOfEfficiency::setPendingStateTimeout: exceed halt aggregation timeout" ); if (!isEmergencyState) { require( @@ -990,8 +1003,8 @@ contract ProofOfEfficiency is uint64 newPendingStateTimeout ) public onlyAdmin { require( - pendingStateTimeout <= MAX_TRUSTED_AGGREGATOR_TIMEOUT, - "ProofOfEfficiency::setPendingStateTimeout: exceed max trusted aggregator timeout" + pendingStateTimeout <= HALT_AGGREGATION_TIMEOUT, + "ProofOfEfficiency::setPendingStateTimeout: exceed halt aggregation timeout" ); if (!isEmergencyState) { require( diff --git a/docs/ProofOfEfficiency.md b/docs/ProofOfEfficiency.md index fc64d194a..1b21fd0bc 100644 --- a/docs/ProofOfEfficiency.md +++ b/docs/ProofOfEfficiency.md @@ -256,6 +256,21 @@ The timeout can only be lowered, except if emergency state is active | :--- | :--- | :------------------------------------------------------------------- | |`newTrustedAggregatorTimeout` | uint64 | Trusted aggreagator timeout +### setPendingStateTimeout +```solidity + function setPendingStateTimeout( + uint64 newPendingStateTimeout + ) public +``` +Allow the current trusted aggregator to set a new trusted aggregator timeout +The timeout can only be lowered, except if emergency state is active + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`newPendingStateTimeout` | uint64 | Trusted aggreagator timeout + ### setAdmin ```solidity function setAdmin( @@ -402,6 +417,16 @@ Get the last verified batch +### isPendingStateConsolidable +```solidity + function isPendingStateConsolidable( + ) public returns (bool) +``` +Returns a boolean indicatinf is the pendingStateNum is or not consolidable +Note that his function do not check if the pending state currently exist, or if it's consolidated already + + + ### calculateRewardPerBatch ```solidity function calculateRewardPerBatch( @@ -495,7 +520,7 @@ Emitted when pending state is consolidated ) ``` -Emitted when a trusted sequencer update his address +Emitted when the admin update the trusted sequencer address ### SetForceBatchAllowed ```solidity @@ -503,7 +528,7 @@ Emitted when a trusted sequencer update his address ) ``` -Emitted when a trusted sequencer update the forcebatch boolean +Emitted when the admin update the forcebatch boolean ### SetTrustedSequencerURL ```solidity @@ -511,7 +536,7 @@ Emitted when a trusted sequencer update the forcebatch boolean ) ``` -Emitted when a trusted sequencer update his URL +Emitted when the admin update the seequencer URL ### SetTrustedAggregatorTimeout ```solidity @@ -519,7 +544,15 @@ Emitted when a trusted sequencer update his URL ) ``` -Emitted when a trusted aggregator update the trusted aggregator timeout +Emitted when the admin update the trusted aggregator timeout + +### SetPendingStateTimeout +```solidity + event SetPendingStateTimeout( + ) +``` + +Emitted when the admin update the pending state timeout ### SetTrustedAggregator ```solidity @@ -527,7 +560,7 @@ Emitted when a trusted aggregator update the trusted aggregator timeout ) ``` -Emitted when a trusted aggregator update or renounce his address +Emitted when the admin update the trusted aggregator address ### SetAdmin ```solidity From 7c0d989e4e8a9ff6a3471e92e72312a4a65d72ae Mon Sep 17 00:00:00 2001 From: invocamanman Date: Fri, 16 Dec 2022 16:35:44 +0100 Subject: [PATCH 38/71] update sequenceBatchesStruct --- contracts/ProofOfEfficiency.sol | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/contracts/ProofOfEfficiency.sol b/contracts/ProofOfEfficiency.sol index 71492cac4..782377e5e 100644 --- a/contracts/ProofOfEfficiency.sol +++ b/contracts/ProofOfEfficiency.sol @@ -64,6 +64,7 @@ contract ProofOfEfficiency is struct SequencedBatchData { bytes32 accInputHash; uint64 sequencedTimestamp; + uint64 previousLastBatchSequenced; } /** @@ -491,13 +492,15 @@ contract ProofOfEfficiency is (currentLastForceBatchSequenced - lastForceBatchSequenced); // Store back the storage variables - lastTimestamp = currentTimestamp; - lastBatchSequenced = currentBatchSequenced; - lastForceBatchSequenced = currentLastForceBatchSequenced; + sequencedBatches[currentBatchSequenced] = SequencedBatchData({ accInputHash: currentAccInputHash, - sequencedTimestamp: uint64(block.timestamp) + sequencedTimestamp: uint64(block.timestamp), + previousLastBatchSequenced: lastBatchSequenced }); + lastTimestamp = currentTimestamp; + lastBatchSequenced = currentBatchSequenced; + lastForceBatchSequenced = currentLastForceBatchSequenced; // Pay collateral for every batch submitted matic.safeTransferFrom( @@ -914,12 +917,14 @@ contract ProofOfEfficiency is lastTimestamp = uint64(block.timestamp); // Store back the storage variables - lastBatchSequenced = currentBatchSequenced; - lastForceBatchSequenced = currentLastForceBatchSequenced; + sequencedBatches[currentBatchSequenced] = SequencedBatchData({ accInputHash: currentAccInputHash, - sequencedTimestamp: uint64(block.timestamp) + sequencedTimestamp: uint64(block.timestamp), + previousLastBatchSequenced: lastBatchSequenced }); + lastBatchSequenced = currentBatchSequenced; + lastForceBatchSequenced = currentLastForceBatchSequenced; emit SequenceForceBatches(lastBatchSequenced); } From 2ae0e463cd9767fbe6498d48ca8128dd4ff3fb06 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Sun, 18 Dec 2022 18:04:34 +0100 Subject: [PATCH 39/71] fees --- contracts/ProofOfEfficiency.sol | 131 +++++++++++++++++++++++++++--- contracts/lib/DepositContract.sol | 2 +- docs/ProofOfEfficiency.md | 10 +++ 3 files changed, 130 insertions(+), 13 deletions(-) diff --git a/contracts/ProofOfEfficiency.sol b/contracts/ProofOfEfficiency.sol index 782377e5e..86761b9da 100644 --- a/contracts/ProofOfEfficiency.sol +++ b/contracts/ProofOfEfficiency.sol @@ -129,6 +129,13 @@ contract ProofOfEfficiency is // This should be a protection against someone that trys to generate huge chunk of invalid batches, and we can't prove otherwise before the pending timeout expires uint64 public constant MAX_VERIFY_BATCHES = 1000; + // Time target of the verification of a batch. + // Adaptatly the batchFee will be updated to achieve this target + uint64 public constant VERIFY_BATCH_TIME_TARGET = 30 minutes; + + // Batch fee multiplier with 1 decimal (1.1) + uint256 public constant MULTIPLIER_BATCH_FEE = 11; + // MATIC token address IERC20Upgradeable public matic; @@ -216,6 +223,9 @@ contract ProofOfEfficiency is // Address that will be able to adjust contract parameters or stop the emergency state address public admin; + // Current matic fee per batch sequenced + uint256 public batchFee; + /** * @dev Emitted when the trusted sequencer sends a new batch of transactions */ @@ -492,7 +502,6 @@ contract ProofOfEfficiency is (currentLastForceBatchSequenced - lastForceBatchSequenced); // Store back the storage variables - sequencedBatches[currentBatchSequenced] = SequencedBatchData({ accInputHash: currentAccInputHash, sequencedTimestamp: uint64(block.timestamp), @@ -503,6 +512,7 @@ contract ProofOfEfficiency is lastForceBatchSequenced = currentLastForceBatchSequenced; // Pay collateral for every batch submitted + // should submit max matic to pay TODO matic.safeTransferFrom( msg.sender, address(this), @@ -559,17 +569,35 @@ contract ProofOfEfficiency is proofC ); - // Consolidate pending state if possible - _consolidateNextPendingState(); + // Update batch fees + _updateBatchFee(finalNewBatch); - // Update pending state - lastPendingState++; - pendingStateTransitions[lastPendingState] = PendingState({ - timestamp: uint64(block.timestamp), - lastVerifiedBatch: finalNewBatch, - exitRoot: newLocalExitRoot, - stateRoot: newStateRoot - }); + if (pendingStateTimeout == 0) { + // Consolidate state + lastVerifiedBatch = finalNewBatch; + batchNumToStateRoot[finalNewBatch] = newStateRoot; + + // Clean pending state if any + if (lastPendingState > 0) { + lastPendingState = 0; + lastPendingStateConsolidated = 0; + } + + // Interact with globalExitRootManager + globalExitRootManager.updateExitRoot(newLocalExitRoot); + } else { + // Consolidate pending state if possible + _consolidateNextPendingState(); + + // Update pending state + lastPendingState++; + pendingStateTransitions[lastPendingState] = PendingState({ + timestamp: uint64(block.timestamp), + lastVerifiedBatch: finalNewBatch, + exitRoot: newLocalExitRoot, + stateRoot: newStateRoot + }); + } emit VerifyBatches(finalNewBatch, newStateRoot, msg.sender); } @@ -606,7 +634,7 @@ contract ProofOfEfficiency is proofC ); - // Consolidate state state + // Consolidate state lastVerifiedBatch = finalNewBatch; batchNumToStateRoot[finalNewBatch] = newStateRoot; @@ -1082,6 +1110,9 @@ contract ProofOfEfficiency is // Interact with globalExitRootManager globalExitRootManager.updateExitRoot(newLocalExitRoot); + // Update trusted aggregator timeout to max + trustedAggregatorTimeout = HALT_AGGREGATION_TIMEOUT; + emit OverridePendingState(finalNewBatch, newStateRoot, msg.sender); } @@ -1276,6 +1307,82 @@ contract ProofOfEfficiency is super._deactivateEmergencyState(); } + /** + * @notice Function to update the batch fee based on the new verfied batches + * The batch fee will not be updated when the trusted aggregator verify batches + */ + function _updateBatchFee(uint64 newLastVerifiedBatch) internal { + uint64 currentLastVerifiedBatch = getLastVerifiedBatch(); + uint64 currentBatch = newLastVerifiedBatch; + + uint256 totalBatchesAboveTarget; + uint256 newBatchesVerified = newLastVerifiedBatch - + currentLastVerifiedBatch; + + while (currentBatch != currentLastVerifiedBatch) { + // Load sequenced batchdata + SequencedBatchData + storage currentSequencedBatchData = sequencedBatches[ + currentLastVerifiedBatch + ]; + + // Check if timestamp is above or below the VERIFY_BATCH_TIME_TARGET + if ( + block.timestamp - currentSequencedBatchData.sequencedTimestamp > + VERIFY_BATCH_TIME_TARGET + ) { + totalBatchesAboveTarget += + currentLastVerifiedBatch - + currentSequencedBatchData.previousLastBatchSequenced; + } + + // update currentLastVerifiedBatch + currentBatch = currentSequencedBatchData.previousLastBatchSequenced; + } + + uint256 totalBatchesBelowTarget = newBatchesVerified - + totalBatchesAboveTarget; + + // Assume that batch fee will be max 128 bits, therefore: + // MULTIPLIER_BATCH_FEE --> (< 4 bits) + // MULTIPLIER_BATCH_FEE^32 --> (< 128 bits) + // (< 128 bits) * (< 128 bits) = < 256 bits + if (totalBatchesBelowTarget < totalBatchesAboveTarget) { + uint256 diffBatches = totalBatchesAboveTarget - + totalBatchesBelowTarget; + uint256 accMultiplier = batchFee; + + while (diffBatches > 32) { + accMultiplier = + (accMultiplier * (MULTIPLIER_BATCH_FEE ^ 32)) / + (10 ^ 32); + diffBatches -= 32; + } + accMultiplier = + (accMultiplier * (MULTIPLIER_BATCH_FEE ^ diffBatches)) / + (10 ^ diffBatches); + batchFee = accMultiplier; + } else { + uint256 diffBatches = totalBatchesBelowTarget - + totalBatchesAboveTarget; + uint256 accMultiplier = batchFee; + + while (diffBatches > 32) { + accMultiplier = + (accMultiplier * (MULTIPLIER_BATCH_FEE ^ 32)) / + (10 ^ 32); + diffBatches -= 32; + } + accMultiplier = + (accMultiplier * (MULTIPLIER_BATCH_FEE ^ diffBatches)) / + (10 ^ diffBatches); + + batchFee = (batchFee * batchFee) / accMultiplier; + } + // With this approach might happens that an aggregator recieve less rewards that expected if: + // The new fee setted is below the current one, and batchs are sequenced + } + /** * @notice Function to get the last verified batch */ diff --git a/contracts/lib/DepositContract.sol b/contracts/lib/DepositContract.sol index cea1b28cf..c4c93b21b 100644 --- a/contracts/lib/DepositContract.sol +++ b/contracts/lib/DepositContract.sol @@ -13,7 +13,7 @@ contract DepositContract is Initializable { // This ensures `depositCount` will fit into 32-bits uint256 internal constant _MAX_DEPOSIT_COUNT = - 2**_DEPOSIT_CONTRACT_TREE_DEPTH - 1; + 2 ** _DEPOSIT_CONTRACT_TREE_DEPTH - 1; // Branch array which contains the necessary sibilings to compute the next root when a new // leaf is inserted diff --git a/docs/ProofOfEfficiency.md b/docs/ProofOfEfficiency.md index 1b21fd0bc..df7f4c7c5 100644 --- a/docs/ProofOfEfficiency.md +++ b/docs/ProofOfEfficiency.md @@ -399,6 +399,16 @@ Function to deactivate emergency state on both PoE and Bridge contrats +### _updateBatchFee +```solidity + function _updateBatchFee( + ) internal +``` +Function to update the batch fee based on the new verfied batches +The batch fee will not be updated when the trusted aggregator verify batches + + + ### calculateBatchFee ```solidity function calculateBatchFee( From 7c7e8085c32c53968dff96ee6768d245edc5f004 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Mon, 19 Dec 2022 02:06:26 +0100 Subject: [PATCH 40/71] update commets --- compiled-contracts/ProofOfEfficiency.json | 52 ++- compiled-contracts/ProofOfEfficiencyMock.json | 57 +++- contracts/Bridge.sol | 2 +- contracts/ProofOfEfficiency.sol | 310 +++++++++--------- contracts/mocks/ProofOfEfficiencyMock.sol | 34 +- docs/Bridge.md | 2 +- docs/ProofOfEfficiency.md | 68 ++-- 7 files changed, 315 insertions(+), 210 deletions(-) diff --git a/compiled-contracts/ProofOfEfficiency.json b/compiled-contracts/ProofOfEfficiency.json index 45d83e950..a05f96e5f 100644 --- a/compiled-contracts/ProofOfEfficiency.json +++ b/compiled-contracts/ProofOfEfficiency.json @@ -20,9 +20,9 @@ }, { "indexed": true, - "internalType": "address", - "name": "aggregator", - "type": "address" + "internalType": "uint64", + "name": "pendingStateNum", + "type": "uint64" } ], "name": "ConsolidatePendingState", @@ -342,7 +342,7 @@ }, { "inputs": [], - "name": "MAX_BATCH_LENGTH", + "name": "MAX_TRANSACTIONS_BYTE_LENGTH", "outputs": [ { "internalType": "uint256", @@ -366,6 +366,32 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "MULTIPLIER_BATCH_FEE", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "VERIFY_BATCH_TIME_TARGET", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -392,6 +418,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "batchFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -1102,6 +1141,11 @@ "internalType": "uint64", "name": "sequencedTimestamp", "type": "uint64" + }, + { + "internalType": "uint64", + "name": "previousLastBatchSequenced", + "type": "uint64" } ], "stateMutability": "view", diff --git a/compiled-contracts/ProofOfEfficiencyMock.json b/compiled-contracts/ProofOfEfficiencyMock.json index 7b828da51..51c0a7181 100644 --- a/compiled-contracts/ProofOfEfficiencyMock.json +++ b/compiled-contracts/ProofOfEfficiencyMock.json @@ -20,9 +20,9 @@ }, { "indexed": true, - "internalType": "address", - "name": "aggregator", - "type": "address" + "internalType": "uint64", + "name": "pendingStateNum", + "type": "uint64" } ], "name": "ConsolidatePendingState", @@ -342,7 +342,7 @@ }, { "inputs": [], - "name": "MAX_BATCH_LENGTH", + "name": "MAX_TRANSACTIONS_BYTE_LENGTH", "outputs": [ { "internalType": "uint256", @@ -366,6 +366,32 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "MULTIPLIER_BATCH_FEE", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "VERIFY_BATCH_TIME_TARGET", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -392,6 +418,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "batchFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -1180,6 +1219,11 @@ "internalType": "uint64", "name": "sequencedTimestamp", "type": "uint64" + }, + { + "internalType": "uint64", + "name": "previousLastBatchSequenced", + "type": "uint64" } ], "stateMutability": "view", @@ -1266,6 +1310,11 @@ "internalType": "uint64", "name": "timestamp", "type": "uint64" + }, + { + "internalType": "uint64", + "name": "lastPendingStateConsolidated", + "type": "uint64" } ], "name": "setSequencedBatches", diff --git a/contracts/Bridge.sol b/contracts/Bridge.sol index 5a9bec6e2..a3cc1015f 100644 --- a/contracts/Bridge.sol +++ b/contracts/Bridge.sol @@ -89,7 +89,7 @@ contract Bridge is } /** - * @dev Emitted when a bridge some tokens to another network + * @dev Emitted when bridge assets or messages to another network */ event BridgeEvent( uint8 leafType, diff --git a/contracts/ProofOfEfficiency.sol b/contracts/ProofOfEfficiency.sol index 86761b9da..78a67cfde 100644 --- a/contracts/ProofOfEfficiency.sol +++ b/contracts/ProofOfEfficiency.sol @@ -11,12 +11,12 @@ import "./interfaces/IBridge.sol"; import "./lib/EmergencyManager.sol"; /** - * Contract responsible for managing the states and the updates of L2 network + * Contract responsible for managing the states and the updates of L2 network. * There will be a trusted sequencer, which is able to send transactions. - * Any user can force some transaction and the sequencer will have a timeout to add them in the queue - * THe sequenced state is deterministic and can be precalculated before it's actually verified by a zkProof - * The aggregators will be able to actually verify the sequenced state with zkProofs and be to perform withdrawals from L2 network - * To enter and exit of the L2 network will be used a Bridge smart contract that will be deployed in both networks + * Any user can force some transaction and the sequencer will have a timeout to add them in the queue. + * The sequenced state is deterministic and can be precalculated before it's actually verified by a zkProof. + * The aggregators will be able to verify the sequenced state with zkProofs and therefore make available the withdrawals from L2 network. + * To enter and exit of the L2 network will be used a Bridge smart contract that will be deployed in both networks. */ contract ProofOfEfficiency is Initializable, @@ -60,6 +60,7 @@ contract ProofOfEfficiency is * @param accInputHash Hash chain that contains all the information to process a batch: * keccak256(bytes32 oldAccInputHash, keccak256(bytes transactions), bytes32 globalExitRoot, uint64 timestamp, address seqAddress) * @param sequencedTimestamp Sequenced timestamp + * @param previousLastBatchSequenced Previous last batch sequenced before the current one, this is used to properly calcualte the fees */ struct SequencedBatchData { bytes32 accInputHash; @@ -68,12 +69,14 @@ contract ProofOfEfficiency is } /** - * @notice Struct which will be used to call sequenceForceBatches - * @param transactions L2 ethereum transactions EIP-155 or pre-EIP-155 with signature: - * EIP-155: rlp(nonce, gasprice, gasLimit, to, value, data, chainid, 0, 0,) || v || r || s - * pre-EIP-155: rlp(nonce, gasprice, gasLimit, to, value, data) || v || r || s - * @param globalExitRoot Global exit root of the batch - * @param minForcedTimestamp Indicates the minimum sequenced timestamp of the batch + * @notice Struct to store the pending states + * Pending state will be an intermediary state, that after a timeout can be consolidated, which means that will be added + * to the state root mapping, and the global exit root will be updated + * This is a protection mechanism against soundness attacks, that will be turn off in a future + * @param timestamp Timestamp where the pending state is added to the queue + * @param lastVerifiedBatch Last batch verified batch of this pending state + * @param exitRoot Pending exit root + * @param stateRoot Pending state root */ struct PendingState { uint64 timestamp; @@ -85,12 +88,12 @@ contract ProofOfEfficiency is /** * @notice Struct to call initialize, this basically saves gas becasue pack the parameters that can be packed * and avoid stack too deep errors. - * @param admin admin address + * @param admin Admin address * @param chainID L2 chainID - * @param trustedSequencer trusted sequencer address - * @param forceBatchAllowed indicates wheather the force batch functionality is available - * @param trustedAggregator trusted aggregator - * @param trustedAggregatorTimeout trusted aggregator timeou + * @param trustedSequencer Trusted sequencer address + * @param forceBatchAllowed Indicates wheather the force batch functionality is available + * @param trustedAggregator Trusted aggregator + * @param trustedAggregatorTimeout Trusted aggregator timeout */ struct InitializePackedParameters { address admin; @@ -115,21 +118,16 @@ contract ProofOfEfficiency is uint256 public constant MAX_BATCH_LENGTH = 300000; // Force batch timeout - uint64 public constant FORCE_BATCH_TIMEOUT = 7 days; + uint64 public constant FORCE_BATCH_TIMEOUT = 5 days; - // Byte length of the sha256 that will be used as a input of the snark - // SHA256(oldStateRoot, newStateRoot, oldAccInputHash, newAccInputHash, newLocalExitRoot, oldNumBatch, newNumBatch, chainID, aggrAddress) - // 8 Fields * 8 Bytes (Stark input in Field Array form) * 5 (hashes), + 8 bytes * 3 (oldNumBatch, newNumBatch, chainID) + 20 bytes (aggrAddress) - uint256 internal constant _SNARK_SHA_BYTES = 364; - - // If the time that a batch remains sequenced exceeds this timeout, the contract enters in emergency mode + // If a sequenced batch exceeds this timeout without being verified, the contract enters in emergency mode uint64 public constant HALT_AGGREGATION_TIMEOUT = 1 weeks; // Maximum batches that can be verified in one call TODO depends on our current metrics // This should be a protection against someone that trys to generate huge chunk of invalid batches, and we can't prove otherwise before the pending timeout expires uint64 public constant MAX_VERIFY_BATCHES = 1000; - // Time target of the verification of a batch. + // Time target of the verification of a batch // Adaptatly the batchFee will be updated to achieve this target uint64 public constant VERIFY_BATCH_TIME_TARGET = 30 minutes; @@ -149,8 +147,6 @@ contract ProofOfEfficiency is // SequenceBatchNum --> SequencedBatchData mapping(uint64 => SequencedBatchData) public sequencedBatches; - // Storage Slot // - // Last sequenced timestamp uint64 public lastTimestamp; @@ -163,21 +159,15 @@ contract ProofOfEfficiency is // Last forced batch uint64 public lastForceBatch; - // Storage Slot // - // Last batch verified by the aggregators uint64 public lastVerifiedBatch; // Trusted sequencer address address public trustedSequencer; - // Storage Slot // - // Trusted aggregator address address public trustedAggregator; - // Storage Slot // - // Rollup verifier interface IVerifierRollup public rollupVerifier; @@ -203,21 +193,21 @@ contract ProofOfEfficiency is // Bridge Address IBridge public bridgeAddress; - // Pending state, once the pendingStateTimeout has passed, the pending state becomes consolidated + // Pending state mapping // pendingStateNumber --> PendingState mapping(uint256 => PendingState) public pendingStateTransitions; // Last pending state uint64 public lastPendingState; - // Pending state timeout + // Last pending state consolidated uint64 public lastPendingStateConsolidated; // Once a pending state exceeds this timeout it can be consolidated uint64 public pendingStateTimeout; - // Trusted aggregator timeout, if a batch is not aggregated in this time frame, - // everyone can aggregate that batch + // Trusted aggregator timeout, if a sequence is not verified in this time frame, + // everyone can verify that sequence uint64 public trustedAggregatorTimeout; // Address that will be able to adjust contract parameters or stop the emergency state @@ -270,7 +260,7 @@ contract ProofOfEfficiency is event ConsolidatePendingState( uint64 indexed numBatch, bytes32 stateRoot, - address indexed aggregator + uint64 indexed pendingStateNum ); /** @@ -326,13 +316,13 @@ contract ProofOfEfficiency is ); /** - * @param _globalExitRootManager global exit root manager address + * @param _globalExitRootManager Global exit root manager address * @param _matic MATIC token address - * @param _rollupVerifier rollup verifier address - * @param _bridgeAddress bridge address + * @param _rollupVerifier Rollup verifier address + * @param _bridgeAddress Bridge address * @param initializePackedParameters Struct to save gas and avoid stack too depp errors - * @param genesisRoot rollup genesis root - * @param _trustedSequencerURL trusted sequencer URL + * @param genesisRoot Rollup genesis root + * @param _trustedSequencerURL Trusted sequencer URL * @param _networkName L2 network name */ function initialize( @@ -360,6 +350,7 @@ contract ProofOfEfficiency is forceBatchAllowed = initializePackedParameters.forceBatchAllowed; trustedSequencerURL = _trustedSequencerURL; networkName = _networkName; + batchFee = 10 ^ 18; // 1 Matic // Initialize OZ contracts __Ownable_init_unchained(); @@ -397,6 +388,10 @@ contract ProofOfEfficiency is _; } + ///////////////////////////////////// + // Sequence/Verify batches functions + //////////////////////////////////// + /** * @notice Allows a sequencer to send multiple batches * @param batches Struct array which the necessary data to append new batces ot the sequence @@ -412,7 +407,7 @@ contract ProofOfEfficiency is require( batchesNum < MAX_VERIFY_BATCHES, - "ProofOfEfficiency::verifyBatches: cannot verify that many batches" + "ProofOfEfficiency::sequenceBatches: Cannot sequence that many batches" ); // Store storage variables in memory, to save gas, because will be overrided multiple times @@ -451,7 +446,7 @@ contract ProofOfEfficiency is "ProofOfEfficiency::sequenceBatches: Forced batches timestamp must be bigger or equal than min" ); } else { - // Check global exit root exist, and proper batch length, this checks are already done in the force Batches call + // Check global exit root exist, and proper batch length, this checks are already done in the forceBatches call require( currentBatch.globalExitRoot == bytes32(0) || globalExitRootManager.globalExitRootMap( @@ -462,7 +457,8 @@ contract ProofOfEfficiency is ); require( - currentBatch.transactions.length < MAX_BATCH_LENGTH, + currentBatch.transactions.length < + MAX_TRANSACTIONS_BYTE_LENGTH, "ProofOfEfficiePendingStatecy::sequenceBatches: Transactions bytes overflow" ); } @@ -474,7 +470,7 @@ contract ProofOfEfficiency is "ProofOfEfficiency::sequenceBatches: Timestamp must be inside range" ); - // Calculate next acc input hash + // Calculate next accumulated input hash currentAccInputHash = keccak256( abi.encodePacked( currentAccInputHash, @@ -501,18 +497,19 @@ contract ProofOfEfficiency is uint256 nonForcedBatchesSequenced = batchesNum - (currentLastForceBatchSequenced - lastForceBatchSequenced); - // Store back the storage variables + // Update sequencedBatches mapping sequencedBatches[currentBatchSequenced] = SequencedBatchData({ accInputHash: currentAccInputHash, sequencedTimestamp: uint64(block.timestamp), previousLastBatchSequenced: lastBatchSequenced }); + + // Store back the storage variables lastTimestamp = currentTimestamp; lastBatchSequenced = currentBatchSequenced; lastForceBatchSequenced = currentLastForceBatchSequenced; // Pay collateral for every batch submitted - // should submit max matic to pay TODO matic.safeTransferFrom( msg.sender, address(this), @@ -520,7 +517,7 @@ contract ProofOfEfficiency is ); // Consolidate pending state if possible - _consolidateNextPendingState(); + _tryConsolidatePendingState(); emit SequenceBatches(lastBatchSequenced); } @@ -587,7 +584,7 @@ contract ProofOfEfficiency is globalExitRootManager.updateExitRoot(newLocalExitRoot); } else { // Consolidate pending state if possible - _consolidateNextPendingState(); + _tryConsolidatePendingState(); // Update pending state lastPendingState++; @@ -744,9 +741,9 @@ contract ProofOfEfficiency is /** * @notice Internal function to consolidate the state automatically once sequence or verify batches are called - * It trys to consolidatethe first and the middle pending state + * It trys to consolidate the first and the middle pending state */ - function _consolidateNextPendingState() internal { + function _tryConsolidatePendingState() internal { // Check if there's any state to consolidate if (lastPendingState > lastPendingStateConsolidated) { // Check if it's possible to consolidate the next pending state @@ -774,7 +771,9 @@ contract ProofOfEfficiency is */ function consolidatePendingState(uint64 pendingStateNum) public { // Check if pendingStateNum is in correct range - // Not 0, is not consolidated, and exist + // - not 0 + // - not consolidated + // - exist ( has been added) require( pendingStateNum != 0 && pendingStateNum > lastPendingStateConsolidated && @@ -810,10 +809,88 @@ contract ProofOfEfficiency is emit ConsolidatePendingState( newLastVerifiedBatch, currentPendingState.stateRoot, - msg.sender + pendingStateNum ); } + /** + * @notice Function to update the batch fee based on the new verfied batches + * The batch fee will not be updated when the trusted aggregator verify batches + */ + function _updateBatchFee(uint64 newLastVerifiedBatch) internal { + uint64 currentLastVerifiedBatch = getLastVerifiedBatch(); + uint64 currentBatch = newLastVerifiedBatch; + + uint256 totalBatchesAboveTarget; + uint256 newBatchesVerified = newLastVerifiedBatch - + currentLastVerifiedBatch; + + while (currentBatch != currentLastVerifiedBatch) { + // Load sequenced batchdata + SequencedBatchData + storage currentSequencedBatchData = sequencedBatches[ + currentLastVerifiedBatch + ]; + + // Check if timestamp is above or below the VERIFY_BATCH_TIME_TARGET + if ( + block.timestamp - currentSequencedBatchData.sequencedTimestamp > + VERIFY_BATCH_TIME_TARGET + ) { + totalBatchesAboveTarget += + currentLastVerifiedBatch - + currentSequencedBatchData.previousLastBatchSequenced; + } + + // update currentLastVerifiedBatch + currentBatch = currentSequencedBatchData.previousLastBatchSequenced; + } + + uint256 totalBatchesBelowTarget = newBatchesVerified - + totalBatchesAboveTarget; + + // Assume that batch fee will be max 128 bits, therefore: + // MULTIPLIER_BATCH_FEE --> (< 4 bits) + // MULTIPLIER_BATCH_FEE^32 --> (< 128 bits) + // (< 128 bits) * (< 128 bits) = < 256 bits + if (totalBatchesBelowTarget < totalBatchesAboveTarget) { + uint256 diffBatches = totalBatchesAboveTarget - + totalBatchesBelowTarget; + uint256 accMultiplier = batchFee; + + while (diffBatches > 32) { + accMultiplier = + (accMultiplier * (MULTIPLIER_BATCH_FEE ^ 32)) / + (10 ^ 32); + diffBatches -= 32; + } + accMultiplier = + (accMultiplier * (MULTIPLIER_BATCH_FEE ^ diffBatches)) / + (10 ^ diffBatches); + batchFee = accMultiplier; + } else { + uint256 diffBatches = totalBatchesBelowTarget - + totalBatchesAboveTarget; + uint256 accMultiplier = batchFee; + + while (diffBatches > 32) { + accMultiplier = + (accMultiplier * (MULTIPLIER_BATCH_FEE ^ 32)) / + (10 ^ 32); + diffBatches -= 32; + } + accMultiplier = + (accMultiplier * (MULTIPLIER_BATCH_FEE ^ diffBatches)) / + (10 ^ diffBatches); + + batchFee = (batchFee * batchFee) / accMultiplier; + } + } + + //////////////////////////// + // Force batches functions + //////////////////////////// + /** * @notice Allows a sequencer/user to force a batch of L2 transactions. * This should be used only in extreme cases where the trusted sequencer does not work as expected @@ -833,7 +910,7 @@ contract ProofOfEfficiency is ); require( - transactions.length < MAX_BATCH_LENGTH, + transactions.length < MAX_TRANSACTIONS_BYTE_LENGTH, "ProofOfEfficiency::forceBatch: Transactions bytes overflow" ); @@ -945,7 +1022,6 @@ contract ProofOfEfficiency is lastTimestamp = uint64(block.timestamp); // Store back the storage variables - sequencedBatches[currentBatchSequenced] = SequencedBatchData({ accInputHash: currentAccInputHash, sequencedTimestamp: uint64(block.timestamp), @@ -957,10 +1033,12 @@ contract ProofOfEfficiency is emit SequenceForceBatches(lastBatchSequenced); } + ////////////////// // admin functions + ////////////////// /** - * @notice Allow the current trusted sequencer to set a new trusted sequencer + * @notice Allow the admin to set a new trusted sequencer * @param newTrustedSequencer Address of the new trusted sequuencer */ function setTrustedSequencer(address newTrustedSequencer) public onlyAdmin { @@ -970,7 +1048,7 @@ contract ProofOfEfficiency is } /** - * @notice Allow the current trusted sequencer to allow/disallow the forceBatch functionality + * @notice Allow the admin to allow/disallow the forceBatch functionality * @param newForceBatchAllowed Whether is allowed or not the forceBatch functionality */ function setForceBatchAllowed(bool newForceBatchAllowed) public onlyAdmin { @@ -980,7 +1058,7 @@ contract ProofOfEfficiency is } /** - * @notice Allow the trusted sequencer to set the trusted sequencer URL + * @notice Allow the admin to set the trusted sequencer URL * @param newTrustedSequencerURL URL of trusted sequencer */ function setTrustedSequencerURL( @@ -992,7 +1070,7 @@ contract ProofOfEfficiency is } /** - * @notice Allow the current trusted aggregator to set a new trusted aggregator address + * @notice Allow the admin to set a new trusted aggregator address * If address 0 is set, everyone is free to aggregate * @param newTrustedAggregator Address of the new trusted aggregator */ @@ -1005,7 +1083,7 @@ contract ProofOfEfficiency is } /** - * @notice Allow the current trusted aggregator to set a new trusted aggregator timeout + * @notice Allow the admin to set a new trusted aggregator timeout * The timeout can only be lowered, except if emergency state is active * @param newTrustedAggregatorTimeout Trusted aggreagator timeout */ @@ -1028,7 +1106,7 @@ contract ProofOfEfficiency is } /** - * @notice Allow the current trusted aggregator to set a new trusted aggregator timeout + * @notice Allow the admin to set a new trusted aggregator timeout * The timeout can only be lowered, except if emergency state is active * @param newPendingStateTimeout Trusted aggreagator timeout */ @@ -1060,7 +1138,9 @@ contract ProofOfEfficiency is emit SetAdmin(newAdmin); } - // Soundness protection mechanisms + ///////////////////////////////// + // Soundness protection functions + ///////////////////////////////// /** * @notice Allows to halt the PoE if its possible to prove a different state root given the same batches @@ -1223,7 +1303,9 @@ contract ProofOfEfficiency is } // Assert final pending state num is in correct range - // Exist, is bigger than the initPendingstate, and it's not consolidated + // - exist ( has been added) + // - bigger than the initPendingstate + // - not consolidated require( finalPendingStateNum <= lastPendingState && finalPendingStateNum > initPendingStateNum && @@ -1290,7 +1372,7 @@ contract ProofOfEfficiency is sequencedBatches[sequencedBatchNum].sequencedTimestamp + HALT_AGGREGATION_TIMEOUT <= block.timestamp, - "ProofOfEfficiency::activateEmergencyState: aggregation halt timeout is not expired" + "ProofOfEfficiency::activateEmergencyState: Aggregation halt timeout is not expired" ); } _activateEmergencyState(); @@ -1308,86 +1390,25 @@ contract ProofOfEfficiency is } /** - * @notice Function to update the batch fee based on the new verfied batches - * The batch fee will not be updated when the trusted aggregator verify batches + * @notice Internal function to activate emergency state on both PoE and Bridge contrats */ - function _updateBatchFee(uint64 newLastVerifiedBatch) internal { - uint64 currentLastVerifiedBatch = getLastVerifiedBatch(); - uint64 currentBatch = newLastVerifiedBatch; - - uint256 totalBatchesAboveTarget; - uint256 newBatchesVerified = newLastVerifiedBatch - - currentLastVerifiedBatch; - - while (currentBatch != currentLastVerifiedBatch) { - // Load sequenced batchdata - SequencedBatchData - storage currentSequencedBatchData = sequencedBatches[ - currentLastVerifiedBatch - ]; - - // Check if timestamp is above or below the VERIFY_BATCH_TIME_TARGET - if ( - block.timestamp - currentSequencedBatchData.sequencedTimestamp > - VERIFY_BATCH_TIME_TARGET - ) { - totalBatchesAboveTarget += - currentLastVerifiedBatch - - currentSequencedBatchData.previousLastBatchSequenced; - } - - // update currentLastVerifiedBatch - currentBatch = currentSequencedBatchData.previousLastBatchSequenced; - } - - uint256 totalBatchesBelowTarget = newBatchesVerified - - totalBatchesAboveTarget; - - // Assume that batch fee will be max 128 bits, therefore: - // MULTIPLIER_BATCH_FEE --> (< 4 bits) - // MULTIPLIER_BATCH_FEE^32 --> (< 128 bits) - // (< 128 bits) * (< 128 bits) = < 256 bits - if (totalBatchesBelowTarget < totalBatchesAboveTarget) { - uint256 diffBatches = totalBatchesAboveTarget - - totalBatchesBelowTarget; - uint256 accMultiplier = batchFee; - - while (diffBatches > 32) { - accMultiplier = - (accMultiplier * (MULTIPLIER_BATCH_FEE ^ 32)) / - (10 ^ 32); - diffBatches -= 32; - } - accMultiplier = - (accMultiplier * (MULTIPLIER_BATCH_FEE ^ diffBatches)) / - (10 ^ diffBatches); - batchFee = accMultiplier; - } else { - uint256 diffBatches = totalBatchesBelowTarget - - totalBatchesAboveTarget; - uint256 accMultiplier = batchFee; - - while (diffBatches > 32) { - accMultiplier = - (accMultiplier * (MULTIPLIER_BATCH_FEE ^ 32)) / - (10 ^ 32); - diffBatches -= 32; - } - accMultiplier = - (accMultiplier * (MULTIPLIER_BATCH_FEE ^ diffBatches)) / - (10 ^ diffBatches); + function _activateEmergencyState() internal override { + // Activate emergency state on bridge + bridgeAddress.activateEmergencyState(); - batchFee = (batchFee * batchFee) / accMultiplier; - } - // With this approach might happens that an aggregator recieve less rewards that expected if: - // The new fee setted is below the current one, and batchs are sequenced + // Activate emergency state on this contract + super._activateEmergencyState(); } + //////////////////////// + // public/view functions + //////////////////////// + /** - * @notice Function to get the last verified batch + * @notice Function to get the batch fee */ function calculateBatchFee() public view returns (uint256) { - return 1 ether * uint256(1 + lastForceBatch - lastForceBatchSequenced); + return batchFee; } /** @@ -1402,7 +1423,7 @@ contract ProofOfEfficiency is } /** - * @notice Returns a boolean indicatinf is the pendingStateNum is or not consolidable + * @notice Returns a boolean that indicates if the pendingStateNum is or not consolidable * Note that his function do not check if the pending state currently exist, or if it's consolidated already */ function isPendingStateConsolidable( @@ -1469,15 +1490,4 @@ contract ProofOfEfficiency is finalNewBatch ); } - - /** - * @notice Internal function to activate emergency state on both PoE and Bridge contrats - */ - function _activateEmergencyState() internal override { - // Activate emergency state on bridge - bridgeAddress.activateEmergencyState(); - - // Activate emergency state on this contract - super._activateEmergencyState(); - } } diff --git a/contracts/mocks/ProofOfEfficiencyMock.sol b/contracts/mocks/ProofOfEfficiencyMock.sol index d33ef29b6..a2910988e 100644 --- a/contracts/mocks/ProofOfEfficiencyMock.sol +++ b/contracts/mocks/ProofOfEfficiencyMock.sol @@ -172,11 +172,13 @@ contract ProofOfEfficiencyMock is ProofOfEfficiency { function setSequencedBatches( uint64 batchNum, bytes32 accInputData, - uint64 timestamp + uint64 timestamp, + uint64 lastPendingStateConsolidated ) public onlyOwner { sequencedBatches[batchNum] = SequencedBatchData({ accInputHash: accInputData, - sequencedTimestamp: timestamp + sequencedTimestamp: timestamp, + previousLastBatchSequenced: lastPendingStateConsolidated }); } @@ -201,9 +203,9 @@ contract ProofOfEfficiencyMock is ProofOfEfficiency { uint256[2] calldata proofC ) public onlyOwner { bytes32 oldStateRoot; - uint64 currentLastVerifiedBatch; + uint64 currentLastVerifiedBatch = getLastVerifiedBatch(); - // Use pending state if especified, otherwise use consolidate state + // Use pending state if specified, otherwise use consolidated state if (pendingStateNum != 0) { // Check that pending state exist // Already consolidated pending states can be used aswell @@ -216,14 +218,15 @@ contract ProofOfEfficiencyMock is ProofOfEfficiency { PendingState storage currentPendingState = pendingStateTransitions[ pendingStateNum ]; + + // Get oldStateRoot from pending batch oldStateRoot = currentPendingState.stateRoot; - // Assert init batch + // Check initNumBatch matches the pending state require( initNumBatch == currentPendingState.lastVerifiedBatch, - "ProofOfEfficiency::verifyBatches: initNumBatch must be less or equal than currentLastVerifiedBatch" + "ProofOfEfficiency::verifyBatches: initNumBatch must match the pending state batch" ); - currentLastVerifiedBatch = initNumBatch; } else { // Use consolidated state oldStateRoot = batchNumToStateRoot[initNumBatch]; @@ -232,15 +235,14 @@ contract ProofOfEfficiencyMock is ProofOfEfficiency { "ProofOfEfficiency::verifyBatches: initNumBatch state root does not exist" ); - // Assert init batch + // Check initNumBatch is inside the range require( - initNumBatch <= lastVerifiedBatch, + initNumBatch <= currentLastVerifiedBatch, "ProofOfEfficiency::verifyBatches: initNumBatch must be less or equal than currentLastVerifiedBatch" ); - currentLastVerifiedBatch = lastVerifiedBatch; } - // Assert final batch + // Check final batch require( finalNewBatch > currentLastVerifiedBatch, "ProofOfEfficiency::verifyBatches: finalNewBatch must be bigger than currentLastVerifiedBatch" @@ -255,23 +257,23 @@ contract ProofOfEfficiencyMock is ProofOfEfficiency { newStateRoot ); - // Calulate the snark input - uint256 inputSnark = uint256(sha256(snarkHashBytes)) % _RFIELD; + // // Calulate the snark input + // uint256 inputSnark = uint256(sha256(snarkHashBytes)) % _RFIELD; - // Verify proof + // // Verify proof // require( // rollupVerifier.verifyProof(proofA, proofB, proofC, [inputSnark]), // "ProofOfEfficiency::verifyBatches: INVALID_PROOF" // ); - // Get MATIC reward + // // Get MATIC reward // matic.safeTransfer( // msg.sender, // calculateRewardPerBatch() * // (finalNewBatch - currentLastVerifiedBatch) // ); - // Update state + // Consolidate state lastVerifiedBatch = finalNewBatch; batchNumToStateRoot[finalNewBatch] = newStateRoot; diff --git a/docs/Bridge.md b/docs/Bridge.md index 7e8db84bc..5f1167a9b 100644 --- a/docs/Bridge.md +++ b/docs/Bridge.md @@ -246,7 +246,7 @@ Function to call token permit method of extended ERC20 ) ``` -Emitted when a bridge some tokens to another network +Emitted when bridge assets or messages to another network ### ClaimEvent ```solidity diff --git a/docs/ProofOfEfficiency.md b/docs/ProofOfEfficiency.md index df7f4c7c5..086f01e64 100644 --- a/docs/ProofOfEfficiency.md +++ b/docs/ProofOfEfficiency.md @@ -1,9 +1,9 @@ -Contract responsible for managing the states and the updates of L2 network +Contract responsible for managing the states and the updates of L2 network. There will be a trusted sequencer, which is able to send transactions. -Any user can force some transaction and the sequencer will have a timeout to add them in the queue -THe sequenced state is deterministic and can be precalculated before it's actually verified by a zkProof -The aggregators will be able to actually verify the sequenced state with zkProofs and be to perform withdrawals from L2 network -To enter and exit of the L2 network will be used a Bridge smart contract that will be deployed in both networks +Any user can force some transaction and the sequencer will have a timeout to add them in the queue. +The sequenced state is deterministic and can be precalculated before it's actually verified by a zkProof. +The aggregators will be able to verify the sequenced state with zkProofs and therefore make available the withdrawals from L2 network. +To enter and exit of the L2 network will be used a Bridge smart contract that will be deployed in both networks. ## Functions @@ -25,13 +25,13 @@ To enter and exit of the L2 network will be used a Bridge smart contract that wi #### Parameters: | Name | Type | Description | | :--- | :--- | :------------------------------------------------------------------- | -|`_globalExitRootManager` | contract IGlobalExitRootManager | global exit root manager address +|`_globalExitRootManager` | contract IGlobalExitRootManager | Global exit root manager address |`_matic` | contract IERC20Upgradeable | MATIC token address -|`_rollupVerifier` | contract IVerifierRollup | rollup verifier address -|`_bridgeAddress` | contract IBridge | bridge address +|`_rollupVerifier` | contract IVerifierRollup | Rollup verifier address +|`_bridgeAddress` | contract IBridge | Bridge address |`initializePackedParameters` | struct ProofOfEfficiency.InitializePackedParameters | Struct to save gas and avoid stack too depp errors -|`genesisRoot` | bytes32 | rollup genesis root -|`_trustedSequencerURL` | string | trusted sequencer URL +|`genesisRoot` | bytes32 | Rollup genesis root +|`_trustedSequencerURL` | string | Trusted sequencer URL |`_networkName` | string | L2 network name ### sequenceBatches @@ -128,13 +128,13 @@ Verify batches internal function |`proofB` | uint256[2] | zk-snark input |`proofC` | uint256[2][2] | zk-snark input -### _consolidateNextPendingState +### _tryConsolidatePendingState ```solidity - function _consolidateNextPendingState( + function _tryConsolidatePendingState( ) internal ``` Internal function to consolidate the state automatically once sequence or verify batches are called -It trys to consolidatethe first and the middle pending state +It trys to consolidate the first and the middle pending state @@ -153,6 +153,16 @@ Can be called by the trusted aggregator, which can consolidate any state without | :--- | :--- | :------------------------------------------------------------------- | |`pendingStateNum` | uint64 | Pending state to consolidate +### _updateBatchFee +```solidity + function _updateBatchFee( + ) internal +``` +Function to update the batch fee based on the new verfied batches +The batch fee will not be updated when the trusted aggregator verify batches + + + ### forceBatch ```solidity function forceBatch( @@ -190,7 +200,7 @@ Allows anyone to sequence forced Batches if the trusted sequencer do not have do address newTrustedSequencer ) public ``` -Allow the current trusted sequencer to set a new trusted sequencer +Allow the admin to set a new trusted sequencer #### Parameters: @@ -204,7 +214,7 @@ Allow the current trusted sequencer to set a new trusted sequencer bool newForceBatchAllowed ) public ``` -Allow the current trusted sequencer to allow/disallow the forceBatch functionality +Allow the admin to allow/disallow the forceBatch functionality #### Parameters: @@ -218,7 +228,7 @@ Allow the current trusted sequencer to allow/disallow the forceBatch functionali string newTrustedSequencerURL ) public ``` -Allow the trusted sequencer to set the trusted sequencer URL +Allow the admin to set the trusted sequencer URL #### Parameters: @@ -232,7 +242,7 @@ Allow the trusted sequencer to set the trusted sequencer URL address newTrustedAggregator ) public ``` -Allow the current trusted aggregator to set a new trusted aggregator address +Allow the admin to set a new trusted aggregator address If address 0 is set, everyone is free to aggregate @@ -247,7 +257,7 @@ If address 0 is set, everyone is free to aggregate uint64 newTrustedAggregatorTimeout ) public ``` -Allow the current trusted aggregator to set a new trusted aggregator timeout +Allow the admin to set a new trusted aggregator timeout The timeout can only be lowered, except if emergency state is active @@ -262,7 +272,7 @@ The timeout can only be lowered, except if emergency state is active uint64 newPendingStateTimeout ) public ``` -Allow the current trusted aggregator to set a new trusted aggregator timeout +Allow the admin to set a new trusted aggregator timeout The timeout can only be lowered, except if emergency state is active @@ -399,13 +409,12 @@ Function to deactivate emergency state on both PoE and Bridge contrats -### _updateBatchFee +### _activateEmergencyState ```solidity - function _updateBatchFee( + function _activateEmergencyState( ) internal ``` -Function to update the batch fee based on the new verfied batches -The batch fee will not be updated when the trusted aggregator verify batches +Internal function to activate emergency state on both PoE and Bridge contrats @@ -414,7 +423,7 @@ The batch fee will not be updated when the trusted aggregator verify batches function calculateBatchFee( ) public returns (uint256) ``` -Function to get the last verified batch +Function to get the batch fee @@ -432,7 +441,7 @@ Get the last verified batch function isPendingStateConsolidable( ) public returns (bool) ``` -Returns a boolean indicatinf is the pendingStateNum is or not consolidable +Returns a boolean that indicates if the pendingStateNum is or not consolidable Note that his function do not check if the pending state currently exist, or if it's consolidated already @@ -466,15 +475,6 @@ Function to calculate the input snark bytes |`newLocalExitRoot` | bytes32 | New local exit root once the batch is processed |`newStateRoot` | bytes32 | New State root once the batch is processed -### _activateEmergencyState -```solidity - function _activateEmergencyState( - ) internal -``` -Internal function to activate emergency state on both PoE and Bridge contrats - - - ## Events ### SequenceBatches ```solidity From 64d5274dcb9a6c13b9ae3ef11c6cb523ab05975c Mon Sep 17 00:00:00 2001 From: invocamanman Date: Mon, 19 Dec 2022 04:18:08 +0100 Subject: [PATCH 41/71] test + deployment script --- compiled-contracts/ProofOfEfficiency.json | 26 +- compiled-contracts/ProofOfEfficiencyMock.json | 26 +- .../VerifierRollupHelperMock.json | 4 +- contracts/ProofOfEfficiency.sol | 45 ++-- contracts/mocks/ProofOfEfficiencyMock.sol | 15 +- deployment/deployPoE_v2-0.js | 53 ++-- deployment/deploy_parameters.json.example | 4 +- deployment/verifyPoE_v2-0.js | 18 +- docs/ProofOfEfficiency.md | 4 +- hardhat.config.js | 2 +- test/contracts/bridge.test.js | 140 +--------- test/contracts/bridgeMock.test.js | 3 +- test/contracts/bridge_permit.test.js | 3 +- test/contracts/emergencyManager.test.js | 81 +++--- .../contracts/globalExitRootManagerL2.test.js | 3 +- test/contracts/proofOfEfficiency.test.js | 243 ++++++++++++------ test/contracts/real-prover/real-flow.test.js | 38 ++- test/contracts/snark_stark_input.test.js | 22 +- 18 files changed, 368 insertions(+), 362 deletions(-) diff --git a/compiled-contracts/ProofOfEfficiency.json b/compiled-contracts/ProofOfEfficiency.json index a05f96e5f..38ff0d531 100644 --- a/compiled-contracts/ProofOfEfficiency.json +++ b/compiled-contracts/ProofOfEfficiency.json @@ -463,19 +463,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "calculateBatchFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "calculateRewardPerBatch", @@ -572,6 +559,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "getCurrentBatchFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { diff --git a/compiled-contracts/ProofOfEfficiencyMock.json b/compiled-contracts/ProofOfEfficiencyMock.json index 51c0a7181..39691f27b 100644 --- a/compiled-contracts/ProofOfEfficiencyMock.json +++ b/compiled-contracts/ProofOfEfficiencyMock.json @@ -502,19 +502,6 @@ "stateMutability": "pure", "type": "function" }, - { - "inputs": [], - "name": "calculateBatchFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "calculateRewardPerBatch", @@ -611,6 +598,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "getCurrentBatchFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { diff --git a/compiled-contracts/VerifierRollupHelperMock.json b/compiled-contracts/VerifierRollupHelperMock.json index 64b32a247..cd6a4b8dc 100644 --- a/compiled-contracts/VerifierRollupHelperMock.json +++ b/compiled-contracts/VerifierRollupHelperMock.json @@ -38,8 +38,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50610101806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c806343753b4d14602d575b600080fd5b60426038366004606c565b6001949350505050565b604051901515815260200160405180910390f35b8060408101831015606657600080fd5b92915050565b600080600080610120808688031215608357600080fd5b608b87876056565b945060c0860187811115609d57600080fd5b60408701945060ab88826056565b93505086818701111560bc57600080fd5b5092959194509261010001915056fea26469706673582212202e4be8cd1c0632c178cfc195caefaebe7e71d9f73e9b4ea187ff77763908589164736f6c634300080f0033", - "deployedBytecode": "0x6080604052348015600f57600080fd5b506004361060285760003560e01c806343753b4d14602d575b600080fd5b60426038366004606c565b6001949350505050565b604051901515815260200160405180910390f35b8060408101831015606657600080fd5b92915050565b600080600080610120808688031215608357600080fd5b608b87876056565b945060c0860187811115609d57600080fd5b60408701945060ab88826056565b93505086818701111560bc57600080fd5b5092959194509261010001915056fea26469706673582212202e4be8cd1c0632c178cfc195caefaebe7e71d9f73e9b4ea187ff77763908589164736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50610101806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c806343753b4d14602d575b600080fd5b60426038366004606c565b6001949350505050565b604051901515815260200160405180910390f35b8060408101831015606657600080fd5b92915050565b600080600080610120808688031215608357600080fd5b608b87876056565b945060c0860187811115609d57600080fd5b60408701945060ab88826056565b93505086818701111560bc57600080fd5b5092959194509261010001915056fea26469706673582212209697ebb83a295d4fb4cbbd0ca5638d3f360fa6d5619e41b2dabdeba2434fd79f64736f6c634300080f0033", + "deployedBytecode": "0x6080604052348015600f57600080fd5b506004361060285760003560e01c806343753b4d14602d575b600080fd5b60426038366004606c565b6001949350505050565b604051901515815260200160405180910390f35b8060408101831015606657600080fd5b92915050565b600080600080610120808688031215608357600080fd5b608b87876056565b945060c0860187811115609d57600080fd5b60408701945060ab88826056565b93505086818701111560bc57600080fd5b5092959194509261010001915056fea26469706673582212209697ebb83a295d4fb4cbbd0ca5638d3f360fa6d5619e41b2dabdeba2434fd79f64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/ProofOfEfficiency.sol b/contracts/ProofOfEfficiency.sol index 78a67cfde..35d44a8d9 100644 --- a/contracts/ProofOfEfficiency.sol +++ b/contracts/ProofOfEfficiency.sol @@ -350,7 +350,7 @@ contract ProofOfEfficiency is forceBatchAllowed = initializePackedParameters.forceBatchAllowed; trustedSequencerURL = _trustedSequencerURL; networkName = _networkName; - batchFee = 10 ^ 18; // 1 Matic + batchFee = 10 ** 18; // 1 Matic // Initialize OZ contracts __Ownable_init_unchained(); @@ -513,7 +513,7 @@ contract ProofOfEfficiency is matic.safeTransferFrom( msg.sender, address(this), - calculateBatchFee() * nonForcedBatchesSequenced + getCurrentBatchFee() * nonForcedBatchesSequenced ); // Consolidate pending state if possible @@ -542,7 +542,8 @@ contract ProofOfEfficiency is uint256[2][2] calldata proofB, uint256[2] calldata proofC ) public ifNotEmergencyState { - // Check if the trusted aggregator timeout expired + // Check if the trusted aggregator timeout expired, + // Note that the sequencedBatches struct must exists for this finalNewBatch, if not newAccInputHash will be 0 require( sequencedBatches[finalNewBatch].sequencedTimestamp + trustedAggregatorTimeout <= @@ -851,7 +852,7 @@ contract ProofOfEfficiency is // Assume that batch fee will be max 128 bits, therefore: // MULTIPLIER_BATCH_FEE --> (< 4 bits) - // MULTIPLIER_BATCH_FEE^32 --> (< 128 bits) + // MULTIPLIER_BATCH_FEE ** 32 --> (< 128 bits) // (< 128 bits) * (< 128 bits) = < 256 bits if (totalBatchesBelowTarget < totalBatchesAboveTarget) { uint256 diffBatches = totalBatchesAboveTarget - @@ -860,13 +861,13 @@ contract ProofOfEfficiency is while (diffBatches > 32) { accMultiplier = - (accMultiplier * (MULTIPLIER_BATCH_FEE ^ 32)) / - (10 ^ 32); + (accMultiplier * (MULTIPLIER_BATCH_FEE ** 32)) / + (10 ** 32); diffBatches -= 32; } accMultiplier = - (accMultiplier * (MULTIPLIER_BATCH_FEE ^ diffBatches)) / - (10 ^ diffBatches); + (accMultiplier * (MULTIPLIER_BATCH_FEE ** diffBatches)) / + (10 ** diffBatches); batchFee = accMultiplier; } else { uint256 diffBatches = totalBatchesBelowTarget - @@ -875,13 +876,13 @@ contract ProofOfEfficiency is while (diffBatches > 32) { accMultiplier = - (accMultiplier * (MULTIPLIER_BATCH_FEE ^ 32)) / - (10 ^ 32); + (accMultiplier * (MULTIPLIER_BATCH_FEE ** 32)) / + (10 ** 32); diffBatches -= 32; } accMultiplier = - (accMultiplier * (MULTIPLIER_BATCH_FEE ^ diffBatches)) / - (10 ^ diffBatches); + (accMultiplier * (MULTIPLIER_BATCH_FEE ** diffBatches)) / + (10 ** diffBatches); batchFee = (batchFee * batchFee) / accMultiplier; } @@ -902,7 +903,7 @@ contract ProofOfEfficiency is uint256 maticAmount ) public ifNotEmergencyState isForceBatchAllowed { // Calculate matic collateral - uint256 maticFee = calculateBatchFee(); + uint256 maticFee = getCurrentBatchFee(); require( maticFee <= maticAmount, @@ -1102,7 +1103,7 @@ contract ProofOfEfficiency is } trustedAggregatorTimeout = newTrustedAggregatorTimeout; - emit SetTrustedAggregatorTimeout(trustedAggregatorTimeout); + emit SetTrustedAggregatorTimeout(newTrustedAggregatorTimeout); } /** @@ -1114,7 +1115,7 @@ contract ProofOfEfficiency is uint64 newPendingStateTimeout ) public onlyAdmin { require( - pendingStateTimeout <= HALT_AGGREGATION_TIMEOUT, + newPendingStateTimeout <= HALT_AGGREGATION_TIMEOUT, "ProofOfEfficiency::setPendingStateTimeout: exceed halt aggregation timeout" ); if (!isEmergencyState) { @@ -1310,14 +1311,14 @@ contract ProofOfEfficiency is finalPendingStateNum <= lastPendingState && finalPendingStateNum > initPendingStateNum && finalPendingStateNum > lastPendingStateConsolidated, - "ProofOfEfficiency::proveNonDeterministicPendingState: finalNewBatch must be bigger than currentLastVerifiedBatch" + "ProofOfEfficiency::proveNonDeterministicPendingState: finalPendingStateNum incorrect" ); // Check final num batch require( finalNewBatch == pendingStateTransitions[finalPendingStateNum].lastVerifiedBatch, - "ProofOfEfficiency::proveNonDeterministicPendingState: finalNewBatch must be bigger than currentLastVerifiedBatch" + "ProofOfEfficiency::proveNonDeterministicPendingState: finalNewBatch must be equal than currentLastVerifiedBatch" ); // Get snark bytes @@ -1361,12 +1362,20 @@ contract ProofOfEfficiency is } else { lastVerifiedBatchToCompare = lastVerifiedBatch; } + // Check that the batch has not been verified require( sequencedBatchNum > lastVerifiedBatchToCompare, "ProofOfEfficiency::activateEmergencyState: Batch already verified" ); + // Check that the batch has been sequenced and this was the end of a sequence + require( + sequencedBatchNum <= lastBatchSequenced && + sequencedBatches[sequencedBatchNum].sequencedTimestamp != 0, + "ProofOfEfficiency::activateEmergencyState: Batch not sequenced or not end of sequence" + ); + // Check that has been passed HALT_AGGREGATION_TIMEOUT since it was sequenced require( sequencedBatches[sequencedBatchNum].sequencedTimestamp + @@ -1407,7 +1416,7 @@ contract ProofOfEfficiency is /** * @notice Function to get the batch fee */ - function calculateBatchFee() public view returns (uint256) { + function getCurrentBatchFee() public view returns (uint256) { return batchFee; } diff --git a/contracts/mocks/ProofOfEfficiencyMock.sol b/contracts/mocks/ProofOfEfficiencyMock.sol index a2910988e..2370ec92e 100644 --- a/contracts/mocks/ProofOfEfficiencyMock.sol +++ b/contracts/mocks/ProofOfEfficiencyMock.sol @@ -53,15 +53,7 @@ contract ProofOfEfficiencyMock is ProofOfEfficiency { bytes32 newStateRoot ) public view returns (uint256) { bytes32 oldStateRoot; - uint64 currentLastVerifiedBatch; - - // Get the last pending state if there's one, otherwise check consolidate state - if (lastPendingState > 0) { - currentLastVerifiedBatch = pendingStateTransitions[lastPendingState] - .lastVerifiedBatch; - } else { - currentLastVerifiedBatch = lastVerifiedBatch; - } + uint64 currentLastVerifiedBatch = getLastVerifiedBatch(); // Use pending state if specified, otherwise use consolidated state if (pendingStateNum != 0) { @@ -87,11 +79,11 @@ contract ProofOfEfficiencyMock is ProofOfEfficiency { ); } else { // Use consolidated state + oldStateRoot = batchNumToStateRoot[initNumBatch]; require( - batchNumToStateRoot[initNumBatch] != bytes32(0), + oldStateRoot != bytes32(0), "ProofOfEfficiency::verifyBatches: initNumBatch state root does not exist" ); - oldStateRoot = batchNumToStateRoot[initNumBatch]; // Check initNumBatch is inside the range require( @@ -114,7 +106,6 @@ contract ProofOfEfficiencyMock is ProofOfEfficiency { oldStateRoot, newStateRoot ); - // Calulate the snark input uint256 inputSnark = uint256(sha256(snarkHashBytes)) % _RFIELD; diff --git a/deployment/deployPoE_v2-0.js b/deployment/deployPoE_v2-0.js index 8675fad53..dedc584e7 100644 --- a/deployment/deployPoE_v2-0.js +++ b/deployment/deployPoE_v2-0.js @@ -17,8 +17,11 @@ async function main() { const trustedSequencer = deployParameters.trustedSequencerAddress; const trustedSequencerURL = deployParameters.trustedSequencerURL || 'http://zkevm-json-rpc:8123'; const realVerifier = deployParameters.realVerifier || false; - const claimTimeout = deployParameters.claimTimeout || 0; const { chainID, networkName } = deployParameters; + + const pendingStateTimeout = deployParameters.pendingStateTimeout || (60 * 60 * 24 * 7 - 1); + const trustedAggregatorTimeout = deployParameters.trustedAggregatorTimeout || (60 * 60 * 24 * 7 - 1); + const atemptsDeployProxy = 20; let currentProvider = ethers.provider; @@ -54,7 +57,8 @@ async function main() { } else { [deployer] = (await ethers.getSigners()); } - const securityCouncilAddress = deployParameters.securityCouncilAddress || deployer.address; + const admin = deployParameters.admin || deployer.address; + const trustedAggregator = deployParameters.trustedAggregator || deployer.address; /* *Deployment MATIC @@ -161,7 +165,6 @@ async function main() { networkIDMainnet, globalExitRootManager.address, proofOfEfficiencyContract.address, - claimTimeout, )).wait(); console.log('\n#######################'); @@ -170,7 +173,6 @@ async function main() { console.log('globalExitRootManagerAddress:', await bridgeContract.globalExitRootManager()); console.log('networkID:', await bridgeContract.networkID()); console.log('poeAddress:', await bridgeContract.poeAddress()); - console.log('claimTimeout:', await bridgeContract.claimTimeout()); console.log('owner:', await bridgeContract.owner()); /* @@ -186,27 +188,37 @@ async function main() { console.log('globalExitRootManagerAddress:', globalExitRootManager.address); console.log('maticTokenAddress:', maticTokenContract.address); console.log('verifierAddress:', verifierContract.address); - console.log('genesisRoot:', genesisRootHex); + console.log('bridgeContract:', bridgeContract.address); + + console.log('admin:', admin); + console.log('chainID:', chainID); console.log('trustedSequencer:', trustedSequencer); + console.log('pendingStateTimeout:', pendingStateTimeout); console.log('forceBatchAllowed:', forceBatchAllowed); + console.log('trustedAggregator:', trustedAggregator); + console.log('trustedAggregatorTimeout:', trustedAggregatorTimeout); + + console.log('genesisRoot:', genesisRootHex); console.log('trustedSequencerURL:', trustedSequencerURL); - console.log('chainID:', chainID); console.log('networkName:', networkName); - console.log('bridgeContract:', bridgeContract.address); - console.log('securityCouncil:', securityCouncilAddress); await (await proofOfEfficiencyContract.initialize( globalExitRootManager.address, maticTokenContract.address, verifierContract.address, + bridgeContract.address, + { + admin, + chainID, + trustedSequencer, + pendingStateTimeout, + forceBatchAllowed, + trustedAggregator, + trustedAggregatorTimeout, + }, genesisRootHex, - trustedSequencer, - forceBatchAllowed, trustedSequencerURL, - chainID, networkName, - bridgeContract.address, - securityCouncilAddress, )).wait(); const deploymentBlockNumber = (await proofOfEfficiencyContract.deployTransaction.wait()).blockNumber; @@ -216,15 +228,20 @@ async function main() { console.log('#######################'); console.log('globalExitRootManagerAddress:', await proofOfEfficiencyContract.globalExitRootManager()); console.log('maticTokenAddress:', await proofOfEfficiencyContract.matic()); - console.log('verifierMockAddress:', await proofOfEfficiencyContract.rollupVerifier()); - console.log('genesiRoot:', await proofOfEfficiencyContract.batchNumToStateRoot(0)); + console.log('verifierAddress:', await proofOfEfficiencyContract.rollupVerifier()); + console.log('bridgeContract:', await proofOfEfficiencyContract.bridgeAddress()); + + console.log('admin:', await proofOfEfficiencyContract.admin()); + console.log('chainID:', await proofOfEfficiencyContract.chainID()); console.log('trustedSequencer:', await proofOfEfficiencyContract.trustedSequencer()); + console.log('pendingStateTimeout:', await proofOfEfficiencyContract.pendingStateTimeout()); console.log('forceBatchAllowed:', await proofOfEfficiencyContract.forceBatchAllowed()); + console.log('trustedAggregator:', await proofOfEfficiencyContract.trustedAggregator()); + console.log('trustedAggregatorTimeout:', await proofOfEfficiencyContract.trustedAggregatorTimeout()); + + console.log('genesiRoot:', await proofOfEfficiencyContract.batchNumToStateRoot(0)); console.log('trustedSequencerURL:', await proofOfEfficiencyContract.trustedSequencerURL()); - console.log('chainID:', Number(await proofOfEfficiencyContract.chainID())); console.log('networkName:', await proofOfEfficiencyContract.networkName()); - console.log('bridgeContract:', await proofOfEfficiencyContract.bridgeAddress()); - console.log('securityCouncil:', await proofOfEfficiencyContract.securityCouncil()); console.log('owner:', await proofOfEfficiencyContract.owner()); // fund account with tokens and ether if it have less than 0.1 ether. diff --git a/deployment/deploy_parameters.json.example b/deployment/deploy_parameters.json.example index cae431930..5e94b36ab 100644 --- a/deployment/deploy_parameters.json.example +++ b/deployment/deploy_parameters.json.example @@ -5,12 +5,12 @@ "realVerifier": false, "chainID": 1001, "networkName": "zkevm", - "claimTimeout": 0, "privateKey": "", "maxFeePerGas":0, "maxPriorityFeePerGas":0, "multiplierGas": 0, "trustedSequencerPvtKey":"", "bridgeMock":false, - "securityCouncilAddress":"0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D" + "admin":"0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D", + "trustedAggregator":"0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D" } \ No newline at end of file diff --git a/deployment/verifyPoE_v2-0.js b/deployment/verifyPoE_v2-0.js index 60c7e6a99..325bbb5c2 100644 --- a/deployment/verifyPoE_v2-0.js +++ b/deployment/verifyPoE_v2-0.js @@ -5,7 +5,6 @@ const hre = require('hardhat'); const { expect } = require('chai'); const { ethers } = require('hardhat'); -const openzeppelinUpgrade = require(`../.openzeppelin/${process.env.HARDHAT_NETWORK}.json`); const pathDeployOutputParameters = path.join(__dirname, './deploy_output.json'); const deployOutputParameters = require(pathDeployOutputParameters); @@ -37,7 +36,7 @@ async function main() { expect(error.message.toLowerCase().includes('already verified')).to.be.equal(true); } - // verify verifierMock + // verify verifier try { await hre.run( 'verify:verify', @@ -49,11 +48,18 @@ async function main() { expect(error.message.toLowerCase().includes('already verified')).to.be.equal(true); } - // verify upgradable SC (hermez and Auction) - for (const implementation in openzeppelinUpgrade.impls) { - const { address } = openzeppelinUpgrade.impls[implementation]; + // verify proxies + + const contractNames = ['proofOfEfficiencyAddress', 'bridgeAddress', 'globalExitRootManagerAddress']; + + for (let i = 0; i < contractNames.length; i++) { try { - await hre.run('verify:verify', { address }); + await hre.run( + 'verify:verify', + { + address: deployOutputParameters[contractNames[i]], + }, + ); } catch (error) { expect(error.message.toLowerCase().includes('already verified')).to.be.equal(true); } diff --git a/docs/ProofOfEfficiency.md b/docs/ProofOfEfficiency.md index 086f01e64..4693af408 100644 --- a/docs/ProofOfEfficiency.md +++ b/docs/ProofOfEfficiency.md @@ -418,9 +418,9 @@ Internal function to activate emergency state on both PoE and Bridge contrats -### calculateBatchFee +### getCurrentBatchFee ```solidity - function calculateBatchFee( + function getCurrentBatchFee( ) public returns (uint256) ``` Function to get the batch fee diff --git a/hardhat.config.js b/hardhat.config.js index f457ba0db..ad17edac0 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -21,7 +21,7 @@ module.exports = { settings: { optimizer: { enabled: true, - runs: 999 + runs: 1 // Should be updated in a real deployment } } }, diff --git a/test/contracts/bridge.test.js b/test/contracts/bridge.test.js index 58fa71f23..b1ecfe90a 100644 --- a/test/contracts/bridge.test.js +++ b/test/contracts/bridge.test.js @@ -35,7 +35,6 @@ describe('Bridge Contract', () => { const LEAF_TYPE_MESSAGE = 1; const proofOfEfficiencyAddress = ethers.constants.AddressZero; - const claimTimeout = 0; beforeEach('Deploy contracts', async () => { // load signers @@ -51,7 +50,7 @@ describe('Bridge Contract', () => { await globalExitRootManager.initialize(rollup.address, bridgeContract.address); - await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, proofOfEfficiencyAddress, claimTimeout); + await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, proofOfEfficiencyAddress); // deploy token const maticTokenFactory = await ethers.getContractFactory('ERC20PermitMock'); @@ -68,7 +67,6 @@ describe('Bridge Contract', () => { expect(await bridgeContract.globalExitRootManager()).to.be.equal(globalExitRootManager.address); expect(await bridgeContract.networkID()).to.be.equal(networkIDMainnet); expect(await bridgeContract.poeAddress()).to.be.equal(proofOfEfficiencyAddress); - expect(await bridgeContract.claimTimeout()).to.be.equal(claimTimeout); expect(await bridgeContract.owner()).to.be.equal(deployer.address); }); @@ -744,7 +742,7 @@ describe('Bridge Contract', () => { metadata, )).to.be.revertedWith('Bridge::_verifyLeaf: DESTINATION_NETWORK_DOES_NOT_MATCH'); - // Check GLOBAL_EXIT_ROOT_INVALID_OR_NOT_YET_CLAIMABLE assert + // Check GLOBAL_EXIT_ROOT_INVALID assert await expect(bridgeContract.claimAsset( proof, index, @@ -756,7 +754,7 @@ describe('Bridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('Bridge::_verifyLeaf: GLOBAL_EXIT_ROOT_INVALID_OR_NOT_YET_CLAIMABLE'); + )).to.be.revertedWith('Bridge::_verifyLeaf: GLOBAL_EXIT_ROOT_INVALID'); // Check SMT_INVALID assert await expect(bridgeContract.claimAsset( @@ -1139,136 +1137,4 @@ describe('Bridge Contract', () => { metadata, )).to.be.revertedWith('Bridge::_verifyLeaf: ALREADY_CLAIMED'); }); - - it('should test claim timeout', async () => { - const originNetwork = networkIDMainnet; - const tokenAddress = tokenContract.address; - const amount = ethers.utils.parseEther('10'); - const destinationNetwork = networkIDMainnet; - const destinationAddress = acc1.address; - - const metadata = metadataToken; - const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); - - const mainnetExitRoot = await globalExitRootManager.lastMainnetExitRoot(); - - // compute root merkle tree in Js - const height = 32; - const merkleTree = new MerkleTreeBridge(height); - const leafValue = getLeafValue( - LEAF_TYPE_ASSET, - originNetwork, - tokenAddress, - destinationNetwork, - destinationAddress, - amount, - metadataHash, - ); - merkleTree.add(leafValue); - - // check merkle root with SC - const rootJSRollup = merkleTree.getRoot(); - - // add rollup Merkle root - await expect(globalExitRootManager.connect(rollup).updateExitRoot(rootJSRollup)) - .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') - .withArgs(mainnetExitRoot, rootJSRollup); - - // check roots - const rollupExitRootSC = await globalExitRootManager.lastRollupExitRoot(); - const computedGlobalExitRoot = calculateGlobalExitRoot(mainnetExitRoot, rollupExitRootSC); - - // check merkle proof - const proof = merkleTree.getProofTreeByIndex(0); - const index = 0; - - /* - * claim - * Can't claim without tokens - */ - await expect(bridgeContract.claimAsset( - proof, - index, - mainnetExitRoot, - rollupExitRootSC, - originNetwork, - tokenAddress, - destinationNetwork, - destinationAddress, - amount, - metadata, - )).to.be.revertedWith('ERC20: transfer amount exceeds balance'); - - // transfer tokens, then claim - await expect(tokenContract.transfer(bridgeContract.address, amount)) - .to.emit(tokenContract, 'Transfer') - .withArgs(deployer.address, bridgeContract.address, amount); - - // Check claimTimeout - expect(await bridgeContract.claimTimeout()).to.be.equal(claimTimeout); - - // Check globalExitRoot timestamp and current timestamp - const globalExitRootTimestamp = await globalExitRootManager.globalExitRootMap(computedGlobalExitRoot); - - // Set claimTimeout - const newClaimTimeout = 1000; - await expect(bridgeContract.connect(acc1).setClaimTimeout(newClaimTimeout)) - .to.be.revertedWith('owner'); - - await expect(bridgeContract.setClaimTimeout(newClaimTimeout)) - .to.emit(bridgeContract, 'SetClaimTimeout') - .withArgs(newClaimTimeout); - - // Can't claim because claim timeout does not expired yet - await expect(bridgeContract.claimAsset( - proof, - index, - mainnetExitRoot, - rollupExitRootSC, - originNetwork, - tokenAddress, - destinationNetwork, - destinationAddress, - amount, - metadata, - )).to.be.revertedWith('Bridge::_verifyLeaf: GLOBAL_EXIT_ROOT_INVALID_OR_NOT_YET_CLAIMABLE'); - - // Can't claim because claim timeout does not expired yet ( edge case) - await ethers.provider.send('evm_setNextBlockTimestamp', [(globalExitRootTimestamp.toNumber() + newClaimTimeout) - 1]); - await expect(bridgeContract.claimAsset( - proof, - index, - mainnetExitRoot, - rollupExitRootSC, - originNetwork, - tokenAddress, - destinationNetwork, - destinationAddress, - amount, - metadata, - )).to.be.revertedWith('Bridge::_verifyLeaf: GLOBAL_EXIT_ROOT_INVALID_OR_NOT_YET_CLAIMABLE'); - - // Now can claim! - await expect(bridgeContract.claimAsset( - proof, - index, - mainnetExitRoot, - rollupExitRootSC, - originNetwork, - tokenAddress, - destinationNetwork, - destinationAddress, - amount, - metadata, - )) - .to.emit(bridgeContract, 'ClaimEvent') - .withArgs( - index, - originNetwork, - tokenAddress, - destinationAddress, - amount, - ).to.emit(tokenContract, 'Transfer') - .withArgs(bridgeContract.address, acc1.address, amount); - }); }); diff --git a/test/contracts/bridgeMock.test.js b/test/contracts/bridgeMock.test.js index 14d07d90e..67a67a73e 100644 --- a/test/contracts/bridgeMock.test.js +++ b/test/contracts/bridgeMock.test.js @@ -32,7 +32,6 @@ describe('Bridge Mock Contract', () => { const LEAF_TYPE_ASSET = 0; const proofOfEfficiencyAddress = ethers.constants.AddressZero; - const claimTimeout = 0; beforeEach('Deploy contracts', async () => { // load signers @@ -47,7 +46,7 @@ describe('Bridge Mock Contract', () => { bridgeContract = await upgrades.deployProxy(bridgeFactory, [], { initializer: false }); await globalExitRootManager.initialize(rollup.address, bridgeContract.address); - await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, proofOfEfficiencyAddress, claimTimeout); + await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, proofOfEfficiencyAddress); // deploy token const maticTokenFactory = await ethers.getContractFactory('ERC20PermitMock'); diff --git a/test/contracts/bridge_permit.test.js b/test/contracts/bridge_permit.test.js index b5b149b6b..1a63b4c4f 100644 --- a/test/contracts/bridge_permit.test.js +++ b/test/contracts/bridge_permit.test.js @@ -40,7 +40,6 @@ describe('Bridge Contract Permit tests', () => { const LEAF_TYPE_ASSET = 0; const proofOfEfficiencyAddress = ethers.constants.AddressZero; - const claimTimeout = 0; beforeEach('Deploy contracts', async () => { // load signers @@ -55,7 +54,7 @@ describe('Bridge Contract Permit tests', () => { bridgeContract = await upgrades.deployProxy(bridgeFactory, [], { initializer: false }); await globalExitRootManager.initialize(rollup.address, bridgeContract.address); - await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, proofOfEfficiencyAddress, claimTimeout); + await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, proofOfEfficiencyAddress); // deploy token const maticTokenFactory = await ethers.getContractFactory('TokenWrapped'); diff --git a/test/contracts/emergencyManager.test.js b/test/contracts/emergencyManager.test.js index 786f4c4d6..71f516f96 100644 --- a/test/contracts/emergencyManager.test.js +++ b/test/contracts/emergencyManager.test.js @@ -3,9 +3,9 @@ const { ethers, upgrades } = require('hardhat'); describe('Emergency mode test', () => { let deployer; - let aggregator; + let trustedAggregator; let trustedSequencer; - let securityCouncil; + let admin; let verifierContract; let bridgeContract; @@ -24,10 +24,12 @@ describe('Emergency mode test', () => { const urlSequencer = 'http://zkevm-json-rpc:8123'; const chainID = 1000; const networkName = 'zkevm'; + const pendingStateTimeoutDefault = 10; + const trustedAggregatorTimeoutDefault = 10; beforeEach('Deploy contract', async () => { // load signers - [deployer, aggregator, trustedSequencer, securityCouncil] = await ethers.getSigners(); + [deployer, trustedAggregator, trustedSequencer, admin] = await ethers.getSigners(); // deploy mock verifier const VerifierRollupHelperFactory = await ethers.getContractFactory( @@ -57,21 +59,25 @@ describe('Emergency mode test', () => { const ProofOfEfficiencyFactory = await ethers.getContractFactory('ProofOfEfficiencyMock'); proofOfEfficiencyContract = await upgrades.deployProxy(ProofOfEfficiencyFactory, [], { initializer: false }); - const claimTimeout = 0; await globalExitRootManager.initialize(proofOfEfficiencyContract.address, bridgeContract.address); - await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, proofOfEfficiencyContract.address, claimTimeout); + await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, proofOfEfficiencyContract.address); await proofOfEfficiencyContract.initialize( globalExitRootManager.address, maticTokenContract.address, verifierContract.address, + bridgeContract.address, + { + admin: admin.address, + chainID, + trustedSequencer: trustedSequencer.address, + pendingStateTimeout: pendingStateTimeoutDefault, + forceBatchAllowed: allowForcebatches, + trustedAggregator: trustedAggregator.address, + trustedAggregatorTimeout: trustedAggregatorTimeoutDefault, + }, genesisRoot, - trustedSequencer.address, - allowForcebatches, urlSequencer, - chainID, networkName, - bridgeContract.address, - securityCouncil.address, ); // fund sequencer address with Matic tokens @@ -84,13 +90,13 @@ describe('Emergency mode test', () => { expect(await bridgeContract.isEmergencyState()).to.be.equal(false); // Set isEmergencyState - await expect(proofOfEfficiencyContract.connect(securityCouncil).activateEmergencyState()) - .to.be.revertedWith('owner'); + await expect(proofOfEfficiencyContract.connect(admin).activateEmergencyState(1)) + .to.be.revertedWith('ProofOfEfficiency::activateEmergencyState: Batch not sequenced or not end of sequence'); - await expect(bridgeContract.connect(securityCouncil).activateEmergencyState()) + await expect(bridgeContract.connect(deployer).activateEmergencyState()) .to.be.revertedWith('ProofOfEfficiency::onlyProofOfEfficiency: only Proof of Efficiency contract'); - await expect(proofOfEfficiencyContract.activateEmergencyState()) + await expect(proofOfEfficiencyContract.activateEmergencyState(0)) .to.emit(proofOfEfficiencyContract, 'EmergencyStateActivated') .to.emit(bridgeContract, 'EmergencyStateActivated'); @@ -99,7 +105,7 @@ describe('Emergency mode test', () => { // Once in emergency state no sequenceBatches/forceBatches can be done const l2txData = '0x123456'; - const maticAmount = await proofOfEfficiencyContract.TRUSTED_SEQUENCER_FEE(); + const maticAmount = await proofOfEfficiencyContract.getCurrentBatchFee(); const currentTimestamp = (await ethers.provider.getBlock()).timestamp; const sequence = { @@ -121,7 +127,7 @@ describe('Emergency mode test', () => { await expect(proofOfEfficiencyContract.forceBatch(l2txData, maticAmount)) .to.be.revertedWith('EmergencyManager::ifNotEmergencyState: only if not emergency state'); - // aggregator forge the batch + // trustedAggregator forge the batch const newLocalExitRoot = '0x0000000000000000000000000000000000000000000000000000000000000001'; const newStateRoot = '0x0000000000000000000000000000000000000000000000000000000000000001'; const numBatch = (await proofOfEfficiencyContract.lastVerifiedBatch()).toNumber() + 1; @@ -131,9 +137,11 @@ describe('Emergency mode test', () => { ['0', '0'], ]; const proofC = ['0', '0']; + const pendingStateNum = 0; await expect( - proofOfEfficiencyContract.connect(aggregator).verifyBatches( + proofOfEfficiencyContract.connect(trustedAggregator).verifyBatches( + pendingStateNum, numBatch - 1, numBatch, newLocalExitRoot, @@ -195,16 +203,16 @@ describe('Emergency mode test', () => { )).to.be.revertedWith('EmergencyManager::ifNotEmergencyState: only if not emergency state'); // Emergency council should deactivate emergency mode - await expect(proofOfEfficiencyContract.activateEmergencyState()) + await expect(proofOfEfficiencyContract.activateEmergencyState(0)) .to.be.revertedWith('EmergencyManager::ifNotEmergencyState: only if not emergency state'); - await expect(bridgeContract.connect(securityCouncil).deactivateEmergencyState()) + await expect(bridgeContract.connect(deployer).deactivateEmergencyState()) .to.be.revertedWith('ProofOfEfficiency::onlyProofOfEfficiency: only Proof of Efficiency contract'); await expect(proofOfEfficiencyContract.deactivateEmergencyState()) - .to.be.revertedWith('ProofOfEfficiency::onlySecurityCouncil: only security council'); + .to.be.revertedWith('ProofOfEfficiency::onlyAdmin: only admin'); - await expect(proofOfEfficiencyContract.connect(securityCouncil).deactivateEmergencyState()) + await expect(proofOfEfficiencyContract.connect(admin).deactivateEmergencyState()) .to.emit(proofOfEfficiencyContract, 'EmergencyStateDeactivated') .to.emit(bridgeContract, 'EmergencyStateDeactivated'); @@ -226,14 +234,16 @@ describe('Emergency mode test', () => { .to.emit(proofOfEfficiencyContract, 'SequenceBatches') .withArgs(lastBatchSequenced + 1); - // aggregator forge the batch + // trustedAggregator forge the batch const initialAggregatorMatic = await maticTokenContract.balanceOf( - await aggregator.getAddress(), + trustedAggregator.address, ); + await ethers.provider.send('evm_increaseTime', [trustedAggregatorTimeoutDefault]); // evm_setNextBlockTimestamp // Verify batch await expect( - proofOfEfficiencyContract.connect(aggregator).verifyBatches( + proofOfEfficiencyContract.connect(trustedAggregator).verifyBatches( + pendingStateNum, numBatch - 1, numBatch, newLocalExitRoot, @@ -243,19 +253,22 @@ describe('Emergency mode test', () => { proofC, ), ).to.emit(proofOfEfficiencyContract, 'VerifyBatches') - .withArgs(numBatch, newStateRoot, aggregator.address); + .withArgs(numBatch, newStateRoot, trustedAggregator.address); const finalAggregatorMatic = await maticTokenContract.balanceOf( - await aggregator.getAddress(), + trustedAggregator.address, ); expect(finalAggregatorMatic).to.equal( ethers.BigNumber.from(initialAggregatorMatic).add(ethers.BigNumber.from(maticAmount)), ); // Finally enter in emergency mode again proving distinc state + const finalPendingStateNum = 1; await expect( - proofOfEfficiencyContract.connect(aggregator).proveNonDeterministicState( + proofOfEfficiencyContract.connect(trustedAggregator).proveNonDeterministicPendingState( + pendingStateNum, + finalPendingStateNum, numBatch - 1, numBatch - 1, newLocalExitRoot, @@ -264,10 +277,12 @@ describe('Emergency mode test', () => { proofB, proofC, ), - ).to.be.revertedWith('ProofOfEfficiency::proveNonDeterministicState: finalNewBatch must be bigger than initNumBatch'); + ).to.be.revertedWith('ProofOfEfficiency::proveNonDeterministicPendingState: finalNewBatch must be equal than currentLastVerifiedBatch'); await expect( - proofOfEfficiencyContract.connect(aggregator).proveNonDeterministicState( + proofOfEfficiencyContract.connect(trustedAggregator).proveNonDeterministicPendingState( + pendingStateNum, + finalPendingStateNum, numBatch - 1, numBatch + 1, newLocalExitRoot, @@ -276,12 +291,14 @@ describe('Emergency mode test', () => { proofB, proofC, ), - ).to.be.revertedWith('ProofOfEfficiency::proveNonDeterministicState: finalNewBatch must be less or equal than lastVerifiedBatch'); + ).to.be.revertedWith('ProofOfEfficiency::proveNonDeterministicPendingState: finalNewBatch must be equal than currentLastVerifiedBatch'); const newStateRootDistinct = '0x0000000000000000000000000000000000000000000000000000000000000002'; await expect( - proofOfEfficiencyContract.proveNonDeterministicState( + proofOfEfficiencyContract.proveNonDeterministicPendingState( + pendingStateNum, + finalPendingStateNum, numBatch - 1, numBatch, newLocalExitRoot, @@ -290,7 +307,7 @@ describe('Emergency mode test', () => { proofB, proofC, ), - ).to.emit(proofOfEfficiencyContract, 'ProveNonDeterministicState').withArgs(newStateRoot, newStateRootDistinct) + ).to.emit(proofOfEfficiencyContract, 'ProveNonDeterministicPendingState').withArgs(newStateRoot, newStateRootDistinct) .to.emit(proofOfEfficiencyContract, 'EmergencyStateActivated') .to.emit(bridgeContract, 'EmergencyStateActivated'); diff --git a/test/contracts/globalExitRootManagerL2.test.js b/test/contracts/globalExitRootManagerL2.test.js index 2cd391fda..d19b159cb 100644 --- a/test/contracts/globalExitRootManagerL2.test.js +++ b/test/contracts/globalExitRootManagerL2.test.js @@ -7,7 +7,6 @@ describe('Global Exit Root L2', () => { let bridge; let globalExitRootManager; const proofOfEfficiencyAddress = ethers.constants.AddressZero; - const claimTimeout = 0; beforeEach('Deploy contracts', async () => { const networkIDRollup = 1; @@ -22,7 +21,7 @@ describe('Global Exit Root L2', () => { const globalExitRootManagerFactory = await ethers.getContractFactory('GlobalExitRootManagerL2Mock', deployer); globalExitRootManager = await globalExitRootManagerFactory.deploy(bridge.address); - await bridge.initialize(networkIDRollup, globalExitRootManager.address, proofOfEfficiencyAddress, claimTimeout); + await bridge.initialize(networkIDRollup, globalExitRootManager.address, proofOfEfficiencyAddress); }); it('should check the constructor parameters', async () => { diff --git a/test/contracts/proofOfEfficiency.test.js b/test/contracts/proofOfEfficiency.test.js index fd6ad760b..9d4198cf8 100644 --- a/test/contracts/proofOfEfficiency.test.js +++ b/test/contracts/proofOfEfficiency.test.js @@ -7,9 +7,9 @@ const { calculateSnarkInput, calculateAccInputHash, calculateBatchHashData } = c describe('Proof of efficiency', () => { let deployer; - let aggregator; + let trustedAggregator; let trustedSequencer; - let securityCouncil; + let admin; let verifierContract; let bridgeContract; @@ -28,10 +28,12 @@ describe('Proof of efficiency', () => { const urlSequencer = 'http://zkevm-json-rpc:8123'; const chainID = 1000; const networkName = 'zkevm'; + const pendingStateTimeoutDefault = 10; + const trustedAggregatorTimeoutDefault = 10; beforeEach('Deploy contract', async () => { // load signers - [deployer, aggregator, trustedSequencer, securityCouncil] = await ethers.getSigners(); + [deployer, trustedAggregator, trustedSequencer, admin] = await ethers.getSigners(); // deploy mock verifier const VerifierRollupHelperFactory = await ethers.getContractFactory( @@ -61,21 +63,25 @@ describe('Proof of efficiency', () => { const ProofOfEfficiencyFactory = await ethers.getContractFactory('ProofOfEfficiencyMock'); proofOfEfficiencyContract = await upgrades.deployProxy(ProofOfEfficiencyFactory, [], { initializer: false }); - const claimTimeout = 0; await globalExitRootManager.initialize(proofOfEfficiencyContract.address, bridgeContract.address); - await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, proofOfEfficiencyContract.address, claimTimeout); + await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, proofOfEfficiencyContract.address); await proofOfEfficiencyContract.initialize( globalExitRootManager.address, maticTokenContract.address, verifierContract.address, + bridgeContract.address, + { + admin: admin.address, + chainID, + trustedSequencer: trustedSequencer.address, + pendingStateTimeout: pendingStateTimeoutDefault, + forceBatchAllowed: allowForcebatches, + trustedAggregator: trustedAggregator.address, + trustedAggregatorTimeout: trustedAggregatorTimeoutDefault, + }, genesisRoot, - trustedSequencer.address, - allowForcebatches, urlSequencer, - chainID, networkName, - bridgeContract.address, - securityCouncil.address, ); // fund sequencer address with Matic tokens @@ -86,48 +92,104 @@ describe('Proof of efficiency', () => { expect(await proofOfEfficiencyContract.globalExitRootManager()).to.be.equal(globalExitRootManager.address); expect(await proofOfEfficiencyContract.matic()).to.be.equal(maticTokenContract.address); expect(await proofOfEfficiencyContract.rollupVerifier()).to.be.equal(verifierContract.address); - expect(await proofOfEfficiencyContract.batchNumToStateRoot(0)).to.be.equal(genesisRoot); + expect(await proofOfEfficiencyContract.bridgeAddress()).to.be.equal(bridgeContract.address); + + expect(await proofOfEfficiencyContract.admin()).to.be.equal(admin.address); + expect(await proofOfEfficiencyContract.chainID()).to.be.equal(chainID); expect(await proofOfEfficiencyContract.trustedSequencer()).to.be.equal(trustedSequencer.address); + expect(await proofOfEfficiencyContract.pendingStateTimeout()).to.be.equal(pendingStateTimeoutDefault); expect(await proofOfEfficiencyContract.forceBatchAllowed()).to.be.equal(allowForcebatches); - expect(await proofOfEfficiencyContract.bridgeAddress()).to.be.equal(bridgeContract.address); - expect(await proofOfEfficiencyContract.securityCouncil()).to.be.equal(securityCouncil.address); - expect(await proofOfEfficiencyContract.owner()).to.be.equal(deployer.address); + expect(await proofOfEfficiencyContract.trustedAggregator()).to.be.equal(trustedAggregator.address); + expect(await proofOfEfficiencyContract.trustedAggregatorTimeout()).to.be.equal(trustedAggregatorTimeoutDefault); + + expect(await proofOfEfficiencyContract.batchNumToStateRoot(0)).to.be.equal(genesisRoot); + expect(await proofOfEfficiencyContract.trustedSequencerURL()).to.be.equal(urlSequencer); + expect(await proofOfEfficiencyContract.networkName()).to.be.equal(networkName); + + expect(await proofOfEfficiencyContract.batchFee()).to.be.equal(ethers.utils.parseEther('1')); }); - it('should check setters of trusted sequencer', async () => { + it('should check setters of admin', async () => { expect(await proofOfEfficiencyContract.trustedSequencer()).to.be.equal(trustedSequencer.address); expect(await proofOfEfficiencyContract.forceBatchAllowed()).to.be.equal(allowForcebatches); expect(await proofOfEfficiencyContract.trustedSequencerURL()).to.be.equal(urlSequencer); - - // setForceBatchAllowed - await expect(proofOfEfficiencyContract.setForceBatchAllowed(!allowForcebatches)) - .to.be.revertedWith('ProofOfEfficiency::onlyTrustedSequencer: only trusted sequencer'); - await expect( - proofOfEfficiencyContract.connect(trustedSequencer).setForceBatchAllowed(!allowForcebatches), - ).to.emit(proofOfEfficiencyContract, 'SetForceBatchAllowed').withArgs(!allowForcebatches); - expect(await proofOfEfficiencyContract.forceBatchAllowed()).to.be.equal(!allowForcebatches); + expect(await proofOfEfficiencyContract.trustedAggregator()).to.be.equal(trustedAggregator.address); + expect(await proofOfEfficiencyContract.trustedAggregatorTimeout()).to.be.equal(trustedAggregatorTimeoutDefault); + expect(await proofOfEfficiencyContract.pendingStateTimeout()).to.be.equal(pendingStateTimeoutDefault); + expect(await proofOfEfficiencyContract.admin()).to.be.equal(admin.address); // setTrustedSequencer await expect(proofOfEfficiencyContract.setTrustedSequencer(deployer.address)) - .to.be.revertedWith('ProofOfEfficiency::onlyTrustedSequencer: only trusted sequencer'); + .to.be.revertedWith('ProofOfEfficiency::onlyAdmin: only admin'); await expect( - proofOfEfficiencyContract.connect(trustedSequencer).setTrustedSequencer(deployer.address), + proofOfEfficiencyContract.connect(admin).setTrustedSequencer(deployer.address), ).to.emit(proofOfEfficiencyContract, 'SetTrustedSequencer').withArgs(deployer.address); expect(await proofOfEfficiencyContract.trustedSequencer()).to.be.equal(deployer.address); + // setForceBatchAllowed + await expect(proofOfEfficiencyContract.setForceBatchAllowed(!allowForcebatches)) + .to.be.revertedWith('ProofOfEfficiency::onlyAdmin: only admin'); + await expect( + proofOfEfficiencyContract.connect(admin).setForceBatchAllowed(!allowForcebatches), + ).to.emit(proofOfEfficiencyContract, 'SetForceBatchAllowed').withArgs(!allowForcebatches); + expect(await proofOfEfficiencyContract.forceBatchAllowed()).to.be.equal(!allowForcebatches); + // setTrustedSequencerURL const url = 'https://test'; - await expect(proofOfEfficiencyContract.connect(trustedSequencer).setTrustedSequencerURL(url)) - .to.be.revertedWith('ProofOfEfficiency::onlyTrustedSequencer: only trusted sequencer'); + await expect(proofOfEfficiencyContract.setTrustedSequencerURL(url)) + .to.be.revertedWith('ProofOfEfficiency::onlyAdmin: only admin'); await expect( - proofOfEfficiencyContract.connect(deployer).setTrustedSequencerURL(url), + proofOfEfficiencyContract.connect(admin).setTrustedSequencerURL(url), ).to.emit(proofOfEfficiencyContract, 'SetTrustedSequencerURL').withArgs(url); expect(await proofOfEfficiencyContract.trustedSequencerURL()).to.be.equal(url); + + // setTrustedAggregator + const newTrustedAggregator = deployer.address; + await expect(proofOfEfficiencyContract.setTrustedAggregator(newTrustedAggregator)) + .to.be.revertedWith('ProofOfEfficiency::onlyAdmin: only admin'); + await expect( + proofOfEfficiencyContract.connect(admin).setTrustedAggregator(newTrustedAggregator), + ).to.emit(proofOfEfficiencyContract, 'SetTrustedAggregator').withArgs(newTrustedAggregator); + expect(await proofOfEfficiencyContract.trustedAggregator()).to.be.equal(newTrustedAggregator); + + // setTrustedAggregatorTimeout + await expect(proofOfEfficiencyContract.setTrustedAggregatorTimeout(trustedAggregatorTimeoutDefault)) + .to.be.revertedWith('ProofOfEfficiency::onlyAdmin: only admin'); + + await expect(proofOfEfficiencyContract.connect(admin).setTrustedAggregatorTimeout(trustedAggregatorTimeoutDefault)) + .to.be.revertedWith('ProofOfEfficiency::setTrustedAggregatorTimeout: new timeout must be lower'); + + const newTrustedAggregatorTimeout = trustedAggregatorTimeoutDefault - 1; + await expect( + proofOfEfficiencyContract.connect(admin).setTrustedAggregatorTimeout(newTrustedAggregatorTimeout), + ).to.emit(proofOfEfficiencyContract, 'SetTrustedAggregatorTimeout').withArgs(newTrustedAggregatorTimeout); + expect(await proofOfEfficiencyContract.trustedAggregatorTimeout()).to.be.equal(newTrustedAggregatorTimeout); + + // setPendingStateTimeoutDefault + await expect(proofOfEfficiencyContract.setPendingStateTimeout(pendingStateTimeoutDefault)) + .to.be.revertedWith('ProofOfEfficiency::onlyAdmin: only admin'); + + await expect(proofOfEfficiencyContract.connect(admin).setPendingStateTimeout(pendingStateTimeoutDefault)) + .to.be.revertedWith('ProofOfEfficiency::setPendingStateTimeout: new timeout must be lower'); + + const newPendingStateTimeoutDefault = pendingStateTimeoutDefault - 1; + await expect( + proofOfEfficiencyContract.connect(admin).setPendingStateTimeout(newPendingStateTimeoutDefault), + ).to.emit(proofOfEfficiencyContract, 'SetPendingStateTimeout').withArgs(newPendingStateTimeoutDefault); + expect(await proofOfEfficiencyContract.pendingStateTimeout()).to.be.equal(newPendingStateTimeoutDefault); + + // setAdmin + await expect(proofOfEfficiencyContract.setAdmin(deployer.address)) + .to.be.revertedWith('ProofOfEfficiency::onlyAdmin: only admin'); + await expect( + proofOfEfficiencyContract.connect(admin).setAdmin(deployer.address), + ).to.emit(proofOfEfficiencyContract, 'SetAdmin').withArgs(deployer.address); + expect(await proofOfEfficiencyContract.admin()).to.be.equal(deployer.address); }); it('should sequence a batch as truested sequencer', async () => { const l2txData = '0x123456'; - const maticAmount = await proofOfEfficiencyContract.TRUSTED_SEQUENCER_FEE(); + const maticAmount = await proofOfEfficiencyContract.getCurrentBatchFee(); const currentTimestamp = (await ethers.provider.getBlock()).timestamp; const sequence = { @@ -146,7 +208,7 @@ describe('Proof of efficiency', () => { .to.be.revertedWith('ERC20: insufficient allowance'); const initialOwnerBalance = await maticTokenContract.balanceOf( - await trustedSequencer.getAddress(), + await trustedSequencer.address, ); // Approve tokens @@ -161,29 +223,34 @@ describe('Proof of efficiency', () => { .to.emit(proofOfEfficiencyContract, 'SequenceBatches') .withArgs(lastBatchSequenced + 1); + const sequencedTimestamp = (await ethers.provider.getBlock()).timestamp; + const finalOwnerBalance = await maticTokenContract.balanceOf( - await trustedSequencer.getAddress(), + await trustedSequencer.address, ); expect(finalOwnerBalance).to.equal( ethers.BigNumber.from(initialOwnerBalance).sub(ethers.BigNumber.from(maticAmount)), ); // Check batch mapping - const batchAccInputHash = await proofOfEfficiencyContract.sequencedBatches(1); + const sequencedBatchData = await proofOfEfficiencyContract.sequencedBatches(1); + const batchAccInputHash = sequencedBatchData.accInputHash; const batchAccInputHashJs = calculateAccInputHash( - await proofOfEfficiencyContract.sequencedBatches(0), + (await proofOfEfficiencyContract.sequencedBatches(0)).accInputHash, calculateBatchHashData(sequence.transactions), sequence.globalExitRoot, sequence.timestamp, trustedSequencer.address, ); expect(batchAccInputHash).to.be.equal(batchAccInputHashJs); + expect(sequencedBatchData.sequencedTimestamp).to.be.equal(sequencedTimestamp); + expect(sequencedBatchData.previousLastBatchSequenced).to.be.equal(0); }); it('sequenceBatches should sequence multiple batches', async () => { const l2txData = '0x1234'; - const maticAmount = (await proofOfEfficiencyContract.TRUSTED_SEQUENCER_FEE()).mul(2); + const maticAmount = (await proofOfEfficiencyContract.getCurrentBatchFee()).mul(2); const currentTimestamp = (await ethers.provider.getBlock()).timestamp; @@ -202,7 +269,7 @@ describe('Proof of efficiency', () => { }; const initialOwnerBalance = await maticTokenContract.balanceOf( - await trustedSequencer.getAddress(), + await trustedSequencer.address, ); // Approve tokens @@ -218,7 +285,7 @@ describe('Proof of efficiency', () => { .withArgs(lastBatchSequenced + 2); const finalOwnerBalance = await maticTokenContract.balanceOf( - await trustedSequencer.getAddress(), + await trustedSequencer.address, ); expect(finalOwnerBalance).to.equal( @@ -226,12 +293,14 @@ describe('Proof of efficiency', () => { ); // Check batch mapping - let batchAccInputHash = await proofOfEfficiencyContract.sequencedBatches(1); + const sequencedBatchData = await proofOfEfficiencyContract.sequencedBatches(1); + const batchAccInputHash = sequencedBatchData.accInputHash; // Only last batch is added to the mapping expect(batchAccInputHash).to.be.equal(ethers.constants.HashZero); - batchAccInputHash = await proofOfEfficiencyContract.sequencedBatches(2); + const sequencedBatchData2 = await proofOfEfficiencyContract.sequencedBatches(2); + const batchAccInputHash2 = sequencedBatchData2.accInputHash; // Calcultate input Hahs for batch 1 let batchAccInputHashJs = calculateAccInputHash( @@ -250,12 +319,12 @@ describe('Proof of efficiency', () => { sequence2.timestamp, trustedSequencer.address, ); - expect(batchAccInputHash).to.be.equal(batchAccInputHashJs); + expect(batchAccInputHash2).to.be.equal(batchAccInputHashJs); }); it('sequenceBatches should sequence multiple batches and force batches', async () => { const l2txDataForceBatch = '0x123456'; - const maticAmount = await proofOfEfficiencyContract.calculateForceProverFee(); + const maticAmount = await proofOfEfficiencyContract.getCurrentBatchFee(); const lastGlobalExitRoot = await globalExitRootManager.getLastGlobalExitRoot(); await expect( @@ -271,7 +340,7 @@ describe('Proof of efficiency', () => { // sequence 2 batches const l2txData = '0x1234'; - const maticAmountSequence = (await proofOfEfficiencyContract.TRUSTED_SEQUENCER_FEE()).mul(1); + const maticAmountSequence = (await proofOfEfficiencyContract.getCurrentBatchFee()).mul(1); const currentTimestamp = (await ethers.provider.getBlock()).timestamp; @@ -290,7 +359,7 @@ describe('Proof of efficiency', () => { }; const initialOwnerBalance = await maticTokenContract.balanceOf( - await trustedSequencer.getAddress(), + await trustedSequencer.address, ); // Approve tokens @@ -326,8 +395,10 @@ describe('Proof of efficiency', () => { .to.emit(proofOfEfficiencyContract, 'SequenceBatches') .withArgs(Number(lastBatchSequenced) + 2); + const sequencedTimestamp = (await ethers.provider.getBlock()).timestamp; + const finalOwnerBalance = await maticTokenContract.balanceOf( - await trustedSequencer.getAddress(), + await trustedSequencer.address, ); expect(finalOwnerBalance).to.equal( @@ -335,7 +406,7 @@ describe('Proof of efficiency', () => { ); // Check batch mapping - let batchAccInputHash = await proofOfEfficiencyContract.sequencedBatches(1); + const batchAccInputHash = (await proofOfEfficiencyContract.sequencedBatches(1)).accInputHash; // Only last batch is added to the mapping expect(batchAccInputHash).to.be.equal(ethers.constants.HashZero); @@ -359,13 +430,15 @@ describe('Proof of efficiency', () => { sequence2.timestamp, trustedSequencer.address, ); - batchAccInputHash = await proofOfEfficiencyContract.sequencedBatches(2); - expect(batchAccInputHash).to.be.equal(batchAccInputHashJs); + const batchData2 = await proofOfEfficiencyContract.sequencedBatches(2); + expect(batchData2.accInputHash).to.be.equal(batchAccInputHashJs); + expect(batchData2.sequencedTimestamp).to.be.equal(sequencedTimestamp); + expect(batchData2.previousLastBatchSequenced).to.be.equal(0); }); it('sequenceBatches should check the timestamp correctly', async () => { const l2txData = '0x'; - const maticAmount = (await proofOfEfficiencyContract.TRUSTED_SEQUENCER_FEE()).mul(2); + const maticAmount = (await proofOfEfficiencyContract.getCurrentBatchFee()).mul(2); const sequence = { transactions: l2txData, @@ -382,7 +455,7 @@ describe('Proof of efficiency', () => { }; const initialOwnerBalance = await maticTokenContract.balanceOf( - await trustedSequencer.getAddress(), + await trustedSequencer.address, ); // Approve tokens @@ -423,7 +496,7 @@ describe('Proof of efficiency', () => { .withArgs(lastBatchSequenced + 2); const finalOwnerBalance = await maticTokenContract.balanceOf( - await trustedSequencer.getAddress(), + await trustedSequencer.address, ); expect(finalOwnerBalance).to.equal( ethers.BigNumber.from(initialOwnerBalance).sub(ethers.BigNumber.from(maticAmount)), @@ -432,10 +505,10 @@ describe('Proof of efficiency', () => { it('should force a batch of transactions', async () => { const l2txData = '0x123456'; - const maticAmount = await proofOfEfficiencyContract.calculateForceProverFee(); + const maticAmount = await proofOfEfficiencyContract.getCurrentBatchFee(); const lastGlobalExitRoot = await globalExitRootManager.getLastGlobalExitRoot(); - expect(maticAmount.toString()).to.be.equal((await proofOfEfficiencyContract.calculateForceProverFee()).toString()); + expect(maticAmount.toString()).to.be.equal((await proofOfEfficiencyContract.getCurrentBatchFee()).toString()); // revert because the maxMatic amount is less than the necessary to pay await expect(proofOfEfficiencyContract.forceBatch(l2txData, maticAmount.sub(1))) @@ -446,7 +519,7 @@ describe('Proof of efficiency', () => { .to.be.revertedWith('ERC20: insufficient allowance'); const initialOwnerBalance = await maticTokenContract.balanceOf( - await deployer.getAddress(), + await deployer.address, ); await expect( maticTokenContract.approve(proofOfEfficiencyContract.address, maticAmount), @@ -460,7 +533,7 @@ describe('Proof of efficiency', () => { .withArgs(lastForceBatch + 1, lastGlobalExitRoot, deployer.address, '0x'); const finalOwnerBalance = await maticTokenContract.balanceOf( - await deployer.getAddress(), + await deployer.address, ); expect(finalOwnerBalance).to.equal( ethers.BigNumber.from(initialOwnerBalance).sub(ethers.BigNumber.from(maticAmount)), @@ -483,7 +556,7 @@ describe('Proof of efficiency', () => { it('should sequence force batches using sequenceForceBatches', async () => { const l2txData = '0x123456'; - const maticAmount = await proofOfEfficiencyContract.calculateForceProverFee(); + const maticAmount = await proofOfEfficiencyContract.getCurrentBatchFee(); const lastGlobalExitRoot = await globalExitRootManager.getLastGlobalExitRoot(); await expect( @@ -545,7 +618,7 @@ describe('Proof of efficiency', () => { expect(await proofOfEfficiencyContract.lastBatchSequenced()).to.be.equal(1); // Check force batches struct - const batchAccInputHash = await proofOfEfficiencyContract.sequencedBatches(1); + const batchAccInputHash = (await proofOfEfficiencyContract.sequencedBatches(1)).accInputHash; const batchAccInputHashJs = calculateAccInputHash( ethers.constants.HashZero, @@ -557,9 +630,9 @@ describe('Proof of efficiency', () => { expect(batchAccInputHash).to.be.equal(batchAccInputHashJs); }); - it('should verify a sequenced batch', async () => { + it('should verify a sequenced batch using trustedVerifyBatches', async () => { const l2txData = '0x123456'; - const maticAmount = await proofOfEfficiencyContract.TRUSTED_SEQUENCER_FEE(); + const maticAmount = await proofOfEfficiencyContract.getCurrentBatchFee(); const currentTimestamp = (await ethers.provider.getBlock()).timestamp; const sequence = { @@ -580,7 +653,8 @@ describe('Proof of efficiency', () => { .to.emit(proofOfEfficiencyContract, 'SequenceBatches') .withArgs(lastBatchSequenced + 1); - // aggregator forge the batch + // trustedAggregator forge the batch + const pendingState = 0; const newLocalExitRoot = '0x0000000000000000000000000000000000000000000000000000000000000000'; const newStateRoot = '0x0000000000000000000000000000000000000000000000000000000000000000'; const numBatch = (await proofOfEfficiencyContract.lastVerifiedBatch()) + 1; @@ -592,11 +666,12 @@ describe('Proof of efficiency', () => { const proofC = ['0', '0']; const initialAggregatorMatic = await maticTokenContract.balanceOf( - await aggregator.getAddress(), + trustedAggregator.address, ); await expect( - proofOfEfficiencyContract.connect(aggregator).verifyBatches( + proofOfEfficiencyContract.connect(trustedAggregator).trustedVerifyBatches( + pendingState, numBatch - 1, numBatch - 1, newLocalExitRoot, @@ -605,10 +680,11 @@ describe('Proof of efficiency', () => { proofB, proofC, ), - ).to.be.revertedWith('ProofOfEfficiency::verifyBatches: finalNewBatch must be bigger than lastVerifiedBatch'); + ).to.be.revertedWith('ProofOfEfficiency::verifyBatches: finalNewBatch must be bigger than currentLastVerifiedBatch'); await expect( - proofOfEfficiencyContract.connect(aggregator).verifyBatches( + proofOfEfficiencyContract.connect(trustedAggregator).trustedVerifyBatches( + pendingState, numBatch - 1, numBatch + 1, newLocalExitRoot, @@ -621,7 +697,8 @@ describe('Proof of efficiency', () => { // Verify batch await expect( - proofOfEfficiencyContract.connect(aggregator).verifyBatches( + proofOfEfficiencyContract.connect(trustedAggregator).trustedVerifyBatches( + pendingState, numBatch - 1, numBatch, newLocalExitRoot, @@ -630,20 +707,20 @@ describe('Proof of efficiency', () => { proofB, proofC, ), - ).to.emit(proofOfEfficiencyContract, 'VerifyBatches') - .withArgs(numBatch, newStateRoot, aggregator.address); + ).to.emit(proofOfEfficiencyContract, 'TrustedVerifyBatches') + .withArgs(numBatch, newStateRoot, trustedAggregator.address); const finalAggregatorMatic = await maticTokenContract.balanceOf( - await aggregator.getAddress(), + trustedAggregator.address, ); expect(finalAggregatorMatic).to.equal( ethers.BigNumber.from(initialAggregatorMatic).add(ethers.BigNumber.from(maticAmount)), ); }); - it('should verify forced sequenced batch', async () => { + it('should verify forced sequenced batch using trustedVerifyBatches', async () => { const l2txData = '0x123456'; - const maticAmount = await proofOfEfficiencyContract.calculateForceProverFee(); + const maticAmount = await proofOfEfficiencyContract.getCurrentBatchFee(); const lastGlobalExitRoot = await globalExitRootManager.getLastGlobalExitRoot(); await expect( @@ -671,7 +748,8 @@ describe('Proof of efficiency', () => { .to.emit(proofOfEfficiencyContract, 'SequenceForceBatches') .withArgs(lastForcedBatch); - // aggregator forge the batch + // trustedAggregator forge the batch + const pendingState = 0; const newLocalExitRoot = '0x0000000000000000000000000000000000000000000000000000000000000000'; const newStateRoot = '0x0000000000000000000000000000000000000000000000000000000000000000'; const numBatch = (await proofOfEfficiencyContract.lastVerifiedBatch()) + 1; @@ -683,12 +761,13 @@ describe('Proof of efficiency', () => { const proofC = ['0', '0']; const initialAggregatorMatic = await maticTokenContract.balanceOf( - await aggregator.getAddress(), + trustedAggregator.address, ); // Verify batch await expect( - proofOfEfficiencyContract.connect(aggregator).verifyBatches( + proofOfEfficiencyContract.connect(trustedAggregator).trustedVerifyBatches( + pendingState, numBatch - 1, numBatch, newLocalExitRoot, @@ -698,12 +777,12 @@ describe('Proof of efficiency', () => { proofC, ), ).to.emit(proofOfEfficiencyContract, 'VerifyBatch') - .withArgs(numBatch, aggregator.address) + .withArgs(numBatch, trustedAggregator.address) .to.emit(maticTokenContract, 'Transfer') - .withArgs(proofOfEfficiencyContract.address, aggregator.address, maticAmount); + .withArgs(proofOfEfficiencyContract.address, trustedAggregator.address, maticAmount); const finalAggregatorMatic = await maticTokenContract.balanceOf( - await aggregator.getAddress(), + trustedAggregator.address, ); expect(finalAggregatorMatic).to.equal( @@ -713,7 +792,7 @@ describe('Proof of efficiency', () => { it('should match the computed SC input with the Js input', async () => { const l2txData = '0x123456'; - const maticAmount = await proofOfEfficiencyContract.TRUSTED_SEQUENCER_FEE(); + const maticAmount = await proofOfEfficiencyContract.getCurrentBatchFee(); const currentTimestamp = (await ethers.provider.getBlock()).timestamp; const sequence = { @@ -735,8 +814,8 @@ describe('Proof of efficiency', () => { .to.emit(proofOfEfficiencyContract, 'SequenceBatches') .withArgs(lastBatchSequenced + 1); - const sentBatchHash = await proofOfEfficiencyContract.sequencedBatches(lastBatchSequenced + 1); - const oldAccInputHash = await proofOfEfficiencyContract.sequencedBatches(0); + const sentBatchHash = (await proofOfEfficiencyContract.sequencedBatches(lastBatchSequenced + 1)).accInputHash; + const oldAccInputHash = (await proofOfEfficiencyContract.sequencedBatches(0)).accInputHash; const batchAccInputHashJs = calculateAccInputHash( oldAccInputHash, @@ -767,7 +846,9 @@ describe('Proof of efficiency', () => { ); // Compute Js input + const pendingStateNum = 0; const circuitInpuSnarkSC = await proofOfEfficiencyContract.getNextSnarkInput( + pendingStateNum, numBatch - 1, numBatch, newLocalExitRoot, @@ -779,7 +860,7 @@ describe('Proof of efficiency', () => { it('should match the computed SC input with the Js input in force batches', async () => { const l2txData = '0x123456'; - const maticAmount = await proofOfEfficiencyContract.calculateForceProverFee(); + const maticAmount = await proofOfEfficiencyContract.getCurrentBatchFee(); const lastGlobalExitRoot = await globalExitRootManager.getLastGlobalExitRoot(); await expect( @@ -809,8 +890,8 @@ describe('Proof of efficiency', () => { .withArgs(lastForcedBatch); const sequencedTimestmap = (await ethers.provider.getBlock()).timestamp; - const oldAccInputHash = await proofOfEfficiencyContract.sequencedBatches(0); - const batchAccInputHash = await proofOfEfficiencyContract.sequencedBatches(1); + const oldAccInputHash = (await proofOfEfficiencyContract.sequencedBatches(0)).accInputHash; + const batchAccInputHash = (await proofOfEfficiencyContract.sequencedBatches(1)).accInputHash; const batchAccInputHashJs = calculateAccInputHash( oldAccInputHash, @@ -841,7 +922,9 @@ describe('Proof of efficiency', () => { ); // Compute Js input + const pendingStateNum = 0; const circuitInpuSnarkSC = await proofOfEfficiencyContract.getNextSnarkInput( + pendingStateNum, numBatch - 1, numBatch, newLocalExitRoot, diff --git a/test/contracts/real-prover/real-flow.test.js b/test/contracts/real-prover/real-flow.test.js index fa0de2ebe..1a4a9eb50 100644 --- a/test/contracts/real-prover/real-flow.test.js +++ b/test/contracts/real-prover/real-flow.test.js @@ -22,6 +22,8 @@ describe('Real flow test', () => { let globalExitRootManager; let deployer; let trustedSequencer; + let trustedAggregator; + let admin; const maticTokenName = 'Matic Token'; const maticTokenSymbol = 'MATIC'; @@ -34,10 +36,12 @@ describe('Real flow test', () => { const urlSequencer = 'http://zkevm-json-rpc:8123'; const { chainID } = inputJson; const networkName = 'zkevm'; + const pendingStateTimeoutDefault = 10; + const trustedAggregatorTimeoutDefault = 10; beforeEach('Deploy contract', async () => { // load signers - [deployer] = await ethers.getSigners(); + [deployer, trustedAggregator, admin] = await ethers.getSigners(); // Could be different address teorically but for now it's fine const trustedSequencerAddress = inputJson.singleBatchData[0].sequencerAddr; @@ -74,23 +78,27 @@ describe('Real flow test', () => { // deploy global exit root manager const globalExitRootManagerFactory = await ethers.getContractFactory('GlobalExitRootManagerMock'); - const claimTimeout = 0; globalExitRootManager = await globalExitRootManagerFactory.deploy(proofOfEfficiencyContract.address, bridgeContract.address); - await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, proofOfEfficiencyContract.address, claimTimeout); + await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, proofOfEfficiencyContract.address); await proofOfEfficiencyContract.initialize( globalExitRootManager.address, maticTokenContract.address, verifierContract.address, + bridgeContract.address, + { + admin: admin.address, + chainID, + trustedSequencer: trustedSequencer.address, + pendingStateTimeout: pendingStateTimeoutDefault, + forceBatchAllowed: allowForcebatches, + trustedAggregator: trustedAggregator.address, + trustedAggregatorTimeout: trustedAggregatorTimeoutDefault, + }, genesisRoot, - trustedSequencer.address, - allowForcebatches, urlSequencer, - chainID, networkName, - bridgeContract.address, - ethers.constants.AddressZero, ); // fund sequencer address with Matic tokens @@ -102,7 +110,7 @@ describe('Real flow test', () => { const batchesNum = batchesData.length; // Approve tokens - const maticAmount = await proofOfEfficiencyContract.TRUSTED_SEQUENCER_FEE(); + const maticAmount = await proofOfEfficiencyContract.getCurrentBatchFee(); await expect( maticTokenContract.connect(trustedSequencer).approve(proofOfEfficiencyContract.address, maticAmount.mul(batchesNum)), ).to.emit(maticTokenContract, 'Approval'); @@ -143,7 +151,7 @@ describe('Real flow test', () => { // check trusted sequencer const trustedSequencerAddress = inputJson.singleBatchData[i].sequencerAddr; if (trustedSequencer.address !== trustedSequencerAddress) { - await proofOfEfficiencyContract.connect(trustedSequencer).setTrustedSequencer(trustedSequencerAddress); + await proofOfEfficiencyContract.connect(admin).setTrustedSequencer(trustedSequencerAddress); await ethers.provider.send('hardhat_impersonateAccount', [trustedSequencerAddress]); trustedSequencer = await ethers.getSigner(trustedSequencerAddress); await deployer.sendTransaction({ @@ -172,8 +180,9 @@ describe('Real flow test', () => { to: aggregatorAddress, value: ethers.utils.parseEther('4'), }); + await proofOfEfficiencyContract.connect(admin).setTrustedAggregator(aggregatorAddress); - const batchAccInputHash = await proofOfEfficiencyContract.sequencedBatches(inputJson.newNumBatch); + const batchAccInputHash = (await proofOfEfficiencyContract.sequencedBatches(inputJson.newNumBatch)).accInputHash; expect(batchAccInputHash).to.be.equal(inputJson.newAccInputHash); const { @@ -200,10 +209,11 @@ describe('Real flow test', () => { const { newStateRoot } = inputJson; const { oldNumBatch } = inputJson; const { newNumBatch } = inputJson; - + const pendingStateNum = 0; // Verify batch await expect( - proofOfEfficiencyContract.connect(aggregator).verifyBatches( + proofOfEfficiencyContract.connect(aggregator).trustedVerifyBatches( + pendingStateNum, oldNumBatch, newNumBatch, newLocalExitRoot, @@ -212,7 +222,7 @@ describe('Real flow test', () => { proofB, proofC, ), - ).to.emit(proofOfEfficiencyContract, 'VerifyBatches') + ).to.emit(proofOfEfficiencyContract, 'TrustedVerifyBatches') .withArgs(newNumBatch, newStateRoot, aggregator.address); }); }); diff --git a/test/contracts/snark_stark_input.test.js b/test/contracts/snark_stark_input.test.js index 360bc4e78..43ab8baf8 100644 --- a/test/contracts/snark_stark_input.test.js +++ b/test/contracts/snark_stark_input.test.js @@ -26,16 +26,22 @@ describe('Proof of efficiency snark stark input test', () => { randomSigner.address, randomSigner.address, randomSigner.address, - genesisRoot, randomSigner.address, - allowForcebatches, + { + admin: randomSigner.address, + chainID, + trustedSequencer: randomSigner.address, + pendingStateTimeout: 0, + forceBatchAllowed: allowForcebatches, + trustedAggregator: randomSigner.address, + trustedAggregatorTimeout: 0, + }, + genesisRoot, urlSequencer, - chainID, networkName, - ethers.constants.AddressZero, - ethers.constants.AddressZero, ], ); + await proofOfEfficiencyContract.deployed(); }); @@ -76,9 +82,11 @@ describe('Proof of efficiency snark stark input test', () => { const aggregatorAddress = '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266'; const expectedSnarkInputHash = '15588448576060468525242870965361192827910782996030023758348255084502752104347'; + const lastPendingStateConsolidated = 0; + const sequencedTimestamp = 999; // set smart contract with correct parameters await proofOfEfficiencyContract.setStateRoot(oldStateRoot, oldNumBatch); - await proofOfEfficiencyContract.setSequencedBatches(newNumBatch, newAccInputHash); + await proofOfEfficiencyContract.setSequencedBatches(newNumBatch, newAccInputHash, sequencedTimestamp, lastPendingStateConsolidated); await proofOfEfficiencyContract.setSequencedBatch(1); await ethers.provider.send('hardhat_impersonateAccount', [aggregatorAddress]); @@ -89,7 +97,9 @@ describe('Proof of efficiency snark stark input test', () => { }); // Compute SC input + const pendingStateNum = 0; const inputSnarkSC = await proofOfEfficiencyContract.connect(aggregator).getNextSnarkInput( + pendingStateNum, oldNumBatch, newNumBatch, newLocalExitRoot, From bac5d5bfc891193aa2595ca09e13de6d34fdc09a Mon Sep 17 00:00:00 2001 From: invocamanman Date: Mon, 19 Dec 2022 04:19:49 +0100 Subject: [PATCH 42/71] update genesis --- deployment/genesis-gen.json | 3 +-- deployment/genesis.json | 6 +++--- docker/scripts/genesis_docker.json | 6 +++--- docker/scripts/genesis_gen_docker.json | 3 +-- 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/deployment/genesis-gen.json b/deployment/genesis-gen.json index d7fee36ec..e0374775d 100644 --- a/deployment/genesis-gen.json +++ b/deployment/genesis-gen.json @@ -56,8 +56,7 @@ "paramsFunction": [ 1, "0xAE4bB80bE56B819606589DE61d5ec3b522EEB032", - "0x0000000000000000000000000000000000000000", - 0 + "0x0000000000000000000000000000000000000000" ], "contractName": "Bridge" } diff --git a/deployment/genesis.json b/deployment/genesis.json index dc560476c..fcc04d5c7 100644 --- a/deployment/genesis.json +++ b/deployment/genesis.json @@ -1,11 +1,11 @@ { - "root": "0xbc98dac82be8590e52e6bee730fbed3c154e9952949d82e4681e6a9c02fb041c", + "root": "0x53d8343ab10abc7e2741db8da1c1d92598cd454f719bc2fe75d3c00f84b53ff5", "genesis": [ { "balance": "100000000000000000000000", "nonce": "1", "address": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988", - "bytecode": "0x608060405260043610620001db5760003560e01c806381b1c17411620000ff578063d96a15f71162000095578063e7a5b4ea116200006c578063e7a5b4ea1462000658578063ed6be5c9146200067d578063f2fde38b1462000694578063ff634ed714620006b957600080fd5b8063d96a15f714620005f5578063dbc16976146200060c578063e7375881146200062457600080fd5b8063a08e8a0811620000d6578063a08e8a08146200054f578063aaa13cc21462000579578063bab161bf146200059e578063d02103ca14620005d357600080fd5b806381b1c17414620004d35780638da5cb5b146200050d5780638f611519146200052d57600080fd5b80633ae05047116200017557806346385549116200014c57806346385549146200044c578063655595401462000471578063715018a614620004965780637b6323c114620004ae57600080fd5b80633ae05047146200032e5780633da8168214620003465780633e197043146200036b57600080fd5b80632072f6c511620001b65780632072f6c5146200025157806322e95f2c14620002695780632dfdf0b514620002a7578063318aee3d14620002bf57600080fd5b80630871e97114620001e05780630e1da6c314620001f957806315064c961462000224575b600080fd5b620001f7620001f13660046200316c565b620006d0565b005b3480156200020657600080fd5b5062000211608d5481565b6040519081526020015b60405180910390f35b3480156200023157600080fd5b50602254620002409060ff1681565b60405190151581526020016200021b565b3480156200025e57600080fd5b50620001f762000c7a565b3480156200027657600080fd5b506200028e62000288366004620031f9565b62000d2e565b6040516001600160a01b0390911681526020016200021b565b348015620002b457600080fd5b506200021160215481565b348015620002cc57600080fd5b5062000309620002de36600462003235565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200021b565b3480156200033b57600080fd5b506200021162000db1565b3480156200035357600080fd5b5062000240620003653660046200333d565b62000ea4565b3480156200037857600080fd5b50620002116200038a366004620033bb565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200045957600080fd5b50620001f76200046b366004620034cc565b62000fa6565b3480156200047e57600080fd5b50620001f762000490366004620035b3565b6200122c565b348015620004a357600080fd5b50620001f762001412565b348015620004bb57600080fd5b50620001f7620004cd366004620034cc565b62001428565b348015620004e057600080fd5b506200028e620004f236600462003609565b6089602052600090815260409020546001600160a01b031681565b3480156200051a57600080fd5b506055546001600160a01b03166200028e565b3480156200053a57600080fd5b50608c546200028e906001600160a01b031681565b3480156200055c57600080fd5b5062000566600081565b60405160ff90911681526020016200021b565b3480156200058657600080fd5b506200028e6200059836600462003623565b620019ea565b348015620005ab57600080fd5b50608754620005bd9063ffffffff1681565b60405163ffffffff90911681526020016200021b565b348015620005e057600080fd5b50608b546200028e906001600160a01b031681565b620001f762000606366004620036d7565b62001b56565b3480156200061957600080fd5b50620001f762001e0a565b3480156200063157600080fd5b50620002406200064336600462003609565b60886020526000908152604090205460ff1681565b3480156200066557600080fd5b50620001f76200067736600462003609565b62001ebc565b3480156200068a57600080fd5b50620005bd600081565b348015620006a157600080fd5b50620001f7620006b336600462003235565b62001f01565b348015620006c657600080fd5b5062000566600181565b60225460ff1615620007755760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60875463ffffffff90811690861603620007f85760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b60008060606001600160a01b0389166200088d57853414620008835760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200076c565b6000915062000b17565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000974576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af11580156200093b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200096191906200374e565b5060208101518151909450925062000b15565b84156200098957620009898a88888862001f97565b620009a06001600160a01b038b1633308a620025bc565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620009f7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a219190810190620037e9565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000a60573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a8a9190810190620037e9565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ac9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aef919062003822565b60405160200162000b039392919062003870565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162000b59989796959493929190620038ad565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000c019062002675565b608b546001600160a01b03166333d6247d62000c1c62000db1565b6040518263ffffffff1660e01b815260040162000c3b91815260200190565b600060405180830381600087803b15801562000c5657600080fd5b505af115801562000c6b573d6000803e3d6000fd5b50505050505050505050505050565b608c546001600160a01b0316331462000d225760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c620027d9565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b602154600090819081805b602081101562000e9b578260011660010362000e1c576001816020811062000de85762000de862003919565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000e49565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000e5660028462003977565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000e9290620039b3565b91505062000dbc565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000f97578160011660010362000f215786818151811062000edf5762000edf62003919565b60200260200101518360405160200162000f03929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000f73565b8287828151811062000f375762000f3762003919565b602002602001015160405160200162000f5a929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000f8060028362003977565b91508062000f8e81620039b3565b91505062000eb4565b5050821490505b949350505050565b60225460ff1615620010475760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6200105d8a8a8a8a8a8a8a8a8a8a6001620028b2565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b038516908490620010a09089908b908790602401620039ee565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001105919062003a27565b60006040518083038185875af1925050503d806000811462001144576040519150601f19603f3d011682016040523d82523d6000602084013e62001149565b606091505b5050905080620011c15760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff16158080156200124d5750600054600160ff909116105b80620012695750303b15801562001269575060005460ff166001145b620012dd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200076c565b6000805460ff1916600117905580156200131e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d829055620013a762002c65565b80156200140b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6200141c62002cef565b62000d2c600062002d4b565b60225460ff1615620014c95760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b620014df8a8a8a8a8a8a8a8a8a8a6000620028b2565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620015fe57604080516000808252602082019092526001600160a01b0385169084906040516200153a919062003a27565b60006040518083038185875af1925050503d806000811462001579576040519150601f19603f3d011682016040523d82523d6000602084013e6200157e565b606091505b5050905080620015f75760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c45440000000000000000000000000000000000000000000000000060648201526084016200076c565b5062001980565b60875463ffffffff908116908716036200162e57620016286001600160a01b038616848462002db5565b62001980565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620018ec57600080600085806020019051810190620016ce919062003a45565b925092509250600085848484604051620016e890620030d5565b620016f69392919062003870565b8190604051809103906000f590508015801562001717573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001785573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017ab91906200374e565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620018da9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200197d565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001955573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200197b91906200374e565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162001a6d90620030d5565b601f1982820381018352601f90910116604081905262001a9a908d908d908d908d908d9060200162003af1565b60408051601f198184030181529082905262001aba929160200162003b32565b6040516020818303038152906040528051906020012060405160200162001b3094939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff161562001bf75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b60875463ffffffff9081169084160362001c7a5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b9262001cc79260019263ffffffff9092169133918991899134918a9190620038ad565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d850152346051850152607180850192909252805180850390920182526091909301909252815191012062001d979062002675565b608b546001600160a01b03166333d6247d62001db262000db1565b6040518263ffffffff1660e01b815260040162001dd191815260200190565b600060405180830381600087803b15801562001dec57600080fd5b505af115801562001e01573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001eb25760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c62002e00565b62001ec662002cef565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001f0b62002cef565b6001600160a01b03811662001f895760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016200076c565b62001f948162002d4b565b50565b600062001fda83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002eaf92505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620022dc5760008080808080806200203d896004818d62003b65565b8101906200204c919062003b91565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620020e35760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0386163014620021635760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b8a8514620021da5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002288919062003a27565b6000604051808303816000865af19150503d8060008114620022c7576040519150601f19603f3d011682016040523d82523d6000602084013e620022cc565b606091505b505050505050505050506200140b565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c00000000000000000000000000000000000000000000000000000000146200236f5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200076c565b600080808080808080620023878a6004818e62003b65565b81019062002396919062003bec565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200242f5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0387163014620024af5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002566919062003a27565b6000604051808303816000865af19150503d8060008114620025a5576040519150601f19603f3d011682016040523d82523d6000602084013e620025aa565b606091505b50505050505050505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526200266f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002eb6565b50505050565b806001620026866020600262003db1565b62002692919062003dbf565b602154106200270a5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200076c565b6001602160008282546200271f919062003dd9565b909155505060215460005b6020811015620027c957816001166001036200275f57826001826020811062002757576200275762003919565b015550505050565b6001816020811062002775576200277562003919565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620027b2919062003977565b915080620027c081620039b3565b9150506200272a565b50620027d462003df4565b505050565b60225460ff16156200287a5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b63ffffffff8a1660009081526088602052604090205460ff16156200293f5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af1158015620029cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620029f2919062003e23565b9050801580159062002a115750608d5462002a0e824262003dbf565b10155b62002aab5760405162461bcd60e51b815260206004820152604260248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c49445f4f525f4e4f545f5945545f434c41494d414260648201527f4c45000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b60875463ffffffff87811691161462002b2d5760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000000060648201526084016200076c565b60875460009063ffffffff1662002b4657508862002b49565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d82015260518101899052607180820193909352815180820390930183526091019052805191012062002c17908e8e63ffffffff168462000ea4565b62000c6b5760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c494460448201526064016200076c565b600054610100900460ff1662002ce45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200076c565b62000d2c3362002d4b565b6055546001600160a01b0316331462000d2c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200076c565b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620027d49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016200260a565b60225460ff1662002e7a5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016200076c565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002f0d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662002fa29092919063ffffffff16565b805190915015620027d4578080602001905181019062002f2e91906200374e565b620027d45760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200076c565b606062000f9e848460008585600080866001600160a01b0316858760405162002fcc919062003a27565b60006040518083038185875af1925050503d80600081146200300b576040519150601f19603f3d011682016040523d82523d6000602084013e62003010565b606091505b509150915062003023878383876200302e565b979650505050505050565b60608315620030a25782516000036200309a576001600160a01b0385163b6200309a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200076c565b508162000f9e565b62000f9e8383815115620030b95781518083602001fd5b8060405162461bcd60e51b81526004016200076c919062003e3d565b6119c78062003e5383390190565b6001600160a01b038116811462001f9457600080fd5b80356200310681620030e3565b919050565b803563ffffffff811681146200310657600080fd5b60008083601f8401126200313357600080fd5b50813567ffffffffffffffff8111156200314c57600080fd5b6020830191508360208285010111156200316557600080fd5b9250929050565b60008060008060008060a087890312156200318657600080fd5b86356200319381620030e3565b9550620031a3602088016200310b565b94506040870135620031b581620030e3565b935060608701359250608087013567ffffffffffffffff811115620031d957600080fd5b620031e789828a0162003120565b979a9699509497509295939492505050565b600080604083850312156200320d57600080fd5b62003218836200310b565b915060208301356200322a81620030e3565b809150509250929050565b6000602082840312156200324857600080fd5b81356200325581620030e3565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620032b757620032b76200325c565b604052919050565b600082601f830112620032d157600080fd5b8135602067ffffffffffffffff821115620032f057620032f06200325c565b8160051b620033018282016200328b565b92835284810182019282810190878511156200331c57600080fd5b83870192505b84831015620030235782358252918301919083019062003322565b600080600080608085870312156200335457600080fd5b84359350602085013567ffffffffffffffff808211156200337457600080fd5b6200338288838901620032bf565b94506040870135915080821682146200339a57600080fd5b509396929550929360600135925050565b60ff8116811462001f9457600080fd5b600080600080600080600060e0888a031215620033d757600080fd5b8735620033e481620033ab565b9650620033f4602089016200310b565b955060408801356200340681620030e3565b945062003416606089016200310b565b935060808801356200342881620030e3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200346257620034626200325c565b50601f01601f191660200190565b600082601f8301126200348257600080fd5b813562003499620034938262003445565b6200328b565b818152846020838601011115620034af57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620034ed57600080fd5b8a3567ffffffffffffffff808211156200350657600080fd5b620035148e838f01620032bf565b9b506200352460208e016200310b565b9a5060408d0135995060608d013598506200354260808e016200310b565b97506200355260a08e01620030f9565b96506200356260c08e016200310b565b95506200357260e08e01620030f9565b94506101008d013593506101208d01359150808211156200359257600080fd5b50620035a18d828e0162003470565b9150509295989b9194979a5092959850565b60008060008060808587031215620035ca57600080fd5b620035d5856200310b565b93506020850135620035e781620030e3565b92506040850135620035f981620030e3565b9396929550929360600135925050565b6000602082840312156200361c57600080fd5b5035919050565b600080600080600080600060a0888a0312156200363f57600080fd5b6200364a886200310b565b965060208801356200365c81620030e3565b9550604088013567ffffffffffffffff808211156200367a57600080fd5b620036888b838c0162003120565b909750955060608a0135915080821115620036a257600080fd5b50620036b18a828b0162003120565b9094509250506080880135620036c781620033ab565b8091505092959891949750929550565b600080600060608486031215620036ed57600080fd5b620036f8846200310b565b925060208401356200370a81620030e3565b9150604084013567ffffffffffffffff8111156200372757600080fd5b620037358682870162003470565b9150509250925092565b801515811462001f9457600080fd5b6000602082840312156200376157600080fd5b815162003255816200373f565b60005b838110156200378b57818101518382015260200162003771565b838111156200266f5750506000910152565b600082601f830112620037af57600080fd5b8151620037c0620034938262003445565b818152846020838601011115620037d657600080fd5b62000f9e8260208301602087016200376e565b600060208284031215620037fc57600080fd5b815167ffffffffffffffff8111156200381457600080fd5b62000f9e848285016200379d565b6000602082840312156200383557600080fd5b81516200325581620033ab565b600081518084526200385c8160208601602086016200376e565b601f01601f19169290920160200192915050565b60608152600062003885606083018662003842565b828103602084015262003899818662003842565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620039008285018762003842565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082620039ae577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620039e757620039e762003948565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003a1e606083018462003842565b95945050505050565b6000825162003a3b8184602087016200376e565b9190910192915050565b60008060006060848603121562003a5b57600080fd5b835167ffffffffffffffff8082111562003a7457600080fd5b62003a82878388016200379d565b9450602086015191508082111562003a9957600080fd5b5062003aa8868287016200379d565b925050604084015162003abb81620033ab565b809150509250925092565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003b0760608301878962003ac6565b828103602084015262003b1c81868862003ac6565b91505060ff831660408301529695505050505050565b6000835162003b468184602088016200376e565b83519083019062003b5c8183602088016200376e565b01949350505050565b6000808585111562003b7657600080fd5b8386111562003b8457600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003bad57600080fd5b873562003bba81620030e3565b9650602088013562003bcc81620030e3565b9550604088013594506060880135935060808801356200342881620033ab565b600080600080600080600080610100898b03121562003c0a57600080fd5b883562003c1781620030e3565b9750602089013562003c2981620030e3565b96506040890135955060608901359450608089013562003c49816200373f565b935060a089013562003c5b81620033ab565b979a969950949793969295929450505060c08201359160e0013590565b600181815b8085111562003cd757817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003cbb5762003cbb62003948565b8085161562003cc957918102915b93841c939080029062003c7d565b509250929050565b60008262003cf05750600162000dab565b8162003cff5750600062000dab565b816001811462003d18576002811462003d235762003d43565b600191505062000dab565b60ff84111562003d375762003d3762003948565b50506001821b62000dab565b5060208310610133831016604e8410600b841016171562003d68575081810a62000dab565b62003d74838362003c78565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003da95762003da962003948565b029392505050565b600062003255838362003cdf565b60008282101562003dd45762003dd462003948565b500390565b6000821982111562003def5762003def62003948565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60006020828403121562003e3657600080fd5b5051919050565b6020815260006200325560208301846200384256fe60c06040523480156200001157600080fd5b50604051620019c7380380620019c78339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161150d620004ba600039600061053001526000818161036f01526104fa015261150d6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b604051610191919061123b565b60405180910390f35b6101ad6101a83660046112d7565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad610204366004611301565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad6102763660046112d7565b610552565b6101ad6102893660046112d7565b61059e565b6101c161029c36600461133d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d236600461133d565b60066020526000908152604090205481565b610184610645565b6101ad6102fa3660046112d7565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad6103523660046112d7565b6106ed565b6101ad6103653660046112d7565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f36600461135f565b6107b2565b005b6101c16103b43660046113d2565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043790611405565b80601f016020809104026020016040519081016040528092919081815260200182805461046390611405565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f12565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611487565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c8383610fda565b50600192915050565b60606004805461043790611405565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c83836110b3565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866108818361149f565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f3d610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff821661103d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b806002600082825461104f9190611487565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff821661113c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156111d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610c27565b600060208083528351808285015260005b818110156112685785810183015185820160400152820161124c565b8181111561127a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112d257600080fd5b919050565b600080604083850312156112ea57600080fd5b6112f3836112ae565b946020939093013593505050565b60008060006060848603121561131657600080fd5b61131f846112ae565b925061132d602085016112ae565b9150604084013590509250925092565b60006020828403121561134f57600080fd5b611358826112ae565b9392505050565b600080600080600080600060e0888a03121561137a57600080fd5b611383886112ae565b9650611391602089016112ae565b95506040880135945060608801359350608088013560ff811681146113b557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156113e557600080fd5b6113ee836112ae565b91506113fc602084016112ae565b90509250929050565b600181811c9082168061141957607f821691505b602082108103611452577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561149a5761149a611458565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036114d0576114d0611458565b506001019056fea264697066735822122094134962e5fa2f6357086a2590b7f3a754d340b16e5312664d82a308bc23a0df64736f6c634300080f0033a26469706673582212207d802e4c153f08d52b883999d6ed4e590e1894e2db82359c2f8cde0298f066c464736f6c634300080f0033", + "bytecode": "0x608060405260043610620001585760003560e01c80630871e971146200015d57806315064c9614620001765780632072f6c514620001a757806322e95f2c14620001bf5780632dfdf0b514620001fd578063318aee3d14620002245780633ae0504714620002925780633da8168214620002aa5780633e19704314620002cf5780634638554914620002f4578063647c576c1462000319578063715018a6146200033e5780637b6323c1146200035657806381b1c174146200037b5780638da5cb5b14620003b55780638f61151914620003cd5780639e34070f14620003ef578063a08e8a081462000414578063aaa13cc2146200043e578063bab161bf1462000463578063d02103ca1462000498578063d96a15f714620004ba578063dbc1697614620004d1578063ed6be5c914620004e9578063ee25560b1462000500578063f2fde38b1462000531578063ff634ed71462000556575b600080fd5b620001746200016e36600462002529565b6200056d565b005b3480156200018357600080fd5b50602254620001929060ff1681565b60405190151581526020015b60405180910390f35b348015620001b457600080fd5b506200017462000998565b348015620001cc57600080fd5b50620001e4620001de366004620025b5565b620009d1565b6040516001600160a01b0390911681526020016200019e565b3480156200020a57600080fd5b506200021560215481565b6040519081526020016200019e565b3480156200023157600080fd5b506200026d62000243366004620025f1565b608a6020526000908152604090205463ffffffff811690600160201b90046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200019e565b3480156200029f57600080fd5b506200021562000a24565b348015620002b757600080fd5b5062000192620002c9366004620026de565b62000b18565b348015620002dc57600080fd5b5062000215620002ee3660046200275b565b62000c09565b3480156200030157600080fd5b5062000174620003133660046200286b565b62000c96565b3480156200032657600080fd5b50620001746200033836600462002951565b62000e1e565b3480156200034b57600080fd5b506200017462000f8b565b3480156200036357600080fd5b5062000174620003753660046200286b565b62000fa1565b3480156200038857600080fd5b50620001e46200039a366004620029a1565b6089602052600090815260409020546001600160a01b031681565b348015620003c257600080fd5b50620001e46200142b565b348015620003da57600080fd5b50608c54620001e4906001600160a01b031681565b348015620003fc57600080fd5b50620001926200040e366004620029a1565b6200143a565b3480156200042157600080fd5b506200042b600081565b60405160ff90911681526020016200019e565b3480156200044b57600080fd5b50620001e46200045d366004620029bb565b6200147f565b3480156200047057600080fd5b50608754620004829063ffffffff1681565b60405163ffffffff90911681526020016200019e565b348015620004a557600080fd5b50608b54620001e4906001600160a01b031681565b62000174620004cb36600462002a6e565b62001596565b348015620004de57600080fd5b5062000174620016d0565b348015620004f657600080fd5b5062000482600081565b3480156200050d57600080fd5b50620002156200051f366004620029a1565b60886020526000908152604090205481565b3480156200053e57600080fd5b506200017462000550366004620025f1565b62001707565b3480156200056357600080fd5b506200042b600181565b60225460ff16156200059c5760405162461bcd60e51b8152600401620005939062002ad5565b60405180910390fd5b60875463ffffffff90811690861603620005ca5760405162461bcd60e51b8152600401620005939062002b3d565b60008060606001600160a01b0389166200065157853414620006475760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201526e4d415443485f4d53475f56414c554560881b606482015260840162000593565b60009150620008c3565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff81168352600160201b900490921691810182905290156200072057604051632770a7eb60e21b81526001600160a01b038b1690639dc29fac90620006c79033908b9060040162002b87565b6020604051808303816000875af1158015620006e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200070d919062002baf565b50602081015181519094509250620008c1565b84156200073557620007358a88888862001786565b6200074c6001600160a01b038b1633308a62001b8a565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007a3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007cd919081019062002c4a565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200080c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000836919081019062002c4a565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000875573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200089b919062002c82565b604051602001620008af9392919062002cd0565b60405160208183030381529060405291505b505b60008051602062004888833981519152600083858b8b8b87602154604051620008f498979695949392919062002d0d565b60405180910390a16200091f62000919600084868c8c8c888051906020012062000c09565b62001bf7565b608b546001600160a01b03166333d6247d6200093a62000a24565b6040518263ffffffff1660e01b81526004016200095991815260200190565b600060405180830381600087803b1580156200097457600080fd5b505af115801562000989573d6000803e3d6000fd5b50505050505050505050505050565b608c546001600160a01b03163314620009c55760405162461bcd60e51b8152600401620005939062002d7a565b620009cf62001d48565b565b6000608960008484604051602001620009ec92919062002deb565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b0f578260011660010362000a8f576001816020811062000a5b5762000a5b62002e15565b01548460405160200162000a7192919062002e2b565b60405160208183030381529060405280519060200120935062000abd565b838260405160200162000aa492919062002e2b565b6040516020818303038152906040528051906020012093505b62000aca60028462002e65565b9250818260405160200162000ae192919062002e2b565b604051602081830303815290604052805190602001209150808062000b069062002e7c565b91505062000a2f565b50919392505050565b6000846001600160401b038416825b602081101562000bfa578160011660010362000b8c5786818151811062000b525762000b5262002e15565b60200260200101518360405160200162000b6e92919062002e2b565b60405160208183030381529060405280519060200120925062000bd6565b8287828151811062000ba25762000ba262002e15565b602002602001015160405160200162000bbd92919062002e2b565b6040516020818303038152906040528051906020012092505b62000be360028362002e65565b91508062000bf18162002e7c565b91505062000b27565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000cbc5760405162461bcd60e51b8152600401620005939062002ad5565b62000cd28a8a8a8a8a8a8a8a8a8a600162001da6565b62000ce38963ffffffff1662002033565b6000836001600160a01b03168387898560405160240162000d079392919062002e98565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d3e919062002ed3565b60006040518083038185875af1925050503d806000811462000d7d576040519150601f19603f3d011682016040523d82523d6000602084013e62000d82565b606091505b505090508062000de15760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f46416044820152631253115160e21b606482015260840162000593565b600080516020620048a88339815191528a8888878760405162000e0995949392919062002ef1565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000e3f5750600054600160ff909116105b8062000e64575062000e513062002075565b15801562000e64575060005460ff166001145b62000ec95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000593565b6000805460ff19166001179055801562000eed576000805461ff0019166101001790555b6087805463ffffffff861663ffffffff19909116179055608b80546001600160a01b038086166001600160a01b031992831617909255608c80549285169290911691909117905562000f3e62002084565b801562000f85576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000f95620020fc565b620009cf60006200215f565b60225460ff161562000fc75760405162461bcd60e51b8152600401620005939062002ad5565b62000fdd8a8a8a8a8a8a8a8a8a8a600062001da6565b62000fee8963ffffffff1662002033565b6001600160a01b038516620010d757604080516000808252602082019092526001600160a01b03851690849060405162001029919062002ed3565b60006040518083038185875af1925050503d806000811462001068576040519150601f19603f3d011682016040523d82523d6000602084013e6200106d565b606091505b5050905080620010d05760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201526617d1905253115160ca1b606482015260840162000593565b50620013ef565b60875463ffffffff908116908716036200110757620011016001600160a01b0386168484620021b1565b620013ef565b600086866040516020016200111e92919062002deb565b60408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620013745760008060008580602001905181019062001170919062002f28565b9250925092506000858484846040516200118a9062002493565b620011989392919062002cd0565b8190604051809103906000f5905080158015620011b9573d6000803e3d6000fd5b506040516340c10f1960e01b81529091506001600160a01b038216906340c10f1990620011ed908c908c9060040162002b87565b6020604051808303816000875af11580156200120d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001233919062002baf565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013629392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620013ec565b6040516340c10f1960e01b81526001600160a01b038216906340c10f1990620013a4908890889060040162002b87565b6020604051808303816000875af1158015620013c4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013ea919062002baf565b505b50505b600080516020620048a883398151915289878786866040516200141795949392919062002ef1565b60405180910390a150505050505050505050565b6055546001600160a01b031690565b6000806200144b6101008462002e65565b905060006200145d6101008562002f9d565b60009283526088602052604090922054600190921b9182169091149392505050565b60008088886040516020016200149792919062002deb565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014ca9062002493565b601f1982820381018352601f909101166040819052620014f7908d908d908d908d908d9060200162002fdd565b60408051601f19818403018152908290526200151792916020016200301e565b604051602081830303815290604052805190602001206040516020016200157094939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015bc5760405162461bcd60e51b8152600401620005939062002ad5565b60875463ffffffff90811690841603620015ea5760405162461bcd60e51b8152600401620005939062002b3d565b6087546021546040516000805160206200488883398151915292620016269260019263ffffffff9092169133918991899134918a919062002d0d565b60405180910390a16200165d620009196001608760009054906101000a900463ffffffff1633878734888051906020012062000c09565b608b546001600160a01b03166333d6247d6200167862000a24565b6040518263ffffffff1660e01b81526004016200169791815260200190565b600060405180830381600087803b158015620016b257600080fd5b505af1158015620016c7573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b03163314620016fd5760405162461bcd60e51b8152600401620005939062002d7a565b620009cf620021d3565b62001711620020fc565b6001600160a01b038116620017785760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000593565b62001783816200215f565b50565b6000620017c983838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200228092505050565b9050632afa533160e01b6001600160e01b0319821601620019b2576000808080808080620017fb896004818d62003051565b8101906200180a91906200307d565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200184c5760405162461bcd60e51b81526004016200059390620030d8565b6001600160a01b0386163014620018775760405162461bcd60e51b8152600401620005939062003128565b8a8514620018de5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201526c09e8aa6be9c9ea8be9a82a8869609b1b606482015260840162000593565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200195e919062002ed3565b6000604051808303816000865af19150503d80600081146200199d576040519150601f19603f3d011682016040523d82523d6000602084013e620019a2565b606091505b5050505050505050505062001b83565b6001600160e01b031981166323f2ebc360e21b1462001a145760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000593565b60008080808080808062001a2c8a6004818e62003051565b81019062001a3b91906200316d565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001a7f5760405162461bcd60e51b81526004016200059390620030d8565b6001600160a01b038716301462001aaa5760405162461bcd60e51b8152600401620005939062003128565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001b33919062002ed3565b6000604051808303816000865af19150503d806000811462001b72576040519150601f19603f3d011682016040523d82523d6000602084013e62001b77565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000f859085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262002287565b80600162001c0860206002620032f6565b62001c14919062003304565b6021541062001c795760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000593565b60016021600082825462001c8e91906200331e565b909155505060215460005b602081101562001d38578160011660010362001cce57826001826020811062001cc65762001cc662002e15565b015550505050565b6001816020811062001ce45762001ce462002e15565b01548360405160200162001cfa92919062002e2b565b60405160208183030381529060405280519060200120925060028262001d21919062002e65565b91508062001d2f8162002e7c565b91505062001c99565b5062001d4362003339565b505050565b60225460ff161562001d6e5760405162461bcd60e51b8152600401620005939062002ad5565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001db78a63ffffffff166200143a565b1562001e125760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c416044820152631253515160e21b606482015260840162000593565b608b546040516000916001600160a01b03169063257b36329062001e3d908d908d9060200162002e2b565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040162001e7291815260200190565b6020604051808303816000875af115801562001e92573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001eb891906200334f565b90508060000362001f225760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201526c17d493d3d517d2539590531251609a1b606482015260840162000593565b60875463ffffffff87811691161462001f9e5760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e6044820152760be9c8aa8ae9ea496be889e8aa6be9c9ea8be9a82a8869604b1b606482015260840162000593565b60875460009063ffffffff1662001fb757508862001fba565b50895b62001fe562001fd6848b8b8b8b8b8b8051906020012062000c09565b8e8e63ffffffff168462000b18565b620009895760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c4944604482015260640162000593565b6000620020436101008362002e65565b90506000620020556101008462002f9d565b6000928352608860205260409092208054600190931b9092179091555050565b6001600160a01b03163b151590565b600054610100900460ff16620020f15760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000593565b620009cf336200215f565b33620021076200142b565b6001600160a01b031614620009cf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000593565b605580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62001d438363a9059cbb60e01b848460405160240162001bbf92919062002b87565b60225460ff166200224b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527a74653a206f6e6c7920696620656d657267656e637920737461746560281b606482015260840162000593565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b6000620022de826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620023609092919063ffffffff16565b80519091501562001d435780806020019051810190620022ff919062002baf565b62001d435760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000593565b606062000c01848460008585600080866001600160a01b031685876040516200238a919062002ed3565b60006040518083038185875af1925050503d8060008114620023c9576040519150601f19603f3d011682016040523d82523d6000602084013e620023ce565b606091505b5091509150620023e187838387620023ec565b979650505050505050565b606083156200246057825160000362002458576200240a8562002075565b620024585760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000593565b508162000c01565b62000c018383815115620024775781518083602001fd5b8060405162461bcd60e51b815260040162000593919062003369565b611509806200337f83390190565b6001600160a01b03811681146200178357600080fd5b8035620024c481620024a1565b919050565b803563ffffffff81168114620024c457600080fd5b60008083601f840112620024f157600080fd5b5081356001600160401b038111156200250957600080fd5b6020830191508360208285010111156200252257600080fd5b9250929050565b60008060008060008060a087890312156200254357600080fd5b86356200255081620024a1565b95506200256060208801620024c9565b945060408701356200257281620024a1565b93506060870135925060808701356001600160401b038111156200259557600080fd5b620025a389828a01620024de565b979a9699509497509295939492505050565b60008060408385031215620025c957600080fd5b620025d483620024c9565b91506020830135620025e681620024a1565b809150509250929050565b6000602082840312156200260457600080fd5b81356200261181620024a1565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171562002659576200265962002618565b604052919050565b600082601f8301126200267357600080fd5b813560206001600160401b0382111562002691576200269162002618565b8160051b620026a28282016200262e565b9283528481018201928281019087851115620026bd57600080fd5b83870192505b84831015620023e157823582529183019190830190620026c3565b60008060008060808587031215620026f557600080fd5b8435935060208501356001600160401b03808211156200271457600080fd5b620027228883890162002661565b94506040870135915080821682146200273a57600080fd5b509396929550929360600135925050565b60ff811681146200178357600080fd5b600080600080600080600060e0888a0312156200277757600080fd5b873562002784816200274b565b96506200279460208901620024c9565b95506040880135620027a681620024a1565b9450620027b660608901620024c9565b93506080880135620027c881620024a1565b9699959850939692959460a0840135945060c09093013592915050565b60006001600160401b0382111562002801576200280162002618565b50601f01601f191660200190565b600082601f8301126200282157600080fd5b8135620028386200283282620027e5565b6200262e565b8181528460208386010111156200284e57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200288c57600080fd5b8a356001600160401b0380821115620028a457600080fd5b620028b28e838f0162002661565b9b50620028c260208e01620024c9565b9a5060408d0135995060608d01359850620028e060808e01620024c9565b9750620028f060a08e01620024b7565b96506200290060c08e01620024c9565b95506200291060e08e01620024b7565b94506101008d013593506101208d01359150808211156200293057600080fd5b506200293f8d828e016200280f565b9150509295989b9194979a5092959850565b6000806000606084860312156200296757600080fd5b6200297284620024c9565b925060208401356200298481620024a1565b915060408401356200299681620024a1565b809150509250925092565b600060208284031215620029b457600080fd5b5035919050565b600080600080600080600060a0888a031215620029d757600080fd5b620029e288620024c9565b96506020880135620029f481620024a1565b955060408801356001600160401b038082111562002a1157600080fd5b62002a1f8b838c01620024de565b909750955060608a013591508082111562002a3957600080fd5b5062002a488a828b01620024de565b909450925050608088013562002a5e816200274b565b8091505092959891949750929550565b60008060006060848603121562002a8457600080fd5b62002a8f84620024c9565b9250602084013562002aa181620024a1565b915060408401356001600160401b0381111562002abd57600080fd5b62002acb868287016200280f565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b6020808252602a908201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e546040820152692fa122afa4aa29a2a62360b11b606082015260800190565b6001600160a01b03929092168252602082015260400190565b80151581146200178357600080fd5b60006020828403121562002bc257600080fd5b8151620026118162002ba0565b60005b8381101562002bec57818101518382015260200162002bd2565b8381111562000f855750506000910152565b600082601f83011262002c1057600080fd5b815162002c216200283282620027e5565b81815284602083860101111562002c3757600080fd5b62000c0182602083016020870162002bcf565b60006020828403121562002c5d57600080fd5b81516001600160401b0381111562002c7457600080fd5b62000c018482850162002bfe565b60006020828403121562002c9557600080fd5b815162002611816200274b565b6000815180845262002cbc81602086016020860162002bcf565b601f01601f19169290920160200192915050565b60608152600062002ce5606083018662002ca2565b828103602084015262002cf9818662002ca2565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002d618483018762002ca2565b925080851660e085015250509998505050505050505050565b6020808252604b908201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660408201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60608201526a18de4818dbdb9d1c9858dd60aa1b608082015260a00190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b918252602082015260400190565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002e775762002e7762002e39565b500490565b60006001820162002e915762002e9162002e4f565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002eca9083018462002ca2565b95945050505050565b6000825162002ee781846020870162002bcf565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002f3e57600080fd5b83516001600160401b038082111562002f5657600080fd5b62002f648783880162002bfe565b9450602086015191508082111562002f7b57600080fd5b5062002f8a8682870162002bfe565b925050604084015162002996816200274b565b60008262002faf5762002faf62002e39565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002ff360608301878962002fb4565b82810360208401526200300881868862002fb4565b91505060ff831660408301529695505050505050565b600083516200303281846020880162002bcf565b8351908301906200304881836020880162002bcf565b01949350505050565b600080858511156200306257600080fd5b838611156200307057600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200309957600080fd5b8735620030a681620024a1565b96506020880135620030b881620024a1565b955060408801359450606088013593506080880135620027c8816200274b565b60208082526030908201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560408201526f29aa2fa122afaa2422afa9a2a72222a960811b606082015260800190565b60208082526025908201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f42456040820152645f5448495360d81b606082015260800190565b600080600080600080600080610100898b0312156200318b57600080fd5b88356200319881620024a1565b97506020890135620031aa81620024a1565b965060408901359550606089013594506080890135620031ca8162002ba0565b935060a0890135620031dc816200274b565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200323a5781600019048211156200321e576200321e62002e4f565b808516156200322c57918102915b93841c9390800290620031fe565b509250929050565b600082620032535750600162000a1e565b81620032625750600062000a1e565b81600181146200327b57600281146200328657620032a6565b600191505062000a1e565b60ff8411156200329a576200329a62002e4f565b50506001821b62000a1e565b5060208310610133831016604e8410600b8410161715620032cb575081810a62000a1e565b620032d78383620031f9565b8060001904821115620032ee57620032ee62002e4f565b029392505050565b600062002611838362003242565b60008282101562003319576200331962002e4f565b500390565b6000821982111562003334576200333462002e4f565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200336257600080fd5b5051919050565b60208152600062002611602083018462002ca256fe60c06040523480156200001157600080fd5b5060405162001509380380620015098339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161104f620004ba60003960006104150152600081816102a301526103df015261104f6000f3fe608060405234801561001057600080fd5b50600436106101075760003560e01c806306fdde031461010c578063095ea7b31461012a57806318160ddd1461014d57806320606b701461015f57806323b872dd1461017457806330adf81f14610187578063313ce5671461019c5780633644e515146101bb57806339509351146101c357806340c10f19146101d657806370a08231146101e95780637ecebe001461021257806395d89b41146102325780639dc29fac1461023a578063a3c573eb1461024d578063a457c2d714610278578063a9059cbb1461028b578063cd0d00961461029e578063d505accf146102c5578063dd62ed3e146102da578063ffa1ad74146102ed575b600080fd5b61011461030d565b6040516101219190610d55565b60405180910390f35b61013d610138366004610dc6565b61039f565b6040519015158152602001610121565b6002545b604051908152602001610121565b610151600080516020610ffa83398151915281565b61013d610182366004610df0565b6103b7565b610151600080516020610fda83398151915281565b600554600160a01b900460ff1660405160ff9091168152602001610121565b6101516103db565b61013d6101d1366004610dc6565b610437565b61013d6101e4366004610dc6565b610459565b6101516101f7366004610e2c565b6001600160a01b031660009081526020819052604090205490565b610151610220366004610e2c565b60066020526000908152604090205481565b6101146104a2565b61013d610248366004610dc6565b6104b1565b600554610260906001600160a01b031681565b6040516001600160a01b039091168152602001610121565b61013d610286366004610dc6565b6104e8565b61013d610299366004610dc6565b610563565b6101517f000000000000000000000000000000000000000000000000000000000000000081565b6102d86102d3366004610e4e565b610571565b005b6101516102e8366004610ec1565b61079a565b610114604051806040016040528060018152602001603160f81b81525081565b60606003805461031c90610ef4565b80601f016020809104026020016040519081016040528092919081815260200182805461034890610ef4565b80156103955780601f1061036a57610100808354040283529160200191610395565b820191906000526020600020905b81548152906001019060200180831161037857829003601f168201915b5050505050905090565b6000336103ad8185856107c5565b5060019392505050565b6000336103c58582856108ea565b6103d0858585610964565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104125761040d46610af6565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6000336103ad81858561044a838361079a565b6104549190610f44565b6107c5565b6005546000906001600160a01b0316331461048f5760405162461bcd60e51b815260040161048690610f5c565b60405180910390fd5b6104998383610b90565b50600192915050565b60606004805461031c90610ef4565b6005546000906001600160a01b031633146104de5760405162461bcd60e51b815260040161048690610f5c565b6104998383610c3d565b600033816104f6828661079a565b9050838110156105565760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610486565b6103d082868684036107c5565b6000336103ad818585610964565b834211156105cd5760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b6064820152608401610486565b6001600160a01b03871660009081526006602052604081208054600080516020610fda833981519152918a918a918a91908661060883610fa0565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106666103db565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156106f1573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107275750896001600160a01b0316816001600160a01b0316145b6107835760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b6064820152608401610486565b61078e8a8a8a6107c5565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108275760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610486565b6001600160a01b0382166108885760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610486565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006108f6848461079a565b9050600019811461095e57818110156109515760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610486565b61095e84848484036107c5565b50505050565b6001600160a01b0383166109c85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610486565b6001600160a01b038216610a2a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610486565b6001600160a01b03831660009081526020819052604090205481811015610aa25760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610486565b6001600160a01b0384811660008181526020818152604080832087870390559387168083529184902080548701905592518581529092600080516020610fba833981519152910160405180910390a361095e565b6000600080516020610ffa833981519152610b0f61030d565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610be65760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610486565b8060026000828254610bf89190610f44565b90915550506001600160a01b03821660008181526020818152604080832080548601905551848152600080516020610fba833981519152910160405180910390a35050565b6001600160a01b038216610c9d5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610486565b6001600160a01b03821660009081526020819052604090205481811015610d115760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610486565b6001600160a01b038316600081815260208181526040808320868603905560028054879003905551858152919291600080516020610fba83398151915291016108dd565b600060208083528351808285015260005b81811015610d8257858101830151858201604001528201610d66565b81811115610d94576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610dc157600080fd5b919050565b60008060408385031215610dd957600080fd5b610de283610daa565b946020939093013593505050565b600080600060608486031215610e0557600080fd5b610e0e84610daa565b9250610e1c60208501610daa565b9150604084013590509250925092565b600060208284031215610e3e57600080fd5b610e4782610daa565b9392505050565b600080600080600080600060e0888a031215610e6957600080fd5b610e7288610daa565b9650610e8060208901610daa565b95506040880135945060608801359350608088013560ff81168114610ea457600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610ed457600080fd5b610edd83610daa565b9150610eeb60208401610daa565b90509250929050565b600181811c90821680610f0857607f821691505b602082108103610f2857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610f5757610f57610f2e565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b600060018201610fb257610fb2610f2e565b506001019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400fa26469706673582212206aa726514b02f96d0faa290d2747748128c753b26d79c2146367e9390138677f64736f6c634300080f0033501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe27545983a2646970667358221220c9685580e8edc653df46174a4a1c4bbb3b8dffb7544d8889d56e6577d348318c64736f6c634300080f0033", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", "0x0000000000000000000000000000000000000000000000000000000000000055": "0xc949254d682d8c9ad5682521675b8f43b102aec4", @@ -24,7 +24,7 @@ "balance": "0", "nonce": "1", "address": "0xae4bb80be56b819606589de61d5ec3b522eeb032", - "bytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610197565b60006020819052908152604090205481565b6100a061009b366004610197565b6100e7565b005b6002546100c29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610064565b60025473ffffffffffffffffffffffffffffffffffffffff163314610192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a7570646174654560448201527f786974526f6f743a204f4e4c595f425249444745000000000000000000000000606482015260840160405180910390fd5b600155565b6000602082840312156101a957600080fd5b503591905056fea2646970667358221220fea7fcab965a97796cf30d6ff699830b40cf06628fa4f9baf7c5725155af254564736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b36600461014d565b60006020819052908152604090205481565b6100a061009b36600461014d565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b031633146101485760405162461bcd60e51b815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a75706461746545604482015273786974526f6f743a204f4e4c595f42524944474560601b606482015260840160405180910390fd5b600155565b60006020828403121561015f57600080fd5b503591905056fea264697066735822122055a91ce0b0e2097f6ede1464275887801f3e3847a103f41a42a2125acaba0be264736f6c634300080f0033", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000002": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988" }, diff --git a/docker/scripts/genesis_docker.json b/docker/scripts/genesis_docker.json index a7aa78090..4d59db7a3 100644 --- a/docker/scripts/genesis_docker.json +++ b/docker/scripts/genesis_docker.json @@ -1,11 +1,11 @@ { - "root": "0xbf34f9a52a63229e90d1016011655bc12140bba5b771817b88cbf340d08dcbde", + "root": "0x382794d29a63231a4fc50a343ac78007b32034e4c77ab6d78d951af90ba4ab02", "genesis": [ { "balance": "100000000000000000000000", "nonce": "1", "address": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988", - "bytecode": "0x608060405260043610620001db5760003560e01c806381b1c17411620000ff578063d96a15f71162000095578063e7a5b4ea116200006c578063e7a5b4ea1462000658578063ed6be5c9146200067d578063f2fde38b1462000694578063ff634ed714620006b957600080fd5b8063d96a15f714620005f5578063dbc16976146200060c578063e7375881146200062457600080fd5b8063a08e8a0811620000d6578063a08e8a08146200054f578063aaa13cc21462000579578063bab161bf146200059e578063d02103ca14620005d357600080fd5b806381b1c17414620004d35780638da5cb5b146200050d5780638f611519146200052d57600080fd5b80633ae05047116200017557806346385549116200014c57806346385549146200044c578063655595401462000471578063715018a614620004965780637b6323c114620004ae57600080fd5b80633ae05047146200032e5780633da8168214620003465780633e197043146200036b57600080fd5b80632072f6c511620001b65780632072f6c5146200025157806322e95f2c14620002695780632dfdf0b514620002a7578063318aee3d14620002bf57600080fd5b80630871e97114620001e05780630e1da6c314620001f957806315064c961462000224575b600080fd5b620001f7620001f13660046200316c565b620006d0565b005b3480156200020657600080fd5b5062000211608d5481565b6040519081526020015b60405180910390f35b3480156200023157600080fd5b50602254620002409060ff1681565b60405190151581526020016200021b565b3480156200025e57600080fd5b50620001f762000c7a565b3480156200027657600080fd5b506200028e62000288366004620031f9565b62000d2e565b6040516001600160a01b0390911681526020016200021b565b348015620002b457600080fd5b506200021160215481565b348015620002cc57600080fd5b5062000309620002de36600462003235565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200021b565b3480156200033b57600080fd5b506200021162000db1565b3480156200035357600080fd5b5062000240620003653660046200333d565b62000ea4565b3480156200037857600080fd5b50620002116200038a366004620033bb565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200045957600080fd5b50620001f76200046b366004620034cc565b62000fa6565b3480156200047e57600080fd5b50620001f762000490366004620035b3565b6200122c565b348015620004a357600080fd5b50620001f762001412565b348015620004bb57600080fd5b50620001f7620004cd366004620034cc565b62001428565b348015620004e057600080fd5b506200028e620004f236600462003609565b6089602052600090815260409020546001600160a01b031681565b3480156200051a57600080fd5b506055546001600160a01b03166200028e565b3480156200053a57600080fd5b50608c546200028e906001600160a01b031681565b3480156200055c57600080fd5b5062000566600081565b60405160ff90911681526020016200021b565b3480156200058657600080fd5b506200028e6200059836600462003623565b620019ea565b348015620005ab57600080fd5b50608754620005bd9063ffffffff1681565b60405163ffffffff90911681526020016200021b565b348015620005e057600080fd5b50608b546200028e906001600160a01b031681565b620001f762000606366004620036d7565b62001b56565b3480156200061957600080fd5b50620001f762001e0a565b3480156200063157600080fd5b50620002406200064336600462003609565b60886020526000908152604090205460ff1681565b3480156200066557600080fd5b50620001f76200067736600462003609565b62001ebc565b3480156200068a57600080fd5b50620005bd600081565b348015620006a157600080fd5b50620001f7620006b336600462003235565b62001f01565b348015620006c657600080fd5b5062000566600181565b60225460ff1615620007755760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60875463ffffffff90811690861603620007f85760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b60008060606001600160a01b0389166200088d57853414620008835760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200076c565b6000915062000b17565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000974576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af11580156200093b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200096191906200374e565b5060208101518151909450925062000b15565b84156200098957620009898a88888862001f97565b620009a06001600160a01b038b1633308a620025bc565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620009f7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a219190810190620037e9565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000a60573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a8a9190810190620037e9565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ac9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aef919062003822565b60405160200162000b039392919062003870565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162000b59989796959493929190620038ad565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000c019062002675565b608b546001600160a01b03166333d6247d62000c1c62000db1565b6040518263ffffffff1660e01b815260040162000c3b91815260200190565b600060405180830381600087803b15801562000c5657600080fd5b505af115801562000c6b573d6000803e3d6000fd5b50505050505050505050505050565b608c546001600160a01b0316331462000d225760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c620027d9565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b602154600090819081805b602081101562000e9b578260011660010362000e1c576001816020811062000de85762000de862003919565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000e49565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000e5660028462003977565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000e9290620039b3565b91505062000dbc565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000f97578160011660010362000f215786818151811062000edf5762000edf62003919565b60200260200101518360405160200162000f03929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000f73565b8287828151811062000f375762000f3762003919565b602002602001015160405160200162000f5a929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000f8060028362003977565b91508062000f8e81620039b3565b91505062000eb4565b5050821490505b949350505050565b60225460ff1615620010475760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6200105d8a8a8a8a8a8a8a8a8a8a6001620028b2565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b038516908490620010a09089908b908790602401620039ee565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001105919062003a27565b60006040518083038185875af1925050503d806000811462001144576040519150601f19603f3d011682016040523d82523d6000602084013e62001149565b606091505b5050905080620011c15760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff16158080156200124d5750600054600160ff909116105b80620012695750303b15801562001269575060005460ff166001145b620012dd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200076c565b6000805460ff1916600117905580156200131e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d829055620013a762002c65565b80156200140b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6200141c62002cef565b62000d2c600062002d4b565b60225460ff1615620014c95760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b620014df8a8a8a8a8a8a8a8a8a8a6000620028b2565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620015fe57604080516000808252602082019092526001600160a01b0385169084906040516200153a919062003a27565b60006040518083038185875af1925050503d806000811462001579576040519150601f19603f3d011682016040523d82523d6000602084013e6200157e565b606091505b5050905080620015f75760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c45440000000000000000000000000000000000000000000000000060648201526084016200076c565b5062001980565b60875463ffffffff908116908716036200162e57620016286001600160a01b038616848462002db5565b62001980565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620018ec57600080600085806020019051810190620016ce919062003a45565b925092509250600085848484604051620016e890620030d5565b620016f69392919062003870565b8190604051809103906000f590508015801562001717573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001785573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017ab91906200374e565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620018da9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200197d565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001955573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200197b91906200374e565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162001a6d90620030d5565b601f1982820381018352601f90910116604081905262001a9a908d908d908d908d908d9060200162003af1565b60408051601f198184030181529082905262001aba929160200162003b32565b6040516020818303038152906040528051906020012060405160200162001b3094939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff161562001bf75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b60875463ffffffff9081169084160362001c7a5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b9262001cc79260019263ffffffff9092169133918991899134918a9190620038ad565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d850152346051850152607180850192909252805180850390920182526091909301909252815191012062001d979062002675565b608b546001600160a01b03166333d6247d62001db262000db1565b6040518263ffffffff1660e01b815260040162001dd191815260200190565b600060405180830381600087803b15801562001dec57600080fd5b505af115801562001e01573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001eb25760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c62002e00565b62001ec662002cef565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001f0b62002cef565b6001600160a01b03811662001f895760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016200076c565b62001f948162002d4b565b50565b600062001fda83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002eaf92505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620022dc5760008080808080806200203d896004818d62003b65565b8101906200204c919062003b91565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620020e35760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0386163014620021635760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b8a8514620021da5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002288919062003a27565b6000604051808303816000865af19150503d8060008114620022c7576040519150601f19603f3d011682016040523d82523d6000602084013e620022cc565b606091505b505050505050505050506200140b565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c00000000000000000000000000000000000000000000000000000000146200236f5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200076c565b600080808080808080620023878a6004818e62003b65565b81019062002396919062003bec565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200242f5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0387163014620024af5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002566919062003a27565b6000604051808303816000865af19150503d8060008114620025a5576040519150601f19603f3d011682016040523d82523d6000602084013e620025aa565b606091505b50505050505050505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526200266f9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002eb6565b50505050565b806001620026866020600262003db1565b62002692919062003dbf565b602154106200270a5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200076c565b6001602160008282546200271f919062003dd9565b909155505060215460005b6020811015620027c957816001166001036200275f57826001826020811062002757576200275762003919565b015550505050565b6001816020811062002775576200277562003919565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620027b2919062003977565b915080620027c081620039b3565b9150506200272a565b50620027d462003df4565b505050565b60225460ff16156200287a5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b63ffffffff8a1660009081526088602052604090205460ff16156200293f5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af1158015620029cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620029f2919062003e23565b9050801580159062002a115750608d5462002a0e824262003dbf565b10155b62002aab5760405162461bcd60e51b815260206004820152604260248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c49445f4f525f4e4f545f5945545f434c41494d414260648201527f4c45000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b60875463ffffffff87811691161462002b2d5760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000000060648201526084016200076c565b60875460009063ffffffff1662002b4657508862002b49565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d82015260518101899052607180820193909352815180820390930183526091019052805191012062002c17908e8e63ffffffff168462000ea4565b62000c6b5760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c494460448201526064016200076c565b600054610100900460ff1662002ce45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200076c565b62000d2c3362002d4b565b6055546001600160a01b0316331462000d2c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200076c565b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620027d49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016200260a565b60225460ff1662002e7a5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016200076c565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002f0d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662002fa29092919063ffffffff16565b805190915015620027d4578080602001905181019062002f2e91906200374e565b620027d45760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200076c565b606062000f9e848460008585600080866001600160a01b0316858760405162002fcc919062003a27565b60006040518083038185875af1925050503d80600081146200300b576040519150601f19603f3d011682016040523d82523d6000602084013e62003010565b606091505b509150915062003023878383876200302e565b979650505050505050565b60608315620030a25782516000036200309a576001600160a01b0385163b6200309a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200076c565b508162000f9e565b62000f9e8383815115620030b95781518083602001fd5b8060405162461bcd60e51b81526004016200076c919062003e3d565b6119c78062003e5383390190565b6001600160a01b038116811462001f9457600080fd5b80356200310681620030e3565b919050565b803563ffffffff811681146200310657600080fd5b60008083601f8401126200313357600080fd5b50813567ffffffffffffffff8111156200314c57600080fd5b6020830191508360208285010111156200316557600080fd5b9250929050565b60008060008060008060a087890312156200318657600080fd5b86356200319381620030e3565b9550620031a3602088016200310b565b94506040870135620031b581620030e3565b935060608701359250608087013567ffffffffffffffff811115620031d957600080fd5b620031e789828a0162003120565b979a9699509497509295939492505050565b600080604083850312156200320d57600080fd5b62003218836200310b565b915060208301356200322a81620030e3565b809150509250929050565b6000602082840312156200324857600080fd5b81356200325581620030e3565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620032b757620032b76200325c565b604052919050565b600082601f830112620032d157600080fd5b8135602067ffffffffffffffff821115620032f057620032f06200325c565b8160051b620033018282016200328b565b92835284810182019282810190878511156200331c57600080fd5b83870192505b84831015620030235782358252918301919083019062003322565b600080600080608085870312156200335457600080fd5b84359350602085013567ffffffffffffffff808211156200337457600080fd5b6200338288838901620032bf565b94506040870135915080821682146200339a57600080fd5b509396929550929360600135925050565b60ff8116811462001f9457600080fd5b600080600080600080600060e0888a031215620033d757600080fd5b8735620033e481620033ab565b9650620033f4602089016200310b565b955060408801356200340681620030e3565b945062003416606089016200310b565b935060808801356200342881620030e3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200346257620034626200325c565b50601f01601f191660200190565b600082601f8301126200348257600080fd5b813562003499620034938262003445565b6200328b565b818152846020838601011115620034af57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620034ed57600080fd5b8a3567ffffffffffffffff808211156200350657600080fd5b620035148e838f01620032bf565b9b506200352460208e016200310b565b9a5060408d0135995060608d013598506200354260808e016200310b565b97506200355260a08e01620030f9565b96506200356260c08e016200310b565b95506200357260e08e01620030f9565b94506101008d013593506101208d01359150808211156200359257600080fd5b50620035a18d828e0162003470565b9150509295989b9194979a5092959850565b60008060008060808587031215620035ca57600080fd5b620035d5856200310b565b93506020850135620035e781620030e3565b92506040850135620035f981620030e3565b9396929550929360600135925050565b6000602082840312156200361c57600080fd5b5035919050565b600080600080600080600060a0888a0312156200363f57600080fd5b6200364a886200310b565b965060208801356200365c81620030e3565b9550604088013567ffffffffffffffff808211156200367a57600080fd5b620036888b838c0162003120565b909750955060608a0135915080821115620036a257600080fd5b50620036b18a828b0162003120565b9094509250506080880135620036c781620033ab565b8091505092959891949750929550565b600080600060608486031215620036ed57600080fd5b620036f8846200310b565b925060208401356200370a81620030e3565b9150604084013567ffffffffffffffff8111156200372757600080fd5b620037358682870162003470565b9150509250925092565b801515811462001f9457600080fd5b6000602082840312156200376157600080fd5b815162003255816200373f565b60005b838110156200378b57818101518382015260200162003771565b838111156200266f5750506000910152565b600082601f830112620037af57600080fd5b8151620037c0620034938262003445565b818152846020838601011115620037d657600080fd5b62000f9e8260208301602087016200376e565b600060208284031215620037fc57600080fd5b815167ffffffffffffffff8111156200381457600080fd5b62000f9e848285016200379d565b6000602082840312156200383557600080fd5b81516200325581620033ab565b600081518084526200385c8160208601602086016200376e565b601f01601f19169290920160200192915050565b60608152600062003885606083018662003842565b828103602084015262003899818662003842565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c0850152620039008285018762003842565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082620039ae577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620039e757620039e762003948565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003a1e606083018462003842565b95945050505050565b6000825162003a3b8184602087016200376e565b9190910192915050565b60008060006060848603121562003a5b57600080fd5b835167ffffffffffffffff8082111562003a7457600080fd5b62003a82878388016200379d565b9450602086015191508082111562003a9957600080fd5b5062003aa8868287016200379d565b925050604084015162003abb81620033ab565b809150509250925092565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003b0760608301878962003ac6565b828103602084015262003b1c81868862003ac6565b91505060ff831660408301529695505050505050565b6000835162003b468184602088016200376e565b83519083019062003b5c8183602088016200376e565b01949350505050565b6000808585111562003b7657600080fd5b8386111562003b8457600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003bad57600080fd5b873562003bba81620030e3565b9650602088013562003bcc81620030e3565b9550604088013594506060880135935060808801356200342881620033ab565b600080600080600080600080610100898b03121562003c0a57600080fd5b883562003c1781620030e3565b9750602089013562003c2981620030e3565b96506040890135955060608901359450608089013562003c49816200373f565b935060a089013562003c5b81620033ab565b979a969950949793969295929450505060c08201359160e0013590565b600181815b8085111562003cd757817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003cbb5762003cbb62003948565b8085161562003cc957918102915b93841c939080029062003c7d565b509250929050565b60008262003cf05750600162000dab565b8162003cff5750600062000dab565b816001811462003d18576002811462003d235762003d43565b600191505062000dab565b60ff84111562003d375762003d3762003948565b50506001821b62000dab565b5060208310610133831016604e8410600b841016171562003d68575081810a62000dab565b62003d74838362003c78565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003da95762003da962003948565b029392505050565b600062003255838362003cdf565b60008282101562003dd45762003dd462003948565b500390565b6000821982111562003def5762003def62003948565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60006020828403121562003e3657600080fd5b5051919050565b6020815260006200325560208301846200384256fe60c06040523480156200001157600080fd5b50604051620019c7380380620019c78339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161150d620004ba600039600061053001526000818161036f01526104fa015261150d6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b604051610191919061123b565b60405180910390f35b6101ad6101a83660046112d7565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad610204366004611301565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad6102763660046112d7565b610552565b6101ad6102893660046112d7565b61059e565b6101c161029c36600461133d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d236600461133d565b60066020526000908152604090205481565b610184610645565b6101ad6102fa3660046112d7565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad6103523660046112d7565b6106ed565b6101ad6103653660046112d7565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f36600461135f565b6107b2565b005b6101c16103b43660046113d2565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60606003805461043790611405565b80601f016020809104026020016040519081016040528092919081815260200182805461046390611405565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f12565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611487565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c8383610fda565b50600192915050565b60606004805461043790611405565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c83836110b3565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866108818361149f565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f3d610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff821661103d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b806002600082825461104f9190611487565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff821661113c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156111d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610c27565b600060208083528351808285015260005b818110156112685785810183015185820160400152820161124c565b8181111561127a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112d257600080fd5b919050565b600080604083850312156112ea57600080fd5b6112f3836112ae565b946020939093013593505050565b60008060006060848603121561131657600080fd5b61131f846112ae565b925061132d602085016112ae565b9150604084013590509250925092565b60006020828403121561134f57600080fd5b611358826112ae565b9392505050565b600080600080600080600060e0888a03121561137a57600080fd5b611383886112ae565b9650611391602089016112ae565b95506040880135945060608801359350608088013560ff811681146113b557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156113e557600080fd5b6113ee836112ae565b91506113fc602084016112ae565b90509250929050565b600181811c9082168061141957607f821691505b602082108103611452577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561149a5761149a611458565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036114d0576114d0611458565b506001019056fea264697066735822122094134962e5fa2f6357086a2590b7f3a754d340b16e5312664d82a308bc23a0df64736f6c634300080f0033a26469706673582212207d802e4c153f08d52b883999d6ed4e590e1894e2db82359c2f8cde0298f066c464736f6c634300080f0033", + "bytecode": "0x608060405260043610620001585760003560e01c80630871e971146200015d57806315064c9614620001765780632072f6c514620001a757806322e95f2c14620001bf5780632dfdf0b514620001fd578063318aee3d14620002245780633ae0504714620002925780633da8168214620002aa5780633e19704314620002cf5780634638554914620002f4578063647c576c1462000319578063715018a6146200033e5780637b6323c1146200035657806381b1c174146200037b5780638da5cb5b14620003b55780638f61151914620003cd5780639e34070f14620003ef578063a08e8a081462000414578063aaa13cc2146200043e578063bab161bf1462000463578063d02103ca1462000498578063d96a15f714620004ba578063dbc1697614620004d1578063ed6be5c914620004e9578063ee25560b1462000500578063f2fde38b1462000531578063ff634ed71462000556575b600080fd5b620001746200016e36600462002529565b6200056d565b005b3480156200018357600080fd5b50602254620001929060ff1681565b60405190151581526020015b60405180910390f35b348015620001b457600080fd5b506200017462000998565b348015620001cc57600080fd5b50620001e4620001de366004620025b5565b620009d1565b6040516001600160a01b0390911681526020016200019e565b3480156200020a57600080fd5b506200021560215481565b6040519081526020016200019e565b3480156200023157600080fd5b506200026d62000243366004620025f1565b608a6020526000908152604090205463ffffffff811690600160201b90046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200019e565b3480156200029f57600080fd5b506200021562000a24565b348015620002b757600080fd5b5062000192620002c9366004620026de565b62000b18565b348015620002dc57600080fd5b5062000215620002ee3660046200275b565b62000c09565b3480156200030157600080fd5b5062000174620003133660046200286b565b62000c96565b3480156200032657600080fd5b50620001746200033836600462002951565b62000e1e565b3480156200034b57600080fd5b506200017462000f8b565b3480156200036357600080fd5b5062000174620003753660046200286b565b62000fa1565b3480156200038857600080fd5b50620001e46200039a366004620029a1565b6089602052600090815260409020546001600160a01b031681565b348015620003c257600080fd5b50620001e46200142b565b348015620003da57600080fd5b50608c54620001e4906001600160a01b031681565b348015620003fc57600080fd5b50620001926200040e366004620029a1565b6200143a565b3480156200042157600080fd5b506200042b600081565b60405160ff90911681526020016200019e565b3480156200044b57600080fd5b50620001e46200045d366004620029bb565b6200147f565b3480156200047057600080fd5b50608754620004829063ffffffff1681565b60405163ffffffff90911681526020016200019e565b348015620004a557600080fd5b50608b54620001e4906001600160a01b031681565b62000174620004cb36600462002a6e565b62001596565b348015620004de57600080fd5b5062000174620016d0565b348015620004f657600080fd5b5062000482600081565b3480156200050d57600080fd5b50620002156200051f366004620029a1565b60886020526000908152604090205481565b3480156200053e57600080fd5b506200017462000550366004620025f1565b62001707565b3480156200056357600080fd5b506200042b600181565b60225460ff16156200059c5760405162461bcd60e51b8152600401620005939062002ad5565b60405180910390fd5b60875463ffffffff90811690861603620005ca5760405162461bcd60e51b8152600401620005939062002b3d565b60008060606001600160a01b0389166200065157853414620006475760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201526e4d415443485f4d53475f56414c554560881b606482015260840162000593565b60009150620008c3565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff81168352600160201b900490921691810182905290156200072057604051632770a7eb60e21b81526001600160a01b038b1690639dc29fac90620006c79033908b9060040162002b87565b6020604051808303816000875af1158015620006e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200070d919062002baf565b50602081015181519094509250620008c1565b84156200073557620007358a88888862001786565b6200074c6001600160a01b038b1633308a62001b8a565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007a3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007cd919081019062002c4a565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200080c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000836919081019062002c4a565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000875573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200089b919062002c82565b604051602001620008af9392919062002cd0565b60405160208183030381529060405291505b505b60008051602062004888833981519152600083858b8b8b87602154604051620008f498979695949392919062002d0d565b60405180910390a16200091f62000919600084868c8c8c888051906020012062000c09565b62001bf7565b608b546001600160a01b03166333d6247d6200093a62000a24565b6040518263ffffffff1660e01b81526004016200095991815260200190565b600060405180830381600087803b1580156200097457600080fd5b505af115801562000989573d6000803e3d6000fd5b50505050505050505050505050565b608c546001600160a01b03163314620009c55760405162461bcd60e51b8152600401620005939062002d7a565b620009cf62001d48565b565b6000608960008484604051602001620009ec92919062002deb565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b0f578260011660010362000a8f576001816020811062000a5b5762000a5b62002e15565b01548460405160200162000a7192919062002e2b565b60405160208183030381529060405280519060200120935062000abd565b838260405160200162000aa492919062002e2b565b6040516020818303038152906040528051906020012093505b62000aca60028462002e65565b9250818260405160200162000ae192919062002e2b565b604051602081830303815290604052805190602001209150808062000b069062002e7c565b91505062000a2f565b50919392505050565b6000846001600160401b038416825b602081101562000bfa578160011660010362000b8c5786818151811062000b525762000b5262002e15565b60200260200101518360405160200162000b6e92919062002e2b565b60405160208183030381529060405280519060200120925062000bd6565b8287828151811062000ba25762000ba262002e15565b602002602001015160405160200162000bbd92919062002e2b565b6040516020818303038152906040528051906020012092505b62000be360028362002e65565b91508062000bf18162002e7c565b91505062000b27565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000cbc5760405162461bcd60e51b8152600401620005939062002ad5565b62000cd28a8a8a8a8a8a8a8a8a8a600162001da6565b62000ce38963ffffffff1662002033565b6000836001600160a01b03168387898560405160240162000d079392919062002e98565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d3e919062002ed3565b60006040518083038185875af1925050503d806000811462000d7d576040519150601f19603f3d011682016040523d82523d6000602084013e62000d82565b606091505b505090508062000de15760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f46416044820152631253115160e21b606482015260840162000593565b600080516020620048a88339815191528a8888878760405162000e0995949392919062002ef1565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000e3f5750600054600160ff909116105b8062000e64575062000e513062002075565b15801562000e64575060005460ff166001145b62000ec95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000593565b6000805460ff19166001179055801562000eed576000805461ff0019166101001790555b6087805463ffffffff861663ffffffff19909116179055608b80546001600160a01b038086166001600160a01b031992831617909255608c80549285169290911691909117905562000f3e62002084565b801562000f85576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000f95620020fc565b620009cf60006200215f565b60225460ff161562000fc75760405162461bcd60e51b8152600401620005939062002ad5565b62000fdd8a8a8a8a8a8a8a8a8a8a600062001da6565b62000fee8963ffffffff1662002033565b6001600160a01b038516620010d757604080516000808252602082019092526001600160a01b03851690849060405162001029919062002ed3565b60006040518083038185875af1925050503d806000811462001068576040519150601f19603f3d011682016040523d82523d6000602084013e6200106d565b606091505b5050905080620010d05760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201526617d1905253115160ca1b606482015260840162000593565b50620013ef565b60875463ffffffff908116908716036200110757620011016001600160a01b0386168484620021b1565b620013ef565b600086866040516020016200111e92919062002deb565b60408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620013745760008060008580602001905181019062001170919062002f28565b9250925092506000858484846040516200118a9062002493565b620011989392919062002cd0565b8190604051809103906000f5905080158015620011b9573d6000803e3d6000fd5b506040516340c10f1960e01b81529091506001600160a01b038216906340c10f1990620011ed908c908c9060040162002b87565b6020604051808303816000875af11580156200120d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001233919062002baf565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013629392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620013ec565b6040516340c10f1960e01b81526001600160a01b038216906340c10f1990620013a4908890889060040162002b87565b6020604051808303816000875af1158015620013c4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013ea919062002baf565b505b50505b600080516020620048a883398151915289878786866040516200141795949392919062002ef1565b60405180910390a150505050505050505050565b6055546001600160a01b031690565b6000806200144b6101008462002e65565b905060006200145d6101008562002f9d565b60009283526088602052604090922054600190921b9182169091149392505050565b60008088886040516020016200149792919062002deb565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014ca9062002493565b601f1982820381018352601f909101166040819052620014f7908d908d908d908d908d9060200162002fdd565b60408051601f19818403018152908290526200151792916020016200301e565b604051602081830303815290604052805190602001206040516020016200157094939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015bc5760405162461bcd60e51b8152600401620005939062002ad5565b60875463ffffffff90811690841603620015ea5760405162461bcd60e51b8152600401620005939062002b3d565b6087546021546040516000805160206200488883398151915292620016269260019263ffffffff9092169133918991899134918a919062002d0d565b60405180910390a16200165d620009196001608760009054906101000a900463ffffffff1633878734888051906020012062000c09565b608b546001600160a01b03166333d6247d6200167862000a24565b6040518263ffffffff1660e01b81526004016200169791815260200190565b600060405180830381600087803b158015620016b257600080fd5b505af1158015620016c7573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b03163314620016fd5760405162461bcd60e51b8152600401620005939062002d7a565b620009cf620021d3565b62001711620020fc565b6001600160a01b038116620017785760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000593565b62001783816200215f565b50565b6000620017c983838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200228092505050565b9050632afa533160e01b6001600160e01b0319821601620019b2576000808080808080620017fb896004818d62003051565b8101906200180a91906200307d565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200184c5760405162461bcd60e51b81526004016200059390620030d8565b6001600160a01b0386163014620018775760405162461bcd60e51b8152600401620005939062003128565b8a8514620018de5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201526c09e8aa6be9c9ea8be9a82a8869609b1b606482015260840162000593565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200195e919062002ed3565b6000604051808303816000865af19150503d80600081146200199d576040519150601f19603f3d011682016040523d82523d6000602084013e620019a2565b606091505b5050505050505050505062001b83565b6001600160e01b031981166323f2ebc360e21b1462001a145760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000593565b60008080808080808062001a2c8a6004818e62003051565b81019062001a3b91906200316d565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001a7f5760405162461bcd60e51b81526004016200059390620030d8565b6001600160a01b038716301462001aaa5760405162461bcd60e51b8152600401620005939062003128565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001b33919062002ed3565b6000604051808303816000865af19150503d806000811462001b72576040519150601f19603f3d011682016040523d82523d6000602084013e62001b77565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000f859085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262002287565b80600162001c0860206002620032f6565b62001c14919062003304565b6021541062001c795760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000593565b60016021600082825462001c8e91906200331e565b909155505060215460005b602081101562001d38578160011660010362001cce57826001826020811062001cc65762001cc662002e15565b015550505050565b6001816020811062001ce45762001ce462002e15565b01548360405160200162001cfa92919062002e2b565b60405160208183030381529060405280519060200120925060028262001d21919062002e65565b91508062001d2f8162002e7c565b91505062001c99565b5062001d4362003339565b505050565b60225460ff161562001d6e5760405162461bcd60e51b8152600401620005939062002ad5565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001db78a63ffffffff166200143a565b1562001e125760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c416044820152631253515160e21b606482015260840162000593565b608b546040516000916001600160a01b03169063257b36329062001e3d908d908d9060200162002e2b565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040162001e7291815260200190565b6020604051808303816000875af115801562001e92573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001eb891906200334f565b90508060000362001f225760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201526c17d493d3d517d2539590531251609a1b606482015260840162000593565b60875463ffffffff87811691161462001f9e5760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e6044820152760be9c8aa8ae9ea496be889e8aa6be9c9ea8be9a82a8869604b1b606482015260840162000593565b60875460009063ffffffff1662001fb757508862001fba565b50895b62001fe562001fd6848b8b8b8b8b8b8051906020012062000c09565b8e8e63ffffffff168462000b18565b620009895760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c4944604482015260640162000593565b6000620020436101008362002e65565b90506000620020556101008462002f9d565b6000928352608860205260409092208054600190931b9092179091555050565b6001600160a01b03163b151590565b600054610100900460ff16620020f15760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000593565b620009cf336200215f565b33620021076200142b565b6001600160a01b031614620009cf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000593565b605580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62001d438363a9059cbb60e01b848460405160240162001bbf92919062002b87565b60225460ff166200224b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527a74653a206f6e6c7920696620656d657267656e637920737461746560281b606482015260840162000593565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b6000620022de826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620023609092919063ffffffff16565b80519091501562001d435780806020019051810190620022ff919062002baf565b62001d435760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000593565b606062000c01848460008585600080866001600160a01b031685876040516200238a919062002ed3565b60006040518083038185875af1925050503d8060008114620023c9576040519150601f19603f3d011682016040523d82523d6000602084013e620023ce565b606091505b5091509150620023e187838387620023ec565b979650505050505050565b606083156200246057825160000362002458576200240a8562002075565b620024585760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000593565b508162000c01565b62000c018383815115620024775781518083602001fd5b8060405162461bcd60e51b815260040162000593919062003369565b611509806200337f83390190565b6001600160a01b03811681146200178357600080fd5b8035620024c481620024a1565b919050565b803563ffffffff81168114620024c457600080fd5b60008083601f840112620024f157600080fd5b5081356001600160401b038111156200250957600080fd5b6020830191508360208285010111156200252257600080fd5b9250929050565b60008060008060008060a087890312156200254357600080fd5b86356200255081620024a1565b95506200256060208801620024c9565b945060408701356200257281620024a1565b93506060870135925060808701356001600160401b038111156200259557600080fd5b620025a389828a01620024de565b979a9699509497509295939492505050565b60008060408385031215620025c957600080fd5b620025d483620024c9565b91506020830135620025e681620024a1565b809150509250929050565b6000602082840312156200260457600080fd5b81356200261181620024a1565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171562002659576200265962002618565b604052919050565b600082601f8301126200267357600080fd5b813560206001600160401b0382111562002691576200269162002618565b8160051b620026a28282016200262e565b9283528481018201928281019087851115620026bd57600080fd5b83870192505b84831015620023e157823582529183019190830190620026c3565b60008060008060808587031215620026f557600080fd5b8435935060208501356001600160401b03808211156200271457600080fd5b620027228883890162002661565b94506040870135915080821682146200273a57600080fd5b509396929550929360600135925050565b60ff811681146200178357600080fd5b600080600080600080600060e0888a0312156200277757600080fd5b873562002784816200274b565b96506200279460208901620024c9565b95506040880135620027a681620024a1565b9450620027b660608901620024c9565b93506080880135620027c881620024a1565b9699959850939692959460a0840135945060c09093013592915050565b60006001600160401b0382111562002801576200280162002618565b50601f01601f191660200190565b600082601f8301126200282157600080fd5b8135620028386200283282620027e5565b6200262e565b8181528460208386010111156200284e57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200288c57600080fd5b8a356001600160401b0380821115620028a457600080fd5b620028b28e838f0162002661565b9b50620028c260208e01620024c9565b9a5060408d0135995060608d01359850620028e060808e01620024c9565b9750620028f060a08e01620024b7565b96506200290060c08e01620024c9565b95506200291060e08e01620024b7565b94506101008d013593506101208d01359150808211156200293057600080fd5b506200293f8d828e016200280f565b9150509295989b9194979a5092959850565b6000806000606084860312156200296757600080fd5b6200297284620024c9565b925060208401356200298481620024a1565b915060408401356200299681620024a1565b809150509250925092565b600060208284031215620029b457600080fd5b5035919050565b600080600080600080600060a0888a031215620029d757600080fd5b620029e288620024c9565b96506020880135620029f481620024a1565b955060408801356001600160401b038082111562002a1157600080fd5b62002a1f8b838c01620024de565b909750955060608a013591508082111562002a3957600080fd5b5062002a488a828b01620024de565b909450925050608088013562002a5e816200274b565b8091505092959891949750929550565b60008060006060848603121562002a8457600080fd5b62002a8f84620024c9565b9250602084013562002aa181620024a1565b915060408401356001600160401b0381111562002abd57600080fd5b62002acb868287016200280f565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b6020808252602a908201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e546040820152692fa122afa4aa29a2a62360b11b606082015260800190565b6001600160a01b03929092168252602082015260400190565b80151581146200178357600080fd5b60006020828403121562002bc257600080fd5b8151620026118162002ba0565b60005b8381101562002bec57818101518382015260200162002bd2565b8381111562000f855750506000910152565b600082601f83011262002c1057600080fd5b815162002c216200283282620027e5565b81815284602083860101111562002c3757600080fd5b62000c0182602083016020870162002bcf565b60006020828403121562002c5d57600080fd5b81516001600160401b0381111562002c7457600080fd5b62000c018482850162002bfe565b60006020828403121562002c9557600080fd5b815162002611816200274b565b6000815180845262002cbc81602086016020860162002bcf565b601f01601f19169290920160200192915050565b60608152600062002ce5606083018662002ca2565b828103602084015262002cf9818662002ca2565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002d618483018762002ca2565b925080851660e085015250509998505050505050505050565b6020808252604b908201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660408201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60608201526a18de4818dbdb9d1c9858dd60aa1b608082015260a00190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b918252602082015260400190565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002e775762002e7762002e39565b500490565b60006001820162002e915762002e9162002e4f565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002eca9083018462002ca2565b95945050505050565b6000825162002ee781846020870162002bcf565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002f3e57600080fd5b83516001600160401b038082111562002f5657600080fd5b62002f648783880162002bfe565b9450602086015191508082111562002f7b57600080fd5b5062002f8a8682870162002bfe565b925050604084015162002996816200274b565b60008262002faf5762002faf62002e39565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002ff360608301878962002fb4565b82810360208401526200300881868862002fb4565b91505060ff831660408301529695505050505050565b600083516200303281846020880162002bcf565b8351908301906200304881836020880162002bcf565b01949350505050565b600080858511156200306257600080fd5b838611156200307057600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200309957600080fd5b8735620030a681620024a1565b96506020880135620030b881620024a1565b955060408801359450606088013593506080880135620027c8816200274b565b60208082526030908201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560408201526f29aa2fa122afaa2422afa9a2a72222a960811b606082015260800190565b60208082526025908201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f42456040820152645f5448495360d81b606082015260800190565b600080600080600080600080610100898b0312156200318b57600080fd5b88356200319881620024a1565b97506020890135620031aa81620024a1565b965060408901359550606089013594506080890135620031ca8162002ba0565b935060a0890135620031dc816200274b565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200323a5781600019048211156200321e576200321e62002e4f565b808516156200322c57918102915b93841c9390800290620031fe565b509250929050565b600082620032535750600162000a1e565b81620032625750600062000a1e565b81600181146200327b57600281146200328657620032a6565b600191505062000a1e565b60ff8411156200329a576200329a62002e4f565b50506001821b62000a1e565b5060208310610133831016604e8410600b8410161715620032cb575081810a62000a1e565b620032d78383620031f9565b8060001904821115620032ee57620032ee62002e4f565b029392505050565b600062002611838362003242565b60008282101562003319576200331962002e4f565b500390565b6000821982111562003334576200333462002e4f565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200336257600080fd5b5051919050565b60208152600062002611602083018462002ca256fe60c06040523480156200001157600080fd5b5060405162001509380380620015098339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161104f620004ba60003960006104150152600081816102a301526103df015261104f6000f3fe608060405234801561001057600080fd5b50600436106101075760003560e01c806306fdde031461010c578063095ea7b31461012a57806318160ddd1461014d57806320606b701461015f57806323b872dd1461017457806330adf81f14610187578063313ce5671461019c5780633644e515146101bb57806339509351146101c357806340c10f19146101d657806370a08231146101e95780637ecebe001461021257806395d89b41146102325780639dc29fac1461023a578063a3c573eb1461024d578063a457c2d714610278578063a9059cbb1461028b578063cd0d00961461029e578063d505accf146102c5578063dd62ed3e146102da578063ffa1ad74146102ed575b600080fd5b61011461030d565b6040516101219190610d55565b60405180910390f35b61013d610138366004610dc6565b61039f565b6040519015158152602001610121565b6002545b604051908152602001610121565b610151600080516020610ffa83398151915281565b61013d610182366004610df0565b6103b7565b610151600080516020610fda83398151915281565b600554600160a01b900460ff1660405160ff9091168152602001610121565b6101516103db565b61013d6101d1366004610dc6565b610437565b61013d6101e4366004610dc6565b610459565b6101516101f7366004610e2c565b6001600160a01b031660009081526020819052604090205490565b610151610220366004610e2c565b60066020526000908152604090205481565b6101146104a2565b61013d610248366004610dc6565b6104b1565b600554610260906001600160a01b031681565b6040516001600160a01b039091168152602001610121565b61013d610286366004610dc6565b6104e8565b61013d610299366004610dc6565b610563565b6101517f000000000000000000000000000000000000000000000000000000000000000081565b6102d86102d3366004610e4e565b610571565b005b6101516102e8366004610ec1565b61079a565b610114604051806040016040528060018152602001603160f81b81525081565b60606003805461031c90610ef4565b80601f016020809104026020016040519081016040528092919081815260200182805461034890610ef4565b80156103955780601f1061036a57610100808354040283529160200191610395565b820191906000526020600020905b81548152906001019060200180831161037857829003601f168201915b5050505050905090565b6000336103ad8185856107c5565b5060019392505050565b6000336103c58582856108ea565b6103d0858585610964565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104125761040d46610af6565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6000336103ad81858561044a838361079a565b6104549190610f44565b6107c5565b6005546000906001600160a01b0316331461048f5760405162461bcd60e51b815260040161048690610f5c565b60405180910390fd5b6104998383610b90565b50600192915050565b60606004805461031c90610ef4565b6005546000906001600160a01b031633146104de5760405162461bcd60e51b815260040161048690610f5c565b6104998383610c3d565b600033816104f6828661079a565b9050838110156105565760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610486565b6103d082868684036107c5565b6000336103ad818585610964565b834211156105cd5760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b6064820152608401610486565b6001600160a01b03871660009081526006602052604081208054600080516020610fda833981519152918a918a918a91908661060883610fa0565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106666103db565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156106f1573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107275750896001600160a01b0316816001600160a01b0316145b6107835760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b6064820152608401610486565b61078e8a8a8a6107c5565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108275760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610486565b6001600160a01b0382166108885760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610486565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006108f6848461079a565b9050600019811461095e57818110156109515760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610486565b61095e84848484036107c5565b50505050565b6001600160a01b0383166109c85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610486565b6001600160a01b038216610a2a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610486565b6001600160a01b03831660009081526020819052604090205481811015610aa25760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610486565b6001600160a01b0384811660008181526020818152604080832087870390559387168083529184902080548701905592518581529092600080516020610fba833981519152910160405180910390a361095e565b6000600080516020610ffa833981519152610b0f61030d565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610be65760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610486565b8060026000828254610bf89190610f44565b90915550506001600160a01b03821660008181526020818152604080832080548601905551848152600080516020610fba833981519152910160405180910390a35050565b6001600160a01b038216610c9d5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610486565b6001600160a01b03821660009081526020819052604090205481811015610d115760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610486565b6001600160a01b038316600081815260208181526040808320868603905560028054879003905551858152919291600080516020610fba83398151915291016108dd565b600060208083528351808285015260005b81811015610d8257858101830151858201604001528201610d66565b81811115610d94576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610dc157600080fd5b919050565b60008060408385031215610dd957600080fd5b610de283610daa565b946020939093013593505050565b600080600060608486031215610e0557600080fd5b610e0e84610daa565b9250610e1c60208501610daa565b9150604084013590509250925092565b600060208284031215610e3e57600080fd5b610e4782610daa565b9392505050565b600080600080600080600060e0888a031215610e6957600080fd5b610e7288610daa565b9650610e8060208901610daa565b95506040880135945060608801359350608088013560ff81168114610ea457600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610ed457600080fd5b610edd83610daa565b9150610eeb60208401610daa565b90509250929050565b600181811c90821680610f0857607f821691505b602082108103610f2857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610f5757610f57610f2e565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b600060018201610fb257610fb2610f2e565b506001019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400fa26469706673582212206aa726514b02f96d0faa290d2747748128c753b26d79c2146367e9390138677f64736f6c634300080f0033501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe27545983a2646970667358221220c9685580e8edc653df46174a4a1c4bbb3b8dffb7544d8889d56e6577d348318c64736f6c634300080f0033", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", "0x0000000000000000000000000000000000000000000000000000000000000055": "0xc949254d682d8c9ad5682521675b8f43b102aec4", @@ -30,7 +30,7 @@ "balance": "0", "nonce": "1", "address": "0xae4bb80be56b819606589de61d5ec3b522eeb032", - "bytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610197565b60006020819052908152604090205481565b6100a061009b366004610197565b6100e7565b005b6002546100c29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610064565b60025473ffffffffffffffffffffffffffffffffffffffff163314610192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a7570646174654560448201527f786974526f6f743a204f4e4c595f425249444745000000000000000000000000606482015260840160405180910390fd5b600155565b6000602082840312156101a957600080fd5b503591905056fea2646970667358221220fea7fcab965a97796cf30d6ff699830b40cf06628fa4f9baf7c5725155af254564736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b36600461014d565b60006020819052908152604090205481565b6100a061009b36600461014d565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b031633146101485760405162461bcd60e51b815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a75706461746545604482015273786974526f6f743a204f4e4c595f42524944474560601b606482015260840160405180910390fd5b600155565b60006020828403121561015f57600080fd5b503591905056fea264697066735822122055a91ce0b0e2097f6ede1464275887801f3e3847a103f41a42a2125acaba0be264736f6c634300080f0033", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000002": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988" }, diff --git a/docker/scripts/genesis_gen_docker.json b/docker/scripts/genesis_gen_docker.json index 7f0a64301..d7e9ab82f 100644 --- a/docker/scripts/genesis_gen_docker.json +++ b/docker/scripts/genesis_gen_docker.json @@ -62,8 +62,7 @@ "paramsFunction": [ 1, "0xAE4bB80bE56B819606589DE61d5ec3b522EEB032", - "0x0000000000000000000000000000000000000000", - 0 + "0x0000000000000000000000000000000000000000" ], "contractName": "Bridge" } From ea18f5b986e61e01d8684f31fbfbba08797f2953 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Mon, 19 Dec 2022 11:31:59 +0100 Subject: [PATCH 43/71] update verifier --- compiled-contracts/VerifierRollupHelperMock.json | 4 ++-- contracts/ProofOfEfficiency.sol | 2 ++ contracts/verifiers/Verifier.sol | 4 ++-- hardhat.config.js | 2 +- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/compiled-contracts/VerifierRollupHelperMock.json b/compiled-contracts/VerifierRollupHelperMock.json index cd6a4b8dc..6f8bd7a11 100644 --- a/compiled-contracts/VerifierRollupHelperMock.json +++ b/compiled-contracts/VerifierRollupHelperMock.json @@ -38,8 +38,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50610101806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c806343753b4d14602d575b600080fd5b60426038366004606c565b6001949350505050565b604051901515815260200160405180910390f35b8060408101831015606657600080fd5b92915050565b600080600080610120808688031215608357600080fd5b608b87876056565b945060c0860187811115609d57600080fd5b60408701945060ab88826056565b93505086818701111560bc57600080fd5b5092959194509261010001915056fea26469706673582212209697ebb83a295d4fb4cbbd0ca5638d3f360fa6d5619e41b2dabdeba2434fd79f64736f6c634300080f0033", - "deployedBytecode": "0x6080604052348015600f57600080fd5b506004361060285760003560e01c806343753b4d14602d575b600080fd5b60426038366004606c565b6001949350505050565b604051901515815260200160405180910390f35b8060408101831015606657600080fd5b92915050565b600080600080610120808688031215608357600080fd5b608b87876056565b945060c0860187811115609d57600080fd5b60408701945060ab88826056565b93505086818701111560bc57600080fd5b5092959194509261010001915056fea26469706673582212209697ebb83a295d4fb4cbbd0ca5638d3f360fa6d5619e41b2dabdeba2434fd79f64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50610101806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c806343753b4d14602d575b600080fd5b60426038366004606c565b6001949350505050565b604051901515815260200160405180910390f35b8060408101831015606657600080fd5b92915050565b600080600080610120808688031215608357600080fd5b608b87876056565b945060c0860187811115609d57600080fd5b60408701945060ab88826056565b93505086818701111560bc57600080fd5b5092959194509261010001915056fea26469706673582212204b9e206f0a377fe1821fc8d7c30122338f87b81c8476b3670cb033d94a5cf6f264736f6c634300080f0033", + "deployedBytecode": "0x6080604052348015600f57600080fd5b506004361060285760003560e01c806343753b4d14602d575b600080fd5b60426038366004606c565b6001949350505050565b604051901515815260200160405180910390f35b8060408101831015606657600080fd5b92915050565b600080600080610120808688031215608357600080fd5b608b87876056565b945060c0860187811115609d57600080fd5b60408701945060ab88826056565b93505086818701111560bc57600080fd5b5092959194509261010001915056fea26469706673582212204b9e206f0a377fe1821fc8d7c30122338f87b81c8476b3670cb033d94a5cf6f264736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/ProofOfEfficiency.sol b/contracts/ProofOfEfficiency.sol index 35d44a8d9..bcec0e6ce 100644 --- a/contracts/ProofOfEfficiency.sol +++ b/contracts/ProofOfEfficiency.sol @@ -855,6 +855,7 @@ contract ProofOfEfficiency is // MULTIPLIER_BATCH_FEE ** 32 --> (< 128 bits) // (< 128 bits) * (< 128 bits) = < 256 bits if (totalBatchesBelowTarget < totalBatchesAboveTarget) { + // There are more batches above target, fee is multiplied uint256 diffBatches = totalBatchesAboveTarget - totalBatchesBelowTarget; uint256 accMultiplier = batchFee; @@ -870,6 +871,7 @@ contract ProofOfEfficiency is (10 ** diffBatches); batchFee = accMultiplier; } else { + // There are more batches below target, fee is divided uint256 diffBatches = totalBatchesBelowTarget - totalBatchesAboveTarget; uint256 accMultiplier = batchFee; diff --git a/contracts/verifiers/Verifier.sol b/contracts/verifiers/Verifier.sol index 396c8f478..dadd4c5a0 100644 --- a/contracts/verifiers/Verifier.sol +++ b/contracts/verifiers/Verifier.sol @@ -271,8 +271,8 @@ contract Verifier { ); vk.IC[1] = Pairing.G1Point( - 15721953641420343855042948053786530455240345418506082035858148079525611756374, - 13640103621568301241206789510953343876721931144273359140619349897407767530847 + 18009193402259921258988443790318578656901789419709802725434675629157083886552, + 2585722565050444501523304543548466610963811796535562615223047622327740513752 ); } diff --git a/hardhat.config.js b/hardhat.config.js index ad17edac0..caf1c7e89 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -21,7 +21,7 @@ module.exports = { settings: { optimizer: { enabled: true, - runs: 1 // Should be updated in a real deployment + runs: 500 // Should be updated in a real deployment } } }, From 7f65b639e3b756c6b0be823481292a2bb2fbfe27 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Mon, 19 Dec 2022 15:51:29 +0100 Subject: [PATCH 44/71] update fees parameters! --- compiled-contracts/ProofOfEfficiency.json | 97 ++++++++-- compiled-contracts/ProofOfEfficiencyMock.json | 97 ++++++++-- .../VerifierRollupHelperMock.json | 4 +- contracts/ProofOfEfficiency.sol | 99 +++++++--- docs/ProofOfEfficiency.md | 44 +++++ hardhat.config.js | 2 +- test/contracts/proofOfEfficiency.test.js | 178 +++++++++++++++++- 7 files changed, 456 insertions(+), 65 deletions(-) diff --git a/compiled-contracts/ProofOfEfficiency.json b/compiled-contracts/ProofOfEfficiency.json index 38ff0d531..3f620548d 100644 --- a/compiled-contracts/ProofOfEfficiency.json +++ b/compiled-contracts/ProofOfEfficiency.json @@ -199,6 +199,19 @@ "name": "SetForceBatchAllowed", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint16", + "name": "newMultiplierBatchFee", + "type": "uint16" + } + ], + "name": "SetMultiplierBatchFee", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -264,6 +277,19 @@ "name": "SetTrustedSequencerURL", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "newVeryBatchTimeTarget", + "type": "uint64" + } + ], + "name": "SetVeryBatchTimeTarget", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -342,7 +368,7 @@ }, { "inputs": [], - "name": "MAX_TRANSACTIONS_BYTE_LENGTH", + "name": "MAX_BATCH_MULTIPLIER", "outputs": [ { "internalType": "uint256", @@ -355,20 +381,7 @@ }, { "inputs": [], - "name": "MAX_VERIFY_BATCHES", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MULTIPLIER_BATCH_FEE", + "name": "MAX_TRANSACTIONS_BYTE_LENGTH", "outputs": [ { "internalType": "uint256", @@ -381,7 +394,7 @@ }, { "inputs": [], - "name": "VERIFY_BATCH_TIME_TARGET", + "name": "MAX_VERIFY_BATCHES", "outputs": [ { "internalType": "uint64", @@ -858,6 +871,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "multiplierBatchFee", + "outputs": [ + { + "internalType": "uint16", + "name": "", + "type": "uint16" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "networkName", @@ -1177,6 +1203,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint16", + "name": "newMultiplierBatchFee", + "type": "uint16" + } + ], + "name": "setMultiplierBatchFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -1242,6 +1281,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "newVeryBatchTimeTarget", + "type": "uint64" + } + ], + "name": "setVeryBatchTimeTarget", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -1402,6 +1454,19 @@ "outputs": [], "stateMutability": "nonpayable", "type": "function" + }, + { + "inputs": [], + "name": "veryBatchTimeTarget", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" } ], "bytecode": "0x608060405234801561001057600080fd5b506149c4806100206000396000f3fe608060405234801561001057600080fd5b50600436106102c85760003560e01c80638da5cb5b1161017b578063cfa8ed47116100d8578063e7a7ed021161008c578063eaeb077b11610071578063eaeb077b14610688578063f2fde38b1461069b578063f7552761146106ae57600080fd5b8063e7a7ed0214610638578063e8bf92ed1461066857600080fd5b8063d8d1091b116100bd578063d8d1091b146105f0578063d8f54db014610603578063dbc169761461063057600080fd5b8063cfa8ed47146105a4578063d02103ca146105d057600080fd5b8063b02286c01161012f578063b6b0b09711610114578063b6b0b09714610559578063c3fd0f9c1461057e578063c89e42df1461059157600080fd5b8063b02286c01461052f578063b4d63f581461053957600080fd5b8063a3c573eb11610160578063a3c573eb146104f1578063ab9fc5ef14610511578063adc879e91461051b57600080fd5b80638da5cb5b146104cb57806399f5634e146104e957600080fd5b8063542028d5116102295780637152facf116101dd5780637fcb3653116101c25780637fcb36531461049157806381df7d3f146104a55780638c4a0af7146104b857600080fd5b80637152facf14610476578063798470571461048957600080fd5b80636b8616ce1161020e5780636b8616ce1461043b5780636ff512cc1461045b578063715018a61461046e57600080fd5b8063542028d51461042057806355b925e61461042857600080fd5b806327eb6c0f11610280578063423fa85611610265578063423fa856146103aa57806345605267146103ca5780635392c5e0146103f257600080fd5b806327eb6c0f146103525780633c1582671461039757600080fd5b806319d8ac61116102b157806319d8ac61146103085780631c1083e2146103355780632072f6c51461034a57600080fd5b8063107bf28c146102cd57806315064c96146102eb575b600080fd5b6102d56106bd565b6040516102e29190613ea5565b60405180910390f35b6065546102f89060ff1681565b60405190151581526020016102e2565b60685461031c9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102e2565b610348610343366004613eea565b61074b565b005b610348610857565b6070546103729073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e2565b6103486103a536600461405f565b610908565b60685461031c9068010000000000000000900467ffffffffffffffff1681565b60685461031c90700100000000000000000000000000000000900467ffffffffffffffff1681565b610412610400366004614176565b606b6020526000908152604090205481565b6040519081526020016102e2565b6102d5611299565b6103486104363660046141a8565b6112a6565b610412610449366004614176565b60666020526000908152604090205481565b610348610469366004613eea565b61186f565b610348611989565b6102d561048436600461422b565b61199b565b610412611bd1565b60695461031c9067ffffffffffffffff1681565b6103486104b3366004614286565b611c4b565b6103486104c6366004614380565b611fa4565b60335473ffffffffffffffffffffffffffffffffffffffff16610372565b6104126120be565b6071546103729073ffffffffffffffffffffffffffffffffffffffff1681565b61031c62093a8081565b606e5461031c9067ffffffffffffffff1681565b610412620493e081565b610412610547366004614176565b60676020526000908152604090205481565b60655461037290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b61034861058c3660046141a8565b6121ef565b61034861059f36600461439d565b612839565b6069546103729068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103729073ffffffffffffffffffffffffffffffffffffffff1681565b6103486105fe3660046143da565b61290e565b6069546102f8907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610348612fb3565b60685461031c907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103729073ffffffffffffffffffffffffffffffffffffffff1681565b6103486106963660046144cd565b613142565b6103486106a9366004613eea565b613643565b61041267016345785d8a000081565b606f80546106ca90614512565b80601f01602080910402602001604051908101604052809291908181526020018280546106f690614512565b80156107435780601f1061071857610100808354040283529160200191610743565b820191906000526020600020905b81548152906001019060200180831161072657829003601f168201915b505050505081565b60705473ffffffffffffffffffffffffffffffffffffffff1633146107dd5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff16156108f65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b6108fe6136e0565b610906613747565b565b60655460ff16156109a75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610a405760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d4565b805180610adb5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b8581101561108a576000878281518110610b4157610b41614565565b602002602001015190506000816060015167ffffffffffffffff161115610d5a5783610b6c816145c3565b945050600081600001518051906020012082602001518360600151604051602001610bcf93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610c9c5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610d545760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016107d4565b50610ef5565b60208101511580610e095750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610dc39160040190815260200190565b6020604051808303816000875af1158015610de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0691906145ea565b15155b610e7b5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016107d4565b805151620493e011610ef55760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016107d4565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610f2b575042816040015167ffffffffffffffff1611155b610fc35760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061106c906145c3565b9550508060400151955050808061108290614603565b915050610b25565b5060685467ffffffffffffffff78010000000000000000000000000000000000000000000000009091048116908316111561112d5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016107d4565b60685460009061115b90700100000000000000000000000000000000900467ffffffffffffffff168461463b565b61116f9067ffffffffffffffff1687614664565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061124c33306112268467016345785d8a000061467b565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169291906137d1565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d80546106ca90614512565b60655460ff16156113455760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b60695467ffffffffffffffff90811690881611156113f15760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016107d4565b60695467ffffffffffffffff9081169087161161149c5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016107d4565b67ffffffffffffffff87166000908152606b602052604090205461154e5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a4016107d4565b600061155c8888888861199b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161159191906146b8565b602060405180830381855afa1580156115ae573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906115d191906145ea565b6115db9190614703565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916116459189918991899190600401614717565b602060405180830381865afa158015611662573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116869190614791565b6116f85760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016107d4565b6069546117569033906117159067ffffffffffffffff168b61463b565b67ffffffffffffffff166117276120be565b611731919061467b565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16919061388f565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b15801561180b57600080fd5b505af115801561181f573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146119085760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d4565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161084c565b6119916136e0565b61090660006138ea565b67ffffffffffffffff8085166000818152606760205260408082205493871682529020546060929115806119ce57508115155b611a665760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b80611aff5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691611c209178010000000000000000000000000000000000000000000000009091041660016147ae565b611c2a919061463b565b611c469067ffffffffffffffff16670de0b6b3a764000061467b565b905090565b600054610100900460ff1615808015611c6b5750600054600160ff909116105b80611c855750303b158015611c85575060005460ff166001145b611cf75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107d4565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611d5557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d611e948782614828565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f611ed58582614828565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556070805492851692909116919091179055611f33613961565b8015611f9657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461203d5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d4565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061084c90831515815260200190565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612135573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215991906145ea565b60695460685491925060009167ffffffffffffffff918216916801000000000000000082048116916121be917001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041661463b565b6121c891906147ae565b6121d2919061463b565b67ffffffffffffffff1690506121e88183614924565b9250505090565b60655460ff161561228e5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b8567ffffffffffffffff168767ffffffffffffffff161061233d5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a4016107d4565b60695467ffffffffffffffff908116908716111561240f5760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c4016107d4565b67ffffffffffffffff87166000908152606b60205260409020546124c15760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a4016107d4565b67ffffffffffffffff86166000908152606b60205260409020546125735760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a4016107d4565b60006125818888888861199b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516125b691906146b8565b602060405180830381855afa1580156125d3573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906125f691906145ea565b6126009190614703565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d9161266a9189918991899190600401614717565b602060405180830381865afa158015612687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ab9190614791565b61271d5760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f460000000060648201526084016107d4565b67ffffffffffffffff88166000908152606b60205260409020548690036127d25760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a4016107d4565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a161282e613747565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146128d25760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d4565b606d6128de8282614828565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161084c9190613ea5565b60655460ff16156129ad5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612a705760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d4565b805180612b0b5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b60685467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612b56918491700100000000000000000000000000000000900416614938565b1115612bca5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016107d4565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b84811015612ee3576000868281518110612c2a57612c2a614565565b602002602001015190508380612c3f906145c3565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114612d605760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016107d4565b612d6b600188614664565b8303612e29574262093a808360400151612d8591906147ae565b67ffffffffffffffff161115612e295760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016107d4565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612ecb906145c3565b96505050508080612edb90614603565b915050612c0e565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff1661302b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d4565b60705473ffffffffffffffffffffffffffffffffffffffff1633146130b85760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016107d4565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561312257600080fd5b505af1158015613136573d6000803e3d6000fd5b505050506109066139e7565b60655460ff16156131e15760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146132a45760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d4565b60006132ae611bd1565b9050818111156133265760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016107d4565b620493e083511061339f5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016107d4565b6065546133c990610100900473ffffffffffffffffffffffffffffffffffffffff163330846137d1565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345d91906145ea565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613497836145c3565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161351093929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260669093529120553233036135e057606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261363d565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161363493929190614950565b60405180910390a25b50505050565b61364b6136e0565b73ffffffffffffffffffffffffffffffffffffffff81166136d45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107d4565b6136dd816138ea565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109065760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d4565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156137b157600080fd5b505af11580156137c5573d6000803e3d6000fd5b50505050610906613ab2565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261363d9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613ba7565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526138e59084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161382b565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166139de5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107d4565b610906336138ea565b60655460ff16613a5f5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d4565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff1615613b515760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6000613c09826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613c999092919063ffffffff16565b8051909150156138e55780806020019051810190613c279190614791565b6138e55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107d4565b6060613ca88484600085613cb2565b90505b9392505050565b606082471015613d2a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016107d4565b73ffffffffffffffffffffffffffffffffffffffff85163b613d8e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107d4565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613db791906146b8565b60006040518083038185875af1925050503d8060008114613df4576040519150601f19603f3d011682016040523d82523d6000602084013e613df9565b606091505b5091509150613e09828286613e14565b979650505050505050565b60608315613e23575081613cab565b825115613e335782518084602001fd5b8160405162461bcd60e51b81526004016107d49190613ea5565b60005b83811015613e68578181015183820152602001613e50565b8381111561363d5750506000910152565b60008151808452613e91816020860160208601613e4d565b601f01601f19169290920160200192915050565b602081526000613cab6020830184613e79565b73ffffffffffffffffffffffffffffffffffffffff811681146136dd57600080fd5b8035613ee581613eb8565b919050565b600060208284031215613efc57600080fd5b8135613cab81613eb8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613f5957613f59613f07565b60405290565b6040516060810167ffffffffffffffff81118282101715613f5957613f59613f07565b604051601f8201601f1916810167ffffffffffffffff81118282101715613fab57613fab613f07565b604052919050565b600067ffffffffffffffff821115613fcd57613fcd613f07565b5060051b60200190565b600082601f830112613fe857600080fd5b813567ffffffffffffffff81111561400257614002613f07565b6140156020601f19601f84011601613f82565b81815284602083860101111561402a57600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613ee557600080fd5b6000602080838503121561407257600080fd5b823567ffffffffffffffff8082111561408a57600080fd5b818501915085601f83011261409e57600080fd5b81356140b16140ac82613fb3565b613f82565b81815260059190911b830184019084810190888311156140d057600080fd5b8585015b83811015614169578035858111156140ec5760008081fd5b86016080818c03601f19018113156141045760008081fd5b61410c613f36565b898301358881111561411e5760008081fd5b61412c8e8c83870101613fd7565b8252506040808401358b8301526060614146818601614047565b82840152614155848601614047565b9083015250855250509186019186016140d4565b5098975050505050505050565b60006020828403121561418857600080fd5b613cab82614047565b80604081018310156141a257600080fd5b92915050565b6000806000806000806000610180888a0312156141c457600080fd5b6141cd88614047565b96506141db60208901614047565b955060408801359450606088013593506141f88960808a01614191565b925061014088018981111561420c57600080fd5b60c08901925061421c8a82614191565b91505092959891949750929550565b6000806000806080858703121561424157600080fd5b61424a85614047565b935061425860208601614047565b93969395505050506040820135916060013590565b80151581146136dd57600080fd5b8035613ee58161426d565b60008060008060008060008060008060006101608c8e0312156142a857600080fd5b6142b18c613eda565b9a506142bf60208d01613eda565b99506142cd60408d01613eda565b985060608c013597506142e260808d01613eda565b96506142f060a08d0161427b565b955067ffffffffffffffff8060c08e0135111561430c57600080fd5b61431c8e60c08f01358f01613fd7565b955061432a60e08e01614047565b9450806101008e0135111561433e57600080fd5b506143508d6101008e01358e01613fd7565b925061435f6101208d01613eda565b915061436e6101408d01613eda565b90509295989b509295989b9093969950565b60006020828403121561439257600080fd5b8135613cab8161426d565b6000602082840312156143af57600080fd5b813567ffffffffffffffff8111156143c657600080fd5b6143d284828501613fd7565b949350505050565b600060208083850312156143ed57600080fd5b823567ffffffffffffffff8082111561440557600080fd5b818501915085601f83011261441957600080fd5b81356144276140ac82613fb3565b81815260059190911b8301840190848101908883111561444657600080fd5b8585015b83811015614169578035858111156144625760008081fd5b86016060818c03601f190181131561447a5760008081fd5b614482613f5f565b89830135888111156144945760008081fd5b6144a28e8c83870101613fd7565b8252506040808401358b8301526144ba838501614047565b908201528552505091860191860161444a565b600080604083850312156144e057600080fd5b823567ffffffffffffffff8111156144f757600080fd5b61450385828601613fd7565b95602094909401359450505050565b600181811c9082168061452657607f821691505b60208210810361455f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036145e0576145e0614594565b6001019392505050565b6000602082840312156145fc57600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361463457614634614594565b5060010190565b600067ffffffffffffffff8381169083168181101561465c5761465c614594565b039392505050565b60008282101561467657614676614594565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146b3576146b3614594565b500290565b600082516146ca818460208701613e4d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614712576147126146d4565b500690565b61012081016040808784376000838201818152879190815b600281101561474f5784848337908401828152928401929060010161472f565b5050828760c0870137610100850181815286935091505b6001811015614785578251825260209283019290910190600101614766565b50505095945050505050565b6000602082840312156147a357600080fd5b8151613cab8161426d565b600067ffffffffffffffff8083168185168083038211156147d1576147d1614594565b01949350505050565b601f8211156138e557600081815260208120601f850160051c810160208610156148015750805b601f850160051c820191505b818110156148205782815560010161480d565b505050505050565b815167ffffffffffffffff81111561484257614842613f07565b614856816148508454614512565b846147da565b602080601f8311600181146148a957600084156148735750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614820565b600085815260208120601f198616915b828110156148d8578886015182559484019460019091019084016148b9565b508582101561491457878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082614933576149336146d4565b500490565b6000821982111561494b5761494b614594565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006149856060830184613e79565b9594505050505056fea26469706673582212207e277784efbe8f83ff553ede664750471887c02fa33f0f412c42f49abac3f00664736f6c634300080f0033", diff --git a/compiled-contracts/ProofOfEfficiencyMock.json b/compiled-contracts/ProofOfEfficiencyMock.json index 39691f27b..eb163f552 100644 --- a/compiled-contracts/ProofOfEfficiencyMock.json +++ b/compiled-contracts/ProofOfEfficiencyMock.json @@ -199,6 +199,19 @@ "name": "SetForceBatchAllowed", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint16", + "name": "newMultiplierBatchFee", + "type": "uint16" + } + ], + "name": "SetMultiplierBatchFee", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -264,6 +277,19 @@ "name": "SetTrustedSequencerURL", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "newVeryBatchTimeTarget", + "type": "uint64" + } + ], + "name": "SetVeryBatchTimeTarget", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -342,7 +368,7 @@ }, { "inputs": [], - "name": "MAX_TRANSACTIONS_BYTE_LENGTH", + "name": "MAX_BATCH_MULTIPLIER", "outputs": [ { "internalType": "uint256", @@ -355,20 +381,7 @@ }, { "inputs": [], - "name": "MAX_VERIFY_BATCHES", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MULTIPLIER_BATCH_FEE", + "name": "MAX_TRANSACTIONS_BYTE_LENGTH", "outputs": [ { "internalType": "uint256", @@ -381,7 +394,7 @@ }, { "inputs": [], - "name": "VERIFY_BATCH_TIME_TARGET", + "name": "MAX_VERIFY_BATCHES", "outputs": [ { "internalType": "uint64", @@ -936,6 +949,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "multiplierBatchFee", + "outputs": [ + { + "internalType": "uint16", + "name": "", + "type": "uint16" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "networkName", @@ -1255,6 +1281,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint16", + "name": "newMultiplierBatchFee", + "type": "uint16" + } + ], + "name": "setMultiplierBatchFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -1418,6 +1457,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "newVeryBatchTimeTarget", + "type": "uint64" + } + ], + "name": "setVeryBatchTimeTarget", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -1626,6 +1678,19 @@ "outputs": [], "stateMutability": "nonpayable", "type": "function" + }, + { + "inputs": [], + "name": "veryBatchTimeTarget", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" } ], "bytecode": "0x608060405234801561001057600080fd5b50615272806100206000396000f3fe608060405234801561001057600080fd5b506004361061032b5760003560e01c80638da5cb5b116101b2578063c89e42df116100f9578063dbc16976116100a2578063eaeb077b1161007c578063eaeb077b14610811578063f2fde38b14610824578063f755276114610837578063fe16564f1461084657600080fd5b8063dbc16976146107b9578063e7a7ed02146107c1578063e8bf92ed146107f157600080fd5b8063d0ae98dd116100d3578063d0ae98dd14610766578063d8d1091b14610779578063d8f54db01461078c57600080fd5b8063c89e42df14610707578063cfa8ed471461071a578063d02103ca1461074657600080fd5b8063adc879e91161015b578063b6b0b09711610135578063b6b0b097146106bc578063c0cad302146106e1578063c3fd0f9c146106f457600080fd5b8063adc879e91461067e578063b02286c014610692578063b4d63f581461069c57600080fd5b80639b7967601161018c5780639b79676014610641578063a3c573eb14610654578063ab9fc5ef1461067457600080fd5b80638da5cb5b1461060857806396dc3d391461062657806399f5634e1461063957600080fd5b80635437988d116102765780637152facf1161021f5780637fcb3653116101f95780637fcb3653146105ce57806381df7d3f146105e25780638c4a0af7146105f557600080fd5b80637152facf146105a0578063748608de146105b357806379847057146105c657600080fd5b80636b8616ce116102505780636b8616ce146105655780636ff512cc14610585578063715018a61461059857600080fd5b80635437988d1461049e57806355b925e6146104b1578063574f649e146104c457600080fd5b806327eb6c0f116102d857806345605267116102b257806345605267146104405780635392c5e014610468578063542028d51461049657600080fd5b806327eb6c0f146103c85780633c1582671461040d578063423fa8561461042057600080fd5b80631a26da14116103095780631a26da14146103985780631c1083e2146103ad5780632072f6c5146103c057600080fd5b8063107bf28c1461033057806315064c961461034e57806319d8ac611461036b575b600080fd5b610338610859565b6040516103459190614687565b60405180910390f35b60655461035b9060ff1681565b6040519015158152602001610345565b60685461037f9067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610345565b6103ab6103a63660046146b7565b6108e7565b005b6103ab6103bb36600461470e565b61090c565b6103ab610a18565b6070546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610345565b6103ab61041b36600461486b565b610ac9565b60685461037f9068010000000000000000900467ffffffffffffffff1681565b60685461037f90700100000000000000000000000000000000900467ffffffffffffffff1681565b610488610476366004614982565b606b6020526000908152604090205481565b604051908152602001610345565b61033861145a565b6103ab6104ac36600461470e565b611467565b6103ab6104bf3660046149b4565b6114b6565b6104886104d2366004614a37565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b610488610573366004614982565b60666020526000908152604090205481565b6103ab61059336600461470e565b611a7f565b6103ab611b99565b6103386105ae366004614aad565b611bab565b6103ab6105c13660046149b4565b611de1565b61048861204a565b60695461037f9067ffffffffffffffff1681565b6103ab6105f0366004614b08565b6120c4565b6103ab610603366004614c02565b61241d565b60335473ffffffffffffffffffffffffffffffffffffffff166103e8565b6103ab610634366004614982565b612537565b61048861257a565b6103ab61064f366004614982565b6126ab565b6071546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b61037f62093a8081565b606e5461037f9067ffffffffffffffff1681565b610488620493e081565b6104886106aa366004614982565b60676020526000908152604090205481565b6065546103e890610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6103ab6106ef366004614c1f565b6126fa565b6103ab6107023660046149b4565b612712565b6103ab610715366004614c1f565b612d5c565b6069546103e89068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b610488610774366004614aad565b612e31565b6103ab610787366004614c5c565b6130dd565b60695461035b907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b6103ab613782565b60685461037f907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b6103ab61081f366004614d4f565b613911565b6103ab61083236600461470e565b613e12565b61048867016345785d8a000081565b6103ab610854366004614d94565b613eaf565b606f805461086690614dc0565b80601f016020809104026020016040519081016040528092919081815260200182805461089290614dc0565b80156108df5780601f106108b4576101008083540402835291602001916108df565b820191906000526020600020905b8154815290600101906020018083116108c257829003601f168201915b505050505081565b6108ef613ed2565b67ffffffffffffffff909116600090815260676020526040902055565b60705473ffffffffffffffffffffffffffffffffffffffff16331461099e5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff1615610ab75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b610abf613ed2565b610ac7613f39565b565b60655460ff1615610b685760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610c015760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610995565b805180610c9c5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b8581101561124b576000878281518110610d0257610d02614e13565b602002602001015190506000816060015167ffffffffffffffff161115610f1b5783610d2d81614e71565b945050600081600001518051906020012082602001518360600151604051602001610d9093929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610e5d5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610f155760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610995565b506110b6565b60208101511580610fca5750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610f849160040190815260200190565b6020604051808303816000875af1158015610fa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc79190614e98565b15155b61103c5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610995565b805151620493e0116110b65760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610995565b8567ffffffffffffffff16816040015167ffffffffffffffff16101580156110ec575042816040015167ffffffffffffffff1611155b6111845760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061122d90614e71565b9550508060400151955050808061124390614eb1565b915050610ce6565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156112ee5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610995565b60685460009061131c90700100000000000000000000000000000000900467ffffffffffffffff1684614ee9565b6113309067ffffffffffffffff1687614f12565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061140d33306113e78467016345785d8a0000614f29565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613fc3565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d805461086690614dc0565b61146f613ed2565b606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60655460ff16156115555760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b60695467ffffffffffffffff90811690881611156116015760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a401610995565b60695467ffffffffffffffff908116908716116116ac5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a401610995565b67ffffffffffffffff87166000908152606b602052604090205461175e5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a401610995565b600061176c88888888611bab565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516117a19190614f66565b602060405180830381855afa1580156117be573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906117e19190614e98565b6117eb9190614fb1565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916118559189918991899190600401614fc5565b602060405180830381865afa158015611872573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611896919061503f565b6119085760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610995565b6069546119669033906119259067ffffffffffffffff168b614ee9565b67ffffffffffffffff1661193761257a565b6119419190614f29565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169190614081565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b158015611a1b57600080fd5b505af1158015611a2f573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611b185760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610995565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610a0d565b611ba1613ed2565b610ac760006140dc565b67ffffffffffffffff808516600081815260676020526040808220549387168252902054606092911580611bde57508115155b611c765760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610995565b80611d0f5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610995565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b611de9613ed2565b60695467ffffffffffffffff9081169088161115611e955760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a401610995565b60695467ffffffffffffffff90811690871611611f405760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610995565b67ffffffffffffffff80881660009081526067602052604080822054928916825290205481611fd75760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610995565b806119665760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610995565b60685460009067ffffffffffffffff700100000000000000000000000000000000820481169161209991780100000000000000000000000000000000000000000000000090910416600161505c565b6120a39190614ee9565b6120bf9067ffffffffffffffff16670de0b6b3a7640000614f29565b905090565b600054610100900460ff16158080156120e45750600054600160ff909116105b806120fe5750303b1580156120fe575060005460ff166001145b6121705760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610995565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156121ce57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d61230d87826150d6565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f61234e85826150d6565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560708054928516929091169190911790556123ac614153565b801561240f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146124b65760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610995565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a0d90831515815260200190565b61253f613ed2565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156125f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126159190614e98565b60695460685491925060009167ffffffffffffffff9182169168010000000000000000820481169161267a9170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614ee9565b612684919061505c565b61268e9190614ee9565b67ffffffffffffffff1690506126a481836151d2565b9250505090565b6126b3613ed2565b6068805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b612702613ed2565b606f61270e82826150d6565b5050565b60655460ff16156127b15760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b8567ffffffffffffffff168767ffffffffffffffff16106128605760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a401610995565b60695467ffffffffffffffff90811690871611156129325760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c401610995565b67ffffffffffffffff87166000908152606b60205260409020546129e45760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a401610995565b67ffffffffffffffff86166000908152606b6020526040902054612a965760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a401610995565b6000612aa488888888611bab565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051612ad99190614f66565b602060405180830381855afa158015612af6573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612b199190614e98565b612b239190614fb1565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91612b8d9189918991899190600401614fc5565b602060405180830381865afa158015612baa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bce919061503f565b612c405760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f46000000006064820152608401610995565b67ffffffffffffffff88166000908152606b6020526040902054869003612cf55760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a401610995565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a1612d51613f39565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612df55760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610995565b606d612e0182826150d6565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a0d9190614687565b60695460009067ffffffffffffffff868116911614612ede5760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b8467ffffffffffffffff168467ffffffffffffffff1611612f8d5760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a401610995565b60685467ffffffffffffffff68010000000000000000909104811690851611156130455760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b600061305386868686611bab565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516130889190614f66565b602060405180830381855afa1580156130a5573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906130c89190614e98565b6130d29190614fb1565b979650505050505050565b60655460ff161561317c5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461323f5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610995565b8051806132da5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b60685467ffffffffffffffff780100000000000000000000000000000000000000000000000082048116916133259184917001000000000000000000000000000000009004166151e6565b11156133995760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610995565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b848110156136b25760008682815181106133f9576133f9614e13565b60200260200101519050838061340e90614e71565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff881660009081526066909352912054909150811461352f5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610995565b61353a600188614f12565b83036135f8574262093a808360400151613554919061505c565b67ffffffffffffffff1611156135f85760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610995565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209350858061369a90614e71565b965050505080806136aa90614eb1565b9150506133dd565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166137fa5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610995565b60705473ffffffffffffffffffffffffffffffffffffffff1633146138875760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c0000006064820152608401610995565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156138f157600080fd5b505af1158015613905573d6000803e3d6000fd5b50505050610ac76141d9565b60655460ff16156139b05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114613a735760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610995565b6000613a7d61204a565b905081811115613af55760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610995565b620493e0835110613b6e5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610995565b606554613b9890610100900473ffffffffffffffffffffffffffffffffffffffff16333084613fc3565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2c9190614e98565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613c6683614e71565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505083805190602001208142604051602001613cdf93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526066909352912055323303613daf57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613e0c565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613e03939291906151fe565b60405180910390a25b50505050565b613e1a613ed2565b73ffffffffffffffffffffffffffffffffffffffff8116613ea35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610995565b613eac816140dc565b50565b613eb7613ed2565b67ffffffffffffffff166000908152606b6020526040902055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ac75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610995565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613fa357600080fd5b505af1158015613fb7573d6000803e3d6000fd5b50505050610ac76142a4565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052613e0c9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152614399565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526140d79084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161401d565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166141d05760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610995565b610ac7336140dc565b60655460ff166142515760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610995565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff16156143435760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60006143fb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661448b9092919063ffffffff16565b8051909150156140d75780806020019051810190614419919061503f565b6140d75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610995565b606061449a84846000856144a4565b90505b9392505050565b60608247101561451c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610995565b73ffffffffffffffffffffffffffffffffffffffff85163b6145805760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610995565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516145a99190614f66565b60006040518083038185875af1925050503d80600081146145e6576040519150601f19603f3d011682016040523d82523d6000602084013e6145eb565b606091505b50915091506130d28282866060831561460557508161449d565b8251156146155782518084602001fd5b8160405162461bcd60e51b81526004016109959190614687565b60005b8381101561464a578181015183820152602001614632565b83811115613e0c5750506000910152565b6000815180845261467381602086016020860161462f565b601f01601f19169290920160200192915050565b60208152600061449d602083018461465b565b803567ffffffffffffffff811681146146b257600080fd5b919050565b600080604083850312156146ca57600080fd5b6146d38361469a565b946020939093013593505050565b73ffffffffffffffffffffffffffffffffffffffff81168114613eac57600080fd5b80356146b2816146e1565b60006020828403121561472057600080fd5b813561449d816146e1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171561477d5761477d61472b565b60405290565b6040516060810167ffffffffffffffff8111828210171561477d5761477d61472b565b604051601f8201601f1916810167ffffffffffffffff811182821017156147cf576147cf61472b565b604052919050565b600067ffffffffffffffff8211156147f1576147f161472b565b5060051b60200190565b600082601f83011261480c57600080fd5b813567ffffffffffffffff8111156148265761482661472b565b6148396020601f19601f840116016147a6565b81815284602083860101111561484e57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561487e57600080fd5b823567ffffffffffffffff8082111561489657600080fd5b818501915085601f8301126148aa57600080fd5b81356148bd6148b8826147d7565b6147a6565b81815260059190911b830184019084810190888311156148dc57600080fd5b8585015b83811015614975578035858111156148f85760008081fd5b86016080818c03601f19018113156149105760008081fd5b61491861475a565b898301358881111561492a5760008081fd5b6149388e8c838701016147fb565b8252506040808401358b830152606061495281860161469a565b8284015261496184860161469a565b9083015250855250509186019186016148e0565b5098975050505050505050565b60006020828403121561499457600080fd5b61449d8261469a565b80604081018310156149ae57600080fd5b92915050565b6000806000806000806000610180888a0312156149d057600080fd5b6149d98861469a565b96506149e76020890161469a565b95506040880135945060608801359350614a048960808a0161499d565b9250610140880189811115614a1857600080fd5b60c089019250614a288a8261499d565b91505092959891949750929550565b600080600080600060a08688031215614a4f57600080fd5b85359450602086013567ffffffffffffffff811115614a6d57600080fd5b614a79888289016147fb565b94505060408601359250614a8f6060870161469a565b91506080860135614a9f816146e1565b809150509295509295909350565b60008060008060808587031215614ac357600080fd5b614acc8561469a565b9350614ada6020860161469a565b93969395505050506040820135916060013590565b8015158114613eac57600080fd5b80356146b281614aef565b60008060008060008060008060008060006101608c8e031215614b2a57600080fd5b614b338c614703565b9a50614b4160208d01614703565b9950614b4f60408d01614703565b985060608c01359750614b6460808d01614703565b9650614b7260a08d01614afd565b955067ffffffffffffffff8060c08e01351115614b8e57600080fd5b614b9e8e60c08f01358f016147fb565b9550614bac60e08e0161469a565b9450806101008e01351115614bc057600080fd5b50614bd28d6101008e01358e016147fb565b9250614be16101208d01614703565b9150614bf06101408d01614703565b90509295989b509295989b9093969950565b600060208284031215614c1457600080fd5b813561449d81614aef565b600060208284031215614c3157600080fd5b813567ffffffffffffffff811115614c4857600080fd5b614c54848285016147fb565b949350505050565b60006020808385031215614c6f57600080fd5b823567ffffffffffffffff80821115614c8757600080fd5b818501915085601f830112614c9b57600080fd5b8135614ca96148b8826147d7565b81815260059190911b83018401908481019088831115614cc857600080fd5b8585015b8381101561497557803585811115614ce45760008081fd5b86016060818c03601f1901811315614cfc5760008081fd5b614d04614783565b8983013588811115614d165760008081fd5b614d248e8c838701016147fb565b8252506040808401358b830152614d3c83850161469a565b9082015285525050918601918601614ccc565b60008060408385031215614d6257600080fd5b823567ffffffffffffffff811115614d7957600080fd5b614d85858286016147fb565b95602094909401359450505050565b60008060408385031215614da757600080fd5b82359150614db76020840161469a565b90509250929050565b600181811c90821680614dd457607f821691505b602082108103614e0d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614e8e57614e8e614e42565b6001019392505050565b600060208284031215614eaa57600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614ee257614ee2614e42565b5060010190565b600067ffffffffffffffff83811690831681811015614f0a57614f0a614e42565b039392505050565b600082821015614f2457614f24614e42565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f6157614f61614e42565b500290565b60008251614f7881846020870161462f565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614fc057614fc0614f82565b500690565b61012081016040808784376000838201818152879190815b6002811015614ffd57848483379084018281529284019290600101614fdd565b5050828760c0870137610100850181815286935091505b6001811015615033578251825260209283019290910190600101615014565b50505095945050505050565b60006020828403121561505157600080fd5b815161449d81614aef565b600067ffffffffffffffff80831681851680830382111561507f5761507f614e42565b01949350505050565b601f8211156140d757600081815260208120601f850160051c810160208610156150af5750805b601f850160051c820191505b818110156150ce578281556001016150bb565b505050505050565b815167ffffffffffffffff8111156150f0576150f061472b565b615104816150fe8454614dc0565b84615088565b602080601f83116001811461515757600084156151215750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556150ce565b600085815260208120601f198616915b8281101561518657888601518255948401946001909101908401615167565b50858210156151c257878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000826151e1576151e1614f82565b500490565b600082198211156151f9576151f9614e42565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff83166020820152606060408201526000615233606083018461465b565b9594505050505056fea2646970667358221220c16f5391a2335fd2bbdee61b8cea2ac3d34fb4b8ac0576fc548b330fb23fe12264736f6c634300080f0033", diff --git a/compiled-contracts/VerifierRollupHelperMock.json b/compiled-contracts/VerifierRollupHelperMock.json index 6f8bd7a11..26f830ec9 100644 --- a/compiled-contracts/VerifierRollupHelperMock.json +++ b/compiled-contracts/VerifierRollupHelperMock.json @@ -38,8 +38,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50610101806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c806343753b4d14602d575b600080fd5b60426038366004606c565b6001949350505050565b604051901515815260200160405180910390f35b8060408101831015606657600080fd5b92915050565b600080600080610120808688031215608357600080fd5b608b87876056565b945060c0860187811115609d57600080fd5b60408701945060ab88826056565b93505086818701111560bc57600080fd5b5092959194509261010001915056fea26469706673582212204b9e206f0a377fe1821fc8d7c30122338f87b81c8476b3670cb033d94a5cf6f264736f6c634300080f0033", - "deployedBytecode": "0x6080604052348015600f57600080fd5b506004361060285760003560e01c806343753b4d14602d575b600080fd5b60426038366004606c565b6001949350505050565b604051901515815260200160405180910390f35b8060408101831015606657600080fd5b92915050565b600080600080610120808688031215608357600080fd5b608b87876056565b945060c0860187811115609d57600080fd5b60408701945060ab88826056565b93505086818701111560bc57600080fd5b5092959194509261010001915056fea26469706673582212204b9e206f0a377fe1821fc8d7c30122338f87b81c8476b3670cb033d94a5cf6f264736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50610101806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c806343753b4d14602d575b600080fd5b60426038366004606c565b6001949350505050565b604051901515815260200160405180910390f35b8060408101831015606657600080fd5b92915050565b600080600080610120808688031215608357600080fd5b608b87876056565b945060c0860187811115609d57600080fd5b60408701945060ab88826056565b93505086818701111560bc57600080fd5b5092959194509261010001915056fea2646970667358221220563663b9c79c384b2428d1e041a468d42ddcac4e9cb78e1148c81eca7985714764736f6c634300080f0033", + "deployedBytecode": "0x6080604052348015600f57600080fd5b506004361060285760003560e01c806343753b4d14602d575b600080fd5b60426038366004606c565b6001949350505050565b604051901515815260200160405180910390f35b8060408101831015606657600080fd5b92915050565b600080600080610120808688031215608357600080fd5b608b87876056565b945060c0860187811115609d57600080fd5b60408701945060ab88826056565b93505086818701111560bc57600080fd5b5092959194509261010001915056fea2646970667358221220563663b9c79c384b2428d1e041a468d42ddcac4e9cb78e1148c81eca7985714764736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/ProofOfEfficiency.sol b/contracts/ProofOfEfficiency.sol index bcec0e6ce..28d42a655 100644 --- a/contracts/ProofOfEfficiency.sol +++ b/contracts/ProofOfEfficiency.sol @@ -127,12 +127,15 @@ contract ProofOfEfficiency is // This should be a protection against someone that trys to generate huge chunk of invalid batches, and we can't prove otherwise before the pending timeout expires uint64 public constant MAX_VERIFY_BATCHES = 1000; + // Max batch multiplier per verification + uint256 public constant MAX_BATCH_MULTIPLIER = 12; + // Time target of the verification of a batch // Adaptatly the batchFee will be updated to achieve this target - uint64 public constant VERIFY_BATCH_TIME_TARGET = 30 minutes; + uint64 public veryBatchTimeTarget; - // Batch fee multiplier with 1 decimal (1.1) - uint256 public constant MULTIPLIER_BATCH_FEE = 11; + // Batch fee multiplier with 3 decimal that goes from 1000 - 1024 + uint16 public multiplierBatchFee; // MATIC token address IERC20Upgradeable public matic; @@ -293,6 +296,16 @@ contract ProofOfEfficiency is */ event SetTrustedAggregator(address newTrustedAggregator); + /** + * @dev Emitted when the admin update the multiplier batch fee + */ + event SetMultiplierBatchFee(uint16 newMultiplierBatchFee); + + /** + * @dev Emitted when the admin update the verify batch timeout + */ + event SetVeryBatchTimeTarget(uint64 newVeryBatchTimeTarget); + /** * @dev Emitted when a admin update his address */ @@ -351,6 +364,8 @@ contract ProofOfEfficiency is trustedSequencerURL = _trustedSequencerURL; networkName = _networkName; batchFee = 10 ** 18; // 1 Matic + veryBatchTimeTarget = 30 minutes; + multiplierBatchFee = 1002; // Initialize OZ contracts __Ownable_init_unchained(); @@ -836,7 +851,7 @@ contract ProofOfEfficiency is // Check if timestamp is above or below the VERIFY_BATCH_TIME_TARGET if ( block.timestamp - currentSequencedBatchData.sequencedTimestamp > - VERIFY_BATCH_TIME_TARGET + veryBatchTimeTarget ) { totalBatchesAboveTarget += currentLastVerifiedBatch - @@ -851,42 +866,41 @@ contract ProofOfEfficiency is totalBatchesAboveTarget; // Assume that batch fee will be max 128 bits, therefore: - // MULTIPLIER_BATCH_FEE --> (< 4 bits) - // MULTIPLIER_BATCH_FEE ** 32 --> (< 128 bits) + // multiplierBatchFee --> (< 10 bits) + // MAX_BATCH_MULTIPLIER = 12 + // multiplierBatchFee ** MAX_BATCH_MULTIPLIER --> (< 128 bits) // (< 128 bits) * (< 128 bits) = < 256 bits if (totalBatchesBelowTarget < totalBatchesAboveTarget) { // There are more batches above target, fee is multiplied uint256 diffBatches = totalBatchesAboveTarget - totalBatchesBelowTarget; - uint256 accMultiplier = batchFee; - while (diffBatches > 32) { - accMultiplier = - (accMultiplier * (MULTIPLIER_BATCH_FEE ** 32)) / - (10 ** 32); - diffBatches -= 32; - } - accMultiplier = - (accMultiplier * (MULTIPLIER_BATCH_FEE ** diffBatches)) / - (10 ** diffBatches); - batchFee = accMultiplier; + diffBatches = diffBatches > MAX_BATCH_MULTIPLIER + ? MAX_BATCH_MULTIPLIER + : diffBatches; + + // For every multiplierBatchFee multiplication we must shift 3 zeroes since we have 3 decimals + batchFee = + (batchFee * (uint256(multiplierBatchFee) ** diffBatches)) / + (10 ** (diffBatches * 3)); } else { // There are more batches below target, fee is divided uint256 diffBatches = totalBatchesBelowTarget - totalBatchesAboveTarget; - uint256 accMultiplier = batchFee; - while (diffBatches > 32) { - accMultiplier = - (accMultiplier * (MULTIPLIER_BATCH_FEE ** 32)) / - (10 ** 32); - diffBatches -= 32; - } - accMultiplier = - (accMultiplier * (MULTIPLIER_BATCH_FEE ** diffBatches)) / - (10 ** diffBatches); + diffBatches = diffBatches > MAX_BATCH_MULTIPLIER + ? MAX_BATCH_MULTIPLIER + : diffBatches; - batchFee = (batchFee * batchFee) / accMultiplier; + // For every multiplierBatchFee multiplication we must shift 3 zeroes since we have 3 decimals + uint256 accDivisor = (batchFee * + (uint256(multiplierBatchFee) ** diffBatches)) / + (10 ** (diffBatches * 3)); + + // multiplyFactor = multiplierBatchFee ** diffBatches / 10 ** (diffBatches * 3) + // accDivisor = batchFee * multiplyFactor + // batchFee * batchFee / accDivisor = batchFee / multiplyFactor + batchFee = (batchFee * batchFee) / accDivisor; } } @@ -964,7 +978,7 @@ contract ProofOfEfficiency is require( batchesNum < MAX_VERIFY_BATCHES, - "ProofOfEfficiency::verifyBatches: cannot verify that many batches" + "ProofOfEfficiency::sequenceForceBatches: cannot verify that many batches" ); require( @@ -1131,6 +1145,33 @@ contract ProofOfEfficiency is emit SetPendingStateTimeout(newPendingStateTimeout); } + /** + * @notice Allow the admin to set a new multiplier batch fee + * @param newMultiplierBatchFee multiplier bathc fee + */ + function setMultiplierBatchFee( + uint16 newMultiplierBatchFee + ) public onlyAdmin { + require( + newMultiplierBatchFee > 1000 && newMultiplierBatchFee < 1024, + "ProofOfEfficiency::setMultiplierBatchFee: newMultiplierBatchFee incorrect range" + ); + + multiplierBatchFee = newMultiplierBatchFee; + emit SetMultiplierBatchFee(newMultiplierBatchFee); + } + + /** + * @notice Allow the admin to set a new verify batch time target + * @param newVeryBatchTimeTarget Verify batch time target + */ + function setVeryBatchTimeTarget( + uint64 newVeryBatchTimeTarget + ) public onlyAdmin { + veryBatchTimeTarget = newVeryBatchTimeTarget; + emit SetVeryBatchTimeTarget(newVeryBatchTimeTarget); + } + /** * @notice Allow the current admin to set a new admin address * @param newAdmin Address of the new admin diff --git a/docs/ProofOfEfficiency.md b/docs/ProofOfEfficiency.md index 4693af408..f375ce88a 100644 --- a/docs/ProofOfEfficiency.md +++ b/docs/ProofOfEfficiency.md @@ -281,6 +281,34 @@ The timeout can only be lowered, except if emergency state is active | :--- | :--- | :------------------------------------------------------------------- | |`newPendingStateTimeout` | uint64 | Trusted aggreagator timeout +### setMultiplierBatchFee +```solidity + function setMultiplierBatchFee( + uint16 newMultiplierBatchFee + ) public +``` +Allow the admin to set a new multiplier batch fee + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`newMultiplierBatchFee` | uint16 | multiplier bathc fee + +### setVeryBatchTimeTarget +```solidity + function setVeryBatchTimeTarget( + uint64 newVeryBatchTimeTarget + ) public +``` +Allow the admin to set a new verify batch time target + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`newVeryBatchTimeTarget` | uint64 | Verify batch time target + ### setAdmin ```solidity function setAdmin( @@ -572,6 +600,22 @@ Emitted when the admin update the pending state timeout Emitted when the admin update the trusted aggregator address +### SetMultiplierBatchFee +```solidity + event SetMultiplierBatchFee( + ) +``` + +Emitted when the admin update the multiplier batch fee + +### SetVeryBatchTimeTarget +```solidity + event SetVeryBatchTimeTarget( + ) +``` + +Emitted when the admin update the verify batch timeout + ### SetAdmin ```solidity event SetAdmin( diff --git a/hardhat.config.js b/hardhat.config.js index caf1c7e89..7457d0317 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -21,7 +21,7 @@ module.exports = { settings: { optimizer: { enabled: true, - runs: 500 // Should be updated in a real deployment + runs: 100 // Should be updated in a real deployment } } }, diff --git a/test/contracts/proofOfEfficiency.test.js b/test/contracts/proofOfEfficiency.test.js index 9d4198cf8..e4f02d804 100644 --- a/test/contracts/proofOfEfficiency.test.js +++ b/test/contracts/proofOfEfficiency.test.js @@ -10,6 +10,7 @@ describe('Proof of efficiency', () => { let trustedAggregator; let trustedSequencer; let admin; + let aggregator1; let verifierContract; let bridgeContract; @@ -33,7 +34,7 @@ describe('Proof of efficiency', () => { beforeEach('Deploy contract', async () => { // load signers - [deployer, trustedAggregator, trustedSequencer, admin] = await ethers.getSigners(); + [deployer, trustedAggregator, trustedSequencer, admin, aggregator1] = await ethers.getSigners(); // deploy mock verifier const VerifierRollupHelperFactory = await ethers.getContractFactory( @@ -669,6 +670,19 @@ describe('Proof of efficiency', () => { trustedAggregator.address, ); + await expect( + proofOfEfficiencyContract.connect(deployer).trustedVerifyBatches( + pendingState, + numBatch - 1, + numBatch - 1, + newLocalExitRoot, + newStateRoot, + proofA, + proofB, + proofC, + ), + ).to.be.revertedWith('ProofOfEfficiency::onlyTrustedAggregator: only trusted Aggregator'); + await expect( proofOfEfficiencyContract.connect(trustedAggregator).trustedVerifyBatches( pendingState, @@ -933,4 +947,166 @@ describe('Proof of efficiency', () => { expect(circuitInpuSnarkSC).to.be.equal(inputSnarkJS); }); + + it('should verify a sequenced batch using verifyBatches', async () => { + const l2txData = '0x123456'; + const maticAmount = await proofOfEfficiencyContract.getCurrentBatchFee(); + const currentTimestamp = (await ethers.provider.getBlock()).timestamp; + + const sequence = { + transactions: l2txData, + globalExitRoot: ethers.constants.HashZero, + timestamp: currentTimestamp, + minForcedTimestamp: 0, + }; + + // Approve tokens + await expect( + maticTokenContract.connect(trustedSequencer).approve(proofOfEfficiencyContract.address, maticAmount), + ).to.emit(maticTokenContract, 'Approval'); + + const lastBatchSequenced = await proofOfEfficiencyContract.lastBatchSequenced(); + // Sequence Batches + await expect(proofOfEfficiencyContract.connect(trustedSequencer).sequenceBatches([sequence])) + .to.emit(proofOfEfficiencyContract, 'SequenceBatches') + .withArgs(lastBatchSequenced + 1); + + // aggregator forge the batch + const pendingState = 0; + const newLocalExitRoot = '0x0000000000000000000000000000000000000000000000000000000000000001'; + const newStateRoot = '0x0000000000000000000000000000000000000000000000000000000000000002'; + const numBatch = (await proofOfEfficiencyContract.lastVerifiedBatch()) + 1; + const proofA = ['0', '0']; + const proofB = [ + ['0', '0'], + ['0', '0'], + ]; + const proofC = ['0', '0']; + + const initialAggregatorMatic = await maticTokenContract.balanceOf( + aggregator1.address, + ); + + const sequencedBatchData = await proofOfEfficiencyContract.sequencedBatches(1); + const { sequencedTimestamp } = sequencedBatchData; + const currentBatchFee = await proofOfEfficiencyContract.batchFee(); + + await expect( + proofOfEfficiencyContract.connect(aggregator1).verifyBatches( + pendingState, + numBatch - 1, + numBatch, + newLocalExitRoot, + newStateRoot, + proofA, + proofB, + proofC, + ), + ).to.be.revertedWith('ProofOfEfficiency::verifyBatches: trusted aggregator timeout not expired'); + + await ethers.provider.send('evm_setNextBlockTimestamp', [sequencedTimestamp.toNumber() + trustedAggregatorTimeoutDefault - 1]); + + await expect( + proofOfEfficiencyContract.connect(aggregator1).verifyBatches( + pendingState, + numBatch - 1, + numBatch, + newLocalExitRoot, + newStateRoot, + proofA, + proofB, + proofC, + ), + ).to.be.revertedWith('ProofOfEfficiency::verifyBatches: trusted aggregator timeout not expired'); + + await expect( + proofOfEfficiencyContract.connect(aggregator1).verifyBatches( + pendingState, + numBatch - 1, + numBatch + 1, + newLocalExitRoot, + newStateRoot, + proofA, + proofB, + proofC, + ), + ).to.be.revertedWith('ProofOfEfficiency::getInputSnarkBytes: newAccInputHash does not exist'); + + // Verify batch + await expect( + proofOfEfficiencyContract.connect(aggregator1).verifyBatches( + pendingState, + numBatch - 1, + numBatch, + newLocalExitRoot, + newStateRoot, + proofA, + proofB, + proofC, + ), + ).to.emit(proofOfEfficiencyContract, 'VerifyBatches') + .withArgs(numBatch, newStateRoot, aggregator1.address); + + const verifyTimestamp = (await ethers.provider.getBlock()).timestamp; + + const finalAggregatorMatic = await maticTokenContract.balanceOf( + aggregator1.address, + ); + expect(finalAggregatorMatic).to.equal( + ethers.BigNumber.from(initialAggregatorMatic).add(ethers.BigNumber.from(maticAmount)), + ); + + // Check pending state + const lastPendingstate = 1; + expect(lastPendingstate).to.be.equal(await proofOfEfficiencyContract.lastPendingState()); + + const pendingStateData = await proofOfEfficiencyContract.pendingStateTransitions(lastPendingstate); + expect(verifyTimestamp).to.be.equal(pendingStateData.timestamp); + expect(numBatch).to.be.equal(pendingStateData.lastVerifiedBatch); + expect(newLocalExitRoot).to.be.equal(pendingStateData.exitRoot); + expect(newStateRoot).to.be.equal(pendingStateData.stateRoot); + + // Try consolidate state + expect(0).to.be.equal(await proofOfEfficiencyContract.lastVerifiedBatch()); + + // Pending state can't be 0 + await expect( + proofOfEfficiencyContract.consolidatePendingState(0), + ).to.be.revertedWith('ProofOfEfficiency::consolidatePendingState: pendingStateNum must invalid'); + + // Pending state does not exist + await expect( + proofOfEfficiencyContract.consolidatePendingState(2), + ).to.be.revertedWith('ProofOfEfficiency::consolidatePendingState: pendingStateNum must invalid'); + + // Not ready to be consolidated + await expect( + proofOfEfficiencyContract.consolidatePendingState(lastPendingstate), + ).to.be.revertedWith('ProofOfEfficiency::consolidatePendingState: pending state is not ready to be consolidated'); + + await ethers.provider.send('evm_setNextBlockTimestamp', [verifyTimestamp + pendingStateTimeoutDefault - 1]); + + await expect( + proofOfEfficiencyContract.consolidatePendingState(lastPendingstate), + ).to.be.revertedWith('ProofOfEfficiency::consolidatePendingState: pending state is not ready to be consolidated'); + + await expect( + proofOfEfficiencyContract.consolidatePendingState(lastPendingstate), + ).to.emit(proofOfEfficiencyContract, 'ConsolidatePendingState') + .withArgs(numBatch, newStateRoot, lastPendingstate); + + // Pending state already consolidated + await expect( + proofOfEfficiencyContract.consolidatePendingState(1), + ).to.be.revertedWith('ProofOfEfficiency::consolidatePendingState: pendingStateNum must invalid'); + + // Fee es divided because is was fast verified + const multiplierFee = await proofOfEfficiencyContract.multiplierBatchFee(); + expect((currentBatchFee.mul(1000)).div(multiplierFee)).to.be.equal(await proofOfEfficiencyContract.batchFee()); + + // Check pending state variables + expect(1).to.be.equal(await proofOfEfficiencyContract.lastVerifiedBatch()); + expect(newStateRoot).to.be.equal(await proofOfEfficiencyContract.batchNumToStateRoot(1)); + expect(1).to.be.equal(await proofOfEfficiencyContract.lastPendingStateConsolidated()); + }); }); From e0d984ac4f77a1909e6d5804f42168f5562dbab0 Mon Sep 17 00:00:00 2001 From: krlosMata Date: Mon, 19 Dec 2022 15:16:05 +0100 Subject: [PATCH 45/71] Verifier mango + small-improvements --- contracts/verifiers/Verifier.sol | 181 +++++++++---------------------- deployment/README.md | 2 + deployment/deployPoE_v2-0.js | 31 ++++-- hardhat.config.js | 124 ++++++++++++--------- package.json | 2 +- 5 files changed, 153 insertions(+), 187 deletions(-) diff --git a/contracts/verifiers/Verifier.sol b/contracts/verifiers/Verifier.sol index dadd4c5a0..014be102f 100644 --- a/contracts/verifiers/Verifier.sol +++ b/contracts/verifiers/Verifier.sol @@ -12,7 +12,6 @@ // // SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.6.11; - library Pairing { struct G1Point { uint X; @@ -23,28 +22,21 @@ library Pairing { uint[2] X; uint[2] Y; } - /// @return the generator of G1 function P1() internal pure returns (G1Point memory) { return G1Point(1, 2); } - /// @return the generator of G2 function P2() internal pure returns (G2Point memory) { // Original code point - return - G2Point( - [ - 11559732032986387107991004021392285783925812861821192530917403151452391805634, - 10857046999023057135944570762232829481370756359578518086990519993285655852781 - ], - [ - 4082367875863433681332203403145435568316851327593401208105741076214120093531, - 8495653923123431417604973247489272438418190587263600148770280649306958101930 - ] - ); + return G2Point( + [11559732032986387107991004021392285783925812861821192530917403151452391805634, + 10857046999023057135944570762232829481370756359578518086990519993285655852781], + [4082367875863433681332203403145435568316851327593401208105741076214120093531, + 8495653923123431417604973247489272438418190587263600148770280649306958101930] + ); - /* +/* // Changed by Jordi point return G2Point( [10857046999023057135944570762232829481370756359578518086990519993285655852781, @@ -54,20 +46,16 @@ library Pairing { ); */ } - /// @return r the negation of p, i.e. p.addition(p.negate()) should be zero. function negate(G1Point memory p) internal pure returns (G1Point memory r) { // The prime q in the base field F_q for G1 uint q = 21888242871839275222246405745257275088696311157297823662689037894645226208583; - if (p.X == 0 && p.Y == 0) return G1Point(0, 0); + if (p.X == 0 && p.Y == 0) + return G1Point(0, 0); return G1Point(p.X, q - (p.Y % q)); } - /// @return r the sum of two points of G1 - function addition( - G1Point memory p1, - G1Point memory p2 - ) internal view returns (G1Point memory r) { + function addition(G1Point memory p1, G1Point memory p2) internal view returns (G1Point memory r) { uint[4] memory input; input[0] = p1.X; input[1] = p1.Y; @@ -78,20 +66,13 @@ library Pairing { assembly { success := staticcall(sub(gas(), 2000), 6, input, 0xc0, r, 0x60) // Use "invalid" to make gas estimation work - switch success - case 0 { - invalid() - } + switch success case 0 { invalid() } } - require(success, "pairing-add-failed"); + require(success,"pairing-add-failed"); } - /// @return r the product of a point on G1 and a scalar, i.e. /// p == p.scalar_mul(1) and p.addition(p) == p.scalar_mul(2) for all points p. - function scalar_mul( - G1Point memory p, - uint s - ) internal view returns (G1Point memory r) { + function scalar_mul(G1Point memory p, uint s) internal view returns (G1Point memory r) { uint[3] memory input; input[0] = p.X; input[1] = p.Y; @@ -101,27 +82,21 @@ library Pairing { assembly { success := staticcall(sub(gas(), 2000), 7, input, 0x80, r, 0x60) // Use "invalid" to make gas estimation work - switch success - case 0 { - invalid() - } + switch success case 0 { invalid() } } - require(success, "pairing-mul-failed"); + require (success,"pairing-mul-failed"); } - /// @return the result of computing the pairing check /// e(p1[0], p2[0]) * .... * e(p1[n], p2[n]) == 1 /// For example pairing([P1(), P1().negate()], [P2(), P2()]) should /// return true. - function pairing( - G1Point[] memory p1, - G2Point[] memory p2 - ) internal view returns (bool) { - require(p1.length == p2.length, "pairing-lengths-failed"); + function pairing(G1Point[] memory p1, G2Point[] memory p2) internal view returns (bool) { + require(p1.length == p2.length,"pairing-lengths-failed"); uint elements = p1.length; uint inputSize = elements * 6; uint[] memory input = new uint[](inputSize); - for (uint i = 0; i < elements; i++) { + for (uint i = 0; i < elements; i++) + { input[i * 6 + 0] = p1[i].X; input[i * 6 + 1] = p1[i].Y; input[i * 6 + 2] = p2[i].X[0]; @@ -133,31 +108,15 @@ library Pairing { bool success; // solium-disable-next-line security/no-inline-assembly assembly { - success := staticcall( - sub(gas(), 2000), - 8, - add(input, 0x20), - mul(inputSize, 0x20), - out, - 0x20 - ) + success := staticcall(sub(gas(), 2000), 8, add(input, 0x20), mul(inputSize, 0x20), out, 0x20) // Use "invalid" to make gas estimation work - switch success - case 0 { - invalid() - } + switch success case 0 { invalid() } } - require(success, "pairing-opcode-failed"); + require(success,"pairing-opcode-failed"); return out[0] != 0; } - /// Convenience method for a pairing check for two pairs. - function pairingProd2( - G1Point memory a1, - G2Point memory a2, - G1Point memory b1, - G2Point memory b2 - ) internal view returns (bool) { + function pairingProd2(G1Point memory a1, G2Point memory a2, G1Point memory b1, G2Point memory b2) internal view returns (bool) { G1Point[] memory p1 = new G1Point[](2); G2Point[] memory p2 = new G2Point[](2); p1[0] = a1; @@ -166,15 +125,11 @@ library Pairing { p2[1] = b2; return pairing(p1, p2); } - /// Convenience method for a pairing check for three pairs. function pairingProd3( - G1Point memory a1, - G2Point memory a2, - G1Point memory b1, - G2Point memory b2, - G1Point memory c1, - G2Point memory c2 + G1Point memory a1, G2Point memory a2, + G1Point memory b1, G2Point memory b2, + G1Point memory c1, G2Point memory c2 ) internal view returns (bool) { G1Point[] memory p1 = new G1Point[](3); G2Point[] memory p2 = new G2Point[](3); @@ -186,17 +141,12 @@ library Pairing { p2[2] = c2; return pairing(p1, p2); } - /// Convenience method for a pairing check for four pairs. function pairingProd4( - G1Point memory a1, - G2Point memory a2, - G1Point memory b1, - G2Point memory b2, - G1Point memory c1, - G2Point memory c2, - G1Point memory d1, - G2Point memory d2 + G1Point memory a1, G2Point memory a2, + G1Point memory b1, G2Point memory b2, + G1Point memory c1, G2Point memory c2, + G1Point memory d1, G2Point memory d2 ) internal view returns (bool) { G1Point[] memory p1 = new G1Point[](4); G2Point[] memory p2 = new G2Point[](4); @@ -211,7 +161,6 @@ library Pairing { return pairing(p1, p2); } } - contract Verifier { using Pairing for *; struct VerifyingKey { @@ -226,7 +175,6 @@ contract Verifier { Pairing.G2Point B; Pairing.G1Point C; } - function verifyingKey() internal pure returns (VerifyingKey memory vk) { vk.alfa1 = Pairing.G1Point( 20491192805390485299153009773594534940189261866228447918068658471970481763042, @@ -234,24 +182,16 @@ contract Verifier { ); vk.beta2 = Pairing.G2Point( - [ - 4252822878758300859123897981450591353533073413197771768651442665752259397132, - 6375614351688725206403948262868962793625744043794305715222011528459656738731 - ], - [ - 21847035105528745403288232691147584728191162732299865338377159692350059136679, - 10505242626370262277552901082094356697409835680220590971873171140371331206856 - ] + [4252822878758300859123897981450591353533073413197771768651442665752259397132, + 6375614351688725206403948262868962793625744043794305715222011528459656738731], + [21847035105528745403288232691147584728191162732299865338377159692350059136679, + 10505242626370262277552901082094356697409835680220590971873171140371331206856] ); vk.gamma2 = Pairing.G2Point( - [ - 11559732032986387107991004021392285783925812861821192530917403151452391805634, - 10857046999023057135944570762232829481370756359578518086990519993285655852781 - ], - [ - 4082367875863433681332203403145435568316851327593401208105741076214120093531, - 8495653923123431417604973247489272438418190587263600148770280649306958101930 - ] + [11559732032986387107991004021392285783925812861821192530917403151452391805634, + 10857046999023057135944570762232829481370756359578518086990519993285655852781], + [4082367875863433681332203403145435568316851327593401208105741076214120093531, + 8495653923123431417604973247489272438418190587263600148770280649306958101930] ); vk.delta2 = Pairing.G2Point( [ @@ -282,48 +222,35 @@ contract Verifier { ) internal view returns (uint) { uint256 snark_scalar_field = 21888242871839275222246405745257275088548364400416034343698204186575808495617; VerifyingKey memory vk = verifyingKey(); - require(input.length + 1 == vk.IC.length, "verifier-bad-input"); + require(input.length + 1 == vk.IC.length,"verifier-bad-input"); // Compute the linear combination vk_x Pairing.G1Point memory vk_x = Pairing.G1Point(0, 0); for (uint i = 0; i < input.length; i++) { - require( - input[i] < snark_scalar_field, - "verifier-gte-snark-scalar-field" - ); - vk_x = Pairing.addition( - vk_x, - Pairing.scalar_mul(vk.IC[i + 1], input[i]) - ); + require(input[i] < snark_scalar_field,"verifier-gte-snark-scalar-field"); + vk_x = Pairing.addition(vk_x, Pairing.scalar_mul(vk.IC[i + 1], input[i])); } vk_x = Pairing.addition(vk_x, vk.IC[0]); - if ( - !Pairing.pairingProd4( - Pairing.negate(proof.A), - proof.B, - vk.alfa1, - vk.beta2, - vk_x, - vk.gamma2, - proof.C, - vk.delta2 - ) - ) return 1; + if (!Pairing.pairingProd4( + Pairing.negate(proof.A), proof.B, + vk.alfa1, vk.beta2, + vk_x, vk.gamma2, + proof.C, vk.delta2 + )) return 1; return 0; } - /// @return r bool true if proof is valid function verifyProof( - uint[2] memory a, - uint[2][2] memory b, - uint[2] memory c, - uint[1] memory input - ) public view returns (bool r) { + uint[2] memory a, + uint[2][2] memory b, + uint[2] memory c, + uint[1] memory input + ) public view returns (bool r) { Proof memory proof; proof.A = Pairing.G1Point(a[0], a[1]); proof.B = Pairing.G2Point([b[0][0], b[0][1]], [b[1][0], b[1][1]]); proof.C = Pairing.G1Point(c[0], c[1]); uint[] memory inputValues = new uint[](input.length); - for (uint i = 0; i < input.length; i++) { + for(uint i = 0; i < input.length; i++){ inputValues[i] = input[i]; } if (verify(inputValues, proof) == 0) { @@ -332,4 +259,4 @@ contract Verifier { return false; } } -} +} \ No newline at end of file diff --git a/deployment/README.md b/deployment/README.md index c3fd1b04c..cc5439178 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -23,6 +23,8 @@ Fill created `deploy_parameters.json` with appropiate parameters. To deploy contracts run `npm run deploy:PoE2_0:${network}`, for example: +> set `runs` parameter from the compiler settings in `hardhat.config.js` (i.e. `runs: 500`) + ``` npm run deploy:PoE2_0:goerli ``` diff --git a/deployment/deployPoE_v2-0.js b/deployment/deployPoE_v2-0.js index dedc584e7..3b8eb3c46 100644 --- a/deployment/deployPoE_v2-0.js +++ b/deployment/deployPoE_v2-0.js @@ -22,7 +22,7 @@ async function main() { const pendingStateTimeout = deployParameters.pendingStateTimeout || (60 * 60 * 24 * 7 - 1); const trustedAggregatorTimeout = deployParameters.trustedAggregatorTimeout || (60 * 60 * 24 * 7 - 1); - const atemptsDeployProxy = 20; + const attemptsDeployProxy = 20; let currentProvider = ethers.provider; if (deployParameters.multiplierGas || deployParameters.maxFeePerGas) { @@ -102,13 +102,18 @@ async function main() { // deploy global exit root manager const globalExitRootManagerFactory = await ethers.getContractFactory('GlobalExitRootManager', deployer); let globalExitRootManager; - for (let i = 0; i < atemptsDeployProxy; i++) { + for (let i = 0; i < attemptsDeployProxy; i++) { try { globalExitRootManager = await upgrades.deployProxy(globalExitRootManagerFactory, [], { initializer: false }); break; } catch (error) { console.log(`attempt ${i}`); - console.log('upgrades.deployProxy of globalExitRootManager ', error); + console.log('upgrades.deployProxy of globalExitRootManager ', error.error.reason); + } + + // reach limits of attempts + if (i + 1 === attemptsDeployProxy) { + throw new Error('GlobalExitRootManager contract has not been deployed'); } } @@ -124,13 +129,18 @@ async function main() { } let bridgeContract; - for (let i = 0; i < atemptsDeployProxy; i++) { + for (let i = 0; i < attemptsDeployProxy; i++) { try { bridgeContract = await upgrades.deployProxy(bridgeFactory, [], { initializer: false }); break; } catch (error) { console.log(`attempt ${i}`); - console.log('upgrades.deployProxy of bridgeContract ', error); + console.log('upgrades.deployProxy of bridgeContract ', error.error.reason); + } + + // reach limits of attempts + if (i + 1 === attemptsDeployProxy) { + throw new Error('Bridge contract has not been deployed'); } } @@ -140,13 +150,18 @@ async function main() { // deploy PoE const ProofOfEfficiencyFactory = await ethers.getContractFactory('ProofOfEfficiencyMock', deployer); let proofOfEfficiencyContract; - for (let i = 0; i < atemptsDeployProxy; i++) { + for (let i = 0; i < attemptsDeployProxy; i++) { try { proofOfEfficiencyContract = await upgrades.deployProxy(ProofOfEfficiencyFactory, [], { initializer: false }); break; } catch (error) { console.log(`attempt ${i}`); - console.log('upgrades.deployProxy of proofOfEfficiencyContract ', error); + console.log('upgrades.deployProxy of proofOfEfficiencyContract ', error.error.reason); + } + + // reach limits of attempts + if (i + 1 === attemptsDeployProxy) { + throw new Error('ProofOfEfficiency contract has not been deployed'); } } @@ -276,6 +291,8 @@ async function main() { trustedSequencerURL, chainID, networkName, + admin, + trustedAggregator, }; fs.writeFileSync(pathOutputJson, JSON.stringify(outputJson, null, 1)); } diff --git a/hardhat.config.js b/hardhat.config.js index 7457d0317..da861a139 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -1,14 +1,16 @@ -require("dotenv").config(); -require("@nomiclabs/hardhat-waffle"); -require("hardhat-gas-reporter"); -require("solidity-coverage"); -require("@nomiclabs/hardhat-etherscan"); -require("@openzeppelin/hardhat-upgrades"); +require('dotenv').config(); +require('@nomiclabs/hardhat-waffle'); +require('hardhat-gas-reporter'); +require('solidity-coverage'); +require('@nomiclabs/hardhat-etherscan'); +require('@openzeppelin/hardhat-upgrades'); -DEFAULT_MNEMONIC = "test test test test test test test test test test test junk"; +const DEFAULT_MNEMONIC = 'test test test test test test test test test test test junk'; -// You need to export an object to set up your config -// Go to https://hardhat.org/config/ to learn more +/* + * You need to export an object to set up your config + * Go to https://hardhat.org/config/ to learn more + */ /** * @type import('hardhat/config').HardhatUserConfig @@ -73,50 +75,68 @@ module.exports = { count: 20, }, }, - goerli: { - url: `https://goerli.infura.io/v3/${process.env.INFURA_PROJECT_ID}`, - accounts: { - mnemonic: process.env.MNEMONIC || DEFAULT_MNEMONIC, - path: "m/44'/60'/0'/0", - initialIndex: 0, - count: 20, - }, + networks: { + mainnet: { + url: `https://mainnet.infura.io/v3/${process.env.INFURA_PROJECT_ID}`, + accounts: { + mnemonic: process.env.MNEMONIC || DEFAULT_MNEMONIC, + path: "m/44'/60'/0'/0", + initialIndex: 0, + count: 20, + }, + }, + ropsten: { + url: `https://ropsten.infura.io/v3/${process.env.INFURA_PROJECT_ID}`, + accounts: { + mnemonic: process.env.MNEMONIC || DEFAULT_MNEMONIC, + path: "m/44'/60'/0'/0", + initialIndex: 0, + count: 20, + }, + }, + goerli: { + url: `https://goerli.infura.io/v3/${process.env.INFURA_PROJECT_ID}`, + accounts: { + mnemonic: process.env.MNEMONIC || DEFAULT_MNEMONIC, + path: "m/44'/60'/0'/0", + initialIndex: 0, + count: 20, + }, + }, + rinkeby: { + url: `https://rinkeby.infura.io/v3/${process.env.INFURA_PROJECT_ID}`, + accounts: { + mnemonic: process.env.MNEMONIC || DEFAULT_MNEMONIC, + path: "m/44'/60'/0'/0", + initialIndex: 0, + count: 20, + }, + }, + localhost: { + url: 'http://127.0.0.1:8545', + accounts: { + mnemonic: process.env.MNEMONIC || DEFAULT_MNEMONIC, + path: "m/44'/60'/0'/0", + initialIndex: 0, + count: 20, + }, + }, + hardhat: { + initialDate: '0', + accounts: { + mnemonic: process.env.MNEMONIC || DEFAULT_MNEMONIC, + path: "m/44'/60'/0'/0", + initialIndex: 0, + count: 20, + }, + }, }, - rinkeby: { - url: `https://rinkeby.infura.io/v3/${process.env.INFURA_PROJECT_ID}`, - accounts: { - mnemonic: process.env.MNEMONIC || DEFAULT_MNEMONIC, - path: "m/44'/60'/0'/0", - initialIndex: 0, - count: 20, - }, + gasReporter: { + currency: 'USD', + coinmarketcap: process.env.COINMARKETCAP_KEY, + enabled: !!process.env.REPORT_GAS, }, - localhost: { - url: "http://127.0.0.1:8545", - accounts: { - mnemonic: process.env.MNEMONIC || DEFAULT_MNEMONIC, - path: "m/44'/60'/0'/0", - initialIndex: 0, - count: 20, - }, - }, - hardhat: { - initialDate: "0", - accounts: { - mnemonic: process.env.MNEMONIC || DEFAULT_MNEMONIC, - path: "m/44'/60'/0'/0", - initialIndex: 0, - count: 20, - }, + etherscan: { + apiKey: `${process.env.ETHERSCAN_API_KEY}`, }, - }, - gasReporter: { - currency: "USD", - coinmarketcap: process.env.COINMARKETCAP_KEY, - enabled: process.env.REPORT_GAS ? true : false, - }, - etherscan: { - apiKey: `${process.env.ETHERSCAN_API_KEY}` - } }; - diff --git a/package.json b/package.json index 88f0aaf31..9c0de62a2 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "homepage": "https://github.com/0xPolygonHermez/contracts-zkEVM#readme", "license": "pending", "dependencies": { - "@0xpolygonhermez/zkevm-commonjs": "github:0xPolygonHermez/zkevm-commonjs#v0.5.0.1", + "@0xpolygonhermez/zkevm-commonjs": "github:0xPolygonHermez/zkevm-commonjs#v0.6.0.0-rc.1", "@nomiclabs/hardhat-ethers": "^2.0.2", "@nomiclabs/hardhat-etherscan": "^3.1.0", "@nomiclabs/hardhat-waffle": "^2.0.3", From 6e9a532ed79cfdab0d583302a1f2402aa1684d5c Mon Sep 17 00:00:00 2001 From: invocamanman Date: Mon, 19 Dec 2022 15:58:39 +0100 Subject: [PATCH 46/71] rebase fixes --- .../VerifierRollupHelperMock.json | 4 +- contracts/verifiers/Verifier.sol | 181 ++++++++++++------ deployment/README.md | 4 +- hardhat.config.js | 125 ++++++------ 4 files changed, 194 insertions(+), 120 deletions(-) diff --git a/compiled-contracts/VerifierRollupHelperMock.json b/compiled-contracts/VerifierRollupHelperMock.json index 26f830ec9..130b9690a 100644 --- a/compiled-contracts/VerifierRollupHelperMock.json +++ b/compiled-contracts/VerifierRollupHelperMock.json @@ -38,8 +38,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50610101806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c806343753b4d14602d575b600080fd5b60426038366004606c565b6001949350505050565b604051901515815260200160405180910390f35b8060408101831015606657600080fd5b92915050565b600080600080610120808688031215608357600080fd5b608b87876056565b945060c0860187811115609d57600080fd5b60408701945060ab88826056565b93505086818701111560bc57600080fd5b5092959194509261010001915056fea2646970667358221220563663b9c79c384b2428d1e041a468d42ddcac4e9cb78e1148c81eca7985714764736f6c634300080f0033", - "deployedBytecode": "0x6080604052348015600f57600080fd5b506004361060285760003560e01c806343753b4d14602d575b600080fd5b60426038366004606c565b6001949350505050565b604051901515815260200160405180910390f35b8060408101831015606657600080fd5b92915050565b600080600080610120808688031215608357600080fd5b608b87876056565b945060c0860187811115609d57600080fd5b60408701945060ab88826056565b93505086818701111560bc57600080fd5b5092959194509261010001915056fea2646970667358221220563663b9c79c384b2428d1e041a468d42ddcac4e9cb78e1148c81eca7985714764736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50610101806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c806343753b4d14602d575b600080fd5b60426038366004606c565b6001949350505050565b604051901515815260200160405180910390f35b8060408101831015606657600080fd5b92915050565b600080600080610120808688031215608357600080fd5b608b87876056565b945060c0860187811115609d57600080fd5b60408701945060ab88826056565b93505086818701111560bc57600080fd5b5092959194509261010001915056fea264697066735822122052ed4fd6cd8d643eefd57803d04ccd0e2e0a6209cde6c3bda6e1e8d21e2b908f64736f6c634300080f0033", + "deployedBytecode": "0x6080604052348015600f57600080fd5b506004361060285760003560e01c806343753b4d14602d575b600080fd5b60426038366004606c565b6001949350505050565b604051901515815260200160405180910390f35b8060408101831015606657600080fd5b92915050565b600080600080610120808688031215608357600080fd5b608b87876056565b945060c0860187811115609d57600080fd5b60408701945060ab88826056565b93505086818701111560bc57600080fd5b5092959194509261010001915056fea264697066735822122052ed4fd6cd8d643eefd57803d04ccd0e2e0a6209cde6c3bda6e1e8d21e2b908f64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/verifiers/Verifier.sol b/contracts/verifiers/Verifier.sol index 014be102f..dadd4c5a0 100644 --- a/contracts/verifiers/Verifier.sol +++ b/contracts/verifiers/Verifier.sol @@ -12,6 +12,7 @@ // // SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.6.11; + library Pairing { struct G1Point { uint X; @@ -22,21 +23,28 @@ library Pairing { uint[2] X; uint[2] Y; } + /// @return the generator of G1 function P1() internal pure returns (G1Point memory) { return G1Point(1, 2); } + /// @return the generator of G2 function P2() internal pure returns (G2Point memory) { // Original code point - return G2Point( - [11559732032986387107991004021392285783925812861821192530917403151452391805634, - 10857046999023057135944570762232829481370756359578518086990519993285655852781], - [4082367875863433681332203403145435568316851327593401208105741076214120093531, - 8495653923123431417604973247489272438418190587263600148770280649306958101930] - ); + return + G2Point( + [ + 11559732032986387107991004021392285783925812861821192530917403151452391805634, + 10857046999023057135944570762232829481370756359578518086990519993285655852781 + ], + [ + 4082367875863433681332203403145435568316851327593401208105741076214120093531, + 8495653923123431417604973247489272438418190587263600148770280649306958101930 + ] + ); -/* + /* // Changed by Jordi point return G2Point( [10857046999023057135944570762232829481370756359578518086990519993285655852781, @@ -46,16 +54,20 @@ library Pairing { ); */ } + /// @return r the negation of p, i.e. p.addition(p.negate()) should be zero. function negate(G1Point memory p) internal pure returns (G1Point memory r) { // The prime q in the base field F_q for G1 uint q = 21888242871839275222246405745257275088696311157297823662689037894645226208583; - if (p.X == 0 && p.Y == 0) - return G1Point(0, 0); + if (p.X == 0 && p.Y == 0) return G1Point(0, 0); return G1Point(p.X, q - (p.Y % q)); } + /// @return r the sum of two points of G1 - function addition(G1Point memory p1, G1Point memory p2) internal view returns (G1Point memory r) { + function addition( + G1Point memory p1, + G1Point memory p2 + ) internal view returns (G1Point memory r) { uint[4] memory input; input[0] = p1.X; input[1] = p1.Y; @@ -66,13 +78,20 @@ library Pairing { assembly { success := staticcall(sub(gas(), 2000), 6, input, 0xc0, r, 0x60) // Use "invalid" to make gas estimation work - switch success case 0 { invalid() } + switch success + case 0 { + invalid() + } } - require(success,"pairing-add-failed"); + require(success, "pairing-add-failed"); } + /// @return r the product of a point on G1 and a scalar, i.e. /// p == p.scalar_mul(1) and p.addition(p) == p.scalar_mul(2) for all points p. - function scalar_mul(G1Point memory p, uint s) internal view returns (G1Point memory r) { + function scalar_mul( + G1Point memory p, + uint s + ) internal view returns (G1Point memory r) { uint[3] memory input; input[0] = p.X; input[1] = p.Y; @@ -82,21 +101,27 @@ library Pairing { assembly { success := staticcall(sub(gas(), 2000), 7, input, 0x80, r, 0x60) // Use "invalid" to make gas estimation work - switch success case 0 { invalid() } + switch success + case 0 { + invalid() + } } - require (success,"pairing-mul-failed"); + require(success, "pairing-mul-failed"); } + /// @return the result of computing the pairing check /// e(p1[0], p2[0]) * .... * e(p1[n], p2[n]) == 1 /// For example pairing([P1(), P1().negate()], [P2(), P2()]) should /// return true. - function pairing(G1Point[] memory p1, G2Point[] memory p2) internal view returns (bool) { - require(p1.length == p2.length,"pairing-lengths-failed"); + function pairing( + G1Point[] memory p1, + G2Point[] memory p2 + ) internal view returns (bool) { + require(p1.length == p2.length, "pairing-lengths-failed"); uint elements = p1.length; uint inputSize = elements * 6; uint[] memory input = new uint[](inputSize); - for (uint i = 0; i < elements; i++) - { + for (uint i = 0; i < elements; i++) { input[i * 6 + 0] = p1[i].X; input[i * 6 + 1] = p1[i].Y; input[i * 6 + 2] = p2[i].X[0]; @@ -108,15 +133,31 @@ library Pairing { bool success; // solium-disable-next-line security/no-inline-assembly assembly { - success := staticcall(sub(gas(), 2000), 8, add(input, 0x20), mul(inputSize, 0x20), out, 0x20) + success := staticcall( + sub(gas(), 2000), + 8, + add(input, 0x20), + mul(inputSize, 0x20), + out, + 0x20 + ) // Use "invalid" to make gas estimation work - switch success case 0 { invalid() } + switch success + case 0 { + invalid() + } } - require(success,"pairing-opcode-failed"); + require(success, "pairing-opcode-failed"); return out[0] != 0; } + /// Convenience method for a pairing check for two pairs. - function pairingProd2(G1Point memory a1, G2Point memory a2, G1Point memory b1, G2Point memory b2) internal view returns (bool) { + function pairingProd2( + G1Point memory a1, + G2Point memory a2, + G1Point memory b1, + G2Point memory b2 + ) internal view returns (bool) { G1Point[] memory p1 = new G1Point[](2); G2Point[] memory p2 = new G2Point[](2); p1[0] = a1; @@ -125,11 +166,15 @@ library Pairing { p2[1] = b2; return pairing(p1, p2); } + /// Convenience method for a pairing check for three pairs. function pairingProd3( - G1Point memory a1, G2Point memory a2, - G1Point memory b1, G2Point memory b2, - G1Point memory c1, G2Point memory c2 + G1Point memory a1, + G2Point memory a2, + G1Point memory b1, + G2Point memory b2, + G1Point memory c1, + G2Point memory c2 ) internal view returns (bool) { G1Point[] memory p1 = new G1Point[](3); G2Point[] memory p2 = new G2Point[](3); @@ -141,12 +186,17 @@ library Pairing { p2[2] = c2; return pairing(p1, p2); } + /// Convenience method for a pairing check for four pairs. function pairingProd4( - G1Point memory a1, G2Point memory a2, - G1Point memory b1, G2Point memory b2, - G1Point memory c1, G2Point memory c2, - G1Point memory d1, G2Point memory d2 + G1Point memory a1, + G2Point memory a2, + G1Point memory b1, + G2Point memory b2, + G1Point memory c1, + G2Point memory c2, + G1Point memory d1, + G2Point memory d2 ) internal view returns (bool) { G1Point[] memory p1 = new G1Point[](4); G2Point[] memory p2 = new G2Point[](4); @@ -161,6 +211,7 @@ library Pairing { return pairing(p1, p2); } } + contract Verifier { using Pairing for *; struct VerifyingKey { @@ -175,6 +226,7 @@ contract Verifier { Pairing.G2Point B; Pairing.G1Point C; } + function verifyingKey() internal pure returns (VerifyingKey memory vk) { vk.alfa1 = Pairing.G1Point( 20491192805390485299153009773594534940189261866228447918068658471970481763042, @@ -182,16 +234,24 @@ contract Verifier { ); vk.beta2 = Pairing.G2Point( - [4252822878758300859123897981450591353533073413197771768651442665752259397132, - 6375614351688725206403948262868962793625744043794305715222011528459656738731], - [21847035105528745403288232691147584728191162732299865338377159692350059136679, - 10505242626370262277552901082094356697409835680220590971873171140371331206856] + [ + 4252822878758300859123897981450591353533073413197771768651442665752259397132, + 6375614351688725206403948262868962793625744043794305715222011528459656738731 + ], + [ + 21847035105528745403288232691147584728191162732299865338377159692350059136679, + 10505242626370262277552901082094356697409835680220590971873171140371331206856 + ] ); vk.gamma2 = Pairing.G2Point( - [11559732032986387107991004021392285783925812861821192530917403151452391805634, - 10857046999023057135944570762232829481370756359578518086990519993285655852781], - [4082367875863433681332203403145435568316851327593401208105741076214120093531, - 8495653923123431417604973247489272438418190587263600148770280649306958101930] + [ + 11559732032986387107991004021392285783925812861821192530917403151452391805634, + 10857046999023057135944570762232829481370756359578518086990519993285655852781 + ], + [ + 4082367875863433681332203403145435568316851327593401208105741076214120093531, + 8495653923123431417604973247489272438418190587263600148770280649306958101930 + ] ); vk.delta2 = Pairing.G2Point( [ @@ -222,35 +282,48 @@ contract Verifier { ) internal view returns (uint) { uint256 snark_scalar_field = 21888242871839275222246405745257275088548364400416034343698204186575808495617; VerifyingKey memory vk = verifyingKey(); - require(input.length + 1 == vk.IC.length,"verifier-bad-input"); + require(input.length + 1 == vk.IC.length, "verifier-bad-input"); // Compute the linear combination vk_x Pairing.G1Point memory vk_x = Pairing.G1Point(0, 0); for (uint i = 0; i < input.length; i++) { - require(input[i] < snark_scalar_field,"verifier-gte-snark-scalar-field"); - vk_x = Pairing.addition(vk_x, Pairing.scalar_mul(vk.IC[i + 1], input[i])); + require( + input[i] < snark_scalar_field, + "verifier-gte-snark-scalar-field" + ); + vk_x = Pairing.addition( + vk_x, + Pairing.scalar_mul(vk.IC[i + 1], input[i]) + ); } vk_x = Pairing.addition(vk_x, vk.IC[0]); - if (!Pairing.pairingProd4( - Pairing.negate(proof.A), proof.B, - vk.alfa1, vk.beta2, - vk_x, vk.gamma2, - proof.C, vk.delta2 - )) return 1; + if ( + !Pairing.pairingProd4( + Pairing.negate(proof.A), + proof.B, + vk.alfa1, + vk.beta2, + vk_x, + vk.gamma2, + proof.C, + vk.delta2 + ) + ) return 1; return 0; } + /// @return r bool true if proof is valid function verifyProof( - uint[2] memory a, - uint[2][2] memory b, - uint[2] memory c, - uint[1] memory input - ) public view returns (bool r) { + uint[2] memory a, + uint[2][2] memory b, + uint[2] memory c, + uint[1] memory input + ) public view returns (bool r) { Proof memory proof; proof.A = Pairing.G1Point(a[0], a[1]); proof.B = Pairing.G2Point([b[0][0], b[0][1]], [b[1][0], b[1][1]]); proof.C = Pairing.G1Point(c[0], c[1]); uint[] memory inputValues = new uint[](input.length); - for(uint i = 0; i < input.length; i++){ + for (uint i = 0; i < input.length; i++) { inputValues[i] = input[i]; } if (verify(inputValues, proof) == 0) { @@ -259,4 +332,4 @@ contract Verifier { return false; } } -} \ No newline at end of file +} diff --git a/deployment/README.md b/deployment/README.md index cc5439178..fe546b7fb 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -23,7 +23,7 @@ Fill created `deploy_parameters.json` with appropiate parameters. To deploy contracts run `npm run deploy:PoE2_0:${network}`, for example: -> set `runs` parameter from the compiler settings in `hardhat.config.js` (i.e. `runs: 500`) +> set `runs` parameter from the compiler settings in `hardhat.config.js` (i.e. `runs: 200`) ``` npm run deploy:PoE2_0:goerli @@ -52,6 +52,8 @@ npm run verify:PoE2_0:goerli - `multiplierGas`: number, Gas multiplier. If maxFeePerGas and maxPriorityFeePerGas are set, will not take effect - `trustedSequencerPvtKey`: string, Trusted sequencer pvtKey in order to approve the matic tokens - `bridgeMock`:Boolean, Wheather the bridge will be mock or not ( the mock version has a ether limitation on deposits) +- `admin`:address, Admin address +- `trustedAggregator`:address, Trusted aggregator address ## Notes diff --git a/hardhat.config.js b/hardhat.config.js index da861a139..8bbfcb54f 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -23,7 +23,7 @@ module.exports = { settings: { optimizer: { enabled: true, - runs: 100 // Should be updated in a real deployment + runs: 200 } } }, @@ -75,68 +75,67 @@ module.exports = { count: 20, }, }, - networks: { - mainnet: { - url: `https://mainnet.infura.io/v3/${process.env.INFURA_PROJECT_ID}`, - accounts: { - mnemonic: process.env.MNEMONIC || DEFAULT_MNEMONIC, - path: "m/44'/60'/0'/0", - initialIndex: 0, - count: 20, - }, - }, - ropsten: { - url: `https://ropsten.infura.io/v3/${process.env.INFURA_PROJECT_ID}`, - accounts: { - mnemonic: process.env.MNEMONIC || DEFAULT_MNEMONIC, - path: "m/44'/60'/0'/0", - initialIndex: 0, - count: 20, - }, - }, - goerli: { - url: `https://goerli.infura.io/v3/${process.env.INFURA_PROJECT_ID}`, - accounts: { - mnemonic: process.env.MNEMONIC || DEFAULT_MNEMONIC, - path: "m/44'/60'/0'/0", - initialIndex: 0, - count: 20, - }, - }, - rinkeby: { - url: `https://rinkeby.infura.io/v3/${process.env.INFURA_PROJECT_ID}`, - accounts: { - mnemonic: process.env.MNEMONIC || DEFAULT_MNEMONIC, - path: "m/44'/60'/0'/0", - initialIndex: 0, - count: 20, - }, - }, - localhost: { - url: 'http://127.0.0.1:8545', - accounts: { - mnemonic: process.env.MNEMONIC || DEFAULT_MNEMONIC, - path: "m/44'/60'/0'/0", - initialIndex: 0, - count: 20, - }, - }, - hardhat: { - initialDate: '0', - accounts: { - mnemonic: process.env.MNEMONIC || DEFAULT_MNEMONIC, - path: "m/44'/60'/0'/0", - initialIndex: 0, - count: 20, - }, - }, + mainnet: { + url: `https://mainnet.infura.io/v3/${process.env.INFURA_PROJECT_ID}`, + accounts: { + mnemonic: process.env.MNEMONIC || DEFAULT_MNEMONIC, + path: "m/44'/60'/0'/0", + initialIndex: 0, + count: 20, + }, }, - gasReporter: { - currency: 'USD', - coinmarketcap: process.env.COINMARKETCAP_KEY, - enabled: !!process.env.REPORT_GAS, + ropsten: { + url: `https://ropsten.infura.io/v3/${process.env.INFURA_PROJECT_ID}`, + accounts: { + mnemonic: process.env.MNEMONIC || DEFAULT_MNEMONIC, + path: "m/44'/60'/0'/0", + initialIndex: 0, + count: 20, + }, }, - etherscan: { - apiKey: `${process.env.ETHERSCAN_API_KEY}`, + goerli: { + url: `https://goerli.infura.io/v3/${process.env.INFURA_PROJECT_ID}`, + accounts: { + mnemonic: process.env.MNEMONIC || DEFAULT_MNEMONIC, + path: "m/44'/60'/0'/0", + initialIndex: 0, + count: 20, + }, }, -}; + rinkeby: { + url: `https://rinkeby.infura.io/v3/${process.env.INFURA_PROJECT_ID}`, + accounts: { + mnemonic: process.env.MNEMONIC || DEFAULT_MNEMONIC, + path: "m/44'/60'/0'/0", + initialIndex: 0, + count: 20, + }, + }, + localhost: { + url: 'http://127.0.0.1:8545', + accounts: { + mnemonic: process.env.MNEMONIC || DEFAULT_MNEMONIC, + path: "m/44'/60'/0'/0", + initialIndex: 0, + count: 20, + }, + }, + hardhat: { + initialDate: '0', + accounts: { + mnemonic: process.env.MNEMONIC || DEFAULT_MNEMONIC, + path: "m/44'/60'/0'/0", + initialIndex: 0, + count: 20, + }, + }, + }, + gasReporter: { + currency: 'USD', + coinmarketcap: process.env.COINMARKETCAP_KEY, + enabled: !!process.env.REPORT_GAS, + }, + etherscan: { + apiKey: `${process.env.ETHERSCAN_API_KEY}`, + } +}; \ No newline at end of file From 56f25a90eaf8b7283da79e5faeb95c6107bebcbd Mon Sep 17 00:00:00 2001 From: invocamanman Date: Mon, 19 Dec 2022 18:08:49 +0100 Subject: [PATCH 47/71] bridge udpate --- compiled-contracts/Bridge.json | 52 -------------------------- contracts/Bridge.sol | 11 +----- contracts/mocks/BridgeMock.sol | 3 +- deployment/genesis-gen.json | 2 +- deployment/genesis.json | 8 ++-- docker/scripts/genesis_docker.json | 8 ++-- docker/scripts/genesis_gen_docker.json | 2 +- test/contracts/bridge.test.js | 1 - 8 files changed, 13 insertions(+), 74 deletions(-) diff --git a/compiled-contracts/Bridge.json b/compiled-contracts/Bridge.json index 007b5ffc8..012ea3de9 100644 --- a/compiled-contracts/Bridge.json +++ b/compiled-contracts/Bridge.json @@ -145,25 +145,6 @@ "name": "NewWrappedToken", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, { "inputs": [], "name": "LEAF_TYPE_ASSET", @@ -588,19 +569,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "poeAddress", @@ -653,13 +621,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -679,19 +640,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { diff --git a/contracts/Bridge.sol b/contracts/Bridge.sol index a3cc1015f..313e396d5 100644 --- a/contracts/Bridge.sol +++ b/contracts/Bridge.sol @@ -10,18 +10,12 @@ import "./interfaces/IBridgeMessageReceiver.sol"; import "./interfaces/IBridge.sol"; import "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol"; import "./lib/EmergencyManager.sol"; -import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; /** * Bridge that will be deployed on both networks Ethereum and Polygon zkEVM * Contract responsible to manage the token interactions with other networks */ -contract Bridge is - DepositContract, - EmergencyManager, - IBridge, - OwnableUpgradeable -{ +contract Bridge is DepositContract, EmergencyManager, IBridge { using SafeERC20Upgradeable for IERC20Upgradeable; // Wrapped Token information struct @@ -75,9 +69,6 @@ contract Bridge is networkID = _networkID; globalExitRootManager = _globalExitRootManager; poeAddress = _poeAddress; - - // Initialize OZ contracts - __Ownable_init_unchained(); } modifier onlyProofOfEfficiency() { diff --git a/contracts/mocks/BridgeMock.sol b/contracts/mocks/BridgeMock.sol index 5e9c4764c..a7244bcf0 100644 --- a/contracts/mocks/BridgeMock.sol +++ b/contracts/mocks/BridgeMock.sol @@ -1,12 +1,13 @@ // SPDX-License-Identifier: AGPL-3.0 pragma solidity 0.8.15; import "../Bridge.sol"; +import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; /** * Bridge that will be deployed on both networks Ethereum and Polygon zkEVM * Contract responsible to manage the token interactions with other networks */ -contract BridgeMock is Bridge { +contract BridgeMock is Bridge, OwnableUpgradeable { uint256 public maxEtherBridge; /** diff --git a/deployment/genesis-gen.json b/deployment/genesis-gen.json index e0374775d..250f09233 100644 --- a/deployment/genesis-gen.json +++ b/deployment/genesis-gen.json @@ -6,7 +6,7 @@ { "address": "0x9D98DeAbC42dd696Deb9e40b4f1CAB7dDBF55988", "pvtKey": "0x00", - "balance": "100000000000000000000000", + "balance": "200000000000000000000000000", "nonce": "0" }, { diff --git a/deployment/genesis.json b/deployment/genesis.json index fcc04d5c7..e866de88d 100644 --- a/deployment/genesis.json +++ b/deployment/genesis.json @@ -1,11 +1,11 @@ { - "root": "0x53d8343ab10abc7e2741db8da1c1d92598cd454f719bc2fe75d3c00f84b53ff5", + "root": "0x6cace430a2a3768dd13bf6efdee30fb461667b4bd1fd247d01e3c9a38e49cbf1", "genesis": [ { - "balance": "100000000000000000000000", + "balance": "200000000000000000000000000", "nonce": "1", "address": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988", - "bytecode": "0x608060405260043610620001585760003560e01c80630871e971146200015d57806315064c9614620001765780632072f6c514620001a757806322e95f2c14620001bf5780632dfdf0b514620001fd578063318aee3d14620002245780633ae0504714620002925780633da8168214620002aa5780633e19704314620002cf5780634638554914620002f4578063647c576c1462000319578063715018a6146200033e5780637b6323c1146200035657806381b1c174146200037b5780638da5cb5b14620003b55780638f61151914620003cd5780639e34070f14620003ef578063a08e8a081462000414578063aaa13cc2146200043e578063bab161bf1462000463578063d02103ca1462000498578063d96a15f714620004ba578063dbc1697614620004d1578063ed6be5c914620004e9578063ee25560b1462000500578063f2fde38b1462000531578063ff634ed71462000556575b600080fd5b620001746200016e36600462002529565b6200056d565b005b3480156200018357600080fd5b50602254620001929060ff1681565b60405190151581526020015b60405180910390f35b348015620001b457600080fd5b506200017462000998565b348015620001cc57600080fd5b50620001e4620001de366004620025b5565b620009d1565b6040516001600160a01b0390911681526020016200019e565b3480156200020a57600080fd5b506200021560215481565b6040519081526020016200019e565b3480156200023157600080fd5b506200026d62000243366004620025f1565b608a6020526000908152604090205463ffffffff811690600160201b90046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200019e565b3480156200029f57600080fd5b506200021562000a24565b348015620002b757600080fd5b5062000192620002c9366004620026de565b62000b18565b348015620002dc57600080fd5b5062000215620002ee3660046200275b565b62000c09565b3480156200030157600080fd5b5062000174620003133660046200286b565b62000c96565b3480156200032657600080fd5b50620001746200033836600462002951565b62000e1e565b3480156200034b57600080fd5b506200017462000f8b565b3480156200036357600080fd5b5062000174620003753660046200286b565b62000fa1565b3480156200038857600080fd5b50620001e46200039a366004620029a1565b6089602052600090815260409020546001600160a01b031681565b348015620003c257600080fd5b50620001e46200142b565b348015620003da57600080fd5b50608c54620001e4906001600160a01b031681565b348015620003fc57600080fd5b50620001926200040e366004620029a1565b6200143a565b3480156200042157600080fd5b506200042b600081565b60405160ff90911681526020016200019e565b3480156200044b57600080fd5b50620001e46200045d366004620029bb565b6200147f565b3480156200047057600080fd5b50608754620004829063ffffffff1681565b60405163ffffffff90911681526020016200019e565b348015620004a557600080fd5b50608b54620001e4906001600160a01b031681565b62000174620004cb36600462002a6e565b62001596565b348015620004de57600080fd5b5062000174620016d0565b348015620004f657600080fd5b5062000482600081565b3480156200050d57600080fd5b50620002156200051f366004620029a1565b60886020526000908152604090205481565b3480156200053e57600080fd5b506200017462000550366004620025f1565b62001707565b3480156200056357600080fd5b506200042b600181565b60225460ff16156200059c5760405162461bcd60e51b8152600401620005939062002ad5565b60405180910390fd5b60875463ffffffff90811690861603620005ca5760405162461bcd60e51b8152600401620005939062002b3d565b60008060606001600160a01b0389166200065157853414620006475760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201526e4d415443485f4d53475f56414c554560881b606482015260840162000593565b60009150620008c3565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff81168352600160201b900490921691810182905290156200072057604051632770a7eb60e21b81526001600160a01b038b1690639dc29fac90620006c79033908b9060040162002b87565b6020604051808303816000875af1158015620006e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200070d919062002baf565b50602081015181519094509250620008c1565b84156200073557620007358a88888862001786565b6200074c6001600160a01b038b1633308a62001b8a565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007a3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007cd919081019062002c4a565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200080c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000836919081019062002c4a565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000875573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200089b919062002c82565b604051602001620008af9392919062002cd0565b60405160208183030381529060405291505b505b60008051602062004888833981519152600083858b8b8b87602154604051620008f498979695949392919062002d0d565b60405180910390a16200091f62000919600084868c8c8c888051906020012062000c09565b62001bf7565b608b546001600160a01b03166333d6247d6200093a62000a24565b6040518263ffffffff1660e01b81526004016200095991815260200190565b600060405180830381600087803b1580156200097457600080fd5b505af115801562000989573d6000803e3d6000fd5b50505050505050505050505050565b608c546001600160a01b03163314620009c55760405162461bcd60e51b8152600401620005939062002d7a565b620009cf62001d48565b565b6000608960008484604051602001620009ec92919062002deb565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b0f578260011660010362000a8f576001816020811062000a5b5762000a5b62002e15565b01548460405160200162000a7192919062002e2b565b60405160208183030381529060405280519060200120935062000abd565b838260405160200162000aa492919062002e2b565b6040516020818303038152906040528051906020012093505b62000aca60028462002e65565b9250818260405160200162000ae192919062002e2b565b604051602081830303815290604052805190602001209150808062000b069062002e7c565b91505062000a2f565b50919392505050565b6000846001600160401b038416825b602081101562000bfa578160011660010362000b8c5786818151811062000b525762000b5262002e15565b60200260200101518360405160200162000b6e92919062002e2b565b60405160208183030381529060405280519060200120925062000bd6565b8287828151811062000ba25762000ba262002e15565b602002602001015160405160200162000bbd92919062002e2b565b6040516020818303038152906040528051906020012092505b62000be360028362002e65565b91508062000bf18162002e7c565b91505062000b27565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000cbc5760405162461bcd60e51b8152600401620005939062002ad5565b62000cd28a8a8a8a8a8a8a8a8a8a600162001da6565b62000ce38963ffffffff1662002033565b6000836001600160a01b03168387898560405160240162000d079392919062002e98565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d3e919062002ed3565b60006040518083038185875af1925050503d806000811462000d7d576040519150601f19603f3d011682016040523d82523d6000602084013e62000d82565b606091505b505090508062000de15760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f46416044820152631253115160e21b606482015260840162000593565b600080516020620048a88339815191528a8888878760405162000e0995949392919062002ef1565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000e3f5750600054600160ff909116105b8062000e64575062000e513062002075565b15801562000e64575060005460ff166001145b62000ec95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000593565b6000805460ff19166001179055801562000eed576000805461ff0019166101001790555b6087805463ffffffff861663ffffffff19909116179055608b80546001600160a01b038086166001600160a01b031992831617909255608c80549285169290911691909117905562000f3e62002084565b801562000f85576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000f95620020fc565b620009cf60006200215f565b60225460ff161562000fc75760405162461bcd60e51b8152600401620005939062002ad5565b62000fdd8a8a8a8a8a8a8a8a8a8a600062001da6565b62000fee8963ffffffff1662002033565b6001600160a01b038516620010d757604080516000808252602082019092526001600160a01b03851690849060405162001029919062002ed3565b60006040518083038185875af1925050503d806000811462001068576040519150601f19603f3d011682016040523d82523d6000602084013e6200106d565b606091505b5050905080620010d05760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201526617d1905253115160ca1b606482015260840162000593565b50620013ef565b60875463ffffffff908116908716036200110757620011016001600160a01b0386168484620021b1565b620013ef565b600086866040516020016200111e92919062002deb565b60408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620013745760008060008580602001905181019062001170919062002f28565b9250925092506000858484846040516200118a9062002493565b620011989392919062002cd0565b8190604051809103906000f5905080158015620011b9573d6000803e3d6000fd5b506040516340c10f1960e01b81529091506001600160a01b038216906340c10f1990620011ed908c908c9060040162002b87565b6020604051808303816000875af11580156200120d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001233919062002baf565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013629392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620013ec565b6040516340c10f1960e01b81526001600160a01b038216906340c10f1990620013a4908890889060040162002b87565b6020604051808303816000875af1158015620013c4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013ea919062002baf565b505b50505b600080516020620048a883398151915289878786866040516200141795949392919062002ef1565b60405180910390a150505050505050505050565b6055546001600160a01b031690565b6000806200144b6101008462002e65565b905060006200145d6101008562002f9d565b60009283526088602052604090922054600190921b9182169091149392505050565b60008088886040516020016200149792919062002deb565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014ca9062002493565b601f1982820381018352601f909101166040819052620014f7908d908d908d908d908d9060200162002fdd565b60408051601f19818403018152908290526200151792916020016200301e565b604051602081830303815290604052805190602001206040516020016200157094939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015bc5760405162461bcd60e51b8152600401620005939062002ad5565b60875463ffffffff90811690841603620015ea5760405162461bcd60e51b8152600401620005939062002b3d565b6087546021546040516000805160206200488883398151915292620016269260019263ffffffff9092169133918991899134918a919062002d0d565b60405180910390a16200165d620009196001608760009054906101000a900463ffffffff1633878734888051906020012062000c09565b608b546001600160a01b03166333d6247d6200167862000a24565b6040518263ffffffff1660e01b81526004016200169791815260200190565b600060405180830381600087803b158015620016b257600080fd5b505af1158015620016c7573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b03163314620016fd5760405162461bcd60e51b8152600401620005939062002d7a565b620009cf620021d3565b62001711620020fc565b6001600160a01b038116620017785760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000593565b62001783816200215f565b50565b6000620017c983838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200228092505050565b9050632afa533160e01b6001600160e01b0319821601620019b2576000808080808080620017fb896004818d62003051565b8101906200180a91906200307d565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200184c5760405162461bcd60e51b81526004016200059390620030d8565b6001600160a01b0386163014620018775760405162461bcd60e51b8152600401620005939062003128565b8a8514620018de5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201526c09e8aa6be9c9ea8be9a82a8869609b1b606482015260840162000593565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200195e919062002ed3565b6000604051808303816000865af19150503d80600081146200199d576040519150601f19603f3d011682016040523d82523d6000602084013e620019a2565b606091505b5050505050505050505062001b83565b6001600160e01b031981166323f2ebc360e21b1462001a145760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000593565b60008080808080808062001a2c8a6004818e62003051565b81019062001a3b91906200316d565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001a7f5760405162461bcd60e51b81526004016200059390620030d8565b6001600160a01b038716301462001aaa5760405162461bcd60e51b8152600401620005939062003128565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001b33919062002ed3565b6000604051808303816000865af19150503d806000811462001b72576040519150601f19603f3d011682016040523d82523d6000602084013e62001b77565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000f859085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262002287565b80600162001c0860206002620032f6565b62001c14919062003304565b6021541062001c795760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000593565b60016021600082825462001c8e91906200331e565b909155505060215460005b602081101562001d38578160011660010362001cce57826001826020811062001cc65762001cc662002e15565b015550505050565b6001816020811062001ce45762001ce462002e15565b01548360405160200162001cfa92919062002e2b565b60405160208183030381529060405280519060200120925060028262001d21919062002e65565b91508062001d2f8162002e7c565b91505062001c99565b5062001d4362003339565b505050565b60225460ff161562001d6e5760405162461bcd60e51b8152600401620005939062002ad5565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001db78a63ffffffff166200143a565b1562001e125760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c416044820152631253515160e21b606482015260840162000593565b608b546040516000916001600160a01b03169063257b36329062001e3d908d908d9060200162002e2b565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040162001e7291815260200190565b6020604051808303816000875af115801562001e92573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001eb891906200334f565b90508060000362001f225760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201526c17d493d3d517d2539590531251609a1b606482015260840162000593565b60875463ffffffff87811691161462001f9e5760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e6044820152760be9c8aa8ae9ea496be889e8aa6be9c9ea8be9a82a8869604b1b606482015260840162000593565b60875460009063ffffffff1662001fb757508862001fba565b50895b62001fe562001fd6848b8b8b8b8b8b8051906020012062000c09565b8e8e63ffffffff168462000b18565b620009895760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c4944604482015260640162000593565b6000620020436101008362002e65565b90506000620020556101008462002f9d565b6000928352608860205260409092208054600190931b9092179091555050565b6001600160a01b03163b151590565b600054610100900460ff16620020f15760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000593565b620009cf336200215f565b33620021076200142b565b6001600160a01b031614620009cf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000593565b605580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62001d438363a9059cbb60e01b848460405160240162001bbf92919062002b87565b60225460ff166200224b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527a74653a206f6e6c7920696620656d657267656e637920737461746560281b606482015260840162000593565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b6000620022de826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620023609092919063ffffffff16565b80519091501562001d435780806020019051810190620022ff919062002baf565b62001d435760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000593565b606062000c01848460008585600080866001600160a01b031685876040516200238a919062002ed3565b60006040518083038185875af1925050503d8060008114620023c9576040519150601f19603f3d011682016040523d82523d6000602084013e620023ce565b606091505b5091509150620023e187838387620023ec565b979650505050505050565b606083156200246057825160000362002458576200240a8562002075565b620024585760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000593565b508162000c01565b62000c018383815115620024775781518083602001fd5b8060405162461bcd60e51b815260040162000593919062003369565b611509806200337f83390190565b6001600160a01b03811681146200178357600080fd5b8035620024c481620024a1565b919050565b803563ffffffff81168114620024c457600080fd5b60008083601f840112620024f157600080fd5b5081356001600160401b038111156200250957600080fd5b6020830191508360208285010111156200252257600080fd5b9250929050565b60008060008060008060a087890312156200254357600080fd5b86356200255081620024a1565b95506200256060208801620024c9565b945060408701356200257281620024a1565b93506060870135925060808701356001600160401b038111156200259557600080fd5b620025a389828a01620024de565b979a9699509497509295939492505050565b60008060408385031215620025c957600080fd5b620025d483620024c9565b91506020830135620025e681620024a1565b809150509250929050565b6000602082840312156200260457600080fd5b81356200261181620024a1565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171562002659576200265962002618565b604052919050565b600082601f8301126200267357600080fd5b813560206001600160401b0382111562002691576200269162002618565b8160051b620026a28282016200262e565b9283528481018201928281019087851115620026bd57600080fd5b83870192505b84831015620023e157823582529183019190830190620026c3565b60008060008060808587031215620026f557600080fd5b8435935060208501356001600160401b03808211156200271457600080fd5b620027228883890162002661565b94506040870135915080821682146200273a57600080fd5b509396929550929360600135925050565b60ff811681146200178357600080fd5b600080600080600080600060e0888a0312156200277757600080fd5b873562002784816200274b565b96506200279460208901620024c9565b95506040880135620027a681620024a1565b9450620027b660608901620024c9565b93506080880135620027c881620024a1565b9699959850939692959460a0840135945060c09093013592915050565b60006001600160401b0382111562002801576200280162002618565b50601f01601f191660200190565b600082601f8301126200282157600080fd5b8135620028386200283282620027e5565b6200262e565b8181528460208386010111156200284e57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200288c57600080fd5b8a356001600160401b0380821115620028a457600080fd5b620028b28e838f0162002661565b9b50620028c260208e01620024c9565b9a5060408d0135995060608d01359850620028e060808e01620024c9565b9750620028f060a08e01620024b7565b96506200290060c08e01620024c9565b95506200291060e08e01620024b7565b94506101008d013593506101208d01359150808211156200293057600080fd5b506200293f8d828e016200280f565b9150509295989b9194979a5092959850565b6000806000606084860312156200296757600080fd5b6200297284620024c9565b925060208401356200298481620024a1565b915060408401356200299681620024a1565b809150509250925092565b600060208284031215620029b457600080fd5b5035919050565b600080600080600080600060a0888a031215620029d757600080fd5b620029e288620024c9565b96506020880135620029f481620024a1565b955060408801356001600160401b038082111562002a1157600080fd5b62002a1f8b838c01620024de565b909750955060608a013591508082111562002a3957600080fd5b5062002a488a828b01620024de565b909450925050608088013562002a5e816200274b565b8091505092959891949750929550565b60008060006060848603121562002a8457600080fd5b62002a8f84620024c9565b9250602084013562002aa181620024a1565b915060408401356001600160401b0381111562002abd57600080fd5b62002acb868287016200280f565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b6020808252602a908201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e546040820152692fa122afa4aa29a2a62360b11b606082015260800190565b6001600160a01b03929092168252602082015260400190565b80151581146200178357600080fd5b60006020828403121562002bc257600080fd5b8151620026118162002ba0565b60005b8381101562002bec57818101518382015260200162002bd2565b8381111562000f855750506000910152565b600082601f83011262002c1057600080fd5b815162002c216200283282620027e5565b81815284602083860101111562002c3757600080fd5b62000c0182602083016020870162002bcf565b60006020828403121562002c5d57600080fd5b81516001600160401b0381111562002c7457600080fd5b62000c018482850162002bfe565b60006020828403121562002c9557600080fd5b815162002611816200274b565b6000815180845262002cbc81602086016020860162002bcf565b601f01601f19169290920160200192915050565b60608152600062002ce5606083018662002ca2565b828103602084015262002cf9818662002ca2565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002d618483018762002ca2565b925080851660e085015250509998505050505050505050565b6020808252604b908201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660408201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60608201526a18de4818dbdb9d1c9858dd60aa1b608082015260a00190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b918252602082015260400190565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002e775762002e7762002e39565b500490565b60006001820162002e915762002e9162002e4f565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002eca9083018462002ca2565b95945050505050565b6000825162002ee781846020870162002bcf565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002f3e57600080fd5b83516001600160401b038082111562002f5657600080fd5b62002f648783880162002bfe565b9450602086015191508082111562002f7b57600080fd5b5062002f8a8682870162002bfe565b925050604084015162002996816200274b565b60008262002faf5762002faf62002e39565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002ff360608301878962002fb4565b82810360208401526200300881868862002fb4565b91505060ff831660408301529695505050505050565b600083516200303281846020880162002bcf565b8351908301906200304881836020880162002bcf565b01949350505050565b600080858511156200306257600080fd5b838611156200307057600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200309957600080fd5b8735620030a681620024a1565b96506020880135620030b881620024a1565b955060408801359450606088013593506080880135620027c8816200274b565b60208082526030908201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560408201526f29aa2fa122afaa2422afa9a2a72222a960811b606082015260800190565b60208082526025908201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f42456040820152645f5448495360d81b606082015260800190565b600080600080600080600080610100898b0312156200318b57600080fd5b88356200319881620024a1565b97506020890135620031aa81620024a1565b965060408901359550606089013594506080890135620031ca8162002ba0565b935060a0890135620031dc816200274b565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200323a5781600019048211156200321e576200321e62002e4f565b808516156200322c57918102915b93841c9390800290620031fe565b509250929050565b600082620032535750600162000a1e565b81620032625750600062000a1e565b81600181146200327b57600281146200328657620032a6565b600191505062000a1e565b60ff8411156200329a576200329a62002e4f565b50506001821b62000a1e565b5060208310610133831016604e8410600b8410161715620032cb575081810a62000a1e565b620032d78383620031f9565b8060001904821115620032ee57620032ee62002e4f565b029392505050565b600062002611838362003242565b60008282101562003319576200331962002e4f565b500390565b6000821982111562003334576200333462002e4f565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200336257600080fd5b5051919050565b60208152600062002611602083018462002ca256fe60c06040523480156200001157600080fd5b5060405162001509380380620015098339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161104f620004ba60003960006104150152600081816102a301526103df015261104f6000f3fe608060405234801561001057600080fd5b50600436106101075760003560e01c806306fdde031461010c578063095ea7b31461012a57806318160ddd1461014d57806320606b701461015f57806323b872dd1461017457806330adf81f14610187578063313ce5671461019c5780633644e515146101bb57806339509351146101c357806340c10f19146101d657806370a08231146101e95780637ecebe001461021257806395d89b41146102325780639dc29fac1461023a578063a3c573eb1461024d578063a457c2d714610278578063a9059cbb1461028b578063cd0d00961461029e578063d505accf146102c5578063dd62ed3e146102da578063ffa1ad74146102ed575b600080fd5b61011461030d565b6040516101219190610d55565b60405180910390f35b61013d610138366004610dc6565b61039f565b6040519015158152602001610121565b6002545b604051908152602001610121565b610151600080516020610ffa83398151915281565b61013d610182366004610df0565b6103b7565b610151600080516020610fda83398151915281565b600554600160a01b900460ff1660405160ff9091168152602001610121565b6101516103db565b61013d6101d1366004610dc6565b610437565b61013d6101e4366004610dc6565b610459565b6101516101f7366004610e2c565b6001600160a01b031660009081526020819052604090205490565b610151610220366004610e2c565b60066020526000908152604090205481565b6101146104a2565b61013d610248366004610dc6565b6104b1565b600554610260906001600160a01b031681565b6040516001600160a01b039091168152602001610121565b61013d610286366004610dc6565b6104e8565b61013d610299366004610dc6565b610563565b6101517f000000000000000000000000000000000000000000000000000000000000000081565b6102d86102d3366004610e4e565b610571565b005b6101516102e8366004610ec1565b61079a565b610114604051806040016040528060018152602001603160f81b81525081565b60606003805461031c90610ef4565b80601f016020809104026020016040519081016040528092919081815260200182805461034890610ef4565b80156103955780601f1061036a57610100808354040283529160200191610395565b820191906000526020600020905b81548152906001019060200180831161037857829003601f168201915b5050505050905090565b6000336103ad8185856107c5565b5060019392505050565b6000336103c58582856108ea565b6103d0858585610964565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104125761040d46610af6565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6000336103ad81858561044a838361079a565b6104549190610f44565b6107c5565b6005546000906001600160a01b0316331461048f5760405162461bcd60e51b815260040161048690610f5c565b60405180910390fd5b6104998383610b90565b50600192915050565b60606004805461031c90610ef4565b6005546000906001600160a01b031633146104de5760405162461bcd60e51b815260040161048690610f5c565b6104998383610c3d565b600033816104f6828661079a565b9050838110156105565760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610486565b6103d082868684036107c5565b6000336103ad818585610964565b834211156105cd5760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b6064820152608401610486565b6001600160a01b03871660009081526006602052604081208054600080516020610fda833981519152918a918a918a91908661060883610fa0565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106666103db565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156106f1573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107275750896001600160a01b0316816001600160a01b0316145b6107835760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b6064820152608401610486565b61078e8a8a8a6107c5565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108275760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610486565b6001600160a01b0382166108885760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610486565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006108f6848461079a565b9050600019811461095e57818110156109515760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610486565b61095e84848484036107c5565b50505050565b6001600160a01b0383166109c85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610486565b6001600160a01b038216610a2a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610486565b6001600160a01b03831660009081526020819052604090205481811015610aa25760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610486565b6001600160a01b0384811660008181526020818152604080832087870390559387168083529184902080548701905592518581529092600080516020610fba833981519152910160405180910390a361095e565b6000600080516020610ffa833981519152610b0f61030d565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610be65760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610486565b8060026000828254610bf89190610f44565b90915550506001600160a01b03821660008181526020818152604080832080548601905551848152600080516020610fba833981519152910160405180910390a35050565b6001600160a01b038216610c9d5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610486565b6001600160a01b03821660009081526020819052604090205481811015610d115760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610486565b6001600160a01b038316600081815260208181526040808320868603905560028054879003905551858152919291600080516020610fba83398151915291016108dd565b600060208083528351808285015260005b81811015610d8257858101830151858201604001528201610d66565b81811115610d94576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610dc157600080fd5b919050565b60008060408385031215610dd957600080fd5b610de283610daa565b946020939093013593505050565b600080600060608486031215610e0557600080fd5b610e0e84610daa565b9250610e1c60208501610daa565b9150604084013590509250925092565b600060208284031215610e3e57600080fd5b610e4782610daa565b9392505050565b600080600080600080600060e0888a031215610e6957600080fd5b610e7288610daa565b9650610e8060208901610daa565b95506040880135945060608801359350608088013560ff81168114610ea457600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610ed457600080fd5b610edd83610daa565b9150610eeb60208401610daa565b90509250929050565b600181811c90821680610f0857607f821691505b602082108103610f2857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610f5757610f57610f2e565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b600060018201610fb257610fb2610f2e565b506001019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400fa26469706673582212206aa726514b02f96d0faa290d2747748128c753b26d79c2146367e9390138677f64736f6c634300080f0033501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe27545983a2646970667358221220c9685580e8edc653df46174a4a1c4bbb3b8dffb7544d8889d56e6577d348318c64736f6c634300080f0033", + "bytecode": "0x608060405260043610620001be5760003560e01c806381b1c17411620000ff578063d02103ca1162000095578063ed6be5c9116200006c578063ed6be5c91462000558578063ee25560b146200056f578063f2fde38b14620005a0578063ff634ed714620005c557600080fd5b8063d02103ca1462000507578063d96a15f71462000529578063dbc16976146200054057600080fd5b80639e34070f11620000d65780639e34070f146200045e578063a08e8a081462000483578063aaa13cc214620004ad578063bab161bf14620004d257600080fd5b806381b1c17414620003e25780638da5cb5b146200041c5780638f611519146200043c57600080fd5b80633ae05047116200017557806346385549116200014c57806346385549146200035b578063647c576c1462000380578063715018a614620003a55780637b6323c114620003bd57600080fd5b80633ae0504714620002f95780633da8168214620003115780633e197043146200033657600080fd5b80630871e97114620001c357806315064c9614620001dc5780632072f6c5146200020d57806322e95f2c14620002255780632dfdf0b51462000263578063318aee3d146200028a575b600080fd5b620001da620001d4366004620025cb565b620005dc565b005b348015620001e957600080fd5b50602254620001f89060ff1681565b60405190151581526020015b60405180910390f35b3480156200021a57600080fd5b50620001da62000a17565b3480156200023257600080fd5b506200024a6200024436600462002658565b62000a50565b6040516001600160a01b03909116815260200162000204565b3480156200027057600080fd5b506200027b60215481565b60405190815260200162000204565b3480156200029757600080fd5b50620002d4620002a936600462002694565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000204565b3480156200030657600080fd5b506200027b62000aa3565b3480156200031e57600080fd5b50620001f86200033036600462002783565b62000b96565b3480156200034357600080fd5b506200027b6200035536600462002801565b62000c98565b3480156200036857600080fd5b50620001da6200037a36600462002912565b62000d25565b3480156200038d57600080fd5b50620001da6200039f366004620029f9565b62000ebe565b348015620003b257600080fd5b50620001da62001022565b348015620003ca57600080fd5b50620001da620003dc36600462002912565b62001038565b348015620003ef57600080fd5b506200024a6200040136600462002a49565b6089602052600090815260409020546001600160a01b031681565b3480156200042957600080fd5b506055546001600160a01b03166200024a565b3480156200044957600080fd5b50608c546200024a906001600160a01b031681565b3480156200046b57600080fd5b50620001f86200047d36600462002a49565b620014d4565b3480156200049057600080fd5b506200049a600081565b60405160ff909116815260200162000204565b348015620004ba57600080fd5b506200024a620004cc36600462002a63565b62001519565b348015620004df57600080fd5b50608754620004f19063ffffffff1681565b60405163ffffffff909116815260200162000204565b3480156200051457600080fd5b50608b546200024a906001600160a01b031681565b620001da6200053a36600462002b17565b62001630565b3480156200054d57600080fd5b50620001da6200177b565b3480156200056557600080fd5b50620004f1600081565b3480156200057c57600080fd5b506200027b6200058e36600462002a49565b60886020526000908152604090205481565b348015620005ad57600080fd5b50620001da620005bf36600462002694565b620017b2565b348015620005d257600080fd5b506200049a600181565b60225460ff16156200060b5760405162461bcd60e51b8152600401620006029062002b7f565b60405180910390fd5b60875463ffffffff90811690861603620006395760405162461bcd60e51b8152600401620006029062002be7565b60008060606001600160a01b038916620006c057853414620006b65760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201526e4d415443485f4d53475f56414c554560881b606482015260840162000602565b6000915062000931565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200078e57604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562000755573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200077b919062002c40565b506020810151815190945092506200092f565b8415620007a357620007a38a88888862001831565b620007ba6001600160a01b038b1633308a62001c35565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000811573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200083b919081019062002cdb565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200087a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620008a4919081019062002cdb565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620008e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000909919062002d14565b6040516020016200091d9392919062002d62565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200097398979695949392919062002d9f565b60405180910390a16200099e62000998600084868c8c8c888051906020012062000c98565b62001ca2565b608b546001600160a01b03166333d6247d620009b962000aa3565b6040518263ffffffff1660e01b8152600401620009d891815260200190565b600060405180830381600087803b158015620009f357600080fd5b505af115801562000a08573d6000803e3d6000fd5b50505050505050505050505050565b608c546001600160a01b0316331462000a445760405162461bcd60e51b8152600401620006029062002e0c565b62000a4e62001df3565b565b600060896000848460405160200162000a6b92919062002e7d565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b8d578260011660010362000b0e576001816020811062000ada5762000ada62002ea7565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000b3b565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b4860028462002ee9565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b849062002f00565b91505062000aae565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c89578160011660010362000c135786818151811062000bd15762000bd162002ea7565b60200260200101518360405160200162000bf5929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c65565b8287828151811062000c295762000c2962002ea7565b602002602001015160405160200162000c4c929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c7260028362002ee9565b91508062000c808162002f00565b91505062000ba6565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d4b5760405162461bcd60e51b8152600401620006029062002b7f565b62000d618a8a8a8a8a8a8a8a8a8a600162001e51565b62000d728963ffffffff16620020d8565b6000836001600160a01b03168387898560405160240162000d969392919062002f1c565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000dcd919062002f57565b60006040518083038185875af1925050503d806000811462000e0c576040519150601f19603f3d011682016040523d82523d6000602084013e62000e11565b606091505b505090508062000e705760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f46416044820152631253115160e21b606482015260840162000602565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000ea995949392919062002f75565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000edf5750600054600160ff909116105b8062000efb5750303b15801562000efb575060005460ff166001145b62000f605760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000602565b6000805460ff19166001179055801562000f84576000805461ff0019166101001790555b6087805463ffffffff861663ffffffff19909116179055608b80546001600160a01b038086166001600160a01b031992831617909255608c80549285169290911691909117905562000fd56200211a565b80156200101c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6200102c62002192565b62000a4e6000620021ee565b60225460ff16156200105e5760405162461bcd60e51b8152600401620006029062002b7f565b620010748a8a8a8a8a8a8a8a8a8a600062001e51565b620010858963ffffffff16620020d8565b6001600160a01b0385166200116e57604080516000808252602082019092526001600160a01b038516908490604051620010c0919062002f57565b60006040518083038185875af1925050503d8060008114620010ff576040519150601f19603f3d011682016040523d82523d6000602084013e62001104565b606091505b5050905080620011675760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201526617d1905253115160ca1b606482015260840162000602565b5062001487565b60875463ffffffff908116908716036200119e57620011986001600160a01b038616848462002240565b62001487565b60008686604051602001620011b592919062002e7d565b60408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b0316806200140c5760008060008580602001905181019062001207919062002fac565b925092509250600085848484604051620012219062002534565b6200122f9392919062002d62565b8190604051809103906000f590508015801562001250573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af1158015620012a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012cb919062002c40565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013fa9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001484565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200145c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001482919062002c40565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838987878686604051620014c095949392919062002f75565b60405180910390a150505050505050505050565b600080620014e56101008462002ee9565b90506000620014f76101008562003022565b60009283526088602052604090922054600190921b9182169091149392505050565b60008088886040516020016200153192919062002e7d565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620015649062002534565b601f1982820381018352601f90910116604081905262001591908d908d908d908d908d9060200162003062565b60408051601f1981840301815290829052620015b19291602001620030a3565b604051602081830303815290604052805190602001206040516020016200160a94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620016565760405162461bcd60e51b8152600401620006029062002b7f565b60875463ffffffff90811690841603620016845760405162461bcd60e51b8152600401620006029062002be7565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620016d19260019263ffffffff9092169133918991899134918a919062002d9f565b60405180910390a162001708620009986001608760009054906101000a900463ffffffff1633878734888051906020012062000c98565b608b546001600160a01b03166333d6247d6200172362000aa3565b6040518263ffffffff1660e01b81526004016200174291815260200190565b600060405180830381600087803b1580156200175d57600080fd5b505af115801562001772573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b03163314620017a85760405162461bcd60e51b8152600401620006029062002e0c565b62000a4e62002272565b620017bc62002192565b6001600160a01b038116620018235760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000602565b6200182e81620021ee565b50565b60006200187483838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200232192505050565b9050632afa533160e01b6001600160e01b031982160162001a5d576000808080808080620018a6896004818d620030d6565b810190620018b5919062003102565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018f75760405162461bcd60e51b815260040162000602906200315d565b6001600160a01b0386163014620019225760405162461bcd60e51b81526004016200060290620031ad565b8a8514620019895760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201526c09e8aa6be9c9ea8be9a82a8869609b1b606482015260840162000602565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162001a09919062002f57565b6000604051808303816000865af19150503d806000811462001a48576040519150601f19603f3d011682016040523d82523d6000602084013e62001a4d565b606091505b5050505050505050505062001c2e565b6001600160e01b031981166323f2ebc360e21b1462001abf5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000602565b60008080808080808062001ad78a6004818e620030d6565b81019062001ae69190620031f2565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001b2a5760405162461bcd60e51b815260040162000602906200315d565b6001600160a01b038716301462001b555760405162461bcd60e51b81526004016200060290620031ad565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001bde919062002f57565b6000604051808303816000865af19150503d806000811462001c1d576040519150601f19603f3d011682016040523d82523d6000602084013e62001c22565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526200101c9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262002328565b80600162001cb3602060026200337b565b62001cbf919062003389565b6021541062001d245760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000602565b60016021600082825462001d399190620033a3565b909155505060215460005b602081101562001de3578160011660010362001d7957826001826020811062001d715762001d7162002ea7565b015550505050565b6001816020811062001d8f5762001d8f62002ea7565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001dcc919062002ee9565b91508062001dda8162002f00565b91505062001d44565b5062001dee620033be565b505050565b60225460ff161562001e195760405162461bcd60e51b8152600401620006029062002b7f565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001e628a63ffffffff16620014d4565b1562001ebd5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c416044820152631253515160e21b606482015260840162000602565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001f31573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f579190620033d4565b90508060000362001fc15760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201526c17d493d3d517d2539590531251609a1b606482015260840162000602565b60875463ffffffff878116911614620020435760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d41544348000000000000000000606482015260840162000602565b60875460009063ffffffff166200205c5750886200205f565b50895b6200208a6200207b848b8b8b8b8b8b8051906020012062000c98565b8e8e63ffffffff168462000b96565b62000a085760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c4944604482015260640162000602565b6000620020e86101008362002ee9565b90506000620020fa6101008462003022565b6000928352608860205260409092208054600190931b9092179091555050565b600054610100900460ff16620021875760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000602565b62000a4e33620021ee565b6055546001600160a01b0316331462000a4e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000602565b605580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001dee90849063a9059cbb60e01b9060640162001c6a565b60225460ff16620022ec5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000602565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b60006200237f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620024019092919063ffffffff16565b80519091501562001dee5780806020019051810190620023a0919062002c40565b62001dee5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000602565b606062000c90848460008585600080866001600160a01b031685876040516200242b919062002f57565b60006040518083038185875af1925050503d80600081146200246a576040519150601f19603f3d011682016040523d82523d6000602084013e6200246f565b606091505b509150915062002482878383876200248d565b979650505050505050565b6060831562002501578251600003620024f9576001600160a01b0385163b620024f95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000602565b508162000c90565b62000c908383815115620025185781518083602001fd5b8060405162461bcd60e51b8152600401620006029190620033ee565b611557806200340483390190565b6001600160a01b03811681146200182e57600080fd5b8035620025658162002542565b919050565b803563ffffffff811681146200256557600080fd5b60008083601f8401126200259257600080fd5b50813567ffffffffffffffff811115620025ab57600080fd5b602083019150836020828501011115620025c457600080fd5b9250929050565b60008060008060008060a08789031215620025e557600080fd5b8635620025f28162002542565b955062002602602088016200256a565b94506040870135620026148162002542565b935060608701359250608087013567ffffffffffffffff8111156200263857600080fd5b6200264689828a016200257f565b979a9699509497509295939492505050565b600080604083850312156200266c57600080fd5b62002677836200256a565b91506020830135620026898162002542565b809150509250929050565b600060208284031215620026a757600080fd5b8135620026b48162002542565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620026fd57620026fd620026bb565b604052919050565b600082601f8301126200271757600080fd5b8135602067ffffffffffffffff821115620027365762002736620026bb565b8160051b62002747828201620026d1565b92835284810182019282810190878511156200276257600080fd5b83870192505b84831015620024825782358252918301919083019062002768565b600080600080608085870312156200279a57600080fd5b84359350602085013567ffffffffffffffff80821115620027ba57600080fd5b620027c88883890162002705565b9450604087013591508082168214620027e057600080fd5b509396929550929360600135925050565b60ff811681146200182e57600080fd5b600080600080600080600060e0888a0312156200281d57600080fd5b87356200282a81620027f1565b96506200283a602089016200256a565b955060408801356200284c8162002542565b94506200285c606089016200256a565b935060808801356200286e8162002542565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620028a857620028a8620026bb565b50601f01601f191660200190565b600082601f830112620028c857600080fd5b8135620028df620028d9826200288b565b620026d1565b818152846020838601011115620028f557600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200293357600080fd5b8a3567ffffffffffffffff808211156200294c57600080fd5b6200295a8e838f0162002705565b9b506200296a60208e016200256a565b9a5060408d0135995060608d013598506200298860808e016200256a565b97506200299860a08e0162002558565b9650620029a860c08e016200256a565b9550620029b860e08e0162002558565b94506101008d013593506101208d0135915080821115620029d857600080fd5b50620029e78d828e01620028b6565b9150509295989b9194979a5092959850565b60008060006060848603121562002a0f57600080fd5b62002a1a846200256a565b9250602084013562002a2c8162002542565b9150604084013562002a3e8162002542565b809150509250925092565b60006020828403121562002a5c57600080fd5b5035919050565b600080600080600080600060a0888a03121562002a7f57600080fd5b62002a8a886200256a565b9650602088013562002a9c8162002542565b9550604088013567ffffffffffffffff8082111562002aba57600080fd5b62002ac88b838c016200257f565b909750955060608a013591508082111562002ae257600080fd5b5062002af18a828b016200257f565b909450925050608088013562002b0781620027f1565b8091505092959891949750929550565b60008060006060848603121562002b2d57600080fd5b62002b38846200256a565b9250602084013562002b4a8162002542565b9150604084013567ffffffffffffffff81111562002b6757600080fd5b62002b7586828701620028b6565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b6020808252602a908201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e546040820152692fa122afa4aa29a2a62360b11b606082015260800190565b80151581146200182e57600080fd5b60006020828403121562002c5357600080fd5b8151620026b48162002c31565b60005b8381101562002c7d57818101518382015260200162002c63565b838111156200101c5750506000910152565b600082601f83011262002ca157600080fd5b815162002cb2620028d9826200288b565b81815284602083860101111562002cc857600080fd5b62000c9082602083016020870162002c60565b60006020828403121562002cee57600080fd5b815167ffffffffffffffff81111562002d0657600080fd5b62000c908482850162002c8f565b60006020828403121562002d2757600080fd5b8151620026b481620027f1565b6000815180845262002d4e81602086016020860162002c60565b601f01601f19169290920160200192915050565b60608152600062002d77606083018662002d34565b828103602084015262002d8b818662002d34565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002df38483018762002d34565b925080851660e085015250509998505050505050505050565b6020808252604b908201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660408201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60608201526a18de4818dbdb9d1c9858dd60aa1b608082015260a00190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002efb5762002efb62002ebd565b500490565b60006001820162002f155762002f1562002ed3565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002f4e9083018462002d34565b95945050505050565b6000825162002f6b81846020870162002c60565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002fc257600080fd5b835167ffffffffffffffff8082111562002fdb57600080fd5b62002fe98783880162002c8f565b945060208601519150808211156200300057600080fd5b506200300f8682870162002c8f565b925050604084015162002a3e81620027f1565b60008262003034576200303462002ebd565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006200307860608301878962003039565b82810360208401526200308d81868862003039565b91505060ff831660408301529695505050505050565b60008351620030b781846020880162002c60565b835190830190620030cd81836020880162002c60565b01949350505050565b60008085851115620030e757600080fd5b83861115620030f557600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200311e57600080fd5b87356200312b8162002542565b965060208801356200313d8162002542565b9550604088013594506060880135935060808801356200286e81620027f1565b60208082526030908201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560408201526f29aa2fa122afaa2422afa9a2a72222a960811b606082015260800190565b60208082526025908201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f42456040820152645f5448495360d81b606082015260800190565b600080600080600080600080610100898b0312156200321057600080fd5b88356200321d8162002542565b975060208901356200322f8162002542565b9650604089013595506060890135945060808901356200324f8162002c31565b935060a08901356200326181620027f1565b979a969950949793969295929450505060c08201359160e0013590565b600181815b80851115620032bf578160001904821115620032a357620032a362002ed3565b80851615620032b157918102915b93841c939080029062003283565b509250929050565b600082620032d85750600162000a9d565b81620032e75750600062000a9d565b81600181146200330057600281146200330b576200332b565b600191505062000a9d565b60ff8411156200331f576200331f62002ed3565b50506001821b62000a9d565b5060208310610133831016604e8410600b841016171562003350575081810a62000a9d565b6200335c83836200327e565b806000190482111562003373576200337362002ed3565b029392505050565b6000620026b48383620032c7565b6000828210156200339e576200339e62002ed3565b500390565b60008219821115620033b957620033b962002ed3565b500190565b634e487b7160e01b600052600160045260246000fd5b600060208284031215620033e757600080fd5b5051919050565b602081526000620026b4602083018462002d3456fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b14f80bfcbda3f7be499de7c67ec81639549928b9cee16384da9f2fb8c22dce64736f6c634300080f0033a2646970667358221220fd3826b18742b99a0bc2739447acf94a8af9e9299c7241c343cafcf744385b5964736f6c634300080f0033", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", "0x0000000000000000000000000000000000000000000000000000000000000055": "0xc949254d682d8c9ad5682521675b8f43b102aec4", @@ -24,7 +24,7 @@ "balance": "0", "nonce": "1", "address": "0xae4bb80be56b819606589de61d5ec3b522eeb032", - "bytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b36600461014d565b60006020819052908152604090205481565b6100a061009b36600461014d565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b031633146101485760405162461bcd60e51b815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a75706461746545604482015273786974526f6f743a204f4e4c595f42524944474560601b606482015260840160405180910390fd5b600155565b60006020828403121561015f57600080fd5b503591905056fea264697066735822122055a91ce0b0e2097f6ede1464275887801f3e3847a103f41a42a2125acaba0be264736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b36600461014d565b60006020819052908152604090205481565b6100a061009b36600461014d565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b031633146101485760405162461bcd60e51b815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a75706461746545604482015273786974526f6f743a204f4e4c595f42524944474560601b606482015260840160405180910390fd5b600155565b60006020828403121561015f57600080fd5b503591905056fea2646970667358221220c3d468a91666aebe6b0b1c0d82e7915c70f7879e38ddb928138328ccd71d725164736f6c634300080f0033", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000002": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988" }, diff --git a/docker/scripts/genesis_docker.json b/docker/scripts/genesis_docker.json index 4d59db7a3..b26bec169 100644 --- a/docker/scripts/genesis_docker.json +++ b/docker/scripts/genesis_docker.json @@ -1,11 +1,11 @@ { - "root": "0x382794d29a63231a4fc50a343ac78007b32034e4c77ab6d78d951af90ba4ab02", + "root": "0x89c194fb8d45ee9ff61c731802a4f4d3d6b67c1684f126ff015d824044b153d9", "genesis": [ { - "balance": "100000000000000000000000", + "balance": "200000000000000000000000000", "nonce": "1", "address": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988", - "bytecode": "0x608060405260043610620001585760003560e01c80630871e971146200015d57806315064c9614620001765780632072f6c514620001a757806322e95f2c14620001bf5780632dfdf0b514620001fd578063318aee3d14620002245780633ae0504714620002925780633da8168214620002aa5780633e19704314620002cf5780634638554914620002f4578063647c576c1462000319578063715018a6146200033e5780637b6323c1146200035657806381b1c174146200037b5780638da5cb5b14620003b55780638f61151914620003cd5780639e34070f14620003ef578063a08e8a081462000414578063aaa13cc2146200043e578063bab161bf1462000463578063d02103ca1462000498578063d96a15f714620004ba578063dbc1697614620004d1578063ed6be5c914620004e9578063ee25560b1462000500578063f2fde38b1462000531578063ff634ed71462000556575b600080fd5b620001746200016e36600462002529565b6200056d565b005b3480156200018357600080fd5b50602254620001929060ff1681565b60405190151581526020015b60405180910390f35b348015620001b457600080fd5b506200017462000998565b348015620001cc57600080fd5b50620001e4620001de366004620025b5565b620009d1565b6040516001600160a01b0390911681526020016200019e565b3480156200020a57600080fd5b506200021560215481565b6040519081526020016200019e565b3480156200023157600080fd5b506200026d62000243366004620025f1565b608a6020526000908152604090205463ffffffff811690600160201b90046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200019e565b3480156200029f57600080fd5b506200021562000a24565b348015620002b757600080fd5b5062000192620002c9366004620026de565b62000b18565b348015620002dc57600080fd5b5062000215620002ee3660046200275b565b62000c09565b3480156200030157600080fd5b5062000174620003133660046200286b565b62000c96565b3480156200032657600080fd5b50620001746200033836600462002951565b62000e1e565b3480156200034b57600080fd5b506200017462000f8b565b3480156200036357600080fd5b5062000174620003753660046200286b565b62000fa1565b3480156200038857600080fd5b50620001e46200039a366004620029a1565b6089602052600090815260409020546001600160a01b031681565b348015620003c257600080fd5b50620001e46200142b565b348015620003da57600080fd5b50608c54620001e4906001600160a01b031681565b348015620003fc57600080fd5b50620001926200040e366004620029a1565b6200143a565b3480156200042157600080fd5b506200042b600081565b60405160ff90911681526020016200019e565b3480156200044b57600080fd5b50620001e46200045d366004620029bb565b6200147f565b3480156200047057600080fd5b50608754620004829063ffffffff1681565b60405163ffffffff90911681526020016200019e565b348015620004a557600080fd5b50608b54620001e4906001600160a01b031681565b62000174620004cb36600462002a6e565b62001596565b348015620004de57600080fd5b5062000174620016d0565b348015620004f657600080fd5b5062000482600081565b3480156200050d57600080fd5b50620002156200051f366004620029a1565b60886020526000908152604090205481565b3480156200053e57600080fd5b506200017462000550366004620025f1565b62001707565b3480156200056357600080fd5b506200042b600181565b60225460ff16156200059c5760405162461bcd60e51b8152600401620005939062002ad5565b60405180910390fd5b60875463ffffffff90811690861603620005ca5760405162461bcd60e51b8152600401620005939062002b3d565b60008060606001600160a01b0389166200065157853414620006475760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201526e4d415443485f4d53475f56414c554560881b606482015260840162000593565b60009150620008c3565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff81168352600160201b900490921691810182905290156200072057604051632770a7eb60e21b81526001600160a01b038b1690639dc29fac90620006c79033908b9060040162002b87565b6020604051808303816000875af1158015620006e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200070d919062002baf565b50602081015181519094509250620008c1565b84156200073557620007358a88888862001786565b6200074c6001600160a01b038b1633308a62001b8a565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007a3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007cd919081019062002c4a565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200080c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000836919081019062002c4a565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000875573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200089b919062002c82565b604051602001620008af9392919062002cd0565b60405160208183030381529060405291505b505b60008051602062004888833981519152600083858b8b8b87602154604051620008f498979695949392919062002d0d565b60405180910390a16200091f62000919600084868c8c8c888051906020012062000c09565b62001bf7565b608b546001600160a01b03166333d6247d6200093a62000a24565b6040518263ffffffff1660e01b81526004016200095991815260200190565b600060405180830381600087803b1580156200097457600080fd5b505af115801562000989573d6000803e3d6000fd5b50505050505050505050505050565b608c546001600160a01b03163314620009c55760405162461bcd60e51b8152600401620005939062002d7a565b620009cf62001d48565b565b6000608960008484604051602001620009ec92919062002deb565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b0f578260011660010362000a8f576001816020811062000a5b5762000a5b62002e15565b01548460405160200162000a7192919062002e2b565b60405160208183030381529060405280519060200120935062000abd565b838260405160200162000aa492919062002e2b565b6040516020818303038152906040528051906020012093505b62000aca60028462002e65565b9250818260405160200162000ae192919062002e2b565b604051602081830303815290604052805190602001209150808062000b069062002e7c565b91505062000a2f565b50919392505050565b6000846001600160401b038416825b602081101562000bfa578160011660010362000b8c5786818151811062000b525762000b5262002e15565b60200260200101518360405160200162000b6e92919062002e2b565b60405160208183030381529060405280519060200120925062000bd6565b8287828151811062000ba25762000ba262002e15565b602002602001015160405160200162000bbd92919062002e2b565b6040516020818303038152906040528051906020012092505b62000be360028362002e65565b91508062000bf18162002e7c565b91505062000b27565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000cbc5760405162461bcd60e51b8152600401620005939062002ad5565b62000cd28a8a8a8a8a8a8a8a8a8a600162001da6565b62000ce38963ffffffff1662002033565b6000836001600160a01b03168387898560405160240162000d079392919062002e98565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d3e919062002ed3565b60006040518083038185875af1925050503d806000811462000d7d576040519150601f19603f3d011682016040523d82523d6000602084013e62000d82565b606091505b505090508062000de15760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f46416044820152631253115160e21b606482015260840162000593565b600080516020620048a88339815191528a8888878760405162000e0995949392919062002ef1565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000e3f5750600054600160ff909116105b8062000e64575062000e513062002075565b15801562000e64575060005460ff166001145b62000ec95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000593565b6000805460ff19166001179055801562000eed576000805461ff0019166101001790555b6087805463ffffffff861663ffffffff19909116179055608b80546001600160a01b038086166001600160a01b031992831617909255608c80549285169290911691909117905562000f3e62002084565b801562000f85576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000f95620020fc565b620009cf60006200215f565b60225460ff161562000fc75760405162461bcd60e51b8152600401620005939062002ad5565b62000fdd8a8a8a8a8a8a8a8a8a8a600062001da6565b62000fee8963ffffffff1662002033565b6001600160a01b038516620010d757604080516000808252602082019092526001600160a01b03851690849060405162001029919062002ed3565b60006040518083038185875af1925050503d806000811462001068576040519150601f19603f3d011682016040523d82523d6000602084013e6200106d565b606091505b5050905080620010d05760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201526617d1905253115160ca1b606482015260840162000593565b50620013ef565b60875463ffffffff908116908716036200110757620011016001600160a01b0386168484620021b1565b620013ef565b600086866040516020016200111e92919062002deb565b60408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620013745760008060008580602001905181019062001170919062002f28565b9250925092506000858484846040516200118a9062002493565b620011989392919062002cd0565b8190604051809103906000f5905080158015620011b9573d6000803e3d6000fd5b506040516340c10f1960e01b81529091506001600160a01b038216906340c10f1990620011ed908c908c9060040162002b87565b6020604051808303816000875af11580156200120d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001233919062002baf565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013629392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620013ec565b6040516340c10f1960e01b81526001600160a01b038216906340c10f1990620013a4908890889060040162002b87565b6020604051808303816000875af1158015620013c4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013ea919062002baf565b505b50505b600080516020620048a883398151915289878786866040516200141795949392919062002ef1565b60405180910390a150505050505050505050565b6055546001600160a01b031690565b6000806200144b6101008462002e65565b905060006200145d6101008562002f9d565b60009283526088602052604090922054600190921b9182169091149392505050565b60008088886040516020016200149792919062002deb565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014ca9062002493565b601f1982820381018352601f909101166040819052620014f7908d908d908d908d908d9060200162002fdd565b60408051601f19818403018152908290526200151792916020016200301e565b604051602081830303815290604052805190602001206040516020016200157094939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015bc5760405162461bcd60e51b8152600401620005939062002ad5565b60875463ffffffff90811690841603620015ea5760405162461bcd60e51b8152600401620005939062002b3d565b6087546021546040516000805160206200488883398151915292620016269260019263ffffffff9092169133918991899134918a919062002d0d565b60405180910390a16200165d620009196001608760009054906101000a900463ffffffff1633878734888051906020012062000c09565b608b546001600160a01b03166333d6247d6200167862000a24565b6040518263ffffffff1660e01b81526004016200169791815260200190565b600060405180830381600087803b158015620016b257600080fd5b505af1158015620016c7573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b03163314620016fd5760405162461bcd60e51b8152600401620005939062002d7a565b620009cf620021d3565b62001711620020fc565b6001600160a01b038116620017785760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000593565b62001783816200215f565b50565b6000620017c983838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200228092505050565b9050632afa533160e01b6001600160e01b0319821601620019b2576000808080808080620017fb896004818d62003051565b8101906200180a91906200307d565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200184c5760405162461bcd60e51b81526004016200059390620030d8565b6001600160a01b0386163014620018775760405162461bcd60e51b8152600401620005939062003128565b8a8514620018de5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201526c09e8aa6be9c9ea8be9a82a8869609b1b606482015260840162000593565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200195e919062002ed3565b6000604051808303816000865af19150503d80600081146200199d576040519150601f19603f3d011682016040523d82523d6000602084013e620019a2565b606091505b5050505050505050505062001b83565b6001600160e01b031981166323f2ebc360e21b1462001a145760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000593565b60008080808080808062001a2c8a6004818e62003051565b81019062001a3b91906200316d565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001a7f5760405162461bcd60e51b81526004016200059390620030d8565b6001600160a01b038716301462001aaa5760405162461bcd60e51b8152600401620005939062003128565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001b33919062002ed3565b6000604051808303816000865af19150503d806000811462001b72576040519150601f19603f3d011682016040523d82523d6000602084013e62001b77565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000f859085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262002287565b80600162001c0860206002620032f6565b62001c14919062003304565b6021541062001c795760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000593565b60016021600082825462001c8e91906200331e565b909155505060215460005b602081101562001d38578160011660010362001cce57826001826020811062001cc65762001cc662002e15565b015550505050565b6001816020811062001ce45762001ce462002e15565b01548360405160200162001cfa92919062002e2b565b60405160208183030381529060405280519060200120925060028262001d21919062002e65565b91508062001d2f8162002e7c565b91505062001c99565b5062001d4362003339565b505050565b60225460ff161562001d6e5760405162461bcd60e51b8152600401620005939062002ad5565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001db78a63ffffffff166200143a565b1562001e125760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c416044820152631253515160e21b606482015260840162000593565b608b546040516000916001600160a01b03169063257b36329062001e3d908d908d9060200162002e2b565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040162001e7291815260200190565b6020604051808303816000875af115801562001e92573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001eb891906200334f565b90508060000362001f225760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201526c17d493d3d517d2539590531251609a1b606482015260840162000593565b60875463ffffffff87811691161462001f9e5760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e6044820152760be9c8aa8ae9ea496be889e8aa6be9c9ea8be9a82a8869604b1b606482015260840162000593565b60875460009063ffffffff1662001fb757508862001fba565b50895b62001fe562001fd6848b8b8b8b8b8b8051906020012062000c09565b8e8e63ffffffff168462000b18565b620009895760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c4944604482015260640162000593565b6000620020436101008362002e65565b90506000620020556101008462002f9d565b6000928352608860205260409092208054600190931b9092179091555050565b6001600160a01b03163b151590565b600054610100900460ff16620020f15760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000593565b620009cf336200215f565b33620021076200142b565b6001600160a01b031614620009cf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000593565b605580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62001d438363a9059cbb60e01b848460405160240162001bbf92919062002b87565b60225460ff166200224b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527a74653a206f6e6c7920696620656d657267656e637920737461746560281b606482015260840162000593565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b6000620022de826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620023609092919063ffffffff16565b80519091501562001d435780806020019051810190620022ff919062002baf565b62001d435760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000593565b606062000c01848460008585600080866001600160a01b031685876040516200238a919062002ed3565b60006040518083038185875af1925050503d8060008114620023c9576040519150601f19603f3d011682016040523d82523d6000602084013e620023ce565b606091505b5091509150620023e187838387620023ec565b979650505050505050565b606083156200246057825160000362002458576200240a8562002075565b620024585760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000593565b508162000c01565b62000c018383815115620024775781518083602001fd5b8060405162461bcd60e51b815260040162000593919062003369565b611509806200337f83390190565b6001600160a01b03811681146200178357600080fd5b8035620024c481620024a1565b919050565b803563ffffffff81168114620024c457600080fd5b60008083601f840112620024f157600080fd5b5081356001600160401b038111156200250957600080fd5b6020830191508360208285010111156200252257600080fd5b9250929050565b60008060008060008060a087890312156200254357600080fd5b86356200255081620024a1565b95506200256060208801620024c9565b945060408701356200257281620024a1565b93506060870135925060808701356001600160401b038111156200259557600080fd5b620025a389828a01620024de565b979a9699509497509295939492505050565b60008060408385031215620025c957600080fd5b620025d483620024c9565b91506020830135620025e681620024a1565b809150509250929050565b6000602082840312156200260457600080fd5b81356200261181620024a1565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171562002659576200265962002618565b604052919050565b600082601f8301126200267357600080fd5b813560206001600160401b0382111562002691576200269162002618565b8160051b620026a28282016200262e565b9283528481018201928281019087851115620026bd57600080fd5b83870192505b84831015620023e157823582529183019190830190620026c3565b60008060008060808587031215620026f557600080fd5b8435935060208501356001600160401b03808211156200271457600080fd5b620027228883890162002661565b94506040870135915080821682146200273a57600080fd5b509396929550929360600135925050565b60ff811681146200178357600080fd5b600080600080600080600060e0888a0312156200277757600080fd5b873562002784816200274b565b96506200279460208901620024c9565b95506040880135620027a681620024a1565b9450620027b660608901620024c9565b93506080880135620027c881620024a1565b9699959850939692959460a0840135945060c09093013592915050565b60006001600160401b0382111562002801576200280162002618565b50601f01601f191660200190565b600082601f8301126200282157600080fd5b8135620028386200283282620027e5565b6200262e565b8181528460208386010111156200284e57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200288c57600080fd5b8a356001600160401b0380821115620028a457600080fd5b620028b28e838f0162002661565b9b50620028c260208e01620024c9565b9a5060408d0135995060608d01359850620028e060808e01620024c9565b9750620028f060a08e01620024b7565b96506200290060c08e01620024c9565b95506200291060e08e01620024b7565b94506101008d013593506101208d01359150808211156200293057600080fd5b506200293f8d828e016200280f565b9150509295989b9194979a5092959850565b6000806000606084860312156200296757600080fd5b6200297284620024c9565b925060208401356200298481620024a1565b915060408401356200299681620024a1565b809150509250925092565b600060208284031215620029b457600080fd5b5035919050565b600080600080600080600060a0888a031215620029d757600080fd5b620029e288620024c9565b96506020880135620029f481620024a1565b955060408801356001600160401b038082111562002a1157600080fd5b62002a1f8b838c01620024de565b909750955060608a013591508082111562002a3957600080fd5b5062002a488a828b01620024de565b909450925050608088013562002a5e816200274b565b8091505092959891949750929550565b60008060006060848603121562002a8457600080fd5b62002a8f84620024c9565b9250602084013562002aa181620024a1565b915060408401356001600160401b0381111562002abd57600080fd5b62002acb868287016200280f565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b6020808252602a908201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e546040820152692fa122afa4aa29a2a62360b11b606082015260800190565b6001600160a01b03929092168252602082015260400190565b80151581146200178357600080fd5b60006020828403121562002bc257600080fd5b8151620026118162002ba0565b60005b8381101562002bec57818101518382015260200162002bd2565b8381111562000f855750506000910152565b600082601f83011262002c1057600080fd5b815162002c216200283282620027e5565b81815284602083860101111562002c3757600080fd5b62000c0182602083016020870162002bcf565b60006020828403121562002c5d57600080fd5b81516001600160401b0381111562002c7457600080fd5b62000c018482850162002bfe565b60006020828403121562002c9557600080fd5b815162002611816200274b565b6000815180845262002cbc81602086016020860162002bcf565b601f01601f19169290920160200192915050565b60608152600062002ce5606083018662002ca2565b828103602084015262002cf9818662002ca2565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002d618483018762002ca2565b925080851660e085015250509998505050505050505050565b6020808252604b908201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660408201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60608201526a18de4818dbdb9d1c9858dd60aa1b608082015260a00190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b918252602082015260400190565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002e775762002e7762002e39565b500490565b60006001820162002e915762002e9162002e4f565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002eca9083018462002ca2565b95945050505050565b6000825162002ee781846020870162002bcf565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002f3e57600080fd5b83516001600160401b038082111562002f5657600080fd5b62002f648783880162002bfe565b9450602086015191508082111562002f7b57600080fd5b5062002f8a8682870162002bfe565b925050604084015162002996816200274b565b60008262002faf5762002faf62002e39565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002ff360608301878962002fb4565b82810360208401526200300881868862002fb4565b91505060ff831660408301529695505050505050565b600083516200303281846020880162002bcf565b8351908301906200304881836020880162002bcf565b01949350505050565b600080858511156200306257600080fd5b838611156200307057600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200309957600080fd5b8735620030a681620024a1565b96506020880135620030b881620024a1565b955060408801359450606088013593506080880135620027c8816200274b565b60208082526030908201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560408201526f29aa2fa122afaa2422afa9a2a72222a960811b606082015260800190565b60208082526025908201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f42456040820152645f5448495360d81b606082015260800190565b600080600080600080600080610100898b0312156200318b57600080fd5b88356200319881620024a1565b97506020890135620031aa81620024a1565b965060408901359550606089013594506080890135620031ca8162002ba0565b935060a0890135620031dc816200274b565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200323a5781600019048211156200321e576200321e62002e4f565b808516156200322c57918102915b93841c9390800290620031fe565b509250929050565b600082620032535750600162000a1e565b81620032625750600062000a1e565b81600181146200327b57600281146200328657620032a6565b600191505062000a1e565b60ff8411156200329a576200329a62002e4f565b50506001821b62000a1e565b5060208310610133831016604e8410600b8410161715620032cb575081810a62000a1e565b620032d78383620031f9565b8060001904821115620032ee57620032ee62002e4f565b029392505050565b600062002611838362003242565b60008282101562003319576200331962002e4f565b500390565b6000821982111562003334576200333462002e4f565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200336257600080fd5b5051919050565b60208152600062002611602083018462002ca256fe60c06040523480156200001157600080fd5b5060405162001509380380620015098339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161104f620004ba60003960006104150152600081816102a301526103df015261104f6000f3fe608060405234801561001057600080fd5b50600436106101075760003560e01c806306fdde031461010c578063095ea7b31461012a57806318160ddd1461014d57806320606b701461015f57806323b872dd1461017457806330adf81f14610187578063313ce5671461019c5780633644e515146101bb57806339509351146101c357806340c10f19146101d657806370a08231146101e95780637ecebe001461021257806395d89b41146102325780639dc29fac1461023a578063a3c573eb1461024d578063a457c2d714610278578063a9059cbb1461028b578063cd0d00961461029e578063d505accf146102c5578063dd62ed3e146102da578063ffa1ad74146102ed575b600080fd5b61011461030d565b6040516101219190610d55565b60405180910390f35b61013d610138366004610dc6565b61039f565b6040519015158152602001610121565b6002545b604051908152602001610121565b610151600080516020610ffa83398151915281565b61013d610182366004610df0565b6103b7565b610151600080516020610fda83398151915281565b600554600160a01b900460ff1660405160ff9091168152602001610121565b6101516103db565b61013d6101d1366004610dc6565b610437565b61013d6101e4366004610dc6565b610459565b6101516101f7366004610e2c565b6001600160a01b031660009081526020819052604090205490565b610151610220366004610e2c565b60066020526000908152604090205481565b6101146104a2565b61013d610248366004610dc6565b6104b1565b600554610260906001600160a01b031681565b6040516001600160a01b039091168152602001610121565b61013d610286366004610dc6565b6104e8565b61013d610299366004610dc6565b610563565b6101517f000000000000000000000000000000000000000000000000000000000000000081565b6102d86102d3366004610e4e565b610571565b005b6101516102e8366004610ec1565b61079a565b610114604051806040016040528060018152602001603160f81b81525081565b60606003805461031c90610ef4565b80601f016020809104026020016040519081016040528092919081815260200182805461034890610ef4565b80156103955780601f1061036a57610100808354040283529160200191610395565b820191906000526020600020905b81548152906001019060200180831161037857829003601f168201915b5050505050905090565b6000336103ad8185856107c5565b5060019392505050565b6000336103c58582856108ea565b6103d0858585610964565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104125761040d46610af6565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6000336103ad81858561044a838361079a565b6104549190610f44565b6107c5565b6005546000906001600160a01b0316331461048f5760405162461bcd60e51b815260040161048690610f5c565b60405180910390fd5b6104998383610b90565b50600192915050565b60606004805461031c90610ef4565b6005546000906001600160a01b031633146104de5760405162461bcd60e51b815260040161048690610f5c565b6104998383610c3d565b600033816104f6828661079a565b9050838110156105565760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610486565b6103d082868684036107c5565b6000336103ad818585610964565b834211156105cd5760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b6064820152608401610486565b6001600160a01b03871660009081526006602052604081208054600080516020610fda833981519152918a918a918a91908661060883610fa0565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106666103db565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156106f1573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107275750896001600160a01b0316816001600160a01b0316145b6107835760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b6064820152608401610486565b61078e8a8a8a6107c5565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108275760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610486565b6001600160a01b0382166108885760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610486565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006108f6848461079a565b9050600019811461095e57818110156109515760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610486565b61095e84848484036107c5565b50505050565b6001600160a01b0383166109c85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610486565b6001600160a01b038216610a2a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610486565b6001600160a01b03831660009081526020819052604090205481811015610aa25760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610486565b6001600160a01b0384811660008181526020818152604080832087870390559387168083529184902080548701905592518581529092600080516020610fba833981519152910160405180910390a361095e565b6000600080516020610ffa833981519152610b0f61030d565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610be65760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610486565b8060026000828254610bf89190610f44565b90915550506001600160a01b03821660008181526020818152604080832080548601905551848152600080516020610fba833981519152910160405180910390a35050565b6001600160a01b038216610c9d5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610486565b6001600160a01b03821660009081526020819052604090205481811015610d115760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610486565b6001600160a01b038316600081815260208181526040808320868603905560028054879003905551858152919291600080516020610fba83398151915291016108dd565b600060208083528351808285015260005b81811015610d8257858101830151858201604001528201610d66565b81811115610d94576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610dc157600080fd5b919050565b60008060408385031215610dd957600080fd5b610de283610daa565b946020939093013593505050565b600080600060608486031215610e0557600080fd5b610e0e84610daa565b9250610e1c60208501610daa565b9150604084013590509250925092565b600060208284031215610e3e57600080fd5b610e4782610daa565b9392505050565b600080600080600080600060e0888a031215610e6957600080fd5b610e7288610daa565b9650610e8060208901610daa565b95506040880135945060608801359350608088013560ff81168114610ea457600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610ed457600080fd5b610edd83610daa565b9150610eeb60208401610daa565b90509250929050565b600181811c90821680610f0857607f821691505b602082108103610f2857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610f5757610f57610f2e565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b600060018201610fb257610fb2610f2e565b506001019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400fa26469706673582212206aa726514b02f96d0faa290d2747748128c753b26d79c2146367e9390138677f64736f6c634300080f0033501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe27545983a2646970667358221220c9685580e8edc653df46174a4a1c4bbb3b8dffb7544d8889d56e6577d348318c64736f6c634300080f0033", + "bytecode": "0x608060405260043610620001be5760003560e01c806381b1c17411620000ff578063d02103ca1162000095578063ed6be5c9116200006c578063ed6be5c91462000558578063ee25560b146200056f578063f2fde38b14620005a0578063ff634ed714620005c557600080fd5b8063d02103ca1462000507578063d96a15f71462000529578063dbc16976146200054057600080fd5b80639e34070f11620000d65780639e34070f146200045e578063a08e8a081462000483578063aaa13cc214620004ad578063bab161bf14620004d257600080fd5b806381b1c17414620003e25780638da5cb5b146200041c5780638f611519146200043c57600080fd5b80633ae05047116200017557806346385549116200014c57806346385549146200035b578063647c576c1462000380578063715018a614620003a55780637b6323c114620003bd57600080fd5b80633ae0504714620002f95780633da8168214620003115780633e197043146200033657600080fd5b80630871e97114620001c357806315064c9614620001dc5780632072f6c5146200020d57806322e95f2c14620002255780632dfdf0b51462000263578063318aee3d146200028a575b600080fd5b620001da620001d4366004620025cb565b620005dc565b005b348015620001e957600080fd5b50602254620001f89060ff1681565b60405190151581526020015b60405180910390f35b3480156200021a57600080fd5b50620001da62000a17565b3480156200023257600080fd5b506200024a6200024436600462002658565b62000a50565b6040516001600160a01b03909116815260200162000204565b3480156200027057600080fd5b506200027b60215481565b60405190815260200162000204565b3480156200029757600080fd5b50620002d4620002a936600462002694565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000204565b3480156200030657600080fd5b506200027b62000aa3565b3480156200031e57600080fd5b50620001f86200033036600462002783565b62000b96565b3480156200034357600080fd5b506200027b6200035536600462002801565b62000c98565b3480156200036857600080fd5b50620001da6200037a36600462002912565b62000d25565b3480156200038d57600080fd5b50620001da6200039f366004620029f9565b62000ebe565b348015620003b257600080fd5b50620001da62001022565b348015620003ca57600080fd5b50620001da620003dc36600462002912565b62001038565b348015620003ef57600080fd5b506200024a6200040136600462002a49565b6089602052600090815260409020546001600160a01b031681565b3480156200042957600080fd5b506055546001600160a01b03166200024a565b3480156200044957600080fd5b50608c546200024a906001600160a01b031681565b3480156200046b57600080fd5b50620001f86200047d36600462002a49565b620014d4565b3480156200049057600080fd5b506200049a600081565b60405160ff909116815260200162000204565b348015620004ba57600080fd5b506200024a620004cc36600462002a63565b62001519565b348015620004df57600080fd5b50608754620004f19063ffffffff1681565b60405163ffffffff909116815260200162000204565b3480156200051457600080fd5b50608b546200024a906001600160a01b031681565b620001da6200053a36600462002b17565b62001630565b3480156200054d57600080fd5b50620001da6200177b565b3480156200056557600080fd5b50620004f1600081565b3480156200057c57600080fd5b506200027b6200058e36600462002a49565b60886020526000908152604090205481565b348015620005ad57600080fd5b50620001da620005bf36600462002694565b620017b2565b348015620005d257600080fd5b506200049a600181565b60225460ff16156200060b5760405162461bcd60e51b8152600401620006029062002b7f565b60405180910390fd5b60875463ffffffff90811690861603620006395760405162461bcd60e51b8152600401620006029062002be7565b60008060606001600160a01b038916620006c057853414620006b65760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201526e4d415443485f4d53475f56414c554560881b606482015260840162000602565b6000915062000931565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200078e57604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562000755573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200077b919062002c40565b506020810151815190945092506200092f565b8415620007a357620007a38a88888862001831565b620007ba6001600160a01b038b1633308a62001c35565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000811573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200083b919081019062002cdb565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200087a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620008a4919081019062002cdb565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620008e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000909919062002d14565b6040516020016200091d9392919062002d62565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200097398979695949392919062002d9f565b60405180910390a16200099e62000998600084868c8c8c888051906020012062000c98565b62001ca2565b608b546001600160a01b03166333d6247d620009b962000aa3565b6040518263ffffffff1660e01b8152600401620009d891815260200190565b600060405180830381600087803b158015620009f357600080fd5b505af115801562000a08573d6000803e3d6000fd5b50505050505050505050505050565b608c546001600160a01b0316331462000a445760405162461bcd60e51b8152600401620006029062002e0c565b62000a4e62001df3565b565b600060896000848460405160200162000a6b92919062002e7d565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b8d578260011660010362000b0e576001816020811062000ada5762000ada62002ea7565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000b3b565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b4860028462002ee9565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b849062002f00565b91505062000aae565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c89578160011660010362000c135786818151811062000bd15762000bd162002ea7565b60200260200101518360405160200162000bf5929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c65565b8287828151811062000c295762000c2962002ea7565b602002602001015160405160200162000c4c929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c7260028362002ee9565b91508062000c808162002f00565b91505062000ba6565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d4b5760405162461bcd60e51b8152600401620006029062002b7f565b62000d618a8a8a8a8a8a8a8a8a8a600162001e51565b62000d728963ffffffff16620020d8565b6000836001600160a01b03168387898560405160240162000d969392919062002f1c565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000dcd919062002f57565b60006040518083038185875af1925050503d806000811462000e0c576040519150601f19603f3d011682016040523d82523d6000602084013e62000e11565b606091505b505090508062000e705760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f46416044820152631253115160e21b606482015260840162000602565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000ea995949392919062002f75565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000edf5750600054600160ff909116105b8062000efb5750303b15801562000efb575060005460ff166001145b62000f605760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000602565b6000805460ff19166001179055801562000f84576000805461ff0019166101001790555b6087805463ffffffff861663ffffffff19909116179055608b80546001600160a01b038086166001600160a01b031992831617909255608c80549285169290911691909117905562000fd56200211a565b80156200101c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6200102c62002192565b62000a4e6000620021ee565b60225460ff16156200105e5760405162461bcd60e51b8152600401620006029062002b7f565b620010748a8a8a8a8a8a8a8a8a8a600062001e51565b620010858963ffffffff16620020d8565b6001600160a01b0385166200116e57604080516000808252602082019092526001600160a01b038516908490604051620010c0919062002f57565b60006040518083038185875af1925050503d8060008114620010ff576040519150601f19603f3d011682016040523d82523d6000602084013e62001104565b606091505b5050905080620011675760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201526617d1905253115160ca1b606482015260840162000602565b5062001487565b60875463ffffffff908116908716036200119e57620011986001600160a01b038616848462002240565b62001487565b60008686604051602001620011b592919062002e7d565b60408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b0316806200140c5760008060008580602001905181019062001207919062002fac565b925092509250600085848484604051620012219062002534565b6200122f9392919062002d62565b8190604051809103906000f590508015801562001250573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af1158015620012a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012cb919062002c40565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013fa9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001484565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200145c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001482919062002c40565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838987878686604051620014c095949392919062002f75565b60405180910390a150505050505050505050565b600080620014e56101008462002ee9565b90506000620014f76101008562003022565b60009283526088602052604090922054600190921b9182169091149392505050565b60008088886040516020016200153192919062002e7d565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620015649062002534565b601f1982820381018352601f90910116604081905262001591908d908d908d908d908d9060200162003062565b60408051601f1981840301815290829052620015b19291602001620030a3565b604051602081830303815290604052805190602001206040516020016200160a94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620016565760405162461bcd60e51b8152600401620006029062002b7f565b60875463ffffffff90811690841603620016845760405162461bcd60e51b8152600401620006029062002be7565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620016d19260019263ffffffff9092169133918991899134918a919062002d9f565b60405180910390a162001708620009986001608760009054906101000a900463ffffffff1633878734888051906020012062000c98565b608b546001600160a01b03166333d6247d6200172362000aa3565b6040518263ffffffff1660e01b81526004016200174291815260200190565b600060405180830381600087803b1580156200175d57600080fd5b505af115801562001772573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b03163314620017a85760405162461bcd60e51b8152600401620006029062002e0c565b62000a4e62002272565b620017bc62002192565b6001600160a01b038116620018235760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000602565b6200182e81620021ee565b50565b60006200187483838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200232192505050565b9050632afa533160e01b6001600160e01b031982160162001a5d576000808080808080620018a6896004818d620030d6565b810190620018b5919062003102565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018f75760405162461bcd60e51b815260040162000602906200315d565b6001600160a01b0386163014620019225760405162461bcd60e51b81526004016200060290620031ad565b8a8514620019895760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201526c09e8aa6be9c9ea8be9a82a8869609b1b606482015260840162000602565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162001a09919062002f57565b6000604051808303816000865af19150503d806000811462001a48576040519150601f19603f3d011682016040523d82523d6000602084013e62001a4d565b606091505b5050505050505050505062001c2e565b6001600160e01b031981166323f2ebc360e21b1462001abf5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000602565b60008080808080808062001ad78a6004818e620030d6565b81019062001ae69190620031f2565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001b2a5760405162461bcd60e51b815260040162000602906200315d565b6001600160a01b038716301462001b555760405162461bcd60e51b81526004016200060290620031ad565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001bde919062002f57565b6000604051808303816000865af19150503d806000811462001c1d576040519150601f19603f3d011682016040523d82523d6000602084013e62001c22565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526200101c9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262002328565b80600162001cb3602060026200337b565b62001cbf919062003389565b6021541062001d245760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000602565b60016021600082825462001d399190620033a3565b909155505060215460005b602081101562001de3578160011660010362001d7957826001826020811062001d715762001d7162002ea7565b015550505050565b6001816020811062001d8f5762001d8f62002ea7565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001dcc919062002ee9565b91508062001dda8162002f00565b91505062001d44565b5062001dee620033be565b505050565b60225460ff161562001e195760405162461bcd60e51b8152600401620006029062002b7f565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001e628a63ffffffff16620014d4565b1562001ebd5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c416044820152631253515160e21b606482015260840162000602565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001f31573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f579190620033d4565b90508060000362001fc15760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201526c17d493d3d517d2539590531251609a1b606482015260840162000602565b60875463ffffffff878116911614620020435760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d41544348000000000000000000606482015260840162000602565b60875460009063ffffffff166200205c5750886200205f565b50895b6200208a6200207b848b8b8b8b8b8b8051906020012062000c98565b8e8e63ffffffff168462000b96565b62000a085760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c4944604482015260640162000602565b6000620020e86101008362002ee9565b90506000620020fa6101008462003022565b6000928352608860205260409092208054600190931b9092179091555050565b600054610100900460ff16620021875760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000602565b62000a4e33620021ee565b6055546001600160a01b0316331462000a4e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000602565b605580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001dee90849063a9059cbb60e01b9060640162001c6a565b60225460ff16620022ec5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000602565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b60006200237f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620024019092919063ffffffff16565b80519091501562001dee5780806020019051810190620023a0919062002c40565b62001dee5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000602565b606062000c90848460008585600080866001600160a01b031685876040516200242b919062002f57565b60006040518083038185875af1925050503d80600081146200246a576040519150601f19603f3d011682016040523d82523d6000602084013e6200246f565b606091505b509150915062002482878383876200248d565b979650505050505050565b6060831562002501578251600003620024f9576001600160a01b0385163b620024f95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000602565b508162000c90565b62000c908383815115620025185781518083602001fd5b8060405162461bcd60e51b8152600401620006029190620033ee565b611557806200340483390190565b6001600160a01b03811681146200182e57600080fd5b8035620025658162002542565b919050565b803563ffffffff811681146200256557600080fd5b60008083601f8401126200259257600080fd5b50813567ffffffffffffffff811115620025ab57600080fd5b602083019150836020828501011115620025c457600080fd5b9250929050565b60008060008060008060a08789031215620025e557600080fd5b8635620025f28162002542565b955062002602602088016200256a565b94506040870135620026148162002542565b935060608701359250608087013567ffffffffffffffff8111156200263857600080fd5b6200264689828a016200257f565b979a9699509497509295939492505050565b600080604083850312156200266c57600080fd5b62002677836200256a565b91506020830135620026898162002542565b809150509250929050565b600060208284031215620026a757600080fd5b8135620026b48162002542565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620026fd57620026fd620026bb565b604052919050565b600082601f8301126200271757600080fd5b8135602067ffffffffffffffff821115620027365762002736620026bb565b8160051b62002747828201620026d1565b92835284810182019282810190878511156200276257600080fd5b83870192505b84831015620024825782358252918301919083019062002768565b600080600080608085870312156200279a57600080fd5b84359350602085013567ffffffffffffffff80821115620027ba57600080fd5b620027c88883890162002705565b9450604087013591508082168214620027e057600080fd5b509396929550929360600135925050565b60ff811681146200182e57600080fd5b600080600080600080600060e0888a0312156200281d57600080fd5b87356200282a81620027f1565b96506200283a602089016200256a565b955060408801356200284c8162002542565b94506200285c606089016200256a565b935060808801356200286e8162002542565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620028a857620028a8620026bb565b50601f01601f191660200190565b600082601f830112620028c857600080fd5b8135620028df620028d9826200288b565b620026d1565b818152846020838601011115620028f557600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200293357600080fd5b8a3567ffffffffffffffff808211156200294c57600080fd5b6200295a8e838f0162002705565b9b506200296a60208e016200256a565b9a5060408d0135995060608d013598506200298860808e016200256a565b97506200299860a08e0162002558565b9650620029a860c08e016200256a565b9550620029b860e08e0162002558565b94506101008d013593506101208d0135915080821115620029d857600080fd5b50620029e78d828e01620028b6565b9150509295989b9194979a5092959850565b60008060006060848603121562002a0f57600080fd5b62002a1a846200256a565b9250602084013562002a2c8162002542565b9150604084013562002a3e8162002542565b809150509250925092565b60006020828403121562002a5c57600080fd5b5035919050565b600080600080600080600060a0888a03121562002a7f57600080fd5b62002a8a886200256a565b9650602088013562002a9c8162002542565b9550604088013567ffffffffffffffff8082111562002aba57600080fd5b62002ac88b838c016200257f565b909750955060608a013591508082111562002ae257600080fd5b5062002af18a828b016200257f565b909450925050608088013562002b0781620027f1565b8091505092959891949750929550565b60008060006060848603121562002b2d57600080fd5b62002b38846200256a565b9250602084013562002b4a8162002542565b9150604084013567ffffffffffffffff81111562002b6757600080fd5b62002b7586828701620028b6565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b6020808252602a908201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e546040820152692fa122afa4aa29a2a62360b11b606082015260800190565b80151581146200182e57600080fd5b60006020828403121562002c5357600080fd5b8151620026b48162002c31565b60005b8381101562002c7d57818101518382015260200162002c63565b838111156200101c5750506000910152565b600082601f83011262002ca157600080fd5b815162002cb2620028d9826200288b565b81815284602083860101111562002cc857600080fd5b62000c9082602083016020870162002c60565b60006020828403121562002cee57600080fd5b815167ffffffffffffffff81111562002d0657600080fd5b62000c908482850162002c8f565b60006020828403121562002d2757600080fd5b8151620026b481620027f1565b6000815180845262002d4e81602086016020860162002c60565b601f01601f19169290920160200192915050565b60608152600062002d77606083018662002d34565b828103602084015262002d8b818662002d34565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002df38483018762002d34565b925080851660e085015250509998505050505050505050565b6020808252604b908201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660408201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60608201526a18de4818dbdb9d1c9858dd60aa1b608082015260a00190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002efb5762002efb62002ebd565b500490565b60006001820162002f155762002f1562002ed3565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002f4e9083018462002d34565b95945050505050565b6000825162002f6b81846020870162002c60565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002fc257600080fd5b835167ffffffffffffffff8082111562002fdb57600080fd5b62002fe98783880162002c8f565b945060208601519150808211156200300057600080fd5b506200300f8682870162002c8f565b925050604084015162002a3e81620027f1565b60008262003034576200303462002ebd565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006200307860608301878962003039565b82810360208401526200308d81868862003039565b91505060ff831660408301529695505050505050565b60008351620030b781846020880162002c60565b835190830190620030cd81836020880162002c60565b01949350505050565b60008085851115620030e757600080fd5b83861115620030f557600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200311e57600080fd5b87356200312b8162002542565b965060208801356200313d8162002542565b9550604088013594506060880135935060808801356200286e81620027f1565b60208082526030908201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560408201526f29aa2fa122afaa2422afa9a2a72222a960811b606082015260800190565b60208082526025908201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f42456040820152645f5448495360d81b606082015260800190565b600080600080600080600080610100898b0312156200321057600080fd5b88356200321d8162002542565b975060208901356200322f8162002542565b9650604089013595506060890135945060808901356200324f8162002c31565b935060a08901356200326181620027f1565b979a969950949793969295929450505060c08201359160e0013590565b600181815b80851115620032bf578160001904821115620032a357620032a362002ed3565b80851615620032b157918102915b93841c939080029062003283565b509250929050565b600082620032d85750600162000a9d565b81620032e75750600062000a9d565b81600181146200330057600281146200330b576200332b565b600191505062000a9d565b60ff8411156200331f576200331f62002ed3565b50506001821b62000a9d565b5060208310610133831016604e8410600b841016171562003350575081810a62000a9d565b6200335c83836200327e565b806000190482111562003373576200337362002ed3565b029392505050565b6000620026b48383620032c7565b6000828210156200339e576200339e62002ed3565b500390565b60008219821115620033b957620033b962002ed3565b500190565b634e487b7160e01b600052600160045260246000fd5b600060208284031215620033e757600080fd5b5051919050565b602081526000620026b4602083018462002d3456fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b14f80bfcbda3f7be499de7c67ec81639549928b9cee16384da9f2fb8c22dce64736f6c634300080f0033a2646970667358221220fd3826b18742b99a0bc2739447acf94a8af9e9299c7241c343cafcf744385b5964736f6c634300080f0033", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", "0x0000000000000000000000000000000000000000000000000000000000000055": "0xc949254d682d8c9ad5682521675b8f43b102aec4", @@ -30,7 +30,7 @@ "balance": "0", "nonce": "1", "address": "0xae4bb80be56b819606589de61d5ec3b522eeb032", - "bytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b36600461014d565b60006020819052908152604090205481565b6100a061009b36600461014d565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b031633146101485760405162461bcd60e51b815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a75706461746545604482015273786974526f6f743a204f4e4c595f42524944474560601b606482015260840160405180910390fd5b600155565b60006020828403121561015f57600080fd5b503591905056fea264697066735822122055a91ce0b0e2097f6ede1464275887801f3e3847a103f41a42a2125acaba0be264736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b36600461014d565b60006020819052908152604090205481565b6100a061009b36600461014d565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b031633146101485760405162461bcd60e51b815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a75706461746545604482015273786974526f6f743a204f4e4c595f42524944474560601b606482015260840160405180910390fd5b600155565b60006020828403121561015f57600080fd5b503591905056fea2646970667358221220c3d468a91666aebe6b0b1c0d82e7915c70f7879e38ddb928138328ccd71d725164736f6c634300080f0033", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000002": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988" }, diff --git a/docker/scripts/genesis_gen_docker.json b/docker/scripts/genesis_gen_docker.json index d7e9ab82f..96e9b520d 100644 --- a/docker/scripts/genesis_gen_docker.json +++ b/docker/scripts/genesis_gen_docker.json @@ -6,7 +6,7 @@ { "address": "0x9D98DeAbC42dd696Deb9e40b4f1CAB7dDBF55988", "pvtKey": "0x00", - "balance": "100000000000000000000000", + "balance": "200000000000000000000000000", "nonce": "0" }, { diff --git a/test/contracts/bridge.test.js b/test/contracts/bridge.test.js index b1ecfe90a..0eaefd02c 100644 --- a/test/contracts/bridge.test.js +++ b/test/contracts/bridge.test.js @@ -67,7 +67,6 @@ describe('Bridge Contract', () => { expect(await bridgeContract.globalExitRootManager()).to.be.equal(globalExitRootManager.address); expect(await bridgeContract.networkID()).to.be.equal(networkIDMainnet); expect(await bridgeContract.poeAddress()).to.be.equal(proofOfEfficiencyAddress); - expect(await bridgeContract.owner()).to.be.equal(deployer.address); }); it('should bridge asset and verify merkle proof', async () => { From e1532085ee13b0b1ecfb0388d5342373cd3d2942 Mon Sep 17 00:00:00 2001 From: krlosMata Date: Mon, 19 Dec 2022 17:26:31 +0100 Subject: [PATCH 48/71] fund aggregator --- deployment/deployPoE_v2-0.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/deployment/deployPoE_v2-0.js b/deployment/deployPoE_v2-0.js index 3b8eb3c46..43cfbc293 100644 --- a/deployment/deployPoE_v2-0.js +++ b/deployment/deployPoE_v2-0.js @@ -259,7 +259,7 @@ async function main() { console.log('networkName:', await proofOfEfficiencyContract.networkName()); console.log('owner:', await proofOfEfficiencyContract.owner()); - // fund account with tokens and ether if it have less than 0.1 ether. + // fund sequencer account with tokens and ether if it have less than 0.1 ether. const balanceEther = await ethers.provider.getBalance(trustedSequencer); const minEtherBalance = ethers.utils.parseEther('0.1'); if (balanceEther < minEtherBalance) { @@ -272,6 +272,16 @@ async function main() { const tokensBalance = ethers.utils.parseEther('100000'); await (await maticTokenContract.transfer(trustedSequencer, tokensBalance)).wait(); + // fund aggregator account with ether if it have less than 0.1 ether. + const balanceEtherAggr = await ethers.provider.getBalance(trustedAggregator); + if (balanceEtherAggr < minEtherBalance) { + const params = { + to: trustedAggregator, + value: minEtherBalance, + }; + await deployer.sendTransaction(params); + } + // approve tokens if (deployParameters.trustedSequencerPvtKey) { const trustedSequencerWallet = new ethers.Wallet(deployParameters.trustedSequencerPvtKey, currentProvider); From 2e5b153e6a49a575d96560fee258482ddd951d50 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Tue, 20 Dec 2022 09:25:55 +0100 Subject: [PATCH 49/71] rebase develop fixes --- compiled-contracts/Bridge.json | 4 ++-- compiled-contracts/BridgeMock.json | 4 ++-- compiled-contracts/ERC20PermitMock.json | 4 ++-- compiled-contracts/GlobalExitRootManager.json | 4 ++-- compiled-contracts/GlobalExitRootManagerL2.json | 4 ++-- .../GlobalExitRootManagerL2Mock.json | 4 ++-- compiled-contracts/GlobalExitRootManagerMock.json | 4 ++-- compiled-contracts/ProofOfEfficiency.json | 4 ++-- compiled-contracts/ProofOfEfficiencyMock.json | 4 ++-- compiled-contracts/TokenWrapped.json | 4 ++-- compiled-contracts/Verifier.json | 4 ++-- contracts/ProofOfEfficiency.sol | 14 +++++++------- contracts/verifiers/Verifier.sol | 12 ++++++------ package.json | 2 +- 14 files changed, 36 insertions(+), 36 deletions(-) diff --git a/compiled-contracts/Bridge.json b/compiled-contracts/Bridge.json index 012ea3de9..dad5c1eb2 100644 --- a/compiled-contracts/Bridge.json +++ b/compiled-contracts/Bridge.json @@ -699,8 +699,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50615977806100206000396000f3fe608060405260043610620001db5760003560e01c806381b1c17411620000ff578063d96a15f71162000095578063e7a5b4ea116200006c578063e7a5b4ea1462000658578063ed6be5c9146200067d578063f2fde38b1462000694578063ff634ed714620006b957600080fd5b8063d96a15f714620005f5578063dbc16976146200060c578063e7375881146200062457600080fd5b8063a08e8a0811620000d6578063a08e8a08146200054f578063aaa13cc21462000579578063bab161bf146200059e578063d02103ca14620005d357600080fd5b806381b1c17414620004d35780638da5cb5b146200050d5780638f611519146200052d57600080fd5b80633ae05047116200017557806346385549116200014c57806346385549146200044c578063655595401462000471578063715018a614620004965780637b6323c114620004ae57600080fd5b80633ae05047146200032e5780633da8168214620003465780633e197043146200036b57600080fd5b80632072f6c511620001b65780632072f6c5146200025157806322e95f2c14620002695780632dfdf0b514620002a7578063318aee3d14620002bf57600080fd5b80630871e97114620001e05780630e1da6c314620001f957806315064c961462000224575b600080fd5b620001f7620001f1366004620031e2565b620006d0565b005b3480156200020657600080fd5b5062000211608d5481565b6040519081526020015b60405180910390f35b3480156200023157600080fd5b50602254620002409060ff1681565b60405190151581526020016200021b565b3480156200025e57600080fd5b50620001f762000c7a565b3480156200027657600080fd5b506200028e620002883660046200326f565b62000d2e565b6040516001600160a01b0390911681526020016200021b565b348015620002b457600080fd5b506200021160215481565b348015620002cc57600080fd5b5062000309620002de366004620032ab565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200021b565b3480156200033b57600080fd5b506200021162000db1565b3480156200035357600080fd5b506200024062000365366004620033ac565b62000ea4565b3480156200037857600080fd5b50620002116200038a3660046200342a565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200045957600080fd5b50620001f76200046b3660046200353b565b62000fa4565b3480156200047e57600080fd5b50620001f76200049036600462003622565b6200122a565b348015620004a357600080fd5b50620001f762001410565b348015620004bb57600080fd5b50620001f7620004cd3660046200353b565b62001426565b348015620004e057600080fd5b506200028e620004f236600462003678565b6089602052600090815260409020546001600160a01b031681565b3480156200051a57600080fd5b506055546001600160a01b03166200028e565b3480156200053a57600080fd5b50608c546200028e906001600160a01b031681565b3480156200055c57600080fd5b5062000566600081565b60405160ff90911681526020016200021b565b3480156200058657600080fd5b506200028e6200059836600462003692565b620019e8565b348015620005ab57600080fd5b50608754620005bd9063ffffffff1681565b60405163ffffffff90911681526020016200021b565b348015620005e057600080fd5b50608b546200028e906001600160a01b031681565b620001f76200060636600462003746565b62001b54565b3480156200061957600080fd5b50620001f762001e08565b3480156200063157600080fd5b50620002406200064336600462003678565b60886020526000908152604090205460ff1681565b3480156200066557600080fd5b50620001f76200067736600462003678565b62001eba565b3480156200068a57600080fd5b50620005bd600081565b348015620006a157600080fd5b50620001f7620006b3366004620032ab565b62001eff565b348015620006c657600080fd5b5062000566600181565b60225460ff1615620007755760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60875463ffffffff90811690861603620007f85760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b60008060606001600160a01b0389166200088d57853414620008835760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200076c565b6000915062000b17565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000974576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af11580156200093b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009619190620037bd565b5060208101518151909450925062000b15565b84156200098957620009898a88888862001f95565b620009a06001600160a01b038b1633308a620025ba565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620009f7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a21919081019062003860565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000a60573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a8a919081019062003860565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ac9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aef919062003899565b60405160200162000b0393929190620038e7565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162000b5998979695949392919062003924565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000c019062002673565b608b546001600160a01b03166333d6247d62000c1c62000db1565b6040518263ffffffff1660e01b815260040162000c3b91815260200190565b600060405180830381600087803b15801562000c5657600080fd5b505af115801562000c6b573d6000803e3d6000fd5b50505050505050505050505050565b608c546001600160a01b0316331462000d225760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c620027d7565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b602154600090819081805b602081101562000e9b578260011660010362000e1c576001816020811062000de85762000de862003990565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000e49565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000e56600284620039ee565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000e929062003a2a565b91505062000dbc565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000f97578160011660010362000f215786818151811062000edf5762000edf62003990565b60200260200101518360405160200162000f03929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000f73565b8287828151811062000f375762000f3762003990565b602002602001015160405160200162000f5a929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000f80600283620039ee565b91508062000f8e8162003a2a565b91505062000eb4565b5050909114949350505050565b60225460ff1615620010455760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6200105b8a8a8a8a8a8a8a8a8a8a6001620028b0565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b0385169084906200109e9089908b90879060240162003a65565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001103919062003a9e565b60006040518083038185875af1925050503d806000811462001142576040519150601f19603f3d011682016040523d82523d6000602084013e62001147565b606091505b5050905080620011bf5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff16158080156200124b5750600054600160ff909116105b80620012675750303b15801562001267575060005460ff166001145b620012db5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200076c565b6000805460ff1916600117905580156200131c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d829055620013a562002c63565b80156200140957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6200141a62002ced565b62000d2c600062002d49565b60225460ff1615620014c75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b620014dd8a8a8a8a8a8a8a8a8a8a6000620028b0565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620015fc57604080516000808252602082019092526001600160a01b03851690849060405162001538919062003a9e565b60006040518083038185875af1925050503d806000811462001577576040519150601f19603f3d011682016040523d82523d6000602084013e6200157c565b606091505b5050905080620015f55760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c45440000000000000000000000000000000000000000000000000060648201526084016200076c565b506200197e565b60875463ffffffff908116908716036200162c57620016266001600160a01b038616848462002db3565b6200197e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620018ea57600080600085806020019051810190620016cc919062003abc565b925092509250600085848484604051620016e6906200314b565b620016f493929190620038e7565b8190604051809103906000f590508015801562001715573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001783573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017a99190620037bd565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620018d89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200197b565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001953573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019799190620037bd565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162001a6b906200314b565b601f1982820381018352601f90910116604081905262001a98908d908d908d908d908d9060200162003b68565b60408051601f198184030181529082905262001ab8929160200162003ba9565b6040516020818303038152906040528051906020012060405160200162001b2e94939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff161562001bf55760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b60875463ffffffff9081169084160362001c785760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b9262001cc59260019263ffffffff9092169133918991899134918a919062003924565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d850152346051850152607180850192909252805180850390920182526091909301909252815191012062001d959062002673565b608b546001600160a01b03166333d6247d62001db062000db1565b6040518263ffffffff1660e01b815260040162001dcf91815260200190565b600060405180830381600087803b15801562001dea57600080fd5b505af115801562001dff573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001eb05760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c62002dfe565b62001ec462002ced565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001f0962002ced565b6001600160a01b03811662001f875760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016200076c565b62001f928162002d49565b50565b600062001fd883838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002ead92505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620022da5760008080808080806200203b896004818d62003bdc565b8101906200204a919062003c08565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620020e15760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0386163014620021615760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b8a8514620021d85760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002286919062003a9e565b6000604051808303816000865af19150503d8060008114620022c5576040519150601f19603f3d011682016040523d82523d6000602084013e620022ca565b606091505b5050505050505050505062001409565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c00000000000000000000000000000000000000000000000000000000146200236d5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200076c565b600080808080808080620023858a6004818e62003bdc565b81019062002394919062003c63565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200242d5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0387163014620024ad5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002564919062003a9e565b6000604051808303816000865af19150503d8060008114620025a3576040519150601f19603f3d011682016040523d82523d6000602084013e620025a8565b606091505b50505050505050505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526200266d9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002eb4565b50505050565b806001620026846020600262003e28565b62002690919062003e36565b60215410620027085760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200076c565b6001602160008282546200271d919062003e50565b909155505060215460005b6020811015620027c757816001166001036200275d57826001826020811062002755576200275562003990565b015550505050565b6001816020811062002773576200277362003990565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620027b09190620039ee565b915080620027be8162003a2a565b91505062002728565b50620027d262003e6b565b505050565b60225460ff1615620028785760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b63ffffffff8a1660009081526088602052604090205460ff16156200293d5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af1158015620029ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620029f0919062003e9a565b9050801580159062002a0f5750608d5462002a0c824262003e36565b10155b62002aa95760405162461bcd60e51b815260206004820152604260248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c49445f4f525f4e4f545f5945545f434c41494d414260648201527f4c45000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b60875463ffffffff87811691161462002b2b5760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000000060648201526084016200076c565b60875460009063ffffffff1662002b4457508862002b47565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d82015260518101899052607180820193909352815180820390930183526091019052805191012062002c15908e8e63ffffffff168462000ea4565b62000c6b5760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c494460448201526064016200076c565b600054610100900460ff1662002ce25760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200076c565b62000d2c3362002d49565b6055546001600160a01b0316331462000d2c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200076c565b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620027d29084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002608565b60225460ff1662002e785760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016200076c565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002f0b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662002fa09092919063ffffffff16565b805190915015620027d2578080602001905181019062002f2c9190620037bd565b620027d25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200076c565b606062002fb1848460008562002fbb565b90505b9392505050565b606082471015620030355760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016200076c565b6001600160a01b0385163b6200308e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200076c565b600080866001600160a01b03168587604051620030ac919062003a9e565b60006040518083038185875af1925050503d8060008114620030eb576040519150601f19603f3d011682016040523d82523d6000602084013e620030f0565b606091505b5091509150620031028282866200310d565b979650505050505050565b606083156200311e57508162002fb4565b8251156200312f5782518084602001fd5b8160405162461bcd60e51b81526004016200076c919062003eb4565b611a788062003eca83390190565b6001600160a01b038116811462001f9257600080fd5b80356200317c8162003159565b919050565b803563ffffffff811681146200317c57600080fd5b60008083601f840112620031a957600080fd5b50813567ffffffffffffffff811115620031c257600080fd5b602083019150836020828501011115620031db57600080fd5b9250929050565b60008060008060008060a08789031215620031fc57600080fd5b8635620032098162003159565b9550620032196020880162003181565b945060408701356200322b8162003159565b935060608701359250608087013567ffffffffffffffff8111156200324f57600080fd5b6200325d89828a0162003196565b979a9699509497509295939492505050565b600080604083850312156200328357600080fd5b6200328e8362003181565b91506020830135620032a08162003159565b809150509250929050565b600060208284031215620032be57600080fd5b813562002fb48162003159565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620033265762003326620032cb565b604052919050565b600082601f8301126200334057600080fd5b8135602067ffffffffffffffff8211156200335f576200335f620032cb565b8160051b62003370828201620032fa565b92835284810182019282810190878511156200338b57600080fd5b83870192505b84831015620031025782358252918301919083019062003391565b60008060008060808587031215620033c357600080fd5b84359350602085013567ffffffffffffffff80821115620033e357600080fd5b620033f1888389016200332e565b94506040870135915080821682146200340957600080fd5b509396929550929360600135925050565b60ff8116811462001f9257600080fd5b600080600080600080600060e0888a0312156200344657600080fd5b873562003453816200341a565b9650620034636020890162003181565b95506040880135620034758162003159565b9450620034856060890162003181565b93506080880135620034978162003159565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620034d157620034d1620032cb565b50601f01601f191660200190565b600082601f830112620034f157600080fd5b8135620035086200350282620034b4565b620032fa565b8181528460208386010111156200351e57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200355c57600080fd5b8a3567ffffffffffffffff808211156200357557600080fd5b620035838e838f016200332e565b9b506200359360208e0162003181565b9a5060408d0135995060608d01359850620035b160808e0162003181565b9750620035c160a08e016200316f565b9650620035d160c08e0162003181565b9550620035e160e08e016200316f565b94506101008d013593506101208d01359150808211156200360157600080fd5b50620036108d828e01620034df565b9150509295989b9194979a5092959850565b600080600080608085870312156200363957600080fd5b620036448562003181565b93506020850135620036568162003159565b92506040850135620036688162003159565b9396929550929360600135925050565b6000602082840312156200368b57600080fd5b5035919050565b600080600080600080600060a0888a031215620036ae57600080fd5b620036b98862003181565b96506020880135620036cb8162003159565b9550604088013567ffffffffffffffff80821115620036e957600080fd5b620036f78b838c0162003196565b909750955060608a01359150808211156200371157600080fd5b50620037208a828b0162003196565b909450925050608088013562003736816200341a565b8091505092959891949750929550565b6000806000606084860312156200375c57600080fd5b620037678462003181565b92506020840135620037798162003159565b9150604084013567ffffffffffffffff8111156200379657600080fd5b620037a486828701620034df565b9150509250925092565b801515811462001f9257600080fd5b600060208284031215620037d057600080fd5b815162002fb481620037ae565b60005b83811015620037fa578181015183820152602001620037e0565b838111156200266d5750506000910152565b600082601f8301126200381e57600080fd5b81516200382f6200350282620034b4565b8181528460208386010111156200384557600080fd5b62003858826020830160208701620037dd565b949350505050565b6000602082840312156200387357600080fd5b815167ffffffffffffffff8111156200388b57600080fd5b62003858848285016200380c565b600060208284031215620038ac57600080fd5b815162002fb4816200341a565b60008151808452620038d3816020860160208601620037dd565b601f01601f19169290920160200192915050565b606081526000620038fc6060830186620038b9565b8281036020840152620039108186620038b9565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c08501526200397782850187620038b9565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003a25577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003a5e5762003a5e620039bf565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003a956060830184620038b9565b95945050505050565b6000825162003ab2818460208701620037dd565b9190910192915050565b60008060006060848603121562003ad257600080fd5b835167ffffffffffffffff8082111562003aeb57600080fd5b62003af9878388016200380c565b9450602086015191508082111562003b1057600080fd5b5062003b1f868287016200380c565b925050604084015162003b32816200341a565b809150509250925092565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003b7e60608301878962003b3d565b828103602084015262003b9381868862003b3d565b91505060ff831660408301529695505050505050565b6000835162003bbd818460208801620037dd565b83519083019062003bd3818360208801620037dd565b01949350505050565b6000808585111562003bed57600080fd5b8386111562003bfb57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003c2457600080fd5b873562003c318162003159565b9650602088013562003c438162003159565b95506040880135945060608801359350608088013562003497816200341a565b600080600080600080600080610100898b03121562003c8157600080fd5b883562003c8e8162003159565b9750602089013562003ca08162003159565b96506040890135955060608901359450608089013562003cc081620037ae565b935060a089013562003cd2816200341a565b979a969950949793969295929450505060c08201359160e0013590565b600181815b8085111562003d4e57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d325762003d32620039bf565b8085161562003d4057918102915b93841c939080029062003cf4565b509250929050565b60008262003d675750600162000dab565b8162003d765750600062000dab565b816001811462003d8f576002811462003d9a5762003dba565b600191505062000dab565b60ff84111562003dae5762003dae620039bf565b50506001821b62000dab565b5060208310610133831016604e8410600b841016171562003ddf575081810a62000dab565b62003deb838362003cef565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003e205762003e20620039bf565b029392505050565b600062002fb4838362003d56565b60008282101562003e4b5762003e4b620039bf565b500390565b6000821982111562003e665762003e66620039bf565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60006020828403121562003ead57600080fd5b5051919050565b60208152600062002fb46020830184620038b956fe60c06040523480156200001157600080fd5b5060405162001a7838038062001a788339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516115be620004ba600039600061053001526000818161036f01526104fa01526115be6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b60405161019191906112d5565b60405180910390f35b6101ad6101a8366004611371565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad61020436600461139b565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad610276366004611371565b610552565b6101ad610289366004611371565b61059e565b6101c161029c3660046113d7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d23660046113d7565b60066020526000908152604090205481565b610184610645565b6101ad6102fa366004611371565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad610352366004611371565b6106ed565b6101ad610365366004611371565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f3660046113f9565b6107b2565b005b6101c16103b436600461146c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6060600380546104379061149f565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061149f565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f56565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611521565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c838361101e565b50600192915050565b6060600480546104379061149f565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c8383611124565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661088183611539565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ee3908490611521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4991815260200190565b60405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f81610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166110815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b80600260008282546110939190611521565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906110cd908490611521565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156112495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611285908490611571565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c27565b600060208083528351808285015260005b81811015611302578581018301518582016040015282016112e6565b81811115611314576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136c57600080fd5b919050565b6000806040838503121561138457600080fd5b61138d83611348565b946020939093013593505050565b6000806000606084860312156113b057600080fd5b6113b984611348565b92506113c760208501611348565b9150604084013590509250925092565b6000602082840312156113e957600080fd5b6113f282611348565b9392505050565b600080600080600080600060e0888a03121561141457600080fd5b61141d88611348565b965061142b60208901611348565b95506040880135945060608801359350608088013560ff8116811461144f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561147f57600080fd5b61148883611348565b915061149660208401611348565b90509250929050565b600181811c908216806114b357607f821691505b6020821081036114ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611534576115346114f2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156a5761156a6114f2565b5060010190565b600082821015611583576115836114f2565b50039056fea264697066735822122074c1369adb4b03ecf20b18930bac9df5d9a48b4602516485c969475d7cadf1ac64736f6c634300080f0033a2646970667358221220bf5e197d27d3e88e08a09a330ab74adddc8922126a8a830ea281219fe236199864736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001db5760003560e01c806381b1c17411620000ff578063d96a15f71162000095578063e7a5b4ea116200006c578063e7a5b4ea1462000658578063ed6be5c9146200067d578063f2fde38b1462000694578063ff634ed714620006b957600080fd5b8063d96a15f714620005f5578063dbc16976146200060c578063e7375881146200062457600080fd5b8063a08e8a0811620000d6578063a08e8a08146200054f578063aaa13cc21462000579578063bab161bf146200059e578063d02103ca14620005d357600080fd5b806381b1c17414620004d35780638da5cb5b146200050d5780638f611519146200052d57600080fd5b80633ae05047116200017557806346385549116200014c57806346385549146200044c578063655595401462000471578063715018a614620004965780637b6323c114620004ae57600080fd5b80633ae05047146200032e5780633da8168214620003465780633e197043146200036b57600080fd5b80632072f6c511620001b65780632072f6c5146200025157806322e95f2c14620002695780632dfdf0b514620002a7578063318aee3d14620002bf57600080fd5b80630871e97114620001e05780630e1da6c314620001f957806315064c961462000224575b600080fd5b620001f7620001f1366004620031e2565b620006d0565b005b3480156200020657600080fd5b5062000211608d5481565b6040519081526020015b60405180910390f35b3480156200023157600080fd5b50602254620002409060ff1681565b60405190151581526020016200021b565b3480156200025e57600080fd5b50620001f762000c7a565b3480156200027657600080fd5b506200028e620002883660046200326f565b62000d2e565b6040516001600160a01b0390911681526020016200021b565b348015620002b457600080fd5b506200021160215481565b348015620002cc57600080fd5b5062000309620002de366004620032ab565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200021b565b3480156200033b57600080fd5b506200021162000db1565b3480156200035357600080fd5b506200024062000365366004620033ac565b62000ea4565b3480156200037857600080fd5b50620002116200038a3660046200342a565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b3480156200045957600080fd5b50620001f76200046b3660046200353b565b62000fa4565b3480156200047e57600080fd5b50620001f76200049036600462003622565b6200122a565b348015620004a357600080fd5b50620001f762001410565b348015620004bb57600080fd5b50620001f7620004cd3660046200353b565b62001426565b348015620004e057600080fd5b506200028e620004f236600462003678565b6089602052600090815260409020546001600160a01b031681565b3480156200051a57600080fd5b506055546001600160a01b03166200028e565b3480156200053a57600080fd5b50608c546200028e906001600160a01b031681565b3480156200055c57600080fd5b5062000566600081565b60405160ff90911681526020016200021b565b3480156200058657600080fd5b506200028e6200059836600462003692565b620019e8565b348015620005ab57600080fd5b50608754620005bd9063ffffffff1681565b60405163ffffffff90911681526020016200021b565b348015620005e057600080fd5b50608b546200028e906001600160a01b031681565b620001f76200060636600462003746565b62001b54565b3480156200061957600080fd5b50620001f762001e08565b3480156200063157600080fd5b50620002406200064336600462003678565b60886020526000908152604090205460ff1681565b3480156200066557600080fd5b50620001f76200067736600462003678565b62001eba565b3480156200068a57600080fd5b50620005bd600081565b348015620006a157600080fd5b50620001f7620006b3366004620032ab565b62001eff565b348015620006c657600080fd5b5062000566600181565b60225460ff1615620007755760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60875463ffffffff90811690861603620007f85760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b60008060606001600160a01b0389166200088d57853414620008835760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c5545000000000000000000000000000000000060648201526084016200076c565b6000915062000b17565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562000974576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af11580156200093b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009619190620037bd565b5060208101518151909450925062000b15565b84156200098957620009898a88888862001f95565b620009a06001600160a01b038b1633308a620025ba565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620009f7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a21919081019062003860565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000a60573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000a8a919081019062003860565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ac9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aef919062003899565b60405160200162000b0393929190620038e7565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162000b5998979695949392919062003924565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a9052607180820193909352815180820390930183526091019052805191012062000c019062002673565b608b546001600160a01b03166333d6247d62000c1c62000db1565b6040518263ffffffff1660e01b815260040162000c3b91815260200190565b600060405180830381600087803b15801562000c5657600080fd5b505af115801562000c6b573d6000803e3d6000fd5b50505050505050505050505050565b608c546001600160a01b0316331462000d225760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c620027d7565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b602154600090819081805b602081101562000e9b578260011660010362000e1c576001816020811062000de85762000de862003990565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000e49565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000e56600284620039ee565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000e929062003a2a565b91505062000dbc565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000f97578160011660010362000f215786818151811062000edf5762000edf62003990565b60200260200101518360405160200162000f03929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000f73565b8287828151811062000f375762000f3762003990565b602002602001015160405160200162000f5a929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000f80600283620039ee565b91508062000f8e8162003a2a565b91505062000eb4565b5050909114949350505050565b60225460ff1615620010455760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6200105b8a8a8a8a8a8a8a8a8a8a6001620028b0565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b0385169084906200109e9089908b90879060240162003a65565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162001103919062003a9e565b60006040518083038185875af1925050503d806000811462001142576040519150601f19603f3d011682016040523d82523d6000602084013e62001147565b606091505b5050905080620011bf5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff16158080156200124b5750600054600160ff909116105b80620012675750303b15801562001267575060005460ff166001145b620012db5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016200076c565b6000805460ff1916600117905580156200131c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d829055620013a562002c63565b80156200140957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6200141a62002ced565b62000d2c600062002d49565b60225460ff1615620014c75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b620014dd8a8a8a8a8a8a8a8a8a8a6000620028b0565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620015fc57604080516000808252602082019092526001600160a01b03851690849060405162001538919062003a9e565b60006040518083038185875af1925050503d806000811462001577576040519150601f19603f3d011682016040523d82523d6000602084013e6200157c565b606091505b5050905080620015f55760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c45440000000000000000000000000000000000000000000000000060648201526084016200076c565b506200197e565b60875463ffffffff908116908716036200162c57620016266001600160a01b038616848462002db3565b6200197e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620018ea57600080600085806020019051810190620016cc919062003abc565b925092509250600085848484604051620016e6906200314b565b620016f493929190620038e7565b8190604051809103906000f590508015801562001715573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001783573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017a99190620037bd565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620018d89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200197b565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001953573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019799190620037bd565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162001a6b906200314b565b601f1982820381018352601f90910116604081905262001a98908d908d908d908d908d9060200162003b68565b60408051601f198184030181529082905262001ab8929160200162003ba9565b6040516020818303038152906040528051906020012060405160200162001b2e94939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff161562001bf55760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b60875463ffffffff9081169084160362001c785760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c460000000000000000000000000000000000000000000060648201526084016200076c565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b9262001cc59260019263ffffffff9092169133918991899134918a919062003924565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d850152346051850152607180850192909252805180850390920182526091909301909252815191012062001d959062002673565b608b546001600160a01b03166333d6247d62001db062000db1565b6040518263ffffffff1660e01b815260040162001dcf91815260200190565b600060405180830381600087803b15801562001dea57600080fd5b505af115801562001dff573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001eb05760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a4016200076c565b62000d2c62002dfe565b62001ec462002ced565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001f0962002ced565b6001600160a01b03811662001f875760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016200076c565b62001f928162002d49565b50565b600062001fd883838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062002ead92505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601620022da5760008080808080806200203b896004818d62003bdc565b8101906200204a919062003c08565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620020e15760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0386163014620021615760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b8a8514620021d85760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d415443480000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002286919062003a9e565b6000604051808303816000865af19150503d8060008114620022c5576040519150601f19603f3d011682016040523d82523d6000602084013e620022ca565b606091505b5050505050505050505062001409565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c00000000000000000000000000000000000000000000000000000000146200236d5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c0060448201526064016200076c565b600080808080808080620023858a6004818e62003bdc565b81019062002394919062003c63565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200242d5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e4445520000000000000000000000000000000060648201526084016200076c565b6001600160a01b0387163014620024ad5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f5448495300000000000000000000000000000000000000000000000000000060648201526084016200076c565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002564919062003a9e565b6000604051808303816000865af19150503d8060008114620025a3576040519150601f19603f3d011682016040523d82523d6000602084013e620025a8565b606091505b50505050505050505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526200266d9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262002eb4565b50505050565b806001620026846020600262003e28565b62002690919062003e36565b60215410620027085760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c0000000000000000000000000000000000000000000060648201526084016200076c565b6001602160008282546200271d919062003e50565b909155505060215460005b6020811015620027c757816001166001036200275d57826001826020811062002755576200275562003990565b015550505050565b6001816020811062002773576200277362003990565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620027b09190620039ee565b915080620027be8162003a2a565b91505062002728565b50620027d262003e6b565b505050565b60225460ff1615620028785760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b63ffffffff8a1660009081526088602052604090205460ff16156200293d5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d45440000000000000000000000000000000000000000000000000000000060648201526084016200076c565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af1158015620029ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620029f0919062003e9a565b9050801580159062002a0f5750608d5462002a0c824262003e36565b10155b62002aa95760405162461bcd60e51b815260206004820152604260248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c49445f4f525f4e4f545f5945545f434c41494d414260648201527f4c45000000000000000000000000000000000000000000000000000000000000608482015260a4016200076c565b60875463ffffffff87811691161462002b2b5760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d4154434800000000000000000060648201526084016200076c565b60875460009063ffffffff1662002b4457508862002b47565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d82015260518101899052607180820193909352815180820390930183526091019052805191012062002c15908e8e63ffffffff168462000ea4565b62000c6b5760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c494460448201526064016200076c565b600054610100900460ff1662002ce25760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016200076c565b62000d2c3362002d49565b6055546001600160a01b0316331462000d2c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200076c565b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620027d29084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640162002608565b60225460ff1662002e785760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016200076c565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002f0b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662002fa09092919063ffffffff16565b805190915015620027d2578080602001905181019062002f2c9190620037bd565b620027d25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016200076c565b606062002fb1848460008562002fbb565b90505b9392505050565b606082471015620030355760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016200076c565b6001600160a01b0385163b6200308e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200076c565b600080866001600160a01b03168587604051620030ac919062003a9e565b60006040518083038185875af1925050503d8060008114620030eb576040519150601f19603f3d011682016040523d82523d6000602084013e620030f0565b606091505b5091509150620031028282866200310d565b979650505050505050565b606083156200311e57508162002fb4565b8251156200312f5782518084602001fd5b8160405162461bcd60e51b81526004016200076c919062003eb4565b611a788062003eca83390190565b6001600160a01b038116811462001f9257600080fd5b80356200317c8162003159565b919050565b803563ffffffff811681146200317c57600080fd5b60008083601f840112620031a957600080fd5b50813567ffffffffffffffff811115620031c257600080fd5b602083019150836020828501011115620031db57600080fd5b9250929050565b60008060008060008060a08789031215620031fc57600080fd5b8635620032098162003159565b9550620032196020880162003181565b945060408701356200322b8162003159565b935060608701359250608087013567ffffffffffffffff8111156200324f57600080fd5b6200325d89828a0162003196565b979a9699509497509295939492505050565b600080604083850312156200328357600080fd5b6200328e8362003181565b91506020830135620032a08162003159565b809150509250929050565b600060208284031215620032be57600080fd5b813562002fb48162003159565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620033265762003326620032cb565b604052919050565b600082601f8301126200334057600080fd5b8135602067ffffffffffffffff8211156200335f576200335f620032cb565b8160051b62003370828201620032fa565b92835284810182019282810190878511156200338b57600080fd5b83870192505b84831015620031025782358252918301919083019062003391565b60008060008060808587031215620033c357600080fd5b84359350602085013567ffffffffffffffff80821115620033e357600080fd5b620033f1888389016200332e565b94506040870135915080821682146200340957600080fd5b509396929550929360600135925050565b60ff8116811462001f9257600080fd5b600080600080600080600060e0888a0312156200344657600080fd5b873562003453816200341a565b9650620034636020890162003181565b95506040880135620034758162003159565b9450620034856060890162003181565b93506080880135620034978162003159565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620034d157620034d1620032cb565b50601f01601f191660200190565b600082601f830112620034f157600080fd5b8135620035086200350282620034b4565b620032fa565b8181528460208386010111156200351e57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200355c57600080fd5b8a3567ffffffffffffffff808211156200357557600080fd5b620035838e838f016200332e565b9b506200359360208e0162003181565b9a5060408d0135995060608d01359850620035b160808e0162003181565b9750620035c160a08e016200316f565b9650620035d160c08e0162003181565b9550620035e160e08e016200316f565b94506101008d013593506101208d01359150808211156200360157600080fd5b50620036108d828e01620034df565b9150509295989b9194979a5092959850565b600080600080608085870312156200363957600080fd5b620036448562003181565b93506020850135620036568162003159565b92506040850135620036688162003159565b9396929550929360600135925050565b6000602082840312156200368b57600080fd5b5035919050565b600080600080600080600060a0888a031215620036ae57600080fd5b620036b98862003181565b96506020880135620036cb8162003159565b9550604088013567ffffffffffffffff80821115620036e957600080fd5b620036f78b838c0162003196565b909750955060608a01359150808211156200371157600080fd5b50620037208a828b0162003196565b909450925050608088013562003736816200341a565b8091505092959891949750929550565b6000806000606084860312156200375c57600080fd5b620037678462003181565b92506020840135620037798162003159565b9150604084013567ffffffffffffffff8111156200379657600080fd5b620037a486828701620034df565b9150509250925092565b801515811462001f9257600080fd5b600060208284031215620037d057600080fd5b815162002fb481620037ae565b60005b83811015620037fa578181015183820152602001620037e0565b838111156200266d5750506000910152565b600082601f8301126200381e57600080fd5b81516200382f6200350282620034b4565b8181528460208386010111156200384557600080fd5b62003858826020830160208701620037dd565b949350505050565b6000602082840312156200387357600080fd5b815167ffffffffffffffff8111156200388b57600080fd5b62003858848285016200380c565b600060208284031215620038ac57600080fd5b815162002fb4816200341a565b60008151808452620038d3816020860160208601620037dd565b601f01601f19169290920160200192915050565b606081526000620038fc6060830186620038b9565b8281036020840152620039108186620038b9565b91505060ff83166040830152949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c08501526200397782850187620038b9565b925080851660e085015250509998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008262003a25577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003a5e5762003a5e620039bf565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003a956060830184620038b9565b95945050505050565b6000825162003ab2818460208701620037dd565b9190910192915050565b60008060006060848603121562003ad257600080fd5b835167ffffffffffffffff8082111562003aeb57600080fd5b62003af9878388016200380c565b9450602086015191508082111562003b1057600080fd5b5062003b1f868287016200380c565b925050604084015162003b32816200341a565b809150509250925092565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003b7e60608301878962003b3d565b828103602084015262003b9381868862003b3d565b91505060ff831660408301529695505050505050565b6000835162003bbd818460208801620037dd565b83519083019062003bd3818360208801620037dd565b01949350505050565b6000808585111562003bed57600080fd5b8386111562003bfb57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003c2457600080fd5b873562003c318162003159565b9650602088013562003c438162003159565b95506040880135945060608801359350608088013562003497816200341a565b600080600080600080600080610100898b03121562003c8157600080fd5b883562003c8e8162003159565b9750602089013562003ca08162003159565b96506040890135955060608901359450608089013562003cc081620037ae565b935060a089013562003cd2816200341a565b979a969950949793969295929450505060c08201359160e0013590565b600181815b8085111562003d4e57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003d325762003d32620039bf565b8085161562003d4057918102915b93841c939080029062003cf4565b509250929050565b60008262003d675750600162000dab565b8162003d765750600062000dab565b816001811462003d8f576002811462003d9a5762003dba565b600191505062000dab565b60ff84111562003dae5762003dae620039bf565b50506001821b62000dab565b5060208310610133831016604e8410600b841016171562003ddf575081810a62000dab565b62003deb838362003cef565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003e205762003e20620039bf565b029392505050565b600062002fb4838362003d56565b60008282101562003e4b5762003e4b620039bf565b500390565b6000821982111562003e665762003e66620039bf565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60006020828403121562003ead57600080fd5b5051919050565b60208152600062002fb46020830184620038b956fe60c06040523480156200001157600080fd5b5060405162001a7838038062001a788339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516115be620004ba600039600061053001526000818161036f01526104fa01526115be6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b60405161019191906112d5565b60405180910390f35b6101ad6101a8366004611371565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad61020436600461139b565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad610276366004611371565b610552565b6101ad610289366004611371565b61059e565b6101c161029c3660046113d7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d23660046113d7565b60066020526000908152604090205481565b610184610645565b6101ad6102fa366004611371565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad610352366004611371565b6106ed565b6101ad610365366004611371565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f3660046113f9565b6107b2565b005b6101c16103b436600461146c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6060600380546104379061149f565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061149f565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f56565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611521565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c838361101e565b50600192915050565b6060600480546104379061149f565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c8383611124565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661088183611539565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ee3908490611521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4991815260200190565b60405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f81610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166110815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b80600260008282546110939190611521565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906110cd908490611521565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156112495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611285908490611571565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c27565b600060208083528351808285015260005b81811015611302578581018301518582016040015282016112e6565b81811115611314576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136c57600080fd5b919050565b6000806040838503121561138457600080fd5b61138d83611348565b946020939093013593505050565b6000806000606084860312156113b057600080fd5b6113b984611348565b92506113c760208501611348565b9150604084013590509250925092565b6000602082840312156113e957600080fd5b6113f282611348565b9392505050565b600080600080600080600060e0888a03121561141457600080fd5b61141d88611348565b965061142b60208901611348565b95506040880135945060608801359350608088013560ff8116811461144f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561147f57600080fd5b61148883611348565b915061149660208401611348565b90509250929050565b600181811c908216806114b357607f821691505b6020821081036114ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611534576115346114f2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156a5761156a6114f2565b5060010190565b600082821015611583576115836114f2565b50039056fea264697066735822122074c1369adb4b03ecf20b18930bac9df5d9a48b4602516485c969475d7cadf1ac64736f6c634300080f0033a2646970667358221220bf5e197d27d3e88e08a09a330ab74adddc8922126a8a830ea281219fe236199864736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50614744806100206000396000f3fe608060405260043610620001675760003560e01c806381b1c17411620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b806381b1c17414620003735780638f61151914620003ad5780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b80633ae05047116200011e5780633ae0504714620002a25780633da8168214620002ba5780633e19704314620002df578063463855491462000304578063647c576c14620003295780637b6323c1146200034e57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d3660046200237f565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b50620001836200096d565b348015620001db57600080fd5b50620001f3620001ed3660046200240c565b620009a6565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002448565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b5062000224620009f9565b348015620002c757600080fd5b50620001a1620002d936600462002537565b62000aec565b348015620002ec57600080fd5b5062000224620002fe366004620025b5565b62000bee565b3480156200031157600080fd5b506200018362000323366004620026c6565b62000c7b565b3480156200033657600080fd5b506200018362000348366004620027ad565b62000e14565b3480156200035b57600080fd5b50620001836200036d366004620026c6565b62000f73565b3480156200038057600080fd5b50620001f362000392366004620027fd565b6024602052600090815260409020546001600160a01b031681565b348015620003ba57600080fd5b50602754620001f3906001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620027fd565b62001414565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002817565b62001459565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620028cb565b62001570565b348015620004c357600080fd5b5062000183620016c7565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620027fd565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002933565b60405180910390fd5b60225463ffffffff6101009091048116908616036200058f5760405162461bcd60e51b815260040162000553906200299b565b60008060606001600160a01b03891662000616578534146200060c5760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201526e4d415443485f4d53475f56414c554560881b606482015260840162000553565b6000915062000887565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620006e457604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af1158015620006ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006d19190620029f4565b5060208101518151909450925062000885565b8415620006f957620006f98a888888620016fe565b620007106001600160a01b038b1633308a62001b02565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000767573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000791919081019062002a8f565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007d0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007fa919081019062002a8f565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000839573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200085f919062002ac8565b604051602001620008739392919062002b16565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b87602154604051620008c998979695949392919062002b53565b60405180910390a1620008f4620008ee600084868c8c8c888051906020012062000bee565b62001b6f565b6026546001600160a01b03166333d6247d6200090f620009f9565b6040518263ffffffff1660e01b81526004016200092e91815260200190565b600060405180830381600087803b1580156200094957600080fd5b505af11580156200095e573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b031633146200099a5760405162461bcd60e51b8152600401620005539062002bc0565b620009a462001cc0565b565b6000602460008484604051602001620009c192919062002c31565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000ae3578260011660010362000a64576001816020811062000a305762000a3062002c5b565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000a91565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a9e60028462002c9d565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000ada9062002cb4565b91505062000a04565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000bdf578160011660010362000b695786818151811062000b275762000b2762002c5b565b60200260200101518360405160200162000b4b929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000bbb565b8287828151811062000b7f5762000b7f62002c5b565b602002602001015160405160200162000ba2929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000bc860028362002c9d565b91508062000bd68162002cb4565b91505062000afc565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000ca15760405162461bcd60e51b8152600401620005539062002933565b62000cb78a8a8a8a8a8a8a8a8a8a600162001d1e565b62000cc88963ffffffff1662001faf565b6000836001600160a01b03168387898560405160240162000cec9392919062002cd0565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d23919062002d0b565b60006040518083038185875af1925050503d806000811462000d62576040519150601f19603f3d011682016040523d82523d6000602084013e62000d67565b606091505b505090508062000dc65760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f46416044820152631253115160e21b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000dff95949392919062002d29565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000e355750600054600160ff909116105b8062000e515750303b15801562000e51575060005460ff166001145b62000eb65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000eda576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000f6d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff161562000f995760405162461bcd60e51b8152600401620005539062002933565b62000faf8a8a8a8a8a8a8a8a8a8a600062001d1e565b62000fc08963ffffffff1662001faf565b6001600160a01b038516620010a957604080516000808252602082019092526001600160a01b03851690849060405162000ffb919062002d0b565b60006040518083038185875af1925050503d80600081146200103a576040519150601f19603f3d011682016040523d82523d6000602084013e6200103f565b606091505b5050905080620010a25760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201526617d1905253115160ca1b606482015260840162000553565b50620013c7565b60225463ffffffff610100909104811690871603620010de57620010d86001600160a01b038616848462001ff1565b620013c7565b60008686604051602001620010f592919062002c31565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200134c5760008060008580602001905181019062001147919062002d60565b9250925092506000858484846040516200116190620022e5565b6200116f9392919062002b16565b8190604051809103906000f590508015801562001190573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af1158015620011e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200120b9190620029f4565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200133a9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620013c4565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200139c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013c29190620029f4565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200140095949392919062002d29565b60405180910390a150505050505050505050565b600080620014256101008462002c9d565b90506000620014376101008562002dd6565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200147192919062002c31565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014a490620022e5565b601f1982820381018352601f909101166040819052620014d1908d908d908d908d908d9060200162002e16565b60408051601f1981840301815290829052620014f1929160200162002e57565b604051602081830303815290604052805190602001206040516020016200154a94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015965760405162461bcd60e51b8152600401620005539062002933565b60225463ffffffff610100909104811690841603620015c95760405162461bcd60e51b815260040162000553906200299b565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff1633868634876021546040516200161d98979695949392919062002b53565b60405180910390a162001654620008ee6001602260019054906101000a900463ffffffff1633878734888051906020012062000bee565b6026546001600160a01b03166333d6247d6200166f620009f9565b6040518263ffffffff1660e01b81526004016200168e91815260200190565b600060405180830381600087803b158015620016a957600080fd5b505af1158015620016be573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620016f45760405162461bcd60e51b8152600401620005539062002bc0565b620009a462002023565b60006200174183838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620020d292505050565b9050632afa533160e01b6001600160e01b03198216016200192a57600080808080808062001773896004818d62002e8a565b81019062001782919062002eb6565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620017c45760405162461bcd60e51b8152600401620005539062002f11565b6001600160a01b0386163014620017ef5760405162461bcd60e51b8152600401620005539062002f61565b8a8514620018565760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201526c09e8aa6be9c9ea8be9a82a8869609b1b606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620018d6919062002d0b565b6000604051808303816000865af19150503d806000811462001915576040519150601f19603f3d011682016040523d82523d6000602084013e6200191a565b606091505b5050505050505050505062001afb565b6001600160e01b031981166323f2ebc360e21b146200198c5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000553565b600080808080808080620019a48a6004818e62002e8a565b810190620019b3919062002fa6565b97509750975097509750975097509750336001600160a01b0316886001600160a01b031614620019f75760405162461bcd60e51b8152600401620005539062002f11565b6001600160a01b038716301462001a225760405162461bcd60e51b8152600401620005539062002f61565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001aab919062002d0b565b6000604051808303816000865af19150503d806000811462001aea576040519150601f19603f3d011682016040523d82523d6000602084013e62001aef565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000f6d9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620020d9565b80600162001b80602060026200312f565b62001b8c91906200313d565b6021541062001bf15760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001c06919062003157565b909155505060215460005b602081101562001cb0578160011660010362001c4657826001826020811062001c3e5762001c3e62002c5b565b015550505050565b6001816020811062001c5c5762001c5c62002c5b565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001c99919062002c9d565b91508062001ca78162002cb4565b91505062001c11565b5062001cbb62003172565b505050565b60225460ff161562001ce65760405162461bcd60e51b8152600401620005539062002933565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001d2f8a63ffffffff1662001414565b1562001d8a5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c416044820152631253515160e21b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001dfe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e24919062003188565b90508060000362001e8e5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201526c17d493d3d517d2539590531251609a1b606482015260840162000553565b60225463ffffffff878116610100909204161462001f155760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d41544348000000000000000000606482015260840162000553565b602254600090610100900463ffffffff1662001f3357508862001f36565b50895b62001f6162001f52848b8b8b8b8b8b8051906020012062000bee565b8e8e63ffffffff168462000aec565b6200095e5760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c4944604482015260640162000553565b600062001fbf6101008362002c9d565b9050600062001fd16101008462002dd6565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001cbb90849063a9059cbb60e01b9060640162001b37565b60225460ff166200209d5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002130826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620021b29092919063ffffffff16565b80519091501562001cbb5780806020019051810190620021519190620029f4565b62001cbb5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000be6848460008585600080866001600160a01b03168587604051620021dc919062002d0b565b60006040518083038185875af1925050503d80600081146200221b576040519150601f19603f3d011682016040523d82523d6000602084013e62002220565b606091505b509150915062002233878383876200223e565b979650505050505050565b60608315620022b2578251600003620022aa576001600160a01b0385163b620022aa5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000be6565b62000be68383815115620022c95781518083602001fd5b8060405162461bcd60e51b8152600401620005539190620031a2565b61155780620031b883390190565b6001600160a01b03811681146200230957600080fd5b50565b80356200231981620022f3565b919050565b803563ffffffff811681146200231957600080fd5b60008083601f8401126200234657600080fd5b50813567ffffffffffffffff8111156200235f57600080fd5b6020830191508360208285010111156200237857600080fd5b9250929050565b60008060008060008060a087890312156200239957600080fd5b8635620023a681620022f3565b9550620023b6602088016200231e565b94506040870135620023c881620022f3565b935060608701359250608087013567ffffffffffffffff811115620023ec57600080fd5b620023fa89828a0162002333565b979a9699509497509295939492505050565b600080604083850312156200242057600080fd5b6200242b836200231e565b915060208301356200243d81620022f3565b809150509250929050565b6000602082840312156200245b57600080fd5b81356200246881620022f3565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620024b157620024b16200246f565b604052919050565b600082601f830112620024cb57600080fd5b8135602067ffffffffffffffff821115620024ea57620024ea6200246f565b8160051b620024fb82820162002485565b92835284810182019282810190878511156200251657600080fd5b83870192505b8483101562002233578235825291830191908301906200251c565b600080600080608085870312156200254e57600080fd5b84359350602085013567ffffffffffffffff808211156200256e57600080fd5b6200257c88838901620024b9565b94506040870135915080821682146200259457600080fd5b509396929550929360600135925050565b60ff811681146200230957600080fd5b600080600080600080600060e0888a031215620025d157600080fd5b8735620025de81620025a5565b9650620025ee602089016200231e565b955060408801356200260081620022f3565b945062002610606089016200231e565b935060808801356200262281620022f3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200265c576200265c6200246f565b50601f01601f191660200190565b600082601f8301126200267c57600080fd5b8135620026936200268d826200263f565b62002485565b818152846020838601011115620026a957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620026e757600080fd5b8a3567ffffffffffffffff808211156200270057600080fd5b6200270e8e838f01620024b9565b9b506200271e60208e016200231e565b9a5060408d0135995060608d013598506200273c60808e016200231e565b97506200274c60a08e016200230c565b96506200275c60c08e016200231e565b95506200276c60e08e016200230c565b94506101008d013593506101208d01359150808211156200278c57600080fd5b506200279b8d828e016200266a565b9150509295989b9194979a5092959850565b600080600060608486031215620027c357600080fd5b620027ce846200231e565b92506020840135620027e081620022f3565b91506040840135620027f281620022f3565b809150509250925092565b6000602082840312156200281057600080fd5b5035919050565b600080600080600080600060a0888a0312156200283357600080fd5b6200283e886200231e565b965060208801356200285081620022f3565b9550604088013567ffffffffffffffff808211156200286e57600080fd5b6200287c8b838c0162002333565b909750955060608a01359150808211156200289657600080fd5b50620028a58a828b0162002333565b9094509250506080880135620028bb81620025a5565b8091505092959891949750929550565b600080600060608486031215620028e157600080fd5b620028ec846200231e565b92506020840135620028fe81620022f3565b9150604084013567ffffffffffffffff8111156200291b57600080fd5b62002929868287016200266a565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b6020808252602a908201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e546040820152692fa122afa4aa29a2a62360b11b606082015260800190565b80151581146200230957600080fd5b60006020828403121562002a0757600080fd5b81516200246881620029e5565b60005b8381101562002a3157818101518382015260200162002a17565b8381111562000f6d5750506000910152565b600082601f83011262002a5557600080fd5b815162002a666200268d826200263f565b81815284602083860101111562002a7c57600080fd5b62000be682602083016020870162002a14565b60006020828403121562002aa257600080fd5b815167ffffffffffffffff81111562002aba57600080fd5b62000be68482850162002a43565b60006020828403121562002adb57600080fd5b81516200246881620025a5565b6000815180845262002b0281602086016020860162002a14565b601f01601f19169290920160200192915050565b60608152600062002b2b606083018662002ae8565b828103602084015262002b3f818662002ae8565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002ba78483018762002ae8565b925080851660e085015250509998505050505050505050565b6020808252604b908201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660408201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60608201526a18de4818dbdb9d1c9858dd60aa1b608082015260a00190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002caf5762002caf62002c71565b500490565b60006001820162002cc95762002cc962002c87565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d029083018462002ae8565b95945050505050565b6000825162002d1f81846020870162002a14565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002d7657600080fd5b835167ffffffffffffffff8082111562002d8f57600080fd5b62002d9d8783880162002a43565b9450602086015191508082111562002db457600080fd5b5062002dc38682870162002a43565b9250506040840151620027f281620025a5565b60008262002de85762002de862002c71565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e2c60608301878962002ded565b828103602084015262002e4181868862002ded565b91505060ff831660408301529695505050505050565b6000835162002e6b81846020880162002a14565b83519083019062002e8181836020880162002a14565b01949350505050565b6000808585111562002e9b57600080fd5b8386111562002ea957600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002ed257600080fd5b873562002edf81620022f3565b9650602088013562002ef181620022f3565b9550604088013594506060880135935060808801356200262281620025a5565b60208082526030908201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560408201526f29aa2fa122afaa2422afa9a2a72222a960811b606082015260800190565b60208082526025908201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f42456040820152645f5448495360d81b606082015260800190565b600080600080600080600080610100898b03121562002fc457600080fd5b883562002fd181620022f3565b9750602089013562002fe381620022f3565b9650604089013595506060890135945060808901356200300381620029e5565b935060a08901356200301581620025a5565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200307357816000190482111562003057576200305762002c87565b808516156200306557918102915b93841c939080029062003037565b509250929050565b6000826200308c57506001620009f3565b816200309b57506000620009f3565b8160018114620030b45760028114620030bf57620030df565b6001915050620009f3565b60ff841115620030d357620030d362002c87565b50506001821b620009f3565b5060208310610133831016604e8410600b841016171562003104575081810a620009f3565b62003110838362003032565b806000190482111562003127576200312762002c87565b029392505050565b60006200246883836200307b565b60008282101562003152576200315262002c87565b500390565b600082198211156200316d576200316d62002c87565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200319b57600080fd5b5051919050565b60208152600062002468602083018462002ae856fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b14f80bfcbda3f7be499de7c67ec81639549928b9cee16384da9f2fb8c22dce64736f6c634300080f0033a264697066735822122033c20339edf34bfd82367a6744e7273fc5475f2279e1521b62542680e057cc4164736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001675760003560e01c806381b1c17411620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b806381b1c17414620003735780638f61151914620003ad5780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b80633ae05047116200011e5780633ae0504714620002a25780633da8168214620002ba5780633e19704314620002df578063463855491462000304578063647c576c14620003295780637b6323c1146200034e57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d3660046200237f565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b50620001836200096d565b348015620001db57600080fd5b50620001f3620001ed3660046200240c565b620009a6565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002448565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b5062000224620009f9565b348015620002c757600080fd5b50620001a1620002d936600462002537565b62000aec565b348015620002ec57600080fd5b5062000224620002fe366004620025b5565b62000bee565b3480156200031157600080fd5b506200018362000323366004620026c6565b62000c7b565b3480156200033657600080fd5b506200018362000348366004620027ad565b62000e14565b3480156200035b57600080fd5b50620001836200036d366004620026c6565b62000f73565b3480156200038057600080fd5b50620001f362000392366004620027fd565b6024602052600090815260409020546001600160a01b031681565b348015620003ba57600080fd5b50602754620001f3906001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620027fd565b62001414565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002817565b62001459565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620028cb565b62001570565b348015620004c357600080fd5b5062000183620016c7565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620027fd565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002933565b60405180910390fd5b60225463ffffffff6101009091048116908616036200058f5760405162461bcd60e51b815260040162000553906200299b565b60008060606001600160a01b03891662000616578534146200060c5760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201526e4d415443485f4d53475f56414c554560881b606482015260840162000553565b6000915062000887565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620006e457604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af1158015620006ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006d19190620029f4565b5060208101518151909450925062000885565b8415620006f957620006f98a888888620016fe565b620007106001600160a01b038b1633308a62001b02565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000767573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000791919081019062002a8f565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007d0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007fa919081019062002a8f565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000839573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200085f919062002ac8565b604051602001620008739392919062002b16565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b87602154604051620008c998979695949392919062002b53565b60405180910390a1620008f4620008ee600084868c8c8c888051906020012062000bee565b62001b6f565b6026546001600160a01b03166333d6247d6200090f620009f9565b6040518263ffffffff1660e01b81526004016200092e91815260200190565b600060405180830381600087803b1580156200094957600080fd5b505af11580156200095e573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b031633146200099a5760405162461bcd60e51b8152600401620005539062002bc0565b620009a462001cc0565b565b6000602460008484604051602001620009c192919062002c31565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000ae3578260011660010362000a64576001816020811062000a305762000a3062002c5b565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000a91565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a9e60028462002c9d565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000ada9062002cb4565b91505062000a04565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000bdf578160011660010362000b695786818151811062000b275762000b2762002c5b565b60200260200101518360405160200162000b4b929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000bbb565b8287828151811062000b7f5762000b7f62002c5b565b602002602001015160405160200162000ba2929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000bc860028362002c9d565b91508062000bd68162002cb4565b91505062000afc565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000ca15760405162461bcd60e51b8152600401620005539062002933565b62000cb78a8a8a8a8a8a8a8a8a8a600162001d1e565b62000cc88963ffffffff1662001faf565b6000836001600160a01b03168387898560405160240162000cec9392919062002cd0565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d23919062002d0b565b60006040518083038185875af1925050503d806000811462000d62576040519150601f19603f3d011682016040523d82523d6000602084013e62000d67565b606091505b505090508062000dc65760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f46416044820152631253115160e21b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000dff95949392919062002d29565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000e355750600054600160ff909116105b8062000e515750303b15801562000e51575060005460ff166001145b62000eb65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000eda576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000f6d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff161562000f995760405162461bcd60e51b8152600401620005539062002933565b62000faf8a8a8a8a8a8a8a8a8a8a600062001d1e565b62000fc08963ffffffff1662001faf565b6001600160a01b038516620010a957604080516000808252602082019092526001600160a01b03851690849060405162000ffb919062002d0b565b60006040518083038185875af1925050503d80600081146200103a576040519150601f19603f3d011682016040523d82523d6000602084013e6200103f565b606091505b5050905080620010a25760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201526617d1905253115160ca1b606482015260840162000553565b50620013c7565b60225463ffffffff610100909104811690871603620010de57620010d86001600160a01b038616848462001ff1565b620013c7565b60008686604051602001620010f592919062002c31565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200134c5760008060008580602001905181019062001147919062002d60565b9250925092506000858484846040516200116190620022e5565b6200116f9392919062002b16565b8190604051809103906000f590508015801562001190573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af1158015620011e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200120b9190620029f4565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200133a9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620013c4565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200139c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013c29190620029f4565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200140095949392919062002d29565b60405180910390a150505050505050505050565b600080620014256101008462002c9d565b90506000620014376101008562002dd6565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200147192919062002c31565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014a490620022e5565b601f1982820381018352601f909101166040819052620014d1908d908d908d908d908d9060200162002e16565b60408051601f1981840301815290829052620014f1929160200162002e57565b604051602081830303815290604052805190602001206040516020016200154a94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015965760405162461bcd60e51b8152600401620005539062002933565b60225463ffffffff610100909104811690841603620015c95760405162461bcd60e51b815260040162000553906200299b565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff1633868634876021546040516200161d98979695949392919062002b53565b60405180910390a162001654620008ee6001602260019054906101000a900463ffffffff1633878734888051906020012062000bee565b6026546001600160a01b03166333d6247d6200166f620009f9565b6040518263ffffffff1660e01b81526004016200168e91815260200190565b600060405180830381600087803b158015620016a957600080fd5b505af1158015620016be573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620016f45760405162461bcd60e51b8152600401620005539062002bc0565b620009a462002023565b60006200174183838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620020d292505050565b9050632afa533160e01b6001600160e01b03198216016200192a57600080808080808062001773896004818d62002e8a565b81019062001782919062002eb6565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620017c45760405162461bcd60e51b8152600401620005539062002f11565b6001600160a01b0386163014620017ef5760405162461bcd60e51b8152600401620005539062002f61565b8a8514620018565760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201526c09e8aa6be9c9ea8be9a82a8869609b1b606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620018d6919062002d0b565b6000604051808303816000865af19150503d806000811462001915576040519150601f19603f3d011682016040523d82523d6000602084013e6200191a565b606091505b5050505050505050505062001afb565b6001600160e01b031981166323f2ebc360e21b146200198c5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000553565b600080808080808080620019a48a6004818e62002e8a565b810190620019b3919062002fa6565b97509750975097509750975097509750336001600160a01b0316886001600160a01b031614620019f75760405162461bcd60e51b8152600401620005539062002f11565b6001600160a01b038716301462001a225760405162461bcd60e51b8152600401620005539062002f61565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001aab919062002d0b565b6000604051808303816000865af19150503d806000811462001aea576040519150601f19603f3d011682016040523d82523d6000602084013e62001aef565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000f6d9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620020d9565b80600162001b80602060026200312f565b62001b8c91906200313d565b6021541062001bf15760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001c06919062003157565b909155505060215460005b602081101562001cb0578160011660010362001c4657826001826020811062001c3e5762001c3e62002c5b565b015550505050565b6001816020811062001c5c5762001c5c62002c5b565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001c99919062002c9d565b91508062001ca78162002cb4565b91505062001c11565b5062001cbb62003172565b505050565b60225460ff161562001ce65760405162461bcd60e51b8152600401620005539062002933565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001d2f8a63ffffffff1662001414565b1562001d8a5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c416044820152631253515160e21b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001dfe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e24919062003188565b90508060000362001e8e5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201526c17d493d3d517d2539590531251609a1b606482015260840162000553565b60225463ffffffff878116610100909204161462001f155760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d41544348000000000000000000606482015260840162000553565b602254600090610100900463ffffffff1662001f3357508862001f36565b50895b62001f6162001f52848b8b8b8b8b8b8051906020012062000bee565b8e8e63ffffffff168462000aec565b6200095e5760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c4944604482015260640162000553565b600062001fbf6101008362002c9d565b9050600062001fd16101008462002dd6565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001cbb90849063a9059cbb60e01b9060640162001b37565b60225460ff166200209d5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002130826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620021b29092919063ffffffff16565b80519091501562001cbb5780806020019051810190620021519190620029f4565b62001cbb5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000be6848460008585600080866001600160a01b03168587604051620021dc919062002d0b565b60006040518083038185875af1925050503d80600081146200221b576040519150601f19603f3d011682016040523d82523d6000602084013e62002220565b606091505b509150915062002233878383876200223e565b979650505050505050565b60608315620022b2578251600003620022aa576001600160a01b0385163b620022aa5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000be6565b62000be68383815115620022c95781518083602001fd5b8060405162461bcd60e51b8152600401620005539190620031a2565b61155780620031b883390190565b6001600160a01b03811681146200230957600080fd5b50565b80356200231981620022f3565b919050565b803563ffffffff811681146200231957600080fd5b60008083601f8401126200234657600080fd5b50813567ffffffffffffffff8111156200235f57600080fd5b6020830191508360208285010111156200237857600080fd5b9250929050565b60008060008060008060a087890312156200239957600080fd5b8635620023a681620022f3565b9550620023b6602088016200231e565b94506040870135620023c881620022f3565b935060608701359250608087013567ffffffffffffffff811115620023ec57600080fd5b620023fa89828a0162002333565b979a9699509497509295939492505050565b600080604083850312156200242057600080fd5b6200242b836200231e565b915060208301356200243d81620022f3565b809150509250929050565b6000602082840312156200245b57600080fd5b81356200246881620022f3565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620024b157620024b16200246f565b604052919050565b600082601f830112620024cb57600080fd5b8135602067ffffffffffffffff821115620024ea57620024ea6200246f565b8160051b620024fb82820162002485565b92835284810182019282810190878511156200251657600080fd5b83870192505b8483101562002233578235825291830191908301906200251c565b600080600080608085870312156200254e57600080fd5b84359350602085013567ffffffffffffffff808211156200256e57600080fd5b6200257c88838901620024b9565b94506040870135915080821682146200259457600080fd5b509396929550929360600135925050565b60ff811681146200230957600080fd5b600080600080600080600060e0888a031215620025d157600080fd5b8735620025de81620025a5565b9650620025ee602089016200231e565b955060408801356200260081620022f3565b945062002610606089016200231e565b935060808801356200262281620022f3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200265c576200265c6200246f565b50601f01601f191660200190565b600082601f8301126200267c57600080fd5b8135620026936200268d826200263f565b62002485565b818152846020838601011115620026a957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620026e757600080fd5b8a3567ffffffffffffffff808211156200270057600080fd5b6200270e8e838f01620024b9565b9b506200271e60208e016200231e565b9a5060408d0135995060608d013598506200273c60808e016200231e565b97506200274c60a08e016200230c565b96506200275c60c08e016200231e565b95506200276c60e08e016200230c565b94506101008d013593506101208d01359150808211156200278c57600080fd5b506200279b8d828e016200266a565b9150509295989b9194979a5092959850565b600080600060608486031215620027c357600080fd5b620027ce846200231e565b92506020840135620027e081620022f3565b91506040840135620027f281620022f3565b809150509250925092565b6000602082840312156200281057600080fd5b5035919050565b600080600080600080600060a0888a0312156200283357600080fd5b6200283e886200231e565b965060208801356200285081620022f3565b9550604088013567ffffffffffffffff808211156200286e57600080fd5b6200287c8b838c0162002333565b909750955060608a01359150808211156200289657600080fd5b50620028a58a828b0162002333565b9094509250506080880135620028bb81620025a5565b8091505092959891949750929550565b600080600060608486031215620028e157600080fd5b620028ec846200231e565b92506020840135620028fe81620022f3565b9150604084013567ffffffffffffffff8111156200291b57600080fd5b62002929868287016200266a565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b6020808252602a908201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e546040820152692fa122afa4aa29a2a62360b11b606082015260800190565b80151581146200230957600080fd5b60006020828403121562002a0757600080fd5b81516200246881620029e5565b60005b8381101562002a3157818101518382015260200162002a17565b8381111562000f6d5750506000910152565b600082601f83011262002a5557600080fd5b815162002a666200268d826200263f565b81815284602083860101111562002a7c57600080fd5b62000be682602083016020870162002a14565b60006020828403121562002aa257600080fd5b815167ffffffffffffffff81111562002aba57600080fd5b62000be68482850162002a43565b60006020828403121562002adb57600080fd5b81516200246881620025a5565b6000815180845262002b0281602086016020860162002a14565b601f01601f19169290920160200192915050565b60608152600062002b2b606083018662002ae8565b828103602084015262002b3f818662002ae8565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002ba78483018762002ae8565b925080851660e085015250509998505050505050505050565b6020808252604b908201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660408201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60608201526a18de4818dbdb9d1c9858dd60aa1b608082015260a00190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002caf5762002caf62002c71565b500490565b60006001820162002cc95762002cc962002c87565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d029083018462002ae8565b95945050505050565b6000825162002d1f81846020870162002a14565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002d7657600080fd5b835167ffffffffffffffff8082111562002d8f57600080fd5b62002d9d8783880162002a43565b9450602086015191508082111562002db457600080fd5b5062002dc38682870162002a43565b9250506040840151620027f281620025a5565b60008262002de85762002de862002c71565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e2c60608301878962002ded565b828103602084015262002e4181868862002ded565b91505060ff831660408301529695505050505050565b6000835162002e6b81846020880162002a14565b83519083019062002e8181836020880162002a14565b01949350505050565b6000808585111562002e9b57600080fd5b8386111562002ea957600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002ed257600080fd5b873562002edf81620022f3565b9650602088013562002ef181620022f3565b9550604088013594506060880135935060808801356200262281620025a5565b60208082526030908201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560408201526f29aa2fa122afaa2422afa9a2a72222a960811b606082015260800190565b60208082526025908201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f42456040820152645f5448495360d81b606082015260800190565b600080600080600080600080610100898b03121562002fc457600080fd5b883562002fd181620022f3565b9750602089013562002fe381620022f3565b9650604089013595506060890135945060808901356200300381620029e5565b935060a08901356200301581620025a5565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200307357816000190482111562003057576200305762002c87565b808516156200306557918102915b93841c939080029062003037565b509250929050565b6000826200308c57506001620009f3565b816200309b57506000620009f3565b8160018114620030b45760028114620030bf57620030df565b6001915050620009f3565b60ff841115620030d357620030d362002c87565b50506001821b620009f3565b5060208310610133831016604e8410600b841016171562003104575081810a620009f3565b62003110838362003032565b806000190482111562003127576200312762002c87565b029392505050565b60006200246883836200307b565b60008282101562003152576200315262002c87565b500390565b600082198211156200316d576200316d62002c87565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200319b57600080fd5b5051919050565b60208152600062002468602083018462002ae856fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b14f80bfcbda3f7be499de7c67ec81639549928b9cee16384da9f2fb8c22dce64736f6c634300080f0033a264697066735822122033c20339edf34bfd82367a6744e7273fc5475f2279e1521b62542680e057cc4164736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/BridgeMock.json b/compiled-contracts/BridgeMock.json index fd6718dc6..706a7e9a1 100644 --- a/compiled-contracts/BridgeMock.json +++ b/compiled-contracts/BridgeMock.json @@ -790,8 +790,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50615b2a806100206000396000f3fe608060405260043610620001ff5760003560e01c80637b6323c11162000117578063d02103ca11620000a1578063e7a5b4ea116200006c578063e7a5b4ea14620006de578063ed6be5c91462000703578063f2fde38b146200071a578063ff634ed7146200073f57600080fd5b8063d02103ca1462000659578063d96a15f7146200067b578063dbc169761462000692578063e737588114620006aa57600080fd5b806391e57e2d11620000e257806391e57e2d14620005bd578063a08e8a0814620005d5578063aaa13cc214620005ff578063bab161bf146200062457600080fd5b80637b6323c1146200051c57806381b1c17414620005415780638da5cb5b146200057b5780638f611519146200059b57600080fd5b80632dfdf0b511620001995780633e19704311620001645780633e19704314620003d95780634638554914620004ba5780636555954014620004df578063715018a6146200050457600080fd5b80632dfdf0b51462000315578063318aee3d146200032d5780633ae05047146200039c5780633da8168214620003b457600080fd5b80632072f6c511620001da5780632072f6c5146200027557806322e95f2c146200028d5780632b5e42e714620002cb5780632c3f58cd14620002f057600080fd5b80630871e97114620002045780630e1da6c3146200021d57806315064c961462000248575b600080fd5b6200021b6200021536600462003377565b62000756565b005b3480156200022a57600080fd5b5062000235608d5481565b6040519081526020015b60405180910390f35b3480156200025557600080fd5b50602254620002649060ff1681565b60405190151581526020016200023f565b3480156200028257600080fd5b506200021b62000812565b3480156200029a57600080fd5b50620002b2620002ac36600462003404565b620008c6565b6040516001600160a01b0390911681526020016200023f565b348015620002d857600080fd5b506200021b620002ea36600462003440565b62000949565b348015620002fd57600080fd5b506200021b6200030f3660046200345a565b62000958565b3480156200032257600080fd5b506200023560215481565b3480156200033a57600080fd5b50620003776200034c36600462003478565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200023f565b348015620003a957600080fd5b506200023562000999565b348015620003c157600080fd5b5062000264620003d336600462003579565b62000a8c565b348015620003e657600080fd5b5062000235620003f8366004620035f7565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004c757600080fd5b506200021b620004d936600462003708565b62000b8c565b348015620004ec57600080fd5b506200021b620004fe366004620037ef565b62000e12565b3480156200051157600080fd5b506200021b62001004565b3480156200052957600080fd5b506200021b6200053b36600462003708565b6200101a565b3480156200054e57600080fd5b50620002b26200056036600462003440565b6089602052600090815260409020546001600160a01b031681565b3480156200058857600080fd5b506055546001600160a01b0316620002b2565b348015620005a857600080fd5b50608c54620002b2906001600160a01b031681565b348015620005ca57600080fd5b5062000235608e5481565b348015620005e257600080fd5b50620005ec600081565b60405160ff90911681526020016200023f565b3480156200060c57600080fd5b50620002b26200061e36600462003845565b620015dc565b3480156200063157600080fd5b50608754620006439063ffffffff1681565b60405163ffffffff90911681526020016200023f565b3480156200066657600080fd5b50608b54620002b2906001600160a01b031681565b6200021b6200068c366004620038f9565b62001748565b3480156200069f57600080fd5b506200021b620019fc565b348015620006b757600080fd5b5062000264620006c936600462003440565b60886020526000908152604090205460ff1681565b348015620006eb57600080fd5b506200021b620006fd36600462003440565b62001aae565b3480156200071057600080fd5b5062000643600081565b3480156200072757600080fd5b506200021b6200073936600462003478565b62001af3565b3480156200074c57600080fd5b50620005ec600181565b608e54341115620007fa5760405162461bcd60e51b815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6200080a86868686868662001b89565b505050505050565b608c546001600160a01b03163314620008ba5760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c46200212f565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b6200095362002208565b608e55565b6200096262002208565b608780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b602154600090819081805b602081101562000a83578260011660010362000a045760018160208110620009d057620009d062003961565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000a31565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a3e600284620039bf565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000a7a90620039fb565b915050620009a4565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000b7f578160011660010362000b095786818151811062000ac75762000ac762003961565b60200260200101518360405160200162000aeb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000b5b565b8287828151811062000b1f5762000b1f62003961565b602002602001015160405160200162000b42929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000b68600283620039bf565b91508062000b7681620039fb565b91505062000a9c565b5050909114949350505050565b60225460ff161562000c2d5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b62000c438a8a8a8a8a8a8a8a8a8a600162002264565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b03851690849062000c869089908b90879060240162003a93565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162000ceb919062003acc565b60006040518083038185875af1925050503d806000811462000d2a576040519150601f19603f3d011682016040523d82523d6000602084013e62000d2f565b606091505b505090508062000da75760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff161580801562000e335750600054600160ff909116105b8062000e4f5750303b15801562000e4f575060005460ff166001145b62000ec35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007f1565b6000805460ff19166001179055801562000f0457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d8290556703782dace9d90000608e5562000f9962002617565b801562000ffd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6200100e62002208565b620008c460006200269c565b60225460ff1615620010bb5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b620010d18a8a8a8a8a8a8a8a8a8a600062002264565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620011f057604080516000808252602082019092526001600160a01b0385169084906040516200112c919062003acc565b60006040518083038185875af1925050503d80600081146200116b576040519150601f19603f3d011682016040523d82523d6000602084013e62001170565b606091505b5050905080620011e95760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c4544000000000000000000000000000000000000000000000000006064820152608401620007f1565b5062001572565b60875463ffffffff9081169087160362001220576200121a6001600160a01b038616848462002706565b62001572565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620014de57600080600085806020019051810190620012c0919062003b3e565b925092509250600085848484604051620012da90620032e0565b620012e89392919062003bbf565b8190604051809103906000f590508015801562001309573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001377573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200139d919062003c0b565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620014cc9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200156f565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001547573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200156d919062003c0b565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200165f90620032e0565b601f1982820381018352601f9091011660408190526200168c908d908d908d908d908d9060200162003c56565b60408051601f1981840301815290829052620016ac929160200162003c97565b604051602081830303815290604052805190602001206040516020016200172294939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620017e95760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff908116908416036200186c5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620018b99260019263ffffffff9092169133918991899134918a919062003cca565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200198990620027b6565b608b546001600160a01b03166333d6247d620019a462000999565b6040518263ffffffff1660e01b8152600401620019c391815260200190565b600060405180830381600087803b158015620019de57600080fd5b505af1158015620019f3573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001aa45760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c462002915565b62001ab862002208565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001afd62002208565b6001600160a01b03811662001b7b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007f1565b62001b86816200269c565b50565b60225460ff161562001c2a5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff9081169086160362001cad5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b60008060606001600160a01b03891662001d425785341462001d385760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007f1565b6000915062001fcc565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001e29576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562001df0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e16919062003c0b565b5060208101518151909450925062001fca565b841562001e3e5762001e3e8a888888620029c4565b62001e556001600160a01b038b1633308a62002fe9565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001eac573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001ed6919081019062003d36565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001f15573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001f3f919081019062003d36565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001f7e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001fa4919062003d6f565b60405160200162001fb89392919062003bbf565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200200e98979695949392919062003cca565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620020b690620027b6565b608b546001600160a01b03166333d6247d620020d162000999565b6040518263ffffffff1660e01b8152600401620020f091815260200190565b600060405180830381600087803b1580156200210b57600080fd5b505af115801562002120573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff1615620021d05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6055546001600160a01b03163314620008c45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007f1565b63ffffffff8a1660009081526088602052604090205460ff1615620022f15760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af11580156200237e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620023a4919062003d8f565b90508015801590620023c35750608d54620023c0824262003da9565b10155b6200245d5760405162461bcd60e51b815260206004820152604260248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c49445f4f525f4e4f545f5945545f434c41494d414260648201527f4c45000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff878116911614620024df5760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000006064820152608401620007f1565b60875460009063ffffffff16620024f8575088620024fb565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d820152605181018990526071808201939093528151808203909301835260910190528051910120620025c9908e8e63ffffffff168462000a8c565b620021205760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c49446044820152606401620007f1565b600054610100900460ff16620026965760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007f1565b620008c4335b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620027b19084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262003042565b505050565b806001620027c76020600262003efc565b620027d3919062003da9565b602154106200284b5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007f1565b60016021600082825462002860919062003f0a565b909155505060215460005b60208110156200290a5781600116600103620028a057826001826020811062002898576200289862003961565b015550505050565b60018160208110620028b657620028b662003961565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620028f39190620039bf565b9150806200290181620039fb565b9150506200286b565b50620027b162003f25565b60225460ff166200298f5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620007f1565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b600062002a0783838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200312e92505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002d0957600080808080808062002a6a896004818d62003f54565b81019062002a79919062003f80565b9650965096509650965096509650336001600160a01b0316876001600160a01b03161462002b105760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038616301462002b905760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b8a851462002c075760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002cb5919062003acc565b6000604051808303816000865af19150503d806000811462002cf4576040519150601f19603f3d011682016040523d82523d6000602084013e62002cf9565b606091505b5050505050505050505062000ffd565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002d9c5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007f1565b60008080808080808062002db48a6004818e62003f54565b81019062002dc3919062003fdb565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462002e5c5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038716301462002edc5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002f93919062003acc565b6000604051808303816000865af19150503d806000811462002fd2576040519150601f19603f3d011682016040523d82523d6000602084013e62002fd7565b606091505b50505050505050505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526200303c9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016200274c565b50505050565b600062003099826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620031359092919063ffffffff16565b805190915015620027b15780806020019051810190620030ba919062003c0b565b620027b15760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007f1565b6020015190565b606062003146848460008562003150565b90505b9392505050565b606082471015620031ca5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401620007f1565b6001600160a01b0385163b620032235760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007f1565b600080866001600160a01b0316858760405162003241919062003acc565b60006040518083038185875af1925050503d806000811462003280576040519150601f19603f3d011682016040523d82523d6000602084013e62003285565b606091505b509150915062003297828286620032a2565b979650505050505050565b60608315620032b357508162003149565b825115620032c45782518084602001fd5b8160405162461bcd60e51b8152600401620007f1919062004067565b611a78806200407d83390190565b6001600160a01b038116811462001b8657600080fd5b80356200331181620032ee565b919050565b803563ffffffff811681146200331157600080fd5b60008083601f8401126200333e57600080fd5b50813567ffffffffffffffff8111156200335757600080fd5b6020830191508360208285010111156200337057600080fd5b9250929050565b60008060008060008060a087890312156200339157600080fd5b86356200339e81620032ee565b9550620033ae6020880162003316565b94506040870135620033c081620032ee565b935060608701359250608087013567ffffffffffffffff811115620033e457600080fd5b620033f289828a016200332b565b979a9699509497509295939492505050565b600080604083850312156200341857600080fd5b620034238362003316565b915060208301356200343581620032ee565b809150509250929050565b6000602082840312156200345357600080fd5b5035919050565b6000602082840312156200346d57600080fd5b620031498262003316565b6000602082840312156200348b57600080fd5b81356200314981620032ee565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620034f357620034f362003498565b604052919050565b600082601f8301126200350d57600080fd5b8135602067ffffffffffffffff8211156200352c576200352c62003498565b8160051b6200353d828201620034c7565b92835284810182019282810190878511156200355857600080fd5b83870192505b8483101562003297578235825291830191908301906200355e565b600080600080608085870312156200359057600080fd5b84359350602085013567ffffffffffffffff80821115620035b057600080fd5b620035be88838901620034fb565b9450604087013591508082168214620035d657600080fd5b509396929550929360600135925050565b60ff8116811462001b8657600080fd5b600080600080600080600060e0888a0312156200361357600080fd5b87356200362081620035e7565b9650620036306020890162003316565b955060408801356200364281620032ee565b9450620036526060890162003316565b935060808801356200366481620032ee565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200369e576200369e62003498565b50601f01601f191660200190565b600082601f830112620036be57600080fd5b8135620036d5620036cf8262003681565b620034c7565b818152846020838601011115620036eb57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200372957600080fd5b8a3567ffffffffffffffff808211156200374257600080fd5b620037508e838f01620034fb565b9b506200376060208e0162003316565b9a5060408d0135995060608d013598506200377e60808e0162003316565b97506200378e60a08e0162003304565b96506200379e60c08e0162003316565b9550620037ae60e08e0162003304565b94506101008d013593506101208d0135915080821115620037ce57600080fd5b50620037dd8d828e01620036ac565b9150509295989b9194979a5092959850565b600080600080608085870312156200380657600080fd5b620038118562003316565b935060208501356200382381620032ee565b925060408501356200383581620032ee565b9396929550929360600135925050565b600080600080600080600060a0888a0312156200386157600080fd5b6200386c8862003316565b965060208801356200387e81620032ee565b9550604088013567ffffffffffffffff808211156200389c57600080fd5b620038aa8b838c016200332b565b909750955060608a0135915080821115620038c457600080fd5b50620038d38a828b016200332b565b9094509250506080880135620038e981620035e7565b8091505092959891949750929550565b6000806000606084860312156200390f57600080fd5b6200391a8462003316565b925060208401356200392c81620032ee565b9150604084013567ffffffffffffffff8111156200394957600080fd5b6200395786828701620036ac565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082620039f6577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003a2f5762003a2f62003990565b5060010190565b60005b8381101562003a5357818101518382015260200162003a39565b838111156200303c5750506000910152565b6000815180845262003a7f81602086016020860162003a36565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003ac3606083018462003a65565b95945050505050565b6000825162003ae081846020870162003a36565b9190910192915050565b600082601f83011262003afc57600080fd5b815162003b0d620036cf8262003681565b81815284602083860101111562003b2357600080fd5b62003b3682602083016020870162003a36565b949350505050565b60008060006060848603121562003b5457600080fd5b835167ffffffffffffffff8082111562003b6d57600080fd5b62003b7b8783880162003aea565b9450602086015191508082111562003b9257600080fd5b5062003ba18682870162003aea565b925050604084015162003bb481620035e7565b809150509250925092565b60608152600062003bd4606083018662003a65565b828103602084015262003be8818662003a65565b91505060ff83166040830152949350505050565b801515811462001b8657600080fd5b60006020828403121562003c1e57600080fd5b8151620031498162003bfc565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003c6c60608301878962003c2b565b828103602084015262003c8181868862003c2b565b91505060ff831660408301529695505050505050565b6000835162003cab81846020880162003a36565b83519083019062003cc181836020880162003a36565b01949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003d1d8285018762003a65565b925080851660e085015250509998505050505050505050565b60006020828403121562003d4957600080fd5b815167ffffffffffffffff81111562003d6157600080fd5b62003b368482850162003aea565b60006020828403121562003d8257600080fd5b81516200314981620035e7565b60006020828403121562003da257600080fd5b5051919050565b60008282101562003dbe5762003dbe62003990565b500390565b600181815b8085111562003e2257817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003e065762003e0662003990565b8085161562003e1457918102915b93841c939080029062003dc8565b509250929050565b60008262003e3b5750600162000943565b8162003e4a5750600062000943565b816001811462003e63576002811462003e6e5762003e8e565b600191505062000943565b60ff84111562003e825762003e8262003990565b50506001821b62000943565b5060208310610133831016604e8410600b841016171562003eb3575081810a62000943565b62003ebf838362003dc3565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003ef45762003ef462003990565b029392505050565b600062003149838362003e2a565b6000821982111562003f205762003f2062003990565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000808585111562003f6557600080fd5b8386111562003f7357600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003f9c57600080fd5b873562003fa981620032ee565b9650602088013562003fbb81620032ee565b9550604088013594506060880135935060808801356200366481620035e7565b600080600080600080600080610100898b03121562003ff957600080fd5b88356200400681620032ee565b975060208901356200401881620032ee565b965060408901359550606089013594506080890135620040388162003bfc565b935060a08901356200404a81620035e7565b979a969950949793969295929450505060c08201359160e0013590565b60208152600062003149602083018462003a6556fe60c06040523480156200001157600080fd5b5060405162001a7838038062001a788339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516115be620004ba600039600061053001526000818161036f01526104fa01526115be6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b60405161019191906112d5565b60405180910390f35b6101ad6101a8366004611371565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad61020436600461139b565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad610276366004611371565b610552565b6101ad610289366004611371565b61059e565b6101c161029c3660046113d7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d23660046113d7565b60066020526000908152604090205481565b610184610645565b6101ad6102fa366004611371565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad610352366004611371565b6106ed565b6101ad610365366004611371565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f3660046113f9565b6107b2565b005b6101c16103b436600461146c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6060600380546104379061149f565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061149f565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f56565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611521565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c838361101e565b50600192915050565b6060600480546104379061149f565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c8383611124565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661088183611539565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ee3908490611521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4991815260200190565b60405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f81610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166110815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b80600260008282546110939190611521565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906110cd908490611521565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156112495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611285908490611571565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c27565b600060208083528351808285015260005b81811015611302578581018301518582016040015282016112e6565b81811115611314576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136c57600080fd5b919050565b6000806040838503121561138457600080fd5b61138d83611348565b946020939093013593505050565b6000806000606084860312156113b057600080fd5b6113b984611348565b92506113c760208501611348565b9150604084013590509250925092565b6000602082840312156113e957600080fd5b6113f282611348565b9392505050565b600080600080600080600060e0888a03121561141457600080fd5b61141d88611348565b965061142b60208901611348565b95506040880135945060608801359350608088013560ff8116811461144f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561147f57600080fd5b61148883611348565b915061149660208401611348565b90509250929050565b600181811c908216806114b357607f821691505b6020821081036114ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611534576115346114f2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156a5761156a6114f2565b5060010190565b600082821015611583576115836114f2565b50039056fea264697066735822122074c1369adb4b03ecf20b18930bac9df5d9a48b4602516485c969475d7cadf1ac64736f6c634300080f0033a26469706673582212206a1228c6bd1c4dac7ae6928a40eab39a5b5c3c43a9975d5dbb02be6bfa7a9dd364736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001ff5760003560e01c80637b6323c11162000117578063d02103ca11620000a1578063e7a5b4ea116200006c578063e7a5b4ea14620006de578063ed6be5c91462000703578063f2fde38b146200071a578063ff634ed7146200073f57600080fd5b8063d02103ca1462000659578063d96a15f7146200067b578063dbc169761462000692578063e737588114620006aa57600080fd5b806391e57e2d11620000e257806391e57e2d14620005bd578063a08e8a0814620005d5578063aaa13cc214620005ff578063bab161bf146200062457600080fd5b80637b6323c1146200051c57806381b1c17414620005415780638da5cb5b146200057b5780638f611519146200059b57600080fd5b80632dfdf0b511620001995780633e19704311620001645780633e19704314620003d95780634638554914620004ba5780636555954014620004df578063715018a6146200050457600080fd5b80632dfdf0b51462000315578063318aee3d146200032d5780633ae05047146200039c5780633da8168214620003b457600080fd5b80632072f6c511620001da5780632072f6c5146200027557806322e95f2c146200028d5780632b5e42e714620002cb5780632c3f58cd14620002f057600080fd5b80630871e97114620002045780630e1da6c3146200021d57806315064c961462000248575b600080fd5b6200021b6200021536600462003377565b62000756565b005b3480156200022a57600080fd5b5062000235608d5481565b6040519081526020015b60405180910390f35b3480156200025557600080fd5b50602254620002649060ff1681565b60405190151581526020016200023f565b3480156200028257600080fd5b506200021b62000812565b3480156200029a57600080fd5b50620002b2620002ac36600462003404565b620008c6565b6040516001600160a01b0390911681526020016200023f565b348015620002d857600080fd5b506200021b620002ea36600462003440565b62000949565b348015620002fd57600080fd5b506200021b6200030f3660046200345a565b62000958565b3480156200032257600080fd5b506200023560215481565b3480156200033a57600080fd5b50620003776200034c36600462003478565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b039091166020830152016200023f565b348015620003a957600080fd5b506200023562000999565b348015620003c157600080fd5b5062000264620003d336600462003579565b62000a8c565b348015620003e657600080fd5b5062000235620003f8366004620035f7565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e088811b821660218401526bffffffffffffffffffffffff19606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b348015620004c757600080fd5b506200021b620004d936600462003708565b62000b8c565b348015620004ec57600080fd5b506200021b620004fe366004620037ef565b62000e12565b3480156200051157600080fd5b506200021b62001004565b3480156200052957600080fd5b506200021b6200053b36600462003708565b6200101a565b3480156200054e57600080fd5b50620002b26200056036600462003440565b6089602052600090815260409020546001600160a01b031681565b3480156200058857600080fd5b506055546001600160a01b0316620002b2565b348015620005a857600080fd5b50608c54620002b2906001600160a01b031681565b348015620005ca57600080fd5b5062000235608e5481565b348015620005e257600080fd5b50620005ec600081565b60405160ff90911681526020016200023f565b3480156200060c57600080fd5b50620002b26200061e36600462003845565b620015dc565b3480156200063157600080fd5b50608754620006439063ffffffff1681565b60405163ffffffff90911681526020016200023f565b3480156200066657600080fd5b50608b54620002b2906001600160a01b031681565b6200021b6200068c366004620038f9565b62001748565b3480156200069f57600080fd5b506200021b620019fc565b348015620006b757600080fd5b5062000264620006c936600462003440565b60886020526000908152604090205460ff1681565b348015620006eb57600080fd5b506200021b620006fd36600462003440565b62001aae565b3480156200071057600080fd5b5062000643600081565b3480156200072757600080fd5b506200021b6200073936600462003478565b62001af3565b3480156200074c57600080fd5b50620005ec600181565b608e54341115620007fa5760405162461bcd60e51b815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e60648201527f616c20746573746e657400000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6200080a86868686868662001b89565b505050505050565b608c546001600160a01b03163314620008ba5760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c46200212f565b565b6040805160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016602080830191909152606084901b6bffffffffffffffffffffffff1916602483015282516018818403018152603890920183528151918101919091206000908152608990915220546001600160a01b03165b92915050565b6200095362002208565b608e55565b6200096262002208565b608780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b602154600090819081805b602081101562000a83578260011660010362000a045760018160208110620009d057620009d062003961565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000a31565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a3e600284620039bf565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000a7a90620039fb565b915050620009a4565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000b7f578160011660010362000b095786818151811062000ac75762000ac762003961565b60200260200101518360405160200162000aeb929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000b5b565b8287828151811062000b1f5762000b1f62003961565b602002602001015160405160200162000b42929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000b68600283620039bf565b91508062000b7681620039fb565b91505062000a9c565b5050909114949350505050565b60225460ff161562000c2d5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b62000c438a8a8a8a8a8a8a8a8a8a600162002264565b63ffffffff8916600090815260886020526040808220805460ff19166001179055516001600160a01b03851690849062000c869089908b90879060240162003a93565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1806b5f2000000000000000000000000000000000000000000000000000000001790525162000ceb919062003acc565b60006040518083038185875af1925050503d806000811462000d2a576040519150601f19603f3d011682016040523d82523d6000602084013e62000d2f565b606091505b505090508062000da75760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b6040805163ffffffff8c81168252891660208201526001600160a01b0388811682840152861660608201526080810185905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a15050505050505050505050565b600054610100900460ff161580801562000e335750600054600160ff909116105b8062000e4f5750303b15801562000e4f575060005460ff166001145b62000ec35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401620007f1565b6000805460ff19166001179055801562000f0457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6087805463ffffffff87167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116179055608b80546001600160a01b038087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255608c805492861692909116919091179055608d8290556703782dace9d90000608e5562000f9962002617565b801562000ffd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6200100e62002208565b620008c460006200269c565b60225460ff1615620010bb5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b620010d18a8a8a8a8a8a8a8a8a8a600062002264565b63ffffffff89166000908152608860205260409020805460ff191660011790556001600160a01b038516620011f057604080516000808252602082019092526001600160a01b0385169084906040516200112c919062003acc565b60006040518083038185875af1925050503d80600081146200116b576040519150601f19603f3d011682016040523d82523d6000602084013e62001170565b606091505b5050905080620011e95760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201527f5f4641494c4544000000000000000000000000000000000000000000000000006064820152608401620007f1565b5062001572565b60875463ffffffff9081169087160362001220576200121a6001600160a01b038616848462002706565b62001572565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526bffffffffffffffffffffffff19606087901b16602482015260009060380160408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b031680620014de57600080600085806020019051810190620012c0919062003b3e565b925092509250600085848484604051620012da90620032e0565b620012e89392919062003bbf565b8190604051809103906000f590508015801562001309573d6000803e3d6000fd5b506040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001377573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200139d919062003c0b565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620014cc9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200156f565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af115801562001547573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200156d919062003c0b565b505b50505b6040805163ffffffff8b81168252881660208201526001600160a01b0387811682840152851660608201526080810184905290517f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459839181900360a00190a150505050505050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1660208201526bffffffffffffffffffffffff19606088901b1660248201526000908190603801604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200165f90620032e0565b601f1982820381018352601f9091011660408190526200168c908d908d908d908d908d9060200162003c56565b60408051601f1981840301815290829052620016ac929160200162003c97565b604051602081830303815290604052805190602001206040516020016200172294939291907fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620017e95760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff908116908416036200186c5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620018b99260019263ffffffff9092169133918991899134918a919062003cca565b60405180910390a16087548151602080840191909120604080517f0100000000000000000000000000000000000000000000000000000000000000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e095861b811660218301526bffffffffffffffffffffffff1933606090811b82166025850152968a901b90911660398301529487901b909416603d85015234605185015260718085019290925280518085039092018252609190930190925281519101206200198990620027b6565b608b546001600160a01b03166333d6247d620019a462000999565b6040518263ffffffff1660e01b8152600401620019c391815260200190565b600060405180830381600087803b158015620019de57600080fd5b505af1158015620019f3573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b0316331462001aa45760405162461bcd60e51b815260206004820152604b60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660448201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60648201527f637920636f6e7472616374000000000000000000000000000000000000000000608482015260a401620007f1565b620008c462002915565b62001ab862002208565b608d8190556040518181527f126d6a8888996898896a660f1c9a7a4ef612bd6df82281a13079dd27cc38758d9060200160405180910390a150565b62001afd62002208565b6001600160a01b03811662001b7b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401620007f1565b62001b86816200269c565b50565b60225460ff161562001c2a5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff9081169086160362001cad5760405162461bcd60e51b815260206004820152602a60248201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e5460448201527f5f42455f495453454c46000000000000000000000000000000000000000000006064820152608401620007f1565b60008060606001600160a01b03891662001d425785341462001d385760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201527f4d415443485f4d53475f56414c554500000000000000000000000000000000006064820152608401620007f1565b6000915062001fcc565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff811683526401000000009004909216918101829052901562001e29576040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562001df0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e16919062003c0b565b5060208101518151909450925062001fca565b841562001e3e5762001e3e8a888888620029c4565b62001e556001600160a01b038b1633308a62002fe9565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001eac573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001ed6919081019062003d36565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001f15573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001f3f919081019062003d36565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001f7e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001fa4919062003d6f565b60405160200162001fb89392919062003bbf565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200200e98979695949392919062003cca565b60405180910390a18051602080830191909120604080516000818501527fffffffff0000000000000000000000000000000000000000000000000000000060e087811b821660218401526bffffffffffffffffffffffff1960608a811b82166025860152918f901b90921660398401528c901b16603d820152605181018a90526071808201939093528151808203909301835260910190528051910120620020b690620027b6565b608b546001600160a01b03166333d6247d620020d162000999565b6040518263ffffffff1660e01b8152600401620020f091815260200190565b600060405180830381600087803b1580156200210b57600080fd5b505af115801562002120573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff1615620021d05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6055546001600160a01b03163314620008c45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007f1565b63ffffffff8a1660009081526088602052604090205460ff1615620022f15760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c4160448201527f494d4544000000000000000000000000000000000000000000000000000000006064820152608401620007f1565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101207f257b36320000000000000000000000000000000000000000000000000000000090925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af11580156200237e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620023a4919062003d8f565b90508015801590620023c35750608d54620023c0824262003da9565b10155b6200245d5760405162461bcd60e51b815260206004820152604260248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201527f5f524f4f545f494e56414c49445f4f525f4e4f545f5945545f434c41494d414260648201527f4c45000000000000000000000000000000000000000000000000000000000000608482015260a401620007f1565b60875463ffffffff878116911614620024df5760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d415443480000000000000000006064820152608401620007f1565b60875460009063ffffffff16620024f8575088620024fb565b50895b8351602080860191909120604080517fff0000000000000000000000000000000000000000000000000000000000000060f888901b16818501527fffffffff0000000000000000000000000000000000000000000000000000000060e08e811b821660218401526bffffffffffffffffffffffff1960608f811b82166025860152918e901b90921660398401528b901b16603d820152605181018990526071808201939093528151808203909301835260910190528051910120620025c9908e8e63ffffffff168462000a8c565b620021205760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c49446044820152606401620007f1565b600054610100900460ff16620026965760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401620007f1565b620008c4335b605580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052620027b19084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915262003042565b505050565b806001620027c76020600262003efc565b620027d3919062003da9565b602154106200284b5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201527f5f545245455f46554c4c000000000000000000000000000000000000000000006064820152608401620007f1565b60016021600082825462002860919062003f0a565b909155505060215460005b60208110156200290a5781600116600103620028a057826001826020811062002898576200289862003961565b015550505050565b60018160208110620028b657620028b662003961565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250600282620028f39190620039bf565b9150806200290181620039fb565b9150506200286b565b50620027b162003f25565b60225460ff166200298f5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620007f1565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b600062002a0783838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200312e92505050565b90507f2afa5331000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082160162002d0957600080808080808062002a6a896004818d62003f54565b81019062002a79919062003f80565b9650965096509650965096509650336001600160a01b0316876001600160a01b03161462002b105760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038616301462002b905760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b8a851462002c075760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201527f4f45535f4e4f545f4d41544348000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd505accf000000000000000000000000000000000000000000000000000000001790529151918e169162002cb5919062003acc565b6000604051808303816000865af19150503d806000811462002cf4576040519150601f19603f3d011682016040523d82523d6000602084013e62002cf9565b606091505b5050505050505050505062000ffd565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f8fcbaf0c000000000000000000000000000000000000000000000000000000001462002d9c5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c006044820152606401620007f1565b60008080808080808062002db48a6004818e62003f54565b81019062002dc3919062003fdb565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462002e5c5760405162461bcd60e51b815260206004820152603060248201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560448201527f53545f42455f5448455f53454e444552000000000000000000000000000000006064820152608401620007f1565b6001600160a01b038716301462002edc5760405162461bcd60e51b815260206004820152602560248201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f424560448201527f5f544849530000000000000000000000000000000000000000000000000000006064820152608401620007f1565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8fcbaf0c000000000000000000000000000000000000000000000000000000001790529151918f169162002f93919062003acc565b6000604051808303816000865af19150503d806000811462002fd2576040519150601f19603f3d011682016040523d82523d6000602084013e62002fd7565b606091505b50505050505050505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526200303c9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016200274c565b50505050565b600062003099826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620031359092919063ffffffff16565b805190915015620027b15780806020019051810190620030ba919062003c0b565b620027b15760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401620007f1565b6020015190565b606062003146848460008562003150565b90505b9392505050565b606082471015620031ca5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401620007f1565b6001600160a01b0385163b620032235760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620007f1565b600080866001600160a01b0316858760405162003241919062003acc565b60006040518083038185875af1925050503d806000811462003280576040519150601f19603f3d011682016040523d82523d6000602084013e62003285565b606091505b509150915062003297828286620032a2565b979650505050505050565b60608315620032b357508162003149565b825115620032c45782518084602001fd5b8160405162461bcd60e51b8152600401620007f1919062004067565b611a78806200407d83390190565b6001600160a01b038116811462001b8657600080fd5b80356200331181620032ee565b919050565b803563ffffffff811681146200331157600080fd5b60008083601f8401126200333e57600080fd5b50813567ffffffffffffffff8111156200335757600080fd5b6020830191508360208285010111156200337057600080fd5b9250929050565b60008060008060008060a087890312156200339157600080fd5b86356200339e81620032ee565b9550620033ae6020880162003316565b94506040870135620033c081620032ee565b935060608701359250608087013567ffffffffffffffff811115620033e457600080fd5b620033f289828a016200332b565b979a9699509497509295939492505050565b600080604083850312156200341857600080fd5b620034238362003316565b915060208301356200343581620032ee565b809150509250929050565b6000602082840312156200345357600080fd5b5035919050565b6000602082840312156200346d57600080fd5b620031498262003316565b6000602082840312156200348b57600080fd5b81356200314981620032ee565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620034f357620034f362003498565b604052919050565b600082601f8301126200350d57600080fd5b8135602067ffffffffffffffff8211156200352c576200352c62003498565b8160051b6200353d828201620034c7565b92835284810182019282810190878511156200355857600080fd5b83870192505b8483101562003297578235825291830191908301906200355e565b600080600080608085870312156200359057600080fd5b84359350602085013567ffffffffffffffff80821115620035b057600080fd5b620035be88838901620034fb565b9450604087013591508082168214620035d657600080fd5b509396929550929360600135925050565b60ff8116811462001b8657600080fd5b600080600080600080600060e0888a0312156200361357600080fd5b87356200362081620035e7565b9650620036306020890162003316565b955060408801356200364281620032ee565b9450620036526060890162003316565b935060808801356200366481620032ee565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200369e576200369e62003498565b50601f01601f191660200190565b600082601f830112620036be57600080fd5b8135620036d5620036cf8262003681565b620034c7565b818152846020838601011115620036eb57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200372957600080fd5b8a3567ffffffffffffffff808211156200374257600080fd5b620037508e838f01620034fb565b9b506200376060208e0162003316565b9a5060408d0135995060608d013598506200377e60808e0162003316565b97506200378e60a08e0162003304565b96506200379e60c08e0162003316565b9550620037ae60e08e0162003304565b94506101008d013593506101208d0135915080821115620037ce57600080fd5b50620037dd8d828e01620036ac565b9150509295989b9194979a5092959850565b600080600080608085870312156200380657600080fd5b620038118562003316565b935060208501356200382381620032ee565b925060408501356200383581620032ee565b9396929550929360600135925050565b600080600080600080600060a0888a0312156200386157600080fd5b6200386c8862003316565b965060208801356200387e81620032ee565b9550604088013567ffffffffffffffff808211156200389c57600080fd5b620038aa8b838c016200332b565b909750955060608a0135915080821115620038c457600080fd5b50620038d38a828b016200332b565b9094509250506080880135620038e981620035e7565b8091505092959891949750929550565b6000806000606084860312156200390f57600080fd5b6200391a8462003316565b925060208401356200392c81620032ee565b9150604084013567ffffffffffffffff8111156200394957600080fd5b6200395786828701620036ac565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082620039f6577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003a2f5762003a2f62003990565b5060010190565b60005b8381101562003a5357818101518382015260200162003a39565b838111156200303c5750506000910152565b6000815180845262003a7f81602086016020860162003a36565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820152600062003ac3606083018462003a65565b95945050505050565b6000825162003ae081846020870162003a36565b9190910192915050565b600082601f83011262003afc57600080fd5b815162003b0d620036cf8262003681565b81815284602083860101111562003b2357600080fd5b62003b3682602083016020870162003a36565b949350505050565b60008060006060848603121562003b5457600080fd5b835167ffffffffffffffff8082111562003b6d57600080fd5b62003b7b8783880162003aea565b9450602086015191508082111562003b9257600080fd5b5062003ba18682870162003aea565b925050604084015162003bb481620035e7565b809150509250925092565b60608152600062003bd4606083018662003a65565b828103602084015262003be8818662003a65565b91505060ff83166040830152949350505050565b801515811462001b8657600080fd5b60006020828403121562003c1e57600080fd5b8151620031498162003bfc565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60608152600062003c6c60608301878962003c2b565b828103602084015262003c8181868862003c2b565b91505060ff831660408301529695505050505050565b6000835162003cab81846020880162003a36565b83519083019062003cc181836020880162003a36565b01949350505050565b600061010060ff8b16835263ffffffff808b1660208501526001600160a01b03808b166040860152818a1660608601528089166080860152508660a08501528160c085015262003d1d8285018762003a65565b925080851660e085015250509998505050505050505050565b60006020828403121562003d4957600080fd5b815167ffffffffffffffff81111562003d6157600080fd5b62003b368482850162003aea565b60006020828403121562003d8257600080fd5b81516200314981620035e7565b60006020828403121562003da257600080fd5b5051919050565b60008282101562003dbe5762003dbe62003990565b500390565b600181815b8085111562003e2257817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003e065762003e0662003990565b8085161562003e1457918102915b93841c939080029062003dc8565b509250929050565b60008262003e3b5750600162000943565b8162003e4a5750600062000943565b816001811462003e63576002811462003e6e5762003e8e565b600191505062000943565b60ff84111562003e825762003e8262003990565b50506001821b62000943565b5060208310610133831016604e8410600b841016171562003eb3575081810a62000943565b62003ebf838362003dc3565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111562003ef45762003ef462003990565b029392505050565b600062003149838362003e2a565b6000821982111562003f205762003f2062003990565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000808585111562003f6557600080fd5b8386111562003f7357600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562003f9c57600080fd5b873562003fa981620032ee565b9650602088013562003fbb81620032ee565b9550604088013594506060880135935060808801356200366481620035e7565b600080600080600080600080610100898b03121562003ff957600080fd5b88356200400681620032ee565b975060208901356200401881620032ee565b965060408901359550606089013594506080890135620040388162003bfc565b935060a08901356200404a81620035e7565b979a969950949793969295929450505060c08201359160e0013590565b60208152600062003149602083018462003a6556fe60c06040523480156200001157600080fd5b5060405162001a7838038062001a788339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516115be620004ba600039600061053001526000818161036f01526104fa01526115be6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b60405161019191906112d5565b60405180910390f35b6101ad6101a8366004611371565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad61020436600461139b565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad610276366004611371565b610552565b6101ad610289366004611371565b61059e565b6101c161029c3660046113d7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d23660046113d7565b60066020526000908152604090205481565b610184610645565b6101ad6102fa366004611371565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad610352366004611371565b6106ed565b6101ad610365366004611371565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f3660046113f9565b6107b2565b005b6101c16103b436600461146c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6060600380546104379061149f565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061149f565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f56565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611521565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c838361101e565b50600192915050565b6060600480546104379061149f565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c8383611124565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661088183611539565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ee3908490611521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4991815260200190565b60405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f81610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166110815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b80600260008282546110939190611521565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906110cd908490611521565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156112495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611285908490611571565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c27565b600060208083528351808285015260005b81811015611302578581018301518582016040015282016112e6565b81811115611314576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136c57600080fd5b919050565b6000806040838503121561138457600080fd5b61138d83611348565b946020939093013593505050565b6000806000606084860312156113b057600080fd5b6113b984611348565b92506113c760208501611348565b9150604084013590509250925092565b6000602082840312156113e957600080fd5b6113f282611348565b9392505050565b600080600080600080600060e0888a03121561141457600080fd5b61141d88611348565b965061142b60208901611348565b95506040880135945060608801359350608088013560ff8116811461144f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561147f57600080fd5b61148883611348565b915061149660208401611348565b90509250929050565b600181811c908216806114b357607f821691505b6020821081036114ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611534576115346114f2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156a5761156a6114f2565b5060010190565b600082821015611583576115836114f2565b50039056fea264697066735822122074c1369adb4b03ecf20b18930bac9df5d9a48b4602516485c969475d7cadf1ac64736f6c634300080f0033a26469706673582212206a1228c6bd1c4dac7ae6928a40eab39a5b5c3c43a9975d5dbb02be6bfa7a9dd364736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50614b51806100206000396000f3fe608060405260043610620001f35760003560e01c806381b1c174116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b806381b1c17414620004615780638da5cb5b146200049b5780638f61151914620004bb57600080fd5b8063318aee3d116200018d5780634638554911620001585780634638554914620003da578063647c576c14620003ff578063715018a614620004245780637b6323c1146200043c57600080fd5b8063318aee3d14620003095780633ae0504714620003785780633da8168214620003905780633e19704314620003b557600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f620002093660046200276e565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f62000721565b3480156200026757600080fd5b506200027f62000279366004620027fb565b6200075a565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002837565b620007ad565b348015620002ca57600080fd5b506200020f620002dc36600462002851565b620007bc565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002876565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b50620002fa620007e8565b3480156200039d57600080fd5b506200022d620003af3660046200295e565b620008db565b348015620003c257600080fd5b50620002fa620003d4366004620029dc565b620009dd565b348015620003e757600080fd5b506200020f620003f936600462002aed565b62000a6a565b3480156200040c57600080fd5b506200020f6200041e36600462002bd4565b62000c03565b3480156200043157600080fd5b506200020f62000d78565b3480156200044957600080fd5b506200020f6200045b36600462002aed565b62000d8e565b3480156200046e57600080fd5b506200027f6200048036600462002837565b6024602052600090815260409020546001600160a01b031681565b348015620004a857600080fd5b50605a546001600160a01b03166200027f565b348015620004c857600080fd5b506027546200027f906001600160a01b031681565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002837565b6200122f565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002c24565b62001274565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002cd8565b6200138b565b348015620005e957600080fd5b506200020f620014e8565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002837565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002876565b6200151f565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007095760405162461bcd60e51b815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e606482015269185b081d195cdd1b995d60b21b608482015260a4015b60405180910390fd5b620007198686868686866200159e565b505050505050565b6027546001600160a01b031633146200074e5760405162461bcd60e51b8152600401620007009062002d40565b62000758620019cf565b565b60006024600084846040516020016200077592919062002db1565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b762001a2d565b608c55565b620007c662001a2d565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008d257826001166001036200085357600181602081106200081f576200081f62002ddb565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000880565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088d60028462002e1d565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c99062002e34565b915050620007f3565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009ce5781600116600103620009585786818151811062000916576200091662002ddb565b6020026020010151836040516020016200093a929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009aa565b828782815181106200096e576200096e62002ddb565b602002602001015160405160200162000991929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b760028362002e1d565b915080620009c58162002e34565b915050620008eb565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a905760405162461bcd60e51b8152600401620007009062002e50565b62000aa68a8a8a8a8a8a8a8a8a8a600162001a89565b62000ab78963ffffffff1662001d1a565b6000836001600160a01b03168387898560405160240162000adb9392919062002f15565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b12919062002f50565b60006040518083038185875af1925050503d806000811462000b51576040519150601f19603f3d011682016040523d82523d6000602084013e62000b56565b606091505b505090508062000bb55760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f46416044820152631253115160e21b606482015260840162000700565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bee95949392919062002f6e565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c245750600054600160ff909116105b8062000c405750303b15801562000c40575060005460ff166001145b62000ca55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000700565b6000805460ff19166001179055801562000cc9576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d2b62001d5c565b801562000d72576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8262001a2d565b62000758600062001dcf565b60225460ff161562000db45760405162461bcd60e51b8152600401620007009062002e50565b62000dca8a8a8a8a8a8a8a8a8a8a600062001a89565b62000ddb8963ffffffff1662001d1a565b6001600160a01b03851662000ec457604080516000808252602082019092526001600160a01b03851690849060405162000e16919062002f50565b60006040518083038185875af1925050503d806000811462000e55576040519150601f19603f3d011682016040523d82523d6000602084013e62000e5a565b606091505b505090508062000ebd5760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201526617d1905253115160ca1b606482015260840162000700565b50620011e2565b60225463ffffffff61010090910481169087160362000ef95762000ef36001600160a01b038616848462001e21565b620011e2565b6000868660405160200162000f1092919062002db1565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620011675760008060008580602001905181019062000f62919062002ff1565b92509250925060008584848460405162000f7c90620026d7565b62000f8a9392919062003067565b8190604051809103906000f590508015801562000fab573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001000573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010269190620030b3565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620011559392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011df565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620011b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011dd9190620030b3565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200121b95949392919062002f6e565b60405180910390a150505050505050505050565b600080620012406101008462002e1d565b905060006200125261010085620030d3565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200128c92919062002db1565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012bf90620026d7565b601f1982820381018352601f909101166040819052620012ec908d908d908d908d908d9060200162003113565b60408051601f19818403018152908290526200130c929160200162003154565b604051602081830303815290604052805190602001206040516020016200136594939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013b15760405162461bcd60e51b8152600401620007009062002e50565b60225463ffffffff610100909104811690841603620013e45760405162461bcd60e51b8152600401620007009062003187565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff16338686348760215460405162001438989796959493929190620031d1565b60405180910390a1620014756200146f6001602260019054906101000a900463ffffffff16338787348880519060200120620009dd565b62001e8b565b6026546001600160a01b03166333d6247d62001490620007e8565b6040518263ffffffff1660e01b8152600401620014af91815260200190565b600060405180830381600087803b158015620014ca57600080fd5b505af1158015620014df573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015155760405162461bcd60e51b8152600401620007009062002d40565b6200075862001fd7565b6200152962001a2d565b6001600160a01b038116620015905760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000700565b6200159b8162001dcf565b50565b60225460ff1615620015c45760405162461bcd60e51b8152600401620007009062002e50565b60225463ffffffff610100909104811690861603620015f75760405162461bcd60e51b8152600401620007009062003187565b60008060606001600160a01b0389166200167e57853414620016745760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201526e4d415443485f4d53475f56414c554560881b606482015260840162000700565b60009150620018ef565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200174c57604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562001713573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017399190620030b3565b50602081015181519094509250620018ed565b84156200176157620017618a88888862002086565b620017786001600160a01b038b1633308a6200248a565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620017cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620017f991908101906200323e565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001838573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200186291908101906200323e565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620018a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018c7919062003277565b604051602001620018db9392919062003067565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162001931989796959493929190620031d1565b60405180910390a1620019566200146f600084868c8c8c8880519060200120620009dd565b6026546001600160a01b03166333d6247d62001971620007e8565b6040518263ffffffff1660e01b81526004016200199091815260200190565b600060405180830381600087803b158015620019ab57600080fd5b505af1158015620019c0573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff1615620019f55760405162461bcd60e51b8152600401620007009062002e50565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000700565b62001a9a8a63ffffffff166200122f565b1562001af55760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c416044820152631253515160e21b606482015260840162000700565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001b69573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001b8f919062003297565b90508060000362001bf95760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201526c17d493d3d517d2539590531251609a1b606482015260840162000700565b60225463ffffffff878116610100909204161462001c805760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d41544348000000000000000000606482015260840162000700565b602254600090610100900463ffffffff1662001c9e57508862001ca1565b50895b62001ccc62001cbd848b8b8b8b8b8b80519060200120620009dd565b8e8e63ffffffff1684620008db565b620019c05760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c4944604482015260640162000700565b600062001d2a6101008362002e1d565b9050600062001d3c61010084620030d3565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001dc95760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000700565b62000758335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001e8690849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620024c4565b505050565b80600162001e9c60206002620033ae565b62001ea89190620033bc565b6021541062001f0d5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000700565b60016021600082825462001f229190620033d6565b909155505060215460005b602081101562001fcc578160011660010362001f6257826001826020811062001f5a5762001f5a62002ddb565b015550505050565b6001816020811062001f785762001f7862002ddb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001fb5919062002e1d565b91508062001fc38162002e34565b91505062001f2d565b5062001e86620033f1565b60225460ff16620020515760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000700565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000620020c983838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200259d92505050565b9050632afa533160e01b6001600160e01b0319821601620022b2576000808080808080620020fb896004818d62003407565b8101906200210a919062003433565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200214c5760405162461bcd60e51b815260040162000700906200348e565b6001600160a01b0386163014620021775760405162461bcd60e51b81526004016200070090620034de565b8a8514620021de5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201526c09e8aa6be9c9ea8be9a82a8869609b1b606482015260840162000700565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200225e919062002f50565b6000604051808303816000865af19150503d80600081146200229d576040519150601f19603f3d011682016040523d82523d6000602084013e620022a2565b606091505b5050505050505050505062002483565b6001600160e01b031981166323f2ebc360e21b14620023145760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000700565b6000808080808080806200232c8a6004818e62003407565b8101906200233b919062003523565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200237f5760405162461bcd60e51b815260040162000700906200348e565b6001600160a01b0387163014620023aa5760405162461bcd60e51b81526004016200070090620034de565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162002433919062002f50565b6000604051808303816000865af19150503d806000811462002472576040519150601f19603f3d011682016040523d82523d6000602084013e62002477565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d729085906323b872dd60e01b9060840162001e4e565b60006200251b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620025a49092919063ffffffff16565b80519091501562001e8657808060200190518101906200253c9190620030b3565b62001e865760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000700565b6020015190565b6060620009d5848460008585600080866001600160a01b03168587604051620025ce919062002f50565b60006040518083038185875af1925050503d80600081146200260d576040519150601f19603f3d011682016040523d82523d6000602084013e62002612565b606091505b5091509150620026258783838762002630565b979650505050505050565b60608315620026a45782516000036200269c576001600160a01b0385163b6200269c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000700565b5081620009d5565b620009d58383815115620026bb5781518083602001fd5b8060405162461bcd60e51b8152600401620007009190620035af565b61155780620035c583390190565b6001600160a01b03811681146200159b57600080fd5b80356200270881620026e5565b919050565b803563ffffffff811681146200270857600080fd5b60008083601f8401126200273557600080fd5b50813567ffffffffffffffff8111156200274e57600080fd5b6020830191508360208285010111156200276757600080fd5b9250929050565b60008060008060008060a087890312156200278857600080fd5b86356200279581620026e5565b9550620027a5602088016200270d565b94506040870135620027b781620026e5565b935060608701359250608087013567ffffffffffffffff811115620027db57600080fd5b620027e989828a0162002722565b979a9699509497509295939492505050565b600080604083850312156200280f57600080fd5b6200281a836200270d565b915060208301356200282c81620026e5565b809150509250929050565b6000602082840312156200284a57600080fd5b5035919050565b6000602082840312156200286457600080fd5b6200286f826200270d565b9392505050565b6000602082840312156200288957600080fd5b81356200286f81620026e5565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620028d857620028d862002896565b604052919050565b600082601f830112620028f257600080fd5b8135602067ffffffffffffffff82111562002911576200291162002896565b8160051b62002922828201620028ac565b92835284810182019282810190878511156200293d57600080fd5b83870192505b84831015620026255782358252918301919083019062002943565b600080600080608085870312156200297557600080fd5b84359350602085013567ffffffffffffffff808211156200299557600080fd5b620029a388838901620028e0565b9450604087013591508082168214620029bb57600080fd5b509396929550929360600135925050565b60ff811681146200159b57600080fd5b600080600080600080600060e0888a031215620029f857600080fd5b873562002a0581620029cc565b965062002a15602089016200270d565b9550604088013562002a2781620026e5565b945062002a37606089016200270d565b9350608088013562002a4981620026e5565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002a835762002a8362002896565b50601f01601f191660200190565b600082601f83011262002aa357600080fd5b813562002aba62002ab48262002a66565b620028ac565b81815284602083860101111562002ad057600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002b0e57600080fd5b8a3567ffffffffffffffff8082111562002b2757600080fd5b62002b358e838f01620028e0565b9b5062002b4560208e016200270d565b9a5060408d0135995060608d0135985062002b6360808e016200270d565b975062002b7360a08e01620026fb565b965062002b8360c08e016200270d565b955062002b9360e08e01620026fb565b94506101008d013593506101208d013591508082111562002bb357600080fd5b5062002bc28d828e0162002a91565b9150509295989b9194979a5092959850565b60008060006060848603121562002bea57600080fd5b62002bf5846200270d565b9250602084013562002c0781620026e5565b9150604084013562002c1981620026e5565b809150509250925092565b600080600080600080600060a0888a03121562002c4057600080fd5b62002c4b886200270d565b9650602088013562002c5d81620026e5565b9550604088013567ffffffffffffffff8082111562002c7b57600080fd5b62002c898b838c0162002722565b909750955060608a013591508082111562002ca357600080fd5b5062002cb28a828b0162002722565b909450925050608088013562002cc881620029cc565b8091505092959891949750929550565b60008060006060848603121562002cee57600080fd5b62002cf9846200270d565b9250602084013562002d0b81620026e5565b9150604084013567ffffffffffffffff81111562002d2857600080fd5b62002d368682870162002a91565b9150509250925092565b6020808252604b908201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660408201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60608201526a18de4818dbdb9d1c9858dd60aa1b608082015260a00190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002e2f5762002e2f62002df1565b500490565b60006001820162002e495762002e4962002e07565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002ed557818101518382015260200162002ebb565b8381111562000d725750506000910152565b6000815180845262002f0181602086016020860162002eb8565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002f479083018462002ee7565b95945050505050565b6000825162002f6481846020870162002eb8565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f83011262002fb757600080fd5b815162002fc862002ab48262002a66565b81815284602083860101111562002fde57600080fd5b620009d582602083016020870162002eb8565b6000806000606084860312156200300757600080fd5b835167ffffffffffffffff808211156200302057600080fd5b6200302e8783880162002fa5565b945060208601519150808211156200304557600080fd5b50620030548682870162002fa5565b925050604084015162002c1981620029cc565b6060815260006200307c606083018662002ee7565b828103602084015262003090818662002ee7565b91505060ff83166040830152949350505050565b80151581146200159b57600080fd5b600060208284031215620030c657600080fd5b81516200286f81620030a4565b600082620030e557620030e562002df1565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003129606083018789620030ea565b82810360208401526200313e818688620030ea565b91505060ff831660408301529695505050505050565b600083516200316881846020880162002eb8565b8351908301906200317e81836020880162002eb8565b01949350505050565b6020808252602a908201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e546040820152692fa122afa4aa29a2a62360b11b606082015260800190565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032258483018762002ee7565b925080851660e085015250509998505050505050505050565b6000602082840312156200325157600080fd5b815167ffffffffffffffff8111156200326957600080fd5b620009d58482850162002fa5565b6000602082840312156200328a57600080fd5b81516200286f81620029cc565b600060208284031215620032aa57600080fd5b5051919050565b600181815b80851115620032f2578160001904821115620032d657620032d662002e07565b80851615620032e457918102915b93841c9390800290620032b6565b509250929050565b6000826200330b57506001620007a7565b816200331a57506000620007a7565b81600181146200333357600281146200333e576200335e565b6001915050620007a7565b60ff84111562003352576200335262002e07565b50506001821b620007a7565b5060208310610133831016604e8410600b841016171562003383575081810a620007a7565b6200338f8383620032b1565b8060001904821115620033a657620033a662002e07565b029392505050565b60006200286f8383620032fa565b600082821015620033d157620033d162002e07565b500390565b60008219821115620033ec57620033ec62002e07565b500190565b634e487b7160e01b600052600160045260246000fd5b600080858511156200341857600080fd5b838611156200342657600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200344f57600080fd5b87356200345c81620026e5565b965060208801356200346e81620026e5565b95506040880135945060608801359350608088013562002a4981620029cc565b60208082526030908201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560408201526f29aa2fa122afaa2422afa9a2a72222a960811b606082015260800190565b60208082526025908201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f42456040820152645f5448495360d81b606082015260800190565b600080600080600080600080610100898b0312156200354157600080fd5b88356200354e81620026e5565b975060208901356200356081620026e5565b9650604089013595506060890135945060808901356200358081620030a4565b935060a08901356200359281620029cc565b979a969950949793969295929450505060c08201359160e0013590565b6020815260006200286f602083018462002ee756fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b14f80bfcbda3f7be499de7c67ec81639549928b9cee16384da9f2fb8c22dce64736f6c634300080f0033a2646970667358221220fad1a6248965920df6eb0285e065ec54caed2e824d877c2b9a54a0ac5b863a7164736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001f35760003560e01c806381b1c174116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b806381b1c17414620004615780638da5cb5b146200049b5780638f61151914620004bb57600080fd5b8063318aee3d116200018d5780634638554911620001585780634638554914620003da578063647c576c14620003ff578063715018a614620004245780637b6323c1146200043c57600080fd5b8063318aee3d14620003095780633ae0504714620003785780633da8168214620003905780633e19704314620003b557600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f620002093660046200276e565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f62000721565b3480156200026757600080fd5b506200027f62000279366004620027fb565b6200075a565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002837565b620007ad565b348015620002ca57600080fd5b506200020f620002dc36600462002851565b620007bc565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002876565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b50620002fa620007e8565b3480156200039d57600080fd5b506200022d620003af3660046200295e565b620008db565b348015620003c257600080fd5b50620002fa620003d4366004620029dc565b620009dd565b348015620003e757600080fd5b506200020f620003f936600462002aed565b62000a6a565b3480156200040c57600080fd5b506200020f6200041e36600462002bd4565b62000c03565b3480156200043157600080fd5b506200020f62000d78565b3480156200044957600080fd5b506200020f6200045b36600462002aed565b62000d8e565b3480156200046e57600080fd5b506200027f6200048036600462002837565b6024602052600090815260409020546001600160a01b031681565b348015620004a857600080fd5b50605a546001600160a01b03166200027f565b348015620004c857600080fd5b506027546200027f906001600160a01b031681565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002837565b6200122f565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002c24565b62001274565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002cd8565b6200138b565b348015620005e957600080fd5b506200020f620014e8565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002837565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002876565b6200151f565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007095760405162461bcd60e51b815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e606482015269185b081d195cdd1b995d60b21b608482015260a4015b60405180910390fd5b620007198686868686866200159e565b505050505050565b6027546001600160a01b031633146200074e5760405162461bcd60e51b8152600401620007009062002d40565b62000758620019cf565b565b60006024600084846040516020016200077592919062002db1565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b762001a2d565b608c55565b620007c662001a2d565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008d257826001166001036200085357600181602081106200081f576200081f62002ddb565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000880565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088d60028462002e1d565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c99062002e34565b915050620007f3565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009ce5781600116600103620009585786818151811062000916576200091662002ddb565b6020026020010151836040516020016200093a929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009aa565b828782815181106200096e576200096e62002ddb565b602002602001015160405160200162000991929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b760028362002e1d565b915080620009c58162002e34565b915050620008eb565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a905760405162461bcd60e51b8152600401620007009062002e50565b62000aa68a8a8a8a8a8a8a8a8a8a600162001a89565b62000ab78963ffffffff1662001d1a565b6000836001600160a01b03168387898560405160240162000adb9392919062002f15565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b12919062002f50565b60006040518083038185875af1925050503d806000811462000b51576040519150601f19603f3d011682016040523d82523d6000602084013e62000b56565b606091505b505090508062000bb55760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f46416044820152631253115160e21b606482015260840162000700565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bee95949392919062002f6e565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c245750600054600160ff909116105b8062000c405750303b15801562000c40575060005460ff166001145b62000ca55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000700565b6000805460ff19166001179055801562000cc9576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d2b62001d5c565b801562000d72576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8262001a2d565b62000758600062001dcf565b60225460ff161562000db45760405162461bcd60e51b8152600401620007009062002e50565b62000dca8a8a8a8a8a8a8a8a8a8a600062001a89565b62000ddb8963ffffffff1662001d1a565b6001600160a01b03851662000ec457604080516000808252602082019092526001600160a01b03851690849060405162000e16919062002f50565b60006040518083038185875af1925050503d806000811462000e55576040519150601f19603f3d011682016040523d82523d6000602084013e62000e5a565b606091505b505090508062000ebd5760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201526617d1905253115160ca1b606482015260840162000700565b50620011e2565b60225463ffffffff61010090910481169087160362000ef95762000ef36001600160a01b038616848462001e21565b620011e2565b6000868660405160200162000f1092919062002db1565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620011675760008060008580602001905181019062000f62919062002ff1565b92509250925060008584848460405162000f7c90620026d7565b62000f8a9392919062003067565b8190604051809103906000f590508015801562000fab573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001000573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010269190620030b3565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620011559392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011df565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620011b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011dd9190620030b3565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200121b95949392919062002f6e565b60405180910390a150505050505050505050565b600080620012406101008462002e1d565b905060006200125261010085620030d3565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200128c92919062002db1565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012bf90620026d7565b601f1982820381018352601f909101166040819052620012ec908d908d908d908d908d9060200162003113565b60408051601f19818403018152908290526200130c929160200162003154565b604051602081830303815290604052805190602001206040516020016200136594939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013b15760405162461bcd60e51b8152600401620007009062002e50565b60225463ffffffff610100909104811690841603620013e45760405162461bcd60e51b8152600401620007009062003187565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff16338686348760215460405162001438989796959493929190620031d1565b60405180910390a1620014756200146f6001602260019054906101000a900463ffffffff16338787348880519060200120620009dd565b62001e8b565b6026546001600160a01b03166333d6247d62001490620007e8565b6040518263ffffffff1660e01b8152600401620014af91815260200190565b600060405180830381600087803b158015620014ca57600080fd5b505af1158015620014df573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015155760405162461bcd60e51b8152600401620007009062002d40565b6200075862001fd7565b6200152962001a2d565b6001600160a01b038116620015905760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000700565b6200159b8162001dcf565b50565b60225460ff1615620015c45760405162461bcd60e51b8152600401620007009062002e50565b60225463ffffffff610100909104811690861603620015f75760405162461bcd60e51b8152600401620007009062003187565b60008060606001600160a01b0389166200167e57853414620016745760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201526e4d415443485f4d53475f56414c554560881b606482015260840162000700565b60009150620018ef565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200174c57604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562001713573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017399190620030b3565b50602081015181519094509250620018ed565b84156200176157620017618a88888862002086565b620017786001600160a01b038b1633308a6200248a565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620017cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620017f991908101906200323e565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001838573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200186291908101906200323e565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620018a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018c7919062003277565b604051602001620018db9392919062003067565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162001931989796959493929190620031d1565b60405180910390a1620019566200146f600084868c8c8c8880519060200120620009dd565b6026546001600160a01b03166333d6247d62001971620007e8565b6040518263ffffffff1660e01b81526004016200199091815260200190565b600060405180830381600087803b158015620019ab57600080fd5b505af1158015620019c0573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff1615620019f55760405162461bcd60e51b8152600401620007009062002e50565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000700565b62001a9a8a63ffffffff166200122f565b1562001af55760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c416044820152631253515160e21b606482015260840162000700565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001b69573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001b8f919062003297565b90508060000362001bf95760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201526c17d493d3d517d2539590531251609a1b606482015260840162000700565b60225463ffffffff878116610100909204161462001c805760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d41544348000000000000000000606482015260840162000700565b602254600090610100900463ffffffff1662001c9e57508862001ca1565b50895b62001ccc62001cbd848b8b8b8b8b8b80519060200120620009dd565b8e8e63ffffffff1684620008db565b620019c05760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c4944604482015260640162000700565b600062001d2a6101008362002e1d565b9050600062001d3c61010084620030d3565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001dc95760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000700565b62000758335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001e8690849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620024c4565b505050565b80600162001e9c60206002620033ae565b62001ea89190620033bc565b6021541062001f0d5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000700565b60016021600082825462001f229190620033d6565b909155505060215460005b602081101562001fcc578160011660010362001f6257826001826020811062001f5a5762001f5a62002ddb565b015550505050565b6001816020811062001f785762001f7862002ddb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001fb5919062002e1d565b91508062001fc38162002e34565b91505062001f2d565b5062001e86620033f1565b60225460ff16620020515760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000700565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000620020c983838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200259d92505050565b9050632afa533160e01b6001600160e01b0319821601620022b2576000808080808080620020fb896004818d62003407565b8101906200210a919062003433565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200214c5760405162461bcd60e51b815260040162000700906200348e565b6001600160a01b0386163014620021775760405162461bcd60e51b81526004016200070090620034de565b8a8514620021de5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201526c09e8aa6be9c9ea8be9a82a8869609b1b606482015260840162000700565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200225e919062002f50565b6000604051808303816000865af19150503d80600081146200229d576040519150601f19603f3d011682016040523d82523d6000602084013e620022a2565b606091505b5050505050505050505062002483565b6001600160e01b031981166323f2ebc360e21b14620023145760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000700565b6000808080808080806200232c8a6004818e62003407565b8101906200233b919062003523565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200237f5760405162461bcd60e51b815260040162000700906200348e565b6001600160a01b0387163014620023aa5760405162461bcd60e51b81526004016200070090620034de565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162002433919062002f50565b6000604051808303816000865af19150503d806000811462002472576040519150601f19603f3d011682016040523d82523d6000602084013e62002477565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d729085906323b872dd60e01b9060840162001e4e565b60006200251b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620025a49092919063ffffffff16565b80519091501562001e8657808060200190518101906200253c9190620030b3565b62001e865760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000700565b6020015190565b6060620009d5848460008585600080866001600160a01b03168587604051620025ce919062002f50565b60006040518083038185875af1925050503d80600081146200260d576040519150601f19603f3d011682016040523d82523d6000602084013e62002612565b606091505b5091509150620026258783838762002630565b979650505050505050565b60608315620026a45782516000036200269c576001600160a01b0385163b6200269c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000700565b5081620009d5565b620009d58383815115620026bb5781518083602001fd5b8060405162461bcd60e51b8152600401620007009190620035af565b61155780620035c583390190565b6001600160a01b03811681146200159b57600080fd5b80356200270881620026e5565b919050565b803563ffffffff811681146200270857600080fd5b60008083601f8401126200273557600080fd5b50813567ffffffffffffffff8111156200274e57600080fd5b6020830191508360208285010111156200276757600080fd5b9250929050565b60008060008060008060a087890312156200278857600080fd5b86356200279581620026e5565b9550620027a5602088016200270d565b94506040870135620027b781620026e5565b935060608701359250608087013567ffffffffffffffff811115620027db57600080fd5b620027e989828a0162002722565b979a9699509497509295939492505050565b600080604083850312156200280f57600080fd5b6200281a836200270d565b915060208301356200282c81620026e5565b809150509250929050565b6000602082840312156200284a57600080fd5b5035919050565b6000602082840312156200286457600080fd5b6200286f826200270d565b9392505050565b6000602082840312156200288957600080fd5b81356200286f81620026e5565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620028d857620028d862002896565b604052919050565b600082601f830112620028f257600080fd5b8135602067ffffffffffffffff82111562002911576200291162002896565b8160051b62002922828201620028ac565b92835284810182019282810190878511156200293d57600080fd5b83870192505b84831015620026255782358252918301919083019062002943565b600080600080608085870312156200297557600080fd5b84359350602085013567ffffffffffffffff808211156200299557600080fd5b620029a388838901620028e0565b9450604087013591508082168214620029bb57600080fd5b509396929550929360600135925050565b60ff811681146200159b57600080fd5b600080600080600080600060e0888a031215620029f857600080fd5b873562002a0581620029cc565b965062002a15602089016200270d565b9550604088013562002a2781620026e5565b945062002a37606089016200270d565b9350608088013562002a4981620026e5565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002a835762002a8362002896565b50601f01601f191660200190565b600082601f83011262002aa357600080fd5b813562002aba62002ab48262002a66565b620028ac565b81815284602083860101111562002ad057600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002b0e57600080fd5b8a3567ffffffffffffffff8082111562002b2757600080fd5b62002b358e838f01620028e0565b9b5062002b4560208e016200270d565b9a5060408d0135995060608d0135985062002b6360808e016200270d565b975062002b7360a08e01620026fb565b965062002b8360c08e016200270d565b955062002b9360e08e01620026fb565b94506101008d013593506101208d013591508082111562002bb357600080fd5b5062002bc28d828e0162002a91565b9150509295989b9194979a5092959850565b60008060006060848603121562002bea57600080fd5b62002bf5846200270d565b9250602084013562002c0781620026e5565b9150604084013562002c1981620026e5565b809150509250925092565b600080600080600080600060a0888a03121562002c4057600080fd5b62002c4b886200270d565b9650602088013562002c5d81620026e5565b9550604088013567ffffffffffffffff8082111562002c7b57600080fd5b62002c898b838c0162002722565b909750955060608a013591508082111562002ca357600080fd5b5062002cb28a828b0162002722565b909450925050608088013562002cc881620029cc565b8091505092959891949750929550565b60008060006060848603121562002cee57600080fd5b62002cf9846200270d565b9250602084013562002d0b81620026e5565b9150604084013567ffffffffffffffff81111562002d2857600080fd5b62002d368682870162002a91565b9150509250925092565b6020808252604b908201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660408201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60608201526a18de4818dbdb9d1c9858dd60aa1b608082015260a00190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002e2f5762002e2f62002df1565b500490565b60006001820162002e495762002e4962002e07565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002ed557818101518382015260200162002ebb565b8381111562000d725750506000910152565b6000815180845262002f0181602086016020860162002eb8565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002f479083018462002ee7565b95945050505050565b6000825162002f6481846020870162002eb8565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f83011262002fb757600080fd5b815162002fc862002ab48262002a66565b81815284602083860101111562002fde57600080fd5b620009d582602083016020870162002eb8565b6000806000606084860312156200300757600080fd5b835167ffffffffffffffff808211156200302057600080fd5b6200302e8783880162002fa5565b945060208601519150808211156200304557600080fd5b50620030548682870162002fa5565b925050604084015162002c1981620029cc565b6060815260006200307c606083018662002ee7565b828103602084015262003090818662002ee7565b91505060ff83166040830152949350505050565b80151581146200159b57600080fd5b600060208284031215620030c657600080fd5b81516200286f81620030a4565b600082620030e557620030e562002df1565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003129606083018789620030ea565b82810360208401526200313e818688620030ea565b91505060ff831660408301529695505050505050565b600083516200316881846020880162002eb8565b8351908301906200317e81836020880162002eb8565b01949350505050565b6020808252602a908201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e546040820152692fa122afa4aa29a2a62360b11b606082015260800190565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032258483018762002ee7565b925080851660e085015250509998505050505050505050565b6000602082840312156200325157600080fd5b815167ffffffffffffffff8111156200326957600080fd5b620009d58482850162002fa5565b6000602082840312156200328a57600080fd5b81516200286f81620029cc565b600060208284031215620032aa57600080fd5b5051919050565b600181815b80851115620032f2578160001904821115620032d657620032d662002e07565b80851615620032e457918102915b93841c9390800290620032b6565b509250929050565b6000826200330b57506001620007a7565b816200331a57506000620007a7565b81600181146200333357600281146200333e576200335e565b6001915050620007a7565b60ff84111562003352576200335262002e07565b50506001821b620007a7565b5060208310610133831016604e8410600b841016171562003383575081810a620007a7565b6200338f8383620032b1565b8060001904821115620033a657620033a662002e07565b029392505050565b60006200286f8383620032fa565b600082821015620033d157620033d162002e07565b500390565b60008219821115620033ec57620033ec62002e07565b500190565b634e487b7160e01b600052600160045260246000fd5b600080858511156200341857600080fd5b838611156200342657600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200344f57600080fd5b87356200345c81620026e5565b965060208801356200346e81620026e5565b95506040880135945060608801359350608088013562002a4981620029cc565b60208082526030908201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560408201526f29aa2fa122afaa2422afa9a2a72222a960811b606082015260800190565b60208082526025908201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f42456040820152645f5448495360d81b606082015260800190565b600080600080600080600080610100898b0312156200354157600080fd5b88356200354e81620026e5565b975060208901356200356081620026e5565b9650604089013595506060890135945060808901356200358081620030a4565b935060a08901356200359281620029cc565b979a969950949793969295929450505060c08201359160e0013590565b6020815260006200286f602083018462002ee756fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b14f80bfcbda3f7be499de7c67ec81639549928b9cee16384da9f2fb8c22dce64736f6c634300080f0033a2646970667358221220fad1a6248965920df6eb0285e065ec54caed2e824d877c2b9a54a0ac5b863a7164736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/ERC20PermitMock.json b/compiled-contracts/ERC20PermitMock.json index 9514a4230..7569f67ac 100644 --- a/compiled-contracts/ERC20PermitMock.json +++ b/compiled-contracts/ERC20PermitMock.json @@ -517,8 +517,8 @@ "type": "function" } ], - "bytecode": "0x6080604052604051620018923803806200189283398101604081905262000026916200022b565b838360036200003683826200034c565b5060046200004582826200034c565b5050506200005a82826200007160201b60201c565b50508151602090920191909120600655506200043f565b6001600160a01b038216620000cc5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620000e0919062000418565b90915550506001600160a01b038216600090815260208190526040812080548392906200010f90849062000418565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200018657600080fd5b81516001600160401b0380821115620001a357620001a36200015e565b604051601f8301601f19908116603f01168101908282118183101715620001ce57620001ce6200015e565b81604052838152602092508683858801011115620001eb57600080fd5b600091505b838210156200020f5785820183015181830184015290820190620001f0565b83821115620002215760008385830101525b9695505050505050565b600080600080608085870312156200024257600080fd5b84516001600160401b03808211156200025a57600080fd5b620002688883890162000174565b955060208701519150808211156200027f57600080fd5b506200028e8782880162000174565b604087015190945090506001600160a01b0381168114620002ae57600080fd5b6060959095015193969295505050565b600181811c90821680620002d357607f821691505b602082108103620002f457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200015957600081815260208120601f850160051c81016020861015620003235750805b601f850160051c820191505b8181101562000344578281556001016200032f565b505050505050565b81516001600160401b038111156200036857620003686200015e565b6200038081620003798454620002be565b84620002fa565b602080601f831160018114620003b857600084156200039f5750858301515b600019600386901b1c1916600185901b17855562000344565b600085815260208120601f198616915b82811015620003e957888601518255948401946001909101908401620003c8565b5085821015620004085787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156200043a57634e487b7160e01b600052601160045260246000fd5b500190565b611443806200044f6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806340c10f19116100e35780639e4e73181161008c578063c473af3311610066578063c473af33146103d6578063d505accf146103fd578063dd62ed3e1461041057600080fd5b80639e4e731814610389578063a457c2d7146103b0578063a9059cbb146103c357600080fd5b806370a08231116100bd57806370a082311461032b5780637ecebe001461036157806395d89b411461038157600080fd5b806340c10f19146102f257806342966c681461030557806356189cb41461031857600080fd5b806323b872dd116101455780633408e4701161011f5780633408e4701461024c5780633644e5151461025257806339509351146102df57600080fd5b806323b872dd1461020357806330adf81f14610216578063313ce5671461023d57600080fd5b8063095ea7b311610176578063095ea7b3146101c357806318160ddd146101e6578063222f5be0146101ee57600080fd5b806304622c2e1461019257806306fdde03146101ae575b600080fd5b61019b60065481565b6040519081526020015b60405180910390f35b6101b6610456565b6040516101a59190611141565b6101d66101d13660046111dd565b6104e8565b60405190151581526020016101a5565b60025461019b565b6102016101fc366004611207565b610500565b005b6101d6610211366004611207565b610510565b61019b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b604051601281526020016101a5565b4661019b565b61019b6006546000907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f907fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc646604080516020810195909552840192909252606083015260808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6101d66102ed3660046111dd565b610534565b6102016103003660046111dd565b610580565b610201610313366004611243565b61058e565b610201610326366004611207565b61059b565b61019b61033936600461125c565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b61019b61036f36600461125c565b60056020526000908152604090205481565b6101b66105a6565b61019b7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc681565b6101d66103be3660046111dd565b6105b5565b6101d66103d13660046111dd565b610671565b61019b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61020161040b36600461127e565b61067f565b61019b61041e3660046112f1565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461046590611324565b80601f016020809104026020016040519081016040528092919081815260200182805461049190611324565b80156104de5780601f106104b3576101008083540402835291602001916104de565b820191906000526020600020905b8154815290600101906020018083116104c157829003601f168201915b5050505050905090565b6000336104f68185856107ac565b5060019392505050565b61050b83838361092b565b505050565b60003361051e858285610b92565b61052985858561092b565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104f6908290869061057b9087906113a6565b6107ac565b61058a8282610c49565b5050565b6105983382610d4f565b50565b61050b8383836107ac565b60606004805461046590611324565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156106645760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61052982868684036107ac565b6000336104f681858561092b565b428410156106cf5760405162461bcd60e51b815260206004820152601960248201527f48455a3a3a7065726d69743a20415554485f4558504952454400000000000000604482015260640161065b565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260056020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a919086610729836113be565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506107978882868686610f08565b6107a28888886107ac565b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166108345760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff82166108bd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff83166109b45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff8216610a3d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ad95760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610b1d9084906113a6565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610b8391815260200190565b60405180910390a35b50505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b8c5781811015610c3c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161065b565b610b8c84848484036107ac565b73ffffffffffffffffffffffffffffffffffffffff8216610cac5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161065b565b8060026000828254610cbe91906113a6565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610cf89084906113a6565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8216610dd85760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610e745760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610eb09084906113f6565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600654604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f602080830191909152818301939093527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528251808303909101815260c08201909252815191909201207f190100000000000000000000000000000000000000000000000000000000000060e083015260e2820181905261010282018690529060009061012201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015611054573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116158015906110cf57508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6107a25760405162461bcd60e51b815260206004820152602b60248201527f48455a3a3a5f76616c69646174655369676e6564446174613a20494e56414c4960448201527f445f5349474e4154555245000000000000000000000000000000000000000000606482015260840161065b565b600060208083528351808285015260005b8181101561116e57858101830151858201604001528201611152565b81811115611180576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111d857600080fd5b919050565b600080604083850312156111f057600080fd5b6111f9836111b4565b946020939093013593505050565b60008060006060848603121561121c57600080fd5b611225846111b4565b9250611233602085016111b4565b9150604084013590509250925092565b60006020828403121561125557600080fd5b5035919050565b60006020828403121561126e57600080fd5b611277826111b4565b9392505050565b600080600080600080600060e0888a03121561129957600080fd5b6112a2886111b4565b96506112b0602089016111b4565b95506040880135945060608801359350608088013560ff811681146112d457600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561130457600080fd5b61130d836111b4565b915061131b602084016111b4565b90509250929050565b600181811c9082168061133857607f821691505b602082108103611371577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113b9576113b9611377565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036113ef576113ef611377565b5060010190565b60008282101561140857611408611377565b50039056fea2646970667358221220fca20729a90e81ceeeaa5285d72846fd512c992192630ec1c849572ca45c3ec264736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061018d5760003560e01c806340c10f19116100e35780639e4e73181161008c578063c473af3311610066578063c473af33146103d6578063d505accf146103fd578063dd62ed3e1461041057600080fd5b80639e4e731814610389578063a457c2d7146103b0578063a9059cbb146103c357600080fd5b806370a08231116100bd57806370a082311461032b5780637ecebe001461036157806395d89b411461038157600080fd5b806340c10f19146102f257806342966c681461030557806356189cb41461031857600080fd5b806323b872dd116101455780633408e4701161011f5780633408e4701461024c5780633644e5151461025257806339509351146102df57600080fd5b806323b872dd1461020357806330adf81f14610216578063313ce5671461023d57600080fd5b8063095ea7b311610176578063095ea7b3146101c357806318160ddd146101e6578063222f5be0146101ee57600080fd5b806304622c2e1461019257806306fdde03146101ae575b600080fd5b61019b60065481565b6040519081526020015b60405180910390f35b6101b6610456565b6040516101a59190611141565b6101d66101d13660046111dd565b6104e8565b60405190151581526020016101a5565b60025461019b565b6102016101fc366004611207565b610500565b005b6101d6610211366004611207565b610510565b61019b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b604051601281526020016101a5565b4661019b565b61019b6006546000907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f907fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc646604080516020810195909552840192909252606083015260808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6101d66102ed3660046111dd565b610534565b6102016103003660046111dd565b610580565b610201610313366004611243565b61058e565b610201610326366004611207565b61059b565b61019b61033936600461125c565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b61019b61036f36600461125c565b60056020526000908152604090205481565b6101b66105a6565b61019b7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc681565b6101d66103be3660046111dd565b6105b5565b6101d66103d13660046111dd565b610671565b61019b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61020161040b36600461127e565b61067f565b61019b61041e3660046112f1565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461046590611324565b80601f016020809104026020016040519081016040528092919081815260200182805461049190611324565b80156104de5780601f106104b3576101008083540402835291602001916104de565b820191906000526020600020905b8154815290600101906020018083116104c157829003601f168201915b5050505050905090565b6000336104f68185856107ac565b5060019392505050565b61050b83838361092b565b505050565b60003361051e858285610b92565b61052985858561092b565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104f6908290869061057b9087906113a6565b6107ac565b61058a8282610c49565b5050565b6105983382610d4f565b50565b61050b8383836107ac565b60606004805461046590611324565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156106645760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61052982868684036107ac565b6000336104f681858561092b565b428410156106cf5760405162461bcd60e51b815260206004820152601960248201527f48455a3a3a7065726d69743a20415554485f4558504952454400000000000000604482015260640161065b565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260056020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a919086610729836113be565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506107978882868686610f08565b6107a28888886107ac565b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83166108345760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff82166108bd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff83166109b45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff8216610a3d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ad95760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610b1d9084906113a6565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610b8391815260200190565b60405180910390a35b50505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b8c5781811015610c3c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161065b565b610b8c84848484036107ac565b73ffffffffffffffffffffffffffffffffffffffff8216610cac5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161065b565b8060026000828254610cbe91906113a6565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610cf89084906113a6565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8216610dd85760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610e745760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161065b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610eb09084906113f6565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600654604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f602080830191909152818301939093527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528251808303909101815260c08201909252815191909201207f190100000000000000000000000000000000000000000000000000000000000060e083015260e2820181905261010282018690529060009061012201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015611054573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116158015906110cf57508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6107a25760405162461bcd60e51b815260206004820152602b60248201527f48455a3a3a5f76616c69646174655369676e6564446174613a20494e56414c4960448201527f445f5349474e4154555245000000000000000000000000000000000000000000606482015260840161065b565b600060208083528351808285015260005b8181101561116e57858101830151858201604001528201611152565b81811115611180576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111d857600080fd5b919050565b600080604083850312156111f057600080fd5b6111f9836111b4565b946020939093013593505050565b60008060006060848603121561121c57600080fd5b611225846111b4565b9250611233602085016111b4565b9150604084013590509250925092565b60006020828403121561125557600080fd5b5035919050565b60006020828403121561126e57600080fd5b611277826111b4565b9392505050565b600080600080600080600060e0888a03121561129957600080fd5b6112a2886111b4565b96506112b0602089016111b4565b95506040880135945060608801359350608088013560ff811681146112d457600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561130457600080fd5b61130d836111b4565b915061131b602084016111b4565b90509250929050565b600181811c9082168061133857607f821691505b602082108103611371577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113b9576113b9611377565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036113ef576113ef611377565b5060010190565b60008282101561140857611408611377565b50039056fea2646970667358221220fca20729a90e81ceeeaa5285d72846fd512c992192630ec1c849572ca45c3ec264736f6c634300080f0033", + "bytecode": "0x60806040526040516200144b3803806200144b833981016040819052620000269162000209565b838360036200003683826200032a565b5060046200004582826200032a565b5050506200005a82826200007160201b60201c565b50508151602090920191909120600655506200041d565b6001600160a01b038216620000cc5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620000e09190620003f6565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200016457600080fd5b81516001600160401b03808211156200018157620001816200013c565b604051601f8301601f19908116603f01168101908282118183101715620001ac57620001ac6200013c565b81604052838152602092508683858801011115620001c957600080fd5b600091505b83821015620001ed5785820183015181830184015290820190620001ce565b83821115620001ff5760008385830101525b9695505050505050565b600080600080608085870312156200022057600080fd5b84516001600160401b03808211156200023857600080fd5b620002468883890162000152565b955060208701519150808211156200025d57600080fd5b506200026c8782880162000152565b604087015190945090506001600160a01b03811681146200028c57600080fd5b6060959095015193969295505050565b600181811c90821680620002b157607f821691505b602082108103620002d257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200013757600081815260208120601f850160051c81016020861015620003015750805b601f850160051c820191505b8181101562000322578281556001016200030d565b505050505050565b81516001600160401b038111156200034657620003466200013c565b6200035e816200035784546200029c565b84620002d8565b602080601f8311600181146200039657600084156200037d5750858301515b600019600386901b1c1916600185901b17855562000322565b600085815260208120601f198616915b82811015620003c757888601518255948401946001909101908401620003a6565b5085821015620003e65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156200041857634e487b7160e01b600052601160045260246000fd5b500190565b61101e806200042d6000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806340c10f19116100c35780639e4e73181161007c5780639e4e73181461033c578063a457c2d714610363578063a9059cbb14610376578063c473af3314610389578063d505accf146103b0578063dd62ed3e146103c357600080fd5b806340c10f19146102b257806342966c68146102c557806356189cb4146102d857806370a08231146102eb5780637ecebe001461031457806395d89b411461033457600080fd5b806323b872dd1161011557806323b872dd146101c357806330adf81f146101d6578063313ce567146101fd5780633408e4701461020c5780633644e51514610212578063395093511461029f57600080fd5b806304622c2e1461015257806306fdde031461016e578063095ea7b31461018357806318160ddd146101a6578063222f5be0146101ae575b600080fd5b61015b60065481565b6040519081526020015b60405180910390f35b6101766103d6565b6040516101659190610daf565b610196610191366004610e20565b610468565b6040519015158152602001610165565b60025461015b565b6101c16101bc366004610e4a565b610480565b005b6101966101d1366004610e4a565b610490565b61015b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60405160128152602001610165565b4661015b565b61015b6006546000907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f907fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc646604080516020810195909552840192909252606083015260808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6101966102ad366004610e20565b6104b4565b6101c16102c0366004610e20565b6104d6565b6101c16102d3366004610e86565b6104e4565b6101c16102e6366004610e4a565b6104f1565b61015b6102f9366004610e9f565b6001600160a01b031660009081526020819052604090205490565b61015b610322366004610e9f565b60056020526000908152604090205481565b6101766104fc565b61015b7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc681565b610196610371366004610e20565b61050b565b610196610384366004610e20565b61058b565b61015b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101c16103be366004610ec1565b610599565b61015b6103d1366004610f34565b6106ac565b6060600380546103e590610f67565b80601f016020809104026020016040519081016040528092919081815260200182805461041190610f67565b801561045e5780601f106104335761010080835404028352916020019161045e565b820191906000526020600020905b81548152906001019060200180831161044157829003601f168201915b5050505050905090565b6000336104768185856106d7565b5060019392505050565b61048b8383836107fb565b505050565b60003361049e8582856109a1565b6104a98585856107fb565b506001949350505050565b6000336104768185856104c783836106ac565b6104d19190610fb7565b6106d7565b6104e08282610a15565b5050565b6104ee3382610ad4565b50565b61048b8383836106d7565b6060600480546103e590610f67565b6000338161051982866106ac565b90508381101561057e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6104a982868684036106d7565b6000336104768185856107fb565b428410156105e95760405162461bcd60e51b815260206004820152601960248201527f48455a3a3a7065726d69743a20415554485f45585049524544000000000000006044820152606401610575565b6001600160a01b038716600090815260056020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661063683610fcf565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506106978882868686610c06565b6106a28888886106d7565b5050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166107395760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610575565b6001600160a01b03821661079a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610575565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661085f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610575565b6001600160a01b0382166108c15760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610575565b6001600160a01b038316600090815260208190526040902054818110156109395760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610575565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b50505050565b60006109ad84846106ac565b9050600019811461099b5781811015610a085760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610575565b61099b84848484036106d7565b6001600160a01b038216610a6b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610575565b8060026000828254610a7d9190610fb7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610b345760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610575565b6001600160a01b03821660009081526020819052604090205481811015610ba85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610575565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600654604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f602080830191909152818301939093527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528251808303909101815260c082019092528151919092012061190160f01b60e083015260e282018190526101028201869052906000906101220160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610d19573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590610d4f5750876001600160a01b0316816001600160a01b0316145b6106a25760405162461bcd60e51b815260206004820152602b60248201527f48455a3a3a5f76616c69646174655369676e6564446174613a20494e56414c4960448201526a445f5349474e415455524560a81b6064820152608401610575565b600060208083528351808285015260005b81811015610ddc57858101830151858201604001528201610dc0565b81811115610dee576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e1b57600080fd5b919050565b60008060408385031215610e3357600080fd5b610e3c83610e04565b946020939093013593505050565b600080600060608486031215610e5f57600080fd5b610e6884610e04565b9250610e7660208501610e04565b9150604084013590509250925092565b600060208284031215610e9857600080fd5b5035919050565b600060208284031215610eb157600080fd5b610eba82610e04565b9392505050565b600080600080600080600060e0888a031215610edc57600080fd5b610ee588610e04565b9650610ef360208901610e04565b95506040880135945060608801359350608088013560ff81168114610f1757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f4757600080fd5b610f5083610e04565b9150610f5e60208401610e04565b90509250929050565b600181811c90821680610f7b57607f821691505b602082108103610f9b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610fca57610fca610fa1565b500190565b600060018201610fe157610fe1610fa1565b506001019056fea2646970667358221220fed9c4e501a554d351ae79d6f67cb0180f085eba33f9e7632903be61c06b48c664736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061014d5760003560e01c806340c10f19116100c35780639e4e73181161007c5780639e4e73181461033c578063a457c2d714610363578063a9059cbb14610376578063c473af3314610389578063d505accf146103b0578063dd62ed3e146103c357600080fd5b806340c10f19146102b257806342966c68146102c557806356189cb4146102d857806370a08231146102eb5780637ecebe001461031457806395d89b411461033457600080fd5b806323b872dd1161011557806323b872dd146101c357806330adf81f146101d6578063313ce567146101fd5780633408e4701461020c5780633644e51514610212578063395093511461029f57600080fd5b806304622c2e1461015257806306fdde031461016e578063095ea7b31461018357806318160ddd146101a6578063222f5be0146101ae575b600080fd5b61015b60065481565b6040519081526020015b60405180910390f35b6101766103d6565b6040516101659190610daf565b610196610191366004610e20565b610468565b6040519015158152602001610165565b60025461015b565b6101c16101bc366004610e4a565b610480565b005b6101966101d1366004610e4a565b610490565b61015b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60405160128152602001610165565b4661015b565b61015b6006546000907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f907fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc646604080516020810195909552840192909252606083015260808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6101966102ad366004610e20565b6104b4565b6101c16102c0366004610e20565b6104d6565b6101c16102d3366004610e86565b6104e4565b6101c16102e6366004610e4a565b6104f1565b61015b6102f9366004610e9f565b6001600160a01b031660009081526020819052604090205490565b61015b610322366004610e9f565b60056020526000908152604090205481565b6101766104fc565b61015b7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc681565b610196610371366004610e20565b61050b565b610196610384366004610e20565b61058b565b61015b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101c16103be366004610ec1565b610599565b61015b6103d1366004610f34565b6106ac565b6060600380546103e590610f67565b80601f016020809104026020016040519081016040528092919081815260200182805461041190610f67565b801561045e5780601f106104335761010080835404028352916020019161045e565b820191906000526020600020905b81548152906001019060200180831161044157829003601f168201915b5050505050905090565b6000336104768185856106d7565b5060019392505050565b61048b8383836107fb565b505050565b60003361049e8582856109a1565b6104a98585856107fb565b506001949350505050565b6000336104768185856104c783836106ac565b6104d19190610fb7565b6106d7565b6104e08282610a15565b5050565b6104ee3382610ad4565b50565b61048b8383836106d7565b6060600480546103e590610f67565b6000338161051982866106ac565b90508381101561057e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6104a982868684036106d7565b6000336104768185856107fb565b428410156105e95760405162461bcd60e51b815260206004820152601960248201527f48455a3a3a7065726d69743a20415554485f45585049524544000000000000006044820152606401610575565b6001600160a01b038716600090815260056020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661063683610fcf565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506106978882868686610c06565b6106a28888886106d7565b5050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166107395760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610575565b6001600160a01b03821661079a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610575565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661085f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610575565b6001600160a01b0382166108c15760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610575565b6001600160a01b038316600090815260208190526040902054818110156109395760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610575565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b50505050565b60006109ad84846106ac565b9050600019811461099b5781811015610a085760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610575565b61099b84848484036106d7565b6001600160a01b038216610a6b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610575565b8060026000828254610a7d9190610fb7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610b345760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610575565b6001600160a01b03821660009081526020819052604090205481811015610ba85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610575565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600654604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f602080830191909152818301939093527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528251808303909101815260c082019092528151919092012061190160f01b60e083015260e282018190526101028201869052906000906101220160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610d19573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590610d4f5750876001600160a01b0316816001600160a01b0316145b6106a25760405162461bcd60e51b815260206004820152602b60248201527f48455a3a3a5f76616c69646174655369676e6564446174613a20494e56414c4960448201526a445f5349474e415455524560a81b6064820152608401610575565b600060208083528351808285015260005b81811015610ddc57858101830151858201604001528201610dc0565b81811115610dee576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e1b57600080fd5b919050565b60008060408385031215610e3357600080fd5b610e3c83610e04565b946020939093013593505050565b600080600060608486031215610e5f57600080fd5b610e6884610e04565b9250610e7660208501610e04565b9150604084013590509250925092565b600060208284031215610e9857600080fd5b5035919050565b600060208284031215610eb157600080fd5b610eba82610e04565b9392505050565b600080600080600080600060e0888a031215610edc57600080fd5b610ee588610e04565b9650610ef360208901610e04565b95506040880135945060608801359350608088013560ff81168114610f1757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f4757600080fd5b610f5083610e04565b9150610f5e60208401610e04565b90509250929050565b600181811c90821680610f7b57607f821691505b602082108103610f9b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610fca57610fca610fa1565b500190565b600060018201610fe157610fe1610fa1565b506001019056fea2646970667358221220fed9c4e501a554d351ae79d6f67cb0180f085eba33f9e7632903be61c06b48c664736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/GlobalExitRootManager.json b/compiled-contracts/GlobalExitRootManager.json index 4338fecb3..cbe9a9d83 100644 --- a/compiled-contracts/GlobalExitRootManager.json +++ b/compiled-contracts/GlobalExitRootManager.json @@ -151,8 +151,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506105ce806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461017857600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610523565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610523565b610198565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e366004610565565b610342565b6005546101539073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100a0565b6004546101539073ffffffffffffffffffffffffffffffffffffffff1681565b60055473ffffffffffffffffffffffffffffffffffffffff163314806101d5575060045473ffffffffffffffffffffffffffffffffffffffff1633145b610266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b60055473ffffffffffffffffffffffffffffffffffffffff16330361028b5760018190555b60045473ffffffffffffffffffffffffffffffffffffffff1633036102b05760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361033e57600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103625750600054600160ff909116105b8061037c5750303b15801561037c575060005460ff166001145b610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161025d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561046657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6005805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556004805492851692909116919091179055801561051e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561053557600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461056057600080fd5b919050565b6000806040838503121561057857600080fd5b6105818361053c565b915061058f6020840161053c565b9050925092905056fea2646970667358221220423e83d388a63ed7ac53287c741e2b54c7d39b0614d1fb089d983befe87d324564736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461017857600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610523565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610523565b610198565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e366004610565565b610342565b6005546101539073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100a0565b6004546101539073ffffffffffffffffffffffffffffffffffffffff1681565b60055473ffffffffffffffffffffffffffffffffffffffff163314806101d5575060045473ffffffffffffffffffffffffffffffffffffffff1633145b610266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b60055473ffffffffffffffffffffffffffffffffffffffff16330361028b5760018190555b60045473ffffffffffffffffffffffffffffffffffffffff1633036102b05760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361033e57600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103625750600054600160ff909116105b8061037c5750303b15801561037c575060005460ff166001145b610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161025d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561046657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6005805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556004805492851692909116919091179055801561051e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561053557600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461056057600080fd5b919050565b6000806040838503121561057857600080fd5b6105818361053c565b915061058f6020840161053c565b9050925092905056fea2646970667358221220423e83d388a63ed7ac53287c741e2b54c7d39b0614d1fb089d983befe87d324564736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506104a6806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461015e57600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610408565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610408565b610171565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e36600461043d565b6102cd565b600554610146906001600160a01b031681565b6040516001600160a01b0390911681526020016100a0565b600454610146906001600160a01b031681565b6005546001600160a01b031633148061019457506004546001600160a01b031633145b61020b5760405162461bcd60e51b815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b6005546001600160a01b031633036102235760018190555b6004546001600160a01b0316330361023b5760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036102c957600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156102ed5750600054600160ff909116105b806103075750303b158015610307575060005460ff166001145b61036a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610202565b6000805460ff19166001179055801561038d576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b03199283161790925560048054928516929091169190911790558015610403576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561041a57600080fd5b5035919050565b80356001600160a01b038116811461043857600080fd5b919050565b6000806040838503121561045057600080fd5b61045983610421565b915061046760208401610421565b9050925092905056fea26469706673582212201172b33a2ed168bc54fb42fa55e7d7a9943fd75b837c8fdd495e92b81e07498564736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461015e57600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610408565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610408565b610171565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e36600461043d565b6102cd565b600554610146906001600160a01b031681565b6040516001600160a01b0390911681526020016100a0565b600454610146906001600160a01b031681565b6005546001600160a01b031633148061019457506004546001600160a01b031633145b61020b5760405162461bcd60e51b815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b6005546001600160a01b031633036102235760018190555b6004546001600160a01b0316330361023b5760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036102c957600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156102ed5750600054600160ff909116105b806103075750303b158015610307575060005460ff166001145b61036a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610202565b6000805460ff19166001179055801561038d576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b03199283161790925560048054928516929091169190911790558015610403576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561041a57600080fd5b5035919050565b80356001600160a01b038116811461043857600080fd5b919050565b6000806040838503121561045057600080fd5b61045983610421565b915061046760208401610421565b9050925092905056fea26469706673582212201172b33a2ed168bc54fb42fa55e7d7a9943fd75b837c8fdd495e92b81e07498564736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/GlobalExitRootManagerL2.json b/compiled-contracts/GlobalExitRootManagerL2.json index f923b07aa..f03cdfb1c 100644 --- a/compiled-contracts/GlobalExitRootManagerL2.json +++ b/compiled-contracts/GlobalExitRootManagerL2.json @@ -73,8 +73,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5060405161027938038061027983398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b6101e6806100936000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610197565b60006020819052908152604090205481565b6100a061009b366004610197565b6100e7565b005b6002546100c29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610064565b60025473ffffffffffffffffffffffffffffffffffffffff163314610192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a7570646174654560448201527f786974526f6f743a204f4e4c595f425249444745000000000000000000000000606482015260840160405180910390fd5b600155565b6000602082840312156101a957600080fd5b503591905056fea2646970667358221220016d470f475254214f39dcc99bd9d9791546fd270bad790bf7a87e10c2e92c0464736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610197565b60006020819052908152604090205481565b6100a061009b366004610197565b6100e7565b005b6002546100c29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610064565b60025473ffffffffffffffffffffffffffffffffffffffff163314610192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a7570646174654560448201527f786974526f6f743a204f4e4c595f425249444745000000000000000000000000606482015260840160405180910390fd5b600155565b6000602082840312156101a957600080fd5b503591905056fea2646970667358221220016d470f475254214f39dcc99bd9d9791546fd270bad790bf7a87e10c2e92c0464736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5060405161022f38038061022f83398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b61019c806100936000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b36600461014d565b60006020819052908152604090205481565b6100a061009b36600461014d565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b031633146101485760405162461bcd60e51b815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a75706461746545604482015273786974526f6f743a204f4e4c595f42524944474560601b606482015260840160405180910390fd5b600155565b60006020828403121561015f57600080fd5b503591905056fea2646970667358221220c3d468a91666aebe6b0b1c0d82e7915c70f7879e38ddb928138328ccd71d725164736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b36600461014d565b60006020819052908152604090205481565b6100a061009b36600461014d565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b031633146101485760405162461bcd60e51b815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a75706461746545604482015273786974526f6f743a204f4e4c595f42524944474560601b606482015260840160405180910390fd5b600155565b60006020828403121561015f57600080fd5b503591905056fea2646970667358221220c3d468a91666aebe6b0b1c0d82e7915c70f7879e38ddb928138328ccd71d725164736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/GlobalExitRootManagerL2Mock.json b/compiled-contracts/GlobalExitRootManagerL2Mock.json index 0d152dbb0..a847f308b 100644 --- a/compiled-contracts/GlobalExitRootManagerL2Mock.json +++ b/compiled-contracts/GlobalExitRootManagerL2Mock.json @@ -104,8 +104,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506040516102ef3803806102ef83398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b61025c806100936000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c806333d6247d1161005057806333d6247d146100c857806396e07459146100db578063a3c573eb146100fb57600080fd5b806301fd904414610077578063116c40c314610093578063257b3632146100a8575b600080fd5b61008060015481565b6040519081526020015b60405180910390f35b6100a66100a13660046101eb565b600155565b005b6100806100b63660046101eb565b60006020819052908152604090205481565b6100a66100d63660046101eb565b610140565b6100a66100e9366004610204565b60009182526020829052604090912055565b60025461011b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161008a565b60025473ffffffffffffffffffffffffffffffffffffffff1633146100a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a7570646174654560448201527f786974526f6f743a204f4e4c595f425249444745000000000000000000000000606482015260840160405180910390fd5b6000602082840312156101fd57600080fd5b5035919050565b6000806040838503121561021757600080fd5b5050803592602090910135915056fea2646970667358221220d2bef258c77ff9dd55a7e99fcc3d972c4394423f9643b3e5c0f7ae83e2da961864736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100725760003560e01c806333d6247d1161005057806333d6247d146100c857806396e07459146100db578063a3c573eb146100fb57600080fd5b806301fd904414610077578063116c40c314610093578063257b3632146100a8575b600080fd5b61008060015481565b6040519081526020015b60405180910390f35b6100a66100a13660046101eb565b600155565b005b6100806100b63660046101eb565b60006020819052908152604090205481565b6100a66100d63660046101eb565b610140565b6100a66100e9366004610204565b60009182526020829052604090912055565b60025461011b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161008a565b60025473ffffffffffffffffffffffffffffffffffffffff1633146100a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a7570646174654560448201527f786974526f6f743a204f4e4c595f425249444745000000000000000000000000606482015260840160405180910390fd5b6000602082840312156101fd57600080fd5b5035919050565b6000806040838503121561021757600080fd5b5050803592602090910135915056fea2646970667358221220d2bef258c77ff9dd55a7e99fcc3d972c4394423f9643b3e5c0f7ae83e2da961864736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5060405161029538038061029583398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b610202806100936000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806301fd904414610067578063116c40c314610083578063257b36321461009857806333d6247d146100b857806396e07459146100cb578063a3c573eb146100eb575b600080fd5b61007060015481565b6040519081526020015b60405180910390f35b610096610091366004610191565b600155565b005b6100706100a6366004610191565b60006020819052908152604090205481565b6100966100c6366004610191565b610116565b6100966100d93660046101aa565b60009182526020829052604090912055565b6002546100fe906001600160a01b031681565b6040516001600160a01b03909116815260200161007a565b6002546001600160a01b031633146100915760405162461bcd60e51b815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a75706461746545604482015273786974526f6f743a204f4e4c595f42524944474560601b606482015260840160405180910390fd5b6000602082840312156101a357600080fd5b5035919050565b600080604083850312156101bd57600080fd5b5050803592602090910135915056fea2646970667358221220e203ca8e4727ad38449876efc2d93b4649c22a927ce8d87d9ecdc30c42b56b9a64736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c806301fd904414610067578063116c40c314610083578063257b36321461009857806333d6247d146100b857806396e07459146100cb578063a3c573eb146100eb575b600080fd5b61007060015481565b6040519081526020015b60405180910390f35b610096610091366004610191565b600155565b005b6100706100a6366004610191565b60006020819052908152604090205481565b6100966100c6366004610191565b610116565b6100966100d93660046101aa565b60009182526020829052604090912055565b6002546100fe906001600160a01b031681565b6040516001600160a01b03909116815260200161007a565b6002546001600160a01b031633146100915760405162461bcd60e51b815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a75706461746545604482015273786974526f6f743a204f4e4c595f42524944474560601b606482015260840160405180910390fd5b6000602082840312156101a357600080fd5b5035919050565b600080604083850312156101bd57600080fd5b5050803592602090910135915056fea2646970667358221220e203ca8e4727ad38449876efc2d93b4649c22a927ce8d87d9ecdc30c42b56b9a64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/GlobalExitRootManagerMock.json b/compiled-contracts/GlobalExitRootManagerMock.json index d98c0632c..a83b292a4 100644 --- a/compiled-contracts/GlobalExitRootManagerMock.json +++ b/compiled-contracts/GlobalExitRootManagerMock.json @@ -198,8 +198,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506040516108c43803806108c483398101604081905261002f916101bb565b6100398282610040565b50506101ee565b600054610100900460ff16158080156100605750600054600160ff909116105b8061008b57506100793061019060201b6105de1760201c565b15801561008b575060005460ff166001145b6100f25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015610115576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561018b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b80516001600160a01b03811681146101b657600080fd5b919050565b600080604083850312156101ce57600080fd5b6101d78361019f565b91506101e56020840161019f565b90509250929050565b6106c7806101fd6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c80633ed691ef116100765780635bcef6731161005b5780635bcef6731461017c5780635ec6a8df1461019c578063a3c573eb146101e157600080fd5b80633ed691ef14610130578063485cc9551461016957600080fd5b8063257b3632116100a7578063257b3632146100f4578063319cf7351461011457806333d6247d1461011d57600080fd5b806301fd9044146100c3578063051a9e28146100df575b600080fd5b6100cc60015481565b6040519081526020015b60405180910390f35b6100f26100ed3660046105fa565b610201565b005b6100cc6101023660046105fa565b60036020526000908152604090205481565b6100cc60025481565b6100f261012b3660046105fa565b610253565b6100cc60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100f261017736600461063c565b6103fd565b6100f261018a36600461066f565b60009182526003602052604090912055565b6005546101bc9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100d6565b6004546101bc9073ffffffffffffffffffffffffffffffffffffffff1681565b806003600061023f60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b60055473ffffffffffffffffffffffffffffffffffffffff16331480610290575060045473ffffffffffffffffffffffffffffffffffffffff1633145b610321576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b60055473ffffffffffffffffffffffffffffffffffffffff1633036103465760018190555b60045473ffffffffffffffffffffffffffffffffffffffff16330361036b5760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036103f957600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff161580801561041d5750600054600160ff909116105b806104375750303b158015610437575060005460ff166001145b6104c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610318565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561052157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6005805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255600480549285169290911691909117905580156105d957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60006020828403121561060c57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461063757600080fd5b919050565b6000806040838503121561064f57600080fd5b61065883610613565b915061066660208401610613565b90509250929050565b6000806040838503121561068257600080fd5b5050803592602090910135915056fea2646970667358221220cbe12c97a593b53d809a7814270492fe620120ec442f38e592e0c485bdefc76364736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100be5760003560e01c80633ed691ef116100765780635bcef6731161005b5780635bcef6731461017c5780635ec6a8df1461019c578063a3c573eb146101e157600080fd5b80633ed691ef14610130578063485cc9551461016957600080fd5b8063257b3632116100a7578063257b3632146100f4578063319cf7351461011457806333d6247d1461011d57600080fd5b806301fd9044146100c3578063051a9e28146100df575b600080fd5b6100cc60015481565b6040519081526020015b60405180910390f35b6100f26100ed3660046105fa565b610201565b005b6100cc6101023660046105fa565b60036020526000908152604090205481565b6100cc60025481565b6100f261012b3660046105fa565b610253565b6100cc60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100f261017736600461063c565b6103fd565b6100f261018a36600461066f565b60009182526003602052604090912055565b6005546101bc9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100d6565b6004546101bc9073ffffffffffffffffffffffffffffffffffffffff1681565b806003600061023f60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b60055473ffffffffffffffffffffffffffffffffffffffff16331480610290575060045473ffffffffffffffffffffffffffffffffffffffff1633145b610321576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b60055473ffffffffffffffffffffffffffffffffffffffff1633036103465760018190555b60045473ffffffffffffffffffffffffffffffffffffffff16330361036b5760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036103f957600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff161580801561041d5750600054600160ff909116105b806104375750303b158015610437575060005460ff166001145b6104c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610318565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561052157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6005805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255600480549285169290911691909117905580156105d957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60006020828403121561060c57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461063757600080fd5b919050565b6000806040838503121561064f57600080fd5b61065883610613565b915061066660208401610613565b90509250929050565b6000806040838503121561068257600080fd5b5050803592602090910135915056fea2646970667358221220cbe12c97a593b53d809a7814270492fe620120ec442f38e592e0c485bdefc76364736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5060405161076f38038061076f83398101604081905261002f916101bb565b6100398282610040565b50506101ee565b600054610100900460ff16158080156100605750600054600160ff909116105b8061008b57506100793061019060201b6104a31760201c565b15801561008b575060005460ff166001145b6100f25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015610115576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561018b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b80516001600160a01b03811681146101b657600080fd5b919050565b600080604083850312156101ce57600080fd5b6101d78361019f565b91506101e56020840161019f565b90509250929050565b610572806101fd6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80633ed691ef116100665780633ed691ef14610110578063485cc955146101495780635bcef6731461015c5780635ec6a8df1461017c578063a3c573eb146101a757600080fd5b806301fd9044146100a3578063051a9e28146100bf578063257b3632146100d4578063319cf735146100f457806333d6247d146100fd575b600080fd5b6100ac60015481565b6040519081526020015b60405180910390f35b6100d26100cd3660046104b2565b6101ba565b005b6100ac6100e23660046104b2565b60036020526000908152604090205481565b6100ac60025481565b6100d261010b3660046104b2565b61020c565b6100ac60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d26101573660046104e7565b610368565b6100d261016a36600461051a565b60009182526003602052604090912055565b60055461018f906001600160a01b031681565b6040516001600160a01b0390911681526020016100b6565b60045461018f906001600160a01b031681565b80600360006101f860025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b6005546001600160a01b031633148061022f57506004546001600160a01b031633145b6102a65760405162461bcd60e51b815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b6005546001600160a01b031633036102be5760018190555b6004546001600160a01b031633036102d65760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361036457600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103885750600054600160ff909116105b806103a25750303b1580156103a2575060005460ff166001145b6104055760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161029d565b6000805460ff191660011790558015610428576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561049e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b6000602082840312156104c457600080fd5b5035919050565b80356001600160a01b03811681146104e257600080fd5b919050565b600080604083850312156104fa57600080fd5b610503836104cb565b9150610511602084016104cb565b90509250929050565b6000806040838503121561052d57600080fd5b5050803592602090910135915056fea2646970667358221220edf48eb05ca06413d7741de14868b690117bdb11c3fcd3ff2df861feaa55164164736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c80633ed691ef116100665780633ed691ef14610110578063485cc955146101495780635bcef6731461015c5780635ec6a8df1461017c578063a3c573eb146101a757600080fd5b806301fd9044146100a3578063051a9e28146100bf578063257b3632146100d4578063319cf735146100f457806333d6247d146100fd575b600080fd5b6100ac60015481565b6040519081526020015b60405180910390f35b6100d26100cd3660046104b2565b6101ba565b005b6100ac6100e23660046104b2565b60036020526000908152604090205481565b6100ac60025481565b6100d261010b3660046104b2565b61020c565b6100ac60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d26101573660046104e7565b610368565b6100d261016a36600461051a565b60009182526003602052604090912055565b60055461018f906001600160a01b031681565b6040516001600160a01b0390911681526020016100b6565b60045461018f906001600160a01b031681565b80600360006101f860025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b6005546001600160a01b031633148061022f57506004546001600160a01b031633145b6102a65760405162461bcd60e51b815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b6005546001600160a01b031633036102be5760018190555b6004546001600160a01b031633036102d65760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361036457600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103885750600054600160ff909116105b806103a25750303b1580156103a2575060005460ff166001145b6104055760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161029d565b6000805460ff191660011790558015610428576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561049e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b6000602082840312156104c457600080fd5b5035919050565b80356001600160a01b03811681146104e257600080fd5b919050565b600080604083850312156104fa57600080fd5b610503836104cb565b9150610511602084016104cb565b90509250929050565b6000806040838503121561052d57600080fd5b5050803592602090910135915056fea2646970667358221220edf48eb05ca06413d7741de14868b690117bdb11c3fcd3ff2df861feaa55164164736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/ProofOfEfficiency.json b/compiled-contracts/ProofOfEfficiency.json index 3f620548d..d9e9f913b 100644 --- a/compiled-contracts/ProofOfEfficiency.json +++ b/compiled-contracts/ProofOfEfficiency.json @@ -1469,8 +1469,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506149c4806100206000396000f3fe608060405234801561001057600080fd5b50600436106102c85760003560e01c80638da5cb5b1161017b578063cfa8ed47116100d8578063e7a7ed021161008c578063eaeb077b11610071578063eaeb077b14610688578063f2fde38b1461069b578063f7552761146106ae57600080fd5b8063e7a7ed0214610638578063e8bf92ed1461066857600080fd5b8063d8d1091b116100bd578063d8d1091b146105f0578063d8f54db014610603578063dbc169761461063057600080fd5b8063cfa8ed47146105a4578063d02103ca146105d057600080fd5b8063b02286c01161012f578063b6b0b09711610114578063b6b0b09714610559578063c3fd0f9c1461057e578063c89e42df1461059157600080fd5b8063b02286c01461052f578063b4d63f581461053957600080fd5b8063a3c573eb11610160578063a3c573eb146104f1578063ab9fc5ef14610511578063adc879e91461051b57600080fd5b80638da5cb5b146104cb57806399f5634e146104e957600080fd5b8063542028d5116102295780637152facf116101dd5780637fcb3653116101c25780637fcb36531461049157806381df7d3f146104a55780638c4a0af7146104b857600080fd5b80637152facf14610476578063798470571461048957600080fd5b80636b8616ce1161020e5780636b8616ce1461043b5780636ff512cc1461045b578063715018a61461046e57600080fd5b8063542028d51461042057806355b925e61461042857600080fd5b806327eb6c0f11610280578063423fa85611610265578063423fa856146103aa57806345605267146103ca5780635392c5e0146103f257600080fd5b806327eb6c0f146103525780633c1582671461039757600080fd5b806319d8ac61116102b157806319d8ac61146103085780631c1083e2146103355780632072f6c51461034a57600080fd5b8063107bf28c146102cd57806315064c96146102eb575b600080fd5b6102d56106bd565b6040516102e29190613ea5565b60405180910390f35b6065546102f89060ff1681565b60405190151581526020016102e2565b60685461031c9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102e2565b610348610343366004613eea565b61074b565b005b610348610857565b6070546103729073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e2565b6103486103a536600461405f565b610908565b60685461031c9068010000000000000000900467ffffffffffffffff1681565b60685461031c90700100000000000000000000000000000000900467ffffffffffffffff1681565b610412610400366004614176565b606b6020526000908152604090205481565b6040519081526020016102e2565b6102d5611299565b6103486104363660046141a8565b6112a6565b610412610449366004614176565b60666020526000908152604090205481565b610348610469366004613eea565b61186f565b610348611989565b6102d561048436600461422b565b61199b565b610412611bd1565b60695461031c9067ffffffffffffffff1681565b6103486104b3366004614286565b611c4b565b6103486104c6366004614380565b611fa4565b60335473ffffffffffffffffffffffffffffffffffffffff16610372565b6104126120be565b6071546103729073ffffffffffffffffffffffffffffffffffffffff1681565b61031c62093a8081565b606e5461031c9067ffffffffffffffff1681565b610412620493e081565b610412610547366004614176565b60676020526000908152604090205481565b60655461037290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b61034861058c3660046141a8565b6121ef565b61034861059f36600461439d565b612839565b6069546103729068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103729073ffffffffffffffffffffffffffffffffffffffff1681565b6103486105fe3660046143da565b61290e565b6069546102f8907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610348612fb3565b60685461031c907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103729073ffffffffffffffffffffffffffffffffffffffff1681565b6103486106963660046144cd565b613142565b6103486106a9366004613eea565b613643565b61041267016345785d8a000081565b606f80546106ca90614512565b80601f01602080910402602001604051908101604052809291908181526020018280546106f690614512565b80156107435780601f1061071857610100808354040283529160200191610743565b820191906000526020600020905b81548152906001019060200180831161072657829003601f168201915b505050505081565b60705473ffffffffffffffffffffffffffffffffffffffff1633146107dd5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff16156108f65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b6108fe6136e0565b610906613747565b565b60655460ff16156109a75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610a405760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d4565b805180610adb5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b8581101561108a576000878281518110610b4157610b41614565565b602002602001015190506000816060015167ffffffffffffffff161115610d5a5783610b6c816145c3565b945050600081600001518051906020012082602001518360600151604051602001610bcf93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610c9c5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610d545760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016107d4565b50610ef5565b60208101511580610e095750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610dc39160040190815260200190565b6020604051808303816000875af1158015610de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0691906145ea565b15155b610e7b5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016107d4565b805151620493e011610ef55760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016107d4565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610f2b575042816040015167ffffffffffffffff1611155b610fc35760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061106c906145c3565b9550508060400151955050808061108290614603565b915050610b25565b5060685467ffffffffffffffff78010000000000000000000000000000000000000000000000009091048116908316111561112d5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016107d4565b60685460009061115b90700100000000000000000000000000000000900467ffffffffffffffff168461463b565b61116f9067ffffffffffffffff1687614664565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061124c33306112268467016345785d8a000061467b565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169291906137d1565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d80546106ca90614512565b60655460ff16156113455760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b60695467ffffffffffffffff90811690881611156113f15760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016107d4565b60695467ffffffffffffffff9081169087161161149c5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016107d4565b67ffffffffffffffff87166000908152606b602052604090205461154e5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a4016107d4565b600061155c8888888861199b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161159191906146b8565b602060405180830381855afa1580156115ae573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906115d191906145ea565b6115db9190614703565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916116459189918991899190600401614717565b602060405180830381865afa158015611662573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116869190614791565b6116f85760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016107d4565b6069546117569033906117159067ffffffffffffffff168b61463b565b67ffffffffffffffff166117276120be565b611731919061467b565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16919061388f565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b15801561180b57600080fd5b505af115801561181f573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146119085760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d4565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161084c565b6119916136e0565b61090660006138ea565b67ffffffffffffffff8085166000818152606760205260408082205493871682529020546060929115806119ce57508115155b611a665760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b80611aff5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691611c209178010000000000000000000000000000000000000000000000009091041660016147ae565b611c2a919061463b565b611c469067ffffffffffffffff16670de0b6b3a764000061467b565b905090565b600054610100900460ff1615808015611c6b5750600054600160ff909116105b80611c855750303b158015611c85575060005460ff166001145b611cf75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107d4565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611d5557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d611e948782614828565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f611ed58582614828565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556070805492851692909116919091179055611f33613961565b8015611f9657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461203d5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d4565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061084c90831515815260200190565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612135573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215991906145ea565b60695460685491925060009167ffffffffffffffff918216916801000000000000000082048116916121be917001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041661463b565b6121c891906147ae565b6121d2919061463b565b67ffffffffffffffff1690506121e88183614924565b9250505090565b60655460ff161561228e5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b8567ffffffffffffffff168767ffffffffffffffff161061233d5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a4016107d4565b60695467ffffffffffffffff908116908716111561240f5760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c4016107d4565b67ffffffffffffffff87166000908152606b60205260409020546124c15760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a4016107d4565b67ffffffffffffffff86166000908152606b60205260409020546125735760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a4016107d4565b60006125818888888861199b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516125b691906146b8565b602060405180830381855afa1580156125d3573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906125f691906145ea565b6126009190614703565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d9161266a9189918991899190600401614717565b602060405180830381865afa158015612687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ab9190614791565b61271d5760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f460000000060648201526084016107d4565b67ffffffffffffffff88166000908152606b60205260409020548690036127d25760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a4016107d4565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a161282e613747565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146128d25760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d4565b606d6128de8282614828565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161084c9190613ea5565b60655460ff16156129ad5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612a705760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d4565b805180612b0b5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b60685467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612b56918491700100000000000000000000000000000000900416614938565b1115612bca5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016107d4565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b84811015612ee3576000868281518110612c2a57612c2a614565565b602002602001015190508380612c3f906145c3565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114612d605760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016107d4565b612d6b600188614664565b8303612e29574262093a808360400151612d8591906147ae565b67ffffffffffffffff161115612e295760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016107d4565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612ecb906145c3565b96505050508080612edb90614603565b915050612c0e565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff1661302b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d4565b60705473ffffffffffffffffffffffffffffffffffffffff1633146130b85760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016107d4565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561312257600080fd5b505af1158015613136573d6000803e3d6000fd5b505050506109066139e7565b60655460ff16156131e15760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146132a45760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d4565b60006132ae611bd1565b9050818111156133265760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016107d4565b620493e083511061339f5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016107d4565b6065546133c990610100900473ffffffffffffffffffffffffffffffffffffffff163330846137d1565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345d91906145ea565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613497836145c3565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161351093929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260669093529120553233036135e057606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261363d565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161363493929190614950565b60405180910390a25b50505050565b61364b6136e0565b73ffffffffffffffffffffffffffffffffffffffff81166136d45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107d4565b6136dd816138ea565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109065760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d4565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156137b157600080fd5b505af11580156137c5573d6000803e3d6000fd5b50505050610906613ab2565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261363d9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613ba7565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526138e59084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161382b565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166139de5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107d4565b610906336138ea565b60655460ff16613a5f5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d4565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff1615613b515760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6000613c09826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613c999092919063ffffffff16565b8051909150156138e55780806020019051810190613c279190614791565b6138e55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107d4565b6060613ca88484600085613cb2565b90505b9392505050565b606082471015613d2a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016107d4565b73ffffffffffffffffffffffffffffffffffffffff85163b613d8e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107d4565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613db791906146b8565b60006040518083038185875af1925050503d8060008114613df4576040519150601f19603f3d011682016040523d82523d6000602084013e613df9565b606091505b5091509150613e09828286613e14565b979650505050505050565b60608315613e23575081613cab565b825115613e335782518084602001fd5b8160405162461bcd60e51b81526004016107d49190613ea5565b60005b83811015613e68578181015183820152602001613e50565b8381111561363d5750506000910152565b60008151808452613e91816020860160208601613e4d565b601f01601f19169290920160200192915050565b602081526000613cab6020830184613e79565b73ffffffffffffffffffffffffffffffffffffffff811681146136dd57600080fd5b8035613ee581613eb8565b919050565b600060208284031215613efc57600080fd5b8135613cab81613eb8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613f5957613f59613f07565b60405290565b6040516060810167ffffffffffffffff81118282101715613f5957613f59613f07565b604051601f8201601f1916810167ffffffffffffffff81118282101715613fab57613fab613f07565b604052919050565b600067ffffffffffffffff821115613fcd57613fcd613f07565b5060051b60200190565b600082601f830112613fe857600080fd5b813567ffffffffffffffff81111561400257614002613f07565b6140156020601f19601f84011601613f82565b81815284602083860101111561402a57600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613ee557600080fd5b6000602080838503121561407257600080fd5b823567ffffffffffffffff8082111561408a57600080fd5b818501915085601f83011261409e57600080fd5b81356140b16140ac82613fb3565b613f82565b81815260059190911b830184019084810190888311156140d057600080fd5b8585015b83811015614169578035858111156140ec5760008081fd5b86016080818c03601f19018113156141045760008081fd5b61410c613f36565b898301358881111561411e5760008081fd5b61412c8e8c83870101613fd7565b8252506040808401358b8301526060614146818601614047565b82840152614155848601614047565b9083015250855250509186019186016140d4565b5098975050505050505050565b60006020828403121561418857600080fd5b613cab82614047565b80604081018310156141a257600080fd5b92915050565b6000806000806000806000610180888a0312156141c457600080fd5b6141cd88614047565b96506141db60208901614047565b955060408801359450606088013593506141f88960808a01614191565b925061014088018981111561420c57600080fd5b60c08901925061421c8a82614191565b91505092959891949750929550565b6000806000806080858703121561424157600080fd5b61424a85614047565b935061425860208601614047565b93969395505050506040820135916060013590565b80151581146136dd57600080fd5b8035613ee58161426d565b60008060008060008060008060008060006101608c8e0312156142a857600080fd5b6142b18c613eda565b9a506142bf60208d01613eda565b99506142cd60408d01613eda565b985060608c013597506142e260808d01613eda565b96506142f060a08d0161427b565b955067ffffffffffffffff8060c08e0135111561430c57600080fd5b61431c8e60c08f01358f01613fd7565b955061432a60e08e01614047565b9450806101008e0135111561433e57600080fd5b506143508d6101008e01358e01613fd7565b925061435f6101208d01613eda565b915061436e6101408d01613eda565b90509295989b509295989b9093969950565b60006020828403121561439257600080fd5b8135613cab8161426d565b6000602082840312156143af57600080fd5b813567ffffffffffffffff8111156143c657600080fd5b6143d284828501613fd7565b949350505050565b600060208083850312156143ed57600080fd5b823567ffffffffffffffff8082111561440557600080fd5b818501915085601f83011261441957600080fd5b81356144276140ac82613fb3565b81815260059190911b8301840190848101908883111561444657600080fd5b8585015b83811015614169578035858111156144625760008081fd5b86016060818c03601f190181131561447a5760008081fd5b614482613f5f565b89830135888111156144945760008081fd5b6144a28e8c83870101613fd7565b8252506040808401358b8301526144ba838501614047565b908201528552505091860191860161444a565b600080604083850312156144e057600080fd5b823567ffffffffffffffff8111156144f757600080fd5b61450385828601613fd7565b95602094909401359450505050565b600181811c9082168061452657607f821691505b60208210810361455f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036145e0576145e0614594565b6001019392505050565b6000602082840312156145fc57600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361463457614634614594565b5060010190565b600067ffffffffffffffff8381169083168181101561465c5761465c614594565b039392505050565b60008282101561467657614676614594565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146b3576146b3614594565b500290565b600082516146ca818460208701613e4d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614712576147126146d4565b500690565b61012081016040808784376000838201818152879190815b600281101561474f5784848337908401828152928401929060010161472f565b5050828760c0870137610100850181815286935091505b6001811015614785578251825260209283019290910190600101614766565b50505095945050505050565b6000602082840312156147a357600080fd5b8151613cab8161426d565b600067ffffffffffffffff8083168185168083038211156147d1576147d1614594565b01949350505050565b601f8211156138e557600081815260208120601f850160051c810160208610156148015750805b601f850160051c820191505b818110156148205782815560010161480d565b505050505050565b815167ffffffffffffffff81111561484257614842613f07565b614856816148508454614512565b846147da565b602080601f8311600181146148a957600084156148735750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614820565b600085815260208120601f198616915b828110156148d8578886015182559484019460019091019084016148b9565b508582101561491457878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082614933576149336146d4565b500490565b6000821982111561494b5761494b614594565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006149856060830184613e79565b9594505050505056fea26469706673582212207e277784efbe8f83ff553ede664750471887c02fa33f0f412c42f49abac3f00664736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102c85760003560e01c80638da5cb5b1161017b578063cfa8ed47116100d8578063e7a7ed021161008c578063eaeb077b11610071578063eaeb077b14610688578063f2fde38b1461069b578063f7552761146106ae57600080fd5b8063e7a7ed0214610638578063e8bf92ed1461066857600080fd5b8063d8d1091b116100bd578063d8d1091b146105f0578063d8f54db014610603578063dbc169761461063057600080fd5b8063cfa8ed47146105a4578063d02103ca146105d057600080fd5b8063b02286c01161012f578063b6b0b09711610114578063b6b0b09714610559578063c3fd0f9c1461057e578063c89e42df1461059157600080fd5b8063b02286c01461052f578063b4d63f581461053957600080fd5b8063a3c573eb11610160578063a3c573eb146104f1578063ab9fc5ef14610511578063adc879e91461051b57600080fd5b80638da5cb5b146104cb57806399f5634e146104e957600080fd5b8063542028d5116102295780637152facf116101dd5780637fcb3653116101c25780637fcb36531461049157806381df7d3f146104a55780638c4a0af7146104b857600080fd5b80637152facf14610476578063798470571461048957600080fd5b80636b8616ce1161020e5780636b8616ce1461043b5780636ff512cc1461045b578063715018a61461046e57600080fd5b8063542028d51461042057806355b925e61461042857600080fd5b806327eb6c0f11610280578063423fa85611610265578063423fa856146103aa57806345605267146103ca5780635392c5e0146103f257600080fd5b806327eb6c0f146103525780633c1582671461039757600080fd5b806319d8ac61116102b157806319d8ac61146103085780631c1083e2146103355780632072f6c51461034a57600080fd5b8063107bf28c146102cd57806315064c96146102eb575b600080fd5b6102d56106bd565b6040516102e29190613ea5565b60405180910390f35b6065546102f89060ff1681565b60405190151581526020016102e2565b60685461031c9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102e2565b610348610343366004613eea565b61074b565b005b610348610857565b6070546103729073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e2565b6103486103a536600461405f565b610908565b60685461031c9068010000000000000000900467ffffffffffffffff1681565b60685461031c90700100000000000000000000000000000000900467ffffffffffffffff1681565b610412610400366004614176565b606b6020526000908152604090205481565b6040519081526020016102e2565b6102d5611299565b6103486104363660046141a8565b6112a6565b610412610449366004614176565b60666020526000908152604090205481565b610348610469366004613eea565b61186f565b610348611989565b6102d561048436600461422b565b61199b565b610412611bd1565b60695461031c9067ffffffffffffffff1681565b6103486104b3366004614286565b611c4b565b6103486104c6366004614380565b611fa4565b60335473ffffffffffffffffffffffffffffffffffffffff16610372565b6104126120be565b6071546103729073ffffffffffffffffffffffffffffffffffffffff1681565b61031c62093a8081565b606e5461031c9067ffffffffffffffff1681565b610412620493e081565b610412610547366004614176565b60676020526000908152604090205481565b60655461037290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b61034861058c3660046141a8565b6121ef565b61034861059f36600461439d565b612839565b6069546103729068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103729073ffffffffffffffffffffffffffffffffffffffff1681565b6103486105fe3660046143da565b61290e565b6069546102f8907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b610348612fb3565b60685461031c907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103729073ffffffffffffffffffffffffffffffffffffffff1681565b6103486106963660046144cd565b613142565b6103486106a9366004613eea565b613643565b61041267016345785d8a000081565b606f80546106ca90614512565b80601f01602080910402602001604051908101604052809291908181526020018280546106f690614512565b80156107435780601f1061071857610100808354040283529160200191610743565b820191906000526020600020905b81548152906001019060200180831161072657829003601f168201915b505050505081565b60705473ffffffffffffffffffffffffffffffffffffffff1633146107dd5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff16156108f65760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b6108fe6136e0565b610906613747565b565b60655460ff16156109a75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610a405760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d4565b805180610adb5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b8581101561108a576000878281518110610b4157610b41614565565b602002602001015190506000816060015167ffffffffffffffff161115610d5a5783610b6c816145c3565b945050600081600001518051906020012082602001518360600151604051602001610bcf93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610c9c5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610d545760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016107d4565b50610ef5565b60208101511580610e095750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610dc39160040190815260200190565b6020604051808303816000875af1158015610de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0691906145ea565b15155b610e7b5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016107d4565b805151620493e011610ef55760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f770060648201526084016107d4565b8567ffffffffffffffff16816040015167ffffffffffffffff1610158015610f2b575042816040015167ffffffffffffffff1611155b610fc35760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061106c906145c3565b9550508060400151955050808061108290614603565b915050610b25565b5060685467ffffffffffffffff78010000000000000000000000000000000000000000000000009091048116908316111561112d5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016107d4565b60685460009061115b90700100000000000000000000000000000000900467ffffffffffffffff168461463b565b61116f9067ffffffffffffffff1687614664565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061124c33306112268467016345785d8a000061467b565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169291906137d1565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d80546106ca90614512565b60655460ff16156113455760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b60695467ffffffffffffffff90811690881611156113f15760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a4016107d4565b60695467ffffffffffffffff9081169087161161149c5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a4016107d4565b67ffffffffffffffff87166000908152606b602052604090205461154e5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a4016107d4565b600061155c8888888861199b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161159191906146b8565b602060405180830381855afa1580156115ae573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906115d191906145ea565b6115db9190614703565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916116459189918991899190600401614717565b602060405180830381865afa158015611662573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116869190614791565b6116f85760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f46000000000000000000000000000000000060648201526084016107d4565b6069546117569033906117159067ffffffffffffffff168b61463b565b67ffffffffffffffff166117276120be565b611731919061467b565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16919061388f565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b15801561180b57600080fd5b505af115801561181f573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146119085760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d4565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161084c565b6119916136e0565b61090660006138ea565b67ffffffffffffffff8085166000818152606760205260408082205493871682529020546060929115806119ce57508115155b611a665760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b80611aff5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b60685460009067ffffffffffffffff7001000000000000000000000000000000008204811691611c209178010000000000000000000000000000000000000000000000009091041660016147ae565b611c2a919061463b565b611c469067ffffffffffffffff16670de0b6b3a764000061467b565b905090565b600054610100900460ff1615808015611c6b5750600054600160ff909116105b80611c855750303b158015611c85575060005460ff166001145b611cf75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107d4565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611d5557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d611e948782614828565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f611ed58582614828565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556070805492851692909116919091179055611f33613961565b8015611f9657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16331461203d5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d4565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061084c90831515815260200190565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612135573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215991906145ea565b60695460685491925060009167ffffffffffffffff918216916801000000000000000082048116916121be917001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041661463b565b6121c891906147ae565b6121d2919061463b565b67ffffffffffffffff1690506121e88183614924565b9250505090565b60655460ff161561228e5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b8567ffffffffffffffff168767ffffffffffffffff161061233d5760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a4016107d4565b60695467ffffffffffffffff908116908716111561240f5760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c4016107d4565b67ffffffffffffffff87166000908152606b60205260409020546124c15760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a4016107d4565b67ffffffffffffffff86166000908152606b60205260409020546125735760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a4016107d4565b60006125818888888861199b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516125b691906146b8565b602060405180830381855afa1580156125d3573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906125f691906145ea565b6126009190614703565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d9161266a9189918991899190600401614717565b602060405180830381865afa158015612687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ab9190614791565b61271d5760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f460000000060648201526084016107d4565b67ffffffffffffffff88166000908152606b60205260409020548690036127d25760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a4016107d4565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a161282e613747565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146128d25760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016107d4565b606d6128de8282614828565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161084c9190613ea5565b60655460ff16156129ad5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114612a705760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d4565b805180612b0b5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b60685467ffffffffffffffff78010000000000000000000000000000000000000000000000008204811691612b56918491700100000000000000000000000000000000900416614938565b1115612bca5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016107d4565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b84811015612ee3576000868281518110612c2a57612c2a614565565b602002602001015190508380612c3f906145c3565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114612d605760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a4016107d4565b612d6b600188614664565b8303612e29574262093a808360400151612d8591906147ae565b67ffffffffffffffff161115612e295760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a4016107d4565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c016040516020818303038152906040528051906020012093508580612ecb906145c3565b96505050508080612edb90614603565b915050612c0e565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff1661302b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d4565b60705473ffffffffffffffffffffffffffffffffffffffff1633146130b85760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084016107d4565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561312257600080fd5b505af1158015613136573d6000803e3d6000fd5b505050506109066139e7565b60655460ff16156131e15760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff1615156001146132a45760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a4016107d4565b60006132ae611bd1565b9050818111156133265760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d61746963000000000000000000000000000000000060648201526084016107d4565b620493e083511061339f5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016107d4565b6065546133c990610100900473ffffffffffffffffffffffffffffffffffffffff163330846137d1565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345d91906145ea565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613497836145c3565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550508380519060200120814260405160200161351093929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600090815260669093529120553233036135e057606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261363d565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161363493929190614950565b60405180910390a25b50505050565b61364b6136e0565b73ffffffffffffffffffffffffffffffffffffffff81166136d45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107d4565b6136dd816138ea565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109065760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d4565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156137b157600080fd5b505af11580156137c5573d6000803e3d6000fd5b50505050610906613ab2565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261363d9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613ba7565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526138e59084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161382b565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166139de5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107d4565b610906336138ea565b60655460ff16613a5f5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e6379207374617465000000000060648201526084016107d4565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff1615613b515760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a4016107d4565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6000613c09826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613c999092919063ffffffff16565b8051909150156138e55780806020019051810190613c279190614791565b6138e55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107d4565b6060613ca88484600085613cb2565b90505b9392505050565b606082471015613d2a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016107d4565b73ffffffffffffffffffffffffffffffffffffffff85163b613d8e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107d4565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613db791906146b8565b60006040518083038185875af1925050503d8060008114613df4576040519150601f19603f3d011682016040523d82523d6000602084013e613df9565b606091505b5091509150613e09828286613e14565b979650505050505050565b60608315613e23575081613cab565b825115613e335782518084602001fd5b8160405162461bcd60e51b81526004016107d49190613ea5565b60005b83811015613e68578181015183820152602001613e50565b8381111561363d5750506000910152565b60008151808452613e91816020860160208601613e4d565b601f01601f19169290920160200192915050565b602081526000613cab6020830184613e79565b73ffffffffffffffffffffffffffffffffffffffff811681146136dd57600080fd5b8035613ee581613eb8565b919050565b600060208284031215613efc57600080fd5b8135613cab81613eb8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613f5957613f59613f07565b60405290565b6040516060810167ffffffffffffffff81118282101715613f5957613f59613f07565b604051601f8201601f1916810167ffffffffffffffff81118282101715613fab57613fab613f07565b604052919050565b600067ffffffffffffffff821115613fcd57613fcd613f07565b5060051b60200190565b600082601f830112613fe857600080fd5b813567ffffffffffffffff81111561400257614002613f07565b6140156020601f19601f84011601613f82565b81815284602083860101111561402a57600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff81168114613ee557600080fd5b6000602080838503121561407257600080fd5b823567ffffffffffffffff8082111561408a57600080fd5b818501915085601f83011261409e57600080fd5b81356140b16140ac82613fb3565b613f82565b81815260059190911b830184019084810190888311156140d057600080fd5b8585015b83811015614169578035858111156140ec5760008081fd5b86016080818c03601f19018113156141045760008081fd5b61410c613f36565b898301358881111561411e5760008081fd5b61412c8e8c83870101613fd7565b8252506040808401358b8301526060614146818601614047565b82840152614155848601614047565b9083015250855250509186019186016140d4565b5098975050505050505050565b60006020828403121561418857600080fd5b613cab82614047565b80604081018310156141a257600080fd5b92915050565b6000806000806000806000610180888a0312156141c457600080fd5b6141cd88614047565b96506141db60208901614047565b955060408801359450606088013593506141f88960808a01614191565b925061014088018981111561420c57600080fd5b60c08901925061421c8a82614191565b91505092959891949750929550565b6000806000806080858703121561424157600080fd5b61424a85614047565b935061425860208601614047565b93969395505050506040820135916060013590565b80151581146136dd57600080fd5b8035613ee58161426d565b60008060008060008060008060008060006101608c8e0312156142a857600080fd5b6142b18c613eda565b9a506142bf60208d01613eda565b99506142cd60408d01613eda565b985060608c013597506142e260808d01613eda565b96506142f060a08d0161427b565b955067ffffffffffffffff8060c08e0135111561430c57600080fd5b61431c8e60c08f01358f01613fd7565b955061432a60e08e01614047565b9450806101008e0135111561433e57600080fd5b506143508d6101008e01358e01613fd7565b925061435f6101208d01613eda565b915061436e6101408d01613eda565b90509295989b509295989b9093969950565b60006020828403121561439257600080fd5b8135613cab8161426d565b6000602082840312156143af57600080fd5b813567ffffffffffffffff8111156143c657600080fd5b6143d284828501613fd7565b949350505050565b600060208083850312156143ed57600080fd5b823567ffffffffffffffff8082111561440557600080fd5b818501915085601f83011261441957600080fd5b81356144276140ac82613fb3565b81815260059190911b8301840190848101908883111561444657600080fd5b8585015b83811015614169578035858111156144625760008081fd5b86016060818c03601f190181131561447a5760008081fd5b614482613f5f565b89830135888111156144945760008081fd5b6144a28e8c83870101613fd7565b8252506040808401358b8301526144ba838501614047565b908201528552505091860191860161444a565b600080604083850312156144e057600080fd5b823567ffffffffffffffff8111156144f757600080fd5b61450385828601613fd7565b95602094909401359450505050565b600181811c9082168061452657607f821691505b60208210810361455f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168181036145e0576145e0614594565b6001019392505050565b6000602082840312156145fc57600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361463457614634614594565b5060010190565b600067ffffffffffffffff8381169083168181101561465c5761465c614594565b039392505050565b60008282101561467657614676614594565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146b3576146b3614594565b500290565b600082516146ca818460208701613e4d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614712576147126146d4565b500690565b61012081016040808784376000838201818152879190815b600281101561474f5784848337908401828152928401929060010161472f565b5050828760c0870137610100850181815286935091505b6001811015614785578251825260209283019290910190600101614766565b50505095945050505050565b6000602082840312156147a357600080fd5b8151613cab8161426d565b600067ffffffffffffffff8083168185168083038211156147d1576147d1614594565b01949350505050565b601f8211156138e557600081815260208120601f850160051c810160208610156148015750805b601f850160051c820191505b818110156148205782815560010161480d565b505050505050565b815167ffffffffffffffff81111561484257614842613f07565b614856816148508454614512565b846147da565b602080601f8311600181146148a957600084156148735750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614820565b600085815260208120601f198616915b828110156148d8578886015182559484019460019091019084016148b9565b508582101561491457878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082614933576149336146d4565b500490565b6000821982111561494b5761494b614594565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff831660208201526060604082015260006149856060830184613e79565b9594505050505056fea26469706673582212207e277784efbe8f83ff553ede664750471887c02fa33f0f412c42f49abac3f00664736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5061567f80620000216000396000f3fe608060405234801561001057600080fd5b50600436106103af5760003560e01c80638da5cb5b116101f4578063cfa8ed471161011a578063e7a7ed02116100ad578063f14916d61161007c578063f14916d6146108eb578063f2fde38b146108fe578063f851a44014610911578063f8b823e41461092457600080fd5b8063e7a7ed0214610898578063e8bf92ed146108b2578063eaeb077b146108c5578063edc41121146108d857600080fd5b8063d939b315116100e9578063d939b3151461085a578063dbc1697614610874578063e11f3f181461087c578063e217cfd61461088f57600080fd5b8063cfa8ed4714610806578063d02103ca14610820578063d8d1091b14610833578063d8f54db01461084657600080fd5b8063ab9fc5ef11610192578063b6b0b09711610161578063b6b0b097146107be578063c0ed84e0146107d8578063c89e42df146107e0578063cf136306146107f357600080fd5b8063ab9fc5ef14610712578063adc879e91461071c578063afd23cbe14610736578063b4d63f581461075e57600080fd5b80639eb831b9116101ce5780639eb831b9146106d75780639f0d039d146106df578063a3c573eb146106e7578063aa58bad6146106fa57600080fd5b80638da5cb5b146106ab57806399f5634e146106bc5780639c9f3dfe146106c457600080fd5b80634a910e6a116102d9578063715018a611610277578063837a473811610246578063837a473814610606578063841b24d7146106745780638b48931e1461068e5780638c4a0af71461069857600080fd5b8063715018a6146105c55780637215541a146105cd57806375c508b3146105e05780637fcb3653146105f357600080fd5b806360943d6a116102b357806360943d6a1461056c5780636b8616ce1461057f5780636ff512cc1461059f578063704b6c02146105b257600080fd5b80634a910e6a146105315780635392c5e014610544578063542028d51461056457600080fd5b8063383b3be811610351578063456052671161032057806345605267146104d7578063458c0477146104f15780634834a343146105045780634a1a89a71461051757600080fd5b8063383b3be814610484578063394218e9146104975780633c158267146104aa578063423fa856146104bd57600080fd5b806319d8ac611161038d57806319d8ac6114610404578063220d78991461042f57806329878983146104425780632d0889d31461046d57600080fd5b8063107bf28c146103b457806315064c96146103d25780631816b7e5146103ef575b600080fd5b6103bc61092d565b6040516103c9919061476e565b60405180910390f35b6065546103df9060ff1681565b60405190151581526020016103c9565b6104026103fd366004614788565b6109bb565b005b606854610417906001600160401b031681565b6040516001600160401b0390911681526020016103c9565b6103bc61043d3660046147c8565b610aef565b606a54610455906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b61047661ea6081565b6040519081526020016103c9565b6103df610492366004614815565b610cad565b6104026104a5366004614815565b610cf4565b6104026104b8366004614952565b610e47565b60685461041790600160401b90046001600160401b031681565b60685461041790600160801b90046001600160401b031681565b607254610417906001600160401b031681565b610402610512366004614a90565b611612565b60725461041790600160401b90046001600160401b031681565b61040261053f366004614815565b611946565b610476610552366004614815565b606d6020526000908152604090205481565b6103bc611bf4565b61040261057a366004614b32565b611c01565b61047661058d366004614815565b60666020526000908152604090205481565b6104026105ad366004614c09565b611f71565b6104026105c0366004614c09565b611ff5565b61040261206d565b6104026105db366004614815565b612081565b6104026105ee366004614c26565b61230d565b606954610417906001600160401b031681565b610649610614366004614cc4565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103c9565b60725461041790600160c01b90046001600160401b031681565b61041762093a8081565b6104026106a6366004614ceb565b61239c565b6033546001600160a01b0316610455565b610476612413565b6104026106d2366004614815565b6124f6565b610476600c81565b607454610476565b607054610455906001600160a01b031681565b6065546104179061010090046001600160401b031681565b6104176206978081565b606c5461041790600160a81b90046001600160401b031681565b60655461074b90600160481b900461ffff1681565b60405161ffff90911681526020016103c9565b61079961076c366004614815565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103c9565b60655461045590600160581b90046001600160a01b031681565b61041761264a565b6104026107ee366004614d08565b612697565b610402610801366004614815565b6126fd565b60695461045590600160401b90046001600160a01b031681565b606c54610455906001600160a01b031681565b610402610841366004614d3c565b61277e565b606c546103df90600160a01b900460ff1681565b60725461041790600160801b90046001600160401b031681565b610402612c6a565b61040261088a366004614c26565b612d26565b6104176103e881565b60685461041790600160c01b90046001600160401b031681565b606b54610455906001600160a01b031681565b6104026108d3366004614e2e565b612e6b565b6104026108e6366004614a90565b6131a0565b6104026108f9366004614c09565b6132c0565b61040261090c366004614c09565b613338565b607354610455906001600160a01b031681565b61047660745481565b606f805461093a90614e72565b80601f016020809104026020016040519081016040528092919081815260200182805461096690614e72565b80156109b35780601f10610988576101008083540402835291602001916109b3565b820191906000526020600020905b81548152906001019060200180831161099657829003601f168201915b505050505081565b6073546001600160a01b031633146109ee5760405162461bcd60e51b81526004016109e590614eac565b60405180910390fd5b6103e88161ffff16118015610a0857506104008161ffff16105b610a925760405162461bcd60e51b815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a7365744d756c7469706c69657260448201527f42617463684665653a206e65774d756c7469706c69657242617463684665652060648201526e696e636f72726563742072616e676560881b608482015260a4016109e5565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610b2157508115155b610ba15760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f7420606482015264195e1a5cdd60da1b608482015260a4016109e5565b80610c225760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f7420606482015264195e1a5cdd60da1b608482015260a4016109e5565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610ce392600160801b90920481169116614f0a565b6001600160401b0316111592915050565b6073546001600160a01b03163314610d1e5760405162461bcd60e51b81526004016109e590614eac565b62093a806001600160401b0382161115610d4a5760405162461bcd60e51b81526004016109e590614f35565b60655460ff16610df1576072546001600160401b03600160c01b909104811690821610610df15760405162461bcd60e51b815260206004820152604960248201527f50726f6f664f66456666696369656e63793a3a7365745472757374656441676760448201527f72656761746f7254696d656f75743a206e65772074696d656f7574206d757374606482015268103132903637bbb2b960b91b608482015260a4016109e5565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610ae4565b60655460ff1615610e6a5760405162461bcd60e51b81526004016109e590614fa5565b606954600160401b90046001600160a01b03163314610ef15760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016109e5565b805180610f5f5760405162461bcd60e51b815260206004820152604260248201526000805160206155ca83398151915260448201527f65733a204174206c65617374206d7573742073657175656e63652031206261746064820152610c6d60f31b608482015260a4016109e5565b6103e88110610fd25760405162461bcd60e51b815260206004820152604560248201526000805160206155ca83398151915260448201527f65733a2043616e6e6f742073657175656e63652074686174206d616e79206261606482015264746368657360d81b608482015260a4016109e5565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b858110156114405760008782815181106110255761102561500d565b60200260200101519050600081606001516001600160401b031611156111c5578361104f81615023565b94505060008160000151805190602001208260200151836060015160405160200161107c93929190615049565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461111b5760405162461bcd60e51b815260206004820152604260248201526000805160206155ca83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109e5565b81606001516001600160401b031682604001516001600160401b031610156111bf5760405162461bcd60e51b815260206004820152605d60248201526000805160206155ca83398151915260448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016109e5565b5061133a565b6020810151158061124e5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916112089160040190815260200190565b6020604051808303816000875af1158015611227573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124b919061506c565b15155b6112ae5760405162461bcd60e51b815260206004820152603f60248201526000805160206155ca83398151915260448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016109e5565b80515161ea601161133a5760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a4016109e5565b856001600160401b031681604001516001600160401b03161015801561136d57504281604001516001600160401b031611155b6113d85760405162461bcd60e51b815260206004820152604260248201526000805160206155ca83398151915260448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e606482015261676560f01b608482015260a4016109e5565b805180516020918201208183015160408085015190516113ff948894939291339101615085565b604051602081830303815290604052805190602001209250848061142290615023565b95505080604001519550508080611438906150c9565b915050611009565b506068546001600160401b03600160c01b909104811690831611156114bb5760405162461bcd60e51b815260206004820152603a60248201526000805160206155ca83398151915260448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016109e5565b6068546000906114db90600160801b90046001600160401b0316846150e2565b6114ee906001600160401b03168761510a565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115c3903390309084906115a89190615121565b606554600160581b90046001600160a01b03169291906133ae565b6115cb613419565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff16156116355760405162461bcd60e51b81526004016109e590614fa5565b6072546001600160401b03878116600090815260676020526040902060010154429261166c92600160c01b90910481169116614f0a565b6001600160401b031611156116e85760405162461bcd60e51b8152602060048201526048602482015260008051602061562a83398151915260448201527f3a20747275737465642061676772656761746f722074696d656f7574206e6f7460648201526708195e1c1a5c995960c21b608482015260a4016109e5565b6103e86116f588886150e2565b6001600160401b0316106117695760405162461bcd60e51b8152602060048201526041602482015260008051602061562a83398151915260448201527f3a2063616e6e6f74207665726966792074686174206d616e79206261746368656064820152607360f81b608482015260a4016109e5565b61177988888888888888886134bd565b611782866139a9565b607254600160801b90046001600160401b031660000361184a576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d6020526040902085905560725416156117e757607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561182d57600080fd5b505af1158015611841573d6000803e3d6000fd5b505050506118fb565b611852613419565b607280546001600160401b031690600061186b83615023565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b0381161580159061197357506072546001600160401b03600160401b9091048116908216115b801561198e57506072546001600160401b0390811690821611155b611a115760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a636f6e736f6c6964617465506560448201527f6e64696e6753746174653a2070656e64696e6753746174654e756d206d757374606482015267081a5b9d985b1a5960c21b608482015260a4016109e5565b606a546001600160a01b03163314611ac457611a2c81610cad565b611ac45760405162461bcd60e51b815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a636f6e736f6c6964617465506560448201527f6e64696e6753746174653a2070656e64696e67207374617465206973206e6f7460648201527f20726561647920746f20626520636f6e736f6c69646174656400000000000000608482015260a4016109e5565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d9094529382902092909255607280546fffffffffffffffff000000000000000019169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611b8657600080fd5b505af1158015611b9a573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611be791815260200190565b60405180910390a3505050565b606e805461093a90614e72565b600054610100900460ff1615808015611c215750600054600160ff909116105b80611c3b5750303b158015611c3b575060005460ff166001145b611c9e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109e5565b6000805460ff191660011790558015611cc1576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611d3e6020860186614c09565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d6e6060860160408701614c09565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611da960c0860160a08701614c09565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611e0660e0860160c08701614815565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611e3d6040860160208701614815565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611e796080860160608701614815565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611eb560a0860160808701614ceb565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611edd8482615186565b50606f611eea8382615186565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611f20613b8f565b8015611f66576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611f9b5760405162461bcd60e51b81526004016109e590614eac565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610ae4565b6073546001600160a01b0316331461201f5760405162461bcd60e51b81526004016109e590614eac565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190602001610ae4565b612075613c03565b61207f6000613c5d565b565b6033546001600160a01b03163314612302576072546000906001600160401b0316156120d257506072546001600160401b03908116600090815260716020526040902054600160401b9004166120e0565b506069546001600160401b03165b80826001600160401b0316116121685760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a6163746976617465456d65726760448201527f656e637953746174653a20426174636820616c726561647920766572696669656064820152601960fa1b608482015260a4016109e5565b6068546001600160401b03600160401b9091048116908316118015906121aa57506001600160401b038083166000908152606760205260409020600101541615155b61223a5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a6163746976617465456d65726760448201527f656e637953746174653a204261746368206e6f742073657175656e636564206f60648201527472206e6f7420656e64206f662073657175656e636560581b608482015260a4016109e5565b6001600160401b0380831660009081526067602052604090206001015442916122689162093a809116614f0a565b6001600160401b031611156123005760405162461bcd60e51b815260206004820152605260248201527f50726f6f664f66456666696369656e63793a3a6163746976617465456d65726760448201527f656e637953746174653a204167677265676174696f6e2068616c742074696d656064820152711bdd5d081a5cc81b9bdd08195e1c1a5c995960721b608482015260a4016109e5565b505b61230a613caf565b50565b60655460ff16156123305760405162461bcd60e51b81526004016109e590614fa5565b612341898989898989898989613d1f565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f66613caf565b6073546001600160a01b031633146123c65760405162461bcd60e51b81526004016109e590614eac565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610ae490831515815260200190565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612466573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248a919061506c565b9050600061249661264a565b6068546001600160401b03600160401b82048116916124c691600160801b8204811691600160c01b9004166150e2565b6124d09190614f0a565b6124da91906150e2565b6001600160401b031690506124ef818361525b565b9250505090565b6073546001600160a01b031633146125205760405162461bcd60e51b81526004016109e590614eac565b62093a806001600160401b038216111561254c5760405162461bcd60e51b81526004016109e590614f35565b60655460ff166125ef576072546001600160401b03600160801b9091048116908216106125ef5760405162461bcd60e51b8152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a73657450656e64696e67537461908201527f746554696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109e5565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610ae4565b6072546000906001600160401b03161561268757506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126c15760405162461bcd60e51b81526004016109e590614eac565b606e6126cd8282615186565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610ae4919061476e565b6073546001600160a01b031633146127275760405162461bcd60e51b81526004016109e590614eac565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610ae4565b60655460ff16156127a15760405162461bcd60e51b81526004016109e590614fa5565b606c54600160a01b900460ff1615156001146127cf5760405162461bcd60e51b81526004016109e59061526f565b80518061283d5760405162461bcd60e51b8152602060048201526042602482015260008051602061560a83398151915260448201527f42617463683a204d75737420666f726365206174206c656173742031206261746064820152610c6d60f31b608482015260a4016109e5565b6103e881106128b35760405162461bcd60e51b8152602060048201526048602482015260008051602061560a83398151915260448201527f426174636865733a2063616e6e6f74207665726966792074686174206d616e79606482015267206261746368657360c01b608482015260a4016109e5565b6068546001600160401b03600160c01b82048116916128db918491600160801b9004166152dd565b111561293d5760405162461bcd60e51b815260206004820152603a602482015260008051602061560a83398151915260448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016109e5565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612b7357600086828151811061298a5761298a61500d565b60200260200101519050838061299f90615023565b9450506000816000015180519060200120826020015183604001516040516020016129cc93929190615049565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612a705760405162461bcd60e51b8152602060048201526047602482015260008051602061560a83398151915260448201527f426174636865733a20466f7263656420626174636865732064617461206d75736064820152660e840dac2e8c6d60cb1b608482015260a4016109e5565b612a7b60018861510a565b8303612b155742620697808360400151612a959190614f0a565b6001600160401b03161115612b155760405162461bcd60e51b815260206004820152604c602482015260008051602061560a83398151915260448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201526b1b595bdd5d081c195c9a5bd960a21b608482015260a4016109e5565b8151805160209182012081840151604051612b3893889392914291339101615085565b6040516020818303038152906040528051906020012093508580612b5b90615023565b96505050508080612b6b906150c9565b91505061296e565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612c8c5760405162461bcd60e51b81526004016109e5906152f5565b6073546001600160a01b03163314612cb65760405162461bcd60e51b81526004016109e590614eac565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612d0657600080fd5b505af1158015612d1a573d6000803e3d6000fd5b5050505061207f6143cd565b606a546001600160a01b03163314612d505760405162461bcd60e51b81526004016109e590615352565b612d61898989898989898989613d1f565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612dac57607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612df257600080fd5b505af1158015612e06573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612e8e5760405162461bcd60e51b81526004016109e590614fa5565b606c54600160a01b900460ff161515600114612ebc5760405162461bcd60e51b81526004016109e59061526f565b6000612ec760745490565b905081811115612f315760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201526e6f7420656e6f756768206d6174696360881b60648201526084016109e5565b61ea60835110612fa95760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016109e5565b606554612fc890600160581b90046001600160a01b03163330846133ae565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015613012573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613036919061506c565b60688054919250600160c01b9091046001600160401b031690601861305a83615023565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550508380519060200120814260405160200161309b93929190615049565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361313f57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261319a565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613191939291906153b9565b60405180910390a25b50505050565b606a546001600160a01b031633146131ca5760405162461bcd60e51b81526004016109e590615352565b6131da88888888888888886134bd565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561322557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561326b57600080fd5b505af115801561327f573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611934565b6073546001600160a01b031633146132ea5760405162461bcd60e51b81526004016109e590614eac565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001610ae4565b613340613c03565b6001600160a01b0381166133a55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e5565b61230a81613c5d565b6040516001600160a01b038085166024830152831660448201526064810182905261319a9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614424565b6072546001600160401b03600160401b820481169116111561207f5760725460009061345690600160401b90046001600160401b03166001614f0a565b905061346181610cad565b1561230a576072546000906002906134839084906001600160401b03166150e2565b61348d91906153ec565b6134979083614f0a565b90506134a281610cad565b156134b4576134b081611946565b5050565b6134b082611946565b6000806134c861264a565b90506001600160401b038a1615613624576072546001600160401b03908116908b1611156135725760405162461bcd60e51b815260206004820152605d602482015260008051602061562a83398151915260448201527f3a2070656e64696e6753746174654e756d206d757374206265206c657373206f60648201527f7220657175616c207468616e206c61737450656e64696e675374617465000000608482015260a4016109e5565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b909204161461361e5760405162461bcd60e51b8152602060048201526051602482015260008051602061562a83398151915260448201527f3a20696e69744e756d4261746368206d757374206d61746368207468652070656064820152700dcc8d2dcce40e6e8c2e8ca40c4c2e8c6d607b1b608482015260a4016109e5565b50613758565b6001600160401b0389166000908152606d60205260409020549150816136b15760405162461bcd60e51b8152602060048201526048602482015260008051602061562a83398151915260448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e6064820152671bdd08195e1a5cdd60c21b608482015260a4016109e5565b806001600160401b0316896001600160401b031611156137585760405162461bcd60e51b8152602060048201526062602482015260008051602061562a83398151915260448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e2063757272656e744c61737456657269666965644261746084820152610c6d60f31b60a482015260c4016109e5565b806001600160401b0316886001600160401b0316116137f35760405162461bcd60e51b815260206004820152605c602482015260008051602061562a83398151915260448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e2063757272656e744c6173745665726966696564426174636800000000608482015260a4016109e5565b60006138028a8a8a868b610aef565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516138379190615412565b602060405180830381855afa158015613854573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613877919061506c565b613881919061542e565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916138c5918b918b918b9190600401615442565b602060405180830381865afa1580156138e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061390691906154bc565b6139585760405162461bcd60e51b815260206004820152602f602482015260008051602061562a83398151915260448201526e1d1024a72b20a624a22fa82927a7a360891b60648201526084016109e5565b61399b33613966858d6150e2565b6001600160401b0316613977612413565b6139819190615121565b606554600160581b90046001600160a01b031691906144fb565b505050505050505050505050565b60006139b361264a565b9050816000806139c384846150e2565b6001600160401b031690505b836001600160401b0316836001600160401b031614613a75576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613a1f91164261510a565b1115613a5a576001810154613a4490600160401b90046001600160401b0316866150e2565b613a57906001600160401b0316846152dd565b92505b60010154600160401b90046001600160401b031692506139cf565b6000613a81838361510a565b905082811015613afb576000613a97828561510a565b9050600c8111613aa75780613aaa565b600c5b9050613ab7816003615121565b613ac290600a6155bd565b606554613adb908390600160481b900461ffff166155bd565b607454613ae89190615121565b613af2919061525b565b60745550613b87565b6000613b07848361510a565b9050600c8111613b175780613b1a565b600c5b90506000613b29826003615121565b613b3490600a6155bd565b606554613b4d908490600160481b900461ffff166155bd565b607454613b5a9190615121565b613b64919061525b565b905080607454607454613b779190615121565b613b81919061525b565b60745550505b505050505050565b600054610100900460ff16613bfa5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109e5565b61207f33613c5d565b6033546001600160a01b0316331461207f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109e5565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613cff57600080fd5b505af1158015613d13573d6000803e3d6000fd5b5050505061207f61452b565b60006001600160401b038a1615613ead576072546001600160401b03908116908b161115613de35760405162461bcd60e51b815260206004820152607160248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a2070656e64696e6753746160648201527f74654e756d206d757374206265206c657373206f7220657175616c207468616e608482015270206c61737450656e64696e67537461746560781b60a482015260c4016109e5565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613ea75760405162461bcd60e51b815260206004820152606560248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a20696e69744e756d42617460648201527f6368206d757374206d61746368207468652070656e64696e67207374617465206084820152640c4c2e8c6d60db1b60a482015260c4016109e5565b50614006565b506001600160401b0387166000908152606d602052604090205480613f4e5760405162461bcd60e51b815260206004820152605c60248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a20696e69744e756d42617460648201527f636820737461746520726f6f7420646f6573206e6f7420657869737400000000608482015260a4016109e5565b6069546001600160401b0390811690891611156140065760405162461bcd60e51b815260206004820152607660248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a20696e69744e756d42617460648201527f6368206d757374206265206c657373206f7220657175616c207468616e2063756084820152750e4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d60531b60a482015260c4016109e5565b6072546001600160401b03908116908a16118015906140365750896001600160401b0316896001600160401b0316115b801561405757506072546001600160401b03600160401b9091048116908a16115b6140d45760405162461bcd60e51b815260206004820152605460248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a2066696e616c50656e64696064820152731b99d4dd185d19539d5b481a5b98dbdc9c9958dd60621b608482015260a4016109e5565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146141995760405162461bcd60e51b815260206004820152606f60248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a2066696e616c4e6577426160648201527f746368206d75737420626520657175616c207468616e2063757272656e744c6160848201526e0e6e8accae4d2ccd2cac884c2e8c6d608b1b60a482015260c4016109e5565b60006141a8898989858a610aef565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516141dd9190615412565b602060405180830381855afa1580156141fa573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061421d919061506c565b614227919061542e565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d9161426b918a918a918a9190600401615442565b602060405180830381865afa158015614288573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ac91906154bc565b6143185760405162461bcd60e51b815260206004820152604360248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a20494e56414c49445f505260648201526227a7a360e91b608482015260a4016109e5565b6001600160401b038b1660009081526071602052604090206002015487900361399b5760405162461bcd60e51b815260206004820152606760248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a2073746f72656420726f6f60648201527f74206d75737420626520646966666572656e74207468616e206e6577207374616084820152661d19481c9bdbdd60ca1b60a482015260c4016109e5565b60655460ff166143ef5760405162461bcd60e51b81526004016109e5906152f5565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614479826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145869092919063ffffffff16565b8051909150156144f6578080602001905181019061449791906154bc565b6144f65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109e5565b505050565b6040516001600160a01b0383166024820152604481018290526144f690849063a9059cbb60e01b906064016133e2565b60655460ff161561454e5760405162461bcd60e51b81526004016109e590614fa5565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614595848460008561459d565b949350505050565b6060824710156145fe5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109e5565b600080866001600160a01b0316858760405161461a9190615412565b60006040518083038185875af1925050503d8060008114614657576040519150601f19603f3d011682016040523d82523d6000602084013e61465c565b606091505b509150915061466d87838387614678565b979650505050505050565b606083156146e75782516000036146e0576001600160a01b0385163b6146e05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109e5565b5081614595565b61459583838151156146fc5781518083602001fd5b8060405162461bcd60e51b81526004016109e5919061476e565b60005b83811015614731578181015183820152602001614719565b8381111561319a5750506000910152565b6000815180845261475a816020860160208601614716565b601f01601f19169290920160200192915050565b6020815260006147816020830184614742565b9392505050565b60006020828403121561479a57600080fd5b813561ffff8116811461478157600080fd5b80356001600160401b03811681146147c357600080fd5b919050565b600080600080600060a086880312156147e057600080fd5b6147e9866147ac565b94506147f7602087016147ac565b94979496505050506040830135926060810135926080909101359150565b60006020828403121561482757600080fd5b614781826147ac565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171561486857614868614830565b60405290565b604051606081016001600160401b038111828210171561486857614868614830565b604051601f8201601f191681016001600160401b03811182821017156148b8576148b8614830565b604052919050565b60006001600160401b038211156148d9576148d9614830565b5060051b60200190565b600082601f8301126148f457600080fd5b81356001600160401b0381111561490d5761490d614830565b614920601f8201601f1916602001614890565b81815284602083860101111561493557600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561496557600080fd5b82356001600160401b038082111561497c57600080fd5b818501915085601f83011261499057600080fd5b81356149a361499e826148c0565b614890565b81815260059190911b830184019084810190888311156149c257600080fd5b8585015b83811015614a5b578035858111156149de5760008081fd5b86016080818c03601f19018113156149f65760008081fd5b6149fe614846565b8983013588811115614a105760008081fd5b614a1e8e8c838701016148e3565b8252506040808401358b8301526060614a388186016147ac565b82840152614a478486016147ac565b9083015250855250509186019186016149c6565b5098975050505050505050565b8060408101831015614a7957600080fd5b92915050565b8060808101831015614a7957600080fd5b6000806000806000806000806101a0898b031215614aad57600080fd5b614ab6896147ac565b9750614ac460208a016147ac565b9650614ad260408a016147ac565b95506060890135945060808901359350614aef8a60a08b01614a68565b9250614afe8a60e08b01614a7f565b9150614b0e8a6101608b01614a68565b90509295985092959890939650565b6001600160a01b038116811461230a57600080fd5b600080600080600080600080888a036101c0811215614b5057600080fd5b8935614b5b81614b1d565b985060208a0135614b6b81614b1d565b975060408a0135614b7b81614b1d565b965060608a0135614b8b81614b1d565b955060e0607f1982011215614b9f57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614bc957600080fd5b614bd58c838d016148e3565b93506101a08b0135915080821115614bec57600080fd5b50614bf98b828c016148e3565b9150509295985092959890939650565b600060208284031215614c1b57600080fd5b813561478181614b1d565b60008060008060008060008060006101c08a8c031215614c4557600080fd5b614c4e8a6147ac565b9850614c5c60208b016147ac565b9750614c6a60408b016147ac565b9650614c7860608b016147ac565b955060808a0135945060a08a01359350614c958b60c08c01614a68565b9250614ca58b6101008c01614a7f565b9150614cb58b6101808c01614a68565b90509295985092959850929598565b600060208284031215614cd657600080fd5b5035919050565b801515811461230a57600080fd5b600060208284031215614cfd57600080fd5b813561478181614cdd565b600060208284031215614d1a57600080fd5b81356001600160401b03811115614d3057600080fd5b614595848285016148e3565b60006020808385031215614d4f57600080fd5b82356001600160401b0380821115614d6657600080fd5b818501915085601f830112614d7a57600080fd5b8135614d8861499e826148c0565b81815260059190911b83018401908481019088831115614da757600080fd5b8585015b83811015614a5b57803585811115614dc35760008081fd5b86016060818c03601f1901811315614ddb5760008081fd5b614de361486e565b8983013588811115614df55760008081fd5b614e038e8c838701016148e3565b8252506040808401358b830152614e1b8385016147ac565b9082015285525050918601918601614dab565b60008060408385031215614e4157600080fd5b82356001600160401b03811115614e5757600080fd5b614e63858286016148e3565b95602094909401359450505050565b600181811c90821680614e8657607f821691505b602082108103614ea657634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526028908201527f50726f6f664f66456666696369656e63793a3a6f6e6c7941646d696e3a206f6e604082015267363c9030b236b4b760c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614f2c57614f2c614ef4565b01949350505050565b6020808252604a908201527f50726f6f664f66456666696369656e63793a3a73657450656e64696e6753746160408201527f746554696d656f75743a206578636565642068616c74206167677265676174696060820152691bdb881d1a5b595bdd5d60b21b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361503f5761503f614ef4565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b60006020828403121561507e57600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b6000600182016150db576150db614ef4565b5060010190565b60006001600160401b038381169083168181101561510257615102614ef4565b039392505050565b60008282101561511c5761511c614ef4565b500390565b600081600019048311821515161561513b5761513b614ef4565b500290565b601f8211156144f657600081815260208120601f850160051c810160208610156151675750805b601f850160051c820191505b81811015613b8757828155600101615173565b81516001600160401b0381111561519f5761519f614830565b6151b3816151ad8454614e72565b84615140565b602080601f8311600181146151e857600084156151d05750858301515b600019600386901b1c1916600185901b178555613b87565b600085815260208120601f198616915b82811015615217578886015182559484019460019091019084016151f8565b50858210156152355787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b60008261526a5761526a615245565b500490565b60208082526048908201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160408201527f6c6c6f7765643a206f6e6c7920696620666f72636520626174636820697320616060820152677661696c61626c6560c01b608082015260a00190565b600082198211156152f0576152f0614ef4565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b60208082526041908201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564416760408201527f6772656761746f723a206f6e6c7920747275737465642041676772656761746f6060820152603960f91b608082015260a00190565b8381526001600160a01b03831660208201526060604082018190526000906153e390830184614742565b95945050505050565b60006001600160401b038084168061540657615406615245565b92169190910492915050565b60008251615424818460208701614716565b9190910192915050565b60008261543d5761543d615245565b500690565b61012081016040808784376000838201818152879190815b600281101561547a5784848337908401828152928401929060010161545a565b5050828760c0870137610100850181815286935091505b60018110156154b0578251825260209283019290910190600101615491565b50505095945050505050565b6000602082840312156154ce57600080fd5b815161478181614cdd565b600181815b808511156155145781600019048211156154fa576154fa614ef4565b8085161561550757918102915b93841c93908002906154de565b509250929050565b60008261552b57506001614a79565b8161553857506000614a79565b816001811461554e576002811461555857615574565b6001915050614a79565b60ff84111561556957615569614ef4565b50506001821b614a79565b5060208310610133831016604e8410600b8410161715615597575081810a614a79565b6155a183836154d9565b80600019048211156155b5576155b5614ef4565b029392505050565b6000614781838361551c56fe50726f6f664f66456666696369656e63793a3a73657175656e6365426174636850726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657250726f6f664f66456666696369656e63793a3a73657175656e6365466f72636550726f6f664f66456666696369656e63793a3a76657269667942617463686573a2646970667358221220cd9b4b625eef949536feef24eb4d660057471116e5beb049b2c6fed8b393b9c864736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103af5760003560e01c80638da5cb5b116101f4578063cfa8ed471161011a578063e7a7ed02116100ad578063f14916d61161007c578063f14916d6146108eb578063f2fde38b146108fe578063f851a44014610911578063f8b823e41461092457600080fd5b8063e7a7ed0214610898578063e8bf92ed146108b2578063eaeb077b146108c5578063edc41121146108d857600080fd5b8063d939b315116100e9578063d939b3151461085a578063dbc1697614610874578063e11f3f181461087c578063e217cfd61461088f57600080fd5b8063cfa8ed4714610806578063d02103ca14610820578063d8d1091b14610833578063d8f54db01461084657600080fd5b8063ab9fc5ef11610192578063b6b0b09711610161578063b6b0b097146107be578063c0ed84e0146107d8578063c89e42df146107e0578063cf136306146107f357600080fd5b8063ab9fc5ef14610712578063adc879e91461071c578063afd23cbe14610736578063b4d63f581461075e57600080fd5b80639eb831b9116101ce5780639eb831b9146106d75780639f0d039d146106df578063a3c573eb146106e7578063aa58bad6146106fa57600080fd5b80638da5cb5b146106ab57806399f5634e146106bc5780639c9f3dfe146106c457600080fd5b80634a910e6a116102d9578063715018a611610277578063837a473811610246578063837a473814610606578063841b24d7146106745780638b48931e1461068e5780638c4a0af71461069857600080fd5b8063715018a6146105c55780637215541a146105cd57806375c508b3146105e05780637fcb3653146105f357600080fd5b806360943d6a116102b357806360943d6a1461056c5780636b8616ce1461057f5780636ff512cc1461059f578063704b6c02146105b257600080fd5b80634a910e6a146105315780635392c5e014610544578063542028d51461056457600080fd5b8063383b3be811610351578063456052671161032057806345605267146104d7578063458c0477146104f15780634834a343146105045780634a1a89a71461051757600080fd5b8063383b3be814610484578063394218e9146104975780633c158267146104aa578063423fa856146104bd57600080fd5b806319d8ac611161038d57806319d8ac6114610404578063220d78991461042f57806329878983146104425780632d0889d31461046d57600080fd5b8063107bf28c146103b457806315064c96146103d25780631816b7e5146103ef575b600080fd5b6103bc61092d565b6040516103c9919061476e565b60405180910390f35b6065546103df9060ff1681565b60405190151581526020016103c9565b6104026103fd366004614788565b6109bb565b005b606854610417906001600160401b031681565b6040516001600160401b0390911681526020016103c9565b6103bc61043d3660046147c8565b610aef565b606a54610455906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b61047661ea6081565b6040519081526020016103c9565b6103df610492366004614815565b610cad565b6104026104a5366004614815565b610cf4565b6104026104b8366004614952565b610e47565b60685461041790600160401b90046001600160401b031681565b60685461041790600160801b90046001600160401b031681565b607254610417906001600160401b031681565b610402610512366004614a90565b611612565b60725461041790600160401b90046001600160401b031681565b61040261053f366004614815565b611946565b610476610552366004614815565b606d6020526000908152604090205481565b6103bc611bf4565b61040261057a366004614b32565b611c01565b61047661058d366004614815565b60666020526000908152604090205481565b6104026105ad366004614c09565b611f71565b6104026105c0366004614c09565b611ff5565b61040261206d565b6104026105db366004614815565b612081565b6104026105ee366004614c26565b61230d565b606954610417906001600160401b031681565b610649610614366004614cc4565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103c9565b60725461041790600160c01b90046001600160401b031681565b61041762093a8081565b6104026106a6366004614ceb565b61239c565b6033546001600160a01b0316610455565b610476612413565b6104026106d2366004614815565b6124f6565b610476600c81565b607454610476565b607054610455906001600160a01b031681565b6065546104179061010090046001600160401b031681565b6104176206978081565b606c5461041790600160a81b90046001600160401b031681565b60655461074b90600160481b900461ffff1681565b60405161ffff90911681526020016103c9565b61079961076c366004614815565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103c9565b60655461045590600160581b90046001600160a01b031681565b61041761264a565b6104026107ee366004614d08565b612697565b610402610801366004614815565b6126fd565b60695461045590600160401b90046001600160a01b031681565b606c54610455906001600160a01b031681565b610402610841366004614d3c565b61277e565b606c546103df90600160a01b900460ff1681565b60725461041790600160801b90046001600160401b031681565b610402612c6a565b61040261088a366004614c26565b612d26565b6104176103e881565b60685461041790600160c01b90046001600160401b031681565b606b54610455906001600160a01b031681565b6104026108d3366004614e2e565b612e6b565b6104026108e6366004614a90565b6131a0565b6104026108f9366004614c09565b6132c0565b61040261090c366004614c09565b613338565b607354610455906001600160a01b031681565b61047660745481565b606f805461093a90614e72565b80601f016020809104026020016040519081016040528092919081815260200182805461096690614e72565b80156109b35780601f10610988576101008083540402835291602001916109b3565b820191906000526020600020905b81548152906001019060200180831161099657829003601f168201915b505050505081565b6073546001600160a01b031633146109ee5760405162461bcd60e51b81526004016109e590614eac565b60405180910390fd5b6103e88161ffff16118015610a0857506104008161ffff16105b610a925760405162461bcd60e51b815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a7365744d756c7469706c69657260448201527f42617463684665653a206e65774d756c7469706c69657242617463684665652060648201526e696e636f72726563742072616e676560881b608482015260a4016109e5565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610b2157508115155b610ba15760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f7420606482015264195e1a5cdd60da1b608482015260a4016109e5565b80610c225760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f7420606482015264195e1a5cdd60da1b608482015260a4016109e5565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610ce392600160801b90920481169116614f0a565b6001600160401b0316111592915050565b6073546001600160a01b03163314610d1e5760405162461bcd60e51b81526004016109e590614eac565b62093a806001600160401b0382161115610d4a5760405162461bcd60e51b81526004016109e590614f35565b60655460ff16610df1576072546001600160401b03600160c01b909104811690821610610df15760405162461bcd60e51b815260206004820152604960248201527f50726f6f664f66456666696369656e63793a3a7365745472757374656441676760448201527f72656761746f7254696d656f75743a206e65772074696d656f7574206d757374606482015268103132903637bbb2b960b91b608482015260a4016109e5565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610ae4565b60655460ff1615610e6a5760405162461bcd60e51b81526004016109e590614fa5565b606954600160401b90046001600160a01b03163314610ef15760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016109e5565b805180610f5f5760405162461bcd60e51b815260206004820152604260248201526000805160206155ca83398151915260448201527f65733a204174206c65617374206d7573742073657175656e63652031206261746064820152610c6d60f31b608482015260a4016109e5565b6103e88110610fd25760405162461bcd60e51b815260206004820152604560248201526000805160206155ca83398151915260448201527f65733a2043616e6e6f742073657175656e63652074686174206d616e79206261606482015264746368657360d81b608482015260a4016109e5565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b858110156114405760008782815181106110255761102561500d565b60200260200101519050600081606001516001600160401b031611156111c5578361104f81615023565b94505060008160000151805190602001208260200151836060015160405160200161107c93929190615049565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461111b5760405162461bcd60e51b815260206004820152604260248201526000805160206155ca83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109e5565b81606001516001600160401b031682604001516001600160401b031610156111bf5760405162461bcd60e51b815260206004820152605d60248201526000805160206155ca83398151915260448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016109e5565b5061133a565b6020810151158061124e5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916112089160040190815260200190565b6020604051808303816000875af1158015611227573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124b919061506c565b15155b6112ae5760405162461bcd60e51b815260206004820152603f60248201526000805160206155ca83398151915260448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016109e5565b80515161ea601161133a5760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a4016109e5565b856001600160401b031681604001516001600160401b03161015801561136d57504281604001516001600160401b031611155b6113d85760405162461bcd60e51b815260206004820152604260248201526000805160206155ca83398151915260448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e606482015261676560f01b608482015260a4016109e5565b805180516020918201208183015160408085015190516113ff948894939291339101615085565b604051602081830303815290604052805190602001209250848061142290615023565b95505080604001519550508080611438906150c9565b915050611009565b506068546001600160401b03600160c01b909104811690831611156114bb5760405162461bcd60e51b815260206004820152603a60248201526000805160206155ca83398151915260448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016109e5565b6068546000906114db90600160801b90046001600160401b0316846150e2565b6114ee906001600160401b03168761510a565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115c3903390309084906115a89190615121565b606554600160581b90046001600160a01b03169291906133ae565b6115cb613419565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff16156116355760405162461bcd60e51b81526004016109e590614fa5565b6072546001600160401b03878116600090815260676020526040902060010154429261166c92600160c01b90910481169116614f0a565b6001600160401b031611156116e85760405162461bcd60e51b8152602060048201526048602482015260008051602061562a83398151915260448201527f3a20747275737465642061676772656761746f722074696d656f7574206e6f7460648201526708195e1c1a5c995960c21b608482015260a4016109e5565b6103e86116f588886150e2565b6001600160401b0316106117695760405162461bcd60e51b8152602060048201526041602482015260008051602061562a83398151915260448201527f3a2063616e6e6f74207665726966792074686174206d616e79206261746368656064820152607360f81b608482015260a4016109e5565b61177988888888888888886134bd565b611782866139a9565b607254600160801b90046001600160401b031660000361184a576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d6020526040902085905560725416156117e757607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561182d57600080fd5b505af1158015611841573d6000803e3d6000fd5b505050506118fb565b611852613419565b607280546001600160401b031690600061186b83615023565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b0381161580159061197357506072546001600160401b03600160401b9091048116908216115b801561198e57506072546001600160401b0390811690821611155b611a115760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a636f6e736f6c6964617465506560448201527f6e64696e6753746174653a2070656e64696e6753746174654e756d206d757374606482015267081a5b9d985b1a5960c21b608482015260a4016109e5565b606a546001600160a01b03163314611ac457611a2c81610cad565b611ac45760405162461bcd60e51b815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a636f6e736f6c6964617465506560448201527f6e64696e6753746174653a2070656e64696e67207374617465206973206e6f7460648201527f20726561647920746f20626520636f6e736f6c69646174656400000000000000608482015260a4016109e5565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d9094529382902092909255607280546fffffffffffffffff000000000000000019169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611b8657600080fd5b505af1158015611b9a573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611be791815260200190565b60405180910390a3505050565b606e805461093a90614e72565b600054610100900460ff1615808015611c215750600054600160ff909116105b80611c3b5750303b158015611c3b575060005460ff166001145b611c9e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109e5565b6000805460ff191660011790558015611cc1576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611d3e6020860186614c09565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d6e6060860160408701614c09565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611da960c0860160a08701614c09565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611e0660e0860160c08701614815565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611e3d6040860160208701614815565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611e796080860160608701614815565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611eb560a0860160808701614ceb565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611edd8482615186565b50606f611eea8382615186565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611f20613b8f565b8015611f66576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611f9b5760405162461bcd60e51b81526004016109e590614eac565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610ae4565b6073546001600160a01b0316331461201f5760405162461bcd60e51b81526004016109e590614eac565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190602001610ae4565b612075613c03565b61207f6000613c5d565b565b6033546001600160a01b03163314612302576072546000906001600160401b0316156120d257506072546001600160401b03908116600090815260716020526040902054600160401b9004166120e0565b506069546001600160401b03165b80826001600160401b0316116121685760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a6163746976617465456d65726760448201527f656e637953746174653a20426174636820616c726561647920766572696669656064820152601960fa1b608482015260a4016109e5565b6068546001600160401b03600160401b9091048116908316118015906121aa57506001600160401b038083166000908152606760205260409020600101541615155b61223a5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a6163746976617465456d65726760448201527f656e637953746174653a204261746368206e6f742073657175656e636564206f60648201527472206e6f7420656e64206f662073657175656e636560581b608482015260a4016109e5565b6001600160401b0380831660009081526067602052604090206001015442916122689162093a809116614f0a565b6001600160401b031611156123005760405162461bcd60e51b815260206004820152605260248201527f50726f6f664f66456666696369656e63793a3a6163746976617465456d65726760448201527f656e637953746174653a204167677265676174696f6e2068616c742074696d656064820152711bdd5d081a5cc81b9bdd08195e1c1a5c995960721b608482015260a4016109e5565b505b61230a613caf565b50565b60655460ff16156123305760405162461bcd60e51b81526004016109e590614fa5565b612341898989898989898989613d1f565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f66613caf565b6073546001600160a01b031633146123c65760405162461bcd60e51b81526004016109e590614eac565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610ae490831515815260200190565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612466573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248a919061506c565b9050600061249661264a565b6068546001600160401b03600160401b82048116916124c691600160801b8204811691600160c01b9004166150e2565b6124d09190614f0a565b6124da91906150e2565b6001600160401b031690506124ef818361525b565b9250505090565b6073546001600160a01b031633146125205760405162461bcd60e51b81526004016109e590614eac565b62093a806001600160401b038216111561254c5760405162461bcd60e51b81526004016109e590614f35565b60655460ff166125ef576072546001600160401b03600160801b9091048116908216106125ef5760405162461bcd60e51b8152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a73657450656e64696e67537461908201527f746554696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109e5565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610ae4565b6072546000906001600160401b03161561268757506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126c15760405162461bcd60e51b81526004016109e590614eac565b606e6126cd8282615186565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610ae4919061476e565b6073546001600160a01b031633146127275760405162461bcd60e51b81526004016109e590614eac565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610ae4565b60655460ff16156127a15760405162461bcd60e51b81526004016109e590614fa5565b606c54600160a01b900460ff1615156001146127cf5760405162461bcd60e51b81526004016109e59061526f565b80518061283d5760405162461bcd60e51b8152602060048201526042602482015260008051602061560a83398151915260448201527f42617463683a204d75737420666f726365206174206c656173742031206261746064820152610c6d60f31b608482015260a4016109e5565b6103e881106128b35760405162461bcd60e51b8152602060048201526048602482015260008051602061560a83398151915260448201527f426174636865733a2063616e6e6f74207665726966792074686174206d616e79606482015267206261746368657360c01b608482015260a4016109e5565b6068546001600160401b03600160c01b82048116916128db918491600160801b9004166152dd565b111561293d5760405162461bcd60e51b815260206004820152603a602482015260008051602061560a83398151915260448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016109e5565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612b7357600086828151811061298a5761298a61500d565b60200260200101519050838061299f90615023565b9450506000816000015180519060200120826020015183604001516040516020016129cc93929190615049565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612a705760405162461bcd60e51b8152602060048201526047602482015260008051602061560a83398151915260448201527f426174636865733a20466f7263656420626174636865732064617461206d75736064820152660e840dac2e8c6d60cb1b608482015260a4016109e5565b612a7b60018861510a565b8303612b155742620697808360400151612a959190614f0a565b6001600160401b03161115612b155760405162461bcd60e51b815260206004820152604c602482015260008051602061560a83398151915260448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201526b1b595bdd5d081c195c9a5bd960a21b608482015260a4016109e5565b8151805160209182012081840151604051612b3893889392914291339101615085565b6040516020818303038152906040528051906020012093508580612b5b90615023565b96505050508080612b6b906150c9565b91505061296e565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612c8c5760405162461bcd60e51b81526004016109e5906152f5565b6073546001600160a01b03163314612cb65760405162461bcd60e51b81526004016109e590614eac565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612d0657600080fd5b505af1158015612d1a573d6000803e3d6000fd5b5050505061207f6143cd565b606a546001600160a01b03163314612d505760405162461bcd60e51b81526004016109e590615352565b612d61898989898989898989613d1f565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612dac57607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612df257600080fd5b505af1158015612e06573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612e8e5760405162461bcd60e51b81526004016109e590614fa5565b606c54600160a01b900460ff161515600114612ebc5760405162461bcd60e51b81526004016109e59061526f565b6000612ec760745490565b905081811115612f315760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201526e6f7420656e6f756768206d6174696360881b60648201526084016109e5565b61ea60835110612fa95760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016109e5565b606554612fc890600160581b90046001600160a01b03163330846133ae565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015613012573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613036919061506c565b60688054919250600160c01b9091046001600160401b031690601861305a83615023565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550508380519060200120814260405160200161309b93929190615049565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361313f57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261319a565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613191939291906153b9565b60405180910390a25b50505050565b606a546001600160a01b031633146131ca5760405162461bcd60e51b81526004016109e590615352565b6131da88888888888888886134bd565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561322557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561326b57600080fd5b505af115801561327f573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611934565b6073546001600160a01b031633146132ea5760405162461bcd60e51b81526004016109e590614eac565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001610ae4565b613340613c03565b6001600160a01b0381166133a55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e5565b61230a81613c5d565b6040516001600160a01b038085166024830152831660448201526064810182905261319a9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614424565b6072546001600160401b03600160401b820481169116111561207f5760725460009061345690600160401b90046001600160401b03166001614f0a565b905061346181610cad565b1561230a576072546000906002906134839084906001600160401b03166150e2565b61348d91906153ec565b6134979083614f0a565b90506134a281610cad565b156134b4576134b081611946565b5050565b6134b082611946565b6000806134c861264a565b90506001600160401b038a1615613624576072546001600160401b03908116908b1611156135725760405162461bcd60e51b815260206004820152605d602482015260008051602061562a83398151915260448201527f3a2070656e64696e6753746174654e756d206d757374206265206c657373206f60648201527f7220657175616c207468616e206c61737450656e64696e675374617465000000608482015260a4016109e5565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b909204161461361e5760405162461bcd60e51b8152602060048201526051602482015260008051602061562a83398151915260448201527f3a20696e69744e756d4261746368206d757374206d61746368207468652070656064820152700dcc8d2dcce40e6e8c2e8ca40c4c2e8c6d607b1b608482015260a4016109e5565b50613758565b6001600160401b0389166000908152606d60205260409020549150816136b15760405162461bcd60e51b8152602060048201526048602482015260008051602061562a83398151915260448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e6064820152671bdd08195e1a5cdd60c21b608482015260a4016109e5565b806001600160401b0316896001600160401b031611156137585760405162461bcd60e51b8152602060048201526062602482015260008051602061562a83398151915260448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e2063757272656e744c61737456657269666965644261746084820152610c6d60f31b60a482015260c4016109e5565b806001600160401b0316886001600160401b0316116137f35760405162461bcd60e51b815260206004820152605c602482015260008051602061562a83398151915260448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e2063757272656e744c6173745665726966696564426174636800000000608482015260a4016109e5565b60006138028a8a8a868b610aef565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516138379190615412565b602060405180830381855afa158015613854573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613877919061506c565b613881919061542e565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916138c5918b918b918b9190600401615442565b602060405180830381865afa1580156138e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061390691906154bc565b6139585760405162461bcd60e51b815260206004820152602f602482015260008051602061562a83398151915260448201526e1d1024a72b20a624a22fa82927a7a360891b60648201526084016109e5565b61399b33613966858d6150e2565b6001600160401b0316613977612413565b6139819190615121565b606554600160581b90046001600160a01b031691906144fb565b505050505050505050505050565b60006139b361264a565b9050816000806139c384846150e2565b6001600160401b031690505b836001600160401b0316836001600160401b031614613a75576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613a1f91164261510a565b1115613a5a576001810154613a4490600160401b90046001600160401b0316866150e2565b613a57906001600160401b0316846152dd565b92505b60010154600160401b90046001600160401b031692506139cf565b6000613a81838361510a565b905082811015613afb576000613a97828561510a565b9050600c8111613aa75780613aaa565b600c5b9050613ab7816003615121565b613ac290600a6155bd565b606554613adb908390600160481b900461ffff166155bd565b607454613ae89190615121565b613af2919061525b565b60745550613b87565b6000613b07848361510a565b9050600c8111613b175780613b1a565b600c5b90506000613b29826003615121565b613b3490600a6155bd565b606554613b4d908490600160481b900461ffff166155bd565b607454613b5a9190615121565b613b64919061525b565b905080607454607454613b779190615121565b613b81919061525b565b60745550505b505050505050565b600054610100900460ff16613bfa5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109e5565b61207f33613c5d565b6033546001600160a01b0316331461207f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109e5565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613cff57600080fd5b505af1158015613d13573d6000803e3d6000fd5b5050505061207f61452b565b60006001600160401b038a1615613ead576072546001600160401b03908116908b161115613de35760405162461bcd60e51b815260206004820152607160248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a2070656e64696e6753746160648201527f74654e756d206d757374206265206c657373206f7220657175616c207468616e608482015270206c61737450656e64696e67537461746560781b60a482015260c4016109e5565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613ea75760405162461bcd60e51b815260206004820152606560248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a20696e69744e756d42617460648201527f6368206d757374206d61746368207468652070656e64696e67207374617465206084820152640c4c2e8c6d60db1b60a482015260c4016109e5565b50614006565b506001600160401b0387166000908152606d602052604090205480613f4e5760405162461bcd60e51b815260206004820152605c60248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a20696e69744e756d42617460648201527f636820737461746520726f6f7420646f6573206e6f7420657869737400000000608482015260a4016109e5565b6069546001600160401b0390811690891611156140065760405162461bcd60e51b815260206004820152607660248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a20696e69744e756d42617460648201527f6368206d757374206265206c657373206f7220657175616c207468616e2063756084820152750e4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d60531b60a482015260c4016109e5565b6072546001600160401b03908116908a16118015906140365750896001600160401b0316896001600160401b0316115b801561405757506072546001600160401b03600160401b9091048116908a16115b6140d45760405162461bcd60e51b815260206004820152605460248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a2066696e616c50656e64696064820152731b99d4dd185d19539d5b481a5b98dbdc9c9958dd60621b608482015260a4016109e5565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146141995760405162461bcd60e51b815260206004820152606f60248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a2066696e616c4e6577426160648201527f746368206d75737420626520657175616c207468616e2063757272656e744c6160848201526e0e6e8accae4d2ccd2cac884c2e8c6d608b1b60a482015260c4016109e5565b60006141a8898989858a610aef565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516141dd9190615412565b602060405180830381855afa1580156141fa573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061421d919061506c565b614227919061542e565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d9161426b918a918a918a9190600401615442565b602060405180830381865afa158015614288573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ac91906154bc565b6143185760405162461bcd60e51b815260206004820152604360248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a20494e56414c49445f505260648201526227a7a360e91b608482015260a4016109e5565b6001600160401b038b1660009081526071602052604090206002015487900361399b5760405162461bcd60e51b815260206004820152606760248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a2073746f72656420726f6f60648201527f74206d75737420626520646966666572656e74207468616e206e6577207374616084820152661d19481c9bdbdd60ca1b60a482015260c4016109e5565b60655460ff166143ef5760405162461bcd60e51b81526004016109e5906152f5565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614479826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145869092919063ffffffff16565b8051909150156144f6578080602001905181019061449791906154bc565b6144f65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109e5565b505050565b6040516001600160a01b0383166024820152604481018290526144f690849063a9059cbb60e01b906064016133e2565b60655460ff161561454e5760405162461bcd60e51b81526004016109e590614fa5565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614595848460008561459d565b949350505050565b6060824710156145fe5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109e5565b600080866001600160a01b0316858760405161461a9190615412565b60006040518083038185875af1925050503d8060008114614657576040519150601f19603f3d011682016040523d82523d6000602084013e61465c565b606091505b509150915061466d87838387614678565b979650505050505050565b606083156146e75782516000036146e0576001600160a01b0385163b6146e05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109e5565b5081614595565b61459583838151156146fc5781518083602001fd5b8060405162461bcd60e51b81526004016109e5919061476e565b60005b83811015614731578181015183820152602001614719565b8381111561319a5750506000910152565b6000815180845261475a816020860160208601614716565b601f01601f19169290920160200192915050565b6020815260006147816020830184614742565b9392505050565b60006020828403121561479a57600080fd5b813561ffff8116811461478157600080fd5b80356001600160401b03811681146147c357600080fd5b919050565b600080600080600060a086880312156147e057600080fd5b6147e9866147ac565b94506147f7602087016147ac565b94979496505050506040830135926060810135926080909101359150565b60006020828403121561482757600080fd5b614781826147ac565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171561486857614868614830565b60405290565b604051606081016001600160401b038111828210171561486857614868614830565b604051601f8201601f191681016001600160401b03811182821017156148b8576148b8614830565b604052919050565b60006001600160401b038211156148d9576148d9614830565b5060051b60200190565b600082601f8301126148f457600080fd5b81356001600160401b0381111561490d5761490d614830565b614920601f8201601f1916602001614890565b81815284602083860101111561493557600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561496557600080fd5b82356001600160401b038082111561497c57600080fd5b818501915085601f83011261499057600080fd5b81356149a361499e826148c0565b614890565b81815260059190911b830184019084810190888311156149c257600080fd5b8585015b83811015614a5b578035858111156149de5760008081fd5b86016080818c03601f19018113156149f65760008081fd5b6149fe614846565b8983013588811115614a105760008081fd5b614a1e8e8c838701016148e3565b8252506040808401358b8301526060614a388186016147ac565b82840152614a478486016147ac565b9083015250855250509186019186016149c6565b5098975050505050505050565b8060408101831015614a7957600080fd5b92915050565b8060808101831015614a7957600080fd5b6000806000806000806000806101a0898b031215614aad57600080fd5b614ab6896147ac565b9750614ac460208a016147ac565b9650614ad260408a016147ac565b95506060890135945060808901359350614aef8a60a08b01614a68565b9250614afe8a60e08b01614a7f565b9150614b0e8a6101608b01614a68565b90509295985092959890939650565b6001600160a01b038116811461230a57600080fd5b600080600080600080600080888a036101c0811215614b5057600080fd5b8935614b5b81614b1d565b985060208a0135614b6b81614b1d565b975060408a0135614b7b81614b1d565b965060608a0135614b8b81614b1d565b955060e0607f1982011215614b9f57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614bc957600080fd5b614bd58c838d016148e3565b93506101a08b0135915080821115614bec57600080fd5b50614bf98b828c016148e3565b9150509295985092959890939650565b600060208284031215614c1b57600080fd5b813561478181614b1d565b60008060008060008060008060006101c08a8c031215614c4557600080fd5b614c4e8a6147ac565b9850614c5c60208b016147ac565b9750614c6a60408b016147ac565b9650614c7860608b016147ac565b955060808a0135945060a08a01359350614c958b60c08c01614a68565b9250614ca58b6101008c01614a7f565b9150614cb58b6101808c01614a68565b90509295985092959850929598565b600060208284031215614cd657600080fd5b5035919050565b801515811461230a57600080fd5b600060208284031215614cfd57600080fd5b813561478181614cdd565b600060208284031215614d1a57600080fd5b81356001600160401b03811115614d3057600080fd5b614595848285016148e3565b60006020808385031215614d4f57600080fd5b82356001600160401b0380821115614d6657600080fd5b818501915085601f830112614d7a57600080fd5b8135614d8861499e826148c0565b81815260059190911b83018401908481019088831115614da757600080fd5b8585015b83811015614a5b57803585811115614dc35760008081fd5b86016060818c03601f1901811315614ddb5760008081fd5b614de361486e565b8983013588811115614df55760008081fd5b614e038e8c838701016148e3565b8252506040808401358b830152614e1b8385016147ac565b9082015285525050918601918601614dab565b60008060408385031215614e4157600080fd5b82356001600160401b03811115614e5757600080fd5b614e63858286016148e3565b95602094909401359450505050565b600181811c90821680614e8657607f821691505b602082108103614ea657634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526028908201527f50726f6f664f66456666696369656e63793a3a6f6e6c7941646d696e3a206f6e604082015267363c9030b236b4b760c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614f2c57614f2c614ef4565b01949350505050565b6020808252604a908201527f50726f6f664f66456666696369656e63793a3a73657450656e64696e6753746160408201527f746554696d656f75743a206578636565642068616c74206167677265676174696060820152691bdb881d1a5b595bdd5d60b21b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361503f5761503f614ef4565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b60006020828403121561507e57600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b6000600182016150db576150db614ef4565b5060010190565b60006001600160401b038381169083168181101561510257615102614ef4565b039392505050565b60008282101561511c5761511c614ef4565b500390565b600081600019048311821515161561513b5761513b614ef4565b500290565b601f8211156144f657600081815260208120601f850160051c810160208610156151675750805b601f850160051c820191505b81811015613b8757828155600101615173565b81516001600160401b0381111561519f5761519f614830565b6151b3816151ad8454614e72565b84615140565b602080601f8311600181146151e857600084156151d05750858301515b600019600386901b1c1916600185901b178555613b87565b600085815260208120601f198616915b82811015615217578886015182559484019460019091019084016151f8565b50858210156152355787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b60008261526a5761526a615245565b500490565b60208082526048908201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160408201527f6c6c6f7765643a206f6e6c7920696620666f72636520626174636820697320616060820152677661696c61626c6560c01b608082015260a00190565b600082198211156152f0576152f0614ef4565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b60208082526041908201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564416760408201527f6772656761746f723a206f6e6c7920747275737465642041676772656761746f6060820152603960f91b608082015260a00190565b8381526001600160a01b03831660208201526060604082018190526000906153e390830184614742565b95945050505050565b60006001600160401b038084168061540657615406615245565b92169190910492915050565b60008251615424818460208701614716565b9190910192915050565b60008261543d5761543d615245565b500690565b61012081016040808784376000838201818152879190815b600281101561547a5784848337908401828152928401929060010161545a565b5050828760c0870137610100850181815286935091505b60018110156154b0578251825260209283019290910190600101615491565b50505095945050505050565b6000602082840312156154ce57600080fd5b815161478181614cdd565b600181815b808511156155145781600019048211156154fa576154fa614ef4565b8085161561550757918102915b93841c93908002906154de565b509250929050565b60008261552b57506001614a79565b8161553857506000614a79565b816001811461554e576002811461555857615574565b6001915050614a79565b60ff84111561556957615569614ef4565b50506001821b614a79565b5060208310610133831016604e8410600b8410161715615597575081810a614a79565b6155a183836154d9565b80600019048211156155b5576155b5614ef4565b029392505050565b6000614781838361551c56fe50726f6f664f66456666696369656e63793a3a73657175656e6365426174636850726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657250726f6f664f66456666696369656e63793a3a73657175656e6365466f72636550726f6f664f66456666696369656e63793a3a76657269667942617463686573a2646970667358221220cd9b4b625eef949536feef24eb4d660057471116e5beb049b2c6fed8b393b9c864736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/ProofOfEfficiencyMock.json b/compiled-contracts/ProofOfEfficiencyMock.json index eb163f552..89d098453 100644 --- a/compiled-contracts/ProofOfEfficiencyMock.json +++ b/compiled-contracts/ProofOfEfficiencyMock.json @@ -1693,8 +1693,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50615272806100206000396000f3fe608060405234801561001057600080fd5b506004361061032b5760003560e01c80638da5cb5b116101b2578063c89e42df116100f9578063dbc16976116100a2578063eaeb077b1161007c578063eaeb077b14610811578063f2fde38b14610824578063f755276114610837578063fe16564f1461084657600080fd5b8063dbc16976146107b9578063e7a7ed02146107c1578063e8bf92ed146107f157600080fd5b8063d0ae98dd116100d3578063d0ae98dd14610766578063d8d1091b14610779578063d8f54db01461078c57600080fd5b8063c89e42df14610707578063cfa8ed471461071a578063d02103ca1461074657600080fd5b8063adc879e91161015b578063b6b0b09711610135578063b6b0b097146106bc578063c0cad302146106e1578063c3fd0f9c146106f457600080fd5b8063adc879e91461067e578063b02286c014610692578063b4d63f581461069c57600080fd5b80639b7967601161018c5780639b79676014610641578063a3c573eb14610654578063ab9fc5ef1461067457600080fd5b80638da5cb5b1461060857806396dc3d391461062657806399f5634e1461063957600080fd5b80635437988d116102765780637152facf1161021f5780637fcb3653116101f95780637fcb3653146105ce57806381df7d3f146105e25780638c4a0af7146105f557600080fd5b80637152facf146105a0578063748608de146105b357806379847057146105c657600080fd5b80636b8616ce116102505780636b8616ce146105655780636ff512cc14610585578063715018a61461059857600080fd5b80635437988d1461049e57806355b925e6146104b1578063574f649e146104c457600080fd5b806327eb6c0f116102d857806345605267116102b257806345605267146104405780635392c5e014610468578063542028d51461049657600080fd5b806327eb6c0f146103c85780633c1582671461040d578063423fa8561461042057600080fd5b80631a26da14116103095780631a26da14146103985780631c1083e2146103ad5780632072f6c5146103c057600080fd5b8063107bf28c1461033057806315064c961461034e57806319d8ac611461036b575b600080fd5b610338610859565b6040516103459190614687565b60405180910390f35b60655461035b9060ff1681565b6040519015158152602001610345565b60685461037f9067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610345565b6103ab6103a63660046146b7565b6108e7565b005b6103ab6103bb36600461470e565b61090c565b6103ab610a18565b6070546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610345565b6103ab61041b36600461486b565b610ac9565b60685461037f9068010000000000000000900467ffffffffffffffff1681565b60685461037f90700100000000000000000000000000000000900467ffffffffffffffff1681565b610488610476366004614982565b606b6020526000908152604090205481565b604051908152602001610345565b61033861145a565b6103ab6104ac36600461470e565b611467565b6103ab6104bf3660046149b4565b6114b6565b6104886104d2366004614a37565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b610488610573366004614982565b60666020526000908152604090205481565b6103ab61059336600461470e565b611a7f565b6103ab611b99565b6103386105ae366004614aad565b611bab565b6103ab6105c13660046149b4565b611de1565b61048861204a565b60695461037f9067ffffffffffffffff1681565b6103ab6105f0366004614b08565b6120c4565b6103ab610603366004614c02565b61241d565b60335473ffffffffffffffffffffffffffffffffffffffff166103e8565b6103ab610634366004614982565b612537565b61048861257a565b6103ab61064f366004614982565b6126ab565b6071546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b61037f62093a8081565b606e5461037f9067ffffffffffffffff1681565b610488620493e081565b6104886106aa366004614982565b60676020526000908152604090205481565b6065546103e890610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6103ab6106ef366004614c1f565b6126fa565b6103ab6107023660046149b4565b612712565b6103ab610715366004614c1f565b612d5c565b6069546103e89068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b610488610774366004614aad565b612e31565b6103ab610787366004614c5c565b6130dd565b60695461035b907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b6103ab613782565b60685461037f907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b6103ab61081f366004614d4f565b613911565b6103ab61083236600461470e565b613e12565b61048867016345785d8a000081565b6103ab610854366004614d94565b613eaf565b606f805461086690614dc0565b80601f016020809104026020016040519081016040528092919081815260200182805461089290614dc0565b80156108df5780601f106108b4576101008083540402835291602001916108df565b820191906000526020600020905b8154815290600101906020018083116108c257829003601f168201915b505050505081565b6108ef613ed2565b67ffffffffffffffff909116600090815260676020526040902055565b60705473ffffffffffffffffffffffffffffffffffffffff16331461099e5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff1615610ab75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b610abf613ed2565b610ac7613f39565b565b60655460ff1615610b685760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610c015760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610995565b805180610c9c5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b8581101561124b576000878281518110610d0257610d02614e13565b602002602001015190506000816060015167ffffffffffffffff161115610f1b5783610d2d81614e71565b945050600081600001518051906020012082602001518360600151604051602001610d9093929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610e5d5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610f155760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610995565b506110b6565b60208101511580610fca5750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610f849160040190815260200190565b6020604051808303816000875af1158015610fa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc79190614e98565b15155b61103c5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610995565b805151620493e0116110b65760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610995565b8567ffffffffffffffff16816040015167ffffffffffffffff16101580156110ec575042816040015167ffffffffffffffff1611155b6111845760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061122d90614e71565b9550508060400151955050808061124390614eb1565b915050610ce6565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156112ee5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610995565b60685460009061131c90700100000000000000000000000000000000900467ffffffffffffffff1684614ee9565b6113309067ffffffffffffffff1687614f12565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061140d33306113e78467016345785d8a0000614f29565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613fc3565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d805461086690614dc0565b61146f613ed2565b606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60655460ff16156115555760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b60695467ffffffffffffffff90811690881611156116015760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a401610995565b60695467ffffffffffffffff908116908716116116ac5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a401610995565b67ffffffffffffffff87166000908152606b602052604090205461175e5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a401610995565b600061176c88888888611bab565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516117a19190614f66565b602060405180830381855afa1580156117be573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906117e19190614e98565b6117eb9190614fb1565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916118559189918991899190600401614fc5565b602060405180830381865afa158015611872573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611896919061503f565b6119085760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610995565b6069546119669033906119259067ffffffffffffffff168b614ee9565b67ffffffffffffffff1661193761257a565b6119419190614f29565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169190614081565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b158015611a1b57600080fd5b505af1158015611a2f573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611b185760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610995565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610a0d565b611ba1613ed2565b610ac760006140dc565b67ffffffffffffffff808516600081815260676020526040808220549387168252902054606092911580611bde57508115155b611c765760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610995565b80611d0f5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610995565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b611de9613ed2565b60695467ffffffffffffffff9081169088161115611e955760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a401610995565b60695467ffffffffffffffff90811690871611611f405760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610995565b67ffffffffffffffff80881660009081526067602052604080822054928916825290205481611fd75760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610995565b806119665760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610995565b60685460009067ffffffffffffffff700100000000000000000000000000000000820481169161209991780100000000000000000000000000000000000000000000000090910416600161505c565b6120a39190614ee9565b6120bf9067ffffffffffffffff16670de0b6b3a7640000614f29565b905090565b600054610100900460ff16158080156120e45750600054600160ff909116105b806120fe5750303b1580156120fe575060005460ff166001145b6121705760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610995565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156121ce57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d61230d87826150d6565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f61234e85826150d6565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560708054928516929091169190911790556123ac614153565b801561240f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146124b65760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610995565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a0d90831515815260200190565b61253f613ed2565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156125f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126159190614e98565b60695460685491925060009167ffffffffffffffff9182169168010000000000000000820481169161267a9170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614ee9565b612684919061505c565b61268e9190614ee9565b67ffffffffffffffff1690506126a481836151d2565b9250505090565b6126b3613ed2565b6068805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b612702613ed2565b606f61270e82826150d6565b5050565b60655460ff16156127b15760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b8567ffffffffffffffff168767ffffffffffffffff16106128605760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a401610995565b60695467ffffffffffffffff90811690871611156129325760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c401610995565b67ffffffffffffffff87166000908152606b60205260409020546129e45760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a401610995565b67ffffffffffffffff86166000908152606b6020526040902054612a965760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a401610995565b6000612aa488888888611bab565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051612ad99190614f66565b602060405180830381855afa158015612af6573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612b199190614e98565b612b239190614fb1565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91612b8d9189918991899190600401614fc5565b602060405180830381865afa158015612baa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bce919061503f565b612c405760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f46000000006064820152608401610995565b67ffffffffffffffff88166000908152606b6020526040902054869003612cf55760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a401610995565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a1612d51613f39565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612df55760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610995565b606d612e0182826150d6565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a0d9190614687565b60695460009067ffffffffffffffff868116911614612ede5760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b8467ffffffffffffffff168467ffffffffffffffff1611612f8d5760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a401610995565b60685467ffffffffffffffff68010000000000000000909104811690851611156130455760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b600061305386868686611bab565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516130889190614f66565b602060405180830381855afa1580156130a5573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906130c89190614e98565b6130d29190614fb1565b979650505050505050565b60655460ff161561317c5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461323f5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610995565b8051806132da5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b60685467ffffffffffffffff780100000000000000000000000000000000000000000000000082048116916133259184917001000000000000000000000000000000009004166151e6565b11156133995760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610995565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b848110156136b25760008682815181106133f9576133f9614e13565b60200260200101519050838061340e90614e71565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff881660009081526066909352912054909150811461352f5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610995565b61353a600188614f12565b83036135f8574262093a808360400151613554919061505c565b67ffffffffffffffff1611156135f85760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610995565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209350858061369a90614e71565b965050505080806136aa90614eb1565b9150506133dd565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166137fa5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610995565b60705473ffffffffffffffffffffffffffffffffffffffff1633146138875760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c0000006064820152608401610995565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156138f157600080fd5b505af1158015613905573d6000803e3d6000fd5b50505050610ac76141d9565b60655460ff16156139b05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114613a735760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610995565b6000613a7d61204a565b905081811115613af55760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610995565b620493e0835110613b6e5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610995565b606554613b9890610100900473ffffffffffffffffffffffffffffffffffffffff16333084613fc3565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2c9190614e98565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613c6683614e71565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505083805190602001208142604051602001613cdf93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526066909352912055323303613daf57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613e0c565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613e03939291906151fe565b60405180910390a25b50505050565b613e1a613ed2565b73ffffffffffffffffffffffffffffffffffffffff8116613ea35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610995565b613eac816140dc565b50565b613eb7613ed2565b67ffffffffffffffff166000908152606b6020526040902055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ac75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610995565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613fa357600080fd5b505af1158015613fb7573d6000803e3d6000fd5b50505050610ac76142a4565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052613e0c9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152614399565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526140d79084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161401d565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166141d05760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610995565b610ac7336140dc565b60655460ff166142515760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610995565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff16156143435760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60006143fb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661448b9092919063ffffffff16565b8051909150156140d75780806020019051810190614419919061503f565b6140d75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610995565b606061449a84846000856144a4565b90505b9392505050565b60608247101561451c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610995565b73ffffffffffffffffffffffffffffffffffffffff85163b6145805760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610995565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516145a99190614f66565b60006040518083038185875af1925050503d80600081146145e6576040519150601f19603f3d011682016040523d82523d6000602084013e6145eb565b606091505b50915091506130d28282866060831561460557508161449d565b8251156146155782518084602001fd5b8160405162461bcd60e51b81526004016109959190614687565b60005b8381101561464a578181015183820152602001614632565b83811115613e0c5750506000910152565b6000815180845261467381602086016020860161462f565b601f01601f19169290920160200192915050565b60208152600061449d602083018461465b565b803567ffffffffffffffff811681146146b257600080fd5b919050565b600080604083850312156146ca57600080fd5b6146d38361469a565b946020939093013593505050565b73ffffffffffffffffffffffffffffffffffffffff81168114613eac57600080fd5b80356146b2816146e1565b60006020828403121561472057600080fd5b813561449d816146e1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171561477d5761477d61472b565b60405290565b6040516060810167ffffffffffffffff8111828210171561477d5761477d61472b565b604051601f8201601f1916810167ffffffffffffffff811182821017156147cf576147cf61472b565b604052919050565b600067ffffffffffffffff8211156147f1576147f161472b565b5060051b60200190565b600082601f83011261480c57600080fd5b813567ffffffffffffffff8111156148265761482661472b565b6148396020601f19601f840116016147a6565b81815284602083860101111561484e57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561487e57600080fd5b823567ffffffffffffffff8082111561489657600080fd5b818501915085601f8301126148aa57600080fd5b81356148bd6148b8826147d7565b6147a6565b81815260059190911b830184019084810190888311156148dc57600080fd5b8585015b83811015614975578035858111156148f85760008081fd5b86016080818c03601f19018113156149105760008081fd5b61491861475a565b898301358881111561492a5760008081fd5b6149388e8c838701016147fb565b8252506040808401358b830152606061495281860161469a565b8284015261496184860161469a565b9083015250855250509186019186016148e0565b5098975050505050505050565b60006020828403121561499457600080fd5b61449d8261469a565b80604081018310156149ae57600080fd5b92915050565b6000806000806000806000610180888a0312156149d057600080fd5b6149d98861469a565b96506149e76020890161469a565b95506040880135945060608801359350614a048960808a0161499d565b9250610140880189811115614a1857600080fd5b60c089019250614a288a8261499d565b91505092959891949750929550565b600080600080600060a08688031215614a4f57600080fd5b85359450602086013567ffffffffffffffff811115614a6d57600080fd5b614a79888289016147fb565b94505060408601359250614a8f6060870161469a565b91506080860135614a9f816146e1565b809150509295509295909350565b60008060008060808587031215614ac357600080fd5b614acc8561469a565b9350614ada6020860161469a565b93969395505050506040820135916060013590565b8015158114613eac57600080fd5b80356146b281614aef565b60008060008060008060008060008060006101608c8e031215614b2a57600080fd5b614b338c614703565b9a50614b4160208d01614703565b9950614b4f60408d01614703565b985060608c01359750614b6460808d01614703565b9650614b7260a08d01614afd565b955067ffffffffffffffff8060c08e01351115614b8e57600080fd5b614b9e8e60c08f01358f016147fb565b9550614bac60e08e0161469a565b9450806101008e01351115614bc057600080fd5b50614bd28d6101008e01358e016147fb565b9250614be16101208d01614703565b9150614bf06101408d01614703565b90509295989b509295989b9093969950565b600060208284031215614c1457600080fd5b813561449d81614aef565b600060208284031215614c3157600080fd5b813567ffffffffffffffff811115614c4857600080fd5b614c54848285016147fb565b949350505050565b60006020808385031215614c6f57600080fd5b823567ffffffffffffffff80821115614c8757600080fd5b818501915085601f830112614c9b57600080fd5b8135614ca96148b8826147d7565b81815260059190911b83018401908481019088831115614cc857600080fd5b8585015b8381101561497557803585811115614ce45760008081fd5b86016060818c03601f1901811315614cfc5760008081fd5b614d04614783565b8983013588811115614d165760008081fd5b614d248e8c838701016147fb565b8252506040808401358b830152614d3c83850161469a565b9082015285525050918601918601614ccc565b60008060408385031215614d6257600080fd5b823567ffffffffffffffff811115614d7957600080fd5b614d85858286016147fb565b95602094909401359450505050565b60008060408385031215614da757600080fd5b82359150614db76020840161469a565b90509250929050565b600181811c90821680614dd457607f821691505b602082108103614e0d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614e8e57614e8e614e42565b6001019392505050565b600060208284031215614eaa57600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614ee257614ee2614e42565b5060010190565b600067ffffffffffffffff83811690831681811015614f0a57614f0a614e42565b039392505050565b600082821015614f2457614f24614e42565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f6157614f61614e42565b500290565b60008251614f7881846020870161462f565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614fc057614fc0614f82565b500690565b61012081016040808784376000838201818152879190815b6002811015614ffd57848483379084018281529284019290600101614fdd565b5050828760c0870137610100850181815286935091505b6001811015615033578251825260209283019290910190600101615014565b50505095945050505050565b60006020828403121561505157600080fd5b815161449d81614aef565b600067ffffffffffffffff80831681851680830382111561507f5761507f614e42565b01949350505050565b601f8211156140d757600081815260208120601f850160051c810160208610156150af5750805b601f850160051c820191505b818110156150ce578281556001016150bb565b505050505050565b815167ffffffffffffffff8111156150f0576150f061472b565b615104816150fe8454614dc0565b84615088565b602080601f83116001811461515757600084156151215750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556150ce565b600085815260208120601f198616915b8281101561518657888601518255948401946001909101908401615167565b50858210156151c257878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000826151e1576151e1614f82565b500490565b600082198211156151f9576151f9614e42565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff83166020820152606060408201526000615233606083018461465b565b9594505050505056fea2646970667358221220c16f5391a2335fd2bbdee61b8cea2ac3d34fb4b8ac0576fc548b330fb23fe12264736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061032b5760003560e01c80638da5cb5b116101b2578063c89e42df116100f9578063dbc16976116100a2578063eaeb077b1161007c578063eaeb077b14610811578063f2fde38b14610824578063f755276114610837578063fe16564f1461084657600080fd5b8063dbc16976146107b9578063e7a7ed02146107c1578063e8bf92ed146107f157600080fd5b8063d0ae98dd116100d3578063d0ae98dd14610766578063d8d1091b14610779578063d8f54db01461078c57600080fd5b8063c89e42df14610707578063cfa8ed471461071a578063d02103ca1461074657600080fd5b8063adc879e91161015b578063b6b0b09711610135578063b6b0b097146106bc578063c0cad302146106e1578063c3fd0f9c146106f457600080fd5b8063adc879e91461067e578063b02286c014610692578063b4d63f581461069c57600080fd5b80639b7967601161018c5780639b79676014610641578063a3c573eb14610654578063ab9fc5ef1461067457600080fd5b80638da5cb5b1461060857806396dc3d391461062657806399f5634e1461063957600080fd5b80635437988d116102765780637152facf1161021f5780637fcb3653116101f95780637fcb3653146105ce57806381df7d3f146105e25780638c4a0af7146105f557600080fd5b80637152facf146105a0578063748608de146105b357806379847057146105c657600080fd5b80636b8616ce116102505780636b8616ce146105655780636ff512cc14610585578063715018a61461059857600080fd5b80635437988d1461049e57806355b925e6146104b1578063574f649e146104c457600080fd5b806327eb6c0f116102d857806345605267116102b257806345605267146104405780635392c5e014610468578063542028d51461049657600080fd5b806327eb6c0f146103c85780633c1582671461040d578063423fa8561461042057600080fd5b80631a26da14116103095780631a26da14146103985780631c1083e2146103ad5780632072f6c5146103c057600080fd5b8063107bf28c1461033057806315064c961461034e57806319d8ac611461036b575b600080fd5b610338610859565b6040516103459190614687565b60405180910390f35b60655461035b9060ff1681565b6040519015158152602001610345565b60685461037f9067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610345565b6103ab6103a63660046146b7565b6108e7565b005b6103ab6103bb36600461470e565b61090c565b6103ab610a18565b6070546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610345565b6103ab61041b36600461486b565b610ac9565b60685461037f9068010000000000000000900467ffffffffffffffff1681565b60685461037f90700100000000000000000000000000000000900467ffffffffffffffff1681565b610488610476366004614982565b606b6020526000908152604090205481565b604051908152602001610345565b61033861145a565b6103ab6104ac36600461470e565b611467565b6103ab6104bf3660046149b4565b6114b6565b6104886104d2366004614a37565b835160209485012060408051808701979097528681019190915260608087019490945260c09290921b7fffffffffffffffff00000000000000000000000000000000000000000000000016608086015290911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888401528051808403607c018152609c9093019052815191012090565b610488610573366004614982565b60666020526000908152604090205481565b6103ab61059336600461470e565b611a7f565b6103ab611b99565b6103386105ae366004614aad565b611bab565b6103ab6105c13660046149b4565b611de1565b61048861204a565b60695461037f9067ffffffffffffffff1681565b6103ab6105f0366004614b08565b6120c4565b6103ab610603366004614c02565b61241d565b60335473ffffffffffffffffffffffffffffffffffffffff166103e8565b6103ab610634366004614982565b612537565b61048861257a565b6103ab61064f366004614982565b6126ab565b6071546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b61037f62093a8081565b606e5461037f9067ffffffffffffffff1681565b610488620493e081565b6104886106aa366004614982565b60676020526000908152604090205481565b6065546103e890610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6103ab6106ef366004614c1f565b6126fa565b6103ab6107023660046149b4565b612712565b6103ab610715366004614c1f565b612d5c565b6069546103e89068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b606a546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b610488610774366004614aad565b612e31565b6103ab610787366004614c5c565b6130dd565b60695461035b907c0100000000000000000000000000000000000000000000000000000000900460ff1681565b6103ab613782565b60685461037f907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1681565b606c546103e89073ffffffffffffffffffffffffffffffffffffffff1681565b6103ab61081f366004614d4f565b613911565b6103ab61083236600461470e565b613e12565b61048867016345785d8a000081565b6103ab610854366004614d94565b613eaf565b606f805461086690614dc0565b80601f016020809104026020016040519081016040528092919081815260200182805461089290614dc0565b80156108df5780601f106108b4576101008083540402835291602001916108df565b820191906000526020600020905b8154815290600101906020018083116108c257829003601f168201915b505050505081565b6108ef613ed2565b67ffffffffffffffff909116600090815260676020526040902055565b60705473ffffffffffffffffffffffffffffffffffffffff16331461099e5760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c00000060648201526084015b60405180910390fd5b607080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f373a9d1d60f01a33ff86d540991f09f5c5d7482656794de80be077c5eb9693d9906020015b60405180910390a150565b60655460ff1615610ab75760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b610abf613ed2565b610ac7613f39565b565b60655460ff1615610b685760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610c015760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610995565b805180610c9c5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a204174206c65617374206d7573742073657175656e636520312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205483851694929370010000000000000000000000000000000090930490921691905b8581101561124b576000878281518110610d0257610d02614e13565b602002602001015190506000816060015167ffffffffffffffff161115610f1b5783610d2d81614e71565b945050600081600001518051906020012082602001518360600151604051602001610d9093929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051601f19818403018152918152815160209283012067ffffffffffffffff8816600090815260669093529120549091508114610e5d5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732064617461206d757374206d617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b816060015167ffffffffffffffff16826040015167ffffffffffffffff161015610f155760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610995565b506110b6565b60208101511580610fca5750606a5460208201516040517f257b363200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163257b363291610f849160040190815260200190565b6020604051808303816000875af1158015610fa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc79190614e98565b15155b61103c5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610995565b805151620493e0116110b65760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a205472616e73616374696f6e73206279746573206f766572666c6f77006064820152608401610995565b8567ffffffffffffffff16816040015167ffffffffffffffff16101580156110ec575042816040015167ffffffffffffffff1611155b6111845760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e60648201527f6765000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b805180516020918201208183015160408085015181519485018890529084019290925260608084019190915260c09190911b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209250848061122d90614e71565b9550508060400151955050808061124390614eb1565b915050610ce6565b5060685467ffffffffffffffff7801000000000000000000000000000000000000000000000000909104811690831611156112ee5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365426174636860448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610995565b60685460009061131c90700100000000000000000000000000000000900467ffffffffffffffff1684614ee9565b6113309067ffffffffffffffff1687614f12565b6068805467ffffffffffffffff868116700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff8983166801000000000000000081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909516938c16939093179390931792909216919091179091556000908152606760205260409020839055905061140d33306113e78467016345785d8a0000614f29565b606554610100900473ffffffffffffffffffffffffffffffffffffffff16929190613fc3565b6068546040516801000000000000000090910467ffffffffffffffff16907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b606d805461086690614dc0565b61146f613ed2565b606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60655460ff16156115555760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b60695467ffffffffffffffff90811690881611156116015760405162461bcd60e51b815260206004820152605b60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e206c617374566572696669656442617463680000000000608482015260a401610995565b60695467ffffffffffffffff908116908716116116ac5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e206c617374566572696669656442617463680000000000000000000000608482015260a401610995565b67ffffffffffffffff87166000908152606b602052604090205461175e5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e60648201527f6f74206578697374000000000000000000000000000000000000000000000000608482015260a401610995565b600061176c88888888611bab565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516117a19190614f66565b602060405180830381855afa1580156117be573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906117e19190614e98565b6117eb9190614fb1565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d916118559189918991899190600401614fc5565b602060405180830381865afa158015611872573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611896919061503f565b6119085760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a20494e56414c49445f50524f4f4600000000000000000000000000000000006064820152608401610995565b6069546119669033906119259067ffffffffffffffff168b614ee9565b67ffffffffffffffff1661193761257a565b6119419190614f29565b606554610100900473ffffffffffffffffffffffffffffffffffffffff169190614081565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8a169081179091556000908152606b602052604090819020879055606a5490517f33d6247d0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff909116906333d6247d90602401600060405180830381600087803b158015611a1b57600080fd5b505af1158015611a2f573d6000803e3d6000fd5b505060405188815233925067ffffffffffffffff8b1691507f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f59669060200160405180910390a3505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314611b185760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610995565b606980547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610a0d565b611ba1613ed2565b610ac760006140dc565b67ffffffffffffffff808516600081815260676020526040808220549387168252902054606092911580611bde57508115155b611c765760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610995565b80611d0f5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f742060648201527f6578697374000000000000000000000000000000000000000000000000000000608482015260a401610995565b67ffffffffffffffff87166000908152606b602090815260409182902054606e5492517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16928101929092526034820152605481018490527fffffffffffffffff00000000000000000000000000000000000000000000000060c08a811b8216607484015292831b8116607c8301526084820187905260a4820184905260c482018890529188901b90911660e482015260ec0160405160208183030381529060405292505050949350505050565b611de9613ed2565b60695467ffffffffffffffff9081169088161115611e955760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a205f6c61737456657269666965644261746368206d757374206265206c657360648201527f73206f7220657175616c00000000000000000000000000000000000000000000608482015260a401610995565b60695467ffffffffffffffff90811690871611611f405760405162461bcd60e51b815260206004820152605860248201527f50726f6f664f66456666696369656e63793a3a7665726966794261746368657360448201527f3a206e657756657269666965644261746368206d75737420626520626967676560648201527f72207468616e206c617374566572696669656442617463680000000000000000608482015260a401610995565b67ffffffffffffffff80881660009081526067602052604080822054928916825290205481611fd75760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6f6c64416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610995565b806119665760405162461bcd60e51b815260206004820152603e60248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e6577416363496e7075744861736820646f6573206e6f7420657869737400006064820152608401610995565b60685460009067ffffffffffffffff700100000000000000000000000000000000820481169161209991780100000000000000000000000000000000000000000000000090910416600161505c565b6120a39190614ee9565b6120bf9067ffffffffffffffff16670de0b6b3a7640000614f29565b905090565b600054610100900460ff16158080156120e45750600054600160ff909116105b806120fe5750303b1580156120fe575060005460ff166001145b6121705760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610995565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156121ce57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8f811691909117909255606580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008f851602179055606c80549091168c831617905560008052606b6020527fc8cc8bda7ad4886bea3ebbdafa02e79d37c39bf4011696b26a31a0802fd9458b8a9055606980547fffffff000000000000000000000000000000000000000000ffffffffffffffff1668010000000000000000928b16929092027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16919091177c010000000000000000000000000000000000000000000000000000000089151502179055606d61230d87826150d6565b50606e80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716179055606f61234e85826150d6565b506071805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560708054928516929091169190911790556123ac614153565b801561240f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146124b65760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610995565b606980548215157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a0d90831515815260200190565b61253f613ed2565b606980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6065546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829161010090910473ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156125f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126159190614e98565b60695460685491925060009167ffffffffffffffff9182169168010000000000000000820481169161267a9170010000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416614ee9565b612684919061505c565b61268e9190614ee9565b67ffffffffffffffff1690506126a481836151d2565b9250505090565b6126b3613ed2565b6068805467ffffffffffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b612702613ed2565b606f61270e82826150d6565b5050565b60655460ff16156127b15760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b8567ffffffffffffffff168767ffffffffffffffff16106128605760405162461bcd60e51b815260206004820152605d60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f7420626520626967676572207468616e20696e69744e756d4261746368000000608482015260a401610995565b60695467ffffffffffffffff90811690871611156129325760405162461bcd60e51b815260206004820152606960248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e65774261746368206d757360648201527f74206265206c657373206f7220657175616c207468616e206c6173745665726960848201527f666965644261746368000000000000000000000000000000000000000000000060a482015260c401610995565b67ffffffffffffffff87166000908152606b60205260409020546129e45760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20696e69744e756d4261746368207374617460648201527f6520726f6f7420646f6573206e6f742065786973740000000000000000000000608482015260a401610995565b67ffffffffffffffff86166000908152606b6020526040902054612a965760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2066696e616c4e657742617463682073746160648201527f746520726f6f7420646f6573206e6f7420657869737400000000000000000000608482015260a401610995565b6000612aa488888888611bab565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051612ad99190614f66565b602060405180830381855afa158015612af6573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612b199190614e98565b612b239190614fb1565b606c546040805160208101825283815290517f43753b4d00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff909116916343753b4d91612b8d9189918991899190600401614fc5565b602060405180830381865afa158015612baa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bce919061503f565b612c405760405162461bcd60e51b815260206004820152603c60248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a20494e56414c49445f50524f4f46000000006064820152608401610995565b67ffffffffffffffff88166000908152606b6020526040902054869003612cf55760405162461bcd60e51b815260206004820152606060248201527f50726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657260448201527f6d696e697374696353746174653a2073746f72656420726f6f74206d7573742060648201527f626520646966666572656e74207468616e206e657720737461746520726f6f74608482015260a401610995565b67ffffffffffffffff88166000908152606b60209081526040918290205482519081529081018890527f10b370e2afd2be06fe3170fec9cb3bbd87233f3deb63d488c0dde59813afdabe910160405180910390a1612d51613f39565b505050505050505050565b60695468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314612df55760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610995565b606d612e0182826150d6565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a0d9190614687565b60695460009067ffffffffffffffff868116911614612ede5760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f5f6c6173745665726966696564426174636820646f6573206e6f74206d61746360648201527f6800000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b8467ffffffffffffffff168467ffffffffffffffff1611612f8d5760405162461bcd60e51b815260206004820152605660248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f6e657756657269666965644261746368206d757374206265206269676765722060648201527f7468616e206c6173745665726966696564426174636800000000000000000000608482015260a401610995565b60685467ffffffffffffffff68010000000000000000909104811690851611156130455760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a76657269667942617463683a2060448201527f626174636820646f6573206e6f742068617665206265656e2073657175656e6360648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b600061305386868686611bab565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516130889190614f66565b602060405180830381855afa1580156130a5573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906130c89190614e98565b6130d29190614fb1565b979650505050505050565b60655460ff161561317c5760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff16151560011461323f5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610995565b8051806132da5760405162461bcd60e51b815260206004820152604260248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a204d75737420666f726365206174206c6561737420312062617460648201527f6368000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b60685467ffffffffffffffff780100000000000000000000000000000000000000000000000082048116916133259184917001000000000000000000000000000000009004166151e6565b11156133995760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610995565b60685467ffffffffffffffff680100000000000000008204811660008181526067602052604081205491937001000000000000000000000000000000009004909216915b848110156136b25760008682815181106133f9576133f9614e13565b60200260200101519050838061340e90614e71565b825180516020918201208185015160408087015181519485019390935283015260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608201529095506000915060680160408051601f19818403018152918152815160209283012067ffffffffffffffff881660009081526066909352912054909150811461352f5760405162461bcd60e51b815260206004820152604760248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f426174636865733a20466f7263656420626174636865732064617461206d757360648201527f74206d6174636800000000000000000000000000000000000000000000000000608482015260a401610995565b61353a600188614f12565b83036135f8574262093a808360400151613554919061505c565b67ffffffffffffffff1611156135f85760405162461bcd60e51b815260206004820152604c60248201527f50726f6f664f66456666696369656e63793a3a73657175656e6365466f72636560448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201527f6d656f757420706572696f640000000000000000000000000000000000000000608482015260a401610995565b8151805160209182012081840151604080519384018890528301919091526060808301919091524260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016608083015233901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088820152609c01604051602081830303815290604052805190602001209350858061369a90614e71565b965050505080806136aa90614eb1565b9150506133dd565b50606880544267ffffffffffffffff9081167fffffffffffffffffffffffffffffffff000000000000000000000000000000009092169190911768010000000000000000868316818102929092177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000087851602178455600091825260676020526040808320869055935493519304909116917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166137fa5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610995565b60705473ffffffffffffffffffffffffffffffffffffffff1633146138875760405162461bcd60e51b815260206004820152603d60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7953656375726974794360448201527f6f756e63696c3a206f6e6c7920736563757269747920636f756e63696c0000006064820152608401610995565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156138f157600080fd5b505af1158015613905573d6000803e3d6000fd5b50505050610ac76141d9565b60655460ff16156139b05760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b6069547c0100000000000000000000000000000000000000000000000000000000900460ff161515600114613a735760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160448201527f6c6c6f7765643a206f6e6c7920696620666f726365206261746368206973206160648201527f7661696c61626c65000000000000000000000000000000000000000000000000608482015260a401610995565b6000613a7d61204a565b905081811115613af55760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201527f6f7420656e6f756768206d6174696300000000000000000000000000000000006064820152608401610995565b620493e0835110613b6e5760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610995565b606554613b9890610100900473ffffffffffffffffffffffffffffffffffffffff16333084613fc3565b606a54604080517f3ed691ef000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691633ed691ef9160048083019260209291908290030181865afa158015613c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2c9190614e98565b60688054919250780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16906018613c6683614e71565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505083805190602001208142604051602001613cdf93929190928352602083019190915260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016604082015260480190565b60408051808303601f1901815291815281516020928301206068547801000000000000000000000000000000000000000000000000900467ffffffffffffffff1660009081526066909352912055323303613daf57606854604080518381523360208201526060918101829052600091810191909152780100000000000000000000000000000000000000000000000090910467ffffffffffffffff16907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613e0c565b606860189054906101000a900467ffffffffffffffff1667ffffffffffffffff167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613e03939291906151fe565b60405180910390a25b50505050565b613e1a613ed2565b73ffffffffffffffffffffffffffffffffffffffff8116613ea35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610995565b613eac816140dc565b50565b613eb7613ed2565b67ffffffffffffffff166000908152606b6020526040902055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ac75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610995565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613fa357600080fd5b505af1158015613fb7573d6000803e3d6000fd5b50505050610ac76142a4565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052613e0c9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152614399565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526140d79084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161401d565b505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166141d05760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610995565b610ac7336140dc565b60655460ff166142515760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401610995565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60655460ff16156143435760405162461bcd60e51b815260206004820152604260248201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960448201527f53746174653a206f6e6c79206966206e6f7420656d657267656e63792073746160648201527f7465000000000000000000000000000000000000000000000000000000000000608482015260a401610995565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60006143fb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661448b9092919063ffffffff16565b8051909150156140d75780806020019051810190614419919061503f565b6140d75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610995565b606061449a84846000856144a4565b90505b9392505050565b60608247101561451c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610995565b73ffffffffffffffffffffffffffffffffffffffff85163b6145805760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610995565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516145a99190614f66565b60006040518083038185875af1925050503d80600081146145e6576040519150601f19603f3d011682016040523d82523d6000602084013e6145eb565b606091505b50915091506130d28282866060831561460557508161449d565b8251156146155782518084602001fd5b8160405162461bcd60e51b81526004016109959190614687565b60005b8381101561464a578181015183820152602001614632565b83811115613e0c5750506000910152565b6000815180845261467381602086016020860161462f565b601f01601f19169290920160200192915050565b60208152600061449d602083018461465b565b803567ffffffffffffffff811681146146b257600080fd5b919050565b600080604083850312156146ca57600080fd5b6146d38361469a565b946020939093013593505050565b73ffffffffffffffffffffffffffffffffffffffff81168114613eac57600080fd5b80356146b2816146e1565b60006020828403121561472057600080fd5b813561449d816146e1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171561477d5761477d61472b565b60405290565b6040516060810167ffffffffffffffff8111828210171561477d5761477d61472b565b604051601f8201601f1916810167ffffffffffffffff811182821017156147cf576147cf61472b565b604052919050565b600067ffffffffffffffff8211156147f1576147f161472b565b5060051b60200190565b600082601f83011261480c57600080fd5b813567ffffffffffffffff8111156148265761482661472b565b6148396020601f19601f840116016147a6565b81815284602083860101111561484e57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561487e57600080fd5b823567ffffffffffffffff8082111561489657600080fd5b818501915085601f8301126148aa57600080fd5b81356148bd6148b8826147d7565b6147a6565b81815260059190911b830184019084810190888311156148dc57600080fd5b8585015b83811015614975578035858111156148f85760008081fd5b86016080818c03601f19018113156149105760008081fd5b61491861475a565b898301358881111561492a5760008081fd5b6149388e8c838701016147fb565b8252506040808401358b830152606061495281860161469a565b8284015261496184860161469a565b9083015250855250509186019186016148e0565b5098975050505050505050565b60006020828403121561499457600080fd5b61449d8261469a565b80604081018310156149ae57600080fd5b92915050565b6000806000806000806000610180888a0312156149d057600080fd5b6149d98861469a565b96506149e76020890161469a565b95506040880135945060608801359350614a048960808a0161499d565b9250610140880189811115614a1857600080fd5b60c089019250614a288a8261499d565b91505092959891949750929550565b600080600080600060a08688031215614a4f57600080fd5b85359450602086013567ffffffffffffffff811115614a6d57600080fd5b614a79888289016147fb565b94505060408601359250614a8f6060870161469a565b91506080860135614a9f816146e1565b809150509295509295909350565b60008060008060808587031215614ac357600080fd5b614acc8561469a565b9350614ada6020860161469a565b93969395505050506040820135916060013590565b8015158114613eac57600080fd5b80356146b281614aef565b60008060008060008060008060008060006101608c8e031215614b2a57600080fd5b614b338c614703565b9a50614b4160208d01614703565b9950614b4f60408d01614703565b985060608c01359750614b6460808d01614703565b9650614b7260a08d01614afd565b955067ffffffffffffffff8060c08e01351115614b8e57600080fd5b614b9e8e60c08f01358f016147fb565b9550614bac60e08e0161469a565b9450806101008e01351115614bc057600080fd5b50614bd28d6101008e01358e016147fb565b9250614be16101208d01614703565b9150614bf06101408d01614703565b90509295989b509295989b9093969950565b600060208284031215614c1457600080fd5b813561449d81614aef565b600060208284031215614c3157600080fd5b813567ffffffffffffffff811115614c4857600080fd5b614c54848285016147fb565b949350505050565b60006020808385031215614c6f57600080fd5b823567ffffffffffffffff80821115614c8757600080fd5b818501915085601f830112614c9b57600080fd5b8135614ca96148b8826147d7565b81815260059190911b83018401908481019088831115614cc857600080fd5b8585015b8381101561497557803585811115614ce45760008081fd5b86016060818c03601f1901811315614cfc5760008081fd5b614d04614783565b8983013588811115614d165760008081fd5b614d248e8c838701016147fb565b8252506040808401358b830152614d3c83850161469a565b9082015285525050918601918601614ccc565b60008060408385031215614d6257600080fd5b823567ffffffffffffffff811115614d7957600080fd5b614d85858286016147fb565b95602094909401359450505050565b60008060408385031215614da757600080fd5b82359150614db76020840161469a565b90509250929050565b600181811c90821680614dd457607f821691505b602082108103614e0d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103614e8e57614e8e614e42565b6001019392505050565b600060208284031215614eaa57600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614ee257614ee2614e42565b5060010190565b600067ffffffffffffffff83811690831681811015614f0a57614f0a614e42565b039392505050565b600082821015614f2457614f24614e42565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f6157614f61614e42565b500290565b60008251614f7881846020870161462f565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614fc057614fc0614f82565b500690565b61012081016040808784376000838201818152879190815b6002811015614ffd57848483379084018281529284019290600101614fdd565b5050828760c0870137610100850181815286935091505b6001811015615033578251825260209283019290910190600101615014565b50505095945050505050565b60006020828403121561505157600080fd5b815161449d81614aef565b600067ffffffffffffffff80831681851680830382111561507f5761507f614e42565b01949350505050565b601f8211156140d757600081815260208120601f850160051c810160208610156150af5750805b601f850160051c820191505b818110156150ce578281556001016150bb565b505050505050565b815167ffffffffffffffff8111156150f0576150f061472b565b615104816150fe8454614dc0565b84615088565b602080601f83116001811461515757600084156151215750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556150ce565b600085815260208120601f198616915b8281101561518657888601518255948401946001909101908401615167565b50858210156151c257878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000826151e1576151e1614f82565b500490565b600082198211156151f9576151f9614e42565b500190565b83815273ffffffffffffffffffffffffffffffffffffffff83166020820152606060408201526000615233606083018461465b565b9594505050505056fea2646970667358221220c16f5391a2335fd2bbdee61b8cea2ac3d34fb4b8ac0576fc548b330fb23fe12264736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50615e7d80620000216000396000f3fe608060405234801561001057600080fd5b50600436106104125760003560e01c806396dc3d3911610220578063cfa8ed4711610130578063e7a7ed02116100b8578063f14916d611610087578063f14916d6146109e2578063f2fde38b146109f5578063f851a44014610a08578063f8b823e414610a1b578063fe16564f14610a2457600080fd5b8063e7a7ed021461098f578063e8bf92ed146109a9578063eaeb077b146109bc578063edc41121146109cf57600080fd5b8063d939b315116100ff578063d939b3151461093e578063dbc1697614610958578063e0d1744114610960578063e11f3f1814610973578063e217cfd61461098657600080fd5b8063cfa8ed47146108ea578063d02103ca14610904578063d8d1091b14610917578063d8f54db01461092a57600080fd5b8063ab9fc5ef116101b3578063b6b0b09711610182578063b6b0b0971461088f578063c0cad302146108a9578063c0ed84e0146108bc578063c89e42df146108c4578063cf136306146108d757600080fd5b8063ab9fc5ef146107e3578063adc879e9146107ed578063afd23cbe14610807578063b4d63f581461082f57600080fd5b80639eb831b9116101ef5780639eb831b9146107a85780639f0d039d146107b0578063a3c573eb146107b8578063aa58bad6146107cb57600080fd5b806396dc3d391461076757806399f5634e1461077a5780639b796760146107825780639c9f3dfe1461079557600080fd5b80634a910e6a11610326578063715018a6116102ae578063837a47381161027d578063837a4738146106b1578063841b24d71461071f5780638b48931e146107395780638c4a0af7146107435780638da5cb5b1461075657600080fd5b8063715018a6146106705780637215541a1461067857806375c508b31461068b5780637fcb36531461069e57600080fd5b8063574f649e116102f5578063574f649e1461060457806360943d6a146106175780636b8616ce1461062a5780636ff512cc1461064a578063704b6c021461065d57600080fd5b80634a910e6a146105b65780635392c5e0146105c9578063542028d5146105e95780635437988d146105f157600080fd5b80632d0889d3116103a9578063423fa85611610378578063423fa85614610542578063456052671461055c578063458c0477146105765780634834a343146105895780634a1a89a71461059c57600080fd5b80632d0889d314610500578063383b3be814610509578063394218e91461051c5780633c1582671461052f57600080fd5b80631816b7e5116103e55780631816b7e51461048457806319d8ac6114610497578063220d7899146104c257806329878983146104d557600080fd5b80630eaa86ea14610417578063107bf28c1461043d57806310a01a721461045257806315064c9614610467575b600080fd5b61042a610425366004614bce565b610a37565b6040519081526020015b60405180910390f35b610445610c18565b6040516104349190614c7b565b610465610460366004614cbd565b610ca6565b005b6065546104749060ff1681565b6040519015158152602001610434565b610465610492366004614d4a565b610ef0565b6068546104aa906001600160401b031681565b6040516001600160401b039091168152602001610434565b6104456104d0366004614d6e565b61101b565b606a546104e8906001600160a01b031681565b6040516001600160a01b039091168152602001610434565b61042a61ea6081565b610474610517366004614dbb565b6111d9565b61046561052a366004614dbb565b611220565b61046561053d366004614ef8565b611373565b6068546104aa90600160401b90046001600160401b031681565b6068546104aa90600160801b90046001600160401b031681565b6072546104aa906001600160401b031681565b610465610597366004614cbd565b611b3e565b6072546104aa90600160401b90046001600160401b031681565b6104656105c4366004614dbb565b611e72565b61042a6105d7366004614dbb565b606d6020526000908152604090205481565b61044561211b565b6104656105ff366004615023565b612128565b61042a610612366004615040565b612152565b6104656106253660046150b5565b612195565b61042a610638366004614dbb565b60666020526000908152604090205481565b610465610658366004615023565b612505565b61046561066b366004615023565b612589565b610465612601565b610465610686366004614dbb565b612615565b61046561069936600461518c565b6128a1565b6069546104aa906001600160401b031681565b6106f46106bf36600461522a565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610434565b6072546104aa90600160c01b90046001600160401b031681565b6104aa62093a8081565b610465610751366004615251565b612930565b6033546001600160a01b03166104e8565b610465610775366004614dbb565b6129a7565b61042a6129d2565b610465610790366004614dbb565b612ab5565b6104656107a3366004614dbb565b612aea565b61042a600c81565b60745461042a565b6070546104e8906001600160a01b031681565b6065546104aa9061010090046001600160401b031681565b6104aa6206978081565b606c546104aa90600160a81b90046001600160401b031681565b60655461081c90600160481b900461ffff1681565b60405161ffff9091168152602001610434565b61086a61083d366004614dbb565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610434565b6065546104e890600160581b90046001600160a01b031681565b6104656108b736600461526e565b612c3e565b6104aa612c56565b6104656108d236600461526e565b612ca3565b6104656108e5366004614dbb565b612d09565b6069546104e890600160401b90046001600160a01b031681565b606c546104e8906001600160a01b031681565b6104656109253660046152a2565b612d8a565b606c5461047490600160a01b900460ff1681565b6072546104aa90600160801b90046001600160401b031681565b610465613276565b61046561096e366004615394565b613332565b61046561098136600461518c565b6133a4565b6104aa6103e881565b6068546104aa90600160c01b90046001600160401b031681565b606b546104e8906001600160a01b031681565b6104656109ca3660046153e1565b6134e9565b6104656109dd366004614cbd565b61381e565b6104656109f0366004615023565b61393e565b610465610a03366004615023565b6139b6565b6073546104e8906001600160a01b031681565b61042a60745481565b610465610a32366004615425565b613a2c565b6000806000610a44612c56565b90506001600160401b03881615610ae1576072546001600160401b039081169089161115610a8d5760405162461bcd60e51b8152600401610a8490615451565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610adb5760405162461bcd60e51b8152600401610a84906154c2565b50610b4b565b6001600160401b0387166000908152606d6020526040902054915081610b195760405162461bcd60e51b8152600401610a8490615527565b806001600160401b0316876001600160401b03161115610b4b5760405162461bcd60e51b8152600401610a8490615583565b806001600160401b0316866001600160401b031611610b7c5760405162461bcd60e51b8152600401610a84906155ff565b6000610b8b888888868961101b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051610bc09190615670565b602060405180830381855afa158015610bdd573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c00919061568c565b610c0a91906156bb565b9a9950505050505050505050565b606f8054610c25906156cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610c51906156cf565b8015610c9e5780601f10610c7357610100808354040283529160200191610c9e565b820191906000526020600020905b815481529060010190602001808311610c8157829003601f168201915b505050505081565b610cae613a4e565b600080610cb9612c56565b90506001600160401b038a1615610d4d576072546001600160401b03908116908b161115610cf95760405162461bcd60e51b8152600401610a8490615451565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610d475760405162461bcd60e51b8152600401610a84906154c2565b50610db7565b6001600160401b0389166000908152606d6020526040902054915081610d855760405162461bcd60e51b8152600401610a8490615527565b806001600160401b0316896001600160401b03161115610db75760405162461bcd60e51b8152600401610a8490615583565b806001600160401b0316886001600160401b031611610de85760405162461bcd60e51b8152600401610a84906155ff565b6000610df78a8a8a868b61101b565b6069805467ffffffffffffffff19166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610e4557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610e8b57600080fd5b505af1158015610e9f573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610f1a5760405162461bcd60e51b8152600401610a8490615709565b6103e88161ffff16118015610f3457506104008161ffff16105b610fbe5760405162461bcd60e51b815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a7365744d756c7469706c69657260448201527f42617463684665653a206e65774d756c7469706c69657242617463684665652060648201526e696e636f72726563742072616e676560881b608482015260a401610a84565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b0380861660008181526067602052604080822054938816825290205460609291158061104d57508115155b6110cd5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f7420606482015264195e1a5cdd60da1b608482015260a401610a84565b8061114e5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f7420606482015264195e1a5cdd60da1b608482015260a401610a84565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b038281166000908152607160205260408120549092429261120f92600160801b90920481169116615767565b6001600160401b0316111592915050565b6073546001600160a01b0316331461124a5760405162461bcd60e51b8152600401610a8490615709565b62093a806001600160401b03821611156112765760405162461bcd60e51b8152600401610a8490615792565b60655460ff1661131d576072546001600160401b03600160c01b90910481169082161061131d5760405162461bcd60e51b815260206004820152604960248201527f50726f6f664f66456666696369656e63793a3a7365745472757374656441676760448201527f72656761746f7254696d656f75743a206e65772074696d656f7574206d757374606482015268103132903637bbb2b960b91b608482015260a401610a84565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001611010565b60655460ff16156113965760405162461bcd60e51b8152600401610a8490615802565b606954600160401b90046001600160a01b0316331461141d5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610a84565b80518061148b5760405162461bcd60e51b81526020600482015260426024820152600080516020615dc883398151915260448201527f65733a204174206c65617374206d7573742073657175656e63652031206261746064820152610c6d60f31b608482015260a401610a84565b6103e881106114fe5760405162461bcd60e51b81526020600482015260456024820152600080516020615dc883398151915260448201527f65733a2043616e6e6f742073657175656e63652074686174206d616e79206261606482015264746368657360d81b608482015260a401610a84565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561196c5760008782815181106115515761155161586a565b60200260200101519050600081606001516001600160401b031611156116f1578361157b81615880565b9450506000816000015180519060200120826020015183606001516040516020016115a8939291906158a6565b60408051601f1981840301815291815281516020928301206001600160401b0388166000908152606690935291205490915081146116475760405162461bcd60e51b81526020600482015260426024820152600080516020615dc883398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a401610a84565b81606001516001600160401b031682604001516001600160401b031610156116eb5760405162461bcd60e51b815260206004820152605d6024820152600080516020615dc883398151915260448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610a84565b50611866565b6020810151158061177a5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916117349160040190815260200190565b6020604051808303816000875af1158015611753573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611777919061568c565b15155b6117da5760405162461bcd60e51b815260206004820152603f6024820152600080516020615dc883398151915260448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610a84565b80515161ea60116118665760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a401610a84565b856001600160401b031681604001516001600160401b03161015801561189957504281604001516001600160401b031611155b6119045760405162461bcd60e51b81526020600482015260426024820152600080516020615dc883398151915260448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e606482015261676560f01b608482015260a401610a84565b8051805160209182012081830151604080850151905161192b9488949392913391016158c9565b604051602081830303815290604052805190602001209250848061194e90615880565b955050806040015195505080806119649061590d565b915050611535565b506068546001600160401b03600160c01b909104811690831611156119e75760405162461bcd60e51b815260206004820152603a6024820152600080516020615dc883398151915260448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610a84565b606854600090611a0790600160801b90046001600160401b031684615926565b611a1a906001600160401b03168761594e565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611aef90339030908490611ad49190615965565b606554600160581b90046001600160a01b0316929190613aa8565b611af7613b13565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b615760405162461bcd60e51b8152600401610a8490615802565b6072546001600160401b038781166000908152606760205260409020600101544292611b9892600160c01b90910481169116615767565b6001600160401b03161115611c145760405162461bcd60e51b81526020600482015260486024820152600080516020615e2883398151915260448201527f3a20747275737465642061676772656761746f722074696d656f7574206e6f7460648201526708195e1c1a5c995960c21b608482015260a401610a84565b6103e8611c218888615926565b6001600160401b031610611c955760405162461bcd60e51b81526020600482015260416024820152600080516020615e2883398151915260448201527f3a2063616e6e6f74207665726966792074686174206d616e79206261746368656064820152607360f81b608482015260a401610a84565b611ca58888888888888888613bb3565b611cae86613ea3565b607254600160801b90046001600160401b0316600003611d76576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615611d1357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d5957600080fd5b505af1158015611d6d573d6000803e3d6000fd5b50505050611e27565b611d7e613b13565b607280546001600160401b0316906000611d9783615880565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611e9f57506072546001600160401b03600160401b9091048116908216115b8015611eba57506072546001600160401b0390811690821611155b611f3d5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a636f6e736f6c6964617465506560448201527f6e64696e6753746174653a2070656e64696e6753746174654e756d206d757374606482015267081a5b9d985b1a5960c21b608482015260a401610a84565b606a546001600160a01b03163314611ff057611f58816111d9565b611ff05760405162461bcd60e51b815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a636f6e736f6c6964617465506560448201527f6e64696e6753746174653a2070656e64696e67207374617465206973206e6f7460648201527f20726561647920746f20626520636f6e736f6c69646174656400000000000000608482015260a401610a84565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b1580156120ad57600080fd5b505af11580156120c1573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e846002015460405161210e91815260200190565b60405180910390a3505050565b606e8054610c25906156cf565b612130613a4e565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b60008585805190602001208585856040516020016121749594939291906158c9565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff16158080156121b55750600054600160ff909116105b806121cf5750303b1580156121cf575060005460ff166001145b6122325760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a84565b6000805460ff191660011790558015612255576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a8416179055607080549091169188169190911790556122d26020860186615023565b607380546001600160a01b0319166001600160a01b03929092169190911790556123026060860160408701615023565b606980546001600160a01b0392909216600160401b02600160401b600160e01b031990921691909117905561233d60c0860160a08701615023565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa71135684905561239a60e0860160c08701614dbb565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556123d16040860160208701614dbb565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561240d6080860160608701614dbb565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b1990921691909117905561244960a0860160808701615251565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e61247184826159ca565b50606f61247e83826159ca565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124b4614089565b80156124fa576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b0316331461252f5760405162461bcd60e51b8152600401610a8490615709565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001611010565b6073546001600160a01b031633146125b35760405162461bcd60e51b8152600401610a8490615709565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190602001611010565b612609613a4e565b61261360006140f9565b565b6033546001600160a01b03163314612896576072546000906001600160401b03161561266657506072546001600160401b03908116600090815260716020526040902054600160401b900416612674565b506069546001600160401b03165b80826001600160401b0316116126fc5760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a6163746976617465456d65726760448201527f656e637953746174653a20426174636820616c726561647920766572696669656064820152601960fa1b608482015260a401610a84565b6068546001600160401b03600160401b90910481169083161180159061273e57506001600160401b038083166000908152606760205260409020600101541615155b6127ce5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a6163746976617465456d65726760448201527f656e637953746174653a204261746368206e6f742073657175656e636564206f60648201527472206e6f7420656e64206f662073657175656e636560581b608482015260a401610a84565b6001600160401b0380831660009081526067602052604090206001015442916127fc9162093a809116615767565b6001600160401b031611156128945760405162461bcd60e51b815260206004820152605260248201527f50726f6f664f66456666696369656e63793a3a6163746976617465456d65726760448201527f656e637953746174653a204167677265676174696f6e2068616c742074696d656064820152711bdd5d081a5cc81b9bdd08195e1c1a5c995960721b608482015260a401610a84565b505b61289e61414b565b50565b60655460ff16156128c45760405162461bcd60e51b8152600401610a8490615802565b6128d58989898989898989896141bb565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a16124fa61414b565b6073546001600160a01b0316331461295a5760405162461bcd60e51b8152600401610a8490615709565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061101090831515815260200190565b6129af613a4e565b6069805467ffffffffffffffff19166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612a25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a49919061568c565b90506000612a55612c56565b6068546001600160401b03600160401b8204811691612a8591600160801b8204811691600160c01b900416615926565b612a8f9190615767565b612a999190615926565b6001600160401b03169050612aae8183615a89565b9250505090565b612abd613a4e565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612b145760405162461bcd60e51b8152600401610a8490615709565b62093a806001600160401b0382161115612b405760405162461bcd60e51b8152600401610a8490615792565b60655460ff16612be3576072546001600160401b03600160801b909104811690821610612be35760405162461bcd60e51b8152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a73657450656e64696e67537461908201527f746554696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a401610a84565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001611010565b612c46613a4e565b606f612c5282826159ca565b5050565b6072546000906001600160401b031615612c9357506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612ccd5760405162461bcd60e51b8152600401610a8490615709565b606e612cd982826159ca565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b20816040516110109190614c7b565b6073546001600160a01b03163314612d335760405162461bcd60e51b8152600401610a8490615709565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001611010565b60655460ff1615612dad5760405162461bcd60e51b8152600401610a8490615802565b606c54600160a01b900460ff161515600114612ddb5760405162461bcd60e51b8152600401610a8490615a9d565b805180612e495760405162461bcd60e51b81526020600482015260426024820152600080516020615e0883398151915260448201527f42617463683a204d75737420666f726365206174206c656173742031206261746064820152610c6d60f31b608482015260a401610a84565b6103e88110612ebf5760405162461bcd60e51b81526020600482015260486024820152600080516020615e0883398151915260448201527f426174636865733a2063616e6e6f74207665726966792074686174206d616e79606482015267206261746368657360c01b608482015260a401610a84565b6068546001600160401b03600160c01b8204811691612ee7918491600160801b900416615b0b565b1115612f495760405162461bcd60e51b815260206004820152603a6024820152600080516020615e0883398151915260448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610a84565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b8481101561317f576000868281518110612f9657612f9661586a565b602002602001015190508380612fab90615880565b945050600081600001518051906020012082602001518360400151604051602001612fd8939291906158a6565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461307c5760405162461bcd60e51b81526020600482015260476024820152600080516020615e0883398151915260448201527f426174636865733a20466f7263656420626174636865732064617461206d75736064820152660e840dac2e8c6d60cb1b608482015260a401610a84565b61308760018861594e565b830361312157426206978083604001516130a19190615767565b6001600160401b031611156131215760405162461bcd60e51b815260206004820152604c6024820152600080516020615e0883398151915260448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201526b1b595bdd5d081c195c9a5bd960a21b608482015260a401610a84565b8151805160209182012081840151604051613144938893929142913391016158c9565b604051602081830303815290604052805190602001209350858061316790615880565b965050505080806131779061590d565b915050612f7a565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166132985760405162461bcd60e51b8152600401610a8490615b23565b6073546001600160a01b031633146132c25760405162461bcd60e51b8152600401610a8490615709565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561331257600080fd5b505af1158015613326573d6000803e3d6000fd5b50505050612613614869565b61333a613a4e565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133ce5760405162461bcd60e51b8152600401610a8490615b80565b6133df8989898989898989896141bb565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561342a57607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561347057600080fd5b505af1158015613484573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff161561350c5760405162461bcd60e51b8152600401610a8490615802565b606c54600160a01b900460ff16151560011461353a5760405162461bcd60e51b8152600401610a8490615a9d565b600061354560745490565b9050818111156135af5760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201526e6f7420656e6f756768206d6174696360881b6064820152608401610a84565b61ea608351106136275760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610a84565b60655461364690600160581b90046001600160a01b0316333084613aa8565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015613690573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136b4919061568c565b60688054919250600160c01b9091046001600160401b03169060186136d883615880565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505083805190602001208142604051602001613719939291906158a6565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b0316600090815260669093529120553233036137bd57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613818565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161380f93929190615be7565b60405180910390a25b50505050565b606a546001600160a01b031633146138485760405162461bcd60e51b8152600401610a8490615b80565b6138588888888888888888613bb3565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d6020526040902085905560725416156138a357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156138e957600080fd5b505af11580156138fd573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e60565b6073546001600160a01b031633146139685760405162461bcd60e51b8152600401610a8490615709565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001611010565b6139be613a4e565b6001600160a01b038116613a235760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a84565b61289e816140f9565b613a34613a4e565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b031633146126135760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a84565b6040516001600160a01b03808516602483015283166044820152606481018290526138189085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526148c0565b6072546001600160401b03600160401b820481169116111561261357607254600090613b5090600160401b90046001600160401b03166001615767565b9050613b5b816111d9565b1561289e57607254600090600290613b7d9084906001600160401b0316615926565b613b879190615c1a565b613b919083615767565b9050613b9c816111d9565b15613baa57612c5281611e72565b612c5282611e72565b600080613bbe612c56565b90506001600160401b038a1615613c52576072546001600160401b03908116908b161115613bfe5760405162461bcd60e51b8152600401610a8490615451565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c4c5760405162461bcd60e51b8152600401610a84906154c2565b50613cbc565b6001600160401b0389166000908152606d6020526040902054915081613c8a5760405162461bcd60e51b8152600401610a8490615527565b806001600160401b0316896001600160401b03161115613cbc5760405162461bcd60e51b8152600401610a8490615583565b806001600160401b0316886001600160401b031611613ced5760405162461bcd60e51b8152600401610a84906155ff565b6000613cfc8a8a8a868b61101b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051613d319190615670565b602060405180830381855afa158015613d4e573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613d71919061568c565b613d7b91906156bb565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613dbf918b918b918b9190600401615c40565b602060405180830381865afa158015613ddc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e009190615cba565b613e525760405162461bcd60e51b815260206004820152602f6024820152600080516020615e2883398151915260448201526e1d1024a72b20a624a22fa82927a7a360891b6064820152608401610a84565b613e9533613e60858d615926565b6001600160401b0316613e716129d2565b613e7b9190615965565b606554600160581b90046001600160a01b03169190614997565b505050505050505050505050565b6000613ead612c56565b905081600080613ebd8484615926565b6001600160401b031690505b836001600160401b0316836001600160401b031614613f6f576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613f1991164261594e565b1115613f54576001810154613f3e90600160401b90046001600160401b031686615926565b613f51906001600160401b031684615b0b565b92505b60010154600160401b90046001600160401b03169250613ec9565b6000613f7b838361594e565b905082811015613ff5576000613f91828561594e565b9050600c8111613fa15780613fa4565b600c5b9050613fb1816003615965565b613fbc90600a615dbb565b606554613fd5908390600160481b900461ffff16615dbb565b607454613fe29190615965565b613fec9190615a89565b60745550614081565b6000614001848361594e565b9050600c81116140115780614014565b600c5b90506000614023826003615965565b61402e90600a615dbb565b606554614047908490600160481b900461ffff16615dbb565b6074546140549190615965565b61405e9190615a89565b9050806074546074546140719190615965565b61407b9190615a89565b60745550505b505050505050565b600054610100900460ff166140f45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a84565b612613335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561419b57600080fd5b505af11580156141af573d6000803e3d6000fd5b505050506126136149c7565b60006001600160401b038a1615614349576072546001600160401b03908116908b16111561427f5760405162461bcd60e51b81526020600482015260716024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a2070656e64696e6753746160648201527f74654e756d206d757374206265206c657373206f7220657175616c207468616e608482015270206c61737450656e64696e67537461746560781b60a482015260c401610a84565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b90920416146143435760405162461bcd60e51b81526020600482015260656024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a20696e69744e756d42617460648201527f6368206d757374206d61746368207468652070656e64696e67207374617465206084820152640c4c2e8c6d60db1b60a482015260c401610a84565b506144a2565b506001600160401b0387166000908152606d6020526040902054806143ea5760405162461bcd60e51b815260206004820152605c6024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a20696e69744e756d42617460648201527f636820737461746520726f6f7420646f6573206e6f7420657869737400000000608482015260a401610a84565b6069546001600160401b0390811690891611156144a25760405162461bcd60e51b81526020600482015260766024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a20696e69744e756d42617460648201527f6368206d757374206265206c657373206f7220657175616c207468616e2063756084820152750e4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d60531b60a482015260c401610a84565b6072546001600160401b03908116908a16118015906144d25750896001600160401b0316896001600160401b0316115b80156144f357506072546001600160401b03600160401b9091048116908a16115b6145705760405162461bcd60e51b81526020600482015260546024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a2066696e616c50656e64696064820152731b99d4dd185d19539d5b481a5b98dbdc9c9958dd60621b608482015260a401610a84565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146146355760405162461bcd60e51b815260206004820152606f6024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a2066696e616c4e6577426160648201527f746368206d75737420626520657175616c207468616e2063757272656e744c6160848201526e0e6e8accae4d2ccd2cac884c2e8c6d608b1b60a482015260c401610a84565b6000614644898989858a61101b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516146799190615670565b602060405180830381855afa158015614696573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906146b9919061568c565b6146c391906156bb565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614707918a918a918a9190600401615c40565b602060405180830381865afa158015614724573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147489190615cba565b6147b45760405162461bcd60e51b81526020600482015260436024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a20494e56414c49445f505260648201526227a7a360e91b608482015260a401610a84565b6001600160401b038b16600090815260716020526040902060020154879003613e955760405162461bcd60e51b81526020600482015260676024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a2073746f72656420726f6f60648201527f74206d75737420626520646966666572656e74207468616e206e6577207374616084820152661d19481c9bdbdd60ca1b60a482015260c401610a84565b60655460ff1661488b5760405162461bcd60e51b8152600401610a8490615b23565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614915826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614a229092919063ffffffff16565b80519091501561499257808060200190518101906149339190615cba565b6149925760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a84565b505050565b6040516001600160a01b03831660248201526044810182905261499290849063a9059cbb60e01b90606401613adc565b60655460ff16156149ea5760405162461bcd60e51b8152600401610a8490615802565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614a318484600085614a39565b949350505050565b606082471015614a9a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a84565b600080866001600160a01b03168587604051614ab69190615670565b60006040518083038185875af1925050503d8060008114614af3576040519150601f19603f3d011682016040523d82523d6000602084013e614af8565b606091505b5091509150614b0987838387614b14565b979650505050505050565b60608315614b83578251600003614b7c576001600160a01b0385163b614b7c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a84565b5081614a31565b614a318383815115614b985781518083602001fd5b8060405162461bcd60e51b8152600401610a849190614c7b565b80356001600160401b0381168114614bc957600080fd5b919050565b600080600080600060a08688031215614be657600080fd5b614bef86614bb2565b9450614bfd60208701614bb2565b9350614c0b60408701614bb2565b94979396509394606081013594506080013592915050565b60005b83811015614c3e578181015183820152602001614c26565b838111156138185750506000910152565b60008151808452614c67816020860160208601614c23565b601f01601f19169290920160200192915050565b602081526000614c8e6020830184614c4f565b9392505050565b8060408101831015614ca657600080fd5b92915050565b8060808101831015614ca657600080fd5b6000806000806000806000806101a0898b031215614cda57600080fd5b614ce389614bb2565b9750614cf160208a01614bb2565b9650614cff60408a01614bb2565b95506060890135945060808901359350614d1c8a60a08b01614c95565b9250614d2b8a60e08b01614cac565b9150614d3b8a6101608b01614c95565b90509295985092959890939650565b600060208284031215614d5c57600080fd5b813561ffff81168114614c8e57600080fd5b600080600080600060a08688031215614d8657600080fd5b614d8f86614bb2565b9450614d9d60208701614bb2565b94979496505050506040830135926060810135926080909101359150565b600060208284031215614dcd57600080fd5b614c8e82614bb2565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614e0e57614e0e614dd6565b60405290565b604051606081016001600160401b0381118282101715614e0e57614e0e614dd6565b604051601f8201601f191681016001600160401b0381118282101715614e5e57614e5e614dd6565b604052919050565b60006001600160401b03821115614e7f57614e7f614dd6565b5060051b60200190565b600082601f830112614e9a57600080fd5b81356001600160401b03811115614eb357614eb3614dd6565b614ec6601f8201601f1916602001614e36565b818152846020838601011115614edb57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614f0b57600080fd5b82356001600160401b0380821115614f2257600080fd5b818501915085601f830112614f3657600080fd5b8135614f49614f4482614e66565b614e36565b81815260059190911b83018401908481019088831115614f6857600080fd5b8585015b8381101561500157803585811115614f845760008081fd5b86016080818c03601f1901811315614f9c5760008081fd5b614fa4614dec565b8983013588811115614fb65760008081fd5b614fc48e8c83870101614e89565b8252506040808401358b8301526060614fde818601614bb2565b82840152614fed848601614bb2565b908301525085525050918601918601614f6c565b5098975050505050505050565b6001600160a01b038116811461289e57600080fd5b60006020828403121561503557600080fd5b8135614c8e8161500e565b600080600080600060a0868803121561505857600080fd5b8535945060208601356001600160401b0381111561507557600080fd5b61508188828901614e89565b9450506040860135925061509760608701614bb2565b915060808601356150a78161500e565b809150509295509295909350565b600080600080600080600080888a036101c08112156150d357600080fd5b89356150de8161500e565b985060208a01356150ee8161500e565b975060408a01356150fe8161500e565b965060608a013561510e8161500e565b955060e0607f198201121561512257600080fd5b5060808901935061016089013592506101808901356001600160401b038082111561514c57600080fd5b6151588c838d01614e89565b93506101a08b013591508082111561516f57600080fd5b5061517c8b828c01614e89565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c0312156151ab57600080fd5b6151b48a614bb2565b98506151c260208b01614bb2565b97506151d060408b01614bb2565b96506151de60608b01614bb2565b955060808a0135945060a08a013593506151fb8b60c08c01614c95565b925061520b8b6101008c01614cac565b915061521b8b6101808c01614c95565b90509295985092959850929598565b60006020828403121561523c57600080fd5b5035919050565b801515811461289e57600080fd5b60006020828403121561526357600080fd5b8135614c8e81615243565b60006020828403121561528057600080fd5b81356001600160401b0381111561529657600080fd5b614a3184828501614e89565b600060208083850312156152b557600080fd5b82356001600160401b03808211156152cc57600080fd5b818501915085601f8301126152e057600080fd5b81356152ee614f4482614e66565b81815260059190911b8301840190848101908883111561530d57600080fd5b8585015b83811015615001578035858111156153295760008081fd5b86016060818c03601f19018113156153415760008081fd5b615349614e14565b898301358881111561535b5760008081fd5b6153698e8c83870101614e89565b8252506040808401358b830152615381838501614bb2565b9082015285525050918601918601615311565b600080600080608085870312156153aa57600080fd5b6153b385614bb2565b9350602085013592506153c860408601614bb2565b91506153d660608601614bb2565b905092959194509250565b600080604083850312156153f457600080fd5b82356001600160401b0381111561540a57600080fd5b61541685828601614e89565b95602094909401359450505050565b6000806040838503121561543857600080fd5b8235915061544860208401614bb2565b90509250929050565b6020808252605d90820152600080516020615e2883398151915260408201527f3a2070656e64696e6753746174654e756d206d757374206265206c657373206f60608201527f7220657175616c207468616e206c61737450656e64696e675374617465000000608082015260a00190565b6020808252605190820152600080516020615e2883398151915260408201527f3a20696e69744e756d4261746368206d757374206d61746368207468652070656060820152700dcc8d2dcce40e6e8c2e8ca40c4c2e8c6d607b1b608082015260a00190565b6020808252604890820152600080516020615e2883398151915260408201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e6060820152671bdd08195e1a5cdd60c21b608082015260a00190565b6020808252606290820152600080516020615e2883398151915260408201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560608201527f7175616c207468616e2063757272656e744c61737456657269666965644261746080820152610c6d60f31b60a082015260c00190565b6020808252605c90820152600080516020615e2883398151915260408201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460608201527f68616e2063757272656e744c6173745665726966696564426174636800000000608082015260a00190565b60008251615682818460208701614c23565b9190910192915050565b60006020828403121561569e57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826156ca576156ca6156a5565b500690565b600181811c908216806156e357607f821691505b60208210810361570357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526028908201527f50726f6f664f66456666696369656e63793a3a6f6e6c7941646d696e3a206f6e604082015267363c9030b236b4b760c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561578957615789615751565b01949350505050565b6020808252604a908201527f50726f6f664f66456666696369656e63793a3a73657450656e64696e6753746160408201527f746554696d656f75743a206578636565642068616c74206167677265676174696060820152691bdb881d1a5b595bdd5d60b21b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361589c5761589c615751565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b60006001820161591f5761591f615751565b5060010190565b60006001600160401b038381169083168181101561594657615946615751565b039392505050565b60008282101561596057615960615751565b500390565b600081600019048311821515161561597f5761597f615751565b500290565b601f82111561499257600081815260208120601f850160051c810160208610156159ab5750805b601f850160051c820191505b81811015614081578281556001016159b7565b81516001600160401b038111156159e3576159e3614dd6565b6159f7816159f184546156cf565b84615984565b602080601f831160018114615a2c5760008415615a145750858301515b600019600386901b1c1916600185901b178555614081565b600085815260208120601f198616915b82811015615a5b57888601518255948401946001909101908401615a3c565b5085821015615a795787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615a9857615a986156a5565b500490565b60208082526048908201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160408201527f6c6c6f7765643a206f6e6c7920696620666f72636520626174636820697320616060820152677661696c61626c6560c01b608082015260a00190565b60008219821115615b1e57615b1e615751565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b60208082526041908201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564416760408201527f6772656761746f723a206f6e6c7920747275737465642041676772656761746f6060820152603960f91b608082015260a00190565b8381526001600160a01b0383166020820152606060408201819052600090615c1190830184614c4f565b95945050505050565b60006001600160401b0380841680615c3457615c346156a5565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615c7857848483379084018281529284019290600101615c58565b5050828760c0870137610100850181815286935091505b6001811015615cae578251825260209283019290910190600101615c8f565b50505095945050505050565b600060208284031215615ccc57600080fd5b8151614c8e81615243565b600181815b80851115615d12578160001904821115615cf857615cf8615751565b80851615615d0557918102915b93841c9390800290615cdc565b509250929050565b600082615d2957506001614ca6565b81615d3657506000614ca6565b8160018114615d4c5760028114615d5657615d72565b6001915050614ca6565b60ff841115615d6757615d67615751565b50506001821b614ca6565b5060208310610133831016604e8410600b8410161715615d95575081810a614ca6565b615d9f8383615cd7565b8060001904821115615db357615db3615751565b029392505050565b6000614c8e8383615d1a56fe50726f6f664f66456666696369656e63793a3a73657175656e6365426174636850726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657250726f6f664f66456666696369656e63793a3a73657175656e6365466f72636550726f6f664f66456666696369656e63793a3a76657269667942617463686573a264697066735822122092eb4dd90d0805c55812c4974f49e8f33b2f7bc356e05340b337a89898740ae364736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106104125760003560e01c806396dc3d3911610220578063cfa8ed4711610130578063e7a7ed02116100b8578063f14916d611610087578063f14916d6146109e2578063f2fde38b146109f5578063f851a44014610a08578063f8b823e414610a1b578063fe16564f14610a2457600080fd5b8063e7a7ed021461098f578063e8bf92ed146109a9578063eaeb077b146109bc578063edc41121146109cf57600080fd5b8063d939b315116100ff578063d939b3151461093e578063dbc1697614610958578063e0d1744114610960578063e11f3f1814610973578063e217cfd61461098657600080fd5b8063cfa8ed47146108ea578063d02103ca14610904578063d8d1091b14610917578063d8f54db01461092a57600080fd5b8063ab9fc5ef116101b3578063b6b0b09711610182578063b6b0b0971461088f578063c0cad302146108a9578063c0ed84e0146108bc578063c89e42df146108c4578063cf136306146108d757600080fd5b8063ab9fc5ef146107e3578063adc879e9146107ed578063afd23cbe14610807578063b4d63f581461082f57600080fd5b80639eb831b9116101ef5780639eb831b9146107a85780639f0d039d146107b0578063a3c573eb146107b8578063aa58bad6146107cb57600080fd5b806396dc3d391461076757806399f5634e1461077a5780639b796760146107825780639c9f3dfe1461079557600080fd5b80634a910e6a11610326578063715018a6116102ae578063837a47381161027d578063837a4738146106b1578063841b24d71461071f5780638b48931e146107395780638c4a0af7146107435780638da5cb5b1461075657600080fd5b8063715018a6146106705780637215541a1461067857806375c508b31461068b5780637fcb36531461069e57600080fd5b8063574f649e116102f5578063574f649e1461060457806360943d6a146106175780636b8616ce1461062a5780636ff512cc1461064a578063704b6c021461065d57600080fd5b80634a910e6a146105b65780635392c5e0146105c9578063542028d5146105e95780635437988d146105f157600080fd5b80632d0889d3116103a9578063423fa85611610378578063423fa85614610542578063456052671461055c578063458c0477146105765780634834a343146105895780634a1a89a71461059c57600080fd5b80632d0889d314610500578063383b3be814610509578063394218e91461051c5780633c1582671461052f57600080fd5b80631816b7e5116103e55780631816b7e51461048457806319d8ac6114610497578063220d7899146104c257806329878983146104d557600080fd5b80630eaa86ea14610417578063107bf28c1461043d57806310a01a721461045257806315064c9614610467575b600080fd5b61042a610425366004614bce565b610a37565b6040519081526020015b60405180910390f35b610445610c18565b6040516104349190614c7b565b610465610460366004614cbd565b610ca6565b005b6065546104749060ff1681565b6040519015158152602001610434565b610465610492366004614d4a565b610ef0565b6068546104aa906001600160401b031681565b6040516001600160401b039091168152602001610434565b6104456104d0366004614d6e565b61101b565b606a546104e8906001600160a01b031681565b6040516001600160a01b039091168152602001610434565b61042a61ea6081565b610474610517366004614dbb565b6111d9565b61046561052a366004614dbb565b611220565b61046561053d366004614ef8565b611373565b6068546104aa90600160401b90046001600160401b031681565b6068546104aa90600160801b90046001600160401b031681565b6072546104aa906001600160401b031681565b610465610597366004614cbd565b611b3e565b6072546104aa90600160401b90046001600160401b031681565b6104656105c4366004614dbb565b611e72565b61042a6105d7366004614dbb565b606d6020526000908152604090205481565b61044561211b565b6104656105ff366004615023565b612128565b61042a610612366004615040565b612152565b6104656106253660046150b5565b612195565b61042a610638366004614dbb565b60666020526000908152604090205481565b610465610658366004615023565b612505565b61046561066b366004615023565b612589565b610465612601565b610465610686366004614dbb565b612615565b61046561069936600461518c565b6128a1565b6069546104aa906001600160401b031681565b6106f46106bf36600461522a565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610434565b6072546104aa90600160c01b90046001600160401b031681565b6104aa62093a8081565b610465610751366004615251565b612930565b6033546001600160a01b03166104e8565b610465610775366004614dbb565b6129a7565b61042a6129d2565b610465610790366004614dbb565b612ab5565b6104656107a3366004614dbb565b612aea565b61042a600c81565b60745461042a565b6070546104e8906001600160a01b031681565b6065546104aa9061010090046001600160401b031681565b6104aa6206978081565b606c546104aa90600160a81b90046001600160401b031681565b60655461081c90600160481b900461ffff1681565b60405161ffff9091168152602001610434565b61086a61083d366004614dbb565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610434565b6065546104e890600160581b90046001600160a01b031681565b6104656108b736600461526e565b612c3e565b6104aa612c56565b6104656108d236600461526e565b612ca3565b6104656108e5366004614dbb565b612d09565b6069546104e890600160401b90046001600160a01b031681565b606c546104e8906001600160a01b031681565b6104656109253660046152a2565b612d8a565b606c5461047490600160a01b900460ff1681565b6072546104aa90600160801b90046001600160401b031681565b610465613276565b61046561096e366004615394565b613332565b61046561098136600461518c565b6133a4565b6104aa6103e881565b6068546104aa90600160c01b90046001600160401b031681565b606b546104e8906001600160a01b031681565b6104656109ca3660046153e1565b6134e9565b6104656109dd366004614cbd565b61381e565b6104656109f0366004615023565b61393e565b610465610a03366004615023565b6139b6565b6073546104e8906001600160a01b031681565b61042a60745481565b610465610a32366004615425565b613a2c565b6000806000610a44612c56565b90506001600160401b03881615610ae1576072546001600160401b039081169089161115610a8d5760405162461bcd60e51b8152600401610a8490615451565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610adb5760405162461bcd60e51b8152600401610a84906154c2565b50610b4b565b6001600160401b0387166000908152606d6020526040902054915081610b195760405162461bcd60e51b8152600401610a8490615527565b806001600160401b0316876001600160401b03161115610b4b5760405162461bcd60e51b8152600401610a8490615583565b806001600160401b0316866001600160401b031611610b7c5760405162461bcd60e51b8152600401610a84906155ff565b6000610b8b888888868961101b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051610bc09190615670565b602060405180830381855afa158015610bdd573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c00919061568c565b610c0a91906156bb565b9a9950505050505050505050565b606f8054610c25906156cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610c51906156cf565b8015610c9e5780601f10610c7357610100808354040283529160200191610c9e565b820191906000526020600020905b815481529060010190602001808311610c8157829003601f168201915b505050505081565b610cae613a4e565b600080610cb9612c56565b90506001600160401b038a1615610d4d576072546001600160401b03908116908b161115610cf95760405162461bcd60e51b8152600401610a8490615451565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610d475760405162461bcd60e51b8152600401610a84906154c2565b50610db7565b6001600160401b0389166000908152606d6020526040902054915081610d855760405162461bcd60e51b8152600401610a8490615527565b806001600160401b0316896001600160401b03161115610db75760405162461bcd60e51b8152600401610a8490615583565b806001600160401b0316886001600160401b031611610de85760405162461bcd60e51b8152600401610a84906155ff565b6000610df78a8a8a868b61101b565b6069805467ffffffffffffffff19166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610e4557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610e8b57600080fd5b505af1158015610e9f573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610f1a5760405162461bcd60e51b8152600401610a8490615709565b6103e88161ffff16118015610f3457506104008161ffff16105b610fbe5760405162461bcd60e51b815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a7365744d756c7469706c69657260448201527f42617463684665653a206e65774d756c7469706c69657242617463684665652060648201526e696e636f72726563742072616e676560881b608482015260a401610a84565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b0380861660008181526067602052604080822054938816825290205460609291158061104d57508115155b6110cd5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f7420606482015264195e1a5cdd60da1b608482015260a401610a84565b8061114e5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f7420606482015264195e1a5cdd60da1b608482015260a401610a84565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b038281166000908152607160205260408120549092429261120f92600160801b90920481169116615767565b6001600160401b0316111592915050565b6073546001600160a01b0316331461124a5760405162461bcd60e51b8152600401610a8490615709565b62093a806001600160401b03821611156112765760405162461bcd60e51b8152600401610a8490615792565b60655460ff1661131d576072546001600160401b03600160c01b90910481169082161061131d5760405162461bcd60e51b815260206004820152604960248201527f50726f6f664f66456666696369656e63793a3a7365745472757374656441676760448201527f72656761746f7254696d656f75743a206e65772074696d656f7574206d757374606482015268103132903637bbb2b960b91b608482015260a401610a84565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001611010565b60655460ff16156113965760405162461bcd60e51b8152600401610a8490615802565b606954600160401b90046001600160a01b0316331461141d5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610a84565b80518061148b5760405162461bcd60e51b81526020600482015260426024820152600080516020615dc883398151915260448201527f65733a204174206c65617374206d7573742073657175656e63652031206261746064820152610c6d60f31b608482015260a401610a84565b6103e881106114fe5760405162461bcd60e51b81526020600482015260456024820152600080516020615dc883398151915260448201527f65733a2043616e6e6f742073657175656e63652074686174206d616e79206261606482015264746368657360d81b608482015260a401610a84565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561196c5760008782815181106115515761155161586a565b60200260200101519050600081606001516001600160401b031611156116f1578361157b81615880565b9450506000816000015180519060200120826020015183606001516040516020016115a8939291906158a6565b60408051601f1981840301815291815281516020928301206001600160401b0388166000908152606690935291205490915081146116475760405162461bcd60e51b81526020600482015260426024820152600080516020615dc883398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a401610a84565b81606001516001600160401b031682604001516001600160401b031610156116eb5760405162461bcd60e51b815260206004820152605d6024820152600080516020615dc883398151915260448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610a84565b50611866565b6020810151158061177a5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916117349160040190815260200190565b6020604051808303816000875af1158015611753573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611777919061568c565b15155b6117da5760405162461bcd60e51b815260206004820152603f6024820152600080516020615dc883398151915260448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610a84565b80515161ea60116118665760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a401610a84565b856001600160401b031681604001516001600160401b03161015801561189957504281604001516001600160401b031611155b6119045760405162461bcd60e51b81526020600482015260426024820152600080516020615dc883398151915260448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e606482015261676560f01b608482015260a401610a84565b8051805160209182012081830151604080850151905161192b9488949392913391016158c9565b604051602081830303815290604052805190602001209250848061194e90615880565b955050806040015195505080806119649061590d565b915050611535565b506068546001600160401b03600160c01b909104811690831611156119e75760405162461bcd60e51b815260206004820152603a6024820152600080516020615dc883398151915260448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610a84565b606854600090611a0790600160801b90046001600160401b031684615926565b611a1a906001600160401b03168761594e565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611aef90339030908490611ad49190615965565b606554600160581b90046001600160a01b0316929190613aa8565b611af7613b13565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b615760405162461bcd60e51b8152600401610a8490615802565b6072546001600160401b038781166000908152606760205260409020600101544292611b9892600160c01b90910481169116615767565b6001600160401b03161115611c145760405162461bcd60e51b81526020600482015260486024820152600080516020615e2883398151915260448201527f3a20747275737465642061676772656761746f722074696d656f7574206e6f7460648201526708195e1c1a5c995960c21b608482015260a401610a84565b6103e8611c218888615926565b6001600160401b031610611c955760405162461bcd60e51b81526020600482015260416024820152600080516020615e2883398151915260448201527f3a2063616e6e6f74207665726966792074686174206d616e79206261746368656064820152607360f81b608482015260a401610a84565b611ca58888888888888888613bb3565b611cae86613ea3565b607254600160801b90046001600160401b0316600003611d76576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615611d1357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d5957600080fd5b505af1158015611d6d573d6000803e3d6000fd5b50505050611e27565b611d7e613b13565b607280546001600160401b0316906000611d9783615880565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611e9f57506072546001600160401b03600160401b9091048116908216115b8015611eba57506072546001600160401b0390811690821611155b611f3d5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a636f6e736f6c6964617465506560448201527f6e64696e6753746174653a2070656e64696e6753746174654e756d206d757374606482015267081a5b9d985b1a5960c21b608482015260a401610a84565b606a546001600160a01b03163314611ff057611f58816111d9565b611ff05760405162461bcd60e51b815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a636f6e736f6c6964617465506560448201527f6e64696e6753746174653a2070656e64696e67207374617465206973206e6f7460648201527f20726561647920746f20626520636f6e736f6c69646174656400000000000000608482015260a401610a84565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b1580156120ad57600080fd5b505af11580156120c1573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e846002015460405161210e91815260200190565b60405180910390a3505050565b606e8054610c25906156cf565b612130613a4e565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b60008585805190602001208585856040516020016121749594939291906158c9565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff16158080156121b55750600054600160ff909116105b806121cf5750303b1580156121cf575060005460ff166001145b6122325760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a84565b6000805460ff191660011790558015612255576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a8416179055607080549091169188169190911790556122d26020860186615023565b607380546001600160a01b0319166001600160a01b03929092169190911790556123026060860160408701615023565b606980546001600160a01b0392909216600160401b02600160401b600160e01b031990921691909117905561233d60c0860160a08701615023565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa71135684905561239a60e0860160c08701614dbb565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556123d16040860160208701614dbb565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561240d6080860160608701614dbb565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b1990921691909117905561244960a0860160808701615251565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e61247184826159ca565b50606f61247e83826159ca565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124b4614089565b80156124fa576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b0316331461252f5760405162461bcd60e51b8152600401610a8490615709565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001611010565b6073546001600160a01b031633146125b35760405162461bcd60e51b8152600401610a8490615709565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190602001611010565b612609613a4e565b61261360006140f9565b565b6033546001600160a01b03163314612896576072546000906001600160401b03161561266657506072546001600160401b03908116600090815260716020526040902054600160401b900416612674565b506069546001600160401b03165b80826001600160401b0316116126fc5760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a6163746976617465456d65726760448201527f656e637953746174653a20426174636820616c726561647920766572696669656064820152601960fa1b608482015260a401610a84565b6068546001600160401b03600160401b90910481169083161180159061273e57506001600160401b038083166000908152606760205260409020600101541615155b6127ce5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a6163746976617465456d65726760448201527f656e637953746174653a204261746368206e6f742073657175656e636564206f60648201527472206e6f7420656e64206f662073657175656e636560581b608482015260a401610a84565b6001600160401b0380831660009081526067602052604090206001015442916127fc9162093a809116615767565b6001600160401b031611156128945760405162461bcd60e51b815260206004820152605260248201527f50726f6f664f66456666696369656e63793a3a6163746976617465456d65726760448201527f656e637953746174653a204167677265676174696f6e2068616c742074696d656064820152711bdd5d081a5cc81b9bdd08195e1c1a5c995960721b608482015260a401610a84565b505b61289e61414b565b50565b60655460ff16156128c45760405162461bcd60e51b8152600401610a8490615802565b6128d58989898989898989896141bb565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a16124fa61414b565b6073546001600160a01b0316331461295a5760405162461bcd60e51b8152600401610a8490615709565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061101090831515815260200190565b6129af613a4e565b6069805467ffffffffffffffff19166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612a25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a49919061568c565b90506000612a55612c56565b6068546001600160401b03600160401b8204811691612a8591600160801b8204811691600160c01b900416615926565b612a8f9190615767565b612a999190615926565b6001600160401b03169050612aae8183615a89565b9250505090565b612abd613a4e565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612b145760405162461bcd60e51b8152600401610a8490615709565b62093a806001600160401b0382161115612b405760405162461bcd60e51b8152600401610a8490615792565b60655460ff16612be3576072546001600160401b03600160801b909104811690821610612be35760405162461bcd60e51b8152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a73657450656e64696e67537461908201527f746554696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a401610a84565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001611010565b612c46613a4e565b606f612c5282826159ca565b5050565b6072546000906001600160401b031615612c9357506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612ccd5760405162461bcd60e51b8152600401610a8490615709565b606e612cd982826159ca565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b20816040516110109190614c7b565b6073546001600160a01b03163314612d335760405162461bcd60e51b8152600401610a8490615709565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001611010565b60655460ff1615612dad5760405162461bcd60e51b8152600401610a8490615802565b606c54600160a01b900460ff161515600114612ddb5760405162461bcd60e51b8152600401610a8490615a9d565b805180612e495760405162461bcd60e51b81526020600482015260426024820152600080516020615e0883398151915260448201527f42617463683a204d75737420666f726365206174206c656173742031206261746064820152610c6d60f31b608482015260a401610a84565b6103e88110612ebf5760405162461bcd60e51b81526020600482015260486024820152600080516020615e0883398151915260448201527f426174636865733a2063616e6e6f74207665726966792074686174206d616e79606482015267206261746368657360c01b608482015260a401610a84565b6068546001600160401b03600160c01b8204811691612ee7918491600160801b900416615b0b565b1115612f495760405162461bcd60e51b815260206004820152603a6024820152600080516020615e0883398151915260448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610a84565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b8481101561317f576000868281518110612f9657612f9661586a565b602002602001015190508380612fab90615880565b945050600081600001518051906020012082602001518360400151604051602001612fd8939291906158a6565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461307c5760405162461bcd60e51b81526020600482015260476024820152600080516020615e0883398151915260448201527f426174636865733a20466f7263656420626174636865732064617461206d75736064820152660e840dac2e8c6d60cb1b608482015260a401610a84565b61308760018861594e565b830361312157426206978083604001516130a19190615767565b6001600160401b031611156131215760405162461bcd60e51b815260206004820152604c6024820152600080516020615e0883398151915260448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201526b1b595bdd5d081c195c9a5bd960a21b608482015260a401610a84565b8151805160209182012081840151604051613144938893929142913391016158c9565b604051602081830303815290604052805190602001209350858061316790615880565b965050505080806131779061590d565b915050612f7a565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166132985760405162461bcd60e51b8152600401610a8490615b23565b6073546001600160a01b031633146132c25760405162461bcd60e51b8152600401610a8490615709565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561331257600080fd5b505af1158015613326573d6000803e3d6000fd5b50505050612613614869565b61333a613a4e565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133ce5760405162461bcd60e51b8152600401610a8490615b80565b6133df8989898989898989896141bb565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561342a57607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561347057600080fd5b505af1158015613484573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff161561350c5760405162461bcd60e51b8152600401610a8490615802565b606c54600160a01b900460ff16151560011461353a5760405162461bcd60e51b8152600401610a8490615a9d565b600061354560745490565b9050818111156135af5760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201526e6f7420656e6f756768206d6174696360881b6064820152608401610a84565b61ea608351106136275760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610a84565b60655461364690600160581b90046001600160a01b0316333084613aa8565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015613690573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136b4919061568c565b60688054919250600160c01b9091046001600160401b03169060186136d883615880565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505083805190602001208142604051602001613719939291906158a6565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b0316600090815260669093529120553233036137bd57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613818565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161380f93929190615be7565b60405180910390a25b50505050565b606a546001600160a01b031633146138485760405162461bcd60e51b8152600401610a8490615b80565b6138588888888888888888613bb3565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d6020526040902085905560725416156138a357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156138e957600080fd5b505af11580156138fd573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e60565b6073546001600160a01b031633146139685760405162461bcd60e51b8152600401610a8490615709565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001611010565b6139be613a4e565b6001600160a01b038116613a235760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a84565b61289e816140f9565b613a34613a4e565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b031633146126135760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a84565b6040516001600160a01b03808516602483015283166044820152606481018290526138189085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526148c0565b6072546001600160401b03600160401b820481169116111561261357607254600090613b5090600160401b90046001600160401b03166001615767565b9050613b5b816111d9565b1561289e57607254600090600290613b7d9084906001600160401b0316615926565b613b879190615c1a565b613b919083615767565b9050613b9c816111d9565b15613baa57612c5281611e72565b612c5282611e72565b600080613bbe612c56565b90506001600160401b038a1615613c52576072546001600160401b03908116908b161115613bfe5760405162461bcd60e51b8152600401610a8490615451565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c4c5760405162461bcd60e51b8152600401610a84906154c2565b50613cbc565b6001600160401b0389166000908152606d6020526040902054915081613c8a5760405162461bcd60e51b8152600401610a8490615527565b806001600160401b0316896001600160401b03161115613cbc5760405162461bcd60e51b8152600401610a8490615583565b806001600160401b0316886001600160401b031611613ced5760405162461bcd60e51b8152600401610a84906155ff565b6000613cfc8a8a8a868b61101b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051613d319190615670565b602060405180830381855afa158015613d4e573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613d71919061568c565b613d7b91906156bb565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613dbf918b918b918b9190600401615c40565b602060405180830381865afa158015613ddc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e009190615cba565b613e525760405162461bcd60e51b815260206004820152602f6024820152600080516020615e2883398151915260448201526e1d1024a72b20a624a22fa82927a7a360891b6064820152608401610a84565b613e9533613e60858d615926565b6001600160401b0316613e716129d2565b613e7b9190615965565b606554600160581b90046001600160a01b03169190614997565b505050505050505050505050565b6000613ead612c56565b905081600080613ebd8484615926565b6001600160401b031690505b836001600160401b0316836001600160401b031614613f6f576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613f1991164261594e565b1115613f54576001810154613f3e90600160401b90046001600160401b031686615926565b613f51906001600160401b031684615b0b565b92505b60010154600160401b90046001600160401b03169250613ec9565b6000613f7b838361594e565b905082811015613ff5576000613f91828561594e565b9050600c8111613fa15780613fa4565b600c5b9050613fb1816003615965565b613fbc90600a615dbb565b606554613fd5908390600160481b900461ffff16615dbb565b607454613fe29190615965565b613fec9190615a89565b60745550614081565b6000614001848361594e565b9050600c81116140115780614014565b600c5b90506000614023826003615965565b61402e90600a615dbb565b606554614047908490600160481b900461ffff16615dbb565b6074546140549190615965565b61405e9190615a89565b9050806074546074546140719190615965565b61407b9190615a89565b60745550505b505050505050565b600054610100900460ff166140f45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a84565b612613335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561419b57600080fd5b505af11580156141af573d6000803e3d6000fd5b505050506126136149c7565b60006001600160401b038a1615614349576072546001600160401b03908116908b16111561427f5760405162461bcd60e51b81526020600482015260716024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a2070656e64696e6753746160648201527f74654e756d206d757374206265206c657373206f7220657175616c207468616e608482015270206c61737450656e64696e67537461746560781b60a482015260c401610a84565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b90920416146143435760405162461bcd60e51b81526020600482015260656024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a20696e69744e756d42617460648201527f6368206d757374206d61746368207468652070656e64696e67207374617465206084820152640c4c2e8c6d60db1b60a482015260c401610a84565b506144a2565b506001600160401b0387166000908152606d6020526040902054806143ea5760405162461bcd60e51b815260206004820152605c6024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a20696e69744e756d42617460648201527f636820737461746520726f6f7420646f6573206e6f7420657869737400000000608482015260a401610a84565b6069546001600160401b0390811690891611156144a25760405162461bcd60e51b81526020600482015260766024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a20696e69744e756d42617460648201527f6368206d757374206265206c657373206f7220657175616c207468616e2063756084820152750e4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d60531b60a482015260c401610a84565b6072546001600160401b03908116908a16118015906144d25750896001600160401b0316896001600160401b0316115b80156144f357506072546001600160401b03600160401b9091048116908a16115b6145705760405162461bcd60e51b81526020600482015260546024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a2066696e616c50656e64696064820152731b99d4dd185d19539d5b481a5b98dbdc9c9958dd60621b608482015260a401610a84565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146146355760405162461bcd60e51b815260206004820152606f6024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a2066696e616c4e6577426160648201527f746368206d75737420626520657175616c207468616e2063757272656e744c6160848201526e0e6e8accae4d2ccd2cac884c2e8c6d608b1b60a482015260c401610a84565b6000614644898989858a61101b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516146799190615670565b602060405180830381855afa158015614696573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906146b9919061568c565b6146c391906156bb565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614707918a918a918a9190600401615c40565b602060405180830381865afa158015614724573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147489190615cba565b6147b45760405162461bcd60e51b81526020600482015260436024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a20494e56414c49445f505260648201526227a7a360e91b608482015260a401610a84565b6001600160401b038b16600090815260716020526040902060020154879003613e955760405162461bcd60e51b81526020600482015260676024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a2073746f72656420726f6f60648201527f74206d75737420626520646966666572656e74207468616e206e6577207374616084820152661d19481c9bdbdd60ca1b60a482015260c401610a84565b60655460ff1661488b5760405162461bcd60e51b8152600401610a8490615b23565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614915826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614a229092919063ffffffff16565b80519091501561499257808060200190518101906149339190615cba565b6149925760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a84565b505050565b6040516001600160a01b03831660248201526044810182905261499290849063a9059cbb60e01b90606401613adc565b60655460ff16156149ea5760405162461bcd60e51b8152600401610a8490615802565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614a318484600085614a39565b949350505050565b606082471015614a9a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a84565b600080866001600160a01b03168587604051614ab69190615670565b60006040518083038185875af1925050503d8060008114614af3576040519150601f19603f3d011682016040523d82523d6000602084013e614af8565b606091505b5091509150614b0987838387614b14565b979650505050505050565b60608315614b83578251600003614b7c576001600160a01b0385163b614b7c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a84565b5081614a31565b614a318383815115614b985781518083602001fd5b8060405162461bcd60e51b8152600401610a849190614c7b565b80356001600160401b0381168114614bc957600080fd5b919050565b600080600080600060a08688031215614be657600080fd5b614bef86614bb2565b9450614bfd60208701614bb2565b9350614c0b60408701614bb2565b94979396509394606081013594506080013592915050565b60005b83811015614c3e578181015183820152602001614c26565b838111156138185750506000910152565b60008151808452614c67816020860160208601614c23565b601f01601f19169290920160200192915050565b602081526000614c8e6020830184614c4f565b9392505050565b8060408101831015614ca657600080fd5b92915050565b8060808101831015614ca657600080fd5b6000806000806000806000806101a0898b031215614cda57600080fd5b614ce389614bb2565b9750614cf160208a01614bb2565b9650614cff60408a01614bb2565b95506060890135945060808901359350614d1c8a60a08b01614c95565b9250614d2b8a60e08b01614cac565b9150614d3b8a6101608b01614c95565b90509295985092959890939650565b600060208284031215614d5c57600080fd5b813561ffff81168114614c8e57600080fd5b600080600080600060a08688031215614d8657600080fd5b614d8f86614bb2565b9450614d9d60208701614bb2565b94979496505050506040830135926060810135926080909101359150565b600060208284031215614dcd57600080fd5b614c8e82614bb2565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614e0e57614e0e614dd6565b60405290565b604051606081016001600160401b0381118282101715614e0e57614e0e614dd6565b604051601f8201601f191681016001600160401b0381118282101715614e5e57614e5e614dd6565b604052919050565b60006001600160401b03821115614e7f57614e7f614dd6565b5060051b60200190565b600082601f830112614e9a57600080fd5b81356001600160401b03811115614eb357614eb3614dd6565b614ec6601f8201601f1916602001614e36565b818152846020838601011115614edb57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614f0b57600080fd5b82356001600160401b0380821115614f2257600080fd5b818501915085601f830112614f3657600080fd5b8135614f49614f4482614e66565b614e36565b81815260059190911b83018401908481019088831115614f6857600080fd5b8585015b8381101561500157803585811115614f845760008081fd5b86016080818c03601f1901811315614f9c5760008081fd5b614fa4614dec565b8983013588811115614fb65760008081fd5b614fc48e8c83870101614e89565b8252506040808401358b8301526060614fde818601614bb2565b82840152614fed848601614bb2565b908301525085525050918601918601614f6c565b5098975050505050505050565b6001600160a01b038116811461289e57600080fd5b60006020828403121561503557600080fd5b8135614c8e8161500e565b600080600080600060a0868803121561505857600080fd5b8535945060208601356001600160401b0381111561507557600080fd5b61508188828901614e89565b9450506040860135925061509760608701614bb2565b915060808601356150a78161500e565b809150509295509295909350565b600080600080600080600080888a036101c08112156150d357600080fd5b89356150de8161500e565b985060208a01356150ee8161500e565b975060408a01356150fe8161500e565b965060608a013561510e8161500e565b955060e0607f198201121561512257600080fd5b5060808901935061016089013592506101808901356001600160401b038082111561514c57600080fd5b6151588c838d01614e89565b93506101a08b013591508082111561516f57600080fd5b5061517c8b828c01614e89565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c0312156151ab57600080fd5b6151b48a614bb2565b98506151c260208b01614bb2565b97506151d060408b01614bb2565b96506151de60608b01614bb2565b955060808a0135945060a08a013593506151fb8b60c08c01614c95565b925061520b8b6101008c01614cac565b915061521b8b6101808c01614c95565b90509295985092959850929598565b60006020828403121561523c57600080fd5b5035919050565b801515811461289e57600080fd5b60006020828403121561526357600080fd5b8135614c8e81615243565b60006020828403121561528057600080fd5b81356001600160401b0381111561529657600080fd5b614a3184828501614e89565b600060208083850312156152b557600080fd5b82356001600160401b03808211156152cc57600080fd5b818501915085601f8301126152e057600080fd5b81356152ee614f4482614e66565b81815260059190911b8301840190848101908883111561530d57600080fd5b8585015b83811015615001578035858111156153295760008081fd5b86016060818c03601f19018113156153415760008081fd5b615349614e14565b898301358881111561535b5760008081fd5b6153698e8c83870101614e89565b8252506040808401358b830152615381838501614bb2565b9082015285525050918601918601615311565b600080600080608085870312156153aa57600080fd5b6153b385614bb2565b9350602085013592506153c860408601614bb2565b91506153d660608601614bb2565b905092959194509250565b600080604083850312156153f457600080fd5b82356001600160401b0381111561540a57600080fd5b61541685828601614e89565b95602094909401359450505050565b6000806040838503121561543857600080fd5b8235915061544860208401614bb2565b90509250929050565b6020808252605d90820152600080516020615e2883398151915260408201527f3a2070656e64696e6753746174654e756d206d757374206265206c657373206f60608201527f7220657175616c207468616e206c61737450656e64696e675374617465000000608082015260a00190565b6020808252605190820152600080516020615e2883398151915260408201527f3a20696e69744e756d4261746368206d757374206d61746368207468652070656060820152700dcc8d2dcce40e6e8c2e8ca40c4c2e8c6d607b1b608082015260a00190565b6020808252604890820152600080516020615e2883398151915260408201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e6060820152671bdd08195e1a5cdd60c21b608082015260a00190565b6020808252606290820152600080516020615e2883398151915260408201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560608201527f7175616c207468616e2063757272656e744c61737456657269666965644261746080820152610c6d60f31b60a082015260c00190565b6020808252605c90820152600080516020615e2883398151915260408201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460608201527f68616e2063757272656e744c6173745665726966696564426174636800000000608082015260a00190565b60008251615682818460208701614c23565b9190910192915050565b60006020828403121561569e57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826156ca576156ca6156a5565b500690565b600181811c908216806156e357607f821691505b60208210810361570357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526028908201527f50726f6f664f66456666696369656e63793a3a6f6e6c7941646d696e3a206f6e604082015267363c9030b236b4b760c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561578957615789615751565b01949350505050565b6020808252604a908201527f50726f6f664f66456666696369656e63793a3a73657450656e64696e6753746160408201527f746554696d656f75743a206578636565642068616c74206167677265676174696060820152691bdb881d1a5b595bdd5d60b21b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361589c5761589c615751565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b60006001820161591f5761591f615751565b5060010190565b60006001600160401b038381169083168181101561594657615946615751565b039392505050565b60008282101561596057615960615751565b500390565b600081600019048311821515161561597f5761597f615751565b500290565b601f82111561499257600081815260208120601f850160051c810160208610156159ab5750805b601f850160051c820191505b81811015614081578281556001016159b7565b81516001600160401b038111156159e3576159e3614dd6565b6159f7816159f184546156cf565b84615984565b602080601f831160018114615a2c5760008415615a145750858301515b600019600386901b1c1916600185901b178555614081565b600085815260208120601f198616915b82811015615a5b57888601518255948401946001909101908401615a3c565b5085821015615a795787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615a9857615a986156a5565b500490565b60208082526048908201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160408201527f6c6c6f7765643a206f6e6c7920696620666f72636520626174636820697320616060820152677661696c61626c6560c01b608082015260a00190565b60008219821115615b1e57615b1e615751565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b60208082526041908201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564416760408201527f6772656761746f723a206f6e6c7920747275737465642041676772656761746f6060820152603960f91b608082015260a00190565b8381526001600160a01b0383166020820152606060408201819052600090615c1190830184614c4f565b95945050505050565b60006001600160401b0380841680615c3457615c346156a5565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615c7857848483379084018281529284019290600101615c58565b5050828760c0870137610100850181815286935091505b6001811015615cae578251825260209283019290910190600101615c8f565b50505095945050505050565b600060208284031215615ccc57600080fd5b8151614c8e81615243565b600181815b80851115615d12578160001904821115615cf857615cf8615751565b80851615615d0557918102915b93841c9390800290615cdc565b509250929050565b600082615d2957506001614ca6565b81615d3657506000614ca6565b8160018114615d4c5760028114615d5657615d72565b6001915050614ca6565b60ff841115615d6757615d67615751565b50506001821b614ca6565b5060208310610133831016604e8410600b8410161715615d95575081810a614ca6565b615d9f8383615cd7565b8060001904821115615db357615db3615751565b029392505050565b6000614c8e8383615d1a56fe50726f6f664f66456666696369656e63793a3a73657175656e6365426174636850726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657250726f6f664f66456666696369656e63793a3a73657175656e6365466f72636550726f6f664f66456666696369656e63793a3a76657269667942617463686573a264697066735822122092eb4dd90d0805c55812c4974f49e8f33b2f7bc356e05340b337a89898740ae364736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/TokenWrapped.json b/compiled-contracts/TokenWrapped.json index 3dca9ff5f..21ac4bce3 100644 --- a/compiled-contracts/TokenWrapped.json +++ b/compiled-contracts/TokenWrapped.json @@ -483,8 +483,8 @@ "type": "function" } ], - "bytecode": "0x60c06040523480156200001157600080fd5b5060405162001a7838038062001a788339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516115be620004ba600039600061053001526000818161036f01526104fa01526115be6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b60405161019191906112d5565b60405180910390f35b6101ad6101a8366004611371565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad61020436600461139b565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad610276366004611371565b610552565b6101ad610289366004611371565b61059e565b6101c161029c3660046113d7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d23660046113d7565b60066020526000908152604090205481565b610184610645565b6101ad6102fa366004611371565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad610352366004611371565b6106ed565b6101ad610365366004611371565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f3660046113f9565b6107b2565b005b6101c16103b436600461146c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6060600380546104379061149f565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061149f565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f56565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611521565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c838361101e565b50600192915050565b6060600480546104379061149f565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c8383611124565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661088183611539565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ee3908490611521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4991815260200190565b60405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f81610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166110815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b80600260008282546110939190611521565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906110cd908490611521565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156112495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611285908490611571565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c27565b600060208083528351808285015260005b81811015611302578581018301518582016040015282016112e6565b81811115611314576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136c57600080fd5b919050565b6000806040838503121561138457600080fd5b61138d83611348565b946020939093013593505050565b6000806000606084860312156113b057600080fd5b6113b984611348565b92506113c760208501611348565b9150604084013590509250925092565b6000602082840312156113e957600080fd5b6113f282611348565b9392505050565b600080600080600080600060e0888a03121561141457600080fd5b61141d88611348565b965061142b60208901611348565b95506040880135945060608801359350608088013560ff8116811461144f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561147f57600080fd5b61148883611348565b915061149660208401611348565b90509250929050565b600181811c908216806114b357607f821691505b6020821081036114ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611534576115346114f2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156a5761156a6114f2565b5060010190565b600082821015611583576115836114f2565b50039056fea264697066735822122074c1369adb4b03ecf20b18930bac9df5d9a48b4602516485c969475d7cadf1ac64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a457c2d71161008c578063d505accf11610066578063d505accf14610391578063dd62ed3e146103a6578063ffa1ad74146103ec57600080fd5b8063a457c2d714610344578063a9059cbb14610357578063cd0d00961461036a57600080fd5b806395d89b41116100bd57806395d89b41146102e45780639dc29fac146102ec578063a3c573eb146102ff57600080fd5b806370a082311461028e5780637ecebe00146102c457600080fd5b806330adf81f1161012f5780633644e515116101145780633644e51514610260578063395093511461026857806340c10f191461027b57600080fd5b806330adf81f14610209578063313ce5671461023057600080fd5b806318160ddd1161016057806318160ddd146101bd57806320606b70146101cf57806323b872dd146101f657600080fd5b806306fdde031461017c578063095ea7b31461019a575b600080fd5b610184610428565b60405161019191906112d5565b60405180910390f35b6101ad6101a8366004611371565b6104ba565b6040519015158152602001610191565b6002545b604051908152602001610191565b6101c17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101ad61020436600461139b565b6104d2565b6101c17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055474010000000000000000000000000000000000000000900460ff1660405160ff9091168152602001610191565b6101c16104f6565b6101ad610276366004611371565b610552565b6101ad610289366004611371565b61059e565b6101c161029c3660046113d7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101c16102d23660046113d7565b60066020526000908152604090205481565b610184610645565b6101ad6102fa366004611371565b610654565b60055461031f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610191565b6101ad610352366004611371565b6106ed565b6101ad610365366004611371565b6107a4565b6101c17f000000000000000000000000000000000000000000000000000000000000000081565b6103a461039f3660046113f9565b6107b2565b005b6101c16103b436600461146c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101846040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6060600380546104379061149f565b80601f01602080910402602001604051908101604052809291908181526020018280546104639061149f565b80156104b05780601f10610485576101008083540402835291602001916104b0565b820191906000526020600020905b81548152906001019060200180831161049357829003601f168201915b5050505050905090565b6000336104c8818585610ab4565b5060019392505050565b6000336104e0858285610c34565b6104eb858585610cf1565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461052d5761052846610f56565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906104c89082908690610599908790611521565b610ab4565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106325760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f494447450000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61063c838361101e565b50600192915050565b6060600480546104379061149f565b60055460009073ffffffffffffffffffffffffffffffffffffffff1633146106e35760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f425260448201527f49444745000000000000000000000000000000000000000000000000000000006064820152608401610629565b61063c8383611124565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190838110156107975760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610629565b6104eb8286868403610ab4565b6000336104c8818585610cf1565b834211156108275760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a204578706972656420706560448201527f726d6974000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661088183611539565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108ec6104f6565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156109b0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610a2b57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610a9d5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c696420736960448201527f676e6174757265000000000000000000000000000000000000000000000000006064820152608401610629565b610aa88a8a8a610ab4565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610b3c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610bc55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ceb5781811015610cde5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610629565b610ceb8484848403610ab4565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216610e035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610e9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ee3908490611521565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4991815260200190565b60405180910390a3610ceb565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f81610428565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b73ffffffffffffffffffffffffffffffffffffffff82166110815760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610629565b80600260008282546110939190611521565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548392906110cd908490611521565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff82166111ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156112495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610629565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611285908490611571565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c27565b600060208083528351808285015260005b81811015611302578581018301518582016040015282016112e6565b81811115611314576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136c57600080fd5b919050565b6000806040838503121561138457600080fd5b61138d83611348565b946020939093013593505050565b6000806000606084860312156113b057600080fd5b6113b984611348565b92506113c760208501611348565b9150604084013590509250925092565b6000602082840312156113e957600080fd5b6113f282611348565b9392505050565b600080600080600080600060e0888a03121561141457600080fd5b61141d88611348565b965061142b60208901611348565b95506040880135945060608801359350608088013560ff8116811461144f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561147f57600080fd5b61148883611348565b915061149660208401611348565b90509250929050565b600181811c908216806114b357607f821691505b6020821081036114ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611534576115346114f2565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156a5761156a6114f2565b5060010190565b600082821015611583576115836114f2565b50039056fea264697066735822122074c1369adb4b03ecf20b18930bac9df5d9a48b4602516485c969475d7cadf1ac64736f6c634300080f0033", + "bytecode": "0x60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b14f80bfcbda3f7be499de7c67ec81639549928b9cee16384da9f2fb8c22dce64736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b14f80bfcbda3f7be499de7c67ec81639549928b9cee16384da9f2fb8c22dce64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/Verifier.json b/compiled-contracts/Verifier.json index 66edea510..8e3be376a 100644 --- a/compiled-contracts/Verifier.json +++ b/compiled-contracts/Verifier.json @@ -38,8 +38,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50610f6a806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c806343753b4d14610030575b600080fd5b61012c600480360361012081101561004757600080fd5b6040805180820182529183019291818301918390600290839083908082843760009201829052506040805180820190915293969594608081019493509150600290835b828210156100c8576040805180820182529080840286019060029083908390808284376000920191909152505050815260019091019060200161008a565b5050604080518082018252939695948181019493509150600290839083908082843760009201919091525050604080516020818101909252929594938181019392509060019083908390808284376000920191909152509194506101409350505050565b604080519115158252519081900360200190f35b600061014a610e09565b6040805180820182528751815260208089015181830152908352815160808101835287515181840190815288518301516060808401919091529082528351808501855289840180515182525184015181850152828401528483019190915282518084018452875181528783015181840152848401528251600180825281850190945290929091828101908036833701905050905060005b600181101561021a578481600181106101f657fe5b602002015182828151811061020757fe5b60209081029190910101526001016101e1565b506102258183610243565b6102345760019250505061023b565b6000925050505b949350505050565b60007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161026e610e3b565b61027661045a565b90508060800151518551600101146102ef57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f76657269666965722d6261642d696e7075740000000000000000000000000000604482015290519081900360640190fd5b6102f7610e82565b50604080518082019091526000808252602082018190525b86518110156103e3578387828151811061032557fe5b60200260200101511061039957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f76657269666965722d6774652d736e61726b2d7363616c61722d6669656c6400604482015290519081900360640190fd5b6103d9826103d4856080015184600101815181106103b357fe5b60200260200101518a85815181106103c757fe5b60200260200101516107db565b610895565b915060010161030f565b506104068183608001516000815181106103f957fe5b6020026020010151610895565b905061043c610418866000015161094b565b8660200151846000015185602001518587604001518b6040015189606001516109d7565b61044c5760019350505050610454565b600093505050505b92915050565b610462610e3b565b6040805180820182527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e281527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d19266020808301919091529083528151608080820184527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c8285019081527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab606080850191909152908352845180860186527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a781527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8818601528385015285840192909252835180820185527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28186019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed828501528152845180860186527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa818601528185015285850152835190810184527f119f15e0f81076884d21d2cd6ac483a55c28450b386bdea8c2955def9835fbc68185019081527f14b0a9ca774507f41446d9d58e741ebdf61cb4a71169422e6e09ad4dfdcb0a82828401528152835180850185527f2357503a418433e2235411b79bea0e4b206b4b813e03c72525a67f0da54f513d81527f0bbd31dd338f7da569e1a84e9a6b1786df3e5a3dca093a8e0619ec290e3c4f1f818501528184015281850152825160028082529181019093529082015b6106e3610e82565b8152602001906001900390816106db57505060808201908152604080518082019091527f1afd0838136f18dd0d3b7889f3d0d808c2e974c3c1c91981ff1bb8a9f5b8723381527f0a68e37f4dc3ca49360df2e4b67b0e0a4344a7c72944c438eea410ea62c49e8660208201529051805160009061075c57fe5b602002602001018190525060405180604001604052807f22c24f7779cd44fa8bad17df8e601b7b2d948320d25830cd4b2097ae59a0db5681526020017f1e28066a7dc90ebe7f16a9db9e5e50d480ac009ee7deb7fb076903d4571c4d5f81525081608001516001815181106107cd57fe5b602002602001018190525090565b6107e3610e82565b6107eb610e9c565b835181526020808501519082015260408101839052600060608360808460076107d05a03fa905080801561081e57610820565bfe5b508061088d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f70616972696e672d6d756c2d6661696c65640000000000000000000000000000604482015290519081900360640190fd5b505092915050565b61089d610e82565b6108a5610eba565b8351815260208085015181830152835160408301528301516060808301919091526000908360c08460066107d05a03fa905080801561081e57508061088d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f70616972696e672d6164642d6661696c65640000000000000000000000000000604482015290519081900360640190fd5b610953610e82565b81517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd479015801561098657506020830151155b156109a657505060408051808201909152600080825260208201526109d2565b604051806040016040528084600001518152602001828560200151816109c857fe5b0683038152509150505b919050565b60408051600480825260a0820190925260009160609190816020015b6109fb610e82565b8152602001906001900390816109f357505060408051600480825260a0820190925291925060609190602082015b610a31610ed8565b815260200190600190039081610a295790505090508a82600081518110610a5457fe5b60200260200101819052508882600181518110610a6d57fe5b60200260200101819052508682600281518110610a8657fe5b60200260200101819052508482600381518110610a9f57fe5b60200260200101819052508981600081518110610ab857fe5b60200260200101819052508781600181518110610ad157fe5b60200260200101819052508581600281518110610aea57fe5b60200260200101819052508381600381518110610b0357fe5b6020026020010181905250610b188282610b27565b9b9a5050505050505050505050565b60008151835114610b9957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f70616972696e672d6c656e677468732d6661696c656400000000000000000000604482015290519081900360640190fd5b82516006810260608167ffffffffffffffff81118015610bb857600080fd5b50604051908082528060200260200182016040528015610be2578160200160208202803683370190505b50905060005b83811015610d6757868181518110610bfc57fe5b602002602001015160000151828260060260000181518110610c1a57fe5b602002602001018181525050868181518110610c3257fe5b602002602001015160200151828260060260010181518110610c5057fe5b602002602001018181525050858181518110610c6857fe5b602090810291909101015151518251839060026006850201908110610c8957fe5b602002602001018181525050858181518110610ca157fe5b60209081029190910101515160016020020151828260060260030181518110610cc657fe5b602002602001018181525050858181518110610cde57fe5b602002602001015160200151600060028110610cf657fe5b6020020151828260060260040181518110610d0d57fe5b602002602001018181525050858181518110610d2557fe5b602002602001015160200151600160028110610d3d57fe5b6020020151828260060260050181518110610d5457fe5b6020908102919091010152600101610be8565b50610d70610ef8565b6000602082602086026020860160086107d05a03fa905080801561081e575080610dfb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f70616972696e672d6f70636f64652d6661696c65640000000000000000000000604482015290519081900360640190fd5b505115159695505050505050565b6040518060600160405280610e1c610e82565b8152602001610e29610ed8565b8152602001610e36610e82565b905290565b6040518060a00160405280610e4e610e82565b8152602001610e5b610ed8565b8152602001610e68610ed8565b8152602001610e75610ed8565b8152602001606081525090565b604051806040016040528060008152602001600081525090565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280610eeb610f16565b8152602001610e36610f16565b60405180602001604052806001906020820280368337509192915050565b6040518060400160405280600290602082028036833750919291505056fea2646970667358221220743cdda0f921444b03e41cbe9737d5ae49ec7300e84e2fcc3eb25afb52123b9664736f6c634300060b0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c806343753b4d14610030575b600080fd5b61012c600480360361012081101561004757600080fd5b6040805180820182529183019291818301918390600290839083908082843760009201829052506040805180820190915293969594608081019493509150600290835b828210156100c8576040805180820182529080840286019060029083908390808284376000920191909152505050815260019091019060200161008a565b5050604080518082018252939695948181019493509150600290839083908082843760009201919091525050604080516020818101909252929594938181019392509060019083908390808284376000920191909152509194506101409350505050565b604080519115158252519081900360200190f35b600061014a610e09565b6040805180820182528751815260208089015181830152908352815160808101835287515181840190815288518301516060808401919091529082528351808501855289840180515182525184015181850152828401528483019190915282518084018452875181528783015181840152848401528251600180825281850190945290929091828101908036833701905050905060005b600181101561021a578481600181106101f657fe5b602002015182828151811061020757fe5b60209081029190910101526001016101e1565b506102258183610243565b6102345760019250505061023b565b6000925050505b949350505050565b60007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161026e610e3b565b61027661045a565b90508060800151518551600101146102ef57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f76657269666965722d6261642d696e7075740000000000000000000000000000604482015290519081900360640190fd5b6102f7610e82565b50604080518082019091526000808252602082018190525b86518110156103e3578387828151811061032557fe5b60200260200101511061039957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f76657269666965722d6774652d736e61726b2d7363616c61722d6669656c6400604482015290519081900360640190fd5b6103d9826103d4856080015184600101815181106103b357fe5b60200260200101518a85815181106103c757fe5b60200260200101516107db565b610895565b915060010161030f565b506104068183608001516000815181106103f957fe5b6020026020010151610895565b905061043c610418866000015161094b565b8660200151846000015185602001518587604001518b6040015189606001516109d7565b61044c5760019350505050610454565b600093505050505b92915050565b610462610e3b565b6040805180820182527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e281527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d19266020808301919091529083528151608080820184527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c8285019081527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab606080850191909152908352845180860186527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a781527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8818601528385015285840192909252835180820185527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28186019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed828501528152845180860186527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa818601528185015285850152835190810184527f119f15e0f81076884d21d2cd6ac483a55c28450b386bdea8c2955def9835fbc68185019081527f14b0a9ca774507f41446d9d58e741ebdf61cb4a71169422e6e09ad4dfdcb0a82828401528152835180850185527f2357503a418433e2235411b79bea0e4b206b4b813e03c72525a67f0da54f513d81527f0bbd31dd338f7da569e1a84e9a6b1786df3e5a3dca093a8e0619ec290e3c4f1f818501528184015281850152825160028082529181019093529082015b6106e3610e82565b8152602001906001900390816106db57505060808201908152604080518082019091527f1afd0838136f18dd0d3b7889f3d0d808c2e974c3c1c91981ff1bb8a9f5b8723381527f0a68e37f4dc3ca49360df2e4b67b0e0a4344a7c72944c438eea410ea62c49e8660208201529051805160009061075c57fe5b602002602001018190525060405180604001604052807f22c24f7779cd44fa8bad17df8e601b7b2d948320d25830cd4b2097ae59a0db5681526020017f1e28066a7dc90ebe7f16a9db9e5e50d480ac009ee7deb7fb076903d4571c4d5f81525081608001516001815181106107cd57fe5b602002602001018190525090565b6107e3610e82565b6107eb610e9c565b835181526020808501519082015260408101839052600060608360808460076107d05a03fa905080801561081e57610820565bfe5b508061088d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f70616972696e672d6d756c2d6661696c65640000000000000000000000000000604482015290519081900360640190fd5b505092915050565b61089d610e82565b6108a5610eba565b8351815260208085015181830152835160408301528301516060808301919091526000908360c08460066107d05a03fa905080801561081e57508061088d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f70616972696e672d6164642d6661696c65640000000000000000000000000000604482015290519081900360640190fd5b610953610e82565b81517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd479015801561098657506020830151155b156109a657505060408051808201909152600080825260208201526109d2565b604051806040016040528084600001518152602001828560200151816109c857fe5b0683038152509150505b919050565b60408051600480825260a0820190925260009160609190816020015b6109fb610e82565b8152602001906001900390816109f357505060408051600480825260a0820190925291925060609190602082015b610a31610ed8565b815260200190600190039081610a295790505090508a82600081518110610a5457fe5b60200260200101819052508882600181518110610a6d57fe5b60200260200101819052508682600281518110610a8657fe5b60200260200101819052508482600381518110610a9f57fe5b60200260200101819052508981600081518110610ab857fe5b60200260200101819052508781600181518110610ad157fe5b60200260200101819052508581600281518110610aea57fe5b60200260200101819052508381600381518110610b0357fe5b6020026020010181905250610b188282610b27565b9b9a5050505050505050505050565b60008151835114610b9957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f70616972696e672d6c656e677468732d6661696c656400000000000000000000604482015290519081900360640190fd5b82516006810260608167ffffffffffffffff81118015610bb857600080fd5b50604051908082528060200260200182016040528015610be2578160200160208202803683370190505b50905060005b83811015610d6757868181518110610bfc57fe5b602002602001015160000151828260060260000181518110610c1a57fe5b602002602001018181525050868181518110610c3257fe5b602002602001015160200151828260060260010181518110610c5057fe5b602002602001018181525050858181518110610c6857fe5b602090810291909101015151518251839060026006850201908110610c8957fe5b602002602001018181525050858181518110610ca157fe5b60209081029190910101515160016020020151828260060260030181518110610cc657fe5b602002602001018181525050858181518110610cde57fe5b602002602001015160200151600060028110610cf657fe5b6020020151828260060260040181518110610d0d57fe5b602002602001018181525050858181518110610d2557fe5b602002602001015160200151600160028110610d3d57fe5b6020020151828260060260050181518110610d5457fe5b6020908102919091010152600101610be8565b50610d70610ef8565b6000602082602086026020860160086107d05a03fa905080801561081e575080610dfb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f70616972696e672d6f70636f64652d6661696c65640000000000000000000000604482015290519081900360640190fd5b505115159695505050505050565b6040518060600160405280610e1c610e82565b8152602001610e29610ed8565b8152602001610e36610e82565b905290565b6040518060a00160405280610e4e610e82565b8152602001610e5b610ed8565b8152602001610e68610ed8565b8152602001610e75610ed8565b8152602001606081525090565b604051806040016040528060008152602001600081525090565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280610eeb610f16565b8152602001610e36610f16565b60405180602001604052806001906020820280368337509192915050565b6040518060400160405280600290602082028036833750919291505056fea2646970667358221220743cdda0f921444b03e41cbe9737d5ae49ec7300e84e2fcc3eb25afb52123b9664736f6c634300060b0033", + "bytecode": "0x608060405234801561001057600080fd5b50610f6a806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c806343753b4d14610030575b600080fd5b61012c600480360361012081101561004757600080fd5b6040805180820182529183019291818301918390600290839083908082843760009201829052506040805180820190915293969594608081019493509150600290835b828210156100c8576040805180820182529080840286019060029083908390808284376000920191909152505050815260019091019060200161008a565b5050604080518082018252939695948181019493509150600290839083908082843760009201919091525050604080516020818101909252929594938181019392509060019083908390808284376000920191909152509194506101409350505050565b604080519115158252519081900360200190f35b600061014a610e09565b6040805180820182528751815260208089015181830152908352815160808101835287515181840190815288518301516060808401919091529082528351808501855289840180515182525184015181850152828401528483019190915282518084018452875181528783015181840152848401528251600180825281850190945290929091828101908036833701905050905060005b600181101561021a578481600181106101f657fe5b602002015182828151811061020757fe5b60209081029190910101526001016101e1565b506102258183610243565b6102345760019250505061023b565b6000925050505b949350505050565b60007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161026e610e3b565b61027661045a565b90508060800151518551600101146102ef57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f76657269666965722d6261642d696e7075740000000000000000000000000000604482015290519081900360640190fd5b6102f7610e82565b50604080518082019091526000808252602082018190525b86518110156103e3578387828151811061032557fe5b60200260200101511061039957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f76657269666965722d6774652d736e61726b2d7363616c61722d6669656c6400604482015290519081900360640190fd5b6103d9826103d4856080015184600101815181106103b357fe5b60200260200101518a85815181106103c757fe5b60200260200101516107db565b610895565b915060010161030f565b506104068183608001516000815181106103f957fe5b6020026020010151610895565b905061043c610418866000015161094b565b8660200151846000015185602001518587604001518b6040015189606001516109d7565b61044c5760019350505050610454565b600093505050505b92915050565b610462610e3b565b6040805180820182527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e281527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d19266020808301919091529083528151608080820184527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c8285019081527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab606080850191909152908352845180860186527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a781527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8818601528385015285840192909252835180820185527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28186019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed828501528152845180860186527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa818601528185015285850152835190810184527f29f9eab2ec15d35ef2628cd651fe870eae2a4b327b9a411f7eb377bb6ad8f7d48185019081527f265859876cd01432520c00cc710d0c98b941bc0c3fd502edd246fd3663cd90a5828401528152835180850185527f21a3178efb789b50fdf476ea92b6a6478d57b2dfd41ecb9f6bc305e69ed3a15481527f2f79ab9458da2e6fc6d88aa052efe0de337bea9caedaf40e82e4f70a6abef39b818501528184015281850152825160028082529181019093529082015b6106e3610e82565b8152602001906001900390816106db57505060808201908152604080518082019091527f1088e527921f8dc223d1f10de0854431ffbe6d59a0cf180c4ef8d1a9c9da036381527f180f12eb729a9f98ec8f80485e9603110c6c6e8823ad3c344b928af1e7d6c5e160208201529051805160009061075c57fe5b602002602001018190525060405180604001604052807f27d0d79d5da6446313d21293f5853e01de319b94f475b687cdf957be7089b3d881526020017f05b777946c2d2198623ac4b1be4f4a83c31fe6e11400a2c85e8fd94b24d5bdd881525081608001516001815181106107cd57fe5b602002602001018190525090565b6107e3610e82565b6107eb610e9c565b835181526020808501519082015260408101839052600060608360808460076107d05a03fa905080801561081e57610820565bfe5b508061088d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f70616972696e672d6d756c2d6661696c65640000000000000000000000000000604482015290519081900360640190fd5b505092915050565b61089d610e82565b6108a5610eba565b8351815260208085015181830152835160408301528301516060808301919091526000908360c08460066107d05a03fa905080801561081e57508061088d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f70616972696e672d6164642d6661696c65640000000000000000000000000000604482015290519081900360640190fd5b610953610e82565b81517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd479015801561098657506020830151155b156109a657505060408051808201909152600080825260208201526109d2565b604051806040016040528084600001518152602001828560200151816109c857fe5b0683038152509150505b919050565b60408051600480825260a0820190925260009160609190816020015b6109fb610e82565b8152602001906001900390816109f357505060408051600480825260a0820190925291925060609190602082015b610a31610ed8565b815260200190600190039081610a295790505090508a82600081518110610a5457fe5b60200260200101819052508882600181518110610a6d57fe5b60200260200101819052508682600281518110610a8657fe5b60200260200101819052508482600381518110610a9f57fe5b60200260200101819052508981600081518110610ab857fe5b60200260200101819052508781600181518110610ad157fe5b60200260200101819052508581600281518110610aea57fe5b60200260200101819052508381600381518110610b0357fe5b6020026020010181905250610b188282610b27565b9b9a5050505050505050505050565b60008151835114610b9957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f70616972696e672d6c656e677468732d6661696c656400000000000000000000604482015290519081900360640190fd5b82516006810260608167ffffffffffffffff81118015610bb857600080fd5b50604051908082528060200260200182016040528015610be2578160200160208202803683370190505b50905060005b83811015610d6757868181518110610bfc57fe5b602002602001015160000151828260060260000181518110610c1a57fe5b602002602001018181525050868181518110610c3257fe5b602002602001015160200151828260060260010181518110610c5057fe5b602002602001018181525050858181518110610c6857fe5b602090810291909101015151518251839060026006850201908110610c8957fe5b602002602001018181525050858181518110610ca157fe5b60209081029190910101515160016020020151828260060260030181518110610cc657fe5b602002602001018181525050858181518110610cde57fe5b602002602001015160200151600060028110610cf657fe5b6020020151828260060260040181518110610d0d57fe5b602002602001018181525050858181518110610d2557fe5b602002602001015160200151600160028110610d3d57fe5b6020020151828260060260050181518110610d5457fe5b6020908102919091010152600101610be8565b50610d70610ef8565b6000602082602086026020860160086107d05a03fa905080801561081e575080610dfb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f70616972696e672d6f70636f64652d6661696c65640000000000000000000000604482015290519081900360640190fd5b505115159695505050505050565b6040518060600160405280610e1c610e82565b8152602001610e29610ed8565b8152602001610e36610e82565b905290565b6040518060a00160405280610e4e610e82565b8152602001610e5b610ed8565b8152602001610e68610ed8565b8152602001610e75610ed8565b8152602001606081525090565b604051806040016040528060008152602001600081525090565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280610eeb610f16565b8152602001610e36610f16565b60405180602001604052806001906020820280368337509192915050565b6040518060400160405280600290602082028036833750919291505056fea264697066735822122024417ad7370c4897419e82511c3d83506f166ddba31b701d0fcd8b344903eda264736f6c634300060b0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c806343753b4d14610030575b600080fd5b61012c600480360361012081101561004757600080fd5b6040805180820182529183019291818301918390600290839083908082843760009201829052506040805180820190915293969594608081019493509150600290835b828210156100c8576040805180820182529080840286019060029083908390808284376000920191909152505050815260019091019060200161008a565b5050604080518082018252939695948181019493509150600290839083908082843760009201919091525050604080516020818101909252929594938181019392509060019083908390808284376000920191909152509194506101409350505050565b604080519115158252519081900360200190f35b600061014a610e09565b6040805180820182528751815260208089015181830152908352815160808101835287515181840190815288518301516060808401919091529082528351808501855289840180515182525184015181850152828401528483019190915282518084018452875181528783015181840152848401528251600180825281850190945290929091828101908036833701905050905060005b600181101561021a578481600181106101f657fe5b602002015182828151811061020757fe5b60209081029190910101526001016101e1565b506102258183610243565b6102345760019250505061023b565b6000925050505b949350505050565b60007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161026e610e3b565b61027661045a565b90508060800151518551600101146102ef57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f76657269666965722d6261642d696e7075740000000000000000000000000000604482015290519081900360640190fd5b6102f7610e82565b50604080518082019091526000808252602082018190525b86518110156103e3578387828151811061032557fe5b60200260200101511061039957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f76657269666965722d6774652d736e61726b2d7363616c61722d6669656c6400604482015290519081900360640190fd5b6103d9826103d4856080015184600101815181106103b357fe5b60200260200101518a85815181106103c757fe5b60200260200101516107db565b610895565b915060010161030f565b506104068183608001516000815181106103f957fe5b6020026020010151610895565b905061043c610418866000015161094b565b8660200151846000015185602001518587604001518b6040015189606001516109d7565b61044c5760019350505050610454565b600093505050505b92915050565b610462610e3b565b6040805180820182527f2d4d9aa7e302d9df41749d5507949d05dbea33fbb16c643b22f599a2be6df2e281527f14bedd503c37ceb061d8ec60209fe345ce89830a19230301f076caff004d19266020808301919091529083528151608080820184527f0967032fcbf776d1afc985f88877f182d38480a653f2decaa9794cbc3bf3060c8285019081527f0e187847ad4c798374d0d6732bf501847dd68bc0e071241e0213bc7fc13db7ab606080850191909152908352845180860186527f304cfbd1e08a704a99f5e847d93f8c3caafddec46b7a0d379da69a4d112346a781527f1739c1b1a457a8c7313123d24d2f9192f896b7c63eea05a9d57f06547ad0cec8818601528385015285840192909252835180820185527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28186019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed828501528152845180860186527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa818601528185015285850152835190810184527f29f9eab2ec15d35ef2628cd651fe870eae2a4b327b9a411f7eb377bb6ad8f7d48185019081527f265859876cd01432520c00cc710d0c98b941bc0c3fd502edd246fd3663cd90a5828401528152835180850185527f21a3178efb789b50fdf476ea92b6a6478d57b2dfd41ecb9f6bc305e69ed3a15481527f2f79ab9458da2e6fc6d88aa052efe0de337bea9caedaf40e82e4f70a6abef39b818501528184015281850152825160028082529181019093529082015b6106e3610e82565b8152602001906001900390816106db57505060808201908152604080518082019091527f1088e527921f8dc223d1f10de0854431ffbe6d59a0cf180c4ef8d1a9c9da036381527f180f12eb729a9f98ec8f80485e9603110c6c6e8823ad3c344b928af1e7d6c5e160208201529051805160009061075c57fe5b602002602001018190525060405180604001604052807f27d0d79d5da6446313d21293f5853e01de319b94f475b687cdf957be7089b3d881526020017f05b777946c2d2198623ac4b1be4f4a83c31fe6e11400a2c85e8fd94b24d5bdd881525081608001516001815181106107cd57fe5b602002602001018190525090565b6107e3610e82565b6107eb610e9c565b835181526020808501519082015260408101839052600060608360808460076107d05a03fa905080801561081e57610820565bfe5b508061088d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f70616972696e672d6d756c2d6661696c65640000000000000000000000000000604482015290519081900360640190fd5b505092915050565b61089d610e82565b6108a5610eba565b8351815260208085015181830152835160408301528301516060808301919091526000908360c08460066107d05a03fa905080801561081e57508061088d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f70616972696e672d6164642d6661696c65640000000000000000000000000000604482015290519081900360640190fd5b610953610e82565b81517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd479015801561098657506020830151155b156109a657505060408051808201909152600080825260208201526109d2565b604051806040016040528084600001518152602001828560200151816109c857fe5b0683038152509150505b919050565b60408051600480825260a0820190925260009160609190816020015b6109fb610e82565b8152602001906001900390816109f357505060408051600480825260a0820190925291925060609190602082015b610a31610ed8565b815260200190600190039081610a295790505090508a82600081518110610a5457fe5b60200260200101819052508882600181518110610a6d57fe5b60200260200101819052508682600281518110610a8657fe5b60200260200101819052508482600381518110610a9f57fe5b60200260200101819052508981600081518110610ab857fe5b60200260200101819052508781600181518110610ad157fe5b60200260200101819052508581600281518110610aea57fe5b60200260200101819052508381600381518110610b0357fe5b6020026020010181905250610b188282610b27565b9b9a5050505050505050505050565b60008151835114610b9957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f70616972696e672d6c656e677468732d6661696c656400000000000000000000604482015290519081900360640190fd5b82516006810260608167ffffffffffffffff81118015610bb857600080fd5b50604051908082528060200260200182016040528015610be2578160200160208202803683370190505b50905060005b83811015610d6757868181518110610bfc57fe5b602002602001015160000151828260060260000181518110610c1a57fe5b602002602001018181525050868181518110610c3257fe5b602002602001015160200151828260060260010181518110610c5057fe5b602002602001018181525050858181518110610c6857fe5b602090810291909101015151518251839060026006850201908110610c8957fe5b602002602001018181525050858181518110610ca157fe5b60209081029190910101515160016020020151828260060260030181518110610cc657fe5b602002602001018181525050858181518110610cde57fe5b602002602001015160200151600060028110610cf657fe5b6020020151828260060260040181518110610d0d57fe5b602002602001018181525050858181518110610d2557fe5b602002602001015160200151600160028110610d3d57fe5b6020020151828260060260050181518110610d5457fe5b6020908102919091010152600101610be8565b50610d70610ef8565b6000602082602086026020860160086107d05a03fa905080801561081e575080610dfb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f70616972696e672d6f70636f64652d6661696c65640000000000000000000000604482015290519081900360640190fd5b505115159695505050505050565b6040518060600160405280610e1c610e82565b8152602001610e29610ed8565b8152602001610e36610e82565b905290565b6040518060a00160405280610e4e610e82565b8152602001610e5b610ed8565b8152602001610e68610ed8565b8152602001610e75610ed8565b8152602001606081525090565b604051806040016040528060008152602001600081525090565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280610eeb610f16565b8152602001610e36610f16565b60405180602001604052806001906020820280368337509192915050565b6040518060400160405280600290602082028036833750919291505056fea264697066735822122024417ad7370c4897419e82511c3d83506f166ddba31b701d0fcd8b344903eda264736f6c634300060b0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/ProofOfEfficiency.sol b/contracts/ProofOfEfficiency.sol index 28d42a655..f22445c71 100644 --- a/contracts/ProofOfEfficiency.sol +++ b/contracts/ProofOfEfficiency.sol @@ -109,13 +109,13 @@ contract ProofOfEfficiency is uint256 internal constant _RFIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617; - // Max batch byte length - // Max keccaks circuit = (2**23 / 158418) * 9 = 2376 - // Bytes per keccak = 136 - // Minimum Static keccaks batch = 2 - // Max bytes allowed = (2376 - 2) * 136 = 322864 bytes - 1 byte padding - // Rounded to 300000 bytes - uint256 public constant MAX_BATCH_LENGTH = 300000; + // Max transactions bytes that can be added in a single batch + // Max keccaks circuit = (2**23 / 158418) * 9 = 468 + // Bytes hashed per keccak = 136 + // Minimum constant keccaks batch = 4 + // Max bytes allowed = (468 - 4) * 136 = 63104 bytes - 1 byte padding + // Rounded to 60000 bytes + uint256 public constant MAX_TRANSACTIONS_BYTE_LENGTH = 60000; // Force batch timeout uint64 public constant FORCE_BATCH_TIMEOUT = 5 days; diff --git a/contracts/verifiers/Verifier.sol b/contracts/verifiers/Verifier.sol index dadd4c5a0..274387027 100644 --- a/contracts/verifiers/Verifier.sol +++ b/contracts/verifiers/Verifier.sol @@ -255,19 +255,19 @@ contract Verifier { ); vk.delta2 = Pairing.G2Point( [ - 7970398111040848580630905008774386277492919809508403212228692478707040123846, - 9358393908668718222030872571494167247652698069293259985700790093611147135618 + 18986391543422074758736270957677879006202780280582435391368920293112599345108, + 17343988694341611196515736887381458551060087505246818108736321900349596995749 ], [ - 15985219105334376951759511434301214233106325655965674525023674459931146146109, - 5309719578808206656908962462706922975273643133390418594897079890933224066847 + 15214482669768070309719182636161242607453883519400025521173394753499836948820, + 21473676576306348968119208610196260657773382101479799439281346726319206888347 ] ); vk.IC = new Pairing.G1Point[](2); vk.IC[0] = Pairing.G1Point( - 12207203096328281265282381411940884949682076555049465332726723223933471453747, - 4708450709093153906807997500977557256958875411904415551340158687015285857926 + 7478878344882032581607661276591516004361315751341887108647328295043102016355, + 10882141651060987735193389391304455988592309794394086140096949440590244136417 ); vk.IC[1] = Pairing.G1Point( diff --git a/package.json b/package.json index 9c0de62a2..b8de107cd 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@0xpolygonhermez/zkevm-contracts", "description": "Core contracts for the Polygon Hermez zkEVM", - "version": "0.5.1.0", + "version": "0.6.0.0", "repository": { "type": "git", "url": "git+https://github.com/0xPolygonHermez/contracts-zkEVM.git" From db9d22d592e97ba41621bc267ba0420745b6ca64 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Tue, 20 Dec 2022 09:35:57 +0100 Subject: [PATCH 50/71] first renaming --- .githooks/pre-commit | 4 +- .vscode/settings.json | 2 +- README.md | 2 +- compiled-contracts/Bridge.json | 4 +- compiled-contracts/BridgeMock.json | 4 +- compiled-contracts/PolygonZKEVM.json | 1476 ++++++++++++++ compiled-contracts/PolygonZKEVMMock.json | 1700 +++++++++++++++++ compiled-contracts/ProofOfEfficiency.json | 10 +- compiled-contracts/ProofOfEfficiencyMock.json | 10 +- contracts/Bridge.sol | 14 +- ...ProofOfEfficiency.sol => PolygonZKEVM.sol} | 101 +- contracts/Timelock.sol | 16 +- ...fficiencyMock.sol => PolygonZKEVMMock.sol} | 26 +- deployment/deployPoE_v2-0.js | 62 +- deployment/upgradePoE.js | 6 +- deployment/verifyPoE_v2-0.js | 2 +- docs/Bridge.md | 4 +- docs/PolygonZKEVM.md | 642 +++++++ docs/ProofOfEfficiency.md | 400 ++-- docs/Timelock.md | 6 +- test/contracts/bridge.test.js | 6 +- test/contracts/bridgeMock.test.js | 4 +- test/contracts/bridge_permit.test.js | 4 +- test/contracts/emergencyManager.test.js | 80 +- .../contracts/globalExitRootManagerL2.test.js | 4 +- test/contracts/proofOfEfficiency.test.js | 464 ++--- test/contracts/real-prover/real-flow.test.js | 40 +- test/contracts/snark_stark_input.test.js | 24 +- 28 files changed, 4494 insertions(+), 623 deletions(-) create mode 100644 compiled-contracts/PolygonZKEVM.json create mode 100644 compiled-contracts/PolygonZKEVMMock.json rename contracts/{ProofOfEfficiency.sol => PolygonZKEVM.sol} (92%) rename contracts/mocks/{ProofOfEfficiencyMock.sol => PolygonZKEVMMock.sol} (87%) create mode 100644 docs/PolygonZKEVM.md diff --git a/.githooks/pre-commit b/.githooks/pre-commit index 76aecf817..f0ff5b86c 100755 --- a/.githooks/pre-commit +++ b/.githooks/pre-commit @@ -14,9 +14,9 @@ if npm run lint; then cp artifacts/contracts/mocks/ERC20PermitMock.sol/ERC20PermitMock.json compiled-contracts/ cp artifacts/contracts/mocks/GlobalExitRootManagerL2Mock.sol/GlobalExitRootManagerL2Mock.json compiled-contracts/ cp artifacts/contracts/mocks/GlobalExitRootManagerMock.sol/GlobalExitRootManagerMock.json compiled-contracts/ - cp artifacts/contracts/mocks/ProofOfEfficiencyMock.sol/ProofOfEfficiencyMock.json compiled-contracts/ + cp artifacts/contracts/mocks/PolygonZKEVMMock.sol/PolygonZKEVMMock.json compiled-contracts/ cp artifacts/contracts/mocks/VerifierRollupHelperMock.sol/VerifierRollupHelperMock.json compiled-contracts/ - cp artifacts/contracts/ProofOfEfficiency.sol/ProofOfEfficiency.json compiled-contracts/ + cp artifacts/contracts/PolygonZKEVM.sol/PolygonZKEVM.json compiled-contracts/ cp artifacts/contracts/verifiers/Verifier.sol/Verifier.json compiled-contracts/ git add compiled-contracts exit 0 diff --git a/.vscode/settings.json b/.vscode/settings.json index 5ec6e1ece..1ba1c63d0 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,5 @@ { - "editor.formatOnSave": false, + "editor.formatOnSave": true, "solidity.linter": "solhint", "solidity.compileUsingRemoteVersion": "v0.8.15+commit.e14f2714" } diff --git a/README.md b/README.md index 23e2a6d0b..ca3e7d1f1 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ Private keys and mnemonics contained in this repository are used for internal te - `Bridge.sol`: transfer assets between chains - `GlobalExitRootManager.sol`: manage global exit root in L1 - `GlobalExitRootManagerL2.sol`: manage global exit root in L2 - - `ProofOfEfficiency.sol`: consensus algorithm used by polyhon hermez zkevm + - `PolygonZKEVM.sol`: consensus algorithm used by polyhon hermez zkevm - `docs`: specs and useful links - `test`: contracts tests diff --git a/compiled-contracts/Bridge.json b/compiled-contracts/Bridge.json index dad5c1eb2..e62e3962a 100644 --- a/compiled-contracts/Bridge.json +++ b/compiled-contracts/Bridge.json @@ -699,8 +699,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50614744806100206000396000f3fe608060405260043610620001675760003560e01c806381b1c17411620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b806381b1c17414620003735780638f61151914620003ad5780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b80633ae05047116200011e5780633ae0504714620002a25780633da8168214620002ba5780633e19704314620002df578063463855491462000304578063647c576c14620003295780637b6323c1146200034e57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d3660046200237f565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b50620001836200096d565b348015620001db57600080fd5b50620001f3620001ed3660046200240c565b620009a6565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002448565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b5062000224620009f9565b348015620002c757600080fd5b50620001a1620002d936600462002537565b62000aec565b348015620002ec57600080fd5b5062000224620002fe366004620025b5565b62000bee565b3480156200031157600080fd5b506200018362000323366004620026c6565b62000c7b565b3480156200033657600080fd5b506200018362000348366004620027ad565b62000e14565b3480156200035b57600080fd5b50620001836200036d366004620026c6565b62000f73565b3480156200038057600080fd5b50620001f362000392366004620027fd565b6024602052600090815260409020546001600160a01b031681565b348015620003ba57600080fd5b50602754620001f3906001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620027fd565b62001414565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002817565b62001459565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620028cb565b62001570565b348015620004c357600080fd5b5062000183620016c7565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620027fd565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002933565b60405180910390fd5b60225463ffffffff6101009091048116908616036200058f5760405162461bcd60e51b815260040162000553906200299b565b60008060606001600160a01b03891662000616578534146200060c5760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201526e4d415443485f4d53475f56414c554560881b606482015260840162000553565b6000915062000887565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620006e457604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af1158015620006ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006d19190620029f4565b5060208101518151909450925062000885565b8415620006f957620006f98a888888620016fe565b620007106001600160a01b038b1633308a62001b02565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000767573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000791919081019062002a8f565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007d0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007fa919081019062002a8f565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000839573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200085f919062002ac8565b604051602001620008739392919062002b16565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b87602154604051620008c998979695949392919062002b53565b60405180910390a1620008f4620008ee600084868c8c8c888051906020012062000bee565b62001b6f565b6026546001600160a01b03166333d6247d6200090f620009f9565b6040518263ffffffff1660e01b81526004016200092e91815260200190565b600060405180830381600087803b1580156200094957600080fd5b505af11580156200095e573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b031633146200099a5760405162461bcd60e51b8152600401620005539062002bc0565b620009a462001cc0565b565b6000602460008484604051602001620009c192919062002c31565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000ae3578260011660010362000a64576001816020811062000a305762000a3062002c5b565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000a91565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a9e60028462002c9d565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000ada9062002cb4565b91505062000a04565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000bdf578160011660010362000b695786818151811062000b275762000b2762002c5b565b60200260200101518360405160200162000b4b929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000bbb565b8287828151811062000b7f5762000b7f62002c5b565b602002602001015160405160200162000ba2929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000bc860028362002c9d565b91508062000bd68162002cb4565b91505062000afc565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000ca15760405162461bcd60e51b8152600401620005539062002933565b62000cb78a8a8a8a8a8a8a8a8a8a600162001d1e565b62000cc88963ffffffff1662001faf565b6000836001600160a01b03168387898560405160240162000cec9392919062002cd0565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d23919062002d0b565b60006040518083038185875af1925050503d806000811462000d62576040519150601f19603f3d011682016040523d82523d6000602084013e62000d67565b606091505b505090508062000dc65760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f46416044820152631253115160e21b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000dff95949392919062002d29565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000e355750600054600160ff909116105b8062000e515750303b15801562000e51575060005460ff166001145b62000eb65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000eda576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000f6d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff161562000f995760405162461bcd60e51b8152600401620005539062002933565b62000faf8a8a8a8a8a8a8a8a8a8a600062001d1e565b62000fc08963ffffffff1662001faf565b6001600160a01b038516620010a957604080516000808252602082019092526001600160a01b03851690849060405162000ffb919062002d0b565b60006040518083038185875af1925050503d80600081146200103a576040519150601f19603f3d011682016040523d82523d6000602084013e6200103f565b606091505b5050905080620010a25760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201526617d1905253115160ca1b606482015260840162000553565b50620013c7565b60225463ffffffff610100909104811690871603620010de57620010d86001600160a01b038616848462001ff1565b620013c7565b60008686604051602001620010f592919062002c31565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200134c5760008060008580602001905181019062001147919062002d60565b9250925092506000858484846040516200116190620022e5565b6200116f9392919062002b16565b8190604051809103906000f590508015801562001190573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af1158015620011e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200120b9190620029f4565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200133a9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620013c4565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200139c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013c29190620029f4565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200140095949392919062002d29565b60405180910390a150505050505050505050565b600080620014256101008462002c9d565b90506000620014376101008562002dd6565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200147192919062002c31565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014a490620022e5565b601f1982820381018352601f909101166040819052620014d1908d908d908d908d908d9060200162002e16565b60408051601f1981840301815290829052620014f1929160200162002e57565b604051602081830303815290604052805190602001206040516020016200154a94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015965760405162461bcd60e51b8152600401620005539062002933565b60225463ffffffff610100909104811690841603620015c95760405162461bcd60e51b815260040162000553906200299b565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff1633868634876021546040516200161d98979695949392919062002b53565b60405180910390a162001654620008ee6001602260019054906101000a900463ffffffff1633878734888051906020012062000bee565b6026546001600160a01b03166333d6247d6200166f620009f9565b6040518263ffffffff1660e01b81526004016200168e91815260200190565b600060405180830381600087803b158015620016a957600080fd5b505af1158015620016be573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620016f45760405162461bcd60e51b8152600401620005539062002bc0565b620009a462002023565b60006200174183838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620020d292505050565b9050632afa533160e01b6001600160e01b03198216016200192a57600080808080808062001773896004818d62002e8a565b81019062001782919062002eb6565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620017c45760405162461bcd60e51b8152600401620005539062002f11565b6001600160a01b0386163014620017ef5760405162461bcd60e51b8152600401620005539062002f61565b8a8514620018565760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201526c09e8aa6be9c9ea8be9a82a8869609b1b606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620018d6919062002d0b565b6000604051808303816000865af19150503d806000811462001915576040519150601f19603f3d011682016040523d82523d6000602084013e6200191a565b606091505b5050505050505050505062001afb565b6001600160e01b031981166323f2ebc360e21b146200198c5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000553565b600080808080808080620019a48a6004818e62002e8a565b810190620019b3919062002fa6565b97509750975097509750975097509750336001600160a01b0316886001600160a01b031614620019f75760405162461bcd60e51b8152600401620005539062002f11565b6001600160a01b038716301462001a225760405162461bcd60e51b8152600401620005539062002f61565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001aab919062002d0b565b6000604051808303816000865af19150503d806000811462001aea576040519150601f19603f3d011682016040523d82523d6000602084013e62001aef565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000f6d9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620020d9565b80600162001b80602060026200312f565b62001b8c91906200313d565b6021541062001bf15760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001c06919062003157565b909155505060215460005b602081101562001cb0578160011660010362001c4657826001826020811062001c3e5762001c3e62002c5b565b015550505050565b6001816020811062001c5c5762001c5c62002c5b565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001c99919062002c9d565b91508062001ca78162002cb4565b91505062001c11565b5062001cbb62003172565b505050565b60225460ff161562001ce65760405162461bcd60e51b8152600401620005539062002933565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001d2f8a63ffffffff1662001414565b1562001d8a5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c416044820152631253515160e21b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001dfe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e24919062003188565b90508060000362001e8e5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201526c17d493d3d517d2539590531251609a1b606482015260840162000553565b60225463ffffffff878116610100909204161462001f155760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d41544348000000000000000000606482015260840162000553565b602254600090610100900463ffffffff1662001f3357508862001f36565b50895b62001f6162001f52848b8b8b8b8b8b8051906020012062000bee565b8e8e63ffffffff168462000aec565b6200095e5760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c4944604482015260640162000553565b600062001fbf6101008362002c9d565b9050600062001fd16101008462002dd6565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001cbb90849063a9059cbb60e01b9060640162001b37565b60225460ff166200209d5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002130826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620021b29092919063ffffffff16565b80519091501562001cbb5780806020019051810190620021519190620029f4565b62001cbb5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000be6848460008585600080866001600160a01b03168587604051620021dc919062002d0b565b60006040518083038185875af1925050503d80600081146200221b576040519150601f19603f3d011682016040523d82523d6000602084013e62002220565b606091505b509150915062002233878383876200223e565b979650505050505050565b60608315620022b2578251600003620022aa576001600160a01b0385163b620022aa5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000be6565b62000be68383815115620022c95781518083602001fd5b8060405162461bcd60e51b8152600401620005539190620031a2565b61155780620031b883390190565b6001600160a01b03811681146200230957600080fd5b50565b80356200231981620022f3565b919050565b803563ffffffff811681146200231957600080fd5b60008083601f8401126200234657600080fd5b50813567ffffffffffffffff8111156200235f57600080fd5b6020830191508360208285010111156200237857600080fd5b9250929050565b60008060008060008060a087890312156200239957600080fd5b8635620023a681620022f3565b9550620023b6602088016200231e565b94506040870135620023c881620022f3565b935060608701359250608087013567ffffffffffffffff811115620023ec57600080fd5b620023fa89828a0162002333565b979a9699509497509295939492505050565b600080604083850312156200242057600080fd5b6200242b836200231e565b915060208301356200243d81620022f3565b809150509250929050565b6000602082840312156200245b57600080fd5b81356200246881620022f3565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620024b157620024b16200246f565b604052919050565b600082601f830112620024cb57600080fd5b8135602067ffffffffffffffff821115620024ea57620024ea6200246f565b8160051b620024fb82820162002485565b92835284810182019282810190878511156200251657600080fd5b83870192505b8483101562002233578235825291830191908301906200251c565b600080600080608085870312156200254e57600080fd5b84359350602085013567ffffffffffffffff808211156200256e57600080fd5b6200257c88838901620024b9565b94506040870135915080821682146200259457600080fd5b509396929550929360600135925050565b60ff811681146200230957600080fd5b600080600080600080600060e0888a031215620025d157600080fd5b8735620025de81620025a5565b9650620025ee602089016200231e565b955060408801356200260081620022f3565b945062002610606089016200231e565b935060808801356200262281620022f3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200265c576200265c6200246f565b50601f01601f191660200190565b600082601f8301126200267c57600080fd5b8135620026936200268d826200263f565b62002485565b818152846020838601011115620026a957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620026e757600080fd5b8a3567ffffffffffffffff808211156200270057600080fd5b6200270e8e838f01620024b9565b9b506200271e60208e016200231e565b9a5060408d0135995060608d013598506200273c60808e016200231e565b97506200274c60a08e016200230c565b96506200275c60c08e016200231e565b95506200276c60e08e016200230c565b94506101008d013593506101208d01359150808211156200278c57600080fd5b506200279b8d828e016200266a565b9150509295989b9194979a5092959850565b600080600060608486031215620027c357600080fd5b620027ce846200231e565b92506020840135620027e081620022f3565b91506040840135620027f281620022f3565b809150509250925092565b6000602082840312156200281057600080fd5b5035919050565b600080600080600080600060a0888a0312156200283357600080fd5b6200283e886200231e565b965060208801356200285081620022f3565b9550604088013567ffffffffffffffff808211156200286e57600080fd5b6200287c8b838c0162002333565b909750955060608a01359150808211156200289657600080fd5b50620028a58a828b0162002333565b9094509250506080880135620028bb81620025a5565b8091505092959891949750929550565b600080600060608486031215620028e157600080fd5b620028ec846200231e565b92506020840135620028fe81620022f3565b9150604084013567ffffffffffffffff8111156200291b57600080fd5b62002929868287016200266a565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b6020808252602a908201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e546040820152692fa122afa4aa29a2a62360b11b606082015260800190565b80151581146200230957600080fd5b60006020828403121562002a0757600080fd5b81516200246881620029e5565b60005b8381101562002a3157818101518382015260200162002a17565b8381111562000f6d5750506000910152565b600082601f83011262002a5557600080fd5b815162002a666200268d826200263f565b81815284602083860101111562002a7c57600080fd5b62000be682602083016020870162002a14565b60006020828403121562002aa257600080fd5b815167ffffffffffffffff81111562002aba57600080fd5b62000be68482850162002a43565b60006020828403121562002adb57600080fd5b81516200246881620025a5565b6000815180845262002b0281602086016020860162002a14565b601f01601f19169290920160200192915050565b60608152600062002b2b606083018662002ae8565b828103602084015262002b3f818662002ae8565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002ba78483018762002ae8565b925080851660e085015250509998505050505050505050565b6020808252604b908201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660408201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60608201526a18de4818dbdb9d1c9858dd60aa1b608082015260a00190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002caf5762002caf62002c71565b500490565b60006001820162002cc95762002cc962002c87565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d029083018462002ae8565b95945050505050565b6000825162002d1f81846020870162002a14565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002d7657600080fd5b835167ffffffffffffffff8082111562002d8f57600080fd5b62002d9d8783880162002a43565b9450602086015191508082111562002db457600080fd5b5062002dc38682870162002a43565b9250506040840151620027f281620025a5565b60008262002de85762002de862002c71565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e2c60608301878962002ded565b828103602084015262002e4181868862002ded565b91505060ff831660408301529695505050505050565b6000835162002e6b81846020880162002a14565b83519083019062002e8181836020880162002a14565b01949350505050565b6000808585111562002e9b57600080fd5b8386111562002ea957600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002ed257600080fd5b873562002edf81620022f3565b9650602088013562002ef181620022f3565b9550604088013594506060880135935060808801356200262281620025a5565b60208082526030908201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560408201526f29aa2fa122afaa2422afa9a2a72222a960811b606082015260800190565b60208082526025908201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f42456040820152645f5448495360d81b606082015260800190565b600080600080600080600080610100898b03121562002fc457600080fd5b883562002fd181620022f3565b9750602089013562002fe381620022f3565b9650604089013595506060890135945060808901356200300381620029e5565b935060a08901356200301581620025a5565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200307357816000190482111562003057576200305762002c87565b808516156200306557918102915b93841c939080029062003037565b509250929050565b6000826200308c57506001620009f3565b816200309b57506000620009f3565b8160018114620030b45760028114620030bf57620030df565b6001915050620009f3565b60ff841115620030d357620030d362002c87565b50506001821b620009f3565b5060208310610133831016604e8410600b841016171562003104575081810a620009f3565b62003110838362003032565b806000190482111562003127576200312762002c87565b029392505050565b60006200246883836200307b565b60008282101562003152576200315262002c87565b500390565b600082198211156200316d576200316d62002c87565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200319b57600080fd5b5051919050565b60208152600062002468602083018462002ae856fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b14f80bfcbda3f7be499de7c67ec81639549928b9cee16384da9f2fb8c22dce64736f6c634300080f0033a264697066735822122033c20339edf34bfd82367a6744e7273fc5475f2279e1521b62542680e057cc4164736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001675760003560e01c806381b1c17411620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b806381b1c17414620003735780638f61151914620003ad5780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b80633ae05047116200011e5780633ae0504714620002a25780633da8168214620002ba5780633e19704314620002df578063463855491462000304578063647c576c14620003295780637b6323c1146200034e57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d3660046200237f565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b50620001836200096d565b348015620001db57600080fd5b50620001f3620001ed3660046200240c565b620009a6565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002448565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b5062000224620009f9565b348015620002c757600080fd5b50620001a1620002d936600462002537565b62000aec565b348015620002ec57600080fd5b5062000224620002fe366004620025b5565b62000bee565b3480156200031157600080fd5b506200018362000323366004620026c6565b62000c7b565b3480156200033657600080fd5b506200018362000348366004620027ad565b62000e14565b3480156200035b57600080fd5b50620001836200036d366004620026c6565b62000f73565b3480156200038057600080fd5b50620001f362000392366004620027fd565b6024602052600090815260409020546001600160a01b031681565b348015620003ba57600080fd5b50602754620001f3906001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620027fd565b62001414565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002817565b62001459565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620028cb565b62001570565b348015620004c357600080fd5b5062000183620016c7565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620027fd565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002933565b60405180910390fd5b60225463ffffffff6101009091048116908616036200058f5760405162461bcd60e51b815260040162000553906200299b565b60008060606001600160a01b03891662000616578534146200060c5760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201526e4d415443485f4d53475f56414c554560881b606482015260840162000553565b6000915062000887565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620006e457604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af1158015620006ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006d19190620029f4565b5060208101518151909450925062000885565b8415620006f957620006f98a888888620016fe565b620007106001600160a01b038b1633308a62001b02565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000767573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000791919081019062002a8f565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007d0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007fa919081019062002a8f565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000839573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200085f919062002ac8565b604051602001620008739392919062002b16565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b87602154604051620008c998979695949392919062002b53565b60405180910390a1620008f4620008ee600084868c8c8c888051906020012062000bee565b62001b6f565b6026546001600160a01b03166333d6247d6200090f620009f9565b6040518263ffffffff1660e01b81526004016200092e91815260200190565b600060405180830381600087803b1580156200094957600080fd5b505af11580156200095e573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b031633146200099a5760405162461bcd60e51b8152600401620005539062002bc0565b620009a462001cc0565b565b6000602460008484604051602001620009c192919062002c31565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000ae3578260011660010362000a64576001816020811062000a305762000a3062002c5b565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000a91565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a9e60028462002c9d565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000ada9062002cb4565b91505062000a04565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000bdf578160011660010362000b695786818151811062000b275762000b2762002c5b565b60200260200101518360405160200162000b4b929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000bbb565b8287828151811062000b7f5762000b7f62002c5b565b602002602001015160405160200162000ba2929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000bc860028362002c9d565b91508062000bd68162002cb4565b91505062000afc565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000ca15760405162461bcd60e51b8152600401620005539062002933565b62000cb78a8a8a8a8a8a8a8a8a8a600162001d1e565b62000cc88963ffffffff1662001faf565b6000836001600160a01b03168387898560405160240162000cec9392919062002cd0565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d23919062002d0b565b60006040518083038185875af1925050503d806000811462000d62576040519150601f19603f3d011682016040523d82523d6000602084013e62000d67565b606091505b505090508062000dc65760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f46416044820152631253115160e21b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000dff95949392919062002d29565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000e355750600054600160ff909116105b8062000e515750303b15801562000e51575060005460ff166001145b62000eb65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000eda576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000f6d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff161562000f995760405162461bcd60e51b8152600401620005539062002933565b62000faf8a8a8a8a8a8a8a8a8a8a600062001d1e565b62000fc08963ffffffff1662001faf565b6001600160a01b038516620010a957604080516000808252602082019092526001600160a01b03851690849060405162000ffb919062002d0b565b60006040518083038185875af1925050503d80600081146200103a576040519150601f19603f3d011682016040523d82523d6000602084013e6200103f565b606091505b5050905080620010a25760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201526617d1905253115160ca1b606482015260840162000553565b50620013c7565b60225463ffffffff610100909104811690871603620010de57620010d86001600160a01b038616848462001ff1565b620013c7565b60008686604051602001620010f592919062002c31565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200134c5760008060008580602001905181019062001147919062002d60565b9250925092506000858484846040516200116190620022e5565b6200116f9392919062002b16565b8190604051809103906000f590508015801562001190573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af1158015620011e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200120b9190620029f4565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200133a9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620013c4565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200139c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013c29190620029f4565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200140095949392919062002d29565b60405180910390a150505050505050505050565b600080620014256101008462002c9d565b90506000620014376101008562002dd6565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200147192919062002c31565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014a490620022e5565b601f1982820381018352601f909101166040819052620014d1908d908d908d908d908d9060200162002e16565b60408051601f1981840301815290829052620014f1929160200162002e57565b604051602081830303815290604052805190602001206040516020016200154a94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015965760405162461bcd60e51b8152600401620005539062002933565b60225463ffffffff610100909104811690841603620015c95760405162461bcd60e51b815260040162000553906200299b565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff1633868634876021546040516200161d98979695949392919062002b53565b60405180910390a162001654620008ee6001602260019054906101000a900463ffffffff1633878734888051906020012062000bee565b6026546001600160a01b03166333d6247d6200166f620009f9565b6040518263ffffffff1660e01b81526004016200168e91815260200190565b600060405180830381600087803b158015620016a957600080fd5b505af1158015620016be573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620016f45760405162461bcd60e51b8152600401620005539062002bc0565b620009a462002023565b60006200174183838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620020d292505050565b9050632afa533160e01b6001600160e01b03198216016200192a57600080808080808062001773896004818d62002e8a565b81019062001782919062002eb6565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620017c45760405162461bcd60e51b8152600401620005539062002f11565b6001600160a01b0386163014620017ef5760405162461bcd60e51b8152600401620005539062002f61565b8a8514620018565760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201526c09e8aa6be9c9ea8be9a82a8869609b1b606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620018d6919062002d0b565b6000604051808303816000865af19150503d806000811462001915576040519150601f19603f3d011682016040523d82523d6000602084013e6200191a565b606091505b5050505050505050505062001afb565b6001600160e01b031981166323f2ebc360e21b146200198c5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000553565b600080808080808080620019a48a6004818e62002e8a565b810190620019b3919062002fa6565b97509750975097509750975097509750336001600160a01b0316886001600160a01b031614620019f75760405162461bcd60e51b8152600401620005539062002f11565b6001600160a01b038716301462001a225760405162461bcd60e51b8152600401620005539062002f61565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001aab919062002d0b565b6000604051808303816000865af19150503d806000811462001aea576040519150601f19603f3d011682016040523d82523d6000602084013e62001aef565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000f6d9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620020d9565b80600162001b80602060026200312f565b62001b8c91906200313d565b6021541062001bf15760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001c06919062003157565b909155505060215460005b602081101562001cb0578160011660010362001c4657826001826020811062001c3e5762001c3e62002c5b565b015550505050565b6001816020811062001c5c5762001c5c62002c5b565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001c99919062002c9d565b91508062001ca78162002cb4565b91505062001c11565b5062001cbb62003172565b505050565b60225460ff161562001ce65760405162461bcd60e51b8152600401620005539062002933565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001d2f8a63ffffffff1662001414565b1562001d8a5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c416044820152631253515160e21b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001dfe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e24919062003188565b90508060000362001e8e5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201526c17d493d3d517d2539590531251609a1b606482015260840162000553565b60225463ffffffff878116610100909204161462001f155760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d41544348000000000000000000606482015260840162000553565b602254600090610100900463ffffffff1662001f3357508862001f36565b50895b62001f6162001f52848b8b8b8b8b8b8051906020012062000bee565b8e8e63ffffffff168462000aec565b6200095e5760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c4944604482015260640162000553565b600062001fbf6101008362002c9d565b9050600062001fd16101008462002dd6565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001cbb90849063a9059cbb60e01b9060640162001b37565b60225460ff166200209d5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002130826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620021b29092919063ffffffff16565b80519091501562001cbb5780806020019051810190620021519190620029f4565b62001cbb5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000be6848460008585600080866001600160a01b03168587604051620021dc919062002d0b565b60006040518083038185875af1925050503d80600081146200221b576040519150601f19603f3d011682016040523d82523d6000602084013e62002220565b606091505b509150915062002233878383876200223e565b979650505050505050565b60608315620022b2578251600003620022aa576001600160a01b0385163b620022aa5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000be6565b62000be68383815115620022c95781518083602001fd5b8060405162461bcd60e51b8152600401620005539190620031a2565b61155780620031b883390190565b6001600160a01b03811681146200230957600080fd5b50565b80356200231981620022f3565b919050565b803563ffffffff811681146200231957600080fd5b60008083601f8401126200234657600080fd5b50813567ffffffffffffffff8111156200235f57600080fd5b6020830191508360208285010111156200237857600080fd5b9250929050565b60008060008060008060a087890312156200239957600080fd5b8635620023a681620022f3565b9550620023b6602088016200231e565b94506040870135620023c881620022f3565b935060608701359250608087013567ffffffffffffffff811115620023ec57600080fd5b620023fa89828a0162002333565b979a9699509497509295939492505050565b600080604083850312156200242057600080fd5b6200242b836200231e565b915060208301356200243d81620022f3565b809150509250929050565b6000602082840312156200245b57600080fd5b81356200246881620022f3565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620024b157620024b16200246f565b604052919050565b600082601f830112620024cb57600080fd5b8135602067ffffffffffffffff821115620024ea57620024ea6200246f565b8160051b620024fb82820162002485565b92835284810182019282810190878511156200251657600080fd5b83870192505b8483101562002233578235825291830191908301906200251c565b600080600080608085870312156200254e57600080fd5b84359350602085013567ffffffffffffffff808211156200256e57600080fd5b6200257c88838901620024b9565b94506040870135915080821682146200259457600080fd5b509396929550929360600135925050565b60ff811681146200230957600080fd5b600080600080600080600060e0888a031215620025d157600080fd5b8735620025de81620025a5565b9650620025ee602089016200231e565b955060408801356200260081620022f3565b945062002610606089016200231e565b935060808801356200262281620022f3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200265c576200265c6200246f565b50601f01601f191660200190565b600082601f8301126200267c57600080fd5b8135620026936200268d826200263f565b62002485565b818152846020838601011115620026a957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620026e757600080fd5b8a3567ffffffffffffffff808211156200270057600080fd5b6200270e8e838f01620024b9565b9b506200271e60208e016200231e565b9a5060408d0135995060608d013598506200273c60808e016200231e565b97506200274c60a08e016200230c565b96506200275c60c08e016200231e565b95506200276c60e08e016200230c565b94506101008d013593506101208d01359150808211156200278c57600080fd5b506200279b8d828e016200266a565b9150509295989b9194979a5092959850565b600080600060608486031215620027c357600080fd5b620027ce846200231e565b92506020840135620027e081620022f3565b91506040840135620027f281620022f3565b809150509250925092565b6000602082840312156200281057600080fd5b5035919050565b600080600080600080600060a0888a0312156200283357600080fd5b6200283e886200231e565b965060208801356200285081620022f3565b9550604088013567ffffffffffffffff808211156200286e57600080fd5b6200287c8b838c0162002333565b909750955060608a01359150808211156200289657600080fd5b50620028a58a828b0162002333565b9094509250506080880135620028bb81620025a5565b8091505092959891949750929550565b600080600060608486031215620028e157600080fd5b620028ec846200231e565b92506020840135620028fe81620022f3565b9150604084013567ffffffffffffffff8111156200291b57600080fd5b62002929868287016200266a565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b6020808252602a908201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e546040820152692fa122afa4aa29a2a62360b11b606082015260800190565b80151581146200230957600080fd5b60006020828403121562002a0757600080fd5b81516200246881620029e5565b60005b8381101562002a3157818101518382015260200162002a17565b8381111562000f6d5750506000910152565b600082601f83011262002a5557600080fd5b815162002a666200268d826200263f565b81815284602083860101111562002a7c57600080fd5b62000be682602083016020870162002a14565b60006020828403121562002aa257600080fd5b815167ffffffffffffffff81111562002aba57600080fd5b62000be68482850162002a43565b60006020828403121562002adb57600080fd5b81516200246881620025a5565b6000815180845262002b0281602086016020860162002a14565b601f01601f19169290920160200192915050565b60608152600062002b2b606083018662002ae8565b828103602084015262002b3f818662002ae8565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002ba78483018762002ae8565b925080851660e085015250509998505050505050505050565b6020808252604b908201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660408201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60608201526a18de4818dbdb9d1c9858dd60aa1b608082015260a00190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002caf5762002caf62002c71565b500490565b60006001820162002cc95762002cc962002c87565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d029083018462002ae8565b95945050505050565b6000825162002d1f81846020870162002a14565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002d7657600080fd5b835167ffffffffffffffff8082111562002d8f57600080fd5b62002d9d8783880162002a43565b9450602086015191508082111562002db457600080fd5b5062002dc38682870162002a43565b9250506040840151620027f281620025a5565b60008262002de85762002de862002c71565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e2c60608301878962002ded565b828103602084015262002e4181868862002ded565b91505060ff831660408301529695505050505050565b6000835162002e6b81846020880162002a14565b83519083019062002e8181836020880162002a14565b01949350505050565b6000808585111562002e9b57600080fd5b8386111562002ea957600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002ed257600080fd5b873562002edf81620022f3565b9650602088013562002ef181620022f3565b9550604088013594506060880135935060808801356200262281620025a5565b60208082526030908201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560408201526f29aa2fa122afaa2422afa9a2a72222a960811b606082015260800190565b60208082526025908201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f42456040820152645f5448495360d81b606082015260800190565b600080600080600080600080610100898b03121562002fc457600080fd5b883562002fd181620022f3565b9750602089013562002fe381620022f3565b9650604089013595506060890135945060808901356200300381620029e5565b935060a08901356200301581620025a5565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200307357816000190482111562003057576200305762002c87565b808516156200306557918102915b93841c939080029062003037565b509250929050565b6000826200308c57506001620009f3565b816200309b57506000620009f3565b8160018114620030b45760028114620030bf57620030df565b6001915050620009f3565b60ff841115620030d357620030d362002c87565b50506001821b620009f3565b5060208310610133831016604e8410600b841016171562003104575081810a620009f3565b62003110838362003032565b806000190482111562003127576200312762002c87565b029392505050565b60006200246883836200307b565b60008282101562003152576200315262002c87565b500390565b600082198211156200316d576200316d62002c87565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200319b57600080fd5b5051919050565b60208152600062002468602083018462002ae856fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b14f80bfcbda3f7be499de7c67ec81639549928b9cee16384da9f2fb8c22dce64736f6c634300080f0033a264697066735822122033c20339edf34bfd82367a6744e7273fc5475f2279e1521b62542680e057cc4164736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50614730806100206000396000f3fe608060405260043610620001675760003560e01c806381b1c17411620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b806381b1c17414620003735780638f61151914620003ad5780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b80633ae05047116200011e5780633ae0504714620002a25780633da8168214620002ba5780633e19704314620002df578063463855491462000304578063647c576c14620003295780637b6323c1146200034e57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d3660046200237f565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b50620001836200096d565b348015620001db57600080fd5b50620001f3620001ed3660046200240c565b620009a6565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002448565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b5062000224620009f9565b348015620002c757600080fd5b50620001a1620002d936600462002537565b62000aec565b348015620002ec57600080fd5b5062000224620002fe366004620025b5565b62000bee565b3480156200031157600080fd5b506200018362000323366004620026c6565b62000c7b565b3480156200033657600080fd5b506200018362000348366004620027ad565b62000e14565b3480156200035b57600080fd5b50620001836200036d366004620026c6565b62000f73565b3480156200038057600080fd5b50620001f362000392366004620027fd565b6024602052600090815260409020546001600160a01b031681565b348015620003ba57600080fd5b50602754620001f3906001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620027fd565b62001414565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002817565b62001459565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620028cb565b62001570565b348015620004c357600080fd5b5062000183620016c7565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620027fd565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002933565b60405180910390fd5b60225463ffffffff6101009091048116908616036200058f5760405162461bcd60e51b815260040162000553906200299b565b60008060606001600160a01b03891662000616578534146200060c5760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201526e4d415443485f4d53475f56414c554560881b606482015260840162000553565b6000915062000887565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620006e457604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af1158015620006ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006d19190620029f4565b5060208101518151909450925062000885565b8415620006f957620006f98a888888620016fe565b620007106001600160a01b038b1633308a62001b02565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000767573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000791919081019062002a8f565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007d0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007fa919081019062002a8f565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000839573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200085f919062002ac8565b604051602001620008739392919062002b16565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b87602154604051620008c998979695949392919062002b53565b60405180910390a1620008f4620008ee600084868c8c8c888051906020012062000bee565b62001b6f565b6026546001600160a01b03166333d6247d6200090f620009f9565b6040518263ffffffff1660e01b81526004016200092e91815260200190565b600060405180830381600087803b1580156200094957600080fd5b505af11580156200095e573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b031633146200099a5760405162461bcd60e51b8152600401620005539062002bc0565b620009a462001cc0565b565b6000602460008484604051602001620009c192919062002c1d565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000ae3578260011660010362000a64576001816020811062000a305762000a3062002c47565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000a91565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a9e60028462002c89565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000ada9062002ca0565b91505062000a04565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000bdf578160011660010362000b695786818151811062000b275762000b2762002c47565b60200260200101518360405160200162000b4b929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000bbb565b8287828151811062000b7f5762000b7f62002c47565b602002602001015160405160200162000ba2929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000bc860028362002c89565b91508062000bd68162002ca0565b91505062000afc565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000ca15760405162461bcd60e51b8152600401620005539062002933565b62000cb78a8a8a8a8a8a8a8a8a8a600162001d1e565b62000cc88963ffffffff1662001faf565b6000836001600160a01b03168387898560405160240162000cec9392919062002cbc565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d23919062002cf7565b60006040518083038185875af1925050503d806000811462000d62576040519150601f19603f3d011682016040523d82523d6000602084013e62000d67565b606091505b505090508062000dc65760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f46416044820152631253115160e21b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000dff95949392919062002d15565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000e355750600054600160ff909116105b8062000e515750303b15801562000e51575060005460ff166001145b62000eb65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000eda576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000f6d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff161562000f995760405162461bcd60e51b8152600401620005539062002933565b62000faf8a8a8a8a8a8a8a8a8a8a600062001d1e565b62000fc08963ffffffff1662001faf565b6001600160a01b038516620010a957604080516000808252602082019092526001600160a01b03851690849060405162000ffb919062002cf7565b60006040518083038185875af1925050503d80600081146200103a576040519150601f19603f3d011682016040523d82523d6000602084013e6200103f565b606091505b5050905080620010a25760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201526617d1905253115160ca1b606482015260840162000553565b50620013c7565b60225463ffffffff610100909104811690871603620010de57620010d86001600160a01b038616848462001ff1565b620013c7565b60008686604051602001620010f592919062002c1d565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200134c5760008060008580602001905181019062001147919062002d4c565b9250925092506000858484846040516200116190620022e5565b6200116f9392919062002b16565b8190604051809103906000f590508015801562001190573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af1158015620011e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200120b9190620029f4565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200133a9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620013c4565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200139c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013c29190620029f4565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200140095949392919062002d15565b60405180910390a150505050505050505050565b600080620014256101008462002c89565b90506000620014376101008562002dc2565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200147192919062002c1d565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014a490620022e5565b601f1982820381018352601f909101166040819052620014d1908d908d908d908d908d9060200162002e02565b60408051601f1981840301815290829052620014f1929160200162002e43565b604051602081830303815290604052805190602001206040516020016200154a94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015965760405162461bcd60e51b8152600401620005539062002933565b60225463ffffffff610100909104811690841603620015c95760405162461bcd60e51b815260040162000553906200299b565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff1633868634876021546040516200161d98979695949392919062002b53565b60405180910390a162001654620008ee6001602260019054906101000a900463ffffffff1633878734888051906020012062000bee565b6026546001600160a01b03166333d6247d6200166f620009f9565b6040518263ffffffff1660e01b81526004016200168e91815260200190565b600060405180830381600087803b158015620016a957600080fd5b505af1158015620016be573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620016f45760405162461bcd60e51b8152600401620005539062002bc0565b620009a462002023565b60006200174183838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620020d292505050565b9050632afa533160e01b6001600160e01b03198216016200192a57600080808080808062001773896004818d62002e76565b81019062001782919062002ea2565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620017c45760405162461bcd60e51b8152600401620005539062002efd565b6001600160a01b0386163014620017ef5760405162461bcd60e51b8152600401620005539062002f4d565b8a8514620018565760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201526c09e8aa6be9c9ea8be9a82a8869609b1b606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620018d6919062002cf7565b6000604051808303816000865af19150503d806000811462001915576040519150601f19603f3d011682016040523d82523d6000602084013e6200191a565b606091505b5050505050505050505062001afb565b6001600160e01b031981166323f2ebc360e21b146200198c5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000553565b600080808080808080620019a48a6004818e62002e76565b810190620019b3919062002f92565b97509750975097509750975097509750336001600160a01b0316886001600160a01b031614620019f75760405162461bcd60e51b8152600401620005539062002efd565b6001600160a01b038716301462001a225760405162461bcd60e51b8152600401620005539062002f4d565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001aab919062002cf7565b6000604051808303816000865af19150503d806000811462001aea576040519150601f19603f3d011682016040523d82523d6000602084013e62001aef565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000f6d9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620020d9565b80600162001b80602060026200311b565b62001b8c919062003129565b6021541062001bf15760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001c06919062003143565b909155505060215460005b602081101562001cb0578160011660010362001c4657826001826020811062001c3e5762001c3e62002c47565b015550505050565b6001816020811062001c5c5762001c5c62002c47565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001c99919062002c89565b91508062001ca78162002ca0565b91505062001c11565b5062001cbb6200315e565b505050565b60225460ff161562001ce65760405162461bcd60e51b8152600401620005539062002933565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001d2f8a63ffffffff1662001414565b1562001d8a5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c416044820152631253515160e21b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001dfe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e24919062003174565b90508060000362001e8e5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201526c17d493d3d517d2539590531251609a1b606482015260840162000553565b60225463ffffffff878116610100909204161462001f155760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d41544348000000000000000000606482015260840162000553565b602254600090610100900463ffffffff1662001f3357508862001f36565b50895b62001f6162001f52848b8b8b8b8b8b8051906020012062000bee565b8e8e63ffffffff168462000aec565b6200095e5760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c4944604482015260640162000553565b600062001fbf6101008362002c89565b9050600062001fd16101008462002dc2565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001cbb90849063a9059cbb60e01b9060640162001b37565b60225460ff166200209d5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002130826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620021b29092919063ffffffff16565b80519091501562001cbb5780806020019051810190620021519190620029f4565b62001cbb5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000be6848460008585600080866001600160a01b03168587604051620021dc919062002cf7565b60006040518083038185875af1925050503d80600081146200221b576040519150601f19603f3d011682016040523d82523d6000602084013e62002220565b606091505b509150915062002233878383876200223e565b979650505050505050565b60608315620022b2578251600003620022aa576001600160a01b0385163b620022aa5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000be6565b62000be68383815115620022c95781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200318e565b61155780620031a483390190565b6001600160a01b03811681146200230957600080fd5b50565b80356200231981620022f3565b919050565b803563ffffffff811681146200231957600080fd5b60008083601f8401126200234657600080fd5b50813567ffffffffffffffff8111156200235f57600080fd5b6020830191508360208285010111156200237857600080fd5b9250929050565b60008060008060008060a087890312156200239957600080fd5b8635620023a681620022f3565b9550620023b6602088016200231e565b94506040870135620023c881620022f3565b935060608701359250608087013567ffffffffffffffff811115620023ec57600080fd5b620023fa89828a0162002333565b979a9699509497509295939492505050565b600080604083850312156200242057600080fd5b6200242b836200231e565b915060208301356200243d81620022f3565b809150509250929050565b6000602082840312156200245b57600080fd5b81356200246881620022f3565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620024b157620024b16200246f565b604052919050565b600082601f830112620024cb57600080fd5b8135602067ffffffffffffffff821115620024ea57620024ea6200246f565b8160051b620024fb82820162002485565b92835284810182019282810190878511156200251657600080fd5b83870192505b8483101562002233578235825291830191908301906200251c565b600080600080608085870312156200254e57600080fd5b84359350602085013567ffffffffffffffff808211156200256e57600080fd5b6200257c88838901620024b9565b94506040870135915080821682146200259457600080fd5b509396929550929360600135925050565b60ff811681146200230957600080fd5b600080600080600080600060e0888a031215620025d157600080fd5b8735620025de81620025a5565b9650620025ee602089016200231e565b955060408801356200260081620022f3565b945062002610606089016200231e565b935060808801356200262281620022f3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200265c576200265c6200246f565b50601f01601f191660200190565b600082601f8301126200267c57600080fd5b8135620026936200268d826200263f565b62002485565b818152846020838601011115620026a957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620026e757600080fd5b8a3567ffffffffffffffff808211156200270057600080fd5b6200270e8e838f01620024b9565b9b506200271e60208e016200231e565b9a5060408d0135995060608d013598506200273c60808e016200231e565b97506200274c60a08e016200230c565b96506200275c60c08e016200231e565b95506200276c60e08e016200230c565b94506101008d013593506101208d01359150808211156200278c57600080fd5b506200279b8d828e016200266a565b9150509295989b9194979a5092959850565b600080600060608486031215620027c357600080fd5b620027ce846200231e565b92506020840135620027e081620022f3565b91506040840135620027f281620022f3565b809150509250925092565b6000602082840312156200281057600080fd5b5035919050565b600080600080600080600060a0888a0312156200283357600080fd5b6200283e886200231e565b965060208801356200285081620022f3565b9550604088013567ffffffffffffffff808211156200286e57600080fd5b6200287c8b838c0162002333565b909750955060608a01359150808211156200289657600080fd5b50620028a58a828b0162002333565b9094509250506080880135620028bb81620025a5565b8091505092959891949750929550565b600080600060608486031215620028e157600080fd5b620028ec846200231e565b92506020840135620028fe81620022f3565b9150604084013567ffffffffffffffff8111156200291b57600080fd5b62002929868287016200266a565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b6020808252602a908201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e546040820152692fa122afa4aa29a2a62360b11b606082015260800190565b80151581146200230957600080fd5b60006020828403121562002a0757600080fd5b81516200246881620029e5565b60005b8381101562002a3157818101518382015260200162002a17565b8381111562000f6d5750506000910152565b600082601f83011262002a5557600080fd5b815162002a666200268d826200263f565b81815284602083860101111562002a7c57600080fd5b62000be682602083016020870162002a14565b60006020828403121562002aa257600080fd5b815167ffffffffffffffff81111562002aba57600080fd5b62000be68482850162002a43565b60006020828403121562002adb57600080fd5b81516200246881620025a5565b6000815180845262002b0281602086016020860162002a14565b601f01601f19169290920160200192915050565b60608152600062002b2b606083018662002ae8565b828103602084015262002b3f818662002ae8565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002ba78483018762002ae8565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79506f6c79676f6e5a4b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002c9b5762002c9b62002c5d565b500490565b60006001820162002cb55762002cb562002c73565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002cee9083018462002ae8565b95945050505050565b6000825162002d0b81846020870162002a14565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002d6257600080fd5b835167ffffffffffffffff8082111562002d7b57600080fd5b62002d898783880162002a43565b9450602086015191508082111562002da057600080fd5b5062002daf8682870162002a43565b9250506040840151620027f281620025a5565b60008262002dd45762002dd462002c5d565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e1860608301878962002dd9565b828103602084015262002e2d81868862002dd9565b91505060ff831660408301529695505050505050565b6000835162002e5781846020880162002a14565b83519083019062002e6d81836020880162002a14565b01949350505050565b6000808585111562002e8757600080fd5b8386111562002e9557600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002ebe57600080fd5b873562002ecb81620022f3565b9650602088013562002edd81620022f3565b9550604088013594506060880135935060808801356200262281620025a5565b60208082526030908201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560408201526f29aa2fa122afaa2422afa9a2a72222a960811b606082015260800190565b60208082526025908201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f42456040820152645f5448495360d81b606082015260800190565b600080600080600080600080610100898b03121562002fb057600080fd5b883562002fbd81620022f3565b9750602089013562002fcf81620022f3565b96506040890135955060608901359450608089013562002fef81620029e5565b935060a08901356200300181620025a5565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200305f57816000190482111562003043576200304362002c73565b808516156200305157918102915b93841c939080029062003023565b509250929050565b6000826200307857506001620009f3565b816200308757506000620009f3565b8160018114620030a05760028114620030ab57620030cb565b6001915050620009f3565b60ff841115620030bf57620030bf62002c73565b50506001821b620009f3565b5060208310610133831016604e8410600b8410161715620030f0575081810a620009f3565b620030fc83836200301e565b806000190482111562003113576200311362002c73565b029392505050565b600062002468838362003067565b6000828210156200313e576200313e62002c73565b500390565b6000821982111562003159576200315962002c73565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200318757600080fd5b5051919050565b60208152600062002468602083018462002ae856fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b14f80bfcbda3f7be499de7c67ec81639549928b9cee16384da9f2fb8c22dce64736f6c634300080f0033a26469706673582212203c02dfe847101ccc70782c6e15d3e3f0ddbe626dfa3a8340eb1cc64b3d85534264736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001675760003560e01c806381b1c17411620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b806381b1c17414620003735780638f61151914620003ad5780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b80633ae05047116200011e5780633ae0504714620002a25780633da8168214620002ba5780633e19704314620002df578063463855491462000304578063647c576c14620003295780637b6323c1146200034e57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d3660046200237f565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b50620001836200096d565b348015620001db57600080fd5b50620001f3620001ed3660046200240c565b620009a6565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002448565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b5062000224620009f9565b348015620002c757600080fd5b50620001a1620002d936600462002537565b62000aec565b348015620002ec57600080fd5b5062000224620002fe366004620025b5565b62000bee565b3480156200031157600080fd5b506200018362000323366004620026c6565b62000c7b565b3480156200033657600080fd5b506200018362000348366004620027ad565b62000e14565b3480156200035b57600080fd5b50620001836200036d366004620026c6565b62000f73565b3480156200038057600080fd5b50620001f362000392366004620027fd565b6024602052600090815260409020546001600160a01b031681565b348015620003ba57600080fd5b50602754620001f3906001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620027fd565b62001414565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002817565b62001459565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620028cb565b62001570565b348015620004c357600080fd5b5062000183620016c7565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620027fd565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002933565b60405180910390fd5b60225463ffffffff6101009091048116908616036200058f5760405162461bcd60e51b815260040162000553906200299b565b60008060606001600160a01b03891662000616578534146200060c5760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201526e4d415443485f4d53475f56414c554560881b606482015260840162000553565b6000915062000887565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620006e457604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af1158015620006ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006d19190620029f4565b5060208101518151909450925062000885565b8415620006f957620006f98a888888620016fe565b620007106001600160a01b038b1633308a62001b02565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000767573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000791919081019062002a8f565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007d0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007fa919081019062002a8f565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000839573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200085f919062002ac8565b604051602001620008739392919062002b16565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b87602154604051620008c998979695949392919062002b53565b60405180910390a1620008f4620008ee600084868c8c8c888051906020012062000bee565b62001b6f565b6026546001600160a01b03166333d6247d6200090f620009f9565b6040518263ffffffff1660e01b81526004016200092e91815260200190565b600060405180830381600087803b1580156200094957600080fd5b505af11580156200095e573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b031633146200099a5760405162461bcd60e51b8152600401620005539062002bc0565b620009a462001cc0565b565b6000602460008484604051602001620009c192919062002c1d565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000ae3578260011660010362000a64576001816020811062000a305762000a3062002c47565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000a91565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a9e60028462002c89565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000ada9062002ca0565b91505062000a04565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000bdf578160011660010362000b695786818151811062000b275762000b2762002c47565b60200260200101518360405160200162000b4b929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000bbb565b8287828151811062000b7f5762000b7f62002c47565b602002602001015160405160200162000ba2929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000bc860028362002c89565b91508062000bd68162002ca0565b91505062000afc565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000ca15760405162461bcd60e51b8152600401620005539062002933565b62000cb78a8a8a8a8a8a8a8a8a8a600162001d1e565b62000cc88963ffffffff1662001faf565b6000836001600160a01b03168387898560405160240162000cec9392919062002cbc565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d23919062002cf7565b60006040518083038185875af1925050503d806000811462000d62576040519150601f19603f3d011682016040523d82523d6000602084013e62000d67565b606091505b505090508062000dc65760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f46416044820152631253115160e21b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000dff95949392919062002d15565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000e355750600054600160ff909116105b8062000e515750303b15801562000e51575060005460ff166001145b62000eb65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000eda576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000f6d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff161562000f995760405162461bcd60e51b8152600401620005539062002933565b62000faf8a8a8a8a8a8a8a8a8a8a600062001d1e565b62000fc08963ffffffff1662001faf565b6001600160a01b038516620010a957604080516000808252602082019092526001600160a01b03851690849060405162000ffb919062002cf7565b60006040518083038185875af1925050503d80600081146200103a576040519150601f19603f3d011682016040523d82523d6000602084013e6200103f565b606091505b5050905080620010a25760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201526617d1905253115160ca1b606482015260840162000553565b50620013c7565b60225463ffffffff610100909104811690871603620010de57620010d86001600160a01b038616848462001ff1565b620013c7565b60008686604051602001620010f592919062002c1d565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200134c5760008060008580602001905181019062001147919062002d4c565b9250925092506000858484846040516200116190620022e5565b6200116f9392919062002b16565b8190604051809103906000f590508015801562001190573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af1158015620011e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200120b9190620029f4565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200133a9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620013c4565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200139c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013c29190620029f4565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200140095949392919062002d15565b60405180910390a150505050505050505050565b600080620014256101008462002c89565b90506000620014376101008562002dc2565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200147192919062002c1d565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014a490620022e5565b601f1982820381018352601f909101166040819052620014d1908d908d908d908d908d9060200162002e02565b60408051601f1981840301815290829052620014f1929160200162002e43565b604051602081830303815290604052805190602001206040516020016200154a94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015965760405162461bcd60e51b8152600401620005539062002933565b60225463ffffffff610100909104811690841603620015c95760405162461bcd60e51b815260040162000553906200299b565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff1633868634876021546040516200161d98979695949392919062002b53565b60405180910390a162001654620008ee6001602260019054906101000a900463ffffffff1633878734888051906020012062000bee565b6026546001600160a01b03166333d6247d6200166f620009f9565b6040518263ffffffff1660e01b81526004016200168e91815260200190565b600060405180830381600087803b158015620016a957600080fd5b505af1158015620016be573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620016f45760405162461bcd60e51b8152600401620005539062002bc0565b620009a462002023565b60006200174183838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620020d292505050565b9050632afa533160e01b6001600160e01b03198216016200192a57600080808080808062001773896004818d62002e76565b81019062001782919062002ea2565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620017c45760405162461bcd60e51b8152600401620005539062002efd565b6001600160a01b0386163014620017ef5760405162461bcd60e51b8152600401620005539062002f4d565b8a8514620018565760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201526c09e8aa6be9c9ea8be9a82a8869609b1b606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620018d6919062002cf7565b6000604051808303816000865af19150503d806000811462001915576040519150601f19603f3d011682016040523d82523d6000602084013e6200191a565b606091505b5050505050505050505062001afb565b6001600160e01b031981166323f2ebc360e21b146200198c5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000553565b600080808080808080620019a48a6004818e62002e76565b810190620019b3919062002f92565b97509750975097509750975097509750336001600160a01b0316886001600160a01b031614620019f75760405162461bcd60e51b8152600401620005539062002efd565b6001600160a01b038716301462001a225760405162461bcd60e51b8152600401620005539062002f4d565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001aab919062002cf7565b6000604051808303816000865af19150503d806000811462001aea576040519150601f19603f3d011682016040523d82523d6000602084013e62001aef565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000f6d9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620020d9565b80600162001b80602060026200311b565b62001b8c919062003129565b6021541062001bf15760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001c06919062003143565b909155505060215460005b602081101562001cb0578160011660010362001c4657826001826020811062001c3e5762001c3e62002c47565b015550505050565b6001816020811062001c5c5762001c5c62002c47565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001c99919062002c89565b91508062001ca78162002ca0565b91505062001c11565b5062001cbb6200315e565b505050565b60225460ff161562001ce65760405162461bcd60e51b8152600401620005539062002933565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001d2f8a63ffffffff1662001414565b1562001d8a5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c416044820152631253515160e21b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001dfe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e24919062003174565b90508060000362001e8e5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201526c17d493d3d517d2539590531251609a1b606482015260840162000553565b60225463ffffffff878116610100909204161462001f155760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d41544348000000000000000000606482015260840162000553565b602254600090610100900463ffffffff1662001f3357508862001f36565b50895b62001f6162001f52848b8b8b8b8b8b8051906020012062000bee565b8e8e63ffffffff168462000aec565b6200095e5760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c4944604482015260640162000553565b600062001fbf6101008362002c89565b9050600062001fd16101008462002dc2565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001cbb90849063a9059cbb60e01b9060640162001b37565b60225460ff166200209d5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002130826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620021b29092919063ffffffff16565b80519091501562001cbb5780806020019051810190620021519190620029f4565b62001cbb5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000be6848460008585600080866001600160a01b03168587604051620021dc919062002cf7565b60006040518083038185875af1925050503d80600081146200221b576040519150601f19603f3d011682016040523d82523d6000602084013e62002220565b606091505b509150915062002233878383876200223e565b979650505050505050565b60608315620022b2578251600003620022aa576001600160a01b0385163b620022aa5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000be6565b62000be68383815115620022c95781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200318e565b61155780620031a483390190565b6001600160a01b03811681146200230957600080fd5b50565b80356200231981620022f3565b919050565b803563ffffffff811681146200231957600080fd5b60008083601f8401126200234657600080fd5b50813567ffffffffffffffff8111156200235f57600080fd5b6020830191508360208285010111156200237857600080fd5b9250929050565b60008060008060008060a087890312156200239957600080fd5b8635620023a681620022f3565b9550620023b6602088016200231e565b94506040870135620023c881620022f3565b935060608701359250608087013567ffffffffffffffff811115620023ec57600080fd5b620023fa89828a0162002333565b979a9699509497509295939492505050565b600080604083850312156200242057600080fd5b6200242b836200231e565b915060208301356200243d81620022f3565b809150509250929050565b6000602082840312156200245b57600080fd5b81356200246881620022f3565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620024b157620024b16200246f565b604052919050565b600082601f830112620024cb57600080fd5b8135602067ffffffffffffffff821115620024ea57620024ea6200246f565b8160051b620024fb82820162002485565b92835284810182019282810190878511156200251657600080fd5b83870192505b8483101562002233578235825291830191908301906200251c565b600080600080608085870312156200254e57600080fd5b84359350602085013567ffffffffffffffff808211156200256e57600080fd5b6200257c88838901620024b9565b94506040870135915080821682146200259457600080fd5b509396929550929360600135925050565b60ff811681146200230957600080fd5b600080600080600080600060e0888a031215620025d157600080fd5b8735620025de81620025a5565b9650620025ee602089016200231e565b955060408801356200260081620022f3565b945062002610606089016200231e565b935060808801356200262281620022f3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200265c576200265c6200246f565b50601f01601f191660200190565b600082601f8301126200267c57600080fd5b8135620026936200268d826200263f565b62002485565b818152846020838601011115620026a957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620026e757600080fd5b8a3567ffffffffffffffff808211156200270057600080fd5b6200270e8e838f01620024b9565b9b506200271e60208e016200231e565b9a5060408d0135995060608d013598506200273c60808e016200231e565b97506200274c60a08e016200230c565b96506200275c60c08e016200231e565b95506200276c60e08e016200230c565b94506101008d013593506101208d01359150808211156200278c57600080fd5b506200279b8d828e016200266a565b9150509295989b9194979a5092959850565b600080600060608486031215620027c357600080fd5b620027ce846200231e565b92506020840135620027e081620022f3565b91506040840135620027f281620022f3565b809150509250925092565b6000602082840312156200281057600080fd5b5035919050565b600080600080600080600060a0888a0312156200283357600080fd5b6200283e886200231e565b965060208801356200285081620022f3565b9550604088013567ffffffffffffffff808211156200286e57600080fd5b6200287c8b838c0162002333565b909750955060608a01359150808211156200289657600080fd5b50620028a58a828b0162002333565b9094509250506080880135620028bb81620025a5565b8091505092959891949750929550565b600080600060608486031215620028e157600080fd5b620028ec846200231e565b92506020840135620028fe81620022f3565b9150604084013567ffffffffffffffff8111156200291b57600080fd5b62002929868287016200266a565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b6020808252602a908201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e546040820152692fa122afa4aa29a2a62360b11b606082015260800190565b80151581146200230957600080fd5b60006020828403121562002a0757600080fd5b81516200246881620029e5565b60005b8381101562002a3157818101518382015260200162002a17565b8381111562000f6d5750506000910152565b600082601f83011262002a5557600080fd5b815162002a666200268d826200263f565b81815284602083860101111562002a7c57600080fd5b62000be682602083016020870162002a14565b60006020828403121562002aa257600080fd5b815167ffffffffffffffff81111562002aba57600080fd5b62000be68482850162002a43565b60006020828403121562002adb57600080fd5b81516200246881620025a5565b6000815180845262002b0281602086016020860162002a14565b601f01601f19169290920160200192915050565b60608152600062002b2b606083018662002ae8565b828103602084015262002b3f818662002ae8565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002ba78483018762002ae8565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79506f6c79676f6e5a4b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002c9b5762002c9b62002c5d565b500490565b60006001820162002cb55762002cb562002c73565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002cee9083018462002ae8565b95945050505050565b6000825162002d0b81846020870162002a14565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002d6257600080fd5b835167ffffffffffffffff8082111562002d7b57600080fd5b62002d898783880162002a43565b9450602086015191508082111562002da057600080fd5b5062002daf8682870162002a43565b9250506040840151620027f281620025a5565b60008262002dd45762002dd462002c5d565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e1860608301878962002dd9565b828103602084015262002e2d81868862002dd9565b91505060ff831660408301529695505050505050565b6000835162002e5781846020880162002a14565b83519083019062002e6d81836020880162002a14565b01949350505050565b6000808585111562002e8757600080fd5b8386111562002e9557600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002ebe57600080fd5b873562002ecb81620022f3565b9650602088013562002edd81620022f3565b9550604088013594506060880135935060808801356200262281620025a5565b60208082526030908201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560408201526f29aa2fa122afaa2422afa9a2a72222a960811b606082015260800190565b60208082526025908201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f42456040820152645f5448495360d81b606082015260800190565b600080600080600080600080610100898b03121562002fb057600080fd5b883562002fbd81620022f3565b9750602089013562002fcf81620022f3565b96506040890135955060608901359450608089013562002fef81620029e5565b935060a08901356200300181620025a5565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200305f57816000190482111562003043576200304362002c73565b808516156200305157918102915b93841c939080029062003023565b509250929050565b6000826200307857506001620009f3565b816200308757506000620009f3565b8160018114620030a05760028114620030ab57620030cb565b6001915050620009f3565b60ff841115620030bf57620030bf62002c73565b50506001821b620009f3565b5060208310610133831016604e8410600b8410161715620030f0575081810a620009f3565b620030fc83836200301e565b806000190482111562003113576200311362002c73565b029392505050565b600062002468838362003067565b6000828210156200313e576200313e62002c73565b500390565b6000821982111562003159576200315962002c73565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200318757600080fd5b5051919050565b60208152600062002468602083018462002ae856fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b14f80bfcbda3f7be499de7c67ec81639549928b9cee16384da9f2fb8c22dce64736f6c634300080f0033a26469706673582212203c02dfe847101ccc70782c6e15d3e3f0ddbe626dfa3a8340eb1cc64b3d85534264736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/BridgeMock.json b/compiled-contracts/BridgeMock.json index 706a7e9a1..3721bf068 100644 --- a/compiled-contracts/BridgeMock.json +++ b/compiled-contracts/BridgeMock.json @@ -790,8 +790,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50614b51806100206000396000f3fe608060405260043610620001f35760003560e01c806381b1c174116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b806381b1c17414620004615780638da5cb5b146200049b5780638f61151914620004bb57600080fd5b8063318aee3d116200018d5780634638554911620001585780634638554914620003da578063647c576c14620003ff578063715018a614620004245780637b6323c1146200043c57600080fd5b8063318aee3d14620003095780633ae0504714620003785780633da8168214620003905780633e19704314620003b557600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f620002093660046200276e565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f62000721565b3480156200026757600080fd5b506200027f62000279366004620027fb565b6200075a565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002837565b620007ad565b348015620002ca57600080fd5b506200020f620002dc36600462002851565b620007bc565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002876565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b50620002fa620007e8565b3480156200039d57600080fd5b506200022d620003af3660046200295e565b620008db565b348015620003c257600080fd5b50620002fa620003d4366004620029dc565b620009dd565b348015620003e757600080fd5b506200020f620003f936600462002aed565b62000a6a565b3480156200040c57600080fd5b506200020f6200041e36600462002bd4565b62000c03565b3480156200043157600080fd5b506200020f62000d78565b3480156200044957600080fd5b506200020f6200045b36600462002aed565b62000d8e565b3480156200046e57600080fd5b506200027f6200048036600462002837565b6024602052600090815260409020546001600160a01b031681565b348015620004a857600080fd5b50605a546001600160a01b03166200027f565b348015620004c857600080fd5b506027546200027f906001600160a01b031681565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002837565b6200122f565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002c24565b62001274565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002cd8565b6200138b565b348015620005e957600080fd5b506200020f620014e8565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002837565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002876565b6200151f565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007095760405162461bcd60e51b815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e606482015269185b081d195cdd1b995d60b21b608482015260a4015b60405180910390fd5b620007198686868686866200159e565b505050505050565b6027546001600160a01b031633146200074e5760405162461bcd60e51b8152600401620007009062002d40565b62000758620019cf565b565b60006024600084846040516020016200077592919062002db1565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b762001a2d565b608c55565b620007c662001a2d565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008d257826001166001036200085357600181602081106200081f576200081f62002ddb565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000880565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088d60028462002e1d565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c99062002e34565b915050620007f3565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009ce5781600116600103620009585786818151811062000916576200091662002ddb565b6020026020010151836040516020016200093a929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009aa565b828782815181106200096e576200096e62002ddb565b602002602001015160405160200162000991929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b760028362002e1d565b915080620009c58162002e34565b915050620008eb565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a905760405162461bcd60e51b8152600401620007009062002e50565b62000aa68a8a8a8a8a8a8a8a8a8a600162001a89565b62000ab78963ffffffff1662001d1a565b6000836001600160a01b03168387898560405160240162000adb9392919062002f15565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b12919062002f50565b60006040518083038185875af1925050503d806000811462000b51576040519150601f19603f3d011682016040523d82523d6000602084013e62000b56565b606091505b505090508062000bb55760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f46416044820152631253115160e21b606482015260840162000700565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bee95949392919062002f6e565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c245750600054600160ff909116105b8062000c405750303b15801562000c40575060005460ff166001145b62000ca55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000700565b6000805460ff19166001179055801562000cc9576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d2b62001d5c565b801562000d72576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8262001a2d565b62000758600062001dcf565b60225460ff161562000db45760405162461bcd60e51b8152600401620007009062002e50565b62000dca8a8a8a8a8a8a8a8a8a8a600062001a89565b62000ddb8963ffffffff1662001d1a565b6001600160a01b03851662000ec457604080516000808252602082019092526001600160a01b03851690849060405162000e16919062002f50565b60006040518083038185875af1925050503d806000811462000e55576040519150601f19603f3d011682016040523d82523d6000602084013e62000e5a565b606091505b505090508062000ebd5760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201526617d1905253115160ca1b606482015260840162000700565b50620011e2565b60225463ffffffff61010090910481169087160362000ef95762000ef36001600160a01b038616848462001e21565b620011e2565b6000868660405160200162000f1092919062002db1565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620011675760008060008580602001905181019062000f62919062002ff1565b92509250925060008584848460405162000f7c90620026d7565b62000f8a9392919062003067565b8190604051809103906000f590508015801562000fab573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001000573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010269190620030b3565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620011559392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011df565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620011b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011dd9190620030b3565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200121b95949392919062002f6e565b60405180910390a150505050505050505050565b600080620012406101008462002e1d565b905060006200125261010085620030d3565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200128c92919062002db1565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012bf90620026d7565b601f1982820381018352601f909101166040819052620012ec908d908d908d908d908d9060200162003113565b60408051601f19818403018152908290526200130c929160200162003154565b604051602081830303815290604052805190602001206040516020016200136594939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013b15760405162461bcd60e51b8152600401620007009062002e50565b60225463ffffffff610100909104811690841603620013e45760405162461bcd60e51b8152600401620007009062003187565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff16338686348760215460405162001438989796959493929190620031d1565b60405180910390a1620014756200146f6001602260019054906101000a900463ffffffff16338787348880519060200120620009dd565b62001e8b565b6026546001600160a01b03166333d6247d62001490620007e8565b6040518263ffffffff1660e01b8152600401620014af91815260200190565b600060405180830381600087803b158015620014ca57600080fd5b505af1158015620014df573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015155760405162461bcd60e51b8152600401620007009062002d40565b6200075862001fd7565b6200152962001a2d565b6001600160a01b038116620015905760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000700565b6200159b8162001dcf565b50565b60225460ff1615620015c45760405162461bcd60e51b8152600401620007009062002e50565b60225463ffffffff610100909104811690861603620015f75760405162461bcd60e51b8152600401620007009062003187565b60008060606001600160a01b0389166200167e57853414620016745760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201526e4d415443485f4d53475f56414c554560881b606482015260840162000700565b60009150620018ef565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200174c57604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562001713573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017399190620030b3565b50602081015181519094509250620018ed565b84156200176157620017618a88888862002086565b620017786001600160a01b038b1633308a6200248a565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620017cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620017f991908101906200323e565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001838573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200186291908101906200323e565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620018a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018c7919062003277565b604051602001620018db9392919062003067565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162001931989796959493929190620031d1565b60405180910390a1620019566200146f600084868c8c8c8880519060200120620009dd565b6026546001600160a01b03166333d6247d62001971620007e8565b6040518263ffffffff1660e01b81526004016200199091815260200190565b600060405180830381600087803b158015620019ab57600080fd5b505af1158015620019c0573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff1615620019f55760405162461bcd60e51b8152600401620007009062002e50565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000700565b62001a9a8a63ffffffff166200122f565b1562001af55760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c416044820152631253515160e21b606482015260840162000700565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001b69573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001b8f919062003297565b90508060000362001bf95760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201526c17d493d3d517d2539590531251609a1b606482015260840162000700565b60225463ffffffff878116610100909204161462001c805760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d41544348000000000000000000606482015260840162000700565b602254600090610100900463ffffffff1662001c9e57508862001ca1565b50895b62001ccc62001cbd848b8b8b8b8b8b80519060200120620009dd565b8e8e63ffffffff1684620008db565b620019c05760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c4944604482015260640162000700565b600062001d2a6101008362002e1d565b9050600062001d3c61010084620030d3565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001dc95760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000700565b62000758335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001e8690849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620024c4565b505050565b80600162001e9c60206002620033ae565b62001ea89190620033bc565b6021541062001f0d5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000700565b60016021600082825462001f229190620033d6565b909155505060215460005b602081101562001fcc578160011660010362001f6257826001826020811062001f5a5762001f5a62002ddb565b015550505050565b6001816020811062001f785762001f7862002ddb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001fb5919062002e1d565b91508062001fc38162002e34565b91505062001f2d565b5062001e86620033f1565b60225460ff16620020515760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000700565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000620020c983838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200259d92505050565b9050632afa533160e01b6001600160e01b0319821601620022b2576000808080808080620020fb896004818d62003407565b8101906200210a919062003433565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200214c5760405162461bcd60e51b815260040162000700906200348e565b6001600160a01b0386163014620021775760405162461bcd60e51b81526004016200070090620034de565b8a8514620021de5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201526c09e8aa6be9c9ea8be9a82a8869609b1b606482015260840162000700565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200225e919062002f50565b6000604051808303816000865af19150503d80600081146200229d576040519150601f19603f3d011682016040523d82523d6000602084013e620022a2565b606091505b5050505050505050505062002483565b6001600160e01b031981166323f2ebc360e21b14620023145760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000700565b6000808080808080806200232c8a6004818e62003407565b8101906200233b919062003523565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200237f5760405162461bcd60e51b815260040162000700906200348e565b6001600160a01b0387163014620023aa5760405162461bcd60e51b81526004016200070090620034de565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162002433919062002f50565b6000604051808303816000865af19150503d806000811462002472576040519150601f19603f3d011682016040523d82523d6000602084013e62002477565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d729085906323b872dd60e01b9060840162001e4e565b60006200251b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620025a49092919063ffffffff16565b80519091501562001e8657808060200190518101906200253c9190620030b3565b62001e865760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000700565b6020015190565b6060620009d5848460008585600080866001600160a01b03168587604051620025ce919062002f50565b60006040518083038185875af1925050503d80600081146200260d576040519150601f19603f3d011682016040523d82523d6000602084013e62002612565b606091505b5091509150620026258783838762002630565b979650505050505050565b60608315620026a45782516000036200269c576001600160a01b0385163b6200269c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000700565b5081620009d5565b620009d58383815115620026bb5781518083602001fd5b8060405162461bcd60e51b8152600401620007009190620035af565b61155780620035c583390190565b6001600160a01b03811681146200159b57600080fd5b80356200270881620026e5565b919050565b803563ffffffff811681146200270857600080fd5b60008083601f8401126200273557600080fd5b50813567ffffffffffffffff8111156200274e57600080fd5b6020830191508360208285010111156200276757600080fd5b9250929050565b60008060008060008060a087890312156200278857600080fd5b86356200279581620026e5565b9550620027a5602088016200270d565b94506040870135620027b781620026e5565b935060608701359250608087013567ffffffffffffffff811115620027db57600080fd5b620027e989828a0162002722565b979a9699509497509295939492505050565b600080604083850312156200280f57600080fd5b6200281a836200270d565b915060208301356200282c81620026e5565b809150509250929050565b6000602082840312156200284a57600080fd5b5035919050565b6000602082840312156200286457600080fd5b6200286f826200270d565b9392505050565b6000602082840312156200288957600080fd5b81356200286f81620026e5565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620028d857620028d862002896565b604052919050565b600082601f830112620028f257600080fd5b8135602067ffffffffffffffff82111562002911576200291162002896565b8160051b62002922828201620028ac565b92835284810182019282810190878511156200293d57600080fd5b83870192505b84831015620026255782358252918301919083019062002943565b600080600080608085870312156200297557600080fd5b84359350602085013567ffffffffffffffff808211156200299557600080fd5b620029a388838901620028e0565b9450604087013591508082168214620029bb57600080fd5b509396929550929360600135925050565b60ff811681146200159b57600080fd5b600080600080600080600060e0888a031215620029f857600080fd5b873562002a0581620029cc565b965062002a15602089016200270d565b9550604088013562002a2781620026e5565b945062002a37606089016200270d565b9350608088013562002a4981620026e5565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002a835762002a8362002896565b50601f01601f191660200190565b600082601f83011262002aa357600080fd5b813562002aba62002ab48262002a66565b620028ac565b81815284602083860101111562002ad057600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002b0e57600080fd5b8a3567ffffffffffffffff8082111562002b2757600080fd5b62002b358e838f01620028e0565b9b5062002b4560208e016200270d565b9a5060408d0135995060608d0135985062002b6360808e016200270d565b975062002b7360a08e01620026fb565b965062002b8360c08e016200270d565b955062002b9360e08e01620026fb565b94506101008d013593506101208d013591508082111562002bb357600080fd5b5062002bc28d828e0162002a91565b9150509295989b9194979a5092959850565b60008060006060848603121562002bea57600080fd5b62002bf5846200270d565b9250602084013562002c0781620026e5565b9150604084013562002c1981620026e5565b809150509250925092565b600080600080600080600060a0888a03121562002c4057600080fd5b62002c4b886200270d565b9650602088013562002c5d81620026e5565b9550604088013567ffffffffffffffff8082111562002c7b57600080fd5b62002c898b838c0162002722565b909750955060608a013591508082111562002ca357600080fd5b5062002cb28a828b0162002722565b909450925050608088013562002cc881620029cc565b8091505092959891949750929550565b60008060006060848603121562002cee57600080fd5b62002cf9846200270d565b9250602084013562002d0b81620026e5565b9150604084013567ffffffffffffffff81111562002d2857600080fd5b62002d368682870162002a91565b9150509250925092565b6020808252604b908201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660408201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60608201526a18de4818dbdb9d1c9858dd60aa1b608082015260a00190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002e2f5762002e2f62002df1565b500490565b60006001820162002e495762002e4962002e07565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002ed557818101518382015260200162002ebb565b8381111562000d725750506000910152565b6000815180845262002f0181602086016020860162002eb8565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002f479083018462002ee7565b95945050505050565b6000825162002f6481846020870162002eb8565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f83011262002fb757600080fd5b815162002fc862002ab48262002a66565b81815284602083860101111562002fde57600080fd5b620009d582602083016020870162002eb8565b6000806000606084860312156200300757600080fd5b835167ffffffffffffffff808211156200302057600080fd5b6200302e8783880162002fa5565b945060208601519150808211156200304557600080fd5b50620030548682870162002fa5565b925050604084015162002c1981620029cc565b6060815260006200307c606083018662002ee7565b828103602084015262003090818662002ee7565b91505060ff83166040830152949350505050565b80151581146200159b57600080fd5b600060208284031215620030c657600080fd5b81516200286f81620030a4565b600082620030e557620030e562002df1565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003129606083018789620030ea565b82810360208401526200313e818688620030ea565b91505060ff831660408301529695505050505050565b600083516200316881846020880162002eb8565b8351908301906200317e81836020880162002eb8565b01949350505050565b6020808252602a908201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e546040820152692fa122afa4aa29a2a62360b11b606082015260800190565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032258483018762002ee7565b925080851660e085015250509998505050505050505050565b6000602082840312156200325157600080fd5b815167ffffffffffffffff8111156200326957600080fd5b620009d58482850162002fa5565b6000602082840312156200328a57600080fd5b81516200286f81620029cc565b600060208284031215620032aa57600080fd5b5051919050565b600181815b80851115620032f2578160001904821115620032d657620032d662002e07565b80851615620032e457918102915b93841c9390800290620032b6565b509250929050565b6000826200330b57506001620007a7565b816200331a57506000620007a7565b81600181146200333357600281146200333e576200335e565b6001915050620007a7565b60ff84111562003352576200335262002e07565b50506001821b620007a7565b5060208310610133831016604e8410600b841016171562003383575081810a620007a7565b6200338f8383620032b1565b8060001904821115620033a657620033a662002e07565b029392505050565b60006200286f8383620032fa565b600082821015620033d157620033d162002e07565b500390565b60008219821115620033ec57620033ec62002e07565b500190565b634e487b7160e01b600052600160045260246000fd5b600080858511156200341857600080fd5b838611156200342657600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200344f57600080fd5b87356200345c81620026e5565b965060208801356200346e81620026e5565b95506040880135945060608801359350608088013562002a4981620029cc565b60208082526030908201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560408201526f29aa2fa122afaa2422afa9a2a72222a960811b606082015260800190565b60208082526025908201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f42456040820152645f5448495360d81b606082015260800190565b600080600080600080600080610100898b0312156200354157600080fd5b88356200354e81620026e5565b975060208901356200356081620026e5565b9650604089013595506060890135945060808901356200358081620030a4565b935060a08901356200359281620029cc565b979a969950949793969295929450505060c08201359160e0013590565b6020815260006200286f602083018462002ee756fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b14f80bfcbda3f7be499de7c67ec81639549928b9cee16384da9f2fb8c22dce64736f6c634300080f0033a2646970667358221220fad1a6248965920df6eb0285e065ec54caed2e824d877c2b9a54a0ac5b863a7164736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001f35760003560e01c806381b1c174116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b806381b1c17414620004615780638da5cb5b146200049b5780638f61151914620004bb57600080fd5b8063318aee3d116200018d5780634638554911620001585780634638554914620003da578063647c576c14620003ff578063715018a614620004245780637b6323c1146200043c57600080fd5b8063318aee3d14620003095780633ae0504714620003785780633da8168214620003905780633e19704314620003b557600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f620002093660046200276e565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f62000721565b3480156200026757600080fd5b506200027f62000279366004620027fb565b6200075a565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002837565b620007ad565b348015620002ca57600080fd5b506200020f620002dc36600462002851565b620007bc565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002876565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b50620002fa620007e8565b3480156200039d57600080fd5b506200022d620003af3660046200295e565b620008db565b348015620003c257600080fd5b50620002fa620003d4366004620029dc565b620009dd565b348015620003e757600080fd5b506200020f620003f936600462002aed565b62000a6a565b3480156200040c57600080fd5b506200020f6200041e36600462002bd4565b62000c03565b3480156200043157600080fd5b506200020f62000d78565b3480156200044957600080fd5b506200020f6200045b36600462002aed565b62000d8e565b3480156200046e57600080fd5b506200027f6200048036600462002837565b6024602052600090815260409020546001600160a01b031681565b348015620004a857600080fd5b50605a546001600160a01b03166200027f565b348015620004c857600080fd5b506027546200027f906001600160a01b031681565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002837565b6200122f565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002c24565b62001274565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002cd8565b6200138b565b348015620005e957600080fd5b506200020f620014e8565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002837565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002876565b6200151f565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007095760405162461bcd60e51b815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e606482015269185b081d195cdd1b995d60b21b608482015260a4015b60405180910390fd5b620007198686868686866200159e565b505050505050565b6027546001600160a01b031633146200074e5760405162461bcd60e51b8152600401620007009062002d40565b62000758620019cf565b565b60006024600084846040516020016200077592919062002db1565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b762001a2d565b608c55565b620007c662001a2d565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008d257826001166001036200085357600181602081106200081f576200081f62002ddb565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000880565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088d60028462002e1d565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c99062002e34565b915050620007f3565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009ce5781600116600103620009585786818151811062000916576200091662002ddb565b6020026020010151836040516020016200093a929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009aa565b828782815181106200096e576200096e62002ddb565b602002602001015160405160200162000991929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b760028362002e1d565b915080620009c58162002e34565b915050620008eb565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a905760405162461bcd60e51b8152600401620007009062002e50565b62000aa68a8a8a8a8a8a8a8a8a8a600162001a89565b62000ab78963ffffffff1662001d1a565b6000836001600160a01b03168387898560405160240162000adb9392919062002f15565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b12919062002f50565b60006040518083038185875af1925050503d806000811462000b51576040519150601f19603f3d011682016040523d82523d6000602084013e62000b56565b606091505b505090508062000bb55760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f46416044820152631253115160e21b606482015260840162000700565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bee95949392919062002f6e565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c245750600054600160ff909116105b8062000c405750303b15801562000c40575060005460ff166001145b62000ca55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000700565b6000805460ff19166001179055801562000cc9576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d2b62001d5c565b801562000d72576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8262001a2d565b62000758600062001dcf565b60225460ff161562000db45760405162461bcd60e51b8152600401620007009062002e50565b62000dca8a8a8a8a8a8a8a8a8a8a600062001a89565b62000ddb8963ffffffff1662001d1a565b6001600160a01b03851662000ec457604080516000808252602082019092526001600160a01b03851690849060405162000e16919062002f50565b60006040518083038185875af1925050503d806000811462000e55576040519150601f19603f3d011682016040523d82523d6000602084013e62000e5a565b606091505b505090508062000ebd5760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201526617d1905253115160ca1b606482015260840162000700565b50620011e2565b60225463ffffffff61010090910481169087160362000ef95762000ef36001600160a01b038616848462001e21565b620011e2565b6000868660405160200162000f1092919062002db1565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620011675760008060008580602001905181019062000f62919062002ff1565b92509250925060008584848460405162000f7c90620026d7565b62000f8a9392919062003067565b8190604051809103906000f590508015801562000fab573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001000573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010269190620030b3565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620011559392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011df565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620011b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011dd9190620030b3565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200121b95949392919062002f6e565b60405180910390a150505050505050505050565b600080620012406101008462002e1d565b905060006200125261010085620030d3565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200128c92919062002db1565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012bf90620026d7565b601f1982820381018352601f909101166040819052620012ec908d908d908d908d908d9060200162003113565b60408051601f19818403018152908290526200130c929160200162003154565b604051602081830303815290604052805190602001206040516020016200136594939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013b15760405162461bcd60e51b8152600401620007009062002e50565b60225463ffffffff610100909104811690841603620013e45760405162461bcd60e51b8152600401620007009062003187565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff16338686348760215460405162001438989796959493929190620031d1565b60405180910390a1620014756200146f6001602260019054906101000a900463ffffffff16338787348880519060200120620009dd565b62001e8b565b6026546001600160a01b03166333d6247d62001490620007e8565b6040518263ffffffff1660e01b8152600401620014af91815260200190565b600060405180830381600087803b158015620014ca57600080fd5b505af1158015620014df573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015155760405162461bcd60e51b8152600401620007009062002d40565b6200075862001fd7565b6200152962001a2d565b6001600160a01b038116620015905760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000700565b6200159b8162001dcf565b50565b60225460ff1615620015c45760405162461bcd60e51b8152600401620007009062002e50565b60225463ffffffff610100909104811690861603620015f75760405162461bcd60e51b8152600401620007009062003187565b60008060606001600160a01b0389166200167e57853414620016745760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201526e4d415443485f4d53475f56414c554560881b606482015260840162000700565b60009150620018ef565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200174c57604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562001713573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017399190620030b3565b50602081015181519094509250620018ed565b84156200176157620017618a88888862002086565b620017786001600160a01b038b1633308a6200248a565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620017cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620017f991908101906200323e565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001838573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200186291908101906200323e565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620018a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018c7919062003277565b604051602001620018db9392919062003067565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162001931989796959493929190620031d1565b60405180910390a1620019566200146f600084868c8c8c8880519060200120620009dd565b6026546001600160a01b03166333d6247d62001971620007e8565b6040518263ffffffff1660e01b81526004016200199091815260200190565b600060405180830381600087803b158015620019ab57600080fd5b505af1158015620019c0573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff1615620019f55760405162461bcd60e51b8152600401620007009062002e50565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000700565b62001a9a8a63ffffffff166200122f565b1562001af55760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c416044820152631253515160e21b606482015260840162000700565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001b69573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001b8f919062003297565b90508060000362001bf95760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201526c17d493d3d517d2539590531251609a1b606482015260840162000700565b60225463ffffffff878116610100909204161462001c805760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d41544348000000000000000000606482015260840162000700565b602254600090610100900463ffffffff1662001c9e57508862001ca1565b50895b62001ccc62001cbd848b8b8b8b8b8b80519060200120620009dd565b8e8e63ffffffff1684620008db565b620019c05760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c4944604482015260640162000700565b600062001d2a6101008362002e1d565b9050600062001d3c61010084620030d3565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001dc95760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000700565b62000758335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001e8690849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620024c4565b505050565b80600162001e9c60206002620033ae565b62001ea89190620033bc565b6021541062001f0d5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000700565b60016021600082825462001f229190620033d6565b909155505060215460005b602081101562001fcc578160011660010362001f6257826001826020811062001f5a5762001f5a62002ddb565b015550505050565b6001816020811062001f785762001f7862002ddb565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001fb5919062002e1d565b91508062001fc38162002e34565b91505062001f2d565b5062001e86620033f1565b60225460ff16620020515760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000700565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000620020c983838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200259d92505050565b9050632afa533160e01b6001600160e01b0319821601620022b2576000808080808080620020fb896004818d62003407565b8101906200210a919062003433565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200214c5760405162461bcd60e51b815260040162000700906200348e565b6001600160a01b0386163014620021775760405162461bcd60e51b81526004016200070090620034de565b8a8514620021de5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201526c09e8aa6be9c9ea8be9a82a8869609b1b606482015260840162000700565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200225e919062002f50565b6000604051808303816000865af19150503d80600081146200229d576040519150601f19603f3d011682016040523d82523d6000602084013e620022a2565b606091505b5050505050505050505062002483565b6001600160e01b031981166323f2ebc360e21b14620023145760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000700565b6000808080808080806200232c8a6004818e62003407565b8101906200233b919062003523565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200237f5760405162461bcd60e51b815260040162000700906200348e565b6001600160a01b0387163014620023aa5760405162461bcd60e51b81526004016200070090620034de565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162002433919062002f50565b6000604051808303816000865af19150503d806000811462002472576040519150601f19603f3d011682016040523d82523d6000602084013e62002477565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d729085906323b872dd60e01b9060840162001e4e565b60006200251b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620025a49092919063ffffffff16565b80519091501562001e8657808060200190518101906200253c9190620030b3565b62001e865760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000700565b6020015190565b6060620009d5848460008585600080866001600160a01b03168587604051620025ce919062002f50565b60006040518083038185875af1925050503d80600081146200260d576040519150601f19603f3d011682016040523d82523d6000602084013e62002612565b606091505b5091509150620026258783838762002630565b979650505050505050565b60608315620026a45782516000036200269c576001600160a01b0385163b6200269c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000700565b5081620009d5565b620009d58383815115620026bb5781518083602001fd5b8060405162461bcd60e51b8152600401620007009190620035af565b61155780620035c583390190565b6001600160a01b03811681146200159b57600080fd5b80356200270881620026e5565b919050565b803563ffffffff811681146200270857600080fd5b60008083601f8401126200273557600080fd5b50813567ffffffffffffffff8111156200274e57600080fd5b6020830191508360208285010111156200276757600080fd5b9250929050565b60008060008060008060a087890312156200278857600080fd5b86356200279581620026e5565b9550620027a5602088016200270d565b94506040870135620027b781620026e5565b935060608701359250608087013567ffffffffffffffff811115620027db57600080fd5b620027e989828a0162002722565b979a9699509497509295939492505050565b600080604083850312156200280f57600080fd5b6200281a836200270d565b915060208301356200282c81620026e5565b809150509250929050565b6000602082840312156200284a57600080fd5b5035919050565b6000602082840312156200286457600080fd5b6200286f826200270d565b9392505050565b6000602082840312156200288957600080fd5b81356200286f81620026e5565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620028d857620028d862002896565b604052919050565b600082601f830112620028f257600080fd5b8135602067ffffffffffffffff82111562002911576200291162002896565b8160051b62002922828201620028ac565b92835284810182019282810190878511156200293d57600080fd5b83870192505b84831015620026255782358252918301919083019062002943565b600080600080608085870312156200297557600080fd5b84359350602085013567ffffffffffffffff808211156200299557600080fd5b620029a388838901620028e0565b9450604087013591508082168214620029bb57600080fd5b509396929550929360600135925050565b60ff811681146200159b57600080fd5b600080600080600080600060e0888a031215620029f857600080fd5b873562002a0581620029cc565b965062002a15602089016200270d565b9550604088013562002a2781620026e5565b945062002a37606089016200270d565b9350608088013562002a4981620026e5565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002a835762002a8362002896565b50601f01601f191660200190565b600082601f83011262002aa357600080fd5b813562002aba62002ab48262002a66565b620028ac565b81815284602083860101111562002ad057600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002b0e57600080fd5b8a3567ffffffffffffffff8082111562002b2757600080fd5b62002b358e838f01620028e0565b9b5062002b4560208e016200270d565b9a5060408d0135995060608d0135985062002b6360808e016200270d565b975062002b7360a08e01620026fb565b965062002b8360c08e016200270d565b955062002b9360e08e01620026fb565b94506101008d013593506101208d013591508082111562002bb357600080fd5b5062002bc28d828e0162002a91565b9150509295989b9194979a5092959850565b60008060006060848603121562002bea57600080fd5b62002bf5846200270d565b9250602084013562002c0781620026e5565b9150604084013562002c1981620026e5565b809150509250925092565b600080600080600080600060a0888a03121562002c4057600080fd5b62002c4b886200270d565b9650602088013562002c5d81620026e5565b9550604088013567ffffffffffffffff8082111562002c7b57600080fd5b62002c898b838c0162002722565b909750955060608a013591508082111562002ca357600080fd5b5062002cb28a828b0162002722565b909450925050608088013562002cc881620029cc565b8091505092959891949750929550565b60008060006060848603121562002cee57600080fd5b62002cf9846200270d565b9250602084013562002d0b81620026e5565b9150604084013567ffffffffffffffff81111562002d2857600080fd5b62002d368682870162002a91565b9150509250925092565b6020808252604b908201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660408201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60608201526a18de4818dbdb9d1c9858dd60aa1b608082015260a00190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002e2f5762002e2f62002df1565b500490565b60006001820162002e495762002e4962002e07565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002ed557818101518382015260200162002ebb565b8381111562000d725750506000910152565b6000815180845262002f0181602086016020860162002eb8565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002f479083018462002ee7565b95945050505050565b6000825162002f6481846020870162002eb8565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f83011262002fb757600080fd5b815162002fc862002ab48262002a66565b81815284602083860101111562002fde57600080fd5b620009d582602083016020870162002eb8565b6000806000606084860312156200300757600080fd5b835167ffffffffffffffff808211156200302057600080fd5b6200302e8783880162002fa5565b945060208601519150808211156200304557600080fd5b50620030548682870162002fa5565b925050604084015162002c1981620029cc565b6060815260006200307c606083018662002ee7565b828103602084015262003090818662002ee7565b91505060ff83166040830152949350505050565b80151581146200159b57600080fd5b600060208284031215620030c657600080fd5b81516200286f81620030a4565b600082620030e557620030e562002df1565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003129606083018789620030ea565b82810360208401526200313e818688620030ea565b91505060ff831660408301529695505050505050565b600083516200316881846020880162002eb8565b8351908301906200317e81836020880162002eb8565b01949350505050565b6020808252602a908201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e546040820152692fa122afa4aa29a2a62360b11b606082015260800190565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032258483018762002ee7565b925080851660e085015250509998505050505050505050565b6000602082840312156200325157600080fd5b815167ffffffffffffffff8111156200326957600080fd5b620009d58482850162002fa5565b6000602082840312156200328a57600080fd5b81516200286f81620029cc565b600060208284031215620032aa57600080fd5b5051919050565b600181815b80851115620032f2578160001904821115620032d657620032d662002e07565b80851615620032e457918102915b93841c9390800290620032b6565b509250929050565b6000826200330b57506001620007a7565b816200331a57506000620007a7565b81600181146200333357600281146200333e576200335e565b6001915050620007a7565b60ff84111562003352576200335262002e07565b50506001821b620007a7565b5060208310610133831016604e8410600b841016171562003383575081810a620007a7565b6200338f8383620032b1565b8060001904821115620033a657620033a662002e07565b029392505050565b60006200286f8383620032fa565b600082821015620033d157620033d162002e07565b500390565b60008219821115620033ec57620033ec62002e07565b500190565b634e487b7160e01b600052600160045260246000fd5b600080858511156200341857600080fd5b838611156200342657600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200344f57600080fd5b87356200345c81620026e5565b965060208801356200346e81620026e5565b95506040880135945060608801359350608088013562002a4981620029cc565b60208082526030908201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560408201526f29aa2fa122afaa2422afa9a2a72222a960811b606082015260800190565b60208082526025908201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f42456040820152645f5448495360d81b606082015260800190565b600080600080600080600080610100898b0312156200354157600080fd5b88356200354e81620026e5565b975060208901356200356081620026e5565b9650604089013595506060890135945060808901356200358081620030a4565b935060a08901356200359281620029cc565b979a969950949793969295929450505060c08201359160e0013590565b6020815260006200286f602083018462002ee756fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b14f80bfcbda3f7be499de7c67ec81639549928b9cee16384da9f2fb8c22dce64736f6c634300080f0033a2646970667358221220fad1a6248965920df6eb0285e065ec54caed2e824d877c2b9a54a0ac5b863a7164736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50614b3d806100206000396000f3fe608060405260043610620001f35760003560e01c806381b1c174116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b806381b1c17414620004615780638da5cb5b146200049b5780638f61151914620004bb57600080fd5b8063318aee3d116200018d5780634638554911620001585780634638554914620003da578063647c576c14620003ff578063715018a614620004245780637b6323c1146200043c57600080fd5b8063318aee3d14620003095780633ae0504714620003785780633da8168214620003905780633e19704314620003b557600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f620002093660046200276e565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f62000721565b3480156200026757600080fd5b506200027f62000279366004620027fb565b6200075a565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002837565b620007ad565b348015620002ca57600080fd5b506200020f620002dc36600462002851565b620007bc565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002876565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b50620002fa620007e8565b3480156200039d57600080fd5b506200022d620003af3660046200295e565b620008db565b348015620003c257600080fd5b50620002fa620003d4366004620029dc565b620009dd565b348015620003e757600080fd5b506200020f620003f936600462002aed565b62000a6a565b3480156200040c57600080fd5b506200020f6200041e36600462002bd4565b62000c03565b3480156200043157600080fd5b506200020f62000d78565b3480156200044957600080fd5b506200020f6200045b36600462002aed565b62000d8e565b3480156200046e57600080fd5b506200027f6200048036600462002837565b6024602052600090815260409020546001600160a01b031681565b348015620004a857600080fd5b50605a546001600160a01b03166200027f565b348015620004c857600080fd5b506027546200027f906001600160a01b031681565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002837565b6200122f565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002c24565b62001274565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002cd8565b6200138b565b348015620005e957600080fd5b506200020f620014e8565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002837565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002876565b6200151f565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007095760405162461bcd60e51b815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e606482015269185b081d195cdd1b995d60b21b608482015260a4015b60405180910390fd5b620007198686868686866200159e565b505050505050565b6027546001600160a01b031633146200074e5760405162461bcd60e51b8152600401620007009062002d40565b62000758620019cf565b565b60006024600084846040516020016200077592919062002d9d565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b762001a2d565b608c55565b620007c662001a2d565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008d257826001166001036200085357600181602081106200081f576200081f62002dc7565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000880565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088d60028462002e09565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c99062002e20565b915050620007f3565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009ce5781600116600103620009585786818151811062000916576200091662002dc7565b6020026020010151836040516020016200093a929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009aa565b828782815181106200096e576200096e62002dc7565b602002602001015160405160200162000991929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b760028362002e09565b915080620009c58162002e20565b915050620008eb565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a905760405162461bcd60e51b8152600401620007009062002e3c565b62000aa68a8a8a8a8a8a8a8a8a8a600162001a89565b62000ab78963ffffffff1662001d1a565b6000836001600160a01b03168387898560405160240162000adb9392919062002f01565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b12919062002f3c565b60006040518083038185875af1925050503d806000811462000b51576040519150601f19603f3d011682016040523d82523d6000602084013e62000b56565b606091505b505090508062000bb55760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f46416044820152631253115160e21b606482015260840162000700565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bee95949392919062002f5a565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c245750600054600160ff909116105b8062000c405750303b15801562000c40575060005460ff166001145b62000ca55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000700565b6000805460ff19166001179055801562000cc9576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d2b62001d5c565b801562000d72576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8262001a2d565b62000758600062001dcf565b60225460ff161562000db45760405162461bcd60e51b8152600401620007009062002e3c565b62000dca8a8a8a8a8a8a8a8a8a8a600062001a89565b62000ddb8963ffffffff1662001d1a565b6001600160a01b03851662000ec457604080516000808252602082019092526001600160a01b03851690849060405162000e16919062002f3c565b60006040518083038185875af1925050503d806000811462000e55576040519150601f19603f3d011682016040523d82523d6000602084013e62000e5a565b606091505b505090508062000ebd5760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201526617d1905253115160ca1b606482015260840162000700565b50620011e2565b60225463ffffffff61010090910481169087160362000ef95762000ef36001600160a01b038616848462001e21565b620011e2565b6000868660405160200162000f1092919062002d9d565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620011675760008060008580602001905181019062000f62919062002fdd565b92509250925060008584848460405162000f7c90620026d7565b62000f8a9392919062003053565b8190604051809103906000f590508015801562000fab573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001000573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200102691906200309f565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620011559392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011df565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620011b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011dd91906200309f565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200121b95949392919062002f5a565b60405180910390a150505050505050505050565b600080620012406101008462002e09565b905060006200125261010085620030bf565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200128c92919062002d9d565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012bf90620026d7565b601f1982820381018352601f909101166040819052620012ec908d908d908d908d908d90602001620030ff565b60408051601f19818403018152908290526200130c929160200162003140565b604051602081830303815290604052805190602001206040516020016200136594939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013b15760405162461bcd60e51b8152600401620007009062002e3c565b60225463ffffffff610100909104811690841603620013e45760405162461bcd60e51b8152600401620007009062003173565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff16338686348760215460405162001438989796959493929190620031bd565b60405180910390a1620014756200146f6001602260019054906101000a900463ffffffff16338787348880519060200120620009dd565b62001e8b565b6026546001600160a01b03166333d6247d62001490620007e8565b6040518263ffffffff1660e01b8152600401620014af91815260200190565b600060405180830381600087803b158015620014ca57600080fd5b505af1158015620014df573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015155760405162461bcd60e51b8152600401620007009062002d40565b6200075862001fd7565b6200152962001a2d565b6001600160a01b038116620015905760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000700565b6200159b8162001dcf565b50565b60225460ff1615620015c45760405162461bcd60e51b8152600401620007009062002e3c565b60225463ffffffff610100909104811690861603620015f75760405162461bcd60e51b8152600401620007009062003173565b60008060606001600160a01b0389166200167e57853414620016745760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201526e4d415443485f4d53475f56414c554560881b606482015260840162000700565b60009150620018ef565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200174c57604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562001713573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200173991906200309f565b50602081015181519094509250620018ed565b84156200176157620017618a88888862002086565b620017786001600160a01b038b1633308a6200248a565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620017cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620017f991908101906200322a565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001838573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200186291908101906200322a565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620018a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018c7919062003263565b604051602001620018db9392919062003053565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162001931989796959493929190620031bd565b60405180910390a1620019566200146f600084868c8c8c8880519060200120620009dd565b6026546001600160a01b03166333d6247d62001971620007e8565b6040518263ffffffff1660e01b81526004016200199091815260200190565b600060405180830381600087803b158015620019ab57600080fd5b505af1158015620019c0573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff1615620019f55760405162461bcd60e51b8152600401620007009062002e3c565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000700565b62001a9a8a63ffffffff166200122f565b1562001af55760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c416044820152631253515160e21b606482015260840162000700565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001b69573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001b8f919062003283565b90508060000362001bf95760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201526c17d493d3d517d2539590531251609a1b606482015260840162000700565b60225463ffffffff878116610100909204161462001c805760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d41544348000000000000000000606482015260840162000700565b602254600090610100900463ffffffff1662001c9e57508862001ca1565b50895b62001ccc62001cbd848b8b8b8b8b8b80519060200120620009dd565b8e8e63ffffffff1684620008db565b620019c05760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c4944604482015260640162000700565b600062001d2a6101008362002e09565b9050600062001d3c61010084620030bf565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001dc95760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000700565b62000758335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001e8690849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620024c4565b505050565b80600162001e9c602060026200339a565b62001ea89190620033a8565b6021541062001f0d5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000700565b60016021600082825462001f229190620033c2565b909155505060215460005b602081101562001fcc578160011660010362001f6257826001826020811062001f5a5762001f5a62002dc7565b015550505050565b6001816020811062001f785762001f7862002dc7565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001fb5919062002e09565b91508062001fc38162002e20565b91505062001f2d565b5062001e86620033dd565b60225460ff16620020515760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000700565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000620020c983838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200259d92505050565b9050632afa533160e01b6001600160e01b0319821601620022b2576000808080808080620020fb896004818d620033f3565b8101906200210a91906200341f565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200214c5760405162461bcd60e51b815260040162000700906200347a565b6001600160a01b0386163014620021775760405162461bcd60e51b81526004016200070090620034ca565b8a8514620021de5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201526c09e8aa6be9c9ea8be9a82a8869609b1b606482015260840162000700565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200225e919062002f3c565b6000604051808303816000865af19150503d80600081146200229d576040519150601f19603f3d011682016040523d82523d6000602084013e620022a2565b606091505b5050505050505050505062002483565b6001600160e01b031981166323f2ebc360e21b14620023145760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000700565b6000808080808080806200232c8a6004818e620033f3565b8101906200233b91906200350f565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200237f5760405162461bcd60e51b815260040162000700906200347a565b6001600160a01b0387163014620023aa5760405162461bcd60e51b81526004016200070090620034ca565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162002433919062002f3c565b6000604051808303816000865af19150503d806000811462002472576040519150601f19603f3d011682016040523d82523d6000602084013e62002477565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d729085906323b872dd60e01b9060840162001e4e565b60006200251b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620025a49092919063ffffffff16565b80519091501562001e8657808060200190518101906200253c91906200309f565b62001e865760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000700565b6020015190565b6060620009d5848460008585600080866001600160a01b03168587604051620025ce919062002f3c565b60006040518083038185875af1925050503d80600081146200260d576040519150601f19603f3d011682016040523d82523d6000602084013e62002612565b606091505b5091509150620026258783838762002630565b979650505050505050565b60608315620026a45782516000036200269c576001600160a01b0385163b6200269c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000700565b5081620009d5565b620009d58383815115620026bb5781518083602001fd5b8060405162461bcd60e51b81526004016200070091906200359b565b61155780620035b183390190565b6001600160a01b03811681146200159b57600080fd5b80356200270881620026e5565b919050565b803563ffffffff811681146200270857600080fd5b60008083601f8401126200273557600080fd5b50813567ffffffffffffffff8111156200274e57600080fd5b6020830191508360208285010111156200276757600080fd5b9250929050565b60008060008060008060a087890312156200278857600080fd5b86356200279581620026e5565b9550620027a5602088016200270d565b94506040870135620027b781620026e5565b935060608701359250608087013567ffffffffffffffff811115620027db57600080fd5b620027e989828a0162002722565b979a9699509497509295939492505050565b600080604083850312156200280f57600080fd5b6200281a836200270d565b915060208301356200282c81620026e5565b809150509250929050565b6000602082840312156200284a57600080fd5b5035919050565b6000602082840312156200286457600080fd5b6200286f826200270d565b9392505050565b6000602082840312156200288957600080fd5b81356200286f81620026e5565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620028d857620028d862002896565b604052919050565b600082601f830112620028f257600080fd5b8135602067ffffffffffffffff82111562002911576200291162002896565b8160051b62002922828201620028ac565b92835284810182019282810190878511156200293d57600080fd5b83870192505b84831015620026255782358252918301919083019062002943565b600080600080608085870312156200297557600080fd5b84359350602085013567ffffffffffffffff808211156200299557600080fd5b620029a388838901620028e0565b9450604087013591508082168214620029bb57600080fd5b509396929550929360600135925050565b60ff811681146200159b57600080fd5b600080600080600080600060e0888a031215620029f857600080fd5b873562002a0581620029cc565b965062002a15602089016200270d565b9550604088013562002a2781620026e5565b945062002a37606089016200270d565b9350608088013562002a4981620026e5565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002a835762002a8362002896565b50601f01601f191660200190565b600082601f83011262002aa357600080fd5b813562002aba62002ab48262002a66565b620028ac565b81815284602083860101111562002ad057600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002b0e57600080fd5b8a3567ffffffffffffffff8082111562002b2757600080fd5b62002b358e838f01620028e0565b9b5062002b4560208e016200270d565b9a5060408d0135995060608d0135985062002b6360808e016200270d565b975062002b7360a08e01620026fb565b965062002b8360c08e016200270d565b955062002b9360e08e01620026fb565b94506101008d013593506101208d013591508082111562002bb357600080fd5b5062002bc28d828e0162002a91565b9150509295989b9194979a5092959850565b60008060006060848603121562002bea57600080fd5b62002bf5846200270d565b9250602084013562002c0781620026e5565b9150604084013562002c1981620026e5565b809150509250925092565b600080600080600080600060a0888a03121562002c4057600080fd5b62002c4b886200270d565b9650602088013562002c5d81620026e5565b9550604088013567ffffffffffffffff8082111562002c7b57600080fd5b62002c898b838c0162002722565b909750955060608a013591508082111562002ca357600080fd5b5062002cb28a828b0162002722565b909450925050608088013562002cc881620029cc565b8091505092959891949750929550565b60008060006060848603121562002cee57600080fd5b62002cf9846200270d565b9250602084013562002d0b81620026e5565b9150604084013567ffffffffffffffff81111562002d2857600080fd5b62002d368682870162002a91565b9150509250925092565b6020808252603d908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79506f6c79676f6e5a4b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002e1b5762002e1b62002ddd565b500490565b60006001820162002e355762002e3562002df3565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002ec157818101518382015260200162002ea7565b8381111562000d725750506000910152565b6000815180845262002eed81602086016020860162002ea4565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002f339083018462002ed3565b95945050505050565b6000825162002f5081846020870162002ea4565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f83011262002fa357600080fd5b815162002fb462002ab48262002a66565b81815284602083860101111562002fca57600080fd5b620009d582602083016020870162002ea4565b60008060006060848603121562002ff357600080fd5b835167ffffffffffffffff808211156200300c57600080fd5b6200301a8783880162002f91565b945060208601519150808211156200303157600080fd5b50620030408682870162002f91565b925050604084015162002c1981620029cc565b60608152600062003068606083018662002ed3565b82810360208401526200307c818662002ed3565b91505060ff83166040830152949350505050565b80151581146200159b57600080fd5b600060208284031215620030b257600080fd5b81516200286f8162003090565b600082620030d157620030d162002ddd565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003115606083018789620030d6565b82810360208401526200312a818688620030d6565b91505060ff831660408301529695505050505050565b600083516200315481846020880162002ea4565b8351908301906200316a81836020880162002ea4565b01949350505050565b6020808252602a908201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e546040820152692fa122afa4aa29a2a62360b11b606082015260800190565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032118483018762002ed3565b925080851660e085015250509998505050505050505050565b6000602082840312156200323d57600080fd5b815167ffffffffffffffff8111156200325557600080fd5b620009d58482850162002f91565b6000602082840312156200327657600080fd5b81516200286f81620029cc565b6000602082840312156200329657600080fd5b5051919050565b600181815b80851115620032de578160001904821115620032c257620032c262002df3565b80851615620032d057918102915b93841c9390800290620032a2565b509250929050565b600082620032f757506001620007a7565b816200330657506000620007a7565b81600181146200331f57600281146200332a576200334a565b6001915050620007a7565b60ff8411156200333e576200333e62002df3565b50506001821b620007a7565b5060208310610133831016604e8410600b84101617156200336f575081810a620007a7565b6200337b83836200329d565b806000190482111562003392576200339262002df3565b029392505050565b60006200286f8383620032e6565b600082821015620033bd57620033bd62002df3565b500390565b60008219821115620033d857620033d862002df3565b500190565b634e487b7160e01b600052600160045260246000fd5b600080858511156200340457600080fd5b838611156200341257600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200343b57600080fd5b87356200344881620026e5565b965060208801356200345a81620026e5565b95506040880135945060608801359350608088013562002a4981620029cc565b60208082526030908201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560408201526f29aa2fa122afaa2422afa9a2a72222a960811b606082015260800190565b60208082526025908201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f42456040820152645f5448495360d81b606082015260800190565b600080600080600080600080610100898b0312156200352d57600080fd5b88356200353a81620026e5565b975060208901356200354c81620026e5565b9650604089013595506060890135945060808901356200356c8162003090565b935060a08901356200357e81620029cc565b979a969950949793969295929450505060c08201359160e0013590565b6020815260006200286f602083018462002ed356fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b14f80bfcbda3f7be499de7c67ec81639549928b9cee16384da9f2fb8c22dce64736f6c634300080f0033a26469706673582212209d92a2b1c7e60e3e584756f7d5db1e0439ffcf57ef3e1dfe02bb55cc69198f5664736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001f35760003560e01c806381b1c174116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b806381b1c17414620004615780638da5cb5b146200049b5780638f61151914620004bb57600080fd5b8063318aee3d116200018d5780634638554911620001585780634638554914620003da578063647c576c14620003ff578063715018a614620004245780637b6323c1146200043c57600080fd5b8063318aee3d14620003095780633ae0504714620003785780633da8168214620003905780633e19704314620003b557600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f620002093660046200276e565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f62000721565b3480156200026757600080fd5b506200027f62000279366004620027fb565b6200075a565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002837565b620007ad565b348015620002ca57600080fd5b506200020f620002dc36600462002851565b620007bc565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002876565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b50620002fa620007e8565b3480156200039d57600080fd5b506200022d620003af3660046200295e565b620008db565b348015620003c257600080fd5b50620002fa620003d4366004620029dc565b620009dd565b348015620003e757600080fd5b506200020f620003f936600462002aed565b62000a6a565b3480156200040c57600080fd5b506200020f6200041e36600462002bd4565b62000c03565b3480156200043157600080fd5b506200020f62000d78565b3480156200044957600080fd5b506200020f6200045b36600462002aed565b62000d8e565b3480156200046e57600080fd5b506200027f6200048036600462002837565b6024602052600090815260409020546001600160a01b031681565b348015620004a857600080fd5b50605a546001600160a01b03166200027f565b348015620004c857600080fd5b506027546200027f906001600160a01b031681565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002837565b6200122f565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002c24565b62001274565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002cd8565b6200138b565b348015620005e957600080fd5b506200020f620014e8565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002837565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002876565b6200151f565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007095760405162461bcd60e51b815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e606482015269185b081d195cdd1b995d60b21b608482015260a4015b60405180910390fd5b620007198686868686866200159e565b505050505050565b6027546001600160a01b031633146200074e5760405162461bcd60e51b8152600401620007009062002d40565b62000758620019cf565b565b60006024600084846040516020016200077592919062002d9d565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b762001a2d565b608c55565b620007c662001a2d565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008d257826001166001036200085357600181602081106200081f576200081f62002dc7565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000880565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088d60028462002e09565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c99062002e20565b915050620007f3565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009ce5781600116600103620009585786818151811062000916576200091662002dc7565b6020026020010151836040516020016200093a929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009aa565b828782815181106200096e576200096e62002dc7565b602002602001015160405160200162000991929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b760028362002e09565b915080620009c58162002e20565b915050620008eb565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a905760405162461bcd60e51b8152600401620007009062002e3c565b62000aa68a8a8a8a8a8a8a8a8a8a600162001a89565b62000ab78963ffffffff1662001d1a565b6000836001600160a01b03168387898560405160240162000adb9392919062002f01565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b12919062002f3c565b60006040518083038185875af1925050503d806000811462000b51576040519150601f19603f3d011682016040523d82523d6000602084013e62000b56565b606091505b505090508062000bb55760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f46416044820152631253115160e21b606482015260840162000700565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bee95949392919062002f5a565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c245750600054600160ff909116105b8062000c405750303b15801562000c40575060005460ff166001145b62000ca55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000700565b6000805460ff19166001179055801562000cc9576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d2b62001d5c565b801562000d72576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8262001a2d565b62000758600062001dcf565b60225460ff161562000db45760405162461bcd60e51b8152600401620007009062002e3c565b62000dca8a8a8a8a8a8a8a8a8a8a600062001a89565b62000ddb8963ffffffff1662001d1a565b6001600160a01b03851662000ec457604080516000808252602082019092526001600160a01b03851690849060405162000e16919062002f3c565b60006040518083038185875af1925050503d806000811462000e55576040519150601f19603f3d011682016040523d82523d6000602084013e62000e5a565b606091505b505090508062000ebd5760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201526617d1905253115160ca1b606482015260840162000700565b50620011e2565b60225463ffffffff61010090910481169087160362000ef95762000ef36001600160a01b038616848462001e21565b620011e2565b6000868660405160200162000f1092919062002d9d565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620011675760008060008580602001905181019062000f62919062002fdd565b92509250925060008584848460405162000f7c90620026d7565b62000f8a9392919062003053565b8190604051809103906000f590508015801562000fab573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001000573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200102691906200309f565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620011559392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011df565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620011b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011dd91906200309f565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200121b95949392919062002f5a565b60405180910390a150505050505050505050565b600080620012406101008462002e09565b905060006200125261010085620030bf565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200128c92919062002d9d565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012bf90620026d7565b601f1982820381018352601f909101166040819052620012ec908d908d908d908d908d90602001620030ff565b60408051601f19818403018152908290526200130c929160200162003140565b604051602081830303815290604052805190602001206040516020016200136594939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013b15760405162461bcd60e51b8152600401620007009062002e3c565b60225463ffffffff610100909104811690841603620013e45760405162461bcd60e51b8152600401620007009062003173565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff16338686348760215460405162001438989796959493929190620031bd565b60405180910390a1620014756200146f6001602260019054906101000a900463ffffffff16338787348880519060200120620009dd565b62001e8b565b6026546001600160a01b03166333d6247d62001490620007e8565b6040518263ffffffff1660e01b8152600401620014af91815260200190565b600060405180830381600087803b158015620014ca57600080fd5b505af1158015620014df573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015155760405162461bcd60e51b8152600401620007009062002d40565b6200075862001fd7565b6200152962001a2d565b6001600160a01b038116620015905760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000700565b6200159b8162001dcf565b50565b60225460ff1615620015c45760405162461bcd60e51b8152600401620007009062002e3c565b60225463ffffffff610100909104811690861603620015f75760405162461bcd60e51b8152600401620007009062003173565b60008060606001600160a01b0389166200167e57853414620016745760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201526e4d415443485f4d53475f56414c554560881b606482015260840162000700565b60009150620018ef565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200174c57604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562001713573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200173991906200309f565b50602081015181519094509250620018ed565b84156200176157620017618a88888862002086565b620017786001600160a01b038b1633308a6200248a565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620017cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620017f991908101906200322a565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001838573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200186291908101906200322a565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620018a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018c7919062003263565b604051602001620018db9392919062003053565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162001931989796959493929190620031bd565b60405180910390a1620019566200146f600084868c8c8c8880519060200120620009dd565b6026546001600160a01b03166333d6247d62001971620007e8565b6040518263ffffffff1660e01b81526004016200199091815260200190565b600060405180830381600087803b158015620019ab57600080fd5b505af1158015620019c0573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff1615620019f55760405162461bcd60e51b8152600401620007009062002e3c565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000700565b62001a9a8a63ffffffff166200122f565b1562001af55760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c416044820152631253515160e21b606482015260840162000700565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001b69573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001b8f919062003283565b90508060000362001bf95760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201526c17d493d3d517d2539590531251609a1b606482015260840162000700565b60225463ffffffff878116610100909204161462001c805760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d41544348000000000000000000606482015260840162000700565b602254600090610100900463ffffffff1662001c9e57508862001ca1565b50895b62001ccc62001cbd848b8b8b8b8b8b80519060200120620009dd565b8e8e63ffffffff1684620008db565b620019c05760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c4944604482015260640162000700565b600062001d2a6101008362002e09565b9050600062001d3c61010084620030bf565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001dc95760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000700565b62000758335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001e8690849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620024c4565b505050565b80600162001e9c602060026200339a565b62001ea89190620033a8565b6021541062001f0d5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000700565b60016021600082825462001f229190620033c2565b909155505060215460005b602081101562001fcc578160011660010362001f6257826001826020811062001f5a5762001f5a62002dc7565b015550505050565b6001816020811062001f785762001f7862002dc7565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001fb5919062002e09565b91508062001fc38162002e20565b91505062001f2d565b5062001e86620033dd565b60225460ff16620020515760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000700565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000620020c983838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200259d92505050565b9050632afa533160e01b6001600160e01b0319821601620022b2576000808080808080620020fb896004818d620033f3565b8101906200210a91906200341f565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200214c5760405162461bcd60e51b815260040162000700906200347a565b6001600160a01b0386163014620021775760405162461bcd60e51b81526004016200070090620034ca565b8a8514620021de5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201526c09e8aa6be9c9ea8be9a82a8869609b1b606482015260840162000700565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200225e919062002f3c565b6000604051808303816000865af19150503d80600081146200229d576040519150601f19603f3d011682016040523d82523d6000602084013e620022a2565b606091505b5050505050505050505062002483565b6001600160e01b031981166323f2ebc360e21b14620023145760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000700565b6000808080808080806200232c8a6004818e620033f3565b8101906200233b91906200350f565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200237f5760405162461bcd60e51b815260040162000700906200347a565b6001600160a01b0387163014620023aa5760405162461bcd60e51b81526004016200070090620034ca565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162002433919062002f3c565b6000604051808303816000865af19150503d806000811462002472576040519150601f19603f3d011682016040523d82523d6000602084013e62002477565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d729085906323b872dd60e01b9060840162001e4e565b60006200251b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620025a49092919063ffffffff16565b80519091501562001e8657808060200190518101906200253c91906200309f565b62001e865760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000700565b6020015190565b6060620009d5848460008585600080866001600160a01b03168587604051620025ce919062002f3c565b60006040518083038185875af1925050503d80600081146200260d576040519150601f19603f3d011682016040523d82523d6000602084013e62002612565b606091505b5091509150620026258783838762002630565b979650505050505050565b60608315620026a45782516000036200269c576001600160a01b0385163b6200269c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000700565b5081620009d5565b620009d58383815115620026bb5781518083602001fd5b8060405162461bcd60e51b81526004016200070091906200359b565b61155780620035b183390190565b6001600160a01b03811681146200159b57600080fd5b80356200270881620026e5565b919050565b803563ffffffff811681146200270857600080fd5b60008083601f8401126200273557600080fd5b50813567ffffffffffffffff8111156200274e57600080fd5b6020830191508360208285010111156200276757600080fd5b9250929050565b60008060008060008060a087890312156200278857600080fd5b86356200279581620026e5565b9550620027a5602088016200270d565b94506040870135620027b781620026e5565b935060608701359250608087013567ffffffffffffffff811115620027db57600080fd5b620027e989828a0162002722565b979a9699509497509295939492505050565b600080604083850312156200280f57600080fd5b6200281a836200270d565b915060208301356200282c81620026e5565b809150509250929050565b6000602082840312156200284a57600080fd5b5035919050565b6000602082840312156200286457600080fd5b6200286f826200270d565b9392505050565b6000602082840312156200288957600080fd5b81356200286f81620026e5565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620028d857620028d862002896565b604052919050565b600082601f830112620028f257600080fd5b8135602067ffffffffffffffff82111562002911576200291162002896565b8160051b62002922828201620028ac565b92835284810182019282810190878511156200293d57600080fd5b83870192505b84831015620026255782358252918301919083019062002943565b600080600080608085870312156200297557600080fd5b84359350602085013567ffffffffffffffff808211156200299557600080fd5b620029a388838901620028e0565b9450604087013591508082168214620029bb57600080fd5b509396929550929360600135925050565b60ff811681146200159b57600080fd5b600080600080600080600060e0888a031215620029f857600080fd5b873562002a0581620029cc565b965062002a15602089016200270d565b9550604088013562002a2781620026e5565b945062002a37606089016200270d565b9350608088013562002a4981620026e5565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002a835762002a8362002896565b50601f01601f191660200190565b600082601f83011262002aa357600080fd5b813562002aba62002ab48262002a66565b620028ac565b81815284602083860101111562002ad057600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002b0e57600080fd5b8a3567ffffffffffffffff8082111562002b2757600080fd5b62002b358e838f01620028e0565b9b5062002b4560208e016200270d565b9a5060408d0135995060608d0135985062002b6360808e016200270d565b975062002b7360a08e01620026fb565b965062002b8360c08e016200270d565b955062002b9360e08e01620026fb565b94506101008d013593506101208d013591508082111562002bb357600080fd5b5062002bc28d828e0162002a91565b9150509295989b9194979a5092959850565b60008060006060848603121562002bea57600080fd5b62002bf5846200270d565b9250602084013562002c0781620026e5565b9150604084013562002c1981620026e5565b809150509250925092565b600080600080600080600060a0888a03121562002c4057600080fd5b62002c4b886200270d565b9650602088013562002c5d81620026e5565b9550604088013567ffffffffffffffff8082111562002c7b57600080fd5b62002c898b838c0162002722565b909750955060608a013591508082111562002ca357600080fd5b5062002cb28a828b0162002722565b909450925050608088013562002cc881620029cc565b8091505092959891949750929550565b60008060006060848603121562002cee57600080fd5b62002cf9846200270d565b9250602084013562002d0b81620026e5565b9150604084013567ffffffffffffffff81111562002d2857600080fd5b62002d368682870162002a91565b9150509250925092565b6020808252603d908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79506f6c79676f6e5a4b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002e1b5762002e1b62002ddd565b500490565b60006001820162002e355762002e3562002df3565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002ec157818101518382015260200162002ea7565b8381111562000d725750506000910152565b6000815180845262002eed81602086016020860162002ea4565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002f339083018462002ed3565b95945050505050565b6000825162002f5081846020870162002ea4565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f83011262002fa357600080fd5b815162002fb462002ab48262002a66565b81815284602083860101111562002fca57600080fd5b620009d582602083016020870162002ea4565b60008060006060848603121562002ff357600080fd5b835167ffffffffffffffff808211156200300c57600080fd5b6200301a8783880162002f91565b945060208601519150808211156200303157600080fd5b50620030408682870162002f91565b925050604084015162002c1981620029cc565b60608152600062003068606083018662002ed3565b82810360208401526200307c818662002ed3565b91505060ff83166040830152949350505050565b80151581146200159b57600080fd5b600060208284031215620030b257600080fd5b81516200286f8162003090565b600082620030d157620030d162002ddd565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003115606083018789620030d6565b82810360208401526200312a818688620030d6565b91505060ff831660408301529695505050505050565b600083516200315481846020880162002ea4565b8351908301906200316a81836020880162002ea4565b01949350505050565b6020808252602a908201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e546040820152692fa122afa4aa29a2a62360b11b606082015260800190565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032118483018762002ed3565b925080851660e085015250509998505050505050505050565b6000602082840312156200323d57600080fd5b815167ffffffffffffffff8111156200325557600080fd5b620009d58482850162002f91565b6000602082840312156200327657600080fd5b81516200286f81620029cc565b6000602082840312156200329657600080fd5b5051919050565b600181815b80851115620032de578160001904821115620032c257620032c262002df3565b80851615620032d057918102915b93841c9390800290620032a2565b509250929050565b600082620032f757506001620007a7565b816200330657506000620007a7565b81600181146200331f57600281146200332a576200334a565b6001915050620007a7565b60ff8411156200333e576200333e62002df3565b50506001821b620007a7565b5060208310610133831016604e8410600b84101617156200336f575081810a620007a7565b6200337b83836200329d565b806000190482111562003392576200339262002df3565b029392505050565b60006200286f8383620032e6565b600082821015620033bd57620033bd62002df3565b500390565b60008219821115620033d857620033d862002df3565b500190565b634e487b7160e01b600052600160045260246000fd5b600080858511156200340457600080fd5b838611156200341257600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200343b57600080fd5b87356200344881620026e5565b965060208801356200345a81620026e5565b95506040880135945060608801359350608088013562002a4981620029cc565b60208082526030908201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560408201526f29aa2fa122afaa2422afa9a2a72222a960811b606082015260800190565b60208082526025908201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f42456040820152645f5448495360d81b606082015260800190565b600080600080600080600080610100898b0312156200352d57600080fd5b88356200353a81620026e5565b975060208901356200354c81620026e5565b9650604089013595506060890135945060808901356200356c8162003090565b935060a08901356200357e81620029cc565b979a969950949793969295929450505060c08201359160e0013590565b6020815260006200286f602083018462002ed356fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b14f80bfcbda3f7be499de7c67ec81639549928b9cee16384da9f2fb8c22dce64736f6c634300080f0033a26469706673582212209d92a2b1c7e60e3e584756f7d5db1e0439ffcf57ef3e1dfe02bb55cc69198f5664736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZKEVM.json b/compiled-contracts/PolygonZKEVM.json new file mode 100644 index 000000000..e4da4caa8 --- /dev/null +++ b/compiled-contracts/PolygonZKEVM.json @@ -0,0 +1,1476 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "PolygonZKEVM", + "sourceName": "contracts/PolygonZKEVM.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint64", + "name": "numBatch", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "stateRoot", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint64", + "name": "pendingStateNum", + "type": "uint64" + } + ], + "name": "ConsolidatePendingState", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "EmergencyStateActivated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "EmergencyStateDeactivated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint64", + "name": "forceBatchNum", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "lastGlobalExitRoot", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "sequencer", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "transactions", + "type": "bytes" + } + ], + "name": "ForceBatch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint64", + "name": "numBatch", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "stateRoot", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "aggregator", + "type": "address" + } + ], + "name": "OverridePendingState", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "storedStateRoot", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "provedStateRoot", + "type": "bytes32" + } + ], + "name": "ProveNonDeterministicPendingState", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint64", + "name": "numBatch", + "type": "uint64" + } + ], + "name": "SequenceBatches", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint64", + "name": "numBatch", + "type": "uint64" + } + ], + "name": "SequenceForceBatches", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "SetAdmin", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "newForceBatchAllowed", + "type": "bool" + } + ], + "name": "SetForceBatchAllowed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint16", + "name": "newMultiplierBatchFee", + "type": "uint16" + } + ], + "name": "SetMultiplierBatchFee", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "newPendingStateTimeout", + "type": "uint64" + } + ], + "name": "SetPendingStateTimeout", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedAggregator", + "type": "address" + } + ], + "name": "SetTrustedAggregator", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "newTrustedAggregatorTimeout", + "type": "uint64" + } + ], + "name": "SetTrustedAggregatorTimeout", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedSequencer", + "type": "address" + } + ], + "name": "SetTrustedSequencer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "newTrustedSequencerURL", + "type": "string" + } + ], + "name": "SetTrustedSequencerURL", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "newVeryBatchTimeTarget", + "type": "uint64" + } + ], + "name": "SetVeryBatchTimeTarget", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint64", + "name": "numBatch", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "stateRoot", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "aggregator", + "type": "address" + } + ], + "name": "TrustedVerifyBatches", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint64", + "name": "numBatch", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "stateRoot", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "aggregator", + "type": "address" + } + ], + "name": "VerifyBatches", + "type": "event" + }, + { + "inputs": [], + "name": "FORCE_BATCH_TIMEOUT", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "HALT_AGGREGATION_TIMEOUT", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_BATCH_MULTIPLIER", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_TRANSACTIONS_BYTE_LENGTH", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_VERIFY_BATCHES", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "sequencedBatchNum", + "type": "uint64" + } + ], + "name": "activateEmergencyState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "batchFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "name": "batchNumToStateRoot", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "bridgeAddress", + "outputs": [ + { + "internalType": "contract IBridge", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "calculateRewardPerBatch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "chainID", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "pendingStateNum", + "type": "uint64" + } + ], + "name": "consolidatePendingState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "deactivateEmergencyState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "transactions", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "maticAmount", + "type": "uint256" + } + ], + "name": "forceBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "forceBatchAllowed", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "name": "forcedBatches", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getCurrentBatchFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "initNumBatch", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "finalNewBatch", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "newLocalExitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "oldStateRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "newStateRoot", + "type": "bytes32" + } + ], + "name": "getInputSnarkBytes", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLastVerifiedBatch", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "globalExitRootManager", + "outputs": [ + { + "internalType": "contract IGlobalExitRootManager", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGlobalExitRootManager", + "name": "_globalExitRootManager", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "_matic", + "type": "address" + }, + { + "internalType": "contract IVerifierRollup", + "name": "_rollupVerifier", + "type": "address" + }, + { + "internalType": "contract IBridge", + "name": "_bridgeAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "address", + "name": "admin", + "type": "address" + }, + { + "internalType": "uint64", + "name": "chainID", + "type": "uint64" + }, + { + "internalType": "address", + "name": "trustedSequencer", + "type": "address" + }, + { + "internalType": "uint64", + "name": "pendingStateTimeout", + "type": "uint64" + }, + { + "internalType": "bool", + "name": "forceBatchAllowed", + "type": "bool" + }, + { + "internalType": "address", + "name": "trustedAggregator", + "type": "address" + }, + { + "internalType": "uint64", + "name": "trustedAggregatorTimeout", + "type": "uint64" + } + ], + "internalType": "struct PolygonZKEVM.InitializePackedParameters", + "name": "initializePackedParameters", + "type": "tuple" + }, + { + "internalType": "bytes32", + "name": "genesisRoot", + "type": "bytes32" + }, + { + "internalType": "string", + "name": "_trustedSequencerURL", + "type": "string" + }, + { + "internalType": "string", + "name": "_networkName", + "type": "string" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "isEmergencyState", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "pendingStateNum", + "type": "uint64" + } + ], + "name": "isPendingStateConsolidable", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastBatchSequenced", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastForceBatch", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastForceBatchSequenced", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastPendingState", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastPendingStateConsolidated", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastTimestamp", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastVerifiedBatch", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "matic", + "outputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "multiplierBatchFee", + "outputs": [ + { + "internalType": "uint16", + "name": "", + "type": "uint16" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "networkName", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "initPendingStateNum", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "finalPendingStateNum", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "initNumBatch", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "finalNewBatch", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "newLocalExitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "newStateRoot", + "type": "bytes32" + }, + { + "internalType": "uint256[2]", + "name": "proofA", + "type": "uint256[2]" + }, + { + "internalType": "uint256[2][2]", + "name": "proofB", + "type": "uint256[2][2]" + }, + { + "internalType": "uint256[2]", + "name": "proofC", + "type": "uint256[2]" + } + ], + "name": "overridePendingState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingStateTimeout", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "pendingStateTransitions", + "outputs": [ + { + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "lastVerifiedBatch", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "exitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "stateRoot", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "initPendingStateNum", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "finalPendingStateNum", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "initNumBatch", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "finalNewBatch", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "newLocalExitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "newStateRoot", + "type": "bytes32" + }, + { + "internalType": "uint256[2]", + "name": "proofA", + "type": "uint256[2]" + }, + { + "internalType": "uint256[2][2]", + "name": "proofB", + "type": "uint256[2][2]" + }, + { + "internalType": "uint256[2]", + "name": "proofC", + "type": "uint256[2]" + } + ], + "name": "proveNonDeterministicPendingState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "rollupVerifier", + "outputs": [ + { + "internalType": "contract IVerifierRollup", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "transactions", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "globalExitRoot", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "minForcedTimestamp", + "type": "uint64" + } + ], + "internalType": "struct PolygonZKEVM.BatchData[]", + "name": "batches", + "type": "tuple[]" + } + ], + "name": "sequenceBatches", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "transactions", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "globalExitRoot", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "minForcedTimestamp", + "type": "uint64" + } + ], + "internalType": "struct PolygonZKEVM.ForcedBatchData[]", + "name": "batches", + "type": "tuple[]" + } + ], + "name": "sequenceForceBatches", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "name": "sequencedBatches", + "outputs": [ + { + "internalType": "bytes32", + "name": "accInputHash", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "sequencedTimestamp", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "previousLastBatchSequenced", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "setAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "newForceBatchAllowed", + "type": "bool" + } + ], + "name": "setForceBatchAllowed", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint16", + "name": "newMultiplierBatchFee", + "type": "uint16" + } + ], + "name": "setMultiplierBatchFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "newPendingStateTimeout", + "type": "uint64" + } + ], + "name": "setPendingStateTimeout", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newTrustedAggregator", + "type": "address" + } + ], + "name": "setTrustedAggregator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "newTrustedAggregatorTimeout", + "type": "uint64" + } + ], + "name": "setTrustedAggregatorTimeout", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newTrustedSequencer", + "type": "address" + } + ], + "name": "setTrustedSequencer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "newTrustedSequencerURL", + "type": "string" + } + ], + "name": "setTrustedSequencerURL", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "newVeryBatchTimeTarget", + "type": "uint64" + } + ], + "name": "setVeryBatchTimeTarget", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "trustedAggregator", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "trustedAggregatorTimeout", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "trustedSequencer", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "trustedSequencerURL", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "pendingStateNum", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "initNumBatch", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "finalNewBatch", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "newLocalExitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "newStateRoot", + "type": "bytes32" + }, + { + "internalType": "uint256[2]", + "name": "proofA", + "type": "uint256[2]" + }, + { + "internalType": "uint256[2][2]", + "name": "proofB", + "type": "uint256[2][2]" + }, + { + "internalType": "uint256[2]", + "name": "proofC", + "type": "uint256[2]" + } + ], + "name": "trustedVerifyBatches", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "pendingStateNum", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "initNumBatch", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "finalNewBatch", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "newLocalExitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "newStateRoot", + "type": "bytes32" + }, + { + "internalType": "uint256[2]", + "name": "proofA", + "type": "uint256[2]" + }, + { + "internalType": "uint256[2][2]", + "name": "proofB", + "type": "uint256[2][2]" + }, + { + "internalType": "uint256[2]", + "name": "proofC", + "type": "uint256[2]" + } + ], + "name": "verifyBatches", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "veryBatchTimeTarget", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b5061562380620000216000396000f3fe608060405234801561001057600080fd5b50600436106103af5760003560e01c80638da5cb5b116101f4578063cfa8ed471161011a578063e7a7ed02116100ad578063f14916d61161007c578063f14916d6146108eb578063f2fde38b146108fe578063f851a44014610911578063f8b823e41461092457600080fd5b8063e7a7ed0214610898578063e8bf92ed146108b2578063eaeb077b146108c5578063edc41121146108d857600080fd5b8063d939b315116100e9578063d939b3151461085a578063dbc1697614610874578063e11f3f181461087c578063e217cfd61461088f57600080fd5b8063cfa8ed4714610806578063d02103ca14610820578063d8d1091b14610833578063d8f54db01461084657600080fd5b8063ab9fc5ef11610192578063b6b0b09711610161578063b6b0b097146107be578063c0ed84e0146107d8578063c89e42df146107e0578063cf136306146107f357600080fd5b8063ab9fc5ef14610712578063adc879e91461071c578063afd23cbe14610736578063b4d63f581461075e57600080fd5b80639eb831b9116101ce5780639eb831b9146106d75780639f0d039d146106df578063a3c573eb146106e7578063aa58bad6146106fa57600080fd5b80638da5cb5b146106ab57806399f5634e146106bc5780639c9f3dfe146106c457600080fd5b80634a910e6a116102d9578063715018a611610277578063837a473811610246578063837a473814610606578063841b24d7146106745780638b48931e1461068e5780638c4a0af71461069857600080fd5b8063715018a6146105c55780637215541a146105cd57806375c508b3146105e05780637fcb3653146105f357600080fd5b806360943d6a116102b357806360943d6a1461056c5780636b8616ce1461057f5780636ff512cc1461059f578063704b6c02146105b257600080fd5b80634a910e6a146105315780635392c5e014610544578063542028d51461056457600080fd5b8063383b3be811610351578063456052671161032057806345605267146104d7578063458c0477146104f15780634834a343146105045780634a1a89a71461051757600080fd5b8063383b3be814610484578063394218e9146104975780633c158267146104aa578063423fa856146104bd57600080fd5b806319d8ac611161038d57806319d8ac6114610404578063220d78991461042f57806329878983146104425780632d0889d31461046d57600080fd5b8063107bf28c146103b457806315064c96146103d25780631816b7e5146103ef575b600080fd5b6103bc61092d565b6040516103c9919061476b565b60405180910390f35b6065546103df9060ff1681565b60405190151581526020016103c9565b6104026103fd366004614785565b6109bb565b005b606854610417906001600160401b031681565b6040516001600160401b0390911681526020016103c9565b6103bc61043d3660046147c5565b610aea565b606a54610455906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b61047661ea6081565b6040519081526020016103c9565b6103df610492366004614812565b610c90565b6104026104a5366004614812565b610cd7565b6104026104b836600461494f565b610e26565b60685461041790600160401b90046001600160401b031681565b60685461041790600160801b90046001600160401b031681565b607254610417906001600160401b031681565b610402610512366004614a8d565b61163a565b60725461041790600160401b90046001600160401b031681565b61040261053f366004614812565b611983565b610476610552366004614812565b606d6020526000908152604090205481565b6103bc611c23565b61040261057a366004614b2f565b611c30565b61047661058d366004614812565b60666020526000908152604090205481565b6104026105ad366004614c06565b611fa0565b6104026105c0366004614c06565b612024565b61040261209c565b6104026105db366004614812565b6120b0565b6104026105ee366004614c23565b612328565b606954610417906001600160401b031681565b610649610614366004614cc1565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103c9565b60725461041790600160c01b90046001600160401b031681565b61041762093a8081565b6104026106a6366004614ce8565b6123b7565b6033546001600160a01b0316610455565b61047661242e565b6104026106d2366004614812565b612511565b610476600c81565b607454610476565b607054610455906001600160a01b031681565b6065546104179061010090046001600160401b031681565b6104176206978081565b606c5461041790600160a81b90046001600160401b031681565b60655461074b90600160481b900461ffff1681565b60405161ffff90911681526020016103c9565b61079961076c366004614812565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103c9565b60655461045590600160581b90046001600160a01b031681565b610417612657565b6104026107ee366004614d05565b6126a4565b610402610801366004614812565b61270a565b60695461045590600160401b90046001600160a01b031681565b606c54610455906001600160a01b031681565b610402610841366004614d39565b61278b565b606c546103df90600160a01b900460ff1681565b60725461041790600160801b90046001600160401b031681565b610402612c55565b61040261088a366004614c23565b612d11565b6104176103e881565b60685461041790600160c01b90046001600160401b031681565b606b54610455906001600160a01b031681565b6104026108d3366004614e2b565b612e56565b6104026108e6366004614a8d565b61317e565b6104026108f9366004614c06565b61329e565b61040261090c366004614c06565b613316565b607354610455906001600160a01b031681565b61047660745481565b606f805461093a90614e6f565b80601f016020809104026020016040519081016040528092919081815260200182805461096690614e6f565b80156109b35780601f10610988576101008083540402835291602001916109b3565b820191906000526020600020905b81548152906001019060200180831161099657829003601f168201915b505050505081565b6073546001600160a01b031633146109ee5760405162461bcd60e51b81526004016109e590614ea9565b60405180910390fd5b6103e88161ffff16118015610a0857506104008161ffff16105b610a8d5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a4b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a4016109e5565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610b1c57508115155b610b90576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e5565b80610c05576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e5565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610cc692600160801b90920481169116614f02565b6001600160401b0316111592915050565b6073546001600160a01b03163314610d015760405162461bcd60e51b81526004016109e590614ea9565b62093a806001600160401b0382161115610d2d5760405162461bcd60e51b81526004016109e590614f2d565b60655460ff16610dd0576072546001600160401b03600160c01b909104811690821610610dd05760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a4b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109e5565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610adf565b60655460ff1615610e495760405162461bcd60e51b81526004016109e590614f98565b606954600160401b90046001600160a01b03163314610ed05760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e63657200000000000060648201526084016109e5565b805180610f455760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e6365203120626174636800000060648201526084016109e5565b6103e88110610fbe576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e79206261746368657360648201526084016109e5565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561145e57600087828151811061101157611011615000565b60200260200101519050600081606001516001600160401b031611156111ca578361103b81615016565b9450506000816000015180519060200120826020015183606001516040516020016110689392919061503c565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461110e5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d6174636800000060648201526084016109e5565b81606001516001600160401b031682604001516001600160401b031610156111c45760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a4016109e5565b50611351565b602081015115806112535750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b36329161120d9160040190815260200190565b6020604051808303816000875af115801561122c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611250919061505f565b15155b6112c55760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d75737420657869737400000000000060648201526084016109e5565b80515161ea60116113515760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a4016109e5565b856001600160401b031681604001516001600160401b03161015801561138457504281604001516001600160401b031611155b6113f65760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e676500000060648201526084016109e5565b8051805160209182012081830151604080850151905161141d948894939291339101615078565b604051602081830303815290604052805190602001209250848061144090615016565b95505080604001519550508080611456906150bc565b915050610ff5565b506068546001600160401b03600160c01b909104811690831611156114e35760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b60648201526084016109e5565b60685460009061150390600160801b90046001600160401b0316846150d5565b611516906001600160401b0316876150fd565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115eb903390309084906115d09190615114565b606554600160581b90046001600160a01b031692919061338c565b6115f36133f7565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff161561165d5760405162461bcd60e51b81526004016109e590614f98565b6072546001600160401b03878116600090815260676020526040902060010154429261169492600160c01b90910481169116614f02565b6001600160401b0316111561171d5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a4016109e5565b6103e861172a88886150d5565b6001600160401b0316106117a65760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e7920626174636865730000000060648201526084016109e5565b6117b6888888888888888861349b565b6117bf866139d9565b607254600160801b90046001600160401b0316600003611887576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561182457607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561186a57600080fd5b505af115801561187e573d6000803e3d6000fd5b50505050611938565b61188f6133f7565b607280546001600160401b03169060006118a883615016565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b038116158015906119b057506072546001600160401b03600160401b9091048116908216115b80156119cb57506072546001600160401b0390811690821611155b611a495760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a4016109e5565b606a546001600160a01b03163314611af357611a6481610c90565b611af35760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a4016109e5565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d9094529382902092909255607280546fffffffffffffffff000000000000000019169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611bb557600080fd5b505af1158015611bc9573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611c1691815260200190565b60405180910390a3505050565b606e805461093a90614e6f565b600054610100900460ff1615808015611c505750600054600160ff909116105b80611c6a5750303b158015611c6a575060005460ff166001145b611ccd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109e5565b6000805460ff191660011790558015611cf0576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611d6d6020860186614c06565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d9d6060860160408701614c06565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611dd860c0860160a08701614c06565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611e3560e0860160c08701614812565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611e6c6040860160208701614812565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611ea86080860160608701614812565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611ee460a0860160808701614ce8565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611f0c8482615179565b50606f611f198382615179565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611f4f613bbf565b8015611f95576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611fca5760405162461bcd60e51b81526004016109e590614ea9565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610adf565b6073546001600160a01b0316331461204e5760405162461bcd60e51b81526004016109e590614ea9565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190602001610adf565b6120a4613c33565b6120ae6000613c8d565b565b6033546001600160a01b0316331461231d576072546000906001600160401b03161561210157506072546001600160401b03908116600090815260716020526040902054600160401b90041661210f565b506069546001600160401b03165b80826001600160401b03161161218d5760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c72656164792076657269666965640000000060648201526084016109e5565b6068546001600160401b03600160401b9091048116908316118015906121cf57506001600160401b038083166000908152606760205260409020600101541615155b61225a5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a4016109e5565b6001600160401b0380831660009081526067602052604090206001015442916122889162093a809116614f02565b6001600160401b0316111561231b5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a4016109e5565b505b612325613cdf565b50565b60655460ff161561234b5760405162461bcd60e51b81526004016109e590614f98565b61235c898989898989898989613d4f565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f95613cdf565b6073546001600160a01b031633146123e15760405162461bcd60e51b81526004016109e590614ea9565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610adf90831515815260200190565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612481573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a5919061505f565b905060006124b1612657565b6068546001600160401b03600160401b82048116916124e191600160801b8204811691600160c01b9004166150d5565b6124eb9190614f02565b6124f591906150d5565b6001600160401b0316905061250a818361524e565b9250505090565b6073546001600160a01b0316331461253b5760405162461bcd60e51b81526004016109e590614ea9565b62093a806001600160401b03821611156125675760405162461bcd60e51b81526004016109e590614f2d565b60655460ff166125fc576072546001600160401b03600160801b9091048116908216106125fc5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f7765720060648201526084016109e5565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610adf565b6072546000906001600160401b03161561269457506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126ce5760405162461bcd60e51b81526004016109e590614ea9565b606e6126da8282615179565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610adf919061476b565b6073546001600160a01b031633146127345760405162461bcd60e51b81526004016109e590614ea9565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610adf565b60655460ff16156127ae5760405162461bcd60e51b81526004016109e590614f98565b606c54600160a01b900460ff1615156001146127dc5760405162461bcd60e51b81526004016109e590615262565b80518061283f5760405162461bcd60e51b815260206004820152603d60248201526000805160206155ae83398151915260448201527f3a204d75737420666f726365206174206c65617374203120626174636800000060648201526084016109e5565b6103e881106128b05760405162461bcd60e51b815260206004820152604360248201526000805160206155ae83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a4016109e5565b6068546001600160401b03600160c01b82048116916128d8918491600160801b9004166152cb565b11156129325760405162461bcd60e51b815260206004820152603560248201526000805160206155ae8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b60648201526084016109e5565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612b5e57600086828151811061297f5761297f615000565b60200260200101519050838061299490615016565b9450506000816000015180519060200120826020015183604001516040516020016129c19392919061503c565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612a605760405162461bcd60e51b815260206004820152604260248201526000805160206155ae83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109e5565b612a6b6001886150fd565b8303612b005742620697808360400151612a859190614f02565b6001600160401b03161115612b005760405162461bcd60e51b815260206004820152604760248201526000805160206155ae83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a4016109e5565b8151805160209182012081840151604051612b2393889392914291339101615078565b6040516020818303038152906040528051906020012093508580612b4690615016565b96505050508080612b56906150bc565b915050612963565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612c775760405162461bcd60e51b81526004016109e5906152e3565b6073546001600160a01b03163314612ca15760405162461bcd60e51b81526004016109e590614ea9565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612cf157600080fd5b505af1158015612d05573d6000803e3d6000fd5b505050506120ae6143ca565b606a546001600160a01b03163314612d3b5760405162461bcd60e51b81526004016109e590615340565b612d4c898989898989898989613d4f565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612d9757607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612ddd57600080fd5b505af1158015612df1573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612e795760405162461bcd60e51b81526004016109e590614f98565b606c54600160a01b900460ff161515600114612ea75760405162461bcd60e51b81526004016109e590615262565b6000612eb260745490565b905081811115612f175760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b60648201526084016109e5565b61ea60835110612f875760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b60648201526084016109e5565b606554612fa690600160581b90046001600160a01b031633308461338c565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015612ff0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613014919061505f565b60688054919250600160c01b9091046001600160401b031690601861303883615016565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016130799392919061503c565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361311d57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613178565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161316f9392919061539d565b60405180910390a25b50505050565b606a546001600160a01b031633146131a85760405162461bcd60e51b81526004016109e590615340565b6131b8888888888888888861349b565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561320357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561324957600080fd5b505af115801561325d573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611971565b6073546001600160a01b031633146132c85760405162461bcd60e51b81526004016109e590614ea9565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001610adf565b61331e613c33565b6001600160a01b0381166133835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e5565b61232581613c8d565b6040516001600160a01b03808516602483015283166044820152606481018290526131789085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614421565b6072546001600160401b03600160401b82048116911611156120ae5760725460009061343490600160401b90046001600160401b03166001614f02565b905061343f81610c90565b15612325576072546000906002906134619084906001600160401b03166150d5565b61346b91906153d0565b6134759083614f02565b905061348081610c90565b156134925761348e81611983565b5050565b61348e82611983565b6000806134a6612657565b90506001600160401b038a1615613621576072546001600160401b03908116908b1611156135625760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2070656e60448201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560648201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608482015260a4016109e5565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b909204161461361b5760405162461bcd60e51b815260206004820152604c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760648201526b040e6e8c2e8ca40c4c2e8c6d60a31b608482015260a4016109e5565b50613769565b6001600160401b0389166000908152606d60205260409020549150816136bb5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786064820152621a5cdd60ea1b608482015260a4016109e5565b806001600160401b0316896001600160401b031611156137695760405162461bcd60e51b815260206004820152605d60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060648201527f7468616e2063757272656e744c61737456657269666965644261746368000000608482015260a4016109e5565b806001600160401b0316886001600160401b0316116138165760405162461bcd60e51b815260206004820152605760248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2066696e60448201527f616c4e65774261746368206d75737420626520626967676572207468616e206360648201527f757272656e744c61737456657269666965644261746368000000000000000000608482015260a4016109e5565b60006138258a8a8a868b610aea565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161385a91906153f6565b602060405180830381855afa158015613877573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061389a919061505f565b6138a49190615412565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916138e8918b918b918b9190600401615426565b602060405180830381865afa158015613905573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392991906154a0565b6139885760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20494e5660448201526920a624a22fa82927a7a360b11b60648201526084016109e5565b6139cb33613996858d6150d5565b6001600160401b03166139a761242e565b6139b19190615114565b606554600160581b90046001600160a01b031691906144f8565b505050505050505050505050565b60006139e3612657565b9050816000806139f384846150d5565b6001600160401b031690505b836001600160401b0316836001600160401b031614613aa5576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613a4f9116426150fd565b1115613a8a576001810154613a7490600160401b90046001600160401b0316866150d5565b613a87906001600160401b0316846152cb565b92505b60010154600160401b90046001600160401b031692506139ff565b6000613ab183836150fd565b905082811015613b2b576000613ac782856150fd565b9050600c8111613ad75780613ada565b600c5b9050613ae7816003615114565b613af290600a6155a1565b606554613b0b908390600160481b900461ffff166155a1565b607454613b189190615114565b613b22919061524e565b60745550613bb7565b6000613b3784836150fd565b9050600c8111613b475780613b4a565b600c5b90506000613b59826003615114565b613b6490600a6155a1565b606554613b7d908490600160481b900461ffff166155a1565b607454613b8a9190615114565b613b94919061524e565b905080607454607454613ba79190615114565b613bb1919061524e565b60745550505b505050505050565b600054610100900460ff16613c2a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109e5565b6120ae33613c8d565b6033546001600160a01b031633146120ae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109e5565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d2f57600080fd5b505af1158015613d43573d6000803e3d6000fd5b505050506120ae614528565b60006001600160401b038a1615613eca576072546001600160401b03908116908b161115613e0e5760405162461bcd60e51b815260206004820152606c60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c4016109e5565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613ec45760405162461bcd60e51b815260206004820152606060248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a4016109e5565b5061401e565b506001600160401b0387166000908152606d602052604090205480613f6b5760405162461bcd60e51b815260206004820152605760248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a4016109e5565b6069546001600160401b03908116908916111561401e5760405162461bcd60e51b815260206004820152607160248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c4016109e5565b6072546001600160401b03908116908a161180159061404e5750896001600160401b0316896001600160401b0316115b801561406f57506072546001600160401b03600160401b9091048116908a16115b6140e75760405162461bcd60e51b815260206004820152604f60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a4016109e5565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146141a75760405162461bcd60e51b815260206004820152606a60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c4016109e5565b60006141b6898989858a610aea565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516141eb91906153f6565b602060405180830381855afa158015614208573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061422b919061505f565b6142359190615412565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614279918a918a918a9190600401615426565b602060405180830381865afa158015614296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ba91906154a0565b61431a5760405162461bcd60e51b815260206004820152603e60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20494e56414c49445f50524f4f46000060648201526084016109e5565b6001600160401b038b166000908152607160205260409020600201548790036139cb5760405162461bcd60e51b815260206004820152606260248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c4016109e5565b60655460ff166143ec5760405162461bcd60e51b81526004016109e5906152e3565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614476826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145839092919063ffffffff16565b8051909150156144f3578080602001905181019061449491906154a0565b6144f35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109e5565b505050565b6040516001600160a01b0383166024820152604481018290526144f390849063a9059cbb60e01b906064016133c0565b60655460ff161561454b5760405162461bcd60e51b81526004016109e590614f98565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614592848460008561459a565b949350505050565b6060824710156145fb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109e5565b600080866001600160a01b0316858760405161461791906153f6565b60006040518083038185875af1925050503d8060008114614654576040519150601f19603f3d011682016040523d82523d6000602084013e614659565b606091505b509150915061466a87838387614675565b979650505050505050565b606083156146e45782516000036146dd576001600160a01b0385163b6146dd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109e5565b5081614592565b61459283838151156146f95781518083602001fd5b8060405162461bcd60e51b81526004016109e5919061476b565b60005b8381101561472e578181015183820152602001614716565b838111156131785750506000910152565b60008151808452614757816020860160208601614713565b601f01601f19169290920160200192915050565b60208152600061477e602083018461473f565b9392505050565b60006020828403121561479757600080fd5b813561ffff8116811461477e57600080fd5b80356001600160401b03811681146147c057600080fd5b919050565b600080600080600060a086880312156147dd57600080fd5b6147e6866147a9565b94506147f4602087016147a9565b94979496505050506040830135926060810135926080909101359150565b60006020828403121561482457600080fd5b61477e826147a9565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156148655761486561482d565b60405290565b604051606081016001600160401b03811182821017156148655761486561482d565b604051601f8201601f191681016001600160401b03811182821017156148b5576148b561482d565b604052919050565b60006001600160401b038211156148d6576148d661482d565b5060051b60200190565b600082601f8301126148f157600080fd5b81356001600160401b0381111561490a5761490a61482d565b61491d601f8201601f191660200161488d565b81815284602083860101111561493257600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561496257600080fd5b82356001600160401b038082111561497957600080fd5b818501915085601f83011261498d57600080fd5b81356149a061499b826148bd565b61488d565b81815260059190911b830184019084810190888311156149bf57600080fd5b8585015b83811015614a58578035858111156149db5760008081fd5b86016080818c03601f19018113156149f35760008081fd5b6149fb614843565b8983013588811115614a0d5760008081fd5b614a1b8e8c838701016148e0565b8252506040808401358b8301526060614a358186016147a9565b82840152614a448486016147a9565b9083015250855250509186019186016149c3565b5098975050505050505050565b8060408101831015614a7657600080fd5b92915050565b8060808101831015614a7657600080fd5b6000806000806000806000806101a0898b031215614aaa57600080fd5b614ab3896147a9565b9750614ac160208a016147a9565b9650614acf60408a016147a9565b95506060890135945060808901359350614aec8a60a08b01614a65565b9250614afb8a60e08b01614a7c565b9150614b0b8a6101608b01614a65565b90509295985092959890939650565b6001600160a01b038116811461232557600080fd5b600080600080600080600080888a036101c0811215614b4d57600080fd5b8935614b5881614b1a565b985060208a0135614b6881614b1a565b975060408a0135614b7881614b1a565b965060608a0135614b8881614b1a565b955060e0607f1982011215614b9c57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614bc657600080fd5b614bd28c838d016148e0565b93506101a08b0135915080821115614be957600080fd5b50614bf68b828c016148e0565b9150509295985092959890939650565b600060208284031215614c1857600080fd5b813561477e81614b1a565b60008060008060008060008060006101c08a8c031215614c4257600080fd5b614c4b8a6147a9565b9850614c5960208b016147a9565b9750614c6760408b016147a9565b9650614c7560608b016147a9565b955060808a0135945060a08a01359350614c928b60c08c01614a65565b9250614ca28b6101008c01614a7c565b9150614cb28b6101808c01614a65565b90509295985092959850929598565b600060208284031215614cd357600080fd5b5035919050565b801515811461232557600080fd5b600060208284031215614cfa57600080fd5b813561477e81614cda565b600060208284031215614d1757600080fd5b81356001600160401b03811115614d2d57600080fd5b614592848285016148e0565b60006020808385031215614d4c57600080fd5b82356001600160401b0380821115614d6357600080fd5b818501915085601f830112614d7757600080fd5b8135614d8561499b826148bd565b81815260059190911b83018401908481019088831115614da457600080fd5b8585015b83811015614a5857803585811115614dc05760008081fd5b86016060818c03601f1901811315614dd85760008081fd5b614de061486b565b8983013588811115614df25760008081fd5b614e008e8c838701016148e0565b8252506040808401358b830152614e188385016147a9565b9082015285525050918601918601614da8565b60008060408385031215614e3e57600080fd5b82356001600160401b03811115614e5457600080fd5b614e60858286016148e0565b95602094909401359450505050565b600181811c90821680614e8357607f821691505b602082108103614ea357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614f2457614f24614eec565b01949350505050565b60208082526045908201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361503257615032614eec565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b60006020828403121561507157600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b6000600182016150ce576150ce614eec565b5060010190565b60006001600160401b03838116908316818110156150f5576150f5614eec565b039392505050565b60008282101561510f5761510f614eec565b500390565b600081600019048311821515161561512e5761512e614eec565b500290565b601f8211156144f357600081815260208120601f850160051c8101602086101561515a5750805b601f850160051c820191505b81811015613bb757828155600101615166565b81516001600160401b038111156151925761519261482d565b6151a6816151a08454614e6f565b84615133565b602080601f8311600181146151db57600084156151c35750858301515b600019600386901b1c1916600185901b178555613bb7565b600085815260208120601f198616915b8281101561520a578886015182559484019460019091019084016151eb565b50858210156152285787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b60008261525d5761525d615238565b500490565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b600082198211156152de576152de614eec565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b03831660208201526060604082018190526000906153c79083018461473f565b95945050505050565b60006001600160401b03808416806153ea576153ea615238565b92169190910492915050565b60008251615408818460208701614713565b9190910192915050565b60008261542157615421615238565b500690565b61012081016040808784376000838201818152879190815b600281101561545e5784848337908401828152928401929060010161543e565b5050828760c0870137610100850181815286935091505b6001811015615494578251825260209283019290910190600101615475565b50505095945050505050565b6000602082840312156154b257600080fd5b815161477e81614cda565b600181815b808511156154f85781600019048211156154de576154de614eec565b808516156154eb57918102915b93841c93908002906154c2565b509250929050565b60008261550f57506001614a76565b8161551c57506000614a76565b8160018114615532576002811461553c57615558565b6001915050614a76565b60ff84111561554d5761554d614eec565b50506001821b614a76565b5060208310610133831016604e8410600b841016171561557b575081810a614a76565b61558583836154bd565b806000190482111561559957615599614eec565b029392505050565b600061477e838361550056fe506f6c79676f6e5a4b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a4b45564d3a3a70726f76654e6f6e44657465726d696e6973a264697066735822122071fdcd0f9a8f0b314d5f2c9585779a6782ff33390883cf6d65249cba6f4fa26764736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103af5760003560e01c80638da5cb5b116101f4578063cfa8ed471161011a578063e7a7ed02116100ad578063f14916d61161007c578063f14916d6146108eb578063f2fde38b146108fe578063f851a44014610911578063f8b823e41461092457600080fd5b8063e7a7ed0214610898578063e8bf92ed146108b2578063eaeb077b146108c5578063edc41121146108d857600080fd5b8063d939b315116100e9578063d939b3151461085a578063dbc1697614610874578063e11f3f181461087c578063e217cfd61461088f57600080fd5b8063cfa8ed4714610806578063d02103ca14610820578063d8d1091b14610833578063d8f54db01461084657600080fd5b8063ab9fc5ef11610192578063b6b0b09711610161578063b6b0b097146107be578063c0ed84e0146107d8578063c89e42df146107e0578063cf136306146107f357600080fd5b8063ab9fc5ef14610712578063adc879e91461071c578063afd23cbe14610736578063b4d63f581461075e57600080fd5b80639eb831b9116101ce5780639eb831b9146106d75780639f0d039d146106df578063a3c573eb146106e7578063aa58bad6146106fa57600080fd5b80638da5cb5b146106ab57806399f5634e146106bc5780639c9f3dfe146106c457600080fd5b80634a910e6a116102d9578063715018a611610277578063837a473811610246578063837a473814610606578063841b24d7146106745780638b48931e1461068e5780638c4a0af71461069857600080fd5b8063715018a6146105c55780637215541a146105cd57806375c508b3146105e05780637fcb3653146105f357600080fd5b806360943d6a116102b357806360943d6a1461056c5780636b8616ce1461057f5780636ff512cc1461059f578063704b6c02146105b257600080fd5b80634a910e6a146105315780635392c5e014610544578063542028d51461056457600080fd5b8063383b3be811610351578063456052671161032057806345605267146104d7578063458c0477146104f15780634834a343146105045780634a1a89a71461051757600080fd5b8063383b3be814610484578063394218e9146104975780633c158267146104aa578063423fa856146104bd57600080fd5b806319d8ac611161038d57806319d8ac6114610404578063220d78991461042f57806329878983146104425780632d0889d31461046d57600080fd5b8063107bf28c146103b457806315064c96146103d25780631816b7e5146103ef575b600080fd5b6103bc61092d565b6040516103c9919061476b565b60405180910390f35b6065546103df9060ff1681565b60405190151581526020016103c9565b6104026103fd366004614785565b6109bb565b005b606854610417906001600160401b031681565b6040516001600160401b0390911681526020016103c9565b6103bc61043d3660046147c5565b610aea565b606a54610455906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b61047661ea6081565b6040519081526020016103c9565b6103df610492366004614812565b610c90565b6104026104a5366004614812565b610cd7565b6104026104b836600461494f565b610e26565b60685461041790600160401b90046001600160401b031681565b60685461041790600160801b90046001600160401b031681565b607254610417906001600160401b031681565b610402610512366004614a8d565b61163a565b60725461041790600160401b90046001600160401b031681565b61040261053f366004614812565b611983565b610476610552366004614812565b606d6020526000908152604090205481565b6103bc611c23565b61040261057a366004614b2f565b611c30565b61047661058d366004614812565b60666020526000908152604090205481565b6104026105ad366004614c06565b611fa0565b6104026105c0366004614c06565b612024565b61040261209c565b6104026105db366004614812565b6120b0565b6104026105ee366004614c23565b612328565b606954610417906001600160401b031681565b610649610614366004614cc1565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103c9565b60725461041790600160c01b90046001600160401b031681565b61041762093a8081565b6104026106a6366004614ce8565b6123b7565b6033546001600160a01b0316610455565b61047661242e565b6104026106d2366004614812565b612511565b610476600c81565b607454610476565b607054610455906001600160a01b031681565b6065546104179061010090046001600160401b031681565b6104176206978081565b606c5461041790600160a81b90046001600160401b031681565b60655461074b90600160481b900461ffff1681565b60405161ffff90911681526020016103c9565b61079961076c366004614812565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103c9565b60655461045590600160581b90046001600160a01b031681565b610417612657565b6104026107ee366004614d05565b6126a4565b610402610801366004614812565b61270a565b60695461045590600160401b90046001600160a01b031681565b606c54610455906001600160a01b031681565b610402610841366004614d39565b61278b565b606c546103df90600160a01b900460ff1681565b60725461041790600160801b90046001600160401b031681565b610402612c55565b61040261088a366004614c23565b612d11565b6104176103e881565b60685461041790600160c01b90046001600160401b031681565b606b54610455906001600160a01b031681565b6104026108d3366004614e2b565b612e56565b6104026108e6366004614a8d565b61317e565b6104026108f9366004614c06565b61329e565b61040261090c366004614c06565b613316565b607354610455906001600160a01b031681565b61047660745481565b606f805461093a90614e6f565b80601f016020809104026020016040519081016040528092919081815260200182805461096690614e6f565b80156109b35780601f10610988576101008083540402835291602001916109b3565b820191906000526020600020905b81548152906001019060200180831161099657829003601f168201915b505050505081565b6073546001600160a01b031633146109ee5760405162461bcd60e51b81526004016109e590614ea9565b60405180910390fd5b6103e88161ffff16118015610a0857506104008161ffff16105b610a8d5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a4b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a4016109e5565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610b1c57508115155b610b90576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e5565b80610c05576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e5565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610cc692600160801b90920481169116614f02565b6001600160401b0316111592915050565b6073546001600160a01b03163314610d015760405162461bcd60e51b81526004016109e590614ea9565b62093a806001600160401b0382161115610d2d5760405162461bcd60e51b81526004016109e590614f2d565b60655460ff16610dd0576072546001600160401b03600160c01b909104811690821610610dd05760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a4b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109e5565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610adf565b60655460ff1615610e495760405162461bcd60e51b81526004016109e590614f98565b606954600160401b90046001600160a01b03163314610ed05760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e63657200000000000060648201526084016109e5565b805180610f455760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e6365203120626174636800000060648201526084016109e5565b6103e88110610fbe576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e79206261746368657360648201526084016109e5565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561145e57600087828151811061101157611011615000565b60200260200101519050600081606001516001600160401b031611156111ca578361103b81615016565b9450506000816000015180519060200120826020015183606001516040516020016110689392919061503c565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461110e5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d6174636800000060648201526084016109e5565b81606001516001600160401b031682604001516001600160401b031610156111c45760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a4016109e5565b50611351565b602081015115806112535750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b36329161120d9160040190815260200190565b6020604051808303816000875af115801561122c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611250919061505f565b15155b6112c55760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d75737420657869737400000000000060648201526084016109e5565b80515161ea60116113515760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a4016109e5565b856001600160401b031681604001516001600160401b03161015801561138457504281604001516001600160401b031611155b6113f65760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e676500000060648201526084016109e5565b8051805160209182012081830151604080850151905161141d948894939291339101615078565b604051602081830303815290604052805190602001209250848061144090615016565b95505080604001519550508080611456906150bc565b915050610ff5565b506068546001600160401b03600160c01b909104811690831611156114e35760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b60648201526084016109e5565b60685460009061150390600160801b90046001600160401b0316846150d5565b611516906001600160401b0316876150fd565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115eb903390309084906115d09190615114565b606554600160581b90046001600160a01b031692919061338c565b6115f36133f7565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff161561165d5760405162461bcd60e51b81526004016109e590614f98565b6072546001600160401b03878116600090815260676020526040902060010154429261169492600160c01b90910481169116614f02565b6001600160401b0316111561171d5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a4016109e5565b6103e861172a88886150d5565b6001600160401b0316106117a65760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e7920626174636865730000000060648201526084016109e5565b6117b6888888888888888861349b565b6117bf866139d9565b607254600160801b90046001600160401b0316600003611887576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561182457607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561186a57600080fd5b505af115801561187e573d6000803e3d6000fd5b50505050611938565b61188f6133f7565b607280546001600160401b03169060006118a883615016565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b038116158015906119b057506072546001600160401b03600160401b9091048116908216115b80156119cb57506072546001600160401b0390811690821611155b611a495760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a4016109e5565b606a546001600160a01b03163314611af357611a6481610c90565b611af35760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a4016109e5565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d9094529382902092909255607280546fffffffffffffffff000000000000000019169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611bb557600080fd5b505af1158015611bc9573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611c1691815260200190565b60405180910390a3505050565b606e805461093a90614e6f565b600054610100900460ff1615808015611c505750600054600160ff909116105b80611c6a5750303b158015611c6a575060005460ff166001145b611ccd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109e5565b6000805460ff191660011790558015611cf0576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611d6d6020860186614c06565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d9d6060860160408701614c06565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611dd860c0860160a08701614c06565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611e3560e0860160c08701614812565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611e6c6040860160208701614812565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611ea86080860160608701614812565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611ee460a0860160808701614ce8565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611f0c8482615179565b50606f611f198382615179565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611f4f613bbf565b8015611f95576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611fca5760405162461bcd60e51b81526004016109e590614ea9565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610adf565b6073546001600160a01b0316331461204e5760405162461bcd60e51b81526004016109e590614ea9565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190602001610adf565b6120a4613c33565b6120ae6000613c8d565b565b6033546001600160a01b0316331461231d576072546000906001600160401b03161561210157506072546001600160401b03908116600090815260716020526040902054600160401b90041661210f565b506069546001600160401b03165b80826001600160401b03161161218d5760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c72656164792076657269666965640000000060648201526084016109e5565b6068546001600160401b03600160401b9091048116908316118015906121cf57506001600160401b038083166000908152606760205260409020600101541615155b61225a5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a4016109e5565b6001600160401b0380831660009081526067602052604090206001015442916122889162093a809116614f02565b6001600160401b0316111561231b5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a4016109e5565b505b612325613cdf565b50565b60655460ff161561234b5760405162461bcd60e51b81526004016109e590614f98565b61235c898989898989898989613d4f565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f95613cdf565b6073546001600160a01b031633146123e15760405162461bcd60e51b81526004016109e590614ea9565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610adf90831515815260200190565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612481573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a5919061505f565b905060006124b1612657565b6068546001600160401b03600160401b82048116916124e191600160801b8204811691600160c01b9004166150d5565b6124eb9190614f02565b6124f591906150d5565b6001600160401b0316905061250a818361524e565b9250505090565b6073546001600160a01b0316331461253b5760405162461bcd60e51b81526004016109e590614ea9565b62093a806001600160401b03821611156125675760405162461bcd60e51b81526004016109e590614f2d565b60655460ff166125fc576072546001600160401b03600160801b9091048116908216106125fc5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f7765720060648201526084016109e5565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610adf565b6072546000906001600160401b03161561269457506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126ce5760405162461bcd60e51b81526004016109e590614ea9565b606e6126da8282615179565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610adf919061476b565b6073546001600160a01b031633146127345760405162461bcd60e51b81526004016109e590614ea9565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610adf565b60655460ff16156127ae5760405162461bcd60e51b81526004016109e590614f98565b606c54600160a01b900460ff1615156001146127dc5760405162461bcd60e51b81526004016109e590615262565b80518061283f5760405162461bcd60e51b815260206004820152603d60248201526000805160206155ae83398151915260448201527f3a204d75737420666f726365206174206c65617374203120626174636800000060648201526084016109e5565b6103e881106128b05760405162461bcd60e51b815260206004820152604360248201526000805160206155ae83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a4016109e5565b6068546001600160401b03600160c01b82048116916128d8918491600160801b9004166152cb565b11156129325760405162461bcd60e51b815260206004820152603560248201526000805160206155ae8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b60648201526084016109e5565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612b5e57600086828151811061297f5761297f615000565b60200260200101519050838061299490615016565b9450506000816000015180519060200120826020015183604001516040516020016129c19392919061503c565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612a605760405162461bcd60e51b815260206004820152604260248201526000805160206155ae83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109e5565b612a6b6001886150fd565b8303612b005742620697808360400151612a859190614f02565b6001600160401b03161115612b005760405162461bcd60e51b815260206004820152604760248201526000805160206155ae83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a4016109e5565b8151805160209182012081840151604051612b2393889392914291339101615078565b6040516020818303038152906040528051906020012093508580612b4690615016565b96505050508080612b56906150bc565b915050612963565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612c775760405162461bcd60e51b81526004016109e5906152e3565b6073546001600160a01b03163314612ca15760405162461bcd60e51b81526004016109e590614ea9565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612cf157600080fd5b505af1158015612d05573d6000803e3d6000fd5b505050506120ae6143ca565b606a546001600160a01b03163314612d3b5760405162461bcd60e51b81526004016109e590615340565b612d4c898989898989898989613d4f565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612d9757607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612ddd57600080fd5b505af1158015612df1573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612e795760405162461bcd60e51b81526004016109e590614f98565b606c54600160a01b900460ff161515600114612ea75760405162461bcd60e51b81526004016109e590615262565b6000612eb260745490565b905081811115612f175760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b60648201526084016109e5565b61ea60835110612f875760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b60648201526084016109e5565b606554612fa690600160581b90046001600160a01b031633308461338c565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015612ff0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613014919061505f565b60688054919250600160c01b9091046001600160401b031690601861303883615016565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016130799392919061503c565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361311d57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613178565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161316f9392919061539d565b60405180910390a25b50505050565b606a546001600160a01b031633146131a85760405162461bcd60e51b81526004016109e590615340565b6131b8888888888888888861349b565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561320357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561324957600080fd5b505af115801561325d573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611971565b6073546001600160a01b031633146132c85760405162461bcd60e51b81526004016109e590614ea9565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001610adf565b61331e613c33565b6001600160a01b0381166133835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e5565b61232581613c8d565b6040516001600160a01b03808516602483015283166044820152606481018290526131789085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614421565b6072546001600160401b03600160401b82048116911611156120ae5760725460009061343490600160401b90046001600160401b03166001614f02565b905061343f81610c90565b15612325576072546000906002906134619084906001600160401b03166150d5565b61346b91906153d0565b6134759083614f02565b905061348081610c90565b156134925761348e81611983565b5050565b61348e82611983565b6000806134a6612657565b90506001600160401b038a1615613621576072546001600160401b03908116908b1611156135625760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2070656e60448201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560648201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608482015260a4016109e5565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b909204161461361b5760405162461bcd60e51b815260206004820152604c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760648201526b040e6e8c2e8ca40c4c2e8c6d60a31b608482015260a4016109e5565b50613769565b6001600160401b0389166000908152606d60205260409020549150816136bb5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786064820152621a5cdd60ea1b608482015260a4016109e5565b806001600160401b0316896001600160401b031611156137695760405162461bcd60e51b815260206004820152605d60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060648201527f7468616e2063757272656e744c61737456657269666965644261746368000000608482015260a4016109e5565b806001600160401b0316886001600160401b0316116138165760405162461bcd60e51b815260206004820152605760248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2066696e60448201527f616c4e65774261746368206d75737420626520626967676572207468616e206360648201527f757272656e744c61737456657269666965644261746368000000000000000000608482015260a4016109e5565b60006138258a8a8a868b610aea565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161385a91906153f6565b602060405180830381855afa158015613877573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061389a919061505f565b6138a49190615412565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916138e8918b918b918b9190600401615426565b602060405180830381865afa158015613905573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392991906154a0565b6139885760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20494e5660448201526920a624a22fa82927a7a360b11b60648201526084016109e5565b6139cb33613996858d6150d5565b6001600160401b03166139a761242e565b6139b19190615114565b606554600160581b90046001600160a01b031691906144f8565b505050505050505050505050565b60006139e3612657565b9050816000806139f384846150d5565b6001600160401b031690505b836001600160401b0316836001600160401b031614613aa5576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613a4f9116426150fd565b1115613a8a576001810154613a7490600160401b90046001600160401b0316866150d5565b613a87906001600160401b0316846152cb565b92505b60010154600160401b90046001600160401b031692506139ff565b6000613ab183836150fd565b905082811015613b2b576000613ac782856150fd565b9050600c8111613ad75780613ada565b600c5b9050613ae7816003615114565b613af290600a6155a1565b606554613b0b908390600160481b900461ffff166155a1565b607454613b189190615114565b613b22919061524e565b60745550613bb7565b6000613b3784836150fd565b9050600c8111613b475780613b4a565b600c5b90506000613b59826003615114565b613b6490600a6155a1565b606554613b7d908490600160481b900461ffff166155a1565b607454613b8a9190615114565b613b94919061524e565b905080607454607454613ba79190615114565b613bb1919061524e565b60745550505b505050505050565b600054610100900460ff16613c2a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109e5565b6120ae33613c8d565b6033546001600160a01b031633146120ae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109e5565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d2f57600080fd5b505af1158015613d43573d6000803e3d6000fd5b505050506120ae614528565b60006001600160401b038a1615613eca576072546001600160401b03908116908b161115613e0e5760405162461bcd60e51b815260206004820152606c60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c4016109e5565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613ec45760405162461bcd60e51b815260206004820152606060248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a4016109e5565b5061401e565b506001600160401b0387166000908152606d602052604090205480613f6b5760405162461bcd60e51b815260206004820152605760248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a4016109e5565b6069546001600160401b03908116908916111561401e5760405162461bcd60e51b815260206004820152607160248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c4016109e5565b6072546001600160401b03908116908a161180159061404e5750896001600160401b0316896001600160401b0316115b801561406f57506072546001600160401b03600160401b9091048116908a16115b6140e75760405162461bcd60e51b815260206004820152604f60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a4016109e5565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146141a75760405162461bcd60e51b815260206004820152606a60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c4016109e5565b60006141b6898989858a610aea565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516141eb91906153f6565b602060405180830381855afa158015614208573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061422b919061505f565b6142359190615412565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614279918a918a918a9190600401615426565b602060405180830381865afa158015614296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ba91906154a0565b61431a5760405162461bcd60e51b815260206004820152603e60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20494e56414c49445f50524f4f46000060648201526084016109e5565b6001600160401b038b166000908152607160205260409020600201548790036139cb5760405162461bcd60e51b815260206004820152606260248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c4016109e5565b60655460ff166143ec5760405162461bcd60e51b81526004016109e5906152e3565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614476826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145839092919063ffffffff16565b8051909150156144f3578080602001905181019061449491906154a0565b6144f35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109e5565b505050565b6040516001600160a01b0383166024820152604481018290526144f390849063a9059cbb60e01b906064016133c0565b60655460ff161561454b5760405162461bcd60e51b81526004016109e590614f98565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614592848460008561459a565b949350505050565b6060824710156145fb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109e5565b600080866001600160a01b0316858760405161461791906153f6565b60006040518083038185875af1925050503d8060008114614654576040519150601f19603f3d011682016040523d82523d6000602084013e614659565b606091505b509150915061466a87838387614675565b979650505050505050565b606083156146e45782516000036146dd576001600160a01b0385163b6146dd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109e5565b5081614592565b61459283838151156146f95781518083602001fd5b8060405162461bcd60e51b81526004016109e5919061476b565b60005b8381101561472e578181015183820152602001614716565b838111156131785750506000910152565b60008151808452614757816020860160208601614713565b601f01601f19169290920160200192915050565b60208152600061477e602083018461473f565b9392505050565b60006020828403121561479757600080fd5b813561ffff8116811461477e57600080fd5b80356001600160401b03811681146147c057600080fd5b919050565b600080600080600060a086880312156147dd57600080fd5b6147e6866147a9565b94506147f4602087016147a9565b94979496505050506040830135926060810135926080909101359150565b60006020828403121561482457600080fd5b61477e826147a9565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156148655761486561482d565b60405290565b604051606081016001600160401b03811182821017156148655761486561482d565b604051601f8201601f191681016001600160401b03811182821017156148b5576148b561482d565b604052919050565b60006001600160401b038211156148d6576148d661482d565b5060051b60200190565b600082601f8301126148f157600080fd5b81356001600160401b0381111561490a5761490a61482d565b61491d601f8201601f191660200161488d565b81815284602083860101111561493257600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561496257600080fd5b82356001600160401b038082111561497957600080fd5b818501915085601f83011261498d57600080fd5b81356149a061499b826148bd565b61488d565b81815260059190911b830184019084810190888311156149bf57600080fd5b8585015b83811015614a58578035858111156149db5760008081fd5b86016080818c03601f19018113156149f35760008081fd5b6149fb614843565b8983013588811115614a0d5760008081fd5b614a1b8e8c838701016148e0565b8252506040808401358b8301526060614a358186016147a9565b82840152614a448486016147a9565b9083015250855250509186019186016149c3565b5098975050505050505050565b8060408101831015614a7657600080fd5b92915050565b8060808101831015614a7657600080fd5b6000806000806000806000806101a0898b031215614aaa57600080fd5b614ab3896147a9565b9750614ac160208a016147a9565b9650614acf60408a016147a9565b95506060890135945060808901359350614aec8a60a08b01614a65565b9250614afb8a60e08b01614a7c565b9150614b0b8a6101608b01614a65565b90509295985092959890939650565b6001600160a01b038116811461232557600080fd5b600080600080600080600080888a036101c0811215614b4d57600080fd5b8935614b5881614b1a565b985060208a0135614b6881614b1a565b975060408a0135614b7881614b1a565b965060608a0135614b8881614b1a565b955060e0607f1982011215614b9c57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614bc657600080fd5b614bd28c838d016148e0565b93506101a08b0135915080821115614be957600080fd5b50614bf68b828c016148e0565b9150509295985092959890939650565b600060208284031215614c1857600080fd5b813561477e81614b1a565b60008060008060008060008060006101c08a8c031215614c4257600080fd5b614c4b8a6147a9565b9850614c5960208b016147a9565b9750614c6760408b016147a9565b9650614c7560608b016147a9565b955060808a0135945060a08a01359350614c928b60c08c01614a65565b9250614ca28b6101008c01614a7c565b9150614cb28b6101808c01614a65565b90509295985092959850929598565b600060208284031215614cd357600080fd5b5035919050565b801515811461232557600080fd5b600060208284031215614cfa57600080fd5b813561477e81614cda565b600060208284031215614d1757600080fd5b81356001600160401b03811115614d2d57600080fd5b614592848285016148e0565b60006020808385031215614d4c57600080fd5b82356001600160401b0380821115614d6357600080fd5b818501915085601f830112614d7757600080fd5b8135614d8561499b826148bd565b81815260059190911b83018401908481019088831115614da457600080fd5b8585015b83811015614a5857803585811115614dc05760008081fd5b86016060818c03601f1901811315614dd85760008081fd5b614de061486b565b8983013588811115614df25760008081fd5b614e008e8c838701016148e0565b8252506040808401358b830152614e188385016147a9565b9082015285525050918601918601614da8565b60008060408385031215614e3e57600080fd5b82356001600160401b03811115614e5457600080fd5b614e60858286016148e0565b95602094909401359450505050565b600181811c90821680614e8357607f821691505b602082108103614ea357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614f2457614f24614eec565b01949350505050565b60208082526045908201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361503257615032614eec565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b60006020828403121561507157600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b6000600182016150ce576150ce614eec565b5060010190565b60006001600160401b03838116908316818110156150f5576150f5614eec565b039392505050565b60008282101561510f5761510f614eec565b500390565b600081600019048311821515161561512e5761512e614eec565b500290565b601f8211156144f357600081815260208120601f850160051c8101602086101561515a5750805b601f850160051c820191505b81811015613bb757828155600101615166565b81516001600160401b038111156151925761519261482d565b6151a6816151a08454614e6f565b84615133565b602080601f8311600181146151db57600084156151c35750858301515b600019600386901b1c1916600185901b178555613bb7565b600085815260208120601f198616915b8281101561520a578886015182559484019460019091019084016151eb565b50858210156152285787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b60008261525d5761525d615238565b500490565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b600082198211156152de576152de614eec565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b03831660208201526060604082018190526000906153c79083018461473f565b95945050505050565b60006001600160401b03808416806153ea576153ea615238565b92169190910492915050565b60008251615408818460208701614713565b9190910192915050565b60008261542157615421615238565b500690565b61012081016040808784376000838201818152879190815b600281101561545e5784848337908401828152928401929060010161543e565b5050828760c0870137610100850181815286935091505b6001811015615494578251825260209283019290910190600101615475565b50505095945050505050565b6000602082840312156154b257600080fd5b815161477e81614cda565b600181815b808511156154f85781600019048211156154de576154de614eec565b808516156154eb57918102915b93841c93908002906154c2565b509250929050565b60008261550f57506001614a76565b8161551c57506000614a76565b8160018114615532576002811461553c57615558565b6001915050614a76565b60ff84111561554d5761554d614eec565b50506001821b614a76565b5060208310610133831016604e8410600b841016171561557b575081810a614a76565b61558583836154bd565b806000190482111561559957615599614eec565b029392505050565b600061477e838361550056fe506f6c79676f6e5a4b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a4b45564d3a3a70726f76654e6f6e44657465726d696e6973a264697066735822122071fdcd0f9a8f0b314d5f2c9585779a6782ff33390883cf6d65249cba6f4fa26764736f6c634300080f0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/compiled-contracts/PolygonZKEVMMock.json b/compiled-contracts/PolygonZKEVMMock.json new file mode 100644 index 000000000..f16005d0f --- /dev/null +++ b/compiled-contracts/PolygonZKEVMMock.json @@ -0,0 +1,1700 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "PolygonZKEVMMock", + "sourceName": "contracts/mocks/PolygonZKEVMMock.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint64", + "name": "numBatch", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "stateRoot", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint64", + "name": "pendingStateNum", + "type": "uint64" + } + ], + "name": "ConsolidatePendingState", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "EmergencyStateActivated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "EmergencyStateDeactivated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint64", + "name": "forceBatchNum", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "lastGlobalExitRoot", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "sequencer", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "transactions", + "type": "bytes" + } + ], + "name": "ForceBatch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint64", + "name": "numBatch", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "stateRoot", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "aggregator", + "type": "address" + } + ], + "name": "OverridePendingState", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "storedStateRoot", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "provedStateRoot", + "type": "bytes32" + } + ], + "name": "ProveNonDeterministicPendingState", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint64", + "name": "numBatch", + "type": "uint64" + } + ], + "name": "SequenceBatches", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint64", + "name": "numBatch", + "type": "uint64" + } + ], + "name": "SequenceForceBatches", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "SetAdmin", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "newForceBatchAllowed", + "type": "bool" + } + ], + "name": "SetForceBatchAllowed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint16", + "name": "newMultiplierBatchFee", + "type": "uint16" + } + ], + "name": "SetMultiplierBatchFee", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "newPendingStateTimeout", + "type": "uint64" + } + ], + "name": "SetPendingStateTimeout", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedAggregator", + "type": "address" + } + ], + "name": "SetTrustedAggregator", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "newTrustedAggregatorTimeout", + "type": "uint64" + } + ], + "name": "SetTrustedAggregatorTimeout", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedSequencer", + "type": "address" + } + ], + "name": "SetTrustedSequencer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "newTrustedSequencerURL", + "type": "string" + } + ], + "name": "SetTrustedSequencerURL", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "newVeryBatchTimeTarget", + "type": "uint64" + } + ], + "name": "SetVeryBatchTimeTarget", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint64", + "name": "numBatch", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "stateRoot", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "aggregator", + "type": "address" + } + ], + "name": "TrustedVerifyBatches", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint64", + "name": "numBatch", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "stateRoot", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "aggregator", + "type": "address" + } + ], + "name": "VerifyBatches", + "type": "event" + }, + { + "inputs": [], + "name": "FORCE_BATCH_TIMEOUT", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "HALT_AGGREGATION_TIMEOUT", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_BATCH_MULTIPLIER", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_TRANSACTIONS_BYTE_LENGTH", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_VERIFY_BATCHES", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "sequencedBatchNum", + "type": "uint64" + } + ], + "name": "activateEmergencyState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "batchFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "name": "batchNumToStateRoot", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "bridgeAddress", + "outputs": [ + { + "internalType": "contract IBridge", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "currentAccInputHash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "transactions", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "globalExitRoot", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + }, + { + "internalType": "address", + "name": "sequencerAddress", + "type": "address" + } + ], + "name": "calculateAccInputHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "calculateRewardPerBatch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "chainID", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "pendingStateNum", + "type": "uint64" + } + ], + "name": "consolidatePendingState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "deactivateEmergencyState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "transactions", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "maticAmount", + "type": "uint256" + } + ], + "name": "forceBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "forceBatchAllowed", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "name": "forcedBatches", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getCurrentBatchFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "initNumBatch", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "finalNewBatch", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "newLocalExitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "oldStateRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "newStateRoot", + "type": "bytes32" + } + ], + "name": "getInputSnarkBytes", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLastVerifiedBatch", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "pendingStateNum", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "initNumBatch", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "finalNewBatch", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "newLocalExitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "newStateRoot", + "type": "bytes32" + } + ], + "name": "getNextSnarkInput", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "globalExitRootManager", + "outputs": [ + { + "internalType": "contract IGlobalExitRootManager", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IGlobalExitRootManager", + "name": "_globalExitRootManager", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "_matic", + "type": "address" + }, + { + "internalType": "contract IVerifierRollup", + "name": "_rollupVerifier", + "type": "address" + }, + { + "internalType": "contract IBridge", + "name": "_bridgeAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "address", + "name": "admin", + "type": "address" + }, + { + "internalType": "uint64", + "name": "chainID", + "type": "uint64" + }, + { + "internalType": "address", + "name": "trustedSequencer", + "type": "address" + }, + { + "internalType": "uint64", + "name": "pendingStateTimeout", + "type": "uint64" + }, + { + "internalType": "bool", + "name": "forceBatchAllowed", + "type": "bool" + }, + { + "internalType": "address", + "name": "trustedAggregator", + "type": "address" + }, + { + "internalType": "uint64", + "name": "trustedAggregatorTimeout", + "type": "uint64" + } + ], + "internalType": "struct PolygonZKEVM.InitializePackedParameters", + "name": "initializePackedParameters", + "type": "tuple" + }, + { + "internalType": "bytes32", + "name": "genesisRoot", + "type": "bytes32" + }, + { + "internalType": "string", + "name": "_trustedSequencerURL", + "type": "string" + }, + { + "internalType": "string", + "name": "_networkName", + "type": "string" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "isEmergencyState", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "pendingStateNum", + "type": "uint64" + } + ], + "name": "isPendingStateConsolidable", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastBatchSequenced", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastForceBatch", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastForceBatchSequenced", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastPendingState", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastPendingStateConsolidated", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastTimestamp", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastVerifiedBatch", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "matic", + "outputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "multiplierBatchFee", + "outputs": [ + { + "internalType": "uint16", + "name": "", + "type": "uint16" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "networkName", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "initPendingStateNum", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "finalPendingStateNum", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "initNumBatch", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "finalNewBatch", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "newLocalExitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "newStateRoot", + "type": "bytes32" + }, + { + "internalType": "uint256[2]", + "name": "proofA", + "type": "uint256[2]" + }, + { + "internalType": "uint256[2][2]", + "name": "proofB", + "type": "uint256[2][2]" + }, + { + "internalType": "uint256[2]", + "name": "proofC", + "type": "uint256[2]" + } + ], + "name": "overridePendingState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingStateTimeout", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "pendingStateTransitions", + "outputs": [ + { + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "lastVerifiedBatch", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "exitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "stateRoot", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "initPendingStateNum", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "finalPendingStateNum", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "initNumBatch", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "finalNewBatch", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "newLocalExitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "newStateRoot", + "type": "bytes32" + }, + { + "internalType": "uint256[2]", + "name": "proofA", + "type": "uint256[2]" + }, + { + "internalType": "uint256[2][2]", + "name": "proofB", + "type": "uint256[2][2]" + }, + { + "internalType": "uint256[2]", + "name": "proofC", + "type": "uint256[2]" + } + ], + "name": "proveNonDeterministicPendingState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "rollupVerifier", + "outputs": [ + { + "internalType": "contract IVerifierRollup", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "transactions", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "globalExitRoot", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "minForcedTimestamp", + "type": "uint64" + } + ], + "internalType": "struct PolygonZKEVM.BatchData[]", + "name": "batches", + "type": "tuple[]" + } + ], + "name": "sequenceBatches", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "transactions", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "globalExitRoot", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "minForcedTimestamp", + "type": "uint64" + } + ], + "internalType": "struct PolygonZKEVM.ForcedBatchData[]", + "name": "batches", + "type": "tuple[]" + } + ], + "name": "sequenceForceBatches", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "name": "sequencedBatches", + "outputs": [ + { + "internalType": "bytes32", + "name": "accInputHash", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "sequencedTimestamp", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "previousLastBatchSequenced", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "setAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "newForceBatchAllowed", + "type": "bool" + } + ], + "name": "setForceBatchAllowed", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint16", + "name": "newMultiplierBatchFee", + "type": "uint16" + } + ], + "name": "setMultiplierBatchFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_networkName", + "type": "string" + } + ], + "name": "setNetworkName", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "newPendingStateTimeout", + "type": "uint64" + } + ], + "name": "setPendingStateTimeout", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "_numBatch", + "type": "uint64" + } + ], + "name": "setSequencedBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "batchNum", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "accInputData", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "lastPendingStateConsolidated", + "type": "uint64" + } + ], + "name": "setSequencedBatches", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "newStateRoot", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "batchNum", + "type": "uint64" + } + ], + "name": "setStateRoot", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newTrustedAggregator", + "type": "address" + } + ], + "name": "setTrustedAggregator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "newTrustedAggregatorTimeout", + "type": "uint64" + } + ], + "name": "setTrustedAggregatorTimeout", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newTrustedSequencer", + "type": "address" + } + ], + "name": "setTrustedSequencer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "newTrustedSequencerURL", + "type": "string" + } + ], + "name": "setTrustedSequencerURL", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "_numBatch", + "type": "uint64" + } + ], + "name": "setVerifiedBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IVerifierRollup", + "name": "_rollupVerifier", + "type": "address" + } + ], + "name": "setVerifier", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "newVeryBatchTimeTarget", + "type": "uint64" + } + ], + "name": "setVeryBatchTimeTarget", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "trustedAggregator", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "trustedAggregatorTimeout", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "trustedSequencer", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "trustedSequencerURL", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "pendingStateNum", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "initNumBatch", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "finalNewBatch", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "newLocalExitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "newStateRoot", + "type": "bytes32" + }, + { + "internalType": "uint256[2]", + "name": "proofA", + "type": "uint256[2]" + }, + { + "internalType": "uint256[2][2]", + "name": "proofB", + "type": "uint256[2][2]" + }, + { + "internalType": "uint256[2]", + "name": "proofC", + "type": "uint256[2]" + } + ], + "name": "trustedVerifyBatches", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "pendingStateNum", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "initNumBatch", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "finalNewBatch", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "newLocalExitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "newStateRoot", + "type": "bytes32" + }, + { + "internalType": "uint256[2]", + "name": "proofA", + "type": "uint256[2]" + }, + { + "internalType": "uint256[2][2]", + "name": "proofB", + "type": "uint256[2][2]" + }, + { + "internalType": "uint256[2]", + "name": "proofC", + "type": "uint256[2]" + } + ], + "name": "trustedVerifyBatchesMock", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "pendingStateNum", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "initNumBatch", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "finalNewBatch", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "newLocalExitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "newStateRoot", + "type": "bytes32" + }, + { + "internalType": "uint256[2]", + "name": "proofA", + "type": "uint256[2]" + }, + { + "internalType": "uint256[2][2]", + "name": "proofB", + "type": "uint256[2][2]" + }, + { + "internalType": "uint256[2]", + "name": "proofC", + "type": "uint256[2]" + } + ], + "name": "verifyBatches", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "veryBatchTimeTarget", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50615e2180620000216000396000f3fe608060405234801561001057600080fd5b50600436106104125760003560e01c806396dc3d3911610220578063cfa8ed4711610130578063e7a7ed02116100b8578063f14916d611610087578063f14916d6146109e2578063f2fde38b146109f5578063f851a44014610a08578063f8b823e414610a1b578063fe16564f14610a2457600080fd5b8063e7a7ed021461098f578063e8bf92ed146109a9578063eaeb077b146109bc578063edc41121146109cf57600080fd5b8063d939b315116100ff578063d939b3151461093e578063dbc1697614610958578063e0d1744114610960578063e11f3f1814610973578063e217cfd61461098657600080fd5b8063cfa8ed47146108ea578063d02103ca14610904578063d8d1091b14610917578063d8f54db01461092a57600080fd5b8063ab9fc5ef116101b3578063b6b0b09711610182578063b6b0b0971461088f578063c0cad302146108a9578063c0ed84e0146108bc578063c89e42df146108c4578063cf136306146108d757600080fd5b8063ab9fc5ef146107e3578063adc879e9146107ed578063afd23cbe14610807578063b4d63f581461082f57600080fd5b80639eb831b9116101ef5780639eb831b9146107a85780639f0d039d146107b0578063a3c573eb146107b8578063aa58bad6146107cb57600080fd5b806396dc3d391461076757806399f5634e1461077a5780639b796760146107825780639c9f3dfe1461079557600080fd5b80634a910e6a11610326578063715018a6116102ae578063837a47381161027d578063837a4738146106b1578063841b24d71461071f5780638b48931e146107395780638c4a0af7146107435780638da5cb5b1461075657600080fd5b8063715018a6146106705780637215541a1461067857806375c508b31461068b5780637fcb36531461069e57600080fd5b8063574f649e116102f5578063574f649e1461060457806360943d6a146106175780636b8616ce1461062a5780636ff512cc1461064a578063704b6c021461065d57600080fd5b80634a910e6a146105b65780635392c5e0146105c9578063542028d5146105e95780635437988d146105f157600080fd5b80632d0889d3116103a9578063423fa85611610378578063423fa85614610542578063456052671461055c578063458c0477146105765780634834a343146105895780634a1a89a71461059c57600080fd5b80632d0889d314610500578063383b3be814610509578063394218e91461051c5780633c1582671461052f57600080fd5b80631816b7e5116103e55780631816b7e51461048457806319d8ac6114610497578063220d7899146104c257806329878983146104d557600080fd5b80630eaa86ea14610417578063107bf28c1461043d57806310a01a721461045257806315064c9614610467575b600080fd5b61042a610425366004614b86565b610a37565b6040519081526020015b60405180910390f35b610445610c18565b6040516104349190614c33565b610465610460366004614c75565b610ca6565b005b6065546104749060ff1681565b6040519015158152602001610434565b610465610492366004614d02565b610ef0565b6068546104aa906001600160401b031681565b6040516001600160401b039091168152602001610434565b6104456104d0366004614d26565b611016565b606a546104e8906001600160a01b031681565b6040516001600160a01b039091168152602001610434565b61042a61ea6081565b610474610517366004614d73565b6111bc565b61046561052a366004614d73565b611203565b61046561053d366004614eb0565b611352565b6068546104aa90600160401b90046001600160401b031681565b6068546104aa90600160801b90046001600160401b031681565b6072546104aa906001600160401b031681565b610465610597366004614c75565b611b66565b6072546104aa90600160401b90046001600160401b031681565b6104656105c4366004614d73565b611eaf565b61042a6105d7366004614d73565b606d6020526000908152604090205481565b61044561214a565b6104656105ff366004614fdb565b612157565b61042a610612366004614ff8565b612181565b61046561062536600461506d565b6121c4565b61042a610638366004614d73565b60666020526000908152604090205481565b610465610658366004614fdb565b612534565b61046561066b366004614fdb565b6125b8565b610465612630565b610465610686366004614d73565b612644565b610465610699366004615144565b6128bc565b6069546104aa906001600160401b031681565b6106f46106bf3660046151e2565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610434565b6072546104aa90600160c01b90046001600160401b031681565b6104aa62093a8081565b610465610751366004615209565b61294b565b6033546001600160a01b03166104e8565b610465610775366004614d73565b6129c2565b61042a6129ed565b610465610790366004614d73565b612ad0565b6104656107a3366004614d73565b612b05565b61042a600c81565b60745461042a565b6070546104e8906001600160a01b031681565b6065546104aa9061010090046001600160401b031681565b6104aa6206978081565b606c546104aa90600160a81b90046001600160401b031681565b60655461081c90600160481b900461ffff1681565b60405161ffff9091168152602001610434565b61086a61083d366004614d73565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610434565b6065546104e890600160581b90046001600160a01b031681565b6104656108b7366004615226565b612c4b565b6104aa612c63565b6104656108d2366004615226565b612cb0565b6104656108e5366004614d73565b612d16565b6069546104e890600160401b90046001600160a01b031681565b606c546104e8906001600160a01b031681565b61046561092536600461525a565b612d97565b606c5461047490600160a01b900460ff1681565b6072546104aa90600160801b90046001600160401b031681565b610465613261565b61046561096e36600461534c565b61331d565b610465610981366004615144565b61338f565b6104aa6103e881565b6068546104aa90600160c01b90046001600160401b031681565b606b546104e8906001600160a01b031681565b6104656109ca366004615399565b6134d4565b6104656109dd366004614c75565b6137fc565b6104656109f0366004614fdb565b61391c565b610465610a03366004614fdb565b613994565b6073546104e8906001600160a01b031681565b61042a60745481565b610465610a323660046153dd565b613a0a565b6000806000610a44612c63565b90506001600160401b03881615610ae1576072546001600160401b039081169089161115610a8d5760405162461bcd60e51b8152600401610a8490615409565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610adb5760405162461bcd60e51b8152600401610a849061548c565b50610b4b565b6001600160401b0387166000908152606d6020526040902054915081610b195760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316876001600160401b03161115610b4b5760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316866001600160401b031611610b7c5760405162461bcd60e51b8152600401610a84906155ea565b6000610b8b8888888689611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051610bc0919061566d565b602060405180830381855afa158015610bdd573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c009190615689565b610c0a91906156b8565b9a9950505050505050505050565b606f8054610c25906156cc565b80601f0160208091040260200160405190810160405280929190818152602001828054610c51906156cc565b8015610c9e5780601f10610c7357610100808354040283529160200191610c9e565b820191906000526020600020905b815481529060010190602001808311610c8157829003601f168201915b505050505081565b610cae613a2c565b600080610cb9612c63565b90506001600160401b038a1615610d4d576072546001600160401b03908116908b161115610cf95760405162461bcd60e51b8152600401610a8490615409565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610d475760405162461bcd60e51b8152600401610a849061548c565b50610db7565b6001600160401b0389166000908152606d6020526040902054915081610d855760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316896001600160401b03161115610db75760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316886001600160401b031611610de85760405162461bcd60e51b8152600401610a84906155ea565b6000610df78a8a8a868b611016565b6069805467ffffffffffffffff19166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610e4557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610e8b57600080fd5b505af1158015610e9f573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610f1a5760405162461bcd60e51b8152600401610a8490615706565b6103e88161ffff16118015610f3457506104008161ffff16105b610fb95760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a4b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a401610a84565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b0380861660008181526067602052604080822054938816825290205460609291158061104857508115155b6110bc576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a84565b80611131576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a84565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b03828116600090815260716020526040812054909242926111f292600160801b9092048116911661575f565b6001600160401b0316111592915050565b6073546001600160a01b0316331461122d5760405162461bcd60e51b8152600401610a8490615706565b62093a806001600160401b03821611156112595760405162461bcd60e51b8152600401610a849061578a565b60655460ff166112fc576072546001600160401b03600160c01b9091048116908216106112fc5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a4b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a401610a84565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a19060200161100b565b60655460ff16156113755760405162461bcd60e51b8152600401610a84906157f5565b606954600160401b90046001600160a01b031633146113fc5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e6365720000000000006064820152608401610a84565b8051806114715760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e636520312062617463680000006064820152608401610a84565b6103e881106114ea576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e7920626174636865736064820152608401610a84565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561198a57600087828151811061153d5761153d61585d565b60200260200101519050600081606001516001600160401b031611156116f6578361156781615873565b94505060008160000151805190602001208260200151836060015160405160200161159493929190615899565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461163a5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d617463680000006064820152608401610a84565b81606001516001600160401b031682604001516001600160401b031610156116f05760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a401610a84565b5061187d565b6020810151158061177f5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916117399160040190815260200190565b6020604051808303816000875af1158015611758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177c9190615689565b15155b6117f15760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d7573742065786973740000000000006064820152608401610a84565b80515161ea601161187d5760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a401610a84565b856001600160401b031681604001516001600160401b0316101580156118b057504281604001516001600160401b031611155b6119225760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e67650000006064820152608401610a84565b805180516020918201208183015160408085015190516119499488949392913391016158bc565b604051602081830303815290604052805190602001209250848061196c90615873565b9550508060400151955050808061198290615900565b915050611521565b506068546001600160401b03600160c01b90910481169083161115611a0f5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b6064820152608401610a84565b606854600090611a2f90600160801b90046001600160401b031684615919565b611a42906001600160401b031687615941565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611b1790339030908490611afc9190615958565b606554600160581b90046001600160a01b0316929190613a86565b611b1f613af1565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b895760405162461bcd60e51b8152600401610a84906157f5565b6072546001600160401b038781166000908152606760205260409020600101544292611bc092600160c01b9091048116911661575f565b6001600160401b03161115611c495760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a401610a84565b6103e8611c568888615919565b6001600160401b031610611cd25760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e792062617463686573000000006064820152608401610a84565b611ce28888888888888888613b91565b611ceb86613e8e565b607254600160801b90046001600160401b0316600003611db3576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615611d5057607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d9657600080fd5b505af1158015611daa573d6000803e3d6000fd5b50505050611e64565b611dbb613af1565b607280546001600160401b0316906000611dd483615873565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611edc57506072546001600160401b03600160401b9091048116908216115b8015611ef757506072546001600160401b0390811690821611155b611f755760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a401610a84565b606a546001600160a01b0316331461201f57611f90816111bc565b61201f5760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a401610a84565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b1580156120dc57600080fd5b505af11580156120f0573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e846002015460405161213d91815260200190565b60405180910390a3505050565b606e8054610c25906156cc565b61215f613a2c565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b60008585805190602001208585856040516020016121a39594939291906158bc565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff16158080156121e45750600054600160ff909116105b806121fe5750303b1580156121fe575060005460ff166001145b6122615760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a84565b6000805460ff191660011790558015612284576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a8416179055607080549091169188169190911790556123016020860186614fdb565b607380546001600160a01b0319166001600160a01b03929092169190911790556123316060860160408701614fdb565b606980546001600160a01b0392909216600160401b02600160401b600160e01b031990921691909117905561236c60c0860160a08701614fdb565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa7113568490556123c960e0860160c08701614d73565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556124006040860160208701614d73565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561243c6080860160608701614d73565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b1990921691909117905561247860a0860160808701615209565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e6124a084826159bd565b50606f6124ad83826159bd565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124e3614074565b8015612529576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b0316331461255e5760405162461bcd60e51b8152600401610a8490615706565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161100b565b6073546001600160a01b031633146125e25760405162461bcd60e51b8152600401610a8490615706565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a19060200161100b565b612638613a2c565b61264260006140e4565b565b6033546001600160a01b031633146128b1576072546000906001600160401b03161561269557506072546001600160401b03908116600090815260716020526040902054600160401b9004166126a3565b506069546001600160401b03165b80826001600160401b0316116127215760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c7265616479207665726966696564000000006064820152608401610a84565b6068546001600160401b03600160401b90910481169083161180159061276357506001600160401b038083166000908152606760205260409020600101541615155b6127ee5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a401610a84565b6001600160401b03808316600090815260676020526040902060010154429161281c9162093a80911661575f565b6001600160401b031611156128af5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a401610a84565b505b6128b9614136565b50565b60655460ff16156128df5760405162461bcd60e51b8152600401610a84906157f5565b6128f08989898989898989896141a6565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1612529614136565b6073546001600160a01b031633146129755760405162461bcd60e51b8152600401610a8490615706565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061100b90831515815260200190565b6129ca613a2c565b6069805467ffffffffffffffff19166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a649190615689565b90506000612a70612c63565b6068546001600160401b03600160401b8204811691612aa091600160801b8204811691600160c01b900416615919565b612aaa919061575f565b612ab49190615919565b6001600160401b03169050612ac98183615a7c565b9250505090565b612ad8613a2c565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612b2f5760405162461bcd60e51b8152600401610a8490615706565b62093a806001600160401b0382161115612b5b5760405162461bcd60e51b8152600401610a849061578a565b60655460ff16612bf0576072546001600160401b03600160801b909104811690821610612bf05760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f776572006064820152608401610a84565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c759060200161100b565b612c53613a2c565b606f612c5f82826159bd565b5050565b6072546000906001600160401b031615612ca057506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612cda5760405162461bcd60e51b8152600401610a8490615706565b606e612ce682826159bd565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161100b9190614c33565b6073546001600160a01b03163314612d405760405162461bcd60e51b8152600401610a8490615706565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f9060200161100b565b60655460ff1615612dba5760405162461bcd60e51b8152600401610a84906157f5565b606c54600160a01b900460ff161515600114612de85760405162461bcd60e51b8152600401610a8490615a90565b805180612e4b5760405162461bcd60e51b815260206004820152603d6024820152600080516020615dac83398151915260448201527f3a204d75737420666f726365206174206c6561737420312062617463680000006064820152608401610a84565b6103e88110612ebc5760405162461bcd60e51b81526020600482015260436024820152600080516020615dac83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a401610a84565b6068546001600160401b03600160c01b8204811691612ee4918491600160801b900416615af9565b1115612f3e5760405162461bcd60e51b81526020600482015260356024820152600080516020615dac8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b6064820152608401610a84565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b8481101561316a576000868281518110612f8b57612f8b61585d565b602002602001015190508380612fa090615873565b945050600081600001518051906020012082602001518360400151604051602001612fcd93929190615899565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461306c5760405162461bcd60e51b81526020600482015260426024820152600080516020615dac83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a401610a84565b613077600188615941565b830361310c5742620697808360400151613091919061575f565b6001600160401b0316111561310c5760405162461bcd60e51b81526020600482015260476024820152600080516020615dac83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a401610a84565b815180516020918201208184015160405161312f938893929142913391016158bc565b604051602081830303815290604052805190602001209350858061315290615873565b9650505050808061316290615900565b915050612f6f565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166132835760405162461bcd60e51b8152600401610a8490615b11565b6073546001600160a01b031633146132ad5760405162461bcd60e51b8152600401610a8490615706565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156132fd57600080fd5b505af1158015613311573d6000803e3d6000fd5b50505050612642614821565b613325613a2c565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133b95760405162461bcd60e51b8152600401610a8490615b6e565b6133ca8989898989898989896141a6565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561341557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561345b57600080fd5b505af115801561346f573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff16156134f75760405162461bcd60e51b8152600401610a84906157f5565b606c54600160a01b900460ff1615156001146135255760405162461bcd60e51b8152600401610a8490615a90565b600061353060745490565b9050818111156135955760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b6064820152608401610a84565b61ea608351106136055760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b6064820152608401610a84565b60655461362490600160581b90046001600160a01b0316333084613a86565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa15801561366e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136929190615689565b60688054919250600160c01b9091046001600160401b03169060186136b683615873565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016136f793929190615899565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361379b57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26137f6565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516137ed93929190615bcb565b60405180910390a25b50505050565b606a546001600160a01b031633146138265760405162461bcd60e51b8152600401610a8490615b6e565b6138368888888888888888613b91565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561388157607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156138c757600080fd5b505af11580156138db573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e9d565b6073546001600160a01b031633146139465760405162461bcd60e51b8152600401610a8490615706565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca9060200161100b565b61399c613a2c565b6001600160a01b038116613a015760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a84565b6128b9816140e4565b613a12613a2c565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b031633146126425760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a84565b6040516001600160a01b03808516602483015283166044820152606481018290526137f69085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614878565b6072546001600160401b03600160401b820481169116111561264257607254600090613b2e90600160401b90046001600160401b0316600161575f565b9050613b39816111bc565b156128b957607254600090600290613b5b9084906001600160401b0316615919565b613b659190615bfe565b613b6f908361575f565b9050613b7a816111bc565b15613b8857612c5f81611eaf565b612c5f82611eaf565b600080613b9c612c63565b90506001600160401b038a1615613c30576072546001600160401b03908116908b161115613bdc5760405162461bcd60e51b8152600401610a8490615409565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c2a5760405162461bcd60e51b8152600401610a849061548c565b50613c9a565b6001600160401b0389166000908152606d6020526040902054915081613c685760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316896001600160401b03161115613c9a5760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316886001600160401b031611613ccb5760405162461bcd60e51b8152600401610a84906155ea565b6000613cda8a8a8a868b611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051613d0f919061566d565b602060405180830381855afa158015613d2c573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613d4f9190615689565b613d5991906156b8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613d9d918b918b918b9190600401615c24565b602060405180830381865afa158015613dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dde9190615c9e565b613e3d5760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20494e5660448201526920a624a22fa82927a7a360b11b6064820152608401610a84565b613e8033613e4b858d615919565b6001600160401b0316613e5c6129ed565b613e669190615958565b606554600160581b90046001600160a01b0316919061494f565b505050505050505050505050565b6000613e98612c63565b905081600080613ea88484615919565b6001600160401b031690505b836001600160401b0316836001600160401b031614613f5a576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613f04911642615941565b1115613f3f576001810154613f2990600160401b90046001600160401b031686615919565b613f3c906001600160401b031684615af9565b92505b60010154600160401b90046001600160401b03169250613eb4565b6000613f668383615941565b905082811015613fe0576000613f7c8285615941565b9050600c8111613f8c5780613f8f565b600c5b9050613f9c816003615958565b613fa790600a615d9f565b606554613fc0908390600160481b900461ffff16615d9f565b607454613fcd9190615958565b613fd79190615a7c565b6074555061406c565b6000613fec8483615941565b9050600c8111613ffc5780613fff565b600c5b9050600061400e826003615958565b61401990600a615d9f565b606554614032908490600160481b900461ffff16615d9f565b60745461403f9190615958565b6140499190615a7c565b90508060745460745461405c9190615958565b6140669190615a7c565b60745550505b505050505050565b600054610100900460ff166140df5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a84565b612642335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561418657600080fd5b505af115801561419a573d6000803e3d6000fd5b5050505061264261497f565b60006001600160401b038a1615614321576072546001600160401b03908116908b1611156142655760405162461bcd60e51b815260206004820152606c6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c401610a84565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b909204161461431b5760405162461bcd60e51b81526020600482015260606024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a401610a84565b50614475565b506001600160401b0387166000908152606d6020526040902054806143c25760405162461bcd60e51b81526020600482015260576024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a401610a84565b6069546001600160401b0390811690891611156144755760405162461bcd60e51b81526020600482015260716024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c401610a84565b6072546001600160401b03908116908a16118015906144a55750896001600160401b0316896001600160401b0316115b80156144c657506072546001600160401b03600160401b9091048116908a16115b61453e5760405162461bcd60e51b815260206004820152604f6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a401610a84565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146145fe5760405162461bcd60e51b815260206004820152606a6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c401610a84565b600061460d898989858a611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051614642919061566d565b602060405180830381855afa15801561465f573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906146829190615689565b61468c91906156b8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916146d0918a918a918a9190600401615c24565b602060405180830381865afa1580156146ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147119190615c9e565b6147715760405162461bcd60e51b815260206004820152603e6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20494e56414c49445f50524f4f4600006064820152608401610a84565b6001600160401b038b16600090815260716020526040902060020154879003613e805760405162461bcd60e51b81526020600482015260626024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c401610a84565b60655460ff166148435760405162461bcd60e51b8152600401610a8490615b11565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006148cd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166149da9092919063ffffffff16565b80519091501561494a57808060200190518101906148eb9190615c9e565b61494a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a84565b505050565b6040516001600160a01b03831660248201526044810182905261494a90849063a9059cbb60e01b90606401613aba565b60655460ff16156149a25760405162461bcd60e51b8152600401610a84906157f5565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60606149e984846000856149f1565b949350505050565b606082471015614a525760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a84565b600080866001600160a01b03168587604051614a6e919061566d565b60006040518083038185875af1925050503d8060008114614aab576040519150601f19603f3d011682016040523d82523d6000602084013e614ab0565b606091505b5091509150614ac187838387614acc565b979650505050505050565b60608315614b3b578251600003614b34576001600160a01b0385163b614b345760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a84565b50816149e9565b6149e98383815115614b505781518083602001fd5b8060405162461bcd60e51b8152600401610a849190614c33565b80356001600160401b0381168114614b8157600080fd5b919050565b600080600080600060a08688031215614b9e57600080fd5b614ba786614b6a565b9450614bb560208701614b6a565b9350614bc360408701614b6a565b94979396509394606081013594506080013592915050565b60005b83811015614bf6578181015183820152602001614bde565b838111156137f65750506000910152565b60008151808452614c1f816020860160208601614bdb565b601f01601f19169290920160200192915050565b602081526000614c466020830184614c07565b9392505050565b8060408101831015614c5e57600080fd5b92915050565b8060808101831015614c5e57600080fd5b6000806000806000806000806101a0898b031215614c9257600080fd5b614c9b89614b6a565b9750614ca960208a01614b6a565b9650614cb760408a01614b6a565b95506060890135945060808901359350614cd48a60a08b01614c4d565b9250614ce38a60e08b01614c64565b9150614cf38a6101608b01614c4d565b90509295985092959890939650565b600060208284031215614d1457600080fd5b813561ffff81168114614c4657600080fd5b600080600080600060a08688031215614d3e57600080fd5b614d4786614b6a565b9450614d5560208701614b6a565b94979496505050506040830135926060810135926080909101359150565b600060208284031215614d8557600080fd5b614c4682614b6a565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614dc657614dc6614d8e565b60405290565b604051606081016001600160401b0381118282101715614dc657614dc6614d8e565b604051601f8201601f191681016001600160401b0381118282101715614e1657614e16614d8e565b604052919050565b60006001600160401b03821115614e3757614e37614d8e565b5060051b60200190565b600082601f830112614e5257600080fd5b81356001600160401b03811115614e6b57614e6b614d8e565b614e7e601f8201601f1916602001614dee565b818152846020838601011115614e9357600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614ec357600080fd5b82356001600160401b0380821115614eda57600080fd5b818501915085601f830112614eee57600080fd5b8135614f01614efc82614e1e565b614dee565b81815260059190911b83018401908481019088831115614f2057600080fd5b8585015b83811015614fb957803585811115614f3c5760008081fd5b86016080818c03601f1901811315614f545760008081fd5b614f5c614da4565b8983013588811115614f6e5760008081fd5b614f7c8e8c83870101614e41565b8252506040808401358b8301526060614f96818601614b6a565b82840152614fa5848601614b6a565b908301525085525050918601918601614f24565b5098975050505050505050565b6001600160a01b03811681146128b957600080fd5b600060208284031215614fed57600080fd5b8135614c4681614fc6565b600080600080600060a0868803121561501057600080fd5b8535945060208601356001600160401b0381111561502d57600080fd5b61503988828901614e41565b9450506040860135925061504f60608701614b6a565b9150608086013561505f81614fc6565b809150509295509295909350565b600080600080600080600080888a036101c081121561508b57600080fd5b893561509681614fc6565b985060208a01356150a681614fc6565b975060408a01356150b681614fc6565b965060608a01356150c681614fc6565b955060e0607f19820112156150da57600080fd5b5060808901935061016089013592506101808901356001600160401b038082111561510457600080fd5b6151108c838d01614e41565b93506101a08b013591508082111561512757600080fd5b506151348b828c01614e41565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c03121561516357600080fd5b61516c8a614b6a565b985061517a60208b01614b6a565b975061518860408b01614b6a565b965061519660608b01614b6a565b955060808a0135945060a08a013593506151b38b60c08c01614c4d565b92506151c38b6101008c01614c64565b91506151d38b6101808c01614c4d565b90509295985092959850929598565b6000602082840312156151f457600080fd5b5035919050565b80151581146128b957600080fd5b60006020828403121561521b57600080fd5b8135614c46816151fb565b60006020828403121561523857600080fd5b81356001600160401b0381111561524e57600080fd5b6149e984828501614e41565b6000602080838503121561526d57600080fd5b82356001600160401b038082111561528457600080fd5b818501915085601f83011261529857600080fd5b81356152a6614efc82614e1e565b81815260059190911b830184019084810190888311156152c557600080fd5b8585015b83811015614fb9578035858111156152e15760008081fd5b86016060818c03601f19018113156152f95760008081fd5b615301614dcc565b89830135888111156153135760008081fd5b6153218e8c83870101614e41565b8252506040808401358b830152615339838501614b6a565b90820152855250509186019186016152c9565b6000806000806080858703121561536257600080fd5b61536b85614b6a565b93506020850135925061538060408601614b6a565b915061538e60608601614b6a565b905092959194509250565b600080604083850312156153ac57600080fd5b82356001600160401b038111156153c257600080fd5b6153ce85828601614e41565b95602094909401359450505050565b600080604083850312156153f057600080fd5b8235915061540060208401614b6a565b90509250929050565b60208082526058908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2070656e60408201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560608201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608082015260a00190565b6020808252604c908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760608201526b040e6e8c2e8ca40c4c2e8c6d60a31b608082015260a00190565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786060820152621a5cdd60ea1b608082015260a00190565b6020808252605d908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060608201527f7468616e2063757272656e744c61737456657269666965644261746368000000608082015260a00190565b60208082526057908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2066696e60408201527f616c4e65774261746368206d75737420626520626967676572207468616e206360608201527f757272656e744c61737456657269666965644261746368000000000000000000608082015260a00190565b6000825161567f818460208701614bdb565b9190910192915050565b60006020828403121561569b57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826156c7576156c76156a2565b500690565b600181811c908216806156e057607f821691505b60208210810361570057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561578157615781615749565b01949350505050565b60208082526045908201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361588f5761588f615749565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b60006001820161591257615912615749565b5060010190565b60006001600160401b038381169083168181101561593957615939615749565b039392505050565b60008282101561595357615953615749565b500390565b600081600019048311821515161561597257615972615749565b500290565b601f82111561494a57600081815260208120601f850160051c8101602086101561599e5750805b601f850160051c820191505b8181101561406c578281556001016159aa565b81516001600160401b038111156159d6576159d6614d8e565b6159ea816159e484546156cc565b84615977565b602080601f831160018114615a1f5760008415615a075750858301515b600019600386901b1c1916600185901b17855561406c565b600085815260208120601f198616915b82811015615a4e57888601518255948401946001909101908401615a2f565b5085821015615a6c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615a8b57615a8b6156a2565b500490565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b60008219821115615b0c57615b0c615749565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b0383166020820152606060408201819052600090615bf590830184614c07565b95945050505050565b60006001600160401b0380841680615c1857615c186156a2565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615c5c57848483379084018281529284019290600101615c3c565b5050828760c0870137610100850181815286935091505b6001811015615c92578251825260209283019290910190600101615c73565b50505095945050505050565b600060208284031215615cb057600080fd5b8151614c46816151fb565b600181815b80851115615cf6578160001904821115615cdc57615cdc615749565b80851615615ce957918102915b93841c9390800290615cc0565b509250929050565b600082615d0d57506001614c5e565b81615d1a57506000614c5e565b8160018114615d305760028114615d3a57615d56565b6001915050614c5e565b60ff841115615d4b57615d4b615749565b50506001821b614c5e565b5060208310610133831016604e8410600b8410161715615d79575081810a614c5e565b615d838383615cbb565b8060001904821115615d9757615d97615749565b029392505050565b6000614c468383615cfe56fe506f6c79676f6e5a4b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a4b45564d3a3a70726f76654e6f6e44657465726d696e6973a26469706673582212201e5160e5b35ba013638c7e982194345ea29364dacf96b8b35832f82a7d7d74b864736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106104125760003560e01c806396dc3d3911610220578063cfa8ed4711610130578063e7a7ed02116100b8578063f14916d611610087578063f14916d6146109e2578063f2fde38b146109f5578063f851a44014610a08578063f8b823e414610a1b578063fe16564f14610a2457600080fd5b8063e7a7ed021461098f578063e8bf92ed146109a9578063eaeb077b146109bc578063edc41121146109cf57600080fd5b8063d939b315116100ff578063d939b3151461093e578063dbc1697614610958578063e0d1744114610960578063e11f3f1814610973578063e217cfd61461098657600080fd5b8063cfa8ed47146108ea578063d02103ca14610904578063d8d1091b14610917578063d8f54db01461092a57600080fd5b8063ab9fc5ef116101b3578063b6b0b09711610182578063b6b0b0971461088f578063c0cad302146108a9578063c0ed84e0146108bc578063c89e42df146108c4578063cf136306146108d757600080fd5b8063ab9fc5ef146107e3578063adc879e9146107ed578063afd23cbe14610807578063b4d63f581461082f57600080fd5b80639eb831b9116101ef5780639eb831b9146107a85780639f0d039d146107b0578063a3c573eb146107b8578063aa58bad6146107cb57600080fd5b806396dc3d391461076757806399f5634e1461077a5780639b796760146107825780639c9f3dfe1461079557600080fd5b80634a910e6a11610326578063715018a6116102ae578063837a47381161027d578063837a4738146106b1578063841b24d71461071f5780638b48931e146107395780638c4a0af7146107435780638da5cb5b1461075657600080fd5b8063715018a6146106705780637215541a1461067857806375c508b31461068b5780637fcb36531461069e57600080fd5b8063574f649e116102f5578063574f649e1461060457806360943d6a146106175780636b8616ce1461062a5780636ff512cc1461064a578063704b6c021461065d57600080fd5b80634a910e6a146105b65780635392c5e0146105c9578063542028d5146105e95780635437988d146105f157600080fd5b80632d0889d3116103a9578063423fa85611610378578063423fa85614610542578063456052671461055c578063458c0477146105765780634834a343146105895780634a1a89a71461059c57600080fd5b80632d0889d314610500578063383b3be814610509578063394218e91461051c5780633c1582671461052f57600080fd5b80631816b7e5116103e55780631816b7e51461048457806319d8ac6114610497578063220d7899146104c257806329878983146104d557600080fd5b80630eaa86ea14610417578063107bf28c1461043d57806310a01a721461045257806315064c9614610467575b600080fd5b61042a610425366004614b86565b610a37565b6040519081526020015b60405180910390f35b610445610c18565b6040516104349190614c33565b610465610460366004614c75565b610ca6565b005b6065546104749060ff1681565b6040519015158152602001610434565b610465610492366004614d02565b610ef0565b6068546104aa906001600160401b031681565b6040516001600160401b039091168152602001610434565b6104456104d0366004614d26565b611016565b606a546104e8906001600160a01b031681565b6040516001600160a01b039091168152602001610434565b61042a61ea6081565b610474610517366004614d73565b6111bc565b61046561052a366004614d73565b611203565b61046561053d366004614eb0565b611352565b6068546104aa90600160401b90046001600160401b031681565b6068546104aa90600160801b90046001600160401b031681565b6072546104aa906001600160401b031681565b610465610597366004614c75565b611b66565b6072546104aa90600160401b90046001600160401b031681565b6104656105c4366004614d73565b611eaf565b61042a6105d7366004614d73565b606d6020526000908152604090205481565b61044561214a565b6104656105ff366004614fdb565b612157565b61042a610612366004614ff8565b612181565b61046561062536600461506d565b6121c4565b61042a610638366004614d73565b60666020526000908152604090205481565b610465610658366004614fdb565b612534565b61046561066b366004614fdb565b6125b8565b610465612630565b610465610686366004614d73565b612644565b610465610699366004615144565b6128bc565b6069546104aa906001600160401b031681565b6106f46106bf3660046151e2565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610434565b6072546104aa90600160c01b90046001600160401b031681565b6104aa62093a8081565b610465610751366004615209565b61294b565b6033546001600160a01b03166104e8565b610465610775366004614d73565b6129c2565b61042a6129ed565b610465610790366004614d73565b612ad0565b6104656107a3366004614d73565b612b05565b61042a600c81565b60745461042a565b6070546104e8906001600160a01b031681565b6065546104aa9061010090046001600160401b031681565b6104aa6206978081565b606c546104aa90600160a81b90046001600160401b031681565b60655461081c90600160481b900461ffff1681565b60405161ffff9091168152602001610434565b61086a61083d366004614d73565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610434565b6065546104e890600160581b90046001600160a01b031681565b6104656108b7366004615226565b612c4b565b6104aa612c63565b6104656108d2366004615226565b612cb0565b6104656108e5366004614d73565b612d16565b6069546104e890600160401b90046001600160a01b031681565b606c546104e8906001600160a01b031681565b61046561092536600461525a565b612d97565b606c5461047490600160a01b900460ff1681565b6072546104aa90600160801b90046001600160401b031681565b610465613261565b61046561096e36600461534c565b61331d565b610465610981366004615144565b61338f565b6104aa6103e881565b6068546104aa90600160c01b90046001600160401b031681565b606b546104e8906001600160a01b031681565b6104656109ca366004615399565b6134d4565b6104656109dd366004614c75565b6137fc565b6104656109f0366004614fdb565b61391c565b610465610a03366004614fdb565b613994565b6073546104e8906001600160a01b031681565b61042a60745481565b610465610a323660046153dd565b613a0a565b6000806000610a44612c63565b90506001600160401b03881615610ae1576072546001600160401b039081169089161115610a8d5760405162461bcd60e51b8152600401610a8490615409565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610adb5760405162461bcd60e51b8152600401610a849061548c565b50610b4b565b6001600160401b0387166000908152606d6020526040902054915081610b195760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316876001600160401b03161115610b4b5760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316866001600160401b031611610b7c5760405162461bcd60e51b8152600401610a84906155ea565b6000610b8b8888888689611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051610bc0919061566d565b602060405180830381855afa158015610bdd573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c009190615689565b610c0a91906156b8565b9a9950505050505050505050565b606f8054610c25906156cc565b80601f0160208091040260200160405190810160405280929190818152602001828054610c51906156cc565b8015610c9e5780601f10610c7357610100808354040283529160200191610c9e565b820191906000526020600020905b815481529060010190602001808311610c8157829003601f168201915b505050505081565b610cae613a2c565b600080610cb9612c63565b90506001600160401b038a1615610d4d576072546001600160401b03908116908b161115610cf95760405162461bcd60e51b8152600401610a8490615409565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610d475760405162461bcd60e51b8152600401610a849061548c565b50610db7565b6001600160401b0389166000908152606d6020526040902054915081610d855760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316896001600160401b03161115610db75760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316886001600160401b031611610de85760405162461bcd60e51b8152600401610a84906155ea565b6000610df78a8a8a868b611016565b6069805467ffffffffffffffff19166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610e4557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610e8b57600080fd5b505af1158015610e9f573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610f1a5760405162461bcd60e51b8152600401610a8490615706565b6103e88161ffff16118015610f3457506104008161ffff16105b610fb95760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a4b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a401610a84565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b0380861660008181526067602052604080822054938816825290205460609291158061104857508115155b6110bc576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a84565b80611131576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a84565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b03828116600090815260716020526040812054909242926111f292600160801b9092048116911661575f565b6001600160401b0316111592915050565b6073546001600160a01b0316331461122d5760405162461bcd60e51b8152600401610a8490615706565b62093a806001600160401b03821611156112595760405162461bcd60e51b8152600401610a849061578a565b60655460ff166112fc576072546001600160401b03600160c01b9091048116908216106112fc5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a4b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a401610a84565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a19060200161100b565b60655460ff16156113755760405162461bcd60e51b8152600401610a84906157f5565b606954600160401b90046001600160a01b031633146113fc5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e6365720000000000006064820152608401610a84565b8051806114715760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e636520312062617463680000006064820152608401610a84565b6103e881106114ea576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e7920626174636865736064820152608401610a84565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561198a57600087828151811061153d5761153d61585d565b60200260200101519050600081606001516001600160401b031611156116f6578361156781615873565b94505060008160000151805190602001208260200151836060015160405160200161159493929190615899565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461163a5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d617463680000006064820152608401610a84565b81606001516001600160401b031682604001516001600160401b031610156116f05760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a401610a84565b5061187d565b6020810151158061177f5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916117399160040190815260200190565b6020604051808303816000875af1158015611758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177c9190615689565b15155b6117f15760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d7573742065786973740000000000006064820152608401610a84565b80515161ea601161187d5760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a401610a84565b856001600160401b031681604001516001600160401b0316101580156118b057504281604001516001600160401b031611155b6119225760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e67650000006064820152608401610a84565b805180516020918201208183015160408085015190516119499488949392913391016158bc565b604051602081830303815290604052805190602001209250848061196c90615873565b9550508060400151955050808061198290615900565b915050611521565b506068546001600160401b03600160c01b90910481169083161115611a0f5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b6064820152608401610a84565b606854600090611a2f90600160801b90046001600160401b031684615919565b611a42906001600160401b031687615941565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611b1790339030908490611afc9190615958565b606554600160581b90046001600160a01b0316929190613a86565b611b1f613af1565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b895760405162461bcd60e51b8152600401610a84906157f5565b6072546001600160401b038781166000908152606760205260409020600101544292611bc092600160c01b9091048116911661575f565b6001600160401b03161115611c495760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a401610a84565b6103e8611c568888615919565b6001600160401b031610611cd25760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e792062617463686573000000006064820152608401610a84565b611ce28888888888888888613b91565b611ceb86613e8e565b607254600160801b90046001600160401b0316600003611db3576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615611d5057607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d9657600080fd5b505af1158015611daa573d6000803e3d6000fd5b50505050611e64565b611dbb613af1565b607280546001600160401b0316906000611dd483615873565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611edc57506072546001600160401b03600160401b9091048116908216115b8015611ef757506072546001600160401b0390811690821611155b611f755760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a401610a84565b606a546001600160a01b0316331461201f57611f90816111bc565b61201f5760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a401610a84565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b1580156120dc57600080fd5b505af11580156120f0573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e846002015460405161213d91815260200190565b60405180910390a3505050565b606e8054610c25906156cc565b61215f613a2c565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b60008585805190602001208585856040516020016121a39594939291906158bc565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff16158080156121e45750600054600160ff909116105b806121fe5750303b1580156121fe575060005460ff166001145b6122615760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a84565b6000805460ff191660011790558015612284576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a8416179055607080549091169188169190911790556123016020860186614fdb565b607380546001600160a01b0319166001600160a01b03929092169190911790556123316060860160408701614fdb565b606980546001600160a01b0392909216600160401b02600160401b600160e01b031990921691909117905561236c60c0860160a08701614fdb565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa7113568490556123c960e0860160c08701614d73565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556124006040860160208701614d73565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561243c6080860160608701614d73565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b1990921691909117905561247860a0860160808701615209565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e6124a084826159bd565b50606f6124ad83826159bd565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124e3614074565b8015612529576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b0316331461255e5760405162461bcd60e51b8152600401610a8490615706565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161100b565b6073546001600160a01b031633146125e25760405162461bcd60e51b8152600401610a8490615706565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a19060200161100b565b612638613a2c565b61264260006140e4565b565b6033546001600160a01b031633146128b1576072546000906001600160401b03161561269557506072546001600160401b03908116600090815260716020526040902054600160401b9004166126a3565b506069546001600160401b03165b80826001600160401b0316116127215760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c7265616479207665726966696564000000006064820152608401610a84565b6068546001600160401b03600160401b90910481169083161180159061276357506001600160401b038083166000908152606760205260409020600101541615155b6127ee5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a401610a84565b6001600160401b03808316600090815260676020526040902060010154429161281c9162093a80911661575f565b6001600160401b031611156128af5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a401610a84565b505b6128b9614136565b50565b60655460ff16156128df5760405162461bcd60e51b8152600401610a84906157f5565b6128f08989898989898989896141a6565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1612529614136565b6073546001600160a01b031633146129755760405162461bcd60e51b8152600401610a8490615706565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061100b90831515815260200190565b6129ca613a2c565b6069805467ffffffffffffffff19166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a649190615689565b90506000612a70612c63565b6068546001600160401b03600160401b8204811691612aa091600160801b8204811691600160c01b900416615919565b612aaa919061575f565b612ab49190615919565b6001600160401b03169050612ac98183615a7c565b9250505090565b612ad8613a2c565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612b2f5760405162461bcd60e51b8152600401610a8490615706565b62093a806001600160401b0382161115612b5b5760405162461bcd60e51b8152600401610a849061578a565b60655460ff16612bf0576072546001600160401b03600160801b909104811690821610612bf05760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f776572006064820152608401610a84565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c759060200161100b565b612c53613a2c565b606f612c5f82826159bd565b5050565b6072546000906001600160401b031615612ca057506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612cda5760405162461bcd60e51b8152600401610a8490615706565b606e612ce682826159bd565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161100b9190614c33565b6073546001600160a01b03163314612d405760405162461bcd60e51b8152600401610a8490615706565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f9060200161100b565b60655460ff1615612dba5760405162461bcd60e51b8152600401610a84906157f5565b606c54600160a01b900460ff161515600114612de85760405162461bcd60e51b8152600401610a8490615a90565b805180612e4b5760405162461bcd60e51b815260206004820152603d6024820152600080516020615dac83398151915260448201527f3a204d75737420666f726365206174206c6561737420312062617463680000006064820152608401610a84565b6103e88110612ebc5760405162461bcd60e51b81526020600482015260436024820152600080516020615dac83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a401610a84565b6068546001600160401b03600160c01b8204811691612ee4918491600160801b900416615af9565b1115612f3e5760405162461bcd60e51b81526020600482015260356024820152600080516020615dac8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b6064820152608401610a84565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b8481101561316a576000868281518110612f8b57612f8b61585d565b602002602001015190508380612fa090615873565b945050600081600001518051906020012082602001518360400151604051602001612fcd93929190615899565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461306c5760405162461bcd60e51b81526020600482015260426024820152600080516020615dac83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a401610a84565b613077600188615941565b830361310c5742620697808360400151613091919061575f565b6001600160401b0316111561310c5760405162461bcd60e51b81526020600482015260476024820152600080516020615dac83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a401610a84565b815180516020918201208184015160405161312f938893929142913391016158bc565b604051602081830303815290604052805190602001209350858061315290615873565b9650505050808061316290615900565b915050612f6f565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166132835760405162461bcd60e51b8152600401610a8490615b11565b6073546001600160a01b031633146132ad5760405162461bcd60e51b8152600401610a8490615706565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156132fd57600080fd5b505af1158015613311573d6000803e3d6000fd5b50505050612642614821565b613325613a2c565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133b95760405162461bcd60e51b8152600401610a8490615b6e565b6133ca8989898989898989896141a6565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561341557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561345b57600080fd5b505af115801561346f573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff16156134f75760405162461bcd60e51b8152600401610a84906157f5565b606c54600160a01b900460ff1615156001146135255760405162461bcd60e51b8152600401610a8490615a90565b600061353060745490565b9050818111156135955760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b6064820152608401610a84565b61ea608351106136055760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b6064820152608401610a84565b60655461362490600160581b90046001600160a01b0316333084613a86565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa15801561366e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136929190615689565b60688054919250600160c01b9091046001600160401b03169060186136b683615873565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016136f793929190615899565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361379b57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26137f6565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516137ed93929190615bcb565b60405180910390a25b50505050565b606a546001600160a01b031633146138265760405162461bcd60e51b8152600401610a8490615b6e565b6138368888888888888888613b91565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561388157607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156138c757600080fd5b505af11580156138db573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e9d565b6073546001600160a01b031633146139465760405162461bcd60e51b8152600401610a8490615706565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca9060200161100b565b61399c613a2c565b6001600160a01b038116613a015760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a84565b6128b9816140e4565b613a12613a2c565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b031633146126425760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a84565b6040516001600160a01b03808516602483015283166044820152606481018290526137f69085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614878565b6072546001600160401b03600160401b820481169116111561264257607254600090613b2e90600160401b90046001600160401b0316600161575f565b9050613b39816111bc565b156128b957607254600090600290613b5b9084906001600160401b0316615919565b613b659190615bfe565b613b6f908361575f565b9050613b7a816111bc565b15613b8857612c5f81611eaf565b612c5f82611eaf565b600080613b9c612c63565b90506001600160401b038a1615613c30576072546001600160401b03908116908b161115613bdc5760405162461bcd60e51b8152600401610a8490615409565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c2a5760405162461bcd60e51b8152600401610a849061548c565b50613c9a565b6001600160401b0389166000908152606d6020526040902054915081613c685760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316896001600160401b03161115613c9a5760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316886001600160401b031611613ccb5760405162461bcd60e51b8152600401610a84906155ea565b6000613cda8a8a8a868b611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051613d0f919061566d565b602060405180830381855afa158015613d2c573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613d4f9190615689565b613d5991906156b8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613d9d918b918b918b9190600401615c24565b602060405180830381865afa158015613dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dde9190615c9e565b613e3d5760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20494e5660448201526920a624a22fa82927a7a360b11b6064820152608401610a84565b613e8033613e4b858d615919565b6001600160401b0316613e5c6129ed565b613e669190615958565b606554600160581b90046001600160a01b0316919061494f565b505050505050505050505050565b6000613e98612c63565b905081600080613ea88484615919565b6001600160401b031690505b836001600160401b0316836001600160401b031614613f5a576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613f04911642615941565b1115613f3f576001810154613f2990600160401b90046001600160401b031686615919565b613f3c906001600160401b031684615af9565b92505b60010154600160401b90046001600160401b03169250613eb4565b6000613f668383615941565b905082811015613fe0576000613f7c8285615941565b9050600c8111613f8c5780613f8f565b600c5b9050613f9c816003615958565b613fa790600a615d9f565b606554613fc0908390600160481b900461ffff16615d9f565b607454613fcd9190615958565b613fd79190615a7c565b6074555061406c565b6000613fec8483615941565b9050600c8111613ffc5780613fff565b600c5b9050600061400e826003615958565b61401990600a615d9f565b606554614032908490600160481b900461ffff16615d9f565b60745461403f9190615958565b6140499190615a7c565b90508060745460745461405c9190615958565b6140669190615a7c565b60745550505b505050505050565b600054610100900460ff166140df5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a84565b612642335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561418657600080fd5b505af115801561419a573d6000803e3d6000fd5b5050505061264261497f565b60006001600160401b038a1615614321576072546001600160401b03908116908b1611156142655760405162461bcd60e51b815260206004820152606c6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c401610a84565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b909204161461431b5760405162461bcd60e51b81526020600482015260606024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a401610a84565b50614475565b506001600160401b0387166000908152606d6020526040902054806143c25760405162461bcd60e51b81526020600482015260576024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a401610a84565b6069546001600160401b0390811690891611156144755760405162461bcd60e51b81526020600482015260716024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c401610a84565b6072546001600160401b03908116908a16118015906144a55750896001600160401b0316896001600160401b0316115b80156144c657506072546001600160401b03600160401b9091048116908a16115b61453e5760405162461bcd60e51b815260206004820152604f6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a401610a84565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146145fe5760405162461bcd60e51b815260206004820152606a6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c401610a84565b600061460d898989858a611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051614642919061566d565b602060405180830381855afa15801561465f573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906146829190615689565b61468c91906156b8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916146d0918a918a918a9190600401615c24565b602060405180830381865afa1580156146ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147119190615c9e565b6147715760405162461bcd60e51b815260206004820152603e6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20494e56414c49445f50524f4f4600006064820152608401610a84565b6001600160401b038b16600090815260716020526040902060020154879003613e805760405162461bcd60e51b81526020600482015260626024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c401610a84565b60655460ff166148435760405162461bcd60e51b8152600401610a8490615b11565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006148cd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166149da9092919063ffffffff16565b80519091501561494a57808060200190518101906148eb9190615c9e565b61494a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a84565b505050565b6040516001600160a01b03831660248201526044810182905261494a90849063a9059cbb60e01b90606401613aba565b60655460ff16156149a25760405162461bcd60e51b8152600401610a84906157f5565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60606149e984846000856149f1565b949350505050565b606082471015614a525760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a84565b600080866001600160a01b03168587604051614a6e919061566d565b60006040518083038185875af1925050503d8060008114614aab576040519150601f19603f3d011682016040523d82523d6000602084013e614ab0565b606091505b5091509150614ac187838387614acc565b979650505050505050565b60608315614b3b578251600003614b34576001600160a01b0385163b614b345760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a84565b50816149e9565b6149e98383815115614b505781518083602001fd5b8060405162461bcd60e51b8152600401610a849190614c33565b80356001600160401b0381168114614b8157600080fd5b919050565b600080600080600060a08688031215614b9e57600080fd5b614ba786614b6a565b9450614bb560208701614b6a565b9350614bc360408701614b6a565b94979396509394606081013594506080013592915050565b60005b83811015614bf6578181015183820152602001614bde565b838111156137f65750506000910152565b60008151808452614c1f816020860160208601614bdb565b601f01601f19169290920160200192915050565b602081526000614c466020830184614c07565b9392505050565b8060408101831015614c5e57600080fd5b92915050565b8060808101831015614c5e57600080fd5b6000806000806000806000806101a0898b031215614c9257600080fd5b614c9b89614b6a565b9750614ca960208a01614b6a565b9650614cb760408a01614b6a565b95506060890135945060808901359350614cd48a60a08b01614c4d565b9250614ce38a60e08b01614c64565b9150614cf38a6101608b01614c4d565b90509295985092959890939650565b600060208284031215614d1457600080fd5b813561ffff81168114614c4657600080fd5b600080600080600060a08688031215614d3e57600080fd5b614d4786614b6a565b9450614d5560208701614b6a565b94979496505050506040830135926060810135926080909101359150565b600060208284031215614d8557600080fd5b614c4682614b6a565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614dc657614dc6614d8e565b60405290565b604051606081016001600160401b0381118282101715614dc657614dc6614d8e565b604051601f8201601f191681016001600160401b0381118282101715614e1657614e16614d8e565b604052919050565b60006001600160401b03821115614e3757614e37614d8e565b5060051b60200190565b600082601f830112614e5257600080fd5b81356001600160401b03811115614e6b57614e6b614d8e565b614e7e601f8201601f1916602001614dee565b818152846020838601011115614e9357600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614ec357600080fd5b82356001600160401b0380821115614eda57600080fd5b818501915085601f830112614eee57600080fd5b8135614f01614efc82614e1e565b614dee565b81815260059190911b83018401908481019088831115614f2057600080fd5b8585015b83811015614fb957803585811115614f3c5760008081fd5b86016080818c03601f1901811315614f545760008081fd5b614f5c614da4565b8983013588811115614f6e5760008081fd5b614f7c8e8c83870101614e41565b8252506040808401358b8301526060614f96818601614b6a565b82840152614fa5848601614b6a565b908301525085525050918601918601614f24565b5098975050505050505050565b6001600160a01b03811681146128b957600080fd5b600060208284031215614fed57600080fd5b8135614c4681614fc6565b600080600080600060a0868803121561501057600080fd5b8535945060208601356001600160401b0381111561502d57600080fd5b61503988828901614e41565b9450506040860135925061504f60608701614b6a565b9150608086013561505f81614fc6565b809150509295509295909350565b600080600080600080600080888a036101c081121561508b57600080fd5b893561509681614fc6565b985060208a01356150a681614fc6565b975060408a01356150b681614fc6565b965060608a01356150c681614fc6565b955060e0607f19820112156150da57600080fd5b5060808901935061016089013592506101808901356001600160401b038082111561510457600080fd5b6151108c838d01614e41565b93506101a08b013591508082111561512757600080fd5b506151348b828c01614e41565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c03121561516357600080fd5b61516c8a614b6a565b985061517a60208b01614b6a565b975061518860408b01614b6a565b965061519660608b01614b6a565b955060808a0135945060a08a013593506151b38b60c08c01614c4d565b92506151c38b6101008c01614c64565b91506151d38b6101808c01614c4d565b90509295985092959850929598565b6000602082840312156151f457600080fd5b5035919050565b80151581146128b957600080fd5b60006020828403121561521b57600080fd5b8135614c46816151fb565b60006020828403121561523857600080fd5b81356001600160401b0381111561524e57600080fd5b6149e984828501614e41565b6000602080838503121561526d57600080fd5b82356001600160401b038082111561528457600080fd5b818501915085601f83011261529857600080fd5b81356152a6614efc82614e1e565b81815260059190911b830184019084810190888311156152c557600080fd5b8585015b83811015614fb9578035858111156152e15760008081fd5b86016060818c03601f19018113156152f95760008081fd5b615301614dcc565b89830135888111156153135760008081fd5b6153218e8c83870101614e41565b8252506040808401358b830152615339838501614b6a565b90820152855250509186019186016152c9565b6000806000806080858703121561536257600080fd5b61536b85614b6a565b93506020850135925061538060408601614b6a565b915061538e60608601614b6a565b905092959194509250565b600080604083850312156153ac57600080fd5b82356001600160401b038111156153c257600080fd5b6153ce85828601614e41565b95602094909401359450505050565b600080604083850312156153f057600080fd5b8235915061540060208401614b6a565b90509250929050565b60208082526058908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2070656e60408201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560608201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608082015260a00190565b6020808252604c908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760608201526b040e6e8c2e8ca40c4c2e8c6d60a31b608082015260a00190565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786060820152621a5cdd60ea1b608082015260a00190565b6020808252605d908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060608201527f7468616e2063757272656e744c61737456657269666965644261746368000000608082015260a00190565b60208082526057908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2066696e60408201527f616c4e65774261746368206d75737420626520626967676572207468616e206360608201527f757272656e744c61737456657269666965644261746368000000000000000000608082015260a00190565b6000825161567f818460208701614bdb565b9190910192915050565b60006020828403121561569b57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826156c7576156c76156a2565b500690565b600181811c908216806156e057607f821691505b60208210810361570057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561578157615781615749565b01949350505050565b60208082526045908201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361588f5761588f615749565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b60006001820161591257615912615749565b5060010190565b60006001600160401b038381169083168181101561593957615939615749565b039392505050565b60008282101561595357615953615749565b500390565b600081600019048311821515161561597257615972615749565b500290565b601f82111561494a57600081815260208120601f850160051c8101602086101561599e5750805b601f850160051c820191505b8181101561406c578281556001016159aa565b81516001600160401b038111156159d6576159d6614d8e565b6159ea816159e484546156cc565b84615977565b602080601f831160018114615a1f5760008415615a075750858301515b600019600386901b1c1916600185901b17855561406c565b600085815260208120601f198616915b82811015615a4e57888601518255948401946001909101908401615a2f565b5085821015615a6c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615a8b57615a8b6156a2565b500490565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b60008219821115615b0c57615b0c615749565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b0383166020820152606060408201819052600090615bf590830184614c07565b95945050505050565b60006001600160401b0380841680615c1857615c186156a2565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615c5c57848483379084018281529284019290600101615c3c565b5050828760c0870137610100850181815286935091505b6001811015615c92578251825260209283019290910190600101615c73565b50505095945050505050565b600060208284031215615cb057600080fd5b8151614c46816151fb565b600181815b80851115615cf6578160001904821115615cdc57615cdc615749565b80851615615ce957918102915b93841c9390800290615cc0565b509250929050565b600082615d0d57506001614c5e565b81615d1a57506000614c5e565b8160018114615d305760028114615d3a57615d56565b6001915050614c5e565b60ff841115615d4b57615d4b615749565b50506001821b614c5e565b5060208310610133831016604e8410600b8410161715615d79575081810a614c5e565b615d838383615cbb565b8060001904821115615d9757615d97615749565b029392505050565b6000614c468383615cfe56fe506f6c79676f6e5a4b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a4b45564d3a3a70726f76654e6f6e44657465726d696e6973a26469706673582212201e5160e5b35ba013638c7e982194345ea29364dacf96b8b35832f82a7d7d74b864736f6c634300080f0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/compiled-contracts/ProofOfEfficiency.json b/compiled-contracts/ProofOfEfficiency.json index d9e9f913b..4ed27d15d 100644 --- a/compiled-contracts/ProofOfEfficiency.json +++ b/compiled-contracts/ProofOfEfficiency.json @@ -1,7 +1,7 @@ { "_format": "hh-sol-artifact-1", - "contractName": "ProofOfEfficiency", - "sourceName": "contracts/ProofOfEfficiency.sol", + "contractName": "PolygonZKEVM", + "sourceName": "contracts/PolygonZKEVM.sol", "abi": [ { "anonymous": false, @@ -710,7 +710,7 @@ "type": "uint64" } ], - "internalType": "struct ProofOfEfficiency.InitializePackedParameters", + "internalType": "struct PolygonZKEVM.InitializePackedParameters", "name": "initializePackedParameters", "type": "tuple" }, @@ -1108,7 +1108,7 @@ "type": "uint64" } ], - "internalType": "struct ProofOfEfficiency.BatchData[]", + "internalType": "struct PolygonZKEVM.BatchData[]", "name": "batches", "type": "tuple[]" } @@ -1138,7 +1138,7 @@ "type": "uint64" } ], - "internalType": "struct ProofOfEfficiency.ForcedBatchData[]", + "internalType": "struct PolygonZKEVM.ForcedBatchData[]", "name": "batches", "type": "tuple[]" } diff --git a/compiled-contracts/ProofOfEfficiencyMock.json b/compiled-contracts/ProofOfEfficiencyMock.json index 89d098453..899f3c805 100644 --- a/compiled-contracts/ProofOfEfficiencyMock.json +++ b/compiled-contracts/ProofOfEfficiencyMock.json @@ -1,7 +1,7 @@ { "_format": "hh-sol-artifact-1", - "contractName": "ProofOfEfficiencyMock", - "sourceName": "contracts/mocks/ProofOfEfficiencyMock.sol", + "contractName": "PolygonZKEVMMock", + "sourceName": "contracts/mocks/PolygonZKEVMMock.sol", "abi": [ { "anonymous": false, @@ -788,7 +788,7 @@ "type": "uint64" } ], - "internalType": "struct ProofOfEfficiency.InitializePackedParameters", + "internalType": "struct PolygonZKEVM.InitializePackedParameters", "name": "initializePackedParameters", "type": "tuple" }, @@ -1186,7 +1186,7 @@ "type": "uint64" } ], - "internalType": "struct ProofOfEfficiency.BatchData[]", + "internalType": "struct PolygonZKEVM.BatchData[]", "name": "batches", "type": "tuple[]" } @@ -1216,7 +1216,7 @@ "type": "uint64" } ], - "internalType": "struct ProofOfEfficiency.ForcedBatchData[]", + "internalType": "struct PolygonZKEVM.ForcedBatchData[]", "name": "batches", "type": "tuple[]" } diff --git a/contracts/Bridge.sol b/contracts/Bridge.sol index 313e396d5..68a9f54bc 100644 --- a/contracts/Bridge.sol +++ b/contracts/Bridge.sol @@ -54,7 +54,7 @@ contract Bridge is DepositContract, EmergencyManager, IBridge { // Global Exit Root address IGlobalExitRootManager public globalExitRootManager; - // Proof of Efficiency address + // Polygon ZK-EVM address address public poeAddress; /** @@ -71,10 +71,10 @@ contract Bridge is DepositContract, EmergencyManager, IBridge { poeAddress = _poeAddress; } - modifier onlyProofOfEfficiency() { + modifier onlyPolygonZKEVM() { require( poeAddress == msg.sender, - "ProofOfEfficiency::onlyProofOfEfficiency: only Proof of Efficiency contract" + "PolygonZKEVM::onlyPolygonZKEVM: only Polygon ZK-EVM contractt" ); _; } @@ -477,17 +477,17 @@ contract Bridge is DepositContract, EmergencyManager, IBridge { /** * @notice Function to activate the emergency state - " Only can be called by the proof of efficiency in extreme situations + " Only can be called by the Polygon ZK-EVM in extreme situations */ - function activateEmergencyState() external onlyProofOfEfficiency { + function activateEmergencyState() external onlyPolygonZKEVM { _activateEmergencyState(); } /** * @notice Function to deactivate the emergency state - " Only can be called by the proof of efficiency + " Only can be called by the Polygon ZK-EVM */ - function deactivateEmergencyState() external onlyProofOfEfficiency { + function deactivateEmergencyState() external onlyPolygonZKEVM { _deactivateEmergencyState(); } diff --git a/contracts/ProofOfEfficiency.sol b/contracts/PolygonZKEVM.sol similarity index 92% rename from contracts/ProofOfEfficiency.sol rename to contracts/PolygonZKEVM.sol index f22445c71..23e12db7f 100644 --- a/contracts/ProofOfEfficiency.sol +++ b/contracts/PolygonZKEVM.sol @@ -18,11 +18,7 @@ import "./lib/EmergencyManager.sol"; * The aggregators will be able to verify the sequenced state with zkProofs and therefore make available the withdrawals from L2 network. * To enter and exit of the L2 network will be used a Bridge smart contract that will be deployed in both networks. */ -contract ProofOfEfficiency is - Initializable, - OwnableUpgradeable, - EmergencyManager -{ +contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { using SafeERC20Upgradeable for IERC20Upgradeable; /** @@ -372,17 +368,14 @@ contract ProofOfEfficiency is } modifier onlyAdmin() { - require( - admin == msg.sender, - "ProofOfEfficiency::onlyAdmin: only admin" - ); + require(admin == msg.sender, "PolygonZKEVM::onlyAdmin: only admin"); _; } modifier onlyTrustedSequencer() { require( trustedSequencer == msg.sender, - "ProofOfEfficiency::onlyTrustedSequencer: only trusted sequencer" + "PolygonZKEVM::onlyTrustedSequencer: only trusted sequencer" ); _; } @@ -390,7 +383,7 @@ contract ProofOfEfficiency is modifier onlyTrustedAggregator() { require( trustedAggregator == msg.sender, - "ProofOfEfficiency::onlyTrustedAggregator: only trusted Aggregator" + "PolygonZKEVM::onlyTrustedAggregator: only trusted Aggregator" ); _; } @@ -398,7 +391,7 @@ contract ProofOfEfficiency is modifier isForceBatchAllowed() { require( forceBatchAllowed == true, - "ProofOfEfficiency::isForceBatchAllowed: only if force batch is available" + "PolygonZKEVM::isForceBatchAllowed: only if force batch is available" ); _; } @@ -417,12 +410,12 @@ contract ProofOfEfficiency is uint256 batchesNum = batches.length; require( batchesNum > 0, - "ProofOfEfficiency::sequenceBatches: At least must sequence 1 batch" + "PolygonZKEVM::sequenceBatches: At least must sequence 1 batch" ); require( batchesNum < MAX_VERIFY_BATCHES, - "ProofOfEfficiency::sequenceBatches: Cannot sequence that many batches" + "PolygonZKEVM::sequenceBatches: Cannot sequence that many batches" ); // Store storage variables in memory, to save gas, because will be overrided multiple times @@ -452,13 +445,13 @@ contract ProofOfEfficiency is require( hashedForcedBatchData == forcedBatches[currentLastForceBatchSequenced], - "ProofOfEfficiency::sequenceBatches: Forced batches data must match" + "PolygonZKEVM::sequenceBatches: Forced batches data must match" ); // Check timestamp is bigger than min timestamp require( currentBatch.timestamp >= currentBatch.minForcedTimestamp, - "ProofOfEfficiency::sequenceBatches: Forced batches timestamp must be bigger or equal than min" + "PolygonZKEVM::sequenceBatches: Forced batches timestamp must be bigger or equal than min" ); } else { // Check global exit root exist, and proper batch length, this checks are already done in the forceBatches call @@ -468,7 +461,7 @@ contract ProofOfEfficiency is currentBatch.globalExitRoot ) != 0, - "ProofOfEfficiency::sequenceBatches: Global exit root must exist" + "PolygonZKEVM::sequenceBatches: Global exit root must exist" ); require( @@ -482,7 +475,7 @@ contract ProofOfEfficiency is require( currentBatch.timestamp >= currentTimestamp && currentBatch.timestamp <= block.timestamp, - "ProofOfEfficiency::sequenceBatches: Timestamp must be inside range" + "PolygonZKEVM::sequenceBatches: Timestamp must be inside range" ); // Calculate next accumulated input hash @@ -506,7 +499,7 @@ contract ProofOfEfficiency is // Sanity check, should be unreachable require( currentLastForceBatchSequenced <= lastForceBatch, - "ProofOfEfficiency::sequenceBatches: Force batches overflow" + "PolygonZKEVM::sequenceBatches: Force batches overflow" ); uint256 nonForcedBatchesSequenced = batchesNum - @@ -563,12 +556,12 @@ contract ProofOfEfficiency is sequencedBatches[finalNewBatch].sequencedTimestamp + trustedAggregatorTimeout <= block.timestamp, - "ProofOfEfficiency::verifyBatches: trusted aggregator timeout not expired" + "PolygonZKEVM::verifyBatches: trusted aggregator timeout not expired" ); require( finalNewBatch - initNumBatch < MAX_VERIFY_BATCHES, - "ProofOfEfficiency::verifyBatches: cannot verify that many batches" + "PolygonZKEVM::verifyBatches: cannot verify that many batches" ); _verifyBatches( @@ -692,7 +685,7 @@ contract ProofOfEfficiency is // Already consolidated pending states can be used aswell require( pendingStateNum <= lastPendingState, - "ProofOfEfficiency::verifyBatches: pendingStateNum must be less or equal than lastPendingState" + "PolygonZKEVM::verifyBatches: pendingStateNum must be less or equal than lastPendingState" ); // Check choosen pending state @@ -706,27 +699,27 @@ contract ProofOfEfficiency is // Check initNumBatch matches the pending state require( initNumBatch == currentPendingState.lastVerifiedBatch, - "ProofOfEfficiency::verifyBatches: initNumBatch must match the pending state batch" + "PolygonZKEVM::verifyBatches: initNumBatch must match the pending state batch" ); } else { // Use consolidated state oldStateRoot = batchNumToStateRoot[initNumBatch]; require( oldStateRoot != bytes32(0), - "ProofOfEfficiency::verifyBatches: initNumBatch state root does not exist" + "PolygonZKEVM::verifyBatches: initNumBatch state root does not exist" ); // Check initNumBatch is inside the range require( initNumBatch <= currentLastVerifiedBatch, - "ProofOfEfficiency::verifyBatches: initNumBatch must be less or equal than currentLastVerifiedBatch" + "PolygonZKEVM::verifyBatches: initNumBatch must be less or equal than currentLastVerifiedBatch" ); } // Check final batch require( finalNewBatch > currentLastVerifiedBatch, - "ProofOfEfficiency::verifyBatches: finalNewBatch must be bigger than currentLastVerifiedBatch" + "PolygonZKEVM::verifyBatches: finalNewBatch must be bigger than currentLastVerifiedBatch" ); // Get snark bytes @@ -744,7 +737,7 @@ contract ProofOfEfficiency is // Verify proof require( rollupVerifier.verifyProof(proofA, proofB, proofC, [inputSnark]), - "ProofOfEfficiency::verifyBatches: INVALID_PROOF" + "PolygonZKEVM::verifyBatches: INVALID_PROOF" ); // Get MATIC reward @@ -794,7 +787,7 @@ contract ProofOfEfficiency is pendingStateNum != 0 && pendingStateNum > lastPendingStateConsolidated && pendingStateNum <= lastPendingState, - "ProofOfEfficiency::consolidatePendingState: pendingStateNum must invalid" + "PolygonZKEVM::consolidatePendingState: pendingStateNum must invalid" ); // Check if pending state can be consolidated @@ -802,7 +795,7 @@ contract ProofOfEfficiency is if (msg.sender != trustedAggregator) { require( isPendingStateConsolidable(pendingStateNum), - "ProofOfEfficiency::consolidatePendingState: pending state is not ready to be consolidated" + "PolygonZKEVM::consolidatePendingState: pending state is not ready to be consolidated" ); } @@ -923,12 +916,12 @@ contract ProofOfEfficiency is require( maticFee <= maticAmount, - "ProofOfEfficiency::forceBatch: not enough matic" + "PolygonZKEVM::forceBatch: not enough matic" ); require( transactions.length < MAX_TRANSACTIONS_BYTE_LENGTH, - "ProofOfEfficiency::forceBatch: Transactions bytes overflow" + "PolygonZKEVM::forceBatch: Transactions bytes overflow" ); matic.safeTransferFrom(msg.sender, address(this), maticFee); @@ -973,17 +966,17 @@ contract ProofOfEfficiency is require( batchesNum > 0, - "ProofOfEfficiency::sequenceForceBatch: Must force at least 1 batch" + "PolygonZKEVM::sequenceForceBatch: Must force at least 1 batch" ); require( batchesNum < MAX_VERIFY_BATCHES, - "ProofOfEfficiency::sequenceForceBatches: cannot verify that many batches" + "PolygonZKEVM::sequenceForceBatches: cannot verify that many batches" ); require( lastForceBatchSequenced + batchesNum <= lastForceBatch, - "ProofOfEfficiency::sequenceForceBatch: Force batch invalid" + "PolygonZKEVM::sequenceForceBatch: Force batch invalid" ); // Store storage variables in memory, to save gas, because will be overrided multiple times @@ -1010,7 +1003,7 @@ contract ProofOfEfficiency is require( hashedForcedBatchData == forcedBatches[currentLastForceBatchSequenced], - "ProofOfEfficiency::sequenceForceBatches: Forced batches data must match" + "PolygonZKEVM::sequenceForceBatches: Forced batches data must match" ); if (i == (batchesNum - 1)) { @@ -1018,7 +1011,7 @@ contract ProofOfEfficiency is require( currentBatch.minForcedTimestamp + FORCE_BATCH_TIMEOUT <= block.timestamp, - "ProofOfEfficiency::sequenceForceBatch: Forced batch is not in timeout period" + "PolygonZKEVM::sequenceForceBatch: Forced batch is not in timeout period" ); } // Calculate next acc input hash @@ -1109,12 +1102,12 @@ contract ProofOfEfficiency is ) public onlyAdmin { require( newTrustedAggregatorTimeout <= HALT_AGGREGATION_TIMEOUT, - "ProofOfEfficiency::setPendingStateTimeout: exceed halt aggregation timeout" + "PolygonZKEVM::setPendingStateTimeout: exceed halt aggregation timeout" ); if (!isEmergencyState) { require( newTrustedAggregatorTimeout < trustedAggregatorTimeout, - "ProofOfEfficiency::setTrustedAggregatorTimeout: new timeout must be lower" + "PolygonZKEVM::setTrustedAggregatorTimeout: new timeout must be lower" ); } @@ -1132,12 +1125,12 @@ contract ProofOfEfficiency is ) public onlyAdmin { require( newPendingStateTimeout <= HALT_AGGREGATION_TIMEOUT, - "ProofOfEfficiency::setPendingStateTimeout: exceed halt aggregation timeout" + "PolygonZKEVM::setPendingStateTimeout: exceed halt aggregation timeout" ); if (!isEmergencyState) { require( newPendingStateTimeout < pendingStateTimeout, - "ProofOfEfficiency::setPendingStateTimeout: new timeout must be lower" + "PolygonZKEVM::setPendingStateTimeout: new timeout must be lower" ); } @@ -1154,7 +1147,7 @@ contract ProofOfEfficiency is ) public onlyAdmin { require( newMultiplierBatchFee > 1000 && newMultiplierBatchFee < 1024, - "ProofOfEfficiency::setMultiplierBatchFee: newMultiplierBatchFee incorrect range" + "PolygonZKEVM::setMultiplierBatchFee: newMultiplierBatchFee incorrect range" ); multiplierBatchFee = newMultiplierBatchFee; @@ -1315,7 +1308,7 @@ contract ProofOfEfficiency is // Already consolidated pending states can be used aswell require( initPendingStateNum <= lastPendingState, - "ProofOfEfficiency::proveNonDeterministicPendingState: pendingStateNum must be less or equal than lastPendingState" + "PolygonZKEVM::proveNonDeterministicPendingState: pendingStateNum must be less or equal than lastPendingState" ); // Check choosen pending state @@ -1329,20 +1322,20 @@ contract ProofOfEfficiency is // Check initNumBatch matches the init pending state require( initNumBatch == initPendingState.lastVerifiedBatch, - "ProofOfEfficiency::proveNonDeterministicPendingState: initNumBatch must match the pending state batch" + "PolygonZKEVM::proveNonDeterministicPendingState: initNumBatch must match the pending state batch" ); } else { // Use consolidated state oldStateRoot = batchNumToStateRoot[initNumBatch]; require( oldStateRoot != bytes32(0), - "ProofOfEfficiency::proveNonDeterministicPendingState: initNumBatch state root does not exist" + "PolygonZKEVM::proveNonDeterministicPendingState: initNumBatch state root does not exist" ); // Check initNumBatch is inside the range require( initNumBatch <= lastVerifiedBatch, - "ProofOfEfficiency::proveNonDeterministicPendingState: initNumBatch must be less or equal than currentLastVerifiedBatch" + "PolygonZKEVM::proveNonDeterministicPendingState: initNumBatch must be less or equal than currentLastVerifiedBatch" ); } @@ -1354,14 +1347,14 @@ contract ProofOfEfficiency is finalPendingStateNum <= lastPendingState && finalPendingStateNum > initPendingStateNum && finalPendingStateNum > lastPendingStateConsolidated, - "ProofOfEfficiency::proveNonDeterministicPendingState: finalPendingStateNum incorrect" + "PolygonZKEVM::proveNonDeterministicPendingState: finalPendingStateNum incorrect" ); // Check final num batch require( finalNewBatch == pendingStateTransitions[finalPendingStateNum].lastVerifiedBatch, - "ProofOfEfficiency::proveNonDeterministicPendingState: finalNewBatch must be equal than currentLastVerifiedBatch" + "PolygonZKEVM::proveNonDeterministicPendingState: finalNewBatch must be equal than currentLastVerifiedBatch" ); // Get snark bytes @@ -1379,13 +1372,13 @@ contract ProofOfEfficiency is // Verify proof require( rollupVerifier.verifyProof(proofA, proofB, proofC, [inputSnark]), - "ProofOfEfficiency::proveNonDeterministicPendingState: INVALID_PROOF" + "PolygonZKEVM::proveNonDeterministicPendingState: INVALID_PROOF" ); require( pendingStateTransitions[finalPendingStateNum].stateRoot != newStateRoot, - "ProofOfEfficiency::proveNonDeterministicPendingState: stored root must be different than new state root" + "PolygonZKEVM::proveNonDeterministicPendingState: stored root must be different than new state root" ); } @@ -1409,14 +1402,14 @@ contract ProofOfEfficiency is // Check that the batch has not been verified require( sequencedBatchNum > lastVerifiedBatchToCompare, - "ProofOfEfficiency::activateEmergencyState: Batch already verified" + "PolygonZKEVM::activateEmergencyState: Batch already verified" ); // Check that the batch has been sequenced and this was the end of a sequence require( sequencedBatchNum <= lastBatchSequenced && sequencedBatches[sequencedBatchNum].sequencedTimestamp != 0, - "ProofOfEfficiency::activateEmergencyState: Batch not sequenced or not end of sequence" + "PolygonZKEVM::activateEmergencyState: Batch not sequenced or not end of sequence" ); // Check that has been passed HALT_AGGREGATION_TIMEOUT since it was sequenced @@ -1424,7 +1417,7 @@ contract ProofOfEfficiency is sequencedBatches[sequencedBatchNum].sequencedTimestamp + HALT_AGGREGATION_TIMEOUT <= block.timestamp, - "ProofOfEfficiency::activateEmergencyState: Aggregation halt timeout is not expired" + "PolygonZKEVM::activateEmergencyState: Aggregation halt timeout is not expired" ); } _activateEmergencyState(); @@ -1521,12 +1514,12 @@ contract ProofOfEfficiency is require( initNumBatch == 0 || oldAccInputHash != bytes32(0), - "ProofOfEfficiency::getInputSnarkBytes: oldAccInputHash does not exist" + "PolygonZKEVM::getInputSnarkBytes: oldAccInputHash does not exist" ); require( newAccInputHash != bytes32(0), - "ProofOfEfficiency::getInputSnarkBytes: newAccInputHash does not exist" + "PolygonZKEVM::getInputSnarkBytes: newAccInputHash does not exist" ); return diff --git a/contracts/Timelock.sol b/contracts/Timelock.sol index 1a65fa4e8..173bdbdd6 100644 --- a/contracts/Timelock.sol +++ b/contracts/Timelock.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.15; import "@openzeppelin/contracts/governance/TimelockController.sol"; -import "./ProofOfEfficiency.sol"; +import "./PolygonZKEVM.sol"; /** * @dev Contract module which acts as a timelocked controller. @@ -10,8 +10,8 @@ import "./ProofOfEfficiency.sol"; * If emergency mode of the zkevm contract system is active, this timelock have no delay. */ contract Timelock is TimelockController { - // Proof of efficiency address. Will be used to check if it's on emergency state. - ProofOfEfficiency public proofOfEfficiency; + // Polygon ZK-EVM address. Will be used to check if it's on emergency state. + PolygonZKEVM public polygonZKEVM; /** * @notice Constructor of timelock @@ -19,26 +19,26 @@ contract Timelock is TimelockController { * @param proposers accounts to be granted proposer and canceller roles * @param executors accounts to be granted executor role * @param admin optional account to be granted admin role; disable with zero address - * @param _proofOfEfficiency PoE address + * @param _polygonZKEVM PoE address **/ constructor( uint256 minDelay, address[] memory proposers, address[] memory executors, address admin, - ProofOfEfficiency _proofOfEfficiency + PolygonZKEVM _polygonZKEVM ) TimelockController(minDelay, proposers, executors, admin) { - proofOfEfficiency = _proofOfEfficiency; + polygonZKEVM = _polygonZKEVM; } /** * @dev Returns the minimum delay for an operation to become valid. * * This value can be changed by executing an operation that calls `updateDelay`. - * If proof of efficiency is on emergency state the minDelay will be 0 instead. + * If Polygon ZK-EVM is on emergency state the minDelay will be 0 instead. */ function getMinDelay() public view override returns (uint256 duration) { - if (proofOfEfficiency.isEmergencyState()) { + if (polygonZKEVM.isEmergencyState()) { return 0; } else { return super.getMinDelay(); diff --git a/contracts/mocks/ProofOfEfficiencyMock.sol b/contracts/mocks/PolygonZKEVMMock.sol similarity index 87% rename from contracts/mocks/ProofOfEfficiencyMock.sol rename to contracts/mocks/PolygonZKEVMMock.sol index 2370ec92e..07d024def 100644 --- a/contracts/mocks/ProofOfEfficiencyMock.sol +++ b/contracts/mocks/PolygonZKEVMMock.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: AGPL-3.0 pragma solidity 0.8.15; -import "../ProofOfEfficiency.sol"; +import "../PolygonZKEVM.sol"; /** * Contract responsible for managing the state and the updates of the L2 network @@ -9,7 +9,7 @@ import "../ProofOfEfficiency.sol"; * The aggregators are forced to process and validate the sequencers transactions in the same order by using a verifier. * To enter and exit of the L2 network will be used a Bridge smart contract */ -contract ProofOfEfficiencyMock is ProofOfEfficiency { +contract PolygonZKEVMMock is PolygonZKEVM { /** * @notice calculate accumulate input hash from parameters * @param currentAccInputHash Accumulate input hash @@ -61,7 +61,7 @@ contract ProofOfEfficiencyMock is ProofOfEfficiency { // Already consolidated pending states can be used aswell require( pendingStateNum <= lastPendingState, - "ProofOfEfficiency::verifyBatches: pendingStateNum must be less or equal than lastPendingState" + "PolygonZKEVM::verifyBatches: pendingStateNum must be less or equal than lastPendingState" ); // Check choosen pending state @@ -75,27 +75,27 @@ contract ProofOfEfficiencyMock is ProofOfEfficiency { // Check initNumBatch matches the pending state require( initNumBatch == currentPendingState.lastVerifiedBatch, - "ProofOfEfficiency::verifyBatches: initNumBatch must match the pending state batch" + "PolygonZKEVM::verifyBatches: initNumBatch must match the pending state batch" ); } else { // Use consolidated state oldStateRoot = batchNumToStateRoot[initNumBatch]; require( oldStateRoot != bytes32(0), - "ProofOfEfficiency::verifyBatches: initNumBatch state root does not exist" + "PolygonZKEVM::verifyBatches: initNumBatch state root does not exist" ); // Check initNumBatch is inside the range require( initNumBatch <= currentLastVerifiedBatch, - "ProofOfEfficiency::verifyBatches: initNumBatch must be less or equal than currentLastVerifiedBatch" + "PolygonZKEVM::verifyBatches: initNumBatch must be less or equal than currentLastVerifiedBatch" ); } // Check final batch require( finalNewBatch > currentLastVerifiedBatch, - "ProofOfEfficiency::verifyBatches: finalNewBatch must be bigger than currentLastVerifiedBatch" + "PolygonZKEVM::verifyBatches: finalNewBatch must be bigger than currentLastVerifiedBatch" ); // Get snark bytes @@ -202,7 +202,7 @@ contract ProofOfEfficiencyMock is ProofOfEfficiency { // Already consolidated pending states can be used aswell require( pendingStateNum <= lastPendingState, - "ProofOfEfficiency::verifyBatches: pendingStateNum must be less or equal than lastPendingState" + "PolygonZKEVM::verifyBatches: pendingStateNum must be less or equal than lastPendingState" ); // Check choosen pending state @@ -216,27 +216,27 @@ contract ProofOfEfficiencyMock is ProofOfEfficiency { // Check initNumBatch matches the pending state require( initNumBatch == currentPendingState.lastVerifiedBatch, - "ProofOfEfficiency::verifyBatches: initNumBatch must match the pending state batch" + "PolygonZKEVM::verifyBatches: initNumBatch must match the pending state batch" ); } else { // Use consolidated state oldStateRoot = batchNumToStateRoot[initNumBatch]; require( oldStateRoot != bytes32(0), - "ProofOfEfficiency::verifyBatches: initNumBatch state root does not exist" + "PolygonZKEVM::verifyBatches: initNumBatch state root does not exist" ); // Check initNumBatch is inside the range require( initNumBatch <= currentLastVerifiedBatch, - "ProofOfEfficiency::verifyBatches: initNumBatch must be less or equal than currentLastVerifiedBatch" + "PolygonZKEVM::verifyBatches: initNumBatch must be less or equal than currentLastVerifiedBatch" ); } // Check final batch require( finalNewBatch > currentLastVerifiedBatch, - "ProofOfEfficiency::verifyBatches: finalNewBatch must be bigger than currentLastVerifiedBatch" + "PolygonZKEVM::verifyBatches: finalNewBatch must be bigger than currentLastVerifiedBatch" ); // Get snark bytes @@ -254,7 +254,7 @@ contract ProofOfEfficiencyMock is ProofOfEfficiency { // // Verify proof // require( // rollupVerifier.verifyProof(proofA, proofB, proofC, [inputSnark]), - // "ProofOfEfficiency::verifyBatches: INVALID_PROOF" + // "PolygonZKEVM::verifyBatches: INVALID_PROOF" // ); // // Get MATIC reward diff --git a/deployment/deployPoE_v2-0.js b/deployment/deployPoE_v2-0.js index 43cfbc293..98a00256b 100644 --- a/deployment/deployPoE_v2-0.js +++ b/deployment/deployPoE_v2-0.js @@ -148,30 +148,30 @@ async function main() { console.log('Bridge deployed to:', bridgeContract.address); // deploy PoE - const ProofOfEfficiencyFactory = await ethers.getContractFactory('ProofOfEfficiencyMock', deployer); - let proofOfEfficiencyContract; + const PolygonZKEVMFactory = await ethers.getContractFactory('PolygonZKEVMMock', deployer); + let polygonZKEVMContract; for (let i = 0; i < attemptsDeployProxy; i++) { try { - proofOfEfficiencyContract = await upgrades.deployProxy(ProofOfEfficiencyFactory, [], { initializer: false }); + polygonZKEVMContract = await upgrades.deployProxy(PolygonZKEVMFactory, [], { initializer: false }); break; } catch (error) { console.log(`attempt ${i}`); - console.log('upgrades.deployProxy of proofOfEfficiencyContract ', error.error.reason); + console.log('upgrades.deployProxy of polygonZKEVMContract ', error.error.reason); } // reach limits of attempts if (i + 1 === attemptsDeployProxy) { - throw new Error('ProofOfEfficiency contract has not been deployed'); + throw new Error('PolygonZKEVM contract has not been deployed'); } } console.log('#######################\n'); - console.log('Proof of Efficiency deployed to:', proofOfEfficiencyContract.address); + console.log('Polygon ZK-EVM deployed to:', polygonZKEVMContract.address); /* * Initialize globalExitRootManager */ - await globalExitRootManager.initialize(proofOfEfficiencyContract.address, bridgeContract.address); + await globalExitRootManager.initialize(polygonZKEVMContract.address, bridgeContract.address); /* * Initialize Bridge @@ -179,7 +179,7 @@ async function main() { await (await bridgeContract.initialize( networkIDMainnet, globalExitRootManager.address, - proofOfEfficiencyContract.address, + polygonZKEVMContract.address, )).wait(); console.log('\n#######################'); @@ -191,13 +191,13 @@ async function main() { console.log('owner:', await bridgeContract.owner()); /* - * Initialize proof of efficiency + * Initialize Polygon ZK-EVM */ // Check genesis file const genesisRootHex = genesis.root; console.log('\n#######################'); - console.log('##### Deployment Proof of Efficiency #####'); + console.log('##### Deployment Polygon ZK-EVM #####'); console.log('#######################'); console.log('deployer:', deployer.address); console.log('globalExitRootManagerAddress:', globalExitRootManager.address); @@ -217,7 +217,7 @@ async function main() { console.log('trustedSequencerURL:', trustedSequencerURL); console.log('networkName:', networkName); - await (await proofOfEfficiencyContract.initialize( + await (await polygonZKEVMContract.initialize( globalExitRootManager.address, maticTokenContract.address, verifierContract.address, @@ -236,28 +236,28 @@ async function main() { networkName, )).wait(); - const deploymentBlockNumber = (await proofOfEfficiencyContract.deployTransaction.wait()).blockNumber; + const deploymentBlockNumber = (await polygonZKEVMContract.deployTransaction.wait()).blockNumber; console.log('\n#######################'); console.log('##### Checks PoE #####'); console.log('#######################'); - console.log('globalExitRootManagerAddress:', await proofOfEfficiencyContract.globalExitRootManager()); - console.log('maticTokenAddress:', await proofOfEfficiencyContract.matic()); - console.log('verifierAddress:', await proofOfEfficiencyContract.rollupVerifier()); - console.log('bridgeContract:', await proofOfEfficiencyContract.bridgeAddress()); - - console.log('admin:', await proofOfEfficiencyContract.admin()); - console.log('chainID:', await proofOfEfficiencyContract.chainID()); - console.log('trustedSequencer:', await proofOfEfficiencyContract.trustedSequencer()); - console.log('pendingStateTimeout:', await proofOfEfficiencyContract.pendingStateTimeout()); - console.log('forceBatchAllowed:', await proofOfEfficiencyContract.forceBatchAllowed()); - console.log('trustedAggregator:', await proofOfEfficiencyContract.trustedAggregator()); - console.log('trustedAggregatorTimeout:', await proofOfEfficiencyContract.trustedAggregatorTimeout()); - - console.log('genesiRoot:', await proofOfEfficiencyContract.batchNumToStateRoot(0)); - console.log('trustedSequencerURL:', await proofOfEfficiencyContract.trustedSequencerURL()); - console.log('networkName:', await proofOfEfficiencyContract.networkName()); - console.log('owner:', await proofOfEfficiencyContract.owner()); + console.log('globalExitRootManagerAddress:', await polygonZKEVMContract.globalExitRootManager()); + console.log('maticTokenAddress:', await polygonZKEVMContract.matic()); + console.log('verifierAddress:', await polygonZKEVMContract.rollupVerifier()); + console.log('bridgeContract:', await polygonZKEVMContract.bridgeAddress()); + + console.log('admin:', await polygonZKEVMContract.admin()); + console.log('chainID:', await polygonZKEVMContract.chainID()); + console.log('trustedSequencer:', await polygonZKEVMContract.trustedSequencer()); + console.log('pendingStateTimeout:', await polygonZKEVMContract.pendingStateTimeout()); + console.log('forceBatchAllowed:', await polygonZKEVMContract.forceBatchAllowed()); + console.log('trustedAggregator:', await polygonZKEVMContract.trustedAggregator()); + console.log('trustedAggregatorTimeout:', await polygonZKEVMContract.trustedAggregatorTimeout()); + + console.log('genesiRoot:', await polygonZKEVMContract.batchNumToStateRoot(0)); + console.log('trustedSequencerURL:', await polygonZKEVMContract.trustedSequencerURL()); + console.log('networkName:', await polygonZKEVMContract.networkName()); + console.log('owner:', await polygonZKEVMContract.owner()); // fund sequencer account with tokens and ether if it have less than 0.1 ether. const balanceEther = await ethers.provider.getBalance(trustedSequencer); @@ -285,10 +285,10 @@ async function main() { // approve tokens if (deployParameters.trustedSequencerPvtKey) { const trustedSequencerWallet = new ethers.Wallet(deployParameters.trustedSequencerPvtKey, currentProvider); - await maticTokenContract.connect(trustedSequencerWallet).approve(proofOfEfficiencyContract.address, ethers.constants.MaxUint256); + await maticTokenContract.connect(trustedSequencerWallet).approve(polygonZKEVMContract.address, ethers.constants.MaxUint256); } const outputJson = { - proofOfEfficiencyAddress: proofOfEfficiencyContract.address, + polygonZKEVMAddress: polygonZKEVMContract.address, bridgeAddress: bridgeContract.address, globalExitRootManagerAddress: globalExitRootManager.address, maticTokenAddress: maticTokenContract.address, diff --git a/deployment/upgradePoE.js b/deployment/upgradePoE.js index 2e2afb1c1..aae6ab0d2 100644 --- a/deployment/upgradePoE.js +++ b/deployment/upgradePoE.js @@ -7,11 +7,11 @@ async function main() { // compìle contracts await hre.run('compile'); - const ProofOfEfficiencyFactory = await ethers.getContractFactory('ProofOfEfficiencyMock'); - const ProofOfEfficiencyProxyAddress = '0xfefefefefefefefefefefefee'; + const polygonZKEVMFactory = await ethers.getContractFactory('PolygonZKEVMMock'); + const polygonZKEVMProxyAddress = '0xfefefefefefefefefefefefee'; // Upgrade - const tx = await upgrades.upgradeProxy(ProofOfEfficiencyProxyAddress, ProofOfEfficiencyFactory); + const tx = await upgrades.upgradeProxy(polygonZKEVMProxyAddress, polygonZKEVMFactory); console.log(tx.deployTransaction); console.log('upgrade succesfull'); diff --git a/deployment/verifyPoE_v2-0.js b/deployment/verifyPoE_v2-0.js index 325bbb5c2..5ac0c09bf 100644 --- a/deployment/verifyPoE_v2-0.js +++ b/deployment/verifyPoE_v2-0.js @@ -50,7 +50,7 @@ async function main() { // verify proxies - const contractNames = ['proofOfEfficiencyAddress', 'bridgeAddress', 'globalExitRootManagerAddress']; + const contractNames = ['polygonZKEVMAddress', 'bridgeAddress', 'globalExitRootManagerAddress']; for (let i = 0; i < contractNames.length; i++) { try { diff --git a/docs/Bridge.md b/docs/Bridge.md index 5f1167a9b..dc4919403 100644 --- a/docs/Bridge.md +++ b/docs/Bridge.md @@ -160,7 +160,7 @@ Returns the address of a wrapper using the token information if already exist ) external ``` Function to activate the emergency state - " Only can be called by the proof of efficiency in extreme situations + " Only can be called by the Polygon ZK-EVM in extreme situations @@ -170,7 +170,7 @@ Function to activate the emergency state ) external ``` Function to deactivate the emergency state - " Only can be called by the proof of efficiency + " Only can be called by the Polygon ZK-EVM diff --git a/docs/PolygonZKEVM.md b/docs/PolygonZKEVM.md new file mode 100644 index 000000000..88419d2e8 --- /dev/null +++ b/docs/PolygonZKEVM.md @@ -0,0 +1,642 @@ +Contract responsible for managing the states and the updates of L2 network. +There will be a trusted sequencer, which is able to send transactions. +Any user can force some transaction and the sequencer will have a timeout to add them in the queue. +The sequenced state is deterministic and can be precalculated before it's actually verified by a zkProof. +The aggregators will be able to verify the sequenced state with zkProofs and therefore make available the withdrawals from L2 network. +To enter and exit of the L2 network will be used a Bridge smart contract that will be deployed in both networks. + + +## Functions +### initialize +```solidity + function initialize( + contract IGlobalExitRootManager _globalExitRootManager, + contract IERC20Upgradeable _matic, + contract IVerifierRollup _rollupVerifier, + contract IBridge _bridgeAddress, + struct PolygonZKEVM.InitializePackedParameters initializePackedParameters, + bytes32 genesisRoot, + string _trustedSequencerURL, + string _networkName + ) public +``` + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`_globalExitRootManager` | contract IGlobalExitRootManager | Global exit root manager address +|`_matic` | contract IERC20Upgradeable | MATIC token address +|`_rollupVerifier` | contract IVerifierRollup | Rollup verifier address +|`_bridgeAddress` | contract IBridge | Bridge address +|`initializePackedParameters` | struct PolygonZKEVM.InitializePackedParameters | Struct to save gas and avoid stack too depp errors +|`genesisRoot` | bytes32 | Rollup genesis root +|`_trustedSequencerURL` | string | Trusted sequencer URL +|`_networkName` | string | L2 network name + +### sequenceBatches +```solidity + function sequenceBatches( + struct PolygonZKEVM.BatchData[] batches + ) public +``` +Allows a sequencer to send multiple batches + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`batches` | struct PolygonZKEVM.BatchData[] | Struct array which the necessary data to append new batces ot the sequence + +### verifyBatches +```solidity + function verifyBatches( + uint64 initNumBatch, + uint64 finalNewBatch, + uint64 newLocalExitRoot, + bytes32 newStateRoot, + bytes32 proofA, + uint256[2] proofB, + uint256[2][2] proofC + ) public +``` +Allows an aggregator to verify multiple batches + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`initNumBatch` | uint64 | Batch which the aggregator starts the verification +|`finalNewBatch` | uint64 | Last batch aggregator intends to verify +|`newLocalExitRoot` | uint64 | New local exit root once the batch is processed +|`newStateRoot` | bytes32 | New State root once the batch is processed +|`proofA` | bytes32 | zk-snark input +|`proofB` | uint256[2] | zk-snark input +|`proofC` | uint256[2][2] | zk-snark input + +### trustedVerifyBatches +```solidity + function trustedVerifyBatches( + uint64 pendingStateNum, + uint64 initNumBatch, + uint64 finalNewBatch, + bytes32 newLocalExitRoot, + bytes32 newStateRoot, + uint256[2] proofA, + uint256[2][2] proofB, + uint256[2] proofC + ) public +``` +Allows an aggregator to verify multiple batches + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`pendingStateNum` | uint64 | Init pending state, 0 when consolidated state is used +|`initNumBatch` | uint64 | Batch which the aggregator starts the verification +|`finalNewBatch` | uint64 | Last batch aggregator intends to verify +|`newLocalExitRoot` | bytes32 | New local exit root once the batch is processed +|`newStateRoot` | bytes32 | New State root once the batch is processed +|`proofA` | uint256[2] | zk-snark input +|`proofB` | uint256[2][2] | zk-snark input +|`proofC` | uint256[2] | zk-snark input + +### _verifyBatches +```solidity + function _verifyBatches( + uint64 initNumBatch, + uint64 finalNewBatch, + uint64 newLocalExitRoot, + bytes32 newStateRoot, + bytes32 proofA, + uint256[2] proofB, + uint256[2][2] proofC + ) internal +``` +Verify batches internal function + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`initNumBatch` | uint64 | Batch which the aggregator starts the verification +|`finalNewBatch` | uint64 | Last batch aggregator intends to verify +|`newLocalExitRoot` | uint64 | New local exit root once the batch is processed +|`newStateRoot` | bytes32 | New State root once the batch is processed +|`proofA` | bytes32 | zk-snark input +|`proofB` | uint256[2] | zk-snark input +|`proofC` | uint256[2][2] | zk-snark input + +### _tryConsolidatePendingState +```solidity + function _tryConsolidatePendingState( + ) internal +``` +Internal function to consolidate the state automatically once sequence or verify batches are called +It trys to consolidate the first and the middle pending state + + + +### consolidatePendingState +```solidity + function consolidatePendingState( + uint64 pendingStateNum + ) public +``` +Allows to consolidate any pending state that has already exceed the pendingStateTimeout +Can be called by the trusted aggregator, which can consolidate any state without the timeout restrictions + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`pendingStateNum` | uint64 | Pending state to consolidate + +### _updateBatchFee +```solidity + function _updateBatchFee( + ) internal +``` +Function to update the batch fee based on the new verfied batches +The batch fee will not be updated when the trusted aggregator verify batches + + + +### forceBatch +```solidity + function forceBatch( + bytes transactions, + uint256 maticAmount + ) public +``` +Allows a sequencer/user to force a batch of L2 transactions. +This should be used only in extreme cases where the trusted sequencer does not work as expected + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`transactions` | bytes | L2 ethereum transactions EIP-155 or pre-EIP-155 with signature: +|`maticAmount` | uint256 | Max amount of MATIC tokens that the sender is willing to pay + +### sequenceForceBatches +```solidity + function sequenceForceBatches( + struct PolygonZKEVM.ForcedBatchData[] batches + ) public +``` +Allows anyone to sequence forced Batches if the trusted sequencer do not have done it in the timeout period + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`batches` | struct PolygonZKEVM.ForcedBatchData[] | Struct array which the necessary data to append new batces ot the sequence + +### setTrustedSequencer +```solidity + function setTrustedSequencer( + address newTrustedSequencer + ) public +``` +Allow the admin to set a new trusted sequencer + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`newTrustedSequencer` | address | Address of the new trusted sequuencer + +### setForceBatchAllowed +```solidity + function setForceBatchAllowed( + bool newForceBatchAllowed + ) public +``` +Allow the admin to allow/disallow the forceBatch functionality + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`newForceBatchAllowed` | bool | Whether is allowed or not the forceBatch functionality + +### setTrustedSequencerURL +```solidity + function setTrustedSequencerURL( + string newTrustedSequencerURL + ) public +``` +Allow the admin to set the trusted sequencer URL + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`newTrustedSequencerURL` | string | URL of trusted sequencer + +### setTrustedAggregator +```solidity + function setTrustedAggregator( + address newTrustedAggregator + ) public +``` +Allow the admin to set a new trusted aggregator address +If address 0 is set, everyone is free to aggregate + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`newTrustedAggregator` | address | Address of the new trusted aggregator + +### setTrustedAggregatorTimeout +```solidity + function setTrustedAggregatorTimeout( + uint64 newTrustedAggregatorTimeout + ) public +``` +Allow the admin to set a new trusted aggregator timeout +The timeout can only be lowered, except if emergency state is active + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`newTrustedAggregatorTimeout` | uint64 | Trusted aggreagator timeout + +### setPendingStateTimeout +```solidity + function setPendingStateTimeout( + uint64 newPendingStateTimeout + ) public +``` +Allow the admin to set a new trusted aggregator timeout +The timeout can only be lowered, except if emergency state is active + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`newPendingStateTimeout` | uint64 | Trusted aggreagator timeout + +### setMultiplierBatchFee +```solidity + function setMultiplierBatchFee( + uint16 newMultiplierBatchFee + ) public +``` +Allow the admin to set a new multiplier batch fee + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`newMultiplierBatchFee` | uint16 | multiplier bathc fee + +### setVeryBatchTimeTarget +```solidity + function setVeryBatchTimeTarget( + uint64 newVeryBatchTimeTarget + ) public +``` +Allow the admin to set a new verify batch time target + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`newVeryBatchTimeTarget` | uint64 | Verify batch time target + +### setAdmin +```solidity + function setAdmin( + address newAdmin + ) public +``` +Allow the current admin to set a new admin address + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`newAdmin` | address | Address of the new admin + +### overridePendingState +```solidity + function overridePendingState( + uint64 initPendingStateNum, + uint64 finalPendingStateNum, + uint64 initNumBatch, + uint64 finalNewBatch, + bytes32 newLocalExitRoot, + bytes32 newStateRoot, + uint256[2] proofA, + uint256[2][2] proofB, + uint256[2] proofC + ) public +``` +Allows to halt the PoE if its possible to prove a different state root given the same batches + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`initPendingStateNum` | uint64 | Init pending state, 0 when consolidated state is used +|`finalPendingStateNum` | uint64 | Final pending state, that will be used to compare with the newStateRoot +|`initNumBatch` | uint64 | Batch which the aggregator starts the verification +|`finalNewBatch` | uint64 | Last batch aggregator intends to verify +|`newLocalExitRoot` | bytes32 | New local exit root once the batch is processed +|`newStateRoot` | bytes32 | New State root once the batch is processed +|`proofA` | uint256[2] | zk-snark input +|`proofB` | uint256[2][2] | zk-snark input +|`proofC` | uint256[2] | zk-snark input + +### proveNonDeterministicPendingState +```solidity + function proveNonDeterministicPendingState( + uint64 initPendingStateNum, + uint64 finalPendingStateNum, + uint64 initNumBatch, + uint64 finalNewBatch, + bytes32 newLocalExitRoot, + bytes32 newStateRoot, + uint256[2] proofA, + uint256[2][2] proofB, + uint256[2] proofC + ) public +``` +Allows to halt the PoE if its possible to prove a different state root given the same batches + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`initPendingStateNum` | uint64 | Init pending state, 0 when consolidated state is used +|`finalPendingStateNum` | uint64 | Final pending state, that will be used to compare with the newStateRoot +|`initNumBatch` | uint64 | Batch which the aggregator starts the verification +|`finalNewBatch` | uint64 | Last batch aggregator intends to verify +|`newLocalExitRoot` | bytes32 | New local exit root once the batch is processed +|`newStateRoot` | bytes32 | New State root once the batch is processed +|`proofA` | uint256[2] | zk-snark input +|`proofB` | uint256[2][2] | zk-snark input +|`proofC` | uint256[2] | zk-snark input + +### _proveDistinctPendingState +```solidity + function _proveDistinctPendingState( + uint64 initPendingStateNum, + uint64 finalPendingStateNum, + uint64 initNumBatch, + uint64 finalNewBatch, + bytes32 newLocalExitRoot, + bytes32 newStateRoot, + uint256[2] proofA, + uint256[2][2] proofB, + uint256[2] proofC + ) internal +``` +Internal functoin that prove a different state root given the same batches to verify + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`initPendingStateNum` | uint64 | Init pending state, 0 when consolidated state is used +|`finalPendingStateNum` | uint64 | Final pending state, that will be used to compare with the newStateRoot +|`initNumBatch` | uint64 | Batch which the aggregator starts the verification +|`finalNewBatch` | uint64 | Last batch aggregator intends to verify +|`newLocalExitRoot` | bytes32 | New local exit root once the batch is processed +|`newStateRoot` | bytes32 | New State root once the batch is processed +|`proofA` | uint256[2] | zk-snark input +|`proofB` | uint256[2][2] | zk-snark input +|`proofC` | uint256[2] | zk-snark input + +### activateEmergencyState +```solidity + function activateEmergencyState( + uint64 sequencedBatchNum + ) external +``` +Function to activate emergency state, which also enable the emergency mode on both PoE and Bridge contrats +If not called by the owner owner must be provided a batcnNum that does not have been aggregated in a HALT_AGGREGATION_TIMEOUT period + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`sequencedBatchNum` | uint64 | Sequenced batch number that has not been aggreagated in HALT_AGGREGATION_TIMEOUT + +### deactivateEmergencyState +```solidity + function deactivateEmergencyState( + ) external +``` +Function to deactivate emergency state on both PoE and Bridge contrats + + + +### _activateEmergencyState +```solidity + function _activateEmergencyState( + ) internal +``` +Internal function to activate emergency state on both PoE and Bridge contrats + + + +### getCurrentBatchFee +```solidity + function getCurrentBatchFee( + ) public returns (uint256) +``` +Function to get the batch fee + + + +### getLastVerifiedBatch +```solidity + function getLastVerifiedBatch( + ) public returns (uint64) +``` +Get the last verified batch + + + +### isPendingStateConsolidable +```solidity + function isPendingStateConsolidable( + ) public returns (bool) +``` +Returns a boolean that indicates if the pendingStateNum is or not consolidable +Note that his function do not check if the pending state currently exist, or if it's consolidated already + + + +### calculateRewardPerBatch +```solidity + function calculateRewardPerBatch( + ) public returns (uint256) +``` +Function to calculate the reward to verify a single batch + + + +### getInputSnarkBytes +```solidity + function getInputSnarkBytes( + uint64 initNumBatch, + uint64 finalNewBatch, + bytes32 newLocalExitRoot, + bytes32 newStateRoot + ) public returns (bytes) +``` +Function to calculate the input snark bytes + + +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`initNumBatch` | uint64 | Batch which the aggregator starts teh verification +|`finalNewBatch` | uint64 | Last batch aggregator intends to verify +|`newLocalExitRoot` | bytes32 | New local exit root once the batch is processed +|`newStateRoot` | bytes32 | New State root once the batch is processed + +## Events +### SequenceBatches +```solidity + event SequenceBatches( + ) +``` + +Emitted when the trusted sequencer sends a new batch of transactions + +### ForceBatch +```solidity + event ForceBatch( + ) +``` + +Emitted when a batch is forced + +### SequenceForceBatches +```solidity + event SequenceForceBatches( + ) +``` + +Emitted when forced batches are sequenced by not the trusted sequencer + +### VerifyBatches +```solidity + event VerifyBatches( + ) +``` + +Emitted when a aggregator verifies batches + +### TrustedVerifyBatches +```solidity + event TrustedVerifyBatches( + ) +``` + +Emitted when the trusted aggregator verifies batches + +### ConsolidatePendingState +```solidity + event ConsolidatePendingState( + ) +``` + +Emitted when pending state is consolidated + +### SetTrustedSequencer +```solidity + event SetTrustedSequencer( + ) +``` + +Emitted when the admin update the trusted sequencer address + +### SetForceBatchAllowed +```solidity + event SetForceBatchAllowed( + ) +``` + +Emitted when the admin update the forcebatch boolean + +### SetTrustedSequencerURL +```solidity + event SetTrustedSequencerURL( + ) +``` + +Emitted when the admin update the seequencer URL + +### SetTrustedAggregatorTimeout +```solidity + event SetTrustedAggregatorTimeout( + ) +``` + +Emitted when the admin update the trusted aggregator timeout + +### SetPendingStateTimeout +```solidity + event SetPendingStateTimeout( + ) +``` + +Emitted when the admin update the pending state timeout + +### SetTrustedAggregator +```solidity + event SetTrustedAggregator( + ) +``` + +Emitted when the admin update the trusted aggregator address + +### SetMultiplierBatchFee +```solidity + event SetMultiplierBatchFee( + ) +``` + +Emitted when the admin update the multiplier batch fee + +### SetVeryBatchTimeTarget +```solidity + event SetVeryBatchTimeTarget( + ) +``` + +Emitted when the admin update the verify batch timeout + +### SetAdmin +```solidity + event SetAdmin( + ) +``` + +Emitted when a admin update his address + +### ProveNonDeterministicPendingState +```solidity + event ProveNonDeterministicPendingState( + ) +``` + +Emitted when is proved a different state given the same batches + +### OverridePendingState +```solidity + event OverridePendingState( + ) +``` + +Emitted when the trusted aggregator overrides pending state + diff --git a/docs/ProofOfEfficiency.md b/docs/ProofOfEfficiency.md index f375ce88a..4a59330e5 100644 --- a/docs/ProofOfEfficiency.md +++ b/docs/ProofOfEfficiency.md @@ -5,50 +5,54 @@ The sequenced state is deterministic and can be precalculated before it's actual The aggregators will be able to verify the sequenced state with zkProofs and therefore make available the withdrawals from L2 network. To enter and exit of the L2 network will be used a Bridge smart contract that will be deployed in both networks. - ## Functions + ### initialize + ```solidity function initialize( contract IGlobalExitRootManager _globalExitRootManager, contract IERC20Upgradeable _matic, contract IVerifierRollup _rollupVerifier, contract IBridge _bridgeAddress, - struct ProofOfEfficiency.InitializePackedParameters initializePackedParameters, + struct PolygonZKEVM.InitializePackedParameters initializePackedParameters, bytes32 genesisRoot, string _trustedSequencerURL, string _networkName ) public ``` - #### Parameters: -| Name | Type | Description | -| :--- | :--- | :------------------------------------------------------------------- | -|`_globalExitRootManager` | contract IGlobalExitRootManager | Global exit root manager address -|`_matic` | contract IERC20Upgradeable | MATIC token address -|`_rollupVerifier` | contract IVerifierRollup | Rollup verifier address -|`_bridgeAddress` | contract IBridge | Bridge address -|`initializePackedParameters` | struct ProofOfEfficiency.InitializePackedParameters | Struct to save gas and avoid stack too depp errors -|`genesisRoot` | bytes32 | Rollup genesis root -|`_trustedSequencerURL` | string | Trusted sequencer URL -|`_networkName` | string | L2 network name + +| Name | Type | Description | +| :--------------------------- | :--------------------------------------------- | :------------------------------------------------- | +| `_globalExitRootManager` | contract IGlobalExitRootManager | Global exit root manager address | +| `_matic` | contract IERC20Upgradeable | MATIC token address | +| `_rollupVerifier` | contract IVerifierRollup | Rollup verifier address | +| `_bridgeAddress` | contract IBridge | Bridge address | +| `initializePackedParameters` | struct PolygonZKEVM.InitializePackedParameters | Struct to save gas and avoid stack too depp errors | +| `genesisRoot` | bytes32 | Rollup genesis root | +| `_trustedSequencerURL` | string | Trusted sequencer URL | +| `_networkName` | string | L2 network name | ### sequenceBatches + ```solidity function sequenceBatches( - struct ProofOfEfficiency.BatchData[] batches + struct PolygonZKEVM.BatchData[] batches ) public ``` -Allows a sequencer to send multiple batches +Allows a sequencer to send multiple batches #### Parameters: -| Name | Type | Description | -| :--- | :--- | :------------------------------------------------------------------- | -|`batches` | struct ProofOfEfficiency.BatchData[] | Struct array which the necessary data to append new batces ot the sequence + +| Name | Type | Description | +| :-------- | :------------------------------ | :------------------------------------------------------------------------- | +| `batches` | struct PolygonZKEVM.BatchData[] | Struct array which the necessary data to append new batces ot the sequence | ### verifyBatches + ```solidity function verifyBatches( uint64 initNumBatch, @@ -60,21 +64,23 @@ Allows a sequencer to send multiple batches uint256[2][2] proofC ) public ``` -Allows an aggregator to verify multiple batches +Allows an aggregator to verify multiple batches #### Parameters: -| Name | Type | Description | -| :--- | :--- | :------------------------------------------------------------------- | -|`initNumBatch` | uint64 | Batch which the aggregator starts the verification -|`finalNewBatch` | uint64 | Last batch aggregator intends to verify -|`newLocalExitRoot` | uint64 | New local exit root once the batch is processed -|`newStateRoot` | bytes32 | New State root once the batch is processed -|`proofA` | bytes32 | zk-snark input -|`proofB` | uint256[2] | zk-snark input -|`proofC` | uint256[2][2] | zk-snark input + +| Name | Type | Description | +| :----------------- | :------------ | :------------------------------------------------- | +| `initNumBatch` | uint64 | Batch which the aggregator starts the verification | +| `finalNewBatch` | uint64 | Last batch aggregator intends to verify | +| `newLocalExitRoot` | uint64 | New local exit root once the batch is processed | +| `newStateRoot` | bytes32 | New State root once the batch is processed | +| `proofA` | bytes32 | zk-snark input | +| `proofB` | uint256[2] | zk-snark input | +| `proofC` | uint256[2][2] | zk-snark input | ### trustedVerifyBatches + ```solidity function trustedVerifyBatches( uint64 pendingStateNum, @@ -87,22 +93,24 @@ Allows an aggregator to verify multiple batches uint256[2] proofC ) public ``` -Allows an aggregator to verify multiple batches +Allows an aggregator to verify multiple batches #### Parameters: -| Name | Type | Description | -| :--- | :--- | :------------------------------------------------------------------- | -|`pendingStateNum` | uint64 | Init pending state, 0 when consolidated state is used -|`initNumBatch` | uint64 | Batch which the aggregator starts the verification -|`finalNewBatch` | uint64 | Last batch aggregator intends to verify -|`newLocalExitRoot` | bytes32 | New local exit root once the batch is processed -|`newStateRoot` | bytes32 | New State root once the batch is processed -|`proofA` | uint256[2] | zk-snark input -|`proofB` | uint256[2][2] | zk-snark input -|`proofC` | uint256[2] | zk-snark input - -### _verifyBatches + +| Name | Type | Description | +| :----------------- | :------------ | :---------------------------------------------------- | +| `pendingStateNum` | uint64 | Init pending state, 0 when consolidated state is used | +| `initNumBatch` | uint64 | Batch which the aggregator starts the verification | +| `finalNewBatch` | uint64 | Last batch aggregator intends to verify | +| `newLocalExitRoot` | bytes32 | New local exit root once the batch is processed | +| `newStateRoot` | bytes32 | New State root once the batch is processed | +| `proofA` | uint256[2] | zk-snark input | +| `proofB` | uint256[2][2] | zk-snark input | +| `proofC` | uint256[2] | zk-snark input | + +### \_verifyBatches + ```solidity function _verifyBatches( uint64 initNumBatch, @@ -114,216 +122,242 @@ Allows an aggregator to verify multiple batches uint256[2][2] proofC ) internal ``` -Verify batches internal function +Verify batches internal function #### Parameters: -| Name | Type | Description | -| :--- | :--- | :------------------------------------------------------------------- | -|`initNumBatch` | uint64 | Batch which the aggregator starts the verification -|`finalNewBatch` | uint64 | Last batch aggregator intends to verify -|`newLocalExitRoot` | uint64 | New local exit root once the batch is processed -|`newStateRoot` | bytes32 | New State root once the batch is processed -|`proofA` | bytes32 | zk-snark input -|`proofB` | uint256[2] | zk-snark input -|`proofC` | uint256[2][2] | zk-snark input - -### _tryConsolidatePendingState + +| Name | Type | Description | +| :----------------- | :------------ | :------------------------------------------------- | +| `initNumBatch` | uint64 | Batch which the aggregator starts the verification | +| `finalNewBatch` | uint64 | Last batch aggregator intends to verify | +| `newLocalExitRoot` | uint64 | New local exit root once the batch is processed | +| `newStateRoot` | bytes32 | New State root once the batch is processed | +| `proofA` | bytes32 | zk-snark input | +| `proofB` | uint256[2] | zk-snark input | +| `proofC` | uint256[2][2] | zk-snark input | + +### \_tryConsolidatePendingState + ```solidity function _tryConsolidatePendingState( ) internal ``` + Internal function to consolidate the state automatically once sequence or verify batches are called It trys to consolidate the first and the middle pending state - - ### consolidatePendingState + ```solidity function consolidatePendingState( uint64 pendingStateNum ) public ``` + Allows to consolidate any pending state that has already exceed the pendingStateTimeout Can be called by the trusted aggregator, which can consolidate any state without the timeout restrictions - #### Parameters: -| Name | Type | Description | -| :--- | :--- | :------------------------------------------------------------------- | -|`pendingStateNum` | uint64 | Pending state to consolidate -### _updateBatchFee +| Name | Type | Description | +| :---------------- | :----- | :--------------------------- | +| `pendingStateNum` | uint64 | Pending state to consolidate | + +### \_updateBatchFee + ```solidity function _updateBatchFee( ) internal ``` + Function to update the batch fee based on the new verfied batches The batch fee will not be updated when the trusted aggregator verify batches - - ### forceBatch + ```solidity function forceBatch( bytes transactions, uint256 maticAmount ) public ``` + Allows a sequencer/user to force a batch of L2 transactions. This should be used only in extreme cases where the trusted sequencer does not work as expected - #### Parameters: -| Name | Type | Description | -| :--- | :--- | :------------------------------------------------------------------- | -|`transactions` | bytes | L2 ethereum transactions EIP-155 or pre-EIP-155 with signature: -|`maticAmount` | uint256 | Max amount of MATIC tokens that the sender is willing to pay + +| Name | Type | Description | +| :------------- | :------ | :-------------------------------------------------------------- | +| `transactions` | bytes | L2 ethereum transactions EIP-155 or pre-EIP-155 with signature: | +| `maticAmount` | uint256 | Max amount of MATIC tokens that the sender is willing to pay | ### sequenceForceBatches + ```solidity function sequenceForceBatches( - struct ProofOfEfficiency.ForcedBatchData[] batches + struct PolygonZKEVM.ForcedBatchData[] batches ) public ``` -Allows anyone to sequence forced Batches if the trusted sequencer do not have done it in the timeout period +Allows anyone to sequence forced Batches if the trusted sequencer do not have done it in the timeout period #### Parameters: -| Name | Type | Description | -| :--- | :--- | :------------------------------------------------------------------- | -|`batches` | struct ProofOfEfficiency.ForcedBatchData[] | Struct array which the necessary data to append new batces ot the sequence + +| Name | Type | Description | +| :-------- | :------------------------------------ | :------------------------------------------------------------------------- | +| `batches` | struct PolygonZKEVM.ForcedBatchData[] | Struct array which the necessary data to append new batces ot the sequence | ### setTrustedSequencer + ```solidity function setTrustedSequencer( address newTrustedSequencer ) public ``` -Allow the admin to set a new trusted sequencer +Allow the admin to set a new trusted sequencer #### Parameters: -| Name | Type | Description | -| :--- | :--- | :------------------------------------------------------------------- | -|`newTrustedSequencer` | address | Address of the new trusted sequuencer + +| Name | Type | Description | +| :-------------------- | :------ | :------------------------------------ | +| `newTrustedSequencer` | address | Address of the new trusted sequuencer | ### setForceBatchAllowed + ```solidity function setForceBatchAllowed( bool newForceBatchAllowed ) public ``` -Allow the admin to allow/disallow the forceBatch functionality +Allow the admin to allow/disallow the forceBatch functionality #### Parameters: -| Name | Type | Description | -| :--- | :--- | :------------------------------------------------------------------- | -|`newForceBatchAllowed` | bool | Whether is allowed or not the forceBatch functionality + +| Name | Type | Description | +| :--------------------- | :--- | :----------------------------------------------------- | +| `newForceBatchAllowed` | bool | Whether is allowed or not the forceBatch functionality | ### setTrustedSequencerURL + ```solidity function setTrustedSequencerURL( string newTrustedSequencerURL ) public ``` -Allow the admin to set the trusted sequencer URL +Allow the admin to set the trusted sequencer URL #### Parameters: -| Name | Type | Description | -| :--- | :--- | :------------------------------------------------------------------- | -|`newTrustedSequencerURL` | string | URL of trusted sequencer + +| Name | Type | Description | +| :----------------------- | :----- | :----------------------- | +| `newTrustedSequencerURL` | string | URL of trusted sequencer | ### setTrustedAggregator + ```solidity function setTrustedAggregator( address newTrustedAggregator ) public ``` + Allow the admin to set a new trusted aggregator address If address 0 is set, everyone is free to aggregate - #### Parameters: -| Name | Type | Description | -| :--- | :--- | :------------------------------------------------------------------- | -|`newTrustedAggregator` | address | Address of the new trusted aggregator + +| Name | Type | Description | +| :--------------------- | :------ | :------------------------------------ | +| `newTrustedAggregator` | address | Address of the new trusted aggregator | ### setTrustedAggregatorTimeout + ```solidity function setTrustedAggregatorTimeout( uint64 newTrustedAggregatorTimeout ) public ``` + Allow the admin to set a new trusted aggregator timeout The timeout can only be lowered, except if emergency state is active - #### Parameters: -| Name | Type | Description | -| :--- | :--- | :------------------------------------------------------------------- | -|`newTrustedAggregatorTimeout` | uint64 | Trusted aggreagator timeout + +| Name | Type | Description | +| :---------------------------- | :----- | :-------------------------- | +| `newTrustedAggregatorTimeout` | uint64 | Trusted aggreagator timeout | ### setPendingStateTimeout + ```solidity function setPendingStateTimeout( uint64 newPendingStateTimeout ) public ``` + Allow the admin to set a new trusted aggregator timeout The timeout can only be lowered, except if emergency state is active - #### Parameters: -| Name | Type | Description | -| :--- | :--- | :------------------------------------------------------------------- | -|`newPendingStateTimeout` | uint64 | Trusted aggreagator timeout + +| Name | Type | Description | +| :----------------------- | :----- | :-------------------------- | +| `newPendingStateTimeout` | uint64 | Trusted aggreagator timeout | ### setMultiplierBatchFee + ```solidity function setMultiplierBatchFee( uint16 newMultiplierBatchFee ) public ``` -Allow the admin to set a new multiplier batch fee +Allow the admin to set a new multiplier batch fee #### Parameters: -| Name | Type | Description | -| :--- | :--- | :------------------------------------------------------------------- | -|`newMultiplierBatchFee` | uint16 | multiplier bathc fee + +| Name | Type | Description | +| :---------------------- | :----- | :------------------- | +| `newMultiplierBatchFee` | uint16 | multiplier bathc fee | ### setVeryBatchTimeTarget + ```solidity function setVeryBatchTimeTarget( uint64 newVeryBatchTimeTarget ) public ``` -Allow the admin to set a new verify batch time target +Allow the admin to set a new verify batch time target #### Parameters: -| Name | Type | Description | -| :--- | :--- | :------------------------------------------------------------------- | -|`newVeryBatchTimeTarget` | uint64 | Verify batch time target + +| Name | Type | Description | +| :----------------------- | :----- | :----------------------- | +| `newVeryBatchTimeTarget` | uint64 | Verify batch time target | ### setAdmin + ```solidity function setAdmin( address newAdmin ) public ``` -Allow the current admin to set a new admin address +Allow the current admin to set a new admin address #### Parameters: -| Name | Type | Description | -| :--- | :--- | :------------------------------------------------------------------- | -|`newAdmin` | address | Address of the new admin + +| Name | Type | Description | +| :--------- | :------ | :----------------------- | +| `newAdmin` | address | Address of the new admin | ### overridePendingState + ```solidity function overridePendingState( uint64 initPendingStateNum, @@ -337,23 +371,25 @@ Allow the current admin to set a new admin address uint256[2] proofC ) public ``` -Allows to halt the PoE if its possible to prove a different state root given the same batches +Allows to halt the PoE if its possible to prove a different state root given the same batches #### Parameters: -| Name | Type | Description | -| :--- | :--- | :------------------------------------------------------------------- | -|`initPendingStateNum` | uint64 | Init pending state, 0 when consolidated state is used -|`finalPendingStateNum` | uint64 | Final pending state, that will be used to compare with the newStateRoot -|`initNumBatch` | uint64 | Batch which the aggregator starts the verification -|`finalNewBatch` | uint64 | Last batch aggregator intends to verify -|`newLocalExitRoot` | bytes32 | New local exit root once the batch is processed -|`newStateRoot` | bytes32 | New State root once the batch is processed -|`proofA` | uint256[2] | zk-snark input -|`proofB` | uint256[2][2] | zk-snark input -|`proofC` | uint256[2] | zk-snark input + +| Name | Type | Description | +| :--------------------- | :------------ | :---------------------------------------------------------------------- | +| `initPendingStateNum` | uint64 | Init pending state, 0 when consolidated state is used | +| `finalPendingStateNum` | uint64 | Final pending state, that will be used to compare with the newStateRoot | +| `initNumBatch` | uint64 | Batch which the aggregator starts the verification | +| `finalNewBatch` | uint64 | Last batch aggregator intends to verify | +| `newLocalExitRoot` | bytes32 | New local exit root once the batch is processed | +| `newStateRoot` | bytes32 | New State root once the batch is processed | +| `proofA` | uint256[2] | zk-snark input | +| `proofB` | uint256[2][2] | zk-snark input | +| `proofC` | uint256[2] | zk-snark input | ### proveNonDeterministicPendingState + ```solidity function proveNonDeterministicPendingState( uint64 initPendingStateNum, @@ -367,23 +403,25 @@ Allows to halt the PoE if its possible to prove a different state root given the uint256[2] proofC ) public ``` -Allows to halt the PoE if its possible to prove a different state root given the same batches +Allows to halt the PoE if its possible to prove a different state root given the same batches #### Parameters: -| Name | Type | Description | -| :--- | :--- | :------------------------------------------------------------------- | -|`initPendingStateNum` | uint64 | Init pending state, 0 when consolidated state is used -|`finalPendingStateNum` | uint64 | Final pending state, that will be used to compare with the newStateRoot -|`initNumBatch` | uint64 | Batch which the aggregator starts the verification -|`finalNewBatch` | uint64 | Last batch aggregator intends to verify -|`newLocalExitRoot` | bytes32 | New local exit root once the batch is processed -|`newStateRoot` | bytes32 | New State root once the batch is processed -|`proofA` | uint256[2] | zk-snark input -|`proofB` | uint256[2][2] | zk-snark input -|`proofC` | uint256[2] | zk-snark input - -### _proveDistinctPendingState + +| Name | Type | Description | +| :--------------------- | :------------ | :---------------------------------------------------------------------- | +| `initPendingStateNum` | uint64 | Init pending state, 0 when consolidated state is used | +| `finalPendingStateNum` | uint64 | Final pending state, that will be used to compare with the newStateRoot | +| `initNumBatch` | uint64 | Batch which the aggregator starts the verification | +| `finalNewBatch` | uint64 | Last batch aggregator intends to verify | +| `newLocalExitRoot` | bytes32 | New local exit root once the batch is processed | +| `newStateRoot` | bytes32 | New State root once the batch is processed | +| `proofA` | uint256[2] | zk-snark input | +| `proofB` | uint256[2][2] | zk-snark input | +| `proofC` | uint256[2] | zk-snark input | + +### \_proveDistinctPendingState + ```solidity function _proveDistinctPendingState( uint64 initPendingStateNum, @@ -397,93 +435,97 @@ Allows to halt the PoE if its possible to prove a different state root given the uint256[2] proofC ) internal ``` -Internal functoin that prove a different state root given the same batches to verify +Internal functoin that prove a different state root given the same batches to verify #### Parameters: -| Name | Type | Description | -| :--- | :--- | :------------------------------------------------------------------- | -|`initPendingStateNum` | uint64 | Init pending state, 0 when consolidated state is used -|`finalPendingStateNum` | uint64 | Final pending state, that will be used to compare with the newStateRoot -|`initNumBatch` | uint64 | Batch which the aggregator starts the verification -|`finalNewBatch` | uint64 | Last batch aggregator intends to verify -|`newLocalExitRoot` | bytes32 | New local exit root once the batch is processed -|`newStateRoot` | bytes32 | New State root once the batch is processed -|`proofA` | uint256[2] | zk-snark input -|`proofB` | uint256[2][2] | zk-snark input -|`proofC` | uint256[2] | zk-snark input + +| Name | Type | Description | +| :--------------------- | :------------ | :---------------------------------------------------------------------- | +| `initPendingStateNum` | uint64 | Init pending state, 0 when consolidated state is used | +| `finalPendingStateNum` | uint64 | Final pending state, that will be used to compare with the newStateRoot | +| `initNumBatch` | uint64 | Batch which the aggregator starts the verification | +| `finalNewBatch` | uint64 | Last batch aggregator intends to verify | +| `newLocalExitRoot` | bytes32 | New local exit root once the batch is processed | +| `newStateRoot` | bytes32 | New State root once the batch is processed | +| `proofA` | uint256[2] | zk-snark input | +| `proofB` | uint256[2][2] | zk-snark input | +| `proofC` | uint256[2] | zk-snark input | ### activateEmergencyState + ```solidity function activateEmergencyState( uint64 sequencedBatchNum ) external ``` + Function to activate emergency state, which also enable the emergency mode on both PoE and Bridge contrats If not called by the owner owner must be provided a batcnNum that does not have been aggregated in a HALT_AGGREGATION_TIMEOUT period - #### Parameters: -| Name | Type | Description | -| :--- | :--- | :------------------------------------------------------------------- | -|`sequencedBatchNum` | uint64 | Sequenced batch number that has not been aggreagated in HALT_AGGREGATION_TIMEOUT + +| Name | Type | Description | +| :------------------ | :----- | :------------------------------------------------------------------------------- | +| `sequencedBatchNum` | uint64 | Sequenced batch number that has not been aggreagated in HALT_AGGREGATION_TIMEOUT | ### deactivateEmergencyState + ```solidity function deactivateEmergencyState( ) external ``` -Function to deactivate emergency state on both PoE and Bridge contrats +Function to deactivate emergency state on both PoE and Bridge contrats +### \_activateEmergencyState -### _activateEmergencyState ```solidity function _activateEmergencyState( ) internal ``` -Internal function to activate emergency state on both PoE and Bridge contrats - +Internal function to activate emergency state on both PoE and Bridge contrats ### getCurrentBatchFee + ```solidity function getCurrentBatchFee( ) public returns (uint256) ``` -Function to get the batch fee - +Function to get the batch fee ### getLastVerifiedBatch + ```solidity function getLastVerifiedBatch( ) public returns (uint64) ``` -Get the last verified batch - +Get the last verified batch ### isPendingStateConsolidable + ```solidity function isPendingStateConsolidable( ) public returns (bool) ``` + Returns a boolean that indicates if the pendingStateNum is or not consolidable Note that his function do not check if the pending state currently exist, or if it's consolidated already - - ### calculateRewardPerBatch + ```solidity function calculateRewardPerBatch( ) public returns (uint256) ``` -Function to calculate the reward to verify a single batch - +Function to calculate the reward to verify a single batch ### getInputSnarkBytes + ```solidity function getInputSnarkBytes( uint64 initNumBatch, @@ -492,19 +534,22 @@ Function to calculate the reward to verify a single batch bytes32 newStateRoot ) public returns (bytes) ``` -Function to calculate the input snark bytes +Function to calculate the input snark bytes #### Parameters: -| Name | Type | Description | -| :--- | :--- | :------------------------------------------------------------------- | -|`initNumBatch` | uint64 | Batch which the aggregator starts teh verification -|`finalNewBatch` | uint64 | Last batch aggregator intends to verify -|`newLocalExitRoot` | bytes32 | New local exit root once the batch is processed -|`newStateRoot` | bytes32 | New State root once the batch is processed + +| Name | Type | Description | +| :----------------- | :------ | :------------------------------------------------- | +| `initNumBatch` | uint64 | Batch which the aggregator starts teh verification | +| `finalNewBatch` | uint64 | Last batch aggregator intends to verify | +| `newLocalExitRoot` | bytes32 | New local exit root once the batch is processed | +| `newStateRoot` | bytes32 | New State root once the batch is processed | ## Events + ### SequenceBatches + ```solidity event SequenceBatches( ) @@ -513,6 +558,7 @@ Function to calculate the input snark bytes Emitted when the trusted sequencer sends a new batch of transactions ### ForceBatch + ```solidity event ForceBatch( ) @@ -521,6 +567,7 @@ Emitted when the trusted sequencer sends a new batch of transactions Emitted when a batch is forced ### SequenceForceBatches + ```solidity event SequenceForceBatches( ) @@ -529,6 +576,7 @@ Emitted when a batch is forced Emitted when forced batches are sequenced by not the trusted sequencer ### VerifyBatches + ```solidity event VerifyBatches( ) @@ -537,6 +585,7 @@ Emitted when forced batches are sequenced by not the trusted sequencer Emitted when a aggregator verifies batches ### TrustedVerifyBatches + ```solidity event TrustedVerifyBatches( ) @@ -545,6 +594,7 @@ Emitted when a aggregator verifies batches Emitted when the trusted aggregator verifies batches ### ConsolidatePendingState + ```solidity event ConsolidatePendingState( ) @@ -553,6 +603,7 @@ Emitted when the trusted aggregator verifies batches Emitted when pending state is consolidated ### SetTrustedSequencer + ```solidity event SetTrustedSequencer( ) @@ -561,6 +612,7 @@ Emitted when pending state is consolidated Emitted when the admin update the trusted sequencer address ### SetForceBatchAllowed + ```solidity event SetForceBatchAllowed( ) @@ -569,6 +621,7 @@ Emitted when the admin update the trusted sequencer address Emitted when the admin update the forcebatch boolean ### SetTrustedSequencerURL + ```solidity event SetTrustedSequencerURL( ) @@ -577,6 +630,7 @@ Emitted when the admin update the forcebatch boolean Emitted when the admin update the seequencer URL ### SetTrustedAggregatorTimeout + ```solidity event SetTrustedAggregatorTimeout( ) @@ -585,6 +639,7 @@ Emitted when the admin update the seequencer URL Emitted when the admin update the trusted aggregator timeout ### SetPendingStateTimeout + ```solidity event SetPendingStateTimeout( ) @@ -593,6 +648,7 @@ Emitted when the admin update the trusted aggregator timeout Emitted when the admin update the pending state timeout ### SetTrustedAggregator + ```solidity event SetTrustedAggregator( ) @@ -601,6 +657,7 @@ Emitted when the admin update the pending state timeout Emitted when the admin update the trusted aggregator address ### SetMultiplierBatchFee + ```solidity event SetMultiplierBatchFee( ) @@ -609,6 +666,7 @@ Emitted when the admin update the trusted aggregator address Emitted when the admin update the multiplier batch fee ### SetVeryBatchTimeTarget + ```solidity event SetVeryBatchTimeTarget( ) @@ -617,6 +675,7 @@ Emitted when the admin update the multiplier batch fee Emitted when the admin update the verify batch timeout ### SetAdmin + ```solidity event SetAdmin( ) @@ -625,6 +684,7 @@ Emitted when the admin update the verify batch timeout Emitted when a admin update his address ### ProveNonDeterministicPendingState + ```solidity event ProveNonDeterministicPendingState( ) @@ -633,10 +693,10 @@ Emitted when a admin update his address Emitted when is proved a different state given the same batches ### OverridePendingState + ```solidity event OverridePendingState( ) ``` Emitted when the trusted aggregator overrides pending state - diff --git a/docs/Timelock.md b/docs/Timelock.md index 2a668019d..be8d6c028 100644 --- a/docs/Timelock.md +++ b/docs/Timelock.md @@ -11,7 +11,7 @@ If emergency mode of the zkevm contract system is active, this timelock have no address[] proposers, address[] executors, address admin, - contract ProofOfEfficiency _proofOfEfficiency + contract PolygonZKEVM _polygonZKEVM ) public ``` Constructor of timelock @@ -24,7 +24,7 @@ Constructor of timelock |`proposers` | address[] | accounts to be granted proposer and canceller roles |`executors` | address[] | accounts to be granted executor role |`admin` | address | optional account to be granted admin role; disable with zero address -|`_proofOfEfficiency` | contract ProofOfEfficiency | PoE address +|`_polygonZKEVM` | contract PolygonZKEVM | PoE address ### getMinDelay @@ -36,6 +36,6 @@ Constructor of timelock Returns the minimum delay for an operation to become valid. This value can be changed by executing an operation that calls `updateDelay`. -If proof of efficiency is on emergency state the minDelay will be 0 instead. +If Polygon ZK-EVM is on emergency state the minDelay will be 0 instead. diff --git a/test/contracts/bridge.test.js b/test/contracts/bridge.test.js index 0eaefd02c..6f334dc8c 100644 --- a/test/contracts/bridge.test.js +++ b/test/contracts/bridge.test.js @@ -34,7 +34,7 @@ describe('Bridge Contract', () => { const LEAF_TYPE_ASSET = 0; const LEAF_TYPE_MESSAGE = 1; - const proofOfEfficiencyAddress = ethers.constants.AddressZero; + const polygonZKEVMAddress = ethers.constants.AddressZero; beforeEach('Deploy contracts', async () => { // load signers @@ -50,7 +50,7 @@ describe('Bridge Contract', () => { await globalExitRootManager.initialize(rollup.address, bridgeContract.address); - await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, proofOfEfficiencyAddress); + await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, polygonZKEVMAddress); // deploy token const maticTokenFactory = await ethers.getContractFactory('ERC20PermitMock'); @@ -66,7 +66,7 @@ describe('Bridge Contract', () => { it('should check the constructor parameters', async () => { expect(await bridgeContract.globalExitRootManager()).to.be.equal(globalExitRootManager.address); expect(await bridgeContract.networkID()).to.be.equal(networkIDMainnet); - expect(await bridgeContract.poeAddress()).to.be.equal(proofOfEfficiencyAddress); + expect(await bridgeContract.poeAddress()).to.be.equal(polygonZKEVMAddress); }); it('should bridge asset and verify merkle proof', async () => { diff --git a/test/contracts/bridgeMock.test.js b/test/contracts/bridgeMock.test.js index 67a67a73e..ce57730ce 100644 --- a/test/contracts/bridgeMock.test.js +++ b/test/contracts/bridgeMock.test.js @@ -31,7 +31,7 @@ describe('Bridge Mock Contract', () => { const networkIDRollup = 1; const LEAF_TYPE_ASSET = 0; - const proofOfEfficiencyAddress = ethers.constants.AddressZero; + const polygonZKEVMAddress = ethers.constants.AddressZero; beforeEach('Deploy contracts', async () => { // load signers @@ -46,7 +46,7 @@ describe('Bridge Mock Contract', () => { bridgeContract = await upgrades.deployProxy(bridgeFactory, [], { initializer: false }); await globalExitRootManager.initialize(rollup.address, bridgeContract.address); - await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, proofOfEfficiencyAddress); + await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, polygonZKEVMAddress); // deploy token const maticTokenFactory = await ethers.getContractFactory('ERC20PermitMock'); diff --git a/test/contracts/bridge_permit.test.js b/test/contracts/bridge_permit.test.js index 1a63b4c4f..7613d8e6a 100644 --- a/test/contracts/bridge_permit.test.js +++ b/test/contracts/bridge_permit.test.js @@ -39,7 +39,7 @@ describe('Bridge Contract Permit tests', () => { const networkIDRollup = 1; const LEAF_TYPE_ASSET = 0; - const proofOfEfficiencyAddress = ethers.constants.AddressZero; + const polygonZKEVMAddress = ethers.constants.AddressZero; beforeEach('Deploy contracts', async () => { // load signers @@ -54,7 +54,7 @@ describe('Bridge Contract Permit tests', () => { bridgeContract = await upgrades.deployProxy(bridgeFactory, [], { initializer: false }); await globalExitRootManager.initialize(rollup.address, bridgeContract.address); - await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, proofOfEfficiencyAddress); + await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, polygonZKEVMAddress); // deploy token const maticTokenFactory = await ethers.getContractFactory('TokenWrapped'); diff --git a/test/contracts/emergencyManager.test.js b/test/contracts/emergencyManager.test.js index 71f516f96..680a64668 100644 --- a/test/contracts/emergencyManager.test.js +++ b/test/contracts/emergencyManager.test.js @@ -9,7 +9,7 @@ describe('Emergency mode test', () => { let verifierContract; let bridgeContract; - let proofOfEfficiencyContract; + let polygonZKEVMContract; let maticTokenContract; let globalExitRootManager; @@ -56,12 +56,12 @@ describe('Emergency mode test', () => { bridgeContract = await upgrades.deployProxy(bridgeFactory, [], { initializer: false }); // deploy PoE - const ProofOfEfficiencyFactory = await ethers.getContractFactory('ProofOfEfficiencyMock'); - proofOfEfficiencyContract = await upgrades.deployProxy(ProofOfEfficiencyFactory, [], { initializer: false }); + const PolygonZKEVMFactory = await ethers.getContractFactory('PolygonZKEVMMock'); + polygonZKEVMContract = await upgrades.deployProxy(PolygonZKEVMFactory, [], { initializer: false }); - await globalExitRootManager.initialize(proofOfEfficiencyContract.address, bridgeContract.address); - await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, proofOfEfficiencyContract.address); - await proofOfEfficiencyContract.initialize( + await globalExitRootManager.initialize(polygonZKEVMContract.address, bridgeContract.address); + await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, polygonZKEVMContract.address); + await polygonZKEVMContract.initialize( globalExitRootManager.address, maticTokenContract.address, verifierContract.address, @@ -86,26 +86,26 @@ describe('Emergency mode test', () => { it('should activate emergency mode', async () => { // Check isEmergencyState - expect(await proofOfEfficiencyContract.isEmergencyState()).to.be.equal(false); + expect(await polygonZKEVMContract.isEmergencyState()).to.be.equal(false); expect(await bridgeContract.isEmergencyState()).to.be.equal(false); // Set isEmergencyState - await expect(proofOfEfficiencyContract.connect(admin).activateEmergencyState(1)) - .to.be.revertedWith('ProofOfEfficiency::activateEmergencyState: Batch not sequenced or not end of sequence'); + await expect(polygonZKEVMContract.connect(admin).activateEmergencyState(1)) + .to.be.revertedWith('PolygonZKEVM::activateEmergencyState: Batch not sequenced or not end of sequence'); await expect(bridgeContract.connect(deployer).activateEmergencyState()) - .to.be.revertedWith('ProofOfEfficiency::onlyProofOfEfficiency: only Proof of Efficiency contract'); + .to.be.revertedWith('PolygonZKEVM::onlyPolygonZKEVM: only Polygon ZK-EVM contract'); - await expect(proofOfEfficiencyContract.activateEmergencyState(0)) - .to.emit(proofOfEfficiencyContract, 'EmergencyStateActivated') + await expect(polygonZKEVMContract.activateEmergencyState(0)) + .to.emit(polygonZKEVMContract, 'EmergencyStateActivated') .to.emit(bridgeContract, 'EmergencyStateActivated'); - expect(await proofOfEfficiencyContract.isEmergencyState()).to.be.equal(true); + expect(await polygonZKEVMContract.isEmergencyState()).to.be.equal(true); expect(await bridgeContract.isEmergencyState()).to.be.equal(true); // Once in emergency state no sequenceBatches/forceBatches can be done const l2txData = '0x123456'; - const maticAmount = await proofOfEfficiencyContract.getCurrentBatchFee(); + const maticAmount = await polygonZKEVMContract.getCurrentBatchFee(); const currentTimestamp = (await ethers.provider.getBlock()).timestamp; const sequence = { @@ -116,21 +116,21 @@ describe('Emergency mode test', () => { }; // revert because emergency state - await expect(proofOfEfficiencyContract.sequenceBatches([sequence])) + await expect(polygonZKEVMContract.sequenceBatches([sequence])) .to.be.revertedWith('EmergencyManager::ifNotEmergencyState: only if not emergency state'); // revert because emergency state - await expect(proofOfEfficiencyContract.sequenceForceBatches([sequence])) + await expect(polygonZKEVMContract.sequenceForceBatches([sequence])) .to.be.revertedWith('EmergencyManager::ifNotEmergencyState: only if not emergency state'); // revert because emergency state - await expect(proofOfEfficiencyContract.forceBatch(l2txData, maticAmount)) + await expect(polygonZKEVMContract.forceBatch(l2txData, maticAmount)) .to.be.revertedWith('EmergencyManager::ifNotEmergencyState: only if not emergency state'); // trustedAggregator forge the batch const newLocalExitRoot = '0x0000000000000000000000000000000000000000000000000000000000000001'; const newStateRoot = '0x0000000000000000000000000000000000000000000000000000000000000001'; - const numBatch = (await proofOfEfficiencyContract.lastVerifiedBatch()).toNumber() + 1; + const numBatch = (await polygonZKEVMContract.lastVerifiedBatch()).toNumber() + 1; const proofA = ['0', '0']; const proofB = [ ['0', '0'], @@ -140,7 +140,7 @@ describe('Emergency mode test', () => { const pendingStateNum = 0; await expect( - proofOfEfficiencyContract.connect(trustedAggregator).verifyBatches( + polygonZKEVMContract.connect(trustedAggregator).verifyBatches( pendingStateNum, numBatch - 1, numBatch, @@ -203,21 +203,21 @@ describe('Emergency mode test', () => { )).to.be.revertedWith('EmergencyManager::ifNotEmergencyState: only if not emergency state'); // Emergency council should deactivate emergency mode - await expect(proofOfEfficiencyContract.activateEmergencyState(0)) + await expect(polygonZKEVMContract.activateEmergencyState(0)) .to.be.revertedWith('EmergencyManager::ifNotEmergencyState: only if not emergency state'); await expect(bridgeContract.connect(deployer).deactivateEmergencyState()) - .to.be.revertedWith('ProofOfEfficiency::onlyProofOfEfficiency: only Proof of Efficiency contract'); + .to.be.revertedWith('PolygonZKEVM::onlyPolygonZKEVM: only Polygon ZK-EVM contract'); - await expect(proofOfEfficiencyContract.deactivateEmergencyState()) - .to.be.revertedWith('ProofOfEfficiency::onlyAdmin: only admin'); + await expect(polygonZKEVMContract.deactivateEmergencyState()) + .to.be.revertedWith('PolygonZKEVM::onlyAdmin: only admin'); - await expect(proofOfEfficiencyContract.connect(admin).deactivateEmergencyState()) - .to.emit(proofOfEfficiencyContract, 'EmergencyStateDeactivated') + await expect(polygonZKEVMContract.connect(admin).deactivateEmergencyState()) + .to.emit(polygonZKEVMContract, 'EmergencyStateDeactivated') .to.emit(bridgeContract, 'EmergencyStateDeactivated'); // Check isEmergencyState - expect(await proofOfEfficiencyContract.isEmergencyState()).to.be.equal(false); + expect(await polygonZKEVMContract.isEmergencyState()).to.be.equal(false); expect(await bridgeContract.isEmergencyState()).to.be.equal(false); /* @@ -225,13 +225,13 @@ describe('Emergency mode test', () => { * Approve tokens */ await expect( - maticTokenContract.connect(trustedSequencer).approve(proofOfEfficiencyContract.address, maticAmount), + maticTokenContract.connect(trustedSequencer).approve(polygonZKEVMContract.address, maticAmount), ).to.emit(maticTokenContract, 'Approval'); - const lastBatchSequenced = await proofOfEfficiencyContract.lastBatchSequenced(); + const lastBatchSequenced = await polygonZKEVMContract.lastBatchSequenced(); // Sequence Batches - await expect(proofOfEfficiencyContract.connect(trustedSequencer).sequenceBatches([sequence])) - .to.emit(proofOfEfficiencyContract, 'SequenceBatches') + await expect(polygonZKEVMContract.connect(trustedSequencer).sequenceBatches([sequence])) + .to.emit(polygonZKEVMContract, 'SequenceBatches') .withArgs(lastBatchSequenced + 1); // trustedAggregator forge the batch @@ -242,7 +242,7 @@ describe('Emergency mode test', () => { // Verify batch await expect( - proofOfEfficiencyContract.connect(trustedAggregator).verifyBatches( + polygonZKEVMContract.connect(trustedAggregator).verifyBatches( pendingStateNum, numBatch - 1, numBatch, @@ -252,7 +252,7 @@ describe('Emergency mode test', () => { proofB, proofC, ), - ).to.emit(proofOfEfficiencyContract, 'VerifyBatches') + ).to.emit(polygonZKEVMContract, 'VerifyBatches') .withArgs(numBatch, newStateRoot, trustedAggregator.address); const finalAggregatorMatic = await maticTokenContract.balanceOf( @@ -266,7 +266,7 @@ describe('Emergency mode test', () => { const finalPendingStateNum = 1; await expect( - proofOfEfficiencyContract.connect(trustedAggregator).proveNonDeterministicPendingState( + polygonZKEVMContract.connect(trustedAggregator).proveNonDeterministicPendingState( pendingStateNum, finalPendingStateNum, numBatch - 1, @@ -277,10 +277,10 @@ describe('Emergency mode test', () => { proofB, proofC, ), - ).to.be.revertedWith('ProofOfEfficiency::proveNonDeterministicPendingState: finalNewBatch must be equal than currentLastVerifiedBatch'); + ).to.be.revertedWith('PolygonZKEVM::proveNonDeterministicPendingState: finalNewBatch must be equal than currentLastVerifiedBatch'); await expect( - proofOfEfficiencyContract.connect(trustedAggregator).proveNonDeterministicPendingState( + polygonZKEVMContract.connect(trustedAggregator).proveNonDeterministicPendingState( pendingStateNum, finalPendingStateNum, numBatch - 1, @@ -291,12 +291,12 @@ describe('Emergency mode test', () => { proofB, proofC, ), - ).to.be.revertedWith('ProofOfEfficiency::proveNonDeterministicPendingState: finalNewBatch must be equal than currentLastVerifiedBatch'); + ).to.be.revertedWith('PolygonZKEVM::proveNonDeterministicPendingState: finalNewBatch must be equal than currentLastVerifiedBatch'); const newStateRootDistinct = '0x0000000000000000000000000000000000000000000000000000000000000002'; await expect( - proofOfEfficiencyContract.proveNonDeterministicPendingState( + polygonZKEVMContract.proveNonDeterministicPendingState( pendingStateNum, finalPendingStateNum, numBatch - 1, @@ -307,12 +307,12 @@ describe('Emergency mode test', () => { proofB, proofC, ), - ).to.emit(proofOfEfficiencyContract, 'ProveNonDeterministicPendingState').withArgs(newStateRoot, newStateRootDistinct) - .to.emit(proofOfEfficiencyContract, 'EmergencyStateActivated') + ).to.emit(polygonZKEVMContract, 'ProveNonDeterministicPendingState').withArgs(newStateRoot, newStateRootDistinct) + .to.emit(polygonZKEVMContract, 'EmergencyStateActivated') .to.emit(bridgeContract, 'EmergencyStateActivated'); // Check emergency state is active - expect(await proofOfEfficiencyContract.isEmergencyState()).to.be.equal(true); + expect(await polygonZKEVMContract.isEmergencyState()).to.be.equal(true); expect(await bridgeContract.isEmergencyState()).to.be.equal(true); }); }); diff --git a/test/contracts/globalExitRootManagerL2.test.js b/test/contracts/globalExitRootManagerL2.test.js index d19b159cb..b051b9930 100644 --- a/test/contracts/globalExitRootManagerL2.test.js +++ b/test/contracts/globalExitRootManagerL2.test.js @@ -6,7 +6,7 @@ const zero32bytes = '0x000000000000000000000000000000000000000000000000000000000 describe('Global Exit Root L2', () => { let bridge; let globalExitRootManager; - const proofOfEfficiencyAddress = ethers.constants.AddressZero; + const PolygonZKEVMAddress = ethers.constants.AddressZero; beforeEach('Deploy contracts', async () => { const networkIDRollup = 1; @@ -21,7 +21,7 @@ describe('Global Exit Root L2', () => { const globalExitRootManagerFactory = await ethers.getContractFactory('GlobalExitRootManagerL2Mock', deployer); globalExitRootManager = await globalExitRootManagerFactory.deploy(bridge.address); - await bridge.initialize(networkIDRollup, globalExitRootManager.address, proofOfEfficiencyAddress); + await bridge.initialize(networkIDRollup, globalExitRootManager.address, PolygonZKEVMAddress); }); it('should check the constructor parameters', async () => { diff --git a/test/contracts/proofOfEfficiency.test.js b/test/contracts/proofOfEfficiency.test.js index e4f02d804..fed89daff 100644 --- a/test/contracts/proofOfEfficiency.test.js +++ b/test/contracts/proofOfEfficiency.test.js @@ -5,7 +5,7 @@ const { contractUtils } = require('@0xpolygonhermez/zkevm-commonjs'); const { calculateSnarkInput, calculateAccInputHash, calculateBatchHashData } = contractUtils; -describe('Proof of efficiency', () => { +describe('Polygon ZK-EVM', () => { let deployer; let trustedAggregator; let trustedSequencer; @@ -14,7 +14,7 @@ describe('Proof of efficiency', () => { let verifierContract; let bridgeContract; - let proofOfEfficiencyContract; + let polygonZKEVMContract; let maticTokenContract; let globalExitRootManager; @@ -61,12 +61,12 @@ describe('Proof of efficiency', () => { bridgeContract = await upgrades.deployProxy(bridgeFactory, [], { initializer: false }); // deploy PoE - const ProofOfEfficiencyFactory = await ethers.getContractFactory('ProofOfEfficiencyMock'); - proofOfEfficiencyContract = await upgrades.deployProxy(ProofOfEfficiencyFactory, [], { initializer: false }); + const PolygonZKEVMFactory = await ethers.getContractFactory('PolygonZKEVMMock'); + polygonZKEVMContract = await upgrades.deployProxy(PolygonZKEVMFactory, [], { initializer: false }); - await globalExitRootManager.initialize(proofOfEfficiencyContract.address, bridgeContract.address); - await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, proofOfEfficiencyContract.address); - await proofOfEfficiencyContract.initialize( + await globalExitRootManager.initialize(polygonZKEVMContract.address, bridgeContract.address); + await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, polygonZKEVMContract.address); + await polygonZKEVMContract.initialize( globalExitRootManager.address, maticTokenContract.address, verifierContract.address, @@ -90,107 +90,107 @@ describe('Proof of efficiency', () => { }); it('should check the constructor parameters', async () => { - expect(await proofOfEfficiencyContract.globalExitRootManager()).to.be.equal(globalExitRootManager.address); - expect(await proofOfEfficiencyContract.matic()).to.be.equal(maticTokenContract.address); - expect(await proofOfEfficiencyContract.rollupVerifier()).to.be.equal(verifierContract.address); - expect(await proofOfEfficiencyContract.bridgeAddress()).to.be.equal(bridgeContract.address); - - expect(await proofOfEfficiencyContract.admin()).to.be.equal(admin.address); - expect(await proofOfEfficiencyContract.chainID()).to.be.equal(chainID); - expect(await proofOfEfficiencyContract.trustedSequencer()).to.be.equal(trustedSequencer.address); - expect(await proofOfEfficiencyContract.pendingStateTimeout()).to.be.equal(pendingStateTimeoutDefault); - expect(await proofOfEfficiencyContract.forceBatchAllowed()).to.be.equal(allowForcebatches); - expect(await proofOfEfficiencyContract.trustedAggregator()).to.be.equal(trustedAggregator.address); - expect(await proofOfEfficiencyContract.trustedAggregatorTimeout()).to.be.equal(trustedAggregatorTimeoutDefault); - - expect(await proofOfEfficiencyContract.batchNumToStateRoot(0)).to.be.equal(genesisRoot); - expect(await proofOfEfficiencyContract.trustedSequencerURL()).to.be.equal(urlSequencer); - expect(await proofOfEfficiencyContract.networkName()).to.be.equal(networkName); - - expect(await proofOfEfficiencyContract.batchFee()).to.be.equal(ethers.utils.parseEther('1')); + expect(await polygonZKEVMContract.globalExitRootManager()).to.be.equal(globalExitRootManager.address); + expect(await polygonZKEVMContract.matic()).to.be.equal(maticTokenContract.address); + expect(await polygonZKEVMContract.rollupVerifier()).to.be.equal(verifierContract.address); + expect(await polygonZKEVMContract.bridgeAddress()).to.be.equal(bridgeContract.address); + + expect(await polygonZKEVMContract.admin()).to.be.equal(admin.address); + expect(await polygonZKEVMContract.chainID()).to.be.equal(chainID); + expect(await polygonZKEVMContract.trustedSequencer()).to.be.equal(trustedSequencer.address); + expect(await polygonZKEVMContract.pendingStateTimeout()).to.be.equal(pendingStateTimeoutDefault); + expect(await polygonZKEVMContract.forceBatchAllowed()).to.be.equal(allowForcebatches); + expect(await polygonZKEVMContract.trustedAggregator()).to.be.equal(trustedAggregator.address); + expect(await polygonZKEVMContract.trustedAggregatorTimeout()).to.be.equal(trustedAggregatorTimeoutDefault); + + expect(await polygonZKEVMContract.batchNumToStateRoot(0)).to.be.equal(genesisRoot); + expect(await polygonZKEVMContract.trustedSequencerURL()).to.be.equal(urlSequencer); + expect(await polygonZKEVMContract.networkName()).to.be.equal(networkName); + + expect(await polygonZKEVMContract.batchFee()).to.be.equal(ethers.utils.parseEther('1')); }); it('should check setters of admin', async () => { - expect(await proofOfEfficiencyContract.trustedSequencer()).to.be.equal(trustedSequencer.address); - expect(await proofOfEfficiencyContract.forceBatchAllowed()).to.be.equal(allowForcebatches); - expect(await proofOfEfficiencyContract.trustedSequencerURL()).to.be.equal(urlSequencer); - expect(await proofOfEfficiencyContract.trustedAggregator()).to.be.equal(trustedAggregator.address); - expect(await proofOfEfficiencyContract.trustedAggregatorTimeout()).to.be.equal(trustedAggregatorTimeoutDefault); - expect(await proofOfEfficiencyContract.pendingStateTimeout()).to.be.equal(pendingStateTimeoutDefault); - expect(await proofOfEfficiencyContract.admin()).to.be.equal(admin.address); + expect(await polygonZKEVMContract.trustedSequencer()).to.be.equal(trustedSequencer.address); + expect(await polygonZKEVMContract.forceBatchAllowed()).to.be.equal(allowForcebatches); + expect(await polygonZKEVMContract.trustedSequencerURL()).to.be.equal(urlSequencer); + expect(await polygonZKEVMContract.trustedAggregator()).to.be.equal(trustedAggregator.address); + expect(await polygonZKEVMContract.trustedAggregatorTimeout()).to.be.equal(trustedAggregatorTimeoutDefault); + expect(await polygonZKEVMContract.pendingStateTimeout()).to.be.equal(pendingStateTimeoutDefault); + expect(await polygonZKEVMContract.admin()).to.be.equal(admin.address); // setTrustedSequencer - await expect(proofOfEfficiencyContract.setTrustedSequencer(deployer.address)) - .to.be.revertedWith('ProofOfEfficiency::onlyAdmin: only admin'); + await expect(polygonZKEVMContract.setTrustedSequencer(deployer.address)) + .to.be.revertedWith('PolygonZKEVM::onlyAdmin: only admin'); await expect( - proofOfEfficiencyContract.connect(admin).setTrustedSequencer(deployer.address), - ).to.emit(proofOfEfficiencyContract, 'SetTrustedSequencer').withArgs(deployer.address); - expect(await proofOfEfficiencyContract.trustedSequencer()).to.be.equal(deployer.address); + polygonZKEVMContract.connect(admin).setTrustedSequencer(deployer.address), + ).to.emit(polygonZKEVMContract, 'SetTrustedSequencer').withArgs(deployer.address); + expect(await polygonZKEVMContract.trustedSequencer()).to.be.equal(deployer.address); // setForceBatchAllowed - await expect(proofOfEfficiencyContract.setForceBatchAllowed(!allowForcebatches)) - .to.be.revertedWith('ProofOfEfficiency::onlyAdmin: only admin'); + await expect(polygonZKEVMContract.setForceBatchAllowed(!allowForcebatches)) + .to.be.revertedWith('PolygonZKEVM::onlyAdmin: only admin'); await expect( - proofOfEfficiencyContract.connect(admin).setForceBatchAllowed(!allowForcebatches), - ).to.emit(proofOfEfficiencyContract, 'SetForceBatchAllowed').withArgs(!allowForcebatches); - expect(await proofOfEfficiencyContract.forceBatchAllowed()).to.be.equal(!allowForcebatches); + polygonZKEVMContract.connect(admin).setForceBatchAllowed(!allowForcebatches), + ).to.emit(polygonZKEVMContract, 'SetForceBatchAllowed').withArgs(!allowForcebatches); + expect(await polygonZKEVMContract.forceBatchAllowed()).to.be.equal(!allowForcebatches); // setTrustedSequencerURL const url = 'https://test'; - await expect(proofOfEfficiencyContract.setTrustedSequencerURL(url)) - .to.be.revertedWith('ProofOfEfficiency::onlyAdmin: only admin'); + await expect(polygonZKEVMContract.setTrustedSequencerURL(url)) + .to.be.revertedWith('PolygonZKEVM::onlyAdmin: only admin'); await expect( - proofOfEfficiencyContract.connect(admin).setTrustedSequencerURL(url), - ).to.emit(proofOfEfficiencyContract, 'SetTrustedSequencerURL').withArgs(url); - expect(await proofOfEfficiencyContract.trustedSequencerURL()).to.be.equal(url); + polygonZKEVMContract.connect(admin).setTrustedSequencerURL(url), + ).to.emit(polygonZKEVMContract, 'SetTrustedSequencerURL').withArgs(url); + expect(await polygonZKEVMContract.trustedSequencerURL()).to.be.equal(url); // setTrustedAggregator const newTrustedAggregator = deployer.address; - await expect(proofOfEfficiencyContract.setTrustedAggregator(newTrustedAggregator)) - .to.be.revertedWith('ProofOfEfficiency::onlyAdmin: only admin'); + await expect(polygonZKEVMContract.setTrustedAggregator(newTrustedAggregator)) + .to.be.revertedWith('PolygonZKEVM::onlyAdmin: only admin'); await expect( - proofOfEfficiencyContract.connect(admin).setTrustedAggregator(newTrustedAggregator), - ).to.emit(proofOfEfficiencyContract, 'SetTrustedAggregator').withArgs(newTrustedAggregator); - expect(await proofOfEfficiencyContract.trustedAggregator()).to.be.equal(newTrustedAggregator); + polygonZKEVMContract.connect(admin).setTrustedAggregator(newTrustedAggregator), + ).to.emit(polygonZKEVMContract, 'SetTrustedAggregator').withArgs(newTrustedAggregator); + expect(await polygonZKEVMContract.trustedAggregator()).to.be.equal(newTrustedAggregator); // setTrustedAggregatorTimeout - await expect(proofOfEfficiencyContract.setTrustedAggregatorTimeout(trustedAggregatorTimeoutDefault)) - .to.be.revertedWith('ProofOfEfficiency::onlyAdmin: only admin'); + await expect(polygonZKEVMContract.setTrustedAggregatorTimeout(trustedAggregatorTimeoutDefault)) + .to.be.revertedWith('PolygonZKEVM::onlyAdmin: only admin'); - await expect(proofOfEfficiencyContract.connect(admin).setTrustedAggregatorTimeout(trustedAggregatorTimeoutDefault)) - .to.be.revertedWith('ProofOfEfficiency::setTrustedAggregatorTimeout: new timeout must be lower'); + await expect(polygonZKEVMContract.connect(admin).setTrustedAggregatorTimeout(trustedAggregatorTimeoutDefault)) + .to.be.revertedWith('PolygonZKEVM::setTrustedAggregatorTimeout: new timeout must be lower'); const newTrustedAggregatorTimeout = trustedAggregatorTimeoutDefault - 1; await expect( - proofOfEfficiencyContract.connect(admin).setTrustedAggregatorTimeout(newTrustedAggregatorTimeout), - ).to.emit(proofOfEfficiencyContract, 'SetTrustedAggregatorTimeout').withArgs(newTrustedAggregatorTimeout); - expect(await proofOfEfficiencyContract.trustedAggregatorTimeout()).to.be.equal(newTrustedAggregatorTimeout); + polygonZKEVMContract.connect(admin).setTrustedAggregatorTimeout(newTrustedAggregatorTimeout), + ).to.emit(polygonZKEVMContract, 'SetTrustedAggregatorTimeout').withArgs(newTrustedAggregatorTimeout); + expect(await polygonZKEVMContract.trustedAggregatorTimeout()).to.be.equal(newTrustedAggregatorTimeout); // setPendingStateTimeoutDefault - await expect(proofOfEfficiencyContract.setPendingStateTimeout(pendingStateTimeoutDefault)) - .to.be.revertedWith('ProofOfEfficiency::onlyAdmin: only admin'); + await expect(polygonZKEVMContract.setPendingStateTimeout(pendingStateTimeoutDefault)) + .to.be.revertedWith('PolygonZKEVM::onlyAdmin: only admin'); - await expect(proofOfEfficiencyContract.connect(admin).setPendingStateTimeout(pendingStateTimeoutDefault)) - .to.be.revertedWith('ProofOfEfficiency::setPendingStateTimeout: new timeout must be lower'); + await expect(polygonZKEVMContract.connect(admin).setPendingStateTimeout(pendingStateTimeoutDefault)) + .to.be.revertedWith('PolygonZKEVM::setPendingStateTimeout: new timeout must be lower'); const newPendingStateTimeoutDefault = pendingStateTimeoutDefault - 1; await expect( - proofOfEfficiencyContract.connect(admin).setPendingStateTimeout(newPendingStateTimeoutDefault), - ).to.emit(proofOfEfficiencyContract, 'SetPendingStateTimeout').withArgs(newPendingStateTimeoutDefault); - expect(await proofOfEfficiencyContract.pendingStateTimeout()).to.be.equal(newPendingStateTimeoutDefault); + polygonZKEVMContract.connect(admin).setPendingStateTimeout(newPendingStateTimeoutDefault), + ).to.emit(polygonZKEVMContract, 'SetPendingStateTimeout').withArgs(newPendingStateTimeoutDefault); + expect(await polygonZKEVMContract.pendingStateTimeout()).to.be.equal(newPendingStateTimeoutDefault); // setAdmin - await expect(proofOfEfficiencyContract.setAdmin(deployer.address)) - .to.be.revertedWith('ProofOfEfficiency::onlyAdmin: only admin'); + await expect(polygonZKEVMContract.setAdmin(deployer.address)) + .to.be.revertedWith('PolygonZKEVM::onlyAdmin: only admin'); await expect( - proofOfEfficiencyContract.connect(admin).setAdmin(deployer.address), - ).to.emit(proofOfEfficiencyContract, 'SetAdmin').withArgs(deployer.address); - expect(await proofOfEfficiencyContract.admin()).to.be.equal(deployer.address); + polygonZKEVMContract.connect(admin).setAdmin(deployer.address), + ).to.emit(polygonZKEVMContract, 'SetAdmin').withArgs(deployer.address); + expect(await polygonZKEVMContract.admin()).to.be.equal(deployer.address); }); it('should sequence a batch as truested sequencer', async () => { const l2txData = '0x123456'; - const maticAmount = await proofOfEfficiencyContract.getCurrentBatchFee(); + const maticAmount = await polygonZKEVMContract.getCurrentBatchFee(); const currentTimestamp = (await ethers.provider.getBlock()).timestamp; const sequence = { @@ -201,11 +201,11 @@ describe('Proof of efficiency', () => { }; // revert because sender is not truested sequencer - await expect(proofOfEfficiencyContract.sequenceBatches([sequence])) - .to.be.revertedWith('ProofOfEfficiency::onlyTrustedSequencer: only trusted sequencer'); + await expect(polygonZKEVMContract.sequenceBatches([sequence])) + .to.be.revertedWith('PolygonZKEVM::onlyTrustedSequencer: only trusted sequencer'); // revert because tokens were not approved - await expect(proofOfEfficiencyContract.connect(trustedSequencer).sequenceBatches([sequence])) + await expect(polygonZKEVMContract.connect(trustedSequencer).sequenceBatches([sequence])) .to.be.revertedWith('ERC20: insufficient allowance'); const initialOwnerBalance = await maticTokenContract.balanceOf( @@ -214,14 +214,14 @@ describe('Proof of efficiency', () => { // Approve tokens await expect( - maticTokenContract.connect(trustedSequencer).approve(proofOfEfficiencyContract.address, maticAmount), + maticTokenContract.connect(trustedSequencer).approve(polygonZKEVMContract.address, maticAmount), ).to.emit(maticTokenContract, 'Approval'); - const lastBatchSequenced = await proofOfEfficiencyContract.lastBatchSequenced(); + const lastBatchSequenced = await polygonZKEVMContract.lastBatchSequenced(); // Sequence batch - await expect(proofOfEfficiencyContract.connect(trustedSequencer).sequenceBatches([sequence])) - .to.emit(proofOfEfficiencyContract, 'SequenceBatches') + await expect(polygonZKEVMContract.connect(trustedSequencer).sequenceBatches([sequence])) + .to.emit(polygonZKEVMContract, 'SequenceBatches') .withArgs(lastBatchSequenced + 1); const sequencedTimestamp = (await ethers.provider.getBlock()).timestamp; @@ -234,11 +234,11 @@ describe('Proof of efficiency', () => { ); // Check batch mapping - const sequencedBatchData = await proofOfEfficiencyContract.sequencedBatches(1); + const sequencedBatchData = await polygonZKEVMContract.sequencedBatches(1); const batchAccInputHash = sequencedBatchData.accInputHash; const batchAccInputHashJs = calculateAccInputHash( - (await proofOfEfficiencyContract.sequencedBatches(0)).accInputHash, + (await polygonZKEVMContract.sequencedBatches(0)).accInputHash, calculateBatchHashData(sequence.transactions), sequence.globalExitRoot, sequence.timestamp, @@ -251,7 +251,7 @@ describe('Proof of efficiency', () => { it('sequenceBatches should sequence multiple batches', async () => { const l2txData = '0x1234'; - const maticAmount = (await proofOfEfficiencyContract.getCurrentBatchFee()).mul(2); + const maticAmount = (await polygonZKEVMContract.getCurrentBatchFee()).mul(2); const currentTimestamp = (await ethers.provider.getBlock()).timestamp; @@ -275,14 +275,14 @@ describe('Proof of efficiency', () => { // Approve tokens await expect( - maticTokenContract.connect(trustedSequencer).approve(proofOfEfficiencyContract.address, maticAmount), + maticTokenContract.connect(trustedSequencer).approve(polygonZKEVMContract.address, maticAmount), ).to.emit(maticTokenContract, 'Approval'); - const lastBatchSequenced = await proofOfEfficiencyContract.lastBatchSequenced(); + const lastBatchSequenced = await polygonZKEVMContract.lastBatchSequenced(); // Sequence batches - await expect(proofOfEfficiencyContract.connect(trustedSequencer).sequenceBatches([sequence, sequence2])) - .to.emit(proofOfEfficiencyContract, 'SequenceBatches') + await expect(polygonZKEVMContract.connect(trustedSequencer).sequenceBatches([sequence, sequence2])) + .to.emit(polygonZKEVMContract, 'SequenceBatches') .withArgs(lastBatchSequenced + 2); const finalOwnerBalance = await maticTokenContract.balanceOf( @@ -294,13 +294,13 @@ describe('Proof of efficiency', () => { ); // Check batch mapping - const sequencedBatchData = await proofOfEfficiencyContract.sequencedBatches(1); + const sequencedBatchData = await polygonZKEVMContract.sequencedBatches(1); const batchAccInputHash = sequencedBatchData.accInputHash; // Only last batch is added to the mapping expect(batchAccInputHash).to.be.equal(ethers.constants.HashZero); - const sequencedBatchData2 = await proofOfEfficiencyContract.sequencedBatches(2); + const sequencedBatchData2 = await polygonZKEVMContract.sequencedBatches(2); const batchAccInputHash2 = sequencedBatchData2.accInputHash; // Calcultate input Hahs for batch 1 @@ -325,23 +325,23 @@ describe('Proof of efficiency', () => { it('sequenceBatches should sequence multiple batches and force batches', async () => { const l2txDataForceBatch = '0x123456'; - const maticAmount = await proofOfEfficiencyContract.getCurrentBatchFee(); + const maticAmount = await polygonZKEVMContract.getCurrentBatchFee(); const lastGlobalExitRoot = await globalExitRootManager.getLastGlobalExitRoot(); await expect( - maticTokenContract.approve(proofOfEfficiencyContract.address, maticAmount), + maticTokenContract.approve(polygonZKEVMContract.address, maticAmount), ).to.emit(maticTokenContract, 'Approval'); - const lastForcedBatch = (await proofOfEfficiencyContract.lastForceBatch()) + 1; + const lastForcedBatch = (await polygonZKEVMContract.lastForceBatch()) + 1; // Force batch - await expect(proofOfEfficiencyContract.forceBatch(l2txDataForceBatch, maticAmount)) - .to.emit(proofOfEfficiencyContract, 'ForceBatch') + await expect(polygonZKEVMContract.forceBatch(l2txDataForceBatch, maticAmount)) + .to.emit(polygonZKEVMContract, 'ForceBatch') .withArgs(lastForcedBatch, lastGlobalExitRoot, deployer.address, '0x'); // sequence 2 batches const l2txData = '0x1234'; - const maticAmountSequence = (await proofOfEfficiencyContract.getCurrentBatchFee()).mul(1); + const maticAmountSequence = (await polygonZKEVMContract.getCurrentBatchFee()).mul(1); const currentTimestamp = (await ethers.provider.getBlock()).timestamp; @@ -365,35 +365,35 @@ describe('Proof of efficiency', () => { // Approve tokens await expect( - maticTokenContract.connect(trustedSequencer).approve(proofOfEfficiencyContract.address, maticAmountSequence), + maticTokenContract.connect(trustedSequencer).approve(polygonZKEVMContract.address, maticAmountSequence), ).to.emit(maticTokenContract, 'Approval'); - const lastBatchSequenced = await proofOfEfficiencyContract.lastBatchSequenced(); + const lastBatchSequenced = await polygonZKEVMContract.lastBatchSequenced(); // Assert that the timestamp requirements must accomplish with force batches too sequence.minForcedTimestamp += 1; - await expect(proofOfEfficiencyContract.connect(trustedSequencer).sequenceBatches([sequence, sequence2])) - .to.be.revertedWith('ProofOfEfficiency::sequenceBatches: Forced batches data must match'); + await expect(polygonZKEVMContract.connect(trustedSequencer).sequenceBatches([sequence, sequence2])) + .to.be.revertedWith('PolygonZKEVM::sequenceBatches: Forced batches data must match'); sequence.minForcedTimestamp -= 1; sequence.timestamp -= 1; - await expect(proofOfEfficiencyContract.connect(trustedSequencer).sequenceBatches([sequence, sequence2])) - .to.be.revertedWith('ProofOfEfficiency::sequenceBatches: Forced batches timestamp must be bigger or equal than min'); + await expect(polygonZKEVMContract.connect(trustedSequencer).sequenceBatches([sequence, sequence2])) + .to.be.revertedWith('PolygonZKEVM::sequenceBatches: Forced batches timestamp must be bigger or equal than min'); sequence.timestamp += 1; sequence.timestamp = currentTimestamp + 10; - await expect(proofOfEfficiencyContract.connect(trustedSequencer).sequenceBatches([sequence, sequence2])) - .to.be.revertedWith('ProofOfEfficiency::sequenceBatches: Timestamp must be inside range'); + await expect(polygonZKEVMContract.connect(trustedSequencer).sequenceBatches([sequence, sequence2])) + .to.be.revertedWith('PolygonZKEVM::sequenceBatches: Timestamp must be inside range'); sequence.timestamp = currentTimestamp; sequence2.timestamp -= 1; - await expect(proofOfEfficiencyContract.connect(trustedSequencer).sequenceBatches([sequence, sequence2])) - .to.be.revertedWith('ProofOfEfficiency::sequenceBatches: Timestamp must be inside range'); + await expect(polygonZKEVMContract.connect(trustedSequencer).sequenceBatches([sequence, sequence2])) + .to.be.revertedWith('PolygonZKEVM::sequenceBatches: Timestamp must be inside range'); sequence2.timestamp += 1; // Sequence Bathces - await expect(proofOfEfficiencyContract.connect(trustedSequencer).sequenceBatches([sequence, sequence2])) - .to.emit(proofOfEfficiencyContract, 'SequenceBatches') + await expect(polygonZKEVMContract.connect(trustedSequencer).sequenceBatches([sequence, sequence2])) + .to.emit(polygonZKEVMContract, 'SequenceBatches') .withArgs(Number(lastBatchSequenced) + 2); const sequencedTimestamp = (await ethers.provider.getBlock()).timestamp; @@ -407,7 +407,7 @@ describe('Proof of efficiency', () => { ); // Check batch mapping - const batchAccInputHash = (await proofOfEfficiencyContract.sequencedBatches(1)).accInputHash; + const batchAccInputHash = (await polygonZKEVMContract.sequencedBatches(1)).accInputHash; // Only last batch is added to the mapping expect(batchAccInputHash).to.be.equal(ethers.constants.HashZero); @@ -431,7 +431,7 @@ describe('Proof of efficiency', () => { sequence2.timestamp, trustedSequencer.address, ); - const batchData2 = await proofOfEfficiencyContract.sequencedBatches(2); + const batchData2 = await polygonZKEVMContract.sequencedBatches(2); expect(batchData2.accInputHash).to.be.equal(batchAccInputHashJs); expect(batchData2.sequencedTimestamp).to.be.equal(sequencedTimestamp); expect(batchData2.previousLastBatchSequenced).to.be.equal(0); @@ -439,7 +439,7 @@ describe('Proof of efficiency', () => { it('sequenceBatches should check the timestamp correctly', async () => { const l2txData = '0x'; - const maticAmount = (await proofOfEfficiencyContract.getCurrentBatchFee()).mul(2); + const maticAmount = (await polygonZKEVMContract.getCurrentBatchFee()).mul(2); const sequence = { transactions: l2txData, @@ -461,10 +461,10 @@ describe('Proof of efficiency', () => { // Approve tokens await expect( - maticTokenContract.connect(trustedSequencer).approve(proofOfEfficiencyContract.address, maticAmount), + maticTokenContract.connect(trustedSequencer).approve(polygonZKEVMContract.address, maticAmount), ).to.emit(maticTokenContract, 'Approval'); - const lastBatchSequenced = await proofOfEfficiencyContract.lastBatchSequenced(); + const lastBatchSequenced = await polygonZKEVMContract.lastBatchSequenced(); let currentTimestamp = (await ethers.provider.getBlock()).timestamp; await ethers.provider.send('evm_increaseTime', [1]); // evm_setNextBlockTimestamp @@ -472,8 +472,8 @@ describe('Proof of efficiency', () => { sequence.timestamp = currentTimestamp + 2; // bigger than current block tiemstamp // revert because timestamp is more than the current one - await expect(proofOfEfficiencyContract.connect(trustedSequencer).sequenceBatches([sequence])) - .to.be.revertedWith('ProofOfEfficiency::sequenceBatches: Timestamp must be inside range'); + await expect(polygonZKEVMContract.connect(trustedSequencer).sequenceBatches([sequence])) + .to.be.revertedWith('PolygonZKEVM::sequenceBatches: Timestamp must be inside range'); currentTimestamp = (await ethers.provider.getBlock()).timestamp; await ethers.provider.send('evm_increaseTime', [1]); @@ -482,8 +482,8 @@ describe('Proof of efficiency', () => { sequence2.timestamp = currentTimestamp - 1; // revert because the second sequence has less timestamp than the previous batch - await expect(proofOfEfficiencyContract.connect(trustedSequencer).sequenceBatches([sequence, sequence2])) - .to.be.revertedWith('ProofOfEfficiency::sequenceBatches: Timestamp must be inside range'); + await expect(polygonZKEVMContract.connect(trustedSequencer).sequenceBatches([sequence, sequence2])) + .to.be.revertedWith('PolygonZKEVM::sequenceBatches: Timestamp must be inside range'); currentTimestamp = (await ethers.provider.getBlock()).timestamp; await ethers.provider.send('evm_increaseTime', [1]); @@ -492,8 +492,8 @@ describe('Proof of efficiency', () => { sequence2.timestamp = currentTimestamp + 1; // Sequence Batches - await expect(proofOfEfficiencyContract.connect(trustedSequencer).sequenceBatches([sequence, sequence2])) - .to.emit(proofOfEfficiencyContract, 'SequenceBatches') + await expect(polygonZKEVMContract.connect(trustedSequencer).sequenceBatches([sequence, sequence2])) + .to.emit(polygonZKEVMContract, 'SequenceBatches') .withArgs(lastBatchSequenced + 2); const finalOwnerBalance = await maticTokenContract.balanceOf( @@ -506,31 +506,31 @@ describe('Proof of efficiency', () => { it('should force a batch of transactions', async () => { const l2txData = '0x123456'; - const maticAmount = await proofOfEfficiencyContract.getCurrentBatchFee(); + const maticAmount = await polygonZKEVMContract.getCurrentBatchFee(); const lastGlobalExitRoot = await globalExitRootManager.getLastGlobalExitRoot(); - expect(maticAmount.toString()).to.be.equal((await proofOfEfficiencyContract.getCurrentBatchFee()).toString()); + expect(maticAmount.toString()).to.be.equal((await polygonZKEVMContract.getCurrentBatchFee()).toString()); // revert because the maxMatic amount is less than the necessary to pay - await expect(proofOfEfficiencyContract.forceBatch(l2txData, maticAmount.sub(1))) - .to.be.revertedWith('ProofOfEfficiency::forceBatch: not enough matic'); + await expect(polygonZKEVMContract.forceBatch(l2txData, maticAmount.sub(1))) + .to.be.revertedWith('PolygonZKEVM::forceBatch: not enough matic'); // revert because tokens were not approved - await expect(proofOfEfficiencyContract.forceBatch(l2txData, maticAmount)) + await expect(polygonZKEVMContract.forceBatch(l2txData, maticAmount)) .to.be.revertedWith('ERC20: insufficient allowance'); const initialOwnerBalance = await maticTokenContract.balanceOf( await deployer.address, ); await expect( - maticTokenContract.approve(proofOfEfficiencyContract.address, maticAmount), + maticTokenContract.approve(polygonZKEVMContract.address, maticAmount), ).to.emit(maticTokenContract, 'Approval'); - const lastForceBatch = await proofOfEfficiencyContract.lastForceBatch(); + const lastForceBatch = await polygonZKEVMContract.lastForceBatch(); // Force batch - await expect(proofOfEfficiencyContract.forceBatch(l2txData, maticAmount)) - .to.emit(proofOfEfficiencyContract, 'ForceBatch') + await expect(polygonZKEVMContract.forceBatch(l2txData, maticAmount)) + .to.emit(polygonZKEVMContract, 'ForceBatch') .withArgs(lastForceBatch + 1, lastGlobalExitRoot, deployer.address, '0x'); const finalOwnerBalance = await maticTokenContract.balanceOf( @@ -541,7 +541,7 @@ describe('Proof of efficiency', () => { ); // Check force batches struct - const batchHash = await proofOfEfficiencyContract.forcedBatches(1); + const batchHash = await polygonZKEVMContract.forcedBatches(1); const timestampForceBatch = (await ethers.provider.getBlock()).timestamp; const batchHashJs = ethers.utils.solidityKeccak256( @@ -557,22 +557,22 @@ describe('Proof of efficiency', () => { it('should sequence force batches using sequenceForceBatches', async () => { const l2txData = '0x123456'; - const maticAmount = await proofOfEfficiencyContract.getCurrentBatchFee(); + const maticAmount = await polygonZKEVMContract.getCurrentBatchFee(); const lastGlobalExitRoot = await globalExitRootManager.getLastGlobalExitRoot(); await expect( - maticTokenContract.approve(proofOfEfficiencyContract.address, maticAmount), + maticTokenContract.approve(polygonZKEVMContract.address, maticAmount), ).to.emit(maticTokenContract, 'Approval'); - const lastForcedBatch = (await proofOfEfficiencyContract.lastForceBatch()) + 1; + const lastForcedBatch = (await polygonZKEVMContract.lastForceBatch()) + 1; - await expect(proofOfEfficiencyContract.forceBatch(l2txData, maticAmount)) - .to.emit(proofOfEfficiencyContract, 'ForceBatch') + await expect(polygonZKEVMContract.forceBatch(l2txData, maticAmount)) + .to.emit(polygonZKEVMContract, 'ForceBatch') .withArgs(lastForcedBatch, lastGlobalExitRoot, deployer.address, '0x'); const timestampForceBatch = (await ethers.provider.getBlock()).timestamp; - const forceBatchHash = await proofOfEfficiencyContract.forcedBatches(1); + const forceBatchHash = await polygonZKEVMContract.forcedBatches(1); const batchHashJs = ethers.utils.solidityKeccak256( ['bytes32', 'bytes32', 'uint64'], @@ -585,9 +585,9 @@ describe('Proof of efficiency', () => { expect(batchHashJs).to.be.equal(forceBatchHash); // Check storage variables before call - expect(await proofOfEfficiencyContract.lastForceBatchSequenced()).to.be.equal(0); - expect(await proofOfEfficiencyContract.lastForceBatch()).to.be.equal(1); - expect(await proofOfEfficiencyContract.lastBatchSequenced()).to.be.equal(0); + expect(await polygonZKEVMContract.lastForceBatchSequenced()).to.be.equal(0); + expect(await polygonZKEVMContract.lastForceBatch()).to.be.equal(1); + expect(await polygonZKEVMContract.lastBatchSequenced()).to.be.equal(0); const forceBatchStruct = { transactions: l2txData, @@ -596,30 +596,30 @@ describe('Proof of efficiency', () => { }; // revert because the timeout is not expired - await expect(proofOfEfficiencyContract.sequenceForceBatches([])) - .to.be.revertedWith('ProofOfEfficiency::sequenceForceBatch: Must force at least 1 batch'); + await expect(polygonZKEVMContract.sequenceForceBatches([])) + .to.be.revertedWith('PolygonZKEVM::sequenceForceBatch: Must force at least 1 batch'); // revert because the timeout is not expired - await expect(proofOfEfficiencyContract.sequenceForceBatches([forceBatchStruct])) - .to.be.revertedWith('ProofOfEfficiency::sequenceForceBatch: Forced batch is not in timeout period'); + await expect(polygonZKEVMContract.sequenceForceBatches([forceBatchStruct])) + .to.be.revertedWith('PolygonZKEVM::sequenceForceBatch: Forced batch is not in timeout period'); // Increment timestamp - const forceBatchTimeout = await proofOfEfficiencyContract.FORCE_BATCH_TIMEOUT(); + const forceBatchTimeout = await polygonZKEVMContract.FORCE_BATCH_TIMEOUT(); await ethers.provider.send('evm_setNextBlockTimestamp', [timestampForceBatch + forceBatchTimeout.toNumber()]); // sequence force batch - await expect(proofOfEfficiencyContract.sequenceForceBatches([forceBatchStruct])) - .to.emit(proofOfEfficiencyContract, 'SequenceForceBatches') + await expect(polygonZKEVMContract.sequenceForceBatches([forceBatchStruct])) + .to.emit(polygonZKEVMContract, 'SequenceForceBatches') .withArgs(1); const timestampSequenceBatch = (await ethers.provider.getBlock()).timestamp; - expect(await proofOfEfficiencyContract.lastForceBatchSequenced()).to.be.equal(1); - expect(await proofOfEfficiencyContract.lastForceBatch()).to.be.equal(1); - expect(await proofOfEfficiencyContract.lastBatchSequenced()).to.be.equal(1); + expect(await polygonZKEVMContract.lastForceBatchSequenced()).to.be.equal(1); + expect(await polygonZKEVMContract.lastForceBatch()).to.be.equal(1); + expect(await polygonZKEVMContract.lastBatchSequenced()).to.be.equal(1); // Check force batches struct - const batchAccInputHash = (await proofOfEfficiencyContract.sequencedBatches(1)).accInputHash; + const batchAccInputHash = (await polygonZKEVMContract.sequencedBatches(1)).accInputHash; const batchAccInputHashJs = calculateAccInputHash( ethers.constants.HashZero, @@ -633,7 +633,7 @@ describe('Proof of efficiency', () => { it('should verify a sequenced batch using trustedVerifyBatches', async () => { const l2txData = '0x123456'; - const maticAmount = await proofOfEfficiencyContract.getCurrentBatchFee(); + const maticAmount = await polygonZKEVMContract.getCurrentBatchFee(); const currentTimestamp = (await ethers.provider.getBlock()).timestamp; const sequence = { @@ -645,20 +645,20 @@ describe('Proof of efficiency', () => { // Approve tokens await expect( - maticTokenContract.connect(trustedSequencer).approve(proofOfEfficiencyContract.address, maticAmount), + maticTokenContract.connect(trustedSequencer).approve(polygonZKEVMContract.address, maticAmount), ).to.emit(maticTokenContract, 'Approval'); - const lastBatchSequenced = await proofOfEfficiencyContract.lastBatchSequenced(); + const lastBatchSequenced = await polygonZKEVMContract.lastBatchSequenced(); // Sequence Batches - await expect(proofOfEfficiencyContract.connect(trustedSequencer).sequenceBatches([sequence])) - .to.emit(proofOfEfficiencyContract, 'SequenceBatches') + await expect(polygonZKEVMContract.connect(trustedSequencer).sequenceBatches([sequence])) + .to.emit(polygonZKEVMContract, 'SequenceBatches') .withArgs(lastBatchSequenced + 1); // trustedAggregator forge the batch const pendingState = 0; const newLocalExitRoot = '0x0000000000000000000000000000000000000000000000000000000000000000'; const newStateRoot = '0x0000000000000000000000000000000000000000000000000000000000000000'; - const numBatch = (await proofOfEfficiencyContract.lastVerifiedBatch()) + 1; + const numBatch = (await polygonZKEVMContract.lastVerifiedBatch()) + 1; const proofA = ['0', '0']; const proofB = [ ['0', '0'], @@ -671,7 +671,7 @@ describe('Proof of efficiency', () => { ); await expect( - proofOfEfficiencyContract.connect(deployer).trustedVerifyBatches( + polygonZKEVMContract.connect(deployer).trustedVerifyBatches( pendingState, numBatch - 1, numBatch - 1, @@ -681,10 +681,10 @@ describe('Proof of efficiency', () => { proofB, proofC, ), - ).to.be.revertedWith('ProofOfEfficiency::onlyTrustedAggregator: only trusted Aggregator'); + ).to.be.revertedWith('PolygonZKEVM::onlyTrustedAggregator: only trusted Aggregator'); await expect( - proofOfEfficiencyContract.connect(trustedAggregator).trustedVerifyBatches( + polygonZKEVMContract.connect(trustedAggregator).trustedVerifyBatches( pendingState, numBatch - 1, numBatch - 1, @@ -694,10 +694,10 @@ describe('Proof of efficiency', () => { proofB, proofC, ), - ).to.be.revertedWith('ProofOfEfficiency::verifyBatches: finalNewBatch must be bigger than currentLastVerifiedBatch'); + ).to.be.revertedWith('PolygonZKEVM::verifyBatches: finalNewBatch must be bigger than currentLastVerifiedBatch'); await expect( - proofOfEfficiencyContract.connect(trustedAggregator).trustedVerifyBatches( + polygonZKEVMContract.connect(trustedAggregator).trustedVerifyBatches( pendingState, numBatch - 1, numBatch + 1, @@ -707,11 +707,11 @@ describe('Proof of efficiency', () => { proofB, proofC, ), - ).to.be.revertedWith('ProofOfEfficiency::getInputSnarkBytes: newAccInputHash does not exist'); + ).to.be.revertedWith('PolygonZKEVM::getInputSnarkBytes: newAccInputHash does not exist'); // Verify batch await expect( - proofOfEfficiencyContract.connect(trustedAggregator).trustedVerifyBatches( + polygonZKEVMContract.connect(trustedAggregator).trustedVerifyBatches( pendingState, numBatch - 1, numBatch, @@ -721,7 +721,7 @@ describe('Proof of efficiency', () => { proofB, proofC, ), - ).to.emit(proofOfEfficiencyContract, 'TrustedVerifyBatches') + ).to.emit(polygonZKEVMContract, 'TrustedVerifyBatches') .withArgs(numBatch, newStateRoot, trustedAggregator.address); const finalAggregatorMatic = await maticTokenContract.balanceOf( @@ -734,21 +734,21 @@ describe('Proof of efficiency', () => { it('should verify forced sequenced batch using trustedVerifyBatches', async () => { const l2txData = '0x123456'; - const maticAmount = await proofOfEfficiencyContract.getCurrentBatchFee(); + const maticAmount = await polygonZKEVMContract.getCurrentBatchFee(); const lastGlobalExitRoot = await globalExitRootManager.getLastGlobalExitRoot(); await expect( - maticTokenContract.approve(proofOfEfficiencyContract.address, maticAmount), + maticTokenContract.approve(polygonZKEVMContract.address, maticAmount), ).to.emit(maticTokenContract, 'Approval'); - const lastForcedBatch = (await proofOfEfficiencyContract.lastForceBatch()) + 1; - await expect(proofOfEfficiencyContract.forceBatch(l2txData, maticAmount)) - .to.emit(proofOfEfficiencyContract, 'ForceBatch') + const lastForcedBatch = (await polygonZKEVMContract.lastForceBatch()) + 1; + await expect(polygonZKEVMContract.forceBatch(l2txData, maticAmount)) + .to.emit(polygonZKEVMContract, 'ForceBatch') .withArgs(lastForcedBatch, lastGlobalExitRoot, deployer.address, '0x'); const timestampForceBatch = (await ethers.provider.getBlock()).timestamp; // Increment timestamp - const forceBatchTimeout = await proofOfEfficiencyContract.FORCE_BATCH_TIMEOUT(); + const forceBatchTimeout = await polygonZKEVMContract.FORCE_BATCH_TIMEOUT(); await ethers.provider.send('evm_setNextBlockTimestamp', [timestampForceBatch + forceBatchTimeout.toNumber()]); const forceBatchStruct = { @@ -758,15 +758,15 @@ describe('Proof of efficiency', () => { }; // sequence force batch - await expect(proofOfEfficiencyContract.sequenceForceBatches([forceBatchStruct])) - .to.emit(proofOfEfficiencyContract, 'SequenceForceBatches') + await expect(polygonZKEVMContract.sequenceForceBatches([forceBatchStruct])) + .to.emit(polygonZKEVMContract, 'SequenceForceBatches') .withArgs(lastForcedBatch); // trustedAggregator forge the batch const pendingState = 0; const newLocalExitRoot = '0x0000000000000000000000000000000000000000000000000000000000000000'; const newStateRoot = '0x0000000000000000000000000000000000000000000000000000000000000000'; - const numBatch = (await proofOfEfficiencyContract.lastVerifiedBatch()) + 1; + const numBatch = (await polygonZKEVMContract.lastVerifiedBatch()) + 1; const proofA = ['0', '0']; const proofB = [ ['0', '0'], @@ -780,7 +780,7 @@ describe('Proof of efficiency', () => { // Verify batch await expect( - proofOfEfficiencyContract.connect(trustedAggregator).trustedVerifyBatches( + polygonZKEVMContract.connect(trustedAggregator).trustedVerifyBatches( pendingState, numBatch - 1, numBatch, @@ -790,10 +790,10 @@ describe('Proof of efficiency', () => { proofB, proofC, ), - ).to.emit(proofOfEfficiencyContract, 'VerifyBatch') + ).to.emit(polygonZKEVMContract, 'VerifyBatch') .withArgs(numBatch, trustedAggregator.address) .to.emit(maticTokenContract, 'Transfer') - .withArgs(proofOfEfficiencyContract.address, trustedAggregator.address, maticAmount); + .withArgs(polygonZKEVMContract.address, trustedAggregator.address, maticAmount); const finalAggregatorMatic = await maticTokenContract.balanceOf( trustedAggregator.address, @@ -806,7 +806,7 @@ describe('Proof of efficiency', () => { it('should match the computed SC input with the Js input', async () => { const l2txData = '0x123456'; - const maticAmount = await proofOfEfficiencyContract.getCurrentBatchFee(); + const maticAmount = await polygonZKEVMContract.getCurrentBatchFee(); const currentTimestamp = (await ethers.provider.getBlock()).timestamp; const sequence = { @@ -818,18 +818,18 @@ describe('Proof of efficiency', () => { // Approve tokens await expect( - maticTokenContract.connect(trustedSequencer).approve(proofOfEfficiencyContract.address, maticAmount), + maticTokenContract.connect(trustedSequencer).approve(polygonZKEVMContract.address, maticAmount), ).to.emit(maticTokenContract, 'Approval'); - const lastBatchSequenced = await proofOfEfficiencyContract.lastBatchSequenced(); + const lastBatchSequenced = await polygonZKEVMContract.lastBatchSequenced(); // Sequence - await expect(proofOfEfficiencyContract.connect(trustedSequencer).sequenceBatches([sequence])) - .to.emit(proofOfEfficiencyContract, 'SequenceBatches') + await expect(polygonZKEVMContract.connect(trustedSequencer).sequenceBatches([sequence])) + .to.emit(polygonZKEVMContract, 'SequenceBatches') .withArgs(lastBatchSequenced + 1); - const sentBatchHash = (await proofOfEfficiencyContract.sequencedBatches(lastBatchSequenced + 1)).accInputHash; - const oldAccInputHash = (await proofOfEfficiencyContract.sequencedBatches(0)).accInputHash; + const sentBatchHash = (await polygonZKEVMContract.sequencedBatches(lastBatchSequenced + 1)).accInputHash; + const oldAccInputHash = (await polygonZKEVMContract.sequencedBatches(0)).accInputHash; const batchAccInputHashJs = calculateAccInputHash( oldAccInputHash, @@ -841,10 +841,10 @@ describe('Proof of efficiency', () => { expect(sentBatchHash).to.be.equal(batchAccInputHashJs); // Compute circuit input with the SC function - const currentStateRoot = await proofOfEfficiencyContract.batchNumToStateRoot(0); + const currentStateRoot = await polygonZKEVMContract.batchNumToStateRoot(0); const newStateRoot = '0x0000000000000000000000000000000000000000000000000000000000001234'; const newLocalExitRoot = '0x0000000000000000000000000000000000000000000000000000000000000456'; - const numBatch = (await proofOfEfficiencyContract.lastVerifiedBatch()) + 1; + const numBatch = (await polygonZKEVMContract.lastVerifiedBatch()) + 1; // Compute Js input const inputSnarkJS = await calculateSnarkInput( @@ -861,7 +861,7 @@ describe('Proof of efficiency', () => { // Compute Js input const pendingStateNum = 0; - const circuitInpuSnarkSC = await proofOfEfficiencyContract.getNextSnarkInput( + const circuitInpuSnarkSC = await polygonZKEVMContract.getNextSnarkInput( pendingStateNum, numBatch - 1, numBatch, @@ -874,22 +874,22 @@ describe('Proof of efficiency', () => { it('should match the computed SC input with the Js input in force batches', async () => { const l2txData = '0x123456'; - const maticAmount = await proofOfEfficiencyContract.getCurrentBatchFee(); + const maticAmount = await polygonZKEVMContract.getCurrentBatchFee(); const lastGlobalExitRoot = await globalExitRootManager.getLastGlobalExitRoot(); await expect( - maticTokenContract.approve(proofOfEfficiencyContract.address, maticAmount), + maticTokenContract.approve(polygonZKEVMContract.address, maticAmount), ).to.emit(maticTokenContract, 'Approval'); - const lastForcedBatch = (await proofOfEfficiencyContract.lastForceBatch()).toNumber() + 1; - await expect(proofOfEfficiencyContract.forceBatch(l2txData, maticAmount)) - .to.emit(proofOfEfficiencyContract, 'ForceBatch') + const lastForcedBatch = (await polygonZKEVMContract.lastForceBatch()).toNumber() + 1; + await expect(polygonZKEVMContract.forceBatch(l2txData, maticAmount)) + .to.emit(polygonZKEVMContract, 'ForceBatch') .withArgs(lastForcedBatch, lastGlobalExitRoot, deployer.address, '0x'); const timestampForceBatch = (await ethers.provider.getBlock()).timestamp; // Increment timestamp - const forceBatchTimeout = await proofOfEfficiencyContract.FORCE_BATCH_TIMEOUT(); + const forceBatchTimeout = await polygonZKEVMContract.FORCE_BATCH_TIMEOUT(); await ethers.provider.send('evm_setNextBlockTimestamp', [timestampForceBatch + forceBatchTimeout.toNumber()]); const forceBatchStruct = { @@ -899,13 +899,13 @@ describe('Proof of efficiency', () => { }; // sequence force batch - await expect(proofOfEfficiencyContract.sequenceForceBatches([forceBatchStruct])) - .to.emit(proofOfEfficiencyContract, 'SequenceForceBatches') + await expect(polygonZKEVMContract.sequenceForceBatches([forceBatchStruct])) + .to.emit(polygonZKEVMContract, 'SequenceForceBatches') .withArgs(lastForcedBatch); const sequencedTimestmap = (await ethers.provider.getBlock()).timestamp; - const oldAccInputHash = (await proofOfEfficiencyContract.sequencedBatches(0)).accInputHash; - const batchAccInputHash = (await proofOfEfficiencyContract.sequencedBatches(1)).accInputHash; + const oldAccInputHash = (await polygonZKEVMContract.sequencedBatches(0)).accInputHash; + const batchAccInputHash = (await polygonZKEVMContract.sequencedBatches(1)).accInputHash; const batchAccInputHashJs = calculateAccInputHash( oldAccInputHash, @@ -917,10 +917,10 @@ describe('Proof of efficiency', () => { expect(batchAccInputHash).to.be.equal(batchAccInputHashJs); // Compute circuit input with the SC function - const currentStateRoot = await proofOfEfficiencyContract.batchNumToStateRoot(0); + const currentStateRoot = await polygonZKEVMContract.batchNumToStateRoot(0); const newStateRoot = '0x0000000000000000000000000000000000000000000000000000000000001234'; const newLocalExitRoot = '0x0000000000000000000000000000000000000000000000000000000000000456'; - const numBatch = (await proofOfEfficiencyContract.lastVerifiedBatch()) + 1; + const numBatch = (await polygonZKEVMContract.lastVerifiedBatch()) + 1; // Compute Js input const inputSnarkJS = await calculateSnarkInput( @@ -937,7 +937,7 @@ describe('Proof of efficiency', () => { // Compute Js input const pendingStateNum = 0; - const circuitInpuSnarkSC = await proofOfEfficiencyContract.getNextSnarkInput( + const circuitInpuSnarkSC = await polygonZKEVMContract.getNextSnarkInput( pendingStateNum, numBatch - 1, numBatch, @@ -950,7 +950,7 @@ describe('Proof of efficiency', () => { it('should verify a sequenced batch using verifyBatches', async () => { const l2txData = '0x123456'; - const maticAmount = await proofOfEfficiencyContract.getCurrentBatchFee(); + const maticAmount = await polygonZKEVMContract.getCurrentBatchFee(); const currentTimestamp = (await ethers.provider.getBlock()).timestamp; const sequence = { @@ -962,20 +962,20 @@ describe('Proof of efficiency', () => { // Approve tokens await expect( - maticTokenContract.connect(trustedSequencer).approve(proofOfEfficiencyContract.address, maticAmount), + maticTokenContract.connect(trustedSequencer).approve(polygonZKEVMContract.address, maticAmount), ).to.emit(maticTokenContract, 'Approval'); - const lastBatchSequenced = await proofOfEfficiencyContract.lastBatchSequenced(); + const lastBatchSequenced = await polygonZKEVMContract.lastBatchSequenced(); // Sequence Batches - await expect(proofOfEfficiencyContract.connect(trustedSequencer).sequenceBatches([sequence])) - .to.emit(proofOfEfficiencyContract, 'SequenceBatches') + await expect(polygonZKEVMContract.connect(trustedSequencer).sequenceBatches([sequence])) + .to.emit(polygonZKEVMContract, 'SequenceBatches') .withArgs(lastBatchSequenced + 1); // aggregator forge the batch const pendingState = 0; const newLocalExitRoot = '0x0000000000000000000000000000000000000000000000000000000000000001'; const newStateRoot = '0x0000000000000000000000000000000000000000000000000000000000000002'; - const numBatch = (await proofOfEfficiencyContract.lastVerifiedBatch()) + 1; + const numBatch = (await polygonZKEVMContract.lastVerifiedBatch()) + 1; const proofA = ['0', '0']; const proofB = [ ['0', '0'], @@ -987,12 +987,12 @@ describe('Proof of efficiency', () => { aggregator1.address, ); - const sequencedBatchData = await proofOfEfficiencyContract.sequencedBatches(1); + const sequencedBatchData = await polygonZKEVMContract.sequencedBatches(1); const { sequencedTimestamp } = sequencedBatchData; - const currentBatchFee = await proofOfEfficiencyContract.batchFee(); + const currentBatchFee = await polygonZKEVMContract.batchFee(); await expect( - proofOfEfficiencyContract.connect(aggregator1).verifyBatches( + polygonZKEVMContract.connect(aggregator1).verifyBatches( pendingState, numBatch - 1, numBatch, @@ -1002,12 +1002,12 @@ describe('Proof of efficiency', () => { proofB, proofC, ), - ).to.be.revertedWith('ProofOfEfficiency::verifyBatches: trusted aggregator timeout not expired'); + ).to.be.revertedWith('PolygonZKEVM::verifyBatches: trusted aggregator timeout not expired'); await ethers.provider.send('evm_setNextBlockTimestamp', [sequencedTimestamp.toNumber() + trustedAggregatorTimeoutDefault - 1]); await expect( - proofOfEfficiencyContract.connect(aggregator1).verifyBatches( + polygonZKEVMContract.connect(aggregator1).verifyBatches( pendingState, numBatch - 1, numBatch, @@ -1017,10 +1017,10 @@ describe('Proof of efficiency', () => { proofB, proofC, ), - ).to.be.revertedWith('ProofOfEfficiency::verifyBatches: trusted aggregator timeout not expired'); + ).to.be.revertedWith('PolygonZKEVM::verifyBatches: trusted aggregator timeout not expired'); await expect( - proofOfEfficiencyContract.connect(aggregator1).verifyBatches( + polygonZKEVMContract.connect(aggregator1).verifyBatches( pendingState, numBatch - 1, numBatch + 1, @@ -1030,11 +1030,11 @@ describe('Proof of efficiency', () => { proofB, proofC, ), - ).to.be.revertedWith('ProofOfEfficiency::getInputSnarkBytes: newAccInputHash does not exist'); + ).to.be.revertedWith('PolygonZKEVM::getInputSnarkBytes: newAccInputHash does not exist'); // Verify batch await expect( - proofOfEfficiencyContract.connect(aggregator1).verifyBatches( + polygonZKEVMContract.connect(aggregator1).verifyBatches( pendingState, numBatch - 1, numBatch, @@ -1044,7 +1044,7 @@ describe('Proof of efficiency', () => { proofB, proofC, ), - ).to.emit(proofOfEfficiencyContract, 'VerifyBatches') + ).to.emit(polygonZKEVMContract, 'VerifyBatches') .withArgs(numBatch, newStateRoot, aggregator1.address); const verifyTimestamp = (await ethers.provider.getBlock()).timestamp; @@ -1058,55 +1058,55 @@ describe('Proof of efficiency', () => { // Check pending state const lastPendingstate = 1; - expect(lastPendingstate).to.be.equal(await proofOfEfficiencyContract.lastPendingState()); + expect(lastPendingstate).to.be.equal(await polygonZKEVMContract.lastPendingState()); - const pendingStateData = await proofOfEfficiencyContract.pendingStateTransitions(lastPendingstate); + const pendingStateData = await polygonZKEVMContract.pendingStateTransitions(lastPendingstate); expect(verifyTimestamp).to.be.equal(pendingStateData.timestamp); expect(numBatch).to.be.equal(pendingStateData.lastVerifiedBatch); expect(newLocalExitRoot).to.be.equal(pendingStateData.exitRoot); expect(newStateRoot).to.be.equal(pendingStateData.stateRoot); // Try consolidate state - expect(0).to.be.equal(await proofOfEfficiencyContract.lastVerifiedBatch()); + expect(0).to.be.equal(await polygonZKEVMContract.lastVerifiedBatch()); // Pending state can't be 0 await expect( - proofOfEfficiencyContract.consolidatePendingState(0), - ).to.be.revertedWith('ProofOfEfficiency::consolidatePendingState: pendingStateNum must invalid'); + polygonZKEVMContract.consolidatePendingState(0), + ).to.be.revertedWith('PolygonZKEVM::consolidatePendingState: pendingStateNum must invalid'); // Pending state does not exist await expect( - proofOfEfficiencyContract.consolidatePendingState(2), - ).to.be.revertedWith('ProofOfEfficiency::consolidatePendingState: pendingStateNum must invalid'); + polygonZKEVMContract.consolidatePendingState(2), + ).to.be.revertedWith('PolygonZKEVM::consolidatePendingState: pendingStateNum must invalid'); // Not ready to be consolidated await expect( - proofOfEfficiencyContract.consolidatePendingState(lastPendingstate), - ).to.be.revertedWith('ProofOfEfficiency::consolidatePendingState: pending state is not ready to be consolidated'); + polygonZKEVMContract.consolidatePendingState(lastPendingstate), + ).to.be.revertedWith('PolygonZKEVM::consolidatePendingState: pending state is not ready to be consolidated'); await ethers.provider.send('evm_setNextBlockTimestamp', [verifyTimestamp + pendingStateTimeoutDefault - 1]); await expect( - proofOfEfficiencyContract.consolidatePendingState(lastPendingstate), - ).to.be.revertedWith('ProofOfEfficiency::consolidatePendingState: pending state is not ready to be consolidated'); + polygonZKEVMContract.consolidatePendingState(lastPendingstate), + ).to.be.revertedWith('PolygonZKEVM::consolidatePendingState: pending state is not ready to be consolidated'); await expect( - proofOfEfficiencyContract.consolidatePendingState(lastPendingstate), - ).to.emit(proofOfEfficiencyContract, 'ConsolidatePendingState') + polygonZKEVMContract.consolidatePendingState(lastPendingstate), + ).to.emit(polygonZKEVMContract, 'ConsolidatePendingState') .withArgs(numBatch, newStateRoot, lastPendingstate); // Pending state already consolidated await expect( - proofOfEfficiencyContract.consolidatePendingState(1), - ).to.be.revertedWith('ProofOfEfficiency::consolidatePendingState: pendingStateNum must invalid'); + polygonZKEVMContract.consolidatePendingState(1), + ).to.be.revertedWith('PolygonZKEVM::consolidatePendingState: pendingStateNum must invalid'); // Fee es divided because is was fast verified - const multiplierFee = await proofOfEfficiencyContract.multiplierBatchFee(); - expect((currentBatchFee.mul(1000)).div(multiplierFee)).to.be.equal(await proofOfEfficiencyContract.batchFee()); + const multiplierFee = await polygonZKEVMContract.multiplierBatchFee(); + expect((currentBatchFee.mul(1000)).div(multiplierFee)).to.be.equal(await polygonZKEVMContract.batchFee()); // Check pending state variables - expect(1).to.be.equal(await proofOfEfficiencyContract.lastVerifiedBatch()); - expect(newStateRoot).to.be.equal(await proofOfEfficiencyContract.batchNumToStateRoot(1)); - expect(1).to.be.equal(await proofOfEfficiencyContract.lastPendingStateConsolidated()); + expect(1).to.be.equal(await polygonZKEVMContract.lastVerifiedBatch()); + expect(newStateRoot).to.be.equal(await polygonZKEVMContract.batchNumToStateRoot(1)); + expect(1).to.be.equal(await polygonZKEVMContract.lastPendingStateConsolidated()); }); }); diff --git a/test/contracts/real-prover/real-flow.test.js b/test/contracts/real-prover/real-flow.test.js index 1a4a9eb50..e5fbaf923 100644 --- a/test/contracts/real-prover/real-flow.test.js +++ b/test/contracts/real-prover/real-flow.test.js @@ -18,7 +18,7 @@ describe('Real flow test', () => { let verifierContract; let maticTokenContract; let bridgeContract; - let proofOfEfficiencyContract; + let polygonZKEVMContract; let globalExitRootManager; let deployer; let trustedSequencer; @@ -73,16 +73,16 @@ describe('Real flow test', () => { bridgeContract = await upgrades.deployProxy(bridgeFactory, [], { initializer: false }); // deploy PoE - const ProofOfEfficiencyFactory = await ethers.getContractFactory('ProofOfEfficiencyMock'); - proofOfEfficiencyContract = await upgrades.deployProxy(ProofOfEfficiencyFactory, [], { initializer: false }); + const PolygonZKEVMFactory = await ethers.getContractFactory('PolygonZKEVMMock'); + polygonZKEVMContract = await upgrades.deployProxy(PolygonZKEVMFactory, [], { initializer: false }); // deploy global exit root manager const globalExitRootManagerFactory = await ethers.getContractFactory('GlobalExitRootManagerMock'); - globalExitRootManager = await globalExitRootManagerFactory.deploy(proofOfEfficiencyContract.address, bridgeContract.address); - await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, proofOfEfficiencyContract.address); + globalExitRootManager = await globalExitRootManagerFactory.deploy(polygonZKEVMContract.address, bridgeContract.address); + await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, polygonZKEVMContract.address); - await proofOfEfficiencyContract.initialize( + await polygonZKEVMContract.initialize( globalExitRootManager.address, maticTokenContract.address, verifierContract.address, @@ -110,14 +110,14 @@ describe('Real flow test', () => { const batchesNum = batchesData.length; // Approve tokens - const maticAmount = await proofOfEfficiencyContract.getCurrentBatchFee(); + const maticAmount = await polygonZKEVMContract.getCurrentBatchFee(); await expect( - maticTokenContract.connect(trustedSequencer).approve(proofOfEfficiencyContract.address, maticAmount.mul(batchesNum)), + maticTokenContract.connect(trustedSequencer).approve(polygonZKEVMContract.address, maticAmount.mul(batchesNum)), ).to.emit(maticTokenContract, 'Approval'); // prepare PoE - await proofOfEfficiencyContract.setVerifiedBatch(inputJson.oldNumBatch); - await proofOfEfficiencyContract.setSequencedBatch(inputJson.oldNumBatch); + await polygonZKEVMContract.setVerifiedBatch(inputJson.oldNumBatch); + await polygonZKEVMContract.setSequencedBatch(inputJson.oldNumBatch); const lastTimestamp = batchesData[batchesNum - 1].timestamp; await ethers.provider.send('evm_setNextBlockTimestamp', [lastTimestamp]); @@ -146,12 +146,12 @@ describe('Real flow test', () => { const { globalExitRoot } = batchesData[0]; await globalExitRootManager.setGlobalExitRoot(globalExitRoot, randomTimestamp); - const lastBatchSequenced = await proofOfEfficiencyContract.lastBatchSequenced(); + const lastBatchSequenced = await polygonZKEVMContract.lastBatchSequenced(); // check trusted sequencer const trustedSequencerAddress = inputJson.singleBatchData[i].sequencerAddr; if (trustedSequencer.address !== trustedSequencerAddress) { - await proofOfEfficiencyContract.connect(admin).setTrustedSequencer(trustedSequencerAddress); + await polygonZKEVMContract.connect(admin).setTrustedSequencer(trustedSequencerAddress); await ethers.provider.send('hardhat_impersonateAccount', [trustedSequencerAddress]); trustedSequencer = await ethers.getSigner(trustedSequencerAddress); await deployer.sendTransaction({ @@ -159,19 +159,19 @@ describe('Real flow test', () => { value: ethers.utils.parseEther('4'), }); await expect( - maticTokenContract.connect(trustedSequencer).approve(proofOfEfficiencyContract.address, maticAmount.mul(batchesNum)), + maticTokenContract.connect(trustedSequencer).approve(polygonZKEVMContract.address, maticAmount.mul(batchesNum)), ).to.emit(maticTokenContract, 'Approval'); await maticTokenContract.transfer(trustedSequencer.address, ethers.utils.parseEther('100')); } // Sequence Batches - await expect(proofOfEfficiencyContract.connect(trustedSequencer).sequenceBatches([currentSequence])) - .to.emit(proofOfEfficiencyContract, 'SequenceBatches') + await expect(polygonZKEVMContract.connect(trustedSequencer).sequenceBatches([currentSequence])) + .to.emit(polygonZKEVMContract, 'SequenceBatches') .withArgs(Number(lastBatchSequenced) + 1); } // Set state and exit root - await proofOfEfficiencyContract.setStateRoot(inputJson.oldStateRoot, inputJson.oldNumBatch); + await polygonZKEVMContract.setStateRoot(inputJson.oldStateRoot, inputJson.oldNumBatch); const { aggregatorAddress } = inputJson; await ethers.provider.send('hardhat_impersonateAccount', [aggregatorAddress]); @@ -180,9 +180,9 @@ describe('Real flow test', () => { to: aggregatorAddress, value: ethers.utils.parseEther('4'), }); - await proofOfEfficiencyContract.connect(admin).setTrustedAggregator(aggregatorAddress); + await polygonZKEVMContract.connect(admin).setTrustedAggregator(aggregatorAddress); - const batchAccInputHash = (await proofOfEfficiencyContract.sequencedBatches(inputJson.newNumBatch)).accInputHash; + const batchAccInputHash = (await polygonZKEVMContract.sequencedBatches(inputJson.newNumBatch)).accInputHash; expect(batchAccInputHash).to.be.equal(inputJson.newAccInputHash); const { @@ -212,7 +212,7 @@ describe('Real flow test', () => { const pendingStateNum = 0; // Verify batch await expect( - proofOfEfficiencyContract.connect(aggregator).trustedVerifyBatches( + polygonZKEVMContract.connect(aggregator).trustedVerifyBatches( pendingStateNum, oldNumBatch, newNumBatch, @@ -222,7 +222,7 @@ describe('Real flow test', () => { proofB, proofC, ), - ).to.emit(proofOfEfficiencyContract, 'TrustedVerifyBatches') + ).to.emit(polygonZKEVMContract, 'TrustedVerifyBatches') .withArgs(newNumBatch, newStateRoot, aggregator.address); }); }); diff --git a/test/contracts/snark_stark_input.test.js b/test/contracts/snark_stark_input.test.js index 43ab8baf8..b1cba8314 100644 --- a/test/contracts/snark_stark_input.test.js +++ b/test/contracts/snark_stark_input.test.js @@ -3,8 +3,8 @@ const { ethers, upgrades } = require('hardhat'); const { contractUtils } = require('@0xpolygonhermez/zkevm-commonjs'); -describe('Proof of efficiency snark stark input test', () => { - let proofOfEfficiencyContract; +describe('Polygon ZK-EVM snark stark input test', () => { + let polygonZKEVMContract; const genesisRoot = '0x0000000000000000000000000000000000000000000000000000000000000001'; let randomSigner; @@ -18,10 +18,10 @@ describe('Proof of efficiency snark stark input test', () => { // load signers [randomSigner] = await ethers.getSigners(); - // deploy proof of efficiency - const ProofOfEfficiencyFactory = await ethers.getContractFactory('ProofOfEfficiencyMock'); - proofOfEfficiencyContract = await upgrades.deployProxy( - ProofOfEfficiencyFactory, + // deploy Polygon ZK-EVM + const PolygonZKEVMFactory = await ethers.getContractFactory('PolygonZKEVMMock'); + polygonZKEVMContract = await upgrades.deployProxy( + PolygonZKEVMFactory, [ randomSigner.address, randomSigner.address, @@ -42,7 +42,7 @@ describe('Proof of efficiency snark stark input test', () => { ], ); - await proofOfEfficiencyContract.deployed(); + await polygonZKEVMContract.deployed(); }); it('Check Accumualte input Hash', async () => { @@ -60,7 +60,7 @@ describe('Proof of efficiency snark stark input test', () => { timestamp, sequencerAddr, ); - const accumulateInputHashSC = await proofOfEfficiencyContract.calculateAccInputHash( + const accumulateInputHashSC = await polygonZKEVMContract.calculateAccInputHash( oldAccInputHash, batchL2Data, globalExitRoot, @@ -85,9 +85,9 @@ describe('Proof of efficiency snark stark input test', () => { const lastPendingStateConsolidated = 0; const sequencedTimestamp = 999; // set smart contract with correct parameters - await proofOfEfficiencyContract.setStateRoot(oldStateRoot, oldNumBatch); - await proofOfEfficiencyContract.setSequencedBatches(newNumBatch, newAccInputHash, sequencedTimestamp, lastPendingStateConsolidated); - await proofOfEfficiencyContract.setSequencedBatch(1); + await polygonZKEVMContract.setStateRoot(oldStateRoot, oldNumBatch); + await polygonZKEVMContract.setSequencedBatches(newNumBatch, newAccInputHash, sequencedTimestamp, lastPendingStateConsolidated); + await polygonZKEVMContract.setSequencedBatch(1); await ethers.provider.send('hardhat_impersonateAccount', [aggregatorAddress]); const aggregator = await ethers.getSigner(aggregatorAddress); @@ -98,7 +98,7 @@ describe('Proof of efficiency snark stark input test', () => { // Compute SC input const pendingStateNum = 0; - const inputSnarkSC = await proofOfEfficiencyContract.connect(aggregator).getNextSnarkInput( + const inputSnarkSC = await polygonZKEVMContract.connect(aggregator).getNextSnarkInput( pendingStateNum, oldNumBatch, newNumBatch, From e5038c6dea2f7a99d527eb7f1bee3622ed31f496 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Tue, 20 Dec 2022 10:08:19 +0100 Subject: [PATCH 51/71] rename bridge --- .githooks/pre-commit | 4 +- .vscode/settings.json | 2 +- README.md | 2 +- compiled-contracts/Bridge.json | 4 +- compiled-contracts/BridgeMock.json | 10 +- compiled-contracts/GlobalExitRootManager.json | 4 +- .../GlobalExitRootManagerL2.json | 4 +- .../GlobalExitRootManagerL2Mock.json | 4 +- .../GlobalExitRootManagerMock.json | 4 +- compiled-contracts/PolygonZKEVM.json | 8 +- compiled-contracts/PolygonZKEVMBridge.json | 706 ++++++++++++++++ .../PolygonZKEVMBridgeMock.json | 797 ++++++++++++++++++ compiled-contracts/PolygonZKEVMMock.json | 8 +- compiled-contracts/ProofOfEfficiency.json | 8 +- compiled-contracts/ProofOfEfficiencyMock.json | 8 +- compiled-contracts/TokenWrapped.json | 4 +- contracts/GlobalExitRootManager.sol | 12 +- contracts/GlobalExitRootManagerL2.sol | 6 +- contracts/PolygonZKEVM.sol | 20 +- .../{Bridge.sol => PolygonZKEVMBridge.sol} | 46 +- .../interfaces/IBridgeMessageReceiver.sol | 2 +- .../{IBridge.sol => IPolygonZKEVMBridge.sol} | 2 +- contracts/lib/TokenWrapped.sol | 2 +- .../mocks/GlobalExitRootManagerL2Mock.sol | 15 +- contracts/mocks/GlobalExitRootManagerMock.sol | 9 +- ...dgeMock.sol => PolygonZKEVMBridgeMock.sol} | 8 +- contracts/mocks/PolygonZKEVMMock.sol | 2 +- deployment/README.md | 2 +- deployment/deployPoE_v2-0.js | 44 +- deployment/deploy_parameters.json.example | 2 +- deployment/genesis-gen.json | 4 +- deployment/genesis.json | 2 +- deployment/verifyPoE_v2-0.js | 2 +- docker/scripts/genesis_docker.json | 2 +- docker/scripts/genesis_gen_docker.json | 4 +- docs/GlobalExitRootManager.md | 2 +- docs/GlobalExitRootManagerL2.md | 2 +- docs/PolygonZKEVM.md | 12 +- docs/{Bridge.md => PolygonZKEVMBridge.md} | 2 +- docs/ProofOfEfficiency.md | 702 --------------- index.js | 8 +- test/contracts/bridge.test.js | 246 +++--- test/contracts/bridgeMock.test.js | 46 +- test/contracts/bridge_permit.test.js | 80 +- test/contracts/emergencyManager.test.js | 42 +- test/contracts/globalExitRootManager.test.js | 12 +- .../contracts/globalExitRootManagerL2.test.js | 14 +- test/contracts/proofOfEfficiency.test.js | 16 +- test/contracts/real-prover/real-flow.test.js | 14 +- 49 files changed, 1890 insertions(+), 1071 deletions(-) create mode 100644 compiled-contracts/PolygonZKEVMBridge.json create mode 100644 compiled-contracts/PolygonZKEVMBridgeMock.json rename contracts/{Bridge.sol => PolygonZKEVMBridge.sol} (93%) rename contracts/interfaces/{IBridge.sol => IPolygonZKEVMBridge.sol} (97%) rename contracts/mocks/{BridgeMock.sol => PolygonZKEVMBridgeMock.sol} (86%) rename docs/{Bridge.md => PolygonZKEVMBridge.md} (98%) delete mode 100644 docs/ProofOfEfficiency.md diff --git a/.githooks/pre-commit b/.githooks/pre-commit index f0ff5b86c..3ee490945 100755 --- a/.githooks/pre-commit +++ b/.githooks/pre-commit @@ -6,11 +6,11 @@ if npm run lint; then npx hardhat compile --force npm run docgen git add docs - cp artifacts/contracts/Bridge.sol/Bridge.json compiled-contracts/ + cp artifacts/contracts/PolygonZKEVMBridge.sol/PolygonZKEVMBridge.json compiled-contracts/ cp artifacts/contracts/GlobalExitRootManager.sol/GlobalExitRootManager.json compiled-contracts/ cp artifacts/contracts/GlobalExitRootManagerL2.sol/GlobalExitRootManagerL2.json compiled-contracts/ cp artifacts/contracts/lib/TokenWrapped.sol/TokenWrapped.json compiled-contracts/ - cp artifacts/contracts/mocks/BridgeMock.sol/BridgeMock.json compiled-contracts/ + cp artifacts/contracts/mocks/PolygonZKEVMBridgeMock.sol/PolygonZKEVMBridgeMock.json compiled-contracts/ cp artifacts/contracts/mocks/ERC20PermitMock.sol/ERC20PermitMock.json compiled-contracts/ cp artifacts/contracts/mocks/GlobalExitRootManagerL2Mock.sol/GlobalExitRootManagerL2Mock.json compiled-contracts/ cp artifacts/contracts/mocks/GlobalExitRootManagerMock.sol/GlobalExitRootManagerMock.json compiled-contracts/ diff --git a/.vscode/settings.json b/.vscode/settings.json index 1ba1c63d0..5ec6e1ece 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,5 @@ { - "editor.formatOnSave": true, + "editor.formatOnSave": false, "solidity.linter": "solhint", "solidity.compileUsingRemoteVersion": "v0.8.15+commit.e14f2714" } diff --git a/README.md b/README.md index ca3e7d1f1..eabc738c2 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ Private keys and mnemonics contained in this repository are used for internal te ## Repository structure - `contracts`: zkevm contracts - - `Bridge.sol`: transfer assets between chains + - `PolygonZKEVMBridge.sol`: transfer assets between chains - `GlobalExitRootManager.sol`: manage global exit root in L1 - `GlobalExitRootManagerL2.sol`: manage global exit root in L2 - `PolygonZKEVM.sol`: consensus algorithm used by polyhon hermez zkevm diff --git a/compiled-contracts/Bridge.json b/compiled-contracts/Bridge.json index e62e3962a..6756a527b 100644 --- a/compiled-contracts/Bridge.json +++ b/compiled-contracts/Bridge.json @@ -1,7 +1,7 @@ { "_format": "hh-sol-artifact-1", - "contractName": "Bridge", - "sourceName": "contracts/Bridge.sol", + "contractName": "PolygonZKEVMBridge", + "sourceName": "contracts/PolygonZKEVMBridge.sol", "abi": [ { "anonymous": false, diff --git a/compiled-contracts/BridgeMock.json b/compiled-contracts/BridgeMock.json index 3721bf068..e2095b654 100644 --- a/compiled-contracts/BridgeMock.json +++ b/compiled-contracts/BridgeMock.json @@ -1,7 +1,7 @@ { "_format": "hh-sol-artifact-1", - "contractName": "BridgeMock", - "sourceName": "contracts/mocks/BridgeMock.sol", + "contractName": "PolygonZKEVMBridgeMock", + "sourceName": "contracts/mocks/PolygonZKEVMBridgeMock.sol", "abi": [ { "anonymous": false, @@ -577,7 +577,7 @@ }, { "inputs": [], - "name": "maxEtherBridge", + "name": "maxEtherPolygonZKEVMBridge", "outputs": [ { "internalType": "uint256", @@ -677,11 +677,11 @@ "inputs": [ { "internalType": "uint256", - "name": "_maxEtherBridge", + "name": "_maxEtherPolygonZKEVMBridge", "type": "uint256" } ], - "name": "setMaxEtherBridge", + "name": "setMaxEtherPolygonZKEVMBridge", "outputs": [], "stateMutability": "nonpayable", "type": "function" diff --git a/compiled-contracts/GlobalExitRootManager.json b/compiled-contracts/GlobalExitRootManager.json index cbe9a9d83..9d6a74abe 100644 --- a/compiled-contracts/GlobalExitRootManager.json +++ b/compiled-contracts/GlobalExitRootManager.json @@ -151,8 +151,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506104a6806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461015e57600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610408565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610408565b610171565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e36600461043d565b6102cd565b600554610146906001600160a01b031681565b6040516001600160a01b0390911681526020016100a0565b600454610146906001600160a01b031681565b6005546001600160a01b031633148061019457506004546001600160a01b031633145b61020b5760405162461bcd60e51b815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b6005546001600160a01b031633036102235760018190555b6004546001600160a01b0316330361023b5760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036102c957600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156102ed5750600054600160ff909116105b806103075750303b158015610307575060005460ff166001145b61036a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610202565b6000805460ff19166001179055801561038d576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b03199283161790925560048054928516929091169190911790558015610403576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561041a57600080fd5b5035919050565b80356001600160a01b038116811461043857600080fd5b919050565b6000806040838503121561045057600080fd5b61045983610421565b915061046760208401610421565b9050925092905056fea26469706673582212201172b33a2ed168bc54fb42fa55e7d7a9943fd75b837c8fdd495e92b81e07498564736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461015e57600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610408565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610408565b610171565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e36600461043d565b6102cd565b600554610146906001600160a01b031681565b6040516001600160a01b0390911681526020016100a0565b600454610146906001600160a01b031681565b6005546001600160a01b031633148061019457506004546001600160a01b031633145b61020b5760405162461bcd60e51b815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b6005546001600160a01b031633036102235760018190555b6004546001600160a01b0316330361023b5760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036102c957600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156102ed5750600054600160ff909116105b806103075750303b158015610307575060005460ff166001145b61036a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610202565b6000805460ff19166001179055801561038d576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b03199283161790925560048054928516929091169190911790558015610403576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561041a57600080fd5b5035919050565b80356001600160a01b038116811461043857600080fd5b919050565b6000806040838503121561045057600080fd5b61045983610421565b915061046760208401610421565b9050925092905056fea26469706673582212201172b33a2ed168bc54fb42fa55e7d7a9943fd75b837c8fdd495e92b81e07498564736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506104a6806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461015e57600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610408565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610408565b610171565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e36600461043d565b6102cd565b600554610146906001600160a01b031681565b6040516001600160a01b0390911681526020016100a0565b600454610146906001600160a01b031681565b6005546001600160a01b031633148061019457506004546001600160a01b031633145b61020b5760405162461bcd60e51b815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b6005546001600160a01b031633036102235760018190555b6004546001600160a01b0316330361023b5760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036102c957600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156102ed5750600054600160ff909116105b806103075750303b158015610307575060005460ff166001145b61036a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610202565b6000805460ff19166001179055801561038d576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b03199283161790925560048054928516929091169190911790558015610403576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561041a57600080fd5b5035919050565b80356001600160a01b038116811461043857600080fd5b919050565b6000806040838503121561045057600080fd5b61045983610421565b915061046760208401610421565b9050925092905056fea2646970667358221220e0c9f543d7ca227ec6586a5cb83adb5f68d8cd8e59ad65bc59d711392bc13c1d64736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461015e57600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610408565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610408565b610171565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e36600461043d565b6102cd565b600554610146906001600160a01b031681565b6040516001600160a01b0390911681526020016100a0565b600454610146906001600160a01b031681565b6005546001600160a01b031633148061019457506004546001600160a01b031633145b61020b5760405162461bcd60e51b815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b6005546001600160a01b031633036102235760018190555b6004546001600160a01b0316330361023b5760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036102c957600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156102ed5750600054600160ff909116105b806103075750303b158015610307575060005460ff166001145b61036a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610202565b6000805460ff19166001179055801561038d576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b03199283161790925560048054928516929091169190911790558015610403576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561041a57600080fd5b5035919050565b80356001600160a01b038116811461043857600080fd5b919050565b6000806040838503121561045057600080fd5b61045983610421565b915061046760208401610421565b9050925092905056fea2646970667358221220e0c9f543d7ca227ec6586a5cb83adb5f68d8cd8e59ad65bc59d711392bc13c1d64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/GlobalExitRootManagerL2.json b/compiled-contracts/GlobalExitRootManagerL2.json index f03cdfb1c..7f3b42deb 100644 --- a/compiled-contracts/GlobalExitRootManagerL2.json +++ b/compiled-contracts/GlobalExitRootManagerL2.json @@ -73,8 +73,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5060405161022f38038061022f83398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b61019c806100936000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b36600461014d565b60006020819052908152604090205481565b6100a061009b36600461014d565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b031633146101485760405162461bcd60e51b815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a75706461746545604482015273786974526f6f743a204f4e4c595f42524944474560601b606482015260840160405180910390fd5b600155565b60006020828403121561015f57600080fd5b503591905056fea2646970667358221220c3d468a91666aebe6b0b1c0d82e7915c70f7879e38ddb928138328ccd71d725164736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b36600461014d565b60006020819052908152604090205481565b6100a061009b36600461014d565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b031633146101485760405162461bcd60e51b815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a75706461746545604482015273786974526f6f743a204f4e4c595f42524944474560601b606482015260840160405180910390fd5b600155565b60006020828403121561015f57600080fd5b503591905056fea2646970667358221220c3d468a91666aebe6b0b1c0d82e7915c70f7879e38ddb928138328ccd71d725164736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5060405161022f38038061022f83398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b61019c806100936000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b36600461014d565b60006020819052908152604090205481565b6100a061009b36600461014d565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b031633146101485760405162461bcd60e51b815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a75706461746545604482015273786974526f6f743a204f4e4c595f42524944474560601b606482015260840160405180910390fd5b600155565b60006020828403121561015f57600080fd5b503591905056fea2646970667358221220b7ed0b6d80ce4ea297aff7a1977d5133c10cfbcd483b6a53c8660630270fa3dc64736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b36600461014d565b60006020819052908152604090205481565b6100a061009b36600461014d565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b031633146101485760405162461bcd60e51b815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a75706461746545604482015273786974526f6f743a204f4e4c595f42524944474560601b606482015260840160405180910390fd5b600155565b60006020828403121561015f57600080fd5b503591905056fea2646970667358221220b7ed0b6d80ce4ea297aff7a1977d5133c10cfbcd483b6a53c8660630270fa3dc64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/GlobalExitRootManagerL2Mock.json b/compiled-contracts/GlobalExitRootManagerL2Mock.json index a847f308b..f3b3f2af9 100644 --- a/compiled-contracts/GlobalExitRootManagerL2Mock.json +++ b/compiled-contracts/GlobalExitRootManagerL2Mock.json @@ -104,8 +104,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5060405161029538038061029583398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b610202806100936000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806301fd904414610067578063116c40c314610083578063257b36321461009857806333d6247d146100b857806396e07459146100cb578063a3c573eb146100eb575b600080fd5b61007060015481565b6040519081526020015b60405180910390f35b610096610091366004610191565b600155565b005b6100706100a6366004610191565b60006020819052908152604090205481565b6100966100c6366004610191565b610116565b6100966100d93660046101aa565b60009182526020829052604090912055565b6002546100fe906001600160a01b031681565b6040516001600160a01b03909116815260200161007a565b6002546001600160a01b031633146100915760405162461bcd60e51b815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a75706461746545604482015273786974526f6f743a204f4e4c595f42524944474560601b606482015260840160405180910390fd5b6000602082840312156101a357600080fd5b5035919050565b600080604083850312156101bd57600080fd5b5050803592602090910135915056fea2646970667358221220e203ca8e4727ad38449876efc2d93b4649c22a927ce8d87d9ecdc30c42b56b9a64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c806301fd904414610067578063116c40c314610083578063257b36321461009857806333d6247d146100b857806396e07459146100cb578063a3c573eb146100eb575b600080fd5b61007060015481565b6040519081526020015b60405180910390f35b610096610091366004610191565b600155565b005b6100706100a6366004610191565b60006020819052908152604090205481565b6100966100c6366004610191565b610116565b6100966100d93660046101aa565b60009182526020829052604090912055565b6002546100fe906001600160a01b031681565b6040516001600160a01b03909116815260200161007a565b6002546001600160a01b031633146100915760405162461bcd60e51b815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a75706461746545604482015273786974526f6f743a204f4e4c595f42524944474560601b606482015260840160405180910390fd5b6000602082840312156101a357600080fd5b5035919050565b600080604083850312156101bd57600080fd5b5050803592602090910135915056fea2646970667358221220e203ca8e4727ad38449876efc2d93b4649c22a927ce8d87d9ecdc30c42b56b9a64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5060405161029538038061029583398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b610202806100936000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806301fd904414610067578063116c40c314610083578063257b36321461009857806333d6247d146100b857806396e07459146100cb578063a3c573eb146100eb575b600080fd5b61007060015481565b6040519081526020015b60405180910390f35b610096610091366004610191565b600155565b005b6100706100a6366004610191565b60006020819052908152604090205481565b6100966100c6366004610191565b610116565b6100966100d93660046101aa565b60009182526020829052604090912055565b6002546100fe906001600160a01b031681565b6040516001600160a01b03909116815260200161007a565b6002546001600160a01b031633146100915760405162461bcd60e51b815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a75706461746545604482015273786974526f6f743a204f4e4c595f42524944474560601b606482015260840160405180910390fd5b6000602082840312156101a357600080fd5b5035919050565b600080604083850312156101bd57600080fd5b5050803592602090910135915056fea2646970667358221220921a5c1f48451fe1bc13c1dcd70f9b1391e2ab440fabb6d6bc05555573d279c364736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c806301fd904414610067578063116c40c314610083578063257b36321461009857806333d6247d146100b857806396e07459146100cb578063a3c573eb146100eb575b600080fd5b61007060015481565b6040519081526020015b60405180910390f35b610096610091366004610191565b600155565b005b6100706100a6366004610191565b60006020819052908152604090205481565b6100966100c6366004610191565b610116565b6100966100d93660046101aa565b60009182526020829052604090912055565b6002546100fe906001600160a01b031681565b6040516001600160a01b03909116815260200161007a565b6002546001600160a01b031633146100915760405162461bcd60e51b815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a75706461746545604482015273786974526f6f743a204f4e4c595f42524944474560601b606482015260840160405180910390fd5b6000602082840312156101a357600080fd5b5035919050565b600080604083850312156101bd57600080fd5b5050803592602090910135915056fea2646970667358221220921a5c1f48451fe1bc13c1dcd70f9b1391e2ab440fabb6d6bc05555573d279c364736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/GlobalExitRootManagerMock.json b/compiled-contracts/GlobalExitRootManagerMock.json index a83b292a4..d0d6acd6b 100644 --- a/compiled-contracts/GlobalExitRootManagerMock.json +++ b/compiled-contracts/GlobalExitRootManagerMock.json @@ -198,8 +198,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5060405161076f38038061076f83398101604081905261002f916101bb565b6100398282610040565b50506101ee565b600054610100900460ff16158080156100605750600054600160ff909116105b8061008b57506100793061019060201b6104a31760201c565b15801561008b575060005460ff166001145b6100f25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015610115576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561018b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b80516001600160a01b03811681146101b657600080fd5b919050565b600080604083850312156101ce57600080fd5b6101d78361019f565b91506101e56020840161019f565b90509250929050565b610572806101fd6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80633ed691ef116100665780633ed691ef14610110578063485cc955146101495780635bcef6731461015c5780635ec6a8df1461017c578063a3c573eb146101a757600080fd5b806301fd9044146100a3578063051a9e28146100bf578063257b3632146100d4578063319cf735146100f457806333d6247d146100fd575b600080fd5b6100ac60015481565b6040519081526020015b60405180910390f35b6100d26100cd3660046104b2565b6101ba565b005b6100ac6100e23660046104b2565b60036020526000908152604090205481565b6100ac60025481565b6100d261010b3660046104b2565b61020c565b6100ac60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d26101573660046104e7565b610368565b6100d261016a36600461051a565b60009182526003602052604090912055565b60055461018f906001600160a01b031681565b6040516001600160a01b0390911681526020016100b6565b60045461018f906001600160a01b031681565b80600360006101f860025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b6005546001600160a01b031633148061022f57506004546001600160a01b031633145b6102a65760405162461bcd60e51b815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b6005546001600160a01b031633036102be5760018190555b6004546001600160a01b031633036102d65760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361036457600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103885750600054600160ff909116105b806103a25750303b1580156103a2575060005460ff166001145b6104055760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161029d565b6000805460ff191660011790558015610428576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561049e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b6000602082840312156104c457600080fd5b5035919050565b80356001600160a01b03811681146104e257600080fd5b919050565b600080604083850312156104fa57600080fd5b610503836104cb565b9150610511602084016104cb565b90509250929050565b6000806040838503121561052d57600080fd5b5050803592602090910135915056fea2646970667358221220edf48eb05ca06413d7741de14868b690117bdb11c3fcd3ff2df861feaa55164164736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c80633ed691ef116100665780633ed691ef14610110578063485cc955146101495780635bcef6731461015c5780635ec6a8df1461017c578063a3c573eb146101a757600080fd5b806301fd9044146100a3578063051a9e28146100bf578063257b3632146100d4578063319cf735146100f457806333d6247d146100fd575b600080fd5b6100ac60015481565b6040519081526020015b60405180910390f35b6100d26100cd3660046104b2565b6101ba565b005b6100ac6100e23660046104b2565b60036020526000908152604090205481565b6100ac60025481565b6100d261010b3660046104b2565b61020c565b6100ac60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d26101573660046104e7565b610368565b6100d261016a36600461051a565b60009182526003602052604090912055565b60055461018f906001600160a01b031681565b6040516001600160a01b0390911681526020016100b6565b60045461018f906001600160a01b031681565b80600360006101f860025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b6005546001600160a01b031633148061022f57506004546001600160a01b031633145b6102a65760405162461bcd60e51b815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b6005546001600160a01b031633036102be5760018190555b6004546001600160a01b031633036102d65760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361036457600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103885750600054600160ff909116105b806103a25750303b1580156103a2575060005460ff166001145b6104055760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161029d565b6000805460ff191660011790558015610428576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561049e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b6000602082840312156104c457600080fd5b5035919050565b80356001600160a01b03811681146104e257600080fd5b919050565b600080604083850312156104fa57600080fd5b610503836104cb565b9150610511602084016104cb565b90509250929050565b6000806040838503121561052d57600080fd5b5050803592602090910135915056fea2646970667358221220edf48eb05ca06413d7741de14868b690117bdb11c3fcd3ff2df861feaa55164164736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5060405161076f38038061076f83398101604081905261002f916101bb565b6100398282610040565b50506101ee565b600054610100900460ff16158080156100605750600054600160ff909116105b8061008b57506100793061019060201b6104a31760201c565b15801561008b575060005460ff166001145b6100f25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015610115576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561018b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b80516001600160a01b03811681146101b657600080fd5b919050565b600080604083850312156101ce57600080fd5b6101d78361019f565b91506101e56020840161019f565b90509250929050565b610572806101fd6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80633ed691ef116100665780633ed691ef14610110578063485cc955146101495780635bcef6731461015c5780635ec6a8df1461017c578063a3c573eb146101a757600080fd5b806301fd9044146100a3578063051a9e28146100bf578063257b3632146100d4578063319cf735146100f457806333d6247d146100fd575b600080fd5b6100ac60015481565b6040519081526020015b60405180910390f35b6100d26100cd3660046104b2565b6101ba565b005b6100ac6100e23660046104b2565b60036020526000908152604090205481565b6100ac60025481565b6100d261010b3660046104b2565b61020c565b6100ac60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d26101573660046104e7565b610368565b6100d261016a36600461051a565b60009182526003602052604090912055565b60055461018f906001600160a01b031681565b6040516001600160a01b0390911681526020016100b6565b60045461018f906001600160a01b031681565b80600360006101f860025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b6005546001600160a01b031633148061022f57506004546001600160a01b031633145b6102a65760405162461bcd60e51b815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b6005546001600160a01b031633036102be5760018190555b6004546001600160a01b031633036102d65760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361036457600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103885750600054600160ff909116105b806103a25750303b1580156103a2575060005460ff166001145b6104055760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161029d565b6000805460ff191660011790558015610428576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561049e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b6000602082840312156104c457600080fd5b5035919050565b80356001600160a01b03811681146104e257600080fd5b919050565b600080604083850312156104fa57600080fd5b610503836104cb565b9150610511602084016104cb565b90509250929050565b6000806040838503121561052d57600080fd5b5050803592602090910135915056fea264697066735822122082ea160a3ec4f829f851711f236acddc0f95056ee62214ad334ec9216e83c2ba64736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c80633ed691ef116100665780633ed691ef14610110578063485cc955146101495780635bcef6731461015c5780635ec6a8df1461017c578063a3c573eb146101a757600080fd5b806301fd9044146100a3578063051a9e28146100bf578063257b3632146100d4578063319cf735146100f457806333d6247d146100fd575b600080fd5b6100ac60015481565b6040519081526020015b60405180910390f35b6100d26100cd3660046104b2565b6101ba565b005b6100ac6100e23660046104b2565b60036020526000908152604090205481565b6100ac60025481565b6100d261010b3660046104b2565b61020c565b6100ac60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d26101573660046104e7565b610368565b6100d261016a36600461051a565b60009182526003602052604090912055565b60055461018f906001600160a01b031681565b6040516001600160a01b0390911681526020016100b6565b60045461018f906001600160a01b031681565b80600360006101f860025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b6005546001600160a01b031633148061022f57506004546001600160a01b031633145b6102a65760405162461bcd60e51b815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b6005546001600160a01b031633036102be5760018190555b6004546001600160a01b031633036102d65760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361036457600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103885750600054600160ff909116105b806103a25750303b1580156103a2575060005460ff166001145b6104055760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161029d565b6000805460ff191660011790558015610428576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561049e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b6000602082840312156104c457600080fd5b5035919050565b80356001600160a01b03811681146104e257600080fd5b919050565b600080604083850312156104fa57600080fd5b610503836104cb565b9150610511602084016104cb565b90509250929050565b6000806040838503121561052d57600080fd5b5050803592602090910135915056fea264697066735822122082ea160a3ec4f829f851711f236acddc0f95056ee62214ad334ec9216e83c2ba64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZKEVM.json b/compiled-contracts/PolygonZKEVM.json index e4da4caa8..a776346ef 100644 --- a/compiled-contracts/PolygonZKEVM.json +++ b/compiled-contracts/PolygonZKEVM.json @@ -468,7 +468,7 @@ "name": "bridgeAddress", "outputs": [ { - "internalType": "contract IBridge", + "internalType": "contract IPolygonZKEVMBridge", "name": "", "type": "address" } @@ -668,7 +668,7 @@ "type": "address" }, { - "internalType": "contract IBridge", + "internalType": "contract IPolygonZKEVMBridge", "name": "_bridgeAddress", "type": "address" }, @@ -1469,8 +1469,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5061562380620000216000396000f3fe608060405234801561001057600080fd5b50600436106103af5760003560e01c80638da5cb5b116101f4578063cfa8ed471161011a578063e7a7ed02116100ad578063f14916d61161007c578063f14916d6146108eb578063f2fde38b146108fe578063f851a44014610911578063f8b823e41461092457600080fd5b8063e7a7ed0214610898578063e8bf92ed146108b2578063eaeb077b146108c5578063edc41121146108d857600080fd5b8063d939b315116100e9578063d939b3151461085a578063dbc1697614610874578063e11f3f181461087c578063e217cfd61461088f57600080fd5b8063cfa8ed4714610806578063d02103ca14610820578063d8d1091b14610833578063d8f54db01461084657600080fd5b8063ab9fc5ef11610192578063b6b0b09711610161578063b6b0b097146107be578063c0ed84e0146107d8578063c89e42df146107e0578063cf136306146107f357600080fd5b8063ab9fc5ef14610712578063adc879e91461071c578063afd23cbe14610736578063b4d63f581461075e57600080fd5b80639eb831b9116101ce5780639eb831b9146106d75780639f0d039d146106df578063a3c573eb146106e7578063aa58bad6146106fa57600080fd5b80638da5cb5b146106ab57806399f5634e146106bc5780639c9f3dfe146106c457600080fd5b80634a910e6a116102d9578063715018a611610277578063837a473811610246578063837a473814610606578063841b24d7146106745780638b48931e1461068e5780638c4a0af71461069857600080fd5b8063715018a6146105c55780637215541a146105cd57806375c508b3146105e05780637fcb3653146105f357600080fd5b806360943d6a116102b357806360943d6a1461056c5780636b8616ce1461057f5780636ff512cc1461059f578063704b6c02146105b257600080fd5b80634a910e6a146105315780635392c5e014610544578063542028d51461056457600080fd5b8063383b3be811610351578063456052671161032057806345605267146104d7578063458c0477146104f15780634834a343146105045780634a1a89a71461051757600080fd5b8063383b3be814610484578063394218e9146104975780633c158267146104aa578063423fa856146104bd57600080fd5b806319d8ac611161038d57806319d8ac6114610404578063220d78991461042f57806329878983146104425780632d0889d31461046d57600080fd5b8063107bf28c146103b457806315064c96146103d25780631816b7e5146103ef575b600080fd5b6103bc61092d565b6040516103c9919061476b565b60405180910390f35b6065546103df9060ff1681565b60405190151581526020016103c9565b6104026103fd366004614785565b6109bb565b005b606854610417906001600160401b031681565b6040516001600160401b0390911681526020016103c9565b6103bc61043d3660046147c5565b610aea565b606a54610455906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b61047661ea6081565b6040519081526020016103c9565b6103df610492366004614812565b610c90565b6104026104a5366004614812565b610cd7565b6104026104b836600461494f565b610e26565b60685461041790600160401b90046001600160401b031681565b60685461041790600160801b90046001600160401b031681565b607254610417906001600160401b031681565b610402610512366004614a8d565b61163a565b60725461041790600160401b90046001600160401b031681565b61040261053f366004614812565b611983565b610476610552366004614812565b606d6020526000908152604090205481565b6103bc611c23565b61040261057a366004614b2f565b611c30565b61047661058d366004614812565b60666020526000908152604090205481565b6104026105ad366004614c06565b611fa0565b6104026105c0366004614c06565b612024565b61040261209c565b6104026105db366004614812565b6120b0565b6104026105ee366004614c23565b612328565b606954610417906001600160401b031681565b610649610614366004614cc1565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103c9565b60725461041790600160c01b90046001600160401b031681565b61041762093a8081565b6104026106a6366004614ce8565b6123b7565b6033546001600160a01b0316610455565b61047661242e565b6104026106d2366004614812565b612511565b610476600c81565b607454610476565b607054610455906001600160a01b031681565b6065546104179061010090046001600160401b031681565b6104176206978081565b606c5461041790600160a81b90046001600160401b031681565b60655461074b90600160481b900461ffff1681565b60405161ffff90911681526020016103c9565b61079961076c366004614812565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103c9565b60655461045590600160581b90046001600160a01b031681565b610417612657565b6104026107ee366004614d05565b6126a4565b610402610801366004614812565b61270a565b60695461045590600160401b90046001600160a01b031681565b606c54610455906001600160a01b031681565b610402610841366004614d39565b61278b565b606c546103df90600160a01b900460ff1681565b60725461041790600160801b90046001600160401b031681565b610402612c55565b61040261088a366004614c23565b612d11565b6104176103e881565b60685461041790600160c01b90046001600160401b031681565b606b54610455906001600160a01b031681565b6104026108d3366004614e2b565b612e56565b6104026108e6366004614a8d565b61317e565b6104026108f9366004614c06565b61329e565b61040261090c366004614c06565b613316565b607354610455906001600160a01b031681565b61047660745481565b606f805461093a90614e6f565b80601f016020809104026020016040519081016040528092919081815260200182805461096690614e6f565b80156109b35780601f10610988576101008083540402835291602001916109b3565b820191906000526020600020905b81548152906001019060200180831161099657829003601f168201915b505050505081565b6073546001600160a01b031633146109ee5760405162461bcd60e51b81526004016109e590614ea9565b60405180910390fd5b6103e88161ffff16118015610a0857506104008161ffff16105b610a8d5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a4b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a4016109e5565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610b1c57508115155b610b90576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e5565b80610c05576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e5565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610cc692600160801b90920481169116614f02565b6001600160401b0316111592915050565b6073546001600160a01b03163314610d015760405162461bcd60e51b81526004016109e590614ea9565b62093a806001600160401b0382161115610d2d5760405162461bcd60e51b81526004016109e590614f2d565b60655460ff16610dd0576072546001600160401b03600160c01b909104811690821610610dd05760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a4b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109e5565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610adf565b60655460ff1615610e495760405162461bcd60e51b81526004016109e590614f98565b606954600160401b90046001600160a01b03163314610ed05760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e63657200000000000060648201526084016109e5565b805180610f455760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e6365203120626174636800000060648201526084016109e5565b6103e88110610fbe576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e79206261746368657360648201526084016109e5565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561145e57600087828151811061101157611011615000565b60200260200101519050600081606001516001600160401b031611156111ca578361103b81615016565b9450506000816000015180519060200120826020015183606001516040516020016110689392919061503c565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461110e5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d6174636800000060648201526084016109e5565b81606001516001600160401b031682604001516001600160401b031610156111c45760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a4016109e5565b50611351565b602081015115806112535750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b36329161120d9160040190815260200190565b6020604051808303816000875af115801561122c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611250919061505f565b15155b6112c55760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d75737420657869737400000000000060648201526084016109e5565b80515161ea60116113515760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a4016109e5565b856001600160401b031681604001516001600160401b03161015801561138457504281604001516001600160401b031611155b6113f65760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e676500000060648201526084016109e5565b8051805160209182012081830151604080850151905161141d948894939291339101615078565b604051602081830303815290604052805190602001209250848061144090615016565b95505080604001519550508080611456906150bc565b915050610ff5565b506068546001600160401b03600160c01b909104811690831611156114e35760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b60648201526084016109e5565b60685460009061150390600160801b90046001600160401b0316846150d5565b611516906001600160401b0316876150fd565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115eb903390309084906115d09190615114565b606554600160581b90046001600160a01b031692919061338c565b6115f36133f7565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff161561165d5760405162461bcd60e51b81526004016109e590614f98565b6072546001600160401b03878116600090815260676020526040902060010154429261169492600160c01b90910481169116614f02565b6001600160401b0316111561171d5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a4016109e5565b6103e861172a88886150d5565b6001600160401b0316106117a65760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e7920626174636865730000000060648201526084016109e5565b6117b6888888888888888861349b565b6117bf866139d9565b607254600160801b90046001600160401b0316600003611887576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561182457607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561186a57600080fd5b505af115801561187e573d6000803e3d6000fd5b50505050611938565b61188f6133f7565b607280546001600160401b03169060006118a883615016565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b038116158015906119b057506072546001600160401b03600160401b9091048116908216115b80156119cb57506072546001600160401b0390811690821611155b611a495760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a4016109e5565b606a546001600160a01b03163314611af357611a6481610c90565b611af35760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a4016109e5565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d9094529382902092909255607280546fffffffffffffffff000000000000000019169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611bb557600080fd5b505af1158015611bc9573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611c1691815260200190565b60405180910390a3505050565b606e805461093a90614e6f565b600054610100900460ff1615808015611c505750600054600160ff909116105b80611c6a5750303b158015611c6a575060005460ff166001145b611ccd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109e5565b6000805460ff191660011790558015611cf0576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611d6d6020860186614c06565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d9d6060860160408701614c06565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611dd860c0860160a08701614c06565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611e3560e0860160c08701614812565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611e6c6040860160208701614812565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611ea86080860160608701614812565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611ee460a0860160808701614ce8565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611f0c8482615179565b50606f611f198382615179565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611f4f613bbf565b8015611f95576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611fca5760405162461bcd60e51b81526004016109e590614ea9565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610adf565b6073546001600160a01b0316331461204e5760405162461bcd60e51b81526004016109e590614ea9565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190602001610adf565b6120a4613c33565b6120ae6000613c8d565b565b6033546001600160a01b0316331461231d576072546000906001600160401b03161561210157506072546001600160401b03908116600090815260716020526040902054600160401b90041661210f565b506069546001600160401b03165b80826001600160401b03161161218d5760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c72656164792076657269666965640000000060648201526084016109e5565b6068546001600160401b03600160401b9091048116908316118015906121cf57506001600160401b038083166000908152606760205260409020600101541615155b61225a5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a4016109e5565b6001600160401b0380831660009081526067602052604090206001015442916122889162093a809116614f02565b6001600160401b0316111561231b5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a4016109e5565b505b612325613cdf565b50565b60655460ff161561234b5760405162461bcd60e51b81526004016109e590614f98565b61235c898989898989898989613d4f565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f95613cdf565b6073546001600160a01b031633146123e15760405162461bcd60e51b81526004016109e590614ea9565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610adf90831515815260200190565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612481573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a5919061505f565b905060006124b1612657565b6068546001600160401b03600160401b82048116916124e191600160801b8204811691600160c01b9004166150d5565b6124eb9190614f02565b6124f591906150d5565b6001600160401b0316905061250a818361524e565b9250505090565b6073546001600160a01b0316331461253b5760405162461bcd60e51b81526004016109e590614ea9565b62093a806001600160401b03821611156125675760405162461bcd60e51b81526004016109e590614f2d565b60655460ff166125fc576072546001600160401b03600160801b9091048116908216106125fc5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f7765720060648201526084016109e5565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610adf565b6072546000906001600160401b03161561269457506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126ce5760405162461bcd60e51b81526004016109e590614ea9565b606e6126da8282615179565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610adf919061476b565b6073546001600160a01b031633146127345760405162461bcd60e51b81526004016109e590614ea9565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610adf565b60655460ff16156127ae5760405162461bcd60e51b81526004016109e590614f98565b606c54600160a01b900460ff1615156001146127dc5760405162461bcd60e51b81526004016109e590615262565b80518061283f5760405162461bcd60e51b815260206004820152603d60248201526000805160206155ae83398151915260448201527f3a204d75737420666f726365206174206c65617374203120626174636800000060648201526084016109e5565b6103e881106128b05760405162461bcd60e51b815260206004820152604360248201526000805160206155ae83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a4016109e5565b6068546001600160401b03600160c01b82048116916128d8918491600160801b9004166152cb565b11156129325760405162461bcd60e51b815260206004820152603560248201526000805160206155ae8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b60648201526084016109e5565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612b5e57600086828151811061297f5761297f615000565b60200260200101519050838061299490615016565b9450506000816000015180519060200120826020015183604001516040516020016129c19392919061503c565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612a605760405162461bcd60e51b815260206004820152604260248201526000805160206155ae83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109e5565b612a6b6001886150fd565b8303612b005742620697808360400151612a859190614f02565b6001600160401b03161115612b005760405162461bcd60e51b815260206004820152604760248201526000805160206155ae83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a4016109e5565b8151805160209182012081840151604051612b2393889392914291339101615078565b6040516020818303038152906040528051906020012093508580612b4690615016565b96505050508080612b56906150bc565b915050612963565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612c775760405162461bcd60e51b81526004016109e5906152e3565b6073546001600160a01b03163314612ca15760405162461bcd60e51b81526004016109e590614ea9565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612cf157600080fd5b505af1158015612d05573d6000803e3d6000fd5b505050506120ae6143ca565b606a546001600160a01b03163314612d3b5760405162461bcd60e51b81526004016109e590615340565b612d4c898989898989898989613d4f565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612d9757607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612ddd57600080fd5b505af1158015612df1573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612e795760405162461bcd60e51b81526004016109e590614f98565b606c54600160a01b900460ff161515600114612ea75760405162461bcd60e51b81526004016109e590615262565b6000612eb260745490565b905081811115612f175760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b60648201526084016109e5565b61ea60835110612f875760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b60648201526084016109e5565b606554612fa690600160581b90046001600160a01b031633308461338c565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015612ff0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613014919061505f565b60688054919250600160c01b9091046001600160401b031690601861303883615016565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016130799392919061503c565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361311d57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613178565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161316f9392919061539d565b60405180910390a25b50505050565b606a546001600160a01b031633146131a85760405162461bcd60e51b81526004016109e590615340565b6131b8888888888888888861349b565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561320357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561324957600080fd5b505af115801561325d573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611971565b6073546001600160a01b031633146132c85760405162461bcd60e51b81526004016109e590614ea9565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001610adf565b61331e613c33565b6001600160a01b0381166133835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e5565b61232581613c8d565b6040516001600160a01b03808516602483015283166044820152606481018290526131789085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614421565b6072546001600160401b03600160401b82048116911611156120ae5760725460009061343490600160401b90046001600160401b03166001614f02565b905061343f81610c90565b15612325576072546000906002906134619084906001600160401b03166150d5565b61346b91906153d0565b6134759083614f02565b905061348081610c90565b156134925761348e81611983565b5050565b61348e82611983565b6000806134a6612657565b90506001600160401b038a1615613621576072546001600160401b03908116908b1611156135625760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2070656e60448201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560648201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608482015260a4016109e5565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b909204161461361b5760405162461bcd60e51b815260206004820152604c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760648201526b040e6e8c2e8ca40c4c2e8c6d60a31b608482015260a4016109e5565b50613769565b6001600160401b0389166000908152606d60205260409020549150816136bb5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786064820152621a5cdd60ea1b608482015260a4016109e5565b806001600160401b0316896001600160401b031611156137695760405162461bcd60e51b815260206004820152605d60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060648201527f7468616e2063757272656e744c61737456657269666965644261746368000000608482015260a4016109e5565b806001600160401b0316886001600160401b0316116138165760405162461bcd60e51b815260206004820152605760248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2066696e60448201527f616c4e65774261746368206d75737420626520626967676572207468616e206360648201527f757272656e744c61737456657269666965644261746368000000000000000000608482015260a4016109e5565b60006138258a8a8a868b610aea565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161385a91906153f6565b602060405180830381855afa158015613877573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061389a919061505f565b6138a49190615412565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916138e8918b918b918b9190600401615426565b602060405180830381865afa158015613905573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392991906154a0565b6139885760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20494e5660448201526920a624a22fa82927a7a360b11b60648201526084016109e5565b6139cb33613996858d6150d5565b6001600160401b03166139a761242e565b6139b19190615114565b606554600160581b90046001600160a01b031691906144f8565b505050505050505050505050565b60006139e3612657565b9050816000806139f384846150d5565b6001600160401b031690505b836001600160401b0316836001600160401b031614613aa5576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613a4f9116426150fd565b1115613a8a576001810154613a7490600160401b90046001600160401b0316866150d5565b613a87906001600160401b0316846152cb565b92505b60010154600160401b90046001600160401b031692506139ff565b6000613ab183836150fd565b905082811015613b2b576000613ac782856150fd565b9050600c8111613ad75780613ada565b600c5b9050613ae7816003615114565b613af290600a6155a1565b606554613b0b908390600160481b900461ffff166155a1565b607454613b189190615114565b613b22919061524e565b60745550613bb7565b6000613b3784836150fd565b9050600c8111613b475780613b4a565b600c5b90506000613b59826003615114565b613b6490600a6155a1565b606554613b7d908490600160481b900461ffff166155a1565b607454613b8a9190615114565b613b94919061524e565b905080607454607454613ba79190615114565b613bb1919061524e565b60745550505b505050505050565b600054610100900460ff16613c2a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109e5565b6120ae33613c8d565b6033546001600160a01b031633146120ae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109e5565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d2f57600080fd5b505af1158015613d43573d6000803e3d6000fd5b505050506120ae614528565b60006001600160401b038a1615613eca576072546001600160401b03908116908b161115613e0e5760405162461bcd60e51b815260206004820152606c60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c4016109e5565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613ec45760405162461bcd60e51b815260206004820152606060248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a4016109e5565b5061401e565b506001600160401b0387166000908152606d602052604090205480613f6b5760405162461bcd60e51b815260206004820152605760248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a4016109e5565b6069546001600160401b03908116908916111561401e5760405162461bcd60e51b815260206004820152607160248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c4016109e5565b6072546001600160401b03908116908a161180159061404e5750896001600160401b0316896001600160401b0316115b801561406f57506072546001600160401b03600160401b9091048116908a16115b6140e75760405162461bcd60e51b815260206004820152604f60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a4016109e5565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146141a75760405162461bcd60e51b815260206004820152606a60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c4016109e5565b60006141b6898989858a610aea565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516141eb91906153f6565b602060405180830381855afa158015614208573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061422b919061505f565b6142359190615412565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614279918a918a918a9190600401615426565b602060405180830381865afa158015614296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ba91906154a0565b61431a5760405162461bcd60e51b815260206004820152603e60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20494e56414c49445f50524f4f46000060648201526084016109e5565b6001600160401b038b166000908152607160205260409020600201548790036139cb5760405162461bcd60e51b815260206004820152606260248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c4016109e5565b60655460ff166143ec5760405162461bcd60e51b81526004016109e5906152e3565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614476826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145839092919063ffffffff16565b8051909150156144f3578080602001905181019061449491906154a0565b6144f35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109e5565b505050565b6040516001600160a01b0383166024820152604481018290526144f390849063a9059cbb60e01b906064016133c0565b60655460ff161561454b5760405162461bcd60e51b81526004016109e590614f98565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614592848460008561459a565b949350505050565b6060824710156145fb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109e5565b600080866001600160a01b0316858760405161461791906153f6565b60006040518083038185875af1925050503d8060008114614654576040519150601f19603f3d011682016040523d82523d6000602084013e614659565b606091505b509150915061466a87838387614675565b979650505050505050565b606083156146e45782516000036146dd576001600160a01b0385163b6146dd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109e5565b5081614592565b61459283838151156146f95781518083602001fd5b8060405162461bcd60e51b81526004016109e5919061476b565b60005b8381101561472e578181015183820152602001614716565b838111156131785750506000910152565b60008151808452614757816020860160208601614713565b601f01601f19169290920160200192915050565b60208152600061477e602083018461473f565b9392505050565b60006020828403121561479757600080fd5b813561ffff8116811461477e57600080fd5b80356001600160401b03811681146147c057600080fd5b919050565b600080600080600060a086880312156147dd57600080fd5b6147e6866147a9565b94506147f4602087016147a9565b94979496505050506040830135926060810135926080909101359150565b60006020828403121561482457600080fd5b61477e826147a9565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156148655761486561482d565b60405290565b604051606081016001600160401b03811182821017156148655761486561482d565b604051601f8201601f191681016001600160401b03811182821017156148b5576148b561482d565b604052919050565b60006001600160401b038211156148d6576148d661482d565b5060051b60200190565b600082601f8301126148f157600080fd5b81356001600160401b0381111561490a5761490a61482d565b61491d601f8201601f191660200161488d565b81815284602083860101111561493257600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561496257600080fd5b82356001600160401b038082111561497957600080fd5b818501915085601f83011261498d57600080fd5b81356149a061499b826148bd565b61488d565b81815260059190911b830184019084810190888311156149bf57600080fd5b8585015b83811015614a58578035858111156149db5760008081fd5b86016080818c03601f19018113156149f35760008081fd5b6149fb614843565b8983013588811115614a0d5760008081fd5b614a1b8e8c838701016148e0565b8252506040808401358b8301526060614a358186016147a9565b82840152614a448486016147a9565b9083015250855250509186019186016149c3565b5098975050505050505050565b8060408101831015614a7657600080fd5b92915050565b8060808101831015614a7657600080fd5b6000806000806000806000806101a0898b031215614aaa57600080fd5b614ab3896147a9565b9750614ac160208a016147a9565b9650614acf60408a016147a9565b95506060890135945060808901359350614aec8a60a08b01614a65565b9250614afb8a60e08b01614a7c565b9150614b0b8a6101608b01614a65565b90509295985092959890939650565b6001600160a01b038116811461232557600080fd5b600080600080600080600080888a036101c0811215614b4d57600080fd5b8935614b5881614b1a565b985060208a0135614b6881614b1a565b975060408a0135614b7881614b1a565b965060608a0135614b8881614b1a565b955060e0607f1982011215614b9c57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614bc657600080fd5b614bd28c838d016148e0565b93506101a08b0135915080821115614be957600080fd5b50614bf68b828c016148e0565b9150509295985092959890939650565b600060208284031215614c1857600080fd5b813561477e81614b1a565b60008060008060008060008060006101c08a8c031215614c4257600080fd5b614c4b8a6147a9565b9850614c5960208b016147a9565b9750614c6760408b016147a9565b9650614c7560608b016147a9565b955060808a0135945060a08a01359350614c928b60c08c01614a65565b9250614ca28b6101008c01614a7c565b9150614cb28b6101808c01614a65565b90509295985092959850929598565b600060208284031215614cd357600080fd5b5035919050565b801515811461232557600080fd5b600060208284031215614cfa57600080fd5b813561477e81614cda565b600060208284031215614d1757600080fd5b81356001600160401b03811115614d2d57600080fd5b614592848285016148e0565b60006020808385031215614d4c57600080fd5b82356001600160401b0380821115614d6357600080fd5b818501915085601f830112614d7757600080fd5b8135614d8561499b826148bd565b81815260059190911b83018401908481019088831115614da457600080fd5b8585015b83811015614a5857803585811115614dc05760008081fd5b86016060818c03601f1901811315614dd85760008081fd5b614de061486b565b8983013588811115614df25760008081fd5b614e008e8c838701016148e0565b8252506040808401358b830152614e188385016147a9565b9082015285525050918601918601614da8565b60008060408385031215614e3e57600080fd5b82356001600160401b03811115614e5457600080fd5b614e60858286016148e0565b95602094909401359450505050565b600181811c90821680614e8357607f821691505b602082108103614ea357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614f2457614f24614eec565b01949350505050565b60208082526045908201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361503257615032614eec565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b60006020828403121561507157600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b6000600182016150ce576150ce614eec565b5060010190565b60006001600160401b03838116908316818110156150f5576150f5614eec565b039392505050565b60008282101561510f5761510f614eec565b500390565b600081600019048311821515161561512e5761512e614eec565b500290565b601f8211156144f357600081815260208120601f850160051c8101602086101561515a5750805b601f850160051c820191505b81811015613bb757828155600101615166565b81516001600160401b038111156151925761519261482d565b6151a6816151a08454614e6f565b84615133565b602080601f8311600181146151db57600084156151c35750858301515b600019600386901b1c1916600185901b178555613bb7565b600085815260208120601f198616915b8281101561520a578886015182559484019460019091019084016151eb565b50858210156152285787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b60008261525d5761525d615238565b500490565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b600082198211156152de576152de614eec565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b03831660208201526060604082018190526000906153c79083018461473f565b95945050505050565b60006001600160401b03808416806153ea576153ea615238565b92169190910492915050565b60008251615408818460208701614713565b9190910192915050565b60008261542157615421615238565b500690565b61012081016040808784376000838201818152879190815b600281101561545e5784848337908401828152928401929060010161543e565b5050828760c0870137610100850181815286935091505b6001811015615494578251825260209283019290910190600101615475565b50505095945050505050565b6000602082840312156154b257600080fd5b815161477e81614cda565b600181815b808511156154f85781600019048211156154de576154de614eec565b808516156154eb57918102915b93841c93908002906154c2565b509250929050565b60008261550f57506001614a76565b8161551c57506000614a76565b8160018114615532576002811461553c57615558565b6001915050614a76565b60ff84111561554d5761554d614eec565b50506001821b614a76565b5060208310610133831016604e8410600b841016171561557b575081810a614a76565b61558583836154bd565b806000190482111561559957615599614eec565b029392505050565b600061477e838361550056fe506f6c79676f6e5a4b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a4b45564d3a3a70726f76654e6f6e44657465726d696e6973a264697066735822122071fdcd0f9a8f0b314d5f2c9585779a6782ff33390883cf6d65249cba6f4fa26764736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103af5760003560e01c80638da5cb5b116101f4578063cfa8ed471161011a578063e7a7ed02116100ad578063f14916d61161007c578063f14916d6146108eb578063f2fde38b146108fe578063f851a44014610911578063f8b823e41461092457600080fd5b8063e7a7ed0214610898578063e8bf92ed146108b2578063eaeb077b146108c5578063edc41121146108d857600080fd5b8063d939b315116100e9578063d939b3151461085a578063dbc1697614610874578063e11f3f181461087c578063e217cfd61461088f57600080fd5b8063cfa8ed4714610806578063d02103ca14610820578063d8d1091b14610833578063d8f54db01461084657600080fd5b8063ab9fc5ef11610192578063b6b0b09711610161578063b6b0b097146107be578063c0ed84e0146107d8578063c89e42df146107e0578063cf136306146107f357600080fd5b8063ab9fc5ef14610712578063adc879e91461071c578063afd23cbe14610736578063b4d63f581461075e57600080fd5b80639eb831b9116101ce5780639eb831b9146106d75780639f0d039d146106df578063a3c573eb146106e7578063aa58bad6146106fa57600080fd5b80638da5cb5b146106ab57806399f5634e146106bc5780639c9f3dfe146106c457600080fd5b80634a910e6a116102d9578063715018a611610277578063837a473811610246578063837a473814610606578063841b24d7146106745780638b48931e1461068e5780638c4a0af71461069857600080fd5b8063715018a6146105c55780637215541a146105cd57806375c508b3146105e05780637fcb3653146105f357600080fd5b806360943d6a116102b357806360943d6a1461056c5780636b8616ce1461057f5780636ff512cc1461059f578063704b6c02146105b257600080fd5b80634a910e6a146105315780635392c5e014610544578063542028d51461056457600080fd5b8063383b3be811610351578063456052671161032057806345605267146104d7578063458c0477146104f15780634834a343146105045780634a1a89a71461051757600080fd5b8063383b3be814610484578063394218e9146104975780633c158267146104aa578063423fa856146104bd57600080fd5b806319d8ac611161038d57806319d8ac6114610404578063220d78991461042f57806329878983146104425780632d0889d31461046d57600080fd5b8063107bf28c146103b457806315064c96146103d25780631816b7e5146103ef575b600080fd5b6103bc61092d565b6040516103c9919061476b565b60405180910390f35b6065546103df9060ff1681565b60405190151581526020016103c9565b6104026103fd366004614785565b6109bb565b005b606854610417906001600160401b031681565b6040516001600160401b0390911681526020016103c9565b6103bc61043d3660046147c5565b610aea565b606a54610455906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b61047661ea6081565b6040519081526020016103c9565b6103df610492366004614812565b610c90565b6104026104a5366004614812565b610cd7565b6104026104b836600461494f565b610e26565b60685461041790600160401b90046001600160401b031681565b60685461041790600160801b90046001600160401b031681565b607254610417906001600160401b031681565b610402610512366004614a8d565b61163a565b60725461041790600160401b90046001600160401b031681565b61040261053f366004614812565b611983565b610476610552366004614812565b606d6020526000908152604090205481565b6103bc611c23565b61040261057a366004614b2f565b611c30565b61047661058d366004614812565b60666020526000908152604090205481565b6104026105ad366004614c06565b611fa0565b6104026105c0366004614c06565b612024565b61040261209c565b6104026105db366004614812565b6120b0565b6104026105ee366004614c23565b612328565b606954610417906001600160401b031681565b610649610614366004614cc1565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103c9565b60725461041790600160c01b90046001600160401b031681565b61041762093a8081565b6104026106a6366004614ce8565b6123b7565b6033546001600160a01b0316610455565b61047661242e565b6104026106d2366004614812565b612511565b610476600c81565b607454610476565b607054610455906001600160a01b031681565b6065546104179061010090046001600160401b031681565b6104176206978081565b606c5461041790600160a81b90046001600160401b031681565b60655461074b90600160481b900461ffff1681565b60405161ffff90911681526020016103c9565b61079961076c366004614812565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103c9565b60655461045590600160581b90046001600160a01b031681565b610417612657565b6104026107ee366004614d05565b6126a4565b610402610801366004614812565b61270a565b60695461045590600160401b90046001600160a01b031681565b606c54610455906001600160a01b031681565b610402610841366004614d39565b61278b565b606c546103df90600160a01b900460ff1681565b60725461041790600160801b90046001600160401b031681565b610402612c55565b61040261088a366004614c23565b612d11565b6104176103e881565b60685461041790600160c01b90046001600160401b031681565b606b54610455906001600160a01b031681565b6104026108d3366004614e2b565b612e56565b6104026108e6366004614a8d565b61317e565b6104026108f9366004614c06565b61329e565b61040261090c366004614c06565b613316565b607354610455906001600160a01b031681565b61047660745481565b606f805461093a90614e6f565b80601f016020809104026020016040519081016040528092919081815260200182805461096690614e6f565b80156109b35780601f10610988576101008083540402835291602001916109b3565b820191906000526020600020905b81548152906001019060200180831161099657829003601f168201915b505050505081565b6073546001600160a01b031633146109ee5760405162461bcd60e51b81526004016109e590614ea9565b60405180910390fd5b6103e88161ffff16118015610a0857506104008161ffff16105b610a8d5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a4b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a4016109e5565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610b1c57508115155b610b90576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e5565b80610c05576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e5565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610cc692600160801b90920481169116614f02565b6001600160401b0316111592915050565b6073546001600160a01b03163314610d015760405162461bcd60e51b81526004016109e590614ea9565b62093a806001600160401b0382161115610d2d5760405162461bcd60e51b81526004016109e590614f2d565b60655460ff16610dd0576072546001600160401b03600160c01b909104811690821610610dd05760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a4b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109e5565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610adf565b60655460ff1615610e495760405162461bcd60e51b81526004016109e590614f98565b606954600160401b90046001600160a01b03163314610ed05760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e63657200000000000060648201526084016109e5565b805180610f455760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e6365203120626174636800000060648201526084016109e5565b6103e88110610fbe576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e79206261746368657360648201526084016109e5565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561145e57600087828151811061101157611011615000565b60200260200101519050600081606001516001600160401b031611156111ca578361103b81615016565b9450506000816000015180519060200120826020015183606001516040516020016110689392919061503c565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461110e5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d6174636800000060648201526084016109e5565b81606001516001600160401b031682604001516001600160401b031610156111c45760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a4016109e5565b50611351565b602081015115806112535750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b36329161120d9160040190815260200190565b6020604051808303816000875af115801561122c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611250919061505f565b15155b6112c55760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d75737420657869737400000000000060648201526084016109e5565b80515161ea60116113515760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a4016109e5565b856001600160401b031681604001516001600160401b03161015801561138457504281604001516001600160401b031611155b6113f65760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e676500000060648201526084016109e5565b8051805160209182012081830151604080850151905161141d948894939291339101615078565b604051602081830303815290604052805190602001209250848061144090615016565b95505080604001519550508080611456906150bc565b915050610ff5565b506068546001600160401b03600160c01b909104811690831611156114e35760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b60648201526084016109e5565b60685460009061150390600160801b90046001600160401b0316846150d5565b611516906001600160401b0316876150fd565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115eb903390309084906115d09190615114565b606554600160581b90046001600160a01b031692919061338c565b6115f36133f7565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff161561165d5760405162461bcd60e51b81526004016109e590614f98565b6072546001600160401b03878116600090815260676020526040902060010154429261169492600160c01b90910481169116614f02565b6001600160401b0316111561171d5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a4016109e5565b6103e861172a88886150d5565b6001600160401b0316106117a65760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e7920626174636865730000000060648201526084016109e5565b6117b6888888888888888861349b565b6117bf866139d9565b607254600160801b90046001600160401b0316600003611887576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561182457607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561186a57600080fd5b505af115801561187e573d6000803e3d6000fd5b50505050611938565b61188f6133f7565b607280546001600160401b03169060006118a883615016565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b038116158015906119b057506072546001600160401b03600160401b9091048116908216115b80156119cb57506072546001600160401b0390811690821611155b611a495760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a4016109e5565b606a546001600160a01b03163314611af357611a6481610c90565b611af35760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a4016109e5565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d9094529382902092909255607280546fffffffffffffffff000000000000000019169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611bb557600080fd5b505af1158015611bc9573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611c1691815260200190565b60405180910390a3505050565b606e805461093a90614e6f565b600054610100900460ff1615808015611c505750600054600160ff909116105b80611c6a5750303b158015611c6a575060005460ff166001145b611ccd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109e5565b6000805460ff191660011790558015611cf0576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611d6d6020860186614c06565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d9d6060860160408701614c06565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611dd860c0860160a08701614c06565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611e3560e0860160c08701614812565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611e6c6040860160208701614812565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611ea86080860160608701614812565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611ee460a0860160808701614ce8565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611f0c8482615179565b50606f611f198382615179565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611f4f613bbf565b8015611f95576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611fca5760405162461bcd60e51b81526004016109e590614ea9565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610adf565b6073546001600160a01b0316331461204e5760405162461bcd60e51b81526004016109e590614ea9565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190602001610adf565b6120a4613c33565b6120ae6000613c8d565b565b6033546001600160a01b0316331461231d576072546000906001600160401b03161561210157506072546001600160401b03908116600090815260716020526040902054600160401b90041661210f565b506069546001600160401b03165b80826001600160401b03161161218d5760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c72656164792076657269666965640000000060648201526084016109e5565b6068546001600160401b03600160401b9091048116908316118015906121cf57506001600160401b038083166000908152606760205260409020600101541615155b61225a5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a4016109e5565b6001600160401b0380831660009081526067602052604090206001015442916122889162093a809116614f02565b6001600160401b0316111561231b5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a4016109e5565b505b612325613cdf565b50565b60655460ff161561234b5760405162461bcd60e51b81526004016109e590614f98565b61235c898989898989898989613d4f565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f95613cdf565b6073546001600160a01b031633146123e15760405162461bcd60e51b81526004016109e590614ea9565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610adf90831515815260200190565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612481573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a5919061505f565b905060006124b1612657565b6068546001600160401b03600160401b82048116916124e191600160801b8204811691600160c01b9004166150d5565b6124eb9190614f02565b6124f591906150d5565b6001600160401b0316905061250a818361524e565b9250505090565b6073546001600160a01b0316331461253b5760405162461bcd60e51b81526004016109e590614ea9565b62093a806001600160401b03821611156125675760405162461bcd60e51b81526004016109e590614f2d565b60655460ff166125fc576072546001600160401b03600160801b9091048116908216106125fc5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f7765720060648201526084016109e5565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610adf565b6072546000906001600160401b03161561269457506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126ce5760405162461bcd60e51b81526004016109e590614ea9565b606e6126da8282615179565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610adf919061476b565b6073546001600160a01b031633146127345760405162461bcd60e51b81526004016109e590614ea9565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610adf565b60655460ff16156127ae5760405162461bcd60e51b81526004016109e590614f98565b606c54600160a01b900460ff1615156001146127dc5760405162461bcd60e51b81526004016109e590615262565b80518061283f5760405162461bcd60e51b815260206004820152603d60248201526000805160206155ae83398151915260448201527f3a204d75737420666f726365206174206c65617374203120626174636800000060648201526084016109e5565b6103e881106128b05760405162461bcd60e51b815260206004820152604360248201526000805160206155ae83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a4016109e5565b6068546001600160401b03600160c01b82048116916128d8918491600160801b9004166152cb565b11156129325760405162461bcd60e51b815260206004820152603560248201526000805160206155ae8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b60648201526084016109e5565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612b5e57600086828151811061297f5761297f615000565b60200260200101519050838061299490615016565b9450506000816000015180519060200120826020015183604001516040516020016129c19392919061503c565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612a605760405162461bcd60e51b815260206004820152604260248201526000805160206155ae83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109e5565b612a6b6001886150fd565b8303612b005742620697808360400151612a859190614f02565b6001600160401b03161115612b005760405162461bcd60e51b815260206004820152604760248201526000805160206155ae83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a4016109e5565b8151805160209182012081840151604051612b2393889392914291339101615078565b6040516020818303038152906040528051906020012093508580612b4690615016565b96505050508080612b56906150bc565b915050612963565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612c775760405162461bcd60e51b81526004016109e5906152e3565b6073546001600160a01b03163314612ca15760405162461bcd60e51b81526004016109e590614ea9565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612cf157600080fd5b505af1158015612d05573d6000803e3d6000fd5b505050506120ae6143ca565b606a546001600160a01b03163314612d3b5760405162461bcd60e51b81526004016109e590615340565b612d4c898989898989898989613d4f565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612d9757607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612ddd57600080fd5b505af1158015612df1573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612e795760405162461bcd60e51b81526004016109e590614f98565b606c54600160a01b900460ff161515600114612ea75760405162461bcd60e51b81526004016109e590615262565b6000612eb260745490565b905081811115612f175760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b60648201526084016109e5565b61ea60835110612f875760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b60648201526084016109e5565b606554612fa690600160581b90046001600160a01b031633308461338c565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015612ff0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613014919061505f565b60688054919250600160c01b9091046001600160401b031690601861303883615016565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016130799392919061503c565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361311d57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613178565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161316f9392919061539d565b60405180910390a25b50505050565b606a546001600160a01b031633146131a85760405162461bcd60e51b81526004016109e590615340565b6131b8888888888888888861349b565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561320357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561324957600080fd5b505af115801561325d573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611971565b6073546001600160a01b031633146132c85760405162461bcd60e51b81526004016109e590614ea9565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001610adf565b61331e613c33565b6001600160a01b0381166133835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e5565b61232581613c8d565b6040516001600160a01b03808516602483015283166044820152606481018290526131789085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614421565b6072546001600160401b03600160401b82048116911611156120ae5760725460009061343490600160401b90046001600160401b03166001614f02565b905061343f81610c90565b15612325576072546000906002906134619084906001600160401b03166150d5565b61346b91906153d0565b6134759083614f02565b905061348081610c90565b156134925761348e81611983565b5050565b61348e82611983565b6000806134a6612657565b90506001600160401b038a1615613621576072546001600160401b03908116908b1611156135625760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2070656e60448201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560648201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608482015260a4016109e5565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b909204161461361b5760405162461bcd60e51b815260206004820152604c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760648201526b040e6e8c2e8ca40c4c2e8c6d60a31b608482015260a4016109e5565b50613769565b6001600160401b0389166000908152606d60205260409020549150816136bb5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786064820152621a5cdd60ea1b608482015260a4016109e5565b806001600160401b0316896001600160401b031611156137695760405162461bcd60e51b815260206004820152605d60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060648201527f7468616e2063757272656e744c61737456657269666965644261746368000000608482015260a4016109e5565b806001600160401b0316886001600160401b0316116138165760405162461bcd60e51b815260206004820152605760248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2066696e60448201527f616c4e65774261746368206d75737420626520626967676572207468616e206360648201527f757272656e744c61737456657269666965644261746368000000000000000000608482015260a4016109e5565b60006138258a8a8a868b610aea565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161385a91906153f6565b602060405180830381855afa158015613877573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061389a919061505f565b6138a49190615412565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916138e8918b918b918b9190600401615426565b602060405180830381865afa158015613905573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392991906154a0565b6139885760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20494e5660448201526920a624a22fa82927a7a360b11b60648201526084016109e5565b6139cb33613996858d6150d5565b6001600160401b03166139a761242e565b6139b19190615114565b606554600160581b90046001600160a01b031691906144f8565b505050505050505050505050565b60006139e3612657565b9050816000806139f384846150d5565b6001600160401b031690505b836001600160401b0316836001600160401b031614613aa5576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613a4f9116426150fd565b1115613a8a576001810154613a7490600160401b90046001600160401b0316866150d5565b613a87906001600160401b0316846152cb565b92505b60010154600160401b90046001600160401b031692506139ff565b6000613ab183836150fd565b905082811015613b2b576000613ac782856150fd565b9050600c8111613ad75780613ada565b600c5b9050613ae7816003615114565b613af290600a6155a1565b606554613b0b908390600160481b900461ffff166155a1565b607454613b189190615114565b613b22919061524e565b60745550613bb7565b6000613b3784836150fd565b9050600c8111613b475780613b4a565b600c5b90506000613b59826003615114565b613b6490600a6155a1565b606554613b7d908490600160481b900461ffff166155a1565b607454613b8a9190615114565b613b94919061524e565b905080607454607454613ba79190615114565b613bb1919061524e565b60745550505b505050505050565b600054610100900460ff16613c2a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109e5565b6120ae33613c8d565b6033546001600160a01b031633146120ae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109e5565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d2f57600080fd5b505af1158015613d43573d6000803e3d6000fd5b505050506120ae614528565b60006001600160401b038a1615613eca576072546001600160401b03908116908b161115613e0e5760405162461bcd60e51b815260206004820152606c60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c4016109e5565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613ec45760405162461bcd60e51b815260206004820152606060248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a4016109e5565b5061401e565b506001600160401b0387166000908152606d602052604090205480613f6b5760405162461bcd60e51b815260206004820152605760248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a4016109e5565b6069546001600160401b03908116908916111561401e5760405162461bcd60e51b815260206004820152607160248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c4016109e5565b6072546001600160401b03908116908a161180159061404e5750896001600160401b0316896001600160401b0316115b801561406f57506072546001600160401b03600160401b9091048116908a16115b6140e75760405162461bcd60e51b815260206004820152604f60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a4016109e5565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146141a75760405162461bcd60e51b815260206004820152606a60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c4016109e5565b60006141b6898989858a610aea565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516141eb91906153f6565b602060405180830381855afa158015614208573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061422b919061505f565b6142359190615412565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614279918a918a918a9190600401615426565b602060405180830381865afa158015614296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ba91906154a0565b61431a5760405162461bcd60e51b815260206004820152603e60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20494e56414c49445f50524f4f46000060648201526084016109e5565b6001600160401b038b166000908152607160205260409020600201548790036139cb5760405162461bcd60e51b815260206004820152606260248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c4016109e5565b60655460ff166143ec5760405162461bcd60e51b81526004016109e5906152e3565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614476826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145839092919063ffffffff16565b8051909150156144f3578080602001905181019061449491906154a0565b6144f35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109e5565b505050565b6040516001600160a01b0383166024820152604481018290526144f390849063a9059cbb60e01b906064016133c0565b60655460ff161561454b5760405162461bcd60e51b81526004016109e590614f98565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614592848460008561459a565b949350505050565b6060824710156145fb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109e5565b600080866001600160a01b0316858760405161461791906153f6565b60006040518083038185875af1925050503d8060008114614654576040519150601f19603f3d011682016040523d82523d6000602084013e614659565b606091505b509150915061466a87838387614675565b979650505050505050565b606083156146e45782516000036146dd576001600160a01b0385163b6146dd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109e5565b5081614592565b61459283838151156146f95781518083602001fd5b8060405162461bcd60e51b81526004016109e5919061476b565b60005b8381101561472e578181015183820152602001614716565b838111156131785750506000910152565b60008151808452614757816020860160208601614713565b601f01601f19169290920160200192915050565b60208152600061477e602083018461473f565b9392505050565b60006020828403121561479757600080fd5b813561ffff8116811461477e57600080fd5b80356001600160401b03811681146147c057600080fd5b919050565b600080600080600060a086880312156147dd57600080fd5b6147e6866147a9565b94506147f4602087016147a9565b94979496505050506040830135926060810135926080909101359150565b60006020828403121561482457600080fd5b61477e826147a9565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156148655761486561482d565b60405290565b604051606081016001600160401b03811182821017156148655761486561482d565b604051601f8201601f191681016001600160401b03811182821017156148b5576148b561482d565b604052919050565b60006001600160401b038211156148d6576148d661482d565b5060051b60200190565b600082601f8301126148f157600080fd5b81356001600160401b0381111561490a5761490a61482d565b61491d601f8201601f191660200161488d565b81815284602083860101111561493257600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561496257600080fd5b82356001600160401b038082111561497957600080fd5b818501915085601f83011261498d57600080fd5b81356149a061499b826148bd565b61488d565b81815260059190911b830184019084810190888311156149bf57600080fd5b8585015b83811015614a58578035858111156149db5760008081fd5b86016080818c03601f19018113156149f35760008081fd5b6149fb614843565b8983013588811115614a0d5760008081fd5b614a1b8e8c838701016148e0565b8252506040808401358b8301526060614a358186016147a9565b82840152614a448486016147a9565b9083015250855250509186019186016149c3565b5098975050505050505050565b8060408101831015614a7657600080fd5b92915050565b8060808101831015614a7657600080fd5b6000806000806000806000806101a0898b031215614aaa57600080fd5b614ab3896147a9565b9750614ac160208a016147a9565b9650614acf60408a016147a9565b95506060890135945060808901359350614aec8a60a08b01614a65565b9250614afb8a60e08b01614a7c565b9150614b0b8a6101608b01614a65565b90509295985092959890939650565b6001600160a01b038116811461232557600080fd5b600080600080600080600080888a036101c0811215614b4d57600080fd5b8935614b5881614b1a565b985060208a0135614b6881614b1a565b975060408a0135614b7881614b1a565b965060608a0135614b8881614b1a565b955060e0607f1982011215614b9c57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614bc657600080fd5b614bd28c838d016148e0565b93506101a08b0135915080821115614be957600080fd5b50614bf68b828c016148e0565b9150509295985092959890939650565b600060208284031215614c1857600080fd5b813561477e81614b1a565b60008060008060008060008060006101c08a8c031215614c4257600080fd5b614c4b8a6147a9565b9850614c5960208b016147a9565b9750614c6760408b016147a9565b9650614c7560608b016147a9565b955060808a0135945060a08a01359350614c928b60c08c01614a65565b9250614ca28b6101008c01614a7c565b9150614cb28b6101808c01614a65565b90509295985092959850929598565b600060208284031215614cd357600080fd5b5035919050565b801515811461232557600080fd5b600060208284031215614cfa57600080fd5b813561477e81614cda565b600060208284031215614d1757600080fd5b81356001600160401b03811115614d2d57600080fd5b614592848285016148e0565b60006020808385031215614d4c57600080fd5b82356001600160401b0380821115614d6357600080fd5b818501915085601f830112614d7757600080fd5b8135614d8561499b826148bd565b81815260059190911b83018401908481019088831115614da457600080fd5b8585015b83811015614a5857803585811115614dc05760008081fd5b86016060818c03601f1901811315614dd85760008081fd5b614de061486b565b8983013588811115614df25760008081fd5b614e008e8c838701016148e0565b8252506040808401358b830152614e188385016147a9565b9082015285525050918601918601614da8565b60008060408385031215614e3e57600080fd5b82356001600160401b03811115614e5457600080fd5b614e60858286016148e0565b95602094909401359450505050565b600181811c90821680614e8357607f821691505b602082108103614ea357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614f2457614f24614eec565b01949350505050565b60208082526045908201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361503257615032614eec565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b60006020828403121561507157600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b6000600182016150ce576150ce614eec565b5060010190565b60006001600160401b03838116908316818110156150f5576150f5614eec565b039392505050565b60008282101561510f5761510f614eec565b500390565b600081600019048311821515161561512e5761512e614eec565b500290565b601f8211156144f357600081815260208120601f850160051c8101602086101561515a5750805b601f850160051c820191505b81811015613bb757828155600101615166565b81516001600160401b038111156151925761519261482d565b6151a6816151a08454614e6f565b84615133565b602080601f8311600181146151db57600084156151c35750858301515b600019600386901b1c1916600185901b178555613bb7565b600085815260208120601f198616915b8281101561520a578886015182559484019460019091019084016151eb565b50858210156152285787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b60008261525d5761525d615238565b500490565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b600082198211156152de576152de614eec565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b03831660208201526060604082018190526000906153c79083018461473f565b95945050505050565b60006001600160401b03808416806153ea576153ea615238565b92169190910492915050565b60008251615408818460208701614713565b9190910192915050565b60008261542157615421615238565b500690565b61012081016040808784376000838201818152879190815b600281101561545e5784848337908401828152928401929060010161543e565b5050828760c0870137610100850181815286935091505b6001811015615494578251825260209283019290910190600101615475565b50505095945050505050565b6000602082840312156154b257600080fd5b815161477e81614cda565b600181815b808511156154f85781600019048211156154de576154de614eec565b808516156154eb57918102915b93841c93908002906154c2565b509250929050565b60008261550f57506001614a76565b8161551c57506000614a76565b8160018114615532576002811461553c57615558565b6001915050614a76565b60ff84111561554d5761554d614eec565b50506001821b614a76565b5060208310610133831016604e8410600b841016171561557b575081810a614a76565b61558583836154bd565b806000190482111561559957615599614eec565b029392505050565b600061477e838361550056fe506f6c79676f6e5a4b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a4b45564d3a3a70726f76654e6f6e44657465726d696e6973a264697066735822122071fdcd0f9a8f0b314d5f2c9585779a6782ff33390883cf6d65249cba6f4fa26764736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5061562380620000216000396000f3fe608060405234801561001057600080fd5b50600436106103af5760003560e01c80638da5cb5b116101f4578063cfa8ed471161011a578063e7a7ed02116100ad578063f14916d61161007c578063f14916d6146108eb578063f2fde38b146108fe578063f851a44014610911578063f8b823e41461092457600080fd5b8063e7a7ed0214610898578063e8bf92ed146108b2578063eaeb077b146108c5578063edc41121146108d857600080fd5b8063d939b315116100e9578063d939b3151461085a578063dbc1697614610874578063e11f3f181461087c578063e217cfd61461088f57600080fd5b8063cfa8ed4714610806578063d02103ca14610820578063d8d1091b14610833578063d8f54db01461084657600080fd5b8063ab9fc5ef11610192578063b6b0b09711610161578063b6b0b097146107be578063c0ed84e0146107d8578063c89e42df146107e0578063cf136306146107f357600080fd5b8063ab9fc5ef14610712578063adc879e91461071c578063afd23cbe14610736578063b4d63f581461075e57600080fd5b80639eb831b9116101ce5780639eb831b9146106d75780639f0d039d146106df578063a3c573eb146106e7578063aa58bad6146106fa57600080fd5b80638da5cb5b146106ab57806399f5634e146106bc5780639c9f3dfe146106c457600080fd5b80634a910e6a116102d9578063715018a611610277578063837a473811610246578063837a473814610606578063841b24d7146106745780638b48931e1461068e5780638c4a0af71461069857600080fd5b8063715018a6146105c55780637215541a146105cd57806375c508b3146105e05780637fcb3653146105f357600080fd5b806360943d6a116102b357806360943d6a1461056c5780636b8616ce1461057f5780636ff512cc1461059f578063704b6c02146105b257600080fd5b80634a910e6a146105315780635392c5e014610544578063542028d51461056457600080fd5b8063383b3be811610351578063456052671161032057806345605267146104d7578063458c0477146104f15780634834a343146105045780634a1a89a71461051757600080fd5b8063383b3be814610484578063394218e9146104975780633c158267146104aa578063423fa856146104bd57600080fd5b806319d8ac611161038d57806319d8ac6114610404578063220d78991461042f57806329878983146104425780632d0889d31461046d57600080fd5b8063107bf28c146103b457806315064c96146103d25780631816b7e5146103ef575b600080fd5b6103bc61092d565b6040516103c9919061476b565b60405180910390f35b6065546103df9060ff1681565b60405190151581526020016103c9565b6104026103fd366004614785565b6109bb565b005b606854610417906001600160401b031681565b6040516001600160401b0390911681526020016103c9565b6103bc61043d3660046147c5565b610aea565b606a54610455906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b61047661ea6081565b6040519081526020016103c9565b6103df610492366004614812565b610c90565b6104026104a5366004614812565b610cd7565b6104026104b836600461494f565b610e26565b60685461041790600160401b90046001600160401b031681565b60685461041790600160801b90046001600160401b031681565b607254610417906001600160401b031681565b610402610512366004614a8d565b61163a565b60725461041790600160401b90046001600160401b031681565b61040261053f366004614812565b611983565b610476610552366004614812565b606d6020526000908152604090205481565b6103bc611c23565b61040261057a366004614b2f565b611c30565b61047661058d366004614812565b60666020526000908152604090205481565b6104026105ad366004614c06565b611fa0565b6104026105c0366004614c06565b612024565b61040261209c565b6104026105db366004614812565b6120b0565b6104026105ee366004614c23565b612328565b606954610417906001600160401b031681565b610649610614366004614cc1565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103c9565b60725461041790600160c01b90046001600160401b031681565b61041762093a8081565b6104026106a6366004614ce8565b6123b7565b6033546001600160a01b0316610455565b61047661242e565b6104026106d2366004614812565b612511565b610476600c81565b607454610476565b607054610455906001600160a01b031681565b6065546104179061010090046001600160401b031681565b6104176206978081565b606c5461041790600160a81b90046001600160401b031681565b60655461074b90600160481b900461ffff1681565b60405161ffff90911681526020016103c9565b61079961076c366004614812565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103c9565b60655461045590600160581b90046001600160a01b031681565b610417612657565b6104026107ee366004614d05565b6126a4565b610402610801366004614812565b61270a565b60695461045590600160401b90046001600160a01b031681565b606c54610455906001600160a01b031681565b610402610841366004614d39565b61278b565b606c546103df90600160a01b900460ff1681565b60725461041790600160801b90046001600160401b031681565b610402612c55565b61040261088a366004614c23565b612d11565b6104176103e881565b60685461041790600160c01b90046001600160401b031681565b606b54610455906001600160a01b031681565b6104026108d3366004614e2b565b612e56565b6104026108e6366004614a8d565b61317e565b6104026108f9366004614c06565b61329e565b61040261090c366004614c06565b613316565b607354610455906001600160a01b031681565b61047660745481565b606f805461093a90614e6f565b80601f016020809104026020016040519081016040528092919081815260200182805461096690614e6f565b80156109b35780601f10610988576101008083540402835291602001916109b3565b820191906000526020600020905b81548152906001019060200180831161099657829003601f168201915b505050505081565b6073546001600160a01b031633146109ee5760405162461bcd60e51b81526004016109e590614ea9565b60405180910390fd5b6103e88161ffff16118015610a0857506104008161ffff16105b610a8d5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a4b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a4016109e5565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610b1c57508115155b610b90576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e5565b80610c05576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e5565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610cc692600160801b90920481169116614f02565b6001600160401b0316111592915050565b6073546001600160a01b03163314610d015760405162461bcd60e51b81526004016109e590614ea9565b62093a806001600160401b0382161115610d2d5760405162461bcd60e51b81526004016109e590614f2d565b60655460ff16610dd0576072546001600160401b03600160c01b909104811690821610610dd05760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a4b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109e5565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610adf565b60655460ff1615610e495760405162461bcd60e51b81526004016109e590614f98565b606954600160401b90046001600160a01b03163314610ed05760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e63657200000000000060648201526084016109e5565b805180610f455760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e6365203120626174636800000060648201526084016109e5565b6103e88110610fbe576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e79206261746368657360648201526084016109e5565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561145e57600087828151811061101157611011615000565b60200260200101519050600081606001516001600160401b031611156111ca578361103b81615016565b9450506000816000015180519060200120826020015183606001516040516020016110689392919061503c565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461110e5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d6174636800000060648201526084016109e5565b81606001516001600160401b031682604001516001600160401b031610156111c45760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a4016109e5565b50611351565b602081015115806112535750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b36329161120d9160040190815260200190565b6020604051808303816000875af115801561122c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611250919061505f565b15155b6112c55760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d75737420657869737400000000000060648201526084016109e5565b80515161ea60116113515760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a4016109e5565b856001600160401b031681604001516001600160401b03161015801561138457504281604001516001600160401b031611155b6113f65760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e676500000060648201526084016109e5565b8051805160209182012081830151604080850151905161141d948894939291339101615078565b604051602081830303815290604052805190602001209250848061144090615016565b95505080604001519550508080611456906150bc565b915050610ff5565b506068546001600160401b03600160c01b909104811690831611156114e35760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b60648201526084016109e5565b60685460009061150390600160801b90046001600160401b0316846150d5565b611516906001600160401b0316876150fd565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115eb903390309084906115d09190615114565b606554600160581b90046001600160a01b031692919061338c565b6115f36133f7565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff161561165d5760405162461bcd60e51b81526004016109e590614f98565b6072546001600160401b03878116600090815260676020526040902060010154429261169492600160c01b90910481169116614f02565b6001600160401b0316111561171d5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a4016109e5565b6103e861172a88886150d5565b6001600160401b0316106117a65760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e7920626174636865730000000060648201526084016109e5565b6117b6888888888888888861349b565b6117bf866139d9565b607254600160801b90046001600160401b0316600003611887576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561182457607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561186a57600080fd5b505af115801561187e573d6000803e3d6000fd5b50505050611938565b61188f6133f7565b607280546001600160401b03169060006118a883615016565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b038116158015906119b057506072546001600160401b03600160401b9091048116908216115b80156119cb57506072546001600160401b0390811690821611155b611a495760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a4016109e5565b606a546001600160a01b03163314611af357611a6481610c90565b611af35760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a4016109e5565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d9094529382902092909255607280546fffffffffffffffff000000000000000019169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611bb557600080fd5b505af1158015611bc9573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611c1691815260200190565b60405180910390a3505050565b606e805461093a90614e6f565b600054610100900460ff1615808015611c505750600054600160ff909116105b80611c6a5750303b158015611c6a575060005460ff166001145b611ccd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109e5565b6000805460ff191660011790558015611cf0576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611d6d6020860186614c06565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d9d6060860160408701614c06565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611dd860c0860160a08701614c06565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611e3560e0860160c08701614812565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611e6c6040860160208701614812565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611ea86080860160608701614812565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611ee460a0860160808701614ce8565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611f0c8482615179565b50606f611f198382615179565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611f4f613bbf565b8015611f95576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611fca5760405162461bcd60e51b81526004016109e590614ea9565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610adf565b6073546001600160a01b0316331461204e5760405162461bcd60e51b81526004016109e590614ea9565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190602001610adf565b6120a4613c33565b6120ae6000613c8d565b565b6033546001600160a01b0316331461231d576072546000906001600160401b03161561210157506072546001600160401b03908116600090815260716020526040902054600160401b90041661210f565b506069546001600160401b03165b80826001600160401b03161161218d5760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c72656164792076657269666965640000000060648201526084016109e5565b6068546001600160401b03600160401b9091048116908316118015906121cf57506001600160401b038083166000908152606760205260409020600101541615155b61225a5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a4016109e5565b6001600160401b0380831660009081526067602052604090206001015442916122889162093a809116614f02565b6001600160401b0316111561231b5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a4016109e5565b505b612325613cdf565b50565b60655460ff161561234b5760405162461bcd60e51b81526004016109e590614f98565b61235c898989898989898989613d4f565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f95613cdf565b6073546001600160a01b031633146123e15760405162461bcd60e51b81526004016109e590614ea9565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610adf90831515815260200190565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612481573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a5919061505f565b905060006124b1612657565b6068546001600160401b03600160401b82048116916124e191600160801b8204811691600160c01b9004166150d5565b6124eb9190614f02565b6124f591906150d5565b6001600160401b0316905061250a818361524e565b9250505090565b6073546001600160a01b0316331461253b5760405162461bcd60e51b81526004016109e590614ea9565b62093a806001600160401b03821611156125675760405162461bcd60e51b81526004016109e590614f2d565b60655460ff166125fc576072546001600160401b03600160801b9091048116908216106125fc5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f7765720060648201526084016109e5565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610adf565b6072546000906001600160401b03161561269457506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126ce5760405162461bcd60e51b81526004016109e590614ea9565b606e6126da8282615179565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610adf919061476b565b6073546001600160a01b031633146127345760405162461bcd60e51b81526004016109e590614ea9565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610adf565b60655460ff16156127ae5760405162461bcd60e51b81526004016109e590614f98565b606c54600160a01b900460ff1615156001146127dc5760405162461bcd60e51b81526004016109e590615262565b80518061283f5760405162461bcd60e51b815260206004820152603d60248201526000805160206155ae83398151915260448201527f3a204d75737420666f726365206174206c65617374203120626174636800000060648201526084016109e5565b6103e881106128b05760405162461bcd60e51b815260206004820152604360248201526000805160206155ae83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a4016109e5565b6068546001600160401b03600160c01b82048116916128d8918491600160801b9004166152cb565b11156129325760405162461bcd60e51b815260206004820152603560248201526000805160206155ae8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b60648201526084016109e5565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612b5e57600086828151811061297f5761297f615000565b60200260200101519050838061299490615016565b9450506000816000015180519060200120826020015183604001516040516020016129c19392919061503c565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612a605760405162461bcd60e51b815260206004820152604260248201526000805160206155ae83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109e5565b612a6b6001886150fd565b8303612b005742620697808360400151612a859190614f02565b6001600160401b03161115612b005760405162461bcd60e51b815260206004820152604760248201526000805160206155ae83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a4016109e5565b8151805160209182012081840151604051612b2393889392914291339101615078565b6040516020818303038152906040528051906020012093508580612b4690615016565b96505050508080612b56906150bc565b915050612963565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612c775760405162461bcd60e51b81526004016109e5906152e3565b6073546001600160a01b03163314612ca15760405162461bcd60e51b81526004016109e590614ea9565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612cf157600080fd5b505af1158015612d05573d6000803e3d6000fd5b505050506120ae6143ca565b606a546001600160a01b03163314612d3b5760405162461bcd60e51b81526004016109e590615340565b612d4c898989898989898989613d4f565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612d9757607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612ddd57600080fd5b505af1158015612df1573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612e795760405162461bcd60e51b81526004016109e590614f98565b606c54600160a01b900460ff161515600114612ea75760405162461bcd60e51b81526004016109e590615262565b6000612eb260745490565b905081811115612f175760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b60648201526084016109e5565b61ea60835110612f875760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b60648201526084016109e5565b606554612fa690600160581b90046001600160a01b031633308461338c565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015612ff0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613014919061505f565b60688054919250600160c01b9091046001600160401b031690601861303883615016565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016130799392919061503c565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361311d57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613178565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161316f9392919061539d565b60405180910390a25b50505050565b606a546001600160a01b031633146131a85760405162461bcd60e51b81526004016109e590615340565b6131b8888888888888888861349b565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561320357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561324957600080fd5b505af115801561325d573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611971565b6073546001600160a01b031633146132c85760405162461bcd60e51b81526004016109e590614ea9565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001610adf565b61331e613c33565b6001600160a01b0381166133835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e5565b61232581613c8d565b6040516001600160a01b03808516602483015283166044820152606481018290526131789085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614421565b6072546001600160401b03600160401b82048116911611156120ae5760725460009061343490600160401b90046001600160401b03166001614f02565b905061343f81610c90565b15612325576072546000906002906134619084906001600160401b03166150d5565b61346b91906153d0565b6134759083614f02565b905061348081610c90565b156134925761348e81611983565b5050565b61348e82611983565b6000806134a6612657565b90506001600160401b038a1615613621576072546001600160401b03908116908b1611156135625760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2070656e60448201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560648201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608482015260a4016109e5565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b909204161461361b5760405162461bcd60e51b815260206004820152604c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760648201526b040e6e8c2e8ca40c4c2e8c6d60a31b608482015260a4016109e5565b50613769565b6001600160401b0389166000908152606d60205260409020549150816136bb5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786064820152621a5cdd60ea1b608482015260a4016109e5565b806001600160401b0316896001600160401b031611156137695760405162461bcd60e51b815260206004820152605d60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060648201527f7468616e2063757272656e744c61737456657269666965644261746368000000608482015260a4016109e5565b806001600160401b0316886001600160401b0316116138165760405162461bcd60e51b815260206004820152605760248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2066696e60448201527f616c4e65774261746368206d75737420626520626967676572207468616e206360648201527f757272656e744c61737456657269666965644261746368000000000000000000608482015260a4016109e5565b60006138258a8a8a868b610aea565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161385a91906153f6565b602060405180830381855afa158015613877573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061389a919061505f565b6138a49190615412565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916138e8918b918b918b9190600401615426565b602060405180830381865afa158015613905573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392991906154a0565b6139885760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20494e5660448201526920a624a22fa82927a7a360b11b60648201526084016109e5565b6139cb33613996858d6150d5565b6001600160401b03166139a761242e565b6139b19190615114565b606554600160581b90046001600160a01b031691906144f8565b505050505050505050505050565b60006139e3612657565b9050816000806139f384846150d5565b6001600160401b031690505b836001600160401b0316836001600160401b031614613aa5576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613a4f9116426150fd565b1115613a8a576001810154613a7490600160401b90046001600160401b0316866150d5565b613a87906001600160401b0316846152cb565b92505b60010154600160401b90046001600160401b031692506139ff565b6000613ab183836150fd565b905082811015613b2b576000613ac782856150fd565b9050600c8111613ad75780613ada565b600c5b9050613ae7816003615114565b613af290600a6155a1565b606554613b0b908390600160481b900461ffff166155a1565b607454613b189190615114565b613b22919061524e565b60745550613bb7565b6000613b3784836150fd565b9050600c8111613b475780613b4a565b600c5b90506000613b59826003615114565b613b6490600a6155a1565b606554613b7d908490600160481b900461ffff166155a1565b607454613b8a9190615114565b613b94919061524e565b905080607454607454613ba79190615114565b613bb1919061524e565b60745550505b505050505050565b600054610100900460ff16613c2a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109e5565b6120ae33613c8d565b6033546001600160a01b031633146120ae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109e5565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d2f57600080fd5b505af1158015613d43573d6000803e3d6000fd5b505050506120ae614528565b60006001600160401b038a1615613eca576072546001600160401b03908116908b161115613e0e5760405162461bcd60e51b815260206004820152606c60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c4016109e5565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613ec45760405162461bcd60e51b815260206004820152606060248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a4016109e5565b5061401e565b506001600160401b0387166000908152606d602052604090205480613f6b5760405162461bcd60e51b815260206004820152605760248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a4016109e5565b6069546001600160401b03908116908916111561401e5760405162461bcd60e51b815260206004820152607160248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c4016109e5565b6072546001600160401b03908116908a161180159061404e5750896001600160401b0316896001600160401b0316115b801561406f57506072546001600160401b03600160401b9091048116908a16115b6140e75760405162461bcd60e51b815260206004820152604f60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a4016109e5565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146141a75760405162461bcd60e51b815260206004820152606a60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c4016109e5565b60006141b6898989858a610aea565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516141eb91906153f6565b602060405180830381855afa158015614208573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061422b919061505f565b6142359190615412565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614279918a918a918a9190600401615426565b602060405180830381865afa158015614296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ba91906154a0565b61431a5760405162461bcd60e51b815260206004820152603e60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20494e56414c49445f50524f4f46000060648201526084016109e5565b6001600160401b038b166000908152607160205260409020600201548790036139cb5760405162461bcd60e51b815260206004820152606260248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c4016109e5565b60655460ff166143ec5760405162461bcd60e51b81526004016109e5906152e3565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614476826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145839092919063ffffffff16565b8051909150156144f3578080602001905181019061449491906154a0565b6144f35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109e5565b505050565b6040516001600160a01b0383166024820152604481018290526144f390849063a9059cbb60e01b906064016133c0565b60655460ff161561454b5760405162461bcd60e51b81526004016109e590614f98565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614592848460008561459a565b949350505050565b6060824710156145fb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109e5565b600080866001600160a01b0316858760405161461791906153f6565b60006040518083038185875af1925050503d8060008114614654576040519150601f19603f3d011682016040523d82523d6000602084013e614659565b606091505b509150915061466a87838387614675565b979650505050505050565b606083156146e45782516000036146dd576001600160a01b0385163b6146dd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109e5565b5081614592565b61459283838151156146f95781518083602001fd5b8060405162461bcd60e51b81526004016109e5919061476b565b60005b8381101561472e578181015183820152602001614716565b838111156131785750506000910152565b60008151808452614757816020860160208601614713565b601f01601f19169290920160200192915050565b60208152600061477e602083018461473f565b9392505050565b60006020828403121561479757600080fd5b813561ffff8116811461477e57600080fd5b80356001600160401b03811681146147c057600080fd5b919050565b600080600080600060a086880312156147dd57600080fd5b6147e6866147a9565b94506147f4602087016147a9565b94979496505050506040830135926060810135926080909101359150565b60006020828403121561482457600080fd5b61477e826147a9565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156148655761486561482d565b60405290565b604051606081016001600160401b03811182821017156148655761486561482d565b604051601f8201601f191681016001600160401b03811182821017156148b5576148b561482d565b604052919050565b60006001600160401b038211156148d6576148d661482d565b5060051b60200190565b600082601f8301126148f157600080fd5b81356001600160401b0381111561490a5761490a61482d565b61491d601f8201601f191660200161488d565b81815284602083860101111561493257600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561496257600080fd5b82356001600160401b038082111561497957600080fd5b818501915085601f83011261498d57600080fd5b81356149a061499b826148bd565b61488d565b81815260059190911b830184019084810190888311156149bf57600080fd5b8585015b83811015614a58578035858111156149db5760008081fd5b86016080818c03601f19018113156149f35760008081fd5b6149fb614843565b8983013588811115614a0d5760008081fd5b614a1b8e8c838701016148e0565b8252506040808401358b8301526060614a358186016147a9565b82840152614a448486016147a9565b9083015250855250509186019186016149c3565b5098975050505050505050565b8060408101831015614a7657600080fd5b92915050565b8060808101831015614a7657600080fd5b6000806000806000806000806101a0898b031215614aaa57600080fd5b614ab3896147a9565b9750614ac160208a016147a9565b9650614acf60408a016147a9565b95506060890135945060808901359350614aec8a60a08b01614a65565b9250614afb8a60e08b01614a7c565b9150614b0b8a6101608b01614a65565b90509295985092959890939650565b6001600160a01b038116811461232557600080fd5b600080600080600080600080888a036101c0811215614b4d57600080fd5b8935614b5881614b1a565b985060208a0135614b6881614b1a565b975060408a0135614b7881614b1a565b965060608a0135614b8881614b1a565b955060e0607f1982011215614b9c57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614bc657600080fd5b614bd28c838d016148e0565b93506101a08b0135915080821115614be957600080fd5b50614bf68b828c016148e0565b9150509295985092959890939650565b600060208284031215614c1857600080fd5b813561477e81614b1a565b60008060008060008060008060006101c08a8c031215614c4257600080fd5b614c4b8a6147a9565b9850614c5960208b016147a9565b9750614c6760408b016147a9565b9650614c7560608b016147a9565b955060808a0135945060a08a01359350614c928b60c08c01614a65565b9250614ca28b6101008c01614a7c565b9150614cb28b6101808c01614a65565b90509295985092959850929598565b600060208284031215614cd357600080fd5b5035919050565b801515811461232557600080fd5b600060208284031215614cfa57600080fd5b813561477e81614cda565b600060208284031215614d1757600080fd5b81356001600160401b03811115614d2d57600080fd5b614592848285016148e0565b60006020808385031215614d4c57600080fd5b82356001600160401b0380821115614d6357600080fd5b818501915085601f830112614d7757600080fd5b8135614d8561499b826148bd565b81815260059190911b83018401908481019088831115614da457600080fd5b8585015b83811015614a5857803585811115614dc05760008081fd5b86016060818c03601f1901811315614dd85760008081fd5b614de061486b565b8983013588811115614df25760008081fd5b614e008e8c838701016148e0565b8252506040808401358b830152614e188385016147a9565b9082015285525050918601918601614da8565b60008060408385031215614e3e57600080fd5b82356001600160401b03811115614e5457600080fd5b614e60858286016148e0565b95602094909401359450505050565b600181811c90821680614e8357607f821691505b602082108103614ea357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614f2457614f24614eec565b01949350505050565b60208082526045908201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361503257615032614eec565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b60006020828403121561507157600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b6000600182016150ce576150ce614eec565b5060010190565b60006001600160401b03838116908316818110156150f5576150f5614eec565b039392505050565b60008282101561510f5761510f614eec565b500390565b600081600019048311821515161561512e5761512e614eec565b500290565b601f8211156144f357600081815260208120601f850160051c8101602086101561515a5750805b601f850160051c820191505b81811015613bb757828155600101615166565b81516001600160401b038111156151925761519261482d565b6151a6816151a08454614e6f565b84615133565b602080601f8311600181146151db57600084156151c35750858301515b600019600386901b1c1916600185901b178555613bb7565b600085815260208120601f198616915b8281101561520a578886015182559484019460019091019084016151eb565b50858210156152285787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b60008261525d5761525d615238565b500490565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b600082198211156152de576152de614eec565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b03831660208201526060604082018190526000906153c79083018461473f565b95945050505050565b60006001600160401b03808416806153ea576153ea615238565b92169190910492915050565b60008251615408818460208701614713565b9190910192915050565b60008261542157615421615238565b500690565b61012081016040808784376000838201818152879190815b600281101561545e5784848337908401828152928401929060010161543e565b5050828760c0870137610100850181815286935091505b6001811015615494578251825260209283019290910190600101615475565b50505095945050505050565b6000602082840312156154b257600080fd5b815161477e81614cda565b600181815b808511156154f85781600019048211156154de576154de614eec565b808516156154eb57918102915b93841c93908002906154c2565b509250929050565b60008261550f57506001614a76565b8161551c57506000614a76565b8160018114615532576002811461553c57615558565b6001915050614a76565b60ff84111561554d5761554d614eec565b50506001821b614a76565b5060208310610133831016604e8410600b841016171561557b575081810a614a76565b61558583836154bd565b806000190482111561559957615599614eec565b029392505050565b600061477e838361550056fe506f6c79676f6e5a4b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a4b45564d3a3a70726f76654e6f6e44657465726d696e6973a26469706673582212205d57ed2ff6c1ede6347c6bf0896d13c6ddcaf85c10458b10044af2a6be36deaf64736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103af5760003560e01c80638da5cb5b116101f4578063cfa8ed471161011a578063e7a7ed02116100ad578063f14916d61161007c578063f14916d6146108eb578063f2fde38b146108fe578063f851a44014610911578063f8b823e41461092457600080fd5b8063e7a7ed0214610898578063e8bf92ed146108b2578063eaeb077b146108c5578063edc41121146108d857600080fd5b8063d939b315116100e9578063d939b3151461085a578063dbc1697614610874578063e11f3f181461087c578063e217cfd61461088f57600080fd5b8063cfa8ed4714610806578063d02103ca14610820578063d8d1091b14610833578063d8f54db01461084657600080fd5b8063ab9fc5ef11610192578063b6b0b09711610161578063b6b0b097146107be578063c0ed84e0146107d8578063c89e42df146107e0578063cf136306146107f357600080fd5b8063ab9fc5ef14610712578063adc879e91461071c578063afd23cbe14610736578063b4d63f581461075e57600080fd5b80639eb831b9116101ce5780639eb831b9146106d75780639f0d039d146106df578063a3c573eb146106e7578063aa58bad6146106fa57600080fd5b80638da5cb5b146106ab57806399f5634e146106bc5780639c9f3dfe146106c457600080fd5b80634a910e6a116102d9578063715018a611610277578063837a473811610246578063837a473814610606578063841b24d7146106745780638b48931e1461068e5780638c4a0af71461069857600080fd5b8063715018a6146105c55780637215541a146105cd57806375c508b3146105e05780637fcb3653146105f357600080fd5b806360943d6a116102b357806360943d6a1461056c5780636b8616ce1461057f5780636ff512cc1461059f578063704b6c02146105b257600080fd5b80634a910e6a146105315780635392c5e014610544578063542028d51461056457600080fd5b8063383b3be811610351578063456052671161032057806345605267146104d7578063458c0477146104f15780634834a343146105045780634a1a89a71461051757600080fd5b8063383b3be814610484578063394218e9146104975780633c158267146104aa578063423fa856146104bd57600080fd5b806319d8ac611161038d57806319d8ac6114610404578063220d78991461042f57806329878983146104425780632d0889d31461046d57600080fd5b8063107bf28c146103b457806315064c96146103d25780631816b7e5146103ef575b600080fd5b6103bc61092d565b6040516103c9919061476b565b60405180910390f35b6065546103df9060ff1681565b60405190151581526020016103c9565b6104026103fd366004614785565b6109bb565b005b606854610417906001600160401b031681565b6040516001600160401b0390911681526020016103c9565b6103bc61043d3660046147c5565b610aea565b606a54610455906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b61047661ea6081565b6040519081526020016103c9565b6103df610492366004614812565b610c90565b6104026104a5366004614812565b610cd7565b6104026104b836600461494f565b610e26565b60685461041790600160401b90046001600160401b031681565b60685461041790600160801b90046001600160401b031681565b607254610417906001600160401b031681565b610402610512366004614a8d565b61163a565b60725461041790600160401b90046001600160401b031681565b61040261053f366004614812565b611983565b610476610552366004614812565b606d6020526000908152604090205481565b6103bc611c23565b61040261057a366004614b2f565b611c30565b61047661058d366004614812565b60666020526000908152604090205481565b6104026105ad366004614c06565b611fa0565b6104026105c0366004614c06565b612024565b61040261209c565b6104026105db366004614812565b6120b0565b6104026105ee366004614c23565b612328565b606954610417906001600160401b031681565b610649610614366004614cc1565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103c9565b60725461041790600160c01b90046001600160401b031681565b61041762093a8081565b6104026106a6366004614ce8565b6123b7565b6033546001600160a01b0316610455565b61047661242e565b6104026106d2366004614812565b612511565b610476600c81565b607454610476565b607054610455906001600160a01b031681565b6065546104179061010090046001600160401b031681565b6104176206978081565b606c5461041790600160a81b90046001600160401b031681565b60655461074b90600160481b900461ffff1681565b60405161ffff90911681526020016103c9565b61079961076c366004614812565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103c9565b60655461045590600160581b90046001600160a01b031681565b610417612657565b6104026107ee366004614d05565b6126a4565b610402610801366004614812565b61270a565b60695461045590600160401b90046001600160a01b031681565b606c54610455906001600160a01b031681565b610402610841366004614d39565b61278b565b606c546103df90600160a01b900460ff1681565b60725461041790600160801b90046001600160401b031681565b610402612c55565b61040261088a366004614c23565b612d11565b6104176103e881565b60685461041790600160c01b90046001600160401b031681565b606b54610455906001600160a01b031681565b6104026108d3366004614e2b565b612e56565b6104026108e6366004614a8d565b61317e565b6104026108f9366004614c06565b61329e565b61040261090c366004614c06565b613316565b607354610455906001600160a01b031681565b61047660745481565b606f805461093a90614e6f565b80601f016020809104026020016040519081016040528092919081815260200182805461096690614e6f565b80156109b35780601f10610988576101008083540402835291602001916109b3565b820191906000526020600020905b81548152906001019060200180831161099657829003601f168201915b505050505081565b6073546001600160a01b031633146109ee5760405162461bcd60e51b81526004016109e590614ea9565b60405180910390fd5b6103e88161ffff16118015610a0857506104008161ffff16105b610a8d5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a4b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a4016109e5565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610b1c57508115155b610b90576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e5565b80610c05576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e5565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610cc692600160801b90920481169116614f02565b6001600160401b0316111592915050565b6073546001600160a01b03163314610d015760405162461bcd60e51b81526004016109e590614ea9565b62093a806001600160401b0382161115610d2d5760405162461bcd60e51b81526004016109e590614f2d565b60655460ff16610dd0576072546001600160401b03600160c01b909104811690821610610dd05760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a4b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109e5565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610adf565b60655460ff1615610e495760405162461bcd60e51b81526004016109e590614f98565b606954600160401b90046001600160a01b03163314610ed05760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e63657200000000000060648201526084016109e5565b805180610f455760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e6365203120626174636800000060648201526084016109e5565b6103e88110610fbe576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e79206261746368657360648201526084016109e5565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561145e57600087828151811061101157611011615000565b60200260200101519050600081606001516001600160401b031611156111ca578361103b81615016565b9450506000816000015180519060200120826020015183606001516040516020016110689392919061503c565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461110e5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d6174636800000060648201526084016109e5565b81606001516001600160401b031682604001516001600160401b031610156111c45760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a4016109e5565b50611351565b602081015115806112535750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b36329161120d9160040190815260200190565b6020604051808303816000875af115801561122c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611250919061505f565b15155b6112c55760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d75737420657869737400000000000060648201526084016109e5565b80515161ea60116113515760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a4016109e5565b856001600160401b031681604001516001600160401b03161015801561138457504281604001516001600160401b031611155b6113f65760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e676500000060648201526084016109e5565b8051805160209182012081830151604080850151905161141d948894939291339101615078565b604051602081830303815290604052805190602001209250848061144090615016565b95505080604001519550508080611456906150bc565b915050610ff5565b506068546001600160401b03600160c01b909104811690831611156114e35760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b60648201526084016109e5565b60685460009061150390600160801b90046001600160401b0316846150d5565b611516906001600160401b0316876150fd565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115eb903390309084906115d09190615114565b606554600160581b90046001600160a01b031692919061338c565b6115f36133f7565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff161561165d5760405162461bcd60e51b81526004016109e590614f98565b6072546001600160401b03878116600090815260676020526040902060010154429261169492600160c01b90910481169116614f02565b6001600160401b0316111561171d5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a4016109e5565b6103e861172a88886150d5565b6001600160401b0316106117a65760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e7920626174636865730000000060648201526084016109e5565b6117b6888888888888888861349b565b6117bf866139d9565b607254600160801b90046001600160401b0316600003611887576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561182457607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561186a57600080fd5b505af115801561187e573d6000803e3d6000fd5b50505050611938565b61188f6133f7565b607280546001600160401b03169060006118a883615016565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b038116158015906119b057506072546001600160401b03600160401b9091048116908216115b80156119cb57506072546001600160401b0390811690821611155b611a495760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a4016109e5565b606a546001600160a01b03163314611af357611a6481610c90565b611af35760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a4016109e5565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d9094529382902092909255607280546fffffffffffffffff000000000000000019169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611bb557600080fd5b505af1158015611bc9573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611c1691815260200190565b60405180910390a3505050565b606e805461093a90614e6f565b600054610100900460ff1615808015611c505750600054600160ff909116105b80611c6a5750303b158015611c6a575060005460ff166001145b611ccd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109e5565b6000805460ff191660011790558015611cf0576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611d6d6020860186614c06565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d9d6060860160408701614c06565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611dd860c0860160a08701614c06565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611e3560e0860160c08701614812565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611e6c6040860160208701614812565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611ea86080860160608701614812565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611ee460a0860160808701614ce8565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611f0c8482615179565b50606f611f198382615179565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611f4f613bbf565b8015611f95576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611fca5760405162461bcd60e51b81526004016109e590614ea9565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610adf565b6073546001600160a01b0316331461204e5760405162461bcd60e51b81526004016109e590614ea9565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190602001610adf565b6120a4613c33565b6120ae6000613c8d565b565b6033546001600160a01b0316331461231d576072546000906001600160401b03161561210157506072546001600160401b03908116600090815260716020526040902054600160401b90041661210f565b506069546001600160401b03165b80826001600160401b03161161218d5760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c72656164792076657269666965640000000060648201526084016109e5565b6068546001600160401b03600160401b9091048116908316118015906121cf57506001600160401b038083166000908152606760205260409020600101541615155b61225a5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a4016109e5565b6001600160401b0380831660009081526067602052604090206001015442916122889162093a809116614f02565b6001600160401b0316111561231b5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a4016109e5565b505b612325613cdf565b50565b60655460ff161561234b5760405162461bcd60e51b81526004016109e590614f98565b61235c898989898989898989613d4f565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f95613cdf565b6073546001600160a01b031633146123e15760405162461bcd60e51b81526004016109e590614ea9565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610adf90831515815260200190565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612481573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a5919061505f565b905060006124b1612657565b6068546001600160401b03600160401b82048116916124e191600160801b8204811691600160c01b9004166150d5565b6124eb9190614f02565b6124f591906150d5565b6001600160401b0316905061250a818361524e565b9250505090565b6073546001600160a01b0316331461253b5760405162461bcd60e51b81526004016109e590614ea9565b62093a806001600160401b03821611156125675760405162461bcd60e51b81526004016109e590614f2d565b60655460ff166125fc576072546001600160401b03600160801b9091048116908216106125fc5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f7765720060648201526084016109e5565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610adf565b6072546000906001600160401b03161561269457506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126ce5760405162461bcd60e51b81526004016109e590614ea9565b606e6126da8282615179565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610adf919061476b565b6073546001600160a01b031633146127345760405162461bcd60e51b81526004016109e590614ea9565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610adf565b60655460ff16156127ae5760405162461bcd60e51b81526004016109e590614f98565b606c54600160a01b900460ff1615156001146127dc5760405162461bcd60e51b81526004016109e590615262565b80518061283f5760405162461bcd60e51b815260206004820152603d60248201526000805160206155ae83398151915260448201527f3a204d75737420666f726365206174206c65617374203120626174636800000060648201526084016109e5565b6103e881106128b05760405162461bcd60e51b815260206004820152604360248201526000805160206155ae83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a4016109e5565b6068546001600160401b03600160c01b82048116916128d8918491600160801b9004166152cb565b11156129325760405162461bcd60e51b815260206004820152603560248201526000805160206155ae8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b60648201526084016109e5565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612b5e57600086828151811061297f5761297f615000565b60200260200101519050838061299490615016565b9450506000816000015180519060200120826020015183604001516040516020016129c19392919061503c565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612a605760405162461bcd60e51b815260206004820152604260248201526000805160206155ae83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109e5565b612a6b6001886150fd565b8303612b005742620697808360400151612a859190614f02565b6001600160401b03161115612b005760405162461bcd60e51b815260206004820152604760248201526000805160206155ae83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a4016109e5565b8151805160209182012081840151604051612b2393889392914291339101615078565b6040516020818303038152906040528051906020012093508580612b4690615016565b96505050508080612b56906150bc565b915050612963565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612c775760405162461bcd60e51b81526004016109e5906152e3565b6073546001600160a01b03163314612ca15760405162461bcd60e51b81526004016109e590614ea9565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612cf157600080fd5b505af1158015612d05573d6000803e3d6000fd5b505050506120ae6143ca565b606a546001600160a01b03163314612d3b5760405162461bcd60e51b81526004016109e590615340565b612d4c898989898989898989613d4f565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612d9757607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612ddd57600080fd5b505af1158015612df1573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612e795760405162461bcd60e51b81526004016109e590614f98565b606c54600160a01b900460ff161515600114612ea75760405162461bcd60e51b81526004016109e590615262565b6000612eb260745490565b905081811115612f175760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b60648201526084016109e5565b61ea60835110612f875760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b60648201526084016109e5565b606554612fa690600160581b90046001600160a01b031633308461338c565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015612ff0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613014919061505f565b60688054919250600160c01b9091046001600160401b031690601861303883615016565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016130799392919061503c565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361311d57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613178565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161316f9392919061539d565b60405180910390a25b50505050565b606a546001600160a01b031633146131a85760405162461bcd60e51b81526004016109e590615340565b6131b8888888888888888861349b565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561320357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561324957600080fd5b505af115801561325d573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611971565b6073546001600160a01b031633146132c85760405162461bcd60e51b81526004016109e590614ea9565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001610adf565b61331e613c33565b6001600160a01b0381166133835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e5565b61232581613c8d565b6040516001600160a01b03808516602483015283166044820152606481018290526131789085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614421565b6072546001600160401b03600160401b82048116911611156120ae5760725460009061343490600160401b90046001600160401b03166001614f02565b905061343f81610c90565b15612325576072546000906002906134619084906001600160401b03166150d5565b61346b91906153d0565b6134759083614f02565b905061348081610c90565b156134925761348e81611983565b5050565b61348e82611983565b6000806134a6612657565b90506001600160401b038a1615613621576072546001600160401b03908116908b1611156135625760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2070656e60448201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560648201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608482015260a4016109e5565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b909204161461361b5760405162461bcd60e51b815260206004820152604c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760648201526b040e6e8c2e8ca40c4c2e8c6d60a31b608482015260a4016109e5565b50613769565b6001600160401b0389166000908152606d60205260409020549150816136bb5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786064820152621a5cdd60ea1b608482015260a4016109e5565b806001600160401b0316896001600160401b031611156137695760405162461bcd60e51b815260206004820152605d60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060648201527f7468616e2063757272656e744c61737456657269666965644261746368000000608482015260a4016109e5565b806001600160401b0316886001600160401b0316116138165760405162461bcd60e51b815260206004820152605760248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2066696e60448201527f616c4e65774261746368206d75737420626520626967676572207468616e206360648201527f757272656e744c61737456657269666965644261746368000000000000000000608482015260a4016109e5565b60006138258a8a8a868b610aea565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161385a91906153f6565b602060405180830381855afa158015613877573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061389a919061505f565b6138a49190615412565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916138e8918b918b918b9190600401615426565b602060405180830381865afa158015613905573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392991906154a0565b6139885760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20494e5660448201526920a624a22fa82927a7a360b11b60648201526084016109e5565b6139cb33613996858d6150d5565b6001600160401b03166139a761242e565b6139b19190615114565b606554600160581b90046001600160a01b031691906144f8565b505050505050505050505050565b60006139e3612657565b9050816000806139f384846150d5565b6001600160401b031690505b836001600160401b0316836001600160401b031614613aa5576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613a4f9116426150fd565b1115613a8a576001810154613a7490600160401b90046001600160401b0316866150d5565b613a87906001600160401b0316846152cb565b92505b60010154600160401b90046001600160401b031692506139ff565b6000613ab183836150fd565b905082811015613b2b576000613ac782856150fd565b9050600c8111613ad75780613ada565b600c5b9050613ae7816003615114565b613af290600a6155a1565b606554613b0b908390600160481b900461ffff166155a1565b607454613b189190615114565b613b22919061524e565b60745550613bb7565b6000613b3784836150fd565b9050600c8111613b475780613b4a565b600c5b90506000613b59826003615114565b613b6490600a6155a1565b606554613b7d908490600160481b900461ffff166155a1565b607454613b8a9190615114565b613b94919061524e565b905080607454607454613ba79190615114565b613bb1919061524e565b60745550505b505050505050565b600054610100900460ff16613c2a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109e5565b6120ae33613c8d565b6033546001600160a01b031633146120ae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109e5565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d2f57600080fd5b505af1158015613d43573d6000803e3d6000fd5b505050506120ae614528565b60006001600160401b038a1615613eca576072546001600160401b03908116908b161115613e0e5760405162461bcd60e51b815260206004820152606c60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c4016109e5565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613ec45760405162461bcd60e51b815260206004820152606060248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a4016109e5565b5061401e565b506001600160401b0387166000908152606d602052604090205480613f6b5760405162461bcd60e51b815260206004820152605760248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a4016109e5565b6069546001600160401b03908116908916111561401e5760405162461bcd60e51b815260206004820152607160248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c4016109e5565b6072546001600160401b03908116908a161180159061404e5750896001600160401b0316896001600160401b0316115b801561406f57506072546001600160401b03600160401b9091048116908a16115b6140e75760405162461bcd60e51b815260206004820152604f60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a4016109e5565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146141a75760405162461bcd60e51b815260206004820152606a60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c4016109e5565b60006141b6898989858a610aea565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516141eb91906153f6565b602060405180830381855afa158015614208573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061422b919061505f565b6142359190615412565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614279918a918a918a9190600401615426565b602060405180830381865afa158015614296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ba91906154a0565b61431a5760405162461bcd60e51b815260206004820152603e60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20494e56414c49445f50524f4f46000060648201526084016109e5565b6001600160401b038b166000908152607160205260409020600201548790036139cb5760405162461bcd60e51b815260206004820152606260248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c4016109e5565b60655460ff166143ec5760405162461bcd60e51b81526004016109e5906152e3565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614476826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145839092919063ffffffff16565b8051909150156144f3578080602001905181019061449491906154a0565b6144f35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109e5565b505050565b6040516001600160a01b0383166024820152604481018290526144f390849063a9059cbb60e01b906064016133c0565b60655460ff161561454b5760405162461bcd60e51b81526004016109e590614f98565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614592848460008561459a565b949350505050565b6060824710156145fb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109e5565b600080866001600160a01b0316858760405161461791906153f6565b60006040518083038185875af1925050503d8060008114614654576040519150601f19603f3d011682016040523d82523d6000602084013e614659565b606091505b509150915061466a87838387614675565b979650505050505050565b606083156146e45782516000036146dd576001600160a01b0385163b6146dd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109e5565b5081614592565b61459283838151156146f95781518083602001fd5b8060405162461bcd60e51b81526004016109e5919061476b565b60005b8381101561472e578181015183820152602001614716565b838111156131785750506000910152565b60008151808452614757816020860160208601614713565b601f01601f19169290920160200192915050565b60208152600061477e602083018461473f565b9392505050565b60006020828403121561479757600080fd5b813561ffff8116811461477e57600080fd5b80356001600160401b03811681146147c057600080fd5b919050565b600080600080600060a086880312156147dd57600080fd5b6147e6866147a9565b94506147f4602087016147a9565b94979496505050506040830135926060810135926080909101359150565b60006020828403121561482457600080fd5b61477e826147a9565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156148655761486561482d565b60405290565b604051606081016001600160401b03811182821017156148655761486561482d565b604051601f8201601f191681016001600160401b03811182821017156148b5576148b561482d565b604052919050565b60006001600160401b038211156148d6576148d661482d565b5060051b60200190565b600082601f8301126148f157600080fd5b81356001600160401b0381111561490a5761490a61482d565b61491d601f8201601f191660200161488d565b81815284602083860101111561493257600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561496257600080fd5b82356001600160401b038082111561497957600080fd5b818501915085601f83011261498d57600080fd5b81356149a061499b826148bd565b61488d565b81815260059190911b830184019084810190888311156149bf57600080fd5b8585015b83811015614a58578035858111156149db5760008081fd5b86016080818c03601f19018113156149f35760008081fd5b6149fb614843565b8983013588811115614a0d5760008081fd5b614a1b8e8c838701016148e0565b8252506040808401358b8301526060614a358186016147a9565b82840152614a448486016147a9565b9083015250855250509186019186016149c3565b5098975050505050505050565b8060408101831015614a7657600080fd5b92915050565b8060808101831015614a7657600080fd5b6000806000806000806000806101a0898b031215614aaa57600080fd5b614ab3896147a9565b9750614ac160208a016147a9565b9650614acf60408a016147a9565b95506060890135945060808901359350614aec8a60a08b01614a65565b9250614afb8a60e08b01614a7c565b9150614b0b8a6101608b01614a65565b90509295985092959890939650565b6001600160a01b038116811461232557600080fd5b600080600080600080600080888a036101c0811215614b4d57600080fd5b8935614b5881614b1a565b985060208a0135614b6881614b1a565b975060408a0135614b7881614b1a565b965060608a0135614b8881614b1a565b955060e0607f1982011215614b9c57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614bc657600080fd5b614bd28c838d016148e0565b93506101a08b0135915080821115614be957600080fd5b50614bf68b828c016148e0565b9150509295985092959890939650565b600060208284031215614c1857600080fd5b813561477e81614b1a565b60008060008060008060008060006101c08a8c031215614c4257600080fd5b614c4b8a6147a9565b9850614c5960208b016147a9565b9750614c6760408b016147a9565b9650614c7560608b016147a9565b955060808a0135945060a08a01359350614c928b60c08c01614a65565b9250614ca28b6101008c01614a7c565b9150614cb28b6101808c01614a65565b90509295985092959850929598565b600060208284031215614cd357600080fd5b5035919050565b801515811461232557600080fd5b600060208284031215614cfa57600080fd5b813561477e81614cda565b600060208284031215614d1757600080fd5b81356001600160401b03811115614d2d57600080fd5b614592848285016148e0565b60006020808385031215614d4c57600080fd5b82356001600160401b0380821115614d6357600080fd5b818501915085601f830112614d7757600080fd5b8135614d8561499b826148bd565b81815260059190911b83018401908481019088831115614da457600080fd5b8585015b83811015614a5857803585811115614dc05760008081fd5b86016060818c03601f1901811315614dd85760008081fd5b614de061486b565b8983013588811115614df25760008081fd5b614e008e8c838701016148e0565b8252506040808401358b830152614e188385016147a9565b9082015285525050918601918601614da8565b60008060408385031215614e3e57600080fd5b82356001600160401b03811115614e5457600080fd5b614e60858286016148e0565b95602094909401359450505050565b600181811c90821680614e8357607f821691505b602082108103614ea357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614f2457614f24614eec565b01949350505050565b60208082526045908201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361503257615032614eec565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b60006020828403121561507157600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b6000600182016150ce576150ce614eec565b5060010190565b60006001600160401b03838116908316818110156150f5576150f5614eec565b039392505050565b60008282101561510f5761510f614eec565b500390565b600081600019048311821515161561512e5761512e614eec565b500290565b601f8211156144f357600081815260208120601f850160051c8101602086101561515a5750805b601f850160051c820191505b81811015613bb757828155600101615166565b81516001600160401b038111156151925761519261482d565b6151a6816151a08454614e6f565b84615133565b602080601f8311600181146151db57600084156151c35750858301515b600019600386901b1c1916600185901b178555613bb7565b600085815260208120601f198616915b8281101561520a578886015182559484019460019091019084016151eb565b50858210156152285787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b60008261525d5761525d615238565b500490565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b600082198211156152de576152de614eec565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b03831660208201526060604082018190526000906153c79083018461473f565b95945050505050565b60006001600160401b03808416806153ea576153ea615238565b92169190910492915050565b60008251615408818460208701614713565b9190910192915050565b60008261542157615421615238565b500690565b61012081016040808784376000838201818152879190815b600281101561545e5784848337908401828152928401929060010161543e565b5050828760c0870137610100850181815286935091505b6001811015615494578251825260209283019290910190600101615475565b50505095945050505050565b6000602082840312156154b257600080fd5b815161477e81614cda565b600181815b808511156154f85781600019048211156154de576154de614eec565b808516156154eb57918102915b93841c93908002906154c2565b509250929050565b60008261550f57506001614a76565b8161551c57506000614a76565b8160018114615532576002811461553c57615558565b6001915050614a76565b60ff84111561554d5761554d614eec565b50506001821b614a76565b5060208310610133831016604e8410600b841016171561557b575081810a614a76565b61558583836154bd565b806000190482111561559957615599614eec565b029392505050565b600061477e838361550056fe506f6c79676f6e5a4b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a4b45564d3a3a70726f76654e6f6e44657465726d696e6973a26469706673582212205d57ed2ff6c1ede6347c6bf0896d13c6ddcaf85c10458b10044af2a6be36deaf64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZKEVMBridge.json b/compiled-contracts/PolygonZKEVMBridge.json new file mode 100644 index 000000000..bf8f869a2 --- /dev/null +++ b/compiled-contracts/PolygonZKEVMBridge.json @@ -0,0 +1,706 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "PolygonZKEVMBridge", + "sourceName": "contracts/PolygonZKEVMBridge.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "leafType", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "originAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "destinationNetwork", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "destinationAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "depositCount", + "type": "uint32" + } + ], + "name": "BridgeEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "index", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "originAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "destinationAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "ClaimEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "EmergencyStateActivated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "EmergencyStateDeactivated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "originTokenAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "wrappedTokenAddress", + "type": "address" + } + ], + "name": "NewWrappedToken", + "type": "event" + }, + { + "inputs": [], + "name": "LEAF_TYPE_ASSET", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "LEAF_TYPE_MESSAGE", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAINNET_NETWORK_ID", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "activateEmergencyState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint32", + "name": "destinationNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "destinationAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "permitData", + "type": "bytes" + } + ], + "name": "bridgeAsset", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "destinationNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "destinationAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + } + ], + "name": "bridgeMessage", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32[]", + "name": "smtProof", + "type": "bytes32[]" + }, + { + "internalType": "uint32", + "name": "index", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "mainnetExitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "rollupExitRoot", + "type": "bytes32" + }, + { + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "originTokenAddress", + "type": "address" + }, + { + "internalType": "uint32", + "name": "destinationNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "destinationAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + } + ], + "name": "claimAsset", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32[]", + "name": "smtProof", + "type": "bytes32[]" + }, + { + "internalType": "uint32", + "name": "index", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "mainnetExitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "rollupExitRoot", + "type": "bytes32" + }, + { + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "originAddress", + "type": "address" + }, + { + "internalType": "uint32", + "name": "destinationNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "destinationAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + } + ], + "name": "claimMessage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "claimedBitMap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "deactivateEmergencyState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "depositCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDepositRoot", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "leafType", + "type": "uint8" + }, + { + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "originAddress", + "type": "address" + }, + { + "internalType": "uint32", + "name": "destinationNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "destinationAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "metadataHash", + "type": "bytes32" + } + ], + "name": "getLeafValue", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "originTokenAddress", + "type": "address" + } + ], + "name": "getTokenWrappedAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "globalExitRootManager", + "outputs": [ + { + "internalType": "contract IGlobalExitRootManager", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_networkID", + "type": "uint32" + }, + { + "internalType": "contract IGlobalExitRootManager", + "name": "_globalExitRootManager", + "type": "address" + }, + { + "internalType": "address", + "name": "_poeAddress", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "isClaimed", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isEmergencyState", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "networkID", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "poeAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "originTokenAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "uint8", + "name": "decimals", + "type": "uint8" + } + ], + "name": "precalculatedWrapperAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "tokenInfoToWrappedToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "leafHash", + "type": "bytes32" + }, + { + "internalType": "bytes32[]", + "name": "smtProof", + "type": "bytes32[]" + }, + { + "internalType": "uint64", + "name": "index", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "name": "verifyMerkleProof", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "wrappedTokenToTokenInfo", + "outputs": [ + { + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "originTokenAddress", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50614810806100206000396000f3fe608060405260043610620001675760003560e01c806381b1c17411620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b806381b1c17414620003735780638f61151914620003ad5780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b80633ae05047116200011e5780633ae0504714620002a25780633da8168214620002ba5780633e19704314620002df578063463855491462000304578063647c576c14620003295780637b6323c1146200034e57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002470565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009d2565b348015620001db57600080fd5b50620001f3620001ed366004620024fd565b62000a0b565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002539565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b506200022462000a5e565b348015620002c757600080fd5b50620001a1620002d936600462002628565b62000b51565b348015620002ec57600080fd5b5062000224620002fe366004620026a6565b62000c53565b3480156200031157600080fd5b506200018362000323366004620027b7565b62000ce0565b3480156200033657600080fd5b5062000183620003483660046200289e565b62000e86565b3480156200035b57600080fd5b50620001836200036d366004620027b7565b62000fe5565b3480156200038057600080fd5b50620001f362000392366004620028ee565b6024602052600090815260409020546001600160a01b031681565b348015620003ba57600080fd5b50602754620001f3906001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028ee565b62001492565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002908565b620014d7565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620029bc565b620015ee565b348015620004c357600080fd5b50620001836200179a565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028ee565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a24565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008ec565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074957604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562000710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000736919062002a9b565b50602081015181519094509250620008ea565b84156200075e576200075e8a888888620017d1565b620007756001600160a01b038b1633308a62001bf9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f6919081019062002b36565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000835573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085f919081019062002b36565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c4919062002b6f565b604051602001620008d89392919062002bbd565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092e98979695949392919062002bfa565b60405180910390a16200095962000953600084868c8c8c888051906020012062000c53565b62001c66565b6026546001600160a01b03166333d6247d6200097462000a5e565b6040518263ffffffff1660e01b81526004016200099391815260200190565b600060405180830381600087803b158015620009ae57600080fd5b505af1158015620009c3573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ff5760405162461bcd60e51b8152600401620005539062002c67565b62000a0962001db7565b565b600060246000848460405160200162000a2692919062002cc4565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b48578260011660010362000ac9576001816020811062000a955762000a9562002cee565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af6565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0360028462002d30565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3f9062002d47565b91505062000a69565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c44578160011660010362000bce5786818151811062000b8c5762000b8c62002cee565b60200260200101518360405160200162000bb0929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c20565b8287828151811062000be45762000be462002cee565b602002602001015160405160200162000c07929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2d60028362002d30565b91508062000c3b8162002d47565b91505062000b61565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d065760405162461bcd60e51b8152600401620005539062002a24565b62000d1c8a8a8a8a8a8a8a8a8a8a600162001e15565b62000d2d8963ffffffff16620020a0565b6000836001600160a01b03168387898560405160240162000d519392919062002d63565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d88919062002d9e565b60006040518083038185875af1925050503d806000811462000dc7576040519150601f19603f3d011682016040523d82523d6000602084013e62000dcc565b606091505b505090508062000e385760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e7195949392919062002dbc565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea75750600054600160ff909116105b8062000ec35750303b15801562000ec3575060005460ff166001145b62000f285760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f4c576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff16156200100b5760405162461bcd60e51b8152600401620005539062002a24565b620010218a8a8a8a8a8a8a8a8a8a600062001e15565b620010328963ffffffff16620020a0565b6001600160a01b0385166200112757604080516000808252602082019092526001600160a01b0385169084906040516200106d919062002d9e565b60006040518083038185875af1925050503d8060008114620010ac576040519150601f19603f3d011682016040523d82523d6000602084013e620010b1565b606091505b5050905080620011205760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b5062001445565b60225463ffffffff6101009091048116908716036200115c57620011566001600160a01b0386168484620020e2565b62001445565b600086866040516020016200117392919062002cc4565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013ca57600080600085806020019051810190620011c5919062002df3565b925092509250600085848484604051620011df90620023d6565b620011ed9392919062002bbd565b8190604051809103906000f59050801580156200120e573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001263573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001289919062002a9b565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013b89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001442565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200141a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001440919062002a9b565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200147e95949392919062002dbc565b60405180910390a150505050505050505050565b600080620014a36101008462002d30565b90506000620014b56101008562002e69565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014ef92919062002cc4565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200152290620023d6565b601f1982820381018352601f9091011660408190526200154f908d908d908d908d908d9060200162002ea9565b60408051601f19818403018152908290526200156f929160200162002eea565b60405160208183030381529060405280519060200120604051602001620015c894939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620016145760405162461bcd60e51b8152600401620005539062002a24565b60225463ffffffff6101009091048116908416036200169c5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016f098979695949392919062002bfa565b60405180910390a162001727620009536001602260019054906101000a900463ffffffff1633878734888051906020012062000c53565b6026546001600160a01b03166333d6247d6200174262000a5e565b6040518263ffffffff1660e01b81526004016200176191815260200190565b600060405180830381600087803b1580156200177c57600080fd5b505af115801562001791573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017c75760405162461bcd60e51b8152600401620005539062002c67565b62000a0962002114565b60006200181483838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021c392505050565b9050632afa533160e01b6001600160e01b031982160162001a0d57600080808080808062001846896004818d62002f1d565b81019062001855919062002f49565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018975760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b0386163014620018c25760405162461bcd60e51b8152600401620005539062003001565b8a8514620019395760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620019b9919062002d9e565b6000604051808303816000865af19150503d8060008114620019f8576040519150601f19603f3d011682016040523d82523d6000602084013e620019fd565b606091505b5050505050505050505062001bf2565b6001600160e01b031981166323f2ebc360e21b1462001a835760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a9b8a6004818e62002f1d565b81019062001aaa919062003052565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001aee5760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b038716301462001b195760405162461bcd60e51b8152600401620005539062003001565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001ba2919062002d9e565b6000604051808303816000865af19150503d806000811462001be1576040519150601f19603f3d011682016040523d82523d6000602084013e62001be6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdf9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021ca565b80600162001c7760206002620031db565b62001c839190620031e9565b6021541062001ce85760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cfd919062003203565b909155505060215460005b602081101562001da7578160011660010362001d3d57826001826020811062001d355762001d3562002cee565b015550505050565b6001816020811062001d535762001d5362002cee565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d90919062002d30565b91508062001d9e8162002d47565b91505062001d08565b5062001db26200321e565b505050565b60225460ff161562001ddd5760405162461bcd60e51b8152600401620005539062002a24565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001e268a63ffffffff1662001492565b1562001e7d5760405162461bcd60e51b81526020600482015260306024820152600080516020620047bb83398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ef1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f17919062003234565b90508060000362001f805760405162461bcd60e51b81526020600482015260396024820152600080516020620047bb83398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff8781166101009092041614620020025760405162461bcd60e51b81526020600482015260436024820152600080516020620047bb83398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff166200202057508862002023565b50895b6200204e6200203f848b8b8b8b8b8b8051906020012062000c53565b8e8e63ffffffff168462000b51565b620009c35760405162461bcd60e51b815260206004820152602c6024820152600080516020620047bb83398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020b06101008362002d30565b90506000620020c26101008462002e69565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001db290849063a9059cbb60e01b9060640162001c2e565b60225460ff166200218e5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002221826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022a39092919063ffffffff16565b80519091501562001db2578080602001905181019062002242919062002a9b565b62001db25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c4b848460008585600080866001600160a01b03168587604051620022cd919062002d9e565b60006040518083038185875af1925050503d80600081146200230c576040519150601f19603f3d011682016040523d82523d6000602084013e62002311565b606091505b509150915062002324878383876200232f565b979650505050505050565b60608315620023a35782516000036200239b576001600160a01b0385163b6200239b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c4b565b62000c4b8383815115620023ba5781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200324e565b611557806200326483390190565b6001600160a01b0381168114620023fa57600080fd5b50565b80356200240a81620023e4565b919050565b803563ffffffff811681146200240a57600080fd5b60008083601f8401126200243757600080fd5b50813567ffffffffffffffff8111156200245057600080fd5b6020830191508360208285010111156200246957600080fd5b9250929050565b60008060008060008060a087890312156200248a57600080fd5b86356200249781620023e4565b9550620024a7602088016200240f565b94506040870135620024b981620023e4565b935060608701359250608087013567ffffffffffffffff811115620024dd57600080fd5b620024eb89828a0162002424565b979a9699509497509295939492505050565b600080604083850312156200251157600080fd5b6200251c836200240f565b915060208301356200252e81620023e4565b809150509250929050565b6000602082840312156200254c57600080fd5b81356200255981620023e4565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620025a257620025a262002560565b604052919050565b600082601f830112620025bc57600080fd5b8135602067ffffffffffffffff821115620025db57620025db62002560565b8160051b620025ec82820162002576565b92835284810182019282810190878511156200260757600080fd5b83870192505b8483101562002324578235825291830191908301906200260d565b600080600080608085870312156200263f57600080fd5b84359350602085013567ffffffffffffffff808211156200265f57600080fd5b6200266d88838901620025aa565b94506040870135915080821682146200268557600080fd5b509396929550929360600135925050565b60ff81168114620023fa57600080fd5b600080600080600080600060e0888a031215620026c257600080fd5b8735620026cf8162002696565b9650620026df602089016200240f565b95506040880135620026f181620023e4565b945062002701606089016200240f565b935060808801356200271381620023e4565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200274d576200274d62002560565b50601f01601f191660200190565b600082601f8301126200276d57600080fd5b8135620027846200277e8262002730565b62002576565b8181528460208386010111156200279a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027d857600080fd5b8a3567ffffffffffffffff80821115620027f157600080fd5b620027ff8e838f01620025aa565b9b506200280f60208e016200240f565b9a5060408d0135995060608d013598506200282d60808e016200240f565b97506200283d60a08e01620023fd565b96506200284d60c08e016200240f565b95506200285d60e08e01620023fd565b94506101008d013593506101208d01359150808211156200287d57600080fd5b506200288c8d828e016200275b565b9150509295989b9194979a5092959850565b600080600060608486031215620028b457600080fd5b620028bf846200240f565b92506020840135620028d181620023e4565b91506040840135620028e381620023e4565b809150509250925092565b6000602082840312156200290157600080fd5b5035919050565b600080600080600080600060a0888a0312156200292457600080fd5b6200292f886200240f565b965060208801356200294181620023e4565b9550604088013567ffffffffffffffff808211156200295f57600080fd5b6200296d8b838c0162002424565b909750955060608a01359150808211156200298757600080fd5b50620029968a828b0162002424565b9094509250506080880135620029ac8162002696565b8091505092959891949750929550565b600080600060608486031215620029d257600080fd5b620029dd846200240f565b92506020840135620029ef81620023e4565b9150604084013567ffffffffffffffff81111562002a0c57600080fd5b62002a1a868287016200275b565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b8015158114620023fa57600080fd5b60006020828403121562002aae57600080fd5b8151620025598162002a8c565b60005b8381101562002ad857818101518382015260200162002abe565b8381111562000fdf5750506000910152565b600082601f83011262002afc57600080fd5b815162002b0d6200277e8262002730565b81815284602083860101111562002b2357600080fd5b62000c4b82602083016020870162002abb565b60006020828403121562002b4957600080fd5b815167ffffffffffffffff81111562002b6157600080fd5b62000c4b8482850162002aea565b60006020828403121562002b8257600080fd5b8151620025598162002696565b6000815180845262002ba981602086016020860162002abb565b601f01601f19169290920160200192915050565b60608152600062002bd2606083018662002b8f565b828103602084015262002be6818662002b8f565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002c4e8483018762002b8f565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79506f6c79676f6e5a4b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002d425762002d4262002d04565b500490565b60006001820162002d5c5762002d5c62002d1a565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d959083018462002b8f565b95945050505050565b6000825162002db281846020870162002abb565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002e0957600080fd5b835167ffffffffffffffff8082111562002e2257600080fd5b62002e308783880162002aea565b9450602086015191508082111562002e4757600080fd5b5062002e568682870162002aea565b9250506040840151620028e38162002696565b60008262002e7b5762002e7b62002d04565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002ebf60608301878962002e80565b828103602084015262002ed481868862002e80565b91505060ff831660408301529695505050505050565b6000835162002efe81846020880162002abb565b83519083019062002f1481836020880162002abb565b01949350505050565b6000808585111562002f2e57600080fd5b8386111562002f3c57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f6557600080fd5b873562002f7281620023e4565b9650602088013562002f8481620023e4565b955060408801359450606088013593506080880135620027138162002696565b6020808252603c908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b0312156200307057600080fd5b88356200307d81620023e4565b975060208901356200308f81620023e4565b965060408901359550606089013594506080890135620030af8162002a8c565b935060a0890135620030c18162002696565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200311f57816000190482111562003103576200310362002d1a565b808516156200311157918102915b93841c9390800290620030e3565b509250929050565b600082620031385750600162000a58565b81620031475750600062000a58565b81600181146200316057600281146200316b576200318b565b600191505062000a58565b60ff8411156200317f576200317f62002d1a565b50506001821b62000a58565b5060208310610133831016604e8410600b8410161715620031b0575081810a62000a58565b620031bc8383620030de565b8060001904821115620031d357620031d362002d1a565b029392505050565b600062002559838362003127565b600082821015620031fe57620031fe62002d1a565b500390565b6000821982111562003219576200321962002d1a565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200324757600080fd5b5051919050565b60208152600062002559602083018462002b8f56fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b5d95b18e7873c0bee5e5a0f8ba7f856feaa9a4588dd711619c14728f42e00f64736f6c634300080f0033506f6c79676f6e5a4b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212209b2bb35ca1d94b05b5696ee4cf3ac515cd303048eca38e63dbe9ac234b46d63464736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001675760003560e01c806381b1c17411620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b806381b1c17414620003735780638f61151914620003ad5780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b80633ae05047116200011e5780633ae0504714620002a25780633da8168214620002ba5780633e19704314620002df578063463855491462000304578063647c576c14620003295780637b6323c1146200034e57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002470565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009d2565b348015620001db57600080fd5b50620001f3620001ed366004620024fd565b62000a0b565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002539565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b506200022462000a5e565b348015620002c757600080fd5b50620001a1620002d936600462002628565b62000b51565b348015620002ec57600080fd5b5062000224620002fe366004620026a6565b62000c53565b3480156200031157600080fd5b506200018362000323366004620027b7565b62000ce0565b3480156200033657600080fd5b5062000183620003483660046200289e565b62000e86565b3480156200035b57600080fd5b50620001836200036d366004620027b7565b62000fe5565b3480156200038057600080fd5b50620001f362000392366004620028ee565b6024602052600090815260409020546001600160a01b031681565b348015620003ba57600080fd5b50602754620001f3906001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028ee565b62001492565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002908565b620014d7565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620029bc565b620015ee565b348015620004c357600080fd5b50620001836200179a565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028ee565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a24565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008ec565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074957604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562000710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000736919062002a9b565b50602081015181519094509250620008ea565b84156200075e576200075e8a888888620017d1565b620007756001600160a01b038b1633308a62001bf9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f6919081019062002b36565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000835573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085f919081019062002b36565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c4919062002b6f565b604051602001620008d89392919062002bbd565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092e98979695949392919062002bfa565b60405180910390a16200095962000953600084868c8c8c888051906020012062000c53565b62001c66565b6026546001600160a01b03166333d6247d6200097462000a5e565b6040518263ffffffff1660e01b81526004016200099391815260200190565b600060405180830381600087803b158015620009ae57600080fd5b505af1158015620009c3573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ff5760405162461bcd60e51b8152600401620005539062002c67565b62000a0962001db7565b565b600060246000848460405160200162000a2692919062002cc4565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b48578260011660010362000ac9576001816020811062000a955762000a9562002cee565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af6565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0360028462002d30565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3f9062002d47565b91505062000a69565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c44578160011660010362000bce5786818151811062000b8c5762000b8c62002cee565b60200260200101518360405160200162000bb0929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c20565b8287828151811062000be45762000be462002cee565b602002602001015160405160200162000c07929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2d60028362002d30565b91508062000c3b8162002d47565b91505062000b61565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d065760405162461bcd60e51b8152600401620005539062002a24565b62000d1c8a8a8a8a8a8a8a8a8a8a600162001e15565b62000d2d8963ffffffff16620020a0565b6000836001600160a01b03168387898560405160240162000d519392919062002d63565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d88919062002d9e565b60006040518083038185875af1925050503d806000811462000dc7576040519150601f19603f3d011682016040523d82523d6000602084013e62000dcc565b606091505b505090508062000e385760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e7195949392919062002dbc565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea75750600054600160ff909116105b8062000ec35750303b15801562000ec3575060005460ff166001145b62000f285760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f4c576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff16156200100b5760405162461bcd60e51b8152600401620005539062002a24565b620010218a8a8a8a8a8a8a8a8a8a600062001e15565b620010328963ffffffff16620020a0565b6001600160a01b0385166200112757604080516000808252602082019092526001600160a01b0385169084906040516200106d919062002d9e565b60006040518083038185875af1925050503d8060008114620010ac576040519150601f19603f3d011682016040523d82523d6000602084013e620010b1565b606091505b5050905080620011205760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b5062001445565b60225463ffffffff6101009091048116908716036200115c57620011566001600160a01b0386168484620020e2565b62001445565b600086866040516020016200117392919062002cc4565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013ca57600080600085806020019051810190620011c5919062002df3565b925092509250600085848484604051620011df90620023d6565b620011ed9392919062002bbd565b8190604051809103906000f59050801580156200120e573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001263573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001289919062002a9b565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013b89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001442565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200141a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001440919062002a9b565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200147e95949392919062002dbc565b60405180910390a150505050505050505050565b600080620014a36101008462002d30565b90506000620014b56101008562002e69565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014ef92919062002cc4565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200152290620023d6565b601f1982820381018352601f9091011660408190526200154f908d908d908d908d908d9060200162002ea9565b60408051601f19818403018152908290526200156f929160200162002eea565b60405160208183030381529060405280519060200120604051602001620015c894939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620016145760405162461bcd60e51b8152600401620005539062002a24565b60225463ffffffff6101009091048116908416036200169c5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016f098979695949392919062002bfa565b60405180910390a162001727620009536001602260019054906101000a900463ffffffff1633878734888051906020012062000c53565b6026546001600160a01b03166333d6247d6200174262000a5e565b6040518263ffffffff1660e01b81526004016200176191815260200190565b600060405180830381600087803b1580156200177c57600080fd5b505af115801562001791573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017c75760405162461bcd60e51b8152600401620005539062002c67565b62000a0962002114565b60006200181483838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021c392505050565b9050632afa533160e01b6001600160e01b031982160162001a0d57600080808080808062001846896004818d62002f1d565b81019062001855919062002f49565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018975760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b0386163014620018c25760405162461bcd60e51b8152600401620005539062003001565b8a8514620019395760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620019b9919062002d9e565b6000604051808303816000865af19150503d8060008114620019f8576040519150601f19603f3d011682016040523d82523d6000602084013e620019fd565b606091505b5050505050505050505062001bf2565b6001600160e01b031981166323f2ebc360e21b1462001a835760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a9b8a6004818e62002f1d565b81019062001aaa919062003052565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001aee5760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b038716301462001b195760405162461bcd60e51b8152600401620005539062003001565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001ba2919062002d9e565b6000604051808303816000865af19150503d806000811462001be1576040519150601f19603f3d011682016040523d82523d6000602084013e62001be6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdf9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021ca565b80600162001c7760206002620031db565b62001c839190620031e9565b6021541062001ce85760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cfd919062003203565b909155505060215460005b602081101562001da7578160011660010362001d3d57826001826020811062001d355762001d3562002cee565b015550505050565b6001816020811062001d535762001d5362002cee565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d90919062002d30565b91508062001d9e8162002d47565b91505062001d08565b5062001db26200321e565b505050565b60225460ff161562001ddd5760405162461bcd60e51b8152600401620005539062002a24565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001e268a63ffffffff1662001492565b1562001e7d5760405162461bcd60e51b81526020600482015260306024820152600080516020620047bb83398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ef1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f17919062003234565b90508060000362001f805760405162461bcd60e51b81526020600482015260396024820152600080516020620047bb83398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff8781166101009092041614620020025760405162461bcd60e51b81526020600482015260436024820152600080516020620047bb83398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff166200202057508862002023565b50895b6200204e6200203f848b8b8b8b8b8b8051906020012062000c53565b8e8e63ffffffff168462000b51565b620009c35760405162461bcd60e51b815260206004820152602c6024820152600080516020620047bb83398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020b06101008362002d30565b90506000620020c26101008462002e69565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001db290849063a9059cbb60e01b9060640162001c2e565b60225460ff166200218e5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002221826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022a39092919063ffffffff16565b80519091501562001db2578080602001905181019062002242919062002a9b565b62001db25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c4b848460008585600080866001600160a01b03168587604051620022cd919062002d9e565b60006040518083038185875af1925050503d80600081146200230c576040519150601f19603f3d011682016040523d82523d6000602084013e62002311565b606091505b509150915062002324878383876200232f565b979650505050505050565b60608315620023a35782516000036200239b576001600160a01b0385163b6200239b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c4b565b62000c4b8383815115620023ba5781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200324e565b611557806200326483390190565b6001600160a01b0381168114620023fa57600080fd5b50565b80356200240a81620023e4565b919050565b803563ffffffff811681146200240a57600080fd5b60008083601f8401126200243757600080fd5b50813567ffffffffffffffff8111156200245057600080fd5b6020830191508360208285010111156200246957600080fd5b9250929050565b60008060008060008060a087890312156200248a57600080fd5b86356200249781620023e4565b9550620024a7602088016200240f565b94506040870135620024b981620023e4565b935060608701359250608087013567ffffffffffffffff811115620024dd57600080fd5b620024eb89828a0162002424565b979a9699509497509295939492505050565b600080604083850312156200251157600080fd5b6200251c836200240f565b915060208301356200252e81620023e4565b809150509250929050565b6000602082840312156200254c57600080fd5b81356200255981620023e4565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620025a257620025a262002560565b604052919050565b600082601f830112620025bc57600080fd5b8135602067ffffffffffffffff821115620025db57620025db62002560565b8160051b620025ec82820162002576565b92835284810182019282810190878511156200260757600080fd5b83870192505b8483101562002324578235825291830191908301906200260d565b600080600080608085870312156200263f57600080fd5b84359350602085013567ffffffffffffffff808211156200265f57600080fd5b6200266d88838901620025aa565b94506040870135915080821682146200268557600080fd5b509396929550929360600135925050565b60ff81168114620023fa57600080fd5b600080600080600080600060e0888a031215620026c257600080fd5b8735620026cf8162002696565b9650620026df602089016200240f565b95506040880135620026f181620023e4565b945062002701606089016200240f565b935060808801356200271381620023e4565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200274d576200274d62002560565b50601f01601f191660200190565b600082601f8301126200276d57600080fd5b8135620027846200277e8262002730565b62002576565b8181528460208386010111156200279a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027d857600080fd5b8a3567ffffffffffffffff80821115620027f157600080fd5b620027ff8e838f01620025aa565b9b506200280f60208e016200240f565b9a5060408d0135995060608d013598506200282d60808e016200240f565b97506200283d60a08e01620023fd565b96506200284d60c08e016200240f565b95506200285d60e08e01620023fd565b94506101008d013593506101208d01359150808211156200287d57600080fd5b506200288c8d828e016200275b565b9150509295989b9194979a5092959850565b600080600060608486031215620028b457600080fd5b620028bf846200240f565b92506020840135620028d181620023e4565b91506040840135620028e381620023e4565b809150509250925092565b6000602082840312156200290157600080fd5b5035919050565b600080600080600080600060a0888a0312156200292457600080fd5b6200292f886200240f565b965060208801356200294181620023e4565b9550604088013567ffffffffffffffff808211156200295f57600080fd5b6200296d8b838c0162002424565b909750955060608a01359150808211156200298757600080fd5b50620029968a828b0162002424565b9094509250506080880135620029ac8162002696565b8091505092959891949750929550565b600080600060608486031215620029d257600080fd5b620029dd846200240f565b92506020840135620029ef81620023e4565b9150604084013567ffffffffffffffff81111562002a0c57600080fd5b62002a1a868287016200275b565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b8015158114620023fa57600080fd5b60006020828403121562002aae57600080fd5b8151620025598162002a8c565b60005b8381101562002ad857818101518382015260200162002abe565b8381111562000fdf5750506000910152565b600082601f83011262002afc57600080fd5b815162002b0d6200277e8262002730565b81815284602083860101111562002b2357600080fd5b62000c4b82602083016020870162002abb565b60006020828403121562002b4957600080fd5b815167ffffffffffffffff81111562002b6157600080fd5b62000c4b8482850162002aea565b60006020828403121562002b8257600080fd5b8151620025598162002696565b6000815180845262002ba981602086016020860162002abb565b601f01601f19169290920160200192915050565b60608152600062002bd2606083018662002b8f565b828103602084015262002be6818662002b8f565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002c4e8483018762002b8f565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79506f6c79676f6e5a4b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002d425762002d4262002d04565b500490565b60006001820162002d5c5762002d5c62002d1a565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d959083018462002b8f565b95945050505050565b6000825162002db281846020870162002abb565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002e0957600080fd5b835167ffffffffffffffff8082111562002e2257600080fd5b62002e308783880162002aea565b9450602086015191508082111562002e4757600080fd5b5062002e568682870162002aea565b9250506040840151620028e38162002696565b60008262002e7b5762002e7b62002d04565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002ebf60608301878962002e80565b828103602084015262002ed481868862002e80565b91505060ff831660408301529695505050505050565b6000835162002efe81846020880162002abb565b83519083019062002f1481836020880162002abb565b01949350505050565b6000808585111562002f2e57600080fd5b8386111562002f3c57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f6557600080fd5b873562002f7281620023e4565b9650602088013562002f8481620023e4565b955060408801359450606088013593506080880135620027138162002696565b6020808252603c908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b0312156200307057600080fd5b88356200307d81620023e4565b975060208901356200308f81620023e4565b965060408901359550606089013594506080890135620030af8162002a8c565b935060a0890135620030c18162002696565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200311f57816000190482111562003103576200310362002d1a565b808516156200311157918102915b93841c9390800290620030e3565b509250929050565b600082620031385750600162000a58565b81620031475750600062000a58565b81600181146200316057600281146200316b576200318b565b600191505062000a58565b60ff8411156200317f576200317f62002d1a565b50506001821b62000a58565b5060208310610133831016604e8410600b8410161715620031b0575081810a62000a58565b620031bc8383620030de565b8060001904821115620031d357620031d362002d1a565b029392505050565b600062002559838362003127565b600082821015620031fe57620031fe62002d1a565b500390565b6000821982111562003219576200321962002d1a565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200324757600080fd5b5051919050565b60208152600062002559602083018462002b8f56fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b5d95b18e7873c0bee5e5a0f8ba7f856feaa9a4588dd711619c14728f42e00f64736f6c634300080f0033506f6c79676f6e5a4b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212209b2bb35ca1d94b05b5696ee4cf3ac515cd303048eca38e63dbe9ac234b46d63464736f6c634300080f0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/compiled-contracts/PolygonZKEVMBridgeMock.json b/compiled-contracts/PolygonZKEVMBridgeMock.json new file mode 100644 index 000000000..7d7b8c32a --- /dev/null +++ b/compiled-contracts/PolygonZKEVMBridgeMock.json @@ -0,0 +1,797 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "PolygonZKEVMBridgeMock", + "sourceName": "contracts/mocks/PolygonZKEVMBridgeMock.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "leafType", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "originAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "destinationNetwork", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "destinationAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "depositCount", + "type": "uint32" + } + ], + "name": "BridgeEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "index", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "originAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "destinationAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "ClaimEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "EmergencyStateActivated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "EmergencyStateDeactivated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "originTokenAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "wrappedTokenAddress", + "type": "address" + } + ], + "name": "NewWrappedToken", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "LEAF_TYPE_ASSET", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "LEAF_TYPE_MESSAGE", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAINNET_NETWORK_ID", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "activateEmergencyState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint32", + "name": "destinationNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "destinationAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "permitData", + "type": "bytes" + } + ], + "name": "bridgeAsset", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "destinationNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "destinationAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + } + ], + "name": "bridgeMessage", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32[]", + "name": "smtProof", + "type": "bytes32[]" + }, + { + "internalType": "uint32", + "name": "index", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "mainnetExitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "rollupExitRoot", + "type": "bytes32" + }, + { + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "originTokenAddress", + "type": "address" + }, + { + "internalType": "uint32", + "name": "destinationNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "destinationAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + } + ], + "name": "claimAsset", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32[]", + "name": "smtProof", + "type": "bytes32[]" + }, + { + "internalType": "uint32", + "name": "index", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "mainnetExitRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "rollupExitRoot", + "type": "bytes32" + }, + { + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "originAddress", + "type": "address" + }, + { + "internalType": "uint32", + "name": "destinationNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "destinationAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "metadata", + "type": "bytes" + } + ], + "name": "claimMessage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "claimedBitMap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "deactivateEmergencyState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "depositCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDepositRoot", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "leafType", + "type": "uint8" + }, + { + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "originAddress", + "type": "address" + }, + { + "internalType": "uint32", + "name": "destinationNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "destinationAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "metadataHash", + "type": "bytes32" + } + ], + "name": "getLeafValue", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "originTokenAddress", + "type": "address" + } + ], + "name": "getTokenWrappedAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "globalExitRootManager", + "outputs": [ + { + "internalType": "contract IGlobalExitRootManager", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_networkID", + "type": "uint32" + }, + { + "internalType": "contract IGlobalExitRootManager", + "name": "_globalExitRootManager", + "type": "address" + }, + { + "internalType": "address", + "name": "_poeAddress", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "isClaimed", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isEmergencyState", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxEtherBridge", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "networkID", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "poeAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "originTokenAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "uint8", + "name": "decimals", + "type": "uint8" + } + ], + "name": "precalculatedWrapperAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_maxEtherBridge", + "type": "uint256" + } + ], + "name": "setMaxEtherBridge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_networkID", + "type": "uint32" + } + ], + "name": "setNetworkID", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "tokenInfoToWrappedToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "leafHash", + "type": "bytes32" + }, + { + "internalType": "bytes32[]", + "name": "smtProof", + "type": "bytes32[]" + }, + { + "internalType": "uint64", + "name": "index", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "name": "verifyMerkleProof", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "wrappedTokenToTokenInfo", + "outputs": [ + { + "internalType": "uint32", + "name": "originNetwork", + "type": "uint32" + }, + { + "internalType": "address", + "name": "originTokenAddress", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50614c1a806100206000396000f3fe608060405260043610620001f35760003560e01c806381b1c174116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b806381b1c17414620004615780638da5cb5b146200049b5780638f61151914620004bb57600080fd5b8063318aee3d116200018d5780634638554911620001585780634638554914620003da578063647c576c14620003ff578063715018a614620004245780637b6323c1146200043c57600080fd5b8063318aee3d14620003095780633ae0504714620003785780633da8168214620003905780633e19704314620003b557600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f620002093660046200285c565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f6200071e565b3480156200026757600080fd5b506200027f62000279366004620028e9565b62000757565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002925565b620007aa565b348015620002ca57600080fd5b506200020f620002dc3660046200293f565b620007b9565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002964565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b50620002fa620007e5565b3480156200039d57600080fd5b506200022d620003af36600462002a4c565b620008d8565b348015620003c257600080fd5b50620002fa620003d436600462002aca565b620009da565b348015620003e757600080fd5b506200020f620003f936600462002bdb565b62000a67565b3480156200040c57600080fd5b506200020f6200041e36600462002cc2565b62000c0d565b3480156200043157600080fd5b506200020f62000d82565b3480156200044957600080fd5b506200020f6200045b36600462002bdb565b62000d98565b3480156200046e57600080fd5b506200027f6200048036600462002925565b6024602052600090815260409020546001600160a01b031681565b348015620004a857600080fd5b50605a546001600160a01b03166200027f565b348015620004c857600080fd5b506027546200027f906001600160a01b031681565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002925565b62001245565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002d12565b6200128a565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002dc6565b620013a1565b348015620005e957600080fd5b506200020f62001553565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002925565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002964565b6200158a565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007065760405162461bcd60e51b815260206004820152604760248201527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b6200071686868686868662001609565b505050505050565b6027546001600160a01b031633146200074b5760405162461bcd60e51b8152600401620006fd9062002e2e565b6200075562001a9f565b565b60006024600084846040516020016200077292919062002e8b565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b462001afd565b608c55565b620007c362001afd565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008cf57826001166001036200085057600181602081106200081c576200081c62002eb5565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200087d565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088a60028462002ef7565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c69062002f0e565b915050620007f0565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009cb5781600116600103620009555786818151811062000913576200091362002eb5565b60200260200101518360405160200162000937929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009a7565b828782815181106200096b576200096b62002eb5565b60200260200101516040516020016200098e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b460028362002ef7565b915080620009c28162002f0e565b915050620008e8565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a8d5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000aa38a8a8a8a8a8a8a8a8a8a600162001b59565b62000ab48963ffffffff1662001de4565b6000836001600160a01b03168387898560405160240162000ad89392919062002fef565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b0f91906200302a565b60006040518083038185875af1925050503d806000811462000b4e576040519150601f19603f3d011682016040523d82523d6000602084013e62000b53565b606091505b505090508062000bbf5760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b6064820152608401620006fd565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bf895949392919062003048565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c2e5750600054600160ff909116105b8062000c4a5750303b15801562000c4a575060005460ff166001145b62000caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006fd565b6000805460ff19166001179055801562000cd3576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d3562001e26565b801562000d7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8c62001afd565b62000755600062001e99565b60225460ff161562000dbe5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000dd48a8a8a8a8a8a8a8a8a8a600062001b59565b62000de58963ffffffff1662001de4565b6001600160a01b03851662000eda57604080516000808252602082019092526001600160a01b03851690849060405162000e2091906200302a565b60006040518083038185875af1925050503d806000811462000e5f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e64565b606091505b505090508062000ed35760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b6064820152608401620006fd565b50620011f8565b60225463ffffffff61010090910481169087160362000f0f5762000f096001600160a01b038616848462001eeb565b620011f8565b6000868660405160200162000f2692919062002e8b565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200117d5760008060008580602001905181019062000f789190620030cb565b92509250925060008584848460405162000f9290620027c5565b62000fa09392919062003141565b8190604051809103906000f590508015801562000fc1573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001016573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200103c91906200318d565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200116b9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011f5565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620011cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011f391906200318d565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200123195949392919062003048565b60405180910390a150505050505050505050565b600080620012566101008462002ef7565b905060006200126861010085620031ad565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620012a292919062002e8b565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012d590620027c5565b601f1982820381018352601f90910116604081905262001302908d908d908d908d908d90602001620031ed565b60408051601f19818403018152908290526200132292916020016200322e565b604051602081830303815290604052805190602001206040516020016200137b94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013c75760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff6101009091048116908416036200144f5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c460000006064820152608401620006fd565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620014a398979695949392919062003261565b60405180910390a1620014e0620014da6001602260019054906101000a900463ffffffff16338787348880519060200120620009da565b62001f55565b6026546001600160a01b03166333d6247d620014fb620007e5565b6040518263ffffffff1660e01b81526004016200151a91815260200190565b600060405180830381600087803b1580156200153557600080fd5b505af11580156200154a573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015805760405162461bcd60e51b8152600401620006fd9062002e2e565b62000755620020a1565b6200159462001afd565b6001600160a01b038116620015fb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006fd565b620016068162001e99565b50565b60225460ff16156200162f5760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff610100909104811690861603620016b75760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c4600000000006064820152608401620006fd565b60008060606001600160a01b0389166200174e5785341462001744576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c55456064820152608401620006fd565b60009150620019bf565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200181c57604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af1158015620017e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200180991906200318d565b50602081015181519094509250620019bd565b84156200183157620018318a88888862002150565b620018486001600160a01b038b1633308a62002578565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200189f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018c99190810190620032ce565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001908573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620019329190810190620032ce565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001971573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001997919062003307565b604051602001620019ab9392919062003141565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162001a0198979695949392919062003261565b60405180910390a162001a26620014da600084868c8c8c8880519060200120620009da565b6026546001600160a01b03166333d6247d62001a41620007e5565b6040518263ffffffff1660e01b815260040162001a6091815260200190565b600060405180830381600087803b15801562001a7b57600080fd5b505af115801562001a90573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001ac55760405162461bcd60e51b8152600401620006fd9062002f2a565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006fd565b62001b6a8a63ffffffff1662001245565b1562001bc15760405162461bcd60e51b8152602060048201526030602482015260008051602062004bc583398151915260448201526f081053149150511657d0d3105253515160821b6064820152608401620006fd565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001c35573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c5b919062003327565b90508060000362001cc45760405162461bcd60e51b8152602060048201526039602482015260008051602062004bc583398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c4944000000000000006064820152608401620006fd565b60225463ffffffff878116610100909204161462001d465760405162461bcd60e51b8152602060048201526043602482015260008051602062004bc583398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a401620006fd565b602254600090610100900463ffffffff1662001d6457508862001d67565b50895b62001d9262001d83848b8b8b8b8b8b80519060200120620009da565b8e8e63ffffffff1684620008d8565b62001a905760405162461bcd60e51b815260206004820152602c602482015260008051602062004bc583398151915260448201526b0814d35517d253959053125160a21b6064820152608401620006fd565b600062001df46101008362002ef7565b9050600062001e0661010084620031ad565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001e935760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006fd565b62000755335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001f5090849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620025b2565b505050565b80600162001f66602060026200343e565b62001f7291906200344c565b6021541062001fd75760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b6064820152608401620006fd565b60016021600082825462001fec919062003466565b909155505060215460005b60208110156200209657816001166001036200202c57826001826020811062002024576200202462002eb5565b015550505050565b6001816020811062002042576200204262002eb5565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200207f919062002ef7565b9150806200208d8162002f0e565b91505062001ff7565b5062001f5062003481565b60225460ff166200211b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006fd565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200219383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200268b92505050565b9050632afa533160e01b6001600160e01b03198216016200238c576000808080808080620021c5896004818d62003497565b810190620021d49190620034c3565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620022165760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0386163014620022415760405162461bcd60e51b8152600401620006fd906200357b565b8a8514620022b85760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d41544348000000000000006064820152608401620006fd565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200233891906200302a565b6000604051808303816000865af19150503d806000811462002377576040519150601f19603f3d011682016040523d82523d6000602084013e6200237c565b606091505b5050505050505050505062002571565b6001600160e01b031981166323f2ebc360e21b14620024025760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b6064820152608401620006fd565b6000808080808080806200241a8a6004818e62003497565b810190620024299190620035cc565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200246d5760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0387163014620024985760405162461bcd60e51b8152600401620006fd906200357b565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f16916200252191906200302a565b6000604051808303816000865af19150503d806000811462002560576040519150601f19603f3d011682016040523d82523d6000602084013e62002565565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d7c9085906323b872dd60e01b9060840162001f18565b600062002609826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620026929092919063ffffffff16565b80519091501562001f5057808060200190518101906200262a91906200318d565b62001f505760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006fd565b6020015190565b6060620009d2848460008585600080866001600160a01b03168587604051620026bc91906200302a565b60006040518083038185875af1925050503d8060008114620026fb576040519150601f19603f3d011682016040523d82523d6000602084013e62002700565b606091505b509150915062002713878383876200271e565b979650505050505050565b60608315620027925782516000036200278a576001600160a01b0385163b6200278a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006fd565b5081620009d2565b620009d28383815115620027a95781518083602001fd5b8060405162461bcd60e51b8152600401620006fd919062003658565b611557806200366e83390190565b6001600160a01b03811681146200160657600080fd5b8035620027f681620027d3565b919050565b803563ffffffff81168114620027f657600080fd5b60008083601f8401126200282357600080fd5b50813567ffffffffffffffff8111156200283c57600080fd5b6020830191508360208285010111156200285557600080fd5b9250929050565b60008060008060008060a087890312156200287657600080fd5b86356200288381620027d3565b95506200289360208801620027fb565b94506040870135620028a581620027d3565b935060608701359250608087013567ffffffffffffffff811115620028c957600080fd5b620028d789828a0162002810565b979a9699509497509295939492505050565b60008060408385031215620028fd57600080fd5b6200290883620027fb565b915060208301356200291a81620027d3565b809150509250929050565b6000602082840312156200293857600080fd5b5035919050565b6000602082840312156200295257600080fd5b6200295d82620027fb565b9392505050565b6000602082840312156200297757600080fd5b81356200295d81620027d3565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620029c657620029c662002984565b604052919050565b600082601f830112620029e057600080fd5b8135602067ffffffffffffffff821115620029ff57620029ff62002984565b8160051b62002a108282016200299a565b928352848101820192828101908785111562002a2b57600080fd5b83870192505b84831015620027135782358252918301919083019062002a31565b6000806000806080858703121562002a6357600080fd5b84359350602085013567ffffffffffffffff8082111562002a8357600080fd5b62002a9188838901620029ce565b945060408701359150808216821462002aa957600080fd5b509396929550929360600135925050565b60ff811681146200160657600080fd5b600080600080600080600060e0888a03121562002ae657600080fd5b873562002af38162002aba565b965062002b0360208901620027fb565b9550604088013562002b1581620027d3565b945062002b2560608901620027fb565b9350608088013562002b3781620027d3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002b715762002b7162002984565b50601f01601f191660200190565b600082601f83011262002b9157600080fd5b813562002ba862002ba28262002b54565b6200299a565b81815284602083860101111562002bbe57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002bfc57600080fd5b8a3567ffffffffffffffff8082111562002c1557600080fd5b62002c238e838f01620029ce565b9b5062002c3360208e01620027fb565b9a5060408d0135995060608d0135985062002c5160808e01620027fb565b975062002c6160a08e01620027e9565b965062002c7160c08e01620027fb565b955062002c8160e08e01620027e9565b94506101008d013593506101208d013591508082111562002ca157600080fd5b5062002cb08d828e0162002b7f565b9150509295989b9194979a5092959850565b60008060006060848603121562002cd857600080fd5b62002ce384620027fb565b9250602084013562002cf581620027d3565b9150604084013562002d0781620027d3565b809150509250925092565b600080600080600080600060a0888a03121562002d2e57600080fd5b62002d3988620027fb565b9650602088013562002d4b81620027d3565b9550604088013567ffffffffffffffff8082111562002d6957600080fd5b62002d778b838c0162002810565b909750955060608a013591508082111562002d9157600080fd5b5062002da08a828b0162002810565b909450925050608088013562002db68162002aba565b8091505092959891949750929550565b60008060006060848603121562002ddc57600080fd5b62002de784620027fb565b9250602084013562002df981620027d3565b9150604084013567ffffffffffffffff81111562002e1657600080fd5b62002e248682870162002b7f565b9150509250925092565b6020808252603d908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79506f6c79676f6e5a4b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002f095762002f0962002ecb565b500490565b60006001820162002f235762002f2362002ee1565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002faf57818101518382015260200162002f95565b8381111562000d7c5750506000910152565b6000815180845262002fdb81602086016020860162002f92565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff83166020820152606060408201819052600090620030219083018462002fc1565b95945050505050565b600082516200303e81846020870162002f92565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f8301126200309157600080fd5b8151620030a262002ba28262002b54565b818152846020838601011115620030b857600080fd5b620009d282602083016020870162002f92565b600080600060608486031215620030e157600080fd5b835167ffffffffffffffff80821115620030fa57600080fd5b62003108878388016200307f565b945060208601519150808211156200311f57600080fd5b506200312e868287016200307f565b925050604084015162002d078162002aba565b60608152600062003156606083018662002fc1565b82810360208401526200316a818662002fc1565b91505060ff83166040830152949350505050565b80151581146200160657600080fd5b600060208284031215620031a057600080fd5b81516200295d816200317e565b600082620031bf57620031bf62002ecb565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003203606083018789620031c4565b828103602084015262003218818688620031c4565b91505060ff831660408301529695505050505050565b600083516200324281846020880162002f92565b8351908301906200325881836020880162002f92565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032b58483018762002fc1565b925080851660e085015250509998505050505050505050565b600060208284031215620032e157600080fd5b815167ffffffffffffffff811115620032f957600080fd5b620009d2848285016200307f565b6000602082840312156200331a57600080fd5b81516200295d8162002aba565b6000602082840312156200333a57600080fd5b5051919050565b600181815b808511156200338257816000190482111562003366576200336662002ee1565b808516156200337457918102915b93841c939080029062003346565b509250929050565b6000826200339b57506001620007a4565b81620033aa57506000620007a4565b8160018114620033c35760028114620033ce57620033ee565b6001915050620007a4565b60ff841115620033e257620033e262002ee1565b50506001821b620007a4565b5060208310610133831016604e8410600b841016171562003413575081810a620007a4565b6200341f838362003341565b806000190482111562003436576200343662002ee1565b029392505050565b60006200295d83836200338a565b60008282101562003461576200346162002ee1565b500390565b600082198211156200347c576200347c62002ee1565b500190565b634e487b7160e01b600052600160045260246000fd5b60008085851115620034a857600080fd5b83861115620034b657600080fd5b5050820193919092039150565b600080600080600080600060e0888a031215620034df57600080fd5b8735620034ec81620027d3565b96506020880135620034fe81620027d3565b95506040880135945060608801359350608088013562002b378162002aba565b6020808252603c908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b031215620035ea57600080fd5b8835620035f781620027d3565b975060208901356200360981620027d3565b96506040890135955060608901359450608089013562003629816200317e565b935060a08901356200363b8162002aba565b979a969950949793969295929450505060c08201359160e0013590565b6020815260006200295d602083018462002fc156fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b5d95b18e7873c0bee5e5a0f8ba7f856feaa9a4588dd711619c14728f42e00f64736f6c634300080f0033506f6c79676f6e5a4b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212206ec7e43691f361491ee442d1fd15e0d82b13a9ad35949d811f74af9b2582621764736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001f35760003560e01c806381b1c174116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b806381b1c17414620004615780638da5cb5b146200049b5780638f61151914620004bb57600080fd5b8063318aee3d116200018d5780634638554911620001585780634638554914620003da578063647c576c14620003ff578063715018a614620004245780637b6323c1146200043c57600080fd5b8063318aee3d14620003095780633ae0504714620003785780633da8168214620003905780633e19704314620003b557600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f620002093660046200285c565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f6200071e565b3480156200026757600080fd5b506200027f62000279366004620028e9565b62000757565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002925565b620007aa565b348015620002ca57600080fd5b506200020f620002dc3660046200293f565b620007b9565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002964565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b50620002fa620007e5565b3480156200039d57600080fd5b506200022d620003af36600462002a4c565b620008d8565b348015620003c257600080fd5b50620002fa620003d436600462002aca565b620009da565b348015620003e757600080fd5b506200020f620003f936600462002bdb565b62000a67565b3480156200040c57600080fd5b506200020f6200041e36600462002cc2565b62000c0d565b3480156200043157600080fd5b506200020f62000d82565b3480156200044957600080fd5b506200020f6200045b36600462002bdb565b62000d98565b3480156200046e57600080fd5b506200027f6200048036600462002925565b6024602052600090815260409020546001600160a01b031681565b348015620004a857600080fd5b50605a546001600160a01b03166200027f565b348015620004c857600080fd5b506027546200027f906001600160a01b031681565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002925565b62001245565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002d12565b6200128a565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002dc6565b620013a1565b348015620005e957600080fd5b506200020f62001553565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002925565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002964565b6200158a565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007065760405162461bcd60e51b815260206004820152604760248201527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b6200071686868686868662001609565b505050505050565b6027546001600160a01b031633146200074b5760405162461bcd60e51b8152600401620006fd9062002e2e565b6200075562001a9f565b565b60006024600084846040516020016200077292919062002e8b565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b462001afd565b608c55565b620007c362001afd565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008cf57826001166001036200085057600181602081106200081c576200081c62002eb5565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200087d565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088a60028462002ef7565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c69062002f0e565b915050620007f0565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009cb5781600116600103620009555786818151811062000913576200091362002eb5565b60200260200101518360405160200162000937929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009a7565b828782815181106200096b576200096b62002eb5565b60200260200101516040516020016200098e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b460028362002ef7565b915080620009c28162002f0e565b915050620008e8565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a8d5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000aa38a8a8a8a8a8a8a8a8a8a600162001b59565b62000ab48963ffffffff1662001de4565b6000836001600160a01b03168387898560405160240162000ad89392919062002fef565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b0f91906200302a565b60006040518083038185875af1925050503d806000811462000b4e576040519150601f19603f3d011682016040523d82523d6000602084013e62000b53565b606091505b505090508062000bbf5760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b6064820152608401620006fd565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bf895949392919062003048565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c2e5750600054600160ff909116105b8062000c4a5750303b15801562000c4a575060005460ff166001145b62000caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006fd565b6000805460ff19166001179055801562000cd3576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d3562001e26565b801562000d7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8c62001afd565b62000755600062001e99565b60225460ff161562000dbe5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000dd48a8a8a8a8a8a8a8a8a8a600062001b59565b62000de58963ffffffff1662001de4565b6001600160a01b03851662000eda57604080516000808252602082019092526001600160a01b03851690849060405162000e2091906200302a565b60006040518083038185875af1925050503d806000811462000e5f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e64565b606091505b505090508062000ed35760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b6064820152608401620006fd565b50620011f8565b60225463ffffffff61010090910481169087160362000f0f5762000f096001600160a01b038616848462001eeb565b620011f8565b6000868660405160200162000f2692919062002e8b565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200117d5760008060008580602001905181019062000f789190620030cb565b92509250925060008584848460405162000f9290620027c5565b62000fa09392919062003141565b8190604051809103906000f590508015801562000fc1573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001016573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200103c91906200318d565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200116b9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011f5565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620011cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011f391906200318d565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200123195949392919062003048565b60405180910390a150505050505050505050565b600080620012566101008462002ef7565b905060006200126861010085620031ad565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620012a292919062002e8b565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012d590620027c5565b601f1982820381018352601f90910116604081905262001302908d908d908d908d908d90602001620031ed565b60408051601f19818403018152908290526200132292916020016200322e565b604051602081830303815290604052805190602001206040516020016200137b94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013c75760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff6101009091048116908416036200144f5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c460000006064820152608401620006fd565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620014a398979695949392919062003261565b60405180910390a1620014e0620014da6001602260019054906101000a900463ffffffff16338787348880519060200120620009da565b62001f55565b6026546001600160a01b03166333d6247d620014fb620007e5565b6040518263ffffffff1660e01b81526004016200151a91815260200190565b600060405180830381600087803b1580156200153557600080fd5b505af11580156200154a573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015805760405162461bcd60e51b8152600401620006fd9062002e2e565b62000755620020a1565b6200159462001afd565b6001600160a01b038116620015fb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006fd565b620016068162001e99565b50565b60225460ff16156200162f5760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff610100909104811690861603620016b75760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c4600000000006064820152608401620006fd565b60008060606001600160a01b0389166200174e5785341462001744576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c55456064820152608401620006fd565b60009150620019bf565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200181c57604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af1158015620017e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200180991906200318d565b50602081015181519094509250620019bd565b84156200183157620018318a88888862002150565b620018486001600160a01b038b1633308a62002578565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200189f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018c99190810190620032ce565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001908573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620019329190810190620032ce565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001971573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001997919062003307565b604051602001620019ab9392919062003141565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162001a0198979695949392919062003261565b60405180910390a162001a26620014da600084868c8c8c8880519060200120620009da565b6026546001600160a01b03166333d6247d62001a41620007e5565b6040518263ffffffff1660e01b815260040162001a6091815260200190565b600060405180830381600087803b15801562001a7b57600080fd5b505af115801562001a90573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001ac55760405162461bcd60e51b8152600401620006fd9062002f2a565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006fd565b62001b6a8a63ffffffff1662001245565b1562001bc15760405162461bcd60e51b8152602060048201526030602482015260008051602062004bc583398151915260448201526f081053149150511657d0d3105253515160821b6064820152608401620006fd565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001c35573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c5b919062003327565b90508060000362001cc45760405162461bcd60e51b8152602060048201526039602482015260008051602062004bc583398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c4944000000000000006064820152608401620006fd565b60225463ffffffff878116610100909204161462001d465760405162461bcd60e51b8152602060048201526043602482015260008051602062004bc583398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a401620006fd565b602254600090610100900463ffffffff1662001d6457508862001d67565b50895b62001d9262001d83848b8b8b8b8b8b80519060200120620009da565b8e8e63ffffffff1684620008d8565b62001a905760405162461bcd60e51b815260206004820152602c602482015260008051602062004bc583398151915260448201526b0814d35517d253959053125160a21b6064820152608401620006fd565b600062001df46101008362002ef7565b9050600062001e0661010084620031ad565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001e935760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006fd565b62000755335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001f5090849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620025b2565b505050565b80600162001f66602060026200343e565b62001f7291906200344c565b6021541062001fd75760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b6064820152608401620006fd565b60016021600082825462001fec919062003466565b909155505060215460005b60208110156200209657816001166001036200202c57826001826020811062002024576200202462002eb5565b015550505050565b6001816020811062002042576200204262002eb5565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200207f919062002ef7565b9150806200208d8162002f0e565b91505062001ff7565b5062001f5062003481565b60225460ff166200211b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006fd565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200219383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200268b92505050565b9050632afa533160e01b6001600160e01b03198216016200238c576000808080808080620021c5896004818d62003497565b810190620021d49190620034c3565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620022165760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0386163014620022415760405162461bcd60e51b8152600401620006fd906200357b565b8a8514620022b85760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d41544348000000000000006064820152608401620006fd565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200233891906200302a565b6000604051808303816000865af19150503d806000811462002377576040519150601f19603f3d011682016040523d82523d6000602084013e6200237c565b606091505b5050505050505050505062002571565b6001600160e01b031981166323f2ebc360e21b14620024025760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b6064820152608401620006fd565b6000808080808080806200241a8a6004818e62003497565b810190620024299190620035cc565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200246d5760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0387163014620024985760405162461bcd60e51b8152600401620006fd906200357b565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f16916200252191906200302a565b6000604051808303816000865af19150503d806000811462002560576040519150601f19603f3d011682016040523d82523d6000602084013e62002565565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d7c9085906323b872dd60e01b9060840162001f18565b600062002609826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620026929092919063ffffffff16565b80519091501562001f5057808060200190518101906200262a91906200318d565b62001f505760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006fd565b6020015190565b6060620009d2848460008585600080866001600160a01b03168587604051620026bc91906200302a565b60006040518083038185875af1925050503d8060008114620026fb576040519150601f19603f3d011682016040523d82523d6000602084013e62002700565b606091505b509150915062002713878383876200271e565b979650505050505050565b60608315620027925782516000036200278a576001600160a01b0385163b6200278a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006fd565b5081620009d2565b620009d28383815115620027a95781518083602001fd5b8060405162461bcd60e51b8152600401620006fd919062003658565b611557806200366e83390190565b6001600160a01b03811681146200160657600080fd5b8035620027f681620027d3565b919050565b803563ffffffff81168114620027f657600080fd5b60008083601f8401126200282357600080fd5b50813567ffffffffffffffff8111156200283c57600080fd5b6020830191508360208285010111156200285557600080fd5b9250929050565b60008060008060008060a087890312156200287657600080fd5b86356200288381620027d3565b95506200289360208801620027fb565b94506040870135620028a581620027d3565b935060608701359250608087013567ffffffffffffffff811115620028c957600080fd5b620028d789828a0162002810565b979a9699509497509295939492505050565b60008060408385031215620028fd57600080fd5b6200290883620027fb565b915060208301356200291a81620027d3565b809150509250929050565b6000602082840312156200293857600080fd5b5035919050565b6000602082840312156200295257600080fd5b6200295d82620027fb565b9392505050565b6000602082840312156200297757600080fd5b81356200295d81620027d3565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620029c657620029c662002984565b604052919050565b600082601f830112620029e057600080fd5b8135602067ffffffffffffffff821115620029ff57620029ff62002984565b8160051b62002a108282016200299a565b928352848101820192828101908785111562002a2b57600080fd5b83870192505b84831015620027135782358252918301919083019062002a31565b6000806000806080858703121562002a6357600080fd5b84359350602085013567ffffffffffffffff8082111562002a8357600080fd5b62002a9188838901620029ce565b945060408701359150808216821462002aa957600080fd5b509396929550929360600135925050565b60ff811681146200160657600080fd5b600080600080600080600060e0888a03121562002ae657600080fd5b873562002af38162002aba565b965062002b0360208901620027fb565b9550604088013562002b1581620027d3565b945062002b2560608901620027fb565b9350608088013562002b3781620027d3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002b715762002b7162002984565b50601f01601f191660200190565b600082601f83011262002b9157600080fd5b813562002ba862002ba28262002b54565b6200299a565b81815284602083860101111562002bbe57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002bfc57600080fd5b8a3567ffffffffffffffff8082111562002c1557600080fd5b62002c238e838f01620029ce565b9b5062002c3360208e01620027fb565b9a5060408d0135995060608d0135985062002c5160808e01620027fb565b975062002c6160a08e01620027e9565b965062002c7160c08e01620027fb565b955062002c8160e08e01620027e9565b94506101008d013593506101208d013591508082111562002ca157600080fd5b5062002cb08d828e0162002b7f565b9150509295989b9194979a5092959850565b60008060006060848603121562002cd857600080fd5b62002ce384620027fb565b9250602084013562002cf581620027d3565b9150604084013562002d0781620027d3565b809150509250925092565b600080600080600080600060a0888a03121562002d2e57600080fd5b62002d3988620027fb565b9650602088013562002d4b81620027d3565b9550604088013567ffffffffffffffff8082111562002d6957600080fd5b62002d778b838c0162002810565b909750955060608a013591508082111562002d9157600080fd5b5062002da08a828b0162002810565b909450925050608088013562002db68162002aba565b8091505092959891949750929550565b60008060006060848603121562002ddc57600080fd5b62002de784620027fb565b9250602084013562002df981620027d3565b9150604084013567ffffffffffffffff81111562002e1657600080fd5b62002e248682870162002b7f565b9150509250925092565b6020808252603d908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79506f6c79676f6e5a4b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002f095762002f0962002ecb565b500490565b60006001820162002f235762002f2362002ee1565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002faf57818101518382015260200162002f95565b8381111562000d7c5750506000910152565b6000815180845262002fdb81602086016020860162002f92565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff83166020820152606060408201819052600090620030219083018462002fc1565b95945050505050565b600082516200303e81846020870162002f92565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f8301126200309157600080fd5b8151620030a262002ba28262002b54565b818152846020838601011115620030b857600080fd5b620009d282602083016020870162002f92565b600080600060608486031215620030e157600080fd5b835167ffffffffffffffff80821115620030fa57600080fd5b62003108878388016200307f565b945060208601519150808211156200311f57600080fd5b506200312e868287016200307f565b925050604084015162002d078162002aba565b60608152600062003156606083018662002fc1565b82810360208401526200316a818662002fc1565b91505060ff83166040830152949350505050565b80151581146200160657600080fd5b600060208284031215620031a057600080fd5b81516200295d816200317e565b600082620031bf57620031bf62002ecb565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003203606083018789620031c4565b828103602084015262003218818688620031c4565b91505060ff831660408301529695505050505050565b600083516200324281846020880162002f92565b8351908301906200325881836020880162002f92565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032b58483018762002fc1565b925080851660e085015250509998505050505050505050565b600060208284031215620032e157600080fd5b815167ffffffffffffffff811115620032f957600080fd5b620009d2848285016200307f565b6000602082840312156200331a57600080fd5b81516200295d8162002aba565b6000602082840312156200333a57600080fd5b5051919050565b600181815b808511156200338257816000190482111562003366576200336662002ee1565b808516156200337457918102915b93841c939080029062003346565b509250929050565b6000826200339b57506001620007a4565b81620033aa57506000620007a4565b8160018114620033c35760028114620033ce57620033ee565b6001915050620007a4565b60ff841115620033e257620033e262002ee1565b50506001821b620007a4565b5060208310610133831016604e8410600b841016171562003413575081810a620007a4565b6200341f838362003341565b806000190482111562003436576200343662002ee1565b029392505050565b60006200295d83836200338a565b60008282101562003461576200346162002ee1565b500390565b600082198211156200347c576200347c62002ee1565b500190565b634e487b7160e01b600052600160045260246000fd5b60008085851115620034a857600080fd5b83861115620034b657600080fd5b5050820193919092039150565b600080600080600080600060e0888a031215620034df57600080fd5b8735620034ec81620027d3565b96506020880135620034fe81620027d3565b95506040880135945060608801359350608088013562002b378162002aba565b6020808252603c908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b031215620035ea57600080fd5b8835620035f781620027d3565b975060208901356200360981620027d3565b96506040890135955060608901359450608089013562003629816200317e565b935060a08901356200363b8162002aba565b979a969950949793969295929450505060c08201359160e0013590565b6020815260006200295d602083018462002fc156fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b5d95b18e7873c0bee5e5a0f8ba7f856feaa9a4588dd711619c14728f42e00f64736f6c634300080f0033506f6c79676f6e5a4b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212206ec7e43691f361491ee442d1fd15e0d82b13a9ad35949d811f74af9b2582621764736f6c634300080f0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/compiled-contracts/PolygonZKEVMMock.json b/compiled-contracts/PolygonZKEVMMock.json index f16005d0f..7ee57af7a 100644 --- a/compiled-contracts/PolygonZKEVMMock.json +++ b/compiled-contracts/PolygonZKEVMMock.json @@ -468,7 +468,7 @@ "name": "bridgeAddress", "outputs": [ { - "internalType": "contract IBridge", + "internalType": "contract IPolygonZKEVMBridge", "name": "", "type": "address" } @@ -746,7 +746,7 @@ "type": "address" }, { - "internalType": "contract IBridge", + "internalType": "contract IPolygonZKEVMBridge", "name": "_bridgeAddress", "type": "address" }, @@ -1693,8 +1693,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50615e2180620000216000396000f3fe608060405234801561001057600080fd5b50600436106104125760003560e01c806396dc3d3911610220578063cfa8ed4711610130578063e7a7ed02116100b8578063f14916d611610087578063f14916d6146109e2578063f2fde38b146109f5578063f851a44014610a08578063f8b823e414610a1b578063fe16564f14610a2457600080fd5b8063e7a7ed021461098f578063e8bf92ed146109a9578063eaeb077b146109bc578063edc41121146109cf57600080fd5b8063d939b315116100ff578063d939b3151461093e578063dbc1697614610958578063e0d1744114610960578063e11f3f1814610973578063e217cfd61461098657600080fd5b8063cfa8ed47146108ea578063d02103ca14610904578063d8d1091b14610917578063d8f54db01461092a57600080fd5b8063ab9fc5ef116101b3578063b6b0b09711610182578063b6b0b0971461088f578063c0cad302146108a9578063c0ed84e0146108bc578063c89e42df146108c4578063cf136306146108d757600080fd5b8063ab9fc5ef146107e3578063adc879e9146107ed578063afd23cbe14610807578063b4d63f581461082f57600080fd5b80639eb831b9116101ef5780639eb831b9146107a85780639f0d039d146107b0578063a3c573eb146107b8578063aa58bad6146107cb57600080fd5b806396dc3d391461076757806399f5634e1461077a5780639b796760146107825780639c9f3dfe1461079557600080fd5b80634a910e6a11610326578063715018a6116102ae578063837a47381161027d578063837a4738146106b1578063841b24d71461071f5780638b48931e146107395780638c4a0af7146107435780638da5cb5b1461075657600080fd5b8063715018a6146106705780637215541a1461067857806375c508b31461068b5780637fcb36531461069e57600080fd5b8063574f649e116102f5578063574f649e1461060457806360943d6a146106175780636b8616ce1461062a5780636ff512cc1461064a578063704b6c021461065d57600080fd5b80634a910e6a146105b65780635392c5e0146105c9578063542028d5146105e95780635437988d146105f157600080fd5b80632d0889d3116103a9578063423fa85611610378578063423fa85614610542578063456052671461055c578063458c0477146105765780634834a343146105895780634a1a89a71461059c57600080fd5b80632d0889d314610500578063383b3be814610509578063394218e91461051c5780633c1582671461052f57600080fd5b80631816b7e5116103e55780631816b7e51461048457806319d8ac6114610497578063220d7899146104c257806329878983146104d557600080fd5b80630eaa86ea14610417578063107bf28c1461043d57806310a01a721461045257806315064c9614610467575b600080fd5b61042a610425366004614b86565b610a37565b6040519081526020015b60405180910390f35b610445610c18565b6040516104349190614c33565b610465610460366004614c75565b610ca6565b005b6065546104749060ff1681565b6040519015158152602001610434565b610465610492366004614d02565b610ef0565b6068546104aa906001600160401b031681565b6040516001600160401b039091168152602001610434565b6104456104d0366004614d26565b611016565b606a546104e8906001600160a01b031681565b6040516001600160a01b039091168152602001610434565b61042a61ea6081565b610474610517366004614d73565b6111bc565b61046561052a366004614d73565b611203565b61046561053d366004614eb0565b611352565b6068546104aa90600160401b90046001600160401b031681565b6068546104aa90600160801b90046001600160401b031681565b6072546104aa906001600160401b031681565b610465610597366004614c75565b611b66565b6072546104aa90600160401b90046001600160401b031681565b6104656105c4366004614d73565b611eaf565b61042a6105d7366004614d73565b606d6020526000908152604090205481565b61044561214a565b6104656105ff366004614fdb565b612157565b61042a610612366004614ff8565b612181565b61046561062536600461506d565b6121c4565b61042a610638366004614d73565b60666020526000908152604090205481565b610465610658366004614fdb565b612534565b61046561066b366004614fdb565b6125b8565b610465612630565b610465610686366004614d73565b612644565b610465610699366004615144565b6128bc565b6069546104aa906001600160401b031681565b6106f46106bf3660046151e2565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610434565b6072546104aa90600160c01b90046001600160401b031681565b6104aa62093a8081565b610465610751366004615209565b61294b565b6033546001600160a01b03166104e8565b610465610775366004614d73565b6129c2565b61042a6129ed565b610465610790366004614d73565b612ad0565b6104656107a3366004614d73565b612b05565b61042a600c81565b60745461042a565b6070546104e8906001600160a01b031681565b6065546104aa9061010090046001600160401b031681565b6104aa6206978081565b606c546104aa90600160a81b90046001600160401b031681565b60655461081c90600160481b900461ffff1681565b60405161ffff9091168152602001610434565b61086a61083d366004614d73565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610434565b6065546104e890600160581b90046001600160a01b031681565b6104656108b7366004615226565b612c4b565b6104aa612c63565b6104656108d2366004615226565b612cb0565b6104656108e5366004614d73565b612d16565b6069546104e890600160401b90046001600160a01b031681565b606c546104e8906001600160a01b031681565b61046561092536600461525a565b612d97565b606c5461047490600160a01b900460ff1681565b6072546104aa90600160801b90046001600160401b031681565b610465613261565b61046561096e36600461534c565b61331d565b610465610981366004615144565b61338f565b6104aa6103e881565b6068546104aa90600160c01b90046001600160401b031681565b606b546104e8906001600160a01b031681565b6104656109ca366004615399565b6134d4565b6104656109dd366004614c75565b6137fc565b6104656109f0366004614fdb565b61391c565b610465610a03366004614fdb565b613994565b6073546104e8906001600160a01b031681565b61042a60745481565b610465610a323660046153dd565b613a0a565b6000806000610a44612c63565b90506001600160401b03881615610ae1576072546001600160401b039081169089161115610a8d5760405162461bcd60e51b8152600401610a8490615409565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610adb5760405162461bcd60e51b8152600401610a849061548c565b50610b4b565b6001600160401b0387166000908152606d6020526040902054915081610b195760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316876001600160401b03161115610b4b5760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316866001600160401b031611610b7c5760405162461bcd60e51b8152600401610a84906155ea565b6000610b8b8888888689611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051610bc0919061566d565b602060405180830381855afa158015610bdd573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c009190615689565b610c0a91906156b8565b9a9950505050505050505050565b606f8054610c25906156cc565b80601f0160208091040260200160405190810160405280929190818152602001828054610c51906156cc565b8015610c9e5780601f10610c7357610100808354040283529160200191610c9e565b820191906000526020600020905b815481529060010190602001808311610c8157829003601f168201915b505050505081565b610cae613a2c565b600080610cb9612c63565b90506001600160401b038a1615610d4d576072546001600160401b03908116908b161115610cf95760405162461bcd60e51b8152600401610a8490615409565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610d475760405162461bcd60e51b8152600401610a849061548c565b50610db7565b6001600160401b0389166000908152606d6020526040902054915081610d855760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316896001600160401b03161115610db75760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316886001600160401b031611610de85760405162461bcd60e51b8152600401610a84906155ea565b6000610df78a8a8a868b611016565b6069805467ffffffffffffffff19166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610e4557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610e8b57600080fd5b505af1158015610e9f573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610f1a5760405162461bcd60e51b8152600401610a8490615706565b6103e88161ffff16118015610f3457506104008161ffff16105b610fb95760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a4b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a401610a84565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b0380861660008181526067602052604080822054938816825290205460609291158061104857508115155b6110bc576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a84565b80611131576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a84565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b03828116600090815260716020526040812054909242926111f292600160801b9092048116911661575f565b6001600160401b0316111592915050565b6073546001600160a01b0316331461122d5760405162461bcd60e51b8152600401610a8490615706565b62093a806001600160401b03821611156112595760405162461bcd60e51b8152600401610a849061578a565b60655460ff166112fc576072546001600160401b03600160c01b9091048116908216106112fc5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a4b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a401610a84565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a19060200161100b565b60655460ff16156113755760405162461bcd60e51b8152600401610a84906157f5565b606954600160401b90046001600160a01b031633146113fc5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e6365720000000000006064820152608401610a84565b8051806114715760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e636520312062617463680000006064820152608401610a84565b6103e881106114ea576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e7920626174636865736064820152608401610a84565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561198a57600087828151811061153d5761153d61585d565b60200260200101519050600081606001516001600160401b031611156116f6578361156781615873565b94505060008160000151805190602001208260200151836060015160405160200161159493929190615899565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461163a5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d617463680000006064820152608401610a84565b81606001516001600160401b031682604001516001600160401b031610156116f05760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a401610a84565b5061187d565b6020810151158061177f5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916117399160040190815260200190565b6020604051808303816000875af1158015611758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177c9190615689565b15155b6117f15760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d7573742065786973740000000000006064820152608401610a84565b80515161ea601161187d5760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a401610a84565b856001600160401b031681604001516001600160401b0316101580156118b057504281604001516001600160401b031611155b6119225760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e67650000006064820152608401610a84565b805180516020918201208183015160408085015190516119499488949392913391016158bc565b604051602081830303815290604052805190602001209250848061196c90615873565b9550508060400151955050808061198290615900565b915050611521565b506068546001600160401b03600160c01b90910481169083161115611a0f5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b6064820152608401610a84565b606854600090611a2f90600160801b90046001600160401b031684615919565b611a42906001600160401b031687615941565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611b1790339030908490611afc9190615958565b606554600160581b90046001600160a01b0316929190613a86565b611b1f613af1565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b895760405162461bcd60e51b8152600401610a84906157f5565b6072546001600160401b038781166000908152606760205260409020600101544292611bc092600160c01b9091048116911661575f565b6001600160401b03161115611c495760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a401610a84565b6103e8611c568888615919565b6001600160401b031610611cd25760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e792062617463686573000000006064820152608401610a84565b611ce28888888888888888613b91565b611ceb86613e8e565b607254600160801b90046001600160401b0316600003611db3576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615611d5057607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d9657600080fd5b505af1158015611daa573d6000803e3d6000fd5b50505050611e64565b611dbb613af1565b607280546001600160401b0316906000611dd483615873565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611edc57506072546001600160401b03600160401b9091048116908216115b8015611ef757506072546001600160401b0390811690821611155b611f755760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a401610a84565b606a546001600160a01b0316331461201f57611f90816111bc565b61201f5760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a401610a84565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b1580156120dc57600080fd5b505af11580156120f0573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e846002015460405161213d91815260200190565b60405180910390a3505050565b606e8054610c25906156cc565b61215f613a2c565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b60008585805190602001208585856040516020016121a39594939291906158bc565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff16158080156121e45750600054600160ff909116105b806121fe5750303b1580156121fe575060005460ff166001145b6122615760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a84565b6000805460ff191660011790558015612284576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a8416179055607080549091169188169190911790556123016020860186614fdb565b607380546001600160a01b0319166001600160a01b03929092169190911790556123316060860160408701614fdb565b606980546001600160a01b0392909216600160401b02600160401b600160e01b031990921691909117905561236c60c0860160a08701614fdb565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa7113568490556123c960e0860160c08701614d73565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556124006040860160208701614d73565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561243c6080860160608701614d73565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b1990921691909117905561247860a0860160808701615209565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e6124a084826159bd565b50606f6124ad83826159bd565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124e3614074565b8015612529576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b0316331461255e5760405162461bcd60e51b8152600401610a8490615706565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161100b565b6073546001600160a01b031633146125e25760405162461bcd60e51b8152600401610a8490615706565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a19060200161100b565b612638613a2c565b61264260006140e4565b565b6033546001600160a01b031633146128b1576072546000906001600160401b03161561269557506072546001600160401b03908116600090815260716020526040902054600160401b9004166126a3565b506069546001600160401b03165b80826001600160401b0316116127215760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c7265616479207665726966696564000000006064820152608401610a84565b6068546001600160401b03600160401b90910481169083161180159061276357506001600160401b038083166000908152606760205260409020600101541615155b6127ee5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a401610a84565b6001600160401b03808316600090815260676020526040902060010154429161281c9162093a80911661575f565b6001600160401b031611156128af5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a401610a84565b505b6128b9614136565b50565b60655460ff16156128df5760405162461bcd60e51b8152600401610a84906157f5565b6128f08989898989898989896141a6565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1612529614136565b6073546001600160a01b031633146129755760405162461bcd60e51b8152600401610a8490615706565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061100b90831515815260200190565b6129ca613a2c565b6069805467ffffffffffffffff19166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a649190615689565b90506000612a70612c63565b6068546001600160401b03600160401b8204811691612aa091600160801b8204811691600160c01b900416615919565b612aaa919061575f565b612ab49190615919565b6001600160401b03169050612ac98183615a7c565b9250505090565b612ad8613a2c565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612b2f5760405162461bcd60e51b8152600401610a8490615706565b62093a806001600160401b0382161115612b5b5760405162461bcd60e51b8152600401610a849061578a565b60655460ff16612bf0576072546001600160401b03600160801b909104811690821610612bf05760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f776572006064820152608401610a84565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c759060200161100b565b612c53613a2c565b606f612c5f82826159bd565b5050565b6072546000906001600160401b031615612ca057506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612cda5760405162461bcd60e51b8152600401610a8490615706565b606e612ce682826159bd565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161100b9190614c33565b6073546001600160a01b03163314612d405760405162461bcd60e51b8152600401610a8490615706565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f9060200161100b565b60655460ff1615612dba5760405162461bcd60e51b8152600401610a84906157f5565b606c54600160a01b900460ff161515600114612de85760405162461bcd60e51b8152600401610a8490615a90565b805180612e4b5760405162461bcd60e51b815260206004820152603d6024820152600080516020615dac83398151915260448201527f3a204d75737420666f726365206174206c6561737420312062617463680000006064820152608401610a84565b6103e88110612ebc5760405162461bcd60e51b81526020600482015260436024820152600080516020615dac83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a401610a84565b6068546001600160401b03600160c01b8204811691612ee4918491600160801b900416615af9565b1115612f3e5760405162461bcd60e51b81526020600482015260356024820152600080516020615dac8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b6064820152608401610a84565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b8481101561316a576000868281518110612f8b57612f8b61585d565b602002602001015190508380612fa090615873565b945050600081600001518051906020012082602001518360400151604051602001612fcd93929190615899565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461306c5760405162461bcd60e51b81526020600482015260426024820152600080516020615dac83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a401610a84565b613077600188615941565b830361310c5742620697808360400151613091919061575f565b6001600160401b0316111561310c5760405162461bcd60e51b81526020600482015260476024820152600080516020615dac83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a401610a84565b815180516020918201208184015160405161312f938893929142913391016158bc565b604051602081830303815290604052805190602001209350858061315290615873565b9650505050808061316290615900565b915050612f6f565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166132835760405162461bcd60e51b8152600401610a8490615b11565b6073546001600160a01b031633146132ad5760405162461bcd60e51b8152600401610a8490615706565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156132fd57600080fd5b505af1158015613311573d6000803e3d6000fd5b50505050612642614821565b613325613a2c565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133b95760405162461bcd60e51b8152600401610a8490615b6e565b6133ca8989898989898989896141a6565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561341557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561345b57600080fd5b505af115801561346f573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff16156134f75760405162461bcd60e51b8152600401610a84906157f5565b606c54600160a01b900460ff1615156001146135255760405162461bcd60e51b8152600401610a8490615a90565b600061353060745490565b9050818111156135955760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b6064820152608401610a84565b61ea608351106136055760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b6064820152608401610a84565b60655461362490600160581b90046001600160a01b0316333084613a86565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa15801561366e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136929190615689565b60688054919250600160c01b9091046001600160401b03169060186136b683615873565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016136f793929190615899565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361379b57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26137f6565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516137ed93929190615bcb565b60405180910390a25b50505050565b606a546001600160a01b031633146138265760405162461bcd60e51b8152600401610a8490615b6e565b6138368888888888888888613b91565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561388157607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156138c757600080fd5b505af11580156138db573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e9d565b6073546001600160a01b031633146139465760405162461bcd60e51b8152600401610a8490615706565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca9060200161100b565b61399c613a2c565b6001600160a01b038116613a015760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a84565b6128b9816140e4565b613a12613a2c565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b031633146126425760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a84565b6040516001600160a01b03808516602483015283166044820152606481018290526137f69085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614878565b6072546001600160401b03600160401b820481169116111561264257607254600090613b2e90600160401b90046001600160401b0316600161575f565b9050613b39816111bc565b156128b957607254600090600290613b5b9084906001600160401b0316615919565b613b659190615bfe565b613b6f908361575f565b9050613b7a816111bc565b15613b8857612c5f81611eaf565b612c5f82611eaf565b600080613b9c612c63565b90506001600160401b038a1615613c30576072546001600160401b03908116908b161115613bdc5760405162461bcd60e51b8152600401610a8490615409565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c2a5760405162461bcd60e51b8152600401610a849061548c565b50613c9a565b6001600160401b0389166000908152606d6020526040902054915081613c685760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316896001600160401b03161115613c9a5760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316886001600160401b031611613ccb5760405162461bcd60e51b8152600401610a84906155ea565b6000613cda8a8a8a868b611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051613d0f919061566d565b602060405180830381855afa158015613d2c573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613d4f9190615689565b613d5991906156b8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613d9d918b918b918b9190600401615c24565b602060405180830381865afa158015613dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dde9190615c9e565b613e3d5760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20494e5660448201526920a624a22fa82927a7a360b11b6064820152608401610a84565b613e8033613e4b858d615919565b6001600160401b0316613e5c6129ed565b613e669190615958565b606554600160581b90046001600160a01b0316919061494f565b505050505050505050505050565b6000613e98612c63565b905081600080613ea88484615919565b6001600160401b031690505b836001600160401b0316836001600160401b031614613f5a576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613f04911642615941565b1115613f3f576001810154613f2990600160401b90046001600160401b031686615919565b613f3c906001600160401b031684615af9565b92505b60010154600160401b90046001600160401b03169250613eb4565b6000613f668383615941565b905082811015613fe0576000613f7c8285615941565b9050600c8111613f8c5780613f8f565b600c5b9050613f9c816003615958565b613fa790600a615d9f565b606554613fc0908390600160481b900461ffff16615d9f565b607454613fcd9190615958565b613fd79190615a7c565b6074555061406c565b6000613fec8483615941565b9050600c8111613ffc5780613fff565b600c5b9050600061400e826003615958565b61401990600a615d9f565b606554614032908490600160481b900461ffff16615d9f565b60745461403f9190615958565b6140499190615a7c565b90508060745460745461405c9190615958565b6140669190615a7c565b60745550505b505050505050565b600054610100900460ff166140df5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a84565b612642335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561418657600080fd5b505af115801561419a573d6000803e3d6000fd5b5050505061264261497f565b60006001600160401b038a1615614321576072546001600160401b03908116908b1611156142655760405162461bcd60e51b815260206004820152606c6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c401610a84565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b909204161461431b5760405162461bcd60e51b81526020600482015260606024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a401610a84565b50614475565b506001600160401b0387166000908152606d6020526040902054806143c25760405162461bcd60e51b81526020600482015260576024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a401610a84565b6069546001600160401b0390811690891611156144755760405162461bcd60e51b81526020600482015260716024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c401610a84565b6072546001600160401b03908116908a16118015906144a55750896001600160401b0316896001600160401b0316115b80156144c657506072546001600160401b03600160401b9091048116908a16115b61453e5760405162461bcd60e51b815260206004820152604f6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a401610a84565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146145fe5760405162461bcd60e51b815260206004820152606a6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c401610a84565b600061460d898989858a611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051614642919061566d565b602060405180830381855afa15801561465f573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906146829190615689565b61468c91906156b8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916146d0918a918a918a9190600401615c24565b602060405180830381865afa1580156146ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147119190615c9e565b6147715760405162461bcd60e51b815260206004820152603e6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20494e56414c49445f50524f4f4600006064820152608401610a84565b6001600160401b038b16600090815260716020526040902060020154879003613e805760405162461bcd60e51b81526020600482015260626024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c401610a84565b60655460ff166148435760405162461bcd60e51b8152600401610a8490615b11565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006148cd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166149da9092919063ffffffff16565b80519091501561494a57808060200190518101906148eb9190615c9e565b61494a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a84565b505050565b6040516001600160a01b03831660248201526044810182905261494a90849063a9059cbb60e01b90606401613aba565b60655460ff16156149a25760405162461bcd60e51b8152600401610a84906157f5565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60606149e984846000856149f1565b949350505050565b606082471015614a525760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a84565b600080866001600160a01b03168587604051614a6e919061566d565b60006040518083038185875af1925050503d8060008114614aab576040519150601f19603f3d011682016040523d82523d6000602084013e614ab0565b606091505b5091509150614ac187838387614acc565b979650505050505050565b60608315614b3b578251600003614b34576001600160a01b0385163b614b345760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a84565b50816149e9565b6149e98383815115614b505781518083602001fd5b8060405162461bcd60e51b8152600401610a849190614c33565b80356001600160401b0381168114614b8157600080fd5b919050565b600080600080600060a08688031215614b9e57600080fd5b614ba786614b6a565b9450614bb560208701614b6a565b9350614bc360408701614b6a565b94979396509394606081013594506080013592915050565b60005b83811015614bf6578181015183820152602001614bde565b838111156137f65750506000910152565b60008151808452614c1f816020860160208601614bdb565b601f01601f19169290920160200192915050565b602081526000614c466020830184614c07565b9392505050565b8060408101831015614c5e57600080fd5b92915050565b8060808101831015614c5e57600080fd5b6000806000806000806000806101a0898b031215614c9257600080fd5b614c9b89614b6a565b9750614ca960208a01614b6a565b9650614cb760408a01614b6a565b95506060890135945060808901359350614cd48a60a08b01614c4d565b9250614ce38a60e08b01614c64565b9150614cf38a6101608b01614c4d565b90509295985092959890939650565b600060208284031215614d1457600080fd5b813561ffff81168114614c4657600080fd5b600080600080600060a08688031215614d3e57600080fd5b614d4786614b6a565b9450614d5560208701614b6a565b94979496505050506040830135926060810135926080909101359150565b600060208284031215614d8557600080fd5b614c4682614b6a565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614dc657614dc6614d8e565b60405290565b604051606081016001600160401b0381118282101715614dc657614dc6614d8e565b604051601f8201601f191681016001600160401b0381118282101715614e1657614e16614d8e565b604052919050565b60006001600160401b03821115614e3757614e37614d8e565b5060051b60200190565b600082601f830112614e5257600080fd5b81356001600160401b03811115614e6b57614e6b614d8e565b614e7e601f8201601f1916602001614dee565b818152846020838601011115614e9357600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614ec357600080fd5b82356001600160401b0380821115614eda57600080fd5b818501915085601f830112614eee57600080fd5b8135614f01614efc82614e1e565b614dee565b81815260059190911b83018401908481019088831115614f2057600080fd5b8585015b83811015614fb957803585811115614f3c5760008081fd5b86016080818c03601f1901811315614f545760008081fd5b614f5c614da4565b8983013588811115614f6e5760008081fd5b614f7c8e8c83870101614e41565b8252506040808401358b8301526060614f96818601614b6a565b82840152614fa5848601614b6a565b908301525085525050918601918601614f24565b5098975050505050505050565b6001600160a01b03811681146128b957600080fd5b600060208284031215614fed57600080fd5b8135614c4681614fc6565b600080600080600060a0868803121561501057600080fd5b8535945060208601356001600160401b0381111561502d57600080fd5b61503988828901614e41565b9450506040860135925061504f60608701614b6a565b9150608086013561505f81614fc6565b809150509295509295909350565b600080600080600080600080888a036101c081121561508b57600080fd5b893561509681614fc6565b985060208a01356150a681614fc6565b975060408a01356150b681614fc6565b965060608a01356150c681614fc6565b955060e0607f19820112156150da57600080fd5b5060808901935061016089013592506101808901356001600160401b038082111561510457600080fd5b6151108c838d01614e41565b93506101a08b013591508082111561512757600080fd5b506151348b828c01614e41565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c03121561516357600080fd5b61516c8a614b6a565b985061517a60208b01614b6a565b975061518860408b01614b6a565b965061519660608b01614b6a565b955060808a0135945060a08a013593506151b38b60c08c01614c4d565b92506151c38b6101008c01614c64565b91506151d38b6101808c01614c4d565b90509295985092959850929598565b6000602082840312156151f457600080fd5b5035919050565b80151581146128b957600080fd5b60006020828403121561521b57600080fd5b8135614c46816151fb565b60006020828403121561523857600080fd5b81356001600160401b0381111561524e57600080fd5b6149e984828501614e41565b6000602080838503121561526d57600080fd5b82356001600160401b038082111561528457600080fd5b818501915085601f83011261529857600080fd5b81356152a6614efc82614e1e565b81815260059190911b830184019084810190888311156152c557600080fd5b8585015b83811015614fb9578035858111156152e15760008081fd5b86016060818c03601f19018113156152f95760008081fd5b615301614dcc565b89830135888111156153135760008081fd5b6153218e8c83870101614e41565b8252506040808401358b830152615339838501614b6a565b90820152855250509186019186016152c9565b6000806000806080858703121561536257600080fd5b61536b85614b6a565b93506020850135925061538060408601614b6a565b915061538e60608601614b6a565b905092959194509250565b600080604083850312156153ac57600080fd5b82356001600160401b038111156153c257600080fd5b6153ce85828601614e41565b95602094909401359450505050565b600080604083850312156153f057600080fd5b8235915061540060208401614b6a565b90509250929050565b60208082526058908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2070656e60408201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560608201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608082015260a00190565b6020808252604c908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760608201526b040e6e8c2e8ca40c4c2e8c6d60a31b608082015260a00190565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786060820152621a5cdd60ea1b608082015260a00190565b6020808252605d908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060608201527f7468616e2063757272656e744c61737456657269666965644261746368000000608082015260a00190565b60208082526057908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2066696e60408201527f616c4e65774261746368206d75737420626520626967676572207468616e206360608201527f757272656e744c61737456657269666965644261746368000000000000000000608082015260a00190565b6000825161567f818460208701614bdb565b9190910192915050565b60006020828403121561569b57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826156c7576156c76156a2565b500690565b600181811c908216806156e057607f821691505b60208210810361570057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561578157615781615749565b01949350505050565b60208082526045908201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361588f5761588f615749565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b60006001820161591257615912615749565b5060010190565b60006001600160401b038381169083168181101561593957615939615749565b039392505050565b60008282101561595357615953615749565b500390565b600081600019048311821515161561597257615972615749565b500290565b601f82111561494a57600081815260208120601f850160051c8101602086101561599e5750805b601f850160051c820191505b8181101561406c578281556001016159aa565b81516001600160401b038111156159d6576159d6614d8e565b6159ea816159e484546156cc565b84615977565b602080601f831160018114615a1f5760008415615a075750858301515b600019600386901b1c1916600185901b17855561406c565b600085815260208120601f198616915b82811015615a4e57888601518255948401946001909101908401615a2f565b5085821015615a6c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615a8b57615a8b6156a2565b500490565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b60008219821115615b0c57615b0c615749565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b0383166020820152606060408201819052600090615bf590830184614c07565b95945050505050565b60006001600160401b0380841680615c1857615c186156a2565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615c5c57848483379084018281529284019290600101615c3c565b5050828760c0870137610100850181815286935091505b6001811015615c92578251825260209283019290910190600101615c73565b50505095945050505050565b600060208284031215615cb057600080fd5b8151614c46816151fb565b600181815b80851115615cf6578160001904821115615cdc57615cdc615749565b80851615615ce957918102915b93841c9390800290615cc0565b509250929050565b600082615d0d57506001614c5e565b81615d1a57506000614c5e565b8160018114615d305760028114615d3a57615d56565b6001915050614c5e565b60ff841115615d4b57615d4b615749565b50506001821b614c5e565b5060208310610133831016604e8410600b8410161715615d79575081810a614c5e565b615d838383615cbb565b8060001904821115615d9757615d97615749565b029392505050565b6000614c468383615cfe56fe506f6c79676f6e5a4b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a4b45564d3a3a70726f76654e6f6e44657465726d696e6973a26469706673582212201e5160e5b35ba013638c7e982194345ea29364dacf96b8b35832f82a7d7d74b864736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106104125760003560e01c806396dc3d3911610220578063cfa8ed4711610130578063e7a7ed02116100b8578063f14916d611610087578063f14916d6146109e2578063f2fde38b146109f5578063f851a44014610a08578063f8b823e414610a1b578063fe16564f14610a2457600080fd5b8063e7a7ed021461098f578063e8bf92ed146109a9578063eaeb077b146109bc578063edc41121146109cf57600080fd5b8063d939b315116100ff578063d939b3151461093e578063dbc1697614610958578063e0d1744114610960578063e11f3f1814610973578063e217cfd61461098657600080fd5b8063cfa8ed47146108ea578063d02103ca14610904578063d8d1091b14610917578063d8f54db01461092a57600080fd5b8063ab9fc5ef116101b3578063b6b0b09711610182578063b6b0b0971461088f578063c0cad302146108a9578063c0ed84e0146108bc578063c89e42df146108c4578063cf136306146108d757600080fd5b8063ab9fc5ef146107e3578063adc879e9146107ed578063afd23cbe14610807578063b4d63f581461082f57600080fd5b80639eb831b9116101ef5780639eb831b9146107a85780639f0d039d146107b0578063a3c573eb146107b8578063aa58bad6146107cb57600080fd5b806396dc3d391461076757806399f5634e1461077a5780639b796760146107825780639c9f3dfe1461079557600080fd5b80634a910e6a11610326578063715018a6116102ae578063837a47381161027d578063837a4738146106b1578063841b24d71461071f5780638b48931e146107395780638c4a0af7146107435780638da5cb5b1461075657600080fd5b8063715018a6146106705780637215541a1461067857806375c508b31461068b5780637fcb36531461069e57600080fd5b8063574f649e116102f5578063574f649e1461060457806360943d6a146106175780636b8616ce1461062a5780636ff512cc1461064a578063704b6c021461065d57600080fd5b80634a910e6a146105b65780635392c5e0146105c9578063542028d5146105e95780635437988d146105f157600080fd5b80632d0889d3116103a9578063423fa85611610378578063423fa85614610542578063456052671461055c578063458c0477146105765780634834a343146105895780634a1a89a71461059c57600080fd5b80632d0889d314610500578063383b3be814610509578063394218e91461051c5780633c1582671461052f57600080fd5b80631816b7e5116103e55780631816b7e51461048457806319d8ac6114610497578063220d7899146104c257806329878983146104d557600080fd5b80630eaa86ea14610417578063107bf28c1461043d57806310a01a721461045257806315064c9614610467575b600080fd5b61042a610425366004614b86565b610a37565b6040519081526020015b60405180910390f35b610445610c18565b6040516104349190614c33565b610465610460366004614c75565b610ca6565b005b6065546104749060ff1681565b6040519015158152602001610434565b610465610492366004614d02565b610ef0565b6068546104aa906001600160401b031681565b6040516001600160401b039091168152602001610434565b6104456104d0366004614d26565b611016565b606a546104e8906001600160a01b031681565b6040516001600160a01b039091168152602001610434565b61042a61ea6081565b610474610517366004614d73565b6111bc565b61046561052a366004614d73565b611203565b61046561053d366004614eb0565b611352565b6068546104aa90600160401b90046001600160401b031681565b6068546104aa90600160801b90046001600160401b031681565b6072546104aa906001600160401b031681565b610465610597366004614c75565b611b66565b6072546104aa90600160401b90046001600160401b031681565b6104656105c4366004614d73565b611eaf565b61042a6105d7366004614d73565b606d6020526000908152604090205481565b61044561214a565b6104656105ff366004614fdb565b612157565b61042a610612366004614ff8565b612181565b61046561062536600461506d565b6121c4565b61042a610638366004614d73565b60666020526000908152604090205481565b610465610658366004614fdb565b612534565b61046561066b366004614fdb565b6125b8565b610465612630565b610465610686366004614d73565b612644565b610465610699366004615144565b6128bc565b6069546104aa906001600160401b031681565b6106f46106bf3660046151e2565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610434565b6072546104aa90600160c01b90046001600160401b031681565b6104aa62093a8081565b610465610751366004615209565b61294b565b6033546001600160a01b03166104e8565b610465610775366004614d73565b6129c2565b61042a6129ed565b610465610790366004614d73565b612ad0565b6104656107a3366004614d73565b612b05565b61042a600c81565b60745461042a565b6070546104e8906001600160a01b031681565b6065546104aa9061010090046001600160401b031681565b6104aa6206978081565b606c546104aa90600160a81b90046001600160401b031681565b60655461081c90600160481b900461ffff1681565b60405161ffff9091168152602001610434565b61086a61083d366004614d73565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610434565b6065546104e890600160581b90046001600160a01b031681565b6104656108b7366004615226565b612c4b565b6104aa612c63565b6104656108d2366004615226565b612cb0565b6104656108e5366004614d73565b612d16565b6069546104e890600160401b90046001600160a01b031681565b606c546104e8906001600160a01b031681565b61046561092536600461525a565b612d97565b606c5461047490600160a01b900460ff1681565b6072546104aa90600160801b90046001600160401b031681565b610465613261565b61046561096e36600461534c565b61331d565b610465610981366004615144565b61338f565b6104aa6103e881565b6068546104aa90600160c01b90046001600160401b031681565b606b546104e8906001600160a01b031681565b6104656109ca366004615399565b6134d4565b6104656109dd366004614c75565b6137fc565b6104656109f0366004614fdb565b61391c565b610465610a03366004614fdb565b613994565b6073546104e8906001600160a01b031681565b61042a60745481565b610465610a323660046153dd565b613a0a565b6000806000610a44612c63565b90506001600160401b03881615610ae1576072546001600160401b039081169089161115610a8d5760405162461bcd60e51b8152600401610a8490615409565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610adb5760405162461bcd60e51b8152600401610a849061548c565b50610b4b565b6001600160401b0387166000908152606d6020526040902054915081610b195760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316876001600160401b03161115610b4b5760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316866001600160401b031611610b7c5760405162461bcd60e51b8152600401610a84906155ea565b6000610b8b8888888689611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051610bc0919061566d565b602060405180830381855afa158015610bdd573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c009190615689565b610c0a91906156b8565b9a9950505050505050505050565b606f8054610c25906156cc565b80601f0160208091040260200160405190810160405280929190818152602001828054610c51906156cc565b8015610c9e5780601f10610c7357610100808354040283529160200191610c9e565b820191906000526020600020905b815481529060010190602001808311610c8157829003601f168201915b505050505081565b610cae613a2c565b600080610cb9612c63565b90506001600160401b038a1615610d4d576072546001600160401b03908116908b161115610cf95760405162461bcd60e51b8152600401610a8490615409565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610d475760405162461bcd60e51b8152600401610a849061548c565b50610db7565b6001600160401b0389166000908152606d6020526040902054915081610d855760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316896001600160401b03161115610db75760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316886001600160401b031611610de85760405162461bcd60e51b8152600401610a84906155ea565b6000610df78a8a8a868b611016565b6069805467ffffffffffffffff19166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610e4557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610e8b57600080fd5b505af1158015610e9f573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610f1a5760405162461bcd60e51b8152600401610a8490615706565b6103e88161ffff16118015610f3457506104008161ffff16105b610fb95760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a4b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a401610a84565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b0380861660008181526067602052604080822054938816825290205460609291158061104857508115155b6110bc576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a84565b80611131576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a84565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b03828116600090815260716020526040812054909242926111f292600160801b9092048116911661575f565b6001600160401b0316111592915050565b6073546001600160a01b0316331461122d5760405162461bcd60e51b8152600401610a8490615706565b62093a806001600160401b03821611156112595760405162461bcd60e51b8152600401610a849061578a565b60655460ff166112fc576072546001600160401b03600160c01b9091048116908216106112fc5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a4b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a401610a84565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a19060200161100b565b60655460ff16156113755760405162461bcd60e51b8152600401610a84906157f5565b606954600160401b90046001600160a01b031633146113fc5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e6365720000000000006064820152608401610a84565b8051806114715760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e636520312062617463680000006064820152608401610a84565b6103e881106114ea576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e7920626174636865736064820152608401610a84565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561198a57600087828151811061153d5761153d61585d565b60200260200101519050600081606001516001600160401b031611156116f6578361156781615873565b94505060008160000151805190602001208260200151836060015160405160200161159493929190615899565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461163a5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d617463680000006064820152608401610a84565b81606001516001600160401b031682604001516001600160401b031610156116f05760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a401610a84565b5061187d565b6020810151158061177f5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916117399160040190815260200190565b6020604051808303816000875af1158015611758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177c9190615689565b15155b6117f15760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d7573742065786973740000000000006064820152608401610a84565b80515161ea601161187d5760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a401610a84565b856001600160401b031681604001516001600160401b0316101580156118b057504281604001516001600160401b031611155b6119225760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e67650000006064820152608401610a84565b805180516020918201208183015160408085015190516119499488949392913391016158bc565b604051602081830303815290604052805190602001209250848061196c90615873565b9550508060400151955050808061198290615900565b915050611521565b506068546001600160401b03600160c01b90910481169083161115611a0f5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b6064820152608401610a84565b606854600090611a2f90600160801b90046001600160401b031684615919565b611a42906001600160401b031687615941565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611b1790339030908490611afc9190615958565b606554600160581b90046001600160a01b0316929190613a86565b611b1f613af1565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b895760405162461bcd60e51b8152600401610a84906157f5565b6072546001600160401b038781166000908152606760205260409020600101544292611bc092600160c01b9091048116911661575f565b6001600160401b03161115611c495760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a401610a84565b6103e8611c568888615919565b6001600160401b031610611cd25760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e792062617463686573000000006064820152608401610a84565b611ce28888888888888888613b91565b611ceb86613e8e565b607254600160801b90046001600160401b0316600003611db3576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615611d5057607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d9657600080fd5b505af1158015611daa573d6000803e3d6000fd5b50505050611e64565b611dbb613af1565b607280546001600160401b0316906000611dd483615873565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611edc57506072546001600160401b03600160401b9091048116908216115b8015611ef757506072546001600160401b0390811690821611155b611f755760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a401610a84565b606a546001600160a01b0316331461201f57611f90816111bc565b61201f5760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a401610a84565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b1580156120dc57600080fd5b505af11580156120f0573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e846002015460405161213d91815260200190565b60405180910390a3505050565b606e8054610c25906156cc565b61215f613a2c565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b60008585805190602001208585856040516020016121a39594939291906158bc565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff16158080156121e45750600054600160ff909116105b806121fe5750303b1580156121fe575060005460ff166001145b6122615760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a84565b6000805460ff191660011790558015612284576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a8416179055607080549091169188169190911790556123016020860186614fdb565b607380546001600160a01b0319166001600160a01b03929092169190911790556123316060860160408701614fdb565b606980546001600160a01b0392909216600160401b02600160401b600160e01b031990921691909117905561236c60c0860160a08701614fdb565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa7113568490556123c960e0860160c08701614d73565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556124006040860160208701614d73565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561243c6080860160608701614d73565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b1990921691909117905561247860a0860160808701615209565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e6124a084826159bd565b50606f6124ad83826159bd565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124e3614074565b8015612529576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b0316331461255e5760405162461bcd60e51b8152600401610a8490615706565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161100b565b6073546001600160a01b031633146125e25760405162461bcd60e51b8152600401610a8490615706565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a19060200161100b565b612638613a2c565b61264260006140e4565b565b6033546001600160a01b031633146128b1576072546000906001600160401b03161561269557506072546001600160401b03908116600090815260716020526040902054600160401b9004166126a3565b506069546001600160401b03165b80826001600160401b0316116127215760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c7265616479207665726966696564000000006064820152608401610a84565b6068546001600160401b03600160401b90910481169083161180159061276357506001600160401b038083166000908152606760205260409020600101541615155b6127ee5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a401610a84565b6001600160401b03808316600090815260676020526040902060010154429161281c9162093a80911661575f565b6001600160401b031611156128af5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a401610a84565b505b6128b9614136565b50565b60655460ff16156128df5760405162461bcd60e51b8152600401610a84906157f5565b6128f08989898989898989896141a6565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1612529614136565b6073546001600160a01b031633146129755760405162461bcd60e51b8152600401610a8490615706565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061100b90831515815260200190565b6129ca613a2c565b6069805467ffffffffffffffff19166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a649190615689565b90506000612a70612c63565b6068546001600160401b03600160401b8204811691612aa091600160801b8204811691600160c01b900416615919565b612aaa919061575f565b612ab49190615919565b6001600160401b03169050612ac98183615a7c565b9250505090565b612ad8613a2c565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612b2f5760405162461bcd60e51b8152600401610a8490615706565b62093a806001600160401b0382161115612b5b5760405162461bcd60e51b8152600401610a849061578a565b60655460ff16612bf0576072546001600160401b03600160801b909104811690821610612bf05760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f776572006064820152608401610a84565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c759060200161100b565b612c53613a2c565b606f612c5f82826159bd565b5050565b6072546000906001600160401b031615612ca057506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612cda5760405162461bcd60e51b8152600401610a8490615706565b606e612ce682826159bd565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161100b9190614c33565b6073546001600160a01b03163314612d405760405162461bcd60e51b8152600401610a8490615706565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f9060200161100b565b60655460ff1615612dba5760405162461bcd60e51b8152600401610a84906157f5565b606c54600160a01b900460ff161515600114612de85760405162461bcd60e51b8152600401610a8490615a90565b805180612e4b5760405162461bcd60e51b815260206004820152603d6024820152600080516020615dac83398151915260448201527f3a204d75737420666f726365206174206c6561737420312062617463680000006064820152608401610a84565b6103e88110612ebc5760405162461bcd60e51b81526020600482015260436024820152600080516020615dac83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a401610a84565b6068546001600160401b03600160c01b8204811691612ee4918491600160801b900416615af9565b1115612f3e5760405162461bcd60e51b81526020600482015260356024820152600080516020615dac8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b6064820152608401610a84565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b8481101561316a576000868281518110612f8b57612f8b61585d565b602002602001015190508380612fa090615873565b945050600081600001518051906020012082602001518360400151604051602001612fcd93929190615899565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461306c5760405162461bcd60e51b81526020600482015260426024820152600080516020615dac83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a401610a84565b613077600188615941565b830361310c5742620697808360400151613091919061575f565b6001600160401b0316111561310c5760405162461bcd60e51b81526020600482015260476024820152600080516020615dac83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a401610a84565b815180516020918201208184015160405161312f938893929142913391016158bc565b604051602081830303815290604052805190602001209350858061315290615873565b9650505050808061316290615900565b915050612f6f565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166132835760405162461bcd60e51b8152600401610a8490615b11565b6073546001600160a01b031633146132ad5760405162461bcd60e51b8152600401610a8490615706565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156132fd57600080fd5b505af1158015613311573d6000803e3d6000fd5b50505050612642614821565b613325613a2c565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133b95760405162461bcd60e51b8152600401610a8490615b6e565b6133ca8989898989898989896141a6565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561341557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561345b57600080fd5b505af115801561346f573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff16156134f75760405162461bcd60e51b8152600401610a84906157f5565b606c54600160a01b900460ff1615156001146135255760405162461bcd60e51b8152600401610a8490615a90565b600061353060745490565b9050818111156135955760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b6064820152608401610a84565b61ea608351106136055760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b6064820152608401610a84565b60655461362490600160581b90046001600160a01b0316333084613a86565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa15801561366e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136929190615689565b60688054919250600160c01b9091046001600160401b03169060186136b683615873565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016136f793929190615899565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361379b57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26137f6565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516137ed93929190615bcb565b60405180910390a25b50505050565b606a546001600160a01b031633146138265760405162461bcd60e51b8152600401610a8490615b6e565b6138368888888888888888613b91565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561388157607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156138c757600080fd5b505af11580156138db573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e9d565b6073546001600160a01b031633146139465760405162461bcd60e51b8152600401610a8490615706565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca9060200161100b565b61399c613a2c565b6001600160a01b038116613a015760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a84565b6128b9816140e4565b613a12613a2c565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b031633146126425760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a84565b6040516001600160a01b03808516602483015283166044820152606481018290526137f69085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614878565b6072546001600160401b03600160401b820481169116111561264257607254600090613b2e90600160401b90046001600160401b0316600161575f565b9050613b39816111bc565b156128b957607254600090600290613b5b9084906001600160401b0316615919565b613b659190615bfe565b613b6f908361575f565b9050613b7a816111bc565b15613b8857612c5f81611eaf565b612c5f82611eaf565b600080613b9c612c63565b90506001600160401b038a1615613c30576072546001600160401b03908116908b161115613bdc5760405162461bcd60e51b8152600401610a8490615409565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c2a5760405162461bcd60e51b8152600401610a849061548c565b50613c9a565b6001600160401b0389166000908152606d6020526040902054915081613c685760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316896001600160401b03161115613c9a5760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316886001600160401b031611613ccb5760405162461bcd60e51b8152600401610a84906155ea565b6000613cda8a8a8a868b611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051613d0f919061566d565b602060405180830381855afa158015613d2c573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613d4f9190615689565b613d5991906156b8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613d9d918b918b918b9190600401615c24565b602060405180830381865afa158015613dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dde9190615c9e565b613e3d5760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20494e5660448201526920a624a22fa82927a7a360b11b6064820152608401610a84565b613e8033613e4b858d615919565b6001600160401b0316613e5c6129ed565b613e669190615958565b606554600160581b90046001600160a01b0316919061494f565b505050505050505050505050565b6000613e98612c63565b905081600080613ea88484615919565b6001600160401b031690505b836001600160401b0316836001600160401b031614613f5a576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613f04911642615941565b1115613f3f576001810154613f2990600160401b90046001600160401b031686615919565b613f3c906001600160401b031684615af9565b92505b60010154600160401b90046001600160401b03169250613eb4565b6000613f668383615941565b905082811015613fe0576000613f7c8285615941565b9050600c8111613f8c5780613f8f565b600c5b9050613f9c816003615958565b613fa790600a615d9f565b606554613fc0908390600160481b900461ffff16615d9f565b607454613fcd9190615958565b613fd79190615a7c565b6074555061406c565b6000613fec8483615941565b9050600c8111613ffc5780613fff565b600c5b9050600061400e826003615958565b61401990600a615d9f565b606554614032908490600160481b900461ffff16615d9f565b60745461403f9190615958565b6140499190615a7c565b90508060745460745461405c9190615958565b6140669190615a7c565b60745550505b505050505050565b600054610100900460ff166140df5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a84565b612642335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561418657600080fd5b505af115801561419a573d6000803e3d6000fd5b5050505061264261497f565b60006001600160401b038a1615614321576072546001600160401b03908116908b1611156142655760405162461bcd60e51b815260206004820152606c6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c401610a84565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b909204161461431b5760405162461bcd60e51b81526020600482015260606024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a401610a84565b50614475565b506001600160401b0387166000908152606d6020526040902054806143c25760405162461bcd60e51b81526020600482015260576024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a401610a84565b6069546001600160401b0390811690891611156144755760405162461bcd60e51b81526020600482015260716024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c401610a84565b6072546001600160401b03908116908a16118015906144a55750896001600160401b0316896001600160401b0316115b80156144c657506072546001600160401b03600160401b9091048116908a16115b61453e5760405162461bcd60e51b815260206004820152604f6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a401610a84565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146145fe5760405162461bcd60e51b815260206004820152606a6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c401610a84565b600061460d898989858a611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051614642919061566d565b602060405180830381855afa15801561465f573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906146829190615689565b61468c91906156b8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916146d0918a918a918a9190600401615c24565b602060405180830381865afa1580156146ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147119190615c9e565b6147715760405162461bcd60e51b815260206004820152603e6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20494e56414c49445f50524f4f4600006064820152608401610a84565b6001600160401b038b16600090815260716020526040902060020154879003613e805760405162461bcd60e51b81526020600482015260626024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c401610a84565b60655460ff166148435760405162461bcd60e51b8152600401610a8490615b11565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006148cd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166149da9092919063ffffffff16565b80519091501561494a57808060200190518101906148eb9190615c9e565b61494a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a84565b505050565b6040516001600160a01b03831660248201526044810182905261494a90849063a9059cbb60e01b90606401613aba565b60655460ff16156149a25760405162461bcd60e51b8152600401610a84906157f5565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60606149e984846000856149f1565b949350505050565b606082471015614a525760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a84565b600080866001600160a01b03168587604051614a6e919061566d565b60006040518083038185875af1925050503d8060008114614aab576040519150601f19603f3d011682016040523d82523d6000602084013e614ab0565b606091505b5091509150614ac187838387614acc565b979650505050505050565b60608315614b3b578251600003614b34576001600160a01b0385163b614b345760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a84565b50816149e9565b6149e98383815115614b505781518083602001fd5b8060405162461bcd60e51b8152600401610a849190614c33565b80356001600160401b0381168114614b8157600080fd5b919050565b600080600080600060a08688031215614b9e57600080fd5b614ba786614b6a565b9450614bb560208701614b6a565b9350614bc360408701614b6a565b94979396509394606081013594506080013592915050565b60005b83811015614bf6578181015183820152602001614bde565b838111156137f65750506000910152565b60008151808452614c1f816020860160208601614bdb565b601f01601f19169290920160200192915050565b602081526000614c466020830184614c07565b9392505050565b8060408101831015614c5e57600080fd5b92915050565b8060808101831015614c5e57600080fd5b6000806000806000806000806101a0898b031215614c9257600080fd5b614c9b89614b6a565b9750614ca960208a01614b6a565b9650614cb760408a01614b6a565b95506060890135945060808901359350614cd48a60a08b01614c4d565b9250614ce38a60e08b01614c64565b9150614cf38a6101608b01614c4d565b90509295985092959890939650565b600060208284031215614d1457600080fd5b813561ffff81168114614c4657600080fd5b600080600080600060a08688031215614d3e57600080fd5b614d4786614b6a565b9450614d5560208701614b6a565b94979496505050506040830135926060810135926080909101359150565b600060208284031215614d8557600080fd5b614c4682614b6a565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614dc657614dc6614d8e565b60405290565b604051606081016001600160401b0381118282101715614dc657614dc6614d8e565b604051601f8201601f191681016001600160401b0381118282101715614e1657614e16614d8e565b604052919050565b60006001600160401b03821115614e3757614e37614d8e565b5060051b60200190565b600082601f830112614e5257600080fd5b81356001600160401b03811115614e6b57614e6b614d8e565b614e7e601f8201601f1916602001614dee565b818152846020838601011115614e9357600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614ec357600080fd5b82356001600160401b0380821115614eda57600080fd5b818501915085601f830112614eee57600080fd5b8135614f01614efc82614e1e565b614dee565b81815260059190911b83018401908481019088831115614f2057600080fd5b8585015b83811015614fb957803585811115614f3c5760008081fd5b86016080818c03601f1901811315614f545760008081fd5b614f5c614da4565b8983013588811115614f6e5760008081fd5b614f7c8e8c83870101614e41565b8252506040808401358b8301526060614f96818601614b6a565b82840152614fa5848601614b6a565b908301525085525050918601918601614f24565b5098975050505050505050565b6001600160a01b03811681146128b957600080fd5b600060208284031215614fed57600080fd5b8135614c4681614fc6565b600080600080600060a0868803121561501057600080fd5b8535945060208601356001600160401b0381111561502d57600080fd5b61503988828901614e41565b9450506040860135925061504f60608701614b6a565b9150608086013561505f81614fc6565b809150509295509295909350565b600080600080600080600080888a036101c081121561508b57600080fd5b893561509681614fc6565b985060208a01356150a681614fc6565b975060408a01356150b681614fc6565b965060608a01356150c681614fc6565b955060e0607f19820112156150da57600080fd5b5060808901935061016089013592506101808901356001600160401b038082111561510457600080fd5b6151108c838d01614e41565b93506101a08b013591508082111561512757600080fd5b506151348b828c01614e41565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c03121561516357600080fd5b61516c8a614b6a565b985061517a60208b01614b6a565b975061518860408b01614b6a565b965061519660608b01614b6a565b955060808a0135945060a08a013593506151b38b60c08c01614c4d565b92506151c38b6101008c01614c64565b91506151d38b6101808c01614c4d565b90509295985092959850929598565b6000602082840312156151f457600080fd5b5035919050565b80151581146128b957600080fd5b60006020828403121561521b57600080fd5b8135614c46816151fb565b60006020828403121561523857600080fd5b81356001600160401b0381111561524e57600080fd5b6149e984828501614e41565b6000602080838503121561526d57600080fd5b82356001600160401b038082111561528457600080fd5b818501915085601f83011261529857600080fd5b81356152a6614efc82614e1e565b81815260059190911b830184019084810190888311156152c557600080fd5b8585015b83811015614fb9578035858111156152e15760008081fd5b86016060818c03601f19018113156152f95760008081fd5b615301614dcc565b89830135888111156153135760008081fd5b6153218e8c83870101614e41565b8252506040808401358b830152615339838501614b6a565b90820152855250509186019186016152c9565b6000806000806080858703121561536257600080fd5b61536b85614b6a565b93506020850135925061538060408601614b6a565b915061538e60608601614b6a565b905092959194509250565b600080604083850312156153ac57600080fd5b82356001600160401b038111156153c257600080fd5b6153ce85828601614e41565b95602094909401359450505050565b600080604083850312156153f057600080fd5b8235915061540060208401614b6a565b90509250929050565b60208082526058908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2070656e60408201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560608201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608082015260a00190565b6020808252604c908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760608201526b040e6e8c2e8ca40c4c2e8c6d60a31b608082015260a00190565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786060820152621a5cdd60ea1b608082015260a00190565b6020808252605d908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060608201527f7468616e2063757272656e744c61737456657269666965644261746368000000608082015260a00190565b60208082526057908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2066696e60408201527f616c4e65774261746368206d75737420626520626967676572207468616e206360608201527f757272656e744c61737456657269666965644261746368000000000000000000608082015260a00190565b6000825161567f818460208701614bdb565b9190910192915050565b60006020828403121561569b57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826156c7576156c76156a2565b500690565b600181811c908216806156e057607f821691505b60208210810361570057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561578157615781615749565b01949350505050565b60208082526045908201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361588f5761588f615749565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b60006001820161591257615912615749565b5060010190565b60006001600160401b038381169083168181101561593957615939615749565b039392505050565b60008282101561595357615953615749565b500390565b600081600019048311821515161561597257615972615749565b500290565b601f82111561494a57600081815260208120601f850160051c8101602086101561599e5750805b601f850160051c820191505b8181101561406c578281556001016159aa565b81516001600160401b038111156159d6576159d6614d8e565b6159ea816159e484546156cc565b84615977565b602080601f831160018114615a1f5760008415615a075750858301515b600019600386901b1c1916600185901b17855561406c565b600085815260208120601f198616915b82811015615a4e57888601518255948401946001909101908401615a2f565b5085821015615a6c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615a8b57615a8b6156a2565b500490565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b60008219821115615b0c57615b0c615749565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b0383166020820152606060408201819052600090615bf590830184614c07565b95945050505050565b60006001600160401b0380841680615c1857615c186156a2565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615c5c57848483379084018281529284019290600101615c3c565b5050828760c0870137610100850181815286935091505b6001811015615c92578251825260209283019290910190600101615c73565b50505095945050505050565b600060208284031215615cb057600080fd5b8151614c46816151fb565b600181815b80851115615cf6578160001904821115615cdc57615cdc615749565b80851615615ce957918102915b93841c9390800290615cc0565b509250929050565b600082615d0d57506001614c5e565b81615d1a57506000614c5e565b8160018114615d305760028114615d3a57615d56565b6001915050614c5e565b60ff841115615d4b57615d4b615749565b50506001821b614c5e565b5060208310610133831016604e8410600b8410161715615d79575081810a614c5e565b615d838383615cbb565b8060001904821115615d9757615d97615749565b029392505050565b6000614c468383615cfe56fe506f6c79676f6e5a4b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a4b45564d3a3a70726f76654e6f6e44657465726d696e6973a26469706673582212201e5160e5b35ba013638c7e982194345ea29364dacf96b8b35832f82a7d7d74b864736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50615e2180620000216000396000f3fe608060405234801561001057600080fd5b50600436106104125760003560e01c806396dc3d3911610220578063cfa8ed4711610130578063e7a7ed02116100b8578063f14916d611610087578063f14916d6146109e2578063f2fde38b146109f5578063f851a44014610a08578063f8b823e414610a1b578063fe16564f14610a2457600080fd5b8063e7a7ed021461098f578063e8bf92ed146109a9578063eaeb077b146109bc578063edc41121146109cf57600080fd5b8063d939b315116100ff578063d939b3151461093e578063dbc1697614610958578063e0d1744114610960578063e11f3f1814610973578063e217cfd61461098657600080fd5b8063cfa8ed47146108ea578063d02103ca14610904578063d8d1091b14610917578063d8f54db01461092a57600080fd5b8063ab9fc5ef116101b3578063b6b0b09711610182578063b6b0b0971461088f578063c0cad302146108a9578063c0ed84e0146108bc578063c89e42df146108c4578063cf136306146108d757600080fd5b8063ab9fc5ef146107e3578063adc879e9146107ed578063afd23cbe14610807578063b4d63f581461082f57600080fd5b80639eb831b9116101ef5780639eb831b9146107a85780639f0d039d146107b0578063a3c573eb146107b8578063aa58bad6146107cb57600080fd5b806396dc3d391461076757806399f5634e1461077a5780639b796760146107825780639c9f3dfe1461079557600080fd5b80634a910e6a11610326578063715018a6116102ae578063837a47381161027d578063837a4738146106b1578063841b24d71461071f5780638b48931e146107395780638c4a0af7146107435780638da5cb5b1461075657600080fd5b8063715018a6146106705780637215541a1461067857806375c508b31461068b5780637fcb36531461069e57600080fd5b8063574f649e116102f5578063574f649e1461060457806360943d6a146106175780636b8616ce1461062a5780636ff512cc1461064a578063704b6c021461065d57600080fd5b80634a910e6a146105b65780635392c5e0146105c9578063542028d5146105e95780635437988d146105f157600080fd5b80632d0889d3116103a9578063423fa85611610378578063423fa85614610542578063456052671461055c578063458c0477146105765780634834a343146105895780634a1a89a71461059c57600080fd5b80632d0889d314610500578063383b3be814610509578063394218e91461051c5780633c1582671461052f57600080fd5b80631816b7e5116103e55780631816b7e51461048457806319d8ac6114610497578063220d7899146104c257806329878983146104d557600080fd5b80630eaa86ea14610417578063107bf28c1461043d57806310a01a721461045257806315064c9614610467575b600080fd5b61042a610425366004614b86565b610a37565b6040519081526020015b60405180910390f35b610445610c18565b6040516104349190614c33565b610465610460366004614c75565b610ca6565b005b6065546104749060ff1681565b6040519015158152602001610434565b610465610492366004614d02565b610ef0565b6068546104aa906001600160401b031681565b6040516001600160401b039091168152602001610434565b6104456104d0366004614d26565b611016565b606a546104e8906001600160a01b031681565b6040516001600160a01b039091168152602001610434565b61042a61ea6081565b610474610517366004614d73565b6111bc565b61046561052a366004614d73565b611203565b61046561053d366004614eb0565b611352565b6068546104aa90600160401b90046001600160401b031681565b6068546104aa90600160801b90046001600160401b031681565b6072546104aa906001600160401b031681565b610465610597366004614c75565b611b66565b6072546104aa90600160401b90046001600160401b031681565b6104656105c4366004614d73565b611eaf565b61042a6105d7366004614d73565b606d6020526000908152604090205481565b61044561214a565b6104656105ff366004614fdb565b612157565b61042a610612366004614ff8565b612181565b61046561062536600461506d565b6121c4565b61042a610638366004614d73565b60666020526000908152604090205481565b610465610658366004614fdb565b612534565b61046561066b366004614fdb565b6125b8565b610465612630565b610465610686366004614d73565b612644565b610465610699366004615144565b6128bc565b6069546104aa906001600160401b031681565b6106f46106bf3660046151e2565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610434565b6072546104aa90600160c01b90046001600160401b031681565b6104aa62093a8081565b610465610751366004615209565b61294b565b6033546001600160a01b03166104e8565b610465610775366004614d73565b6129c2565b61042a6129ed565b610465610790366004614d73565b612ad0565b6104656107a3366004614d73565b612b05565b61042a600c81565b60745461042a565b6070546104e8906001600160a01b031681565b6065546104aa9061010090046001600160401b031681565b6104aa6206978081565b606c546104aa90600160a81b90046001600160401b031681565b60655461081c90600160481b900461ffff1681565b60405161ffff9091168152602001610434565b61086a61083d366004614d73565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610434565b6065546104e890600160581b90046001600160a01b031681565b6104656108b7366004615226565b612c4b565b6104aa612c63565b6104656108d2366004615226565b612cb0565b6104656108e5366004614d73565b612d16565b6069546104e890600160401b90046001600160a01b031681565b606c546104e8906001600160a01b031681565b61046561092536600461525a565b612d97565b606c5461047490600160a01b900460ff1681565b6072546104aa90600160801b90046001600160401b031681565b610465613261565b61046561096e36600461534c565b61331d565b610465610981366004615144565b61338f565b6104aa6103e881565b6068546104aa90600160c01b90046001600160401b031681565b606b546104e8906001600160a01b031681565b6104656109ca366004615399565b6134d4565b6104656109dd366004614c75565b6137fc565b6104656109f0366004614fdb565b61391c565b610465610a03366004614fdb565b613994565b6073546104e8906001600160a01b031681565b61042a60745481565b610465610a323660046153dd565b613a0a565b6000806000610a44612c63565b90506001600160401b03881615610ae1576072546001600160401b039081169089161115610a8d5760405162461bcd60e51b8152600401610a8490615409565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610adb5760405162461bcd60e51b8152600401610a849061548c565b50610b4b565b6001600160401b0387166000908152606d6020526040902054915081610b195760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316876001600160401b03161115610b4b5760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316866001600160401b031611610b7c5760405162461bcd60e51b8152600401610a84906155ea565b6000610b8b8888888689611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051610bc0919061566d565b602060405180830381855afa158015610bdd573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c009190615689565b610c0a91906156b8565b9a9950505050505050505050565b606f8054610c25906156cc565b80601f0160208091040260200160405190810160405280929190818152602001828054610c51906156cc565b8015610c9e5780601f10610c7357610100808354040283529160200191610c9e565b820191906000526020600020905b815481529060010190602001808311610c8157829003601f168201915b505050505081565b610cae613a2c565b600080610cb9612c63565b90506001600160401b038a1615610d4d576072546001600160401b03908116908b161115610cf95760405162461bcd60e51b8152600401610a8490615409565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610d475760405162461bcd60e51b8152600401610a849061548c565b50610db7565b6001600160401b0389166000908152606d6020526040902054915081610d855760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316896001600160401b03161115610db75760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316886001600160401b031611610de85760405162461bcd60e51b8152600401610a84906155ea565b6000610df78a8a8a868b611016565b6069805467ffffffffffffffff19166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610e4557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610e8b57600080fd5b505af1158015610e9f573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610f1a5760405162461bcd60e51b8152600401610a8490615706565b6103e88161ffff16118015610f3457506104008161ffff16105b610fb95760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a4b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a401610a84565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b0380861660008181526067602052604080822054938816825290205460609291158061104857508115155b6110bc576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a84565b80611131576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a84565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b03828116600090815260716020526040812054909242926111f292600160801b9092048116911661575f565b6001600160401b0316111592915050565b6073546001600160a01b0316331461122d5760405162461bcd60e51b8152600401610a8490615706565b62093a806001600160401b03821611156112595760405162461bcd60e51b8152600401610a849061578a565b60655460ff166112fc576072546001600160401b03600160c01b9091048116908216106112fc5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a4b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a401610a84565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a19060200161100b565b60655460ff16156113755760405162461bcd60e51b8152600401610a84906157f5565b606954600160401b90046001600160a01b031633146113fc5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e6365720000000000006064820152608401610a84565b8051806114715760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e636520312062617463680000006064820152608401610a84565b6103e881106114ea576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e7920626174636865736064820152608401610a84565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561198a57600087828151811061153d5761153d61585d565b60200260200101519050600081606001516001600160401b031611156116f6578361156781615873565b94505060008160000151805190602001208260200151836060015160405160200161159493929190615899565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461163a5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d617463680000006064820152608401610a84565b81606001516001600160401b031682604001516001600160401b031610156116f05760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a401610a84565b5061187d565b6020810151158061177f5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916117399160040190815260200190565b6020604051808303816000875af1158015611758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177c9190615689565b15155b6117f15760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d7573742065786973740000000000006064820152608401610a84565b80515161ea601161187d5760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a401610a84565b856001600160401b031681604001516001600160401b0316101580156118b057504281604001516001600160401b031611155b6119225760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e67650000006064820152608401610a84565b805180516020918201208183015160408085015190516119499488949392913391016158bc565b604051602081830303815290604052805190602001209250848061196c90615873565b9550508060400151955050808061198290615900565b915050611521565b506068546001600160401b03600160c01b90910481169083161115611a0f5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b6064820152608401610a84565b606854600090611a2f90600160801b90046001600160401b031684615919565b611a42906001600160401b031687615941565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611b1790339030908490611afc9190615958565b606554600160581b90046001600160a01b0316929190613a86565b611b1f613af1565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b895760405162461bcd60e51b8152600401610a84906157f5565b6072546001600160401b038781166000908152606760205260409020600101544292611bc092600160c01b9091048116911661575f565b6001600160401b03161115611c495760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a401610a84565b6103e8611c568888615919565b6001600160401b031610611cd25760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e792062617463686573000000006064820152608401610a84565b611ce28888888888888888613b91565b611ceb86613e8e565b607254600160801b90046001600160401b0316600003611db3576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615611d5057607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d9657600080fd5b505af1158015611daa573d6000803e3d6000fd5b50505050611e64565b611dbb613af1565b607280546001600160401b0316906000611dd483615873565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611edc57506072546001600160401b03600160401b9091048116908216115b8015611ef757506072546001600160401b0390811690821611155b611f755760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a401610a84565b606a546001600160a01b0316331461201f57611f90816111bc565b61201f5760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a401610a84565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b1580156120dc57600080fd5b505af11580156120f0573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e846002015460405161213d91815260200190565b60405180910390a3505050565b606e8054610c25906156cc565b61215f613a2c565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b60008585805190602001208585856040516020016121a39594939291906158bc565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff16158080156121e45750600054600160ff909116105b806121fe5750303b1580156121fe575060005460ff166001145b6122615760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a84565b6000805460ff191660011790558015612284576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a8416179055607080549091169188169190911790556123016020860186614fdb565b607380546001600160a01b0319166001600160a01b03929092169190911790556123316060860160408701614fdb565b606980546001600160a01b0392909216600160401b02600160401b600160e01b031990921691909117905561236c60c0860160a08701614fdb565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa7113568490556123c960e0860160c08701614d73565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556124006040860160208701614d73565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561243c6080860160608701614d73565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b1990921691909117905561247860a0860160808701615209565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e6124a084826159bd565b50606f6124ad83826159bd565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124e3614074565b8015612529576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b0316331461255e5760405162461bcd60e51b8152600401610a8490615706565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161100b565b6073546001600160a01b031633146125e25760405162461bcd60e51b8152600401610a8490615706565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a19060200161100b565b612638613a2c565b61264260006140e4565b565b6033546001600160a01b031633146128b1576072546000906001600160401b03161561269557506072546001600160401b03908116600090815260716020526040902054600160401b9004166126a3565b506069546001600160401b03165b80826001600160401b0316116127215760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c7265616479207665726966696564000000006064820152608401610a84565b6068546001600160401b03600160401b90910481169083161180159061276357506001600160401b038083166000908152606760205260409020600101541615155b6127ee5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a401610a84565b6001600160401b03808316600090815260676020526040902060010154429161281c9162093a80911661575f565b6001600160401b031611156128af5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a401610a84565b505b6128b9614136565b50565b60655460ff16156128df5760405162461bcd60e51b8152600401610a84906157f5565b6128f08989898989898989896141a6565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1612529614136565b6073546001600160a01b031633146129755760405162461bcd60e51b8152600401610a8490615706565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061100b90831515815260200190565b6129ca613a2c565b6069805467ffffffffffffffff19166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a649190615689565b90506000612a70612c63565b6068546001600160401b03600160401b8204811691612aa091600160801b8204811691600160c01b900416615919565b612aaa919061575f565b612ab49190615919565b6001600160401b03169050612ac98183615a7c565b9250505090565b612ad8613a2c565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612b2f5760405162461bcd60e51b8152600401610a8490615706565b62093a806001600160401b0382161115612b5b5760405162461bcd60e51b8152600401610a849061578a565b60655460ff16612bf0576072546001600160401b03600160801b909104811690821610612bf05760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f776572006064820152608401610a84565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c759060200161100b565b612c53613a2c565b606f612c5f82826159bd565b5050565b6072546000906001600160401b031615612ca057506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612cda5760405162461bcd60e51b8152600401610a8490615706565b606e612ce682826159bd565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161100b9190614c33565b6073546001600160a01b03163314612d405760405162461bcd60e51b8152600401610a8490615706565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f9060200161100b565b60655460ff1615612dba5760405162461bcd60e51b8152600401610a84906157f5565b606c54600160a01b900460ff161515600114612de85760405162461bcd60e51b8152600401610a8490615a90565b805180612e4b5760405162461bcd60e51b815260206004820152603d6024820152600080516020615dac83398151915260448201527f3a204d75737420666f726365206174206c6561737420312062617463680000006064820152608401610a84565b6103e88110612ebc5760405162461bcd60e51b81526020600482015260436024820152600080516020615dac83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a401610a84565b6068546001600160401b03600160c01b8204811691612ee4918491600160801b900416615af9565b1115612f3e5760405162461bcd60e51b81526020600482015260356024820152600080516020615dac8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b6064820152608401610a84565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b8481101561316a576000868281518110612f8b57612f8b61585d565b602002602001015190508380612fa090615873565b945050600081600001518051906020012082602001518360400151604051602001612fcd93929190615899565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461306c5760405162461bcd60e51b81526020600482015260426024820152600080516020615dac83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a401610a84565b613077600188615941565b830361310c5742620697808360400151613091919061575f565b6001600160401b0316111561310c5760405162461bcd60e51b81526020600482015260476024820152600080516020615dac83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a401610a84565b815180516020918201208184015160405161312f938893929142913391016158bc565b604051602081830303815290604052805190602001209350858061315290615873565b9650505050808061316290615900565b915050612f6f565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166132835760405162461bcd60e51b8152600401610a8490615b11565b6073546001600160a01b031633146132ad5760405162461bcd60e51b8152600401610a8490615706565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156132fd57600080fd5b505af1158015613311573d6000803e3d6000fd5b50505050612642614821565b613325613a2c565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133b95760405162461bcd60e51b8152600401610a8490615b6e565b6133ca8989898989898989896141a6565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561341557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561345b57600080fd5b505af115801561346f573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff16156134f75760405162461bcd60e51b8152600401610a84906157f5565b606c54600160a01b900460ff1615156001146135255760405162461bcd60e51b8152600401610a8490615a90565b600061353060745490565b9050818111156135955760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b6064820152608401610a84565b61ea608351106136055760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b6064820152608401610a84565b60655461362490600160581b90046001600160a01b0316333084613a86565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa15801561366e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136929190615689565b60688054919250600160c01b9091046001600160401b03169060186136b683615873565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016136f793929190615899565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361379b57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26137f6565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516137ed93929190615bcb565b60405180910390a25b50505050565b606a546001600160a01b031633146138265760405162461bcd60e51b8152600401610a8490615b6e565b6138368888888888888888613b91565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561388157607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156138c757600080fd5b505af11580156138db573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e9d565b6073546001600160a01b031633146139465760405162461bcd60e51b8152600401610a8490615706565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca9060200161100b565b61399c613a2c565b6001600160a01b038116613a015760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a84565b6128b9816140e4565b613a12613a2c565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b031633146126425760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a84565b6040516001600160a01b03808516602483015283166044820152606481018290526137f69085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614878565b6072546001600160401b03600160401b820481169116111561264257607254600090613b2e90600160401b90046001600160401b0316600161575f565b9050613b39816111bc565b156128b957607254600090600290613b5b9084906001600160401b0316615919565b613b659190615bfe565b613b6f908361575f565b9050613b7a816111bc565b15613b8857612c5f81611eaf565b612c5f82611eaf565b600080613b9c612c63565b90506001600160401b038a1615613c30576072546001600160401b03908116908b161115613bdc5760405162461bcd60e51b8152600401610a8490615409565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c2a5760405162461bcd60e51b8152600401610a849061548c565b50613c9a565b6001600160401b0389166000908152606d6020526040902054915081613c685760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316896001600160401b03161115613c9a5760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316886001600160401b031611613ccb5760405162461bcd60e51b8152600401610a84906155ea565b6000613cda8a8a8a868b611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051613d0f919061566d565b602060405180830381855afa158015613d2c573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613d4f9190615689565b613d5991906156b8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613d9d918b918b918b9190600401615c24565b602060405180830381865afa158015613dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dde9190615c9e565b613e3d5760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20494e5660448201526920a624a22fa82927a7a360b11b6064820152608401610a84565b613e8033613e4b858d615919565b6001600160401b0316613e5c6129ed565b613e669190615958565b606554600160581b90046001600160a01b0316919061494f565b505050505050505050505050565b6000613e98612c63565b905081600080613ea88484615919565b6001600160401b031690505b836001600160401b0316836001600160401b031614613f5a576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613f04911642615941565b1115613f3f576001810154613f2990600160401b90046001600160401b031686615919565b613f3c906001600160401b031684615af9565b92505b60010154600160401b90046001600160401b03169250613eb4565b6000613f668383615941565b905082811015613fe0576000613f7c8285615941565b9050600c8111613f8c5780613f8f565b600c5b9050613f9c816003615958565b613fa790600a615d9f565b606554613fc0908390600160481b900461ffff16615d9f565b607454613fcd9190615958565b613fd79190615a7c565b6074555061406c565b6000613fec8483615941565b9050600c8111613ffc5780613fff565b600c5b9050600061400e826003615958565b61401990600a615d9f565b606554614032908490600160481b900461ffff16615d9f565b60745461403f9190615958565b6140499190615a7c565b90508060745460745461405c9190615958565b6140669190615a7c565b60745550505b505050505050565b600054610100900460ff166140df5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a84565b612642335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561418657600080fd5b505af115801561419a573d6000803e3d6000fd5b5050505061264261497f565b60006001600160401b038a1615614321576072546001600160401b03908116908b1611156142655760405162461bcd60e51b815260206004820152606c6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c401610a84565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b909204161461431b5760405162461bcd60e51b81526020600482015260606024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a401610a84565b50614475565b506001600160401b0387166000908152606d6020526040902054806143c25760405162461bcd60e51b81526020600482015260576024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a401610a84565b6069546001600160401b0390811690891611156144755760405162461bcd60e51b81526020600482015260716024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c401610a84565b6072546001600160401b03908116908a16118015906144a55750896001600160401b0316896001600160401b0316115b80156144c657506072546001600160401b03600160401b9091048116908a16115b61453e5760405162461bcd60e51b815260206004820152604f6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a401610a84565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146145fe5760405162461bcd60e51b815260206004820152606a6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c401610a84565b600061460d898989858a611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051614642919061566d565b602060405180830381855afa15801561465f573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906146829190615689565b61468c91906156b8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916146d0918a918a918a9190600401615c24565b602060405180830381865afa1580156146ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147119190615c9e565b6147715760405162461bcd60e51b815260206004820152603e6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20494e56414c49445f50524f4f4600006064820152608401610a84565b6001600160401b038b16600090815260716020526040902060020154879003613e805760405162461bcd60e51b81526020600482015260626024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c401610a84565b60655460ff166148435760405162461bcd60e51b8152600401610a8490615b11565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006148cd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166149da9092919063ffffffff16565b80519091501561494a57808060200190518101906148eb9190615c9e565b61494a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a84565b505050565b6040516001600160a01b03831660248201526044810182905261494a90849063a9059cbb60e01b90606401613aba565b60655460ff16156149a25760405162461bcd60e51b8152600401610a84906157f5565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60606149e984846000856149f1565b949350505050565b606082471015614a525760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a84565b600080866001600160a01b03168587604051614a6e919061566d565b60006040518083038185875af1925050503d8060008114614aab576040519150601f19603f3d011682016040523d82523d6000602084013e614ab0565b606091505b5091509150614ac187838387614acc565b979650505050505050565b60608315614b3b578251600003614b34576001600160a01b0385163b614b345760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a84565b50816149e9565b6149e98383815115614b505781518083602001fd5b8060405162461bcd60e51b8152600401610a849190614c33565b80356001600160401b0381168114614b8157600080fd5b919050565b600080600080600060a08688031215614b9e57600080fd5b614ba786614b6a565b9450614bb560208701614b6a565b9350614bc360408701614b6a565b94979396509394606081013594506080013592915050565b60005b83811015614bf6578181015183820152602001614bde565b838111156137f65750506000910152565b60008151808452614c1f816020860160208601614bdb565b601f01601f19169290920160200192915050565b602081526000614c466020830184614c07565b9392505050565b8060408101831015614c5e57600080fd5b92915050565b8060808101831015614c5e57600080fd5b6000806000806000806000806101a0898b031215614c9257600080fd5b614c9b89614b6a565b9750614ca960208a01614b6a565b9650614cb760408a01614b6a565b95506060890135945060808901359350614cd48a60a08b01614c4d565b9250614ce38a60e08b01614c64565b9150614cf38a6101608b01614c4d565b90509295985092959890939650565b600060208284031215614d1457600080fd5b813561ffff81168114614c4657600080fd5b600080600080600060a08688031215614d3e57600080fd5b614d4786614b6a565b9450614d5560208701614b6a565b94979496505050506040830135926060810135926080909101359150565b600060208284031215614d8557600080fd5b614c4682614b6a565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614dc657614dc6614d8e565b60405290565b604051606081016001600160401b0381118282101715614dc657614dc6614d8e565b604051601f8201601f191681016001600160401b0381118282101715614e1657614e16614d8e565b604052919050565b60006001600160401b03821115614e3757614e37614d8e565b5060051b60200190565b600082601f830112614e5257600080fd5b81356001600160401b03811115614e6b57614e6b614d8e565b614e7e601f8201601f1916602001614dee565b818152846020838601011115614e9357600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614ec357600080fd5b82356001600160401b0380821115614eda57600080fd5b818501915085601f830112614eee57600080fd5b8135614f01614efc82614e1e565b614dee565b81815260059190911b83018401908481019088831115614f2057600080fd5b8585015b83811015614fb957803585811115614f3c5760008081fd5b86016080818c03601f1901811315614f545760008081fd5b614f5c614da4565b8983013588811115614f6e5760008081fd5b614f7c8e8c83870101614e41565b8252506040808401358b8301526060614f96818601614b6a565b82840152614fa5848601614b6a565b908301525085525050918601918601614f24565b5098975050505050505050565b6001600160a01b03811681146128b957600080fd5b600060208284031215614fed57600080fd5b8135614c4681614fc6565b600080600080600060a0868803121561501057600080fd5b8535945060208601356001600160401b0381111561502d57600080fd5b61503988828901614e41565b9450506040860135925061504f60608701614b6a565b9150608086013561505f81614fc6565b809150509295509295909350565b600080600080600080600080888a036101c081121561508b57600080fd5b893561509681614fc6565b985060208a01356150a681614fc6565b975060408a01356150b681614fc6565b965060608a01356150c681614fc6565b955060e0607f19820112156150da57600080fd5b5060808901935061016089013592506101808901356001600160401b038082111561510457600080fd5b6151108c838d01614e41565b93506101a08b013591508082111561512757600080fd5b506151348b828c01614e41565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c03121561516357600080fd5b61516c8a614b6a565b985061517a60208b01614b6a565b975061518860408b01614b6a565b965061519660608b01614b6a565b955060808a0135945060a08a013593506151b38b60c08c01614c4d565b92506151c38b6101008c01614c64565b91506151d38b6101808c01614c4d565b90509295985092959850929598565b6000602082840312156151f457600080fd5b5035919050565b80151581146128b957600080fd5b60006020828403121561521b57600080fd5b8135614c46816151fb565b60006020828403121561523857600080fd5b81356001600160401b0381111561524e57600080fd5b6149e984828501614e41565b6000602080838503121561526d57600080fd5b82356001600160401b038082111561528457600080fd5b818501915085601f83011261529857600080fd5b81356152a6614efc82614e1e565b81815260059190911b830184019084810190888311156152c557600080fd5b8585015b83811015614fb9578035858111156152e15760008081fd5b86016060818c03601f19018113156152f95760008081fd5b615301614dcc565b89830135888111156153135760008081fd5b6153218e8c83870101614e41565b8252506040808401358b830152615339838501614b6a565b90820152855250509186019186016152c9565b6000806000806080858703121561536257600080fd5b61536b85614b6a565b93506020850135925061538060408601614b6a565b915061538e60608601614b6a565b905092959194509250565b600080604083850312156153ac57600080fd5b82356001600160401b038111156153c257600080fd5b6153ce85828601614e41565b95602094909401359450505050565b600080604083850312156153f057600080fd5b8235915061540060208401614b6a565b90509250929050565b60208082526058908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2070656e60408201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560608201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608082015260a00190565b6020808252604c908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760608201526b040e6e8c2e8ca40c4c2e8c6d60a31b608082015260a00190565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786060820152621a5cdd60ea1b608082015260a00190565b6020808252605d908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060608201527f7468616e2063757272656e744c61737456657269666965644261746368000000608082015260a00190565b60208082526057908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2066696e60408201527f616c4e65774261746368206d75737420626520626967676572207468616e206360608201527f757272656e744c61737456657269666965644261746368000000000000000000608082015260a00190565b6000825161567f818460208701614bdb565b9190910192915050565b60006020828403121561569b57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826156c7576156c76156a2565b500690565b600181811c908216806156e057607f821691505b60208210810361570057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561578157615781615749565b01949350505050565b60208082526045908201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361588f5761588f615749565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b60006001820161591257615912615749565b5060010190565b60006001600160401b038381169083168181101561593957615939615749565b039392505050565b60008282101561595357615953615749565b500390565b600081600019048311821515161561597257615972615749565b500290565b601f82111561494a57600081815260208120601f850160051c8101602086101561599e5750805b601f850160051c820191505b8181101561406c578281556001016159aa565b81516001600160401b038111156159d6576159d6614d8e565b6159ea816159e484546156cc565b84615977565b602080601f831160018114615a1f5760008415615a075750858301515b600019600386901b1c1916600185901b17855561406c565b600085815260208120601f198616915b82811015615a4e57888601518255948401946001909101908401615a2f565b5085821015615a6c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615a8b57615a8b6156a2565b500490565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b60008219821115615b0c57615b0c615749565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b0383166020820152606060408201819052600090615bf590830184614c07565b95945050505050565b60006001600160401b0380841680615c1857615c186156a2565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615c5c57848483379084018281529284019290600101615c3c565b5050828760c0870137610100850181815286935091505b6001811015615c92578251825260209283019290910190600101615c73565b50505095945050505050565b600060208284031215615cb057600080fd5b8151614c46816151fb565b600181815b80851115615cf6578160001904821115615cdc57615cdc615749565b80851615615ce957918102915b93841c9390800290615cc0565b509250929050565b600082615d0d57506001614c5e565b81615d1a57506000614c5e565b8160018114615d305760028114615d3a57615d56565b6001915050614c5e565b60ff841115615d4b57615d4b615749565b50506001821b614c5e565b5060208310610133831016604e8410600b8410161715615d79575081810a614c5e565b615d838383615cbb565b8060001904821115615d9757615d97615749565b029392505050565b6000614c468383615cfe56fe506f6c79676f6e5a4b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a4b45564d3a3a70726f76654e6f6e44657465726d696e6973a2646970667358221220d878b906b02201090327f4c5d4b1892b9ce9da9cbcb1a21999e46f8bba7bf21864736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106104125760003560e01c806396dc3d3911610220578063cfa8ed4711610130578063e7a7ed02116100b8578063f14916d611610087578063f14916d6146109e2578063f2fde38b146109f5578063f851a44014610a08578063f8b823e414610a1b578063fe16564f14610a2457600080fd5b8063e7a7ed021461098f578063e8bf92ed146109a9578063eaeb077b146109bc578063edc41121146109cf57600080fd5b8063d939b315116100ff578063d939b3151461093e578063dbc1697614610958578063e0d1744114610960578063e11f3f1814610973578063e217cfd61461098657600080fd5b8063cfa8ed47146108ea578063d02103ca14610904578063d8d1091b14610917578063d8f54db01461092a57600080fd5b8063ab9fc5ef116101b3578063b6b0b09711610182578063b6b0b0971461088f578063c0cad302146108a9578063c0ed84e0146108bc578063c89e42df146108c4578063cf136306146108d757600080fd5b8063ab9fc5ef146107e3578063adc879e9146107ed578063afd23cbe14610807578063b4d63f581461082f57600080fd5b80639eb831b9116101ef5780639eb831b9146107a85780639f0d039d146107b0578063a3c573eb146107b8578063aa58bad6146107cb57600080fd5b806396dc3d391461076757806399f5634e1461077a5780639b796760146107825780639c9f3dfe1461079557600080fd5b80634a910e6a11610326578063715018a6116102ae578063837a47381161027d578063837a4738146106b1578063841b24d71461071f5780638b48931e146107395780638c4a0af7146107435780638da5cb5b1461075657600080fd5b8063715018a6146106705780637215541a1461067857806375c508b31461068b5780637fcb36531461069e57600080fd5b8063574f649e116102f5578063574f649e1461060457806360943d6a146106175780636b8616ce1461062a5780636ff512cc1461064a578063704b6c021461065d57600080fd5b80634a910e6a146105b65780635392c5e0146105c9578063542028d5146105e95780635437988d146105f157600080fd5b80632d0889d3116103a9578063423fa85611610378578063423fa85614610542578063456052671461055c578063458c0477146105765780634834a343146105895780634a1a89a71461059c57600080fd5b80632d0889d314610500578063383b3be814610509578063394218e91461051c5780633c1582671461052f57600080fd5b80631816b7e5116103e55780631816b7e51461048457806319d8ac6114610497578063220d7899146104c257806329878983146104d557600080fd5b80630eaa86ea14610417578063107bf28c1461043d57806310a01a721461045257806315064c9614610467575b600080fd5b61042a610425366004614b86565b610a37565b6040519081526020015b60405180910390f35b610445610c18565b6040516104349190614c33565b610465610460366004614c75565b610ca6565b005b6065546104749060ff1681565b6040519015158152602001610434565b610465610492366004614d02565b610ef0565b6068546104aa906001600160401b031681565b6040516001600160401b039091168152602001610434565b6104456104d0366004614d26565b611016565b606a546104e8906001600160a01b031681565b6040516001600160a01b039091168152602001610434565b61042a61ea6081565b610474610517366004614d73565b6111bc565b61046561052a366004614d73565b611203565b61046561053d366004614eb0565b611352565b6068546104aa90600160401b90046001600160401b031681565b6068546104aa90600160801b90046001600160401b031681565b6072546104aa906001600160401b031681565b610465610597366004614c75565b611b66565b6072546104aa90600160401b90046001600160401b031681565b6104656105c4366004614d73565b611eaf565b61042a6105d7366004614d73565b606d6020526000908152604090205481565b61044561214a565b6104656105ff366004614fdb565b612157565b61042a610612366004614ff8565b612181565b61046561062536600461506d565b6121c4565b61042a610638366004614d73565b60666020526000908152604090205481565b610465610658366004614fdb565b612534565b61046561066b366004614fdb565b6125b8565b610465612630565b610465610686366004614d73565b612644565b610465610699366004615144565b6128bc565b6069546104aa906001600160401b031681565b6106f46106bf3660046151e2565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610434565b6072546104aa90600160c01b90046001600160401b031681565b6104aa62093a8081565b610465610751366004615209565b61294b565b6033546001600160a01b03166104e8565b610465610775366004614d73565b6129c2565b61042a6129ed565b610465610790366004614d73565b612ad0565b6104656107a3366004614d73565b612b05565b61042a600c81565b60745461042a565b6070546104e8906001600160a01b031681565b6065546104aa9061010090046001600160401b031681565b6104aa6206978081565b606c546104aa90600160a81b90046001600160401b031681565b60655461081c90600160481b900461ffff1681565b60405161ffff9091168152602001610434565b61086a61083d366004614d73565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610434565b6065546104e890600160581b90046001600160a01b031681565b6104656108b7366004615226565b612c4b565b6104aa612c63565b6104656108d2366004615226565b612cb0565b6104656108e5366004614d73565b612d16565b6069546104e890600160401b90046001600160a01b031681565b606c546104e8906001600160a01b031681565b61046561092536600461525a565b612d97565b606c5461047490600160a01b900460ff1681565b6072546104aa90600160801b90046001600160401b031681565b610465613261565b61046561096e36600461534c565b61331d565b610465610981366004615144565b61338f565b6104aa6103e881565b6068546104aa90600160c01b90046001600160401b031681565b606b546104e8906001600160a01b031681565b6104656109ca366004615399565b6134d4565b6104656109dd366004614c75565b6137fc565b6104656109f0366004614fdb565b61391c565b610465610a03366004614fdb565b613994565b6073546104e8906001600160a01b031681565b61042a60745481565b610465610a323660046153dd565b613a0a565b6000806000610a44612c63565b90506001600160401b03881615610ae1576072546001600160401b039081169089161115610a8d5760405162461bcd60e51b8152600401610a8490615409565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610adb5760405162461bcd60e51b8152600401610a849061548c565b50610b4b565b6001600160401b0387166000908152606d6020526040902054915081610b195760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316876001600160401b03161115610b4b5760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316866001600160401b031611610b7c5760405162461bcd60e51b8152600401610a84906155ea565b6000610b8b8888888689611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051610bc0919061566d565b602060405180830381855afa158015610bdd573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c009190615689565b610c0a91906156b8565b9a9950505050505050505050565b606f8054610c25906156cc565b80601f0160208091040260200160405190810160405280929190818152602001828054610c51906156cc565b8015610c9e5780601f10610c7357610100808354040283529160200191610c9e565b820191906000526020600020905b815481529060010190602001808311610c8157829003601f168201915b505050505081565b610cae613a2c565b600080610cb9612c63565b90506001600160401b038a1615610d4d576072546001600160401b03908116908b161115610cf95760405162461bcd60e51b8152600401610a8490615409565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610d475760405162461bcd60e51b8152600401610a849061548c565b50610db7565b6001600160401b0389166000908152606d6020526040902054915081610d855760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316896001600160401b03161115610db75760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316886001600160401b031611610de85760405162461bcd60e51b8152600401610a84906155ea565b6000610df78a8a8a868b611016565b6069805467ffffffffffffffff19166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610e4557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610e8b57600080fd5b505af1158015610e9f573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610f1a5760405162461bcd60e51b8152600401610a8490615706565b6103e88161ffff16118015610f3457506104008161ffff16105b610fb95760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a4b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a401610a84565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b0380861660008181526067602052604080822054938816825290205460609291158061104857508115155b6110bc576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a84565b80611131576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a84565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b03828116600090815260716020526040812054909242926111f292600160801b9092048116911661575f565b6001600160401b0316111592915050565b6073546001600160a01b0316331461122d5760405162461bcd60e51b8152600401610a8490615706565b62093a806001600160401b03821611156112595760405162461bcd60e51b8152600401610a849061578a565b60655460ff166112fc576072546001600160401b03600160c01b9091048116908216106112fc5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a4b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a401610a84565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a19060200161100b565b60655460ff16156113755760405162461bcd60e51b8152600401610a84906157f5565b606954600160401b90046001600160a01b031633146113fc5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e6365720000000000006064820152608401610a84565b8051806114715760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e636520312062617463680000006064820152608401610a84565b6103e881106114ea576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e7920626174636865736064820152608401610a84565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561198a57600087828151811061153d5761153d61585d565b60200260200101519050600081606001516001600160401b031611156116f6578361156781615873565b94505060008160000151805190602001208260200151836060015160405160200161159493929190615899565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461163a5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d617463680000006064820152608401610a84565b81606001516001600160401b031682604001516001600160401b031610156116f05760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a401610a84565b5061187d565b6020810151158061177f5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916117399160040190815260200190565b6020604051808303816000875af1158015611758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177c9190615689565b15155b6117f15760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d7573742065786973740000000000006064820152608401610a84565b80515161ea601161187d5760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a401610a84565b856001600160401b031681604001516001600160401b0316101580156118b057504281604001516001600160401b031611155b6119225760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e67650000006064820152608401610a84565b805180516020918201208183015160408085015190516119499488949392913391016158bc565b604051602081830303815290604052805190602001209250848061196c90615873565b9550508060400151955050808061198290615900565b915050611521565b506068546001600160401b03600160c01b90910481169083161115611a0f5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b6064820152608401610a84565b606854600090611a2f90600160801b90046001600160401b031684615919565b611a42906001600160401b031687615941565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611b1790339030908490611afc9190615958565b606554600160581b90046001600160a01b0316929190613a86565b611b1f613af1565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b895760405162461bcd60e51b8152600401610a84906157f5565b6072546001600160401b038781166000908152606760205260409020600101544292611bc092600160c01b9091048116911661575f565b6001600160401b03161115611c495760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a401610a84565b6103e8611c568888615919565b6001600160401b031610611cd25760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e792062617463686573000000006064820152608401610a84565b611ce28888888888888888613b91565b611ceb86613e8e565b607254600160801b90046001600160401b0316600003611db3576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615611d5057607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d9657600080fd5b505af1158015611daa573d6000803e3d6000fd5b50505050611e64565b611dbb613af1565b607280546001600160401b0316906000611dd483615873565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611edc57506072546001600160401b03600160401b9091048116908216115b8015611ef757506072546001600160401b0390811690821611155b611f755760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a401610a84565b606a546001600160a01b0316331461201f57611f90816111bc565b61201f5760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a401610a84565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b1580156120dc57600080fd5b505af11580156120f0573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e846002015460405161213d91815260200190565b60405180910390a3505050565b606e8054610c25906156cc565b61215f613a2c565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b60008585805190602001208585856040516020016121a39594939291906158bc565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff16158080156121e45750600054600160ff909116105b806121fe5750303b1580156121fe575060005460ff166001145b6122615760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a84565b6000805460ff191660011790558015612284576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a8416179055607080549091169188169190911790556123016020860186614fdb565b607380546001600160a01b0319166001600160a01b03929092169190911790556123316060860160408701614fdb565b606980546001600160a01b0392909216600160401b02600160401b600160e01b031990921691909117905561236c60c0860160a08701614fdb565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa7113568490556123c960e0860160c08701614d73565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556124006040860160208701614d73565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561243c6080860160608701614d73565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b1990921691909117905561247860a0860160808701615209565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e6124a084826159bd565b50606f6124ad83826159bd565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124e3614074565b8015612529576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b0316331461255e5760405162461bcd60e51b8152600401610a8490615706565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161100b565b6073546001600160a01b031633146125e25760405162461bcd60e51b8152600401610a8490615706565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a19060200161100b565b612638613a2c565b61264260006140e4565b565b6033546001600160a01b031633146128b1576072546000906001600160401b03161561269557506072546001600160401b03908116600090815260716020526040902054600160401b9004166126a3565b506069546001600160401b03165b80826001600160401b0316116127215760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c7265616479207665726966696564000000006064820152608401610a84565b6068546001600160401b03600160401b90910481169083161180159061276357506001600160401b038083166000908152606760205260409020600101541615155b6127ee5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a401610a84565b6001600160401b03808316600090815260676020526040902060010154429161281c9162093a80911661575f565b6001600160401b031611156128af5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a401610a84565b505b6128b9614136565b50565b60655460ff16156128df5760405162461bcd60e51b8152600401610a84906157f5565b6128f08989898989898989896141a6565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1612529614136565b6073546001600160a01b031633146129755760405162461bcd60e51b8152600401610a8490615706565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061100b90831515815260200190565b6129ca613a2c565b6069805467ffffffffffffffff19166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a649190615689565b90506000612a70612c63565b6068546001600160401b03600160401b8204811691612aa091600160801b8204811691600160c01b900416615919565b612aaa919061575f565b612ab49190615919565b6001600160401b03169050612ac98183615a7c565b9250505090565b612ad8613a2c565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612b2f5760405162461bcd60e51b8152600401610a8490615706565b62093a806001600160401b0382161115612b5b5760405162461bcd60e51b8152600401610a849061578a565b60655460ff16612bf0576072546001600160401b03600160801b909104811690821610612bf05760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f776572006064820152608401610a84565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c759060200161100b565b612c53613a2c565b606f612c5f82826159bd565b5050565b6072546000906001600160401b031615612ca057506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612cda5760405162461bcd60e51b8152600401610a8490615706565b606e612ce682826159bd565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161100b9190614c33565b6073546001600160a01b03163314612d405760405162461bcd60e51b8152600401610a8490615706565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f9060200161100b565b60655460ff1615612dba5760405162461bcd60e51b8152600401610a84906157f5565b606c54600160a01b900460ff161515600114612de85760405162461bcd60e51b8152600401610a8490615a90565b805180612e4b5760405162461bcd60e51b815260206004820152603d6024820152600080516020615dac83398151915260448201527f3a204d75737420666f726365206174206c6561737420312062617463680000006064820152608401610a84565b6103e88110612ebc5760405162461bcd60e51b81526020600482015260436024820152600080516020615dac83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a401610a84565b6068546001600160401b03600160c01b8204811691612ee4918491600160801b900416615af9565b1115612f3e5760405162461bcd60e51b81526020600482015260356024820152600080516020615dac8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b6064820152608401610a84565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b8481101561316a576000868281518110612f8b57612f8b61585d565b602002602001015190508380612fa090615873565b945050600081600001518051906020012082602001518360400151604051602001612fcd93929190615899565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461306c5760405162461bcd60e51b81526020600482015260426024820152600080516020615dac83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a401610a84565b613077600188615941565b830361310c5742620697808360400151613091919061575f565b6001600160401b0316111561310c5760405162461bcd60e51b81526020600482015260476024820152600080516020615dac83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a401610a84565b815180516020918201208184015160405161312f938893929142913391016158bc565b604051602081830303815290604052805190602001209350858061315290615873565b9650505050808061316290615900565b915050612f6f565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166132835760405162461bcd60e51b8152600401610a8490615b11565b6073546001600160a01b031633146132ad5760405162461bcd60e51b8152600401610a8490615706565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156132fd57600080fd5b505af1158015613311573d6000803e3d6000fd5b50505050612642614821565b613325613a2c565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133b95760405162461bcd60e51b8152600401610a8490615b6e565b6133ca8989898989898989896141a6565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561341557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561345b57600080fd5b505af115801561346f573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff16156134f75760405162461bcd60e51b8152600401610a84906157f5565b606c54600160a01b900460ff1615156001146135255760405162461bcd60e51b8152600401610a8490615a90565b600061353060745490565b9050818111156135955760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b6064820152608401610a84565b61ea608351106136055760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b6064820152608401610a84565b60655461362490600160581b90046001600160a01b0316333084613a86565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa15801561366e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136929190615689565b60688054919250600160c01b9091046001600160401b03169060186136b683615873565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016136f793929190615899565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361379b57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26137f6565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516137ed93929190615bcb565b60405180910390a25b50505050565b606a546001600160a01b031633146138265760405162461bcd60e51b8152600401610a8490615b6e565b6138368888888888888888613b91565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561388157607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156138c757600080fd5b505af11580156138db573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e9d565b6073546001600160a01b031633146139465760405162461bcd60e51b8152600401610a8490615706565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca9060200161100b565b61399c613a2c565b6001600160a01b038116613a015760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a84565b6128b9816140e4565b613a12613a2c565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b031633146126425760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a84565b6040516001600160a01b03808516602483015283166044820152606481018290526137f69085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614878565b6072546001600160401b03600160401b820481169116111561264257607254600090613b2e90600160401b90046001600160401b0316600161575f565b9050613b39816111bc565b156128b957607254600090600290613b5b9084906001600160401b0316615919565b613b659190615bfe565b613b6f908361575f565b9050613b7a816111bc565b15613b8857612c5f81611eaf565b612c5f82611eaf565b600080613b9c612c63565b90506001600160401b038a1615613c30576072546001600160401b03908116908b161115613bdc5760405162461bcd60e51b8152600401610a8490615409565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c2a5760405162461bcd60e51b8152600401610a849061548c565b50613c9a565b6001600160401b0389166000908152606d6020526040902054915081613c685760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316896001600160401b03161115613c9a5760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316886001600160401b031611613ccb5760405162461bcd60e51b8152600401610a84906155ea565b6000613cda8a8a8a868b611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051613d0f919061566d565b602060405180830381855afa158015613d2c573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613d4f9190615689565b613d5991906156b8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613d9d918b918b918b9190600401615c24565b602060405180830381865afa158015613dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dde9190615c9e565b613e3d5760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20494e5660448201526920a624a22fa82927a7a360b11b6064820152608401610a84565b613e8033613e4b858d615919565b6001600160401b0316613e5c6129ed565b613e669190615958565b606554600160581b90046001600160a01b0316919061494f565b505050505050505050505050565b6000613e98612c63565b905081600080613ea88484615919565b6001600160401b031690505b836001600160401b0316836001600160401b031614613f5a576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613f04911642615941565b1115613f3f576001810154613f2990600160401b90046001600160401b031686615919565b613f3c906001600160401b031684615af9565b92505b60010154600160401b90046001600160401b03169250613eb4565b6000613f668383615941565b905082811015613fe0576000613f7c8285615941565b9050600c8111613f8c5780613f8f565b600c5b9050613f9c816003615958565b613fa790600a615d9f565b606554613fc0908390600160481b900461ffff16615d9f565b607454613fcd9190615958565b613fd79190615a7c565b6074555061406c565b6000613fec8483615941565b9050600c8111613ffc5780613fff565b600c5b9050600061400e826003615958565b61401990600a615d9f565b606554614032908490600160481b900461ffff16615d9f565b60745461403f9190615958565b6140499190615a7c565b90508060745460745461405c9190615958565b6140669190615a7c565b60745550505b505050505050565b600054610100900460ff166140df5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a84565b612642335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561418657600080fd5b505af115801561419a573d6000803e3d6000fd5b5050505061264261497f565b60006001600160401b038a1615614321576072546001600160401b03908116908b1611156142655760405162461bcd60e51b815260206004820152606c6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c401610a84565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b909204161461431b5760405162461bcd60e51b81526020600482015260606024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a401610a84565b50614475565b506001600160401b0387166000908152606d6020526040902054806143c25760405162461bcd60e51b81526020600482015260576024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a401610a84565b6069546001600160401b0390811690891611156144755760405162461bcd60e51b81526020600482015260716024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c401610a84565b6072546001600160401b03908116908a16118015906144a55750896001600160401b0316896001600160401b0316115b80156144c657506072546001600160401b03600160401b9091048116908a16115b61453e5760405162461bcd60e51b815260206004820152604f6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a401610a84565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146145fe5760405162461bcd60e51b815260206004820152606a6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c401610a84565b600061460d898989858a611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051614642919061566d565b602060405180830381855afa15801561465f573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906146829190615689565b61468c91906156b8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916146d0918a918a918a9190600401615c24565b602060405180830381865afa1580156146ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147119190615c9e565b6147715760405162461bcd60e51b815260206004820152603e6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20494e56414c49445f50524f4f4600006064820152608401610a84565b6001600160401b038b16600090815260716020526040902060020154879003613e805760405162461bcd60e51b81526020600482015260626024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c401610a84565b60655460ff166148435760405162461bcd60e51b8152600401610a8490615b11565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006148cd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166149da9092919063ffffffff16565b80519091501561494a57808060200190518101906148eb9190615c9e565b61494a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a84565b505050565b6040516001600160a01b03831660248201526044810182905261494a90849063a9059cbb60e01b90606401613aba565b60655460ff16156149a25760405162461bcd60e51b8152600401610a84906157f5565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60606149e984846000856149f1565b949350505050565b606082471015614a525760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a84565b600080866001600160a01b03168587604051614a6e919061566d565b60006040518083038185875af1925050503d8060008114614aab576040519150601f19603f3d011682016040523d82523d6000602084013e614ab0565b606091505b5091509150614ac187838387614acc565b979650505050505050565b60608315614b3b578251600003614b34576001600160a01b0385163b614b345760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a84565b50816149e9565b6149e98383815115614b505781518083602001fd5b8060405162461bcd60e51b8152600401610a849190614c33565b80356001600160401b0381168114614b8157600080fd5b919050565b600080600080600060a08688031215614b9e57600080fd5b614ba786614b6a565b9450614bb560208701614b6a565b9350614bc360408701614b6a565b94979396509394606081013594506080013592915050565b60005b83811015614bf6578181015183820152602001614bde565b838111156137f65750506000910152565b60008151808452614c1f816020860160208601614bdb565b601f01601f19169290920160200192915050565b602081526000614c466020830184614c07565b9392505050565b8060408101831015614c5e57600080fd5b92915050565b8060808101831015614c5e57600080fd5b6000806000806000806000806101a0898b031215614c9257600080fd5b614c9b89614b6a565b9750614ca960208a01614b6a565b9650614cb760408a01614b6a565b95506060890135945060808901359350614cd48a60a08b01614c4d565b9250614ce38a60e08b01614c64565b9150614cf38a6101608b01614c4d565b90509295985092959890939650565b600060208284031215614d1457600080fd5b813561ffff81168114614c4657600080fd5b600080600080600060a08688031215614d3e57600080fd5b614d4786614b6a565b9450614d5560208701614b6a565b94979496505050506040830135926060810135926080909101359150565b600060208284031215614d8557600080fd5b614c4682614b6a565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614dc657614dc6614d8e565b60405290565b604051606081016001600160401b0381118282101715614dc657614dc6614d8e565b604051601f8201601f191681016001600160401b0381118282101715614e1657614e16614d8e565b604052919050565b60006001600160401b03821115614e3757614e37614d8e565b5060051b60200190565b600082601f830112614e5257600080fd5b81356001600160401b03811115614e6b57614e6b614d8e565b614e7e601f8201601f1916602001614dee565b818152846020838601011115614e9357600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614ec357600080fd5b82356001600160401b0380821115614eda57600080fd5b818501915085601f830112614eee57600080fd5b8135614f01614efc82614e1e565b614dee565b81815260059190911b83018401908481019088831115614f2057600080fd5b8585015b83811015614fb957803585811115614f3c5760008081fd5b86016080818c03601f1901811315614f545760008081fd5b614f5c614da4565b8983013588811115614f6e5760008081fd5b614f7c8e8c83870101614e41565b8252506040808401358b8301526060614f96818601614b6a565b82840152614fa5848601614b6a565b908301525085525050918601918601614f24565b5098975050505050505050565b6001600160a01b03811681146128b957600080fd5b600060208284031215614fed57600080fd5b8135614c4681614fc6565b600080600080600060a0868803121561501057600080fd5b8535945060208601356001600160401b0381111561502d57600080fd5b61503988828901614e41565b9450506040860135925061504f60608701614b6a565b9150608086013561505f81614fc6565b809150509295509295909350565b600080600080600080600080888a036101c081121561508b57600080fd5b893561509681614fc6565b985060208a01356150a681614fc6565b975060408a01356150b681614fc6565b965060608a01356150c681614fc6565b955060e0607f19820112156150da57600080fd5b5060808901935061016089013592506101808901356001600160401b038082111561510457600080fd5b6151108c838d01614e41565b93506101a08b013591508082111561512757600080fd5b506151348b828c01614e41565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c03121561516357600080fd5b61516c8a614b6a565b985061517a60208b01614b6a565b975061518860408b01614b6a565b965061519660608b01614b6a565b955060808a0135945060a08a013593506151b38b60c08c01614c4d565b92506151c38b6101008c01614c64565b91506151d38b6101808c01614c4d565b90509295985092959850929598565b6000602082840312156151f457600080fd5b5035919050565b80151581146128b957600080fd5b60006020828403121561521b57600080fd5b8135614c46816151fb565b60006020828403121561523857600080fd5b81356001600160401b0381111561524e57600080fd5b6149e984828501614e41565b6000602080838503121561526d57600080fd5b82356001600160401b038082111561528457600080fd5b818501915085601f83011261529857600080fd5b81356152a6614efc82614e1e565b81815260059190911b830184019084810190888311156152c557600080fd5b8585015b83811015614fb9578035858111156152e15760008081fd5b86016060818c03601f19018113156152f95760008081fd5b615301614dcc565b89830135888111156153135760008081fd5b6153218e8c83870101614e41565b8252506040808401358b830152615339838501614b6a565b90820152855250509186019186016152c9565b6000806000806080858703121561536257600080fd5b61536b85614b6a565b93506020850135925061538060408601614b6a565b915061538e60608601614b6a565b905092959194509250565b600080604083850312156153ac57600080fd5b82356001600160401b038111156153c257600080fd5b6153ce85828601614e41565b95602094909401359450505050565b600080604083850312156153f057600080fd5b8235915061540060208401614b6a565b90509250929050565b60208082526058908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2070656e60408201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560608201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608082015260a00190565b6020808252604c908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760608201526b040e6e8c2e8ca40c4c2e8c6d60a31b608082015260a00190565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786060820152621a5cdd60ea1b608082015260a00190565b6020808252605d908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060608201527f7468616e2063757272656e744c61737456657269666965644261746368000000608082015260a00190565b60208082526057908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2066696e60408201527f616c4e65774261746368206d75737420626520626967676572207468616e206360608201527f757272656e744c61737456657269666965644261746368000000000000000000608082015260a00190565b6000825161567f818460208701614bdb565b9190910192915050565b60006020828403121561569b57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826156c7576156c76156a2565b500690565b600181811c908216806156e057607f821691505b60208210810361570057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561578157615781615749565b01949350505050565b60208082526045908201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361588f5761588f615749565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b60006001820161591257615912615749565b5060010190565b60006001600160401b038381169083168181101561593957615939615749565b039392505050565b60008282101561595357615953615749565b500390565b600081600019048311821515161561597257615972615749565b500290565b601f82111561494a57600081815260208120601f850160051c8101602086101561599e5750805b601f850160051c820191505b8181101561406c578281556001016159aa565b81516001600160401b038111156159d6576159d6614d8e565b6159ea816159e484546156cc565b84615977565b602080601f831160018114615a1f5760008415615a075750858301515b600019600386901b1c1916600185901b17855561406c565b600085815260208120601f198616915b82811015615a4e57888601518255948401946001909101908401615a2f565b5085821015615a6c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615a8b57615a8b6156a2565b500490565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b60008219821115615b0c57615b0c615749565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b0383166020820152606060408201819052600090615bf590830184614c07565b95945050505050565b60006001600160401b0380841680615c1857615c186156a2565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615c5c57848483379084018281529284019290600101615c3c565b5050828760c0870137610100850181815286935091505b6001811015615c92578251825260209283019290910190600101615c73565b50505095945050505050565b600060208284031215615cb057600080fd5b8151614c46816151fb565b600181815b80851115615cf6578160001904821115615cdc57615cdc615749565b80851615615ce957918102915b93841c9390800290615cc0565b509250929050565b600082615d0d57506001614c5e565b81615d1a57506000614c5e565b8160018114615d305760028114615d3a57615d56565b6001915050614c5e565b60ff841115615d4b57615d4b615749565b50506001821b614c5e565b5060208310610133831016604e8410600b8410161715615d79575081810a614c5e565b615d838383615cbb565b8060001904821115615d9757615d97615749565b029392505050565b6000614c468383615cfe56fe506f6c79676f6e5a4b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a4b45564d3a3a70726f76654e6f6e44657465726d696e6973a2646970667358221220d878b906b02201090327f4c5d4b1892b9ce9da9cbcb1a21999e46f8bba7bf21864736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/ProofOfEfficiency.json b/compiled-contracts/ProofOfEfficiency.json index 4ed27d15d..a37e696e7 100644 --- a/compiled-contracts/ProofOfEfficiency.json +++ b/compiled-contracts/ProofOfEfficiency.json @@ -465,10 +465,10 @@ }, { "inputs": [], - "name": "bridgeAddress", + "name": "PolygonZKEVMBridgeAddress", "outputs": [ { - "internalType": "contract IBridge", + "internalType": "contract IPolygonZKEVMBridge", "name": "", "type": "address" } @@ -668,8 +668,8 @@ "type": "address" }, { - "internalType": "contract IBridge", - "name": "_bridgeAddress", + "internalType": "contract IPolygonZKEVMBridge", + "name": "_PolygonZKEVMBridgeAddress", "type": "address" }, { diff --git a/compiled-contracts/ProofOfEfficiencyMock.json b/compiled-contracts/ProofOfEfficiencyMock.json index 899f3c805..318274233 100644 --- a/compiled-contracts/ProofOfEfficiencyMock.json +++ b/compiled-contracts/ProofOfEfficiencyMock.json @@ -465,10 +465,10 @@ }, { "inputs": [], - "name": "bridgeAddress", + "name": "PolygonZKEVMBridgeAddress", "outputs": [ { - "internalType": "contract IBridge", + "internalType": "contract IPolygonZKEVMBridge", "name": "", "type": "address" } @@ -746,8 +746,8 @@ "type": "address" }, { - "internalType": "contract IBridge", - "name": "_bridgeAddress", + "internalType": "contract IPolygonZKEVMBridge", + "name": "_PolygonZKEVMBridgeAddress", "type": "address" }, { diff --git a/compiled-contracts/TokenWrapped.json b/compiled-contracts/TokenWrapped.json index 21ac4bce3..13f9e39c6 100644 --- a/compiled-contracts/TokenWrapped.json +++ b/compiled-contracts/TokenWrapped.json @@ -483,8 +483,8 @@ "type": "function" } ], - "bytecode": "0x60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b14f80bfcbda3f7be499de7c67ec81639549928b9cee16384da9f2fb8c22dce64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b14f80bfcbda3f7be499de7c67ec81639549928b9cee16384da9f2fb8c22dce64736f6c634300080f0033", + "bytecode": "0x60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b5d95b18e7873c0bee5e5a0f8ba7f856feaa9a4588dd711619c14728f42e00f64736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b5d95b18e7873c0bee5e5a0f8ba7f856feaa9a4588dd711619c14728f42e00f64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/GlobalExitRootManager.sol b/contracts/GlobalExitRootManager.sol index 5b8715882..ae6e4caf7 100644 --- a/contracts/GlobalExitRootManager.sol +++ b/contracts/GlobalExitRootManager.sol @@ -18,7 +18,7 @@ contract GlobalExitRootManager is IGlobalExitRootManager, Initializable { // Store every global exit root: Root --> rootNum mapping(bytes32 => uint256) public globalExitRootMap; - // Bridge address + // PolygonZKEVMBridge address address public bridgeAddress; // Rollup contract address @@ -34,12 +34,12 @@ contract GlobalExitRootManager is IGlobalExitRootManager, Initializable { /** * @param _rollupAddress Rollup contract address - * @param _bridgeAddress Bridge contract address + * @param _bridgeAddress PolygonZKEVMBridge contract address */ - function initialize(address _rollupAddress, address _bridgeAddress) - public - initializer - { + function initialize( + address _rollupAddress, + address _bridgeAddress + ) public initializer { rollupAddress = _rollupAddress; bridgeAddress = _bridgeAddress; } diff --git a/contracts/GlobalExitRootManagerL2.sol b/contracts/GlobalExitRootManagerL2.sol index 11f957eb5..04c0154ca 100644 --- a/contracts/GlobalExitRootManagerL2.sol +++ b/contracts/GlobalExitRootManagerL2.sol @@ -16,18 +16,18 @@ contract GlobalExitRootManagerL2 { // Store every global exit root mapping(bytes32 => uint256) public globalExitRootMap; - // Rollup exit root, will be updated for every bridge call + // Rollup exit root, will be updated for every PolygonZKEVM Bridge call bytes32 public lastRollupExitRoot; //////////////////// // Regular variables /////////////////// - // Bridge address + // PolygonZKEVM Bridge address address public bridgeAddress; /** - * @param _bridgeAddress Bridge contract address + * @param _bridgeAddress PolygonZKEVMBridge contract address */ constructor(address _bridgeAddress) { bridgeAddress = _bridgeAddress; diff --git a/contracts/PolygonZKEVM.sol b/contracts/PolygonZKEVM.sol index 23e12db7f..8c1c2187e 100644 --- a/contracts/PolygonZKEVM.sol +++ b/contracts/PolygonZKEVM.sol @@ -7,7 +7,7 @@ import "./interfaces/IVerifierRollup.sol"; import "./interfaces/IGlobalExitRootManager.sol"; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; -import "./interfaces/IBridge.sol"; +import "./interfaces/IPolygonZKEVMBridge.sol"; import "./lib/EmergencyManager.sol"; /** @@ -16,7 +16,7 @@ import "./lib/EmergencyManager.sol"; * Any user can force some transaction and the sequencer will have a timeout to add them in the queue. * The sequenced state is deterministic and can be precalculated before it's actually verified by a zkProof. * The aggregators will be able to verify the sequenced state with zkProofs and therefore make available the withdrawals from L2 network. - * To enter and exit of the L2 network will be used a Bridge smart contract that will be deployed in both networks. + * To enter and exit of the L2 network will be used a PolygonZKEVMBridge smart contract that will be deployed in both networks. */ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { using SafeERC20Upgradeable for IERC20Upgradeable; @@ -189,8 +189,8 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { // L2 network name string public networkName; - // Bridge Address - IBridge public bridgeAddress; + // PolygonZKEVM Bridge Address + IPolygonZKEVMBridge public bridgeAddress; // Pending state mapping // pendingStateNumber --> PendingState @@ -338,7 +338,7 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { IGlobalExitRootManager _globalExitRootManager, IERC20Upgradeable _matic, IVerifierRollup _rollupVerifier, - IBridge _bridgeAddress, + IPolygonZKEVMBridge _bridgeAddress, InitializePackedParameters calldata initializePackedParameters, bytes32 genesisRoot, string memory _trustedSequencerURL, @@ -1383,7 +1383,7 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { } /** - * @notice Function to activate emergency state, which also enable the emergency mode on both PoE and Bridge contrats + * @notice Function to activate emergency state, which also enable the emergency mode on both PoE and PolygonZKEVM Bridge contrats * If not called by the owner owner must be provided a batcnNum that does not have been aggregated in a HALT_AGGREGATION_TIMEOUT period * @param sequencedBatchNum Sequenced batch number that has not been aggreagated in HALT_AGGREGATION_TIMEOUT */ @@ -1424,10 +1424,10 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { } /** - * @notice Function to deactivate emergency state on both PoE and Bridge contrats + * @notice Function to deactivate emergency state on both PoE and PolygonZKEVMBridge contrats */ function deactivateEmergencyState() external ifEmergencyState onlyAdmin { - // Deactivate emergency state on bridge + // Deactivate emergency state on PolygonZKEVMBridge bridgeAddress.deactivateEmergencyState(); // Deactivate emergency state on this contract @@ -1435,10 +1435,10 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { } /** - * @notice Internal function to activate emergency state on both PoE and Bridge contrats + * @notice Internal function to activate emergency state on both PoE and PolygonZKEVM Bridge contrats */ function _activateEmergencyState() internal override { - // Activate emergency state on bridge + // Activate emergency state on PolygonZKEVM Bridge bridgeAddress.activateEmergencyState(); // Activate emergency state on this contract diff --git a/contracts/Bridge.sol b/contracts/PolygonZKEVMBridge.sol similarity index 93% rename from contracts/Bridge.sol rename to contracts/PolygonZKEVMBridge.sol index 68a9f54bc..5c23210df 100644 --- a/contracts/Bridge.sol +++ b/contracts/PolygonZKEVMBridge.sol @@ -7,15 +7,19 @@ import "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeab import "./lib/TokenWrapped.sol"; import "./interfaces/IGlobalExitRootManager.sol"; import "./interfaces/IBridgeMessageReceiver.sol"; -import "./interfaces/IBridge.sol"; +import "./interfaces/IPolygonZKEVMBridge.sol"; import "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol"; import "./lib/EmergencyManager.sol"; /** - * Bridge that will be deployed on both networks Ethereum and Polygon zkEVM + * PolygonZKEVMBridge that will be deployed on both networks Ethereum and Polygon zkEVM * Contract responsible to manage the token interactions with other networks */ -contract Bridge is DepositContract, EmergencyManager, IBridge { +contract PolygonZKEVMBridge is + DepositContract, + EmergencyManager, + IPolygonZKEVMBridge +{ using SafeERC20Upgradeable for IERC20Upgradeable; // Wrapped Token information struct @@ -130,7 +134,7 @@ contract Bridge is DepositContract, EmergencyManager, IBridge { ) public payable virtual ifNotEmergencyState { require( destinationNetwork != networkID, - "Bridge::bridge: DESTINATION_CANT_BE_ITSELF" + "PolygonZKEVMBridge::bridgeAsset: DESTINATION_CANT_BE_ITSELF" ); address originTokenAddress; @@ -141,7 +145,7 @@ contract Bridge is DepositContract, EmergencyManager, IBridge { // Ether transfer require( msg.value == amount, - "Bridge::bridge: AMOUNT_DOES_NOT_MATCH_MSG_VALUE" + "PolygonZKEVMBridge::bridgeAsset: AMOUNT_DOES_NOT_MATCH_MSG_VALUE" ); // Ether is treated as ether from mainnet @@ -220,7 +224,7 @@ contract Bridge is DepositContract, EmergencyManager, IBridge { ) public payable ifNotEmergencyState { require( destinationNetwork != networkID, - "Bridge::bridge: DESTINATION_CANT_BE_ITSELF" + "PolygonZKEVMBridge::bridgeMessage: DESTINATION_CANT_BE_ITSELF" ); emit BridgeEvent( @@ -300,7 +304,10 @@ contract Bridge is DepositContract, EmergencyManager, IBridge { (bool success, ) = destinationAddress.call{value: amount}( new bytes(0) ); - require(success, "Bridge::claimAsset: ETH_TRANSFER_FAILED"); + require( + success, + "PolygonZKEVMBridge::claimAsset: ETH_TRANSFER_FAILED" + ); } else { // Transfer tokens if (originNetwork == networkID) { @@ -415,7 +422,7 @@ contract Bridge is DepositContract, EmergencyManager, IBridge { (originAddress, originNetwork, metadata) ) ); - require(success, "Bridge::claimMessage: MESSAGE_FAILED"); + require(success, "PolygonZKEVMBridge::claimMessage: MESSAGE_FAILED"); emit ClaimEvent( index, @@ -519,7 +526,10 @@ contract Bridge is DepositContract, EmergencyManager, IBridge { uint8 leafType ) internal { // Check nullifier - require(!isClaimed(index), "Bridge::_verifyLeaf: ALREADY_CLAIMED"); + require( + !isClaimed(index), + "PolygonZKEVMBridge::_verifyLeaf: ALREADY_CLAIMED" + ); // Check timestamp where the global exit root was set uint256 timestampGlobalExitRoot = globalExitRootManager @@ -529,13 +539,13 @@ contract Bridge is DepositContract, EmergencyManager, IBridge { require( timestampGlobalExitRoot != 0, - "Bridge::_verifyLeaf: GLOBAL_EXIT_ROOT_INVALID" + "PolygonZKEVMBridge::_verifyLeaf: GLOBAL_EXIT_ROOT_INVALID" ); // Destination network must be networkID require( destinationNetwork == networkID, - "Bridge::_verifyLeaf: DESTINATION_NETWORK_DOES_NOT_MATCH" + "PolygonZKEVMBridge::_verifyLeaf: DESTINATION_NETWORK_DOES_NOT_MATCH" ); bytes32 claimRoot; @@ -561,7 +571,7 @@ contract Bridge is DepositContract, EmergencyManager, IBridge { index, claimRoot ), - "Bridge::_verifyLeaf: SMT_INVALID" + "PolygonZKEVMBridge::_verifyLeaf: SMT_INVALID" ); } @@ -636,15 +646,15 @@ contract Bridge is DepositContract, EmergencyManager, IBridge { ); require( owner == msg.sender, - "Bridge::_permit: PERMIT_OWNER_MUST_BE_THE_SENDER" + "PolygonZKEVMBridge::_permit: PERMIT_OWNER_MUST_BE_THE_SENDER" ); require( spender == address(this), - "Bridge::_permit: SPENDER_MUST_BE_THIS" + "PolygonZKEVMBridge::_permit: SPENDER_MUST_BE_THIS" ); require( value == amount, - "Bridge::_permit: PERMIT_AMOUNT_DOES_NOT_MATCH" + "PolygonZKEVMBridge::_permit: PERMIT_AMOUNT_DOES_NOT_MATCH" ); // we call without checking the result, in case it fails and he doesn't have enough balance @@ -666,7 +676,7 @@ contract Bridge is DepositContract, EmergencyManager, IBridge { } else { require( sig == _PERMIT_SIGNATURE_DAI, - "Bridge::_permit: NOT_VALID_CALL" + "PolygonZKEVMBridge::_permit: NOT_VALID_CALL" ); ( @@ -693,11 +703,11 @@ contract Bridge is DepositContract, EmergencyManager, IBridge { ); require( holder == msg.sender, - "Bridge::_permit: PERMIT_OWNER_MUST_BE_THE_SENDER" + "PolygonZKEVMBridge::_permit: PERMIT_OWNER_MUST_BE_THE_SENDER" ); require( spender == address(this), - "Bridge::_permit: SPENDER_MUST_BE_THIS" + "PolygonZKEVMBridge::_permit: SPENDER_MUST_BE_THIS" ); // we call without checking the result, in case it fails and he doesn't have enough balance diff --git a/contracts/interfaces/IBridgeMessageReceiver.sol b/contracts/interfaces/IBridgeMessageReceiver.sol index e763c6427..7d1082b11 100644 --- a/contracts/interfaces/IBridgeMessageReceiver.sol +++ b/contracts/interfaces/IBridgeMessageReceiver.sol @@ -3,7 +3,7 @@ pragma solidity 0.8.15; /** - * @dev Define interface for bridge message receiver + * @dev Define interface for PolygonZKEVM Bridge message receiver */ interface IBridgeMessageReceiver { function onMessageReceived( diff --git a/contracts/interfaces/IBridge.sol b/contracts/interfaces/IPolygonZKEVMBridge.sol similarity index 97% rename from contracts/interfaces/IBridge.sol rename to contracts/interfaces/IPolygonZKEVMBridge.sol index adab6bae7..0977caee0 100644 --- a/contracts/interfaces/IBridge.sol +++ b/contracts/interfaces/IPolygonZKEVMBridge.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.15; -interface IBridge { +interface IPolygonZKEVMBridge { function bridgeAsset( address token, uint32 destinationNetwork, diff --git a/contracts/lib/TokenWrapped.sol b/contracts/lib/TokenWrapped.sol index a979c6065..3115e65d5 100644 --- a/contracts/lib/TokenWrapped.sol +++ b/contracts/lib/TokenWrapped.sol @@ -25,7 +25,7 @@ contract TokenWrapped is ERC20 { // Domain separator calculated on deployment bytes32 private immutable _DEPLOYMENT_DOMAIN_SEPARATOR; - // Bridge address + // PolygonZKEVM Bridge address address public bridgeAddress; // Decimals diff --git a/contracts/mocks/GlobalExitRootManagerL2Mock.sol b/contracts/mocks/GlobalExitRootManagerL2Mock.sol index f1fb97c61..878648d9b 100644 --- a/contracts/mocks/GlobalExitRootManagerL2Mock.sol +++ b/contracts/mocks/GlobalExitRootManagerL2Mock.sol @@ -9,20 +9,21 @@ import "../GlobalExitRootManagerL2.sol"; */ contract GlobalExitRootManagerL2Mock is GlobalExitRootManagerL2 { /** - * @param _bridgeAddress Bridge contract address + * @param _bridgeAddress PolygonZKEVM Bridge contract address */ - constructor(address _bridgeAddress) - GlobalExitRootManagerL2(_bridgeAddress) - {} + constructor( + address _bridgeAddress + ) GlobalExitRootManagerL2(_bridgeAddress) {} /** * @notice Set globalExitRoot * @param globalExitRoot New global exit root * @param blockNumber block number */ - function setLastGlobalExitRoot(bytes32 globalExitRoot, uint256 blockNumber) - public - { + function setLastGlobalExitRoot( + bytes32 globalExitRoot, + uint256 blockNumber + ) public { globalExitRootMap[globalExitRoot] = blockNumber; } diff --git a/contracts/mocks/GlobalExitRootManagerMock.sol b/contracts/mocks/GlobalExitRootManagerMock.sol index e2b0f0a33..1f736b6c2 100644 --- a/contracts/mocks/GlobalExitRootManagerMock.sol +++ b/contracts/mocks/GlobalExitRootManagerMock.sol @@ -10,7 +10,7 @@ import "../GlobalExitRootManager.sol"; contract GlobalExitRootManagerMock is GlobalExitRootManager { /** * @param _rollupAddress Rollup contract address - * @param _bridgeAddress Bridge contract address + * @param _bridgeAddress PolygonZKEVM Bridge contract address */ constructor(address _rollupAddress, address _bridgeAddress) { initialize(_rollupAddress, _bridgeAddress); @@ -28,9 +28,10 @@ contract GlobalExitRootManagerMock is GlobalExitRootManager { * @notice Set last global exit root * @param timestamp timestamp */ - function setGlobalExitRoot(bytes32 globalExitRoot, uint256 timestamp) - public - { + function setGlobalExitRoot( + bytes32 globalExitRoot, + uint256 timestamp + ) public { globalExitRootMap[globalExitRoot] = timestamp; } } diff --git a/contracts/mocks/BridgeMock.sol b/contracts/mocks/PolygonZKEVMBridgeMock.sol similarity index 86% rename from contracts/mocks/BridgeMock.sol rename to contracts/mocks/PolygonZKEVMBridgeMock.sol index a7244bcf0..8c8d0f4b0 100644 --- a/contracts/mocks/BridgeMock.sol +++ b/contracts/mocks/PolygonZKEVMBridgeMock.sol @@ -1,13 +1,13 @@ // SPDX-License-Identifier: AGPL-3.0 pragma solidity 0.8.15; -import "../Bridge.sol"; +import "../PolygonZKEVMBridge.sol"; import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; /** - * Bridge that will be deployed on both networks Ethereum and Polygon zkEVM + * PolygonZKEVMBridge that will be deployed on both networks Ethereum and Polygon zkEVM * Contract responsible to manage the token interactions with other networks */ -contract BridgeMock is Bridge, OwnableUpgradeable { +contract PolygonZKEVMBridgeMock is PolygonZKEVMBridge, OwnableUpgradeable { uint256 public maxEtherBridge; /** @@ -54,7 +54,7 @@ contract BridgeMock is Bridge, OwnableUpgradeable { ) public payable override { require( msg.value <= maxEtherBridge, - "Bridge::bridge: Cannot bridge more than maxEtherBridge in internal testnet" + "PolygonZKEVMBridge::bridgeAsset: Cannot bridge more than maxEtherBridge" ); super.bridgeAsset( token, diff --git a/contracts/mocks/PolygonZKEVMMock.sol b/contracts/mocks/PolygonZKEVMMock.sol index 07d024def..017d3db1c 100644 --- a/contracts/mocks/PolygonZKEVMMock.sol +++ b/contracts/mocks/PolygonZKEVMMock.sol @@ -7,7 +7,7 @@ import "../PolygonZKEVM.sol"; * Contract responsible for managing the state and the updates of the L2 network * There will be sequencer, which are able to send transactions. That transactions will be stored in the contract. * The aggregators are forced to process and validate the sequencers transactions in the same order by using a verifier. - * To enter and exit of the L2 network will be used a Bridge smart contract + * To enter and exit of the L2 network will be used a PolygonZKEVM Bridge smart contract */ contract PolygonZKEVMMock is PolygonZKEVM { /** diff --git a/deployment/README.md b/deployment/README.md index fe546b7fb..8b78857ff 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -51,7 +51,7 @@ npm run verify:PoE2_0:goerli - `maxPriorityFeePerGas`:string, maxPriorityFeePerGas of all txs - `multiplierGas`: number, Gas multiplier. If maxFeePerGas and maxPriorityFeePerGas are set, will not take effect - `trustedSequencerPvtKey`: string, Trusted sequencer pvtKey in order to approve the matic tokens -- `bridgeMock`:Boolean, Wheather the bridge will be mock or not ( the mock version has a ether limitation on deposits) +- `PolygonZKEVMBridgeMock`:Boolean, Wheather the PolygonZKEVMBridge will be mock or not ( the mock version has a ether limitation on deposits) - `admin`:address, Admin address - `trustedAggregator`:address, Trusted aggregator address diff --git a/deployment/deployPoE_v2-0.js b/deployment/deployPoE_v2-0.js index 98a00256b..3c0e170ce 100644 --- a/deployment/deployPoE_v2-0.js +++ b/deployment/deployPoE_v2-0.js @@ -120,32 +120,32 @@ async function main() { console.log('#######################\n'); console.log('globalExitRootManager deployed to:', globalExitRootManager.address); - // deploy bridge - let bridgeFactory; - if (deployParameters.bridgeMock) { - bridgeFactory = await ethers.getContractFactory('BridgeMock', deployer); + // deploy PolygonZKEVMBridge + let polygonZKEVMBridgeFactory; + if (deployParameters.PolygonZKEVMBridgeMock) { + polygonZKEVMBridgeFactory = await ethers.getContractFactory('PolygonZKEVMBridgeMock', deployer); } else { - bridgeFactory = await ethers.getContractFactory('Bridge', deployer); + polygonZKEVMBridgeFactory = await ethers.getContractFactory('PolygonZKEVMBridge', deployer); } - let bridgeContract; + let polygonZKEVMBridgeContract; for (let i = 0; i < attemptsDeployProxy; i++) { try { - bridgeContract = await upgrades.deployProxy(bridgeFactory, [], { initializer: false }); + polygonZKEVMBridgeContract = await upgrades.deployProxy(polygonZKEVMBridgeFactory, [], { initializer: false }); break; } catch (error) { console.log(`attempt ${i}`); - console.log('upgrades.deployProxy of bridgeContract ', error.error.reason); + console.log('upgrades.deployProxy of polygonZKEVMBridgeContract ', error.error.reason); } // reach limits of attempts if (i + 1 === attemptsDeployProxy) { - throw new Error('Bridge contract has not been deployed'); + throw new Error('PolygonZKEVMBridge contract has not been deployed'); } } console.log('#######################\n'); - console.log('Bridge deployed to:', bridgeContract.address); + console.log('PolygonZKEVMBridge deployed to:', polygonZKEVMBridgeContract.address); // deploy PoE const PolygonZKEVMFactory = await ethers.getContractFactory('PolygonZKEVMMock', deployer); @@ -171,24 +171,24 @@ async function main() { /* * Initialize globalExitRootManager */ - await globalExitRootManager.initialize(polygonZKEVMContract.address, bridgeContract.address); + await globalExitRootManager.initialize(polygonZKEVMContract.address, polygonZKEVMBridgeContract.address); /* - * Initialize Bridge + * Initialize PolygonZKEVMBridge */ - await (await bridgeContract.initialize( + await (await polygonZKEVMBridgeContract.initialize( networkIDMainnet, globalExitRootManager.address, polygonZKEVMContract.address, )).wait(); console.log('\n#######################'); - console.log('##### Checks Bridge #####'); + console.log('##### Checks PolygonZKEVMBridge #####'); console.log('#######################'); - console.log('globalExitRootManagerAddress:', await bridgeContract.globalExitRootManager()); - console.log('networkID:', await bridgeContract.networkID()); - console.log('poeAddress:', await bridgeContract.poeAddress()); - console.log('owner:', await bridgeContract.owner()); + console.log('globalExitRootManagerAddress:', await polygonZKEVMBridgeContract.globalExitRootManager()); + console.log('networkID:', await polygonZKEVMBridgeContract.networkID()); + console.log('poeAddress:', await polygonZKEVMBridgeContract.poeAddress()); + console.log('owner:', await polygonZKEVMBridgeContract.owner()); /* * Initialize Polygon ZK-EVM @@ -203,7 +203,7 @@ async function main() { console.log('globalExitRootManagerAddress:', globalExitRootManager.address); console.log('maticTokenAddress:', maticTokenContract.address); console.log('verifierAddress:', verifierContract.address); - console.log('bridgeContract:', bridgeContract.address); + console.log('polygonZKEVMBridgeContract:', polygonZKEVMBridgeContract.address); console.log('admin:', admin); console.log('chainID:', chainID); @@ -221,7 +221,7 @@ async function main() { globalExitRootManager.address, maticTokenContract.address, verifierContract.address, - bridgeContract.address, + polygonZKEVMBridgeContract.address, { admin, chainID, @@ -244,7 +244,7 @@ async function main() { console.log('globalExitRootManagerAddress:', await polygonZKEVMContract.globalExitRootManager()); console.log('maticTokenAddress:', await polygonZKEVMContract.matic()); console.log('verifierAddress:', await polygonZKEVMContract.rollupVerifier()); - console.log('bridgeContract:', await polygonZKEVMContract.bridgeAddress()); + console.log('polygonZKEVMBridgeContract:', await polygonZKEVMContract.bridgeAddress()); console.log('admin:', await polygonZKEVMContract.admin()); console.log('chainID:', await polygonZKEVMContract.chainID()); @@ -289,7 +289,7 @@ async function main() { } const outputJson = { polygonZKEVMAddress: polygonZKEVMContract.address, - bridgeAddress: bridgeContract.address, + PolygonZKEVMBridgeAddress: polygonZKEVMBridgeContract.address, globalExitRootManagerAddress: globalExitRootManager.address, maticTokenAddress: maticTokenContract.address, verifierAddress: verifierContract.address, diff --git a/deployment/deploy_parameters.json.example b/deployment/deploy_parameters.json.example index 5e94b36ab..e04c0c8e7 100644 --- a/deployment/deploy_parameters.json.example +++ b/deployment/deploy_parameters.json.example @@ -10,7 +10,7 @@ "maxPriorityFeePerGas":0, "multiplierGas": 0, "trustedSequencerPvtKey":"", - "bridgeMock":false, + "PolygonZKEVMBridgeMock":false, "admin":"0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D", "trustedAggregator":"0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D" } \ No newline at end of file diff --git a/deployment/genesis-gen.json b/deployment/genesis-gen.json index 250f09233..52e7d8027 100644 --- a/deployment/genesis-gen.json +++ b/deployment/genesis-gen.json @@ -42,7 +42,7 @@ "gasLimit": 10000000, "gasPrice": "0", "chainId": 1000, - "contractName": "Bridge" + "contractName": "PolygonZKEVMBridge" }, { "from": "0xC949254d682D8c9ad5682521675b8F43b102aec4", @@ -58,7 +58,7 @@ "0xAE4bB80bE56B819606589DE61d5ec3b522EEB032", "0x0000000000000000000000000000000000000000" ], - "contractName": "Bridge" + "contractName": "PolygonZKEVMBridge" } ], "timestamp": 1944498031 diff --git a/deployment/genesis.json b/deployment/genesis.json index e866de88d..1488f3b7a 100644 --- a/deployment/genesis.json +++ b/deployment/genesis.json @@ -12,7 +12,7 @@ "0x0000000000000000000000000000000000000000000000000000000000000087": "0x01", "0x000000000000000000000000000000000000000000000000000000000000008b": "0xae4bb80be56b819606589de61d5ec3b522eeb032" }, - "contractName": "Bridge" + "contractName": "PolygonZKEVMBridge" }, { "balance": "0", diff --git a/deployment/verifyPoE_v2-0.js b/deployment/verifyPoE_v2-0.js index 5ac0c09bf..00ea7102f 100644 --- a/deployment/verifyPoE_v2-0.js +++ b/deployment/verifyPoE_v2-0.js @@ -50,7 +50,7 @@ async function main() { // verify proxies - const contractNames = ['polygonZKEVMAddress', 'bridgeAddress', 'globalExitRootManagerAddress']; + const contractNames = ['polygonZKEVMAddress', 'PolygonZKEVMBridgeAddress', 'globalExitRootManagerAddress']; for (let i = 0; i < contractNames.length; i++) { try { diff --git a/docker/scripts/genesis_docker.json b/docker/scripts/genesis_docker.json index b26bec169..24834fd09 100644 --- a/docker/scripts/genesis_docker.json +++ b/docker/scripts/genesis_docker.json @@ -12,7 +12,7 @@ "0x0000000000000000000000000000000000000000000000000000000000000087": "0x01", "0x000000000000000000000000000000000000000000000000000000000000008b": "0xae4bb80be56b819606589de61d5ec3b522eeb032" }, - "contractName": "Bridge" + "contractName": "PolygonZKEVMBridge" }, { "balance": "0", diff --git a/docker/scripts/genesis_gen_docker.json b/docker/scripts/genesis_gen_docker.json index 96e9b520d..02ba90780 100644 --- a/docker/scripts/genesis_gen_docker.json +++ b/docker/scripts/genesis_gen_docker.json @@ -48,7 +48,7 @@ "gasLimit": 10000000, "gasPrice": "0", "chainId": 1000, - "contractName": "Bridge" + "contractName": "PolygonZKEVMBridge" }, { "from": "0xC949254d682D8c9ad5682521675b8F43b102aec4", @@ -64,7 +64,7 @@ "0xAE4bB80bE56B819606589DE61d5ec3b522EEB032", "0x0000000000000000000000000000000000000000" ], - "contractName": "Bridge" + "contractName": "PolygonZKEVMBridge" } ], "timestamp": 1944498031 diff --git a/docs/GlobalExitRootManager.md b/docs/GlobalExitRootManager.md index d863a5953..7744e0efd 100644 --- a/docs/GlobalExitRootManager.md +++ b/docs/GlobalExitRootManager.md @@ -15,7 +15,7 @@ Contract responsible for managing the exit roots across multiple networks | Name | Type | Description | | :--- | :--- | :------------------------------------------------------------------- | |`_rollupAddress` | address | Rollup contract address -|`_bridgeAddress` | address | Bridge contract address +|`_bridgeAddress` | address | PolygonZKEVMBridge contract address ### updateExitRoot ```solidity diff --git a/docs/GlobalExitRootManagerL2.md b/docs/GlobalExitRootManagerL2.md index c8657ca12..198e4e58d 100644 --- a/docs/GlobalExitRootManagerL2.md +++ b/docs/GlobalExitRootManagerL2.md @@ -14,7 +14,7 @@ The special circuit variables will be accesed and updated directly by the circui #### Parameters: | Name | Type | Description | | :--- | :--- | :------------------------------------------------------------------- | -|`_bridgeAddress` | address | Bridge contract address +|`_bridgeAddress` | address | PolygonZKEVMBridge contract address ### updateExitRoot ```solidity diff --git a/docs/PolygonZKEVM.md b/docs/PolygonZKEVM.md index 88419d2e8..dc891e439 100644 --- a/docs/PolygonZKEVM.md +++ b/docs/PolygonZKEVM.md @@ -3,7 +3,7 @@ There will be a trusted sequencer, which is able to send transactions. Any user can force some transaction and the sequencer will have a timeout to add them in the queue. The sequenced state is deterministic and can be precalculated before it's actually verified by a zkProof. The aggregators will be able to verify the sequenced state with zkProofs and therefore make available the withdrawals from L2 network. -To enter and exit of the L2 network will be used a Bridge smart contract that will be deployed in both networks. +To enter and exit of the L2 network will be used a PolygonZKEVMBridge smart contract that will be deployed in both networks. ## Functions @@ -13,7 +13,7 @@ To enter and exit of the L2 network will be used a Bridge smart contract that wi contract IGlobalExitRootManager _globalExitRootManager, contract IERC20Upgradeable _matic, contract IVerifierRollup _rollupVerifier, - contract IBridge _bridgeAddress, + contract IPolygonZKEVMBridge _bridgeAddress, struct PolygonZKEVM.InitializePackedParameters initializePackedParameters, bytes32 genesisRoot, string _trustedSequencerURL, @@ -28,7 +28,7 @@ To enter and exit of the L2 network will be used a Bridge smart contract that wi |`_globalExitRootManager` | contract IGlobalExitRootManager | Global exit root manager address |`_matic` | contract IERC20Upgradeable | MATIC token address |`_rollupVerifier` | contract IVerifierRollup | Rollup verifier address -|`_bridgeAddress` | contract IBridge | Bridge address +|`_bridgeAddress` | contract IPolygonZKEVMBridge | Bridge address |`initializePackedParameters` | struct PolygonZKEVM.InitializePackedParameters | Struct to save gas and avoid stack too depp errors |`genesisRoot` | bytes32 | Rollup genesis root |`_trustedSequencerURL` | string | Trusted sequencer URL @@ -419,7 +419,7 @@ Internal functoin that prove a different state root given the same batches to ve uint64 sequencedBatchNum ) external ``` -Function to activate emergency state, which also enable the emergency mode on both PoE and Bridge contrats +Function to activate emergency state, which also enable the emergency mode on both PoE and PolygonZKEVM Bridge contrats If not called by the owner owner must be provided a batcnNum that does not have been aggregated in a HALT_AGGREGATION_TIMEOUT period @@ -433,7 +433,7 @@ If not called by the owner owner must be provided a batcnNum that does not have function deactivateEmergencyState( ) external ``` -Function to deactivate emergency state on both PoE and Bridge contrats +Function to deactivate emergency state on both PoE and PolygonZKEVMBridge contrats @@ -442,7 +442,7 @@ Function to deactivate emergency state on both PoE and Bridge contrats function _activateEmergencyState( ) internal ``` -Internal function to activate emergency state on both PoE and Bridge contrats +Internal function to activate emergency state on both PoE and PolygonZKEVM Bridge contrats diff --git a/docs/Bridge.md b/docs/PolygonZKEVMBridge.md similarity index 98% rename from docs/Bridge.md rename to docs/PolygonZKEVMBridge.md index dc4919403..ff71b7417 100644 --- a/docs/Bridge.md +++ b/docs/PolygonZKEVMBridge.md @@ -1,4 +1,4 @@ -Bridge that will be deployed on both networks Ethereum and Polygon zkEVM +PolygonZKEVMBridge that will be deployed on both networks Ethereum and Polygon zkEVM Contract responsible to manage the token interactions with other networks diff --git a/docs/ProofOfEfficiency.md b/docs/ProofOfEfficiency.md deleted file mode 100644 index 4a59330e5..000000000 --- a/docs/ProofOfEfficiency.md +++ /dev/null @@ -1,702 +0,0 @@ -Contract responsible for managing the states and the updates of L2 network. -There will be a trusted sequencer, which is able to send transactions. -Any user can force some transaction and the sequencer will have a timeout to add them in the queue. -The sequenced state is deterministic and can be precalculated before it's actually verified by a zkProof. -The aggregators will be able to verify the sequenced state with zkProofs and therefore make available the withdrawals from L2 network. -To enter and exit of the L2 network will be used a Bridge smart contract that will be deployed in both networks. - -## Functions - -### initialize - -```solidity - function initialize( - contract IGlobalExitRootManager _globalExitRootManager, - contract IERC20Upgradeable _matic, - contract IVerifierRollup _rollupVerifier, - contract IBridge _bridgeAddress, - struct PolygonZKEVM.InitializePackedParameters initializePackedParameters, - bytes32 genesisRoot, - string _trustedSequencerURL, - string _networkName - ) public -``` - -#### Parameters: - -| Name | Type | Description | -| :--------------------------- | :--------------------------------------------- | :------------------------------------------------- | -| `_globalExitRootManager` | contract IGlobalExitRootManager | Global exit root manager address | -| `_matic` | contract IERC20Upgradeable | MATIC token address | -| `_rollupVerifier` | contract IVerifierRollup | Rollup verifier address | -| `_bridgeAddress` | contract IBridge | Bridge address | -| `initializePackedParameters` | struct PolygonZKEVM.InitializePackedParameters | Struct to save gas and avoid stack too depp errors | -| `genesisRoot` | bytes32 | Rollup genesis root | -| `_trustedSequencerURL` | string | Trusted sequencer URL | -| `_networkName` | string | L2 network name | - -### sequenceBatches - -```solidity - function sequenceBatches( - struct PolygonZKEVM.BatchData[] batches - ) public -``` - -Allows a sequencer to send multiple batches - -#### Parameters: - -| Name | Type | Description | -| :-------- | :------------------------------ | :------------------------------------------------------------------------- | -| `batches` | struct PolygonZKEVM.BatchData[] | Struct array which the necessary data to append new batces ot the sequence | - -### verifyBatches - -```solidity - function verifyBatches( - uint64 initNumBatch, - uint64 finalNewBatch, - uint64 newLocalExitRoot, - bytes32 newStateRoot, - bytes32 proofA, - uint256[2] proofB, - uint256[2][2] proofC - ) public -``` - -Allows an aggregator to verify multiple batches - -#### Parameters: - -| Name | Type | Description | -| :----------------- | :------------ | :------------------------------------------------- | -| `initNumBatch` | uint64 | Batch which the aggregator starts the verification | -| `finalNewBatch` | uint64 | Last batch aggregator intends to verify | -| `newLocalExitRoot` | uint64 | New local exit root once the batch is processed | -| `newStateRoot` | bytes32 | New State root once the batch is processed | -| `proofA` | bytes32 | zk-snark input | -| `proofB` | uint256[2] | zk-snark input | -| `proofC` | uint256[2][2] | zk-snark input | - -### trustedVerifyBatches - -```solidity - function trustedVerifyBatches( - uint64 pendingStateNum, - uint64 initNumBatch, - uint64 finalNewBatch, - bytes32 newLocalExitRoot, - bytes32 newStateRoot, - uint256[2] proofA, - uint256[2][2] proofB, - uint256[2] proofC - ) public -``` - -Allows an aggregator to verify multiple batches - -#### Parameters: - -| Name | Type | Description | -| :----------------- | :------------ | :---------------------------------------------------- | -| `pendingStateNum` | uint64 | Init pending state, 0 when consolidated state is used | -| `initNumBatch` | uint64 | Batch which the aggregator starts the verification | -| `finalNewBatch` | uint64 | Last batch aggregator intends to verify | -| `newLocalExitRoot` | bytes32 | New local exit root once the batch is processed | -| `newStateRoot` | bytes32 | New State root once the batch is processed | -| `proofA` | uint256[2] | zk-snark input | -| `proofB` | uint256[2][2] | zk-snark input | -| `proofC` | uint256[2] | zk-snark input | - -### \_verifyBatches - -```solidity - function _verifyBatches( - uint64 initNumBatch, - uint64 finalNewBatch, - uint64 newLocalExitRoot, - bytes32 newStateRoot, - bytes32 proofA, - uint256[2] proofB, - uint256[2][2] proofC - ) internal -``` - -Verify batches internal function - -#### Parameters: - -| Name | Type | Description | -| :----------------- | :------------ | :------------------------------------------------- | -| `initNumBatch` | uint64 | Batch which the aggregator starts the verification | -| `finalNewBatch` | uint64 | Last batch aggregator intends to verify | -| `newLocalExitRoot` | uint64 | New local exit root once the batch is processed | -| `newStateRoot` | bytes32 | New State root once the batch is processed | -| `proofA` | bytes32 | zk-snark input | -| `proofB` | uint256[2] | zk-snark input | -| `proofC` | uint256[2][2] | zk-snark input | - -### \_tryConsolidatePendingState - -```solidity - function _tryConsolidatePendingState( - ) internal -``` - -Internal function to consolidate the state automatically once sequence or verify batches are called -It trys to consolidate the first and the middle pending state - -### consolidatePendingState - -```solidity - function consolidatePendingState( - uint64 pendingStateNum - ) public -``` - -Allows to consolidate any pending state that has already exceed the pendingStateTimeout -Can be called by the trusted aggregator, which can consolidate any state without the timeout restrictions - -#### Parameters: - -| Name | Type | Description | -| :---------------- | :----- | :--------------------------- | -| `pendingStateNum` | uint64 | Pending state to consolidate | - -### \_updateBatchFee - -```solidity - function _updateBatchFee( - ) internal -``` - -Function to update the batch fee based on the new verfied batches -The batch fee will not be updated when the trusted aggregator verify batches - -### forceBatch - -```solidity - function forceBatch( - bytes transactions, - uint256 maticAmount - ) public -``` - -Allows a sequencer/user to force a batch of L2 transactions. -This should be used only in extreme cases where the trusted sequencer does not work as expected - -#### Parameters: - -| Name | Type | Description | -| :------------- | :------ | :-------------------------------------------------------------- | -| `transactions` | bytes | L2 ethereum transactions EIP-155 or pre-EIP-155 with signature: | -| `maticAmount` | uint256 | Max amount of MATIC tokens that the sender is willing to pay | - -### sequenceForceBatches - -```solidity - function sequenceForceBatches( - struct PolygonZKEVM.ForcedBatchData[] batches - ) public -``` - -Allows anyone to sequence forced Batches if the trusted sequencer do not have done it in the timeout period - -#### Parameters: - -| Name | Type | Description | -| :-------- | :------------------------------------ | :------------------------------------------------------------------------- | -| `batches` | struct PolygonZKEVM.ForcedBatchData[] | Struct array which the necessary data to append new batces ot the sequence | - -### setTrustedSequencer - -```solidity - function setTrustedSequencer( - address newTrustedSequencer - ) public -``` - -Allow the admin to set a new trusted sequencer - -#### Parameters: - -| Name | Type | Description | -| :-------------------- | :------ | :------------------------------------ | -| `newTrustedSequencer` | address | Address of the new trusted sequuencer | - -### setForceBatchAllowed - -```solidity - function setForceBatchAllowed( - bool newForceBatchAllowed - ) public -``` - -Allow the admin to allow/disallow the forceBatch functionality - -#### Parameters: - -| Name | Type | Description | -| :--------------------- | :--- | :----------------------------------------------------- | -| `newForceBatchAllowed` | bool | Whether is allowed or not the forceBatch functionality | - -### setTrustedSequencerURL - -```solidity - function setTrustedSequencerURL( - string newTrustedSequencerURL - ) public -``` - -Allow the admin to set the trusted sequencer URL - -#### Parameters: - -| Name | Type | Description | -| :----------------------- | :----- | :----------------------- | -| `newTrustedSequencerURL` | string | URL of trusted sequencer | - -### setTrustedAggregator - -```solidity - function setTrustedAggregator( - address newTrustedAggregator - ) public -``` - -Allow the admin to set a new trusted aggregator address -If address 0 is set, everyone is free to aggregate - -#### Parameters: - -| Name | Type | Description | -| :--------------------- | :------ | :------------------------------------ | -| `newTrustedAggregator` | address | Address of the new trusted aggregator | - -### setTrustedAggregatorTimeout - -```solidity - function setTrustedAggregatorTimeout( - uint64 newTrustedAggregatorTimeout - ) public -``` - -Allow the admin to set a new trusted aggregator timeout -The timeout can only be lowered, except if emergency state is active - -#### Parameters: - -| Name | Type | Description | -| :---------------------------- | :----- | :-------------------------- | -| `newTrustedAggregatorTimeout` | uint64 | Trusted aggreagator timeout | - -### setPendingStateTimeout - -```solidity - function setPendingStateTimeout( - uint64 newPendingStateTimeout - ) public -``` - -Allow the admin to set a new trusted aggregator timeout -The timeout can only be lowered, except if emergency state is active - -#### Parameters: - -| Name | Type | Description | -| :----------------------- | :----- | :-------------------------- | -| `newPendingStateTimeout` | uint64 | Trusted aggreagator timeout | - -### setMultiplierBatchFee - -```solidity - function setMultiplierBatchFee( - uint16 newMultiplierBatchFee - ) public -``` - -Allow the admin to set a new multiplier batch fee - -#### Parameters: - -| Name | Type | Description | -| :---------------------- | :----- | :------------------- | -| `newMultiplierBatchFee` | uint16 | multiplier bathc fee | - -### setVeryBatchTimeTarget - -```solidity - function setVeryBatchTimeTarget( - uint64 newVeryBatchTimeTarget - ) public -``` - -Allow the admin to set a new verify batch time target - -#### Parameters: - -| Name | Type | Description | -| :----------------------- | :----- | :----------------------- | -| `newVeryBatchTimeTarget` | uint64 | Verify batch time target | - -### setAdmin - -```solidity - function setAdmin( - address newAdmin - ) public -``` - -Allow the current admin to set a new admin address - -#### Parameters: - -| Name | Type | Description | -| :--------- | :------ | :----------------------- | -| `newAdmin` | address | Address of the new admin | - -### overridePendingState - -```solidity - function overridePendingState( - uint64 initPendingStateNum, - uint64 finalPendingStateNum, - uint64 initNumBatch, - uint64 finalNewBatch, - bytes32 newLocalExitRoot, - bytes32 newStateRoot, - uint256[2] proofA, - uint256[2][2] proofB, - uint256[2] proofC - ) public -``` - -Allows to halt the PoE if its possible to prove a different state root given the same batches - -#### Parameters: - -| Name | Type | Description | -| :--------------------- | :------------ | :---------------------------------------------------------------------- | -| `initPendingStateNum` | uint64 | Init pending state, 0 when consolidated state is used | -| `finalPendingStateNum` | uint64 | Final pending state, that will be used to compare with the newStateRoot | -| `initNumBatch` | uint64 | Batch which the aggregator starts the verification | -| `finalNewBatch` | uint64 | Last batch aggregator intends to verify | -| `newLocalExitRoot` | bytes32 | New local exit root once the batch is processed | -| `newStateRoot` | bytes32 | New State root once the batch is processed | -| `proofA` | uint256[2] | zk-snark input | -| `proofB` | uint256[2][2] | zk-snark input | -| `proofC` | uint256[2] | zk-snark input | - -### proveNonDeterministicPendingState - -```solidity - function proveNonDeterministicPendingState( - uint64 initPendingStateNum, - uint64 finalPendingStateNum, - uint64 initNumBatch, - uint64 finalNewBatch, - bytes32 newLocalExitRoot, - bytes32 newStateRoot, - uint256[2] proofA, - uint256[2][2] proofB, - uint256[2] proofC - ) public -``` - -Allows to halt the PoE if its possible to prove a different state root given the same batches - -#### Parameters: - -| Name | Type | Description | -| :--------------------- | :------------ | :---------------------------------------------------------------------- | -| `initPendingStateNum` | uint64 | Init pending state, 0 when consolidated state is used | -| `finalPendingStateNum` | uint64 | Final pending state, that will be used to compare with the newStateRoot | -| `initNumBatch` | uint64 | Batch which the aggregator starts the verification | -| `finalNewBatch` | uint64 | Last batch aggregator intends to verify | -| `newLocalExitRoot` | bytes32 | New local exit root once the batch is processed | -| `newStateRoot` | bytes32 | New State root once the batch is processed | -| `proofA` | uint256[2] | zk-snark input | -| `proofB` | uint256[2][2] | zk-snark input | -| `proofC` | uint256[2] | zk-snark input | - -### \_proveDistinctPendingState - -```solidity - function _proveDistinctPendingState( - uint64 initPendingStateNum, - uint64 finalPendingStateNum, - uint64 initNumBatch, - uint64 finalNewBatch, - bytes32 newLocalExitRoot, - bytes32 newStateRoot, - uint256[2] proofA, - uint256[2][2] proofB, - uint256[2] proofC - ) internal -``` - -Internal functoin that prove a different state root given the same batches to verify - -#### Parameters: - -| Name | Type | Description | -| :--------------------- | :------------ | :---------------------------------------------------------------------- | -| `initPendingStateNum` | uint64 | Init pending state, 0 when consolidated state is used | -| `finalPendingStateNum` | uint64 | Final pending state, that will be used to compare with the newStateRoot | -| `initNumBatch` | uint64 | Batch which the aggregator starts the verification | -| `finalNewBatch` | uint64 | Last batch aggregator intends to verify | -| `newLocalExitRoot` | bytes32 | New local exit root once the batch is processed | -| `newStateRoot` | bytes32 | New State root once the batch is processed | -| `proofA` | uint256[2] | zk-snark input | -| `proofB` | uint256[2][2] | zk-snark input | -| `proofC` | uint256[2] | zk-snark input | - -### activateEmergencyState - -```solidity - function activateEmergencyState( - uint64 sequencedBatchNum - ) external -``` - -Function to activate emergency state, which also enable the emergency mode on both PoE and Bridge contrats -If not called by the owner owner must be provided a batcnNum that does not have been aggregated in a HALT_AGGREGATION_TIMEOUT period - -#### Parameters: - -| Name | Type | Description | -| :------------------ | :----- | :------------------------------------------------------------------------------- | -| `sequencedBatchNum` | uint64 | Sequenced batch number that has not been aggreagated in HALT_AGGREGATION_TIMEOUT | - -### deactivateEmergencyState - -```solidity - function deactivateEmergencyState( - ) external -``` - -Function to deactivate emergency state on both PoE and Bridge contrats - -### \_activateEmergencyState - -```solidity - function _activateEmergencyState( - ) internal -``` - -Internal function to activate emergency state on both PoE and Bridge contrats - -### getCurrentBatchFee - -```solidity - function getCurrentBatchFee( - ) public returns (uint256) -``` - -Function to get the batch fee - -### getLastVerifiedBatch - -```solidity - function getLastVerifiedBatch( - ) public returns (uint64) -``` - -Get the last verified batch - -### isPendingStateConsolidable - -```solidity - function isPendingStateConsolidable( - ) public returns (bool) -``` - -Returns a boolean that indicates if the pendingStateNum is or not consolidable -Note that his function do not check if the pending state currently exist, or if it's consolidated already - -### calculateRewardPerBatch - -```solidity - function calculateRewardPerBatch( - ) public returns (uint256) -``` - -Function to calculate the reward to verify a single batch - -### getInputSnarkBytes - -```solidity - function getInputSnarkBytes( - uint64 initNumBatch, - uint64 finalNewBatch, - bytes32 newLocalExitRoot, - bytes32 newStateRoot - ) public returns (bytes) -``` - -Function to calculate the input snark bytes - -#### Parameters: - -| Name | Type | Description | -| :----------------- | :------ | :------------------------------------------------- | -| `initNumBatch` | uint64 | Batch which the aggregator starts teh verification | -| `finalNewBatch` | uint64 | Last batch aggregator intends to verify | -| `newLocalExitRoot` | bytes32 | New local exit root once the batch is processed | -| `newStateRoot` | bytes32 | New State root once the batch is processed | - -## Events - -### SequenceBatches - -```solidity - event SequenceBatches( - ) -``` - -Emitted when the trusted sequencer sends a new batch of transactions - -### ForceBatch - -```solidity - event ForceBatch( - ) -``` - -Emitted when a batch is forced - -### SequenceForceBatches - -```solidity - event SequenceForceBatches( - ) -``` - -Emitted when forced batches are sequenced by not the trusted sequencer - -### VerifyBatches - -```solidity - event VerifyBatches( - ) -``` - -Emitted when a aggregator verifies batches - -### TrustedVerifyBatches - -```solidity - event TrustedVerifyBatches( - ) -``` - -Emitted when the trusted aggregator verifies batches - -### ConsolidatePendingState - -```solidity - event ConsolidatePendingState( - ) -``` - -Emitted when pending state is consolidated - -### SetTrustedSequencer - -```solidity - event SetTrustedSequencer( - ) -``` - -Emitted when the admin update the trusted sequencer address - -### SetForceBatchAllowed - -```solidity - event SetForceBatchAllowed( - ) -``` - -Emitted when the admin update the forcebatch boolean - -### SetTrustedSequencerURL - -```solidity - event SetTrustedSequencerURL( - ) -``` - -Emitted when the admin update the seequencer URL - -### SetTrustedAggregatorTimeout - -```solidity - event SetTrustedAggregatorTimeout( - ) -``` - -Emitted when the admin update the trusted aggregator timeout - -### SetPendingStateTimeout - -```solidity - event SetPendingStateTimeout( - ) -``` - -Emitted when the admin update the pending state timeout - -### SetTrustedAggregator - -```solidity - event SetTrustedAggregator( - ) -``` - -Emitted when the admin update the trusted aggregator address - -### SetMultiplierBatchFee - -```solidity - event SetMultiplierBatchFee( - ) -``` - -Emitted when the admin update the multiplier batch fee - -### SetVeryBatchTimeTarget - -```solidity - event SetVeryBatchTimeTarget( - ) -``` - -Emitted when the admin update the verify batch timeout - -### SetAdmin - -```solidity - event SetAdmin( - ) -``` - -Emitted when a admin update his address - -### ProveNonDeterministicPendingState - -```solidity - event ProveNonDeterministicPendingState( - ) -``` - -Emitted when is proved a different state given the same batches - -### OverridePendingState - -```solidity - event OverridePendingState( - ) -``` - -Emitted when the trusted aggregator overrides pending state diff --git a/index.js b/index.js index f24b50d60..76fa957d3 100644 --- a/index.js +++ b/index.js @@ -1,13 +1,13 @@ -module.exports.Bridge = require('./compiled-contracts/Bridge.json'); +module.exports.PolygonZKEVMBridge = require('./compiled-contracts/PolygonZKEVMBridge.json'); module.exports.GlobalExitRootManager = require('./compiled-contracts/GlobalExitRootManager.json'); module.exports.GlobalExitRootManagerL2 = require('./compiled-contracts/GlobalExitRootManagerL2.json'); -module.exports.ProofOfEfficiency = require('./compiled-contracts/ProofOfEfficiency.json'); +module.exports.PolygonZKEVM = require('./compiled-contracts/PolygonZKEVM.json'); module.exports.TokenWrapped = require('./compiled-contracts/TokenWrapped.json'); module.exports.Verifier = require('./compiled-contracts/Verifier.json'); -module.exports.BridgeMock = require('./compiled-contracts/BridgeMock.json'); +module.exports.PolygonZKEVMBridgeMock = require('./compiled-contracts/PolygonZKEVMBridgeMock.json'); module.exports.ERC20PermitMock = require('./compiled-contracts/ERC20PermitMock.json'); module.exports.GlobalExitRootManagerL2Mock = require('./compiled-contracts/GlobalExitRootManagerL2Mock.json'); module.exports.GlobalExitRootManagerMock = require('./compiled-contracts/GlobalExitRootManagerMock.json'); -module.exports.ProofOfEfficiencyMock = require('./compiled-contracts/ProofOfEfficiencyMock.json'); +module.exports.PolygonZKEVMMock = require('./compiled-contracts/PolygonZKEVMMock.json'); module.exports.VerifierRollupHelperMock = require('./compiled-contracts/VerifierRollupHelperMock.json'); module.exports.PermitHelper = require('./src/permit-helper'); diff --git a/test/contracts/bridge.test.js b/test/contracts/bridge.test.js index 6f334dc8c..ba1d9abe1 100644 --- a/test/contracts/bridge.test.js +++ b/test/contracts/bridge.test.js @@ -10,13 +10,13 @@ function calculateGlobalExitRoot(mainnetExitRoot, rollupExitRoot) { return ethers.utils.solidityKeccak256(['bytes32', 'bytes32'], [mainnetExitRoot, rollupExitRoot]); } -describe('Bridge Contract', () => { +describe('PolygonZKEVMBridge Contract', () => { let deployer; let rollup; let acc1; let globalExitRootManager; - let bridgeContract; + let polygonZKEVMBridgeContract; let tokenContract; const tokenName = 'Matic Token'; @@ -44,13 +44,13 @@ describe('Bridge Contract', () => { const globalExitRootManagerFactory = await ethers.getContractFactory('GlobalExitRootManager'); globalExitRootManager = await upgrades.deployProxy(globalExitRootManagerFactory, [], { initializer: false }); - // deploy bridge - const bridgeFactory = await ethers.getContractFactory('Bridge'); - bridgeContract = await upgrades.deployProxy(bridgeFactory, [], { initializer: false }); + // deploy PolygonZKEVMBridge + const polygonZKEVMBridgeFactory = await ethers.getContractFactory('PolygonZKEVMBridge'); + polygonZKEVMBridgeContract = await upgrades.deployProxy(polygonZKEVMBridgeFactory, [], { initializer: false }); - await globalExitRootManager.initialize(rollup.address, bridgeContract.address); + await globalExitRootManager.initialize(rollup.address, polygonZKEVMBridgeContract.address); - await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, polygonZKEVMAddress); + await polygonZKEVMBridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, polygonZKEVMAddress); // deploy token const maticTokenFactory = await ethers.getContractFactory('ERC20PermitMock'); @@ -64,13 +64,13 @@ describe('Bridge Contract', () => { }); it('should check the constructor parameters', async () => { - expect(await bridgeContract.globalExitRootManager()).to.be.equal(globalExitRootManager.address); - expect(await bridgeContract.networkID()).to.be.equal(networkIDMainnet); - expect(await bridgeContract.poeAddress()).to.be.equal(polygonZKEVMAddress); + expect(await polygonZKEVMBridgeContract.globalExitRootManager()).to.be.equal(globalExitRootManager.address); + expect(await polygonZKEVMBridgeContract.networkID()).to.be.equal(networkIDMainnet); + expect(await polygonZKEVMBridgeContract.poeAddress()).to.be.equal(polygonZKEVMAddress); }); - it('should bridge asset and verify merkle proof', async () => { - const depositCount = await bridgeContract.depositCount(); + it('should PolygonZKEVMBridge asset and verify merkle proof', async () => { + const depositCount = await polygonZKEVMBridgeContract.depositCount(); const originNetwork = networkIDMainnet; const tokenAddress = tokenContract.address; const amount = ethers.utils.parseEther('10'); @@ -81,14 +81,14 @@ describe('Bridge Contract', () => { const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); const balanceDeployer = await tokenContract.balanceOf(deployer.address); - const balanceBridge = await tokenContract.balanceOf(bridgeContract.address); + const balanceBridge = await tokenContract.balanceOf(polygonZKEVMBridgeContract.address); const rollupExitRoot = await globalExitRootManager.lastRollupExitRoot(); // create a new deposit - await expect(tokenContract.approve(bridgeContract.address, amount)) + await expect(tokenContract.approve(polygonZKEVMBridgeContract.address, amount)) .to.emit(tokenContract, 'Approval') - .withArgs(deployer.address, bridgeContract.address, amount); + .withArgs(deployer.address, polygonZKEVMBridgeContract.address, amount); // pre compute root merkle tree in Js const height = 32; @@ -105,17 +105,17 @@ describe('Bridge Contract', () => { merkleTree.add(leafValue); const rootJSMainnet = merkleTree.getRoot(); - await expect(bridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x')) - .to.emit(bridgeContract, 'BridgeEvent') + await expect(polygonZKEVMBridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x')) + .to.emit(polygonZKEVMBridgeContract, 'BridgeEvent') .withArgs(LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount) .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') .withArgs(rootJSMainnet, rollupExitRoot); expect(await tokenContract.balanceOf(deployer.address)).to.be.equal(balanceDeployer.sub(amount)); - expect(await tokenContract.balanceOf(bridgeContract.address)).to.be.equal(balanceBridge.add(amount)); + expect(await tokenContract.balanceOf(polygonZKEVMBridgeContract.address)).to.be.equal(balanceBridge.add(amount)); // check merkle root with SC - const rootSCMainnet = await bridgeContract.getDepositRoot(); + const rootSCMainnet = await polygonZKEVMBridgeContract.getDepositRoot(); expect(rootSCMainnet).to.be.equal(rootJSMainnet); // check merkle proof @@ -124,7 +124,7 @@ describe('Bridge Contract', () => { // verify merkle proof expect(verifyMerkleProof(leafValue, proof, index, rootSCMainnet)).to.be.equal(true); - expect(await bridgeContract.verifyMerkleProof( + expect(await polygonZKEVMBridgeContract.verifyMerkleProof( leafValue, proof, index, @@ -135,8 +135,8 @@ describe('Bridge Contract', () => { expect(computedGlobalExitRoot).to.be.equal(await globalExitRootManager.getLastGlobalExitRoot()); }); - it('should bridge message and verify merkle proof', async () => { - const depositCount = await bridgeContract.depositCount(); + it('should PolygonZKEVMBridge message and verify merkle proof', async () => { + const depositCount = await polygonZKEVMBridgeContract.depositCount(); const originNetwork = networkIDMainnet; const originAddress = deployer.address; const amount = ethers.utils.parseEther('10'); @@ -162,8 +162,8 @@ describe('Bridge Contract', () => { merkleTree.add(leafValue); const rootJSMainnet = merkleTree.getRoot(); - await expect(bridgeContract.bridgeMessage(destinationNetwork, destinationAddress, metadata, { value: amount })) - .to.emit(bridgeContract, 'BridgeEvent') + await expect(polygonZKEVMBridgeContract.bridgeMessage(destinationNetwork, destinationAddress, metadata, { value: amount })) + .to.emit(polygonZKEVMBridgeContract, 'BridgeEvent') .withArgs( LEAF_TYPE_MESSAGE, originNetwork, @@ -176,7 +176,7 @@ describe('Bridge Contract', () => { ); // check merkle root with SC - const rootSCMainnet = await bridgeContract.getDepositRoot(); + const rootSCMainnet = await polygonZKEVMBridgeContract.getDepositRoot(); expect(rootSCMainnet).to.be.equal(rootJSMainnet); // check merkle proof @@ -185,7 +185,7 @@ describe('Bridge Contract', () => { // verify merkle proof expect(verifyMerkleProof(leafValue, proof, index, rootSCMainnet)).to.be.equal(true); - expect(await bridgeContract.verifyMerkleProof( + expect(await polygonZKEVMBridgeContract.verifyMerkleProof( leafValue, proof, index, @@ -247,7 +247,7 @@ describe('Bridge Contract', () => { // verify merkle proof expect(verifyMerkleProof(leafValue, proof, index, rootJSRollup)).to.be.equal(true); - expect(await bridgeContract.verifyMerkleProof( + expect(await polygonZKEVMBridgeContract.verifyMerkleProof( leafValue, proof, index, @@ -258,7 +258,7 @@ describe('Bridge Contract', () => { * claim * Can't claim without tokens */ - await expect(bridgeContract.claimAsset( + await expect(polygonZKEVMBridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -272,13 +272,13 @@ describe('Bridge Contract', () => { )).to.be.revertedWith('ERC20: transfer amount exceeds balance'); // transfer tokens, then claim - await expect(tokenContract.transfer(bridgeContract.address, amount)) + await expect(tokenContract.transfer(polygonZKEVMBridgeContract.address, amount)) .to.emit(tokenContract, 'Transfer') - .withArgs(deployer.address, bridgeContract.address, amount); + .withArgs(deployer.address, polygonZKEVMBridgeContract.address, amount); - expect(false).to.be.equal(await bridgeContract.isClaimed(index)); + expect(false).to.be.equal(await polygonZKEVMBridgeContract.isClaimed(index)); - await expect(bridgeContract.claimAsset( + await expect(polygonZKEVMBridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -290,7 +290,7 @@ describe('Bridge Contract', () => { amount, metadata, )) - .to.emit(bridgeContract, 'ClaimEvent') + .to.emit(polygonZKEVMBridgeContract, 'ClaimEvent') .withArgs( index, originNetwork, @@ -298,10 +298,10 @@ describe('Bridge Contract', () => { destinationAddress, amount, ).to.emit(tokenContract, 'Transfer') - .withArgs(bridgeContract.address, acc1.address, amount); + .withArgs(polygonZKEVMBridgeContract.address, acc1.address, amount); // Can't claim because nullifier - await expect(bridgeContract.claimAsset( + await expect(polygonZKEVMBridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -312,8 +312,8 @@ describe('Bridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('Bridge::_verifyLeaf: ALREADY_CLAIMED'); - expect(true).to.be.equal(await bridgeContract.isClaimed(index)); + )).to.be.revertedWith('PolygonZKEVMBridge::_verifyLeaf: ALREADY_CLAIMED'); + expect(true).to.be.equal(await polygonZKEVMBridgeContract.isClaimed(index)); }); it('should claim tokens from Rollup to Mainnet', async () => { @@ -367,7 +367,7 @@ describe('Bridge Contract', () => { // verify merkle proof expect(verifyMerkleProof(leafValue, proof, index, rootJSRollup)).to.be.equal(true); - expect(await bridgeContract.verifyMerkleProof( + expect(await polygonZKEVMBridgeContract.verifyMerkleProof( leafValue, proof, index, @@ -383,11 +383,11 @@ describe('Bridge Contract', () => { const salt = ethers.utils.solidityKeccak256(['uint32', 'address'], [networkIDRollup, tokenAddress]); const minimalBytecodeProxy = tokenWrappedFactory.bytecode; const hashInitCode = ethers.utils.solidityKeccak256(['bytes', 'bytes'], [minimalBytecodeProxy, metadataToken]); - const precalculateWrappedErc20 = await ethers.utils.getCreate2Address(bridgeContract.address, salt, hashInitCode); + const precalculateWrappedErc20 = await ethers.utils.getCreate2Address(polygonZKEVMBridgeContract.address, salt, hashInitCode); const newWrappedToken = tokenWrappedFactory.attach(precalculateWrappedErc20); // Use precalculatedWrapperAddress and check if matches - expect(await bridgeContract.precalculatedWrapperAddress( + expect(await polygonZKEVMBridgeContract.precalculatedWrapperAddress( networkIDRollup, tokenAddress, tokenName, @@ -395,7 +395,7 @@ describe('Bridge Contract', () => { decimals, )).to.be.equal(precalculateWrappedErc20); - await expect(bridgeContract.claimAsset( + await expect(polygonZKEVMBridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -407,27 +407,33 @@ describe('Bridge Contract', () => { amount, metadata, )) - .to.emit(bridgeContract, 'ClaimEvent') + .to.emit(polygonZKEVMBridgeContract, 'ClaimEvent') .withArgs( index, originNetwork, tokenAddress, destinationAddress, amount, - ).to.emit(bridgeContract, 'NewWrappedToken') + ).to.emit(polygonZKEVMBridgeContract, 'NewWrappedToken') .withArgs(originNetwork, tokenAddress, precalculateWrappedErc20) .to.emit(newWrappedToken, 'Transfer') .withArgs(ethers.constants.AddressZero, deployer.address, amount); // Assert maps created - const newTokenInfo = await bridgeContract.wrappedTokenToTokenInfo(precalculateWrappedErc20); + const newTokenInfo = await polygonZKEVMBridgeContract.wrappedTokenToTokenInfo(precalculateWrappedErc20); expect(newTokenInfo.originNetwork).to.be.equal(networkIDRollup); expect(newTokenInfo.originTokenAddress).to.be.equal(tokenAddress); - expect(await bridgeContract.getTokenWrappedAddress(networkIDRollup, tokenAddress)).to.be.equal(precalculateWrappedErc20); - expect(await bridgeContract.getTokenWrappedAddress(networkIDRollup, tokenAddress)).to.be.equal(precalculateWrappedErc20); + expect(await polygonZKEVMBridgeContract.getTokenWrappedAddress( + networkIDRollup, + tokenAddress, + )).to.be.equal(precalculateWrappedErc20); + expect(await polygonZKEVMBridgeContract.getTokenWrappedAddress( + networkIDRollup, + tokenAddress, + )).to.be.equal(precalculateWrappedErc20); - expect(await bridgeContract.tokenInfoToWrappedToken(salt)).to.be.equal(precalculateWrappedErc20); + expect(await polygonZKEVMBridgeContract.tokenInfoToWrappedToken(salt)).to.be.equal(precalculateWrappedErc20); // Check the wrapper info expect(await newWrappedToken.name()).to.be.equal(tokenName); @@ -435,7 +441,7 @@ describe('Bridge Contract', () => { expect(await newWrappedToken.decimals()).to.be.equal(decimals); // Can't claim because nullifier - await expect(bridgeContract.claimAsset( + await expect(polygonZKEVMBridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -446,22 +452,22 @@ describe('Bridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('Bridge::_verifyLeaf: ALREADY_CLAIMED'); + )).to.be.revertedWith('PolygonZKEVMBridge::_verifyLeaf: ALREADY_CLAIMED'); // Check new token expect(await newWrappedToken.totalSupply()).to.be.equal(amount); // Burn Tokens - const depositCount = await bridgeContract.depositCount(); + const depositCount = await polygonZKEVMBridgeContract.depositCount(); const wrappedTokenAddress = newWrappedToken.address; const newDestinationNetwork = networkIDRollup; const rollupExitRoot = await globalExitRootManager.lastRollupExitRoot(); // create a new deposit - await expect(newWrappedToken.approve(bridgeContract.address, amount)) + await expect(newWrappedToken.approve(polygonZKEVMBridgeContract.address, amount)) .to.emit(newWrappedToken, 'Approval') - .withArgs(deployer.address, bridgeContract.address, amount); + .withArgs(deployer.address, polygonZKEVMBridgeContract.address, amount); /* * pre compute root merkle tree in Js @@ -482,7 +488,7 @@ describe('Bridge Contract', () => { amount, metadataHashMainnet, ); - const leafValueMainnetSC = await bridgeContract.getLeafValue( + const leafValueMainnetSC = await polygonZKEVMBridgeContract.getLeafValue( LEAF_TYPE_ASSET, originNetwork, originTokenAddress, @@ -497,8 +503,8 @@ describe('Bridge Contract', () => { const rootJSMainnet = merkleTreeMainnet.getRoot(); // Tokens are burnt - await expect(bridgeContract.bridgeAsset(wrappedTokenAddress, newDestinationNetwork, destinationAddress, amount, '0x')) - .to.emit(bridgeContract, 'BridgeEvent') + await expect(polygonZKEVMBridgeContract.bridgeAsset(wrappedTokenAddress, newDestinationNetwork, destinationAddress, amount, '0x')) + .to.emit(polygonZKEVMBridgeContract, 'BridgeEvent') .withArgs( LEAF_TYPE_ASSET, originNetwork, @@ -516,10 +522,10 @@ describe('Bridge Contract', () => { expect(await newWrappedToken.totalSupply()).to.be.equal(0); expect(await newWrappedToken.balanceOf(deployer.address)).to.be.equal(0); - expect(await newWrappedToken.balanceOf(bridgeContract.address)).to.be.equal(0); + expect(await newWrappedToken.balanceOf(polygonZKEVMBridgeContract.address)).to.be.equal(0); // check merkle root with SC - const rootSCMainnet = await bridgeContract.getDepositRoot(); + const rootSCMainnet = await polygonZKEVMBridgeContract.getDepositRoot(); expect(rootSCMainnet).to.be.equal(rootJSMainnet); // check merkle proof @@ -528,7 +534,7 @@ describe('Bridge Contract', () => { // verify merkle proof expect(verifyMerkleProof(leafValueMainnet, proofMainnet, indexMainnet, rootSCMainnet)).to.be.equal(true); - expect(await bridgeContract.verifyMerkleProof( + expect(await polygonZKEVMBridgeContract.verifyMerkleProof( leafValueMainnet, proofMainnet, indexMainnet, @@ -539,8 +545,8 @@ describe('Bridge Contract', () => { expect(computedGlobalExitRoot2).to.be.equal(await globalExitRootManager.getLastGlobalExitRoot()); }); - it('should bridge and sync the current root with events', async () => { - const depositCount = await bridgeContract.depositCount(); + it('should PolygonZKEVMBridge and sync the current root with events', async () => { + const depositCount = await polygonZKEVMBridgeContract.depositCount(); const originNetwork = networkIDMainnet; const tokenAddress = ethers.constants.AddressZero; // Ether const amount = ethers.utils.parseEther('10'); @@ -550,7 +556,7 @@ describe('Bridge Contract', () => { const metadata = '0x';// since is ether does not have metadata // create 3 new deposit - await expect(bridgeContract.bridgeAsset( + await expect(polygonZKEVMBridgeContract.bridgeAsset( tokenAddress, destinationNetwork, destinationAddress, @@ -559,7 +565,7 @@ describe('Bridge Contract', () => { { value: amount }, )) .to.emit( - bridgeContract, + polygonZKEVMBridgeContract, 'BridgeEvent', ) .withArgs( @@ -573,7 +579,7 @@ describe('Bridge Contract', () => { depositCount, ); - await expect(bridgeContract.bridgeAsset( + await expect(polygonZKEVMBridgeContract.bridgeAsset( tokenAddress, destinationNetwork, destinationAddress, @@ -582,7 +588,7 @@ describe('Bridge Contract', () => { { value: amount }, )) .to.emit( - bridgeContract, + polygonZKEVMBridgeContract, 'BridgeEvent', ) .withArgs( @@ -596,7 +602,7 @@ describe('Bridge Contract', () => { depositCount.add(1), ); - await expect(bridgeContract.bridgeAsset( + await expect(polygonZKEVMBridgeContract.bridgeAsset( tokenAddress, destinationNetwork, destinationAddress, @@ -605,7 +611,7 @@ describe('Bridge Contract', () => { { value: amount }, )) .to.emit( - bridgeContract, + polygonZKEVMBridgeContract, 'BridgeEvent', ) .withArgs( @@ -624,14 +630,14 @@ describe('Bridge Contract', () => { const merkleTree = new MerkleTreeBridge(height); // Get the deposit's events - const filter = bridgeContract.filters.BridgeEvent( + const filter = polygonZKEVMBridgeContract.filters.BridgeEvent( null, null, null, null, null, ); - const events = await bridgeContract.queryFilter(filter, 0, 'latest'); + const events = await polygonZKEVMBridgeContract.queryFilter(filter, 0, 'latest'); events.forEach((e) => { const { args } = e; const leafValue = getLeafValue( @@ -647,7 +653,7 @@ describe('Bridge Contract', () => { }); // Check merkle root with SC - const rootSC = await bridgeContract.getDepositRoot(); + const rootSC = await polygonZKEVMBridgeContract.getDepositRoot(); const rootJS = merkleTree.getRoot(); expect(rootSC).to.be.equal(rootJS); @@ -701,7 +707,7 @@ describe('Bridge Contract', () => { // verify merkle proof expect(verifyMerkleProof(leafValue, proof, index, rootJSRollup)).to.be.equal(true); - expect(await bridgeContract.verifyMerkleProof( + expect(await polygonZKEVMBridgeContract.verifyMerkleProof( leafValue, proof, index, @@ -709,7 +715,7 @@ describe('Bridge Contract', () => { )).to.be.equal(true); // Can't claim without tokens - await expect(bridgeContract.claimAsset( + await expect(polygonZKEVMBridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -723,12 +729,12 @@ describe('Bridge Contract', () => { )).to.be.revertedWith('ERC20: transfer amount exceeds balance'); // transfer tokens, then claim - await expect(tokenContract.transfer(bridgeContract.address, amount)) + await expect(tokenContract.transfer(polygonZKEVMBridgeContract.address, amount)) .to.emit(tokenContract, 'Transfer') - .withArgs(deployer.address, bridgeContract.address, amount); + .withArgs(deployer.address, polygonZKEVMBridgeContract.address, amount); // Check DESTINATION_NETWORK_DOES_NOT_MATCH assert - await expect(bridgeContract.claimAsset( + await expect(polygonZKEVMBridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -739,10 +745,10 @@ describe('Bridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('Bridge::_verifyLeaf: DESTINATION_NETWORK_DOES_NOT_MATCH'); + )).to.be.revertedWith('PolygonZKEVMBridge::_verifyLeaf: DESTINATION_NETWORK_DOES_NOT_MATCH'); // Check GLOBAL_EXIT_ROOT_INVALID assert - await expect(bridgeContract.claimAsset( + await expect(polygonZKEVMBridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -753,10 +759,10 @@ describe('Bridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('Bridge::_verifyLeaf: GLOBAL_EXIT_ROOT_INVALID'); + )).to.be.revertedWith('PolygonZKEVMBridge::_verifyLeaf: GLOBAL_EXIT_ROOT_INVALID'); // Check SMT_INVALID assert - await expect(bridgeContract.claimAsset( + await expect(polygonZKEVMBridgeContract.claimAsset( proof, index + 1, // Wrong index mainnetExitRoot, @@ -767,9 +773,9 @@ describe('Bridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('Bridge::_verifyLeaf: SMT_INVALID'); + )).to.be.revertedWith('PolygonZKEVMBridge::_verifyLeaf: SMT_INVALID'); - await expect(bridgeContract.claimAsset( + await expect(polygonZKEVMBridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -781,7 +787,7 @@ describe('Bridge Contract', () => { amount, metadata, )) - .to.emit(bridgeContract, 'ClaimEvent') + .to.emit(polygonZKEVMBridgeContract, 'ClaimEvent') .withArgs( index, originNetwork, @@ -789,10 +795,10 @@ describe('Bridge Contract', () => { destinationAddress, amount, ).to.emit(tokenContract, 'Transfer') - .withArgs(bridgeContract.address, deployer.address, amount); + .withArgs(polygonZKEVMBridgeContract.address, deployer.address, amount); // Check ALREADY_CLAIMED_claim - await expect(bridgeContract.claimAsset( + await expect(polygonZKEVMBridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -803,7 +809,7 @@ describe('Bridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('Bridge::_verifyLeaf: ALREADY_CLAIMED'); + )).to.be.revertedWith('PolygonZKEVMBridge::_verifyLeaf: ALREADY_CLAIMED'); }); it('should claim ether', async () => { @@ -854,7 +860,7 @@ describe('Bridge Contract', () => { // verify merkle proof expect(verifyMerkleProof(leafValue, proof, index, rootJSRollup)).to.be.equal(true); - expect(await bridgeContract.verifyMerkleProof( + expect(await polygonZKEVMBridgeContract.verifyMerkleProof( leafValue, proof, index, @@ -865,7 +871,7 @@ describe('Bridge Contract', () => { * claim * Can't claim without ether */ - await expect(bridgeContract.claimAsset( + await expect(polygonZKEVMBridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -876,34 +882,34 @@ describe('Bridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('Bridge::claimAsset: ETH_TRANSFER_FAILED'); + )).to.be.revertedWith('PolygonZKEVMBridge::claimAsset: ETH_TRANSFER_FAILED'); const balanceDeployer = await ethers.provider.getBalance(deployer.address); /* - * Create a deposit to add ether to the Bridge + * Create a deposit to add ether to the PolygonZKEVMBridge * Check deposit amount ether asserts */ - await expect(bridgeContract.bridgeAsset( + await expect(polygonZKEVMBridgeContract.bridgeAsset( tokenAddress, networkIDRollup, destinationAddress, amount, '0x', { value: ethers.utils.parseEther('100') }, - )).to.be.revertedWith('Bridge::bridge: AMOUNT_DOES_NOT_MATCH_MSG_VALUE'); + )).to.be.revertedWith('PolygonZKEVMBridge::bridgeAsset: AMOUNT_DOES_NOT_MATCH_MSG_VALUE'); // Check mainnet destination assert - await expect(bridgeContract.bridgeAsset( + await expect(polygonZKEVMBridgeContract.bridgeAsset( tokenAddress, networkIDMainnet, destinationAddress, amount, '0x', { value: amount }, - )).to.be.revertedWith('Bridge::bridge: DESTINATION_CANT_BE_ITSELF'); + )).to.be.revertedWith('PolygonZKEVMBridge::bridgeAsset: DESTINATION_CANT_BE_ITSELF'); - // This is used just to pay ether to the bridge smart contract and be able to claim it afterwards. - expect(await bridgeContract.bridgeAsset( + // This is used just to pay ether to the PolygonZKEVMBridge smart contract and be able to claim it afterwards. + expect(await polygonZKEVMBridgeContract.bridgeAsset( tokenAddress, networkIDRollup, destinationAddress, @@ -913,10 +919,10 @@ describe('Bridge Contract', () => { )); // Check balances before claim - expect(await ethers.provider.getBalance(bridgeContract.address)).to.be.equal(amount); + expect(await ethers.provider.getBalance(polygonZKEVMBridgeContract.address)).to.be.equal(amount); expect(await ethers.provider.getBalance(deployer.address)).to.be.lte(balanceDeployer.sub(amount)); - await expect(bridgeContract.claimAsset( + await expect(polygonZKEVMBridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -928,7 +934,7 @@ describe('Bridge Contract', () => { amount, metadata, )) - .to.emit(bridgeContract, 'ClaimEvent') + .to.emit(polygonZKEVMBridgeContract, 'ClaimEvent') .withArgs( index, originNetwork, @@ -938,11 +944,11 @@ describe('Bridge Contract', () => { ); // Check balances after claim - expect(await ethers.provider.getBalance(bridgeContract.address)).to.be.equal(ethers.utils.parseEther('0')); + expect(await ethers.provider.getBalance(polygonZKEVMBridgeContract.address)).to.be.equal(ethers.utils.parseEther('0')); expect(await ethers.provider.getBalance(deployer.address)).to.be.lte(balanceDeployer); // Can't claim because nullifier - await expect(bridgeContract.claimAsset( + await expect(polygonZKEVMBridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -953,7 +959,7 @@ describe('Bridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('Bridge::_verifyLeaf: ALREADY_CLAIMED'); + )).to.be.revertedWith('PolygonZKEVMBridge::_verifyLeaf: ALREADY_CLAIMED'); }); it('should claim message', async () => { @@ -1004,7 +1010,7 @@ describe('Bridge Contract', () => { // verify merkle proof expect(verifyMerkleProof(leafValue, proof, index, rootJSRollup)).to.be.equal(true); - expect(await bridgeContract.verifyMerkleProof( + expect(await polygonZKEVMBridgeContract.verifyMerkleProof( leafValue, proof, index, @@ -1015,7 +1021,7 @@ describe('Bridge Contract', () => { * claim * Can't claim a message as an assets */ - await expect(bridgeContract.claimAsset( + await expect(polygonZKEVMBridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -1026,13 +1032,13 @@ describe('Bridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('Bridge::_verifyLeaf: SMT_INVALID'); + )).to.be.revertedWith('PolygonZKEVMBridge::_verifyLeaf: SMT_INVALID'); /* * claim * Can't claim without ether */ - await expect(bridgeContract.claimMessage( + await expect(polygonZKEVMBridgeContract.claimMessage( proof, index, mainnetExitRoot, @@ -1043,34 +1049,34 @@ describe('Bridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('Bridge::claimMessage: MESSAGE_FAILED'); + )).to.be.revertedWith('PolygonZKEVMBridge::claimMessage: MESSAGE_FAILED'); const balanceDeployer = await ethers.provider.getBalance(deployer.address); /* - * Create a deposit to add ether to the Bridge + * Create a deposit to add ether to the PolygonZKEVMBridge * Check deposit amount ether asserts */ - await expect(bridgeContract.bridgeAsset( + await expect(polygonZKEVMBridgeContract.bridgeAsset( tokenAddress, networkIDRollup, destinationAddress, amount, '0x', { value: ethers.utils.parseEther('100') }, - )).to.be.revertedWith('Bridge::bridge: AMOUNT_DOES_NOT_MATCH_MSG_VALUE'); + )).to.be.revertedWith('PolygonZKEVMBridge::bridgeAsset: AMOUNT_DOES_NOT_MATCH_MSG_VALUE'); // Check mainnet destination assert - await expect(bridgeContract.bridgeAsset( + await expect(polygonZKEVMBridgeContract.bridgeAsset( tokenAddress, networkIDMainnet, destinationAddress, amount, '0x', { value: amount }, - )).to.be.revertedWith('Bridge::bridge: DESTINATION_CANT_BE_ITSELF'); + )).to.be.revertedWith('PolygonZKEVMBridge::bridgeAsset: DESTINATION_CANT_BE_ITSELF'); - // This is used just to pay ether to the bridge smart contract and be able to claim it afterwards. - expect(await bridgeContract.bridgeAsset( + // This is used just to pay ether to the PolygonZKEVMBridge smart contract and be able to claim it afterwards. + expect(await polygonZKEVMBridgeContract.bridgeAsset( tokenAddress, networkIDRollup, destinationAddress, @@ -1080,11 +1086,11 @@ describe('Bridge Contract', () => { )); // Check balances before claim - expect(await ethers.provider.getBalance(bridgeContract.address)).to.be.equal(amount); + expect(await ethers.provider.getBalance(polygonZKEVMBridgeContract.address)).to.be.equal(amount); expect(await ethers.provider.getBalance(deployer.address)).to.be.lte(balanceDeployer.sub(amount)); // Check mainnet destination assert - await expect(bridgeContract.claimAsset( + await expect(polygonZKEVMBridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -1095,9 +1101,9 @@ describe('Bridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('Bridge::_verifyLeaf: SMT_INVALID'); + )).to.be.revertedWith('PolygonZKEVMBridge::_verifyLeaf: SMT_INVALID'); - await expect(bridgeContract.claimMessage( + await expect(polygonZKEVMBridgeContract.claimMessage( proof, index, mainnetExitRoot, @@ -1109,7 +1115,7 @@ describe('Bridge Contract', () => { amount, metadata, )) - .to.emit(bridgeContract, 'ClaimEvent') + .to.emit(polygonZKEVMBridgeContract, 'ClaimEvent') .withArgs( index, originNetwork, @@ -1119,11 +1125,11 @@ describe('Bridge Contract', () => { ); // Check balances after claim - expect(await ethers.provider.getBalance(bridgeContract.address)).to.be.equal(ethers.utils.parseEther('0')); + expect(await ethers.provider.getBalance(polygonZKEVMBridgeContract.address)).to.be.equal(ethers.utils.parseEther('0')); expect(await ethers.provider.getBalance(deployer.address)).to.be.lte(balanceDeployer); // Can't claim because nullifier - await expect(bridgeContract.claimAsset( + await expect(polygonZKEVMBridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -1134,6 +1140,6 @@ describe('Bridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('Bridge::_verifyLeaf: ALREADY_CLAIMED'); + )).to.be.revertedWith('PolygonZKEVMBridge::_verifyLeaf: ALREADY_CLAIMED'); }); }); diff --git a/test/contracts/bridgeMock.test.js b/test/contracts/bridgeMock.test.js index ce57730ce..717143a28 100644 --- a/test/contracts/bridgeMock.test.js +++ b/test/contracts/bridgeMock.test.js @@ -10,12 +10,12 @@ function calculateGlobalExitRoot(mainnetExitRoot, rollupExitRoot) { return ethers.utils.solidityKeccak256(['bytes32', 'bytes32'], [mainnetExitRoot, rollupExitRoot]); } -describe('Bridge Mock Contract', () => { +describe('PolygonZKEVMBridge Mock Contract', () => { let deployer; let rollup; let globalExitRootManager; - let bridgeContract; + let polygonZKEVMBridgeContract; let tokenContract; const tokenName = 'Matic Token'; @@ -41,12 +41,12 @@ describe('Bridge Mock Contract', () => { const globalExitRootManagerFactory = await ethers.getContractFactory('GlobalExitRootManager'); globalExitRootManager = await upgrades.deployProxy(globalExitRootManagerFactory, [], { initializer: false }); - // deploy bridge - const bridgeFactory = await ethers.getContractFactory('BridgeMock'); - bridgeContract = await upgrades.deployProxy(bridgeFactory, [], { initializer: false }); + // deploy PolygonZKEVMBridge + const polygonZKEVMBridgeFactory = await ethers.getContractFactory('PolygonZKEVMBridgeMock'); + polygonZKEVMBridgeContract = await upgrades.deployProxy(polygonZKEVMBridgeFactory, [], { initializer: false }); - await globalExitRootManager.initialize(rollup.address, bridgeContract.address); - await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, polygonZKEVMAddress); + await globalExitRootManager.initialize(rollup.address, polygonZKEVMBridgeContract.address); + await polygonZKEVMBridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, polygonZKEVMAddress); // deploy token const maticTokenFactory = await ethers.getContractFactory('ERC20PermitMock'); @@ -60,12 +60,12 @@ describe('Bridge Mock Contract', () => { }); it('should check the constructor parameters', async () => { - expect(await bridgeContract.globalExitRootManager()).to.be.equal(globalExitRootManager.address); - expect(await bridgeContract.networkID()).to.be.equal(networkIDMainnet); + expect(await polygonZKEVMBridgeContract.globalExitRootManager()).to.be.equal(globalExitRootManager.address); + expect(await polygonZKEVMBridgeContract.networkID()).to.be.equal(networkIDMainnet); }); - it('should bridge and verify merkle proof', async () => { - const depositCount = await bridgeContract.depositCount(); + it('should PolygonZKEVMBridge and verify merkle proof', async () => { + const depositCount = await polygonZKEVMBridgeContract.depositCount(); const originNetwork = networkIDMainnet; const tokenAddress = tokenContract.address; const amount = ethers.utils.parseEther('10'); @@ -76,14 +76,14 @@ describe('Bridge Mock Contract', () => { const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); const balanceDeployer = await tokenContract.balanceOf(deployer.address); - const balanceBridge = await tokenContract.balanceOf(bridgeContract.address); + const balanceBridge = await tokenContract.balanceOf(polygonZKEVMBridgeContract.address); const rollupExitRoot = await globalExitRootManager.lastRollupExitRoot(); // create a new deposit - await expect(tokenContract.approve(bridgeContract.address, amount)) + await expect(tokenContract.approve(polygonZKEVMBridgeContract.address, amount)) .to.emit(tokenContract, 'Approval') - .withArgs(deployer.address, bridgeContract.address, amount); + .withArgs(deployer.address, polygonZKEVMBridgeContract.address, amount); // pre compute root merkle tree in Js const height = 32; @@ -100,17 +100,17 @@ describe('Bridge Mock Contract', () => { merkleTree.add(leafValue); const rootJSMainnet = merkleTree.getRoot(); - await expect(bridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x')) - .to.emit(bridgeContract, 'BridgeEvent') + await expect(polygonZKEVMBridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x')) + .to.emit(polygonZKEVMBridgeContract, 'BridgeEvent') .withArgs(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount) .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') .withArgs(rootJSMainnet, rollupExitRoot); expect(await tokenContract.balanceOf(deployer.address)).to.be.equal(balanceDeployer.sub(amount)); - expect(await tokenContract.balanceOf(bridgeContract.address)).to.be.equal(balanceBridge.add(amount)); + expect(await tokenContract.balanceOf(polygonZKEVMBridgeContract.address)).to.be.equal(balanceBridge.add(amount)); // check merkle root with SC - const rootSCMainnet = await bridgeContract.getDepositRoot(); + const rootSCMainnet = await polygonZKEVMBridgeContract.getDepositRoot(); expect(rootSCMainnet).to.be.equal(rootJSMainnet); // check merkle proof @@ -119,7 +119,7 @@ describe('Bridge Mock Contract', () => { // verify merkle proof expect(verifyMerkleProof(leafValue, proof, index, rootSCMainnet)).to.be.equal(true); - expect(await bridgeContract.verifyMerkleProof( + expect(await polygonZKEVMBridgeContract.verifyMerkleProof( leafValue, proof, index, @@ -130,23 +130,23 @@ describe('Bridge Mock Contract', () => { expect(computedGlobalExitRoot).to.be.equal(await globalExitRootManager.getLastGlobalExitRoot()); }); - it('shouldnt be able to bridge more thna 0.25e ehters', async () => { + it('shouldnt be able to PolygonZKEVMBridge more thna 0.25e ehters', async () => { // Add a claim leaf to rollup exit tree const tokenAddress = ethers.constants.AddressZero; // ether const amount = ethers.utils.parseEther('10'); const destinationNetwork = networkIDRollup; const destinationAddress = deployer.address; - await expect(bridgeContract.bridgeAsset( + await expect(polygonZKEVMBridgeContract.bridgeAsset( tokenAddress, destinationNetwork, destinationAddress, amount, ethers.utils.parseEther('10'), { value: ethers.utils.parseEther('10') }, - )).to.be.revertedWith('Bridge::bridge: Cannot bridge more than maxEtherBridge in internal testnet'); + )).to.be.revertedWith('PolygonZKEVMBridge::bridgeAsset: Cannot bridge more than maxEtherBridge'); - await bridgeContract.bridgeAsset( + await polygonZKEVMBridgeContract.bridgeAsset( tokenAddress, destinationNetwork, destinationAddress, diff --git a/test/contracts/bridge_permit.test.js b/test/contracts/bridge_permit.test.js index 7613d8e6a..0f0df7c15 100644 --- a/test/contracts/bridge_permit.test.js +++ b/test/contracts/bridge_permit.test.js @@ -18,12 +18,12 @@ function calculateGlobalExitRoot(mainnetExitRoot, rollupExitRoot) { return ethers.utils.solidityKeccak256(['bytes32', 'bytes32'], [mainnetExitRoot, rollupExitRoot]); } -describe('Bridge Contract Permit tests', () => { +describe('PolygonZKEVMBridge Contract Permit tests', () => { let deployer; let rollup; let globalExitRootManager; - let bridgeContract; + let polygonZKEVMBridgeContract; let tokenContract; const tokenName = 'Matic Token'; @@ -49,12 +49,12 @@ describe('Bridge Contract Permit tests', () => { const globalExitRootManagerFactory = await ethers.getContractFactory('GlobalExitRootManager'); globalExitRootManager = await upgrades.deployProxy(globalExitRootManagerFactory, [], { initializer: false }); - // deploy bridge - const bridgeFactory = await ethers.getContractFactory('Bridge'); - bridgeContract = await upgrades.deployProxy(bridgeFactory, [], { initializer: false }); + // deploy PolygonZKEVMBridge + const polygonZKEVMBridgeFactory = await ethers.getContractFactory('PolygonZKEVMBridge'); + polygonZKEVMBridgeContract = await upgrades.deployProxy(polygonZKEVMBridgeFactory, [], { initializer: false }); - await globalExitRootManager.initialize(rollup.address, bridgeContract.address); - await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, polygonZKEVMAddress); + await globalExitRootManager.initialize(rollup.address, polygonZKEVMBridgeContract.address); + await polygonZKEVMBridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, polygonZKEVMAddress); // deploy token const maticTokenFactory = await ethers.getContractFactory('TokenWrapped'); @@ -68,8 +68,8 @@ describe('Bridge Contract Permit tests', () => { await tokenContract.mint(deployer.address, tokenInitialBalance); }); - it('should bridge and with permit eip-2612 compilant', async () => { - const depositCount = await bridgeContract.depositCount(); + it('should PolygonZKEVMBridge and with permit eip-2612 compilant', async () => { + const depositCount = await polygonZKEVMBridgeContract.depositCount(); const originNetwork = networkIDMainnet; const tokenAddress = tokenContract.address; const amount = ethers.utils.parseEther('10'); @@ -80,7 +80,7 @@ describe('Bridge Contract Permit tests', () => { const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); const balanceDeployer = await tokenContract.balanceOf(deployer.address); - const balanceBridge = await tokenContract.balanceOf(bridgeContract.address); + const balanceBridge = await tokenContract.balanceOf(polygonZKEVMBridgeContract.address); const rollupExitRoot = await globalExitRootManager.lastRollupExitRoot(); @@ -99,7 +99,7 @@ describe('Bridge Contract Permit tests', () => { merkleTree.add(leafValue); const rootJSMainnet = merkleTree.getRoot(); - await expect(bridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x')) + await expect(polygonZKEVMBridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x')) .to.be.revertedWith('ERC20: insufficient allowance'); // user permit @@ -110,7 +110,7 @@ describe('Bridge Contract Permit tests', () => { const { v, r, s } = await createPermitSignature( tokenContract, deployer, - bridgeContract.address, + polygonZKEVMBridgeContract.address, amount, nonce, deadline, @@ -119,7 +119,7 @@ describe('Bridge Contract Permit tests', () => { const dataPermit = ifacePermit.encodeFunctionData('permit', [ deployer.address, - bridgeContract.address, + polygonZKEVMBridgeContract.address, amount, deadline, v, @@ -127,17 +127,17 @@ describe('Bridge Contract Permit tests', () => { s, ]); - await expect(bridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, dataPermit)) - .to.emit(bridgeContract, 'BridgeEvent') + await expect(polygonZKEVMBridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, dataPermit)) + .to.emit(polygonZKEVMBridgeContract, 'BridgeEvent') .withArgs(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount) .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') .withArgs(rootJSMainnet, rollupExitRoot); expect(await tokenContract.balanceOf(deployer.address)).to.be.equal(balanceDeployer.sub(amount)); - expect(await tokenContract.balanceOf(bridgeContract.address)).to.be.equal(balanceBridge.add(amount)); + expect(await tokenContract.balanceOf(polygonZKEVMBridgeContract.address)).to.be.equal(balanceBridge.add(amount)); // check merkle root with SC - const rootSCMainnet = await bridgeContract.getDepositRoot(); + const rootSCMainnet = await polygonZKEVMBridgeContract.getDepositRoot(); expect(rootSCMainnet).to.be.equal(rootJSMainnet); // check merkle proof @@ -146,7 +146,7 @@ describe('Bridge Contract Permit tests', () => { // verify merkle proof expect(verifyMerkleProof(leafValue, proof, index, rootSCMainnet)).to.be.equal(true); - expect(await bridgeContract.verifyMerkleProof( + expect(await polygonZKEVMBridgeContract.verifyMerkleProof( leafValue, proof, index, @@ -157,7 +157,7 @@ describe('Bridge Contract Permit tests', () => { expect(computedGlobalExitRoot).to.be.equal(await globalExitRootManager.getLastGlobalExitRoot()); }); - it('should bridge with permit DAI type contracts', async () => { + it('should PolygonZKEVMBridge with permit DAI type contracts', async () => { const { chainId } = await ethers.provider.getNetwork(); const daiTokenFactory = await ethers.getContractFactory('Dai'); const daiContract = await daiTokenFactory.deploy( @@ -166,7 +166,7 @@ describe('Bridge Contract Permit tests', () => { await daiContract.deployed(); await daiContract.mint(deployer.address, ethers.utils.parseEther('100')); - const depositCount = await bridgeContract.depositCount(); + const depositCount = await polygonZKEVMBridgeContract.depositCount(); const originNetwork = networkIDMainnet; const tokenAddress = daiContract.address; const amount = ethers.utils.parseEther('10'); @@ -180,7 +180,7 @@ describe('Bridge Contract Permit tests', () => { const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); const balanceDeployer = await daiContract.balanceOf(deployer.address); - const balanceBridge = await daiContract.balanceOf(bridgeContract.address); + const balanceBridge = await daiContract.balanceOf(polygonZKEVMBridgeContract.address); const rollupExitRoot = await globalExitRootManager.lastRollupExitRoot(); @@ -199,7 +199,7 @@ describe('Bridge Contract Permit tests', () => { merkleTree.add(leafValue); const rootJSMainnet = merkleTree.getRoot(); - await expect(bridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x')) + await expect(polygonZKEVMBridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x')) .to.be.revertedWith('Dai/insufficient-allowance'); // user permit @@ -209,14 +209,14 @@ describe('Bridge Contract Permit tests', () => { const { v, r, s } = await createPermitSignatureDaiType( daiContract, deployer, - bridgeContract.address, + polygonZKEVMBridgeContract.address, nonce, deadline, chainId, ); const dataPermit = ifacePermitDAI.encodeFunctionData('permit', [ deployer.address, - bridgeContract.address, + polygonZKEVMBridgeContract.address, nonce, deadline, true, @@ -225,17 +225,17 @@ describe('Bridge Contract Permit tests', () => { s, ]); - await expect(bridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, dataPermit)) - .to.emit(bridgeContract, 'BridgeEvent') + await expect(polygonZKEVMBridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, dataPermit)) + .to.emit(polygonZKEVMBridgeContract, 'BridgeEvent') .withArgs(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount) .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') .withArgs(rootJSMainnet, rollupExitRoot); expect(await daiContract.balanceOf(deployer.address)).to.be.equal(balanceDeployer.sub(amount)); - expect(await daiContract.balanceOf(bridgeContract.address)).to.be.equal(balanceBridge.add(amount)); + expect(await daiContract.balanceOf(polygonZKEVMBridgeContract.address)).to.be.equal(balanceBridge.add(amount)); // check merkle root with SC - const rootSCMainnet = await bridgeContract.getDepositRoot(); + const rootSCMainnet = await polygonZKEVMBridgeContract.getDepositRoot(); expect(rootSCMainnet).to.be.equal(rootJSMainnet); // check merkle proof @@ -244,7 +244,7 @@ describe('Bridge Contract Permit tests', () => { // verify merkle proof expect(verifyMerkleProof(leafValue, proof, index, rootSCMainnet)).to.be.equal(true); - expect(await bridgeContract.verifyMerkleProof( + expect(await polygonZKEVMBridgeContract.verifyMerkleProof( leafValue, proof, index, @@ -255,7 +255,7 @@ describe('Bridge Contract Permit tests', () => { expect(computedGlobalExitRoot).to.be.equal(await globalExitRootManager.getLastGlobalExitRoot()); }); - it('should bridge with permit UNI type contracts', async () => { + it('should PolygonZKEVMBridge with permit UNI type contracts', async () => { const uniTokenFactory = await ethers.getContractFactory('Uni'); const uniContract = await uniTokenFactory.deploy( deployer.address, @@ -265,7 +265,7 @@ describe('Bridge Contract Permit tests', () => { await uniContract.deployed(); await uniContract.mint(deployer.address, ethers.utils.parseEther('100')); - const depositCount = await bridgeContract.depositCount(); + const depositCount = await polygonZKEVMBridgeContract.depositCount(); const originNetwork = networkIDMainnet; const tokenAddress = uniContract.address; const amount = ethers.utils.parseEther('10'); @@ -279,7 +279,7 @@ describe('Bridge Contract Permit tests', () => { const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); const balanceDeployer = await uniContract.balanceOf(deployer.address); - const balanceBridge = await uniContract.balanceOf(bridgeContract.address); + const balanceBridge = await uniContract.balanceOf(polygonZKEVMBridgeContract.address); const rollupExitRoot = await globalExitRootManager.lastRollupExitRoot(); @@ -298,7 +298,7 @@ describe('Bridge Contract Permit tests', () => { merkleTree.add(leafValue); const rootJSMainnet = merkleTree.getRoot(); - await expect(bridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x')) + await expect(polygonZKEVMBridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x')) .to.be.revertedWith('Uni::transferFrom: transfer amount exceeds spender allowance'); // user permit @@ -309,7 +309,7 @@ describe('Bridge Contract Permit tests', () => { const { v, r, s } = await createPermitSignatureUniType( uniContract, deployer, - bridgeContract.address, + polygonZKEVMBridgeContract.address, amount, nonce, deadline, @@ -317,7 +317,7 @@ describe('Bridge Contract Permit tests', () => { ); const dataPermit = ifacePermit.encodeFunctionData('permit', [ deployer.address, - bridgeContract.address, + polygonZKEVMBridgeContract.address, amount, deadline, v, @@ -325,17 +325,17 @@ describe('Bridge Contract Permit tests', () => { s, ]); - await expect(bridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, dataPermit)) - .to.emit(bridgeContract, 'BridgeEvent') + await expect(polygonZKEVMBridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, dataPermit)) + .to.emit(polygonZKEVMBridgeContract, 'BridgeEvent') .withArgs(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount) .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') .withArgs(rootJSMainnet, rollupExitRoot); expect(await uniContract.balanceOf(deployer.address)).to.be.equal(balanceDeployer.sub(amount)); - expect(await uniContract.balanceOf(bridgeContract.address)).to.be.equal(balanceBridge.add(amount)); + expect(await uniContract.balanceOf(polygonZKEVMBridgeContract.address)).to.be.equal(balanceBridge.add(amount)); // check merkle root with SC - const rootSCMainnet = await bridgeContract.getDepositRoot(); + const rootSCMainnet = await polygonZKEVMBridgeContract.getDepositRoot(); expect(rootSCMainnet).to.be.equal(rootJSMainnet); // check merkle proof @@ -344,7 +344,7 @@ describe('Bridge Contract Permit tests', () => { // verify merkle proof expect(verifyMerkleProof(leafValue, proof, index, rootSCMainnet)).to.be.equal(true); - expect(await bridgeContract.verifyMerkleProof( + expect(await polygonZKEVMBridgeContract.verifyMerkleProof( leafValue, proof, index, diff --git a/test/contracts/emergencyManager.test.js b/test/contracts/emergencyManager.test.js index 680a64668..b82c6bbe2 100644 --- a/test/contracts/emergencyManager.test.js +++ b/test/contracts/emergencyManager.test.js @@ -8,7 +8,7 @@ describe('Emergency mode test', () => { let admin; let verifierContract; - let bridgeContract; + let polygonZKEVMBridgeContract; let polygonZKEVMContract; let maticTokenContract; let globalExitRootManager; @@ -51,21 +51,21 @@ describe('Emergency mode test', () => { const globalExitRootManagerFactory = await ethers.getContractFactory('GlobalExitRootManager'); globalExitRootManager = await upgrades.deployProxy(globalExitRootManagerFactory, [], { initializer: false }); - // deploy bridge - const bridgeFactory = await ethers.getContractFactory('Bridge'); - bridgeContract = await upgrades.deployProxy(bridgeFactory, [], { initializer: false }); + // deploy PolygonZKEVMBridge + const polygonZKEVMBridgeFactory = await ethers.getContractFactory('PolygonZKEVMBridge'); + polygonZKEVMBridgeContract = await upgrades.deployProxy(polygonZKEVMBridgeFactory, [], { initializer: false }); // deploy PoE const PolygonZKEVMFactory = await ethers.getContractFactory('PolygonZKEVMMock'); polygonZKEVMContract = await upgrades.deployProxy(PolygonZKEVMFactory, [], { initializer: false }); - await globalExitRootManager.initialize(polygonZKEVMContract.address, bridgeContract.address); - await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, polygonZKEVMContract.address); + await globalExitRootManager.initialize(polygonZKEVMContract.address, polygonZKEVMBridgeContract.address); + await polygonZKEVMBridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, polygonZKEVMContract.address); await polygonZKEVMContract.initialize( globalExitRootManager.address, maticTokenContract.address, verifierContract.address, - bridgeContract.address, + polygonZKEVMBridgeContract.address, { admin: admin.address, chainID, @@ -87,21 +87,21 @@ describe('Emergency mode test', () => { it('should activate emergency mode', async () => { // Check isEmergencyState expect(await polygonZKEVMContract.isEmergencyState()).to.be.equal(false); - expect(await bridgeContract.isEmergencyState()).to.be.equal(false); + expect(await polygonZKEVMBridgeContract.isEmergencyState()).to.be.equal(false); // Set isEmergencyState await expect(polygonZKEVMContract.connect(admin).activateEmergencyState(1)) .to.be.revertedWith('PolygonZKEVM::activateEmergencyState: Batch not sequenced or not end of sequence'); - await expect(bridgeContract.connect(deployer).activateEmergencyState()) + await expect(polygonZKEVMBridgeContract.connect(deployer).activateEmergencyState()) .to.be.revertedWith('PolygonZKEVM::onlyPolygonZKEVM: only Polygon ZK-EVM contract'); await expect(polygonZKEVMContract.activateEmergencyState(0)) .to.emit(polygonZKEVMContract, 'EmergencyStateActivated') - .to.emit(bridgeContract, 'EmergencyStateActivated'); + .to.emit(polygonZKEVMBridgeContract, 'EmergencyStateActivated'); expect(await polygonZKEVMContract.isEmergencyState()).to.be.equal(true); - expect(await bridgeContract.isEmergencyState()).to.be.equal(true); + expect(await polygonZKEVMBridgeContract.isEmergencyState()).to.be.equal(true); // Once in emergency state no sequenceBatches/forceBatches can be done const l2txData = '0x123456'; @@ -152,13 +152,13 @@ describe('Emergency mode test', () => { ), ).to.be.revertedWith('EmergencyManager::ifNotEmergencyState: only if not emergency state'); - // Check bridge no bridge is in emergency state also + // Check PolygonZKEVMBridge no PolygonZKEVMBridge is in emergency state also const tokenAddress = ethers.constants.AddressZero; const amount = ethers.utils.parseEther('10'); const destinationNetwork = 1; const destinationAddress = deployer.address; - await expect(bridgeContract.bridgeAsset( + await expect(polygonZKEVMBridgeContract.bridgeAsset( tokenAddress, destinationNetwork, destinationAddress, @@ -166,7 +166,7 @@ describe('Emergency mode test', () => { '0x', )).to.be.revertedWith('EmergencyManager::ifNotEmergencyState: only if not emergency state'); - await expect(bridgeContract.bridgeMessage( + await expect(polygonZKEVMBridgeContract.bridgeMessage( destinationNetwork, destinationAddress, '0x', @@ -176,7 +176,7 @@ describe('Emergency mode test', () => { const index = 0; const root = ethers.constants.HashZero; - await expect(bridgeContract.claimAsset( + await expect(polygonZKEVMBridgeContract.claimAsset( proof, index, root, @@ -189,7 +189,7 @@ describe('Emergency mode test', () => { '0x', )).to.be.revertedWith('EmergencyManager::ifNotEmergencyState: only if not emergency state'); - await expect(bridgeContract.claimMessage( + await expect(polygonZKEVMBridgeContract.claimMessage( proof, index, root, @@ -206,7 +206,7 @@ describe('Emergency mode test', () => { await expect(polygonZKEVMContract.activateEmergencyState(0)) .to.be.revertedWith('EmergencyManager::ifNotEmergencyState: only if not emergency state'); - await expect(bridgeContract.connect(deployer).deactivateEmergencyState()) + await expect(polygonZKEVMBridgeContract.connect(deployer).deactivateEmergencyState()) .to.be.revertedWith('PolygonZKEVM::onlyPolygonZKEVM: only Polygon ZK-EVM contract'); await expect(polygonZKEVMContract.deactivateEmergencyState()) @@ -214,11 +214,11 @@ describe('Emergency mode test', () => { await expect(polygonZKEVMContract.connect(admin).deactivateEmergencyState()) .to.emit(polygonZKEVMContract, 'EmergencyStateDeactivated') - .to.emit(bridgeContract, 'EmergencyStateDeactivated'); + .to.emit(polygonZKEVMBridgeContract, 'EmergencyStateDeactivated'); // Check isEmergencyState expect(await polygonZKEVMContract.isEmergencyState()).to.be.equal(false); - expect(await bridgeContract.isEmergencyState()).to.be.equal(false); + expect(await polygonZKEVMBridgeContract.isEmergencyState()).to.be.equal(false); /* * Continue normal flow @@ -309,10 +309,10 @@ describe('Emergency mode test', () => { ), ).to.emit(polygonZKEVMContract, 'ProveNonDeterministicPendingState').withArgs(newStateRoot, newStateRootDistinct) .to.emit(polygonZKEVMContract, 'EmergencyStateActivated') - .to.emit(bridgeContract, 'EmergencyStateActivated'); + .to.emit(polygonZKEVMBridgeContract, 'EmergencyStateActivated'); // Check emergency state is active expect(await polygonZKEVMContract.isEmergencyState()).to.be.equal(true); - expect(await bridgeContract.isEmergencyState()).to.be.equal(true); + expect(await polygonZKEVMBridgeContract.isEmergencyState()).to.be.equal(true); }); }); diff --git a/test/contracts/globalExitRootManager.test.js b/test/contracts/globalExitRootManager.test.js index 22f46cd56..b28966693 100644 --- a/test/contracts/globalExitRootManager.test.js +++ b/test/contracts/globalExitRootManager.test.js @@ -8,22 +8,22 @@ const zero32bytes = '0x000000000000000000000000000000000000000000000000000000000 describe('Global Exit Root', () => { let rollup; - let bridge; + let PolygonZKEVMBridge; let globalExitRootManager; beforeEach('Deploy contracts', async () => { // load signers - [, rollup, bridge] = await ethers.getSigners(); + [, rollup, PolygonZKEVMBridge] = await ethers.getSigners(); // deploy global exit root manager const globalExitRootManagerFactory = await ethers.getContractFactory('GlobalExitRootManager'); - globalExitRootManager = await upgrades.deployProxy(globalExitRootManagerFactory, [rollup.address, bridge.address]); + globalExitRootManager = await upgrades.deployProxy(globalExitRootManagerFactory, [rollup.address, PolygonZKEVMBridge.address]); await globalExitRootManager.deployed(); }); it('should check the constructor parameters', async () => { expect(await globalExitRootManager.rollupAddress()).to.be.equal(rollup.address); - expect(await globalExitRootManager.bridgeAddress()).to.be.equal(bridge.address); + expect(await globalExitRootManager.bridgeAddress()).to.be.equal(PolygonZKEVMBridge.address); expect(await globalExitRootManager.lastRollupExitRoot()).to.be.equal(zero32bytes); expect(await globalExitRootManager.lastMainnetExitRoot()).to.be.equal(zero32bytes); }); @@ -42,9 +42,9 @@ describe('Global Exit Root', () => { expect(await globalExitRootManager.getLastGlobalExitRoot()) .to.be.equal(calculateGlobalExitRoot(zero32bytes, newRootRollup)); - // Update root from the bridge + // Update root from the PolygonZKEVMBridge const newRootBridge = ethers.utils.hexlify(ethers.utils.randomBytes(32)); - await expect(globalExitRootManager.connect(bridge).updateExitRoot(newRootBridge)) + await expect(globalExitRootManager.connect(PolygonZKEVMBridge).updateExitRoot(newRootBridge)) .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') .withArgs(newRootBridge, newRootRollup); diff --git a/test/contracts/globalExitRootManagerL2.test.js b/test/contracts/globalExitRootManagerL2.test.js index b051b9930..537551f5a 100644 --- a/test/contracts/globalExitRootManagerL2.test.js +++ b/test/contracts/globalExitRootManagerL2.test.js @@ -4,7 +4,7 @@ const { ethers, upgrades } = require('hardhat'); const zero32bytes = '0x0000000000000000000000000000000000000000000000000000000000000000'; describe('Global Exit Root L2', () => { - let bridge; + let PolygonZKEVMBridge; let globalExitRootManager; const PolygonZKEVMAddress = ethers.constants.AddressZero; @@ -14,18 +14,18 @@ describe('Global Exit Root L2', () => { // load signers const deployer = (await ethers.getSigners())[0]; - // deploy bridge - const bridgeFactory = await ethers.getContractFactory('Bridge'); - bridge = await upgrades.deployProxy(bridgeFactory, [], { initializer: false }); + // deploy PolygonZKEVMBridge + const polygonZKEVMBridgeFactory = await ethers.getContractFactory('PolygonZKEVMBridge'); + PolygonZKEVMBridge = await upgrades.deployProxy(polygonZKEVMBridgeFactory, [], { initializer: false }); // deploy global exit root manager const globalExitRootManagerFactory = await ethers.getContractFactory('GlobalExitRootManagerL2Mock', deployer); - globalExitRootManager = await globalExitRootManagerFactory.deploy(bridge.address); + globalExitRootManager = await globalExitRootManagerFactory.deploy(PolygonZKEVMBridge.address); - await bridge.initialize(networkIDRollup, globalExitRootManager.address, PolygonZKEVMAddress); + await PolygonZKEVMBridge.initialize(networkIDRollup, globalExitRootManager.address, PolygonZKEVMAddress); }); it('should check the constructor parameters', async () => { - expect(await globalExitRootManager.bridgeAddress()).to.be.equal(bridge.address); + expect(await globalExitRootManager.bridgeAddress()).to.be.equal(PolygonZKEVMBridge.address); expect(await globalExitRootManager.lastRollupExitRoot()).to.be.equal(zero32bytes); }); diff --git a/test/contracts/proofOfEfficiency.test.js b/test/contracts/proofOfEfficiency.test.js index fed89daff..abce35362 100644 --- a/test/contracts/proofOfEfficiency.test.js +++ b/test/contracts/proofOfEfficiency.test.js @@ -13,7 +13,7 @@ describe('Polygon ZK-EVM', () => { let aggregator1; let verifierContract; - let bridgeContract; + let polygonZKEVMBridgeContract; let polygonZKEVMContract; let maticTokenContract; let globalExitRootManager; @@ -56,21 +56,21 @@ describe('Polygon ZK-EVM', () => { const globalExitRootManagerFactory = await ethers.getContractFactory('GlobalExitRootManager'); globalExitRootManager = await upgrades.deployProxy(globalExitRootManagerFactory, [], { initializer: false }); - // deploy bridge - const bridgeFactory = await ethers.getContractFactory('Bridge'); - bridgeContract = await upgrades.deployProxy(bridgeFactory, [], { initializer: false }); + // deploy PolygonZKEVMBridge + const polygonZKEVMBridgeFactory = await ethers.getContractFactory('PolygonZKEVMBridge'); + polygonZKEVMBridgeContract = await upgrades.deployProxy(polygonZKEVMBridgeFactory, [], { initializer: false }); // deploy PoE const PolygonZKEVMFactory = await ethers.getContractFactory('PolygonZKEVMMock'); polygonZKEVMContract = await upgrades.deployProxy(PolygonZKEVMFactory, [], { initializer: false }); - await globalExitRootManager.initialize(polygonZKEVMContract.address, bridgeContract.address); - await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, polygonZKEVMContract.address); + await globalExitRootManager.initialize(polygonZKEVMContract.address, polygonZKEVMBridgeContract.address); + await polygonZKEVMBridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, polygonZKEVMContract.address); await polygonZKEVMContract.initialize( globalExitRootManager.address, maticTokenContract.address, verifierContract.address, - bridgeContract.address, + polygonZKEVMBridgeContract.address, { admin: admin.address, chainID, @@ -93,7 +93,7 @@ describe('Polygon ZK-EVM', () => { expect(await polygonZKEVMContract.globalExitRootManager()).to.be.equal(globalExitRootManager.address); expect(await polygonZKEVMContract.matic()).to.be.equal(maticTokenContract.address); expect(await polygonZKEVMContract.rollupVerifier()).to.be.equal(verifierContract.address); - expect(await polygonZKEVMContract.bridgeAddress()).to.be.equal(bridgeContract.address); + expect(await polygonZKEVMContract.bridgeAddress()).to.be.equal(polygonZKEVMBridgeContract.address); expect(await polygonZKEVMContract.admin()).to.be.equal(admin.address); expect(await polygonZKEVMContract.chainID()).to.be.equal(chainID); diff --git a/test/contracts/real-prover/real-flow.test.js b/test/contracts/real-prover/real-flow.test.js index e5fbaf923..a9a32f969 100644 --- a/test/contracts/real-prover/real-flow.test.js +++ b/test/contracts/real-prover/real-flow.test.js @@ -17,7 +17,7 @@ const inputJson = require('./test-inputs/input.json'); describe('Real flow test', () => { let verifierContract; let maticTokenContract; - let bridgeContract; + let polygonZKEVMBridgeContract; let polygonZKEVMContract; let globalExitRootManager; let deployer; @@ -68,9 +68,9 @@ describe('Real flow test', () => { ); await maticTokenContract.deployed(); - // deploy bridge - const bridgeFactory = await ethers.getContractFactory('Bridge'); - bridgeContract = await upgrades.deployProxy(bridgeFactory, [], { initializer: false }); + // deploy PolygonZKEVMBridge + const polygonZKEVMBridgeFactory = await ethers.getContractFactory('PolygonZKEVMBridge'); + polygonZKEVMBridgeContract = await upgrades.deployProxy(polygonZKEVMBridgeFactory, [], { initializer: false }); // deploy PoE const PolygonZKEVMFactory = await ethers.getContractFactory('PolygonZKEVMMock'); @@ -79,14 +79,14 @@ describe('Real flow test', () => { // deploy global exit root manager const globalExitRootManagerFactory = await ethers.getContractFactory('GlobalExitRootManagerMock'); - globalExitRootManager = await globalExitRootManagerFactory.deploy(polygonZKEVMContract.address, bridgeContract.address); - await bridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, polygonZKEVMContract.address); + globalExitRootManager = await globalExitRootManagerFactory.deploy(polygonZKEVMContract.address, polygonZKEVMBridgeContract.address); + await polygonZKEVMBridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, polygonZKEVMContract.address); await polygonZKEVMContract.initialize( globalExitRootManager.address, maticTokenContract.address, verifierContract.address, - bridgeContract.address, + polygonZKEVMBridgeContract.address, { admin: admin.address, chainID, From 9280fd1945917c383da84f740289a11e02225617 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Tue, 20 Dec 2022 10:32:38 +0100 Subject: [PATCH 52/71] update global exit root --- .githooks/pre-commit | 8 +- README.md | 4 +- compiled-contracts/Bridge.json | 706 ------- compiled-contracts/BridgeMock.json | 797 -------- compiled-contracts/PolygonZKEVM.json | 8 +- compiled-contracts/PolygonZKEVMBridge.json | 8 +- .../PolygonZKEVMBridgeMock.json | 8 +- ...r.json => PolygonZKEVMGlobalExitRoot.json} | 8 +- ...json => PolygonZKEVMGlobalExitRootL2.json} | 8 +- ... => PolygonZKEVMGlobalExitRootL2Mock.json} | 8 +- ...on => PolygonZKEVMGlobalExitRootMock.json} | 8 +- compiled-contracts/PolygonZKEVMMock.json | 8 +- compiled-contracts/ProofOfEfficiency.json | 1476 -------------- compiled-contracts/ProofOfEfficiencyMock.json | 1700 ----------------- contracts/PolygonZKEVM.sol | 6 +- contracts/PolygonZKEVMBridge.sol | 6 +- ...ger.sol => PolygonZKEVMGlobalExitRoot.sol} | 6 +- ...2.sol => PolygonZKEVMGlobalExitRootL2.sol} | 4 +- ...er.sol => IPolygonZKEVMGlobalExitRoot.sol} | 2 +- contracts/mocks/PolygonZKEVMBridgeMock.sol | 2 +- ...l => PolygonZKEVMGlobalExitRootL2Mock.sol} | 6 +- ...sol => PolygonZKEVMGlobalExitRootMock.sol} | 4 +- deployment/deployPoE_v2-0.js | 28 +- deployment/genesis-gen.json | 2 +- deployment/genesis.json | 2 +- deployment/verifyPoE_v2-0.js | 2 +- docker/scripts/genesis_docker.json | 2 +- docker/scripts/genesis_gen_docker.json | 2 +- docs/PolygonZKEVM.md | 4 +- docs/PolygonZKEVMBridge.md | 4 +- ...nager.md => PolygonZKEVMGlobalExitRoot.md} | 0 ...rL2.md => PolygonZKEVMGlobalExitRootL2.md} | 0 index.js | 8 +- test/contracts/bridge.test.js | 86 +- test/contracts/bridgeMock.test.js | 18 +- test/contracts/bridge_permit.test.js | 28 +- test/contracts/emergencyManager.test.js | 12 +- test/contracts/globalExitRootManager.test.js | 38 +- .../contracts/globalExitRootManagerL2.test.js | 24 +- test/contracts/proofOfEfficiency.test.js | 24 +- test/contracts/real-prover/real-flow.test.js | 19 +- 41 files changed, 213 insertions(+), 4881 deletions(-) delete mode 100644 compiled-contracts/Bridge.json delete mode 100644 compiled-contracts/BridgeMock.json rename compiled-contracts/{GlobalExitRootManager.json => PolygonZKEVMGlobalExitRoot.json} (53%) rename compiled-contracts/{GlobalExitRootManagerL2.json => PolygonZKEVMGlobalExitRootL2.json} (60%) rename compiled-contracts/{GlobalExitRootManagerL2Mock.json => PolygonZKEVMGlobalExitRootL2Mock.json} (66%) rename compiled-contracts/{GlobalExitRootManagerMock.json => PolygonZKEVMGlobalExitRootMock.json} (60%) delete mode 100644 compiled-contracts/ProofOfEfficiency.json delete mode 100644 compiled-contracts/ProofOfEfficiencyMock.json rename contracts/{GlobalExitRootManager.sol => PolygonZKEVMGlobalExitRoot.sol} (91%) rename contracts/{GlobalExitRootManagerL2.sol => PolygonZKEVMGlobalExitRootL2.sol} (91%) rename contracts/interfaces/{IGlobalExitRootManager.sol => IPolygonZKEVMGlobalExitRoot.sol} (88%) rename contracts/mocks/{GlobalExitRootManagerL2Mock.sol => PolygonZKEVMGlobalExitRootL2Mock.sol} (81%) rename contracts/mocks/{GlobalExitRootManagerMock.sol => PolygonZKEVMGlobalExitRootMock.sol} (88%) rename docs/{GlobalExitRootManager.md => PolygonZKEVMGlobalExitRoot.md} (100%) rename docs/{GlobalExitRootManagerL2.md => PolygonZKEVMGlobalExitRootL2.md} (100%) diff --git a/.githooks/pre-commit b/.githooks/pre-commit index 3ee490945..b667b1c1d 100755 --- a/.githooks/pre-commit +++ b/.githooks/pre-commit @@ -7,13 +7,13 @@ if npm run lint; then npm run docgen git add docs cp artifacts/contracts/PolygonZKEVMBridge.sol/PolygonZKEVMBridge.json compiled-contracts/ - cp artifacts/contracts/GlobalExitRootManager.sol/GlobalExitRootManager.json compiled-contracts/ - cp artifacts/contracts/GlobalExitRootManagerL2.sol/GlobalExitRootManagerL2.json compiled-contracts/ + cp artifacts/contracts/PolygonZKEVMGlobalExitRoot.sol/PolygonZKEVMGlobalExitRoot.json compiled-contracts/ + cp artifacts/contracts/PolygonZKEVMGlobalExitRootL2.sol/PolygonZKEVMGlobalExitRootL2.json compiled-contracts/ cp artifacts/contracts/lib/TokenWrapped.sol/TokenWrapped.json compiled-contracts/ cp artifacts/contracts/mocks/PolygonZKEVMBridgeMock.sol/PolygonZKEVMBridgeMock.json compiled-contracts/ cp artifacts/contracts/mocks/ERC20PermitMock.sol/ERC20PermitMock.json compiled-contracts/ - cp artifacts/contracts/mocks/GlobalExitRootManagerL2Mock.sol/GlobalExitRootManagerL2Mock.json compiled-contracts/ - cp artifacts/contracts/mocks/GlobalExitRootManagerMock.sol/GlobalExitRootManagerMock.json compiled-contracts/ + cp artifacts/contracts/mocks/PolygonZKEVMGlobalExitRootL2Mock.sol/PolygonZKEVMGlobalExitRootL2Mock.json compiled-contracts/ + cp artifacts/contracts/mocks/PolygonZKEVMGlobalExitRootMock.sol/PolygonZKEVMGlobalExitRootMock.json compiled-contracts/ cp artifacts/contracts/mocks/PolygonZKEVMMock.sol/PolygonZKEVMMock.json compiled-contracts/ cp artifacts/contracts/mocks/VerifierRollupHelperMock.sol/VerifierRollupHelperMock.json compiled-contracts/ cp artifacts/contracts/PolygonZKEVM.sol/PolygonZKEVM.json compiled-contracts/ diff --git a/README.md b/README.md index eabc738c2..e85f3eee5 100644 --- a/README.md +++ b/README.md @@ -19,8 +19,8 @@ Private keys and mnemonics contained in this repository are used for internal te - `contracts`: zkevm contracts - `PolygonZKEVMBridge.sol`: transfer assets between chains - - `GlobalExitRootManager.sol`: manage global exit root in L1 - - `GlobalExitRootManagerL2.sol`: manage global exit root in L2 + - `PolygonZKEVMGlobalExitRoot.sol`: manage global exit root in L1 + - `PolygonZKEVMGlobalExitRootL2.sol`: manage global exit root in L2 - `PolygonZKEVM.sol`: consensus algorithm used by polyhon hermez zkevm - `docs`: specs and useful links - `test`: contracts tests diff --git a/compiled-contracts/Bridge.json b/compiled-contracts/Bridge.json deleted file mode 100644 index 6756a527b..000000000 --- a/compiled-contracts/Bridge.json +++ /dev/null @@ -1,706 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "PolygonZKEVMBridge", - "sourceName": "contracts/PolygonZKEVMBridge.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "leafType", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "originAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "destinationNetwork", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "destinationAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "metadata", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "depositCount", - "type": "uint32" - } - ], - "name": "BridgeEvent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "index", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "originAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "destinationAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "ClaimEvent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "EmergencyStateActivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "EmergencyStateDeactivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "originTokenAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "wrappedTokenAddress", - "type": "address" - } - ], - "name": "NewWrappedToken", - "type": "event" - }, - { - "inputs": [], - "name": "LEAF_TYPE_ASSET", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LEAF_TYPE_MESSAGE", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAINNET_NETWORK_ID", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "activateEmergencyState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "uint32", - "name": "destinationNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "destinationAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "permitData", - "type": "bytes" - } - ], - "name": "bridgeAsset", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "destinationNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "destinationAddress", - "type": "address" - }, - { - "internalType": "bytes", - "name": "metadata", - "type": "bytes" - } - ], - "name": "bridgeMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "smtProof", - "type": "bytes32[]" - }, - { - "internalType": "uint32", - "name": "index", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "mainnetExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "rollupExitRoot", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "originTokenAddress", - "type": "address" - }, - { - "internalType": "uint32", - "name": "destinationNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "destinationAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "metadata", - "type": "bytes" - } - ], - "name": "claimAsset", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "smtProof", - "type": "bytes32[]" - }, - { - "internalType": "uint32", - "name": "index", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "mainnetExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "rollupExitRoot", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "originAddress", - "type": "address" - }, - { - "internalType": "uint32", - "name": "destinationNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "destinationAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "metadata", - "type": "bytes" - } - ], - "name": "claimMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "claimedBitMap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "deactivateEmergencyState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "depositCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getDepositRoot", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "leafType", - "type": "uint8" - }, - { - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "originAddress", - "type": "address" - }, - { - "internalType": "uint32", - "name": "destinationNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "destinationAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "metadataHash", - "type": "bytes32" - } - ], - "name": "getLeafValue", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "originTokenAddress", - "type": "address" - } - ], - "name": "getTokenWrappedAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "globalExitRootManager", - "outputs": [ - { - "internalType": "contract IGlobalExitRootManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_networkID", - "type": "uint32" - }, - { - "internalType": "contract IGlobalExitRootManager", - "name": "_globalExitRootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_poeAddress", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "isClaimed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "isEmergencyState", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "networkID", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "poeAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "originTokenAddress", - "type": "address" - }, - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - }, - { - "internalType": "uint8", - "name": "decimals", - "type": "uint8" - } - ], - "name": "precalculatedWrapperAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "tokenInfoToWrappedToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "leafHash", - "type": "bytes32" - }, - { - "internalType": "bytes32[]", - "name": "smtProof", - "type": "bytes32[]" - }, - { - "internalType": "uint64", - "name": "index", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "verifyMerkleProof", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "wrappedTokenToTokenInfo", - "outputs": [ - { - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "originTokenAddress", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b50614730806100206000396000f3fe608060405260043610620001675760003560e01c806381b1c17411620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b806381b1c17414620003735780638f61151914620003ad5780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b80633ae05047116200011e5780633ae0504714620002a25780633da8168214620002ba5780633e19704314620002df578063463855491462000304578063647c576c14620003295780637b6323c1146200034e57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d3660046200237f565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b50620001836200096d565b348015620001db57600080fd5b50620001f3620001ed3660046200240c565b620009a6565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002448565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b5062000224620009f9565b348015620002c757600080fd5b50620001a1620002d936600462002537565b62000aec565b348015620002ec57600080fd5b5062000224620002fe366004620025b5565b62000bee565b3480156200031157600080fd5b506200018362000323366004620026c6565b62000c7b565b3480156200033657600080fd5b506200018362000348366004620027ad565b62000e14565b3480156200035b57600080fd5b50620001836200036d366004620026c6565b62000f73565b3480156200038057600080fd5b50620001f362000392366004620027fd565b6024602052600090815260409020546001600160a01b031681565b348015620003ba57600080fd5b50602754620001f3906001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620027fd565b62001414565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002817565b62001459565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620028cb565b62001570565b348015620004c357600080fd5b5062000183620016c7565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620027fd565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002933565b60405180910390fd5b60225463ffffffff6101009091048116908616036200058f5760405162461bcd60e51b815260040162000553906200299b565b60008060606001600160a01b03891662000616578534146200060c5760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201526e4d415443485f4d53475f56414c554560881b606482015260840162000553565b6000915062000887565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620006e457604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af1158015620006ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006d19190620029f4565b5060208101518151909450925062000885565b8415620006f957620006f98a888888620016fe565b620007106001600160a01b038b1633308a62001b02565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000767573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000791919081019062002a8f565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007d0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007fa919081019062002a8f565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000839573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200085f919062002ac8565b604051602001620008739392919062002b16565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b87602154604051620008c998979695949392919062002b53565b60405180910390a1620008f4620008ee600084868c8c8c888051906020012062000bee565b62001b6f565b6026546001600160a01b03166333d6247d6200090f620009f9565b6040518263ffffffff1660e01b81526004016200092e91815260200190565b600060405180830381600087803b1580156200094957600080fd5b505af11580156200095e573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b031633146200099a5760405162461bcd60e51b8152600401620005539062002bc0565b620009a462001cc0565b565b6000602460008484604051602001620009c192919062002c1d565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000ae3578260011660010362000a64576001816020811062000a305762000a3062002c47565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000a91565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a9e60028462002c89565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000ada9062002ca0565b91505062000a04565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000bdf578160011660010362000b695786818151811062000b275762000b2762002c47565b60200260200101518360405160200162000b4b929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000bbb565b8287828151811062000b7f5762000b7f62002c47565b602002602001015160405160200162000ba2929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000bc860028362002c89565b91508062000bd68162002ca0565b91505062000afc565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000ca15760405162461bcd60e51b8152600401620005539062002933565b62000cb78a8a8a8a8a8a8a8a8a8a600162001d1e565b62000cc88963ffffffff1662001faf565b6000836001600160a01b03168387898560405160240162000cec9392919062002cbc565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d23919062002cf7565b60006040518083038185875af1925050503d806000811462000d62576040519150601f19603f3d011682016040523d82523d6000602084013e62000d67565b606091505b505090508062000dc65760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f46416044820152631253115160e21b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000dff95949392919062002d15565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000e355750600054600160ff909116105b8062000e515750303b15801562000e51575060005460ff166001145b62000eb65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000eda576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000f6d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff161562000f995760405162461bcd60e51b8152600401620005539062002933565b62000faf8a8a8a8a8a8a8a8a8a8a600062001d1e565b62000fc08963ffffffff1662001faf565b6001600160a01b038516620010a957604080516000808252602082019092526001600160a01b03851690849060405162000ffb919062002cf7565b60006040518083038185875af1925050503d80600081146200103a576040519150601f19603f3d011682016040523d82523d6000602084013e6200103f565b606091505b5050905080620010a25760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201526617d1905253115160ca1b606482015260840162000553565b50620013c7565b60225463ffffffff610100909104811690871603620010de57620010d86001600160a01b038616848462001ff1565b620013c7565b60008686604051602001620010f592919062002c1d565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200134c5760008060008580602001905181019062001147919062002d4c565b9250925092506000858484846040516200116190620022e5565b6200116f9392919062002b16565b8190604051809103906000f590508015801562001190573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af1158015620011e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200120b9190620029f4565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200133a9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620013c4565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200139c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013c29190620029f4565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200140095949392919062002d15565b60405180910390a150505050505050505050565b600080620014256101008462002c89565b90506000620014376101008562002dc2565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200147192919062002c1d565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014a490620022e5565b601f1982820381018352601f909101166040819052620014d1908d908d908d908d908d9060200162002e02565b60408051601f1981840301815290829052620014f1929160200162002e43565b604051602081830303815290604052805190602001206040516020016200154a94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015965760405162461bcd60e51b8152600401620005539062002933565b60225463ffffffff610100909104811690841603620015c95760405162461bcd60e51b815260040162000553906200299b565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff1633868634876021546040516200161d98979695949392919062002b53565b60405180910390a162001654620008ee6001602260019054906101000a900463ffffffff1633878734888051906020012062000bee565b6026546001600160a01b03166333d6247d6200166f620009f9565b6040518263ffffffff1660e01b81526004016200168e91815260200190565b600060405180830381600087803b158015620016a957600080fd5b505af1158015620016be573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620016f45760405162461bcd60e51b8152600401620005539062002bc0565b620009a462002023565b60006200174183838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620020d292505050565b9050632afa533160e01b6001600160e01b03198216016200192a57600080808080808062001773896004818d62002e76565b81019062001782919062002ea2565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620017c45760405162461bcd60e51b8152600401620005539062002efd565b6001600160a01b0386163014620017ef5760405162461bcd60e51b8152600401620005539062002f4d565b8a8514620018565760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201526c09e8aa6be9c9ea8be9a82a8869609b1b606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620018d6919062002cf7565b6000604051808303816000865af19150503d806000811462001915576040519150601f19603f3d011682016040523d82523d6000602084013e6200191a565b606091505b5050505050505050505062001afb565b6001600160e01b031981166323f2ebc360e21b146200198c5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000553565b600080808080808080620019a48a6004818e62002e76565b810190620019b3919062002f92565b97509750975097509750975097509750336001600160a01b0316886001600160a01b031614620019f75760405162461bcd60e51b8152600401620005539062002efd565b6001600160a01b038716301462001a225760405162461bcd60e51b8152600401620005539062002f4d565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001aab919062002cf7565b6000604051808303816000865af19150503d806000811462001aea576040519150601f19603f3d011682016040523d82523d6000602084013e62001aef565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000f6d9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620020d9565b80600162001b80602060026200311b565b62001b8c919062003129565b6021541062001bf15760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001c06919062003143565b909155505060215460005b602081101562001cb0578160011660010362001c4657826001826020811062001c3e5762001c3e62002c47565b015550505050565b6001816020811062001c5c5762001c5c62002c47565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001c99919062002c89565b91508062001ca78162002ca0565b91505062001c11565b5062001cbb6200315e565b505050565b60225460ff161562001ce65760405162461bcd60e51b8152600401620005539062002933565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001d2f8a63ffffffff1662001414565b1562001d8a5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c416044820152631253515160e21b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001dfe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e24919062003174565b90508060000362001e8e5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201526c17d493d3d517d2539590531251609a1b606482015260840162000553565b60225463ffffffff878116610100909204161462001f155760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d41544348000000000000000000606482015260840162000553565b602254600090610100900463ffffffff1662001f3357508862001f36565b50895b62001f6162001f52848b8b8b8b8b8b8051906020012062000bee565b8e8e63ffffffff168462000aec565b6200095e5760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c4944604482015260640162000553565b600062001fbf6101008362002c89565b9050600062001fd16101008462002dc2565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001cbb90849063a9059cbb60e01b9060640162001b37565b60225460ff166200209d5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002130826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620021b29092919063ffffffff16565b80519091501562001cbb5780806020019051810190620021519190620029f4565b62001cbb5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000be6848460008585600080866001600160a01b03168587604051620021dc919062002cf7565b60006040518083038185875af1925050503d80600081146200221b576040519150601f19603f3d011682016040523d82523d6000602084013e62002220565b606091505b509150915062002233878383876200223e565b979650505050505050565b60608315620022b2578251600003620022aa576001600160a01b0385163b620022aa5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000be6565b62000be68383815115620022c95781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200318e565b61155780620031a483390190565b6001600160a01b03811681146200230957600080fd5b50565b80356200231981620022f3565b919050565b803563ffffffff811681146200231957600080fd5b60008083601f8401126200234657600080fd5b50813567ffffffffffffffff8111156200235f57600080fd5b6020830191508360208285010111156200237857600080fd5b9250929050565b60008060008060008060a087890312156200239957600080fd5b8635620023a681620022f3565b9550620023b6602088016200231e565b94506040870135620023c881620022f3565b935060608701359250608087013567ffffffffffffffff811115620023ec57600080fd5b620023fa89828a0162002333565b979a9699509497509295939492505050565b600080604083850312156200242057600080fd5b6200242b836200231e565b915060208301356200243d81620022f3565b809150509250929050565b6000602082840312156200245b57600080fd5b81356200246881620022f3565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620024b157620024b16200246f565b604052919050565b600082601f830112620024cb57600080fd5b8135602067ffffffffffffffff821115620024ea57620024ea6200246f565b8160051b620024fb82820162002485565b92835284810182019282810190878511156200251657600080fd5b83870192505b8483101562002233578235825291830191908301906200251c565b600080600080608085870312156200254e57600080fd5b84359350602085013567ffffffffffffffff808211156200256e57600080fd5b6200257c88838901620024b9565b94506040870135915080821682146200259457600080fd5b509396929550929360600135925050565b60ff811681146200230957600080fd5b600080600080600080600060e0888a031215620025d157600080fd5b8735620025de81620025a5565b9650620025ee602089016200231e565b955060408801356200260081620022f3565b945062002610606089016200231e565b935060808801356200262281620022f3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200265c576200265c6200246f565b50601f01601f191660200190565b600082601f8301126200267c57600080fd5b8135620026936200268d826200263f565b62002485565b818152846020838601011115620026a957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620026e757600080fd5b8a3567ffffffffffffffff808211156200270057600080fd5b6200270e8e838f01620024b9565b9b506200271e60208e016200231e565b9a5060408d0135995060608d013598506200273c60808e016200231e565b97506200274c60a08e016200230c565b96506200275c60c08e016200231e565b95506200276c60e08e016200230c565b94506101008d013593506101208d01359150808211156200278c57600080fd5b506200279b8d828e016200266a565b9150509295989b9194979a5092959850565b600080600060608486031215620027c357600080fd5b620027ce846200231e565b92506020840135620027e081620022f3565b91506040840135620027f281620022f3565b809150509250925092565b6000602082840312156200281057600080fd5b5035919050565b600080600080600080600060a0888a0312156200283357600080fd5b6200283e886200231e565b965060208801356200285081620022f3565b9550604088013567ffffffffffffffff808211156200286e57600080fd5b6200287c8b838c0162002333565b909750955060608a01359150808211156200289657600080fd5b50620028a58a828b0162002333565b9094509250506080880135620028bb81620025a5565b8091505092959891949750929550565b600080600060608486031215620028e157600080fd5b620028ec846200231e565b92506020840135620028fe81620022f3565b9150604084013567ffffffffffffffff8111156200291b57600080fd5b62002929868287016200266a565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b6020808252602a908201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e546040820152692fa122afa4aa29a2a62360b11b606082015260800190565b80151581146200230957600080fd5b60006020828403121562002a0757600080fd5b81516200246881620029e5565b60005b8381101562002a3157818101518382015260200162002a17565b8381111562000f6d5750506000910152565b600082601f83011262002a5557600080fd5b815162002a666200268d826200263f565b81815284602083860101111562002a7c57600080fd5b62000be682602083016020870162002a14565b60006020828403121562002aa257600080fd5b815167ffffffffffffffff81111562002aba57600080fd5b62000be68482850162002a43565b60006020828403121562002adb57600080fd5b81516200246881620025a5565b6000815180845262002b0281602086016020860162002a14565b601f01601f19169290920160200192915050565b60608152600062002b2b606083018662002ae8565b828103602084015262002b3f818662002ae8565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002ba78483018762002ae8565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79506f6c79676f6e5a4b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002c9b5762002c9b62002c5d565b500490565b60006001820162002cb55762002cb562002c73565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002cee9083018462002ae8565b95945050505050565b6000825162002d0b81846020870162002a14565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002d6257600080fd5b835167ffffffffffffffff8082111562002d7b57600080fd5b62002d898783880162002a43565b9450602086015191508082111562002da057600080fd5b5062002daf8682870162002a43565b9250506040840151620027f281620025a5565b60008262002dd45762002dd462002c5d565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e1860608301878962002dd9565b828103602084015262002e2d81868862002dd9565b91505060ff831660408301529695505050505050565b6000835162002e5781846020880162002a14565b83519083019062002e6d81836020880162002a14565b01949350505050565b6000808585111562002e8757600080fd5b8386111562002e9557600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002ebe57600080fd5b873562002ecb81620022f3565b9650602088013562002edd81620022f3565b9550604088013594506060880135935060808801356200262281620025a5565b60208082526030908201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560408201526f29aa2fa122afaa2422afa9a2a72222a960811b606082015260800190565b60208082526025908201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f42456040820152645f5448495360d81b606082015260800190565b600080600080600080600080610100898b03121562002fb057600080fd5b883562002fbd81620022f3565b9750602089013562002fcf81620022f3565b96506040890135955060608901359450608089013562002fef81620029e5565b935060a08901356200300181620025a5565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200305f57816000190482111562003043576200304362002c73565b808516156200305157918102915b93841c939080029062003023565b509250929050565b6000826200307857506001620009f3565b816200308757506000620009f3565b8160018114620030a05760028114620030ab57620030cb565b6001915050620009f3565b60ff841115620030bf57620030bf62002c73565b50506001821b620009f3565b5060208310610133831016604e8410600b8410161715620030f0575081810a620009f3565b620030fc83836200301e565b806000190482111562003113576200311362002c73565b029392505050565b600062002468838362003067565b6000828210156200313e576200313e62002c73565b500390565b6000821982111562003159576200315962002c73565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200318757600080fd5b5051919050565b60208152600062002468602083018462002ae856fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b14f80bfcbda3f7be499de7c67ec81639549928b9cee16384da9f2fb8c22dce64736f6c634300080f0033a26469706673582212203c02dfe847101ccc70782c6e15d3e3f0ddbe626dfa3a8340eb1cc64b3d85534264736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001675760003560e01c806381b1c17411620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b806381b1c17414620003735780638f61151914620003ad5780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b80633ae05047116200011e5780633ae0504714620002a25780633da8168214620002ba5780633e19704314620002df578063463855491462000304578063647c576c14620003295780637b6323c1146200034e57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d3660046200237f565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b50620001836200096d565b348015620001db57600080fd5b50620001f3620001ed3660046200240c565b620009a6565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002448565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b5062000224620009f9565b348015620002c757600080fd5b50620001a1620002d936600462002537565b62000aec565b348015620002ec57600080fd5b5062000224620002fe366004620025b5565b62000bee565b3480156200031157600080fd5b506200018362000323366004620026c6565b62000c7b565b3480156200033657600080fd5b506200018362000348366004620027ad565b62000e14565b3480156200035b57600080fd5b50620001836200036d366004620026c6565b62000f73565b3480156200038057600080fd5b50620001f362000392366004620027fd565b6024602052600090815260409020546001600160a01b031681565b348015620003ba57600080fd5b50602754620001f3906001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620027fd565b62001414565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002817565b62001459565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620028cb565b62001570565b348015620004c357600080fd5b5062000183620016c7565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620027fd565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002933565b60405180910390fd5b60225463ffffffff6101009091048116908616036200058f5760405162461bcd60e51b815260040162000553906200299b565b60008060606001600160a01b03891662000616578534146200060c5760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201526e4d415443485f4d53475f56414c554560881b606482015260840162000553565b6000915062000887565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620006e457604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af1158015620006ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006d19190620029f4565b5060208101518151909450925062000885565b8415620006f957620006f98a888888620016fe565b620007106001600160a01b038b1633308a62001b02565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000767573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000791919081019062002a8f565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007d0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007fa919081019062002a8f565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000839573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200085f919062002ac8565b604051602001620008739392919062002b16565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b87602154604051620008c998979695949392919062002b53565b60405180910390a1620008f4620008ee600084868c8c8c888051906020012062000bee565b62001b6f565b6026546001600160a01b03166333d6247d6200090f620009f9565b6040518263ffffffff1660e01b81526004016200092e91815260200190565b600060405180830381600087803b1580156200094957600080fd5b505af11580156200095e573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b031633146200099a5760405162461bcd60e51b8152600401620005539062002bc0565b620009a462001cc0565b565b6000602460008484604051602001620009c192919062002c1d565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000ae3578260011660010362000a64576001816020811062000a305762000a3062002c47565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000a91565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000a9e60028462002c89565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000ada9062002ca0565b91505062000a04565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000bdf578160011660010362000b695786818151811062000b275762000b2762002c47565b60200260200101518360405160200162000b4b929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000bbb565b8287828151811062000b7f5762000b7f62002c47565b602002602001015160405160200162000ba2929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000bc860028362002c89565b91508062000bd68162002ca0565b91505062000afc565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000ca15760405162461bcd60e51b8152600401620005539062002933565b62000cb78a8a8a8a8a8a8a8a8a8a600162001d1e565b62000cc88963ffffffff1662001faf565b6000836001600160a01b03168387898560405160240162000cec9392919062002cbc565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d23919062002cf7565b60006040518083038185875af1925050503d806000811462000d62576040519150601f19603f3d011682016040523d82523d6000602084013e62000d67565b606091505b505090508062000dc65760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f46416044820152631253115160e21b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000dff95949392919062002d15565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000e355750600054600160ff909116105b8062000e515750303b15801562000e51575060005460ff166001145b62000eb65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000eda576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000f6d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff161562000f995760405162461bcd60e51b8152600401620005539062002933565b62000faf8a8a8a8a8a8a8a8a8a8a600062001d1e565b62000fc08963ffffffff1662001faf565b6001600160a01b038516620010a957604080516000808252602082019092526001600160a01b03851690849060405162000ffb919062002cf7565b60006040518083038185875af1925050503d80600081146200103a576040519150601f19603f3d011682016040523d82523d6000602084013e6200103f565b606091505b5050905080620010a25760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201526617d1905253115160ca1b606482015260840162000553565b50620013c7565b60225463ffffffff610100909104811690871603620010de57620010d86001600160a01b038616848462001ff1565b620013c7565b60008686604051602001620010f592919062002c1d565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200134c5760008060008580602001905181019062001147919062002d4c565b9250925092506000858484846040516200116190620022e5565b6200116f9392919062002b16565b8190604051809103906000f590508015801562001190573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af1158015620011e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200120b9190620029f4565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200133a9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620013c4565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200139c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013c29190620029f4565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200140095949392919062002d15565b60405180910390a150505050505050505050565b600080620014256101008462002c89565b90506000620014376101008562002dc2565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200147192919062002c1d565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014a490620022e5565b601f1982820381018352601f909101166040819052620014d1908d908d908d908d908d9060200162002e02565b60408051601f1981840301815290829052620014f1929160200162002e43565b604051602081830303815290604052805190602001206040516020016200154a94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015965760405162461bcd60e51b8152600401620005539062002933565b60225463ffffffff610100909104811690841603620015c95760405162461bcd60e51b815260040162000553906200299b565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff1633868634876021546040516200161d98979695949392919062002b53565b60405180910390a162001654620008ee6001602260019054906101000a900463ffffffff1633878734888051906020012062000bee565b6026546001600160a01b03166333d6247d6200166f620009f9565b6040518263ffffffff1660e01b81526004016200168e91815260200190565b600060405180830381600087803b158015620016a957600080fd5b505af1158015620016be573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620016f45760405162461bcd60e51b8152600401620005539062002bc0565b620009a462002023565b60006200174183838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620020d292505050565b9050632afa533160e01b6001600160e01b03198216016200192a57600080808080808062001773896004818d62002e76565b81019062001782919062002ea2565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620017c45760405162461bcd60e51b8152600401620005539062002efd565b6001600160a01b0386163014620017ef5760405162461bcd60e51b8152600401620005539062002f4d565b8a8514620018565760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201526c09e8aa6be9c9ea8be9a82a8869609b1b606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620018d6919062002cf7565b6000604051808303816000865af19150503d806000811462001915576040519150601f19603f3d011682016040523d82523d6000602084013e6200191a565b606091505b5050505050505050505062001afb565b6001600160e01b031981166323f2ebc360e21b146200198c5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000553565b600080808080808080620019a48a6004818e62002e76565b810190620019b3919062002f92565b97509750975097509750975097509750336001600160a01b0316886001600160a01b031614620019f75760405162461bcd60e51b8152600401620005539062002efd565b6001600160a01b038716301462001a225760405162461bcd60e51b8152600401620005539062002f4d565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001aab919062002cf7565b6000604051808303816000865af19150503d806000811462001aea576040519150601f19603f3d011682016040523d82523d6000602084013e62001aef565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000f6d9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620020d9565b80600162001b80602060026200311b565b62001b8c919062003129565b6021541062001bf15760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001c06919062003143565b909155505060215460005b602081101562001cb0578160011660010362001c4657826001826020811062001c3e5762001c3e62002c47565b015550505050565b6001816020811062001c5c5762001c5c62002c47565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001c99919062002c89565b91508062001ca78162002ca0565b91505062001c11565b5062001cbb6200315e565b505050565b60225460ff161562001ce65760405162461bcd60e51b8152600401620005539062002933565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001d2f8a63ffffffff1662001414565b1562001d8a5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c416044820152631253515160e21b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001dfe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e24919062003174565b90508060000362001e8e5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201526c17d493d3d517d2539590531251609a1b606482015260840162000553565b60225463ffffffff878116610100909204161462001f155760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d41544348000000000000000000606482015260840162000553565b602254600090610100900463ffffffff1662001f3357508862001f36565b50895b62001f6162001f52848b8b8b8b8b8b8051906020012062000bee565b8e8e63ffffffff168462000aec565b6200095e5760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c4944604482015260640162000553565b600062001fbf6101008362002c89565b9050600062001fd16101008462002dc2565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001cbb90849063a9059cbb60e01b9060640162001b37565b60225460ff166200209d5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002130826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620021b29092919063ffffffff16565b80519091501562001cbb5780806020019051810190620021519190620029f4565b62001cbb5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000be6848460008585600080866001600160a01b03168587604051620021dc919062002cf7565b60006040518083038185875af1925050503d80600081146200221b576040519150601f19603f3d011682016040523d82523d6000602084013e62002220565b606091505b509150915062002233878383876200223e565b979650505050505050565b60608315620022b2578251600003620022aa576001600160a01b0385163b620022aa5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000be6565b62000be68383815115620022c95781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200318e565b61155780620031a483390190565b6001600160a01b03811681146200230957600080fd5b50565b80356200231981620022f3565b919050565b803563ffffffff811681146200231957600080fd5b60008083601f8401126200234657600080fd5b50813567ffffffffffffffff8111156200235f57600080fd5b6020830191508360208285010111156200237857600080fd5b9250929050565b60008060008060008060a087890312156200239957600080fd5b8635620023a681620022f3565b9550620023b6602088016200231e565b94506040870135620023c881620022f3565b935060608701359250608087013567ffffffffffffffff811115620023ec57600080fd5b620023fa89828a0162002333565b979a9699509497509295939492505050565b600080604083850312156200242057600080fd5b6200242b836200231e565b915060208301356200243d81620022f3565b809150509250929050565b6000602082840312156200245b57600080fd5b81356200246881620022f3565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620024b157620024b16200246f565b604052919050565b600082601f830112620024cb57600080fd5b8135602067ffffffffffffffff821115620024ea57620024ea6200246f565b8160051b620024fb82820162002485565b92835284810182019282810190878511156200251657600080fd5b83870192505b8483101562002233578235825291830191908301906200251c565b600080600080608085870312156200254e57600080fd5b84359350602085013567ffffffffffffffff808211156200256e57600080fd5b6200257c88838901620024b9565b94506040870135915080821682146200259457600080fd5b509396929550929360600135925050565b60ff811681146200230957600080fd5b600080600080600080600060e0888a031215620025d157600080fd5b8735620025de81620025a5565b9650620025ee602089016200231e565b955060408801356200260081620022f3565b945062002610606089016200231e565b935060808801356200262281620022f3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200265c576200265c6200246f565b50601f01601f191660200190565b600082601f8301126200267c57600080fd5b8135620026936200268d826200263f565b62002485565b818152846020838601011115620026a957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620026e757600080fd5b8a3567ffffffffffffffff808211156200270057600080fd5b6200270e8e838f01620024b9565b9b506200271e60208e016200231e565b9a5060408d0135995060608d013598506200273c60808e016200231e565b97506200274c60a08e016200230c565b96506200275c60c08e016200231e565b95506200276c60e08e016200230c565b94506101008d013593506101208d01359150808211156200278c57600080fd5b506200279b8d828e016200266a565b9150509295989b9194979a5092959850565b600080600060608486031215620027c357600080fd5b620027ce846200231e565b92506020840135620027e081620022f3565b91506040840135620027f281620022f3565b809150509250925092565b6000602082840312156200281057600080fd5b5035919050565b600080600080600080600060a0888a0312156200283357600080fd5b6200283e886200231e565b965060208801356200285081620022f3565b9550604088013567ffffffffffffffff808211156200286e57600080fd5b6200287c8b838c0162002333565b909750955060608a01359150808211156200289657600080fd5b50620028a58a828b0162002333565b9094509250506080880135620028bb81620025a5565b8091505092959891949750929550565b600080600060608486031215620028e157600080fd5b620028ec846200231e565b92506020840135620028fe81620022f3565b9150604084013567ffffffffffffffff8111156200291b57600080fd5b62002929868287016200266a565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b6020808252602a908201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e546040820152692fa122afa4aa29a2a62360b11b606082015260800190565b80151581146200230957600080fd5b60006020828403121562002a0757600080fd5b81516200246881620029e5565b60005b8381101562002a3157818101518382015260200162002a17565b8381111562000f6d5750506000910152565b600082601f83011262002a5557600080fd5b815162002a666200268d826200263f565b81815284602083860101111562002a7c57600080fd5b62000be682602083016020870162002a14565b60006020828403121562002aa257600080fd5b815167ffffffffffffffff81111562002aba57600080fd5b62000be68482850162002a43565b60006020828403121562002adb57600080fd5b81516200246881620025a5565b6000815180845262002b0281602086016020860162002a14565b601f01601f19169290920160200192915050565b60608152600062002b2b606083018662002ae8565b828103602084015262002b3f818662002ae8565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002ba78483018762002ae8565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79506f6c79676f6e5a4b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002c9b5762002c9b62002c5d565b500490565b60006001820162002cb55762002cb562002c73565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002cee9083018462002ae8565b95945050505050565b6000825162002d0b81846020870162002a14565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002d6257600080fd5b835167ffffffffffffffff8082111562002d7b57600080fd5b62002d898783880162002a43565b9450602086015191508082111562002da057600080fd5b5062002daf8682870162002a43565b9250506040840151620027f281620025a5565b60008262002dd45762002dd462002c5d565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e1860608301878962002dd9565b828103602084015262002e2d81868862002dd9565b91505060ff831660408301529695505050505050565b6000835162002e5781846020880162002a14565b83519083019062002e6d81836020880162002a14565b01949350505050565b6000808585111562002e8757600080fd5b8386111562002e9557600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002ebe57600080fd5b873562002ecb81620022f3565b9650602088013562002edd81620022f3565b9550604088013594506060880135935060808801356200262281620025a5565b60208082526030908201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560408201526f29aa2fa122afaa2422afa9a2a72222a960811b606082015260800190565b60208082526025908201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f42456040820152645f5448495360d81b606082015260800190565b600080600080600080600080610100898b03121562002fb057600080fd5b883562002fbd81620022f3565b9750602089013562002fcf81620022f3565b96506040890135955060608901359450608089013562002fef81620029e5565b935060a08901356200300181620025a5565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200305f57816000190482111562003043576200304362002c73565b808516156200305157918102915b93841c939080029062003023565b509250929050565b6000826200307857506001620009f3565b816200308757506000620009f3565b8160018114620030a05760028114620030ab57620030cb565b6001915050620009f3565b60ff841115620030bf57620030bf62002c73565b50506001821b620009f3565b5060208310610133831016604e8410600b8410161715620030f0575081810a620009f3565b620030fc83836200301e565b806000190482111562003113576200311362002c73565b029392505050565b600062002468838362003067565b6000828210156200313e576200313e62002c73565b500390565b6000821982111562003159576200315962002c73565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200318757600080fd5b5051919050565b60208152600062002468602083018462002ae856fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b14f80bfcbda3f7be499de7c67ec81639549928b9cee16384da9f2fb8c22dce64736f6c634300080f0033a26469706673582212203c02dfe847101ccc70782c6e15d3e3f0ddbe626dfa3a8340eb1cc64b3d85534264736f6c634300080f0033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/compiled-contracts/BridgeMock.json b/compiled-contracts/BridgeMock.json deleted file mode 100644 index e2095b654..000000000 --- a/compiled-contracts/BridgeMock.json +++ /dev/null @@ -1,797 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "PolygonZKEVMBridgeMock", - "sourceName": "contracts/mocks/PolygonZKEVMBridgeMock.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "leafType", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "originAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "destinationNetwork", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "destinationAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "metadata", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "depositCount", - "type": "uint32" - } - ], - "name": "BridgeEvent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "index", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "originAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "destinationAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "ClaimEvent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "EmergencyStateActivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "EmergencyStateDeactivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "originTokenAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "wrappedTokenAddress", - "type": "address" - } - ], - "name": "NewWrappedToken", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "LEAF_TYPE_ASSET", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LEAF_TYPE_MESSAGE", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAINNET_NETWORK_ID", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "activateEmergencyState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "uint32", - "name": "destinationNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "destinationAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "permitData", - "type": "bytes" - } - ], - "name": "bridgeAsset", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "destinationNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "destinationAddress", - "type": "address" - }, - { - "internalType": "bytes", - "name": "metadata", - "type": "bytes" - } - ], - "name": "bridgeMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "smtProof", - "type": "bytes32[]" - }, - { - "internalType": "uint32", - "name": "index", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "mainnetExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "rollupExitRoot", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "originTokenAddress", - "type": "address" - }, - { - "internalType": "uint32", - "name": "destinationNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "destinationAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "metadata", - "type": "bytes" - } - ], - "name": "claimAsset", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "smtProof", - "type": "bytes32[]" - }, - { - "internalType": "uint32", - "name": "index", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "mainnetExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "rollupExitRoot", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "originAddress", - "type": "address" - }, - { - "internalType": "uint32", - "name": "destinationNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "destinationAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "metadata", - "type": "bytes" - } - ], - "name": "claimMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "claimedBitMap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "deactivateEmergencyState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "depositCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getDepositRoot", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "leafType", - "type": "uint8" - }, - { - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "originAddress", - "type": "address" - }, - { - "internalType": "uint32", - "name": "destinationNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "destinationAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "metadataHash", - "type": "bytes32" - } - ], - "name": "getLeafValue", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "originTokenAddress", - "type": "address" - } - ], - "name": "getTokenWrappedAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "globalExitRootManager", - "outputs": [ - { - "internalType": "contract IGlobalExitRootManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_networkID", - "type": "uint32" - }, - { - "internalType": "contract IGlobalExitRootManager", - "name": "_globalExitRootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_poeAddress", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "isClaimed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "isEmergencyState", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxEtherPolygonZKEVMBridge", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "networkID", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "poeAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "originTokenAddress", - "type": "address" - }, - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - }, - { - "internalType": "uint8", - "name": "decimals", - "type": "uint8" - } - ], - "name": "precalculatedWrapperAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_maxEtherPolygonZKEVMBridge", - "type": "uint256" - } - ], - "name": "setMaxEtherPolygonZKEVMBridge", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_networkID", - "type": "uint32" - } - ], - "name": "setNetworkID", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "tokenInfoToWrappedToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "leafHash", - "type": "bytes32" - }, - { - "internalType": "bytes32[]", - "name": "smtProof", - "type": "bytes32[]" - }, - { - "internalType": "uint64", - "name": "index", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "verifyMerkleProof", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "wrappedTokenToTokenInfo", - "outputs": [ - { - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "internalType": "address", - "name": "originTokenAddress", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b50614b3d806100206000396000f3fe608060405260043610620001f35760003560e01c806381b1c174116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b806381b1c17414620004615780638da5cb5b146200049b5780638f61151914620004bb57600080fd5b8063318aee3d116200018d5780634638554911620001585780634638554914620003da578063647c576c14620003ff578063715018a614620004245780637b6323c1146200043c57600080fd5b8063318aee3d14620003095780633ae0504714620003785780633da8168214620003905780633e19704314620003b557600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f620002093660046200276e565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f62000721565b3480156200026757600080fd5b506200027f62000279366004620027fb565b6200075a565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002837565b620007ad565b348015620002ca57600080fd5b506200020f620002dc36600462002851565b620007bc565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002876565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b50620002fa620007e8565b3480156200039d57600080fd5b506200022d620003af3660046200295e565b620008db565b348015620003c257600080fd5b50620002fa620003d4366004620029dc565b620009dd565b348015620003e757600080fd5b506200020f620003f936600462002aed565b62000a6a565b3480156200040c57600080fd5b506200020f6200041e36600462002bd4565b62000c03565b3480156200043157600080fd5b506200020f62000d78565b3480156200044957600080fd5b506200020f6200045b36600462002aed565b62000d8e565b3480156200046e57600080fd5b506200027f6200048036600462002837565b6024602052600090815260409020546001600160a01b031681565b348015620004a857600080fd5b50605a546001600160a01b03166200027f565b348015620004c857600080fd5b506027546200027f906001600160a01b031681565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002837565b6200122f565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002c24565b62001274565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002cd8565b6200138b565b348015620005e957600080fd5b506200020f620014e8565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002837565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002876565b6200151f565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007095760405162461bcd60e51b815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e606482015269185b081d195cdd1b995d60b21b608482015260a4015b60405180910390fd5b620007198686868686866200159e565b505050505050565b6027546001600160a01b031633146200074e5760405162461bcd60e51b8152600401620007009062002d40565b62000758620019cf565b565b60006024600084846040516020016200077592919062002d9d565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b762001a2d565b608c55565b620007c662001a2d565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008d257826001166001036200085357600181602081106200081f576200081f62002dc7565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000880565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088d60028462002e09565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c99062002e20565b915050620007f3565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009ce5781600116600103620009585786818151811062000916576200091662002dc7565b6020026020010151836040516020016200093a929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009aa565b828782815181106200096e576200096e62002dc7565b602002602001015160405160200162000991929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b760028362002e09565b915080620009c58162002e20565b915050620008eb565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a905760405162461bcd60e51b8152600401620007009062002e3c565b62000aa68a8a8a8a8a8a8a8a8a8a600162001a89565b62000ab78963ffffffff1662001d1a565b6000836001600160a01b03168387898560405160240162000adb9392919062002f01565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b12919062002f3c565b60006040518083038185875af1925050503d806000811462000b51576040519150601f19603f3d011682016040523d82523d6000602084013e62000b56565b606091505b505090508062000bb55760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f46416044820152631253115160e21b606482015260840162000700565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bee95949392919062002f5a565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c245750600054600160ff909116105b8062000c405750303b15801562000c40575060005460ff166001145b62000ca55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000700565b6000805460ff19166001179055801562000cc9576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d2b62001d5c565b801562000d72576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8262001a2d565b62000758600062001dcf565b60225460ff161562000db45760405162461bcd60e51b8152600401620007009062002e3c565b62000dca8a8a8a8a8a8a8a8a8a8a600062001a89565b62000ddb8963ffffffff1662001d1a565b6001600160a01b03851662000ec457604080516000808252602082019092526001600160a01b03851690849060405162000e16919062002f3c565b60006040518083038185875af1925050503d806000811462000e55576040519150601f19603f3d011682016040523d82523d6000602084013e62000e5a565b606091505b505090508062000ebd5760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201526617d1905253115160ca1b606482015260840162000700565b50620011e2565b60225463ffffffff61010090910481169087160362000ef95762000ef36001600160a01b038616848462001e21565b620011e2565b6000868660405160200162000f1092919062002d9d565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620011675760008060008580602001905181019062000f62919062002fdd565b92509250925060008584848460405162000f7c90620026d7565b62000f8a9392919062003053565b8190604051809103906000f590508015801562000fab573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001000573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200102691906200309f565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620011559392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011df565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620011b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011dd91906200309f565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200121b95949392919062002f5a565b60405180910390a150505050505050505050565b600080620012406101008462002e09565b905060006200125261010085620030bf565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200128c92919062002d9d565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012bf90620026d7565b601f1982820381018352601f909101166040819052620012ec908d908d908d908d908d90602001620030ff565b60408051601f19818403018152908290526200130c929160200162003140565b604051602081830303815290604052805190602001206040516020016200136594939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013b15760405162461bcd60e51b8152600401620007009062002e3c565b60225463ffffffff610100909104811690841603620013e45760405162461bcd60e51b8152600401620007009062003173565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff16338686348760215460405162001438989796959493929190620031bd565b60405180910390a1620014756200146f6001602260019054906101000a900463ffffffff16338787348880519060200120620009dd565b62001e8b565b6026546001600160a01b03166333d6247d62001490620007e8565b6040518263ffffffff1660e01b8152600401620014af91815260200190565b600060405180830381600087803b158015620014ca57600080fd5b505af1158015620014df573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015155760405162461bcd60e51b8152600401620007009062002d40565b6200075862001fd7565b6200152962001a2d565b6001600160a01b038116620015905760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000700565b6200159b8162001dcf565b50565b60225460ff1615620015c45760405162461bcd60e51b8152600401620007009062002e3c565b60225463ffffffff610100909104811690861603620015f75760405162461bcd60e51b8152600401620007009062003173565b60008060606001600160a01b0389166200167e57853414620016745760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201526e4d415443485f4d53475f56414c554560881b606482015260840162000700565b60009150620018ef565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200174c57604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562001713573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200173991906200309f565b50602081015181519094509250620018ed565b84156200176157620017618a88888862002086565b620017786001600160a01b038b1633308a6200248a565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620017cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620017f991908101906200322a565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001838573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200186291908101906200322a565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620018a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018c7919062003263565b604051602001620018db9392919062003053565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162001931989796959493929190620031bd565b60405180910390a1620019566200146f600084868c8c8c8880519060200120620009dd565b6026546001600160a01b03166333d6247d62001971620007e8565b6040518263ffffffff1660e01b81526004016200199091815260200190565b600060405180830381600087803b158015620019ab57600080fd5b505af1158015620019c0573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff1615620019f55760405162461bcd60e51b8152600401620007009062002e3c565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000700565b62001a9a8a63ffffffff166200122f565b1562001af55760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c416044820152631253515160e21b606482015260840162000700565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001b69573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001b8f919062003283565b90508060000362001bf95760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201526c17d493d3d517d2539590531251609a1b606482015260840162000700565b60225463ffffffff878116610100909204161462001c805760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d41544348000000000000000000606482015260840162000700565b602254600090610100900463ffffffff1662001c9e57508862001ca1565b50895b62001ccc62001cbd848b8b8b8b8b8b80519060200120620009dd565b8e8e63ffffffff1684620008db565b620019c05760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c4944604482015260640162000700565b600062001d2a6101008362002e09565b9050600062001d3c61010084620030bf565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001dc95760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000700565b62000758335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001e8690849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620024c4565b505050565b80600162001e9c602060026200339a565b62001ea89190620033a8565b6021541062001f0d5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000700565b60016021600082825462001f229190620033c2565b909155505060215460005b602081101562001fcc578160011660010362001f6257826001826020811062001f5a5762001f5a62002dc7565b015550505050565b6001816020811062001f785762001f7862002dc7565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001fb5919062002e09565b91508062001fc38162002e20565b91505062001f2d565b5062001e86620033dd565b60225460ff16620020515760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000700565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000620020c983838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200259d92505050565b9050632afa533160e01b6001600160e01b0319821601620022b2576000808080808080620020fb896004818d620033f3565b8101906200210a91906200341f565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200214c5760405162461bcd60e51b815260040162000700906200347a565b6001600160a01b0386163014620021775760405162461bcd60e51b81526004016200070090620034ca565b8a8514620021de5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201526c09e8aa6be9c9ea8be9a82a8869609b1b606482015260840162000700565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200225e919062002f3c565b6000604051808303816000865af19150503d80600081146200229d576040519150601f19603f3d011682016040523d82523d6000602084013e620022a2565b606091505b5050505050505050505062002483565b6001600160e01b031981166323f2ebc360e21b14620023145760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000700565b6000808080808080806200232c8a6004818e620033f3565b8101906200233b91906200350f565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200237f5760405162461bcd60e51b815260040162000700906200347a565b6001600160a01b0387163014620023aa5760405162461bcd60e51b81526004016200070090620034ca565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162002433919062002f3c565b6000604051808303816000865af19150503d806000811462002472576040519150601f19603f3d011682016040523d82523d6000602084013e62002477565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d729085906323b872dd60e01b9060840162001e4e565b60006200251b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620025a49092919063ffffffff16565b80519091501562001e8657808060200190518101906200253c91906200309f565b62001e865760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000700565b6020015190565b6060620009d5848460008585600080866001600160a01b03168587604051620025ce919062002f3c565b60006040518083038185875af1925050503d80600081146200260d576040519150601f19603f3d011682016040523d82523d6000602084013e62002612565b606091505b5091509150620026258783838762002630565b979650505050505050565b60608315620026a45782516000036200269c576001600160a01b0385163b6200269c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000700565b5081620009d5565b620009d58383815115620026bb5781518083602001fd5b8060405162461bcd60e51b81526004016200070091906200359b565b61155780620035b183390190565b6001600160a01b03811681146200159b57600080fd5b80356200270881620026e5565b919050565b803563ffffffff811681146200270857600080fd5b60008083601f8401126200273557600080fd5b50813567ffffffffffffffff8111156200274e57600080fd5b6020830191508360208285010111156200276757600080fd5b9250929050565b60008060008060008060a087890312156200278857600080fd5b86356200279581620026e5565b9550620027a5602088016200270d565b94506040870135620027b781620026e5565b935060608701359250608087013567ffffffffffffffff811115620027db57600080fd5b620027e989828a0162002722565b979a9699509497509295939492505050565b600080604083850312156200280f57600080fd5b6200281a836200270d565b915060208301356200282c81620026e5565b809150509250929050565b6000602082840312156200284a57600080fd5b5035919050565b6000602082840312156200286457600080fd5b6200286f826200270d565b9392505050565b6000602082840312156200288957600080fd5b81356200286f81620026e5565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620028d857620028d862002896565b604052919050565b600082601f830112620028f257600080fd5b8135602067ffffffffffffffff82111562002911576200291162002896565b8160051b62002922828201620028ac565b92835284810182019282810190878511156200293d57600080fd5b83870192505b84831015620026255782358252918301919083019062002943565b600080600080608085870312156200297557600080fd5b84359350602085013567ffffffffffffffff808211156200299557600080fd5b620029a388838901620028e0565b9450604087013591508082168214620029bb57600080fd5b509396929550929360600135925050565b60ff811681146200159b57600080fd5b600080600080600080600060e0888a031215620029f857600080fd5b873562002a0581620029cc565b965062002a15602089016200270d565b9550604088013562002a2781620026e5565b945062002a37606089016200270d565b9350608088013562002a4981620026e5565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002a835762002a8362002896565b50601f01601f191660200190565b600082601f83011262002aa357600080fd5b813562002aba62002ab48262002a66565b620028ac565b81815284602083860101111562002ad057600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002b0e57600080fd5b8a3567ffffffffffffffff8082111562002b2757600080fd5b62002b358e838f01620028e0565b9b5062002b4560208e016200270d565b9a5060408d0135995060608d0135985062002b6360808e016200270d565b975062002b7360a08e01620026fb565b965062002b8360c08e016200270d565b955062002b9360e08e01620026fb565b94506101008d013593506101208d013591508082111562002bb357600080fd5b5062002bc28d828e0162002a91565b9150509295989b9194979a5092959850565b60008060006060848603121562002bea57600080fd5b62002bf5846200270d565b9250602084013562002c0781620026e5565b9150604084013562002c1981620026e5565b809150509250925092565b600080600080600080600060a0888a03121562002c4057600080fd5b62002c4b886200270d565b9650602088013562002c5d81620026e5565b9550604088013567ffffffffffffffff8082111562002c7b57600080fd5b62002c898b838c0162002722565b909750955060608a013591508082111562002ca357600080fd5b5062002cb28a828b0162002722565b909450925050608088013562002cc881620029cc565b8091505092959891949750929550565b60008060006060848603121562002cee57600080fd5b62002cf9846200270d565b9250602084013562002d0b81620026e5565b9150604084013567ffffffffffffffff81111562002d2857600080fd5b62002d368682870162002a91565b9150509250925092565b6020808252603d908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79506f6c79676f6e5a4b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002e1b5762002e1b62002ddd565b500490565b60006001820162002e355762002e3562002df3565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002ec157818101518382015260200162002ea7565b8381111562000d725750506000910152565b6000815180845262002eed81602086016020860162002ea4565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002f339083018462002ed3565b95945050505050565b6000825162002f5081846020870162002ea4565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f83011262002fa357600080fd5b815162002fb462002ab48262002a66565b81815284602083860101111562002fca57600080fd5b620009d582602083016020870162002ea4565b60008060006060848603121562002ff357600080fd5b835167ffffffffffffffff808211156200300c57600080fd5b6200301a8783880162002f91565b945060208601519150808211156200303157600080fd5b50620030408682870162002f91565b925050604084015162002c1981620029cc565b60608152600062003068606083018662002ed3565b82810360208401526200307c818662002ed3565b91505060ff83166040830152949350505050565b80151581146200159b57600080fd5b600060208284031215620030b257600080fd5b81516200286f8162003090565b600082620030d157620030d162002ddd565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003115606083018789620030d6565b82810360208401526200312a818688620030d6565b91505060ff831660408301529695505050505050565b600083516200315481846020880162002ea4565b8351908301906200316a81836020880162002ea4565b01949350505050565b6020808252602a908201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e546040820152692fa122afa4aa29a2a62360b11b606082015260800190565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032118483018762002ed3565b925080851660e085015250509998505050505050505050565b6000602082840312156200323d57600080fd5b815167ffffffffffffffff8111156200325557600080fd5b620009d58482850162002f91565b6000602082840312156200327657600080fd5b81516200286f81620029cc565b6000602082840312156200329657600080fd5b5051919050565b600181815b80851115620032de578160001904821115620032c257620032c262002df3565b80851615620032d057918102915b93841c9390800290620032a2565b509250929050565b600082620032f757506001620007a7565b816200330657506000620007a7565b81600181146200331f57600281146200332a576200334a565b6001915050620007a7565b60ff8411156200333e576200333e62002df3565b50506001821b620007a7565b5060208310610133831016604e8410600b84101617156200336f575081810a620007a7565b6200337b83836200329d565b806000190482111562003392576200339262002df3565b029392505050565b60006200286f8383620032e6565b600082821015620033bd57620033bd62002df3565b500390565b60008219821115620033d857620033d862002df3565b500190565b634e487b7160e01b600052600160045260246000fd5b600080858511156200340457600080fd5b838611156200341257600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200343b57600080fd5b87356200344881620026e5565b965060208801356200345a81620026e5565b95506040880135945060608801359350608088013562002a4981620029cc565b60208082526030908201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560408201526f29aa2fa122afaa2422afa9a2a72222a960811b606082015260800190565b60208082526025908201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f42456040820152645f5448495360d81b606082015260800190565b600080600080600080600080610100898b0312156200352d57600080fd5b88356200353a81620026e5565b975060208901356200354c81620026e5565b9650604089013595506060890135945060808901356200356c8162003090565b935060a08901356200357e81620029cc565b979a969950949793969295929450505060c08201359160e0013590565b6020815260006200286f602083018462002ed356fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b14f80bfcbda3f7be499de7c67ec81639549928b9cee16384da9f2fb8c22dce64736f6c634300080f0033a26469706673582212209d92a2b1c7e60e3e584756f7d5db1e0439ffcf57ef3e1dfe02bb55cc69198f5664736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001f35760003560e01c806381b1c174116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b806381b1c17414620004615780638da5cb5b146200049b5780638f61151914620004bb57600080fd5b8063318aee3d116200018d5780634638554911620001585780634638554914620003da578063647c576c14620003ff578063715018a614620004245780637b6323c1146200043c57600080fd5b8063318aee3d14620003095780633ae0504714620003785780633da8168214620003905780633e19704314620003b557600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f620002093660046200276e565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f62000721565b3480156200026757600080fd5b506200027f62000279366004620027fb565b6200075a565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002837565b620007ad565b348015620002ca57600080fd5b506200020f620002dc36600462002851565b620007bc565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002876565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b50620002fa620007e8565b3480156200039d57600080fd5b506200022d620003af3660046200295e565b620008db565b348015620003c257600080fd5b50620002fa620003d4366004620029dc565b620009dd565b348015620003e757600080fd5b506200020f620003f936600462002aed565b62000a6a565b3480156200040c57600080fd5b506200020f6200041e36600462002bd4565b62000c03565b3480156200043157600080fd5b506200020f62000d78565b3480156200044957600080fd5b506200020f6200045b36600462002aed565b62000d8e565b3480156200046e57600080fd5b506200027f6200048036600462002837565b6024602052600090815260409020546001600160a01b031681565b348015620004a857600080fd5b50605a546001600160a01b03166200027f565b348015620004c857600080fd5b506027546200027f906001600160a01b031681565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002837565b6200122f565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002c24565b62001274565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002cd8565b6200138b565b348015620005e957600080fd5b506200020f620014e8565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002837565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002876565b6200151f565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007095760405162461bcd60e51b815260206004820152604a60248201527f4272696467653a3a6272696467653a2043616e6e6f7420627269646765206d6f60448201527f7265207468616e206d6178457468657242726964676520696e20696e7465726e606482015269185b081d195cdd1b995d60b21b608482015260a4015b60405180910390fd5b620007198686868686866200159e565b505050505050565b6027546001600160a01b031633146200074e5760405162461bcd60e51b8152600401620007009062002d40565b62000758620019cf565b565b60006024600084846040516020016200077592919062002d9d565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b762001a2d565b608c55565b620007c662001a2d565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008d257826001166001036200085357600181602081106200081f576200081f62002dc7565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000880565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088d60028462002e09565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c99062002e20565b915050620007f3565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009ce5781600116600103620009585786818151811062000916576200091662002dc7565b6020026020010151836040516020016200093a929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009aa565b828782815181106200096e576200096e62002dc7565b602002602001015160405160200162000991929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b760028362002e09565b915080620009c58162002e20565b915050620008eb565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a905760405162461bcd60e51b8152600401620007009062002e3c565b62000aa68a8a8a8a8a8a8a8a8a8a600162001a89565b62000ab78963ffffffff1662001d1a565b6000836001600160a01b03168387898560405160240162000adb9392919062002f01565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b12919062002f3c565b60006040518083038185875af1925050503d806000811462000b51576040519150601f19603f3d011682016040523d82523d6000602084013e62000b56565b606091505b505090508062000bb55760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f46416044820152631253115160e21b606482015260840162000700565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bee95949392919062002f5a565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c245750600054600160ff909116105b8062000c405750303b15801562000c40575060005460ff166001145b62000ca55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000700565b6000805460ff19166001179055801562000cc9576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d2b62001d5c565b801562000d72576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8262001a2d565b62000758600062001dcf565b60225460ff161562000db45760405162461bcd60e51b8152600401620007009062002e3c565b62000dca8a8a8a8a8a8a8a8a8a8a600062001a89565b62000ddb8963ffffffff1662001d1a565b6001600160a01b03851662000ec457604080516000808252602082019092526001600160a01b03851690849060405162000e16919062002f3c565b60006040518083038185875af1925050503d806000811462000e55576040519150601f19603f3d011682016040523d82523d6000602084013e62000e5a565b606091505b505090508062000ebd5760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201526617d1905253115160ca1b606482015260840162000700565b50620011e2565b60225463ffffffff61010090910481169087160362000ef95762000ef36001600160a01b038616848462001e21565b620011e2565b6000868660405160200162000f1092919062002d9d565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620011675760008060008580602001905181019062000f62919062002fdd565b92509250925060008584848460405162000f7c90620026d7565b62000f8a9392919062003053565b8190604051809103906000f590508015801562000fab573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001000573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200102691906200309f565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620011559392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011df565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620011b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011dd91906200309f565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200121b95949392919062002f5a565b60405180910390a150505050505050505050565b600080620012406101008462002e09565b905060006200125261010085620030bf565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200128c92919062002d9d565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012bf90620026d7565b601f1982820381018352601f909101166040819052620012ec908d908d908d908d908d90602001620030ff565b60408051601f19818403018152908290526200130c929160200162003140565b604051602081830303815290604052805190602001206040516020016200136594939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013b15760405162461bcd60e51b8152600401620007009062002e3c565b60225463ffffffff610100909104811690841603620013e45760405162461bcd60e51b8152600401620007009062003173565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff16338686348760215460405162001438989796959493929190620031bd565b60405180910390a1620014756200146f6001602260019054906101000a900463ffffffff16338787348880519060200120620009dd565b62001e8b565b6026546001600160a01b03166333d6247d62001490620007e8565b6040518263ffffffff1660e01b8152600401620014af91815260200190565b600060405180830381600087803b158015620014ca57600080fd5b505af1158015620014df573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015155760405162461bcd60e51b8152600401620007009062002d40565b6200075862001fd7565b6200152962001a2d565b6001600160a01b038116620015905760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000700565b6200159b8162001dcf565b50565b60225460ff1615620015c45760405162461bcd60e51b8152600401620007009062002e3c565b60225463ffffffff610100909104811690861603620015f75760405162461bcd60e51b8152600401620007009062003173565b60008060606001600160a01b0389166200167e57853414620016745760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201526e4d415443485f4d53475f56414c554560881b606482015260840162000700565b60009150620018ef565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200174c57604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562001713573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200173991906200309f565b50602081015181519094509250620018ed565b84156200176157620017618a88888862002086565b620017786001600160a01b038b1633308a6200248a565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620017cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620017f991908101906200322a565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001838573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200186291908101906200322a565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620018a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018c7919062003263565b604051602001620018db9392919062003053565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162001931989796959493929190620031bd565b60405180910390a1620019566200146f600084868c8c8c8880519060200120620009dd565b6026546001600160a01b03166333d6247d62001971620007e8565b6040518263ffffffff1660e01b81526004016200199091815260200190565b600060405180830381600087803b158015620019ab57600080fd5b505af1158015620019c0573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff1615620019f55760405162461bcd60e51b8152600401620007009062002e3c565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000700565b62001a9a8a63ffffffff166200122f565b1562001af55760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c416044820152631253515160e21b606482015260840162000700565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001b69573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001b8f919062003283565b90508060000362001bf95760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201526c17d493d3d517d2539590531251609a1b606482015260840162000700565b60225463ffffffff878116610100909204161462001c805760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d41544348000000000000000000606482015260840162000700565b602254600090610100900463ffffffff1662001c9e57508862001ca1565b50895b62001ccc62001cbd848b8b8b8b8b8b80519060200120620009dd565b8e8e63ffffffff1684620008db565b620019c05760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c4944604482015260640162000700565b600062001d2a6101008362002e09565b9050600062001d3c61010084620030bf565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001dc95760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000700565b62000758335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001e8690849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620024c4565b505050565b80600162001e9c602060026200339a565b62001ea89190620033a8565b6021541062001f0d5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000700565b60016021600082825462001f229190620033c2565b909155505060215460005b602081101562001fcc578160011660010362001f6257826001826020811062001f5a5762001f5a62002dc7565b015550505050565b6001816020811062001f785762001f7862002dc7565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001fb5919062002e09565b91508062001fc38162002e20565b91505062001f2d565b5062001e86620033dd565b60225460ff16620020515760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000700565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000620020c983838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200259d92505050565b9050632afa533160e01b6001600160e01b0319821601620022b2576000808080808080620020fb896004818d620033f3565b8101906200210a91906200341f565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200214c5760405162461bcd60e51b815260040162000700906200347a565b6001600160a01b0386163014620021775760405162461bcd60e51b81526004016200070090620034ca565b8a8514620021de5760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201526c09e8aa6be9c9ea8be9a82a8869609b1b606482015260840162000700565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200225e919062002f3c565b6000604051808303816000865af19150503d80600081146200229d576040519150601f19603f3d011682016040523d82523d6000602084013e620022a2565b606091505b5050505050505050505062002483565b6001600160e01b031981166323f2ebc360e21b14620023145760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000700565b6000808080808080806200232c8a6004818e620033f3565b8101906200233b91906200350f565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200237f5760405162461bcd60e51b815260040162000700906200347a565b6001600160a01b0387163014620023aa5760405162461bcd60e51b81526004016200070090620034ca565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162002433919062002f3c565b6000604051808303816000865af19150503d806000811462002472576040519150601f19603f3d011682016040523d82523d6000602084013e62002477565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d729085906323b872dd60e01b9060840162001e4e565b60006200251b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620025a49092919063ffffffff16565b80519091501562001e8657808060200190518101906200253c91906200309f565b62001e865760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000700565b6020015190565b6060620009d5848460008585600080866001600160a01b03168587604051620025ce919062002f3c565b60006040518083038185875af1925050503d80600081146200260d576040519150601f19603f3d011682016040523d82523d6000602084013e62002612565b606091505b5091509150620026258783838762002630565b979650505050505050565b60608315620026a45782516000036200269c576001600160a01b0385163b6200269c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000700565b5081620009d5565b620009d58383815115620026bb5781518083602001fd5b8060405162461bcd60e51b81526004016200070091906200359b565b61155780620035b183390190565b6001600160a01b03811681146200159b57600080fd5b80356200270881620026e5565b919050565b803563ffffffff811681146200270857600080fd5b60008083601f8401126200273557600080fd5b50813567ffffffffffffffff8111156200274e57600080fd5b6020830191508360208285010111156200276757600080fd5b9250929050565b60008060008060008060a087890312156200278857600080fd5b86356200279581620026e5565b9550620027a5602088016200270d565b94506040870135620027b781620026e5565b935060608701359250608087013567ffffffffffffffff811115620027db57600080fd5b620027e989828a0162002722565b979a9699509497509295939492505050565b600080604083850312156200280f57600080fd5b6200281a836200270d565b915060208301356200282c81620026e5565b809150509250929050565b6000602082840312156200284a57600080fd5b5035919050565b6000602082840312156200286457600080fd5b6200286f826200270d565b9392505050565b6000602082840312156200288957600080fd5b81356200286f81620026e5565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620028d857620028d862002896565b604052919050565b600082601f830112620028f257600080fd5b8135602067ffffffffffffffff82111562002911576200291162002896565b8160051b62002922828201620028ac565b92835284810182019282810190878511156200293d57600080fd5b83870192505b84831015620026255782358252918301919083019062002943565b600080600080608085870312156200297557600080fd5b84359350602085013567ffffffffffffffff808211156200299557600080fd5b620029a388838901620028e0565b9450604087013591508082168214620029bb57600080fd5b509396929550929360600135925050565b60ff811681146200159b57600080fd5b600080600080600080600060e0888a031215620029f857600080fd5b873562002a0581620029cc565b965062002a15602089016200270d565b9550604088013562002a2781620026e5565b945062002a37606089016200270d565b9350608088013562002a4981620026e5565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002a835762002a8362002896565b50601f01601f191660200190565b600082601f83011262002aa357600080fd5b813562002aba62002ab48262002a66565b620028ac565b81815284602083860101111562002ad057600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002b0e57600080fd5b8a3567ffffffffffffffff8082111562002b2757600080fd5b62002b358e838f01620028e0565b9b5062002b4560208e016200270d565b9a5060408d0135995060608d0135985062002b6360808e016200270d565b975062002b7360a08e01620026fb565b965062002b8360c08e016200270d565b955062002b9360e08e01620026fb565b94506101008d013593506101208d013591508082111562002bb357600080fd5b5062002bc28d828e0162002a91565b9150509295989b9194979a5092959850565b60008060006060848603121562002bea57600080fd5b62002bf5846200270d565b9250602084013562002c0781620026e5565b9150604084013562002c1981620026e5565b809150509250925092565b600080600080600080600060a0888a03121562002c4057600080fd5b62002c4b886200270d565b9650602088013562002c5d81620026e5565b9550604088013567ffffffffffffffff8082111562002c7b57600080fd5b62002c898b838c0162002722565b909750955060608a013591508082111562002ca357600080fd5b5062002cb28a828b0162002722565b909450925050608088013562002cc881620029cc565b8091505092959891949750929550565b60008060006060848603121562002cee57600080fd5b62002cf9846200270d565b9250602084013562002d0b81620026e5565b9150604084013567ffffffffffffffff81111562002d2857600080fd5b62002d368682870162002a91565b9150509250925092565b6020808252603d908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79506f6c79676f6e5a4b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002e1b5762002e1b62002ddd565b500490565b60006001820162002e355762002e3562002df3565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002ec157818101518382015260200162002ea7565b8381111562000d725750506000910152565b6000815180845262002eed81602086016020860162002ea4565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002f339083018462002ed3565b95945050505050565b6000825162002f5081846020870162002ea4565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f83011262002fa357600080fd5b815162002fb462002ab48262002a66565b81815284602083860101111562002fca57600080fd5b620009d582602083016020870162002ea4565b60008060006060848603121562002ff357600080fd5b835167ffffffffffffffff808211156200300c57600080fd5b6200301a8783880162002f91565b945060208601519150808211156200303157600080fd5b50620030408682870162002f91565b925050604084015162002c1981620029cc565b60608152600062003068606083018662002ed3565b82810360208401526200307c818662002ed3565b91505060ff83166040830152949350505050565b80151581146200159b57600080fd5b600060208284031215620030b257600080fd5b81516200286f8162003090565b600082620030d157620030d162002ddd565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003115606083018789620030d6565b82810360208401526200312a818688620030d6565b91505060ff831660408301529695505050505050565b600083516200315481846020880162002ea4565b8351908301906200316a81836020880162002ea4565b01949350505050565b6020808252602a908201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e546040820152692fa122afa4aa29a2a62360b11b606082015260800190565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032118483018762002ed3565b925080851660e085015250509998505050505050505050565b6000602082840312156200323d57600080fd5b815167ffffffffffffffff8111156200325557600080fd5b620009d58482850162002f91565b6000602082840312156200327657600080fd5b81516200286f81620029cc565b6000602082840312156200329657600080fd5b5051919050565b600181815b80851115620032de578160001904821115620032c257620032c262002df3565b80851615620032d057918102915b93841c9390800290620032a2565b509250929050565b600082620032f757506001620007a7565b816200330657506000620007a7565b81600181146200331f57600281146200332a576200334a565b6001915050620007a7565b60ff8411156200333e576200333e62002df3565b50506001821b620007a7565b5060208310610133831016604e8410600b84101617156200336f575081810a620007a7565b6200337b83836200329d565b806000190482111562003392576200339262002df3565b029392505050565b60006200286f8383620032e6565b600082821015620033bd57620033bd62002df3565b500390565b60008219821115620033d857620033d862002df3565b500190565b634e487b7160e01b600052600160045260246000fd5b600080858511156200340457600080fd5b838611156200341257600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200343b57600080fd5b87356200344881620026e5565b965060208801356200345a81620026e5565b95506040880135945060608801359350608088013562002a4981620029cc565b60208082526030908201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560408201526f29aa2fa122afaa2422afa9a2a72222a960811b606082015260800190565b60208082526025908201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f42456040820152645f5448495360d81b606082015260800190565b600080600080600080600080610100898b0312156200352d57600080fd5b88356200353a81620026e5565b975060208901356200354c81620026e5565b9650604089013595506060890135945060808901356200356c8162003090565b935060a08901356200357e81620029cc565b979a969950949793969295929450505060c08201359160e0013590565b6020815260006200286f602083018462002ed356fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b14f80bfcbda3f7be499de7c67ec81639549928b9cee16384da9f2fb8c22dce64736f6c634300080f0033a26469706673582212209d92a2b1c7e60e3e584756f7d5db1e0439ffcf57ef3e1dfe02bb55cc69198f5664736f6c634300080f0033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/compiled-contracts/PolygonZKEVM.json b/compiled-contracts/PolygonZKEVM.json index a776346ef..7c8af3fa3 100644 --- a/compiled-contracts/PolygonZKEVM.json +++ b/compiled-contracts/PolygonZKEVM.json @@ -642,7 +642,7 @@ "name": "globalExitRootManager", "outputs": [ { - "internalType": "contract IGlobalExitRootManager", + "internalType": "contract IPolygonZKEVMGlobalExitRoot", "name": "", "type": "address" } @@ -653,7 +653,7 @@ { "inputs": [ { - "internalType": "contract IGlobalExitRootManager", + "internalType": "contract IPolygonZKEVMGlobalExitRoot", "name": "_globalExitRootManager", "type": "address" }, @@ -1469,8 +1469,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5061562380620000216000396000f3fe608060405234801561001057600080fd5b50600436106103af5760003560e01c80638da5cb5b116101f4578063cfa8ed471161011a578063e7a7ed02116100ad578063f14916d61161007c578063f14916d6146108eb578063f2fde38b146108fe578063f851a44014610911578063f8b823e41461092457600080fd5b8063e7a7ed0214610898578063e8bf92ed146108b2578063eaeb077b146108c5578063edc41121146108d857600080fd5b8063d939b315116100e9578063d939b3151461085a578063dbc1697614610874578063e11f3f181461087c578063e217cfd61461088f57600080fd5b8063cfa8ed4714610806578063d02103ca14610820578063d8d1091b14610833578063d8f54db01461084657600080fd5b8063ab9fc5ef11610192578063b6b0b09711610161578063b6b0b097146107be578063c0ed84e0146107d8578063c89e42df146107e0578063cf136306146107f357600080fd5b8063ab9fc5ef14610712578063adc879e91461071c578063afd23cbe14610736578063b4d63f581461075e57600080fd5b80639eb831b9116101ce5780639eb831b9146106d75780639f0d039d146106df578063a3c573eb146106e7578063aa58bad6146106fa57600080fd5b80638da5cb5b146106ab57806399f5634e146106bc5780639c9f3dfe146106c457600080fd5b80634a910e6a116102d9578063715018a611610277578063837a473811610246578063837a473814610606578063841b24d7146106745780638b48931e1461068e5780638c4a0af71461069857600080fd5b8063715018a6146105c55780637215541a146105cd57806375c508b3146105e05780637fcb3653146105f357600080fd5b806360943d6a116102b357806360943d6a1461056c5780636b8616ce1461057f5780636ff512cc1461059f578063704b6c02146105b257600080fd5b80634a910e6a146105315780635392c5e014610544578063542028d51461056457600080fd5b8063383b3be811610351578063456052671161032057806345605267146104d7578063458c0477146104f15780634834a343146105045780634a1a89a71461051757600080fd5b8063383b3be814610484578063394218e9146104975780633c158267146104aa578063423fa856146104bd57600080fd5b806319d8ac611161038d57806319d8ac6114610404578063220d78991461042f57806329878983146104425780632d0889d31461046d57600080fd5b8063107bf28c146103b457806315064c96146103d25780631816b7e5146103ef575b600080fd5b6103bc61092d565b6040516103c9919061476b565b60405180910390f35b6065546103df9060ff1681565b60405190151581526020016103c9565b6104026103fd366004614785565b6109bb565b005b606854610417906001600160401b031681565b6040516001600160401b0390911681526020016103c9565b6103bc61043d3660046147c5565b610aea565b606a54610455906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b61047661ea6081565b6040519081526020016103c9565b6103df610492366004614812565b610c90565b6104026104a5366004614812565b610cd7565b6104026104b836600461494f565b610e26565b60685461041790600160401b90046001600160401b031681565b60685461041790600160801b90046001600160401b031681565b607254610417906001600160401b031681565b610402610512366004614a8d565b61163a565b60725461041790600160401b90046001600160401b031681565b61040261053f366004614812565b611983565b610476610552366004614812565b606d6020526000908152604090205481565b6103bc611c23565b61040261057a366004614b2f565b611c30565b61047661058d366004614812565b60666020526000908152604090205481565b6104026105ad366004614c06565b611fa0565b6104026105c0366004614c06565b612024565b61040261209c565b6104026105db366004614812565b6120b0565b6104026105ee366004614c23565b612328565b606954610417906001600160401b031681565b610649610614366004614cc1565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103c9565b60725461041790600160c01b90046001600160401b031681565b61041762093a8081565b6104026106a6366004614ce8565b6123b7565b6033546001600160a01b0316610455565b61047661242e565b6104026106d2366004614812565b612511565b610476600c81565b607454610476565b607054610455906001600160a01b031681565b6065546104179061010090046001600160401b031681565b6104176206978081565b606c5461041790600160a81b90046001600160401b031681565b60655461074b90600160481b900461ffff1681565b60405161ffff90911681526020016103c9565b61079961076c366004614812565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103c9565b60655461045590600160581b90046001600160a01b031681565b610417612657565b6104026107ee366004614d05565b6126a4565b610402610801366004614812565b61270a565b60695461045590600160401b90046001600160a01b031681565b606c54610455906001600160a01b031681565b610402610841366004614d39565b61278b565b606c546103df90600160a01b900460ff1681565b60725461041790600160801b90046001600160401b031681565b610402612c55565b61040261088a366004614c23565b612d11565b6104176103e881565b60685461041790600160c01b90046001600160401b031681565b606b54610455906001600160a01b031681565b6104026108d3366004614e2b565b612e56565b6104026108e6366004614a8d565b61317e565b6104026108f9366004614c06565b61329e565b61040261090c366004614c06565b613316565b607354610455906001600160a01b031681565b61047660745481565b606f805461093a90614e6f565b80601f016020809104026020016040519081016040528092919081815260200182805461096690614e6f565b80156109b35780601f10610988576101008083540402835291602001916109b3565b820191906000526020600020905b81548152906001019060200180831161099657829003601f168201915b505050505081565b6073546001600160a01b031633146109ee5760405162461bcd60e51b81526004016109e590614ea9565b60405180910390fd5b6103e88161ffff16118015610a0857506104008161ffff16105b610a8d5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a4b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a4016109e5565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610b1c57508115155b610b90576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e5565b80610c05576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e5565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610cc692600160801b90920481169116614f02565b6001600160401b0316111592915050565b6073546001600160a01b03163314610d015760405162461bcd60e51b81526004016109e590614ea9565b62093a806001600160401b0382161115610d2d5760405162461bcd60e51b81526004016109e590614f2d565b60655460ff16610dd0576072546001600160401b03600160c01b909104811690821610610dd05760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a4b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109e5565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610adf565b60655460ff1615610e495760405162461bcd60e51b81526004016109e590614f98565b606954600160401b90046001600160a01b03163314610ed05760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e63657200000000000060648201526084016109e5565b805180610f455760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e6365203120626174636800000060648201526084016109e5565b6103e88110610fbe576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e79206261746368657360648201526084016109e5565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561145e57600087828151811061101157611011615000565b60200260200101519050600081606001516001600160401b031611156111ca578361103b81615016565b9450506000816000015180519060200120826020015183606001516040516020016110689392919061503c565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461110e5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d6174636800000060648201526084016109e5565b81606001516001600160401b031682604001516001600160401b031610156111c45760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a4016109e5565b50611351565b602081015115806112535750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b36329161120d9160040190815260200190565b6020604051808303816000875af115801561122c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611250919061505f565b15155b6112c55760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d75737420657869737400000000000060648201526084016109e5565b80515161ea60116113515760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a4016109e5565b856001600160401b031681604001516001600160401b03161015801561138457504281604001516001600160401b031611155b6113f65760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e676500000060648201526084016109e5565b8051805160209182012081830151604080850151905161141d948894939291339101615078565b604051602081830303815290604052805190602001209250848061144090615016565b95505080604001519550508080611456906150bc565b915050610ff5565b506068546001600160401b03600160c01b909104811690831611156114e35760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b60648201526084016109e5565b60685460009061150390600160801b90046001600160401b0316846150d5565b611516906001600160401b0316876150fd565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115eb903390309084906115d09190615114565b606554600160581b90046001600160a01b031692919061338c565b6115f36133f7565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff161561165d5760405162461bcd60e51b81526004016109e590614f98565b6072546001600160401b03878116600090815260676020526040902060010154429261169492600160c01b90910481169116614f02565b6001600160401b0316111561171d5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a4016109e5565b6103e861172a88886150d5565b6001600160401b0316106117a65760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e7920626174636865730000000060648201526084016109e5565b6117b6888888888888888861349b565b6117bf866139d9565b607254600160801b90046001600160401b0316600003611887576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561182457607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561186a57600080fd5b505af115801561187e573d6000803e3d6000fd5b50505050611938565b61188f6133f7565b607280546001600160401b03169060006118a883615016565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b038116158015906119b057506072546001600160401b03600160401b9091048116908216115b80156119cb57506072546001600160401b0390811690821611155b611a495760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a4016109e5565b606a546001600160a01b03163314611af357611a6481610c90565b611af35760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a4016109e5565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d9094529382902092909255607280546fffffffffffffffff000000000000000019169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611bb557600080fd5b505af1158015611bc9573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611c1691815260200190565b60405180910390a3505050565b606e805461093a90614e6f565b600054610100900460ff1615808015611c505750600054600160ff909116105b80611c6a5750303b158015611c6a575060005460ff166001145b611ccd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109e5565b6000805460ff191660011790558015611cf0576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611d6d6020860186614c06565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d9d6060860160408701614c06565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611dd860c0860160a08701614c06565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611e3560e0860160c08701614812565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611e6c6040860160208701614812565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611ea86080860160608701614812565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611ee460a0860160808701614ce8565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611f0c8482615179565b50606f611f198382615179565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611f4f613bbf565b8015611f95576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611fca5760405162461bcd60e51b81526004016109e590614ea9565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610adf565b6073546001600160a01b0316331461204e5760405162461bcd60e51b81526004016109e590614ea9565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190602001610adf565b6120a4613c33565b6120ae6000613c8d565b565b6033546001600160a01b0316331461231d576072546000906001600160401b03161561210157506072546001600160401b03908116600090815260716020526040902054600160401b90041661210f565b506069546001600160401b03165b80826001600160401b03161161218d5760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c72656164792076657269666965640000000060648201526084016109e5565b6068546001600160401b03600160401b9091048116908316118015906121cf57506001600160401b038083166000908152606760205260409020600101541615155b61225a5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a4016109e5565b6001600160401b0380831660009081526067602052604090206001015442916122889162093a809116614f02565b6001600160401b0316111561231b5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a4016109e5565b505b612325613cdf565b50565b60655460ff161561234b5760405162461bcd60e51b81526004016109e590614f98565b61235c898989898989898989613d4f565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f95613cdf565b6073546001600160a01b031633146123e15760405162461bcd60e51b81526004016109e590614ea9565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610adf90831515815260200190565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612481573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a5919061505f565b905060006124b1612657565b6068546001600160401b03600160401b82048116916124e191600160801b8204811691600160c01b9004166150d5565b6124eb9190614f02565b6124f591906150d5565b6001600160401b0316905061250a818361524e565b9250505090565b6073546001600160a01b0316331461253b5760405162461bcd60e51b81526004016109e590614ea9565b62093a806001600160401b03821611156125675760405162461bcd60e51b81526004016109e590614f2d565b60655460ff166125fc576072546001600160401b03600160801b9091048116908216106125fc5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f7765720060648201526084016109e5565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610adf565b6072546000906001600160401b03161561269457506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126ce5760405162461bcd60e51b81526004016109e590614ea9565b606e6126da8282615179565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610adf919061476b565b6073546001600160a01b031633146127345760405162461bcd60e51b81526004016109e590614ea9565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610adf565b60655460ff16156127ae5760405162461bcd60e51b81526004016109e590614f98565b606c54600160a01b900460ff1615156001146127dc5760405162461bcd60e51b81526004016109e590615262565b80518061283f5760405162461bcd60e51b815260206004820152603d60248201526000805160206155ae83398151915260448201527f3a204d75737420666f726365206174206c65617374203120626174636800000060648201526084016109e5565b6103e881106128b05760405162461bcd60e51b815260206004820152604360248201526000805160206155ae83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a4016109e5565b6068546001600160401b03600160c01b82048116916128d8918491600160801b9004166152cb565b11156129325760405162461bcd60e51b815260206004820152603560248201526000805160206155ae8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b60648201526084016109e5565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612b5e57600086828151811061297f5761297f615000565b60200260200101519050838061299490615016565b9450506000816000015180519060200120826020015183604001516040516020016129c19392919061503c565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612a605760405162461bcd60e51b815260206004820152604260248201526000805160206155ae83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109e5565b612a6b6001886150fd565b8303612b005742620697808360400151612a859190614f02565b6001600160401b03161115612b005760405162461bcd60e51b815260206004820152604760248201526000805160206155ae83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a4016109e5565b8151805160209182012081840151604051612b2393889392914291339101615078565b6040516020818303038152906040528051906020012093508580612b4690615016565b96505050508080612b56906150bc565b915050612963565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612c775760405162461bcd60e51b81526004016109e5906152e3565b6073546001600160a01b03163314612ca15760405162461bcd60e51b81526004016109e590614ea9565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612cf157600080fd5b505af1158015612d05573d6000803e3d6000fd5b505050506120ae6143ca565b606a546001600160a01b03163314612d3b5760405162461bcd60e51b81526004016109e590615340565b612d4c898989898989898989613d4f565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612d9757607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612ddd57600080fd5b505af1158015612df1573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612e795760405162461bcd60e51b81526004016109e590614f98565b606c54600160a01b900460ff161515600114612ea75760405162461bcd60e51b81526004016109e590615262565b6000612eb260745490565b905081811115612f175760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b60648201526084016109e5565b61ea60835110612f875760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b60648201526084016109e5565b606554612fa690600160581b90046001600160a01b031633308461338c565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015612ff0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613014919061505f565b60688054919250600160c01b9091046001600160401b031690601861303883615016565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016130799392919061503c565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361311d57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613178565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161316f9392919061539d565b60405180910390a25b50505050565b606a546001600160a01b031633146131a85760405162461bcd60e51b81526004016109e590615340565b6131b8888888888888888861349b565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561320357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561324957600080fd5b505af115801561325d573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611971565b6073546001600160a01b031633146132c85760405162461bcd60e51b81526004016109e590614ea9565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001610adf565b61331e613c33565b6001600160a01b0381166133835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e5565b61232581613c8d565b6040516001600160a01b03808516602483015283166044820152606481018290526131789085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614421565b6072546001600160401b03600160401b82048116911611156120ae5760725460009061343490600160401b90046001600160401b03166001614f02565b905061343f81610c90565b15612325576072546000906002906134619084906001600160401b03166150d5565b61346b91906153d0565b6134759083614f02565b905061348081610c90565b156134925761348e81611983565b5050565b61348e82611983565b6000806134a6612657565b90506001600160401b038a1615613621576072546001600160401b03908116908b1611156135625760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2070656e60448201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560648201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608482015260a4016109e5565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b909204161461361b5760405162461bcd60e51b815260206004820152604c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760648201526b040e6e8c2e8ca40c4c2e8c6d60a31b608482015260a4016109e5565b50613769565b6001600160401b0389166000908152606d60205260409020549150816136bb5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786064820152621a5cdd60ea1b608482015260a4016109e5565b806001600160401b0316896001600160401b031611156137695760405162461bcd60e51b815260206004820152605d60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060648201527f7468616e2063757272656e744c61737456657269666965644261746368000000608482015260a4016109e5565b806001600160401b0316886001600160401b0316116138165760405162461bcd60e51b815260206004820152605760248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2066696e60448201527f616c4e65774261746368206d75737420626520626967676572207468616e206360648201527f757272656e744c61737456657269666965644261746368000000000000000000608482015260a4016109e5565b60006138258a8a8a868b610aea565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161385a91906153f6565b602060405180830381855afa158015613877573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061389a919061505f565b6138a49190615412565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916138e8918b918b918b9190600401615426565b602060405180830381865afa158015613905573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392991906154a0565b6139885760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20494e5660448201526920a624a22fa82927a7a360b11b60648201526084016109e5565b6139cb33613996858d6150d5565b6001600160401b03166139a761242e565b6139b19190615114565b606554600160581b90046001600160a01b031691906144f8565b505050505050505050505050565b60006139e3612657565b9050816000806139f384846150d5565b6001600160401b031690505b836001600160401b0316836001600160401b031614613aa5576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613a4f9116426150fd565b1115613a8a576001810154613a7490600160401b90046001600160401b0316866150d5565b613a87906001600160401b0316846152cb565b92505b60010154600160401b90046001600160401b031692506139ff565b6000613ab183836150fd565b905082811015613b2b576000613ac782856150fd565b9050600c8111613ad75780613ada565b600c5b9050613ae7816003615114565b613af290600a6155a1565b606554613b0b908390600160481b900461ffff166155a1565b607454613b189190615114565b613b22919061524e565b60745550613bb7565b6000613b3784836150fd565b9050600c8111613b475780613b4a565b600c5b90506000613b59826003615114565b613b6490600a6155a1565b606554613b7d908490600160481b900461ffff166155a1565b607454613b8a9190615114565b613b94919061524e565b905080607454607454613ba79190615114565b613bb1919061524e565b60745550505b505050505050565b600054610100900460ff16613c2a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109e5565b6120ae33613c8d565b6033546001600160a01b031633146120ae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109e5565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d2f57600080fd5b505af1158015613d43573d6000803e3d6000fd5b505050506120ae614528565b60006001600160401b038a1615613eca576072546001600160401b03908116908b161115613e0e5760405162461bcd60e51b815260206004820152606c60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c4016109e5565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613ec45760405162461bcd60e51b815260206004820152606060248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a4016109e5565b5061401e565b506001600160401b0387166000908152606d602052604090205480613f6b5760405162461bcd60e51b815260206004820152605760248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a4016109e5565b6069546001600160401b03908116908916111561401e5760405162461bcd60e51b815260206004820152607160248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c4016109e5565b6072546001600160401b03908116908a161180159061404e5750896001600160401b0316896001600160401b0316115b801561406f57506072546001600160401b03600160401b9091048116908a16115b6140e75760405162461bcd60e51b815260206004820152604f60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a4016109e5565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146141a75760405162461bcd60e51b815260206004820152606a60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c4016109e5565b60006141b6898989858a610aea565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516141eb91906153f6565b602060405180830381855afa158015614208573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061422b919061505f565b6142359190615412565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614279918a918a918a9190600401615426565b602060405180830381865afa158015614296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ba91906154a0565b61431a5760405162461bcd60e51b815260206004820152603e60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20494e56414c49445f50524f4f46000060648201526084016109e5565b6001600160401b038b166000908152607160205260409020600201548790036139cb5760405162461bcd60e51b815260206004820152606260248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c4016109e5565b60655460ff166143ec5760405162461bcd60e51b81526004016109e5906152e3565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614476826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145839092919063ffffffff16565b8051909150156144f3578080602001905181019061449491906154a0565b6144f35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109e5565b505050565b6040516001600160a01b0383166024820152604481018290526144f390849063a9059cbb60e01b906064016133c0565b60655460ff161561454b5760405162461bcd60e51b81526004016109e590614f98565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614592848460008561459a565b949350505050565b6060824710156145fb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109e5565b600080866001600160a01b0316858760405161461791906153f6565b60006040518083038185875af1925050503d8060008114614654576040519150601f19603f3d011682016040523d82523d6000602084013e614659565b606091505b509150915061466a87838387614675565b979650505050505050565b606083156146e45782516000036146dd576001600160a01b0385163b6146dd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109e5565b5081614592565b61459283838151156146f95781518083602001fd5b8060405162461bcd60e51b81526004016109e5919061476b565b60005b8381101561472e578181015183820152602001614716565b838111156131785750506000910152565b60008151808452614757816020860160208601614713565b601f01601f19169290920160200192915050565b60208152600061477e602083018461473f565b9392505050565b60006020828403121561479757600080fd5b813561ffff8116811461477e57600080fd5b80356001600160401b03811681146147c057600080fd5b919050565b600080600080600060a086880312156147dd57600080fd5b6147e6866147a9565b94506147f4602087016147a9565b94979496505050506040830135926060810135926080909101359150565b60006020828403121561482457600080fd5b61477e826147a9565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156148655761486561482d565b60405290565b604051606081016001600160401b03811182821017156148655761486561482d565b604051601f8201601f191681016001600160401b03811182821017156148b5576148b561482d565b604052919050565b60006001600160401b038211156148d6576148d661482d565b5060051b60200190565b600082601f8301126148f157600080fd5b81356001600160401b0381111561490a5761490a61482d565b61491d601f8201601f191660200161488d565b81815284602083860101111561493257600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561496257600080fd5b82356001600160401b038082111561497957600080fd5b818501915085601f83011261498d57600080fd5b81356149a061499b826148bd565b61488d565b81815260059190911b830184019084810190888311156149bf57600080fd5b8585015b83811015614a58578035858111156149db5760008081fd5b86016080818c03601f19018113156149f35760008081fd5b6149fb614843565b8983013588811115614a0d5760008081fd5b614a1b8e8c838701016148e0565b8252506040808401358b8301526060614a358186016147a9565b82840152614a448486016147a9565b9083015250855250509186019186016149c3565b5098975050505050505050565b8060408101831015614a7657600080fd5b92915050565b8060808101831015614a7657600080fd5b6000806000806000806000806101a0898b031215614aaa57600080fd5b614ab3896147a9565b9750614ac160208a016147a9565b9650614acf60408a016147a9565b95506060890135945060808901359350614aec8a60a08b01614a65565b9250614afb8a60e08b01614a7c565b9150614b0b8a6101608b01614a65565b90509295985092959890939650565b6001600160a01b038116811461232557600080fd5b600080600080600080600080888a036101c0811215614b4d57600080fd5b8935614b5881614b1a565b985060208a0135614b6881614b1a565b975060408a0135614b7881614b1a565b965060608a0135614b8881614b1a565b955060e0607f1982011215614b9c57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614bc657600080fd5b614bd28c838d016148e0565b93506101a08b0135915080821115614be957600080fd5b50614bf68b828c016148e0565b9150509295985092959890939650565b600060208284031215614c1857600080fd5b813561477e81614b1a565b60008060008060008060008060006101c08a8c031215614c4257600080fd5b614c4b8a6147a9565b9850614c5960208b016147a9565b9750614c6760408b016147a9565b9650614c7560608b016147a9565b955060808a0135945060a08a01359350614c928b60c08c01614a65565b9250614ca28b6101008c01614a7c565b9150614cb28b6101808c01614a65565b90509295985092959850929598565b600060208284031215614cd357600080fd5b5035919050565b801515811461232557600080fd5b600060208284031215614cfa57600080fd5b813561477e81614cda565b600060208284031215614d1757600080fd5b81356001600160401b03811115614d2d57600080fd5b614592848285016148e0565b60006020808385031215614d4c57600080fd5b82356001600160401b0380821115614d6357600080fd5b818501915085601f830112614d7757600080fd5b8135614d8561499b826148bd565b81815260059190911b83018401908481019088831115614da457600080fd5b8585015b83811015614a5857803585811115614dc05760008081fd5b86016060818c03601f1901811315614dd85760008081fd5b614de061486b565b8983013588811115614df25760008081fd5b614e008e8c838701016148e0565b8252506040808401358b830152614e188385016147a9565b9082015285525050918601918601614da8565b60008060408385031215614e3e57600080fd5b82356001600160401b03811115614e5457600080fd5b614e60858286016148e0565b95602094909401359450505050565b600181811c90821680614e8357607f821691505b602082108103614ea357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614f2457614f24614eec565b01949350505050565b60208082526045908201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361503257615032614eec565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b60006020828403121561507157600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b6000600182016150ce576150ce614eec565b5060010190565b60006001600160401b03838116908316818110156150f5576150f5614eec565b039392505050565b60008282101561510f5761510f614eec565b500390565b600081600019048311821515161561512e5761512e614eec565b500290565b601f8211156144f357600081815260208120601f850160051c8101602086101561515a5750805b601f850160051c820191505b81811015613bb757828155600101615166565b81516001600160401b038111156151925761519261482d565b6151a6816151a08454614e6f565b84615133565b602080601f8311600181146151db57600084156151c35750858301515b600019600386901b1c1916600185901b178555613bb7565b600085815260208120601f198616915b8281101561520a578886015182559484019460019091019084016151eb565b50858210156152285787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b60008261525d5761525d615238565b500490565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b600082198211156152de576152de614eec565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b03831660208201526060604082018190526000906153c79083018461473f565b95945050505050565b60006001600160401b03808416806153ea576153ea615238565b92169190910492915050565b60008251615408818460208701614713565b9190910192915050565b60008261542157615421615238565b500690565b61012081016040808784376000838201818152879190815b600281101561545e5784848337908401828152928401929060010161543e565b5050828760c0870137610100850181815286935091505b6001811015615494578251825260209283019290910190600101615475565b50505095945050505050565b6000602082840312156154b257600080fd5b815161477e81614cda565b600181815b808511156154f85781600019048211156154de576154de614eec565b808516156154eb57918102915b93841c93908002906154c2565b509250929050565b60008261550f57506001614a76565b8161551c57506000614a76565b8160018114615532576002811461553c57615558565b6001915050614a76565b60ff84111561554d5761554d614eec565b50506001821b614a76565b5060208310610133831016604e8410600b841016171561557b575081810a614a76565b61558583836154bd565b806000190482111561559957615599614eec565b029392505050565b600061477e838361550056fe506f6c79676f6e5a4b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a4b45564d3a3a70726f76654e6f6e44657465726d696e6973a26469706673582212205d57ed2ff6c1ede6347c6bf0896d13c6ddcaf85c10458b10044af2a6be36deaf64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103af5760003560e01c80638da5cb5b116101f4578063cfa8ed471161011a578063e7a7ed02116100ad578063f14916d61161007c578063f14916d6146108eb578063f2fde38b146108fe578063f851a44014610911578063f8b823e41461092457600080fd5b8063e7a7ed0214610898578063e8bf92ed146108b2578063eaeb077b146108c5578063edc41121146108d857600080fd5b8063d939b315116100e9578063d939b3151461085a578063dbc1697614610874578063e11f3f181461087c578063e217cfd61461088f57600080fd5b8063cfa8ed4714610806578063d02103ca14610820578063d8d1091b14610833578063d8f54db01461084657600080fd5b8063ab9fc5ef11610192578063b6b0b09711610161578063b6b0b097146107be578063c0ed84e0146107d8578063c89e42df146107e0578063cf136306146107f357600080fd5b8063ab9fc5ef14610712578063adc879e91461071c578063afd23cbe14610736578063b4d63f581461075e57600080fd5b80639eb831b9116101ce5780639eb831b9146106d75780639f0d039d146106df578063a3c573eb146106e7578063aa58bad6146106fa57600080fd5b80638da5cb5b146106ab57806399f5634e146106bc5780639c9f3dfe146106c457600080fd5b80634a910e6a116102d9578063715018a611610277578063837a473811610246578063837a473814610606578063841b24d7146106745780638b48931e1461068e5780638c4a0af71461069857600080fd5b8063715018a6146105c55780637215541a146105cd57806375c508b3146105e05780637fcb3653146105f357600080fd5b806360943d6a116102b357806360943d6a1461056c5780636b8616ce1461057f5780636ff512cc1461059f578063704b6c02146105b257600080fd5b80634a910e6a146105315780635392c5e014610544578063542028d51461056457600080fd5b8063383b3be811610351578063456052671161032057806345605267146104d7578063458c0477146104f15780634834a343146105045780634a1a89a71461051757600080fd5b8063383b3be814610484578063394218e9146104975780633c158267146104aa578063423fa856146104bd57600080fd5b806319d8ac611161038d57806319d8ac6114610404578063220d78991461042f57806329878983146104425780632d0889d31461046d57600080fd5b8063107bf28c146103b457806315064c96146103d25780631816b7e5146103ef575b600080fd5b6103bc61092d565b6040516103c9919061476b565b60405180910390f35b6065546103df9060ff1681565b60405190151581526020016103c9565b6104026103fd366004614785565b6109bb565b005b606854610417906001600160401b031681565b6040516001600160401b0390911681526020016103c9565b6103bc61043d3660046147c5565b610aea565b606a54610455906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b61047661ea6081565b6040519081526020016103c9565b6103df610492366004614812565b610c90565b6104026104a5366004614812565b610cd7565b6104026104b836600461494f565b610e26565b60685461041790600160401b90046001600160401b031681565b60685461041790600160801b90046001600160401b031681565b607254610417906001600160401b031681565b610402610512366004614a8d565b61163a565b60725461041790600160401b90046001600160401b031681565b61040261053f366004614812565b611983565b610476610552366004614812565b606d6020526000908152604090205481565b6103bc611c23565b61040261057a366004614b2f565b611c30565b61047661058d366004614812565b60666020526000908152604090205481565b6104026105ad366004614c06565b611fa0565b6104026105c0366004614c06565b612024565b61040261209c565b6104026105db366004614812565b6120b0565b6104026105ee366004614c23565b612328565b606954610417906001600160401b031681565b610649610614366004614cc1565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103c9565b60725461041790600160c01b90046001600160401b031681565b61041762093a8081565b6104026106a6366004614ce8565b6123b7565b6033546001600160a01b0316610455565b61047661242e565b6104026106d2366004614812565b612511565b610476600c81565b607454610476565b607054610455906001600160a01b031681565b6065546104179061010090046001600160401b031681565b6104176206978081565b606c5461041790600160a81b90046001600160401b031681565b60655461074b90600160481b900461ffff1681565b60405161ffff90911681526020016103c9565b61079961076c366004614812565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103c9565b60655461045590600160581b90046001600160a01b031681565b610417612657565b6104026107ee366004614d05565b6126a4565b610402610801366004614812565b61270a565b60695461045590600160401b90046001600160a01b031681565b606c54610455906001600160a01b031681565b610402610841366004614d39565b61278b565b606c546103df90600160a01b900460ff1681565b60725461041790600160801b90046001600160401b031681565b610402612c55565b61040261088a366004614c23565b612d11565b6104176103e881565b60685461041790600160c01b90046001600160401b031681565b606b54610455906001600160a01b031681565b6104026108d3366004614e2b565b612e56565b6104026108e6366004614a8d565b61317e565b6104026108f9366004614c06565b61329e565b61040261090c366004614c06565b613316565b607354610455906001600160a01b031681565b61047660745481565b606f805461093a90614e6f565b80601f016020809104026020016040519081016040528092919081815260200182805461096690614e6f565b80156109b35780601f10610988576101008083540402835291602001916109b3565b820191906000526020600020905b81548152906001019060200180831161099657829003601f168201915b505050505081565b6073546001600160a01b031633146109ee5760405162461bcd60e51b81526004016109e590614ea9565b60405180910390fd5b6103e88161ffff16118015610a0857506104008161ffff16105b610a8d5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a4b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a4016109e5565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610b1c57508115155b610b90576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e5565b80610c05576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e5565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610cc692600160801b90920481169116614f02565b6001600160401b0316111592915050565b6073546001600160a01b03163314610d015760405162461bcd60e51b81526004016109e590614ea9565b62093a806001600160401b0382161115610d2d5760405162461bcd60e51b81526004016109e590614f2d565b60655460ff16610dd0576072546001600160401b03600160c01b909104811690821610610dd05760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a4b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109e5565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610adf565b60655460ff1615610e495760405162461bcd60e51b81526004016109e590614f98565b606954600160401b90046001600160a01b03163314610ed05760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e63657200000000000060648201526084016109e5565b805180610f455760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e6365203120626174636800000060648201526084016109e5565b6103e88110610fbe576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e79206261746368657360648201526084016109e5565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561145e57600087828151811061101157611011615000565b60200260200101519050600081606001516001600160401b031611156111ca578361103b81615016565b9450506000816000015180519060200120826020015183606001516040516020016110689392919061503c565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461110e5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d6174636800000060648201526084016109e5565b81606001516001600160401b031682604001516001600160401b031610156111c45760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a4016109e5565b50611351565b602081015115806112535750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b36329161120d9160040190815260200190565b6020604051808303816000875af115801561122c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611250919061505f565b15155b6112c55760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d75737420657869737400000000000060648201526084016109e5565b80515161ea60116113515760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a4016109e5565b856001600160401b031681604001516001600160401b03161015801561138457504281604001516001600160401b031611155b6113f65760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e676500000060648201526084016109e5565b8051805160209182012081830151604080850151905161141d948894939291339101615078565b604051602081830303815290604052805190602001209250848061144090615016565b95505080604001519550508080611456906150bc565b915050610ff5565b506068546001600160401b03600160c01b909104811690831611156114e35760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b60648201526084016109e5565b60685460009061150390600160801b90046001600160401b0316846150d5565b611516906001600160401b0316876150fd565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115eb903390309084906115d09190615114565b606554600160581b90046001600160a01b031692919061338c565b6115f36133f7565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff161561165d5760405162461bcd60e51b81526004016109e590614f98565b6072546001600160401b03878116600090815260676020526040902060010154429261169492600160c01b90910481169116614f02565b6001600160401b0316111561171d5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a4016109e5565b6103e861172a88886150d5565b6001600160401b0316106117a65760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e7920626174636865730000000060648201526084016109e5565b6117b6888888888888888861349b565b6117bf866139d9565b607254600160801b90046001600160401b0316600003611887576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561182457607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561186a57600080fd5b505af115801561187e573d6000803e3d6000fd5b50505050611938565b61188f6133f7565b607280546001600160401b03169060006118a883615016565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b038116158015906119b057506072546001600160401b03600160401b9091048116908216115b80156119cb57506072546001600160401b0390811690821611155b611a495760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a4016109e5565b606a546001600160a01b03163314611af357611a6481610c90565b611af35760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a4016109e5565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d9094529382902092909255607280546fffffffffffffffff000000000000000019169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611bb557600080fd5b505af1158015611bc9573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611c1691815260200190565b60405180910390a3505050565b606e805461093a90614e6f565b600054610100900460ff1615808015611c505750600054600160ff909116105b80611c6a5750303b158015611c6a575060005460ff166001145b611ccd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109e5565b6000805460ff191660011790558015611cf0576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611d6d6020860186614c06565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d9d6060860160408701614c06565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611dd860c0860160a08701614c06565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611e3560e0860160c08701614812565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611e6c6040860160208701614812565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611ea86080860160608701614812565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611ee460a0860160808701614ce8565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611f0c8482615179565b50606f611f198382615179565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611f4f613bbf565b8015611f95576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611fca5760405162461bcd60e51b81526004016109e590614ea9565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610adf565b6073546001600160a01b0316331461204e5760405162461bcd60e51b81526004016109e590614ea9565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190602001610adf565b6120a4613c33565b6120ae6000613c8d565b565b6033546001600160a01b0316331461231d576072546000906001600160401b03161561210157506072546001600160401b03908116600090815260716020526040902054600160401b90041661210f565b506069546001600160401b03165b80826001600160401b03161161218d5760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c72656164792076657269666965640000000060648201526084016109e5565b6068546001600160401b03600160401b9091048116908316118015906121cf57506001600160401b038083166000908152606760205260409020600101541615155b61225a5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a4016109e5565b6001600160401b0380831660009081526067602052604090206001015442916122889162093a809116614f02565b6001600160401b0316111561231b5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a4016109e5565b505b612325613cdf565b50565b60655460ff161561234b5760405162461bcd60e51b81526004016109e590614f98565b61235c898989898989898989613d4f565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f95613cdf565b6073546001600160a01b031633146123e15760405162461bcd60e51b81526004016109e590614ea9565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610adf90831515815260200190565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612481573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a5919061505f565b905060006124b1612657565b6068546001600160401b03600160401b82048116916124e191600160801b8204811691600160c01b9004166150d5565b6124eb9190614f02565b6124f591906150d5565b6001600160401b0316905061250a818361524e565b9250505090565b6073546001600160a01b0316331461253b5760405162461bcd60e51b81526004016109e590614ea9565b62093a806001600160401b03821611156125675760405162461bcd60e51b81526004016109e590614f2d565b60655460ff166125fc576072546001600160401b03600160801b9091048116908216106125fc5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f7765720060648201526084016109e5565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610adf565b6072546000906001600160401b03161561269457506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126ce5760405162461bcd60e51b81526004016109e590614ea9565b606e6126da8282615179565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610adf919061476b565b6073546001600160a01b031633146127345760405162461bcd60e51b81526004016109e590614ea9565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610adf565b60655460ff16156127ae5760405162461bcd60e51b81526004016109e590614f98565b606c54600160a01b900460ff1615156001146127dc5760405162461bcd60e51b81526004016109e590615262565b80518061283f5760405162461bcd60e51b815260206004820152603d60248201526000805160206155ae83398151915260448201527f3a204d75737420666f726365206174206c65617374203120626174636800000060648201526084016109e5565b6103e881106128b05760405162461bcd60e51b815260206004820152604360248201526000805160206155ae83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a4016109e5565b6068546001600160401b03600160c01b82048116916128d8918491600160801b9004166152cb565b11156129325760405162461bcd60e51b815260206004820152603560248201526000805160206155ae8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b60648201526084016109e5565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612b5e57600086828151811061297f5761297f615000565b60200260200101519050838061299490615016565b9450506000816000015180519060200120826020015183604001516040516020016129c19392919061503c565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612a605760405162461bcd60e51b815260206004820152604260248201526000805160206155ae83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109e5565b612a6b6001886150fd565b8303612b005742620697808360400151612a859190614f02565b6001600160401b03161115612b005760405162461bcd60e51b815260206004820152604760248201526000805160206155ae83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a4016109e5565b8151805160209182012081840151604051612b2393889392914291339101615078565b6040516020818303038152906040528051906020012093508580612b4690615016565b96505050508080612b56906150bc565b915050612963565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612c775760405162461bcd60e51b81526004016109e5906152e3565b6073546001600160a01b03163314612ca15760405162461bcd60e51b81526004016109e590614ea9565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612cf157600080fd5b505af1158015612d05573d6000803e3d6000fd5b505050506120ae6143ca565b606a546001600160a01b03163314612d3b5760405162461bcd60e51b81526004016109e590615340565b612d4c898989898989898989613d4f565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612d9757607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612ddd57600080fd5b505af1158015612df1573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612e795760405162461bcd60e51b81526004016109e590614f98565b606c54600160a01b900460ff161515600114612ea75760405162461bcd60e51b81526004016109e590615262565b6000612eb260745490565b905081811115612f175760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b60648201526084016109e5565b61ea60835110612f875760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b60648201526084016109e5565b606554612fa690600160581b90046001600160a01b031633308461338c565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015612ff0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613014919061505f565b60688054919250600160c01b9091046001600160401b031690601861303883615016565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016130799392919061503c565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361311d57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613178565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161316f9392919061539d565b60405180910390a25b50505050565b606a546001600160a01b031633146131a85760405162461bcd60e51b81526004016109e590615340565b6131b8888888888888888861349b565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561320357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561324957600080fd5b505af115801561325d573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611971565b6073546001600160a01b031633146132c85760405162461bcd60e51b81526004016109e590614ea9565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001610adf565b61331e613c33565b6001600160a01b0381166133835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e5565b61232581613c8d565b6040516001600160a01b03808516602483015283166044820152606481018290526131789085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614421565b6072546001600160401b03600160401b82048116911611156120ae5760725460009061343490600160401b90046001600160401b03166001614f02565b905061343f81610c90565b15612325576072546000906002906134619084906001600160401b03166150d5565b61346b91906153d0565b6134759083614f02565b905061348081610c90565b156134925761348e81611983565b5050565b61348e82611983565b6000806134a6612657565b90506001600160401b038a1615613621576072546001600160401b03908116908b1611156135625760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2070656e60448201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560648201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608482015260a4016109e5565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b909204161461361b5760405162461bcd60e51b815260206004820152604c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760648201526b040e6e8c2e8ca40c4c2e8c6d60a31b608482015260a4016109e5565b50613769565b6001600160401b0389166000908152606d60205260409020549150816136bb5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786064820152621a5cdd60ea1b608482015260a4016109e5565b806001600160401b0316896001600160401b031611156137695760405162461bcd60e51b815260206004820152605d60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060648201527f7468616e2063757272656e744c61737456657269666965644261746368000000608482015260a4016109e5565b806001600160401b0316886001600160401b0316116138165760405162461bcd60e51b815260206004820152605760248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2066696e60448201527f616c4e65774261746368206d75737420626520626967676572207468616e206360648201527f757272656e744c61737456657269666965644261746368000000000000000000608482015260a4016109e5565b60006138258a8a8a868b610aea565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161385a91906153f6565b602060405180830381855afa158015613877573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061389a919061505f565b6138a49190615412565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916138e8918b918b918b9190600401615426565b602060405180830381865afa158015613905573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392991906154a0565b6139885760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20494e5660448201526920a624a22fa82927a7a360b11b60648201526084016109e5565b6139cb33613996858d6150d5565b6001600160401b03166139a761242e565b6139b19190615114565b606554600160581b90046001600160a01b031691906144f8565b505050505050505050505050565b60006139e3612657565b9050816000806139f384846150d5565b6001600160401b031690505b836001600160401b0316836001600160401b031614613aa5576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613a4f9116426150fd565b1115613a8a576001810154613a7490600160401b90046001600160401b0316866150d5565b613a87906001600160401b0316846152cb565b92505b60010154600160401b90046001600160401b031692506139ff565b6000613ab183836150fd565b905082811015613b2b576000613ac782856150fd565b9050600c8111613ad75780613ada565b600c5b9050613ae7816003615114565b613af290600a6155a1565b606554613b0b908390600160481b900461ffff166155a1565b607454613b189190615114565b613b22919061524e565b60745550613bb7565b6000613b3784836150fd565b9050600c8111613b475780613b4a565b600c5b90506000613b59826003615114565b613b6490600a6155a1565b606554613b7d908490600160481b900461ffff166155a1565b607454613b8a9190615114565b613b94919061524e565b905080607454607454613ba79190615114565b613bb1919061524e565b60745550505b505050505050565b600054610100900460ff16613c2a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109e5565b6120ae33613c8d565b6033546001600160a01b031633146120ae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109e5565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d2f57600080fd5b505af1158015613d43573d6000803e3d6000fd5b505050506120ae614528565b60006001600160401b038a1615613eca576072546001600160401b03908116908b161115613e0e5760405162461bcd60e51b815260206004820152606c60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c4016109e5565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613ec45760405162461bcd60e51b815260206004820152606060248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a4016109e5565b5061401e565b506001600160401b0387166000908152606d602052604090205480613f6b5760405162461bcd60e51b815260206004820152605760248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a4016109e5565b6069546001600160401b03908116908916111561401e5760405162461bcd60e51b815260206004820152607160248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c4016109e5565b6072546001600160401b03908116908a161180159061404e5750896001600160401b0316896001600160401b0316115b801561406f57506072546001600160401b03600160401b9091048116908a16115b6140e75760405162461bcd60e51b815260206004820152604f60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a4016109e5565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146141a75760405162461bcd60e51b815260206004820152606a60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c4016109e5565b60006141b6898989858a610aea565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516141eb91906153f6565b602060405180830381855afa158015614208573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061422b919061505f565b6142359190615412565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614279918a918a918a9190600401615426565b602060405180830381865afa158015614296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ba91906154a0565b61431a5760405162461bcd60e51b815260206004820152603e60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20494e56414c49445f50524f4f46000060648201526084016109e5565b6001600160401b038b166000908152607160205260409020600201548790036139cb5760405162461bcd60e51b815260206004820152606260248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c4016109e5565b60655460ff166143ec5760405162461bcd60e51b81526004016109e5906152e3565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614476826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145839092919063ffffffff16565b8051909150156144f3578080602001905181019061449491906154a0565b6144f35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109e5565b505050565b6040516001600160a01b0383166024820152604481018290526144f390849063a9059cbb60e01b906064016133c0565b60655460ff161561454b5760405162461bcd60e51b81526004016109e590614f98565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614592848460008561459a565b949350505050565b6060824710156145fb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109e5565b600080866001600160a01b0316858760405161461791906153f6565b60006040518083038185875af1925050503d8060008114614654576040519150601f19603f3d011682016040523d82523d6000602084013e614659565b606091505b509150915061466a87838387614675565b979650505050505050565b606083156146e45782516000036146dd576001600160a01b0385163b6146dd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109e5565b5081614592565b61459283838151156146f95781518083602001fd5b8060405162461bcd60e51b81526004016109e5919061476b565b60005b8381101561472e578181015183820152602001614716565b838111156131785750506000910152565b60008151808452614757816020860160208601614713565b601f01601f19169290920160200192915050565b60208152600061477e602083018461473f565b9392505050565b60006020828403121561479757600080fd5b813561ffff8116811461477e57600080fd5b80356001600160401b03811681146147c057600080fd5b919050565b600080600080600060a086880312156147dd57600080fd5b6147e6866147a9565b94506147f4602087016147a9565b94979496505050506040830135926060810135926080909101359150565b60006020828403121561482457600080fd5b61477e826147a9565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156148655761486561482d565b60405290565b604051606081016001600160401b03811182821017156148655761486561482d565b604051601f8201601f191681016001600160401b03811182821017156148b5576148b561482d565b604052919050565b60006001600160401b038211156148d6576148d661482d565b5060051b60200190565b600082601f8301126148f157600080fd5b81356001600160401b0381111561490a5761490a61482d565b61491d601f8201601f191660200161488d565b81815284602083860101111561493257600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561496257600080fd5b82356001600160401b038082111561497957600080fd5b818501915085601f83011261498d57600080fd5b81356149a061499b826148bd565b61488d565b81815260059190911b830184019084810190888311156149bf57600080fd5b8585015b83811015614a58578035858111156149db5760008081fd5b86016080818c03601f19018113156149f35760008081fd5b6149fb614843565b8983013588811115614a0d5760008081fd5b614a1b8e8c838701016148e0565b8252506040808401358b8301526060614a358186016147a9565b82840152614a448486016147a9565b9083015250855250509186019186016149c3565b5098975050505050505050565b8060408101831015614a7657600080fd5b92915050565b8060808101831015614a7657600080fd5b6000806000806000806000806101a0898b031215614aaa57600080fd5b614ab3896147a9565b9750614ac160208a016147a9565b9650614acf60408a016147a9565b95506060890135945060808901359350614aec8a60a08b01614a65565b9250614afb8a60e08b01614a7c565b9150614b0b8a6101608b01614a65565b90509295985092959890939650565b6001600160a01b038116811461232557600080fd5b600080600080600080600080888a036101c0811215614b4d57600080fd5b8935614b5881614b1a565b985060208a0135614b6881614b1a565b975060408a0135614b7881614b1a565b965060608a0135614b8881614b1a565b955060e0607f1982011215614b9c57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614bc657600080fd5b614bd28c838d016148e0565b93506101a08b0135915080821115614be957600080fd5b50614bf68b828c016148e0565b9150509295985092959890939650565b600060208284031215614c1857600080fd5b813561477e81614b1a565b60008060008060008060008060006101c08a8c031215614c4257600080fd5b614c4b8a6147a9565b9850614c5960208b016147a9565b9750614c6760408b016147a9565b9650614c7560608b016147a9565b955060808a0135945060a08a01359350614c928b60c08c01614a65565b9250614ca28b6101008c01614a7c565b9150614cb28b6101808c01614a65565b90509295985092959850929598565b600060208284031215614cd357600080fd5b5035919050565b801515811461232557600080fd5b600060208284031215614cfa57600080fd5b813561477e81614cda565b600060208284031215614d1757600080fd5b81356001600160401b03811115614d2d57600080fd5b614592848285016148e0565b60006020808385031215614d4c57600080fd5b82356001600160401b0380821115614d6357600080fd5b818501915085601f830112614d7757600080fd5b8135614d8561499b826148bd565b81815260059190911b83018401908481019088831115614da457600080fd5b8585015b83811015614a5857803585811115614dc05760008081fd5b86016060818c03601f1901811315614dd85760008081fd5b614de061486b565b8983013588811115614df25760008081fd5b614e008e8c838701016148e0565b8252506040808401358b830152614e188385016147a9565b9082015285525050918601918601614da8565b60008060408385031215614e3e57600080fd5b82356001600160401b03811115614e5457600080fd5b614e60858286016148e0565b95602094909401359450505050565b600181811c90821680614e8357607f821691505b602082108103614ea357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614f2457614f24614eec565b01949350505050565b60208082526045908201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361503257615032614eec565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b60006020828403121561507157600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b6000600182016150ce576150ce614eec565b5060010190565b60006001600160401b03838116908316818110156150f5576150f5614eec565b039392505050565b60008282101561510f5761510f614eec565b500390565b600081600019048311821515161561512e5761512e614eec565b500290565b601f8211156144f357600081815260208120601f850160051c8101602086101561515a5750805b601f850160051c820191505b81811015613bb757828155600101615166565b81516001600160401b038111156151925761519261482d565b6151a6816151a08454614e6f565b84615133565b602080601f8311600181146151db57600084156151c35750858301515b600019600386901b1c1916600185901b178555613bb7565b600085815260208120601f198616915b8281101561520a578886015182559484019460019091019084016151eb565b50858210156152285787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b60008261525d5761525d615238565b500490565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b600082198211156152de576152de614eec565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b03831660208201526060604082018190526000906153c79083018461473f565b95945050505050565b60006001600160401b03808416806153ea576153ea615238565b92169190910492915050565b60008251615408818460208701614713565b9190910192915050565b60008261542157615421615238565b500690565b61012081016040808784376000838201818152879190815b600281101561545e5784848337908401828152928401929060010161543e565b5050828760c0870137610100850181815286935091505b6001811015615494578251825260209283019290910190600101615475565b50505095945050505050565b6000602082840312156154b257600080fd5b815161477e81614cda565b600181815b808511156154f85781600019048211156154de576154de614eec565b808516156154eb57918102915b93841c93908002906154c2565b509250929050565b60008261550f57506001614a76565b8161551c57506000614a76565b8160018114615532576002811461553c57615558565b6001915050614a76565b60ff84111561554d5761554d614eec565b50506001821b614a76565b5060208310610133831016604e8410600b841016171561557b575081810a614a76565b61558583836154bd565b806000190482111561559957615599614eec565b029392505050565b600061477e838361550056fe506f6c79676f6e5a4b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a4b45564d3a3a70726f76654e6f6e44657465726d696e6973a26469706673582212205d57ed2ff6c1ede6347c6bf0896d13c6ddcaf85c10458b10044af2a6be36deaf64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5061562380620000216000396000f3fe608060405234801561001057600080fd5b50600436106103af5760003560e01c80638da5cb5b116101f4578063cfa8ed471161011a578063e7a7ed02116100ad578063f14916d61161007c578063f14916d6146108eb578063f2fde38b146108fe578063f851a44014610911578063f8b823e41461092457600080fd5b8063e7a7ed0214610898578063e8bf92ed146108b2578063eaeb077b146108c5578063edc41121146108d857600080fd5b8063d939b315116100e9578063d939b3151461085a578063dbc1697614610874578063e11f3f181461087c578063e217cfd61461088f57600080fd5b8063cfa8ed4714610806578063d02103ca14610820578063d8d1091b14610833578063d8f54db01461084657600080fd5b8063ab9fc5ef11610192578063b6b0b09711610161578063b6b0b097146107be578063c0ed84e0146107d8578063c89e42df146107e0578063cf136306146107f357600080fd5b8063ab9fc5ef14610712578063adc879e91461071c578063afd23cbe14610736578063b4d63f581461075e57600080fd5b80639eb831b9116101ce5780639eb831b9146106d75780639f0d039d146106df578063a3c573eb146106e7578063aa58bad6146106fa57600080fd5b80638da5cb5b146106ab57806399f5634e146106bc5780639c9f3dfe146106c457600080fd5b80634a910e6a116102d9578063715018a611610277578063837a473811610246578063837a473814610606578063841b24d7146106745780638b48931e1461068e5780638c4a0af71461069857600080fd5b8063715018a6146105c55780637215541a146105cd57806375c508b3146105e05780637fcb3653146105f357600080fd5b806360943d6a116102b357806360943d6a1461056c5780636b8616ce1461057f5780636ff512cc1461059f578063704b6c02146105b257600080fd5b80634a910e6a146105315780635392c5e014610544578063542028d51461056457600080fd5b8063383b3be811610351578063456052671161032057806345605267146104d7578063458c0477146104f15780634834a343146105045780634a1a89a71461051757600080fd5b8063383b3be814610484578063394218e9146104975780633c158267146104aa578063423fa856146104bd57600080fd5b806319d8ac611161038d57806319d8ac6114610404578063220d78991461042f57806329878983146104425780632d0889d31461046d57600080fd5b8063107bf28c146103b457806315064c96146103d25780631816b7e5146103ef575b600080fd5b6103bc61092d565b6040516103c9919061476b565b60405180910390f35b6065546103df9060ff1681565b60405190151581526020016103c9565b6104026103fd366004614785565b6109bb565b005b606854610417906001600160401b031681565b6040516001600160401b0390911681526020016103c9565b6103bc61043d3660046147c5565b610aea565b606a54610455906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b61047661ea6081565b6040519081526020016103c9565b6103df610492366004614812565b610c90565b6104026104a5366004614812565b610cd7565b6104026104b836600461494f565b610e26565b60685461041790600160401b90046001600160401b031681565b60685461041790600160801b90046001600160401b031681565b607254610417906001600160401b031681565b610402610512366004614a8d565b61163a565b60725461041790600160401b90046001600160401b031681565b61040261053f366004614812565b611983565b610476610552366004614812565b606d6020526000908152604090205481565b6103bc611c23565b61040261057a366004614b2f565b611c30565b61047661058d366004614812565b60666020526000908152604090205481565b6104026105ad366004614c06565b611fa0565b6104026105c0366004614c06565b612024565b61040261209c565b6104026105db366004614812565b6120b0565b6104026105ee366004614c23565b612328565b606954610417906001600160401b031681565b610649610614366004614cc1565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103c9565b60725461041790600160c01b90046001600160401b031681565b61041762093a8081565b6104026106a6366004614ce8565b6123b7565b6033546001600160a01b0316610455565b61047661242e565b6104026106d2366004614812565b612511565b610476600c81565b607454610476565b607054610455906001600160a01b031681565b6065546104179061010090046001600160401b031681565b6104176206978081565b606c5461041790600160a81b90046001600160401b031681565b60655461074b90600160481b900461ffff1681565b60405161ffff90911681526020016103c9565b61079961076c366004614812565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103c9565b60655461045590600160581b90046001600160a01b031681565b610417612657565b6104026107ee366004614d05565b6126a4565b610402610801366004614812565b61270a565b60695461045590600160401b90046001600160a01b031681565b606c54610455906001600160a01b031681565b610402610841366004614d39565b61278b565b606c546103df90600160a01b900460ff1681565b60725461041790600160801b90046001600160401b031681565b610402612c55565b61040261088a366004614c23565b612d11565b6104176103e881565b60685461041790600160c01b90046001600160401b031681565b606b54610455906001600160a01b031681565b6104026108d3366004614e2b565b612e56565b6104026108e6366004614a8d565b61317e565b6104026108f9366004614c06565b61329e565b61040261090c366004614c06565b613316565b607354610455906001600160a01b031681565b61047660745481565b606f805461093a90614e6f565b80601f016020809104026020016040519081016040528092919081815260200182805461096690614e6f565b80156109b35780601f10610988576101008083540402835291602001916109b3565b820191906000526020600020905b81548152906001019060200180831161099657829003601f168201915b505050505081565b6073546001600160a01b031633146109ee5760405162461bcd60e51b81526004016109e590614ea9565b60405180910390fd5b6103e88161ffff16118015610a0857506104008161ffff16105b610a8d5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a4b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a4016109e5565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610b1c57508115155b610b90576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e5565b80610c05576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e5565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610cc692600160801b90920481169116614f02565b6001600160401b0316111592915050565b6073546001600160a01b03163314610d015760405162461bcd60e51b81526004016109e590614ea9565b62093a806001600160401b0382161115610d2d5760405162461bcd60e51b81526004016109e590614f2d565b60655460ff16610dd0576072546001600160401b03600160c01b909104811690821610610dd05760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a4b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109e5565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610adf565b60655460ff1615610e495760405162461bcd60e51b81526004016109e590614f98565b606954600160401b90046001600160a01b03163314610ed05760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e63657200000000000060648201526084016109e5565b805180610f455760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e6365203120626174636800000060648201526084016109e5565b6103e88110610fbe576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e79206261746368657360648201526084016109e5565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561145e57600087828151811061101157611011615000565b60200260200101519050600081606001516001600160401b031611156111ca578361103b81615016565b9450506000816000015180519060200120826020015183606001516040516020016110689392919061503c565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461110e5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d6174636800000060648201526084016109e5565b81606001516001600160401b031682604001516001600160401b031610156111c45760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a4016109e5565b50611351565b602081015115806112535750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b36329161120d9160040190815260200190565b6020604051808303816000875af115801561122c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611250919061505f565b15155b6112c55760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d75737420657869737400000000000060648201526084016109e5565b80515161ea60116113515760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a4016109e5565b856001600160401b031681604001516001600160401b03161015801561138457504281604001516001600160401b031611155b6113f65760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e676500000060648201526084016109e5565b8051805160209182012081830151604080850151905161141d948894939291339101615078565b604051602081830303815290604052805190602001209250848061144090615016565b95505080604001519550508080611456906150bc565b915050610ff5565b506068546001600160401b03600160c01b909104811690831611156114e35760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b60648201526084016109e5565b60685460009061150390600160801b90046001600160401b0316846150d5565b611516906001600160401b0316876150fd565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115eb903390309084906115d09190615114565b606554600160581b90046001600160a01b031692919061338c565b6115f36133f7565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff161561165d5760405162461bcd60e51b81526004016109e590614f98565b6072546001600160401b03878116600090815260676020526040902060010154429261169492600160c01b90910481169116614f02565b6001600160401b0316111561171d5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a4016109e5565b6103e861172a88886150d5565b6001600160401b0316106117a65760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e7920626174636865730000000060648201526084016109e5565b6117b6888888888888888861349b565b6117bf866139d9565b607254600160801b90046001600160401b0316600003611887576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561182457607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561186a57600080fd5b505af115801561187e573d6000803e3d6000fd5b50505050611938565b61188f6133f7565b607280546001600160401b03169060006118a883615016565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b038116158015906119b057506072546001600160401b03600160401b9091048116908216115b80156119cb57506072546001600160401b0390811690821611155b611a495760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a4016109e5565b606a546001600160a01b03163314611af357611a6481610c90565b611af35760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a4016109e5565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d9094529382902092909255607280546fffffffffffffffff000000000000000019169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611bb557600080fd5b505af1158015611bc9573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611c1691815260200190565b60405180910390a3505050565b606e805461093a90614e6f565b600054610100900460ff1615808015611c505750600054600160ff909116105b80611c6a5750303b158015611c6a575060005460ff166001145b611ccd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109e5565b6000805460ff191660011790558015611cf0576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611d6d6020860186614c06565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d9d6060860160408701614c06565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611dd860c0860160a08701614c06565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611e3560e0860160c08701614812565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611e6c6040860160208701614812565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611ea86080860160608701614812565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611ee460a0860160808701614ce8565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611f0c8482615179565b50606f611f198382615179565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611f4f613bbf565b8015611f95576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611fca5760405162461bcd60e51b81526004016109e590614ea9565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610adf565b6073546001600160a01b0316331461204e5760405162461bcd60e51b81526004016109e590614ea9565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190602001610adf565b6120a4613c33565b6120ae6000613c8d565b565b6033546001600160a01b0316331461231d576072546000906001600160401b03161561210157506072546001600160401b03908116600090815260716020526040902054600160401b90041661210f565b506069546001600160401b03165b80826001600160401b03161161218d5760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c72656164792076657269666965640000000060648201526084016109e5565b6068546001600160401b03600160401b9091048116908316118015906121cf57506001600160401b038083166000908152606760205260409020600101541615155b61225a5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a4016109e5565b6001600160401b0380831660009081526067602052604090206001015442916122889162093a809116614f02565b6001600160401b0316111561231b5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a4016109e5565b505b612325613cdf565b50565b60655460ff161561234b5760405162461bcd60e51b81526004016109e590614f98565b61235c898989898989898989613d4f565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f95613cdf565b6073546001600160a01b031633146123e15760405162461bcd60e51b81526004016109e590614ea9565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610adf90831515815260200190565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612481573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a5919061505f565b905060006124b1612657565b6068546001600160401b03600160401b82048116916124e191600160801b8204811691600160c01b9004166150d5565b6124eb9190614f02565b6124f591906150d5565b6001600160401b0316905061250a818361524e565b9250505090565b6073546001600160a01b0316331461253b5760405162461bcd60e51b81526004016109e590614ea9565b62093a806001600160401b03821611156125675760405162461bcd60e51b81526004016109e590614f2d565b60655460ff166125fc576072546001600160401b03600160801b9091048116908216106125fc5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f7765720060648201526084016109e5565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610adf565b6072546000906001600160401b03161561269457506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126ce5760405162461bcd60e51b81526004016109e590614ea9565b606e6126da8282615179565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610adf919061476b565b6073546001600160a01b031633146127345760405162461bcd60e51b81526004016109e590614ea9565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610adf565b60655460ff16156127ae5760405162461bcd60e51b81526004016109e590614f98565b606c54600160a01b900460ff1615156001146127dc5760405162461bcd60e51b81526004016109e590615262565b80518061283f5760405162461bcd60e51b815260206004820152603d60248201526000805160206155ae83398151915260448201527f3a204d75737420666f726365206174206c65617374203120626174636800000060648201526084016109e5565b6103e881106128b05760405162461bcd60e51b815260206004820152604360248201526000805160206155ae83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a4016109e5565b6068546001600160401b03600160c01b82048116916128d8918491600160801b9004166152cb565b11156129325760405162461bcd60e51b815260206004820152603560248201526000805160206155ae8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b60648201526084016109e5565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612b5e57600086828151811061297f5761297f615000565b60200260200101519050838061299490615016565b9450506000816000015180519060200120826020015183604001516040516020016129c19392919061503c565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612a605760405162461bcd60e51b815260206004820152604260248201526000805160206155ae83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109e5565b612a6b6001886150fd565b8303612b005742620697808360400151612a859190614f02565b6001600160401b03161115612b005760405162461bcd60e51b815260206004820152604760248201526000805160206155ae83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a4016109e5565b8151805160209182012081840151604051612b2393889392914291339101615078565b6040516020818303038152906040528051906020012093508580612b4690615016565b96505050508080612b56906150bc565b915050612963565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612c775760405162461bcd60e51b81526004016109e5906152e3565b6073546001600160a01b03163314612ca15760405162461bcd60e51b81526004016109e590614ea9565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612cf157600080fd5b505af1158015612d05573d6000803e3d6000fd5b505050506120ae6143ca565b606a546001600160a01b03163314612d3b5760405162461bcd60e51b81526004016109e590615340565b612d4c898989898989898989613d4f565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612d9757607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612ddd57600080fd5b505af1158015612df1573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612e795760405162461bcd60e51b81526004016109e590614f98565b606c54600160a01b900460ff161515600114612ea75760405162461bcd60e51b81526004016109e590615262565b6000612eb260745490565b905081811115612f175760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b60648201526084016109e5565b61ea60835110612f875760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b60648201526084016109e5565b606554612fa690600160581b90046001600160a01b031633308461338c565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015612ff0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613014919061505f565b60688054919250600160c01b9091046001600160401b031690601861303883615016565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016130799392919061503c565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361311d57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613178565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161316f9392919061539d565b60405180910390a25b50505050565b606a546001600160a01b031633146131a85760405162461bcd60e51b81526004016109e590615340565b6131b8888888888888888861349b565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561320357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561324957600080fd5b505af115801561325d573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611971565b6073546001600160a01b031633146132c85760405162461bcd60e51b81526004016109e590614ea9565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001610adf565b61331e613c33565b6001600160a01b0381166133835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e5565b61232581613c8d565b6040516001600160a01b03808516602483015283166044820152606481018290526131789085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614421565b6072546001600160401b03600160401b82048116911611156120ae5760725460009061343490600160401b90046001600160401b03166001614f02565b905061343f81610c90565b15612325576072546000906002906134619084906001600160401b03166150d5565b61346b91906153d0565b6134759083614f02565b905061348081610c90565b156134925761348e81611983565b5050565b61348e82611983565b6000806134a6612657565b90506001600160401b038a1615613621576072546001600160401b03908116908b1611156135625760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2070656e60448201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560648201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608482015260a4016109e5565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b909204161461361b5760405162461bcd60e51b815260206004820152604c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760648201526b040e6e8c2e8ca40c4c2e8c6d60a31b608482015260a4016109e5565b50613769565b6001600160401b0389166000908152606d60205260409020549150816136bb5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786064820152621a5cdd60ea1b608482015260a4016109e5565b806001600160401b0316896001600160401b031611156137695760405162461bcd60e51b815260206004820152605d60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060648201527f7468616e2063757272656e744c61737456657269666965644261746368000000608482015260a4016109e5565b806001600160401b0316886001600160401b0316116138165760405162461bcd60e51b815260206004820152605760248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2066696e60448201527f616c4e65774261746368206d75737420626520626967676572207468616e206360648201527f757272656e744c61737456657269666965644261746368000000000000000000608482015260a4016109e5565b60006138258a8a8a868b610aea565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161385a91906153f6565b602060405180830381855afa158015613877573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061389a919061505f565b6138a49190615412565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916138e8918b918b918b9190600401615426565b602060405180830381865afa158015613905573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392991906154a0565b6139885760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20494e5660448201526920a624a22fa82927a7a360b11b60648201526084016109e5565b6139cb33613996858d6150d5565b6001600160401b03166139a761242e565b6139b19190615114565b606554600160581b90046001600160a01b031691906144f8565b505050505050505050505050565b60006139e3612657565b9050816000806139f384846150d5565b6001600160401b031690505b836001600160401b0316836001600160401b031614613aa5576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613a4f9116426150fd565b1115613a8a576001810154613a7490600160401b90046001600160401b0316866150d5565b613a87906001600160401b0316846152cb565b92505b60010154600160401b90046001600160401b031692506139ff565b6000613ab183836150fd565b905082811015613b2b576000613ac782856150fd565b9050600c8111613ad75780613ada565b600c5b9050613ae7816003615114565b613af290600a6155a1565b606554613b0b908390600160481b900461ffff166155a1565b607454613b189190615114565b613b22919061524e565b60745550613bb7565b6000613b3784836150fd565b9050600c8111613b475780613b4a565b600c5b90506000613b59826003615114565b613b6490600a6155a1565b606554613b7d908490600160481b900461ffff166155a1565b607454613b8a9190615114565b613b94919061524e565b905080607454607454613ba79190615114565b613bb1919061524e565b60745550505b505050505050565b600054610100900460ff16613c2a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109e5565b6120ae33613c8d565b6033546001600160a01b031633146120ae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109e5565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d2f57600080fd5b505af1158015613d43573d6000803e3d6000fd5b505050506120ae614528565b60006001600160401b038a1615613eca576072546001600160401b03908116908b161115613e0e5760405162461bcd60e51b815260206004820152606c60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c4016109e5565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613ec45760405162461bcd60e51b815260206004820152606060248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a4016109e5565b5061401e565b506001600160401b0387166000908152606d602052604090205480613f6b5760405162461bcd60e51b815260206004820152605760248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a4016109e5565b6069546001600160401b03908116908916111561401e5760405162461bcd60e51b815260206004820152607160248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c4016109e5565b6072546001600160401b03908116908a161180159061404e5750896001600160401b0316896001600160401b0316115b801561406f57506072546001600160401b03600160401b9091048116908a16115b6140e75760405162461bcd60e51b815260206004820152604f60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a4016109e5565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146141a75760405162461bcd60e51b815260206004820152606a60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c4016109e5565b60006141b6898989858a610aea565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516141eb91906153f6565b602060405180830381855afa158015614208573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061422b919061505f565b6142359190615412565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614279918a918a918a9190600401615426565b602060405180830381865afa158015614296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ba91906154a0565b61431a5760405162461bcd60e51b815260206004820152603e60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20494e56414c49445f50524f4f46000060648201526084016109e5565b6001600160401b038b166000908152607160205260409020600201548790036139cb5760405162461bcd60e51b815260206004820152606260248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c4016109e5565b60655460ff166143ec5760405162461bcd60e51b81526004016109e5906152e3565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614476826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145839092919063ffffffff16565b8051909150156144f3578080602001905181019061449491906154a0565b6144f35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109e5565b505050565b6040516001600160a01b0383166024820152604481018290526144f390849063a9059cbb60e01b906064016133c0565b60655460ff161561454b5760405162461bcd60e51b81526004016109e590614f98565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614592848460008561459a565b949350505050565b6060824710156145fb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109e5565b600080866001600160a01b0316858760405161461791906153f6565b60006040518083038185875af1925050503d8060008114614654576040519150601f19603f3d011682016040523d82523d6000602084013e614659565b606091505b509150915061466a87838387614675565b979650505050505050565b606083156146e45782516000036146dd576001600160a01b0385163b6146dd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109e5565b5081614592565b61459283838151156146f95781518083602001fd5b8060405162461bcd60e51b81526004016109e5919061476b565b60005b8381101561472e578181015183820152602001614716565b838111156131785750506000910152565b60008151808452614757816020860160208601614713565b601f01601f19169290920160200192915050565b60208152600061477e602083018461473f565b9392505050565b60006020828403121561479757600080fd5b813561ffff8116811461477e57600080fd5b80356001600160401b03811681146147c057600080fd5b919050565b600080600080600060a086880312156147dd57600080fd5b6147e6866147a9565b94506147f4602087016147a9565b94979496505050506040830135926060810135926080909101359150565b60006020828403121561482457600080fd5b61477e826147a9565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156148655761486561482d565b60405290565b604051606081016001600160401b03811182821017156148655761486561482d565b604051601f8201601f191681016001600160401b03811182821017156148b5576148b561482d565b604052919050565b60006001600160401b038211156148d6576148d661482d565b5060051b60200190565b600082601f8301126148f157600080fd5b81356001600160401b0381111561490a5761490a61482d565b61491d601f8201601f191660200161488d565b81815284602083860101111561493257600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561496257600080fd5b82356001600160401b038082111561497957600080fd5b818501915085601f83011261498d57600080fd5b81356149a061499b826148bd565b61488d565b81815260059190911b830184019084810190888311156149bf57600080fd5b8585015b83811015614a58578035858111156149db5760008081fd5b86016080818c03601f19018113156149f35760008081fd5b6149fb614843565b8983013588811115614a0d5760008081fd5b614a1b8e8c838701016148e0565b8252506040808401358b8301526060614a358186016147a9565b82840152614a448486016147a9565b9083015250855250509186019186016149c3565b5098975050505050505050565b8060408101831015614a7657600080fd5b92915050565b8060808101831015614a7657600080fd5b6000806000806000806000806101a0898b031215614aaa57600080fd5b614ab3896147a9565b9750614ac160208a016147a9565b9650614acf60408a016147a9565b95506060890135945060808901359350614aec8a60a08b01614a65565b9250614afb8a60e08b01614a7c565b9150614b0b8a6101608b01614a65565b90509295985092959890939650565b6001600160a01b038116811461232557600080fd5b600080600080600080600080888a036101c0811215614b4d57600080fd5b8935614b5881614b1a565b985060208a0135614b6881614b1a565b975060408a0135614b7881614b1a565b965060608a0135614b8881614b1a565b955060e0607f1982011215614b9c57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614bc657600080fd5b614bd28c838d016148e0565b93506101a08b0135915080821115614be957600080fd5b50614bf68b828c016148e0565b9150509295985092959890939650565b600060208284031215614c1857600080fd5b813561477e81614b1a565b60008060008060008060008060006101c08a8c031215614c4257600080fd5b614c4b8a6147a9565b9850614c5960208b016147a9565b9750614c6760408b016147a9565b9650614c7560608b016147a9565b955060808a0135945060a08a01359350614c928b60c08c01614a65565b9250614ca28b6101008c01614a7c565b9150614cb28b6101808c01614a65565b90509295985092959850929598565b600060208284031215614cd357600080fd5b5035919050565b801515811461232557600080fd5b600060208284031215614cfa57600080fd5b813561477e81614cda565b600060208284031215614d1757600080fd5b81356001600160401b03811115614d2d57600080fd5b614592848285016148e0565b60006020808385031215614d4c57600080fd5b82356001600160401b0380821115614d6357600080fd5b818501915085601f830112614d7757600080fd5b8135614d8561499b826148bd565b81815260059190911b83018401908481019088831115614da457600080fd5b8585015b83811015614a5857803585811115614dc05760008081fd5b86016060818c03601f1901811315614dd85760008081fd5b614de061486b565b8983013588811115614df25760008081fd5b614e008e8c838701016148e0565b8252506040808401358b830152614e188385016147a9565b9082015285525050918601918601614da8565b60008060408385031215614e3e57600080fd5b82356001600160401b03811115614e5457600080fd5b614e60858286016148e0565b95602094909401359450505050565b600181811c90821680614e8357607f821691505b602082108103614ea357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614f2457614f24614eec565b01949350505050565b60208082526045908201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361503257615032614eec565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b60006020828403121561507157600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b6000600182016150ce576150ce614eec565b5060010190565b60006001600160401b03838116908316818110156150f5576150f5614eec565b039392505050565b60008282101561510f5761510f614eec565b500390565b600081600019048311821515161561512e5761512e614eec565b500290565b601f8211156144f357600081815260208120601f850160051c8101602086101561515a5750805b601f850160051c820191505b81811015613bb757828155600101615166565b81516001600160401b038111156151925761519261482d565b6151a6816151a08454614e6f565b84615133565b602080601f8311600181146151db57600084156151c35750858301515b600019600386901b1c1916600185901b178555613bb7565b600085815260208120601f198616915b8281101561520a578886015182559484019460019091019084016151eb565b50858210156152285787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b60008261525d5761525d615238565b500490565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b600082198211156152de576152de614eec565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b03831660208201526060604082018190526000906153c79083018461473f565b95945050505050565b60006001600160401b03808416806153ea576153ea615238565b92169190910492915050565b60008251615408818460208701614713565b9190910192915050565b60008261542157615421615238565b500690565b61012081016040808784376000838201818152879190815b600281101561545e5784848337908401828152928401929060010161543e565b5050828760c0870137610100850181815286935091505b6001811015615494578251825260209283019290910190600101615475565b50505095945050505050565b6000602082840312156154b257600080fd5b815161477e81614cda565b600181815b808511156154f85781600019048211156154de576154de614eec565b808516156154eb57918102915b93841c93908002906154c2565b509250929050565b60008261550f57506001614a76565b8161551c57506000614a76565b8160018114615532576002811461553c57615558565b6001915050614a76565b60ff84111561554d5761554d614eec565b50506001821b614a76565b5060208310610133831016604e8410600b841016171561557b575081810a614a76565b61558583836154bd565b806000190482111561559957615599614eec565b029392505050565b600061477e838361550056fe506f6c79676f6e5a4b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a4b45564d3a3a70726f76654e6f6e44657465726d696e6973a26469706673582212208865f0638a4efbefd35b06681d425aa7b9537afd92181c6a9cb443be8584550964736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103af5760003560e01c80638da5cb5b116101f4578063cfa8ed471161011a578063e7a7ed02116100ad578063f14916d61161007c578063f14916d6146108eb578063f2fde38b146108fe578063f851a44014610911578063f8b823e41461092457600080fd5b8063e7a7ed0214610898578063e8bf92ed146108b2578063eaeb077b146108c5578063edc41121146108d857600080fd5b8063d939b315116100e9578063d939b3151461085a578063dbc1697614610874578063e11f3f181461087c578063e217cfd61461088f57600080fd5b8063cfa8ed4714610806578063d02103ca14610820578063d8d1091b14610833578063d8f54db01461084657600080fd5b8063ab9fc5ef11610192578063b6b0b09711610161578063b6b0b097146107be578063c0ed84e0146107d8578063c89e42df146107e0578063cf136306146107f357600080fd5b8063ab9fc5ef14610712578063adc879e91461071c578063afd23cbe14610736578063b4d63f581461075e57600080fd5b80639eb831b9116101ce5780639eb831b9146106d75780639f0d039d146106df578063a3c573eb146106e7578063aa58bad6146106fa57600080fd5b80638da5cb5b146106ab57806399f5634e146106bc5780639c9f3dfe146106c457600080fd5b80634a910e6a116102d9578063715018a611610277578063837a473811610246578063837a473814610606578063841b24d7146106745780638b48931e1461068e5780638c4a0af71461069857600080fd5b8063715018a6146105c55780637215541a146105cd57806375c508b3146105e05780637fcb3653146105f357600080fd5b806360943d6a116102b357806360943d6a1461056c5780636b8616ce1461057f5780636ff512cc1461059f578063704b6c02146105b257600080fd5b80634a910e6a146105315780635392c5e014610544578063542028d51461056457600080fd5b8063383b3be811610351578063456052671161032057806345605267146104d7578063458c0477146104f15780634834a343146105045780634a1a89a71461051757600080fd5b8063383b3be814610484578063394218e9146104975780633c158267146104aa578063423fa856146104bd57600080fd5b806319d8ac611161038d57806319d8ac6114610404578063220d78991461042f57806329878983146104425780632d0889d31461046d57600080fd5b8063107bf28c146103b457806315064c96146103d25780631816b7e5146103ef575b600080fd5b6103bc61092d565b6040516103c9919061476b565b60405180910390f35b6065546103df9060ff1681565b60405190151581526020016103c9565b6104026103fd366004614785565b6109bb565b005b606854610417906001600160401b031681565b6040516001600160401b0390911681526020016103c9565b6103bc61043d3660046147c5565b610aea565b606a54610455906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b61047661ea6081565b6040519081526020016103c9565b6103df610492366004614812565b610c90565b6104026104a5366004614812565b610cd7565b6104026104b836600461494f565b610e26565b60685461041790600160401b90046001600160401b031681565b60685461041790600160801b90046001600160401b031681565b607254610417906001600160401b031681565b610402610512366004614a8d565b61163a565b60725461041790600160401b90046001600160401b031681565b61040261053f366004614812565b611983565b610476610552366004614812565b606d6020526000908152604090205481565b6103bc611c23565b61040261057a366004614b2f565b611c30565b61047661058d366004614812565b60666020526000908152604090205481565b6104026105ad366004614c06565b611fa0565b6104026105c0366004614c06565b612024565b61040261209c565b6104026105db366004614812565b6120b0565b6104026105ee366004614c23565b612328565b606954610417906001600160401b031681565b610649610614366004614cc1565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103c9565b60725461041790600160c01b90046001600160401b031681565b61041762093a8081565b6104026106a6366004614ce8565b6123b7565b6033546001600160a01b0316610455565b61047661242e565b6104026106d2366004614812565b612511565b610476600c81565b607454610476565b607054610455906001600160a01b031681565b6065546104179061010090046001600160401b031681565b6104176206978081565b606c5461041790600160a81b90046001600160401b031681565b60655461074b90600160481b900461ffff1681565b60405161ffff90911681526020016103c9565b61079961076c366004614812565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103c9565b60655461045590600160581b90046001600160a01b031681565b610417612657565b6104026107ee366004614d05565b6126a4565b610402610801366004614812565b61270a565b60695461045590600160401b90046001600160a01b031681565b606c54610455906001600160a01b031681565b610402610841366004614d39565b61278b565b606c546103df90600160a01b900460ff1681565b60725461041790600160801b90046001600160401b031681565b610402612c55565b61040261088a366004614c23565b612d11565b6104176103e881565b60685461041790600160c01b90046001600160401b031681565b606b54610455906001600160a01b031681565b6104026108d3366004614e2b565b612e56565b6104026108e6366004614a8d565b61317e565b6104026108f9366004614c06565b61329e565b61040261090c366004614c06565b613316565b607354610455906001600160a01b031681565b61047660745481565b606f805461093a90614e6f565b80601f016020809104026020016040519081016040528092919081815260200182805461096690614e6f565b80156109b35780601f10610988576101008083540402835291602001916109b3565b820191906000526020600020905b81548152906001019060200180831161099657829003601f168201915b505050505081565b6073546001600160a01b031633146109ee5760405162461bcd60e51b81526004016109e590614ea9565b60405180910390fd5b6103e88161ffff16118015610a0857506104008161ffff16105b610a8d5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a4b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a4016109e5565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610b1c57508115155b610b90576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e5565b80610c05576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e5565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610cc692600160801b90920481169116614f02565b6001600160401b0316111592915050565b6073546001600160a01b03163314610d015760405162461bcd60e51b81526004016109e590614ea9565b62093a806001600160401b0382161115610d2d5760405162461bcd60e51b81526004016109e590614f2d565b60655460ff16610dd0576072546001600160401b03600160c01b909104811690821610610dd05760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a4b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109e5565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610adf565b60655460ff1615610e495760405162461bcd60e51b81526004016109e590614f98565b606954600160401b90046001600160a01b03163314610ed05760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e63657200000000000060648201526084016109e5565b805180610f455760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e6365203120626174636800000060648201526084016109e5565b6103e88110610fbe576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e79206261746368657360648201526084016109e5565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561145e57600087828151811061101157611011615000565b60200260200101519050600081606001516001600160401b031611156111ca578361103b81615016565b9450506000816000015180519060200120826020015183606001516040516020016110689392919061503c565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461110e5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d6174636800000060648201526084016109e5565b81606001516001600160401b031682604001516001600160401b031610156111c45760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a4016109e5565b50611351565b602081015115806112535750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b36329161120d9160040190815260200190565b6020604051808303816000875af115801561122c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611250919061505f565b15155b6112c55760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d75737420657869737400000000000060648201526084016109e5565b80515161ea60116113515760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a4016109e5565b856001600160401b031681604001516001600160401b03161015801561138457504281604001516001600160401b031611155b6113f65760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e676500000060648201526084016109e5565b8051805160209182012081830151604080850151905161141d948894939291339101615078565b604051602081830303815290604052805190602001209250848061144090615016565b95505080604001519550508080611456906150bc565b915050610ff5565b506068546001600160401b03600160c01b909104811690831611156114e35760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b60648201526084016109e5565b60685460009061150390600160801b90046001600160401b0316846150d5565b611516906001600160401b0316876150fd565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115eb903390309084906115d09190615114565b606554600160581b90046001600160a01b031692919061338c565b6115f36133f7565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff161561165d5760405162461bcd60e51b81526004016109e590614f98565b6072546001600160401b03878116600090815260676020526040902060010154429261169492600160c01b90910481169116614f02565b6001600160401b0316111561171d5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a4016109e5565b6103e861172a88886150d5565b6001600160401b0316106117a65760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e7920626174636865730000000060648201526084016109e5565b6117b6888888888888888861349b565b6117bf866139d9565b607254600160801b90046001600160401b0316600003611887576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561182457607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561186a57600080fd5b505af115801561187e573d6000803e3d6000fd5b50505050611938565b61188f6133f7565b607280546001600160401b03169060006118a883615016565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b038116158015906119b057506072546001600160401b03600160401b9091048116908216115b80156119cb57506072546001600160401b0390811690821611155b611a495760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a4016109e5565b606a546001600160a01b03163314611af357611a6481610c90565b611af35760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a4016109e5565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d9094529382902092909255607280546fffffffffffffffff000000000000000019169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611bb557600080fd5b505af1158015611bc9573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611c1691815260200190565b60405180910390a3505050565b606e805461093a90614e6f565b600054610100900460ff1615808015611c505750600054600160ff909116105b80611c6a5750303b158015611c6a575060005460ff166001145b611ccd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109e5565b6000805460ff191660011790558015611cf0576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611d6d6020860186614c06565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d9d6060860160408701614c06565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611dd860c0860160a08701614c06565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611e3560e0860160c08701614812565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611e6c6040860160208701614812565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611ea86080860160608701614812565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611ee460a0860160808701614ce8565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611f0c8482615179565b50606f611f198382615179565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611f4f613bbf565b8015611f95576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611fca5760405162461bcd60e51b81526004016109e590614ea9565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610adf565b6073546001600160a01b0316331461204e5760405162461bcd60e51b81526004016109e590614ea9565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190602001610adf565b6120a4613c33565b6120ae6000613c8d565b565b6033546001600160a01b0316331461231d576072546000906001600160401b03161561210157506072546001600160401b03908116600090815260716020526040902054600160401b90041661210f565b506069546001600160401b03165b80826001600160401b03161161218d5760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c72656164792076657269666965640000000060648201526084016109e5565b6068546001600160401b03600160401b9091048116908316118015906121cf57506001600160401b038083166000908152606760205260409020600101541615155b61225a5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a4016109e5565b6001600160401b0380831660009081526067602052604090206001015442916122889162093a809116614f02565b6001600160401b0316111561231b5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a4016109e5565b505b612325613cdf565b50565b60655460ff161561234b5760405162461bcd60e51b81526004016109e590614f98565b61235c898989898989898989613d4f565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f95613cdf565b6073546001600160a01b031633146123e15760405162461bcd60e51b81526004016109e590614ea9565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610adf90831515815260200190565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612481573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a5919061505f565b905060006124b1612657565b6068546001600160401b03600160401b82048116916124e191600160801b8204811691600160c01b9004166150d5565b6124eb9190614f02565b6124f591906150d5565b6001600160401b0316905061250a818361524e565b9250505090565b6073546001600160a01b0316331461253b5760405162461bcd60e51b81526004016109e590614ea9565b62093a806001600160401b03821611156125675760405162461bcd60e51b81526004016109e590614f2d565b60655460ff166125fc576072546001600160401b03600160801b9091048116908216106125fc5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f7765720060648201526084016109e5565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610adf565b6072546000906001600160401b03161561269457506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126ce5760405162461bcd60e51b81526004016109e590614ea9565b606e6126da8282615179565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610adf919061476b565b6073546001600160a01b031633146127345760405162461bcd60e51b81526004016109e590614ea9565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610adf565b60655460ff16156127ae5760405162461bcd60e51b81526004016109e590614f98565b606c54600160a01b900460ff1615156001146127dc5760405162461bcd60e51b81526004016109e590615262565b80518061283f5760405162461bcd60e51b815260206004820152603d60248201526000805160206155ae83398151915260448201527f3a204d75737420666f726365206174206c65617374203120626174636800000060648201526084016109e5565b6103e881106128b05760405162461bcd60e51b815260206004820152604360248201526000805160206155ae83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a4016109e5565b6068546001600160401b03600160c01b82048116916128d8918491600160801b9004166152cb565b11156129325760405162461bcd60e51b815260206004820152603560248201526000805160206155ae8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b60648201526084016109e5565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612b5e57600086828151811061297f5761297f615000565b60200260200101519050838061299490615016565b9450506000816000015180519060200120826020015183604001516040516020016129c19392919061503c565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612a605760405162461bcd60e51b815260206004820152604260248201526000805160206155ae83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109e5565b612a6b6001886150fd565b8303612b005742620697808360400151612a859190614f02565b6001600160401b03161115612b005760405162461bcd60e51b815260206004820152604760248201526000805160206155ae83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a4016109e5565b8151805160209182012081840151604051612b2393889392914291339101615078565b6040516020818303038152906040528051906020012093508580612b4690615016565b96505050508080612b56906150bc565b915050612963565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612c775760405162461bcd60e51b81526004016109e5906152e3565b6073546001600160a01b03163314612ca15760405162461bcd60e51b81526004016109e590614ea9565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612cf157600080fd5b505af1158015612d05573d6000803e3d6000fd5b505050506120ae6143ca565b606a546001600160a01b03163314612d3b5760405162461bcd60e51b81526004016109e590615340565b612d4c898989898989898989613d4f565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612d9757607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612ddd57600080fd5b505af1158015612df1573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612e795760405162461bcd60e51b81526004016109e590614f98565b606c54600160a01b900460ff161515600114612ea75760405162461bcd60e51b81526004016109e590615262565b6000612eb260745490565b905081811115612f175760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b60648201526084016109e5565b61ea60835110612f875760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b60648201526084016109e5565b606554612fa690600160581b90046001600160a01b031633308461338c565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015612ff0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613014919061505f565b60688054919250600160c01b9091046001600160401b031690601861303883615016565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016130799392919061503c565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361311d57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613178565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161316f9392919061539d565b60405180910390a25b50505050565b606a546001600160a01b031633146131a85760405162461bcd60e51b81526004016109e590615340565b6131b8888888888888888861349b565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561320357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561324957600080fd5b505af115801561325d573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611971565b6073546001600160a01b031633146132c85760405162461bcd60e51b81526004016109e590614ea9565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001610adf565b61331e613c33565b6001600160a01b0381166133835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e5565b61232581613c8d565b6040516001600160a01b03808516602483015283166044820152606481018290526131789085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614421565b6072546001600160401b03600160401b82048116911611156120ae5760725460009061343490600160401b90046001600160401b03166001614f02565b905061343f81610c90565b15612325576072546000906002906134619084906001600160401b03166150d5565b61346b91906153d0565b6134759083614f02565b905061348081610c90565b156134925761348e81611983565b5050565b61348e82611983565b6000806134a6612657565b90506001600160401b038a1615613621576072546001600160401b03908116908b1611156135625760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2070656e60448201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560648201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608482015260a4016109e5565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b909204161461361b5760405162461bcd60e51b815260206004820152604c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760648201526b040e6e8c2e8ca40c4c2e8c6d60a31b608482015260a4016109e5565b50613769565b6001600160401b0389166000908152606d60205260409020549150816136bb5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786064820152621a5cdd60ea1b608482015260a4016109e5565b806001600160401b0316896001600160401b031611156137695760405162461bcd60e51b815260206004820152605d60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060648201527f7468616e2063757272656e744c61737456657269666965644261746368000000608482015260a4016109e5565b806001600160401b0316886001600160401b0316116138165760405162461bcd60e51b815260206004820152605760248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2066696e60448201527f616c4e65774261746368206d75737420626520626967676572207468616e206360648201527f757272656e744c61737456657269666965644261746368000000000000000000608482015260a4016109e5565b60006138258a8a8a868b610aea565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161385a91906153f6565b602060405180830381855afa158015613877573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061389a919061505f565b6138a49190615412565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916138e8918b918b918b9190600401615426565b602060405180830381865afa158015613905573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392991906154a0565b6139885760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20494e5660448201526920a624a22fa82927a7a360b11b60648201526084016109e5565b6139cb33613996858d6150d5565b6001600160401b03166139a761242e565b6139b19190615114565b606554600160581b90046001600160a01b031691906144f8565b505050505050505050505050565b60006139e3612657565b9050816000806139f384846150d5565b6001600160401b031690505b836001600160401b0316836001600160401b031614613aa5576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613a4f9116426150fd565b1115613a8a576001810154613a7490600160401b90046001600160401b0316866150d5565b613a87906001600160401b0316846152cb565b92505b60010154600160401b90046001600160401b031692506139ff565b6000613ab183836150fd565b905082811015613b2b576000613ac782856150fd565b9050600c8111613ad75780613ada565b600c5b9050613ae7816003615114565b613af290600a6155a1565b606554613b0b908390600160481b900461ffff166155a1565b607454613b189190615114565b613b22919061524e565b60745550613bb7565b6000613b3784836150fd565b9050600c8111613b475780613b4a565b600c5b90506000613b59826003615114565b613b6490600a6155a1565b606554613b7d908490600160481b900461ffff166155a1565b607454613b8a9190615114565b613b94919061524e565b905080607454607454613ba79190615114565b613bb1919061524e565b60745550505b505050505050565b600054610100900460ff16613c2a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109e5565b6120ae33613c8d565b6033546001600160a01b031633146120ae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109e5565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d2f57600080fd5b505af1158015613d43573d6000803e3d6000fd5b505050506120ae614528565b60006001600160401b038a1615613eca576072546001600160401b03908116908b161115613e0e5760405162461bcd60e51b815260206004820152606c60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c4016109e5565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613ec45760405162461bcd60e51b815260206004820152606060248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a4016109e5565b5061401e565b506001600160401b0387166000908152606d602052604090205480613f6b5760405162461bcd60e51b815260206004820152605760248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a4016109e5565b6069546001600160401b03908116908916111561401e5760405162461bcd60e51b815260206004820152607160248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c4016109e5565b6072546001600160401b03908116908a161180159061404e5750896001600160401b0316896001600160401b0316115b801561406f57506072546001600160401b03600160401b9091048116908a16115b6140e75760405162461bcd60e51b815260206004820152604f60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a4016109e5565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146141a75760405162461bcd60e51b815260206004820152606a60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c4016109e5565b60006141b6898989858a610aea565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516141eb91906153f6565b602060405180830381855afa158015614208573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061422b919061505f565b6142359190615412565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614279918a918a918a9190600401615426565b602060405180830381865afa158015614296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ba91906154a0565b61431a5760405162461bcd60e51b815260206004820152603e60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20494e56414c49445f50524f4f46000060648201526084016109e5565b6001600160401b038b166000908152607160205260409020600201548790036139cb5760405162461bcd60e51b815260206004820152606260248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c4016109e5565b60655460ff166143ec5760405162461bcd60e51b81526004016109e5906152e3565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614476826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145839092919063ffffffff16565b8051909150156144f3578080602001905181019061449491906154a0565b6144f35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109e5565b505050565b6040516001600160a01b0383166024820152604481018290526144f390849063a9059cbb60e01b906064016133c0565b60655460ff161561454b5760405162461bcd60e51b81526004016109e590614f98565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614592848460008561459a565b949350505050565b6060824710156145fb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109e5565b600080866001600160a01b0316858760405161461791906153f6565b60006040518083038185875af1925050503d8060008114614654576040519150601f19603f3d011682016040523d82523d6000602084013e614659565b606091505b509150915061466a87838387614675565b979650505050505050565b606083156146e45782516000036146dd576001600160a01b0385163b6146dd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109e5565b5081614592565b61459283838151156146f95781518083602001fd5b8060405162461bcd60e51b81526004016109e5919061476b565b60005b8381101561472e578181015183820152602001614716565b838111156131785750506000910152565b60008151808452614757816020860160208601614713565b601f01601f19169290920160200192915050565b60208152600061477e602083018461473f565b9392505050565b60006020828403121561479757600080fd5b813561ffff8116811461477e57600080fd5b80356001600160401b03811681146147c057600080fd5b919050565b600080600080600060a086880312156147dd57600080fd5b6147e6866147a9565b94506147f4602087016147a9565b94979496505050506040830135926060810135926080909101359150565b60006020828403121561482457600080fd5b61477e826147a9565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156148655761486561482d565b60405290565b604051606081016001600160401b03811182821017156148655761486561482d565b604051601f8201601f191681016001600160401b03811182821017156148b5576148b561482d565b604052919050565b60006001600160401b038211156148d6576148d661482d565b5060051b60200190565b600082601f8301126148f157600080fd5b81356001600160401b0381111561490a5761490a61482d565b61491d601f8201601f191660200161488d565b81815284602083860101111561493257600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561496257600080fd5b82356001600160401b038082111561497957600080fd5b818501915085601f83011261498d57600080fd5b81356149a061499b826148bd565b61488d565b81815260059190911b830184019084810190888311156149bf57600080fd5b8585015b83811015614a58578035858111156149db5760008081fd5b86016080818c03601f19018113156149f35760008081fd5b6149fb614843565b8983013588811115614a0d5760008081fd5b614a1b8e8c838701016148e0565b8252506040808401358b8301526060614a358186016147a9565b82840152614a448486016147a9565b9083015250855250509186019186016149c3565b5098975050505050505050565b8060408101831015614a7657600080fd5b92915050565b8060808101831015614a7657600080fd5b6000806000806000806000806101a0898b031215614aaa57600080fd5b614ab3896147a9565b9750614ac160208a016147a9565b9650614acf60408a016147a9565b95506060890135945060808901359350614aec8a60a08b01614a65565b9250614afb8a60e08b01614a7c565b9150614b0b8a6101608b01614a65565b90509295985092959890939650565b6001600160a01b038116811461232557600080fd5b600080600080600080600080888a036101c0811215614b4d57600080fd5b8935614b5881614b1a565b985060208a0135614b6881614b1a565b975060408a0135614b7881614b1a565b965060608a0135614b8881614b1a565b955060e0607f1982011215614b9c57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614bc657600080fd5b614bd28c838d016148e0565b93506101a08b0135915080821115614be957600080fd5b50614bf68b828c016148e0565b9150509295985092959890939650565b600060208284031215614c1857600080fd5b813561477e81614b1a565b60008060008060008060008060006101c08a8c031215614c4257600080fd5b614c4b8a6147a9565b9850614c5960208b016147a9565b9750614c6760408b016147a9565b9650614c7560608b016147a9565b955060808a0135945060a08a01359350614c928b60c08c01614a65565b9250614ca28b6101008c01614a7c565b9150614cb28b6101808c01614a65565b90509295985092959850929598565b600060208284031215614cd357600080fd5b5035919050565b801515811461232557600080fd5b600060208284031215614cfa57600080fd5b813561477e81614cda565b600060208284031215614d1757600080fd5b81356001600160401b03811115614d2d57600080fd5b614592848285016148e0565b60006020808385031215614d4c57600080fd5b82356001600160401b0380821115614d6357600080fd5b818501915085601f830112614d7757600080fd5b8135614d8561499b826148bd565b81815260059190911b83018401908481019088831115614da457600080fd5b8585015b83811015614a5857803585811115614dc05760008081fd5b86016060818c03601f1901811315614dd85760008081fd5b614de061486b565b8983013588811115614df25760008081fd5b614e008e8c838701016148e0565b8252506040808401358b830152614e188385016147a9565b9082015285525050918601918601614da8565b60008060408385031215614e3e57600080fd5b82356001600160401b03811115614e5457600080fd5b614e60858286016148e0565b95602094909401359450505050565b600181811c90821680614e8357607f821691505b602082108103614ea357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614f2457614f24614eec565b01949350505050565b60208082526045908201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361503257615032614eec565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b60006020828403121561507157600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b6000600182016150ce576150ce614eec565b5060010190565b60006001600160401b03838116908316818110156150f5576150f5614eec565b039392505050565b60008282101561510f5761510f614eec565b500390565b600081600019048311821515161561512e5761512e614eec565b500290565b601f8211156144f357600081815260208120601f850160051c8101602086101561515a5750805b601f850160051c820191505b81811015613bb757828155600101615166565b81516001600160401b038111156151925761519261482d565b6151a6816151a08454614e6f565b84615133565b602080601f8311600181146151db57600084156151c35750858301515b600019600386901b1c1916600185901b178555613bb7565b600085815260208120601f198616915b8281101561520a578886015182559484019460019091019084016151eb565b50858210156152285787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b60008261525d5761525d615238565b500490565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b600082198211156152de576152de614eec565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b03831660208201526060604082018190526000906153c79083018461473f565b95945050505050565b60006001600160401b03808416806153ea576153ea615238565b92169190910492915050565b60008251615408818460208701614713565b9190910192915050565b60008261542157615421615238565b500690565b61012081016040808784376000838201818152879190815b600281101561545e5784848337908401828152928401929060010161543e565b5050828760c0870137610100850181815286935091505b6001811015615494578251825260209283019290910190600101615475565b50505095945050505050565b6000602082840312156154b257600080fd5b815161477e81614cda565b600181815b808511156154f85781600019048211156154de576154de614eec565b808516156154eb57918102915b93841c93908002906154c2565b509250929050565b60008261550f57506001614a76565b8161551c57506000614a76565b8160018114615532576002811461553c57615558565b6001915050614a76565b60ff84111561554d5761554d614eec565b50506001821b614a76565b5060208310610133831016604e8410600b841016171561557b575081810a614a76565b61558583836154bd565b806000190482111561559957615599614eec565b029392505050565b600061477e838361550056fe506f6c79676f6e5a4b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a4b45564d3a3a70726f76654e6f6e44657465726d696e6973a26469706673582212208865f0638a4efbefd35b06681d425aa7b9537afd92181c6a9cb443be8584550964736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZKEVMBridge.json b/compiled-contracts/PolygonZKEVMBridge.json index bf8f869a2..5d99193af 100644 --- a/compiled-contracts/PolygonZKEVMBridge.json +++ b/compiled-contracts/PolygonZKEVMBridge.json @@ -493,7 +493,7 @@ "name": "globalExitRootManager", "outputs": [ { - "internalType": "contract IGlobalExitRootManager", + "internalType": "contract IPolygonZKEVMGlobalExitRoot", "name": "", "type": "address" } @@ -509,7 +509,7 @@ "type": "uint32" }, { - "internalType": "contract IGlobalExitRootManager", + "internalType": "contract IPolygonZKEVMGlobalExitRoot", "name": "_globalExitRootManager", "type": "address" }, @@ -699,8 +699,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50614810806100206000396000f3fe608060405260043610620001675760003560e01c806381b1c17411620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b806381b1c17414620003735780638f61151914620003ad5780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b80633ae05047116200011e5780633ae0504714620002a25780633da8168214620002ba5780633e19704314620002df578063463855491462000304578063647c576c14620003295780637b6323c1146200034e57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002470565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009d2565b348015620001db57600080fd5b50620001f3620001ed366004620024fd565b62000a0b565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002539565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b506200022462000a5e565b348015620002c757600080fd5b50620001a1620002d936600462002628565b62000b51565b348015620002ec57600080fd5b5062000224620002fe366004620026a6565b62000c53565b3480156200031157600080fd5b506200018362000323366004620027b7565b62000ce0565b3480156200033657600080fd5b5062000183620003483660046200289e565b62000e86565b3480156200035b57600080fd5b50620001836200036d366004620027b7565b62000fe5565b3480156200038057600080fd5b50620001f362000392366004620028ee565b6024602052600090815260409020546001600160a01b031681565b348015620003ba57600080fd5b50602754620001f3906001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028ee565b62001492565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002908565b620014d7565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620029bc565b620015ee565b348015620004c357600080fd5b50620001836200179a565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028ee565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a24565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008ec565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074957604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562000710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000736919062002a9b565b50602081015181519094509250620008ea565b84156200075e576200075e8a888888620017d1565b620007756001600160a01b038b1633308a62001bf9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f6919081019062002b36565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000835573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085f919081019062002b36565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c4919062002b6f565b604051602001620008d89392919062002bbd565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092e98979695949392919062002bfa565b60405180910390a16200095962000953600084868c8c8c888051906020012062000c53565b62001c66565b6026546001600160a01b03166333d6247d6200097462000a5e565b6040518263ffffffff1660e01b81526004016200099391815260200190565b600060405180830381600087803b158015620009ae57600080fd5b505af1158015620009c3573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ff5760405162461bcd60e51b8152600401620005539062002c67565b62000a0962001db7565b565b600060246000848460405160200162000a2692919062002cc4565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b48578260011660010362000ac9576001816020811062000a955762000a9562002cee565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af6565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0360028462002d30565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3f9062002d47565b91505062000a69565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c44578160011660010362000bce5786818151811062000b8c5762000b8c62002cee565b60200260200101518360405160200162000bb0929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c20565b8287828151811062000be45762000be462002cee565b602002602001015160405160200162000c07929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2d60028362002d30565b91508062000c3b8162002d47565b91505062000b61565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d065760405162461bcd60e51b8152600401620005539062002a24565b62000d1c8a8a8a8a8a8a8a8a8a8a600162001e15565b62000d2d8963ffffffff16620020a0565b6000836001600160a01b03168387898560405160240162000d519392919062002d63565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d88919062002d9e565b60006040518083038185875af1925050503d806000811462000dc7576040519150601f19603f3d011682016040523d82523d6000602084013e62000dcc565b606091505b505090508062000e385760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e7195949392919062002dbc565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea75750600054600160ff909116105b8062000ec35750303b15801562000ec3575060005460ff166001145b62000f285760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f4c576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff16156200100b5760405162461bcd60e51b8152600401620005539062002a24565b620010218a8a8a8a8a8a8a8a8a8a600062001e15565b620010328963ffffffff16620020a0565b6001600160a01b0385166200112757604080516000808252602082019092526001600160a01b0385169084906040516200106d919062002d9e565b60006040518083038185875af1925050503d8060008114620010ac576040519150601f19603f3d011682016040523d82523d6000602084013e620010b1565b606091505b5050905080620011205760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b5062001445565b60225463ffffffff6101009091048116908716036200115c57620011566001600160a01b0386168484620020e2565b62001445565b600086866040516020016200117392919062002cc4565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013ca57600080600085806020019051810190620011c5919062002df3565b925092509250600085848484604051620011df90620023d6565b620011ed9392919062002bbd565b8190604051809103906000f59050801580156200120e573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001263573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001289919062002a9b565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013b89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001442565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200141a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001440919062002a9b565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200147e95949392919062002dbc565b60405180910390a150505050505050505050565b600080620014a36101008462002d30565b90506000620014b56101008562002e69565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014ef92919062002cc4565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200152290620023d6565b601f1982820381018352601f9091011660408190526200154f908d908d908d908d908d9060200162002ea9565b60408051601f19818403018152908290526200156f929160200162002eea565b60405160208183030381529060405280519060200120604051602001620015c894939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620016145760405162461bcd60e51b8152600401620005539062002a24565b60225463ffffffff6101009091048116908416036200169c5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016f098979695949392919062002bfa565b60405180910390a162001727620009536001602260019054906101000a900463ffffffff1633878734888051906020012062000c53565b6026546001600160a01b03166333d6247d6200174262000a5e565b6040518263ffffffff1660e01b81526004016200176191815260200190565b600060405180830381600087803b1580156200177c57600080fd5b505af115801562001791573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017c75760405162461bcd60e51b8152600401620005539062002c67565b62000a0962002114565b60006200181483838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021c392505050565b9050632afa533160e01b6001600160e01b031982160162001a0d57600080808080808062001846896004818d62002f1d565b81019062001855919062002f49565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018975760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b0386163014620018c25760405162461bcd60e51b8152600401620005539062003001565b8a8514620019395760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620019b9919062002d9e565b6000604051808303816000865af19150503d8060008114620019f8576040519150601f19603f3d011682016040523d82523d6000602084013e620019fd565b606091505b5050505050505050505062001bf2565b6001600160e01b031981166323f2ebc360e21b1462001a835760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a9b8a6004818e62002f1d565b81019062001aaa919062003052565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001aee5760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b038716301462001b195760405162461bcd60e51b8152600401620005539062003001565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001ba2919062002d9e565b6000604051808303816000865af19150503d806000811462001be1576040519150601f19603f3d011682016040523d82523d6000602084013e62001be6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdf9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021ca565b80600162001c7760206002620031db565b62001c839190620031e9565b6021541062001ce85760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cfd919062003203565b909155505060215460005b602081101562001da7578160011660010362001d3d57826001826020811062001d355762001d3562002cee565b015550505050565b6001816020811062001d535762001d5362002cee565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d90919062002d30565b91508062001d9e8162002d47565b91505062001d08565b5062001db26200321e565b505050565b60225460ff161562001ddd5760405162461bcd60e51b8152600401620005539062002a24565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001e268a63ffffffff1662001492565b1562001e7d5760405162461bcd60e51b81526020600482015260306024820152600080516020620047bb83398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ef1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f17919062003234565b90508060000362001f805760405162461bcd60e51b81526020600482015260396024820152600080516020620047bb83398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff8781166101009092041614620020025760405162461bcd60e51b81526020600482015260436024820152600080516020620047bb83398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff166200202057508862002023565b50895b6200204e6200203f848b8b8b8b8b8b8051906020012062000c53565b8e8e63ffffffff168462000b51565b620009c35760405162461bcd60e51b815260206004820152602c6024820152600080516020620047bb83398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020b06101008362002d30565b90506000620020c26101008462002e69565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001db290849063a9059cbb60e01b9060640162001c2e565b60225460ff166200218e5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002221826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022a39092919063ffffffff16565b80519091501562001db2578080602001905181019062002242919062002a9b565b62001db25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c4b848460008585600080866001600160a01b03168587604051620022cd919062002d9e565b60006040518083038185875af1925050503d80600081146200230c576040519150601f19603f3d011682016040523d82523d6000602084013e62002311565b606091505b509150915062002324878383876200232f565b979650505050505050565b60608315620023a35782516000036200239b576001600160a01b0385163b6200239b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c4b565b62000c4b8383815115620023ba5781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200324e565b611557806200326483390190565b6001600160a01b0381168114620023fa57600080fd5b50565b80356200240a81620023e4565b919050565b803563ffffffff811681146200240a57600080fd5b60008083601f8401126200243757600080fd5b50813567ffffffffffffffff8111156200245057600080fd5b6020830191508360208285010111156200246957600080fd5b9250929050565b60008060008060008060a087890312156200248a57600080fd5b86356200249781620023e4565b9550620024a7602088016200240f565b94506040870135620024b981620023e4565b935060608701359250608087013567ffffffffffffffff811115620024dd57600080fd5b620024eb89828a0162002424565b979a9699509497509295939492505050565b600080604083850312156200251157600080fd5b6200251c836200240f565b915060208301356200252e81620023e4565b809150509250929050565b6000602082840312156200254c57600080fd5b81356200255981620023e4565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620025a257620025a262002560565b604052919050565b600082601f830112620025bc57600080fd5b8135602067ffffffffffffffff821115620025db57620025db62002560565b8160051b620025ec82820162002576565b92835284810182019282810190878511156200260757600080fd5b83870192505b8483101562002324578235825291830191908301906200260d565b600080600080608085870312156200263f57600080fd5b84359350602085013567ffffffffffffffff808211156200265f57600080fd5b6200266d88838901620025aa565b94506040870135915080821682146200268557600080fd5b509396929550929360600135925050565b60ff81168114620023fa57600080fd5b600080600080600080600060e0888a031215620026c257600080fd5b8735620026cf8162002696565b9650620026df602089016200240f565b95506040880135620026f181620023e4565b945062002701606089016200240f565b935060808801356200271381620023e4565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200274d576200274d62002560565b50601f01601f191660200190565b600082601f8301126200276d57600080fd5b8135620027846200277e8262002730565b62002576565b8181528460208386010111156200279a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027d857600080fd5b8a3567ffffffffffffffff80821115620027f157600080fd5b620027ff8e838f01620025aa565b9b506200280f60208e016200240f565b9a5060408d0135995060608d013598506200282d60808e016200240f565b97506200283d60a08e01620023fd565b96506200284d60c08e016200240f565b95506200285d60e08e01620023fd565b94506101008d013593506101208d01359150808211156200287d57600080fd5b506200288c8d828e016200275b565b9150509295989b9194979a5092959850565b600080600060608486031215620028b457600080fd5b620028bf846200240f565b92506020840135620028d181620023e4565b91506040840135620028e381620023e4565b809150509250925092565b6000602082840312156200290157600080fd5b5035919050565b600080600080600080600060a0888a0312156200292457600080fd5b6200292f886200240f565b965060208801356200294181620023e4565b9550604088013567ffffffffffffffff808211156200295f57600080fd5b6200296d8b838c0162002424565b909750955060608a01359150808211156200298757600080fd5b50620029968a828b0162002424565b9094509250506080880135620029ac8162002696565b8091505092959891949750929550565b600080600060608486031215620029d257600080fd5b620029dd846200240f565b92506020840135620029ef81620023e4565b9150604084013567ffffffffffffffff81111562002a0c57600080fd5b62002a1a868287016200275b565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b8015158114620023fa57600080fd5b60006020828403121562002aae57600080fd5b8151620025598162002a8c565b60005b8381101562002ad857818101518382015260200162002abe565b8381111562000fdf5750506000910152565b600082601f83011262002afc57600080fd5b815162002b0d6200277e8262002730565b81815284602083860101111562002b2357600080fd5b62000c4b82602083016020870162002abb565b60006020828403121562002b4957600080fd5b815167ffffffffffffffff81111562002b6157600080fd5b62000c4b8482850162002aea565b60006020828403121562002b8257600080fd5b8151620025598162002696565b6000815180845262002ba981602086016020860162002abb565b601f01601f19169290920160200192915050565b60608152600062002bd2606083018662002b8f565b828103602084015262002be6818662002b8f565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002c4e8483018762002b8f565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79506f6c79676f6e5a4b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002d425762002d4262002d04565b500490565b60006001820162002d5c5762002d5c62002d1a565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d959083018462002b8f565b95945050505050565b6000825162002db281846020870162002abb565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002e0957600080fd5b835167ffffffffffffffff8082111562002e2257600080fd5b62002e308783880162002aea565b9450602086015191508082111562002e4757600080fd5b5062002e568682870162002aea565b9250506040840151620028e38162002696565b60008262002e7b5762002e7b62002d04565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002ebf60608301878962002e80565b828103602084015262002ed481868862002e80565b91505060ff831660408301529695505050505050565b6000835162002efe81846020880162002abb565b83519083019062002f1481836020880162002abb565b01949350505050565b6000808585111562002f2e57600080fd5b8386111562002f3c57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f6557600080fd5b873562002f7281620023e4565b9650602088013562002f8481620023e4565b955060408801359450606088013593506080880135620027138162002696565b6020808252603c908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b0312156200307057600080fd5b88356200307d81620023e4565b975060208901356200308f81620023e4565b965060408901359550606089013594506080890135620030af8162002a8c565b935060a0890135620030c18162002696565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200311f57816000190482111562003103576200310362002d1a565b808516156200311157918102915b93841c9390800290620030e3565b509250929050565b600082620031385750600162000a58565b81620031475750600062000a58565b81600181146200316057600281146200316b576200318b565b600191505062000a58565b60ff8411156200317f576200317f62002d1a565b50506001821b62000a58565b5060208310610133831016604e8410600b8410161715620031b0575081810a62000a58565b620031bc8383620030de565b8060001904821115620031d357620031d362002d1a565b029392505050565b600062002559838362003127565b600082821015620031fe57620031fe62002d1a565b500390565b6000821982111562003219576200321962002d1a565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200324757600080fd5b5051919050565b60208152600062002559602083018462002b8f56fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b5d95b18e7873c0bee5e5a0f8ba7f856feaa9a4588dd711619c14728f42e00f64736f6c634300080f0033506f6c79676f6e5a4b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212209b2bb35ca1d94b05b5696ee4cf3ac515cd303048eca38e63dbe9ac234b46d63464736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001675760003560e01c806381b1c17411620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b806381b1c17414620003735780638f61151914620003ad5780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b80633ae05047116200011e5780633ae0504714620002a25780633da8168214620002ba5780633e19704314620002df578063463855491462000304578063647c576c14620003295780637b6323c1146200034e57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002470565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009d2565b348015620001db57600080fd5b50620001f3620001ed366004620024fd565b62000a0b565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002539565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b506200022462000a5e565b348015620002c757600080fd5b50620001a1620002d936600462002628565b62000b51565b348015620002ec57600080fd5b5062000224620002fe366004620026a6565b62000c53565b3480156200031157600080fd5b506200018362000323366004620027b7565b62000ce0565b3480156200033657600080fd5b5062000183620003483660046200289e565b62000e86565b3480156200035b57600080fd5b50620001836200036d366004620027b7565b62000fe5565b3480156200038057600080fd5b50620001f362000392366004620028ee565b6024602052600090815260409020546001600160a01b031681565b348015620003ba57600080fd5b50602754620001f3906001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028ee565b62001492565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002908565b620014d7565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620029bc565b620015ee565b348015620004c357600080fd5b50620001836200179a565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028ee565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a24565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008ec565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074957604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562000710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000736919062002a9b565b50602081015181519094509250620008ea565b84156200075e576200075e8a888888620017d1565b620007756001600160a01b038b1633308a62001bf9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f6919081019062002b36565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000835573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085f919081019062002b36565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c4919062002b6f565b604051602001620008d89392919062002bbd565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092e98979695949392919062002bfa565b60405180910390a16200095962000953600084868c8c8c888051906020012062000c53565b62001c66565b6026546001600160a01b03166333d6247d6200097462000a5e565b6040518263ffffffff1660e01b81526004016200099391815260200190565b600060405180830381600087803b158015620009ae57600080fd5b505af1158015620009c3573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ff5760405162461bcd60e51b8152600401620005539062002c67565b62000a0962001db7565b565b600060246000848460405160200162000a2692919062002cc4565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b48578260011660010362000ac9576001816020811062000a955762000a9562002cee565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af6565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0360028462002d30565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3f9062002d47565b91505062000a69565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c44578160011660010362000bce5786818151811062000b8c5762000b8c62002cee565b60200260200101518360405160200162000bb0929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c20565b8287828151811062000be45762000be462002cee565b602002602001015160405160200162000c07929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2d60028362002d30565b91508062000c3b8162002d47565b91505062000b61565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d065760405162461bcd60e51b8152600401620005539062002a24565b62000d1c8a8a8a8a8a8a8a8a8a8a600162001e15565b62000d2d8963ffffffff16620020a0565b6000836001600160a01b03168387898560405160240162000d519392919062002d63565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d88919062002d9e565b60006040518083038185875af1925050503d806000811462000dc7576040519150601f19603f3d011682016040523d82523d6000602084013e62000dcc565b606091505b505090508062000e385760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e7195949392919062002dbc565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea75750600054600160ff909116105b8062000ec35750303b15801562000ec3575060005460ff166001145b62000f285760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f4c576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff16156200100b5760405162461bcd60e51b8152600401620005539062002a24565b620010218a8a8a8a8a8a8a8a8a8a600062001e15565b620010328963ffffffff16620020a0565b6001600160a01b0385166200112757604080516000808252602082019092526001600160a01b0385169084906040516200106d919062002d9e565b60006040518083038185875af1925050503d8060008114620010ac576040519150601f19603f3d011682016040523d82523d6000602084013e620010b1565b606091505b5050905080620011205760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b5062001445565b60225463ffffffff6101009091048116908716036200115c57620011566001600160a01b0386168484620020e2565b62001445565b600086866040516020016200117392919062002cc4565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013ca57600080600085806020019051810190620011c5919062002df3565b925092509250600085848484604051620011df90620023d6565b620011ed9392919062002bbd565b8190604051809103906000f59050801580156200120e573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001263573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001289919062002a9b565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013b89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001442565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200141a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001440919062002a9b565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200147e95949392919062002dbc565b60405180910390a150505050505050505050565b600080620014a36101008462002d30565b90506000620014b56101008562002e69565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014ef92919062002cc4565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200152290620023d6565b601f1982820381018352601f9091011660408190526200154f908d908d908d908d908d9060200162002ea9565b60408051601f19818403018152908290526200156f929160200162002eea565b60405160208183030381529060405280519060200120604051602001620015c894939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620016145760405162461bcd60e51b8152600401620005539062002a24565b60225463ffffffff6101009091048116908416036200169c5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016f098979695949392919062002bfa565b60405180910390a162001727620009536001602260019054906101000a900463ffffffff1633878734888051906020012062000c53565b6026546001600160a01b03166333d6247d6200174262000a5e565b6040518263ffffffff1660e01b81526004016200176191815260200190565b600060405180830381600087803b1580156200177c57600080fd5b505af115801562001791573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017c75760405162461bcd60e51b8152600401620005539062002c67565b62000a0962002114565b60006200181483838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021c392505050565b9050632afa533160e01b6001600160e01b031982160162001a0d57600080808080808062001846896004818d62002f1d565b81019062001855919062002f49565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018975760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b0386163014620018c25760405162461bcd60e51b8152600401620005539062003001565b8a8514620019395760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620019b9919062002d9e565b6000604051808303816000865af19150503d8060008114620019f8576040519150601f19603f3d011682016040523d82523d6000602084013e620019fd565b606091505b5050505050505050505062001bf2565b6001600160e01b031981166323f2ebc360e21b1462001a835760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a9b8a6004818e62002f1d565b81019062001aaa919062003052565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001aee5760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b038716301462001b195760405162461bcd60e51b8152600401620005539062003001565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001ba2919062002d9e565b6000604051808303816000865af19150503d806000811462001be1576040519150601f19603f3d011682016040523d82523d6000602084013e62001be6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdf9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021ca565b80600162001c7760206002620031db565b62001c839190620031e9565b6021541062001ce85760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cfd919062003203565b909155505060215460005b602081101562001da7578160011660010362001d3d57826001826020811062001d355762001d3562002cee565b015550505050565b6001816020811062001d535762001d5362002cee565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d90919062002d30565b91508062001d9e8162002d47565b91505062001d08565b5062001db26200321e565b505050565b60225460ff161562001ddd5760405162461bcd60e51b8152600401620005539062002a24565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001e268a63ffffffff1662001492565b1562001e7d5760405162461bcd60e51b81526020600482015260306024820152600080516020620047bb83398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ef1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f17919062003234565b90508060000362001f805760405162461bcd60e51b81526020600482015260396024820152600080516020620047bb83398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff8781166101009092041614620020025760405162461bcd60e51b81526020600482015260436024820152600080516020620047bb83398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff166200202057508862002023565b50895b6200204e6200203f848b8b8b8b8b8b8051906020012062000c53565b8e8e63ffffffff168462000b51565b620009c35760405162461bcd60e51b815260206004820152602c6024820152600080516020620047bb83398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020b06101008362002d30565b90506000620020c26101008462002e69565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001db290849063a9059cbb60e01b9060640162001c2e565b60225460ff166200218e5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002221826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022a39092919063ffffffff16565b80519091501562001db2578080602001905181019062002242919062002a9b565b62001db25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c4b848460008585600080866001600160a01b03168587604051620022cd919062002d9e565b60006040518083038185875af1925050503d80600081146200230c576040519150601f19603f3d011682016040523d82523d6000602084013e62002311565b606091505b509150915062002324878383876200232f565b979650505050505050565b60608315620023a35782516000036200239b576001600160a01b0385163b6200239b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c4b565b62000c4b8383815115620023ba5781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200324e565b611557806200326483390190565b6001600160a01b0381168114620023fa57600080fd5b50565b80356200240a81620023e4565b919050565b803563ffffffff811681146200240a57600080fd5b60008083601f8401126200243757600080fd5b50813567ffffffffffffffff8111156200245057600080fd5b6020830191508360208285010111156200246957600080fd5b9250929050565b60008060008060008060a087890312156200248a57600080fd5b86356200249781620023e4565b9550620024a7602088016200240f565b94506040870135620024b981620023e4565b935060608701359250608087013567ffffffffffffffff811115620024dd57600080fd5b620024eb89828a0162002424565b979a9699509497509295939492505050565b600080604083850312156200251157600080fd5b6200251c836200240f565b915060208301356200252e81620023e4565b809150509250929050565b6000602082840312156200254c57600080fd5b81356200255981620023e4565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620025a257620025a262002560565b604052919050565b600082601f830112620025bc57600080fd5b8135602067ffffffffffffffff821115620025db57620025db62002560565b8160051b620025ec82820162002576565b92835284810182019282810190878511156200260757600080fd5b83870192505b8483101562002324578235825291830191908301906200260d565b600080600080608085870312156200263f57600080fd5b84359350602085013567ffffffffffffffff808211156200265f57600080fd5b6200266d88838901620025aa565b94506040870135915080821682146200268557600080fd5b509396929550929360600135925050565b60ff81168114620023fa57600080fd5b600080600080600080600060e0888a031215620026c257600080fd5b8735620026cf8162002696565b9650620026df602089016200240f565b95506040880135620026f181620023e4565b945062002701606089016200240f565b935060808801356200271381620023e4565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200274d576200274d62002560565b50601f01601f191660200190565b600082601f8301126200276d57600080fd5b8135620027846200277e8262002730565b62002576565b8181528460208386010111156200279a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027d857600080fd5b8a3567ffffffffffffffff80821115620027f157600080fd5b620027ff8e838f01620025aa565b9b506200280f60208e016200240f565b9a5060408d0135995060608d013598506200282d60808e016200240f565b97506200283d60a08e01620023fd565b96506200284d60c08e016200240f565b95506200285d60e08e01620023fd565b94506101008d013593506101208d01359150808211156200287d57600080fd5b506200288c8d828e016200275b565b9150509295989b9194979a5092959850565b600080600060608486031215620028b457600080fd5b620028bf846200240f565b92506020840135620028d181620023e4565b91506040840135620028e381620023e4565b809150509250925092565b6000602082840312156200290157600080fd5b5035919050565b600080600080600080600060a0888a0312156200292457600080fd5b6200292f886200240f565b965060208801356200294181620023e4565b9550604088013567ffffffffffffffff808211156200295f57600080fd5b6200296d8b838c0162002424565b909750955060608a01359150808211156200298757600080fd5b50620029968a828b0162002424565b9094509250506080880135620029ac8162002696565b8091505092959891949750929550565b600080600060608486031215620029d257600080fd5b620029dd846200240f565b92506020840135620029ef81620023e4565b9150604084013567ffffffffffffffff81111562002a0c57600080fd5b62002a1a868287016200275b565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b8015158114620023fa57600080fd5b60006020828403121562002aae57600080fd5b8151620025598162002a8c565b60005b8381101562002ad857818101518382015260200162002abe565b8381111562000fdf5750506000910152565b600082601f83011262002afc57600080fd5b815162002b0d6200277e8262002730565b81815284602083860101111562002b2357600080fd5b62000c4b82602083016020870162002abb565b60006020828403121562002b4957600080fd5b815167ffffffffffffffff81111562002b6157600080fd5b62000c4b8482850162002aea565b60006020828403121562002b8257600080fd5b8151620025598162002696565b6000815180845262002ba981602086016020860162002abb565b601f01601f19169290920160200192915050565b60608152600062002bd2606083018662002b8f565b828103602084015262002be6818662002b8f565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002c4e8483018762002b8f565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79506f6c79676f6e5a4b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002d425762002d4262002d04565b500490565b60006001820162002d5c5762002d5c62002d1a565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d959083018462002b8f565b95945050505050565b6000825162002db281846020870162002abb565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002e0957600080fd5b835167ffffffffffffffff8082111562002e2257600080fd5b62002e308783880162002aea565b9450602086015191508082111562002e4757600080fd5b5062002e568682870162002aea565b9250506040840151620028e38162002696565b60008262002e7b5762002e7b62002d04565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002ebf60608301878962002e80565b828103602084015262002ed481868862002e80565b91505060ff831660408301529695505050505050565b6000835162002efe81846020880162002abb565b83519083019062002f1481836020880162002abb565b01949350505050565b6000808585111562002f2e57600080fd5b8386111562002f3c57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f6557600080fd5b873562002f7281620023e4565b9650602088013562002f8481620023e4565b955060408801359450606088013593506080880135620027138162002696565b6020808252603c908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b0312156200307057600080fd5b88356200307d81620023e4565b975060208901356200308f81620023e4565b965060408901359550606089013594506080890135620030af8162002a8c565b935060a0890135620030c18162002696565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200311f57816000190482111562003103576200310362002d1a565b808516156200311157918102915b93841c9390800290620030e3565b509250929050565b600082620031385750600162000a58565b81620031475750600062000a58565b81600181146200316057600281146200316b576200318b565b600191505062000a58565b60ff8411156200317f576200317f62002d1a565b50506001821b62000a58565b5060208310610133831016604e8410600b8410161715620031b0575081810a62000a58565b620031bc8383620030de565b8060001904821115620031d357620031d362002d1a565b029392505050565b600062002559838362003127565b600082821015620031fe57620031fe62002d1a565b500390565b6000821982111562003219576200321962002d1a565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200324757600080fd5b5051919050565b60208152600062002559602083018462002b8f56fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b5d95b18e7873c0bee5e5a0f8ba7f856feaa9a4588dd711619c14728f42e00f64736f6c634300080f0033506f6c79676f6e5a4b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212209b2bb35ca1d94b05b5696ee4cf3ac515cd303048eca38e63dbe9ac234b46d63464736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50614810806100206000396000f3fe608060405260043610620001675760003560e01c806381b1c17411620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b806381b1c17414620003735780638f61151914620003ad5780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b80633ae05047116200011e5780633ae0504714620002a25780633da8168214620002ba5780633e19704314620002df578063463855491462000304578063647c576c14620003295780637b6323c1146200034e57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002470565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009d2565b348015620001db57600080fd5b50620001f3620001ed366004620024fd565b62000a0b565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002539565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b506200022462000a5e565b348015620002c757600080fd5b50620001a1620002d936600462002628565b62000b51565b348015620002ec57600080fd5b5062000224620002fe366004620026a6565b62000c53565b3480156200031157600080fd5b506200018362000323366004620027b7565b62000ce0565b3480156200033657600080fd5b5062000183620003483660046200289e565b62000e86565b3480156200035b57600080fd5b50620001836200036d366004620027b7565b62000fe5565b3480156200038057600080fd5b50620001f362000392366004620028ee565b6024602052600090815260409020546001600160a01b031681565b348015620003ba57600080fd5b50602754620001f3906001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028ee565b62001492565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002908565b620014d7565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620029bc565b620015ee565b348015620004c357600080fd5b50620001836200179a565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028ee565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a24565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008ec565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074957604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562000710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000736919062002a9b565b50602081015181519094509250620008ea565b84156200075e576200075e8a888888620017d1565b620007756001600160a01b038b1633308a62001bf9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f6919081019062002b36565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000835573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085f919081019062002b36565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c4919062002b6f565b604051602001620008d89392919062002bbd565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092e98979695949392919062002bfa565b60405180910390a16200095962000953600084868c8c8c888051906020012062000c53565b62001c66565b6026546001600160a01b03166333d6247d6200097462000a5e565b6040518263ffffffff1660e01b81526004016200099391815260200190565b600060405180830381600087803b158015620009ae57600080fd5b505af1158015620009c3573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ff5760405162461bcd60e51b8152600401620005539062002c67565b62000a0962001db7565b565b600060246000848460405160200162000a2692919062002cc4565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b48578260011660010362000ac9576001816020811062000a955762000a9562002cee565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af6565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0360028462002d30565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3f9062002d47565b91505062000a69565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c44578160011660010362000bce5786818151811062000b8c5762000b8c62002cee565b60200260200101518360405160200162000bb0929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c20565b8287828151811062000be45762000be462002cee565b602002602001015160405160200162000c07929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2d60028362002d30565b91508062000c3b8162002d47565b91505062000b61565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d065760405162461bcd60e51b8152600401620005539062002a24565b62000d1c8a8a8a8a8a8a8a8a8a8a600162001e15565b62000d2d8963ffffffff16620020a0565b6000836001600160a01b03168387898560405160240162000d519392919062002d63565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d88919062002d9e565b60006040518083038185875af1925050503d806000811462000dc7576040519150601f19603f3d011682016040523d82523d6000602084013e62000dcc565b606091505b505090508062000e385760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e7195949392919062002dbc565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea75750600054600160ff909116105b8062000ec35750303b15801562000ec3575060005460ff166001145b62000f285760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f4c576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff16156200100b5760405162461bcd60e51b8152600401620005539062002a24565b620010218a8a8a8a8a8a8a8a8a8a600062001e15565b620010328963ffffffff16620020a0565b6001600160a01b0385166200112757604080516000808252602082019092526001600160a01b0385169084906040516200106d919062002d9e565b60006040518083038185875af1925050503d8060008114620010ac576040519150601f19603f3d011682016040523d82523d6000602084013e620010b1565b606091505b5050905080620011205760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b5062001445565b60225463ffffffff6101009091048116908716036200115c57620011566001600160a01b0386168484620020e2565b62001445565b600086866040516020016200117392919062002cc4565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013ca57600080600085806020019051810190620011c5919062002df3565b925092509250600085848484604051620011df90620023d6565b620011ed9392919062002bbd565b8190604051809103906000f59050801580156200120e573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001263573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001289919062002a9b565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013b89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001442565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200141a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001440919062002a9b565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200147e95949392919062002dbc565b60405180910390a150505050505050505050565b600080620014a36101008462002d30565b90506000620014b56101008562002e69565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014ef92919062002cc4565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200152290620023d6565b601f1982820381018352601f9091011660408190526200154f908d908d908d908d908d9060200162002ea9565b60408051601f19818403018152908290526200156f929160200162002eea565b60405160208183030381529060405280519060200120604051602001620015c894939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620016145760405162461bcd60e51b8152600401620005539062002a24565b60225463ffffffff6101009091048116908416036200169c5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016f098979695949392919062002bfa565b60405180910390a162001727620009536001602260019054906101000a900463ffffffff1633878734888051906020012062000c53565b6026546001600160a01b03166333d6247d6200174262000a5e565b6040518263ffffffff1660e01b81526004016200176191815260200190565b600060405180830381600087803b1580156200177c57600080fd5b505af115801562001791573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017c75760405162461bcd60e51b8152600401620005539062002c67565b62000a0962002114565b60006200181483838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021c392505050565b9050632afa533160e01b6001600160e01b031982160162001a0d57600080808080808062001846896004818d62002f1d565b81019062001855919062002f49565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018975760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b0386163014620018c25760405162461bcd60e51b8152600401620005539062003001565b8a8514620019395760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620019b9919062002d9e565b6000604051808303816000865af19150503d8060008114620019f8576040519150601f19603f3d011682016040523d82523d6000602084013e620019fd565b606091505b5050505050505050505062001bf2565b6001600160e01b031981166323f2ebc360e21b1462001a835760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a9b8a6004818e62002f1d565b81019062001aaa919062003052565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001aee5760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b038716301462001b195760405162461bcd60e51b8152600401620005539062003001565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001ba2919062002d9e565b6000604051808303816000865af19150503d806000811462001be1576040519150601f19603f3d011682016040523d82523d6000602084013e62001be6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdf9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021ca565b80600162001c7760206002620031db565b62001c839190620031e9565b6021541062001ce85760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cfd919062003203565b909155505060215460005b602081101562001da7578160011660010362001d3d57826001826020811062001d355762001d3562002cee565b015550505050565b6001816020811062001d535762001d5362002cee565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d90919062002d30565b91508062001d9e8162002d47565b91505062001d08565b5062001db26200321e565b505050565b60225460ff161562001ddd5760405162461bcd60e51b8152600401620005539062002a24565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001e268a63ffffffff1662001492565b1562001e7d5760405162461bcd60e51b81526020600482015260306024820152600080516020620047bb83398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ef1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f17919062003234565b90508060000362001f805760405162461bcd60e51b81526020600482015260396024820152600080516020620047bb83398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff8781166101009092041614620020025760405162461bcd60e51b81526020600482015260436024820152600080516020620047bb83398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff166200202057508862002023565b50895b6200204e6200203f848b8b8b8b8b8b8051906020012062000c53565b8e8e63ffffffff168462000b51565b620009c35760405162461bcd60e51b815260206004820152602c6024820152600080516020620047bb83398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020b06101008362002d30565b90506000620020c26101008462002e69565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001db290849063a9059cbb60e01b9060640162001c2e565b60225460ff166200218e5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002221826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022a39092919063ffffffff16565b80519091501562001db2578080602001905181019062002242919062002a9b565b62001db25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c4b848460008585600080866001600160a01b03168587604051620022cd919062002d9e565b60006040518083038185875af1925050503d80600081146200230c576040519150601f19603f3d011682016040523d82523d6000602084013e62002311565b606091505b509150915062002324878383876200232f565b979650505050505050565b60608315620023a35782516000036200239b576001600160a01b0385163b6200239b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c4b565b62000c4b8383815115620023ba5781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200324e565b611557806200326483390190565b6001600160a01b0381168114620023fa57600080fd5b50565b80356200240a81620023e4565b919050565b803563ffffffff811681146200240a57600080fd5b60008083601f8401126200243757600080fd5b50813567ffffffffffffffff8111156200245057600080fd5b6020830191508360208285010111156200246957600080fd5b9250929050565b60008060008060008060a087890312156200248a57600080fd5b86356200249781620023e4565b9550620024a7602088016200240f565b94506040870135620024b981620023e4565b935060608701359250608087013567ffffffffffffffff811115620024dd57600080fd5b620024eb89828a0162002424565b979a9699509497509295939492505050565b600080604083850312156200251157600080fd5b6200251c836200240f565b915060208301356200252e81620023e4565b809150509250929050565b6000602082840312156200254c57600080fd5b81356200255981620023e4565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620025a257620025a262002560565b604052919050565b600082601f830112620025bc57600080fd5b8135602067ffffffffffffffff821115620025db57620025db62002560565b8160051b620025ec82820162002576565b92835284810182019282810190878511156200260757600080fd5b83870192505b8483101562002324578235825291830191908301906200260d565b600080600080608085870312156200263f57600080fd5b84359350602085013567ffffffffffffffff808211156200265f57600080fd5b6200266d88838901620025aa565b94506040870135915080821682146200268557600080fd5b509396929550929360600135925050565b60ff81168114620023fa57600080fd5b600080600080600080600060e0888a031215620026c257600080fd5b8735620026cf8162002696565b9650620026df602089016200240f565b95506040880135620026f181620023e4565b945062002701606089016200240f565b935060808801356200271381620023e4565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200274d576200274d62002560565b50601f01601f191660200190565b600082601f8301126200276d57600080fd5b8135620027846200277e8262002730565b62002576565b8181528460208386010111156200279a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027d857600080fd5b8a3567ffffffffffffffff80821115620027f157600080fd5b620027ff8e838f01620025aa565b9b506200280f60208e016200240f565b9a5060408d0135995060608d013598506200282d60808e016200240f565b97506200283d60a08e01620023fd565b96506200284d60c08e016200240f565b95506200285d60e08e01620023fd565b94506101008d013593506101208d01359150808211156200287d57600080fd5b506200288c8d828e016200275b565b9150509295989b9194979a5092959850565b600080600060608486031215620028b457600080fd5b620028bf846200240f565b92506020840135620028d181620023e4565b91506040840135620028e381620023e4565b809150509250925092565b6000602082840312156200290157600080fd5b5035919050565b600080600080600080600060a0888a0312156200292457600080fd5b6200292f886200240f565b965060208801356200294181620023e4565b9550604088013567ffffffffffffffff808211156200295f57600080fd5b6200296d8b838c0162002424565b909750955060608a01359150808211156200298757600080fd5b50620029968a828b0162002424565b9094509250506080880135620029ac8162002696565b8091505092959891949750929550565b600080600060608486031215620029d257600080fd5b620029dd846200240f565b92506020840135620029ef81620023e4565b9150604084013567ffffffffffffffff81111562002a0c57600080fd5b62002a1a868287016200275b565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b8015158114620023fa57600080fd5b60006020828403121562002aae57600080fd5b8151620025598162002a8c565b60005b8381101562002ad857818101518382015260200162002abe565b8381111562000fdf5750506000910152565b600082601f83011262002afc57600080fd5b815162002b0d6200277e8262002730565b81815284602083860101111562002b2357600080fd5b62000c4b82602083016020870162002abb565b60006020828403121562002b4957600080fd5b815167ffffffffffffffff81111562002b6157600080fd5b62000c4b8482850162002aea565b60006020828403121562002b8257600080fd5b8151620025598162002696565b6000815180845262002ba981602086016020860162002abb565b601f01601f19169290920160200192915050565b60608152600062002bd2606083018662002b8f565b828103602084015262002be6818662002b8f565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002c4e8483018762002b8f565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79506f6c79676f6e5a4b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002d425762002d4262002d04565b500490565b60006001820162002d5c5762002d5c62002d1a565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d959083018462002b8f565b95945050505050565b6000825162002db281846020870162002abb565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002e0957600080fd5b835167ffffffffffffffff8082111562002e2257600080fd5b62002e308783880162002aea565b9450602086015191508082111562002e4757600080fd5b5062002e568682870162002aea565b9250506040840151620028e38162002696565b60008262002e7b5762002e7b62002d04565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002ebf60608301878962002e80565b828103602084015262002ed481868862002e80565b91505060ff831660408301529695505050505050565b6000835162002efe81846020880162002abb565b83519083019062002f1481836020880162002abb565b01949350505050565b6000808585111562002f2e57600080fd5b8386111562002f3c57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f6557600080fd5b873562002f7281620023e4565b9650602088013562002f8481620023e4565b955060408801359450606088013593506080880135620027138162002696565b6020808252603c908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b0312156200307057600080fd5b88356200307d81620023e4565b975060208901356200308f81620023e4565b965060408901359550606089013594506080890135620030af8162002a8c565b935060a0890135620030c18162002696565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200311f57816000190482111562003103576200310362002d1a565b808516156200311157918102915b93841c9390800290620030e3565b509250929050565b600082620031385750600162000a58565b81620031475750600062000a58565b81600181146200316057600281146200316b576200318b565b600191505062000a58565b60ff8411156200317f576200317f62002d1a565b50506001821b62000a58565b5060208310610133831016604e8410600b8410161715620031b0575081810a62000a58565b620031bc8383620030de565b8060001904821115620031d357620031d362002d1a565b029392505050565b600062002559838362003127565b600082821015620031fe57620031fe62002d1a565b500390565b6000821982111562003219576200321962002d1a565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200324757600080fd5b5051919050565b60208152600062002559602083018462002b8f56fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b5d95b18e7873c0bee5e5a0f8ba7f856feaa9a4588dd711619c14728f42e00f64736f6c634300080f0033506f6c79676f6e5a4b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220fcf8ddcb3964637d52f5fd8d11d619010d6cb056aa6548a5de8c54508f2525ef64736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001675760003560e01c806381b1c17411620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b806381b1c17414620003735780638f61151914620003ad5780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b80633ae05047116200011e5780633ae0504714620002a25780633da8168214620002ba5780633e19704314620002df578063463855491462000304578063647c576c14620003295780637b6323c1146200034e57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002470565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009d2565b348015620001db57600080fd5b50620001f3620001ed366004620024fd565b62000a0b565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002539565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b506200022462000a5e565b348015620002c757600080fd5b50620001a1620002d936600462002628565b62000b51565b348015620002ec57600080fd5b5062000224620002fe366004620026a6565b62000c53565b3480156200031157600080fd5b506200018362000323366004620027b7565b62000ce0565b3480156200033657600080fd5b5062000183620003483660046200289e565b62000e86565b3480156200035b57600080fd5b50620001836200036d366004620027b7565b62000fe5565b3480156200038057600080fd5b50620001f362000392366004620028ee565b6024602052600090815260409020546001600160a01b031681565b348015620003ba57600080fd5b50602754620001f3906001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028ee565b62001492565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002908565b620014d7565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620029bc565b620015ee565b348015620004c357600080fd5b50620001836200179a565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028ee565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a24565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008ec565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074957604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562000710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000736919062002a9b565b50602081015181519094509250620008ea565b84156200075e576200075e8a888888620017d1565b620007756001600160a01b038b1633308a62001bf9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f6919081019062002b36565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000835573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085f919081019062002b36565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c4919062002b6f565b604051602001620008d89392919062002bbd565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092e98979695949392919062002bfa565b60405180910390a16200095962000953600084868c8c8c888051906020012062000c53565b62001c66565b6026546001600160a01b03166333d6247d6200097462000a5e565b6040518263ffffffff1660e01b81526004016200099391815260200190565b600060405180830381600087803b158015620009ae57600080fd5b505af1158015620009c3573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ff5760405162461bcd60e51b8152600401620005539062002c67565b62000a0962001db7565b565b600060246000848460405160200162000a2692919062002cc4565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b48578260011660010362000ac9576001816020811062000a955762000a9562002cee565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af6565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0360028462002d30565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3f9062002d47565b91505062000a69565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c44578160011660010362000bce5786818151811062000b8c5762000b8c62002cee565b60200260200101518360405160200162000bb0929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c20565b8287828151811062000be45762000be462002cee565b602002602001015160405160200162000c07929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2d60028362002d30565b91508062000c3b8162002d47565b91505062000b61565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d065760405162461bcd60e51b8152600401620005539062002a24565b62000d1c8a8a8a8a8a8a8a8a8a8a600162001e15565b62000d2d8963ffffffff16620020a0565b6000836001600160a01b03168387898560405160240162000d519392919062002d63565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d88919062002d9e565b60006040518083038185875af1925050503d806000811462000dc7576040519150601f19603f3d011682016040523d82523d6000602084013e62000dcc565b606091505b505090508062000e385760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e7195949392919062002dbc565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea75750600054600160ff909116105b8062000ec35750303b15801562000ec3575060005460ff166001145b62000f285760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f4c576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff16156200100b5760405162461bcd60e51b8152600401620005539062002a24565b620010218a8a8a8a8a8a8a8a8a8a600062001e15565b620010328963ffffffff16620020a0565b6001600160a01b0385166200112757604080516000808252602082019092526001600160a01b0385169084906040516200106d919062002d9e565b60006040518083038185875af1925050503d8060008114620010ac576040519150601f19603f3d011682016040523d82523d6000602084013e620010b1565b606091505b5050905080620011205760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b5062001445565b60225463ffffffff6101009091048116908716036200115c57620011566001600160a01b0386168484620020e2565b62001445565b600086866040516020016200117392919062002cc4565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013ca57600080600085806020019051810190620011c5919062002df3565b925092509250600085848484604051620011df90620023d6565b620011ed9392919062002bbd565b8190604051809103906000f59050801580156200120e573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001263573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001289919062002a9b565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013b89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001442565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200141a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001440919062002a9b565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200147e95949392919062002dbc565b60405180910390a150505050505050505050565b600080620014a36101008462002d30565b90506000620014b56101008562002e69565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014ef92919062002cc4565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200152290620023d6565b601f1982820381018352601f9091011660408190526200154f908d908d908d908d908d9060200162002ea9565b60408051601f19818403018152908290526200156f929160200162002eea565b60405160208183030381529060405280519060200120604051602001620015c894939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620016145760405162461bcd60e51b8152600401620005539062002a24565b60225463ffffffff6101009091048116908416036200169c5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016f098979695949392919062002bfa565b60405180910390a162001727620009536001602260019054906101000a900463ffffffff1633878734888051906020012062000c53565b6026546001600160a01b03166333d6247d6200174262000a5e565b6040518263ffffffff1660e01b81526004016200176191815260200190565b600060405180830381600087803b1580156200177c57600080fd5b505af115801562001791573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017c75760405162461bcd60e51b8152600401620005539062002c67565b62000a0962002114565b60006200181483838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021c392505050565b9050632afa533160e01b6001600160e01b031982160162001a0d57600080808080808062001846896004818d62002f1d565b81019062001855919062002f49565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018975760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b0386163014620018c25760405162461bcd60e51b8152600401620005539062003001565b8a8514620019395760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620019b9919062002d9e565b6000604051808303816000865af19150503d8060008114620019f8576040519150601f19603f3d011682016040523d82523d6000602084013e620019fd565b606091505b5050505050505050505062001bf2565b6001600160e01b031981166323f2ebc360e21b1462001a835760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a9b8a6004818e62002f1d565b81019062001aaa919062003052565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001aee5760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b038716301462001b195760405162461bcd60e51b8152600401620005539062003001565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001ba2919062002d9e565b6000604051808303816000865af19150503d806000811462001be1576040519150601f19603f3d011682016040523d82523d6000602084013e62001be6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdf9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021ca565b80600162001c7760206002620031db565b62001c839190620031e9565b6021541062001ce85760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cfd919062003203565b909155505060215460005b602081101562001da7578160011660010362001d3d57826001826020811062001d355762001d3562002cee565b015550505050565b6001816020811062001d535762001d5362002cee565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d90919062002d30565b91508062001d9e8162002d47565b91505062001d08565b5062001db26200321e565b505050565b60225460ff161562001ddd5760405162461bcd60e51b8152600401620005539062002a24565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001e268a63ffffffff1662001492565b1562001e7d5760405162461bcd60e51b81526020600482015260306024820152600080516020620047bb83398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ef1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f17919062003234565b90508060000362001f805760405162461bcd60e51b81526020600482015260396024820152600080516020620047bb83398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff8781166101009092041614620020025760405162461bcd60e51b81526020600482015260436024820152600080516020620047bb83398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff166200202057508862002023565b50895b6200204e6200203f848b8b8b8b8b8b8051906020012062000c53565b8e8e63ffffffff168462000b51565b620009c35760405162461bcd60e51b815260206004820152602c6024820152600080516020620047bb83398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020b06101008362002d30565b90506000620020c26101008462002e69565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001db290849063a9059cbb60e01b9060640162001c2e565b60225460ff166200218e5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002221826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022a39092919063ffffffff16565b80519091501562001db2578080602001905181019062002242919062002a9b565b62001db25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c4b848460008585600080866001600160a01b03168587604051620022cd919062002d9e565b60006040518083038185875af1925050503d80600081146200230c576040519150601f19603f3d011682016040523d82523d6000602084013e62002311565b606091505b509150915062002324878383876200232f565b979650505050505050565b60608315620023a35782516000036200239b576001600160a01b0385163b6200239b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c4b565b62000c4b8383815115620023ba5781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200324e565b611557806200326483390190565b6001600160a01b0381168114620023fa57600080fd5b50565b80356200240a81620023e4565b919050565b803563ffffffff811681146200240a57600080fd5b60008083601f8401126200243757600080fd5b50813567ffffffffffffffff8111156200245057600080fd5b6020830191508360208285010111156200246957600080fd5b9250929050565b60008060008060008060a087890312156200248a57600080fd5b86356200249781620023e4565b9550620024a7602088016200240f565b94506040870135620024b981620023e4565b935060608701359250608087013567ffffffffffffffff811115620024dd57600080fd5b620024eb89828a0162002424565b979a9699509497509295939492505050565b600080604083850312156200251157600080fd5b6200251c836200240f565b915060208301356200252e81620023e4565b809150509250929050565b6000602082840312156200254c57600080fd5b81356200255981620023e4565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620025a257620025a262002560565b604052919050565b600082601f830112620025bc57600080fd5b8135602067ffffffffffffffff821115620025db57620025db62002560565b8160051b620025ec82820162002576565b92835284810182019282810190878511156200260757600080fd5b83870192505b8483101562002324578235825291830191908301906200260d565b600080600080608085870312156200263f57600080fd5b84359350602085013567ffffffffffffffff808211156200265f57600080fd5b6200266d88838901620025aa565b94506040870135915080821682146200268557600080fd5b509396929550929360600135925050565b60ff81168114620023fa57600080fd5b600080600080600080600060e0888a031215620026c257600080fd5b8735620026cf8162002696565b9650620026df602089016200240f565b95506040880135620026f181620023e4565b945062002701606089016200240f565b935060808801356200271381620023e4565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200274d576200274d62002560565b50601f01601f191660200190565b600082601f8301126200276d57600080fd5b8135620027846200277e8262002730565b62002576565b8181528460208386010111156200279a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027d857600080fd5b8a3567ffffffffffffffff80821115620027f157600080fd5b620027ff8e838f01620025aa565b9b506200280f60208e016200240f565b9a5060408d0135995060608d013598506200282d60808e016200240f565b97506200283d60a08e01620023fd565b96506200284d60c08e016200240f565b95506200285d60e08e01620023fd565b94506101008d013593506101208d01359150808211156200287d57600080fd5b506200288c8d828e016200275b565b9150509295989b9194979a5092959850565b600080600060608486031215620028b457600080fd5b620028bf846200240f565b92506020840135620028d181620023e4565b91506040840135620028e381620023e4565b809150509250925092565b6000602082840312156200290157600080fd5b5035919050565b600080600080600080600060a0888a0312156200292457600080fd5b6200292f886200240f565b965060208801356200294181620023e4565b9550604088013567ffffffffffffffff808211156200295f57600080fd5b6200296d8b838c0162002424565b909750955060608a01359150808211156200298757600080fd5b50620029968a828b0162002424565b9094509250506080880135620029ac8162002696565b8091505092959891949750929550565b600080600060608486031215620029d257600080fd5b620029dd846200240f565b92506020840135620029ef81620023e4565b9150604084013567ffffffffffffffff81111562002a0c57600080fd5b62002a1a868287016200275b565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b8015158114620023fa57600080fd5b60006020828403121562002aae57600080fd5b8151620025598162002a8c565b60005b8381101562002ad857818101518382015260200162002abe565b8381111562000fdf5750506000910152565b600082601f83011262002afc57600080fd5b815162002b0d6200277e8262002730565b81815284602083860101111562002b2357600080fd5b62000c4b82602083016020870162002abb565b60006020828403121562002b4957600080fd5b815167ffffffffffffffff81111562002b6157600080fd5b62000c4b8482850162002aea565b60006020828403121562002b8257600080fd5b8151620025598162002696565b6000815180845262002ba981602086016020860162002abb565b601f01601f19169290920160200192915050565b60608152600062002bd2606083018662002b8f565b828103602084015262002be6818662002b8f565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002c4e8483018762002b8f565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79506f6c79676f6e5a4b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002d425762002d4262002d04565b500490565b60006001820162002d5c5762002d5c62002d1a565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d959083018462002b8f565b95945050505050565b6000825162002db281846020870162002abb565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002e0957600080fd5b835167ffffffffffffffff8082111562002e2257600080fd5b62002e308783880162002aea565b9450602086015191508082111562002e4757600080fd5b5062002e568682870162002aea565b9250506040840151620028e38162002696565b60008262002e7b5762002e7b62002d04565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002ebf60608301878962002e80565b828103602084015262002ed481868862002e80565b91505060ff831660408301529695505050505050565b6000835162002efe81846020880162002abb565b83519083019062002f1481836020880162002abb565b01949350505050565b6000808585111562002f2e57600080fd5b8386111562002f3c57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f6557600080fd5b873562002f7281620023e4565b9650602088013562002f8481620023e4565b955060408801359450606088013593506080880135620027138162002696565b6020808252603c908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b0312156200307057600080fd5b88356200307d81620023e4565b975060208901356200308f81620023e4565b965060408901359550606089013594506080890135620030af8162002a8c565b935060a0890135620030c18162002696565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200311f57816000190482111562003103576200310362002d1a565b808516156200311157918102915b93841c9390800290620030e3565b509250929050565b600082620031385750600162000a58565b81620031475750600062000a58565b81600181146200316057600281146200316b576200318b565b600191505062000a58565b60ff8411156200317f576200317f62002d1a565b50506001821b62000a58565b5060208310610133831016604e8410600b8410161715620031b0575081810a62000a58565b620031bc8383620030de565b8060001904821115620031d357620031d362002d1a565b029392505050565b600062002559838362003127565b600082821015620031fe57620031fe62002d1a565b500390565b6000821982111562003219576200321962002d1a565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200324757600080fd5b5051919050565b60208152600062002559602083018462002b8f56fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b5d95b18e7873c0bee5e5a0f8ba7f856feaa9a4588dd711619c14728f42e00f64736f6c634300080f0033506f6c79676f6e5a4b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220fcf8ddcb3964637d52f5fd8d11d619010d6cb056aa6548a5de8c54508f2525ef64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZKEVMBridgeMock.json b/compiled-contracts/PolygonZKEVMBridgeMock.json index 7d7b8c32a..22b109ffb 100644 --- a/compiled-contracts/PolygonZKEVMBridgeMock.json +++ b/compiled-contracts/PolygonZKEVMBridgeMock.json @@ -512,7 +512,7 @@ "name": "globalExitRootManager", "outputs": [ { - "internalType": "contract IGlobalExitRootManager", + "internalType": "contract IPolygonZKEVMGlobalExitRoot", "name": "", "type": "address" } @@ -528,7 +528,7 @@ "type": "uint32" }, { - "internalType": "contract IGlobalExitRootManager", + "internalType": "contract IPolygonZKEVMGlobalExitRoot", "name": "_globalExitRootManager", "type": "address" }, @@ -790,8 +790,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50614c1a806100206000396000f3fe608060405260043610620001f35760003560e01c806381b1c174116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b806381b1c17414620004615780638da5cb5b146200049b5780638f61151914620004bb57600080fd5b8063318aee3d116200018d5780634638554911620001585780634638554914620003da578063647c576c14620003ff578063715018a614620004245780637b6323c1146200043c57600080fd5b8063318aee3d14620003095780633ae0504714620003785780633da8168214620003905780633e19704314620003b557600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f620002093660046200285c565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f6200071e565b3480156200026757600080fd5b506200027f62000279366004620028e9565b62000757565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002925565b620007aa565b348015620002ca57600080fd5b506200020f620002dc3660046200293f565b620007b9565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002964565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b50620002fa620007e5565b3480156200039d57600080fd5b506200022d620003af36600462002a4c565b620008d8565b348015620003c257600080fd5b50620002fa620003d436600462002aca565b620009da565b348015620003e757600080fd5b506200020f620003f936600462002bdb565b62000a67565b3480156200040c57600080fd5b506200020f6200041e36600462002cc2565b62000c0d565b3480156200043157600080fd5b506200020f62000d82565b3480156200044957600080fd5b506200020f6200045b36600462002bdb565b62000d98565b3480156200046e57600080fd5b506200027f6200048036600462002925565b6024602052600090815260409020546001600160a01b031681565b348015620004a857600080fd5b50605a546001600160a01b03166200027f565b348015620004c857600080fd5b506027546200027f906001600160a01b031681565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002925565b62001245565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002d12565b6200128a565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002dc6565b620013a1565b348015620005e957600080fd5b506200020f62001553565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002925565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002964565b6200158a565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007065760405162461bcd60e51b815260206004820152604760248201527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b6200071686868686868662001609565b505050505050565b6027546001600160a01b031633146200074b5760405162461bcd60e51b8152600401620006fd9062002e2e565b6200075562001a9f565b565b60006024600084846040516020016200077292919062002e8b565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b462001afd565b608c55565b620007c362001afd565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008cf57826001166001036200085057600181602081106200081c576200081c62002eb5565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200087d565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088a60028462002ef7565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c69062002f0e565b915050620007f0565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009cb5781600116600103620009555786818151811062000913576200091362002eb5565b60200260200101518360405160200162000937929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009a7565b828782815181106200096b576200096b62002eb5565b60200260200101516040516020016200098e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b460028362002ef7565b915080620009c28162002f0e565b915050620008e8565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a8d5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000aa38a8a8a8a8a8a8a8a8a8a600162001b59565b62000ab48963ffffffff1662001de4565b6000836001600160a01b03168387898560405160240162000ad89392919062002fef565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b0f91906200302a565b60006040518083038185875af1925050503d806000811462000b4e576040519150601f19603f3d011682016040523d82523d6000602084013e62000b53565b606091505b505090508062000bbf5760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b6064820152608401620006fd565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bf895949392919062003048565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c2e5750600054600160ff909116105b8062000c4a5750303b15801562000c4a575060005460ff166001145b62000caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006fd565b6000805460ff19166001179055801562000cd3576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d3562001e26565b801562000d7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8c62001afd565b62000755600062001e99565b60225460ff161562000dbe5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000dd48a8a8a8a8a8a8a8a8a8a600062001b59565b62000de58963ffffffff1662001de4565b6001600160a01b03851662000eda57604080516000808252602082019092526001600160a01b03851690849060405162000e2091906200302a565b60006040518083038185875af1925050503d806000811462000e5f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e64565b606091505b505090508062000ed35760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b6064820152608401620006fd565b50620011f8565b60225463ffffffff61010090910481169087160362000f0f5762000f096001600160a01b038616848462001eeb565b620011f8565b6000868660405160200162000f2692919062002e8b565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200117d5760008060008580602001905181019062000f789190620030cb565b92509250925060008584848460405162000f9290620027c5565b62000fa09392919062003141565b8190604051809103906000f590508015801562000fc1573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001016573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200103c91906200318d565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200116b9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011f5565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620011cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011f391906200318d565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200123195949392919062003048565b60405180910390a150505050505050505050565b600080620012566101008462002ef7565b905060006200126861010085620031ad565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620012a292919062002e8b565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012d590620027c5565b601f1982820381018352601f90910116604081905262001302908d908d908d908d908d90602001620031ed565b60408051601f19818403018152908290526200132292916020016200322e565b604051602081830303815290604052805190602001206040516020016200137b94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013c75760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff6101009091048116908416036200144f5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c460000006064820152608401620006fd565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620014a398979695949392919062003261565b60405180910390a1620014e0620014da6001602260019054906101000a900463ffffffff16338787348880519060200120620009da565b62001f55565b6026546001600160a01b03166333d6247d620014fb620007e5565b6040518263ffffffff1660e01b81526004016200151a91815260200190565b600060405180830381600087803b1580156200153557600080fd5b505af11580156200154a573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015805760405162461bcd60e51b8152600401620006fd9062002e2e565b62000755620020a1565b6200159462001afd565b6001600160a01b038116620015fb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006fd565b620016068162001e99565b50565b60225460ff16156200162f5760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff610100909104811690861603620016b75760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c4600000000006064820152608401620006fd565b60008060606001600160a01b0389166200174e5785341462001744576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c55456064820152608401620006fd565b60009150620019bf565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200181c57604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af1158015620017e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200180991906200318d565b50602081015181519094509250620019bd565b84156200183157620018318a88888862002150565b620018486001600160a01b038b1633308a62002578565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200189f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018c99190810190620032ce565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001908573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620019329190810190620032ce565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001971573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001997919062003307565b604051602001620019ab9392919062003141565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162001a0198979695949392919062003261565b60405180910390a162001a26620014da600084868c8c8c8880519060200120620009da565b6026546001600160a01b03166333d6247d62001a41620007e5565b6040518263ffffffff1660e01b815260040162001a6091815260200190565b600060405180830381600087803b15801562001a7b57600080fd5b505af115801562001a90573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001ac55760405162461bcd60e51b8152600401620006fd9062002f2a565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006fd565b62001b6a8a63ffffffff1662001245565b1562001bc15760405162461bcd60e51b8152602060048201526030602482015260008051602062004bc583398151915260448201526f081053149150511657d0d3105253515160821b6064820152608401620006fd565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001c35573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c5b919062003327565b90508060000362001cc45760405162461bcd60e51b8152602060048201526039602482015260008051602062004bc583398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c4944000000000000006064820152608401620006fd565b60225463ffffffff878116610100909204161462001d465760405162461bcd60e51b8152602060048201526043602482015260008051602062004bc583398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a401620006fd565b602254600090610100900463ffffffff1662001d6457508862001d67565b50895b62001d9262001d83848b8b8b8b8b8b80519060200120620009da565b8e8e63ffffffff1684620008d8565b62001a905760405162461bcd60e51b815260206004820152602c602482015260008051602062004bc583398151915260448201526b0814d35517d253959053125160a21b6064820152608401620006fd565b600062001df46101008362002ef7565b9050600062001e0661010084620031ad565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001e935760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006fd565b62000755335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001f5090849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620025b2565b505050565b80600162001f66602060026200343e565b62001f7291906200344c565b6021541062001fd75760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b6064820152608401620006fd565b60016021600082825462001fec919062003466565b909155505060215460005b60208110156200209657816001166001036200202c57826001826020811062002024576200202462002eb5565b015550505050565b6001816020811062002042576200204262002eb5565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200207f919062002ef7565b9150806200208d8162002f0e565b91505062001ff7565b5062001f5062003481565b60225460ff166200211b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006fd565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200219383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200268b92505050565b9050632afa533160e01b6001600160e01b03198216016200238c576000808080808080620021c5896004818d62003497565b810190620021d49190620034c3565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620022165760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0386163014620022415760405162461bcd60e51b8152600401620006fd906200357b565b8a8514620022b85760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d41544348000000000000006064820152608401620006fd565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200233891906200302a565b6000604051808303816000865af19150503d806000811462002377576040519150601f19603f3d011682016040523d82523d6000602084013e6200237c565b606091505b5050505050505050505062002571565b6001600160e01b031981166323f2ebc360e21b14620024025760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b6064820152608401620006fd565b6000808080808080806200241a8a6004818e62003497565b810190620024299190620035cc565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200246d5760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0387163014620024985760405162461bcd60e51b8152600401620006fd906200357b565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f16916200252191906200302a565b6000604051808303816000865af19150503d806000811462002560576040519150601f19603f3d011682016040523d82523d6000602084013e62002565565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d7c9085906323b872dd60e01b9060840162001f18565b600062002609826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620026929092919063ffffffff16565b80519091501562001f5057808060200190518101906200262a91906200318d565b62001f505760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006fd565b6020015190565b6060620009d2848460008585600080866001600160a01b03168587604051620026bc91906200302a565b60006040518083038185875af1925050503d8060008114620026fb576040519150601f19603f3d011682016040523d82523d6000602084013e62002700565b606091505b509150915062002713878383876200271e565b979650505050505050565b60608315620027925782516000036200278a576001600160a01b0385163b6200278a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006fd565b5081620009d2565b620009d28383815115620027a95781518083602001fd5b8060405162461bcd60e51b8152600401620006fd919062003658565b611557806200366e83390190565b6001600160a01b03811681146200160657600080fd5b8035620027f681620027d3565b919050565b803563ffffffff81168114620027f657600080fd5b60008083601f8401126200282357600080fd5b50813567ffffffffffffffff8111156200283c57600080fd5b6020830191508360208285010111156200285557600080fd5b9250929050565b60008060008060008060a087890312156200287657600080fd5b86356200288381620027d3565b95506200289360208801620027fb565b94506040870135620028a581620027d3565b935060608701359250608087013567ffffffffffffffff811115620028c957600080fd5b620028d789828a0162002810565b979a9699509497509295939492505050565b60008060408385031215620028fd57600080fd5b6200290883620027fb565b915060208301356200291a81620027d3565b809150509250929050565b6000602082840312156200293857600080fd5b5035919050565b6000602082840312156200295257600080fd5b6200295d82620027fb565b9392505050565b6000602082840312156200297757600080fd5b81356200295d81620027d3565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620029c657620029c662002984565b604052919050565b600082601f830112620029e057600080fd5b8135602067ffffffffffffffff821115620029ff57620029ff62002984565b8160051b62002a108282016200299a565b928352848101820192828101908785111562002a2b57600080fd5b83870192505b84831015620027135782358252918301919083019062002a31565b6000806000806080858703121562002a6357600080fd5b84359350602085013567ffffffffffffffff8082111562002a8357600080fd5b62002a9188838901620029ce565b945060408701359150808216821462002aa957600080fd5b509396929550929360600135925050565b60ff811681146200160657600080fd5b600080600080600080600060e0888a03121562002ae657600080fd5b873562002af38162002aba565b965062002b0360208901620027fb565b9550604088013562002b1581620027d3565b945062002b2560608901620027fb565b9350608088013562002b3781620027d3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002b715762002b7162002984565b50601f01601f191660200190565b600082601f83011262002b9157600080fd5b813562002ba862002ba28262002b54565b6200299a565b81815284602083860101111562002bbe57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002bfc57600080fd5b8a3567ffffffffffffffff8082111562002c1557600080fd5b62002c238e838f01620029ce565b9b5062002c3360208e01620027fb565b9a5060408d0135995060608d0135985062002c5160808e01620027fb565b975062002c6160a08e01620027e9565b965062002c7160c08e01620027fb565b955062002c8160e08e01620027e9565b94506101008d013593506101208d013591508082111562002ca157600080fd5b5062002cb08d828e0162002b7f565b9150509295989b9194979a5092959850565b60008060006060848603121562002cd857600080fd5b62002ce384620027fb565b9250602084013562002cf581620027d3565b9150604084013562002d0781620027d3565b809150509250925092565b600080600080600080600060a0888a03121562002d2e57600080fd5b62002d3988620027fb565b9650602088013562002d4b81620027d3565b9550604088013567ffffffffffffffff8082111562002d6957600080fd5b62002d778b838c0162002810565b909750955060608a013591508082111562002d9157600080fd5b5062002da08a828b0162002810565b909450925050608088013562002db68162002aba565b8091505092959891949750929550565b60008060006060848603121562002ddc57600080fd5b62002de784620027fb565b9250602084013562002df981620027d3565b9150604084013567ffffffffffffffff81111562002e1657600080fd5b62002e248682870162002b7f565b9150509250925092565b6020808252603d908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79506f6c79676f6e5a4b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002f095762002f0962002ecb565b500490565b60006001820162002f235762002f2362002ee1565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002faf57818101518382015260200162002f95565b8381111562000d7c5750506000910152565b6000815180845262002fdb81602086016020860162002f92565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff83166020820152606060408201819052600090620030219083018462002fc1565b95945050505050565b600082516200303e81846020870162002f92565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f8301126200309157600080fd5b8151620030a262002ba28262002b54565b818152846020838601011115620030b857600080fd5b620009d282602083016020870162002f92565b600080600060608486031215620030e157600080fd5b835167ffffffffffffffff80821115620030fa57600080fd5b62003108878388016200307f565b945060208601519150808211156200311f57600080fd5b506200312e868287016200307f565b925050604084015162002d078162002aba565b60608152600062003156606083018662002fc1565b82810360208401526200316a818662002fc1565b91505060ff83166040830152949350505050565b80151581146200160657600080fd5b600060208284031215620031a057600080fd5b81516200295d816200317e565b600082620031bf57620031bf62002ecb565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003203606083018789620031c4565b828103602084015262003218818688620031c4565b91505060ff831660408301529695505050505050565b600083516200324281846020880162002f92565b8351908301906200325881836020880162002f92565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032b58483018762002fc1565b925080851660e085015250509998505050505050505050565b600060208284031215620032e157600080fd5b815167ffffffffffffffff811115620032f957600080fd5b620009d2848285016200307f565b6000602082840312156200331a57600080fd5b81516200295d8162002aba565b6000602082840312156200333a57600080fd5b5051919050565b600181815b808511156200338257816000190482111562003366576200336662002ee1565b808516156200337457918102915b93841c939080029062003346565b509250929050565b6000826200339b57506001620007a4565b81620033aa57506000620007a4565b8160018114620033c35760028114620033ce57620033ee565b6001915050620007a4565b60ff841115620033e257620033e262002ee1565b50506001821b620007a4565b5060208310610133831016604e8410600b841016171562003413575081810a620007a4565b6200341f838362003341565b806000190482111562003436576200343662002ee1565b029392505050565b60006200295d83836200338a565b60008282101562003461576200346162002ee1565b500390565b600082198211156200347c576200347c62002ee1565b500190565b634e487b7160e01b600052600160045260246000fd5b60008085851115620034a857600080fd5b83861115620034b657600080fd5b5050820193919092039150565b600080600080600080600060e0888a031215620034df57600080fd5b8735620034ec81620027d3565b96506020880135620034fe81620027d3565b95506040880135945060608801359350608088013562002b378162002aba565b6020808252603c908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b031215620035ea57600080fd5b8835620035f781620027d3565b975060208901356200360981620027d3565b96506040890135955060608901359450608089013562003629816200317e565b935060a08901356200363b8162002aba565b979a969950949793969295929450505060c08201359160e0013590565b6020815260006200295d602083018462002fc156fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b5d95b18e7873c0bee5e5a0f8ba7f856feaa9a4588dd711619c14728f42e00f64736f6c634300080f0033506f6c79676f6e5a4b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212206ec7e43691f361491ee442d1fd15e0d82b13a9ad35949d811f74af9b2582621764736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001f35760003560e01c806381b1c174116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b806381b1c17414620004615780638da5cb5b146200049b5780638f61151914620004bb57600080fd5b8063318aee3d116200018d5780634638554911620001585780634638554914620003da578063647c576c14620003ff578063715018a614620004245780637b6323c1146200043c57600080fd5b8063318aee3d14620003095780633ae0504714620003785780633da8168214620003905780633e19704314620003b557600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f620002093660046200285c565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f6200071e565b3480156200026757600080fd5b506200027f62000279366004620028e9565b62000757565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002925565b620007aa565b348015620002ca57600080fd5b506200020f620002dc3660046200293f565b620007b9565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002964565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b50620002fa620007e5565b3480156200039d57600080fd5b506200022d620003af36600462002a4c565b620008d8565b348015620003c257600080fd5b50620002fa620003d436600462002aca565b620009da565b348015620003e757600080fd5b506200020f620003f936600462002bdb565b62000a67565b3480156200040c57600080fd5b506200020f6200041e36600462002cc2565b62000c0d565b3480156200043157600080fd5b506200020f62000d82565b3480156200044957600080fd5b506200020f6200045b36600462002bdb565b62000d98565b3480156200046e57600080fd5b506200027f6200048036600462002925565b6024602052600090815260409020546001600160a01b031681565b348015620004a857600080fd5b50605a546001600160a01b03166200027f565b348015620004c857600080fd5b506027546200027f906001600160a01b031681565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002925565b62001245565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002d12565b6200128a565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002dc6565b620013a1565b348015620005e957600080fd5b506200020f62001553565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002925565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002964565b6200158a565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007065760405162461bcd60e51b815260206004820152604760248201527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b6200071686868686868662001609565b505050505050565b6027546001600160a01b031633146200074b5760405162461bcd60e51b8152600401620006fd9062002e2e565b6200075562001a9f565b565b60006024600084846040516020016200077292919062002e8b565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b462001afd565b608c55565b620007c362001afd565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008cf57826001166001036200085057600181602081106200081c576200081c62002eb5565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200087d565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088a60028462002ef7565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c69062002f0e565b915050620007f0565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009cb5781600116600103620009555786818151811062000913576200091362002eb5565b60200260200101518360405160200162000937929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009a7565b828782815181106200096b576200096b62002eb5565b60200260200101516040516020016200098e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b460028362002ef7565b915080620009c28162002f0e565b915050620008e8565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a8d5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000aa38a8a8a8a8a8a8a8a8a8a600162001b59565b62000ab48963ffffffff1662001de4565b6000836001600160a01b03168387898560405160240162000ad89392919062002fef565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b0f91906200302a565b60006040518083038185875af1925050503d806000811462000b4e576040519150601f19603f3d011682016040523d82523d6000602084013e62000b53565b606091505b505090508062000bbf5760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b6064820152608401620006fd565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bf895949392919062003048565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c2e5750600054600160ff909116105b8062000c4a5750303b15801562000c4a575060005460ff166001145b62000caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006fd565b6000805460ff19166001179055801562000cd3576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d3562001e26565b801562000d7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8c62001afd565b62000755600062001e99565b60225460ff161562000dbe5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000dd48a8a8a8a8a8a8a8a8a8a600062001b59565b62000de58963ffffffff1662001de4565b6001600160a01b03851662000eda57604080516000808252602082019092526001600160a01b03851690849060405162000e2091906200302a565b60006040518083038185875af1925050503d806000811462000e5f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e64565b606091505b505090508062000ed35760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b6064820152608401620006fd565b50620011f8565b60225463ffffffff61010090910481169087160362000f0f5762000f096001600160a01b038616848462001eeb565b620011f8565b6000868660405160200162000f2692919062002e8b565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200117d5760008060008580602001905181019062000f789190620030cb565b92509250925060008584848460405162000f9290620027c5565b62000fa09392919062003141565b8190604051809103906000f590508015801562000fc1573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001016573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200103c91906200318d565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200116b9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011f5565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620011cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011f391906200318d565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200123195949392919062003048565b60405180910390a150505050505050505050565b600080620012566101008462002ef7565b905060006200126861010085620031ad565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620012a292919062002e8b565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012d590620027c5565b601f1982820381018352601f90910116604081905262001302908d908d908d908d908d90602001620031ed565b60408051601f19818403018152908290526200132292916020016200322e565b604051602081830303815290604052805190602001206040516020016200137b94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013c75760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff6101009091048116908416036200144f5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c460000006064820152608401620006fd565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620014a398979695949392919062003261565b60405180910390a1620014e0620014da6001602260019054906101000a900463ffffffff16338787348880519060200120620009da565b62001f55565b6026546001600160a01b03166333d6247d620014fb620007e5565b6040518263ffffffff1660e01b81526004016200151a91815260200190565b600060405180830381600087803b1580156200153557600080fd5b505af11580156200154a573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015805760405162461bcd60e51b8152600401620006fd9062002e2e565b62000755620020a1565b6200159462001afd565b6001600160a01b038116620015fb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006fd565b620016068162001e99565b50565b60225460ff16156200162f5760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff610100909104811690861603620016b75760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c4600000000006064820152608401620006fd565b60008060606001600160a01b0389166200174e5785341462001744576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c55456064820152608401620006fd565b60009150620019bf565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200181c57604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af1158015620017e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200180991906200318d565b50602081015181519094509250620019bd565b84156200183157620018318a88888862002150565b620018486001600160a01b038b1633308a62002578565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200189f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018c99190810190620032ce565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001908573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620019329190810190620032ce565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001971573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001997919062003307565b604051602001620019ab9392919062003141565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162001a0198979695949392919062003261565b60405180910390a162001a26620014da600084868c8c8c8880519060200120620009da565b6026546001600160a01b03166333d6247d62001a41620007e5565b6040518263ffffffff1660e01b815260040162001a6091815260200190565b600060405180830381600087803b15801562001a7b57600080fd5b505af115801562001a90573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001ac55760405162461bcd60e51b8152600401620006fd9062002f2a565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006fd565b62001b6a8a63ffffffff1662001245565b1562001bc15760405162461bcd60e51b8152602060048201526030602482015260008051602062004bc583398151915260448201526f081053149150511657d0d3105253515160821b6064820152608401620006fd565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001c35573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c5b919062003327565b90508060000362001cc45760405162461bcd60e51b8152602060048201526039602482015260008051602062004bc583398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c4944000000000000006064820152608401620006fd565b60225463ffffffff878116610100909204161462001d465760405162461bcd60e51b8152602060048201526043602482015260008051602062004bc583398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a401620006fd565b602254600090610100900463ffffffff1662001d6457508862001d67565b50895b62001d9262001d83848b8b8b8b8b8b80519060200120620009da565b8e8e63ffffffff1684620008d8565b62001a905760405162461bcd60e51b815260206004820152602c602482015260008051602062004bc583398151915260448201526b0814d35517d253959053125160a21b6064820152608401620006fd565b600062001df46101008362002ef7565b9050600062001e0661010084620031ad565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001e935760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006fd565b62000755335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001f5090849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620025b2565b505050565b80600162001f66602060026200343e565b62001f7291906200344c565b6021541062001fd75760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b6064820152608401620006fd565b60016021600082825462001fec919062003466565b909155505060215460005b60208110156200209657816001166001036200202c57826001826020811062002024576200202462002eb5565b015550505050565b6001816020811062002042576200204262002eb5565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200207f919062002ef7565b9150806200208d8162002f0e565b91505062001ff7565b5062001f5062003481565b60225460ff166200211b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006fd565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200219383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200268b92505050565b9050632afa533160e01b6001600160e01b03198216016200238c576000808080808080620021c5896004818d62003497565b810190620021d49190620034c3565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620022165760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0386163014620022415760405162461bcd60e51b8152600401620006fd906200357b565b8a8514620022b85760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d41544348000000000000006064820152608401620006fd565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200233891906200302a565b6000604051808303816000865af19150503d806000811462002377576040519150601f19603f3d011682016040523d82523d6000602084013e6200237c565b606091505b5050505050505050505062002571565b6001600160e01b031981166323f2ebc360e21b14620024025760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b6064820152608401620006fd565b6000808080808080806200241a8a6004818e62003497565b810190620024299190620035cc565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200246d5760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0387163014620024985760405162461bcd60e51b8152600401620006fd906200357b565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f16916200252191906200302a565b6000604051808303816000865af19150503d806000811462002560576040519150601f19603f3d011682016040523d82523d6000602084013e62002565565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d7c9085906323b872dd60e01b9060840162001f18565b600062002609826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620026929092919063ffffffff16565b80519091501562001f5057808060200190518101906200262a91906200318d565b62001f505760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006fd565b6020015190565b6060620009d2848460008585600080866001600160a01b03168587604051620026bc91906200302a565b60006040518083038185875af1925050503d8060008114620026fb576040519150601f19603f3d011682016040523d82523d6000602084013e62002700565b606091505b509150915062002713878383876200271e565b979650505050505050565b60608315620027925782516000036200278a576001600160a01b0385163b6200278a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006fd565b5081620009d2565b620009d28383815115620027a95781518083602001fd5b8060405162461bcd60e51b8152600401620006fd919062003658565b611557806200366e83390190565b6001600160a01b03811681146200160657600080fd5b8035620027f681620027d3565b919050565b803563ffffffff81168114620027f657600080fd5b60008083601f8401126200282357600080fd5b50813567ffffffffffffffff8111156200283c57600080fd5b6020830191508360208285010111156200285557600080fd5b9250929050565b60008060008060008060a087890312156200287657600080fd5b86356200288381620027d3565b95506200289360208801620027fb565b94506040870135620028a581620027d3565b935060608701359250608087013567ffffffffffffffff811115620028c957600080fd5b620028d789828a0162002810565b979a9699509497509295939492505050565b60008060408385031215620028fd57600080fd5b6200290883620027fb565b915060208301356200291a81620027d3565b809150509250929050565b6000602082840312156200293857600080fd5b5035919050565b6000602082840312156200295257600080fd5b6200295d82620027fb565b9392505050565b6000602082840312156200297757600080fd5b81356200295d81620027d3565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620029c657620029c662002984565b604052919050565b600082601f830112620029e057600080fd5b8135602067ffffffffffffffff821115620029ff57620029ff62002984565b8160051b62002a108282016200299a565b928352848101820192828101908785111562002a2b57600080fd5b83870192505b84831015620027135782358252918301919083019062002a31565b6000806000806080858703121562002a6357600080fd5b84359350602085013567ffffffffffffffff8082111562002a8357600080fd5b62002a9188838901620029ce565b945060408701359150808216821462002aa957600080fd5b509396929550929360600135925050565b60ff811681146200160657600080fd5b600080600080600080600060e0888a03121562002ae657600080fd5b873562002af38162002aba565b965062002b0360208901620027fb565b9550604088013562002b1581620027d3565b945062002b2560608901620027fb565b9350608088013562002b3781620027d3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002b715762002b7162002984565b50601f01601f191660200190565b600082601f83011262002b9157600080fd5b813562002ba862002ba28262002b54565b6200299a565b81815284602083860101111562002bbe57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002bfc57600080fd5b8a3567ffffffffffffffff8082111562002c1557600080fd5b62002c238e838f01620029ce565b9b5062002c3360208e01620027fb565b9a5060408d0135995060608d0135985062002c5160808e01620027fb565b975062002c6160a08e01620027e9565b965062002c7160c08e01620027fb565b955062002c8160e08e01620027e9565b94506101008d013593506101208d013591508082111562002ca157600080fd5b5062002cb08d828e0162002b7f565b9150509295989b9194979a5092959850565b60008060006060848603121562002cd857600080fd5b62002ce384620027fb565b9250602084013562002cf581620027d3565b9150604084013562002d0781620027d3565b809150509250925092565b600080600080600080600060a0888a03121562002d2e57600080fd5b62002d3988620027fb565b9650602088013562002d4b81620027d3565b9550604088013567ffffffffffffffff8082111562002d6957600080fd5b62002d778b838c0162002810565b909750955060608a013591508082111562002d9157600080fd5b5062002da08a828b0162002810565b909450925050608088013562002db68162002aba565b8091505092959891949750929550565b60008060006060848603121562002ddc57600080fd5b62002de784620027fb565b9250602084013562002df981620027d3565b9150604084013567ffffffffffffffff81111562002e1657600080fd5b62002e248682870162002b7f565b9150509250925092565b6020808252603d908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79506f6c79676f6e5a4b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002f095762002f0962002ecb565b500490565b60006001820162002f235762002f2362002ee1565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002faf57818101518382015260200162002f95565b8381111562000d7c5750506000910152565b6000815180845262002fdb81602086016020860162002f92565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff83166020820152606060408201819052600090620030219083018462002fc1565b95945050505050565b600082516200303e81846020870162002f92565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f8301126200309157600080fd5b8151620030a262002ba28262002b54565b818152846020838601011115620030b857600080fd5b620009d282602083016020870162002f92565b600080600060608486031215620030e157600080fd5b835167ffffffffffffffff80821115620030fa57600080fd5b62003108878388016200307f565b945060208601519150808211156200311f57600080fd5b506200312e868287016200307f565b925050604084015162002d078162002aba565b60608152600062003156606083018662002fc1565b82810360208401526200316a818662002fc1565b91505060ff83166040830152949350505050565b80151581146200160657600080fd5b600060208284031215620031a057600080fd5b81516200295d816200317e565b600082620031bf57620031bf62002ecb565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003203606083018789620031c4565b828103602084015262003218818688620031c4565b91505060ff831660408301529695505050505050565b600083516200324281846020880162002f92565b8351908301906200325881836020880162002f92565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032b58483018762002fc1565b925080851660e085015250509998505050505050505050565b600060208284031215620032e157600080fd5b815167ffffffffffffffff811115620032f957600080fd5b620009d2848285016200307f565b6000602082840312156200331a57600080fd5b81516200295d8162002aba565b6000602082840312156200333a57600080fd5b5051919050565b600181815b808511156200338257816000190482111562003366576200336662002ee1565b808516156200337457918102915b93841c939080029062003346565b509250929050565b6000826200339b57506001620007a4565b81620033aa57506000620007a4565b8160018114620033c35760028114620033ce57620033ee565b6001915050620007a4565b60ff841115620033e257620033e262002ee1565b50506001821b620007a4565b5060208310610133831016604e8410600b841016171562003413575081810a620007a4565b6200341f838362003341565b806000190482111562003436576200343662002ee1565b029392505050565b60006200295d83836200338a565b60008282101562003461576200346162002ee1565b500390565b600082198211156200347c576200347c62002ee1565b500190565b634e487b7160e01b600052600160045260246000fd5b60008085851115620034a857600080fd5b83861115620034b657600080fd5b5050820193919092039150565b600080600080600080600060e0888a031215620034df57600080fd5b8735620034ec81620027d3565b96506020880135620034fe81620027d3565b95506040880135945060608801359350608088013562002b378162002aba565b6020808252603c908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b031215620035ea57600080fd5b8835620035f781620027d3565b975060208901356200360981620027d3565b96506040890135955060608901359450608089013562003629816200317e565b935060a08901356200363b8162002aba565b979a969950949793969295929450505060c08201359160e0013590565b6020815260006200295d602083018462002fc156fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b5d95b18e7873c0bee5e5a0f8ba7f856feaa9a4588dd711619c14728f42e00f64736f6c634300080f0033506f6c79676f6e5a4b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212206ec7e43691f361491ee442d1fd15e0d82b13a9ad35949d811f74af9b2582621764736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50614c1a806100206000396000f3fe608060405260043610620001f35760003560e01c806381b1c174116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b806381b1c17414620004615780638da5cb5b146200049b5780638f61151914620004bb57600080fd5b8063318aee3d116200018d5780634638554911620001585780634638554914620003da578063647c576c14620003ff578063715018a614620004245780637b6323c1146200043c57600080fd5b8063318aee3d14620003095780633ae0504714620003785780633da8168214620003905780633e19704314620003b557600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f620002093660046200285c565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f6200071e565b3480156200026757600080fd5b506200027f62000279366004620028e9565b62000757565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002925565b620007aa565b348015620002ca57600080fd5b506200020f620002dc3660046200293f565b620007b9565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002964565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b50620002fa620007e5565b3480156200039d57600080fd5b506200022d620003af36600462002a4c565b620008d8565b348015620003c257600080fd5b50620002fa620003d436600462002aca565b620009da565b348015620003e757600080fd5b506200020f620003f936600462002bdb565b62000a67565b3480156200040c57600080fd5b506200020f6200041e36600462002cc2565b62000c0d565b3480156200043157600080fd5b506200020f62000d82565b3480156200044957600080fd5b506200020f6200045b36600462002bdb565b62000d98565b3480156200046e57600080fd5b506200027f6200048036600462002925565b6024602052600090815260409020546001600160a01b031681565b348015620004a857600080fd5b50605a546001600160a01b03166200027f565b348015620004c857600080fd5b506027546200027f906001600160a01b031681565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002925565b62001245565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002d12565b6200128a565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002dc6565b620013a1565b348015620005e957600080fd5b506200020f62001553565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002925565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002964565b6200158a565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007065760405162461bcd60e51b815260206004820152604760248201527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b6200071686868686868662001609565b505050505050565b6027546001600160a01b031633146200074b5760405162461bcd60e51b8152600401620006fd9062002e2e565b6200075562001a9f565b565b60006024600084846040516020016200077292919062002e8b565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b462001afd565b608c55565b620007c362001afd565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008cf57826001166001036200085057600181602081106200081c576200081c62002eb5565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200087d565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088a60028462002ef7565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c69062002f0e565b915050620007f0565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009cb5781600116600103620009555786818151811062000913576200091362002eb5565b60200260200101518360405160200162000937929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009a7565b828782815181106200096b576200096b62002eb5565b60200260200101516040516020016200098e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b460028362002ef7565b915080620009c28162002f0e565b915050620008e8565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a8d5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000aa38a8a8a8a8a8a8a8a8a8a600162001b59565b62000ab48963ffffffff1662001de4565b6000836001600160a01b03168387898560405160240162000ad89392919062002fef565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b0f91906200302a565b60006040518083038185875af1925050503d806000811462000b4e576040519150601f19603f3d011682016040523d82523d6000602084013e62000b53565b606091505b505090508062000bbf5760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b6064820152608401620006fd565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bf895949392919062003048565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c2e5750600054600160ff909116105b8062000c4a5750303b15801562000c4a575060005460ff166001145b62000caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006fd565b6000805460ff19166001179055801562000cd3576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d3562001e26565b801562000d7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8c62001afd565b62000755600062001e99565b60225460ff161562000dbe5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000dd48a8a8a8a8a8a8a8a8a8a600062001b59565b62000de58963ffffffff1662001de4565b6001600160a01b03851662000eda57604080516000808252602082019092526001600160a01b03851690849060405162000e2091906200302a565b60006040518083038185875af1925050503d806000811462000e5f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e64565b606091505b505090508062000ed35760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b6064820152608401620006fd565b50620011f8565b60225463ffffffff61010090910481169087160362000f0f5762000f096001600160a01b038616848462001eeb565b620011f8565b6000868660405160200162000f2692919062002e8b565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200117d5760008060008580602001905181019062000f789190620030cb565b92509250925060008584848460405162000f9290620027c5565b62000fa09392919062003141565b8190604051809103906000f590508015801562000fc1573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001016573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200103c91906200318d565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200116b9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011f5565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620011cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011f391906200318d565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200123195949392919062003048565b60405180910390a150505050505050505050565b600080620012566101008462002ef7565b905060006200126861010085620031ad565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620012a292919062002e8b565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012d590620027c5565b601f1982820381018352601f90910116604081905262001302908d908d908d908d908d90602001620031ed565b60408051601f19818403018152908290526200132292916020016200322e565b604051602081830303815290604052805190602001206040516020016200137b94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013c75760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff6101009091048116908416036200144f5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c460000006064820152608401620006fd565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620014a398979695949392919062003261565b60405180910390a1620014e0620014da6001602260019054906101000a900463ffffffff16338787348880519060200120620009da565b62001f55565b6026546001600160a01b03166333d6247d620014fb620007e5565b6040518263ffffffff1660e01b81526004016200151a91815260200190565b600060405180830381600087803b1580156200153557600080fd5b505af11580156200154a573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015805760405162461bcd60e51b8152600401620006fd9062002e2e565b62000755620020a1565b6200159462001afd565b6001600160a01b038116620015fb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006fd565b620016068162001e99565b50565b60225460ff16156200162f5760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff610100909104811690861603620016b75760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c4600000000006064820152608401620006fd565b60008060606001600160a01b0389166200174e5785341462001744576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c55456064820152608401620006fd565b60009150620019bf565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200181c57604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af1158015620017e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200180991906200318d565b50602081015181519094509250620019bd565b84156200183157620018318a88888862002150565b620018486001600160a01b038b1633308a62002578565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200189f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018c99190810190620032ce565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001908573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620019329190810190620032ce565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001971573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001997919062003307565b604051602001620019ab9392919062003141565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162001a0198979695949392919062003261565b60405180910390a162001a26620014da600084868c8c8c8880519060200120620009da565b6026546001600160a01b03166333d6247d62001a41620007e5565b6040518263ffffffff1660e01b815260040162001a6091815260200190565b600060405180830381600087803b15801562001a7b57600080fd5b505af115801562001a90573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001ac55760405162461bcd60e51b8152600401620006fd9062002f2a565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006fd565b62001b6a8a63ffffffff1662001245565b1562001bc15760405162461bcd60e51b8152602060048201526030602482015260008051602062004bc583398151915260448201526f081053149150511657d0d3105253515160821b6064820152608401620006fd565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001c35573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c5b919062003327565b90508060000362001cc45760405162461bcd60e51b8152602060048201526039602482015260008051602062004bc583398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c4944000000000000006064820152608401620006fd565b60225463ffffffff878116610100909204161462001d465760405162461bcd60e51b8152602060048201526043602482015260008051602062004bc583398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a401620006fd565b602254600090610100900463ffffffff1662001d6457508862001d67565b50895b62001d9262001d83848b8b8b8b8b8b80519060200120620009da565b8e8e63ffffffff1684620008d8565b62001a905760405162461bcd60e51b815260206004820152602c602482015260008051602062004bc583398151915260448201526b0814d35517d253959053125160a21b6064820152608401620006fd565b600062001df46101008362002ef7565b9050600062001e0661010084620031ad565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001e935760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006fd565b62000755335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001f5090849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620025b2565b505050565b80600162001f66602060026200343e565b62001f7291906200344c565b6021541062001fd75760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b6064820152608401620006fd565b60016021600082825462001fec919062003466565b909155505060215460005b60208110156200209657816001166001036200202c57826001826020811062002024576200202462002eb5565b015550505050565b6001816020811062002042576200204262002eb5565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200207f919062002ef7565b9150806200208d8162002f0e565b91505062001ff7565b5062001f5062003481565b60225460ff166200211b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006fd565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200219383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200268b92505050565b9050632afa533160e01b6001600160e01b03198216016200238c576000808080808080620021c5896004818d62003497565b810190620021d49190620034c3565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620022165760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0386163014620022415760405162461bcd60e51b8152600401620006fd906200357b565b8a8514620022b85760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d41544348000000000000006064820152608401620006fd565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200233891906200302a565b6000604051808303816000865af19150503d806000811462002377576040519150601f19603f3d011682016040523d82523d6000602084013e6200237c565b606091505b5050505050505050505062002571565b6001600160e01b031981166323f2ebc360e21b14620024025760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b6064820152608401620006fd565b6000808080808080806200241a8a6004818e62003497565b810190620024299190620035cc565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200246d5760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0387163014620024985760405162461bcd60e51b8152600401620006fd906200357b565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f16916200252191906200302a565b6000604051808303816000865af19150503d806000811462002560576040519150601f19603f3d011682016040523d82523d6000602084013e62002565565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d7c9085906323b872dd60e01b9060840162001f18565b600062002609826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620026929092919063ffffffff16565b80519091501562001f5057808060200190518101906200262a91906200318d565b62001f505760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006fd565b6020015190565b6060620009d2848460008585600080866001600160a01b03168587604051620026bc91906200302a565b60006040518083038185875af1925050503d8060008114620026fb576040519150601f19603f3d011682016040523d82523d6000602084013e62002700565b606091505b509150915062002713878383876200271e565b979650505050505050565b60608315620027925782516000036200278a576001600160a01b0385163b6200278a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006fd565b5081620009d2565b620009d28383815115620027a95781518083602001fd5b8060405162461bcd60e51b8152600401620006fd919062003658565b611557806200366e83390190565b6001600160a01b03811681146200160657600080fd5b8035620027f681620027d3565b919050565b803563ffffffff81168114620027f657600080fd5b60008083601f8401126200282357600080fd5b50813567ffffffffffffffff8111156200283c57600080fd5b6020830191508360208285010111156200285557600080fd5b9250929050565b60008060008060008060a087890312156200287657600080fd5b86356200288381620027d3565b95506200289360208801620027fb565b94506040870135620028a581620027d3565b935060608701359250608087013567ffffffffffffffff811115620028c957600080fd5b620028d789828a0162002810565b979a9699509497509295939492505050565b60008060408385031215620028fd57600080fd5b6200290883620027fb565b915060208301356200291a81620027d3565b809150509250929050565b6000602082840312156200293857600080fd5b5035919050565b6000602082840312156200295257600080fd5b6200295d82620027fb565b9392505050565b6000602082840312156200297757600080fd5b81356200295d81620027d3565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620029c657620029c662002984565b604052919050565b600082601f830112620029e057600080fd5b8135602067ffffffffffffffff821115620029ff57620029ff62002984565b8160051b62002a108282016200299a565b928352848101820192828101908785111562002a2b57600080fd5b83870192505b84831015620027135782358252918301919083019062002a31565b6000806000806080858703121562002a6357600080fd5b84359350602085013567ffffffffffffffff8082111562002a8357600080fd5b62002a9188838901620029ce565b945060408701359150808216821462002aa957600080fd5b509396929550929360600135925050565b60ff811681146200160657600080fd5b600080600080600080600060e0888a03121562002ae657600080fd5b873562002af38162002aba565b965062002b0360208901620027fb565b9550604088013562002b1581620027d3565b945062002b2560608901620027fb565b9350608088013562002b3781620027d3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002b715762002b7162002984565b50601f01601f191660200190565b600082601f83011262002b9157600080fd5b813562002ba862002ba28262002b54565b6200299a565b81815284602083860101111562002bbe57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002bfc57600080fd5b8a3567ffffffffffffffff8082111562002c1557600080fd5b62002c238e838f01620029ce565b9b5062002c3360208e01620027fb565b9a5060408d0135995060608d0135985062002c5160808e01620027fb565b975062002c6160a08e01620027e9565b965062002c7160c08e01620027fb565b955062002c8160e08e01620027e9565b94506101008d013593506101208d013591508082111562002ca157600080fd5b5062002cb08d828e0162002b7f565b9150509295989b9194979a5092959850565b60008060006060848603121562002cd857600080fd5b62002ce384620027fb565b9250602084013562002cf581620027d3565b9150604084013562002d0781620027d3565b809150509250925092565b600080600080600080600060a0888a03121562002d2e57600080fd5b62002d3988620027fb565b9650602088013562002d4b81620027d3565b9550604088013567ffffffffffffffff8082111562002d6957600080fd5b62002d778b838c0162002810565b909750955060608a013591508082111562002d9157600080fd5b5062002da08a828b0162002810565b909450925050608088013562002db68162002aba565b8091505092959891949750929550565b60008060006060848603121562002ddc57600080fd5b62002de784620027fb565b9250602084013562002df981620027d3565b9150604084013567ffffffffffffffff81111562002e1657600080fd5b62002e248682870162002b7f565b9150509250925092565b6020808252603d908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79506f6c79676f6e5a4b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002f095762002f0962002ecb565b500490565b60006001820162002f235762002f2362002ee1565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002faf57818101518382015260200162002f95565b8381111562000d7c5750506000910152565b6000815180845262002fdb81602086016020860162002f92565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff83166020820152606060408201819052600090620030219083018462002fc1565b95945050505050565b600082516200303e81846020870162002f92565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f8301126200309157600080fd5b8151620030a262002ba28262002b54565b818152846020838601011115620030b857600080fd5b620009d282602083016020870162002f92565b600080600060608486031215620030e157600080fd5b835167ffffffffffffffff80821115620030fa57600080fd5b62003108878388016200307f565b945060208601519150808211156200311f57600080fd5b506200312e868287016200307f565b925050604084015162002d078162002aba565b60608152600062003156606083018662002fc1565b82810360208401526200316a818662002fc1565b91505060ff83166040830152949350505050565b80151581146200160657600080fd5b600060208284031215620031a057600080fd5b81516200295d816200317e565b600082620031bf57620031bf62002ecb565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003203606083018789620031c4565b828103602084015262003218818688620031c4565b91505060ff831660408301529695505050505050565b600083516200324281846020880162002f92565b8351908301906200325881836020880162002f92565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032b58483018762002fc1565b925080851660e085015250509998505050505050505050565b600060208284031215620032e157600080fd5b815167ffffffffffffffff811115620032f957600080fd5b620009d2848285016200307f565b6000602082840312156200331a57600080fd5b81516200295d8162002aba565b6000602082840312156200333a57600080fd5b5051919050565b600181815b808511156200338257816000190482111562003366576200336662002ee1565b808516156200337457918102915b93841c939080029062003346565b509250929050565b6000826200339b57506001620007a4565b81620033aa57506000620007a4565b8160018114620033c35760028114620033ce57620033ee565b6001915050620007a4565b60ff841115620033e257620033e262002ee1565b50506001821b620007a4565b5060208310610133831016604e8410600b841016171562003413575081810a620007a4565b6200341f838362003341565b806000190482111562003436576200343662002ee1565b029392505050565b60006200295d83836200338a565b60008282101562003461576200346162002ee1565b500390565b600082198211156200347c576200347c62002ee1565b500190565b634e487b7160e01b600052600160045260246000fd5b60008085851115620034a857600080fd5b83861115620034b657600080fd5b5050820193919092039150565b600080600080600080600060e0888a031215620034df57600080fd5b8735620034ec81620027d3565b96506020880135620034fe81620027d3565b95506040880135945060608801359350608088013562002b378162002aba565b6020808252603c908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b031215620035ea57600080fd5b8835620035f781620027d3565b975060208901356200360981620027d3565b96506040890135955060608901359450608089013562003629816200317e565b935060a08901356200363b8162002aba565b979a969950949793969295929450505060c08201359160e0013590565b6020815260006200295d602083018462002fc156fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b5d95b18e7873c0bee5e5a0f8ba7f856feaa9a4588dd711619c14728f42e00f64736f6c634300080f0033506f6c79676f6e5a4b45564d4272696467653a3a5f7665726966794c6561663aa264697066735822122014ee2b3881021fc468e9e867f6f1d4064f354689ed51437dfab467619db84b0064736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001f35760003560e01c806381b1c174116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b806381b1c17414620004615780638da5cb5b146200049b5780638f61151914620004bb57600080fd5b8063318aee3d116200018d5780634638554911620001585780634638554914620003da578063647c576c14620003ff578063715018a614620004245780637b6323c1146200043c57600080fd5b8063318aee3d14620003095780633ae0504714620003785780633da8168214620003905780633e19704314620003b557600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f620002093660046200285c565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f6200071e565b3480156200026757600080fd5b506200027f62000279366004620028e9565b62000757565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002925565b620007aa565b348015620002ca57600080fd5b506200020f620002dc3660046200293f565b620007b9565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002964565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b50620002fa620007e5565b3480156200039d57600080fd5b506200022d620003af36600462002a4c565b620008d8565b348015620003c257600080fd5b50620002fa620003d436600462002aca565b620009da565b348015620003e757600080fd5b506200020f620003f936600462002bdb565b62000a67565b3480156200040c57600080fd5b506200020f6200041e36600462002cc2565b62000c0d565b3480156200043157600080fd5b506200020f62000d82565b3480156200044957600080fd5b506200020f6200045b36600462002bdb565b62000d98565b3480156200046e57600080fd5b506200027f6200048036600462002925565b6024602052600090815260409020546001600160a01b031681565b348015620004a857600080fd5b50605a546001600160a01b03166200027f565b348015620004c857600080fd5b506027546200027f906001600160a01b031681565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002925565b62001245565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002d12565b6200128a565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002dc6565b620013a1565b348015620005e957600080fd5b506200020f62001553565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002925565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002964565b6200158a565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007065760405162461bcd60e51b815260206004820152604760248201527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b6200071686868686868662001609565b505050505050565b6027546001600160a01b031633146200074b5760405162461bcd60e51b8152600401620006fd9062002e2e565b6200075562001a9f565b565b60006024600084846040516020016200077292919062002e8b565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b462001afd565b608c55565b620007c362001afd565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008cf57826001166001036200085057600181602081106200081c576200081c62002eb5565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200087d565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088a60028462002ef7565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c69062002f0e565b915050620007f0565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009cb5781600116600103620009555786818151811062000913576200091362002eb5565b60200260200101518360405160200162000937929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009a7565b828782815181106200096b576200096b62002eb5565b60200260200101516040516020016200098e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b460028362002ef7565b915080620009c28162002f0e565b915050620008e8565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a8d5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000aa38a8a8a8a8a8a8a8a8a8a600162001b59565b62000ab48963ffffffff1662001de4565b6000836001600160a01b03168387898560405160240162000ad89392919062002fef565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b0f91906200302a565b60006040518083038185875af1925050503d806000811462000b4e576040519150601f19603f3d011682016040523d82523d6000602084013e62000b53565b606091505b505090508062000bbf5760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b6064820152608401620006fd565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bf895949392919062003048565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c2e5750600054600160ff909116105b8062000c4a5750303b15801562000c4a575060005460ff166001145b62000caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006fd565b6000805460ff19166001179055801562000cd3576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d3562001e26565b801562000d7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8c62001afd565b62000755600062001e99565b60225460ff161562000dbe5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000dd48a8a8a8a8a8a8a8a8a8a600062001b59565b62000de58963ffffffff1662001de4565b6001600160a01b03851662000eda57604080516000808252602082019092526001600160a01b03851690849060405162000e2091906200302a565b60006040518083038185875af1925050503d806000811462000e5f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e64565b606091505b505090508062000ed35760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b6064820152608401620006fd565b50620011f8565b60225463ffffffff61010090910481169087160362000f0f5762000f096001600160a01b038616848462001eeb565b620011f8565b6000868660405160200162000f2692919062002e8b565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200117d5760008060008580602001905181019062000f789190620030cb565b92509250925060008584848460405162000f9290620027c5565b62000fa09392919062003141565b8190604051809103906000f590508015801562000fc1573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001016573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200103c91906200318d565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200116b9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011f5565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620011cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011f391906200318d565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200123195949392919062003048565b60405180910390a150505050505050505050565b600080620012566101008462002ef7565b905060006200126861010085620031ad565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620012a292919062002e8b565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012d590620027c5565b601f1982820381018352601f90910116604081905262001302908d908d908d908d908d90602001620031ed565b60408051601f19818403018152908290526200132292916020016200322e565b604051602081830303815290604052805190602001206040516020016200137b94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013c75760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff6101009091048116908416036200144f5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c460000006064820152608401620006fd565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620014a398979695949392919062003261565b60405180910390a1620014e0620014da6001602260019054906101000a900463ffffffff16338787348880519060200120620009da565b62001f55565b6026546001600160a01b03166333d6247d620014fb620007e5565b6040518263ffffffff1660e01b81526004016200151a91815260200190565b600060405180830381600087803b1580156200153557600080fd5b505af11580156200154a573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015805760405162461bcd60e51b8152600401620006fd9062002e2e565b62000755620020a1565b6200159462001afd565b6001600160a01b038116620015fb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006fd565b620016068162001e99565b50565b60225460ff16156200162f5760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff610100909104811690861603620016b75760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c4600000000006064820152608401620006fd565b60008060606001600160a01b0389166200174e5785341462001744576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c55456064820152608401620006fd565b60009150620019bf565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200181c57604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af1158015620017e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200180991906200318d565b50602081015181519094509250620019bd565b84156200183157620018318a88888862002150565b620018486001600160a01b038b1633308a62002578565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200189f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018c99190810190620032ce565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001908573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620019329190810190620032ce565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001971573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001997919062003307565b604051602001620019ab9392919062003141565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162001a0198979695949392919062003261565b60405180910390a162001a26620014da600084868c8c8c8880519060200120620009da565b6026546001600160a01b03166333d6247d62001a41620007e5565b6040518263ffffffff1660e01b815260040162001a6091815260200190565b600060405180830381600087803b15801562001a7b57600080fd5b505af115801562001a90573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001ac55760405162461bcd60e51b8152600401620006fd9062002f2a565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006fd565b62001b6a8a63ffffffff1662001245565b1562001bc15760405162461bcd60e51b8152602060048201526030602482015260008051602062004bc583398151915260448201526f081053149150511657d0d3105253515160821b6064820152608401620006fd565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001c35573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c5b919062003327565b90508060000362001cc45760405162461bcd60e51b8152602060048201526039602482015260008051602062004bc583398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c4944000000000000006064820152608401620006fd565b60225463ffffffff878116610100909204161462001d465760405162461bcd60e51b8152602060048201526043602482015260008051602062004bc583398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a401620006fd565b602254600090610100900463ffffffff1662001d6457508862001d67565b50895b62001d9262001d83848b8b8b8b8b8b80519060200120620009da565b8e8e63ffffffff1684620008d8565b62001a905760405162461bcd60e51b815260206004820152602c602482015260008051602062004bc583398151915260448201526b0814d35517d253959053125160a21b6064820152608401620006fd565b600062001df46101008362002ef7565b9050600062001e0661010084620031ad565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001e935760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006fd565b62000755335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001f5090849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620025b2565b505050565b80600162001f66602060026200343e565b62001f7291906200344c565b6021541062001fd75760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b6064820152608401620006fd565b60016021600082825462001fec919062003466565b909155505060215460005b60208110156200209657816001166001036200202c57826001826020811062002024576200202462002eb5565b015550505050565b6001816020811062002042576200204262002eb5565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200207f919062002ef7565b9150806200208d8162002f0e565b91505062001ff7565b5062001f5062003481565b60225460ff166200211b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006fd565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200219383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200268b92505050565b9050632afa533160e01b6001600160e01b03198216016200238c576000808080808080620021c5896004818d62003497565b810190620021d49190620034c3565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620022165760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0386163014620022415760405162461bcd60e51b8152600401620006fd906200357b565b8a8514620022b85760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d41544348000000000000006064820152608401620006fd565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200233891906200302a565b6000604051808303816000865af19150503d806000811462002377576040519150601f19603f3d011682016040523d82523d6000602084013e6200237c565b606091505b5050505050505050505062002571565b6001600160e01b031981166323f2ebc360e21b14620024025760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b6064820152608401620006fd565b6000808080808080806200241a8a6004818e62003497565b810190620024299190620035cc565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200246d5760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0387163014620024985760405162461bcd60e51b8152600401620006fd906200357b565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f16916200252191906200302a565b6000604051808303816000865af19150503d806000811462002560576040519150601f19603f3d011682016040523d82523d6000602084013e62002565565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d7c9085906323b872dd60e01b9060840162001f18565b600062002609826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620026929092919063ffffffff16565b80519091501562001f5057808060200190518101906200262a91906200318d565b62001f505760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006fd565b6020015190565b6060620009d2848460008585600080866001600160a01b03168587604051620026bc91906200302a565b60006040518083038185875af1925050503d8060008114620026fb576040519150601f19603f3d011682016040523d82523d6000602084013e62002700565b606091505b509150915062002713878383876200271e565b979650505050505050565b60608315620027925782516000036200278a576001600160a01b0385163b6200278a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006fd565b5081620009d2565b620009d28383815115620027a95781518083602001fd5b8060405162461bcd60e51b8152600401620006fd919062003658565b611557806200366e83390190565b6001600160a01b03811681146200160657600080fd5b8035620027f681620027d3565b919050565b803563ffffffff81168114620027f657600080fd5b60008083601f8401126200282357600080fd5b50813567ffffffffffffffff8111156200283c57600080fd5b6020830191508360208285010111156200285557600080fd5b9250929050565b60008060008060008060a087890312156200287657600080fd5b86356200288381620027d3565b95506200289360208801620027fb565b94506040870135620028a581620027d3565b935060608701359250608087013567ffffffffffffffff811115620028c957600080fd5b620028d789828a0162002810565b979a9699509497509295939492505050565b60008060408385031215620028fd57600080fd5b6200290883620027fb565b915060208301356200291a81620027d3565b809150509250929050565b6000602082840312156200293857600080fd5b5035919050565b6000602082840312156200295257600080fd5b6200295d82620027fb565b9392505050565b6000602082840312156200297757600080fd5b81356200295d81620027d3565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620029c657620029c662002984565b604052919050565b600082601f830112620029e057600080fd5b8135602067ffffffffffffffff821115620029ff57620029ff62002984565b8160051b62002a108282016200299a565b928352848101820192828101908785111562002a2b57600080fd5b83870192505b84831015620027135782358252918301919083019062002a31565b6000806000806080858703121562002a6357600080fd5b84359350602085013567ffffffffffffffff8082111562002a8357600080fd5b62002a9188838901620029ce565b945060408701359150808216821462002aa957600080fd5b509396929550929360600135925050565b60ff811681146200160657600080fd5b600080600080600080600060e0888a03121562002ae657600080fd5b873562002af38162002aba565b965062002b0360208901620027fb565b9550604088013562002b1581620027d3565b945062002b2560608901620027fb565b9350608088013562002b3781620027d3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002b715762002b7162002984565b50601f01601f191660200190565b600082601f83011262002b9157600080fd5b813562002ba862002ba28262002b54565b6200299a565b81815284602083860101111562002bbe57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002bfc57600080fd5b8a3567ffffffffffffffff8082111562002c1557600080fd5b62002c238e838f01620029ce565b9b5062002c3360208e01620027fb565b9a5060408d0135995060608d0135985062002c5160808e01620027fb565b975062002c6160a08e01620027e9565b965062002c7160c08e01620027fb565b955062002c8160e08e01620027e9565b94506101008d013593506101208d013591508082111562002ca157600080fd5b5062002cb08d828e0162002b7f565b9150509295989b9194979a5092959850565b60008060006060848603121562002cd857600080fd5b62002ce384620027fb565b9250602084013562002cf581620027d3565b9150604084013562002d0781620027d3565b809150509250925092565b600080600080600080600060a0888a03121562002d2e57600080fd5b62002d3988620027fb565b9650602088013562002d4b81620027d3565b9550604088013567ffffffffffffffff8082111562002d6957600080fd5b62002d778b838c0162002810565b909750955060608a013591508082111562002d9157600080fd5b5062002da08a828b0162002810565b909450925050608088013562002db68162002aba565b8091505092959891949750929550565b60008060006060848603121562002ddc57600080fd5b62002de784620027fb565b9250602084013562002df981620027d3565b9150604084013567ffffffffffffffff81111562002e1657600080fd5b62002e248682870162002b7f565b9150509250925092565b6020808252603d908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79506f6c79676f6e5a4b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002f095762002f0962002ecb565b500490565b60006001820162002f235762002f2362002ee1565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002faf57818101518382015260200162002f95565b8381111562000d7c5750506000910152565b6000815180845262002fdb81602086016020860162002f92565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff83166020820152606060408201819052600090620030219083018462002fc1565b95945050505050565b600082516200303e81846020870162002f92565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f8301126200309157600080fd5b8151620030a262002ba28262002b54565b818152846020838601011115620030b857600080fd5b620009d282602083016020870162002f92565b600080600060608486031215620030e157600080fd5b835167ffffffffffffffff80821115620030fa57600080fd5b62003108878388016200307f565b945060208601519150808211156200311f57600080fd5b506200312e868287016200307f565b925050604084015162002d078162002aba565b60608152600062003156606083018662002fc1565b82810360208401526200316a818662002fc1565b91505060ff83166040830152949350505050565b80151581146200160657600080fd5b600060208284031215620031a057600080fd5b81516200295d816200317e565b600082620031bf57620031bf62002ecb565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003203606083018789620031c4565b828103602084015262003218818688620031c4565b91505060ff831660408301529695505050505050565b600083516200324281846020880162002f92565b8351908301906200325881836020880162002f92565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032b58483018762002fc1565b925080851660e085015250509998505050505050505050565b600060208284031215620032e157600080fd5b815167ffffffffffffffff811115620032f957600080fd5b620009d2848285016200307f565b6000602082840312156200331a57600080fd5b81516200295d8162002aba565b6000602082840312156200333a57600080fd5b5051919050565b600181815b808511156200338257816000190482111562003366576200336662002ee1565b808516156200337457918102915b93841c939080029062003346565b509250929050565b6000826200339b57506001620007a4565b81620033aa57506000620007a4565b8160018114620033c35760028114620033ce57620033ee565b6001915050620007a4565b60ff841115620033e257620033e262002ee1565b50506001821b620007a4565b5060208310610133831016604e8410600b841016171562003413575081810a620007a4565b6200341f838362003341565b806000190482111562003436576200343662002ee1565b029392505050565b60006200295d83836200338a565b60008282101562003461576200346162002ee1565b500390565b600082198211156200347c576200347c62002ee1565b500190565b634e487b7160e01b600052600160045260246000fd5b60008085851115620034a857600080fd5b83861115620034b657600080fd5b5050820193919092039150565b600080600080600080600060e0888a031215620034df57600080fd5b8735620034ec81620027d3565b96506020880135620034fe81620027d3565b95506040880135945060608801359350608088013562002b378162002aba565b6020808252603c908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b031215620035ea57600080fd5b8835620035f781620027d3565b975060208901356200360981620027d3565b96506040890135955060608901359450608089013562003629816200317e565b935060a08901356200363b8162002aba565b979a969950949793969295929450505060c08201359160e0013590565b6020815260006200295d602083018462002fc156fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b5d95b18e7873c0bee5e5a0f8ba7f856feaa9a4588dd711619c14728f42e00f64736f6c634300080f0033506f6c79676f6e5a4b45564d4272696467653a3a5f7665726966794c6561663aa264697066735822122014ee2b3881021fc468e9e867f6f1d4064f354689ed51437dfab467619db84b0064736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/GlobalExitRootManager.json b/compiled-contracts/PolygonZKEVMGlobalExitRoot.json similarity index 53% rename from compiled-contracts/GlobalExitRootManager.json rename to compiled-contracts/PolygonZKEVMGlobalExitRoot.json index 9d6a74abe..a4fbc0cd4 100644 --- a/compiled-contracts/GlobalExitRootManager.json +++ b/compiled-contracts/PolygonZKEVMGlobalExitRoot.json @@ -1,7 +1,7 @@ { "_format": "hh-sol-artifact-1", - "contractName": "GlobalExitRootManager", - "sourceName": "contracts/GlobalExitRootManager.sol", + "contractName": "PolygonZKEVMGlobalExitRoot", + "sourceName": "contracts/PolygonZKEVMGlobalExitRoot.sol", "abi": [ { "anonymous": false, @@ -151,8 +151,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506104a6806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461015e57600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610408565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610408565b610171565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e36600461043d565b6102cd565b600554610146906001600160a01b031681565b6040516001600160a01b0390911681526020016100a0565b600454610146906001600160a01b031681565b6005546001600160a01b031633148061019457506004546001600160a01b031633145b61020b5760405162461bcd60e51b815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b6005546001600160a01b031633036102235760018190555b6004546001600160a01b0316330361023b5760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036102c957600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156102ed5750600054600160ff909116105b806103075750303b158015610307575060005460ff166001145b61036a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610202565b6000805460ff19166001179055801561038d576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b03199283161790925560048054928516929091169190911790558015610403576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561041a57600080fd5b5035919050565b80356001600160a01b038116811461043857600080fd5b919050565b6000806040838503121561045057600080fd5b61045983610421565b915061046760208401610421565b9050925092905056fea2646970667358221220e0c9f543d7ca227ec6586a5cb83adb5f68d8cd8e59ad65bc59d711392bc13c1d64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461015e57600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610408565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610408565b610171565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e36600461043d565b6102cd565b600554610146906001600160a01b031681565b6040516001600160a01b0390911681526020016100a0565b600454610146906001600160a01b031681565b6005546001600160a01b031633148061019457506004546001600160a01b031633145b61020b5760405162461bcd60e51b815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b6005546001600160a01b031633036102235760018190555b6004546001600160a01b0316330361023b5760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036102c957600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156102ed5750600054600160ff909116105b806103075750303b158015610307575060005460ff166001145b61036a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610202565b6000805460ff19166001179055801561038d576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b03199283161790925560048054928516929091169190911790558015610403576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561041a57600080fd5b5035919050565b80356001600160a01b038116811461043857600080fd5b919050565b6000806040838503121561045057600080fd5b61045983610421565b915061046760208401610421565b9050925092905056fea2646970667358221220e0c9f543d7ca227ec6586a5cb83adb5f68d8cd8e59ad65bc59d711392bc13c1d64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506104b1806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461015e57600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610413565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610413565b610171565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e366004610448565b6102d8565b600554610146906001600160a01b031681565b6040516001600160a01b0390911681526020016100a0565b600454610146906001600160a01b031681565b6005546001600160a01b031633148061019457506004546001600160a01b031633145b6102165760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a4b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143606482015261545360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b0316330361022e5760018190555b6004546001600160a01b031633036102465760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036102d457600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156102f85750600054600160ff909116105b806103125750303b158015610312575060005460ff166001145b6103755760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161020d565b6000805460ff191660011790558015610398576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561040e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561042557600080fd5b5035919050565b80356001600160a01b038116811461044357600080fd5b919050565b6000806040838503121561045b57600080fd5b6104648361042c565b91506104726020840161042c565b9050925092905056fea2646970667358221220e87b62908ca7f367c27aa4d5451bb5f7d31195343c62faa0eff87856378c258f64736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461015e57600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610413565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610413565b610171565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e366004610448565b6102d8565b600554610146906001600160a01b031681565b6040516001600160a01b0390911681526020016100a0565b600454610146906001600160a01b031681565b6005546001600160a01b031633148061019457506004546001600160a01b031633145b6102165760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a4b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143606482015261545360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b0316330361022e5760018190555b6004546001600160a01b031633036102465760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036102d457600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156102f85750600054600160ff909116105b806103125750303b158015610312575060005460ff166001145b6103755760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161020d565b6000805460ff191660011790558015610398576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561040e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561042557600080fd5b5035919050565b80356001600160a01b038116811461044357600080fd5b919050565b6000806040838503121561045b57600080fd5b6104648361042c565b91506104726020840161042c565b9050925092905056fea2646970667358221220e87b62908ca7f367c27aa4d5451bb5f7d31195343c62faa0eff87856378c258f64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/GlobalExitRootManagerL2.json b/compiled-contracts/PolygonZKEVMGlobalExitRootL2.json similarity index 60% rename from compiled-contracts/GlobalExitRootManagerL2.json rename to compiled-contracts/PolygonZKEVMGlobalExitRootL2.json index 7f3b42deb..32ac939c4 100644 --- a/compiled-contracts/GlobalExitRootManagerL2.json +++ b/compiled-contracts/PolygonZKEVMGlobalExitRootL2.json @@ -1,7 +1,7 @@ { "_format": "hh-sol-artifact-1", - "contractName": "GlobalExitRootManagerL2", - "sourceName": "contracts/GlobalExitRootManagerL2.sol", + "contractName": "PolygonZKEVMGlobalExitRootL2", + "sourceName": "contracts/PolygonZKEVMGlobalExitRootL2.sol", "abi": [ { "inputs": [ @@ -73,8 +73,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5060405161022f38038061022f83398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b61019c806100936000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b36600461014d565b60006020819052908152604090205481565b6100a061009b36600461014d565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b031633146101485760405162461bcd60e51b815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a75706461746545604482015273786974526f6f743a204f4e4c595f42524944474560601b606482015260840160405180910390fd5b600155565b60006020828403121561015f57600080fd5b503591905056fea2646970667358221220b7ed0b6d80ce4ea297aff7a1977d5133c10cfbcd483b6a53c8660630270fa3dc64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b36600461014d565b60006020819052908152604090205481565b6100a061009b36600461014d565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b031633146101485760405162461bcd60e51b815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a75706461746545604482015273786974526f6f743a204f4e4c595f42524944474560601b606482015260840160405180910390fd5b600155565b60006020828403121561015f57600080fd5b503591905056fea2646970667358221220b7ed0b6d80ce4ea297aff7a1977d5133c10cfbcd483b6a53c8660630270fa3dc64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5060405161023838038061023883398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b6101a5806100936000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610156565b60006020819052908152604090205481565b6100a061009b366004610156565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b031633146101515760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f4e4c595f42524944474500000000000000606482015260840160405180910390fd5b600155565b60006020828403121561016857600080fd5b503591905056fea26469706673582212207d941b551ec81b7b270be5ca49938bccc3d7b4b0ed467ffa36d1846b23507c7e64736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610156565b60006020819052908152604090205481565b6100a061009b366004610156565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b031633146101515760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f4e4c595f42524944474500000000000000606482015260840160405180910390fd5b600155565b60006020828403121561016857600080fd5b503591905056fea26469706673582212207d941b551ec81b7b270be5ca49938bccc3d7b4b0ed467ffa36d1846b23507c7e64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/GlobalExitRootManagerL2Mock.json b/compiled-contracts/PolygonZKEVMGlobalExitRootL2Mock.json similarity index 66% rename from compiled-contracts/GlobalExitRootManagerL2Mock.json rename to compiled-contracts/PolygonZKEVMGlobalExitRootL2Mock.json index f3b3f2af9..fb78a6f17 100644 --- a/compiled-contracts/GlobalExitRootManagerL2Mock.json +++ b/compiled-contracts/PolygonZKEVMGlobalExitRootL2Mock.json @@ -1,7 +1,7 @@ { "_format": "hh-sol-artifact-1", - "contractName": "GlobalExitRootManagerL2Mock", - "sourceName": "contracts/mocks/GlobalExitRootManagerL2Mock.sol", + "contractName": "PolygonZKEVMGlobalExitRootL2Mock", + "sourceName": "contracts/mocks/PolygonZKEVMGlobalExitRootL2Mock.sol", "abi": [ { "inputs": [ @@ -104,8 +104,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5060405161029538038061029583398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b610202806100936000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806301fd904414610067578063116c40c314610083578063257b36321461009857806333d6247d146100b857806396e07459146100cb578063a3c573eb146100eb575b600080fd5b61007060015481565b6040519081526020015b60405180910390f35b610096610091366004610191565b600155565b005b6100706100a6366004610191565b60006020819052908152604090205481565b6100966100c6366004610191565b610116565b6100966100d93660046101aa565b60009182526020829052604090912055565b6002546100fe906001600160a01b031681565b6040516001600160a01b03909116815260200161007a565b6002546001600160a01b031633146100915760405162461bcd60e51b815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a75706461746545604482015273786974526f6f743a204f4e4c595f42524944474560601b606482015260840160405180910390fd5b6000602082840312156101a357600080fd5b5035919050565b600080604083850312156101bd57600080fd5b5050803592602090910135915056fea2646970667358221220921a5c1f48451fe1bc13c1dcd70f9b1391e2ab440fabb6d6bc05555573d279c364736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c806301fd904414610067578063116c40c314610083578063257b36321461009857806333d6247d146100b857806396e07459146100cb578063a3c573eb146100eb575b600080fd5b61007060015481565b6040519081526020015b60405180910390f35b610096610091366004610191565b600155565b005b6100706100a6366004610191565b60006020819052908152604090205481565b6100966100c6366004610191565b610116565b6100966100d93660046101aa565b60009182526020829052604090912055565b6002546100fe906001600160a01b031681565b6040516001600160a01b03909116815260200161007a565b6002546001600160a01b031633146100915760405162461bcd60e51b815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a75706461746545604482015273786974526f6f743a204f4e4c595f42524944474560601b606482015260840160405180910390fd5b6000602082840312156101a357600080fd5b5035919050565b600080604083850312156101bd57600080fd5b5050803592602090910135915056fea2646970667358221220921a5c1f48451fe1bc13c1dcd70f9b1391e2ab440fabb6d6bc05555573d279c364736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5060405161029e38038061029e83398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b61020b806100936000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806301fd904414610067578063116c40c314610083578063257b36321461009857806333d6247d146100b857806396e07459146100cb578063a3c573eb146100eb575b600080fd5b61007060015481565b6040519081526020015b60405180910390f35b61009661009136600461019a565b600155565b005b6100706100a636600461019a565b60006020819052908152604090205481565b6100966100c636600461019a565b610116565b6100966100d93660046101b3565b60009182526020829052604090912055565b6002546100fe906001600160a01b031681565b6040516001600160a01b03909116815260200161007a565b6002546001600160a01b031633146100915760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f4e4c595f42524944474500000000000000606482015260840160405180910390fd5b6000602082840312156101ac57600080fd5b5035919050565b600080604083850312156101c657600080fd5b5050803592602090910135915056fea2646970667358221220146ad1d66b418b2575e71f8a2f661306fc5273e63ce76b1e7c1a05c7fb3a075064736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c806301fd904414610067578063116c40c314610083578063257b36321461009857806333d6247d146100b857806396e07459146100cb578063a3c573eb146100eb575b600080fd5b61007060015481565b6040519081526020015b60405180910390f35b61009661009136600461019a565b600155565b005b6100706100a636600461019a565b60006020819052908152604090205481565b6100966100c636600461019a565b610116565b6100966100d93660046101b3565b60009182526020829052604090912055565b6002546100fe906001600160a01b031681565b6040516001600160a01b03909116815260200161007a565b6002546001600160a01b031633146100915760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f4e4c595f42524944474500000000000000606482015260840160405180910390fd5b6000602082840312156101ac57600080fd5b5035919050565b600080604083850312156101c657600080fd5b5050803592602090910135915056fea2646970667358221220146ad1d66b418b2575e71f8a2f661306fc5273e63ce76b1e7c1a05c7fb3a075064736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/GlobalExitRootManagerMock.json b/compiled-contracts/PolygonZKEVMGlobalExitRootMock.json similarity index 60% rename from compiled-contracts/GlobalExitRootManagerMock.json rename to compiled-contracts/PolygonZKEVMGlobalExitRootMock.json index d0d6acd6b..15da7037b 100644 --- a/compiled-contracts/GlobalExitRootManagerMock.json +++ b/compiled-contracts/PolygonZKEVMGlobalExitRootMock.json @@ -1,7 +1,7 @@ { "_format": "hh-sol-artifact-1", - "contractName": "GlobalExitRootManagerMock", - "sourceName": "contracts/mocks/GlobalExitRootManagerMock.sol", + "contractName": "PolygonZKEVMGlobalExitRootMock", + "sourceName": "contracts/mocks/PolygonZKEVMGlobalExitRootMock.sol", "abi": [ { "inputs": [ @@ -198,8 +198,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5060405161076f38038061076f83398101604081905261002f916101bb565b6100398282610040565b50506101ee565b600054610100900460ff16158080156100605750600054600160ff909116105b8061008b57506100793061019060201b6104a31760201c565b15801561008b575060005460ff166001145b6100f25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015610115576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561018b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b80516001600160a01b03811681146101b657600080fd5b919050565b600080604083850312156101ce57600080fd5b6101d78361019f565b91506101e56020840161019f565b90509250929050565b610572806101fd6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80633ed691ef116100665780633ed691ef14610110578063485cc955146101495780635bcef6731461015c5780635ec6a8df1461017c578063a3c573eb146101a757600080fd5b806301fd9044146100a3578063051a9e28146100bf578063257b3632146100d4578063319cf735146100f457806333d6247d146100fd575b600080fd5b6100ac60015481565b6040519081526020015b60405180910390f35b6100d26100cd3660046104b2565b6101ba565b005b6100ac6100e23660046104b2565b60036020526000908152604090205481565b6100ac60025481565b6100d261010b3660046104b2565b61020c565b6100ac60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d26101573660046104e7565b610368565b6100d261016a36600461051a565b60009182526003602052604090912055565b60055461018f906001600160a01b031681565b6040516001600160a01b0390911681526020016100b6565b60045461018f906001600160a01b031681565b80600360006101f860025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b6005546001600160a01b031633148061022f57506004546001600160a01b031633145b6102a65760405162461bcd60e51b815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b6005546001600160a01b031633036102be5760018190555b6004546001600160a01b031633036102d65760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361036457600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103885750600054600160ff909116105b806103a25750303b1580156103a2575060005460ff166001145b6104055760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161029d565b6000805460ff191660011790558015610428576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561049e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b6000602082840312156104c457600080fd5b5035919050565b80356001600160a01b03811681146104e257600080fd5b919050565b600080604083850312156104fa57600080fd5b610503836104cb565b9150610511602084016104cb565b90509250929050565b6000806040838503121561052d57600080fd5b5050803592602090910135915056fea264697066735822122082ea160a3ec4f829f851711f236acddc0f95056ee62214ad334ec9216e83c2ba64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c80633ed691ef116100665780633ed691ef14610110578063485cc955146101495780635bcef6731461015c5780635ec6a8df1461017c578063a3c573eb146101a757600080fd5b806301fd9044146100a3578063051a9e28146100bf578063257b3632146100d4578063319cf735146100f457806333d6247d146100fd575b600080fd5b6100ac60015481565b6040519081526020015b60405180910390f35b6100d26100cd3660046104b2565b6101ba565b005b6100ac6100e23660046104b2565b60036020526000908152604090205481565b6100ac60025481565b6100d261010b3660046104b2565b61020c565b6100ac60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d26101573660046104e7565b610368565b6100d261016a36600461051a565b60009182526003602052604090912055565b60055461018f906001600160a01b031681565b6040516001600160a01b0390911681526020016100b6565b60045461018f906001600160a01b031681565b80600360006101f860025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b6005546001600160a01b031633148061022f57506004546001600160a01b031633145b6102a65760405162461bcd60e51b815260206004820152603d60248201527f476c6f62616c45786974526f6f744d616e616765723a3a75706461746545786960448201527f74526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143545300000060648201526084015b60405180910390fd5b6005546001600160a01b031633036102be5760018190555b6004546001600160a01b031633036102d65760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361036457600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103885750600054600160ff909116105b806103a25750303b1580156103a2575060005460ff166001145b6104055760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161029d565b6000805460ff191660011790558015610428576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561049e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b6000602082840312156104c457600080fd5b5035919050565b80356001600160a01b03811681146104e257600080fd5b919050565b600080604083850312156104fa57600080fd5b610503836104cb565b9150610511602084016104cb565b90509250929050565b6000806040838503121561052d57600080fd5b5050803592602090910135915056fea264697066735822122082ea160a3ec4f829f851711f236acddc0f95056ee62214ad334ec9216e83c2ba64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5060405161077a38038061077a83398101604081905261002f916101bb565b6100398282610040565b50506101ee565b600054610100900460ff16158080156100605750600054600160ff909116105b8061008b57506100793061019060201b6104ae1760201c565b15801561008b575060005460ff166001145b6100f25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015610115576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561018b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b80516001600160a01b03811681146101b657600080fd5b919050565b600080604083850312156101ce57600080fd5b6101d78361019f565b91506101e56020840161019f565b90509250929050565b61057d806101fd6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80633ed691ef116100665780633ed691ef14610110578063485cc955146101495780635bcef6731461015c5780635ec6a8df1461017c578063a3c573eb146101a757600080fd5b806301fd9044146100a3578063051a9e28146100bf578063257b3632146100d4578063319cf735146100f457806333d6247d146100fd575b600080fd5b6100ac60015481565b6040519081526020015b60405180910390f35b6100d26100cd3660046104bd565b6101ba565b005b6100ac6100e23660046104bd565b60036020526000908152604090205481565b6100ac60025481565b6100d261010b3660046104bd565b61020c565b6100ac60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d26101573660046104f2565b610373565b6100d261016a366004610525565b60009182526003602052604090912055565b60055461018f906001600160a01b031681565b6040516001600160a01b0390911681526020016100b6565b60045461018f906001600160a01b031681565b80600360006101f860025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b6005546001600160a01b031633148061022f57506004546001600160a01b031633145b6102b15760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a4b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143606482015261545360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b031633036102c95760018190555b6004546001600160a01b031633036102e15760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361036f57600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103935750600054600160ff909116105b806103ad5750303b1580156103ad575060005460ff166001145b6104105760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016102a8565b6000805460ff191660011790558015610433576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b031992831617909255600480549285169290911691909117905580156104a9576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b6000602082840312156104cf57600080fd5b5035919050565b80356001600160a01b03811681146104ed57600080fd5b919050565b6000806040838503121561050557600080fd5b61050e836104d6565b915061051c602084016104d6565b90509250929050565b6000806040838503121561053857600080fd5b5050803592602090910135915056fea26469706673582212206d7e73c1fd0ab3c0387a3db72a4dd6be8d67de74af18f54eda86374e369cdf7b64736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c80633ed691ef116100665780633ed691ef14610110578063485cc955146101495780635bcef6731461015c5780635ec6a8df1461017c578063a3c573eb146101a757600080fd5b806301fd9044146100a3578063051a9e28146100bf578063257b3632146100d4578063319cf735146100f457806333d6247d146100fd575b600080fd5b6100ac60015481565b6040519081526020015b60405180910390f35b6100d26100cd3660046104bd565b6101ba565b005b6100ac6100e23660046104bd565b60036020526000908152604090205481565b6100ac60025481565b6100d261010b3660046104bd565b61020c565b6100ac60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d26101573660046104f2565b610373565b6100d261016a366004610525565b60009182526003602052604090912055565b60055461018f906001600160a01b031681565b6040516001600160a01b0390911681526020016100b6565b60045461018f906001600160a01b031681565b80600360006101f860025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b6005546001600160a01b031633148061022f57506004546001600160a01b031633145b6102b15760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a4b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143606482015261545360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b031633036102c95760018190555b6004546001600160a01b031633036102e15760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361036f57600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103935750600054600160ff909116105b806103ad5750303b1580156103ad575060005460ff166001145b6104105760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016102a8565b6000805460ff191660011790558015610433576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b031992831617909255600480549285169290911691909117905580156104a9576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b6000602082840312156104cf57600080fd5b5035919050565b80356001600160a01b03811681146104ed57600080fd5b919050565b6000806040838503121561050557600080fd5b61050e836104d6565b915061051c602084016104d6565b90509250929050565b6000806040838503121561053857600080fd5b5050803592602090910135915056fea26469706673582212206d7e73c1fd0ab3c0387a3db72a4dd6be8d67de74af18f54eda86374e369cdf7b64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZKEVMMock.json b/compiled-contracts/PolygonZKEVMMock.json index 7ee57af7a..3a6e0b57c 100644 --- a/compiled-contracts/PolygonZKEVMMock.json +++ b/compiled-contracts/PolygonZKEVMMock.json @@ -720,7 +720,7 @@ "name": "globalExitRootManager", "outputs": [ { - "internalType": "contract IGlobalExitRootManager", + "internalType": "contract IPolygonZKEVMGlobalExitRoot", "name": "", "type": "address" } @@ -731,7 +731,7 @@ { "inputs": [ { - "internalType": "contract IGlobalExitRootManager", + "internalType": "contract IPolygonZKEVMGlobalExitRoot", "name": "_globalExitRootManager", "type": "address" }, @@ -1693,8 +1693,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50615e2180620000216000396000f3fe608060405234801561001057600080fd5b50600436106104125760003560e01c806396dc3d3911610220578063cfa8ed4711610130578063e7a7ed02116100b8578063f14916d611610087578063f14916d6146109e2578063f2fde38b146109f5578063f851a44014610a08578063f8b823e414610a1b578063fe16564f14610a2457600080fd5b8063e7a7ed021461098f578063e8bf92ed146109a9578063eaeb077b146109bc578063edc41121146109cf57600080fd5b8063d939b315116100ff578063d939b3151461093e578063dbc1697614610958578063e0d1744114610960578063e11f3f1814610973578063e217cfd61461098657600080fd5b8063cfa8ed47146108ea578063d02103ca14610904578063d8d1091b14610917578063d8f54db01461092a57600080fd5b8063ab9fc5ef116101b3578063b6b0b09711610182578063b6b0b0971461088f578063c0cad302146108a9578063c0ed84e0146108bc578063c89e42df146108c4578063cf136306146108d757600080fd5b8063ab9fc5ef146107e3578063adc879e9146107ed578063afd23cbe14610807578063b4d63f581461082f57600080fd5b80639eb831b9116101ef5780639eb831b9146107a85780639f0d039d146107b0578063a3c573eb146107b8578063aa58bad6146107cb57600080fd5b806396dc3d391461076757806399f5634e1461077a5780639b796760146107825780639c9f3dfe1461079557600080fd5b80634a910e6a11610326578063715018a6116102ae578063837a47381161027d578063837a4738146106b1578063841b24d71461071f5780638b48931e146107395780638c4a0af7146107435780638da5cb5b1461075657600080fd5b8063715018a6146106705780637215541a1461067857806375c508b31461068b5780637fcb36531461069e57600080fd5b8063574f649e116102f5578063574f649e1461060457806360943d6a146106175780636b8616ce1461062a5780636ff512cc1461064a578063704b6c021461065d57600080fd5b80634a910e6a146105b65780635392c5e0146105c9578063542028d5146105e95780635437988d146105f157600080fd5b80632d0889d3116103a9578063423fa85611610378578063423fa85614610542578063456052671461055c578063458c0477146105765780634834a343146105895780634a1a89a71461059c57600080fd5b80632d0889d314610500578063383b3be814610509578063394218e91461051c5780633c1582671461052f57600080fd5b80631816b7e5116103e55780631816b7e51461048457806319d8ac6114610497578063220d7899146104c257806329878983146104d557600080fd5b80630eaa86ea14610417578063107bf28c1461043d57806310a01a721461045257806315064c9614610467575b600080fd5b61042a610425366004614b86565b610a37565b6040519081526020015b60405180910390f35b610445610c18565b6040516104349190614c33565b610465610460366004614c75565b610ca6565b005b6065546104749060ff1681565b6040519015158152602001610434565b610465610492366004614d02565b610ef0565b6068546104aa906001600160401b031681565b6040516001600160401b039091168152602001610434565b6104456104d0366004614d26565b611016565b606a546104e8906001600160a01b031681565b6040516001600160a01b039091168152602001610434565b61042a61ea6081565b610474610517366004614d73565b6111bc565b61046561052a366004614d73565b611203565b61046561053d366004614eb0565b611352565b6068546104aa90600160401b90046001600160401b031681565b6068546104aa90600160801b90046001600160401b031681565b6072546104aa906001600160401b031681565b610465610597366004614c75565b611b66565b6072546104aa90600160401b90046001600160401b031681565b6104656105c4366004614d73565b611eaf565b61042a6105d7366004614d73565b606d6020526000908152604090205481565b61044561214a565b6104656105ff366004614fdb565b612157565b61042a610612366004614ff8565b612181565b61046561062536600461506d565b6121c4565b61042a610638366004614d73565b60666020526000908152604090205481565b610465610658366004614fdb565b612534565b61046561066b366004614fdb565b6125b8565b610465612630565b610465610686366004614d73565b612644565b610465610699366004615144565b6128bc565b6069546104aa906001600160401b031681565b6106f46106bf3660046151e2565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610434565b6072546104aa90600160c01b90046001600160401b031681565b6104aa62093a8081565b610465610751366004615209565b61294b565b6033546001600160a01b03166104e8565b610465610775366004614d73565b6129c2565b61042a6129ed565b610465610790366004614d73565b612ad0565b6104656107a3366004614d73565b612b05565b61042a600c81565b60745461042a565b6070546104e8906001600160a01b031681565b6065546104aa9061010090046001600160401b031681565b6104aa6206978081565b606c546104aa90600160a81b90046001600160401b031681565b60655461081c90600160481b900461ffff1681565b60405161ffff9091168152602001610434565b61086a61083d366004614d73565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610434565b6065546104e890600160581b90046001600160a01b031681565b6104656108b7366004615226565b612c4b565b6104aa612c63565b6104656108d2366004615226565b612cb0565b6104656108e5366004614d73565b612d16565b6069546104e890600160401b90046001600160a01b031681565b606c546104e8906001600160a01b031681565b61046561092536600461525a565b612d97565b606c5461047490600160a01b900460ff1681565b6072546104aa90600160801b90046001600160401b031681565b610465613261565b61046561096e36600461534c565b61331d565b610465610981366004615144565b61338f565b6104aa6103e881565b6068546104aa90600160c01b90046001600160401b031681565b606b546104e8906001600160a01b031681565b6104656109ca366004615399565b6134d4565b6104656109dd366004614c75565b6137fc565b6104656109f0366004614fdb565b61391c565b610465610a03366004614fdb565b613994565b6073546104e8906001600160a01b031681565b61042a60745481565b610465610a323660046153dd565b613a0a565b6000806000610a44612c63565b90506001600160401b03881615610ae1576072546001600160401b039081169089161115610a8d5760405162461bcd60e51b8152600401610a8490615409565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610adb5760405162461bcd60e51b8152600401610a849061548c565b50610b4b565b6001600160401b0387166000908152606d6020526040902054915081610b195760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316876001600160401b03161115610b4b5760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316866001600160401b031611610b7c5760405162461bcd60e51b8152600401610a84906155ea565b6000610b8b8888888689611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051610bc0919061566d565b602060405180830381855afa158015610bdd573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c009190615689565b610c0a91906156b8565b9a9950505050505050505050565b606f8054610c25906156cc565b80601f0160208091040260200160405190810160405280929190818152602001828054610c51906156cc565b8015610c9e5780601f10610c7357610100808354040283529160200191610c9e565b820191906000526020600020905b815481529060010190602001808311610c8157829003601f168201915b505050505081565b610cae613a2c565b600080610cb9612c63565b90506001600160401b038a1615610d4d576072546001600160401b03908116908b161115610cf95760405162461bcd60e51b8152600401610a8490615409565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610d475760405162461bcd60e51b8152600401610a849061548c565b50610db7565b6001600160401b0389166000908152606d6020526040902054915081610d855760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316896001600160401b03161115610db75760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316886001600160401b031611610de85760405162461bcd60e51b8152600401610a84906155ea565b6000610df78a8a8a868b611016565b6069805467ffffffffffffffff19166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610e4557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610e8b57600080fd5b505af1158015610e9f573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610f1a5760405162461bcd60e51b8152600401610a8490615706565b6103e88161ffff16118015610f3457506104008161ffff16105b610fb95760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a4b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a401610a84565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b0380861660008181526067602052604080822054938816825290205460609291158061104857508115155b6110bc576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a84565b80611131576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a84565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b03828116600090815260716020526040812054909242926111f292600160801b9092048116911661575f565b6001600160401b0316111592915050565b6073546001600160a01b0316331461122d5760405162461bcd60e51b8152600401610a8490615706565b62093a806001600160401b03821611156112595760405162461bcd60e51b8152600401610a849061578a565b60655460ff166112fc576072546001600160401b03600160c01b9091048116908216106112fc5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a4b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a401610a84565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a19060200161100b565b60655460ff16156113755760405162461bcd60e51b8152600401610a84906157f5565b606954600160401b90046001600160a01b031633146113fc5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e6365720000000000006064820152608401610a84565b8051806114715760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e636520312062617463680000006064820152608401610a84565b6103e881106114ea576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e7920626174636865736064820152608401610a84565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561198a57600087828151811061153d5761153d61585d565b60200260200101519050600081606001516001600160401b031611156116f6578361156781615873565b94505060008160000151805190602001208260200151836060015160405160200161159493929190615899565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461163a5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d617463680000006064820152608401610a84565b81606001516001600160401b031682604001516001600160401b031610156116f05760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a401610a84565b5061187d565b6020810151158061177f5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916117399160040190815260200190565b6020604051808303816000875af1158015611758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177c9190615689565b15155b6117f15760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d7573742065786973740000000000006064820152608401610a84565b80515161ea601161187d5760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a401610a84565b856001600160401b031681604001516001600160401b0316101580156118b057504281604001516001600160401b031611155b6119225760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e67650000006064820152608401610a84565b805180516020918201208183015160408085015190516119499488949392913391016158bc565b604051602081830303815290604052805190602001209250848061196c90615873565b9550508060400151955050808061198290615900565b915050611521565b506068546001600160401b03600160c01b90910481169083161115611a0f5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b6064820152608401610a84565b606854600090611a2f90600160801b90046001600160401b031684615919565b611a42906001600160401b031687615941565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611b1790339030908490611afc9190615958565b606554600160581b90046001600160a01b0316929190613a86565b611b1f613af1565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b895760405162461bcd60e51b8152600401610a84906157f5565b6072546001600160401b038781166000908152606760205260409020600101544292611bc092600160c01b9091048116911661575f565b6001600160401b03161115611c495760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a401610a84565b6103e8611c568888615919565b6001600160401b031610611cd25760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e792062617463686573000000006064820152608401610a84565b611ce28888888888888888613b91565b611ceb86613e8e565b607254600160801b90046001600160401b0316600003611db3576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615611d5057607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d9657600080fd5b505af1158015611daa573d6000803e3d6000fd5b50505050611e64565b611dbb613af1565b607280546001600160401b0316906000611dd483615873565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611edc57506072546001600160401b03600160401b9091048116908216115b8015611ef757506072546001600160401b0390811690821611155b611f755760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a401610a84565b606a546001600160a01b0316331461201f57611f90816111bc565b61201f5760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a401610a84565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b1580156120dc57600080fd5b505af11580156120f0573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e846002015460405161213d91815260200190565b60405180910390a3505050565b606e8054610c25906156cc565b61215f613a2c565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b60008585805190602001208585856040516020016121a39594939291906158bc565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff16158080156121e45750600054600160ff909116105b806121fe5750303b1580156121fe575060005460ff166001145b6122615760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a84565b6000805460ff191660011790558015612284576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a8416179055607080549091169188169190911790556123016020860186614fdb565b607380546001600160a01b0319166001600160a01b03929092169190911790556123316060860160408701614fdb565b606980546001600160a01b0392909216600160401b02600160401b600160e01b031990921691909117905561236c60c0860160a08701614fdb565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa7113568490556123c960e0860160c08701614d73565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556124006040860160208701614d73565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561243c6080860160608701614d73565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b1990921691909117905561247860a0860160808701615209565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e6124a084826159bd565b50606f6124ad83826159bd565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124e3614074565b8015612529576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b0316331461255e5760405162461bcd60e51b8152600401610a8490615706565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161100b565b6073546001600160a01b031633146125e25760405162461bcd60e51b8152600401610a8490615706565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a19060200161100b565b612638613a2c565b61264260006140e4565b565b6033546001600160a01b031633146128b1576072546000906001600160401b03161561269557506072546001600160401b03908116600090815260716020526040902054600160401b9004166126a3565b506069546001600160401b03165b80826001600160401b0316116127215760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c7265616479207665726966696564000000006064820152608401610a84565b6068546001600160401b03600160401b90910481169083161180159061276357506001600160401b038083166000908152606760205260409020600101541615155b6127ee5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a401610a84565b6001600160401b03808316600090815260676020526040902060010154429161281c9162093a80911661575f565b6001600160401b031611156128af5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a401610a84565b505b6128b9614136565b50565b60655460ff16156128df5760405162461bcd60e51b8152600401610a84906157f5565b6128f08989898989898989896141a6565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1612529614136565b6073546001600160a01b031633146129755760405162461bcd60e51b8152600401610a8490615706565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061100b90831515815260200190565b6129ca613a2c565b6069805467ffffffffffffffff19166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a649190615689565b90506000612a70612c63565b6068546001600160401b03600160401b8204811691612aa091600160801b8204811691600160c01b900416615919565b612aaa919061575f565b612ab49190615919565b6001600160401b03169050612ac98183615a7c565b9250505090565b612ad8613a2c565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612b2f5760405162461bcd60e51b8152600401610a8490615706565b62093a806001600160401b0382161115612b5b5760405162461bcd60e51b8152600401610a849061578a565b60655460ff16612bf0576072546001600160401b03600160801b909104811690821610612bf05760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f776572006064820152608401610a84565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c759060200161100b565b612c53613a2c565b606f612c5f82826159bd565b5050565b6072546000906001600160401b031615612ca057506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612cda5760405162461bcd60e51b8152600401610a8490615706565b606e612ce682826159bd565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161100b9190614c33565b6073546001600160a01b03163314612d405760405162461bcd60e51b8152600401610a8490615706565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f9060200161100b565b60655460ff1615612dba5760405162461bcd60e51b8152600401610a84906157f5565b606c54600160a01b900460ff161515600114612de85760405162461bcd60e51b8152600401610a8490615a90565b805180612e4b5760405162461bcd60e51b815260206004820152603d6024820152600080516020615dac83398151915260448201527f3a204d75737420666f726365206174206c6561737420312062617463680000006064820152608401610a84565b6103e88110612ebc5760405162461bcd60e51b81526020600482015260436024820152600080516020615dac83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a401610a84565b6068546001600160401b03600160c01b8204811691612ee4918491600160801b900416615af9565b1115612f3e5760405162461bcd60e51b81526020600482015260356024820152600080516020615dac8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b6064820152608401610a84565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b8481101561316a576000868281518110612f8b57612f8b61585d565b602002602001015190508380612fa090615873565b945050600081600001518051906020012082602001518360400151604051602001612fcd93929190615899565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461306c5760405162461bcd60e51b81526020600482015260426024820152600080516020615dac83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a401610a84565b613077600188615941565b830361310c5742620697808360400151613091919061575f565b6001600160401b0316111561310c5760405162461bcd60e51b81526020600482015260476024820152600080516020615dac83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a401610a84565b815180516020918201208184015160405161312f938893929142913391016158bc565b604051602081830303815290604052805190602001209350858061315290615873565b9650505050808061316290615900565b915050612f6f565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166132835760405162461bcd60e51b8152600401610a8490615b11565b6073546001600160a01b031633146132ad5760405162461bcd60e51b8152600401610a8490615706565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156132fd57600080fd5b505af1158015613311573d6000803e3d6000fd5b50505050612642614821565b613325613a2c565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133b95760405162461bcd60e51b8152600401610a8490615b6e565b6133ca8989898989898989896141a6565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561341557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561345b57600080fd5b505af115801561346f573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff16156134f75760405162461bcd60e51b8152600401610a84906157f5565b606c54600160a01b900460ff1615156001146135255760405162461bcd60e51b8152600401610a8490615a90565b600061353060745490565b9050818111156135955760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b6064820152608401610a84565b61ea608351106136055760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b6064820152608401610a84565b60655461362490600160581b90046001600160a01b0316333084613a86565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa15801561366e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136929190615689565b60688054919250600160c01b9091046001600160401b03169060186136b683615873565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016136f793929190615899565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361379b57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26137f6565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516137ed93929190615bcb565b60405180910390a25b50505050565b606a546001600160a01b031633146138265760405162461bcd60e51b8152600401610a8490615b6e565b6138368888888888888888613b91565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561388157607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156138c757600080fd5b505af11580156138db573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e9d565b6073546001600160a01b031633146139465760405162461bcd60e51b8152600401610a8490615706565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca9060200161100b565b61399c613a2c565b6001600160a01b038116613a015760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a84565b6128b9816140e4565b613a12613a2c565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b031633146126425760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a84565b6040516001600160a01b03808516602483015283166044820152606481018290526137f69085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614878565b6072546001600160401b03600160401b820481169116111561264257607254600090613b2e90600160401b90046001600160401b0316600161575f565b9050613b39816111bc565b156128b957607254600090600290613b5b9084906001600160401b0316615919565b613b659190615bfe565b613b6f908361575f565b9050613b7a816111bc565b15613b8857612c5f81611eaf565b612c5f82611eaf565b600080613b9c612c63565b90506001600160401b038a1615613c30576072546001600160401b03908116908b161115613bdc5760405162461bcd60e51b8152600401610a8490615409565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c2a5760405162461bcd60e51b8152600401610a849061548c565b50613c9a565b6001600160401b0389166000908152606d6020526040902054915081613c685760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316896001600160401b03161115613c9a5760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316886001600160401b031611613ccb5760405162461bcd60e51b8152600401610a84906155ea565b6000613cda8a8a8a868b611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051613d0f919061566d565b602060405180830381855afa158015613d2c573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613d4f9190615689565b613d5991906156b8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613d9d918b918b918b9190600401615c24565b602060405180830381865afa158015613dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dde9190615c9e565b613e3d5760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20494e5660448201526920a624a22fa82927a7a360b11b6064820152608401610a84565b613e8033613e4b858d615919565b6001600160401b0316613e5c6129ed565b613e669190615958565b606554600160581b90046001600160a01b0316919061494f565b505050505050505050505050565b6000613e98612c63565b905081600080613ea88484615919565b6001600160401b031690505b836001600160401b0316836001600160401b031614613f5a576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613f04911642615941565b1115613f3f576001810154613f2990600160401b90046001600160401b031686615919565b613f3c906001600160401b031684615af9565b92505b60010154600160401b90046001600160401b03169250613eb4565b6000613f668383615941565b905082811015613fe0576000613f7c8285615941565b9050600c8111613f8c5780613f8f565b600c5b9050613f9c816003615958565b613fa790600a615d9f565b606554613fc0908390600160481b900461ffff16615d9f565b607454613fcd9190615958565b613fd79190615a7c565b6074555061406c565b6000613fec8483615941565b9050600c8111613ffc5780613fff565b600c5b9050600061400e826003615958565b61401990600a615d9f565b606554614032908490600160481b900461ffff16615d9f565b60745461403f9190615958565b6140499190615a7c565b90508060745460745461405c9190615958565b6140669190615a7c565b60745550505b505050505050565b600054610100900460ff166140df5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a84565b612642335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561418657600080fd5b505af115801561419a573d6000803e3d6000fd5b5050505061264261497f565b60006001600160401b038a1615614321576072546001600160401b03908116908b1611156142655760405162461bcd60e51b815260206004820152606c6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c401610a84565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b909204161461431b5760405162461bcd60e51b81526020600482015260606024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a401610a84565b50614475565b506001600160401b0387166000908152606d6020526040902054806143c25760405162461bcd60e51b81526020600482015260576024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a401610a84565b6069546001600160401b0390811690891611156144755760405162461bcd60e51b81526020600482015260716024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c401610a84565b6072546001600160401b03908116908a16118015906144a55750896001600160401b0316896001600160401b0316115b80156144c657506072546001600160401b03600160401b9091048116908a16115b61453e5760405162461bcd60e51b815260206004820152604f6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a401610a84565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146145fe5760405162461bcd60e51b815260206004820152606a6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c401610a84565b600061460d898989858a611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051614642919061566d565b602060405180830381855afa15801561465f573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906146829190615689565b61468c91906156b8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916146d0918a918a918a9190600401615c24565b602060405180830381865afa1580156146ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147119190615c9e565b6147715760405162461bcd60e51b815260206004820152603e6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20494e56414c49445f50524f4f4600006064820152608401610a84565b6001600160401b038b16600090815260716020526040902060020154879003613e805760405162461bcd60e51b81526020600482015260626024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c401610a84565b60655460ff166148435760405162461bcd60e51b8152600401610a8490615b11565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006148cd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166149da9092919063ffffffff16565b80519091501561494a57808060200190518101906148eb9190615c9e565b61494a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a84565b505050565b6040516001600160a01b03831660248201526044810182905261494a90849063a9059cbb60e01b90606401613aba565b60655460ff16156149a25760405162461bcd60e51b8152600401610a84906157f5565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60606149e984846000856149f1565b949350505050565b606082471015614a525760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a84565b600080866001600160a01b03168587604051614a6e919061566d565b60006040518083038185875af1925050503d8060008114614aab576040519150601f19603f3d011682016040523d82523d6000602084013e614ab0565b606091505b5091509150614ac187838387614acc565b979650505050505050565b60608315614b3b578251600003614b34576001600160a01b0385163b614b345760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a84565b50816149e9565b6149e98383815115614b505781518083602001fd5b8060405162461bcd60e51b8152600401610a849190614c33565b80356001600160401b0381168114614b8157600080fd5b919050565b600080600080600060a08688031215614b9e57600080fd5b614ba786614b6a565b9450614bb560208701614b6a565b9350614bc360408701614b6a565b94979396509394606081013594506080013592915050565b60005b83811015614bf6578181015183820152602001614bde565b838111156137f65750506000910152565b60008151808452614c1f816020860160208601614bdb565b601f01601f19169290920160200192915050565b602081526000614c466020830184614c07565b9392505050565b8060408101831015614c5e57600080fd5b92915050565b8060808101831015614c5e57600080fd5b6000806000806000806000806101a0898b031215614c9257600080fd5b614c9b89614b6a565b9750614ca960208a01614b6a565b9650614cb760408a01614b6a565b95506060890135945060808901359350614cd48a60a08b01614c4d565b9250614ce38a60e08b01614c64565b9150614cf38a6101608b01614c4d565b90509295985092959890939650565b600060208284031215614d1457600080fd5b813561ffff81168114614c4657600080fd5b600080600080600060a08688031215614d3e57600080fd5b614d4786614b6a565b9450614d5560208701614b6a565b94979496505050506040830135926060810135926080909101359150565b600060208284031215614d8557600080fd5b614c4682614b6a565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614dc657614dc6614d8e565b60405290565b604051606081016001600160401b0381118282101715614dc657614dc6614d8e565b604051601f8201601f191681016001600160401b0381118282101715614e1657614e16614d8e565b604052919050565b60006001600160401b03821115614e3757614e37614d8e565b5060051b60200190565b600082601f830112614e5257600080fd5b81356001600160401b03811115614e6b57614e6b614d8e565b614e7e601f8201601f1916602001614dee565b818152846020838601011115614e9357600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614ec357600080fd5b82356001600160401b0380821115614eda57600080fd5b818501915085601f830112614eee57600080fd5b8135614f01614efc82614e1e565b614dee565b81815260059190911b83018401908481019088831115614f2057600080fd5b8585015b83811015614fb957803585811115614f3c5760008081fd5b86016080818c03601f1901811315614f545760008081fd5b614f5c614da4565b8983013588811115614f6e5760008081fd5b614f7c8e8c83870101614e41565b8252506040808401358b8301526060614f96818601614b6a565b82840152614fa5848601614b6a565b908301525085525050918601918601614f24565b5098975050505050505050565b6001600160a01b03811681146128b957600080fd5b600060208284031215614fed57600080fd5b8135614c4681614fc6565b600080600080600060a0868803121561501057600080fd5b8535945060208601356001600160401b0381111561502d57600080fd5b61503988828901614e41565b9450506040860135925061504f60608701614b6a565b9150608086013561505f81614fc6565b809150509295509295909350565b600080600080600080600080888a036101c081121561508b57600080fd5b893561509681614fc6565b985060208a01356150a681614fc6565b975060408a01356150b681614fc6565b965060608a01356150c681614fc6565b955060e0607f19820112156150da57600080fd5b5060808901935061016089013592506101808901356001600160401b038082111561510457600080fd5b6151108c838d01614e41565b93506101a08b013591508082111561512757600080fd5b506151348b828c01614e41565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c03121561516357600080fd5b61516c8a614b6a565b985061517a60208b01614b6a565b975061518860408b01614b6a565b965061519660608b01614b6a565b955060808a0135945060a08a013593506151b38b60c08c01614c4d565b92506151c38b6101008c01614c64565b91506151d38b6101808c01614c4d565b90509295985092959850929598565b6000602082840312156151f457600080fd5b5035919050565b80151581146128b957600080fd5b60006020828403121561521b57600080fd5b8135614c46816151fb565b60006020828403121561523857600080fd5b81356001600160401b0381111561524e57600080fd5b6149e984828501614e41565b6000602080838503121561526d57600080fd5b82356001600160401b038082111561528457600080fd5b818501915085601f83011261529857600080fd5b81356152a6614efc82614e1e565b81815260059190911b830184019084810190888311156152c557600080fd5b8585015b83811015614fb9578035858111156152e15760008081fd5b86016060818c03601f19018113156152f95760008081fd5b615301614dcc565b89830135888111156153135760008081fd5b6153218e8c83870101614e41565b8252506040808401358b830152615339838501614b6a565b90820152855250509186019186016152c9565b6000806000806080858703121561536257600080fd5b61536b85614b6a565b93506020850135925061538060408601614b6a565b915061538e60608601614b6a565b905092959194509250565b600080604083850312156153ac57600080fd5b82356001600160401b038111156153c257600080fd5b6153ce85828601614e41565b95602094909401359450505050565b600080604083850312156153f057600080fd5b8235915061540060208401614b6a565b90509250929050565b60208082526058908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2070656e60408201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560608201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608082015260a00190565b6020808252604c908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760608201526b040e6e8c2e8ca40c4c2e8c6d60a31b608082015260a00190565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786060820152621a5cdd60ea1b608082015260a00190565b6020808252605d908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060608201527f7468616e2063757272656e744c61737456657269666965644261746368000000608082015260a00190565b60208082526057908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2066696e60408201527f616c4e65774261746368206d75737420626520626967676572207468616e206360608201527f757272656e744c61737456657269666965644261746368000000000000000000608082015260a00190565b6000825161567f818460208701614bdb565b9190910192915050565b60006020828403121561569b57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826156c7576156c76156a2565b500690565b600181811c908216806156e057607f821691505b60208210810361570057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561578157615781615749565b01949350505050565b60208082526045908201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361588f5761588f615749565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b60006001820161591257615912615749565b5060010190565b60006001600160401b038381169083168181101561593957615939615749565b039392505050565b60008282101561595357615953615749565b500390565b600081600019048311821515161561597257615972615749565b500290565b601f82111561494a57600081815260208120601f850160051c8101602086101561599e5750805b601f850160051c820191505b8181101561406c578281556001016159aa565b81516001600160401b038111156159d6576159d6614d8e565b6159ea816159e484546156cc565b84615977565b602080601f831160018114615a1f5760008415615a075750858301515b600019600386901b1c1916600185901b17855561406c565b600085815260208120601f198616915b82811015615a4e57888601518255948401946001909101908401615a2f565b5085821015615a6c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615a8b57615a8b6156a2565b500490565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b60008219821115615b0c57615b0c615749565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b0383166020820152606060408201819052600090615bf590830184614c07565b95945050505050565b60006001600160401b0380841680615c1857615c186156a2565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615c5c57848483379084018281529284019290600101615c3c565b5050828760c0870137610100850181815286935091505b6001811015615c92578251825260209283019290910190600101615c73565b50505095945050505050565b600060208284031215615cb057600080fd5b8151614c46816151fb565b600181815b80851115615cf6578160001904821115615cdc57615cdc615749565b80851615615ce957918102915b93841c9390800290615cc0565b509250929050565b600082615d0d57506001614c5e565b81615d1a57506000614c5e565b8160018114615d305760028114615d3a57615d56565b6001915050614c5e565b60ff841115615d4b57615d4b615749565b50506001821b614c5e565b5060208310610133831016604e8410600b8410161715615d79575081810a614c5e565b615d838383615cbb565b8060001904821115615d9757615d97615749565b029392505050565b6000614c468383615cfe56fe506f6c79676f6e5a4b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a4b45564d3a3a70726f76654e6f6e44657465726d696e6973a2646970667358221220d878b906b02201090327f4c5d4b1892b9ce9da9cbcb1a21999e46f8bba7bf21864736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106104125760003560e01c806396dc3d3911610220578063cfa8ed4711610130578063e7a7ed02116100b8578063f14916d611610087578063f14916d6146109e2578063f2fde38b146109f5578063f851a44014610a08578063f8b823e414610a1b578063fe16564f14610a2457600080fd5b8063e7a7ed021461098f578063e8bf92ed146109a9578063eaeb077b146109bc578063edc41121146109cf57600080fd5b8063d939b315116100ff578063d939b3151461093e578063dbc1697614610958578063e0d1744114610960578063e11f3f1814610973578063e217cfd61461098657600080fd5b8063cfa8ed47146108ea578063d02103ca14610904578063d8d1091b14610917578063d8f54db01461092a57600080fd5b8063ab9fc5ef116101b3578063b6b0b09711610182578063b6b0b0971461088f578063c0cad302146108a9578063c0ed84e0146108bc578063c89e42df146108c4578063cf136306146108d757600080fd5b8063ab9fc5ef146107e3578063adc879e9146107ed578063afd23cbe14610807578063b4d63f581461082f57600080fd5b80639eb831b9116101ef5780639eb831b9146107a85780639f0d039d146107b0578063a3c573eb146107b8578063aa58bad6146107cb57600080fd5b806396dc3d391461076757806399f5634e1461077a5780639b796760146107825780639c9f3dfe1461079557600080fd5b80634a910e6a11610326578063715018a6116102ae578063837a47381161027d578063837a4738146106b1578063841b24d71461071f5780638b48931e146107395780638c4a0af7146107435780638da5cb5b1461075657600080fd5b8063715018a6146106705780637215541a1461067857806375c508b31461068b5780637fcb36531461069e57600080fd5b8063574f649e116102f5578063574f649e1461060457806360943d6a146106175780636b8616ce1461062a5780636ff512cc1461064a578063704b6c021461065d57600080fd5b80634a910e6a146105b65780635392c5e0146105c9578063542028d5146105e95780635437988d146105f157600080fd5b80632d0889d3116103a9578063423fa85611610378578063423fa85614610542578063456052671461055c578063458c0477146105765780634834a343146105895780634a1a89a71461059c57600080fd5b80632d0889d314610500578063383b3be814610509578063394218e91461051c5780633c1582671461052f57600080fd5b80631816b7e5116103e55780631816b7e51461048457806319d8ac6114610497578063220d7899146104c257806329878983146104d557600080fd5b80630eaa86ea14610417578063107bf28c1461043d57806310a01a721461045257806315064c9614610467575b600080fd5b61042a610425366004614b86565b610a37565b6040519081526020015b60405180910390f35b610445610c18565b6040516104349190614c33565b610465610460366004614c75565b610ca6565b005b6065546104749060ff1681565b6040519015158152602001610434565b610465610492366004614d02565b610ef0565b6068546104aa906001600160401b031681565b6040516001600160401b039091168152602001610434565b6104456104d0366004614d26565b611016565b606a546104e8906001600160a01b031681565b6040516001600160a01b039091168152602001610434565b61042a61ea6081565b610474610517366004614d73565b6111bc565b61046561052a366004614d73565b611203565b61046561053d366004614eb0565b611352565b6068546104aa90600160401b90046001600160401b031681565b6068546104aa90600160801b90046001600160401b031681565b6072546104aa906001600160401b031681565b610465610597366004614c75565b611b66565b6072546104aa90600160401b90046001600160401b031681565b6104656105c4366004614d73565b611eaf565b61042a6105d7366004614d73565b606d6020526000908152604090205481565b61044561214a565b6104656105ff366004614fdb565b612157565b61042a610612366004614ff8565b612181565b61046561062536600461506d565b6121c4565b61042a610638366004614d73565b60666020526000908152604090205481565b610465610658366004614fdb565b612534565b61046561066b366004614fdb565b6125b8565b610465612630565b610465610686366004614d73565b612644565b610465610699366004615144565b6128bc565b6069546104aa906001600160401b031681565b6106f46106bf3660046151e2565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610434565b6072546104aa90600160c01b90046001600160401b031681565b6104aa62093a8081565b610465610751366004615209565b61294b565b6033546001600160a01b03166104e8565b610465610775366004614d73565b6129c2565b61042a6129ed565b610465610790366004614d73565b612ad0565b6104656107a3366004614d73565b612b05565b61042a600c81565b60745461042a565b6070546104e8906001600160a01b031681565b6065546104aa9061010090046001600160401b031681565b6104aa6206978081565b606c546104aa90600160a81b90046001600160401b031681565b60655461081c90600160481b900461ffff1681565b60405161ffff9091168152602001610434565b61086a61083d366004614d73565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610434565b6065546104e890600160581b90046001600160a01b031681565b6104656108b7366004615226565b612c4b565b6104aa612c63565b6104656108d2366004615226565b612cb0565b6104656108e5366004614d73565b612d16565b6069546104e890600160401b90046001600160a01b031681565b606c546104e8906001600160a01b031681565b61046561092536600461525a565b612d97565b606c5461047490600160a01b900460ff1681565b6072546104aa90600160801b90046001600160401b031681565b610465613261565b61046561096e36600461534c565b61331d565b610465610981366004615144565b61338f565b6104aa6103e881565b6068546104aa90600160c01b90046001600160401b031681565b606b546104e8906001600160a01b031681565b6104656109ca366004615399565b6134d4565b6104656109dd366004614c75565b6137fc565b6104656109f0366004614fdb565b61391c565b610465610a03366004614fdb565b613994565b6073546104e8906001600160a01b031681565b61042a60745481565b610465610a323660046153dd565b613a0a565b6000806000610a44612c63565b90506001600160401b03881615610ae1576072546001600160401b039081169089161115610a8d5760405162461bcd60e51b8152600401610a8490615409565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610adb5760405162461bcd60e51b8152600401610a849061548c565b50610b4b565b6001600160401b0387166000908152606d6020526040902054915081610b195760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316876001600160401b03161115610b4b5760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316866001600160401b031611610b7c5760405162461bcd60e51b8152600401610a84906155ea565b6000610b8b8888888689611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051610bc0919061566d565b602060405180830381855afa158015610bdd573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c009190615689565b610c0a91906156b8565b9a9950505050505050505050565b606f8054610c25906156cc565b80601f0160208091040260200160405190810160405280929190818152602001828054610c51906156cc565b8015610c9e5780601f10610c7357610100808354040283529160200191610c9e565b820191906000526020600020905b815481529060010190602001808311610c8157829003601f168201915b505050505081565b610cae613a2c565b600080610cb9612c63565b90506001600160401b038a1615610d4d576072546001600160401b03908116908b161115610cf95760405162461bcd60e51b8152600401610a8490615409565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610d475760405162461bcd60e51b8152600401610a849061548c565b50610db7565b6001600160401b0389166000908152606d6020526040902054915081610d855760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316896001600160401b03161115610db75760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316886001600160401b031611610de85760405162461bcd60e51b8152600401610a84906155ea565b6000610df78a8a8a868b611016565b6069805467ffffffffffffffff19166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610e4557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610e8b57600080fd5b505af1158015610e9f573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610f1a5760405162461bcd60e51b8152600401610a8490615706565b6103e88161ffff16118015610f3457506104008161ffff16105b610fb95760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a4b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a401610a84565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b0380861660008181526067602052604080822054938816825290205460609291158061104857508115155b6110bc576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a84565b80611131576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a84565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b03828116600090815260716020526040812054909242926111f292600160801b9092048116911661575f565b6001600160401b0316111592915050565b6073546001600160a01b0316331461122d5760405162461bcd60e51b8152600401610a8490615706565b62093a806001600160401b03821611156112595760405162461bcd60e51b8152600401610a849061578a565b60655460ff166112fc576072546001600160401b03600160c01b9091048116908216106112fc5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a4b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a401610a84565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a19060200161100b565b60655460ff16156113755760405162461bcd60e51b8152600401610a84906157f5565b606954600160401b90046001600160a01b031633146113fc5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e6365720000000000006064820152608401610a84565b8051806114715760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e636520312062617463680000006064820152608401610a84565b6103e881106114ea576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e7920626174636865736064820152608401610a84565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561198a57600087828151811061153d5761153d61585d565b60200260200101519050600081606001516001600160401b031611156116f6578361156781615873565b94505060008160000151805190602001208260200151836060015160405160200161159493929190615899565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461163a5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d617463680000006064820152608401610a84565b81606001516001600160401b031682604001516001600160401b031610156116f05760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a401610a84565b5061187d565b6020810151158061177f5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916117399160040190815260200190565b6020604051808303816000875af1158015611758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177c9190615689565b15155b6117f15760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d7573742065786973740000000000006064820152608401610a84565b80515161ea601161187d5760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a401610a84565b856001600160401b031681604001516001600160401b0316101580156118b057504281604001516001600160401b031611155b6119225760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e67650000006064820152608401610a84565b805180516020918201208183015160408085015190516119499488949392913391016158bc565b604051602081830303815290604052805190602001209250848061196c90615873565b9550508060400151955050808061198290615900565b915050611521565b506068546001600160401b03600160c01b90910481169083161115611a0f5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b6064820152608401610a84565b606854600090611a2f90600160801b90046001600160401b031684615919565b611a42906001600160401b031687615941565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611b1790339030908490611afc9190615958565b606554600160581b90046001600160a01b0316929190613a86565b611b1f613af1565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b895760405162461bcd60e51b8152600401610a84906157f5565b6072546001600160401b038781166000908152606760205260409020600101544292611bc092600160c01b9091048116911661575f565b6001600160401b03161115611c495760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a401610a84565b6103e8611c568888615919565b6001600160401b031610611cd25760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e792062617463686573000000006064820152608401610a84565b611ce28888888888888888613b91565b611ceb86613e8e565b607254600160801b90046001600160401b0316600003611db3576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615611d5057607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d9657600080fd5b505af1158015611daa573d6000803e3d6000fd5b50505050611e64565b611dbb613af1565b607280546001600160401b0316906000611dd483615873565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611edc57506072546001600160401b03600160401b9091048116908216115b8015611ef757506072546001600160401b0390811690821611155b611f755760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a401610a84565b606a546001600160a01b0316331461201f57611f90816111bc565b61201f5760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a401610a84565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b1580156120dc57600080fd5b505af11580156120f0573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e846002015460405161213d91815260200190565b60405180910390a3505050565b606e8054610c25906156cc565b61215f613a2c565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b60008585805190602001208585856040516020016121a39594939291906158bc565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff16158080156121e45750600054600160ff909116105b806121fe5750303b1580156121fe575060005460ff166001145b6122615760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a84565b6000805460ff191660011790558015612284576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a8416179055607080549091169188169190911790556123016020860186614fdb565b607380546001600160a01b0319166001600160a01b03929092169190911790556123316060860160408701614fdb565b606980546001600160a01b0392909216600160401b02600160401b600160e01b031990921691909117905561236c60c0860160a08701614fdb565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa7113568490556123c960e0860160c08701614d73565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556124006040860160208701614d73565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561243c6080860160608701614d73565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b1990921691909117905561247860a0860160808701615209565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e6124a084826159bd565b50606f6124ad83826159bd565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124e3614074565b8015612529576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b0316331461255e5760405162461bcd60e51b8152600401610a8490615706565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161100b565b6073546001600160a01b031633146125e25760405162461bcd60e51b8152600401610a8490615706565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a19060200161100b565b612638613a2c565b61264260006140e4565b565b6033546001600160a01b031633146128b1576072546000906001600160401b03161561269557506072546001600160401b03908116600090815260716020526040902054600160401b9004166126a3565b506069546001600160401b03165b80826001600160401b0316116127215760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c7265616479207665726966696564000000006064820152608401610a84565b6068546001600160401b03600160401b90910481169083161180159061276357506001600160401b038083166000908152606760205260409020600101541615155b6127ee5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a401610a84565b6001600160401b03808316600090815260676020526040902060010154429161281c9162093a80911661575f565b6001600160401b031611156128af5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a401610a84565b505b6128b9614136565b50565b60655460ff16156128df5760405162461bcd60e51b8152600401610a84906157f5565b6128f08989898989898989896141a6565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1612529614136565b6073546001600160a01b031633146129755760405162461bcd60e51b8152600401610a8490615706565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061100b90831515815260200190565b6129ca613a2c565b6069805467ffffffffffffffff19166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a649190615689565b90506000612a70612c63565b6068546001600160401b03600160401b8204811691612aa091600160801b8204811691600160c01b900416615919565b612aaa919061575f565b612ab49190615919565b6001600160401b03169050612ac98183615a7c565b9250505090565b612ad8613a2c565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612b2f5760405162461bcd60e51b8152600401610a8490615706565b62093a806001600160401b0382161115612b5b5760405162461bcd60e51b8152600401610a849061578a565b60655460ff16612bf0576072546001600160401b03600160801b909104811690821610612bf05760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f776572006064820152608401610a84565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c759060200161100b565b612c53613a2c565b606f612c5f82826159bd565b5050565b6072546000906001600160401b031615612ca057506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612cda5760405162461bcd60e51b8152600401610a8490615706565b606e612ce682826159bd565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161100b9190614c33565b6073546001600160a01b03163314612d405760405162461bcd60e51b8152600401610a8490615706565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f9060200161100b565b60655460ff1615612dba5760405162461bcd60e51b8152600401610a84906157f5565b606c54600160a01b900460ff161515600114612de85760405162461bcd60e51b8152600401610a8490615a90565b805180612e4b5760405162461bcd60e51b815260206004820152603d6024820152600080516020615dac83398151915260448201527f3a204d75737420666f726365206174206c6561737420312062617463680000006064820152608401610a84565b6103e88110612ebc5760405162461bcd60e51b81526020600482015260436024820152600080516020615dac83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a401610a84565b6068546001600160401b03600160c01b8204811691612ee4918491600160801b900416615af9565b1115612f3e5760405162461bcd60e51b81526020600482015260356024820152600080516020615dac8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b6064820152608401610a84565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b8481101561316a576000868281518110612f8b57612f8b61585d565b602002602001015190508380612fa090615873565b945050600081600001518051906020012082602001518360400151604051602001612fcd93929190615899565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461306c5760405162461bcd60e51b81526020600482015260426024820152600080516020615dac83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a401610a84565b613077600188615941565b830361310c5742620697808360400151613091919061575f565b6001600160401b0316111561310c5760405162461bcd60e51b81526020600482015260476024820152600080516020615dac83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a401610a84565b815180516020918201208184015160405161312f938893929142913391016158bc565b604051602081830303815290604052805190602001209350858061315290615873565b9650505050808061316290615900565b915050612f6f565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166132835760405162461bcd60e51b8152600401610a8490615b11565b6073546001600160a01b031633146132ad5760405162461bcd60e51b8152600401610a8490615706565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156132fd57600080fd5b505af1158015613311573d6000803e3d6000fd5b50505050612642614821565b613325613a2c565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133b95760405162461bcd60e51b8152600401610a8490615b6e565b6133ca8989898989898989896141a6565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561341557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561345b57600080fd5b505af115801561346f573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff16156134f75760405162461bcd60e51b8152600401610a84906157f5565b606c54600160a01b900460ff1615156001146135255760405162461bcd60e51b8152600401610a8490615a90565b600061353060745490565b9050818111156135955760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b6064820152608401610a84565b61ea608351106136055760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b6064820152608401610a84565b60655461362490600160581b90046001600160a01b0316333084613a86565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa15801561366e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136929190615689565b60688054919250600160c01b9091046001600160401b03169060186136b683615873565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016136f793929190615899565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361379b57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26137f6565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516137ed93929190615bcb565b60405180910390a25b50505050565b606a546001600160a01b031633146138265760405162461bcd60e51b8152600401610a8490615b6e565b6138368888888888888888613b91565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561388157607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156138c757600080fd5b505af11580156138db573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e9d565b6073546001600160a01b031633146139465760405162461bcd60e51b8152600401610a8490615706565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca9060200161100b565b61399c613a2c565b6001600160a01b038116613a015760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a84565b6128b9816140e4565b613a12613a2c565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b031633146126425760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a84565b6040516001600160a01b03808516602483015283166044820152606481018290526137f69085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614878565b6072546001600160401b03600160401b820481169116111561264257607254600090613b2e90600160401b90046001600160401b0316600161575f565b9050613b39816111bc565b156128b957607254600090600290613b5b9084906001600160401b0316615919565b613b659190615bfe565b613b6f908361575f565b9050613b7a816111bc565b15613b8857612c5f81611eaf565b612c5f82611eaf565b600080613b9c612c63565b90506001600160401b038a1615613c30576072546001600160401b03908116908b161115613bdc5760405162461bcd60e51b8152600401610a8490615409565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c2a5760405162461bcd60e51b8152600401610a849061548c565b50613c9a565b6001600160401b0389166000908152606d6020526040902054915081613c685760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316896001600160401b03161115613c9a5760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316886001600160401b031611613ccb5760405162461bcd60e51b8152600401610a84906155ea565b6000613cda8a8a8a868b611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051613d0f919061566d565b602060405180830381855afa158015613d2c573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613d4f9190615689565b613d5991906156b8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613d9d918b918b918b9190600401615c24565b602060405180830381865afa158015613dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dde9190615c9e565b613e3d5760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20494e5660448201526920a624a22fa82927a7a360b11b6064820152608401610a84565b613e8033613e4b858d615919565b6001600160401b0316613e5c6129ed565b613e669190615958565b606554600160581b90046001600160a01b0316919061494f565b505050505050505050505050565b6000613e98612c63565b905081600080613ea88484615919565b6001600160401b031690505b836001600160401b0316836001600160401b031614613f5a576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613f04911642615941565b1115613f3f576001810154613f2990600160401b90046001600160401b031686615919565b613f3c906001600160401b031684615af9565b92505b60010154600160401b90046001600160401b03169250613eb4565b6000613f668383615941565b905082811015613fe0576000613f7c8285615941565b9050600c8111613f8c5780613f8f565b600c5b9050613f9c816003615958565b613fa790600a615d9f565b606554613fc0908390600160481b900461ffff16615d9f565b607454613fcd9190615958565b613fd79190615a7c565b6074555061406c565b6000613fec8483615941565b9050600c8111613ffc5780613fff565b600c5b9050600061400e826003615958565b61401990600a615d9f565b606554614032908490600160481b900461ffff16615d9f565b60745461403f9190615958565b6140499190615a7c565b90508060745460745461405c9190615958565b6140669190615a7c565b60745550505b505050505050565b600054610100900460ff166140df5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a84565b612642335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561418657600080fd5b505af115801561419a573d6000803e3d6000fd5b5050505061264261497f565b60006001600160401b038a1615614321576072546001600160401b03908116908b1611156142655760405162461bcd60e51b815260206004820152606c6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c401610a84565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b909204161461431b5760405162461bcd60e51b81526020600482015260606024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a401610a84565b50614475565b506001600160401b0387166000908152606d6020526040902054806143c25760405162461bcd60e51b81526020600482015260576024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a401610a84565b6069546001600160401b0390811690891611156144755760405162461bcd60e51b81526020600482015260716024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c401610a84565b6072546001600160401b03908116908a16118015906144a55750896001600160401b0316896001600160401b0316115b80156144c657506072546001600160401b03600160401b9091048116908a16115b61453e5760405162461bcd60e51b815260206004820152604f6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a401610a84565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146145fe5760405162461bcd60e51b815260206004820152606a6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c401610a84565b600061460d898989858a611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051614642919061566d565b602060405180830381855afa15801561465f573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906146829190615689565b61468c91906156b8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916146d0918a918a918a9190600401615c24565b602060405180830381865afa1580156146ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147119190615c9e565b6147715760405162461bcd60e51b815260206004820152603e6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20494e56414c49445f50524f4f4600006064820152608401610a84565b6001600160401b038b16600090815260716020526040902060020154879003613e805760405162461bcd60e51b81526020600482015260626024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c401610a84565b60655460ff166148435760405162461bcd60e51b8152600401610a8490615b11565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006148cd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166149da9092919063ffffffff16565b80519091501561494a57808060200190518101906148eb9190615c9e565b61494a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a84565b505050565b6040516001600160a01b03831660248201526044810182905261494a90849063a9059cbb60e01b90606401613aba565b60655460ff16156149a25760405162461bcd60e51b8152600401610a84906157f5565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60606149e984846000856149f1565b949350505050565b606082471015614a525760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a84565b600080866001600160a01b03168587604051614a6e919061566d565b60006040518083038185875af1925050503d8060008114614aab576040519150601f19603f3d011682016040523d82523d6000602084013e614ab0565b606091505b5091509150614ac187838387614acc565b979650505050505050565b60608315614b3b578251600003614b34576001600160a01b0385163b614b345760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a84565b50816149e9565b6149e98383815115614b505781518083602001fd5b8060405162461bcd60e51b8152600401610a849190614c33565b80356001600160401b0381168114614b8157600080fd5b919050565b600080600080600060a08688031215614b9e57600080fd5b614ba786614b6a565b9450614bb560208701614b6a565b9350614bc360408701614b6a565b94979396509394606081013594506080013592915050565b60005b83811015614bf6578181015183820152602001614bde565b838111156137f65750506000910152565b60008151808452614c1f816020860160208601614bdb565b601f01601f19169290920160200192915050565b602081526000614c466020830184614c07565b9392505050565b8060408101831015614c5e57600080fd5b92915050565b8060808101831015614c5e57600080fd5b6000806000806000806000806101a0898b031215614c9257600080fd5b614c9b89614b6a565b9750614ca960208a01614b6a565b9650614cb760408a01614b6a565b95506060890135945060808901359350614cd48a60a08b01614c4d565b9250614ce38a60e08b01614c64565b9150614cf38a6101608b01614c4d565b90509295985092959890939650565b600060208284031215614d1457600080fd5b813561ffff81168114614c4657600080fd5b600080600080600060a08688031215614d3e57600080fd5b614d4786614b6a565b9450614d5560208701614b6a565b94979496505050506040830135926060810135926080909101359150565b600060208284031215614d8557600080fd5b614c4682614b6a565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614dc657614dc6614d8e565b60405290565b604051606081016001600160401b0381118282101715614dc657614dc6614d8e565b604051601f8201601f191681016001600160401b0381118282101715614e1657614e16614d8e565b604052919050565b60006001600160401b03821115614e3757614e37614d8e565b5060051b60200190565b600082601f830112614e5257600080fd5b81356001600160401b03811115614e6b57614e6b614d8e565b614e7e601f8201601f1916602001614dee565b818152846020838601011115614e9357600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614ec357600080fd5b82356001600160401b0380821115614eda57600080fd5b818501915085601f830112614eee57600080fd5b8135614f01614efc82614e1e565b614dee565b81815260059190911b83018401908481019088831115614f2057600080fd5b8585015b83811015614fb957803585811115614f3c5760008081fd5b86016080818c03601f1901811315614f545760008081fd5b614f5c614da4565b8983013588811115614f6e5760008081fd5b614f7c8e8c83870101614e41565b8252506040808401358b8301526060614f96818601614b6a565b82840152614fa5848601614b6a565b908301525085525050918601918601614f24565b5098975050505050505050565b6001600160a01b03811681146128b957600080fd5b600060208284031215614fed57600080fd5b8135614c4681614fc6565b600080600080600060a0868803121561501057600080fd5b8535945060208601356001600160401b0381111561502d57600080fd5b61503988828901614e41565b9450506040860135925061504f60608701614b6a565b9150608086013561505f81614fc6565b809150509295509295909350565b600080600080600080600080888a036101c081121561508b57600080fd5b893561509681614fc6565b985060208a01356150a681614fc6565b975060408a01356150b681614fc6565b965060608a01356150c681614fc6565b955060e0607f19820112156150da57600080fd5b5060808901935061016089013592506101808901356001600160401b038082111561510457600080fd5b6151108c838d01614e41565b93506101a08b013591508082111561512757600080fd5b506151348b828c01614e41565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c03121561516357600080fd5b61516c8a614b6a565b985061517a60208b01614b6a565b975061518860408b01614b6a565b965061519660608b01614b6a565b955060808a0135945060a08a013593506151b38b60c08c01614c4d565b92506151c38b6101008c01614c64565b91506151d38b6101808c01614c4d565b90509295985092959850929598565b6000602082840312156151f457600080fd5b5035919050565b80151581146128b957600080fd5b60006020828403121561521b57600080fd5b8135614c46816151fb565b60006020828403121561523857600080fd5b81356001600160401b0381111561524e57600080fd5b6149e984828501614e41565b6000602080838503121561526d57600080fd5b82356001600160401b038082111561528457600080fd5b818501915085601f83011261529857600080fd5b81356152a6614efc82614e1e565b81815260059190911b830184019084810190888311156152c557600080fd5b8585015b83811015614fb9578035858111156152e15760008081fd5b86016060818c03601f19018113156152f95760008081fd5b615301614dcc565b89830135888111156153135760008081fd5b6153218e8c83870101614e41565b8252506040808401358b830152615339838501614b6a565b90820152855250509186019186016152c9565b6000806000806080858703121561536257600080fd5b61536b85614b6a565b93506020850135925061538060408601614b6a565b915061538e60608601614b6a565b905092959194509250565b600080604083850312156153ac57600080fd5b82356001600160401b038111156153c257600080fd5b6153ce85828601614e41565b95602094909401359450505050565b600080604083850312156153f057600080fd5b8235915061540060208401614b6a565b90509250929050565b60208082526058908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2070656e60408201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560608201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608082015260a00190565b6020808252604c908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760608201526b040e6e8c2e8ca40c4c2e8c6d60a31b608082015260a00190565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786060820152621a5cdd60ea1b608082015260a00190565b6020808252605d908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060608201527f7468616e2063757272656e744c61737456657269666965644261746368000000608082015260a00190565b60208082526057908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2066696e60408201527f616c4e65774261746368206d75737420626520626967676572207468616e206360608201527f757272656e744c61737456657269666965644261746368000000000000000000608082015260a00190565b6000825161567f818460208701614bdb565b9190910192915050565b60006020828403121561569b57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826156c7576156c76156a2565b500690565b600181811c908216806156e057607f821691505b60208210810361570057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561578157615781615749565b01949350505050565b60208082526045908201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361588f5761588f615749565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b60006001820161591257615912615749565b5060010190565b60006001600160401b038381169083168181101561593957615939615749565b039392505050565b60008282101561595357615953615749565b500390565b600081600019048311821515161561597257615972615749565b500290565b601f82111561494a57600081815260208120601f850160051c8101602086101561599e5750805b601f850160051c820191505b8181101561406c578281556001016159aa565b81516001600160401b038111156159d6576159d6614d8e565b6159ea816159e484546156cc565b84615977565b602080601f831160018114615a1f5760008415615a075750858301515b600019600386901b1c1916600185901b17855561406c565b600085815260208120601f198616915b82811015615a4e57888601518255948401946001909101908401615a2f565b5085821015615a6c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615a8b57615a8b6156a2565b500490565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b60008219821115615b0c57615b0c615749565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b0383166020820152606060408201819052600090615bf590830184614c07565b95945050505050565b60006001600160401b0380841680615c1857615c186156a2565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615c5c57848483379084018281529284019290600101615c3c565b5050828760c0870137610100850181815286935091505b6001811015615c92578251825260209283019290910190600101615c73565b50505095945050505050565b600060208284031215615cb057600080fd5b8151614c46816151fb565b600181815b80851115615cf6578160001904821115615cdc57615cdc615749565b80851615615ce957918102915b93841c9390800290615cc0565b509250929050565b600082615d0d57506001614c5e565b81615d1a57506000614c5e565b8160018114615d305760028114615d3a57615d56565b6001915050614c5e565b60ff841115615d4b57615d4b615749565b50506001821b614c5e565b5060208310610133831016604e8410600b8410161715615d79575081810a614c5e565b615d838383615cbb565b8060001904821115615d9757615d97615749565b029392505050565b6000614c468383615cfe56fe506f6c79676f6e5a4b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a4b45564d3a3a70726f76654e6f6e44657465726d696e6973a2646970667358221220d878b906b02201090327f4c5d4b1892b9ce9da9cbcb1a21999e46f8bba7bf21864736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50615e2180620000216000396000f3fe608060405234801561001057600080fd5b50600436106104125760003560e01c806396dc3d3911610220578063cfa8ed4711610130578063e7a7ed02116100b8578063f14916d611610087578063f14916d6146109e2578063f2fde38b146109f5578063f851a44014610a08578063f8b823e414610a1b578063fe16564f14610a2457600080fd5b8063e7a7ed021461098f578063e8bf92ed146109a9578063eaeb077b146109bc578063edc41121146109cf57600080fd5b8063d939b315116100ff578063d939b3151461093e578063dbc1697614610958578063e0d1744114610960578063e11f3f1814610973578063e217cfd61461098657600080fd5b8063cfa8ed47146108ea578063d02103ca14610904578063d8d1091b14610917578063d8f54db01461092a57600080fd5b8063ab9fc5ef116101b3578063b6b0b09711610182578063b6b0b0971461088f578063c0cad302146108a9578063c0ed84e0146108bc578063c89e42df146108c4578063cf136306146108d757600080fd5b8063ab9fc5ef146107e3578063adc879e9146107ed578063afd23cbe14610807578063b4d63f581461082f57600080fd5b80639eb831b9116101ef5780639eb831b9146107a85780639f0d039d146107b0578063a3c573eb146107b8578063aa58bad6146107cb57600080fd5b806396dc3d391461076757806399f5634e1461077a5780639b796760146107825780639c9f3dfe1461079557600080fd5b80634a910e6a11610326578063715018a6116102ae578063837a47381161027d578063837a4738146106b1578063841b24d71461071f5780638b48931e146107395780638c4a0af7146107435780638da5cb5b1461075657600080fd5b8063715018a6146106705780637215541a1461067857806375c508b31461068b5780637fcb36531461069e57600080fd5b8063574f649e116102f5578063574f649e1461060457806360943d6a146106175780636b8616ce1461062a5780636ff512cc1461064a578063704b6c021461065d57600080fd5b80634a910e6a146105b65780635392c5e0146105c9578063542028d5146105e95780635437988d146105f157600080fd5b80632d0889d3116103a9578063423fa85611610378578063423fa85614610542578063456052671461055c578063458c0477146105765780634834a343146105895780634a1a89a71461059c57600080fd5b80632d0889d314610500578063383b3be814610509578063394218e91461051c5780633c1582671461052f57600080fd5b80631816b7e5116103e55780631816b7e51461048457806319d8ac6114610497578063220d7899146104c257806329878983146104d557600080fd5b80630eaa86ea14610417578063107bf28c1461043d57806310a01a721461045257806315064c9614610467575b600080fd5b61042a610425366004614b86565b610a37565b6040519081526020015b60405180910390f35b610445610c18565b6040516104349190614c33565b610465610460366004614c75565b610ca6565b005b6065546104749060ff1681565b6040519015158152602001610434565b610465610492366004614d02565b610ef0565b6068546104aa906001600160401b031681565b6040516001600160401b039091168152602001610434565b6104456104d0366004614d26565b611016565b606a546104e8906001600160a01b031681565b6040516001600160a01b039091168152602001610434565b61042a61ea6081565b610474610517366004614d73565b6111bc565b61046561052a366004614d73565b611203565b61046561053d366004614eb0565b611352565b6068546104aa90600160401b90046001600160401b031681565b6068546104aa90600160801b90046001600160401b031681565b6072546104aa906001600160401b031681565b610465610597366004614c75565b611b66565b6072546104aa90600160401b90046001600160401b031681565b6104656105c4366004614d73565b611eaf565b61042a6105d7366004614d73565b606d6020526000908152604090205481565b61044561214a565b6104656105ff366004614fdb565b612157565b61042a610612366004614ff8565b612181565b61046561062536600461506d565b6121c4565b61042a610638366004614d73565b60666020526000908152604090205481565b610465610658366004614fdb565b612534565b61046561066b366004614fdb565b6125b8565b610465612630565b610465610686366004614d73565b612644565b610465610699366004615144565b6128bc565b6069546104aa906001600160401b031681565b6106f46106bf3660046151e2565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610434565b6072546104aa90600160c01b90046001600160401b031681565b6104aa62093a8081565b610465610751366004615209565b61294b565b6033546001600160a01b03166104e8565b610465610775366004614d73565b6129c2565b61042a6129ed565b610465610790366004614d73565b612ad0565b6104656107a3366004614d73565b612b05565b61042a600c81565b60745461042a565b6070546104e8906001600160a01b031681565b6065546104aa9061010090046001600160401b031681565b6104aa6206978081565b606c546104aa90600160a81b90046001600160401b031681565b60655461081c90600160481b900461ffff1681565b60405161ffff9091168152602001610434565b61086a61083d366004614d73565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610434565b6065546104e890600160581b90046001600160a01b031681565b6104656108b7366004615226565b612c4b565b6104aa612c63565b6104656108d2366004615226565b612cb0565b6104656108e5366004614d73565b612d16565b6069546104e890600160401b90046001600160a01b031681565b606c546104e8906001600160a01b031681565b61046561092536600461525a565b612d97565b606c5461047490600160a01b900460ff1681565b6072546104aa90600160801b90046001600160401b031681565b610465613261565b61046561096e36600461534c565b61331d565b610465610981366004615144565b61338f565b6104aa6103e881565b6068546104aa90600160c01b90046001600160401b031681565b606b546104e8906001600160a01b031681565b6104656109ca366004615399565b6134d4565b6104656109dd366004614c75565b6137fc565b6104656109f0366004614fdb565b61391c565b610465610a03366004614fdb565b613994565b6073546104e8906001600160a01b031681565b61042a60745481565b610465610a323660046153dd565b613a0a565b6000806000610a44612c63565b90506001600160401b03881615610ae1576072546001600160401b039081169089161115610a8d5760405162461bcd60e51b8152600401610a8490615409565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610adb5760405162461bcd60e51b8152600401610a849061548c565b50610b4b565b6001600160401b0387166000908152606d6020526040902054915081610b195760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316876001600160401b03161115610b4b5760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316866001600160401b031611610b7c5760405162461bcd60e51b8152600401610a84906155ea565b6000610b8b8888888689611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051610bc0919061566d565b602060405180830381855afa158015610bdd573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c009190615689565b610c0a91906156b8565b9a9950505050505050505050565b606f8054610c25906156cc565b80601f0160208091040260200160405190810160405280929190818152602001828054610c51906156cc565b8015610c9e5780601f10610c7357610100808354040283529160200191610c9e565b820191906000526020600020905b815481529060010190602001808311610c8157829003601f168201915b505050505081565b610cae613a2c565b600080610cb9612c63565b90506001600160401b038a1615610d4d576072546001600160401b03908116908b161115610cf95760405162461bcd60e51b8152600401610a8490615409565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610d475760405162461bcd60e51b8152600401610a849061548c565b50610db7565b6001600160401b0389166000908152606d6020526040902054915081610d855760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316896001600160401b03161115610db75760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316886001600160401b031611610de85760405162461bcd60e51b8152600401610a84906155ea565b6000610df78a8a8a868b611016565b6069805467ffffffffffffffff19166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610e4557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610e8b57600080fd5b505af1158015610e9f573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610f1a5760405162461bcd60e51b8152600401610a8490615706565b6103e88161ffff16118015610f3457506104008161ffff16105b610fb95760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a4b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a401610a84565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b0380861660008181526067602052604080822054938816825290205460609291158061104857508115155b6110bc576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a84565b80611131576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a84565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b03828116600090815260716020526040812054909242926111f292600160801b9092048116911661575f565b6001600160401b0316111592915050565b6073546001600160a01b0316331461122d5760405162461bcd60e51b8152600401610a8490615706565b62093a806001600160401b03821611156112595760405162461bcd60e51b8152600401610a849061578a565b60655460ff166112fc576072546001600160401b03600160c01b9091048116908216106112fc5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a4b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a401610a84565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a19060200161100b565b60655460ff16156113755760405162461bcd60e51b8152600401610a84906157f5565b606954600160401b90046001600160a01b031633146113fc5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e6365720000000000006064820152608401610a84565b8051806114715760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e636520312062617463680000006064820152608401610a84565b6103e881106114ea576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e7920626174636865736064820152608401610a84565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561198a57600087828151811061153d5761153d61585d565b60200260200101519050600081606001516001600160401b031611156116f6578361156781615873565b94505060008160000151805190602001208260200151836060015160405160200161159493929190615899565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461163a5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d617463680000006064820152608401610a84565b81606001516001600160401b031682604001516001600160401b031610156116f05760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a401610a84565b5061187d565b6020810151158061177f5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916117399160040190815260200190565b6020604051808303816000875af1158015611758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177c9190615689565b15155b6117f15760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d7573742065786973740000000000006064820152608401610a84565b80515161ea601161187d5760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a401610a84565b856001600160401b031681604001516001600160401b0316101580156118b057504281604001516001600160401b031611155b6119225760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e67650000006064820152608401610a84565b805180516020918201208183015160408085015190516119499488949392913391016158bc565b604051602081830303815290604052805190602001209250848061196c90615873565b9550508060400151955050808061198290615900565b915050611521565b506068546001600160401b03600160c01b90910481169083161115611a0f5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b6064820152608401610a84565b606854600090611a2f90600160801b90046001600160401b031684615919565b611a42906001600160401b031687615941565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611b1790339030908490611afc9190615958565b606554600160581b90046001600160a01b0316929190613a86565b611b1f613af1565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b895760405162461bcd60e51b8152600401610a84906157f5565b6072546001600160401b038781166000908152606760205260409020600101544292611bc092600160c01b9091048116911661575f565b6001600160401b03161115611c495760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a401610a84565b6103e8611c568888615919565b6001600160401b031610611cd25760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e792062617463686573000000006064820152608401610a84565b611ce28888888888888888613b91565b611ceb86613e8e565b607254600160801b90046001600160401b0316600003611db3576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615611d5057607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d9657600080fd5b505af1158015611daa573d6000803e3d6000fd5b50505050611e64565b611dbb613af1565b607280546001600160401b0316906000611dd483615873565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611edc57506072546001600160401b03600160401b9091048116908216115b8015611ef757506072546001600160401b0390811690821611155b611f755760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a401610a84565b606a546001600160a01b0316331461201f57611f90816111bc565b61201f5760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a401610a84565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b1580156120dc57600080fd5b505af11580156120f0573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e846002015460405161213d91815260200190565b60405180910390a3505050565b606e8054610c25906156cc565b61215f613a2c565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b60008585805190602001208585856040516020016121a39594939291906158bc565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff16158080156121e45750600054600160ff909116105b806121fe5750303b1580156121fe575060005460ff166001145b6122615760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a84565b6000805460ff191660011790558015612284576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a8416179055607080549091169188169190911790556123016020860186614fdb565b607380546001600160a01b0319166001600160a01b03929092169190911790556123316060860160408701614fdb565b606980546001600160a01b0392909216600160401b02600160401b600160e01b031990921691909117905561236c60c0860160a08701614fdb565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa7113568490556123c960e0860160c08701614d73565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556124006040860160208701614d73565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561243c6080860160608701614d73565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b1990921691909117905561247860a0860160808701615209565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e6124a084826159bd565b50606f6124ad83826159bd565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124e3614074565b8015612529576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b0316331461255e5760405162461bcd60e51b8152600401610a8490615706565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161100b565b6073546001600160a01b031633146125e25760405162461bcd60e51b8152600401610a8490615706565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a19060200161100b565b612638613a2c565b61264260006140e4565b565b6033546001600160a01b031633146128b1576072546000906001600160401b03161561269557506072546001600160401b03908116600090815260716020526040902054600160401b9004166126a3565b506069546001600160401b03165b80826001600160401b0316116127215760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c7265616479207665726966696564000000006064820152608401610a84565b6068546001600160401b03600160401b90910481169083161180159061276357506001600160401b038083166000908152606760205260409020600101541615155b6127ee5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a401610a84565b6001600160401b03808316600090815260676020526040902060010154429161281c9162093a80911661575f565b6001600160401b031611156128af5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a401610a84565b505b6128b9614136565b50565b60655460ff16156128df5760405162461bcd60e51b8152600401610a84906157f5565b6128f08989898989898989896141a6565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1612529614136565b6073546001600160a01b031633146129755760405162461bcd60e51b8152600401610a8490615706565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061100b90831515815260200190565b6129ca613a2c565b6069805467ffffffffffffffff19166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a649190615689565b90506000612a70612c63565b6068546001600160401b03600160401b8204811691612aa091600160801b8204811691600160c01b900416615919565b612aaa919061575f565b612ab49190615919565b6001600160401b03169050612ac98183615a7c565b9250505090565b612ad8613a2c565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612b2f5760405162461bcd60e51b8152600401610a8490615706565b62093a806001600160401b0382161115612b5b5760405162461bcd60e51b8152600401610a849061578a565b60655460ff16612bf0576072546001600160401b03600160801b909104811690821610612bf05760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f776572006064820152608401610a84565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c759060200161100b565b612c53613a2c565b606f612c5f82826159bd565b5050565b6072546000906001600160401b031615612ca057506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612cda5760405162461bcd60e51b8152600401610a8490615706565b606e612ce682826159bd565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161100b9190614c33565b6073546001600160a01b03163314612d405760405162461bcd60e51b8152600401610a8490615706565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f9060200161100b565b60655460ff1615612dba5760405162461bcd60e51b8152600401610a84906157f5565b606c54600160a01b900460ff161515600114612de85760405162461bcd60e51b8152600401610a8490615a90565b805180612e4b5760405162461bcd60e51b815260206004820152603d6024820152600080516020615dac83398151915260448201527f3a204d75737420666f726365206174206c6561737420312062617463680000006064820152608401610a84565b6103e88110612ebc5760405162461bcd60e51b81526020600482015260436024820152600080516020615dac83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a401610a84565b6068546001600160401b03600160c01b8204811691612ee4918491600160801b900416615af9565b1115612f3e5760405162461bcd60e51b81526020600482015260356024820152600080516020615dac8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b6064820152608401610a84565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b8481101561316a576000868281518110612f8b57612f8b61585d565b602002602001015190508380612fa090615873565b945050600081600001518051906020012082602001518360400151604051602001612fcd93929190615899565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461306c5760405162461bcd60e51b81526020600482015260426024820152600080516020615dac83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a401610a84565b613077600188615941565b830361310c5742620697808360400151613091919061575f565b6001600160401b0316111561310c5760405162461bcd60e51b81526020600482015260476024820152600080516020615dac83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a401610a84565b815180516020918201208184015160405161312f938893929142913391016158bc565b604051602081830303815290604052805190602001209350858061315290615873565b9650505050808061316290615900565b915050612f6f565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166132835760405162461bcd60e51b8152600401610a8490615b11565b6073546001600160a01b031633146132ad5760405162461bcd60e51b8152600401610a8490615706565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156132fd57600080fd5b505af1158015613311573d6000803e3d6000fd5b50505050612642614821565b613325613a2c565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133b95760405162461bcd60e51b8152600401610a8490615b6e565b6133ca8989898989898989896141a6565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561341557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561345b57600080fd5b505af115801561346f573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff16156134f75760405162461bcd60e51b8152600401610a84906157f5565b606c54600160a01b900460ff1615156001146135255760405162461bcd60e51b8152600401610a8490615a90565b600061353060745490565b9050818111156135955760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b6064820152608401610a84565b61ea608351106136055760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b6064820152608401610a84565b60655461362490600160581b90046001600160a01b0316333084613a86565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa15801561366e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136929190615689565b60688054919250600160c01b9091046001600160401b03169060186136b683615873565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016136f793929190615899565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361379b57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26137f6565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516137ed93929190615bcb565b60405180910390a25b50505050565b606a546001600160a01b031633146138265760405162461bcd60e51b8152600401610a8490615b6e565b6138368888888888888888613b91565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561388157607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156138c757600080fd5b505af11580156138db573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e9d565b6073546001600160a01b031633146139465760405162461bcd60e51b8152600401610a8490615706565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca9060200161100b565b61399c613a2c565b6001600160a01b038116613a015760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a84565b6128b9816140e4565b613a12613a2c565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b031633146126425760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a84565b6040516001600160a01b03808516602483015283166044820152606481018290526137f69085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614878565b6072546001600160401b03600160401b820481169116111561264257607254600090613b2e90600160401b90046001600160401b0316600161575f565b9050613b39816111bc565b156128b957607254600090600290613b5b9084906001600160401b0316615919565b613b659190615bfe565b613b6f908361575f565b9050613b7a816111bc565b15613b8857612c5f81611eaf565b612c5f82611eaf565b600080613b9c612c63565b90506001600160401b038a1615613c30576072546001600160401b03908116908b161115613bdc5760405162461bcd60e51b8152600401610a8490615409565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c2a5760405162461bcd60e51b8152600401610a849061548c565b50613c9a565b6001600160401b0389166000908152606d6020526040902054915081613c685760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316896001600160401b03161115613c9a5760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316886001600160401b031611613ccb5760405162461bcd60e51b8152600401610a84906155ea565b6000613cda8a8a8a868b611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051613d0f919061566d565b602060405180830381855afa158015613d2c573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613d4f9190615689565b613d5991906156b8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613d9d918b918b918b9190600401615c24565b602060405180830381865afa158015613dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dde9190615c9e565b613e3d5760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20494e5660448201526920a624a22fa82927a7a360b11b6064820152608401610a84565b613e8033613e4b858d615919565b6001600160401b0316613e5c6129ed565b613e669190615958565b606554600160581b90046001600160a01b0316919061494f565b505050505050505050505050565b6000613e98612c63565b905081600080613ea88484615919565b6001600160401b031690505b836001600160401b0316836001600160401b031614613f5a576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613f04911642615941565b1115613f3f576001810154613f2990600160401b90046001600160401b031686615919565b613f3c906001600160401b031684615af9565b92505b60010154600160401b90046001600160401b03169250613eb4565b6000613f668383615941565b905082811015613fe0576000613f7c8285615941565b9050600c8111613f8c5780613f8f565b600c5b9050613f9c816003615958565b613fa790600a615d9f565b606554613fc0908390600160481b900461ffff16615d9f565b607454613fcd9190615958565b613fd79190615a7c565b6074555061406c565b6000613fec8483615941565b9050600c8111613ffc5780613fff565b600c5b9050600061400e826003615958565b61401990600a615d9f565b606554614032908490600160481b900461ffff16615d9f565b60745461403f9190615958565b6140499190615a7c565b90508060745460745461405c9190615958565b6140669190615a7c565b60745550505b505050505050565b600054610100900460ff166140df5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a84565b612642335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561418657600080fd5b505af115801561419a573d6000803e3d6000fd5b5050505061264261497f565b60006001600160401b038a1615614321576072546001600160401b03908116908b1611156142655760405162461bcd60e51b815260206004820152606c6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c401610a84565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b909204161461431b5760405162461bcd60e51b81526020600482015260606024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a401610a84565b50614475565b506001600160401b0387166000908152606d6020526040902054806143c25760405162461bcd60e51b81526020600482015260576024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a401610a84565b6069546001600160401b0390811690891611156144755760405162461bcd60e51b81526020600482015260716024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c401610a84565b6072546001600160401b03908116908a16118015906144a55750896001600160401b0316896001600160401b0316115b80156144c657506072546001600160401b03600160401b9091048116908a16115b61453e5760405162461bcd60e51b815260206004820152604f6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a401610a84565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146145fe5760405162461bcd60e51b815260206004820152606a6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c401610a84565b600061460d898989858a611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051614642919061566d565b602060405180830381855afa15801561465f573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906146829190615689565b61468c91906156b8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916146d0918a918a918a9190600401615c24565b602060405180830381865afa1580156146ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147119190615c9e565b6147715760405162461bcd60e51b815260206004820152603e6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20494e56414c49445f50524f4f4600006064820152608401610a84565b6001600160401b038b16600090815260716020526040902060020154879003613e805760405162461bcd60e51b81526020600482015260626024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c401610a84565b60655460ff166148435760405162461bcd60e51b8152600401610a8490615b11565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006148cd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166149da9092919063ffffffff16565b80519091501561494a57808060200190518101906148eb9190615c9e565b61494a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a84565b505050565b6040516001600160a01b03831660248201526044810182905261494a90849063a9059cbb60e01b90606401613aba565b60655460ff16156149a25760405162461bcd60e51b8152600401610a84906157f5565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60606149e984846000856149f1565b949350505050565b606082471015614a525760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a84565b600080866001600160a01b03168587604051614a6e919061566d565b60006040518083038185875af1925050503d8060008114614aab576040519150601f19603f3d011682016040523d82523d6000602084013e614ab0565b606091505b5091509150614ac187838387614acc565b979650505050505050565b60608315614b3b578251600003614b34576001600160a01b0385163b614b345760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a84565b50816149e9565b6149e98383815115614b505781518083602001fd5b8060405162461bcd60e51b8152600401610a849190614c33565b80356001600160401b0381168114614b8157600080fd5b919050565b600080600080600060a08688031215614b9e57600080fd5b614ba786614b6a565b9450614bb560208701614b6a565b9350614bc360408701614b6a565b94979396509394606081013594506080013592915050565b60005b83811015614bf6578181015183820152602001614bde565b838111156137f65750506000910152565b60008151808452614c1f816020860160208601614bdb565b601f01601f19169290920160200192915050565b602081526000614c466020830184614c07565b9392505050565b8060408101831015614c5e57600080fd5b92915050565b8060808101831015614c5e57600080fd5b6000806000806000806000806101a0898b031215614c9257600080fd5b614c9b89614b6a565b9750614ca960208a01614b6a565b9650614cb760408a01614b6a565b95506060890135945060808901359350614cd48a60a08b01614c4d565b9250614ce38a60e08b01614c64565b9150614cf38a6101608b01614c4d565b90509295985092959890939650565b600060208284031215614d1457600080fd5b813561ffff81168114614c4657600080fd5b600080600080600060a08688031215614d3e57600080fd5b614d4786614b6a565b9450614d5560208701614b6a565b94979496505050506040830135926060810135926080909101359150565b600060208284031215614d8557600080fd5b614c4682614b6a565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614dc657614dc6614d8e565b60405290565b604051606081016001600160401b0381118282101715614dc657614dc6614d8e565b604051601f8201601f191681016001600160401b0381118282101715614e1657614e16614d8e565b604052919050565b60006001600160401b03821115614e3757614e37614d8e565b5060051b60200190565b600082601f830112614e5257600080fd5b81356001600160401b03811115614e6b57614e6b614d8e565b614e7e601f8201601f1916602001614dee565b818152846020838601011115614e9357600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614ec357600080fd5b82356001600160401b0380821115614eda57600080fd5b818501915085601f830112614eee57600080fd5b8135614f01614efc82614e1e565b614dee565b81815260059190911b83018401908481019088831115614f2057600080fd5b8585015b83811015614fb957803585811115614f3c5760008081fd5b86016080818c03601f1901811315614f545760008081fd5b614f5c614da4565b8983013588811115614f6e5760008081fd5b614f7c8e8c83870101614e41565b8252506040808401358b8301526060614f96818601614b6a565b82840152614fa5848601614b6a565b908301525085525050918601918601614f24565b5098975050505050505050565b6001600160a01b03811681146128b957600080fd5b600060208284031215614fed57600080fd5b8135614c4681614fc6565b600080600080600060a0868803121561501057600080fd5b8535945060208601356001600160401b0381111561502d57600080fd5b61503988828901614e41565b9450506040860135925061504f60608701614b6a565b9150608086013561505f81614fc6565b809150509295509295909350565b600080600080600080600080888a036101c081121561508b57600080fd5b893561509681614fc6565b985060208a01356150a681614fc6565b975060408a01356150b681614fc6565b965060608a01356150c681614fc6565b955060e0607f19820112156150da57600080fd5b5060808901935061016089013592506101808901356001600160401b038082111561510457600080fd5b6151108c838d01614e41565b93506101a08b013591508082111561512757600080fd5b506151348b828c01614e41565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c03121561516357600080fd5b61516c8a614b6a565b985061517a60208b01614b6a565b975061518860408b01614b6a565b965061519660608b01614b6a565b955060808a0135945060a08a013593506151b38b60c08c01614c4d565b92506151c38b6101008c01614c64565b91506151d38b6101808c01614c4d565b90509295985092959850929598565b6000602082840312156151f457600080fd5b5035919050565b80151581146128b957600080fd5b60006020828403121561521b57600080fd5b8135614c46816151fb565b60006020828403121561523857600080fd5b81356001600160401b0381111561524e57600080fd5b6149e984828501614e41565b6000602080838503121561526d57600080fd5b82356001600160401b038082111561528457600080fd5b818501915085601f83011261529857600080fd5b81356152a6614efc82614e1e565b81815260059190911b830184019084810190888311156152c557600080fd5b8585015b83811015614fb9578035858111156152e15760008081fd5b86016060818c03601f19018113156152f95760008081fd5b615301614dcc565b89830135888111156153135760008081fd5b6153218e8c83870101614e41565b8252506040808401358b830152615339838501614b6a565b90820152855250509186019186016152c9565b6000806000806080858703121561536257600080fd5b61536b85614b6a565b93506020850135925061538060408601614b6a565b915061538e60608601614b6a565b905092959194509250565b600080604083850312156153ac57600080fd5b82356001600160401b038111156153c257600080fd5b6153ce85828601614e41565b95602094909401359450505050565b600080604083850312156153f057600080fd5b8235915061540060208401614b6a565b90509250929050565b60208082526058908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2070656e60408201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560608201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608082015260a00190565b6020808252604c908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760608201526b040e6e8c2e8ca40c4c2e8c6d60a31b608082015260a00190565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786060820152621a5cdd60ea1b608082015260a00190565b6020808252605d908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060608201527f7468616e2063757272656e744c61737456657269666965644261746368000000608082015260a00190565b60208082526057908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2066696e60408201527f616c4e65774261746368206d75737420626520626967676572207468616e206360608201527f757272656e744c61737456657269666965644261746368000000000000000000608082015260a00190565b6000825161567f818460208701614bdb565b9190910192915050565b60006020828403121561569b57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826156c7576156c76156a2565b500690565b600181811c908216806156e057607f821691505b60208210810361570057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561578157615781615749565b01949350505050565b60208082526045908201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361588f5761588f615749565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b60006001820161591257615912615749565b5060010190565b60006001600160401b038381169083168181101561593957615939615749565b039392505050565b60008282101561595357615953615749565b500390565b600081600019048311821515161561597257615972615749565b500290565b601f82111561494a57600081815260208120601f850160051c8101602086101561599e5750805b601f850160051c820191505b8181101561406c578281556001016159aa565b81516001600160401b038111156159d6576159d6614d8e565b6159ea816159e484546156cc565b84615977565b602080601f831160018114615a1f5760008415615a075750858301515b600019600386901b1c1916600185901b17855561406c565b600085815260208120601f198616915b82811015615a4e57888601518255948401946001909101908401615a2f565b5085821015615a6c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615a8b57615a8b6156a2565b500490565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b60008219821115615b0c57615b0c615749565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b0383166020820152606060408201819052600090615bf590830184614c07565b95945050505050565b60006001600160401b0380841680615c1857615c186156a2565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615c5c57848483379084018281529284019290600101615c3c565b5050828760c0870137610100850181815286935091505b6001811015615c92578251825260209283019290910190600101615c73565b50505095945050505050565b600060208284031215615cb057600080fd5b8151614c46816151fb565b600181815b80851115615cf6578160001904821115615cdc57615cdc615749565b80851615615ce957918102915b93841c9390800290615cc0565b509250929050565b600082615d0d57506001614c5e565b81615d1a57506000614c5e565b8160018114615d305760028114615d3a57615d56565b6001915050614c5e565b60ff841115615d4b57615d4b615749565b50506001821b614c5e565b5060208310610133831016604e8410600b8410161715615d79575081810a614c5e565b615d838383615cbb565b8060001904821115615d9757615d97615749565b029392505050565b6000614c468383615cfe56fe506f6c79676f6e5a4b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a4b45564d3a3a70726f76654e6f6e44657465726d696e6973a2646970667358221220ba301bd4477ec503319b36f4ba30580c96f2340c94e9f0b3b12710f403d0c1f064736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106104125760003560e01c806396dc3d3911610220578063cfa8ed4711610130578063e7a7ed02116100b8578063f14916d611610087578063f14916d6146109e2578063f2fde38b146109f5578063f851a44014610a08578063f8b823e414610a1b578063fe16564f14610a2457600080fd5b8063e7a7ed021461098f578063e8bf92ed146109a9578063eaeb077b146109bc578063edc41121146109cf57600080fd5b8063d939b315116100ff578063d939b3151461093e578063dbc1697614610958578063e0d1744114610960578063e11f3f1814610973578063e217cfd61461098657600080fd5b8063cfa8ed47146108ea578063d02103ca14610904578063d8d1091b14610917578063d8f54db01461092a57600080fd5b8063ab9fc5ef116101b3578063b6b0b09711610182578063b6b0b0971461088f578063c0cad302146108a9578063c0ed84e0146108bc578063c89e42df146108c4578063cf136306146108d757600080fd5b8063ab9fc5ef146107e3578063adc879e9146107ed578063afd23cbe14610807578063b4d63f581461082f57600080fd5b80639eb831b9116101ef5780639eb831b9146107a85780639f0d039d146107b0578063a3c573eb146107b8578063aa58bad6146107cb57600080fd5b806396dc3d391461076757806399f5634e1461077a5780639b796760146107825780639c9f3dfe1461079557600080fd5b80634a910e6a11610326578063715018a6116102ae578063837a47381161027d578063837a4738146106b1578063841b24d71461071f5780638b48931e146107395780638c4a0af7146107435780638da5cb5b1461075657600080fd5b8063715018a6146106705780637215541a1461067857806375c508b31461068b5780637fcb36531461069e57600080fd5b8063574f649e116102f5578063574f649e1461060457806360943d6a146106175780636b8616ce1461062a5780636ff512cc1461064a578063704b6c021461065d57600080fd5b80634a910e6a146105b65780635392c5e0146105c9578063542028d5146105e95780635437988d146105f157600080fd5b80632d0889d3116103a9578063423fa85611610378578063423fa85614610542578063456052671461055c578063458c0477146105765780634834a343146105895780634a1a89a71461059c57600080fd5b80632d0889d314610500578063383b3be814610509578063394218e91461051c5780633c1582671461052f57600080fd5b80631816b7e5116103e55780631816b7e51461048457806319d8ac6114610497578063220d7899146104c257806329878983146104d557600080fd5b80630eaa86ea14610417578063107bf28c1461043d57806310a01a721461045257806315064c9614610467575b600080fd5b61042a610425366004614b86565b610a37565b6040519081526020015b60405180910390f35b610445610c18565b6040516104349190614c33565b610465610460366004614c75565b610ca6565b005b6065546104749060ff1681565b6040519015158152602001610434565b610465610492366004614d02565b610ef0565b6068546104aa906001600160401b031681565b6040516001600160401b039091168152602001610434565b6104456104d0366004614d26565b611016565b606a546104e8906001600160a01b031681565b6040516001600160a01b039091168152602001610434565b61042a61ea6081565b610474610517366004614d73565b6111bc565b61046561052a366004614d73565b611203565b61046561053d366004614eb0565b611352565b6068546104aa90600160401b90046001600160401b031681565b6068546104aa90600160801b90046001600160401b031681565b6072546104aa906001600160401b031681565b610465610597366004614c75565b611b66565b6072546104aa90600160401b90046001600160401b031681565b6104656105c4366004614d73565b611eaf565b61042a6105d7366004614d73565b606d6020526000908152604090205481565b61044561214a565b6104656105ff366004614fdb565b612157565b61042a610612366004614ff8565b612181565b61046561062536600461506d565b6121c4565b61042a610638366004614d73565b60666020526000908152604090205481565b610465610658366004614fdb565b612534565b61046561066b366004614fdb565b6125b8565b610465612630565b610465610686366004614d73565b612644565b610465610699366004615144565b6128bc565b6069546104aa906001600160401b031681565b6106f46106bf3660046151e2565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610434565b6072546104aa90600160c01b90046001600160401b031681565b6104aa62093a8081565b610465610751366004615209565b61294b565b6033546001600160a01b03166104e8565b610465610775366004614d73565b6129c2565b61042a6129ed565b610465610790366004614d73565b612ad0565b6104656107a3366004614d73565b612b05565b61042a600c81565b60745461042a565b6070546104e8906001600160a01b031681565b6065546104aa9061010090046001600160401b031681565b6104aa6206978081565b606c546104aa90600160a81b90046001600160401b031681565b60655461081c90600160481b900461ffff1681565b60405161ffff9091168152602001610434565b61086a61083d366004614d73565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610434565b6065546104e890600160581b90046001600160a01b031681565b6104656108b7366004615226565b612c4b565b6104aa612c63565b6104656108d2366004615226565b612cb0565b6104656108e5366004614d73565b612d16565b6069546104e890600160401b90046001600160a01b031681565b606c546104e8906001600160a01b031681565b61046561092536600461525a565b612d97565b606c5461047490600160a01b900460ff1681565b6072546104aa90600160801b90046001600160401b031681565b610465613261565b61046561096e36600461534c565b61331d565b610465610981366004615144565b61338f565b6104aa6103e881565b6068546104aa90600160c01b90046001600160401b031681565b606b546104e8906001600160a01b031681565b6104656109ca366004615399565b6134d4565b6104656109dd366004614c75565b6137fc565b6104656109f0366004614fdb565b61391c565b610465610a03366004614fdb565b613994565b6073546104e8906001600160a01b031681565b61042a60745481565b610465610a323660046153dd565b613a0a565b6000806000610a44612c63565b90506001600160401b03881615610ae1576072546001600160401b039081169089161115610a8d5760405162461bcd60e51b8152600401610a8490615409565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610adb5760405162461bcd60e51b8152600401610a849061548c565b50610b4b565b6001600160401b0387166000908152606d6020526040902054915081610b195760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316876001600160401b03161115610b4b5760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316866001600160401b031611610b7c5760405162461bcd60e51b8152600401610a84906155ea565b6000610b8b8888888689611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051610bc0919061566d565b602060405180830381855afa158015610bdd573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c009190615689565b610c0a91906156b8565b9a9950505050505050505050565b606f8054610c25906156cc565b80601f0160208091040260200160405190810160405280929190818152602001828054610c51906156cc565b8015610c9e5780601f10610c7357610100808354040283529160200191610c9e565b820191906000526020600020905b815481529060010190602001808311610c8157829003601f168201915b505050505081565b610cae613a2c565b600080610cb9612c63565b90506001600160401b038a1615610d4d576072546001600160401b03908116908b161115610cf95760405162461bcd60e51b8152600401610a8490615409565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610d475760405162461bcd60e51b8152600401610a849061548c565b50610db7565b6001600160401b0389166000908152606d6020526040902054915081610d855760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316896001600160401b03161115610db75760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316886001600160401b031611610de85760405162461bcd60e51b8152600401610a84906155ea565b6000610df78a8a8a868b611016565b6069805467ffffffffffffffff19166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610e4557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610e8b57600080fd5b505af1158015610e9f573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610f1a5760405162461bcd60e51b8152600401610a8490615706565b6103e88161ffff16118015610f3457506104008161ffff16105b610fb95760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a4b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a401610a84565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b0380861660008181526067602052604080822054938816825290205460609291158061104857508115155b6110bc576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a84565b80611131576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a84565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b03828116600090815260716020526040812054909242926111f292600160801b9092048116911661575f565b6001600160401b0316111592915050565b6073546001600160a01b0316331461122d5760405162461bcd60e51b8152600401610a8490615706565b62093a806001600160401b03821611156112595760405162461bcd60e51b8152600401610a849061578a565b60655460ff166112fc576072546001600160401b03600160c01b9091048116908216106112fc5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a4b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a401610a84565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a19060200161100b565b60655460ff16156113755760405162461bcd60e51b8152600401610a84906157f5565b606954600160401b90046001600160a01b031633146113fc5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e6365720000000000006064820152608401610a84565b8051806114715760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e636520312062617463680000006064820152608401610a84565b6103e881106114ea576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e7920626174636865736064820152608401610a84565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561198a57600087828151811061153d5761153d61585d565b60200260200101519050600081606001516001600160401b031611156116f6578361156781615873565b94505060008160000151805190602001208260200151836060015160405160200161159493929190615899565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461163a5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d617463680000006064820152608401610a84565b81606001516001600160401b031682604001516001600160401b031610156116f05760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a401610a84565b5061187d565b6020810151158061177f5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916117399160040190815260200190565b6020604051808303816000875af1158015611758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177c9190615689565b15155b6117f15760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d7573742065786973740000000000006064820152608401610a84565b80515161ea601161187d5760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a401610a84565b856001600160401b031681604001516001600160401b0316101580156118b057504281604001516001600160401b031611155b6119225760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e67650000006064820152608401610a84565b805180516020918201208183015160408085015190516119499488949392913391016158bc565b604051602081830303815290604052805190602001209250848061196c90615873565b9550508060400151955050808061198290615900565b915050611521565b506068546001600160401b03600160c01b90910481169083161115611a0f5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b6064820152608401610a84565b606854600090611a2f90600160801b90046001600160401b031684615919565b611a42906001600160401b031687615941565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611b1790339030908490611afc9190615958565b606554600160581b90046001600160a01b0316929190613a86565b611b1f613af1565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b895760405162461bcd60e51b8152600401610a84906157f5565b6072546001600160401b038781166000908152606760205260409020600101544292611bc092600160c01b9091048116911661575f565b6001600160401b03161115611c495760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a401610a84565b6103e8611c568888615919565b6001600160401b031610611cd25760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e792062617463686573000000006064820152608401610a84565b611ce28888888888888888613b91565b611ceb86613e8e565b607254600160801b90046001600160401b0316600003611db3576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615611d5057607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d9657600080fd5b505af1158015611daa573d6000803e3d6000fd5b50505050611e64565b611dbb613af1565b607280546001600160401b0316906000611dd483615873565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611edc57506072546001600160401b03600160401b9091048116908216115b8015611ef757506072546001600160401b0390811690821611155b611f755760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a401610a84565b606a546001600160a01b0316331461201f57611f90816111bc565b61201f5760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a401610a84565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b1580156120dc57600080fd5b505af11580156120f0573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e846002015460405161213d91815260200190565b60405180910390a3505050565b606e8054610c25906156cc565b61215f613a2c565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b60008585805190602001208585856040516020016121a39594939291906158bc565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff16158080156121e45750600054600160ff909116105b806121fe5750303b1580156121fe575060005460ff166001145b6122615760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a84565b6000805460ff191660011790558015612284576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a8416179055607080549091169188169190911790556123016020860186614fdb565b607380546001600160a01b0319166001600160a01b03929092169190911790556123316060860160408701614fdb565b606980546001600160a01b0392909216600160401b02600160401b600160e01b031990921691909117905561236c60c0860160a08701614fdb565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa7113568490556123c960e0860160c08701614d73565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556124006040860160208701614d73565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561243c6080860160608701614d73565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b1990921691909117905561247860a0860160808701615209565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e6124a084826159bd565b50606f6124ad83826159bd565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124e3614074565b8015612529576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b0316331461255e5760405162461bcd60e51b8152600401610a8490615706565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161100b565b6073546001600160a01b031633146125e25760405162461bcd60e51b8152600401610a8490615706565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a19060200161100b565b612638613a2c565b61264260006140e4565b565b6033546001600160a01b031633146128b1576072546000906001600160401b03161561269557506072546001600160401b03908116600090815260716020526040902054600160401b9004166126a3565b506069546001600160401b03165b80826001600160401b0316116127215760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c7265616479207665726966696564000000006064820152608401610a84565b6068546001600160401b03600160401b90910481169083161180159061276357506001600160401b038083166000908152606760205260409020600101541615155b6127ee5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a401610a84565b6001600160401b03808316600090815260676020526040902060010154429161281c9162093a80911661575f565b6001600160401b031611156128af5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a401610a84565b505b6128b9614136565b50565b60655460ff16156128df5760405162461bcd60e51b8152600401610a84906157f5565b6128f08989898989898989896141a6565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1612529614136565b6073546001600160a01b031633146129755760405162461bcd60e51b8152600401610a8490615706565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061100b90831515815260200190565b6129ca613a2c565b6069805467ffffffffffffffff19166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a649190615689565b90506000612a70612c63565b6068546001600160401b03600160401b8204811691612aa091600160801b8204811691600160c01b900416615919565b612aaa919061575f565b612ab49190615919565b6001600160401b03169050612ac98183615a7c565b9250505090565b612ad8613a2c565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612b2f5760405162461bcd60e51b8152600401610a8490615706565b62093a806001600160401b0382161115612b5b5760405162461bcd60e51b8152600401610a849061578a565b60655460ff16612bf0576072546001600160401b03600160801b909104811690821610612bf05760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f776572006064820152608401610a84565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c759060200161100b565b612c53613a2c565b606f612c5f82826159bd565b5050565b6072546000906001600160401b031615612ca057506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612cda5760405162461bcd60e51b8152600401610a8490615706565b606e612ce682826159bd565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161100b9190614c33565b6073546001600160a01b03163314612d405760405162461bcd60e51b8152600401610a8490615706565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f9060200161100b565b60655460ff1615612dba5760405162461bcd60e51b8152600401610a84906157f5565b606c54600160a01b900460ff161515600114612de85760405162461bcd60e51b8152600401610a8490615a90565b805180612e4b5760405162461bcd60e51b815260206004820152603d6024820152600080516020615dac83398151915260448201527f3a204d75737420666f726365206174206c6561737420312062617463680000006064820152608401610a84565b6103e88110612ebc5760405162461bcd60e51b81526020600482015260436024820152600080516020615dac83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a401610a84565b6068546001600160401b03600160c01b8204811691612ee4918491600160801b900416615af9565b1115612f3e5760405162461bcd60e51b81526020600482015260356024820152600080516020615dac8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b6064820152608401610a84565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b8481101561316a576000868281518110612f8b57612f8b61585d565b602002602001015190508380612fa090615873565b945050600081600001518051906020012082602001518360400151604051602001612fcd93929190615899565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461306c5760405162461bcd60e51b81526020600482015260426024820152600080516020615dac83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a401610a84565b613077600188615941565b830361310c5742620697808360400151613091919061575f565b6001600160401b0316111561310c5760405162461bcd60e51b81526020600482015260476024820152600080516020615dac83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a401610a84565b815180516020918201208184015160405161312f938893929142913391016158bc565b604051602081830303815290604052805190602001209350858061315290615873565b9650505050808061316290615900565b915050612f6f565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166132835760405162461bcd60e51b8152600401610a8490615b11565b6073546001600160a01b031633146132ad5760405162461bcd60e51b8152600401610a8490615706565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156132fd57600080fd5b505af1158015613311573d6000803e3d6000fd5b50505050612642614821565b613325613a2c565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133b95760405162461bcd60e51b8152600401610a8490615b6e565b6133ca8989898989898989896141a6565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561341557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561345b57600080fd5b505af115801561346f573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff16156134f75760405162461bcd60e51b8152600401610a84906157f5565b606c54600160a01b900460ff1615156001146135255760405162461bcd60e51b8152600401610a8490615a90565b600061353060745490565b9050818111156135955760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b6064820152608401610a84565b61ea608351106136055760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b6064820152608401610a84565b60655461362490600160581b90046001600160a01b0316333084613a86565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa15801561366e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136929190615689565b60688054919250600160c01b9091046001600160401b03169060186136b683615873565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016136f793929190615899565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361379b57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26137f6565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516137ed93929190615bcb565b60405180910390a25b50505050565b606a546001600160a01b031633146138265760405162461bcd60e51b8152600401610a8490615b6e565b6138368888888888888888613b91565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561388157607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156138c757600080fd5b505af11580156138db573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e9d565b6073546001600160a01b031633146139465760405162461bcd60e51b8152600401610a8490615706565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca9060200161100b565b61399c613a2c565b6001600160a01b038116613a015760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a84565b6128b9816140e4565b613a12613a2c565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b031633146126425760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a84565b6040516001600160a01b03808516602483015283166044820152606481018290526137f69085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614878565b6072546001600160401b03600160401b820481169116111561264257607254600090613b2e90600160401b90046001600160401b0316600161575f565b9050613b39816111bc565b156128b957607254600090600290613b5b9084906001600160401b0316615919565b613b659190615bfe565b613b6f908361575f565b9050613b7a816111bc565b15613b8857612c5f81611eaf565b612c5f82611eaf565b600080613b9c612c63565b90506001600160401b038a1615613c30576072546001600160401b03908116908b161115613bdc5760405162461bcd60e51b8152600401610a8490615409565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c2a5760405162461bcd60e51b8152600401610a849061548c565b50613c9a565b6001600160401b0389166000908152606d6020526040902054915081613c685760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316896001600160401b03161115613c9a5760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316886001600160401b031611613ccb5760405162461bcd60e51b8152600401610a84906155ea565b6000613cda8a8a8a868b611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051613d0f919061566d565b602060405180830381855afa158015613d2c573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613d4f9190615689565b613d5991906156b8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613d9d918b918b918b9190600401615c24565b602060405180830381865afa158015613dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dde9190615c9e565b613e3d5760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20494e5660448201526920a624a22fa82927a7a360b11b6064820152608401610a84565b613e8033613e4b858d615919565b6001600160401b0316613e5c6129ed565b613e669190615958565b606554600160581b90046001600160a01b0316919061494f565b505050505050505050505050565b6000613e98612c63565b905081600080613ea88484615919565b6001600160401b031690505b836001600160401b0316836001600160401b031614613f5a576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613f04911642615941565b1115613f3f576001810154613f2990600160401b90046001600160401b031686615919565b613f3c906001600160401b031684615af9565b92505b60010154600160401b90046001600160401b03169250613eb4565b6000613f668383615941565b905082811015613fe0576000613f7c8285615941565b9050600c8111613f8c5780613f8f565b600c5b9050613f9c816003615958565b613fa790600a615d9f565b606554613fc0908390600160481b900461ffff16615d9f565b607454613fcd9190615958565b613fd79190615a7c565b6074555061406c565b6000613fec8483615941565b9050600c8111613ffc5780613fff565b600c5b9050600061400e826003615958565b61401990600a615d9f565b606554614032908490600160481b900461ffff16615d9f565b60745461403f9190615958565b6140499190615a7c565b90508060745460745461405c9190615958565b6140669190615a7c565b60745550505b505050505050565b600054610100900460ff166140df5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a84565b612642335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561418657600080fd5b505af115801561419a573d6000803e3d6000fd5b5050505061264261497f565b60006001600160401b038a1615614321576072546001600160401b03908116908b1611156142655760405162461bcd60e51b815260206004820152606c6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c401610a84565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b909204161461431b5760405162461bcd60e51b81526020600482015260606024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a401610a84565b50614475565b506001600160401b0387166000908152606d6020526040902054806143c25760405162461bcd60e51b81526020600482015260576024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a401610a84565b6069546001600160401b0390811690891611156144755760405162461bcd60e51b81526020600482015260716024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c401610a84565b6072546001600160401b03908116908a16118015906144a55750896001600160401b0316896001600160401b0316115b80156144c657506072546001600160401b03600160401b9091048116908a16115b61453e5760405162461bcd60e51b815260206004820152604f6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a401610a84565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146145fe5760405162461bcd60e51b815260206004820152606a6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c401610a84565b600061460d898989858a611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051614642919061566d565b602060405180830381855afa15801561465f573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906146829190615689565b61468c91906156b8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916146d0918a918a918a9190600401615c24565b602060405180830381865afa1580156146ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147119190615c9e565b6147715760405162461bcd60e51b815260206004820152603e6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20494e56414c49445f50524f4f4600006064820152608401610a84565b6001600160401b038b16600090815260716020526040902060020154879003613e805760405162461bcd60e51b81526020600482015260626024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c401610a84565b60655460ff166148435760405162461bcd60e51b8152600401610a8490615b11565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006148cd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166149da9092919063ffffffff16565b80519091501561494a57808060200190518101906148eb9190615c9e565b61494a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a84565b505050565b6040516001600160a01b03831660248201526044810182905261494a90849063a9059cbb60e01b90606401613aba565b60655460ff16156149a25760405162461bcd60e51b8152600401610a84906157f5565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60606149e984846000856149f1565b949350505050565b606082471015614a525760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a84565b600080866001600160a01b03168587604051614a6e919061566d565b60006040518083038185875af1925050503d8060008114614aab576040519150601f19603f3d011682016040523d82523d6000602084013e614ab0565b606091505b5091509150614ac187838387614acc565b979650505050505050565b60608315614b3b578251600003614b34576001600160a01b0385163b614b345760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a84565b50816149e9565b6149e98383815115614b505781518083602001fd5b8060405162461bcd60e51b8152600401610a849190614c33565b80356001600160401b0381168114614b8157600080fd5b919050565b600080600080600060a08688031215614b9e57600080fd5b614ba786614b6a565b9450614bb560208701614b6a565b9350614bc360408701614b6a565b94979396509394606081013594506080013592915050565b60005b83811015614bf6578181015183820152602001614bde565b838111156137f65750506000910152565b60008151808452614c1f816020860160208601614bdb565b601f01601f19169290920160200192915050565b602081526000614c466020830184614c07565b9392505050565b8060408101831015614c5e57600080fd5b92915050565b8060808101831015614c5e57600080fd5b6000806000806000806000806101a0898b031215614c9257600080fd5b614c9b89614b6a565b9750614ca960208a01614b6a565b9650614cb760408a01614b6a565b95506060890135945060808901359350614cd48a60a08b01614c4d565b9250614ce38a60e08b01614c64565b9150614cf38a6101608b01614c4d565b90509295985092959890939650565b600060208284031215614d1457600080fd5b813561ffff81168114614c4657600080fd5b600080600080600060a08688031215614d3e57600080fd5b614d4786614b6a565b9450614d5560208701614b6a565b94979496505050506040830135926060810135926080909101359150565b600060208284031215614d8557600080fd5b614c4682614b6a565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614dc657614dc6614d8e565b60405290565b604051606081016001600160401b0381118282101715614dc657614dc6614d8e565b604051601f8201601f191681016001600160401b0381118282101715614e1657614e16614d8e565b604052919050565b60006001600160401b03821115614e3757614e37614d8e565b5060051b60200190565b600082601f830112614e5257600080fd5b81356001600160401b03811115614e6b57614e6b614d8e565b614e7e601f8201601f1916602001614dee565b818152846020838601011115614e9357600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614ec357600080fd5b82356001600160401b0380821115614eda57600080fd5b818501915085601f830112614eee57600080fd5b8135614f01614efc82614e1e565b614dee565b81815260059190911b83018401908481019088831115614f2057600080fd5b8585015b83811015614fb957803585811115614f3c5760008081fd5b86016080818c03601f1901811315614f545760008081fd5b614f5c614da4565b8983013588811115614f6e5760008081fd5b614f7c8e8c83870101614e41565b8252506040808401358b8301526060614f96818601614b6a565b82840152614fa5848601614b6a565b908301525085525050918601918601614f24565b5098975050505050505050565b6001600160a01b03811681146128b957600080fd5b600060208284031215614fed57600080fd5b8135614c4681614fc6565b600080600080600060a0868803121561501057600080fd5b8535945060208601356001600160401b0381111561502d57600080fd5b61503988828901614e41565b9450506040860135925061504f60608701614b6a565b9150608086013561505f81614fc6565b809150509295509295909350565b600080600080600080600080888a036101c081121561508b57600080fd5b893561509681614fc6565b985060208a01356150a681614fc6565b975060408a01356150b681614fc6565b965060608a01356150c681614fc6565b955060e0607f19820112156150da57600080fd5b5060808901935061016089013592506101808901356001600160401b038082111561510457600080fd5b6151108c838d01614e41565b93506101a08b013591508082111561512757600080fd5b506151348b828c01614e41565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c03121561516357600080fd5b61516c8a614b6a565b985061517a60208b01614b6a565b975061518860408b01614b6a565b965061519660608b01614b6a565b955060808a0135945060a08a013593506151b38b60c08c01614c4d565b92506151c38b6101008c01614c64565b91506151d38b6101808c01614c4d565b90509295985092959850929598565b6000602082840312156151f457600080fd5b5035919050565b80151581146128b957600080fd5b60006020828403121561521b57600080fd5b8135614c46816151fb565b60006020828403121561523857600080fd5b81356001600160401b0381111561524e57600080fd5b6149e984828501614e41565b6000602080838503121561526d57600080fd5b82356001600160401b038082111561528457600080fd5b818501915085601f83011261529857600080fd5b81356152a6614efc82614e1e565b81815260059190911b830184019084810190888311156152c557600080fd5b8585015b83811015614fb9578035858111156152e15760008081fd5b86016060818c03601f19018113156152f95760008081fd5b615301614dcc565b89830135888111156153135760008081fd5b6153218e8c83870101614e41565b8252506040808401358b830152615339838501614b6a565b90820152855250509186019186016152c9565b6000806000806080858703121561536257600080fd5b61536b85614b6a565b93506020850135925061538060408601614b6a565b915061538e60608601614b6a565b905092959194509250565b600080604083850312156153ac57600080fd5b82356001600160401b038111156153c257600080fd5b6153ce85828601614e41565b95602094909401359450505050565b600080604083850312156153f057600080fd5b8235915061540060208401614b6a565b90509250929050565b60208082526058908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2070656e60408201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560608201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608082015260a00190565b6020808252604c908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760608201526b040e6e8c2e8ca40c4c2e8c6d60a31b608082015260a00190565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786060820152621a5cdd60ea1b608082015260a00190565b6020808252605d908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060608201527f7468616e2063757272656e744c61737456657269666965644261746368000000608082015260a00190565b60208082526057908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2066696e60408201527f616c4e65774261746368206d75737420626520626967676572207468616e206360608201527f757272656e744c61737456657269666965644261746368000000000000000000608082015260a00190565b6000825161567f818460208701614bdb565b9190910192915050565b60006020828403121561569b57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826156c7576156c76156a2565b500690565b600181811c908216806156e057607f821691505b60208210810361570057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561578157615781615749565b01949350505050565b60208082526045908201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361588f5761588f615749565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b60006001820161591257615912615749565b5060010190565b60006001600160401b038381169083168181101561593957615939615749565b039392505050565b60008282101561595357615953615749565b500390565b600081600019048311821515161561597257615972615749565b500290565b601f82111561494a57600081815260208120601f850160051c8101602086101561599e5750805b601f850160051c820191505b8181101561406c578281556001016159aa565b81516001600160401b038111156159d6576159d6614d8e565b6159ea816159e484546156cc565b84615977565b602080601f831160018114615a1f5760008415615a075750858301515b600019600386901b1c1916600185901b17855561406c565b600085815260208120601f198616915b82811015615a4e57888601518255948401946001909101908401615a2f565b5085821015615a6c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615a8b57615a8b6156a2565b500490565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b60008219821115615b0c57615b0c615749565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b0383166020820152606060408201819052600090615bf590830184614c07565b95945050505050565b60006001600160401b0380841680615c1857615c186156a2565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615c5c57848483379084018281529284019290600101615c3c565b5050828760c0870137610100850181815286935091505b6001811015615c92578251825260209283019290910190600101615c73565b50505095945050505050565b600060208284031215615cb057600080fd5b8151614c46816151fb565b600181815b80851115615cf6578160001904821115615cdc57615cdc615749565b80851615615ce957918102915b93841c9390800290615cc0565b509250929050565b600082615d0d57506001614c5e565b81615d1a57506000614c5e565b8160018114615d305760028114615d3a57615d56565b6001915050614c5e565b60ff841115615d4b57615d4b615749565b50506001821b614c5e565b5060208310610133831016604e8410600b8410161715615d79575081810a614c5e565b615d838383615cbb565b8060001904821115615d9757615d97615749565b029392505050565b6000614c468383615cfe56fe506f6c79676f6e5a4b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a4b45564d3a3a70726f76654e6f6e44657465726d696e6973a2646970667358221220ba301bd4477ec503319b36f4ba30580c96f2340c94e9f0b3b12710f403d0c1f064736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/ProofOfEfficiency.json b/compiled-contracts/ProofOfEfficiency.json deleted file mode 100644 index a37e696e7..000000000 --- a/compiled-contracts/ProofOfEfficiency.json +++ /dev/null @@ -1,1476 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "PolygonZKEVM", - "sourceName": "contracts/PolygonZKEVM.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "numBatch", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint64", - "name": "pendingStateNum", - "type": "uint64" - } - ], - "name": "ConsolidatePendingState", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "EmergencyStateActivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "EmergencyStateDeactivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "forceBatchNum", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "lastGlobalExitRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "transactions", - "type": "bytes" - } - ], - "name": "ForceBatch", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "numBatch", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "aggregator", - "type": "address" - } - ], - "name": "OverridePendingState", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "storedStateRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "provedStateRoot", - "type": "bytes32" - } - ], - "name": "ProveNonDeterministicPendingState", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "numBatch", - "type": "uint64" - } - ], - "name": "SequenceBatches", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "numBatch", - "type": "uint64" - } - ], - "name": "SequenceForceBatches", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "SetAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "newForceBatchAllowed", - "type": "bool" - } - ], - "name": "SetForceBatchAllowed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint16", - "name": "newMultiplierBatchFee", - "type": "uint16" - } - ], - "name": "SetMultiplierBatchFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "newPendingStateTimeout", - "type": "uint64" - } - ], - "name": "SetPendingStateTimeout", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "newTrustedAggregator", - "type": "address" - } - ], - "name": "SetTrustedAggregator", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "newTrustedAggregatorTimeout", - "type": "uint64" - } - ], - "name": "SetTrustedAggregatorTimeout", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "newTrustedSequencer", - "type": "address" - } - ], - "name": "SetTrustedSequencer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "newTrustedSequencerURL", - "type": "string" - } - ], - "name": "SetTrustedSequencerURL", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "newVeryBatchTimeTarget", - "type": "uint64" - } - ], - "name": "SetVeryBatchTimeTarget", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "numBatch", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "aggregator", - "type": "address" - } - ], - "name": "TrustedVerifyBatches", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "numBatch", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "aggregator", - "type": "address" - } - ], - "name": "VerifyBatches", - "type": "event" - }, - { - "inputs": [], - "name": "FORCE_BATCH_TIMEOUT", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "HALT_AGGREGATION_TIMEOUT", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_BATCH_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_TRANSACTIONS_BYTE_LENGTH", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_VERIFY_BATCHES", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "sequencedBatchNum", - "type": "uint64" - } - ], - "name": "activateEmergencyState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "admin", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "batchFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "name": "batchNumToStateRoot", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PolygonZKEVMBridgeAddress", - "outputs": [ - { - "internalType": "contract IPolygonZKEVMBridge", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "calculateRewardPerBatch", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "chainID", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "pendingStateNum", - "type": "uint64" - } - ], - "name": "consolidatePendingState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "deactivateEmergencyState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "transactions", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "maticAmount", - "type": "uint256" - } - ], - "name": "forceBatch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "forceBatchAllowed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "name": "forcedBatches", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getCurrentBatchFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "initNumBatch", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "finalNewBatch", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "newLocalExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "oldStateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "newStateRoot", - "type": "bytes32" - } - ], - "name": "getInputSnarkBytes", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getLastVerifiedBatch", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "globalExitRootManager", - "outputs": [ - { - "internalType": "contract IGlobalExitRootManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IGlobalExitRootManager", - "name": "_globalExitRootManager", - "type": "address" - }, - { - "internalType": "contract IERC20Upgradeable", - "name": "_matic", - "type": "address" - }, - { - "internalType": "contract IVerifierRollup", - "name": "_rollupVerifier", - "type": "address" - }, - { - "internalType": "contract IPolygonZKEVMBridge", - "name": "_PolygonZKEVMBridgeAddress", - "type": "address" - }, - { - "components": [ - { - "internalType": "address", - "name": "admin", - "type": "address" - }, - { - "internalType": "uint64", - "name": "chainID", - "type": "uint64" - }, - { - "internalType": "address", - "name": "trustedSequencer", - "type": "address" - }, - { - "internalType": "uint64", - "name": "pendingStateTimeout", - "type": "uint64" - }, - { - "internalType": "bool", - "name": "forceBatchAllowed", - "type": "bool" - }, - { - "internalType": "address", - "name": "trustedAggregator", - "type": "address" - }, - { - "internalType": "uint64", - "name": "trustedAggregatorTimeout", - "type": "uint64" - } - ], - "internalType": "struct PolygonZKEVM.InitializePackedParameters", - "name": "initializePackedParameters", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "genesisRoot", - "type": "bytes32" - }, - { - "internalType": "string", - "name": "_trustedSequencerURL", - "type": "string" - }, - { - "internalType": "string", - "name": "_networkName", - "type": "string" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "isEmergencyState", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "pendingStateNum", - "type": "uint64" - } - ], - "name": "isPendingStateConsolidable", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastBatchSequenced", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastForceBatch", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastForceBatchSequenced", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastPendingState", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastPendingStateConsolidated", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastTimestamp", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastVerifiedBatch", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "matic", - "outputs": [ - { - "internalType": "contract IERC20Upgradeable", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "multiplierBatchFee", - "outputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "networkName", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "initPendingStateNum", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "finalPendingStateNum", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "initNumBatch", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "finalNewBatch", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "newLocalExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "newStateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256[2]", - "name": "proofA", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2][2]", - "name": "proofB", - "type": "uint256[2][2]" - }, - { - "internalType": "uint256[2]", - "name": "proofC", - "type": "uint256[2]" - } - ], - "name": "overridePendingState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pendingStateTimeout", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "pendingStateTransitions", - "outputs": [ - { - "internalType": "uint64", - "name": "timestamp", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "lastVerifiedBatch", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "exitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "initPendingStateNum", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "finalPendingStateNum", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "initNumBatch", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "finalNewBatch", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "newLocalExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "newStateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256[2]", - "name": "proofA", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2][2]", - "name": "proofB", - "type": "uint256[2][2]" - }, - { - "internalType": "uint256[2]", - "name": "proofC", - "type": "uint256[2]" - } - ], - "name": "proveNonDeterministicPendingState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "rollupVerifier", - "outputs": [ - { - "internalType": "contract IVerifierRollup", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes", - "name": "transactions", - "type": "bytes" - }, - { - "internalType": "bytes32", - "name": "globalExitRoot", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "timestamp", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "minForcedTimestamp", - "type": "uint64" - } - ], - "internalType": "struct PolygonZKEVM.BatchData[]", - "name": "batches", - "type": "tuple[]" - } - ], - "name": "sequenceBatches", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes", - "name": "transactions", - "type": "bytes" - }, - { - "internalType": "bytes32", - "name": "globalExitRoot", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "minForcedTimestamp", - "type": "uint64" - } - ], - "internalType": "struct PolygonZKEVM.ForcedBatchData[]", - "name": "batches", - "type": "tuple[]" - } - ], - "name": "sequenceForceBatches", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "name": "sequencedBatches", - "outputs": [ - { - "internalType": "bytes32", - "name": "accInputHash", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "sequencedTimestamp", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "previousLastBatchSequenced", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "setAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bool", - "name": "newForceBatchAllowed", - "type": "bool" - } - ], - "name": "setForceBatchAllowed", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "newMultiplierBatchFee", - "type": "uint16" - } - ], - "name": "setMultiplierBatchFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "newPendingStateTimeout", - "type": "uint64" - } - ], - "name": "setPendingStateTimeout", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newTrustedAggregator", - "type": "address" - } - ], - "name": "setTrustedAggregator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "newTrustedAggregatorTimeout", - "type": "uint64" - } - ], - "name": "setTrustedAggregatorTimeout", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newTrustedSequencer", - "type": "address" - } - ], - "name": "setTrustedSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "newTrustedSequencerURL", - "type": "string" - } - ], - "name": "setTrustedSequencerURL", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "newVeryBatchTimeTarget", - "type": "uint64" - } - ], - "name": "setVeryBatchTimeTarget", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "trustedAggregator", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "trustedAggregatorTimeout", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "trustedSequencer", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "trustedSequencerURL", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "pendingStateNum", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "initNumBatch", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "finalNewBatch", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "newLocalExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "newStateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256[2]", - "name": "proofA", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2][2]", - "name": "proofB", - "type": "uint256[2][2]" - }, - { - "internalType": "uint256[2]", - "name": "proofC", - "type": "uint256[2]" - } - ], - "name": "trustedVerifyBatches", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "pendingStateNum", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "initNumBatch", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "finalNewBatch", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "newLocalExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "newStateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256[2]", - "name": "proofA", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2][2]", - "name": "proofB", - "type": "uint256[2][2]" - }, - { - "internalType": "uint256[2]", - "name": "proofC", - "type": "uint256[2]" - } - ], - "name": "verifyBatches", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "veryBatchTimeTarget", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b5061567f80620000216000396000f3fe608060405234801561001057600080fd5b50600436106103af5760003560e01c80638da5cb5b116101f4578063cfa8ed471161011a578063e7a7ed02116100ad578063f14916d61161007c578063f14916d6146108eb578063f2fde38b146108fe578063f851a44014610911578063f8b823e41461092457600080fd5b8063e7a7ed0214610898578063e8bf92ed146108b2578063eaeb077b146108c5578063edc41121146108d857600080fd5b8063d939b315116100e9578063d939b3151461085a578063dbc1697614610874578063e11f3f181461087c578063e217cfd61461088f57600080fd5b8063cfa8ed4714610806578063d02103ca14610820578063d8d1091b14610833578063d8f54db01461084657600080fd5b8063ab9fc5ef11610192578063b6b0b09711610161578063b6b0b097146107be578063c0ed84e0146107d8578063c89e42df146107e0578063cf136306146107f357600080fd5b8063ab9fc5ef14610712578063adc879e91461071c578063afd23cbe14610736578063b4d63f581461075e57600080fd5b80639eb831b9116101ce5780639eb831b9146106d75780639f0d039d146106df578063a3c573eb146106e7578063aa58bad6146106fa57600080fd5b80638da5cb5b146106ab57806399f5634e146106bc5780639c9f3dfe146106c457600080fd5b80634a910e6a116102d9578063715018a611610277578063837a473811610246578063837a473814610606578063841b24d7146106745780638b48931e1461068e5780638c4a0af71461069857600080fd5b8063715018a6146105c55780637215541a146105cd57806375c508b3146105e05780637fcb3653146105f357600080fd5b806360943d6a116102b357806360943d6a1461056c5780636b8616ce1461057f5780636ff512cc1461059f578063704b6c02146105b257600080fd5b80634a910e6a146105315780635392c5e014610544578063542028d51461056457600080fd5b8063383b3be811610351578063456052671161032057806345605267146104d7578063458c0477146104f15780634834a343146105045780634a1a89a71461051757600080fd5b8063383b3be814610484578063394218e9146104975780633c158267146104aa578063423fa856146104bd57600080fd5b806319d8ac611161038d57806319d8ac6114610404578063220d78991461042f57806329878983146104425780632d0889d31461046d57600080fd5b8063107bf28c146103b457806315064c96146103d25780631816b7e5146103ef575b600080fd5b6103bc61092d565b6040516103c9919061476e565b60405180910390f35b6065546103df9060ff1681565b60405190151581526020016103c9565b6104026103fd366004614788565b6109bb565b005b606854610417906001600160401b031681565b6040516001600160401b0390911681526020016103c9565b6103bc61043d3660046147c8565b610aef565b606a54610455906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b61047661ea6081565b6040519081526020016103c9565b6103df610492366004614815565b610cad565b6104026104a5366004614815565b610cf4565b6104026104b8366004614952565b610e47565b60685461041790600160401b90046001600160401b031681565b60685461041790600160801b90046001600160401b031681565b607254610417906001600160401b031681565b610402610512366004614a90565b611612565b60725461041790600160401b90046001600160401b031681565b61040261053f366004614815565b611946565b610476610552366004614815565b606d6020526000908152604090205481565b6103bc611bf4565b61040261057a366004614b32565b611c01565b61047661058d366004614815565b60666020526000908152604090205481565b6104026105ad366004614c09565b611f71565b6104026105c0366004614c09565b611ff5565b61040261206d565b6104026105db366004614815565b612081565b6104026105ee366004614c26565b61230d565b606954610417906001600160401b031681565b610649610614366004614cc4565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103c9565b60725461041790600160c01b90046001600160401b031681565b61041762093a8081565b6104026106a6366004614ceb565b61239c565b6033546001600160a01b0316610455565b610476612413565b6104026106d2366004614815565b6124f6565b610476600c81565b607454610476565b607054610455906001600160a01b031681565b6065546104179061010090046001600160401b031681565b6104176206978081565b606c5461041790600160a81b90046001600160401b031681565b60655461074b90600160481b900461ffff1681565b60405161ffff90911681526020016103c9565b61079961076c366004614815565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103c9565b60655461045590600160581b90046001600160a01b031681565b61041761264a565b6104026107ee366004614d08565b612697565b610402610801366004614815565b6126fd565b60695461045590600160401b90046001600160a01b031681565b606c54610455906001600160a01b031681565b610402610841366004614d3c565b61277e565b606c546103df90600160a01b900460ff1681565b60725461041790600160801b90046001600160401b031681565b610402612c6a565b61040261088a366004614c26565b612d26565b6104176103e881565b60685461041790600160c01b90046001600160401b031681565b606b54610455906001600160a01b031681565b6104026108d3366004614e2e565b612e6b565b6104026108e6366004614a90565b6131a0565b6104026108f9366004614c09565b6132c0565b61040261090c366004614c09565b613338565b607354610455906001600160a01b031681565b61047660745481565b606f805461093a90614e72565b80601f016020809104026020016040519081016040528092919081815260200182805461096690614e72565b80156109b35780601f10610988576101008083540402835291602001916109b3565b820191906000526020600020905b81548152906001019060200180831161099657829003601f168201915b505050505081565b6073546001600160a01b031633146109ee5760405162461bcd60e51b81526004016109e590614eac565b60405180910390fd5b6103e88161ffff16118015610a0857506104008161ffff16105b610a925760405162461bcd60e51b815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a7365744d756c7469706c69657260448201527f42617463684665653a206e65774d756c7469706c69657242617463684665652060648201526e696e636f72726563742072616e676560881b608482015260a4016109e5565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610b2157508115155b610ba15760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f7420606482015264195e1a5cdd60da1b608482015260a4016109e5565b80610c225760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f7420606482015264195e1a5cdd60da1b608482015260a4016109e5565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610ce392600160801b90920481169116614f0a565b6001600160401b0316111592915050565b6073546001600160a01b03163314610d1e5760405162461bcd60e51b81526004016109e590614eac565b62093a806001600160401b0382161115610d4a5760405162461bcd60e51b81526004016109e590614f35565b60655460ff16610df1576072546001600160401b03600160c01b909104811690821610610df15760405162461bcd60e51b815260206004820152604960248201527f50726f6f664f66456666696369656e63793a3a7365745472757374656441676760448201527f72656761746f7254696d656f75743a206e65772074696d656f7574206d757374606482015268103132903637bbb2b960b91b608482015260a4016109e5565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610ae4565b60655460ff1615610e6a5760405162461bcd60e51b81526004016109e590614fa5565b606954600160401b90046001600160a01b03163314610ef15760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016109e5565b805180610f5f5760405162461bcd60e51b815260206004820152604260248201526000805160206155ca83398151915260448201527f65733a204174206c65617374206d7573742073657175656e63652031206261746064820152610c6d60f31b608482015260a4016109e5565b6103e88110610fd25760405162461bcd60e51b815260206004820152604560248201526000805160206155ca83398151915260448201527f65733a2043616e6e6f742073657175656e63652074686174206d616e79206261606482015264746368657360d81b608482015260a4016109e5565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b858110156114405760008782815181106110255761102561500d565b60200260200101519050600081606001516001600160401b031611156111c5578361104f81615023565b94505060008160000151805190602001208260200151836060015160405160200161107c93929190615049565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461111b5760405162461bcd60e51b815260206004820152604260248201526000805160206155ca83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109e5565b81606001516001600160401b031682604001516001600160401b031610156111bf5760405162461bcd60e51b815260206004820152605d60248201526000805160206155ca83398151915260448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016109e5565b5061133a565b6020810151158061124e5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916112089160040190815260200190565b6020604051808303816000875af1158015611227573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124b919061506c565b15155b6112ae5760405162461bcd60e51b815260206004820152603f60248201526000805160206155ca83398151915260448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016109e5565b80515161ea601161133a5760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a4016109e5565b856001600160401b031681604001516001600160401b03161015801561136d57504281604001516001600160401b031611155b6113d85760405162461bcd60e51b815260206004820152604260248201526000805160206155ca83398151915260448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e606482015261676560f01b608482015260a4016109e5565b805180516020918201208183015160408085015190516113ff948894939291339101615085565b604051602081830303815290604052805190602001209250848061142290615023565b95505080604001519550508080611438906150c9565b915050611009565b506068546001600160401b03600160c01b909104811690831611156114bb5760405162461bcd60e51b815260206004820152603a60248201526000805160206155ca83398151915260448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016109e5565b6068546000906114db90600160801b90046001600160401b0316846150e2565b6114ee906001600160401b03168761510a565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115c3903390309084906115a89190615121565b606554600160581b90046001600160a01b03169291906133ae565b6115cb613419565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff16156116355760405162461bcd60e51b81526004016109e590614fa5565b6072546001600160401b03878116600090815260676020526040902060010154429261166c92600160c01b90910481169116614f0a565b6001600160401b031611156116e85760405162461bcd60e51b8152602060048201526048602482015260008051602061562a83398151915260448201527f3a20747275737465642061676772656761746f722074696d656f7574206e6f7460648201526708195e1c1a5c995960c21b608482015260a4016109e5565b6103e86116f588886150e2565b6001600160401b0316106117695760405162461bcd60e51b8152602060048201526041602482015260008051602061562a83398151915260448201527f3a2063616e6e6f74207665726966792074686174206d616e79206261746368656064820152607360f81b608482015260a4016109e5565b61177988888888888888886134bd565b611782866139a9565b607254600160801b90046001600160401b031660000361184a576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d6020526040902085905560725416156117e757607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561182d57600080fd5b505af1158015611841573d6000803e3d6000fd5b505050506118fb565b611852613419565b607280546001600160401b031690600061186b83615023565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b0381161580159061197357506072546001600160401b03600160401b9091048116908216115b801561198e57506072546001600160401b0390811690821611155b611a115760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a636f6e736f6c6964617465506560448201527f6e64696e6753746174653a2070656e64696e6753746174654e756d206d757374606482015267081a5b9d985b1a5960c21b608482015260a4016109e5565b606a546001600160a01b03163314611ac457611a2c81610cad565b611ac45760405162461bcd60e51b815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a636f6e736f6c6964617465506560448201527f6e64696e6753746174653a2070656e64696e67207374617465206973206e6f7460648201527f20726561647920746f20626520636f6e736f6c69646174656400000000000000608482015260a4016109e5565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d9094529382902092909255607280546fffffffffffffffff000000000000000019169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611b8657600080fd5b505af1158015611b9a573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611be791815260200190565b60405180910390a3505050565b606e805461093a90614e72565b600054610100900460ff1615808015611c215750600054600160ff909116105b80611c3b5750303b158015611c3b575060005460ff166001145b611c9e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109e5565b6000805460ff191660011790558015611cc1576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611d3e6020860186614c09565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d6e6060860160408701614c09565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611da960c0860160a08701614c09565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611e0660e0860160c08701614815565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611e3d6040860160208701614815565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611e796080860160608701614815565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611eb560a0860160808701614ceb565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611edd8482615186565b50606f611eea8382615186565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611f20613b8f565b8015611f66576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611f9b5760405162461bcd60e51b81526004016109e590614eac565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610ae4565b6073546001600160a01b0316331461201f5760405162461bcd60e51b81526004016109e590614eac565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190602001610ae4565b612075613c03565b61207f6000613c5d565b565b6033546001600160a01b03163314612302576072546000906001600160401b0316156120d257506072546001600160401b03908116600090815260716020526040902054600160401b9004166120e0565b506069546001600160401b03165b80826001600160401b0316116121685760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a6163746976617465456d65726760448201527f656e637953746174653a20426174636820616c726561647920766572696669656064820152601960fa1b608482015260a4016109e5565b6068546001600160401b03600160401b9091048116908316118015906121aa57506001600160401b038083166000908152606760205260409020600101541615155b61223a5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a6163746976617465456d65726760448201527f656e637953746174653a204261746368206e6f742073657175656e636564206f60648201527472206e6f7420656e64206f662073657175656e636560581b608482015260a4016109e5565b6001600160401b0380831660009081526067602052604090206001015442916122689162093a809116614f0a565b6001600160401b031611156123005760405162461bcd60e51b815260206004820152605260248201527f50726f6f664f66456666696369656e63793a3a6163746976617465456d65726760448201527f656e637953746174653a204167677265676174696f6e2068616c742074696d656064820152711bdd5d081a5cc81b9bdd08195e1c1a5c995960721b608482015260a4016109e5565b505b61230a613caf565b50565b60655460ff16156123305760405162461bcd60e51b81526004016109e590614fa5565b612341898989898989898989613d1f565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f66613caf565b6073546001600160a01b031633146123c65760405162461bcd60e51b81526004016109e590614eac565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610ae490831515815260200190565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612466573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248a919061506c565b9050600061249661264a565b6068546001600160401b03600160401b82048116916124c691600160801b8204811691600160c01b9004166150e2565b6124d09190614f0a565b6124da91906150e2565b6001600160401b031690506124ef818361525b565b9250505090565b6073546001600160a01b031633146125205760405162461bcd60e51b81526004016109e590614eac565b62093a806001600160401b038216111561254c5760405162461bcd60e51b81526004016109e590614f35565b60655460ff166125ef576072546001600160401b03600160801b9091048116908216106125ef5760405162461bcd60e51b8152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a73657450656e64696e67537461908201527f746554696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109e5565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610ae4565b6072546000906001600160401b03161561268757506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126c15760405162461bcd60e51b81526004016109e590614eac565b606e6126cd8282615186565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610ae4919061476e565b6073546001600160a01b031633146127275760405162461bcd60e51b81526004016109e590614eac565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610ae4565b60655460ff16156127a15760405162461bcd60e51b81526004016109e590614fa5565b606c54600160a01b900460ff1615156001146127cf5760405162461bcd60e51b81526004016109e59061526f565b80518061283d5760405162461bcd60e51b8152602060048201526042602482015260008051602061560a83398151915260448201527f42617463683a204d75737420666f726365206174206c656173742031206261746064820152610c6d60f31b608482015260a4016109e5565b6103e881106128b35760405162461bcd60e51b8152602060048201526048602482015260008051602061560a83398151915260448201527f426174636865733a2063616e6e6f74207665726966792074686174206d616e79606482015267206261746368657360c01b608482015260a4016109e5565b6068546001600160401b03600160c01b82048116916128db918491600160801b9004166152dd565b111561293d5760405162461bcd60e51b815260206004820152603a602482015260008051602061560a83398151915260448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016109e5565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612b7357600086828151811061298a5761298a61500d565b60200260200101519050838061299f90615023565b9450506000816000015180519060200120826020015183604001516040516020016129cc93929190615049565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612a705760405162461bcd60e51b8152602060048201526047602482015260008051602061560a83398151915260448201527f426174636865733a20466f7263656420626174636865732064617461206d75736064820152660e840dac2e8c6d60cb1b608482015260a4016109e5565b612a7b60018861510a565b8303612b155742620697808360400151612a959190614f0a565b6001600160401b03161115612b155760405162461bcd60e51b815260206004820152604c602482015260008051602061560a83398151915260448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201526b1b595bdd5d081c195c9a5bd960a21b608482015260a4016109e5565b8151805160209182012081840151604051612b3893889392914291339101615085565b6040516020818303038152906040528051906020012093508580612b5b90615023565b96505050508080612b6b906150c9565b91505061296e565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612c8c5760405162461bcd60e51b81526004016109e5906152f5565b6073546001600160a01b03163314612cb65760405162461bcd60e51b81526004016109e590614eac565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612d0657600080fd5b505af1158015612d1a573d6000803e3d6000fd5b5050505061207f6143cd565b606a546001600160a01b03163314612d505760405162461bcd60e51b81526004016109e590615352565b612d61898989898989898989613d1f565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612dac57607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612df257600080fd5b505af1158015612e06573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612e8e5760405162461bcd60e51b81526004016109e590614fa5565b606c54600160a01b900460ff161515600114612ebc5760405162461bcd60e51b81526004016109e59061526f565b6000612ec760745490565b905081811115612f315760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201526e6f7420656e6f756768206d6174696360881b60648201526084016109e5565b61ea60835110612fa95760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016109e5565b606554612fc890600160581b90046001600160a01b03163330846133ae565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015613012573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613036919061506c565b60688054919250600160c01b9091046001600160401b031690601861305a83615023565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550508380519060200120814260405160200161309b93929190615049565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361313f57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261319a565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613191939291906153b9565b60405180910390a25b50505050565b606a546001600160a01b031633146131ca5760405162461bcd60e51b81526004016109e590615352565b6131da88888888888888886134bd565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561322557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561326b57600080fd5b505af115801561327f573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611934565b6073546001600160a01b031633146132ea5760405162461bcd60e51b81526004016109e590614eac565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001610ae4565b613340613c03565b6001600160a01b0381166133a55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e5565b61230a81613c5d565b6040516001600160a01b038085166024830152831660448201526064810182905261319a9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614424565b6072546001600160401b03600160401b820481169116111561207f5760725460009061345690600160401b90046001600160401b03166001614f0a565b905061346181610cad565b1561230a576072546000906002906134839084906001600160401b03166150e2565b61348d91906153ec565b6134979083614f0a565b90506134a281610cad565b156134b4576134b081611946565b5050565b6134b082611946565b6000806134c861264a565b90506001600160401b038a1615613624576072546001600160401b03908116908b1611156135725760405162461bcd60e51b815260206004820152605d602482015260008051602061562a83398151915260448201527f3a2070656e64696e6753746174654e756d206d757374206265206c657373206f60648201527f7220657175616c207468616e206c61737450656e64696e675374617465000000608482015260a4016109e5565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b909204161461361e5760405162461bcd60e51b8152602060048201526051602482015260008051602061562a83398151915260448201527f3a20696e69744e756d4261746368206d757374206d61746368207468652070656064820152700dcc8d2dcce40e6e8c2e8ca40c4c2e8c6d607b1b608482015260a4016109e5565b50613758565b6001600160401b0389166000908152606d60205260409020549150816136b15760405162461bcd60e51b8152602060048201526048602482015260008051602061562a83398151915260448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e6064820152671bdd08195e1a5cdd60c21b608482015260a4016109e5565b806001600160401b0316896001600160401b031611156137585760405162461bcd60e51b8152602060048201526062602482015260008051602061562a83398151915260448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e2063757272656e744c61737456657269666965644261746084820152610c6d60f31b60a482015260c4016109e5565b806001600160401b0316886001600160401b0316116137f35760405162461bcd60e51b815260206004820152605c602482015260008051602061562a83398151915260448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e2063757272656e744c6173745665726966696564426174636800000000608482015260a4016109e5565b60006138028a8a8a868b610aef565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516138379190615412565b602060405180830381855afa158015613854573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613877919061506c565b613881919061542e565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916138c5918b918b918b9190600401615442565b602060405180830381865afa1580156138e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061390691906154bc565b6139585760405162461bcd60e51b815260206004820152602f602482015260008051602061562a83398151915260448201526e1d1024a72b20a624a22fa82927a7a360891b60648201526084016109e5565b61399b33613966858d6150e2565b6001600160401b0316613977612413565b6139819190615121565b606554600160581b90046001600160a01b031691906144fb565b505050505050505050505050565b60006139b361264a565b9050816000806139c384846150e2565b6001600160401b031690505b836001600160401b0316836001600160401b031614613a75576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613a1f91164261510a565b1115613a5a576001810154613a4490600160401b90046001600160401b0316866150e2565b613a57906001600160401b0316846152dd565b92505b60010154600160401b90046001600160401b031692506139cf565b6000613a81838361510a565b905082811015613afb576000613a97828561510a565b9050600c8111613aa75780613aaa565b600c5b9050613ab7816003615121565b613ac290600a6155bd565b606554613adb908390600160481b900461ffff166155bd565b607454613ae89190615121565b613af2919061525b565b60745550613b87565b6000613b07848361510a565b9050600c8111613b175780613b1a565b600c5b90506000613b29826003615121565b613b3490600a6155bd565b606554613b4d908490600160481b900461ffff166155bd565b607454613b5a9190615121565b613b64919061525b565b905080607454607454613b779190615121565b613b81919061525b565b60745550505b505050505050565b600054610100900460ff16613bfa5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109e5565b61207f33613c5d565b6033546001600160a01b0316331461207f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109e5565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613cff57600080fd5b505af1158015613d13573d6000803e3d6000fd5b5050505061207f61452b565b60006001600160401b038a1615613ead576072546001600160401b03908116908b161115613de35760405162461bcd60e51b815260206004820152607160248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a2070656e64696e6753746160648201527f74654e756d206d757374206265206c657373206f7220657175616c207468616e608482015270206c61737450656e64696e67537461746560781b60a482015260c4016109e5565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613ea75760405162461bcd60e51b815260206004820152606560248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a20696e69744e756d42617460648201527f6368206d757374206d61746368207468652070656e64696e67207374617465206084820152640c4c2e8c6d60db1b60a482015260c4016109e5565b50614006565b506001600160401b0387166000908152606d602052604090205480613f4e5760405162461bcd60e51b815260206004820152605c60248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a20696e69744e756d42617460648201527f636820737461746520726f6f7420646f6573206e6f7420657869737400000000608482015260a4016109e5565b6069546001600160401b0390811690891611156140065760405162461bcd60e51b815260206004820152607660248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a20696e69744e756d42617460648201527f6368206d757374206265206c657373206f7220657175616c207468616e2063756084820152750e4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d60531b60a482015260c4016109e5565b6072546001600160401b03908116908a16118015906140365750896001600160401b0316896001600160401b0316115b801561405757506072546001600160401b03600160401b9091048116908a16115b6140d45760405162461bcd60e51b815260206004820152605460248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a2066696e616c50656e64696064820152731b99d4dd185d19539d5b481a5b98dbdc9c9958dd60621b608482015260a4016109e5565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146141995760405162461bcd60e51b815260206004820152606f60248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a2066696e616c4e6577426160648201527f746368206d75737420626520657175616c207468616e2063757272656e744c6160848201526e0e6e8accae4d2ccd2cac884c2e8c6d608b1b60a482015260c4016109e5565b60006141a8898989858a610aef565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516141dd9190615412565b602060405180830381855afa1580156141fa573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061421d919061506c565b614227919061542e565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d9161426b918a918a918a9190600401615442565b602060405180830381865afa158015614288573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ac91906154bc565b6143185760405162461bcd60e51b815260206004820152604360248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a20494e56414c49445f505260648201526227a7a360e91b608482015260a4016109e5565b6001600160401b038b1660009081526071602052604090206002015487900361399b5760405162461bcd60e51b815260206004820152606760248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a2073746f72656420726f6f60648201527f74206d75737420626520646966666572656e74207468616e206e6577207374616084820152661d19481c9bdbdd60ca1b60a482015260c4016109e5565b60655460ff166143ef5760405162461bcd60e51b81526004016109e5906152f5565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614479826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145869092919063ffffffff16565b8051909150156144f6578080602001905181019061449791906154bc565b6144f65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109e5565b505050565b6040516001600160a01b0383166024820152604481018290526144f690849063a9059cbb60e01b906064016133e2565b60655460ff161561454e5760405162461bcd60e51b81526004016109e590614fa5565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614595848460008561459d565b949350505050565b6060824710156145fe5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109e5565b600080866001600160a01b0316858760405161461a9190615412565b60006040518083038185875af1925050503d8060008114614657576040519150601f19603f3d011682016040523d82523d6000602084013e61465c565b606091505b509150915061466d87838387614678565b979650505050505050565b606083156146e75782516000036146e0576001600160a01b0385163b6146e05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109e5565b5081614595565b61459583838151156146fc5781518083602001fd5b8060405162461bcd60e51b81526004016109e5919061476e565b60005b83811015614731578181015183820152602001614719565b8381111561319a5750506000910152565b6000815180845261475a816020860160208601614716565b601f01601f19169290920160200192915050565b6020815260006147816020830184614742565b9392505050565b60006020828403121561479a57600080fd5b813561ffff8116811461478157600080fd5b80356001600160401b03811681146147c357600080fd5b919050565b600080600080600060a086880312156147e057600080fd5b6147e9866147ac565b94506147f7602087016147ac565b94979496505050506040830135926060810135926080909101359150565b60006020828403121561482757600080fd5b614781826147ac565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171561486857614868614830565b60405290565b604051606081016001600160401b038111828210171561486857614868614830565b604051601f8201601f191681016001600160401b03811182821017156148b8576148b8614830565b604052919050565b60006001600160401b038211156148d9576148d9614830565b5060051b60200190565b600082601f8301126148f457600080fd5b81356001600160401b0381111561490d5761490d614830565b614920601f8201601f1916602001614890565b81815284602083860101111561493557600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561496557600080fd5b82356001600160401b038082111561497c57600080fd5b818501915085601f83011261499057600080fd5b81356149a361499e826148c0565b614890565b81815260059190911b830184019084810190888311156149c257600080fd5b8585015b83811015614a5b578035858111156149de5760008081fd5b86016080818c03601f19018113156149f65760008081fd5b6149fe614846565b8983013588811115614a105760008081fd5b614a1e8e8c838701016148e3565b8252506040808401358b8301526060614a388186016147ac565b82840152614a478486016147ac565b9083015250855250509186019186016149c6565b5098975050505050505050565b8060408101831015614a7957600080fd5b92915050565b8060808101831015614a7957600080fd5b6000806000806000806000806101a0898b031215614aad57600080fd5b614ab6896147ac565b9750614ac460208a016147ac565b9650614ad260408a016147ac565b95506060890135945060808901359350614aef8a60a08b01614a68565b9250614afe8a60e08b01614a7f565b9150614b0e8a6101608b01614a68565b90509295985092959890939650565b6001600160a01b038116811461230a57600080fd5b600080600080600080600080888a036101c0811215614b5057600080fd5b8935614b5b81614b1d565b985060208a0135614b6b81614b1d565b975060408a0135614b7b81614b1d565b965060608a0135614b8b81614b1d565b955060e0607f1982011215614b9f57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614bc957600080fd5b614bd58c838d016148e3565b93506101a08b0135915080821115614bec57600080fd5b50614bf98b828c016148e3565b9150509295985092959890939650565b600060208284031215614c1b57600080fd5b813561478181614b1d565b60008060008060008060008060006101c08a8c031215614c4557600080fd5b614c4e8a6147ac565b9850614c5c60208b016147ac565b9750614c6a60408b016147ac565b9650614c7860608b016147ac565b955060808a0135945060a08a01359350614c958b60c08c01614a68565b9250614ca58b6101008c01614a7f565b9150614cb58b6101808c01614a68565b90509295985092959850929598565b600060208284031215614cd657600080fd5b5035919050565b801515811461230a57600080fd5b600060208284031215614cfd57600080fd5b813561478181614cdd565b600060208284031215614d1a57600080fd5b81356001600160401b03811115614d3057600080fd5b614595848285016148e3565b60006020808385031215614d4f57600080fd5b82356001600160401b0380821115614d6657600080fd5b818501915085601f830112614d7a57600080fd5b8135614d8861499e826148c0565b81815260059190911b83018401908481019088831115614da757600080fd5b8585015b83811015614a5b57803585811115614dc35760008081fd5b86016060818c03601f1901811315614ddb5760008081fd5b614de361486e565b8983013588811115614df55760008081fd5b614e038e8c838701016148e3565b8252506040808401358b830152614e1b8385016147ac565b9082015285525050918601918601614dab565b60008060408385031215614e4157600080fd5b82356001600160401b03811115614e5757600080fd5b614e63858286016148e3565b95602094909401359450505050565b600181811c90821680614e8657607f821691505b602082108103614ea657634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526028908201527f50726f6f664f66456666696369656e63793a3a6f6e6c7941646d696e3a206f6e604082015267363c9030b236b4b760c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614f2c57614f2c614ef4565b01949350505050565b6020808252604a908201527f50726f6f664f66456666696369656e63793a3a73657450656e64696e6753746160408201527f746554696d656f75743a206578636565642068616c74206167677265676174696060820152691bdb881d1a5b595bdd5d60b21b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361503f5761503f614ef4565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b60006020828403121561507e57600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b6000600182016150db576150db614ef4565b5060010190565b60006001600160401b038381169083168181101561510257615102614ef4565b039392505050565b60008282101561511c5761511c614ef4565b500390565b600081600019048311821515161561513b5761513b614ef4565b500290565b601f8211156144f657600081815260208120601f850160051c810160208610156151675750805b601f850160051c820191505b81811015613b8757828155600101615173565b81516001600160401b0381111561519f5761519f614830565b6151b3816151ad8454614e72565b84615140565b602080601f8311600181146151e857600084156151d05750858301515b600019600386901b1c1916600185901b178555613b87565b600085815260208120601f198616915b82811015615217578886015182559484019460019091019084016151f8565b50858210156152355787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b60008261526a5761526a615245565b500490565b60208082526048908201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160408201527f6c6c6f7765643a206f6e6c7920696620666f72636520626174636820697320616060820152677661696c61626c6560c01b608082015260a00190565b600082198211156152f0576152f0614ef4565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b60208082526041908201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564416760408201527f6772656761746f723a206f6e6c7920747275737465642041676772656761746f6060820152603960f91b608082015260a00190565b8381526001600160a01b03831660208201526060604082018190526000906153e390830184614742565b95945050505050565b60006001600160401b038084168061540657615406615245565b92169190910492915050565b60008251615424818460208701614716565b9190910192915050565b60008261543d5761543d615245565b500690565b61012081016040808784376000838201818152879190815b600281101561547a5784848337908401828152928401929060010161545a565b5050828760c0870137610100850181815286935091505b60018110156154b0578251825260209283019290910190600101615491565b50505095945050505050565b6000602082840312156154ce57600080fd5b815161478181614cdd565b600181815b808511156155145781600019048211156154fa576154fa614ef4565b8085161561550757918102915b93841c93908002906154de565b509250929050565b60008261552b57506001614a79565b8161553857506000614a79565b816001811461554e576002811461555857615574565b6001915050614a79565b60ff84111561556957615569614ef4565b50506001821b614a79565b5060208310610133831016604e8410600b8410161715615597575081810a614a79565b6155a183836154d9565b80600019048211156155b5576155b5614ef4565b029392505050565b6000614781838361551c56fe50726f6f664f66456666696369656e63793a3a73657175656e6365426174636850726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657250726f6f664f66456666696369656e63793a3a73657175656e6365466f72636550726f6f664f66456666696369656e63793a3a76657269667942617463686573a2646970667358221220cd9b4b625eef949536feef24eb4d660057471116e5beb049b2c6fed8b393b9c864736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103af5760003560e01c80638da5cb5b116101f4578063cfa8ed471161011a578063e7a7ed02116100ad578063f14916d61161007c578063f14916d6146108eb578063f2fde38b146108fe578063f851a44014610911578063f8b823e41461092457600080fd5b8063e7a7ed0214610898578063e8bf92ed146108b2578063eaeb077b146108c5578063edc41121146108d857600080fd5b8063d939b315116100e9578063d939b3151461085a578063dbc1697614610874578063e11f3f181461087c578063e217cfd61461088f57600080fd5b8063cfa8ed4714610806578063d02103ca14610820578063d8d1091b14610833578063d8f54db01461084657600080fd5b8063ab9fc5ef11610192578063b6b0b09711610161578063b6b0b097146107be578063c0ed84e0146107d8578063c89e42df146107e0578063cf136306146107f357600080fd5b8063ab9fc5ef14610712578063adc879e91461071c578063afd23cbe14610736578063b4d63f581461075e57600080fd5b80639eb831b9116101ce5780639eb831b9146106d75780639f0d039d146106df578063a3c573eb146106e7578063aa58bad6146106fa57600080fd5b80638da5cb5b146106ab57806399f5634e146106bc5780639c9f3dfe146106c457600080fd5b80634a910e6a116102d9578063715018a611610277578063837a473811610246578063837a473814610606578063841b24d7146106745780638b48931e1461068e5780638c4a0af71461069857600080fd5b8063715018a6146105c55780637215541a146105cd57806375c508b3146105e05780637fcb3653146105f357600080fd5b806360943d6a116102b357806360943d6a1461056c5780636b8616ce1461057f5780636ff512cc1461059f578063704b6c02146105b257600080fd5b80634a910e6a146105315780635392c5e014610544578063542028d51461056457600080fd5b8063383b3be811610351578063456052671161032057806345605267146104d7578063458c0477146104f15780634834a343146105045780634a1a89a71461051757600080fd5b8063383b3be814610484578063394218e9146104975780633c158267146104aa578063423fa856146104bd57600080fd5b806319d8ac611161038d57806319d8ac6114610404578063220d78991461042f57806329878983146104425780632d0889d31461046d57600080fd5b8063107bf28c146103b457806315064c96146103d25780631816b7e5146103ef575b600080fd5b6103bc61092d565b6040516103c9919061476e565b60405180910390f35b6065546103df9060ff1681565b60405190151581526020016103c9565b6104026103fd366004614788565b6109bb565b005b606854610417906001600160401b031681565b6040516001600160401b0390911681526020016103c9565b6103bc61043d3660046147c8565b610aef565b606a54610455906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b61047661ea6081565b6040519081526020016103c9565b6103df610492366004614815565b610cad565b6104026104a5366004614815565b610cf4565b6104026104b8366004614952565b610e47565b60685461041790600160401b90046001600160401b031681565b60685461041790600160801b90046001600160401b031681565b607254610417906001600160401b031681565b610402610512366004614a90565b611612565b60725461041790600160401b90046001600160401b031681565b61040261053f366004614815565b611946565b610476610552366004614815565b606d6020526000908152604090205481565b6103bc611bf4565b61040261057a366004614b32565b611c01565b61047661058d366004614815565b60666020526000908152604090205481565b6104026105ad366004614c09565b611f71565b6104026105c0366004614c09565b611ff5565b61040261206d565b6104026105db366004614815565b612081565b6104026105ee366004614c26565b61230d565b606954610417906001600160401b031681565b610649610614366004614cc4565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103c9565b60725461041790600160c01b90046001600160401b031681565b61041762093a8081565b6104026106a6366004614ceb565b61239c565b6033546001600160a01b0316610455565b610476612413565b6104026106d2366004614815565b6124f6565b610476600c81565b607454610476565b607054610455906001600160a01b031681565b6065546104179061010090046001600160401b031681565b6104176206978081565b606c5461041790600160a81b90046001600160401b031681565b60655461074b90600160481b900461ffff1681565b60405161ffff90911681526020016103c9565b61079961076c366004614815565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103c9565b60655461045590600160581b90046001600160a01b031681565b61041761264a565b6104026107ee366004614d08565b612697565b610402610801366004614815565b6126fd565b60695461045590600160401b90046001600160a01b031681565b606c54610455906001600160a01b031681565b610402610841366004614d3c565b61277e565b606c546103df90600160a01b900460ff1681565b60725461041790600160801b90046001600160401b031681565b610402612c6a565b61040261088a366004614c26565b612d26565b6104176103e881565b60685461041790600160c01b90046001600160401b031681565b606b54610455906001600160a01b031681565b6104026108d3366004614e2e565b612e6b565b6104026108e6366004614a90565b6131a0565b6104026108f9366004614c09565b6132c0565b61040261090c366004614c09565b613338565b607354610455906001600160a01b031681565b61047660745481565b606f805461093a90614e72565b80601f016020809104026020016040519081016040528092919081815260200182805461096690614e72565b80156109b35780601f10610988576101008083540402835291602001916109b3565b820191906000526020600020905b81548152906001019060200180831161099657829003601f168201915b505050505081565b6073546001600160a01b031633146109ee5760405162461bcd60e51b81526004016109e590614eac565b60405180910390fd5b6103e88161ffff16118015610a0857506104008161ffff16105b610a925760405162461bcd60e51b815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a7365744d756c7469706c69657260448201527f42617463684665653a206e65774d756c7469706c69657242617463684665652060648201526e696e636f72726563742072616e676560881b608482015260a4016109e5565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610b2157508115155b610ba15760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f7420606482015264195e1a5cdd60da1b608482015260a4016109e5565b80610c225760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f7420606482015264195e1a5cdd60da1b608482015260a4016109e5565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610ce392600160801b90920481169116614f0a565b6001600160401b0316111592915050565b6073546001600160a01b03163314610d1e5760405162461bcd60e51b81526004016109e590614eac565b62093a806001600160401b0382161115610d4a5760405162461bcd60e51b81526004016109e590614f35565b60655460ff16610df1576072546001600160401b03600160c01b909104811690821610610df15760405162461bcd60e51b815260206004820152604960248201527f50726f6f664f66456666696369656e63793a3a7365745472757374656441676760448201527f72656761746f7254696d656f75743a206e65772074696d656f7574206d757374606482015268103132903637bbb2b960b91b608482015260a4016109e5565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610ae4565b60655460ff1615610e6a5760405162461bcd60e51b81526004016109e590614fa5565b606954600160401b90046001600160a01b03163314610ef15760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e6365720060648201526084016109e5565b805180610f5f5760405162461bcd60e51b815260206004820152604260248201526000805160206155ca83398151915260448201527f65733a204174206c65617374206d7573742073657175656e63652031206261746064820152610c6d60f31b608482015260a4016109e5565b6103e88110610fd25760405162461bcd60e51b815260206004820152604560248201526000805160206155ca83398151915260448201527f65733a2043616e6e6f742073657175656e63652074686174206d616e79206261606482015264746368657360d81b608482015260a4016109e5565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b858110156114405760008782815181106110255761102561500d565b60200260200101519050600081606001516001600160401b031611156111c5578361104f81615023565b94505060008160000151805190602001208260200151836060015160405160200161107c93929190615049565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461111b5760405162461bcd60e51b815260206004820152604260248201526000805160206155ca83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109e5565b81606001516001600160401b031682604001516001600160401b031610156111bf5760405162461bcd60e51b815260206004820152605d60248201526000805160206155ca83398151915260448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a4016109e5565b5061133a565b6020810151158061124e5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916112089160040190815260200190565b6020604051808303816000875af1158015611227573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124b919061506c565b15155b6112ae5760405162461bcd60e51b815260206004820152603f60248201526000805160206155ca83398151915260448201527f65733a20476c6f62616c206578697420726f6f74206d7573742065786973740060648201526084016109e5565b80515161ea601161133a5760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a4016109e5565b856001600160401b031681604001516001600160401b03161015801561136d57504281604001516001600160401b031611155b6113d85760405162461bcd60e51b815260206004820152604260248201526000805160206155ca83398151915260448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e606482015261676560f01b608482015260a4016109e5565b805180516020918201208183015160408085015190516113ff948894939291339101615085565b604051602081830303815290604052805190602001209250848061142290615023565b95505080604001519550508080611438906150c9565b915050611009565b506068546001600160401b03600160c01b909104811690831611156114bb5760405162461bcd60e51b815260206004820152603a60248201526000805160206155ca83398151915260448201527f65733a20466f7263652062617463686573206f766572666c6f7700000000000060648201526084016109e5565b6068546000906114db90600160801b90046001600160401b0316846150e2565b6114ee906001600160401b03168761510a565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115c3903390309084906115a89190615121565b606554600160581b90046001600160a01b03169291906133ae565b6115cb613419565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff16156116355760405162461bcd60e51b81526004016109e590614fa5565b6072546001600160401b03878116600090815260676020526040902060010154429261166c92600160c01b90910481169116614f0a565b6001600160401b031611156116e85760405162461bcd60e51b8152602060048201526048602482015260008051602061562a83398151915260448201527f3a20747275737465642061676772656761746f722074696d656f7574206e6f7460648201526708195e1c1a5c995960c21b608482015260a4016109e5565b6103e86116f588886150e2565b6001600160401b0316106117695760405162461bcd60e51b8152602060048201526041602482015260008051602061562a83398151915260448201527f3a2063616e6e6f74207665726966792074686174206d616e79206261746368656064820152607360f81b608482015260a4016109e5565b61177988888888888888886134bd565b611782866139a9565b607254600160801b90046001600160401b031660000361184a576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d6020526040902085905560725416156117e757607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561182d57600080fd5b505af1158015611841573d6000803e3d6000fd5b505050506118fb565b611852613419565b607280546001600160401b031690600061186b83615023565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b0381161580159061197357506072546001600160401b03600160401b9091048116908216115b801561198e57506072546001600160401b0390811690821611155b611a115760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a636f6e736f6c6964617465506560448201527f6e64696e6753746174653a2070656e64696e6753746174654e756d206d757374606482015267081a5b9d985b1a5960c21b608482015260a4016109e5565b606a546001600160a01b03163314611ac457611a2c81610cad565b611ac45760405162461bcd60e51b815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a636f6e736f6c6964617465506560448201527f6e64696e6753746174653a2070656e64696e67207374617465206973206e6f7460648201527f20726561647920746f20626520636f6e736f6c69646174656400000000000000608482015260a4016109e5565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d9094529382902092909255607280546fffffffffffffffff000000000000000019169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611b8657600080fd5b505af1158015611b9a573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611be791815260200190565b60405180910390a3505050565b606e805461093a90614e72565b600054610100900460ff1615808015611c215750600054600160ff909116105b80611c3b5750303b158015611c3b575060005460ff166001145b611c9e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109e5565b6000805460ff191660011790558015611cc1576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611d3e6020860186614c09565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d6e6060860160408701614c09565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611da960c0860160a08701614c09565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611e0660e0860160c08701614815565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611e3d6040860160208701614815565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611e796080860160608701614815565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611eb560a0860160808701614ceb565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611edd8482615186565b50606f611eea8382615186565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611f20613b8f565b8015611f66576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611f9b5760405162461bcd60e51b81526004016109e590614eac565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610ae4565b6073546001600160a01b0316331461201f5760405162461bcd60e51b81526004016109e590614eac565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190602001610ae4565b612075613c03565b61207f6000613c5d565b565b6033546001600160a01b03163314612302576072546000906001600160401b0316156120d257506072546001600160401b03908116600090815260716020526040902054600160401b9004166120e0565b506069546001600160401b03165b80826001600160401b0316116121685760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a6163746976617465456d65726760448201527f656e637953746174653a20426174636820616c726561647920766572696669656064820152601960fa1b608482015260a4016109e5565b6068546001600160401b03600160401b9091048116908316118015906121aa57506001600160401b038083166000908152606760205260409020600101541615155b61223a5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a6163746976617465456d65726760448201527f656e637953746174653a204261746368206e6f742073657175656e636564206f60648201527472206e6f7420656e64206f662073657175656e636560581b608482015260a4016109e5565b6001600160401b0380831660009081526067602052604090206001015442916122689162093a809116614f0a565b6001600160401b031611156123005760405162461bcd60e51b815260206004820152605260248201527f50726f6f664f66456666696369656e63793a3a6163746976617465456d65726760448201527f656e637953746174653a204167677265676174696f6e2068616c742074696d656064820152711bdd5d081a5cc81b9bdd08195e1c1a5c995960721b608482015260a4016109e5565b505b61230a613caf565b50565b60655460ff16156123305760405162461bcd60e51b81526004016109e590614fa5565b612341898989898989898989613d1f565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f66613caf565b6073546001600160a01b031633146123c65760405162461bcd60e51b81526004016109e590614eac565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610ae490831515815260200190565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612466573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248a919061506c565b9050600061249661264a565b6068546001600160401b03600160401b82048116916124c691600160801b8204811691600160c01b9004166150e2565b6124d09190614f0a565b6124da91906150e2565b6001600160401b031690506124ef818361525b565b9250505090565b6073546001600160a01b031633146125205760405162461bcd60e51b81526004016109e590614eac565b62093a806001600160401b038216111561254c5760405162461bcd60e51b81526004016109e590614f35565b60655460ff166125ef576072546001600160401b03600160801b9091048116908216106125ef5760405162461bcd60e51b8152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a73657450656e64696e67537461908201527f746554696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109e5565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610ae4565b6072546000906001600160401b03161561268757506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126c15760405162461bcd60e51b81526004016109e590614eac565b606e6126cd8282615186565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610ae4919061476e565b6073546001600160a01b031633146127275760405162461bcd60e51b81526004016109e590614eac565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610ae4565b60655460ff16156127a15760405162461bcd60e51b81526004016109e590614fa5565b606c54600160a01b900460ff1615156001146127cf5760405162461bcd60e51b81526004016109e59061526f565b80518061283d5760405162461bcd60e51b8152602060048201526042602482015260008051602061560a83398151915260448201527f42617463683a204d75737420666f726365206174206c656173742031206261746064820152610c6d60f31b608482015260a4016109e5565b6103e881106128b35760405162461bcd60e51b8152602060048201526048602482015260008051602061560a83398151915260448201527f426174636865733a2063616e6e6f74207665726966792074686174206d616e79606482015267206261746368657360c01b608482015260a4016109e5565b6068546001600160401b03600160c01b82048116916128db918491600160801b9004166152dd565b111561293d5760405162461bcd60e51b815260206004820152603a602482015260008051602061560a83398151915260448201527f42617463683a20466f72636520626174636820696e76616c696400000000000060648201526084016109e5565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612b7357600086828151811061298a5761298a61500d565b60200260200101519050838061299f90615023565b9450506000816000015180519060200120826020015183604001516040516020016129cc93929190615049565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612a705760405162461bcd60e51b8152602060048201526047602482015260008051602061560a83398151915260448201527f426174636865733a20466f7263656420626174636865732064617461206d75736064820152660e840dac2e8c6d60cb1b608482015260a4016109e5565b612a7b60018861510a565b8303612b155742620697808360400151612a959190614f0a565b6001600160401b03161115612b155760405162461bcd60e51b815260206004820152604c602482015260008051602061560a83398151915260448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201526b1b595bdd5d081c195c9a5bd960a21b608482015260a4016109e5565b8151805160209182012081840151604051612b3893889392914291339101615085565b6040516020818303038152906040528051906020012093508580612b5b90615023565b96505050508080612b6b906150c9565b91505061296e565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612c8c5760405162461bcd60e51b81526004016109e5906152f5565b6073546001600160a01b03163314612cb65760405162461bcd60e51b81526004016109e590614eac565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612d0657600080fd5b505af1158015612d1a573d6000803e3d6000fd5b5050505061207f6143cd565b606a546001600160a01b03163314612d505760405162461bcd60e51b81526004016109e590615352565b612d61898989898989898989613d1f565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612dac57607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612df257600080fd5b505af1158015612e06573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612e8e5760405162461bcd60e51b81526004016109e590614fa5565b606c54600160a01b900460ff161515600114612ebc5760405162461bcd60e51b81526004016109e59061526f565b6000612ec760745490565b905081811115612f315760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201526e6f7420656e6f756768206d6174696360881b60648201526084016109e5565b61ea60835110612fa95760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016109e5565b606554612fc890600160581b90046001600160a01b03163330846133ae565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015613012573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613036919061506c565b60688054919250600160c01b9091046001600160401b031690601861305a83615023565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550508380519060200120814260405160200161309b93929190615049565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361313f57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261319a565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051613191939291906153b9565b60405180910390a25b50505050565b606a546001600160a01b031633146131ca5760405162461bcd60e51b81526004016109e590615352565b6131da88888888888888886134bd565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561322557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561326b57600080fd5b505af115801561327f573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611934565b6073546001600160a01b031633146132ea5760405162461bcd60e51b81526004016109e590614eac565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001610ae4565b613340613c03565b6001600160a01b0381166133a55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e5565b61230a81613c5d565b6040516001600160a01b038085166024830152831660448201526064810182905261319a9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614424565b6072546001600160401b03600160401b820481169116111561207f5760725460009061345690600160401b90046001600160401b03166001614f0a565b905061346181610cad565b1561230a576072546000906002906134839084906001600160401b03166150e2565b61348d91906153ec565b6134979083614f0a565b90506134a281610cad565b156134b4576134b081611946565b5050565b6134b082611946565b6000806134c861264a565b90506001600160401b038a1615613624576072546001600160401b03908116908b1611156135725760405162461bcd60e51b815260206004820152605d602482015260008051602061562a83398151915260448201527f3a2070656e64696e6753746174654e756d206d757374206265206c657373206f60648201527f7220657175616c207468616e206c61737450656e64696e675374617465000000608482015260a4016109e5565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b909204161461361e5760405162461bcd60e51b8152602060048201526051602482015260008051602061562a83398151915260448201527f3a20696e69744e756d4261746368206d757374206d61746368207468652070656064820152700dcc8d2dcce40e6e8c2e8ca40c4c2e8c6d607b1b608482015260a4016109e5565b50613758565b6001600160401b0389166000908152606d60205260409020549150816136b15760405162461bcd60e51b8152602060048201526048602482015260008051602061562a83398151915260448201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e6064820152671bdd08195e1a5cdd60c21b608482015260a4016109e5565b806001600160401b0316896001600160401b031611156137585760405162461bcd60e51b8152602060048201526062602482015260008051602061562a83398151915260448201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560648201527f7175616c207468616e2063757272656e744c61737456657269666965644261746084820152610c6d60f31b60a482015260c4016109e5565b806001600160401b0316886001600160401b0316116137f35760405162461bcd60e51b815260206004820152605c602482015260008051602061562a83398151915260448201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460648201527f68616e2063757272656e744c6173745665726966696564426174636800000000608482015260a4016109e5565b60006138028a8a8a868b610aef565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516138379190615412565b602060405180830381855afa158015613854573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613877919061506c565b613881919061542e565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916138c5918b918b918b9190600401615442565b602060405180830381865afa1580156138e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061390691906154bc565b6139585760405162461bcd60e51b815260206004820152602f602482015260008051602061562a83398151915260448201526e1d1024a72b20a624a22fa82927a7a360891b60648201526084016109e5565b61399b33613966858d6150e2565b6001600160401b0316613977612413565b6139819190615121565b606554600160581b90046001600160a01b031691906144fb565b505050505050505050505050565b60006139b361264a565b9050816000806139c384846150e2565b6001600160401b031690505b836001600160401b0316836001600160401b031614613a75576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613a1f91164261510a565b1115613a5a576001810154613a4490600160401b90046001600160401b0316866150e2565b613a57906001600160401b0316846152dd565b92505b60010154600160401b90046001600160401b031692506139cf565b6000613a81838361510a565b905082811015613afb576000613a97828561510a565b9050600c8111613aa75780613aaa565b600c5b9050613ab7816003615121565b613ac290600a6155bd565b606554613adb908390600160481b900461ffff166155bd565b607454613ae89190615121565b613af2919061525b565b60745550613b87565b6000613b07848361510a565b9050600c8111613b175780613b1a565b600c5b90506000613b29826003615121565b613b3490600a6155bd565b606554613b4d908490600160481b900461ffff166155bd565b607454613b5a9190615121565b613b64919061525b565b905080607454607454613b779190615121565b613b81919061525b565b60745550505b505050505050565b600054610100900460ff16613bfa5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109e5565b61207f33613c5d565b6033546001600160a01b0316331461207f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109e5565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613cff57600080fd5b505af1158015613d13573d6000803e3d6000fd5b5050505061207f61452b565b60006001600160401b038a1615613ead576072546001600160401b03908116908b161115613de35760405162461bcd60e51b815260206004820152607160248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a2070656e64696e6753746160648201527f74654e756d206d757374206265206c657373206f7220657175616c207468616e608482015270206c61737450656e64696e67537461746560781b60a482015260c4016109e5565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613ea75760405162461bcd60e51b815260206004820152606560248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a20696e69744e756d42617460648201527f6368206d757374206d61746368207468652070656e64696e67207374617465206084820152640c4c2e8c6d60db1b60a482015260c4016109e5565b50614006565b506001600160401b0387166000908152606d602052604090205480613f4e5760405162461bcd60e51b815260206004820152605c60248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a20696e69744e756d42617460648201527f636820737461746520726f6f7420646f6573206e6f7420657869737400000000608482015260a4016109e5565b6069546001600160401b0390811690891611156140065760405162461bcd60e51b815260206004820152607660248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a20696e69744e756d42617460648201527f6368206d757374206265206c657373206f7220657175616c207468616e2063756084820152750e4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d60531b60a482015260c4016109e5565b6072546001600160401b03908116908a16118015906140365750896001600160401b0316896001600160401b0316115b801561405757506072546001600160401b03600160401b9091048116908a16115b6140d45760405162461bcd60e51b815260206004820152605460248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a2066696e616c50656e64696064820152731b99d4dd185d19539d5b481a5b98dbdc9c9958dd60621b608482015260a4016109e5565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146141995760405162461bcd60e51b815260206004820152606f60248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a2066696e616c4e6577426160648201527f746368206d75737420626520657175616c207468616e2063757272656e744c6160848201526e0e6e8accae4d2ccd2cac884c2e8c6d608b1b60a482015260c4016109e5565b60006141a8898989858a610aef565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516141dd9190615412565b602060405180830381855afa1580156141fa573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061421d919061506c565b614227919061542e565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d9161426b918a918a918a9190600401615442565b602060405180830381865afa158015614288573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ac91906154bc565b6143185760405162461bcd60e51b815260206004820152604360248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a20494e56414c49445f505260648201526227a7a360e91b608482015260a4016109e5565b6001600160401b038b1660009081526071602052604090206002015487900361399b5760405162461bcd60e51b815260206004820152606760248201526000805160206155ea83398151915260448201527f6d696e697374696350656e64696e6753746174653a2073746f72656420726f6f60648201527f74206d75737420626520646966666572656e74207468616e206e6577207374616084820152661d19481c9bdbdd60ca1b60a482015260c4016109e5565b60655460ff166143ef5760405162461bcd60e51b81526004016109e5906152f5565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614479826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145869092919063ffffffff16565b8051909150156144f6578080602001905181019061449791906154bc565b6144f65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109e5565b505050565b6040516001600160a01b0383166024820152604481018290526144f690849063a9059cbb60e01b906064016133e2565b60655460ff161561454e5760405162461bcd60e51b81526004016109e590614fa5565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614595848460008561459d565b949350505050565b6060824710156145fe5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109e5565b600080866001600160a01b0316858760405161461a9190615412565b60006040518083038185875af1925050503d8060008114614657576040519150601f19603f3d011682016040523d82523d6000602084013e61465c565b606091505b509150915061466d87838387614678565b979650505050505050565b606083156146e75782516000036146e0576001600160a01b0385163b6146e05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109e5565b5081614595565b61459583838151156146fc5781518083602001fd5b8060405162461bcd60e51b81526004016109e5919061476e565b60005b83811015614731578181015183820152602001614719565b8381111561319a5750506000910152565b6000815180845261475a816020860160208601614716565b601f01601f19169290920160200192915050565b6020815260006147816020830184614742565b9392505050565b60006020828403121561479a57600080fd5b813561ffff8116811461478157600080fd5b80356001600160401b03811681146147c357600080fd5b919050565b600080600080600060a086880312156147e057600080fd5b6147e9866147ac565b94506147f7602087016147ac565b94979496505050506040830135926060810135926080909101359150565b60006020828403121561482757600080fd5b614781826147ac565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171561486857614868614830565b60405290565b604051606081016001600160401b038111828210171561486857614868614830565b604051601f8201601f191681016001600160401b03811182821017156148b8576148b8614830565b604052919050565b60006001600160401b038211156148d9576148d9614830565b5060051b60200190565b600082601f8301126148f457600080fd5b81356001600160401b0381111561490d5761490d614830565b614920601f8201601f1916602001614890565b81815284602083860101111561493557600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561496557600080fd5b82356001600160401b038082111561497c57600080fd5b818501915085601f83011261499057600080fd5b81356149a361499e826148c0565b614890565b81815260059190911b830184019084810190888311156149c257600080fd5b8585015b83811015614a5b578035858111156149de5760008081fd5b86016080818c03601f19018113156149f65760008081fd5b6149fe614846565b8983013588811115614a105760008081fd5b614a1e8e8c838701016148e3565b8252506040808401358b8301526060614a388186016147ac565b82840152614a478486016147ac565b9083015250855250509186019186016149c6565b5098975050505050505050565b8060408101831015614a7957600080fd5b92915050565b8060808101831015614a7957600080fd5b6000806000806000806000806101a0898b031215614aad57600080fd5b614ab6896147ac565b9750614ac460208a016147ac565b9650614ad260408a016147ac565b95506060890135945060808901359350614aef8a60a08b01614a68565b9250614afe8a60e08b01614a7f565b9150614b0e8a6101608b01614a68565b90509295985092959890939650565b6001600160a01b038116811461230a57600080fd5b600080600080600080600080888a036101c0811215614b5057600080fd5b8935614b5b81614b1d565b985060208a0135614b6b81614b1d565b975060408a0135614b7b81614b1d565b965060608a0135614b8b81614b1d565b955060e0607f1982011215614b9f57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614bc957600080fd5b614bd58c838d016148e3565b93506101a08b0135915080821115614bec57600080fd5b50614bf98b828c016148e3565b9150509295985092959890939650565b600060208284031215614c1b57600080fd5b813561478181614b1d565b60008060008060008060008060006101c08a8c031215614c4557600080fd5b614c4e8a6147ac565b9850614c5c60208b016147ac565b9750614c6a60408b016147ac565b9650614c7860608b016147ac565b955060808a0135945060a08a01359350614c958b60c08c01614a68565b9250614ca58b6101008c01614a7f565b9150614cb58b6101808c01614a68565b90509295985092959850929598565b600060208284031215614cd657600080fd5b5035919050565b801515811461230a57600080fd5b600060208284031215614cfd57600080fd5b813561478181614cdd565b600060208284031215614d1a57600080fd5b81356001600160401b03811115614d3057600080fd5b614595848285016148e3565b60006020808385031215614d4f57600080fd5b82356001600160401b0380821115614d6657600080fd5b818501915085601f830112614d7a57600080fd5b8135614d8861499e826148c0565b81815260059190911b83018401908481019088831115614da757600080fd5b8585015b83811015614a5b57803585811115614dc35760008081fd5b86016060818c03601f1901811315614ddb5760008081fd5b614de361486e565b8983013588811115614df55760008081fd5b614e038e8c838701016148e3565b8252506040808401358b830152614e1b8385016147ac565b9082015285525050918601918601614dab565b60008060408385031215614e4157600080fd5b82356001600160401b03811115614e5757600080fd5b614e63858286016148e3565b95602094909401359450505050565b600181811c90821680614e8657607f821691505b602082108103614ea657634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526028908201527f50726f6f664f66456666696369656e63793a3a6f6e6c7941646d696e3a206f6e604082015267363c9030b236b4b760c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614f2c57614f2c614ef4565b01949350505050565b6020808252604a908201527f50726f6f664f66456666696369656e63793a3a73657450656e64696e6753746160408201527f746554696d656f75743a206578636565642068616c74206167677265676174696060820152691bdb881d1a5b595bdd5d60b21b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361503f5761503f614ef4565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b60006020828403121561507e57600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b6000600182016150db576150db614ef4565b5060010190565b60006001600160401b038381169083168181101561510257615102614ef4565b039392505050565b60008282101561511c5761511c614ef4565b500390565b600081600019048311821515161561513b5761513b614ef4565b500290565b601f8211156144f657600081815260208120601f850160051c810160208610156151675750805b601f850160051c820191505b81811015613b8757828155600101615173565b81516001600160401b0381111561519f5761519f614830565b6151b3816151ad8454614e72565b84615140565b602080601f8311600181146151e857600084156151d05750858301515b600019600386901b1c1916600185901b178555613b87565b600085815260208120601f198616915b82811015615217578886015182559484019460019091019084016151f8565b50858210156152355787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b60008261526a5761526a615245565b500490565b60208082526048908201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160408201527f6c6c6f7765643a206f6e6c7920696620666f72636520626174636820697320616060820152677661696c61626c6560c01b608082015260a00190565b600082198211156152f0576152f0614ef4565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b60208082526041908201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564416760408201527f6772656761746f723a206f6e6c7920747275737465642041676772656761746f6060820152603960f91b608082015260a00190565b8381526001600160a01b03831660208201526060604082018190526000906153e390830184614742565b95945050505050565b60006001600160401b038084168061540657615406615245565b92169190910492915050565b60008251615424818460208701614716565b9190910192915050565b60008261543d5761543d615245565b500690565b61012081016040808784376000838201818152879190815b600281101561547a5784848337908401828152928401929060010161545a565b5050828760c0870137610100850181815286935091505b60018110156154b0578251825260209283019290910190600101615491565b50505095945050505050565b6000602082840312156154ce57600080fd5b815161478181614cdd565b600181815b808511156155145781600019048211156154fa576154fa614ef4565b8085161561550757918102915b93841c93908002906154de565b509250929050565b60008261552b57506001614a79565b8161553857506000614a79565b816001811461554e576002811461555857615574565b6001915050614a79565b60ff84111561556957615569614ef4565b50506001821b614a79565b5060208310610133831016604e8410600b8410161715615597575081810a614a79565b6155a183836154d9565b80600019048211156155b5576155b5614ef4565b029392505050565b6000614781838361551c56fe50726f6f664f66456666696369656e63793a3a73657175656e6365426174636850726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657250726f6f664f66456666696369656e63793a3a73657175656e6365466f72636550726f6f664f66456666696369656e63793a3a76657269667942617463686573a2646970667358221220cd9b4b625eef949536feef24eb4d660057471116e5beb049b2c6fed8b393b9c864736f6c634300080f0033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/compiled-contracts/ProofOfEfficiencyMock.json b/compiled-contracts/ProofOfEfficiencyMock.json deleted file mode 100644 index 318274233..000000000 --- a/compiled-contracts/ProofOfEfficiencyMock.json +++ /dev/null @@ -1,1700 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "PolygonZKEVMMock", - "sourceName": "contracts/mocks/PolygonZKEVMMock.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "numBatch", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint64", - "name": "pendingStateNum", - "type": "uint64" - } - ], - "name": "ConsolidatePendingState", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "EmergencyStateActivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "EmergencyStateDeactivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "forceBatchNum", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "lastGlobalExitRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "transactions", - "type": "bytes" - } - ], - "name": "ForceBatch", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "numBatch", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "aggregator", - "type": "address" - } - ], - "name": "OverridePendingState", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "storedStateRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "provedStateRoot", - "type": "bytes32" - } - ], - "name": "ProveNonDeterministicPendingState", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "numBatch", - "type": "uint64" - } - ], - "name": "SequenceBatches", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "numBatch", - "type": "uint64" - } - ], - "name": "SequenceForceBatches", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "SetAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "newForceBatchAllowed", - "type": "bool" - } - ], - "name": "SetForceBatchAllowed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint16", - "name": "newMultiplierBatchFee", - "type": "uint16" - } - ], - "name": "SetMultiplierBatchFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "newPendingStateTimeout", - "type": "uint64" - } - ], - "name": "SetPendingStateTimeout", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "newTrustedAggregator", - "type": "address" - } - ], - "name": "SetTrustedAggregator", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "newTrustedAggregatorTimeout", - "type": "uint64" - } - ], - "name": "SetTrustedAggregatorTimeout", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "newTrustedSequencer", - "type": "address" - } - ], - "name": "SetTrustedSequencer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "newTrustedSequencerURL", - "type": "string" - } - ], - "name": "SetTrustedSequencerURL", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "newVeryBatchTimeTarget", - "type": "uint64" - } - ], - "name": "SetVeryBatchTimeTarget", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "numBatch", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "aggregator", - "type": "address" - } - ], - "name": "TrustedVerifyBatches", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "numBatch", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "aggregator", - "type": "address" - } - ], - "name": "VerifyBatches", - "type": "event" - }, - { - "inputs": [], - "name": "FORCE_BATCH_TIMEOUT", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "HALT_AGGREGATION_TIMEOUT", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_BATCH_MULTIPLIER", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_TRANSACTIONS_BYTE_LENGTH", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_VERIFY_BATCHES", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "sequencedBatchNum", - "type": "uint64" - } - ], - "name": "activateEmergencyState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "admin", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "batchFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "name": "batchNumToStateRoot", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PolygonZKEVMBridgeAddress", - "outputs": [ - { - "internalType": "contract IPolygonZKEVMBridge", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "currentAccInputHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "transactions", - "type": "bytes" - }, - { - "internalType": "bytes32", - "name": "globalExitRoot", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "timestamp", - "type": "uint64" - }, - { - "internalType": "address", - "name": "sequencerAddress", - "type": "address" - } - ], - "name": "calculateAccInputHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "calculateRewardPerBatch", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "chainID", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "pendingStateNum", - "type": "uint64" - } - ], - "name": "consolidatePendingState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "deactivateEmergencyState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "transactions", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "maticAmount", - "type": "uint256" - } - ], - "name": "forceBatch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "forceBatchAllowed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "name": "forcedBatches", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getCurrentBatchFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "initNumBatch", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "finalNewBatch", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "newLocalExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "oldStateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "newStateRoot", - "type": "bytes32" - } - ], - "name": "getInputSnarkBytes", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getLastVerifiedBatch", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "pendingStateNum", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "initNumBatch", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "finalNewBatch", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "newLocalExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "newStateRoot", - "type": "bytes32" - } - ], - "name": "getNextSnarkInput", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "globalExitRootManager", - "outputs": [ - { - "internalType": "contract IGlobalExitRootManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IGlobalExitRootManager", - "name": "_globalExitRootManager", - "type": "address" - }, - { - "internalType": "contract IERC20Upgradeable", - "name": "_matic", - "type": "address" - }, - { - "internalType": "contract IVerifierRollup", - "name": "_rollupVerifier", - "type": "address" - }, - { - "internalType": "contract IPolygonZKEVMBridge", - "name": "_PolygonZKEVMBridgeAddress", - "type": "address" - }, - { - "components": [ - { - "internalType": "address", - "name": "admin", - "type": "address" - }, - { - "internalType": "uint64", - "name": "chainID", - "type": "uint64" - }, - { - "internalType": "address", - "name": "trustedSequencer", - "type": "address" - }, - { - "internalType": "uint64", - "name": "pendingStateTimeout", - "type": "uint64" - }, - { - "internalType": "bool", - "name": "forceBatchAllowed", - "type": "bool" - }, - { - "internalType": "address", - "name": "trustedAggregator", - "type": "address" - }, - { - "internalType": "uint64", - "name": "trustedAggregatorTimeout", - "type": "uint64" - } - ], - "internalType": "struct PolygonZKEVM.InitializePackedParameters", - "name": "initializePackedParameters", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "genesisRoot", - "type": "bytes32" - }, - { - "internalType": "string", - "name": "_trustedSequencerURL", - "type": "string" - }, - { - "internalType": "string", - "name": "_networkName", - "type": "string" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "isEmergencyState", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "pendingStateNum", - "type": "uint64" - } - ], - "name": "isPendingStateConsolidable", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastBatchSequenced", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastForceBatch", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastForceBatchSequenced", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastPendingState", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastPendingStateConsolidated", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastTimestamp", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastVerifiedBatch", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "matic", - "outputs": [ - { - "internalType": "contract IERC20Upgradeable", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "multiplierBatchFee", - "outputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "networkName", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "initPendingStateNum", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "finalPendingStateNum", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "initNumBatch", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "finalNewBatch", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "newLocalExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "newStateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256[2]", - "name": "proofA", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2][2]", - "name": "proofB", - "type": "uint256[2][2]" - }, - { - "internalType": "uint256[2]", - "name": "proofC", - "type": "uint256[2]" - } - ], - "name": "overridePendingState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pendingStateTimeout", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "pendingStateTransitions", - "outputs": [ - { - "internalType": "uint64", - "name": "timestamp", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "lastVerifiedBatch", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "exitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "initPendingStateNum", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "finalPendingStateNum", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "initNumBatch", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "finalNewBatch", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "newLocalExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "newStateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256[2]", - "name": "proofA", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2][2]", - "name": "proofB", - "type": "uint256[2][2]" - }, - { - "internalType": "uint256[2]", - "name": "proofC", - "type": "uint256[2]" - } - ], - "name": "proveNonDeterministicPendingState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "rollupVerifier", - "outputs": [ - { - "internalType": "contract IVerifierRollup", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes", - "name": "transactions", - "type": "bytes" - }, - { - "internalType": "bytes32", - "name": "globalExitRoot", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "timestamp", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "minForcedTimestamp", - "type": "uint64" - } - ], - "internalType": "struct PolygonZKEVM.BatchData[]", - "name": "batches", - "type": "tuple[]" - } - ], - "name": "sequenceBatches", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes", - "name": "transactions", - "type": "bytes" - }, - { - "internalType": "bytes32", - "name": "globalExitRoot", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "minForcedTimestamp", - "type": "uint64" - } - ], - "internalType": "struct PolygonZKEVM.ForcedBatchData[]", - "name": "batches", - "type": "tuple[]" - } - ], - "name": "sequenceForceBatches", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "name": "sequencedBatches", - "outputs": [ - { - "internalType": "bytes32", - "name": "accInputHash", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "sequencedTimestamp", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "previousLastBatchSequenced", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "setAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bool", - "name": "newForceBatchAllowed", - "type": "bool" - } - ], - "name": "setForceBatchAllowed", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "newMultiplierBatchFee", - "type": "uint16" - } - ], - "name": "setMultiplierBatchFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_networkName", - "type": "string" - } - ], - "name": "setNetworkName", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "newPendingStateTimeout", - "type": "uint64" - } - ], - "name": "setPendingStateTimeout", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "_numBatch", - "type": "uint64" - } - ], - "name": "setSequencedBatch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "batchNum", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "accInputData", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "timestamp", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "lastPendingStateConsolidated", - "type": "uint64" - } - ], - "name": "setSequencedBatches", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "newStateRoot", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "batchNum", - "type": "uint64" - } - ], - "name": "setStateRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newTrustedAggregator", - "type": "address" - } - ], - "name": "setTrustedAggregator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "newTrustedAggregatorTimeout", - "type": "uint64" - } - ], - "name": "setTrustedAggregatorTimeout", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newTrustedSequencer", - "type": "address" - } - ], - "name": "setTrustedSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "newTrustedSequencerURL", - "type": "string" - } - ], - "name": "setTrustedSequencerURL", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "_numBatch", - "type": "uint64" - } - ], - "name": "setVerifiedBatch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IVerifierRollup", - "name": "_rollupVerifier", - "type": "address" - } - ], - "name": "setVerifier", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "newVeryBatchTimeTarget", - "type": "uint64" - } - ], - "name": "setVeryBatchTimeTarget", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "trustedAggregator", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "trustedAggregatorTimeout", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "trustedSequencer", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "trustedSequencerURL", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "pendingStateNum", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "initNumBatch", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "finalNewBatch", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "newLocalExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "newStateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256[2]", - "name": "proofA", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2][2]", - "name": "proofB", - "type": "uint256[2][2]" - }, - { - "internalType": "uint256[2]", - "name": "proofC", - "type": "uint256[2]" - } - ], - "name": "trustedVerifyBatches", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "pendingStateNum", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "initNumBatch", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "finalNewBatch", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "newLocalExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "newStateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256[2]", - "name": "proofA", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2][2]", - "name": "proofB", - "type": "uint256[2][2]" - }, - { - "internalType": "uint256[2]", - "name": "proofC", - "type": "uint256[2]" - } - ], - "name": "trustedVerifyBatchesMock", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "pendingStateNum", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "initNumBatch", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "finalNewBatch", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "newLocalExitRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "newStateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256[2]", - "name": "proofA", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2][2]", - "name": "proofB", - "type": "uint256[2][2]" - }, - { - "internalType": "uint256[2]", - "name": "proofC", - "type": "uint256[2]" - } - ], - "name": "verifyBatches", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "veryBatchTimeTarget", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b50615e7d80620000216000396000f3fe608060405234801561001057600080fd5b50600436106104125760003560e01c806396dc3d3911610220578063cfa8ed4711610130578063e7a7ed02116100b8578063f14916d611610087578063f14916d6146109e2578063f2fde38b146109f5578063f851a44014610a08578063f8b823e414610a1b578063fe16564f14610a2457600080fd5b8063e7a7ed021461098f578063e8bf92ed146109a9578063eaeb077b146109bc578063edc41121146109cf57600080fd5b8063d939b315116100ff578063d939b3151461093e578063dbc1697614610958578063e0d1744114610960578063e11f3f1814610973578063e217cfd61461098657600080fd5b8063cfa8ed47146108ea578063d02103ca14610904578063d8d1091b14610917578063d8f54db01461092a57600080fd5b8063ab9fc5ef116101b3578063b6b0b09711610182578063b6b0b0971461088f578063c0cad302146108a9578063c0ed84e0146108bc578063c89e42df146108c4578063cf136306146108d757600080fd5b8063ab9fc5ef146107e3578063adc879e9146107ed578063afd23cbe14610807578063b4d63f581461082f57600080fd5b80639eb831b9116101ef5780639eb831b9146107a85780639f0d039d146107b0578063a3c573eb146107b8578063aa58bad6146107cb57600080fd5b806396dc3d391461076757806399f5634e1461077a5780639b796760146107825780639c9f3dfe1461079557600080fd5b80634a910e6a11610326578063715018a6116102ae578063837a47381161027d578063837a4738146106b1578063841b24d71461071f5780638b48931e146107395780638c4a0af7146107435780638da5cb5b1461075657600080fd5b8063715018a6146106705780637215541a1461067857806375c508b31461068b5780637fcb36531461069e57600080fd5b8063574f649e116102f5578063574f649e1461060457806360943d6a146106175780636b8616ce1461062a5780636ff512cc1461064a578063704b6c021461065d57600080fd5b80634a910e6a146105b65780635392c5e0146105c9578063542028d5146105e95780635437988d146105f157600080fd5b80632d0889d3116103a9578063423fa85611610378578063423fa85614610542578063456052671461055c578063458c0477146105765780634834a343146105895780634a1a89a71461059c57600080fd5b80632d0889d314610500578063383b3be814610509578063394218e91461051c5780633c1582671461052f57600080fd5b80631816b7e5116103e55780631816b7e51461048457806319d8ac6114610497578063220d7899146104c257806329878983146104d557600080fd5b80630eaa86ea14610417578063107bf28c1461043d57806310a01a721461045257806315064c9614610467575b600080fd5b61042a610425366004614bce565b610a37565b6040519081526020015b60405180910390f35b610445610c18565b6040516104349190614c7b565b610465610460366004614cbd565b610ca6565b005b6065546104749060ff1681565b6040519015158152602001610434565b610465610492366004614d4a565b610ef0565b6068546104aa906001600160401b031681565b6040516001600160401b039091168152602001610434565b6104456104d0366004614d6e565b61101b565b606a546104e8906001600160a01b031681565b6040516001600160a01b039091168152602001610434565b61042a61ea6081565b610474610517366004614dbb565b6111d9565b61046561052a366004614dbb565b611220565b61046561053d366004614ef8565b611373565b6068546104aa90600160401b90046001600160401b031681565b6068546104aa90600160801b90046001600160401b031681565b6072546104aa906001600160401b031681565b610465610597366004614cbd565b611b3e565b6072546104aa90600160401b90046001600160401b031681565b6104656105c4366004614dbb565b611e72565b61042a6105d7366004614dbb565b606d6020526000908152604090205481565b61044561211b565b6104656105ff366004615023565b612128565b61042a610612366004615040565b612152565b6104656106253660046150b5565b612195565b61042a610638366004614dbb565b60666020526000908152604090205481565b610465610658366004615023565b612505565b61046561066b366004615023565b612589565b610465612601565b610465610686366004614dbb565b612615565b61046561069936600461518c565b6128a1565b6069546104aa906001600160401b031681565b6106f46106bf36600461522a565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610434565b6072546104aa90600160c01b90046001600160401b031681565b6104aa62093a8081565b610465610751366004615251565b612930565b6033546001600160a01b03166104e8565b610465610775366004614dbb565b6129a7565b61042a6129d2565b610465610790366004614dbb565b612ab5565b6104656107a3366004614dbb565b612aea565b61042a600c81565b60745461042a565b6070546104e8906001600160a01b031681565b6065546104aa9061010090046001600160401b031681565b6104aa6206978081565b606c546104aa90600160a81b90046001600160401b031681565b60655461081c90600160481b900461ffff1681565b60405161ffff9091168152602001610434565b61086a61083d366004614dbb565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610434565b6065546104e890600160581b90046001600160a01b031681565b6104656108b736600461526e565b612c3e565b6104aa612c56565b6104656108d236600461526e565b612ca3565b6104656108e5366004614dbb565b612d09565b6069546104e890600160401b90046001600160a01b031681565b606c546104e8906001600160a01b031681565b6104656109253660046152a2565b612d8a565b606c5461047490600160a01b900460ff1681565b6072546104aa90600160801b90046001600160401b031681565b610465613276565b61046561096e366004615394565b613332565b61046561098136600461518c565b6133a4565b6104aa6103e881565b6068546104aa90600160c01b90046001600160401b031681565b606b546104e8906001600160a01b031681565b6104656109ca3660046153e1565b6134e9565b6104656109dd366004614cbd565b61381e565b6104656109f0366004615023565b61393e565b610465610a03366004615023565b6139b6565b6073546104e8906001600160a01b031681565b61042a60745481565b610465610a32366004615425565b613a2c565b6000806000610a44612c56565b90506001600160401b03881615610ae1576072546001600160401b039081169089161115610a8d5760405162461bcd60e51b8152600401610a8490615451565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610adb5760405162461bcd60e51b8152600401610a84906154c2565b50610b4b565b6001600160401b0387166000908152606d6020526040902054915081610b195760405162461bcd60e51b8152600401610a8490615527565b806001600160401b0316876001600160401b03161115610b4b5760405162461bcd60e51b8152600401610a8490615583565b806001600160401b0316866001600160401b031611610b7c5760405162461bcd60e51b8152600401610a84906155ff565b6000610b8b888888868961101b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051610bc09190615670565b602060405180830381855afa158015610bdd573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c00919061568c565b610c0a91906156bb565b9a9950505050505050505050565b606f8054610c25906156cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610c51906156cf565b8015610c9e5780601f10610c7357610100808354040283529160200191610c9e565b820191906000526020600020905b815481529060010190602001808311610c8157829003601f168201915b505050505081565b610cae613a4e565b600080610cb9612c56565b90506001600160401b038a1615610d4d576072546001600160401b03908116908b161115610cf95760405162461bcd60e51b8152600401610a8490615451565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610d475760405162461bcd60e51b8152600401610a84906154c2565b50610db7565b6001600160401b0389166000908152606d6020526040902054915081610d855760405162461bcd60e51b8152600401610a8490615527565b806001600160401b0316896001600160401b03161115610db75760405162461bcd60e51b8152600401610a8490615583565b806001600160401b0316886001600160401b031611610de85760405162461bcd60e51b8152600401610a84906155ff565b6000610df78a8a8a868b61101b565b6069805467ffffffffffffffff19166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610e4557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610e8b57600080fd5b505af1158015610e9f573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610f1a5760405162461bcd60e51b8152600401610a8490615709565b6103e88161ffff16118015610f3457506104008161ffff16105b610fbe5760405162461bcd60e51b815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a7365744d756c7469706c69657260448201527f42617463684665653a206e65774d756c7469706c69657242617463684665652060648201526e696e636f72726563742072616e676560881b608482015260a401610a84565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b0380861660008181526067602052604080822054938816825290205460609291158061104d57508115155b6110cd5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f7420606482015264195e1a5cdd60da1b608482015260a401610a84565b8061114e5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f7420606482015264195e1a5cdd60da1b608482015260a401610a84565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b038281166000908152607160205260408120549092429261120f92600160801b90920481169116615767565b6001600160401b0316111592915050565b6073546001600160a01b0316331461124a5760405162461bcd60e51b8152600401610a8490615709565b62093a806001600160401b03821611156112765760405162461bcd60e51b8152600401610a8490615792565b60655460ff1661131d576072546001600160401b03600160c01b90910481169082161061131d5760405162461bcd60e51b815260206004820152604960248201527f50726f6f664f66456666696369656e63793a3a7365745472757374656441676760448201527f72656761746f7254696d656f75743a206e65772074696d656f7574206d757374606482015268103132903637bbb2b960b91b608482015260a401610a84565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001611010565b60655460ff16156113965760405162461bcd60e51b8152600401610a8490615802565b606954600160401b90046001600160a01b0316331461141d5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610a84565b80518061148b5760405162461bcd60e51b81526020600482015260426024820152600080516020615dc883398151915260448201527f65733a204174206c65617374206d7573742073657175656e63652031206261746064820152610c6d60f31b608482015260a401610a84565b6103e881106114fe5760405162461bcd60e51b81526020600482015260456024820152600080516020615dc883398151915260448201527f65733a2043616e6e6f742073657175656e63652074686174206d616e79206261606482015264746368657360d81b608482015260a401610a84565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561196c5760008782815181106115515761155161586a565b60200260200101519050600081606001516001600160401b031611156116f1578361157b81615880565b9450506000816000015180519060200120826020015183606001516040516020016115a8939291906158a6565b60408051601f1981840301815291815281516020928301206001600160401b0388166000908152606690935291205490915081146116475760405162461bcd60e51b81526020600482015260426024820152600080516020615dc883398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a401610a84565b81606001516001600160401b031682604001516001600160401b031610156116eb5760405162461bcd60e51b815260206004820152605d6024820152600080516020615dc883398151915260448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610a84565b50611866565b6020810151158061177a5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916117349160040190815260200190565b6020604051808303816000875af1158015611753573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611777919061568c565b15155b6117da5760405162461bcd60e51b815260206004820152603f6024820152600080516020615dc883398151915260448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610a84565b80515161ea60116118665760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a401610a84565b856001600160401b031681604001516001600160401b03161015801561189957504281604001516001600160401b031611155b6119045760405162461bcd60e51b81526020600482015260426024820152600080516020615dc883398151915260448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e606482015261676560f01b608482015260a401610a84565b8051805160209182012081830151604080850151905161192b9488949392913391016158c9565b604051602081830303815290604052805190602001209250848061194e90615880565b955050806040015195505080806119649061590d565b915050611535565b506068546001600160401b03600160c01b909104811690831611156119e75760405162461bcd60e51b815260206004820152603a6024820152600080516020615dc883398151915260448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610a84565b606854600090611a0790600160801b90046001600160401b031684615926565b611a1a906001600160401b03168761594e565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611aef90339030908490611ad49190615965565b606554600160581b90046001600160a01b0316929190613aa8565b611af7613b13565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b615760405162461bcd60e51b8152600401610a8490615802565b6072546001600160401b038781166000908152606760205260409020600101544292611b9892600160c01b90910481169116615767565b6001600160401b03161115611c145760405162461bcd60e51b81526020600482015260486024820152600080516020615e2883398151915260448201527f3a20747275737465642061676772656761746f722074696d656f7574206e6f7460648201526708195e1c1a5c995960c21b608482015260a401610a84565b6103e8611c218888615926565b6001600160401b031610611c955760405162461bcd60e51b81526020600482015260416024820152600080516020615e2883398151915260448201527f3a2063616e6e6f74207665726966792074686174206d616e79206261746368656064820152607360f81b608482015260a401610a84565b611ca58888888888888888613bb3565b611cae86613ea3565b607254600160801b90046001600160401b0316600003611d76576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615611d1357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d5957600080fd5b505af1158015611d6d573d6000803e3d6000fd5b50505050611e27565b611d7e613b13565b607280546001600160401b0316906000611d9783615880565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611e9f57506072546001600160401b03600160401b9091048116908216115b8015611eba57506072546001600160401b0390811690821611155b611f3d5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a636f6e736f6c6964617465506560448201527f6e64696e6753746174653a2070656e64696e6753746174654e756d206d757374606482015267081a5b9d985b1a5960c21b608482015260a401610a84565b606a546001600160a01b03163314611ff057611f58816111d9565b611ff05760405162461bcd60e51b815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a636f6e736f6c6964617465506560448201527f6e64696e6753746174653a2070656e64696e67207374617465206973206e6f7460648201527f20726561647920746f20626520636f6e736f6c69646174656400000000000000608482015260a401610a84565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b1580156120ad57600080fd5b505af11580156120c1573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e846002015460405161210e91815260200190565b60405180910390a3505050565b606e8054610c25906156cf565b612130613a4e565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b60008585805190602001208585856040516020016121749594939291906158c9565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff16158080156121b55750600054600160ff909116105b806121cf5750303b1580156121cf575060005460ff166001145b6122325760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a84565b6000805460ff191660011790558015612255576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a8416179055607080549091169188169190911790556122d26020860186615023565b607380546001600160a01b0319166001600160a01b03929092169190911790556123026060860160408701615023565b606980546001600160a01b0392909216600160401b02600160401b600160e01b031990921691909117905561233d60c0860160a08701615023565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa71135684905561239a60e0860160c08701614dbb565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556123d16040860160208701614dbb565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561240d6080860160608701614dbb565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b1990921691909117905561244960a0860160808701615251565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e61247184826159ca565b50606f61247e83826159ca565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124b4614089565b80156124fa576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b0316331461252f5760405162461bcd60e51b8152600401610a8490615709565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001611010565b6073546001600160a01b031633146125b35760405162461bcd60e51b8152600401610a8490615709565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190602001611010565b612609613a4e565b61261360006140f9565b565b6033546001600160a01b03163314612896576072546000906001600160401b03161561266657506072546001600160401b03908116600090815260716020526040902054600160401b900416612674565b506069546001600160401b03165b80826001600160401b0316116126fc5760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a6163746976617465456d65726760448201527f656e637953746174653a20426174636820616c726561647920766572696669656064820152601960fa1b608482015260a401610a84565b6068546001600160401b03600160401b90910481169083161180159061273e57506001600160401b038083166000908152606760205260409020600101541615155b6127ce5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a6163746976617465456d65726760448201527f656e637953746174653a204261746368206e6f742073657175656e636564206f60648201527472206e6f7420656e64206f662073657175656e636560581b608482015260a401610a84565b6001600160401b0380831660009081526067602052604090206001015442916127fc9162093a809116615767565b6001600160401b031611156128945760405162461bcd60e51b815260206004820152605260248201527f50726f6f664f66456666696369656e63793a3a6163746976617465456d65726760448201527f656e637953746174653a204167677265676174696f6e2068616c742074696d656064820152711bdd5d081a5cc81b9bdd08195e1c1a5c995960721b608482015260a401610a84565b505b61289e61414b565b50565b60655460ff16156128c45760405162461bcd60e51b8152600401610a8490615802565b6128d58989898989898989896141bb565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a16124fa61414b565b6073546001600160a01b0316331461295a5760405162461bcd60e51b8152600401610a8490615709565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061101090831515815260200190565b6129af613a4e565b6069805467ffffffffffffffff19166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612a25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a49919061568c565b90506000612a55612c56565b6068546001600160401b03600160401b8204811691612a8591600160801b8204811691600160c01b900416615926565b612a8f9190615767565b612a999190615926565b6001600160401b03169050612aae8183615a89565b9250505090565b612abd613a4e565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612b145760405162461bcd60e51b8152600401610a8490615709565b62093a806001600160401b0382161115612b405760405162461bcd60e51b8152600401610a8490615792565b60655460ff16612be3576072546001600160401b03600160801b909104811690821610612be35760405162461bcd60e51b8152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a73657450656e64696e67537461908201527f746554696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a401610a84565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001611010565b612c46613a4e565b606f612c5282826159ca565b5050565b6072546000906001600160401b031615612c9357506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612ccd5760405162461bcd60e51b8152600401610a8490615709565b606e612cd982826159ca565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b20816040516110109190614c7b565b6073546001600160a01b03163314612d335760405162461bcd60e51b8152600401610a8490615709565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001611010565b60655460ff1615612dad5760405162461bcd60e51b8152600401610a8490615802565b606c54600160a01b900460ff161515600114612ddb5760405162461bcd60e51b8152600401610a8490615a9d565b805180612e495760405162461bcd60e51b81526020600482015260426024820152600080516020615e0883398151915260448201527f42617463683a204d75737420666f726365206174206c656173742031206261746064820152610c6d60f31b608482015260a401610a84565b6103e88110612ebf5760405162461bcd60e51b81526020600482015260486024820152600080516020615e0883398151915260448201527f426174636865733a2063616e6e6f74207665726966792074686174206d616e79606482015267206261746368657360c01b608482015260a401610a84565b6068546001600160401b03600160c01b8204811691612ee7918491600160801b900416615b0b565b1115612f495760405162461bcd60e51b815260206004820152603a6024820152600080516020615e0883398151915260448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610a84565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b8481101561317f576000868281518110612f9657612f9661586a565b602002602001015190508380612fab90615880565b945050600081600001518051906020012082602001518360400151604051602001612fd8939291906158a6565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461307c5760405162461bcd60e51b81526020600482015260476024820152600080516020615e0883398151915260448201527f426174636865733a20466f7263656420626174636865732064617461206d75736064820152660e840dac2e8c6d60cb1b608482015260a401610a84565b61308760018861594e565b830361312157426206978083604001516130a19190615767565b6001600160401b031611156131215760405162461bcd60e51b815260206004820152604c6024820152600080516020615e0883398151915260448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201526b1b595bdd5d081c195c9a5bd960a21b608482015260a401610a84565b8151805160209182012081840151604051613144938893929142913391016158c9565b604051602081830303815290604052805190602001209350858061316790615880565b965050505080806131779061590d565b915050612f7a565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166132985760405162461bcd60e51b8152600401610a8490615b23565b6073546001600160a01b031633146132c25760405162461bcd60e51b8152600401610a8490615709565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561331257600080fd5b505af1158015613326573d6000803e3d6000fd5b50505050612613614869565b61333a613a4e565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133ce5760405162461bcd60e51b8152600401610a8490615b80565b6133df8989898989898989896141bb565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561342a57607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561347057600080fd5b505af1158015613484573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff161561350c5760405162461bcd60e51b8152600401610a8490615802565b606c54600160a01b900460ff16151560011461353a5760405162461bcd60e51b8152600401610a8490615a9d565b600061354560745490565b9050818111156135af5760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201526e6f7420656e6f756768206d6174696360881b6064820152608401610a84565b61ea608351106136275760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610a84565b60655461364690600160581b90046001600160a01b0316333084613aa8565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015613690573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136b4919061568c565b60688054919250600160c01b9091046001600160401b03169060186136d883615880565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505083805190602001208142604051602001613719939291906158a6565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b0316600090815260669093529120553233036137bd57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613818565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161380f93929190615be7565b60405180910390a25b50505050565b606a546001600160a01b031633146138485760405162461bcd60e51b8152600401610a8490615b80565b6138588888888888888888613bb3565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d6020526040902085905560725416156138a357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156138e957600080fd5b505af11580156138fd573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e60565b6073546001600160a01b031633146139685760405162461bcd60e51b8152600401610a8490615709565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001611010565b6139be613a4e565b6001600160a01b038116613a235760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a84565b61289e816140f9565b613a34613a4e565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b031633146126135760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a84565b6040516001600160a01b03808516602483015283166044820152606481018290526138189085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526148c0565b6072546001600160401b03600160401b820481169116111561261357607254600090613b5090600160401b90046001600160401b03166001615767565b9050613b5b816111d9565b1561289e57607254600090600290613b7d9084906001600160401b0316615926565b613b879190615c1a565b613b919083615767565b9050613b9c816111d9565b15613baa57612c5281611e72565b612c5282611e72565b600080613bbe612c56565b90506001600160401b038a1615613c52576072546001600160401b03908116908b161115613bfe5760405162461bcd60e51b8152600401610a8490615451565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c4c5760405162461bcd60e51b8152600401610a84906154c2565b50613cbc565b6001600160401b0389166000908152606d6020526040902054915081613c8a5760405162461bcd60e51b8152600401610a8490615527565b806001600160401b0316896001600160401b03161115613cbc5760405162461bcd60e51b8152600401610a8490615583565b806001600160401b0316886001600160401b031611613ced5760405162461bcd60e51b8152600401610a84906155ff565b6000613cfc8a8a8a868b61101b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051613d319190615670565b602060405180830381855afa158015613d4e573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613d71919061568c565b613d7b91906156bb565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613dbf918b918b918b9190600401615c40565b602060405180830381865afa158015613ddc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e009190615cba565b613e525760405162461bcd60e51b815260206004820152602f6024820152600080516020615e2883398151915260448201526e1d1024a72b20a624a22fa82927a7a360891b6064820152608401610a84565b613e9533613e60858d615926565b6001600160401b0316613e716129d2565b613e7b9190615965565b606554600160581b90046001600160a01b03169190614997565b505050505050505050505050565b6000613ead612c56565b905081600080613ebd8484615926565b6001600160401b031690505b836001600160401b0316836001600160401b031614613f6f576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613f1991164261594e565b1115613f54576001810154613f3e90600160401b90046001600160401b031686615926565b613f51906001600160401b031684615b0b565b92505b60010154600160401b90046001600160401b03169250613ec9565b6000613f7b838361594e565b905082811015613ff5576000613f91828561594e565b9050600c8111613fa15780613fa4565b600c5b9050613fb1816003615965565b613fbc90600a615dbb565b606554613fd5908390600160481b900461ffff16615dbb565b607454613fe29190615965565b613fec9190615a89565b60745550614081565b6000614001848361594e565b9050600c81116140115780614014565b600c5b90506000614023826003615965565b61402e90600a615dbb565b606554614047908490600160481b900461ffff16615dbb565b6074546140549190615965565b61405e9190615a89565b9050806074546074546140719190615965565b61407b9190615a89565b60745550505b505050505050565b600054610100900460ff166140f45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a84565b612613335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561419b57600080fd5b505af11580156141af573d6000803e3d6000fd5b505050506126136149c7565b60006001600160401b038a1615614349576072546001600160401b03908116908b16111561427f5760405162461bcd60e51b81526020600482015260716024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a2070656e64696e6753746160648201527f74654e756d206d757374206265206c657373206f7220657175616c207468616e608482015270206c61737450656e64696e67537461746560781b60a482015260c401610a84565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b90920416146143435760405162461bcd60e51b81526020600482015260656024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a20696e69744e756d42617460648201527f6368206d757374206d61746368207468652070656e64696e67207374617465206084820152640c4c2e8c6d60db1b60a482015260c401610a84565b506144a2565b506001600160401b0387166000908152606d6020526040902054806143ea5760405162461bcd60e51b815260206004820152605c6024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a20696e69744e756d42617460648201527f636820737461746520726f6f7420646f6573206e6f7420657869737400000000608482015260a401610a84565b6069546001600160401b0390811690891611156144a25760405162461bcd60e51b81526020600482015260766024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a20696e69744e756d42617460648201527f6368206d757374206265206c657373206f7220657175616c207468616e2063756084820152750e4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d60531b60a482015260c401610a84565b6072546001600160401b03908116908a16118015906144d25750896001600160401b0316896001600160401b0316115b80156144f357506072546001600160401b03600160401b9091048116908a16115b6145705760405162461bcd60e51b81526020600482015260546024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a2066696e616c50656e64696064820152731b99d4dd185d19539d5b481a5b98dbdc9c9958dd60621b608482015260a401610a84565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146146355760405162461bcd60e51b815260206004820152606f6024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a2066696e616c4e6577426160648201527f746368206d75737420626520657175616c207468616e2063757272656e744c6160848201526e0e6e8accae4d2ccd2cac884c2e8c6d608b1b60a482015260c401610a84565b6000614644898989858a61101b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516146799190615670565b602060405180830381855afa158015614696573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906146b9919061568c565b6146c391906156bb565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614707918a918a918a9190600401615c40565b602060405180830381865afa158015614724573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147489190615cba565b6147b45760405162461bcd60e51b81526020600482015260436024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a20494e56414c49445f505260648201526227a7a360e91b608482015260a401610a84565b6001600160401b038b16600090815260716020526040902060020154879003613e955760405162461bcd60e51b81526020600482015260676024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a2073746f72656420726f6f60648201527f74206d75737420626520646966666572656e74207468616e206e6577207374616084820152661d19481c9bdbdd60ca1b60a482015260c401610a84565b60655460ff1661488b5760405162461bcd60e51b8152600401610a8490615b23565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614915826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614a229092919063ffffffff16565b80519091501561499257808060200190518101906149339190615cba565b6149925760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a84565b505050565b6040516001600160a01b03831660248201526044810182905261499290849063a9059cbb60e01b90606401613adc565b60655460ff16156149ea5760405162461bcd60e51b8152600401610a8490615802565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614a318484600085614a39565b949350505050565b606082471015614a9a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a84565b600080866001600160a01b03168587604051614ab69190615670565b60006040518083038185875af1925050503d8060008114614af3576040519150601f19603f3d011682016040523d82523d6000602084013e614af8565b606091505b5091509150614b0987838387614b14565b979650505050505050565b60608315614b83578251600003614b7c576001600160a01b0385163b614b7c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a84565b5081614a31565b614a318383815115614b985781518083602001fd5b8060405162461bcd60e51b8152600401610a849190614c7b565b80356001600160401b0381168114614bc957600080fd5b919050565b600080600080600060a08688031215614be657600080fd5b614bef86614bb2565b9450614bfd60208701614bb2565b9350614c0b60408701614bb2565b94979396509394606081013594506080013592915050565b60005b83811015614c3e578181015183820152602001614c26565b838111156138185750506000910152565b60008151808452614c67816020860160208601614c23565b601f01601f19169290920160200192915050565b602081526000614c8e6020830184614c4f565b9392505050565b8060408101831015614ca657600080fd5b92915050565b8060808101831015614ca657600080fd5b6000806000806000806000806101a0898b031215614cda57600080fd5b614ce389614bb2565b9750614cf160208a01614bb2565b9650614cff60408a01614bb2565b95506060890135945060808901359350614d1c8a60a08b01614c95565b9250614d2b8a60e08b01614cac565b9150614d3b8a6101608b01614c95565b90509295985092959890939650565b600060208284031215614d5c57600080fd5b813561ffff81168114614c8e57600080fd5b600080600080600060a08688031215614d8657600080fd5b614d8f86614bb2565b9450614d9d60208701614bb2565b94979496505050506040830135926060810135926080909101359150565b600060208284031215614dcd57600080fd5b614c8e82614bb2565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614e0e57614e0e614dd6565b60405290565b604051606081016001600160401b0381118282101715614e0e57614e0e614dd6565b604051601f8201601f191681016001600160401b0381118282101715614e5e57614e5e614dd6565b604052919050565b60006001600160401b03821115614e7f57614e7f614dd6565b5060051b60200190565b600082601f830112614e9a57600080fd5b81356001600160401b03811115614eb357614eb3614dd6565b614ec6601f8201601f1916602001614e36565b818152846020838601011115614edb57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614f0b57600080fd5b82356001600160401b0380821115614f2257600080fd5b818501915085601f830112614f3657600080fd5b8135614f49614f4482614e66565b614e36565b81815260059190911b83018401908481019088831115614f6857600080fd5b8585015b8381101561500157803585811115614f845760008081fd5b86016080818c03601f1901811315614f9c5760008081fd5b614fa4614dec565b8983013588811115614fb65760008081fd5b614fc48e8c83870101614e89565b8252506040808401358b8301526060614fde818601614bb2565b82840152614fed848601614bb2565b908301525085525050918601918601614f6c565b5098975050505050505050565b6001600160a01b038116811461289e57600080fd5b60006020828403121561503557600080fd5b8135614c8e8161500e565b600080600080600060a0868803121561505857600080fd5b8535945060208601356001600160401b0381111561507557600080fd5b61508188828901614e89565b9450506040860135925061509760608701614bb2565b915060808601356150a78161500e565b809150509295509295909350565b600080600080600080600080888a036101c08112156150d357600080fd5b89356150de8161500e565b985060208a01356150ee8161500e565b975060408a01356150fe8161500e565b965060608a013561510e8161500e565b955060e0607f198201121561512257600080fd5b5060808901935061016089013592506101808901356001600160401b038082111561514c57600080fd5b6151588c838d01614e89565b93506101a08b013591508082111561516f57600080fd5b5061517c8b828c01614e89565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c0312156151ab57600080fd5b6151b48a614bb2565b98506151c260208b01614bb2565b97506151d060408b01614bb2565b96506151de60608b01614bb2565b955060808a0135945060a08a013593506151fb8b60c08c01614c95565b925061520b8b6101008c01614cac565b915061521b8b6101808c01614c95565b90509295985092959850929598565b60006020828403121561523c57600080fd5b5035919050565b801515811461289e57600080fd5b60006020828403121561526357600080fd5b8135614c8e81615243565b60006020828403121561528057600080fd5b81356001600160401b0381111561529657600080fd5b614a3184828501614e89565b600060208083850312156152b557600080fd5b82356001600160401b03808211156152cc57600080fd5b818501915085601f8301126152e057600080fd5b81356152ee614f4482614e66565b81815260059190911b8301840190848101908883111561530d57600080fd5b8585015b83811015615001578035858111156153295760008081fd5b86016060818c03601f19018113156153415760008081fd5b615349614e14565b898301358881111561535b5760008081fd5b6153698e8c83870101614e89565b8252506040808401358b830152615381838501614bb2565b9082015285525050918601918601615311565b600080600080608085870312156153aa57600080fd5b6153b385614bb2565b9350602085013592506153c860408601614bb2565b91506153d660608601614bb2565b905092959194509250565b600080604083850312156153f457600080fd5b82356001600160401b0381111561540a57600080fd5b61541685828601614e89565b95602094909401359450505050565b6000806040838503121561543857600080fd5b8235915061544860208401614bb2565b90509250929050565b6020808252605d90820152600080516020615e2883398151915260408201527f3a2070656e64696e6753746174654e756d206d757374206265206c657373206f60608201527f7220657175616c207468616e206c61737450656e64696e675374617465000000608082015260a00190565b6020808252605190820152600080516020615e2883398151915260408201527f3a20696e69744e756d4261746368206d757374206d61746368207468652070656060820152700dcc8d2dcce40e6e8c2e8ca40c4c2e8c6d607b1b608082015260a00190565b6020808252604890820152600080516020615e2883398151915260408201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e6060820152671bdd08195e1a5cdd60c21b608082015260a00190565b6020808252606290820152600080516020615e2883398151915260408201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560608201527f7175616c207468616e2063757272656e744c61737456657269666965644261746080820152610c6d60f31b60a082015260c00190565b6020808252605c90820152600080516020615e2883398151915260408201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460608201527f68616e2063757272656e744c6173745665726966696564426174636800000000608082015260a00190565b60008251615682818460208701614c23565b9190910192915050565b60006020828403121561569e57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826156ca576156ca6156a5565b500690565b600181811c908216806156e357607f821691505b60208210810361570357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526028908201527f50726f6f664f66456666696369656e63793a3a6f6e6c7941646d696e3a206f6e604082015267363c9030b236b4b760c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561578957615789615751565b01949350505050565b6020808252604a908201527f50726f6f664f66456666696369656e63793a3a73657450656e64696e6753746160408201527f746554696d656f75743a206578636565642068616c74206167677265676174696060820152691bdb881d1a5b595bdd5d60b21b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361589c5761589c615751565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b60006001820161591f5761591f615751565b5060010190565b60006001600160401b038381169083168181101561594657615946615751565b039392505050565b60008282101561596057615960615751565b500390565b600081600019048311821515161561597f5761597f615751565b500290565b601f82111561499257600081815260208120601f850160051c810160208610156159ab5750805b601f850160051c820191505b81811015614081578281556001016159b7565b81516001600160401b038111156159e3576159e3614dd6565b6159f7816159f184546156cf565b84615984565b602080601f831160018114615a2c5760008415615a145750858301515b600019600386901b1c1916600185901b178555614081565b600085815260208120601f198616915b82811015615a5b57888601518255948401946001909101908401615a3c565b5085821015615a795787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615a9857615a986156a5565b500490565b60208082526048908201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160408201527f6c6c6f7765643a206f6e6c7920696620666f72636520626174636820697320616060820152677661696c61626c6560c01b608082015260a00190565b60008219821115615b1e57615b1e615751565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b60208082526041908201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564416760408201527f6772656761746f723a206f6e6c7920747275737465642041676772656761746f6060820152603960f91b608082015260a00190565b8381526001600160a01b0383166020820152606060408201819052600090615c1190830184614c4f565b95945050505050565b60006001600160401b0380841680615c3457615c346156a5565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615c7857848483379084018281529284019290600101615c58565b5050828760c0870137610100850181815286935091505b6001811015615cae578251825260209283019290910190600101615c8f565b50505095945050505050565b600060208284031215615ccc57600080fd5b8151614c8e81615243565b600181815b80851115615d12578160001904821115615cf857615cf8615751565b80851615615d0557918102915b93841c9390800290615cdc565b509250929050565b600082615d2957506001614ca6565b81615d3657506000614ca6565b8160018114615d4c5760028114615d5657615d72565b6001915050614ca6565b60ff841115615d6757615d67615751565b50506001821b614ca6565b5060208310610133831016604e8410600b8410161715615d95575081810a614ca6565b615d9f8383615cd7565b8060001904821115615db357615db3615751565b029392505050565b6000614c8e8383615d1a56fe50726f6f664f66456666696369656e63793a3a73657175656e6365426174636850726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657250726f6f664f66456666696369656e63793a3a73657175656e6365466f72636550726f6f664f66456666696369656e63793a3a76657269667942617463686573a264697066735822122092eb4dd90d0805c55812c4974f49e8f33b2f7bc356e05340b337a89898740ae364736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106104125760003560e01c806396dc3d3911610220578063cfa8ed4711610130578063e7a7ed02116100b8578063f14916d611610087578063f14916d6146109e2578063f2fde38b146109f5578063f851a44014610a08578063f8b823e414610a1b578063fe16564f14610a2457600080fd5b8063e7a7ed021461098f578063e8bf92ed146109a9578063eaeb077b146109bc578063edc41121146109cf57600080fd5b8063d939b315116100ff578063d939b3151461093e578063dbc1697614610958578063e0d1744114610960578063e11f3f1814610973578063e217cfd61461098657600080fd5b8063cfa8ed47146108ea578063d02103ca14610904578063d8d1091b14610917578063d8f54db01461092a57600080fd5b8063ab9fc5ef116101b3578063b6b0b09711610182578063b6b0b0971461088f578063c0cad302146108a9578063c0ed84e0146108bc578063c89e42df146108c4578063cf136306146108d757600080fd5b8063ab9fc5ef146107e3578063adc879e9146107ed578063afd23cbe14610807578063b4d63f581461082f57600080fd5b80639eb831b9116101ef5780639eb831b9146107a85780639f0d039d146107b0578063a3c573eb146107b8578063aa58bad6146107cb57600080fd5b806396dc3d391461076757806399f5634e1461077a5780639b796760146107825780639c9f3dfe1461079557600080fd5b80634a910e6a11610326578063715018a6116102ae578063837a47381161027d578063837a4738146106b1578063841b24d71461071f5780638b48931e146107395780638c4a0af7146107435780638da5cb5b1461075657600080fd5b8063715018a6146106705780637215541a1461067857806375c508b31461068b5780637fcb36531461069e57600080fd5b8063574f649e116102f5578063574f649e1461060457806360943d6a146106175780636b8616ce1461062a5780636ff512cc1461064a578063704b6c021461065d57600080fd5b80634a910e6a146105b65780635392c5e0146105c9578063542028d5146105e95780635437988d146105f157600080fd5b80632d0889d3116103a9578063423fa85611610378578063423fa85614610542578063456052671461055c578063458c0477146105765780634834a343146105895780634a1a89a71461059c57600080fd5b80632d0889d314610500578063383b3be814610509578063394218e91461051c5780633c1582671461052f57600080fd5b80631816b7e5116103e55780631816b7e51461048457806319d8ac6114610497578063220d7899146104c257806329878983146104d557600080fd5b80630eaa86ea14610417578063107bf28c1461043d57806310a01a721461045257806315064c9614610467575b600080fd5b61042a610425366004614bce565b610a37565b6040519081526020015b60405180910390f35b610445610c18565b6040516104349190614c7b565b610465610460366004614cbd565b610ca6565b005b6065546104749060ff1681565b6040519015158152602001610434565b610465610492366004614d4a565b610ef0565b6068546104aa906001600160401b031681565b6040516001600160401b039091168152602001610434565b6104456104d0366004614d6e565b61101b565b606a546104e8906001600160a01b031681565b6040516001600160a01b039091168152602001610434565b61042a61ea6081565b610474610517366004614dbb565b6111d9565b61046561052a366004614dbb565b611220565b61046561053d366004614ef8565b611373565b6068546104aa90600160401b90046001600160401b031681565b6068546104aa90600160801b90046001600160401b031681565b6072546104aa906001600160401b031681565b610465610597366004614cbd565b611b3e565b6072546104aa90600160401b90046001600160401b031681565b6104656105c4366004614dbb565b611e72565b61042a6105d7366004614dbb565b606d6020526000908152604090205481565b61044561211b565b6104656105ff366004615023565b612128565b61042a610612366004615040565b612152565b6104656106253660046150b5565b612195565b61042a610638366004614dbb565b60666020526000908152604090205481565b610465610658366004615023565b612505565b61046561066b366004615023565b612589565b610465612601565b610465610686366004614dbb565b612615565b61046561069936600461518c565b6128a1565b6069546104aa906001600160401b031681565b6106f46106bf36600461522a565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610434565b6072546104aa90600160c01b90046001600160401b031681565b6104aa62093a8081565b610465610751366004615251565b612930565b6033546001600160a01b03166104e8565b610465610775366004614dbb565b6129a7565b61042a6129d2565b610465610790366004614dbb565b612ab5565b6104656107a3366004614dbb565b612aea565b61042a600c81565b60745461042a565b6070546104e8906001600160a01b031681565b6065546104aa9061010090046001600160401b031681565b6104aa6206978081565b606c546104aa90600160a81b90046001600160401b031681565b60655461081c90600160481b900461ffff1681565b60405161ffff9091168152602001610434565b61086a61083d366004614dbb565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610434565b6065546104e890600160581b90046001600160a01b031681565b6104656108b736600461526e565b612c3e565b6104aa612c56565b6104656108d236600461526e565b612ca3565b6104656108e5366004614dbb565b612d09565b6069546104e890600160401b90046001600160a01b031681565b606c546104e8906001600160a01b031681565b6104656109253660046152a2565b612d8a565b606c5461047490600160a01b900460ff1681565b6072546104aa90600160801b90046001600160401b031681565b610465613276565b61046561096e366004615394565b613332565b61046561098136600461518c565b6133a4565b6104aa6103e881565b6068546104aa90600160c01b90046001600160401b031681565b606b546104e8906001600160a01b031681565b6104656109ca3660046153e1565b6134e9565b6104656109dd366004614cbd565b61381e565b6104656109f0366004615023565b61393e565b610465610a03366004615023565b6139b6565b6073546104e8906001600160a01b031681565b61042a60745481565b610465610a32366004615425565b613a2c565b6000806000610a44612c56565b90506001600160401b03881615610ae1576072546001600160401b039081169089161115610a8d5760405162461bcd60e51b8152600401610a8490615451565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610adb5760405162461bcd60e51b8152600401610a84906154c2565b50610b4b565b6001600160401b0387166000908152606d6020526040902054915081610b195760405162461bcd60e51b8152600401610a8490615527565b806001600160401b0316876001600160401b03161115610b4b5760405162461bcd60e51b8152600401610a8490615583565b806001600160401b0316866001600160401b031611610b7c5760405162461bcd60e51b8152600401610a84906155ff565b6000610b8b888888868961101b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051610bc09190615670565b602060405180830381855afa158015610bdd573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c00919061568c565b610c0a91906156bb565b9a9950505050505050505050565b606f8054610c25906156cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610c51906156cf565b8015610c9e5780601f10610c7357610100808354040283529160200191610c9e565b820191906000526020600020905b815481529060010190602001808311610c8157829003601f168201915b505050505081565b610cae613a4e565b600080610cb9612c56565b90506001600160401b038a1615610d4d576072546001600160401b03908116908b161115610cf95760405162461bcd60e51b8152600401610a8490615451565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610d475760405162461bcd60e51b8152600401610a84906154c2565b50610db7565b6001600160401b0389166000908152606d6020526040902054915081610d855760405162461bcd60e51b8152600401610a8490615527565b806001600160401b0316896001600160401b03161115610db75760405162461bcd60e51b8152600401610a8490615583565b806001600160401b0316886001600160401b031611610de85760405162461bcd60e51b8152600401610a84906155ff565b6000610df78a8a8a868b61101b565b6069805467ffffffffffffffff19166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610e4557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610e8b57600080fd5b505af1158015610e9f573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610f1a5760405162461bcd60e51b8152600401610a8490615709565b6103e88161ffff16118015610f3457506104008161ffff16105b610fbe5760405162461bcd60e51b815260206004820152604f60248201527f50726f6f664f66456666696369656e63793a3a7365744d756c7469706c69657260448201527f42617463684665653a206e65774d756c7469706c69657242617463684665652060648201526e696e636f72726563742072616e676560881b608482015260a401610a84565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b0380861660008181526067602052604080822054938816825290205460609291158061104d57508115155b6110cd5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206f6c64416363496e7075744861736820646f6573206e6f7420606482015264195e1a5cdd60da1b608482015260a401610a84565b8061114e5760405162461bcd60e51b815260206004820152604560248201527f50726f6f664f66456666696369656e63793a3a676574496e707574536e61726b60448201527f42797465733a206e6577416363496e7075744861736820646f6573206e6f7420606482015264195e1a5cdd60da1b608482015260a401610a84565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b038281166000908152607160205260408120549092429261120f92600160801b90920481169116615767565b6001600160401b0316111592915050565b6073546001600160a01b0316331461124a5760405162461bcd60e51b8152600401610a8490615709565b62093a806001600160401b03821611156112765760405162461bcd60e51b8152600401610a8490615792565b60655460ff1661131d576072546001600160401b03600160c01b90910481169082161061131d5760405162461bcd60e51b815260206004820152604960248201527f50726f6f664f66456666696369656e63793a3a7365745472757374656441676760448201527f72656761746f7254696d656f75743a206e65772074696d656f7574206d757374606482015268103132903637bbb2b960b91b608482015260a401610a84565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001611010565b60655460ff16156113965760405162461bcd60e51b8152600401610a8490615802565b606954600160401b90046001600160a01b0316331461141d5760405162461bcd60e51b815260206004820152603f60248201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564536560448201527f7175656e6365723a206f6e6c7920747275737465642073657175656e636572006064820152608401610a84565b80518061148b5760405162461bcd60e51b81526020600482015260426024820152600080516020615dc883398151915260448201527f65733a204174206c65617374206d7573742073657175656e63652031206261746064820152610c6d60f31b608482015260a401610a84565b6103e881106114fe5760405162461bcd60e51b81526020600482015260456024820152600080516020615dc883398151915260448201527f65733a2043616e6e6f742073657175656e63652074686174206d616e79206261606482015264746368657360d81b608482015260a401610a84565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561196c5760008782815181106115515761155161586a565b60200260200101519050600081606001516001600160401b031611156116f1578361157b81615880565b9450506000816000015180519060200120826020015183606001516040516020016115a8939291906158a6565b60408051601f1981840301815291815281516020928301206001600160401b0388166000908152606690935291205490915081146116475760405162461bcd60e51b81526020600482015260426024820152600080516020615dc883398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a401610a84565b81606001516001600160401b031682604001516001600160401b031610156116eb5760405162461bcd60e51b815260206004820152605d6024820152600080516020615dc883398151915260448201527f65733a20466f7263656420626174636865732074696d657374616d70206d757360648201527f7420626520626967676572206f7220657175616c207468616e206d696e000000608482015260a401610a84565b50611866565b6020810151158061177a5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916117349160040190815260200190565b6020604051808303816000875af1158015611753573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611777919061568c565b15155b6117da5760405162461bcd60e51b815260206004820152603f6024820152600080516020615dc883398151915260448201527f65733a20476c6f62616c206578697420726f6f74206d757374206578697374006064820152608401610a84565b80515161ea60116118665760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a401610a84565b856001600160401b031681604001516001600160401b03161015801561189957504281604001516001600160401b031611155b6119045760405162461bcd60e51b81526020600482015260426024820152600080516020615dc883398151915260448201527f65733a2054696d657374616d70206d75737420626520696e736964652072616e606482015261676560f01b608482015260a401610a84565b8051805160209182012081830151604080850151905161192b9488949392913391016158c9565b604051602081830303815290604052805190602001209250848061194e90615880565b955050806040015195505080806119649061590d565b915050611535565b506068546001600160401b03600160c01b909104811690831611156119e75760405162461bcd60e51b815260206004820152603a6024820152600080516020615dc883398151915260448201527f65733a20466f7263652062617463686573206f766572666c6f770000000000006064820152608401610a84565b606854600090611a0790600160801b90046001600160401b031684615926565b611a1a906001600160401b03168761594e565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611aef90339030908490611ad49190615965565b606554600160581b90046001600160a01b0316929190613aa8565b611af7613b13565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b615760405162461bcd60e51b8152600401610a8490615802565b6072546001600160401b038781166000908152606760205260409020600101544292611b9892600160c01b90910481169116615767565b6001600160401b03161115611c145760405162461bcd60e51b81526020600482015260486024820152600080516020615e2883398151915260448201527f3a20747275737465642061676772656761746f722074696d656f7574206e6f7460648201526708195e1c1a5c995960c21b608482015260a401610a84565b6103e8611c218888615926565b6001600160401b031610611c955760405162461bcd60e51b81526020600482015260416024820152600080516020615e2883398151915260448201527f3a2063616e6e6f74207665726966792074686174206d616e79206261746368656064820152607360f81b608482015260a401610a84565b611ca58888888888888888613bb3565b611cae86613ea3565b607254600160801b90046001600160401b0316600003611d76576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615611d1357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d5957600080fd5b505af1158015611d6d573d6000803e3d6000fd5b50505050611e27565b611d7e613b13565b607280546001600160401b0316906000611d9783615880565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611e9f57506072546001600160401b03600160401b9091048116908216115b8015611eba57506072546001600160401b0390811690821611155b611f3d5760405162461bcd60e51b815260206004820152604860248201527f50726f6f664f66456666696369656e63793a3a636f6e736f6c6964617465506560448201527f6e64696e6753746174653a2070656e64696e6753746174654e756d206d757374606482015267081a5b9d985b1a5960c21b608482015260a401610a84565b606a546001600160a01b03163314611ff057611f58816111d9565b611ff05760405162461bcd60e51b815260206004820152605960248201527f50726f6f664f66456666696369656e63793a3a636f6e736f6c6964617465506560448201527f6e64696e6753746174653a2070656e64696e67207374617465206973206e6f7460648201527f20726561647920746f20626520636f6e736f6c69646174656400000000000000608482015260a401610a84565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b1580156120ad57600080fd5b505af11580156120c1573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e846002015460405161210e91815260200190565b60405180910390a3505050565b606e8054610c25906156cf565b612130613a4e565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b60008585805190602001208585856040516020016121749594939291906158c9565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff16158080156121b55750600054600160ff909116105b806121cf5750303b1580156121cf575060005460ff166001145b6122325760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a84565b6000805460ff191660011790558015612255576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a8416179055607080549091169188169190911790556122d26020860186615023565b607380546001600160a01b0319166001600160a01b03929092169190911790556123026060860160408701615023565b606980546001600160a01b0392909216600160401b02600160401b600160e01b031990921691909117905561233d60c0860160a08701615023565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa71135684905561239a60e0860160c08701614dbb565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556123d16040860160208701614dbb565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561240d6080860160608701614dbb565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b1990921691909117905561244960a0860160808701615251565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e61247184826159ca565b50606f61247e83826159ca565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124b4614089565b80156124fa576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b0316331461252f5760405162461bcd60e51b8152600401610a8490615709565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001611010565b6073546001600160a01b031633146125b35760405162461bcd60e51b8152600401610a8490615709565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190602001611010565b612609613a4e565b61261360006140f9565b565b6033546001600160a01b03163314612896576072546000906001600160401b03161561266657506072546001600160401b03908116600090815260716020526040902054600160401b900416612674565b506069546001600160401b03165b80826001600160401b0316116126fc5760405162461bcd60e51b815260206004820152604160248201527f50726f6f664f66456666696369656e63793a3a6163746976617465456d65726760448201527f656e637953746174653a20426174636820616c726561647920766572696669656064820152601960fa1b608482015260a401610a84565b6068546001600160401b03600160401b90910481169083161180159061273e57506001600160401b038083166000908152606760205260409020600101541615155b6127ce5760405162461bcd60e51b815260206004820152605560248201527f50726f6f664f66456666696369656e63793a3a6163746976617465456d65726760448201527f656e637953746174653a204261746368206e6f742073657175656e636564206f60648201527472206e6f7420656e64206f662073657175656e636560581b608482015260a401610a84565b6001600160401b0380831660009081526067602052604090206001015442916127fc9162093a809116615767565b6001600160401b031611156128945760405162461bcd60e51b815260206004820152605260248201527f50726f6f664f66456666696369656e63793a3a6163746976617465456d65726760448201527f656e637953746174653a204167677265676174696f6e2068616c742074696d656064820152711bdd5d081a5cc81b9bdd08195e1c1a5c995960721b608482015260a401610a84565b505b61289e61414b565b50565b60655460ff16156128c45760405162461bcd60e51b8152600401610a8490615802565b6128d58989898989898989896141bb565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a16124fa61414b565b6073546001600160a01b0316331461295a5760405162461bcd60e51b8152600401610a8490615709565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061101090831515815260200190565b6129af613a4e565b6069805467ffffffffffffffff19166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612a25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a49919061568c565b90506000612a55612c56565b6068546001600160401b03600160401b8204811691612a8591600160801b8204811691600160c01b900416615926565b612a8f9190615767565b612a999190615926565b6001600160401b03169050612aae8183615a89565b9250505090565b612abd613a4e565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612b145760405162461bcd60e51b8152600401610a8490615709565b62093a806001600160401b0382161115612b405760405162461bcd60e51b8152600401610a8490615792565b60655460ff16612be3576072546001600160401b03600160801b909104811690821610612be35760405162461bcd60e51b8152602060048201526044602482018190527f50726f6f664f66456666696369656e63793a3a73657450656e64696e67537461908201527f746554696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a401610a84565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001611010565b612c46613a4e565b606f612c5282826159ca565b5050565b6072546000906001600160401b031615612c9357506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612ccd5760405162461bcd60e51b8152600401610a8490615709565b606e612cd982826159ca565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b20816040516110109190614c7b565b6073546001600160a01b03163314612d335760405162461bcd60e51b8152600401610a8490615709565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001611010565b60655460ff1615612dad5760405162461bcd60e51b8152600401610a8490615802565b606c54600160a01b900460ff161515600114612ddb5760405162461bcd60e51b8152600401610a8490615a9d565b805180612e495760405162461bcd60e51b81526020600482015260426024820152600080516020615e0883398151915260448201527f42617463683a204d75737420666f726365206174206c656173742031206261746064820152610c6d60f31b608482015260a401610a84565b6103e88110612ebf5760405162461bcd60e51b81526020600482015260486024820152600080516020615e0883398151915260448201527f426174636865733a2063616e6e6f74207665726966792074686174206d616e79606482015267206261746368657360c01b608482015260a401610a84565b6068546001600160401b03600160c01b8204811691612ee7918491600160801b900416615b0b565b1115612f495760405162461bcd60e51b815260206004820152603a6024820152600080516020615e0883398151915260448201527f42617463683a20466f72636520626174636820696e76616c69640000000000006064820152608401610a84565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b8481101561317f576000868281518110612f9657612f9661586a565b602002602001015190508380612fab90615880565b945050600081600001518051906020012082602001518360400151604051602001612fd8939291906158a6565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461307c5760405162461bcd60e51b81526020600482015260476024820152600080516020615e0883398151915260448201527f426174636865733a20466f7263656420626174636865732064617461206d75736064820152660e840dac2e8c6d60cb1b608482015260a401610a84565b61308760018861594e565b830361312157426206978083604001516130a19190615767565b6001600160401b031611156131215760405162461bcd60e51b815260206004820152604c6024820152600080516020615e0883398151915260448201527f42617463683a20466f72636564206261746368206973206e6f7420696e20746960648201526b1b595bdd5d081c195c9a5bd960a21b608482015260a401610a84565b8151805160209182012081840151604051613144938893929142913391016158c9565b604051602081830303815290604052805190602001209350858061316790615880565b965050505080806131779061590d565b915050612f7a565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166132985760405162461bcd60e51b8152600401610a8490615b23565b6073546001600160a01b031633146132c25760405162461bcd60e51b8152600401610a8490615709565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561331257600080fd5b505af1158015613326573d6000803e3d6000fd5b50505050612613614869565b61333a613a4e565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133ce5760405162461bcd60e51b8152600401610a8490615b80565b6133df8989898989898989896141bb565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561342a57607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561347057600080fd5b505af1158015613484573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff161561350c5760405162461bcd60e51b8152600401610a8490615802565b606c54600160a01b900460ff16151560011461353a5760405162461bcd60e51b8152600401610a8490615a9d565b600061354560745490565b9050818111156135af5760405162461bcd60e51b815260206004820152602f60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a206e60448201526e6f7420656e6f756768206d6174696360881b6064820152608401610a84565b61ea608351106136275760405162461bcd60e51b815260206004820152603a60248201527f50726f6f664f66456666696369656e63793a3a666f72636542617463683a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610a84565b60655461364690600160581b90046001600160a01b0316333084613aa8565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015613690573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136b4919061568c565b60688054919250600160c01b9091046001600160401b03169060186136d883615880565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505083805190602001208142604051602001613719939291906158a6565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b0316600090815260669093529120553233036137bd57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613818565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161380f93929190615be7565b60405180910390a25b50505050565b606a546001600160a01b031633146138485760405162461bcd60e51b8152600401610a8490615b80565b6138588888888888888888613bb3565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d6020526040902085905560725416156138a357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156138e957600080fd5b505af11580156138fd573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e60565b6073546001600160a01b031633146139685760405162461bcd60e51b8152600401610a8490615709565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001611010565b6139be613a4e565b6001600160a01b038116613a235760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a84565b61289e816140f9565b613a34613a4e565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b031633146126135760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a84565b6040516001600160a01b03808516602483015283166044820152606481018290526138189085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526148c0565b6072546001600160401b03600160401b820481169116111561261357607254600090613b5090600160401b90046001600160401b03166001615767565b9050613b5b816111d9565b1561289e57607254600090600290613b7d9084906001600160401b0316615926565b613b879190615c1a565b613b919083615767565b9050613b9c816111d9565b15613baa57612c5281611e72565b612c5282611e72565b600080613bbe612c56565b90506001600160401b038a1615613c52576072546001600160401b03908116908b161115613bfe5760405162461bcd60e51b8152600401610a8490615451565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c4c5760405162461bcd60e51b8152600401610a84906154c2565b50613cbc565b6001600160401b0389166000908152606d6020526040902054915081613c8a5760405162461bcd60e51b8152600401610a8490615527565b806001600160401b0316896001600160401b03161115613cbc5760405162461bcd60e51b8152600401610a8490615583565b806001600160401b0316886001600160401b031611613ced5760405162461bcd60e51b8152600401610a84906155ff565b6000613cfc8a8a8a868b61101b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051613d319190615670565b602060405180830381855afa158015613d4e573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613d71919061568c565b613d7b91906156bb565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613dbf918b918b918b9190600401615c40565b602060405180830381865afa158015613ddc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e009190615cba565b613e525760405162461bcd60e51b815260206004820152602f6024820152600080516020615e2883398151915260448201526e1d1024a72b20a624a22fa82927a7a360891b6064820152608401610a84565b613e9533613e60858d615926565b6001600160401b0316613e716129d2565b613e7b9190615965565b606554600160581b90046001600160a01b03169190614997565b505050505050505050505050565b6000613ead612c56565b905081600080613ebd8484615926565b6001600160401b031690505b836001600160401b0316836001600160401b031614613f6f576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613f1991164261594e565b1115613f54576001810154613f3e90600160401b90046001600160401b031686615926565b613f51906001600160401b031684615b0b565b92505b60010154600160401b90046001600160401b03169250613ec9565b6000613f7b838361594e565b905082811015613ff5576000613f91828561594e565b9050600c8111613fa15780613fa4565b600c5b9050613fb1816003615965565b613fbc90600a615dbb565b606554613fd5908390600160481b900461ffff16615dbb565b607454613fe29190615965565b613fec9190615a89565b60745550614081565b6000614001848361594e565b9050600c81116140115780614014565b600c5b90506000614023826003615965565b61402e90600a615dbb565b606554614047908490600160481b900461ffff16615dbb565b6074546140549190615965565b61405e9190615a89565b9050806074546074546140719190615965565b61407b9190615a89565b60745550505b505050505050565b600054610100900460ff166140f45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a84565b612613335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561419b57600080fd5b505af11580156141af573d6000803e3d6000fd5b505050506126136149c7565b60006001600160401b038a1615614349576072546001600160401b03908116908b16111561427f5760405162461bcd60e51b81526020600482015260716024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a2070656e64696e6753746160648201527f74654e756d206d757374206265206c657373206f7220657175616c207468616e608482015270206c61737450656e64696e67537461746560781b60a482015260c401610a84565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b90920416146143435760405162461bcd60e51b81526020600482015260656024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a20696e69744e756d42617460648201527f6368206d757374206d61746368207468652070656e64696e67207374617465206084820152640c4c2e8c6d60db1b60a482015260c401610a84565b506144a2565b506001600160401b0387166000908152606d6020526040902054806143ea5760405162461bcd60e51b815260206004820152605c6024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a20696e69744e756d42617460648201527f636820737461746520726f6f7420646f6573206e6f7420657869737400000000608482015260a401610a84565b6069546001600160401b0390811690891611156144a25760405162461bcd60e51b81526020600482015260766024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a20696e69744e756d42617460648201527f6368206d757374206265206c657373206f7220657175616c207468616e2063756084820152750e4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d60531b60a482015260c401610a84565b6072546001600160401b03908116908a16118015906144d25750896001600160401b0316896001600160401b0316115b80156144f357506072546001600160401b03600160401b9091048116908a16115b6145705760405162461bcd60e51b81526020600482015260546024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a2066696e616c50656e64696064820152731b99d4dd185d19539d5b481a5b98dbdc9c9958dd60621b608482015260a401610a84565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146146355760405162461bcd60e51b815260206004820152606f6024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a2066696e616c4e6577426160648201527f746368206d75737420626520657175616c207468616e2063757272656e744c6160848201526e0e6e8accae4d2ccd2cac884c2e8c6d608b1b60a482015260c401610a84565b6000614644898989858a61101b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516146799190615670565b602060405180830381855afa158015614696573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906146b9919061568c565b6146c391906156bb565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614707918a918a918a9190600401615c40565b602060405180830381865afa158015614724573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147489190615cba565b6147b45760405162461bcd60e51b81526020600482015260436024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a20494e56414c49445f505260648201526227a7a360e91b608482015260a401610a84565b6001600160401b038b16600090815260716020526040902060020154879003613e955760405162461bcd60e51b81526020600482015260676024820152600080516020615de883398151915260448201527f6d696e697374696350656e64696e6753746174653a2073746f72656420726f6f60648201527f74206d75737420626520646966666572656e74207468616e206e6577207374616084820152661d19481c9bdbdd60ca1b60a482015260c401610a84565b60655460ff1661488b5760405162461bcd60e51b8152600401610a8490615b23565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614915826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614a229092919063ffffffff16565b80519091501561499257808060200190518101906149339190615cba565b6149925760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a84565b505050565b6040516001600160a01b03831660248201526044810182905261499290849063a9059cbb60e01b90606401613adc565b60655460ff16156149ea5760405162461bcd60e51b8152600401610a8490615802565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614a318484600085614a39565b949350505050565b606082471015614a9a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a84565b600080866001600160a01b03168587604051614ab69190615670565b60006040518083038185875af1925050503d8060008114614af3576040519150601f19603f3d011682016040523d82523d6000602084013e614af8565b606091505b5091509150614b0987838387614b14565b979650505050505050565b60608315614b83578251600003614b7c576001600160a01b0385163b614b7c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a84565b5081614a31565b614a318383815115614b985781518083602001fd5b8060405162461bcd60e51b8152600401610a849190614c7b565b80356001600160401b0381168114614bc957600080fd5b919050565b600080600080600060a08688031215614be657600080fd5b614bef86614bb2565b9450614bfd60208701614bb2565b9350614c0b60408701614bb2565b94979396509394606081013594506080013592915050565b60005b83811015614c3e578181015183820152602001614c26565b838111156138185750506000910152565b60008151808452614c67816020860160208601614c23565b601f01601f19169290920160200192915050565b602081526000614c8e6020830184614c4f565b9392505050565b8060408101831015614ca657600080fd5b92915050565b8060808101831015614ca657600080fd5b6000806000806000806000806101a0898b031215614cda57600080fd5b614ce389614bb2565b9750614cf160208a01614bb2565b9650614cff60408a01614bb2565b95506060890135945060808901359350614d1c8a60a08b01614c95565b9250614d2b8a60e08b01614cac565b9150614d3b8a6101608b01614c95565b90509295985092959890939650565b600060208284031215614d5c57600080fd5b813561ffff81168114614c8e57600080fd5b600080600080600060a08688031215614d8657600080fd5b614d8f86614bb2565b9450614d9d60208701614bb2565b94979496505050506040830135926060810135926080909101359150565b600060208284031215614dcd57600080fd5b614c8e82614bb2565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614e0e57614e0e614dd6565b60405290565b604051606081016001600160401b0381118282101715614e0e57614e0e614dd6565b604051601f8201601f191681016001600160401b0381118282101715614e5e57614e5e614dd6565b604052919050565b60006001600160401b03821115614e7f57614e7f614dd6565b5060051b60200190565b600082601f830112614e9a57600080fd5b81356001600160401b03811115614eb357614eb3614dd6565b614ec6601f8201601f1916602001614e36565b818152846020838601011115614edb57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614f0b57600080fd5b82356001600160401b0380821115614f2257600080fd5b818501915085601f830112614f3657600080fd5b8135614f49614f4482614e66565b614e36565b81815260059190911b83018401908481019088831115614f6857600080fd5b8585015b8381101561500157803585811115614f845760008081fd5b86016080818c03601f1901811315614f9c5760008081fd5b614fa4614dec565b8983013588811115614fb65760008081fd5b614fc48e8c83870101614e89565b8252506040808401358b8301526060614fde818601614bb2565b82840152614fed848601614bb2565b908301525085525050918601918601614f6c565b5098975050505050505050565b6001600160a01b038116811461289e57600080fd5b60006020828403121561503557600080fd5b8135614c8e8161500e565b600080600080600060a0868803121561505857600080fd5b8535945060208601356001600160401b0381111561507557600080fd5b61508188828901614e89565b9450506040860135925061509760608701614bb2565b915060808601356150a78161500e565b809150509295509295909350565b600080600080600080600080888a036101c08112156150d357600080fd5b89356150de8161500e565b985060208a01356150ee8161500e565b975060408a01356150fe8161500e565b965060608a013561510e8161500e565b955060e0607f198201121561512257600080fd5b5060808901935061016089013592506101808901356001600160401b038082111561514c57600080fd5b6151588c838d01614e89565b93506101a08b013591508082111561516f57600080fd5b5061517c8b828c01614e89565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c0312156151ab57600080fd5b6151b48a614bb2565b98506151c260208b01614bb2565b97506151d060408b01614bb2565b96506151de60608b01614bb2565b955060808a0135945060a08a013593506151fb8b60c08c01614c95565b925061520b8b6101008c01614cac565b915061521b8b6101808c01614c95565b90509295985092959850929598565b60006020828403121561523c57600080fd5b5035919050565b801515811461289e57600080fd5b60006020828403121561526357600080fd5b8135614c8e81615243565b60006020828403121561528057600080fd5b81356001600160401b0381111561529657600080fd5b614a3184828501614e89565b600060208083850312156152b557600080fd5b82356001600160401b03808211156152cc57600080fd5b818501915085601f8301126152e057600080fd5b81356152ee614f4482614e66565b81815260059190911b8301840190848101908883111561530d57600080fd5b8585015b83811015615001578035858111156153295760008081fd5b86016060818c03601f19018113156153415760008081fd5b615349614e14565b898301358881111561535b5760008081fd5b6153698e8c83870101614e89565b8252506040808401358b830152615381838501614bb2565b9082015285525050918601918601615311565b600080600080608085870312156153aa57600080fd5b6153b385614bb2565b9350602085013592506153c860408601614bb2565b91506153d660608601614bb2565b905092959194509250565b600080604083850312156153f457600080fd5b82356001600160401b0381111561540a57600080fd5b61541685828601614e89565b95602094909401359450505050565b6000806040838503121561543857600080fd5b8235915061544860208401614bb2565b90509250929050565b6020808252605d90820152600080516020615e2883398151915260408201527f3a2070656e64696e6753746174654e756d206d757374206265206c657373206f60608201527f7220657175616c207468616e206c61737450656e64696e675374617465000000608082015260a00190565b6020808252605190820152600080516020615e2883398151915260408201527f3a20696e69744e756d4261746368206d757374206d61746368207468652070656060820152700dcc8d2dcce40e6e8c2e8ca40c4c2e8c6d607b1b608082015260a00190565b6020808252604890820152600080516020615e2883398151915260408201527f3a20696e69744e756d426174636820737461746520726f6f7420646f6573206e6060820152671bdd08195e1a5cdd60c21b608082015260a00190565b6020808252606290820152600080516020615e2883398151915260408201527f3a20696e69744e756d4261746368206d757374206265206c657373206f72206560608201527f7175616c207468616e2063757272656e744c61737456657269666965644261746080820152610c6d60f31b60a082015260c00190565b6020808252605c90820152600080516020615e2883398151915260408201527f3a2066696e616c4e65774261746368206d75737420626520626967676572207460608201527f68616e2063757272656e744c6173745665726966696564426174636800000000608082015260a00190565b60008251615682818460208701614c23565b9190910192915050565b60006020828403121561569e57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826156ca576156ca6156a5565b500690565b600181811c908216806156e357607f821691505b60208210810361570357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526028908201527f50726f6f664f66456666696369656e63793a3a6f6e6c7941646d696e3a206f6e604082015267363c9030b236b4b760c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561578957615789615751565b01949350505050565b6020808252604a908201527f50726f6f664f66456666696369656e63793a3a73657450656e64696e6753746160408201527f746554696d656f75743a206578636565642068616c74206167677265676174696060820152691bdb881d1a5b595bdd5d60b21b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361589c5761589c615751565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b60006001820161591f5761591f615751565b5060010190565b60006001600160401b038381169083168181101561594657615946615751565b039392505050565b60008282101561596057615960615751565b500390565b600081600019048311821515161561597f5761597f615751565b500290565b601f82111561499257600081815260208120601f850160051c810160208610156159ab5750805b601f850160051c820191505b81811015614081578281556001016159b7565b81516001600160401b038111156159e3576159e3614dd6565b6159f7816159f184546156cf565b84615984565b602080601f831160018114615a2c5760008415615a145750858301515b600019600386901b1c1916600185901b178555614081565b600085815260208120601f198616915b82811015615a5b57888601518255948401946001909101908401615a3c565b5085821015615a795787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615a9857615a986156a5565b500490565b60208082526048908201527f50726f6f664f66456666696369656e63793a3a6973466f72636542617463684160408201527f6c6c6f7765643a206f6e6c7920696620666f72636520626174636820697320616060820152677661696c61626c6560c01b608082015260a00190565b60008219821115615b1e57615b1e615751565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b60208082526041908201527f50726f6f664f66456666696369656e63793a3a6f6e6c7954727573746564416760408201527f6772656761746f723a206f6e6c7920747275737465642041676772656761746f6060820152603960f91b608082015260a00190565b8381526001600160a01b0383166020820152606060408201819052600090615c1190830184614c4f565b95945050505050565b60006001600160401b0380841680615c3457615c346156a5565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615c7857848483379084018281529284019290600101615c58565b5050828760c0870137610100850181815286935091505b6001811015615cae578251825260209283019290910190600101615c8f565b50505095945050505050565b600060208284031215615ccc57600080fd5b8151614c8e81615243565b600181815b80851115615d12578160001904821115615cf857615cf8615751565b80851615615d0557918102915b93841c9390800290615cdc565b509250929050565b600082615d2957506001614ca6565b81615d3657506000614ca6565b8160018114615d4c5760028114615d5657615d72565b6001915050614ca6565b60ff841115615d6757615d67615751565b50506001821b614ca6565b5060208310610133831016604e8410600b8410161715615d95575081810a614ca6565b615d9f8383615cd7565b8060001904821115615db357615db3615751565b029392505050565b6000614c8e8383615d1a56fe50726f6f664f66456666696369656e63793a3a73657175656e6365426174636850726f6f664f66456666696369656e63793a3a70726f76654e6f6e446574657250726f6f664f66456666696369656e63793a3a73657175656e6365466f72636550726f6f664f66456666696369656e63793a3a76657269667942617463686573a264697066735822122092eb4dd90d0805c55812c4974f49e8f33b2f7bc356e05340b337a89898740ae364736f6c634300080f0033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/contracts/PolygonZKEVM.sol b/contracts/PolygonZKEVM.sol index 8c1c2187e..4b904ce2b 100644 --- a/contracts/PolygonZKEVM.sol +++ b/contracts/PolygonZKEVM.sol @@ -4,7 +4,7 @@ pragma solidity 0.8.15; import "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol"; import "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol"; import "./interfaces/IVerifierRollup.sol"; -import "./interfaces/IGlobalExitRootManager.sol"; +import "./interfaces/IPolygonZKEVMGlobalExitRoot.sol"; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; import "./interfaces/IPolygonZKEVMBridge.sol"; @@ -171,7 +171,7 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { IVerifierRollup public rollupVerifier; // Global Exit Root interface - IGlobalExitRootManager public globalExitRootManager; + IPolygonZKEVMGlobalExitRoot public globalExitRootManager; // Indicates whether the force batch functionality is available bool public forceBatchAllowed; @@ -335,7 +335,7 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { * @param _networkName L2 network name */ function initialize( - IGlobalExitRootManager _globalExitRootManager, + IPolygonZKEVMGlobalExitRoot _globalExitRootManager, IERC20Upgradeable _matic, IVerifierRollup _rollupVerifier, IPolygonZKEVMBridge _bridgeAddress, diff --git a/contracts/PolygonZKEVMBridge.sol b/contracts/PolygonZKEVMBridge.sol index 5c23210df..8f7b13f19 100644 --- a/contracts/PolygonZKEVMBridge.sol +++ b/contracts/PolygonZKEVMBridge.sol @@ -5,7 +5,7 @@ pragma solidity 0.8.15; import "./lib/DepositContract.sol"; import "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol"; import "./lib/TokenWrapped.sol"; -import "./interfaces/IGlobalExitRootManager.sol"; +import "./interfaces/IPolygonZKEVMGlobalExitRoot.sol"; import "./interfaces/IBridgeMessageReceiver.sol"; import "./interfaces/IPolygonZKEVMBridge.sol"; import "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol"; @@ -56,7 +56,7 @@ contract PolygonZKEVMBridge is mapping(address => TokenInformation) public wrappedTokenToTokenInfo; // Global Exit Root address - IGlobalExitRootManager public globalExitRootManager; + IPolygonZKEVMGlobalExitRoot public globalExitRootManager; // Polygon ZK-EVM address address public poeAddress; @@ -67,7 +67,7 @@ contract PolygonZKEVMBridge is */ function initialize( uint32 _networkID, - IGlobalExitRootManager _globalExitRootManager, + IPolygonZKEVMGlobalExitRoot _globalExitRootManager, address _poeAddress ) public virtual initializer { networkID = _networkID; diff --git a/contracts/GlobalExitRootManager.sol b/contracts/PolygonZKEVMGlobalExitRoot.sol similarity index 91% rename from contracts/GlobalExitRootManager.sol rename to contracts/PolygonZKEVMGlobalExitRoot.sol index ae6e4caf7..f10c7414b 100644 --- a/contracts/GlobalExitRootManager.sol +++ b/contracts/PolygonZKEVMGlobalExitRoot.sol @@ -2,13 +2,13 @@ pragma solidity 0.8.15; -import "./interfaces/IGlobalExitRootManager.sol"; +import "./interfaces/IPolygonZKEVMGlobalExitRoot.sol"; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; /** * Contract responsible for managing the exit roots across multiple networks */ -contract GlobalExitRootManager is IGlobalExitRootManager, Initializable { +contract PolygonZKEVMGlobalExitRoot is IPolygonZKEVMGlobalExitRoot, Initializable { // Rollup exit root, this will be updated every time a batch is verified bytes32 public lastRollupExitRoot; @@ -51,7 +51,7 @@ contract GlobalExitRootManager is IGlobalExitRootManager, Initializable { function updateExitRoot(bytes32 newRoot) external { require( msg.sender == rollupAddress || msg.sender == bridgeAddress, - "GlobalExitRootManager::updateExitRoot: ONLY_ALLOWED_CONTRACTS" + "PolygonZKEVMGlobalExitRoot::updateExitRoot: ONLY_ALLOWED_CONTRACTS" ); if (msg.sender == rollupAddress) { lastRollupExitRoot = newRoot; diff --git a/contracts/GlobalExitRootManagerL2.sol b/contracts/PolygonZKEVMGlobalExitRootL2.sol similarity index 91% rename from contracts/GlobalExitRootManagerL2.sol rename to contracts/PolygonZKEVMGlobalExitRootL2.sol index 04c0154ca..cfde26b10 100644 --- a/contracts/GlobalExitRootManagerL2.sol +++ b/contracts/PolygonZKEVMGlobalExitRootL2.sol @@ -8,7 +8,7 @@ import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; * Contract responsible for managing the exit roots for the L2 and global exit roots * The special circuit variables will be accesed and updated directly by the circuit */ -contract GlobalExitRootManagerL2 { +contract PolygonZKEVMGlobalExitRootL2 { ///////////////////////////// // Special circuit variables //////////////////////////// @@ -40,7 +40,7 @@ contract GlobalExitRootManagerL2 { function updateExitRoot(bytes32 newRoot) external { require( msg.sender == bridgeAddress, - "GlobalExitRootManagerL2::updateExitRoot: ONLY_BRIDGE" + "PolygonZKEVMGlobalExitRootL2::updateExitRoot: ONLY_BRIDGE" ); lastRollupExitRoot = newRoot; } diff --git a/contracts/interfaces/IGlobalExitRootManager.sol b/contracts/interfaces/IPolygonZKEVMGlobalExitRoot.sol similarity index 88% rename from contracts/interfaces/IGlobalExitRootManager.sol rename to contracts/interfaces/IPolygonZKEVMGlobalExitRoot.sol index 939e6e5d7..ff1717598 100644 --- a/contracts/interfaces/IGlobalExitRootManager.sol +++ b/contracts/interfaces/IPolygonZKEVMGlobalExitRoot.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.15; -interface IGlobalExitRootManager { +interface IPolygonZKEVMGlobalExitRoot { function getLastGlobalExitRoot() external view returns (bytes32); function updateExitRoot(bytes32 newRollupExitRoot) external; diff --git a/contracts/mocks/PolygonZKEVMBridgeMock.sol b/contracts/mocks/PolygonZKEVMBridgeMock.sol index 8c8d0f4b0..802ddc41c 100644 --- a/contracts/mocks/PolygonZKEVMBridgeMock.sol +++ b/contracts/mocks/PolygonZKEVMBridgeMock.sol @@ -16,7 +16,7 @@ contract PolygonZKEVMBridgeMock is PolygonZKEVMBridge, OwnableUpgradeable { */ function initialize( uint32 _networkID, - IGlobalExitRootManager _globalExitRootManager, + IPolygonZKEVMGlobalExitRoot _globalExitRootManager, address _poeAddress ) public override initializer { networkID = _networkID; diff --git a/contracts/mocks/GlobalExitRootManagerL2Mock.sol b/contracts/mocks/PolygonZKEVMGlobalExitRootL2Mock.sol similarity index 81% rename from contracts/mocks/GlobalExitRootManagerL2Mock.sol rename to contracts/mocks/PolygonZKEVMGlobalExitRootL2Mock.sol index 878648d9b..80a942930 100644 --- a/contracts/mocks/GlobalExitRootManagerL2Mock.sol +++ b/contracts/mocks/PolygonZKEVMGlobalExitRootL2Mock.sol @@ -1,19 +1,19 @@ // SPDX-License-Identifier: AGPL-3.0 pragma solidity 0.8.15; -import "../GlobalExitRootManagerL2.sol"; +import "../PolygonZKEVMGlobalExitRootL2.sol"; /** * Contract responsible for managing the exit roots across multiple networks */ -contract GlobalExitRootManagerL2Mock is GlobalExitRootManagerL2 { +contract PolygonZKEVMGlobalExitRootL2Mock is PolygonZKEVMGlobalExitRootL2 { /** * @param _bridgeAddress PolygonZKEVM Bridge contract address */ constructor( address _bridgeAddress - ) GlobalExitRootManagerL2(_bridgeAddress) {} + ) PolygonZKEVMGlobalExitRootL2(_bridgeAddress) {} /** * @notice Set globalExitRoot diff --git a/contracts/mocks/GlobalExitRootManagerMock.sol b/contracts/mocks/PolygonZKEVMGlobalExitRootMock.sol similarity index 88% rename from contracts/mocks/GlobalExitRootManagerMock.sol rename to contracts/mocks/PolygonZKEVMGlobalExitRootMock.sol index 1f736b6c2..adf6f5340 100644 --- a/contracts/mocks/GlobalExitRootManagerMock.sol +++ b/contracts/mocks/PolygonZKEVMGlobalExitRootMock.sol @@ -1,13 +1,13 @@ // SPDX-License-Identifier: AGPL-3.0 pragma solidity 0.8.15; -import "../GlobalExitRootManager.sol"; +import "../PolygonZKEVMGlobalExitRoot.sol"; /** * Contract responsible for managing the exit roots across multiple networks */ -contract GlobalExitRootManagerMock is GlobalExitRootManager { +contract PolygonZKEVMGlobalExitRootMock is PolygonZKEVMGlobalExitRoot { /** * @param _rollupAddress Rollup contract address * @param _bridgeAddress PolygonZKEVM Bridge contract address diff --git a/deployment/deployPoE_v2-0.js b/deployment/deployPoE_v2-0.js index 3c0e170ce..25892af47 100644 --- a/deployment/deployPoE_v2-0.js +++ b/deployment/deployPoE_v2-0.js @@ -100,25 +100,25 @@ async function main() { */ // deploy global exit root manager - const globalExitRootManagerFactory = await ethers.getContractFactory('GlobalExitRootManager', deployer); - let globalExitRootManager; + const PolygonZKEVMGlobalExitRootFactory = await ethers.getContractFactory('polygonZKEVMGlobalExitRoot', deployer); + let polygonZKEVMGlobalExitRoot; for (let i = 0; i < attemptsDeployProxy; i++) { try { - globalExitRootManager = await upgrades.deployProxy(globalExitRootManagerFactory, [], { initializer: false }); + polygonZKEVMGlobalExitRoot = await upgrades.deployProxy(PolygonZKEVMGlobalExitRootFactory, [], { initializer: false }); break; } catch (error) { console.log(`attempt ${i}`); - console.log('upgrades.deployProxy of globalExitRootManager ', error.error.reason); + console.log('upgrades.deployProxy of polygonZKEVMGlobalExitRoot ', error.error.reason); } // reach limits of attempts if (i + 1 === attemptsDeployProxy) { - throw new Error('GlobalExitRootManager contract has not been deployed'); + throw new Error('polygonZKEVMGlobalExitRoot contract has not been deployed'); } } console.log('#######################\n'); - console.log('globalExitRootManager deployed to:', globalExitRootManager.address); + console.log('polygonZKEVMGlobalExitRoot deployed to:', polygonZKEVMGlobalExitRoot.address); // deploy PolygonZKEVMBridge let polygonZKEVMBridgeFactory; @@ -169,23 +169,23 @@ async function main() { console.log('Polygon ZK-EVM deployed to:', polygonZKEVMContract.address); /* - * Initialize globalExitRootManager + * Initialize polygonZKEVMGlobalExitRoot */ - await globalExitRootManager.initialize(polygonZKEVMContract.address, polygonZKEVMBridgeContract.address); + await polygonZKEVMGlobalExitRoot.initialize(polygonZKEVMContract.address, polygonZKEVMBridgeContract.address); /* * Initialize PolygonZKEVMBridge */ await (await polygonZKEVMBridgeContract.initialize( networkIDMainnet, - globalExitRootManager.address, + polygonZKEVMGlobalExitRoot.address, polygonZKEVMContract.address, )).wait(); console.log('\n#######################'); console.log('##### Checks PolygonZKEVMBridge #####'); console.log('#######################'); - console.log('globalExitRootManagerAddress:', await polygonZKEVMBridgeContract.globalExitRootManager()); + console.log('PolygonZKEVMGlobalExitRootAddress:', await polygonZKEVMBridgeContract.globalExitRootManager()); console.log('networkID:', await polygonZKEVMBridgeContract.networkID()); console.log('poeAddress:', await polygonZKEVMBridgeContract.poeAddress()); console.log('owner:', await polygonZKEVMBridgeContract.owner()); @@ -200,7 +200,7 @@ async function main() { console.log('##### Deployment Polygon ZK-EVM #####'); console.log('#######################'); console.log('deployer:', deployer.address); - console.log('globalExitRootManagerAddress:', globalExitRootManager.address); + console.log('PolygonZKEVMGlobalExitRootAddress:', polygonZKEVMGlobalExitRoot.address); console.log('maticTokenAddress:', maticTokenContract.address); console.log('verifierAddress:', verifierContract.address); console.log('polygonZKEVMBridgeContract:', polygonZKEVMBridgeContract.address); @@ -218,7 +218,7 @@ async function main() { console.log('networkName:', networkName); await (await polygonZKEVMContract.initialize( - globalExitRootManager.address, + polygonZKEVMGlobalExitRoot.address, maticTokenContract.address, verifierContract.address, polygonZKEVMBridgeContract.address, @@ -241,7 +241,7 @@ async function main() { console.log('\n#######################'); console.log('##### Checks PoE #####'); console.log('#######################'); - console.log('globalExitRootManagerAddress:', await polygonZKEVMContract.globalExitRootManager()); + console.log('PolygonZKEVMGlobalExitRootAddress:', await polygonZKEVMContract.globalExitRootManager()); console.log('maticTokenAddress:', await polygonZKEVMContract.matic()); console.log('verifierAddress:', await polygonZKEVMContract.rollupVerifier()); console.log('polygonZKEVMBridgeContract:', await polygonZKEVMContract.bridgeAddress()); @@ -290,7 +290,7 @@ async function main() { const outputJson = { polygonZKEVMAddress: polygonZKEVMContract.address, PolygonZKEVMBridgeAddress: polygonZKEVMBridgeContract.address, - globalExitRootManagerAddress: globalExitRootManager.address, + PolygonZKEVMGlobalExitRootAddress: polygonZKEVMGlobalExitRoot.address, maticTokenAddress: maticTokenContract.address, verifierAddress: verifierContract.address, deployerAddress: deployer.address, diff --git a/deployment/genesis-gen.json b/deployment/genesis-gen.json index 52e7d8027..d62d7948d 100644 --- a/deployment/genesis-gen.json +++ b/deployment/genesis-gen.json @@ -32,7 +32,7 @@ "0x9D98DeAbC42dd696Deb9e40b4f1CAB7dDBF55988" ] }, - "contractName": "GlobalExitRootManagerL2", + "contractName": "PolygonZKEVMGlobalExitRootL2", "reason": "" }, { diff --git a/deployment/genesis.json b/deployment/genesis.json index 1488f3b7a..f09f2ea12 100644 --- a/deployment/genesis.json +++ b/deployment/genesis.json @@ -28,7 +28,7 @@ "storage": { "0x0000000000000000000000000000000000000000000000000000000000000002": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988" }, - "contractName": "GlobalExitRootManagerL2" + "contractName": "PolygonZKEVMGlobalExitRootL2" } ] } \ No newline at end of file diff --git a/deployment/verifyPoE_v2-0.js b/deployment/verifyPoE_v2-0.js index 00ea7102f..9196fc0b3 100644 --- a/deployment/verifyPoE_v2-0.js +++ b/deployment/verifyPoE_v2-0.js @@ -50,7 +50,7 @@ async function main() { // verify proxies - const contractNames = ['polygonZKEVMAddress', 'PolygonZKEVMBridgeAddress', 'globalExitRootManagerAddress']; + const contractNames = ['polygonZKEVMAddress', 'PolygonZKEVMBridgeAddress', 'PolygonZKEVMGlobalExitRootAddress']; for (let i = 0; i < contractNames.length; i++) { try { diff --git a/docker/scripts/genesis_docker.json b/docker/scripts/genesis_docker.json index 24834fd09..91eb724fa 100644 --- a/docker/scripts/genesis_docker.json +++ b/docker/scripts/genesis_docker.json @@ -34,7 +34,7 @@ "storage": { "0x0000000000000000000000000000000000000000000000000000000000000002": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988" }, - "contractName": "GlobalExitRootManagerL2" + "contractName": "PolygonZKEVMGlobalExitRootL2" } ] } \ No newline at end of file diff --git a/docker/scripts/genesis_gen_docker.json b/docker/scripts/genesis_gen_docker.json index 02ba90780..9d3d258bd 100644 --- a/docker/scripts/genesis_gen_docker.json +++ b/docker/scripts/genesis_gen_docker.json @@ -38,7 +38,7 @@ "0x9D98DeAbC42dd696Deb9e40b4f1CAB7dDBF55988" ] }, - "contractName": "GlobalExitRootManagerL2", + "contractName": "PolygonZKEVMGlobalExitRootL2", "reason": "" }, { diff --git a/docs/PolygonZKEVM.md b/docs/PolygonZKEVM.md index dc891e439..e6c66892b 100644 --- a/docs/PolygonZKEVM.md +++ b/docs/PolygonZKEVM.md @@ -10,7 +10,7 @@ To enter and exit of the L2 network will be used a PolygonZKEVMBridge smart cont ### initialize ```solidity function initialize( - contract IGlobalExitRootManager _globalExitRootManager, + contract IPolygonZKEVMGlobalExitRoot _globalExitRootManager, contract IERC20Upgradeable _matic, contract IVerifierRollup _rollupVerifier, contract IPolygonZKEVMBridge _bridgeAddress, @@ -25,7 +25,7 @@ To enter and exit of the L2 network will be used a PolygonZKEVMBridge smart cont #### Parameters: | Name | Type | Description | | :--- | :--- | :------------------------------------------------------------------- | -|`_globalExitRootManager` | contract IGlobalExitRootManager | Global exit root manager address +|`_globalExitRootManager` | contract IPolygonZKEVMGlobalExitRoot | Global exit root manager address |`_matic` | contract IERC20Upgradeable | MATIC token address |`_rollupVerifier` | contract IVerifierRollup | Rollup verifier address |`_bridgeAddress` | contract IPolygonZKEVMBridge | Bridge address diff --git a/docs/PolygonZKEVMBridge.md b/docs/PolygonZKEVMBridge.md index ff71b7417..e9bef06e3 100644 --- a/docs/PolygonZKEVMBridge.md +++ b/docs/PolygonZKEVMBridge.md @@ -7,7 +7,7 @@ Contract responsible to manage the token interactions with other networks ```solidity function initialize( uint32 _networkID, - contract IGlobalExitRootManager _globalExitRootManager + contract IPolygonZKEVMGlobalExitRoot _globalExitRootManager ) public ``` @@ -16,7 +16,7 @@ Contract responsible to manage the token interactions with other networks | Name | Type | Description | | :--- | :--- | :------------------------------------------------------------------- | |`_networkID` | uint32 | networkID -|`_globalExitRootManager` | contract IGlobalExitRootManager | global exit root manager address +|`_globalExitRootManager` | contract IPolygonZKEVMGlobalExitRoot | global exit root manager address ### bridgeAsset ```solidity diff --git a/docs/GlobalExitRootManager.md b/docs/PolygonZKEVMGlobalExitRoot.md similarity index 100% rename from docs/GlobalExitRootManager.md rename to docs/PolygonZKEVMGlobalExitRoot.md diff --git a/docs/GlobalExitRootManagerL2.md b/docs/PolygonZKEVMGlobalExitRootL2.md similarity index 100% rename from docs/GlobalExitRootManagerL2.md rename to docs/PolygonZKEVMGlobalExitRootL2.md diff --git a/index.js b/index.js index 76fa957d3..362901cc9 100644 --- a/index.js +++ b/index.js @@ -1,13 +1,13 @@ module.exports.PolygonZKEVMBridge = require('./compiled-contracts/PolygonZKEVMBridge.json'); -module.exports.GlobalExitRootManager = require('./compiled-contracts/GlobalExitRootManager.json'); -module.exports.GlobalExitRootManagerL2 = require('./compiled-contracts/GlobalExitRootManagerL2.json'); +module.exports.PolygonZKEVMGlobalExitRoot = require('./compiled-contracts/PolygonZKEVMGlobalExitRoot.json'); +module.exports.PolygonZKEVMGlobalExitRootL2 = require('./compiled-contracts/PolygonZKEVMGlobalExitRootL2.json'); module.exports.PolygonZKEVM = require('./compiled-contracts/PolygonZKEVM.json'); module.exports.TokenWrapped = require('./compiled-contracts/TokenWrapped.json'); module.exports.Verifier = require('./compiled-contracts/Verifier.json'); module.exports.PolygonZKEVMBridgeMock = require('./compiled-contracts/PolygonZKEVMBridgeMock.json'); module.exports.ERC20PermitMock = require('./compiled-contracts/ERC20PermitMock.json'); -module.exports.GlobalExitRootManagerL2Mock = require('./compiled-contracts/GlobalExitRootManagerL2Mock.json'); -module.exports.GlobalExitRootManagerMock = require('./compiled-contracts/GlobalExitRootManagerMock.json'); +module.exports.PolygonZKEVMGlobalExitRootL2Mock = require('./compiled-contracts/PolygonZKEVMGlobalExitRootL2Mock.json'); +module.exports.PolygonZKEVMGlobalExitRootMock = require('./compiled-contracts/PolygonZKEVMGlobalExitRootMock.json'); module.exports.PolygonZKEVMMock = require('./compiled-contracts/PolygonZKEVMMock.json'); module.exports.VerifierRollupHelperMock = require('./compiled-contracts/VerifierRollupHelperMock.json'); module.exports.PermitHelper = require('./src/permit-helper'); diff --git a/test/contracts/bridge.test.js b/test/contracts/bridge.test.js index ba1d9abe1..a7c06103d 100644 --- a/test/contracts/bridge.test.js +++ b/test/contracts/bridge.test.js @@ -15,7 +15,7 @@ describe('PolygonZKEVMBridge Contract', () => { let rollup; let acc1; - let globalExitRootManager; + let polygonZKEVMGlobalExitRoot; let polygonZKEVMBridgeContract; let tokenContract; @@ -41,16 +41,16 @@ describe('PolygonZKEVMBridge Contract', () => { [deployer, rollup, acc1] = await ethers.getSigners(); // deploy global exit root manager - const globalExitRootManagerFactory = await ethers.getContractFactory('GlobalExitRootManager'); - globalExitRootManager = await upgrades.deployProxy(globalExitRootManagerFactory, [], { initializer: false }); + const PolygonZKEVMGlobalExitRootFactory = await ethers.getContractFactory('PolygonZKEVMGlobalExitRoot'); + polygonZKEVMGlobalExitRoot = await upgrades.deployProxy(PolygonZKEVMGlobalExitRootFactory, [], { initializer: false }); // deploy PolygonZKEVMBridge const polygonZKEVMBridgeFactory = await ethers.getContractFactory('PolygonZKEVMBridge'); polygonZKEVMBridgeContract = await upgrades.deployProxy(polygonZKEVMBridgeFactory, [], { initializer: false }); - await globalExitRootManager.initialize(rollup.address, polygonZKEVMBridgeContract.address); + await polygonZKEVMGlobalExitRoot.initialize(rollup.address, polygonZKEVMBridgeContract.address); - await polygonZKEVMBridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, polygonZKEVMAddress); + await polygonZKEVMBridgeContract.initialize(networkIDMainnet, polygonZKEVMGlobalExitRoot.address, polygonZKEVMAddress); // deploy token const maticTokenFactory = await ethers.getContractFactory('ERC20PermitMock'); @@ -64,7 +64,7 @@ describe('PolygonZKEVMBridge Contract', () => { }); it('should check the constructor parameters', async () => { - expect(await polygonZKEVMBridgeContract.globalExitRootManager()).to.be.equal(globalExitRootManager.address); + expect(await polygonZKEVMBridgeContract.globalExitRootManager()).to.be.equal(polygonZKEVMGlobalExitRoot.address); expect(await polygonZKEVMBridgeContract.networkID()).to.be.equal(networkIDMainnet); expect(await polygonZKEVMBridgeContract.poeAddress()).to.be.equal(polygonZKEVMAddress); }); @@ -83,7 +83,7 @@ describe('PolygonZKEVMBridge Contract', () => { const balanceDeployer = await tokenContract.balanceOf(deployer.address); const balanceBridge = await tokenContract.balanceOf(polygonZKEVMBridgeContract.address); - const rollupExitRoot = await globalExitRootManager.lastRollupExitRoot(); + const rollupExitRoot = await polygonZKEVMGlobalExitRoot.lastRollupExitRoot(); // create a new deposit await expect(tokenContract.approve(polygonZKEVMBridgeContract.address, amount)) @@ -108,7 +108,7 @@ describe('PolygonZKEVMBridge Contract', () => { await expect(polygonZKEVMBridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x')) .to.emit(polygonZKEVMBridgeContract, 'BridgeEvent') .withArgs(LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount) - .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') + .to.emit(polygonZKEVMGlobalExitRoot, 'UpdateGlobalExitRoot') .withArgs(rootJSMainnet, rollupExitRoot); expect(await tokenContract.balanceOf(deployer.address)).to.be.equal(balanceDeployer.sub(amount)); @@ -132,7 +132,7 @@ describe('PolygonZKEVMBridge Contract', () => { )).to.be.equal(true); const computedGlobalExitRoot = calculateGlobalExitRoot(rootJSMainnet, rollupExitRoot); - expect(computedGlobalExitRoot).to.be.equal(await globalExitRootManager.getLastGlobalExitRoot()); + expect(computedGlobalExitRoot).to.be.equal(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()); }); it('should PolygonZKEVMBridge message and verify merkle proof', async () => { @@ -145,7 +145,7 @@ describe('PolygonZKEVMBridge Contract', () => { const metadata = metadataToken; const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); - const rollupExitRoot = await globalExitRootManager.lastRollupExitRoot(); + const rollupExitRoot = await polygonZKEVMGlobalExitRoot.lastRollupExitRoot(); // pre compute root merkle tree in Js const height = 32; @@ -193,7 +193,7 @@ describe('PolygonZKEVMBridge Contract', () => { )).to.be.equal(true); const computedGlobalExitRoot = calculateGlobalExitRoot(rootJSMainnet, rollupExitRoot); - expect(computedGlobalExitRoot).to.be.equal(await globalExitRootManager.getLastGlobalExitRoot()); + expect(computedGlobalExitRoot).to.be.equal(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()); }); it('should claim tokens from Mainnet to Mainnet', async () => { @@ -206,7 +206,7 @@ describe('PolygonZKEVMBridge Contract', () => { const metadata = metadataToken; const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); - const mainnetExitRoot = await globalExitRootManager.lastMainnetExitRoot(); + const mainnetExitRoot = await polygonZKEVMGlobalExitRoot.lastMainnetExitRoot(); // compute root merkle tree in Js const height = 32; @@ -226,20 +226,20 @@ describe('PolygonZKEVMBridge Contract', () => { const rootJSRollup = merkleTree.getRoot(); // check only rollup account with update rollup exit root - await expect(globalExitRootManager.updateExitRoot(rootJSRollup)) - .to.be.revertedWith('GlobalExitRootManager::updateExitRoot: ONLY_ALLOWED_CONTRACTS'); + await expect(polygonZKEVMGlobalExitRoot.updateExitRoot(rootJSRollup)) + .to.be.revertedWith('PolygonZKEVMGlobalExitRoot::updateExitRoot: ONLY_ALLOWED_CONTRACTS'); // add rollup Merkle root - await expect(globalExitRootManager.connect(rollup).updateExitRoot(rootJSRollup)) - .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') + await expect(polygonZKEVMGlobalExitRoot.connect(rollup).updateExitRoot(rootJSRollup)) + .to.emit(polygonZKEVMGlobalExitRoot, 'UpdateGlobalExitRoot') .withArgs(mainnetExitRoot, rootJSRollup); // check roots - const rollupExitRootSC = await globalExitRootManager.lastRollupExitRoot(); + const rollupExitRootSC = await polygonZKEVMGlobalExitRoot.lastRollupExitRoot(); expect(rollupExitRootSC).to.be.equal(rootJSRollup); const computedGlobalExitRoot = calculateGlobalExitRoot(mainnetExitRoot, rollupExitRootSC); - expect(computedGlobalExitRoot).to.be.equal(await globalExitRootManager.getLastGlobalExitRoot()); + expect(computedGlobalExitRoot).to.be.equal(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()); // check merkle proof const proof = merkleTree.getProofTreeByIndex(0); @@ -326,7 +326,7 @@ describe('PolygonZKEVMBridge Contract', () => { const metadata = metadataToken; // since we are inserting in the exit root can be anything const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); - const mainnetExitRoot = await globalExitRootManager.lastMainnetExitRoot(); + const mainnetExitRoot = await polygonZKEVMGlobalExitRoot.lastMainnetExitRoot(); // compute root merkle tree in Js const height = 32; @@ -346,20 +346,20 @@ describe('PolygonZKEVMBridge Contract', () => { const rootJSRollup = merkleTreeRollup.getRoot(); // check only rollup account with update rollup exit root - await expect(globalExitRootManager.updateExitRoot(rootJSRollup)) - .to.be.revertedWith('GlobalExitRootManager::updateExitRoot: ONLY_ALLOWED_CONTRACTS'); + await expect(polygonZKEVMGlobalExitRoot.updateExitRoot(rootJSRollup)) + .to.be.revertedWith('PolygonZKEVMGlobalExitRoot::updateExitRoot: ONLY_ALLOWED_CONTRACTS'); // add rollup Merkle root - await expect(globalExitRootManager.connect(rollup).updateExitRoot(rootJSRollup)) - .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') + await expect(polygonZKEVMGlobalExitRoot.connect(rollup).updateExitRoot(rootJSRollup)) + .to.emit(polygonZKEVMGlobalExitRoot, 'UpdateGlobalExitRoot') .withArgs(mainnetExitRoot, rootJSRollup); // check roots - const rollupExitRootSC = await globalExitRootManager.lastRollupExitRoot(); + const rollupExitRootSC = await polygonZKEVMGlobalExitRoot.lastRollupExitRoot(); expect(rollupExitRootSC).to.be.equal(rootJSRollup); const computedGlobalExitRoot = calculateGlobalExitRoot(mainnetExitRoot, rollupExitRootSC); - expect(computedGlobalExitRoot).to.be.equal(await globalExitRootManager.getLastGlobalExitRoot()); + expect(computedGlobalExitRoot).to.be.equal(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()); // check merkle proof const proof = merkleTreeRollup.getProofTreeByIndex(0); @@ -462,7 +462,7 @@ describe('PolygonZKEVMBridge Contract', () => { const wrappedTokenAddress = newWrappedToken.address; const newDestinationNetwork = networkIDRollup; - const rollupExitRoot = await globalExitRootManager.lastRollupExitRoot(); + const rollupExitRoot = await polygonZKEVMGlobalExitRoot.lastRollupExitRoot(); // create a new deposit await expect(newWrappedToken.approve(polygonZKEVMBridgeContract.address, amount)) @@ -515,7 +515,7 @@ describe('PolygonZKEVMBridge Contract', () => { metadataMainnet, depositCount, ) - .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') + .to.emit(polygonZKEVMGlobalExitRoot, 'UpdateGlobalExitRoot') .withArgs(rootJSMainnet, rollupExitRoot) .to.emit(newWrappedToken, 'Transfer') .withArgs(deployer.address, ethers.constants.AddressZero, amount); @@ -542,7 +542,7 @@ describe('PolygonZKEVMBridge Contract', () => { )).to.be.equal(true); const computedGlobalExitRoot2 = calculateGlobalExitRoot(rootJSMainnet, rollupExitRoot); - expect(computedGlobalExitRoot2).to.be.equal(await globalExitRootManager.getLastGlobalExitRoot()); + expect(computedGlobalExitRoot2).to.be.equal(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()); }); it('should PolygonZKEVMBridge and sync the current root with events', async () => { @@ -670,7 +670,7 @@ describe('PolygonZKEVMBridge Contract', () => { const metadata = metadataToken; const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); - const mainnetExitRoot = await globalExitRootManager.lastMainnetExitRoot(); + const mainnetExitRoot = await polygonZKEVMGlobalExitRoot.lastMainnetExitRoot(); // compute root merkle tree in Js const height = 32; @@ -690,16 +690,16 @@ describe('PolygonZKEVMBridge Contract', () => { const rootJSRollup = merkleTree.getRoot(); // add rollup Merkle root - await expect(globalExitRootManager.connect(rollup).updateExitRoot(rootJSRollup)) - .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') + await expect(polygonZKEVMGlobalExitRoot.connect(rollup).updateExitRoot(rootJSRollup)) + .to.emit(polygonZKEVMGlobalExitRoot, 'UpdateGlobalExitRoot') .withArgs(mainnetExitRoot, rootJSRollup); // check roots - const rollupExitRootSC = await globalExitRootManager.lastRollupExitRoot(); + const rollupExitRootSC = await polygonZKEVMGlobalExitRoot.lastRollupExitRoot(); expect(rollupExitRootSC).to.be.equal(rootJSRollup); const computedGlobalExitRoot = calculateGlobalExitRoot(mainnetExitRoot, rollupExitRootSC); - expect(computedGlobalExitRoot).to.be.equal(await globalExitRootManager.getLastGlobalExitRoot()); + expect(computedGlobalExitRoot).to.be.equal(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()); // check merkle proof const proof = merkleTree.getProofTreeByIndex(0); @@ -823,7 +823,7 @@ describe('PolygonZKEVMBridge Contract', () => { const metadata = '0x'; // since is ether does not have metadata const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); - const mainnetExitRoot = await globalExitRootManager.lastMainnetExitRoot(); + const mainnetExitRoot = await polygonZKEVMGlobalExitRoot.lastMainnetExitRoot(); // compute root merkle tree in Js const height = 32; @@ -843,16 +843,16 @@ describe('PolygonZKEVMBridge Contract', () => { const rootJSRollup = merkleTree.getRoot(); // add rollup Merkle root - await expect(globalExitRootManager.connect(rollup).updateExitRoot(rootJSRollup)) - .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') + await expect(polygonZKEVMGlobalExitRoot.connect(rollup).updateExitRoot(rootJSRollup)) + .to.emit(polygonZKEVMGlobalExitRoot, 'UpdateGlobalExitRoot') .withArgs(mainnetExitRoot, rootJSRollup); // check roots - const rollupExitRootSC = await globalExitRootManager.lastRollupExitRoot(); + const rollupExitRootSC = await polygonZKEVMGlobalExitRoot.lastRollupExitRoot(); expect(rollupExitRootSC).to.be.equal(rootJSRollup); const computedGlobalExitRoot = calculateGlobalExitRoot(mainnetExitRoot, rollupExitRootSC); - expect(computedGlobalExitRoot).to.be.equal(await globalExitRootManager.getLastGlobalExitRoot()); + expect(computedGlobalExitRoot).to.be.equal(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()); // check merkle proof const proof = merkleTree.getProofTreeByIndex(0); @@ -973,7 +973,7 @@ describe('PolygonZKEVMBridge Contract', () => { const metadata = '0x'; // since is ether does not have metadata const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); - const mainnetExitRoot = await globalExitRootManager.lastMainnetExitRoot(); + const mainnetExitRoot = await polygonZKEVMGlobalExitRoot.lastMainnetExitRoot(); // compute root merkle tree in Js const height = 32; @@ -993,16 +993,16 @@ describe('PolygonZKEVMBridge Contract', () => { const rootJSRollup = merkleTree.getRoot(); // add rollup Merkle root - await expect(globalExitRootManager.connect(rollup).updateExitRoot(rootJSRollup)) - .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') + await expect(polygonZKEVMGlobalExitRoot.connect(rollup).updateExitRoot(rootJSRollup)) + .to.emit(polygonZKEVMGlobalExitRoot, 'UpdateGlobalExitRoot') .withArgs(mainnetExitRoot, rootJSRollup); // check roots - const rollupExitRootSC = await globalExitRootManager.lastRollupExitRoot(); + const rollupExitRootSC = await polygonZKEVMGlobalExitRoot.lastRollupExitRoot(); expect(rollupExitRootSC).to.be.equal(rootJSRollup); const computedGlobalExitRoot = calculateGlobalExitRoot(mainnetExitRoot, rollupExitRootSC); - expect(computedGlobalExitRoot).to.be.equal(await globalExitRootManager.getLastGlobalExitRoot()); + expect(computedGlobalExitRoot).to.be.equal(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()); // check merkle proof const proof = merkleTree.getProofTreeByIndex(0); diff --git a/test/contracts/bridgeMock.test.js b/test/contracts/bridgeMock.test.js index 717143a28..e5fc0ed17 100644 --- a/test/contracts/bridgeMock.test.js +++ b/test/contracts/bridgeMock.test.js @@ -14,7 +14,7 @@ describe('PolygonZKEVMBridge Mock Contract', () => { let deployer; let rollup; - let globalExitRootManager; + let polygonZKEVMGlobalExitRoot; let polygonZKEVMBridgeContract; let tokenContract; @@ -38,15 +38,15 @@ describe('PolygonZKEVMBridge Mock Contract', () => { [deployer, rollup] = await ethers.getSigners(); // deploy global exit root manager - const globalExitRootManagerFactory = await ethers.getContractFactory('GlobalExitRootManager'); - globalExitRootManager = await upgrades.deployProxy(globalExitRootManagerFactory, [], { initializer: false }); + const PolygonZKEVMGlobalExitRootFactory = await ethers.getContractFactory('PolygonZKEVMGlobalExitRoot'); + polygonZKEVMGlobalExitRoot = await upgrades.deployProxy(PolygonZKEVMGlobalExitRootFactory, [], { initializer: false }); // deploy PolygonZKEVMBridge const polygonZKEVMBridgeFactory = await ethers.getContractFactory('PolygonZKEVMBridgeMock'); polygonZKEVMBridgeContract = await upgrades.deployProxy(polygonZKEVMBridgeFactory, [], { initializer: false }); - await globalExitRootManager.initialize(rollup.address, polygonZKEVMBridgeContract.address); - await polygonZKEVMBridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, polygonZKEVMAddress); + await polygonZKEVMGlobalExitRoot.initialize(rollup.address, polygonZKEVMBridgeContract.address); + await polygonZKEVMBridgeContract.initialize(networkIDMainnet, polygonZKEVMGlobalExitRoot.address, polygonZKEVMAddress); // deploy token const maticTokenFactory = await ethers.getContractFactory('ERC20PermitMock'); @@ -60,7 +60,7 @@ describe('PolygonZKEVMBridge Mock Contract', () => { }); it('should check the constructor parameters', async () => { - expect(await polygonZKEVMBridgeContract.globalExitRootManager()).to.be.equal(globalExitRootManager.address); + expect(await polygonZKEVMBridgeContract.globalExitRootManager()).to.be.equal(polygonZKEVMGlobalExitRoot.address); expect(await polygonZKEVMBridgeContract.networkID()).to.be.equal(networkIDMainnet); }); @@ -78,7 +78,7 @@ describe('PolygonZKEVMBridge Mock Contract', () => { const balanceDeployer = await tokenContract.balanceOf(deployer.address); const balanceBridge = await tokenContract.balanceOf(polygonZKEVMBridgeContract.address); - const rollupExitRoot = await globalExitRootManager.lastRollupExitRoot(); + const rollupExitRoot = await polygonZKEVMGlobalExitRoot.lastRollupExitRoot(); // create a new deposit await expect(tokenContract.approve(polygonZKEVMBridgeContract.address, amount)) @@ -103,7 +103,7 @@ describe('PolygonZKEVMBridge Mock Contract', () => { await expect(polygonZKEVMBridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x')) .to.emit(polygonZKEVMBridgeContract, 'BridgeEvent') .withArgs(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount) - .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') + .to.emit(polygonZKEVMGlobalExitRoot, 'UpdateGlobalExitRoot') .withArgs(rootJSMainnet, rollupExitRoot); expect(await tokenContract.balanceOf(deployer.address)).to.be.equal(balanceDeployer.sub(amount)); @@ -127,7 +127,7 @@ describe('PolygonZKEVMBridge Mock Contract', () => { )).to.be.equal(true); const computedGlobalExitRoot = calculateGlobalExitRoot(rootJSMainnet, rollupExitRoot); - expect(computedGlobalExitRoot).to.be.equal(await globalExitRootManager.getLastGlobalExitRoot()); + expect(computedGlobalExitRoot).to.be.equal(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()); }); it('shouldnt be able to PolygonZKEVMBridge more thna 0.25e ehters', async () => { diff --git a/test/contracts/bridge_permit.test.js b/test/contracts/bridge_permit.test.js index 0f0df7c15..19f08b5e9 100644 --- a/test/contracts/bridge_permit.test.js +++ b/test/contracts/bridge_permit.test.js @@ -22,7 +22,7 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { let deployer; let rollup; - let globalExitRootManager; + let polygonZKEVMGlobalExitRoot; let polygonZKEVMBridgeContract; let tokenContract; @@ -46,15 +46,15 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { [deployer, rollup] = await ethers.getSigners(); // deploy global exit root manager - const globalExitRootManagerFactory = await ethers.getContractFactory('GlobalExitRootManager'); - globalExitRootManager = await upgrades.deployProxy(globalExitRootManagerFactory, [], { initializer: false }); + const polygonZKEVMGlobalExitRootFactory = await ethers.getContractFactory('PolygonZKEVMGlobalExitRoot'); + polygonZKEVMGlobalExitRoot = await upgrades.deployProxy(polygonZKEVMGlobalExitRootFactory, [], { initializer: false }); // deploy PolygonZKEVMBridge const polygonZKEVMBridgeFactory = await ethers.getContractFactory('PolygonZKEVMBridge'); polygonZKEVMBridgeContract = await upgrades.deployProxy(polygonZKEVMBridgeFactory, [], { initializer: false }); - await globalExitRootManager.initialize(rollup.address, polygonZKEVMBridgeContract.address); - await polygonZKEVMBridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, polygonZKEVMAddress); + await polygonZKEVMGlobalExitRoot.initialize(rollup.address, polygonZKEVMBridgeContract.address); + await polygonZKEVMBridgeContract.initialize(networkIDMainnet, polygonZKEVMGlobalExitRoot.address, polygonZKEVMAddress); // deploy token const maticTokenFactory = await ethers.getContractFactory('TokenWrapped'); @@ -82,7 +82,7 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { const balanceDeployer = await tokenContract.balanceOf(deployer.address); const balanceBridge = await tokenContract.balanceOf(polygonZKEVMBridgeContract.address); - const rollupExitRoot = await globalExitRootManager.lastRollupExitRoot(); + const rollupExitRoot = await polygonZKEVMGlobalExitRoot.lastRollupExitRoot(); // pre compute root merkle tree in Js const height = 32; @@ -130,7 +130,7 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { await expect(polygonZKEVMBridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, dataPermit)) .to.emit(polygonZKEVMBridgeContract, 'BridgeEvent') .withArgs(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount) - .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') + .to.emit(polygonZKEVMGlobalExitRoot, 'UpdateGlobalExitRoot') .withArgs(rootJSMainnet, rollupExitRoot); expect(await tokenContract.balanceOf(deployer.address)).to.be.equal(balanceDeployer.sub(amount)); @@ -154,7 +154,7 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { )).to.be.equal(true); const computedGlobalExitRoot = calculateGlobalExitRoot(rootJSMainnet, rollupExitRoot); - expect(computedGlobalExitRoot).to.be.equal(await globalExitRootManager.getLastGlobalExitRoot()); + expect(computedGlobalExitRoot).to.be.equal(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()); }); it('should PolygonZKEVMBridge with permit DAI type contracts', async () => { @@ -182,7 +182,7 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { const balanceDeployer = await daiContract.balanceOf(deployer.address); const balanceBridge = await daiContract.balanceOf(polygonZKEVMBridgeContract.address); - const rollupExitRoot = await globalExitRootManager.lastRollupExitRoot(); + const rollupExitRoot = await polygonZKEVMGlobalExitRoot.lastRollupExitRoot(); // pre compute root merkle tree in Js const height = 32; @@ -228,7 +228,7 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { await expect(polygonZKEVMBridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, dataPermit)) .to.emit(polygonZKEVMBridgeContract, 'BridgeEvent') .withArgs(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount) - .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') + .to.emit(polygonZKEVMGlobalExitRoot, 'UpdateGlobalExitRoot') .withArgs(rootJSMainnet, rollupExitRoot); expect(await daiContract.balanceOf(deployer.address)).to.be.equal(balanceDeployer.sub(amount)); @@ -252,7 +252,7 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { )).to.be.equal(true); const computedGlobalExitRoot = calculateGlobalExitRoot(rootJSMainnet, rollupExitRoot); - expect(computedGlobalExitRoot).to.be.equal(await globalExitRootManager.getLastGlobalExitRoot()); + expect(computedGlobalExitRoot).to.be.equal(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()); }); it('should PolygonZKEVMBridge with permit UNI type contracts', async () => { @@ -281,7 +281,7 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { const balanceDeployer = await uniContract.balanceOf(deployer.address); const balanceBridge = await uniContract.balanceOf(polygonZKEVMBridgeContract.address); - const rollupExitRoot = await globalExitRootManager.lastRollupExitRoot(); + const rollupExitRoot = await polygonZKEVMGlobalExitRoot.lastRollupExitRoot(); // pre compute root merkle tree in Js const height = 32; @@ -328,7 +328,7 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { await expect(polygonZKEVMBridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, dataPermit)) .to.emit(polygonZKEVMBridgeContract, 'BridgeEvent') .withArgs(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount) - .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') + .to.emit(polygonZKEVMGlobalExitRoot, 'UpdateGlobalExitRoot') .withArgs(rootJSMainnet, rollupExitRoot); expect(await uniContract.balanceOf(deployer.address)).to.be.equal(balanceDeployer.sub(amount)); @@ -352,6 +352,6 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { )).to.be.equal(true); const computedGlobalExitRoot = calculateGlobalExitRoot(rootJSMainnet, rollupExitRoot); - expect(computedGlobalExitRoot).to.be.equal(await globalExitRootManager.getLastGlobalExitRoot()); + expect(computedGlobalExitRoot).to.be.equal(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()); }); }); diff --git a/test/contracts/emergencyManager.test.js b/test/contracts/emergencyManager.test.js index b82c6bbe2..0f5bcd333 100644 --- a/test/contracts/emergencyManager.test.js +++ b/test/contracts/emergencyManager.test.js @@ -11,7 +11,7 @@ describe('Emergency mode test', () => { let polygonZKEVMBridgeContract; let polygonZKEVMContract; let maticTokenContract; - let globalExitRootManager; + let polygonZKEVMGlobalExitRoot; const maticTokenName = 'Matic Token'; const maticTokenSymbol = 'MATIC'; @@ -48,8 +48,8 @@ describe('Emergency mode test', () => { await maticTokenContract.deployed(); // deploy global exit root manager - const globalExitRootManagerFactory = await ethers.getContractFactory('GlobalExitRootManager'); - globalExitRootManager = await upgrades.deployProxy(globalExitRootManagerFactory, [], { initializer: false }); + const PolygonZKEVMGlobalExitRootFactory = await ethers.getContractFactory('PolygonZKEVMGlobalExitRoot'); + polygonZKEVMGlobalExitRoot = await upgrades.deployProxy(PolygonZKEVMGlobalExitRootFactory, [], { initializer: false }); // deploy PolygonZKEVMBridge const polygonZKEVMBridgeFactory = await ethers.getContractFactory('PolygonZKEVMBridge'); @@ -59,10 +59,10 @@ describe('Emergency mode test', () => { const PolygonZKEVMFactory = await ethers.getContractFactory('PolygonZKEVMMock'); polygonZKEVMContract = await upgrades.deployProxy(PolygonZKEVMFactory, [], { initializer: false }); - await globalExitRootManager.initialize(polygonZKEVMContract.address, polygonZKEVMBridgeContract.address); - await polygonZKEVMBridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, polygonZKEVMContract.address); + await polygonZKEVMGlobalExitRoot.initialize(polygonZKEVMContract.address, polygonZKEVMBridgeContract.address); + await polygonZKEVMBridgeContract.initialize(networkIDMainnet, polygonZKEVMGlobalExitRoot.address, polygonZKEVMContract.address); await polygonZKEVMContract.initialize( - globalExitRootManager.address, + polygonZKEVMGlobalExitRoot.address, maticTokenContract.address, verifierContract.address, polygonZKEVMBridgeContract.address, diff --git a/test/contracts/globalExitRootManager.test.js b/test/contracts/globalExitRootManager.test.js index b28966693..86b0daefa 100644 --- a/test/contracts/globalExitRootManager.test.js +++ b/test/contracts/globalExitRootManager.test.js @@ -10,46 +10,50 @@ describe('Global Exit Root', () => { let rollup; let PolygonZKEVMBridge; - let globalExitRootManager; + let polygonZKEVMGlobalExitRoot; beforeEach('Deploy contracts', async () => { // load signers [, rollup, PolygonZKEVMBridge] = await ethers.getSigners(); // deploy global exit root manager - const globalExitRootManagerFactory = await ethers.getContractFactory('GlobalExitRootManager'); - globalExitRootManager = await upgrades.deployProxy(globalExitRootManagerFactory, [rollup.address, PolygonZKEVMBridge.address]); - await globalExitRootManager.deployed(); + const PolygonZKEVMGlobalExitRootFactory = await ethers.getContractFactory('PolygonZKEVMGlobalExitRoot'); + polygonZKEVMGlobalExitRoot = await upgrades.deployProxy( + PolygonZKEVMGlobalExitRootFactory, + [rollup.address, + PolygonZKEVMBridge.address], + ); + await polygonZKEVMGlobalExitRoot.deployed(); }); it('should check the constructor parameters', async () => { - expect(await globalExitRootManager.rollupAddress()).to.be.equal(rollup.address); - expect(await globalExitRootManager.bridgeAddress()).to.be.equal(PolygonZKEVMBridge.address); - expect(await globalExitRootManager.lastRollupExitRoot()).to.be.equal(zero32bytes); - expect(await globalExitRootManager.lastMainnetExitRoot()).to.be.equal(zero32bytes); + expect(await polygonZKEVMGlobalExitRoot.rollupAddress()).to.be.equal(rollup.address); + expect(await polygonZKEVMGlobalExitRoot.bridgeAddress()).to.be.equal(PolygonZKEVMBridge.address); + expect(await polygonZKEVMGlobalExitRoot.lastRollupExitRoot()).to.be.equal(zero32bytes); + expect(await polygonZKEVMGlobalExitRoot.lastMainnetExitRoot()).to.be.equal(zero32bytes); }); it('should update root and check global exit root', async () => { const newRootRollup = ethers.utils.hexlify(ethers.utils.randomBytes(32)); - await expect(globalExitRootManager.updateExitRoot(newRootRollup)) - .to.be.revertedWith('GlobalExitRootManager::updateExitRoot: ONLY_ALLOWED_CONTRACTS'); + await expect(polygonZKEVMGlobalExitRoot.updateExitRoot(newRootRollup)) + .to.be.revertedWith('PolygonZKEVMGlobalExitRoot::updateExitRoot: ONLY_ALLOWED_CONTRACTS'); // Update root from the rollup - await expect(globalExitRootManager.connect(rollup).updateExitRoot(newRootRollup)) - .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') + await expect(polygonZKEVMGlobalExitRoot.connect(rollup).updateExitRoot(newRootRollup)) + .to.emit(polygonZKEVMGlobalExitRoot, 'UpdateGlobalExitRoot') .withArgs(zero32bytes, newRootRollup); - expect(await globalExitRootManager.getLastGlobalExitRoot()) + expect(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()) .to.be.equal(calculateGlobalExitRoot(zero32bytes, newRootRollup)); // Update root from the PolygonZKEVMBridge const newRootBridge = ethers.utils.hexlify(ethers.utils.randomBytes(32)); - await expect(globalExitRootManager.connect(PolygonZKEVMBridge).updateExitRoot(newRootBridge)) - .to.emit(globalExitRootManager, 'UpdateGlobalExitRoot') + await expect(polygonZKEVMGlobalExitRoot.connect(PolygonZKEVMBridge).updateExitRoot(newRootBridge)) + .to.emit(polygonZKEVMGlobalExitRoot, 'UpdateGlobalExitRoot') .withArgs(newRootBridge, newRootRollup); - expect(await globalExitRootManager.lastMainnetExitRoot()).to.be.equal(newRootBridge); - expect(await globalExitRootManager.getLastGlobalExitRoot()) + expect(await polygonZKEVMGlobalExitRoot.lastMainnetExitRoot()).to.be.equal(newRootBridge); + expect(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()) .to.be.equal(calculateGlobalExitRoot(newRootBridge, newRootRollup)); }); }); diff --git a/test/contracts/globalExitRootManagerL2.test.js b/test/contracts/globalExitRootManagerL2.test.js index 537551f5a..9d28ac379 100644 --- a/test/contracts/globalExitRootManagerL2.test.js +++ b/test/contracts/globalExitRootManagerL2.test.js @@ -5,7 +5,7 @@ const zero32bytes = '0x000000000000000000000000000000000000000000000000000000000 describe('Global Exit Root L2', () => { let PolygonZKEVMBridge; - let globalExitRootManager; + let polygonZKEVMGlobalExitRoot; const PolygonZKEVMAddress = ethers.constants.AddressZero; beforeEach('Deploy contracts', async () => { @@ -18,36 +18,36 @@ describe('Global Exit Root L2', () => { const polygonZKEVMBridgeFactory = await ethers.getContractFactory('PolygonZKEVMBridge'); PolygonZKEVMBridge = await upgrades.deployProxy(polygonZKEVMBridgeFactory, [], { initializer: false }); // deploy global exit root manager - const globalExitRootManagerFactory = await ethers.getContractFactory('GlobalExitRootManagerL2Mock', deployer); - globalExitRootManager = await globalExitRootManagerFactory.deploy(PolygonZKEVMBridge.address); + const PolygonZKEVMGlobalExitRootFactory = await ethers.getContractFactory('PolygonZKEVMGlobalExitRootL2Mock', deployer); + polygonZKEVMGlobalExitRoot = await PolygonZKEVMGlobalExitRootFactory.deploy(PolygonZKEVMBridge.address); - await PolygonZKEVMBridge.initialize(networkIDRollup, globalExitRootManager.address, PolygonZKEVMAddress); + await PolygonZKEVMBridge.initialize(networkIDRollup, polygonZKEVMGlobalExitRoot.address, PolygonZKEVMAddress); }); it('should check the constructor parameters', async () => { - expect(await globalExitRootManager.bridgeAddress()).to.be.equal(PolygonZKEVMBridge.address); - expect(await globalExitRootManager.lastRollupExitRoot()).to.be.equal(zero32bytes); + expect(await polygonZKEVMGlobalExitRoot.bridgeAddress()).to.be.equal(PolygonZKEVMBridge.address); + expect(await polygonZKEVMGlobalExitRoot.lastRollupExitRoot()).to.be.equal(zero32bytes); }); it('should update root and check the storage position matches', async () => { // Check global exit root const newRoot = ethers.utils.hexlify(ethers.utils.randomBytes(32)); const blockNumber = 1; - await globalExitRootManager.setLastGlobalExitRoot(newRoot, blockNumber); - expect(await globalExitRootManager.globalExitRootMap(newRoot)).to.be.equal(blockNumber); + await polygonZKEVMGlobalExitRoot.setLastGlobalExitRoot(newRoot, blockNumber); + expect(await polygonZKEVMGlobalExitRoot.globalExitRootMap(newRoot)).to.be.equal(blockNumber); const mapStoragePosition = 0; const key = newRoot; const storagePosition = ethers.utils.solidityKeccak256(['uint256', 'uint256'], [key, mapStoragePosition]); - const storageValue = await ethers.provider.getStorageAt(globalExitRootManager.address, storagePosition); + const storageValue = await ethers.provider.getStorageAt(polygonZKEVMGlobalExitRoot.address, storagePosition); expect(blockNumber).to.be.equal(ethers.BigNumber.from(storageValue).toNumber()); // Check rollup exit root const newRootRollupExitRoot = ethers.utils.hexlify(ethers.utils.randomBytes(32)); - await globalExitRootManager.setExitRoot(newRootRollupExitRoot); - expect(await globalExitRootManager.lastRollupExitRoot()).to.be.equal(newRootRollupExitRoot); + await polygonZKEVMGlobalExitRoot.setExitRoot(newRootRollupExitRoot); + expect(await polygonZKEVMGlobalExitRoot.lastRollupExitRoot()).to.be.equal(newRootRollupExitRoot); const storagePositionExitRoot = 1; - const storageValueExitRoot = await ethers.provider.getStorageAt(globalExitRootManager.address, storagePositionExitRoot); + const storageValueExitRoot = await ethers.provider.getStorageAt(polygonZKEVMGlobalExitRoot.address, storagePositionExitRoot); expect(newRootRollupExitRoot, storageValueExitRoot); }); }); diff --git a/test/contracts/proofOfEfficiency.test.js b/test/contracts/proofOfEfficiency.test.js index abce35362..455e2e137 100644 --- a/test/contracts/proofOfEfficiency.test.js +++ b/test/contracts/proofOfEfficiency.test.js @@ -16,7 +16,7 @@ describe('Polygon ZK-EVM', () => { let polygonZKEVMBridgeContract; let polygonZKEVMContract; let maticTokenContract; - let globalExitRootManager; + let polygonZKEVMGlobalExitRoot; const maticTokenName = 'Matic Token'; const maticTokenSymbol = 'MATIC'; @@ -53,8 +53,8 @@ describe('Polygon ZK-EVM', () => { await maticTokenContract.deployed(); // deploy global exit root manager - const globalExitRootManagerFactory = await ethers.getContractFactory('GlobalExitRootManager'); - globalExitRootManager = await upgrades.deployProxy(globalExitRootManagerFactory, [], { initializer: false }); + const PolygonZKEVMGlobalExitRootFactory = await ethers.getContractFactory('PolygonZKEVMGlobalExitRoot'); + polygonZKEVMGlobalExitRoot = await upgrades.deployProxy(PolygonZKEVMGlobalExitRootFactory, [], { initializer: false }); // deploy PolygonZKEVMBridge const polygonZKEVMBridgeFactory = await ethers.getContractFactory('PolygonZKEVMBridge'); @@ -64,10 +64,10 @@ describe('Polygon ZK-EVM', () => { const PolygonZKEVMFactory = await ethers.getContractFactory('PolygonZKEVMMock'); polygonZKEVMContract = await upgrades.deployProxy(PolygonZKEVMFactory, [], { initializer: false }); - await globalExitRootManager.initialize(polygonZKEVMContract.address, polygonZKEVMBridgeContract.address); - await polygonZKEVMBridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, polygonZKEVMContract.address); + await polygonZKEVMGlobalExitRoot.initialize(polygonZKEVMContract.address, polygonZKEVMBridgeContract.address); + await polygonZKEVMBridgeContract.initialize(networkIDMainnet, polygonZKEVMGlobalExitRoot.address, polygonZKEVMContract.address); await polygonZKEVMContract.initialize( - globalExitRootManager.address, + polygonZKEVMGlobalExitRoot.address, maticTokenContract.address, verifierContract.address, polygonZKEVMBridgeContract.address, @@ -90,7 +90,7 @@ describe('Polygon ZK-EVM', () => { }); it('should check the constructor parameters', async () => { - expect(await polygonZKEVMContract.globalExitRootManager()).to.be.equal(globalExitRootManager.address); + expect(await polygonZKEVMContract.globalExitRootManager()).to.be.equal(polygonZKEVMGlobalExitRoot.address); expect(await polygonZKEVMContract.matic()).to.be.equal(maticTokenContract.address); expect(await polygonZKEVMContract.rollupVerifier()).to.be.equal(verifierContract.address); expect(await polygonZKEVMContract.bridgeAddress()).to.be.equal(polygonZKEVMBridgeContract.address); @@ -326,7 +326,7 @@ describe('Polygon ZK-EVM', () => { it('sequenceBatches should sequence multiple batches and force batches', async () => { const l2txDataForceBatch = '0x123456'; const maticAmount = await polygonZKEVMContract.getCurrentBatchFee(); - const lastGlobalExitRoot = await globalExitRootManager.getLastGlobalExitRoot(); + const lastGlobalExitRoot = await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot(); await expect( maticTokenContract.approve(polygonZKEVMContract.address, maticAmount), @@ -507,7 +507,7 @@ describe('Polygon ZK-EVM', () => { it('should force a batch of transactions', async () => { const l2txData = '0x123456'; const maticAmount = await polygonZKEVMContract.getCurrentBatchFee(); - const lastGlobalExitRoot = await globalExitRootManager.getLastGlobalExitRoot(); + const lastGlobalExitRoot = await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot(); expect(maticAmount.toString()).to.be.equal((await polygonZKEVMContract.getCurrentBatchFee()).toString()); @@ -558,7 +558,7 @@ describe('Polygon ZK-EVM', () => { it('should sequence force batches using sequenceForceBatches', async () => { const l2txData = '0x123456'; const maticAmount = await polygonZKEVMContract.getCurrentBatchFee(); - const lastGlobalExitRoot = await globalExitRootManager.getLastGlobalExitRoot(); + const lastGlobalExitRoot = await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot(); await expect( maticTokenContract.approve(polygonZKEVMContract.address, maticAmount), @@ -735,7 +735,7 @@ describe('Polygon ZK-EVM', () => { it('should verify forced sequenced batch using trustedVerifyBatches', async () => { const l2txData = '0x123456'; const maticAmount = await polygonZKEVMContract.getCurrentBatchFee(); - const lastGlobalExitRoot = await globalExitRootManager.getLastGlobalExitRoot(); + const lastGlobalExitRoot = await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot(); await expect( maticTokenContract.approve(polygonZKEVMContract.address, maticAmount), @@ -875,7 +875,7 @@ describe('Polygon ZK-EVM', () => { it('should match the computed SC input with the Js input in force batches', async () => { const l2txData = '0x123456'; const maticAmount = await polygonZKEVMContract.getCurrentBatchFee(); - const lastGlobalExitRoot = await globalExitRootManager.getLastGlobalExitRoot(); + const lastGlobalExitRoot = await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot(); await expect( maticTokenContract.approve(polygonZKEVMContract.address, maticAmount), diff --git a/test/contracts/real-prover/real-flow.test.js b/test/contracts/real-prover/real-flow.test.js index a9a32f969..bdafa216a 100644 --- a/test/contracts/real-prover/real-flow.test.js +++ b/test/contracts/real-prover/real-flow.test.js @@ -19,7 +19,7 @@ describe('Real flow test', () => { let maticTokenContract; let polygonZKEVMBridgeContract; let polygonZKEVMContract; - let globalExitRootManager; + let polygonZKEVMGlobalExitRoot; let deployer; let trustedSequencer; let trustedAggregator; @@ -77,13 +77,20 @@ describe('Real flow test', () => { polygonZKEVMContract = await upgrades.deployProxy(PolygonZKEVMFactory, [], { initializer: false }); // deploy global exit root manager - const globalExitRootManagerFactory = await ethers.getContractFactory('GlobalExitRootManagerMock'); + const PolygonZKEVMGlobalExitRootFactory = await ethers.getContractFactory('PolygonZKEVMGlobalExitRootMock'); - globalExitRootManager = await globalExitRootManagerFactory.deploy(polygonZKEVMContract.address, polygonZKEVMBridgeContract.address); - await polygonZKEVMBridgeContract.initialize(networkIDMainnet, globalExitRootManager.address, polygonZKEVMContract.address); + polygonZKEVMGlobalExitRoot = await PolygonZKEVMGlobalExitRootFactory.deploy( + polygonZKEVMContract.address, + polygonZKEVMBridgeContract.address, + ); + await polygonZKEVMBridgeContract.initialize( + networkIDMainnet, + polygonZKEVMGlobalExitRoot.address, + polygonZKEVMContract.address, + ); await polygonZKEVMContract.initialize( - globalExitRootManager.address, + polygonZKEVMGlobalExitRoot.address, maticTokenContract.address, verifierContract.address, polygonZKEVMBridgeContract.address, @@ -144,7 +151,7 @@ describe('Real flow test', () => { // prapare globalExitRoot const randomTimestamp = 1001; const { globalExitRoot } = batchesData[0]; - await globalExitRootManager.setGlobalExitRoot(globalExitRoot, randomTimestamp); + await polygonZKEVMGlobalExitRoot.setGlobalExitRoot(globalExitRoot, randomTimestamp); const lastBatchSequenced = await polygonZKEVMContract.lastBatchSequenced(); From 8fcf9919a94e5e419665f91eed5819ccc3df63a3 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Tue, 20 Dec 2022 10:35:17 +0100 Subject: [PATCH 53/71] update timelock --- contracts/{Timelock.sol => PolygonZKEVMTimelock.sol} | 2 +- docs/{Timelock.md => PolygonZKEVMTimelock.md} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename contracts/{Timelock.sol => PolygonZKEVMTimelock.sol} (96%) rename docs/{Timelock.md => PolygonZKEVMTimelock.md} (100%) diff --git a/contracts/Timelock.sol b/contracts/PolygonZKEVMTimelock.sol similarity index 96% rename from contracts/Timelock.sol rename to contracts/PolygonZKEVMTimelock.sol index 173bdbdd6..8ebc464f9 100644 --- a/contracts/Timelock.sol +++ b/contracts/PolygonZKEVMTimelock.sol @@ -9,7 +9,7 @@ import "./PolygonZKEVM.sol"; * This gives time for users of the controlled contract to exit before a potentially dangerous maintenance operation is applied. * If emergency mode of the zkevm contract system is active, this timelock have no delay. */ -contract Timelock is TimelockController { +contract PolygonZKEVMTimelock is TimelockController { // Polygon ZK-EVM address. Will be used to check if it's on emergency state. PolygonZKEVM public polygonZKEVM; diff --git a/docs/Timelock.md b/docs/PolygonZKEVMTimelock.md similarity index 100% rename from docs/Timelock.md rename to docs/PolygonZKEVMTimelock.md From 38221dab617a26743dd93944195734d79096f323 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Tue, 20 Dec 2022 11:39:06 +0100 Subject: [PATCH 54/71] update ZkEVM --- .githooks/pre-commit | 16 +- README.md | 8 +- .../{PolygonZKEVM.json => PolygonZkEVM.json} | 22 +- ...EVMBridge.json => PolygonZkEVMBridge.json} | 12 +- ...eMock.json => PolygonZkEVMBridgeMock.json} | 12 +- ...t.json => PolygonZkEVMGlobalExitRoot.json} | 8 +- ...json => PolygonZkEVMGlobalExitRootL2.json} | 8 +- ... => PolygonZkEVMGlobalExitRootL2Mock.json} | 8 +- ...on => PolygonZkEVMGlobalExitRootMock.json} | 8 +- ...onZKEVMMock.json => PolygonZkEVMMock.json} | 22 +- compiled-contracts/TokenWrapped.json | 4 +- .../{PolygonZKEVM.sol => PolygonZkEVM.sol} | 120 ++--- ...ZKEVMBridge.sol => PolygonZkEVMBridge.sol} | 52 +- ...oot.sol => PolygonZkEVMGlobalExitRoot.sol} | 13 +- ...2.sol => PolygonZkEVMGlobalExitRootL2.sol} | 2 +- ...MTimelock.sol => PolygonZkEVMTimelock.sol} | 14 +- .../interfaces/IBridgeMessageReceiver.sol | 2 +- ...KEVMBridge.sol => IPolygonZkEVMBridge.sol} | 2 +- ...ot.sol => IPolygonZkEVMGlobalExitRoot.sol} | 8 +- contracts/lib/TokenWrapped.sol | 2 +- ...dgeMock.sol => PolygonZkEVMBridgeMock.sol} | 10 +- ...l => PolygonZkEVMGlobalExitRootL2Mock.sol} | 8 +- ...sol => PolygonZkEVMGlobalExitRootMock.sol} | 6 +- ...ygonZKEVMMock.sol => PolygonZkEVMMock.sol} | 28 +- deployment/README.md | 2 +- deployment/deployPoE_v2-0.js | 120 ++--- deployment/deploy_parameters.json.example | 2 +- deployment/genesis-gen.json | 6 +- deployment/genesis.json | 4 +- deployment/upgradePoE.js | 6 +- deployment/verifyPoE_v2-0.js | 2 +- docker/scripts/genesis_docker.json | 4 +- docker/scripts/genesis_gen_docker.json | 6 +- docs/{PolygonZKEVM.md => PolygonZkEVM.md} | 28 +- ...onZKEVMBridge.md => PolygonZkEVMBridge.md} | 6 +- ...tRoot.md => PolygonZkEVMGlobalExitRoot.md} | 2 +- ...tL2.md => PolygonZkEVMGlobalExitRootL2.md} | 0 ...EVMTimelock.md => PolygonZkEVMTimelock.md} | 4 +- index.js | 16 +- test/contracts/bridge.test.js | 322 ++++++------ test/contracts/bridgeMock.test.js | 60 +-- test/contracts/bridge_permit.test.js | 106 ++-- test/contracts/emergencyManager.test.js | 126 ++--- test/contracts/globalExitRootManager.test.js | 44 +- .../contracts/globalExitRootManagerL2.test.js | 34 +- test/contracts/proofOfEfficiency.test.js | 490 +++++++++--------- test/contracts/real-prover/real-flow.test.js | 66 +-- test/contracts/snark_stark_input.test.js | 20 +- test/contracts/timelockUpgradeTest.js | 112 ++++ 49 files changed, 1049 insertions(+), 934 deletions(-) rename compiled-contracts/{PolygonZKEVM.json => PolygonZkEVM.json} (95%) rename compiled-contracts/{PolygonZKEVMBridge.json => PolygonZkEVMBridge.json} (97%) rename compiled-contracts/{PolygonZKEVMBridgeMock.json => PolygonZkEVMBridgeMock.json} (97%) rename compiled-contracts/{PolygonZKEVMGlobalExitRoot.json => PolygonZkEVMGlobalExitRoot.json} (94%) rename compiled-contracts/{PolygonZKEVMGlobalExitRootL2.json => PolygonZkEVMGlobalExitRootL2.json} (90%) rename compiled-contracts/{PolygonZKEVMGlobalExitRootL2Mock.json => PolygonZkEVMGlobalExitRootL2Mock.json} (92%) rename compiled-contracts/{PolygonZKEVMGlobalExitRootMock.json => PolygonZkEVMGlobalExitRootMock.json} (95%) rename compiled-contracts/{PolygonZKEVMMock.json => PolygonZkEVMMock.json} (96%) rename contracts/{PolygonZKEVM.sol => PolygonZkEVM.sol} (93%) rename contracts/{PolygonZKEVMBridge.sol => PolygonZkEVMBridge.sol} (93%) rename contracts/{PolygonZKEVMGlobalExitRoot.sol => PolygonZkEVMGlobalExitRoot.sol} (88%) rename contracts/{PolygonZKEVMGlobalExitRootL2.sol => PolygonZkEVMGlobalExitRootL2.sol} (97%) rename contracts/{PolygonZKEVMTimelock.sol => PolygonZkEVMTimelock.sol} (84%) rename contracts/interfaces/{IPolygonZKEVMBridge.sol => IPolygonZkEVMBridge.sol} (97%) rename contracts/interfaces/{IPolygonZKEVMGlobalExitRoot.sol => IPolygonZkEVMGlobalExitRoot.sol} (58%) rename contracts/mocks/{PolygonZKEVMBridgeMock.sol => PolygonZkEVMBridgeMock.sol} (86%) rename contracts/mocks/{PolygonZKEVMGlobalExitRootL2Mock.sol => PolygonZkEVMGlobalExitRootL2Mock.sol} (76%) rename contracts/mocks/{PolygonZKEVMGlobalExitRootMock.sol => PolygonZkEVMGlobalExitRootMock.sol} (82%) rename contracts/mocks/{PolygonZKEVMMock.sol => PolygonZkEVMMock.sol} (91%) rename docs/{PolygonZKEVM.md => PolygonZkEVM.md} (95%) rename docs/{PolygonZKEVMBridge.md => PolygonZkEVMBridge.md} (97%) rename docs/{PolygonZKEVMGlobalExitRoot.md => PolygonZkEVMGlobalExitRoot.md} (94%) rename docs/{PolygonZKEVMGlobalExitRootL2.md => PolygonZkEVMGlobalExitRootL2.md} (100%) rename docs/{PolygonZKEVMTimelock.md => PolygonZkEVMTimelock.md} (92%) create mode 100644 test/contracts/timelockUpgradeTest.js diff --git a/.githooks/pre-commit b/.githooks/pre-commit index b667b1c1d..4d6c0c8a5 100755 --- a/.githooks/pre-commit +++ b/.githooks/pre-commit @@ -6,17 +6,17 @@ if npm run lint; then npx hardhat compile --force npm run docgen git add docs - cp artifacts/contracts/PolygonZKEVMBridge.sol/PolygonZKEVMBridge.json compiled-contracts/ - cp artifacts/contracts/PolygonZKEVMGlobalExitRoot.sol/PolygonZKEVMGlobalExitRoot.json compiled-contracts/ - cp artifacts/contracts/PolygonZKEVMGlobalExitRootL2.sol/PolygonZKEVMGlobalExitRootL2.json compiled-contracts/ + cp artifacts/contracts/PolygonZkEVMBridge.sol/PolygonZkEVMBridge.json compiled-contracts/ + cp artifacts/contracts/PolygonZkEVMGlobalExitRoot.sol/PolygonZkEVMGlobalExitRoot.json compiled-contracts/ + cp artifacts/contracts/PolygonZkEVMGlobalExitRootL2.sol/PolygonZkEVMGlobalExitRootL2.json compiled-contracts/ cp artifacts/contracts/lib/TokenWrapped.sol/TokenWrapped.json compiled-contracts/ - cp artifacts/contracts/mocks/PolygonZKEVMBridgeMock.sol/PolygonZKEVMBridgeMock.json compiled-contracts/ + cp artifacts/contracts/mocks/PolygonZkEVMBridgeMock.sol/PolygonZkEVMBridgeMock.json compiled-contracts/ cp artifacts/contracts/mocks/ERC20PermitMock.sol/ERC20PermitMock.json compiled-contracts/ - cp artifacts/contracts/mocks/PolygonZKEVMGlobalExitRootL2Mock.sol/PolygonZKEVMGlobalExitRootL2Mock.json compiled-contracts/ - cp artifacts/contracts/mocks/PolygonZKEVMGlobalExitRootMock.sol/PolygonZKEVMGlobalExitRootMock.json compiled-contracts/ - cp artifacts/contracts/mocks/PolygonZKEVMMock.sol/PolygonZKEVMMock.json compiled-contracts/ + cp artifacts/contracts/mocks/PolygonZkEVMGlobalExitRootL2Mock.sol/PolygonZkEVMGlobalExitRootL2Mock.json compiled-contracts/ + cp artifacts/contracts/mocks/PolygonZkEVMGlobalExitRootMock.sol/PolygonZkEVMGlobalExitRootMock.json compiled-contracts/ + cp artifacts/contracts/mocks/PolygonZkEVMMock.sol/PolygonZkEVMMock.json compiled-contracts/ cp artifacts/contracts/mocks/VerifierRollupHelperMock.sol/VerifierRollupHelperMock.json compiled-contracts/ - cp artifacts/contracts/PolygonZKEVM.sol/PolygonZKEVM.json compiled-contracts/ + cp artifacts/contracts/PolygonZkEVM.sol/PolygonZkEVM.json compiled-contracts/ cp artifacts/contracts/verifiers/Verifier.sol/Verifier.json compiled-contracts/ git add compiled-contracts exit 0 diff --git a/README.md b/README.md index e85f3eee5..3f02131e5 100644 --- a/README.md +++ b/README.md @@ -18,10 +18,10 @@ Private keys and mnemonics contained in this repository are used for internal te ## Repository structure - `contracts`: zkevm contracts - - `PolygonZKEVMBridge.sol`: transfer assets between chains - - `PolygonZKEVMGlobalExitRoot.sol`: manage global exit root in L1 - - `PolygonZKEVMGlobalExitRootL2.sol`: manage global exit root in L2 - - `PolygonZKEVM.sol`: consensus algorithm used by polyhon hermez zkevm + - `PolygonZkEVMBridge.sol`: transfer assets between chains + - `PolygonZkEVMGlobalExitRoot.sol`: manage global exit root in L1 + - `PolygonZkEVMGlobalExitRootL2.sol`: manage global exit root in L2 + - `PolygonZkEVM.sol`: consensus algorithm used by polyhon hermez zkevm - `docs`: specs and useful links - `test`: contracts tests diff --git a/compiled-contracts/PolygonZKEVM.json b/compiled-contracts/PolygonZkEVM.json similarity index 95% rename from compiled-contracts/PolygonZKEVM.json rename to compiled-contracts/PolygonZkEVM.json index 7c8af3fa3..63705a524 100644 --- a/compiled-contracts/PolygonZKEVM.json +++ b/compiled-contracts/PolygonZkEVM.json @@ -1,7 +1,7 @@ { "_format": "hh-sol-artifact-1", - "contractName": "PolygonZKEVM", - "sourceName": "contracts/PolygonZKEVM.sol", + "contractName": "PolygonZkEVM", + "sourceName": "contracts/PolygonZkEVM.sol", "abi": [ { "anonymous": false, @@ -468,7 +468,7 @@ "name": "bridgeAddress", "outputs": [ { - "internalType": "contract IPolygonZKEVMBridge", + "internalType": "contract IPolygonZkEVMBridge", "name": "", "type": "address" } @@ -642,7 +642,7 @@ "name": "globalExitRootManager", "outputs": [ { - "internalType": "contract IPolygonZKEVMGlobalExitRoot", + "internalType": "contract IPolygonZkEVMGlobalExitRoot", "name": "", "type": "address" } @@ -653,7 +653,7 @@ { "inputs": [ { - "internalType": "contract IPolygonZKEVMGlobalExitRoot", + "internalType": "contract IPolygonZkEVMGlobalExitRoot", "name": "_globalExitRootManager", "type": "address" }, @@ -668,7 +668,7 @@ "type": "address" }, { - "internalType": "contract IPolygonZKEVMBridge", + "internalType": "contract IPolygonZkEVMBridge", "name": "_bridgeAddress", "type": "address" }, @@ -710,7 +710,7 @@ "type": "uint64" } ], - "internalType": "struct PolygonZKEVM.InitializePackedParameters", + "internalType": "struct PolygonZkEVM.InitializePackedParameters", "name": "initializePackedParameters", "type": "tuple" }, @@ -1108,7 +1108,7 @@ "type": "uint64" } ], - "internalType": "struct PolygonZKEVM.BatchData[]", + "internalType": "struct PolygonZkEVM.BatchData[]", "name": "batches", "type": "tuple[]" } @@ -1138,7 +1138,7 @@ "type": "uint64" } ], - "internalType": "struct PolygonZKEVM.ForcedBatchData[]", + "internalType": "struct PolygonZkEVM.ForcedBatchData[]", "name": "batches", "type": "tuple[]" } @@ -1469,8 +1469,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5061562380620000216000396000f3fe608060405234801561001057600080fd5b50600436106103af5760003560e01c80638da5cb5b116101f4578063cfa8ed471161011a578063e7a7ed02116100ad578063f14916d61161007c578063f14916d6146108eb578063f2fde38b146108fe578063f851a44014610911578063f8b823e41461092457600080fd5b8063e7a7ed0214610898578063e8bf92ed146108b2578063eaeb077b146108c5578063edc41121146108d857600080fd5b8063d939b315116100e9578063d939b3151461085a578063dbc1697614610874578063e11f3f181461087c578063e217cfd61461088f57600080fd5b8063cfa8ed4714610806578063d02103ca14610820578063d8d1091b14610833578063d8f54db01461084657600080fd5b8063ab9fc5ef11610192578063b6b0b09711610161578063b6b0b097146107be578063c0ed84e0146107d8578063c89e42df146107e0578063cf136306146107f357600080fd5b8063ab9fc5ef14610712578063adc879e91461071c578063afd23cbe14610736578063b4d63f581461075e57600080fd5b80639eb831b9116101ce5780639eb831b9146106d75780639f0d039d146106df578063a3c573eb146106e7578063aa58bad6146106fa57600080fd5b80638da5cb5b146106ab57806399f5634e146106bc5780639c9f3dfe146106c457600080fd5b80634a910e6a116102d9578063715018a611610277578063837a473811610246578063837a473814610606578063841b24d7146106745780638b48931e1461068e5780638c4a0af71461069857600080fd5b8063715018a6146105c55780637215541a146105cd57806375c508b3146105e05780637fcb3653146105f357600080fd5b806360943d6a116102b357806360943d6a1461056c5780636b8616ce1461057f5780636ff512cc1461059f578063704b6c02146105b257600080fd5b80634a910e6a146105315780635392c5e014610544578063542028d51461056457600080fd5b8063383b3be811610351578063456052671161032057806345605267146104d7578063458c0477146104f15780634834a343146105045780634a1a89a71461051757600080fd5b8063383b3be814610484578063394218e9146104975780633c158267146104aa578063423fa856146104bd57600080fd5b806319d8ac611161038d57806319d8ac6114610404578063220d78991461042f57806329878983146104425780632d0889d31461046d57600080fd5b8063107bf28c146103b457806315064c96146103d25780631816b7e5146103ef575b600080fd5b6103bc61092d565b6040516103c9919061476b565b60405180910390f35b6065546103df9060ff1681565b60405190151581526020016103c9565b6104026103fd366004614785565b6109bb565b005b606854610417906001600160401b031681565b6040516001600160401b0390911681526020016103c9565b6103bc61043d3660046147c5565b610aea565b606a54610455906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b61047661ea6081565b6040519081526020016103c9565b6103df610492366004614812565b610c90565b6104026104a5366004614812565b610cd7565b6104026104b836600461494f565b610e26565b60685461041790600160401b90046001600160401b031681565b60685461041790600160801b90046001600160401b031681565b607254610417906001600160401b031681565b610402610512366004614a8d565b61163a565b60725461041790600160401b90046001600160401b031681565b61040261053f366004614812565b611983565b610476610552366004614812565b606d6020526000908152604090205481565b6103bc611c23565b61040261057a366004614b2f565b611c30565b61047661058d366004614812565b60666020526000908152604090205481565b6104026105ad366004614c06565b611fa0565b6104026105c0366004614c06565b612024565b61040261209c565b6104026105db366004614812565b6120b0565b6104026105ee366004614c23565b612328565b606954610417906001600160401b031681565b610649610614366004614cc1565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103c9565b60725461041790600160c01b90046001600160401b031681565b61041762093a8081565b6104026106a6366004614ce8565b6123b7565b6033546001600160a01b0316610455565b61047661242e565b6104026106d2366004614812565b612511565b610476600c81565b607454610476565b607054610455906001600160a01b031681565b6065546104179061010090046001600160401b031681565b6104176206978081565b606c5461041790600160a81b90046001600160401b031681565b60655461074b90600160481b900461ffff1681565b60405161ffff90911681526020016103c9565b61079961076c366004614812565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103c9565b60655461045590600160581b90046001600160a01b031681565b610417612657565b6104026107ee366004614d05565b6126a4565b610402610801366004614812565b61270a565b60695461045590600160401b90046001600160a01b031681565b606c54610455906001600160a01b031681565b610402610841366004614d39565b61278b565b606c546103df90600160a01b900460ff1681565b60725461041790600160801b90046001600160401b031681565b610402612c55565b61040261088a366004614c23565b612d11565b6104176103e881565b60685461041790600160c01b90046001600160401b031681565b606b54610455906001600160a01b031681565b6104026108d3366004614e2b565b612e56565b6104026108e6366004614a8d565b61317e565b6104026108f9366004614c06565b61329e565b61040261090c366004614c06565b613316565b607354610455906001600160a01b031681565b61047660745481565b606f805461093a90614e6f565b80601f016020809104026020016040519081016040528092919081815260200182805461096690614e6f565b80156109b35780601f10610988576101008083540402835291602001916109b3565b820191906000526020600020905b81548152906001019060200180831161099657829003601f168201915b505050505081565b6073546001600160a01b031633146109ee5760405162461bcd60e51b81526004016109e590614ea9565b60405180910390fd5b6103e88161ffff16118015610a0857506104008161ffff16105b610a8d5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a4b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a4016109e5565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610b1c57508115155b610b90576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e5565b80610c05576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e5565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610cc692600160801b90920481169116614f02565b6001600160401b0316111592915050565b6073546001600160a01b03163314610d015760405162461bcd60e51b81526004016109e590614ea9565b62093a806001600160401b0382161115610d2d5760405162461bcd60e51b81526004016109e590614f2d565b60655460ff16610dd0576072546001600160401b03600160c01b909104811690821610610dd05760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a4b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109e5565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610adf565b60655460ff1615610e495760405162461bcd60e51b81526004016109e590614f98565b606954600160401b90046001600160a01b03163314610ed05760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e63657200000000000060648201526084016109e5565b805180610f455760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e6365203120626174636800000060648201526084016109e5565b6103e88110610fbe576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e79206261746368657360648201526084016109e5565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561145e57600087828151811061101157611011615000565b60200260200101519050600081606001516001600160401b031611156111ca578361103b81615016565b9450506000816000015180519060200120826020015183606001516040516020016110689392919061503c565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461110e5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d6174636800000060648201526084016109e5565b81606001516001600160401b031682604001516001600160401b031610156111c45760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a4016109e5565b50611351565b602081015115806112535750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b36329161120d9160040190815260200190565b6020604051808303816000875af115801561122c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611250919061505f565b15155b6112c55760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d75737420657869737400000000000060648201526084016109e5565b80515161ea60116113515760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a4016109e5565b856001600160401b031681604001516001600160401b03161015801561138457504281604001516001600160401b031611155b6113f65760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e676500000060648201526084016109e5565b8051805160209182012081830151604080850151905161141d948894939291339101615078565b604051602081830303815290604052805190602001209250848061144090615016565b95505080604001519550508080611456906150bc565b915050610ff5565b506068546001600160401b03600160c01b909104811690831611156114e35760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b60648201526084016109e5565b60685460009061150390600160801b90046001600160401b0316846150d5565b611516906001600160401b0316876150fd565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115eb903390309084906115d09190615114565b606554600160581b90046001600160a01b031692919061338c565b6115f36133f7565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff161561165d5760405162461bcd60e51b81526004016109e590614f98565b6072546001600160401b03878116600090815260676020526040902060010154429261169492600160c01b90910481169116614f02565b6001600160401b0316111561171d5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a4016109e5565b6103e861172a88886150d5565b6001600160401b0316106117a65760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e7920626174636865730000000060648201526084016109e5565b6117b6888888888888888861349b565b6117bf866139d9565b607254600160801b90046001600160401b0316600003611887576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561182457607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561186a57600080fd5b505af115801561187e573d6000803e3d6000fd5b50505050611938565b61188f6133f7565b607280546001600160401b03169060006118a883615016565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b038116158015906119b057506072546001600160401b03600160401b9091048116908216115b80156119cb57506072546001600160401b0390811690821611155b611a495760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a4016109e5565b606a546001600160a01b03163314611af357611a6481610c90565b611af35760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a4016109e5565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d9094529382902092909255607280546fffffffffffffffff000000000000000019169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611bb557600080fd5b505af1158015611bc9573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611c1691815260200190565b60405180910390a3505050565b606e805461093a90614e6f565b600054610100900460ff1615808015611c505750600054600160ff909116105b80611c6a5750303b158015611c6a575060005460ff166001145b611ccd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109e5565b6000805460ff191660011790558015611cf0576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611d6d6020860186614c06565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d9d6060860160408701614c06565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611dd860c0860160a08701614c06565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611e3560e0860160c08701614812565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611e6c6040860160208701614812565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611ea86080860160608701614812565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611ee460a0860160808701614ce8565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611f0c8482615179565b50606f611f198382615179565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611f4f613bbf565b8015611f95576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611fca5760405162461bcd60e51b81526004016109e590614ea9565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610adf565b6073546001600160a01b0316331461204e5760405162461bcd60e51b81526004016109e590614ea9565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190602001610adf565b6120a4613c33565b6120ae6000613c8d565b565b6033546001600160a01b0316331461231d576072546000906001600160401b03161561210157506072546001600160401b03908116600090815260716020526040902054600160401b90041661210f565b506069546001600160401b03165b80826001600160401b03161161218d5760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c72656164792076657269666965640000000060648201526084016109e5565b6068546001600160401b03600160401b9091048116908316118015906121cf57506001600160401b038083166000908152606760205260409020600101541615155b61225a5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a4016109e5565b6001600160401b0380831660009081526067602052604090206001015442916122889162093a809116614f02565b6001600160401b0316111561231b5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a4016109e5565b505b612325613cdf565b50565b60655460ff161561234b5760405162461bcd60e51b81526004016109e590614f98565b61235c898989898989898989613d4f565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f95613cdf565b6073546001600160a01b031633146123e15760405162461bcd60e51b81526004016109e590614ea9565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610adf90831515815260200190565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612481573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a5919061505f565b905060006124b1612657565b6068546001600160401b03600160401b82048116916124e191600160801b8204811691600160c01b9004166150d5565b6124eb9190614f02565b6124f591906150d5565b6001600160401b0316905061250a818361524e565b9250505090565b6073546001600160a01b0316331461253b5760405162461bcd60e51b81526004016109e590614ea9565b62093a806001600160401b03821611156125675760405162461bcd60e51b81526004016109e590614f2d565b60655460ff166125fc576072546001600160401b03600160801b9091048116908216106125fc5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f7765720060648201526084016109e5565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610adf565b6072546000906001600160401b03161561269457506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126ce5760405162461bcd60e51b81526004016109e590614ea9565b606e6126da8282615179565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610adf919061476b565b6073546001600160a01b031633146127345760405162461bcd60e51b81526004016109e590614ea9565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610adf565b60655460ff16156127ae5760405162461bcd60e51b81526004016109e590614f98565b606c54600160a01b900460ff1615156001146127dc5760405162461bcd60e51b81526004016109e590615262565b80518061283f5760405162461bcd60e51b815260206004820152603d60248201526000805160206155ae83398151915260448201527f3a204d75737420666f726365206174206c65617374203120626174636800000060648201526084016109e5565b6103e881106128b05760405162461bcd60e51b815260206004820152604360248201526000805160206155ae83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a4016109e5565b6068546001600160401b03600160c01b82048116916128d8918491600160801b9004166152cb565b11156129325760405162461bcd60e51b815260206004820152603560248201526000805160206155ae8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b60648201526084016109e5565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612b5e57600086828151811061297f5761297f615000565b60200260200101519050838061299490615016565b9450506000816000015180519060200120826020015183604001516040516020016129c19392919061503c565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612a605760405162461bcd60e51b815260206004820152604260248201526000805160206155ae83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109e5565b612a6b6001886150fd565b8303612b005742620697808360400151612a859190614f02565b6001600160401b03161115612b005760405162461bcd60e51b815260206004820152604760248201526000805160206155ae83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a4016109e5565b8151805160209182012081840151604051612b2393889392914291339101615078565b6040516020818303038152906040528051906020012093508580612b4690615016565b96505050508080612b56906150bc565b915050612963565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612c775760405162461bcd60e51b81526004016109e5906152e3565b6073546001600160a01b03163314612ca15760405162461bcd60e51b81526004016109e590614ea9565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612cf157600080fd5b505af1158015612d05573d6000803e3d6000fd5b505050506120ae6143ca565b606a546001600160a01b03163314612d3b5760405162461bcd60e51b81526004016109e590615340565b612d4c898989898989898989613d4f565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612d9757607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612ddd57600080fd5b505af1158015612df1573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612e795760405162461bcd60e51b81526004016109e590614f98565b606c54600160a01b900460ff161515600114612ea75760405162461bcd60e51b81526004016109e590615262565b6000612eb260745490565b905081811115612f175760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b60648201526084016109e5565b61ea60835110612f875760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b60648201526084016109e5565b606554612fa690600160581b90046001600160a01b031633308461338c565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015612ff0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613014919061505f565b60688054919250600160c01b9091046001600160401b031690601861303883615016565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016130799392919061503c565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361311d57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613178565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161316f9392919061539d565b60405180910390a25b50505050565b606a546001600160a01b031633146131a85760405162461bcd60e51b81526004016109e590615340565b6131b8888888888888888861349b565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561320357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561324957600080fd5b505af115801561325d573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611971565b6073546001600160a01b031633146132c85760405162461bcd60e51b81526004016109e590614ea9565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001610adf565b61331e613c33565b6001600160a01b0381166133835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e5565b61232581613c8d565b6040516001600160a01b03808516602483015283166044820152606481018290526131789085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614421565b6072546001600160401b03600160401b82048116911611156120ae5760725460009061343490600160401b90046001600160401b03166001614f02565b905061343f81610c90565b15612325576072546000906002906134619084906001600160401b03166150d5565b61346b91906153d0565b6134759083614f02565b905061348081610c90565b156134925761348e81611983565b5050565b61348e82611983565b6000806134a6612657565b90506001600160401b038a1615613621576072546001600160401b03908116908b1611156135625760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2070656e60448201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560648201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608482015260a4016109e5565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b909204161461361b5760405162461bcd60e51b815260206004820152604c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760648201526b040e6e8c2e8ca40c4c2e8c6d60a31b608482015260a4016109e5565b50613769565b6001600160401b0389166000908152606d60205260409020549150816136bb5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786064820152621a5cdd60ea1b608482015260a4016109e5565b806001600160401b0316896001600160401b031611156137695760405162461bcd60e51b815260206004820152605d60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060648201527f7468616e2063757272656e744c61737456657269666965644261746368000000608482015260a4016109e5565b806001600160401b0316886001600160401b0316116138165760405162461bcd60e51b815260206004820152605760248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2066696e60448201527f616c4e65774261746368206d75737420626520626967676572207468616e206360648201527f757272656e744c61737456657269666965644261746368000000000000000000608482015260a4016109e5565b60006138258a8a8a868b610aea565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161385a91906153f6565b602060405180830381855afa158015613877573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061389a919061505f565b6138a49190615412565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916138e8918b918b918b9190600401615426565b602060405180830381865afa158015613905573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392991906154a0565b6139885760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20494e5660448201526920a624a22fa82927a7a360b11b60648201526084016109e5565b6139cb33613996858d6150d5565b6001600160401b03166139a761242e565b6139b19190615114565b606554600160581b90046001600160a01b031691906144f8565b505050505050505050505050565b60006139e3612657565b9050816000806139f384846150d5565b6001600160401b031690505b836001600160401b0316836001600160401b031614613aa5576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613a4f9116426150fd565b1115613a8a576001810154613a7490600160401b90046001600160401b0316866150d5565b613a87906001600160401b0316846152cb565b92505b60010154600160401b90046001600160401b031692506139ff565b6000613ab183836150fd565b905082811015613b2b576000613ac782856150fd565b9050600c8111613ad75780613ada565b600c5b9050613ae7816003615114565b613af290600a6155a1565b606554613b0b908390600160481b900461ffff166155a1565b607454613b189190615114565b613b22919061524e565b60745550613bb7565b6000613b3784836150fd565b9050600c8111613b475780613b4a565b600c5b90506000613b59826003615114565b613b6490600a6155a1565b606554613b7d908490600160481b900461ffff166155a1565b607454613b8a9190615114565b613b94919061524e565b905080607454607454613ba79190615114565b613bb1919061524e565b60745550505b505050505050565b600054610100900460ff16613c2a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109e5565b6120ae33613c8d565b6033546001600160a01b031633146120ae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109e5565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d2f57600080fd5b505af1158015613d43573d6000803e3d6000fd5b505050506120ae614528565b60006001600160401b038a1615613eca576072546001600160401b03908116908b161115613e0e5760405162461bcd60e51b815260206004820152606c60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c4016109e5565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613ec45760405162461bcd60e51b815260206004820152606060248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a4016109e5565b5061401e565b506001600160401b0387166000908152606d602052604090205480613f6b5760405162461bcd60e51b815260206004820152605760248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a4016109e5565b6069546001600160401b03908116908916111561401e5760405162461bcd60e51b815260206004820152607160248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c4016109e5565b6072546001600160401b03908116908a161180159061404e5750896001600160401b0316896001600160401b0316115b801561406f57506072546001600160401b03600160401b9091048116908a16115b6140e75760405162461bcd60e51b815260206004820152604f60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a4016109e5565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146141a75760405162461bcd60e51b815260206004820152606a60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c4016109e5565b60006141b6898989858a610aea565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516141eb91906153f6565b602060405180830381855afa158015614208573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061422b919061505f565b6142359190615412565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614279918a918a918a9190600401615426565b602060405180830381865afa158015614296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ba91906154a0565b61431a5760405162461bcd60e51b815260206004820152603e60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20494e56414c49445f50524f4f46000060648201526084016109e5565b6001600160401b038b166000908152607160205260409020600201548790036139cb5760405162461bcd60e51b815260206004820152606260248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c4016109e5565b60655460ff166143ec5760405162461bcd60e51b81526004016109e5906152e3565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614476826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145839092919063ffffffff16565b8051909150156144f3578080602001905181019061449491906154a0565b6144f35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109e5565b505050565b6040516001600160a01b0383166024820152604481018290526144f390849063a9059cbb60e01b906064016133c0565b60655460ff161561454b5760405162461bcd60e51b81526004016109e590614f98565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614592848460008561459a565b949350505050565b6060824710156145fb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109e5565b600080866001600160a01b0316858760405161461791906153f6565b60006040518083038185875af1925050503d8060008114614654576040519150601f19603f3d011682016040523d82523d6000602084013e614659565b606091505b509150915061466a87838387614675565b979650505050505050565b606083156146e45782516000036146dd576001600160a01b0385163b6146dd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109e5565b5081614592565b61459283838151156146f95781518083602001fd5b8060405162461bcd60e51b81526004016109e5919061476b565b60005b8381101561472e578181015183820152602001614716565b838111156131785750506000910152565b60008151808452614757816020860160208601614713565b601f01601f19169290920160200192915050565b60208152600061477e602083018461473f565b9392505050565b60006020828403121561479757600080fd5b813561ffff8116811461477e57600080fd5b80356001600160401b03811681146147c057600080fd5b919050565b600080600080600060a086880312156147dd57600080fd5b6147e6866147a9565b94506147f4602087016147a9565b94979496505050506040830135926060810135926080909101359150565b60006020828403121561482457600080fd5b61477e826147a9565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156148655761486561482d565b60405290565b604051606081016001600160401b03811182821017156148655761486561482d565b604051601f8201601f191681016001600160401b03811182821017156148b5576148b561482d565b604052919050565b60006001600160401b038211156148d6576148d661482d565b5060051b60200190565b600082601f8301126148f157600080fd5b81356001600160401b0381111561490a5761490a61482d565b61491d601f8201601f191660200161488d565b81815284602083860101111561493257600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561496257600080fd5b82356001600160401b038082111561497957600080fd5b818501915085601f83011261498d57600080fd5b81356149a061499b826148bd565b61488d565b81815260059190911b830184019084810190888311156149bf57600080fd5b8585015b83811015614a58578035858111156149db5760008081fd5b86016080818c03601f19018113156149f35760008081fd5b6149fb614843565b8983013588811115614a0d5760008081fd5b614a1b8e8c838701016148e0565b8252506040808401358b8301526060614a358186016147a9565b82840152614a448486016147a9565b9083015250855250509186019186016149c3565b5098975050505050505050565b8060408101831015614a7657600080fd5b92915050565b8060808101831015614a7657600080fd5b6000806000806000806000806101a0898b031215614aaa57600080fd5b614ab3896147a9565b9750614ac160208a016147a9565b9650614acf60408a016147a9565b95506060890135945060808901359350614aec8a60a08b01614a65565b9250614afb8a60e08b01614a7c565b9150614b0b8a6101608b01614a65565b90509295985092959890939650565b6001600160a01b038116811461232557600080fd5b600080600080600080600080888a036101c0811215614b4d57600080fd5b8935614b5881614b1a565b985060208a0135614b6881614b1a565b975060408a0135614b7881614b1a565b965060608a0135614b8881614b1a565b955060e0607f1982011215614b9c57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614bc657600080fd5b614bd28c838d016148e0565b93506101a08b0135915080821115614be957600080fd5b50614bf68b828c016148e0565b9150509295985092959890939650565b600060208284031215614c1857600080fd5b813561477e81614b1a565b60008060008060008060008060006101c08a8c031215614c4257600080fd5b614c4b8a6147a9565b9850614c5960208b016147a9565b9750614c6760408b016147a9565b9650614c7560608b016147a9565b955060808a0135945060a08a01359350614c928b60c08c01614a65565b9250614ca28b6101008c01614a7c565b9150614cb28b6101808c01614a65565b90509295985092959850929598565b600060208284031215614cd357600080fd5b5035919050565b801515811461232557600080fd5b600060208284031215614cfa57600080fd5b813561477e81614cda565b600060208284031215614d1757600080fd5b81356001600160401b03811115614d2d57600080fd5b614592848285016148e0565b60006020808385031215614d4c57600080fd5b82356001600160401b0380821115614d6357600080fd5b818501915085601f830112614d7757600080fd5b8135614d8561499b826148bd565b81815260059190911b83018401908481019088831115614da457600080fd5b8585015b83811015614a5857803585811115614dc05760008081fd5b86016060818c03601f1901811315614dd85760008081fd5b614de061486b565b8983013588811115614df25760008081fd5b614e008e8c838701016148e0565b8252506040808401358b830152614e188385016147a9565b9082015285525050918601918601614da8565b60008060408385031215614e3e57600080fd5b82356001600160401b03811115614e5457600080fd5b614e60858286016148e0565b95602094909401359450505050565b600181811c90821680614e8357607f821691505b602082108103614ea357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614f2457614f24614eec565b01949350505050565b60208082526045908201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361503257615032614eec565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b60006020828403121561507157600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b6000600182016150ce576150ce614eec565b5060010190565b60006001600160401b03838116908316818110156150f5576150f5614eec565b039392505050565b60008282101561510f5761510f614eec565b500390565b600081600019048311821515161561512e5761512e614eec565b500290565b601f8211156144f357600081815260208120601f850160051c8101602086101561515a5750805b601f850160051c820191505b81811015613bb757828155600101615166565b81516001600160401b038111156151925761519261482d565b6151a6816151a08454614e6f565b84615133565b602080601f8311600181146151db57600084156151c35750858301515b600019600386901b1c1916600185901b178555613bb7565b600085815260208120601f198616915b8281101561520a578886015182559484019460019091019084016151eb565b50858210156152285787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b60008261525d5761525d615238565b500490565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b600082198211156152de576152de614eec565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b03831660208201526060604082018190526000906153c79083018461473f565b95945050505050565b60006001600160401b03808416806153ea576153ea615238565b92169190910492915050565b60008251615408818460208701614713565b9190910192915050565b60008261542157615421615238565b500690565b61012081016040808784376000838201818152879190815b600281101561545e5784848337908401828152928401929060010161543e565b5050828760c0870137610100850181815286935091505b6001811015615494578251825260209283019290910190600101615475565b50505095945050505050565b6000602082840312156154b257600080fd5b815161477e81614cda565b600181815b808511156154f85781600019048211156154de576154de614eec565b808516156154eb57918102915b93841c93908002906154c2565b509250929050565b60008261550f57506001614a76565b8161551c57506000614a76565b8160018114615532576002811461553c57615558565b6001915050614a76565b60ff84111561554d5761554d614eec565b50506001821b614a76565b5060208310610133831016604e8410600b841016171561557b575081810a614a76565b61558583836154bd565b806000190482111561559957615599614eec565b029392505050565b600061477e838361550056fe506f6c79676f6e5a4b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a4b45564d3a3a70726f76654e6f6e44657465726d696e6973a26469706673582212208865f0638a4efbefd35b06681d425aa7b9537afd92181c6a9cb443be8584550964736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103af5760003560e01c80638da5cb5b116101f4578063cfa8ed471161011a578063e7a7ed02116100ad578063f14916d61161007c578063f14916d6146108eb578063f2fde38b146108fe578063f851a44014610911578063f8b823e41461092457600080fd5b8063e7a7ed0214610898578063e8bf92ed146108b2578063eaeb077b146108c5578063edc41121146108d857600080fd5b8063d939b315116100e9578063d939b3151461085a578063dbc1697614610874578063e11f3f181461087c578063e217cfd61461088f57600080fd5b8063cfa8ed4714610806578063d02103ca14610820578063d8d1091b14610833578063d8f54db01461084657600080fd5b8063ab9fc5ef11610192578063b6b0b09711610161578063b6b0b097146107be578063c0ed84e0146107d8578063c89e42df146107e0578063cf136306146107f357600080fd5b8063ab9fc5ef14610712578063adc879e91461071c578063afd23cbe14610736578063b4d63f581461075e57600080fd5b80639eb831b9116101ce5780639eb831b9146106d75780639f0d039d146106df578063a3c573eb146106e7578063aa58bad6146106fa57600080fd5b80638da5cb5b146106ab57806399f5634e146106bc5780639c9f3dfe146106c457600080fd5b80634a910e6a116102d9578063715018a611610277578063837a473811610246578063837a473814610606578063841b24d7146106745780638b48931e1461068e5780638c4a0af71461069857600080fd5b8063715018a6146105c55780637215541a146105cd57806375c508b3146105e05780637fcb3653146105f357600080fd5b806360943d6a116102b357806360943d6a1461056c5780636b8616ce1461057f5780636ff512cc1461059f578063704b6c02146105b257600080fd5b80634a910e6a146105315780635392c5e014610544578063542028d51461056457600080fd5b8063383b3be811610351578063456052671161032057806345605267146104d7578063458c0477146104f15780634834a343146105045780634a1a89a71461051757600080fd5b8063383b3be814610484578063394218e9146104975780633c158267146104aa578063423fa856146104bd57600080fd5b806319d8ac611161038d57806319d8ac6114610404578063220d78991461042f57806329878983146104425780632d0889d31461046d57600080fd5b8063107bf28c146103b457806315064c96146103d25780631816b7e5146103ef575b600080fd5b6103bc61092d565b6040516103c9919061476b565b60405180910390f35b6065546103df9060ff1681565b60405190151581526020016103c9565b6104026103fd366004614785565b6109bb565b005b606854610417906001600160401b031681565b6040516001600160401b0390911681526020016103c9565b6103bc61043d3660046147c5565b610aea565b606a54610455906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b61047661ea6081565b6040519081526020016103c9565b6103df610492366004614812565b610c90565b6104026104a5366004614812565b610cd7565b6104026104b836600461494f565b610e26565b60685461041790600160401b90046001600160401b031681565b60685461041790600160801b90046001600160401b031681565b607254610417906001600160401b031681565b610402610512366004614a8d565b61163a565b60725461041790600160401b90046001600160401b031681565b61040261053f366004614812565b611983565b610476610552366004614812565b606d6020526000908152604090205481565b6103bc611c23565b61040261057a366004614b2f565b611c30565b61047661058d366004614812565b60666020526000908152604090205481565b6104026105ad366004614c06565b611fa0565b6104026105c0366004614c06565b612024565b61040261209c565b6104026105db366004614812565b6120b0565b6104026105ee366004614c23565b612328565b606954610417906001600160401b031681565b610649610614366004614cc1565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103c9565b60725461041790600160c01b90046001600160401b031681565b61041762093a8081565b6104026106a6366004614ce8565b6123b7565b6033546001600160a01b0316610455565b61047661242e565b6104026106d2366004614812565b612511565b610476600c81565b607454610476565b607054610455906001600160a01b031681565b6065546104179061010090046001600160401b031681565b6104176206978081565b606c5461041790600160a81b90046001600160401b031681565b60655461074b90600160481b900461ffff1681565b60405161ffff90911681526020016103c9565b61079961076c366004614812565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103c9565b60655461045590600160581b90046001600160a01b031681565b610417612657565b6104026107ee366004614d05565b6126a4565b610402610801366004614812565b61270a565b60695461045590600160401b90046001600160a01b031681565b606c54610455906001600160a01b031681565b610402610841366004614d39565b61278b565b606c546103df90600160a01b900460ff1681565b60725461041790600160801b90046001600160401b031681565b610402612c55565b61040261088a366004614c23565b612d11565b6104176103e881565b60685461041790600160c01b90046001600160401b031681565b606b54610455906001600160a01b031681565b6104026108d3366004614e2b565b612e56565b6104026108e6366004614a8d565b61317e565b6104026108f9366004614c06565b61329e565b61040261090c366004614c06565b613316565b607354610455906001600160a01b031681565b61047660745481565b606f805461093a90614e6f565b80601f016020809104026020016040519081016040528092919081815260200182805461096690614e6f565b80156109b35780601f10610988576101008083540402835291602001916109b3565b820191906000526020600020905b81548152906001019060200180831161099657829003601f168201915b505050505081565b6073546001600160a01b031633146109ee5760405162461bcd60e51b81526004016109e590614ea9565b60405180910390fd5b6103e88161ffff16118015610a0857506104008161ffff16105b610a8d5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a4b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a4016109e5565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610b1c57508115155b610b90576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e5565b80610c05576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e5565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610cc692600160801b90920481169116614f02565b6001600160401b0316111592915050565b6073546001600160a01b03163314610d015760405162461bcd60e51b81526004016109e590614ea9565b62093a806001600160401b0382161115610d2d5760405162461bcd60e51b81526004016109e590614f2d565b60655460ff16610dd0576072546001600160401b03600160c01b909104811690821610610dd05760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a4b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109e5565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610adf565b60655460ff1615610e495760405162461bcd60e51b81526004016109e590614f98565b606954600160401b90046001600160a01b03163314610ed05760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e63657200000000000060648201526084016109e5565b805180610f455760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e6365203120626174636800000060648201526084016109e5565b6103e88110610fbe576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e79206261746368657360648201526084016109e5565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561145e57600087828151811061101157611011615000565b60200260200101519050600081606001516001600160401b031611156111ca578361103b81615016565b9450506000816000015180519060200120826020015183606001516040516020016110689392919061503c565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461110e5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d6174636800000060648201526084016109e5565b81606001516001600160401b031682604001516001600160401b031610156111c45760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a4016109e5565b50611351565b602081015115806112535750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b36329161120d9160040190815260200190565b6020604051808303816000875af115801561122c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611250919061505f565b15155b6112c55760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d75737420657869737400000000000060648201526084016109e5565b80515161ea60116113515760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a4016109e5565b856001600160401b031681604001516001600160401b03161015801561138457504281604001516001600160401b031611155b6113f65760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e676500000060648201526084016109e5565b8051805160209182012081830151604080850151905161141d948894939291339101615078565b604051602081830303815290604052805190602001209250848061144090615016565b95505080604001519550508080611456906150bc565b915050610ff5565b506068546001600160401b03600160c01b909104811690831611156114e35760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b60648201526084016109e5565b60685460009061150390600160801b90046001600160401b0316846150d5565b611516906001600160401b0316876150fd565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115eb903390309084906115d09190615114565b606554600160581b90046001600160a01b031692919061338c565b6115f36133f7565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff161561165d5760405162461bcd60e51b81526004016109e590614f98565b6072546001600160401b03878116600090815260676020526040902060010154429261169492600160c01b90910481169116614f02565b6001600160401b0316111561171d5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a4016109e5565b6103e861172a88886150d5565b6001600160401b0316106117a65760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e7920626174636865730000000060648201526084016109e5565b6117b6888888888888888861349b565b6117bf866139d9565b607254600160801b90046001600160401b0316600003611887576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561182457607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561186a57600080fd5b505af115801561187e573d6000803e3d6000fd5b50505050611938565b61188f6133f7565b607280546001600160401b03169060006118a883615016565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b038116158015906119b057506072546001600160401b03600160401b9091048116908216115b80156119cb57506072546001600160401b0390811690821611155b611a495760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a4016109e5565b606a546001600160a01b03163314611af357611a6481610c90565b611af35760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a4016109e5565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d9094529382902092909255607280546fffffffffffffffff000000000000000019169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611bb557600080fd5b505af1158015611bc9573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611c1691815260200190565b60405180910390a3505050565b606e805461093a90614e6f565b600054610100900460ff1615808015611c505750600054600160ff909116105b80611c6a5750303b158015611c6a575060005460ff166001145b611ccd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109e5565b6000805460ff191660011790558015611cf0576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611d6d6020860186614c06565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d9d6060860160408701614c06565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611dd860c0860160a08701614c06565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611e3560e0860160c08701614812565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611e6c6040860160208701614812565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611ea86080860160608701614812565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611ee460a0860160808701614ce8565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611f0c8482615179565b50606f611f198382615179565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611f4f613bbf565b8015611f95576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611fca5760405162461bcd60e51b81526004016109e590614ea9565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610adf565b6073546001600160a01b0316331461204e5760405162461bcd60e51b81526004016109e590614ea9565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190602001610adf565b6120a4613c33565b6120ae6000613c8d565b565b6033546001600160a01b0316331461231d576072546000906001600160401b03161561210157506072546001600160401b03908116600090815260716020526040902054600160401b90041661210f565b506069546001600160401b03165b80826001600160401b03161161218d5760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c72656164792076657269666965640000000060648201526084016109e5565b6068546001600160401b03600160401b9091048116908316118015906121cf57506001600160401b038083166000908152606760205260409020600101541615155b61225a5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a4016109e5565b6001600160401b0380831660009081526067602052604090206001015442916122889162093a809116614f02565b6001600160401b0316111561231b5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a4016109e5565b505b612325613cdf565b50565b60655460ff161561234b5760405162461bcd60e51b81526004016109e590614f98565b61235c898989898989898989613d4f565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f95613cdf565b6073546001600160a01b031633146123e15760405162461bcd60e51b81526004016109e590614ea9565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610adf90831515815260200190565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612481573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a5919061505f565b905060006124b1612657565b6068546001600160401b03600160401b82048116916124e191600160801b8204811691600160c01b9004166150d5565b6124eb9190614f02565b6124f591906150d5565b6001600160401b0316905061250a818361524e565b9250505090565b6073546001600160a01b0316331461253b5760405162461bcd60e51b81526004016109e590614ea9565b62093a806001600160401b03821611156125675760405162461bcd60e51b81526004016109e590614f2d565b60655460ff166125fc576072546001600160401b03600160801b9091048116908216106125fc5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f7765720060648201526084016109e5565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610adf565b6072546000906001600160401b03161561269457506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126ce5760405162461bcd60e51b81526004016109e590614ea9565b606e6126da8282615179565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610adf919061476b565b6073546001600160a01b031633146127345760405162461bcd60e51b81526004016109e590614ea9565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610adf565b60655460ff16156127ae5760405162461bcd60e51b81526004016109e590614f98565b606c54600160a01b900460ff1615156001146127dc5760405162461bcd60e51b81526004016109e590615262565b80518061283f5760405162461bcd60e51b815260206004820152603d60248201526000805160206155ae83398151915260448201527f3a204d75737420666f726365206174206c65617374203120626174636800000060648201526084016109e5565b6103e881106128b05760405162461bcd60e51b815260206004820152604360248201526000805160206155ae83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a4016109e5565b6068546001600160401b03600160c01b82048116916128d8918491600160801b9004166152cb565b11156129325760405162461bcd60e51b815260206004820152603560248201526000805160206155ae8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b60648201526084016109e5565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612b5e57600086828151811061297f5761297f615000565b60200260200101519050838061299490615016565b9450506000816000015180519060200120826020015183604001516040516020016129c19392919061503c565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612a605760405162461bcd60e51b815260206004820152604260248201526000805160206155ae83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109e5565b612a6b6001886150fd565b8303612b005742620697808360400151612a859190614f02565b6001600160401b03161115612b005760405162461bcd60e51b815260206004820152604760248201526000805160206155ae83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a4016109e5565b8151805160209182012081840151604051612b2393889392914291339101615078565b6040516020818303038152906040528051906020012093508580612b4690615016565b96505050508080612b56906150bc565b915050612963565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612c775760405162461bcd60e51b81526004016109e5906152e3565b6073546001600160a01b03163314612ca15760405162461bcd60e51b81526004016109e590614ea9565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612cf157600080fd5b505af1158015612d05573d6000803e3d6000fd5b505050506120ae6143ca565b606a546001600160a01b03163314612d3b5760405162461bcd60e51b81526004016109e590615340565b612d4c898989898989898989613d4f565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612d9757607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612ddd57600080fd5b505af1158015612df1573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612e795760405162461bcd60e51b81526004016109e590614f98565b606c54600160a01b900460ff161515600114612ea75760405162461bcd60e51b81526004016109e590615262565b6000612eb260745490565b905081811115612f175760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b60648201526084016109e5565b61ea60835110612f875760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b60648201526084016109e5565b606554612fa690600160581b90046001600160a01b031633308461338c565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015612ff0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613014919061505f565b60688054919250600160c01b9091046001600160401b031690601861303883615016565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016130799392919061503c565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361311d57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613178565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161316f9392919061539d565b60405180910390a25b50505050565b606a546001600160a01b031633146131a85760405162461bcd60e51b81526004016109e590615340565b6131b8888888888888888861349b565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561320357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561324957600080fd5b505af115801561325d573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611971565b6073546001600160a01b031633146132c85760405162461bcd60e51b81526004016109e590614ea9565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001610adf565b61331e613c33565b6001600160a01b0381166133835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e5565b61232581613c8d565b6040516001600160a01b03808516602483015283166044820152606481018290526131789085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614421565b6072546001600160401b03600160401b82048116911611156120ae5760725460009061343490600160401b90046001600160401b03166001614f02565b905061343f81610c90565b15612325576072546000906002906134619084906001600160401b03166150d5565b61346b91906153d0565b6134759083614f02565b905061348081610c90565b156134925761348e81611983565b5050565b61348e82611983565b6000806134a6612657565b90506001600160401b038a1615613621576072546001600160401b03908116908b1611156135625760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2070656e60448201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560648201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608482015260a4016109e5565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b909204161461361b5760405162461bcd60e51b815260206004820152604c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760648201526b040e6e8c2e8ca40c4c2e8c6d60a31b608482015260a4016109e5565b50613769565b6001600160401b0389166000908152606d60205260409020549150816136bb5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786064820152621a5cdd60ea1b608482015260a4016109e5565b806001600160401b0316896001600160401b031611156137695760405162461bcd60e51b815260206004820152605d60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060648201527f7468616e2063757272656e744c61737456657269666965644261746368000000608482015260a4016109e5565b806001600160401b0316886001600160401b0316116138165760405162461bcd60e51b815260206004820152605760248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2066696e60448201527f616c4e65774261746368206d75737420626520626967676572207468616e206360648201527f757272656e744c61737456657269666965644261746368000000000000000000608482015260a4016109e5565b60006138258a8a8a868b610aea565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161385a91906153f6565b602060405180830381855afa158015613877573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061389a919061505f565b6138a49190615412565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916138e8918b918b918b9190600401615426565b602060405180830381865afa158015613905573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392991906154a0565b6139885760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20494e5660448201526920a624a22fa82927a7a360b11b60648201526084016109e5565b6139cb33613996858d6150d5565b6001600160401b03166139a761242e565b6139b19190615114565b606554600160581b90046001600160a01b031691906144f8565b505050505050505050505050565b60006139e3612657565b9050816000806139f384846150d5565b6001600160401b031690505b836001600160401b0316836001600160401b031614613aa5576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613a4f9116426150fd565b1115613a8a576001810154613a7490600160401b90046001600160401b0316866150d5565b613a87906001600160401b0316846152cb565b92505b60010154600160401b90046001600160401b031692506139ff565b6000613ab183836150fd565b905082811015613b2b576000613ac782856150fd565b9050600c8111613ad75780613ada565b600c5b9050613ae7816003615114565b613af290600a6155a1565b606554613b0b908390600160481b900461ffff166155a1565b607454613b189190615114565b613b22919061524e565b60745550613bb7565b6000613b3784836150fd565b9050600c8111613b475780613b4a565b600c5b90506000613b59826003615114565b613b6490600a6155a1565b606554613b7d908490600160481b900461ffff166155a1565b607454613b8a9190615114565b613b94919061524e565b905080607454607454613ba79190615114565b613bb1919061524e565b60745550505b505050505050565b600054610100900460ff16613c2a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109e5565b6120ae33613c8d565b6033546001600160a01b031633146120ae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109e5565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d2f57600080fd5b505af1158015613d43573d6000803e3d6000fd5b505050506120ae614528565b60006001600160401b038a1615613eca576072546001600160401b03908116908b161115613e0e5760405162461bcd60e51b815260206004820152606c60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c4016109e5565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613ec45760405162461bcd60e51b815260206004820152606060248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a4016109e5565b5061401e565b506001600160401b0387166000908152606d602052604090205480613f6b5760405162461bcd60e51b815260206004820152605760248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a4016109e5565b6069546001600160401b03908116908916111561401e5760405162461bcd60e51b815260206004820152607160248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c4016109e5565b6072546001600160401b03908116908a161180159061404e5750896001600160401b0316896001600160401b0316115b801561406f57506072546001600160401b03600160401b9091048116908a16115b6140e75760405162461bcd60e51b815260206004820152604f60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a4016109e5565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146141a75760405162461bcd60e51b815260206004820152606a60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c4016109e5565b60006141b6898989858a610aea565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516141eb91906153f6565b602060405180830381855afa158015614208573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061422b919061505f565b6142359190615412565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614279918a918a918a9190600401615426565b602060405180830381865afa158015614296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ba91906154a0565b61431a5760405162461bcd60e51b815260206004820152603e60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20494e56414c49445f50524f4f46000060648201526084016109e5565b6001600160401b038b166000908152607160205260409020600201548790036139cb5760405162461bcd60e51b815260206004820152606260248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c4016109e5565b60655460ff166143ec5760405162461bcd60e51b81526004016109e5906152e3565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614476826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145839092919063ffffffff16565b8051909150156144f3578080602001905181019061449491906154a0565b6144f35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109e5565b505050565b6040516001600160a01b0383166024820152604481018290526144f390849063a9059cbb60e01b906064016133c0565b60655460ff161561454b5760405162461bcd60e51b81526004016109e590614f98565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614592848460008561459a565b949350505050565b6060824710156145fb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109e5565b600080866001600160a01b0316858760405161461791906153f6565b60006040518083038185875af1925050503d8060008114614654576040519150601f19603f3d011682016040523d82523d6000602084013e614659565b606091505b509150915061466a87838387614675565b979650505050505050565b606083156146e45782516000036146dd576001600160a01b0385163b6146dd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109e5565b5081614592565b61459283838151156146f95781518083602001fd5b8060405162461bcd60e51b81526004016109e5919061476b565b60005b8381101561472e578181015183820152602001614716565b838111156131785750506000910152565b60008151808452614757816020860160208601614713565b601f01601f19169290920160200192915050565b60208152600061477e602083018461473f565b9392505050565b60006020828403121561479757600080fd5b813561ffff8116811461477e57600080fd5b80356001600160401b03811681146147c057600080fd5b919050565b600080600080600060a086880312156147dd57600080fd5b6147e6866147a9565b94506147f4602087016147a9565b94979496505050506040830135926060810135926080909101359150565b60006020828403121561482457600080fd5b61477e826147a9565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156148655761486561482d565b60405290565b604051606081016001600160401b03811182821017156148655761486561482d565b604051601f8201601f191681016001600160401b03811182821017156148b5576148b561482d565b604052919050565b60006001600160401b038211156148d6576148d661482d565b5060051b60200190565b600082601f8301126148f157600080fd5b81356001600160401b0381111561490a5761490a61482d565b61491d601f8201601f191660200161488d565b81815284602083860101111561493257600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561496257600080fd5b82356001600160401b038082111561497957600080fd5b818501915085601f83011261498d57600080fd5b81356149a061499b826148bd565b61488d565b81815260059190911b830184019084810190888311156149bf57600080fd5b8585015b83811015614a58578035858111156149db5760008081fd5b86016080818c03601f19018113156149f35760008081fd5b6149fb614843565b8983013588811115614a0d5760008081fd5b614a1b8e8c838701016148e0565b8252506040808401358b8301526060614a358186016147a9565b82840152614a448486016147a9565b9083015250855250509186019186016149c3565b5098975050505050505050565b8060408101831015614a7657600080fd5b92915050565b8060808101831015614a7657600080fd5b6000806000806000806000806101a0898b031215614aaa57600080fd5b614ab3896147a9565b9750614ac160208a016147a9565b9650614acf60408a016147a9565b95506060890135945060808901359350614aec8a60a08b01614a65565b9250614afb8a60e08b01614a7c565b9150614b0b8a6101608b01614a65565b90509295985092959890939650565b6001600160a01b038116811461232557600080fd5b600080600080600080600080888a036101c0811215614b4d57600080fd5b8935614b5881614b1a565b985060208a0135614b6881614b1a565b975060408a0135614b7881614b1a565b965060608a0135614b8881614b1a565b955060e0607f1982011215614b9c57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614bc657600080fd5b614bd28c838d016148e0565b93506101a08b0135915080821115614be957600080fd5b50614bf68b828c016148e0565b9150509295985092959890939650565b600060208284031215614c1857600080fd5b813561477e81614b1a565b60008060008060008060008060006101c08a8c031215614c4257600080fd5b614c4b8a6147a9565b9850614c5960208b016147a9565b9750614c6760408b016147a9565b9650614c7560608b016147a9565b955060808a0135945060a08a01359350614c928b60c08c01614a65565b9250614ca28b6101008c01614a7c565b9150614cb28b6101808c01614a65565b90509295985092959850929598565b600060208284031215614cd357600080fd5b5035919050565b801515811461232557600080fd5b600060208284031215614cfa57600080fd5b813561477e81614cda565b600060208284031215614d1757600080fd5b81356001600160401b03811115614d2d57600080fd5b614592848285016148e0565b60006020808385031215614d4c57600080fd5b82356001600160401b0380821115614d6357600080fd5b818501915085601f830112614d7757600080fd5b8135614d8561499b826148bd565b81815260059190911b83018401908481019088831115614da457600080fd5b8585015b83811015614a5857803585811115614dc05760008081fd5b86016060818c03601f1901811315614dd85760008081fd5b614de061486b565b8983013588811115614df25760008081fd5b614e008e8c838701016148e0565b8252506040808401358b830152614e188385016147a9565b9082015285525050918601918601614da8565b60008060408385031215614e3e57600080fd5b82356001600160401b03811115614e5457600080fd5b614e60858286016148e0565b95602094909401359450505050565b600181811c90821680614e8357607f821691505b602082108103614ea357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614f2457614f24614eec565b01949350505050565b60208082526045908201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361503257615032614eec565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b60006020828403121561507157600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b6000600182016150ce576150ce614eec565b5060010190565b60006001600160401b03838116908316818110156150f5576150f5614eec565b039392505050565b60008282101561510f5761510f614eec565b500390565b600081600019048311821515161561512e5761512e614eec565b500290565b601f8211156144f357600081815260208120601f850160051c8101602086101561515a5750805b601f850160051c820191505b81811015613bb757828155600101615166565b81516001600160401b038111156151925761519261482d565b6151a6816151a08454614e6f565b84615133565b602080601f8311600181146151db57600084156151c35750858301515b600019600386901b1c1916600185901b178555613bb7565b600085815260208120601f198616915b8281101561520a578886015182559484019460019091019084016151eb565b50858210156152285787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b60008261525d5761525d615238565b500490565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b600082198211156152de576152de614eec565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b03831660208201526060604082018190526000906153c79083018461473f565b95945050505050565b60006001600160401b03808416806153ea576153ea615238565b92169190910492915050565b60008251615408818460208701614713565b9190910192915050565b60008261542157615421615238565b500690565b61012081016040808784376000838201818152879190815b600281101561545e5784848337908401828152928401929060010161543e565b5050828760c0870137610100850181815286935091505b6001811015615494578251825260209283019290910190600101615475565b50505095945050505050565b6000602082840312156154b257600080fd5b815161477e81614cda565b600181815b808511156154f85781600019048211156154de576154de614eec565b808516156154eb57918102915b93841c93908002906154c2565b509250929050565b60008261550f57506001614a76565b8161551c57506000614a76565b8160018114615532576002811461553c57615558565b6001915050614a76565b60ff84111561554d5761554d614eec565b50506001821b614a76565b5060208310610133831016604e8410600b841016171561557b575081810a614a76565b61558583836154bd565b806000190482111561559957615599614eec565b029392505050565b600061477e838361550056fe506f6c79676f6e5a4b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a4b45564d3a3a70726f76654e6f6e44657465726d696e6973a26469706673582212208865f0638a4efbefd35b06681d425aa7b9537afd92181c6a9cb443be8584550964736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5061562380620000216000396000f3fe608060405234801561001057600080fd5b50600436106103af5760003560e01c80638da5cb5b116101f4578063cfa8ed471161011a578063e7a7ed02116100ad578063f14916d61161007c578063f14916d6146108eb578063f2fde38b146108fe578063f851a44014610911578063f8b823e41461092457600080fd5b8063e7a7ed0214610898578063e8bf92ed146108b2578063eaeb077b146108c5578063edc41121146108d857600080fd5b8063d939b315116100e9578063d939b3151461085a578063dbc1697614610874578063e11f3f181461087c578063e217cfd61461088f57600080fd5b8063cfa8ed4714610806578063d02103ca14610820578063d8d1091b14610833578063d8f54db01461084657600080fd5b8063ab9fc5ef11610192578063b6b0b09711610161578063b6b0b097146107be578063c0ed84e0146107d8578063c89e42df146107e0578063cf136306146107f357600080fd5b8063ab9fc5ef14610712578063adc879e91461071c578063afd23cbe14610736578063b4d63f581461075e57600080fd5b80639eb831b9116101ce5780639eb831b9146106d75780639f0d039d146106df578063a3c573eb146106e7578063aa58bad6146106fa57600080fd5b80638da5cb5b146106ab57806399f5634e146106bc5780639c9f3dfe146106c457600080fd5b80634a910e6a116102d9578063715018a611610277578063837a473811610246578063837a473814610606578063841b24d7146106745780638b48931e1461068e5780638c4a0af71461069857600080fd5b8063715018a6146105c55780637215541a146105cd57806375c508b3146105e05780637fcb3653146105f357600080fd5b806360943d6a116102b357806360943d6a1461056c5780636b8616ce1461057f5780636ff512cc1461059f578063704b6c02146105b257600080fd5b80634a910e6a146105315780635392c5e014610544578063542028d51461056457600080fd5b8063383b3be811610351578063456052671161032057806345605267146104d7578063458c0477146104f15780634834a343146105045780634a1a89a71461051757600080fd5b8063383b3be814610484578063394218e9146104975780633c158267146104aa578063423fa856146104bd57600080fd5b806319d8ac611161038d57806319d8ac6114610404578063220d78991461042f57806329878983146104425780632d0889d31461046d57600080fd5b8063107bf28c146103b457806315064c96146103d25780631816b7e5146103ef575b600080fd5b6103bc61092d565b6040516103c9919061476b565b60405180910390f35b6065546103df9060ff1681565b60405190151581526020016103c9565b6104026103fd366004614785565b6109bb565b005b606854610417906001600160401b031681565b6040516001600160401b0390911681526020016103c9565b6103bc61043d3660046147c5565b610aea565b606a54610455906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b61047661ea6081565b6040519081526020016103c9565b6103df610492366004614812565b610c90565b6104026104a5366004614812565b610cd7565b6104026104b836600461494f565b610e26565b60685461041790600160401b90046001600160401b031681565b60685461041790600160801b90046001600160401b031681565b607254610417906001600160401b031681565b610402610512366004614a8d565b61163a565b60725461041790600160401b90046001600160401b031681565b61040261053f366004614812565b611983565b610476610552366004614812565b606d6020526000908152604090205481565b6103bc611c23565b61040261057a366004614b2f565b611c30565b61047661058d366004614812565b60666020526000908152604090205481565b6104026105ad366004614c06565b611fa0565b6104026105c0366004614c06565b612024565b61040261209c565b6104026105db366004614812565b6120b0565b6104026105ee366004614c23565b612328565b606954610417906001600160401b031681565b610649610614366004614cc1565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103c9565b60725461041790600160c01b90046001600160401b031681565b61041762093a8081565b6104026106a6366004614ce8565b6123b7565b6033546001600160a01b0316610455565b61047661242e565b6104026106d2366004614812565b612511565b610476600c81565b607454610476565b607054610455906001600160a01b031681565b6065546104179061010090046001600160401b031681565b6104176206978081565b606c5461041790600160a81b90046001600160401b031681565b60655461074b90600160481b900461ffff1681565b60405161ffff90911681526020016103c9565b61079961076c366004614812565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103c9565b60655461045590600160581b90046001600160a01b031681565b610417612657565b6104026107ee366004614d05565b6126a4565b610402610801366004614812565b61270a565b60695461045590600160401b90046001600160a01b031681565b606c54610455906001600160a01b031681565b610402610841366004614d39565b61278b565b606c546103df90600160a01b900460ff1681565b60725461041790600160801b90046001600160401b031681565b610402612c55565b61040261088a366004614c23565b612d11565b6104176103e881565b60685461041790600160c01b90046001600160401b031681565b606b54610455906001600160a01b031681565b6104026108d3366004614e2b565b612e56565b6104026108e6366004614a8d565b61317e565b6104026108f9366004614c06565b61329e565b61040261090c366004614c06565b613316565b607354610455906001600160a01b031681565b61047660745481565b606f805461093a90614e6f565b80601f016020809104026020016040519081016040528092919081815260200182805461096690614e6f565b80156109b35780601f10610988576101008083540402835291602001916109b3565b820191906000526020600020905b81548152906001019060200180831161099657829003601f168201915b505050505081565b6073546001600160a01b031633146109ee5760405162461bcd60e51b81526004016109e590614ea9565b60405180910390fd5b6103e88161ffff16118015610a0857506104008161ffff16105b610a8d5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a4016109e5565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610b1c57508115155b610b90576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e5565b80610c05576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e5565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610cc692600160801b90920481169116614f02565b6001600160401b0316111592915050565b6073546001600160a01b03163314610d015760405162461bcd60e51b81526004016109e590614ea9565b62093a806001600160401b0382161115610d2d5760405162461bcd60e51b81526004016109e590614f2d565b60655460ff16610dd0576072546001600160401b03600160c01b909104811690821610610dd05760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109e5565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610adf565b60655460ff1615610e495760405162461bcd60e51b81526004016109e590614f98565b606954600160401b90046001600160a01b03163314610ed05760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e63657200000000000060648201526084016109e5565b805180610f455760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e6365203120626174636800000060648201526084016109e5565b6103e88110610fbe576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e79206261746368657360648201526084016109e5565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561145e57600087828151811061101157611011615000565b60200260200101519050600081606001516001600160401b031611156111ca578361103b81615016565b9450506000816000015180519060200120826020015183606001516040516020016110689392919061503c565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461110e5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d6174636800000060648201526084016109e5565b81606001516001600160401b031682604001516001600160401b031610156111c45760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a4016109e5565b50611351565b602081015115806112535750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b36329161120d9160040190815260200190565b6020604051808303816000875af115801561122c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611250919061505f565b15155b6112c55760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d75737420657869737400000000000060648201526084016109e5565b80515161ea60116113515760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a4016109e5565b856001600160401b031681604001516001600160401b03161015801561138457504281604001516001600160401b031611155b6113f65760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e676500000060648201526084016109e5565b8051805160209182012081830151604080850151905161141d948894939291339101615078565b604051602081830303815290604052805190602001209250848061144090615016565b95505080604001519550508080611456906150bc565b915050610ff5565b506068546001600160401b03600160c01b909104811690831611156114e35760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b60648201526084016109e5565b60685460009061150390600160801b90046001600160401b0316846150d5565b611516906001600160401b0316876150fd565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115eb903390309084906115d09190615114565b606554600160581b90046001600160a01b031692919061338c565b6115f36133f7565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff161561165d5760405162461bcd60e51b81526004016109e590614f98565b6072546001600160401b03878116600090815260676020526040902060010154429261169492600160c01b90910481169116614f02565b6001600160401b0316111561171d5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a4016109e5565b6103e861172a88886150d5565b6001600160401b0316106117a65760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e7920626174636865730000000060648201526084016109e5565b6117b6888888888888888861349b565b6117bf866139d9565b607254600160801b90046001600160401b0316600003611887576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561182457607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561186a57600080fd5b505af115801561187e573d6000803e3d6000fd5b50505050611938565b61188f6133f7565b607280546001600160401b03169060006118a883615016565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b038116158015906119b057506072546001600160401b03600160401b9091048116908216115b80156119cb57506072546001600160401b0390811690821611155b611a495760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a4016109e5565b606a546001600160a01b03163314611af357611a6481610c90565b611af35760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a4016109e5565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d9094529382902092909255607280546fffffffffffffffff000000000000000019169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611bb557600080fd5b505af1158015611bc9573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611c1691815260200190565b60405180910390a3505050565b606e805461093a90614e6f565b600054610100900460ff1615808015611c505750600054600160ff909116105b80611c6a5750303b158015611c6a575060005460ff166001145b611ccd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109e5565b6000805460ff191660011790558015611cf0576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611d6d6020860186614c06565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d9d6060860160408701614c06565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611dd860c0860160a08701614c06565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611e3560e0860160c08701614812565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611e6c6040860160208701614812565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611ea86080860160608701614812565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611ee460a0860160808701614ce8565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611f0c8482615179565b50606f611f198382615179565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611f4f613bbf565b8015611f95576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611fca5760405162461bcd60e51b81526004016109e590614ea9565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610adf565b6073546001600160a01b0316331461204e5760405162461bcd60e51b81526004016109e590614ea9565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190602001610adf565b6120a4613c33565b6120ae6000613c8d565b565b6033546001600160a01b0316331461231d576072546000906001600160401b03161561210157506072546001600160401b03908116600090815260716020526040902054600160401b90041661210f565b506069546001600160401b03165b80826001600160401b03161161218d5760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c72656164792076657269666965640000000060648201526084016109e5565b6068546001600160401b03600160401b9091048116908316118015906121cf57506001600160401b038083166000908152606760205260409020600101541615155b61225a5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a4016109e5565b6001600160401b0380831660009081526067602052604090206001015442916122889162093a809116614f02565b6001600160401b0316111561231b5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a4016109e5565b505b612325613cdf565b50565b60655460ff161561234b5760405162461bcd60e51b81526004016109e590614f98565b61235c898989898989898989613d4f565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f95613cdf565b6073546001600160a01b031633146123e15760405162461bcd60e51b81526004016109e590614ea9565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610adf90831515815260200190565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612481573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a5919061505f565b905060006124b1612657565b6068546001600160401b03600160401b82048116916124e191600160801b8204811691600160c01b9004166150d5565b6124eb9190614f02565b6124f591906150d5565b6001600160401b0316905061250a818361524e565b9250505090565b6073546001600160a01b0316331461253b5760405162461bcd60e51b81526004016109e590614ea9565b62093a806001600160401b03821611156125675760405162461bcd60e51b81526004016109e590614f2d565b60655460ff166125fc576072546001600160401b03600160801b9091048116908216106125fc5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f7765720060648201526084016109e5565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610adf565b6072546000906001600160401b03161561269457506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126ce5760405162461bcd60e51b81526004016109e590614ea9565b606e6126da8282615179565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610adf919061476b565b6073546001600160a01b031633146127345760405162461bcd60e51b81526004016109e590614ea9565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610adf565b60655460ff16156127ae5760405162461bcd60e51b81526004016109e590614f98565b606c54600160a01b900460ff1615156001146127dc5760405162461bcd60e51b81526004016109e590615262565b80518061283f5760405162461bcd60e51b815260206004820152603d60248201526000805160206155ae83398151915260448201527f3a204d75737420666f726365206174206c65617374203120626174636800000060648201526084016109e5565b6103e881106128b05760405162461bcd60e51b815260206004820152604360248201526000805160206155ae83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a4016109e5565b6068546001600160401b03600160c01b82048116916128d8918491600160801b9004166152cb565b11156129325760405162461bcd60e51b815260206004820152603560248201526000805160206155ae8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b60648201526084016109e5565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612b5e57600086828151811061297f5761297f615000565b60200260200101519050838061299490615016565b9450506000816000015180519060200120826020015183604001516040516020016129c19392919061503c565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612a605760405162461bcd60e51b815260206004820152604260248201526000805160206155ae83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109e5565b612a6b6001886150fd565b8303612b005742620697808360400151612a859190614f02565b6001600160401b03161115612b005760405162461bcd60e51b815260206004820152604760248201526000805160206155ae83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a4016109e5565b8151805160209182012081840151604051612b2393889392914291339101615078565b6040516020818303038152906040528051906020012093508580612b4690615016565b96505050508080612b56906150bc565b915050612963565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612c775760405162461bcd60e51b81526004016109e5906152e3565b6073546001600160a01b03163314612ca15760405162461bcd60e51b81526004016109e590614ea9565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612cf157600080fd5b505af1158015612d05573d6000803e3d6000fd5b505050506120ae6143ca565b606a546001600160a01b03163314612d3b5760405162461bcd60e51b81526004016109e590615340565b612d4c898989898989898989613d4f565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612d9757607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612ddd57600080fd5b505af1158015612df1573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612e795760405162461bcd60e51b81526004016109e590614f98565b606c54600160a01b900460ff161515600114612ea75760405162461bcd60e51b81526004016109e590615262565b6000612eb260745490565b905081811115612f175760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b60648201526084016109e5565b61ea60835110612f875760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b60648201526084016109e5565b606554612fa690600160581b90046001600160a01b031633308461338c565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015612ff0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613014919061505f565b60688054919250600160c01b9091046001600160401b031690601861303883615016565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016130799392919061503c565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361311d57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613178565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161316f9392919061539d565b60405180910390a25b50505050565b606a546001600160a01b031633146131a85760405162461bcd60e51b81526004016109e590615340565b6131b8888888888888888861349b565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561320357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561324957600080fd5b505af115801561325d573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611971565b6073546001600160a01b031633146132c85760405162461bcd60e51b81526004016109e590614ea9565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001610adf565b61331e613c33565b6001600160a01b0381166133835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e5565b61232581613c8d565b6040516001600160a01b03808516602483015283166044820152606481018290526131789085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614421565b6072546001600160401b03600160401b82048116911611156120ae5760725460009061343490600160401b90046001600160401b03166001614f02565b905061343f81610c90565b15612325576072546000906002906134619084906001600160401b03166150d5565b61346b91906153d0565b6134759083614f02565b905061348081610c90565b156134925761348e81611983565b5050565b61348e82611983565b6000806134a6612657565b90506001600160401b038a1615613621576072546001600160401b03908116908b1611156135625760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2070656e60448201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560648201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608482015260a4016109e5565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b909204161461361b5760405162461bcd60e51b815260206004820152604c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760648201526b040e6e8c2e8ca40c4c2e8c6d60a31b608482015260a4016109e5565b50613769565b6001600160401b0389166000908152606d60205260409020549150816136bb5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786064820152621a5cdd60ea1b608482015260a4016109e5565b806001600160401b0316896001600160401b031611156137695760405162461bcd60e51b815260206004820152605d60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060648201527f7468616e2063757272656e744c61737456657269666965644261746368000000608482015260a4016109e5565b806001600160401b0316886001600160401b0316116138165760405162461bcd60e51b815260206004820152605760248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2066696e60448201527f616c4e65774261746368206d75737420626520626967676572207468616e206360648201527f757272656e744c61737456657269666965644261746368000000000000000000608482015260a4016109e5565b60006138258a8a8a868b610aea565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161385a91906153f6565b602060405180830381855afa158015613877573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061389a919061505f565b6138a49190615412565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916138e8918b918b918b9190600401615426565b602060405180830381865afa158015613905573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392991906154a0565b6139885760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20494e5660448201526920a624a22fa82927a7a360b11b60648201526084016109e5565b6139cb33613996858d6150d5565b6001600160401b03166139a761242e565b6139b19190615114565b606554600160581b90046001600160a01b031691906144f8565b505050505050505050505050565b60006139e3612657565b9050816000806139f384846150d5565b6001600160401b031690505b836001600160401b0316836001600160401b031614613aa5576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613a4f9116426150fd565b1115613a8a576001810154613a7490600160401b90046001600160401b0316866150d5565b613a87906001600160401b0316846152cb565b92505b60010154600160401b90046001600160401b031692506139ff565b6000613ab183836150fd565b905082811015613b2b576000613ac782856150fd565b9050600c8111613ad75780613ada565b600c5b9050613ae7816003615114565b613af290600a6155a1565b606554613b0b908390600160481b900461ffff166155a1565b607454613b189190615114565b613b22919061524e565b60745550613bb7565b6000613b3784836150fd565b9050600c8111613b475780613b4a565b600c5b90506000613b59826003615114565b613b6490600a6155a1565b606554613b7d908490600160481b900461ffff166155a1565b607454613b8a9190615114565b613b94919061524e565b905080607454607454613ba79190615114565b613bb1919061524e565b60745550505b505050505050565b600054610100900460ff16613c2a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109e5565b6120ae33613c8d565b6033546001600160a01b031633146120ae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109e5565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d2f57600080fd5b505af1158015613d43573d6000803e3d6000fd5b505050506120ae614528565b60006001600160401b038a1615613eca576072546001600160401b03908116908b161115613e0e5760405162461bcd60e51b815260206004820152606c60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c4016109e5565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613ec45760405162461bcd60e51b815260206004820152606060248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a4016109e5565b5061401e565b506001600160401b0387166000908152606d602052604090205480613f6b5760405162461bcd60e51b815260206004820152605760248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a4016109e5565b6069546001600160401b03908116908916111561401e5760405162461bcd60e51b815260206004820152607160248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c4016109e5565b6072546001600160401b03908116908a161180159061404e5750896001600160401b0316896001600160401b0316115b801561406f57506072546001600160401b03600160401b9091048116908a16115b6140e75760405162461bcd60e51b815260206004820152604f60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a4016109e5565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146141a75760405162461bcd60e51b815260206004820152606a60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c4016109e5565b60006141b6898989858a610aea565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516141eb91906153f6565b602060405180830381855afa158015614208573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061422b919061505f565b6142359190615412565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614279918a918a918a9190600401615426565b602060405180830381865afa158015614296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ba91906154a0565b61431a5760405162461bcd60e51b815260206004820152603e60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20494e56414c49445f50524f4f46000060648201526084016109e5565b6001600160401b038b166000908152607160205260409020600201548790036139cb5760405162461bcd60e51b815260206004820152606260248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c4016109e5565b60655460ff166143ec5760405162461bcd60e51b81526004016109e5906152e3565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614476826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145839092919063ffffffff16565b8051909150156144f3578080602001905181019061449491906154a0565b6144f35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109e5565b505050565b6040516001600160a01b0383166024820152604481018290526144f390849063a9059cbb60e01b906064016133c0565b60655460ff161561454b5760405162461bcd60e51b81526004016109e590614f98565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614592848460008561459a565b949350505050565b6060824710156145fb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109e5565b600080866001600160a01b0316858760405161461791906153f6565b60006040518083038185875af1925050503d8060008114614654576040519150601f19603f3d011682016040523d82523d6000602084013e614659565b606091505b509150915061466a87838387614675565b979650505050505050565b606083156146e45782516000036146dd576001600160a01b0385163b6146dd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109e5565b5081614592565b61459283838151156146f95781518083602001fd5b8060405162461bcd60e51b81526004016109e5919061476b565b60005b8381101561472e578181015183820152602001614716565b838111156131785750506000910152565b60008151808452614757816020860160208601614713565b601f01601f19169290920160200192915050565b60208152600061477e602083018461473f565b9392505050565b60006020828403121561479757600080fd5b813561ffff8116811461477e57600080fd5b80356001600160401b03811681146147c057600080fd5b919050565b600080600080600060a086880312156147dd57600080fd5b6147e6866147a9565b94506147f4602087016147a9565b94979496505050506040830135926060810135926080909101359150565b60006020828403121561482457600080fd5b61477e826147a9565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156148655761486561482d565b60405290565b604051606081016001600160401b03811182821017156148655761486561482d565b604051601f8201601f191681016001600160401b03811182821017156148b5576148b561482d565b604052919050565b60006001600160401b038211156148d6576148d661482d565b5060051b60200190565b600082601f8301126148f157600080fd5b81356001600160401b0381111561490a5761490a61482d565b61491d601f8201601f191660200161488d565b81815284602083860101111561493257600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561496257600080fd5b82356001600160401b038082111561497957600080fd5b818501915085601f83011261498d57600080fd5b81356149a061499b826148bd565b61488d565b81815260059190911b830184019084810190888311156149bf57600080fd5b8585015b83811015614a58578035858111156149db5760008081fd5b86016080818c03601f19018113156149f35760008081fd5b6149fb614843565b8983013588811115614a0d5760008081fd5b614a1b8e8c838701016148e0565b8252506040808401358b8301526060614a358186016147a9565b82840152614a448486016147a9565b9083015250855250509186019186016149c3565b5098975050505050505050565b8060408101831015614a7657600080fd5b92915050565b8060808101831015614a7657600080fd5b6000806000806000806000806101a0898b031215614aaa57600080fd5b614ab3896147a9565b9750614ac160208a016147a9565b9650614acf60408a016147a9565b95506060890135945060808901359350614aec8a60a08b01614a65565b9250614afb8a60e08b01614a7c565b9150614b0b8a6101608b01614a65565b90509295985092959890939650565b6001600160a01b038116811461232557600080fd5b600080600080600080600080888a036101c0811215614b4d57600080fd5b8935614b5881614b1a565b985060208a0135614b6881614b1a565b975060408a0135614b7881614b1a565b965060608a0135614b8881614b1a565b955060e0607f1982011215614b9c57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614bc657600080fd5b614bd28c838d016148e0565b93506101a08b0135915080821115614be957600080fd5b50614bf68b828c016148e0565b9150509295985092959890939650565b600060208284031215614c1857600080fd5b813561477e81614b1a565b60008060008060008060008060006101c08a8c031215614c4257600080fd5b614c4b8a6147a9565b9850614c5960208b016147a9565b9750614c6760408b016147a9565b9650614c7560608b016147a9565b955060808a0135945060a08a01359350614c928b60c08c01614a65565b9250614ca28b6101008c01614a7c565b9150614cb28b6101808c01614a65565b90509295985092959850929598565b600060208284031215614cd357600080fd5b5035919050565b801515811461232557600080fd5b600060208284031215614cfa57600080fd5b813561477e81614cda565b600060208284031215614d1757600080fd5b81356001600160401b03811115614d2d57600080fd5b614592848285016148e0565b60006020808385031215614d4c57600080fd5b82356001600160401b0380821115614d6357600080fd5b818501915085601f830112614d7757600080fd5b8135614d8561499b826148bd565b81815260059190911b83018401908481019088831115614da457600080fd5b8585015b83811015614a5857803585811115614dc05760008081fd5b86016060818c03601f1901811315614dd85760008081fd5b614de061486b565b8983013588811115614df25760008081fd5b614e008e8c838701016148e0565b8252506040808401358b830152614e188385016147a9565b9082015285525050918601918601614da8565b60008060408385031215614e3e57600080fd5b82356001600160401b03811115614e5457600080fd5b614e60858286016148e0565b95602094909401359450505050565b600181811c90821680614e8357607f821691505b602082108103614ea357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614f2457614f24614eec565b01949350505050565b60208082526045908201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361503257615032614eec565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b60006020828403121561507157600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b6000600182016150ce576150ce614eec565b5060010190565b60006001600160401b03838116908316818110156150f5576150f5614eec565b039392505050565b60008282101561510f5761510f614eec565b500390565b600081600019048311821515161561512e5761512e614eec565b500290565b601f8211156144f357600081815260208120601f850160051c8101602086101561515a5750805b601f850160051c820191505b81811015613bb757828155600101615166565b81516001600160401b038111156151925761519261482d565b6151a6816151a08454614e6f565b84615133565b602080601f8311600181146151db57600084156151c35750858301515b600019600386901b1c1916600185901b178555613bb7565b600085815260208120601f198616915b8281101561520a578886015182559484019460019091019084016151eb565b50858210156152285787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b60008261525d5761525d615238565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b600082198211156152de576152de614eec565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b03831660208201526060604082018190526000906153c79083018461473f565b95945050505050565b60006001600160401b03808416806153ea576153ea615238565b92169190910492915050565b60008251615408818460208701614713565b9190910192915050565b60008261542157615421615238565b500690565b61012081016040808784376000838201818152879190815b600281101561545e5784848337908401828152928401929060010161543e565b5050828760c0870137610100850181815286935091505b6001811015615494578251825260209283019290910190600101615475565b50505095945050505050565b6000602082840312156154b257600080fd5b815161477e81614cda565b600181815b808511156154f85781600019048211156154de576154de614eec565b808516156154eb57918102915b93841c93908002906154c2565b509250929050565b60008261550f57506001614a76565b8161551c57506000614a76565b8160018114615532576002811461553c57615558565b6001915050614a76565b60ff84111561554d5761554d614eec565b50506001821b614a76565b5060208310610133831016604e8410600b841016171561557b575081810a614a76565b61558583836154bd565b806000190482111561559957615599614eec565b029392505050565b600061477e838361550056fe506f6c79676f6e5a6b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a6b45564d3a3a70726f76654e6f6e44657465726d696e6973a2646970667358221220567a1597b3ca9ddc0bc346518dc0d174c30614c8b7e5d0070e48dd60461b01fb64736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103af5760003560e01c80638da5cb5b116101f4578063cfa8ed471161011a578063e7a7ed02116100ad578063f14916d61161007c578063f14916d6146108eb578063f2fde38b146108fe578063f851a44014610911578063f8b823e41461092457600080fd5b8063e7a7ed0214610898578063e8bf92ed146108b2578063eaeb077b146108c5578063edc41121146108d857600080fd5b8063d939b315116100e9578063d939b3151461085a578063dbc1697614610874578063e11f3f181461087c578063e217cfd61461088f57600080fd5b8063cfa8ed4714610806578063d02103ca14610820578063d8d1091b14610833578063d8f54db01461084657600080fd5b8063ab9fc5ef11610192578063b6b0b09711610161578063b6b0b097146107be578063c0ed84e0146107d8578063c89e42df146107e0578063cf136306146107f357600080fd5b8063ab9fc5ef14610712578063adc879e91461071c578063afd23cbe14610736578063b4d63f581461075e57600080fd5b80639eb831b9116101ce5780639eb831b9146106d75780639f0d039d146106df578063a3c573eb146106e7578063aa58bad6146106fa57600080fd5b80638da5cb5b146106ab57806399f5634e146106bc5780639c9f3dfe146106c457600080fd5b80634a910e6a116102d9578063715018a611610277578063837a473811610246578063837a473814610606578063841b24d7146106745780638b48931e1461068e5780638c4a0af71461069857600080fd5b8063715018a6146105c55780637215541a146105cd57806375c508b3146105e05780637fcb3653146105f357600080fd5b806360943d6a116102b357806360943d6a1461056c5780636b8616ce1461057f5780636ff512cc1461059f578063704b6c02146105b257600080fd5b80634a910e6a146105315780635392c5e014610544578063542028d51461056457600080fd5b8063383b3be811610351578063456052671161032057806345605267146104d7578063458c0477146104f15780634834a343146105045780634a1a89a71461051757600080fd5b8063383b3be814610484578063394218e9146104975780633c158267146104aa578063423fa856146104bd57600080fd5b806319d8ac611161038d57806319d8ac6114610404578063220d78991461042f57806329878983146104425780632d0889d31461046d57600080fd5b8063107bf28c146103b457806315064c96146103d25780631816b7e5146103ef575b600080fd5b6103bc61092d565b6040516103c9919061476b565b60405180910390f35b6065546103df9060ff1681565b60405190151581526020016103c9565b6104026103fd366004614785565b6109bb565b005b606854610417906001600160401b031681565b6040516001600160401b0390911681526020016103c9565b6103bc61043d3660046147c5565b610aea565b606a54610455906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b61047661ea6081565b6040519081526020016103c9565b6103df610492366004614812565b610c90565b6104026104a5366004614812565b610cd7565b6104026104b836600461494f565b610e26565b60685461041790600160401b90046001600160401b031681565b60685461041790600160801b90046001600160401b031681565b607254610417906001600160401b031681565b610402610512366004614a8d565b61163a565b60725461041790600160401b90046001600160401b031681565b61040261053f366004614812565b611983565b610476610552366004614812565b606d6020526000908152604090205481565b6103bc611c23565b61040261057a366004614b2f565b611c30565b61047661058d366004614812565b60666020526000908152604090205481565b6104026105ad366004614c06565b611fa0565b6104026105c0366004614c06565b612024565b61040261209c565b6104026105db366004614812565b6120b0565b6104026105ee366004614c23565b612328565b606954610417906001600160401b031681565b610649610614366004614cc1565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103c9565b60725461041790600160c01b90046001600160401b031681565b61041762093a8081565b6104026106a6366004614ce8565b6123b7565b6033546001600160a01b0316610455565b61047661242e565b6104026106d2366004614812565b612511565b610476600c81565b607454610476565b607054610455906001600160a01b031681565b6065546104179061010090046001600160401b031681565b6104176206978081565b606c5461041790600160a81b90046001600160401b031681565b60655461074b90600160481b900461ffff1681565b60405161ffff90911681526020016103c9565b61079961076c366004614812565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103c9565b60655461045590600160581b90046001600160a01b031681565b610417612657565b6104026107ee366004614d05565b6126a4565b610402610801366004614812565b61270a565b60695461045590600160401b90046001600160a01b031681565b606c54610455906001600160a01b031681565b610402610841366004614d39565b61278b565b606c546103df90600160a01b900460ff1681565b60725461041790600160801b90046001600160401b031681565b610402612c55565b61040261088a366004614c23565b612d11565b6104176103e881565b60685461041790600160c01b90046001600160401b031681565b606b54610455906001600160a01b031681565b6104026108d3366004614e2b565b612e56565b6104026108e6366004614a8d565b61317e565b6104026108f9366004614c06565b61329e565b61040261090c366004614c06565b613316565b607354610455906001600160a01b031681565b61047660745481565b606f805461093a90614e6f565b80601f016020809104026020016040519081016040528092919081815260200182805461096690614e6f565b80156109b35780601f10610988576101008083540402835291602001916109b3565b820191906000526020600020905b81548152906001019060200180831161099657829003601f168201915b505050505081565b6073546001600160a01b031633146109ee5760405162461bcd60e51b81526004016109e590614ea9565b60405180910390fd5b6103e88161ffff16118015610a0857506104008161ffff16105b610a8d5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a4016109e5565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610b1c57508115155b610b90576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e5565b80610c05576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e5565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610cc692600160801b90920481169116614f02565b6001600160401b0316111592915050565b6073546001600160a01b03163314610d015760405162461bcd60e51b81526004016109e590614ea9565b62093a806001600160401b0382161115610d2d5760405162461bcd60e51b81526004016109e590614f2d565b60655460ff16610dd0576072546001600160401b03600160c01b909104811690821610610dd05760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109e5565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610adf565b60655460ff1615610e495760405162461bcd60e51b81526004016109e590614f98565b606954600160401b90046001600160a01b03163314610ed05760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e63657200000000000060648201526084016109e5565b805180610f455760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e6365203120626174636800000060648201526084016109e5565b6103e88110610fbe576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e79206261746368657360648201526084016109e5565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561145e57600087828151811061101157611011615000565b60200260200101519050600081606001516001600160401b031611156111ca578361103b81615016565b9450506000816000015180519060200120826020015183606001516040516020016110689392919061503c565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461110e5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d6174636800000060648201526084016109e5565b81606001516001600160401b031682604001516001600160401b031610156111c45760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a4016109e5565b50611351565b602081015115806112535750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b36329161120d9160040190815260200190565b6020604051808303816000875af115801561122c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611250919061505f565b15155b6112c55760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d75737420657869737400000000000060648201526084016109e5565b80515161ea60116113515760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a4016109e5565b856001600160401b031681604001516001600160401b03161015801561138457504281604001516001600160401b031611155b6113f65760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e676500000060648201526084016109e5565b8051805160209182012081830151604080850151905161141d948894939291339101615078565b604051602081830303815290604052805190602001209250848061144090615016565b95505080604001519550508080611456906150bc565b915050610ff5565b506068546001600160401b03600160c01b909104811690831611156114e35760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b60648201526084016109e5565b60685460009061150390600160801b90046001600160401b0316846150d5565b611516906001600160401b0316876150fd565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115eb903390309084906115d09190615114565b606554600160581b90046001600160a01b031692919061338c565b6115f36133f7565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff161561165d5760405162461bcd60e51b81526004016109e590614f98565b6072546001600160401b03878116600090815260676020526040902060010154429261169492600160c01b90910481169116614f02565b6001600160401b0316111561171d5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a4016109e5565b6103e861172a88886150d5565b6001600160401b0316106117a65760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e7920626174636865730000000060648201526084016109e5565b6117b6888888888888888861349b565b6117bf866139d9565b607254600160801b90046001600160401b0316600003611887576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561182457607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561186a57600080fd5b505af115801561187e573d6000803e3d6000fd5b50505050611938565b61188f6133f7565b607280546001600160401b03169060006118a883615016565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b038116158015906119b057506072546001600160401b03600160401b9091048116908216115b80156119cb57506072546001600160401b0390811690821611155b611a495760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a4016109e5565b606a546001600160a01b03163314611af357611a6481610c90565b611af35760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a4016109e5565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d9094529382902092909255607280546fffffffffffffffff000000000000000019169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611bb557600080fd5b505af1158015611bc9573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611c1691815260200190565b60405180910390a3505050565b606e805461093a90614e6f565b600054610100900460ff1615808015611c505750600054600160ff909116105b80611c6a5750303b158015611c6a575060005460ff166001145b611ccd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109e5565b6000805460ff191660011790558015611cf0576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611d6d6020860186614c06565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d9d6060860160408701614c06565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611dd860c0860160a08701614c06565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611e3560e0860160c08701614812565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611e6c6040860160208701614812565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611ea86080860160608701614812565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611ee460a0860160808701614ce8565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611f0c8482615179565b50606f611f198382615179565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611f4f613bbf565b8015611f95576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611fca5760405162461bcd60e51b81526004016109e590614ea9565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610adf565b6073546001600160a01b0316331461204e5760405162461bcd60e51b81526004016109e590614ea9565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190602001610adf565b6120a4613c33565b6120ae6000613c8d565b565b6033546001600160a01b0316331461231d576072546000906001600160401b03161561210157506072546001600160401b03908116600090815260716020526040902054600160401b90041661210f565b506069546001600160401b03165b80826001600160401b03161161218d5760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c72656164792076657269666965640000000060648201526084016109e5565b6068546001600160401b03600160401b9091048116908316118015906121cf57506001600160401b038083166000908152606760205260409020600101541615155b61225a5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a4016109e5565b6001600160401b0380831660009081526067602052604090206001015442916122889162093a809116614f02565b6001600160401b0316111561231b5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a4016109e5565b505b612325613cdf565b50565b60655460ff161561234b5760405162461bcd60e51b81526004016109e590614f98565b61235c898989898989898989613d4f565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f95613cdf565b6073546001600160a01b031633146123e15760405162461bcd60e51b81526004016109e590614ea9565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610adf90831515815260200190565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612481573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a5919061505f565b905060006124b1612657565b6068546001600160401b03600160401b82048116916124e191600160801b8204811691600160c01b9004166150d5565b6124eb9190614f02565b6124f591906150d5565b6001600160401b0316905061250a818361524e565b9250505090565b6073546001600160a01b0316331461253b5760405162461bcd60e51b81526004016109e590614ea9565b62093a806001600160401b03821611156125675760405162461bcd60e51b81526004016109e590614f2d565b60655460ff166125fc576072546001600160401b03600160801b9091048116908216106125fc5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f7765720060648201526084016109e5565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610adf565b6072546000906001600160401b03161561269457506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126ce5760405162461bcd60e51b81526004016109e590614ea9565b606e6126da8282615179565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610adf919061476b565b6073546001600160a01b031633146127345760405162461bcd60e51b81526004016109e590614ea9565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610adf565b60655460ff16156127ae5760405162461bcd60e51b81526004016109e590614f98565b606c54600160a01b900460ff1615156001146127dc5760405162461bcd60e51b81526004016109e590615262565b80518061283f5760405162461bcd60e51b815260206004820152603d60248201526000805160206155ae83398151915260448201527f3a204d75737420666f726365206174206c65617374203120626174636800000060648201526084016109e5565b6103e881106128b05760405162461bcd60e51b815260206004820152604360248201526000805160206155ae83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a4016109e5565b6068546001600160401b03600160c01b82048116916128d8918491600160801b9004166152cb565b11156129325760405162461bcd60e51b815260206004820152603560248201526000805160206155ae8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b60648201526084016109e5565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612b5e57600086828151811061297f5761297f615000565b60200260200101519050838061299490615016565b9450506000816000015180519060200120826020015183604001516040516020016129c19392919061503c565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612a605760405162461bcd60e51b815260206004820152604260248201526000805160206155ae83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109e5565b612a6b6001886150fd565b8303612b005742620697808360400151612a859190614f02565b6001600160401b03161115612b005760405162461bcd60e51b815260206004820152604760248201526000805160206155ae83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a4016109e5565b8151805160209182012081840151604051612b2393889392914291339101615078565b6040516020818303038152906040528051906020012093508580612b4690615016565b96505050508080612b56906150bc565b915050612963565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612c775760405162461bcd60e51b81526004016109e5906152e3565b6073546001600160a01b03163314612ca15760405162461bcd60e51b81526004016109e590614ea9565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612cf157600080fd5b505af1158015612d05573d6000803e3d6000fd5b505050506120ae6143ca565b606a546001600160a01b03163314612d3b5760405162461bcd60e51b81526004016109e590615340565b612d4c898989898989898989613d4f565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612d9757607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612ddd57600080fd5b505af1158015612df1573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612e795760405162461bcd60e51b81526004016109e590614f98565b606c54600160a01b900460ff161515600114612ea75760405162461bcd60e51b81526004016109e590615262565b6000612eb260745490565b905081811115612f175760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b60648201526084016109e5565b61ea60835110612f875760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b60648201526084016109e5565b606554612fa690600160581b90046001600160a01b031633308461338c565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015612ff0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613014919061505f565b60688054919250600160c01b9091046001600160401b031690601861303883615016565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016130799392919061503c565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361311d57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613178565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161316f9392919061539d565b60405180910390a25b50505050565b606a546001600160a01b031633146131a85760405162461bcd60e51b81526004016109e590615340565b6131b8888888888888888861349b565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561320357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561324957600080fd5b505af115801561325d573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611971565b6073546001600160a01b031633146132c85760405162461bcd60e51b81526004016109e590614ea9565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001610adf565b61331e613c33565b6001600160a01b0381166133835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e5565b61232581613c8d565b6040516001600160a01b03808516602483015283166044820152606481018290526131789085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614421565b6072546001600160401b03600160401b82048116911611156120ae5760725460009061343490600160401b90046001600160401b03166001614f02565b905061343f81610c90565b15612325576072546000906002906134619084906001600160401b03166150d5565b61346b91906153d0565b6134759083614f02565b905061348081610c90565b156134925761348e81611983565b5050565b61348e82611983565b6000806134a6612657565b90506001600160401b038a1615613621576072546001600160401b03908116908b1611156135625760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2070656e60448201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560648201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608482015260a4016109e5565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b909204161461361b5760405162461bcd60e51b815260206004820152604c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760648201526b040e6e8c2e8ca40c4c2e8c6d60a31b608482015260a4016109e5565b50613769565b6001600160401b0389166000908152606d60205260409020549150816136bb5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786064820152621a5cdd60ea1b608482015260a4016109e5565b806001600160401b0316896001600160401b031611156137695760405162461bcd60e51b815260206004820152605d60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060648201527f7468616e2063757272656e744c61737456657269666965644261746368000000608482015260a4016109e5565b806001600160401b0316886001600160401b0316116138165760405162461bcd60e51b815260206004820152605760248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2066696e60448201527f616c4e65774261746368206d75737420626520626967676572207468616e206360648201527f757272656e744c61737456657269666965644261746368000000000000000000608482015260a4016109e5565b60006138258a8a8a868b610aea565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161385a91906153f6565b602060405180830381855afa158015613877573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061389a919061505f565b6138a49190615412565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916138e8918b918b918b9190600401615426565b602060405180830381865afa158015613905573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392991906154a0565b6139885760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20494e5660448201526920a624a22fa82927a7a360b11b60648201526084016109e5565b6139cb33613996858d6150d5565b6001600160401b03166139a761242e565b6139b19190615114565b606554600160581b90046001600160a01b031691906144f8565b505050505050505050505050565b60006139e3612657565b9050816000806139f384846150d5565b6001600160401b031690505b836001600160401b0316836001600160401b031614613aa5576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613a4f9116426150fd565b1115613a8a576001810154613a7490600160401b90046001600160401b0316866150d5565b613a87906001600160401b0316846152cb565b92505b60010154600160401b90046001600160401b031692506139ff565b6000613ab183836150fd565b905082811015613b2b576000613ac782856150fd565b9050600c8111613ad75780613ada565b600c5b9050613ae7816003615114565b613af290600a6155a1565b606554613b0b908390600160481b900461ffff166155a1565b607454613b189190615114565b613b22919061524e565b60745550613bb7565b6000613b3784836150fd565b9050600c8111613b475780613b4a565b600c5b90506000613b59826003615114565b613b6490600a6155a1565b606554613b7d908490600160481b900461ffff166155a1565b607454613b8a9190615114565b613b94919061524e565b905080607454607454613ba79190615114565b613bb1919061524e565b60745550505b505050505050565b600054610100900460ff16613c2a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109e5565b6120ae33613c8d565b6033546001600160a01b031633146120ae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109e5565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d2f57600080fd5b505af1158015613d43573d6000803e3d6000fd5b505050506120ae614528565b60006001600160401b038a1615613eca576072546001600160401b03908116908b161115613e0e5760405162461bcd60e51b815260206004820152606c60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c4016109e5565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613ec45760405162461bcd60e51b815260206004820152606060248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a4016109e5565b5061401e565b506001600160401b0387166000908152606d602052604090205480613f6b5760405162461bcd60e51b815260206004820152605760248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a4016109e5565b6069546001600160401b03908116908916111561401e5760405162461bcd60e51b815260206004820152607160248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c4016109e5565b6072546001600160401b03908116908a161180159061404e5750896001600160401b0316896001600160401b0316115b801561406f57506072546001600160401b03600160401b9091048116908a16115b6140e75760405162461bcd60e51b815260206004820152604f60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a4016109e5565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146141a75760405162461bcd60e51b815260206004820152606a60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c4016109e5565b60006141b6898989858a610aea565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516141eb91906153f6565b602060405180830381855afa158015614208573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061422b919061505f565b6142359190615412565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614279918a918a918a9190600401615426565b602060405180830381865afa158015614296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ba91906154a0565b61431a5760405162461bcd60e51b815260206004820152603e60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20494e56414c49445f50524f4f46000060648201526084016109e5565b6001600160401b038b166000908152607160205260409020600201548790036139cb5760405162461bcd60e51b815260206004820152606260248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c4016109e5565b60655460ff166143ec5760405162461bcd60e51b81526004016109e5906152e3565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614476826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145839092919063ffffffff16565b8051909150156144f3578080602001905181019061449491906154a0565b6144f35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109e5565b505050565b6040516001600160a01b0383166024820152604481018290526144f390849063a9059cbb60e01b906064016133c0565b60655460ff161561454b5760405162461bcd60e51b81526004016109e590614f98565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614592848460008561459a565b949350505050565b6060824710156145fb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109e5565b600080866001600160a01b0316858760405161461791906153f6565b60006040518083038185875af1925050503d8060008114614654576040519150601f19603f3d011682016040523d82523d6000602084013e614659565b606091505b509150915061466a87838387614675565b979650505050505050565b606083156146e45782516000036146dd576001600160a01b0385163b6146dd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109e5565b5081614592565b61459283838151156146f95781518083602001fd5b8060405162461bcd60e51b81526004016109e5919061476b565b60005b8381101561472e578181015183820152602001614716565b838111156131785750506000910152565b60008151808452614757816020860160208601614713565b601f01601f19169290920160200192915050565b60208152600061477e602083018461473f565b9392505050565b60006020828403121561479757600080fd5b813561ffff8116811461477e57600080fd5b80356001600160401b03811681146147c057600080fd5b919050565b600080600080600060a086880312156147dd57600080fd5b6147e6866147a9565b94506147f4602087016147a9565b94979496505050506040830135926060810135926080909101359150565b60006020828403121561482457600080fd5b61477e826147a9565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156148655761486561482d565b60405290565b604051606081016001600160401b03811182821017156148655761486561482d565b604051601f8201601f191681016001600160401b03811182821017156148b5576148b561482d565b604052919050565b60006001600160401b038211156148d6576148d661482d565b5060051b60200190565b600082601f8301126148f157600080fd5b81356001600160401b0381111561490a5761490a61482d565b61491d601f8201601f191660200161488d565b81815284602083860101111561493257600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561496257600080fd5b82356001600160401b038082111561497957600080fd5b818501915085601f83011261498d57600080fd5b81356149a061499b826148bd565b61488d565b81815260059190911b830184019084810190888311156149bf57600080fd5b8585015b83811015614a58578035858111156149db5760008081fd5b86016080818c03601f19018113156149f35760008081fd5b6149fb614843565b8983013588811115614a0d5760008081fd5b614a1b8e8c838701016148e0565b8252506040808401358b8301526060614a358186016147a9565b82840152614a448486016147a9565b9083015250855250509186019186016149c3565b5098975050505050505050565b8060408101831015614a7657600080fd5b92915050565b8060808101831015614a7657600080fd5b6000806000806000806000806101a0898b031215614aaa57600080fd5b614ab3896147a9565b9750614ac160208a016147a9565b9650614acf60408a016147a9565b95506060890135945060808901359350614aec8a60a08b01614a65565b9250614afb8a60e08b01614a7c565b9150614b0b8a6101608b01614a65565b90509295985092959890939650565b6001600160a01b038116811461232557600080fd5b600080600080600080600080888a036101c0811215614b4d57600080fd5b8935614b5881614b1a565b985060208a0135614b6881614b1a565b975060408a0135614b7881614b1a565b965060608a0135614b8881614b1a565b955060e0607f1982011215614b9c57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614bc657600080fd5b614bd28c838d016148e0565b93506101a08b0135915080821115614be957600080fd5b50614bf68b828c016148e0565b9150509295985092959890939650565b600060208284031215614c1857600080fd5b813561477e81614b1a565b60008060008060008060008060006101c08a8c031215614c4257600080fd5b614c4b8a6147a9565b9850614c5960208b016147a9565b9750614c6760408b016147a9565b9650614c7560608b016147a9565b955060808a0135945060a08a01359350614c928b60c08c01614a65565b9250614ca28b6101008c01614a7c565b9150614cb28b6101808c01614a65565b90509295985092959850929598565b600060208284031215614cd357600080fd5b5035919050565b801515811461232557600080fd5b600060208284031215614cfa57600080fd5b813561477e81614cda565b600060208284031215614d1757600080fd5b81356001600160401b03811115614d2d57600080fd5b614592848285016148e0565b60006020808385031215614d4c57600080fd5b82356001600160401b0380821115614d6357600080fd5b818501915085601f830112614d7757600080fd5b8135614d8561499b826148bd565b81815260059190911b83018401908481019088831115614da457600080fd5b8585015b83811015614a5857803585811115614dc05760008081fd5b86016060818c03601f1901811315614dd85760008081fd5b614de061486b565b8983013588811115614df25760008081fd5b614e008e8c838701016148e0565b8252506040808401358b830152614e188385016147a9565b9082015285525050918601918601614da8565b60008060408385031215614e3e57600080fd5b82356001600160401b03811115614e5457600080fd5b614e60858286016148e0565b95602094909401359450505050565b600181811c90821680614e8357607f821691505b602082108103614ea357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614f2457614f24614eec565b01949350505050565b60208082526045908201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361503257615032614eec565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b60006020828403121561507157600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b6000600182016150ce576150ce614eec565b5060010190565b60006001600160401b03838116908316818110156150f5576150f5614eec565b039392505050565b60008282101561510f5761510f614eec565b500390565b600081600019048311821515161561512e5761512e614eec565b500290565b601f8211156144f357600081815260208120601f850160051c8101602086101561515a5750805b601f850160051c820191505b81811015613bb757828155600101615166565b81516001600160401b038111156151925761519261482d565b6151a6816151a08454614e6f565b84615133565b602080601f8311600181146151db57600084156151c35750858301515b600019600386901b1c1916600185901b178555613bb7565b600085815260208120601f198616915b8281101561520a578886015182559484019460019091019084016151eb565b50858210156152285787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b60008261525d5761525d615238565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b600082198211156152de576152de614eec565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b03831660208201526060604082018190526000906153c79083018461473f565b95945050505050565b60006001600160401b03808416806153ea576153ea615238565b92169190910492915050565b60008251615408818460208701614713565b9190910192915050565b60008261542157615421615238565b500690565b61012081016040808784376000838201818152879190815b600281101561545e5784848337908401828152928401929060010161543e565b5050828760c0870137610100850181815286935091505b6001811015615494578251825260209283019290910190600101615475565b50505095945050505050565b6000602082840312156154b257600080fd5b815161477e81614cda565b600181815b808511156154f85781600019048211156154de576154de614eec565b808516156154eb57918102915b93841c93908002906154c2565b509250929050565b60008261550f57506001614a76565b8161551c57506000614a76565b8160018114615532576002811461553c57615558565b6001915050614a76565b60ff84111561554d5761554d614eec565b50506001821b614a76565b5060208310610133831016604e8410600b841016171561557b575081810a614a76565b61558583836154bd565b806000190482111561559957615599614eec565b029392505050565b600061477e838361550056fe506f6c79676f6e5a6b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a6b45564d3a3a70726f76654e6f6e44657465726d696e6973a2646970667358221220567a1597b3ca9ddc0bc346518dc0d174c30614c8b7e5d0070e48dd60461b01fb64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZKEVMBridge.json b/compiled-contracts/PolygonZkEVMBridge.json similarity index 97% rename from compiled-contracts/PolygonZKEVMBridge.json rename to compiled-contracts/PolygonZkEVMBridge.json index 5d99193af..c85b795ad 100644 --- a/compiled-contracts/PolygonZKEVMBridge.json +++ b/compiled-contracts/PolygonZkEVMBridge.json @@ -1,7 +1,7 @@ { "_format": "hh-sol-artifact-1", - "contractName": "PolygonZKEVMBridge", - "sourceName": "contracts/PolygonZKEVMBridge.sol", + "contractName": "PolygonZkEVMBridge", + "sourceName": "contracts/PolygonZkEVMBridge.sol", "abi": [ { "anonymous": false, @@ -493,7 +493,7 @@ "name": "globalExitRootManager", "outputs": [ { - "internalType": "contract IPolygonZKEVMGlobalExitRoot", + "internalType": "contract IPolygonZkEVMGlobalExitRoot", "name": "", "type": "address" } @@ -509,7 +509,7 @@ "type": "uint32" }, { - "internalType": "contract IPolygonZKEVMGlobalExitRoot", + "internalType": "contract IPolygonZkEVMGlobalExitRoot", "name": "_globalExitRootManager", "type": "address" }, @@ -699,8 +699,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50614810806100206000396000f3fe608060405260043610620001675760003560e01c806381b1c17411620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b806381b1c17414620003735780638f61151914620003ad5780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b80633ae05047116200011e5780633ae0504714620002a25780633da8168214620002ba5780633e19704314620002df578063463855491462000304578063647c576c14620003295780637b6323c1146200034e57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002470565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009d2565b348015620001db57600080fd5b50620001f3620001ed366004620024fd565b62000a0b565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002539565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b506200022462000a5e565b348015620002c757600080fd5b50620001a1620002d936600462002628565b62000b51565b348015620002ec57600080fd5b5062000224620002fe366004620026a6565b62000c53565b3480156200031157600080fd5b506200018362000323366004620027b7565b62000ce0565b3480156200033657600080fd5b5062000183620003483660046200289e565b62000e86565b3480156200035b57600080fd5b50620001836200036d366004620027b7565b62000fe5565b3480156200038057600080fd5b50620001f362000392366004620028ee565b6024602052600090815260409020546001600160a01b031681565b348015620003ba57600080fd5b50602754620001f3906001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028ee565b62001492565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002908565b620014d7565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620029bc565b620015ee565b348015620004c357600080fd5b50620001836200179a565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028ee565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a24565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008ec565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074957604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562000710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000736919062002a9b565b50602081015181519094509250620008ea565b84156200075e576200075e8a888888620017d1565b620007756001600160a01b038b1633308a62001bf9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f6919081019062002b36565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000835573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085f919081019062002b36565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c4919062002b6f565b604051602001620008d89392919062002bbd565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092e98979695949392919062002bfa565b60405180910390a16200095962000953600084868c8c8c888051906020012062000c53565b62001c66565b6026546001600160a01b03166333d6247d6200097462000a5e565b6040518263ffffffff1660e01b81526004016200099391815260200190565b600060405180830381600087803b158015620009ae57600080fd5b505af1158015620009c3573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ff5760405162461bcd60e51b8152600401620005539062002c67565b62000a0962001db7565b565b600060246000848460405160200162000a2692919062002cc4565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b48578260011660010362000ac9576001816020811062000a955762000a9562002cee565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af6565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0360028462002d30565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3f9062002d47565b91505062000a69565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c44578160011660010362000bce5786818151811062000b8c5762000b8c62002cee565b60200260200101518360405160200162000bb0929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c20565b8287828151811062000be45762000be462002cee565b602002602001015160405160200162000c07929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2d60028362002d30565b91508062000c3b8162002d47565b91505062000b61565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d065760405162461bcd60e51b8152600401620005539062002a24565b62000d1c8a8a8a8a8a8a8a8a8a8a600162001e15565b62000d2d8963ffffffff16620020a0565b6000836001600160a01b03168387898560405160240162000d519392919062002d63565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d88919062002d9e565b60006040518083038185875af1925050503d806000811462000dc7576040519150601f19603f3d011682016040523d82523d6000602084013e62000dcc565b606091505b505090508062000e385760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e7195949392919062002dbc565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea75750600054600160ff909116105b8062000ec35750303b15801562000ec3575060005460ff166001145b62000f285760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f4c576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff16156200100b5760405162461bcd60e51b8152600401620005539062002a24565b620010218a8a8a8a8a8a8a8a8a8a600062001e15565b620010328963ffffffff16620020a0565b6001600160a01b0385166200112757604080516000808252602082019092526001600160a01b0385169084906040516200106d919062002d9e565b60006040518083038185875af1925050503d8060008114620010ac576040519150601f19603f3d011682016040523d82523d6000602084013e620010b1565b606091505b5050905080620011205760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b5062001445565b60225463ffffffff6101009091048116908716036200115c57620011566001600160a01b0386168484620020e2565b62001445565b600086866040516020016200117392919062002cc4565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013ca57600080600085806020019051810190620011c5919062002df3565b925092509250600085848484604051620011df90620023d6565b620011ed9392919062002bbd565b8190604051809103906000f59050801580156200120e573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001263573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001289919062002a9b565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013b89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001442565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200141a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001440919062002a9b565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200147e95949392919062002dbc565b60405180910390a150505050505050505050565b600080620014a36101008462002d30565b90506000620014b56101008562002e69565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014ef92919062002cc4565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200152290620023d6565b601f1982820381018352601f9091011660408190526200154f908d908d908d908d908d9060200162002ea9565b60408051601f19818403018152908290526200156f929160200162002eea565b60405160208183030381529060405280519060200120604051602001620015c894939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620016145760405162461bcd60e51b8152600401620005539062002a24565b60225463ffffffff6101009091048116908416036200169c5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016f098979695949392919062002bfa565b60405180910390a162001727620009536001602260019054906101000a900463ffffffff1633878734888051906020012062000c53565b6026546001600160a01b03166333d6247d6200174262000a5e565b6040518263ffffffff1660e01b81526004016200176191815260200190565b600060405180830381600087803b1580156200177c57600080fd5b505af115801562001791573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017c75760405162461bcd60e51b8152600401620005539062002c67565b62000a0962002114565b60006200181483838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021c392505050565b9050632afa533160e01b6001600160e01b031982160162001a0d57600080808080808062001846896004818d62002f1d565b81019062001855919062002f49565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018975760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b0386163014620018c25760405162461bcd60e51b8152600401620005539062003001565b8a8514620019395760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620019b9919062002d9e565b6000604051808303816000865af19150503d8060008114620019f8576040519150601f19603f3d011682016040523d82523d6000602084013e620019fd565b606091505b5050505050505050505062001bf2565b6001600160e01b031981166323f2ebc360e21b1462001a835760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a9b8a6004818e62002f1d565b81019062001aaa919062003052565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001aee5760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b038716301462001b195760405162461bcd60e51b8152600401620005539062003001565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001ba2919062002d9e565b6000604051808303816000865af19150503d806000811462001be1576040519150601f19603f3d011682016040523d82523d6000602084013e62001be6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdf9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021ca565b80600162001c7760206002620031db565b62001c839190620031e9565b6021541062001ce85760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cfd919062003203565b909155505060215460005b602081101562001da7578160011660010362001d3d57826001826020811062001d355762001d3562002cee565b015550505050565b6001816020811062001d535762001d5362002cee565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d90919062002d30565b91508062001d9e8162002d47565b91505062001d08565b5062001db26200321e565b505050565b60225460ff161562001ddd5760405162461bcd60e51b8152600401620005539062002a24565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001e268a63ffffffff1662001492565b1562001e7d5760405162461bcd60e51b81526020600482015260306024820152600080516020620047bb83398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ef1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f17919062003234565b90508060000362001f805760405162461bcd60e51b81526020600482015260396024820152600080516020620047bb83398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff8781166101009092041614620020025760405162461bcd60e51b81526020600482015260436024820152600080516020620047bb83398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff166200202057508862002023565b50895b6200204e6200203f848b8b8b8b8b8b8051906020012062000c53565b8e8e63ffffffff168462000b51565b620009c35760405162461bcd60e51b815260206004820152602c6024820152600080516020620047bb83398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020b06101008362002d30565b90506000620020c26101008462002e69565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001db290849063a9059cbb60e01b9060640162001c2e565b60225460ff166200218e5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002221826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022a39092919063ffffffff16565b80519091501562001db2578080602001905181019062002242919062002a9b565b62001db25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c4b848460008585600080866001600160a01b03168587604051620022cd919062002d9e565b60006040518083038185875af1925050503d80600081146200230c576040519150601f19603f3d011682016040523d82523d6000602084013e62002311565b606091505b509150915062002324878383876200232f565b979650505050505050565b60608315620023a35782516000036200239b576001600160a01b0385163b6200239b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c4b565b62000c4b8383815115620023ba5781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200324e565b611557806200326483390190565b6001600160a01b0381168114620023fa57600080fd5b50565b80356200240a81620023e4565b919050565b803563ffffffff811681146200240a57600080fd5b60008083601f8401126200243757600080fd5b50813567ffffffffffffffff8111156200245057600080fd5b6020830191508360208285010111156200246957600080fd5b9250929050565b60008060008060008060a087890312156200248a57600080fd5b86356200249781620023e4565b9550620024a7602088016200240f565b94506040870135620024b981620023e4565b935060608701359250608087013567ffffffffffffffff811115620024dd57600080fd5b620024eb89828a0162002424565b979a9699509497509295939492505050565b600080604083850312156200251157600080fd5b6200251c836200240f565b915060208301356200252e81620023e4565b809150509250929050565b6000602082840312156200254c57600080fd5b81356200255981620023e4565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620025a257620025a262002560565b604052919050565b600082601f830112620025bc57600080fd5b8135602067ffffffffffffffff821115620025db57620025db62002560565b8160051b620025ec82820162002576565b92835284810182019282810190878511156200260757600080fd5b83870192505b8483101562002324578235825291830191908301906200260d565b600080600080608085870312156200263f57600080fd5b84359350602085013567ffffffffffffffff808211156200265f57600080fd5b6200266d88838901620025aa565b94506040870135915080821682146200268557600080fd5b509396929550929360600135925050565b60ff81168114620023fa57600080fd5b600080600080600080600060e0888a031215620026c257600080fd5b8735620026cf8162002696565b9650620026df602089016200240f565b95506040880135620026f181620023e4565b945062002701606089016200240f565b935060808801356200271381620023e4565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200274d576200274d62002560565b50601f01601f191660200190565b600082601f8301126200276d57600080fd5b8135620027846200277e8262002730565b62002576565b8181528460208386010111156200279a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027d857600080fd5b8a3567ffffffffffffffff80821115620027f157600080fd5b620027ff8e838f01620025aa565b9b506200280f60208e016200240f565b9a5060408d0135995060608d013598506200282d60808e016200240f565b97506200283d60a08e01620023fd565b96506200284d60c08e016200240f565b95506200285d60e08e01620023fd565b94506101008d013593506101208d01359150808211156200287d57600080fd5b506200288c8d828e016200275b565b9150509295989b9194979a5092959850565b600080600060608486031215620028b457600080fd5b620028bf846200240f565b92506020840135620028d181620023e4565b91506040840135620028e381620023e4565b809150509250925092565b6000602082840312156200290157600080fd5b5035919050565b600080600080600080600060a0888a0312156200292457600080fd5b6200292f886200240f565b965060208801356200294181620023e4565b9550604088013567ffffffffffffffff808211156200295f57600080fd5b6200296d8b838c0162002424565b909750955060608a01359150808211156200298757600080fd5b50620029968a828b0162002424565b9094509250506080880135620029ac8162002696565b8091505092959891949750929550565b600080600060608486031215620029d257600080fd5b620029dd846200240f565b92506020840135620029ef81620023e4565b9150604084013567ffffffffffffffff81111562002a0c57600080fd5b62002a1a868287016200275b565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b8015158114620023fa57600080fd5b60006020828403121562002aae57600080fd5b8151620025598162002a8c565b60005b8381101562002ad857818101518382015260200162002abe565b8381111562000fdf5750506000910152565b600082601f83011262002afc57600080fd5b815162002b0d6200277e8262002730565b81815284602083860101111562002b2357600080fd5b62000c4b82602083016020870162002abb565b60006020828403121562002b4957600080fd5b815167ffffffffffffffff81111562002b6157600080fd5b62000c4b8482850162002aea565b60006020828403121562002b8257600080fd5b8151620025598162002696565b6000815180845262002ba981602086016020860162002abb565b601f01601f19169290920160200192915050565b60608152600062002bd2606083018662002b8f565b828103602084015262002be6818662002b8f565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002c4e8483018762002b8f565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79506f6c79676f6e5a4b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002d425762002d4262002d04565b500490565b60006001820162002d5c5762002d5c62002d1a565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d959083018462002b8f565b95945050505050565b6000825162002db281846020870162002abb565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002e0957600080fd5b835167ffffffffffffffff8082111562002e2257600080fd5b62002e308783880162002aea565b9450602086015191508082111562002e4757600080fd5b5062002e568682870162002aea565b9250506040840151620028e38162002696565b60008262002e7b5762002e7b62002d04565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002ebf60608301878962002e80565b828103602084015262002ed481868862002e80565b91505060ff831660408301529695505050505050565b6000835162002efe81846020880162002abb565b83519083019062002f1481836020880162002abb565b01949350505050565b6000808585111562002f2e57600080fd5b8386111562002f3c57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f6557600080fd5b873562002f7281620023e4565b9650602088013562002f8481620023e4565b955060408801359450606088013593506080880135620027138162002696565b6020808252603c908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b0312156200307057600080fd5b88356200307d81620023e4565b975060208901356200308f81620023e4565b965060408901359550606089013594506080890135620030af8162002a8c565b935060a0890135620030c18162002696565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200311f57816000190482111562003103576200310362002d1a565b808516156200311157918102915b93841c9390800290620030e3565b509250929050565b600082620031385750600162000a58565b81620031475750600062000a58565b81600181146200316057600281146200316b576200318b565b600191505062000a58565b60ff8411156200317f576200317f62002d1a565b50506001821b62000a58565b5060208310610133831016604e8410600b8410161715620031b0575081810a62000a58565b620031bc8383620030de565b8060001904821115620031d357620031d362002d1a565b029392505050565b600062002559838362003127565b600082821015620031fe57620031fe62002d1a565b500390565b6000821982111562003219576200321962002d1a565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200324757600080fd5b5051919050565b60208152600062002559602083018462002b8f56fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b5d95b18e7873c0bee5e5a0f8ba7f856feaa9a4588dd711619c14728f42e00f64736f6c634300080f0033506f6c79676f6e5a4b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220fcf8ddcb3964637d52f5fd8d11d619010d6cb056aa6548a5de8c54508f2525ef64736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001675760003560e01c806381b1c17411620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b806381b1c17414620003735780638f61151914620003ad5780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b80633ae05047116200011e5780633ae0504714620002a25780633da8168214620002ba5780633e19704314620002df578063463855491462000304578063647c576c14620003295780637b6323c1146200034e57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002470565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009d2565b348015620001db57600080fd5b50620001f3620001ed366004620024fd565b62000a0b565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002539565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b506200022462000a5e565b348015620002c757600080fd5b50620001a1620002d936600462002628565b62000b51565b348015620002ec57600080fd5b5062000224620002fe366004620026a6565b62000c53565b3480156200031157600080fd5b506200018362000323366004620027b7565b62000ce0565b3480156200033657600080fd5b5062000183620003483660046200289e565b62000e86565b3480156200035b57600080fd5b50620001836200036d366004620027b7565b62000fe5565b3480156200038057600080fd5b50620001f362000392366004620028ee565b6024602052600090815260409020546001600160a01b031681565b348015620003ba57600080fd5b50602754620001f3906001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028ee565b62001492565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002908565b620014d7565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620029bc565b620015ee565b348015620004c357600080fd5b50620001836200179a565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028ee565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a24565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008ec565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074957604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562000710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000736919062002a9b565b50602081015181519094509250620008ea565b84156200075e576200075e8a888888620017d1565b620007756001600160a01b038b1633308a62001bf9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f6919081019062002b36565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000835573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085f919081019062002b36565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c4919062002b6f565b604051602001620008d89392919062002bbd565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092e98979695949392919062002bfa565b60405180910390a16200095962000953600084868c8c8c888051906020012062000c53565b62001c66565b6026546001600160a01b03166333d6247d6200097462000a5e565b6040518263ffffffff1660e01b81526004016200099391815260200190565b600060405180830381600087803b158015620009ae57600080fd5b505af1158015620009c3573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ff5760405162461bcd60e51b8152600401620005539062002c67565b62000a0962001db7565b565b600060246000848460405160200162000a2692919062002cc4565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b48578260011660010362000ac9576001816020811062000a955762000a9562002cee565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af6565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0360028462002d30565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3f9062002d47565b91505062000a69565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c44578160011660010362000bce5786818151811062000b8c5762000b8c62002cee565b60200260200101518360405160200162000bb0929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c20565b8287828151811062000be45762000be462002cee565b602002602001015160405160200162000c07929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2d60028362002d30565b91508062000c3b8162002d47565b91505062000b61565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d065760405162461bcd60e51b8152600401620005539062002a24565b62000d1c8a8a8a8a8a8a8a8a8a8a600162001e15565b62000d2d8963ffffffff16620020a0565b6000836001600160a01b03168387898560405160240162000d519392919062002d63565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d88919062002d9e565b60006040518083038185875af1925050503d806000811462000dc7576040519150601f19603f3d011682016040523d82523d6000602084013e62000dcc565b606091505b505090508062000e385760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e7195949392919062002dbc565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea75750600054600160ff909116105b8062000ec35750303b15801562000ec3575060005460ff166001145b62000f285760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f4c576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff16156200100b5760405162461bcd60e51b8152600401620005539062002a24565b620010218a8a8a8a8a8a8a8a8a8a600062001e15565b620010328963ffffffff16620020a0565b6001600160a01b0385166200112757604080516000808252602082019092526001600160a01b0385169084906040516200106d919062002d9e565b60006040518083038185875af1925050503d8060008114620010ac576040519150601f19603f3d011682016040523d82523d6000602084013e620010b1565b606091505b5050905080620011205760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b5062001445565b60225463ffffffff6101009091048116908716036200115c57620011566001600160a01b0386168484620020e2565b62001445565b600086866040516020016200117392919062002cc4565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013ca57600080600085806020019051810190620011c5919062002df3565b925092509250600085848484604051620011df90620023d6565b620011ed9392919062002bbd565b8190604051809103906000f59050801580156200120e573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001263573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001289919062002a9b565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013b89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001442565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200141a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001440919062002a9b565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200147e95949392919062002dbc565b60405180910390a150505050505050505050565b600080620014a36101008462002d30565b90506000620014b56101008562002e69565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014ef92919062002cc4565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200152290620023d6565b601f1982820381018352601f9091011660408190526200154f908d908d908d908d908d9060200162002ea9565b60408051601f19818403018152908290526200156f929160200162002eea565b60405160208183030381529060405280519060200120604051602001620015c894939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620016145760405162461bcd60e51b8152600401620005539062002a24565b60225463ffffffff6101009091048116908416036200169c5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016f098979695949392919062002bfa565b60405180910390a162001727620009536001602260019054906101000a900463ffffffff1633878734888051906020012062000c53565b6026546001600160a01b03166333d6247d6200174262000a5e565b6040518263ffffffff1660e01b81526004016200176191815260200190565b600060405180830381600087803b1580156200177c57600080fd5b505af115801562001791573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017c75760405162461bcd60e51b8152600401620005539062002c67565b62000a0962002114565b60006200181483838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021c392505050565b9050632afa533160e01b6001600160e01b031982160162001a0d57600080808080808062001846896004818d62002f1d565b81019062001855919062002f49565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018975760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b0386163014620018c25760405162461bcd60e51b8152600401620005539062003001565b8a8514620019395760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620019b9919062002d9e565b6000604051808303816000865af19150503d8060008114620019f8576040519150601f19603f3d011682016040523d82523d6000602084013e620019fd565b606091505b5050505050505050505062001bf2565b6001600160e01b031981166323f2ebc360e21b1462001a835760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a9b8a6004818e62002f1d565b81019062001aaa919062003052565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001aee5760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b038716301462001b195760405162461bcd60e51b8152600401620005539062003001565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001ba2919062002d9e565b6000604051808303816000865af19150503d806000811462001be1576040519150601f19603f3d011682016040523d82523d6000602084013e62001be6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdf9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021ca565b80600162001c7760206002620031db565b62001c839190620031e9565b6021541062001ce85760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cfd919062003203565b909155505060215460005b602081101562001da7578160011660010362001d3d57826001826020811062001d355762001d3562002cee565b015550505050565b6001816020811062001d535762001d5362002cee565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d90919062002d30565b91508062001d9e8162002d47565b91505062001d08565b5062001db26200321e565b505050565b60225460ff161562001ddd5760405162461bcd60e51b8152600401620005539062002a24565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001e268a63ffffffff1662001492565b1562001e7d5760405162461bcd60e51b81526020600482015260306024820152600080516020620047bb83398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ef1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f17919062003234565b90508060000362001f805760405162461bcd60e51b81526020600482015260396024820152600080516020620047bb83398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff8781166101009092041614620020025760405162461bcd60e51b81526020600482015260436024820152600080516020620047bb83398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff166200202057508862002023565b50895b6200204e6200203f848b8b8b8b8b8b8051906020012062000c53565b8e8e63ffffffff168462000b51565b620009c35760405162461bcd60e51b815260206004820152602c6024820152600080516020620047bb83398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020b06101008362002d30565b90506000620020c26101008462002e69565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001db290849063a9059cbb60e01b9060640162001c2e565b60225460ff166200218e5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002221826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022a39092919063ffffffff16565b80519091501562001db2578080602001905181019062002242919062002a9b565b62001db25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c4b848460008585600080866001600160a01b03168587604051620022cd919062002d9e565b60006040518083038185875af1925050503d80600081146200230c576040519150601f19603f3d011682016040523d82523d6000602084013e62002311565b606091505b509150915062002324878383876200232f565b979650505050505050565b60608315620023a35782516000036200239b576001600160a01b0385163b6200239b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c4b565b62000c4b8383815115620023ba5781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200324e565b611557806200326483390190565b6001600160a01b0381168114620023fa57600080fd5b50565b80356200240a81620023e4565b919050565b803563ffffffff811681146200240a57600080fd5b60008083601f8401126200243757600080fd5b50813567ffffffffffffffff8111156200245057600080fd5b6020830191508360208285010111156200246957600080fd5b9250929050565b60008060008060008060a087890312156200248a57600080fd5b86356200249781620023e4565b9550620024a7602088016200240f565b94506040870135620024b981620023e4565b935060608701359250608087013567ffffffffffffffff811115620024dd57600080fd5b620024eb89828a0162002424565b979a9699509497509295939492505050565b600080604083850312156200251157600080fd5b6200251c836200240f565b915060208301356200252e81620023e4565b809150509250929050565b6000602082840312156200254c57600080fd5b81356200255981620023e4565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620025a257620025a262002560565b604052919050565b600082601f830112620025bc57600080fd5b8135602067ffffffffffffffff821115620025db57620025db62002560565b8160051b620025ec82820162002576565b92835284810182019282810190878511156200260757600080fd5b83870192505b8483101562002324578235825291830191908301906200260d565b600080600080608085870312156200263f57600080fd5b84359350602085013567ffffffffffffffff808211156200265f57600080fd5b6200266d88838901620025aa565b94506040870135915080821682146200268557600080fd5b509396929550929360600135925050565b60ff81168114620023fa57600080fd5b600080600080600080600060e0888a031215620026c257600080fd5b8735620026cf8162002696565b9650620026df602089016200240f565b95506040880135620026f181620023e4565b945062002701606089016200240f565b935060808801356200271381620023e4565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200274d576200274d62002560565b50601f01601f191660200190565b600082601f8301126200276d57600080fd5b8135620027846200277e8262002730565b62002576565b8181528460208386010111156200279a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027d857600080fd5b8a3567ffffffffffffffff80821115620027f157600080fd5b620027ff8e838f01620025aa565b9b506200280f60208e016200240f565b9a5060408d0135995060608d013598506200282d60808e016200240f565b97506200283d60a08e01620023fd565b96506200284d60c08e016200240f565b95506200285d60e08e01620023fd565b94506101008d013593506101208d01359150808211156200287d57600080fd5b506200288c8d828e016200275b565b9150509295989b9194979a5092959850565b600080600060608486031215620028b457600080fd5b620028bf846200240f565b92506020840135620028d181620023e4565b91506040840135620028e381620023e4565b809150509250925092565b6000602082840312156200290157600080fd5b5035919050565b600080600080600080600060a0888a0312156200292457600080fd5b6200292f886200240f565b965060208801356200294181620023e4565b9550604088013567ffffffffffffffff808211156200295f57600080fd5b6200296d8b838c0162002424565b909750955060608a01359150808211156200298757600080fd5b50620029968a828b0162002424565b9094509250506080880135620029ac8162002696565b8091505092959891949750929550565b600080600060608486031215620029d257600080fd5b620029dd846200240f565b92506020840135620029ef81620023e4565b9150604084013567ffffffffffffffff81111562002a0c57600080fd5b62002a1a868287016200275b565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b8015158114620023fa57600080fd5b60006020828403121562002aae57600080fd5b8151620025598162002a8c565b60005b8381101562002ad857818101518382015260200162002abe565b8381111562000fdf5750506000910152565b600082601f83011262002afc57600080fd5b815162002b0d6200277e8262002730565b81815284602083860101111562002b2357600080fd5b62000c4b82602083016020870162002abb565b60006020828403121562002b4957600080fd5b815167ffffffffffffffff81111562002b6157600080fd5b62000c4b8482850162002aea565b60006020828403121562002b8257600080fd5b8151620025598162002696565b6000815180845262002ba981602086016020860162002abb565b601f01601f19169290920160200192915050565b60608152600062002bd2606083018662002b8f565b828103602084015262002be6818662002b8f565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002c4e8483018762002b8f565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79506f6c79676f6e5a4b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002d425762002d4262002d04565b500490565b60006001820162002d5c5762002d5c62002d1a565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d959083018462002b8f565b95945050505050565b6000825162002db281846020870162002abb565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002e0957600080fd5b835167ffffffffffffffff8082111562002e2257600080fd5b62002e308783880162002aea565b9450602086015191508082111562002e4757600080fd5b5062002e568682870162002aea565b9250506040840151620028e38162002696565b60008262002e7b5762002e7b62002d04565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002ebf60608301878962002e80565b828103602084015262002ed481868862002e80565b91505060ff831660408301529695505050505050565b6000835162002efe81846020880162002abb565b83519083019062002f1481836020880162002abb565b01949350505050565b6000808585111562002f2e57600080fd5b8386111562002f3c57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f6557600080fd5b873562002f7281620023e4565b9650602088013562002f8481620023e4565b955060408801359450606088013593506080880135620027138162002696565b6020808252603c908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b0312156200307057600080fd5b88356200307d81620023e4565b975060208901356200308f81620023e4565b965060408901359550606089013594506080890135620030af8162002a8c565b935060a0890135620030c18162002696565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200311f57816000190482111562003103576200310362002d1a565b808516156200311157918102915b93841c9390800290620030e3565b509250929050565b600082620031385750600162000a58565b81620031475750600062000a58565b81600181146200316057600281146200316b576200318b565b600191505062000a58565b60ff8411156200317f576200317f62002d1a565b50506001821b62000a58565b5060208310610133831016604e8410600b8410161715620031b0575081810a62000a58565b620031bc8383620030de565b8060001904821115620031d357620031d362002d1a565b029392505050565b600062002559838362003127565b600082821015620031fe57620031fe62002d1a565b500390565b6000821982111562003219576200321962002d1a565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200324757600080fd5b5051919050565b60208152600062002559602083018462002b8f56fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b5d95b18e7873c0bee5e5a0f8ba7f856feaa9a4588dd711619c14728f42e00f64736f6c634300080f0033506f6c79676f6e5a4b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220fcf8ddcb3964637d52f5fd8d11d619010d6cb056aa6548a5de8c54508f2525ef64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50614810806100206000396000f3fe608060405260043610620001675760003560e01c806381b1c17411620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b806381b1c17414620003735780638f61151914620003ad5780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b80633ae05047116200011e5780633ae0504714620002a25780633da8168214620002ba5780633e19704314620002df578063463855491462000304578063647c576c14620003295780637b6323c1146200034e57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002470565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009d2565b348015620001db57600080fd5b50620001f3620001ed366004620024fd565b62000a0b565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002539565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b506200022462000a5e565b348015620002c757600080fd5b50620001a1620002d936600462002628565b62000b51565b348015620002ec57600080fd5b5062000224620002fe366004620026a6565b62000c53565b3480156200031157600080fd5b506200018362000323366004620027b7565b62000ce0565b3480156200033657600080fd5b5062000183620003483660046200289e565b62000e86565b3480156200035b57600080fd5b50620001836200036d366004620027b7565b62000fe5565b3480156200038057600080fd5b50620001f362000392366004620028ee565b6024602052600090815260409020546001600160a01b031681565b348015620003ba57600080fd5b50602754620001f3906001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028ee565b62001492565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002908565b620014d7565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620029bc565b620015ee565b348015620004c357600080fd5b50620001836200179a565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028ee565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a24565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008ec565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074957604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562000710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000736919062002a9b565b50602081015181519094509250620008ea565b84156200075e576200075e8a888888620017d1565b620007756001600160a01b038b1633308a62001bf9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f6919081019062002b36565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000835573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085f919081019062002b36565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c4919062002b6f565b604051602001620008d89392919062002bbd565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092e98979695949392919062002bfa565b60405180910390a16200095962000953600084868c8c8c888051906020012062000c53565b62001c66565b6026546001600160a01b03166333d6247d6200097462000a5e565b6040518263ffffffff1660e01b81526004016200099391815260200190565b600060405180830381600087803b158015620009ae57600080fd5b505af1158015620009c3573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ff5760405162461bcd60e51b8152600401620005539062002c67565b62000a0962001db7565b565b600060246000848460405160200162000a2692919062002cc4565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b48578260011660010362000ac9576001816020811062000a955762000a9562002cee565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af6565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0360028462002d30565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3f9062002d47565b91505062000a69565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c44578160011660010362000bce5786818151811062000b8c5762000b8c62002cee565b60200260200101518360405160200162000bb0929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c20565b8287828151811062000be45762000be462002cee565b602002602001015160405160200162000c07929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2d60028362002d30565b91508062000c3b8162002d47565b91505062000b61565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d065760405162461bcd60e51b8152600401620005539062002a24565b62000d1c8a8a8a8a8a8a8a8a8a8a600162001e15565b62000d2d8963ffffffff16620020a0565b6000836001600160a01b03168387898560405160240162000d519392919062002d63565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d88919062002d9e565b60006040518083038185875af1925050503d806000811462000dc7576040519150601f19603f3d011682016040523d82523d6000602084013e62000dcc565b606091505b505090508062000e385760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e7195949392919062002dbc565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea75750600054600160ff909116105b8062000ec35750303b15801562000ec3575060005460ff166001145b62000f285760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f4c576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff16156200100b5760405162461bcd60e51b8152600401620005539062002a24565b620010218a8a8a8a8a8a8a8a8a8a600062001e15565b620010328963ffffffff16620020a0565b6001600160a01b0385166200112757604080516000808252602082019092526001600160a01b0385169084906040516200106d919062002d9e565b60006040518083038185875af1925050503d8060008114620010ac576040519150601f19603f3d011682016040523d82523d6000602084013e620010b1565b606091505b5050905080620011205760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b5062001445565b60225463ffffffff6101009091048116908716036200115c57620011566001600160a01b0386168484620020e2565b62001445565b600086866040516020016200117392919062002cc4565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013ca57600080600085806020019051810190620011c5919062002df3565b925092509250600085848484604051620011df90620023d6565b620011ed9392919062002bbd565b8190604051809103906000f59050801580156200120e573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001263573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001289919062002a9b565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013b89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001442565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200141a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001440919062002a9b565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200147e95949392919062002dbc565b60405180910390a150505050505050505050565b600080620014a36101008462002d30565b90506000620014b56101008562002e69565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014ef92919062002cc4565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200152290620023d6565b601f1982820381018352601f9091011660408190526200154f908d908d908d908d908d9060200162002ea9565b60408051601f19818403018152908290526200156f929160200162002eea565b60405160208183030381529060405280519060200120604051602001620015c894939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620016145760405162461bcd60e51b8152600401620005539062002a24565b60225463ffffffff6101009091048116908416036200169c5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016f098979695949392919062002bfa565b60405180910390a162001727620009536001602260019054906101000a900463ffffffff1633878734888051906020012062000c53565b6026546001600160a01b03166333d6247d6200174262000a5e565b6040518263ffffffff1660e01b81526004016200176191815260200190565b600060405180830381600087803b1580156200177c57600080fd5b505af115801562001791573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017c75760405162461bcd60e51b8152600401620005539062002c67565b62000a0962002114565b60006200181483838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021c392505050565b9050632afa533160e01b6001600160e01b031982160162001a0d57600080808080808062001846896004818d62002f1d565b81019062001855919062002f49565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018975760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b0386163014620018c25760405162461bcd60e51b8152600401620005539062003001565b8a8514620019395760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620019b9919062002d9e565b6000604051808303816000865af19150503d8060008114620019f8576040519150601f19603f3d011682016040523d82523d6000602084013e620019fd565b606091505b5050505050505050505062001bf2565b6001600160e01b031981166323f2ebc360e21b1462001a835760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a9b8a6004818e62002f1d565b81019062001aaa919062003052565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001aee5760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b038716301462001b195760405162461bcd60e51b8152600401620005539062003001565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001ba2919062002d9e565b6000604051808303816000865af19150503d806000811462001be1576040519150601f19603f3d011682016040523d82523d6000602084013e62001be6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdf9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021ca565b80600162001c7760206002620031db565b62001c839190620031e9565b6021541062001ce85760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cfd919062003203565b909155505060215460005b602081101562001da7578160011660010362001d3d57826001826020811062001d355762001d3562002cee565b015550505050565b6001816020811062001d535762001d5362002cee565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d90919062002d30565b91508062001d9e8162002d47565b91505062001d08565b5062001db26200321e565b505050565b60225460ff161562001ddd5760405162461bcd60e51b8152600401620005539062002a24565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001e268a63ffffffff1662001492565b1562001e7d5760405162461bcd60e51b81526020600482015260306024820152600080516020620047bb83398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ef1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f17919062003234565b90508060000362001f805760405162461bcd60e51b81526020600482015260396024820152600080516020620047bb83398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff8781166101009092041614620020025760405162461bcd60e51b81526020600482015260436024820152600080516020620047bb83398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff166200202057508862002023565b50895b6200204e6200203f848b8b8b8b8b8b8051906020012062000c53565b8e8e63ffffffff168462000b51565b620009c35760405162461bcd60e51b815260206004820152602c6024820152600080516020620047bb83398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020b06101008362002d30565b90506000620020c26101008462002e69565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001db290849063a9059cbb60e01b9060640162001c2e565b60225460ff166200218e5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002221826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022a39092919063ffffffff16565b80519091501562001db2578080602001905181019062002242919062002a9b565b62001db25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c4b848460008585600080866001600160a01b03168587604051620022cd919062002d9e565b60006040518083038185875af1925050503d80600081146200230c576040519150601f19603f3d011682016040523d82523d6000602084013e62002311565b606091505b509150915062002324878383876200232f565b979650505050505050565b60608315620023a35782516000036200239b576001600160a01b0385163b6200239b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c4b565b62000c4b8383815115620023ba5781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200324e565b611557806200326483390190565b6001600160a01b0381168114620023fa57600080fd5b50565b80356200240a81620023e4565b919050565b803563ffffffff811681146200240a57600080fd5b60008083601f8401126200243757600080fd5b50813567ffffffffffffffff8111156200245057600080fd5b6020830191508360208285010111156200246957600080fd5b9250929050565b60008060008060008060a087890312156200248a57600080fd5b86356200249781620023e4565b9550620024a7602088016200240f565b94506040870135620024b981620023e4565b935060608701359250608087013567ffffffffffffffff811115620024dd57600080fd5b620024eb89828a0162002424565b979a9699509497509295939492505050565b600080604083850312156200251157600080fd5b6200251c836200240f565b915060208301356200252e81620023e4565b809150509250929050565b6000602082840312156200254c57600080fd5b81356200255981620023e4565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620025a257620025a262002560565b604052919050565b600082601f830112620025bc57600080fd5b8135602067ffffffffffffffff821115620025db57620025db62002560565b8160051b620025ec82820162002576565b92835284810182019282810190878511156200260757600080fd5b83870192505b8483101562002324578235825291830191908301906200260d565b600080600080608085870312156200263f57600080fd5b84359350602085013567ffffffffffffffff808211156200265f57600080fd5b6200266d88838901620025aa565b94506040870135915080821682146200268557600080fd5b509396929550929360600135925050565b60ff81168114620023fa57600080fd5b600080600080600080600060e0888a031215620026c257600080fd5b8735620026cf8162002696565b9650620026df602089016200240f565b95506040880135620026f181620023e4565b945062002701606089016200240f565b935060808801356200271381620023e4565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200274d576200274d62002560565b50601f01601f191660200190565b600082601f8301126200276d57600080fd5b8135620027846200277e8262002730565b62002576565b8181528460208386010111156200279a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027d857600080fd5b8a3567ffffffffffffffff80821115620027f157600080fd5b620027ff8e838f01620025aa565b9b506200280f60208e016200240f565b9a5060408d0135995060608d013598506200282d60808e016200240f565b97506200283d60a08e01620023fd565b96506200284d60c08e016200240f565b95506200285d60e08e01620023fd565b94506101008d013593506101208d01359150808211156200287d57600080fd5b506200288c8d828e016200275b565b9150509295989b9194979a5092959850565b600080600060608486031215620028b457600080fd5b620028bf846200240f565b92506020840135620028d181620023e4565b91506040840135620028e381620023e4565b809150509250925092565b6000602082840312156200290157600080fd5b5035919050565b600080600080600080600060a0888a0312156200292457600080fd5b6200292f886200240f565b965060208801356200294181620023e4565b9550604088013567ffffffffffffffff808211156200295f57600080fd5b6200296d8b838c0162002424565b909750955060608a01359150808211156200298757600080fd5b50620029968a828b0162002424565b9094509250506080880135620029ac8162002696565b8091505092959891949750929550565b600080600060608486031215620029d257600080fd5b620029dd846200240f565b92506020840135620029ef81620023e4565b9150604084013567ffffffffffffffff81111562002a0c57600080fd5b62002a1a868287016200275b565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b8015158114620023fa57600080fd5b60006020828403121562002aae57600080fd5b8151620025598162002a8c565b60005b8381101562002ad857818101518382015260200162002abe565b8381111562000fdf5750506000910152565b600082601f83011262002afc57600080fd5b815162002b0d6200277e8262002730565b81815284602083860101111562002b2357600080fd5b62000c4b82602083016020870162002abb565b60006020828403121562002b4957600080fd5b815167ffffffffffffffff81111562002b6157600080fd5b62000c4b8482850162002aea565b60006020828403121562002b8257600080fd5b8151620025598162002696565b6000815180845262002ba981602086016020860162002abb565b601f01601f19169290920160200192915050565b60608152600062002bd2606083018662002b8f565b828103602084015262002be6818662002b8f565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002c4e8483018762002b8f565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002d425762002d4262002d04565b500490565b60006001820162002d5c5762002d5c62002d1a565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d959083018462002b8f565b95945050505050565b6000825162002db281846020870162002abb565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002e0957600080fd5b835167ffffffffffffffff8082111562002e2257600080fd5b62002e308783880162002aea565b9450602086015191508082111562002e4757600080fd5b5062002e568682870162002aea565b9250506040840151620028e38162002696565b60008262002e7b5762002e7b62002d04565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002ebf60608301878962002e80565b828103602084015262002ed481868862002e80565b91505060ff831660408301529695505050505050565b6000835162002efe81846020880162002abb565b83519083019062002f1481836020880162002abb565b01949350505050565b6000808585111562002f2e57600080fd5b8386111562002f3c57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f6557600080fd5b873562002f7281620023e4565b9650602088013562002f8481620023e4565b955060408801359450606088013593506080880135620027138162002696565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b0312156200307057600080fd5b88356200307d81620023e4565b975060208901356200308f81620023e4565b965060408901359550606089013594506080890135620030af8162002a8c565b935060a0890135620030c18162002696565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200311f57816000190482111562003103576200310362002d1a565b808516156200311157918102915b93841c9390800290620030e3565b509250929050565b600082620031385750600162000a58565b81620031475750600062000a58565b81600181146200316057600281146200316b576200318b565b600191505062000a58565b60ff8411156200317f576200317f62002d1a565b50506001821b62000a58565b5060208310610133831016604e8410600b8410161715620031b0575081810a62000a58565b620031bc8383620030de565b8060001904821115620031d357620031d362002d1a565b029392505050565b600062002559838362003127565b600082821015620031fe57620031fe62002d1a565b500390565b6000821982111562003219576200321962002d1a565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200324757600080fd5b5051919050565b60208152600062002559602083018462002b8f56fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea264697066735822122070fae8b3daebe7fc894d50296739b7a26e638f37239109230c7dfd552785f2a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220a0c682e41bbc0bcf599110077edba37d297487e713d10fc5634097fd73bd508664736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001675760003560e01c806381b1c17411620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b806381b1c17414620003735780638f61151914620003ad5780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b80633ae05047116200011e5780633ae0504714620002a25780633da8168214620002ba5780633e19704314620002df578063463855491462000304578063647c576c14620003295780637b6323c1146200034e57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002470565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009d2565b348015620001db57600080fd5b50620001f3620001ed366004620024fd565b62000a0b565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002539565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b506200022462000a5e565b348015620002c757600080fd5b50620001a1620002d936600462002628565b62000b51565b348015620002ec57600080fd5b5062000224620002fe366004620026a6565b62000c53565b3480156200031157600080fd5b506200018362000323366004620027b7565b62000ce0565b3480156200033657600080fd5b5062000183620003483660046200289e565b62000e86565b3480156200035b57600080fd5b50620001836200036d366004620027b7565b62000fe5565b3480156200038057600080fd5b50620001f362000392366004620028ee565b6024602052600090815260409020546001600160a01b031681565b348015620003ba57600080fd5b50602754620001f3906001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028ee565b62001492565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002908565b620014d7565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620029bc565b620015ee565b348015620004c357600080fd5b50620001836200179a565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028ee565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a24565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008ec565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074957604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562000710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000736919062002a9b565b50602081015181519094509250620008ea565b84156200075e576200075e8a888888620017d1565b620007756001600160a01b038b1633308a62001bf9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f6919081019062002b36565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000835573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085f919081019062002b36565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c4919062002b6f565b604051602001620008d89392919062002bbd565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092e98979695949392919062002bfa565b60405180910390a16200095962000953600084868c8c8c888051906020012062000c53565b62001c66565b6026546001600160a01b03166333d6247d6200097462000a5e565b6040518263ffffffff1660e01b81526004016200099391815260200190565b600060405180830381600087803b158015620009ae57600080fd5b505af1158015620009c3573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ff5760405162461bcd60e51b8152600401620005539062002c67565b62000a0962001db7565b565b600060246000848460405160200162000a2692919062002cc4565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b48578260011660010362000ac9576001816020811062000a955762000a9562002cee565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af6565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0360028462002d30565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3f9062002d47565b91505062000a69565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c44578160011660010362000bce5786818151811062000b8c5762000b8c62002cee565b60200260200101518360405160200162000bb0929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c20565b8287828151811062000be45762000be462002cee565b602002602001015160405160200162000c07929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2d60028362002d30565b91508062000c3b8162002d47565b91505062000b61565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d065760405162461bcd60e51b8152600401620005539062002a24565b62000d1c8a8a8a8a8a8a8a8a8a8a600162001e15565b62000d2d8963ffffffff16620020a0565b6000836001600160a01b03168387898560405160240162000d519392919062002d63565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d88919062002d9e565b60006040518083038185875af1925050503d806000811462000dc7576040519150601f19603f3d011682016040523d82523d6000602084013e62000dcc565b606091505b505090508062000e385760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e7195949392919062002dbc565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea75750600054600160ff909116105b8062000ec35750303b15801562000ec3575060005460ff166001145b62000f285760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f4c576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff16156200100b5760405162461bcd60e51b8152600401620005539062002a24565b620010218a8a8a8a8a8a8a8a8a8a600062001e15565b620010328963ffffffff16620020a0565b6001600160a01b0385166200112757604080516000808252602082019092526001600160a01b0385169084906040516200106d919062002d9e565b60006040518083038185875af1925050503d8060008114620010ac576040519150601f19603f3d011682016040523d82523d6000602084013e620010b1565b606091505b5050905080620011205760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b5062001445565b60225463ffffffff6101009091048116908716036200115c57620011566001600160a01b0386168484620020e2565b62001445565b600086866040516020016200117392919062002cc4565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013ca57600080600085806020019051810190620011c5919062002df3565b925092509250600085848484604051620011df90620023d6565b620011ed9392919062002bbd565b8190604051809103906000f59050801580156200120e573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001263573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001289919062002a9b565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013b89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001442565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200141a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001440919062002a9b565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200147e95949392919062002dbc565b60405180910390a150505050505050505050565b600080620014a36101008462002d30565b90506000620014b56101008562002e69565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014ef92919062002cc4565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200152290620023d6565b601f1982820381018352601f9091011660408190526200154f908d908d908d908d908d9060200162002ea9565b60408051601f19818403018152908290526200156f929160200162002eea565b60405160208183030381529060405280519060200120604051602001620015c894939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620016145760405162461bcd60e51b8152600401620005539062002a24565b60225463ffffffff6101009091048116908416036200169c5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016f098979695949392919062002bfa565b60405180910390a162001727620009536001602260019054906101000a900463ffffffff1633878734888051906020012062000c53565b6026546001600160a01b03166333d6247d6200174262000a5e565b6040518263ffffffff1660e01b81526004016200176191815260200190565b600060405180830381600087803b1580156200177c57600080fd5b505af115801562001791573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017c75760405162461bcd60e51b8152600401620005539062002c67565b62000a0962002114565b60006200181483838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021c392505050565b9050632afa533160e01b6001600160e01b031982160162001a0d57600080808080808062001846896004818d62002f1d565b81019062001855919062002f49565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018975760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b0386163014620018c25760405162461bcd60e51b8152600401620005539062003001565b8a8514620019395760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620019b9919062002d9e565b6000604051808303816000865af19150503d8060008114620019f8576040519150601f19603f3d011682016040523d82523d6000602084013e620019fd565b606091505b5050505050505050505062001bf2565b6001600160e01b031981166323f2ebc360e21b1462001a835760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a9b8a6004818e62002f1d565b81019062001aaa919062003052565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001aee5760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b038716301462001b195760405162461bcd60e51b8152600401620005539062003001565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001ba2919062002d9e565b6000604051808303816000865af19150503d806000811462001be1576040519150601f19603f3d011682016040523d82523d6000602084013e62001be6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdf9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021ca565b80600162001c7760206002620031db565b62001c839190620031e9565b6021541062001ce85760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cfd919062003203565b909155505060215460005b602081101562001da7578160011660010362001d3d57826001826020811062001d355762001d3562002cee565b015550505050565b6001816020811062001d535762001d5362002cee565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d90919062002d30565b91508062001d9e8162002d47565b91505062001d08565b5062001db26200321e565b505050565b60225460ff161562001ddd5760405162461bcd60e51b8152600401620005539062002a24565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001e268a63ffffffff1662001492565b1562001e7d5760405162461bcd60e51b81526020600482015260306024820152600080516020620047bb83398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ef1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f17919062003234565b90508060000362001f805760405162461bcd60e51b81526020600482015260396024820152600080516020620047bb83398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff8781166101009092041614620020025760405162461bcd60e51b81526020600482015260436024820152600080516020620047bb83398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff166200202057508862002023565b50895b6200204e6200203f848b8b8b8b8b8b8051906020012062000c53565b8e8e63ffffffff168462000b51565b620009c35760405162461bcd60e51b815260206004820152602c6024820152600080516020620047bb83398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020b06101008362002d30565b90506000620020c26101008462002e69565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001db290849063a9059cbb60e01b9060640162001c2e565b60225460ff166200218e5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002221826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022a39092919063ffffffff16565b80519091501562001db2578080602001905181019062002242919062002a9b565b62001db25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c4b848460008585600080866001600160a01b03168587604051620022cd919062002d9e565b60006040518083038185875af1925050503d80600081146200230c576040519150601f19603f3d011682016040523d82523d6000602084013e62002311565b606091505b509150915062002324878383876200232f565b979650505050505050565b60608315620023a35782516000036200239b576001600160a01b0385163b6200239b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c4b565b62000c4b8383815115620023ba5781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200324e565b611557806200326483390190565b6001600160a01b0381168114620023fa57600080fd5b50565b80356200240a81620023e4565b919050565b803563ffffffff811681146200240a57600080fd5b60008083601f8401126200243757600080fd5b50813567ffffffffffffffff8111156200245057600080fd5b6020830191508360208285010111156200246957600080fd5b9250929050565b60008060008060008060a087890312156200248a57600080fd5b86356200249781620023e4565b9550620024a7602088016200240f565b94506040870135620024b981620023e4565b935060608701359250608087013567ffffffffffffffff811115620024dd57600080fd5b620024eb89828a0162002424565b979a9699509497509295939492505050565b600080604083850312156200251157600080fd5b6200251c836200240f565b915060208301356200252e81620023e4565b809150509250929050565b6000602082840312156200254c57600080fd5b81356200255981620023e4565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620025a257620025a262002560565b604052919050565b600082601f830112620025bc57600080fd5b8135602067ffffffffffffffff821115620025db57620025db62002560565b8160051b620025ec82820162002576565b92835284810182019282810190878511156200260757600080fd5b83870192505b8483101562002324578235825291830191908301906200260d565b600080600080608085870312156200263f57600080fd5b84359350602085013567ffffffffffffffff808211156200265f57600080fd5b6200266d88838901620025aa565b94506040870135915080821682146200268557600080fd5b509396929550929360600135925050565b60ff81168114620023fa57600080fd5b600080600080600080600060e0888a031215620026c257600080fd5b8735620026cf8162002696565b9650620026df602089016200240f565b95506040880135620026f181620023e4565b945062002701606089016200240f565b935060808801356200271381620023e4565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200274d576200274d62002560565b50601f01601f191660200190565b600082601f8301126200276d57600080fd5b8135620027846200277e8262002730565b62002576565b8181528460208386010111156200279a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027d857600080fd5b8a3567ffffffffffffffff80821115620027f157600080fd5b620027ff8e838f01620025aa565b9b506200280f60208e016200240f565b9a5060408d0135995060608d013598506200282d60808e016200240f565b97506200283d60a08e01620023fd565b96506200284d60c08e016200240f565b95506200285d60e08e01620023fd565b94506101008d013593506101208d01359150808211156200287d57600080fd5b506200288c8d828e016200275b565b9150509295989b9194979a5092959850565b600080600060608486031215620028b457600080fd5b620028bf846200240f565b92506020840135620028d181620023e4565b91506040840135620028e381620023e4565b809150509250925092565b6000602082840312156200290157600080fd5b5035919050565b600080600080600080600060a0888a0312156200292457600080fd5b6200292f886200240f565b965060208801356200294181620023e4565b9550604088013567ffffffffffffffff808211156200295f57600080fd5b6200296d8b838c0162002424565b909750955060608a01359150808211156200298757600080fd5b50620029968a828b0162002424565b9094509250506080880135620029ac8162002696565b8091505092959891949750929550565b600080600060608486031215620029d257600080fd5b620029dd846200240f565b92506020840135620029ef81620023e4565b9150604084013567ffffffffffffffff81111562002a0c57600080fd5b62002a1a868287016200275b565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b8015158114620023fa57600080fd5b60006020828403121562002aae57600080fd5b8151620025598162002a8c565b60005b8381101562002ad857818101518382015260200162002abe565b8381111562000fdf5750506000910152565b600082601f83011262002afc57600080fd5b815162002b0d6200277e8262002730565b81815284602083860101111562002b2357600080fd5b62000c4b82602083016020870162002abb565b60006020828403121562002b4957600080fd5b815167ffffffffffffffff81111562002b6157600080fd5b62000c4b8482850162002aea565b60006020828403121562002b8257600080fd5b8151620025598162002696565b6000815180845262002ba981602086016020860162002abb565b601f01601f19169290920160200192915050565b60608152600062002bd2606083018662002b8f565b828103602084015262002be6818662002b8f565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002c4e8483018762002b8f565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002d425762002d4262002d04565b500490565b60006001820162002d5c5762002d5c62002d1a565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d959083018462002b8f565b95945050505050565b6000825162002db281846020870162002abb565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002e0957600080fd5b835167ffffffffffffffff8082111562002e2257600080fd5b62002e308783880162002aea565b9450602086015191508082111562002e4757600080fd5b5062002e568682870162002aea565b9250506040840151620028e38162002696565b60008262002e7b5762002e7b62002d04565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002ebf60608301878962002e80565b828103602084015262002ed481868862002e80565b91505060ff831660408301529695505050505050565b6000835162002efe81846020880162002abb565b83519083019062002f1481836020880162002abb565b01949350505050565b6000808585111562002f2e57600080fd5b8386111562002f3c57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f6557600080fd5b873562002f7281620023e4565b9650602088013562002f8481620023e4565b955060408801359450606088013593506080880135620027138162002696565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b0312156200307057600080fd5b88356200307d81620023e4565b975060208901356200308f81620023e4565b965060408901359550606089013594506080890135620030af8162002a8c565b935060a0890135620030c18162002696565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200311f57816000190482111562003103576200310362002d1a565b808516156200311157918102915b93841c9390800290620030e3565b509250929050565b600082620031385750600162000a58565b81620031475750600062000a58565b81600181146200316057600281146200316b576200318b565b600191505062000a58565b60ff8411156200317f576200317f62002d1a565b50506001821b62000a58565b5060208310610133831016604e8410600b8410161715620031b0575081810a62000a58565b620031bc8383620030de565b8060001904821115620031d357620031d362002d1a565b029392505050565b600062002559838362003127565b600082821015620031fe57620031fe62002d1a565b500390565b6000821982111562003219576200321962002d1a565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200324757600080fd5b5051919050565b60208152600062002559602083018462002b8f56fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea264697066735822122070fae8b3daebe7fc894d50296739b7a26e638f37239109230c7dfd552785f2a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220a0c682e41bbc0bcf599110077edba37d297487e713d10fc5634097fd73bd508664736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZKEVMBridgeMock.json b/compiled-contracts/PolygonZkEVMBridgeMock.json similarity index 97% rename from compiled-contracts/PolygonZKEVMBridgeMock.json rename to compiled-contracts/PolygonZkEVMBridgeMock.json index 22b109ffb..69f571289 100644 --- a/compiled-contracts/PolygonZKEVMBridgeMock.json +++ b/compiled-contracts/PolygonZkEVMBridgeMock.json @@ -1,7 +1,7 @@ { "_format": "hh-sol-artifact-1", - "contractName": "PolygonZKEVMBridgeMock", - "sourceName": "contracts/mocks/PolygonZKEVMBridgeMock.sol", + "contractName": "PolygonZkEVMBridgeMock", + "sourceName": "contracts/mocks/PolygonZkEVMBridgeMock.sol", "abi": [ { "anonymous": false, @@ -512,7 +512,7 @@ "name": "globalExitRootManager", "outputs": [ { - "internalType": "contract IPolygonZKEVMGlobalExitRoot", + "internalType": "contract IPolygonZkEVMGlobalExitRoot", "name": "", "type": "address" } @@ -528,7 +528,7 @@ "type": "uint32" }, { - "internalType": "contract IPolygonZKEVMGlobalExitRoot", + "internalType": "contract IPolygonZkEVMGlobalExitRoot", "name": "_globalExitRootManager", "type": "address" }, @@ -790,8 +790,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50614c1a806100206000396000f3fe608060405260043610620001f35760003560e01c806381b1c174116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b806381b1c17414620004615780638da5cb5b146200049b5780638f61151914620004bb57600080fd5b8063318aee3d116200018d5780634638554911620001585780634638554914620003da578063647c576c14620003ff578063715018a614620004245780637b6323c1146200043c57600080fd5b8063318aee3d14620003095780633ae0504714620003785780633da8168214620003905780633e19704314620003b557600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f620002093660046200285c565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f6200071e565b3480156200026757600080fd5b506200027f62000279366004620028e9565b62000757565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002925565b620007aa565b348015620002ca57600080fd5b506200020f620002dc3660046200293f565b620007b9565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002964565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b50620002fa620007e5565b3480156200039d57600080fd5b506200022d620003af36600462002a4c565b620008d8565b348015620003c257600080fd5b50620002fa620003d436600462002aca565b620009da565b348015620003e757600080fd5b506200020f620003f936600462002bdb565b62000a67565b3480156200040c57600080fd5b506200020f6200041e36600462002cc2565b62000c0d565b3480156200043157600080fd5b506200020f62000d82565b3480156200044957600080fd5b506200020f6200045b36600462002bdb565b62000d98565b3480156200046e57600080fd5b506200027f6200048036600462002925565b6024602052600090815260409020546001600160a01b031681565b348015620004a857600080fd5b50605a546001600160a01b03166200027f565b348015620004c857600080fd5b506027546200027f906001600160a01b031681565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002925565b62001245565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002d12565b6200128a565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002dc6565b620013a1565b348015620005e957600080fd5b506200020f62001553565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002925565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002964565b6200158a565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007065760405162461bcd60e51b815260206004820152604760248201527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b6200071686868686868662001609565b505050505050565b6027546001600160a01b031633146200074b5760405162461bcd60e51b8152600401620006fd9062002e2e565b6200075562001a9f565b565b60006024600084846040516020016200077292919062002e8b565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b462001afd565b608c55565b620007c362001afd565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008cf57826001166001036200085057600181602081106200081c576200081c62002eb5565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200087d565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088a60028462002ef7565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c69062002f0e565b915050620007f0565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009cb5781600116600103620009555786818151811062000913576200091362002eb5565b60200260200101518360405160200162000937929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009a7565b828782815181106200096b576200096b62002eb5565b60200260200101516040516020016200098e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b460028362002ef7565b915080620009c28162002f0e565b915050620008e8565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a8d5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000aa38a8a8a8a8a8a8a8a8a8a600162001b59565b62000ab48963ffffffff1662001de4565b6000836001600160a01b03168387898560405160240162000ad89392919062002fef565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b0f91906200302a565b60006040518083038185875af1925050503d806000811462000b4e576040519150601f19603f3d011682016040523d82523d6000602084013e62000b53565b606091505b505090508062000bbf5760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b6064820152608401620006fd565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bf895949392919062003048565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c2e5750600054600160ff909116105b8062000c4a5750303b15801562000c4a575060005460ff166001145b62000caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006fd565b6000805460ff19166001179055801562000cd3576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d3562001e26565b801562000d7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8c62001afd565b62000755600062001e99565b60225460ff161562000dbe5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000dd48a8a8a8a8a8a8a8a8a8a600062001b59565b62000de58963ffffffff1662001de4565b6001600160a01b03851662000eda57604080516000808252602082019092526001600160a01b03851690849060405162000e2091906200302a565b60006040518083038185875af1925050503d806000811462000e5f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e64565b606091505b505090508062000ed35760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b6064820152608401620006fd565b50620011f8565b60225463ffffffff61010090910481169087160362000f0f5762000f096001600160a01b038616848462001eeb565b620011f8565b6000868660405160200162000f2692919062002e8b565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200117d5760008060008580602001905181019062000f789190620030cb565b92509250925060008584848460405162000f9290620027c5565b62000fa09392919062003141565b8190604051809103906000f590508015801562000fc1573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001016573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200103c91906200318d565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200116b9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011f5565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620011cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011f391906200318d565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200123195949392919062003048565b60405180910390a150505050505050505050565b600080620012566101008462002ef7565b905060006200126861010085620031ad565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620012a292919062002e8b565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012d590620027c5565b601f1982820381018352601f90910116604081905262001302908d908d908d908d908d90602001620031ed565b60408051601f19818403018152908290526200132292916020016200322e565b604051602081830303815290604052805190602001206040516020016200137b94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013c75760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff6101009091048116908416036200144f5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c460000006064820152608401620006fd565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620014a398979695949392919062003261565b60405180910390a1620014e0620014da6001602260019054906101000a900463ffffffff16338787348880519060200120620009da565b62001f55565b6026546001600160a01b03166333d6247d620014fb620007e5565b6040518263ffffffff1660e01b81526004016200151a91815260200190565b600060405180830381600087803b1580156200153557600080fd5b505af11580156200154a573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015805760405162461bcd60e51b8152600401620006fd9062002e2e565b62000755620020a1565b6200159462001afd565b6001600160a01b038116620015fb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006fd565b620016068162001e99565b50565b60225460ff16156200162f5760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff610100909104811690861603620016b75760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c4600000000006064820152608401620006fd565b60008060606001600160a01b0389166200174e5785341462001744576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c55456064820152608401620006fd565b60009150620019bf565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200181c57604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af1158015620017e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200180991906200318d565b50602081015181519094509250620019bd565b84156200183157620018318a88888862002150565b620018486001600160a01b038b1633308a62002578565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200189f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018c99190810190620032ce565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001908573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620019329190810190620032ce565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001971573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001997919062003307565b604051602001620019ab9392919062003141565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162001a0198979695949392919062003261565b60405180910390a162001a26620014da600084868c8c8c8880519060200120620009da565b6026546001600160a01b03166333d6247d62001a41620007e5565b6040518263ffffffff1660e01b815260040162001a6091815260200190565b600060405180830381600087803b15801562001a7b57600080fd5b505af115801562001a90573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001ac55760405162461bcd60e51b8152600401620006fd9062002f2a565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006fd565b62001b6a8a63ffffffff1662001245565b1562001bc15760405162461bcd60e51b8152602060048201526030602482015260008051602062004bc583398151915260448201526f081053149150511657d0d3105253515160821b6064820152608401620006fd565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001c35573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c5b919062003327565b90508060000362001cc45760405162461bcd60e51b8152602060048201526039602482015260008051602062004bc583398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c4944000000000000006064820152608401620006fd565b60225463ffffffff878116610100909204161462001d465760405162461bcd60e51b8152602060048201526043602482015260008051602062004bc583398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a401620006fd565b602254600090610100900463ffffffff1662001d6457508862001d67565b50895b62001d9262001d83848b8b8b8b8b8b80519060200120620009da565b8e8e63ffffffff1684620008d8565b62001a905760405162461bcd60e51b815260206004820152602c602482015260008051602062004bc583398151915260448201526b0814d35517d253959053125160a21b6064820152608401620006fd565b600062001df46101008362002ef7565b9050600062001e0661010084620031ad565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001e935760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006fd565b62000755335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001f5090849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620025b2565b505050565b80600162001f66602060026200343e565b62001f7291906200344c565b6021541062001fd75760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b6064820152608401620006fd565b60016021600082825462001fec919062003466565b909155505060215460005b60208110156200209657816001166001036200202c57826001826020811062002024576200202462002eb5565b015550505050565b6001816020811062002042576200204262002eb5565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200207f919062002ef7565b9150806200208d8162002f0e565b91505062001ff7565b5062001f5062003481565b60225460ff166200211b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006fd565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200219383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200268b92505050565b9050632afa533160e01b6001600160e01b03198216016200238c576000808080808080620021c5896004818d62003497565b810190620021d49190620034c3565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620022165760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0386163014620022415760405162461bcd60e51b8152600401620006fd906200357b565b8a8514620022b85760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d41544348000000000000006064820152608401620006fd565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200233891906200302a565b6000604051808303816000865af19150503d806000811462002377576040519150601f19603f3d011682016040523d82523d6000602084013e6200237c565b606091505b5050505050505050505062002571565b6001600160e01b031981166323f2ebc360e21b14620024025760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b6064820152608401620006fd565b6000808080808080806200241a8a6004818e62003497565b810190620024299190620035cc565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200246d5760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0387163014620024985760405162461bcd60e51b8152600401620006fd906200357b565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f16916200252191906200302a565b6000604051808303816000865af19150503d806000811462002560576040519150601f19603f3d011682016040523d82523d6000602084013e62002565565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d7c9085906323b872dd60e01b9060840162001f18565b600062002609826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620026929092919063ffffffff16565b80519091501562001f5057808060200190518101906200262a91906200318d565b62001f505760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006fd565b6020015190565b6060620009d2848460008585600080866001600160a01b03168587604051620026bc91906200302a565b60006040518083038185875af1925050503d8060008114620026fb576040519150601f19603f3d011682016040523d82523d6000602084013e62002700565b606091505b509150915062002713878383876200271e565b979650505050505050565b60608315620027925782516000036200278a576001600160a01b0385163b6200278a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006fd565b5081620009d2565b620009d28383815115620027a95781518083602001fd5b8060405162461bcd60e51b8152600401620006fd919062003658565b611557806200366e83390190565b6001600160a01b03811681146200160657600080fd5b8035620027f681620027d3565b919050565b803563ffffffff81168114620027f657600080fd5b60008083601f8401126200282357600080fd5b50813567ffffffffffffffff8111156200283c57600080fd5b6020830191508360208285010111156200285557600080fd5b9250929050565b60008060008060008060a087890312156200287657600080fd5b86356200288381620027d3565b95506200289360208801620027fb565b94506040870135620028a581620027d3565b935060608701359250608087013567ffffffffffffffff811115620028c957600080fd5b620028d789828a0162002810565b979a9699509497509295939492505050565b60008060408385031215620028fd57600080fd5b6200290883620027fb565b915060208301356200291a81620027d3565b809150509250929050565b6000602082840312156200293857600080fd5b5035919050565b6000602082840312156200295257600080fd5b6200295d82620027fb565b9392505050565b6000602082840312156200297757600080fd5b81356200295d81620027d3565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620029c657620029c662002984565b604052919050565b600082601f830112620029e057600080fd5b8135602067ffffffffffffffff821115620029ff57620029ff62002984565b8160051b62002a108282016200299a565b928352848101820192828101908785111562002a2b57600080fd5b83870192505b84831015620027135782358252918301919083019062002a31565b6000806000806080858703121562002a6357600080fd5b84359350602085013567ffffffffffffffff8082111562002a8357600080fd5b62002a9188838901620029ce565b945060408701359150808216821462002aa957600080fd5b509396929550929360600135925050565b60ff811681146200160657600080fd5b600080600080600080600060e0888a03121562002ae657600080fd5b873562002af38162002aba565b965062002b0360208901620027fb565b9550604088013562002b1581620027d3565b945062002b2560608901620027fb565b9350608088013562002b3781620027d3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002b715762002b7162002984565b50601f01601f191660200190565b600082601f83011262002b9157600080fd5b813562002ba862002ba28262002b54565b6200299a565b81815284602083860101111562002bbe57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002bfc57600080fd5b8a3567ffffffffffffffff8082111562002c1557600080fd5b62002c238e838f01620029ce565b9b5062002c3360208e01620027fb565b9a5060408d0135995060608d0135985062002c5160808e01620027fb565b975062002c6160a08e01620027e9565b965062002c7160c08e01620027fb565b955062002c8160e08e01620027e9565b94506101008d013593506101208d013591508082111562002ca157600080fd5b5062002cb08d828e0162002b7f565b9150509295989b9194979a5092959850565b60008060006060848603121562002cd857600080fd5b62002ce384620027fb565b9250602084013562002cf581620027d3565b9150604084013562002d0781620027d3565b809150509250925092565b600080600080600080600060a0888a03121562002d2e57600080fd5b62002d3988620027fb565b9650602088013562002d4b81620027d3565b9550604088013567ffffffffffffffff8082111562002d6957600080fd5b62002d778b838c0162002810565b909750955060608a013591508082111562002d9157600080fd5b5062002da08a828b0162002810565b909450925050608088013562002db68162002aba565b8091505092959891949750929550565b60008060006060848603121562002ddc57600080fd5b62002de784620027fb565b9250602084013562002df981620027d3565b9150604084013567ffffffffffffffff81111562002e1657600080fd5b62002e248682870162002b7f565b9150509250925092565b6020808252603d908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79506f6c79676f6e5a4b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002f095762002f0962002ecb565b500490565b60006001820162002f235762002f2362002ee1565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002faf57818101518382015260200162002f95565b8381111562000d7c5750506000910152565b6000815180845262002fdb81602086016020860162002f92565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff83166020820152606060408201819052600090620030219083018462002fc1565b95945050505050565b600082516200303e81846020870162002f92565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f8301126200309157600080fd5b8151620030a262002ba28262002b54565b818152846020838601011115620030b857600080fd5b620009d282602083016020870162002f92565b600080600060608486031215620030e157600080fd5b835167ffffffffffffffff80821115620030fa57600080fd5b62003108878388016200307f565b945060208601519150808211156200311f57600080fd5b506200312e868287016200307f565b925050604084015162002d078162002aba565b60608152600062003156606083018662002fc1565b82810360208401526200316a818662002fc1565b91505060ff83166040830152949350505050565b80151581146200160657600080fd5b600060208284031215620031a057600080fd5b81516200295d816200317e565b600082620031bf57620031bf62002ecb565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003203606083018789620031c4565b828103602084015262003218818688620031c4565b91505060ff831660408301529695505050505050565b600083516200324281846020880162002f92565b8351908301906200325881836020880162002f92565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032b58483018762002fc1565b925080851660e085015250509998505050505050505050565b600060208284031215620032e157600080fd5b815167ffffffffffffffff811115620032f957600080fd5b620009d2848285016200307f565b6000602082840312156200331a57600080fd5b81516200295d8162002aba565b6000602082840312156200333a57600080fd5b5051919050565b600181815b808511156200338257816000190482111562003366576200336662002ee1565b808516156200337457918102915b93841c939080029062003346565b509250929050565b6000826200339b57506001620007a4565b81620033aa57506000620007a4565b8160018114620033c35760028114620033ce57620033ee565b6001915050620007a4565b60ff841115620033e257620033e262002ee1565b50506001821b620007a4565b5060208310610133831016604e8410600b841016171562003413575081810a620007a4565b6200341f838362003341565b806000190482111562003436576200343662002ee1565b029392505050565b60006200295d83836200338a565b60008282101562003461576200346162002ee1565b500390565b600082198211156200347c576200347c62002ee1565b500190565b634e487b7160e01b600052600160045260246000fd5b60008085851115620034a857600080fd5b83861115620034b657600080fd5b5050820193919092039150565b600080600080600080600060e0888a031215620034df57600080fd5b8735620034ec81620027d3565b96506020880135620034fe81620027d3565b95506040880135945060608801359350608088013562002b378162002aba565b6020808252603c908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b031215620035ea57600080fd5b8835620035f781620027d3565b975060208901356200360981620027d3565b96506040890135955060608901359450608089013562003629816200317e565b935060a08901356200363b8162002aba565b979a969950949793969295929450505060c08201359160e0013590565b6020815260006200295d602083018462002fc156fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b5d95b18e7873c0bee5e5a0f8ba7f856feaa9a4588dd711619c14728f42e00f64736f6c634300080f0033506f6c79676f6e5a4b45564d4272696467653a3a5f7665726966794c6561663aa264697066735822122014ee2b3881021fc468e9e867f6f1d4064f354689ed51437dfab467619db84b0064736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001f35760003560e01c806381b1c174116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b806381b1c17414620004615780638da5cb5b146200049b5780638f61151914620004bb57600080fd5b8063318aee3d116200018d5780634638554911620001585780634638554914620003da578063647c576c14620003ff578063715018a614620004245780637b6323c1146200043c57600080fd5b8063318aee3d14620003095780633ae0504714620003785780633da8168214620003905780633e19704314620003b557600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f620002093660046200285c565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f6200071e565b3480156200026757600080fd5b506200027f62000279366004620028e9565b62000757565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002925565b620007aa565b348015620002ca57600080fd5b506200020f620002dc3660046200293f565b620007b9565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002964565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b50620002fa620007e5565b3480156200039d57600080fd5b506200022d620003af36600462002a4c565b620008d8565b348015620003c257600080fd5b50620002fa620003d436600462002aca565b620009da565b348015620003e757600080fd5b506200020f620003f936600462002bdb565b62000a67565b3480156200040c57600080fd5b506200020f6200041e36600462002cc2565b62000c0d565b3480156200043157600080fd5b506200020f62000d82565b3480156200044957600080fd5b506200020f6200045b36600462002bdb565b62000d98565b3480156200046e57600080fd5b506200027f6200048036600462002925565b6024602052600090815260409020546001600160a01b031681565b348015620004a857600080fd5b50605a546001600160a01b03166200027f565b348015620004c857600080fd5b506027546200027f906001600160a01b031681565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002925565b62001245565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002d12565b6200128a565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002dc6565b620013a1565b348015620005e957600080fd5b506200020f62001553565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002925565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002964565b6200158a565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007065760405162461bcd60e51b815260206004820152604760248201527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b6200071686868686868662001609565b505050505050565b6027546001600160a01b031633146200074b5760405162461bcd60e51b8152600401620006fd9062002e2e565b6200075562001a9f565b565b60006024600084846040516020016200077292919062002e8b565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b462001afd565b608c55565b620007c362001afd565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008cf57826001166001036200085057600181602081106200081c576200081c62002eb5565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200087d565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088a60028462002ef7565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c69062002f0e565b915050620007f0565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009cb5781600116600103620009555786818151811062000913576200091362002eb5565b60200260200101518360405160200162000937929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009a7565b828782815181106200096b576200096b62002eb5565b60200260200101516040516020016200098e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b460028362002ef7565b915080620009c28162002f0e565b915050620008e8565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a8d5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000aa38a8a8a8a8a8a8a8a8a8a600162001b59565b62000ab48963ffffffff1662001de4565b6000836001600160a01b03168387898560405160240162000ad89392919062002fef565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b0f91906200302a565b60006040518083038185875af1925050503d806000811462000b4e576040519150601f19603f3d011682016040523d82523d6000602084013e62000b53565b606091505b505090508062000bbf5760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b6064820152608401620006fd565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bf895949392919062003048565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c2e5750600054600160ff909116105b8062000c4a5750303b15801562000c4a575060005460ff166001145b62000caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006fd565b6000805460ff19166001179055801562000cd3576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d3562001e26565b801562000d7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8c62001afd565b62000755600062001e99565b60225460ff161562000dbe5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000dd48a8a8a8a8a8a8a8a8a8a600062001b59565b62000de58963ffffffff1662001de4565b6001600160a01b03851662000eda57604080516000808252602082019092526001600160a01b03851690849060405162000e2091906200302a565b60006040518083038185875af1925050503d806000811462000e5f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e64565b606091505b505090508062000ed35760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a4b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b6064820152608401620006fd565b50620011f8565b60225463ffffffff61010090910481169087160362000f0f5762000f096001600160a01b038616848462001eeb565b620011f8565b6000868660405160200162000f2692919062002e8b565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200117d5760008060008580602001905181019062000f789190620030cb565b92509250925060008584848460405162000f9290620027c5565b62000fa09392919062003141565b8190604051809103906000f590508015801562000fc1573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001016573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200103c91906200318d565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200116b9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011f5565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620011cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011f391906200318d565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200123195949392919062003048565b60405180910390a150505050505050505050565b600080620012566101008462002ef7565b905060006200126861010085620031ad565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620012a292919062002e8b565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012d590620027c5565b601f1982820381018352601f90910116604081905262001302908d908d908d908d908d90602001620031ed565b60408051601f19818403018152908290526200132292916020016200322e565b604051602081830303815290604052805190602001206040516020016200137b94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013c75760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff6101009091048116908416036200144f5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c460000006064820152608401620006fd565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620014a398979695949392919062003261565b60405180910390a1620014e0620014da6001602260019054906101000a900463ffffffff16338787348880519060200120620009da565b62001f55565b6026546001600160a01b03166333d6247d620014fb620007e5565b6040518263ffffffff1660e01b81526004016200151a91815260200190565b600060405180830381600087803b1580156200153557600080fd5b505af11580156200154a573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015805760405162461bcd60e51b8152600401620006fd9062002e2e565b62000755620020a1565b6200159462001afd565b6001600160a01b038116620015fb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006fd565b620016068162001e99565b50565b60225460ff16156200162f5760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff610100909104811690861603620016b75760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c4600000000006064820152608401620006fd565b60008060606001600160a01b0389166200174e5785341462001744576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c55456064820152608401620006fd565b60009150620019bf565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200181c57604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af1158015620017e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200180991906200318d565b50602081015181519094509250620019bd565b84156200183157620018318a88888862002150565b620018486001600160a01b038b1633308a62002578565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200189f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018c99190810190620032ce565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001908573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620019329190810190620032ce565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001971573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001997919062003307565b604051602001620019ab9392919062003141565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162001a0198979695949392919062003261565b60405180910390a162001a26620014da600084868c8c8c8880519060200120620009da565b6026546001600160a01b03166333d6247d62001a41620007e5565b6040518263ffffffff1660e01b815260040162001a6091815260200190565b600060405180830381600087803b15801562001a7b57600080fd5b505af115801562001a90573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001ac55760405162461bcd60e51b8152600401620006fd9062002f2a565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006fd565b62001b6a8a63ffffffff1662001245565b1562001bc15760405162461bcd60e51b8152602060048201526030602482015260008051602062004bc583398151915260448201526f081053149150511657d0d3105253515160821b6064820152608401620006fd565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001c35573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c5b919062003327565b90508060000362001cc45760405162461bcd60e51b8152602060048201526039602482015260008051602062004bc583398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c4944000000000000006064820152608401620006fd565b60225463ffffffff878116610100909204161462001d465760405162461bcd60e51b8152602060048201526043602482015260008051602062004bc583398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a401620006fd565b602254600090610100900463ffffffff1662001d6457508862001d67565b50895b62001d9262001d83848b8b8b8b8b8b80519060200120620009da565b8e8e63ffffffff1684620008d8565b62001a905760405162461bcd60e51b815260206004820152602c602482015260008051602062004bc583398151915260448201526b0814d35517d253959053125160a21b6064820152608401620006fd565b600062001df46101008362002ef7565b9050600062001e0661010084620031ad565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001e935760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006fd565b62000755335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001f5090849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620025b2565b505050565b80600162001f66602060026200343e565b62001f7291906200344c565b6021541062001fd75760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b6064820152608401620006fd565b60016021600082825462001fec919062003466565b909155505060215460005b60208110156200209657816001166001036200202c57826001826020811062002024576200202462002eb5565b015550505050565b6001816020811062002042576200204262002eb5565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200207f919062002ef7565b9150806200208d8162002f0e565b91505062001ff7565b5062001f5062003481565b60225460ff166200211b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006fd565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200219383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200268b92505050565b9050632afa533160e01b6001600160e01b03198216016200238c576000808080808080620021c5896004818d62003497565b810190620021d49190620034c3565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620022165760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0386163014620022415760405162461bcd60e51b8152600401620006fd906200357b565b8a8514620022b85760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d41544348000000000000006064820152608401620006fd565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200233891906200302a565b6000604051808303816000865af19150503d806000811462002377576040519150601f19603f3d011682016040523d82523d6000602084013e6200237c565b606091505b5050505050505050505062002571565b6001600160e01b031981166323f2ebc360e21b14620024025760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b6064820152608401620006fd565b6000808080808080806200241a8a6004818e62003497565b810190620024299190620035cc565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200246d5760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0387163014620024985760405162461bcd60e51b8152600401620006fd906200357b565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f16916200252191906200302a565b6000604051808303816000865af19150503d806000811462002560576040519150601f19603f3d011682016040523d82523d6000602084013e62002565565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d7c9085906323b872dd60e01b9060840162001f18565b600062002609826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620026929092919063ffffffff16565b80519091501562001f5057808060200190518101906200262a91906200318d565b62001f505760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006fd565b6020015190565b6060620009d2848460008585600080866001600160a01b03168587604051620026bc91906200302a565b60006040518083038185875af1925050503d8060008114620026fb576040519150601f19603f3d011682016040523d82523d6000602084013e62002700565b606091505b509150915062002713878383876200271e565b979650505050505050565b60608315620027925782516000036200278a576001600160a01b0385163b6200278a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006fd565b5081620009d2565b620009d28383815115620027a95781518083602001fd5b8060405162461bcd60e51b8152600401620006fd919062003658565b611557806200366e83390190565b6001600160a01b03811681146200160657600080fd5b8035620027f681620027d3565b919050565b803563ffffffff81168114620027f657600080fd5b60008083601f8401126200282357600080fd5b50813567ffffffffffffffff8111156200283c57600080fd5b6020830191508360208285010111156200285557600080fd5b9250929050565b60008060008060008060a087890312156200287657600080fd5b86356200288381620027d3565b95506200289360208801620027fb565b94506040870135620028a581620027d3565b935060608701359250608087013567ffffffffffffffff811115620028c957600080fd5b620028d789828a0162002810565b979a9699509497509295939492505050565b60008060408385031215620028fd57600080fd5b6200290883620027fb565b915060208301356200291a81620027d3565b809150509250929050565b6000602082840312156200293857600080fd5b5035919050565b6000602082840312156200295257600080fd5b6200295d82620027fb565b9392505050565b6000602082840312156200297757600080fd5b81356200295d81620027d3565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620029c657620029c662002984565b604052919050565b600082601f830112620029e057600080fd5b8135602067ffffffffffffffff821115620029ff57620029ff62002984565b8160051b62002a108282016200299a565b928352848101820192828101908785111562002a2b57600080fd5b83870192505b84831015620027135782358252918301919083019062002a31565b6000806000806080858703121562002a6357600080fd5b84359350602085013567ffffffffffffffff8082111562002a8357600080fd5b62002a9188838901620029ce565b945060408701359150808216821462002aa957600080fd5b509396929550929360600135925050565b60ff811681146200160657600080fd5b600080600080600080600060e0888a03121562002ae657600080fd5b873562002af38162002aba565b965062002b0360208901620027fb565b9550604088013562002b1581620027d3565b945062002b2560608901620027fb565b9350608088013562002b3781620027d3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002b715762002b7162002984565b50601f01601f191660200190565b600082601f83011262002b9157600080fd5b813562002ba862002ba28262002b54565b6200299a565b81815284602083860101111562002bbe57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002bfc57600080fd5b8a3567ffffffffffffffff8082111562002c1557600080fd5b62002c238e838f01620029ce565b9b5062002c3360208e01620027fb565b9a5060408d0135995060608d0135985062002c5160808e01620027fb565b975062002c6160a08e01620027e9565b965062002c7160c08e01620027fb565b955062002c8160e08e01620027e9565b94506101008d013593506101208d013591508082111562002ca157600080fd5b5062002cb08d828e0162002b7f565b9150509295989b9194979a5092959850565b60008060006060848603121562002cd857600080fd5b62002ce384620027fb565b9250602084013562002cf581620027d3565b9150604084013562002d0781620027d3565b809150509250925092565b600080600080600080600060a0888a03121562002d2e57600080fd5b62002d3988620027fb565b9650602088013562002d4b81620027d3565b9550604088013567ffffffffffffffff8082111562002d6957600080fd5b62002d778b838c0162002810565b909750955060608a013591508082111562002d9157600080fd5b5062002da08a828b0162002810565b909450925050608088013562002db68162002aba565b8091505092959891949750929550565b60008060006060848603121562002ddc57600080fd5b62002de784620027fb565b9250602084013562002df981620027d3565b9150604084013567ffffffffffffffff81111562002e1657600080fd5b62002e248682870162002b7f565b9150509250925092565b6020808252603d908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79506f6c79676f6e5a4b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002f095762002f0962002ecb565b500490565b60006001820162002f235762002f2362002ee1565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002faf57818101518382015260200162002f95565b8381111562000d7c5750506000910152565b6000815180845262002fdb81602086016020860162002f92565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff83166020820152606060408201819052600090620030219083018462002fc1565b95945050505050565b600082516200303e81846020870162002f92565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f8301126200309157600080fd5b8151620030a262002ba28262002b54565b818152846020838601011115620030b857600080fd5b620009d282602083016020870162002f92565b600080600060608486031215620030e157600080fd5b835167ffffffffffffffff80821115620030fa57600080fd5b62003108878388016200307f565b945060208601519150808211156200311f57600080fd5b506200312e868287016200307f565b925050604084015162002d078162002aba565b60608152600062003156606083018662002fc1565b82810360208401526200316a818662002fc1565b91505060ff83166040830152949350505050565b80151581146200160657600080fd5b600060208284031215620031a057600080fd5b81516200295d816200317e565b600082620031bf57620031bf62002ecb565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003203606083018789620031c4565b828103602084015262003218818688620031c4565b91505060ff831660408301529695505050505050565b600083516200324281846020880162002f92565b8351908301906200325881836020880162002f92565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032b58483018762002fc1565b925080851660e085015250509998505050505050505050565b600060208284031215620032e157600080fd5b815167ffffffffffffffff811115620032f957600080fd5b620009d2848285016200307f565b6000602082840312156200331a57600080fd5b81516200295d8162002aba565b6000602082840312156200333a57600080fd5b5051919050565b600181815b808511156200338257816000190482111562003366576200336662002ee1565b808516156200337457918102915b93841c939080029062003346565b509250929050565b6000826200339b57506001620007a4565b81620033aa57506000620007a4565b8160018114620033c35760028114620033ce57620033ee565b6001915050620007a4565b60ff841115620033e257620033e262002ee1565b50506001821b620007a4565b5060208310610133831016604e8410600b841016171562003413575081810a620007a4565b6200341f838362003341565b806000190482111562003436576200343662002ee1565b029392505050565b60006200295d83836200338a565b60008282101562003461576200346162002ee1565b500390565b600082198211156200347c576200347c62002ee1565b500190565b634e487b7160e01b600052600160045260246000fd5b60008085851115620034a857600080fd5b83861115620034b657600080fd5b5050820193919092039150565b600080600080600080600060e0888a031215620034df57600080fd5b8735620034ec81620027d3565b96506020880135620034fe81620027d3565b95506040880135945060608801359350608088013562002b378162002aba565b6020808252603c908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a4b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b031215620035ea57600080fd5b8835620035f781620027d3565b975060208901356200360981620027d3565b96506040890135955060608901359450608089013562003629816200317e565b935060a08901356200363b8162002aba565b979a969950949793969295929450505060c08201359160e0013590565b6020815260006200295d602083018462002fc156fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b5d95b18e7873c0bee5e5a0f8ba7f856feaa9a4588dd711619c14728f42e00f64736f6c634300080f0033506f6c79676f6e5a4b45564d4272696467653a3a5f7665726966794c6561663aa264697066735822122014ee2b3881021fc468e9e867f6f1d4064f354689ed51437dfab467619db84b0064736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50614c1a806100206000396000f3fe608060405260043610620001f35760003560e01c806381b1c174116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b806381b1c17414620004615780638da5cb5b146200049b5780638f61151914620004bb57600080fd5b8063318aee3d116200018d5780634638554911620001585780634638554914620003da578063647c576c14620003ff578063715018a614620004245780637b6323c1146200043c57600080fd5b8063318aee3d14620003095780633ae0504714620003785780633da8168214620003905780633e19704314620003b557600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f620002093660046200285c565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f6200071e565b3480156200026757600080fd5b506200027f62000279366004620028e9565b62000757565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002925565b620007aa565b348015620002ca57600080fd5b506200020f620002dc3660046200293f565b620007b9565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002964565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b50620002fa620007e5565b3480156200039d57600080fd5b506200022d620003af36600462002a4c565b620008d8565b348015620003c257600080fd5b50620002fa620003d436600462002aca565b620009da565b348015620003e757600080fd5b506200020f620003f936600462002bdb565b62000a67565b3480156200040c57600080fd5b506200020f6200041e36600462002cc2565b62000c0d565b3480156200043157600080fd5b506200020f62000d82565b3480156200044957600080fd5b506200020f6200045b36600462002bdb565b62000d98565b3480156200046e57600080fd5b506200027f6200048036600462002925565b6024602052600090815260409020546001600160a01b031681565b348015620004a857600080fd5b50605a546001600160a01b03166200027f565b348015620004c857600080fd5b506027546200027f906001600160a01b031681565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002925565b62001245565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002d12565b6200128a565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002dc6565b620013a1565b348015620005e957600080fd5b506200020f62001553565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002925565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002964565b6200158a565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007065760405162461bcd60e51b815260206004820152604760248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b6200071686868686868662001609565b505050505050565b6027546001600160a01b031633146200074b5760405162461bcd60e51b8152600401620006fd9062002e2e565b6200075562001a9f565b565b60006024600084846040516020016200077292919062002e8b565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b462001afd565b608c55565b620007c362001afd565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008cf57826001166001036200085057600181602081106200081c576200081c62002eb5565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200087d565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088a60028462002ef7565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c69062002f0e565b915050620007f0565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009cb5781600116600103620009555786818151811062000913576200091362002eb5565b60200260200101518360405160200162000937929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009a7565b828782815181106200096b576200096b62002eb5565b60200260200101516040516020016200098e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b460028362002ef7565b915080620009c28162002f0e565b915050620008e8565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a8d5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000aa38a8a8a8a8a8a8a8a8a8a600162001b59565b62000ab48963ffffffff1662001de4565b6000836001600160a01b03168387898560405160240162000ad89392919062002fef565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b0f91906200302a565b60006040518083038185875af1925050503d806000811462000b4e576040519150601f19603f3d011682016040523d82523d6000602084013e62000b53565b606091505b505090508062000bbf5760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b6064820152608401620006fd565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bf895949392919062003048565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c2e5750600054600160ff909116105b8062000c4a5750303b15801562000c4a575060005460ff166001145b62000caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006fd565b6000805460ff19166001179055801562000cd3576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d3562001e26565b801562000d7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8c62001afd565b62000755600062001e99565b60225460ff161562000dbe5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000dd48a8a8a8a8a8a8a8a8a8a600062001b59565b62000de58963ffffffff1662001de4565b6001600160a01b03851662000eda57604080516000808252602082019092526001600160a01b03851690849060405162000e2091906200302a565b60006040518083038185875af1925050503d806000811462000e5f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e64565b606091505b505090508062000ed35760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b6064820152608401620006fd565b50620011f8565b60225463ffffffff61010090910481169087160362000f0f5762000f096001600160a01b038616848462001eeb565b620011f8565b6000868660405160200162000f2692919062002e8b565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200117d5760008060008580602001905181019062000f789190620030cb565b92509250925060008584848460405162000f9290620027c5565b62000fa09392919062003141565b8190604051809103906000f590508015801562000fc1573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001016573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200103c91906200318d565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200116b9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011f5565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620011cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011f391906200318d565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200123195949392919062003048565b60405180910390a150505050505050505050565b600080620012566101008462002ef7565b905060006200126861010085620031ad565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620012a292919062002e8b565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012d590620027c5565b601f1982820381018352601f90910116604081905262001302908d908d908d908d908d90602001620031ed565b60408051601f19818403018152908290526200132292916020016200322e565b604051602081830303815290604052805190602001206040516020016200137b94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013c75760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff6101009091048116908416036200144f5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c460000006064820152608401620006fd565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620014a398979695949392919062003261565b60405180910390a1620014e0620014da6001602260019054906101000a900463ffffffff16338787348880519060200120620009da565b62001f55565b6026546001600160a01b03166333d6247d620014fb620007e5565b6040518263ffffffff1660e01b81526004016200151a91815260200190565b600060405180830381600087803b1580156200153557600080fd5b505af11580156200154a573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015805760405162461bcd60e51b8152600401620006fd9062002e2e565b62000755620020a1565b6200159462001afd565b6001600160a01b038116620015fb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006fd565b620016068162001e99565b50565b60225460ff16156200162f5760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff610100909104811690861603620016b75760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c4600000000006064820152608401620006fd565b60008060606001600160a01b0389166200174e5785341462001744576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c55456064820152608401620006fd565b60009150620019bf565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200181c57604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af1158015620017e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200180991906200318d565b50602081015181519094509250620019bd565b84156200183157620018318a88888862002150565b620018486001600160a01b038b1633308a62002578565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200189f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018c99190810190620032ce565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001908573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620019329190810190620032ce565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001971573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001997919062003307565b604051602001620019ab9392919062003141565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162001a0198979695949392919062003261565b60405180910390a162001a26620014da600084868c8c8c8880519060200120620009da565b6026546001600160a01b03166333d6247d62001a41620007e5565b6040518263ffffffff1660e01b815260040162001a6091815260200190565b600060405180830381600087803b15801562001a7b57600080fd5b505af115801562001a90573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001ac55760405162461bcd60e51b8152600401620006fd9062002f2a565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006fd565b62001b6a8a63ffffffff1662001245565b1562001bc15760405162461bcd60e51b8152602060048201526030602482015260008051602062004bc583398151915260448201526f081053149150511657d0d3105253515160821b6064820152608401620006fd565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001c35573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c5b919062003327565b90508060000362001cc45760405162461bcd60e51b8152602060048201526039602482015260008051602062004bc583398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c4944000000000000006064820152608401620006fd565b60225463ffffffff878116610100909204161462001d465760405162461bcd60e51b8152602060048201526043602482015260008051602062004bc583398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a401620006fd565b602254600090610100900463ffffffff1662001d6457508862001d67565b50895b62001d9262001d83848b8b8b8b8b8b80519060200120620009da565b8e8e63ffffffff1684620008d8565b62001a905760405162461bcd60e51b815260206004820152602c602482015260008051602062004bc583398151915260448201526b0814d35517d253959053125160a21b6064820152608401620006fd565b600062001df46101008362002ef7565b9050600062001e0661010084620031ad565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001e935760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006fd565b62000755335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001f5090849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620025b2565b505050565b80600162001f66602060026200343e565b62001f7291906200344c565b6021541062001fd75760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b6064820152608401620006fd565b60016021600082825462001fec919062003466565b909155505060215460005b60208110156200209657816001166001036200202c57826001826020811062002024576200202462002eb5565b015550505050565b6001816020811062002042576200204262002eb5565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200207f919062002ef7565b9150806200208d8162002f0e565b91505062001ff7565b5062001f5062003481565b60225460ff166200211b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006fd565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200219383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200268b92505050565b9050632afa533160e01b6001600160e01b03198216016200238c576000808080808080620021c5896004818d62003497565b810190620021d49190620034c3565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620022165760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0386163014620022415760405162461bcd60e51b8152600401620006fd906200357b565b8a8514620022b85760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d41544348000000000000006064820152608401620006fd565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200233891906200302a565b6000604051808303816000865af19150503d806000811462002377576040519150601f19603f3d011682016040523d82523d6000602084013e6200237c565b606091505b5050505050505050505062002571565b6001600160e01b031981166323f2ebc360e21b14620024025760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b6064820152608401620006fd565b6000808080808080806200241a8a6004818e62003497565b810190620024299190620035cc565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200246d5760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0387163014620024985760405162461bcd60e51b8152600401620006fd906200357b565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f16916200252191906200302a565b6000604051808303816000865af19150503d806000811462002560576040519150601f19603f3d011682016040523d82523d6000602084013e62002565565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d7c9085906323b872dd60e01b9060840162001f18565b600062002609826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620026929092919063ffffffff16565b80519091501562001f5057808060200190518101906200262a91906200318d565b62001f505760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006fd565b6020015190565b6060620009d2848460008585600080866001600160a01b03168587604051620026bc91906200302a565b60006040518083038185875af1925050503d8060008114620026fb576040519150601f19603f3d011682016040523d82523d6000602084013e62002700565b606091505b509150915062002713878383876200271e565b979650505050505050565b60608315620027925782516000036200278a576001600160a01b0385163b6200278a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006fd565b5081620009d2565b620009d28383815115620027a95781518083602001fd5b8060405162461bcd60e51b8152600401620006fd919062003658565b611557806200366e83390190565b6001600160a01b03811681146200160657600080fd5b8035620027f681620027d3565b919050565b803563ffffffff81168114620027f657600080fd5b60008083601f8401126200282357600080fd5b50813567ffffffffffffffff8111156200283c57600080fd5b6020830191508360208285010111156200285557600080fd5b9250929050565b60008060008060008060a087890312156200287657600080fd5b86356200288381620027d3565b95506200289360208801620027fb565b94506040870135620028a581620027d3565b935060608701359250608087013567ffffffffffffffff811115620028c957600080fd5b620028d789828a0162002810565b979a9699509497509295939492505050565b60008060408385031215620028fd57600080fd5b6200290883620027fb565b915060208301356200291a81620027d3565b809150509250929050565b6000602082840312156200293857600080fd5b5035919050565b6000602082840312156200295257600080fd5b6200295d82620027fb565b9392505050565b6000602082840312156200297757600080fd5b81356200295d81620027d3565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620029c657620029c662002984565b604052919050565b600082601f830112620029e057600080fd5b8135602067ffffffffffffffff821115620029ff57620029ff62002984565b8160051b62002a108282016200299a565b928352848101820192828101908785111562002a2b57600080fd5b83870192505b84831015620027135782358252918301919083019062002a31565b6000806000806080858703121562002a6357600080fd5b84359350602085013567ffffffffffffffff8082111562002a8357600080fd5b62002a9188838901620029ce565b945060408701359150808216821462002aa957600080fd5b509396929550929360600135925050565b60ff811681146200160657600080fd5b600080600080600080600060e0888a03121562002ae657600080fd5b873562002af38162002aba565b965062002b0360208901620027fb565b9550604088013562002b1581620027d3565b945062002b2560608901620027fb565b9350608088013562002b3781620027d3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002b715762002b7162002984565b50601f01601f191660200190565b600082601f83011262002b9157600080fd5b813562002ba862002ba28262002b54565b6200299a565b81815284602083860101111562002bbe57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002bfc57600080fd5b8a3567ffffffffffffffff8082111562002c1557600080fd5b62002c238e838f01620029ce565b9b5062002c3360208e01620027fb565b9a5060408d0135995060608d0135985062002c5160808e01620027fb565b975062002c6160a08e01620027e9565b965062002c7160c08e01620027fb565b955062002c8160e08e01620027e9565b94506101008d013593506101208d013591508082111562002ca157600080fd5b5062002cb08d828e0162002b7f565b9150509295989b9194979a5092959850565b60008060006060848603121562002cd857600080fd5b62002ce384620027fb565b9250602084013562002cf581620027d3565b9150604084013562002d0781620027d3565b809150509250925092565b600080600080600080600060a0888a03121562002d2e57600080fd5b62002d3988620027fb565b9650602088013562002d4b81620027d3565b9550604088013567ffffffffffffffff8082111562002d6957600080fd5b62002d778b838c0162002810565b909750955060608a013591508082111562002d9157600080fd5b5062002da08a828b0162002810565b909450925050608088013562002db68162002aba565b8091505092959891949750929550565b60008060006060848603121562002ddc57600080fd5b62002de784620027fb565b9250602084013562002df981620027d3565b9150604084013567ffffffffffffffff81111562002e1657600080fd5b62002e248682870162002b7f565b9150509250925092565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002f095762002f0962002ecb565b500490565b60006001820162002f235762002f2362002ee1565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002faf57818101518382015260200162002f95565b8381111562000d7c5750506000910152565b6000815180845262002fdb81602086016020860162002f92565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff83166020820152606060408201819052600090620030219083018462002fc1565b95945050505050565b600082516200303e81846020870162002f92565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f8301126200309157600080fd5b8151620030a262002ba28262002b54565b818152846020838601011115620030b857600080fd5b620009d282602083016020870162002f92565b600080600060608486031215620030e157600080fd5b835167ffffffffffffffff80821115620030fa57600080fd5b62003108878388016200307f565b945060208601519150808211156200311f57600080fd5b506200312e868287016200307f565b925050604084015162002d078162002aba565b60608152600062003156606083018662002fc1565b82810360208401526200316a818662002fc1565b91505060ff83166040830152949350505050565b80151581146200160657600080fd5b600060208284031215620031a057600080fd5b81516200295d816200317e565b600082620031bf57620031bf62002ecb565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003203606083018789620031c4565b828103602084015262003218818688620031c4565b91505060ff831660408301529695505050505050565b600083516200324281846020880162002f92565b8351908301906200325881836020880162002f92565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032b58483018762002fc1565b925080851660e085015250509998505050505050505050565b600060208284031215620032e157600080fd5b815167ffffffffffffffff811115620032f957600080fd5b620009d2848285016200307f565b6000602082840312156200331a57600080fd5b81516200295d8162002aba565b6000602082840312156200333a57600080fd5b5051919050565b600181815b808511156200338257816000190482111562003366576200336662002ee1565b808516156200337457918102915b93841c939080029062003346565b509250929050565b6000826200339b57506001620007a4565b81620033aa57506000620007a4565b8160018114620033c35760028114620033ce57620033ee565b6001915050620007a4565b60ff841115620033e257620033e262002ee1565b50506001821b620007a4565b5060208310610133831016604e8410600b841016171562003413575081810a620007a4565b6200341f838362003341565b806000190482111562003436576200343662002ee1565b029392505050565b60006200295d83836200338a565b60008282101562003461576200346162002ee1565b500390565b600082198211156200347c576200347c62002ee1565b500190565b634e487b7160e01b600052600160045260246000fd5b60008085851115620034a857600080fd5b83861115620034b657600080fd5b5050820193919092039150565b600080600080600080600060e0888a031215620034df57600080fd5b8735620034ec81620027d3565b96506020880135620034fe81620027d3565b95506040880135945060608801359350608088013562002b378162002aba565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b031215620035ea57600080fd5b8835620035f781620027d3565b975060208901356200360981620027d3565b96506040890135955060608901359450608089013562003629816200317e565b935060a08901356200363b8162002aba565b979a969950949793969295929450505060c08201359160e0013590565b6020815260006200295d602083018462002fc156fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea264697066735822122070fae8b3daebe7fc894d50296739b7a26e638f37239109230c7dfd552785f2a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212200c1a9aa1f10dc47f955539f6956404fe6851250ffeda1aee8fe15bdecba13e3564736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001f35760003560e01c806381b1c174116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b806381b1c17414620004615780638da5cb5b146200049b5780638f61151914620004bb57600080fd5b8063318aee3d116200018d5780634638554911620001585780634638554914620003da578063647c576c14620003ff578063715018a614620004245780637b6323c1146200043c57600080fd5b8063318aee3d14620003095780633ae0504714620003785780633da8168214620003905780633e19704314620003b557600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f620002093660046200285c565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f6200071e565b3480156200026757600080fd5b506200027f62000279366004620028e9565b62000757565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002925565b620007aa565b348015620002ca57600080fd5b506200020f620002dc3660046200293f565b620007b9565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002964565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b50620002fa620007e5565b3480156200039d57600080fd5b506200022d620003af36600462002a4c565b620008d8565b348015620003c257600080fd5b50620002fa620003d436600462002aca565b620009da565b348015620003e757600080fd5b506200020f620003f936600462002bdb565b62000a67565b3480156200040c57600080fd5b506200020f6200041e36600462002cc2565b62000c0d565b3480156200043157600080fd5b506200020f62000d82565b3480156200044957600080fd5b506200020f6200045b36600462002bdb565b62000d98565b3480156200046e57600080fd5b506200027f6200048036600462002925565b6024602052600090815260409020546001600160a01b031681565b348015620004a857600080fd5b50605a546001600160a01b03166200027f565b348015620004c857600080fd5b506027546200027f906001600160a01b031681565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002925565b62001245565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002d12565b6200128a565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002dc6565b620013a1565b348015620005e957600080fd5b506200020f62001553565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002925565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002964565b6200158a565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007065760405162461bcd60e51b815260206004820152604760248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b6200071686868686868662001609565b505050505050565b6027546001600160a01b031633146200074b5760405162461bcd60e51b8152600401620006fd9062002e2e565b6200075562001a9f565b565b60006024600084846040516020016200077292919062002e8b565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b462001afd565b608c55565b620007c362001afd565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008cf57826001166001036200085057600181602081106200081c576200081c62002eb5565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200087d565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088a60028462002ef7565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c69062002f0e565b915050620007f0565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009cb5781600116600103620009555786818151811062000913576200091362002eb5565b60200260200101518360405160200162000937929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009a7565b828782815181106200096b576200096b62002eb5565b60200260200101516040516020016200098e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b460028362002ef7565b915080620009c28162002f0e565b915050620008e8565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a8d5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000aa38a8a8a8a8a8a8a8a8a8a600162001b59565b62000ab48963ffffffff1662001de4565b6000836001600160a01b03168387898560405160240162000ad89392919062002fef565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b0f91906200302a565b60006040518083038185875af1925050503d806000811462000b4e576040519150601f19603f3d011682016040523d82523d6000602084013e62000b53565b606091505b505090508062000bbf5760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b6064820152608401620006fd565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bf895949392919062003048565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c2e5750600054600160ff909116105b8062000c4a5750303b15801562000c4a575060005460ff166001145b62000caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006fd565b6000805460ff19166001179055801562000cd3576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d3562001e26565b801562000d7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8c62001afd565b62000755600062001e99565b60225460ff161562000dbe5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000dd48a8a8a8a8a8a8a8a8a8a600062001b59565b62000de58963ffffffff1662001de4565b6001600160a01b03851662000eda57604080516000808252602082019092526001600160a01b03851690849060405162000e2091906200302a565b60006040518083038185875af1925050503d806000811462000e5f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e64565b606091505b505090508062000ed35760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b6064820152608401620006fd565b50620011f8565b60225463ffffffff61010090910481169087160362000f0f5762000f096001600160a01b038616848462001eeb565b620011f8565b6000868660405160200162000f2692919062002e8b565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200117d5760008060008580602001905181019062000f789190620030cb565b92509250925060008584848460405162000f9290620027c5565b62000fa09392919062003141565b8190604051809103906000f590508015801562000fc1573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001016573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200103c91906200318d565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200116b9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011f5565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620011cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011f391906200318d565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200123195949392919062003048565b60405180910390a150505050505050505050565b600080620012566101008462002ef7565b905060006200126861010085620031ad565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620012a292919062002e8b565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012d590620027c5565b601f1982820381018352601f90910116604081905262001302908d908d908d908d908d90602001620031ed565b60408051601f19818403018152908290526200132292916020016200322e565b604051602081830303815290604052805190602001206040516020016200137b94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013c75760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff6101009091048116908416036200144f5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c460000006064820152608401620006fd565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620014a398979695949392919062003261565b60405180910390a1620014e0620014da6001602260019054906101000a900463ffffffff16338787348880519060200120620009da565b62001f55565b6026546001600160a01b03166333d6247d620014fb620007e5565b6040518263ffffffff1660e01b81526004016200151a91815260200190565b600060405180830381600087803b1580156200153557600080fd5b505af11580156200154a573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015805760405162461bcd60e51b8152600401620006fd9062002e2e565b62000755620020a1565b6200159462001afd565b6001600160a01b038116620015fb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006fd565b620016068162001e99565b50565b60225460ff16156200162f5760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff610100909104811690861603620016b75760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c4600000000006064820152608401620006fd565b60008060606001600160a01b0389166200174e5785341462001744576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c55456064820152608401620006fd565b60009150620019bf565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200181c57604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af1158015620017e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200180991906200318d565b50602081015181519094509250620019bd565b84156200183157620018318a88888862002150565b620018486001600160a01b038b1633308a62002578565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200189f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018c99190810190620032ce565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001908573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620019329190810190620032ce565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001971573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001997919062003307565b604051602001620019ab9392919062003141565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162001a0198979695949392919062003261565b60405180910390a162001a26620014da600084868c8c8c8880519060200120620009da565b6026546001600160a01b03166333d6247d62001a41620007e5565b6040518263ffffffff1660e01b815260040162001a6091815260200190565b600060405180830381600087803b15801562001a7b57600080fd5b505af115801562001a90573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001ac55760405162461bcd60e51b8152600401620006fd9062002f2a565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006fd565b62001b6a8a63ffffffff1662001245565b1562001bc15760405162461bcd60e51b8152602060048201526030602482015260008051602062004bc583398151915260448201526f081053149150511657d0d3105253515160821b6064820152608401620006fd565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001c35573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c5b919062003327565b90508060000362001cc45760405162461bcd60e51b8152602060048201526039602482015260008051602062004bc583398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c4944000000000000006064820152608401620006fd565b60225463ffffffff878116610100909204161462001d465760405162461bcd60e51b8152602060048201526043602482015260008051602062004bc583398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a401620006fd565b602254600090610100900463ffffffff1662001d6457508862001d67565b50895b62001d9262001d83848b8b8b8b8b8b80519060200120620009da565b8e8e63ffffffff1684620008d8565b62001a905760405162461bcd60e51b815260206004820152602c602482015260008051602062004bc583398151915260448201526b0814d35517d253959053125160a21b6064820152608401620006fd565b600062001df46101008362002ef7565b9050600062001e0661010084620031ad565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001e935760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006fd565b62000755335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001f5090849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620025b2565b505050565b80600162001f66602060026200343e565b62001f7291906200344c565b6021541062001fd75760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b6064820152608401620006fd565b60016021600082825462001fec919062003466565b909155505060215460005b60208110156200209657816001166001036200202c57826001826020811062002024576200202462002eb5565b015550505050565b6001816020811062002042576200204262002eb5565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200207f919062002ef7565b9150806200208d8162002f0e565b91505062001ff7565b5062001f5062003481565b60225460ff166200211b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006fd565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200219383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200268b92505050565b9050632afa533160e01b6001600160e01b03198216016200238c576000808080808080620021c5896004818d62003497565b810190620021d49190620034c3565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620022165760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0386163014620022415760405162461bcd60e51b8152600401620006fd906200357b565b8a8514620022b85760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d41544348000000000000006064820152608401620006fd565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200233891906200302a565b6000604051808303816000865af19150503d806000811462002377576040519150601f19603f3d011682016040523d82523d6000602084013e6200237c565b606091505b5050505050505050505062002571565b6001600160e01b031981166323f2ebc360e21b14620024025760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b6064820152608401620006fd565b6000808080808080806200241a8a6004818e62003497565b810190620024299190620035cc565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200246d5760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0387163014620024985760405162461bcd60e51b8152600401620006fd906200357b565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f16916200252191906200302a565b6000604051808303816000865af19150503d806000811462002560576040519150601f19603f3d011682016040523d82523d6000602084013e62002565565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d7c9085906323b872dd60e01b9060840162001f18565b600062002609826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620026929092919063ffffffff16565b80519091501562001f5057808060200190518101906200262a91906200318d565b62001f505760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006fd565b6020015190565b6060620009d2848460008585600080866001600160a01b03168587604051620026bc91906200302a565b60006040518083038185875af1925050503d8060008114620026fb576040519150601f19603f3d011682016040523d82523d6000602084013e62002700565b606091505b509150915062002713878383876200271e565b979650505050505050565b60608315620027925782516000036200278a576001600160a01b0385163b6200278a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006fd565b5081620009d2565b620009d28383815115620027a95781518083602001fd5b8060405162461bcd60e51b8152600401620006fd919062003658565b611557806200366e83390190565b6001600160a01b03811681146200160657600080fd5b8035620027f681620027d3565b919050565b803563ffffffff81168114620027f657600080fd5b60008083601f8401126200282357600080fd5b50813567ffffffffffffffff8111156200283c57600080fd5b6020830191508360208285010111156200285557600080fd5b9250929050565b60008060008060008060a087890312156200287657600080fd5b86356200288381620027d3565b95506200289360208801620027fb565b94506040870135620028a581620027d3565b935060608701359250608087013567ffffffffffffffff811115620028c957600080fd5b620028d789828a0162002810565b979a9699509497509295939492505050565b60008060408385031215620028fd57600080fd5b6200290883620027fb565b915060208301356200291a81620027d3565b809150509250929050565b6000602082840312156200293857600080fd5b5035919050565b6000602082840312156200295257600080fd5b6200295d82620027fb565b9392505050565b6000602082840312156200297757600080fd5b81356200295d81620027d3565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620029c657620029c662002984565b604052919050565b600082601f830112620029e057600080fd5b8135602067ffffffffffffffff821115620029ff57620029ff62002984565b8160051b62002a108282016200299a565b928352848101820192828101908785111562002a2b57600080fd5b83870192505b84831015620027135782358252918301919083019062002a31565b6000806000806080858703121562002a6357600080fd5b84359350602085013567ffffffffffffffff8082111562002a8357600080fd5b62002a9188838901620029ce565b945060408701359150808216821462002aa957600080fd5b509396929550929360600135925050565b60ff811681146200160657600080fd5b600080600080600080600060e0888a03121562002ae657600080fd5b873562002af38162002aba565b965062002b0360208901620027fb565b9550604088013562002b1581620027d3565b945062002b2560608901620027fb565b9350608088013562002b3781620027d3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002b715762002b7162002984565b50601f01601f191660200190565b600082601f83011262002b9157600080fd5b813562002ba862002ba28262002b54565b6200299a565b81815284602083860101111562002bbe57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002bfc57600080fd5b8a3567ffffffffffffffff8082111562002c1557600080fd5b62002c238e838f01620029ce565b9b5062002c3360208e01620027fb565b9a5060408d0135995060608d0135985062002c5160808e01620027fb565b975062002c6160a08e01620027e9565b965062002c7160c08e01620027fb565b955062002c8160e08e01620027e9565b94506101008d013593506101208d013591508082111562002ca157600080fd5b5062002cb08d828e0162002b7f565b9150509295989b9194979a5092959850565b60008060006060848603121562002cd857600080fd5b62002ce384620027fb565b9250602084013562002cf581620027d3565b9150604084013562002d0781620027d3565b809150509250925092565b600080600080600080600060a0888a03121562002d2e57600080fd5b62002d3988620027fb565b9650602088013562002d4b81620027d3565b9550604088013567ffffffffffffffff8082111562002d6957600080fd5b62002d778b838c0162002810565b909750955060608a013591508082111562002d9157600080fd5b5062002da08a828b0162002810565b909450925050608088013562002db68162002aba565b8091505092959891949750929550565b60008060006060848603121562002ddc57600080fd5b62002de784620027fb565b9250602084013562002df981620027d3565b9150604084013567ffffffffffffffff81111562002e1657600080fd5b62002e248682870162002b7f565b9150509250925092565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002f095762002f0962002ecb565b500490565b60006001820162002f235762002f2362002ee1565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002faf57818101518382015260200162002f95565b8381111562000d7c5750506000910152565b6000815180845262002fdb81602086016020860162002f92565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff83166020820152606060408201819052600090620030219083018462002fc1565b95945050505050565b600082516200303e81846020870162002f92565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f8301126200309157600080fd5b8151620030a262002ba28262002b54565b818152846020838601011115620030b857600080fd5b620009d282602083016020870162002f92565b600080600060608486031215620030e157600080fd5b835167ffffffffffffffff80821115620030fa57600080fd5b62003108878388016200307f565b945060208601519150808211156200311f57600080fd5b506200312e868287016200307f565b925050604084015162002d078162002aba565b60608152600062003156606083018662002fc1565b82810360208401526200316a818662002fc1565b91505060ff83166040830152949350505050565b80151581146200160657600080fd5b600060208284031215620031a057600080fd5b81516200295d816200317e565b600082620031bf57620031bf62002ecb565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003203606083018789620031c4565b828103602084015262003218818688620031c4565b91505060ff831660408301529695505050505050565b600083516200324281846020880162002f92565b8351908301906200325881836020880162002f92565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032b58483018762002fc1565b925080851660e085015250509998505050505050505050565b600060208284031215620032e157600080fd5b815167ffffffffffffffff811115620032f957600080fd5b620009d2848285016200307f565b6000602082840312156200331a57600080fd5b81516200295d8162002aba565b6000602082840312156200333a57600080fd5b5051919050565b600181815b808511156200338257816000190482111562003366576200336662002ee1565b808516156200337457918102915b93841c939080029062003346565b509250929050565b6000826200339b57506001620007a4565b81620033aa57506000620007a4565b8160018114620033c35760028114620033ce57620033ee565b6001915050620007a4565b60ff841115620033e257620033e262002ee1565b50506001821b620007a4565b5060208310610133831016604e8410600b841016171562003413575081810a620007a4565b6200341f838362003341565b806000190482111562003436576200343662002ee1565b029392505050565b60006200295d83836200338a565b60008282101562003461576200346162002ee1565b500390565b600082198211156200347c576200347c62002ee1565b500190565b634e487b7160e01b600052600160045260246000fd5b60008085851115620034a857600080fd5b83861115620034b657600080fd5b5050820193919092039150565b600080600080600080600060e0888a031215620034df57600080fd5b8735620034ec81620027d3565b96506020880135620034fe81620027d3565b95506040880135945060608801359350608088013562002b378162002aba565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b031215620035ea57600080fd5b8835620035f781620027d3565b975060208901356200360981620027d3565b96506040890135955060608901359450608089013562003629816200317e565b935060a08901356200363b8162002aba565b979a969950949793969295929450505060c08201359160e0013590565b6020815260006200295d602083018462002fc156fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea264697066735822122070fae8b3daebe7fc894d50296739b7a26e638f37239109230c7dfd552785f2a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212200c1a9aa1f10dc47f955539f6956404fe6851250ffeda1aee8fe15bdecba13e3564736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZKEVMGlobalExitRoot.json b/compiled-contracts/PolygonZkEVMGlobalExitRoot.json similarity index 94% rename from compiled-contracts/PolygonZKEVMGlobalExitRoot.json rename to compiled-contracts/PolygonZkEVMGlobalExitRoot.json index a4fbc0cd4..452545748 100644 --- a/compiled-contracts/PolygonZKEVMGlobalExitRoot.json +++ b/compiled-contracts/PolygonZkEVMGlobalExitRoot.json @@ -1,7 +1,7 @@ { "_format": "hh-sol-artifact-1", - "contractName": "PolygonZKEVMGlobalExitRoot", - "sourceName": "contracts/PolygonZKEVMGlobalExitRoot.sol", + "contractName": "PolygonZkEVMGlobalExitRoot", + "sourceName": "contracts/PolygonZkEVMGlobalExitRoot.sol", "abi": [ { "anonymous": false, @@ -151,8 +151,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506104b1806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461015e57600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610413565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610413565b610171565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e366004610448565b6102d8565b600554610146906001600160a01b031681565b6040516001600160a01b0390911681526020016100a0565b600454610146906001600160a01b031681565b6005546001600160a01b031633148061019457506004546001600160a01b031633145b6102165760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a4b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143606482015261545360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b0316330361022e5760018190555b6004546001600160a01b031633036102465760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036102d457600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156102f85750600054600160ff909116105b806103125750303b158015610312575060005460ff166001145b6103755760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161020d565b6000805460ff191660011790558015610398576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561040e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561042557600080fd5b5035919050565b80356001600160a01b038116811461044357600080fd5b919050565b6000806040838503121561045b57600080fd5b6104648361042c565b91506104726020840161042c565b9050925092905056fea2646970667358221220e87b62908ca7f367c27aa4d5451bb5f7d31195343c62faa0eff87856378c258f64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461015e57600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610413565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610413565b610171565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e366004610448565b6102d8565b600554610146906001600160a01b031681565b6040516001600160a01b0390911681526020016100a0565b600454610146906001600160a01b031681565b6005546001600160a01b031633148061019457506004546001600160a01b031633145b6102165760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a4b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143606482015261545360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b0316330361022e5760018190555b6004546001600160a01b031633036102465760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036102d457600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156102f85750600054600160ff909116105b806103125750303b158015610312575060005460ff166001145b6103755760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161020d565b6000805460ff191660011790558015610398576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561040e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561042557600080fd5b5035919050565b80356001600160a01b038116811461044357600080fd5b919050565b6000806040838503121561045b57600080fd5b6104648361042c565b91506104726020840161042c565b9050925092905056fea2646970667358221220e87b62908ca7f367c27aa4d5451bb5f7d31195343c62faa0eff87856378c258f64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506104b1806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461015e57600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610413565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610413565b610171565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e366004610448565b6102d8565b600554610146906001600160a01b031681565b6040516001600160a01b0390911681526020016100a0565b600454610146906001600160a01b031681565b6005546001600160a01b031633148061019457506004546001600160a01b031633145b6102165760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143606482015261545360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b0316330361022e5760018190555b6004546001600160a01b031633036102465760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036102d457600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156102f85750600054600160ff909116105b806103125750303b158015610312575060005460ff166001145b6103755760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161020d565b6000805460ff191660011790558015610398576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561040e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561042557600080fd5b5035919050565b80356001600160a01b038116811461044357600080fd5b919050565b6000806040838503121561045b57600080fd5b6104648361042c565b91506104726020840161042c565b9050925092905056fea2646970667358221220c468713514908397d2ff34ff850c8b2ff7e260b4b6808782e2c0251b7a798dcd64736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461015e57600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610413565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610413565b610171565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e366004610448565b6102d8565b600554610146906001600160a01b031681565b6040516001600160a01b0390911681526020016100a0565b600454610146906001600160a01b031681565b6005546001600160a01b031633148061019457506004546001600160a01b031633145b6102165760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143606482015261545360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b0316330361022e5760018190555b6004546001600160a01b031633036102465760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036102d457600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156102f85750600054600160ff909116105b806103125750303b158015610312575060005460ff166001145b6103755760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161020d565b6000805460ff191660011790558015610398576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561040e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561042557600080fd5b5035919050565b80356001600160a01b038116811461044357600080fd5b919050565b6000806040838503121561045b57600080fd5b6104648361042c565b91506104726020840161042c565b9050925092905056fea2646970667358221220c468713514908397d2ff34ff850c8b2ff7e260b4b6808782e2c0251b7a798dcd64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZKEVMGlobalExitRootL2.json b/compiled-contracts/PolygonZkEVMGlobalExitRootL2.json similarity index 90% rename from compiled-contracts/PolygonZKEVMGlobalExitRootL2.json rename to compiled-contracts/PolygonZkEVMGlobalExitRootL2.json index 32ac939c4..15f4cc64c 100644 --- a/compiled-contracts/PolygonZKEVMGlobalExitRootL2.json +++ b/compiled-contracts/PolygonZkEVMGlobalExitRootL2.json @@ -1,7 +1,7 @@ { "_format": "hh-sol-artifact-1", - "contractName": "PolygonZKEVMGlobalExitRootL2", - "sourceName": "contracts/PolygonZKEVMGlobalExitRootL2.sol", + "contractName": "PolygonZkEVMGlobalExitRootL2", + "sourceName": "contracts/PolygonZkEVMGlobalExitRootL2.sol", "abi": [ { "inputs": [ @@ -73,8 +73,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5060405161023838038061023883398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b6101a5806100936000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610156565b60006020819052908152604090205481565b6100a061009b366004610156565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b031633146101515760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f4e4c595f42524944474500000000000000606482015260840160405180910390fd5b600155565b60006020828403121561016857600080fd5b503591905056fea26469706673582212207d941b551ec81b7b270be5ca49938bccc3d7b4b0ed467ffa36d1846b23507c7e64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610156565b60006020819052908152604090205481565b6100a061009b366004610156565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b031633146101515760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f4e4c595f42524944474500000000000000606482015260840160405180910390fd5b600155565b60006020828403121561016857600080fd5b503591905056fea26469706673582212207d941b551ec81b7b270be5ca49938bccc3d7b4b0ed467ffa36d1846b23507c7e64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5060405161023838038061023883398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b6101a5806100936000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610156565b60006020819052908152604090205481565b6100a061009b366004610156565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b031633146101515760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f4e4c595f42524944474500000000000000606482015260840160405180910390fd5b600155565b60006020828403121561016857600080fd5b503591905056fea2646970667358221220f7451da1829b0ecb4873ed6f3f3d32d71e72a79502689acac6a4216f7a54a4a164736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610156565b60006020819052908152604090205481565b6100a061009b366004610156565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b031633146101515760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f4e4c595f42524944474500000000000000606482015260840160405180910390fd5b600155565b60006020828403121561016857600080fd5b503591905056fea2646970667358221220f7451da1829b0ecb4873ed6f3f3d32d71e72a79502689acac6a4216f7a54a4a164736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZKEVMGlobalExitRootL2Mock.json b/compiled-contracts/PolygonZkEVMGlobalExitRootL2Mock.json similarity index 92% rename from compiled-contracts/PolygonZKEVMGlobalExitRootL2Mock.json rename to compiled-contracts/PolygonZkEVMGlobalExitRootL2Mock.json index fb78a6f17..bcef27e10 100644 --- a/compiled-contracts/PolygonZKEVMGlobalExitRootL2Mock.json +++ b/compiled-contracts/PolygonZkEVMGlobalExitRootL2Mock.json @@ -1,7 +1,7 @@ { "_format": "hh-sol-artifact-1", - "contractName": "PolygonZKEVMGlobalExitRootL2Mock", - "sourceName": "contracts/mocks/PolygonZKEVMGlobalExitRootL2Mock.sol", + "contractName": "PolygonZkEVMGlobalExitRootL2Mock", + "sourceName": "contracts/mocks/PolygonZkEVMGlobalExitRootL2Mock.sol", "abi": [ { "inputs": [ @@ -104,8 +104,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5060405161029e38038061029e83398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b61020b806100936000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806301fd904414610067578063116c40c314610083578063257b36321461009857806333d6247d146100b857806396e07459146100cb578063a3c573eb146100eb575b600080fd5b61007060015481565b6040519081526020015b60405180910390f35b61009661009136600461019a565b600155565b005b6100706100a636600461019a565b60006020819052908152604090205481565b6100966100c636600461019a565b610116565b6100966100d93660046101b3565b60009182526020829052604090912055565b6002546100fe906001600160a01b031681565b6040516001600160a01b03909116815260200161007a565b6002546001600160a01b031633146100915760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f4e4c595f42524944474500000000000000606482015260840160405180910390fd5b6000602082840312156101ac57600080fd5b5035919050565b600080604083850312156101c657600080fd5b5050803592602090910135915056fea2646970667358221220146ad1d66b418b2575e71f8a2f661306fc5273e63ce76b1e7c1a05c7fb3a075064736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c806301fd904414610067578063116c40c314610083578063257b36321461009857806333d6247d146100b857806396e07459146100cb578063a3c573eb146100eb575b600080fd5b61007060015481565b6040519081526020015b60405180910390f35b61009661009136600461019a565b600155565b005b6100706100a636600461019a565b60006020819052908152604090205481565b6100966100c636600461019a565b610116565b6100966100d93660046101b3565b60009182526020829052604090912055565b6002546100fe906001600160a01b031681565b6040516001600160a01b03909116815260200161007a565b6002546001600160a01b031633146100915760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f4e4c595f42524944474500000000000000606482015260840160405180910390fd5b6000602082840312156101ac57600080fd5b5035919050565b600080604083850312156101c657600080fd5b5050803592602090910135915056fea2646970667358221220146ad1d66b418b2575e71f8a2f661306fc5273e63ce76b1e7c1a05c7fb3a075064736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5060405161029e38038061029e83398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b61020b806100936000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806301fd904414610067578063116c40c314610083578063257b36321461009857806333d6247d146100b857806396e07459146100cb578063a3c573eb146100eb575b600080fd5b61007060015481565b6040519081526020015b60405180910390f35b61009661009136600461019a565b600155565b005b6100706100a636600461019a565b60006020819052908152604090205481565b6100966100c636600461019a565b610116565b6100966100d93660046101b3565b60009182526020829052604090912055565b6002546100fe906001600160a01b031681565b6040516001600160a01b03909116815260200161007a565b6002546001600160a01b031633146100915760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f4e4c595f42524944474500000000000000606482015260840160405180910390fd5b6000602082840312156101ac57600080fd5b5035919050565b600080604083850312156101c657600080fd5b5050803592602090910135915056fea264697066735822122085e707f253243a8829ee7f7d67abda667a60278d5b76bdb0aa1a0971447503a064736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c806301fd904414610067578063116c40c314610083578063257b36321461009857806333d6247d146100b857806396e07459146100cb578063a3c573eb146100eb575b600080fd5b61007060015481565b6040519081526020015b60405180910390f35b61009661009136600461019a565b600155565b005b6100706100a636600461019a565b60006020819052908152604090205481565b6100966100c636600461019a565b610116565b6100966100d93660046101b3565b60009182526020829052604090912055565b6002546100fe906001600160a01b031681565b6040516001600160a01b03909116815260200161007a565b6002546001600160a01b031633146100915760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f4e4c595f42524944474500000000000000606482015260840160405180910390fd5b6000602082840312156101ac57600080fd5b5035919050565b600080604083850312156101c657600080fd5b5050803592602090910135915056fea264697066735822122085e707f253243a8829ee7f7d67abda667a60278d5b76bdb0aa1a0971447503a064736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZKEVMGlobalExitRootMock.json b/compiled-contracts/PolygonZkEVMGlobalExitRootMock.json similarity index 95% rename from compiled-contracts/PolygonZKEVMGlobalExitRootMock.json rename to compiled-contracts/PolygonZkEVMGlobalExitRootMock.json index 15da7037b..6942050b1 100644 --- a/compiled-contracts/PolygonZKEVMGlobalExitRootMock.json +++ b/compiled-contracts/PolygonZkEVMGlobalExitRootMock.json @@ -1,7 +1,7 @@ { "_format": "hh-sol-artifact-1", - "contractName": "PolygonZKEVMGlobalExitRootMock", - "sourceName": "contracts/mocks/PolygonZKEVMGlobalExitRootMock.sol", + "contractName": "PolygonZkEVMGlobalExitRootMock", + "sourceName": "contracts/mocks/PolygonZkEVMGlobalExitRootMock.sol", "abi": [ { "inputs": [ @@ -198,8 +198,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5060405161077a38038061077a83398101604081905261002f916101bb565b6100398282610040565b50506101ee565b600054610100900460ff16158080156100605750600054600160ff909116105b8061008b57506100793061019060201b6104ae1760201c565b15801561008b575060005460ff166001145b6100f25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015610115576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561018b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b80516001600160a01b03811681146101b657600080fd5b919050565b600080604083850312156101ce57600080fd5b6101d78361019f565b91506101e56020840161019f565b90509250929050565b61057d806101fd6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80633ed691ef116100665780633ed691ef14610110578063485cc955146101495780635bcef6731461015c5780635ec6a8df1461017c578063a3c573eb146101a757600080fd5b806301fd9044146100a3578063051a9e28146100bf578063257b3632146100d4578063319cf735146100f457806333d6247d146100fd575b600080fd5b6100ac60015481565b6040519081526020015b60405180910390f35b6100d26100cd3660046104bd565b6101ba565b005b6100ac6100e23660046104bd565b60036020526000908152604090205481565b6100ac60025481565b6100d261010b3660046104bd565b61020c565b6100ac60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d26101573660046104f2565b610373565b6100d261016a366004610525565b60009182526003602052604090912055565b60055461018f906001600160a01b031681565b6040516001600160a01b0390911681526020016100b6565b60045461018f906001600160a01b031681565b80600360006101f860025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b6005546001600160a01b031633148061022f57506004546001600160a01b031633145b6102b15760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a4b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143606482015261545360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b031633036102c95760018190555b6004546001600160a01b031633036102e15760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361036f57600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103935750600054600160ff909116105b806103ad5750303b1580156103ad575060005460ff166001145b6104105760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016102a8565b6000805460ff191660011790558015610433576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b031992831617909255600480549285169290911691909117905580156104a9576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b6000602082840312156104cf57600080fd5b5035919050565b80356001600160a01b03811681146104ed57600080fd5b919050565b6000806040838503121561050557600080fd5b61050e836104d6565b915061051c602084016104d6565b90509250929050565b6000806040838503121561053857600080fd5b5050803592602090910135915056fea26469706673582212206d7e73c1fd0ab3c0387a3db72a4dd6be8d67de74af18f54eda86374e369cdf7b64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c80633ed691ef116100665780633ed691ef14610110578063485cc955146101495780635bcef6731461015c5780635ec6a8df1461017c578063a3c573eb146101a757600080fd5b806301fd9044146100a3578063051a9e28146100bf578063257b3632146100d4578063319cf735146100f457806333d6247d146100fd575b600080fd5b6100ac60015481565b6040519081526020015b60405180910390f35b6100d26100cd3660046104bd565b6101ba565b005b6100ac6100e23660046104bd565b60036020526000908152604090205481565b6100ac60025481565b6100d261010b3660046104bd565b61020c565b6100ac60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d26101573660046104f2565b610373565b6100d261016a366004610525565b60009182526003602052604090912055565b60055461018f906001600160a01b031681565b6040516001600160a01b0390911681526020016100b6565b60045461018f906001600160a01b031681565b80600360006101f860025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b6005546001600160a01b031633148061022f57506004546001600160a01b031633145b6102b15760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a4b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143606482015261545360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b031633036102c95760018190555b6004546001600160a01b031633036102e15760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361036f57600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103935750600054600160ff909116105b806103ad5750303b1580156103ad575060005460ff166001145b6104105760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016102a8565b6000805460ff191660011790558015610433576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b031992831617909255600480549285169290911691909117905580156104a9576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b6000602082840312156104cf57600080fd5b5035919050565b80356001600160a01b03811681146104ed57600080fd5b919050565b6000806040838503121561050557600080fd5b61050e836104d6565b915061051c602084016104d6565b90509250929050565b6000806040838503121561053857600080fd5b5050803592602090910135915056fea26469706673582212206d7e73c1fd0ab3c0387a3db72a4dd6be8d67de74af18f54eda86374e369cdf7b64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5060405161077a38038061077a83398101604081905261002f916101bb565b6100398282610040565b50506101ee565b600054610100900460ff16158080156100605750600054600160ff909116105b8061008b57506100793061019060201b6104ae1760201c565b15801561008b575060005460ff166001145b6100f25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015610115576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561018b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b80516001600160a01b03811681146101b657600080fd5b919050565b600080604083850312156101ce57600080fd5b6101d78361019f565b91506101e56020840161019f565b90509250929050565b61057d806101fd6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80633ed691ef116100665780633ed691ef14610110578063485cc955146101495780635bcef6731461015c5780635ec6a8df1461017c578063a3c573eb146101a757600080fd5b806301fd9044146100a3578063051a9e28146100bf578063257b3632146100d4578063319cf735146100f457806333d6247d146100fd575b600080fd5b6100ac60015481565b6040519081526020015b60405180910390f35b6100d26100cd3660046104bd565b6101ba565b005b6100ac6100e23660046104bd565b60036020526000908152604090205481565b6100ac60025481565b6100d261010b3660046104bd565b61020c565b6100ac60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d26101573660046104f2565b610373565b6100d261016a366004610525565b60009182526003602052604090912055565b60055461018f906001600160a01b031681565b6040516001600160a01b0390911681526020016100b6565b60045461018f906001600160a01b031681565b80600360006101f860025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b6005546001600160a01b031633148061022f57506004546001600160a01b031633145b6102b15760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143606482015261545360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b031633036102c95760018190555b6004546001600160a01b031633036102e15760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361036f57600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103935750600054600160ff909116105b806103ad5750303b1580156103ad575060005460ff166001145b6104105760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016102a8565b6000805460ff191660011790558015610433576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b031992831617909255600480549285169290911691909117905580156104a9576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b6000602082840312156104cf57600080fd5b5035919050565b80356001600160a01b03811681146104ed57600080fd5b919050565b6000806040838503121561050557600080fd5b61050e836104d6565b915061051c602084016104d6565b90509250929050565b6000806040838503121561053857600080fd5b5050803592602090910135915056fea2646970667358221220c80e870580479f932b04545fffd3baa02e83e8f5d0ede84bbb442e598bce6aae64736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c80633ed691ef116100665780633ed691ef14610110578063485cc955146101495780635bcef6731461015c5780635ec6a8df1461017c578063a3c573eb146101a757600080fd5b806301fd9044146100a3578063051a9e28146100bf578063257b3632146100d4578063319cf735146100f457806333d6247d146100fd575b600080fd5b6100ac60015481565b6040519081526020015b60405180910390f35b6100d26100cd3660046104bd565b6101ba565b005b6100ac6100e23660046104bd565b60036020526000908152604090205481565b6100ac60025481565b6100d261010b3660046104bd565b61020c565b6100ac60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d26101573660046104f2565b610373565b6100d261016a366004610525565b60009182526003602052604090912055565b60055461018f906001600160a01b031681565b6040516001600160a01b0390911681526020016100b6565b60045461018f906001600160a01b031681565b80600360006101f860025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b6005546001600160a01b031633148061022f57506004546001600160a01b031633145b6102b15760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143606482015261545360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b031633036102c95760018190555b6004546001600160a01b031633036102e15760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361036f57600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103935750600054600160ff909116105b806103ad5750303b1580156103ad575060005460ff166001145b6104105760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016102a8565b6000805460ff191660011790558015610433576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b031992831617909255600480549285169290911691909117905580156104a9576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b6000602082840312156104cf57600080fd5b5035919050565b80356001600160a01b03811681146104ed57600080fd5b919050565b6000806040838503121561050557600080fd5b61050e836104d6565b915061051c602084016104d6565b90509250929050565b6000806040838503121561053857600080fd5b5050803592602090910135915056fea2646970667358221220c80e870580479f932b04545fffd3baa02e83e8f5d0ede84bbb442e598bce6aae64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZKEVMMock.json b/compiled-contracts/PolygonZkEVMMock.json similarity index 96% rename from compiled-contracts/PolygonZKEVMMock.json rename to compiled-contracts/PolygonZkEVMMock.json index 3a6e0b57c..08c29f242 100644 --- a/compiled-contracts/PolygonZKEVMMock.json +++ b/compiled-contracts/PolygonZkEVMMock.json @@ -1,7 +1,7 @@ { "_format": "hh-sol-artifact-1", - "contractName": "PolygonZKEVMMock", - "sourceName": "contracts/mocks/PolygonZKEVMMock.sol", + "contractName": "PolygonZkEVMMock", + "sourceName": "contracts/mocks/PolygonZkEVMMock.sol", "abi": [ { "anonymous": false, @@ -468,7 +468,7 @@ "name": "bridgeAddress", "outputs": [ { - "internalType": "contract IPolygonZKEVMBridge", + "internalType": "contract IPolygonZkEVMBridge", "name": "", "type": "address" } @@ -720,7 +720,7 @@ "name": "globalExitRootManager", "outputs": [ { - "internalType": "contract IPolygonZKEVMGlobalExitRoot", + "internalType": "contract IPolygonZkEVMGlobalExitRoot", "name": "", "type": "address" } @@ -731,7 +731,7 @@ { "inputs": [ { - "internalType": "contract IPolygonZKEVMGlobalExitRoot", + "internalType": "contract IPolygonZkEVMGlobalExitRoot", "name": "_globalExitRootManager", "type": "address" }, @@ -746,7 +746,7 @@ "type": "address" }, { - "internalType": "contract IPolygonZKEVMBridge", + "internalType": "contract IPolygonZkEVMBridge", "name": "_bridgeAddress", "type": "address" }, @@ -788,7 +788,7 @@ "type": "uint64" } ], - "internalType": "struct PolygonZKEVM.InitializePackedParameters", + "internalType": "struct PolygonZkEVM.InitializePackedParameters", "name": "initializePackedParameters", "type": "tuple" }, @@ -1186,7 +1186,7 @@ "type": "uint64" } ], - "internalType": "struct PolygonZKEVM.BatchData[]", + "internalType": "struct PolygonZkEVM.BatchData[]", "name": "batches", "type": "tuple[]" } @@ -1216,7 +1216,7 @@ "type": "uint64" } ], - "internalType": "struct PolygonZKEVM.ForcedBatchData[]", + "internalType": "struct PolygonZkEVM.ForcedBatchData[]", "name": "batches", "type": "tuple[]" } @@ -1693,8 +1693,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50615e2180620000216000396000f3fe608060405234801561001057600080fd5b50600436106104125760003560e01c806396dc3d3911610220578063cfa8ed4711610130578063e7a7ed02116100b8578063f14916d611610087578063f14916d6146109e2578063f2fde38b146109f5578063f851a44014610a08578063f8b823e414610a1b578063fe16564f14610a2457600080fd5b8063e7a7ed021461098f578063e8bf92ed146109a9578063eaeb077b146109bc578063edc41121146109cf57600080fd5b8063d939b315116100ff578063d939b3151461093e578063dbc1697614610958578063e0d1744114610960578063e11f3f1814610973578063e217cfd61461098657600080fd5b8063cfa8ed47146108ea578063d02103ca14610904578063d8d1091b14610917578063d8f54db01461092a57600080fd5b8063ab9fc5ef116101b3578063b6b0b09711610182578063b6b0b0971461088f578063c0cad302146108a9578063c0ed84e0146108bc578063c89e42df146108c4578063cf136306146108d757600080fd5b8063ab9fc5ef146107e3578063adc879e9146107ed578063afd23cbe14610807578063b4d63f581461082f57600080fd5b80639eb831b9116101ef5780639eb831b9146107a85780639f0d039d146107b0578063a3c573eb146107b8578063aa58bad6146107cb57600080fd5b806396dc3d391461076757806399f5634e1461077a5780639b796760146107825780639c9f3dfe1461079557600080fd5b80634a910e6a11610326578063715018a6116102ae578063837a47381161027d578063837a4738146106b1578063841b24d71461071f5780638b48931e146107395780638c4a0af7146107435780638da5cb5b1461075657600080fd5b8063715018a6146106705780637215541a1461067857806375c508b31461068b5780637fcb36531461069e57600080fd5b8063574f649e116102f5578063574f649e1461060457806360943d6a146106175780636b8616ce1461062a5780636ff512cc1461064a578063704b6c021461065d57600080fd5b80634a910e6a146105b65780635392c5e0146105c9578063542028d5146105e95780635437988d146105f157600080fd5b80632d0889d3116103a9578063423fa85611610378578063423fa85614610542578063456052671461055c578063458c0477146105765780634834a343146105895780634a1a89a71461059c57600080fd5b80632d0889d314610500578063383b3be814610509578063394218e91461051c5780633c1582671461052f57600080fd5b80631816b7e5116103e55780631816b7e51461048457806319d8ac6114610497578063220d7899146104c257806329878983146104d557600080fd5b80630eaa86ea14610417578063107bf28c1461043d57806310a01a721461045257806315064c9614610467575b600080fd5b61042a610425366004614b86565b610a37565b6040519081526020015b60405180910390f35b610445610c18565b6040516104349190614c33565b610465610460366004614c75565b610ca6565b005b6065546104749060ff1681565b6040519015158152602001610434565b610465610492366004614d02565b610ef0565b6068546104aa906001600160401b031681565b6040516001600160401b039091168152602001610434565b6104456104d0366004614d26565b611016565b606a546104e8906001600160a01b031681565b6040516001600160a01b039091168152602001610434565b61042a61ea6081565b610474610517366004614d73565b6111bc565b61046561052a366004614d73565b611203565b61046561053d366004614eb0565b611352565b6068546104aa90600160401b90046001600160401b031681565b6068546104aa90600160801b90046001600160401b031681565b6072546104aa906001600160401b031681565b610465610597366004614c75565b611b66565b6072546104aa90600160401b90046001600160401b031681565b6104656105c4366004614d73565b611eaf565b61042a6105d7366004614d73565b606d6020526000908152604090205481565b61044561214a565b6104656105ff366004614fdb565b612157565b61042a610612366004614ff8565b612181565b61046561062536600461506d565b6121c4565b61042a610638366004614d73565b60666020526000908152604090205481565b610465610658366004614fdb565b612534565b61046561066b366004614fdb565b6125b8565b610465612630565b610465610686366004614d73565b612644565b610465610699366004615144565b6128bc565b6069546104aa906001600160401b031681565b6106f46106bf3660046151e2565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610434565b6072546104aa90600160c01b90046001600160401b031681565b6104aa62093a8081565b610465610751366004615209565b61294b565b6033546001600160a01b03166104e8565b610465610775366004614d73565b6129c2565b61042a6129ed565b610465610790366004614d73565b612ad0565b6104656107a3366004614d73565b612b05565b61042a600c81565b60745461042a565b6070546104e8906001600160a01b031681565b6065546104aa9061010090046001600160401b031681565b6104aa6206978081565b606c546104aa90600160a81b90046001600160401b031681565b60655461081c90600160481b900461ffff1681565b60405161ffff9091168152602001610434565b61086a61083d366004614d73565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610434565b6065546104e890600160581b90046001600160a01b031681565b6104656108b7366004615226565b612c4b565b6104aa612c63565b6104656108d2366004615226565b612cb0565b6104656108e5366004614d73565b612d16565b6069546104e890600160401b90046001600160a01b031681565b606c546104e8906001600160a01b031681565b61046561092536600461525a565b612d97565b606c5461047490600160a01b900460ff1681565b6072546104aa90600160801b90046001600160401b031681565b610465613261565b61046561096e36600461534c565b61331d565b610465610981366004615144565b61338f565b6104aa6103e881565b6068546104aa90600160c01b90046001600160401b031681565b606b546104e8906001600160a01b031681565b6104656109ca366004615399565b6134d4565b6104656109dd366004614c75565b6137fc565b6104656109f0366004614fdb565b61391c565b610465610a03366004614fdb565b613994565b6073546104e8906001600160a01b031681565b61042a60745481565b610465610a323660046153dd565b613a0a565b6000806000610a44612c63565b90506001600160401b03881615610ae1576072546001600160401b039081169089161115610a8d5760405162461bcd60e51b8152600401610a8490615409565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610adb5760405162461bcd60e51b8152600401610a849061548c565b50610b4b565b6001600160401b0387166000908152606d6020526040902054915081610b195760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316876001600160401b03161115610b4b5760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316866001600160401b031611610b7c5760405162461bcd60e51b8152600401610a84906155ea565b6000610b8b8888888689611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051610bc0919061566d565b602060405180830381855afa158015610bdd573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c009190615689565b610c0a91906156b8565b9a9950505050505050505050565b606f8054610c25906156cc565b80601f0160208091040260200160405190810160405280929190818152602001828054610c51906156cc565b8015610c9e5780601f10610c7357610100808354040283529160200191610c9e565b820191906000526020600020905b815481529060010190602001808311610c8157829003601f168201915b505050505081565b610cae613a2c565b600080610cb9612c63565b90506001600160401b038a1615610d4d576072546001600160401b03908116908b161115610cf95760405162461bcd60e51b8152600401610a8490615409565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610d475760405162461bcd60e51b8152600401610a849061548c565b50610db7565b6001600160401b0389166000908152606d6020526040902054915081610d855760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316896001600160401b03161115610db75760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316886001600160401b031611610de85760405162461bcd60e51b8152600401610a84906155ea565b6000610df78a8a8a868b611016565b6069805467ffffffffffffffff19166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610e4557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610e8b57600080fd5b505af1158015610e9f573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610f1a5760405162461bcd60e51b8152600401610a8490615706565b6103e88161ffff16118015610f3457506104008161ffff16105b610fb95760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a4b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a401610a84565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b0380861660008181526067602052604080822054938816825290205460609291158061104857508115155b6110bc576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a84565b80611131576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a84565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b03828116600090815260716020526040812054909242926111f292600160801b9092048116911661575f565b6001600160401b0316111592915050565b6073546001600160a01b0316331461122d5760405162461bcd60e51b8152600401610a8490615706565b62093a806001600160401b03821611156112595760405162461bcd60e51b8152600401610a849061578a565b60655460ff166112fc576072546001600160401b03600160c01b9091048116908216106112fc5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a4b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a401610a84565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a19060200161100b565b60655460ff16156113755760405162461bcd60e51b8152600401610a84906157f5565b606954600160401b90046001600160a01b031633146113fc5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e6365720000000000006064820152608401610a84565b8051806114715760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e636520312062617463680000006064820152608401610a84565b6103e881106114ea576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e7920626174636865736064820152608401610a84565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561198a57600087828151811061153d5761153d61585d565b60200260200101519050600081606001516001600160401b031611156116f6578361156781615873565b94505060008160000151805190602001208260200151836060015160405160200161159493929190615899565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461163a5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d617463680000006064820152608401610a84565b81606001516001600160401b031682604001516001600160401b031610156116f05760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a401610a84565b5061187d565b6020810151158061177f5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916117399160040190815260200190565b6020604051808303816000875af1158015611758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177c9190615689565b15155b6117f15760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d7573742065786973740000000000006064820152608401610a84565b80515161ea601161187d5760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a401610a84565b856001600160401b031681604001516001600160401b0316101580156118b057504281604001516001600160401b031611155b6119225760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e67650000006064820152608401610a84565b805180516020918201208183015160408085015190516119499488949392913391016158bc565b604051602081830303815290604052805190602001209250848061196c90615873565b9550508060400151955050808061198290615900565b915050611521565b506068546001600160401b03600160c01b90910481169083161115611a0f5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b6064820152608401610a84565b606854600090611a2f90600160801b90046001600160401b031684615919565b611a42906001600160401b031687615941565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611b1790339030908490611afc9190615958565b606554600160581b90046001600160a01b0316929190613a86565b611b1f613af1565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b895760405162461bcd60e51b8152600401610a84906157f5565b6072546001600160401b038781166000908152606760205260409020600101544292611bc092600160c01b9091048116911661575f565b6001600160401b03161115611c495760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a401610a84565b6103e8611c568888615919565b6001600160401b031610611cd25760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e792062617463686573000000006064820152608401610a84565b611ce28888888888888888613b91565b611ceb86613e8e565b607254600160801b90046001600160401b0316600003611db3576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615611d5057607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d9657600080fd5b505af1158015611daa573d6000803e3d6000fd5b50505050611e64565b611dbb613af1565b607280546001600160401b0316906000611dd483615873565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611edc57506072546001600160401b03600160401b9091048116908216115b8015611ef757506072546001600160401b0390811690821611155b611f755760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a401610a84565b606a546001600160a01b0316331461201f57611f90816111bc565b61201f5760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a401610a84565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b1580156120dc57600080fd5b505af11580156120f0573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e846002015460405161213d91815260200190565b60405180910390a3505050565b606e8054610c25906156cc565b61215f613a2c565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b60008585805190602001208585856040516020016121a39594939291906158bc565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff16158080156121e45750600054600160ff909116105b806121fe5750303b1580156121fe575060005460ff166001145b6122615760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a84565b6000805460ff191660011790558015612284576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a8416179055607080549091169188169190911790556123016020860186614fdb565b607380546001600160a01b0319166001600160a01b03929092169190911790556123316060860160408701614fdb565b606980546001600160a01b0392909216600160401b02600160401b600160e01b031990921691909117905561236c60c0860160a08701614fdb565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa7113568490556123c960e0860160c08701614d73565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556124006040860160208701614d73565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561243c6080860160608701614d73565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b1990921691909117905561247860a0860160808701615209565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e6124a084826159bd565b50606f6124ad83826159bd565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124e3614074565b8015612529576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b0316331461255e5760405162461bcd60e51b8152600401610a8490615706565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161100b565b6073546001600160a01b031633146125e25760405162461bcd60e51b8152600401610a8490615706565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a19060200161100b565b612638613a2c565b61264260006140e4565b565b6033546001600160a01b031633146128b1576072546000906001600160401b03161561269557506072546001600160401b03908116600090815260716020526040902054600160401b9004166126a3565b506069546001600160401b03165b80826001600160401b0316116127215760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c7265616479207665726966696564000000006064820152608401610a84565b6068546001600160401b03600160401b90910481169083161180159061276357506001600160401b038083166000908152606760205260409020600101541615155b6127ee5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a401610a84565b6001600160401b03808316600090815260676020526040902060010154429161281c9162093a80911661575f565b6001600160401b031611156128af5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a401610a84565b505b6128b9614136565b50565b60655460ff16156128df5760405162461bcd60e51b8152600401610a84906157f5565b6128f08989898989898989896141a6565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1612529614136565b6073546001600160a01b031633146129755760405162461bcd60e51b8152600401610a8490615706565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061100b90831515815260200190565b6129ca613a2c565b6069805467ffffffffffffffff19166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a649190615689565b90506000612a70612c63565b6068546001600160401b03600160401b8204811691612aa091600160801b8204811691600160c01b900416615919565b612aaa919061575f565b612ab49190615919565b6001600160401b03169050612ac98183615a7c565b9250505090565b612ad8613a2c565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612b2f5760405162461bcd60e51b8152600401610a8490615706565b62093a806001600160401b0382161115612b5b5760405162461bcd60e51b8152600401610a849061578a565b60655460ff16612bf0576072546001600160401b03600160801b909104811690821610612bf05760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f776572006064820152608401610a84565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c759060200161100b565b612c53613a2c565b606f612c5f82826159bd565b5050565b6072546000906001600160401b031615612ca057506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612cda5760405162461bcd60e51b8152600401610a8490615706565b606e612ce682826159bd565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161100b9190614c33565b6073546001600160a01b03163314612d405760405162461bcd60e51b8152600401610a8490615706565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f9060200161100b565b60655460ff1615612dba5760405162461bcd60e51b8152600401610a84906157f5565b606c54600160a01b900460ff161515600114612de85760405162461bcd60e51b8152600401610a8490615a90565b805180612e4b5760405162461bcd60e51b815260206004820152603d6024820152600080516020615dac83398151915260448201527f3a204d75737420666f726365206174206c6561737420312062617463680000006064820152608401610a84565b6103e88110612ebc5760405162461bcd60e51b81526020600482015260436024820152600080516020615dac83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a401610a84565b6068546001600160401b03600160c01b8204811691612ee4918491600160801b900416615af9565b1115612f3e5760405162461bcd60e51b81526020600482015260356024820152600080516020615dac8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b6064820152608401610a84565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b8481101561316a576000868281518110612f8b57612f8b61585d565b602002602001015190508380612fa090615873565b945050600081600001518051906020012082602001518360400151604051602001612fcd93929190615899565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461306c5760405162461bcd60e51b81526020600482015260426024820152600080516020615dac83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a401610a84565b613077600188615941565b830361310c5742620697808360400151613091919061575f565b6001600160401b0316111561310c5760405162461bcd60e51b81526020600482015260476024820152600080516020615dac83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a401610a84565b815180516020918201208184015160405161312f938893929142913391016158bc565b604051602081830303815290604052805190602001209350858061315290615873565b9650505050808061316290615900565b915050612f6f565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166132835760405162461bcd60e51b8152600401610a8490615b11565b6073546001600160a01b031633146132ad5760405162461bcd60e51b8152600401610a8490615706565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156132fd57600080fd5b505af1158015613311573d6000803e3d6000fd5b50505050612642614821565b613325613a2c565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133b95760405162461bcd60e51b8152600401610a8490615b6e565b6133ca8989898989898989896141a6565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561341557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561345b57600080fd5b505af115801561346f573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff16156134f75760405162461bcd60e51b8152600401610a84906157f5565b606c54600160a01b900460ff1615156001146135255760405162461bcd60e51b8152600401610a8490615a90565b600061353060745490565b9050818111156135955760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b6064820152608401610a84565b61ea608351106136055760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b6064820152608401610a84565b60655461362490600160581b90046001600160a01b0316333084613a86565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa15801561366e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136929190615689565b60688054919250600160c01b9091046001600160401b03169060186136b683615873565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016136f793929190615899565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361379b57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26137f6565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516137ed93929190615bcb565b60405180910390a25b50505050565b606a546001600160a01b031633146138265760405162461bcd60e51b8152600401610a8490615b6e565b6138368888888888888888613b91565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561388157607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156138c757600080fd5b505af11580156138db573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e9d565b6073546001600160a01b031633146139465760405162461bcd60e51b8152600401610a8490615706565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca9060200161100b565b61399c613a2c565b6001600160a01b038116613a015760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a84565b6128b9816140e4565b613a12613a2c565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b031633146126425760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a84565b6040516001600160a01b03808516602483015283166044820152606481018290526137f69085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614878565b6072546001600160401b03600160401b820481169116111561264257607254600090613b2e90600160401b90046001600160401b0316600161575f565b9050613b39816111bc565b156128b957607254600090600290613b5b9084906001600160401b0316615919565b613b659190615bfe565b613b6f908361575f565b9050613b7a816111bc565b15613b8857612c5f81611eaf565b612c5f82611eaf565b600080613b9c612c63565b90506001600160401b038a1615613c30576072546001600160401b03908116908b161115613bdc5760405162461bcd60e51b8152600401610a8490615409565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c2a5760405162461bcd60e51b8152600401610a849061548c565b50613c9a565b6001600160401b0389166000908152606d6020526040902054915081613c685760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316896001600160401b03161115613c9a5760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316886001600160401b031611613ccb5760405162461bcd60e51b8152600401610a84906155ea565b6000613cda8a8a8a868b611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051613d0f919061566d565b602060405180830381855afa158015613d2c573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613d4f9190615689565b613d5991906156b8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613d9d918b918b918b9190600401615c24565b602060405180830381865afa158015613dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dde9190615c9e565b613e3d5760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20494e5660448201526920a624a22fa82927a7a360b11b6064820152608401610a84565b613e8033613e4b858d615919565b6001600160401b0316613e5c6129ed565b613e669190615958565b606554600160581b90046001600160a01b0316919061494f565b505050505050505050505050565b6000613e98612c63565b905081600080613ea88484615919565b6001600160401b031690505b836001600160401b0316836001600160401b031614613f5a576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613f04911642615941565b1115613f3f576001810154613f2990600160401b90046001600160401b031686615919565b613f3c906001600160401b031684615af9565b92505b60010154600160401b90046001600160401b03169250613eb4565b6000613f668383615941565b905082811015613fe0576000613f7c8285615941565b9050600c8111613f8c5780613f8f565b600c5b9050613f9c816003615958565b613fa790600a615d9f565b606554613fc0908390600160481b900461ffff16615d9f565b607454613fcd9190615958565b613fd79190615a7c565b6074555061406c565b6000613fec8483615941565b9050600c8111613ffc5780613fff565b600c5b9050600061400e826003615958565b61401990600a615d9f565b606554614032908490600160481b900461ffff16615d9f565b60745461403f9190615958565b6140499190615a7c565b90508060745460745461405c9190615958565b6140669190615a7c565b60745550505b505050505050565b600054610100900460ff166140df5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a84565b612642335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561418657600080fd5b505af115801561419a573d6000803e3d6000fd5b5050505061264261497f565b60006001600160401b038a1615614321576072546001600160401b03908116908b1611156142655760405162461bcd60e51b815260206004820152606c6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c401610a84565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b909204161461431b5760405162461bcd60e51b81526020600482015260606024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a401610a84565b50614475565b506001600160401b0387166000908152606d6020526040902054806143c25760405162461bcd60e51b81526020600482015260576024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a401610a84565b6069546001600160401b0390811690891611156144755760405162461bcd60e51b81526020600482015260716024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c401610a84565b6072546001600160401b03908116908a16118015906144a55750896001600160401b0316896001600160401b0316115b80156144c657506072546001600160401b03600160401b9091048116908a16115b61453e5760405162461bcd60e51b815260206004820152604f6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a401610a84565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146145fe5760405162461bcd60e51b815260206004820152606a6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c401610a84565b600061460d898989858a611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051614642919061566d565b602060405180830381855afa15801561465f573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906146829190615689565b61468c91906156b8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916146d0918a918a918a9190600401615c24565b602060405180830381865afa1580156146ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147119190615c9e565b6147715760405162461bcd60e51b815260206004820152603e6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20494e56414c49445f50524f4f4600006064820152608401610a84565b6001600160401b038b16600090815260716020526040902060020154879003613e805760405162461bcd60e51b81526020600482015260626024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c401610a84565b60655460ff166148435760405162461bcd60e51b8152600401610a8490615b11565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006148cd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166149da9092919063ffffffff16565b80519091501561494a57808060200190518101906148eb9190615c9e565b61494a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a84565b505050565b6040516001600160a01b03831660248201526044810182905261494a90849063a9059cbb60e01b90606401613aba565b60655460ff16156149a25760405162461bcd60e51b8152600401610a84906157f5565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60606149e984846000856149f1565b949350505050565b606082471015614a525760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a84565b600080866001600160a01b03168587604051614a6e919061566d565b60006040518083038185875af1925050503d8060008114614aab576040519150601f19603f3d011682016040523d82523d6000602084013e614ab0565b606091505b5091509150614ac187838387614acc565b979650505050505050565b60608315614b3b578251600003614b34576001600160a01b0385163b614b345760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a84565b50816149e9565b6149e98383815115614b505781518083602001fd5b8060405162461bcd60e51b8152600401610a849190614c33565b80356001600160401b0381168114614b8157600080fd5b919050565b600080600080600060a08688031215614b9e57600080fd5b614ba786614b6a565b9450614bb560208701614b6a565b9350614bc360408701614b6a565b94979396509394606081013594506080013592915050565b60005b83811015614bf6578181015183820152602001614bde565b838111156137f65750506000910152565b60008151808452614c1f816020860160208601614bdb565b601f01601f19169290920160200192915050565b602081526000614c466020830184614c07565b9392505050565b8060408101831015614c5e57600080fd5b92915050565b8060808101831015614c5e57600080fd5b6000806000806000806000806101a0898b031215614c9257600080fd5b614c9b89614b6a565b9750614ca960208a01614b6a565b9650614cb760408a01614b6a565b95506060890135945060808901359350614cd48a60a08b01614c4d565b9250614ce38a60e08b01614c64565b9150614cf38a6101608b01614c4d565b90509295985092959890939650565b600060208284031215614d1457600080fd5b813561ffff81168114614c4657600080fd5b600080600080600060a08688031215614d3e57600080fd5b614d4786614b6a565b9450614d5560208701614b6a565b94979496505050506040830135926060810135926080909101359150565b600060208284031215614d8557600080fd5b614c4682614b6a565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614dc657614dc6614d8e565b60405290565b604051606081016001600160401b0381118282101715614dc657614dc6614d8e565b604051601f8201601f191681016001600160401b0381118282101715614e1657614e16614d8e565b604052919050565b60006001600160401b03821115614e3757614e37614d8e565b5060051b60200190565b600082601f830112614e5257600080fd5b81356001600160401b03811115614e6b57614e6b614d8e565b614e7e601f8201601f1916602001614dee565b818152846020838601011115614e9357600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614ec357600080fd5b82356001600160401b0380821115614eda57600080fd5b818501915085601f830112614eee57600080fd5b8135614f01614efc82614e1e565b614dee565b81815260059190911b83018401908481019088831115614f2057600080fd5b8585015b83811015614fb957803585811115614f3c5760008081fd5b86016080818c03601f1901811315614f545760008081fd5b614f5c614da4565b8983013588811115614f6e5760008081fd5b614f7c8e8c83870101614e41565b8252506040808401358b8301526060614f96818601614b6a565b82840152614fa5848601614b6a565b908301525085525050918601918601614f24565b5098975050505050505050565b6001600160a01b03811681146128b957600080fd5b600060208284031215614fed57600080fd5b8135614c4681614fc6565b600080600080600060a0868803121561501057600080fd5b8535945060208601356001600160401b0381111561502d57600080fd5b61503988828901614e41565b9450506040860135925061504f60608701614b6a565b9150608086013561505f81614fc6565b809150509295509295909350565b600080600080600080600080888a036101c081121561508b57600080fd5b893561509681614fc6565b985060208a01356150a681614fc6565b975060408a01356150b681614fc6565b965060608a01356150c681614fc6565b955060e0607f19820112156150da57600080fd5b5060808901935061016089013592506101808901356001600160401b038082111561510457600080fd5b6151108c838d01614e41565b93506101a08b013591508082111561512757600080fd5b506151348b828c01614e41565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c03121561516357600080fd5b61516c8a614b6a565b985061517a60208b01614b6a565b975061518860408b01614b6a565b965061519660608b01614b6a565b955060808a0135945060a08a013593506151b38b60c08c01614c4d565b92506151c38b6101008c01614c64565b91506151d38b6101808c01614c4d565b90509295985092959850929598565b6000602082840312156151f457600080fd5b5035919050565b80151581146128b957600080fd5b60006020828403121561521b57600080fd5b8135614c46816151fb565b60006020828403121561523857600080fd5b81356001600160401b0381111561524e57600080fd5b6149e984828501614e41565b6000602080838503121561526d57600080fd5b82356001600160401b038082111561528457600080fd5b818501915085601f83011261529857600080fd5b81356152a6614efc82614e1e565b81815260059190911b830184019084810190888311156152c557600080fd5b8585015b83811015614fb9578035858111156152e15760008081fd5b86016060818c03601f19018113156152f95760008081fd5b615301614dcc565b89830135888111156153135760008081fd5b6153218e8c83870101614e41565b8252506040808401358b830152615339838501614b6a565b90820152855250509186019186016152c9565b6000806000806080858703121561536257600080fd5b61536b85614b6a565b93506020850135925061538060408601614b6a565b915061538e60608601614b6a565b905092959194509250565b600080604083850312156153ac57600080fd5b82356001600160401b038111156153c257600080fd5b6153ce85828601614e41565b95602094909401359450505050565b600080604083850312156153f057600080fd5b8235915061540060208401614b6a565b90509250929050565b60208082526058908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2070656e60408201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560608201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608082015260a00190565b6020808252604c908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760608201526b040e6e8c2e8ca40c4c2e8c6d60a31b608082015260a00190565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786060820152621a5cdd60ea1b608082015260a00190565b6020808252605d908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060608201527f7468616e2063757272656e744c61737456657269666965644261746368000000608082015260a00190565b60208082526057908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2066696e60408201527f616c4e65774261746368206d75737420626520626967676572207468616e206360608201527f757272656e744c61737456657269666965644261746368000000000000000000608082015260a00190565b6000825161567f818460208701614bdb565b9190910192915050565b60006020828403121561569b57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826156c7576156c76156a2565b500690565b600181811c908216806156e057607f821691505b60208210810361570057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561578157615781615749565b01949350505050565b60208082526045908201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361588f5761588f615749565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b60006001820161591257615912615749565b5060010190565b60006001600160401b038381169083168181101561593957615939615749565b039392505050565b60008282101561595357615953615749565b500390565b600081600019048311821515161561597257615972615749565b500290565b601f82111561494a57600081815260208120601f850160051c8101602086101561599e5750805b601f850160051c820191505b8181101561406c578281556001016159aa565b81516001600160401b038111156159d6576159d6614d8e565b6159ea816159e484546156cc565b84615977565b602080601f831160018114615a1f5760008415615a075750858301515b600019600386901b1c1916600185901b17855561406c565b600085815260208120601f198616915b82811015615a4e57888601518255948401946001909101908401615a2f565b5085821015615a6c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615a8b57615a8b6156a2565b500490565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b60008219821115615b0c57615b0c615749565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b0383166020820152606060408201819052600090615bf590830184614c07565b95945050505050565b60006001600160401b0380841680615c1857615c186156a2565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615c5c57848483379084018281529284019290600101615c3c565b5050828760c0870137610100850181815286935091505b6001811015615c92578251825260209283019290910190600101615c73565b50505095945050505050565b600060208284031215615cb057600080fd5b8151614c46816151fb565b600181815b80851115615cf6578160001904821115615cdc57615cdc615749565b80851615615ce957918102915b93841c9390800290615cc0565b509250929050565b600082615d0d57506001614c5e565b81615d1a57506000614c5e565b8160018114615d305760028114615d3a57615d56565b6001915050614c5e565b60ff841115615d4b57615d4b615749565b50506001821b614c5e565b5060208310610133831016604e8410600b8410161715615d79575081810a614c5e565b615d838383615cbb565b8060001904821115615d9757615d97615749565b029392505050565b6000614c468383615cfe56fe506f6c79676f6e5a4b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a4b45564d3a3a70726f76654e6f6e44657465726d696e6973a2646970667358221220ba301bd4477ec503319b36f4ba30580c96f2340c94e9f0b3b12710f403d0c1f064736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106104125760003560e01c806396dc3d3911610220578063cfa8ed4711610130578063e7a7ed02116100b8578063f14916d611610087578063f14916d6146109e2578063f2fde38b146109f5578063f851a44014610a08578063f8b823e414610a1b578063fe16564f14610a2457600080fd5b8063e7a7ed021461098f578063e8bf92ed146109a9578063eaeb077b146109bc578063edc41121146109cf57600080fd5b8063d939b315116100ff578063d939b3151461093e578063dbc1697614610958578063e0d1744114610960578063e11f3f1814610973578063e217cfd61461098657600080fd5b8063cfa8ed47146108ea578063d02103ca14610904578063d8d1091b14610917578063d8f54db01461092a57600080fd5b8063ab9fc5ef116101b3578063b6b0b09711610182578063b6b0b0971461088f578063c0cad302146108a9578063c0ed84e0146108bc578063c89e42df146108c4578063cf136306146108d757600080fd5b8063ab9fc5ef146107e3578063adc879e9146107ed578063afd23cbe14610807578063b4d63f581461082f57600080fd5b80639eb831b9116101ef5780639eb831b9146107a85780639f0d039d146107b0578063a3c573eb146107b8578063aa58bad6146107cb57600080fd5b806396dc3d391461076757806399f5634e1461077a5780639b796760146107825780639c9f3dfe1461079557600080fd5b80634a910e6a11610326578063715018a6116102ae578063837a47381161027d578063837a4738146106b1578063841b24d71461071f5780638b48931e146107395780638c4a0af7146107435780638da5cb5b1461075657600080fd5b8063715018a6146106705780637215541a1461067857806375c508b31461068b5780637fcb36531461069e57600080fd5b8063574f649e116102f5578063574f649e1461060457806360943d6a146106175780636b8616ce1461062a5780636ff512cc1461064a578063704b6c021461065d57600080fd5b80634a910e6a146105b65780635392c5e0146105c9578063542028d5146105e95780635437988d146105f157600080fd5b80632d0889d3116103a9578063423fa85611610378578063423fa85614610542578063456052671461055c578063458c0477146105765780634834a343146105895780634a1a89a71461059c57600080fd5b80632d0889d314610500578063383b3be814610509578063394218e91461051c5780633c1582671461052f57600080fd5b80631816b7e5116103e55780631816b7e51461048457806319d8ac6114610497578063220d7899146104c257806329878983146104d557600080fd5b80630eaa86ea14610417578063107bf28c1461043d57806310a01a721461045257806315064c9614610467575b600080fd5b61042a610425366004614b86565b610a37565b6040519081526020015b60405180910390f35b610445610c18565b6040516104349190614c33565b610465610460366004614c75565b610ca6565b005b6065546104749060ff1681565b6040519015158152602001610434565b610465610492366004614d02565b610ef0565b6068546104aa906001600160401b031681565b6040516001600160401b039091168152602001610434565b6104456104d0366004614d26565b611016565b606a546104e8906001600160a01b031681565b6040516001600160a01b039091168152602001610434565b61042a61ea6081565b610474610517366004614d73565b6111bc565b61046561052a366004614d73565b611203565b61046561053d366004614eb0565b611352565b6068546104aa90600160401b90046001600160401b031681565b6068546104aa90600160801b90046001600160401b031681565b6072546104aa906001600160401b031681565b610465610597366004614c75565b611b66565b6072546104aa90600160401b90046001600160401b031681565b6104656105c4366004614d73565b611eaf565b61042a6105d7366004614d73565b606d6020526000908152604090205481565b61044561214a565b6104656105ff366004614fdb565b612157565b61042a610612366004614ff8565b612181565b61046561062536600461506d565b6121c4565b61042a610638366004614d73565b60666020526000908152604090205481565b610465610658366004614fdb565b612534565b61046561066b366004614fdb565b6125b8565b610465612630565b610465610686366004614d73565b612644565b610465610699366004615144565b6128bc565b6069546104aa906001600160401b031681565b6106f46106bf3660046151e2565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610434565b6072546104aa90600160c01b90046001600160401b031681565b6104aa62093a8081565b610465610751366004615209565b61294b565b6033546001600160a01b03166104e8565b610465610775366004614d73565b6129c2565b61042a6129ed565b610465610790366004614d73565b612ad0565b6104656107a3366004614d73565b612b05565b61042a600c81565b60745461042a565b6070546104e8906001600160a01b031681565b6065546104aa9061010090046001600160401b031681565b6104aa6206978081565b606c546104aa90600160a81b90046001600160401b031681565b60655461081c90600160481b900461ffff1681565b60405161ffff9091168152602001610434565b61086a61083d366004614d73565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610434565b6065546104e890600160581b90046001600160a01b031681565b6104656108b7366004615226565b612c4b565b6104aa612c63565b6104656108d2366004615226565b612cb0565b6104656108e5366004614d73565b612d16565b6069546104e890600160401b90046001600160a01b031681565b606c546104e8906001600160a01b031681565b61046561092536600461525a565b612d97565b606c5461047490600160a01b900460ff1681565b6072546104aa90600160801b90046001600160401b031681565b610465613261565b61046561096e36600461534c565b61331d565b610465610981366004615144565b61338f565b6104aa6103e881565b6068546104aa90600160c01b90046001600160401b031681565b606b546104e8906001600160a01b031681565b6104656109ca366004615399565b6134d4565b6104656109dd366004614c75565b6137fc565b6104656109f0366004614fdb565b61391c565b610465610a03366004614fdb565b613994565b6073546104e8906001600160a01b031681565b61042a60745481565b610465610a323660046153dd565b613a0a565b6000806000610a44612c63565b90506001600160401b03881615610ae1576072546001600160401b039081169089161115610a8d5760405162461bcd60e51b8152600401610a8490615409565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610adb5760405162461bcd60e51b8152600401610a849061548c565b50610b4b565b6001600160401b0387166000908152606d6020526040902054915081610b195760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316876001600160401b03161115610b4b5760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316866001600160401b031611610b7c5760405162461bcd60e51b8152600401610a84906155ea565b6000610b8b8888888689611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051610bc0919061566d565b602060405180830381855afa158015610bdd573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c009190615689565b610c0a91906156b8565b9a9950505050505050505050565b606f8054610c25906156cc565b80601f0160208091040260200160405190810160405280929190818152602001828054610c51906156cc565b8015610c9e5780601f10610c7357610100808354040283529160200191610c9e565b820191906000526020600020905b815481529060010190602001808311610c8157829003601f168201915b505050505081565b610cae613a2c565b600080610cb9612c63565b90506001600160401b038a1615610d4d576072546001600160401b03908116908b161115610cf95760405162461bcd60e51b8152600401610a8490615409565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610d475760405162461bcd60e51b8152600401610a849061548c565b50610db7565b6001600160401b0389166000908152606d6020526040902054915081610d855760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316896001600160401b03161115610db75760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316886001600160401b031611610de85760405162461bcd60e51b8152600401610a84906155ea565b6000610df78a8a8a868b611016565b6069805467ffffffffffffffff19166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610e4557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610e8b57600080fd5b505af1158015610e9f573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610f1a5760405162461bcd60e51b8152600401610a8490615706565b6103e88161ffff16118015610f3457506104008161ffff16105b610fb95760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a4b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a401610a84565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b0380861660008181526067602052604080822054938816825290205460609291158061104857508115155b6110bc576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a84565b80611131576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a84565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b03828116600090815260716020526040812054909242926111f292600160801b9092048116911661575f565b6001600160401b0316111592915050565b6073546001600160a01b0316331461122d5760405162461bcd60e51b8152600401610a8490615706565b62093a806001600160401b03821611156112595760405162461bcd60e51b8152600401610a849061578a565b60655460ff166112fc576072546001600160401b03600160c01b9091048116908216106112fc5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a4b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a401610a84565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a19060200161100b565b60655460ff16156113755760405162461bcd60e51b8152600401610a84906157f5565b606954600160401b90046001600160a01b031633146113fc5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e6365720000000000006064820152608401610a84565b8051806114715760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e636520312062617463680000006064820152608401610a84565b6103e881106114ea576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e7920626174636865736064820152608401610a84565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561198a57600087828151811061153d5761153d61585d565b60200260200101519050600081606001516001600160401b031611156116f6578361156781615873565b94505060008160000151805190602001208260200151836060015160405160200161159493929190615899565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461163a5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d617463680000006064820152608401610a84565b81606001516001600160401b031682604001516001600160401b031610156116f05760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a401610a84565b5061187d565b6020810151158061177f5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916117399160040190815260200190565b6020604051808303816000875af1158015611758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177c9190615689565b15155b6117f15760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d7573742065786973740000000000006064820152608401610a84565b80515161ea601161187d5760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a401610a84565b856001600160401b031681604001516001600160401b0316101580156118b057504281604001516001600160401b031611155b6119225760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e67650000006064820152608401610a84565b805180516020918201208183015160408085015190516119499488949392913391016158bc565b604051602081830303815290604052805190602001209250848061196c90615873565b9550508060400151955050808061198290615900565b915050611521565b506068546001600160401b03600160c01b90910481169083161115611a0f5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b6064820152608401610a84565b606854600090611a2f90600160801b90046001600160401b031684615919565b611a42906001600160401b031687615941565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611b1790339030908490611afc9190615958565b606554600160581b90046001600160a01b0316929190613a86565b611b1f613af1565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b895760405162461bcd60e51b8152600401610a84906157f5565b6072546001600160401b038781166000908152606760205260409020600101544292611bc092600160c01b9091048116911661575f565b6001600160401b03161115611c495760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a401610a84565b6103e8611c568888615919565b6001600160401b031610611cd25760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e792062617463686573000000006064820152608401610a84565b611ce28888888888888888613b91565b611ceb86613e8e565b607254600160801b90046001600160401b0316600003611db3576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615611d5057607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d9657600080fd5b505af1158015611daa573d6000803e3d6000fd5b50505050611e64565b611dbb613af1565b607280546001600160401b0316906000611dd483615873565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611edc57506072546001600160401b03600160401b9091048116908216115b8015611ef757506072546001600160401b0390811690821611155b611f755760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a401610a84565b606a546001600160a01b0316331461201f57611f90816111bc565b61201f5760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a4b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a401610a84565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b1580156120dc57600080fd5b505af11580156120f0573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e846002015460405161213d91815260200190565b60405180910390a3505050565b606e8054610c25906156cc565b61215f613a2c565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b60008585805190602001208585856040516020016121a39594939291906158bc565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff16158080156121e45750600054600160ff909116105b806121fe5750303b1580156121fe575060005460ff166001145b6122615760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a84565b6000805460ff191660011790558015612284576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a8416179055607080549091169188169190911790556123016020860186614fdb565b607380546001600160a01b0319166001600160a01b03929092169190911790556123316060860160408701614fdb565b606980546001600160a01b0392909216600160401b02600160401b600160e01b031990921691909117905561236c60c0860160a08701614fdb565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa7113568490556123c960e0860160c08701614d73565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556124006040860160208701614d73565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561243c6080860160608701614d73565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b1990921691909117905561247860a0860160808701615209565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e6124a084826159bd565b50606f6124ad83826159bd565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124e3614074565b8015612529576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b0316331461255e5760405162461bcd60e51b8152600401610a8490615706565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161100b565b6073546001600160a01b031633146125e25760405162461bcd60e51b8152600401610a8490615706565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a19060200161100b565b612638613a2c565b61264260006140e4565b565b6033546001600160a01b031633146128b1576072546000906001600160401b03161561269557506072546001600160401b03908116600090815260716020526040902054600160401b9004166126a3565b506069546001600160401b03165b80826001600160401b0316116127215760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c7265616479207665726966696564000000006064820152608401610a84565b6068546001600160401b03600160401b90910481169083161180159061276357506001600160401b038083166000908152606760205260409020600101541615155b6127ee5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a401610a84565b6001600160401b03808316600090815260676020526040902060010154429161281c9162093a80911661575f565b6001600160401b031611156128af5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a4b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a401610a84565b505b6128b9614136565b50565b60655460ff16156128df5760405162461bcd60e51b8152600401610a84906157f5565b6128f08989898989898989896141a6565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1612529614136565b6073546001600160a01b031633146129755760405162461bcd60e51b8152600401610a8490615706565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061100b90831515815260200190565b6129ca613a2c565b6069805467ffffffffffffffff19166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a649190615689565b90506000612a70612c63565b6068546001600160401b03600160401b8204811691612aa091600160801b8204811691600160c01b900416615919565b612aaa919061575f565b612ab49190615919565b6001600160401b03169050612ac98183615a7c565b9250505090565b612ad8613a2c565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612b2f5760405162461bcd60e51b8152600401610a8490615706565b62093a806001600160401b0382161115612b5b5760405162461bcd60e51b8152600401610a849061578a565b60655460ff16612bf0576072546001600160401b03600160801b909104811690821610612bf05760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f776572006064820152608401610a84565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c759060200161100b565b612c53613a2c565b606f612c5f82826159bd565b5050565b6072546000906001600160401b031615612ca057506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612cda5760405162461bcd60e51b8152600401610a8490615706565b606e612ce682826159bd565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161100b9190614c33565b6073546001600160a01b03163314612d405760405162461bcd60e51b8152600401610a8490615706565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f9060200161100b565b60655460ff1615612dba5760405162461bcd60e51b8152600401610a84906157f5565b606c54600160a01b900460ff161515600114612de85760405162461bcd60e51b8152600401610a8490615a90565b805180612e4b5760405162461bcd60e51b815260206004820152603d6024820152600080516020615dac83398151915260448201527f3a204d75737420666f726365206174206c6561737420312062617463680000006064820152608401610a84565b6103e88110612ebc5760405162461bcd60e51b81526020600482015260436024820152600080516020615dac83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a401610a84565b6068546001600160401b03600160c01b8204811691612ee4918491600160801b900416615af9565b1115612f3e5760405162461bcd60e51b81526020600482015260356024820152600080516020615dac8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b6064820152608401610a84565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b8481101561316a576000868281518110612f8b57612f8b61585d565b602002602001015190508380612fa090615873565b945050600081600001518051906020012082602001518360400151604051602001612fcd93929190615899565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461306c5760405162461bcd60e51b81526020600482015260426024820152600080516020615dac83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a401610a84565b613077600188615941565b830361310c5742620697808360400151613091919061575f565b6001600160401b0316111561310c5760405162461bcd60e51b81526020600482015260476024820152600080516020615dac83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a401610a84565b815180516020918201208184015160405161312f938893929142913391016158bc565b604051602081830303815290604052805190602001209350858061315290615873565b9650505050808061316290615900565b915050612f6f565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166132835760405162461bcd60e51b8152600401610a8490615b11565b6073546001600160a01b031633146132ad5760405162461bcd60e51b8152600401610a8490615706565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156132fd57600080fd5b505af1158015613311573d6000803e3d6000fd5b50505050612642614821565b613325613a2c565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133b95760405162461bcd60e51b8152600401610a8490615b6e565b6133ca8989898989898989896141a6565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561341557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561345b57600080fd5b505af115801561346f573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff16156134f75760405162461bcd60e51b8152600401610a84906157f5565b606c54600160a01b900460ff1615156001146135255760405162461bcd60e51b8152600401610a8490615a90565b600061353060745490565b9050818111156135955760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b6064820152608401610a84565b61ea608351106136055760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a4b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b6064820152608401610a84565b60655461362490600160581b90046001600160a01b0316333084613a86565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa15801561366e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136929190615689565b60688054919250600160c01b9091046001600160401b03169060186136b683615873565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016136f793929190615899565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361379b57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26137f6565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516137ed93929190615bcb565b60405180910390a25b50505050565b606a546001600160a01b031633146138265760405162461bcd60e51b8152600401610a8490615b6e565b6138368888888888888888613b91565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561388157607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156138c757600080fd5b505af11580156138db573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e9d565b6073546001600160a01b031633146139465760405162461bcd60e51b8152600401610a8490615706565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca9060200161100b565b61399c613a2c565b6001600160a01b038116613a015760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a84565b6128b9816140e4565b613a12613a2c565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b031633146126425760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a84565b6040516001600160a01b03808516602483015283166044820152606481018290526137f69085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614878565b6072546001600160401b03600160401b820481169116111561264257607254600090613b2e90600160401b90046001600160401b0316600161575f565b9050613b39816111bc565b156128b957607254600090600290613b5b9084906001600160401b0316615919565b613b659190615bfe565b613b6f908361575f565b9050613b7a816111bc565b15613b8857612c5f81611eaf565b612c5f82611eaf565b600080613b9c612c63565b90506001600160401b038a1615613c30576072546001600160401b03908116908b161115613bdc5760405162461bcd60e51b8152600401610a8490615409565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c2a5760405162461bcd60e51b8152600401610a849061548c565b50613c9a565b6001600160401b0389166000908152606d6020526040902054915081613c685760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316896001600160401b03161115613c9a5760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316886001600160401b031611613ccb5760405162461bcd60e51b8152600401610a84906155ea565b6000613cda8a8a8a868b611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051613d0f919061566d565b602060405180830381855afa158015613d2c573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613d4f9190615689565b613d5991906156b8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613d9d918b918b918b9190600401615c24565b602060405180830381865afa158015613dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dde9190615c9e565b613e3d5760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20494e5660448201526920a624a22fa82927a7a360b11b6064820152608401610a84565b613e8033613e4b858d615919565b6001600160401b0316613e5c6129ed565b613e669190615958565b606554600160581b90046001600160a01b0316919061494f565b505050505050505050505050565b6000613e98612c63565b905081600080613ea88484615919565b6001600160401b031690505b836001600160401b0316836001600160401b031614613f5a576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613f04911642615941565b1115613f3f576001810154613f2990600160401b90046001600160401b031686615919565b613f3c906001600160401b031684615af9565b92505b60010154600160401b90046001600160401b03169250613eb4565b6000613f668383615941565b905082811015613fe0576000613f7c8285615941565b9050600c8111613f8c5780613f8f565b600c5b9050613f9c816003615958565b613fa790600a615d9f565b606554613fc0908390600160481b900461ffff16615d9f565b607454613fcd9190615958565b613fd79190615a7c565b6074555061406c565b6000613fec8483615941565b9050600c8111613ffc5780613fff565b600c5b9050600061400e826003615958565b61401990600a615d9f565b606554614032908490600160481b900461ffff16615d9f565b60745461403f9190615958565b6140499190615a7c565b90508060745460745461405c9190615958565b6140669190615a7c565b60745550505b505050505050565b600054610100900460ff166140df5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a84565b612642335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561418657600080fd5b505af115801561419a573d6000803e3d6000fd5b5050505061264261497f565b60006001600160401b038a1615614321576072546001600160401b03908116908b1611156142655760405162461bcd60e51b815260206004820152606c6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c401610a84565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b909204161461431b5760405162461bcd60e51b81526020600482015260606024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a401610a84565b50614475565b506001600160401b0387166000908152606d6020526040902054806143c25760405162461bcd60e51b81526020600482015260576024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a401610a84565b6069546001600160401b0390811690891611156144755760405162461bcd60e51b81526020600482015260716024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c401610a84565b6072546001600160401b03908116908a16118015906144a55750896001600160401b0316896001600160401b0316115b80156144c657506072546001600160401b03600160401b9091048116908a16115b61453e5760405162461bcd60e51b815260206004820152604f6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a401610a84565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146145fe5760405162461bcd60e51b815260206004820152606a6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c401610a84565b600061460d898989858a611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051614642919061566d565b602060405180830381855afa15801561465f573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906146829190615689565b61468c91906156b8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916146d0918a918a918a9190600401615c24565b602060405180830381865afa1580156146ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147119190615c9e565b6147715760405162461bcd60e51b815260206004820152603e6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20494e56414c49445f50524f4f4600006064820152608401610a84565b6001600160401b038b16600090815260716020526040902060020154879003613e805760405162461bcd60e51b81526020600482015260626024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c401610a84565b60655460ff166148435760405162461bcd60e51b8152600401610a8490615b11565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006148cd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166149da9092919063ffffffff16565b80519091501561494a57808060200190518101906148eb9190615c9e565b61494a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a84565b505050565b6040516001600160a01b03831660248201526044810182905261494a90849063a9059cbb60e01b90606401613aba565b60655460ff16156149a25760405162461bcd60e51b8152600401610a84906157f5565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60606149e984846000856149f1565b949350505050565b606082471015614a525760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a84565b600080866001600160a01b03168587604051614a6e919061566d565b60006040518083038185875af1925050503d8060008114614aab576040519150601f19603f3d011682016040523d82523d6000602084013e614ab0565b606091505b5091509150614ac187838387614acc565b979650505050505050565b60608315614b3b578251600003614b34576001600160a01b0385163b614b345760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a84565b50816149e9565b6149e98383815115614b505781518083602001fd5b8060405162461bcd60e51b8152600401610a849190614c33565b80356001600160401b0381168114614b8157600080fd5b919050565b600080600080600060a08688031215614b9e57600080fd5b614ba786614b6a565b9450614bb560208701614b6a565b9350614bc360408701614b6a565b94979396509394606081013594506080013592915050565b60005b83811015614bf6578181015183820152602001614bde565b838111156137f65750506000910152565b60008151808452614c1f816020860160208601614bdb565b601f01601f19169290920160200192915050565b602081526000614c466020830184614c07565b9392505050565b8060408101831015614c5e57600080fd5b92915050565b8060808101831015614c5e57600080fd5b6000806000806000806000806101a0898b031215614c9257600080fd5b614c9b89614b6a565b9750614ca960208a01614b6a565b9650614cb760408a01614b6a565b95506060890135945060808901359350614cd48a60a08b01614c4d565b9250614ce38a60e08b01614c64565b9150614cf38a6101608b01614c4d565b90509295985092959890939650565b600060208284031215614d1457600080fd5b813561ffff81168114614c4657600080fd5b600080600080600060a08688031215614d3e57600080fd5b614d4786614b6a565b9450614d5560208701614b6a565b94979496505050506040830135926060810135926080909101359150565b600060208284031215614d8557600080fd5b614c4682614b6a565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614dc657614dc6614d8e565b60405290565b604051606081016001600160401b0381118282101715614dc657614dc6614d8e565b604051601f8201601f191681016001600160401b0381118282101715614e1657614e16614d8e565b604052919050565b60006001600160401b03821115614e3757614e37614d8e565b5060051b60200190565b600082601f830112614e5257600080fd5b81356001600160401b03811115614e6b57614e6b614d8e565b614e7e601f8201601f1916602001614dee565b818152846020838601011115614e9357600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614ec357600080fd5b82356001600160401b0380821115614eda57600080fd5b818501915085601f830112614eee57600080fd5b8135614f01614efc82614e1e565b614dee565b81815260059190911b83018401908481019088831115614f2057600080fd5b8585015b83811015614fb957803585811115614f3c5760008081fd5b86016080818c03601f1901811315614f545760008081fd5b614f5c614da4565b8983013588811115614f6e5760008081fd5b614f7c8e8c83870101614e41565b8252506040808401358b8301526060614f96818601614b6a565b82840152614fa5848601614b6a565b908301525085525050918601918601614f24565b5098975050505050505050565b6001600160a01b03811681146128b957600080fd5b600060208284031215614fed57600080fd5b8135614c4681614fc6565b600080600080600060a0868803121561501057600080fd5b8535945060208601356001600160401b0381111561502d57600080fd5b61503988828901614e41565b9450506040860135925061504f60608701614b6a565b9150608086013561505f81614fc6565b809150509295509295909350565b600080600080600080600080888a036101c081121561508b57600080fd5b893561509681614fc6565b985060208a01356150a681614fc6565b975060408a01356150b681614fc6565b965060608a01356150c681614fc6565b955060e0607f19820112156150da57600080fd5b5060808901935061016089013592506101808901356001600160401b038082111561510457600080fd5b6151108c838d01614e41565b93506101a08b013591508082111561512757600080fd5b506151348b828c01614e41565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c03121561516357600080fd5b61516c8a614b6a565b985061517a60208b01614b6a565b975061518860408b01614b6a565b965061519660608b01614b6a565b955060808a0135945060a08a013593506151b38b60c08c01614c4d565b92506151c38b6101008c01614c64565b91506151d38b6101808c01614c4d565b90509295985092959850929598565b6000602082840312156151f457600080fd5b5035919050565b80151581146128b957600080fd5b60006020828403121561521b57600080fd5b8135614c46816151fb565b60006020828403121561523857600080fd5b81356001600160401b0381111561524e57600080fd5b6149e984828501614e41565b6000602080838503121561526d57600080fd5b82356001600160401b038082111561528457600080fd5b818501915085601f83011261529857600080fd5b81356152a6614efc82614e1e565b81815260059190911b830184019084810190888311156152c557600080fd5b8585015b83811015614fb9578035858111156152e15760008081fd5b86016060818c03601f19018113156152f95760008081fd5b615301614dcc565b89830135888111156153135760008081fd5b6153218e8c83870101614e41565b8252506040808401358b830152615339838501614b6a565b90820152855250509186019186016152c9565b6000806000806080858703121561536257600080fd5b61536b85614b6a565b93506020850135925061538060408601614b6a565b915061538e60608601614b6a565b905092959194509250565b600080604083850312156153ac57600080fd5b82356001600160401b038111156153c257600080fd5b6153ce85828601614e41565b95602094909401359450505050565b600080604083850312156153f057600080fd5b8235915061540060208401614b6a565b90509250929050565b60208082526058908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2070656e60408201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560608201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608082015260a00190565b6020808252604c908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760608201526b040e6e8c2e8ca40c4c2e8c6d60a31b608082015260a00190565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786060820152621a5cdd60ea1b608082015260a00190565b6020808252605d908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060608201527f7468616e2063757272656e744c61737456657269666965644261746368000000608082015260a00190565b60208082526057908201527f506f6c79676f6e5a4b45564d3a3a766572696679426174636865733a2066696e60408201527f616c4e65774261746368206d75737420626520626967676572207468616e206360608201527f757272656e744c61737456657269666965644261746368000000000000000000608082015260a00190565b6000825161567f818460208701614bdb565b9190910192915050565b60006020828403121561569b57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826156c7576156c76156a2565b500690565b600181811c908216806156e057607f821691505b60208210810361570057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561578157615781615749565b01949350505050565b60208082526045908201527f506f6c79676f6e5a4b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361588f5761588f615749565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b60006001820161591257615912615749565b5060010190565b60006001600160401b038381169083168181101561593957615939615749565b039392505050565b60008282101561595357615953615749565b500390565b600081600019048311821515161561597257615972615749565b500290565b601f82111561494a57600081815260208120601f850160051c8101602086101561599e5750805b601f850160051c820191505b8181101561406c578281556001016159aa565b81516001600160401b038111156159d6576159d6614d8e565b6159ea816159e484546156cc565b84615977565b602080601f831160018114615a1f5760008415615a075750858301515b600019600386901b1c1916600185901b17855561406c565b600085815260208120601f198616915b82811015615a4e57888601518255948401946001909101908401615a2f565b5085821015615a6c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615a8b57615a8b6156a2565b500490565b60208082526043908201527f506f6c79676f6e5a4b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b60008219821115615b0c57615b0c615749565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a4b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b0383166020820152606060408201819052600090615bf590830184614c07565b95945050505050565b60006001600160401b0380841680615c1857615c186156a2565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615c5c57848483379084018281529284019290600101615c3c565b5050828760c0870137610100850181815286935091505b6001811015615c92578251825260209283019290910190600101615c73565b50505095945050505050565b600060208284031215615cb057600080fd5b8151614c46816151fb565b600181815b80851115615cf6578160001904821115615cdc57615cdc615749565b80851615615ce957918102915b93841c9390800290615cc0565b509250929050565b600082615d0d57506001614c5e565b81615d1a57506000614c5e565b8160018114615d305760028114615d3a57615d56565b6001915050614c5e565b60ff841115615d4b57615d4b615749565b50506001821b614c5e565b5060208310610133831016604e8410600b8410161715615d79575081810a614c5e565b615d838383615cbb565b8060001904821115615d9757615d97615749565b029392505050565b6000614c468383615cfe56fe506f6c79676f6e5a4b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a4b45564d3a3a70726f76654e6f6e44657465726d696e6973a2646970667358221220ba301bd4477ec503319b36f4ba30580c96f2340c94e9f0b3b12710f403d0c1f064736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50615e2180620000216000396000f3fe608060405234801561001057600080fd5b50600436106104125760003560e01c806396dc3d3911610220578063cfa8ed4711610130578063e7a7ed02116100b8578063f14916d611610087578063f14916d6146109e2578063f2fde38b146109f5578063f851a44014610a08578063f8b823e414610a1b578063fe16564f14610a2457600080fd5b8063e7a7ed021461098f578063e8bf92ed146109a9578063eaeb077b146109bc578063edc41121146109cf57600080fd5b8063d939b315116100ff578063d939b3151461093e578063dbc1697614610958578063e0d1744114610960578063e11f3f1814610973578063e217cfd61461098657600080fd5b8063cfa8ed47146108ea578063d02103ca14610904578063d8d1091b14610917578063d8f54db01461092a57600080fd5b8063ab9fc5ef116101b3578063b6b0b09711610182578063b6b0b0971461088f578063c0cad302146108a9578063c0ed84e0146108bc578063c89e42df146108c4578063cf136306146108d757600080fd5b8063ab9fc5ef146107e3578063adc879e9146107ed578063afd23cbe14610807578063b4d63f581461082f57600080fd5b80639eb831b9116101ef5780639eb831b9146107a85780639f0d039d146107b0578063a3c573eb146107b8578063aa58bad6146107cb57600080fd5b806396dc3d391461076757806399f5634e1461077a5780639b796760146107825780639c9f3dfe1461079557600080fd5b80634a910e6a11610326578063715018a6116102ae578063837a47381161027d578063837a4738146106b1578063841b24d71461071f5780638b48931e146107395780638c4a0af7146107435780638da5cb5b1461075657600080fd5b8063715018a6146106705780637215541a1461067857806375c508b31461068b5780637fcb36531461069e57600080fd5b8063574f649e116102f5578063574f649e1461060457806360943d6a146106175780636b8616ce1461062a5780636ff512cc1461064a578063704b6c021461065d57600080fd5b80634a910e6a146105b65780635392c5e0146105c9578063542028d5146105e95780635437988d146105f157600080fd5b80632d0889d3116103a9578063423fa85611610378578063423fa85614610542578063456052671461055c578063458c0477146105765780634834a343146105895780634a1a89a71461059c57600080fd5b80632d0889d314610500578063383b3be814610509578063394218e91461051c5780633c1582671461052f57600080fd5b80631816b7e5116103e55780631816b7e51461048457806319d8ac6114610497578063220d7899146104c257806329878983146104d557600080fd5b80630eaa86ea14610417578063107bf28c1461043d57806310a01a721461045257806315064c9614610467575b600080fd5b61042a610425366004614b86565b610a37565b6040519081526020015b60405180910390f35b610445610c18565b6040516104349190614c33565b610465610460366004614c75565b610ca6565b005b6065546104749060ff1681565b6040519015158152602001610434565b610465610492366004614d02565b610ef0565b6068546104aa906001600160401b031681565b6040516001600160401b039091168152602001610434565b6104456104d0366004614d26565b611016565b606a546104e8906001600160a01b031681565b6040516001600160a01b039091168152602001610434565b61042a61ea6081565b610474610517366004614d73565b6111bc565b61046561052a366004614d73565b611203565b61046561053d366004614eb0565b611352565b6068546104aa90600160401b90046001600160401b031681565b6068546104aa90600160801b90046001600160401b031681565b6072546104aa906001600160401b031681565b610465610597366004614c75565b611b66565b6072546104aa90600160401b90046001600160401b031681565b6104656105c4366004614d73565b611eaf565b61042a6105d7366004614d73565b606d6020526000908152604090205481565b61044561214a565b6104656105ff366004614fdb565b612157565b61042a610612366004614ff8565b612181565b61046561062536600461506d565b6121c4565b61042a610638366004614d73565b60666020526000908152604090205481565b610465610658366004614fdb565b612534565b61046561066b366004614fdb565b6125b8565b610465612630565b610465610686366004614d73565b612644565b610465610699366004615144565b6128bc565b6069546104aa906001600160401b031681565b6106f46106bf3660046151e2565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610434565b6072546104aa90600160c01b90046001600160401b031681565b6104aa62093a8081565b610465610751366004615209565b61294b565b6033546001600160a01b03166104e8565b610465610775366004614d73565b6129c2565b61042a6129ed565b610465610790366004614d73565b612ad0565b6104656107a3366004614d73565b612b05565b61042a600c81565b60745461042a565b6070546104e8906001600160a01b031681565b6065546104aa9061010090046001600160401b031681565b6104aa6206978081565b606c546104aa90600160a81b90046001600160401b031681565b60655461081c90600160481b900461ffff1681565b60405161ffff9091168152602001610434565b61086a61083d366004614d73565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610434565b6065546104e890600160581b90046001600160a01b031681565b6104656108b7366004615226565b612c4b565b6104aa612c63565b6104656108d2366004615226565b612cb0565b6104656108e5366004614d73565b612d16565b6069546104e890600160401b90046001600160a01b031681565b606c546104e8906001600160a01b031681565b61046561092536600461525a565b612d97565b606c5461047490600160a01b900460ff1681565b6072546104aa90600160801b90046001600160401b031681565b610465613261565b61046561096e36600461534c565b61331d565b610465610981366004615144565b61338f565b6104aa6103e881565b6068546104aa90600160c01b90046001600160401b031681565b606b546104e8906001600160a01b031681565b6104656109ca366004615399565b6134d4565b6104656109dd366004614c75565b6137fc565b6104656109f0366004614fdb565b61391c565b610465610a03366004614fdb565b613994565b6073546104e8906001600160a01b031681565b61042a60745481565b610465610a323660046153dd565b613a0a565b6000806000610a44612c63565b90506001600160401b03881615610ae1576072546001600160401b039081169089161115610a8d5760405162461bcd60e51b8152600401610a8490615409565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610adb5760405162461bcd60e51b8152600401610a849061548c565b50610b4b565b6001600160401b0387166000908152606d6020526040902054915081610b195760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316876001600160401b03161115610b4b5760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316866001600160401b031611610b7c5760405162461bcd60e51b8152600401610a84906155ea565b6000610b8b8888888689611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051610bc0919061566d565b602060405180830381855afa158015610bdd573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c009190615689565b610c0a91906156b8565b9a9950505050505050505050565b606f8054610c25906156cc565b80601f0160208091040260200160405190810160405280929190818152602001828054610c51906156cc565b8015610c9e5780601f10610c7357610100808354040283529160200191610c9e565b820191906000526020600020905b815481529060010190602001808311610c8157829003601f168201915b505050505081565b610cae613a2c565b600080610cb9612c63565b90506001600160401b038a1615610d4d576072546001600160401b03908116908b161115610cf95760405162461bcd60e51b8152600401610a8490615409565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610d475760405162461bcd60e51b8152600401610a849061548c565b50610db7565b6001600160401b0389166000908152606d6020526040902054915081610d855760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316896001600160401b03161115610db75760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316886001600160401b031611610de85760405162461bcd60e51b8152600401610a84906155ea565b6000610df78a8a8a868b611016565b6069805467ffffffffffffffff19166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610e4557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610e8b57600080fd5b505af1158015610e9f573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610f1a5760405162461bcd60e51b8152600401610a8490615706565b6103e88161ffff16118015610f3457506104008161ffff16105b610fb95760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a401610a84565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b0380861660008181526067602052604080822054938816825290205460609291158061104857508115155b6110bc576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a84565b80611131576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a84565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b03828116600090815260716020526040812054909242926111f292600160801b9092048116911661575f565b6001600160401b0316111592915050565b6073546001600160a01b0316331461122d5760405162461bcd60e51b8152600401610a8490615706565b62093a806001600160401b03821611156112595760405162461bcd60e51b8152600401610a849061578a565b60655460ff166112fc576072546001600160401b03600160c01b9091048116908216106112fc5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a401610a84565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a19060200161100b565b60655460ff16156113755760405162461bcd60e51b8152600401610a84906157f5565b606954600160401b90046001600160a01b031633146113fc5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e6365720000000000006064820152608401610a84565b8051806114715760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e636520312062617463680000006064820152608401610a84565b6103e881106114ea576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e7920626174636865736064820152608401610a84565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561198a57600087828151811061153d5761153d61585d565b60200260200101519050600081606001516001600160401b031611156116f6578361156781615873565b94505060008160000151805190602001208260200151836060015160405160200161159493929190615899565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461163a5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d617463680000006064820152608401610a84565b81606001516001600160401b031682604001516001600160401b031610156116f05760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a401610a84565b5061187d565b6020810151158061177f5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916117399160040190815260200190565b6020604051808303816000875af1158015611758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177c9190615689565b15155b6117f15760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d7573742065786973740000000000006064820152608401610a84565b80515161ea601161187d5760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a401610a84565b856001600160401b031681604001516001600160401b0316101580156118b057504281604001516001600160401b031611155b6119225760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e67650000006064820152608401610a84565b805180516020918201208183015160408085015190516119499488949392913391016158bc565b604051602081830303815290604052805190602001209250848061196c90615873565b9550508060400151955050808061198290615900565b915050611521565b506068546001600160401b03600160c01b90910481169083161115611a0f5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b6064820152608401610a84565b606854600090611a2f90600160801b90046001600160401b031684615919565b611a42906001600160401b031687615941565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611b1790339030908490611afc9190615958565b606554600160581b90046001600160a01b0316929190613a86565b611b1f613af1565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b895760405162461bcd60e51b8152600401610a84906157f5565b6072546001600160401b038781166000908152606760205260409020600101544292611bc092600160c01b9091048116911661575f565b6001600160401b03161115611c495760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a401610a84565b6103e8611c568888615919565b6001600160401b031610611cd25760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e792062617463686573000000006064820152608401610a84565b611ce28888888888888888613b91565b611ceb86613e8e565b607254600160801b90046001600160401b0316600003611db3576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615611d5057607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d9657600080fd5b505af1158015611daa573d6000803e3d6000fd5b50505050611e64565b611dbb613af1565b607280546001600160401b0316906000611dd483615873565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611edc57506072546001600160401b03600160401b9091048116908216115b8015611ef757506072546001600160401b0390811690821611155b611f755760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a401610a84565b606a546001600160a01b0316331461201f57611f90816111bc565b61201f5760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a401610a84565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b1580156120dc57600080fd5b505af11580156120f0573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e846002015460405161213d91815260200190565b60405180910390a3505050565b606e8054610c25906156cc565b61215f613a2c565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b60008585805190602001208585856040516020016121a39594939291906158bc565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff16158080156121e45750600054600160ff909116105b806121fe5750303b1580156121fe575060005460ff166001145b6122615760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a84565b6000805460ff191660011790558015612284576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a8416179055607080549091169188169190911790556123016020860186614fdb565b607380546001600160a01b0319166001600160a01b03929092169190911790556123316060860160408701614fdb565b606980546001600160a01b0392909216600160401b02600160401b600160e01b031990921691909117905561236c60c0860160a08701614fdb565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa7113568490556123c960e0860160c08701614d73565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556124006040860160208701614d73565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561243c6080860160608701614d73565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b1990921691909117905561247860a0860160808701615209565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e6124a084826159bd565b50606f6124ad83826159bd565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124e3614074565b8015612529576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b0316331461255e5760405162461bcd60e51b8152600401610a8490615706565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161100b565b6073546001600160a01b031633146125e25760405162461bcd60e51b8152600401610a8490615706565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a19060200161100b565b612638613a2c565b61264260006140e4565b565b6033546001600160a01b031633146128b1576072546000906001600160401b03161561269557506072546001600160401b03908116600090815260716020526040902054600160401b9004166126a3565b506069546001600160401b03165b80826001600160401b0316116127215760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c7265616479207665726966696564000000006064820152608401610a84565b6068546001600160401b03600160401b90910481169083161180159061276357506001600160401b038083166000908152606760205260409020600101541615155b6127ee5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a401610a84565b6001600160401b03808316600090815260676020526040902060010154429161281c9162093a80911661575f565b6001600160401b031611156128af5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a401610a84565b505b6128b9614136565b50565b60655460ff16156128df5760405162461bcd60e51b8152600401610a84906157f5565b6128f08989898989898989896141a6565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1612529614136565b6073546001600160a01b031633146129755760405162461bcd60e51b8152600401610a8490615706565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061100b90831515815260200190565b6129ca613a2c565b6069805467ffffffffffffffff19166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a649190615689565b90506000612a70612c63565b6068546001600160401b03600160401b8204811691612aa091600160801b8204811691600160c01b900416615919565b612aaa919061575f565b612ab49190615919565b6001600160401b03169050612ac98183615a7c565b9250505090565b612ad8613a2c565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612b2f5760405162461bcd60e51b8152600401610a8490615706565b62093a806001600160401b0382161115612b5b5760405162461bcd60e51b8152600401610a849061578a565b60655460ff16612bf0576072546001600160401b03600160801b909104811690821610612bf05760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f776572006064820152608401610a84565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c759060200161100b565b612c53613a2c565b606f612c5f82826159bd565b5050565b6072546000906001600160401b031615612ca057506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612cda5760405162461bcd60e51b8152600401610a8490615706565b606e612ce682826159bd565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161100b9190614c33565b6073546001600160a01b03163314612d405760405162461bcd60e51b8152600401610a8490615706565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f9060200161100b565b60655460ff1615612dba5760405162461bcd60e51b8152600401610a84906157f5565b606c54600160a01b900460ff161515600114612de85760405162461bcd60e51b8152600401610a8490615a90565b805180612e4b5760405162461bcd60e51b815260206004820152603d6024820152600080516020615dac83398151915260448201527f3a204d75737420666f726365206174206c6561737420312062617463680000006064820152608401610a84565b6103e88110612ebc5760405162461bcd60e51b81526020600482015260436024820152600080516020615dac83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a401610a84565b6068546001600160401b03600160c01b8204811691612ee4918491600160801b900416615af9565b1115612f3e5760405162461bcd60e51b81526020600482015260356024820152600080516020615dac8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b6064820152608401610a84565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b8481101561316a576000868281518110612f8b57612f8b61585d565b602002602001015190508380612fa090615873565b945050600081600001518051906020012082602001518360400151604051602001612fcd93929190615899565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461306c5760405162461bcd60e51b81526020600482015260426024820152600080516020615dac83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a401610a84565b613077600188615941565b830361310c5742620697808360400151613091919061575f565b6001600160401b0316111561310c5760405162461bcd60e51b81526020600482015260476024820152600080516020615dac83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a401610a84565b815180516020918201208184015160405161312f938893929142913391016158bc565b604051602081830303815290604052805190602001209350858061315290615873565b9650505050808061316290615900565b915050612f6f565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166132835760405162461bcd60e51b8152600401610a8490615b11565b6073546001600160a01b031633146132ad5760405162461bcd60e51b8152600401610a8490615706565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156132fd57600080fd5b505af1158015613311573d6000803e3d6000fd5b50505050612642614821565b613325613a2c565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133b95760405162461bcd60e51b8152600401610a8490615b6e565b6133ca8989898989898989896141a6565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561341557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561345b57600080fd5b505af115801561346f573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff16156134f75760405162461bcd60e51b8152600401610a84906157f5565b606c54600160a01b900460ff1615156001146135255760405162461bcd60e51b8152600401610a8490615a90565b600061353060745490565b9050818111156135955760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b6064820152608401610a84565b61ea608351106136055760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b6064820152608401610a84565b60655461362490600160581b90046001600160a01b0316333084613a86565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa15801561366e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136929190615689565b60688054919250600160c01b9091046001600160401b03169060186136b683615873565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016136f793929190615899565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361379b57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26137f6565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516137ed93929190615bcb565b60405180910390a25b50505050565b606a546001600160a01b031633146138265760405162461bcd60e51b8152600401610a8490615b6e565b6138368888888888888888613b91565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561388157607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156138c757600080fd5b505af11580156138db573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e9d565b6073546001600160a01b031633146139465760405162461bcd60e51b8152600401610a8490615706565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca9060200161100b565b61399c613a2c565b6001600160a01b038116613a015760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a84565b6128b9816140e4565b613a12613a2c565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b031633146126425760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a84565b6040516001600160a01b03808516602483015283166044820152606481018290526137f69085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614878565b6072546001600160401b03600160401b820481169116111561264257607254600090613b2e90600160401b90046001600160401b0316600161575f565b9050613b39816111bc565b156128b957607254600090600290613b5b9084906001600160401b0316615919565b613b659190615bfe565b613b6f908361575f565b9050613b7a816111bc565b15613b8857612c5f81611eaf565b612c5f82611eaf565b600080613b9c612c63565b90506001600160401b038a1615613c30576072546001600160401b03908116908b161115613bdc5760405162461bcd60e51b8152600401610a8490615409565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c2a5760405162461bcd60e51b8152600401610a849061548c565b50613c9a565b6001600160401b0389166000908152606d6020526040902054915081613c685760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316896001600160401b03161115613c9a5760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316886001600160401b031611613ccb5760405162461bcd60e51b8152600401610a84906155ea565b6000613cda8a8a8a868b611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051613d0f919061566d565b602060405180830381855afa158015613d2c573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613d4f9190615689565b613d5991906156b8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613d9d918b918b918b9190600401615c24565b602060405180830381865afa158015613dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dde9190615c9e565b613e3d5760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20494e5660448201526920a624a22fa82927a7a360b11b6064820152608401610a84565b613e8033613e4b858d615919565b6001600160401b0316613e5c6129ed565b613e669190615958565b606554600160581b90046001600160a01b0316919061494f565b505050505050505050505050565b6000613e98612c63565b905081600080613ea88484615919565b6001600160401b031690505b836001600160401b0316836001600160401b031614613f5a576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613f04911642615941565b1115613f3f576001810154613f2990600160401b90046001600160401b031686615919565b613f3c906001600160401b031684615af9565b92505b60010154600160401b90046001600160401b03169250613eb4565b6000613f668383615941565b905082811015613fe0576000613f7c8285615941565b9050600c8111613f8c5780613f8f565b600c5b9050613f9c816003615958565b613fa790600a615d9f565b606554613fc0908390600160481b900461ffff16615d9f565b607454613fcd9190615958565b613fd79190615a7c565b6074555061406c565b6000613fec8483615941565b9050600c8111613ffc5780613fff565b600c5b9050600061400e826003615958565b61401990600a615d9f565b606554614032908490600160481b900461ffff16615d9f565b60745461403f9190615958565b6140499190615a7c565b90508060745460745461405c9190615958565b6140669190615a7c565b60745550505b505050505050565b600054610100900460ff166140df5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a84565b612642335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561418657600080fd5b505af115801561419a573d6000803e3d6000fd5b5050505061264261497f565b60006001600160401b038a1615614321576072546001600160401b03908116908b1611156142655760405162461bcd60e51b815260206004820152606c6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c401610a84565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b909204161461431b5760405162461bcd60e51b81526020600482015260606024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a401610a84565b50614475565b506001600160401b0387166000908152606d6020526040902054806143c25760405162461bcd60e51b81526020600482015260576024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a401610a84565b6069546001600160401b0390811690891611156144755760405162461bcd60e51b81526020600482015260716024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c401610a84565b6072546001600160401b03908116908a16118015906144a55750896001600160401b0316896001600160401b0316115b80156144c657506072546001600160401b03600160401b9091048116908a16115b61453e5760405162461bcd60e51b815260206004820152604f6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a401610a84565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146145fe5760405162461bcd60e51b815260206004820152606a6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c401610a84565b600061460d898989858a611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051614642919061566d565b602060405180830381855afa15801561465f573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906146829190615689565b61468c91906156b8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916146d0918a918a918a9190600401615c24565b602060405180830381865afa1580156146ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147119190615c9e565b6147715760405162461bcd60e51b815260206004820152603e6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20494e56414c49445f50524f4f4600006064820152608401610a84565b6001600160401b038b16600090815260716020526040902060020154879003613e805760405162461bcd60e51b81526020600482015260626024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c401610a84565b60655460ff166148435760405162461bcd60e51b8152600401610a8490615b11565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006148cd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166149da9092919063ffffffff16565b80519091501561494a57808060200190518101906148eb9190615c9e565b61494a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a84565b505050565b6040516001600160a01b03831660248201526044810182905261494a90849063a9059cbb60e01b90606401613aba565b60655460ff16156149a25760405162461bcd60e51b8152600401610a84906157f5565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60606149e984846000856149f1565b949350505050565b606082471015614a525760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a84565b600080866001600160a01b03168587604051614a6e919061566d565b60006040518083038185875af1925050503d8060008114614aab576040519150601f19603f3d011682016040523d82523d6000602084013e614ab0565b606091505b5091509150614ac187838387614acc565b979650505050505050565b60608315614b3b578251600003614b34576001600160a01b0385163b614b345760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a84565b50816149e9565b6149e98383815115614b505781518083602001fd5b8060405162461bcd60e51b8152600401610a849190614c33565b80356001600160401b0381168114614b8157600080fd5b919050565b600080600080600060a08688031215614b9e57600080fd5b614ba786614b6a565b9450614bb560208701614b6a565b9350614bc360408701614b6a565b94979396509394606081013594506080013592915050565b60005b83811015614bf6578181015183820152602001614bde565b838111156137f65750506000910152565b60008151808452614c1f816020860160208601614bdb565b601f01601f19169290920160200192915050565b602081526000614c466020830184614c07565b9392505050565b8060408101831015614c5e57600080fd5b92915050565b8060808101831015614c5e57600080fd5b6000806000806000806000806101a0898b031215614c9257600080fd5b614c9b89614b6a565b9750614ca960208a01614b6a565b9650614cb760408a01614b6a565b95506060890135945060808901359350614cd48a60a08b01614c4d565b9250614ce38a60e08b01614c64565b9150614cf38a6101608b01614c4d565b90509295985092959890939650565b600060208284031215614d1457600080fd5b813561ffff81168114614c4657600080fd5b600080600080600060a08688031215614d3e57600080fd5b614d4786614b6a565b9450614d5560208701614b6a565b94979496505050506040830135926060810135926080909101359150565b600060208284031215614d8557600080fd5b614c4682614b6a565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614dc657614dc6614d8e565b60405290565b604051606081016001600160401b0381118282101715614dc657614dc6614d8e565b604051601f8201601f191681016001600160401b0381118282101715614e1657614e16614d8e565b604052919050565b60006001600160401b03821115614e3757614e37614d8e565b5060051b60200190565b600082601f830112614e5257600080fd5b81356001600160401b03811115614e6b57614e6b614d8e565b614e7e601f8201601f1916602001614dee565b818152846020838601011115614e9357600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614ec357600080fd5b82356001600160401b0380821115614eda57600080fd5b818501915085601f830112614eee57600080fd5b8135614f01614efc82614e1e565b614dee565b81815260059190911b83018401908481019088831115614f2057600080fd5b8585015b83811015614fb957803585811115614f3c5760008081fd5b86016080818c03601f1901811315614f545760008081fd5b614f5c614da4565b8983013588811115614f6e5760008081fd5b614f7c8e8c83870101614e41565b8252506040808401358b8301526060614f96818601614b6a565b82840152614fa5848601614b6a565b908301525085525050918601918601614f24565b5098975050505050505050565b6001600160a01b03811681146128b957600080fd5b600060208284031215614fed57600080fd5b8135614c4681614fc6565b600080600080600060a0868803121561501057600080fd5b8535945060208601356001600160401b0381111561502d57600080fd5b61503988828901614e41565b9450506040860135925061504f60608701614b6a565b9150608086013561505f81614fc6565b809150509295509295909350565b600080600080600080600080888a036101c081121561508b57600080fd5b893561509681614fc6565b985060208a01356150a681614fc6565b975060408a01356150b681614fc6565b965060608a01356150c681614fc6565b955060e0607f19820112156150da57600080fd5b5060808901935061016089013592506101808901356001600160401b038082111561510457600080fd5b6151108c838d01614e41565b93506101a08b013591508082111561512757600080fd5b506151348b828c01614e41565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c03121561516357600080fd5b61516c8a614b6a565b985061517a60208b01614b6a565b975061518860408b01614b6a565b965061519660608b01614b6a565b955060808a0135945060a08a013593506151b38b60c08c01614c4d565b92506151c38b6101008c01614c64565b91506151d38b6101808c01614c4d565b90509295985092959850929598565b6000602082840312156151f457600080fd5b5035919050565b80151581146128b957600080fd5b60006020828403121561521b57600080fd5b8135614c46816151fb565b60006020828403121561523857600080fd5b81356001600160401b0381111561524e57600080fd5b6149e984828501614e41565b6000602080838503121561526d57600080fd5b82356001600160401b038082111561528457600080fd5b818501915085601f83011261529857600080fd5b81356152a6614efc82614e1e565b81815260059190911b830184019084810190888311156152c557600080fd5b8585015b83811015614fb9578035858111156152e15760008081fd5b86016060818c03601f19018113156152f95760008081fd5b615301614dcc565b89830135888111156153135760008081fd5b6153218e8c83870101614e41565b8252506040808401358b830152615339838501614b6a565b90820152855250509186019186016152c9565b6000806000806080858703121561536257600080fd5b61536b85614b6a565b93506020850135925061538060408601614b6a565b915061538e60608601614b6a565b905092959194509250565b600080604083850312156153ac57600080fd5b82356001600160401b038111156153c257600080fd5b6153ce85828601614e41565b95602094909401359450505050565b600080604083850312156153f057600080fd5b8235915061540060208401614b6a565b90509250929050565b60208082526058908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2070656e60408201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560608201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608082015260a00190565b6020808252604c908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760608201526b040e6e8c2e8ca40c4c2e8c6d60a31b608082015260a00190565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786060820152621a5cdd60ea1b608082015260a00190565b6020808252605d908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060608201527f7468616e2063757272656e744c61737456657269666965644261746368000000608082015260a00190565b60208082526057908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2066696e60408201527f616c4e65774261746368206d75737420626520626967676572207468616e206360608201527f757272656e744c61737456657269666965644261746368000000000000000000608082015260a00190565b6000825161567f818460208701614bdb565b9190910192915050565b60006020828403121561569b57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826156c7576156c76156a2565b500690565b600181811c908216806156e057607f821691505b60208210810361570057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561578157615781615749565b01949350505050565b60208082526045908201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361588f5761588f615749565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b60006001820161591257615912615749565b5060010190565b60006001600160401b038381169083168181101561593957615939615749565b039392505050565b60008282101561595357615953615749565b500390565b600081600019048311821515161561597257615972615749565b500290565b601f82111561494a57600081815260208120601f850160051c8101602086101561599e5750805b601f850160051c820191505b8181101561406c578281556001016159aa565b81516001600160401b038111156159d6576159d6614d8e565b6159ea816159e484546156cc565b84615977565b602080601f831160018114615a1f5760008415615a075750858301515b600019600386901b1c1916600185901b17855561406c565b600085815260208120601f198616915b82811015615a4e57888601518255948401946001909101908401615a2f565b5085821015615a6c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615a8b57615a8b6156a2565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b60008219821115615b0c57615b0c615749565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b0383166020820152606060408201819052600090615bf590830184614c07565b95945050505050565b60006001600160401b0380841680615c1857615c186156a2565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615c5c57848483379084018281529284019290600101615c3c565b5050828760c0870137610100850181815286935091505b6001811015615c92578251825260209283019290910190600101615c73565b50505095945050505050565b600060208284031215615cb057600080fd5b8151614c46816151fb565b600181815b80851115615cf6578160001904821115615cdc57615cdc615749565b80851615615ce957918102915b93841c9390800290615cc0565b509250929050565b600082615d0d57506001614c5e565b81615d1a57506000614c5e565b8160018114615d305760028114615d3a57615d56565b6001915050614c5e565b60ff841115615d4b57615d4b615749565b50506001821b614c5e565b5060208310610133831016604e8410600b8410161715615d79575081810a614c5e565b615d838383615cbb565b8060001904821115615d9757615d97615749565b029392505050565b6000614c468383615cfe56fe506f6c79676f6e5a6b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a6b45564d3a3a70726f76654e6f6e44657465726d696e6973a2646970667358221220f1bfd76036c26e61e70ee0d095f86c4706c71f8d37e2ad66af9351f271e7fe6e64736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106104125760003560e01c806396dc3d3911610220578063cfa8ed4711610130578063e7a7ed02116100b8578063f14916d611610087578063f14916d6146109e2578063f2fde38b146109f5578063f851a44014610a08578063f8b823e414610a1b578063fe16564f14610a2457600080fd5b8063e7a7ed021461098f578063e8bf92ed146109a9578063eaeb077b146109bc578063edc41121146109cf57600080fd5b8063d939b315116100ff578063d939b3151461093e578063dbc1697614610958578063e0d1744114610960578063e11f3f1814610973578063e217cfd61461098657600080fd5b8063cfa8ed47146108ea578063d02103ca14610904578063d8d1091b14610917578063d8f54db01461092a57600080fd5b8063ab9fc5ef116101b3578063b6b0b09711610182578063b6b0b0971461088f578063c0cad302146108a9578063c0ed84e0146108bc578063c89e42df146108c4578063cf136306146108d757600080fd5b8063ab9fc5ef146107e3578063adc879e9146107ed578063afd23cbe14610807578063b4d63f581461082f57600080fd5b80639eb831b9116101ef5780639eb831b9146107a85780639f0d039d146107b0578063a3c573eb146107b8578063aa58bad6146107cb57600080fd5b806396dc3d391461076757806399f5634e1461077a5780639b796760146107825780639c9f3dfe1461079557600080fd5b80634a910e6a11610326578063715018a6116102ae578063837a47381161027d578063837a4738146106b1578063841b24d71461071f5780638b48931e146107395780638c4a0af7146107435780638da5cb5b1461075657600080fd5b8063715018a6146106705780637215541a1461067857806375c508b31461068b5780637fcb36531461069e57600080fd5b8063574f649e116102f5578063574f649e1461060457806360943d6a146106175780636b8616ce1461062a5780636ff512cc1461064a578063704b6c021461065d57600080fd5b80634a910e6a146105b65780635392c5e0146105c9578063542028d5146105e95780635437988d146105f157600080fd5b80632d0889d3116103a9578063423fa85611610378578063423fa85614610542578063456052671461055c578063458c0477146105765780634834a343146105895780634a1a89a71461059c57600080fd5b80632d0889d314610500578063383b3be814610509578063394218e91461051c5780633c1582671461052f57600080fd5b80631816b7e5116103e55780631816b7e51461048457806319d8ac6114610497578063220d7899146104c257806329878983146104d557600080fd5b80630eaa86ea14610417578063107bf28c1461043d57806310a01a721461045257806315064c9614610467575b600080fd5b61042a610425366004614b86565b610a37565b6040519081526020015b60405180910390f35b610445610c18565b6040516104349190614c33565b610465610460366004614c75565b610ca6565b005b6065546104749060ff1681565b6040519015158152602001610434565b610465610492366004614d02565b610ef0565b6068546104aa906001600160401b031681565b6040516001600160401b039091168152602001610434565b6104456104d0366004614d26565b611016565b606a546104e8906001600160a01b031681565b6040516001600160a01b039091168152602001610434565b61042a61ea6081565b610474610517366004614d73565b6111bc565b61046561052a366004614d73565b611203565b61046561053d366004614eb0565b611352565b6068546104aa90600160401b90046001600160401b031681565b6068546104aa90600160801b90046001600160401b031681565b6072546104aa906001600160401b031681565b610465610597366004614c75565b611b66565b6072546104aa90600160401b90046001600160401b031681565b6104656105c4366004614d73565b611eaf565b61042a6105d7366004614d73565b606d6020526000908152604090205481565b61044561214a565b6104656105ff366004614fdb565b612157565b61042a610612366004614ff8565b612181565b61046561062536600461506d565b6121c4565b61042a610638366004614d73565b60666020526000908152604090205481565b610465610658366004614fdb565b612534565b61046561066b366004614fdb565b6125b8565b610465612630565b610465610686366004614d73565b612644565b610465610699366004615144565b6128bc565b6069546104aa906001600160401b031681565b6106f46106bf3660046151e2565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610434565b6072546104aa90600160c01b90046001600160401b031681565b6104aa62093a8081565b610465610751366004615209565b61294b565b6033546001600160a01b03166104e8565b610465610775366004614d73565b6129c2565b61042a6129ed565b610465610790366004614d73565b612ad0565b6104656107a3366004614d73565b612b05565b61042a600c81565b60745461042a565b6070546104e8906001600160a01b031681565b6065546104aa9061010090046001600160401b031681565b6104aa6206978081565b606c546104aa90600160a81b90046001600160401b031681565b60655461081c90600160481b900461ffff1681565b60405161ffff9091168152602001610434565b61086a61083d366004614d73565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610434565b6065546104e890600160581b90046001600160a01b031681565b6104656108b7366004615226565b612c4b565b6104aa612c63565b6104656108d2366004615226565b612cb0565b6104656108e5366004614d73565b612d16565b6069546104e890600160401b90046001600160a01b031681565b606c546104e8906001600160a01b031681565b61046561092536600461525a565b612d97565b606c5461047490600160a01b900460ff1681565b6072546104aa90600160801b90046001600160401b031681565b610465613261565b61046561096e36600461534c565b61331d565b610465610981366004615144565b61338f565b6104aa6103e881565b6068546104aa90600160c01b90046001600160401b031681565b606b546104e8906001600160a01b031681565b6104656109ca366004615399565b6134d4565b6104656109dd366004614c75565b6137fc565b6104656109f0366004614fdb565b61391c565b610465610a03366004614fdb565b613994565b6073546104e8906001600160a01b031681565b61042a60745481565b610465610a323660046153dd565b613a0a565b6000806000610a44612c63565b90506001600160401b03881615610ae1576072546001600160401b039081169089161115610a8d5760405162461bcd60e51b8152600401610a8490615409565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610adb5760405162461bcd60e51b8152600401610a849061548c565b50610b4b565b6001600160401b0387166000908152606d6020526040902054915081610b195760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316876001600160401b03161115610b4b5760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316866001600160401b031611610b7c5760405162461bcd60e51b8152600401610a84906155ea565b6000610b8b8888888689611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051610bc0919061566d565b602060405180830381855afa158015610bdd573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c009190615689565b610c0a91906156b8565b9a9950505050505050505050565b606f8054610c25906156cc565b80601f0160208091040260200160405190810160405280929190818152602001828054610c51906156cc565b8015610c9e5780601f10610c7357610100808354040283529160200191610c9e565b820191906000526020600020905b815481529060010190602001808311610c8157829003601f168201915b505050505081565b610cae613a2c565b600080610cb9612c63565b90506001600160401b038a1615610d4d576072546001600160401b03908116908b161115610cf95760405162461bcd60e51b8152600401610a8490615409565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610d475760405162461bcd60e51b8152600401610a849061548c565b50610db7565b6001600160401b0389166000908152606d6020526040902054915081610d855760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316896001600160401b03161115610db75760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316886001600160401b031611610de85760405162461bcd60e51b8152600401610a84906155ea565b6000610df78a8a8a868b611016565b6069805467ffffffffffffffff19166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610e4557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610e8b57600080fd5b505af1158015610e9f573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610f1a5760405162461bcd60e51b8152600401610a8490615706565b6103e88161ffff16118015610f3457506104008161ffff16105b610fb95760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a401610a84565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b0380861660008181526067602052604080822054938816825290205460609291158061104857508115155b6110bc576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a84565b80611131576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a84565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b03828116600090815260716020526040812054909242926111f292600160801b9092048116911661575f565b6001600160401b0316111592915050565b6073546001600160a01b0316331461122d5760405162461bcd60e51b8152600401610a8490615706565b62093a806001600160401b03821611156112595760405162461bcd60e51b8152600401610a849061578a565b60655460ff166112fc576072546001600160401b03600160c01b9091048116908216106112fc5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a401610a84565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a19060200161100b565b60655460ff16156113755760405162461bcd60e51b8152600401610a84906157f5565b606954600160401b90046001600160a01b031633146113fc5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e6365720000000000006064820152608401610a84565b8051806114715760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e636520312062617463680000006064820152608401610a84565b6103e881106114ea576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e7920626174636865736064820152608401610a84565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561198a57600087828151811061153d5761153d61585d565b60200260200101519050600081606001516001600160401b031611156116f6578361156781615873565b94505060008160000151805190602001208260200151836060015160405160200161159493929190615899565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461163a5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d617463680000006064820152608401610a84565b81606001516001600160401b031682604001516001600160401b031610156116f05760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a401610a84565b5061187d565b6020810151158061177f5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916117399160040190815260200190565b6020604051808303816000875af1158015611758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177c9190615689565b15155b6117f15760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d7573742065786973740000000000006064820152608401610a84565b80515161ea601161187d5760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a401610a84565b856001600160401b031681604001516001600160401b0316101580156118b057504281604001516001600160401b031611155b6119225760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e67650000006064820152608401610a84565b805180516020918201208183015160408085015190516119499488949392913391016158bc565b604051602081830303815290604052805190602001209250848061196c90615873565b9550508060400151955050808061198290615900565b915050611521565b506068546001600160401b03600160c01b90910481169083161115611a0f5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b6064820152608401610a84565b606854600090611a2f90600160801b90046001600160401b031684615919565b611a42906001600160401b031687615941565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611b1790339030908490611afc9190615958565b606554600160581b90046001600160a01b0316929190613a86565b611b1f613af1565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b895760405162461bcd60e51b8152600401610a84906157f5565b6072546001600160401b038781166000908152606760205260409020600101544292611bc092600160c01b9091048116911661575f565b6001600160401b03161115611c495760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a401610a84565b6103e8611c568888615919565b6001600160401b031610611cd25760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e792062617463686573000000006064820152608401610a84565b611ce28888888888888888613b91565b611ceb86613e8e565b607254600160801b90046001600160401b0316600003611db3576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615611d5057607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d9657600080fd5b505af1158015611daa573d6000803e3d6000fd5b50505050611e64565b611dbb613af1565b607280546001600160401b0316906000611dd483615873565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611edc57506072546001600160401b03600160401b9091048116908216115b8015611ef757506072546001600160401b0390811690821611155b611f755760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a401610a84565b606a546001600160a01b0316331461201f57611f90816111bc565b61201f5760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a401610a84565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b1580156120dc57600080fd5b505af11580156120f0573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e846002015460405161213d91815260200190565b60405180910390a3505050565b606e8054610c25906156cc565b61215f613a2c565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b60008585805190602001208585856040516020016121a39594939291906158bc565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff16158080156121e45750600054600160ff909116105b806121fe5750303b1580156121fe575060005460ff166001145b6122615760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a84565b6000805460ff191660011790558015612284576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a8416179055607080549091169188169190911790556123016020860186614fdb565b607380546001600160a01b0319166001600160a01b03929092169190911790556123316060860160408701614fdb565b606980546001600160a01b0392909216600160401b02600160401b600160e01b031990921691909117905561236c60c0860160a08701614fdb565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa7113568490556123c960e0860160c08701614d73565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556124006040860160208701614d73565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561243c6080860160608701614d73565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b1990921691909117905561247860a0860160808701615209565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e6124a084826159bd565b50606f6124ad83826159bd565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124e3614074565b8015612529576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b0316331461255e5760405162461bcd60e51b8152600401610a8490615706565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161100b565b6073546001600160a01b031633146125e25760405162461bcd60e51b8152600401610a8490615706565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a19060200161100b565b612638613a2c565b61264260006140e4565b565b6033546001600160a01b031633146128b1576072546000906001600160401b03161561269557506072546001600160401b03908116600090815260716020526040902054600160401b9004166126a3565b506069546001600160401b03165b80826001600160401b0316116127215760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c7265616479207665726966696564000000006064820152608401610a84565b6068546001600160401b03600160401b90910481169083161180159061276357506001600160401b038083166000908152606760205260409020600101541615155b6127ee5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a401610a84565b6001600160401b03808316600090815260676020526040902060010154429161281c9162093a80911661575f565b6001600160401b031611156128af5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a401610a84565b505b6128b9614136565b50565b60655460ff16156128df5760405162461bcd60e51b8152600401610a84906157f5565b6128f08989898989898989896141a6565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1612529614136565b6073546001600160a01b031633146129755760405162461bcd60e51b8152600401610a8490615706565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061100b90831515815260200190565b6129ca613a2c565b6069805467ffffffffffffffff19166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a649190615689565b90506000612a70612c63565b6068546001600160401b03600160401b8204811691612aa091600160801b8204811691600160c01b900416615919565b612aaa919061575f565b612ab49190615919565b6001600160401b03169050612ac98183615a7c565b9250505090565b612ad8613a2c565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612b2f5760405162461bcd60e51b8152600401610a8490615706565b62093a806001600160401b0382161115612b5b5760405162461bcd60e51b8152600401610a849061578a565b60655460ff16612bf0576072546001600160401b03600160801b909104811690821610612bf05760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f776572006064820152608401610a84565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c759060200161100b565b612c53613a2c565b606f612c5f82826159bd565b5050565b6072546000906001600160401b031615612ca057506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612cda5760405162461bcd60e51b8152600401610a8490615706565b606e612ce682826159bd565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161100b9190614c33565b6073546001600160a01b03163314612d405760405162461bcd60e51b8152600401610a8490615706565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f9060200161100b565b60655460ff1615612dba5760405162461bcd60e51b8152600401610a84906157f5565b606c54600160a01b900460ff161515600114612de85760405162461bcd60e51b8152600401610a8490615a90565b805180612e4b5760405162461bcd60e51b815260206004820152603d6024820152600080516020615dac83398151915260448201527f3a204d75737420666f726365206174206c6561737420312062617463680000006064820152608401610a84565b6103e88110612ebc5760405162461bcd60e51b81526020600482015260436024820152600080516020615dac83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a401610a84565b6068546001600160401b03600160c01b8204811691612ee4918491600160801b900416615af9565b1115612f3e5760405162461bcd60e51b81526020600482015260356024820152600080516020615dac8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b6064820152608401610a84565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b8481101561316a576000868281518110612f8b57612f8b61585d565b602002602001015190508380612fa090615873565b945050600081600001518051906020012082602001518360400151604051602001612fcd93929190615899565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461306c5760405162461bcd60e51b81526020600482015260426024820152600080516020615dac83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a401610a84565b613077600188615941565b830361310c5742620697808360400151613091919061575f565b6001600160401b0316111561310c5760405162461bcd60e51b81526020600482015260476024820152600080516020615dac83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a401610a84565b815180516020918201208184015160405161312f938893929142913391016158bc565b604051602081830303815290604052805190602001209350858061315290615873565b9650505050808061316290615900565b915050612f6f565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166132835760405162461bcd60e51b8152600401610a8490615b11565b6073546001600160a01b031633146132ad5760405162461bcd60e51b8152600401610a8490615706565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156132fd57600080fd5b505af1158015613311573d6000803e3d6000fd5b50505050612642614821565b613325613a2c565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133b95760405162461bcd60e51b8152600401610a8490615b6e565b6133ca8989898989898989896141a6565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561341557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561345b57600080fd5b505af115801561346f573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff16156134f75760405162461bcd60e51b8152600401610a84906157f5565b606c54600160a01b900460ff1615156001146135255760405162461bcd60e51b8152600401610a8490615a90565b600061353060745490565b9050818111156135955760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b6064820152608401610a84565b61ea608351106136055760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b6064820152608401610a84565b60655461362490600160581b90046001600160a01b0316333084613a86565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa15801561366e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136929190615689565b60688054919250600160c01b9091046001600160401b03169060186136b683615873565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016136f793929190615899565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361379b57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26137f6565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516137ed93929190615bcb565b60405180910390a25b50505050565b606a546001600160a01b031633146138265760405162461bcd60e51b8152600401610a8490615b6e565b6138368888888888888888613b91565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561388157607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156138c757600080fd5b505af11580156138db573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e9d565b6073546001600160a01b031633146139465760405162461bcd60e51b8152600401610a8490615706565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca9060200161100b565b61399c613a2c565b6001600160a01b038116613a015760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a84565b6128b9816140e4565b613a12613a2c565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b031633146126425760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a84565b6040516001600160a01b03808516602483015283166044820152606481018290526137f69085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614878565b6072546001600160401b03600160401b820481169116111561264257607254600090613b2e90600160401b90046001600160401b0316600161575f565b9050613b39816111bc565b156128b957607254600090600290613b5b9084906001600160401b0316615919565b613b659190615bfe565b613b6f908361575f565b9050613b7a816111bc565b15613b8857612c5f81611eaf565b612c5f82611eaf565b600080613b9c612c63565b90506001600160401b038a1615613c30576072546001600160401b03908116908b161115613bdc5760405162461bcd60e51b8152600401610a8490615409565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c2a5760405162461bcd60e51b8152600401610a849061548c565b50613c9a565b6001600160401b0389166000908152606d6020526040902054915081613c685760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316896001600160401b03161115613c9a5760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316886001600160401b031611613ccb5760405162461bcd60e51b8152600401610a84906155ea565b6000613cda8a8a8a868b611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051613d0f919061566d565b602060405180830381855afa158015613d2c573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613d4f9190615689565b613d5991906156b8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613d9d918b918b918b9190600401615c24565b602060405180830381865afa158015613dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dde9190615c9e565b613e3d5760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20494e5660448201526920a624a22fa82927a7a360b11b6064820152608401610a84565b613e8033613e4b858d615919565b6001600160401b0316613e5c6129ed565b613e669190615958565b606554600160581b90046001600160a01b0316919061494f565b505050505050505050505050565b6000613e98612c63565b905081600080613ea88484615919565b6001600160401b031690505b836001600160401b0316836001600160401b031614613f5a576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613f04911642615941565b1115613f3f576001810154613f2990600160401b90046001600160401b031686615919565b613f3c906001600160401b031684615af9565b92505b60010154600160401b90046001600160401b03169250613eb4565b6000613f668383615941565b905082811015613fe0576000613f7c8285615941565b9050600c8111613f8c5780613f8f565b600c5b9050613f9c816003615958565b613fa790600a615d9f565b606554613fc0908390600160481b900461ffff16615d9f565b607454613fcd9190615958565b613fd79190615a7c565b6074555061406c565b6000613fec8483615941565b9050600c8111613ffc5780613fff565b600c5b9050600061400e826003615958565b61401990600a615d9f565b606554614032908490600160481b900461ffff16615d9f565b60745461403f9190615958565b6140499190615a7c565b90508060745460745461405c9190615958565b6140669190615a7c565b60745550505b505050505050565b600054610100900460ff166140df5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a84565b612642335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561418657600080fd5b505af115801561419a573d6000803e3d6000fd5b5050505061264261497f565b60006001600160401b038a1615614321576072546001600160401b03908116908b1611156142655760405162461bcd60e51b815260206004820152606c6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c401610a84565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b909204161461431b5760405162461bcd60e51b81526020600482015260606024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a401610a84565b50614475565b506001600160401b0387166000908152606d6020526040902054806143c25760405162461bcd60e51b81526020600482015260576024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a401610a84565b6069546001600160401b0390811690891611156144755760405162461bcd60e51b81526020600482015260716024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c401610a84565b6072546001600160401b03908116908a16118015906144a55750896001600160401b0316896001600160401b0316115b80156144c657506072546001600160401b03600160401b9091048116908a16115b61453e5760405162461bcd60e51b815260206004820152604f6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a401610a84565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146145fe5760405162461bcd60e51b815260206004820152606a6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c401610a84565b600061460d898989858a611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051614642919061566d565b602060405180830381855afa15801561465f573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906146829190615689565b61468c91906156b8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916146d0918a918a918a9190600401615c24565b602060405180830381865afa1580156146ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147119190615c9e565b6147715760405162461bcd60e51b815260206004820152603e6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20494e56414c49445f50524f4f4600006064820152608401610a84565b6001600160401b038b16600090815260716020526040902060020154879003613e805760405162461bcd60e51b81526020600482015260626024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c401610a84565b60655460ff166148435760405162461bcd60e51b8152600401610a8490615b11565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006148cd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166149da9092919063ffffffff16565b80519091501561494a57808060200190518101906148eb9190615c9e565b61494a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a84565b505050565b6040516001600160a01b03831660248201526044810182905261494a90849063a9059cbb60e01b90606401613aba565b60655460ff16156149a25760405162461bcd60e51b8152600401610a84906157f5565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60606149e984846000856149f1565b949350505050565b606082471015614a525760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a84565b600080866001600160a01b03168587604051614a6e919061566d565b60006040518083038185875af1925050503d8060008114614aab576040519150601f19603f3d011682016040523d82523d6000602084013e614ab0565b606091505b5091509150614ac187838387614acc565b979650505050505050565b60608315614b3b578251600003614b34576001600160a01b0385163b614b345760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a84565b50816149e9565b6149e98383815115614b505781518083602001fd5b8060405162461bcd60e51b8152600401610a849190614c33565b80356001600160401b0381168114614b8157600080fd5b919050565b600080600080600060a08688031215614b9e57600080fd5b614ba786614b6a565b9450614bb560208701614b6a565b9350614bc360408701614b6a565b94979396509394606081013594506080013592915050565b60005b83811015614bf6578181015183820152602001614bde565b838111156137f65750506000910152565b60008151808452614c1f816020860160208601614bdb565b601f01601f19169290920160200192915050565b602081526000614c466020830184614c07565b9392505050565b8060408101831015614c5e57600080fd5b92915050565b8060808101831015614c5e57600080fd5b6000806000806000806000806101a0898b031215614c9257600080fd5b614c9b89614b6a565b9750614ca960208a01614b6a565b9650614cb760408a01614b6a565b95506060890135945060808901359350614cd48a60a08b01614c4d565b9250614ce38a60e08b01614c64565b9150614cf38a6101608b01614c4d565b90509295985092959890939650565b600060208284031215614d1457600080fd5b813561ffff81168114614c4657600080fd5b600080600080600060a08688031215614d3e57600080fd5b614d4786614b6a565b9450614d5560208701614b6a565b94979496505050506040830135926060810135926080909101359150565b600060208284031215614d8557600080fd5b614c4682614b6a565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614dc657614dc6614d8e565b60405290565b604051606081016001600160401b0381118282101715614dc657614dc6614d8e565b604051601f8201601f191681016001600160401b0381118282101715614e1657614e16614d8e565b604052919050565b60006001600160401b03821115614e3757614e37614d8e565b5060051b60200190565b600082601f830112614e5257600080fd5b81356001600160401b03811115614e6b57614e6b614d8e565b614e7e601f8201601f1916602001614dee565b818152846020838601011115614e9357600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614ec357600080fd5b82356001600160401b0380821115614eda57600080fd5b818501915085601f830112614eee57600080fd5b8135614f01614efc82614e1e565b614dee565b81815260059190911b83018401908481019088831115614f2057600080fd5b8585015b83811015614fb957803585811115614f3c5760008081fd5b86016080818c03601f1901811315614f545760008081fd5b614f5c614da4565b8983013588811115614f6e5760008081fd5b614f7c8e8c83870101614e41565b8252506040808401358b8301526060614f96818601614b6a565b82840152614fa5848601614b6a565b908301525085525050918601918601614f24565b5098975050505050505050565b6001600160a01b03811681146128b957600080fd5b600060208284031215614fed57600080fd5b8135614c4681614fc6565b600080600080600060a0868803121561501057600080fd5b8535945060208601356001600160401b0381111561502d57600080fd5b61503988828901614e41565b9450506040860135925061504f60608701614b6a565b9150608086013561505f81614fc6565b809150509295509295909350565b600080600080600080600080888a036101c081121561508b57600080fd5b893561509681614fc6565b985060208a01356150a681614fc6565b975060408a01356150b681614fc6565b965060608a01356150c681614fc6565b955060e0607f19820112156150da57600080fd5b5060808901935061016089013592506101808901356001600160401b038082111561510457600080fd5b6151108c838d01614e41565b93506101a08b013591508082111561512757600080fd5b506151348b828c01614e41565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c03121561516357600080fd5b61516c8a614b6a565b985061517a60208b01614b6a565b975061518860408b01614b6a565b965061519660608b01614b6a565b955060808a0135945060a08a013593506151b38b60c08c01614c4d565b92506151c38b6101008c01614c64565b91506151d38b6101808c01614c4d565b90509295985092959850929598565b6000602082840312156151f457600080fd5b5035919050565b80151581146128b957600080fd5b60006020828403121561521b57600080fd5b8135614c46816151fb565b60006020828403121561523857600080fd5b81356001600160401b0381111561524e57600080fd5b6149e984828501614e41565b6000602080838503121561526d57600080fd5b82356001600160401b038082111561528457600080fd5b818501915085601f83011261529857600080fd5b81356152a6614efc82614e1e565b81815260059190911b830184019084810190888311156152c557600080fd5b8585015b83811015614fb9578035858111156152e15760008081fd5b86016060818c03601f19018113156152f95760008081fd5b615301614dcc565b89830135888111156153135760008081fd5b6153218e8c83870101614e41565b8252506040808401358b830152615339838501614b6a565b90820152855250509186019186016152c9565b6000806000806080858703121561536257600080fd5b61536b85614b6a565b93506020850135925061538060408601614b6a565b915061538e60608601614b6a565b905092959194509250565b600080604083850312156153ac57600080fd5b82356001600160401b038111156153c257600080fd5b6153ce85828601614e41565b95602094909401359450505050565b600080604083850312156153f057600080fd5b8235915061540060208401614b6a565b90509250929050565b60208082526058908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2070656e60408201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560608201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608082015260a00190565b6020808252604c908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760608201526b040e6e8c2e8ca40c4c2e8c6d60a31b608082015260a00190565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786060820152621a5cdd60ea1b608082015260a00190565b6020808252605d908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060608201527f7468616e2063757272656e744c61737456657269666965644261746368000000608082015260a00190565b60208082526057908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2066696e60408201527f616c4e65774261746368206d75737420626520626967676572207468616e206360608201527f757272656e744c61737456657269666965644261746368000000000000000000608082015260a00190565b6000825161567f818460208701614bdb565b9190910192915050565b60006020828403121561569b57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826156c7576156c76156a2565b500690565b600181811c908216806156e057607f821691505b60208210810361570057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561578157615781615749565b01949350505050565b60208082526045908201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361588f5761588f615749565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b60006001820161591257615912615749565b5060010190565b60006001600160401b038381169083168181101561593957615939615749565b039392505050565b60008282101561595357615953615749565b500390565b600081600019048311821515161561597257615972615749565b500290565b601f82111561494a57600081815260208120601f850160051c8101602086101561599e5750805b601f850160051c820191505b8181101561406c578281556001016159aa565b81516001600160401b038111156159d6576159d6614d8e565b6159ea816159e484546156cc565b84615977565b602080601f831160018114615a1f5760008415615a075750858301515b600019600386901b1c1916600185901b17855561406c565b600085815260208120601f198616915b82811015615a4e57888601518255948401946001909101908401615a2f565b5085821015615a6c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615a8b57615a8b6156a2565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b60008219821115615b0c57615b0c615749565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b0383166020820152606060408201819052600090615bf590830184614c07565b95945050505050565b60006001600160401b0380841680615c1857615c186156a2565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615c5c57848483379084018281529284019290600101615c3c565b5050828760c0870137610100850181815286935091505b6001811015615c92578251825260209283019290910190600101615c73565b50505095945050505050565b600060208284031215615cb057600080fd5b8151614c46816151fb565b600181815b80851115615cf6578160001904821115615cdc57615cdc615749565b80851615615ce957918102915b93841c9390800290615cc0565b509250929050565b600082615d0d57506001614c5e565b81615d1a57506000614c5e565b8160018114615d305760028114615d3a57615d56565b6001915050614c5e565b60ff841115615d4b57615d4b615749565b50506001821b614c5e565b5060208310610133831016604e8410600b8410161715615d79575081810a614c5e565b615d838383615cbb565b8060001904821115615d9757615d97615749565b029392505050565b6000614c468383615cfe56fe506f6c79676f6e5a6b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a6b45564d3a3a70726f76654e6f6e44657465726d696e6973a2646970667358221220f1bfd76036c26e61e70ee0d095f86c4706c71f8d37e2ad66af9351f271e7fe6e64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/TokenWrapped.json b/compiled-contracts/TokenWrapped.json index 13f9e39c6..4e403945f 100644 --- a/compiled-contracts/TokenWrapped.json +++ b/compiled-contracts/TokenWrapped.json @@ -483,8 +483,8 @@ "type": "function" } ], - "bytecode": "0x60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b5d95b18e7873c0bee5e5a0f8ba7f856feaa9a4588dd711619c14728f42e00f64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b5d95b18e7873c0bee5e5a0f8ba7f856feaa9a4588dd711619c14728f42e00f64736f6c634300080f0033", + "bytecode": "0x60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea264697066735822122070fae8b3daebe7fc894d50296739b7a26e638f37239109230c7dfd552785f2a264736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea264697066735822122070fae8b3daebe7fc894d50296739b7a26e638f37239109230c7dfd552785f2a264736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/PolygonZKEVM.sol b/contracts/PolygonZkEVM.sol similarity index 93% rename from contracts/PolygonZKEVM.sol rename to contracts/PolygonZkEVM.sol index 4b904ce2b..8ada245b2 100644 --- a/contracts/PolygonZKEVM.sol +++ b/contracts/PolygonZkEVM.sol @@ -4,10 +4,10 @@ pragma solidity 0.8.15; import "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol"; import "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol"; import "./interfaces/IVerifierRollup.sol"; -import "./interfaces/IPolygonZKEVMGlobalExitRoot.sol"; +import "./interfaces/IPolygonZkEVMGlobalExitRoot.sol"; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; -import "./interfaces/IPolygonZKEVMBridge.sol"; +import "./interfaces/IPolygonZkEVMBridge.sol"; import "./lib/EmergencyManager.sol"; /** @@ -16,9 +16,9 @@ import "./lib/EmergencyManager.sol"; * Any user can force some transaction and the sequencer will have a timeout to add them in the queue. * The sequenced state is deterministic and can be precalculated before it's actually verified by a zkProof. * The aggregators will be able to verify the sequenced state with zkProofs and therefore make available the withdrawals from L2 network. - * To enter and exit of the L2 network will be used a PolygonZKEVMBridge smart contract that will be deployed in both networks. + * To enter and exit of the L2 network will be used a PolygonZkEVMBridge smart contract that will be deployed in both networks. */ -contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { +contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { using SafeERC20Upgradeable for IERC20Upgradeable; /** @@ -171,7 +171,7 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { IVerifierRollup public rollupVerifier; // Global Exit Root interface - IPolygonZKEVMGlobalExitRoot public globalExitRootManager; + IPolygonZkEVMGlobalExitRoot public globalExitRootManager; // Indicates whether the force batch functionality is available bool public forceBatchAllowed; @@ -189,8 +189,8 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { // L2 network name string public networkName; - // PolygonZKEVM Bridge Address - IPolygonZKEVMBridge public bridgeAddress; + // PolygonZkEVM Bridge Address + IPolygonZkEVMBridge public bridgeAddress; // Pending state mapping // pendingStateNumber --> PendingState @@ -335,10 +335,10 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { * @param _networkName L2 network name */ function initialize( - IPolygonZKEVMGlobalExitRoot _globalExitRootManager, + IPolygonZkEVMGlobalExitRoot _globalExitRootManager, IERC20Upgradeable _matic, IVerifierRollup _rollupVerifier, - IPolygonZKEVMBridge _bridgeAddress, + IPolygonZkEVMBridge _bridgeAddress, InitializePackedParameters calldata initializePackedParameters, bytes32 genesisRoot, string memory _trustedSequencerURL, @@ -368,14 +368,14 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { } modifier onlyAdmin() { - require(admin == msg.sender, "PolygonZKEVM::onlyAdmin: only admin"); + require(admin == msg.sender, "PolygonZkEVM::onlyAdmin: only admin"); _; } modifier onlyTrustedSequencer() { require( trustedSequencer == msg.sender, - "PolygonZKEVM::onlyTrustedSequencer: only trusted sequencer" + "PolygonZkEVM::onlyTrustedSequencer: only trusted sequencer" ); _; } @@ -383,7 +383,7 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { modifier onlyTrustedAggregator() { require( trustedAggregator == msg.sender, - "PolygonZKEVM::onlyTrustedAggregator: only trusted Aggregator" + "PolygonZkEVM::onlyTrustedAggregator: only trusted Aggregator" ); _; } @@ -391,7 +391,7 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { modifier isForceBatchAllowed() { require( forceBatchAllowed == true, - "PolygonZKEVM::isForceBatchAllowed: only if force batch is available" + "PolygonZkEVM::isForceBatchAllowed: only if force batch is available" ); _; } @@ -410,12 +410,12 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { uint256 batchesNum = batches.length; require( batchesNum > 0, - "PolygonZKEVM::sequenceBatches: At least must sequence 1 batch" + "PolygonZkEVM::sequenceBatches: At least must sequence 1 batch" ); require( batchesNum < MAX_VERIFY_BATCHES, - "PolygonZKEVM::sequenceBatches: Cannot sequence that many batches" + "PolygonZkEVM::sequenceBatches: Cannot sequence that many batches" ); // Store storage variables in memory, to save gas, because will be overrided multiple times @@ -445,13 +445,13 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { require( hashedForcedBatchData == forcedBatches[currentLastForceBatchSequenced], - "PolygonZKEVM::sequenceBatches: Forced batches data must match" + "PolygonZkEVM::sequenceBatches: Forced batches data must match" ); // Check timestamp is bigger than min timestamp require( currentBatch.timestamp >= currentBatch.minForcedTimestamp, - "PolygonZKEVM::sequenceBatches: Forced batches timestamp must be bigger or equal than min" + "PolygonZkEVM::sequenceBatches: Forced batches timestamp must be bigger or equal than min" ); } else { // Check global exit root exist, and proper batch length, this checks are already done in the forceBatches call @@ -461,7 +461,7 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { currentBatch.globalExitRoot ) != 0, - "PolygonZKEVM::sequenceBatches: Global exit root must exist" + "PolygonZkEVM::sequenceBatches: Global exit root must exist" ); require( @@ -475,7 +475,7 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { require( currentBatch.timestamp >= currentTimestamp && currentBatch.timestamp <= block.timestamp, - "PolygonZKEVM::sequenceBatches: Timestamp must be inside range" + "PolygonZkEVM::sequenceBatches: Timestamp must be inside range" ); // Calculate next accumulated input hash @@ -499,7 +499,7 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { // Sanity check, should be unreachable require( currentLastForceBatchSequenced <= lastForceBatch, - "PolygonZKEVM::sequenceBatches: Force batches overflow" + "PolygonZkEVM::sequenceBatches: Force batches overflow" ); uint256 nonForcedBatchesSequenced = batchesNum - @@ -556,12 +556,12 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { sequencedBatches[finalNewBatch].sequencedTimestamp + trustedAggregatorTimeout <= block.timestamp, - "PolygonZKEVM::verifyBatches: trusted aggregator timeout not expired" + "PolygonZkEVM::verifyBatches: trusted aggregator timeout not expired" ); require( finalNewBatch - initNumBatch < MAX_VERIFY_BATCHES, - "PolygonZKEVM::verifyBatches: cannot verify that many batches" + "PolygonZkEVM::verifyBatches: cannot verify that many batches" ); _verifyBatches( @@ -685,7 +685,7 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { // Already consolidated pending states can be used aswell require( pendingStateNum <= lastPendingState, - "PolygonZKEVM::verifyBatches: pendingStateNum must be less or equal than lastPendingState" + "PolygonZkEVM::verifyBatches: pendingStateNum must be less or equal than lastPendingState" ); // Check choosen pending state @@ -699,27 +699,27 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { // Check initNumBatch matches the pending state require( initNumBatch == currentPendingState.lastVerifiedBatch, - "PolygonZKEVM::verifyBatches: initNumBatch must match the pending state batch" + "PolygonZkEVM::verifyBatches: initNumBatch must match the pending state batch" ); } else { // Use consolidated state oldStateRoot = batchNumToStateRoot[initNumBatch]; require( oldStateRoot != bytes32(0), - "PolygonZKEVM::verifyBatches: initNumBatch state root does not exist" + "PolygonZkEVM::verifyBatches: initNumBatch state root does not exist" ); // Check initNumBatch is inside the range require( initNumBatch <= currentLastVerifiedBatch, - "PolygonZKEVM::verifyBatches: initNumBatch must be less or equal than currentLastVerifiedBatch" + "PolygonZkEVM::verifyBatches: initNumBatch must be less or equal than currentLastVerifiedBatch" ); } // Check final batch require( finalNewBatch > currentLastVerifiedBatch, - "PolygonZKEVM::verifyBatches: finalNewBatch must be bigger than currentLastVerifiedBatch" + "PolygonZkEVM::verifyBatches: finalNewBatch must be bigger than currentLastVerifiedBatch" ); // Get snark bytes @@ -737,7 +737,7 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { // Verify proof require( rollupVerifier.verifyProof(proofA, proofB, proofC, [inputSnark]), - "PolygonZKEVM::verifyBatches: INVALID_PROOF" + "PolygonZkEVM::verifyBatches: INVALID_PROOF" ); // Get MATIC reward @@ -787,7 +787,7 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { pendingStateNum != 0 && pendingStateNum > lastPendingStateConsolidated && pendingStateNum <= lastPendingState, - "PolygonZKEVM::consolidatePendingState: pendingStateNum must invalid" + "PolygonZkEVM::consolidatePendingState: pendingStateNum must invalid" ); // Check if pending state can be consolidated @@ -795,7 +795,7 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { if (msg.sender != trustedAggregator) { require( isPendingStateConsolidable(pendingStateNum), - "PolygonZKEVM::consolidatePendingState: pending state is not ready to be consolidated" + "PolygonZkEVM::consolidatePendingState: pending state is not ready to be consolidated" ); } @@ -916,12 +916,12 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { require( maticFee <= maticAmount, - "PolygonZKEVM::forceBatch: not enough matic" + "PolygonZkEVM::forceBatch: not enough matic" ); require( transactions.length < MAX_TRANSACTIONS_BYTE_LENGTH, - "PolygonZKEVM::forceBatch: Transactions bytes overflow" + "PolygonZkEVM::forceBatch: Transactions bytes overflow" ); matic.safeTransferFrom(msg.sender, address(this), maticFee); @@ -966,17 +966,17 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { require( batchesNum > 0, - "PolygonZKEVM::sequenceForceBatch: Must force at least 1 batch" + "PolygonZkEVM::sequenceForceBatch: Must force at least 1 batch" ); require( batchesNum < MAX_VERIFY_BATCHES, - "PolygonZKEVM::sequenceForceBatches: cannot verify that many batches" + "PolygonZkEVM::sequenceForceBatches: cannot verify that many batches" ); require( lastForceBatchSequenced + batchesNum <= lastForceBatch, - "PolygonZKEVM::sequenceForceBatch: Force batch invalid" + "PolygonZkEVM::sequenceForceBatch: Force batch invalid" ); // Store storage variables in memory, to save gas, because will be overrided multiple times @@ -1003,7 +1003,7 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { require( hashedForcedBatchData == forcedBatches[currentLastForceBatchSequenced], - "PolygonZKEVM::sequenceForceBatches: Forced batches data must match" + "PolygonZkEVM::sequenceForceBatches: Forced batches data must match" ); if (i == (batchesNum - 1)) { @@ -1011,7 +1011,7 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { require( currentBatch.minForcedTimestamp + FORCE_BATCH_TIMEOUT <= block.timestamp, - "PolygonZKEVM::sequenceForceBatch: Forced batch is not in timeout period" + "PolygonZkEVM::sequenceForceBatch: Forced batch is not in timeout period" ); } // Calculate next acc input hash @@ -1102,12 +1102,12 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { ) public onlyAdmin { require( newTrustedAggregatorTimeout <= HALT_AGGREGATION_TIMEOUT, - "PolygonZKEVM::setPendingStateTimeout: exceed halt aggregation timeout" + "PolygonZkEVM::setPendingStateTimeout: exceed halt aggregation timeout" ); if (!isEmergencyState) { require( newTrustedAggregatorTimeout < trustedAggregatorTimeout, - "PolygonZKEVM::setTrustedAggregatorTimeout: new timeout must be lower" + "PolygonZkEVM::setTrustedAggregatorTimeout: new timeout must be lower" ); } @@ -1125,12 +1125,12 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { ) public onlyAdmin { require( newPendingStateTimeout <= HALT_AGGREGATION_TIMEOUT, - "PolygonZKEVM::setPendingStateTimeout: exceed halt aggregation timeout" + "PolygonZkEVM::setPendingStateTimeout: exceed halt aggregation timeout" ); if (!isEmergencyState) { require( newPendingStateTimeout < pendingStateTimeout, - "PolygonZKEVM::setPendingStateTimeout: new timeout must be lower" + "PolygonZkEVM::setPendingStateTimeout: new timeout must be lower" ); } @@ -1147,7 +1147,7 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { ) public onlyAdmin { require( newMultiplierBatchFee > 1000 && newMultiplierBatchFee < 1024, - "PolygonZKEVM::setMultiplierBatchFee: newMultiplierBatchFee incorrect range" + "PolygonZkEVM::setMultiplierBatchFee: newMultiplierBatchFee incorrect range" ); multiplierBatchFee = newMultiplierBatchFee; @@ -1308,7 +1308,7 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { // Already consolidated pending states can be used aswell require( initPendingStateNum <= lastPendingState, - "PolygonZKEVM::proveNonDeterministicPendingState: pendingStateNum must be less or equal than lastPendingState" + "PolygonZkEVM::proveNonDeterministicPendingState: pendingStateNum must be less or equal than lastPendingState" ); // Check choosen pending state @@ -1322,20 +1322,20 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { // Check initNumBatch matches the init pending state require( initNumBatch == initPendingState.lastVerifiedBatch, - "PolygonZKEVM::proveNonDeterministicPendingState: initNumBatch must match the pending state batch" + "PolygonZkEVM::proveNonDeterministicPendingState: initNumBatch must match the pending state batch" ); } else { // Use consolidated state oldStateRoot = batchNumToStateRoot[initNumBatch]; require( oldStateRoot != bytes32(0), - "PolygonZKEVM::proveNonDeterministicPendingState: initNumBatch state root does not exist" + "PolygonZkEVM::proveNonDeterministicPendingState: initNumBatch state root does not exist" ); // Check initNumBatch is inside the range require( initNumBatch <= lastVerifiedBatch, - "PolygonZKEVM::proveNonDeterministicPendingState: initNumBatch must be less or equal than currentLastVerifiedBatch" + "PolygonZkEVM::proveNonDeterministicPendingState: initNumBatch must be less or equal than currentLastVerifiedBatch" ); } @@ -1347,14 +1347,14 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { finalPendingStateNum <= lastPendingState && finalPendingStateNum > initPendingStateNum && finalPendingStateNum > lastPendingStateConsolidated, - "PolygonZKEVM::proveNonDeterministicPendingState: finalPendingStateNum incorrect" + "PolygonZkEVM::proveNonDeterministicPendingState: finalPendingStateNum incorrect" ); // Check final num batch require( finalNewBatch == pendingStateTransitions[finalPendingStateNum].lastVerifiedBatch, - "PolygonZKEVM::proveNonDeterministicPendingState: finalNewBatch must be equal than currentLastVerifiedBatch" + "PolygonZkEVM::proveNonDeterministicPendingState: finalNewBatch must be equal than currentLastVerifiedBatch" ); // Get snark bytes @@ -1372,18 +1372,18 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { // Verify proof require( rollupVerifier.verifyProof(proofA, proofB, proofC, [inputSnark]), - "PolygonZKEVM::proveNonDeterministicPendingState: INVALID_PROOF" + "PolygonZkEVM::proveNonDeterministicPendingState: INVALID_PROOF" ); require( pendingStateTransitions[finalPendingStateNum].stateRoot != newStateRoot, - "PolygonZKEVM::proveNonDeterministicPendingState: stored root must be different than new state root" + "PolygonZkEVM::proveNonDeterministicPendingState: stored root must be different than new state root" ); } /** - * @notice Function to activate emergency state, which also enable the emergency mode on both PoE and PolygonZKEVM Bridge contrats + * @notice Function to activate emergency state, which also enable the emergency mode on both PoE and PolygonZkEVM Bridge contrats * If not called by the owner owner must be provided a batcnNum that does not have been aggregated in a HALT_AGGREGATION_TIMEOUT period * @param sequencedBatchNum Sequenced batch number that has not been aggreagated in HALT_AGGREGATION_TIMEOUT */ @@ -1402,14 +1402,14 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { // Check that the batch has not been verified require( sequencedBatchNum > lastVerifiedBatchToCompare, - "PolygonZKEVM::activateEmergencyState: Batch already verified" + "PolygonZkEVM::activateEmergencyState: Batch already verified" ); // Check that the batch has been sequenced and this was the end of a sequence require( sequencedBatchNum <= lastBatchSequenced && sequencedBatches[sequencedBatchNum].sequencedTimestamp != 0, - "PolygonZKEVM::activateEmergencyState: Batch not sequenced or not end of sequence" + "PolygonZkEVM::activateEmergencyState: Batch not sequenced or not end of sequence" ); // Check that has been passed HALT_AGGREGATION_TIMEOUT since it was sequenced @@ -1417,17 +1417,17 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { sequencedBatches[sequencedBatchNum].sequencedTimestamp + HALT_AGGREGATION_TIMEOUT <= block.timestamp, - "PolygonZKEVM::activateEmergencyState: Aggregation halt timeout is not expired" + "PolygonZkEVM::activateEmergencyState: Aggregation halt timeout is not expired" ); } _activateEmergencyState(); } /** - * @notice Function to deactivate emergency state on both PoE and PolygonZKEVMBridge contrats + * @notice Function to deactivate emergency state on both PoE and PolygonZkEVMBridge contrats */ function deactivateEmergencyState() external ifEmergencyState onlyAdmin { - // Deactivate emergency state on PolygonZKEVMBridge + // Deactivate emergency state on PolygonZkEVMBridge bridgeAddress.deactivateEmergencyState(); // Deactivate emergency state on this contract @@ -1435,10 +1435,10 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { } /** - * @notice Internal function to activate emergency state on both PoE and PolygonZKEVM Bridge contrats + * @notice Internal function to activate emergency state on both PoE and PolygonZkEVM Bridge contrats */ function _activateEmergencyState() internal override { - // Activate emergency state on PolygonZKEVM Bridge + // Activate emergency state on PolygonZkEVM Bridge bridgeAddress.activateEmergencyState(); // Activate emergency state on this contract @@ -1514,12 +1514,12 @@ contract PolygonZKEVM is Initializable, OwnableUpgradeable, EmergencyManager { require( initNumBatch == 0 || oldAccInputHash != bytes32(0), - "PolygonZKEVM::getInputSnarkBytes: oldAccInputHash does not exist" + "PolygonZkEVM::getInputSnarkBytes: oldAccInputHash does not exist" ); require( newAccInputHash != bytes32(0), - "PolygonZKEVM::getInputSnarkBytes: newAccInputHash does not exist" + "PolygonZkEVM::getInputSnarkBytes: newAccInputHash does not exist" ); return diff --git a/contracts/PolygonZKEVMBridge.sol b/contracts/PolygonZkEVMBridge.sol similarity index 93% rename from contracts/PolygonZKEVMBridge.sol rename to contracts/PolygonZkEVMBridge.sol index 8f7b13f19..82c42b76c 100644 --- a/contracts/PolygonZKEVMBridge.sol +++ b/contracts/PolygonZkEVMBridge.sol @@ -5,20 +5,20 @@ pragma solidity 0.8.15; import "./lib/DepositContract.sol"; import "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol"; import "./lib/TokenWrapped.sol"; -import "./interfaces/IPolygonZKEVMGlobalExitRoot.sol"; +import "./interfaces/IPolygonZkEVMGlobalExitRoot.sol"; import "./interfaces/IBridgeMessageReceiver.sol"; -import "./interfaces/IPolygonZKEVMBridge.sol"; +import "./interfaces/IPolygonZkEVMBridge.sol"; import "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol"; import "./lib/EmergencyManager.sol"; /** - * PolygonZKEVMBridge that will be deployed on both networks Ethereum and Polygon zkEVM + * PolygonZkEVMBridge that will be deployed on both networks Ethereum and Polygon zkEVM * Contract responsible to manage the token interactions with other networks */ -contract PolygonZKEVMBridge is +contract PolygonZkEVMBridge is DepositContract, EmergencyManager, - IPolygonZKEVMBridge + IPolygonZkEVMBridge { using SafeERC20Upgradeable for IERC20Upgradeable; @@ -56,7 +56,7 @@ contract PolygonZKEVMBridge is mapping(address => TokenInformation) public wrappedTokenToTokenInfo; // Global Exit Root address - IPolygonZKEVMGlobalExitRoot public globalExitRootManager; + IPolygonZkEVMGlobalExitRoot public globalExitRootManager; // Polygon ZK-EVM address address public poeAddress; @@ -67,7 +67,7 @@ contract PolygonZKEVMBridge is */ function initialize( uint32 _networkID, - IPolygonZKEVMGlobalExitRoot _globalExitRootManager, + IPolygonZkEVMGlobalExitRoot _globalExitRootManager, address _poeAddress ) public virtual initializer { networkID = _networkID; @@ -75,10 +75,10 @@ contract PolygonZKEVMBridge is poeAddress = _poeAddress; } - modifier onlyPolygonZKEVM() { + modifier onlyPolygonZkEVM() { require( poeAddress == msg.sender, - "PolygonZKEVM::onlyPolygonZKEVM: only Polygon ZK-EVM contractt" + "PolygonZkEVM::onlyPolygonZkEVM: only Polygon ZK-EVM contractt" ); _; } @@ -134,7 +134,7 @@ contract PolygonZKEVMBridge is ) public payable virtual ifNotEmergencyState { require( destinationNetwork != networkID, - "PolygonZKEVMBridge::bridgeAsset: DESTINATION_CANT_BE_ITSELF" + "PolygonZkEVMBridge::bridgeAsset: DESTINATION_CANT_BE_ITSELF" ); address originTokenAddress; @@ -145,7 +145,7 @@ contract PolygonZKEVMBridge is // Ether transfer require( msg.value == amount, - "PolygonZKEVMBridge::bridgeAsset: AMOUNT_DOES_NOT_MATCH_MSG_VALUE" + "PolygonZkEVMBridge::bridgeAsset: AMOUNT_DOES_NOT_MATCH_MSG_VALUE" ); // Ether is treated as ether from mainnet @@ -224,7 +224,7 @@ contract PolygonZKEVMBridge is ) public payable ifNotEmergencyState { require( destinationNetwork != networkID, - "PolygonZKEVMBridge::bridgeMessage: DESTINATION_CANT_BE_ITSELF" + "PolygonZkEVMBridge::bridgeMessage: DESTINATION_CANT_BE_ITSELF" ); emit BridgeEvent( @@ -306,7 +306,7 @@ contract PolygonZKEVMBridge is ); require( success, - "PolygonZKEVMBridge::claimAsset: ETH_TRANSFER_FAILED" + "PolygonZkEVMBridge::claimAsset: ETH_TRANSFER_FAILED" ); } else { // Transfer tokens @@ -422,7 +422,7 @@ contract PolygonZKEVMBridge is (originAddress, originNetwork, metadata) ) ); - require(success, "PolygonZKEVMBridge::claimMessage: MESSAGE_FAILED"); + require(success, "PolygonZkEVMBridge::claimMessage: MESSAGE_FAILED"); emit ClaimEvent( index, @@ -486,7 +486,7 @@ contract PolygonZKEVMBridge is * @notice Function to activate the emergency state " Only can be called by the Polygon ZK-EVM in extreme situations */ - function activateEmergencyState() external onlyPolygonZKEVM { + function activateEmergencyState() external onlyPolygonZkEVM { _activateEmergencyState(); } @@ -494,7 +494,7 @@ contract PolygonZKEVMBridge is * @notice Function to deactivate the emergency state " Only can be called by the Polygon ZK-EVM */ - function deactivateEmergencyState() external onlyPolygonZKEVM { + function deactivateEmergencyState() external onlyPolygonZkEVM { _deactivateEmergencyState(); } @@ -528,7 +528,7 @@ contract PolygonZKEVMBridge is // Check nullifier require( !isClaimed(index), - "PolygonZKEVMBridge::_verifyLeaf: ALREADY_CLAIMED" + "PolygonZkEVMBridge::_verifyLeaf: ALREADY_CLAIMED" ); // Check timestamp where the global exit root was set @@ -539,13 +539,13 @@ contract PolygonZKEVMBridge is require( timestampGlobalExitRoot != 0, - "PolygonZKEVMBridge::_verifyLeaf: GLOBAL_EXIT_ROOT_INVALID" + "PolygonZkEVMBridge::_verifyLeaf: GLOBAL_EXIT_ROOT_INVALID" ); // Destination network must be networkID require( destinationNetwork == networkID, - "PolygonZKEVMBridge::_verifyLeaf: DESTINATION_NETWORK_DOES_NOT_MATCH" + "PolygonZkEVMBridge::_verifyLeaf: DESTINATION_NETWORK_DOES_NOT_MATCH" ); bytes32 claimRoot; @@ -571,7 +571,7 @@ contract PolygonZKEVMBridge is index, claimRoot ), - "PolygonZKEVMBridge::_verifyLeaf: SMT_INVALID" + "PolygonZkEVMBridge::_verifyLeaf: SMT_INVALID" ); } @@ -646,15 +646,15 @@ contract PolygonZKEVMBridge is ); require( owner == msg.sender, - "PolygonZKEVMBridge::_permit: PERMIT_OWNER_MUST_BE_THE_SENDER" + "PolygonZkEVMBridge::_permit: PERMIT_OWNER_MUST_BE_THE_SENDER" ); require( spender == address(this), - "PolygonZKEVMBridge::_permit: SPENDER_MUST_BE_THIS" + "PolygonZkEVMBridge::_permit: SPENDER_MUST_BE_THIS" ); require( value == amount, - "PolygonZKEVMBridge::_permit: PERMIT_AMOUNT_DOES_NOT_MATCH" + "PolygonZkEVMBridge::_permit: PERMIT_AMOUNT_DOES_NOT_MATCH" ); // we call without checking the result, in case it fails and he doesn't have enough balance @@ -676,7 +676,7 @@ contract PolygonZKEVMBridge is } else { require( sig == _PERMIT_SIGNATURE_DAI, - "PolygonZKEVMBridge::_permit: NOT_VALID_CALL" + "PolygonZkEVMBridge::_permit: NOT_VALID_CALL" ); ( @@ -703,11 +703,11 @@ contract PolygonZKEVMBridge is ); require( holder == msg.sender, - "PolygonZKEVMBridge::_permit: PERMIT_OWNER_MUST_BE_THE_SENDER" + "PolygonZkEVMBridge::_permit: PERMIT_OWNER_MUST_BE_THE_SENDER" ); require( spender == address(this), - "PolygonZKEVMBridge::_permit: SPENDER_MUST_BE_THIS" + "PolygonZkEVMBridge::_permit: SPENDER_MUST_BE_THIS" ); // we call without checking the result, in case it fails and he doesn't have enough balance diff --git a/contracts/PolygonZKEVMGlobalExitRoot.sol b/contracts/PolygonZkEVMGlobalExitRoot.sol similarity index 88% rename from contracts/PolygonZKEVMGlobalExitRoot.sol rename to contracts/PolygonZkEVMGlobalExitRoot.sol index f10c7414b..bb4068d6c 100644 --- a/contracts/PolygonZKEVMGlobalExitRoot.sol +++ b/contracts/PolygonZkEVMGlobalExitRoot.sol @@ -2,13 +2,16 @@ pragma solidity 0.8.15; -import "./interfaces/IPolygonZKEVMGlobalExitRoot.sol"; +import "./interfaces/IPolygonZkEVMGlobalExitRoot.sol"; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; /** * Contract responsible for managing the exit roots across multiple networks */ -contract PolygonZKEVMGlobalExitRoot is IPolygonZKEVMGlobalExitRoot, Initializable { +contract PolygonZkEVMGlobalExitRoot is + IPolygonZkEVMGlobalExitRoot, + Initializable +{ // Rollup exit root, this will be updated every time a batch is verified bytes32 public lastRollupExitRoot; @@ -18,7 +21,7 @@ contract PolygonZKEVMGlobalExitRoot is IPolygonZKEVMGlobalExitRoot, Initializabl // Store every global exit root: Root --> rootNum mapping(bytes32 => uint256) public globalExitRootMap; - // PolygonZKEVMBridge address + // PolygonZkEVMBridge address address public bridgeAddress; // Rollup contract address @@ -34,7 +37,7 @@ contract PolygonZKEVMGlobalExitRoot is IPolygonZKEVMGlobalExitRoot, Initializabl /** * @param _rollupAddress Rollup contract address - * @param _bridgeAddress PolygonZKEVMBridge contract address + * @param _bridgeAddress PolygonZkEVMBridge contract address */ function initialize( address _rollupAddress, @@ -51,7 +54,7 @@ contract PolygonZKEVMGlobalExitRoot is IPolygonZKEVMGlobalExitRoot, Initializabl function updateExitRoot(bytes32 newRoot) external { require( msg.sender == rollupAddress || msg.sender == bridgeAddress, - "PolygonZKEVMGlobalExitRoot::updateExitRoot: ONLY_ALLOWED_CONTRACTS" + "PolygonZkEVMGlobalExitRoot::updateExitRoot: ONLY_ALLOWED_CONTRACTS" ); if (msg.sender == rollupAddress) { lastRollupExitRoot = newRoot; diff --git a/contracts/PolygonZKEVMGlobalExitRootL2.sol b/contracts/PolygonZkEVMGlobalExitRootL2.sol similarity index 97% rename from contracts/PolygonZKEVMGlobalExitRootL2.sol rename to contracts/PolygonZkEVMGlobalExitRootL2.sol index cfde26b10..ae3f2f5eb 100644 --- a/contracts/PolygonZKEVMGlobalExitRootL2.sol +++ b/contracts/PolygonZkEVMGlobalExitRootL2.sol @@ -8,7 +8,7 @@ import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; * Contract responsible for managing the exit roots for the L2 and global exit roots * The special circuit variables will be accesed and updated directly by the circuit */ -contract PolygonZKEVMGlobalExitRootL2 { +contract PolygonZkEVMGlobalExitRootL2 { ///////////////////////////// // Special circuit variables //////////////////////////// diff --git a/contracts/PolygonZKEVMTimelock.sol b/contracts/PolygonZkEVMTimelock.sol similarity index 84% rename from contracts/PolygonZKEVMTimelock.sol rename to contracts/PolygonZkEVMTimelock.sol index 8ebc464f9..d54c2d4e5 100644 --- a/contracts/PolygonZKEVMTimelock.sol +++ b/contracts/PolygonZkEVMTimelock.sol @@ -2,16 +2,16 @@ pragma solidity 0.8.15; import "@openzeppelin/contracts/governance/TimelockController.sol"; -import "./PolygonZKEVM.sol"; +import "./PolygonZkEVM.sol"; /** * @dev Contract module which acts as a timelocked controller. * This gives time for users of the controlled contract to exit before a potentially dangerous maintenance operation is applied. * If emergency mode of the zkevm contract system is active, this timelock have no delay. */ -contract PolygonZKEVMTimelock is TimelockController { +contract PolygonZkEVMTimelock is TimelockController { // Polygon ZK-EVM address. Will be used to check if it's on emergency state. - PolygonZKEVM public polygonZKEVM; + PolygonZkEVM public polygonZkEVM; /** * @notice Constructor of timelock @@ -19,16 +19,16 @@ contract PolygonZKEVMTimelock is TimelockController { * @param proposers accounts to be granted proposer and canceller roles * @param executors accounts to be granted executor role * @param admin optional account to be granted admin role; disable with zero address - * @param _polygonZKEVM PoE address + * @param _polygonZkEVM PoE address **/ constructor( uint256 minDelay, address[] memory proposers, address[] memory executors, address admin, - PolygonZKEVM _polygonZKEVM + PolygonZkEVM _polygonZkEVM ) TimelockController(minDelay, proposers, executors, admin) { - polygonZKEVM = _polygonZKEVM; + polygonZkEVM = _polygonZkEVM; } /** @@ -38,7 +38,7 @@ contract PolygonZKEVMTimelock is TimelockController { * If Polygon ZK-EVM is on emergency state the minDelay will be 0 instead. */ function getMinDelay() public view override returns (uint256 duration) { - if (polygonZKEVM.isEmergencyState()) { + if (polygonZkEVM.isEmergencyState()) { return 0; } else { return super.getMinDelay(); diff --git a/contracts/interfaces/IBridgeMessageReceiver.sol b/contracts/interfaces/IBridgeMessageReceiver.sol index 7d1082b11..994e32da1 100644 --- a/contracts/interfaces/IBridgeMessageReceiver.sol +++ b/contracts/interfaces/IBridgeMessageReceiver.sol @@ -3,7 +3,7 @@ pragma solidity 0.8.15; /** - * @dev Define interface for PolygonZKEVM Bridge message receiver + * @dev Define interface for PolygonZkEVM Bridge message receiver */ interface IBridgeMessageReceiver { function onMessageReceived( diff --git a/contracts/interfaces/IPolygonZKEVMBridge.sol b/contracts/interfaces/IPolygonZkEVMBridge.sol similarity index 97% rename from contracts/interfaces/IPolygonZKEVMBridge.sol rename to contracts/interfaces/IPolygonZkEVMBridge.sol index 0977caee0..4e17d02c5 100644 --- a/contracts/interfaces/IPolygonZKEVMBridge.sol +++ b/contracts/interfaces/IPolygonZkEVMBridge.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.15; -interface IPolygonZKEVMBridge { +interface IPolygonZkEVMBridge { function bridgeAsset( address token, uint32 destinationNetwork, diff --git a/contracts/interfaces/IPolygonZKEVMGlobalExitRoot.sol b/contracts/interfaces/IPolygonZkEVMGlobalExitRoot.sol similarity index 58% rename from contracts/interfaces/IPolygonZKEVMGlobalExitRoot.sol rename to contracts/interfaces/IPolygonZkEVMGlobalExitRoot.sol index ff1717598..5b4c17a7f 100644 --- a/contracts/interfaces/IPolygonZKEVMGlobalExitRoot.sol +++ b/contracts/interfaces/IPolygonZkEVMGlobalExitRoot.sol @@ -2,12 +2,12 @@ pragma solidity 0.8.15; -interface IPolygonZKEVMGlobalExitRoot { +interface IPolygonZkEVMGlobalExitRoot { function getLastGlobalExitRoot() external view returns (bytes32); function updateExitRoot(bytes32 newRollupExitRoot) external; - function globalExitRootMap(bytes32 globalExitRootNum) - external - returns (uint256); + function globalExitRootMap( + bytes32 globalExitRootNum + ) external returns (uint256); } diff --git a/contracts/lib/TokenWrapped.sol b/contracts/lib/TokenWrapped.sol index 3115e65d5..cbad487fb 100644 --- a/contracts/lib/TokenWrapped.sol +++ b/contracts/lib/TokenWrapped.sol @@ -25,7 +25,7 @@ contract TokenWrapped is ERC20 { // Domain separator calculated on deployment bytes32 private immutable _DEPLOYMENT_DOMAIN_SEPARATOR; - // PolygonZKEVM Bridge address + // PolygonZkEVM Bridge address address public bridgeAddress; // Decimals diff --git a/contracts/mocks/PolygonZKEVMBridgeMock.sol b/contracts/mocks/PolygonZkEVMBridgeMock.sol similarity index 86% rename from contracts/mocks/PolygonZKEVMBridgeMock.sol rename to contracts/mocks/PolygonZkEVMBridgeMock.sol index 802ddc41c..4c3ee49af 100644 --- a/contracts/mocks/PolygonZKEVMBridgeMock.sol +++ b/contracts/mocks/PolygonZkEVMBridgeMock.sol @@ -1,13 +1,13 @@ // SPDX-License-Identifier: AGPL-3.0 pragma solidity 0.8.15; -import "../PolygonZKEVMBridge.sol"; +import "../PolygonZkEVMBridge.sol"; import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; /** - * PolygonZKEVMBridge that will be deployed on both networks Ethereum and Polygon zkEVM + * PolygonZkEVMBridge that will be deployed on both networks Ethereum and Polygon zkEVM * Contract responsible to manage the token interactions with other networks */ -contract PolygonZKEVMBridgeMock is PolygonZKEVMBridge, OwnableUpgradeable { +contract PolygonZkEVMBridgeMock is PolygonZkEVMBridge, OwnableUpgradeable { uint256 public maxEtherBridge; /** @@ -16,7 +16,7 @@ contract PolygonZKEVMBridgeMock is PolygonZKEVMBridge, OwnableUpgradeable { */ function initialize( uint32 _networkID, - IPolygonZKEVMGlobalExitRoot _globalExitRootManager, + IPolygonZkEVMGlobalExitRoot _globalExitRootManager, address _poeAddress ) public override initializer { networkID = _networkID; @@ -54,7 +54,7 @@ contract PolygonZKEVMBridgeMock is PolygonZKEVMBridge, OwnableUpgradeable { ) public payable override { require( msg.value <= maxEtherBridge, - "PolygonZKEVMBridge::bridgeAsset: Cannot bridge more than maxEtherBridge" + "PolygonZkEVMBridge::bridgeAsset: Cannot bridge more than maxEtherBridge" ); super.bridgeAsset( token, diff --git a/contracts/mocks/PolygonZKEVMGlobalExitRootL2Mock.sol b/contracts/mocks/PolygonZkEVMGlobalExitRootL2Mock.sol similarity index 76% rename from contracts/mocks/PolygonZKEVMGlobalExitRootL2Mock.sol rename to contracts/mocks/PolygonZkEVMGlobalExitRootL2Mock.sol index 80a942930..9f4de15b5 100644 --- a/contracts/mocks/PolygonZKEVMGlobalExitRootL2Mock.sol +++ b/contracts/mocks/PolygonZkEVMGlobalExitRootL2Mock.sol @@ -1,19 +1,19 @@ // SPDX-License-Identifier: AGPL-3.0 pragma solidity 0.8.15; -import "../PolygonZKEVMGlobalExitRootL2.sol"; +import "../PolygonZkEVMGlobalExitRootL2.sol"; /** * Contract responsible for managing the exit roots across multiple networks */ -contract PolygonZKEVMGlobalExitRootL2Mock is PolygonZKEVMGlobalExitRootL2 { +contract PolygonZkEVMGlobalExitRootL2Mock is PolygonZkEVMGlobalExitRootL2 { /** - * @param _bridgeAddress PolygonZKEVM Bridge contract address + * @param _bridgeAddress PolygonZkEVM Bridge contract address */ constructor( address _bridgeAddress - ) PolygonZKEVMGlobalExitRootL2(_bridgeAddress) {} + ) PolygonZkEVMGlobalExitRootL2(_bridgeAddress) {} /** * @notice Set globalExitRoot diff --git a/contracts/mocks/PolygonZKEVMGlobalExitRootMock.sol b/contracts/mocks/PolygonZkEVMGlobalExitRootMock.sol similarity index 82% rename from contracts/mocks/PolygonZKEVMGlobalExitRootMock.sol rename to contracts/mocks/PolygonZkEVMGlobalExitRootMock.sol index adf6f5340..7d23b42bf 100644 --- a/contracts/mocks/PolygonZKEVMGlobalExitRootMock.sol +++ b/contracts/mocks/PolygonZkEVMGlobalExitRootMock.sol @@ -1,16 +1,16 @@ // SPDX-License-Identifier: AGPL-3.0 pragma solidity 0.8.15; -import "../PolygonZKEVMGlobalExitRoot.sol"; +import "../PolygonZkEVMGlobalExitRoot.sol"; /** * Contract responsible for managing the exit roots across multiple networks */ -contract PolygonZKEVMGlobalExitRootMock is PolygonZKEVMGlobalExitRoot { +contract PolygonZkEVMGlobalExitRootMock is PolygonZkEVMGlobalExitRoot { /** * @param _rollupAddress Rollup contract address - * @param _bridgeAddress PolygonZKEVM Bridge contract address + * @param _bridgeAddress PolygonZkEVM Bridge contract address */ constructor(address _rollupAddress, address _bridgeAddress) { initialize(_rollupAddress, _bridgeAddress); diff --git a/contracts/mocks/PolygonZKEVMMock.sol b/contracts/mocks/PolygonZkEVMMock.sol similarity index 91% rename from contracts/mocks/PolygonZKEVMMock.sol rename to contracts/mocks/PolygonZkEVMMock.sol index 017d3db1c..c14d290c4 100644 --- a/contracts/mocks/PolygonZKEVMMock.sol +++ b/contracts/mocks/PolygonZkEVMMock.sol @@ -1,15 +1,15 @@ // SPDX-License-Identifier: AGPL-3.0 pragma solidity 0.8.15; -import "../PolygonZKEVM.sol"; +import "../PolygonZkEVM.sol"; /** * Contract responsible for managing the state and the updates of the L2 network * There will be sequencer, which are able to send transactions. That transactions will be stored in the contract. * The aggregators are forced to process and validate the sequencers transactions in the same order by using a verifier. - * To enter and exit of the L2 network will be used a PolygonZKEVM Bridge smart contract + * To enter and exit of the L2 network will be used a PolygonZkEVM Bridge smart contract */ -contract PolygonZKEVMMock is PolygonZKEVM { +contract PolygonZkEVMMock is PolygonZkEVM { /** * @notice calculate accumulate input hash from parameters * @param currentAccInputHash Accumulate input hash @@ -61,7 +61,7 @@ contract PolygonZKEVMMock is PolygonZKEVM { // Already consolidated pending states can be used aswell require( pendingStateNum <= lastPendingState, - "PolygonZKEVM::verifyBatches: pendingStateNum must be less or equal than lastPendingState" + "PolygonZkEVM::verifyBatches: pendingStateNum must be less or equal than lastPendingState" ); // Check choosen pending state @@ -75,27 +75,27 @@ contract PolygonZKEVMMock is PolygonZKEVM { // Check initNumBatch matches the pending state require( initNumBatch == currentPendingState.lastVerifiedBatch, - "PolygonZKEVM::verifyBatches: initNumBatch must match the pending state batch" + "PolygonZkEVM::verifyBatches: initNumBatch must match the pending state batch" ); } else { // Use consolidated state oldStateRoot = batchNumToStateRoot[initNumBatch]; require( oldStateRoot != bytes32(0), - "PolygonZKEVM::verifyBatches: initNumBatch state root does not exist" + "PolygonZkEVM::verifyBatches: initNumBatch state root does not exist" ); // Check initNumBatch is inside the range require( initNumBatch <= currentLastVerifiedBatch, - "PolygonZKEVM::verifyBatches: initNumBatch must be less or equal than currentLastVerifiedBatch" + "PolygonZkEVM::verifyBatches: initNumBatch must be less or equal than currentLastVerifiedBatch" ); } // Check final batch require( finalNewBatch > currentLastVerifiedBatch, - "PolygonZKEVM::verifyBatches: finalNewBatch must be bigger than currentLastVerifiedBatch" + "PolygonZkEVM::verifyBatches: finalNewBatch must be bigger than currentLastVerifiedBatch" ); // Get snark bytes @@ -202,7 +202,7 @@ contract PolygonZKEVMMock is PolygonZKEVM { // Already consolidated pending states can be used aswell require( pendingStateNum <= lastPendingState, - "PolygonZKEVM::verifyBatches: pendingStateNum must be less or equal than lastPendingState" + "PolygonZkEVM::verifyBatches: pendingStateNum must be less or equal than lastPendingState" ); // Check choosen pending state @@ -216,27 +216,27 @@ contract PolygonZKEVMMock is PolygonZKEVM { // Check initNumBatch matches the pending state require( initNumBatch == currentPendingState.lastVerifiedBatch, - "PolygonZKEVM::verifyBatches: initNumBatch must match the pending state batch" + "PolygonZkEVM::verifyBatches: initNumBatch must match the pending state batch" ); } else { // Use consolidated state oldStateRoot = batchNumToStateRoot[initNumBatch]; require( oldStateRoot != bytes32(0), - "PolygonZKEVM::verifyBatches: initNumBatch state root does not exist" + "PolygonZkEVM::verifyBatches: initNumBatch state root does not exist" ); // Check initNumBatch is inside the range require( initNumBatch <= currentLastVerifiedBatch, - "PolygonZKEVM::verifyBatches: initNumBatch must be less or equal than currentLastVerifiedBatch" + "PolygonZkEVM::verifyBatches: initNumBatch must be less or equal than currentLastVerifiedBatch" ); } // Check final batch require( finalNewBatch > currentLastVerifiedBatch, - "PolygonZKEVM::verifyBatches: finalNewBatch must be bigger than currentLastVerifiedBatch" + "PolygonZkEVM::verifyBatches: finalNewBatch must be bigger than currentLastVerifiedBatch" ); // Get snark bytes @@ -254,7 +254,7 @@ contract PolygonZKEVMMock is PolygonZKEVM { // // Verify proof // require( // rollupVerifier.verifyProof(proofA, proofB, proofC, [inputSnark]), - // "PolygonZKEVM::verifyBatches: INVALID_PROOF" + // "PolygonZkEVM::verifyBatches: INVALID_PROOF" // ); // // Get MATIC reward diff --git a/deployment/README.md b/deployment/README.md index 8b78857ff..f34ca63eb 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -51,7 +51,7 @@ npm run verify:PoE2_0:goerli - `maxPriorityFeePerGas`:string, maxPriorityFeePerGas of all txs - `multiplierGas`: number, Gas multiplier. If maxFeePerGas and maxPriorityFeePerGas are set, will not take effect - `trustedSequencerPvtKey`: string, Trusted sequencer pvtKey in order to approve the matic tokens -- `PolygonZKEVMBridgeMock`:Boolean, Wheather the PolygonZKEVMBridge will be mock or not ( the mock version has a ether limitation on deposits) +- `PolygonZkEVMBridgeMock`:Boolean, Wheather the PolygonZkEVMBridge will be mock or not ( the mock version has a ether limitation on deposits) - `admin`:address, Admin address - `trustedAggregator`:address, Trusted aggregator address diff --git a/deployment/deployPoE_v2-0.js b/deployment/deployPoE_v2-0.js index 25892af47..f6654b246 100644 --- a/deployment/deployPoE_v2-0.js +++ b/deployment/deployPoE_v2-0.js @@ -100,95 +100,95 @@ async function main() { */ // deploy global exit root manager - const PolygonZKEVMGlobalExitRootFactory = await ethers.getContractFactory('polygonZKEVMGlobalExitRoot', deployer); - let polygonZKEVMGlobalExitRoot; + const PolygonZkEVMGlobalExitRootFactory = await ethers.getContractFactory('polygonZkEVMGlobalExitRoot', deployer); + let polygonZkEVMGlobalExitRoot; for (let i = 0; i < attemptsDeployProxy; i++) { try { - polygonZKEVMGlobalExitRoot = await upgrades.deployProxy(PolygonZKEVMGlobalExitRootFactory, [], { initializer: false }); + polygonZkEVMGlobalExitRoot = await upgrades.deployProxy(PolygonZkEVMGlobalExitRootFactory, [], { initializer: false }); break; } catch (error) { console.log(`attempt ${i}`); - console.log('upgrades.deployProxy of polygonZKEVMGlobalExitRoot ', error.error.reason); + console.log('upgrades.deployProxy of polygonZkEVMGlobalExitRoot ', error.error.reason); } // reach limits of attempts if (i + 1 === attemptsDeployProxy) { - throw new Error('polygonZKEVMGlobalExitRoot contract has not been deployed'); + throw new Error('polygonZkEVMGlobalExitRoot contract has not been deployed'); } } console.log('#######################\n'); - console.log('polygonZKEVMGlobalExitRoot deployed to:', polygonZKEVMGlobalExitRoot.address); + console.log('polygonZkEVMGlobalExitRoot deployed to:', polygonZkEVMGlobalExitRoot.address); - // deploy PolygonZKEVMBridge - let polygonZKEVMBridgeFactory; - if (deployParameters.PolygonZKEVMBridgeMock) { - polygonZKEVMBridgeFactory = await ethers.getContractFactory('PolygonZKEVMBridgeMock', deployer); + // deploy PolygonZkEVMBridge + let polygonZkEVMBridgeFactory; + if (deployParameters.PolygonZkEVMBridgeMock) { + polygonZkEVMBridgeFactory = await ethers.getContractFactory('PolygonZkEVMBridgeMock', deployer); } else { - polygonZKEVMBridgeFactory = await ethers.getContractFactory('PolygonZKEVMBridge', deployer); + polygonZkEVMBridgeFactory = await ethers.getContractFactory('PolygonZkEVMBridge', deployer); } - let polygonZKEVMBridgeContract; + let polygonZkEVMBridgeContract; for (let i = 0; i < attemptsDeployProxy; i++) { try { - polygonZKEVMBridgeContract = await upgrades.deployProxy(polygonZKEVMBridgeFactory, [], { initializer: false }); + polygonZkEVMBridgeContract = await upgrades.deployProxy(polygonZkEVMBridgeFactory, [], { initializer: false }); break; } catch (error) { console.log(`attempt ${i}`); - console.log('upgrades.deployProxy of polygonZKEVMBridgeContract ', error.error.reason); + console.log('upgrades.deployProxy of polygonZkEVMBridgeContract ', error.error.reason); } // reach limits of attempts if (i + 1 === attemptsDeployProxy) { - throw new Error('PolygonZKEVMBridge contract has not been deployed'); + throw new Error('PolygonZkEVMBridge contract has not been deployed'); } } console.log('#######################\n'); - console.log('PolygonZKEVMBridge deployed to:', polygonZKEVMBridgeContract.address); + console.log('PolygonZkEVMBridge deployed to:', polygonZkEVMBridgeContract.address); // deploy PoE - const PolygonZKEVMFactory = await ethers.getContractFactory('PolygonZKEVMMock', deployer); - let polygonZKEVMContract; + const PolygonZkEVMFactory = await ethers.getContractFactory('PolygonZkEVMMock', deployer); + let polygonZkEVMContract; for (let i = 0; i < attemptsDeployProxy; i++) { try { - polygonZKEVMContract = await upgrades.deployProxy(PolygonZKEVMFactory, [], { initializer: false }); + polygonZkEVMContract = await upgrades.deployProxy(PolygonZkEVMFactory, [], { initializer: false }); break; } catch (error) { console.log(`attempt ${i}`); - console.log('upgrades.deployProxy of polygonZKEVMContract ', error.error.reason); + console.log('upgrades.deployProxy of polygonZkEVMContract ', error.error.reason); } // reach limits of attempts if (i + 1 === attemptsDeployProxy) { - throw new Error('PolygonZKEVM contract has not been deployed'); + throw new Error('PolygonZkEVM contract has not been deployed'); } } console.log('#######################\n'); - console.log('Polygon ZK-EVM deployed to:', polygonZKEVMContract.address); + console.log('Polygon ZK-EVM deployed to:', polygonZkEVMContract.address); /* - * Initialize polygonZKEVMGlobalExitRoot + * Initialize polygonZkEVMGlobalExitRoot */ - await polygonZKEVMGlobalExitRoot.initialize(polygonZKEVMContract.address, polygonZKEVMBridgeContract.address); + await polygonZkEVMGlobalExitRoot.initialize(polygonZkEVMContract.address, polygonZkEVMBridgeContract.address); /* - * Initialize PolygonZKEVMBridge + * Initialize PolygonZkEVMBridge */ - await (await polygonZKEVMBridgeContract.initialize( + await (await polygonZkEVMBridgeContract.initialize( networkIDMainnet, - polygonZKEVMGlobalExitRoot.address, - polygonZKEVMContract.address, + polygonZkEVMGlobalExitRoot.address, + polygonZkEVMContract.address, )).wait(); console.log('\n#######################'); - console.log('##### Checks PolygonZKEVMBridge #####'); + console.log('##### Checks PolygonZkEVMBridge #####'); console.log('#######################'); - console.log('PolygonZKEVMGlobalExitRootAddress:', await polygonZKEVMBridgeContract.globalExitRootManager()); - console.log('networkID:', await polygonZKEVMBridgeContract.networkID()); - console.log('poeAddress:', await polygonZKEVMBridgeContract.poeAddress()); - console.log('owner:', await polygonZKEVMBridgeContract.owner()); + console.log('PolygonZkEVMGlobalExitRootAddress:', await polygonZkEVMBridgeContract.globalExitRootManager()); + console.log('networkID:', await polygonZkEVMBridgeContract.networkID()); + console.log('poeAddress:', await polygonZkEVMBridgeContract.poeAddress()); + console.log('owner:', await polygonZkEVMBridgeContract.owner()); /* * Initialize Polygon ZK-EVM @@ -200,10 +200,10 @@ async function main() { console.log('##### Deployment Polygon ZK-EVM #####'); console.log('#######################'); console.log('deployer:', deployer.address); - console.log('PolygonZKEVMGlobalExitRootAddress:', polygonZKEVMGlobalExitRoot.address); + console.log('PolygonZkEVMGlobalExitRootAddress:', polygonZkEVMGlobalExitRoot.address); console.log('maticTokenAddress:', maticTokenContract.address); console.log('verifierAddress:', verifierContract.address); - console.log('polygonZKEVMBridgeContract:', polygonZKEVMBridgeContract.address); + console.log('polygonZkEVMBridgeContract:', polygonZkEVMBridgeContract.address); console.log('admin:', admin); console.log('chainID:', chainID); @@ -217,11 +217,11 @@ async function main() { console.log('trustedSequencerURL:', trustedSequencerURL); console.log('networkName:', networkName); - await (await polygonZKEVMContract.initialize( - polygonZKEVMGlobalExitRoot.address, + await (await polygonZkEVMContract.initialize( + polygonZkEVMGlobalExitRoot.address, maticTokenContract.address, verifierContract.address, - polygonZKEVMBridgeContract.address, + polygonZkEVMBridgeContract.address, { admin, chainID, @@ -236,28 +236,28 @@ async function main() { networkName, )).wait(); - const deploymentBlockNumber = (await polygonZKEVMContract.deployTransaction.wait()).blockNumber; + const deploymentBlockNumber = (await polygonZkEVMContract.deployTransaction.wait()).blockNumber; console.log('\n#######################'); console.log('##### Checks PoE #####'); console.log('#######################'); - console.log('PolygonZKEVMGlobalExitRootAddress:', await polygonZKEVMContract.globalExitRootManager()); - console.log('maticTokenAddress:', await polygonZKEVMContract.matic()); - console.log('verifierAddress:', await polygonZKEVMContract.rollupVerifier()); - console.log('polygonZKEVMBridgeContract:', await polygonZKEVMContract.bridgeAddress()); - - console.log('admin:', await polygonZKEVMContract.admin()); - console.log('chainID:', await polygonZKEVMContract.chainID()); - console.log('trustedSequencer:', await polygonZKEVMContract.trustedSequencer()); - console.log('pendingStateTimeout:', await polygonZKEVMContract.pendingStateTimeout()); - console.log('forceBatchAllowed:', await polygonZKEVMContract.forceBatchAllowed()); - console.log('trustedAggregator:', await polygonZKEVMContract.trustedAggregator()); - console.log('trustedAggregatorTimeout:', await polygonZKEVMContract.trustedAggregatorTimeout()); - - console.log('genesiRoot:', await polygonZKEVMContract.batchNumToStateRoot(0)); - console.log('trustedSequencerURL:', await polygonZKEVMContract.trustedSequencerURL()); - console.log('networkName:', await polygonZKEVMContract.networkName()); - console.log('owner:', await polygonZKEVMContract.owner()); + console.log('PolygonZkEVMGlobalExitRootAddress:', await polygonZkEVMContract.globalExitRootManager()); + console.log('maticTokenAddress:', await polygonZkEVMContract.matic()); + console.log('verifierAddress:', await polygonZkEVMContract.rollupVerifier()); + console.log('polygonZkEVMBridgeContract:', await polygonZkEVMContract.bridgeAddress()); + + console.log('admin:', await polygonZkEVMContract.admin()); + console.log('chainID:', await polygonZkEVMContract.chainID()); + console.log('trustedSequencer:', await polygonZkEVMContract.trustedSequencer()); + console.log('pendingStateTimeout:', await polygonZkEVMContract.pendingStateTimeout()); + console.log('forceBatchAllowed:', await polygonZkEVMContract.forceBatchAllowed()); + console.log('trustedAggregator:', await polygonZkEVMContract.trustedAggregator()); + console.log('trustedAggregatorTimeout:', await polygonZkEVMContract.trustedAggregatorTimeout()); + + console.log('genesiRoot:', await polygonZkEVMContract.batchNumToStateRoot(0)); + console.log('trustedSequencerURL:', await polygonZkEVMContract.trustedSequencerURL()); + console.log('networkName:', await polygonZkEVMContract.networkName()); + console.log('owner:', await polygonZkEVMContract.owner()); // fund sequencer account with tokens and ether if it have less than 0.1 ether. const balanceEther = await ethers.provider.getBalance(trustedSequencer); @@ -285,12 +285,12 @@ async function main() { // approve tokens if (deployParameters.trustedSequencerPvtKey) { const trustedSequencerWallet = new ethers.Wallet(deployParameters.trustedSequencerPvtKey, currentProvider); - await maticTokenContract.connect(trustedSequencerWallet).approve(polygonZKEVMContract.address, ethers.constants.MaxUint256); + await maticTokenContract.connect(trustedSequencerWallet).approve(polygonZkEVMContract.address, ethers.constants.MaxUint256); } const outputJson = { - polygonZKEVMAddress: polygonZKEVMContract.address, - PolygonZKEVMBridgeAddress: polygonZKEVMBridgeContract.address, - PolygonZKEVMGlobalExitRootAddress: polygonZKEVMGlobalExitRoot.address, + polygonZkEVMAddress: polygonZkEVMContract.address, + PolygonZkEVMBridgeAddress: polygonZkEVMBridgeContract.address, + PolygonZkEVMGlobalExitRootAddress: polygonZkEVMGlobalExitRoot.address, maticTokenAddress: maticTokenContract.address, verifierAddress: verifierContract.address, deployerAddress: deployer.address, diff --git a/deployment/deploy_parameters.json.example b/deployment/deploy_parameters.json.example index e04c0c8e7..b07d3b66f 100644 --- a/deployment/deploy_parameters.json.example +++ b/deployment/deploy_parameters.json.example @@ -10,7 +10,7 @@ "maxPriorityFeePerGas":0, "multiplierGas": 0, "trustedSequencerPvtKey":"", - "PolygonZKEVMBridgeMock":false, + "PolygonZkEVMBridgeMock":false, "admin":"0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D", "trustedAggregator":"0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D" } \ No newline at end of file diff --git a/deployment/genesis-gen.json b/deployment/genesis-gen.json index d62d7948d..14e0cf157 100644 --- a/deployment/genesis-gen.json +++ b/deployment/genesis-gen.json @@ -32,7 +32,7 @@ "0x9D98DeAbC42dd696Deb9e40b4f1CAB7dDBF55988" ] }, - "contractName": "PolygonZKEVMGlobalExitRootL2", + "contractName": "PolygonZkEVMGlobalExitRootL2", "reason": "" }, { @@ -42,7 +42,7 @@ "gasLimit": 10000000, "gasPrice": "0", "chainId": 1000, - "contractName": "PolygonZKEVMBridge" + "contractName": "PolygonZkEVMBridge" }, { "from": "0xC949254d682D8c9ad5682521675b8F43b102aec4", @@ -58,7 +58,7 @@ "0xAE4bB80bE56B819606589DE61d5ec3b522EEB032", "0x0000000000000000000000000000000000000000" ], - "contractName": "PolygonZKEVMBridge" + "contractName": "PolygonZkEVMBridge" } ], "timestamp": 1944498031 diff --git a/deployment/genesis.json b/deployment/genesis.json index f09f2ea12..35f31ae64 100644 --- a/deployment/genesis.json +++ b/deployment/genesis.json @@ -12,7 +12,7 @@ "0x0000000000000000000000000000000000000000000000000000000000000087": "0x01", "0x000000000000000000000000000000000000000000000000000000000000008b": "0xae4bb80be56b819606589de61d5ec3b522eeb032" }, - "contractName": "PolygonZKEVMBridge" + "contractName": "PolygonZkEVMBridge" }, { "balance": "0", @@ -28,7 +28,7 @@ "storage": { "0x0000000000000000000000000000000000000000000000000000000000000002": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988" }, - "contractName": "PolygonZKEVMGlobalExitRootL2" + "contractName": "PolygonZkEVMGlobalExitRootL2" } ] } \ No newline at end of file diff --git a/deployment/upgradePoE.js b/deployment/upgradePoE.js index aae6ab0d2..a4c6e41b0 100644 --- a/deployment/upgradePoE.js +++ b/deployment/upgradePoE.js @@ -7,11 +7,11 @@ async function main() { // compìle contracts await hre.run('compile'); - const polygonZKEVMFactory = await ethers.getContractFactory('PolygonZKEVMMock'); - const polygonZKEVMProxyAddress = '0xfefefefefefefefefefefefee'; + const polygonZkEVMFactory = await ethers.getContractFactory('PolygonZkEVMMock'); + const polygonZkEVMProxyAddress = '0xfefefefefefefefefefefefee'; // Upgrade - const tx = await upgrades.upgradeProxy(polygonZKEVMProxyAddress, polygonZKEVMFactory); + const tx = await upgrades.upgradeProxy(polygonZkEVMProxyAddress, polygonZkEVMFactory); console.log(tx.deployTransaction); console.log('upgrade succesfull'); diff --git a/deployment/verifyPoE_v2-0.js b/deployment/verifyPoE_v2-0.js index 9196fc0b3..405248d59 100644 --- a/deployment/verifyPoE_v2-0.js +++ b/deployment/verifyPoE_v2-0.js @@ -50,7 +50,7 @@ async function main() { // verify proxies - const contractNames = ['polygonZKEVMAddress', 'PolygonZKEVMBridgeAddress', 'PolygonZKEVMGlobalExitRootAddress']; + const contractNames = ['polygonZkEVMAddress', 'PolygonZkEVMBridgeAddress', 'PolygonZkEVMGlobalExitRootAddress']; for (let i = 0; i < contractNames.length; i++) { try { diff --git a/docker/scripts/genesis_docker.json b/docker/scripts/genesis_docker.json index 91eb724fa..347838c9c 100644 --- a/docker/scripts/genesis_docker.json +++ b/docker/scripts/genesis_docker.json @@ -12,7 +12,7 @@ "0x0000000000000000000000000000000000000000000000000000000000000087": "0x01", "0x000000000000000000000000000000000000000000000000000000000000008b": "0xae4bb80be56b819606589de61d5ec3b522eeb032" }, - "contractName": "PolygonZKEVMBridge" + "contractName": "PolygonZkEVMBridge" }, { "balance": "0", @@ -34,7 +34,7 @@ "storage": { "0x0000000000000000000000000000000000000000000000000000000000000002": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988" }, - "contractName": "PolygonZKEVMGlobalExitRootL2" + "contractName": "PolygonZkEVMGlobalExitRootL2" } ] } \ No newline at end of file diff --git a/docker/scripts/genesis_gen_docker.json b/docker/scripts/genesis_gen_docker.json index 9d3d258bd..d0becfea0 100644 --- a/docker/scripts/genesis_gen_docker.json +++ b/docker/scripts/genesis_gen_docker.json @@ -38,7 +38,7 @@ "0x9D98DeAbC42dd696Deb9e40b4f1CAB7dDBF55988" ] }, - "contractName": "PolygonZKEVMGlobalExitRootL2", + "contractName": "PolygonZkEVMGlobalExitRootL2", "reason": "" }, { @@ -48,7 +48,7 @@ "gasLimit": 10000000, "gasPrice": "0", "chainId": 1000, - "contractName": "PolygonZKEVMBridge" + "contractName": "PolygonZkEVMBridge" }, { "from": "0xC949254d682D8c9ad5682521675b8F43b102aec4", @@ -64,7 +64,7 @@ "0xAE4bB80bE56B819606589DE61d5ec3b522EEB032", "0x0000000000000000000000000000000000000000" ], - "contractName": "PolygonZKEVMBridge" + "contractName": "PolygonZkEVMBridge" } ], "timestamp": 1944498031 diff --git a/docs/PolygonZKEVM.md b/docs/PolygonZkEVM.md similarity index 95% rename from docs/PolygonZKEVM.md rename to docs/PolygonZkEVM.md index e6c66892b..a7e0eaf48 100644 --- a/docs/PolygonZKEVM.md +++ b/docs/PolygonZkEVM.md @@ -3,18 +3,18 @@ There will be a trusted sequencer, which is able to send transactions. Any user can force some transaction and the sequencer will have a timeout to add them in the queue. The sequenced state is deterministic and can be precalculated before it's actually verified by a zkProof. The aggregators will be able to verify the sequenced state with zkProofs and therefore make available the withdrawals from L2 network. -To enter and exit of the L2 network will be used a PolygonZKEVMBridge smart contract that will be deployed in both networks. +To enter and exit of the L2 network will be used a PolygonZkEVMBridge smart contract that will be deployed in both networks. ## Functions ### initialize ```solidity function initialize( - contract IPolygonZKEVMGlobalExitRoot _globalExitRootManager, + contract IPolygonZkEVMGlobalExitRoot _globalExitRootManager, contract IERC20Upgradeable _matic, contract IVerifierRollup _rollupVerifier, - contract IPolygonZKEVMBridge _bridgeAddress, - struct PolygonZKEVM.InitializePackedParameters initializePackedParameters, + contract IPolygonZkEVMBridge _bridgeAddress, + struct PolygonZkEVM.InitializePackedParameters initializePackedParameters, bytes32 genesisRoot, string _trustedSequencerURL, string _networkName @@ -25,11 +25,11 @@ To enter and exit of the L2 network will be used a PolygonZKEVMBridge smart cont #### Parameters: | Name | Type | Description | | :--- | :--- | :------------------------------------------------------------------- | -|`_globalExitRootManager` | contract IPolygonZKEVMGlobalExitRoot | Global exit root manager address +|`_globalExitRootManager` | contract IPolygonZkEVMGlobalExitRoot | Global exit root manager address |`_matic` | contract IERC20Upgradeable | MATIC token address |`_rollupVerifier` | contract IVerifierRollup | Rollup verifier address -|`_bridgeAddress` | contract IPolygonZKEVMBridge | Bridge address -|`initializePackedParameters` | struct PolygonZKEVM.InitializePackedParameters | Struct to save gas and avoid stack too depp errors +|`_bridgeAddress` | contract IPolygonZkEVMBridge | Bridge address +|`initializePackedParameters` | struct PolygonZkEVM.InitializePackedParameters | Struct to save gas and avoid stack too depp errors |`genesisRoot` | bytes32 | Rollup genesis root |`_trustedSequencerURL` | string | Trusted sequencer URL |`_networkName` | string | L2 network name @@ -37,7 +37,7 @@ To enter and exit of the L2 network will be used a PolygonZKEVMBridge smart cont ### sequenceBatches ```solidity function sequenceBatches( - struct PolygonZKEVM.BatchData[] batches + struct PolygonZkEVM.BatchData[] batches ) public ``` Allows a sequencer to send multiple batches @@ -46,7 +46,7 @@ Allows a sequencer to send multiple batches #### Parameters: | Name | Type | Description | | :--- | :--- | :------------------------------------------------------------------- | -|`batches` | struct PolygonZKEVM.BatchData[] | Struct array which the necessary data to append new batces ot the sequence +|`batches` | struct PolygonZkEVM.BatchData[] | Struct array which the necessary data to append new batces ot the sequence ### verifyBatches ```solidity @@ -183,7 +183,7 @@ This should be used only in extreme cases where the trusted sequencer does not w ### sequenceForceBatches ```solidity function sequenceForceBatches( - struct PolygonZKEVM.ForcedBatchData[] batches + struct PolygonZkEVM.ForcedBatchData[] batches ) public ``` Allows anyone to sequence forced Batches if the trusted sequencer do not have done it in the timeout period @@ -192,7 +192,7 @@ Allows anyone to sequence forced Batches if the trusted sequencer do not have do #### Parameters: | Name | Type | Description | | :--- | :--- | :------------------------------------------------------------------- | -|`batches` | struct PolygonZKEVM.ForcedBatchData[] | Struct array which the necessary data to append new batces ot the sequence +|`batches` | struct PolygonZkEVM.ForcedBatchData[] | Struct array which the necessary data to append new batces ot the sequence ### setTrustedSequencer ```solidity @@ -419,7 +419,7 @@ Internal functoin that prove a different state root given the same batches to ve uint64 sequencedBatchNum ) external ``` -Function to activate emergency state, which also enable the emergency mode on both PoE and PolygonZKEVM Bridge contrats +Function to activate emergency state, which also enable the emergency mode on both PoE and PolygonZkEVM Bridge contrats If not called by the owner owner must be provided a batcnNum that does not have been aggregated in a HALT_AGGREGATION_TIMEOUT period @@ -433,7 +433,7 @@ If not called by the owner owner must be provided a batcnNum that does not have function deactivateEmergencyState( ) external ``` -Function to deactivate emergency state on both PoE and PolygonZKEVMBridge contrats +Function to deactivate emergency state on both PoE and PolygonZkEVMBridge contrats @@ -442,7 +442,7 @@ Function to deactivate emergency state on both PoE and PolygonZKEVMBridge contra function _activateEmergencyState( ) internal ``` -Internal function to activate emergency state on both PoE and PolygonZKEVM Bridge contrats +Internal function to activate emergency state on both PoE and PolygonZkEVM Bridge contrats diff --git a/docs/PolygonZKEVMBridge.md b/docs/PolygonZkEVMBridge.md similarity index 97% rename from docs/PolygonZKEVMBridge.md rename to docs/PolygonZkEVMBridge.md index e9bef06e3..224652ea2 100644 --- a/docs/PolygonZKEVMBridge.md +++ b/docs/PolygonZkEVMBridge.md @@ -1,4 +1,4 @@ -PolygonZKEVMBridge that will be deployed on both networks Ethereum and Polygon zkEVM +PolygonZkEVMBridge that will be deployed on both networks Ethereum and Polygon zkEVM Contract responsible to manage the token interactions with other networks @@ -7,7 +7,7 @@ Contract responsible to manage the token interactions with other networks ```solidity function initialize( uint32 _networkID, - contract IPolygonZKEVMGlobalExitRoot _globalExitRootManager + contract IPolygonZkEVMGlobalExitRoot _globalExitRootManager ) public ``` @@ -16,7 +16,7 @@ Contract responsible to manage the token interactions with other networks | Name | Type | Description | | :--- | :--- | :------------------------------------------------------------------- | |`_networkID` | uint32 | networkID -|`_globalExitRootManager` | contract IPolygonZKEVMGlobalExitRoot | global exit root manager address +|`_globalExitRootManager` | contract IPolygonZkEVMGlobalExitRoot | global exit root manager address ### bridgeAsset ```solidity diff --git a/docs/PolygonZKEVMGlobalExitRoot.md b/docs/PolygonZkEVMGlobalExitRoot.md similarity index 94% rename from docs/PolygonZKEVMGlobalExitRoot.md rename to docs/PolygonZkEVMGlobalExitRoot.md index 7744e0efd..e4c7249d7 100644 --- a/docs/PolygonZKEVMGlobalExitRoot.md +++ b/docs/PolygonZkEVMGlobalExitRoot.md @@ -15,7 +15,7 @@ Contract responsible for managing the exit roots across multiple networks | Name | Type | Description | | :--- | :--- | :------------------------------------------------------------------- | |`_rollupAddress` | address | Rollup contract address -|`_bridgeAddress` | address | PolygonZKEVMBridge contract address +|`_bridgeAddress` | address | PolygonZkEVMBridge contract address ### updateExitRoot ```solidity diff --git a/docs/PolygonZKEVMGlobalExitRootL2.md b/docs/PolygonZkEVMGlobalExitRootL2.md similarity index 100% rename from docs/PolygonZKEVMGlobalExitRootL2.md rename to docs/PolygonZkEVMGlobalExitRootL2.md diff --git a/docs/PolygonZKEVMTimelock.md b/docs/PolygonZkEVMTimelock.md similarity index 92% rename from docs/PolygonZKEVMTimelock.md rename to docs/PolygonZkEVMTimelock.md index be8d6c028..170448e2e 100644 --- a/docs/PolygonZKEVMTimelock.md +++ b/docs/PolygonZkEVMTimelock.md @@ -11,7 +11,7 @@ If emergency mode of the zkevm contract system is active, this timelock have no address[] proposers, address[] executors, address admin, - contract PolygonZKEVM _polygonZKEVM + contract PolygonZkEVM _polygonZkEVM ) public ``` Constructor of timelock @@ -24,7 +24,7 @@ Constructor of timelock |`proposers` | address[] | accounts to be granted proposer and canceller roles |`executors` | address[] | accounts to be granted executor role |`admin` | address | optional account to be granted admin role; disable with zero address -|`_polygonZKEVM` | contract PolygonZKEVM | PoE address +|`_polygonZkEVM` | contract PolygonZkEVM | PoE address ### getMinDelay diff --git a/index.js b/index.js index 362901cc9..92bdba95f 100644 --- a/index.js +++ b/index.js @@ -1,13 +1,13 @@ -module.exports.PolygonZKEVMBridge = require('./compiled-contracts/PolygonZKEVMBridge.json'); -module.exports.PolygonZKEVMGlobalExitRoot = require('./compiled-contracts/PolygonZKEVMGlobalExitRoot.json'); -module.exports.PolygonZKEVMGlobalExitRootL2 = require('./compiled-contracts/PolygonZKEVMGlobalExitRootL2.json'); -module.exports.PolygonZKEVM = require('./compiled-contracts/PolygonZKEVM.json'); +module.exports.PolygonZkEVMBridge = require('./compiled-contracts/PolygonZkEVMBridge.json'); +module.exports.PolygonZkEVMGlobalExitRoot = require('./compiled-contracts/PolygonZkEVMGlobalExitRoot.json'); +module.exports.PolygonZkEVMGlobalExitRootL2 = require('./compiled-contracts/PolygonZkEVMGlobalExitRootL2.json'); +module.exports.PolygonZkEVM = require('./compiled-contracts/PolygonZkEVM.json'); module.exports.TokenWrapped = require('./compiled-contracts/TokenWrapped.json'); module.exports.Verifier = require('./compiled-contracts/Verifier.json'); -module.exports.PolygonZKEVMBridgeMock = require('./compiled-contracts/PolygonZKEVMBridgeMock.json'); +module.exports.PolygonZkEVMBridgeMock = require('./compiled-contracts/PolygonZkEVMBridgeMock.json'); module.exports.ERC20PermitMock = require('./compiled-contracts/ERC20PermitMock.json'); -module.exports.PolygonZKEVMGlobalExitRootL2Mock = require('./compiled-contracts/PolygonZKEVMGlobalExitRootL2Mock.json'); -module.exports.PolygonZKEVMGlobalExitRootMock = require('./compiled-contracts/PolygonZKEVMGlobalExitRootMock.json'); -module.exports.PolygonZKEVMMock = require('./compiled-contracts/PolygonZKEVMMock.json'); +module.exports.PolygonZkEVMGlobalExitRootL2Mock = require('./compiled-contracts/PolygonZkEVMGlobalExitRootL2Mock.json'); +module.exports.PolygonZkEVMGlobalExitRootMock = require('./compiled-contracts/PolygonZkEVMGlobalExitRootMock.json'); +module.exports.PolygonZkEVMMock = require('./compiled-contracts/PolygonZkEVMMock.json'); module.exports.VerifierRollupHelperMock = require('./compiled-contracts/VerifierRollupHelperMock.json'); module.exports.PermitHelper = require('./src/permit-helper'); diff --git a/test/contracts/bridge.test.js b/test/contracts/bridge.test.js index a7c06103d..95311cd07 100644 --- a/test/contracts/bridge.test.js +++ b/test/contracts/bridge.test.js @@ -10,13 +10,13 @@ function calculateGlobalExitRoot(mainnetExitRoot, rollupExitRoot) { return ethers.utils.solidityKeccak256(['bytes32', 'bytes32'], [mainnetExitRoot, rollupExitRoot]); } -describe('PolygonZKEVMBridge Contract', () => { +describe('PolygonZkEVMBridge Contract', () => { let deployer; let rollup; let acc1; - let polygonZKEVMGlobalExitRoot; - let polygonZKEVMBridgeContract; + let polygonZkEVMGlobalExitRoot; + let polygonZkEVMBridgeContract; let tokenContract; const tokenName = 'Matic Token'; @@ -34,23 +34,23 @@ describe('PolygonZKEVMBridge Contract', () => { const LEAF_TYPE_ASSET = 0; const LEAF_TYPE_MESSAGE = 1; - const polygonZKEVMAddress = ethers.constants.AddressZero; + const polygonZkEVMAddress = ethers.constants.AddressZero; beforeEach('Deploy contracts', async () => { // load signers [deployer, rollup, acc1] = await ethers.getSigners(); // deploy global exit root manager - const PolygonZKEVMGlobalExitRootFactory = await ethers.getContractFactory('PolygonZKEVMGlobalExitRoot'); - polygonZKEVMGlobalExitRoot = await upgrades.deployProxy(PolygonZKEVMGlobalExitRootFactory, [], { initializer: false }); + const PolygonZkEVMGlobalExitRootFactory = await ethers.getContractFactory('PolygonZkEVMGlobalExitRoot'); + polygonZkEVMGlobalExitRoot = await upgrades.deployProxy(PolygonZkEVMGlobalExitRootFactory, [], { initializer: false }); - // deploy PolygonZKEVMBridge - const polygonZKEVMBridgeFactory = await ethers.getContractFactory('PolygonZKEVMBridge'); - polygonZKEVMBridgeContract = await upgrades.deployProxy(polygonZKEVMBridgeFactory, [], { initializer: false }); + // deploy PolygonZkEVMBridge + const polygonZkEVMBridgeFactory = await ethers.getContractFactory('PolygonZkEVMBridge'); + polygonZkEVMBridgeContract = await upgrades.deployProxy(polygonZkEVMBridgeFactory, [], { initializer: false }); - await polygonZKEVMGlobalExitRoot.initialize(rollup.address, polygonZKEVMBridgeContract.address); + await polygonZkEVMGlobalExitRoot.initialize(rollup.address, polygonZkEVMBridgeContract.address); - await polygonZKEVMBridgeContract.initialize(networkIDMainnet, polygonZKEVMGlobalExitRoot.address, polygonZKEVMAddress); + await polygonZkEVMBridgeContract.initialize(networkIDMainnet, polygonZkEVMGlobalExitRoot.address, polygonZkEVMAddress); // deploy token const maticTokenFactory = await ethers.getContractFactory('ERC20PermitMock'); @@ -64,13 +64,13 @@ describe('PolygonZKEVMBridge Contract', () => { }); it('should check the constructor parameters', async () => { - expect(await polygonZKEVMBridgeContract.globalExitRootManager()).to.be.equal(polygonZKEVMGlobalExitRoot.address); - expect(await polygonZKEVMBridgeContract.networkID()).to.be.equal(networkIDMainnet); - expect(await polygonZKEVMBridgeContract.poeAddress()).to.be.equal(polygonZKEVMAddress); + expect(await polygonZkEVMBridgeContract.globalExitRootManager()).to.be.equal(polygonZkEVMGlobalExitRoot.address); + expect(await polygonZkEVMBridgeContract.networkID()).to.be.equal(networkIDMainnet); + expect(await polygonZkEVMBridgeContract.poeAddress()).to.be.equal(polygonZkEVMAddress); }); - it('should PolygonZKEVMBridge asset and verify merkle proof', async () => { - const depositCount = await polygonZKEVMBridgeContract.depositCount(); + it('should PolygonZkEVMBridge asset and verify merkle proof', async () => { + const depositCount = await polygonZkEVMBridgeContract.depositCount(); const originNetwork = networkIDMainnet; const tokenAddress = tokenContract.address; const amount = ethers.utils.parseEther('10'); @@ -81,14 +81,14 @@ describe('PolygonZKEVMBridge Contract', () => { const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); const balanceDeployer = await tokenContract.balanceOf(deployer.address); - const balanceBridge = await tokenContract.balanceOf(polygonZKEVMBridgeContract.address); + const balanceBridge = await tokenContract.balanceOf(polygonZkEVMBridgeContract.address); - const rollupExitRoot = await polygonZKEVMGlobalExitRoot.lastRollupExitRoot(); + const rollupExitRoot = await polygonZkEVMGlobalExitRoot.lastRollupExitRoot(); // create a new deposit - await expect(tokenContract.approve(polygonZKEVMBridgeContract.address, amount)) + await expect(tokenContract.approve(polygonZkEVMBridgeContract.address, amount)) .to.emit(tokenContract, 'Approval') - .withArgs(deployer.address, polygonZKEVMBridgeContract.address, amount); + .withArgs(deployer.address, polygonZkEVMBridgeContract.address, amount); // pre compute root merkle tree in Js const height = 32; @@ -105,17 +105,17 @@ describe('PolygonZKEVMBridge Contract', () => { merkleTree.add(leafValue); const rootJSMainnet = merkleTree.getRoot(); - await expect(polygonZKEVMBridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x')) - .to.emit(polygonZKEVMBridgeContract, 'BridgeEvent') + await expect(polygonZkEVMBridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x')) + .to.emit(polygonZkEVMBridgeContract, 'BridgeEvent') .withArgs(LEAF_TYPE_ASSET, originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount) - .to.emit(polygonZKEVMGlobalExitRoot, 'UpdateGlobalExitRoot') + .to.emit(polygonZkEVMGlobalExitRoot, 'UpdateGlobalExitRoot') .withArgs(rootJSMainnet, rollupExitRoot); expect(await tokenContract.balanceOf(deployer.address)).to.be.equal(balanceDeployer.sub(amount)); - expect(await tokenContract.balanceOf(polygonZKEVMBridgeContract.address)).to.be.equal(balanceBridge.add(amount)); + expect(await tokenContract.balanceOf(polygonZkEVMBridgeContract.address)).to.be.equal(balanceBridge.add(amount)); // check merkle root with SC - const rootSCMainnet = await polygonZKEVMBridgeContract.getDepositRoot(); + const rootSCMainnet = await polygonZkEVMBridgeContract.getDepositRoot(); expect(rootSCMainnet).to.be.equal(rootJSMainnet); // check merkle proof @@ -124,7 +124,7 @@ describe('PolygonZKEVMBridge Contract', () => { // verify merkle proof expect(verifyMerkleProof(leafValue, proof, index, rootSCMainnet)).to.be.equal(true); - expect(await polygonZKEVMBridgeContract.verifyMerkleProof( + expect(await polygonZkEVMBridgeContract.verifyMerkleProof( leafValue, proof, index, @@ -132,11 +132,11 @@ describe('PolygonZKEVMBridge Contract', () => { )).to.be.equal(true); const computedGlobalExitRoot = calculateGlobalExitRoot(rootJSMainnet, rollupExitRoot); - expect(computedGlobalExitRoot).to.be.equal(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()); + expect(computedGlobalExitRoot).to.be.equal(await polygonZkEVMGlobalExitRoot.getLastGlobalExitRoot()); }); - it('should PolygonZKEVMBridge message and verify merkle proof', async () => { - const depositCount = await polygonZKEVMBridgeContract.depositCount(); + it('should PolygonZkEVMBridge message and verify merkle proof', async () => { + const depositCount = await polygonZkEVMBridgeContract.depositCount(); const originNetwork = networkIDMainnet; const originAddress = deployer.address; const amount = ethers.utils.parseEther('10'); @@ -145,7 +145,7 @@ describe('PolygonZKEVMBridge Contract', () => { const metadata = metadataToken; const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); - const rollupExitRoot = await polygonZKEVMGlobalExitRoot.lastRollupExitRoot(); + const rollupExitRoot = await polygonZkEVMGlobalExitRoot.lastRollupExitRoot(); // pre compute root merkle tree in Js const height = 32; @@ -162,8 +162,8 @@ describe('PolygonZKEVMBridge Contract', () => { merkleTree.add(leafValue); const rootJSMainnet = merkleTree.getRoot(); - await expect(polygonZKEVMBridgeContract.bridgeMessage(destinationNetwork, destinationAddress, metadata, { value: amount })) - .to.emit(polygonZKEVMBridgeContract, 'BridgeEvent') + await expect(polygonZkEVMBridgeContract.bridgeMessage(destinationNetwork, destinationAddress, metadata, { value: amount })) + .to.emit(polygonZkEVMBridgeContract, 'BridgeEvent') .withArgs( LEAF_TYPE_MESSAGE, originNetwork, @@ -176,7 +176,7 @@ describe('PolygonZKEVMBridge Contract', () => { ); // check merkle root with SC - const rootSCMainnet = await polygonZKEVMBridgeContract.getDepositRoot(); + const rootSCMainnet = await polygonZkEVMBridgeContract.getDepositRoot(); expect(rootSCMainnet).to.be.equal(rootJSMainnet); // check merkle proof @@ -185,7 +185,7 @@ describe('PolygonZKEVMBridge Contract', () => { // verify merkle proof expect(verifyMerkleProof(leafValue, proof, index, rootSCMainnet)).to.be.equal(true); - expect(await polygonZKEVMBridgeContract.verifyMerkleProof( + expect(await polygonZkEVMBridgeContract.verifyMerkleProof( leafValue, proof, index, @@ -193,7 +193,7 @@ describe('PolygonZKEVMBridge Contract', () => { )).to.be.equal(true); const computedGlobalExitRoot = calculateGlobalExitRoot(rootJSMainnet, rollupExitRoot); - expect(computedGlobalExitRoot).to.be.equal(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()); + expect(computedGlobalExitRoot).to.be.equal(await polygonZkEVMGlobalExitRoot.getLastGlobalExitRoot()); }); it('should claim tokens from Mainnet to Mainnet', async () => { @@ -206,7 +206,7 @@ describe('PolygonZKEVMBridge Contract', () => { const metadata = metadataToken; const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); - const mainnetExitRoot = await polygonZKEVMGlobalExitRoot.lastMainnetExitRoot(); + const mainnetExitRoot = await polygonZkEVMGlobalExitRoot.lastMainnetExitRoot(); // compute root merkle tree in Js const height = 32; @@ -226,20 +226,20 @@ describe('PolygonZKEVMBridge Contract', () => { const rootJSRollup = merkleTree.getRoot(); // check only rollup account with update rollup exit root - await expect(polygonZKEVMGlobalExitRoot.updateExitRoot(rootJSRollup)) - .to.be.revertedWith('PolygonZKEVMGlobalExitRoot::updateExitRoot: ONLY_ALLOWED_CONTRACTS'); + await expect(polygonZkEVMGlobalExitRoot.updateExitRoot(rootJSRollup)) + .to.be.revertedWith('PolygonZkEVMGlobalExitRoot::updateExitRoot: ONLY_ALLOWED_CONTRACTS'); // add rollup Merkle root - await expect(polygonZKEVMGlobalExitRoot.connect(rollup).updateExitRoot(rootJSRollup)) - .to.emit(polygonZKEVMGlobalExitRoot, 'UpdateGlobalExitRoot') + await expect(polygonZkEVMGlobalExitRoot.connect(rollup).updateExitRoot(rootJSRollup)) + .to.emit(polygonZkEVMGlobalExitRoot, 'UpdateGlobalExitRoot') .withArgs(mainnetExitRoot, rootJSRollup); // check roots - const rollupExitRootSC = await polygonZKEVMGlobalExitRoot.lastRollupExitRoot(); + const rollupExitRootSC = await polygonZkEVMGlobalExitRoot.lastRollupExitRoot(); expect(rollupExitRootSC).to.be.equal(rootJSRollup); const computedGlobalExitRoot = calculateGlobalExitRoot(mainnetExitRoot, rollupExitRootSC); - expect(computedGlobalExitRoot).to.be.equal(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()); + expect(computedGlobalExitRoot).to.be.equal(await polygonZkEVMGlobalExitRoot.getLastGlobalExitRoot()); // check merkle proof const proof = merkleTree.getProofTreeByIndex(0); @@ -247,7 +247,7 @@ describe('PolygonZKEVMBridge Contract', () => { // verify merkle proof expect(verifyMerkleProof(leafValue, proof, index, rootJSRollup)).to.be.equal(true); - expect(await polygonZKEVMBridgeContract.verifyMerkleProof( + expect(await polygonZkEVMBridgeContract.verifyMerkleProof( leafValue, proof, index, @@ -258,7 +258,7 @@ describe('PolygonZKEVMBridge Contract', () => { * claim * Can't claim without tokens */ - await expect(polygonZKEVMBridgeContract.claimAsset( + await expect(polygonZkEVMBridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -272,13 +272,13 @@ describe('PolygonZKEVMBridge Contract', () => { )).to.be.revertedWith('ERC20: transfer amount exceeds balance'); // transfer tokens, then claim - await expect(tokenContract.transfer(polygonZKEVMBridgeContract.address, amount)) + await expect(tokenContract.transfer(polygonZkEVMBridgeContract.address, amount)) .to.emit(tokenContract, 'Transfer') - .withArgs(deployer.address, polygonZKEVMBridgeContract.address, amount); + .withArgs(deployer.address, polygonZkEVMBridgeContract.address, amount); - expect(false).to.be.equal(await polygonZKEVMBridgeContract.isClaimed(index)); + expect(false).to.be.equal(await polygonZkEVMBridgeContract.isClaimed(index)); - await expect(polygonZKEVMBridgeContract.claimAsset( + await expect(polygonZkEVMBridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -290,7 +290,7 @@ describe('PolygonZKEVMBridge Contract', () => { amount, metadata, )) - .to.emit(polygonZKEVMBridgeContract, 'ClaimEvent') + .to.emit(polygonZkEVMBridgeContract, 'ClaimEvent') .withArgs( index, originNetwork, @@ -298,10 +298,10 @@ describe('PolygonZKEVMBridge Contract', () => { destinationAddress, amount, ).to.emit(tokenContract, 'Transfer') - .withArgs(polygonZKEVMBridgeContract.address, acc1.address, amount); + .withArgs(polygonZkEVMBridgeContract.address, acc1.address, amount); // Can't claim because nullifier - await expect(polygonZKEVMBridgeContract.claimAsset( + await expect(polygonZkEVMBridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -312,8 +312,8 @@ describe('PolygonZKEVMBridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('PolygonZKEVMBridge::_verifyLeaf: ALREADY_CLAIMED'); - expect(true).to.be.equal(await polygonZKEVMBridgeContract.isClaimed(index)); + )).to.be.revertedWith('PolygonZkEVMBridge::_verifyLeaf: ALREADY_CLAIMED'); + expect(true).to.be.equal(await polygonZkEVMBridgeContract.isClaimed(index)); }); it('should claim tokens from Rollup to Mainnet', async () => { @@ -326,7 +326,7 @@ describe('PolygonZKEVMBridge Contract', () => { const metadata = metadataToken; // since we are inserting in the exit root can be anything const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); - const mainnetExitRoot = await polygonZKEVMGlobalExitRoot.lastMainnetExitRoot(); + const mainnetExitRoot = await polygonZkEVMGlobalExitRoot.lastMainnetExitRoot(); // compute root merkle tree in Js const height = 32; @@ -346,20 +346,20 @@ describe('PolygonZKEVMBridge Contract', () => { const rootJSRollup = merkleTreeRollup.getRoot(); // check only rollup account with update rollup exit root - await expect(polygonZKEVMGlobalExitRoot.updateExitRoot(rootJSRollup)) - .to.be.revertedWith('PolygonZKEVMGlobalExitRoot::updateExitRoot: ONLY_ALLOWED_CONTRACTS'); + await expect(polygonZkEVMGlobalExitRoot.updateExitRoot(rootJSRollup)) + .to.be.revertedWith('PolygonZkEVMGlobalExitRoot::updateExitRoot: ONLY_ALLOWED_CONTRACTS'); // add rollup Merkle root - await expect(polygonZKEVMGlobalExitRoot.connect(rollup).updateExitRoot(rootJSRollup)) - .to.emit(polygonZKEVMGlobalExitRoot, 'UpdateGlobalExitRoot') + await expect(polygonZkEVMGlobalExitRoot.connect(rollup).updateExitRoot(rootJSRollup)) + .to.emit(polygonZkEVMGlobalExitRoot, 'UpdateGlobalExitRoot') .withArgs(mainnetExitRoot, rootJSRollup); // check roots - const rollupExitRootSC = await polygonZKEVMGlobalExitRoot.lastRollupExitRoot(); + const rollupExitRootSC = await polygonZkEVMGlobalExitRoot.lastRollupExitRoot(); expect(rollupExitRootSC).to.be.equal(rootJSRollup); const computedGlobalExitRoot = calculateGlobalExitRoot(mainnetExitRoot, rollupExitRootSC); - expect(computedGlobalExitRoot).to.be.equal(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()); + expect(computedGlobalExitRoot).to.be.equal(await polygonZkEVMGlobalExitRoot.getLastGlobalExitRoot()); // check merkle proof const proof = merkleTreeRollup.getProofTreeByIndex(0); @@ -367,7 +367,7 @@ describe('PolygonZKEVMBridge Contract', () => { // verify merkle proof expect(verifyMerkleProof(leafValue, proof, index, rootJSRollup)).to.be.equal(true); - expect(await polygonZKEVMBridgeContract.verifyMerkleProof( + expect(await polygonZkEVMBridgeContract.verifyMerkleProof( leafValue, proof, index, @@ -383,11 +383,11 @@ describe('PolygonZKEVMBridge Contract', () => { const salt = ethers.utils.solidityKeccak256(['uint32', 'address'], [networkIDRollup, tokenAddress]); const minimalBytecodeProxy = tokenWrappedFactory.bytecode; const hashInitCode = ethers.utils.solidityKeccak256(['bytes', 'bytes'], [minimalBytecodeProxy, metadataToken]); - const precalculateWrappedErc20 = await ethers.utils.getCreate2Address(polygonZKEVMBridgeContract.address, salt, hashInitCode); + const precalculateWrappedErc20 = await ethers.utils.getCreate2Address(polygonZkEVMBridgeContract.address, salt, hashInitCode); const newWrappedToken = tokenWrappedFactory.attach(precalculateWrappedErc20); // Use precalculatedWrapperAddress and check if matches - expect(await polygonZKEVMBridgeContract.precalculatedWrapperAddress( + expect(await polygonZkEVMBridgeContract.precalculatedWrapperAddress( networkIDRollup, tokenAddress, tokenName, @@ -395,7 +395,7 @@ describe('PolygonZKEVMBridge Contract', () => { decimals, )).to.be.equal(precalculateWrappedErc20); - await expect(polygonZKEVMBridgeContract.claimAsset( + await expect(polygonZkEVMBridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -407,33 +407,33 @@ describe('PolygonZKEVMBridge Contract', () => { amount, metadata, )) - .to.emit(polygonZKEVMBridgeContract, 'ClaimEvent') + .to.emit(polygonZkEVMBridgeContract, 'ClaimEvent') .withArgs( index, originNetwork, tokenAddress, destinationAddress, amount, - ).to.emit(polygonZKEVMBridgeContract, 'NewWrappedToken') + ).to.emit(polygonZkEVMBridgeContract, 'NewWrappedToken') .withArgs(originNetwork, tokenAddress, precalculateWrappedErc20) .to.emit(newWrappedToken, 'Transfer') .withArgs(ethers.constants.AddressZero, deployer.address, amount); // Assert maps created - const newTokenInfo = await polygonZKEVMBridgeContract.wrappedTokenToTokenInfo(precalculateWrappedErc20); + const newTokenInfo = await polygonZkEVMBridgeContract.wrappedTokenToTokenInfo(precalculateWrappedErc20); expect(newTokenInfo.originNetwork).to.be.equal(networkIDRollup); expect(newTokenInfo.originTokenAddress).to.be.equal(tokenAddress); - expect(await polygonZKEVMBridgeContract.getTokenWrappedAddress( + expect(await polygonZkEVMBridgeContract.getTokenWrappedAddress( networkIDRollup, tokenAddress, )).to.be.equal(precalculateWrappedErc20); - expect(await polygonZKEVMBridgeContract.getTokenWrappedAddress( + expect(await polygonZkEVMBridgeContract.getTokenWrappedAddress( networkIDRollup, tokenAddress, )).to.be.equal(precalculateWrappedErc20); - expect(await polygonZKEVMBridgeContract.tokenInfoToWrappedToken(salt)).to.be.equal(precalculateWrappedErc20); + expect(await polygonZkEVMBridgeContract.tokenInfoToWrappedToken(salt)).to.be.equal(precalculateWrappedErc20); // Check the wrapper info expect(await newWrappedToken.name()).to.be.equal(tokenName); @@ -441,7 +441,7 @@ describe('PolygonZKEVMBridge Contract', () => { expect(await newWrappedToken.decimals()).to.be.equal(decimals); // Can't claim because nullifier - await expect(polygonZKEVMBridgeContract.claimAsset( + await expect(polygonZkEVMBridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -452,22 +452,22 @@ describe('PolygonZKEVMBridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('PolygonZKEVMBridge::_verifyLeaf: ALREADY_CLAIMED'); + )).to.be.revertedWith('PolygonZkEVMBridge::_verifyLeaf: ALREADY_CLAIMED'); // Check new token expect(await newWrappedToken.totalSupply()).to.be.equal(amount); // Burn Tokens - const depositCount = await polygonZKEVMBridgeContract.depositCount(); + const depositCount = await polygonZkEVMBridgeContract.depositCount(); const wrappedTokenAddress = newWrappedToken.address; const newDestinationNetwork = networkIDRollup; - const rollupExitRoot = await polygonZKEVMGlobalExitRoot.lastRollupExitRoot(); + const rollupExitRoot = await polygonZkEVMGlobalExitRoot.lastRollupExitRoot(); // create a new deposit - await expect(newWrappedToken.approve(polygonZKEVMBridgeContract.address, amount)) + await expect(newWrappedToken.approve(polygonZkEVMBridgeContract.address, amount)) .to.emit(newWrappedToken, 'Approval') - .withArgs(deployer.address, polygonZKEVMBridgeContract.address, amount); + .withArgs(deployer.address, polygonZkEVMBridgeContract.address, amount); /* * pre compute root merkle tree in Js @@ -488,7 +488,7 @@ describe('PolygonZKEVMBridge Contract', () => { amount, metadataHashMainnet, ); - const leafValueMainnetSC = await polygonZKEVMBridgeContract.getLeafValue( + const leafValueMainnetSC = await polygonZkEVMBridgeContract.getLeafValue( LEAF_TYPE_ASSET, originNetwork, originTokenAddress, @@ -503,8 +503,8 @@ describe('PolygonZKEVMBridge Contract', () => { const rootJSMainnet = merkleTreeMainnet.getRoot(); // Tokens are burnt - await expect(polygonZKEVMBridgeContract.bridgeAsset(wrappedTokenAddress, newDestinationNetwork, destinationAddress, amount, '0x')) - .to.emit(polygonZKEVMBridgeContract, 'BridgeEvent') + await expect(polygonZkEVMBridgeContract.bridgeAsset(wrappedTokenAddress, newDestinationNetwork, destinationAddress, amount, '0x')) + .to.emit(polygonZkEVMBridgeContract, 'BridgeEvent') .withArgs( LEAF_TYPE_ASSET, originNetwork, @@ -515,17 +515,17 @@ describe('PolygonZKEVMBridge Contract', () => { metadataMainnet, depositCount, ) - .to.emit(polygonZKEVMGlobalExitRoot, 'UpdateGlobalExitRoot') + .to.emit(polygonZkEVMGlobalExitRoot, 'UpdateGlobalExitRoot') .withArgs(rootJSMainnet, rollupExitRoot) .to.emit(newWrappedToken, 'Transfer') .withArgs(deployer.address, ethers.constants.AddressZero, amount); expect(await newWrappedToken.totalSupply()).to.be.equal(0); expect(await newWrappedToken.balanceOf(deployer.address)).to.be.equal(0); - expect(await newWrappedToken.balanceOf(polygonZKEVMBridgeContract.address)).to.be.equal(0); + expect(await newWrappedToken.balanceOf(polygonZkEVMBridgeContract.address)).to.be.equal(0); // check merkle root with SC - const rootSCMainnet = await polygonZKEVMBridgeContract.getDepositRoot(); + const rootSCMainnet = await polygonZkEVMBridgeContract.getDepositRoot(); expect(rootSCMainnet).to.be.equal(rootJSMainnet); // check merkle proof @@ -534,7 +534,7 @@ describe('PolygonZKEVMBridge Contract', () => { // verify merkle proof expect(verifyMerkleProof(leafValueMainnet, proofMainnet, indexMainnet, rootSCMainnet)).to.be.equal(true); - expect(await polygonZKEVMBridgeContract.verifyMerkleProof( + expect(await polygonZkEVMBridgeContract.verifyMerkleProof( leafValueMainnet, proofMainnet, indexMainnet, @@ -542,11 +542,11 @@ describe('PolygonZKEVMBridge Contract', () => { )).to.be.equal(true); const computedGlobalExitRoot2 = calculateGlobalExitRoot(rootJSMainnet, rollupExitRoot); - expect(computedGlobalExitRoot2).to.be.equal(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()); + expect(computedGlobalExitRoot2).to.be.equal(await polygonZkEVMGlobalExitRoot.getLastGlobalExitRoot()); }); - it('should PolygonZKEVMBridge and sync the current root with events', async () => { - const depositCount = await polygonZKEVMBridgeContract.depositCount(); + it('should PolygonZkEVMBridge and sync the current root with events', async () => { + const depositCount = await polygonZkEVMBridgeContract.depositCount(); const originNetwork = networkIDMainnet; const tokenAddress = ethers.constants.AddressZero; // Ether const amount = ethers.utils.parseEther('10'); @@ -556,7 +556,7 @@ describe('PolygonZKEVMBridge Contract', () => { const metadata = '0x';// since is ether does not have metadata // create 3 new deposit - await expect(polygonZKEVMBridgeContract.bridgeAsset( + await expect(polygonZkEVMBridgeContract.bridgeAsset( tokenAddress, destinationNetwork, destinationAddress, @@ -565,7 +565,7 @@ describe('PolygonZKEVMBridge Contract', () => { { value: amount }, )) .to.emit( - polygonZKEVMBridgeContract, + polygonZkEVMBridgeContract, 'BridgeEvent', ) .withArgs( @@ -579,7 +579,7 @@ describe('PolygonZKEVMBridge Contract', () => { depositCount, ); - await expect(polygonZKEVMBridgeContract.bridgeAsset( + await expect(polygonZkEVMBridgeContract.bridgeAsset( tokenAddress, destinationNetwork, destinationAddress, @@ -588,7 +588,7 @@ describe('PolygonZKEVMBridge Contract', () => { { value: amount }, )) .to.emit( - polygonZKEVMBridgeContract, + polygonZkEVMBridgeContract, 'BridgeEvent', ) .withArgs( @@ -602,7 +602,7 @@ describe('PolygonZKEVMBridge Contract', () => { depositCount.add(1), ); - await expect(polygonZKEVMBridgeContract.bridgeAsset( + await expect(polygonZkEVMBridgeContract.bridgeAsset( tokenAddress, destinationNetwork, destinationAddress, @@ -611,7 +611,7 @@ describe('PolygonZKEVMBridge Contract', () => { { value: amount }, )) .to.emit( - polygonZKEVMBridgeContract, + polygonZkEVMBridgeContract, 'BridgeEvent', ) .withArgs( @@ -630,14 +630,14 @@ describe('PolygonZKEVMBridge Contract', () => { const merkleTree = new MerkleTreeBridge(height); // Get the deposit's events - const filter = polygonZKEVMBridgeContract.filters.BridgeEvent( + const filter = polygonZkEVMBridgeContract.filters.BridgeEvent( null, null, null, null, null, ); - const events = await polygonZKEVMBridgeContract.queryFilter(filter, 0, 'latest'); + const events = await polygonZkEVMBridgeContract.queryFilter(filter, 0, 'latest'); events.forEach((e) => { const { args } = e; const leafValue = getLeafValue( @@ -653,7 +653,7 @@ describe('PolygonZKEVMBridge Contract', () => { }); // Check merkle root with SC - const rootSC = await polygonZKEVMBridgeContract.getDepositRoot(); + const rootSC = await polygonZkEVMBridgeContract.getDepositRoot(); const rootJS = merkleTree.getRoot(); expect(rootSC).to.be.equal(rootJS); @@ -670,7 +670,7 @@ describe('PolygonZKEVMBridge Contract', () => { const metadata = metadataToken; const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); - const mainnetExitRoot = await polygonZKEVMGlobalExitRoot.lastMainnetExitRoot(); + const mainnetExitRoot = await polygonZkEVMGlobalExitRoot.lastMainnetExitRoot(); // compute root merkle tree in Js const height = 32; @@ -690,16 +690,16 @@ describe('PolygonZKEVMBridge Contract', () => { const rootJSRollup = merkleTree.getRoot(); // add rollup Merkle root - await expect(polygonZKEVMGlobalExitRoot.connect(rollup).updateExitRoot(rootJSRollup)) - .to.emit(polygonZKEVMGlobalExitRoot, 'UpdateGlobalExitRoot') + await expect(polygonZkEVMGlobalExitRoot.connect(rollup).updateExitRoot(rootJSRollup)) + .to.emit(polygonZkEVMGlobalExitRoot, 'UpdateGlobalExitRoot') .withArgs(mainnetExitRoot, rootJSRollup); // check roots - const rollupExitRootSC = await polygonZKEVMGlobalExitRoot.lastRollupExitRoot(); + const rollupExitRootSC = await polygonZkEVMGlobalExitRoot.lastRollupExitRoot(); expect(rollupExitRootSC).to.be.equal(rootJSRollup); const computedGlobalExitRoot = calculateGlobalExitRoot(mainnetExitRoot, rollupExitRootSC); - expect(computedGlobalExitRoot).to.be.equal(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()); + expect(computedGlobalExitRoot).to.be.equal(await polygonZkEVMGlobalExitRoot.getLastGlobalExitRoot()); // check merkle proof const proof = merkleTree.getProofTreeByIndex(0); @@ -707,7 +707,7 @@ describe('PolygonZKEVMBridge Contract', () => { // verify merkle proof expect(verifyMerkleProof(leafValue, proof, index, rootJSRollup)).to.be.equal(true); - expect(await polygonZKEVMBridgeContract.verifyMerkleProof( + expect(await polygonZkEVMBridgeContract.verifyMerkleProof( leafValue, proof, index, @@ -715,7 +715,7 @@ describe('PolygonZKEVMBridge Contract', () => { )).to.be.equal(true); // Can't claim without tokens - await expect(polygonZKEVMBridgeContract.claimAsset( + await expect(polygonZkEVMBridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -729,12 +729,12 @@ describe('PolygonZKEVMBridge Contract', () => { )).to.be.revertedWith('ERC20: transfer amount exceeds balance'); // transfer tokens, then claim - await expect(tokenContract.transfer(polygonZKEVMBridgeContract.address, amount)) + await expect(tokenContract.transfer(polygonZkEVMBridgeContract.address, amount)) .to.emit(tokenContract, 'Transfer') - .withArgs(deployer.address, polygonZKEVMBridgeContract.address, amount); + .withArgs(deployer.address, polygonZkEVMBridgeContract.address, amount); // Check DESTINATION_NETWORK_DOES_NOT_MATCH assert - await expect(polygonZKEVMBridgeContract.claimAsset( + await expect(polygonZkEVMBridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -745,10 +745,10 @@ describe('PolygonZKEVMBridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('PolygonZKEVMBridge::_verifyLeaf: DESTINATION_NETWORK_DOES_NOT_MATCH'); + )).to.be.revertedWith('PolygonZkEVMBridge::_verifyLeaf: DESTINATION_NETWORK_DOES_NOT_MATCH'); // Check GLOBAL_EXIT_ROOT_INVALID assert - await expect(polygonZKEVMBridgeContract.claimAsset( + await expect(polygonZkEVMBridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -759,10 +759,10 @@ describe('PolygonZKEVMBridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('PolygonZKEVMBridge::_verifyLeaf: GLOBAL_EXIT_ROOT_INVALID'); + )).to.be.revertedWith('PolygonZkEVMBridge::_verifyLeaf: GLOBAL_EXIT_ROOT_INVALID'); // Check SMT_INVALID assert - await expect(polygonZKEVMBridgeContract.claimAsset( + await expect(polygonZkEVMBridgeContract.claimAsset( proof, index + 1, // Wrong index mainnetExitRoot, @@ -773,9 +773,9 @@ describe('PolygonZKEVMBridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('PolygonZKEVMBridge::_verifyLeaf: SMT_INVALID'); + )).to.be.revertedWith('PolygonZkEVMBridge::_verifyLeaf: SMT_INVALID'); - await expect(polygonZKEVMBridgeContract.claimAsset( + await expect(polygonZkEVMBridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -787,7 +787,7 @@ describe('PolygonZKEVMBridge Contract', () => { amount, metadata, )) - .to.emit(polygonZKEVMBridgeContract, 'ClaimEvent') + .to.emit(polygonZkEVMBridgeContract, 'ClaimEvent') .withArgs( index, originNetwork, @@ -795,10 +795,10 @@ describe('PolygonZKEVMBridge Contract', () => { destinationAddress, amount, ).to.emit(tokenContract, 'Transfer') - .withArgs(polygonZKEVMBridgeContract.address, deployer.address, amount); + .withArgs(polygonZkEVMBridgeContract.address, deployer.address, amount); // Check ALREADY_CLAIMED_claim - await expect(polygonZKEVMBridgeContract.claimAsset( + await expect(polygonZkEVMBridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -809,7 +809,7 @@ describe('PolygonZKEVMBridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('PolygonZKEVMBridge::_verifyLeaf: ALREADY_CLAIMED'); + )).to.be.revertedWith('PolygonZkEVMBridge::_verifyLeaf: ALREADY_CLAIMED'); }); it('should claim ether', async () => { @@ -823,7 +823,7 @@ describe('PolygonZKEVMBridge Contract', () => { const metadata = '0x'; // since is ether does not have metadata const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); - const mainnetExitRoot = await polygonZKEVMGlobalExitRoot.lastMainnetExitRoot(); + const mainnetExitRoot = await polygonZkEVMGlobalExitRoot.lastMainnetExitRoot(); // compute root merkle tree in Js const height = 32; @@ -843,16 +843,16 @@ describe('PolygonZKEVMBridge Contract', () => { const rootJSRollup = merkleTree.getRoot(); // add rollup Merkle root - await expect(polygonZKEVMGlobalExitRoot.connect(rollup).updateExitRoot(rootJSRollup)) - .to.emit(polygonZKEVMGlobalExitRoot, 'UpdateGlobalExitRoot') + await expect(polygonZkEVMGlobalExitRoot.connect(rollup).updateExitRoot(rootJSRollup)) + .to.emit(polygonZkEVMGlobalExitRoot, 'UpdateGlobalExitRoot') .withArgs(mainnetExitRoot, rootJSRollup); // check roots - const rollupExitRootSC = await polygonZKEVMGlobalExitRoot.lastRollupExitRoot(); + const rollupExitRootSC = await polygonZkEVMGlobalExitRoot.lastRollupExitRoot(); expect(rollupExitRootSC).to.be.equal(rootJSRollup); const computedGlobalExitRoot = calculateGlobalExitRoot(mainnetExitRoot, rollupExitRootSC); - expect(computedGlobalExitRoot).to.be.equal(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()); + expect(computedGlobalExitRoot).to.be.equal(await polygonZkEVMGlobalExitRoot.getLastGlobalExitRoot()); // check merkle proof const proof = merkleTree.getProofTreeByIndex(0); @@ -860,7 +860,7 @@ describe('PolygonZKEVMBridge Contract', () => { // verify merkle proof expect(verifyMerkleProof(leafValue, proof, index, rootJSRollup)).to.be.equal(true); - expect(await polygonZKEVMBridgeContract.verifyMerkleProof( + expect(await polygonZkEVMBridgeContract.verifyMerkleProof( leafValue, proof, index, @@ -871,7 +871,7 @@ describe('PolygonZKEVMBridge Contract', () => { * claim * Can't claim without ether */ - await expect(polygonZKEVMBridgeContract.claimAsset( + await expect(polygonZkEVMBridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -882,34 +882,34 @@ describe('PolygonZKEVMBridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('PolygonZKEVMBridge::claimAsset: ETH_TRANSFER_FAILED'); + )).to.be.revertedWith('PolygonZkEVMBridge::claimAsset: ETH_TRANSFER_FAILED'); const balanceDeployer = await ethers.provider.getBalance(deployer.address); /* - * Create a deposit to add ether to the PolygonZKEVMBridge + * Create a deposit to add ether to the PolygonZkEVMBridge * Check deposit amount ether asserts */ - await expect(polygonZKEVMBridgeContract.bridgeAsset( + await expect(polygonZkEVMBridgeContract.bridgeAsset( tokenAddress, networkIDRollup, destinationAddress, amount, '0x', { value: ethers.utils.parseEther('100') }, - )).to.be.revertedWith('PolygonZKEVMBridge::bridgeAsset: AMOUNT_DOES_NOT_MATCH_MSG_VALUE'); + )).to.be.revertedWith('PolygonZkEVMBridge::bridgeAsset: AMOUNT_DOES_NOT_MATCH_MSG_VALUE'); // Check mainnet destination assert - await expect(polygonZKEVMBridgeContract.bridgeAsset( + await expect(polygonZkEVMBridgeContract.bridgeAsset( tokenAddress, networkIDMainnet, destinationAddress, amount, '0x', { value: amount }, - )).to.be.revertedWith('PolygonZKEVMBridge::bridgeAsset: DESTINATION_CANT_BE_ITSELF'); + )).to.be.revertedWith('PolygonZkEVMBridge::bridgeAsset: DESTINATION_CANT_BE_ITSELF'); - // This is used just to pay ether to the PolygonZKEVMBridge smart contract and be able to claim it afterwards. - expect(await polygonZKEVMBridgeContract.bridgeAsset( + // This is used just to pay ether to the PolygonZkEVMBridge smart contract and be able to claim it afterwards. + expect(await polygonZkEVMBridgeContract.bridgeAsset( tokenAddress, networkIDRollup, destinationAddress, @@ -919,10 +919,10 @@ describe('PolygonZKEVMBridge Contract', () => { )); // Check balances before claim - expect(await ethers.provider.getBalance(polygonZKEVMBridgeContract.address)).to.be.equal(amount); + expect(await ethers.provider.getBalance(polygonZkEVMBridgeContract.address)).to.be.equal(amount); expect(await ethers.provider.getBalance(deployer.address)).to.be.lte(balanceDeployer.sub(amount)); - await expect(polygonZKEVMBridgeContract.claimAsset( + await expect(polygonZkEVMBridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -934,7 +934,7 @@ describe('PolygonZKEVMBridge Contract', () => { amount, metadata, )) - .to.emit(polygonZKEVMBridgeContract, 'ClaimEvent') + .to.emit(polygonZkEVMBridgeContract, 'ClaimEvent') .withArgs( index, originNetwork, @@ -944,11 +944,11 @@ describe('PolygonZKEVMBridge Contract', () => { ); // Check balances after claim - expect(await ethers.provider.getBalance(polygonZKEVMBridgeContract.address)).to.be.equal(ethers.utils.parseEther('0')); + expect(await ethers.provider.getBalance(polygonZkEVMBridgeContract.address)).to.be.equal(ethers.utils.parseEther('0')); expect(await ethers.provider.getBalance(deployer.address)).to.be.lte(balanceDeployer); // Can't claim because nullifier - await expect(polygonZKEVMBridgeContract.claimAsset( + await expect(polygonZkEVMBridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -959,7 +959,7 @@ describe('PolygonZKEVMBridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('PolygonZKEVMBridge::_verifyLeaf: ALREADY_CLAIMED'); + )).to.be.revertedWith('PolygonZkEVMBridge::_verifyLeaf: ALREADY_CLAIMED'); }); it('should claim message', async () => { @@ -973,7 +973,7 @@ describe('PolygonZKEVMBridge Contract', () => { const metadata = '0x'; // since is ether does not have metadata const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); - const mainnetExitRoot = await polygonZKEVMGlobalExitRoot.lastMainnetExitRoot(); + const mainnetExitRoot = await polygonZkEVMGlobalExitRoot.lastMainnetExitRoot(); // compute root merkle tree in Js const height = 32; @@ -993,16 +993,16 @@ describe('PolygonZKEVMBridge Contract', () => { const rootJSRollup = merkleTree.getRoot(); // add rollup Merkle root - await expect(polygonZKEVMGlobalExitRoot.connect(rollup).updateExitRoot(rootJSRollup)) - .to.emit(polygonZKEVMGlobalExitRoot, 'UpdateGlobalExitRoot') + await expect(polygonZkEVMGlobalExitRoot.connect(rollup).updateExitRoot(rootJSRollup)) + .to.emit(polygonZkEVMGlobalExitRoot, 'UpdateGlobalExitRoot') .withArgs(mainnetExitRoot, rootJSRollup); // check roots - const rollupExitRootSC = await polygonZKEVMGlobalExitRoot.lastRollupExitRoot(); + const rollupExitRootSC = await polygonZkEVMGlobalExitRoot.lastRollupExitRoot(); expect(rollupExitRootSC).to.be.equal(rootJSRollup); const computedGlobalExitRoot = calculateGlobalExitRoot(mainnetExitRoot, rollupExitRootSC); - expect(computedGlobalExitRoot).to.be.equal(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()); + expect(computedGlobalExitRoot).to.be.equal(await polygonZkEVMGlobalExitRoot.getLastGlobalExitRoot()); // check merkle proof const proof = merkleTree.getProofTreeByIndex(0); @@ -1010,7 +1010,7 @@ describe('PolygonZKEVMBridge Contract', () => { // verify merkle proof expect(verifyMerkleProof(leafValue, proof, index, rootJSRollup)).to.be.equal(true); - expect(await polygonZKEVMBridgeContract.verifyMerkleProof( + expect(await polygonZkEVMBridgeContract.verifyMerkleProof( leafValue, proof, index, @@ -1021,7 +1021,7 @@ describe('PolygonZKEVMBridge Contract', () => { * claim * Can't claim a message as an assets */ - await expect(polygonZKEVMBridgeContract.claimAsset( + await expect(polygonZkEVMBridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -1032,13 +1032,13 @@ describe('PolygonZKEVMBridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('PolygonZKEVMBridge::_verifyLeaf: SMT_INVALID'); + )).to.be.revertedWith('PolygonZkEVMBridge::_verifyLeaf: SMT_INVALID'); /* * claim * Can't claim without ether */ - await expect(polygonZKEVMBridgeContract.claimMessage( + await expect(polygonZkEVMBridgeContract.claimMessage( proof, index, mainnetExitRoot, @@ -1049,34 +1049,34 @@ describe('PolygonZKEVMBridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('PolygonZKEVMBridge::claimMessage: MESSAGE_FAILED'); + )).to.be.revertedWith('PolygonZkEVMBridge::claimMessage: MESSAGE_FAILED'); const balanceDeployer = await ethers.provider.getBalance(deployer.address); /* - * Create a deposit to add ether to the PolygonZKEVMBridge + * Create a deposit to add ether to the PolygonZkEVMBridge * Check deposit amount ether asserts */ - await expect(polygonZKEVMBridgeContract.bridgeAsset( + await expect(polygonZkEVMBridgeContract.bridgeAsset( tokenAddress, networkIDRollup, destinationAddress, amount, '0x', { value: ethers.utils.parseEther('100') }, - )).to.be.revertedWith('PolygonZKEVMBridge::bridgeAsset: AMOUNT_DOES_NOT_MATCH_MSG_VALUE'); + )).to.be.revertedWith('PolygonZkEVMBridge::bridgeAsset: AMOUNT_DOES_NOT_MATCH_MSG_VALUE'); // Check mainnet destination assert - await expect(polygonZKEVMBridgeContract.bridgeAsset( + await expect(polygonZkEVMBridgeContract.bridgeAsset( tokenAddress, networkIDMainnet, destinationAddress, amount, '0x', { value: amount }, - )).to.be.revertedWith('PolygonZKEVMBridge::bridgeAsset: DESTINATION_CANT_BE_ITSELF'); + )).to.be.revertedWith('PolygonZkEVMBridge::bridgeAsset: DESTINATION_CANT_BE_ITSELF'); - // This is used just to pay ether to the PolygonZKEVMBridge smart contract and be able to claim it afterwards. - expect(await polygonZKEVMBridgeContract.bridgeAsset( + // This is used just to pay ether to the PolygonZkEVMBridge smart contract and be able to claim it afterwards. + expect(await polygonZkEVMBridgeContract.bridgeAsset( tokenAddress, networkIDRollup, destinationAddress, @@ -1086,11 +1086,11 @@ describe('PolygonZKEVMBridge Contract', () => { )); // Check balances before claim - expect(await ethers.provider.getBalance(polygonZKEVMBridgeContract.address)).to.be.equal(amount); + expect(await ethers.provider.getBalance(polygonZkEVMBridgeContract.address)).to.be.equal(amount); expect(await ethers.provider.getBalance(deployer.address)).to.be.lte(balanceDeployer.sub(amount)); // Check mainnet destination assert - await expect(polygonZKEVMBridgeContract.claimAsset( + await expect(polygonZkEVMBridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -1101,9 +1101,9 @@ describe('PolygonZKEVMBridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('PolygonZKEVMBridge::_verifyLeaf: SMT_INVALID'); + )).to.be.revertedWith('PolygonZkEVMBridge::_verifyLeaf: SMT_INVALID'); - await expect(polygonZKEVMBridgeContract.claimMessage( + await expect(polygonZkEVMBridgeContract.claimMessage( proof, index, mainnetExitRoot, @@ -1115,7 +1115,7 @@ describe('PolygonZKEVMBridge Contract', () => { amount, metadata, )) - .to.emit(polygonZKEVMBridgeContract, 'ClaimEvent') + .to.emit(polygonZkEVMBridgeContract, 'ClaimEvent') .withArgs( index, originNetwork, @@ -1125,11 +1125,11 @@ describe('PolygonZKEVMBridge Contract', () => { ); // Check balances after claim - expect(await ethers.provider.getBalance(polygonZKEVMBridgeContract.address)).to.be.equal(ethers.utils.parseEther('0')); + expect(await ethers.provider.getBalance(polygonZkEVMBridgeContract.address)).to.be.equal(ethers.utils.parseEther('0')); expect(await ethers.provider.getBalance(deployer.address)).to.be.lte(balanceDeployer); // Can't claim because nullifier - await expect(polygonZKEVMBridgeContract.claimAsset( + await expect(polygonZkEVMBridgeContract.claimAsset( proof, index, mainnetExitRoot, @@ -1140,6 +1140,6 @@ describe('PolygonZKEVMBridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('PolygonZKEVMBridge::_verifyLeaf: ALREADY_CLAIMED'); + )).to.be.revertedWith('PolygonZkEVMBridge::_verifyLeaf: ALREADY_CLAIMED'); }); }); diff --git a/test/contracts/bridgeMock.test.js b/test/contracts/bridgeMock.test.js index e5fc0ed17..46174b0c1 100644 --- a/test/contracts/bridgeMock.test.js +++ b/test/contracts/bridgeMock.test.js @@ -10,12 +10,12 @@ function calculateGlobalExitRoot(mainnetExitRoot, rollupExitRoot) { return ethers.utils.solidityKeccak256(['bytes32', 'bytes32'], [mainnetExitRoot, rollupExitRoot]); } -describe('PolygonZKEVMBridge Mock Contract', () => { +describe('PolygonZkEVMBridge Mock Contract', () => { let deployer; let rollup; - let polygonZKEVMGlobalExitRoot; - let polygonZKEVMBridgeContract; + let polygonZkEVMGlobalExitRoot; + let polygonZkEVMBridgeContract; let tokenContract; const tokenName = 'Matic Token'; @@ -31,22 +31,22 @@ describe('PolygonZKEVMBridge Mock Contract', () => { const networkIDRollup = 1; const LEAF_TYPE_ASSET = 0; - const polygonZKEVMAddress = ethers.constants.AddressZero; + const polygonZkEVMAddress = ethers.constants.AddressZero; beforeEach('Deploy contracts', async () => { // load signers [deployer, rollup] = await ethers.getSigners(); // deploy global exit root manager - const PolygonZKEVMGlobalExitRootFactory = await ethers.getContractFactory('PolygonZKEVMGlobalExitRoot'); - polygonZKEVMGlobalExitRoot = await upgrades.deployProxy(PolygonZKEVMGlobalExitRootFactory, [], { initializer: false }); + const PolygonZkEVMGlobalExitRootFactory = await ethers.getContractFactory('PolygonZkEVMGlobalExitRoot'); + polygonZkEVMGlobalExitRoot = await upgrades.deployProxy(PolygonZkEVMGlobalExitRootFactory, [], { initializer: false }); - // deploy PolygonZKEVMBridge - const polygonZKEVMBridgeFactory = await ethers.getContractFactory('PolygonZKEVMBridgeMock'); - polygonZKEVMBridgeContract = await upgrades.deployProxy(polygonZKEVMBridgeFactory, [], { initializer: false }); + // deploy PolygonZkEVMBridge + const polygonZkEVMBridgeFactory = await ethers.getContractFactory('PolygonZkEVMBridgeMock'); + polygonZkEVMBridgeContract = await upgrades.deployProxy(polygonZkEVMBridgeFactory, [], { initializer: false }); - await polygonZKEVMGlobalExitRoot.initialize(rollup.address, polygonZKEVMBridgeContract.address); - await polygonZKEVMBridgeContract.initialize(networkIDMainnet, polygonZKEVMGlobalExitRoot.address, polygonZKEVMAddress); + await polygonZkEVMGlobalExitRoot.initialize(rollup.address, polygonZkEVMBridgeContract.address); + await polygonZkEVMBridgeContract.initialize(networkIDMainnet, polygonZkEVMGlobalExitRoot.address, polygonZkEVMAddress); // deploy token const maticTokenFactory = await ethers.getContractFactory('ERC20PermitMock'); @@ -60,12 +60,12 @@ describe('PolygonZKEVMBridge Mock Contract', () => { }); it('should check the constructor parameters', async () => { - expect(await polygonZKEVMBridgeContract.globalExitRootManager()).to.be.equal(polygonZKEVMGlobalExitRoot.address); - expect(await polygonZKEVMBridgeContract.networkID()).to.be.equal(networkIDMainnet); + expect(await polygonZkEVMBridgeContract.globalExitRootManager()).to.be.equal(polygonZkEVMGlobalExitRoot.address); + expect(await polygonZkEVMBridgeContract.networkID()).to.be.equal(networkIDMainnet); }); - it('should PolygonZKEVMBridge and verify merkle proof', async () => { - const depositCount = await polygonZKEVMBridgeContract.depositCount(); + it('should PolygonZkEVMBridge and verify merkle proof', async () => { + const depositCount = await polygonZkEVMBridgeContract.depositCount(); const originNetwork = networkIDMainnet; const tokenAddress = tokenContract.address; const amount = ethers.utils.parseEther('10'); @@ -76,14 +76,14 @@ describe('PolygonZKEVMBridge Mock Contract', () => { const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); const balanceDeployer = await tokenContract.balanceOf(deployer.address); - const balanceBridge = await tokenContract.balanceOf(polygonZKEVMBridgeContract.address); + const balanceBridge = await tokenContract.balanceOf(polygonZkEVMBridgeContract.address); - const rollupExitRoot = await polygonZKEVMGlobalExitRoot.lastRollupExitRoot(); + const rollupExitRoot = await polygonZkEVMGlobalExitRoot.lastRollupExitRoot(); // create a new deposit - await expect(tokenContract.approve(polygonZKEVMBridgeContract.address, amount)) + await expect(tokenContract.approve(polygonZkEVMBridgeContract.address, amount)) .to.emit(tokenContract, 'Approval') - .withArgs(deployer.address, polygonZKEVMBridgeContract.address, amount); + .withArgs(deployer.address, polygonZkEVMBridgeContract.address, amount); // pre compute root merkle tree in Js const height = 32; @@ -100,17 +100,17 @@ describe('PolygonZKEVMBridge Mock Contract', () => { merkleTree.add(leafValue); const rootJSMainnet = merkleTree.getRoot(); - await expect(polygonZKEVMBridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x')) - .to.emit(polygonZKEVMBridgeContract, 'BridgeEvent') + await expect(polygonZkEVMBridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x')) + .to.emit(polygonZkEVMBridgeContract, 'BridgeEvent') .withArgs(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount) - .to.emit(polygonZKEVMGlobalExitRoot, 'UpdateGlobalExitRoot') + .to.emit(polygonZkEVMGlobalExitRoot, 'UpdateGlobalExitRoot') .withArgs(rootJSMainnet, rollupExitRoot); expect(await tokenContract.balanceOf(deployer.address)).to.be.equal(balanceDeployer.sub(amount)); - expect(await tokenContract.balanceOf(polygonZKEVMBridgeContract.address)).to.be.equal(balanceBridge.add(amount)); + expect(await tokenContract.balanceOf(polygonZkEVMBridgeContract.address)).to.be.equal(balanceBridge.add(amount)); // check merkle root with SC - const rootSCMainnet = await polygonZKEVMBridgeContract.getDepositRoot(); + const rootSCMainnet = await polygonZkEVMBridgeContract.getDepositRoot(); expect(rootSCMainnet).to.be.equal(rootJSMainnet); // check merkle proof @@ -119,7 +119,7 @@ describe('PolygonZKEVMBridge Mock Contract', () => { // verify merkle proof expect(verifyMerkleProof(leafValue, proof, index, rootSCMainnet)).to.be.equal(true); - expect(await polygonZKEVMBridgeContract.verifyMerkleProof( + expect(await polygonZkEVMBridgeContract.verifyMerkleProof( leafValue, proof, index, @@ -127,26 +127,26 @@ describe('PolygonZKEVMBridge Mock Contract', () => { )).to.be.equal(true); const computedGlobalExitRoot = calculateGlobalExitRoot(rootJSMainnet, rollupExitRoot); - expect(computedGlobalExitRoot).to.be.equal(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()); + expect(computedGlobalExitRoot).to.be.equal(await polygonZkEVMGlobalExitRoot.getLastGlobalExitRoot()); }); - it('shouldnt be able to PolygonZKEVMBridge more thna 0.25e ehters', async () => { + it('shouldnt be able to PolygonZkEVMBridge more thna 0.25e ehters', async () => { // Add a claim leaf to rollup exit tree const tokenAddress = ethers.constants.AddressZero; // ether const amount = ethers.utils.parseEther('10'); const destinationNetwork = networkIDRollup; const destinationAddress = deployer.address; - await expect(polygonZKEVMBridgeContract.bridgeAsset( + await expect(polygonZkEVMBridgeContract.bridgeAsset( tokenAddress, destinationNetwork, destinationAddress, amount, ethers.utils.parseEther('10'), { value: ethers.utils.parseEther('10') }, - )).to.be.revertedWith('PolygonZKEVMBridge::bridgeAsset: Cannot bridge more than maxEtherBridge'); + )).to.be.revertedWith('PolygonZkEVMBridge::bridgeAsset: Cannot bridge more than maxEtherBridge'); - await polygonZKEVMBridgeContract.bridgeAsset( + await polygonZkEVMBridgeContract.bridgeAsset( tokenAddress, destinationNetwork, destinationAddress, diff --git a/test/contracts/bridge_permit.test.js b/test/contracts/bridge_permit.test.js index 19f08b5e9..6b4fe3ef0 100644 --- a/test/contracts/bridge_permit.test.js +++ b/test/contracts/bridge_permit.test.js @@ -18,12 +18,12 @@ function calculateGlobalExitRoot(mainnetExitRoot, rollupExitRoot) { return ethers.utils.solidityKeccak256(['bytes32', 'bytes32'], [mainnetExitRoot, rollupExitRoot]); } -describe('PolygonZKEVMBridge Contract Permit tests', () => { +describe('PolygonZkEVMBridge Contract Permit tests', () => { let deployer; let rollup; - let polygonZKEVMGlobalExitRoot; - let polygonZKEVMBridgeContract; + let polygonZkEVMGlobalExitRoot; + let polygonZkEVMBridgeContract; let tokenContract; const tokenName = 'Matic Token'; @@ -39,22 +39,22 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { const networkIDRollup = 1; const LEAF_TYPE_ASSET = 0; - const polygonZKEVMAddress = ethers.constants.AddressZero; + const polygonZkEVMAddress = ethers.constants.AddressZero; beforeEach('Deploy contracts', async () => { // load signers [deployer, rollup] = await ethers.getSigners(); // deploy global exit root manager - const polygonZKEVMGlobalExitRootFactory = await ethers.getContractFactory('PolygonZKEVMGlobalExitRoot'); - polygonZKEVMGlobalExitRoot = await upgrades.deployProxy(polygonZKEVMGlobalExitRootFactory, [], { initializer: false }); + const polygonZkEVMGlobalExitRootFactory = await ethers.getContractFactory('PolygonZkEVMGlobalExitRoot'); + polygonZkEVMGlobalExitRoot = await upgrades.deployProxy(polygonZkEVMGlobalExitRootFactory, [], { initializer: false }); - // deploy PolygonZKEVMBridge - const polygonZKEVMBridgeFactory = await ethers.getContractFactory('PolygonZKEVMBridge'); - polygonZKEVMBridgeContract = await upgrades.deployProxy(polygonZKEVMBridgeFactory, [], { initializer: false }); + // deploy PolygonZkEVMBridge + const polygonZkEVMBridgeFactory = await ethers.getContractFactory('PolygonZkEVMBridge'); + polygonZkEVMBridgeContract = await upgrades.deployProxy(polygonZkEVMBridgeFactory, [], { initializer: false }); - await polygonZKEVMGlobalExitRoot.initialize(rollup.address, polygonZKEVMBridgeContract.address); - await polygonZKEVMBridgeContract.initialize(networkIDMainnet, polygonZKEVMGlobalExitRoot.address, polygonZKEVMAddress); + await polygonZkEVMGlobalExitRoot.initialize(rollup.address, polygonZkEVMBridgeContract.address); + await polygonZkEVMBridgeContract.initialize(networkIDMainnet, polygonZkEVMGlobalExitRoot.address, polygonZkEVMAddress); // deploy token const maticTokenFactory = await ethers.getContractFactory('TokenWrapped'); @@ -68,8 +68,8 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { await tokenContract.mint(deployer.address, tokenInitialBalance); }); - it('should PolygonZKEVMBridge and with permit eip-2612 compilant', async () => { - const depositCount = await polygonZKEVMBridgeContract.depositCount(); + it('should PolygonZkEVMBridge and with permit eip-2612 compilant', async () => { + const depositCount = await polygonZkEVMBridgeContract.depositCount(); const originNetwork = networkIDMainnet; const tokenAddress = tokenContract.address; const amount = ethers.utils.parseEther('10'); @@ -80,9 +80,9 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); const balanceDeployer = await tokenContract.balanceOf(deployer.address); - const balanceBridge = await tokenContract.balanceOf(polygonZKEVMBridgeContract.address); + const balanceBridge = await tokenContract.balanceOf(polygonZkEVMBridgeContract.address); - const rollupExitRoot = await polygonZKEVMGlobalExitRoot.lastRollupExitRoot(); + const rollupExitRoot = await polygonZkEVMGlobalExitRoot.lastRollupExitRoot(); // pre compute root merkle tree in Js const height = 32; @@ -99,7 +99,7 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { merkleTree.add(leafValue); const rootJSMainnet = merkleTree.getRoot(); - await expect(polygonZKEVMBridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x')) + await expect(polygonZkEVMBridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x')) .to.be.revertedWith('ERC20: insufficient allowance'); // user permit @@ -110,7 +110,7 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { const { v, r, s } = await createPermitSignature( tokenContract, deployer, - polygonZKEVMBridgeContract.address, + polygonZkEVMBridgeContract.address, amount, nonce, deadline, @@ -119,7 +119,7 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { const dataPermit = ifacePermit.encodeFunctionData('permit', [ deployer.address, - polygonZKEVMBridgeContract.address, + polygonZkEVMBridgeContract.address, amount, deadline, v, @@ -127,17 +127,17 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { s, ]); - await expect(polygonZKEVMBridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, dataPermit)) - .to.emit(polygonZKEVMBridgeContract, 'BridgeEvent') + await expect(polygonZkEVMBridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, dataPermit)) + .to.emit(polygonZkEVMBridgeContract, 'BridgeEvent') .withArgs(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount) - .to.emit(polygonZKEVMGlobalExitRoot, 'UpdateGlobalExitRoot') + .to.emit(polygonZkEVMGlobalExitRoot, 'UpdateGlobalExitRoot') .withArgs(rootJSMainnet, rollupExitRoot); expect(await tokenContract.balanceOf(deployer.address)).to.be.equal(balanceDeployer.sub(amount)); - expect(await tokenContract.balanceOf(polygonZKEVMBridgeContract.address)).to.be.equal(balanceBridge.add(amount)); + expect(await tokenContract.balanceOf(polygonZkEVMBridgeContract.address)).to.be.equal(balanceBridge.add(amount)); // check merkle root with SC - const rootSCMainnet = await polygonZKEVMBridgeContract.getDepositRoot(); + const rootSCMainnet = await polygonZkEVMBridgeContract.getDepositRoot(); expect(rootSCMainnet).to.be.equal(rootJSMainnet); // check merkle proof @@ -146,7 +146,7 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { // verify merkle proof expect(verifyMerkleProof(leafValue, proof, index, rootSCMainnet)).to.be.equal(true); - expect(await polygonZKEVMBridgeContract.verifyMerkleProof( + expect(await polygonZkEVMBridgeContract.verifyMerkleProof( leafValue, proof, index, @@ -154,10 +154,10 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { )).to.be.equal(true); const computedGlobalExitRoot = calculateGlobalExitRoot(rootJSMainnet, rollupExitRoot); - expect(computedGlobalExitRoot).to.be.equal(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()); + expect(computedGlobalExitRoot).to.be.equal(await polygonZkEVMGlobalExitRoot.getLastGlobalExitRoot()); }); - it('should PolygonZKEVMBridge with permit DAI type contracts', async () => { + it('should PolygonZkEVMBridge with permit DAI type contracts', async () => { const { chainId } = await ethers.provider.getNetwork(); const daiTokenFactory = await ethers.getContractFactory('Dai'); const daiContract = await daiTokenFactory.deploy( @@ -166,7 +166,7 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { await daiContract.deployed(); await daiContract.mint(deployer.address, ethers.utils.parseEther('100')); - const depositCount = await polygonZKEVMBridgeContract.depositCount(); + const depositCount = await polygonZkEVMBridgeContract.depositCount(); const originNetwork = networkIDMainnet; const tokenAddress = daiContract.address; const amount = ethers.utils.parseEther('10'); @@ -180,9 +180,9 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); const balanceDeployer = await daiContract.balanceOf(deployer.address); - const balanceBridge = await daiContract.balanceOf(polygonZKEVMBridgeContract.address); + const balanceBridge = await daiContract.balanceOf(polygonZkEVMBridgeContract.address); - const rollupExitRoot = await polygonZKEVMGlobalExitRoot.lastRollupExitRoot(); + const rollupExitRoot = await polygonZkEVMGlobalExitRoot.lastRollupExitRoot(); // pre compute root merkle tree in Js const height = 32; @@ -199,7 +199,7 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { merkleTree.add(leafValue); const rootJSMainnet = merkleTree.getRoot(); - await expect(polygonZKEVMBridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x')) + await expect(polygonZkEVMBridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x')) .to.be.revertedWith('Dai/insufficient-allowance'); // user permit @@ -209,14 +209,14 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { const { v, r, s } = await createPermitSignatureDaiType( daiContract, deployer, - polygonZKEVMBridgeContract.address, + polygonZkEVMBridgeContract.address, nonce, deadline, chainId, ); const dataPermit = ifacePermitDAI.encodeFunctionData('permit', [ deployer.address, - polygonZKEVMBridgeContract.address, + polygonZkEVMBridgeContract.address, nonce, deadline, true, @@ -225,17 +225,17 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { s, ]); - await expect(polygonZKEVMBridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, dataPermit)) - .to.emit(polygonZKEVMBridgeContract, 'BridgeEvent') + await expect(polygonZkEVMBridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, dataPermit)) + .to.emit(polygonZkEVMBridgeContract, 'BridgeEvent') .withArgs(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount) - .to.emit(polygonZKEVMGlobalExitRoot, 'UpdateGlobalExitRoot') + .to.emit(polygonZkEVMGlobalExitRoot, 'UpdateGlobalExitRoot') .withArgs(rootJSMainnet, rollupExitRoot); expect(await daiContract.balanceOf(deployer.address)).to.be.equal(balanceDeployer.sub(amount)); - expect(await daiContract.balanceOf(polygonZKEVMBridgeContract.address)).to.be.equal(balanceBridge.add(amount)); + expect(await daiContract.balanceOf(polygonZkEVMBridgeContract.address)).to.be.equal(balanceBridge.add(amount)); // check merkle root with SC - const rootSCMainnet = await polygonZKEVMBridgeContract.getDepositRoot(); + const rootSCMainnet = await polygonZkEVMBridgeContract.getDepositRoot(); expect(rootSCMainnet).to.be.equal(rootJSMainnet); // check merkle proof @@ -244,7 +244,7 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { // verify merkle proof expect(verifyMerkleProof(leafValue, proof, index, rootSCMainnet)).to.be.equal(true); - expect(await polygonZKEVMBridgeContract.verifyMerkleProof( + expect(await polygonZkEVMBridgeContract.verifyMerkleProof( leafValue, proof, index, @@ -252,10 +252,10 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { )).to.be.equal(true); const computedGlobalExitRoot = calculateGlobalExitRoot(rootJSMainnet, rollupExitRoot); - expect(computedGlobalExitRoot).to.be.equal(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()); + expect(computedGlobalExitRoot).to.be.equal(await polygonZkEVMGlobalExitRoot.getLastGlobalExitRoot()); }); - it('should PolygonZKEVMBridge with permit UNI type contracts', async () => { + it('should PolygonZkEVMBridge with permit UNI type contracts', async () => { const uniTokenFactory = await ethers.getContractFactory('Uni'); const uniContract = await uniTokenFactory.deploy( deployer.address, @@ -265,7 +265,7 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { await uniContract.deployed(); await uniContract.mint(deployer.address, ethers.utils.parseEther('100')); - const depositCount = await polygonZKEVMBridgeContract.depositCount(); + const depositCount = await polygonZkEVMBridgeContract.depositCount(); const originNetwork = networkIDMainnet; const tokenAddress = uniContract.address; const amount = ethers.utils.parseEther('10'); @@ -279,9 +279,9 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { const metadataHash = ethers.utils.solidityKeccak256(['bytes'], [metadata]); const balanceDeployer = await uniContract.balanceOf(deployer.address); - const balanceBridge = await uniContract.balanceOf(polygonZKEVMBridgeContract.address); + const balanceBridge = await uniContract.balanceOf(polygonZkEVMBridgeContract.address); - const rollupExitRoot = await polygonZKEVMGlobalExitRoot.lastRollupExitRoot(); + const rollupExitRoot = await polygonZkEVMGlobalExitRoot.lastRollupExitRoot(); // pre compute root merkle tree in Js const height = 32; @@ -298,7 +298,7 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { merkleTree.add(leafValue); const rootJSMainnet = merkleTree.getRoot(); - await expect(polygonZKEVMBridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x')) + await expect(polygonZkEVMBridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, '0x')) .to.be.revertedWith('Uni::transferFrom: transfer amount exceeds spender allowance'); // user permit @@ -309,7 +309,7 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { const { v, r, s } = await createPermitSignatureUniType( uniContract, deployer, - polygonZKEVMBridgeContract.address, + polygonZkEVMBridgeContract.address, amount, nonce, deadline, @@ -317,7 +317,7 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { ); const dataPermit = ifacePermit.encodeFunctionData('permit', [ deployer.address, - polygonZKEVMBridgeContract.address, + polygonZkEVMBridgeContract.address, amount, deadline, v, @@ -325,17 +325,17 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { s, ]); - await expect(polygonZKEVMBridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, dataPermit)) - .to.emit(polygonZKEVMBridgeContract, 'BridgeEvent') + await expect(polygonZkEVMBridgeContract.bridgeAsset(tokenAddress, destinationNetwork, destinationAddress, amount, dataPermit)) + .to.emit(polygonZkEVMBridgeContract, 'BridgeEvent') .withArgs(originNetwork, tokenAddress, destinationNetwork, destinationAddress, amount, metadata, depositCount) - .to.emit(polygonZKEVMGlobalExitRoot, 'UpdateGlobalExitRoot') + .to.emit(polygonZkEVMGlobalExitRoot, 'UpdateGlobalExitRoot') .withArgs(rootJSMainnet, rollupExitRoot); expect(await uniContract.balanceOf(deployer.address)).to.be.equal(balanceDeployer.sub(amount)); - expect(await uniContract.balanceOf(polygonZKEVMBridgeContract.address)).to.be.equal(balanceBridge.add(amount)); + expect(await uniContract.balanceOf(polygonZkEVMBridgeContract.address)).to.be.equal(balanceBridge.add(amount)); // check merkle root with SC - const rootSCMainnet = await polygonZKEVMBridgeContract.getDepositRoot(); + const rootSCMainnet = await polygonZkEVMBridgeContract.getDepositRoot(); expect(rootSCMainnet).to.be.equal(rootJSMainnet); // check merkle proof @@ -344,7 +344,7 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { // verify merkle proof expect(verifyMerkleProof(leafValue, proof, index, rootSCMainnet)).to.be.equal(true); - expect(await polygonZKEVMBridgeContract.verifyMerkleProof( + expect(await polygonZkEVMBridgeContract.verifyMerkleProof( leafValue, proof, index, @@ -352,6 +352,6 @@ describe('PolygonZKEVMBridge Contract Permit tests', () => { )).to.be.equal(true); const computedGlobalExitRoot = calculateGlobalExitRoot(rootJSMainnet, rollupExitRoot); - expect(computedGlobalExitRoot).to.be.equal(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()); + expect(computedGlobalExitRoot).to.be.equal(await polygonZkEVMGlobalExitRoot.getLastGlobalExitRoot()); }); }); diff --git a/test/contracts/emergencyManager.test.js b/test/contracts/emergencyManager.test.js index 0f5bcd333..71f9f998a 100644 --- a/test/contracts/emergencyManager.test.js +++ b/test/contracts/emergencyManager.test.js @@ -8,10 +8,10 @@ describe('Emergency mode test', () => { let admin; let verifierContract; - let polygonZKEVMBridgeContract; - let polygonZKEVMContract; + let polygonZkEVMBridgeContract; + let polygonZkEVMContract; let maticTokenContract; - let polygonZKEVMGlobalExitRoot; + let polygonZkEVMGlobalExitRoot; const maticTokenName = 'Matic Token'; const maticTokenSymbol = 'MATIC'; @@ -48,24 +48,24 @@ describe('Emergency mode test', () => { await maticTokenContract.deployed(); // deploy global exit root manager - const PolygonZKEVMGlobalExitRootFactory = await ethers.getContractFactory('PolygonZKEVMGlobalExitRoot'); - polygonZKEVMGlobalExitRoot = await upgrades.deployProxy(PolygonZKEVMGlobalExitRootFactory, [], { initializer: false }); + const PolygonZkEVMGlobalExitRootFactory = await ethers.getContractFactory('PolygonZkEVMGlobalExitRoot'); + polygonZkEVMGlobalExitRoot = await upgrades.deployProxy(PolygonZkEVMGlobalExitRootFactory, [], { initializer: false }); - // deploy PolygonZKEVMBridge - const polygonZKEVMBridgeFactory = await ethers.getContractFactory('PolygonZKEVMBridge'); - polygonZKEVMBridgeContract = await upgrades.deployProxy(polygonZKEVMBridgeFactory, [], { initializer: false }); + // deploy PolygonZkEVMBridge + const polygonZkEVMBridgeFactory = await ethers.getContractFactory('PolygonZkEVMBridge'); + polygonZkEVMBridgeContract = await upgrades.deployProxy(polygonZkEVMBridgeFactory, [], { initializer: false }); // deploy PoE - const PolygonZKEVMFactory = await ethers.getContractFactory('PolygonZKEVMMock'); - polygonZKEVMContract = await upgrades.deployProxy(PolygonZKEVMFactory, [], { initializer: false }); + const PolygonZkEVMFactory = await ethers.getContractFactory('PolygonZkEVMMock'); + polygonZkEVMContract = await upgrades.deployProxy(PolygonZkEVMFactory, [], { initializer: false }); - await polygonZKEVMGlobalExitRoot.initialize(polygonZKEVMContract.address, polygonZKEVMBridgeContract.address); - await polygonZKEVMBridgeContract.initialize(networkIDMainnet, polygonZKEVMGlobalExitRoot.address, polygonZKEVMContract.address); - await polygonZKEVMContract.initialize( - polygonZKEVMGlobalExitRoot.address, + await polygonZkEVMGlobalExitRoot.initialize(polygonZkEVMContract.address, polygonZkEVMBridgeContract.address); + await polygonZkEVMBridgeContract.initialize(networkIDMainnet, polygonZkEVMGlobalExitRoot.address, polygonZkEVMContract.address); + await polygonZkEVMContract.initialize( + polygonZkEVMGlobalExitRoot.address, maticTokenContract.address, verifierContract.address, - polygonZKEVMBridgeContract.address, + polygonZkEVMBridgeContract.address, { admin: admin.address, chainID, @@ -86,26 +86,26 @@ describe('Emergency mode test', () => { it('should activate emergency mode', async () => { // Check isEmergencyState - expect(await polygonZKEVMContract.isEmergencyState()).to.be.equal(false); - expect(await polygonZKEVMBridgeContract.isEmergencyState()).to.be.equal(false); + expect(await polygonZkEVMContract.isEmergencyState()).to.be.equal(false); + expect(await polygonZkEVMBridgeContract.isEmergencyState()).to.be.equal(false); // Set isEmergencyState - await expect(polygonZKEVMContract.connect(admin).activateEmergencyState(1)) - .to.be.revertedWith('PolygonZKEVM::activateEmergencyState: Batch not sequenced or not end of sequence'); + await expect(polygonZkEVMContract.connect(admin).activateEmergencyState(1)) + .to.be.revertedWith('PolygonZkEVM::activateEmergencyState: Batch not sequenced or not end of sequence'); - await expect(polygonZKEVMBridgeContract.connect(deployer).activateEmergencyState()) - .to.be.revertedWith('PolygonZKEVM::onlyPolygonZKEVM: only Polygon ZK-EVM contract'); + await expect(polygonZkEVMBridgeContract.connect(deployer).activateEmergencyState()) + .to.be.revertedWith('PolygonZkEVM::onlyPolygonZkEVM: only Polygon ZK-EVM contract'); - await expect(polygonZKEVMContract.activateEmergencyState(0)) - .to.emit(polygonZKEVMContract, 'EmergencyStateActivated') - .to.emit(polygonZKEVMBridgeContract, 'EmergencyStateActivated'); + await expect(polygonZkEVMContract.activateEmergencyState(0)) + .to.emit(polygonZkEVMContract, 'EmergencyStateActivated') + .to.emit(polygonZkEVMBridgeContract, 'EmergencyStateActivated'); - expect(await polygonZKEVMContract.isEmergencyState()).to.be.equal(true); - expect(await polygonZKEVMBridgeContract.isEmergencyState()).to.be.equal(true); + expect(await polygonZkEVMContract.isEmergencyState()).to.be.equal(true); + expect(await polygonZkEVMBridgeContract.isEmergencyState()).to.be.equal(true); // Once in emergency state no sequenceBatches/forceBatches can be done const l2txData = '0x123456'; - const maticAmount = await polygonZKEVMContract.getCurrentBatchFee(); + const maticAmount = await polygonZkEVMContract.getCurrentBatchFee(); const currentTimestamp = (await ethers.provider.getBlock()).timestamp; const sequence = { @@ -116,21 +116,21 @@ describe('Emergency mode test', () => { }; // revert because emergency state - await expect(polygonZKEVMContract.sequenceBatches([sequence])) + await expect(polygonZkEVMContract.sequenceBatches([sequence])) .to.be.revertedWith('EmergencyManager::ifNotEmergencyState: only if not emergency state'); // revert because emergency state - await expect(polygonZKEVMContract.sequenceForceBatches([sequence])) + await expect(polygonZkEVMContract.sequenceForceBatches([sequence])) .to.be.revertedWith('EmergencyManager::ifNotEmergencyState: only if not emergency state'); // revert because emergency state - await expect(polygonZKEVMContract.forceBatch(l2txData, maticAmount)) + await expect(polygonZkEVMContract.forceBatch(l2txData, maticAmount)) .to.be.revertedWith('EmergencyManager::ifNotEmergencyState: only if not emergency state'); // trustedAggregator forge the batch const newLocalExitRoot = '0x0000000000000000000000000000000000000000000000000000000000000001'; const newStateRoot = '0x0000000000000000000000000000000000000000000000000000000000000001'; - const numBatch = (await polygonZKEVMContract.lastVerifiedBatch()).toNumber() + 1; + const numBatch = (await polygonZkEVMContract.lastVerifiedBatch()).toNumber() + 1; const proofA = ['0', '0']; const proofB = [ ['0', '0'], @@ -140,7 +140,7 @@ describe('Emergency mode test', () => { const pendingStateNum = 0; await expect( - polygonZKEVMContract.connect(trustedAggregator).verifyBatches( + polygonZkEVMContract.connect(trustedAggregator).verifyBatches( pendingStateNum, numBatch - 1, numBatch, @@ -152,13 +152,13 @@ describe('Emergency mode test', () => { ), ).to.be.revertedWith('EmergencyManager::ifNotEmergencyState: only if not emergency state'); - // Check PolygonZKEVMBridge no PolygonZKEVMBridge is in emergency state also + // Check PolygonZkEVMBridge no PolygonZkEVMBridge is in emergency state also const tokenAddress = ethers.constants.AddressZero; const amount = ethers.utils.parseEther('10'); const destinationNetwork = 1; const destinationAddress = deployer.address; - await expect(polygonZKEVMBridgeContract.bridgeAsset( + await expect(polygonZkEVMBridgeContract.bridgeAsset( tokenAddress, destinationNetwork, destinationAddress, @@ -166,7 +166,7 @@ describe('Emergency mode test', () => { '0x', )).to.be.revertedWith('EmergencyManager::ifNotEmergencyState: only if not emergency state'); - await expect(polygonZKEVMBridgeContract.bridgeMessage( + await expect(polygonZkEVMBridgeContract.bridgeMessage( destinationNetwork, destinationAddress, '0x', @@ -176,7 +176,7 @@ describe('Emergency mode test', () => { const index = 0; const root = ethers.constants.HashZero; - await expect(polygonZKEVMBridgeContract.claimAsset( + await expect(polygonZkEVMBridgeContract.claimAsset( proof, index, root, @@ -189,7 +189,7 @@ describe('Emergency mode test', () => { '0x', )).to.be.revertedWith('EmergencyManager::ifNotEmergencyState: only if not emergency state'); - await expect(polygonZKEVMBridgeContract.claimMessage( + await expect(polygonZkEVMBridgeContract.claimMessage( proof, index, root, @@ -203,35 +203,35 @@ describe('Emergency mode test', () => { )).to.be.revertedWith('EmergencyManager::ifNotEmergencyState: only if not emergency state'); // Emergency council should deactivate emergency mode - await expect(polygonZKEVMContract.activateEmergencyState(0)) + await expect(polygonZkEVMContract.activateEmergencyState(0)) .to.be.revertedWith('EmergencyManager::ifNotEmergencyState: only if not emergency state'); - await expect(polygonZKEVMBridgeContract.connect(deployer).deactivateEmergencyState()) - .to.be.revertedWith('PolygonZKEVM::onlyPolygonZKEVM: only Polygon ZK-EVM contract'); + await expect(polygonZkEVMBridgeContract.connect(deployer).deactivateEmergencyState()) + .to.be.revertedWith('PolygonZkEVM::onlyPolygonZkEVM: only Polygon ZK-EVM contract'); - await expect(polygonZKEVMContract.deactivateEmergencyState()) - .to.be.revertedWith('PolygonZKEVM::onlyAdmin: only admin'); + await expect(polygonZkEVMContract.deactivateEmergencyState()) + .to.be.revertedWith('PolygonZkEVM::onlyAdmin: only admin'); - await expect(polygonZKEVMContract.connect(admin).deactivateEmergencyState()) - .to.emit(polygonZKEVMContract, 'EmergencyStateDeactivated') - .to.emit(polygonZKEVMBridgeContract, 'EmergencyStateDeactivated'); + await expect(polygonZkEVMContract.connect(admin).deactivateEmergencyState()) + .to.emit(polygonZkEVMContract, 'EmergencyStateDeactivated') + .to.emit(polygonZkEVMBridgeContract, 'EmergencyStateDeactivated'); // Check isEmergencyState - expect(await polygonZKEVMContract.isEmergencyState()).to.be.equal(false); - expect(await polygonZKEVMBridgeContract.isEmergencyState()).to.be.equal(false); + expect(await polygonZkEVMContract.isEmergencyState()).to.be.equal(false); + expect(await polygonZkEVMBridgeContract.isEmergencyState()).to.be.equal(false); /* * Continue normal flow * Approve tokens */ await expect( - maticTokenContract.connect(trustedSequencer).approve(polygonZKEVMContract.address, maticAmount), + maticTokenContract.connect(trustedSequencer).approve(polygonZkEVMContract.address, maticAmount), ).to.emit(maticTokenContract, 'Approval'); - const lastBatchSequenced = await polygonZKEVMContract.lastBatchSequenced(); + const lastBatchSequenced = await polygonZkEVMContract.lastBatchSequenced(); // Sequence Batches - await expect(polygonZKEVMContract.connect(trustedSequencer).sequenceBatches([sequence])) - .to.emit(polygonZKEVMContract, 'SequenceBatches') + await expect(polygonZkEVMContract.connect(trustedSequencer).sequenceBatches([sequence])) + .to.emit(polygonZkEVMContract, 'SequenceBatches') .withArgs(lastBatchSequenced + 1); // trustedAggregator forge the batch @@ -242,7 +242,7 @@ describe('Emergency mode test', () => { // Verify batch await expect( - polygonZKEVMContract.connect(trustedAggregator).verifyBatches( + polygonZkEVMContract.connect(trustedAggregator).verifyBatches( pendingStateNum, numBatch - 1, numBatch, @@ -252,7 +252,7 @@ describe('Emergency mode test', () => { proofB, proofC, ), - ).to.emit(polygonZKEVMContract, 'VerifyBatches') + ).to.emit(polygonZkEVMContract, 'VerifyBatches') .withArgs(numBatch, newStateRoot, trustedAggregator.address); const finalAggregatorMatic = await maticTokenContract.balanceOf( @@ -266,7 +266,7 @@ describe('Emergency mode test', () => { const finalPendingStateNum = 1; await expect( - polygonZKEVMContract.connect(trustedAggregator).proveNonDeterministicPendingState( + polygonZkEVMContract.connect(trustedAggregator).proveNonDeterministicPendingState( pendingStateNum, finalPendingStateNum, numBatch - 1, @@ -277,10 +277,10 @@ describe('Emergency mode test', () => { proofB, proofC, ), - ).to.be.revertedWith('PolygonZKEVM::proveNonDeterministicPendingState: finalNewBatch must be equal than currentLastVerifiedBatch'); + ).to.be.revertedWith('PolygonZkEVM::proveNonDeterministicPendingState: finalNewBatch must be equal than currentLastVerifiedBatch'); await expect( - polygonZKEVMContract.connect(trustedAggregator).proveNonDeterministicPendingState( + polygonZkEVMContract.connect(trustedAggregator).proveNonDeterministicPendingState( pendingStateNum, finalPendingStateNum, numBatch - 1, @@ -291,12 +291,12 @@ describe('Emergency mode test', () => { proofB, proofC, ), - ).to.be.revertedWith('PolygonZKEVM::proveNonDeterministicPendingState: finalNewBatch must be equal than currentLastVerifiedBatch'); + ).to.be.revertedWith('PolygonZkEVM::proveNonDeterministicPendingState: finalNewBatch must be equal than currentLastVerifiedBatch'); const newStateRootDistinct = '0x0000000000000000000000000000000000000000000000000000000000000002'; await expect( - polygonZKEVMContract.proveNonDeterministicPendingState( + polygonZkEVMContract.proveNonDeterministicPendingState( pendingStateNum, finalPendingStateNum, numBatch - 1, @@ -307,12 +307,12 @@ describe('Emergency mode test', () => { proofB, proofC, ), - ).to.emit(polygonZKEVMContract, 'ProveNonDeterministicPendingState').withArgs(newStateRoot, newStateRootDistinct) - .to.emit(polygonZKEVMContract, 'EmergencyStateActivated') - .to.emit(polygonZKEVMBridgeContract, 'EmergencyStateActivated'); + ).to.emit(polygonZkEVMContract, 'ProveNonDeterministicPendingState').withArgs(newStateRoot, newStateRootDistinct) + .to.emit(polygonZkEVMContract, 'EmergencyStateActivated') + .to.emit(polygonZkEVMBridgeContract, 'EmergencyStateActivated'); // Check emergency state is active - expect(await polygonZKEVMContract.isEmergencyState()).to.be.equal(true); - expect(await polygonZKEVMBridgeContract.isEmergencyState()).to.be.equal(true); + expect(await polygonZkEVMContract.isEmergencyState()).to.be.equal(true); + expect(await polygonZkEVMBridgeContract.isEmergencyState()).to.be.equal(true); }); }); diff --git a/test/contracts/globalExitRootManager.test.js b/test/contracts/globalExitRootManager.test.js index 86b0daefa..1533639bd 100644 --- a/test/contracts/globalExitRootManager.test.js +++ b/test/contracts/globalExitRootManager.test.js @@ -8,52 +8,52 @@ const zero32bytes = '0x000000000000000000000000000000000000000000000000000000000 describe('Global Exit Root', () => { let rollup; - let PolygonZKEVMBridge; + let PolygonZkEVMBridge; - let polygonZKEVMGlobalExitRoot; + let polygonZkEVMGlobalExitRoot; beforeEach('Deploy contracts', async () => { // load signers - [, rollup, PolygonZKEVMBridge] = await ethers.getSigners(); + [, rollup, PolygonZkEVMBridge] = await ethers.getSigners(); // deploy global exit root manager - const PolygonZKEVMGlobalExitRootFactory = await ethers.getContractFactory('PolygonZKEVMGlobalExitRoot'); - polygonZKEVMGlobalExitRoot = await upgrades.deployProxy( - PolygonZKEVMGlobalExitRootFactory, + const PolygonZkEVMGlobalExitRootFactory = await ethers.getContractFactory('PolygonZkEVMGlobalExitRoot'); + polygonZkEVMGlobalExitRoot = await upgrades.deployProxy( + PolygonZkEVMGlobalExitRootFactory, [rollup.address, - PolygonZKEVMBridge.address], + PolygonZkEVMBridge.address], ); - await polygonZKEVMGlobalExitRoot.deployed(); + await polygonZkEVMGlobalExitRoot.deployed(); }); it('should check the constructor parameters', async () => { - expect(await polygonZKEVMGlobalExitRoot.rollupAddress()).to.be.equal(rollup.address); - expect(await polygonZKEVMGlobalExitRoot.bridgeAddress()).to.be.equal(PolygonZKEVMBridge.address); - expect(await polygonZKEVMGlobalExitRoot.lastRollupExitRoot()).to.be.equal(zero32bytes); - expect(await polygonZKEVMGlobalExitRoot.lastMainnetExitRoot()).to.be.equal(zero32bytes); + expect(await polygonZkEVMGlobalExitRoot.rollupAddress()).to.be.equal(rollup.address); + expect(await polygonZkEVMGlobalExitRoot.bridgeAddress()).to.be.equal(PolygonZkEVMBridge.address); + expect(await polygonZkEVMGlobalExitRoot.lastRollupExitRoot()).to.be.equal(zero32bytes); + expect(await polygonZkEVMGlobalExitRoot.lastMainnetExitRoot()).to.be.equal(zero32bytes); }); it('should update root and check global exit root', async () => { const newRootRollup = ethers.utils.hexlify(ethers.utils.randomBytes(32)); - await expect(polygonZKEVMGlobalExitRoot.updateExitRoot(newRootRollup)) - .to.be.revertedWith('PolygonZKEVMGlobalExitRoot::updateExitRoot: ONLY_ALLOWED_CONTRACTS'); + await expect(polygonZkEVMGlobalExitRoot.updateExitRoot(newRootRollup)) + .to.be.revertedWith('PolygonZkEVMGlobalExitRoot::updateExitRoot: ONLY_ALLOWED_CONTRACTS'); // Update root from the rollup - await expect(polygonZKEVMGlobalExitRoot.connect(rollup).updateExitRoot(newRootRollup)) - .to.emit(polygonZKEVMGlobalExitRoot, 'UpdateGlobalExitRoot') + await expect(polygonZkEVMGlobalExitRoot.connect(rollup).updateExitRoot(newRootRollup)) + .to.emit(polygonZkEVMGlobalExitRoot, 'UpdateGlobalExitRoot') .withArgs(zero32bytes, newRootRollup); - expect(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()) + expect(await polygonZkEVMGlobalExitRoot.getLastGlobalExitRoot()) .to.be.equal(calculateGlobalExitRoot(zero32bytes, newRootRollup)); - // Update root from the PolygonZKEVMBridge + // Update root from the PolygonZkEVMBridge const newRootBridge = ethers.utils.hexlify(ethers.utils.randomBytes(32)); - await expect(polygonZKEVMGlobalExitRoot.connect(PolygonZKEVMBridge).updateExitRoot(newRootBridge)) - .to.emit(polygonZKEVMGlobalExitRoot, 'UpdateGlobalExitRoot') + await expect(polygonZkEVMGlobalExitRoot.connect(PolygonZkEVMBridge).updateExitRoot(newRootBridge)) + .to.emit(polygonZkEVMGlobalExitRoot, 'UpdateGlobalExitRoot') .withArgs(newRootBridge, newRootRollup); - expect(await polygonZKEVMGlobalExitRoot.lastMainnetExitRoot()).to.be.equal(newRootBridge); - expect(await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot()) + expect(await polygonZkEVMGlobalExitRoot.lastMainnetExitRoot()).to.be.equal(newRootBridge); + expect(await polygonZkEVMGlobalExitRoot.getLastGlobalExitRoot()) .to.be.equal(calculateGlobalExitRoot(newRootBridge, newRootRollup)); }); }); diff --git a/test/contracts/globalExitRootManagerL2.test.js b/test/contracts/globalExitRootManagerL2.test.js index 9d28ac379..02c364bd2 100644 --- a/test/contracts/globalExitRootManagerL2.test.js +++ b/test/contracts/globalExitRootManagerL2.test.js @@ -4,9 +4,9 @@ const { ethers, upgrades } = require('hardhat'); const zero32bytes = '0x0000000000000000000000000000000000000000000000000000000000000000'; describe('Global Exit Root L2', () => { - let PolygonZKEVMBridge; - let polygonZKEVMGlobalExitRoot; - const PolygonZKEVMAddress = ethers.constants.AddressZero; + let PolygonZkEVMBridge; + let polygonZkEVMGlobalExitRoot; + const PolygonZkEVMAddress = ethers.constants.AddressZero; beforeEach('Deploy contracts', async () => { const networkIDRollup = 1; @@ -14,40 +14,40 @@ describe('Global Exit Root L2', () => { // load signers const deployer = (await ethers.getSigners())[0]; - // deploy PolygonZKEVMBridge - const polygonZKEVMBridgeFactory = await ethers.getContractFactory('PolygonZKEVMBridge'); - PolygonZKEVMBridge = await upgrades.deployProxy(polygonZKEVMBridgeFactory, [], { initializer: false }); + // deploy PolygonZkEVMBridge + const polygonZkEVMBridgeFactory = await ethers.getContractFactory('PolygonZkEVMBridge'); + PolygonZkEVMBridge = await upgrades.deployProxy(polygonZkEVMBridgeFactory, [], { initializer: false }); // deploy global exit root manager - const PolygonZKEVMGlobalExitRootFactory = await ethers.getContractFactory('PolygonZKEVMGlobalExitRootL2Mock', deployer); - polygonZKEVMGlobalExitRoot = await PolygonZKEVMGlobalExitRootFactory.deploy(PolygonZKEVMBridge.address); + const PolygonZkEVMGlobalExitRootFactory = await ethers.getContractFactory('PolygonZkEVMGlobalExitRootL2Mock', deployer); + polygonZkEVMGlobalExitRoot = await PolygonZkEVMGlobalExitRootFactory.deploy(PolygonZkEVMBridge.address); - await PolygonZKEVMBridge.initialize(networkIDRollup, polygonZKEVMGlobalExitRoot.address, PolygonZKEVMAddress); + await PolygonZkEVMBridge.initialize(networkIDRollup, polygonZkEVMGlobalExitRoot.address, PolygonZkEVMAddress); }); it('should check the constructor parameters', async () => { - expect(await polygonZKEVMGlobalExitRoot.bridgeAddress()).to.be.equal(PolygonZKEVMBridge.address); - expect(await polygonZKEVMGlobalExitRoot.lastRollupExitRoot()).to.be.equal(zero32bytes); + expect(await polygonZkEVMGlobalExitRoot.bridgeAddress()).to.be.equal(PolygonZkEVMBridge.address); + expect(await polygonZkEVMGlobalExitRoot.lastRollupExitRoot()).to.be.equal(zero32bytes); }); it('should update root and check the storage position matches', async () => { // Check global exit root const newRoot = ethers.utils.hexlify(ethers.utils.randomBytes(32)); const blockNumber = 1; - await polygonZKEVMGlobalExitRoot.setLastGlobalExitRoot(newRoot, blockNumber); - expect(await polygonZKEVMGlobalExitRoot.globalExitRootMap(newRoot)).to.be.equal(blockNumber); + await polygonZkEVMGlobalExitRoot.setLastGlobalExitRoot(newRoot, blockNumber); + expect(await polygonZkEVMGlobalExitRoot.globalExitRootMap(newRoot)).to.be.equal(blockNumber); const mapStoragePosition = 0; const key = newRoot; const storagePosition = ethers.utils.solidityKeccak256(['uint256', 'uint256'], [key, mapStoragePosition]); - const storageValue = await ethers.provider.getStorageAt(polygonZKEVMGlobalExitRoot.address, storagePosition); + const storageValue = await ethers.provider.getStorageAt(polygonZkEVMGlobalExitRoot.address, storagePosition); expect(blockNumber).to.be.equal(ethers.BigNumber.from(storageValue).toNumber()); // Check rollup exit root const newRootRollupExitRoot = ethers.utils.hexlify(ethers.utils.randomBytes(32)); - await polygonZKEVMGlobalExitRoot.setExitRoot(newRootRollupExitRoot); - expect(await polygonZKEVMGlobalExitRoot.lastRollupExitRoot()).to.be.equal(newRootRollupExitRoot); + await polygonZkEVMGlobalExitRoot.setExitRoot(newRootRollupExitRoot); + expect(await polygonZkEVMGlobalExitRoot.lastRollupExitRoot()).to.be.equal(newRootRollupExitRoot); const storagePositionExitRoot = 1; - const storageValueExitRoot = await ethers.provider.getStorageAt(polygonZKEVMGlobalExitRoot.address, storagePositionExitRoot); + const storageValueExitRoot = await ethers.provider.getStorageAt(polygonZkEVMGlobalExitRoot.address, storagePositionExitRoot); expect(newRootRollupExitRoot, storageValueExitRoot); }); }); diff --git a/test/contracts/proofOfEfficiency.test.js b/test/contracts/proofOfEfficiency.test.js index 455e2e137..8d0ed62a2 100644 --- a/test/contracts/proofOfEfficiency.test.js +++ b/test/contracts/proofOfEfficiency.test.js @@ -13,10 +13,10 @@ describe('Polygon ZK-EVM', () => { let aggregator1; let verifierContract; - let polygonZKEVMBridgeContract; - let polygonZKEVMContract; + let polygonZkEVMBridgeContract; + let polygonZkEVMContract; let maticTokenContract; - let polygonZKEVMGlobalExitRoot; + let polygonZkEVMGlobalExitRoot; const maticTokenName = 'Matic Token'; const maticTokenSymbol = 'MATIC'; @@ -53,24 +53,24 @@ describe('Polygon ZK-EVM', () => { await maticTokenContract.deployed(); // deploy global exit root manager - const PolygonZKEVMGlobalExitRootFactory = await ethers.getContractFactory('PolygonZKEVMGlobalExitRoot'); - polygonZKEVMGlobalExitRoot = await upgrades.deployProxy(PolygonZKEVMGlobalExitRootFactory, [], { initializer: false }); + const PolygonZkEVMGlobalExitRootFactory = await ethers.getContractFactory('PolygonZkEVMGlobalExitRoot'); + polygonZkEVMGlobalExitRoot = await upgrades.deployProxy(PolygonZkEVMGlobalExitRootFactory, [], { initializer: false }); - // deploy PolygonZKEVMBridge - const polygonZKEVMBridgeFactory = await ethers.getContractFactory('PolygonZKEVMBridge'); - polygonZKEVMBridgeContract = await upgrades.deployProxy(polygonZKEVMBridgeFactory, [], { initializer: false }); + // deploy PolygonZkEVMBridge + const polygonZkEVMBridgeFactory = await ethers.getContractFactory('PolygonZkEVMBridge'); + polygonZkEVMBridgeContract = await upgrades.deployProxy(polygonZkEVMBridgeFactory, [], { initializer: false }); // deploy PoE - const PolygonZKEVMFactory = await ethers.getContractFactory('PolygonZKEVMMock'); - polygonZKEVMContract = await upgrades.deployProxy(PolygonZKEVMFactory, [], { initializer: false }); + const PolygonZkEVMFactory = await ethers.getContractFactory('PolygonZkEVMMock'); + polygonZkEVMContract = await upgrades.deployProxy(PolygonZkEVMFactory, [], { initializer: false }); - await polygonZKEVMGlobalExitRoot.initialize(polygonZKEVMContract.address, polygonZKEVMBridgeContract.address); - await polygonZKEVMBridgeContract.initialize(networkIDMainnet, polygonZKEVMGlobalExitRoot.address, polygonZKEVMContract.address); - await polygonZKEVMContract.initialize( - polygonZKEVMGlobalExitRoot.address, + await polygonZkEVMGlobalExitRoot.initialize(polygonZkEVMContract.address, polygonZkEVMBridgeContract.address); + await polygonZkEVMBridgeContract.initialize(networkIDMainnet, polygonZkEVMGlobalExitRoot.address, polygonZkEVMContract.address); + await polygonZkEVMContract.initialize( + polygonZkEVMGlobalExitRoot.address, maticTokenContract.address, verifierContract.address, - polygonZKEVMBridgeContract.address, + polygonZkEVMBridgeContract.address, { admin: admin.address, chainID, @@ -90,107 +90,107 @@ describe('Polygon ZK-EVM', () => { }); it('should check the constructor parameters', async () => { - expect(await polygonZKEVMContract.globalExitRootManager()).to.be.equal(polygonZKEVMGlobalExitRoot.address); - expect(await polygonZKEVMContract.matic()).to.be.equal(maticTokenContract.address); - expect(await polygonZKEVMContract.rollupVerifier()).to.be.equal(verifierContract.address); - expect(await polygonZKEVMContract.bridgeAddress()).to.be.equal(polygonZKEVMBridgeContract.address); - - expect(await polygonZKEVMContract.admin()).to.be.equal(admin.address); - expect(await polygonZKEVMContract.chainID()).to.be.equal(chainID); - expect(await polygonZKEVMContract.trustedSequencer()).to.be.equal(trustedSequencer.address); - expect(await polygonZKEVMContract.pendingStateTimeout()).to.be.equal(pendingStateTimeoutDefault); - expect(await polygonZKEVMContract.forceBatchAllowed()).to.be.equal(allowForcebatches); - expect(await polygonZKEVMContract.trustedAggregator()).to.be.equal(trustedAggregator.address); - expect(await polygonZKEVMContract.trustedAggregatorTimeout()).to.be.equal(trustedAggregatorTimeoutDefault); - - expect(await polygonZKEVMContract.batchNumToStateRoot(0)).to.be.equal(genesisRoot); - expect(await polygonZKEVMContract.trustedSequencerURL()).to.be.equal(urlSequencer); - expect(await polygonZKEVMContract.networkName()).to.be.equal(networkName); - - expect(await polygonZKEVMContract.batchFee()).to.be.equal(ethers.utils.parseEther('1')); + expect(await polygonZkEVMContract.globalExitRootManager()).to.be.equal(polygonZkEVMGlobalExitRoot.address); + expect(await polygonZkEVMContract.matic()).to.be.equal(maticTokenContract.address); + expect(await polygonZkEVMContract.rollupVerifier()).to.be.equal(verifierContract.address); + expect(await polygonZkEVMContract.bridgeAddress()).to.be.equal(polygonZkEVMBridgeContract.address); + + expect(await polygonZkEVMContract.admin()).to.be.equal(admin.address); + expect(await polygonZkEVMContract.chainID()).to.be.equal(chainID); + expect(await polygonZkEVMContract.trustedSequencer()).to.be.equal(trustedSequencer.address); + expect(await polygonZkEVMContract.pendingStateTimeout()).to.be.equal(pendingStateTimeoutDefault); + expect(await polygonZkEVMContract.forceBatchAllowed()).to.be.equal(allowForcebatches); + expect(await polygonZkEVMContract.trustedAggregator()).to.be.equal(trustedAggregator.address); + expect(await polygonZkEVMContract.trustedAggregatorTimeout()).to.be.equal(trustedAggregatorTimeoutDefault); + + expect(await polygonZkEVMContract.batchNumToStateRoot(0)).to.be.equal(genesisRoot); + expect(await polygonZkEVMContract.trustedSequencerURL()).to.be.equal(urlSequencer); + expect(await polygonZkEVMContract.networkName()).to.be.equal(networkName); + + expect(await polygonZkEVMContract.batchFee()).to.be.equal(ethers.utils.parseEther('1')); }); it('should check setters of admin', async () => { - expect(await polygonZKEVMContract.trustedSequencer()).to.be.equal(trustedSequencer.address); - expect(await polygonZKEVMContract.forceBatchAllowed()).to.be.equal(allowForcebatches); - expect(await polygonZKEVMContract.trustedSequencerURL()).to.be.equal(urlSequencer); - expect(await polygonZKEVMContract.trustedAggregator()).to.be.equal(trustedAggregator.address); - expect(await polygonZKEVMContract.trustedAggregatorTimeout()).to.be.equal(trustedAggregatorTimeoutDefault); - expect(await polygonZKEVMContract.pendingStateTimeout()).to.be.equal(pendingStateTimeoutDefault); - expect(await polygonZKEVMContract.admin()).to.be.equal(admin.address); + expect(await polygonZkEVMContract.trustedSequencer()).to.be.equal(trustedSequencer.address); + expect(await polygonZkEVMContract.forceBatchAllowed()).to.be.equal(allowForcebatches); + expect(await polygonZkEVMContract.trustedSequencerURL()).to.be.equal(urlSequencer); + expect(await polygonZkEVMContract.trustedAggregator()).to.be.equal(trustedAggregator.address); + expect(await polygonZkEVMContract.trustedAggregatorTimeout()).to.be.equal(trustedAggregatorTimeoutDefault); + expect(await polygonZkEVMContract.pendingStateTimeout()).to.be.equal(pendingStateTimeoutDefault); + expect(await polygonZkEVMContract.admin()).to.be.equal(admin.address); // setTrustedSequencer - await expect(polygonZKEVMContract.setTrustedSequencer(deployer.address)) - .to.be.revertedWith('PolygonZKEVM::onlyAdmin: only admin'); + await expect(polygonZkEVMContract.setTrustedSequencer(deployer.address)) + .to.be.revertedWith('PolygonZkEVM::onlyAdmin: only admin'); await expect( - polygonZKEVMContract.connect(admin).setTrustedSequencer(deployer.address), - ).to.emit(polygonZKEVMContract, 'SetTrustedSequencer').withArgs(deployer.address); - expect(await polygonZKEVMContract.trustedSequencer()).to.be.equal(deployer.address); + polygonZkEVMContract.connect(admin).setTrustedSequencer(deployer.address), + ).to.emit(polygonZkEVMContract, 'SetTrustedSequencer').withArgs(deployer.address); + expect(await polygonZkEVMContract.trustedSequencer()).to.be.equal(deployer.address); // setForceBatchAllowed - await expect(polygonZKEVMContract.setForceBatchAllowed(!allowForcebatches)) - .to.be.revertedWith('PolygonZKEVM::onlyAdmin: only admin'); + await expect(polygonZkEVMContract.setForceBatchAllowed(!allowForcebatches)) + .to.be.revertedWith('PolygonZkEVM::onlyAdmin: only admin'); await expect( - polygonZKEVMContract.connect(admin).setForceBatchAllowed(!allowForcebatches), - ).to.emit(polygonZKEVMContract, 'SetForceBatchAllowed').withArgs(!allowForcebatches); - expect(await polygonZKEVMContract.forceBatchAllowed()).to.be.equal(!allowForcebatches); + polygonZkEVMContract.connect(admin).setForceBatchAllowed(!allowForcebatches), + ).to.emit(polygonZkEVMContract, 'SetForceBatchAllowed').withArgs(!allowForcebatches); + expect(await polygonZkEVMContract.forceBatchAllowed()).to.be.equal(!allowForcebatches); // setTrustedSequencerURL const url = 'https://test'; - await expect(polygonZKEVMContract.setTrustedSequencerURL(url)) - .to.be.revertedWith('PolygonZKEVM::onlyAdmin: only admin'); + await expect(polygonZkEVMContract.setTrustedSequencerURL(url)) + .to.be.revertedWith('PolygonZkEVM::onlyAdmin: only admin'); await expect( - polygonZKEVMContract.connect(admin).setTrustedSequencerURL(url), - ).to.emit(polygonZKEVMContract, 'SetTrustedSequencerURL').withArgs(url); - expect(await polygonZKEVMContract.trustedSequencerURL()).to.be.equal(url); + polygonZkEVMContract.connect(admin).setTrustedSequencerURL(url), + ).to.emit(polygonZkEVMContract, 'SetTrustedSequencerURL').withArgs(url); + expect(await polygonZkEVMContract.trustedSequencerURL()).to.be.equal(url); // setTrustedAggregator const newTrustedAggregator = deployer.address; - await expect(polygonZKEVMContract.setTrustedAggregator(newTrustedAggregator)) - .to.be.revertedWith('PolygonZKEVM::onlyAdmin: only admin'); + await expect(polygonZkEVMContract.setTrustedAggregator(newTrustedAggregator)) + .to.be.revertedWith('PolygonZkEVM::onlyAdmin: only admin'); await expect( - polygonZKEVMContract.connect(admin).setTrustedAggregator(newTrustedAggregator), - ).to.emit(polygonZKEVMContract, 'SetTrustedAggregator').withArgs(newTrustedAggregator); - expect(await polygonZKEVMContract.trustedAggregator()).to.be.equal(newTrustedAggregator); + polygonZkEVMContract.connect(admin).setTrustedAggregator(newTrustedAggregator), + ).to.emit(polygonZkEVMContract, 'SetTrustedAggregator').withArgs(newTrustedAggregator); + expect(await polygonZkEVMContract.trustedAggregator()).to.be.equal(newTrustedAggregator); // setTrustedAggregatorTimeout - await expect(polygonZKEVMContract.setTrustedAggregatorTimeout(trustedAggregatorTimeoutDefault)) - .to.be.revertedWith('PolygonZKEVM::onlyAdmin: only admin'); + await expect(polygonZkEVMContract.setTrustedAggregatorTimeout(trustedAggregatorTimeoutDefault)) + .to.be.revertedWith('PolygonZkEVM::onlyAdmin: only admin'); - await expect(polygonZKEVMContract.connect(admin).setTrustedAggregatorTimeout(trustedAggregatorTimeoutDefault)) - .to.be.revertedWith('PolygonZKEVM::setTrustedAggregatorTimeout: new timeout must be lower'); + await expect(polygonZkEVMContract.connect(admin).setTrustedAggregatorTimeout(trustedAggregatorTimeoutDefault)) + .to.be.revertedWith('PolygonZkEVM::setTrustedAggregatorTimeout: new timeout must be lower'); const newTrustedAggregatorTimeout = trustedAggregatorTimeoutDefault - 1; await expect( - polygonZKEVMContract.connect(admin).setTrustedAggregatorTimeout(newTrustedAggregatorTimeout), - ).to.emit(polygonZKEVMContract, 'SetTrustedAggregatorTimeout').withArgs(newTrustedAggregatorTimeout); - expect(await polygonZKEVMContract.trustedAggregatorTimeout()).to.be.equal(newTrustedAggregatorTimeout); + polygonZkEVMContract.connect(admin).setTrustedAggregatorTimeout(newTrustedAggregatorTimeout), + ).to.emit(polygonZkEVMContract, 'SetTrustedAggregatorTimeout').withArgs(newTrustedAggregatorTimeout); + expect(await polygonZkEVMContract.trustedAggregatorTimeout()).to.be.equal(newTrustedAggregatorTimeout); // setPendingStateTimeoutDefault - await expect(polygonZKEVMContract.setPendingStateTimeout(pendingStateTimeoutDefault)) - .to.be.revertedWith('PolygonZKEVM::onlyAdmin: only admin'); + await expect(polygonZkEVMContract.setPendingStateTimeout(pendingStateTimeoutDefault)) + .to.be.revertedWith('PolygonZkEVM::onlyAdmin: only admin'); - await expect(polygonZKEVMContract.connect(admin).setPendingStateTimeout(pendingStateTimeoutDefault)) - .to.be.revertedWith('PolygonZKEVM::setPendingStateTimeout: new timeout must be lower'); + await expect(polygonZkEVMContract.connect(admin).setPendingStateTimeout(pendingStateTimeoutDefault)) + .to.be.revertedWith('PolygonZkEVM::setPendingStateTimeout: new timeout must be lower'); const newPendingStateTimeoutDefault = pendingStateTimeoutDefault - 1; await expect( - polygonZKEVMContract.connect(admin).setPendingStateTimeout(newPendingStateTimeoutDefault), - ).to.emit(polygonZKEVMContract, 'SetPendingStateTimeout').withArgs(newPendingStateTimeoutDefault); - expect(await polygonZKEVMContract.pendingStateTimeout()).to.be.equal(newPendingStateTimeoutDefault); + polygonZkEVMContract.connect(admin).setPendingStateTimeout(newPendingStateTimeoutDefault), + ).to.emit(polygonZkEVMContract, 'SetPendingStateTimeout').withArgs(newPendingStateTimeoutDefault); + expect(await polygonZkEVMContract.pendingStateTimeout()).to.be.equal(newPendingStateTimeoutDefault); // setAdmin - await expect(polygonZKEVMContract.setAdmin(deployer.address)) - .to.be.revertedWith('PolygonZKEVM::onlyAdmin: only admin'); + await expect(polygonZkEVMContract.setAdmin(deployer.address)) + .to.be.revertedWith('PolygonZkEVM::onlyAdmin: only admin'); await expect( - polygonZKEVMContract.connect(admin).setAdmin(deployer.address), - ).to.emit(polygonZKEVMContract, 'SetAdmin').withArgs(deployer.address); - expect(await polygonZKEVMContract.admin()).to.be.equal(deployer.address); + polygonZkEVMContract.connect(admin).setAdmin(deployer.address), + ).to.emit(polygonZkEVMContract, 'SetAdmin').withArgs(deployer.address); + expect(await polygonZkEVMContract.admin()).to.be.equal(deployer.address); }); it('should sequence a batch as truested sequencer', async () => { const l2txData = '0x123456'; - const maticAmount = await polygonZKEVMContract.getCurrentBatchFee(); + const maticAmount = await polygonZkEVMContract.getCurrentBatchFee(); const currentTimestamp = (await ethers.provider.getBlock()).timestamp; const sequence = { @@ -201,11 +201,11 @@ describe('Polygon ZK-EVM', () => { }; // revert because sender is not truested sequencer - await expect(polygonZKEVMContract.sequenceBatches([sequence])) - .to.be.revertedWith('PolygonZKEVM::onlyTrustedSequencer: only trusted sequencer'); + await expect(polygonZkEVMContract.sequenceBatches([sequence])) + .to.be.revertedWith('PolygonZkEVM::onlyTrustedSequencer: only trusted sequencer'); // revert because tokens were not approved - await expect(polygonZKEVMContract.connect(trustedSequencer).sequenceBatches([sequence])) + await expect(polygonZkEVMContract.connect(trustedSequencer).sequenceBatches([sequence])) .to.be.revertedWith('ERC20: insufficient allowance'); const initialOwnerBalance = await maticTokenContract.balanceOf( @@ -214,14 +214,14 @@ describe('Polygon ZK-EVM', () => { // Approve tokens await expect( - maticTokenContract.connect(trustedSequencer).approve(polygonZKEVMContract.address, maticAmount), + maticTokenContract.connect(trustedSequencer).approve(polygonZkEVMContract.address, maticAmount), ).to.emit(maticTokenContract, 'Approval'); - const lastBatchSequenced = await polygonZKEVMContract.lastBatchSequenced(); + const lastBatchSequenced = await polygonZkEVMContract.lastBatchSequenced(); // Sequence batch - await expect(polygonZKEVMContract.connect(trustedSequencer).sequenceBatches([sequence])) - .to.emit(polygonZKEVMContract, 'SequenceBatches') + await expect(polygonZkEVMContract.connect(trustedSequencer).sequenceBatches([sequence])) + .to.emit(polygonZkEVMContract, 'SequenceBatches') .withArgs(lastBatchSequenced + 1); const sequencedTimestamp = (await ethers.provider.getBlock()).timestamp; @@ -234,11 +234,11 @@ describe('Polygon ZK-EVM', () => { ); // Check batch mapping - const sequencedBatchData = await polygonZKEVMContract.sequencedBatches(1); + const sequencedBatchData = await polygonZkEVMContract.sequencedBatches(1); const batchAccInputHash = sequencedBatchData.accInputHash; const batchAccInputHashJs = calculateAccInputHash( - (await polygonZKEVMContract.sequencedBatches(0)).accInputHash, + (await polygonZkEVMContract.sequencedBatches(0)).accInputHash, calculateBatchHashData(sequence.transactions), sequence.globalExitRoot, sequence.timestamp, @@ -251,7 +251,7 @@ describe('Polygon ZK-EVM', () => { it('sequenceBatches should sequence multiple batches', async () => { const l2txData = '0x1234'; - const maticAmount = (await polygonZKEVMContract.getCurrentBatchFee()).mul(2); + const maticAmount = (await polygonZkEVMContract.getCurrentBatchFee()).mul(2); const currentTimestamp = (await ethers.provider.getBlock()).timestamp; @@ -275,14 +275,14 @@ describe('Polygon ZK-EVM', () => { // Approve tokens await expect( - maticTokenContract.connect(trustedSequencer).approve(polygonZKEVMContract.address, maticAmount), + maticTokenContract.connect(trustedSequencer).approve(polygonZkEVMContract.address, maticAmount), ).to.emit(maticTokenContract, 'Approval'); - const lastBatchSequenced = await polygonZKEVMContract.lastBatchSequenced(); + const lastBatchSequenced = await polygonZkEVMContract.lastBatchSequenced(); // Sequence batches - await expect(polygonZKEVMContract.connect(trustedSequencer).sequenceBatches([sequence, sequence2])) - .to.emit(polygonZKEVMContract, 'SequenceBatches') + await expect(polygonZkEVMContract.connect(trustedSequencer).sequenceBatches([sequence, sequence2])) + .to.emit(polygonZkEVMContract, 'SequenceBatches') .withArgs(lastBatchSequenced + 2); const finalOwnerBalance = await maticTokenContract.balanceOf( @@ -294,13 +294,13 @@ describe('Polygon ZK-EVM', () => { ); // Check batch mapping - const sequencedBatchData = await polygonZKEVMContract.sequencedBatches(1); + const sequencedBatchData = await polygonZkEVMContract.sequencedBatches(1); const batchAccInputHash = sequencedBatchData.accInputHash; // Only last batch is added to the mapping expect(batchAccInputHash).to.be.equal(ethers.constants.HashZero); - const sequencedBatchData2 = await polygonZKEVMContract.sequencedBatches(2); + const sequencedBatchData2 = await polygonZkEVMContract.sequencedBatches(2); const batchAccInputHash2 = sequencedBatchData2.accInputHash; // Calcultate input Hahs for batch 1 @@ -325,23 +325,23 @@ describe('Polygon ZK-EVM', () => { it('sequenceBatches should sequence multiple batches and force batches', async () => { const l2txDataForceBatch = '0x123456'; - const maticAmount = await polygonZKEVMContract.getCurrentBatchFee(); - const lastGlobalExitRoot = await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot(); + const maticAmount = await polygonZkEVMContract.getCurrentBatchFee(); + const lastGlobalExitRoot = await polygonZkEVMGlobalExitRoot.getLastGlobalExitRoot(); await expect( - maticTokenContract.approve(polygonZKEVMContract.address, maticAmount), + maticTokenContract.approve(polygonZkEVMContract.address, maticAmount), ).to.emit(maticTokenContract, 'Approval'); - const lastForcedBatch = (await polygonZKEVMContract.lastForceBatch()) + 1; + const lastForcedBatch = (await polygonZkEVMContract.lastForceBatch()) + 1; // Force batch - await expect(polygonZKEVMContract.forceBatch(l2txDataForceBatch, maticAmount)) - .to.emit(polygonZKEVMContract, 'ForceBatch') + await expect(polygonZkEVMContract.forceBatch(l2txDataForceBatch, maticAmount)) + .to.emit(polygonZkEVMContract, 'ForceBatch') .withArgs(lastForcedBatch, lastGlobalExitRoot, deployer.address, '0x'); // sequence 2 batches const l2txData = '0x1234'; - const maticAmountSequence = (await polygonZKEVMContract.getCurrentBatchFee()).mul(1); + const maticAmountSequence = (await polygonZkEVMContract.getCurrentBatchFee()).mul(1); const currentTimestamp = (await ethers.provider.getBlock()).timestamp; @@ -365,35 +365,35 @@ describe('Polygon ZK-EVM', () => { // Approve tokens await expect( - maticTokenContract.connect(trustedSequencer).approve(polygonZKEVMContract.address, maticAmountSequence), + maticTokenContract.connect(trustedSequencer).approve(polygonZkEVMContract.address, maticAmountSequence), ).to.emit(maticTokenContract, 'Approval'); - const lastBatchSequenced = await polygonZKEVMContract.lastBatchSequenced(); + const lastBatchSequenced = await polygonZkEVMContract.lastBatchSequenced(); // Assert that the timestamp requirements must accomplish with force batches too sequence.minForcedTimestamp += 1; - await expect(polygonZKEVMContract.connect(trustedSequencer).sequenceBatches([sequence, sequence2])) - .to.be.revertedWith('PolygonZKEVM::sequenceBatches: Forced batches data must match'); + await expect(polygonZkEVMContract.connect(trustedSequencer).sequenceBatches([sequence, sequence2])) + .to.be.revertedWith('PolygonZkEVM::sequenceBatches: Forced batches data must match'); sequence.minForcedTimestamp -= 1; sequence.timestamp -= 1; - await expect(polygonZKEVMContract.connect(trustedSequencer).sequenceBatches([sequence, sequence2])) - .to.be.revertedWith('PolygonZKEVM::sequenceBatches: Forced batches timestamp must be bigger or equal than min'); + await expect(polygonZkEVMContract.connect(trustedSequencer).sequenceBatches([sequence, sequence2])) + .to.be.revertedWith('PolygonZkEVM::sequenceBatches: Forced batches timestamp must be bigger or equal than min'); sequence.timestamp += 1; sequence.timestamp = currentTimestamp + 10; - await expect(polygonZKEVMContract.connect(trustedSequencer).sequenceBatches([sequence, sequence2])) - .to.be.revertedWith('PolygonZKEVM::sequenceBatches: Timestamp must be inside range'); + await expect(polygonZkEVMContract.connect(trustedSequencer).sequenceBatches([sequence, sequence2])) + .to.be.revertedWith('PolygonZkEVM::sequenceBatches: Timestamp must be inside range'); sequence.timestamp = currentTimestamp; sequence2.timestamp -= 1; - await expect(polygonZKEVMContract.connect(trustedSequencer).sequenceBatches([sequence, sequence2])) - .to.be.revertedWith('PolygonZKEVM::sequenceBatches: Timestamp must be inside range'); + await expect(polygonZkEVMContract.connect(trustedSequencer).sequenceBatches([sequence, sequence2])) + .to.be.revertedWith('PolygonZkEVM::sequenceBatches: Timestamp must be inside range'); sequence2.timestamp += 1; // Sequence Bathces - await expect(polygonZKEVMContract.connect(trustedSequencer).sequenceBatches([sequence, sequence2])) - .to.emit(polygonZKEVMContract, 'SequenceBatches') + await expect(polygonZkEVMContract.connect(trustedSequencer).sequenceBatches([sequence, sequence2])) + .to.emit(polygonZkEVMContract, 'SequenceBatches') .withArgs(Number(lastBatchSequenced) + 2); const sequencedTimestamp = (await ethers.provider.getBlock()).timestamp; @@ -407,7 +407,7 @@ describe('Polygon ZK-EVM', () => { ); // Check batch mapping - const batchAccInputHash = (await polygonZKEVMContract.sequencedBatches(1)).accInputHash; + const batchAccInputHash = (await polygonZkEVMContract.sequencedBatches(1)).accInputHash; // Only last batch is added to the mapping expect(batchAccInputHash).to.be.equal(ethers.constants.HashZero); @@ -431,7 +431,7 @@ describe('Polygon ZK-EVM', () => { sequence2.timestamp, trustedSequencer.address, ); - const batchData2 = await polygonZKEVMContract.sequencedBatches(2); + const batchData2 = await polygonZkEVMContract.sequencedBatches(2); expect(batchData2.accInputHash).to.be.equal(batchAccInputHashJs); expect(batchData2.sequencedTimestamp).to.be.equal(sequencedTimestamp); expect(batchData2.previousLastBatchSequenced).to.be.equal(0); @@ -439,7 +439,7 @@ describe('Polygon ZK-EVM', () => { it('sequenceBatches should check the timestamp correctly', async () => { const l2txData = '0x'; - const maticAmount = (await polygonZKEVMContract.getCurrentBatchFee()).mul(2); + const maticAmount = (await polygonZkEVMContract.getCurrentBatchFee()).mul(2); const sequence = { transactions: l2txData, @@ -461,10 +461,10 @@ describe('Polygon ZK-EVM', () => { // Approve tokens await expect( - maticTokenContract.connect(trustedSequencer).approve(polygonZKEVMContract.address, maticAmount), + maticTokenContract.connect(trustedSequencer).approve(polygonZkEVMContract.address, maticAmount), ).to.emit(maticTokenContract, 'Approval'); - const lastBatchSequenced = await polygonZKEVMContract.lastBatchSequenced(); + const lastBatchSequenced = await polygonZkEVMContract.lastBatchSequenced(); let currentTimestamp = (await ethers.provider.getBlock()).timestamp; await ethers.provider.send('evm_increaseTime', [1]); // evm_setNextBlockTimestamp @@ -472,8 +472,8 @@ describe('Polygon ZK-EVM', () => { sequence.timestamp = currentTimestamp + 2; // bigger than current block tiemstamp // revert because timestamp is more than the current one - await expect(polygonZKEVMContract.connect(trustedSequencer).sequenceBatches([sequence])) - .to.be.revertedWith('PolygonZKEVM::sequenceBatches: Timestamp must be inside range'); + await expect(polygonZkEVMContract.connect(trustedSequencer).sequenceBatches([sequence])) + .to.be.revertedWith('PolygonZkEVM::sequenceBatches: Timestamp must be inside range'); currentTimestamp = (await ethers.provider.getBlock()).timestamp; await ethers.provider.send('evm_increaseTime', [1]); @@ -482,8 +482,8 @@ describe('Polygon ZK-EVM', () => { sequence2.timestamp = currentTimestamp - 1; // revert because the second sequence has less timestamp than the previous batch - await expect(polygonZKEVMContract.connect(trustedSequencer).sequenceBatches([sequence, sequence2])) - .to.be.revertedWith('PolygonZKEVM::sequenceBatches: Timestamp must be inside range'); + await expect(polygonZkEVMContract.connect(trustedSequencer).sequenceBatches([sequence, sequence2])) + .to.be.revertedWith('PolygonZkEVM::sequenceBatches: Timestamp must be inside range'); currentTimestamp = (await ethers.provider.getBlock()).timestamp; await ethers.provider.send('evm_increaseTime', [1]); @@ -492,8 +492,8 @@ describe('Polygon ZK-EVM', () => { sequence2.timestamp = currentTimestamp + 1; // Sequence Batches - await expect(polygonZKEVMContract.connect(trustedSequencer).sequenceBatches([sequence, sequence2])) - .to.emit(polygonZKEVMContract, 'SequenceBatches') + await expect(polygonZkEVMContract.connect(trustedSequencer).sequenceBatches([sequence, sequence2])) + .to.emit(polygonZkEVMContract, 'SequenceBatches') .withArgs(lastBatchSequenced + 2); const finalOwnerBalance = await maticTokenContract.balanceOf( @@ -506,31 +506,31 @@ describe('Polygon ZK-EVM', () => { it('should force a batch of transactions', async () => { const l2txData = '0x123456'; - const maticAmount = await polygonZKEVMContract.getCurrentBatchFee(); - const lastGlobalExitRoot = await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot(); + const maticAmount = await polygonZkEVMContract.getCurrentBatchFee(); + const lastGlobalExitRoot = await polygonZkEVMGlobalExitRoot.getLastGlobalExitRoot(); - expect(maticAmount.toString()).to.be.equal((await polygonZKEVMContract.getCurrentBatchFee()).toString()); + expect(maticAmount.toString()).to.be.equal((await polygonZkEVMContract.getCurrentBatchFee()).toString()); // revert because the maxMatic amount is less than the necessary to pay - await expect(polygonZKEVMContract.forceBatch(l2txData, maticAmount.sub(1))) - .to.be.revertedWith('PolygonZKEVM::forceBatch: not enough matic'); + await expect(polygonZkEVMContract.forceBatch(l2txData, maticAmount.sub(1))) + .to.be.revertedWith('PolygonZkEVM::forceBatch: not enough matic'); // revert because tokens were not approved - await expect(polygonZKEVMContract.forceBatch(l2txData, maticAmount)) + await expect(polygonZkEVMContract.forceBatch(l2txData, maticAmount)) .to.be.revertedWith('ERC20: insufficient allowance'); const initialOwnerBalance = await maticTokenContract.balanceOf( await deployer.address, ); await expect( - maticTokenContract.approve(polygonZKEVMContract.address, maticAmount), + maticTokenContract.approve(polygonZkEVMContract.address, maticAmount), ).to.emit(maticTokenContract, 'Approval'); - const lastForceBatch = await polygonZKEVMContract.lastForceBatch(); + const lastForceBatch = await polygonZkEVMContract.lastForceBatch(); // Force batch - await expect(polygonZKEVMContract.forceBatch(l2txData, maticAmount)) - .to.emit(polygonZKEVMContract, 'ForceBatch') + await expect(polygonZkEVMContract.forceBatch(l2txData, maticAmount)) + .to.emit(polygonZkEVMContract, 'ForceBatch') .withArgs(lastForceBatch + 1, lastGlobalExitRoot, deployer.address, '0x'); const finalOwnerBalance = await maticTokenContract.balanceOf( @@ -541,7 +541,7 @@ describe('Polygon ZK-EVM', () => { ); // Check force batches struct - const batchHash = await polygonZKEVMContract.forcedBatches(1); + const batchHash = await polygonZkEVMContract.forcedBatches(1); const timestampForceBatch = (await ethers.provider.getBlock()).timestamp; const batchHashJs = ethers.utils.solidityKeccak256( @@ -557,22 +557,22 @@ describe('Polygon ZK-EVM', () => { it('should sequence force batches using sequenceForceBatches', async () => { const l2txData = '0x123456'; - const maticAmount = await polygonZKEVMContract.getCurrentBatchFee(); - const lastGlobalExitRoot = await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot(); + const maticAmount = await polygonZkEVMContract.getCurrentBatchFee(); + const lastGlobalExitRoot = await polygonZkEVMGlobalExitRoot.getLastGlobalExitRoot(); await expect( - maticTokenContract.approve(polygonZKEVMContract.address, maticAmount), + maticTokenContract.approve(polygonZkEVMContract.address, maticAmount), ).to.emit(maticTokenContract, 'Approval'); - const lastForcedBatch = (await polygonZKEVMContract.lastForceBatch()) + 1; + const lastForcedBatch = (await polygonZkEVMContract.lastForceBatch()) + 1; - await expect(polygonZKEVMContract.forceBatch(l2txData, maticAmount)) - .to.emit(polygonZKEVMContract, 'ForceBatch') + await expect(polygonZkEVMContract.forceBatch(l2txData, maticAmount)) + .to.emit(polygonZkEVMContract, 'ForceBatch') .withArgs(lastForcedBatch, lastGlobalExitRoot, deployer.address, '0x'); const timestampForceBatch = (await ethers.provider.getBlock()).timestamp; - const forceBatchHash = await polygonZKEVMContract.forcedBatches(1); + const forceBatchHash = await polygonZkEVMContract.forcedBatches(1); const batchHashJs = ethers.utils.solidityKeccak256( ['bytes32', 'bytes32', 'uint64'], @@ -585,9 +585,9 @@ describe('Polygon ZK-EVM', () => { expect(batchHashJs).to.be.equal(forceBatchHash); // Check storage variables before call - expect(await polygonZKEVMContract.lastForceBatchSequenced()).to.be.equal(0); - expect(await polygonZKEVMContract.lastForceBatch()).to.be.equal(1); - expect(await polygonZKEVMContract.lastBatchSequenced()).to.be.equal(0); + expect(await polygonZkEVMContract.lastForceBatchSequenced()).to.be.equal(0); + expect(await polygonZkEVMContract.lastForceBatch()).to.be.equal(1); + expect(await polygonZkEVMContract.lastBatchSequenced()).to.be.equal(0); const forceBatchStruct = { transactions: l2txData, @@ -596,30 +596,30 @@ describe('Polygon ZK-EVM', () => { }; // revert because the timeout is not expired - await expect(polygonZKEVMContract.sequenceForceBatches([])) - .to.be.revertedWith('PolygonZKEVM::sequenceForceBatch: Must force at least 1 batch'); + await expect(polygonZkEVMContract.sequenceForceBatches([])) + .to.be.revertedWith('PolygonZkEVM::sequenceForceBatch: Must force at least 1 batch'); // revert because the timeout is not expired - await expect(polygonZKEVMContract.sequenceForceBatches([forceBatchStruct])) - .to.be.revertedWith('PolygonZKEVM::sequenceForceBatch: Forced batch is not in timeout period'); + await expect(polygonZkEVMContract.sequenceForceBatches([forceBatchStruct])) + .to.be.revertedWith('PolygonZkEVM::sequenceForceBatch: Forced batch is not in timeout period'); // Increment timestamp - const forceBatchTimeout = await polygonZKEVMContract.FORCE_BATCH_TIMEOUT(); + const forceBatchTimeout = await polygonZkEVMContract.FORCE_BATCH_TIMEOUT(); await ethers.provider.send('evm_setNextBlockTimestamp', [timestampForceBatch + forceBatchTimeout.toNumber()]); // sequence force batch - await expect(polygonZKEVMContract.sequenceForceBatches([forceBatchStruct])) - .to.emit(polygonZKEVMContract, 'SequenceForceBatches') + await expect(polygonZkEVMContract.sequenceForceBatches([forceBatchStruct])) + .to.emit(polygonZkEVMContract, 'SequenceForceBatches') .withArgs(1); const timestampSequenceBatch = (await ethers.provider.getBlock()).timestamp; - expect(await polygonZKEVMContract.lastForceBatchSequenced()).to.be.equal(1); - expect(await polygonZKEVMContract.lastForceBatch()).to.be.equal(1); - expect(await polygonZKEVMContract.lastBatchSequenced()).to.be.equal(1); + expect(await polygonZkEVMContract.lastForceBatchSequenced()).to.be.equal(1); + expect(await polygonZkEVMContract.lastForceBatch()).to.be.equal(1); + expect(await polygonZkEVMContract.lastBatchSequenced()).to.be.equal(1); // Check force batches struct - const batchAccInputHash = (await polygonZKEVMContract.sequencedBatches(1)).accInputHash; + const batchAccInputHash = (await polygonZkEVMContract.sequencedBatches(1)).accInputHash; const batchAccInputHashJs = calculateAccInputHash( ethers.constants.HashZero, @@ -633,7 +633,7 @@ describe('Polygon ZK-EVM', () => { it('should verify a sequenced batch using trustedVerifyBatches', async () => { const l2txData = '0x123456'; - const maticAmount = await polygonZKEVMContract.getCurrentBatchFee(); + const maticAmount = await polygonZkEVMContract.getCurrentBatchFee(); const currentTimestamp = (await ethers.provider.getBlock()).timestamp; const sequence = { @@ -645,20 +645,20 @@ describe('Polygon ZK-EVM', () => { // Approve tokens await expect( - maticTokenContract.connect(trustedSequencer).approve(polygonZKEVMContract.address, maticAmount), + maticTokenContract.connect(trustedSequencer).approve(polygonZkEVMContract.address, maticAmount), ).to.emit(maticTokenContract, 'Approval'); - const lastBatchSequenced = await polygonZKEVMContract.lastBatchSequenced(); + const lastBatchSequenced = await polygonZkEVMContract.lastBatchSequenced(); // Sequence Batches - await expect(polygonZKEVMContract.connect(trustedSequencer).sequenceBatches([sequence])) - .to.emit(polygonZKEVMContract, 'SequenceBatches') + await expect(polygonZkEVMContract.connect(trustedSequencer).sequenceBatches([sequence])) + .to.emit(polygonZkEVMContract, 'SequenceBatches') .withArgs(lastBatchSequenced + 1); // trustedAggregator forge the batch const pendingState = 0; const newLocalExitRoot = '0x0000000000000000000000000000000000000000000000000000000000000000'; const newStateRoot = '0x0000000000000000000000000000000000000000000000000000000000000000'; - const numBatch = (await polygonZKEVMContract.lastVerifiedBatch()) + 1; + const numBatch = (await polygonZkEVMContract.lastVerifiedBatch()) + 1; const proofA = ['0', '0']; const proofB = [ ['0', '0'], @@ -671,7 +671,7 @@ describe('Polygon ZK-EVM', () => { ); await expect( - polygonZKEVMContract.connect(deployer).trustedVerifyBatches( + polygonZkEVMContract.connect(deployer).trustedVerifyBatches( pendingState, numBatch - 1, numBatch - 1, @@ -681,10 +681,10 @@ describe('Polygon ZK-EVM', () => { proofB, proofC, ), - ).to.be.revertedWith('PolygonZKEVM::onlyTrustedAggregator: only trusted Aggregator'); + ).to.be.revertedWith('PolygonZkEVM::onlyTrustedAggregator: only trusted Aggregator'); await expect( - polygonZKEVMContract.connect(trustedAggregator).trustedVerifyBatches( + polygonZkEVMContract.connect(trustedAggregator).trustedVerifyBatches( pendingState, numBatch - 1, numBatch - 1, @@ -694,10 +694,10 @@ describe('Polygon ZK-EVM', () => { proofB, proofC, ), - ).to.be.revertedWith('PolygonZKEVM::verifyBatches: finalNewBatch must be bigger than currentLastVerifiedBatch'); + ).to.be.revertedWith('PolygonZkEVM::verifyBatches: finalNewBatch must be bigger than currentLastVerifiedBatch'); await expect( - polygonZKEVMContract.connect(trustedAggregator).trustedVerifyBatches( + polygonZkEVMContract.connect(trustedAggregator).trustedVerifyBatches( pendingState, numBatch - 1, numBatch + 1, @@ -707,11 +707,11 @@ describe('Polygon ZK-EVM', () => { proofB, proofC, ), - ).to.be.revertedWith('PolygonZKEVM::getInputSnarkBytes: newAccInputHash does not exist'); + ).to.be.revertedWith('PolygonZkEVM::getInputSnarkBytes: newAccInputHash does not exist'); // Verify batch await expect( - polygonZKEVMContract.connect(trustedAggregator).trustedVerifyBatches( + polygonZkEVMContract.connect(trustedAggregator).trustedVerifyBatches( pendingState, numBatch - 1, numBatch, @@ -721,7 +721,7 @@ describe('Polygon ZK-EVM', () => { proofB, proofC, ), - ).to.emit(polygonZKEVMContract, 'TrustedVerifyBatches') + ).to.emit(polygonZkEVMContract, 'TrustedVerifyBatches') .withArgs(numBatch, newStateRoot, trustedAggregator.address); const finalAggregatorMatic = await maticTokenContract.balanceOf( @@ -734,21 +734,21 @@ describe('Polygon ZK-EVM', () => { it('should verify forced sequenced batch using trustedVerifyBatches', async () => { const l2txData = '0x123456'; - const maticAmount = await polygonZKEVMContract.getCurrentBatchFee(); - const lastGlobalExitRoot = await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot(); + const maticAmount = await polygonZkEVMContract.getCurrentBatchFee(); + const lastGlobalExitRoot = await polygonZkEVMGlobalExitRoot.getLastGlobalExitRoot(); await expect( - maticTokenContract.approve(polygonZKEVMContract.address, maticAmount), + maticTokenContract.approve(polygonZkEVMContract.address, maticAmount), ).to.emit(maticTokenContract, 'Approval'); - const lastForcedBatch = (await polygonZKEVMContract.lastForceBatch()) + 1; - await expect(polygonZKEVMContract.forceBatch(l2txData, maticAmount)) - .to.emit(polygonZKEVMContract, 'ForceBatch') + const lastForcedBatch = (await polygonZkEVMContract.lastForceBatch()) + 1; + await expect(polygonZkEVMContract.forceBatch(l2txData, maticAmount)) + .to.emit(polygonZkEVMContract, 'ForceBatch') .withArgs(lastForcedBatch, lastGlobalExitRoot, deployer.address, '0x'); const timestampForceBatch = (await ethers.provider.getBlock()).timestamp; // Increment timestamp - const forceBatchTimeout = await polygonZKEVMContract.FORCE_BATCH_TIMEOUT(); + const forceBatchTimeout = await polygonZkEVMContract.FORCE_BATCH_TIMEOUT(); await ethers.provider.send('evm_setNextBlockTimestamp', [timestampForceBatch + forceBatchTimeout.toNumber()]); const forceBatchStruct = { @@ -758,15 +758,15 @@ describe('Polygon ZK-EVM', () => { }; // sequence force batch - await expect(polygonZKEVMContract.sequenceForceBatches([forceBatchStruct])) - .to.emit(polygonZKEVMContract, 'SequenceForceBatches') + await expect(polygonZkEVMContract.sequenceForceBatches([forceBatchStruct])) + .to.emit(polygonZkEVMContract, 'SequenceForceBatches') .withArgs(lastForcedBatch); // trustedAggregator forge the batch const pendingState = 0; const newLocalExitRoot = '0x0000000000000000000000000000000000000000000000000000000000000000'; const newStateRoot = '0x0000000000000000000000000000000000000000000000000000000000000000'; - const numBatch = (await polygonZKEVMContract.lastVerifiedBatch()) + 1; + const numBatch = (await polygonZkEVMContract.lastVerifiedBatch()) + 1; const proofA = ['0', '0']; const proofB = [ ['0', '0'], @@ -780,7 +780,7 @@ describe('Polygon ZK-EVM', () => { // Verify batch await expect( - polygonZKEVMContract.connect(trustedAggregator).trustedVerifyBatches( + polygonZkEVMContract.connect(trustedAggregator).trustedVerifyBatches( pendingState, numBatch - 1, numBatch, @@ -790,10 +790,10 @@ describe('Polygon ZK-EVM', () => { proofB, proofC, ), - ).to.emit(polygonZKEVMContract, 'VerifyBatch') + ).to.emit(polygonZkEVMContract, 'VerifyBatch') .withArgs(numBatch, trustedAggregator.address) .to.emit(maticTokenContract, 'Transfer') - .withArgs(polygonZKEVMContract.address, trustedAggregator.address, maticAmount); + .withArgs(polygonZkEVMContract.address, trustedAggregator.address, maticAmount); const finalAggregatorMatic = await maticTokenContract.balanceOf( trustedAggregator.address, @@ -806,7 +806,7 @@ describe('Polygon ZK-EVM', () => { it('should match the computed SC input with the Js input', async () => { const l2txData = '0x123456'; - const maticAmount = await polygonZKEVMContract.getCurrentBatchFee(); + const maticAmount = await polygonZkEVMContract.getCurrentBatchFee(); const currentTimestamp = (await ethers.provider.getBlock()).timestamp; const sequence = { @@ -818,18 +818,18 @@ describe('Polygon ZK-EVM', () => { // Approve tokens await expect( - maticTokenContract.connect(trustedSequencer).approve(polygonZKEVMContract.address, maticAmount), + maticTokenContract.connect(trustedSequencer).approve(polygonZkEVMContract.address, maticAmount), ).to.emit(maticTokenContract, 'Approval'); - const lastBatchSequenced = await polygonZKEVMContract.lastBatchSequenced(); + const lastBatchSequenced = await polygonZkEVMContract.lastBatchSequenced(); // Sequence - await expect(polygonZKEVMContract.connect(trustedSequencer).sequenceBatches([sequence])) - .to.emit(polygonZKEVMContract, 'SequenceBatches') + await expect(polygonZkEVMContract.connect(trustedSequencer).sequenceBatches([sequence])) + .to.emit(polygonZkEVMContract, 'SequenceBatches') .withArgs(lastBatchSequenced + 1); - const sentBatchHash = (await polygonZKEVMContract.sequencedBatches(lastBatchSequenced + 1)).accInputHash; - const oldAccInputHash = (await polygonZKEVMContract.sequencedBatches(0)).accInputHash; + const sentBatchHash = (await polygonZkEVMContract.sequencedBatches(lastBatchSequenced + 1)).accInputHash; + const oldAccInputHash = (await polygonZkEVMContract.sequencedBatches(0)).accInputHash; const batchAccInputHashJs = calculateAccInputHash( oldAccInputHash, @@ -841,10 +841,10 @@ describe('Polygon ZK-EVM', () => { expect(sentBatchHash).to.be.equal(batchAccInputHashJs); // Compute circuit input with the SC function - const currentStateRoot = await polygonZKEVMContract.batchNumToStateRoot(0); + const currentStateRoot = await polygonZkEVMContract.batchNumToStateRoot(0); const newStateRoot = '0x0000000000000000000000000000000000000000000000000000000000001234'; const newLocalExitRoot = '0x0000000000000000000000000000000000000000000000000000000000000456'; - const numBatch = (await polygonZKEVMContract.lastVerifiedBatch()) + 1; + const numBatch = (await polygonZkEVMContract.lastVerifiedBatch()) + 1; // Compute Js input const inputSnarkJS = await calculateSnarkInput( @@ -861,7 +861,7 @@ describe('Polygon ZK-EVM', () => { // Compute Js input const pendingStateNum = 0; - const circuitInpuSnarkSC = await polygonZKEVMContract.getNextSnarkInput( + const circuitInpuSnarkSC = await polygonZkEVMContract.getNextSnarkInput( pendingStateNum, numBatch - 1, numBatch, @@ -874,22 +874,22 @@ describe('Polygon ZK-EVM', () => { it('should match the computed SC input with the Js input in force batches', async () => { const l2txData = '0x123456'; - const maticAmount = await polygonZKEVMContract.getCurrentBatchFee(); - const lastGlobalExitRoot = await polygonZKEVMGlobalExitRoot.getLastGlobalExitRoot(); + const maticAmount = await polygonZkEVMContract.getCurrentBatchFee(); + const lastGlobalExitRoot = await polygonZkEVMGlobalExitRoot.getLastGlobalExitRoot(); await expect( - maticTokenContract.approve(polygonZKEVMContract.address, maticAmount), + maticTokenContract.approve(polygonZkEVMContract.address, maticAmount), ).to.emit(maticTokenContract, 'Approval'); - const lastForcedBatch = (await polygonZKEVMContract.lastForceBatch()).toNumber() + 1; - await expect(polygonZKEVMContract.forceBatch(l2txData, maticAmount)) - .to.emit(polygonZKEVMContract, 'ForceBatch') + const lastForcedBatch = (await polygonZkEVMContract.lastForceBatch()).toNumber() + 1; + await expect(polygonZkEVMContract.forceBatch(l2txData, maticAmount)) + .to.emit(polygonZkEVMContract, 'ForceBatch') .withArgs(lastForcedBatch, lastGlobalExitRoot, deployer.address, '0x'); const timestampForceBatch = (await ethers.provider.getBlock()).timestamp; // Increment timestamp - const forceBatchTimeout = await polygonZKEVMContract.FORCE_BATCH_TIMEOUT(); + const forceBatchTimeout = await polygonZkEVMContract.FORCE_BATCH_TIMEOUT(); await ethers.provider.send('evm_setNextBlockTimestamp', [timestampForceBatch + forceBatchTimeout.toNumber()]); const forceBatchStruct = { @@ -899,13 +899,13 @@ describe('Polygon ZK-EVM', () => { }; // sequence force batch - await expect(polygonZKEVMContract.sequenceForceBatches([forceBatchStruct])) - .to.emit(polygonZKEVMContract, 'SequenceForceBatches') + await expect(polygonZkEVMContract.sequenceForceBatches([forceBatchStruct])) + .to.emit(polygonZkEVMContract, 'SequenceForceBatches') .withArgs(lastForcedBatch); const sequencedTimestmap = (await ethers.provider.getBlock()).timestamp; - const oldAccInputHash = (await polygonZKEVMContract.sequencedBatches(0)).accInputHash; - const batchAccInputHash = (await polygonZKEVMContract.sequencedBatches(1)).accInputHash; + const oldAccInputHash = (await polygonZkEVMContract.sequencedBatches(0)).accInputHash; + const batchAccInputHash = (await polygonZkEVMContract.sequencedBatches(1)).accInputHash; const batchAccInputHashJs = calculateAccInputHash( oldAccInputHash, @@ -917,10 +917,10 @@ describe('Polygon ZK-EVM', () => { expect(batchAccInputHash).to.be.equal(batchAccInputHashJs); // Compute circuit input with the SC function - const currentStateRoot = await polygonZKEVMContract.batchNumToStateRoot(0); + const currentStateRoot = await polygonZkEVMContract.batchNumToStateRoot(0); const newStateRoot = '0x0000000000000000000000000000000000000000000000000000000000001234'; const newLocalExitRoot = '0x0000000000000000000000000000000000000000000000000000000000000456'; - const numBatch = (await polygonZKEVMContract.lastVerifiedBatch()) + 1; + const numBatch = (await polygonZkEVMContract.lastVerifiedBatch()) + 1; // Compute Js input const inputSnarkJS = await calculateSnarkInput( @@ -937,7 +937,7 @@ describe('Polygon ZK-EVM', () => { // Compute Js input const pendingStateNum = 0; - const circuitInpuSnarkSC = await polygonZKEVMContract.getNextSnarkInput( + const circuitInpuSnarkSC = await polygonZkEVMContract.getNextSnarkInput( pendingStateNum, numBatch - 1, numBatch, @@ -950,7 +950,7 @@ describe('Polygon ZK-EVM', () => { it('should verify a sequenced batch using verifyBatches', async () => { const l2txData = '0x123456'; - const maticAmount = await polygonZKEVMContract.getCurrentBatchFee(); + const maticAmount = await polygonZkEVMContract.getCurrentBatchFee(); const currentTimestamp = (await ethers.provider.getBlock()).timestamp; const sequence = { @@ -962,20 +962,20 @@ describe('Polygon ZK-EVM', () => { // Approve tokens await expect( - maticTokenContract.connect(trustedSequencer).approve(polygonZKEVMContract.address, maticAmount), + maticTokenContract.connect(trustedSequencer).approve(polygonZkEVMContract.address, maticAmount), ).to.emit(maticTokenContract, 'Approval'); - const lastBatchSequenced = await polygonZKEVMContract.lastBatchSequenced(); + const lastBatchSequenced = await polygonZkEVMContract.lastBatchSequenced(); // Sequence Batches - await expect(polygonZKEVMContract.connect(trustedSequencer).sequenceBatches([sequence])) - .to.emit(polygonZKEVMContract, 'SequenceBatches') + await expect(polygonZkEVMContract.connect(trustedSequencer).sequenceBatches([sequence])) + .to.emit(polygonZkEVMContract, 'SequenceBatches') .withArgs(lastBatchSequenced + 1); // aggregator forge the batch const pendingState = 0; const newLocalExitRoot = '0x0000000000000000000000000000000000000000000000000000000000000001'; const newStateRoot = '0x0000000000000000000000000000000000000000000000000000000000000002'; - const numBatch = (await polygonZKEVMContract.lastVerifiedBatch()) + 1; + const numBatch = (await polygonZkEVMContract.lastVerifiedBatch()) + 1; const proofA = ['0', '0']; const proofB = [ ['0', '0'], @@ -987,12 +987,12 @@ describe('Polygon ZK-EVM', () => { aggregator1.address, ); - const sequencedBatchData = await polygonZKEVMContract.sequencedBatches(1); + const sequencedBatchData = await polygonZkEVMContract.sequencedBatches(1); const { sequencedTimestamp } = sequencedBatchData; - const currentBatchFee = await polygonZKEVMContract.batchFee(); + const currentBatchFee = await polygonZkEVMContract.batchFee(); await expect( - polygonZKEVMContract.connect(aggregator1).verifyBatches( + polygonZkEVMContract.connect(aggregator1).verifyBatches( pendingState, numBatch - 1, numBatch, @@ -1002,12 +1002,12 @@ describe('Polygon ZK-EVM', () => { proofB, proofC, ), - ).to.be.revertedWith('PolygonZKEVM::verifyBatches: trusted aggregator timeout not expired'); + ).to.be.revertedWith('PolygonZkEVM::verifyBatches: trusted aggregator timeout not expired'); await ethers.provider.send('evm_setNextBlockTimestamp', [sequencedTimestamp.toNumber() + trustedAggregatorTimeoutDefault - 1]); await expect( - polygonZKEVMContract.connect(aggregator1).verifyBatches( + polygonZkEVMContract.connect(aggregator1).verifyBatches( pendingState, numBatch - 1, numBatch, @@ -1017,10 +1017,10 @@ describe('Polygon ZK-EVM', () => { proofB, proofC, ), - ).to.be.revertedWith('PolygonZKEVM::verifyBatches: trusted aggregator timeout not expired'); + ).to.be.revertedWith('PolygonZkEVM::verifyBatches: trusted aggregator timeout not expired'); await expect( - polygonZKEVMContract.connect(aggregator1).verifyBatches( + polygonZkEVMContract.connect(aggregator1).verifyBatches( pendingState, numBatch - 1, numBatch + 1, @@ -1030,11 +1030,11 @@ describe('Polygon ZK-EVM', () => { proofB, proofC, ), - ).to.be.revertedWith('PolygonZKEVM::getInputSnarkBytes: newAccInputHash does not exist'); + ).to.be.revertedWith('PolygonZkEVM::getInputSnarkBytes: newAccInputHash does not exist'); // Verify batch await expect( - polygonZKEVMContract.connect(aggregator1).verifyBatches( + polygonZkEVMContract.connect(aggregator1).verifyBatches( pendingState, numBatch - 1, numBatch, @@ -1044,7 +1044,7 @@ describe('Polygon ZK-EVM', () => { proofB, proofC, ), - ).to.emit(polygonZKEVMContract, 'VerifyBatches') + ).to.emit(polygonZkEVMContract, 'VerifyBatches') .withArgs(numBatch, newStateRoot, aggregator1.address); const verifyTimestamp = (await ethers.provider.getBlock()).timestamp; @@ -1058,55 +1058,55 @@ describe('Polygon ZK-EVM', () => { // Check pending state const lastPendingstate = 1; - expect(lastPendingstate).to.be.equal(await polygonZKEVMContract.lastPendingState()); + expect(lastPendingstate).to.be.equal(await polygonZkEVMContract.lastPendingState()); - const pendingStateData = await polygonZKEVMContract.pendingStateTransitions(lastPendingstate); + const pendingStateData = await polygonZkEVMContract.pendingStateTransitions(lastPendingstate); expect(verifyTimestamp).to.be.equal(pendingStateData.timestamp); expect(numBatch).to.be.equal(pendingStateData.lastVerifiedBatch); expect(newLocalExitRoot).to.be.equal(pendingStateData.exitRoot); expect(newStateRoot).to.be.equal(pendingStateData.stateRoot); // Try consolidate state - expect(0).to.be.equal(await polygonZKEVMContract.lastVerifiedBatch()); + expect(0).to.be.equal(await polygonZkEVMContract.lastVerifiedBatch()); // Pending state can't be 0 await expect( - polygonZKEVMContract.consolidatePendingState(0), - ).to.be.revertedWith('PolygonZKEVM::consolidatePendingState: pendingStateNum must invalid'); + polygonZkEVMContract.consolidatePendingState(0), + ).to.be.revertedWith('PolygonZkEVM::consolidatePendingState: pendingStateNum must invalid'); // Pending state does not exist await expect( - polygonZKEVMContract.consolidatePendingState(2), - ).to.be.revertedWith('PolygonZKEVM::consolidatePendingState: pendingStateNum must invalid'); + polygonZkEVMContract.consolidatePendingState(2), + ).to.be.revertedWith('PolygonZkEVM::consolidatePendingState: pendingStateNum must invalid'); // Not ready to be consolidated await expect( - polygonZKEVMContract.consolidatePendingState(lastPendingstate), - ).to.be.revertedWith('PolygonZKEVM::consolidatePendingState: pending state is not ready to be consolidated'); + polygonZkEVMContract.consolidatePendingState(lastPendingstate), + ).to.be.revertedWith('PolygonZkEVM::consolidatePendingState: pending state is not ready to be consolidated'); await ethers.provider.send('evm_setNextBlockTimestamp', [verifyTimestamp + pendingStateTimeoutDefault - 1]); await expect( - polygonZKEVMContract.consolidatePendingState(lastPendingstate), - ).to.be.revertedWith('PolygonZKEVM::consolidatePendingState: pending state is not ready to be consolidated'); + polygonZkEVMContract.consolidatePendingState(lastPendingstate), + ).to.be.revertedWith('PolygonZkEVM::consolidatePendingState: pending state is not ready to be consolidated'); await expect( - polygonZKEVMContract.consolidatePendingState(lastPendingstate), - ).to.emit(polygonZKEVMContract, 'ConsolidatePendingState') + polygonZkEVMContract.consolidatePendingState(lastPendingstate), + ).to.emit(polygonZkEVMContract, 'ConsolidatePendingState') .withArgs(numBatch, newStateRoot, lastPendingstate); // Pending state already consolidated await expect( - polygonZKEVMContract.consolidatePendingState(1), - ).to.be.revertedWith('PolygonZKEVM::consolidatePendingState: pendingStateNum must invalid'); + polygonZkEVMContract.consolidatePendingState(1), + ).to.be.revertedWith('PolygonZkEVM::consolidatePendingState: pendingStateNum must invalid'); // Fee es divided because is was fast verified - const multiplierFee = await polygonZKEVMContract.multiplierBatchFee(); - expect((currentBatchFee.mul(1000)).div(multiplierFee)).to.be.equal(await polygonZKEVMContract.batchFee()); + const multiplierFee = await polygonZkEVMContract.multiplierBatchFee(); + expect((currentBatchFee.mul(1000)).div(multiplierFee)).to.be.equal(await polygonZkEVMContract.batchFee()); // Check pending state variables - expect(1).to.be.equal(await polygonZKEVMContract.lastVerifiedBatch()); - expect(newStateRoot).to.be.equal(await polygonZKEVMContract.batchNumToStateRoot(1)); - expect(1).to.be.equal(await polygonZKEVMContract.lastPendingStateConsolidated()); + expect(1).to.be.equal(await polygonZkEVMContract.lastVerifiedBatch()); + expect(newStateRoot).to.be.equal(await polygonZkEVMContract.batchNumToStateRoot(1)); + expect(1).to.be.equal(await polygonZkEVMContract.lastPendingStateConsolidated()); }); }); diff --git a/test/contracts/real-prover/real-flow.test.js b/test/contracts/real-prover/real-flow.test.js index bdafa216a..a0a531e5b 100644 --- a/test/contracts/real-prover/real-flow.test.js +++ b/test/contracts/real-prover/real-flow.test.js @@ -17,9 +17,9 @@ const inputJson = require('./test-inputs/input.json'); describe('Real flow test', () => { let verifierContract; let maticTokenContract; - let polygonZKEVMBridgeContract; - let polygonZKEVMContract; - let polygonZKEVMGlobalExitRoot; + let polygonZkEVMBridgeContract; + let polygonZkEVMContract; + let polygonZkEVMGlobalExitRoot; let deployer; let trustedSequencer; let trustedAggregator; @@ -68,32 +68,32 @@ describe('Real flow test', () => { ); await maticTokenContract.deployed(); - // deploy PolygonZKEVMBridge - const polygonZKEVMBridgeFactory = await ethers.getContractFactory('PolygonZKEVMBridge'); - polygonZKEVMBridgeContract = await upgrades.deployProxy(polygonZKEVMBridgeFactory, [], { initializer: false }); + // deploy PolygonZkEVMBridge + const polygonZkEVMBridgeFactory = await ethers.getContractFactory('PolygonZkEVMBridge'); + polygonZkEVMBridgeContract = await upgrades.deployProxy(polygonZkEVMBridgeFactory, [], { initializer: false }); // deploy PoE - const PolygonZKEVMFactory = await ethers.getContractFactory('PolygonZKEVMMock'); - polygonZKEVMContract = await upgrades.deployProxy(PolygonZKEVMFactory, [], { initializer: false }); + const PolygonZkEVMFactory = await ethers.getContractFactory('PolygonZkEVMMock'); + polygonZkEVMContract = await upgrades.deployProxy(PolygonZkEVMFactory, [], { initializer: false }); // deploy global exit root manager - const PolygonZKEVMGlobalExitRootFactory = await ethers.getContractFactory('PolygonZKEVMGlobalExitRootMock'); + const PolygonZkEVMGlobalExitRootFactory = await ethers.getContractFactory('PolygonZkEVMGlobalExitRootMock'); - polygonZKEVMGlobalExitRoot = await PolygonZKEVMGlobalExitRootFactory.deploy( - polygonZKEVMContract.address, - polygonZKEVMBridgeContract.address, + polygonZkEVMGlobalExitRoot = await PolygonZkEVMGlobalExitRootFactory.deploy( + polygonZkEVMContract.address, + polygonZkEVMBridgeContract.address, ); - await polygonZKEVMBridgeContract.initialize( + await polygonZkEVMBridgeContract.initialize( networkIDMainnet, - polygonZKEVMGlobalExitRoot.address, - polygonZKEVMContract.address, + polygonZkEVMGlobalExitRoot.address, + polygonZkEVMContract.address, ); - await polygonZKEVMContract.initialize( - polygonZKEVMGlobalExitRoot.address, + await polygonZkEVMContract.initialize( + polygonZkEVMGlobalExitRoot.address, maticTokenContract.address, verifierContract.address, - polygonZKEVMBridgeContract.address, + polygonZkEVMBridgeContract.address, { admin: admin.address, chainID, @@ -117,14 +117,14 @@ describe('Real flow test', () => { const batchesNum = batchesData.length; // Approve tokens - const maticAmount = await polygonZKEVMContract.getCurrentBatchFee(); + const maticAmount = await polygonZkEVMContract.getCurrentBatchFee(); await expect( - maticTokenContract.connect(trustedSequencer).approve(polygonZKEVMContract.address, maticAmount.mul(batchesNum)), + maticTokenContract.connect(trustedSequencer).approve(polygonZkEVMContract.address, maticAmount.mul(batchesNum)), ).to.emit(maticTokenContract, 'Approval'); // prepare PoE - await polygonZKEVMContract.setVerifiedBatch(inputJson.oldNumBatch); - await polygonZKEVMContract.setSequencedBatch(inputJson.oldNumBatch); + await polygonZkEVMContract.setVerifiedBatch(inputJson.oldNumBatch); + await polygonZkEVMContract.setSequencedBatch(inputJson.oldNumBatch); const lastTimestamp = batchesData[batchesNum - 1].timestamp; await ethers.provider.send('evm_setNextBlockTimestamp', [lastTimestamp]); @@ -151,14 +151,14 @@ describe('Real flow test', () => { // prapare globalExitRoot const randomTimestamp = 1001; const { globalExitRoot } = batchesData[0]; - await polygonZKEVMGlobalExitRoot.setGlobalExitRoot(globalExitRoot, randomTimestamp); + await polygonZkEVMGlobalExitRoot.setGlobalExitRoot(globalExitRoot, randomTimestamp); - const lastBatchSequenced = await polygonZKEVMContract.lastBatchSequenced(); + const lastBatchSequenced = await polygonZkEVMContract.lastBatchSequenced(); // check trusted sequencer const trustedSequencerAddress = inputJson.singleBatchData[i].sequencerAddr; if (trustedSequencer.address !== trustedSequencerAddress) { - await polygonZKEVMContract.connect(admin).setTrustedSequencer(trustedSequencerAddress); + await polygonZkEVMContract.connect(admin).setTrustedSequencer(trustedSequencerAddress); await ethers.provider.send('hardhat_impersonateAccount', [trustedSequencerAddress]); trustedSequencer = await ethers.getSigner(trustedSequencerAddress); await deployer.sendTransaction({ @@ -166,19 +166,19 @@ describe('Real flow test', () => { value: ethers.utils.parseEther('4'), }); await expect( - maticTokenContract.connect(trustedSequencer).approve(polygonZKEVMContract.address, maticAmount.mul(batchesNum)), + maticTokenContract.connect(trustedSequencer).approve(polygonZkEVMContract.address, maticAmount.mul(batchesNum)), ).to.emit(maticTokenContract, 'Approval'); await maticTokenContract.transfer(trustedSequencer.address, ethers.utils.parseEther('100')); } // Sequence Batches - await expect(polygonZKEVMContract.connect(trustedSequencer).sequenceBatches([currentSequence])) - .to.emit(polygonZKEVMContract, 'SequenceBatches') + await expect(polygonZkEVMContract.connect(trustedSequencer).sequenceBatches([currentSequence])) + .to.emit(polygonZkEVMContract, 'SequenceBatches') .withArgs(Number(lastBatchSequenced) + 1); } // Set state and exit root - await polygonZKEVMContract.setStateRoot(inputJson.oldStateRoot, inputJson.oldNumBatch); + await polygonZkEVMContract.setStateRoot(inputJson.oldStateRoot, inputJson.oldNumBatch); const { aggregatorAddress } = inputJson; await ethers.provider.send('hardhat_impersonateAccount', [aggregatorAddress]); @@ -187,9 +187,9 @@ describe('Real flow test', () => { to: aggregatorAddress, value: ethers.utils.parseEther('4'), }); - await polygonZKEVMContract.connect(admin).setTrustedAggregator(aggregatorAddress); + await polygonZkEVMContract.connect(admin).setTrustedAggregator(aggregatorAddress); - const batchAccInputHash = (await polygonZKEVMContract.sequencedBatches(inputJson.newNumBatch)).accInputHash; + const batchAccInputHash = (await polygonZkEVMContract.sequencedBatches(inputJson.newNumBatch)).accInputHash; expect(batchAccInputHash).to.be.equal(inputJson.newAccInputHash); const { @@ -219,7 +219,7 @@ describe('Real flow test', () => { const pendingStateNum = 0; // Verify batch await expect( - polygonZKEVMContract.connect(aggregator).trustedVerifyBatches( + polygonZkEVMContract.connect(aggregator).trustedVerifyBatches( pendingStateNum, oldNumBatch, newNumBatch, @@ -229,7 +229,7 @@ describe('Real flow test', () => { proofB, proofC, ), - ).to.emit(polygonZKEVMContract, 'TrustedVerifyBatches') + ).to.emit(polygonZkEVMContract, 'TrustedVerifyBatches') .withArgs(newNumBatch, newStateRoot, aggregator.address); }); }); diff --git a/test/contracts/snark_stark_input.test.js b/test/contracts/snark_stark_input.test.js index b1cba8314..5ff65eca3 100644 --- a/test/contracts/snark_stark_input.test.js +++ b/test/contracts/snark_stark_input.test.js @@ -4,7 +4,7 @@ const { ethers, upgrades } = require('hardhat'); const { contractUtils } = require('@0xpolygonhermez/zkevm-commonjs'); describe('Polygon ZK-EVM snark stark input test', () => { - let polygonZKEVMContract; + let polygonZkEVMContract; const genesisRoot = '0x0000000000000000000000000000000000000000000000000000000000000001'; let randomSigner; @@ -19,9 +19,9 @@ describe('Polygon ZK-EVM snark stark input test', () => { [randomSigner] = await ethers.getSigners(); // deploy Polygon ZK-EVM - const PolygonZKEVMFactory = await ethers.getContractFactory('PolygonZKEVMMock'); - polygonZKEVMContract = await upgrades.deployProxy( - PolygonZKEVMFactory, + const PolygonZkEVMFactory = await ethers.getContractFactory('PolygonZkEVMMock'); + polygonZkEVMContract = await upgrades.deployProxy( + PolygonZkEVMFactory, [ randomSigner.address, randomSigner.address, @@ -42,7 +42,7 @@ describe('Polygon ZK-EVM snark stark input test', () => { ], ); - await polygonZKEVMContract.deployed(); + await polygonZkEVMContract.deployed(); }); it('Check Accumualte input Hash', async () => { @@ -60,7 +60,7 @@ describe('Polygon ZK-EVM snark stark input test', () => { timestamp, sequencerAddr, ); - const accumulateInputHashSC = await polygonZKEVMContract.calculateAccInputHash( + const accumulateInputHashSC = await polygonZkEVMContract.calculateAccInputHash( oldAccInputHash, batchL2Data, globalExitRoot, @@ -85,9 +85,9 @@ describe('Polygon ZK-EVM snark stark input test', () => { const lastPendingStateConsolidated = 0; const sequencedTimestamp = 999; // set smart contract with correct parameters - await polygonZKEVMContract.setStateRoot(oldStateRoot, oldNumBatch); - await polygonZKEVMContract.setSequencedBatches(newNumBatch, newAccInputHash, sequencedTimestamp, lastPendingStateConsolidated); - await polygonZKEVMContract.setSequencedBatch(1); + await polygonZkEVMContract.setStateRoot(oldStateRoot, oldNumBatch); + await polygonZkEVMContract.setSequencedBatches(newNumBatch, newAccInputHash, sequencedTimestamp, lastPendingStateConsolidated); + await polygonZkEVMContract.setSequencedBatch(1); await ethers.provider.send('hardhat_impersonateAccount', [aggregatorAddress]); const aggregator = await ethers.getSigner(aggregatorAddress); @@ -98,7 +98,7 @@ describe('Polygon ZK-EVM snark stark input test', () => { // Compute SC input const pendingStateNum = 0; - const inputSnarkSC = await polygonZKEVMContract.connect(aggregator).getNextSnarkInput( + const inputSnarkSC = await polygonZkEVMContract.connect(aggregator).getNextSnarkInput( pendingStateNum, oldNumBatch, newNumBatch, diff --git a/test/contracts/timelockUpgradeTest.js b/test/contracts/timelockUpgradeTest.js new file mode 100644 index 000000000..f4f3b875a --- /dev/null +++ b/test/contracts/timelockUpgradeTest.js @@ -0,0 +1,112 @@ +const { expect } = require('chai'); +const { ethers, upgrades } = require('hardhat'); + +describe('Polygon ZK-EVM', () => { + let deployer; + let trustedAggregator; + let trustedSequencer; + let admin; + + let verifierContract; + let polygonZkEVMBridgeContract; + let polygonZkEVMContract; + let maticTokenContract; + let polygonZkEVMGlobalExitRoot; + + const maticTokenName = 'Matic Token'; + const maticTokenSymbol = 'MATIC'; + const maticTokenInitialBalance = ethers.utils.parseEther('20000000'); + + const genesisRoot = '0x0000000000000000000000000000000000000000000000000000000000000001'; + + const networkIDMainnet = 0; + const allowForcebatches = true; + const urlSequencer = 'http://zkevm-json-rpc:8123'; + const chainID = 1000; + const networkName = 'zkevm'; + const pendingStateTimeoutDefault = 10; + const trustedAggregatorTimeoutDefault = 10; + + beforeEach('Deploy contract', async () => { + // load signers + [deployer, trustedAggregator, trustedSequencer, admin] = await ethers.getSigners(); + + // deploy mock verifier + const VerifierRollupHelperFactory = await ethers.getContractFactory( + 'VerifierRollupHelperMock', + ); + verifierContract = await VerifierRollupHelperFactory.deploy(); + + // deploy MATIC + const maticTokenFactory = await ethers.getContractFactory('ERC20PermitMock'); + maticTokenContract = await maticTokenFactory.deploy( + maticTokenName, + maticTokenSymbol, + deployer.address, + maticTokenInitialBalance, + ); + await maticTokenContract.deployed(); + + // deploy global exit root manager + const PolygonZkEVMGlobalExitRootFactory = await ethers.getContractFactory('PolygonZkEVMGlobalExitRoot'); + polygonZkEVMGlobalExitRoot = await upgrades.deployProxy(PolygonZkEVMGlobalExitRootFactory, [], { initializer: false }); + + // deploy PolygonZkEVMBridge + const polygonZkEVMBridgeFactory = await ethers.getContractFactory('PolygonZkEVMBridge'); + polygonZkEVMBridgeContract = await upgrades.deployProxy(polygonZkEVMBridgeFactory, [], { initializer: false }); + + // deploy PoE + const PolygonZkEVMFactory = await ethers.getContractFactory('PolygonZkEVMMock'); + polygonZkEVMContract = await upgrades.deployProxy(PolygonZkEVMFactory, [], { initializer: false }); + + await polygonZkEVMGlobalExitRoot.initialize(polygonZkEVMContract.address, polygonZkEVMBridgeContract.address); + await polygonZkEVMBridgeContract.initialize(networkIDMainnet, polygonZkEVMGlobalExitRoot.address, polygonZkEVMContract.address); + await polygonZkEVMContract.initialize( + polygonZkEVMGlobalExitRoot.address, + maticTokenContract.address, + verifierContract.address, + polygonZkEVMBridgeContract.address, + { + admin: admin.address, + chainID, + trustedSequencer: trustedSequencer.address, + pendingStateTimeout: pendingStateTimeoutDefault, + forceBatchAllowed: allowForcebatches, + trustedAggregator: trustedAggregator.address, + trustedAggregatorTimeout: trustedAggregatorTimeoutDefault, + }, + genesisRoot, + urlSequencer, + networkName, + ); + + // fund sequencer address with Matic tokens + await maticTokenContract.transfer(trustedSequencer.address, ethers.utils.parseEther('100')); + }); + + it('Should upgrade brdige correctly', async () => { + // Upgrade the contract + const polygonZkEVMBridgeFactoryV2 = await ethers.getContractFactory('PolygonZkEVMBridgeMock'); + const polygonZkEVMBridgeContractV2 = polygonZkEVMBridgeFactoryV2.attach(polygonZkEVMBridgeContract.address); + + // Check that is the v0 contract + await expect(polygonZkEVMBridgeContractV2.maxEtherBridge()).to.be.reverted; + + // Upgrade the contract + await upgrades.upgradeProxy(polygonZkEVMBridgeContract.address, polygonZkEVMBridgeFactoryV2); + + await expect(await polygonZkEVMBridgeContractV2.maxEtherBridge()).to.be.equal(0); + }); + + it('Should upgrade brdige correctly', async () => { + // Upgrade the contract + const polygonZkEVMBridgeFactoryV2 = await ethers.getContractFactory('PolygonZkEVMBridgeMock'); + const polygonZkEVMBridgeContractV2 = polygonZkEVMBridgeFactoryV2.attach(polygonZkEVMBridgeContract.address); + + // Check that is the v0 contract + await expect(polygonZkEVMBridgeContractV2.maxEtherBridge()).to.be.reverted; + + // Upgrade the contract + await upgrades.upgradeProxy(polygonZkEVMBridgeContract.address, polygonZkEVMBridgeFactoryV2); + }); +}); From 5f438c3dd378ffbf704c9b6499ac7f8f16d5e4db Mon Sep 17 00:00:00 2001 From: invocamanman Date: Tue, 20 Dec 2022 13:16:54 +0100 Subject: [PATCH 55/71] udpate dpeloyment and timelock test --- deployment/deployPoE_v2-0.js | 6 +- deployment/deploy_parameters.json.example | 2 +- deployment/genesis.json | 11 +- docker/scripts/genesis_docker.json | 11 +- test/contracts/timelockUpgradeTest.js | 152 +++++++++++++++++++++- 5 files changed, 164 insertions(+), 18 deletions(-) diff --git a/deployment/deployPoE_v2-0.js b/deployment/deployPoE_v2-0.js index f6654b246..18efaf7ea 100644 --- a/deployment/deployPoE_v2-0.js +++ b/deployment/deployPoE_v2-0.js @@ -100,7 +100,7 @@ async function main() { */ // deploy global exit root manager - const PolygonZkEVMGlobalExitRootFactory = await ethers.getContractFactory('polygonZkEVMGlobalExitRoot', deployer); + const PolygonZkEVMGlobalExitRootFactory = await ethers.getContractFactory('PolygonZkEVMGlobalExitRoot', deployer); let polygonZkEVMGlobalExitRoot; for (let i = 0; i < attemptsDeployProxy; i++) { try { @@ -122,7 +122,7 @@ async function main() { // deploy PolygonZkEVMBridge let polygonZkEVMBridgeFactory; - if (deployParameters.PolygonZkEVMBridgeMock) { + if (deployParameters.polygonZkEVMBridgeMock) { polygonZkEVMBridgeFactory = await ethers.getContractFactory('PolygonZkEVMBridgeMock', deployer); } else { polygonZkEVMBridgeFactory = await ethers.getContractFactory('PolygonZkEVMBridge', deployer); @@ -188,7 +188,6 @@ async function main() { console.log('PolygonZkEVMGlobalExitRootAddress:', await polygonZkEVMBridgeContract.globalExitRootManager()); console.log('networkID:', await polygonZkEVMBridgeContract.networkID()); console.log('poeAddress:', await polygonZkEVMBridgeContract.poeAddress()); - console.log('owner:', await polygonZkEVMBridgeContract.owner()); /* * Initialize Polygon ZK-EVM @@ -287,6 +286,7 @@ async function main() { const trustedSequencerWallet = new ethers.Wallet(deployParameters.trustedSequencerPvtKey, currentProvider); await maticTokenContract.connect(trustedSequencerWallet).approve(polygonZkEVMContract.address, ethers.constants.MaxUint256); } + const outputJson = { polygonZkEVMAddress: polygonZkEVMContract.address, PolygonZkEVMBridgeAddress: polygonZkEVMBridgeContract.address, diff --git a/deployment/deploy_parameters.json.example b/deployment/deploy_parameters.json.example index b07d3b66f..3fb89b939 100644 --- a/deployment/deploy_parameters.json.example +++ b/deployment/deploy_parameters.json.example @@ -10,7 +10,7 @@ "maxPriorityFeePerGas":0, "multiplierGas": 0, "trustedSequencerPvtKey":"", - "PolygonZkEVMBridgeMock":false, + "polygonZkEVMBridgeMock":false, "admin":"0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D", "trustedAggregator":"0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D" } \ No newline at end of file diff --git a/deployment/genesis.json b/deployment/genesis.json index 35f31ae64..a4de66de1 100644 --- a/deployment/genesis.json +++ b/deployment/genesis.json @@ -1,16 +1,15 @@ { - "root": "0x6cace430a2a3768dd13bf6efdee30fb461667b4bd1fd247d01e3c9a38e49cbf1", + "root": "0x9db7fd5c3c6315ad21e10e643a258ee8cc8d35ee0bc51b1f704a7e7a6090c523", "genesis": [ { "balance": "200000000000000000000000000", "nonce": "1", "address": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988", - "bytecode": "0x608060405260043610620001be5760003560e01c806381b1c17411620000ff578063d02103ca1162000095578063ed6be5c9116200006c578063ed6be5c91462000558578063ee25560b146200056f578063f2fde38b14620005a0578063ff634ed714620005c557600080fd5b8063d02103ca1462000507578063d96a15f71462000529578063dbc16976146200054057600080fd5b80639e34070f11620000d65780639e34070f146200045e578063a08e8a081462000483578063aaa13cc214620004ad578063bab161bf14620004d257600080fd5b806381b1c17414620003e25780638da5cb5b146200041c5780638f611519146200043c57600080fd5b80633ae05047116200017557806346385549116200014c57806346385549146200035b578063647c576c1462000380578063715018a614620003a55780637b6323c114620003bd57600080fd5b80633ae0504714620002f95780633da8168214620003115780633e197043146200033657600080fd5b80630871e97114620001c357806315064c9614620001dc5780632072f6c5146200020d57806322e95f2c14620002255780632dfdf0b51462000263578063318aee3d146200028a575b600080fd5b620001da620001d4366004620025cb565b620005dc565b005b348015620001e957600080fd5b50602254620001f89060ff1681565b60405190151581526020015b60405180910390f35b3480156200021a57600080fd5b50620001da62000a17565b3480156200023257600080fd5b506200024a6200024436600462002658565b62000a50565b6040516001600160a01b03909116815260200162000204565b3480156200027057600080fd5b506200027b60215481565b60405190815260200162000204565b3480156200029757600080fd5b50620002d4620002a936600462002694565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000204565b3480156200030657600080fd5b506200027b62000aa3565b3480156200031e57600080fd5b50620001f86200033036600462002783565b62000b96565b3480156200034357600080fd5b506200027b6200035536600462002801565b62000c98565b3480156200036857600080fd5b50620001da6200037a36600462002912565b62000d25565b3480156200038d57600080fd5b50620001da6200039f366004620029f9565b62000ebe565b348015620003b257600080fd5b50620001da62001022565b348015620003ca57600080fd5b50620001da620003dc36600462002912565b62001038565b348015620003ef57600080fd5b506200024a6200040136600462002a49565b6089602052600090815260409020546001600160a01b031681565b3480156200042957600080fd5b506055546001600160a01b03166200024a565b3480156200044957600080fd5b50608c546200024a906001600160a01b031681565b3480156200046b57600080fd5b50620001f86200047d36600462002a49565b620014d4565b3480156200049057600080fd5b506200049a600081565b60405160ff909116815260200162000204565b348015620004ba57600080fd5b506200024a620004cc36600462002a63565b62001519565b348015620004df57600080fd5b50608754620004f19063ffffffff1681565b60405163ffffffff909116815260200162000204565b3480156200051457600080fd5b50608b546200024a906001600160a01b031681565b620001da6200053a36600462002b17565b62001630565b3480156200054d57600080fd5b50620001da6200177b565b3480156200056557600080fd5b50620004f1600081565b3480156200057c57600080fd5b506200027b6200058e36600462002a49565b60886020526000908152604090205481565b348015620005ad57600080fd5b50620001da620005bf36600462002694565b620017b2565b348015620005d257600080fd5b506200049a600181565b60225460ff16156200060b5760405162461bcd60e51b8152600401620006029062002b7f565b60405180910390fd5b60875463ffffffff90811690861603620006395760405162461bcd60e51b8152600401620006029062002be7565b60008060606001600160a01b038916620006c057853414620006b65760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201526e4d415443485f4d53475f56414c554560881b606482015260840162000602565b6000915062000931565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200078e57604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562000755573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200077b919062002c40565b506020810151815190945092506200092f565b8415620007a357620007a38a88888862001831565b620007ba6001600160a01b038b1633308a62001c35565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000811573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200083b919081019062002cdb565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200087a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620008a4919081019062002cdb565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620008e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000909919062002d14565b6040516020016200091d9392919062002d62565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200097398979695949392919062002d9f565b60405180910390a16200099e62000998600084868c8c8c888051906020012062000c98565b62001ca2565b608b546001600160a01b03166333d6247d620009b962000aa3565b6040518263ffffffff1660e01b8152600401620009d891815260200190565b600060405180830381600087803b158015620009f357600080fd5b505af115801562000a08573d6000803e3d6000fd5b50505050505050505050505050565b608c546001600160a01b0316331462000a445760405162461bcd60e51b8152600401620006029062002e0c565b62000a4e62001df3565b565b600060896000848460405160200162000a6b92919062002e7d565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b8d578260011660010362000b0e576001816020811062000ada5762000ada62002ea7565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000b3b565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b4860028462002ee9565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b849062002f00565b91505062000aae565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c89578160011660010362000c135786818151811062000bd15762000bd162002ea7565b60200260200101518360405160200162000bf5929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c65565b8287828151811062000c295762000c2962002ea7565b602002602001015160405160200162000c4c929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c7260028362002ee9565b91508062000c808162002f00565b91505062000ba6565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d4b5760405162461bcd60e51b8152600401620006029062002b7f565b62000d618a8a8a8a8a8a8a8a8a8a600162001e51565b62000d728963ffffffff16620020d8565b6000836001600160a01b03168387898560405160240162000d969392919062002f1c565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000dcd919062002f57565b60006040518083038185875af1925050503d806000811462000e0c576040519150601f19603f3d011682016040523d82523d6000602084013e62000e11565b606091505b505090508062000e705760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f46416044820152631253115160e21b606482015260840162000602565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000ea995949392919062002f75565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000edf5750600054600160ff909116105b8062000efb5750303b15801562000efb575060005460ff166001145b62000f605760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000602565b6000805460ff19166001179055801562000f84576000805461ff0019166101001790555b6087805463ffffffff861663ffffffff19909116179055608b80546001600160a01b038086166001600160a01b031992831617909255608c80549285169290911691909117905562000fd56200211a565b80156200101c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6200102c62002192565b62000a4e6000620021ee565b60225460ff16156200105e5760405162461bcd60e51b8152600401620006029062002b7f565b620010748a8a8a8a8a8a8a8a8a8a600062001e51565b620010858963ffffffff16620020d8565b6001600160a01b0385166200116e57604080516000808252602082019092526001600160a01b038516908490604051620010c0919062002f57565b60006040518083038185875af1925050503d8060008114620010ff576040519150601f19603f3d011682016040523d82523d6000602084013e62001104565b606091505b5050905080620011675760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201526617d1905253115160ca1b606482015260840162000602565b5062001487565b60875463ffffffff908116908716036200119e57620011986001600160a01b038616848462002240565b62001487565b60008686604051602001620011b592919062002e7d565b60408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b0316806200140c5760008060008580602001905181019062001207919062002fac565b925092509250600085848484604051620012219062002534565b6200122f9392919062002d62565b8190604051809103906000f590508015801562001250573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af1158015620012a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012cb919062002c40565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013fa9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001484565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200145c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001482919062002c40565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838987878686604051620014c095949392919062002f75565b60405180910390a150505050505050505050565b600080620014e56101008462002ee9565b90506000620014f76101008562003022565b60009283526088602052604090922054600190921b9182169091149392505050565b60008088886040516020016200153192919062002e7d565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620015649062002534565b601f1982820381018352601f90910116604081905262001591908d908d908d908d908d9060200162003062565b60408051601f1981840301815290829052620015b19291602001620030a3565b604051602081830303815290604052805190602001206040516020016200160a94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620016565760405162461bcd60e51b8152600401620006029062002b7f565b60875463ffffffff90811690841603620016845760405162461bcd60e51b8152600401620006029062002be7565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620016d19260019263ffffffff9092169133918991899134918a919062002d9f565b60405180910390a162001708620009986001608760009054906101000a900463ffffffff1633878734888051906020012062000c98565b608b546001600160a01b03166333d6247d6200172362000aa3565b6040518263ffffffff1660e01b81526004016200174291815260200190565b600060405180830381600087803b1580156200175d57600080fd5b505af115801562001772573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b03163314620017a85760405162461bcd60e51b8152600401620006029062002e0c565b62000a4e62002272565b620017bc62002192565b6001600160a01b038116620018235760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000602565b6200182e81620021ee565b50565b60006200187483838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200232192505050565b9050632afa533160e01b6001600160e01b031982160162001a5d576000808080808080620018a6896004818d620030d6565b810190620018b5919062003102565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018f75760405162461bcd60e51b815260040162000602906200315d565b6001600160a01b0386163014620019225760405162461bcd60e51b81526004016200060290620031ad565b8a8514620019895760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201526c09e8aa6be9c9ea8be9a82a8869609b1b606482015260840162000602565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162001a09919062002f57565b6000604051808303816000865af19150503d806000811462001a48576040519150601f19603f3d011682016040523d82523d6000602084013e62001a4d565b606091505b5050505050505050505062001c2e565b6001600160e01b031981166323f2ebc360e21b1462001abf5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000602565b60008080808080808062001ad78a6004818e620030d6565b81019062001ae69190620031f2565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001b2a5760405162461bcd60e51b815260040162000602906200315d565b6001600160a01b038716301462001b555760405162461bcd60e51b81526004016200060290620031ad565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001bde919062002f57565b6000604051808303816000865af19150503d806000811462001c1d576040519150601f19603f3d011682016040523d82523d6000602084013e62001c22565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526200101c9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262002328565b80600162001cb3602060026200337b565b62001cbf919062003389565b6021541062001d245760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000602565b60016021600082825462001d399190620033a3565b909155505060215460005b602081101562001de3578160011660010362001d7957826001826020811062001d715762001d7162002ea7565b015550505050565b6001816020811062001d8f5762001d8f62002ea7565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001dcc919062002ee9565b91508062001dda8162002f00565b91505062001d44565b5062001dee620033be565b505050565b60225460ff161562001e195760405162461bcd60e51b8152600401620006029062002b7f565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001e628a63ffffffff16620014d4565b1562001ebd5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c416044820152631253515160e21b606482015260840162000602565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001f31573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f579190620033d4565b90508060000362001fc15760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201526c17d493d3d517d2539590531251609a1b606482015260840162000602565b60875463ffffffff878116911614620020435760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d41544348000000000000000000606482015260840162000602565b60875460009063ffffffff166200205c5750886200205f565b50895b6200208a6200207b848b8b8b8b8b8b8051906020012062000c98565b8e8e63ffffffff168462000b96565b62000a085760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c4944604482015260640162000602565b6000620020e86101008362002ee9565b90506000620020fa6101008462003022565b6000928352608860205260409092208054600190931b9092179091555050565b600054610100900460ff16620021875760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000602565b62000a4e33620021ee565b6055546001600160a01b0316331462000a4e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000602565b605580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001dee90849063a9059cbb60e01b9060640162001c6a565b60225460ff16620022ec5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000602565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b60006200237f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620024019092919063ffffffff16565b80519091501562001dee5780806020019051810190620023a0919062002c40565b62001dee5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000602565b606062000c90848460008585600080866001600160a01b031685876040516200242b919062002f57565b60006040518083038185875af1925050503d80600081146200246a576040519150601f19603f3d011682016040523d82523d6000602084013e6200246f565b606091505b509150915062002482878383876200248d565b979650505050505050565b6060831562002501578251600003620024f9576001600160a01b0385163b620024f95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000602565b508162000c90565b62000c908383815115620025185781518083602001fd5b8060405162461bcd60e51b8152600401620006029190620033ee565b611557806200340483390190565b6001600160a01b03811681146200182e57600080fd5b8035620025658162002542565b919050565b803563ffffffff811681146200256557600080fd5b60008083601f8401126200259257600080fd5b50813567ffffffffffffffff811115620025ab57600080fd5b602083019150836020828501011115620025c457600080fd5b9250929050565b60008060008060008060a08789031215620025e557600080fd5b8635620025f28162002542565b955062002602602088016200256a565b94506040870135620026148162002542565b935060608701359250608087013567ffffffffffffffff8111156200263857600080fd5b6200264689828a016200257f565b979a9699509497509295939492505050565b600080604083850312156200266c57600080fd5b62002677836200256a565b91506020830135620026898162002542565b809150509250929050565b600060208284031215620026a757600080fd5b8135620026b48162002542565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620026fd57620026fd620026bb565b604052919050565b600082601f8301126200271757600080fd5b8135602067ffffffffffffffff821115620027365762002736620026bb565b8160051b62002747828201620026d1565b92835284810182019282810190878511156200276257600080fd5b83870192505b84831015620024825782358252918301919083019062002768565b600080600080608085870312156200279a57600080fd5b84359350602085013567ffffffffffffffff80821115620027ba57600080fd5b620027c88883890162002705565b9450604087013591508082168214620027e057600080fd5b509396929550929360600135925050565b60ff811681146200182e57600080fd5b600080600080600080600060e0888a0312156200281d57600080fd5b87356200282a81620027f1565b96506200283a602089016200256a565b955060408801356200284c8162002542565b94506200285c606089016200256a565b935060808801356200286e8162002542565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620028a857620028a8620026bb565b50601f01601f191660200190565b600082601f830112620028c857600080fd5b8135620028df620028d9826200288b565b620026d1565b818152846020838601011115620028f557600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200293357600080fd5b8a3567ffffffffffffffff808211156200294c57600080fd5b6200295a8e838f0162002705565b9b506200296a60208e016200256a565b9a5060408d0135995060608d013598506200298860808e016200256a565b97506200299860a08e0162002558565b9650620029a860c08e016200256a565b9550620029b860e08e0162002558565b94506101008d013593506101208d0135915080821115620029d857600080fd5b50620029e78d828e01620028b6565b9150509295989b9194979a5092959850565b60008060006060848603121562002a0f57600080fd5b62002a1a846200256a565b9250602084013562002a2c8162002542565b9150604084013562002a3e8162002542565b809150509250925092565b60006020828403121562002a5c57600080fd5b5035919050565b600080600080600080600060a0888a03121562002a7f57600080fd5b62002a8a886200256a565b9650602088013562002a9c8162002542565b9550604088013567ffffffffffffffff8082111562002aba57600080fd5b62002ac88b838c016200257f565b909750955060608a013591508082111562002ae257600080fd5b5062002af18a828b016200257f565b909450925050608088013562002b0781620027f1565b8091505092959891949750929550565b60008060006060848603121562002b2d57600080fd5b62002b38846200256a565b9250602084013562002b4a8162002542565b9150604084013567ffffffffffffffff81111562002b6757600080fd5b62002b7586828701620028b6565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b6020808252602a908201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e546040820152692fa122afa4aa29a2a62360b11b606082015260800190565b80151581146200182e57600080fd5b60006020828403121562002c5357600080fd5b8151620026b48162002c31565b60005b8381101562002c7d57818101518382015260200162002c63565b838111156200101c5750506000910152565b600082601f83011262002ca157600080fd5b815162002cb2620028d9826200288b565b81815284602083860101111562002cc857600080fd5b62000c9082602083016020870162002c60565b60006020828403121562002cee57600080fd5b815167ffffffffffffffff81111562002d0657600080fd5b62000c908482850162002c8f565b60006020828403121562002d2757600080fd5b8151620026b481620027f1565b6000815180845262002d4e81602086016020860162002c60565b601f01601f19169290920160200192915050565b60608152600062002d77606083018662002d34565b828103602084015262002d8b818662002d34565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002df38483018762002d34565b925080851660e085015250509998505050505050505050565b6020808252604b908201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660408201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60608201526a18de4818dbdb9d1c9858dd60aa1b608082015260a00190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002efb5762002efb62002ebd565b500490565b60006001820162002f155762002f1562002ed3565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002f4e9083018462002d34565b95945050505050565b6000825162002f6b81846020870162002c60565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002fc257600080fd5b835167ffffffffffffffff8082111562002fdb57600080fd5b62002fe98783880162002c8f565b945060208601519150808211156200300057600080fd5b506200300f8682870162002c8f565b925050604084015162002a3e81620027f1565b60008262003034576200303462002ebd565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006200307860608301878962003039565b82810360208401526200308d81868862003039565b91505060ff831660408301529695505050505050565b60008351620030b781846020880162002c60565b835190830190620030cd81836020880162002c60565b01949350505050565b60008085851115620030e757600080fd5b83861115620030f557600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200311e57600080fd5b87356200312b8162002542565b965060208801356200313d8162002542565b9550604088013594506060880135935060808801356200286e81620027f1565b60208082526030908201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560408201526f29aa2fa122afaa2422afa9a2a72222a960811b606082015260800190565b60208082526025908201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f42456040820152645f5448495360d81b606082015260800190565b600080600080600080600080610100898b0312156200321057600080fd5b88356200321d8162002542565b975060208901356200322f8162002542565b9650604089013595506060890135945060808901356200324f8162002c31565b935060a08901356200326181620027f1565b979a969950949793969295929450505060c08201359160e0013590565b600181815b80851115620032bf578160001904821115620032a357620032a362002ed3565b80851615620032b157918102915b93841c939080029062003283565b509250929050565b600082620032d85750600162000a9d565b81620032e75750600062000a9d565b81600181146200330057600281146200330b576200332b565b600191505062000a9d565b60ff8411156200331f576200331f62002ed3565b50506001821b62000a9d565b5060208310610133831016604e8410600b841016171562003350575081810a62000a9d565b6200335c83836200327e565b806000190482111562003373576200337362002ed3565b029392505050565b6000620026b48383620032c7565b6000828210156200339e576200339e62002ed3565b500390565b60008219821115620033b957620033b962002ed3565b500190565b634e487b7160e01b600052600160045260246000fd5b600060208284031215620033e757600080fd5b5051919050565b602081526000620026b4602083018462002d3456fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b14f80bfcbda3f7be499de7c67ec81639549928b9cee16384da9f2fb8c22dce64736f6c634300080f0033a2646970667358221220fd3826b18742b99a0bc2739447acf94a8af9e9299c7241c343cafcf744385b5964736f6c634300080f0033", + "bytecode": "0x608060405260043610620001675760003560e01c806381b1c17411620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b806381b1c17414620003735780638f61151914620003ad5780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b80633ae05047116200011e5780633ae0504714620002a25780633da8168214620002ba5780633e19704314620002df578063463855491462000304578063647c576c14620003295780637b6323c1146200034e57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002470565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009d2565b348015620001db57600080fd5b50620001f3620001ed366004620024fd565b62000a0b565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002539565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b506200022462000a5e565b348015620002c757600080fd5b50620001a1620002d936600462002628565b62000b51565b348015620002ec57600080fd5b5062000224620002fe366004620026a6565b62000c53565b3480156200031157600080fd5b506200018362000323366004620027b7565b62000ce0565b3480156200033657600080fd5b5062000183620003483660046200289e565b62000e86565b3480156200035b57600080fd5b50620001836200036d366004620027b7565b62000fe5565b3480156200038057600080fd5b50620001f362000392366004620028ee565b6024602052600090815260409020546001600160a01b031681565b348015620003ba57600080fd5b50602754620001f3906001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028ee565b62001492565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002908565b620014d7565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620029bc565b620015ee565b348015620004c357600080fd5b50620001836200179a565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028ee565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a24565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008ec565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074957604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562000710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000736919062002a9b565b50602081015181519094509250620008ea565b84156200075e576200075e8a888888620017d1565b620007756001600160a01b038b1633308a62001bf9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f6919081019062002b36565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000835573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085f919081019062002b36565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c4919062002b6f565b604051602001620008d89392919062002bbd565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092e98979695949392919062002bfa565b60405180910390a16200095962000953600084868c8c8c888051906020012062000c53565b62001c66565b6026546001600160a01b03166333d6247d6200097462000a5e565b6040518263ffffffff1660e01b81526004016200099391815260200190565b600060405180830381600087803b158015620009ae57600080fd5b505af1158015620009c3573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ff5760405162461bcd60e51b8152600401620005539062002c67565b62000a0962001db7565b565b600060246000848460405160200162000a2692919062002cc4565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b48578260011660010362000ac9576001816020811062000a955762000a9562002cee565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af6565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0360028462002d30565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3f9062002d47565b91505062000a69565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c44578160011660010362000bce5786818151811062000b8c5762000b8c62002cee565b60200260200101518360405160200162000bb0929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c20565b8287828151811062000be45762000be462002cee565b602002602001015160405160200162000c07929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2d60028362002d30565b91508062000c3b8162002d47565b91505062000b61565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d065760405162461bcd60e51b8152600401620005539062002a24565b62000d1c8a8a8a8a8a8a8a8a8a8a600162001e15565b62000d2d8963ffffffff16620020a0565b6000836001600160a01b03168387898560405160240162000d519392919062002d63565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d88919062002d9e565b60006040518083038185875af1925050503d806000811462000dc7576040519150601f19603f3d011682016040523d82523d6000602084013e62000dcc565b606091505b505090508062000e385760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e7195949392919062002dbc565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea75750600054600160ff909116105b8062000ec35750303b15801562000ec3575060005460ff166001145b62000f285760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f4c576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff16156200100b5760405162461bcd60e51b8152600401620005539062002a24565b620010218a8a8a8a8a8a8a8a8a8a600062001e15565b620010328963ffffffff16620020a0565b6001600160a01b0385166200112757604080516000808252602082019092526001600160a01b0385169084906040516200106d919062002d9e565b60006040518083038185875af1925050503d8060008114620010ac576040519150601f19603f3d011682016040523d82523d6000602084013e620010b1565b606091505b5050905080620011205760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b5062001445565b60225463ffffffff6101009091048116908716036200115c57620011566001600160a01b0386168484620020e2565b62001445565b600086866040516020016200117392919062002cc4565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013ca57600080600085806020019051810190620011c5919062002df3565b925092509250600085848484604051620011df90620023d6565b620011ed9392919062002bbd565b8190604051809103906000f59050801580156200120e573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001263573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001289919062002a9b565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013b89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001442565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200141a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001440919062002a9b565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200147e95949392919062002dbc565b60405180910390a150505050505050505050565b600080620014a36101008462002d30565b90506000620014b56101008562002e69565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014ef92919062002cc4565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200152290620023d6565b601f1982820381018352601f9091011660408190526200154f908d908d908d908d908d9060200162002ea9565b60408051601f19818403018152908290526200156f929160200162002eea565b60405160208183030381529060405280519060200120604051602001620015c894939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620016145760405162461bcd60e51b8152600401620005539062002a24565b60225463ffffffff6101009091048116908416036200169c5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016f098979695949392919062002bfa565b60405180910390a162001727620009536001602260019054906101000a900463ffffffff1633878734888051906020012062000c53565b6026546001600160a01b03166333d6247d6200174262000a5e565b6040518263ffffffff1660e01b81526004016200176191815260200190565b600060405180830381600087803b1580156200177c57600080fd5b505af115801562001791573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017c75760405162461bcd60e51b8152600401620005539062002c67565b62000a0962002114565b60006200181483838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021c392505050565b9050632afa533160e01b6001600160e01b031982160162001a0d57600080808080808062001846896004818d62002f1d565b81019062001855919062002f49565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018975760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b0386163014620018c25760405162461bcd60e51b8152600401620005539062003001565b8a8514620019395760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620019b9919062002d9e565b6000604051808303816000865af19150503d8060008114620019f8576040519150601f19603f3d011682016040523d82523d6000602084013e620019fd565b606091505b5050505050505050505062001bf2565b6001600160e01b031981166323f2ebc360e21b1462001a835760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a9b8a6004818e62002f1d565b81019062001aaa919062003052565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001aee5760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b038716301462001b195760405162461bcd60e51b8152600401620005539062003001565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001ba2919062002d9e565b6000604051808303816000865af19150503d806000811462001be1576040519150601f19603f3d011682016040523d82523d6000602084013e62001be6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdf9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021ca565b80600162001c7760206002620031db565b62001c839190620031e9565b6021541062001ce85760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cfd919062003203565b909155505060215460005b602081101562001da7578160011660010362001d3d57826001826020811062001d355762001d3562002cee565b015550505050565b6001816020811062001d535762001d5362002cee565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d90919062002d30565b91508062001d9e8162002d47565b91505062001d08565b5062001db26200321e565b505050565b60225460ff161562001ddd5760405162461bcd60e51b8152600401620005539062002a24565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001e268a63ffffffff1662001492565b1562001e7d5760405162461bcd60e51b81526020600482015260306024820152600080516020620047bb83398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ef1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f17919062003234565b90508060000362001f805760405162461bcd60e51b81526020600482015260396024820152600080516020620047bb83398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff8781166101009092041614620020025760405162461bcd60e51b81526020600482015260436024820152600080516020620047bb83398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff166200202057508862002023565b50895b6200204e6200203f848b8b8b8b8b8b8051906020012062000c53565b8e8e63ffffffff168462000b51565b620009c35760405162461bcd60e51b815260206004820152602c6024820152600080516020620047bb83398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020b06101008362002d30565b90506000620020c26101008462002e69565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001db290849063a9059cbb60e01b9060640162001c2e565b60225460ff166200218e5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002221826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022a39092919063ffffffff16565b80519091501562001db2578080602001905181019062002242919062002a9b565b62001db25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c4b848460008585600080866001600160a01b03168587604051620022cd919062002d9e565b60006040518083038185875af1925050503d80600081146200230c576040519150601f19603f3d011682016040523d82523d6000602084013e62002311565b606091505b509150915062002324878383876200232f565b979650505050505050565b60608315620023a35782516000036200239b576001600160a01b0385163b6200239b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c4b565b62000c4b8383815115620023ba5781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200324e565b611557806200326483390190565b6001600160a01b0381168114620023fa57600080fd5b50565b80356200240a81620023e4565b919050565b803563ffffffff811681146200240a57600080fd5b60008083601f8401126200243757600080fd5b50813567ffffffffffffffff8111156200245057600080fd5b6020830191508360208285010111156200246957600080fd5b9250929050565b60008060008060008060a087890312156200248a57600080fd5b86356200249781620023e4565b9550620024a7602088016200240f565b94506040870135620024b981620023e4565b935060608701359250608087013567ffffffffffffffff811115620024dd57600080fd5b620024eb89828a0162002424565b979a9699509497509295939492505050565b600080604083850312156200251157600080fd5b6200251c836200240f565b915060208301356200252e81620023e4565b809150509250929050565b6000602082840312156200254c57600080fd5b81356200255981620023e4565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620025a257620025a262002560565b604052919050565b600082601f830112620025bc57600080fd5b8135602067ffffffffffffffff821115620025db57620025db62002560565b8160051b620025ec82820162002576565b92835284810182019282810190878511156200260757600080fd5b83870192505b8483101562002324578235825291830191908301906200260d565b600080600080608085870312156200263f57600080fd5b84359350602085013567ffffffffffffffff808211156200265f57600080fd5b6200266d88838901620025aa565b94506040870135915080821682146200268557600080fd5b509396929550929360600135925050565b60ff81168114620023fa57600080fd5b600080600080600080600060e0888a031215620026c257600080fd5b8735620026cf8162002696565b9650620026df602089016200240f565b95506040880135620026f181620023e4565b945062002701606089016200240f565b935060808801356200271381620023e4565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200274d576200274d62002560565b50601f01601f191660200190565b600082601f8301126200276d57600080fd5b8135620027846200277e8262002730565b62002576565b8181528460208386010111156200279a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027d857600080fd5b8a3567ffffffffffffffff80821115620027f157600080fd5b620027ff8e838f01620025aa565b9b506200280f60208e016200240f565b9a5060408d0135995060608d013598506200282d60808e016200240f565b97506200283d60a08e01620023fd565b96506200284d60c08e016200240f565b95506200285d60e08e01620023fd565b94506101008d013593506101208d01359150808211156200287d57600080fd5b506200288c8d828e016200275b565b9150509295989b9194979a5092959850565b600080600060608486031215620028b457600080fd5b620028bf846200240f565b92506020840135620028d181620023e4565b91506040840135620028e381620023e4565b809150509250925092565b6000602082840312156200290157600080fd5b5035919050565b600080600080600080600060a0888a0312156200292457600080fd5b6200292f886200240f565b965060208801356200294181620023e4565b9550604088013567ffffffffffffffff808211156200295f57600080fd5b6200296d8b838c0162002424565b909750955060608a01359150808211156200298757600080fd5b50620029968a828b0162002424565b9094509250506080880135620029ac8162002696565b8091505092959891949750929550565b600080600060608486031215620029d257600080fd5b620029dd846200240f565b92506020840135620029ef81620023e4565b9150604084013567ffffffffffffffff81111562002a0c57600080fd5b62002a1a868287016200275b565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b8015158114620023fa57600080fd5b60006020828403121562002aae57600080fd5b8151620025598162002a8c565b60005b8381101562002ad857818101518382015260200162002abe565b8381111562000fdf5750506000910152565b600082601f83011262002afc57600080fd5b815162002b0d6200277e8262002730565b81815284602083860101111562002b2357600080fd5b62000c4b82602083016020870162002abb565b60006020828403121562002b4957600080fd5b815167ffffffffffffffff81111562002b6157600080fd5b62000c4b8482850162002aea565b60006020828403121562002b8257600080fd5b8151620025598162002696565b6000815180845262002ba981602086016020860162002abb565b601f01601f19169290920160200192915050565b60608152600062002bd2606083018662002b8f565b828103602084015262002be6818662002b8f565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002c4e8483018762002b8f565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002d425762002d4262002d04565b500490565b60006001820162002d5c5762002d5c62002d1a565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d959083018462002b8f565b95945050505050565b6000825162002db281846020870162002abb565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002e0957600080fd5b835167ffffffffffffffff8082111562002e2257600080fd5b62002e308783880162002aea565b9450602086015191508082111562002e4757600080fd5b5062002e568682870162002aea565b9250506040840151620028e38162002696565b60008262002e7b5762002e7b62002d04565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002ebf60608301878962002e80565b828103602084015262002ed481868862002e80565b91505060ff831660408301529695505050505050565b6000835162002efe81846020880162002abb565b83519083019062002f1481836020880162002abb565b01949350505050565b6000808585111562002f2e57600080fd5b8386111562002f3c57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f6557600080fd5b873562002f7281620023e4565b9650602088013562002f8481620023e4565b955060408801359450606088013593506080880135620027138162002696565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b0312156200307057600080fd5b88356200307d81620023e4565b975060208901356200308f81620023e4565b965060408901359550606089013594506080890135620030af8162002a8c565b935060a0890135620030c18162002696565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200311f57816000190482111562003103576200310362002d1a565b808516156200311157918102915b93841c9390800290620030e3565b509250929050565b600082620031385750600162000a58565b81620031475750600062000a58565b81600181146200316057600281146200316b576200318b565b600191505062000a58565b60ff8411156200317f576200317f62002d1a565b50506001821b62000a58565b5060208310610133831016604e8410600b8410161715620031b0575081810a62000a58565b620031bc8383620030de565b8060001904821115620031d357620031d362002d1a565b029392505050565b600062002559838362003127565b600082821015620031fe57620031fe62002d1a565b500390565b6000821982111562003219576200321962002d1a565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200324757600080fd5b5051919050565b60208152600062002559602083018462002b8f56fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea264697066735822122070fae8b3daebe7fc894d50296739b7a26e638f37239109230c7dfd552785f2a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220a0c682e41bbc0bcf599110077edba37d297487e713d10fc5634097fd73bd508664736f6c634300080f0033", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", - "0x0000000000000000000000000000000000000000000000000000000000000055": "0xc949254d682d8c9ad5682521675b8f43b102aec4", - "0x0000000000000000000000000000000000000000000000000000000000000087": "0x01", - "0x000000000000000000000000000000000000000000000000000000000000008b": "0xae4bb80be56b819606589de61d5ec3b522eeb032" + "0x0000000000000000000000000000000000000000000000000000000000000022": "0x0100", + "0x0000000000000000000000000000000000000000000000000000000000000026": "0xae4bb80be56b819606589de61d5ec3b522eeb032" }, "contractName": "PolygonZkEVMBridge" }, @@ -24,7 +23,7 @@ "balance": "0", "nonce": "1", "address": "0xae4bb80be56b819606589de61d5ec3b522eeb032", - "bytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b36600461014d565b60006020819052908152604090205481565b6100a061009b36600461014d565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b031633146101485760405162461bcd60e51b815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a75706461746545604482015273786974526f6f743a204f4e4c595f42524944474560601b606482015260840160405180910390fd5b600155565b60006020828403121561015f57600080fd5b503591905056fea2646970667358221220c3d468a91666aebe6b0b1c0d82e7915c70f7879e38ddb928138328ccd71d725164736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610156565b60006020819052908152604090205481565b6100a061009b366004610156565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b031633146101515760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f4e4c595f42524944474500000000000000606482015260840160405180910390fd5b600155565b60006020828403121561016857600080fd5b503591905056fea2646970667358221220f7451da1829b0ecb4873ed6f3f3d32d71e72a79502689acac6a4216f7a54a4a164736f6c634300080f0033", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000002": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988" }, diff --git a/docker/scripts/genesis_docker.json b/docker/scripts/genesis_docker.json index 347838c9c..b57a5321e 100644 --- a/docker/scripts/genesis_docker.json +++ b/docker/scripts/genesis_docker.json @@ -1,16 +1,15 @@ { - "root": "0x89c194fb8d45ee9ff61c731802a4f4d3d6b67c1684f126ff015d824044b153d9", + "root": "0x462220efbd7a2af05b38c145c97518f4150f30e702e772b04feaffe7ef852524", "genesis": [ { "balance": "200000000000000000000000000", "nonce": "1", "address": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988", - "bytecode": "0x608060405260043610620001be5760003560e01c806381b1c17411620000ff578063d02103ca1162000095578063ed6be5c9116200006c578063ed6be5c91462000558578063ee25560b146200056f578063f2fde38b14620005a0578063ff634ed714620005c557600080fd5b8063d02103ca1462000507578063d96a15f71462000529578063dbc16976146200054057600080fd5b80639e34070f11620000d65780639e34070f146200045e578063a08e8a081462000483578063aaa13cc214620004ad578063bab161bf14620004d257600080fd5b806381b1c17414620003e25780638da5cb5b146200041c5780638f611519146200043c57600080fd5b80633ae05047116200017557806346385549116200014c57806346385549146200035b578063647c576c1462000380578063715018a614620003a55780637b6323c114620003bd57600080fd5b80633ae0504714620002f95780633da8168214620003115780633e197043146200033657600080fd5b80630871e97114620001c357806315064c9614620001dc5780632072f6c5146200020d57806322e95f2c14620002255780632dfdf0b51462000263578063318aee3d146200028a575b600080fd5b620001da620001d4366004620025cb565b620005dc565b005b348015620001e957600080fd5b50602254620001f89060ff1681565b60405190151581526020015b60405180910390f35b3480156200021a57600080fd5b50620001da62000a17565b3480156200023257600080fd5b506200024a6200024436600462002658565b62000a50565b6040516001600160a01b03909116815260200162000204565b3480156200027057600080fd5b506200027b60215481565b60405190815260200162000204565b3480156200029757600080fd5b50620002d4620002a936600462002694565b608a6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000204565b3480156200030657600080fd5b506200027b62000aa3565b3480156200031e57600080fd5b50620001f86200033036600462002783565b62000b96565b3480156200034357600080fd5b506200027b6200035536600462002801565b62000c98565b3480156200036857600080fd5b50620001da6200037a36600462002912565b62000d25565b3480156200038d57600080fd5b50620001da6200039f366004620029f9565b62000ebe565b348015620003b257600080fd5b50620001da62001022565b348015620003ca57600080fd5b50620001da620003dc36600462002912565b62001038565b348015620003ef57600080fd5b506200024a6200040136600462002a49565b6089602052600090815260409020546001600160a01b031681565b3480156200042957600080fd5b506055546001600160a01b03166200024a565b3480156200044957600080fd5b50608c546200024a906001600160a01b031681565b3480156200046b57600080fd5b50620001f86200047d36600462002a49565b620014d4565b3480156200049057600080fd5b506200049a600081565b60405160ff909116815260200162000204565b348015620004ba57600080fd5b506200024a620004cc36600462002a63565b62001519565b348015620004df57600080fd5b50608754620004f19063ffffffff1681565b60405163ffffffff909116815260200162000204565b3480156200051457600080fd5b50608b546200024a906001600160a01b031681565b620001da6200053a36600462002b17565b62001630565b3480156200054d57600080fd5b50620001da6200177b565b3480156200056557600080fd5b50620004f1600081565b3480156200057c57600080fd5b506200027b6200058e36600462002a49565b60886020526000908152604090205481565b348015620005ad57600080fd5b50620001da620005bf36600462002694565b620017b2565b348015620005d257600080fd5b506200049a600181565b60225460ff16156200060b5760405162461bcd60e51b8152600401620006029062002b7f565b60405180910390fd5b60875463ffffffff90811690861603620006395760405162461bcd60e51b8152600401620006029062002be7565b60008060606001600160a01b038916620006c057853414620006b65760405162461bcd60e51b815260206004820152602f60248201527f4272696467653a3a6272696467653a20414d4f554e545f444f45535f4e4f545f60448201526e4d415443485f4d53475f56414c554560881b606482015260840162000602565b6000915062000931565b6001600160a01b03808a166000908152608a602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200078e57604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562000755573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200077b919062002c40565b506020810151815190945092506200092f565b8415620007a357620007a38a88888862001831565b620007ba6001600160a01b038b1633308a62001c35565b899350608760009054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000811573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200083b919081019062002cdb565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200087a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620008a4919081019062002cdb565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620008e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000909919062002d14565b6040516020016200091d9392919062002d62565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200097398979695949392919062002d9f565b60405180910390a16200099e62000998600084868c8c8c888051906020012062000c98565b62001ca2565b608b546001600160a01b03166333d6247d620009b962000aa3565b6040518263ffffffff1660e01b8152600401620009d891815260200190565b600060405180830381600087803b158015620009f357600080fd5b505af115801562000a08573d6000803e3d6000fd5b50505050505050505050505050565b608c546001600160a01b0316331462000a445760405162461bcd60e51b8152600401620006029062002e0c565b62000a4e62001df3565b565b600060896000848460405160200162000a6b92919062002e7d565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b8d578260011660010362000b0e576001816020811062000ada5762000ada62002ea7565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000b3b565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b4860028462002ee9565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b849062002f00565b91505062000aae565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c89578160011660010362000c135786818151811062000bd15762000bd162002ea7565b60200260200101518360405160200162000bf5929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c65565b8287828151811062000c295762000c2962002ea7565b602002602001015160405160200162000c4c929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c7260028362002ee9565b91508062000c808162002f00565b91505062000ba6565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d4b5760405162461bcd60e51b8152600401620006029062002b7f565b62000d618a8a8a8a8a8a8a8a8a8a600162001e51565b62000d728963ffffffff16620020d8565b6000836001600160a01b03168387898560405160240162000d969392919062002f1c565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000dcd919062002f57565b60006040518083038185875af1925050503d806000811462000e0c576040519150601f19603f3d011682016040523d82523d6000602084013e62000e11565b606091505b505090508062000e705760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a636c61696d4d6573736167653a204d4553534147455f46416044820152631253115160e21b606482015260840162000602565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000ea995949392919062002f75565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000edf5750600054600160ff909116105b8062000efb5750303b15801562000efb575060005460ff166001145b62000f605760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000602565b6000805460ff19166001179055801562000f84576000805461ff0019166101001790555b6087805463ffffffff861663ffffffff19909116179055608b80546001600160a01b038086166001600160a01b031992831617909255608c80549285169290911691909117905562000fd56200211a565b80156200101c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6200102c62002192565b62000a4e6000620021ee565b60225460ff16156200105e5760405162461bcd60e51b8152600401620006029062002b7f565b620010748a8a8a8a8a8a8a8a8a8a600062001e51565b620010858963ffffffff16620020d8565b6001600160a01b0385166200116e57604080516000808252602082019092526001600160a01b038516908490604051620010c0919062002f57565b60006040518083038185875af1925050503d8060008114620010ff576040519150601f19603f3d011682016040523d82523d6000602084013e62001104565b606091505b5050905080620011675760405162461bcd60e51b815260206004820152602760248201527f4272696467653a3a636c61696d41737365743a204554485f5452414e5346455260448201526617d1905253115160ca1b606482015260840162000602565b5062001487565b60875463ffffffff908116908716036200119e57620011986001600160a01b038616848462002240565b62001487565b60008686604051602001620011b592919062002e7d565b60408051601f198184030181529181528151602092830120600081815260899093529120549091506001600160a01b0316806200140c5760008060008580602001905181019062001207919062002fac565b925092509250600085848484604051620012219062002534565b6200122f9392919062002d62565b8190604051809103906000f590508015801562001250573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af1158015620012a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012cb919062002c40565b50806089600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b0316815250608a6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013fa9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001484565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200145c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001482919062002c40565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838987878686604051620014c095949392919062002f75565b60405180910390a150505050505050505050565b600080620014e56101008462002ee9565b90506000620014f76101008562003022565b60009283526088602052604090922054600190921b9182169091149392505050565b60008088886040516020016200153192919062002e7d565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620015649062002534565b601f1982820381018352601f90910116604081905262001591908d908d908d908d908d9060200162003062565b60408051601f1981840301815290829052620015b19291602001620030a3565b604051602081830303815290604052805190602001206040516020016200160a94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620016565760405162461bcd60e51b8152600401620006029062002b7f565b60875463ffffffff90811690841603620016845760405162461bcd60e51b8152600401620006029062002be7565b6087546021546040517f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b92620016d19260019263ffffffff9092169133918991899134918a919062002d9f565b60405180910390a162001708620009986001608760009054906101000a900463ffffffff1633878734888051906020012062000c98565b608b546001600160a01b03166333d6247d6200172362000aa3565b6040518263ffffffff1660e01b81526004016200174291815260200190565b600060405180830381600087803b1580156200175d57600080fd5b505af115801562001772573d6000803e3d6000fd5b50505050505050565b608c546001600160a01b03163314620017a85760405162461bcd60e51b8152600401620006029062002e0c565b62000a4e62002272565b620017bc62002192565b6001600160a01b038116620018235760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000602565b6200182e81620021ee565b50565b60006200187483838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200232192505050565b9050632afa533160e01b6001600160e01b031982160162001a5d576000808080808080620018a6896004818d620030d6565b810190620018b5919062003102565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018f75760405162461bcd60e51b815260040162000602906200315d565b6001600160a01b0386163014620019225760405162461bcd60e51b81526004016200060290620031ad565b8a8514620019895760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7065726d69743a205045524d49545f414d4f554e545f4460448201526c09e8aa6be9c9ea8be9a82a8869609b1b606482015260840162000602565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162001a09919062002f57565b6000604051808303816000865af19150503d806000811462001a48576040519150601f19603f3d011682016040523d82523d6000602084013e62001a4d565b606091505b5050505050505050505062001c2e565b6001600160e01b031981166323f2ebc360e21b1462001abf5760405162461bcd60e51b815260206004820152601f60248201527f4272696467653a3a5f7065726d69743a204e4f545f56414c49445f43414c4c00604482015260640162000602565b60008080808080808062001ad78a6004818e620030d6565b81019062001ae69190620031f2565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001b2a5760405162461bcd60e51b815260040162000602906200315d565b6001600160a01b038716301462001b555760405162461bcd60e51b81526004016200060290620031ad565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001bde919062002f57565b6000604051808303816000865af19150503d806000811462001c1d576040519150601f19603f3d011682016040523d82523d6000602084013e62001c22565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526200101c9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262002328565b80600162001cb3602060026200337b565b62001cbf919062003389565b6021541062001d245760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000602565b60016021600082825462001d399190620033a3565b909155505060215460005b602081101562001de3578160011660010362001d7957826001826020811062001d715762001d7162002ea7565b015550505050565b6001816020811062001d8f5762001d8f62002ea7565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001dcc919062002ee9565b91508062001dda8162002f00565b91505062001d44565b5062001dee620033be565b505050565b60225460ff161562001e195760405162461bcd60e51b8152600401620006029062002b7f565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001e628a63ffffffff16620014d4565b1562001ebd5760405162461bcd60e51b8152602060048201526024808201527f4272696467653a3a5f7665726966794c6561663a20414c52454144595f434c416044820152631253515160e21b606482015260840162000602565b608b546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001f31573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f579190620033d4565b90508060000362001fc15760405162461bcd60e51b815260206004820152602d60248201527f4272696467653a3a5f7665726966794c6561663a20474c4f42414c5f4558495460448201526c17d493d3d517d2539590531251609a1b606482015260840162000602565b60875463ffffffff878116911614620020435760405162461bcd60e51b815260206004820152603760248201527f4272696467653a3a5f7665726966794c6561663a2044455354494e4154494f4e60448201527f5f4e4554574f524b5f444f45535f4e4f545f4d41544348000000000000000000606482015260840162000602565b60875460009063ffffffff166200205c5750886200205f565b50895b6200208a6200207b848b8b8b8b8b8b8051906020012062000c98565b8e8e63ffffffff168462000b96565b62000a085760405162461bcd60e51b815260206004820181905260248201527f4272696467653a3a5f7665726966794c6561663a20534d545f494e56414c4944604482015260640162000602565b6000620020e86101008362002ee9565b90506000620020fa6101008462003022565b6000928352608860205260409092208054600190931b9092179091555050565b600054610100900460ff16620021875760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000602565b62000a4e33620021ee565b6055546001600160a01b0316331462000a4e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000602565b605580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001dee90849063a9059cbb60e01b9060640162001c6a565b60225460ff16620022ec5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000602565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b60006200237f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620024019092919063ffffffff16565b80519091501562001dee5780806020019051810190620023a0919062002c40565b62001dee5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000602565b606062000c90848460008585600080866001600160a01b031685876040516200242b919062002f57565b60006040518083038185875af1925050503d80600081146200246a576040519150601f19603f3d011682016040523d82523d6000602084013e6200246f565b606091505b509150915062002482878383876200248d565b979650505050505050565b6060831562002501578251600003620024f9576001600160a01b0385163b620024f95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000602565b508162000c90565b62000c908383815115620025185781518083602001fd5b8060405162461bcd60e51b8152600401620006029190620033ee565b611557806200340483390190565b6001600160a01b03811681146200182e57600080fd5b8035620025658162002542565b919050565b803563ffffffff811681146200256557600080fd5b60008083601f8401126200259257600080fd5b50813567ffffffffffffffff811115620025ab57600080fd5b602083019150836020828501011115620025c457600080fd5b9250929050565b60008060008060008060a08789031215620025e557600080fd5b8635620025f28162002542565b955062002602602088016200256a565b94506040870135620026148162002542565b935060608701359250608087013567ffffffffffffffff8111156200263857600080fd5b6200264689828a016200257f565b979a9699509497509295939492505050565b600080604083850312156200266c57600080fd5b62002677836200256a565b91506020830135620026898162002542565b809150509250929050565b600060208284031215620026a757600080fd5b8135620026b48162002542565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620026fd57620026fd620026bb565b604052919050565b600082601f8301126200271757600080fd5b8135602067ffffffffffffffff821115620027365762002736620026bb565b8160051b62002747828201620026d1565b92835284810182019282810190878511156200276257600080fd5b83870192505b84831015620024825782358252918301919083019062002768565b600080600080608085870312156200279a57600080fd5b84359350602085013567ffffffffffffffff80821115620027ba57600080fd5b620027c88883890162002705565b9450604087013591508082168214620027e057600080fd5b509396929550929360600135925050565b60ff811681146200182e57600080fd5b600080600080600080600060e0888a0312156200281d57600080fd5b87356200282a81620027f1565b96506200283a602089016200256a565b955060408801356200284c8162002542565b94506200285c606089016200256a565b935060808801356200286e8162002542565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff821115620028a857620028a8620026bb565b50601f01601f191660200190565b600082601f830112620028c857600080fd5b8135620028df620028d9826200288b565b620026d1565b818152846020838601011115620028f557600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200293357600080fd5b8a3567ffffffffffffffff808211156200294c57600080fd5b6200295a8e838f0162002705565b9b506200296a60208e016200256a565b9a5060408d0135995060608d013598506200298860808e016200256a565b97506200299860a08e0162002558565b9650620029a860c08e016200256a565b9550620029b860e08e0162002558565b94506101008d013593506101208d0135915080821115620029d857600080fd5b50620029e78d828e01620028b6565b9150509295989b9194979a5092959850565b60008060006060848603121562002a0f57600080fd5b62002a1a846200256a565b9250602084013562002a2c8162002542565b9150604084013562002a3e8162002542565b809150509250925092565b60006020828403121562002a5c57600080fd5b5035919050565b600080600080600080600060a0888a03121562002a7f57600080fd5b62002a8a886200256a565b9650602088013562002a9c8162002542565b9550604088013567ffffffffffffffff8082111562002aba57600080fd5b62002ac88b838c016200257f565b909750955060608a013591508082111562002ae257600080fd5b5062002af18a828b016200257f565b909450925050608088013562002b0781620027f1565b8091505092959891949750929550565b60008060006060848603121562002b2d57600080fd5b62002b38846200256a565b9250602084013562002b4a8162002542565b9150604084013567ffffffffffffffff81111562002b6757600080fd5b62002b7586828701620028b6565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b6020808252602a908201527f4272696467653a3a6272696467653a2044455354494e4154494f4e5f43414e546040820152692fa122afa4aa29a2a62360b11b606082015260800190565b80151581146200182e57600080fd5b60006020828403121562002c5357600080fd5b8151620026b48162002c31565b60005b8381101562002c7d57818101518382015260200162002c63565b838111156200101c5750506000910152565b600082601f83011262002ca157600080fd5b815162002cb2620028d9826200288b565b81815284602083860101111562002cc857600080fd5b62000c9082602083016020870162002c60565b60006020828403121562002cee57600080fd5b815167ffffffffffffffff81111562002d0657600080fd5b62000c908482850162002c8f565b60006020828403121562002d2757600080fd5b8151620026b481620027f1565b6000815180845262002d4e81602086016020860162002c60565b601f01601f19169290920160200192915050565b60608152600062002d77606083018662002d34565b828103602084015262002d8b818662002d34565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002df38483018762002d34565b925080851660e085015250509998505050505050505050565b6020808252604b908201527f50726f6f664f66456666696369656e63793a3a6f6e6c7950726f6f664f66456660408201527f66696369656e63793a206f6e6c792050726f6f66206f6620456666696369656e60608201526a18de4818dbdb9d1c9858dd60aa1b608082015260a00190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002efb5762002efb62002ebd565b500490565b60006001820162002f155762002f1562002ed3565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002f4e9083018462002d34565b95945050505050565b6000825162002f6b81846020870162002c60565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002fc257600080fd5b835167ffffffffffffffff8082111562002fdb57600080fd5b62002fe98783880162002c8f565b945060208601519150808211156200300057600080fd5b506200300f8682870162002c8f565b925050604084015162002a3e81620027f1565b60008262003034576200303462002ebd565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006200307860608301878962003039565b82810360208401526200308d81868862003039565b91505060ff831660408301529695505050505050565b60008351620030b781846020880162002c60565b835190830190620030cd81836020880162002c60565b01949350505050565b60008085851115620030e757600080fd5b83861115620030f557600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200311e57600080fd5b87356200312b8162002542565b965060208801356200313d8162002542565b9550604088013594506060880135935060808801356200286e81620027f1565b60208082526030908201527f4272696467653a3a5f7065726d69743a205045524d49545f4f574e45525f4d5560408201526f29aa2fa122afaa2422afa9a2a72222a960811b606082015260800190565b60208082526025908201527f4272696467653a3a5f7065726d69743a205350454e4445525f4d5553545f42456040820152645f5448495360d81b606082015260800190565b600080600080600080600080610100898b0312156200321057600080fd5b88356200321d8162002542565b975060208901356200322f8162002542565b9650604089013595506060890135945060808901356200324f8162002c31565b935060a08901356200326181620027f1565b979a969950949793969295929450505060c08201359160e0013590565b600181815b80851115620032bf578160001904821115620032a357620032a362002ed3565b80851615620032b157918102915b93841c939080029062003283565b509250929050565b600082620032d85750600162000a9d565b81620032e75750600062000a9d565b81600181146200330057600281146200330b576200332b565b600191505062000a9d565b60ff8411156200331f576200331f62002ed3565b50506001821b62000a9d565b5060208310610133831016604e8410600b841016171562003350575081810a62000a9d565b6200335c83836200327e565b806000190482111562003373576200337362002ed3565b029392505050565b6000620026b48383620032c7565b6000828210156200339e576200339e62002ed3565b500390565b60008219821115620033b957620033b962002ed3565b500190565b634e487b7160e01b600052600160045260246000fd5b600060208284031215620033e757600080fd5b5051919050565b602081526000620026b4602083018462002d3456fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea26469706673582212207b14f80bfcbda3f7be499de7c67ec81639549928b9cee16384da9f2fb8c22dce64736f6c634300080f0033a2646970667358221220fd3826b18742b99a0bc2739447acf94a8af9e9299c7241c343cafcf744385b5964736f6c634300080f0033", + "bytecode": "0x608060405260043610620001675760003560e01c806381b1c17411620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b806381b1c17414620003735780638f61151914620003ad5780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b80633ae05047116200011e5780633ae0504714620002a25780633da8168214620002ba5780633e19704314620002df578063463855491462000304578063647c576c14620003295780637b6323c1146200034e57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002470565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009d2565b348015620001db57600080fd5b50620001f3620001ed366004620024fd565b62000a0b565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002539565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b506200022462000a5e565b348015620002c757600080fd5b50620001a1620002d936600462002628565b62000b51565b348015620002ec57600080fd5b5062000224620002fe366004620026a6565b62000c53565b3480156200031157600080fd5b506200018362000323366004620027b7565b62000ce0565b3480156200033657600080fd5b5062000183620003483660046200289e565b62000e86565b3480156200035b57600080fd5b50620001836200036d366004620027b7565b62000fe5565b3480156200038057600080fd5b50620001f362000392366004620028ee565b6024602052600090815260409020546001600160a01b031681565b348015620003ba57600080fd5b50602754620001f3906001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028ee565b62001492565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002908565b620014d7565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620029bc565b620015ee565b348015620004c357600080fd5b50620001836200179a565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028ee565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a24565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008ec565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074957604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562000710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000736919062002a9b565b50602081015181519094509250620008ea565b84156200075e576200075e8a888888620017d1565b620007756001600160a01b038b1633308a62001bf9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f6919081019062002b36565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000835573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085f919081019062002b36565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c4919062002b6f565b604051602001620008d89392919062002bbd565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092e98979695949392919062002bfa565b60405180910390a16200095962000953600084868c8c8c888051906020012062000c53565b62001c66565b6026546001600160a01b03166333d6247d6200097462000a5e565b6040518263ffffffff1660e01b81526004016200099391815260200190565b600060405180830381600087803b158015620009ae57600080fd5b505af1158015620009c3573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ff5760405162461bcd60e51b8152600401620005539062002c67565b62000a0962001db7565b565b600060246000848460405160200162000a2692919062002cc4565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b48578260011660010362000ac9576001816020811062000a955762000a9562002cee565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af6565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0360028462002d30565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3f9062002d47565b91505062000a69565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c44578160011660010362000bce5786818151811062000b8c5762000b8c62002cee565b60200260200101518360405160200162000bb0929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c20565b8287828151811062000be45762000be462002cee565b602002602001015160405160200162000c07929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2d60028362002d30565b91508062000c3b8162002d47565b91505062000b61565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d065760405162461bcd60e51b8152600401620005539062002a24565b62000d1c8a8a8a8a8a8a8a8a8a8a600162001e15565b62000d2d8963ffffffff16620020a0565b6000836001600160a01b03168387898560405160240162000d519392919062002d63565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d88919062002d9e565b60006040518083038185875af1925050503d806000811462000dc7576040519150601f19603f3d011682016040523d82523d6000602084013e62000dcc565b606091505b505090508062000e385760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e7195949392919062002dbc565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea75750600054600160ff909116105b8062000ec35750303b15801562000ec3575060005460ff166001145b62000f285760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f4c576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff16156200100b5760405162461bcd60e51b8152600401620005539062002a24565b620010218a8a8a8a8a8a8a8a8a8a600062001e15565b620010328963ffffffff16620020a0565b6001600160a01b0385166200112757604080516000808252602082019092526001600160a01b0385169084906040516200106d919062002d9e565b60006040518083038185875af1925050503d8060008114620010ac576040519150601f19603f3d011682016040523d82523d6000602084013e620010b1565b606091505b5050905080620011205760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b5062001445565b60225463ffffffff6101009091048116908716036200115c57620011566001600160a01b0386168484620020e2565b62001445565b600086866040516020016200117392919062002cc4565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013ca57600080600085806020019051810190620011c5919062002df3565b925092509250600085848484604051620011df90620023d6565b620011ed9392919062002bbd565b8190604051809103906000f59050801580156200120e573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001263573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001289919062002a9b565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013b89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001442565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200141a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001440919062002a9b565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200147e95949392919062002dbc565b60405180910390a150505050505050505050565b600080620014a36101008462002d30565b90506000620014b56101008562002e69565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014ef92919062002cc4565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200152290620023d6565b601f1982820381018352601f9091011660408190526200154f908d908d908d908d908d9060200162002ea9565b60408051601f19818403018152908290526200156f929160200162002eea565b60405160208183030381529060405280519060200120604051602001620015c894939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620016145760405162461bcd60e51b8152600401620005539062002a24565b60225463ffffffff6101009091048116908416036200169c5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016f098979695949392919062002bfa565b60405180910390a162001727620009536001602260019054906101000a900463ffffffff1633878734888051906020012062000c53565b6026546001600160a01b03166333d6247d6200174262000a5e565b6040518263ffffffff1660e01b81526004016200176191815260200190565b600060405180830381600087803b1580156200177c57600080fd5b505af115801562001791573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017c75760405162461bcd60e51b8152600401620005539062002c67565b62000a0962002114565b60006200181483838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021c392505050565b9050632afa533160e01b6001600160e01b031982160162001a0d57600080808080808062001846896004818d62002f1d565b81019062001855919062002f49565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018975760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b0386163014620018c25760405162461bcd60e51b8152600401620005539062003001565b8a8514620019395760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620019b9919062002d9e565b6000604051808303816000865af19150503d8060008114620019f8576040519150601f19603f3d011682016040523d82523d6000602084013e620019fd565b606091505b5050505050505050505062001bf2565b6001600160e01b031981166323f2ebc360e21b1462001a835760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a9b8a6004818e62002f1d565b81019062001aaa919062003052565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001aee5760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b038716301462001b195760405162461bcd60e51b8152600401620005539062003001565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001ba2919062002d9e565b6000604051808303816000865af19150503d806000811462001be1576040519150601f19603f3d011682016040523d82523d6000602084013e62001be6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdf9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021ca565b80600162001c7760206002620031db565b62001c839190620031e9565b6021541062001ce85760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cfd919062003203565b909155505060215460005b602081101562001da7578160011660010362001d3d57826001826020811062001d355762001d3562002cee565b015550505050565b6001816020811062001d535762001d5362002cee565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d90919062002d30565b91508062001d9e8162002d47565b91505062001d08565b5062001db26200321e565b505050565b60225460ff161562001ddd5760405162461bcd60e51b8152600401620005539062002a24565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001e268a63ffffffff1662001492565b1562001e7d5760405162461bcd60e51b81526020600482015260306024820152600080516020620047bb83398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ef1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f17919062003234565b90508060000362001f805760405162461bcd60e51b81526020600482015260396024820152600080516020620047bb83398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff8781166101009092041614620020025760405162461bcd60e51b81526020600482015260436024820152600080516020620047bb83398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff166200202057508862002023565b50895b6200204e6200203f848b8b8b8b8b8b8051906020012062000c53565b8e8e63ffffffff168462000b51565b620009c35760405162461bcd60e51b815260206004820152602c6024820152600080516020620047bb83398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020b06101008362002d30565b90506000620020c26101008462002e69565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001db290849063a9059cbb60e01b9060640162001c2e565b60225460ff166200218e5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002221826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022a39092919063ffffffff16565b80519091501562001db2578080602001905181019062002242919062002a9b565b62001db25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c4b848460008585600080866001600160a01b03168587604051620022cd919062002d9e565b60006040518083038185875af1925050503d80600081146200230c576040519150601f19603f3d011682016040523d82523d6000602084013e62002311565b606091505b509150915062002324878383876200232f565b979650505050505050565b60608315620023a35782516000036200239b576001600160a01b0385163b6200239b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c4b565b62000c4b8383815115620023ba5781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200324e565b611557806200326483390190565b6001600160a01b0381168114620023fa57600080fd5b50565b80356200240a81620023e4565b919050565b803563ffffffff811681146200240a57600080fd5b60008083601f8401126200243757600080fd5b50813567ffffffffffffffff8111156200245057600080fd5b6020830191508360208285010111156200246957600080fd5b9250929050565b60008060008060008060a087890312156200248a57600080fd5b86356200249781620023e4565b9550620024a7602088016200240f565b94506040870135620024b981620023e4565b935060608701359250608087013567ffffffffffffffff811115620024dd57600080fd5b620024eb89828a0162002424565b979a9699509497509295939492505050565b600080604083850312156200251157600080fd5b6200251c836200240f565b915060208301356200252e81620023e4565b809150509250929050565b6000602082840312156200254c57600080fd5b81356200255981620023e4565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620025a257620025a262002560565b604052919050565b600082601f830112620025bc57600080fd5b8135602067ffffffffffffffff821115620025db57620025db62002560565b8160051b620025ec82820162002576565b92835284810182019282810190878511156200260757600080fd5b83870192505b8483101562002324578235825291830191908301906200260d565b600080600080608085870312156200263f57600080fd5b84359350602085013567ffffffffffffffff808211156200265f57600080fd5b6200266d88838901620025aa565b94506040870135915080821682146200268557600080fd5b509396929550929360600135925050565b60ff81168114620023fa57600080fd5b600080600080600080600060e0888a031215620026c257600080fd5b8735620026cf8162002696565b9650620026df602089016200240f565b95506040880135620026f181620023e4565b945062002701606089016200240f565b935060808801356200271381620023e4565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200274d576200274d62002560565b50601f01601f191660200190565b600082601f8301126200276d57600080fd5b8135620027846200277e8262002730565b62002576565b8181528460208386010111156200279a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027d857600080fd5b8a3567ffffffffffffffff80821115620027f157600080fd5b620027ff8e838f01620025aa565b9b506200280f60208e016200240f565b9a5060408d0135995060608d013598506200282d60808e016200240f565b97506200283d60a08e01620023fd565b96506200284d60c08e016200240f565b95506200285d60e08e01620023fd565b94506101008d013593506101208d01359150808211156200287d57600080fd5b506200288c8d828e016200275b565b9150509295989b9194979a5092959850565b600080600060608486031215620028b457600080fd5b620028bf846200240f565b92506020840135620028d181620023e4565b91506040840135620028e381620023e4565b809150509250925092565b6000602082840312156200290157600080fd5b5035919050565b600080600080600080600060a0888a0312156200292457600080fd5b6200292f886200240f565b965060208801356200294181620023e4565b9550604088013567ffffffffffffffff808211156200295f57600080fd5b6200296d8b838c0162002424565b909750955060608a01359150808211156200298757600080fd5b50620029968a828b0162002424565b9094509250506080880135620029ac8162002696565b8091505092959891949750929550565b600080600060608486031215620029d257600080fd5b620029dd846200240f565b92506020840135620029ef81620023e4565b9150604084013567ffffffffffffffff81111562002a0c57600080fd5b62002a1a868287016200275b565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b8015158114620023fa57600080fd5b60006020828403121562002aae57600080fd5b8151620025598162002a8c565b60005b8381101562002ad857818101518382015260200162002abe565b8381111562000fdf5750506000910152565b600082601f83011262002afc57600080fd5b815162002b0d6200277e8262002730565b81815284602083860101111562002b2357600080fd5b62000c4b82602083016020870162002abb565b60006020828403121562002b4957600080fd5b815167ffffffffffffffff81111562002b6157600080fd5b62000c4b8482850162002aea565b60006020828403121562002b8257600080fd5b8151620025598162002696565b6000815180845262002ba981602086016020860162002abb565b601f01601f19169290920160200192915050565b60608152600062002bd2606083018662002b8f565b828103602084015262002be6818662002b8f565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002c4e8483018762002b8f565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002d425762002d4262002d04565b500490565b60006001820162002d5c5762002d5c62002d1a565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d959083018462002b8f565b95945050505050565b6000825162002db281846020870162002abb565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002e0957600080fd5b835167ffffffffffffffff8082111562002e2257600080fd5b62002e308783880162002aea565b9450602086015191508082111562002e4757600080fd5b5062002e568682870162002aea565b9250506040840151620028e38162002696565b60008262002e7b5762002e7b62002d04565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002ebf60608301878962002e80565b828103602084015262002ed481868862002e80565b91505060ff831660408301529695505050505050565b6000835162002efe81846020880162002abb565b83519083019062002f1481836020880162002abb565b01949350505050565b6000808585111562002f2e57600080fd5b8386111562002f3c57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f6557600080fd5b873562002f7281620023e4565b9650602088013562002f8481620023e4565b955060408801359450606088013593506080880135620027138162002696565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b0312156200307057600080fd5b88356200307d81620023e4565b975060208901356200308f81620023e4565b965060408901359550606089013594506080890135620030af8162002a8c565b935060a0890135620030c18162002696565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200311f57816000190482111562003103576200310362002d1a565b808516156200311157918102915b93841c9390800290620030e3565b509250929050565b600082620031385750600162000a58565b81620031475750600062000a58565b81600181146200316057600281146200316b576200318b565b600191505062000a58565b60ff8411156200317f576200317f62002d1a565b50506001821b62000a58565b5060208310610133831016604e8410600b8410161715620031b0575081810a62000a58565b620031bc8383620030de565b8060001904821115620031d357620031d362002d1a565b029392505050565b600062002559838362003127565b600082821015620031fe57620031fe62002d1a565b500390565b6000821982111562003219576200321962002d1a565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200324757600080fd5b5051919050565b60208152600062002559602083018462002b8f56fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea264697066735822122070fae8b3daebe7fc894d50296739b7a26e638f37239109230c7dfd552785f2a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220a0c682e41bbc0bcf599110077edba37d297487e713d10fc5634097fd73bd508664736f6c634300080f0033", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", - "0x0000000000000000000000000000000000000000000000000000000000000055": "0xc949254d682d8c9ad5682521675b8f43b102aec4", - "0x0000000000000000000000000000000000000000000000000000000000000087": "0x01", - "0x000000000000000000000000000000000000000000000000000000000000008b": "0xae4bb80be56b819606589de61d5ec3b522eeb032" + "0x0000000000000000000000000000000000000000000000000000000000000022": "0x0100", + "0x0000000000000000000000000000000000000000000000000000000000000026": "0xae4bb80be56b819606589de61d5ec3b522eeb032" }, "contractName": "PolygonZkEVMBridge" }, @@ -30,7 +29,7 @@ "balance": "0", "nonce": "1", "address": "0xae4bb80be56b819606589de61d5ec3b522eeb032", - "bytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b36600461014d565b60006020819052908152604090205481565b6100a061009b36600461014d565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b031633146101485760405162461bcd60e51b815260206004820152603460248201527f476c6f62616c45786974526f6f744d616e616765724c323a3a75706461746545604482015273786974526f6f743a204f4e4c595f42524944474560601b606482015260840160405180910390fd5b600155565b60006020828403121561015f57600080fd5b503591905056fea2646970667358221220c3d468a91666aebe6b0b1c0d82e7915c70f7879e38ddb928138328ccd71d725164736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610156565b60006020819052908152604090205481565b6100a061009b366004610156565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b031633146101515760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f4e4c595f42524944474500000000000000606482015260840160405180910390fd5b600155565b60006020828403121561016857600080fd5b503591905056fea2646970667358221220f7451da1829b0ecb4873ed6f3f3d32d71e72a79502689acac6a4216f7a54a4a164736f6c634300080f0033", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000002": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988" }, diff --git a/test/contracts/timelockUpgradeTest.js b/test/contracts/timelockUpgradeTest.js index f4f3b875a..ab995064d 100644 --- a/test/contracts/timelockUpgradeTest.js +++ b/test/contracts/timelockUpgradeTest.js @@ -1,12 +1,33 @@ const { expect } = require('chai'); const { ethers, upgrades } = require('hardhat'); +// OZ test functions +function genOperation(target, value, data, predecessor, salt) { + const id = ethers.utils.solidityKeccak256([ + 'address', + 'uint256', + 'bytes', + 'uint256', + 'bytes32', + ], [ + target, + value, + data, + predecessor, + salt, + ]); + return { + id, target, value, data, predecessor, salt, + }; +} + describe('Polygon ZK-EVM', () => { let deployer; let trustedAggregator; let trustedSequencer; let admin; + let timelockContract; let verifierContract; let polygonZkEVMBridgeContract; let polygonZkEVMContract; @@ -27,6 +48,7 @@ describe('Polygon ZK-EVM', () => { const pendingStateTimeoutDefault = 10; const trustedAggregatorTimeoutDefault = 10; + const minDelay = 60 * 60; // 1 hout beforeEach('Deploy contract', async () => { // load signers [deployer, trustedAggregator, trustedSequencer, admin] = await ethers.getSigners(); @@ -82,6 +104,14 @@ describe('Polygon ZK-EVM', () => { // fund sequencer address with Matic tokens await maticTokenContract.transfer(trustedSequencer.address, ethers.utils.parseEther('100')); + + const proposers = [deployer.address]; + const executors = [deployer.address]; + const adminAddress = deployer.address; + + const timelockContractFactory = await ethers.getContractFactory('PolygonZkEVMTimelock'); + timelockContract = await timelockContractFactory.deploy(minDelay, proposers, executors, adminAddress, polygonZkEVMContract.address); + await timelockContract.deployed(); }); it('Should upgrade brdige correctly', async () => { @@ -98,7 +128,7 @@ describe('Polygon ZK-EVM', () => { await expect(await polygonZkEVMBridgeContractV2.maxEtherBridge()).to.be.equal(0); }); - it('Should upgrade brdige correctly', async () => { + it('Should transferOwnership of the proxyAdmin to the timelock', async () => { // Upgrade the contract const polygonZkEVMBridgeFactoryV2 = await ethers.getContractFactory('PolygonZkEVMBridgeMock'); const polygonZkEVMBridgeContractV2 = polygonZkEVMBridgeFactoryV2.attach(polygonZkEVMBridgeContract.address); @@ -106,7 +136,125 @@ describe('Polygon ZK-EVM', () => { // Check that is the v0 contract await expect(polygonZkEVMBridgeContractV2.maxEtherBridge()).to.be.reverted; + // Transfer ownership to timelock + await upgrades.admin.transferProxyAdminOwnership(timelockContract.address); + + // Can't upgrade the contract since it does not have the ownership + await expect(upgrades.upgradeProxy(polygonZkEVMBridgeContract.address, polygonZkEVMBridgeFactoryV2)) + .to.be.reverted; + + const implBridgeV2Address = await upgrades.prepareUpgrade(polygonZkEVMBridgeContract.address, polygonZkEVMBridgeFactoryV2); + const proxyAdmin = await upgrades.admin.getInstance(); + + // Use timelock + const operation = genOperation( + proxyAdmin.address, + 0, + proxyAdmin.interface.encodeFunctionData( + 'upgrade', + [polygonZkEVMBridgeContract.address, + implBridgeV2Address], + ), + ethers.constants.HashZero, + ethers.constants.HashZero, + ); + + // Schedule operation + await timelockContract.schedule( + operation.target, + operation.value, + operation.data, + operation.predecessor, + operation.salt, + minDelay, + ); + + // Can't upgrade because the timeout didint expire yet + await expect(timelockContract.execute( + operation.target, + operation.value, + operation.data, + operation.predecessor, + operation.salt, + )).to.be.revertedWith('TimelockController: operation is not ready'); + + // Check that is the v0 contract + await expect(polygonZkEVMBridgeContractV2.maxEtherBridge()).to.be.reverted; + + await ethers.provider.send('evm_increaseTime', [minDelay]); + await timelockContract.execute( + operation.target, + operation.value, + operation.data, + operation.predecessor, + operation.salt, + ); + + await expect(await polygonZkEVMBridgeContractV2.maxEtherBridge()).to.be.equal(0); + }); + + it('Should check thet in emergency state the minDelay is 0', async () => { // Upgrade the contract - await upgrades.upgradeProxy(polygonZkEVMBridgeContract.address, polygonZkEVMBridgeFactoryV2); + const polygonZkEVMBridgeFactoryV2 = await ethers.getContractFactory('PolygonZkEVMBridgeMock'); + const polygonZkEVMBridgeContractV2 = polygonZkEVMBridgeFactoryV2.attach(polygonZkEVMBridgeContract.address); + + // Check that is the v0 contract + await expect(polygonZkEVMBridgeContractV2.maxEtherBridge()).to.be.reverted; + + // Transfer ownership to timelock + await upgrades.admin.transferProxyAdminOwnership(timelockContract.address); + + // Can't upgrade the contract since it does not have the ownership + await expect(upgrades.upgradeProxy(polygonZkEVMBridgeContract.address, polygonZkEVMBridgeFactoryV2)) + .to.be.reverted; + + const implBridgeV2Address = await upgrades.prepareUpgrade(polygonZkEVMBridgeContract.address, polygonZkEVMBridgeFactoryV2); + const proxyAdmin = await upgrades.admin.getInstance(); + + // Use timelock + const operation = genOperation( + proxyAdmin.address, + 0, + proxyAdmin.interface.encodeFunctionData( + 'upgrade', + [polygonZkEVMBridgeContract.address, + implBridgeV2Address], + ), + ethers.constants.HashZero, + ethers.constants.HashZero, + ); + + // Schedule operation + await timelockContract.schedule( + operation.target, + operation.value, + operation.data, + operation.predecessor, + operation.salt, + minDelay, + ); + + // Can't upgrade because the timeout didint expire yet + await expect(timelockContract.execute( + operation.target, + operation.value, + operation.data, + operation.predecessor, + operation.salt, + )).to.be.revertedWith('TimelockController: operation is not ready'); + + // Check that is the v0 contract + await expect(polygonZkEVMBridgeContractV2.maxEtherBridge()).to.be.reverted; + + await ethers.provider.send('evm_increaseTime', [minDelay]); + await timelockContract.execute( + operation.target, + operation.value, + operation.data, + operation.predecessor, + operation.salt, + ); + + await expect(await polygonZkEVMBridgeContractV2.maxEtherBridge()).to.be.equal(0); }); }); From 04c9adc502c95606bfc06b0cf661c91d9062fe77 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Tue, 20 Dec 2022 16:12:09 +0100 Subject: [PATCH 56/71] update deployment --- compiled-contracts/PolygonZkEVMBridge.json | 32 +- .../PolygonZkEVMBridgeMock.json | 32 +- contracts/PolygonZkEVMBridge.sol | 8 +- contracts/mocks/PolygonZkEVMBridgeMock.sol | 4 +- deployment/deployPoE_v2-0.js | 51 +- deployment/deploy_parameters.json.example | 4 +- deployment/verifyPoE_v2-0.js | 35 +- test/contracts/bridge.test.js | 2 +- .../real-prover/test-inputs/input.json | 2168 ++++++++--------- .../real-prover/test-inputs/proof.json | 17 +- .../real-prover/test-inputs/public.json | 2 +- test/contracts/timelockUpgradeTest.js | 29 +- 12 files changed, 1227 insertions(+), 1157 deletions(-) diff --git a/compiled-contracts/PolygonZkEVMBridge.json b/compiled-contracts/PolygonZkEVMBridge.json index c85b795ad..bed9877f9 100644 --- a/compiled-contracts/PolygonZkEVMBridge.json +++ b/compiled-contracts/PolygonZkEVMBridge.json @@ -515,7 +515,7 @@ }, { "internalType": "address", - "name": "_poeAddress", + "name": "_zkEVMaddress", "type": "address" } ], @@ -569,19 +569,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "poeAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -697,10 +684,23 @@ ], "stateMutability": "view", "type": "function" + }, + { + "inputs": [], + "name": "zkEVMaddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50614810806100206000396000f3fe608060405260043610620001675760003560e01c806381b1c17411620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b806381b1c17414620003735780638f61151914620003ad5780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b80633ae05047116200011e5780633ae0504714620002a25780633da8168214620002ba5780633e19704314620002df578063463855491462000304578063647c576c14620003295780637b6323c1146200034e57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002470565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009d2565b348015620001db57600080fd5b50620001f3620001ed366004620024fd565b62000a0b565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002539565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b506200022462000a5e565b348015620002c757600080fd5b50620001a1620002d936600462002628565b62000b51565b348015620002ec57600080fd5b5062000224620002fe366004620026a6565b62000c53565b3480156200031157600080fd5b506200018362000323366004620027b7565b62000ce0565b3480156200033657600080fd5b5062000183620003483660046200289e565b62000e86565b3480156200035b57600080fd5b50620001836200036d366004620027b7565b62000fe5565b3480156200038057600080fd5b50620001f362000392366004620028ee565b6024602052600090815260409020546001600160a01b031681565b348015620003ba57600080fd5b50602754620001f3906001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028ee565b62001492565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002908565b620014d7565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620029bc565b620015ee565b348015620004c357600080fd5b50620001836200179a565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028ee565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a24565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008ec565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074957604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562000710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000736919062002a9b565b50602081015181519094509250620008ea565b84156200075e576200075e8a888888620017d1565b620007756001600160a01b038b1633308a62001bf9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f6919081019062002b36565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000835573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085f919081019062002b36565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c4919062002b6f565b604051602001620008d89392919062002bbd565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092e98979695949392919062002bfa565b60405180910390a16200095962000953600084868c8c8c888051906020012062000c53565b62001c66565b6026546001600160a01b03166333d6247d6200097462000a5e565b6040518263ffffffff1660e01b81526004016200099391815260200190565b600060405180830381600087803b158015620009ae57600080fd5b505af1158015620009c3573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ff5760405162461bcd60e51b8152600401620005539062002c67565b62000a0962001db7565b565b600060246000848460405160200162000a2692919062002cc4565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b48578260011660010362000ac9576001816020811062000a955762000a9562002cee565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af6565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0360028462002d30565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3f9062002d47565b91505062000a69565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c44578160011660010362000bce5786818151811062000b8c5762000b8c62002cee565b60200260200101518360405160200162000bb0929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c20565b8287828151811062000be45762000be462002cee565b602002602001015160405160200162000c07929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2d60028362002d30565b91508062000c3b8162002d47565b91505062000b61565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d065760405162461bcd60e51b8152600401620005539062002a24565b62000d1c8a8a8a8a8a8a8a8a8a8a600162001e15565b62000d2d8963ffffffff16620020a0565b6000836001600160a01b03168387898560405160240162000d519392919062002d63565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d88919062002d9e565b60006040518083038185875af1925050503d806000811462000dc7576040519150601f19603f3d011682016040523d82523d6000602084013e62000dcc565b606091505b505090508062000e385760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e7195949392919062002dbc565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea75750600054600160ff909116105b8062000ec35750303b15801562000ec3575060005460ff166001145b62000f285760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f4c576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff16156200100b5760405162461bcd60e51b8152600401620005539062002a24565b620010218a8a8a8a8a8a8a8a8a8a600062001e15565b620010328963ffffffff16620020a0565b6001600160a01b0385166200112757604080516000808252602082019092526001600160a01b0385169084906040516200106d919062002d9e565b60006040518083038185875af1925050503d8060008114620010ac576040519150601f19603f3d011682016040523d82523d6000602084013e620010b1565b606091505b5050905080620011205760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b5062001445565b60225463ffffffff6101009091048116908716036200115c57620011566001600160a01b0386168484620020e2565b62001445565b600086866040516020016200117392919062002cc4565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013ca57600080600085806020019051810190620011c5919062002df3565b925092509250600085848484604051620011df90620023d6565b620011ed9392919062002bbd565b8190604051809103906000f59050801580156200120e573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001263573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001289919062002a9b565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013b89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001442565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200141a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001440919062002a9b565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200147e95949392919062002dbc565b60405180910390a150505050505050505050565b600080620014a36101008462002d30565b90506000620014b56101008562002e69565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014ef92919062002cc4565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200152290620023d6565b601f1982820381018352601f9091011660408190526200154f908d908d908d908d908d9060200162002ea9565b60408051601f19818403018152908290526200156f929160200162002eea565b60405160208183030381529060405280519060200120604051602001620015c894939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620016145760405162461bcd60e51b8152600401620005539062002a24565b60225463ffffffff6101009091048116908416036200169c5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016f098979695949392919062002bfa565b60405180910390a162001727620009536001602260019054906101000a900463ffffffff1633878734888051906020012062000c53565b6026546001600160a01b03166333d6247d6200174262000a5e565b6040518263ffffffff1660e01b81526004016200176191815260200190565b600060405180830381600087803b1580156200177c57600080fd5b505af115801562001791573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017c75760405162461bcd60e51b8152600401620005539062002c67565b62000a0962002114565b60006200181483838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021c392505050565b9050632afa533160e01b6001600160e01b031982160162001a0d57600080808080808062001846896004818d62002f1d565b81019062001855919062002f49565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018975760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b0386163014620018c25760405162461bcd60e51b8152600401620005539062003001565b8a8514620019395760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620019b9919062002d9e565b6000604051808303816000865af19150503d8060008114620019f8576040519150601f19603f3d011682016040523d82523d6000602084013e620019fd565b606091505b5050505050505050505062001bf2565b6001600160e01b031981166323f2ebc360e21b1462001a835760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a9b8a6004818e62002f1d565b81019062001aaa919062003052565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001aee5760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b038716301462001b195760405162461bcd60e51b8152600401620005539062003001565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001ba2919062002d9e565b6000604051808303816000865af19150503d806000811462001be1576040519150601f19603f3d011682016040523d82523d6000602084013e62001be6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdf9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021ca565b80600162001c7760206002620031db565b62001c839190620031e9565b6021541062001ce85760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cfd919062003203565b909155505060215460005b602081101562001da7578160011660010362001d3d57826001826020811062001d355762001d3562002cee565b015550505050565b6001816020811062001d535762001d5362002cee565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d90919062002d30565b91508062001d9e8162002d47565b91505062001d08565b5062001db26200321e565b505050565b60225460ff161562001ddd5760405162461bcd60e51b8152600401620005539062002a24565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001e268a63ffffffff1662001492565b1562001e7d5760405162461bcd60e51b81526020600482015260306024820152600080516020620047bb83398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ef1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f17919062003234565b90508060000362001f805760405162461bcd60e51b81526020600482015260396024820152600080516020620047bb83398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff8781166101009092041614620020025760405162461bcd60e51b81526020600482015260436024820152600080516020620047bb83398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff166200202057508862002023565b50895b6200204e6200203f848b8b8b8b8b8b8051906020012062000c53565b8e8e63ffffffff168462000b51565b620009c35760405162461bcd60e51b815260206004820152602c6024820152600080516020620047bb83398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020b06101008362002d30565b90506000620020c26101008462002e69565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001db290849063a9059cbb60e01b9060640162001c2e565b60225460ff166200218e5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002221826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022a39092919063ffffffff16565b80519091501562001db2578080602001905181019062002242919062002a9b565b62001db25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c4b848460008585600080866001600160a01b03168587604051620022cd919062002d9e565b60006040518083038185875af1925050503d80600081146200230c576040519150601f19603f3d011682016040523d82523d6000602084013e62002311565b606091505b509150915062002324878383876200232f565b979650505050505050565b60608315620023a35782516000036200239b576001600160a01b0385163b6200239b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c4b565b62000c4b8383815115620023ba5781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200324e565b611557806200326483390190565b6001600160a01b0381168114620023fa57600080fd5b50565b80356200240a81620023e4565b919050565b803563ffffffff811681146200240a57600080fd5b60008083601f8401126200243757600080fd5b50813567ffffffffffffffff8111156200245057600080fd5b6020830191508360208285010111156200246957600080fd5b9250929050565b60008060008060008060a087890312156200248a57600080fd5b86356200249781620023e4565b9550620024a7602088016200240f565b94506040870135620024b981620023e4565b935060608701359250608087013567ffffffffffffffff811115620024dd57600080fd5b620024eb89828a0162002424565b979a9699509497509295939492505050565b600080604083850312156200251157600080fd5b6200251c836200240f565b915060208301356200252e81620023e4565b809150509250929050565b6000602082840312156200254c57600080fd5b81356200255981620023e4565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620025a257620025a262002560565b604052919050565b600082601f830112620025bc57600080fd5b8135602067ffffffffffffffff821115620025db57620025db62002560565b8160051b620025ec82820162002576565b92835284810182019282810190878511156200260757600080fd5b83870192505b8483101562002324578235825291830191908301906200260d565b600080600080608085870312156200263f57600080fd5b84359350602085013567ffffffffffffffff808211156200265f57600080fd5b6200266d88838901620025aa565b94506040870135915080821682146200268557600080fd5b509396929550929360600135925050565b60ff81168114620023fa57600080fd5b600080600080600080600060e0888a031215620026c257600080fd5b8735620026cf8162002696565b9650620026df602089016200240f565b95506040880135620026f181620023e4565b945062002701606089016200240f565b935060808801356200271381620023e4565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200274d576200274d62002560565b50601f01601f191660200190565b600082601f8301126200276d57600080fd5b8135620027846200277e8262002730565b62002576565b8181528460208386010111156200279a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027d857600080fd5b8a3567ffffffffffffffff80821115620027f157600080fd5b620027ff8e838f01620025aa565b9b506200280f60208e016200240f565b9a5060408d0135995060608d013598506200282d60808e016200240f565b97506200283d60a08e01620023fd565b96506200284d60c08e016200240f565b95506200285d60e08e01620023fd565b94506101008d013593506101208d01359150808211156200287d57600080fd5b506200288c8d828e016200275b565b9150509295989b9194979a5092959850565b600080600060608486031215620028b457600080fd5b620028bf846200240f565b92506020840135620028d181620023e4565b91506040840135620028e381620023e4565b809150509250925092565b6000602082840312156200290157600080fd5b5035919050565b600080600080600080600060a0888a0312156200292457600080fd5b6200292f886200240f565b965060208801356200294181620023e4565b9550604088013567ffffffffffffffff808211156200295f57600080fd5b6200296d8b838c0162002424565b909750955060608a01359150808211156200298757600080fd5b50620029968a828b0162002424565b9094509250506080880135620029ac8162002696565b8091505092959891949750929550565b600080600060608486031215620029d257600080fd5b620029dd846200240f565b92506020840135620029ef81620023e4565b9150604084013567ffffffffffffffff81111562002a0c57600080fd5b62002a1a868287016200275b565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b8015158114620023fa57600080fd5b60006020828403121562002aae57600080fd5b8151620025598162002a8c565b60005b8381101562002ad857818101518382015260200162002abe565b8381111562000fdf5750506000910152565b600082601f83011262002afc57600080fd5b815162002b0d6200277e8262002730565b81815284602083860101111562002b2357600080fd5b62000c4b82602083016020870162002abb565b60006020828403121562002b4957600080fd5b815167ffffffffffffffff81111562002b6157600080fd5b62000c4b8482850162002aea565b60006020828403121562002b8257600080fd5b8151620025598162002696565b6000815180845262002ba981602086016020860162002abb565b601f01601f19169290920160200192915050565b60608152600062002bd2606083018662002b8f565b828103602084015262002be6818662002b8f565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002c4e8483018762002b8f565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002d425762002d4262002d04565b500490565b60006001820162002d5c5762002d5c62002d1a565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d959083018462002b8f565b95945050505050565b6000825162002db281846020870162002abb565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002e0957600080fd5b835167ffffffffffffffff8082111562002e2257600080fd5b62002e308783880162002aea565b9450602086015191508082111562002e4757600080fd5b5062002e568682870162002aea565b9250506040840151620028e38162002696565b60008262002e7b5762002e7b62002d04565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002ebf60608301878962002e80565b828103602084015262002ed481868862002e80565b91505060ff831660408301529695505050505050565b6000835162002efe81846020880162002abb565b83519083019062002f1481836020880162002abb565b01949350505050565b6000808585111562002f2e57600080fd5b8386111562002f3c57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f6557600080fd5b873562002f7281620023e4565b9650602088013562002f8481620023e4565b955060408801359450606088013593506080880135620027138162002696565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b0312156200307057600080fd5b88356200307d81620023e4565b975060208901356200308f81620023e4565b965060408901359550606089013594506080890135620030af8162002a8c565b935060a0890135620030c18162002696565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200311f57816000190482111562003103576200310362002d1a565b808516156200311157918102915b93841c9390800290620030e3565b509250929050565b600082620031385750600162000a58565b81620031475750600062000a58565b81600181146200316057600281146200316b576200318b565b600191505062000a58565b60ff8411156200317f576200317f62002d1a565b50506001821b62000a58565b5060208310610133831016604e8410600b8410161715620031b0575081810a62000a58565b620031bc8383620030de565b8060001904821115620031d357620031d362002d1a565b029392505050565b600062002559838362003127565b600082821015620031fe57620031fe62002d1a565b500390565b6000821982111562003219576200321962002d1a565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200324757600080fd5b5051919050565b60208152600062002559602083018462002b8f56fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea264697066735822122070fae8b3daebe7fc894d50296739b7a26e638f37239109230c7dfd552785f2a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220a0c682e41bbc0bcf599110077edba37d297487e713d10fc5634097fd73bd508664736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001675760003560e01c806381b1c17411620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b806381b1c17414620003735780638f61151914620003ad5780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b80633ae05047116200011e5780633ae0504714620002a25780633da8168214620002ba5780633e19704314620002df578063463855491462000304578063647c576c14620003295780637b6323c1146200034e57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002470565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009d2565b348015620001db57600080fd5b50620001f3620001ed366004620024fd565b62000a0b565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002539565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b506200022462000a5e565b348015620002c757600080fd5b50620001a1620002d936600462002628565b62000b51565b348015620002ec57600080fd5b5062000224620002fe366004620026a6565b62000c53565b3480156200031157600080fd5b506200018362000323366004620027b7565b62000ce0565b3480156200033657600080fd5b5062000183620003483660046200289e565b62000e86565b3480156200035b57600080fd5b50620001836200036d366004620027b7565b62000fe5565b3480156200038057600080fd5b50620001f362000392366004620028ee565b6024602052600090815260409020546001600160a01b031681565b348015620003ba57600080fd5b50602754620001f3906001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028ee565b62001492565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002908565b620014d7565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620029bc565b620015ee565b348015620004c357600080fd5b50620001836200179a565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028ee565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a24565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008ec565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074957604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562000710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000736919062002a9b565b50602081015181519094509250620008ea565b84156200075e576200075e8a888888620017d1565b620007756001600160a01b038b1633308a62001bf9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f6919081019062002b36565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000835573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085f919081019062002b36565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c4919062002b6f565b604051602001620008d89392919062002bbd565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092e98979695949392919062002bfa565b60405180910390a16200095962000953600084868c8c8c888051906020012062000c53565b62001c66565b6026546001600160a01b03166333d6247d6200097462000a5e565b6040518263ffffffff1660e01b81526004016200099391815260200190565b600060405180830381600087803b158015620009ae57600080fd5b505af1158015620009c3573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ff5760405162461bcd60e51b8152600401620005539062002c67565b62000a0962001db7565b565b600060246000848460405160200162000a2692919062002cc4565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b48578260011660010362000ac9576001816020811062000a955762000a9562002cee565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af6565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0360028462002d30565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3f9062002d47565b91505062000a69565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c44578160011660010362000bce5786818151811062000b8c5762000b8c62002cee565b60200260200101518360405160200162000bb0929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c20565b8287828151811062000be45762000be462002cee565b602002602001015160405160200162000c07929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2d60028362002d30565b91508062000c3b8162002d47565b91505062000b61565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d065760405162461bcd60e51b8152600401620005539062002a24565b62000d1c8a8a8a8a8a8a8a8a8a8a600162001e15565b62000d2d8963ffffffff16620020a0565b6000836001600160a01b03168387898560405160240162000d519392919062002d63565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d88919062002d9e565b60006040518083038185875af1925050503d806000811462000dc7576040519150601f19603f3d011682016040523d82523d6000602084013e62000dcc565b606091505b505090508062000e385760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e7195949392919062002dbc565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea75750600054600160ff909116105b8062000ec35750303b15801562000ec3575060005460ff166001145b62000f285760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f4c576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff16156200100b5760405162461bcd60e51b8152600401620005539062002a24565b620010218a8a8a8a8a8a8a8a8a8a600062001e15565b620010328963ffffffff16620020a0565b6001600160a01b0385166200112757604080516000808252602082019092526001600160a01b0385169084906040516200106d919062002d9e565b60006040518083038185875af1925050503d8060008114620010ac576040519150601f19603f3d011682016040523d82523d6000602084013e620010b1565b606091505b5050905080620011205760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b5062001445565b60225463ffffffff6101009091048116908716036200115c57620011566001600160a01b0386168484620020e2565b62001445565b600086866040516020016200117392919062002cc4565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013ca57600080600085806020019051810190620011c5919062002df3565b925092509250600085848484604051620011df90620023d6565b620011ed9392919062002bbd565b8190604051809103906000f59050801580156200120e573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001263573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001289919062002a9b565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013b89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001442565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200141a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001440919062002a9b565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200147e95949392919062002dbc565b60405180910390a150505050505050505050565b600080620014a36101008462002d30565b90506000620014b56101008562002e69565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014ef92919062002cc4565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200152290620023d6565b601f1982820381018352601f9091011660408190526200154f908d908d908d908d908d9060200162002ea9565b60408051601f19818403018152908290526200156f929160200162002eea565b60405160208183030381529060405280519060200120604051602001620015c894939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620016145760405162461bcd60e51b8152600401620005539062002a24565b60225463ffffffff6101009091048116908416036200169c5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016f098979695949392919062002bfa565b60405180910390a162001727620009536001602260019054906101000a900463ffffffff1633878734888051906020012062000c53565b6026546001600160a01b03166333d6247d6200174262000a5e565b6040518263ffffffff1660e01b81526004016200176191815260200190565b600060405180830381600087803b1580156200177c57600080fd5b505af115801562001791573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017c75760405162461bcd60e51b8152600401620005539062002c67565b62000a0962002114565b60006200181483838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021c392505050565b9050632afa533160e01b6001600160e01b031982160162001a0d57600080808080808062001846896004818d62002f1d565b81019062001855919062002f49565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018975760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b0386163014620018c25760405162461bcd60e51b8152600401620005539062003001565b8a8514620019395760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620019b9919062002d9e565b6000604051808303816000865af19150503d8060008114620019f8576040519150601f19603f3d011682016040523d82523d6000602084013e620019fd565b606091505b5050505050505050505062001bf2565b6001600160e01b031981166323f2ebc360e21b1462001a835760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a9b8a6004818e62002f1d565b81019062001aaa919062003052565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001aee5760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b038716301462001b195760405162461bcd60e51b8152600401620005539062003001565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001ba2919062002d9e565b6000604051808303816000865af19150503d806000811462001be1576040519150601f19603f3d011682016040523d82523d6000602084013e62001be6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdf9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021ca565b80600162001c7760206002620031db565b62001c839190620031e9565b6021541062001ce85760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cfd919062003203565b909155505060215460005b602081101562001da7578160011660010362001d3d57826001826020811062001d355762001d3562002cee565b015550505050565b6001816020811062001d535762001d5362002cee565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d90919062002d30565b91508062001d9e8162002d47565b91505062001d08565b5062001db26200321e565b505050565b60225460ff161562001ddd5760405162461bcd60e51b8152600401620005539062002a24565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001e268a63ffffffff1662001492565b1562001e7d5760405162461bcd60e51b81526020600482015260306024820152600080516020620047bb83398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ef1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f17919062003234565b90508060000362001f805760405162461bcd60e51b81526020600482015260396024820152600080516020620047bb83398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff8781166101009092041614620020025760405162461bcd60e51b81526020600482015260436024820152600080516020620047bb83398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff166200202057508862002023565b50895b6200204e6200203f848b8b8b8b8b8b8051906020012062000c53565b8e8e63ffffffff168462000b51565b620009c35760405162461bcd60e51b815260206004820152602c6024820152600080516020620047bb83398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020b06101008362002d30565b90506000620020c26101008462002e69565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001db290849063a9059cbb60e01b9060640162001c2e565b60225460ff166200218e5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002221826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022a39092919063ffffffff16565b80519091501562001db2578080602001905181019062002242919062002a9b565b62001db25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c4b848460008585600080866001600160a01b03168587604051620022cd919062002d9e565b60006040518083038185875af1925050503d80600081146200230c576040519150601f19603f3d011682016040523d82523d6000602084013e62002311565b606091505b509150915062002324878383876200232f565b979650505050505050565b60608315620023a35782516000036200239b576001600160a01b0385163b6200239b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c4b565b62000c4b8383815115620023ba5781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200324e565b611557806200326483390190565b6001600160a01b0381168114620023fa57600080fd5b50565b80356200240a81620023e4565b919050565b803563ffffffff811681146200240a57600080fd5b60008083601f8401126200243757600080fd5b50813567ffffffffffffffff8111156200245057600080fd5b6020830191508360208285010111156200246957600080fd5b9250929050565b60008060008060008060a087890312156200248a57600080fd5b86356200249781620023e4565b9550620024a7602088016200240f565b94506040870135620024b981620023e4565b935060608701359250608087013567ffffffffffffffff811115620024dd57600080fd5b620024eb89828a0162002424565b979a9699509497509295939492505050565b600080604083850312156200251157600080fd5b6200251c836200240f565b915060208301356200252e81620023e4565b809150509250929050565b6000602082840312156200254c57600080fd5b81356200255981620023e4565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620025a257620025a262002560565b604052919050565b600082601f830112620025bc57600080fd5b8135602067ffffffffffffffff821115620025db57620025db62002560565b8160051b620025ec82820162002576565b92835284810182019282810190878511156200260757600080fd5b83870192505b8483101562002324578235825291830191908301906200260d565b600080600080608085870312156200263f57600080fd5b84359350602085013567ffffffffffffffff808211156200265f57600080fd5b6200266d88838901620025aa565b94506040870135915080821682146200268557600080fd5b509396929550929360600135925050565b60ff81168114620023fa57600080fd5b600080600080600080600060e0888a031215620026c257600080fd5b8735620026cf8162002696565b9650620026df602089016200240f565b95506040880135620026f181620023e4565b945062002701606089016200240f565b935060808801356200271381620023e4565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200274d576200274d62002560565b50601f01601f191660200190565b600082601f8301126200276d57600080fd5b8135620027846200277e8262002730565b62002576565b8181528460208386010111156200279a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027d857600080fd5b8a3567ffffffffffffffff80821115620027f157600080fd5b620027ff8e838f01620025aa565b9b506200280f60208e016200240f565b9a5060408d0135995060608d013598506200282d60808e016200240f565b97506200283d60a08e01620023fd565b96506200284d60c08e016200240f565b95506200285d60e08e01620023fd565b94506101008d013593506101208d01359150808211156200287d57600080fd5b506200288c8d828e016200275b565b9150509295989b9194979a5092959850565b600080600060608486031215620028b457600080fd5b620028bf846200240f565b92506020840135620028d181620023e4565b91506040840135620028e381620023e4565b809150509250925092565b6000602082840312156200290157600080fd5b5035919050565b600080600080600080600060a0888a0312156200292457600080fd5b6200292f886200240f565b965060208801356200294181620023e4565b9550604088013567ffffffffffffffff808211156200295f57600080fd5b6200296d8b838c0162002424565b909750955060608a01359150808211156200298757600080fd5b50620029968a828b0162002424565b9094509250506080880135620029ac8162002696565b8091505092959891949750929550565b600080600060608486031215620029d257600080fd5b620029dd846200240f565b92506020840135620029ef81620023e4565b9150604084013567ffffffffffffffff81111562002a0c57600080fd5b62002a1a868287016200275b565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b8015158114620023fa57600080fd5b60006020828403121562002aae57600080fd5b8151620025598162002a8c565b60005b8381101562002ad857818101518382015260200162002abe565b8381111562000fdf5750506000910152565b600082601f83011262002afc57600080fd5b815162002b0d6200277e8262002730565b81815284602083860101111562002b2357600080fd5b62000c4b82602083016020870162002abb565b60006020828403121562002b4957600080fd5b815167ffffffffffffffff81111562002b6157600080fd5b62000c4b8482850162002aea565b60006020828403121562002b8257600080fd5b8151620025598162002696565b6000815180845262002ba981602086016020860162002abb565b601f01601f19169290920160200192915050565b60608152600062002bd2606083018662002b8f565b828103602084015262002be6818662002b8f565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002c4e8483018762002b8f565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002d425762002d4262002d04565b500490565b60006001820162002d5c5762002d5c62002d1a565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d959083018462002b8f565b95945050505050565b6000825162002db281846020870162002abb565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002e0957600080fd5b835167ffffffffffffffff8082111562002e2257600080fd5b62002e308783880162002aea565b9450602086015191508082111562002e4757600080fd5b5062002e568682870162002aea565b9250506040840151620028e38162002696565b60008262002e7b5762002e7b62002d04565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002ebf60608301878962002e80565b828103602084015262002ed481868862002e80565b91505060ff831660408301529695505050505050565b6000835162002efe81846020880162002abb565b83519083019062002f1481836020880162002abb565b01949350505050565b6000808585111562002f2e57600080fd5b8386111562002f3c57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f6557600080fd5b873562002f7281620023e4565b9650602088013562002f8481620023e4565b955060408801359450606088013593506080880135620027138162002696565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b0312156200307057600080fd5b88356200307d81620023e4565b975060208901356200308f81620023e4565b965060408901359550606089013594506080890135620030af8162002a8c565b935060a0890135620030c18162002696565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200311f57816000190482111562003103576200310362002d1a565b808516156200311157918102915b93841c9390800290620030e3565b509250929050565b600082620031385750600162000a58565b81620031475750600062000a58565b81600181146200316057600281146200316b576200318b565b600191505062000a58565b60ff8411156200317f576200317f62002d1a565b50506001821b62000a58565b5060208310610133831016604e8410600b8410161715620031b0575081810a62000a58565b620031bc8383620030de565b8060001904821115620031d357620031d362002d1a565b029392505050565b600062002559838362003127565b600082821015620031fe57620031fe62002d1a565b500390565b6000821982111562003219576200321962002d1a565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200324757600080fd5b5051919050565b60208152600062002559602083018462002b8f56fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea264697066735822122070fae8b3daebe7fc894d50296739b7a26e638f37239109230c7dfd552785f2a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220a0c682e41bbc0bcf599110077edba37d297487e713d10fc5634097fd73bd508664736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50614810806100206000396000f3fe608060405260043610620001675760003560e01c80637b6323c111620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b80637b6323c1146200037057806381b1c17414620003955780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b806337883a3e116200011e57806337883a3e14620002a25780633ae0504714620002c45780633da8168214620002dc5780633e1970431462000301578063463855491462000326578063647c576c146200034b57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002470565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009d2565b348015620001db57600080fd5b50620001f3620001ed366004620024fd565b62000a0b565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002539565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b50602754620001f3906001600160a01b031681565b348015620002d157600080fd5b506200022462000a5e565b348015620002e957600080fd5b50620001a1620002fb36600462002628565b62000b51565b3480156200030e57600080fd5b506200022462000320366004620026a6565b62000c53565b3480156200033357600080fd5b506200018362000345366004620027b7565b62000ce0565b3480156200035857600080fd5b50620001836200036a3660046200289e565b62000e86565b3480156200037d57600080fd5b50620001836200038f366004620027b7565b62000fe5565b348015620003a257600080fd5b50620001f3620003b4366004620028ee565b6024602052600090815260409020546001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028ee565b62001492565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002908565b620014d7565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620029bc565b620015ee565b348015620004c357600080fd5b50620001836200179a565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028ee565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a24565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008ec565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074957604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562000710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000736919062002a9b565b50602081015181519094509250620008ea565b84156200075e576200075e8a888888620017d1565b620007756001600160a01b038b1633308a62001bf9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f6919081019062002b36565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000835573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085f919081019062002b36565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c4919062002b6f565b604051602001620008d89392919062002bbd565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092e98979695949392919062002bfa565b60405180910390a16200095962000953600084868c8c8c888051906020012062000c53565b62001c66565b6026546001600160a01b03166333d6247d6200097462000a5e565b6040518263ffffffff1660e01b81526004016200099391815260200190565b600060405180830381600087803b158015620009ae57600080fd5b505af1158015620009c3573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ff5760405162461bcd60e51b8152600401620005539062002c67565b62000a0962001db7565b565b600060246000848460405160200162000a2692919062002cc4565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b48578260011660010362000ac9576001816020811062000a955762000a9562002cee565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af6565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0360028462002d30565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3f9062002d47565b91505062000a69565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c44578160011660010362000bce5786818151811062000b8c5762000b8c62002cee565b60200260200101518360405160200162000bb0929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c20565b8287828151811062000be45762000be462002cee565b602002602001015160405160200162000c07929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2d60028362002d30565b91508062000c3b8162002d47565b91505062000b61565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d065760405162461bcd60e51b8152600401620005539062002a24565b62000d1c8a8a8a8a8a8a8a8a8a8a600162001e15565b62000d2d8963ffffffff16620020a0565b6000836001600160a01b03168387898560405160240162000d519392919062002d63565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d88919062002d9e565b60006040518083038185875af1925050503d806000811462000dc7576040519150601f19603f3d011682016040523d82523d6000602084013e62000dcc565b606091505b505090508062000e385760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e7195949392919062002dbc565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea75750600054600160ff909116105b8062000ec35750303b15801562000ec3575060005460ff166001145b62000f285760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f4c576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff16156200100b5760405162461bcd60e51b8152600401620005539062002a24565b620010218a8a8a8a8a8a8a8a8a8a600062001e15565b620010328963ffffffff16620020a0565b6001600160a01b0385166200112757604080516000808252602082019092526001600160a01b0385169084906040516200106d919062002d9e565b60006040518083038185875af1925050503d8060008114620010ac576040519150601f19603f3d011682016040523d82523d6000602084013e620010b1565b606091505b5050905080620011205760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b5062001445565b60225463ffffffff6101009091048116908716036200115c57620011566001600160a01b0386168484620020e2565b62001445565b600086866040516020016200117392919062002cc4565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013ca57600080600085806020019051810190620011c5919062002df3565b925092509250600085848484604051620011df90620023d6565b620011ed9392919062002bbd565b8190604051809103906000f59050801580156200120e573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001263573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001289919062002a9b565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013b89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001442565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200141a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001440919062002a9b565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200147e95949392919062002dbc565b60405180910390a150505050505050505050565b600080620014a36101008462002d30565b90506000620014b56101008562002e69565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014ef92919062002cc4565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200152290620023d6565b601f1982820381018352601f9091011660408190526200154f908d908d908d908d908d9060200162002ea9565b60408051601f19818403018152908290526200156f929160200162002eea565b60405160208183030381529060405280519060200120604051602001620015c894939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620016145760405162461bcd60e51b8152600401620005539062002a24565b60225463ffffffff6101009091048116908416036200169c5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016f098979695949392919062002bfa565b60405180910390a162001727620009536001602260019054906101000a900463ffffffff1633878734888051906020012062000c53565b6026546001600160a01b03166333d6247d6200174262000a5e565b6040518263ffffffff1660e01b81526004016200176191815260200190565b600060405180830381600087803b1580156200177c57600080fd5b505af115801562001791573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017c75760405162461bcd60e51b8152600401620005539062002c67565b62000a0962002114565b60006200181483838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021c392505050565b9050632afa533160e01b6001600160e01b031982160162001a0d57600080808080808062001846896004818d62002f1d565b81019062001855919062002f49565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018975760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b0386163014620018c25760405162461bcd60e51b8152600401620005539062003001565b8a8514620019395760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620019b9919062002d9e565b6000604051808303816000865af19150503d8060008114620019f8576040519150601f19603f3d011682016040523d82523d6000602084013e620019fd565b606091505b5050505050505050505062001bf2565b6001600160e01b031981166323f2ebc360e21b1462001a835760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a9b8a6004818e62002f1d565b81019062001aaa919062003052565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001aee5760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b038716301462001b195760405162461bcd60e51b8152600401620005539062003001565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001ba2919062002d9e565b6000604051808303816000865af19150503d806000811462001be1576040519150601f19603f3d011682016040523d82523d6000602084013e62001be6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdf9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021ca565b80600162001c7760206002620031db565b62001c839190620031e9565b6021541062001ce85760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cfd919062003203565b909155505060215460005b602081101562001da7578160011660010362001d3d57826001826020811062001d355762001d3562002cee565b015550505050565b6001816020811062001d535762001d5362002cee565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d90919062002d30565b91508062001d9e8162002d47565b91505062001d08565b5062001db26200321e565b505050565b60225460ff161562001ddd5760405162461bcd60e51b8152600401620005539062002a24565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001e268a63ffffffff1662001492565b1562001e7d5760405162461bcd60e51b81526020600482015260306024820152600080516020620047bb83398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ef1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f17919062003234565b90508060000362001f805760405162461bcd60e51b81526020600482015260396024820152600080516020620047bb83398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff8781166101009092041614620020025760405162461bcd60e51b81526020600482015260436024820152600080516020620047bb83398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff166200202057508862002023565b50895b6200204e6200203f848b8b8b8b8b8b8051906020012062000c53565b8e8e63ffffffff168462000b51565b620009c35760405162461bcd60e51b815260206004820152602c6024820152600080516020620047bb83398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020b06101008362002d30565b90506000620020c26101008462002e69565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001db290849063a9059cbb60e01b9060640162001c2e565b60225460ff166200218e5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002221826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022a39092919063ffffffff16565b80519091501562001db2578080602001905181019062002242919062002a9b565b62001db25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c4b848460008585600080866001600160a01b03168587604051620022cd919062002d9e565b60006040518083038185875af1925050503d80600081146200230c576040519150601f19603f3d011682016040523d82523d6000602084013e62002311565b606091505b509150915062002324878383876200232f565b979650505050505050565b60608315620023a35782516000036200239b576001600160a01b0385163b6200239b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c4b565b62000c4b8383815115620023ba5781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200324e565b611557806200326483390190565b6001600160a01b0381168114620023fa57600080fd5b50565b80356200240a81620023e4565b919050565b803563ffffffff811681146200240a57600080fd5b60008083601f8401126200243757600080fd5b50813567ffffffffffffffff8111156200245057600080fd5b6020830191508360208285010111156200246957600080fd5b9250929050565b60008060008060008060a087890312156200248a57600080fd5b86356200249781620023e4565b9550620024a7602088016200240f565b94506040870135620024b981620023e4565b935060608701359250608087013567ffffffffffffffff811115620024dd57600080fd5b620024eb89828a0162002424565b979a9699509497509295939492505050565b600080604083850312156200251157600080fd5b6200251c836200240f565b915060208301356200252e81620023e4565b809150509250929050565b6000602082840312156200254c57600080fd5b81356200255981620023e4565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620025a257620025a262002560565b604052919050565b600082601f830112620025bc57600080fd5b8135602067ffffffffffffffff821115620025db57620025db62002560565b8160051b620025ec82820162002576565b92835284810182019282810190878511156200260757600080fd5b83870192505b8483101562002324578235825291830191908301906200260d565b600080600080608085870312156200263f57600080fd5b84359350602085013567ffffffffffffffff808211156200265f57600080fd5b6200266d88838901620025aa565b94506040870135915080821682146200268557600080fd5b509396929550929360600135925050565b60ff81168114620023fa57600080fd5b600080600080600080600060e0888a031215620026c257600080fd5b8735620026cf8162002696565b9650620026df602089016200240f565b95506040880135620026f181620023e4565b945062002701606089016200240f565b935060808801356200271381620023e4565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200274d576200274d62002560565b50601f01601f191660200190565b600082601f8301126200276d57600080fd5b8135620027846200277e8262002730565b62002576565b8181528460208386010111156200279a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027d857600080fd5b8a3567ffffffffffffffff80821115620027f157600080fd5b620027ff8e838f01620025aa565b9b506200280f60208e016200240f565b9a5060408d0135995060608d013598506200282d60808e016200240f565b97506200283d60a08e01620023fd565b96506200284d60c08e016200240f565b95506200285d60e08e01620023fd565b94506101008d013593506101208d01359150808211156200287d57600080fd5b506200288c8d828e016200275b565b9150509295989b9194979a5092959850565b600080600060608486031215620028b457600080fd5b620028bf846200240f565b92506020840135620028d181620023e4565b91506040840135620028e381620023e4565b809150509250925092565b6000602082840312156200290157600080fd5b5035919050565b600080600080600080600060a0888a0312156200292457600080fd5b6200292f886200240f565b965060208801356200294181620023e4565b9550604088013567ffffffffffffffff808211156200295f57600080fd5b6200296d8b838c0162002424565b909750955060608a01359150808211156200298757600080fd5b50620029968a828b0162002424565b9094509250506080880135620029ac8162002696565b8091505092959891949750929550565b600080600060608486031215620029d257600080fd5b620029dd846200240f565b92506020840135620029ef81620023e4565b9150604084013567ffffffffffffffff81111562002a0c57600080fd5b62002a1a868287016200275b565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b8015158114620023fa57600080fd5b60006020828403121562002aae57600080fd5b8151620025598162002a8c565b60005b8381101562002ad857818101518382015260200162002abe565b8381111562000fdf5750506000910152565b600082601f83011262002afc57600080fd5b815162002b0d6200277e8262002730565b81815284602083860101111562002b2357600080fd5b62000c4b82602083016020870162002abb565b60006020828403121562002b4957600080fd5b815167ffffffffffffffff81111562002b6157600080fd5b62000c4b8482850162002aea565b60006020828403121562002b8257600080fd5b8151620025598162002696565b6000815180845262002ba981602086016020860162002abb565b601f01601f19169290920160200192915050565b60608152600062002bd2606083018662002b8f565b828103602084015262002be6818662002b8f565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002c4e8483018762002b8f565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002d425762002d4262002d04565b500490565b60006001820162002d5c5762002d5c62002d1a565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d959083018462002b8f565b95945050505050565b6000825162002db281846020870162002abb565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002e0957600080fd5b835167ffffffffffffffff8082111562002e2257600080fd5b62002e308783880162002aea565b9450602086015191508082111562002e4757600080fd5b5062002e568682870162002aea565b9250506040840151620028e38162002696565b60008262002e7b5762002e7b62002d04565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002ebf60608301878962002e80565b828103602084015262002ed481868862002e80565b91505060ff831660408301529695505050505050565b6000835162002efe81846020880162002abb565b83519083019062002f1481836020880162002abb565b01949350505050565b6000808585111562002f2e57600080fd5b8386111562002f3c57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f6557600080fd5b873562002f7281620023e4565b9650602088013562002f8481620023e4565b955060408801359450606088013593506080880135620027138162002696565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b0312156200307057600080fd5b88356200307d81620023e4565b975060208901356200308f81620023e4565b965060408901359550606089013594506080890135620030af8162002a8c565b935060a0890135620030c18162002696565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200311f57816000190482111562003103576200310362002d1a565b808516156200311157918102915b93841c9390800290620030e3565b509250929050565b600082620031385750600162000a58565b81620031475750600062000a58565b81600181146200316057600281146200316b576200318b565b600191505062000a58565b60ff8411156200317f576200317f62002d1a565b50506001821b62000a58565b5060208310610133831016604e8410600b8410161715620031b0575081810a62000a58565b620031bc8383620030de565b8060001904821115620031d357620031d362002d1a565b029392505050565b600062002559838362003127565b600082821015620031fe57620031fe62002d1a565b500390565b6000821982111562003219576200321962002d1a565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200324757600080fd5b5051919050565b60208152600062002559602083018462002b8f56fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea264697066735822122070fae8b3daebe7fc894d50296739b7a26e638f37239109230c7dfd552785f2a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212208fde18b5efa27a9c6a9604bbebb39629f3a307cad6b8fab402a033ff62a94bfe64736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001675760003560e01c80637b6323c111620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b80637b6323c1146200037057806381b1c17414620003955780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b806337883a3e116200011e57806337883a3e14620002a25780633ae0504714620002c45780633da8168214620002dc5780633e1970431462000301578063463855491462000326578063647c576c146200034b57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002470565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009d2565b348015620001db57600080fd5b50620001f3620001ed366004620024fd565b62000a0b565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002539565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b50602754620001f3906001600160a01b031681565b348015620002d157600080fd5b506200022462000a5e565b348015620002e957600080fd5b50620001a1620002fb36600462002628565b62000b51565b3480156200030e57600080fd5b506200022462000320366004620026a6565b62000c53565b3480156200033357600080fd5b506200018362000345366004620027b7565b62000ce0565b3480156200035857600080fd5b50620001836200036a3660046200289e565b62000e86565b3480156200037d57600080fd5b50620001836200038f366004620027b7565b62000fe5565b348015620003a257600080fd5b50620001f3620003b4366004620028ee565b6024602052600090815260409020546001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028ee565b62001492565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002908565b620014d7565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620029bc565b620015ee565b348015620004c357600080fd5b50620001836200179a565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028ee565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a24565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008ec565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074957604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562000710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000736919062002a9b565b50602081015181519094509250620008ea565b84156200075e576200075e8a888888620017d1565b620007756001600160a01b038b1633308a62001bf9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f6919081019062002b36565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000835573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085f919081019062002b36565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c4919062002b6f565b604051602001620008d89392919062002bbd565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092e98979695949392919062002bfa565b60405180910390a16200095962000953600084868c8c8c888051906020012062000c53565b62001c66565b6026546001600160a01b03166333d6247d6200097462000a5e565b6040518263ffffffff1660e01b81526004016200099391815260200190565b600060405180830381600087803b158015620009ae57600080fd5b505af1158015620009c3573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ff5760405162461bcd60e51b8152600401620005539062002c67565b62000a0962001db7565b565b600060246000848460405160200162000a2692919062002cc4565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b48578260011660010362000ac9576001816020811062000a955762000a9562002cee565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af6565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0360028462002d30565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3f9062002d47565b91505062000a69565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c44578160011660010362000bce5786818151811062000b8c5762000b8c62002cee565b60200260200101518360405160200162000bb0929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c20565b8287828151811062000be45762000be462002cee565b602002602001015160405160200162000c07929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2d60028362002d30565b91508062000c3b8162002d47565b91505062000b61565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d065760405162461bcd60e51b8152600401620005539062002a24565b62000d1c8a8a8a8a8a8a8a8a8a8a600162001e15565b62000d2d8963ffffffff16620020a0565b6000836001600160a01b03168387898560405160240162000d519392919062002d63565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d88919062002d9e565b60006040518083038185875af1925050503d806000811462000dc7576040519150601f19603f3d011682016040523d82523d6000602084013e62000dcc565b606091505b505090508062000e385760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e7195949392919062002dbc565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea75750600054600160ff909116105b8062000ec35750303b15801562000ec3575060005460ff166001145b62000f285760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f4c576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff16156200100b5760405162461bcd60e51b8152600401620005539062002a24565b620010218a8a8a8a8a8a8a8a8a8a600062001e15565b620010328963ffffffff16620020a0565b6001600160a01b0385166200112757604080516000808252602082019092526001600160a01b0385169084906040516200106d919062002d9e565b60006040518083038185875af1925050503d8060008114620010ac576040519150601f19603f3d011682016040523d82523d6000602084013e620010b1565b606091505b5050905080620011205760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b5062001445565b60225463ffffffff6101009091048116908716036200115c57620011566001600160a01b0386168484620020e2565b62001445565b600086866040516020016200117392919062002cc4565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013ca57600080600085806020019051810190620011c5919062002df3565b925092509250600085848484604051620011df90620023d6565b620011ed9392919062002bbd565b8190604051809103906000f59050801580156200120e573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001263573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001289919062002a9b565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013b89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001442565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200141a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001440919062002a9b565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200147e95949392919062002dbc565b60405180910390a150505050505050505050565b600080620014a36101008462002d30565b90506000620014b56101008562002e69565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014ef92919062002cc4565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200152290620023d6565b601f1982820381018352601f9091011660408190526200154f908d908d908d908d908d9060200162002ea9565b60408051601f19818403018152908290526200156f929160200162002eea565b60405160208183030381529060405280519060200120604051602001620015c894939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620016145760405162461bcd60e51b8152600401620005539062002a24565b60225463ffffffff6101009091048116908416036200169c5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016f098979695949392919062002bfa565b60405180910390a162001727620009536001602260019054906101000a900463ffffffff1633878734888051906020012062000c53565b6026546001600160a01b03166333d6247d6200174262000a5e565b6040518263ffffffff1660e01b81526004016200176191815260200190565b600060405180830381600087803b1580156200177c57600080fd5b505af115801562001791573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017c75760405162461bcd60e51b8152600401620005539062002c67565b62000a0962002114565b60006200181483838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021c392505050565b9050632afa533160e01b6001600160e01b031982160162001a0d57600080808080808062001846896004818d62002f1d565b81019062001855919062002f49565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018975760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b0386163014620018c25760405162461bcd60e51b8152600401620005539062003001565b8a8514620019395760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620019b9919062002d9e565b6000604051808303816000865af19150503d8060008114620019f8576040519150601f19603f3d011682016040523d82523d6000602084013e620019fd565b606091505b5050505050505050505062001bf2565b6001600160e01b031981166323f2ebc360e21b1462001a835760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a9b8a6004818e62002f1d565b81019062001aaa919062003052565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001aee5760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b038716301462001b195760405162461bcd60e51b8152600401620005539062003001565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001ba2919062002d9e565b6000604051808303816000865af19150503d806000811462001be1576040519150601f19603f3d011682016040523d82523d6000602084013e62001be6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdf9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021ca565b80600162001c7760206002620031db565b62001c839190620031e9565b6021541062001ce85760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cfd919062003203565b909155505060215460005b602081101562001da7578160011660010362001d3d57826001826020811062001d355762001d3562002cee565b015550505050565b6001816020811062001d535762001d5362002cee565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d90919062002d30565b91508062001d9e8162002d47565b91505062001d08565b5062001db26200321e565b505050565b60225460ff161562001ddd5760405162461bcd60e51b8152600401620005539062002a24565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001e268a63ffffffff1662001492565b1562001e7d5760405162461bcd60e51b81526020600482015260306024820152600080516020620047bb83398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ef1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f17919062003234565b90508060000362001f805760405162461bcd60e51b81526020600482015260396024820152600080516020620047bb83398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff8781166101009092041614620020025760405162461bcd60e51b81526020600482015260436024820152600080516020620047bb83398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff166200202057508862002023565b50895b6200204e6200203f848b8b8b8b8b8b8051906020012062000c53565b8e8e63ffffffff168462000b51565b620009c35760405162461bcd60e51b815260206004820152602c6024820152600080516020620047bb83398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020b06101008362002d30565b90506000620020c26101008462002e69565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001db290849063a9059cbb60e01b9060640162001c2e565b60225460ff166200218e5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002221826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022a39092919063ffffffff16565b80519091501562001db2578080602001905181019062002242919062002a9b565b62001db25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c4b848460008585600080866001600160a01b03168587604051620022cd919062002d9e565b60006040518083038185875af1925050503d80600081146200230c576040519150601f19603f3d011682016040523d82523d6000602084013e62002311565b606091505b509150915062002324878383876200232f565b979650505050505050565b60608315620023a35782516000036200239b576001600160a01b0385163b6200239b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c4b565b62000c4b8383815115620023ba5781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200324e565b611557806200326483390190565b6001600160a01b0381168114620023fa57600080fd5b50565b80356200240a81620023e4565b919050565b803563ffffffff811681146200240a57600080fd5b60008083601f8401126200243757600080fd5b50813567ffffffffffffffff8111156200245057600080fd5b6020830191508360208285010111156200246957600080fd5b9250929050565b60008060008060008060a087890312156200248a57600080fd5b86356200249781620023e4565b9550620024a7602088016200240f565b94506040870135620024b981620023e4565b935060608701359250608087013567ffffffffffffffff811115620024dd57600080fd5b620024eb89828a0162002424565b979a9699509497509295939492505050565b600080604083850312156200251157600080fd5b6200251c836200240f565b915060208301356200252e81620023e4565b809150509250929050565b6000602082840312156200254c57600080fd5b81356200255981620023e4565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620025a257620025a262002560565b604052919050565b600082601f830112620025bc57600080fd5b8135602067ffffffffffffffff821115620025db57620025db62002560565b8160051b620025ec82820162002576565b92835284810182019282810190878511156200260757600080fd5b83870192505b8483101562002324578235825291830191908301906200260d565b600080600080608085870312156200263f57600080fd5b84359350602085013567ffffffffffffffff808211156200265f57600080fd5b6200266d88838901620025aa565b94506040870135915080821682146200268557600080fd5b509396929550929360600135925050565b60ff81168114620023fa57600080fd5b600080600080600080600060e0888a031215620026c257600080fd5b8735620026cf8162002696565b9650620026df602089016200240f565b95506040880135620026f181620023e4565b945062002701606089016200240f565b935060808801356200271381620023e4565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200274d576200274d62002560565b50601f01601f191660200190565b600082601f8301126200276d57600080fd5b8135620027846200277e8262002730565b62002576565b8181528460208386010111156200279a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027d857600080fd5b8a3567ffffffffffffffff80821115620027f157600080fd5b620027ff8e838f01620025aa565b9b506200280f60208e016200240f565b9a5060408d0135995060608d013598506200282d60808e016200240f565b97506200283d60a08e01620023fd565b96506200284d60c08e016200240f565b95506200285d60e08e01620023fd565b94506101008d013593506101208d01359150808211156200287d57600080fd5b506200288c8d828e016200275b565b9150509295989b9194979a5092959850565b600080600060608486031215620028b457600080fd5b620028bf846200240f565b92506020840135620028d181620023e4565b91506040840135620028e381620023e4565b809150509250925092565b6000602082840312156200290157600080fd5b5035919050565b600080600080600080600060a0888a0312156200292457600080fd5b6200292f886200240f565b965060208801356200294181620023e4565b9550604088013567ffffffffffffffff808211156200295f57600080fd5b6200296d8b838c0162002424565b909750955060608a01359150808211156200298757600080fd5b50620029968a828b0162002424565b9094509250506080880135620029ac8162002696565b8091505092959891949750929550565b600080600060608486031215620029d257600080fd5b620029dd846200240f565b92506020840135620029ef81620023e4565b9150604084013567ffffffffffffffff81111562002a0c57600080fd5b62002a1a868287016200275b565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b8015158114620023fa57600080fd5b60006020828403121562002aae57600080fd5b8151620025598162002a8c565b60005b8381101562002ad857818101518382015260200162002abe565b8381111562000fdf5750506000910152565b600082601f83011262002afc57600080fd5b815162002b0d6200277e8262002730565b81815284602083860101111562002b2357600080fd5b62000c4b82602083016020870162002abb565b60006020828403121562002b4957600080fd5b815167ffffffffffffffff81111562002b6157600080fd5b62000c4b8482850162002aea565b60006020828403121562002b8257600080fd5b8151620025598162002696565b6000815180845262002ba981602086016020860162002abb565b601f01601f19169290920160200192915050565b60608152600062002bd2606083018662002b8f565b828103602084015262002be6818662002b8f565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002c4e8483018762002b8f565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002d425762002d4262002d04565b500490565b60006001820162002d5c5762002d5c62002d1a565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d959083018462002b8f565b95945050505050565b6000825162002db281846020870162002abb565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002e0957600080fd5b835167ffffffffffffffff8082111562002e2257600080fd5b62002e308783880162002aea565b9450602086015191508082111562002e4757600080fd5b5062002e568682870162002aea565b9250506040840151620028e38162002696565b60008262002e7b5762002e7b62002d04565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002ebf60608301878962002e80565b828103602084015262002ed481868862002e80565b91505060ff831660408301529695505050505050565b6000835162002efe81846020880162002abb565b83519083019062002f1481836020880162002abb565b01949350505050565b6000808585111562002f2e57600080fd5b8386111562002f3c57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f6557600080fd5b873562002f7281620023e4565b9650602088013562002f8481620023e4565b955060408801359450606088013593506080880135620027138162002696565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b0312156200307057600080fd5b88356200307d81620023e4565b975060208901356200308f81620023e4565b965060408901359550606089013594506080890135620030af8162002a8c565b935060a0890135620030c18162002696565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200311f57816000190482111562003103576200310362002d1a565b808516156200311157918102915b93841c9390800290620030e3565b509250929050565b600082620031385750600162000a58565b81620031475750600062000a58565b81600181146200316057600281146200316b576200318b565b600191505062000a58565b60ff8411156200317f576200317f62002d1a565b50506001821b62000a58565b5060208310610133831016604e8410600b8410161715620031b0575081810a62000a58565b620031bc8383620030de565b8060001904821115620031d357620031d362002d1a565b029392505050565b600062002559838362003127565b600082821015620031fe57620031fe62002d1a565b500390565b6000821982111562003219576200321962002d1a565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200324757600080fd5b5051919050565b60208152600062002559602083018462002b8f56fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea264697066735822122070fae8b3daebe7fc894d50296739b7a26e638f37239109230c7dfd552785f2a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212208fde18b5efa27a9c6a9604bbebb39629f3a307cad6b8fab402a033ff62a94bfe64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZkEVMBridgeMock.json b/compiled-contracts/PolygonZkEVMBridgeMock.json index 69f571289..f6770c09d 100644 --- a/compiled-contracts/PolygonZkEVMBridgeMock.json +++ b/compiled-contracts/PolygonZkEVMBridgeMock.json @@ -534,7 +534,7 @@ }, { "internalType": "address", - "name": "_poeAddress", + "name": "_zkEVMaddress", "type": "address" } ], @@ -614,19 +614,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "poeAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -788,10 +775,23 @@ ], "stateMutability": "view", "type": "function" + }, + { + "inputs": [], + "name": "zkEVMaddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50614c1a806100206000396000f3fe608060405260043610620001f35760003560e01c806381b1c174116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b806381b1c17414620004615780638da5cb5b146200049b5780638f61151914620004bb57600080fd5b8063318aee3d116200018d5780634638554911620001585780634638554914620003da578063647c576c14620003ff578063715018a614620004245780637b6323c1146200043c57600080fd5b8063318aee3d14620003095780633ae0504714620003785780633da8168214620003905780633e19704314620003b557600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f620002093660046200285c565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f6200071e565b3480156200026757600080fd5b506200027f62000279366004620028e9565b62000757565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002925565b620007aa565b348015620002ca57600080fd5b506200020f620002dc3660046200293f565b620007b9565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002964565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b50620002fa620007e5565b3480156200039d57600080fd5b506200022d620003af36600462002a4c565b620008d8565b348015620003c257600080fd5b50620002fa620003d436600462002aca565b620009da565b348015620003e757600080fd5b506200020f620003f936600462002bdb565b62000a67565b3480156200040c57600080fd5b506200020f6200041e36600462002cc2565b62000c0d565b3480156200043157600080fd5b506200020f62000d82565b3480156200044957600080fd5b506200020f6200045b36600462002bdb565b62000d98565b3480156200046e57600080fd5b506200027f6200048036600462002925565b6024602052600090815260409020546001600160a01b031681565b348015620004a857600080fd5b50605a546001600160a01b03166200027f565b348015620004c857600080fd5b506027546200027f906001600160a01b031681565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002925565b62001245565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002d12565b6200128a565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002dc6565b620013a1565b348015620005e957600080fd5b506200020f62001553565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002925565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002964565b6200158a565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007065760405162461bcd60e51b815260206004820152604760248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b6200071686868686868662001609565b505050505050565b6027546001600160a01b031633146200074b5760405162461bcd60e51b8152600401620006fd9062002e2e565b6200075562001a9f565b565b60006024600084846040516020016200077292919062002e8b565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b462001afd565b608c55565b620007c362001afd565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008cf57826001166001036200085057600181602081106200081c576200081c62002eb5565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200087d565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088a60028462002ef7565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c69062002f0e565b915050620007f0565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009cb5781600116600103620009555786818151811062000913576200091362002eb5565b60200260200101518360405160200162000937929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009a7565b828782815181106200096b576200096b62002eb5565b60200260200101516040516020016200098e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b460028362002ef7565b915080620009c28162002f0e565b915050620008e8565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a8d5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000aa38a8a8a8a8a8a8a8a8a8a600162001b59565b62000ab48963ffffffff1662001de4565b6000836001600160a01b03168387898560405160240162000ad89392919062002fef565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b0f91906200302a565b60006040518083038185875af1925050503d806000811462000b4e576040519150601f19603f3d011682016040523d82523d6000602084013e62000b53565b606091505b505090508062000bbf5760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b6064820152608401620006fd565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bf895949392919062003048565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c2e5750600054600160ff909116105b8062000c4a5750303b15801562000c4a575060005460ff166001145b62000caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006fd565b6000805460ff19166001179055801562000cd3576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d3562001e26565b801562000d7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8c62001afd565b62000755600062001e99565b60225460ff161562000dbe5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000dd48a8a8a8a8a8a8a8a8a8a600062001b59565b62000de58963ffffffff1662001de4565b6001600160a01b03851662000eda57604080516000808252602082019092526001600160a01b03851690849060405162000e2091906200302a565b60006040518083038185875af1925050503d806000811462000e5f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e64565b606091505b505090508062000ed35760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b6064820152608401620006fd565b50620011f8565b60225463ffffffff61010090910481169087160362000f0f5762000f096001600160a01b038616848462001eeb565b620011f8565b6000868660405160200162000f2692919062002e8b565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200117d5760008060008580602001905181019062000f789190620030cb565b92509250925060008584848460405162000f9290620027c5565b62000fa09392919062003141565b8190604051809103906000f590508015801562000fc1573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001016573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200103c91906200318d565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200116b9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011f5565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620011cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011f391906200318d565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200123195949392919062003048565b60405180910390a150505050505050505050565b600080620012566101008462002ef7565b905060006200126861010085620031ad565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620012a292919062002e8b565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012d590620027c5565b601f1982820381018352601f90910116604081905262001302908d908d908d908d908d90602001620031ed565b60408051601f19818403018152908290526200132292916020016200322e565b604051602081830303815290604052805190602001206040516020016200137b94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013c75760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff6101009091048116908416036200144f5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c460000006064820152608401620006fd565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620014a398979695949392919062003261565b60405180910390a1620014e0620014da6001602260019054906101000a900463ffffffff16338787348880519060200120620009da565b62001f55565b6026546001600160a01b03166333d6247d620014fb620007e5565b6040518263ffffffff1660e01b81526004016200151a91815260200190565b600060405180830381600087803b1580156200153557600080fd5b505af11580156200154a573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015805760405162461bcd60e51b8152600401620006fd9062002e2e565b62000755620020a1565b6200159462001afd565b6001600160a01b038116620015fb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006fd565b620016068162001e99565b50565b60225460ff16156200162f5760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff610100909104811690861603620016b75760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c4600000000006064820152608401620006fd565b60008060606001600160a01b0389166200174e5785341462001744576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c55456064820152608401620006fd565b60009150620019bf565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200181c57604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af1158015620017e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200180991906200318d565b50602081015181519094509250620019bd565b84156200183157620018318a88888862002150565b620018486001600160a01b038b1633308a62002578565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200189f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018c99190810190620032ce565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001908573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620019329190810190620032ce565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001971573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001997919062003307565b604051602001620019ab9392919062003141565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162001a0198979695949392919062003261565b60405180910390a162001a26620014da600084868c8c8c8880519060200120620009da565b6026546001600160a01b03166333d6247d62001a41620007e5565b6040518263ffffffff1660e01b815260040162001a6091815260200190565b600060405180830381600087803b15801562001a7b57600080fd5b505af115801562001a90573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001ac55760405162461bcd60e51b8152600401620006fd9062002f2a565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006fd565b62001b6a8a63ffffffff1662001245565b1562001bc15760405162461bcd60e51b8152602060048201526030602482015260008051602062004bc583398151915260448201526f081053149150511657d0d3105253515160821b6064820152608401620006fd565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001c35573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c5b919062003327565b90508060000362001cc45760405162461bcd60e51b8152602060048201526039602482015260008051602062004bc583398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c4944000000000000006064820152608401620006fd565b60225463ffffffff878116610100909204161462001d465760405162461bcd60e51b8152602060048201526043602482015260008051602062004bc583398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a401620006fd565b602254600090610100900463ffffffff1662001d6457508862001d67565b50895b62001d9262001d83848b8b8b8b8b8b80519060200120620009da565b8e8e63ffffffff1684620008d8565b62001a905760405162461bcd60e51b815260206004820152602c602482015260008051602062004bc583398151915260448201526b0814d35517d253959053125160a21b6064820152608401620006fd565b600062001df46101008362002ef7565b9050600062001e0661010084620031ad565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001e935760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006fd565b62000755335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001f5090849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620025b2565b505050565b80600162001f66602060026200343e565b62001f7291906200344c565b6021541062001fd75760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b6064820152608401620006fd565b60016021600082825462001fec919062003466565b909155505060215460005b60208110156200209657816001166001036200202c57826001826020811062002024576200202462002eb5565b015550505050565b6001816020811062002042576200204262002eb5565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200207f919062002ef7565b9150806200208d8162002f0e565b91505062001ff7565b5062001f5062003481565b60225460ff166200211b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006fd565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200219383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200268b92505050565b9050632afa533160e01b6001600160e01b03198216016200238c576000808080808080620021c5896004818d62003497565b810190620021d49190620034c3565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620022165760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0386163014620022415760405162461bcd60e51b8152600401620006fd906200357b565b8a8514620022b85760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d41544348000000000000006064820152608401620006fd565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200233891906200302a565b6000604051808303816000865af19150503d806000811462002377576040519150601f19603f3d011682016040523d82523d6000602084013e6200237c565b606091505b5050505050505050505062002571565b6001600160e01b031981166323f2ebc360e21b14620024025760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b6064820152608401620006fd565b6000808080808080806200241a8a6004818e62003497565b810190620024299190620035cc565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200246d5760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0387163014620024985760405162461bcd60e51b8152600401620006fd906200357b565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f16916200252191906200302a565b6000604051808303816000865af19150503d806000811462002560576040519150601f19603f3d011682016040523d82523d6000602084013e62002565565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d7c9085906323b872dd60e01b9060840162001f18565b600062002609826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620026929092919063ffffffff16565b80519091501562001f5057808060200190518101906200262a91906200318d565b62001f505760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006fd565b6020015190565b6060620009d2848460008585600080866001600160a01b03168587604051620026bc91906200302a565b60006040518083038185875af1925050503d8060008114620026fb576040519150601f19603f3d011682016040523d82523d6000602084013e62002700565b606091505b509150915062002713878383876200271e565b979650505050505050565b60608315620027925782516000036200278a576001600160a01b0385163b6200278a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006fd565b5081620009d2565b620009d28383815115620027a95781518083602001fd5b8060405162461bcd60e51b8152600401620006fd919062003658565b611557806200366e83390190565b6001600160a01b03811681146200160657600080fd5b8035620027f681620027d3565b919050565b803563ffffffff81168114620027f657600080fd5b60008083601f8401126200282357600080fd5b50813567ffffffffffffffff8111156200283c57600080fd5b6020830191508360208285010111156200285557600080fd5b9250929050565b60008060008060008060a087890312156200287657600080fd5b86356200288381620027d3565b95506200289360208801620027fb565b94506040870135620028a581620027d3565b935060608701359250608087013567ffffffffffffffff811115620028c957600080fd5b620028d789828a0162002810565b979a9699509497509295939492505050565b60008060408385031215620028fd57600080fd5b6200290883620027fb565b915060208301356200291a81620027d3565b809150509250929050565b6000602082840312156200293857600080fd5b5035919050565b6000602082840312156200295257600080fd5b6200295d82620027fb565b9392505050565b6000602082840312156200297757600080fd5b81356200295d81620027d3565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620029c657620029c662002984565b604052919050565b600082601f830112620029e057600080fd5b8135602067ffffffffffffffff821115620029ff57620029ff62002984565b8160051b62002a108282016200299a565b928352848101820192828101908785111562002a2b57600080fd5b83870192505b84831015620027135782358252918301919083019062002a31565b6000806000806080858703121562002a6357600080fd5b84359350602085013567ffffffffffffffff8082111562002a8357600080fd5b62002a9188838901620029ce565b945060408701359150808216821462002aa957600080fd5b509396929550929360600135925050565b60ff811681146200160657600080fd5b600080600080600080600060e0888a03121562002ae657600080fd5b873562002af38162002aba565b965062002b0360208901620027fb565b9550604088013562002b1581620027d3565b945062002b2560608901620027fb565b9350608088013562002b3781620027d3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002b715762002b7162002984565b50601f01601f191660200190565b600082601f83011262002b9157600080fd5b813562002ba862002ba28262002b54565b6200299a565b81815284602083860101111562002bbe57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002bfc57600080fd5b8a3567ffffffffffffffff8082111562002c1557600080fd5b62002c238e838f01620029ce565b9b5062002c3360208e01620027fb565b9a5060408d0135995060608d0135985062002c5160808e01620027fb565b975062002c6160a08e01620027e9565b965062002c7160c08e01620027fb565b955062002c8160e08e01620027e9565b94506101008d013593506101208d013591508082111562002ca157600080fd5b5062002cb08d828e0162002b7f565b9150509295989b9194979a5092959850565b60008060006060848603121562002cd857600080fd5b62002ce384620027fb565b9250602084013562002cf581620027d3565b9150604084013562002d0781620027d3565b809150509250925092565b600080600080600080600060a0888a03121562002d2e57600080fd5b62002d3988620027fb565b9650602088013562002d4b81620027d3565b9550604088013567ffffffffffffffff8082111562002d6957600080fd5b62002d778b838c0162002810565b909750955060608a013591508082111562002d9157600080fd5b5062002da08a828b0162002810565b909450925050608088013562002db68162002aba565b8091505092959891949750929550565b60008060006060848603121562002ddc57600080fd5b62002de784620027fb565b9250602084013562002df981620027d3565b9150604084013567ffffffffffffffff81111562002e1657600080fd5b62002e248682870162002b7f565b9150509250925092565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002f095762002f0962002ecb565b500490565b60006001820162002f235762002f2362002ee1565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002faf57818101518382015260200162002f95565b8381111562000d7c5750506000910152565b6000815180845262002fdb81602086016020860162002f92565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff83166020820152606060408201819052600090620030219083018462002fc1565b95945050505050565b600082516200303e81846020870162002f92565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f8301126200309157600080fd5b8151620030a262002ba28262002b54565b818152846020838601011115620030b857600080fd5b620009d282602083016020870162002f92565b600080600060608486031215620030e157600080fd5b835167ffffffffffffffff80821115620030fa57600080fd5b62003108878388016200307f565b945060208601519150808211156200311f57600080fd5b506200312e868287016200307f565b925050604084015162002d078162002aba565b60608152600062003156606083018662002fc1565b82810360208401526200316a818662002fc1565b91505060ff83166040830152949350505050565b80151581146200160657600080fd5b600060208284031215620031a057600080fd5b81516200295d816200317e565b600082620031bf57620031bf62002ecb565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003203606083018789620031c4565b828103602084015262003218818688620031c4565b91505060ff831660408301529695505050505050565b600083516200324281846020880162002f92565b8351908301906200325881836020880162002f92565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032b58483018762002fc1565b925080851660e085015250509998505050505050505050565b600060208284031215620032e157600080fd5b815167ffffffffffffffff811115620032f957600080fd5b620009d2848285016200307f565b6000602082840312156200331a57600080fd5b81516200295d8162002aba565b6000602082840312156200333a57600080fd5b5051919050565b600181815b808511156200338257816000190482111562003366576200336662002ee1565b808516156200337457918102915b93841c939080029062003346565b509250929050565b6000826200339b57506001620007a4565b81620033aa57506000620007a4565b8160018114620033c35760028114620033ce57620033ee565b6001915050620007a4565b60ff841115620033e257620033e262002ee1565b50506001821b620007a4565b5060208310610133831016604e8410600b841016171562003413575081810a620007a4565b6200341f838362003341565b806000190482111562003436576200343662002ee1565b029392505050565b60006200295d83836200338a565b60008282101562003461576200346162002ee1565b500390565b600082198211156200347c576200347c62002ee1565b500190565b634e487b7160e01b600052600160045260246000fd5b60008085851115620034a857600080fd5b83861115620034b657600080fd5b5050820193919092039150565b600080600080600080600060e0888a031215620034df57600080fd5b8735620034ec81620027d3565b96506020880135620034fe81620027d3565b95506040880135945060608801359350608088013562002b378162002aba565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b031215620035ea57600080fd5b8835620035f781620027d3565b975060208901356200360981620027d3565b96506040890135955060608901359450608089013562003629816200317e565b935060a08901356200363b8162002aba565b979a969950949793969295929450505060c08201359160e0013590565b6020815260006200295d602083018462002fc156fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea264697066735822122070fae8b3daebe7fc894d50296739b7a26e638f37239109230c7dfd552785f2a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212200c1a9aa1f10dc47f955539f6956404fe6851250ffeda1aee8fe15bdecba13e3564736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001f35760003560e01c806381b1c174116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b806381b1c17414620004615780638da5cb5b146200049b5780638f61151914620004bb57600080fd5b8063318aee3d116200018d5780634638554911620001585780634638554914620003da578063647c576c14620003ff578063715018a614620004245780637b6323c1146200043c57600080fd5b8063318aee3d14620003095780633ae0504714620003785780633da8168214620003905780633e19704314620003b557600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f620002093660046200285c565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f6200071e565b3480156200026757600080fd5b506200027f62000279366004620028e9565b62000757565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002925565b620007aa565b348015620002ca57600080fd5b506200020f620002dc3660046200293f565b620007b9565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002964565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b50620002fa620007e5565b3480156200039d57600080fd5b506200022d620003af36600462002a4c565b620008d8565b348015620003c257600080fd5b50620002fa620003d436600462002aca565b620009da565b348015620003e757600080fd5b506200020f620003f936600462002bdb565b62000a67565b3480156200040c57600080fd5b506200020f6200041e36600462002cc2565b62000c0d565b3480156200043157600080fd5b506200020f62000d82565b3480156200044957600080fd5b506200020f6200045b36600462002bdb565b62000d98565b3480156200046e57600080fd5b506200027f6200048036600462002925565b6024602052600090815260409020546001600160a01b031681565b348015620004a857600080fd5b50605a546001600160a01b03166200027f565b348015620004c857600080fd5b506027546200027f906001600160a01b031681565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002925565b62001245565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002d12565b6200128a565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002dc6565b620013a1565b348015620005e957600080fd5b506200020f62001553565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002925565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002964565b6200158a565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007065760405162461bcd60e51b815260206004820152604760248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b6200071686868686868662001609565b505050505050565b6027546001600160a01b031633146200074b5760405162461bcd60e51b8152600401620006fd9062002e2e565b6200075562001a9f565b565b60006024600084846040516020016200077292919062002e8b565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b462001afd565b608c55565b620007c362001afd565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008cf57826001166001036200085057600181602081106200081c576200081c62002eb5565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200087d565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088a60028462002ef7565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c69062002f0e565b915050620007f0565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009cb5781600116600103620009555786818151811062000913576200091362002eb5565b60200260200101518360405160200162000937929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009a7565b828782815181106200096b576200096b62002eb5565b60200260200101516040516020016200098e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b460028362002ef7565b915080620009c28162002f0e565b915050620008e8565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a8d5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000aa38a8a8a8a8a8a8a8a8a8a600162001b59565b62000ab48963ffffffff1662001de4565b6000836001600160a01b03168387898560405160240162000ad89392919062002fef565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b0f91906200302a565b60006040518083038185875af1925050503d806000811462000b4e576040519150601f19603f3d011682016040523d82523d6000602084013e62000b53565b606091505b505090508062000bbf5760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b6064820152608401620006fd565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bf895949392919062003048565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c2e5750600054600160ff909116105b8062000c4a5750303b15801562000c4a575060005460ff166001145b62000caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006fd565b6000805460ff19166001179055801562000cd3576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d3562001e26565b801562000d7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8c62001afd565b62000755600062001e99565b60225460ff161562000dbe5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000dd48a8a8a8a8a8a8a8a8a8a600062001b59565b62000de58963ffffffff1662001de4565b6001600160a01b03851662000eda57604080516000808252602082019092526001600160a01b03851690849060405162000e2091906200302a565b60006040518083038185875af1925050503d806000811462000e5f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e64565b606091505b505090508062000ed35760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b6064820152608401620006fd565b50620011f8565b60225463ffffffff61010090910481169087160362000f0f5762000f096001600160a01b038616848462001eeb565b620011f8565b6000868660405160200162000f2692919062002e8b565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200117d5760008060008580602001905181019062000f789190620030cb565b92509250925060008584848460405162000f9290620027c5565b62000fa09392919062003141565b8190604051809103906000f590508015801562000fc1573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001016573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200103c91906200318d565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200116b9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011f5565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620011cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011f391906200318d565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200123195949392919062003048565b60405180910390a150505050505050505050565b600080620012566101008462002ef7565b905060006200126861010085620031ad565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620012a292919062002e8b565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012d590620027c5565b601f1982820381018352601f90910116604081905262001302908d908d908d908d908d90602001620031ed565b60408051601f19818403018152908290526200132292916020016200322e565b604051602081830303815290604052805190602001206040516020016200137b94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013c75760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff6101009091048116908416036200144f5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c460000006064820152608401620006fd565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620014a398979695949392919062003261565b60405180910390a1620014e0620014da6001602260019054906101000a900463ffffffff16338787348880519060200120620009da565b62001f55565b6026546001600160a01b03166333d6247d620014fb620007e5565b6040518263ffffffff1660e01b81526004016200151a91815260200190565b600060405180830381600087803b1580156200153557600080fd5b505af11580156200154a573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015805760405162461bcd60e51b8152600401620006fd9062002e2e565b62000755620020a1565b6200159462001afd565b6001600160a01b038116620015fb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006fd565b620016068162001e99565b50565b60225460ff16156200162f5760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff610100909104811690861603620016b75760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c4600000000006064820152608401620006fd565b60008060606001600160a01b0389166200174e5785341462001744576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c55456064820152608401620006fd565b60009150620019bf565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200181c57604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af1158015620017e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200180991906200318d565b50602081015181519094509250620019bd565b84156200183157620018318a88888862002150565b620018486001600160a01b038b1633308a62002578565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200189f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018c99190810190620032ce565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001908573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620019329190810190620032ce565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001971573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001997919062003307565b604051602001620019ab9392919062003141565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162001a0198979695949392919062003261565b60405180910390a162001a26620014da600084868c8c8c8880519060200120620009da565b6026546001600160a01b03166333d6247d62001a41620007e5565b6040518263ffffffff1660e01b815260040162001a6091815260200190565b600060405180830381600087803b15801562001a7b57600080fd5b505af115801562001a90573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001ac55760405162461bcd60e51b8152600401620006fd9062002f2a565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006fd565b62001b6a8a63ffffffff1662001245565b1562001bc15760405162461bcd60e51b8152602060048201526030602482015260008051602062004bc583398151915260448201526f081053149150511657d0d3105253515160821b6064820152608401620006fd565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001c35573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c5b919062003327565b90508060000362001cc45760405162461bcd60e51b8152602060048201526039602482015260008051602062004bc583398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c4944000000000000006064820152608401620006fd565b60225463ffffffff878116610100909204161462001d465760405162461bcd60e51b8152602060048201526043602482015260008051602062004bc583398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a401620006fd565b602254600090610100900463ffffffff1662001d6457508862001d67565b50895b62001d9262001d83848b8b8b8b8b8b80519060200120620009da565b8e8e63ffffffff1684620008d8565b62001a905760405162461bcd60e51b815260206004820152602c602482015260008051602062004bc583398151915260448201526b0814d35517d253959053125160a21b6064820152608401620006fd565b600062001df46101008362002ef7565b9050600062001e0661010084620031ad565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001e935760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006fd565b62000755335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001f5090849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620025b2565b505050565b80600162001f66602060026200343e565b62001f7291906200344c565b6021541062001fd75760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b6064820152608401620006fd565b60016021600082825462001fec919062003466565b909155505060215460005b60208110156200209657816001166001036200202c57826001826020811062002024576200202462002eb5565b015550505050565b6001816020811062002042576200204262002eb5565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200207f919062002ef7565b9150806200208d8162002f0e565b91505062001ff7565b5062001f5062003481565b60225460ff166200211b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006fd565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200219383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200268b92505050565b9050632afa533160e01b6001600160e01b03198216016200238c576000808080808080620021c5896004818d62003497565b810190620021d49190620034c3565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620022165760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0386163014620022415760405162461bcd60e51b8152600401620006fd906200357b565b8a8514620022b85760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d41544348000000000000006064820152608401620006fd565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200233891906200302a565b6000604051808303816000865af19150503d806000811462002377576040519150601f19603f3d011682016040523d82523d6000602084013e6200237c565b606091505b5050505050505050505062002571565b6001600160e01b031981166323f2ebc360e21b14620024025760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b6064820152608401620006fd565b6000808080808080806200241a8a6004818e62003497565b810190620024299190620035cc565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200246d5760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0387163014620024985760405162461bcd60e51b8152600401620006fd906200357b565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f16916200252191906200302a565b6000604051808303816000865af19150503d806000811462002560576040519150601f19603f3d011682016040523d82523d6000602084013e62002565565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d7c9085906323b872dd60e01b9060840162001f18565b600062002609826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620026929092919063ffffffff16565b80519091501562001f5057808060200190518101906200262a91906200318d565b62001f505760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006fd565b6020015190565b6060620009d2848460008585600080866001600160a01b03168587604051620026bc91906200302a565b60006040518083038185875af1925050503d8060008114620026fb576040519150601f19603f3d011682016040523d82523d6000602084013e62002700565b606091505b509150915062002713878383876200271e565b979650505050505050565b60608315620027925782516000036200278a576001600160a01b0385163b6200278a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006fd565b5081620009d2565b620009d28383815115620027a95781518083602001fd5b8060405162461bcd60e51b8152600401620006fd919062003658565b611557806200366e83390190565b6001600160a01b03811681146200160657600080fd5b8035620027f681620027d3565b919050565b803563ffffffff81168114620027f657600080fd5b60008083601f8401126200282357600080fd5b50813567ffffffffffffffff8111156200283c57600080fd5b6020830191508360208285010111156200285557600080fd5b9250929050565b60008060008060008060a087890312156200287657600080fd5b86356200288381620027d3565b95506200289360208801620027fb565b94506040870135620028a581620027d3565b935060608701359250608087013567ffffffffffffffff811115620028c957600080fd5b620028d789828a0162002810565b979a9699509497509295939492505050565b60008060408385031215620028fd57600080fd5b6200290883620027fb565b915060208301356200291a81620027d3565b809150509250929050565b6000602082840312156200293857600080fd5b5035919050565b6000602082840312156200295257600080fd5b6200295d82620027fb565b9392505050565b6000602082840312156200297757600080fd5b81356200295d81620027d3565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620029c657620029c662002984565b604052919050565b600082601f830112620029e057600080fd5b8135602067ffffffffffffffff821115620029ff57620029ff62002984565b8160051b62002a108282016200299a565b928352848101820192828101908785111562002a2b57600080fd5b83870192505b84831015620027135782358252918301919083019062002a31565b6000806000806080858703121562002a6357600080fd5b84359350602085013567ffffffffffffffff8082111562002a8357600080fd5b62002a9188838901620029ce565b945060408701359150808216821462002aa957600080fd5b509396929550929360600135925050565b60ff811681146200160657600080fd5b600080600080600080600060e0888a03121562002ae657600080fd5b873562002af38162002aba565b965062002b0360208901620027fb565b9550604088013562002b1581620027d3565b945062002b2560608901620027fb565b9350608088013562002b3781620027d3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002b715762002b7162002984565b50601f01601f191660200190565b600082601f83011262002b9157600080fd5b813562002ba862002ba28262002b54565b6200299a565b81815284602083860101111562002bbe57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002bfc57600080fd5b8a3567ffffffffffffffff8082111562002c1557600080fd5b62002c238e838f01620029ce565b9b5062002c3360208e01620027fb565b9a5060408d0135995060608d0135985062002c5160808e01620027fb565b975062002c6160a08e01620027e9565b965062002c7160c08e01620027fb565b955062002c8160e08e01620027e9565b94506101008d013593506101208d013591508082111562002ca157600080fd5b5062002cb08d828e0162002b7f565b9150509295989b9194979a5092959850565b60008060006060848603121562002cd857600080fd5b62002ce384620027fb565b9250602084013562002cf581620027d3565b9150604084013562002d0781620027d3565b809150509250925092565b600080600080600080600060a0888a03121562002d2e57600080fd5b62002d3988620027fb565b9650602088013562002d4b81620027d3565b9550604088013567ffffffffffffffff8082111562002d6957600080fd5b62002d778b838c0162002810565b909750955060608a013591508082111562002d9157600080fd5b5062002da08a828b0162002810565b909450925050608088013562002db68162002aba565b8091505092959891949750929550565b60008060006060848603121562002ddc57600080fd5b62002de784620027fb565b9250602084013562002df981620027d3565b9150604084013567ffffffffffffffff81111562002e1657600080fd5b62002e248682870162002b7f565b9150509250925092565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002f095762002f0962002ecb565b500490565b60006001820162002f235762002f2362002ee1565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002faf57818101518382015260200162002f95565b8381111562000d7c5750506000910152565b6000815180845262002fdb81602086016020860162002f92565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff83166020820152606060408201819052600090620030219083018462002fc1565b95945050505050565b600082516200303e81846020870162002f92565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f8301126200309157600080fd5b8151620030a262002ba28262002b54565b818152846020838601011115620030b857600080fd5b620009d282602083016020870162002f92565b600080600060608486031215620030e157600080fd5b835167ffffffffffffffff80821115620030fa57600080fd5b62003108878388016200307f565b945060208601519150808211156200311f57600080fd5b506200312e868287016200307f565b925050604084015162002d078162002aba565b60608152600062003156606083018662002fc1565b82810360208401526200316a818662002fc1565b91505060ff83166040830152949350505050565b80151581146200160657600080fd5b600060208284031215620031a057600080fd5b81516200295d816200317e565b600082620031bf57620031bf62002ecb565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003203606083018789620031c4565b828103602084015262003218818688620031c4565b91505060ff831660408301529695505050505050565b600083516200324281846020880162002f92565b8351908301906200325881836020880162002f92565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032b58483018762002fc1565b925080851660e085015250509998505050505050505050565b600060208284031215620032e157600080fd5b815167ffffffffffffffff811115620032f957600080fd5b620009d2848285016200307f565b6000602082840312156200331a57600080fd5b81516200295d8162002aba565b6000602082840312156200333a57600080fd5b5051919050565b600181815b808511156200338257816000190482111562003366576200336662002ee1565b808516156200337457918102915b93841c939080029062003346565b509250929050565b6000826200339b57506001620007a4565b81620033aa57506000620007a4565b8160018114620033c35760028114620033ce57620033ee565b6001915050620007a4565b60ff841115620033e257620033e262002ee1565b50506001821b620007a4565b5060208310610133831016604e8410600b841016171562003413575081810a620007a4565b6200341f838362003341565b806000190482111562003436576200343662002ee1565b029392505050565b60006200295d83836200338a565b60008282101562003461576200346162002ee1565b500390565b600082198211156200347c576200347c62002ee1565b500190565b634e487b7160e01b600052600160045260246000fd5b60008085851115620034a857600080fd5b83861115620034b657600080fd5b5050820193919092039150565b600080600080600080600060e0888a031215620034df57600080fd5b8735620034ec81620027d3565b96506020880135620034fe81620027d3565b95506040880135945060608801359350608088013562002b378162002aba565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b031215620035ea57600080fd5b8835620035f781620027d3565b975060208901356200360981620027d3565b96506040890135955060608901359450608089013562003629816200317e565b935060a08901356200363b8162002aba565b979a969950949793969295929450505060c08201359160e0013590565b6020815260006200295d602083018462002fc156fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea264697066735822122070fae8b3daebe7fc894d50296739b7a26e638f37239109230c7dfd552785f2a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212200c1a9aa1f10dc47f955539f6956404fe6851250ffeda1aee8fe15bdecba13e3564736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50614c1a806100206000396000f3fe608060405260043610620001f35760003560e01c80637b6323c1116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b80637b6323c1146200045e57806381b1c17414620004835780638da5cb5b14620004bd57600080fd5b8063318aee3d116200018d5780633e19704311620001585780633e19704314620003d75780634638554914620003fc578063647c576c1462000421578063715018a6146200044657600080fd5b8063318aee3d146200030957806337883a3e14620003785780633ae05047146200039a5780633da8168214620003b257600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f620002093660046200285c565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f6200071e565b3480156200026757600080fd5b506200027f62000279366004620028e9565b62000757565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002925565b620007aa565b348015620002ca57600080fd5b506200020f620002dc3660046200293f565b620007b9565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002964565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b506027546200027f906001600160a01b031681565b348015620003a757600080fd5b50620002fa620007e5565b348015620003bf57600080fd5b506200022d620003d136600462002a4c565b620008d8565b348015620003e457600080fd5b50620002fa620003f636600462002aca565b620009da565b3480156200040957600080fd5b506200020f6200041b36600462002bdb565b62000a67565b3480156200042e57600080fd5b506200020f6200044036600462002cc2565b62000c0d565b3480156200045357600080fd5b506200020f62000d82565b3480156200046b57600080fd5b506200020f6200047d36600462002bdb565b62000d98565b3480156200049057600080fd5b506200027f620004a236600462002925565b6024602052600090815260409020546001600160a01b031681565b348015620004ca57600080fd5b50605a546001600160a01b03166200027f565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002925565b62001245565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002d12565b6200128a565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002dc6565b620013a1565b348015620005e957600080fd5b506200020f62001553565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002925565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002964565b6200158a565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007065760405162461bcd60e51b815260206004820152604760248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b6200071686868686868662001609565b505050505050565b6027546001600160a01b031633146200074b5760405162461bcd60e51b8152600401620006fd9062002e2e565b6200075562001a9f565b565b60006024600084846040516020016200077292919062002e8b565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b462001afd565b608c55565b620007c362001afd565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008cf57826001166001036200085057600181602081106200081c576200081c62002eb5565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200087d565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088a60028462002ef7565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c69062002f0e565b915050620007f0565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009cb5781600116600103620009555786818151811062000913576200091362002eb5565b60200260200101518360405160200162000937929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009a7565b828782815181106200096b576200096b62002eb5565b60200260200101516040516020016200098e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b460028362002ef7565b915080620009c28162002f0e565b915050620008e8565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a8d5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000aa38a8a8a8a8a8a8a8a8a8a600162001b59565b62000ab48963ffffffff1662001de4565b6000836001600160a01b03168387898560405160240162000ad89392919062002fef565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b0f91906200302a565b60006040518083038185875af1925050503d806000811462000b4e576040519150601f19603f3d011682016040523d82523d6000602084013e62000b53565b606091505b505090508062000bbf5760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b6064820152608401620006fd565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bf895949392919062003048565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c2e5750600054600160ff909116105b8062000c4a5750303b15801562000c4a575060005460ff166001145b62000caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006fd565b6000805460ff19166001179055801562000cd3576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d3562001e26565b801562000d7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8c62001afd565b62000755600062001e99565b60225460ff161562000dbe5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000dd48a8a8a8a8a8a8a8a8a8a600062001b59565b62000de58963ffffffff1662001de4565b6001600160a01b03851662000eda57604080516000808252602082019092526001600160a01b03851690849060405162000e2091906200302a565b60006040518083038185875af1925050503d806000811462000e5f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e64565b606091505b505090508062000ed35760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b6064820152608401620006fd565b50620011f8565b60225463ffffffff61010090910481169087160362000f0f5762000f096001600160a01b038616848462001eeb565b620011f8565b6000868660405160200162000f2692919062002e8b565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200117d5760008060008580602001905181019062000f789190620030cb565b92509250925060008584848460405162000f9290620027c5565b62000fa09392919062003141565b8190604051809103906000f590508015801562000fc1573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001016573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200103c91906200318d565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200116b9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011f5565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620011cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011f391906200318d565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200123195949392919062003048565b60405180910390a150505050505050505050565b600080620012566101008462002ef7565b905060006200126861010085620031ad565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620012a292919062002e8b565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012d590620027c5565b601f1982820381018352601f90910116604081905262001302908d908d908d908d908d90602001620031ed565b60408051601f19818403018152908290526200132292916020016200322e565b604051602081830303815290604052805190602001206040516020016200137b94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013c75760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff6101009091048116908416036200144f5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c460000006064820152608401620006fd565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620014a398979695949392919062003261565b60405180910390a1620014e0620014da6001602260019054906101000a900463ffffffff16338787348880519060200120620009da565b62001f55565b6026546001600160a01b03166333d6247d620014fb620007e5565b6040518263ffffffff1660e01b81526004016200151a91815260200190565b600060405180830381600087803b1580156200153557600080fd5b505af11580156200154a573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015805760405162461bcd60e51b8152600401620006fd9062002e2e565b62000755620020a1565b6200159462001afd565b6001600160a01b038116620015fb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006fd565b620016068162001e99565b50565b60225460ff16156200162f5760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff610100909104811690861603620016b75760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c4600000000006064820152608401620006fd565b60008060606001600160a01b0389166200174e5785341462001744576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c55456064820152608401620006fd565b60009150620019bf565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200181c57604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af1158015620017e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200180991906200318d565b50602081015181519094509250620019bd565b84156200183157620018318a88888862002150565b620018486001600160a01b038b1633308a62002578565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200189f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018c99190810190620032ce565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001908573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620019329190810190620032ce565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001971573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001997919062003307565b604051602001620019ab9392919062003141565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162001a0198979695949392919062003261565b60405180910390a162001a26620014da600084868c8c8c8880519060200120620009da565b6026546001600160a01b03166333d6247d62001a41620007e5565b6040518263ffffffff1660e01b815260040162001a6091815260200190565b600060405180830381600087803b15801562001a7b57600080fd5b505af115801562001a90573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001ac55760405162461bcd60e51b8152600401620006fd9062002f2a565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006fd565b62001b6a8a63ffffffff1662001245565b1562001bc15760405162461bcd60e51b8152602060048201526030602482015260008051602062004bc583398151915260448201526f081053149150511657d0d3105253515160821b6064820152608401620006fd565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001c35573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c5b919062003327565b90508060000362001cc45760405162461bcd60e51b8152602060048201526039602482015260008051602062004bc583398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c4944000000000000006064820152608401620006fd565b60225463ffffffff878116610100909204161462001d465760405162461bcd60e51b8152602060048201526043602482015260008051602062004bc583398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a401620006fd565b602254600090610100900463ffffffff1662001d6457508862001d67565b50895b62001d9262001d83848b8b8b8b8b8b80519060200120620009da565b8e8e63ffffffff1684620008d8565b62001a905760405162461bcd60e51b815260206004820152602c602482015260008051602062004bc583398151915260448201526b0814d35517d253959053125160a21b6064820152608401620006fd565b600062001df46101008362002ef7565b9050600062001e0661010084620031ad565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001e935760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006fd565b62000755335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001f5090849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620025b2565b505050565b80600162001f66602060026200343e565b62001f7291906200344c565b6021541062001fd75760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b6064820152608401620006fd565b60016021600082825462001fec919062003466565b909155505060215460005b60208110156200209657816001166001036200202c57826001826020811062002024576200202462002eb5565b015550505050565b6001816020811062002042576200204262002eb5565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200207f919062002ef7565b9150806200208d8162002f0e565b91505062001ff7565b5062001f5062003481565b60225460ff166200211b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006fd565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200219383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200268b92505050565b9050632afa533160e01b6001600160e01b03198216016200238c576000808080808080620021c5896004818d62003497565b810190620021d49190620034c3565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620022165760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0386163014620022415760405162461bcd60e51b8152600401620006fd906200357b565b8a8514620022b85760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d41544348000000000000006064820152608401620006fd565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200233891906200302a565b6000604051808303816000865af19150503d806000811462002377576040519150601f19603f3d011682016040523d82523d6000602084013e6200237c565b606091505b5050505050505050505062002571565b6001600160e01b031981166323f2ebc360e21b14620024025760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b6064820152608401620006fd565b6000808080808080806200241a8a6004818e62003497565b810190620024299190620035cc565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200246d5760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0387163014620024985760405162461bcd60e51b8152600401620006fd906200357b565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f16916200252191906200302a565b6000604051808303816000865af19150503d806000811462002560576040519150601f19603f3d011682016040523d82523d6000602084013e62002565565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d7c9085906323b872dd60e01b9060840162001f18565b600062002609826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620026929092919063ffffffff16565b80519091501562001f5057808060200190518101906200262a91906200318d565b62001f505760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006fd565b6020015190565b6060620009d2848460008585600080866001600160a01b03168587604051620026bc91906200302a565b60006040518083038185875af1925050503d8060008114620026fb576040519150601f19603f3d011682016040523d82523d6000602084013e62002700565b606091505b509150915062002713878383876200271e565b979650505050505050565b60608315620027925782516000036200278a576001600160a01b0385163b6200278a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006fd565b5081620009d2565b620009d28383815115620027a95781518083602001fd5b8060405162461bcd60e51b8152600401620006fd919062003658565b611557806200366e83390190565b6001600160a01b03811681146200160657600080fd5b8035620027f681620027d3565b919050565b803563ffffffff81168114620027f657600080fd5b60008083601f8401126200282357600080fd5b50813567ffffffffffffffff8111156200283c57600080fd5b6020830191508360208285010111156200285557600080fd5b9250929050565b60008060008060008060a087890312156200287657600080fd5b86356200288381620027d3565b95506200289360208801620027fb565b94506040870135620028a581620027d3565b935060608701359250608087013567ffffffffffffffff811115620028c957600080fd5b620028d789828a0162002810565b979a9699509497509295939492505050565b60008060408385031215620028fd57600080fd5b6200290883620027fb565b915060208301356200291a81620027d3565b809150509250929050565b6000602082840312156200293857600080fd5b5035919050565b6000602082840312156200295257600080fd5b6200295d82620027fb565b9392505050565b6000602082840312156200297757600080fd5b81356200295d81620027d3565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620029c657620029c662002984565b604052919050565b600082601f830112620029e057600080fd5b8135602067ffffffffffffffff821115620029ff57620029ff62002984565b8160051b62002a108282016200299a565b928352848101820192828101908785111562002a2b57600080fd5b83870192505b84831015620027135782358252918301919083019062002a31565b6000806000806080858703121562002a6357600080fd5b84359350602085013567ffffffffffffffff8082111562002a8357600080fd5b62002a9188838901620029ce565b945060408701359150808216821462002aa957600080fd5b509396929550929360600135925050565b60ff811681146200160657600080fd5b600080600080600080600060e0888a03121562002ae657600080fd5b873562002af38162002aba565b965062002b0360208901620027fb565b9550604088013562002b1581620027d3565b945062002b2560608901620027fb565b9350608088013562002b3781620027d3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002b715762002b7162002984565b50601f01601f191660200190565b600082601f83011262002b9157600080fd5b813562002ba862002ba28262002b54565b6200299a565b81815284602083860101111562002bbe57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002bfc57600080fd5b8a3567ffffffffffffffff8082111562002c1557600080fd5b62002c238e838f01620029ce565b9b5062002c3360208e01620027fb565b9a5060408d0135995060608d0135985062002c5160808e01620027fb565b975062002c6160a08e01620027e9565b965062002c7160c08e01620027fb565b955062002c8160e08e01620027e9565b94506101008d013593506101208d013591508082111562002ca157600080fd5b5062002cb08d828e0162002b7f565b9150509295989b9194979a5092959850565b60008060006060848603121562002cd857600080fd5b62002ce384620027fb565b9250602084013562002cf581620027d3565b9150604084013562002d0781620027d3565b809150509250925092565b600080600080600080600060a0888a03121562002d2e57600080fd5b62002d3988620027fb565b9650602088013562002d4b81620027d3565b9550604088013567ffffffffffffffff8082111562002d6957600080fd5b62002d778b838c0162002810565b909750955060608a013591508082111562002d9157600080fd5b5062002da08a828b0162002810565b909450925050608088013562002db68162002aba565b8091505092959891949750929550565b60008060006060848603121562002ddc57600080fd5b62002de784620027fb565b9250602084013562002df981620027d3565b9150604084013567ffffffffffffffff81111562002e1657600080fd5b62002e248682870162002b7f565b9150509250925092565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002f095762002f0962002ecb565b500490565b60006001820162002f235762002f2362002ee1565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002faf57818101518382015260200162002f95565b8381111562000d7c5750506000910152565b6000815180845262002fdb81602086016020860162002f92565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff83166020820152606060408201819052600090620030219083018462002fc1565b95945050505050565b600082516200303e81846020870162002f92565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f8301126200309157600080fd5b8151620030a262002ba28262002b54565b818152846020838601011115620030b857600080fd5b620009d282602083016020870162002f92565b600080600060608486031215620030e157600080fd5b835167ffffffffffffffff80821115620030fa57600080fd5b62003108878388016200307f565b945060208601519150808211156200311f57600080fd5b506200312e868287016200307f565b925050604084015162002d078162002aba565b60608152600062003156606083018662002fc1565b82810360208401526200316a818662002fc1565b91505060ff83166040830152949350505050565b80151581146200160657600080fd5b600060208284031215620031a057600080fd5b81516200295d816200317e565b600082620031bf57620031bf62002ecb565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003203606083018789620031c4565b828103602084015262003218818688620031c4565b91505060ff831660408301529695505050505050565b600083516200324281846020880162002f92565b8351908301906200325881836020880162002f92565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032b58483018762002fc1565b925080851660e085015250509998505050505050505050565b600060208284031215620032e157600080fd5b815167ffffffffffffffff811115620032f957600080fd5b620009d2848285016200307f565b6000602082840312156200331a57600080fd5b81516200295d8162002aba565b6000602082840312156200333a57600080fd5b5051919050565b600181815b808511156200338257816000190482111562003366576200336662002ee1565b808516156200337457918102915b93841c939080029062003346565b509250929050565b6000826200339b57506001620007a4565b81620033aa57506000620007a4565b8160018114620033c35760028114620033ce57620033ee565b6001915050620007a4565b60ff841115620033e257620033e262002ee1565b50506001821b620007a4565b5060208310610133831016604e8410600b841016171562003413575081810a620007a4565b6200341f838362003341565b806000190482111562003436576200343662002ee1565b029392505050565b60006200295d83836200338a565b60008282101562003461576200346162002ee1565b500390565b600082198211156200347c576200347c62002ee1565b500190565b634e487b7160e01b600052600160045260246000fd5b60008085851115620034a857600080fd5b83861115620034b657600080fd5b5050820193919092039150565b600080600080600080600060e0888a031215620034df57600080fd5b8735620034ec81620027d3565b96506020880135620034fe81620027d3565b95506040880135945060608801359350608088013562002b378162002aba565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b031215620035ea57600080fd5b8835620035f781620027d3565b975060208901356200360981620027d3565b96506040890135955060608901359450608089013562003629816200317e565b935060a08901356200363b8162002aba565b979a969950949793969295929450505060c08201359160e0013590565b6020815260006200295d602083018462002fc156fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea264697066735822122070fae8b3daebe7fc894d50296739b7a26e638f37239109230c7dfd552785f2a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220d4ca4d2407b1daa13f8be7716fe538d31793723da0a7320641e770f9e4556add64736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001f35760003560e01c80637b6323c1116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b80637b6323c1146200045e57806381b1c17414620004835780638da5cb5b14620004bd57600080fd5b8063318aee3d116200018d5780633e19704311620001585780633e19704314620003d75780634638554914620003fc578063647c576c1462000421578063715018a6146200044657600080fd5b8063318aee3d146200030957806337883a3e14620003785780633ae05047146200039a5780633da8168214620003b257600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f620002093660046200285c565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f6200071e565b3480156200026757600080fd5b506200027f62000279366004620028e9565b62000757565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002925565b620007aa565b348015620002ca57600080fd5b506200020f620002dc3660046200293f565b620007b9565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002964565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b506027546200027f906001600160a01b031681565b348015620003a757600080fd5b50620002fa620007e5565b348015620003bf57600080fd5b506200022d620003d136600462002a4c565b620008d8565b348015620003e457600080fd5b50620002fa620003f636600462002aca565b620009da565b3480156200040957600080fd5b506200020f6200041b36600462002bdb565b62000a67565b3480156200042e57600080fd5b506200020f6200044036600462002cc2565b62000c0d565b3480156200045357600080fd5b506200020f62000d82565b3480156200046b57600080fd5b506200020f6200047d36600462002bdb565b62000d98565b3480156200049057600080fd5b506200027f620004a236600462002925565b6024602052600090815260409020546001600160a01b031681565b348015620004ca57600080fd5b50605a546001600160a01b03166200027f565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002925565b62001245565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002d12565b6200128a565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002dc6565b620013a1565b348015620005e957600080fd5b506200020f62001553565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002925565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002964565b6200158a565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007065760405162461bcd60e51b815260206004820152604760248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b6200071686868686868662001609565b505050505050565b6027546001600160a01b031633146200074b5760405162461bcd60e51b8152600401620006fd9062002e2e565b6200075562001a9f565b565b60006024600084846040516020016200077292919062002e8b565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b462001afd565b608c55565b620007c362001afd565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008cf57826001166001036200085057600181602081106200081c576200081c62002eb5565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200087d565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088a60028462002ef7565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c69062002f0e565b915050620007f0565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009cb5781600116600103620009555786818151811062000913576200091362002eb5565b60200260200101518360405160200162000937929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009a7565b828782815181106200096b576200096b62002eb5565b60200260200101516040516020016200098e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b460028362002ef7565b915080620009c28162002f0e565b915050620008e8565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a8d5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000aa38a8a8a8a8a8a8a8a8a8a600162001b59565b62000ab48963ffffffff1662001de4565b6000836001600160a01b03168387898560405160240162000ad89392919062002fef565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b0f91906200302a565b60006040518083038185875af1925050503d806000811462000b4e576040519150601f19603f3d011682016040523d82523d6000602084013e62000b53565b606091505b505090508062000bbf5760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b6064820152608401620006fd565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bf895949392919062003048565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c2e5750600054600160ff909116105b8062000c4a5750303b15801562000c4a575060005460ff166001145b62000caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006fd565b6000805460ff19166001179055801562000cd3576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d3562001e26565b801562000d7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8c62001afd565b62000755600062001e99565b60225460ff161562000dbe5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000dd48a8a8a8a8a8a8a8a8a8a600062001b59565b62000de58963ffffffff1662001de4565b6001600160a01b03851662000eda57604080516000808252602082019092526001600160a01b03851690849060405162000e2091906200302a565b60006040518083038185875af1925050503d806000811462000e5f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e64565b606091505b505090508062000ed35760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b6064820152608401620006fd565b50620011f8565b60225463ffffffff61010090910481169087160362000f0f5762000f096001600160a01b038616848462001eeb565b620011f8565b6000868660405160200162000f2692919062002e8b565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200117d5760008060008580602001905181019062000f789190620030cb565b92509250925060008584848460405162000f9290620027c5565b62000fa09392919062003141565b8190604051809103906000f590508015801562000fc1573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001016573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200103c91906200318d565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200116b9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011f5565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620011cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011f391906200318d565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200123195949392919062003048565b60405180910390a150505050505050505050565b600080620012566101008462002ef7565b905060006200126861010085620031ad565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620012a292919062002e8b565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012d590620027c5565b601f1982820381018352601f90910116604081905262001302908d908d908d908d908d90602001620031ed565b60408051601f19818403018152908290526200132292916020016200322e565b604051602081830303815290604052805190602001206040516020016200137b94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013c75760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff6101009091048116908416036200144f5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c460000006064820152608401620006fd565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620014a398979695949392919062003261565b60405180910390a1620014e0620014da6001602260019054906101000a900463ffffffff16338787348880519060200120620009da565b62001f55565b6026546001600160a01b03166333d6247d620014fb620007e5565b6040518263ffffffff1660e01b81526004016200151a91815260200190565b600060405180830381600087803b1580156200153557600080fd5b505af11580156200154a573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015805760405162461bcd60e51b8152600401620006fd9062002e2e565b62000755620020a1565b6200159462001afd565b6001600160a01b038116620015fb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006fd565b620016068162001e99565b50565b60225460ff16156200162f5760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff610100909104811690861603620016b75760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c4600000000006064820152608401620006fd565b60008060606001600160a01b0389166200174e5785341462001744576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c55456064820152608401620006fd565b60009150620019bf565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200181c57604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af1158015620017e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200180991906200318d565b50602081015181519094509250620019bd565b84156200183157620018318a88888862002150565b620018486001600160a01b038b1633308a62002578565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200189f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018c99190810190620032ce565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001908573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620019329190810190620032ce565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001971573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001997919062003307565b604051602001620019ab9392919062003141565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162001a0198979695949392919062003261565b60405180910390a162001a26620014da600084868c8c8c8880519060200120620009da565b6026546001600160a01b03166333d6247d62001a41620007e5565b6040518263ffffffff1660e01b815260040162001a6091815260200190565b600060405180830381600087803b15801562001a7b57600080fd5b505af115801562001a90573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001ac55760405162461bcd60e51b8152600401620006fd9062002f2a565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006fd565b62001b6a8a63ffffffff1662001245565b1562001bc15760405162461bcd60e51b8152602060048201526030602482015260008051602062004bc583398151915260448201526f081053149150511657d0d3105253515160821b6064820152608401620006fd565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001c35573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c5b919062003327565b90508060000362001cc45760405162461bcd60e51b8152602060048201526039602482015260008051602062004bc583398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c4944000000000000006064820152608401620006fd565b60225463ffffffff878116610100909204161462001d465760405162461bcd60e51b8152602060048201526043602482015260008051602062004bc583398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a401620006fd565b602254600090610100900463ffffffff1662001d6457508862001d67565b50895b62001d9262001d83848b8b8b8b8b8b80519060200120620009da565b8e8e63ffffffff1684620008d8565b62001a905760405162461bcd60e51b815260206004820152602c602482015260008051602062004bc583398151915260448201526b0814d35517d253959053125160a21b6064820152608401620006fd565b600062001df46101008362002ef7565b9050600062001e0661010084620031ad565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001e935760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006fd565b62000755335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001f5090849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620025b2565b505050565b80600162001f66602060026200343e565b62001f7291906200344c565b6021541062001fd75760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b6064820152608401620006fd565b60016021600082825462001fec919062003466565b909155505060215460005b60208110156200209657816001166001036200202c57826001826020811062002024576200202462002eb5565b015550505050565b6001816020811062002042576200204262002eb5565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200207f919062002ef7565b9150806200208d8162002f0e565b91505062001ff7565b5062001f5062003481565b60225460ff166200211b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006fd565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200219383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200268b92505050565b9050632afa533160e01b6001600160e01b03198216016200238c576000808080808080620021c5896004818d62003497565b810190620021d49190620034c3565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620022165760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0386163014620022415760405162461bcd60e51b8152600401620006fd906200357b565b8a8514620022b85760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d41544348000000000000006064820152608401620006fd565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200233891906200302a565b6000604051808303816000865af19150503d806000811462002377576040519150601f19603f3d011682016040523d82523d6000602084013e6200237c565b606091505b5050505050505050505062002571565b6001600160e01b031981166323f2ebc360e21b14620024025760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b6064820152608401620006fd565b6000808080808080806200241a8a6004818e62003497565b810190620024299190620035cc565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200246d5760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0387163014620024985760405162461bcd60e51b8152600401620006fd906200357b565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f16916200252191906200302a565b6000604051808303816000865af19150503d806000811462002560576040519150601f19603f3d011682016040523d82523d6000602084013e62002565565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d7c9085906323b872dd60e01b9060840162001f18565b600062002609826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620026929092919063ffffffff16565b80519091501562001f5057808060200190518101906200262a91906200318d565b62001f505760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006fd565b6020015190565b6060620009d2848460008585600080866001600160a01b03168587604051620026bc91906200302a565b60006040518083038185875af1925050503d8060008114620026fb576040519150601f19603f3d011682016040523d82523d6000602084013e62002700565b606091505b509150915062002713878383876200271e565b979650505050505050565b60608315620027925782516000036200278a576001600160a01b0385163b6200278a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006fd565b5081620009d2565b620009d28383815115620027a95781518083602001fd5b8060405162461bcd60e51b8152600401620006fd919062003658565b611557806200366e83390190565b6001600160a01b03811681146200160657600080fd5b8035620027f681620027d3565b919050565b803563ffffffff81168114620027f657600080fd5b60008083601f8401126200282357600080fd5b50813567ffffffffffffffff8111156200283c57600080fd5b6020830191508360208285010111156200285557600080fd5b9250929050565b60008060008060008060a087890312156200287657600080fd5b86356200288381620027d3565b95506200289360208801620027fb565b94506040870135620028a581620027d3565b935060608701359250608087013567ffffffffffffffff811115620028c957600080fd5b620028d789828a0162002810565b979a9699509497509295939492505050565b60008060408385031215620028fd57600080fd5b6200290883620027fb565b915060208301356200291a81620027d3565b809150509250929050565b6000602082840312156200293857600080fd5b5035919050565b6000602082840312156200295257600080fd5b6200295d82620027fb565b9392505050565b6000602082840312156200297757600080fd5b81356200295d81620027d3565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620029c657620029c662002984565b604052919050565b600082601f830112620029e057600080fd5b8135602067ffffffffffffffff821115620029ff57620029ff62002984565b8160051b62002a108282016200299a565b928352848101820192828101908785111562002a2b57600080fd5b83870192505b84831015620027135782358252918301919083019062002a31565b6000806000806080858703121562002a6357600080fd5b84359350602085013567ffffffffffffffff8082111562002a8357600080fd5b62002a9188838901620029ce565b945060408701359150808216821462002aa957600080fd5b509396929550929360600135925050565b60ff811681146200160657600080fd5b600080600080600080600060e0888a03121562002ae657600080fd5b873562002af38162002aba565b965062002b0360208901620027fb565b9550604088013562002b1581620027d3565b945062002b2560608901620027fb565b9350608088013562002b3781620027d3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002b715762002b7162002984565b50601f01601f191660200190565b600082601f83011262002b9157600080fd5b813562002ba862002ba28262002b54565b6200299a565b81815284602083860101111562002bbe57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002bfc57600080fd5b8a3567ffffffffffffffff8082111562002c1557600080fd5b62002c238e838f01620029ce565b9b5062002c3360208e01620027fb565b9a5060408d0135995060608d0135985062002c5160808e01620027fb565b975062002c6160a08e01620027e9565b965062002c7160c08e01620027fb565b955062002c8160e08e01620027e9565b94506101008d013593506101208d013591508082111562002ca157600080fd5b5062002cb08d828e0162002b7f565b9150509295989b9194979a5092959850565b60008060006060848603121562002cd857600080fd5b62002ce384620027fb565b9250602084013562002cf581620027d3565b9150604084013562002d0781620027d3565b809150509250925092565b600080600080600080600060a0888a03121562002d2e57600080fd5b62002d3988620027fb565b9650602088013562002d4b81620027d3565b9550604088013567ffffffffffffffff8082111562002d6957600080fd5b62002d778b838c0162002810565b909750955060608a013591508082111562002d9157600080fd5b5062002da08a828b0162002810565b909450925050608088013562002db68162002aba565b8091505092959891949750929550565b60008060006060848603121562002ddc57600080fd5b62002de784620027fb565b9250602084013562002df981620027d3565b9150604084013567ffffffffffffffff81111562002e1657600080fd5b62002e248682870162002b7f565b9150509250925092565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002f095762002f0962002ecb565b500490565b60006001820162002f235762002f2362002ee1565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002faf57818101518382015260200162002f95565b8381111562000d7c5750506000910152565b6000815180845262002fdb81602086016020860162002f92565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff83166020820152606060408201819052600090620030219083018462002fc1565b95945050505050565b600082516200303e81846020870162002f92565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f8301126200309157600080fd5b8151620030a262002ba28262002b54565b818152846020838601011115620030b857600080fd5b620009d282602083016020870162002f92565b600080600060608486031215620030e157600080fd5b835167ffffffffffffffff80821115620030fa57600080fd5b62003108878388016200307f565b945060208601519150808211156200311f57600080fd5b506200312e868287016200307f565b925050604084015162002d078162002aba565b60608152600062003156606083018662002fc1565b82810360208401526200316a818662002fc1565b91505060ff83166040830152949350505050565b80151581146200160657600080fd5b600060208284031215620031a057600080fd5b81516200295d816200317e565b600082620031bf57620031bf62002ecb565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003203606083018789620031c4565b828103602084015262003218818688620031c4565b91505060ff831660408301529695505050505050565b600083516200324281846020880162002f92565b8351908301906200325881836020880162002f92565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032b58483018762002fc1565b925080851660e085015250509998505050505050505050565b600060208284031215620032e157600080fd5b815167ffffffffffffffff811115620032f957600080fd5b620009d2848285016200307f565b6000602082840312156200331a57600080fd5b81516200295d8162002aba565b6000602082840312156200333a57600080fd5b5051919050565b600181815b808511156200338257816000190482111562003366576200336662002ee1565b808516156200337457918102915b93841c939080029062003346565b509250929050565b6000826200339b57506001620007a4565b81620033aa57506000620007a4565b8160018114620033c35760028114620033ce57620033ee565b6001915050620007a4565b60ff841115620033e257620033e262002ee1565b50506001821b620007a4565b5060208310610133831016604e8410600b841016171562003413575081810a620007a4565b6200341f838362003341565b806000190482111562003436576200343662002ee1565b029392505050565b60006200295d83836200338a565b60008282101562003461576200346162002ee1565b500390565b600082198211156200347c576200347c62002ee1565b500190565b634e487b7160e01b600052600160045260246000fd5b60008085851115620034a857600080fd5b83861115620034b657600080fd5b5050820193919092039150565b600080600080600080600060e0888a031215620034df57600080fd5b8735620034ec81620027d3565b96506020880135620034fe81620027d3565b95506040880135945060608801359350608088013562002b378162002aba565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b031215620035ea57600080fd5b8835620035f781620027d3565b975060208901356200360981620027d3565b96506040890135955060608901359450608089013562003629816200317e565b935060a08901356200363b8162002aba565b979a969950949793969295929450505060c08201359160e0013590565b6020815260006200295d602083018462002fc156fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea264697066735822122070fae8b3daebe7fc894d50296739b7a26e638f37239109230c7dfd552785f2a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220d4ca4d2407b1daa13f8be7716fe538d31793723da0a7320641e770f9e4556add64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/PolygonZkEVMBridge.sol b/contracts/PolygonZkEVMBridge.sol index 82c42b76c..0242c4aa6 100644 --- a/contracts/PolygonZkEVMBridge.sol +++ b/contracts/PolygonZkEVMBridge.sol @@ -59,7 +59,7 @@ contract PolygonZkEVMBridge is IPolygonZkEVMGlobalExitRoot public globalExitRootManager; // Polygon ZK-EVM address - address public poeAddress; + address public zkEVMaddress; /** * @param _networkID networkID @@ -68,16 +68,16 @@ contract PolygonZkEVMBridge is function initialize( uint32 _networkID, IPolygonZkEVMGlobalExitRoot _globalExitRootManager, - address _poeAddress + address _zkEVMaddress ) public virtual initializer { networkID = _networkID; globalExitRootManager = _globalExitRootManager; - poeAddress = _poeAddress; + zkEVMaddress = _zkEVMaddress; } modifier onlyPolygonZkEVM() { require( - poeAddress == msg.sender, + zkEVMaddress == msg.sender, "PolygonZkEVM::onlyPolygonZkEVM: only Polygon ZK-EVM contractt" ); _; diff --git a/contracts/mocks/PolygonZkEVMBridgeMock.sol b/contracts/mocks/PolygonZkEVMBridgeMock.sol index 4c3ee49af..825a48ab8 100644 --- a/contracts/mocks/PolygonZkEVMBridgeMock.sol +++ b/contracts/mocks/PolygonZkEVMBridgeMock.sol @@ -17,11 +17,11 @@ contract PolygonZkEVMBridgeMock is PolygonZkEVMBridge, OwnableUpgradeable { function initialize( uint32 _networkID, IPolygonZkEVMGlobalExitRoot _globalExitRootManager, - address _poeAddress + address _zkEVMaddress ) public override initializer { networkID = _networkID; globalExitRootManager = _globalExitRootManager; - poeAddress = _poeAddress; + zkEVMaddress = _zkEVMaddress; maxEtherBridge = 0.25 ether; diff --git a/deployment/deployPoE_v2-0.js b/deployment/deployPoE_v2-0.js index 18efaf7ea..46829ff07 100644 --- a/deployment/deployPoE_v2-0.js +++ b/deployment/deployPoE_v2-0.js @@ -1,7 +1,7 @@ /* eslint-disable no-await-in-loop */ /* eslint-disable no-console, no-inner-declarations, no-undef, import/no-unresolved */ -const { ethers } = require('hardhat'); +const { ethers, upgrades } = require('hardhat'); const path = require('path'); const fs = require('fs'); require('dotenv').config({ path: path.resolve(__dirname, '../.env') }); @@ -18,6 +18,7 @@ async function main() { const trustedSequencerURL = deployParameters.trustedSequencerURL || 'http://zkevm-json-rpc:8123'; const realVerifier = deployParameters.realVerifier || false; const { chainID, networkName } = deployParameters; + const minDelayTimelock = deployParameters.minDelayTimelock || 10; // Should put some default parameter const pendingStateTimeout = deployParameters.pendingStateTimeout || (60 * 60 * 24 * 7 - 1); const trustedAggregatorTimeout = deployParameters.trustedAggregatorTimeout || (60 * 60 * 24 * 7 - 1); @@ -59,6 +60,7 @@ async function main() { } const admin = deployParameters.admin || deployer.address; const trustedAggregator = deployParameters.trustedAggregator || deployer.address; + const timelockAddress = deployParameters.timelockAddress || deployer.address; /* *Deployment MATIC @@ -187,7 +189,7 @@ async function main() { console.log('#######################'); console.log('PolygonZkEVMGlobalExitRootAddress:', await polygonZkEVMBridgeContract.globalExitRootManager()); console.log('networkID:', await polygonZkEVMBridgeContract.networkID()); - console.log('poeAddress:', await polygonZkEVMBridgeContract.poeAddress()); + console.log('zkEVMaddress:', await polygonZkEVMBridgeContract.zkEVMaddress()); /* * Initialize Polygon ZK-EVM @@ -281,19 +283,58 @@ async function main() { await deployer.sendTransaction(params); } - // approve tokens + // approve tokens for trusted sequencer if (deployParameters.trustedSequencerPvtKey) { const trustedSequencerWallet = new ethers.Wallet(deployParameters.trustedSequencerPvtKey, currentProvider); await maticTokenContract.connect(trustedSequencerWallet).approve(polygonZkEVMContract.address, ethers.constants.MaxUint256); } + /* + *Deployment Time lock + */ + + console.log('\n#######################'); + console.log('##### Deployment TimelockContract #####'); + console.log('#######################'); + console.log('minDelayTimelock:', minDelayTimelock); + console.log('timelockAddress:', timelockAddress); + console.log('zkEVMAddress:', polygonZkEVMContract.address); + + const timelockContractFactory = await ethers.getContractFactory('PolygonZkEVMTimelock'); + const timelockContract = await timelockContractFactory.deploy( + minDelayTimelock, + [timelockAddress], + [timelockAddress], + timelockAddress, + polygonZkEVMContract.address, + ); + await timelockContract.deployed(); + + console.log('#######################\n'); + console.log( + 'Polygon timelockContract deployed to:', + timelockContract.address, + ); + + console.log('\n#######################'); + console.log('##### Checks TimelockContract #####'); + console.log('#######################'); + console.log('minDelayTimelock:', await timelockContract.getMinDelay()); + console.log('polygonZkEVM:', polygonZkEVMContract.address); + + /* + * Transfer ownership of the proxyAdmin to timelock + * await upgrades.admin.transferProxyAdminOwnership(timelockContract.address); + */ + const outputJson = { polygonZkEVMAddress: polygonZkEVMContract.address, - PolygonZkEVMBridgeAddress: polygonZkEVMBridgeContract.address, - PolygonZkEVMGlobalExitRootAddress: polygonZkEVMGlobalExitRoot.address, + polygonZkEVMBridgeAddress: polygonZkEVMBridgeContract.address, + polygonZkEVMGlobalExitRootAddress: polygonZkEVMGlobalExitRoot.address, maticTokenAddress: maticTokenContract.address, verifierAddress: verifierContract.address, deployerAddress: deployer.address, + timelockContractAddress: timelockContract.address, deploymentBlockNumber, genesisRoot: genesisRootHex, trustedSequencer, diff --git a/deployment/deploy_parameters.json.example b/deployment/deploy_parameters.json.example index 3fb89b939..054a97aec 100644 --- a/deployment/deploy_parameters.json.example +++ b/deployment/deploy_parameters.json.example @@ -12,5 +12,7 @@ "trustedSequencerPvtKey":"", "polygonZkEVMBridgeMock":false, "admin":"0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D", - "trustedAggregator":"0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D" + "trustedAggregator":"0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D", + "minDelayTimelock": 3600, + "timelockAddress": "0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D" } \ No newline at end of file diff --git a/deployment/verifyPoE_v2-0.js b/deployment/verifyPoE_v2-0.js index 405248d59..2f5d67861 100644 --- a/deployment/verifyPoE_v2-0.js +++ b/deployment/verifyPoE_v2-0.js @@ -6,7 +6,9 @@ const { expect } = require('chai'); const { ethers } = require('hardhat'); const pathDeployOutputParameters = path.join(__dirname, './deploy_output.json'); +const pathDeployParameters = path.join(__dirname, './deploy_parameters.json'); const deployOutputParameters = require(pathDeployOutputParameters); +const deployParameters = require(pathDeployParameters); async function main() { // load deployer account @@ -48,9 +50,38 @@ async function main() { expect(error.message.toLowerCase().includes('already verified')).to.be.equal(true); } - // verify proxies + // verify timeLock + let deployer; + if (deployParameters.privateKey) { + deployer = new ethers.Wallet(deployParameters.privateKey); + } else if (process.env.MNEMONIC) { + deployer = ethers.Wallet.fromMnemonic(process.env.MNEMONIC, 'm/44\'/60\'/0\'/0/0'); + } else { + [deployer] = (await ethers.getSigners()); + } - const contractNames = ['polygonZkEVMAddress', 'PolygonZkEVMBridgeAddress', 'PolygonZkEVMGlobalExitRootAddress']; + const minDelayTimelock = deployParameters.minDelayTimelock || 0; + const timelockAddress = deployParameters.timelockAddress || deployer.address; + try { + await hre.run( + 'verify:verify', + { + address: deployOutputParameters.timelockContractAddress, + constructorArguments: [ + minDelayTimelock, + [timelockAddress], + [timelockAddress], + timelockAddress, + deployOutputParameters.polygonZkEVMAddress, + ], + }, + ); + } catch (error) { + expect(error.message.toLowerCase().includes('already verified')).to.be.equal(true); + } + + // verify proxies + const contractNames = ['polygonZkEVMAddress', 'polygonZkEVMBridgeAddress', 'polygonZkEVMGlobalExitRootAddress']; for (let i = 0; i < contractNames.length; i++) { try { diff --git a/test/contracts/bridge.test.js b/test/contracts/bridge.test.js index 95311cd07..4891a7152 100644 --- a/test/contracts/bridge.test.js +++ b/test/contracts/bridge.test.js @@ -66,7 +66,7 @@ describe('PolygonZkEVMBridge Contract', () => { it('should check the constructor parameters', async () => { expect(await polygonZkEVMBridgeContract.globalExitRootManager()).to.be.equal(polygonZkEVMGlobalExitRoot.address); expect(await polygonZkEVMBridgeContract.networkID()).to.be.equal(networkIDMainnet); - expect(await polygonZkEVMBridgeContract.poeAddress()).to.be.equal(polygonZkEVMAddress); + expect(await polygonZkEVMBridgeContract.zkEVMaddress()).to.be.equal(polygonZkEVMAddress); }); it('should PolygonZkEVMBridge asset and verify merkle proof', async () => { diff --git a/test/contracts/real-prover/test-inputs/input.json b/test/contracts/real-prover/test-inputs/input.json index 62f5edd91..26e9e8068 100644 --- a/test/contracts/real-prover/test-inputs/input.json +++ b/test/contracts/real-prover/test-inputs/input.json @@ -1,1086 +1,1086 @@ { - "singleBatchData": [ - { - "oldStateRoot": "0x3ca39a7b5b419d1c50c89a8d15d1234f6cbc8baadb465efb609832bbc19f9026", - "newStateRoot": "0x61b31caaff4a8feedcc97d4da7b7f739ef8e17e384c57557135cba347a000c66", - "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "newAccInputHash": "0x070c0c1abe776249fe4011d71b63a0cce202069584af3801d5df2dccf64a2d9a", - "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "oldNumBatch": 0, - "newNumBatch": 1, - "chainID": 1000, - "batchL2Data": "0xef80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff8901314fb37062980000808203e88080f9ea8e90ae323e360a22bd0b1a972d15cb33df6ccbfbada4a0d49792d1164ea56029d84d5093a7186fb5bf2f1b7258d57e9c09ac89c4cb8eb44a3c961c4dd89b1b", - "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", - "timestamp": 1944498031, - "sequencerAddr": "0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D", - "batchHashData": "0x0e8a7e57fe270ab7780cb10ca4b4a39792432701268b0d3a64e6870729e506d1", - "contractsBytecode": {}, - "db": { - "0x3ca39a7b5b419d1c50c89a8d15d1234f6cbc8baadb465efb609832bbc19f9026": [ - "cddc57c0d0fdd4ed", - "d24df1950f2d8f15", - "4c2f3e938869b82d", - "649e63bfe1247ba4", - "b69b044f5e694795", - "f57d81efba5d4445", - "339438195426ad0a", - "3efad1dd58c2259d", - "0000000000000001", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x3efad1dd58c2259d339438195426ad0af57d81efba5d4445b69b044f5e694795": [ - "00000000dea00000", - "0000000035c9adc5", - "0000000000000036", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ] - } - }, - { - "oldStateRoot": "0x61b31caaff4a8feedcc97d4da7b7f739ef8e17e384c57557135cba347a000c66", - "newStateRoot": "0x29f3d65c49b538ea6072d1f9343fa2f0f223c1656f0432e9db337553963449d2", - "oldAccInputHash": "0x070c0c1abe776249fe4011d71b63a0cce202069584af3801d5df2dccf64a2d9a", - "newAccInputHash": "0x389bc63239f455750717b4efb5e9440d7b08751241b546e70ffe6075509d6c32", - "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "oldNumBatch": 1, - "newNumBatch": 2, - "chainID": 1000, - "batchL2Data": "0xee80843b9aca00830186a094617b3a3528f9cdd6630fd3301b9c8911f7bf063d881bc16d674ec80000808203e880804902102bdd9b91ae389102098dd7d8cb6e732410851223a1153cbe78b0c54d1e63bd7740451f2efcf88bbebdcc334ff3b3e3c332fbbf5703e4699124454663ba1b", - "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", - "timestamp": 1944498032, - "sequencerAddr": "0x4d5Cf5032B2a844602278b01199ED191A86c93ff", - "batchHashData": "0xe2058260b8a93dc906fd253c2af22d4cb6136e6833b110a2655f6e0637952e07", - "contractsBytecode": {}, - "db": { - "0x61b31caaff4a8feedcc97d4da7b7f739ef8e17e384c57557135cba347a000c66": [ - "763daf39d9de9f97", - "ef7790a09a67a7ce", - "b7b8e536f40b4237", - "17f9ab2454f54c72", - "3eb5df14d4bdc47c", - "ef2191d6cdc0bf45", - "8f7fb26dd51e6103", - "55e7e82ae2a7af55", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x17f9ab2454f54c72b7b8e536f40b4237ef7790a09a67a7ce763daf39d9de9f97": [ - "ae5eef5438ed0e3f", - "5c4895355f3e4439", - "cf826865dbad9c26", - "696681d0aa7090c5", - "e73738b8e2170ab5", - "535da0a6128c7d7a", - "8a3fb83b447c6895", - "5482cba788eb1c48", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x696681d0aa7090c5cf826865dbad9c265c4895355f3e4439ae5eef5438ed0e3f": [ - "48a46a8e735c5308", - "13c524e0f8adc42e", - "4e2074fc48c70ae0", - "85bf62d5f65b9449", - "0e27e92c28029aec", - "98e0c826ec17d37a", - "65597af607e1af8b", - "ace107db9858f320", - "0000000000000001", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0xace107db9858f32065597af607e1af8b98e0c826ec17d37a0e27e92c28029aec": [ - "0000000073e6af6f", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x5482cba788eb1c488a3fb83b447c6895535da0a6128c7d7ae73738b8e2170ab5": [ - "40508102aa6cabc7", - "501c2393cf10d5fd", - "107bff077a0db30f", - "ef85c8c00a446ae6", - "8970fbd8a8e998b0", - "78ae1b24331feafe", - "4b733a42af75c0d1", - "8bed5904c253e80b", - "0000000000000001", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x8bed5904c253e80b4b733a42af75c0d178ae1b24331feafe8970fbd8a8e998b0": [ - "00000000d2582b99", - "00000000dfc171ed", - "0000000070a9b538", - "000000003cf71b6a", - "00000000f175a4f8", - "0000000091639493", - "0000000084a5333b", - "00000000c8a0cb4b" - ], - "0x55e7e82ae2a7af558f7fb26dd51e6103ef2191d6cdc0bf453eb5df14d4bdc47c": [ - "1c4f1ba045cf5b95", - "bc713c1bbad32c2e", - "4281764be58d6a22", - "9e3757e8ec1272dd", - "bd7c49e380253fa5", - "e372e59a3b60703c", - "a451273cbbb1e1e5", - "98918ae937e2cf3e", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x9e3757e8ec1272dd4281764be58d6a22bc713c1bbad32c2e1c4f1ba045cf5b95": [ - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "95ab0f1313448263", - "014f76d48abc1a5a", - "abac7bde3231c7b3", - "725f5f7511034537", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x725f5f7511034537abac7bde3231c7b3014f76d48abc1a5a95ab0f1313448263": [ - "f9afb01623f15c79", - "308cdd5740bc023c", - "322e20e4c0dcef74", - "87cca53735cec736", - "7fe9e067044258cd", - "c1c7a23630d74438", - "f6d76a253178385f", - "617c2a11f77ff536", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x87cca53735cec736322e20e4c0dcef74308cdd5740bc023cf9afb01623f15c79": [ - "16dde42596b907f0", - "49015d7e991a1528", - "4a6eced6e8304885", - "305a6af4d7a8a00c", - "85b8fc8024db5e5c", - "cb9fc9e8676fe5f9", - "900609fbcf391183", - "41e5632337836bc5", - "0000000000000001", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x41e5632337836bc5900609fbcf391183cb9fc9e8676fe5f985b8fc8024db5e5c": [ - "0000000062980000", - "00000000314fb370", - "0000000000000001", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x617c2a11f77ff536f6d76a253178385fc1c7a23630d744387fe9e067044258cd": [ - "11c8725c9dfdb98b", - "7ffbf50ba07b42f8", - "7c18430af73c190c", - "1c3e76134671e490", - "d074b8cee5dcf415", - "2346a1b4c0f390e8", - "47969c1f5a6a25b1", - "da62fdf84a21108e", - "0000000000000001", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0xda62fdf84a21108e47969c1f5a6a25b12346a1b4c0f390e8d074b8cee5dcf415": [ - "0000000000000001", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x98918ae937e2cf3ea451273cbbb1e1e5e372e59a3b60703cbd7c49e380253fa5": [ - "d43f2781cecb9cea", - "a8ef821b2d1a19c4", - "8d39c881d94606f2", - "571c41938781a282", - "c4066ba8c32e8a54", - "99ccbd6826c25549", - "1bbff6a9558c13d8", - "5c34e8b7e09eb9d2", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x571c41938781a2828d39c881d94606f2a8ef821b2d1a19c4d43f2781cecb9cea": [ - "442f7573a4097cf2", - "3520bc74612a2ea9", - "143ce4e61bf52251", - "da69a3c4a8007a5a", - "d074b8cee5dcf415", - "2346a1b4c0f390e8", - "47969c1f5a6a25b1", - "da62fdf84a21108e", - "0000000000000001", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x5c34e8b7e09eb9d21bbff6a9558c13d899ccbd6826c25549c4066ba8c32e8a54": [ - "66ee2be0687eea76", - "6926f8ca8796c78a", - "26179f49c434dc16", - "649e63bfe1247ba4", - "8d6f4bb1f77e3231", - "e8588d537a7fd215", - "06643ffe76ca3417", - "ac6fb937ba074e4f", - "0000000000000001", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0xac6fb937ba074e4f06643ffe76ca3417e8588d537a7fd2158d6f4bb1f77e3231": [ - "000000007c080000", - "000000000479fa55", - "0000000000000035", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ] - } - }, - { - "oldStateRoot": "0x29f3d65c49b538ea6072d1f9343fa2f0f223c1656f0432e9db337553963449d2", - "newStateRoot": "0xdda07776ee34dbee557cd839abeb522b89540a9a670cea4856af7bdc40396a86", - "oldAccInputHash": "0x389bc63239f455750717b4efb5e9440d7b08751241b546e70ffe6075509d6c32", - "newAccInputHash": "0xad1915669aaf61a83bbfad1f4360c1a32245e38ffb67b1afa68c825135890fc9", - "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "oldNumBatch": 2, - "newNumBatch": 3, - "chainID": 1000, - "batchL2Data": "0xee01843b9aca00830186a094617b3a3528f9cdd6630fd3301b9c8911f7bf063d880de0b6b3a7640000808203e88080d71f728226f6e692289eab9f2c9565036ffda72650c88e2b9c001b95a5f1a2e647612249728261ab90977a2c50b22b8fd486f88b356a921f4487327e5d2775651cee02843b9aca00830186a094617b3a3528f9cdd6630fd3301b9c8911f7bf063d880de0b6b3a7640000808203e880808ab4d93e176f0762b48dfd8382f97200e134eb1e8e6423951d70af8f99e53c805b61ee8721981423a592c0c1af55c482bed43a45e2e3c1ecc70d350e2083ebc11b", - "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", - "timestamp": 1944498032, - "sequencerAddr": "0x4d5Cf5032B2a844602278b01199ED191A86c93ff", - "batchHashData": "0xe0b9d084dae9d015aaf65bc9b013b37c12b3cc31ae4e9590296c50eda518d8a1", - "contractsBytecode": {}, - "db": { - "0x29f3d65c49b538ea6072d1f9343fa2f0f223c1656f0432e9db337553963449d2": [ - "1018ebe383c647ad", - "cd43656bcbfc3732", - "0b77cf26ccee9906", - "eacbc39a60f6d880", - "e943bd867c50d30b", - "2c8f4640b65622b0", - "95925ccc615890b0", - "7cdcd8ebadd60547", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0xeacbc39a60f6d8800b77cf26ccee9906cd43656bcbfc37321018ebe383c647ad": [ - "7244456069b61fb9", - "f12d0c78f0b1c456", - "943aaafaef062428", - "34f19f4397af5227", - "8fd6f5c37f9bb325", - "950a04795fbeb2db", - "be6612ff525b0376", - "f00fadceb542d347", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x34f19f4397af5227943aaafaef062428f12d0c78f0b1c4567244456069b61fb9": [ - "48a46a8e735c5308", - "13c524e0f8adc42e", - "4e2074fc48c70ae0", - "85bf62d5f65b9449", - "6fb863e332cedfef", - "7ba318532e17ee63", - "7d196528afb0b2b3", - "1e96f77a2789e4a8", - "0000000000000001", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x1e96f77a2789e4a87d196528afb0b2b37ba318532e17ee636fb863e332cedfef": [ - "0000000073e6af70", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0xf00fadceb542d347be6612ff525b0376950a04795fbeb2db8fd6f5c37f9bb325": [ - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "4edf8b56eb3c5376", - "1773c8ab7b8f07ff", - "6893cb015c9115ed", - "5d67b5c2b28c5a0c", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x5d67b5c2b28c5a0c6893cb015c9115ed1773c8ab7b8f07ff4edf8b56eb3c5376": [ - "68dc9aa005dd4256", - "052b594470e09489", - "b1b8073c14badad7", - "6e27d2fec2bd936d", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x6e27d2fec2bd936db1b8073c14badad7052b594470e0948968dc9aa005dd4256": [ - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "cc2cd52e96562eb5", - "0df53656880949f3", - "34cc70683f25a9f4", - "05c87aa905c964fc", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x05c87aa905c964fc34cc70683f25a9f40df53656880949f3cc2cd52e96562eb5": [ - "0913ff64639f31f1", - "5f9f9c7ae3c1a51b", - "6ce95a01c39f7eb4", - "98fd5d75b176ec04", - "fa21c802e3203385", - "6994f11f82f251e6", - "f0bd59a452d4d0ee", - "e8ee44891402527a", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x98fd5d75b176ec046ce95a01c39f7eb45f9f9c7ae3c1a51b0913ff64639f31f1": [ - "37866cdbe5877c88", - "2d62534cb92ee170", - "6bf2c9fd6a3aa16c", - "325ba19f4ab866aa", - "d074b8cee5dcf415", - "2346a1b4c0f390e8", - "47969c1f5a6a25b1", - "da62fdf84a21108e", - "0000000000000001", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0xda62fdf84a21108e47969c1f5a6a25b12346a1b4c0f390e8d074b8cee5dcf415": [ - "0000000000000001", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0xe8ee44891402527af0bd59a452d4d0ee6994f11f82f251e6fa21c802e3203385": [ - "20284081553655e3", - "280e11c9e7886afe", - "083dff83bd06d987", - "77c2e46005223573", - "8970fbd8a8e998b0", - "78ae1b24331feafe", - "4b733a42af75c0d1", - "8bed5904c253e80b", - "0000000000000001", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x8bed5904c253e80b4b733a42af75c0d178ae1b24331feafe8970fbd8a8e998b0": [ - "00000000d2582b99", - "00000000dfc171ed", - "0000000070a9b538", - "000000003cf71b6a", - "00000000f175a4f8", - "0000000091639493", - "0000000084a5333b", - "00000000c8a0cb4b" - ], - "0x7cdcd8ebadd6054795925ccc615890b02c8f4640b65622b0e943bd867c50d30b": [ - "a79f72adf8dd62fa", - "70063394d1df00c5", - "5f821a2304f84d60", - "1934fff4c5941ee1", - "59e2c5ebf37b16c4", - "45e8448258381bee", - "bc82aa48f01be494", - "e392fbc37bc4d6e2", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x1934fff4c5941ee15f821a2304f84d6070063394d1df00c5a79f72adf8dd62fa": [ - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "8c9dd4d6dd9556e2", - "1f3ffcfcc152941f", - "cc6de1a34247b76a", - "20cb4f0747788c63", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x20cb4f0747788c63cc6de1a34247b76a1f3ffcfcc152941f8c9dd4d6dd9556e2": [ - "f7edfb994664d84d", - "161450b849bf3951", - "3e9f9bb44d29def1", - "436c8be3776a6612", - "8f641912be821d66", - "9c74208e5f23cc3d", - "dff4e79c0aa1dd7a", - "a56cb315200b6a24", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x436c8be3776a66123e9f9bb44d29def1161450b849bf3951f7edfb994664d84d": [ - "16dde42596b907f0", - "49015d7e991a1528", - "4a6eced6e8304885", - "305a6af4d7a8a00c", - "18c9513b1e7d9904", - "0b6835f79f991d71", - "a8751b2d01a9def9", - "5bc67a31279947d0", - "0000000000000001", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x5bc67a31279947d0a8751b2d01a9def90b6835f79f991d7118c9513b1e7d9904": [ - "0000000013d00000", - "00000000158e4609", - "0000000000000001", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0xa56cb315200b6a24dff4e79c0aa1dd7a9c74208e5f23cc3d8f641912be821d66": [ - "11c8725c9dfdb98b", - "7ffbf50ba07b42f8", - "7c18430af73c190c", - "1c3e76134671e490", - "7615b40971dc29f2", - "303a082109d64fe0", - "54f2216c0b37148d", - "adb5787a1f8676b5", - "0000000000000001", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0xadb5787a1f8676b554f2216c0b37148d303a082109d64fe07615b40971dc29f2": [ - "0000000000000002", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0xe392fbc37bc4d6e2bc82aa48f01be49445e8448258381bee59e2c5ebf37b16c4": [ - "7843a2ed5bec46b1", - "a5be26d73ae537cf", - "8efd80841dd5d382", - "ef28409ad26e7282", - "88de93befbb5aaa4", - "0daef15f24ea3e20", - "02ef2f6176cbbf97", - "69d5f78b6a46aa1d", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0xef28409ad26e72828efd80841dd5d382a5be26d73ae537cf7843a2ed5bec46b1": [ - "205c77d6b9f5eefc", - "28f8d6d672c9506b", - "4eb97b136c3768b6", - "1a621134ad618159", - "dce2eeec6b8d221c", - "1dc936ab2b3ea242", - "3c4663d36bdee9df", - "63533e6d4b9e1288", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x1a621134ad6181594eb97b136c3768b628f8d6d672c9506b205c77d6b9f5eefc": [ - "442f7573a4097cf2", - "3520bc74612a2ea9", - "143ce4e61bf52251", - "6d34d1e254003d2d", - "d074b8cee5dcf415", - "2346a1b4c0f390e8", - "47969c1f5a6a25b1", - "da62fdf84a21108e", - "0000000000000001", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x63533e6d4b9e12883c4663d36bdee9df1dc936ab2b3ea242dce2eeec6b8d221c": [ - "7160cca03ed221b2", - "347a16f174192c56", - "2a3e1067115745c2", - "5c330b93d4700b22", - "4e0a8f01cc63c656", - "f9b87ebb3b907221", - "e2675816f35ac228", - "d806a369a18d0eb0", - "0000000000000001", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0xd806a369a18d0eb0e2675816f35ac228f9b87ebb3b9072214e0a8f01cc63c656": [ - "00000000faa6b288", - "000000004777b8f2", - "00000000a99b03b4", - "00000000186c44ac", - "000000007b5f11f5", - "000000008173b0e3", - "00000000c3ec5a6e", - "00000000ca213a0c" - ], - "0x69d5f78b6a46aa1d02ef2f6176cbbf970daef15f24ea3e2088de93befbb5aaa4": [ - "66ee2be0687eea76", - "6926f8ca8796c78a", - "26179f49c434dc16", - "649e63bfe1247ba4", - "5e83cc15f9f05fa9", - "4098e44c091c5d81", - "1a9584e1365c3ec9", - "021fc6d3425cd2f6", - "0000000000000001", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x021fc6d3425cd2f61a9584e1365c3ec94098e44c091c5d815e83cc15f9f05fa9": [ - "00000000cad00000", - "00000000203b67bc", - "0000000000000035", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ] - } - }, - { - "oldStateRoot": "0xdda07776ee34dbee557cd839abeb522b89540a9a670cea4856af7bdc40396a86", - "newStateRoot": "0x46620e8b8298f31c6999d0547d716a5c1d0e754cff5f1b85ed75eb10cdbb623f", - "oldAccInputHash": "0xad1915669aaf61a83bbfad1f4360c1a32245e38ffb67b1afa68c825135890fc9", - "newAccInputHash": "0xbd71644a8d0eff3d5ae771310c7f15c097dddffe7199e6db738479b01729abfe", - "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "oldNumBatch": 3, - "newNumBatch": 4, - "chainID": 1000, - "batchL2Data": "0xee01843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff883782dace9d900000808203e88080d7d8b23bdec805a0c758de3e2289077b1e4c8401ddff73c7e59e2f9351d14f5f6f04e7bbb69548737581cd5a6e3bac8695776bfd41dc1c8fc9921c4b08e008031bee02843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff8829a2241af62c0000808203e88080ee8448de88596fff6a98af2e603c9a10ccafa114815e844c8b7e8c52cb3fd1470d81101bb5a4a0aa5f459f29da0f6e95cd9e178774f0f3f1c48733618d7bd2231c", - "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", - "timestamp": 1944498032, - "sequencerAddr": "0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D", - "batchHashData": "0x763d3272e66b10bef69106ea07750823c580d20802fb1141b69b5ec56790a449", - "contractsBytecode": {}, - "db": { - "0xdda07776ee34dbee557cd839abeb522b89540a9a670cea4856af7bdc40396a86": [ - "40dc16d040c6ba85", - "b2698618c8f843f9", - "f0af1ef6889f802f", - "fc2a002025d1be5b", - "7d7c02eae0895a66", - "5948c213d37bb227", - "5e531c61117ad836", - "bd75163b28195b06", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0xfc2a002025d1be5bf0af1ef6889f802fb2698618c8f843f940dc16d040c6ba85": [ - "7244456069b61fb9", - "f12d0c78f0b1c456", - "943aaafaef062428", - "34f19f4397af5227", - "4ea7b634b1655b6c", - "2e77cc35af85d3b2", - "ee0023cd0349c382", - "dbb1f8deeca11a8c", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x34f19f4397af5227943aaafaef062428f12d0c78f0b1c4567244456069b61fb9": [ - "48a46a8e735c5308", - "13c524e0f8adc42e", - "4e2074fc48c70ae0", - "85bf62d5f65b9449", - "6fb863e332cedfef", - "7ba318532e17ee63", - "7d196528afb0b2b3", - "1e96f77a2789e4a8", - "0000000000000001", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x1e96f77a2789e4a87d196528afb0b2b37ba318532e17ee636fb863e332cedfef": [ - "0000000073e6af70", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0xdbb1f8deeca11a8cee0023cd0349c3822e77cc35af85d3b24ea7b634b1655b6c": [ - "35ac5b0725e77088", - "c618dbf7e28aca4a", - "3bba9183ae3604c1", - "5443b2d236f92f8c", - "ccb0872229d9428a", - "392384aa92e3b62d", - "a04678bfaf40c3aa", - "7d38466a7779520d", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x5443b2d236f92f8c3bba9183ae3604c1c618dbf7e28aca4a35ac5b0725e77088": [ - "02aa707693b30b9c", - "6cfec68811f9460f", - "5180f56a58386690", - "bcc3f4d2c3de39da", - "ebceab13bad9b083", - "ace90eb2eea0f82e", - "49ddab955b7b0641", - "793f19b91b3ce843", - "0000000000000001", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x793f19b91b3ce84349ddab955b7b0641ace90eb2eea0f82eebceab13bad9b083": [ - "0000000093a18eac", - "0000000087949e1c", - "0000000013081c6e", - "000000000a969138", - "000000008cd388cd", - "0000000076a8a603", - "000000000b052f92", - "000000002a5654e4" - ], - "0x7d38466a7779520da04678bfaf40c3aa392384aa92e3b62dccb0872229d9428a": [ - "de85f6b6f35eb434", - "ff72d70ff218137c", - "3cddc2a902a47f90", - "bf636d7f9cca148b", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0xbf636d7f9cca148b3cddc2a902a47f90ff72d70ff218137cde85f6b6f35eb434": [ - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "f6043722b533d688", - "cccaa4ea742a40a8", - "e1dc1c6be86ad10d", - "86ed3025c1099697", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x86ed3025c1099697e1dc1c6be86ad10dcccaa4ea742a40a8f6043722b533d688": [ - "94c9b6c977fd6b62", - "63d51a718f1d4595", - "0af1d54b83576182", - "e7ead4cf47b5f6a7", - "fa21c802e3203385", - "6994f11f82f251e6", - "f0bd59a452d4d0ee", - "e8ee44891402527a", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0xe7ead4cf47b5f6a70af1d54b8357618263d51a718f1d459594c9b6c977fd6b62": [ - "37866cdbe5877c88", - "2d62534cb92ee170", - "6bf2c9fd6a3aa16c", - "325ba19f4ab866aa", - "cad6cdbfa198be91", - "cd0e941b466a39b4", - "a7e6b3f9d3f197d5", - "a2135065f1605059", - "0000000000000001", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0xa2135065f1605059a7e6b3f9d3f197d5cd0e941b466a39b4cad6cdbfa198be91": [ - "0000000000000003", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0xe8ee44891402527af0bd59a452d4d0ee6994f11f82f251e6fa21c802e3203385": [ - "20284081553655e3", - "280e11c9e7886afe", - "083dff83bd06d987", - "77c2e46005223573", - "8970fbd8a8e998b0", - "78ae1b24331feafe", - "4b733a42af75c0d1", - "8bed5904c253e80b", - "0000000000000001", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x8bed5904c253e80b4b733a42af75c0d178ae1b24331feafe8970fbd8a8e998b0": [ - "00000000d2582b99", - "00000000dfc171ed", - "0000000070a9b538", - "000000003cf71b6a", - "00000000f175a4f8", - "0000000091639493", - "0000000084a5333b", - "00000000c8a0cb4b" - ], - "0xbd75163b28195b065e531c61117ad8365948c213d37bb2277d7c02eae0895a66": [ - "19efe935ba345c27", - "167065d5fb45cf79", - "c99a67590ae8aea9", - "2f462c5fc4528cf8", - "5eba2d109e922180", - "da049cc067bea39f", - "5ab65c767fe694f5", - "7f26bc92a5af4db7", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x2f462c5fc4528cf8c99a67590ae8aea9167065d5fb45cf7919efe935ba345c27": [ - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "368b0865baecd9c2", - "7775aaf79f32f5c8", - "54387e71b92da6f2", - "b3a335227978ed6a", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0xb3a335227978ed6a54387e71b92da6f27775aaf79f32f5c8368b0865baecd9c2": [ - "9e0f700ca62c18b6", - "ad28cf8357819cbe", - "5755654f95ffb169", - "080d700756d33b65", - "f98791bc36627ac1", - "9d19818035e75ffc", - "6e5b6469442f0ab2", - "0d0c1d7a608e2f53", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x080d700756d33b655755654f95ffb169ad28cf8357819cbe9e0f700ca62c18b6": [ - "16dde42596b907f0", - "49015d7e991a1528", - "4a6eced6e8304885", - "305a6af4d7a8a00c", - "90e98ea2a6fee2b3", - "09b4104e4b0f1f42", - "3c656749691cf3af", - "4b1d11a97ceff72f", - "0000000000000001", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x4b1d11a97ceff72f3c656749691cf3af09b4104e4b0f1f4290e98ea2a6fee2b3": [ - "00000000c5080000", - "00000000f9ccd8a1", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x0d0c1d7a608e2f536e5b6469442f0ab29d19818035e75ffcf98791bc36627ac1": [ - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0589b4d3d34413e4", - "17f2dd178ca7a06c", - "0f6d82a74b80007e", - "0dbd903a50b61fac", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x0dbd903a50b61fac0f6d82a74b80007e17f2dd178ca7a06c0589b4d3d34413e4": [ - "e37ad7988d2734e1", - "b48ff1a2d485bf8b", - "b8479aa634e0301f", - "02299c9ad4460ab2", - "7957101cb7ff1c74", - "ec1ec8d879a1614f", - "86ea87d83fdcc756", - "d5b032ca00c9d4d6", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x02299c9ad4460ab2b8479aa634e0301fb48ff1a2d485bf8be37ad7988d2734e1": [ - "08e4392e4efedcc5", - "3ffdfa85d03da17c", - "7c18430af73c190c", - "1c3e76134671e490", - "a27c610b929c5373", - "d822841a75cff991", - "d5fd2275e32107a8", - "eebb7a70544ab6b3", - "0000000000000001", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0xeebb7a70544ab6b3d5fd2275e32107a8d822841a75cff991a27c610b929c5373": [ - "0000000000000004", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0xd5b032ca00c9d4d686ea87d83fdcc756ec1ec8d879a1614f7957101cb7ff1c74": [ - "25fd1dddf4354e7c", - "2b1a0e19c11639a0", - "4b2ece4042b09d92", - "58a82e472c5b400b", - "e40e5d8032e287d0", - "ddc592fc73ab0b86", - "ed3905301252378f", - "46abddcc5b6acb19", - "0000000000000001", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x46abddcc5b6acb19ed3905301252378fddc592fc73ab0b86e40e5d8032e287d0": [ - "000000003a81fe5f", - "00000000370767ab", - "00000000d45c560b", - "00000000f45450eb", - "000000000a951648", - "00000000a006c34f", - "00000000ce4715e3", - "00000000618ee1d1" - ], - "0x7f26bc92a5af4db75ab65c767fe694f5da049cc067bea39f5eba2d109e922180": [ - "7843a2ed5bec46b1", - "a5be26d73ae537cf", - "8efd80841dd5d382", - "ef28409ad26e7282", - "2b6429747753e992", - "8de937d8391bc07c", - "0ba2467e6b2a03b8", - "43ce72d79779e851", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0xef28409ad26e72828efd80841dd5d382a5be26d73ae537cf7843a2ed5bec46b1": [ - "205c77d6b9f5eefc", - "28f8d6d672c9506b", - "4eb97b136c3768b6", - "1a621134ad618159", - "dce2eeec6b8d221c", - "1dc936ab2b3ea242", - "3c4663d36bdee9df", - "63533e6d4b9e1288", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x1a621134ad6181594eb97b136c3768b628f8d6d672c9506b205c77d6b9f5eefc": [ - "442f7573a4097cf2", - "3520bc74612a2ea9", - "143ce4e61bf52251", - "6d34d1e254003d2d", - "d074b8cee5dcf415", - "2346a1b4c0f390e8", - "47969c1f5a6a25b1", - "da62fdf84a21108e", - "0000000000000001", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0xda62fdf84a21108e47969c1f5a6a25b12346a1b4c0f390e8d074b8cee5dcf415": [ - "0000000000000001", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x63533e6d4b9e12883c4663d36bdee9df1dc936ab2b3ea242dce2eeec6b8d221c": [ - "7160cca03ed221b2", - "347a16f174192c56", - "2a3e1067115745c2", - "5c330b93d4700b22", - "4e0a8f01cc63c656", - "f9b87ebb3b907221", - "e2675816f35ac228", - "d806a369a18d0eb0", - "0000000000000001", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0xd806a369a18d0eb0e2675816f35ac228f9b87ebb3b9072214e0a8f01cc63c656": [ - "00000000faa6b288", - "000000004777b8f2", - "00000000a99b03b4", - "00000000186c44ac", - "000000007b5f11f5", - "000000008173b0e3", - "00000000c3ec5a6e", - "00000000ca213a0c" - ], - "0x43ce72d79779e8510ba2467e6b2a03b88de937d8391bc07c2b6429747753e992": [ - "66ee2be0687eea76", - "6926f8ca8796c78a", - "26179f49c434dc16", - "649e63bfe1247ba4", - "67bbfffd0982dfa4", - "93c661c88448b5ed", - "cec2687622ccc942", - "4e709c8e17913749", - "0000000000000001", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ], - "0x4e709c8e17913749cec2687622ccc94293c661c88448b5ed67bbfffd0982dfa4": [ - "0000000019980000", - "000000003bfcd524", - "0000000000000035", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000", - "0000000000000000" - ] - } + "singleBatchData": [ + { + "oldStateRoot": "0x3ca39a7b5b419d1c50c89a8d15d1234f6cbc8baadb465efb609832bbc19f9026", + "newStateRoot": "0x61b31caaff4a8feedcc97d4da7b7f739ef8e17e384c57557135cba347a000c66", + "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newAccInputHash": "0x070c0c1abe776249fe4011d71b63a0cce202069584af3801d5df2dccf64a2d9a", + "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "oldNumBatch": 0, + "newNumBatch": 1, + "chainID": 1000, + "batchL2Data": "0xef80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff8901314fb37062980000808203e88080f9ea8e90ae323e360a22bd0b1a972d15cb33df6ccbfbada4a0d49792d1164ea56029d84d5093a7186fb5bf2f1b7258d57e9c09ac89c4cb8eb44a3c961c4dd89b1b", + "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", + "timestamp": 1944498031, + "sequencerAddr": "0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D", + "batchHashData": "0x0e8a7e57fe270ab7780cb10ca4b4a39792432701268b0d3a64e6870729e506d1", + "contractsBytecode": {}, + "db": { + "0x3ca39a7b5b419d1c50c89a8d15d1234f6cbc8baadb465efb609832bbc19f9026": [ + "cddc57c0d0fdd4ed", + "d24df1950f2d8f15", + "4c2f3e938869b82d", + "649e63bfe1247ba4", + "b69b044f5e694795", + "f57d81efba5d4445", + "339438195426ad0a", + "3efad1dd58c2259d", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x3efad1dd58c2259d339438195426ad0af57d81efba5d4445b69b044f5e694795": [ + "00000000dea00000", + "0000000035c9adc5", + "0000000000000036", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ] } - ], - "oldStateRoot": "0x3ca39a7b5b419d1c50c89a8d15d1234f6cbc8baadb465efb609832bbc19f9026", - "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "oldNumBatch": 0, - "newStateRoot": "0x46620e8b8298f31c6999d0547d716a5c1d0e754cff5f1b85ed75eb10cdbb623f", - "newAccInputHash": "0xbd71644a8d0eff3d5ae771310c7f15c097dddffe7199e6db738479b01729abfe", - "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "newNumBatch": 4, - "chainID": 1000, - "aggregatorAddress": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", - "inputSnark": "0x0ddde9228cc399ab644e2c625c328a0bd5fc0c9b29361a9aea0a9fce01879c9f" - } \ No newline at end of file + }, + { + "oldStateRoot": "0x61b31caaff4a8feedcc97d4da7b7f739ef8e17e384c57557135cba347a000c66", + "newStateRoot": "0x51be73f2c2a9b72611cbb9ccce3a2e33231e943fa39741a85aad3b3a3b8c1d9c", + "oldAccInputHash": "0x070c0c1abe776249fe4011d71b63a0cce202069584af3801d5df2dccf64a2d9a", + "newAccInputHash": "0x389bc63239f455750717b4efb5e9440d7b08751241b546e70ffe6075509d6c32", + "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "oldNumBatch": 1, + "newNumBatch": 2, + "chainID": 1000, + "batchL2Data": "0xee80843b9aca00830186a094617b3a3528f9cdd6630fd3301b9c8911f7bf063d881bc16d674ec80000808203e880804902102bdd9b91ae389102098dd7d8cb6e732410851223a1153cbe78b0c54d1e63bd7740451f2efcf88bbebdcc334ff3b3e3c332fbbf5703e4699124454663ba1b", + "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", + "timestamp": 1944498032, + "sequencerAddr": "0x4d5Cf5032B2a844602278b01199ED191A86c93ff", + "batchHashData": "0xe2058260b8a93dc906fd253c2af22d4cb6136e6833b110a2655f6e0637952e07", + "contractsBytecode": {}, + "db": { + "0x61b31caaff4a8feedcc97d4da7b7f739ef8e17e384c57557135cba347a000c66": [ + "763daf39d9de9f97", + "ef7790a09a67a7ce", + "b7b8e536f40b4237", + "17f9ab2454f54c72", + "3eb5df14d4bdc47c", + "ef2191d6cdc0bf45", + "8f7fb26dd51e6103", + "55e7e82ae2a7af55", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x17f9ab2454f54c72b7b8e536f40b4237ef7790a09a67a7ce763daf39d9de9f97": [ + "ae5eef5438ed0e3f", + "5c4895355f3e4439", + "cf826865dbad9c26", + "696681d0aa7090c5", + "e73738b8e2170ab5", + "535da0a6128c7d7a", + "8a3fb83b447c6895", + "5482cba788eb1c48", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x696681d0aa7090c5cf826865dbad9c265c4895355f3e4439ae5eef5438ed0e3f": [ + "48a46a8e735c5308", + "13c524e0f8adc42e", + "4e2074fc48c70ae0", + "85bf62d5f65b9449", + "0e27e92c28029aec", + "98e0c826ec17d37a", + "65597af607e1af8b", + "ace107db9858f320", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xace107db9858f32065597af607e1af8b98e0c826ec17d37a0e27e92c28029aec": [ + "0000000073e6af6f", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x5482cba788eb1c488a3fb83b447c6895535da0a6128c7d7ae73738b8e2170ab5": [ + "40508102aa6cabc7", + "501c2393cf10d5fd", + "107bff077a0db30f", + "ef85c8c00a446ae6", + "8970fbd8a8e998b0", + "78ae1b24331feafe", + "4b733a42af75c0d1", + "8bed5904c253e80b", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x8bed5904c253e80b4b733a42af75c0d178ae1b24331feafe8970fbd8a8e998b0": [ + "00000000d2582b99", + "00000000dfc171ed", + "0000000070a9b538", + "000000003cf71b6a", + "00000000f175a4f8", + "0000000091639493", + "0000000084a5333b", + "00000000c8a0cb4b" + ], + "0x55e7e82ae2a7af558f7fb26dd51e6103ef2191d6cdc0bf453eb5df14d4bdc47c": [ + "1c4f1ba045cf5b95", + "bc713c1bbad32c2e", + "4281764be58d6a22", + "9e3757e8ec1272dd", + "bd7c49e380253fa5", + "e372e59a3b60703c", + "a451273cbbb1e1e5", + "98918ae937e2cf3e", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x9e3757e8ec1272dd4281764be58d6a22bc713c1bbad32c2e1c4f1ba045cf5b95": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "95ab0f1313448263", + "014f76d48abc1a5a", + "abac7bde3231c7b3", + "725f5f7511034537", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x725f5f7511034537abac7bde3231c7b3014f76d48abc1a5a95ab0f1313448263": [ + "f9afb01623f15c79", + "308cdd5740bc023c", + "322e20e4c0dcef74", + "87cca53735cec736", + "7fe9e067044258cd", + "c1c7a23630d74438", + "f6d76a253178385f", + "617c2a11f77ff536", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x87cca53735cec736322e20e4c0dcef74308cdd5740bc023cf9afb01623f15c79": [ + "16dde42596b907f0", + "49015d7e991a1528", + "4a6eced6e8304885", + "305a6af4d7a8a00c", + "85b8fc8024db5e5c", + "cb9fc9e8676fe5f9", + "900609fbcf391183", + "41e5632337836bc5", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x41e5632337836bc5900609fbcf391183cb9fc9e8676fe5f985b8fc8024db5e5c": [ + "0000000062980000", + "00000000314fb370", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x617c2a11f77ff536f6d76a253178385fc1c7a23630d744387fe9e067044258cd": [ + "11c8725c9dfdb98b", + "7ffbf50ba07b42f8", + "7c18430af73c190c", + "1c3e76134671e490", + "d074b8cee5dcf415", + "2346a1b4c0f390e8", + "47969c1f5a6a25b1", + "da62fdf84a21108e", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xda62fdf84a21108e47969c1f5a6a25b12346a1b4c0f390e8d074b8cee5dcf415": [ + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x98918ae937e2cf3ea451273cbbb1e1e5e372e59a3b60703cbd7c49e380253fa5": [ + "d43f2781cecb9cea", + "a8ef821b2d1a19c4", + "8d39c881d94606f2", + "571c41938781a282", + "c4066ba8c32e8a54", + "99ccbd6826c25549", + "1bbff6a9558c13d8", + "5c34e8b7e09eb9d2", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x571c41938781a2828d39c881d94606f2a8ef821b2d1a19c4d43f2781cecb9cea": [ + "442f7573a4097cf2", + "3520bc74612a2ea9", + "143ce4e61bf52251", + "da69a3c4a8007a5a", + "d074b8cee5dcf415", + "2346a1b4c0f390e8", + "47969c1f5a6a25b1", + "da62fdf84a21108e", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x5c34e8b7e09eb9d21bbff6a9558c13d899ccbd6826c25549c4066ba8c32e8a54": [ + "66ee2be0687eea76", + "6926f8ca8796c78a", + "26179f49c434dc16", + "649e63bfe1247ba4", + "8d6f4bb1f77e3231", + "e8588d537a7fd215", + "06643ffe76ca3417", + "ac6fb937ba074e4f", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xac6fb937ba074e4f06643ffe76ca3417e8588d537a7fd2158d6f4bb1f77e3231": [ + "000000007c080000", + "000000000479fa55", + "0000000000000035", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ] + } + }, + { + "oldStateRoot": "0x51be73f2c2a9b72611cbb9ccce3a2e33231e943fa39741a85aad3b3a3b8c1d9c", + "newStateRoot": "0x8706bee45d447a8baa6773c8bae74133a7e724755ece08b83bbe65bc5dde8fd0", + "oldAccInputHash": "0x389bc63239f455750717b4efb5e9440d7b08751241b546e70ffe6075509d6c32", + "newAccInputHash": "0xad1915669aaf61a83bbfad1f4360c1a32245e38ffb67b1afa68c825135890fc9", + "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "oldNumBatch": 2, + "newNumBatch": 3, + "chainID": 1000, + "batchL2Data": "0xee01843b9aca00830186a094617b3a3528f9cdd6630fd3301b9c8911f7bf063d880de0b6b3a7640000808203e88080d71f728226f6e692289eab9f2c9565036ffda72650c88e2b9c001b95a5f1a2e647612249728261ab90977a2c50b22b8fd486f88b356a921f4487327e5d2775651cee02843b9aca00830186a094617b3a3528f9cdd6630fd3301b9c8911f7bf063d880de0b6b3a7640000808203e880808ab4d93e176f0762b48dfd8382f97200e134eb1e8e6423951d70af8f99e53c805b61ee8721981423a592c0c1af55c482bed43a45e2e3c1ecc70d350e2083ebc11b", + "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", + "timestamp": 1944498032, + "sequencerAddr": "0x4d5Cf5032B2a844602278b01199ED191A86c93ff", + "batchHashData": "0xe0b9d084dae9d015aaf65bc9b013b37c12b3cc31ae4e9590296c50eda518d8a1", + "contractsBytecode": {}, + "db": { + "0x51be73f2c2a9b72611cbb9ccce3a2e33231e943fa39741a85aad3b3a3b8c1d9c": [ + "8070d671ee6ebf88", + "94ffa686c2d174cf", + "0f1241070d4cde32", + "4399fbf95f8b9b2a", + "ba826da65bee9b6a", + "ae0c0c0a0b993bbd", + "b12ccead655a1a29", + "73397ac01a276f38", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x4399fbf95f8b9b2a0f1241070d4cde3294ffa686c2d174cf8070d671ee6ebf88": [ + "ae5eef5438ed0e3f", + "5c4895355f3e4439", + "cf826865dbad9c26", + "696681d0aa7090c5", + "8fd6f5c37f9bb325", + "950a04795fbeb2db", + "be6612ff525b0376", + "f00fadceb542d347", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x696681d0aa7090c5cf826865dbad9c265c4895355f3e4439ae5eef5438ed0e3f": [ + "48a46a8e735c5308", + "13c524e0f8adc42e", + "4e2074fc48c70ae0", + "85bf62d5f65b9449", + "0e27e92c28029aec", + "98e0c826ec17d37a", + "65597af607e1af8b", + "ace107db9858f320", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xace107db9858f32065597af607e1af8b98e0c826ec17d37a0e27e92c28029aec": [ + "0000000073e6af6f", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xf00fadceb542d347be6612ff525b0376950a04795fbeb2db8fd6f5c37f9bb325": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "4edf8b56eb3c5376", + "1773c8ab7b8f07ff", + "6893cb015c9115ed", + "5d67b5c2b28c5a0c", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x5d67b5c2b28c5a0c6893cb015c9115ed1773c8ab7b8f07ff4edf8b56eb3c5376": [ + "68dc9aa005dd4256", + "052b594470e09489", + "b1b8073c14badad7", + "6e27d2fec2bd936d", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x6e27d2fec2bd936db1b8073c14badad7052b594470e0948968dc9aa005dd4256": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "cc2cd52e96562eb5", + "0df53656880949f3", + "34cc70683f25a9f4", + "05c87aa905c964fc", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x05c87aa905c964fc34cc70683f25a9f40df53656880949f3cc2cd52e96562eb5": [ + "0913ff64639f31f1", + "5f9f9c7ae3c1a51b", + "6ce95a01c39f7eb4", + "98fd5d75b176ec04", + "fa21c802e3203385", + "6994f11f82f251e6", + "f0bd59a452d4d0ee", + "e8ee44891402527a", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x98fd5d75b176ec046ce95a01c39f7eb45f9f9c7ae3c1a51b0913ff64639f31f1": [ + "37866cdbe5877c88", + "2d62534cb92ee170", + "6bf2c9fd6a3aa16c", + "325ba19f4ab866aa", + "d074b8cee5dcf415", + "2346a1b4c0f390e8", + "47969c1f5a6a25b1", + "da62fdf84a21108e", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xda62fdf84a21108e47969c1f5a6a25b12346a1b4c0f390e8d074b8cee5dcf415": [ + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xe8ee44891402527af0bd59a452d4d0ee6994f11f82f251e6fa21c802e3203385": [ + "20284081553655e3", + "280e11c9e7886afe", + "083dff83bd06d987", + "77c2e46005223573", + "8970fbd8a8e998b0", + "78ae1b24331feafe", + "4b733a42af75c0d1", + "8bed5904c253e80b", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x8bed5904c253e80b4b733a42af75c0d178ae1b24331feafe8970fbd8a8e998b0": [ + "00000000d2582b99", + "00000000dfc171ed", + "0000000070a9b538", + "000000003cf71b6a", + "00000000f175a4f8", + "0000000091639493", + "0000000084a5333b", + "00000000c8a0cb4b" + ], + "0x73397ac01a276f38b12ccead655a1a29ae0c0c0a0b993bbdba826da65bee9b6a": [ + "a79f72adf8dd62fa", + "70063394d1df00c5", + "5f821a2304f84d60", + "1934fff4c5941ee1", + "5b6ab371934f6b9a", + "6e3dacc34503fee8", + "8c2e02051ae87473", + "435ee8eb401129a9", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x1934fff4c5941ee15f821a2304f84d6070063394d1df00c5a79f72adf8dd62fa": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "8c9dd4d6dd9556e2", + "1f3ffcfcc152941f", + "cc6de1a34247b76a", + "20cb4f0747788c63", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x20cb4f0747788c63cc6de1a34247b76a1f3ffcfcc152941f8c9dd4d6dd9556e2": [ + "f7edfb994664d84d", + "161450b849bf3951", + "3e9f9bb44d29def1", + "436c8be3776a6612", + "8f641912be821d66", + "9c74208e5f23cc3d", + "dff4e79c0aa1dd7a", + "a56cb315200b6a24", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x436c8be3776a66123e9f9bb44d29def1161450b849bf3951f7edfb994664d84d": [ + "16dde42596b907f0", + "49015d7e991a1528", + "4a6eced6e8304885", + "305a6af4d7a8a00c", + "18c9513b1e7d9904", + "0b6835f79f991d71", + "a8751b2d01a9def9", + "5bc67a31279947d0", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x5bc67a31279947d0a8751b2d01a9def90b6835f79f991d7118c9513b1e7d9904": [ + "0000000013d00000", + "00000000158e4609", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xa56cb315200b6a24dff4e79c0aa1dd7a9c74208e5f23cc3d8f641912be821d66": [ + "11c8725c9dfdb98b", + "7ffbf50ba07b42f8", + "7c18430af73c190c", + "1c3e76134671e490", + "7615b40971dc29f2", + "303a082109d64fe0", + "54f2216c0b37148d", + "adb5787a1f8676b5", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xadb5787a1f8676b554f2216c0b37148d303a082109d64fe07615b40971dc29f2": [ + "0000000000000002", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x435ee8eb401129a98c2e02051ae874736e3dacc34503fee85b6ab371934f6b9a": [ + "8ac0d953b8851ba0", + "cf32e8e4ed077026", + "0d7f7f638fb8f823", + "71a50644b4ece3a4", + "88de93befbb5aaa4", + "0daef15f24ea3e20", + "02ef2f6176cbbf97", + "69d5f78b6a46aa1d", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x71a50644b4ece3a40d7f7f638fb8f823cf32e8e4ed0770268ac0d953b8851ba0": [ + "205c77d6b9f5eefc", + "28f8d6d672c9506b", + "4eb97b136c3768b6", + "1a621134ad618159", + "f4a2fe2a8d069a9c", + "c3abede01462207c", + "3b1dc8930396aa67", + "1686cf7f8056caaa", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x1a621134ad6181594eb97b136c3768b628f8d6d672c9506b205c77d6b9f5eefc": [ + "442f7573a4097cf2", + "3520bc74612a2ea9", + "143ce4e61bf52251", + "6d34d1e254003d2d", + "d074b8cee5dcf415", + "2346a1b4c0f390e8", + "47969c1f5a6a25b1", + "da62fdf84a21108e", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x1686cf7f8056caaa3b1dc8930396aa67c3abede01462207cf4a2fe2a8d069a9c": [ + "7160cca03ed221b2", + "347a16f174192c56", + "2a3e1067115745c2", + "5c330b93d4700b22", + "36fe3abe2dad5167", + "e021b78ba899cdd9", + "2e1946d20aff237d", + "498021d379d9cb6a", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x498021d379d9cb6a2e1946d20aff237de021b78ba899cdd936fe3abe2dad5167": [ + "00000000668175e2", + "00000000b241ea85", + "00000000e8aa9e8d", + "00000000248a06bb", + "000000000a5b84d9", + "00000000791c8a3d", + "0000000066bb12cf", + "000000005916e219" + ], + "0x69d5f78b6a46aa1d02ef2f6176cbbf970daef15f24ea3e2088de93befbb5aaa4": [ + "66ee2be0687eea76", + "6926f8ca8796c78a", + "26179f49c434dc16", + "649e63bfe1247ba4", + "5e83cc15f9f05fa9", + "4098e44c091c5d81", + "1a9584e1365c3ec9", + "021fc6d3425cd2f6", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x021fc6d3425cd2f61a9584e1365c3ec94098e44c091c5d815e83cc15f9f05fa9": [ + "00000000cad00000", + "00000000203b67bc", + "0000000000000035", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ] + } + }, + { + "oldStateRoot": "0x8706bee45d447a8baa6773c8bae74133a7e724755ece08b83bbe65bc5dde8fd0", + "newStateRoot": "0x773c0592cf69e2d7f4b4294d71c696f808f760210934ce634ececd2a861eda29", + "oldAccInputHash": "0xad1915669aaf61a83bbfad1f4360c1a32245e38ffb67b1afa68c825135890fc9", + "newAccInputHash": "0xbd71644a8d0eff3d5ae771310c7f15c097dddffe7199e6db738479b01729abfe", + "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "oldNumBatch": 3, + "newNumBatch": 4, + "chainID": 1000, + "batchL2Data": "0xee01843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff883782dace9d900000808203e88080d7d8b23bdec805a0c758de3e2289077b1e4c8401ddff73c7e59e2f9351d14f5f6f04e7bbb69548737581cd5a6e3bac8695776bfd41dc1c8fc9921c4b08e008031bee02843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff8829a2241af62c0000808203e88080ee8448de88596fff6a98af2e603c9a10ccafa114815e844c8b7e8c52cb3fd1470d81101bb5a4a0aa5f459f29da0f6e95cd9e178774f0f3f1c48733618d7bd2231c", + "globalExitRoot": "0x090bcaf734c4f06c93954a827b45a6e8c67b8e0fd1e0a35a1c5982d6961828f9", + "timestamp": 1944498032, + "sequencerAddr": "0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D", + "batchHashData": "0x763d3272e66b10bef69106ea07750823c580d20802fb1141b69b5ec56790a449", + "contractsBytecode": {}, + "db": { + "0x8706bee45d447a8baa6773c8bae74133a7e724755ece08b83bbe65bc5dde8fd0": [ + "36f11462d7dc2049", + "24b1b29506d2ca3b", + "ea74814fde26a1fc", + "fc5047651eec24c9", + "032836435cf046f4", + "53535911452e9b1a", + "34e88c8e325ab9ce", + "c7d3a9e25b4afd50", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xfc5047651eec24c9ea74814fde26a1fc24b1b29506d2ca3b36f11462d7dc2049": [ + "ae5eef5438ed0e3f", + "5c4895355f3e4439", + "cf826865dbad9c26", + "696681d0aa7090c5", + "080b902f0a1c7a93", + "1ae6bb7600b7ead2", + "e2e604b69cb5d0a3", + "9575d348100a859d", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x696681d0aa7090c5cf826865dbad9c265c4895355f3e4439ae5eef5438ed0e3f": [ + "48a46a8e735c5308", + "13c524e0f8adc42e", + "4e2074fc48c70ae0", + "85bf62d5f65b9449", + "0e27e92c28029aec", + "98e0c826ec17d37a", + "65597af607e1af8b", + "ace107db9858f320", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xace107db9858f32065597af607e1af8b98e0c826ec17d37a0e27e92c28029aec": [ + "0000000073e6af6f", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x9575d348100a859de2e604b69cb5d0a31ae6bb7600b7ead2080b902f0a1c7a93": [ + "43686620bee15ba0", + "60f18e32cbb17f08", + "849da8cef55961e1", + "54998e84ae91f8cb", + "ccb0872229d9428a", + "392384aa92e3b62d", + "a04678bfaf40c3aa", + "7d38466a7779520d", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x54998e84ae91f8cb849da8cef55961e160f18e32cbb17f0843686620bee15ba0": [ + "02aa707693b30b9c", + "6cfec68811f9460f", + "5180f56a58386690", + "bcc3f4d2c3de39da", + "d4c4f1608d97005b", + "d742187fe03d23a6", + "2d500ae13c0b2649", + "5936e0b840213846", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x5936e0b8402138462d500ae13c0b2649d742187fe03d23a6d4c4f1608d97005b": [ + "00000000bdc00591", + "000000006c2c3f73", + "000000008c95e723", + "00000000d27e5d86", + "00000000143c4997", + "00000000c14efc41", + "00000000735c36c7", + "00000000c8b71500" + ], + "0x7d38466a7779520da04678bfaf40c3aa392384aa92e3b62dccb0872229d9428a": [ + "de85f6b6f35eb434", + "ff72d70ff218137c", + "3cddc2a902a47f90", + "bf636d7f9cca148b", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xbf636d7f9cca148b3cddc2a902a47f90ff72d70ff218137cde85f6b6f35eb434": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "f6043722b533d688", + "cccaa4ea742a40a8", + "e1dc1c6be86ad10d", + "86ed3025c1099697", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x86ed3025c1099697e1dc1c6be86ad10dcccaa4ea742a40a8f6043722b533d688": [ + "94c9b6c977fd6b62", + "63d51a718f1d4595", + "0af1d54b83576182", + "e7ead4cf47b5f6a7", + "fa21c802e3203385", + "6994f11f82f251e6", + "f0bd59a452d4d0ee", + "e8ee44891402527a", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xe7ead4cf47b5f6a70af1d54b8357618263d51a718f1d459594c9b6c977fd6b62": [ + "37866cdbe5877c88", + "2d62534cb92ee170", + "6bf2c9fd6a3aa16c", + "325ba19f4ab866aa", + "cad6cdbfa198be91", + "cd0e941b466a39b4", + "a7e6b3f9d3f197d5", + "a2135065f1605059", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xa2135065f1605059a7e6b3f9d3f197d5cd0e941b466a39b4cad6cdbfa198be91": [ + "0000000000000003", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xe8ee44891402527af0bd59a452d4d0ee6994f11f82f251e6fa21c802e3203385": [ + "20284081553655e3", + "280e11c9e7886afe", + "083dff83bd06d987", + "77c2e46005223573", + "8970fbd8a8e998b0", + "78ae1b24331feafe", + "4b733a42af75c0d1", + "8bed5904c253e80b", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x8bed5904c253e80b4b733a42af75c0d178ae1b24331feafe8970fbd8a8e998b0": [ + "00000000d2582b99", + "00000000dfc171ed", + "0000000070a9b538", + "000000003cf71b6a", + "00000000f175a4f8", + "0000000091639493", + "0000000084a5333b", + "00000000c8a0cb4b" + ], + "0xc7d3a9e25b4afd5034e88c8e325ab9ce53535911452e9b1a032836435cf046f4": [ + "74c9d6d0dd94de93", + "2c9a6388fa8bb9e5", + "de620e2fc4c1c263", + "49a5764a6e257286", + "1c383c294deabfdc", + "479377327832ef33", + "6aad9259584cb1b4", + "a39da35663ea0751", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x49a5764a6e257286de620e2fc4c1c2632c9a6388fa8bb9e574c9d6d0dd94de93": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "e78dae45eb35b5dd", + "77ea112b1926c65a", + "fb186b37367b4282", + "a07082a92059a4f7", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xa07082a92059a4f7fb186b37367b428277ea112b1926c65ae78dae45eb35b5dd": [ + "9e0f700ca62c18b6", + "ad28cf8357819cbe", + "5755654f95ffb169", + "080d700756d33b65", + "9d52801dbef8ad6d", + "cbd69e0ee22acb54", + "f1a13b19fa44fe59", + "180222ca16c7b96c", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x080d700756d33b655755654f95ffb169ad28cf8357819cbe9e0f700ca62c18b6": [ + "16dde42596b907f0", + "49015d7e991a1528", + "4a6eced6e8304885", + "305a6af4d7a8a00c", + "90e98ea2a6fee2b3", + "09b4104e4b0f1f42", + "3c656749691cf3af", + "4b1d11a97ceff72f", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x4b1d11a97ceff72f3c656749691cf3af09b4104e4b0f1f4290e98ea2a6fee2b3": [ + "00000000c5080000", + "00000000f9ccd8a1", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x180222ca16c7b96cf1a13b19fa44fe59cbd69e0ee22acb549d52801dbef8ad6d": [ + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "bd0c361f7fb79995", + "b929251d438f7b2b", + "895bceaefe69fbcf", + "1e79c4f3bfdfeac9", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x1e79c4f3bfdfeac9895bceaefe69fbcfb929251d438f7b2bbd0c361f7fb79995": [ + "e37ad7988d2734e1", + "b48ff1a2d485bf8b", + "b8479aa634e0301f", + "02299c9ad4460ab2", + "2f4484fb4d55974f", + "b27b5e6dd2ca55e4", + "ba43df9655f0a22f", + "0e9765b82651a10d", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x02299c9ad4460ab2b8479aa634e0301fb48ff1a2d485bf8be37ad7988d2734e1": [ + "08e4392e4efedcc5", + "3ffdfa85d03da17c", + "7c18430af73c190c", + "1c3e76134671e490", + "a27c610b929c5373", + "d822841a75cff991", + "d5fd2275e32107a8", + "eebb7a70544ab6b3", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xeebb7a70544ab6b3d5fd2275e32107a8d822841a75cff991a27c610b929c5373": [ + "0000000000000004", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x0e9765b82651a10dba43df9655f0a22fb27b5e6dd2ca55e42f4484fb4d55974f": [ + "25fd1dddf4354e7c", + "2b1a0e19c11639a0", + "4b2ece4042b09d92", + "58a82e472c5b400b", + "57bd6b6e5e46fa04", + "80a45aa472f875e1", + "ae826e8599a82722", + "4395da251b720efc", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x4395da251b720efcae826e8599a8272280a45aa472f875e157bd6b6e5e46fa04": [ + "00000000255988cf", + "0000000056a0c023", + "0000000070aee942", + "00000000138a8ace", + "0000000006f72595", + "000000006fe00020", + "00000000155dcd14", + "00000000e649e3b8" + ], + "0xa39da35663ea07516aad9259584cb1b4479377327832ef331c383c294deabfdc": [ + "8ac0d953b8851ba0", + "cf32e8e4ed077026", + "0d7f7f638fb8f823", + "71a50644b4ece3a4", + "2b6429747753e992", + "8de937d8391bc07c", + "0ba2467e6b2a03b8", + "43ce72d79779e851", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x71a50644b4ece3a40d7f7f638fb8f823cf32e8e4ed0770268ac0d953b8851ba0": [ + "205c77d6b9f5eefc", + "28f8d6d672c9506b", + "4eb97b136c3768b6", + "1a621134ad618159", + "f4a2fe2a8d069a9c", + "c3abede01462207c", + "3b1dc8930396aa67", + "1686cf7f8056caaa", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x1a621134ad6181594eb97b136c3768b628f8d6d672c9506b205c77d6b9f5eefc": [ + "442f7573a4097cf2", + "3520bc74612a2ea9", + "143ce4e61bf52251", + "6d34d1e254003d2d", + "d074b8cee5dcf415", + "2346a1b4c0f390e8", + "47969c1f5a6a25b1", + "da62fdf84a21108e", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0xda62fdf84a21108e47969c1f5a6a25b12346a1b4c0f390e8d074b8cee5dcf415": [ + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x1686cf7f8056caaa3b1dc8930396aa67c3abede01462207cf4a2fe2a8d069a9c": [ + "7160cca03ed221b2", + "347a16f174192c56", + "2a3e1067115745c2", + "5c330b93d4700b22", + "36fe3abe2dad5167", + "e021b78ba899cdd9", + "2e1946d20aff237d", + "498021d379d9cb6a", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x498021d379d9cb6a2e1946d20aff237de021b78ba899cdd936fe3abe2dad5167": [ + "00000000668175e2", + "00000000b241ea85", + "00000000e8aa9e8d", + "00000000248a06bb", + "000000000a5b84d9", + "00000000791c8a3d", + "0000000066bb12cf", + "000000005916e219" + ], + "0x43ce72d79779e8510ba2467e6b2a03b88de937d8391bc07c2b6429747753e992": [ + "66ee2be0687eea76", + "6926f8ca8796c78a", + "26179f49c434dc16", + "649e63bfe1247ba4", + "67bbfffd0982dfa4", + "93c661c88448b5ed", + "cec2687622ccc942", + "4e709c8e17913749", + "0000000000000001", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ], + "0x4e709c8e17913749cec2687622ccc94293c661c88448b5ed67bbfffd0982dfa4": [ + "0000000019980000", + "000000003bfcd524", + "0000000000000035", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000", + "0000000000000000" + ] + } + } + ], + "oldStateRoot": "0x3ca39a7b5b419d1c50c89a8d15d1234f6cbc8baadb465efb609832bbc19f9026", + "oldAccInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "oldNumBatch": 0, + "newStateRoot": "0x773c0592cf69e2d7f4b4294d71c696f808f760210934ce634ececd2a861eda29", + "newAccInputHash": "0xbd71644a8d0eff3d5ae771310c7f15c097dddffe7199e6db738479b01729abfe", + "newLocalExitRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "newNumBatch": 4, + "chainID": 1000, + "aggregatorAddress": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "inputSnark": "0x28c0b4c8f2424f05e9ba852a1cadc1a02387794d77aed62e89ff69789461c817" +} \ No newline at end of file diff --git a/test/contracts/real-prover/test-inputs/proof.json b/test/contracts/real-prover/test-inputs/proof.json index bdeced9e2..947271bad 100644 --- a/test/contracts/real-prover/test-inputs/proof.json +++ b/test/contracts/real-prover/test-inputs/proof.json @@ -1,18 +1,17 @@ - { "pi_a": [ - "92720107533401008849053778558049219855365383482526087085452173073370760805", - "13826838703389754954030947414105187663814967588576084571406321808291125843435", + "2327622090307511516385842459848668356423537075841640477741513885936484828605", + "16994376655875617948137279512938072753901825871791054332897521837322718218202", "1" ], "pi_b": [ [ - "5475858851212457450955721661678670781624308838111317524369599592504160527901", - "17941023582557154607979891126610962501834920288981572906618674423793027994818" + "17583190728555046277846744913298088166409384020683094783430857603102711263776", + "6373557693069858928242923229671108214850663769060909150125924412840634664101" ], [ - "133141362172752167181464746908147091611715494326322188365259936101242370441", - "15283277295854565461827967770178761605443770145623911758153795385044736856957" + "7677317068353803146210202095214930255326618550529512577789635073693534959901", + "7199060787009529673972082906143443195326285868953465051359376688510390123540" ], [ "1", @@ -20,8 +19,8 @@ ] ], "pi_c": [ - "1242071955068832938180609069213946031298425379167551849613080735211649206690", - "9399857286493874866222544675489603818689332155558918500289148827560827908499", + "14077806109317025919041686235433709295750462784941430901647546924637775168528", + "4415429409846688360127756232288891950286850349156171374826700050726681018518", "1" ], "protocol": "groth16" diff --git a/test/contracts/real-prover/test-inputs/public.json b/test/contracts/real-prover/test-inputs/public.json index 4a2c29301..c1aa476fd 100644 --- a/test/contracts/real-prover/test-inputs/public.json +++ b/test/contracts/real-prover/test-inputs/public.json @@ -1,3 +1,3 @@ [ - "6723147925435946818494446359291442548017141378035998979955073992179800955505" + "18432996311612713452031309394730387420849389218459329544791801090500737484823" ] \ No newline at end of file diff --git a/test/contracts/timelockUpgradeTest.js b/test/contracts/timelockUpgradeTest.js index ab995064d..c48b4e9bc 100644 --- a/test/contracts/timelockUpgradeTest.js +++ b/test/contracts/timelockUpgradeTest.js @@ -202,7 +202,6 @@ describe('Polygon ZK-EVM', () => { await expect(polygonZkEVMBridgeContractV2.maxEtherBridge()).to.be.reverted; // Transfer ownership to timelock - await upgrades.admin.transferProxyAdminOwnership(timelockContract.address); // Can't upgrade the contract since it does not have the ownership await expect(upgrades.upgradeProxy(polygonZkEVMBridgeContract.address, polygonZkEVMBridgeFactoryV2)) @@ -224,6 +223,15 @@ describe('Polygon ZK-EVM', () => { ethers.constants.HashZero, ); + // Check current delay + expect(await timelockContract.getMinDelay()).to.be.equal(minDelay); + + // Put zkevmcontract on emergency mode + await polygonZkEVMContract.activateEmergencyState(0); + + // Check delay is 0 + expect(await timelockContract.getMinDelay()).to.be.equal(0); + // Schedule operation await timelockContract.schedule( operation.target, @@ -231,30 +239,19 @@ describe('Polygon ZK-EVM', () => { operation.data, operation.predecessor, operation.salt, - minDelay, + 0, ); - // Can't upgrade because the timeout didint expire yet - await expect(timelockContract.execute( - operation.target, - operation.value, - operation.data, - operation.predecessor, - operation.salt, - )).to.be.revertedWith('TimelockController: operation is not ready'); - // Check that is the v0 contract await expect(polygonZkEVMBridgeContractV2.maxEtherBridge()).to.be.reverted; - await ethers.provider.send('evm_increaseTime', [minDelay]); - await timelockContract.execute( + // Transaction cna be executed, delay is reduced to 0, but fails bc this timelock is not owner + await expect(timelockContract.execute( operation.target, operation.value, operation.data, operation.predecessor, operation.salt, - ); - - await expect(await polygonZkEVMBridgeContractV2.maxEtherBridge()).to.be.equal(0); + )).to.be.revertedWith('TimelockController: underlying transaction reverted'); }); }); From 43ed0c13119f50316a554521fe5e776411225ce3 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Tue, 20 Dec 2022 16:13:37 +0100 Subject: [PATCH 57/71] update genesis --- deployment/genesis.json | 4 ++-- docker/scripts/genesis_docker.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/deployment/genesis.json b/deployment/genesis.json index a4de66de1..f53185a20 100644 --- a/deployment/genesis.json +++ b/deployment/genesis.json @@ -1,11 +1,11 @@ { - "root": "0x9db7fd5c3c6315ad21e10e643a258ee8cc8d35ee0bc51b1f704a7e7a6090c523", + "root": "0xb6271a9a7f9bfe7ff8259ea58750577b795c13d2d1ce09b61da0878bc4832ba9", "genesis": [ { "balance": "200000000000000000000000000", "nonce": "1", "address": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988", - "bytecode": "0x608060405260043610620001675760003560e01c806381b1c17411620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b806381b1c17414620003735780638f61151914620003ad5780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b80633ae05047116200011e5780633ae0504714620002a25780633da8168214620002ba5780633e19704314620002df578063463855491462000304578063647c576c14620003295780637b6323c1146200034e57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002470565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009d2565b348015620001db57600080fd5b50620001f3620001ed366004620024fd565b62000a0b565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002539565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b506200022462000a5e565b348015620002c757600080fd5b50620001a1620002d936600462002628565b62000b51565b348015620002ec57600080fd5b5062000224620002fe366004620026a6565b62000c53565b3480156200031157600080fd5b506200018362000323366004620027b7565b62000ce0565b3480156200033657600080fd5b5062000183620003483660046200289e565b62000e86565b3480156200035b57600080fd5b50620001836200036d366004620027b7565b62000fe5565b3480156200038057600080fd5b50620001f362000392366004620028ee565b6024602052600090815260409020546001600160a01b031681565b348015620003ba57600080fd5b50602754620001f3906001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028ee565b62001492565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002908565b620014d7565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620029bc565b620015ee565b348015620004c357600080fd5b50620001836200179a565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028ee565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a24565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008ec565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074957604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562000710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000736919062002a9b565b50602081015181519094509250620008ea565b84156200075e576200075e8a888888620017d1565b620007756001600160a01b038b1633308a62001bf9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f6919081019062002b36565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000835573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085f919081019062002b36565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c4919062002b6f565b604051602001620008d89392919062002bbd565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092e98979695949392919062002bfa565b60405180910390a16200095962000953600084868c8c8c888051906020012062000c53565b62001c66565b6026546001600160a01b03166333d6247d6200097462000a5e565b6040518263ffffffff1660e01b81526004016200099391815260200190565b600060405180830381600087803b158015620009ae57600080fd5b505af1158015620009c3573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ff5760405162461bcd60e51b8152600401620005539062002c67565b62000a0962001db7565b565b600060246000848460405160200162000a2692919062002cc4565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b48578260011660010362000ac9576001816020811062000a955762000a9562002cee565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af6565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0360028462002d30565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3f9062002d47565b91505062000a69565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c44578160011660010362000bce5786818151811062000b8c5762000b8c62002cee565b60200260200101518360405160200162000bb0929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c20565b8287828151811062000be45762000be462002cee565b602002602001015160405160200162000c07929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2d60028362002d30565b91508062000c3b8162002d47565b91505062000b61565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d065760405162461bcd60e51b8152600401620005539062002a24565b62000d1c8a8a8a8a8a8a8a8a8a8a600162001e15565b62000d2d8963ffffffff16620020a0565b6000836001600160a01b03168387898560405160240162000d519392919062002d63565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d88919062002d9e565b60006040518083038185875af1925050503d806000811462000dc7576040519150601f19603f3d011682016040523d82523d6000602084013e62000dcc565b606091505b505090508062000e385760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e7195949392919062002dbc565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea75750600054600160ff909116105b8062000ec35750303b15801562000ec3575060005460ff166001145b62000f285760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f4c576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff16156200100b5760405162461bcd60e51b8152600401620005539062002a24565b620010218a8a8a8a8a8a8a8a8a8a600062001e15565b620010328963ffffffff16620020a0565b6001600160a01b0385166200112757604080516000808252602082019092526001600160a01b0385169084906040516200106d919062002d9e565b60006040518083038185875af1925050503d8060008114620010ac576040519150601f19603f3d011682016040523d82523d6000602084013e620010b1565b606091505b5050905080620011205760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b5062001445565b60225463ffffffff6101009091048116908716036200115c57620011566001600160a01b0386168484620020e2565b62001445565b600086866040516020016200117392919062002cc4565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013ca57600080600085806020019051810190620011c5919062002df3565b925092509250600085848484604051620011df90620023d6565b620011ed9392919062002bbd565b8190604051809103906000f59050801580156200120e573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001263573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001289919062002a9b565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013b89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001442565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200141a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001440919062002a9b565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200147e95949392919062002dbc565b60405180910390a150505050505050505050565b600080620014a36101008462002d30565b90506000620014b56101008562002e69565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014ef92919062002cc4565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200152290620023d6565b601f1982820381018352601f9091011660408190526200154f908d908d908d908d908d9060200162002ea9565b60408051601f19818403018152908290526200156f929160200162002eea565b60405160208183030381529060405280519060200120604051602001620015c894939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620016145760405162461bcd60e51b8152600401620005539062002a24565b60225463ffffffff6101009091048116908416036200169c5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016f098979695949392919062002bfa565b60405180910390a162001727620009536001602260019054906101000a900463ffffffff1633878734888051906020012062000c53565b6026546001600160a01b03166333d6247d6200174262000a5e565b6040518263ffffffff1660e01b81526004016200176191815260200190565b600060405180830381600087803b1580156200177c57600080fd5b505af115801562001791573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017c75760405162461bcd60e51b8152600401620005539062002c67565b62000a0962002114565b60006200181483838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021c392505050565b9050632afa533160e01b6001600160e01b031982160162001a0d57600080808080808062001846896004818d62002f1d565b81019062001855919062002f49565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018975760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b0386163014620018c25760405162461bcd60e51b8152600401620005539062003001565b8a8514620019395760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620019b9919062002d9e565b6000604051808303816000865af19150503d8060008114620019f8576040519150601f19603f3d011682016040523d82523d6000602084013e620019fd565b606091505b5050505050505050505062001bf2565b6001600160e01b031981166323f2ebc360e21b1462001a835760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a9b8a6004818e62002f1d565b81019062001aaa919062003052565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001aee5760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b038716301462001b195760405162461bcd60e51b8152600401620005539062003001565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001ba2919062002d9e565b6000604051808303816000865af19150503d806000811462001be1576040519150601f19603f3d011682016040523d82523d6000602084013e62001be6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdf9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021ca565b80600162001c7760206002620031db565b62001c839190620031e9565b6021541062001ce85760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cfd919062003203565b909155505060215460005b602081101562001da7578160011660010362001d3d57826001826020811062001d355762001d3562002cee565b015550505050565b6001816020811062001d535762001d5362002cee565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d90919062002d30565b91508062001d9e8162002d47565b91505062001d08565b5062001db26200321e565b505050565b60225460ff161562001ddd5760405162461bcd60e51b8152600401620005539062002a24565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001e268a63ffffffff1662001492565b1562001e7d5760405162461bcd60e51b81526020600482015260306024820152600080516020620047bb83398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ef1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f17919062003234565b90508060000362001f805760405162461bcd60e51b81526020600482015260396024820152600080516020620047bb83398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff8781166101009092041614620020025760405162461bcd60e51b81526020600482015260436024820152600080516020620047bb83398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff166200202057508862002023565b50895b6200204e6200203f848b8b8b8b8b8b8051906020012062000c53565b8e8e63ffffffff168462000b51565b620009c35760405162461bcd60e51b815260206004820152602c6024820152600080516020620047bb83398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020b06101008362002d30565b90506000620020c26101008462002e69565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001db290849063a9059cbb60e01b9060640162001c2e565b60225460ff166200218e5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002221826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022a39092919063ffffffff16565b80519091501562001db2578080602001905181019062002242919062002a9b565b62001db25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c4b848460008585600080866001600160a01b03168587604051620022cd919062002d9e565b60006040518083038185875af1925050503d80600081146200230c576040519150601f19603f3d011682016040523d82523d6000602084013e62002311565b606091505b509150915062002324878383876200232f565b979650505050505050565b60608315620023a35782516000036200239b576001600160a01b0385163b6200239b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c4b565b62000c4b8383815115620023ba5781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200324e565b611557806200326483390190565b6001600160a01b0381168114620023fa57600080fd5b50565b80356200240a81620023e4565b919050565b803563ffffffff811681146200240a57600080fd5b60008083601f8401126200243757600080fd5b50813567ffffffffffffffff8111156200245057600080fd5b6020830191508360208285010111156200246957600080fd5b9250929050565b60008060008060008060a087890312156200248a57600080fd5b86356200249781620023e4565b9550620024a7602088016200240f565b94506040870135620024b981620023e4565b935060608701359250608087013567ffffffffffffffff811115620024dd57600080fd5b620024eb89828a0162002424565b979a9699509497509295939492505050565b600080604083850312156200251157600080fd5b6200251c836200240f565b915060208301356200252e81620023e4565b809150509250929050565b6000602082840312156200254c57600080fd5b81356200255981620023e4565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620025a257620025a262002560565b604052919050565b600082601f830112620025bc57600080fd5b8135602067ffffffffffffffff821115620025db57620025db62002560565b8160051b620025ec82820162002576565b92835284810182019282810190878511156200260757600080fd5b83870192505b8483101562002324578235825291830191908301906200260d565b600080600080608085870312156200263f57600080fd5b84359350602085013567ffffffffffffffff808211156200265f57600080fd5b6200266d88838901620025aa565b94506040870135915080821682146200268557600080fd5b509396929550929360600135925050565b60ff81168114620023fa57600080fd5b600080600080600080600060e0888a031215620026c257600080fd5b8735620026cf8162002696565b9650620026df602089016200240f565b95506040880135620026f181620023e4565b945062002701606089016200240f565b935060808801356200271381620023e4565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200274d576200274d62002560565b50601f01601f191660200190565b600082601f8301126200276d57600080fd5b8135620027846200277e8262002730565b62002576565b8181528460208386010111156200279a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027d857600080fd5b8a3567ffffffffffffffff80821115620027f157600080fd5b620027ff8e838f01620025aa565b9b506200280f60208e016200240f565b9a5060408d0135995060608d013598506200282d60808e016200240f565b97506200283d60a08e01620023fd565b96506200284d60c08e016200240f565b95506200285d60e08e01620023fd565b94506101008d013593506101208d01359150808211156200287d57600080fd5b506200288c8d828e016200275b565b9150509295989b9194979a5092959850565b600080600060608486031215620028b457600080fd5b620028bf846200240f565b92506020840135620028d181620023e4565b91506040840135620028e381620023e4565b809150509250925092565b6000602082840312156200290157600080fd5b5035919050565b600080600080600080600060a0888a0312156200292457600080fd5b6200292f886200240f565b965060208801356200294181620023e4565b9550604088013567ffffffffffffffff808211156200295f57600080fd5b6200296d8b838c0162002424565b909750955060608a01359150808211156200298757600080fd5b50620029968a828b0162002424565b9094509250506080880135620029ac8162002696565b8091505092959891949750929550565b600080600060608486031215620029d257600080fd5b620029dd846200240f565b92506020840135620029ef81620023e4565b9150604084013567ffffffffffffffff81111562002a0c57600080fd5b62002a1a868287016200275b565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b8015158114620023fa57600080fd5b60006020828403121562002aae57600080fd5b8151620025598162002a8c565b60005b8381101562002ad857818101518382015260200162002abe565b8381111562000fdf5750506000910152565b600082601f83011262002afc57600080fd5b815162002b0d6200277e8262002730565b81815284602083860101111562002b2357600080fd5b62000c4b82602083016020870162002abb565b60006020828403121562002b4957600080fd5b815167ffffffffffffffff81111562002b6157600080fd5b62000c4b8482850162002aea565b60006020828403121562002b8257600080fd5b8151620025598162002696565b6000815180845262002ba981602086016020860162002abb565b601f01601f19169290920160200192915050565b60608152600062002bd2606083018662002b8f565b828103602084015262002be6818662002b8f565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002c4e8483018762002b8f565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002d425762002d4262002d04565b500490565b60006001820162002d5c5762002d5c62002d1a565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d959083018462002b8f565b95945050505050565b6000825162002db281846020870162002abb565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002e0957600080fd5b835167ffffffffffffffff8082111562002e2257600080fd5b62002e308783880162002aea565b9450602086015191508082111562002e4757600080fd5b5062002e568682870162002aea565b9250506040840151620028e38162002696565b60008262002e7b5762002e7b62002d04565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002ebf60608301878962002e80565b828103602084015262002ed481868862002e80565b91505060ff831660408301529695505050505050565b6000835162002efe81846020880162002abb565b83519083019062002f1481836020880162002abb565b01949350505050565b6000808585111562002f2e57600080fd5b8386111562002f3c57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f6557600080fd5b873562002f7281620023e4565b9650602088013562002f8481620023e4565b955060408801359450606088013593506080880135620027138162002696565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b0312156200307057600080fd5b88356200307d81620023e4565b975060208901356200308f81620023e4565b965060408901359550606089013594506080890135620030af8162002a8c565b935060a0890135620030c18162002696565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200311f57816000190482111562003103576200310362002d1a565b808516156200311157918102915b93841c9390800290620030e3565b509250929050565b600082620031385750600162000a58565b81620031475750600062000a58565b81600181146200316057600281146200316b576200318b565b600191505062000a58565b60ff8411156200317f576200317f62002d1a565b50506001821b62000a58565b5060208310610133831016604e8410600b8410161715620031b0575081810a62000a58565b620031bc8383620030de565b8060001904821115620031d357620031d362002d1a565b029392505050565b600062002559838362003127565b600082821015620031fe57620031fe62002d1a565b500390565b6000821982111562003219576200321962002d1a565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200324757600080fd5b5051919050565b60208152600062002559602083018462002b8f56fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea264697066735822122070fae8b3daebe7fc894d50296739b7a26e638f37239109230c7dfd552785f2a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220a0c682e41bbc0bcf599110077edba37d297487e713d10fc5634097fd73bd508664736f6c634300080f0033", + "bytecode": "0x608060405260043610620001675760003560e01c80637b6323c111620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b80637b6323c1146200037057806381b1c17414620003955780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b806337883a3e116200011e57806337883a3e14620002a25780633ae0504714620002c45780633da8168214620002dc5780633e1970431462000301578063463855491462000326578063647c576c146200034b57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002470565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009d2565b348015620001db57600080fd5b50620001f3620001ed366004620024fd565b62000a0b565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002539565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b50602754620001f3906001600160a01b031681565b348015620002d157600080fd5b506200022462000a5e565b348015620002e957600080fd5b50620001a1620002fb36600462002628565b62000b51565b3480156200030e57600080fd5b506200022462000320366004620026a6565b62000c53565b3480156200033357600080fd5b506200018362000345366004620027b7565b62000ce0565b3480156200035857600080fd5b50620001836200036a3660046200289e565b62000e86565b3480156200037d57600080fd5b50620001836200038f366004620027b7565b62000fe5565b348015620003a257600080fd5b50620001f3620003b4366004620028ee565b6024602052600090815260409020546001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028ee565b62001492565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002908565b620014d7565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620029bc565b620015ee565b348015620004c357600080fd5b50620001836200179a565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028ee565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a24565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008ec565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074957604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562000710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000736919062002a9b565b50602081015181519094509250620008ea565b84156200075e576200075e8a888888620017d1565b620007756001600160a01b038b1633308a62001bf9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f6919081019062002b36565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000835573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085f919081019062002b36565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c4919062002b6f565b604051602001620008d89392919062002bbd565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092e98979695949392919062002bfa565b60405180910390a16200095962000953600084868c8c8c888051906020012062000c53565b62001c66565b6026546001600160a01b03166333d6247d6200097462000a5e565b6040518263ffffffff1660e01b81526004016200099391815260200190565b600060405180830381600087803b158015620009ae57600080fd5b505af1158015620009c3573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ff5760405162461bcd60e51b8152600401620005539062002c67565b62000a0962001db7565b565b600060246000848460405160200162000a2692919062002cc4565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b48578260011660010362000ac9576001816020811062000a955762000a9562002cee565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af6565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0360028462002d30565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3f9062002d47565b91505062000a69565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c44578160011660010362000bce5786818151811062000b8c5762000b8c62002cee565b60200260200101518360405160200162000bb0929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c20565b8287828151811062000be45762000be462002cee565b602002602001015160405160200162000c07929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2d60028362002d30565b91508062000c3b8162002d47565b91505062000b61565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d065760405162461bcd60e51b8152600401620005539062002a24565b62000d1c8a8a8a8a8a8a8a8a8a8a600162001e15565b62000d2d8963ffffffff16620020a0565b6000836001600160a01b03168387898560405160240162000d519392919062002d63565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d88919062002d9e565b60006040518083038185875af1925050503d806000811462000dc7576040519150601f19603f3d011682016040523d82523d6000602084013e62000dcc565b606091505b505090508062000e385760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e7195949392919062002dbc565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea75750600054600160ff909116105b8062000ec35750303b15801562000ec3575060005460ff166001145b62000f285760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f4c576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff16156200100b5760405162461bcd60e51b8152600401620005539062002a24565b620010218a8a8a8a8a8a8a8a8a8a600062001e15565b620010328963ffffffff16620020a0565b6001600160a01b0385166200112757604080516000808252602082019092526001600160a01b0385169084906040516200106d919062002d9e565b60006040518083038185875af1925050503d8060008114620010ac576040519150601f19603f3d011682016040523d82523d6000602084013e620010b1565b606091505b5050905080620011205760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b5062001445565b60225463ffffffff6101009091048116908716036200115c57620011566001600160a01b0386168484620020e2565b62001445565b600086866040516020016200117392919062002cc4565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013ca57600080600085806020019051810190620011c5919062002df3565b925092509250600085848484604051620011df90620023d6565b620011ed9392919062002bbd565b8190604051809103906000f59050801580156200120e573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001263573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001289919062002a9b565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013b89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001442565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200141a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001440919062002a9b565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200147e95949392919062002dbc565b60405180910390a150505050505050505050565b600080620014a36101008462002d30565b90506000620014b56101008562002e69565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014ef92919062002cc4565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200152290620023d6565b601f1982820381018352601f9091011660408190526200154f908d908d908d908d908d9060200162002ea9565b60408051601f19818403018152908290526200156f929160200162002eea565b60405160208183030381529060405280519060200120604051602001620015c894939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620016145760405162461bcd60e51b8152600401620005539062002a24565b60225463ffffffff6101009091048116908416036200169c5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016f098979695949392919062002bfa565b60405180910390a162001727620009536001602260019054906101000a900463ffffffff1633878734888051906020012062000c53565b6026546001600160a01b03166333d6247d6200174262000a5e565b6040518263ffffffff1660e01b81526004016200176191815260200190565b600060405180830381600087803b1580156200177c57600080fd5b505af115801562001791573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017c75760405162461bcd60e51b8152600401620005539062002c67565b62000a0962002114565b60006200181483838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021c392505050565b9050632afa533160e01b6001600160e01b031982160162001a0d57600080808080808062001846896004818d62002f1d565b81019062001855919062002f49565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018975760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b0386163014620018c25760405162461bcd60e51b8152600401620005539062003001565b8a8514620019395760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620019b9919062002d9e565b6000604051808303816000865af19150503d8060008114620019f8576040519150601f19603f3d011682016040523d82523d6000602084013e620019fd565b606091505b5050505050505050505062001bf2565b6001600160e01b031981166323f2ebc360e21b1462001a835760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a9b8a6004818e62002f1d565b81019062001aaa919062003052565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001aee5760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b038716301462001b195760405162461bcd60e51b8152600401620005539062003001565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001ba2919062002d9e565b6000604051808303816000865af19150503d806000811462001be1576040519150601f19603f3d011682016040523d82523d6000602084013e62001be6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdf9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021ca565b80600162001c7760206002620031db565b62001c839190620031e9565b6021541062001ce85760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cfd919062003203565b909155505060215460005b602081101562001da7578160011660010362001d3d57826001826020811062001d355762001d3562002cee565b015550505050565b6001816020811062001d535762001d5362002cee565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d90919062002d30565b91508062001d9e8162002d47565b91505062001d08565b5062001db26200321e565b505050565b60225460ff161562001ddd5760405162461bcd60e51b8152600401620005539062002a24565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001e268a63ffffffff1662001492565b1562001e7d5760405162461bcd60e51b81526020600482015260306024820152600080516020620047bb83398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ef1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f17919062003234565b90508060000362001f805760405162461bcd60e51b81526020600482015260396024820152600080516020620047bb83398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff8781166101009092041614620020025760405162461bcd60e51b81526020600482015260436024820152600080516020620047bb83398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff166200202057508862002023565b50895b6200204e6200203f848b8b8b8b8b8b8051906020012062000c53565b8e8e63ffffffff168462000b51565b620009c35760405162461bcd60e51b815260206004820152602c6024820152600080516020620047bb83398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020b06101008362002d30565b90506000620020c26101008462002e69565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001db290849063a9059cbb60e01b9060640162001c2e565b60225460ff166200218e5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002221826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022a39092919063ffffffff16565b80519091501562001db2578080602001905181019062002242919062002a9b565b62001db25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c4b848460008585600080866001600160a01b03168587604051620022cd919062002d9e565b60006040518083038185875af1925050503d80600081146200230c576040519150601f19603f3d011682016040523d82523d6000602084013e62002311565b606091505b509150915062002324878383876200232f565b979650505050505050565b60608315620023a35782516000036200239b576001600160a01b0385163b6200239b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c4b565b62000c4b8383815115620023ba5781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200324e565b611557806200326483390190565b6001600160a01b0381168114620023fa57600080fd5b50565b80356200240a81620023e4565b919050565b803563ffffffff811681146200240a57600080fd5b60008083601f8401126200243757600080fd5b50813567ffffffffffffffff8111156200245057600080fd5b6020830191508360208285010111156200246957600080fd5b9250929050565b60008060008060008060a087890312156200248a57600080fd5b86356200249781620023e4565b9550620024a7602088016200240f565b94506040870135620024b981620023e4565b935060608701359250608087013567ffffffffffffffff811115620024dd57600080fd5b620024eb89828a0162002424565b979a9699509497509295939492505050565b600080604083850312156200251157600080fd5b6200251c836200240f565b915060208301356200252e81620023e4565b809150509250929050565b6000602082840312156200254c57600080fd5b81356200255981620023e4565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620025a257620025a262002560565b604052919050565b600082601f830112620025bc57600080fd5b8135602067ffffffffffffffff821115620025db57620025db62002560565b8160051b620025ec82820162002576565b92835284810182019282810190878511156200260757600080fd5b83870192505b8483101562002324578235825291830191908301906200260d565b600080600080608085870312156200263f57600080fd5b84359350602085013567ffffffffffffffff808211156200265f57600080fd5b6200266d88838901620025aa565b94506040870135915080821682146200268557600080fd5b509396929550929360600135925050565b60ff81168114620023fa57600080fd5b600080600080600080600060e0888a031215620026c257600080fd5b8735620026cf8162002696565b9650620026df602089016200240f565b95506040880135620026f181620023e4565b945062002701606089016200240f565b935060808801356200271381620023e4565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200274d576200274d62002560565b50601f01601f191660200190565b600082601f8301126200276d57600080fd5b8135620027846200277e8262002730565b62002576565b8181528460208386010111156200279a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027d857600080fd5b8a3567ffffffffffffffff80821115620027f157600080fd5b620027ff8e838f01620025aa565b9b506200280f60208e016200240f565b9a5060408d0135995060608d013598506200282d60808e016200240f565b97506200283d60a08e01620023fd565b96506200284d60c08e016200240f565b95506200285d60e08e01620023fd565b94506101008d013593506101208d01359150808211156200287d57600080fd5b506200288c8d828e016200275b565b9150509295989b9194979a5092959850565b600080600060608486031215620028b457600080fd5b620028bf846200240f565b92506020840135620028d181620023e4565b91506040840135620028e381620023e4565b809150509250925092565b6000602082840312156200290157600080fd5b5035919050565b600080600080600080600060a0888a0312156200292457600080fd5b6200292f886200240f565b965060208801356200294181620023e4565b9550604088013567ffffffffffffffff808211156200295f57600080fd5b6200296d8b838c0162002424565b909750955060608a01359150808211156200298757600080fd5b50620029968a828b0162002424565b9094509250506080880135620029ac8162002696565b8091505092959891949750929550565b600080600060608486031215620029d257600080fd5b620029dd846200240f565b92506020840135620029ef81620023e4565b9150604084013567ffffffffffffffff81111562002a0c57600080fd5b62002a1a868287016200275b565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b8015158114620023fa57600080fd5b60006020828403121562002aae57600080fd5b8151620025598162002a8c565b60005b8381101562002ad857818101518382015260200162002abe565b8381111562000fdf5750506000910152565b600082601f83011262002afc57600080fd5b815162002b0d6200277e8262002730565b81815284602083860101111562002b2357600080fd5b62000c4b82602083016020870162002abb565b60006020828403121562002b4957600080fd5b815167ffffffffffffffff81111562002b6157600080fd5b62000c4b8482850162002aea565b60006020828403121562002b8257600080fd5b8151620025598162002696565b6000815180845262002ba981602086016020860162002abb565b601f01601f19169290920160200192915050565b60608152600062002bd2606083018662002b8f565b828103602084015262002be6818662002b8f565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002c4e8483018762002b8f565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002d425762002d4262002d04565b500490565b60006001820162002d5c5762002d5c62002d1a565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d959083018462002b8f565b95945050505050565b6000825162002db281846020870162002abb565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002e0957600080fd5b835167ffffffffffffffff8082111562002e2257600080fd5b62002e308783880162002aea565b9450602086015191508082111562002e4757600080fd5b5062002e568682870162002aea565b9250506040840151620028e38162002696565b60008262002e7b5762002e7b62002d04565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002ebf60608301878962002e80565b828103602084015262002ed481868862002e80565b91505060ff831660408301529695505050505050565b6000835162002efe81846020880162002abb565b83519083019062002f1481836020880162002abb565b01949350505050565b6000808585111562002f2e57600080fd5b8386111562002f3c57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f6557600080fd5b873562002f7281620023e4565b9650602088013562002f8481620023e4565b955060408801359450606088013593506080880135620027138162002696565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b0312156200307057600080fd5b88356200307d81620023e4565b975060208901356200308f81620023e4565b965060408901359550606089013594506080890135620030af8162002a8c565b935060a0890135620030c18162002696565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200311f57816000190482111562003103576200310362002d1a565b808516156200311157918102915b93841c9390800290620030e3565b509250929050565b600082620031385750600162000a58565b81620031475750600062000a58565b81600181146200316057600281146200316b576200318b565b600191505062000a58565b60ff8411156200317f576200317f62002d1a565b50506001821b62000a58565b5060208310610133831016604e8410600b8410161715620031b0575081810a62000a58565b620031bc8383620030de565b8060001904821115620031d357620031d362002d1a565b029392505050565b600062002559838362003127565b600082821015620031fe57620031fe62002d1a565b500390565b6000821982111562003219576200321962002d1a565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200324757600080fd5b5051919050565b60208152600062002559602083018462002b8f56fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea264697066735822122070fae8b3daebe7fc894d50296739b7a26e638f37239109230c7dfd552785f2a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212208fde18b5efa27a9c6a9604bbebb39629f3a307cad6b8fab402a033ff62a94bfe64736f6c634300080f0033", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", "0x0000000000000000000000000000000000000000000000000000000000000022": "0x0100", diff --git a/docker/scripts/genesis_docker.json b/docker/scripts/genesis_docker.json index b57a5321e..cff17331e 100644 --- a/docker/scripts/genesis_docker.json +++ b/docker/scripts/genesis_docker.json @@ -1,11 +1,11 @@ { - "root": "0x462220efbd7a2af05b38c145c97518f4150f30e702e772b04feaffe7ef852524", + "root": "0x0cdcfe52b23364e018852df04bcd1478acd0a3579f00cbe1b9cdd0f7690baf57", "genesis": [ { "balance": "200000000000000000000000000", "nonce": "1", "address": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988", - "bytecode": "0x608060405260043610620001675760003560e01c806381b1c17411620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b806381b1c17414620003735780638f61151914620003ad5780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b80633ae05047116200011e5780633ae0504714620002a25780633da8168214620002ba5780633e19704314620002df578063463855491462000304578063647c576c14620003295780637b6323c1146200034e57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002470565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009d2565b348015620001db57600080fd5b50620001f3620001ed366004620024fd565b62000a0b565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002539565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b506200022462000a5e565b348015620002c757600080fd5b50620001a1620002d936600462002628565b62000b51565b348015620002ec57600080fd5b5062000224620002fe366004620026a6565b62000c53565b3480156200031157600080fd5b506200018362000323366004620027b7565b62000ce0565b3480156200033657600080fd5b5062000183620003483660046200289e565b62000e86565b3480156200035b57600080fd5b50620001836200036d366004620027b7565b62000fe5565b3480156200038057600080fd5b50620001f362000392366004620028ee565b6024602052600090815260409020546001600160a01b031681565b348015620003ba57600080fd5b50602754620001f3906001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028ee565b62001492565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002908565b620014d7565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620029bc565b620015ee565b348015620004c357600080fd5b50620001836200179a565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028ee565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a24565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008ec565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074957604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562000710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000736919062002a9b565b50602081015181519094509250620008ea565b84156200075e576200075e8a888888620017d1565b620007756001600160a01b038b1633308a62001bf9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f6919081019062002b36565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000835573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085f919081019062002b36565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c4919062002b6f565b604051602001620008d89392919062002bbd565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092e98979695949392919062002bfa565b60405180910390a16200095962000953600084868c8c8c888051906020012062000c53565b62001c66565b6026546001600160a01b03166333d6247d6200097462000a5e565b6040518263ffffffff1660e01b81526004016200099391815260200190565b600060405180830381600087803b158015620009ae57600080fd5b505af1158015620009c3573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ff5760405162461bcd60e51b8152600401620005539062002c67565b62000a0962001db7565b565b600060246000848460405160200162000a2692919062002cc4565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b48578260011660010362000ac9576001816020811062000a955762000a9562002cee565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af6565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0360028462002d30565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3f9062002d47565b91505062000a69565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c44578160011660010362000bce5786818151811062000b8c5762000b8c62002cee565b60200260200101518360405160200162000bb0929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c20565b8287828151811062000be45762000be462002cee565b602002602001015160405160200162000c07929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2d60028362002d30565b91508062000c3b8162002d47565b91505062000b61565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d065760405162461bcd60e51b8152600401620005539062002a24565b62000d1c8a8a8a8a8a8a8a8a8a8a600162001e15565b62000d2d8963ffffffff16620020a0565b6000836001600160a01b03168387898560405160240162000d519392919062002d63565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d88919062002d9e565b60006040518083038185875af1925050503d806000811462000dc7576040519150601f19603f3d011682016040523d82523d6000602084013e62000dcc565b606091505b505090508062000e385760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e7195949392919062002dbc565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea75750600054600160ff909116105b8062000ec35750303b15801562000ec3575060005460ff166001145b62000f285760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f4c576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff16156200100b5760405162461bcd60e51b8152600401620005539062002a24565b620010218a8a8a8a8a8a8a8a8a8a600062001e15565b620010328963ffffffff16620020a0565b6001600160a01b0385166200112757604080516000808252602082019092526001600160a01b0385169084906040516200106d919062002d9e565b60006040518083038185875af1925050503d8060008114620010ac576040519150601f19603f3d011682016040523d82523d6000602084013e620010b1565b606091505b5050905080620011205760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b5062001445565b60225463ffffffff6101009091048116908716036200115c57620011566001600160a01b0386168484620020e2565b62001445565b600086866040516020016200117392919062002cc4565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013ca57600080600085806020019051810190620011c5919062002df3565b925092509250600085848484604051620011df90620023d6565b620011ed9392919062002bbd565b8190604051809103906000f59050801580156200120e573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001263573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001289919062002a9b565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013b89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001442565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200141a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001440919062002a9b565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200147e95949392919062002dbc565b60405180910390a150505050505050505050565b600080620014a36101008462002d30565b90506000620014b56101008562002e69565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014ef92919062002cc4565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200152290620023d6565b601f1982820381018352601f9091011660408190526200154f908d908d908d908d908d9060200162002ea9565b60408051601f19818403018152908290526200156f929160200162002eea565b60405160208183030381529060405280519060200120604051602001620015c894939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620016145760405162461bcd60e51b8152600401620005539062002a24565b60225463ffffffff6101009091048116908416036200169c5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016f098979695949392919062002bfa565b60405180910390a162001727620009536001602260019054906101000a900463ffffffff1633878734888051906020012062000c53565b6026546001600160a01b03166333d6247d6200174262000a5e565b6040518263ffffffff1660e01b81526004016200176191815260200190565b600060405180830381600087803b1580156200177c57600080fd5b505af115801562001791573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017c75760405162461bcd60e51b8152600401620005539062002c67565b62000a0962002114565b60006200181483838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021c392505050565b9050632afa533160e01b6001600160e01b031982160162001a0d57600080808080808062001846896004818d62002f1d565b81019062001855919062002f49565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018975760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b0386163014620018c25760405162461bcd60e51b8152600401620005539062003001565b8a8514620019395760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620019b9919062002d9e565b6000604051808303816000865af19150503d8060008114620019f8576040519150601f19603f3d011682016040523d82523d6000602084013e620019fd565b606091505b5050505050505050505062001bf2565b6001600160e01b031981166323f2ebc360e21b1462001a835760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a9b8a6004818e62002f1d565b81019062001aaa919062003052565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001aee5760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b038716301462001b195760405162461bcd60e51b8152600401620005539062003001565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001ba2919062002d9e565b6000604051808303816000865af19150503d806000811462001be1576040519150601f19603f3d011682016040523d82523d6000602084013e62001be6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdf9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021ca565b80600162001c7760206002620031db565b62001c839190620031e9565b6021541062001ce85760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cfd919062003203565b909155505060215460005b602081101562001da7578160011660010362001d3d57826001826020811062001d355762001d3562002cee565b015550505050565b6001816020811062001d535762001d5362002cee565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d90919062002d30565b91508062001d9e8162002d47565b91505062001d08565b5062001db26200321e565b505050565b60225460ff161562001ddd5760405162461bcd60e51b8152600401620005539062002a24565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001e268a63ffffffff1662001492565b1562001e7d5760405162461bcd60e51b81526020600482015260306024820152600080516020620047bb83398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ef1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f17919062003234565b90508060000362001f805760405162461bcd60e51b81526020600482015260396024820152600080516020620047bb83398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff8781166101009092041614620020025760405162461bcd60e51b81526020600482015260436024820152600080516020620047bb83398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff166200202057508862002023565b50895b6200204e6200203f848b8b8b8b8b8b8051906020012062000c53565b8e8e63ffffffff168462000b51565b620009c35760405162461bcd60e51b815260206004820152602c6024820152600080516020620047bb83398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020b06101008362002d30565b90506000620020c26101008462002e69565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001db290849063a9059cbb60e01b9060640162001c2e565b60225460ff166200218e5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002221826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022a39092919063ffffffff16565b80519091501562001db2578080602001905181019062002242919062002a9b565b62001db25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c4b848460008585600080866001600160a01b03168587604051620022cd919062002d9e565b60006040518083038185875af1925050503d80600081146200230c576040519150601f19603f3d011682016040523d82523d6000602084013e62002311565b606091505b509150915062002324878383876200232f565b979650505050505050565b60608315620023a35782516000036200239b576001600160a01b0385163b6200239b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c4b565b62000c4b8383815115620023ba5781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200324e565b611557806200326483390190565b6001600160a01b0381168114620023fa57600080fd5b50565b80356200240a81620023e4565b919050565b803563ffffffff811681146200240a57600080fd5b60008083601f8401126200243757600080fd5b50813567ffffffffffffffff8111156200245057600080fd5b6020830191508360208285010111156200246957600080fd5b9250929050565b60008060008060008060a087890312156200248a57600080fd5b86356200249781620023e4565b9550620024a7602088016200240f565b94506040870135620024b981620023e4565b935060608701359250608087013567ffffffffffffffff811115620024dd57600080fd5b620024eb89828a0162002424565b979a9699509497509295939492505050565b600080604083850312156200251157600080fd5b6200251c836200240f565b915060208301356200252e81620023e4565b809150509250929050565b6000602082840312156200254c57600080fd5b81356200255981620023e4565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620025a257620025a262002560565b604052919050565b600082601f830112620025bc57600080fd5b8135602067ffffffffffffffff821115620025db57620025db62002560565b8160051b620025ec82820162002576565b92835284810182019282810190878511156200260757600080fd5b83870192505b8483101562002324578235825291830191908301906200260d565b600080600080608085870312156200263f57600080fd5b84359350602085013567ffffffffffffffff808211156200265f57600080fd5b6200266d88838901620025aa565b94506040870135915080821682146200268557600080fd5b509396929550929360600135925050565b60ff81168114620023fa57600080fd5b600080600080600080600060e0888a031215620026c257600080fd5b8735620026cf8162002696565b9650620026df602089016200240f565b95506040880135620026f181620023e4565b945062002701606089016200240f565b935060808801356200271381620023e4565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200274d576200274d62002560565b50601f01601f191660200190565b600082601f8301126200276d57600080fd5b8135620027846200277e8262002730565b62002576565b8181528460208386010111156200279a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027d857600080fd5b8a3567ffffffffffffffff80821115620027f157600080fd5b620027ff8e838f01620025aa565b9b506200280f60208e016200240f565b9a5060408d0135995060608d013598506200282d60808e016200240f565b97506200283d60a08e01620023fd565b96506200284d60c08e016200240f565b95506200285d60e08e01620023fd565b94506101008d013593506101208d01359150808211156200287d57600080fd5b506200288c8d828e016200275b565b9150509295989b9194979a5092959850565b600080600060608486031215620028b457600080fd5b620028bf846200240f565b92506020840135620028d181620023e4565b91506040840135620028e381620023e4565b809150509250925092565b6000602082840312156200290157600080fd5b5035919050565b600080600080600080600060a0888a0312156200292457600080fd5b6200292f886200240f565b965060208801356200294181620023e4565b9550604088013567ffffffffffffffff808211156200295f57600080fd5b6200296d8b838c0162002424565b909750955060608a01359150808211156200298757600080fd5b50620029968a828b0162002424565b9094509250506080880135620029ac8162002696565b8091505092959891949750929550565b600080600060608486031215620029d257600080fd5b620029dd846200240f565b92506020840135620029ef81620023e4565b9150604084013567ffffffffffffffff81111562002a0c57600080fd5b62002a1a868287016200275b565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b8015158114620023fa57600080fd5b60006020828403121562002aae57600080fd5b8151620025598162002a8c565b60005b8381101562002ad857818101518382015260200162002abe565b8381111562000fdf5750506000910152565b600082601f83011262002afc57600080fd5b815162002b0d6200277e8262002730565b81815284602083860101111562002b2357600080fd5b62000c4b82602083016020870162002abb565b60006020828403121562002b4957600080fd5b815167ffffffffffffffff81111562002b6157600080fd5b62000c4b8482850162002aea565b60006020828403121562002b8257600080fd5b8151620025598162002696565b6000815180845262002ba981602086016020860162002abb565b601f01601f19169290920160200192915050565b60608152600062002bd2606083018662002b8f565b828103602084015262002be6818662002b8f565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002c4e8483018762002b8f565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002d425762002d4262002d04565b500490565b60006001820162002d5c5762002d5c62002d1a565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d959083018462002b8f565b95945050505050565b6000825162002db281846020870162002abb565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002e0957600080fd5b835167ffffffffffffffff8082111562002e2257600080fd5b62002e308783880162002aea565b9450602086015191508082111562002e4757600080fd5b5062002e568682870162002aea565b9250506040840151620028e38162002696565b60008262002e7b5762002e7b62002d04565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002ebf60608301878962002e80565b828103602084015262002ed481868862002e80565b91505060ff831660408301529695505050505050565b6000835162002efe81846020880162002abb565b83519083019062002f1481836020880162002abb565b01949350505050565b6000808585111562002f2e57600080fd5b8386111562002f3c57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f6557600080fd5b873562002f7281620023e4565b9650602088013562002f8481620023e4565b955060408801359450606088013593506080880135620027138162002696565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b0312156200307057600080fd5b88356200307d81620023e4565b975060208901356200308f81620023e4565b965060408901359550606089013594506080890135620030af8162002a8c565b935060a0890135620030c18162002696565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200311f57816000190482111562003103576200310362002d1a565b808516156200311157918102915b93841c9390800290620030e3565b509250929050565b600082620031385750600162000a58565b81620031475750600062000a58565b81600181146200316057600281146200316b576200318b565b600191505062000a58565b60ff8411156200317f576200317f62002d1a565b50506001821b62000a58565b5060208310610133831016604e8410600b8410161715620031b0575081810a62000a58565b620031bc8383620030de565b8060001904821115620031d357620031d362002d1a565b029392505050565b600062002559838362003127565b600082821015620031fe57620031fe62002d1a565b500390565b6000821982111562003219576200321962002d1a565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200324757600080fd5b5051919050565b60208152600062002559602083018462002b8f56fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea264697066735822122070fae8b3daebe7fc894d50296739b7a26e638f37239109230c7dfd552785f2a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220a0c682e41bbc0bcf599110077edba37d297487e713d10fc5634097fd73bd508664736f6c634300080f0033", + "bytecode": "0x608060405260043610620001675760003560e01c80637b6323c111620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b80637b6323c1146200037057806381b1c17414620003955780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b806337883a3e116200011e57806337883a3e14620002a25780633ae0504714620002c45780633da8168214620002dc5780633e1970431462000301578063463855491462000326578063647c576c146200034b57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002470565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009d2565b348015620001db57600080fd5b50620001f3620001ed366004620024fd565b62000a0b565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002539565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b50602754620001f3906001600160a01b031681565b348015620002d157600080fd5b506200022462000a5e565b348015620002e957600080fd5b50620001a1620002fb36600462002628565b62000b51565b3480156200030e57600080fd5b506200022462000320366004620026a6565b62000c53565b3480156200033357600080fd5b506200018362000345366004620027b7565b62000ce0565b3480156200035857600080fd5b50620001836200036a3660046200289e565b62000e86565b3480156200037d57600080fd5b50620001836200038f366004620027b7565b62000fe5565b348015620003a257600080fd5b50620001f3620003b4366004620028ee565b6024602052600090815260409020546001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028ee565b62001492565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002908565b620014d7565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620029bc565b620015ee565b348015620004c357600080fd5b50620001836200179a565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028ee565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a24565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008ec565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074957604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562000710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000736919062002a9b565b50602081015181519094509250620008ea565b84156200075e576200075e8a888888620017d1565b620007756001600160a01b038b1633308a62001bf9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f6919081019062002b36565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000835573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085f919081019062002b36565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c4919062002b6f565b604051602001620008d89392919062002bbd565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092e98979695949392919062002bfa565b60405180910390a16200095962000953600084868c8c8c888051906020012062000c53565b62001c66565b6026546001600160a01b03166333d6247d6200097462000a5e565b6040518263ffffffff1660e01b81526004016200099391815260200190565b600060405180830381600087803b158015620009ae57600080fd5b505af1158015620009c3573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ff5760405162461bcd60e51b8152600401620005539062002c67565b62000a0962001db7565b565b600060246000848460405160200162000a2692919062002cc4565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b48578260011660010362000ac9576001816020811062000a955762000a9562002cee565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af6565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0360028462002d30565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3f9062002d47565b91505062000a69565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c44578160011660010362000bce5786818151811062000b8c5762000b8c62002cee565b60200260200101518360405160200162000bb0929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c20565b8287828151811062000be45762000be462002cee565b602002602001015160405160200162000c07929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2d60028362002d30565b91508062000c3b8162002d47565b91505062000b61565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d065760405162461bcd60e51b8152600401620005539062002a24565b62000d1c8a8a8a8a8a8a8a8a8a8a600162001e15565b62000d2d8963ffffffff16620020a0565b6000836001600160a01b03168387898560405160240162000d519392919062002d63565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d88919062002d9e565b60006040518083038185875af1925050503d806000811462000dc7576040519150601f19603f3d011682016040523d82523d6000602084013e62000dcc565b606091505b505090508062000e385760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e7195949392919062002dbc565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea75750600054600160ff909116105b8062000ec35750303b15801562000ec3575060005460ff166001145b62000f285760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f4c576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff16156200100b5760405162461bcd60e51b8152600401620005539062002a24565b620010218a8a8a8a8a8a8a8a8a8a600062001e15565b620010328963ffffffff16620020a0565b6001600160a01b0385166200112757604080516000808252602082019092526001600160a01b0385169084906040516200106d919062002d9e565b60006040518083038185875af1925050503d8060008114620010ac576040519150601f19603f3d011682016040523d82523d6000602084013e620010b1565b606091505b5050905080620011205760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b5062001445565b60225463ffffffff6101009091048116908716036200115c57620011566001600160a01b0386168484620020e2565b62001445565b600086866040516020016200117392919062002cc4565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013ca57600080600085806020019051810190620011c5919062002df3565b925092509250600085848484604051620011df90620023d6565b620011ed9392919062002bbd565b8190604051809103906000f59050801580156200120e573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001263573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001289919062002a9b565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013b89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001442565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200141a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001440919062002a9b565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200147e95949392919062002dbc565b60405180910390a150505050505050505050565b600080620014a36101008462002d30565b90506000620014b56101008562002e69565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014ef92919062002cc4565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200152290620023d6565b601f1982820381018352601f9091011660408190526200154f908d908d908d908d908d9060200162002ea9565b60408051601f19818403018152908290526200156f929160200162002eea565b60405160208183030381529060405280519060200120604051602001620015c894939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620016145760405162461bcd60e51b8152600401620005539062002a24565b60225463ffffffff6101009091048116908416036200169c5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016f098979695949392919062002bfa565b60405180910390a162001727620009536001602260019054906101000a900463ffffffff1633878734888051906020012062000c53565b6026546001600160a01b03166333d6247d6200174262000a5e565b6040518263ffffffff1660e01b81526004016200176191815260200190565b600060405180830381600087803b1580156200177c57600080fd5b505af115801562001791573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017c75760405162461bcd60e51b8152600401620005539062002c67565b62000a0962002114565b60006200181483838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021c392505050565b9050632afa533160e01b6001600160e01b031982160162001a0d57600080808080808062001846896004818d62002f1d565b81019062001855919062002f49565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018975760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b0386163014620018c25760405162461bcd60e51b8152600401620005539062003001565b8a8514620019395760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620019b9919062002d9e565b6000604051808303816000865af19150503d8060008114620019f8576040519150601f19603f3d011682016040523d82523d6000602084013e620019fd565b606091505b5050505050505050505062001bf2565b6001600160e01b031981166323f2ebc360e21b1462001a835760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a9b8a6004818e62002f1d565b81019062001aaa919062003052565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001aee5760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b038716301462001b195760405162461bcd60e51b8152600401620005539062003001565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001ba2919062002d9e565b6000604051808303816000865af19150503d806000811462001be1576040519150601f19603f3d011682016040523d82523d6000602084013e62001be6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdf9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021ca565b80600162001c7760206002620031db565b62001c839190620031e9565b6021541062001ce85760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cfd919062003203565b909155505060215460005b602081101562001da7578160011660010362001d3d57826001826020811062001d355762001d3562002cee565b015550505050565b6001816020811062001d535762001d5362002cee565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d90919062002d30565b91508062001d9e8162002d47565b91505062001d08565b5062001db26200321e565b505050565b60225460ff161562001ddd5760405162461bcd60e51b8152600401620005539062002a24565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001e268a63ffffffff1662001492565b1562001e7d5760405162461bcd60e51b81526020600482015260306024820152600080516020620047bb83398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ef1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f17919062003234565b90508060000362001f805760405162461bcd60e51b81526020600482015260396024820152600080516020620047bb83398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff8781166101009092041614620020025760405162461bcd60e51b81526020600482015260436024820152600080516020620047bb83398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff166200202057508862002023565b50895b6200204e6200203f848b8b8b8b8b8b8051906020012062000c53565b8e8e63ffffffff168462000b51565b620009c35760405162461bcd60e51b815260206004820152602c6024820152600080516020620047bb83398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020b06101008362002d30565b90506000620020c26101008462002e69565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001db290849063a9059cbb60e01b9060640162001c2e565b60225460ff166200218e5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002221826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022a39092919063ffffffff16565b80519091501562001db2578080602001905181019062002242919062002a9b565b62001db25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c4b848460008585600080866001600160a01b03168587604051620022cd919062002d9e565b60006040518083038185875af1925050503d80600081146200230c576040519150601f19603f3d011682016040523d82523d6000602084013e62002311565b606091505b509150915062002324878383876200232f565b979650505050505050565b60608315620023a35782516000036200239b576001600160a01b0385163b6200239b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c4b565b62000c4b8383815115620023ba5781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200324e565b611557806200326483390190565b6001600160a01b0381168114620023fa57600080fd5b50565b80356200240a81620023e4565b919050565b803563ffffffff811681146200240a57600080fd5b60008083601f8401126200243757600080fd5b50813567ffffffffffffffff8111156200245057600080fd5b6020830191508360208285010111156200246957600080fd5b9250929050565b60008060008060008060a087890312156200248a57600080fd5b86356200249781620023e4565b9550620024a7602088016200240f565b94506040870135620024b981620023e4565b935060608701359250608087013567ffffffffffffffff811115620024dd57600080fd5b620024eb89828a0162002424565b979a9699509497509295939492505050565b600080604083850312156200251157600080fd5b6200251c836200240f565b915060208301356200252e81620023e4565b809150509250929050565b6000602082840312156200254c57600080fd5b81356200255981620023e4565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620025a257620025a262002560565b604052919050565b600082601f830112620025bc57600080fd5b8135602067ffffffffffffffff821115620025db57620025db62002560565b8160051b620025ec82820162002576565b92835284810182019282810190878511156200260757600080fd5b83870192505b8483101562002324578235825291830191908301906200260d565b600080600080608085870312156200263f57600080fd5b84359350602085013567ffffffffffffffff808211156200265f57600080fd5b6200266d88838901620025aa565b94506040870135915080821682146200268557600080fd5b509396929550929360600135925050565b60ff81168114620023fa57600080fd5b600080600080600080600060e0888a031215620026c257600080fd5b8735620026cf8162002696565b9650620026df602089016200240f565b95506040880135620026f181620023e4565b945062002701606089016200240f565b935060808801356200271381620023e4565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200274d576200274d62002560565b50601f01601f191660200190565b600082601f8301126200276d57600080fd5b8135620027846200277e8262002730565b62002576565b8181528460208386010111156200279a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027d857600080fd5b8a3567ffffffffffffffff80821115620027f157600080fd5b620027ff8e838f01620025aa565b9b506200280f60208e016200240f565b9a5060408d0135995060608d013598506200282d60808e016200240f565b97506200283d60a08e01620023fd565b96506200284d60c08e016200240f565b95506200285d60e08e01620023fd565b94506101008d013593506101208d01359150808211156200287d57600080fd5b506200288c8d828e016200275b565b9150509295989b9194979a5092959850565b600080600060608486031215620028b457600080fd5b620028bf846200240f565b92506020840135620028d181620023e4565b91506040840135620028e381620023e4565b809150509250925092565b6000602082840312156200290157600080fd5b5035919050565b600080600080600080600060a0888a0312156200292457600080fd5b6200292f886200240f565b965060208801356200294181620023e4565b9550604088013567ffffffffffffffff808211156200295f57600080fd5b6200296d8b838c0162002424565b909750955060608a01359150808211156200298757600080fd5b50620029968a828b0162002424565b9094509250506080880135620029ac8162002696565b8091505092959891949750929550565b600080600060608486031215620029d257600080fd5b620029dd846200240f565b92506020840135620029ef81620023e4565b9150604084013567ffffffffffffffff81111562002a0c57600080fd5b62002a1a868287016200275b565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b8015158114620023fa57600080fd5b60006020828403121562002aae57600080fd5b8151620025598162002a8c565b60005b8381101562002ad857818101518382015260200162002abe565b8381111562000fdf5750506000910152565b600082601f83011262002afc57600080fd5b815162002b0d6200277e8262002730565b81815284602083860101111562002b2357600080fd5b62000c4b82602083016020870162002abb565b60006020828403121562002b4957600080fd5b815167ffffffffffffffff81111562002b6157600080fd5b62000c4b8482850162002aea565b60006020828403121562002b8257600080fd5b8151620025598162002696565b6000815180845262002ba981602086016020860162002abb565b601f01601f19169290920160200192915050565b60608152600062002bd2606083018662002b8f565b828103602084015262002be6818662002b8f565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002c4e8483018762002b8f565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002d425762002d4262002d04565b500490565b60006001820162002d5c5762002d5c62002d1a565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d959083018462002b8f565b95945050505050565b6000825162002db281846020870162002abb565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002e0957600080fd5b835167ffffffffffffffff8082111562002e2257600080fd5b62002e308783880162002aea565b9450602086015191508082111562002e4757600080fd5b5062002e568682870162002aea565b9250506040840151620028e38162002696565b60008262002e7b5762002e7b62002d04565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002ebf60608301878962002e80565b828103602084015262002ed481868862002e80565b91505060ff831660408301529695505050505050565b6000835162002efe81846020880162002abb565b83519083019062002f1481836020880162002abb565b01949350505050565b6000808585111562002f2e57600080fd5b8386111562002f3c57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f6557600080fd5b873562002f7281620023e4565b9650602088013562002f8481620023e4565b955060408801359450606088013593506080880135620027138162002696565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b0312156200307057600080fd5b88356200307d81620023e4565b975060208901356200308f81620023e4565b965060408901359550606089013594506080890135620030af8162002a8c565b935060a0890135620030c18162002696565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200311f57816000190482111562003103576200310362002d1a565b808516156200311157918102915b93841c9390800290620030e3565b509250929050565b600082620031385750600162000a58565b81620031475750600062000a58565b81600181146200316057600281146200316b576200318b565b600191505062000a58565b60ff8411156200317f576200317f62002d1a565b50506001821b62000a58565b5060208310610133831016604e8410600b8410161715620031b0575081810a62000a58565b620031bc8383620030de565b8060001904821115620031d357620031d362002d1a565b029392505050565b600062002559838362003127565b600082821015620031fe57620031fe62002d1a565b500390565b6000821982111562003219576200321962002d1a565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200324757600080fd5b5051919050565b60208152600062002559602083018462002b8f56fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea264697066735822122070fae8b3daebe7fc894d50296739b7a26e638f37239109230c7dfd552785f2a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212208fde18b5efa27a9c6a9604bbebb39629f3a307cad6b8fab402a033ff62a94bfe64736f6c634300080f0033", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", "0x0000000000000000000000000000000000000000000000000000000000000022": "0x0100", From c59a0ff83af6c733c35cdec039907b62df5897ec Mon Sep 17 00:00:00 2001 From: invocamanman Date: Tue, 20 Dec 2022 17:02:48 +0100 Subject: [PATCH 58/71] should be last changes --- compiled-contracts/PolygonZkEVMBridge.json | 4 ++-- .../PolygonZkEVMBridgeMock.json | 4 ++-- compiled-contracts/TokenWrapped.json | 20 ++++--------------- contracts/lib/TokenWrapped.sol | 12 ++--------- deployment/genesis.json | 4 ++-- deployment/verifyPoE_v2-0.js | 2 +- docker/scripts/genesis_docker.json | 4 ++-- docs/lib/TokenWrapped.md | 4 ++-- 8 files changed, 17 insertions(+), 37 deletions(-) diff --git a/compiled-contracts/PolygonZkEVMBridge.json b/compiled-contracts/PolygonZkEVMBridge.json index bed9877f9..d5fb33ed1 100644 --- a/compiled-contracts/PolygonZkEVMBridge.json +++ b/compiled-contracts/PolygonZkEVMBridge.json @@ -699,8 +699,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50614810806100206000396000f3fe608060405260043610620001675760003560e01c80637b6323c111620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b80637b6323c1146200037057806381b1c17414620003955780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b806337883a3e116200011e57806337883a3e14620002a25780633ae0504714620002c45780633da8168214620002dc5780633e1970431462000301578063463855491462000326578063647c576c146200034b57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002470565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009d2565b348015620001db57600080fd5b50620001f3620001ed366004620024fd565b62000a0b565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002539565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b50602754620001f3906001600160a01b031681565b348015620002d157600080fd5b506200022462000a5e565b348015620002e957600080fd5b50620001a1620002fb36600462002628565b62000b51565b3480156200030e57600080fd5b506200022462000320366004620026a6565b62000c53565b3480156200033357600080fd5b506200018362000345366004620027b7565b62000ce0565b3480156200035857600080fd5b50620001836200036a3660046200289e565b62000e86565b3480156200037d57600080fd5b50620001836200038f366004620027b7565b62000fe5565b348015620003a257600080fd5b50620001f3620003b4366004620028ee565b6024602052600090815260409020546001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028ee565b62001492565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002908565b620014d7565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620029bc565b620015ee565b348015620004c357600080fd5b50620001836200179a565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028ee565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a24565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008ec565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074957604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562000710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000736919062002a9b565b50602081015181519094509250620008ea565b84156200075e576200075e8a888888620017d1565b620007756001600160a01b038b1633308a62001bf9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f6919081019062002b36565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000835573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085f919081019062002b36565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c4919062002b6f565b604051602001620008d89392919062002bbd565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092e98979695949392919062002bfa565b60405180910390a16200095962000953600084868c8c8c888051906020012062000c53565b62001c66565b6026546001600160a01b03166333d6247d6200097462000a5e565b6040518263ffffffff1660e01b81526004016200099391815260200190565b600060405180830381600087803b158015620009ae57600080fd5b505af1158015620009c3573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ff5760405162461bcd60e51b8152600401620005539062002c67565b62000a0962001db7565b565b600060246000848460405160200162000a2692919062002cc4565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b48578260011660010362000ac9576001816020811062000a955762000a9562002cee565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af6565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0360028462002d30565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3f9062002d47565b91505062000a69565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c44578160011660010362000bce5786818151811062000b8c5762000b8c62002cee565b60200260200101518360405160200162000bb0929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c20565b8287828151811062000be45762000be462002cee565b602002602001015160405160200162000c07929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2d60028362002d30565b91508062000c3b8162002d47565b91505062000b61565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d065760405162461bcd60e51b8152600401620005539062002a24565b62000d1c8a8a8a8a8a8a8a8a8a8a600162001e15565b62000d2d8963ffffffff16620020a0565b6000836001600160a01b03168387898560405160240162000d519392919062002d63565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d88919062002d9e565b60006040518083038185875af1925050503d806000811462000dc7576040519150601f19603f3d011682016040523d82523d6000602084013e62000dcc565b606091505b505090508062000e385760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e7195949392919062002dbc565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea75750600054600160ff909116105b8062000ec35750303b15801562000ec3575060005460ff166001145b62000f285760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f4c576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff16156200100b5760405162461bcd60e51b8152600401620005539062002a24565b620010218a8a8a8a8a8a8a8a8a8a600062001e15565b620010328963ffffffff16620020a0565b6001600160a01b0385166200112757604080516000808252602082019092526001600160a01b0385169084906040516200106d919062002d9e565b60006040518083038185875af1925050503d8060008114620010ac576040519150601f19603f3d011682016040523d82523d6000602084013e620010b1565b606091505b5050905080620011205760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b5062001445565b60225463ffffffff6101009091048116908716036200115c57620011566001600160a01b0386168484620020e2565b62001445565b600086866040516020016200117392919062002cc4565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013ca57600080600085806020019051810190620011c5919062002df3565b925092509250600085848484604051620011df90620023d6565b620011ed9392919062002bbd565b8190604051809103906000f59050801580156200120e573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001263573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001289919062002a9b565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013b89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001442565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200141a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001440919062002a9b565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200147e95949392919062002dbc565b60405180910390a150505050505050505050565b600080620014a36101008462002d30565b90506000620014b56101008562002e69565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014ef92919062002cc4565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200152290620023d6565b601f1982820381018352601f9091011660408190526200154f908d908d908d908d908d9060200162002ea9565b60408051601f19818403018152908290526200156f929160200162002eea565b60405160208183030381529060405280519060200120604051602001620015c894939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620016145760405162461bcd60e51b8152600401620005539062002a24565b60225463ffffffff6101009091048116908416036200169c5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016f098979695949392919062002bfa565b60405180910390a162001727620009536001602260019054906101000a900463ffffffff1633878734888051906020012062000c53565b6026546001600160a01b03166333d6247d6200174262000a5e565b6040518263ffffffff1660e01b81526004016200176191815260200190565b600060405180830381600087803b1580156200177c57600080fd5b505af115801562001791573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017c75760405162461bcd60e51b8152600401620005539062002c67565b62000a0962002114565b60006200181483838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021c392505050565b9050632afa533160e01b6001600160e01b031982160162001a0d57600080808080808062001846896004818d62002f1d565b81019062001855919062002f49565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018975760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b0386163014620018c25760405162461bcd60e51b8152600401620005539062003001565b8a8514620019395760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620019b9919062002d9e565b6000604051808303816000865af19150503d8060008114620019f8576040519150601f19603f3d011682016040523d82523d6000602084013e620019fd565b606091505b5050505050505050505062001bf2565b6001600160e01b031981166323f2ebc360e21b1462001a835760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a9b8a6004818e62002f1d565b81019062001aaa919062003052565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001aee5760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b038716301462001b195760405162461bcd60e51b8152600401620005539062003001565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001ba2919062002d9e565b6000604051808303816000865af19150503d806000811462001be1576040519150601f19603f3d011682016040523d82523d6000602084013e62001be6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdf9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021ca565b80600162001c7760206002620031db565b62001c839190620031e9565b6021541062001ce85760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cfd919062003203565b909155505060215460005b602081101562001da7578160011660010362001d3d57826001826020811062001d355762001d3562002cee565b015550505050565b6001816020811062001d535762001d5362002cee565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d90919062002d30565b91508062001d9e8162002d47565b91505062001d08565b5062001db26200321e565b505050565b60225460ff161562001ddd5760405162461bcd60e51b8152600401620005539062002a24565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001e268a63ffffffff1662001492565b1562001e7d5760405162461bcd60e51b81526020600482015260306024820152600080516020620047bb83398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ef1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f17919062003234565b90508060000362001f805760405162461bcd60e51b81526020600482015260396024820152600080516020620047bb83398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff8781166101009092041614620020025760405162461bcd60e51b81526020600482015260436024820152600080516020620047bb83398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff166200202057508862002023565b50895b6200204e6200203f848b8b8b8b8b8b8051906020012062000c53565b8e8e63ffffffff168462000b51565b620009c35760405162461bcd60e51b815260206004820152602c6024820152600080516020620047bb83398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020b06101008362002d30565b90506000620020c26101008462002e69565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001db290849063a9059cbb60e01b9060640162001c2e565b60225460ff166200218e5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002221826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022a39092919063ffffffff16565b80519091501562001db2578080602001905181019062002242919062002a9b565b62001db25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c4b848460008585600080866001600160a01b03168587604051620022cd919062002d9e565b60006040518083038185875af1925050503d80600081146200230c576040519150601f19603f3d011682016040523d82523d6000602084013e62002311565b606091505b509150915062002324878383876200232f565b979650505050505050565b60608315620023a35782516000036200239b576001600160a01b0385163b6200239b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c4b565b62000c4b8383815115620023ba5781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200324e565b611557806200326483390190565b6001600160a01b0381168114620023fa57600080fd5b50565b80356200240a81620023e4565b919050565b803563ffffffff811681146200240a57600080fd5b60008083601f8401126200243757600080fd5b50813567ffffffffffffffff8111156200245057600080fd5b6020830191508360208285010111156200246957600080fd5b9250929050565b60008060008060008060a087890312156200248a57600080fd5b86356200249781620023e4565b9550620024a7602088016200240f565b94506040870135620024b981620023e4565b935060608701359250608087013567ffffffffffffffff811115620024dd57600080fd5b620024eb89828a0162002424565b979a9699509497509295939492505050565b600080604083850312156200251157600080fd5b6200251c836200240f565b915060208301356200252e81620023e4565b809150509250929050565b6000602082840312156200254c57600080fd5b81356200255981620023e4565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620025a257620025a262002560565b604052919050565b600082601f830112620025bc57600080fd5b8135602067ffffffffffffffff821115620025db57620025db62002560565b8160051b620025ec82820162002576565b92835284810182019282810190878511156200260757600080fd5b83870192505b8483101562002324578235825291830191908301906200260d565b600080600080608085870312156200263f57600080fd5b84359350602085013567ffffffffffffffff808211156200265f57600080fd5b6200266d88838901620025aa565b94506040870135915080821682146200268557600080fd5b509396929550929360600135925050565b60ff81168114620023fa57600080fd5b600080600080600080600060e0888a031215620026c257600080fd5b8735620026cf8162002696565b9650620026df602089016200240f565b95506040880135620026f181620023e4565b945062002701606089016200240f565b935060808801356200271381620023e4565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200274d576200274d62002560565b50601f01601f191660200190565b600082601f8301126200276d57600080fd5b8135620027846200277e8262002730565b62002576565b8181528460208386010111156200279a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027d857600080fd5b8a3567ffffffffffffffff80821115620027f157600080fd5b620027ff8e838f01620025aa565b9b506200280f60208e016200240f565b9a5060408d0135995060608d013598506200282d60808e016200240f565b97506200283d60a08e01620023fd565b96506200284d60c08e016200240f565b95506200285d60e08e01620023fd565b94506101008d013593506101208d01359150808211156200287d57600080fd5b506200288c8d828e016200275b565b9150509295989b9194979a5092959850565b600080600060608486031215620028b457600080fd5b620028bf846200240f565b92506020840135620028d181620023e4565b91506040840135620028e381620023e4565b809150509250925092565b6000602082840312156200290157600080fd5b5035919050565b600080600080600080600060a0888a0312156200292457600080fd5b6200292f886200240f565b965060208801356200294181620023e4565b9550604088013567ffffffffffffffff808211156200295f57600080fd5b6200296d8b838c0162002424565b909750955060608a01359150808211156200298757600080fd5b50620029968a828b0162002424565b9094509250506080880135620029ac8162002696565b8091505092959891949750929550565b600080600060608486031215620029d257600080fd5b620029dd846200240f565b92506020840135620029ef81620023e4565b9150604084013567ffffffffffffffff81111562002a0c57600080fd5b62002a1a868287016200275b565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b8015158114620023fa57600080fd5b60006020828403121562002aae57600080fd5b8151620025598162002a8c565b60005b8381101562002ad857818101518382015260200162002abe565b8381111562000fdf5750506000910152565b600082601f83011262002afc57600080fd5b815162002b0d6200277e8262002730565b81815284602083860101111562002b2357600080fd5b62000c4b82602083016020870162002abb565b60006020828403121562002b4957600080fd5b815167ffffffffffffffff81111562002b6157600080fd5b62000c4b8482850162002aea565b60006020828403121562002b8257600080fd5b8151620025598162002696565b6000815180845262002ba981602086016020860162002abb565b601f01601f19169290920160200192915050565b60608152600062002bd2606083018662002b8f565b828103602084015262002be6818662002b8f565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002c4e8483018762002b8f565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002d425762002d4262002d04565b500490565b60006001820162002d5c5762002d5c62002d1a565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d959083018462002b8f565b95945050505050565b6000825162002db281846020870162002abb565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002e0957600080fd5b835167ffffffffffffffff8082111562002e2257600080fd5b62002e308783880162002aea565b9450602086015191508082111562002e4757600080fd5b5062002e568682870162002aea565b9250506040840151620028e38162002696565b60008262002e7b5762002e7b62002d04565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002ebf60608301878962002e80565b828103602084015262002ed481868862002e80565b91505060ff831660408301529695505050505050565b6000835162002efe81846020880162002abb565b83519083019062002f1481836020880162002abb565b01949350505050565b6000808585111562002f2e57600080fd5b8386111562002f3c57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f6557600080fd5b873562002f7281620023e4565b9650602088013562002f8481620023e4565b955060408801359450606088013593506080880135620027138162002696565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b0312156200307057600080fd5b88356200307d81620023e4565b975060208901356200308f81620023e4565b965060408901359550606089013594506080890135620030af8162002a8c565b935060a0890135620030c18162002696565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200311f57816000190482111562003103576200310362002d1a565b808516156200311157918102915b93841c9390800290620030e3565b509250929050565b600082620031385750600162000a58565b81620031475750600062000a58565b81600181146200316057600281146200316b576200318b565b600191505062000a58565b60ff8411156200317f576200317f62002d1a565b50506001821b62000a58565b5060208310610133831016604e8410600b8410161715620031b0575081810a62000a58565b620031bc8383620030de565b8060001904821115620031d357620031d362002d1a565b029392505050565b600062002559838362003127565b600082821015620031fe57620031fe62002d1a565b500390565b6000821982111562003219576200321962002d1a565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200324757600080fd5b5051919050565b60208152600062002559602083018462002b8f56fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea264697066735822122070fae8b3daebe7fc894d50296739b7a26e638f37239109230c7dfd552785f2a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212208fde18b5efa27a9c6a9604bbebb39629f3a307cad6b8fab402a033ff62a94bfe64736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001675760003560e01c80637b6323c111620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b80637b6323c1146200037057806381b1c17414620003955780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b806337883a3e116200011e57806337883a3e14620002a25780633ae0504714620002c45780633da8168214620002dc5780633e1970431462000301578063463855491462000326578063647c576c146200034b57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002470565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009d2565b348015620001db57600080fd5b50620001f3620001ed366004620024fd565b62000a0b565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002539565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b50602754620001f3906001600160a01b031681565b348015620002d157600080fd5b506200022462000a5e565b348015620002e957600080fd5b50620001a1620002fb36600462002628565b62000b51565b3480156200030e57600080fd5b506200022462000320366004620026a6565b62000c53565b3480156200033357600080fd5b506200018362000345366004620027b7565b62000ce0565b3480156200035857600080fd5b50620001836200036a3660046200289e565b62000e86565b3480156200037d57600080fd5b50620001836200038f366004620027b7565b62000fe5565b348015620003a257600080fd5b50620001f3620003b4366004620028ee565b6024602052600090815260409020546001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028ee565b62001492565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002908565b620014d7565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620029bc565b620015ee565b348015620004c357600080fd5b50620001836200179a565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028ee565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a24565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008ec565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074957604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562000710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000736919062002a9b565b50602081015181519094509250620008ea565b84156200075e576200075e8a888888620017d1565b620007756001600160a01b038b1633308a62001bf9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f6919081019062002b36565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000835573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085f919081019062002b36565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c4919062002b6f565b604051602001620008d89392919062002bbd565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092e98979695949392919062002bfa565b60405180910390a16200095962000953600084868c8c8c888051906020012062000c53565b62001c66565b6026546001600160a01b03166333d6247d6200097462000a5e565b6040518263ffffffff1660e01b81526004016200099391815260200190565b600060405180830381600087803b158015620009ae57600080fd5b505af1158015620009c3573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ff5760405162461bcd60e51b8152600401620005539062002c67565b62000a0962001db7565b565b600060246000848460405160200162000a2692919062002cc4565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b48578260011660010362000ac9576001816020811062000a955762000a9562002cee565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af6565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0360028462002d30565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3f9062002d47565b91505062000a69565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c44578160011660010362000bce5786818151811062000b8c5762000b8c62002cee565b60200260200101518360405160200162000bb0929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c20565b8287828151811062000be45762000be462002cee565b602002602001015160405160200162000c07929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2d60028362002d30565b91508062000c3b8162002d47565b91505062000b61565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d065760405162461bcd60e51b8152600401620005539062002a24565b62000d1c8a8a8a8a8a8a8a8a8a8a600162001e15565b62000d2d8963ffffffff16620020a0565b6000836001600160a01b03168387898560405160240162000d519392919062002d63565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d88919062002d9e565b60006040518083038185875af1925050503d806000811462000dc7576040519150601f19603f3d011682016040523d82523d6000602084013e62000dcc565b606091505b505090508062000e385760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e7195949392919062002dbc565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea75750600054600160ff909116105b8062000ec35750303b15801562000ec3575060005460ff166001145b62000f285760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f4c576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff16156200100b5760405162461bcd60e51b8152600401620005539062002a24565b620010218a8a8a8a8a8a8a8a8a8a600062001e15565b620010328963ffffffff16620020a0565b6001600160a01b0385166200112757604080516000808252602082019092526001600160a01b0385169084906040516200106d919062002d9e565b60006040518083038185875af1925050503d8060008114620010ac576040519150601f19603f3d011682016040523d82523d6000602084013e620010b1565b606091505b5050905080620011205760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b5062001445565b60225463ffffffff6101009091048116908716036200115c57620011566001600160a01b0386168484620020e2565b62001445565b600086866040516020016200117392919062002cc4565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013ca57600080600085806020019051810190620011c5919062002df3565b925092509250600085848484604051620011df90620023d6565b620011ed9392919062002bbd565b8190604051809103906000f59050801580156200120e573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001263573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001289919062002a9b565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013b89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001442565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200141a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001440919062002a9b565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200147e95949392919062002dbc565b60405180910390a150505050505050505050565b600080620014a36101008462002d30565b90506000620014b56101008562002e69565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014ef92919062002cc4565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200152290620023d6565b601f1982820381018352601f9091011660408190526200154f908d908d908d908d908d9060200162002ea9565b60408051601f19818403018152908290526200156f929160200162002eea565b60405160208183030381529060405280519060200120604051602001620015c894939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620016145760405162461bcd60e51b8152600401620005539062002a24565b60225463ffffffff6101009091048116908416036200169c5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016f098979695949392919062002bfa565b60405180910390a162001727620009536001602260019054906101000a900463ffffffff1633878734888051906020012062000c53565b6026546001600160a01b03166333d6247d6200174262000a5e565b6040518263ffffffff1660e01b81526004016200176191815260200190565b600060405180830381600087803b1580156200177c57600080fd5b505af115801562001791573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017c75760405162461bcd60e51b8152600401620005539062002c67565b62000a0962002114565b60006200181483838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021c392505050565b9050632afa533160e01b6001600160e01b031982160162001a0d57600080808080808062001846896004818d62002f1d565b81019062001855919062002f49565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018975760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b0386163014620018c25760405162461bcd60e51b8152600401620005539062003001565b8a8514620019395760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620019b9919062002d9e565b6000604051808303816000865af19150503d8060008114620019f8576040519150601f19603f3d011682016040523d82523d6000602084013e620019fd565b606091505b5050505050505050505062001bf2565b6001600160e01b031981166323f2ebc360e21b1462001a835760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a9b8a6004818e62002f1d565b81019062001aaa919062003052565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001aee5760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b038716301462001b195760405162461bcd60e51b8152600401620005539062003001565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001ba2919062002d9e565b6000604051808303816000865af19150503d806000811462001be1576040519150601f19603f3d011682016040523d82523d6000602084013e62001be6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdf9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021ca565b80600162001c7760206002620031db565b62001c839190620031e9565b6021541062001ce85760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cfd919062003203565b909155505060215460005b602081101562001da7578160011660010362001d3d57826001826020811062001d355762001d3562002cee565b015550505050565b6001816020811062001d535762001d5362002cee565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d90919062002d30565b91508062001d9e8162002d47565b91505062001d08565b5062001db26200321e565b505050565b60225460ff161562001ddd5760405162461bcd60e51b8152600401620005539062002a24565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001e268a63ffffffff1662001492565b1562001e7d5760405162461bcd60e51b81526020600482015260306024820152600080516020620047bb83398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ef1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f17919062003234565b90508060000362001f805760405162461bcd60e51b81526020600482015260396024820152600080516020620047bb83398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff8781166101009092041614620020025760405162461bcd60e51b81526020600482015260436024820152600080516020620047bb83398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff166200202057508862002023565b50895b6200204e6200203f848b8b8b8b8b8b8051906020012062000c53565b8e8e63ffffffff168462000b51565b620009c35760405162461bcd60e51b815260206004820152602c6024820152600080516020620047bb83398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020b06101008362002d30565b90506000620020c26101008462002e69565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001db290849063a9059cbb60e01b9060640162001c2e565b60225460ff166200218e5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002221826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022a39092919063ffffffff16565b80519091501562001db2578080602001905181019062002242919062002a9b565b62001db25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c4b848460008585600080866001600160a01b03168587604051620022cd919062002d9e565b60006040518083038185875af1925050503d80600081146200230c576040519150601f19603f3d011682016040523d82523d6000602084013e62002311565b606091505b509150915062002324878383876200232f565b979650505050505050565b60608315620023a35782516000036200239b576001600160a01b0385163b6200239b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c4b565b62000c4b8383815115620023ba5781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200324e565b611557806200326483390190565b6001600160a01b0381168114620023fa57600080fd5b50565b80356200240a81620023e4565b919050565b803563ffffffff811681146200240a57600080fd5b60008083601f8401126200243757600080fd5b50813567ffffffffffffffff8111156200245057600080fd5b6020830191508360208285010111156200246957600080fd5b9250929050565b60008060008060008060a087890312156200248a57600080fd5b86356200249781620023e4565b9550620024a7602088016200240f565b94506040870135620024b981620023e4565b935060608701359250608087013567ffffffffffffffff811115620024dd57600080fd5b620024eb89828a0162002424565b979a9699509497509295939492505050565b600080604083850312156200251157600080fd5b6200251c836200240f565b915060208301356200252e81620023e4565b809150509250929050565b6000602082840312156200254c57600080fd5b81356200255981620023e4565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620025a257620025a262002560565b604052919050565b600082601f830112620025bc57600080fd5b8135602067ffffffffffffffff821115620025db57620025db62002560565b8160051b620025ec82820162002576565b92835284810182019282810190878511156200260757600080fd5b83870192505b8483101562002324578235825291830191908301906200260d565b600080600080608085870312156200263f57600080fd5b84359350602085013567ffffffffffffffff808211156200265f57600080fd5b6200266d88838901620025aa565b94506040870135915080821682146200268557600080fd5b509396929550929360600135925050565b60ff81168114620023fa57600080fd5b600080600080600080600060e0888a031215620026c257600080fd5b8735620026cf8162002696565b9650620026df602089016200240f565b95506040880135620026f181620023e4565b945062002701606089016200240f565b935060808801356200271381620023e4565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200274d576200274d62002560565b50601f01601f191660200190565b600082601f8301126200276d57600080fd5b8135620027846200277e8262002730565b62002576565b8181528460208386010111156200279a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027d857600080fd5b8a3567ffffffffffffffff80821115620027f157600080fd5b620027ff8e838f01620025aa565b9b506200280f60208e016200240f565b9a5060408d0135995060608d013598506200282d60808e016200240f565b97506200283d60a08e01620023fd565b96506200284d60c08e016200240f565b95506200285d60e08e01620023fd565b94506101008d013593506101208d01359150808211156200287d57600080fd5b506200288c8d828e016200275b565b9150509295989b9194979a5092959850565b600080600060608486031215620028b457600080fd5b620028bf846200240f565b92506020840135620028d181620023e4565b91506040840135620028e381620023e4565b809150509250925092565b6000602082840312156200290157600080fd5b5035919050565b600080600080600080600060a0888a0312156200292457600080fd5b6200292f886200240f565b965060208801356200294181620023e4565b9550604088013567ffffffffffffffff808211156200295f57600080fd5b6200296d8b838c0162002424565b909750955060608a01359150808211156200298757600080fd5b50620029968a828b0162002424565b9094509250506080880135620029ac8162002696565b8091505092959891949750929550565b600080600060608486031215620029d257600080fd5b620029dd846200240f565b92506020840135620029ef81620023e4565b9150604084013567ffffffffffffffff81111562002a0c57600080fd5b62002a1a868287016200275b565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b8015158114620023fa57600080fd5b60006020828403121562002aae57600080fd5b8151620025598162002a8c565b60005b8381101562002ad857818101518382015260200162002abe565b8381111562000fdf5750506000910152565b600082601f83011262002afc57600080fd5b815162002b0d6200277e8262002730565b81815284602083860101111562002b2357600080fd5b62000c4b82602083016020870162002abb565b60006020828403121562002b4957600080fd5b815167ffffffffffffffff81111562002b6157600080fd5b62000c4b8482850162002aea565b60006020828403121562002b8257600080fd5b8151620025598162002696565b6000815180845262002ba981602086016020860162002abb565b601f01601f19169290920160200192915050565b60608152600062002bd2606083018662002b8f565b828103602084015262002be6818662002b8f565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002c4e8483018762002b8f565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002d425762002d4262002d04565b500490565b60006001820162002d5c5762002d5c62002d1a565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d959083018462002b8f565b95945050505050565b6000825162002db281846020870162002abb565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002e0957600080fd5b835167ffffffffffffffff8082111562002e2257600080fd5b62002e308783880162002aea565b9450602086015191508082111562002e4757600080fd5b5062002e568682870162002aea565b9250506040840151620028e38162002696565b60008262002e7b5762002e7b62002d04565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002ebf60608301878962002e80565b828103602084015262002ed481868862002e80565b91505060ff831660408301529695505050505050565b6000835162002efe81846020880162002abb565b83519083019062002f1481836020880162002abb565b01949350505050565b6000808585111562002f2e57600080fd5b8386111562002f3c57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f6557600080fd5b873562002f7281620023e4565b9650602088013562002f8481620023e4565b955060408801359450606088013593506080880135620027138162002696565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b0312156200307057600080fd5b88356200307d81620023e4565b975060208901356200308f81620023e4565b965060408901359550606089013594506080890135620030af8162002a8c565b935060a0890135620030c18162002696565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200311f57816000190482111562003103576200310362002d1a565b808516156200311157918102915b93841c9390800290620030e3565b509250929050565b600082620031385750600162000a58565b81620031475750600062000a58565b81600181146200316057600281146200316b576200318b565b600191505062000a58565b60ff8411156200317f576200317f62002d1a565b50506001821b62000a58565b5060208310610133831016604e8410600b8410161715620031b0575081810a62000a58565b620031bc8383620030de565b8060001904821115620031d357620031d362002d1a565b029392505050565b600062002559838362003127565b600082821015620031fe57620031fe62002d1a565b500390565b6000821982111562003219576200321962002d1a565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200324757600080fd5b5051919050565b60208152600062002559602083018462002b8f56fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea264697066735822122070fae8b3daebe7fc894d50296739b7a26e638f37239109230c7dfd552785f2a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212208fde18b5efa27a9c6a9604bbebb39629f3a307cad6b8fab402a033ff62a94bfe64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506147ce806100206000396000f3fe608060405260043610620001675760003560e01c80637b6323c111620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b80637b6323c1146200037057806381b1c17414620003955780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b806337883a3e116200011e57806337883a3e14620002a25780633ae0504714620002c45780633da8168214620002dc5780633e1970431462000301578063463855491462000326578063647c576c146200034b57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002439565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009c1565b348015620001db57600080fd5b50620001f3620001ed366004620024c6565b620009fa565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002502565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b50602754620001f3906001600160a01b031681565b348015620002d157600080fd5b506200022462000a4d565b348015620002e957600080fd5b50620001a1620002fb366004620025f1565b62000b40565b3480156200030e57600080fd5b5062000224620003203660046200266f565b62000c42565b3480156200033357600080fd5b50620001836200034536600462002780565b62000ccf565b3480156200035857600080fd5b50620001836200036a36600462002867565b62000e75565b3480156200037d57600080fd5b50620001836200038f36600462002780565b62000fd4565b348015620003a257600080fd5b50620001f3620003b4366004620028b7565b6024602052600090815260409020546001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028b7565b6200145b565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d366004620028d1565b620014a0565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b036600462002985565b620015b7565b348015620004c357600080fd5b506200018362001763565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028b7565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b81526004016200055390620029ed565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008db565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200073857604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac90604401600060405180830381600087803b1580156200070b57600080fd5b505af115801562000720573d6000803e3d6000fd5b505050508060200151935080600001519250620008d9565b84156200074d576200074d8a8888886200179a565b620007646001600160a01b038b1633308a62001bc2565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007bb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007e5919081019062002ad0565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000824573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200084e919081019062002ad0565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200088d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008b3919062002b09565b604051602001620008c79392919062002b57565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200091d98979695949392919062002b94565b60405180910390a16200094862000942600084868c8c8c888051906020012062000c42565b62001c2f565b6026546001600160a01b03166333d6247d6200096362000a4d565b6040518263ffffffff1660e01b81526004016200098291815260200190565b600060405180830381600087803b1580156200099d57600080fd5b505af1158015620009b2573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ee5760405162461bcd60e51b8152600401620005539062002c01565b620009f862001d80565b565b600060246000848460405160200162000a1592919062002c5e565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b37578260011660010362000ab8576001816020811062000a845762000a8462002c88565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000ae5565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000af260028462002cca565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b2e9062002ce1565b91505062000a58565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c33578160011660010362000bbd5786818151811062000b7b5762000b7b62002c88565b60200260200101518360405160200162000b9f929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c0f565b8287828151811062000bd35762000bd362002c88565b602002602001015160405160200162000bf6929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c1c60028362002cca565b91508062000c2a8162002ce1565b91505062000b50565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000cf55760405162461bcd60e51b81526004016200055390620029ed565b62000d0b8a8a8a8a8a8a8a8a8a8a600162001dde565b62000d1c8963ffffffff1662002069565b6000836001600160a01b03168387898560405160240162000d409392919062002cfd565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d77919062002d38565b60006040518083038185875af1925050503d806000811462000db6576040519150601f19603f3d011682016040523d82523d6000602084013e62000dbb565b606091505b505090508062000e275760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e6095949392919062002d56565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000e965750600054600160ff909116105b8062000eb25750303b15801562000eb2575060005460ff166001145b62000f175760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f3b576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fce576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff161562000ffa5760405162461bcd60e51b81526004016200055390620029ed565b620010108a8a8a8a8a8a8a8a8a8a600062001dde565b620010218963ffffffff1662002069565b6001600160a01b0385166200111657604080516000808252602082019092526001600160a01b0385169084906040516200105c919062002d38565b60006040518083038185875af1925050503d80600081146200109b576040519150601f19603f3d011682016040523d82523d6000602084013e620010a0565b606091505b50509050806200110f5760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b506200140e565b60225463ffffffff6101009091048116908716036200114b57620011456001600160a01b0386168484620020ab565b6200140e565b600086866040516020016200116292919062002c5e565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013a657600080600085806020019051810190620011b4919062002d8d565b925092509250600085848484604051620011ce906200239f565b620011dc9392919062002b57565b8190604051809103906000f5905080158015620011fd573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f1990604401600060405180830381600087803b1580156200124d57600080fd5b505af115801562001262573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013949392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200140b565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f1990604401600060405180830381600087803b158015620013f157600080fd5b505af115801562001406573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200144795949392919062002d56565b60405180910390a150505050505050505050565b6000806200146c6101008462002cca565b905060006200147e6101008562002e03565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014b892919062002c5e565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014eb906200239f565b601f1982820381018352601f90910116604081905262001518908d908d908d908d908d9060200162002e43565b60408051601f198184030181529082905262001538929160200162002e84565b604051602081830303815290604052805190602001206040516020016200159194939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015dd5760405162461bcd60e51b81526004016200055390620029ed565b60225463ffffffff610100909104811690841603620016655760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016b998979695949392919062002b94565b60405180910390a1620016f0620009426001602260019054906101000a900463ffffffff1633878734888051906020012062000c42565b6026546001600160a01b03166333d6247d6200170b62000a4d565b6040518263ffffffff1660e01b81526004016200172a91815260200190565b600060405180830381600087803b1580156200174557600080fd5b505af11580156200175a573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017905760405162461bcd60e51b8152600401620005539062002c01565b620009f8620020dd565b6000620017dd83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200218c92505050565b9050632afa533160e01b6001600160e01b0319821601620019d65760008080808080806200180f896004818d62002eb7565b8101906200181e919062002ee3565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018605760405162461bcd60e51b8152600401620005539062002f3e565b6001600160a01b03861630146200188b5760405162461bcd60e51b8152600401620005539062002f9b565b8a8514620019025760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162001982919062002d38565b6000604051808303816000865af19150503d8060008114620019c1576040519150601f19603f3d011682016040523d82523d6000602084013e620019c6565b606091505b5050505050505050505062001bbb565b6001600160e01b031981166323f2ebc360e21b1462001a4c5760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a648a6004818e62002eb7565b81019062001a73919062002ffb565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001ab75760405162461bcd60e51b8152600401620005539062002f3e565b6001600160a01b038716301462001ae25760405162461bcd60e51b8152600401620005539062002f9b565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001b6b919062002d38565b6000604051808303816000865af19150503d806000811462001baa576040519150601f19603f3d011682016040523d82523d6000602084013e62001baf565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fce9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262002193565b80600162001c406020600262003184565b62001c4c919062003192565b6021541062001cb15760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cc69190620031ac565b909155505060215460005b602081101562001d70578160011660010362001d0657826001826020811062001cfe5762001cfe62002c88565b015550505050565b6001816020811062001d1c5762001d1c62002c88565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d59919062002cca565b91508062001d678162002ce1565b91505062001cd1565b5062001d7b620031c7565b505050565b60225460ff161562001da65760405162461bcd60e51b81526004016200055390620029ed565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001def8a63ffffffff166200145b565b1562001e465760405162461bcd60e51b815260206004820152603060248201526000805160206200477983398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001eba573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ee09190620031dd565b90508060000362001f495760405162461bcd60e51b815260206004820152603960248201526000805160206200477983398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff878116610100909204161462001fcb5760405162461bcd60e51b815260206004820152604360248201526000805160206200477983398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff1662001fe957508862001fec565b50895b6200201762002008848b8b8b8b8b8b8051906020012062000c42565b8e8e63ffffffff168462000b40565b620009b25760405162461bcd60e51b815260206004820152602c60248201526000805160206200477983398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020796101008362002cca565b905060006200208b6101008462002e03565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001d7b90849063a9059cbb60e01b9060640162001bf7565b60225460ff16620021575760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b6000620021ea826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166200226c9092919063ffffffff16565b80519091501562001d7b57808060200190518101906200220b9190620031f7565b62001d7b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c3a848460008585600080866001600160a01b0316858760405162002296919062002d38565b60006040518083038185875af1925050503d8060008114620022d5576040519150601f19603f3d011682016040523d82523d6000602084013e620022da565b606091505b5091509150620022ed87838387620022f8565b979650505050505050565b606083156200236c57825160000362002364576001600160a01b0385163b620023645760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c3a565b62000c3a8383815115620023835781518083602001fd5b8060405162461bcd60e51b815260040162000553919062003217565b61154c806200322d83390190565b6001600160a01b0381168114620023c357600080fd5b50565b8035620023d381620023ad565b919050565b803563ffffffff81168114620023d357600080fd5b60008083601f8401126200240057600080fd5b50813567ffffffffffffffff8111156200241957600080fd5b6020830191508360208285010111156200243257600080fd5b9250929050565b60008060008060008060a087890312156200245357600080fd5b86356200246081620023ad565b95506200247060208801620023d8565b945060408701356200248281620023ad565b935060608701359250608087013567ffffffffffffffff811115620024a657600080fd5b620024b489828a01620023ed565b979a9699509497509295939492505050565b60008060408385031215620024da57600080fd5b620024e583620023d8565b91506020830135620024f781620023ad565b809150509250929050565b6000602082840312156200251557600080fd5b81356200252281620023ad565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200256b576200256b62002529565b604052919050565b600082601f8301126200258557600080fd5b8135602067ffffffffffffffff821115620025a457620025a462002529565b8160051b620025b58282016200253f565b9283528481018201928281019087851115620025d057600080fd5b83870192505b84831015620022ed57823582529183019190830190620025d6565b600080600080608085870312156200260857600080fd5b84359350602085013567ffffffffffffffff808211156200262857600080fd5b620026368883890162002573565b94506040870135915080821682146200264e57600080fd5b509396929550929360600135925050565b60ff81168114620023c357600080fd5b600080600080600080600060e0888a0312156200268b57600080fd5b873562002698816200265f565b9650620026a860208901620023d8565b95506040880135620026ba81620023ad565b9450620026ca60608901620023d8565b93506080880135620026dc81620023ad565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002716576200271662002529565b50601f01601f191660200190565b600082601f8301126200273657600080fd5b81356200274d6200274782620026f9565b6200253f565b8181528460208386010111156200276357600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027a157600080fd5b8a3567ffffffffffffffff80821115620027ba57600080fd5b620027c88e838f0162002573565b9b50620027d860208e01620023d8565b9a5060408d0135995060608d01359850620027f660808e01620023d8565b97506200280660a08e01620023c6565b96506200281660c08e01620023d8565b95506200282660e08e01620023c6565b94506101008d013593506101208d01359150808211156200284657600080fd5b50620028558d828e0162002724565b9150509295989b9194979a5092959850565b6000806000606084860312156200287d57600080fd5b6200288884620023d8565b925060208401356200289a81620023ad565b91506040840135620028ac81620023ad565b809150509250925092565b600060208284031215620028ca57600080fd5b5035919050565b600080600080600080600060a0888a031215620028ed57600080fd5b620028f888620023d8565b965060208801356200290a81620023ad565b9550604088013567ffffffffffffffff808211156200292857600080fd5b620029368b838c01620023ed565b909750955060608a01359150808211156200295057600080fd5b506200295f8a828b01620023ed565b909450925050608088013562002975816200265f565b8091505092959891949750929550565b6000806000606084860312156200299b57600080fd5b620029a684620023d8565b92506020840135620029b881620023ad565b9150604084013567ffffffffffffffff811115620029d557600080fd5b620029e38682870162002724565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002a7257818101518382015260200162002a58565b8381111562000fce5750506000910152565b600082601f83011262002a9657600080fd5b815162002aa76200274782620026f9565b81815284602083860101111562002abd57600080fd5b62000c3a82602083016020870162002a55565b60006020828403121562002ae357600080fd5b815167ffffffffffffffff81111562002afb57600080fd5b62000c3a8482850162002a84565b60006020828403121562002b1c57600080fd5b815162002522816200265f565b6000815180845262002b4381602086016020860162002a55565b601f01601f19169290920160200192915050565b60608152600062002b6c606083018662002b29565b828103602084015262002b80818662002b29565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002be88483018762002b29565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002cdc5762002cdc62002c9e565b500490565b60006001820162002cf65762002cf662002cb4565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d2f9083018462002b29565b95945050505050565b6000825162002d4c81846020870162002a55565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002da357600080fd5b835167ffffffffffffffff8082111562002dbc57600080fd5b62002dca8783880162002a84565b9450602086015191508082111562002de157600080fd5b5062002df08682870162002a84565b9250506040840151620028ac816200265f565b60008262002e155762002e1562002c9e565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e5960608301878962002e1a565b828103602084015262002e6e81868862002e1a565b91505060ff831660408301529695505050505050565b6000835162002e9881846020880162002a55565b83519083019062002eae81836020880162002a55565b01949350505050565b6000808585111562002ec857600080fd5b8386111562002ed657600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002eff57600080fd5b873562002f0c81620023ad565b9650602088013562002f1e81620023ad565b955060408801359450606088013593506080880135620026dc816200265f565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b8015158114620023c357600080fd5b600080600080600080600080610100898b0312156200301957600080fd5b88356200302681620023ad565b975060208901356200303881620023ad565b965060408901359550606089013594506080890135620030588162002fec565b935060a08901356200306a816200265f565b979a969950949793969295929450505060c08201359160e0013590565b600181815b80851115620030c8578160001904821115620030ac57620030ac62002cb4565b80851615620030ba57918102915b93841c93908002906200308c565b509250929050565b600082620030e15750600162000a47565b81620030f05750600062000a47565b8160018114620031095760028114620031145762003134565b600191505062000a47565b60ff84111562003128576200312862002cb4565b50506001821b62000a47565b5060208310610133831016604e8410600b841016171562003159575081810a62000a47565b62003165838362003087565b80600019048211156200317c576200317c62002cb4565b029392505050565b6000620025228383620030d0565b600082821015620031a757620031a762002cb4565b500390565b60008219821115620031c257620031c262002cb4565b500190565b634e487b7160e01b600052600160045260246000fd5b600060208284031215620031f057600080fd5b5051919050565b6000602082840312156200320a57600080fd5b8151620025228162002fec565b60208152600062002522602083018462002b2956fe60c06040523480156200001157600080fd5b506040516200154c3803806200154c8339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611092620004ba60003960006104690152600081816102f9015261043301526110926000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611043565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161105557611055610fd1565b506001019056fea264697066735822122048db6a6222fa164d21a8fcb1cd25d2a9e0eee016393c37dcc7b7fd638ef787c264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212201e5d89c55c1f97b1f79752036fe68d3686187613f7595faa2b990d177c1a04c264736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001675760003560e01c80637b6323c111620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b80637b6323c1146200037057806381b1c17414620003955780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b806337883a3e116200011e57806337883a3e14620002a25780633ae0504714620002c45780633da8168214620002dc5780633e1970431462000301578063463855491462000326578063647c576c146200034b57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002439565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009c1565b348015620001db57600080fd5b50620001f3620001ed366004620024c6565b620009fa565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002502565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b50602754620001f3906001600160a01b031681565b348015620002d157600080fd5b506200022462000a4d565b348015620002e957600080fd5b50620001a1620002fb366004620025f1565b62000b40565b3480156200030e57600080fd5b5062000224620003203660046200266f565b62000c42565b3480156200033357600080fd5b50620001836200034536600462002780565b62000ccf565b3480156200035857600080fd5b50620001836200036a36600462002867565b62000e75565b3480156200037d57600080fd5b50620001836200038f36600462002780565b62000fd4565b348015620003a257600080fd5b50620001f3620003b4366004620028b7565b6024602052600090815260409020546001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028b7565b6200145b565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d366004620028d1565b620014a0565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b036600462002985565b620015b7565b348015620004c357600080fd5b506200018362001763565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028b7565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b81526004016200055390620029ed565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008db565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200073857604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac90604401600060405180830381600087803b1580156200070b57600080fd5b505af115801562000720573d6000803e3d6000fd5b505050508060200151935080600001519250620008d9565b84156200074d576200074d8a8888886200179a565b620007646001600160a01b038b1633308a62001bc2565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007bb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007e5919081019062002ad0565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000824573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200084e919081019062002ad0565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200088d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008b3919062002b09565b604051602001620008c79392919062002b57565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200091d98979695949392919062002b94565b60405180910390a16200094862000942600084868c8c8c888051906020012062000c42565b62001c2f565b6026546001600160a01b03166333d6247d6200096362000a4d565b6040518263ffffffff1660e01b81526004016200098291815260200190565b600060405180830381600087803b1580156200099d57600080fd5b505af1158015620009b2573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ee5760405162461bcd60e51b8152600401620005539062002c01565b620009f862001d80565b565b600060246000848460405160200162000a1592919062002c5e565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b37578260011660010362000ab8576001816020811062000a845762000a8462002c88565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000ae5565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000af260028462002cca565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b2e9062002ce1565b91505062000a58565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c33578160011660010362000bbd5786818151811062000b7b5762000b7b62002c88565b60200260200101518360405160200162000b9f929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c0f565b8287828151811062000bd35762000bd362002c88565b602002602001015160405160200162000bf6929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c1c60028362002cca565b91508062000c2a8162002ce1565b91505062000b50565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000cf55760405162461bcd60e51b81526004016200055390620029ed565b62000d0b8a8a8a8a8a8a8a8a8a8a600162001dde565b62000d1c8963ffffffff1662002069565b6000836001600160a01b03168387898560405160240162000d409392919062002cfd565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d77919062002d38565b60006040518083038185875af1925050503d806000811462000db6576040519150601f19603f3d011682016040523d82523d6000602084013e62000dbb565b606091505b505090508062000e275760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e6095949392919062002d56565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000e965750600054600160ff909116105b8062000eb25750303b15801562000eb2575060005460ff166001145b62000f175760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f3b576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fce576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff161562000ffa5760405162461bcd60e51b81526004016200055390620029ed565b620010108a8a8a8a8a8a8a8a8a8a600062001dde565b620010218963ffffffff1662002069565b6001600160a01b0385166200111657604080516000808252602082019092526001600160a01b0385169084906040516200105c919062002d38565b60006040518083038185875af1925050503d80600081146200109b576040519150601f19603f3d011682016040523d82523d6000602084013e620010a0565b606091505b50509050806200110f5760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b506200140e565b60225463ffffffff6101009091048116908716036200114b57620011456001600160a01b0386168484620020ab565b6200140e565b600086866040516020016200116292919062002c5e565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013a657600080600085806020019051810190620011b4919062002d8d565b925092509250600085848484604051620011ce906200239f565b620011dc9392919062002b57565b8190604051809103906000f5905080158015620011fd573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f1990604401600060405180830381600087803b1580156200124d57600080fd5b505af115801562001262573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013949392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200140b565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f1990604401600060405180830381600087803b158015620013f157600080fd5b505af115801562001406573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200144795949392919062002d56565b60405180910390a150505050505050505050565b6000806200146c6101008462002cca565b905060006200147e6101008562002e03565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014b892919062002c5e565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014eb906200239f565b601f1982820381018352601f90910116604081905262001518908d908d908d908d908d9060200162002e43565b60408051601f198184030181529082905262001538929160200162002e84565b604051602081830303815290604052805190602001206040516020016200159194939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015dd5760405162461bcd60e51b81526004016200055390620029ed565b60225463ffffffff610100909104811690841603620016655760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016b998979695949392919062002b94565b60405180910390a1620016f0620009426001602260019054906101000a900463ffffffff1633878734888051906020012062000c42565b6026546001600160a01b03166333d6247d6200170b62000a4d565b6040518263ffffffff1660e01b81526004016200172a91815260200190565b600060405180830381600087803b1580156200174557600080fd5b505af11580156200175a573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017905760405162461bcd60e51b8152600401620005539062002c01565b620009f8620020dd565b6000620017dd83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200218c92505050565b9050632afa533160e01b6001600160e01b0319821601620019d65760008080808080806200180f896004818d62002eb7565b8101906200181e919062002ee3565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018605760405162461bcd60e51b8152600401620005539062002f3e565b6001600160a01b03861630146200188b5760405162461bcd60e51b8152600401620005539062002f9b565b8a8514620019025760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162001982919062002d38565b6000604051808303816000865af19150503d8060008114620019c1576040519150601f19603f3d011682016040523d82523d6000602084013e620019c6565b606091505b5050505050505050505062001bbb565b6001600160e01b031981166323f2ebc360e21b1462001a4c5760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a648a6004818e62002eb7565b81019062001a73919062002ffb565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001ab75760405162461bcd60e51b8152600401620005539062002f3e565b6001600160a01b038716301462001ae25760405162461bcd60e51b8152600401620005539062002f9b565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001b6b919062002d38565b6000604051808303816000865af19150503d806000811462001baa576040519150601f19603f3d011682016040523d82523d6000602084013e62001baf565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fce9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262002193565b80600162001c406020600262003184565b62001c4c919062003192565b6021541062001cb15760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cc69190620031ac565b909155505060215460005b602081101562001d70578160011660010362001d0657826001826020811062001cfe5762001cfe62002c88565b015550505050565b6001816020811062001d1c5762001d1c62002c88565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d59919062002cca565b91508062001d678162002ce1565b91505062001cd1565b5062001d7b620031c7565b505050565b60225460ff161562001da65760405162461bcd60e51b81526004016200055390620029ed565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001def8a63ffffffff166200145b565b1562001e465760405162461bcd60e51b815260206004820152603060248201526000805160206200477983398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001eba573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ee09190620031dd565b90508060000362001f495760405162461bcd60e51b815260206004820152603960248201526000805160206200477983398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff878116610100909204161462001fcb5760405162461bcd60e51b815260206004820152604360248201526000805160206200477983398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff1662001fe957508862001fec565b50895b6200201762002008848b8b8b8b8b8b8051906020012062000c42565b8e8e63ffffffff168462000b40565b620009b25760405162461bcd60e51b815260206004820152602c60248201526000805160206200477983398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020796101008362002cca565b905060006200208b6101008462002e03565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001d7b90849063a9059cbb60e01b9060640162001bf7565b60225460ff16620021575760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b6000620021ea826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166200226c9092919063ffffffff16565b80519091501562001d7b57808060200190518101906200220b9190620031f7565b62001d7b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c3a848460008585600080866001600160a01b0316858760405162002296919062002d38565b60006040518083038185875af1925050503d8060008114620022d5576040519150601f19603f3d011682016040523d82523d6000602084013e620022da565b606091505b5091509150620022ed87838387620022f8565b979650505050505050565b606083156200236c57825160000362002364576001600160a01b0385163b620023645760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c3a565b62000c3a8383815115620023835781518083602001fd5b8060405162461bcd60e51b815260040162000553919062003217565b61154c806200322d83390190565b6001600160a01b0381168114620023c357600080fd5b50565b8035620023d381620023ad565b919050565b803563ffffffff81168114620023d357600080fd5b60008083601f8401126200240057600080fd5b50813567ffffffffffffffff8111156200241957600080fd5b6020830191508360208285010111156200243257600080fd5b9250929050565b60008060008060008060a087890312156200245357600080fd5b86356200246081620023ad565b95506200247060208801620023d8565b945060408701356200248281620023ad565b935060608701359250608087013567ffffffffffffffff811115620024a657600080fd5b620024b489828a01620023ed565b979a9699509497509295939492505050565b60008060408385031215620024da57600080fd5b620024e583620023d8565b91506020830135620024f781620023ad565b809150509250929050565b6000602082840312156200251557600080fd5b81356200252281620023ad565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200256b576200256b62002529565b604052919050565b600082601f8301126200258557600080fd5b8135602067ffffffffffffffff821115620025a457620025a462002529565b8160051b620025b58282016200253f565b9283528481018201928281019087851115620025d057600080fd5b83870192505b84831015620022ed57823582529183019190830190620025d6565b600080600080608085870312156200260857600080fd5b84359350602085013567ffffffffffffffff808211156200262857600080fd5b620026368883890162002573565b94506040870135915080821682146200264e57600080fd5b509396929550929360600135925050565b60ff81168114620023c357600080fd5b600080600080600080600060e0888a0312156200268b57600080fd5b873562002698816200265f565b9650620026a860208901620023d8565b95506040880135620026ba81620023ad565b9450620026ca60608901620023d8565b93506080880135620026dc81620023ad565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002716576200271662002529565b50601f01601f191660200190565b600082601f8301126200273657600080fd5b81356200274d6200274782620026f9565b6200253f565b8181528460208386010111156200276357600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027a157600080fd5b8a3567ffffffffffffffff80821115620027ba57600080fd5b620027c88e838f0162002573565b9b50620027d860208e01620023d8565b9a5060408d0135995060608d01359850620027f660808e01620023d8565b97506200280660a08e01620023c6565b96506200281660c08e01620023d8565b95506200282660e08e01620023c6565b94506101008d013593506101208d01359150808211156200284657600080fd5b50620028558d828e0162002724565b9150509295989b9194979a5092959850565b6000806000606084860312156200287d57600080fd5b6200288884620023d8565b925060208401356200289a81620023ad565b91506040840135620028ac81620023ad565b809150509250925092565b600060208284031215620028ca57600080fd5b5035919050565b600080600080600080600060a0888a031215620028ed57600080fd5b620028f888620023d8565b965060208801356200290a81620023ad565b9550604088013567ffffffffffffffff808211156200292857600080fd5b620029368b838c01620023ed565b909750955060608a01359150808211156200295057600080fd5b506200295f8a828b01620023ed565b909450925050608088013562002975816200265f565b8091505092959891949750929550565b6000806000606084860312156200299b57600080fd5b620029a684620023d8565b92506020840135620029b881620023ad565b9150604084013567ffffffffffffffff811115620029d557600080fd5b620029e38682870162002724565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002a7257818101518382015260200162002a58565b8381111562000fce5750506000910152565b600082601f83011262002a9657600080fd5b815162002aa76200274782620026f9565b81815284602083860101111562002abd57600080fd5b62000c3a82602083016020870162002a55565b60006020828403121562002ae357600080fd5b815167ffffffffffffffff81111562002afb57600080fd5b62000c3a8482850162002a84565b60006020828403121562002b1c57600080fd5b815162002522816200265f565b6000815180845262002b4381602086016020860162002a55565b601f01601f19169290920160200192915050565b60608152600062002b6c606083018662002b29565b828103602084015262002b80818662002b29565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002be88483018762002b29565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002cdc5762002cdc62002c9e565b500490565b60006001820162002cf65762002cf662002cb4565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d2f9083018462002b29565b95945050505050565b6000825162002d4c81846020870162002a55565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002da357600080fd5b835167ffffffffffffffff8082111562002dbc57600080fd5b62002dca8783880162002a84565b9450602086015191508082111562002de157600080fd5b5062002df08682870162002a84565b9250506040840151620028ac816200265f565b60008262002e155762002e1562002c9e565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e5960608301878962002e1a565b828103602084015262002e6e81868862002e1a565b91505060ff831660408301529695505050505050565b6000835162002e9881846020880162002a55565b83519083019062002eae81836020880162002a55565b01949350505050565b6000808585111562002ec857600080fd5b8386111562002ed657600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002eff57600080fd5b873562002f0c81620023ad565b9650602088013562002f1e81620023ad565b955060408801359450606088013593506080880135620026dc816200265f565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b8015158114620023c357600080fd5b600080600080600080600080610100898b0312156200301957600080fd5b88356200302681620023ad565b975060208901356200303881620023ad565b965060408901359550606089013594506080890135620030588162002fec565b935060a08901356200306a816200265f565b979a969950949793969295929450505060c08201359160e0013590565b600181815b80851115620030c8578160001904821115620030ac57620030ac62002cb4565b80851615620030ba57918102915b93841c93908002906200308c565b509250929050565b600082620030e15750600162000a47565b81620030f05750600062000a47565b8160018114620031095760028114620031145762003134565b600191505062000a47565b60ff84111562003128576200312862002cb4565b50506001821b62000a47565b5060208310610133831016604e8410600b841016171562003159575081810a62000a47565b62003165838362003087565b80600019048211156200317c576200317c62002cb4565b029392505050565b6000620025228383620030d0565b600082821015620031a757620031a762002cb4565b500390565b60008219821115620031c257620031c262002cb4565b500190565b634e487b7160e01b600052600160045260246000fd5b600060208284031215620031f057600080fd5b5051919050565b6000602082840312156200320a57600080fd5b8151620025228162002fec565b60208152600062002522602083018462002b2956fe60c06040523480156200001157600080fd5b506040516200154c3803806200154c8339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611092620004ba60003960006104690152600081816102f9015261043301526110926000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611043565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161105557611055610fd1565b506001019056fea264697066735822122048db6a6222fa164d21a8fcb1cd25d2a9e0eee016393c37dcc7b7fd638ef787c264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212201e5d89c55c1f97b1f79752036fe68d3686187613f7595faa2b990d177c1a04c264736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZkEVMBridgeMock.json b/compiled-contracts/PolygonZkEVMBridgeMock.json index f6770c09d..6f612909e 100644 --- a/compiled-contracts/PolygonZkEVMBridgeMock.json +++ b/compiled-contracts/PolygonZkEVMBridgeMock.json @@ -790,8 +790,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50614c1a806100206000396000f3fe608060405260043610620001f35760003560e01c80637b6323c1116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b80637b6323c1146200045e57806381b1c17414620004835780638da5cb5b14620004bd57600080fd5b8063318aee3d116200018d5780633e19704311620001585780633e19704314620003d75780634638554914620003fc578063647c576c1462000421578063715018a6146200044657600080fd5b8063318aee3d146200030957806337883a3e14620003785780633ae05047146200039a5780633da8168214620003b257600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f620002093660046200285c565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f6200071e565b3480156200026757600080fd5b506200027f62000279366004620028e9565b62000757565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002925565b620007aa565b348015620002ca57600080fd5b506200020f620002dc3660046200293f565b620007b9565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002964565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b506027546200027f906001600160a01b031681565b348015620003a757600080fd5b50620002fa620007e5565b348015620003bf57600080fd5b506200022d620003d136600462002a4c565b620008d8565b348015620003e457600080fd5b50620002fa620003f636600462002aca565b620009da565b3480156200040957600080fd5b506200020f6200041b36600462002bdb565b62000a67565b3480156200042e57600080fd5b506200020f6200044036600462002cc2565b62000c0d565b3480156200045357600080fd5b506200020f62000d82565b3480156200046b57600080fd5b506200020f6200047d36600462002bdb565b62000d98565b3480156200049057600080fd5b506200027f620004a236600462002925565b6024602052600090815260409020546001600160a01b031681565b348015620004ca57600080fd5b50605a546001600160a01b03166200027f565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002925565b62001245565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002d12565b6200128a565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002dc6565b620013a1565b348015620005e957600080fd5b506200020f62001553565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002925565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002964565b6200158a565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007065760405162461bcd60e51b815260206004820152604760248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b6200071686868686868662001609565b505050505050565b6027546001600160a01b031633146200074b5760405162461bcd60e51b8152600401620006fd9062002e2e565b6200075562001a9f565b565b60006024600084846040516020016200077292919062002e8b565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b462001afd565b608c55565b620007c362001afd565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008cf57826001166001036200085057600181602081106200081c576200081c62002eb5565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200087d565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088a60028462002ef7565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c69062002f0e565b915050620007f0565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009cb5781600116600103620009555786818151811062000913576200091362002eb5565b60200260200101518360405160200162000937929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009a7565b828782815181106200096b576200096b62002eb5565b60200260200101516040516020016200098e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b460028362002ef7565b915080620009c28162002f0e565b915050620008e8565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a8d5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000aa38a8a8a8a8a8a8a8a8a8a600162001b59565b62000ab48963ffffffff1662001de4565b6000836001600160a01b03168387898560405160240162000ad89392919062002fef565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b0f91906200302a565b60006040518083038185875af1925050503d806000811462000b4e576040519150601f19603f3d011682016040523d82523d6000602084013e62000b53565b606091505b505090508062000bbf5760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b6064820152608401620006fd565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bf895949392919062003048565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c2e5750600054600160ff909116105b8062000c4a5750303b15801562000c4a575060005460ff166001145b62000caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006fd565b6000805460ff19166001179055801562000cd3576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d3562001e26565b801562000d7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8c62001afd565b62000755600062001e99565b60225460ff161562000dbe5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000dd48a8a8a8a8a8a8a8a8a8a600062001b59565b62000de58963ffffffff1662001de4565b6001600160a01b03851662000eda57604080516000808252602082019092526001600160a01b03851690849060405162000e2091906200302a565b60006040518083038185875af1925050503d806000811462000e5f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e64565b606091505b505090508062000ed35760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b6064820152608401620006fd565b50620011f8565b60225463ffffffff61010090910481169087160362000f0f5762000f096001600160a01b038616848462001eeb565b620011f8565b6000868660405160200162000f2692919062002e8b565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200117d5760008060008580602001905181019062000f789190620030cb565b92509250925060008584848460405162000f9290620027c5565b62000fa09392919062003141565b8190604051809103906000f590508015801562000fc1573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001016573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200103c91906200318d565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200116b9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011f5565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620011cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011f391906200318d565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200123195949392919062003048565b60405180910390a150505050505050505050565b600080620012566101008462002ef7565b905060006200126861010085620031ad565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620012a292919062002e8b565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012d590620027c5565b601f1982820381018352601f90910116604081905262001302908d908d908d908d908d90602001620031ed565b60408051601f19818403018152908290526200132292916020016200322e565b604051602081830303815290604052805190602001206040516020016200137b94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013c75760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff6101009091048116908416036200144f5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c460000006064820152608401620006fd565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620014a398979695949392919062003261565b60405180910390a1620014e0620014da6001602260019054906101000a900463ffffffff16338787348880519060200120620009da565b62001f55565b6026546001600160a01b03166333d6247d620014fb620007e5565b6040518263ffffffff1660e01b81526004016200151a91815260200190565b600060405180830381600087803b1580156200153557600080fd5b505af11580156200154a573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015805760405162461bcd60e51b8152600401620006fd9062002e2e565b62000755620020a1565b6200159462001afd565b6001600160a01b038116620015fb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006fd565b620016068162001e99565b50565b60225460ff16156200162f5760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff610100909104811690861603620016b75760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c4600000000006064820152608401620006fd565b60008060606001600160a01b0389166200174e5785341462001744576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c55456064820152608401620006fd565b60009150620019bf565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200181c57604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af1158015620017e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200180991906200318d565b50602081015181519094509250620019bd565b84156200183157620018318a88888862002150565b620018486001600160a01b038b1633308a62002578565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200189f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018c99190810190620032ce565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001908573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620019329190810190620032ce565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001971573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001997919062003307565b604051602001620019ab9392919062003141565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162001a0198979695949392919062003261565b60405180910390a162001a26620014da600084868c8c8c8880519060200120620009da565b6026546001600160a01b03166333d6247d62001a41620007e5565b6040518263ffffffff1660e01b815260040162001a6091815260200190565b600060405180830381600087803b15801562001a7b57600080fd5b505af115801562001a90573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001ac55760405162461bcd60e51b8152600401620006fd9062002f2a565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006fd565b62001b6a8a63ffffffff1662001245565b1562001bc15760405162461bcd60e51b8152602060048201526030602482015260008051602062004bc583398151915260448201526f081053149150511657d0d3105253515160821b6064820152608401620006fd565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001c35573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c5b919062003327565b90508060000362001cc45760405162461bcd60e51b8152602060048201526039602482015260008051602062004bc583398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c4944000000000000006064820152608401620006fd565b60225463ffffffff878116610100909204161462001d465760405162461bcd60e51b8152602060048201526043602482015260008051602062004bc583398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a401620006fd565b602254600090610100900463ffffffff1662001d6457508862001d67565b50895b62001d9262001d83848b8b8b8b8b8b80519060200120620009da565b8e8e63ffffffff1684620008d8565b62001a905760405162461bcd60e51b815260206004820152602c602482015260008051602062004bc583398151915260448201526b0814d35517d253959053125160a21b6064820152608401620006fd565b600062001df46101008362002ef7565b9050600062001e0661010084620031ad565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001e935760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006fd565b62000755335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001f5090849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620025b2565b505050565b80600162001f66602060026200343e565b62001f7291906200344c565b6021541062001fd75760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b6064820152608401620006fd565b60016021600082825462001fec919062003466565b909155505060215460005b60208110156200209657816001166001036200202c57826001826020811062002024576200202462002eb5565b015550505050565b6001816020811062002042576200204262002eb5565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200207f919062002ef7565b9150806200208d8162002f0e565b91505062001ff7565b5062001f5062003481565b60225460ff166200211b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006fd565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200219383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200268b92505050565b9050632afa533160e01b6001600160e01b03198216016200238c576000808080808080620021c5896004818d62003497565b810190620021d49190620034c3565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620022165760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0386163014620022415760405162461bcd60e51b8152600401620006fd906200357b565b8a8514620022b85760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d41544348000000000000006064820152608401620006fd565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200233891906200302a565b6000604051808303816000865af19150503d806000811462002377576040519150601f19603f3d011682016040523d82523d6000602084013e6200237c565b606091505b5050505050505050505062002571565b6001600160e01b031981166323f2ebc360e21b14620024025760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b6064820152608401620006fd565b6000808080808080806200241a8a6004818e62003497565b810190620024299190620035cc565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200246d5760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0387163014620024985760405162461bcd60e51b8152600401620006fd906200357b565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f16916200252191906200302a565b6000604051808303816000865af19150503d806000811462002560576040519150601f19603f3d011682016040523d82523d6000602084013e62002565565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d7c9085906323b872dd60e01b9060840162001f18565b600062002609826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620026929092919063ffffffff16565b80519091501562001f5057808060200190518101906200262a91906200318d565b62001f505760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006fd565b6020015190565b6060620009d2848460008585600080866001600160a01b03168587604051620026bc91906200302a565b60006040518083038185875af1925050503d8060008114620026fb576040519150601f19603f3d011682016040523d82523d6000602084013e62002700565b606091505b509150915062002713878383876200271e565b979650505050505050565b60608315620027925782516000036200278a576001600160a01b0385163b6200278a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006fd565b5081620009d2565b620009d28383815115620027a95781518083602001fd5b8060405162461bcd60e51b8152600401620006fd919062003658565b611557806200366e83390190565b6001600160a01b03811681146200160657600080fd5b8035620027f681620027d3565b919050565b803563ffffffff81168114620027f657600080fd5b60008083601f8401126200282357600080fd5b50813567ffffffffffffffff8111156200283c57600080fd5b6020830191508360208285010111156200285557600080fd5b9250929050565b60008060008060008060a087890312156200287657600080fd5b86356200288381620027d3565b95506200289360208801620027fb565b94506040870135620028a581620027d3565b935060608701359250608087013567ffffffffffffffff811115620028c957600080fd5b620028d789828a0162002810565b979a9699509497509295939492505050565b60008060408385031215620028fd57600080fd5b6200290883620027fb565b915060208301356200291a81620027d3565b809150509250929050565b6000602082840312156200293857600080fd5b5035919050565b6000602082840312156200295257600080fd5b6200295d82620027fb565b9392505050565b6000602082840312156200297757600080fd5b81356200295d81620027d3565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620029c657620029c662002984565b604052919050565b600082601f830112620029e057600080fd5b8135602067ffffffffffffffff821115620029ff57620029ff62002984565b8160051b62002a108282016200299a565b928352848101820192828101908785111562002a2b57600080fd5b83870192505b84831015620027135782358252918301919083019062002a31565b6000806000806080858703121562002a6357600080fd5b84359350602085013567ffffffffffffffff8082111562002a8357600080fd5b62002a9188838901620029ce565b945060408701359150808216821462002aa957600080fd5b509396929550929360600135925050565b60ff811681146200160657600080fd5b600080600080600080600060e0888a03121562002ae657600080fd5b873562002af38162002aba565b965062002b0360208901620027fb565b9550604088013562002b1581620027d3565b945062002b2560608901620027fb565b9350608088013562002b3781620027d3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002b715762002b7162002984565b50601f01601f191660200190565b600082601f83011262002b9157600080fd5b813562002ba862002ba28262002b54565b6200299a565b81815284602083860101111562002bbe57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002bfc57600080fd5b8a3567ffffffffffffffff8082111562002c1557600080fd5b62002c238e838f01620029ce565b9b5062002c3360208e01620027fb565b9a5060408d0135995060608d0135985062002c5160808e01620027fb565b975062002c6160a08e01620027e9565b965062002c7160c08e01620027fb565b955062002c8160e08e01620027e9565b94506101008d013593506101208d013591508082111562002ca157600080fd5b5062002cb08d828e0162002b7f565b9150509295989b9194979a5092959850565b60008060006060848603121562002cd857600080fd5b62002ce384620027fb565b9250602084013562002cf581620027d3565b9150604084013562002d0781620027d3565b809150509250925092565b600080600080600080600060a0888a03121562002d2e57600080fd5b62002d3988620027fb565b9650602088013562002d4b81620027d3565b9550604088013567ffffffffffffffff8082111562002d6957600080fd5b62002d778b838c0162002810565b909750955060608a013591508082111562002d9157600080fd5b5062002da08a828b0162002810565b909450925050608088013562002db68162002aba565b8091505092959891949750929550565b60008060006060848603121562002ddc57600080fd5b62002de784620027fb565b9250602084013562002df981620027d3565b9150604084013567ffffffffffffffff81111562002e1657600080fd5b62002e248682870162002b7f565b9150509250925092565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002f095762002f0962002ecb565b500490565b60006001820162002f235762002f2362002ee1565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002faf57818101518382015260200162002f95565b8381111562000d7c5750506000910152565b6000815180845262002fdb81602086016020860162002f92565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff83166020820152606060408201819052600090620030219083018462002fc1565b95945050505050565b600082516200303e81846020870162002f92565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f8301126200309157600080fd5b8151620030a262002ba28262002b54565b818152846020838601011115620030b857600080fd5b620009d282602083016020870162002f92565b600080600060608486031215620030e157600080fd5b835167ffffffffffffffff80821115620030fa57600080fd5b62003108878388016200307f565b945060208601519150808211156200311f57600080fd5b506200312e868287016200307f565b925050604084015162002d078162002aba565b60608152600062003156606083018662002fc1565b82810360208401526200316a818662002fc1565b91505060ff83166040830152949350505050565b80151581146200160657600080fd5b600060208284031215620031a057600080fd5b81516200295d816200317e565b600082620031bf57620031bf62002ecb565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003203606083018789620031c4565b828103602084015262003218818688620031c4565b91505060ff831660408301529695505050505050565b600083516200324281846020880162002f92565b8351908301906200325881836020880162002f92565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032b58483018762002fc1565b925080851660e085015250509998505050505050505050565b600060208284031215620032e157600080fd5b815167ffffffffffffffff811115620032f957600080fd5b620009d2848285016200307f565b6000602082840312156200331a57600080fd5b81516200295d8162002aba565b6000602082840312156200333a57600080fd5b5051919050565b600181815b808511156200338257816000190482111562003366576200336662002ee1565b808516156200337457918102915b93841c939080029062003346565b509250929050565b6000826200339b57506001620007a4565b81620033aa57506000620007a4565b8160018114620033c35760028114620033ce57620033ee565b6001915050620007a4565b60ff841115620033e257620033e262002ee1565b50506001821b620007a4565b5060208310610133831016604e8410600b841016171562003413575081810a620007a4565b6200341f838362003341565b806000190482111562003436576200343662002ee1565b029392505050565b60006200295d83836200338a565b60008282101562003461576200346162002ee1565b500390565b600082198211156200347c576200347c62002ee1565b500190565b634e487b7160e01b600052600160045260246000fd5b60008085851115620034a857600080fd5b83861115620034b657600080fd5b5050820193919092039150565b600080600080600080600060e0888a031215620034df57600080fd5b8735620034ec81620027d3565b96506020880135620034fe81620027d3565b95506040880135945060608801359350608088013562002b378162002aba565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b031215620035ea57600080fd5b8835620035f781620027d3565b975060208901356200360981620027d3565b96506040890135955060608901359450608089013562003629816200317e565b935060a08901356200363b8162002aba565b979a969950949793969295929450505060c08201359160e0013590565b6020815260006200295d602083018462002fc156fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea264697066735822122070fae8b3daebe7fc894d50296739b7a26e638f37239109230c7dfd552785f2a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220d4ca4d2407b1daa13f8be7716fe538d31793723da0a7320641e770f9e4556add64736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001f35760003560e01c80637b6323c1116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b80637b6323c1146200045e57806381b1c17414620004835780638da5cb5b14620004bd57600080fd5b8063318aee3d116200018d5780633e19704311620001585780633e19704314620003d75780634638554914620003fc578063647c576c1462000421578063715018a6146200044657600080fd5b8063318aee3d146200030957806337883a3e14620003785780633ae05047146200039a5780633da8168214620003b257600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f620002093660046200285c565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f6200071e565b3480156200026757600080fd5b506200027f62000279366004620028e9565b62000757565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002925565b620007aa565b348015620002ca57600080fd5b506200020f620002dc3660046200293f565b620007b9565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002964565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b506027546200027f906001600160a01b031681565b348015620003a757600080fd5b50620002fa620007e5565b348015620003bf57600080fd5b506200022d620003d136600462002a4c565b620008d8565b348015620003e457600080fd5b50620002fa620003f636600462002aca565b620009da565b3480156200040957600080fd5b506200020f6200041b36600462002bdb565b62000a67565b3480156200042e57600080fd5b506200020f6200044036600462002cc2565b62000c0d565b3480156200045357600080fd5b506200020f62000d82565b3480156200046b57600080fd5b506200020f6200047d36600462002bdb565b62000d98565b3480156200049057600080fd5b506200027f620004a236600462002925565b6024602052600090815260409020546001600160a01b031681565b348015620004ca57600080fd5b50605a546001600160a01b03166200027f565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002925565b62001245565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002d12565b6200128a565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002dc6565b620013a1565b348015620005e957600080fd5b506200020f62001553565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002925565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002964565b6200158a565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007065760405162461bcd60e51b815260206004820152604760248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b6200071686868686868662001609565b505050505050565b6027546001600160a01b031633146200074b5760405162461bcd60e51b8152600401620006fd9062002e2e565b6200075562001a9f565b565b60006024600084846040516020016200077292919062002e8b565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b462001afd565b608c55565b620007c362001afd565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008cf57826001166001036200085057600181602081106200081c576200081c62002eb5565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200087d565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088a60028462002ef7565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c69062002f0e565b915050620007f0565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009cb5781600116600103620009555786818151811062000913576200091362002eb5565b60200260200101518360405160200162000937929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009a7565b828782815181106200096b576200096b62002eb5565b60200260200101516040516020016200098e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b460028362002ef7565b915080620009c28162002f0e565b915050620008e8565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a8d5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000aa38a8a8a8a8a8a8a8a8a8a600162001b59565b62000ab48963ffffffff1662001de4565b6000836001600160a01b03168387898560405160240162000ad89392919062002fef565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b0f91906200302a565b60006040518083038185875af1925050503d806000811462000b4e576040519150601f19603f3d011682016040523d82523d6000602084013e62000b53565b606091505b505090508062000bbf5760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b6064820152608401620006fd565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bf895949392919062003048565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c2e5750600054600160ff909116105b8062000c4a5750303b15801562000c4a575060005460ff166001145b62000caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006fd565b6000805460ff19166001179055801562000cd3576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d3562001e26565b801562000d7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8c62001afd565b62000755600062001e99565b60225460ff161562000dbe5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000dd48a8a8a8a8a8a8a8a8a8a600062001b59565b62000de58963ffffffff1662001de4565b6001600160a01b03851662000eda57604080516000808252602082019092526001600160a01b03851690849060405162000e2091906200302a565b60006040518083038185875af1925050503d806000811462000e5f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e64565b606091505b505090508062000ed35760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b6064820152608401620006fd565b50620011f8565b60225463ffffffff61010090910481169087160362000f0f5762000f096001600160a01b038616848462001eeb565b620011f8565b6000868660405160200162000f2692919062002e8b565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200117d5760008060008580602001905181019062000f789190620030cb565b92509250925060008584848460405162000f9290620027c5565b62000fa09392919062003141565b8190604051809103906000f590508015801562000fc1573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001016573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200103c91906200318d565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200116b9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011f5565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620011cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011f391906200318d565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200123195949392919062003048565b60405180910390a150505050505050505050565b600080620012566101008462002ef7565b905060006200126861010085620031ad565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620012a292919062002e8b565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012d590620027c5565b601f1982820381018352601f90910116604081905262001302908d908d908d908d908d90602001620031ed565b60408051601f19818403018152908290526200132292916020016200322e565b604051602081830303815290604052805190602001206040516020016200137b94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013c75760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff6101009091048116908416036200144f5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c460000006064820152608401620006fd565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620014a398979695949392919062003261565b60405180910390a1620014e0620014da6001602260019054906101000a900463ffffffff16338787348880519060200120620009da565b62001f55565b6026546001600160a01b03166333d6247d620014fb620007e5565b6040518263ffffffff1660e01b81526004016200151a91815260200190565b600060405180830381600087803b1580156200153557600080fd5b505af11580156200154a573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015805760405162461bcd60e51b8152600401620006fd9062002e2e565b62000755620020a1565b6200159462001afd565b6001600160a01b038116620015fb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006fd565b620016068162001e99565b50565b60225460ff16156200162f5760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff610100909104811690861603620016b75760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c4600000000006064820152608401620006fd565b60008060606001600160a01b0389166200174e5785341462001744576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c55456064820152608401620006fd565b60009150620019bf565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200181c57604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af1158015620017e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200180991906200318d565b50602081015181519094509250620019bd565b84156200183157620018318a88888862002150565b620018486001600160a01b038b1633308a62002578565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200189f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018c99190810190620032ce565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001908573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620019329190810190620032ce565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001971573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001997919062003307565b604051602001620019ab9392919062003141565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162001a0198979695949392919062003261565b60405180910390a162001a26620014da600084868c8c8c8880519060200120620009da565b6026546001600160a01b03166333d6247d62001a41620007e5565b6040518263ffffffff1660e01b815260040162001a6091815260200190565b600060405180830381600087803b15801562001a7b57600080fd5b505af115801562001a90573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001ac55760405162461bcd60e51b8152600401620006fd9062002f2a565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006fd565b62001b6a8a63ffffffff1662001245565b1562001bc15760405162461bcd60e51b8152602060048201526030602482015260008051602062004bc583398151915260448201526f081053149150511657d0d3105253515160821b6064820152608401620006fd565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001c35573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c5b919062003327565b90508060000362001cc45760405162461bcd60e51b8152602060048201526039602482015260008051602062004bc583398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c4944000000000000006064820152608401620006fd565b60225463ffffffff878116610100909204161462001d465760405162461bcd60e51b8152602060048201526043602482015260008051602062004bc583398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a401620006fd565b602254600090610100900463ffffffff1662001d6457508862001d67565b50895b62001d9262001d83848b8b8b8b8b8b80519060200120620009da565b8e8e63ffffffff1684620008d8565b62001a905760405162461bcd60e51b815260206004820152602c602482015260008051602062004bc583398151915260448201526b0814d35517d253959053125160a21b6064820152608401620006fd565b600062001df46101008362002ef7565b9050600062001e0661010084620031ad565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001e935760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006fd565b62000755335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001f5090849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620025b2565b505050565b80600162001f66602060026200343e565b62001f7291906200344c565b6021541062001fd75760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b6064820152608401620006fd565b60016021600082825462001fec919062003466565b909155505060215460005b60208110156200209657816001166001036200202c57826001826020811062002024576200202462002eb5565b015550505050565b6001816020811062002042576200204262002eb5565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200207f919062002ef7565b9150806200208d8162002f0e565b91505062001ff7565b5062001f5062003481565b60225460ff166200211b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006fd565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200219383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200268b92505050565b9050632afa533160e01b6001600160e01b03198216016200238c576000808080808080620021c5896004818d62003497565b810190620021d49190620034c3565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620022165760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0386163014620022415760405162461bcd60e51b8152600401620006fd906200357b565b8a8514620022b85760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d41544348000000000000006064820152608401620006fd565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200233891906200302a565b6000604051808303816000865af19150503d806000811462002377576040519150601f19603f3d011682016040523d82523d6000602084013e6200237c565b606091505b5050505050505050505062002571565b6001600160e01b031981166323f2ebc360e21b14620024025760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b6064820152608401620006fd565b6000808080808080806200241a8a6004818e62003497565b810190620024299190620035cc565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200246d5760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0387163014620024985760405162461bcd60e51b8152600401620006fd906200357b565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f16916200252191906200302a565b6000604051808303816000865af19150503d806000811462002560576040519150601f19603f3d011682016040523d82523d6000602084013e62002565565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d7c9085906323b872dd60e01b9060840162001f18565b600062002609826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620026929092919063ffffffff16565b80519091501562001f5057808060200190518101906200262a91906200318d565b62001f505760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006fd565b6020015190565b6060620009d2848460008585600080866001600160a01b03168587604051620026bc91906200302a565b60006040518083038185875af1925050503d8060008114620026fb576040519150601f19603f3d011682016040523d82523d6000602084013e62002700565b606091505b509150915062002713878383876200271e565b979650505050505050565b60608315620027925782516000036200278a576001600160a01b0385163b6200278a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006fd565b5081620009d2565b620009d28383815115620027a95781518083602001fd5b8060405162461bcd60e51b8152600401620006fd919062003658565b611557806200366e83390190565b6001600160a01b03811681146200160657600080fd5b8035620027f681620027d3565b919050565b803563ffffffff81168114620027f657600080fd5b60008083601f8401126200282357600080fd5b50813567ffffffffffffffff8111156200283c57600080fd5b6020830191508360208285010111156200285557600080fd5b9250929050565b60008060008060008060a087890312156200287657600080fd5b86356200288381620027d3565b95506200289360208801620027fb565b94506040870135620028a581620027d3565b935060608701359250608087013567ffffffffffffffff811115620028c957600080fd5b620028d789828a0162002810565b979a9699509497509295939492505050565b60008060408385031215620028fd57600080fd5b6200290883620027fb565b915060208301356200291a81620027d3565b809150509250929050565b6000602082840312156200293857600080fd5b5035919050565b6000602082840312156200295257600080fd5b6200295d82620027fb565b9392505050565b6000602082840312156200297757600080fd5b81356200295d81620027d3565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620029c657620029c662002984565b604052919050565b600082601f830112620029e057600080fd5b8135602067ffffffffffffffff821115620029ff57620029ff62002984565b8160051b62002a108282016200299a565b928352848101820192828101908785111562002a2b57600080fd5b83870192505b84831015620027135782358252918301919083019062002a31565b6000806000806080858703121562002a6357600080fd5b84359350602085013567ffffffffffffffff8082111562002a8357600080fd5b62002a9188838901620029ce565b945060408701359150808216821462002aa957600080fd5b509396929550929360600135925050565b60ff811681146200160657600080fd5b600080600080600080600060e0888a03121562002ae657600080fd5b873562002af38162002aba565b965062002b0360208901620027fb565b9550604088013562002b1581620027d3565b945062002b2560608901620027fb565b9350608088013562002b3781620027d3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002b715762002b7162002984565b50601f01601f191660200190565b600082601f83011262002b9157600080fd5b813562002ba862002ba28262002b54565b6200299a565b81815284602083860101111562002bbe57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002bfc57600080fd5b8a3567ffffffffffffffff8082111562002c1557600080fd5b62002c238e838f01620029ce565b9b5062002c3360208e01620027fb565b9a5060408d0135995060608d0135985062002c5160808e01620027fb565b975062002c6160a08e01620027e9565b965062002c7160c08e01620027fb565b955062002c8160e08e01620027e9565b94506101008d013593506101208d013591508082111562002ca157600080fd5b5062002cb08d828e0162002b7f565b9150509295989b9194979a5092959850565b60008060006060848603121562002cd857600080fd5b62002ce384620027fb565b9250602084013562002cf581620027d3565b9150604084013562002d0781620027d3565b809150509250925092565b600080600080600080600060a0888a03121562002d2e57600080fd5b62002d3988620027fb565b9650602088013562002d4b81620027d3565b9550604088013567ffffffffffffffff8082111562002d6957600080fd5b62002d778b838c0162002810565b909750955060608a013591508082111562002d9157600080fd5b5062002da08a828b0162002810565b909450925050608088013562002db68162002aba565b8091505092959891949750929550565b60008060006060848603121562002ddc57600080fd5b62002de784620027fb565b9250602084013562002df981620027d3565b9150604084013567ffffffffffffffff81111562002e1657600080fd5b62002e248682870162002b7f565b9150509250925092565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002f095762002f0962002ecb565b500490565b60006001820162002f235762002f2362002ee1565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002faf57818101518382015260200162002f95565b8381111562000d7c5750506000910152565b6000815180845262002fdb81602086016020860162002f92565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff83166020820152606060408201819052600090620030219083018462002fc1565b95945050505050565b600082516200303e81846020870162002f92565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f8301126200309157600080fd5b8151620030a262002ba28262002b54565b818152846020838601011115620030b857600080fd5b620009d282602083016020870162002f92565b600080600060608486031215620030e157600080fd5b835167ffffffffffffffff80821115620030fa57600080fd5b62003108878388016200307f565b945060208601519150808211156200311f57600080fd5b506200312e868287016200307f565b925050604084015162002d078162002aba565b60608152600062003156606083018662002fc1565b82810360208401526200316a818662002fc1565b91505060ff83166040830152949350505050565b80151581146200160657600080fd5b600060208284031215620031a057600080fd5b81516200295d816200317e565b600082620031bf57620031bf62002ecb565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003203606083018789620031c4565b828103602084015262003218818688620031c4565b91505060ff831660408301529695505050505050565b600083516200324281846020880162002f92565b8351908301906200325881836020880162002f92565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032b58483018762002fc1565b925080851660e085015250509998505050505050505050565b600060208284031215620032e157600080fd5b815167ffffffffffffffff811115620032f957600080fd5b620009d2848285016200307f565b6000602082840312156200331a57600080fd5b81516200295d8162002aba565b6000602082840312156200333a57600080fd5b5051919050565b600181815b808511156200338257816000190482111562003366576200336662002ee1565b808516156200337457918102915b93841c939080029062003346565b509250929050565b6000826200339b57506001620007a4565b81620033aa57506000620007a4565b8160018114620033c35760028114620033ce57620033ee565b6001915050620007a4565b60ff841115620033e257620033e262002ee1565b50506001821b620007a4565b5060208310610133831016604e8410600b841016171562003413575081810a620007a4565b6200341f838362003341565b806000190482111562003436576200343662002ee1565b029392505050565b60006200295d83836200338a565b60008282101562003461576200346162002ee1565b500390565b600082198211156200347c576200347c62002ee1565b500190565b634e487b7160e01b600052600160045260246000fd5b60008085851115620034a857600080fd5b83861115620034b657600080fd5b5050820193919092039150565b600080600080600080600060e0888a031215620034df57600080fd5b8735620034ec81620027d3565b96506020880135620034fe81620027d3565b95506040880135945060608801359350608088013562002b378162002aba565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b031215620035ea57600080fd5b8835620035f781620027d3565b975060208901356200360981620027d3565b96506040890135955060608901359450608089013562003629816200317e565b935060a08901356200363b8162002aba565b979a969950949793969295929450505060c08201359160e0013590565b6020815260006200295d602083018462002fc156fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea264697066735822122070fae8b3daebe7fc894d50296739b7a26e638f37239109230c7dfd552785f2a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220d4ca4d2407b1daa13f8be7716fe538d31793723da0a7320641e770f9e4556add64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50614bd8806100206000396000f3fe608060405260043610620001f35760003560e01c80637b6323c1116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b80637b6323c1146200045e57806381b1c17414620004835780638da5cb5b14620004bd57600080fd5b8063318aee3d116200018d5780633e19704311620001585780633e19704314620003d75780634638554914620003fc578063647c576c1462000421578063715018a6146200044657600080fd5b8063318aee3d146200030957806337883a3e14620003785780633ae05047146200039a5780633da8168214620003b257600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f6200020936600462002825565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f6200071e565b3480156200026757600080fd5b506200027f62000279366004620028b2565b62000757565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b7366004620028ee565b620007aa565b348015620002ca57600080fd5b506200020f620002dc36600462002908565b620007b9565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b5062000353620003283660046200292d565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b506027546200027f906001600160a01b031681565b348015620003a757600080fd5b50620002fa620007e5565b348015620003bf57600080fd5b506200022d620003d136600462002a15565b620008d8565b348015620003e457600080fd5b50620002fa620003f636600462002a93565b620009da565b3480156200040957600080fd5b506200020f6200041b36600462002ba4565b62000a67565b3480156200042e57600080fd5b506200020f6200044036600462002c8b565b62000c0d565b3480156200045357600080fd5b506200020f62000d82565b3480156200046b57600080fd5b506200020f6200047d36600462002ba4565b62000d98565b3480156200049057600080fd5b506200027f620004a2366004620028ee565b6024602052600090815260409020546001600160a01b031681565b348015620004ca57600080fd5b50605a546001600160a01b03166200027f565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d62000514366004620028ee565b6200121f565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002cdb565b62001264565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002d8f565b6200137b565b348015620005e957600080fd5b506200020f6200152d565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a366004620028ee565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b3660046200292d565b62001564565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007065760405162461bcd60e51b815260206004820152604760248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b62000716868686868686620015e3565b505050505050565b6027546001600160a01b031633146200074b5760405162461bcd60e51b8152600401620006fd9062002df7565b6200075562001a68565b565b60006024600084846040516020016200077292919062002e54565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b462001ac6565b608c55565b620007c362001ac6565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008cf57826001166001036200085057600181602081106200081c576200081c62002e7e565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200087d565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088a60028462002ec0565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c69062002ed7565b915050620007f0565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009cb5781600116600103620009555786818151811062000913576200091362002e7e565b60200260200101518360405160200162000937929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009a7565b828782815181106200096b576200096b62002e7e565b60200260200101516040516020016200098e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b460028362002ec0565b915080620009c28162002ed7565b915050620008e8565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a8d5760405162461bcd60e51b8152600401620006fd9062002ef3565b62000aa38a8a8a8a8a8a8a8a8a8a600162001b22565b62000ab48963ffffffff1662001dad565b6000836001600160a01b03168387898560405160240162000ad89392919062002fb8565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b0f919062002ff3565b60006040518083038185875af1925050503d806000811462000b4e576040519150601f19603f3d011682016040523d82523d6000602084013e62000b53565b606091505b505090508062000bbf5760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b6064820152608401620006fd565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bf895949392919062003011565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c2e5750600054600160ff909116105b8062000c4a5750303b15801562000c4a575060005460ff166001145b62000caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006fd565b6000805460ff19166001179055801562000cd3576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d3562001def565b801562000d7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8c62001ac6565b62000755600062001e62565b60225460ff161562000dbe5760405162461bcd60e51b8152600401620006fd9062002ef3565b62000dd48a8a8a8a8a8a8a8a8a8a600062001b22565b62000de58963ffffffff1662001dad565b6001600160a01b03851662000eda57604080516000808252602082019092526001600160a01b03851690849060405162000e20919062002ff3565b60006040518083038185875af1925050503d806000811462000e5f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e64565b606091505b505090508062000ed35760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b6064820152608401620006fd565b50620011d2565b60225463ffffffff61010090910481169087160362000f0f5762000f096001600160a01b038616848462001eb4565b620011d2565b6000868660405160200162000f2692919062002e54565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200116a5760008060008580602001905181019062000f78919062003094565b92509250925060008584848460405162000f92906200278e565b62000fa0939291906200310a565b8190604051809103906000f590508015801562000fc1573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f1990604401600060405180830381600087803b1580156200101157600080fd5b505af115801562001026573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620011589392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011cf565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f1990604401600060405180830381600087803b158015620011b557600080fd5b505af1158015620011ca573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200120b95949392919062003011565b60405180910390a150505050505050505050565b600080620012306101008462002ec0565b90506000620012426101008562003147565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200127c92919062002e54565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012af906200278e565b601f1982820381018352601f909101166040819052620012dc908d908d908d908d908d9060200162003187565b60408051601f1981840301815290829052620012fc9291602001620031c8565b604051602081830303815290604052805190602001206040516020016200135594939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013a15760405162461bcd60e51b8152600401620006fd9062002ef3565b60225463ffffffff610100909104811690841603620014295760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c460000006064820152608401620006fd565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff1633868634876021546040516200147d989796959493929190620031fb565b60405180910390a1620014ba620014b46001602260019054906101000a900463ffffffff16338787348880519060200120620009da565b62001f1e565b6026546001600160a01b03166333d6247d620014d5620007e5565b6040518263ffffffff1660e01b8152600401620014f491815260200190565b600060405180830381600087803b1580156200150f57600080fd5b505af115801562001524573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b031633146200155a5760405162461bcd60e51b8152600401620006fd9062002df7565b620007556200206a565b6200156e62001ac6565b6001600160a01b038116620015d55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006fd565b620015e08162001e62565b50565b60225460ff1615620016095760405162461bcd60e51b8152600401620006fd9062002ef3565b60225463ffffffff610100909104811690861603620016915760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c4600000000006064820152608401620006fd565b60008060606001600160a01b03891662001728578534146200171e576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c55456064820152608401620006fd565b6000915062001988565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620017e557604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac90604401600060405180830381600087803b158015620017b857600080fd5b505af1158015620017cd573d6000803e3d6000fd5b50505050806020015193508060000151925062001986565b8415620017fa57620017fa8a88888862002119565b620018116001600160a01b038b1633308a62002541565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001868573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001892919081019062003268565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620018d1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018fb919081019062003268565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200193a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019609190620032a1565b60405160200162001974939291906200310a565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b87602154604051620019ca989796959493929190620031fb565b60405180910390a1620019ef620014b4600084868c8c8c8880519060200120620009da565b6026546001600160a01b03166333d6247d62001a0a620007e5565b6040518263ffffffff1660e01b815260040162001a2991815260200190565b600060405180830381600087803b15801562001a4457600080fd5b505af115801562001a59573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001a8e5760405162461bcd60e51b8152600401620006fd9062002ef3565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006fd565b62001b338a63ffffffff166200121f565b1562001b8a5760405162461bcd60e51b8152602060048201526030602482015260008051602062004b8383398151915260448201526f081053149150511657d0d3105253515160821b6064820152608401620006fd565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001bfe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c249190620032c1565b90508060000362001c8d5760405162461bcd60e51b8152602060048201526039602482015260008051602062004b8383398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c4944000000000000006064820152608401620006fd565b60225463ffffffff878116610100909204161462001d0f5760405162461bcd60e51b8152602060048201526043602482015260008051602062004b8383398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a401620006fd565b602254600090610100900463ffffffff1662001d2d57508862001d30565b50895b62001d5b62001d4c848b8b8b8b8b8b80519060200120620009da565b8e8e63ffffffff1684620008d8565b62001a595760405162461bcd60e51b815260206004820152602c602482015260008051602062004b8383398151915260448201526b0814d35517d253959053125160a21b6064820152608401620006fd565b600062001dbd6101008362002ec0565b9050600062001dcf6101008462003147565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001e5c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006fd565b62000755335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001f1990849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526200257b565b505050565b80600162001f2f60206002620033d8565b62001f3b9190620033e6565b6021541062001fa05760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b6064820152608401620006fd565b60016021600082825462001fb5919062003400565b909155505060215460005b60208110156200205f578160011660010362001ff557826001826020811062001fed5762001fed62002e7e565b015550505050565b600181602081106200200b576200200b62002e7e565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002048919062002ec0565b915080620020568162002ed7565b91505062001fc0565b5062001f196200341b565b60225460ff16620020e45760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006fd565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200215c83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200265492505050565b9050632afa533160e01b6001600160e01b0319821601620023555760008080808080806200218e896004818d62003431565b8101906200219d91906200345d565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620021df5760405162461bcd60e51b8152600401620006fd90620034b8565b6001600160a01b03861630146200220a5760405162461bcd60e51b8152600401620006fd9062003515565b8a8514620022815760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d41544348000000000000006064820152608401620006fd565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162002301919062002ff3565b6000604051808303816000865af19150503d806000811462002340576040519150601f19603f3d011682016040523d82523d6000602084013e62002345565b606091505b505050505050505050506200253a565b6001600160e01b031981166323f2ebc360e21b14620023cb5760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b6064820152608401620006fd565b600080808080808080620023e38a6004818e62003431565b810190620023f2919062003575565b97509750975097509750975097509750336001600160a01b0316886001600160a01b031614620024365760405162461bcd60e51b8152600401620006fd90620034b8565b6001600160a01b0387163014620024615760405162461bcd60e51b8152600401620006fd9062003515565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f1691620024ea919062002ff3565b6000604051808303816000865af19150503d806000811462002529576040519150601f19603f3d011682016040523d82523d6000602084013e6200252e565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d7c9085906323b872dd60e01b9060840162001ee1565b6000620025d2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166200265b9092919063ffffffff16565b80519091501562001f195780806020019051810190620025f3919062003601565b62001f195760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006fd565b6020015190565b6060620009d2848460008585600080866001600160a01b0316858760405162002685919062002ff3565b60006040518083038185875af1925050503d8060008114620026c4576040519150601f19603f3d011682016040523d82523d6000602084013e620026c9565b606091505b5091509150620026dc87838387620026e7565b979650505050505050565b606083156200275b57825160000362002753576001600160a01b0385163b620027535760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006fd565b5081620009d2565b620009d28383815115620027725781518083602001fd5b8060405162461bcd60e51b8152600401620006fd919062003621565b61154c806200363783390190565b6001600160a01b0381168114620015e057600080fd5b8035620027bf816200279c565b919050565b803563ffffffff81168114620027bf57600080fd5b60008083601f840112620027ec57600080fd5b50813567ffffffffffffffff8111156200280557600080fd5b6020830191508360208285010111156200281e57600080fd5b9250929050565b60008060008060008060a087890312156200283f57600080fd5b86356200284c816200279c565b95506200285c60208801620027c4565b945060408701356200286e816200279c565b935060608701359250608087013567ffffffffffffffff8111156200289257600080fd5b620028a089828a01620027d9565b979a9699509497509295939492505050565b60008060408385031215620028c657600080fd5b620028d183620027c4565b91506020830135620028e3816200279c565b809150509250929050565b6000602082840312156200290157600080fd5b5035919050565b6000602082840312156200291b57600080fd5b6200292682620027c4565b9392505050565b6000602082840312156200294057600080fd5b813562002926816200279c565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200298f576200298f6200294d565b604052919050565b600082601f830112620029a957600080fd5b8135602067ffffffffffffffff821115620029c857620029c86200294d565b8160051b620029d982820162002963565b9283528481018201928281019087851115620029f457600080fd5b83870192505b84831015620026dc57823582529183019190830190620029fa565b6000806000806080858703121562002a2c57600080fd5b84359350602085013567ffffffffffffffff8082111562002a4c57600080fd5b62002a5a8883890162002997565b945060408701359150808216821462002a7257600080fd5b509396929550929360600135925050565b60ff81168114620015e057600080fd5b600080600080600080600060e0888a03121562002aaf57600080fd5b873562002abc8162002a83565b965062002acc60208901620027c4565b9550604088013562002ade816200279c565b945062002aee60608901620027c4565b9350608088013562002b00816200279c565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002b3a5762002b3a6200294d565b50601f01601f191660200190565b600082601f83011262002b5a57600080fd5b813562002b7162002b6b8262002b1d565b62002963565b81815284602083860101111562002b8757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002bc557600080fd5b8a3567ffffffffffffffff8082111562002bde57600080fd5b62002bec8e838f0162002997565b9b5062002bfc60208e01620027c4565b9a5060408d0135995060608d0135985062002c1a60808e01620027c4565b975062002c2a60a08e01620027b2565b965062002c3a60c08e01620027c4565b955062002c4a60e08e01620027b2565b94506101008d013593506101208d013591508082111562002c6a57600080fd5b5062002c798d828e0162002b48565b9150509295989b9194979a5092959850565b60008060006060848603121562002ca157600080fd5b62002cac84620027c4565b9250602084013562002cbe816200279c565b9150604084013562002cd0816200279c565b809150509250925092565b600080600080600080600060a0888a03121562002cf757600080fd5b62002d0288620027c4565b9650602088013562002d14816200279c565b9550604088013567ffffffffffffffff8082111562002d3257600080fd5b62002d408b838c01620027d9565b909750955060608a013591508082111562002d5a57600080fd5b5062002d698a828b01620027d9565b909450925050608088013562002d7f8162002a83565b8091505092959891949750929550565b60008060006060848603121562002da557600080fd5b62002db084620027c4565b9250602084013562002dc2816200279c565b9150604084013567ffffffffffffffff81111562002ddf57600080fd5b62002ded8682870162002b48565b9150509250925092565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002ed25762002ed262002e94565b500490565b60006001820162002eec5762002eec62002eaa565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002f7857818101518382015260200162002f5e565b8381111562000d7c5750506000910152565b6000815180845262002fa481602086016020860162002f5b565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002fea9083018462002f8a565b95945050505050565b600082516200300781846020870162002f5b565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f8301126200305a57600080fd5b81516200306b62002b6b8262002b1d565b8181528460208386010111156200308157600080fd5b620009d282602083016020870162002f5b565b600080600060608486031215620030aa57600080fd5b835167ffffffffffffffff80821115620030c357600080fd5b620030d18783880162003048565b94506020860151915080821115620030e857600080fd5b50620030f78682870162003048565b925050604084015162002cd08162002a83565b6060815260006200311f606083018662002f8a565b828103602084015262003133818662002f8a565b91505060ff83166040830152949350505050565b60008262003159576200315962002e94565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006200319d6060830187896200315e565b8281036020840152620031b28186886200315e565b91505060ff831660408301529695505050505050565b60008351620031dc81846020880162002f5b565b835190830190620031f281836020880162002f5b565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c083018190526000916200324f8483018762002f8a565b925080851660e085015250509998505050505050505050565b6000602082840312156200327b57600080fd5b815167ffffffffffffffff8111156200329357600080fd5b620009d28482850162003048565b600060208284031215620032b457600080fd5b8151620029268162002a83565b600060208284031215620032d457600080fd5b5051919050565b600181815b808511156200331c57816000190482111562003300576200330062002eaa565b808516156200330e57918102915b93841c9390800290620032e0565b509250929050565b6000826200333557506001620007a4565b816200334457506000620007a4565b81600181146200335d5760028114620033685762003388565b6001915050620007a4565b60ff8411156200337c576200337c62002eaa565b50506001821b620007a4565b5060208310610133831016604e8410600b8410161715620033ad575081810a620007a4565b620033b98383620032db565b8060001904821115620033d057620033d062002eaa565b029392505050565b600062002926838362003324565b600082821015620033fb57620033fb62002eaa565b500390565b6000821982111562003416576200341662002eaa565b500190565b634e487b7160e01b600052600160045260246000fd5b600080858511156200344257600080fd5b838611156200345057600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200347957600080fd5b873562003486816200279c565b9650602088013562003498816200279c565b95506040880135945060608801359350608088013562002b008162002a83565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b8015158114620015e057600080fd5b600080600080600080600080610100898b0312156200359357600080fd5b8835620035a0816200279c565b97506020890135620035b2816200279c565b965060408901359550606089013594506080890135620035d28162003566565b935060a0890135620035e48162002a83565b979a969950949793969295929450505060c08201359160e0013590565b6000602082840312156200361457600080fd5b8151620029268162003566565b60208152600062002926602083018462002f8a56fe60c06040523480156200001157600080fd5b506040516200154c3803806200154c8339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611092620004ba60003960006104690152600081816102f9015261043301526110926000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611043565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161105557611055610fd1565b506001019056fea264697066735822122048db6a6222fa164d21a8fcb1cd25d2a9e0eee016393c37dcc7b7fd638ef787c264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220a5b71a417bea46acd4ec131da2522d11df4c3b93e7a5699cc63e19824f588e4164736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001f35760003560e01c80637b6323c1116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b80637b6323c1146200045e57806381b1c17414620004835780638da5cb5b14620004bd57600080fd5b8063318aee3d116200018d5780633e19704311620001585780633e19704314620003d75780634638554914620003fc578063647c576c1462000421578063715018a6146200044657600080fd5b8063318aee3d146200030957806337883a3e14620003785780633ae05047146200039a5780633da8168214620003b257600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f6200020936600462002825565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f6200071e565b3480156200026757600080fd5b506200027f62000279366004620028b2565b62000757565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b7366004620028ee565b620007aa565b348015620002ca57600080fd5b506200020f620002dc36600462002908565b620007b9565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b5062000353620003283660046200292d565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b506027546200027f906001600160a01b031681565b348015620003a757600080fd5b50620002fa620007e5565b348015620003bf57600080fd5b506200022d620003d136600462002a15565b620008d8565b348015620003e457600080fd5b50620002fa620003f636600462002a93565b620009da565b3480156200040957600080fd5b506200020f6200041b36600462002ba4565b62000a67565b3480156200042e57600080fd5b506200020f6200044036600462002c8b565b62000c0d565b3480156200045357600080fd5b506200020f62000d82565b3480156200046b57600080fd5b506200020f6200047d36600462002ba4565b62000d98565b3480156200049057600080fd5b506200027f620004a2366004620028ee565b6024602052600090815260409020546001600160a01b031681565b348015620004ca57600080fd5b50605a546001600160a01b03166200027f565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d62000514366004620028ee565b6200121f565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002cdb565b62001264565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002d8f565b6200137b565b348015620005e957600080fd5b506200020f6200152d565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a366004620028ee565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b3660046200292d565b62001564565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007065760405162461bcd60e51b815260206004820152604760248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b62000716868686868686620015e3565b505050505050565b6027546001600160a01b031633146200074b5760405162461bcd60e51b8152600401620006fd9062002df7565b6200075562001a68565b565b60006024600084846040516020016200077292919062002e54565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b462001ac6565b608c55565b620007c362001ac6565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008cf57826001166001036200085057600181602081106200081c576200081c62002e7e565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200087d565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088a60028462002ec0565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c69062002ed7565b915050620007f0565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009cb5781600116600103620009555786818151811062000913576200091362002e7e565b60200260200101518360405160200162000937929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009a7565b828782815181106200096b576200096b62002e7e565b60200260200101516040516020016200098e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b460028362002ec0565b915080620009c28162002ed7565b915050620008e8565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a8d5760405162461bcd60e51b8152600401620006fd9062002ef3565b62000aa38a8a8a8a8a8a8a8a8a8a600162001b22565b62000ab48963ffffffff1662001dad565b6000836001600160a01b03168387898560405160240162000ad89392919062002fb8565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b0f919062002ff3565b60006040518083038185875af1925050503d806000811462000b4e576040519150601f19603f3d011682016040523d82523d6000602084013e62000b53565b606091505b505090508062000bbf5760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b6064820152608401620006fd565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bf895949392919062003011565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c2e5750600054600160ff909116105b8062000c4a5750303b15801562000c4a575060005460ff166001145b62000caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006fd565b6000805460ff19166001179055801562000cd3576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d3562001def565b801562000d7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8c62001ac6565b62000755600062001e62565b60225460ff161562000dbe5760405162461bcd60e51b8152600401620006fd9062002ef3565b62000dd48a8a8a8a8a8a8a8a8a8a600062001b22565b62000de58963ffffffff1662001dad565b6001600160a01b03851662000eda57604080516000808252602082019092526001600160a01b03851690849060405162000e20919062002ff3565b60006040518083038185875af1925050503d806000811462000e5f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e64565b606091505b505090508062000ed35760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b6064820152608401620006fd565b50620011d2565b60225463ffffffff61010090910481169087160362000f0f5762000f096001600160a01b038616848462001eb4565b620011d2565b6000868660405160200162000f2692919062002e54565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200116a5760008060008580602001905181019062000f78919062003094565b92509250925060008584848460405162000f92906200278e565b62000fa0939291906200310a565b8190604051809103906000f590508015801562000fc1573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f1990604401600060405180830381600087803b1580156200101157600080fd5b505af115801562001026573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620011589392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011cf565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f1990604401600060405180830381600087803b158015620011b557600080fd5b505af1158015620011ca573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200120b95949392919062003011565b60405180910390a150505050505050505050565b600080620012306101008462002ec0565b90506000620012426101008562003147565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200127c92919062002e54565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012af906200278e565b601f1982820381018352601f909101166040819052620012dc908d908d908d908d908d9060200162003187565b60408051601f1981840301815290829052620012fc9291602001620031c8565b604051602081830303815290604052805190602001206040516020016200135594939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013a15760405162461bcd60e51b8152600401620006fd9062002ef3565b60225463ffffffff610100909104811690841603620014295760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c460000006064820152608401620006fd565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff1633868634876021546040516200147d989796959493929190620031fb565b60405180910390a1620014ba620014b46001602260019054906101000a900463ffffffff16338787348880519060200120620009da565b62001f1e565b6026546001600160a01b03166333d6247d620014d5620007e5565b6040518263ffffffff1660e01b8152600401620014f491815260200190565b600060405180830381600087803b1580156200150f57600080fd5b505af115801562001524573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b031633146200155a5760405162461bcd60e51b8152600401620006fd9062002df7565b620007556200206a565b6200156e62001ac6565b6001600160a01b038116620015d55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006fd565b620015e08162001e62565b50565b60225460ff1615620016095760405162461bcd60e51b8152600401620006fd9062002ef3565b60225463ffffffff610100909104811690861603620016915760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c4600000000006064820152608401620006fd565b60008060606001600160a01b03891662001728578534146200171e576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c55456064820152608401620006fd565b6000915062001988565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620017e557604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac90604401600060405180830381600087803b158015620017b857600080fd5b505af1158015620017cd573d6000803e3d6000fd5b50505050806020015193508060000151925062001986565b8415620017fa57620017fa8a88888862002119565b620018116001600160a01b038b1633308a62002541565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001868573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001892919081019062003268565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620018d1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018fb919081019062003268565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200193a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019609190620032a1565b60405160200162001974939291906200310a565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b87602154604051620019ca989796959493929190620031fb565b60405180910390a1620019ef620014b4600084868c8c8c8880519060200120620009da565b6026546001600160a01b03166333d6247d62001a0a620007e5565b6040518263ffffffff1660e01b815260040162001a2991815260200190565b600060405180830381600087803b15801562001a4457600080fd5b505af115801562001a59573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001a8e5760405162461bcd60e51b8152600401620006fd9062002ef3565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006fd565b62001b338a63ffffffff166200121f565b1562001b8a5760405162461bcd60e51b8152602060048201526030602482015260008051602062004b8383398151915260448201526f081053149150511657d0d3105253515160821b6064820152608401620006fd565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001bfe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c249190620032c1565b90508060000362001c8d5760405162461bcd60e51b8152602060048201526039602482015260008051602062004b8383398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c4944000000000000006064820152608401620006fd565b60225463ffffffff878116610100909204161462001d0f5760405162461bcd60e51b8152602060048201526043602482015260008051602062004b8383398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a401620006fd565b602254600090610100900463ffffffff1662001d2d57508862001d30565b50895b62001d5b62001d4c848b8b8b8b8b8b80519060200120620009da565b8e8e63ffffffff1684620008d8565b62001a595760405162461bcd60e51b815260206004820152602c602482015260008051602062004b8383398151915260448201526b0814d35517d253959053125160a21b6064820152608401620006fd565b600062001dbd6101008362002ec0565b9050600062001dcf6101008462003147565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001e5c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006fd565b62000755335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001f1990849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526200257b565b505050565b80600162001f2f60206002620033d8565b62001f3b9190620033e6565b6021541062001fa05760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b6064820152608401620006fd565b60016021600082825462001fb5919062003400565b909155505060215460005b60208110156200205f578160011660010362001ff557826001826020811062001fed5762001fed62002e7e565b015550505050565b600181602081106200200b576200200b62002e7e565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002048919062002ec0565b915080620020568162002ed7565b91505062001fc0565b5062001f196200341b565b60225460ff16620020e45760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006fd565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200215c83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200265492505050565b9050632afa533160e01b6001600160e01b0319821601620023555760008080808080806200218e896004818d62003431565b8101906200219d91906200345d565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620021df5760405162461bcd60e51b8152600401620006fd90620034b8565b6001600160a01b03861630146200220a5760405162461bcd60e51b8152600401620006fd9062003515565b8a8514620022815760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d41544348000000000000006064820152608401620006fd565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162002301919062002ff3565b6000604051808303816000865af19150503d806000811462002340576040519150601f19603f3d011682016040523d82523d6000602084013e62002345565b606091505b505050505050505050506200253a565b6001600160e01b031981166323f2ebc360e21b14620023cb5760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b6064820152608401620006fd565b600080808080808080620023e38a6004818e62003431565b810190620023f2919062003575565b97509750975097509750975097509750336001600160a01b0316886001600160a01b031614620024365760405162461bcd60e51b8152600401620006fd90620034b8565b6001600160a01b0387163014620024615760405162461bcd60e51b8152600401620006fd9062003515565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f1691620024ea919062002ff3565b6000604051808303816000865af19150503d806000811462002529576040519150601f19603f3d011682016040523d82523d6000602084013e6200252e565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d7c9085906323b872dd60e01b9060840162001ee1565b6000620025d2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166200265b9092919063ffffffff16565b80519091501562001f195780806020019051810190620025f3919062003601565b62001f195760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006fd565b6020015190565b6060620009d2848460008585600080866001600160a01b0316858760405162002685919062002ff3565b60006040518083038185875af1925050503d8060008114620026c4576040519150601f19603f3d011682016040523d82523d6000602084013e620026c9565b606091505b5091509150620026dc87838387620026e7565b979650505050505050565b606083156200275b57825160000362002753576001600160a01b0385163b620027535760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006fd565b5081620009d2565b620009d28383815115620027725781518083602001fd5b8060405162461bcd60e51b8152600401620006fd919062003621565b61154c806200363783390190565b6001600160a01b0381168114620015e057600080fd5b8035620027bf816200279c565b919050565b803563ffffffff81168114620027bf57600080fd5b60008083601f840112620027ec57600080fd5b50813567ffffffffffffffff8111156200280557600080fd5b6020830191508360208285010111156200281e57600080fd5b9250929050565b60008060008060008060a087890312156200283f57600080fd5b86356200284c816200279c565b95506200285c60208801620027c4565b945060408701356200286e816200279c565b935060608701359250608087013567ffffffffffffffff8111156200289257600080fd5b620028a089828a01620027d9565b979a9699509497509295939492505050565b60008060408385031215620028c657600080fd5b620028d183620027c4565b91506020830135620028e3816200279c565b809150509250929050565b6000602082840312156200290157600080fd5b5035919050565b6000602082840312156200291b57600080fd5b6200292682620027c4565b9392505050565b6000602082840312156200294057600080fd5b813562002926816200279c565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200298f576200298f6200294d565b604052919050565b600082601f830112620029a957600080fd5b8135602067ffffffffffffffff821115620029c857620029c86200294d565b8160051b620029d982820162002963565b9283528481018201928281019087851115620029f457600080fd5b83870192505b84831015620026dc57823582529183019190830190620029fa565b6000806000806080858703121562002a2c57600080fd5b84359350602085013567ffffffffffffffff8082111562002a4c57600080fd5b62002a5a8883890162002997565b945060408701359150808216821462002a7257600080fd5b509396929550929360600135925050565b60ff81168114620015e057600080fd5b600080600080600080600060e0888a03121562002aaf57600080fd5b873562002abc8162002a83565b965062002acc60208901620027c4565b9550604088013562002ade816200279c565b945062002aee60608901620027c4565b9350608088013562002b00816200279c565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002b3a5762002b3a6200294d565b50601f01601f191660200190565b600082601f83011262002b5a57600080fd5b813562002b7162002b6b8262002b1d565b62002963565b81815284602083860101111562002b8757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002bc557600080fd5b8a3567ffffffffffffffff8082111562002bde57600080fd5b62002bec8e838f0162002997565b9b5062002bfc60208e01620027c4565b9a5060408d0135995060608d0135985062002c1a60808e01620027c4565b975062002c2a60a08e01620027b2565b965062002c3a60c08e01620027c4565b955062002c4a60e08e01620027b2565b94506101008d013593506101208d013591508082111562002c6a57600080fd5b5062002c798d828e0162002b48565b9150509295989b9194979a5092959850565b60008060006060848603121562002ca157600080fd5b62002cac84620027c4565b9250602084013562002cbe816200279c565b9150604084013562002cd0816200279c565b809150509250925092565b600080600080600080600060a0888a03121562002cf757600080fd5b62002d0288620027c4565b9650602088013562002d14816200279c565b9550604088013567ffffffffffffffff8082111562002d3257600080fd5b62002d408b838c01620027d9565b909750955060608a013591508082111562002d5a57600080fd5b5062002d698a828b01620027d9565b909450925050608088013562002d7f8162002a83565b8091505092959891949750929550565b60008060006060848603121562002da557600080fd5b62002db084620027c4565b9250602084013562002dc2816200279c565b9150604084013567ffffffffffffffff81111562002ddf57600080fd5b62002ded8682870162002b48565b9150509250925092565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002ed25762002ed262002e94565b500490565b60006001820162002eec5762002eec62002eaa565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002f7857818101518382015260200162002f5e565b8381111562000d7c5750506000910152565b6000815180845262002fa481602086016020860162002f5b565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002fea9083018462002f8a565b95945050505050565b600082516200300781846020870162002f5b565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f8301126200305a57600080fd5b81516200306b62002b6b8262002b1d565b8181528460208386010111156200308157600080fd5b620009d282602083016020870162002f5b565b600080600060608486031215620030aa57600080fd5b835167ffffffffffffffff80821115620030c357600080fd5b620030d18783880162003048565b94506020860151915080821115620030e857600080fd5b50620030f78682870162003048565b925050604084015162002cd08162002a83565b6060815260006200311f606083018662002f8a565b828103602084015262003133818662002f8a565b91505060ff83166040830152949350505050565b60008262003159576200315962002e94565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006200319d6060830187896200315e565b8281036020840152620031b28186886200315e565b91505060ff831660408301529695505050505050565b60008351620031dc81846020880162002f5b565b835190830190620031f281836020880162002f5b565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c083018190526000916200324f8483018762002f8a565b925080851660e085015250509998505050505050505050565b6000602082840312156200327b57600080fd5b815167ffffffffffffffff8111156200329357600080fd5b620009d28482850162003048565b600060208284031215620032b457600080fd5b8151620029268162002a83565b600060208284031215620032d457600080fd5b5051919050565b600181815b808511156200331c57816000190482111562003300576200330062002eaa565b808516156200330e57918102915b93841c9390800290620032e0565b509250929050565b6000826200333557506001620007a4565b816200334457506000620007a4565b81600181146200335d5760028114620033685762003388565b6001915050620007a4565b60ff8411156200337c576200337c62002eaa565b50506001821b620007a4565b5060208310610133831016604e8410600b8410161715620033ad575081810a620007a4565b620033b98383620032db565b8060001904821115620033d057620033d062002eaa565b029392505050565b600062002926838362003324565b600082821015620033fb57620033fb62002eaa565b500390565b6000821982111562003416576200341662002eaa565b500190565b634e487b7160e01b600052600160045260246000fd5b600080858511156200344257600080fd5b838611156200345057600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200347957600080fd5b873562003486816200279c565b9650602088013562003498816200279c565b95506040880135945060608801359350608088013562002b008162002a83565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b8015158114620015e057600080fd5b600080600080600080600080610100898b0312156200359357600080fd5b8835620035a0816200279c565b97506020890135620035b2816200279c565b965060408901359550606089013594506080890135620035d28162003566565b935060a0890135620035e48162002a83565b979a969950949793969295929450505060c08201359160e0013590565b6000602082840312156200361457600080fd5b8151620029268162003566565b60208152600062002926602083018462002f8a56fe60c06040523480156200001157600080fd5b506040516200154c3803806200154c8339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611092620004ba60003960006104690152600081816102f9015261043301526110926000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611043565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161105557611055610fd1565b506001019056fea264697066735822122048db6a6222fa164d21a8fcb1cd25d2a9e0eee016393c37dcc7b7fd638ef787c264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220a5b71a417bea46acd4ec131da2522d11df4c3b93e7a5699cc63e19824f588e4164736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/TokenWrapped.json b/compiled-contracts/TokenWrapped.json index 4e403945f..f1437f1b1 100644 --- a/compiled-contracts/TokenWrapped.json +++ b/compiled-contracts/TokenWrapped.json @@ -220,13 +220,7 @@ } ], "name": "burn", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], + "outputs": [], "stateMutability": "nonpayable", "type": "function" }, @@ -318,13 +312,7 @@ } ], "name": "mint", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], + "outputs": [], "stateMutability": "nonpayable", "type": "function" }, @@ -483,8 +471,8 @@ "type": "function" } ], - "bytecode": "0x60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea264697066735822122070fae8b3daebe7fc894d50296739b7a26e638f37239109230c7dfd552785f2a264736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea264697066735822122070fae8b3daebe7fc894d50296739b7a26e638f37239109230c7dfd552785f2a264736f6c634300080f0033", + "bytecode": "0x60c06040523480156200001157600080fd5b506040516200154c3803806200154c8339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611092620004ba60003960006104690152600081816102f9015261043301526110926000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611043565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161105557611055610fd1565b506001019056fea264697066735822122048db6a6222fa164d21a8fcb1cd25d2a9e0eee016393c37dcc7b7fd638ef787c264736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611043565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161105557611055610fd1565b506001019056fea264697066735822122048db6a6222fa164d21a8fcb1cd25d2a9e0eee016393c37dcc7b7fd638ef787c264736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/lib/TokenWrapped.sol b/contracts/lib/TokenWrapped.sol index cbad487fb..49188de84 100644 --- a/contracts/lib/TokenWrapped.sol +++ b/contracts/lib/TokenWrapped.sol @@ -55,20 +55,12 @@ contract TokenWrapped is ERC20 { _DEPLOYMENT_DOMAIN_SEPARATOR = _calculateDomainSeparator(block.chainid); } - function mint( - address to, - uint256 value - ) external onlyBridge returns (bool) { + function mint(address to, uint256 value) external onlyBridge { _mint(to, value); - return true; } - function burn( - address account, - uint256 value - ) external onlyBridge returns (bool) { + function burn(address account, uint256 value) external onlyBridge { _burn(account, value); - return true; } function decimals() public view virtual override returns (uint8) { diff --git a/deployment/genesis.json b/deployment/genesis.json index f53185a20..08d8deab5 100644 --- a/deployment/genesis.json +++ b/deployment/genesis.json @@ -1,11 +1,11 @@ { - "root": "0xb6271a9a7f9bfe7ff8259ea58750577b795c13d2d1ce09b61da0878bc4832ba9", + "root": "0x09c4d69035c2192aeed1facf87975a472e7bfeaddf9d3fa78aa58d120f9df127", "genesis": [ { "balance": "200000000000000000000000000", "nonce": "1", "address": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988", - "bytecode": "0x608060405260043610620001675760003560e01c80637b6323c111620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b80637b6323c1146200037057806381b1c17414620003955780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b806337883a3e116200011e57806337883a3e14620002a25780633ae0504714620002c45780633da8168214620002dc5780633e1970431462000301578063463855491462000326578063647c576c146200034b57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002470565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009d2565b348015620001db57600080fd5b50620001f3620001ed366004620024fd565b62000a0b565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002539565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b50602754620001f3906001600160a01b031681565b348015620002d157600080fd5b506200022462000a5e565b348015620002e957600080fd5b50620001a1620002fb36600462002628565b62000b51565b3480156200030e57600080fd5b506200022462000320366004620026a6565b62000c53565b3480156200033357600080fd5b506200018362000345366004620027b7565b62000ce0565b3480156200035857600080fd5b50620001836200036a3660046200289e565b62000e86565b3480156200037d57600080fd5b50620001836200038f366004620027b7565b62000fe5565b348015620003a257600080fd5b50620001f3620003b4366004620028ee565b6024602052600090815260409020546001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028ee565b62001492565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002908565b620014d7565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620029bc565b620015ee565b348015620004c357600080fd5b50620001836200179a565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028ee565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a24565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008ec565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074957604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562000710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000736919062002a9b565b50602081015181519094509250620008ea565b84156200075e576200075e8a888888620017d1565b620007756001600160a01b038b1633308a62001bf9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f6919081019062002b36565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000835573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085f919081019062002b36565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c4919062002b6f565b604051602001620008d89392919062002bbd565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092e98979695949392919062002bfa565b60405180910390a16200095962000953600084868c8c8c888051906020012062000c53565b62001c66565b6026546001600160a01b03166333d6247d6200097462000a5e565b6040518263ffffffff1660e01b81526004016200099391815260200190565b600060405180830381600087803b158015620009ae57600080fd5b505af1158015620009c3573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ff5760405162461bcd60e51b8152600401620005539062002c67565b62000a0962001db7565b565b600060246000848460405160200162000a2692919062002cc4565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b48578260011660010362000ac9576001816020811062000a955762000a9562002cee565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af6565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0360028462002d30565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3f9062002d47565b91505062000a69565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c44578160011660010362000bce5786818151811062000b8c5762000b8c62002cee565b60200260200101518360405160200162000bb0929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c20565b8287828151811062000be45762000be462002cee565b602002602001015160405160200162000c07929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2d60028362002d30565b91508062000c3b8162002d47565b91505062000b61565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d065760405162461bcd60e51b8152600401620005539062002a24565b62000d1c8a8a8a8a8a8a8a8a8a8a600162001e15565b62000d2d8963ffffffff16620020a0565b6000836001600160a01b03168387898560405160240162000d519392919062002d63565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d88919062002d9e565b60006040518083038185875af1925050503d806000811462000dc7576040519150601f19603f3d011682016040523d82523d6000602084013e62000dcc565b606091505b505090508062000e385760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e7195949392919062002dbc565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea75750600054600160ff909116105b8062000ec35750303b15801562000ec3575060005460ff166001145b62000f285760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f4c576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff16156200100b5760405162461bcd60e51b8152600401620005539062002a24565b620010218a8a8a8a8a8a8a8a8a8a600062001e15565b620010328963ffffffff16620020a0565b6001600160a01b0385166200112757604080516000808252602082019092526001600160a01b0385169084906040516200106d919062002d9e565b60006040518083038185875af1925050503d8060008114620010ac576040519150601f19603f3d011682016040523d82523d6000602084013e620010b1565b606091505b5050905080620011205760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b5062001445565b60225463ffffffff6101009091048116908716036200115c57620011566001600160a01b0386168484620020e2565b62001445565b600086866040516020016200117392919062002cc4565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013ca57600080600085806020019051810190620011c5919062002df3565b925092509250600085848484604051620011df90620023d6565b620011ed9392919062002bbd565b8190604051809103906000f59050801580156200120e573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001263573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001289919062002a9b565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013b89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001442565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200141a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001440919062002a9b565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200147e95949392919062002dbc565b60405180910390a150505050505050505050565b600080620014a36101008462002d30565b90506000620014b56101008562002e69565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014ef92919062002cc4565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200152290620023d6565b601f1982820381018352601f9091011660408190526200154f908d908d908d908d908d9060200162002ea9565b60408051601f19818403018152908290526200156f929160200162002eea565b60405160208183030381529060405280519060200120604051602001620015c894939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620016145760405162461bcd60e51b8152600401620005539062002a24565b60225463ffffffff6101009091048116908416036200169c5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016f098979695949392919062002bfa565b60405180910390a162001727620009536001602260019054906101000a900463ffffffff1633878734888051906020012062000c53565b6026546001600160a01b03166333d6247d6200174262000a5e565b6040518263ffffffff1660e01b81526004016200176191815260200190565b600060405180830381600087803b1580156200177c57600080fd5b505af115801562001791573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017c75760405162461bcd60e51b8152600401620005539062002c67565b62000a0962002114565b60006200181483838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021c392505050565b9050632afa533160e01b6001600160e01b031982160162001a0d57600080808080808062001846896004818d62002f1d565b81019062001855919062002f49565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018975760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b0386163014620018c25760405162461bcd60e51b8152600401620005539062003001565b8a8514620019395760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620019b9919062002d9e565b6000604051808303816000865af19150503d8060008114620019f8576040519150601f19603f3d011682016040523d82523d6000602084013e620019fd565b606091505b5050505050505050505062001bf2565b6001600160e01b031981166323f2ebc360e21b1462001a835760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a9b8a6004818e62002f1d565b81019062001aaa919062003052565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001aee5760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b038716301462001b195760405162461bcd60e51b8152600401620005539062003001565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001ba2919062002d9e565b6000604051808303816000865af19150503d806000811462001be1576040519150601f19603f3d011682016040523d82523d6000602084013e62001be6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdf9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021ca565b80600162001c7760206002620031db565b62001c839190620031e9565b6021541062001ce85760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cfd919062003203565b909155505060215460005b602081101562001da7578160011660010362001d3d57826001826020811062001d355762001d3562002cee565b015550505050565b6001816020811062001d535762001d5362002cee565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d90919062002d30565b91508062001d9e8162002d47565b91505062001d08565b5062001db26200321e565b505050565b60225460ff161562001ddd5760405162461bcd60e51b8152600401620005539062002a24565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001e268a63ffffffff1662001492565b1562001e7d5760405162461bcd60e51b81526020600482015260306024820152600080516020620047bb83398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ef1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f17919062003234565b90508060000362001f805760405162461bcd60e51b81526020600482015260396024820152600080516020620047bb83398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff8781166101009092041614620020025760405162461bcd60e51b81526020600482015260436024820152600080516020620047bb83398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff166200202057508862002023565b50895b6200204e6200203f848b8b8b8b8b8b8051906020012062000c53565b8e8e63ffffffff168462000b51565b620009c35760405162461bcd60e51b815260206004820152602c6024820152600080516020620047bb83398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020b06101008362002d30565b90506000620020c26101008462002e69565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001db290849063a9059cbb60e01b9060640162001c2e565b60225460ff166200218e5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002221826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022a39092919063ffffffff16565b80519091501562001db2578080602001905181019062002242919062002a9b565b62001db25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c4b848460008585600080866001600160a01b03168587604051620022cd919062002d9e565b60006040518083038185875af1925050503d80600081146200230c576040519150601f19603f3d011682016040523d82523d6000602084013e62002311565b606091505b509150915062002324878383876200232f565b979650505050505050565b60608315620023a35782516000036200239b576001600160a01b0385163b6200239b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c4b565b62000c4b8383815115620023ba5781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200324e565b611557806200326483390190565b6001600160a01b0381168114620023fa57600080fd5b50565b80356200240a81620023e4565b919050565b803563ffffffff811681146200240a57600080fd5b60008083601f8401126200243757600080fd5b50813567ffffffffffffffff8111156200245057600080fd5b6020830191508360208285010111156200246957600080fd5b9250929050565b60008060008060008060a087890312156200248a57600080fd5b86356200249781620023e4565b9550620024a7602088016200240f565b94506040870135620024b981620023e4565b935060608701359250608087013567ffffffffffffffff811115620024dd57600080fd5b620024eb89828a0162002424565b979a9699509497509295939492505050565b600080604083850312156200251157600080fd5b6200251c836200240f565b915060208301356200252e81620023e4565b809150509250929050565b6000602082840312156200254c57600080fd5b81356200255981620023e4565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620025a257620025a262002560565b604052919050565b600082601f830112620025bc57600080fd5b8135602067ffffffffffffffff821115620025db57620025db62002560565b8160051b620025ec82820162002576565b92835284810182019282810190878511156200260757600080fd5b83870192505b8483101562002324578235825291830191908301906200260d565b600080600080608085870312156200263f57600080fd5b84359350602085013567ffffffffffffffff808211156200265f57600080fd5b6200266d88838901620025aa565b94506040870135915080821682146200268557600080fd5b509396929550929360600135925050565b60ff81168114620023fa57600080fd5b600080600080600080600060e0888a031215620026c257600080fd5b8735620026cf8162002696565b9650620026df602089016200240f565b95506040880135620026f181620023e4565b945062002701606089016200240f565b935060808801356200271381620023e4565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200274d576200274d62002560565b50601f01601f191660200190565b600082601f8301126200276d57600080fd5b8135620027846200277e8262002730565b62002576565b8181528460208386010111156200279a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027d857600080fd5b8a3567ffffffffffffffff80821115620027f157600080fd5b620027ff8e838f01620025aa565b9b506200280f60208e016200240f565b9a5060408d0135995060608d013598506200282d60808e016200240f565b97506200283d60a08e01620023fd565b96506200284d60c08e016200240f565b95506200285d60e08e01620023fd565b94506101008d013593506101208d01359150808211156200287d57600080fd5b506200288c8d828e016200275b565b9150509295989b9194979a5092959850565b600080600060608486031215620028b457600080fd5b620028bf846200240f565b92506020840135620028d181620023e4565b91506040840135620028e381620023e4565b809150509250925092565b6000602082840312156200290157600080fd5b5035919050565b600080600080600080600060a0888a0312156200292457600080fd5b6200292f886200240f565b965060208801356200294181620023e4565b9550604088013567ffffffffffffffff808211156200295f57600080fd5b6200296d8b838c0162002424565b909750955060608a01359150808211156200298757600080fd5b50620029968a828b0162002424565b9094509250506080880135620029ac8162002696565b8091505092959891949750929550565b600080600060608486031215620029d257600080fd5b620029dd846200240f565b92506020840135620029ef81620023e4565b9150604084013567ffffffffffffffff81111562002a0c57600080fd5b62002a1a868287016200275b565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b8015158114620023fa57600080fd5b60006020828403121562002aae57600080fd5b8151620025598162002a8c565b60005b8381101562002ad857818101518382015260200162002abe565b8381111562000fdf5750506000910152565b600082601f83011262002afc57600080fd5b815162002b0d6200277e8262002730565b81815284602083860101111562002b2357600080fd5b62000c4b82602083016020870162002abb565b60006020828403121562002b4957600080fd5b815167ffffffffffffffff81111562002b6157600080fd5b62000c4b8482850162002aea565b60006020828403121562002b8257600080fd5b8151620025598162002696565b6000815180845262002ba981602086016020860162002abb565b601f01601f19169290920160200192915050565b60608152600062002bd2606083018662002b8f565b828103602084015262002be6818662002b8f565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002c4e8483018762002b8f565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002d425762002d4262002d04565b500490565b60006001820162002d5c5762002d5c62002d1a565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d959083018462002b8f565b95945050505050565b6000825162002db281846020870162002abb565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002e0957600080fd5b835167ffffffffffffffff8082111562002e2257600080fd5b62002e308783880162002aea565b9450602086015191508082111562002e4757600080fd5b5062002e568682870162002aea565b9250506040840151620028e38162002696565b60008262002e7b5762002e7b62002d04565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002ebf60608301878962002e80565b828103602084015262002ed481868862002e80565b91505060ff831660408301529695505050505050565b6000835162002efe81846020880162002abb565b83519083019062002f1481836020880162002abb565b01949350505050565b6000808585111562002f2e57600080fd5b8386111562002f3c57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f6557600080fd5b873562002f7281620023e4565b9650602088013562002f8481620023e4565b955060408801359450606088013593506080880135620027138162002696565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b0312156200307057600080fd5b88356200307d81620023e4565b975060208901356200308f81620023e4565b965060408901359550606089013594506080890135620030af8162002a8c565b935060a0890135620030c18162002696565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200311f57816000190482111562003103576200310362002d1a565b808516156200311157918102915b93841c9390800290620030e3565b509250929050565b600082620031385750600162000a58565b81620031475750600062000a58565b81600181146200316057600281146200316b576200318b565b600191505062000a58565b60ff8411156200317f576200317f62002d1a565b50506001821b62000a58565b5060208310610133831016604e8410600b8410161715620031b0575081810a62000a58565b620031bc8383620030de565b8060001904821115620031d357620031d362002d1a565b029392505050565b600062002559838362003127565b600082821015620031fe57620031fe62002d1a565b500390565b6000821982111562003219576200321962002d1a565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200324757600080fd5b5051919050565b60208152600062002559602083018462002b8f56fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea264697066735822122070fae8b3daebe7fc894d50296739b7a26e638f37239109230c7dfd552785f2a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212208fde18b5efa27a9c6a9604bbebb39629f3a307cad6b8fab402a033ff62a94bfe64736f6c634300080f0033", + "bytecode": "0x608060405260043610620001675760003560e01c80637b6323c111620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b80637b6323c1146200037057806381b1c17414620003955780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b806337883a3e116200011e57806337883a3e14620002a25780633ae0504714620002c45780633da8168214620002dc5780633e1970431462000301578063463855491462000326578063647c576c146200034b57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002439565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009c1565b348015620001db57600080fd5b50620001f3620001ed366004620024c6565b620009fa565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002502565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b50602754620001f3906001600160a01b031681565b348015620002d157600080fd5b506200022462000a4d565b348015620002e957600080fd5b50620001a1620002fb366004620025f1565b62000b40565b3480156200030e57600080fd5b5062000224620003203660046200266f565b62000c42565b3480156200033357600080fd5b50620001836200034536600462002780565b62000ccf565b3480156200035857600080fd5b50620001836200036a36600462002867565b62000e75565b3480156200037d57600080fd5b50620001836200038f36600462002780565b62000fd4565b348015620003a257600080fd5b50620001f3620003b4366004620028b7565b6024602052600090815260409020546001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028b7565b6200145b565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d366004620028d1565b620014a0565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b036600462002985565b620015b7565b348015620004c357600080fd5b506200018362001763565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028b7565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b81526004016200055390620029ed565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008db565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200073857604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac90604401600060405180830381600087803b1580156200070b57600080fd5b505af115801562000720573d6000803e3d6000fd5b505050508060200151935080600001519250620008d9565b84156200074d576200074d8a8888886200179a565b620007646001600160a01b038b1633308a62001bc2565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007bb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007e5919081019062002ad0565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000824573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200084e919081019062002ad0565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200088d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008b3919062002b09565b604051602001620008c79392919062002b57565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200091d98979695949392919062002b94565b60405180910390a16200094862000942600084868c8c8c888051906020012062000c42565b62001c2f565b6026546001600160a01b03166333d6247d6200096362000a4d565b6040518263ffffffff1660e01b81526004016200098291815260200190565b600060405180830381600087803b1580156200099d57600080fd5b505af1158015620009b2573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ee5760405162461bcd60e51b8152600401620005539062002c01565b620009f862001d80565b565b600060246000848460405160200162000a1592919062002c5e565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b37578260011660010362000ab8576001816020811062000a845762000a8462002c88565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000ae5565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000af260028462002cca565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b2e9062002ce1565b91505062000a58565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c33578160011660010362000bbd5786818151811062000b7b5762000b7b62002c88565b60200260200101518360405160200162000b9f929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c0f565b8287828151811062000bd35762000bd362002c88565b602002602001015160405160200162000bf6929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c1c60028362002cca565b91508062000c2a8162002ce1565b91505062000b50565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000cf55760405162461bcd60e51b81526004016200055390620029ed565b62000d0b8a8a8a8a8a8a8a8a8a8a600162001dde565b62000d1c8963ffffffff1662002069565b6000836001600160a01b03168387898560405160240162000d409392919062002cfd565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d77919062002d38565b60006040518083038185875af1925050503d806000811462000db6576040519150601f19603f3d011682016040523d82523d6000602084013e62000dbb565b606091505b505090508062000e275760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e6095949392919062002d56565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000e965750600054600160ff909116105b8062000eb25750303b15801562000eb2575060005460ff166001145b62000f175760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f3b576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fce576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff161562000ffa5760405162461bcd60e51b81526004016200055390620029ed565b620010108a8a8a8a8a8a8a8a8a8a600062001dde565b620010218963ffffffff1662002069565b6001600160a01b0385166200111657604080516000808252602082019092526001600160a01b0385169084906040516200105c919062002d38565b60006040518083038185875af1925050503d80600081146200109b576040519150601f19603f3d011682016040523d82523d6000602084013e620010a0565b606091505b50509050806200110f5760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b506200140e565b60225463ffffffff6101009091048116908716036200114b57620011456001600160a01b0386168484620020ab565b6200140e565b600086866040516020016200116292919062002c5e565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013a657600080600085806020019051810190620011b4919062002d8d565b925092509250600085848484604051620011ce906200239f565b620011dc9392919062002b57565b8190604051809103906000f5905080158015620011fd573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f1990604401600060405180830381600087803b1580156200124d57600080fd5b505af115801562001262573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013949392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200140b565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f1990604401600060405180830381600087803b158015620013f157600080fd5b505af115801562001406573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200144795949392919062002d56565b60405180910390a150505050505050505050565b6000806200146c6101008462002cca565b905060006200147e6101008562002e03565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014b892919062002c5e565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014eb906200239f565b601f1982820381018352601f90910116604081905262001518908d908d908d908d908d9060200162002e43565b60408051601f198184030181529082905262001538929160200162002e84565b604051602081830303815290604052805190602001206040516020016200159194939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015dd5760405162461bcd60e51b81526004016200055390620029ed565b60225463ffffffff610100909104811690841603620016655760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016b998979695949392919062002b94565b60405180910390a1620016f0620009426001602260019054906101000a900463ffffffff1633878734888051906020012062000c42565b6026546001600160a01b03166333d6247d6200170b62000a4d565b6040518263ffffffff1660e01b81526004016200172a91815260200190565b600060405180830381600087803b1580156200174557600080fd5b505af11580156200175a573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017905760405162461bcd60e51b8152600401620005539062002c01565b620009f8620020dd565b6000620017dd83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200218c92505050565b9050632afa533160e01b6001600160e01b0319821601620019d65760008080808080806200180f896004818d62002eb7565b8101906200181e919062002ee3565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018605760405162461bcd60e51b8152600401620005539062002f3e565b6001600160a01b03861630146200188b5760405162461bcd60e51b8152600401620005539062002f9b565b8a8514620019025760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162001982919062002d38565b6000604051808303816000865af19150503d8060008114620019c1576040519150601f19603f3d011682016040523d82523d6000602084013e620019c6565b606091505b5050505050505050505062001bbb565b6001600160e01b031981166323f2ebc360e21b1462001a4c5760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a648a6004818e62002eb7565b81019062001a73919062002ffb565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001ab75760405162461bcd60e51b8152600401620005539062002f3e565b6001600160a01b038716301462001ae25760405162461bcd60e51b8152600401620005539062002f9b565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001b6b919062002d38565b6000604051808303816000865af19150503d806000811462001baa576040519150601f19603f3d011682016040523d82523d6000602084013e62001baf565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fce9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262002193565b80600162001c406020600262003184565b62001c4c919062003192565b6021541062001cb15760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cc69190620031ac565b909155505060215460005b602081101562001d70578160011660010362001d0657826001826020811062001cfe5762001cfe62002c88565b015550505050565b6001816020811062001d1c5762001d1c62002c88565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d59919062002cca565b91508062001d678162002ce1565b91505062001cd1565b5062001d7b620031c7565b505050565b60225460ff161562001da65760405162461bcd60e51b81526004016200055390620029ed565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001def8a63ffffffff166200145b565b1562001e465760405162461bcd60e51b815260206004820152603060248201526000805160206200477983398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001eba573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ee09190620031dd565b90508060000362001f495760405162461bcd60e51b815260206004820152603960248201526000805160206200477983398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff878116610100909204161462001fcb5760405162461bcd60e51b815260206004820152604360248201526000805160206200477983398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff1662001fe957508862001fec565b50895b6200201762002008848b8b8b8b8b8b8051906020012062000c42565b8e8e63ffffffff168462000b40565b620009b25760405162461bcd60e51b815260206004820152602c60248201526000805160206200477983398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020796101008362002cca565b905060006200208b6101008462002e03565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001d7b90849063a9059cbb60e01b9060640162001bf7565b60225460ff16620021575760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b6000620021ea826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166200226c9092919063ffffffff16565b80519091501562001d7b57808060200190518101906200220b9190620031f7565b62001d7b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c3a848460008585600080866001600160a01b0316858760405162002296919062002d38565b60006040518083038185875af1925050503d8060008114620022d5576040519150601f19603f3d011682016040523d82523d6000602084013e620022da565b606091505b5091509150620022ed87838387620022f8565b979650505050505050565b606083156200236c57825160000362002364576001600160a01b0385163b620023645760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c3a565b62000c3a8383815115620023835781518083602001fd5b8060405162461bcd60e51b815260040162000553919062003217565b61154c806200322d83390190565b6001600160a01b0381168114620023c357600080fd5b50565b8035620023d381620023ad565b919050565b803563ffffffff81168114620023d357600080fd5b60008083601f8401126200240057600080fd5b50813567ffffffffffffffff8111156200241957600080fd5b6020830191508360208285010111156200243257600080fd5b9250929050565b60008060008060008060a087890312156200245357600080fd5b86356200246081620023ad565b95506200247060208801620023d8565b945060408701356200248281620023ad565b935060608701359250608087013567ffffffffffffffff811115620024a657600080fd5b620024b489828a01620023ed565b979a9699509497509295939492505050565b60008060408385031215620024da57600080fd5b620024e583620023d8565b91506020830135620024f781620023ad565b809150509250929050565b6000602082840312156200251557600080fd5b81356200252281620023ad565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200256b576200256b62002529565b604052919050565b600082601f8301126200258557600080fd5b8135602067ffffffffffffffff821115620025a457620025a462002529565b8160051b620025b58282016200253f565b9283528481018201928281019087851115620025d057600080fd5b83870192505b84831015620022ed57823582529183019190830190620025d6565b600080600080608085870312156200260857600080fd5b84359350602085013567ffffffffffffffff808211156200262857600080fd5b620026368883890162002573565b94506040870135915080821682146200264e57600080fd5b509396929550929360600135925050565b60ff81168114620023c357600080fd5b600080600080600080600060e0888a0312156200268b57600080fd5b873562002698816200265f565b9650620026a860208901620023d8565b95506040880135620026ba81620023ad565b9450620026ca60608901620023d8565b93506080880135620026dc81620023ad565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002716576200271662002529565b50601f01601f191660200190565b600082601f8301126200273657600080fd5b81356200274d6200274782620026f9565b6200253f565b8181528460208386010111156200276357600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027a157600080fd5b8a3567ffffffffffffffff80821115620027ba57600080fd5b620027c88e838f0162002573565b9b50620027d860208e01620023d8565b9a5060408d0135995060608d01359850620027f660808e01620023d8565b97506200280660a08e01620023c6565b96506200281660c08e01620023d8565b95506200282660e08e01620023c6565b94506101008d013593506101208d01359150808211156200284657600080fd5b50620028558d828e0162002724565b9150509295989b9194979a5092959850565b6000806000606084860312156200287d57600080fd5b6200288884620023d8565b925060208401356200289a81620023ad565b91506040840135620028ac81620023ad565b809150509250925092565b600060208284031215620028ca57600080fd5b5035919050565b600080600080600080600060a0888a031215620028ed57600080fd5b620028f888620023d8565b965060208801356200290a81620023ad565b9550604088013567ffffffffffffffff808211156200292857600080fd5b620029368b838c01620023ed565b909750955060608a01359150808211156200295057600080fd5b506200295f8a828b01620023ed565b909450925050608088013562002975816200265f565b8091505092959891949750929550565b6000806000606084860312156200299b57600080fd5b620029a684620023d8565b92506020840135620029b881620023ad565b9150604084013567ffffffffffffffff811115620029d557600080fd5b620029e38682870162002724565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002a7257818101518382015260200162002a58565b8381111562000fce5750506000910152565b600082601f83011262002a9657600080fd5b815162002aa76200274782620026f9565b81815284602083860101111562002abd57600080fd5b62000c3a82602083016020870162002a55565b60006020828403121562002ae357600080fd5b815167ffffffffffffffff81111562002afb57600080fd5b62000c3a8482850162002a84565b60006020828403121562002b1c57600080fd5b815162002522816200265f565b6000815180845262002b4381602086016020860162002a55565b601f01601f19169290920160200192915050565b60608152600062002b6c606083018662002b29565b828103602084015262002b80818662002b29565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002be88483018762002b29565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002cdc5762002cdc62002c9e565b500490565b60006001820162002cf65762002cf662002cb4565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d2f9083018462002b29565b95945050505050565b6000825162002d4c81846020870162002a55565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002da357600080fd5b835167ffffffffffffffff8082111562002dbc57600080fd5b62002dca8783880162002a84565b9450602086015191508082111562002de157600080fd5b5062002df08682870162002a84565b9250506040840151620028ac816200265f565b60008262002e155762002e1562002c9e565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e5960608301878962002e1a565b828103602084015262002e6e81868862002e1a565b91505060ff831660408301529695505050505050565b6000835162002e9881846020880162002a55565b83519083019062002eae81836020880162002a55565b01949350505050565b6000808585111562002ec857600080fd5b8386111562002ed657600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002eff57600080fd5b873562002f0c81620023ad565b9650602088013562002f1e81620023ad565b955060408801359450606088013593506080880135620026dc816200265f565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b8015158114620023c357600080fd5b600080600080600080600080610100898b0312156200301957600080fd5b88356200302681620023ad565b975060208901356200303881620023ad565b965060408901359550606089013594506080890135620030588162002fec565b935060a08901356200306a816200265f565b979a969950949793969295929450505060c08201359160e0013590565b600181815b80851115620030c8578160001904821115620030ac57620030ac62002cb4565b80851615620030ba57918102915b93841c93908002906200308c565b509250929050565b600082620030e15750600162000a47565b81620030f05750600062000a47565b8160018114620031095760028114620031145762003134565b600191505062000a47565b60ff84111562003128576200312862002cb4565b50506001821b62000a47565b5060208310610133831016604e8410600b841016171562003159575081810a62000a47565b62003165838362003087565b80600019048211156200317c576200317c62002cb4565b029392505050565b6000620025228383620030d0565b600082821015620031a757620031a762002cb4565b500390565b60008219821115620031c257620031c262002cb4565b500190565b634e487b7160e01b600052600160045260246000fd5b600060208284031215620031f057600080fd5b5051919050565b6000602082840312156200320a57600080fd5b8151620025228162002fec565b60208152600062002522602083018462002b2956fe60c06040523480156200001157600080fd5b506040516200154c3803806200154c8339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611092620004ba60003960006104690152600081816102f9015261043301526110926000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611043565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161105557611055610fd1565b506001019056fea264697066735822122048db6a6222fa164d21a8fcb1cd25d2a9e0eee016393c37dcc7b7fd638ef787c264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212201e5d89c55c1f97b1f79752036fe68d3686187613f7595faa2b990d177c1a04c264736f6c634300080f0033", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", "0x0000000000000000000000000000000000000000000000000000000000000022": "0x0100", diff --git a/deployment/verifyPoE_v2-0.js b/deployment/verifyPoE_v2-0.js index 2f5d67861..16aca5143 100644 --- a/deployment/verifyPoE_v2-0.js +++ b/deployment/verifyPoE_v2-0.js @@ -60,7 +60,7 @@ async function main() { [deployer] = (await ethers.getSigners()); } - const minDelayTimelock = deployParameters.minDelayTimelock || 0; + const minDelayTimelock = deployParameters.minDelayTimelock || 10; const timelockAddress = deployParameters.timelockAddress || deployer.address; try { await hre.run( diff --git a/docker/scripts/genesis_docker.json b/docker/scripts/genesis_docker.json index cff17331e..a78ae919f 100644 --- a/docker/scripts/genesis_docker.json +++ b/docker/scripts/genesis_docker.json @@ -1,11 +1,11 @@ { - "root": "0x0cdcfe52b23364e018852df04bcd1478acd0a3579f00cbe1b9cdd0f7690baf57", + "root": "0x8bb1811d2084a98194bed51075270fc03067cf2e6bbc4b7397fc34228a819593", "genesis": [ { "balance": "200000000000000000000000000", "nonce": "1", "address": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988", - "bytecode": "0x608060405260043610620001675760003560e01c80637b6323c111620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b80637b6323c1146200037057806381b1c17414620003955780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b806337883a3e116200011e57806337883a3e14620002a25780633ae0504714620002c45780633da8168214620002dc5780633e1970431462000301578063463855491462000326578063647c576c146200034b57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002470565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009d2565b348015620001db57600080fd5b50620001f3620001ed366004620024fd565b62000a0b565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002539565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b50602754620001f3906001600160a01b031681565b348015620002d157600080fd5b506200022462000a5e565b348015620002e957600080fd5b50620001a1620002fb36600462002628565b62000b51565b3480156200030e57600080fd5b506200022462000320366004620026a6565b62000c53565b3480156200033357600080fd5b506200018362000345366004620027b7565b62000ce0565b3480156200035857600080fd5b50620001836200036a3660046200289e565b62000e86565b3480156200037d57600080fd5b50620001836200038f366004620027b7565b62000fe5565b348015620003a257600080fd5b50620001f3620003b4366004620028ee565b6024602052600090815260409020546001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028ee565b62001492565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002908565b620014d7565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620029bc565b620015ee565b348015620004c357600080fd5b50620001836200179a565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028ee565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a24565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008ec565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074957604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562000710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000736919062002a9b565b50602081015181519094509250620008ea565b84156200075e576200075e8a888888620017d1565b620007756001600160a01b038b1633308a62001bf9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f6919081019062002b36565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000835573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085f919081019062002b36565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c4919062002b6f565b604051602001620008d89392919062002bbd565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092e98979695949392919062002bfa565b60405180910390a16200095962000953600084868c8c8c888051906020012062000c53565b62001c66565b6026546001600160a01b03166333d6247d6200097462000a5e565b6040518263ffffffff1660e01b81526004016200099391815260200190565b600060405180830381600087803b158015620009ae57600080fd5b505af1158015620009c3573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ff5760405162461bcd60e51b8152600401620005539062002c67565b62000a0962001db7565b565b600060246000848460405160200162000a2692919062002cc4565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b48578260011660010362000ac9576001816020811062000a955762000a9562002cee565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af6565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0360028462002d30565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3f9062002d47565b91505062000a69565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c44578160011660010362000bce5786818151811062000b8c5762000b8c62002cee565b60200260200101518360405160200162000bb0929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c20565b8287828151811062000be45762000be462002cee565b602002602001015160405160200162000c07929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2d60028362002d30565b91508062000c3b8162002d47565b91505062000b61565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d065760405162461bcd60e51b8152600401620005539062002a24565b62000d1c8a8a8a8a8a8a8a8a8a8a600162001e15565b62000d2d8963ffffffff16620020a0565b6000836001600160a01b03168387898560405160240162000d519392919062002d63565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d88919062002d9e565b60006040518083038185875af1925050503d806000811462000dc7576040519150601f19603f3d011682016040523d82523d6000602084013e62000dcc565b606091505b505090508062000e385760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e7195949392919062002dbc565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea75750600054600160ff909116105b8062000ec35750303b15801562000ec3575060005460ff166001145b62000f285760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f4c576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff16156200100b5760405162461bcd60e51b8152600401620005539062002a24565b620010218a8a8a8a8a8a8a8a8a8a600062001e15565b620010328963ffffffff16620020a0565b6001600160a01b0385166200112757604080516000808252602082019092526001600160a01b0385169084906040516200106d919062002d9e565b60006040518083038185875af1925050503d8060008114620010ac576040519150601f19603f3d011682016040523d82523d6000602084013e620010b1565b606091505b5050905080620011205760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b5062001445565b60225463ffffffff6101009091048116908716036200115c57620011566001600160a01b0386168484620020e2565b62001445565b600086866040516020016200117392919062002cc4565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013ca57600080600085806020019051810190620011c5919062002df3565b925092509250600085848484604051620011df90620023d6565b620011ed9392919062002bbd565b8190604051809103906000f59050801580156200120e573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001263573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001289919062002a9b565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013b89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001442565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200141a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001440919062002a9b565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200147e95949392919062002dbc565b60405180910390a150505050505050505050565b600080620014a36101008462002d30565b90506000620014b56101008562002e69565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014ef92919062002cc4565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200152290620023d6565b601f1982820381018352601f9091011660408190526200154f908d908d908d908d908d9060200162002ea9565b60408051601f19818403018152908290526200156f929160200162002eea565b60405160208183030381529060405280519060200120604051602001620015c894939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620016145760405162461bcd60e51b8152600401620005539062002a24565b60225463ffffffff6101009091048116908416036200169c5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016f098979695949392919062002bfa565b60405180910390a162001727620009536001602260019054906101000a900463ffffffff1633878734888051906020012062000c53565b6026546001600160a01b03166333d6247d6200174262000a5e565b6040518263ffffffff1660e01b81526004016200176191815260200190565b600060405180830381600087803b1580156200177c57600080fd5b505af115801562001791573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017c75760405162461bcd60e51b8152600401620005539062002c67565b62000a0962002114565b60006200181483838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021c392505050565b9050632afa533160e01b6001600160e01b031982160162001a0d57600080808080808062001846896004818d62002f1d565b81019062001855919062002f49565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018975760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b0386163014620018c25760405162461bcd60e51b8152600401620005539062003001565b8a8514620019395760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620019b9919062002d9e565b6000604051808303816000865af19150503d8060008114620019f8576040519150601f19603f3d011682016040523d82523d6000602084013e620019fd565b606091505b5050505050505050505062001bf2565b6001600160e01b031981166323f2ebc360e21b1462001a835760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a9b8a6004818e62002f1d565b81019062001aaa919062003052565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001aee5760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b038716301462001b195760405162461bcd60e51b8152600401620005539062003001565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001ba2919062002d9e565b6000604051808303816000865af19150503d806000811462001be1576040519150601f19603f3d011682016040523d82523d6000602084013e62001be6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdf9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021ca565b80600162001c7760206002620031db565b62001c839190620031e9565b6021541062001ce85760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cfd919062003203565b909155505060215460005b602081101562001da7578160011660010362001d3d57826001826020811062001d355762001d3562002cee565b015550505050565b6001816020811062001d535762001d5362002cee565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d90919062002d30565b91508062001d9e8162002d47565b91505062001d08565b5062001db26200321e565b505050565b60225460ff161562001ddd5760405162461bcd60e51b8152600401620005539062002a24565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001e268a63ffffffff1662001492565b1562001e7d5760405162461bcd60e51b81526020600482015260306024820152600080516020620047bb83398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ef1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f17919062003234565b90508060000362001f805760405162461bcd60e51b81526020600482015260396024820152600080516020620047bb83398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff8781166101009092041614620020025760405162461bcd60e51b81526020600482015260436024820152600080516020620047bb83398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff166200202057508862002023565b50895b6200204e6200203f848b8b8b8b8b8b8051906020012062000c53565b8e8e63ffffffff168462000b51565b620009c35760405162461bcd60e51b815260206004820152602c6024820152600080516020620047bb83398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020b06101008362002d30565b90506000620020c26101008462002e69565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001db290849063a9059cbb60e01b9060640162001c2e565b60225460ff166200218e5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002221826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022a39092919063ffffffff16565b80519091501562001db2578080602001905181019062002242919062002a9b565b62001db25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c4b848460008585600080866001600160a01b03168587604051620022cd919062002d9e565b60006040518083038185875af1925050503d80600081146200230c576040519150601f19603f3d011682016040523d82523d6000602084013e62002311565b606091505b509150915062002324878383876200232f565b979650505050505050565b60608315620023a35782516000036200239b576001600160a01b0385163b6200239b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c4b565b62000c4b8383815115620023ba5781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200324e565b611557806200326483390190565b6001600160a01b0381168114620023fa57600080fd5b50565b80356200240a81620023e4565b919050565b803563ffffffff811681146200240a57600080fd5b60008083601f8401126200243757600080fd5b50813567ffffffffffffffff8111156200245057600080fd5b6020830191508360208285010111156200246957600080fd5b9250929050565b60008060008060008060a087890312156200248a57600080fd5b86356200249781620023e4565b9550620024a7602088016200240f565b94506040870135620024b981620023e4565b935060608701359250608087013567ffffffffffffffff811115620024dd57600080fd5b620024eb89828a0162002424565b979a9699509497509295939492505050565b600080604083850312156200251157600080fd5b6200251c836200240f565b915060208301356200252e81620023e4565b809150509250929050565b6000602082840312156200254c57600080fd5b81356200255981620023e4565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620025a257620025a262002560565b604052919050565b600082601f830112620025bc57600080fd5b8135602067ffffffffffffffff821115620025db57620025db62002560565b8160051b620025ec82820162002576565b92835284810182019282810190878511156200260757600080fd5b83870192505b8483101562002324578235825291830191908301906200260d565b600080600080608085870312156200263f57600080fd5b84359350602085013567ffffffffffffffff808211156200265f57600080fd5b6200266d88838901620025aa565b94506040870135915080821682146200268557600080fd5b509396929550929360600135925050565b60ff81168114620023fa57600080fd5b600080600080600080600060e0888a031215620026c257600080fd5b8735620026cf8162002696565b9650620026df602089016200240f565b95506040880135620026f181620023e4565b945062002701606089016200240f565b935060808801356200271381620023e4565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200274d576200274d62002560565b50601f01601f191660200190565b600082601f8301126200276d57600080fd5b8135620027846200277e8262002730565b62002576565b8181528460208386010111156200279a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027d857600080fd5b8a3567ffffffffffffffff80821115620027f157600080fd5b620027ff8e838f01620025aa565b9b506200280f60208e016200240f565b9a5060408d0135995060608d013598506200282d60808e016200240f565b97506200283d60a08e01620023fd565b96506200284d60c08e016200240f565b95506200285d60e08e01620023fd565b94506101008d013593506101208d01359150808211156200287d57600080fd5b506200288c8d828e016200275b565b9150509295989b9194979a5092959850565b600080600060608486031215620028b457600080fd5b620028bf846200240f565b92506020840135620028d181620023e4565b91506040840135620028e381620023e4565b809150509250925092565b6000602082840312156200290157600080fd5b5035919050565b600080600080600080600060a0888a0312156200292457600080fd5b6200292f886200240f565b965060208801356200294181620023e4565b9550604088013567ffffffffffffffff808211156200295f57600080fd5b6200296d8b838c0162002424565b909750955060608a01359150808211156200298757600080fd5b50620029968a828b0162002424565b9094509250506080880135620029ac8162002696565b8091505092959891949750929550565b600080600060608486031215620029d257600080fd5b620029dd846200240f565b92506020840135620029ef81620023e4565b9150604084013567ffffffffffffffff81111562002a0c57600080fd5b62002a1a868287016200275b565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b8015158114620023fa57600080fd5b60006020828403121562002aae57600080fd5b8151620025598162002a8c565b60005b8381101562002ad857818101518382015260200162002abe565b8381111562000fdf5750506000910152565b600082601f83011262002afc57600080fd5b815162002b0d6200277e8262002730565b81815284602083860101111562002b2357600080fd5b62000c4b82602083016020870162002abb565b60006020828403121562002b4957600080fd5b815167ffffffffffffffff81111562002b6157600080fd5b62000c4b8482850162002aea565b60006020828403121562002b8257600080fd5b8151620025598162002696565b6000815180845262002ba981602086016020860162002abb565b601f01601f19169290920160200192915050565b60608152600062002bd2606083018662002b8f565b828103602084015262002be6818662002b8f565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002c4e8483018762002b8f565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002d425762002d4262002d04565b500490565b60006001820162002d5c5762002d5c62002d1a565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d959083018462002b8f565b95945050505050565b6000825162002db281846020870162002abb565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002e0957600080fd5b835167ffffffffffffffff8082111562002e2257600080fd5b62002e308783880162002aea565b9450602086015191508082111562002e4757600080fd5b5062002e568682870162002aea565b9250506040840151620028e38162002696565b60008262002e7b5762002e7b62002d04565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002ebf60608301878962002e80565b828103602084015262002ed481868862002e80565b91505060ff831660408301529695505050505050565b6000835162002efe81846020880162002abb565b83519083019062002f1481836020880162002abb565b01949350505050565b6000808585111562002f2e57600080fd5b8386111562002f3c57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f6557600080fd5b873562002f7281620023e4565b9650602088013562002f8481620023e4565b955060408801359450606088013593506080880135620027138162002696565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b0312156200307057600080fd5b88356200307d81620023e4565b975060208901356200308f81620023e4565b965060408901359550606089013594506080890135620030af8162002a8c565b935060a0890135620030c18162002696565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200311f57816000190482111562003103576200310362002d1a565b808516156200311157918102915b93841c9390800290620030e3565b509250929050565b600082620031385750600162000a58565b81620031475750600062000a58565b81600181146200316057600281146200316b576200318b565b600191505062000a58565b60ff8411156200317f576200317f62002d1a565b50506001821b62000a58565b5060208310610133831016604e8410600b8410161715620031b0575081810a62000a58565b620031bc8383620030de565b8060001904821115620031d357620031d362002d1a565b029392505050565b600062002559838362003127565b600082821015620031fe57620031fe62002d1a565b500390565b6000821982111562003219576200321962002d1a565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200324757600080fd5b5051919050565b60208152600062002559602083018462002b8f56fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea264697066735822122070fae8b3daebe7fc894d50296739b7a26e638f37239109230c7dfd552785f2a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212208fde18b5efa27a9c6a9604bbebb39629f3a307cad6b8fab402a033ff62a94bfe64736f6c634300080f0033", + "bytecode": "0x608060405260043610620001675760003560e01c80637b6323c111620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b80637b6323c1146200037057806381b1c17414620003955780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b806337883a3e116200011e57806337883a3e14620002a25780633ae0504714620002c45780633da8168214620002dc5780633e1970431462000301578063463855491462000326578063647c576c146200034b57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002439565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009c1565b348015620001db57600080fd5b50620001f3620001ed366004620024c6565b620009fa565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002502565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b50602754620001f3906001600160a01b031681565b348015620002d157600080fd5b506200022462000a4d565b348015620002e957600080fd5b50620001a1620002fb366004620025f1565b62000b40565b3480156200030e57600080fd5b5062000224620003203660046200266f565b62000c42565b3480156200033357600080fd5b50620001836200034536600462002780565b62000ccf565b3480156200035857600080fd5b50620001836200036a36600462002867565b62000e75565b3480156200037d57600080fd5b50620001836200038f36600462002780565b62000fd4565b348015620003a257600080fd5b50620001f3620003b4366004620028b7565b6024602052600090815260409020546001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028b7565b6200145b565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d366004620028d1565b620014a0565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b036600462002985565b620015b7565b348015620004c357600080fd5b506200018362001763565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028b7565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b81526004016200055390620029ed565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008db565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200073857604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac90604401600060405180830381600087803b1580156200070b57600080fd5b505af115801562000720573d6000803e3d6000fd5b505050508060200151935080600001519250620008d9565b84156200074d576200074d8a8888886200179a565b620007646001600160a01b038b1633308a62001bc2565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007bb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007e5919081019062002ad0565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000824573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200084e919081019062002ad0565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200088d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008b3919062002b09565b604051602001620008c79392919062002b57565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200091d98979695949392919062002b94565b60405180910390a16200094862000942600084868c8c8c888051906020012062000c42565b62001c2f565b6026546001600160a01b03166333d6247d6200096362000a4d565b6040518263ffffffff1660e01b81526004016200098291815260200190565b600060405180830381600087803b1580156200099d57600080fd5b505af1158015620009b2573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ee5760405162461bcd60e51b8152600401620005539062002c01565b620009f862001d80565b565b600060246000848460405160200162000a1592919062002c5e565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b37578260011660010362000ab8576001816020811062000a845762000a8462002c88565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000ae5565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000af260028462002cca565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b2e9062002ce1565b91505062000a58565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c33578160011660010362000bbd5786818151811062000b7b5762000b7b62002c88565b60200260200101518360405160200162000b9f929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c0f565b8287828151811062000bd35762000bd362002c88565b602002602001015160405160200162000bf6929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c1c60028362002cca565b91508062000c2a8162002ce1565b91505062000b50565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000cf55760405162461bcd60e51b81526004016200055390620029ed565b62000d0b8a8a8a8a8a8a8a8a8a8a600162001dde565b62000d1c8963ffffffff1662002069565b6000836001600160a01b03168387898560405160240162000d409392919062002cfd565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d77919062002d38565b60006040518083038185875af1925050503d806000811462000db6576040519150601f19603f3d011682016040523d82523d6000602084013e62000dbb565b606091505b505090508062000e275760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e6095949392919062002d56565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000e965750600054600160ff909116105b8062000eb25750303b15801562000eb2575060005460ff166001145b62000f175760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f3b576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fce576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff161562000ffa5760405162461bcd60e51b81526004016200055390620029ed565b620010108a8a8a8a8a8a8a8a8a8a600062001dde565b620010218963ffffffff1662002069565b6001600160a01b0385166200111657604080516000808252602082019092526001600160a01b0385169084906040516200105c919062002d38565b60006040518083038185875af1925050503d80600081146200109b576040519150601f19603f3d011682016040523d82523d6000602084013e620010a0565b606091505b50509050806200110f5760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b506200140e565b60225463ffffffff6101009091048116908716036200114b57620011456001600160a01b0386168484620020ab565b6200140e565b600086866040516020016200116292919062002c5e565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013a657600080600085806020019051810190620011b4919062002d8d565b925092509250600085848484604051620011ce906200239f565b620011dc9392919062002b57565b8190604051809103906000f5905080158015620011fd573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f1990604401600060405180830381600087803b1580156200124d57600080fd5b505af115801562001262573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013949392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200140b565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f1990604401600060405180830381600087803b158015620013f157600080fd5b505af115801562001406573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200144795949392919062002d56565b60405180910390a150505050505050505050565b6000806200146c6101008462002cca565b905060006200147e6101008562002e03565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014b892919062002c5e565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014eb906200239f565b601f1982820381018352601f90910116604081905262001518908d908d908d908d908d9060200162002e43565b60408051601f198184030181529082905262001538929160200162002e84565b604051602081830303815290604052805190602001206040516020016200159194939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015dd5760405162461bcd60e51b81526004016200055390620029ed565b60225463ffffffff610100909104811690841603620016655760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016b998979695949392919062002b94565b60405180910390a1620016f0620009426001602260019054906101000a900463ffffffff1633878734888051906020012062000c42565b6026546001600160a01b03166333d6247d6200170b62000a4d565b6040518263ffffffff1660e01b81526004016200172a91815260200190565b600060405180830381600087803b1580156200174557600080fd5b505af11580156200175a573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017905760405162461bcd60e51b8152600401620005539062002c01565b620009f8620020dd565b6000620017dd83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200218c92505050565b9050632afa533160e01b6001600160e01b0319821601620019d65760008080808080806200180f896004818d62002eb7565b8101906200181e919062002ee3565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018605760405162461bcd60e51b8152600401620005539062002f3e565b6001600160a01b03861630146200188b5760405162461bcd60e51b8152600401620005539062002f9b565b8a8514620019025760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162001982919062002d38565b6000604051808303816000865af19150503d8060008114620019c1576040519150601f19603f3d011682016040523d82523d6000602084013e620019c6565b606091505b5050505050505050505062001bbb565b6001600160e01b031981166323f2ebc360e21b1462001a4c5760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a648a6004818e62002eb7565b81019062001a73919062002ffb565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001ab75760405162461bcd60e51b8152600401620005539062002f3e565b6001600160a01b038716301462001ae25760405162461bcd60e51b8152600401620005539062002f9b565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001b6b919062002d38565b6000604051808303816000865af19150503d806000811462001baa576040519150601f19603f3d011682016040523d82523d6000602084013e62001baf565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fce9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262002193565b80600162001c406020600262003184565b62001c4c919062003192565b6021541062001cb15760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cc69190620031ac565b909155505060215460005b602081101562001d70578160011660010362001d0657826001826020811062001cfe5762001cfe62002c88565b015550505050565b6001816020811062001d1c5762001d1c62002c88565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d59919062002cca565b91508062001d678162002ce1565b91505062001cd1565b5062001d7b620031c7565b505050565b60225460ff161562001da65760405162461bcd60e51b81526004016200055390620029ed565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001def8a63ffffffff166200145b565b1562001e465760405162461bcd60e51b815260206004820152603060248201526000805160206200477983398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001eba573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ee09190620031dd565b90508060000362001f495760405162461bcd60e51b815260206004820152603960248201526000805160206200477983398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff878116610100909204161462001fcb5760405162461bcd60e51b815260206004820152604360248201526000805160206200477983398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff1662001fe957508862001fec565b50895b6200201762002008848b8b8b8b8b8b8051906020012062000c42565b8e8e63ffffffff168462000b40565b620009b25760405162461bcd60e51b815260206004820152602c60248201526000805160206200477983398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020796101008362002cca565b905060006200208b6101008462002e03565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001d7b90849063a9059cbb60e01b9060640162001bf7565b60225460ff16620021575760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b6000620021ea826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166200226c9092919063ffffffff16565b80519091501562001d7b57808060200190518101906200220b9190620031f7565b62001d7b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c3a848460008585600080866001600160a01b0316858760405162002296919062002d38565b60006040518083038185875af1925050503d8060008114620022d5576040519150601f19603f3d011682016040523d82523d6000602084013e620022da565b606091505b5091509150620022ed87838387620022f8565b979650505050505050565b606083156200236c57825160000362002364576001600160a01b0385163b620023645760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c3a565b62000c3a8383815115620023835781518083602001fd5b8060405162461bcd60e51b815260040162000553919062003217565b61154c806200322d83390190565b6001600160a01b0381168114620023c357600080fd5b50565b8035620023d381620023ad565b919050565b803563ffffffff81168114620023d357600080fd5b60008083601f8401126200240057600080fd5b50813567ffffffffffffffff8111156200241957600080fd5b6020830191508360208285010111156200243257600080fd5b9250929050565b60008060008060008060a087890312156200245357600080fd5b86356200246081620023ad565b95506200247060208801620023d8565b945060408701356200248281620023ad565b935060608701359250608087013567ffffffffffffffff811115620024a657600080fd5b620024b489828a01620023ed565b979a9699509497509295939492505050565b60008060408385031215620024da57600080fd5b620024e583620023d8565b91506020830135620024f781620023ad565b809150509250929050565b6000602082840312156200251557600080fd5b81356200252281620023ad565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200256b576200256b62002529565b604052919050565b600082601f8301126200258557600080fd5b8135602067ffffffffffffffff821115620025a457620025a462002529565b8160051b620025b58282016200253f565b9283528481018201928281019087851115620025d057600080fd5b83870192505b84831015620022ed57823582529183019190830190620025d6565b600080600080608085870312156200260857600080fd5b84359350602085013567ffffffffffffffff808211156200262857600080fd5b620026368883890162002573565b94506040870135915080821682146200264e57600080fd5b509396929550929360600135925050565b60ff81168114620023c357600080fd5b600080600080600080600060e0888a0312156200268b57600080fd5b873562002698816200265f565b9650620026a860208901620023d8565b95506040880135620026ba81620023ad565b9450620026ca60608901620023d8565b93506080880135620026dc81620023ad565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002716576200271662002529565b50601f01601f191660200190565b600082601f8301126200273657600080fd5b81356200274d6200274782620026f9565b6200253f565b8181528460208386010111156200276357600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027a157600080fd5b8a3567ffffffffffffffff80821115620027ba57600080fd5b620027c88e838f0162002573565b9b50620027d860208e01620023d8565b9a5060408d0135995060608d01359850620027f660808e01620023d8565b97506200280660a08e01620023c6565b96506200281660c08e01620023d8565b95506200282660e08e01620023c6565b94506101008d013593506101208d01359150808211156200284657600080fd5b50620028558d828e0162002724565b9150509295989b9194979a5092959850565b6000806000606084860312156200287d57600080fd5b6200288884620023d8565b925060208401356200289a81620023ad565b91506040840135620028ac81620023ad565b809150509250925092565b600060208284031215620028ca57600080fd5b5035919050565b600080600080600080600060a0888a031215620028ed57600080fd5b620028f888620023d8565b965060208801356200290a81620023ad565b9550604088013567ffffffffffffffff808211156200292857600080fd5b620029368b838c01620023ed565b909750955060608a01359150808211156200295057600080fd5b506200295f8a828b01620023ed565b909450925050608088013562002975816200265f565b8091505092959891949750929550565b6000806000606084860312156200299b57600080fd5b620029a684620023d8565b92506020840135620029b881620023ad565b9150604084013567ffffffffffffffff811115620029d557600080fd5b620029e38682870162002724565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002a7257818101518382015260200162002a58565b8381111562000fce5750506000910152565b600082601f83011262002a9657600080fd5b815162002aa76200274782620026f9565b81815284602083860101111562002abd57600080fd5b62000c3a82602083016020870162002a55565b60006020828403121562002ae357600080fd5b815167ffffffffffffffff81111562002afb57600080fd5b62000c3a8482850162002a84565b60006020828403121562002b1c57600080fd5b815162002522816200265f565b6000815180845262002b4381602086016020860162002a55565b601f01601f19169290920160200192915050565b60608152600062002b6c606083018662002b29565b828103602084015262002b80818662002b29565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002be88483018762002b29565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002cdc5762002cdc62002c9e565b500490565b60006001820162002cf65762002cf662002cb4565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d2f9083018462002b29565b95945050505050565b6000825162002d4c81846020870162002a55565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002da357600080fd5b835167ffffffffffffffff8082111562002dbc57600080fd5b62002dca8783880162002a84565b9450602086015191508082111562002de157600080fd5b5062002df08682870162002a84565b9250506040840151620028ac816200265f565b60008262002e155762002e1562002c9e565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e5960608301878962002e1a565b828103602084015262002e6e81868862002e1a565b91505060ff831660408301529695505050505050565b6000835162002e9881846020880162002a55565b83519083019062002eae81836020880162002a55565b01949350505050565b6000808585111562002ec857600080fd5b8386111562002ed657600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002eff57600080fd5b873562002f0c81620023ad565b9650602088013562002f1e81620023ad565b955060408801359450606088013593506080880135620026dc816200265f565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b8015158114620023c357600080fd5b600080600080600080600080610100898b0312156200301957600080fd5b88356200302681620023ad565b975060208901356200303881620023ad565b965060408901359550606089013594506080890135620030588162002fec565b935060a08901356200306a816200265f565b979a969950949793969295929450505060c08201359160e0013590565b600181815b80851115620030c8578160001904821115620030ac57620030ac62002cb4565b80851615620030ba57918102915b93841c93908002906200308c565b509250929050565b600082620030e15750600162000a47565b81620030f05750600062000a47565b8160018114620031095760028114620031145762003134565b600191505062000a47565b60ff84111562003128576200312862002cb4565b50506001821b62000a47565b5060208310610133831016604e8410600b841016171562003159575081810a62000a47565b62003165838362003087565b80600019048211156200317c576200317c62002cb4565b029392505050565b6000620025228383620030d0565b600082821015620031a757620031a762002cb4565b500390565b60008219821115620031c257620031c262002cb4565b500190565b634e487b7160e01b600052600160045260246000fd5b600060208284031215620031f057600080fd5b5051919050565b6000602082840312156200320a57600080fd5b8151620025228162002fec565b60208152600062002522602083018462002b2956fe60c06040523480156200001157600080fd5b506040516200154c3803806200154c8339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611092620004ba60003960006104690152600081816102f9015261043301526110926000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611043565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161105557611055610fd1565b506001019056fea264697066735822122048db6a6222fa164d21a8fcb1cd25d2a9e0eee016393c37dcc7b7fd638ef787c264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212201e5d89c55c1f97b1f79752036fe68d3686187613f7595faa2b990d177c1a04c264736f6c634300080f0033", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", "0x0000000000000000000000000000000000000000000000000000000000000022": "0x0100", diff --git a/docs/lib/TokenWrapped.md b/docs/lib/TokenWrapped.md index d28fcc887..44107d840 100644 --- a/docs/lib/TokenWrapped.md +++ b/docs/lib/TokenWrapped.md @@ -14,7 +14,7 @@ ### mint ```solidity function mint( - ) external returns (bool) + ) external ``` @@ -23,7 +23,7 @@ ### burn ```solidity function burn( - ) external returns (bool) + ) external ``` From 539d631fbad48d55034290b57147b1d7bcfc02ee Mon Sep 17 00:00:00 2001 From: invocamanman Date: Tue, 20 Dec 2022 17:51:58 +0100 Subject: [PATCH 59/71] comments carlos --- compiled-contracts/PolygonZkEVMBridge.json | 4 ++-- compiled-contracts/PolygonZkEVMBridgeMock.json | 4 ++-- compiled-contracts/PolygonZkEVMGlobalExitRoot.json | 4 ++-- compiled-contracts/PolygonZkEVMGlobalExitRootL2.json | 4 ++-- .../PolygonZkEVMGlobalExitRootL2Mock.json | 4 ++-- .../PolygonZkEVMGlobalExitRootMock.json | 4 ++-- contracts/PolygonZkEVMBridge.sol | 1 + contracts/PolygonZkEVMGlobalExitRoot.sol | 4 ++-- contracts/PolygonZkEVMGlobalExitRootL2.sol | 12 ++++++------ docs/PolygonZkEVMGlobalExitRootL2.md | 4 ++-- 10 files changed, 23 insertions(+), 22 deletions(-) diff --git a/compiled-contracts/PolygonZkEVMBridge.json b/compiled-contracts/PolygonZkEVMBridge.json index d5fb33ed1..f5e6a3b82 100644 --- a/compiled-contracts/PolygonZkEVMBridge.json +++ b/compiled-contracts/PolygonZkEVMBridge.json @@ -699,8 +699,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506147ce806100206000396000f3fe608060405260043610620001675760003560e01c80637b6323c111620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b80637b6323c1146200037057806381b1c17414620003955780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b806337883a3e116200011e57806337883a3e14620002a25780633ae0504714620002c45780633da8168214620002dc5780633e1970431462000301578063463855491462000326578063647c576c146200034b57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002439565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009c1565b348015620001db57600080fd5b50620001f3620001ed366004620024c6565b620009fa565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002502565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b50602754620001f3906001600160a01b031681565b348015620002d157600080fd5b506200022462000a4d565b348015620002e957600080fd5b50620001a1620002fb366004620025f1565b62000b40565b3480156200030e57600080fd5b5062000224620003203660046200266f565b62000c42565b3480156200033357600080fd5b50620001836200034536600462002780565b62000ccf565b3480156200035857600080fd5b50620001836200036a36600462002867565b62000e75565b3480156200037d57600080fd5b50620001836200038f36600462002780565b62000fd4565b348015620003a257600080fd5b50620001f3620003b4366004620028b7565b6024602052600090815260409020546001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028b7565b6200145b565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d366004620028d1565b620014a0565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b036600462002985565b620015b7565b348015620004c357600080fd5b506200018362001763565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028b7565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b81526004016200055390620029ed565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008db565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200073857604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac90604401600060405180830381600087803b1580156200070b57600080fd5b505af115801562000720573d6000803e3d6000fd5b505050508060200151935080600001519250620008d9565b84156200074d576200074d8a8888886200179a565b620007646001600160a01b038b1633308a62001bc2565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007bb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007e5919081019062002ad0565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000824573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200084e919081019062002ad0565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200088d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008b3919062002b09565b604051602001620008c79392919062002b57565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200091d98979695949392919062002b94565b60405180910390a16200094862000942600084868c8c8c888051906020012062000c42565b62001c2f565b6026546001600160a01b03166333d6247d6200096362000a4d565b6040518263ffffffff1660e01b81526004016200098291815260200190565b600060405180830381600087803b1580156200099d57600080fd5b505af1158015620009b2573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ee5760405162461bcd60e51b8152600401620005539062002c01565b620009f862001d80565b565b600060246000848460405160200162000a1592919062002c5e565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b37578260011660010362000ab8576001816020811062000a845762000a8462002c88565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000ae5565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000af260028462002cca565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b2e9062002ce1565b91505062000a58565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c33578160011660010362000bbd5786818151811062000b7b5762000b7b62002c88565b60200260200101518360405160200162000b9f929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c0f565b8287828151811062000bd35762000bd362002c88565b602002602001015160405160200162000bf6929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c1c60028362002cca565b91508062000c2a8162002ce1565b91505062000b50565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000cf55760405162461bcd60e51b81526004016200055390620029ed565b62000d0b8a8a8a8a8a8a8a8a8a8a600162001dde565b62000d1c8963ffffffff1662002069565b6000836001600160a01b03168387898560405160240162000d409392919062002cfd565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d77919062002d38565b60006040518083038185875af1925050503d806000811462000db6576040519150601f19603f3d011682016040523d82523d6000602084013e62000dbb565b606091505b505090508062000e275760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e6095949392919062002d56565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000e965750600054600160ff909116105b8062000eb25750303b15801562000eb2575060005460ff166001145b62000f175760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f3b576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fce576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff161562000ffa5760405162461bcd60e51b81526004016200055390620029ed565b620010108a8a8a8a8a8a8a8a8a8a600062001dde565b620010218963ffffffff1662002069565b6001600160a01b0385166200111657604080516000808252602082019092526001600160a01b0385169084906040516200105c919062002d38565b60006040518083038185875af1925050503d80600081146200109b576040519150601f19603f3d011682016040523d82523d6000602084013e620010a0565b606091505b50509050806200110f5760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b506200140e565b60225463ffffffff6101009091048116908716036200114b57620011456001600160a01b0386168484620020ab565b6200140e565b600086866040516020016200116292919062002c5e565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013a657600080600085806020019051810190620011b4919062002d8d565b925092509250600085848484604051620011ce906200239f565b620011dc9392919062002b57565b8190604051809103906000f5905080158015620011fd573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f1990604401600060405180830381600087803b1580156200124d57600080fd5b505af115801562001262573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013949392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200140b565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f1990604401600060405180830381600087803b158015620013f157600080fd5b505af115801562001406573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200144795949392919062002d56565b60405180910390a150505050505050505050565b6000806200146c6101008462002cca565b905060006200147e6101008562002e03565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014b892919062002c5e565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014eb906200239f565b601f1982820381018352601f90910116604081905262001518908d908d908d908d908d9060200162002e43565b60408051601f198184030181529082905262001538929160200162002e84565b604051602081830303815290604052805190602001206040516020016200159194939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015dd5760405162461bcd60e51b81526004016200055390620029ed565b60225463ffffffff610100909104811690841603620016655760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016b998979695949392919062002b94565b60405180910390a1620016f0620009426001602260019054906101000a900463ffffffff1633878734888051906020012062000c42565b6026546001600160a01b03166333d6247d6200170b62000a4d565b6040518263ffffffff1660e01b81526004016200172a91815260200190565b600060405180830381600087803b1580156200174557600080fd5b505af11580156200175a573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017905760405162461bcd60e51b8152600401620005539062002c01565b620009f8620020dd565b6000620017dd83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200218c92505050565b9050632afa533160e01b6001600160e01b0319821601620019d65760008080808080806200180f896004818d62002eb7565b8101906200181e919062002ee3565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018605760405162461bcd60e51b8152600401620005539062002f3e565b6001600160a01b03861630146200188b5760405162461bcd60e51b8152600401620005539062002f9b565b8a8514620019025760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162001982919062002d38565b6000604051808303816000865af19150503d8060008114620019c1576040519150601f19603f3d011682016040523d82523d6000602084013e620019c6565b606091505b5050505050505050505062001bbb565b6001600160e01b031981166323f2ebc360e21b1462001a4c5760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a648a6004818e62002eb7565b81019062001a73919062002ffb565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001ab75760405162461bcd60e51b8152600401620005539062002f3e565b6001600160a01b038716301462001ae25760405162461bcd60e51b8152600401620005539062002f9b565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001b6b919062002d38565b6000604051808303816000865af19150503d806000811462001baa576040519150601f19603f3d011682016040523d82523d6000602084013e62001baf565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fce9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262002193565b80600162001c406020600262003184565b62001c4c919062003192565b6021541062001cb15760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cc69190620031ac565b909155505060215460005b602081101562001d70578160011660010362001d0657826001826020811062001cfe5762001cfe62002c88565b015550505050565b6001816020811062001d1c5762001d1c62002c88565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d59919062002cca565b91508062001d678162002ce1565b91505062001cd1565b5062001d7b620031c7565b505050565b60225460ff161562001da65760405162461bcd60e51b81526004016200055390620029ed565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001def8a63ffffffff166200145b565b1562001e465760405162461bcd60e51b815260206004820152603060248201526000805160206200477983398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001eba573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ee09190620031dd565b90508060000362001f495760405162461bcd60e51b815260206004820152603960248201526000805160206200477983398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff878116610100909204161462001fcb5760405162461bcd60e51b815260206004820152604360248201526000805160206200477983398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff1662001fe957508862001fec565b50895b6200201762002008848b8b8b8b8b8b8051906020012062000c42565b8e8e63ffffffff168462000b40565b620009b25760405162461bcd60e51b815260206004820152602c60248201526000805160206200477983398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020796101008362002cca565b905060006200208b6101008462002e03565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001d7b90849063a9059cbb60e01b9060640162001bf7565b60225460ff16620021575760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b6000620021ea826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166200226c9092919063ffffffff16565b80519091501562001d7b57808060200190518101906200220b9190620031f7565b62001d7b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c3a848460008585600080866001600160a01b0316858760405162002296919062002d38565b60006040518083038185875af1925050503d8060008114620022d5576040519150601f19603f3d011682016040523d82523d6000602084013e620022da565b606091505b5091509150620022ed87838387620022f8565b979650505050505050565b606083156200236c57825160000362002364576001600160a01b0385163b620023645760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c3a565b62000c3a8383815115620023835781518083602001fd5b8060405162461bcd60e51b815260040162000553919062003217565b61154c806200322d83390190565b6001600160a01b0381168114620023c357600080fd5b50565b8035620023d381620023ad565b919050565b803563ffffffff81168114620023d357600080fd5b60008083601f8401126200240057600080fd5b50813567ffffffffffffffff8111156200241957600080fd5b6020830191508360208285010111156200243257600080fd5b9250929050565b60008060008060008060a087890312156200245357600080fd5b86356200246081620023ad565b95506200247060208801620023d8565b945060408701356200248281620023ad565b935060608701359250608087013567ffffffffffffffff811115620024a657600080fd5b620024b489828a01620023ed565b979a9699509497509295939492505050565b60008060408385031215620024da57600080fd5b620024e583620023d8565b91506020830135620024f781620023ad565b809150509250929050565b6000602082840312156200251557600080fd5b81356200252281620023ad565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200256b576200256b62002529565b604052919050565b600082601f8301126200258557600080fd5b8135602067ffffffffffffffff821115620025a457620025a462002529565b8160051b620025b58282016200253f565b9283528481018201928281019087851115620025d057600080fd5b83870192505b84831015620022ed57823582529183019190830190620025d6565b600080600080608085870312156200260857600080fd5b84359350602085013567ffffffffffffffff808211156200262857600080fd5b620026368883890162002573565b94506040870135915080821682146200264e57600080fd5b509396929550929360600135925050565b60ff81168114620023c357600080fd5b600080600080600080600060e0888a0312156200268b57600080fd5b873562002698816200265f565b9650620026a860208901620023d8565b95506040880135620026ba81620023ad565b9450620026ca60608901620023d8565b93506080880135620026dc81620023ad565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002716576200271662002529565b50601f01601f191660200190565b600082601f8301126200273657600080fd5b81356200274d6200274782620026f9565b6200253f565b8181528460208386010111156200276357600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027a157600080fd5b8a3567ffffffffffffffff80821115620027ba57600080fd5b620027c88e838f0162002573565b9b50620027d860208e01620023d8565b9a5060408d0135995060608d01359850620027f660808e01620023d8565b97506200280660a08e01620023c6565b96506200281660c08e01620023d8565b95506200282660e08e01620023c6565b94506101008d013593506101208d01359150808211156200284657600080fd5b50620028558d828e0162002724565b9150509295989b9194979a5092959850565b6000806000606084860312156200287d57600080fd5b6200288884620023d8565b925060208401356200289a81620023ad565b91506040840135620028ac81620023ad565b809150509250925092565b600060208284031215620028ca57600080fd5b5035919050565b600080600080600080600060a0888a031215620028ed57600080fd5b620028f888620023d8565b965060208801356200290a81620023ad565b9550604088013567ffffffffffffffff808211156200292857600080fd5b620029368b838c01620023ed565b909750955060608a01359150808211156200295057600080fd5b506200295f8a828b01620023ed565b909450925050608088013562002975816200265f565b8091505092959891949750929550565b6000806000606084860312156200299b57600080fd5b620029a684620023d8565b92506020840135620029b881620023ad565b9150604084013567ffffffffffffffff811115620029d557600080fd5b620029e38682870162002724565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002a7257818101518382015260200162002a58565b8381111562000fce5750506000910152565b600082601f83011262002a9657600080fd5b815162002aa76200274782620026f9565b81815284602083860101111562002abd57600080fd5b62000c3a82602083016020870162002a55565b60006020828403121562002ae357600080fd5b815167ffffffffffffffff81111562002afb57600080fd5b62000c3a8482850162002a84565b60006020828403121562002b1c57600080fd5b815162002522816200265f565b6000815180845262002b4381602086016020860162002a55565b601f01601f19169290920160200192915050565b60608152600062002b6c606083018662002b29565b828103602084015262002b80818662002b29565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002be88483018762002b29565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002cdc5762002cdc62002c9e565b500490565b60006001820162002cf65762002cf662002cb4565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d2f9083018462002b29565b95945050505050565b6000825162002d4c81846020870162002a55565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002da357600080fd5b835167ffffffffffffffff8082111562002dbc57600080fd5b62002dca8783880162002a84565b9450602086015191508082111562002de157600080fd5b5062002df08682870162002a84565b9250506040840151620028ac816200265f565b60008262002e155762002e1562002c9e565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e5960608301878962002e1a565b828103602084015262002e6e81868862002e1a565b91505060ff831660408301529695505050505050565b6000835162002e9881846020880162002a55565b83519083019062002eae81836020880162002a55565b01949350505050565b6000808585111562002ec857600080fd5b8386111562002ed657600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002eff57600080fd5b873562002f0c81620023ad565b9650602088013562002f1e81620023ad565b955060408801359450606088013593506080880135620026dc816200265f565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b8015158114620023c357600080fd5b600080600080600080600080610100898b0312156200301957600080fd5b88356200302681620023ad565b975060208901356200303881620023ad565b965060408901359550606089013594506080890135620030588162002fec565b935060a08901356200306a816200265f565b979a969950949793969295929450505060c08201359160e0013590565b600181815b80851115620030c8578160001904821115620030ac57620030ac62002cb4565b80851615620030ba57918102915b93841c93908002906200308c565b509250929050565b600082620030e15750600162000a47565b81620030f05750600062000a47565b8160018114620031095760028114620031145762003134565b600191505062000a47565b60ff84111562003128576200312862002cb4565b50506001821b62000a47565b5060208310610133831016604e8410600b841016171562003159575081810a62000a47565b62003165838362003087565b80600019048211156200317c576200317c62002cb4565b029392505050565b6000620025228383620030d0565b600082821015620031a757620031a762002cb4565b500390565b60008219821115620031c257620031c262002cb4565b500190565b634e487b7160e01b600052600160045260246000fd5b600060208284031215620031f057600080fd5b5051919050565b6000602082840312156200320a57600080fd5b8151620025228162002fec565b60208152600062002522602083018462002b2956fe60c06040523480156200001157600080fd5b506040516200154c3803806200154c8339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611092620004ba60003960006104690152600081816102f9015261043301526110926000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611043565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161105557611055610fd1565b506001019056fea264697066735822122048db6a6222fa164d21a8fcb1cd25d2a9e0eee016393c37dcc7b7fd638ef787c264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212201e5d89c55c1f97b1f79752036fe68d3686187613f7595faa2b990d177c1a04c264736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001675760003560e01c80637b6323c111620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b80637b6323c1146200037057806381b1c17414620003955780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b806337883a3e116200011e57806337883a3e14620002a25780633ae0504714620002c45780633da8168214620002dc5780633e1970431462000301578063463855491462000326578063647c576c146200034b57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002439565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009c1565b348015620001db57600080fd5b50620001f3620001ed366004620024c6565b620009fa565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002502565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b50602754620001f3906001600160a01b031681565b348015620002d157600080fd5b506200022462000a4d565b348015620002e957600080fd5b50620001a1620002fb366004620025f1565b62000b40565b3480156200030e57600080fd5b5062000224620003203660046200266f565b62000c42565b3480156200033357600080fd5b50620001836200034536600462002780565b62000ccf565b3480156200035857600080fd5b50620001836200036a36600462002867565b62000e75565b3480156200037d57600080fd5b50620001836200038f36600462002780565b62000fd4565b348015620003a257600080fd5b50620001f3620003b4366004620028b7565b6024602052600090815260409020546001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028b7565b6200145b565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d366004620028d1565b620014a0565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b036600462002985565b620015b7565b348015620004c357600080fd5b506200018362001763565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028b7565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b81526004016200055390620029ed565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008db565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200073857604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac90604401600060405180830381600087803b1580156200070b57600080fd5b505af115801562000720573d6000803e3d6000fd5b505050508060200151935080600001519250620008d9565b84156200074d576200074d8a8888886200179a565b620007646001600160a01b038b1633308a62001bc2565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007bb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007e5919081019062002ad0565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000824573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200084e919081019062002ad0565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200088d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008b3919062002b09565b604051602001620008c79392919062002b57565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200091d98979695949392919062002b94565b60405180910390a16200094862000942600084868c8c8c888051906020012062000c42565b62001c2f565b6026546001600160a01b03166333d6247d6200096362000a4d565b6040518263ffffffff1660e01b81526004016200098291815260200190565b600060405180830381600087803b1580156200099d57600080fd5b505af1158015620009b2573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ee5760405162461bcd60e51b8152600401620005539062002c01565b620009f862001d80565b565b600060246000848460405160200162000a1592919062002c5e565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b37578260011660010362000ab8576001816020811062000a845762000a8462002c88565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000ae5565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000af260028462002cca565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b2e9062002ce1565b91505062000a58565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c33578160011660010362000bbd5786818151811062000b7b5762000b7b62002c88565b60200260200101518360405160200162000b9f929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c0f565b8287828151811062000bd35762000bd362002c88565b602002602001015160405160200162000bf6929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c1c60028362002cca565b91508062000c2a8162002ce1565b91505062000b50565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000cf55760405162461bcd60e51b81526004016200055390620029ed565b62000d0b8a8a8a8a8a8a8a8a8a8a600162001dde565b62000d1c8963ffffffff1662002069565b6000836001600160a01b03168387898560405160240162000d409392919062002cfd565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d77919062002d38565b60006040518083038185875af1925050503d806000811462000db6576040519150601f19603f3d011682016040523d82523d6000602084013e62000dbb565b606091505b505090508062000e275760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e6095949392919062002d56565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000e965750600054600160ff909116105b8062000eb25750303b15801562000eb2575060005460ff166001145b62000f175760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f3b576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fce576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff161562000ffa5760405162461bcd60e51b81526004016200055390620029ed565b620010108a8a8a8a8a8a8a8a8a8a600062001dde565b620010218963ffffffff1662002069565b6001600160a01b0385166200111657604080516000808252602082019092526001600160a01b0385169084906040516200105c919062002d38565b60006040518083038185875af1925050503d80600081146200109b576040519150601f19603f3d011682016040523d82523d6000602084013e620010a0565b606091505b50509050806200110f5760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b506200140e565b60225463ffffffff6101009091048116908716036200114b57620011456001600160a01b0386168484620020ab565b6200140e565b600086866040516020016200116292919062002c5e565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013a657600080600085806020019051810190620011b4919062002d8d565b925092509250600085848484604051620011ce906200239f565b620011dc9392919062002b57565b8190604051809103906000f5905080158015620011fd573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f1990604401600060405180830381600087803b1580156200124d57600080fd5b505af115801562001262573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013949392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200140b565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f1990604401600060405180830381600087803b158015620013f157600080fd5b505af115801562001406573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200144795949392919062002d56565b60405180910390a150505050505050505050565b6000806200146c6101008462002cca565b905060006200147e6101008562002e03565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014b892919062002c5e565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014eb906200239f565b601f1982820381018352601f90910116604081905262001518908d908d908d908d908d9060200162002e43565b60408051601f198184030181529082905262001538929160200162002e84565b604051602081830303815290604052805190602001206040516020016200159194939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015dd5760405162461bcd60e51b81526004016200055390620029ed565b60225463ffffffff610100909104811690841603620016655760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016b998979695949392919062002b94565b60405180910390a1620016f0620009426001602260019054906101000a900463ffffffff1633878734888051906020012062000c42565b6026546001600160a01b03166333d6247d6200170b62000a4d565b6040518263ffffffff1660e01b81526004016200172a91815260200190565b600060405180830381600087803b1580156200174557600080fd5b505af11580156200175a573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017905760405162461bcd60e51b8152600401620005539062002c01565b620009f8620020dd565b6000620017dd83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200218c92505050565b9050632afa533160e01b6001600160e01b0319821601620019d65760008080808080806200180f896004818d62002eb7565b8101906200181e919062002ee3565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018605760405162461bcd60e51b8152600401620005539062002f3e565b6001600160a01b03861630146200188b5760405162461bcd60e51b8152600401620005539062002f9b565b8a8514620019025760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162001982919062002d38565b6000604051808303816000865af19150503d8060008114620019c1576040519150601f19603f3d011682016040523d82523d6000602084013e620019c6565b606091505b5050505050505050505062001bbb565b6001600160e01b031981166323f2ebc360e21b1462001a4c5760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a648a6004818e62002eb7565b81019062001a73919062002ffb565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001ab75760405162461bcd60e51b8152600401620005539062002f3e565b6001600160a01b038716301462001ae25760405162461bcd60e51b8152600401620005539062002f9b565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001b6b919062002d38565b6000604051808303816000865af19150503d806000811462001baa576040519150601f19603f3d011682016040523d82523d6000602084013e62001baf565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fce9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262002193565b80600162001c406020600262003184565b62001c4c919062003192565b6021541062001cb15760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cc69190620031ac565b909155505060215460005b602081101562001d70578160011660010362001d0657826001826020811062001cfe5762001cfe62002c88565b015550505050565b6001816020811062001d1c5762001d1c62002c88565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d59919062002cca565b91508062001d678162002ce1565b91505062001cd1565b5062001d7b620031c7565b505050565b60225460ff161562001da65760405162461bcd60e51b81526004016200055390620029ed565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001def8a63ffffffff166200145b565b1562001e465760405162461bcd60e51b815260206004820152603060248201526000805160206200477983398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001eba573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ee09190620031dd565b90508060000362001f495760405162461bcd60e51b815260206004820152603960248201526000805160206200477983398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff878116610100909204161462001fcb5760405162461bcd60e51b815260206004820152604360248201526000805160206200477983398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff1662001fe957508862001fec565b50895b6200201762002008848b8b8b8b8b8b8051906020012062000c42565b8e8e63ffffffff168462000b40565b620009b25760405162461bcd60e51b815260206004820152602c60248201526000805160206200477983398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020796101008362002cca565b905060006200208b6101008462002e03565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001d7b90849063a9059cbb60e01b9060640162001bf7565b60225460ff16620021575760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b6000620021ea826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166200226c9092919063ffffffff16565b80519091501562001d7b57808060200190518101906200220b9190620031f7565b62001d7b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c3a848460008585600080866001600160a01b0316858760405162002296919062002d38565b60006040518083038185875af1925050503d8060008114620022d5576040519150601f19603f3d011682016040523d82523d6000602084013e620022da565b606091505b5091509150620022ed87838387620022f8565b979650505050505050565b606083156200236c57825160000362002364576001600160a01b0385163b620023645760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c3a565b62000c3a8383815115620023835781518083602001fd5b8060405162461bcd60e51b815260040162000553919062003217565b61154c806200322d83390190565b6001600160a01b0381168114620023c357600080fd5b50565b8035620023d381620023ad565b919050565b803563ffffffff81168114620023d357600080fd5b60008083601f8401126200240057600080fd5b50813567ffffffffffffffff8111156200241957600080fd5b6020830191508360208285010111156200243257600080fd5b9250929050565b60008060008060008060a087890312156200245357600080fd5b86356200246081620023ad565b95506200247060208801620023d8565b945060408701356200248281620023ad565b935060608701359250608087013567ffffffffffffffff811115620024a657600080fd5b620024b489828a01620023ed565b979a9699509497509295939492505050565b60008060408385031215620024da57600080fd5b620024e583620023d8565b91506020830135620024f781620023ad565b809150509250929050565b6000602082840312156200251557600080fd5b81356200252281620023ad565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200256b576200256b62002529565b604052919050565b600082601f8301126200258557600080fd5b8135602067ffffffffffffffff821115620025a457620025a462002529565b8160051b620025b58282016200253f565b9283528481018201928281019087851115620025d057600080fd5b83870192505b84831015620022ed57823582529183019190830190620025d6565b600080600080608085870312156200260857600080fd5b84359350602085013567ffffffffffffffff808211156200262857600080fd5b620026368883890162002573565b94506040870135915080821682146200264e57600080fd5b509396929550929360600135925050565b60ff81168114620023c357600080fd5b600080600080600080600060e0888a0312156200268b57600080fd5b873562002698816200265f565b9650620026a860208901620023d8565b95506040880135620026ba81620023ad565b9450620026ca60608901620023d8565b93506080880135620026dc81620023ad565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002716576200271662002529565b50601f01601f191660200190565b600082601f8301126200273657600080fd5b81356200274d6200274782620026f9565b6200253f565b8181528460208386010111156200276357600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027a157600080fd5b8a3567ffffffffffffffff80821115620027ba57600080fd5b620027c88e838f0162002573565b9b50620027d860208e01620023d8565b9a5060408d0135995060608d01359850620027f660808e01620023d8565b97506200280660a08e01620023c6565b96506200281660c08e01620023d8565b95506200282660e08e01620023c6565b94506101008d013593506101208d01359150808211156200284657600080fd5b50620028558d828e0162002724565b9150509295989b9194979a5092959850565b6000806000606084860312156200287d57600080fd5b6200288884620023d8565b925060208401356200289a81620023ad565b91506040840135620028ac81620023ad565b809150509250925092565b600060208284031215620028ca57600080fd5b5035919050565b600080600080600080600060a0888a031215620028ed57600080fd5b620028f888620023d8565b965060208801356200290a81620023ad565b9550604088013567ffffffffffffffff808211156200292857600080fd5b620029368b838c01620023ed565b909750955060608a01359150808211156200295057600080fd5b506200295f8a828b01620023ed565b909450925050608088013562002975816200265f565b8091505092959891949750929550565b6000806000606084860312156200299b57600080fd5b620029a684620023d8565b92506020840135620029b881620023ad565b9150604084013567ffffffffffffffff811115620029d557600080fd5b620029e38682870162002724565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002a7257818101518382015260200162002a58565b8381111562000fce5750506000910152565b600082601f83011262002a9657600080fd5b815162002aa76200274782620026f9565b81815284602083860101111562002abd57600080fd5b62000c3a82602083016020870162002a55565b60006020828403121562002ae357600080fd5b815167ffffffffffffffff81111562002afb57600080fd5b62000c3a8482850162002a84565b60006020828403121562002b1c57600080fd5b815162002522816200265f565b6000815180845262002b4381602086016020860162002a55565b601f01601f19169290920160200192915050565b60608152600062002b6c606083018662002b29565b828103602084015262002b80818662002b29565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002be88483018762002b29565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002cdc5762002cdc62002c9e565b500490565b60006001820162002cf65762002cf662002cb4565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d2f9083018462002b29565b95945050505050565b6000825162002d4c81846020870162002a55565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002da357600080fd5b835167ffffffffffffffff8082111562002dbc57600080fd5b62002dca8783880162002a84565b9450602086015191508082111562002de157600080fd5b5062002df08682870162002a84565b9250506040840151620028ac816200265f565b60008262002e155762002e1562002c9e565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e5960608301878962002e1a565b828103602084015262002e6e81868862002e1a565b91505060ff831660408301529695505050505050565b6000835162002e9881846020880162002a55565b83519083019062002eae81836020880162002a55565b01949350505050565b6000808585111562002ec857600080fd5b8386111562002ed657600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002eff57600080fd5b873562002f0c81620023ad565b9650602088013562002f1e81620023ad565b955060408801359450606088013593506080880135620026dc816200265f565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b8015158114620023c357600080fd5b600080600080600080600080610100898b0312156200301957600080fd5b88356200302681620023ad565b975060208901356200303881620023ad565b965060408901359550606089013594506080890135620030588162002fec565b935060a08901356200306a816200265f565b979a969950949793969295929450505060c08201359160e0013590565b600181815b80851115620030c8578160001904821115620030ac57620030ac62002cb4565b80851615620030ba57918102915b93841c93908002906200308c565b509250929050565b600082620030e15750600162000a47565b81620030f05750600062000a47565b8160018114620031095760028114620031145762003134565b600191505062000a47565b60ff84111562003128576200312862002cb4565b50506001821b62000a47565b5060208310610133831016604e8410600b841016171562003159575081810a62000a47565b62003165838362003087565b80600019048211156200317c576200317c62002cb4565b029392505050565b6000620025228383620030d0565b600082821015620031a757620031a762002cb4565b500390565b60008219821115620031c257620031c262002cb4565b500190565b634e487b7160e01b600052600160045260246000fd5b600060208284031215620031f057600080fd5b5051919050565b6000602082840312156200320a57600080fd5b8151620025228162002fec565b60208152600062002522602083018462002b2956fe60c06040523480156200001157600080fd5b506040516200154c3803806200154c8339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611092620004ba60003960006104690152600081816102f9015261043301526110926000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611043565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161105557611055610fd1565b506001019056fea264697066735822122048db6a6222fa164d21a8fcb1cd25d2a9e0eee016393c37dcc7b7fd638ef787c264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212201e5d89c55c1f97b1f79752036fe68d3686187613f7595faa2b990d177c1a04c264736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506147ce806100206000396000f3fe608060405260043610620001675760003560e01c80637b6323c111620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b80637b6323c1146200037057806381b1c17414620003955780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b806337883a3e116200011e57806337883a3e14620002a25780633ae0504714620002c45780633da8168214620002dc5780633e1970431462000301578063463855491462000326578063647c576c146200034b57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002439565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009c1565b348015620001db57600080fd5b50620001f3620001ed366004620024c6565b620009fa565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002502565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b50602754620001f3906001600160a01b031681565b348015620002d157600080fd5b506200022462000a4d565b348015620002e957600080fd5b50620001a1620002fb366004620025f1565b62000b40565b3480156200030e57600080fd5b5062000224620003203660046200266f565b62000c42565b3480156200033357600080fd5b50620001836200034536600462002780565b62000ccf565b3480156200035857600080fd5b50620001836200036a36600462002867565b62000e75565b3480156200037d57600080fd5b50620001836200038f36600462002780565b62000fd4565b348015620003a257600080fd5b50620001f3620003b4366004620028b7565b6024602052600090815260409020546001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028b7565b6200145b565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d366004620028d1565b620014a0565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b036600462002985565b620015b7565b348015620004c357600080fd5b506200018362001763565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028b7565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b81526004016200055390620029ed565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008db565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200073857604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac90604401600060405180830381600087803b1580156200070b57600080fd5b505af115801562000720573d6000803e3d6000fd5b505050508060200151935080600001519250620008d9565b84156200074d576200074d8a8888886200179a565b620007646001600160a01b038b1633308a62001bc2565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007bb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007e5919081019062002ad0565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000824573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200084e919081019062002ad0565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200088d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008b3919062002b09565b604051602001620008c79392919062002b57565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200091d98979695949392919062002b94565b60405180910390a16200094862000942600084868c8c8c888051906020012062000c42565b62001c2f565b6026546001600160a01b03166333d6247d6200096362000a4d565b6040518263ffffffff1660e01b81526004016200098291815260200190565b600060405180830381600087803b1580156200099d57600080fd5b505af1158015620009b2573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ee5760405162461bcd60e51b8152600401620005539062002c01565b620009f862001d80565b565b600060246000848460405160200162000a1592919062002c5e565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b37578260011660010362000ab8576001816020811062000a845762000a8462002c88565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000ae5565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000af260028462002cca565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b2e9062002ce1565b91505062000a58565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c33578160011660010362000bbd5786818151811062000b7b5762000b7b62002c88565b60200260200101518360405160200162000b9f929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c0f565b8287828151811062000bd35762000bd362002c88565b602002602001015160405160200162000bf6929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c1c60028362002cca565b91508062000c2a8162002ce1565b91505062000b50565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000cf55760405162461bcd60e51b81526004016200055390620029ed565b62000d0b8a8a8a8a8a8a8a8a8a8a600162001dde565b62000d1c8963ffffffff1662002069565b6000836001600160a01b03168387898560405160240162000d409392919062002cfd565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d77919062002d38565b60006040518083038185875af1925050503d806000811462000db6576040519150601f19603f3d011682016040523d82523d6000602084013e62000dbb565b606091505b505090508062000e275760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e6095949392919062002d56565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000e965750600054600160ff909116105b8062000eb25750303b15801562000eb2575060005460ff166001145b62000f175760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f3b576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fce576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff161562000ffa5760405162461bcd60e51b81526004016200055390620029ed565b620010108a8a8a8a8a8a8a8a8a8a600062001dde565b620010218963ffffffff1662002069565b6001600160a01b0385166200111657604080516000808252602082019092526001600160a01b0385169084906040516200105c919062002d38565b60006040518083038185875af1925050503d80600081146200109b576040519150601f19603f3d011682016040523d82523d6000602084013e620010a0565b606091505b50509050806200110f5760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b506200140e565b60225463ffffffff6101009091048116908716036200114b57620011456001600160a01b0386168484620020ab565b6200140e565b600086866040516020016200116292919062002c5e565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013a657600080600085806020019051810190620011b4919062002d8d565b925092509250600085848484604051620011ce906200239f565b620011dc9392919062002b57565b8190604051809103906000f5905080158015620011fd573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f1990604401600060405180830381600087803b1580156200124d57600080fd5b505af115801562001262573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013949392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200140b565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f1990604401600060405180830381600087803b158015620013f157600080fd5b505af115801562001406573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200144795949392919062002d56565b60405180910390a150505050505050505050565b6000806200146c6101008462002cca565b905060006200147e6101008562002e03565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014b892919062002c5e565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014eb906200239f565b601f1982820381018352601f90910116604081905262001518908d908d908d908d908d9060200162002e43565b60408051601f198184030181529082905262001538929160200162002e84565b604051602081830303815290604052805190602001206040516020016200159194939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015dd5760405162461bcd60e51b81526004016200055390620029ed565b60225463ffffffff610100909104811690841603620016655760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016b998979695949392919062002b94565b60405180910390a1620016f0620009426001602260019054906101000a900463ffffffff1633878734888051906020012062000c42565b6026546001600160a01b03166333d6247d6200170b62000a4d565b6040518263ffffffff1660e01b81526004016200172a91815260200190565b600060405180830381600087803b1580156200174557600080fd5b505af11580156200175a573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017905760405162461bcd60e51b8152600401620005539062002c01565b620009f8620020dd565b6000620017dd83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200218c92505050565b9050632afa533160e01b6001600160e01b0319821601620019d65760008080808080806200180f896004818d62002eb7565b8101906200181e919062002ee3565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018605760405162461bcd60e51b8152600401620005539062002f3e565b6001600160a01b03861630146200188b5760405162461bcd60e51b8152600401620005539062002f9b565b8a8514620019025760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162001982919062002d38565b6000604051808303816000865af19150503d8060008114620019c1576040519150601f19603f3d011682016040523d82523d6000602084013e620019c6565b606091505b5050505050505050505062001bbb565b6001600160e01b031981166323f2ebc360e21b1462001a4c5760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a648a6004818e62002eb7565b81019062001a73919062002ffb565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001ab75760405162461bcd60e51b8152600401620005539062002f3e565b6001600160a01b038716301462001ae25760405162461bcd60e51b8152600401620005539062002f9b565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001b6b919062002d38565b6000604051808303816000865af19150503d806000811462001baa576040519150601f19603f3d011682016040523d82523d6000602084013e62001baf565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fce9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262002193565b80600162001c406020600262003184565b62001c4c919062003192565b6021541062001cb15760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cc69190620031ac565b909155505060215460005b602081101562001d70578160011660010362001d0657826001826020811062001cfe5762001cfe62002c88565b015550505050565b6001816020811062001d1c5762001d1c62002c88565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d59919062002cca565b91508062001d678162002ce1565b91505062001cd1565b5062001d7b620031c7565b505050565b60225460ff161562001da65760405162461bcd60e51b81526004016200055390620029ed565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001def8a63ffffffff166200145b565b1562001e465760405162461bcd60e51b815260206004820152603060248201526000805160206200477983398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001eba573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ee09190620031dd565b90508060000362001f495760405162461bcd60e51b815260206004820152603960248201526000805160206200477983398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff878116610100909204161462001fcb5760405162461bcd60e51b815260206004820152604360248201526000805160206200477983398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff1662001fe957508862001fec565b50895b6200201762002008848b8b8b8b8b8b8051906020012062000c42565b8e8e63ffffffff168462000b40565b620009b25760405162461bcd60e51b815260206004820152602c60248201526000805160206200477983398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020796101008362002cca565b905060006200208b6101008462002e03565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001d7b90849063a9059cbb60e01b9060640162001bf7565b60225460ff16620021575760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b6000620021ea826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166200226c9092919063ffffffff16565b80519091501562001d7b57808060200190518101906200220b9190620031f7565b62001d7b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c3a848460008585600080866001600160a01b0316858760405162002296919062002d38565b60006040518083038185875af1925050503d8060008114620022d5576040519150601f19603f3d011682016040523d82523d6000602084013e620022da565b606091505b5091509150620022ed87838387620022f8565b979650505050505050565b606083156200236c57825160000362002364576001600160a01b0385163b620023645760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c3a565b62000c3a8383815115620023835781518083602001fd5b8060405162461bcd60e51b815260040162000553919062003217565b61154c806200322d83390190565b6001600160a01b0381168114620023c357600080fd5b50565b8035620023d381620023ad565b919050565b803563ffffffff81168114620023d357600080fd5b60008083601f8401126200240057600080fd5b50813567ffffffffffffffff8111156200241957600080fd5b6020830191508360208285010111156200243257600080fd5b9250929050565b60008060008060008060a087890312156200245357600080fd5b86356200246081620023ad565b95506200247060208801620023d8565b945060408701356200248281620023ad565b935060608701359250608087013567ffffffffffffffff811115620024a657600080fd5b620024b489828a01620023ed565b979a9699509497509295939492505050565b60008060408385031215620024da57600080fd5b620024e583620023d8565b91506020830135620024f781620023ad565b809150509250929050565b6000602082840312156200251557600080fd5b81356200252281620023ad565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200256b576200256b62002529565b604052919050565b600082601f8301126200258557600080fd5b8135602067ffffffffffffffff821115620025a457620025a462002529565b8160051b620025b58282016200253f565b9283528481018201928281019087851115620025d057600080fd5b83870192505b84831015620022ed57823582529183019190830190620025d6565b600080600080608085870312156200260857600080fd5b84359350602085013567ffffffffffffffff808211156200262857600080fd5b620026368883890162002573565b94506040870135915080821682146200264e57600080fd5b509396929550929360600135925050565b60ff81168114620023c357600080fd5b600080600080600080600060e0888a0312156200268b57600080fd5b873562002698816200265f565b9650620026a860208901620023d8565b95506040880135620026ba81620023ad565b9450620026ca60608901620023d8565b93506080880135620026dc81620023ad565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002716576200271662002529565b50601f01601f191660200190565b600082601f8301126200273657600080fd5b81356200274d6200274782620026f9565b6200253f565b8181528460208386010111156200276357600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027a157600080fd5b8a3567ffffffffffffffff80821115620027ba57600080fd5b620027c88e838f0162002573565b9b50620027d860208e01620023d8565b9a5060408d0135995060608d01359850620027f660808e01620023d8565b97506200280660a08e01620023c6565b96506200281660c08e01620023d8565b95506200282660e08e01620023c6565b94506101008d013593506101208d01359150808211156200284657600080fd5b50620028558d828e0162002724565b9150509295989b9194979a5092959850565b6000806000606084860312156200287d57600080fd5b6200288884620023d8565b925060208401356200289a81620023ad565b91506040840135620028ac81620023ad565b809150509250925092565b600060208284031215620028ca57600080fd5b5035919050565b600080600080600080600060a0888a031215620028ed57600080fd5b620028f888620023d8565b965060208801356200290a81620023ad565b9550604088013567ffffffffffffffff808211156200292857600080fd5b620029368b838c01620023ed565b909750955060608a01359150808211156200295057600080fd5b506200295f8a828b01620023ed565b909450925050608088013562002975816200265f565b8091505092959891949750929550565b6000806000606084860312156200299b57600080fd5b620029a684620023d8565b92506020840135620029b881620023ad565b9150604084013567ffffffffffffffff811115620029d557600080fd5b620029e38682870162002724565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002a7257818101518382015260200162002a58565b8381111562000fce5750506000910152565b600082601f83011262002a9657600080fd5b815162002aa76200274782620026f9565b81815284602083860101111562002abd57600080fd5b62000c3a82602083016020870162002a55565b60006020828403121562002ae357600080fd5b815167ffffffffffffffff81111562002afb57600080fd5b62000c3a8482850162002a84565b60006020828403121562002b1c57600080fd5b815162002522816200265f565b6000815180845262002b4381602086016020860162002a55565b601f01601f19169290920160200192915050565b60608152600062002b6c606083018662002b29565b828103602084015262002b80818662002b29565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002be88483018762002b29565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002cdc5762002cdc62002c9e565b500490565b60006001820162002cf65762002cf662002cb4565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d2f9083018462002b29565b95945050505050565b6000825162002d4c81846020870162002a55565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002da357600080fd5b835167ffffffffffffffff8082111562002dbc57600080fd5b62002dca8783880162002a84565b9450602086015191508082111562002de157600080fd5b5062002df08682870162002a84565b9250506040840151620028ac816200265f565b60008262002e155762002e1562002c9e565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e5960608301878962002e1a565b828103602084015262002e6e81868862002e1a565b91505060ff831660408301529695505050505050565b6000835162002e9881846020880162002a55565b83519083019062002eae81836020880162002a55565b01949350505050565b6000808585111562002ec857600080fd5b8386111562002ed657600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002eff57600080fd5b873562002f0c81620023ad565b9650602088013562002f1e81620023ad565b955060408801359450606088013593506080880135620026dc816200265f565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b8015158114620023c357600080fd5b600080600080600080600080610100898b0312156200301957600080fd5b88356200302681620023ad565b975060208901356200303881620023ad565b965060408901359550606089013594506080890135620030588162002fec565b935060a08901356200306a816200265f565b979a969950949793969295929450505060c08201359160e0013590565b600181815b80851115620030c8578160001904821115620030ac57620030ac62002cb4565b80851615620030ba57918102915b93841c93908002906200308c565b509250929050565b600082620030e15750600162000a47565b81620030f05750600062000a47565b8160018114620031095760028114620031145762003134565b600191505062000a47565b60ff84111562003128576200312862002cb4565b50506001821b62000a47565b5060208310610133831016604e8410600b841016171562003159575081810a62000a47565b62003165838362003087565b80600019048211156200317c576200317c62002cb4565b029392505050565b6000620025228383620030d0565b600082821015620031a757620031a762002cb4565b500390565b60008219821115620031c257620031c262002cb4565b500190565b634e487b7160e01b600052600160045260246000fd5b600060208284031215620031f057600080fd5b5051919050565b6000602082840312156200320a57600080fd5b8151620025228162002fec565b60208152600062002522602083018462002b2956fe60c06040523480156200001157600080fd5b506040516200154c3803806200154c8339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611092620004ba60003960006104690152600081816102f9015261043301526110926000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611043565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161105557611055610fd1565b506001019056fea264697066735822122048db6a6222fa164d21a8fcb1cd25d2a9e0eee016393c37dcc7b7fd638ef787c264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220594042943b3c64253ad00d87284d7bc31fb7db128afcfabcccd37860d4422c4564736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001675760003560e01c80637b6323c111620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b80637b6323c1146200037057806381b1c17414620003955780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b806337883a3e116200011e57806337883a3e14620002a25780633ae0504714620002c45780633da8168214620002dc5780633e1970431462000301578063463855491462000326578063647c576c146200034b57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002439565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009c1565b348015620001db57600080fd5b50620001f3620001ed366004620024c6565b620009fa565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002502565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b50602754620001f3906001600160a01b031681565b348015620002d157600080fd5b506200022462000a4d565b348015620002e957600080fd5b50620001a1620002fb366004620025f1565b62000b40565b3480156200030e57600080fd5b5062000224620003203660046200266f565b62000c42565b3480156200033357600080fd5b50620001836200034536600462002780565b62000ccf565b3480156200035857600080fd5b50620001836200036a36600462002867565b62000e75565b3480156200037d57600080fd5b50620001836200038f36600462002780565b62000fd4565b348015620003a257600080fd5b50620001f3620003b4366004620028b7565b6024602052600090815260409020546001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028b7565b6200145b565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d366004620028d1565b620014a0565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b036600462002985565b620015b7565b348015620004c357600080fd5b506200018362001763565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028b7565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b81526004016200055390620029ed565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008db565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200073857604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac90604401600060405180830381600087803b1580156200070b57600080fd5b505af115801562000720573d6000803e3d6000fd5b505050508060200151935080600001519250620008d9565b84156200074d576200074d8a8888886200179a565b620007646001600160a01b038b1633308a62001bc2565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007bb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007e5919081019062002ad0565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000824573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200084e919081019062002ad0565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200088d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008b3919062002b09565b604051602001620008c79392919062002b57565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200091d98979695949392919062002b94565b60405180910390a16200094862000942600084868c8c8c888051906020012062000c42565b62001c2f565b6026546001600160a01b03166333d6247d6200096362000a4d565b6040518263ffffffff1660e01b81526004016200098291815260200190565b600060405180830381600087803b1580156200099d57600080fd5b505af1158015620009b2573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ee5760405162461bcd60e51b8152600401620005539062002c01565b620009f862001d80565b565b600060246000848460405160200162000a1592919062002c5e565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b37578260011660010362000ab8576001816020811062000a845762000a8462002c88565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000ae5565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000af260028462002cca565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b2e9062002ce1565b91505062000a58565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c33578160011660010362000bbd5786818151811062000b7b5762000b7b62002c88565b60200260200101518360405160200162000b9f929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c0f565b8287828151811062000bd35762000bd362002c88565b602002602001015160405160200162000bf6929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c1c60028362002cca565b91508062000c2a8162002ce1565b91505062000b50565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000cf55760405162461bcd60e51b81526004016200055390620029ed565b62000d0b8a8a8a8a8a8a8a8a8a8a600162001dde565b62000d1c8963ffffffff1662002069565b6000836001600160a01b03168387898560405160240162000d409392919062002cfd565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d77919062002d38565b60006040518083038185875af1925050503d806000811462000db6576040519150601f19603f3d011682016040523d82523d6000602084013e62000dbb565b606091505b505090508062000e275760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e6095949392919062002d56565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000e965750600054600160ff909116105b8062000eb25750303b15801562000eb2575060005460ff166001145b62000f175760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f3b576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fce576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff161562000ffa5760405162461bcd60e51b81526004016200055390620029ed565b620010108a8a8a8a8a8a8a8a8a8a600062001dde565b620010218963ffffffff1662002069565b6001600160a01b0385166200111657604080516000808252602082019092526001600160a01b0385169084906040516200105c919062002d38565b60006040518083038185875af1925050503d80600081146200109b576040519150601f19603f3d011682016040523d82523d6000602084013e620010a0565b606091505b50509050806200110f5760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b506200140e565b60225463ffffffff6101009091048116908716036200114b57620011456001600160a01b0386168484620020ab565b6200140e565b600086866040516020016200116292919062002c5e565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013a657600080600085806020019051810190620011b4919062002d8d565b925092509250600085848484604051620011ce906200239f565b620011dc9392919062002b57565b8190604051809103906000f5905080158015620011fd573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f1990604401600060405180830381600087803b1580156200124d57600080fd5b505af115801562001262573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013949392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200140b565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f1990604401600060405180830381600087803b158015620013f157600080fd5b505af115801562001406573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200144795949392919062002d56565b60405180910390a150505050505050505050565b6000806200146c6101008462002cca565b905060006200147e6101008562002e03565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014b892919062002c5e565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014eb906200239f565b601f1982820381018352601f90910116604081905262001518908d908d908d908d908d9060200162002e43565b60408051601f198184030181529082905262001538929160200162002e84565b604051602081830303815290604052805190602001206040516020016200159194939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015dd5760405162461bcd60e51b81526004016200055390620029ed565b60225463ffffffff610100909104811690841603620016655760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016b998979695949392919062002b94565b60405180910390a1620016f0620009426001602260019054906101000a900463ffffffff1633878734888051906020012062000c42565b6026546001600160a01b03166333d6247d6200170b62000a4d565b6040518263ffffffff1660e01b81526004016200172a91815260200190565b600060405180830381600087803b1580156200174557600080fd5b505af11580156200175a573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017905760405162461bcd60e51b8152600401620005539062002c01565b620009f8620020dd565b6000620017dd83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200218c92505050565b9050632afa533160e01b6001600160e01b0319821601620019d65760008080808080806200180f896004818d62002eb7565b8101906200181e919062002ee3565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018605760405162461bcd60e51b8152600401620005539062002f3e565b6001600160a01b03861630146200188b5760405162461bcd60e51b8152600401620005539062002f9b565b8a8514620019025760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162001982919062002d38565b6000604051808303816000865af19150503d8060008114620019c1576040519150601f19603f3d011682016040523d82523d6000602084013e620019c6565b606091505b5050505050505050505062001bbb565b6001600160e01b031981166323f2ebc360e21b1462001a4c5760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a648a6004818e62002eb7565b81019062001a73919062002ffb565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001ab75760405162461bcd60e51b8152600401620005539062002f3e565b6001600160a01b038716301462001ae25760405162461bcd60e51b8152600401620005539062002f9b565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001b6b919062002d38565b6000604051808303816000865af19150503d806000811462001baa576040519150601f19603f3d011682016040523d82523d6000602084013e62001baf565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fce9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262002193565b80600162001c406020600262003184565b62001c4c919062003192565b6021541062001cb15760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cc69190620031ac565b909155505060215460005b602081101562001d70578160011660010362001d0657826001826020811062001cfe5762001cfe62002c88565b015550505050565b6001816020811062001d1c5762001d1c62002c88565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d59919062002cca565b91508062001d678162002ce1565b91505062001cd1565b5062001d7b620031c7565b505050565b60225460ff161562001da65760405162461bcd60e51b81526004016200055390620029ed565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001def8a63ffffffff166200145b565b1562001e465760405162461bcd60e51b815260206004820152603060248201526000805160206200477983398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001eba573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ee09190620031dd565b90508060000362001f495760405162461bcd60e51b815260206004820152603960248201526000805160206200477983398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff878116610100909204161462001fcb5760405162461bcd60e51b815260206004820152604360248201526000805160206200477983398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff1662001fe957508862001fec565b50895b6200201762002008848b8b8b8b8b8b8051906020012062000c42565b8e8e63ffffffff168462000b40565b620009b25760405162461bcd60e51b815260206004820152602c60248201526000805160206200477983398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020796101008362002cca565b905060006200208b6101008462002e03565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001d7b90849063a9059cbb60e01b9060640162001bf7565b60225460ff16620021575760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b6000620021ea826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166200226c9092919063ffffffff16565b80519091501562001d7b57808060200190518101906200220b9190620031f7565b62001d7b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c3a848460008585600080866001600160a01b0316858760405162002296919062002d38565b60006040518083038185875af1925050503d8060008114620022d5576040519150601f19603f3d011682016040523d82523d6000602084013e620022da565b606091505b5091509150620022ed87838387620022f8565b979650505050505050565b606083156200236c57825160000362002364576001600160a01b0385163b620023645760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c3a565b62000c3a8383815115620023835781518083602001fd5b8060405162461bcd60e51b815260040162000553919062003217565b61154c806200322d83390190565b6001600160a01b0381168114620023c357600080fd5b50565b8035620023d381620023ad565b919050565b803563ffffffff81168114620023d357600080fd5b60008083601f8401126200240057600080fd5b50813567ffffffffffffffff8111156200241957600080fd5b6020830191508360208285010111156200243257600080fd5b9250929050565b60008060008060008060a087890312156200245357600080fd5b86356200246081620023ad565b95506200247060208801620023d8565b945060408701356200248281620023ad565b935060608701359250608087013567ffffffffffffffff811115620024a657600080fd5b620024b489828a01620023ed565b979a9699509497509295939492505050565b60008060408385031215620024da57600080fd5b620024e583620023d8565b91506020830135620024f781620023ad565b809150509250929050565b6000602082840312156200251557600080fd5b81356200252281620023ad565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200256b576200256b62002529565b604052919050565b600082601f8301126200258557600080fd5b8135602067ffffffffffffffff821115620025a457620025a462002529565b8160051b620025b58282016200253f565b9283528481018201928281019087851115620025d057600080fd5b83870192505b84831015620022ed57823582529183019190830190620025d6565b600080600080608085870312156200260857600080fd5b84359350602085013567ffffffffffffffff808211156200262857600080fd5b620026368883890162002573565b94506040870135915080821682146200264e57600080fd5b509396929550929360600135925050565b60ff81168114620023c357600080fd5b600080600080600080600060e0888a0312156200268b57600080fd5b873562002698816200265f565b9650620026a860208901620023d8565b95506040880135620026ba81620023ad565b9450620026ca60608901620023d8565b93506080880135620026dc81620023ad565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002716576200271662002529565b50601f01601f191660200190565b600082601f8301126200273657600080fd5b81356200274d6200274782620026f9565b6200253f565b8181528460208386010111156200276357600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027a157600080fd5b8a3567ffffffffffffffff80821115620027ba57600080fd5b620027c88e838f0162002573565b9b50620027d860208e01620023d8565b9a5060408d0135995060608d01359850620027f660808e01620023d8565b97506200280660a08e01620023c6565b96506200281660c08e01620023d8565b95506200282660e08e01620023c6565b94506101008d013593506101208d01359150808211156200284657600080fd5b50620028558d828e0162002724565b9150509295989b9194979a5092959850565b6000806000606084860312156200287d57600080fd5b6200288884620023d8565b925060208401356200289a81620023ad565b91506040840135620028ac81620023ad565b809150509250925092565b600060208284031215620028ca57600080fd5b5035919050565b600080600080600080600060a0888a031215620028ed57600080fd5b620028f888620023d8565b965060208801356200290a81620023ad565b9550604088013567ffffffffffffffff808211156200292857600080fd5b620029368b838c01620023ed565b909750955060608a01359150808211156200295057600080fd5b506200295f8a828b01620023ed565b909450925050608088013562002975816200265f565b8091505092959891949750929550565b6000806000606084860312156200299b57600080fd5b620029a684620023d8565b92506020840135620029b881620023ad565b9150604084013567ffffffffffffffff811115620029d557600080fd5b620029e38682870162002724565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002a7257818101518382015260200162002a58565b8381111562000fce5750506000910152565b600082601f83011262002a9657600080fd5b815162002aa76200274782620026f9565b81815284602083860101111562002abd57600080fd5b62000c3a82602083016020870162002a55565b60006020828403121562002ae357600080fd5b815167ffffffffffffffff81111562002afb57600080fd5b62000c3a8482850162002a84565b60006020828403121562002b1c57600080fd5b815162002522816200265f565b6000815180845262002b4381602086016020860162002a55565b601f01601f19169290920160200192915050565b60608152600062002b6c606083018662002b29565b828103602084015262002b80818662002b29565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002be88483018762002b29565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002cdc5762002cdc62002c9e565b500490565b60006001820162002cf65762002cf662002cb4565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d2f9083018462002b29565b95945050505050565b6000825162002d4c81846020870162002a55565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002da357600080fd5b835167ffffffffffffffff8082111562002dbc57600080fd5b62002dca8783880162002a84565b9450602086015191508082111562002de157600080fd5b5062002df08682870162002a84565b9250506040840151620028ac816200265f565b60008262002e155762002e1562002c9e565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e5960608301878962002e1a565b828103602084015262002e6e81868862002e1a565b91505060ff831660408301529695505050505050565b6000835162002e9881846020880162002a55565b83519083019062002eae81836020880162002a55565b01949350505050565b6000808585111562002ec857600080fd5b8386111562002ed657600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002eff57600080fd5b873562002f0c81620023ad565b9650602088013562002f1e81620023ad565b955060408801359450606088013593506080880135620026dc816200265f565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b8015158114620023c357600080fd5b600080600080600080600080610100898b0312156200301957600080fd5b88356200302681620023ad565b975060208901356200303881620023ad565b965060408901359550606089013594506080890135620030588162002fec565b935060a08901356200306a816200265f565b979a969950949793969295929450505060c08201359160e0013590565b600181815b80851115620030c8578160001904821115620030ac57620030ac62002cb4565b80851615620030ba57918102915b93841c93908002906200308c565b509250929050565b600082620030e15750600162000a47565b81620030f05750600062000a47565b8160018114620031095760028114620031145762003134565b600191505062000a47565b60ff84111562003128576200312862002cb4565b50506001821b62000a47565b5060208310610133831016604e8410600b841016171562003159575081810a62000a47565b62003165838362003087565b80600019048211156200317c576200317c62002cb4565b029392505050565b6000620025228383620030d0565b600082821015620031a757620031a762002cb4565b500390565b60008219821115620031c257620031c262002cb4565b500190565b634e487b7160e01b600052600160045260246000fd5b600060208284031215620031f057600080fd5b5051919050565b6000602082840312156200320a57600080fd5b8151620025228162002fec565b60208152600062002522602083018462002b2956fe60c06040523480156200001157600080fd5b506040516200154c3803806200154c8339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611092620004ba60003960006104690152600081816102f9015261043301526110926000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611043565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161105557611055610fd1565b506001019056fea264697066735822122048db6a6222fa164d21a8fcb1cd25d2a9e0eee016393c37dcc7b7fd638ef787c264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220594042943b3c64253ad00d87284d7bc31fb7db128afcfabcccd37860d4422c4564736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZkEVMBridgeMock.json b/compiled-contracts/PolygonZkEVMBridgeMock.json index 6f612909e..dcc0bd173 100644 --- a/compiled-contracts/PolygonZkEVMBridgeMock.json +++ b/compiled-contracts/PolygonZkEVMBridgeMock.json @@ -790,8 +790,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50614bd8806100206000396000f3fe608060405260043610620001f35760003560e01c80637b6323c1116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b80637b6323c1146200045e57806381b1c17414620004835780638da5cb5b14620004bd57600080fd5b8063318aee3d116200018d5780633e19704311620001585780633e19704314620003d75780634638554914620003fc578063647c576c1462000421578063715018a6146200044657600080fd5b8063318aee3d146200030957806337883a3e14620003785780633ae05047146200039a5780633da8168214620003b257600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f6200020936600462002825565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f6200071e565b3480156200026757600080fd5b506200027f62000279366004620028b2565b62000757565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b7366004620028ee565b620007aa565b348015620002ca57600080fd5b506200020f620002dc36600462002908565b620007b9565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b5062000353620003283660046200292d565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b506027546200027f906001600160a01b031681565b348015620003a757600080fd5b50620002fa620007e5565b348015620003bf57600080fd5b506200022d620003d136600462002a15565b620008d8565b348015620003e457600080fd5b50620002fa620003f636600462002a93565b620009da565b3480156200040957600080fd5b506200020f6200041b36600462002ba4565b62000a67565b3480156200042e57600080fd5b506200020f6200044036600462002c8b565b62000c0d565b3480156200045357600080fd5b506200020f62000d82565b3480156200046b57600080fd5b506200020f6200047d36600462002ba4565b62000d98565b3480156200049057600080fd5b506200027f620004a2366004620028ee565b6024602052600090815260409020546001600160a01b031681565b348015620004ca57600080fd5b50605a546001600160a01b03166200027f565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d62000514366004620028ee565b6200121f565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002cdb565b62001264565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002d8f565b6200137b565b348015620005e957600080fd5b506200020f6200152d565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a366004620028ee565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b3660046200292d565b62001564565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007065760405162461bcd60e51b815260206004820152604760248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b62000716868686868686620015e3565b505050505050565b6027546001600160a01b031633146200074b5760405162461bcd60e51b8152600401620006fd9062002df7565b6200075562001a68565b565b60006024600084846040516020016200077292919062002e54565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b462001ac6565b608c55565b620007c362001ac6565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008cf57826001166001036200085057600181602081106200081c576200081c62002e7e565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200087d565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088a60028462002ec0565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c69062002ed7565b915050620007f0565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009cb5781600116600103620009555786818151811062000913576200091362002e7e565b60200260200101518360405160200162000937929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009a7565b828782815181106200096b576200096b62002e7e565b60200260200101516040516020016200098e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b460028362002ec0565b915080620009c28162002ed7565b915050620008e8565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a8d5760405162461bcd60e51b8152600401620006fd9062002ef3565b62000aa38a8a8a8a8a8a8a8a8a8a600162001b22565b62000ab48963ffffffff1662001dad565b6000836001600160a01b03168387898560405160240162000ad89392919062002fb8565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b0f919062002ff3565b60006040518083038185875af1925050503d806000811462000b4e576040519150601f19603f3d011682016040523d82523d6000602084013e62000b53565b606091505b505090508062000bbf5760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b6064820152608401620006fd565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bf895949392919062003011565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c2e5750600054600160ff909116105b8062000c4a5750303b15801562000c4a575060005460ff166001145b62000caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006fd565b6000805460ff19166001179055801562000cd3576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d3562001def565b801562000d7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8c62001ac6565b62000755600062001e62565b60225460ff161562000dbe5760405162461bcd60e51b8152600401620006fd9062002ef3565b62000dd48a8a8a8a8a8a8a8a8a8a600062001b22565b62000de58963ffffffff1662001dad565b6001600160a01b03851662000eda57604080516000808252602082019092526001600160a01b03851690849060405162000e20919062002ff3565b60006040518083038185875af1925050503d806000811462000e5f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e64565b606091505b505090508062000ed35760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b6064820152608401620006fd565b50620011d2565b60225463ffffffff61010090910481169087160362000f0f5762000f096001600160a01b038616848462001eb4565b620011d2565b6000868660405160200162000f2692919062002e54565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200116a5760008060008580602001905181019062000f78919062003094565b92509250925060008584848460405162000f92906200278e565b62000fa0939291906200310a565b8190604051809103906000f590508015801562000fc1573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f1990604401600060405180830381600087803b1580156200101157600080fd5b505af115801562001026573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620011589392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011cf565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f1990604401600060405180830381600087803b158015620011b557600080fd5b505af1158015620011ca573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200120b95949392919062003011565b60405180910390a150505050505050505050565b600080620012306101008462002ec0565b90506000620012426101008562003147565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200127c92919062002e54565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012af906200278e565b601f1982820381018352601f909101166040819052620012dc908d908d908d908d908d9060200162003187565b60408051601f1981840301815290829052620012fc9291602001620031c8565b604051602081830303815290604052805190602001206040516020016200135594939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013a15760405162461bcd60e51b8152600401620006fd9062002ef3565b60225463ffffffff610100909104811690841603620014295760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c460000006064820152608401620006fd565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff1633868634876021546040516200147d989796959493929190620031fb565b60405180910390a1620014ba620014b46001602260019054906101000a900463ffffffff16338787348880519060200120620009da565b62001f1e565b6026546001600160a01b03166333d6247d620014d5620007e5565b6040518263ffffffff1660e01b8152600401620014f491815260200190565b600060405180830381600087803b1580156200150f57600080fd5b505af115801562001524573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b031633146200155a5760405162461bcd60e51b8152600401620006fd9062002df7565b620007556200206a565b6200156e62001ac6565b6001600160a01b038116620015d55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006fd565b620015e08162001e62565b50565b60225460ff1615620016095760405162461bcd60e51b8152600401620006fd9062002ef3565b60225463ffffffff610100909104811690861603620016915760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c4600000000006064820152608401620006fd565b60008060606001600160a01b03891662001728578534146200171e576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c55456064820152608401620006fd565b6000915062001988565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620017e557604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac90604401600060405180830381600087803b158015620017b857600080fd5b505af1158015620017cd573d6000803e3d6000fd5b50505050806020015193508060000151925062001986565b8415620017fa57620017fa8a88888862002119565b620018116001600160a01b038b1633308a62002541565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001868573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001892919081019062003268565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620018d1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018fb919081019062003268565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200193a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019609190620032a1565b60405160200162001974939291906200310a565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b87602154604051620019ca989796959493929190620031fb565b60405180910390a1620019ef620014b4600084868c8c8c8880519060200120620009da565b6026546001600160a01b03166333d6247d62001a0a620007e5565b6040518263ffffffff1660e01b815260040162001a2991815260200190565b600060405180830381600087803b15801562001a4457600080fd5b505af115801562001a59573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001a8e5760405162461bcd60e51b8152600401620006fd9062002ef3565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006fd565b62001b338a63ffffffff166200121f565b1562001b8a5760405162461bcd60e51b8152602060048201526030602482015260008051602062004b8383398151915260448201526f081053149150511657d0d3105253515160821b6064820152608401620006fd565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001bfe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c249190620032c1565b90508060000362001c8d5760405162461bcd60e51b8152602060048201526039602482015260008051602062004b8383398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c4944000000000000006064820152608401620006fd565b60225463ffffffff878116610100909204161462001d0f5760405162461bcd60e51b8152602060048201526043602482015260008051602062004b8383398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a401620006fd565b602254600090610100900463ffffffff1662001d2d57508862001d30565b50895b62001d5b62001d4c848b8b8b8b8b8b80519060200120620009da565b8e8e63ffffffff1684620008d8565b62001a595760405162461bcd60e51b815260206004820152602c602482015260008051602062004b8383398151915260448201526b0814d35517d253959053125160a21b6064820152608401620006fd565b600062001dbd6101008362002ec0565b9050600062001dcf6101008462003147565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001e5c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006fd565b62000755335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001f1990849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526200257b565b505050565b80600162001f2f60206002620033d8565b62001f3b9190620033e6565b6021541062001fa05760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b6064820152608401620006fd565b60016021600082825462001fb5919062003400565b909155505060215460005b60208110156200205f578160011660010362001ff557826001826020811062001fed5762001fed62002e7e565b015550505050565b600181602081106200200b576200200b62002e7e565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002048919062002ec0565b915080620020568162002ed7565b91505062001fc0565b5062001f196200341b565b60225460ff16620020e45760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006fd565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200215c83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200265492505050565b9050632afa533160e01b6001600160e01b0319821601620023555760008080808080806200218e896004818d62003431565b8101906200219d91906200345d565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620021df5760405162461bcd60e51b8152600401620006fd90620034b8565b6001600160a01b03861630146200220a5760405162461bcd60e51b8152600401620006fd9062003515565b8a8514620022815760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d41544348000000000000006064820152608401620006fd565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162002301919062002ff3565b6000604051808303816000865af19150503d806000811462002340576040519150601f19603f3d011682016040523d82523d6000602084013e62002345565b606091505b505050505050505050506200253a565b6001600160e01b031981166323f2ebc360e21b14620023cb5760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b6064820152608401620006fd565b600080808080808080620023e38a6004818e62003431565b810190620023f2919062003575565b97509750975097509750975097509750336001600160a01b0316886001600160a01b031614620024365760405162461bcd60e51b8152600401620006fd90620034b8565b6001600160a01b0387163014620024615760405162461bcd60e51b8152600401620006fd9062003515565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f1691620024ea919062002ff3565b6000604051808303816000865af19150503d806000811462002529576040519150601f19603f3d011682016040523d82523d6000602084013e6200252e565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d7c9085906323b872dd60e01b9060840162001ee1565b6000620025d2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166200265b9092919063ffffffff16565b80519091501562001f195780806020019051810190620025f3919062003601565b62001f195760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006fd565b6020015190565b6060620009d2848460008585600080866001600160a01b0316858760405162002685919062002ff3565b60006040518083038185875af1925050503d8060008114620026c4576040519150601f19603f3d011682016040523d82523d6000602084013e620026c9565b606091505b5091509150620026dc87838387620026e7565b979650505050505050565b606083156200275b57825160000362002753576001600160a01b0385163b620027535760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006fd565b5081620009d2565b620009d28383815115620027725781518083602001fd5b8060405162461bcd60e51b8152600401620006fd919062003621565b61154c806200363783390190565b6001600160a01b0381168114620015e057600080fd5b8035620027bf816200279c565b919050565b803563ffffffff81168114620027bf57600080fd5b60008083601f840112620027ec57600080fd5b50813567ffffffffffffffff8111156200280557600080fd5b6020830191508360208285010111156200281e57600080fd5b9250929050565b60008060008060008060a087890312156200283f57600080fd5b86356200284c816200279c565b95506200285c60208801620027c4565b945060408701356200286e816200279c565b935060608701359250608087013567ffffffffffffffff8111156200289257600080fd5b620028a089828a01620027d9565b979a9699509497509295939492505050565b60008060408385031215620028c657600080fd5b620028d183620027c4565b91506020830135620028e3816200279c565b809150509250929050565b6000602082840312156200290157600080fd5b5035919050565b6000602082840312156200291b57600080fd5b6200292682620027c4565b9392505050565b6000602082840312156200294057600080fd5b813562002926816200279c565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200298f576200298f6200294d565b604052919050565b600082601f830112620029a957600080fd5b8135602067ffffffffffffffff821115620029c857620029c86200294d565b8160051b620029d982820162002963565b9283528481018201928281019087851115620029f457600080fd5b83870192505b84831015620026dc57823582529183019190830190620029fa565b6000806000806080858703121562002a2c57600080fd5b84359350602085013567ffffffffffffffff8082111562002a4c57600080fd5b62002a5a8883890162002997565b945060408701359150808216821462002a7257600080fd5b509396929550929360600135925050565b60ff81168114620015e057600080fd5b600080600080600080600060e0888a03121562002aaf57600080fd5b873562002abc8162002a83565b965062002acc60208901620027c4565b9550604088013562002ade816200279c565b945062002aee60608901620027c4565b9350608088013562002b00816200279c565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002b3a5762002b3a6200294d565b50601f01601f191660200190565b600082601f83011262002b5a57600080fd5b813562002b7162002b6b8262002b1d565b62002963565b81815284602083860101111562002b8757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002bc557600080fd5b8a3567ffffffffffffffff8082111562002bde57600080fd5b62002bec8e838f0162002997565b9b5062002bfc60208e01620027c4565b9a5060408d0135995060608d0135985062002c1a60808e01620027c4565b975062002c2a60a08e01620027b2565b965062002c3a60c08e01620027c4565b955062002c4a60e08e01620027b2565b94506101008d013593506101208d013591508082111562002c6a57600080fd5b5062002c798d828e0162002b48565b9150509295989b9194979a5092959850565b60008060006060848603121562002ca157600080fd5b62002cac84620027c4565b9250602084013562002cbe816200279c565b9150604084013562002cd0816200279c565b809150509250925092565b600080600080600080600060a0888a03121562002cf757600080fd5b62002d0288620027c4565b9650602088013562002d14816200279c565b9550604088013567ffffffffffffffff8082111562002d3257600080fd5b62002d408b838c01620027d9565b909750955060608a013591508082111562002d5a57600080fd5b5062002d698a828b01620027d9565b909450925050608088013562002d7f8162002a83565b8091505092959891949750929550565b60008060006060848603121562002da557600080fd5b62002db084620027c4565b9250602084013562002dc2816200279c565b9150604084013567ffffffffffffffff81111562002ddf57600080fd5b62002ded8682870162002b48565b9150509250925092565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002ed25762002ed262002e94565b500490565b60006001820162002eec5762002eec62002eaa565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002f7857818101518382015260200162002f5e565b8381111562000d7c5750506000910152565b6000815180845262002fa481602086016020860162002f5b565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002fea9083018462002f8a565b95945050505050565b600082516200300781846020870162002f5b565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f8301126200305a57600080fd5b81516200306b62002b6b8262002b1d565b8181528460208386010111156200308157600080fd5b620009d282602083016020870162002f5b565b600080600060608486031215620030aa57600080fd5b835167ffffffffffffffff80821115620030c357600080fd5b620030d18783880162003048565b94506020860151915080821115620030e857600080fd5b50620030f78682870162003048565b925050604084015162002cd08162002a83565b6060815260006200311f606083018662002f8a565b828103602084015262003133818662002f8a565b91505060ff83166040830152949350505050565b60008262003159576200315962002e94565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006200319d6060830187896200315e565b8281036020840152620031b28186886200315e565b91505060ff831660408301529695505050505050565b60008351620031dc81846020880162002f5b565b835190830190620031f281836020880162002f5b565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c083018190526000916200324f8483018762002f8a565b925080851660e085015250509998505050505050505050565b6000602082840312156200327b57600080fd5b815167ffffffffffffffff8111156200329357600080fd5b620009d28482850162003048565b600060208284031215620032b457600080fd5b8151620029268162002a83565b600060208284031215620032d457600080fd5b5051919050565b600181815b808511156200331c57816000190482111562003300576200330062002eaa565b808516156200330e57918102915b93841c9390800290620032e0565b509250929050565b6000826200333557506001620007a4565b816200334457506000620007a4565b81600181146200335d5760028114620033685762003388565b6001915050620007a4565b60ff8411156200337c576200337c62002eaa565b50506001821b620007a4565b5060208310610133831016604e8410600b8410161715620033ad575081810a620007a4565b620033b98383620032db565b8060001904821115620033d057620033d062002eaa565b029392505050565b600062002926838362003324565b600082821015620033fb57620033fb62002eaa565b500390565b6000821982111562003416576200341662002eaa565b500190565b634e487b7160e01b600052600160045260246000fd5b600080858511156200344257600080fd5b838611156200345057600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200347957600080fd5b873562003486816200279c565b9650602088013562003498816200279c565b95506040880135945060608801359350608088013562002b008162002a83565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b8015158114620015e057600080fd5b600080600080600080600080610100898b0312156200359357600080fd5b8835620035a0816200279c565b97506020890135620035b2816200279c565b965060408901359550606089013594506080890135620035d28162003566565b935060a0890135620035e48162002a83565b979a969950949793969295929450505060c08201359160e0013590565b6000602082840312156200361457600080fd5b8151620029268162003566565b60208152600062002926602083018462002f8a56fe60c06040523480156200001157600080fd5b506040516200154c3803806200154c8339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611092620004ba60003960006104690152600081816102f9015261043301526110926000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611043565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161105557611055610fd1565b506001019056fea264697066735822122048db6a6222fa164d21a8fcb1cd25d2a9e0eee016393c37dcc7b7fd638ef787c264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220a5b71a417bea46acd4ec131da2522d11df4c3b93e7a5699cc63e19824f588e4164736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001f35760003560e01c80637b6323c1116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b80637b6323c1146200045e57806381b1c17414620004835780638da5cb5b14620004bd57600080fd5b8063318aee3d116200018d5780633e19704311620001585780633e19704314620003d75780634638554914620003fc578063647c576c1462000421578063715018a6146200044657600080fd5b8063318aee3d146200030957806337883a3e14620003785780633ae05047146200039a5780633da8168214620003b257600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f6200020936600462002825565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f6200071e565b3480156200026757600080fd5b506200027f62000279366004620028b2565b62000757565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b7366004620028ee565b620007aa565b348015620002ca57600080fd5b506200020f620002dc36600462002908565b620007b9565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b5062000353620003283660046200292d565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b506027546200027f906001600160a01b031681565b348015620003a757600080fd5b50620002fa620007e5565b348015620003bf57600080fd5b506200022d620003d136600462002a15565b620008d8565b348015620003e457600080fd5b50620002fa620003f636600462002a93565b620009da565b3480156200040957600080fd5b506200020f6200041b36600462002ba4565b62000a67565b3480156200042e57600080fd5b506200020f6200044036600462002c8b565b62000c0d565b3480156200045357600080fd5b506200020f62000d82565b3480156200046b57600080fd5b506200020f6200047d36600462002ba4565b62000d98565b3480156200049057600080fd5b506200027f620004a2366004620028ee565b6024602052600090815260409020546001600160a01b031681565b348015620004ca57600080fd5b50605a546001600160a01b03166200027f565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d62000514366004620028ee565b6200121f565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002cdb565b62001264565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002d8f565b6200137b565b348015620005e957600080fd5b506200020f6200152d565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a366004620028ee565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b3660046200292d565b62001564565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007065760405162461bcd60e51b815260206004820152604760248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b62000716868686868686620015e3565b505050505050565b6027546001600160a01b031633146200074b5760405162461bcd60e51b8152600401620006fd9062002df7565b6200075562001a68565b565b60006024600084846040516020016200077292919062002e54565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b462001ac6565b608c55565b620007c362001ac6565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008cf57826001166001036200085057600181602081106200081c576200081c62002e7e565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200087d565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088a60028462002ec0565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c69062002ed7565b915050620007f0565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009cb5781600116600103620009555786818151811062000913576200091362002e7e565b60200260200101518360405160200162000937929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009a7565b828782815181106200096b576200096b62002e7e565b60200260200101516040516020016200098e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b460028362002ec0565b915080620009c28162002ed7565b915050620008e8565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a8d5760405162461bcd60e51b8152600401620006fd9062002ef3565b62000aa38a8a8a8a8a8a8a8a8a8a600162001b22565b62000ab48963ffffffff1662001dad565b6000836001600160a01b03168387898560405160240162000ad89392919062002fb8565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b0f919062002ff3565b60006040518083038185875af1925050503d806000811462000b4e576040519150601f19603f3d011682016040523d82523d6000602084013e62000b53565b606091505b505090508062000bbf5760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b6064820152608401620006fd565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bf895949392919062003011565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c2e5750600054600160ff909116105b8062000c4a5750303b15801562000c4a575060005460ff166001145b62000caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006fd565b6000805460ff19166001179055801562000cd3576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d3562001def565b801562000d7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8c62001ac6565b62000755600062001e62565b60225460ff161562000dbe5760405162461bcd60e51b8152600401620006fd9062002ef3565b62000dd48a8a8a8a8a8a8a8a8a8a600062001b22565b62000de58963ffffffff1662001dad565b6001600160a01b03851662000eda57604080516000808252602082019092526001600160a01b03851690849060405162000e20919062002ff3565b60006040518083038185875af1925050503d806000811462000e5f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e64565b606091505b505090508062000ed35760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b6064820152608401620006fd565b50620011d2565b60225463ffffffff61010090910481169087160362000f0f5762000f096001600160a01b038616848462001eb4565b620011d2565b6000868660405160200162000f2692919062002e54565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200116a5760008060008580602001905181019062000f78919062003094565b92509250925060008584848460405162000f92906200278e565b62000fa0939291906200310a565b8190604051809103906000f590508015801562000fc1573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f1990604401600060405180830381600087803b1580156200101157600080fd5b505af115801562001026573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620011589392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011cf565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f1990604401600060405180830381600087803b158015620011b557600080fd5b505af1158015620011ca573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200120b95949392919062003011565b60405180910390a150505050505050505050565b600080620012306101008462002ec0565b90506000620012426101008562003147565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200127c92919062002e54565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012af906200278e565b601f1982820381018352601f909101166040819052620012dc908d908d908d908d908d9060200162003187565b60408051601f1981840301815290829052620012fc9291602001620031c8565b604051602081830303815290604052805190602001206040516020016200135594939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013a15760405162461bcd60e51b8152600401620006fd9062002ef3565b60225463ffffffff610100909104811690841603620014295760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c460000006064820152608401620006fd565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff1633868634876021546040516200147d989796959493929190620031fb565b60405180910390a1620014ba620014b46001602260019054906101000a900463ffffffff16338787348880519060200120620009da565b62001f1e565b6026546001600160a01b03166333d6247d620014d5620007e5565b6040518263ffffffff1660e01b8152600401620014f491815260200190565b600060405180830381600087803b1580156200150f57600080fd5b505af115801562001524573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b031633146200155a5760405162461bcd60e51b8152600401620006fd9062002df7565b620007556200206a565b6200156e62001ac6565b6001600160a01b038116620015d55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006fd565b620015e08162001e62565b50565b60225460ff1615620016095760405162461bcd60e51b8152600401620006fd9062002ef3565b60225463ffffffff610100909104811690861603620016915760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c4600000000006064820152608401620006fd565b60008060606001600160a01b03891662001728578534146200171e576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c55456064820152608401620006fd565b6000915062001988565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620017e557604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac90604401600060405180830381600087803b158015620017b857600080fd5b505af1158015620017cd573d6000803e3d6000fd5b50505050806020015193508060000151925062001986565b8415620017fa57620017fa8a88888862002119565b620018116001600160a01b038b1633308a62002541565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001868573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001892919081019062003268565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620018d1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018fb919081019062003268565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200193a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019609190620032a1565b60405160200162001974939291906200310a565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b87602154604051620019ca989796959493929190620031fb565b60405180910390a1620019ef620014b4600084868c8c8c8880519060200120620009da565b6026546001600160a01b03166333d6247d62001a0a620007e5565b6040518263ffffffff1660e01b815260040162001a2991815260200190565b600060405180830381600087803b15801562001a4457600080fd5b505af115801562001a59573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001a8e5760405162461bcd60e51b8152600401620006fd9062002ef3565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006fd565b62001b338a63ffffffff166200121f565b1562001b8a5760405162461bcd60e51b8152602060048201526030602482015260008051602062004b8383398151915260448201526f081053149150511657d0d3105253515160821b6064820152608401620006fd565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001bfe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c249190620032c1565b90508060000362001c8d5760405162461bcd60e51b8152602060048201526039602482015260008051602062004b8383398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c4944000000000000006064820152608401620006fd565b60225463ffffffff878116610100909204161462001d0f5760405162461bcd60e51b8152602060048201526043602482015260008051602062004b8383398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a401620006fd565b602254600090610100900463ffffffff1662001d2d57508862001d30565b50895b62001d5b62001d4c848b8b8b8b8b8b80519060200120620009da565b8e8e63ffffffff1684620008d8565b62001a595760405162461bcd60e51b815260206004820152602c602482015260008051602062004b8383398151915260448201526b0814d35517d253959053125160a21b6064820152608401620006fd565b600062001dbd6101008362002ec0565b9050600062001dcf6101008462003147565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001e5c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006fd565b62000755335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001f1990849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526200257b565b505050565b80600162001f2f60206002620033d8565b62001f3b9190620033e6565b6021541062001fa05760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b6064820152608401620006fd565b60016021600082825462001fb5919062003400565b909155505060215460005b60208110156200205f578160011660010362001ff557826001826020811062001fed5762001fed62002e7e565b015550505050565b600181602081106200200b576200200b62002e7e565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002048919062002ec0565b915080620020568162002ed7565b91505062001fc0565b5062001f196200341b565b60225460ff16620020e45760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006fd565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200215c83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200265492505050565b9050632afa533160e01b6001600160e01b0319821601620023555760008080808080806200218e896004818d62003431565b8101906200219d91906200345d565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620021df5760405162461bcd60e51b8152600401620006fd90620034b8565b6001600160a01b03861630146200220a5760405162461bcd60e51b8152600401620006fd9062003515565b8a8514620022815760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d41544348000000000000006064820152608401620006fd565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162002301919062002ff3565b6000604051808303816000865af19150503d806000811462002340576040519150601f19603f3d011682016040523d82523d6000602084013e62002345565b606091505b505050505050505050506200253a565b6001600160e01b031981166323f2ebc360e21b14620023cb5760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b6064820152608401620006fd565b600080808080808080620023e38a6004818e62003431565b810190620023f2919062003575565b97509750975097509750975097509750336001600160a01b0316886001600160a01b031614620024365760405162461bcd60e51b8152600401620006fd90620034b8565b6001600160a01b0387163014620024615760405162461bcd60e51b8152600401620006fd9062003515565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f1691620024ea919062002ff3565b6000604051808303816000865af19150503d806000811462002529576040519150601f19603f3d011682016040523d82523d6000602084013e6200252e565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d7c9085906323b872dd60e01b9060840162001ee1565b6000620025d2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166200265b9092919063ffffffff16565b80519091501562001f195780806020019051810190620025f3919062003601565b62001f195760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006fd565b6020015190565b6060620009d2848460008585600080866001600160a01b0316858760405162002685919062002ff3565b60006040518083038185875af1925050503d8060008114620026c4576040519150601f19603f3d011682016040523d82523d6000602084013e620026c9565b606091505b5091509150620026dc87838387620026e7565b979650505050505050565b606083156200275b57825160000362002753576001600160a01b0385163b620027535760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006fd565b5081620009d2565b620009d28383815115620027725781518083602001fd5b8060405162461bcd60e51b8152600401620006fd919062003621565b61154c806200363783390190565b6001600160a01b0381168114620015e057600080fd5b8035620027bf816200279c565b919050565b803563ffffffff81168114620027bf57600080fd5b60008083601f840112620027ec57600080fd5b50813567ffffffffffffffff8111156200280557600080fd5b6020830191508360208285010111156200281e57600080fd5b9250929050565b60008060008060008060a087890312156200283f57600080fd5b86356200284c816200279c565b95506200285c60208801620027c4565b945060408701356200286e816200279c565b935060608701359250608087013567ffffffffffffffff8111156200289257600080fd5b620028a089828a01620027d9565b979a9699509497509295939492505050565b60008060408385031215620028c657600080fd5b620028d183620027c4565b91506020830135620028e3816200279c565b809150509250929050565b6000602082840312156200290157600080fd5b5035919050565b6000602082840312156200291b57600080fd5b6200292682620027c4565b9392505050565b6000602082840312156200294057600080fd5b813562002926816200279c565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200298f576200298f6200294d565b604052919050565b600082601f830112620029a957600080fd5b8135602067ffffffffffffffff821115620029c857620029c86200294d565b8160051b620029d982820162002963565b9283528481018201928281019087851115620029f457600080fd5b83870192505b84831015620026dc57823582529183019190830190620029fa565b6000806000806080858703121562002a2c57600080fd5b84359350602085013567ffffffffffffffff8082111562002a4c57600080fd5b62002a5a8883890162002997565b945060408701359150808216821462002a7257600080fd5b509396929550929360600135925050565b60ff81168114620015e057600080fd5b600080600080600080600060e0888a03121562002aaf57600080fd5b873562002abc8162002a83565b965062002acc60208901620027c4565b9550604088013562002ade816200279c565b945062002aee60608901620027c4565b9350608088013562002b00816200279c565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002b3a5762002b3a6200294d565b50601f01601f191660200190565b600082601f83011262002b5a57600080fd5b813562002b7162002b6b8262002b1d565b62002963565b81815284602083860101111562002b8757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002bc557600080fd5b8a3567ffffffffffffffff8082111562002bde57600080fd5b62002bec8e838f0162002997565b9b5062002bfc60208e01620027c4565b9a5060408d0135995060608d0135985062002c1a60808e01620027c4565b975062002c2a60a08e01620027b2565b965062002c3a60c08e01620027c4565b955062002c4a60e08e01620027b2565b94506101008d013593506101208d013591508082111562002c6a57600080fd5b5062002c798d828e0162002b48565b9150509295989b9194979a5092959850565b60008060006060848603121562002ca157600080fd5b62002cac84620027c4565b9250602084013562002cbe816200279c565b9150604084013562002cd0816200279c565b809150509250925092565b600080600080600080600060a0888a03121562002cf757600080fd5b62002d0288620027c4565b9650602088013562002d14816200279c565b9550604088013567ffffffffffffffff8082111562002d3257600080fd5b62002d408b838c01620027d9565b909750955060608a013591508082111562002d5a57600080fd5b5062002d698a828b01620027d9565b909450925050608088013562002d7f8162002a83565b8091505092959891949750929550565b60008060006060848603121562002da557600080fd5b62002db084620027c4565b9250602084013562002dc2816200279c565b9150604084013567ffffffffffffffff81111562002ddf57600080fd5b62002ded8682870162002b48565b9150509250925092565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002ed25762002ed262002e94565b500490565b60006001820162002eec5762002eec62002eaa565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002f7857818101518382015260200162002f5e565b8381111562000d7c5750506000910152565b6000815180845262002fa481602086016020860162002f5b565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002fea9083018462002f8a565b95945050505050565b600082516200300781846020870162002f5b565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f8301126200305a57600080fd5b81516200306b62002b6b8262002b1d565b8181528460208386010111156200308157600080fd5b620009d282602083016020870162002f5b565b600080600060608486031215620030aa57600080fd5b835167ffffffffffffffff80821115620030c357600080fd5b620030d18783880162003048565b94506020860151915080821115620030e857600080fd5b50620030f78682870162003048565b925050604084015162002cd08162002a83565b6060815260006200311f606083018662002f8a565b828103602084015262003133818662002f8a565b91505060ff83166040830152949350505050565b60008262003159576200315962002e94565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006200319d6060830187896200315e565b8281036020840152620031b28186886200315e565b91505060ff831660408301529695505050505050565b60008351620031dc81846020880162002f5b565b835190830190620031f281836020880162002f5b565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c083018190526000916200324f8483018762002f8a565b925080851660e085015250509998505050505050505050565b6000602082840312156200327b57600080fd5b815167ffffffffffffffff8111156200329357600080fd5b620009d28482850162003048565b600060208284031215620032b457600080fd5b8151620029268162002a83565b600060208284031215620032d457600080fd5b5051919050565b600181815b808511156200331c57816000190482111562003300576200330062002eaa565b808516156200330e57918102915b93841c9390800290620032e0565b509250929050565b6000826200333557506001620007a4565b816200334457506000620007a4565b81600181146200335d5760028114620033685762003388565b6001915050620007a4565b60ff8411156200337c576200337c62002eaa565b50506001821b620007a4565b5060208310610133831016604e8410600b8410161715620033ad575081810a620007a4565b620033b98383620032db565b8060001904821115620033d057620033d062002eaa565b029392505050565b600062002926838362003324565b600082821015620033fb57620033fb62002eaa565b500390565b6000821982111562003416576200341662002eaa565b500190565b634e487b7160e01b600052600160045260246000fd5b600080858511156200344257600080fd5b838611156200345057600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200347957600080fd5b873562003486816200279c565b9650602088013562003498816200279c565b95506040880135945060608801359350608088013562002b008162002a83565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b8015158114620015e057600080fd5b600080600080600080600080610100898b0312156200359357600080fd5b8835620035a0816200279c565b97506020890135620035b2816200279c565b965060408901359550606089013594506080890135620035d28162003566565b935060a0890135620035e48162002a83565b979a969950949793969295929450505060c08201359160e0013590565b6000602082840312156200361457600080fd5b8151620029268162003566565b60208152600062002926602083018462002f8a56fe60c06040523480156200001157600080fd5b506040516200154c3803806200154c8339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611092620004ba60003960006104690152600081816102f9015261043301526110926000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611043565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161105557611055610fd1565b506001019056fea264697066735822122048db6a6222fa164d21a8fcb1cd25d2a9e0eee016393c37dcc7b7fd638ef787c264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220a5b71a417bea46acd4ec131da2522d11df4c3b93e7a5699cc63e19824f588e4164736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50614bd8806100206000396000f3fe608060405260043610620001f35760003560e01c80637b6323c1116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b80637b6323c1146200045e57806381b1c17414620004835780638da5cb5b14620004bd57600080fd5b8063318aee3d116200018d5780633e19704311620001585780633e19704314620003d75780634638554914620003fc578063647c576c1462000421578063715018a6146200044657600080fd5b8063318aee3d146200030957806337883a3e14620003785780633ae05047146200039a5780633da8168214620003b257600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f6200020936600462002825565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f6200071e565b3480156200026757600080fd5b506200027f62000279366004620028b2565b62000757565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b7366004620028ee565b620007aa565b348015620002ca57600080fd5b506200020f620002dc36600462002908565b620007b9565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b5062000353620003283660046200292d565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b506027546200027f906001600160a01b031681565b348015620003a757600080fd5b50620002fa620007e5565b348015620003bf57600080fd5b506200022d620003d136600462002a15565b620008d8565b348015620003e457600080fd5b50620002fa620003f636600462002a93565b620009da565b3480156200040957600080fd5b506200020f6200041b36600462002ba4565b62000a67565b3480156200042e57600080fd5b506200020f6200044036600462002c8b565b62000c0d565b3480156200045357600080fd5b506200020f62000d82565b3480156200046b57600080fd5b506200020f6200047d36600462002ba4565b62000d98565b3480156200049057600080fd5b506200027f620004a2366004620028ee565b6024602052600090815260409020546001600160a01b031681565b348015620004ca57600080fd5b50605a546001600160a01b03166200027f565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d62000514366004620028ee565b6200121f565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002cdb565b62001264565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002d8f565b6200137b565b348015620005e957600080fd5b506200020f6200152d565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a366004620028ee565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b3660046200292d565b62001564565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007065760405162461bcd60e51b815260206004820152604760248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b62000716868686868686620015e3565b505050505050565b6027546001600160a01b031633146200074b5760405162461bcd60e51b8152600401620006fd9062002df7565b6200075562001a68565b565b60006024600084846040516020016200077292919062002e54565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b462001ac6565b608c55565b620007c362001ac6565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008cf57826001166001036200085057600181602081106200081c576200081c62002e7e565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200087d565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088a60028462002ec0565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c69062002ed7565b915050620007f0565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009cb5781600116600103620009555786818151811062000913576200091362002e7e565b60200260200101518360405160200162000937929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009a7565b828782815181106200096b576200096b62002e7e565b60200260200101516040516020016200098e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b460028362002ec0565b915080620009c28162002ed7565b915050620008e8565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a8d5760405162461bcd60e51b8152600401620006fd9062002ef3565b62000aa38a8a8a8a8a8a8a8a8a8a600162001b22565b62000ab48963ffffffff1662001dad565b6000836001600160a01b03168387898560405160240162000ad89392919062002fb8565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b0f919062002ff3565b60006040518083038185875af1925050503d806000811462000b4e576040519150601f19603f3d011682016040523d82523d6000602084013e62000b53565b606091505b505090508062000bbf5760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b6064820152608401620006fd565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bf895949392919062003011565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c2e5750600054600160ff909116105b8062000c4a5750303b15801562000c4a575060005460ff166001145b62000caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006fd565b6000805460ff19166001179055801562000cd3576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d3562001def565b801562000d7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8c62001ac6565b62000755600062001e62565b60225460ff161562000dbe5760405162461bcd60e51b8152600401620006fd9062002ef3565b62000dd48a8a8a8a8a8a8a8a8a8a600062001b22565b62000de58963ffffffff1662001dad565b6001600160a01b03851662000eda57604080516000808252602082019092526001600160a01b03851690849060405162000e20919062002ff3565b60006040518083038185875af1925050503d806000811462000e5f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e64565b606091505b505090508062000ed35760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b6064820152608401620006fd565b50620011d2565b60225463ffffffff61010090910481169087160362000f0f5762000f096001600160a01b038616848462001eb4565b620011d2565b6000868660405160200162000f2692919062002e54565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200116a5760008060008580602001905181019062000f78919062003094565b92509250925060008584848460405162000f92906200278e565b62000fa0939291906200310a565b8190604051809103906000f590508015801562000fc1573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f1990604401600060405180830381600087803b1580156200101157600080fd5b505af115801562001026573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620011589392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011cf565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f1990604401600060405180830381600087803b158015620011b557600080fd5b505af1158015620011ca573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200120b95949392919062003011565b60405180910390a150505050505050505050565b600080620012306101008462002ec0565b90506000620012426101008562003147565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200127c92919062002e54565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012af906200278e565b601f1982820381018352601f909101166040819052620012dc908d908d908d908d908d9060200162003187565b60408051601f1981840301815290829052620012fc9291602001620031c8565b604051602081830303815290604052805190602001206040516020016200135594939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013a15760405162461bcd60e51b8152600401620006fd9062002ef3565b60225463ffffffff610100909104811690841603620014295760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c460000006064820152608401620006fd565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff1633868634876021546040516200147d989796959493929190620031fb565b60405180910390a1620014ba620014b46001602260019054906101000a900463ffffffff16338787348880519060200120620009da565b62001f1e565b6026546001600160a01b03166333d6247d620014d5620007e5565b6040518263ffffffff1660e01b8152600401620014f491815260200190565b600060405180830381600087803b1580156200150f57600080fd5b505af115801562001524573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b031633146200155a5760405162461bcd60e51b8152600401620006fd9062002df7565b620007556200206a565b6200156e62001ac6565b6001600160a01b038116620015d55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006fd565b620015e08162001e62565b50565b60225460ff1615620016095760405162461bcd60e51b8152600401620006fd9062002ef3565b60225463ffffffff610100909104811690861603620016915760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c4600000000006064820152608401620006fd565b60008060606001600160a01b03891662001728578534146200171e576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c55456064820152608401620006fd565b6000915062001988565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620017e557604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac90604401600060405180830381600087803b158015620017b857600080fd5b505af1158015620017cd573d6000803e3d6000fd5b50505050806020015193508060000151925062001986565b8415620017fa57620017fa8a88888862002119565b620018116001600160a01b038b1633308a62002541565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001868573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001892919081019062003268565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620018d1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018fb919081019062003268565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200193a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019609190620032a1565b60405160200162001974939291906200310a565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b87602154604051620019ca989796959493929190620031fb565b60405180910390a1620019ef620014b4600084868c8c8c8880519060200120620009da565b6026546001600160a01b03166333d6247d62001a0a620007e5565b6040518263ffffffff1660e01b815260040162001a2991815260200190565b600060405180830381600087803b15801562001a4457600080fd5b505af115801562001a59573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001a8e5760405162461bcd60e51b8152600401620006fd9062002ef3565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006fd565b62001b338a63ffffffff166200121f565b1562001b8a5760405162461bcd60e51b8152602060048201526030602482015260008051602062004b8383398151915260448201526f081053149150511657d0d3105253515160821b6064820152608401620006fd565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001bfe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c249190620032c1565b90508060000362001c8d5760405162461bcd60e51b8152602060048201526039602482015260008051602062004b8383398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c4944000000000000006064820152608401620006fd565b60225463ffffffff878116610100909204161462001d0f5760405162461bcd60e51b8152602060048201526043602482015260008051602062004b8383398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a401620006fd565b602254600090610100900463ffffffff1662001d2d57508862001d30565b50895b62001d5b62001d4c848b8b8b8b8b8b80519060200120620009da565b8e8e63ffffffff1684620008d8565b62001a595760405162461bcd60e51b815260206004820152602c602482015260008051602062004b8383398151915260448201526b0814d35517d253959053125160a21b6064820152608401620006fd565b600062001dbd6101008362002ec0565b9050600062001dcf6101008462003147565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001e5c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006fd565b62000755335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001f1990849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526200257b565b505050565b80600162001f2f60206002620033d8565b62001f3b9190620033e6565b6021541062001fa05760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b6064820152608401620006fd565b60016021600082825462001fb5919062003400565b909155505060215460005b60208110156200205f578160011660010362001ff557826001826020811062001fed5762001fed62002e7e565b015550505050565b600181602081106200200b576200200b62002e7e565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002048919062002ec0565b915080620020568162002ed7565b91505062001fc0565b5062001f196200341b565b60225460ff16620020e45760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006fd565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200215c83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200265492505050565b9050632afa533160e01b6001600160e01b0319821601620023555760008080808080806200218e896004818d62003431565b8101906200219d91906200345d565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620021df5760405162461bcd60e51b8152600401620006fd90620034b8565b6001600160a01b03861630146200220a5760405162461bcd60e51b8152600401620006fd9062003515565b8a8514620022815760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d41544348000000000000006064820152608401620006fd565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162002301919062002ff3565b6000604051808303816000865af19150503d806000811462002340576040519150601f19603f3d011682016040523d82523d6000602084013e62002345565b606091505b505050505050505050506200253a565b6001600160e01b031981166323f2ebc360e21b14620023cb5760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b6064820152608401620006fd565b600080808080808080620023e38a6004818e62003431565b810190620023f2919062003575565b97509750975097509750975097509750336001600160a01b0316886001600160a01b031614620024365760405162461bcd60e51b8152600401620006fd90620034b8565b6001600160a01b0387163014620024615760405162461bcd60e51b8152600401620006fd9062003515565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f1691620024ea919062002ff3565b6000604051808303816000865af19150503d806000811462002529576040519150601f19603f3d011682016040523d82523d6000602084013e6200252e565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d7c9085906323b872dd60e01b9060840162001ee1565b6000620025d2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166200265b9092919063ffffffff16565b80519091501562001f195780806020019051810190620025f3919062003601565b62001f195760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006fd565b6020015190565b6060620009d2848460008585600080866001600160a01b0316858760405162002685919062002ff3565b60006040518083038185875af1925050503d8060008114620026c4576040519150601f19603f3d011682016040523d82523d6000602084013e620026c9565b606091505b5091509150620026dc87838387620026e7565b979650505050505050565b606083156200275b57825160000362002753576001600160a01b0385163b620027535760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006fd565b5081620009d2565b620009d28383815115620027725781518083602001fd5b8060405162461bcd60e51b8152600401620006fd919062003621565b61154c806200363783390190565b6001600160a01b0381168114620015e057600080fd5b8035620027bf816200279c565b919050565b803563ffffffff81168114620027bf57600080fd5b60008083601f840112620027ec57600080fd5b50813567ffffffffffffffff8111156200280557600080fd5b6020830191508360208285010111156200281e57600080fd5b9250929050565b60008060008060008060a087890312156200283f57600080fd5b86356200284c816200279c565b95506200285c60208801620027c4565b945060408701356200286e816200279c565b935060608701359250608087013567ffffffffffffffff8111156200289257600080fd5b620028a089828a01620027d9565b979a9699509497509295939492505050565b60008060408385031215620028c657600080fd5b620028d183620027c4565b91506020830135620028e3816200279c565b809150509250929050565b6000602082840312156200290157600080fd5b5035919050565b6000602082840312156200291b57600080fd5b6200292682620027c4565b9392505050565b6000602082840312156200294057600080fd5b813562002926816200279c565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200298f576200298f6200294d565b604052919050565b600082601f830112620029a957600080fd5b8135602067ffffffffffffffff821115620029c857620029c86200294d565b8160051b620029d982820162002963565b9283528481018201928281019087851115620029f457600080fd5b83870192505b84831015620026dc57823582529183019190830190620029fa565b6000806000806080858703121562002a2c57600080fd5b84359350602085013567ffffffffffffffff8082111562002a4c57600080fd5b62002a5a8883890162002997565b945060408701359150808216821462002a7257600080fd5b509396929550929360600135925050565b60ff81168114620015e057600080fd5b600080600080600080600060e0888a03121562002aaf57600080fd5b873562002abc8162002a83565b965062002acc60208901620027c4565b9550604088013562002ade816200279c565b945062002aee60608901620027c4565b9350608088013562002b00816200279c565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002b3a5762002b3a6200294d565b50601f01601f191660200190565b600082601f83011262002b5a57600080fd5b813562002b7162002b6b8262002b1d565b62002963565b81815284602083860101111562002b8757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002bc557600080fd5b8a3567ffffffffffffffff8082111562002bde57600080fd5b62002bec8e838f0162002997565b9b5062002bfc60208e01620027c4565b9a5060408d0135995060608d0135985062002c1a60808e01620027c4565b975062002c2a60a08e01620027b2565b965062002c3a60c08e01620027c4565b955062002c4a60e08e01620027b2565b94506101008d013593506101208d013591508082111562002c6a57600080fd5b5062002c798d828e0162002b48565b9150509295989b9194979a5092959850565b60008060006060848603121562002ca157600080fd5b62002cac84620027c4565b9250602084013562002cbe816200279c565b9150604084013562002cd0816200279c565b809150509250925092565b600080600080600080600060a0888a03121562002cf757600080fd5b62002d0288620027c4565b9650602088013562002d14816200279c565b9550604088013567ffffffffffffffff8082111562002d3257600080fd5b62002d408b838c01620027d9565b909750955060608a013591508082111562002d5a57600080fd5b5062002d698a828b01620027d9565b909450925050608088013562002d7f8162002a83565b8091505092959891949750929550565b60008060006060848603121562002da557600080fd5b62002db084620027c4565b9250602084013562002dc2816200279c565b9150604084013567ffffffffffffffff81111562002ddf57600080fd5b62002ded8682870162002b48565b9150509250925092565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002ed25762002ed262002e94565b500490565b60006001820162002eec5762002eec62002eaa565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002f7857818101518382015260200162002f5e565b8381111562000d7c5750506000910152565b6000815180845262002fa481602086016020860162002f5b565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002fea9083018462002f8a565b95945050505050565b600082516200300781846020870162002f5b565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f8301126200305a57600080fd5b81516200306b62002b6b8262002b1d565b8181528460208386010111156200308157600080fd5b620009d282602083016020870162002f5b565b600080600060608486031215620030aa57600080fd5b835167ffffffffffffffff80821115620030c357600080fd5b620030d18783880162003048565b94506020860151915080821115620030e857600080fd5b50620030f78682870162003048565b925050604084015162002cd08162002a83565b6060815260006200311f606083018662002f8a565b828103602084015262003133818662002f8a565b91505060ff83166040830152949350505050565b60008262003159576200315962002e94565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006200319d6060830187896200315e565b8281036020840152620031b28186886200315e565b91505060ff831660408301529695505050505050565b60008351620031dc81846020880162002f5b565b835190830190620031f281836020880162002f5b565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c083018190526000916200324f8483018762002f8a565b925080851660e085015250509998505050505050505050565b6000602082840312156200327b57600080fd5b815167ffffffffffffffff8111156200329357600080fd5b620009d28482850162003048565b600060208284031215620032b457600080fd5b8151620029268162002a83565b600060208284031215620032d457600080fd5b5051919050565b600181815b808511156200331c57816000190482111562003300576200330062002eaa565b808516156200330e57918102915b93841c9390800290620032e0565b509250929050565b6000826200333557506001620007a4565b816200334457506000620007a4565b81600181146200335d5760028114620033685762003388565b6001915050620007a4565b60ff8411156200337c576200337c62002eaa565b50506001821b620007a4565b5060208310610133831016604e8410600b8410161715620033ad575081810a620007a4565b620033b98383620032db565b8060001904821115620033d057620033d062002eaa565b029392505050565b600062002926838362003324565b600082821015620033fb57620033fb62002eaa565b500390565b6000821982111562003416576200341662002eaa565b500190565b634e487b7160e01b600052600160045260246000fd5b600080858511156200344257600080fd5b838611156200345057600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200347957600080fd5b873562003486816200279c565b9650602088013562003498816200279c565b95506040880135945060608801359350608088013562002b008162002a83565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b8015158114620015e057600080fd5b600080600080600080600080610100898b0312156200359357600080fd5b8835620035a0816200279c565b97506020890135620035b2816200279c565b965060408901359550606089013594506080890135620035d28162003566565b935060a0890135620035e48162002a83565b979a969950949793969295929450505060c08201359160e0013590565b6000602082840312156200361457600080fd5b8151620029268162003566565b60208152600062002926602083018462002f8a56fe60c06040523480156200001157600080fd5b506040516200154c3803806200154c8339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611092620004ba60003960006104690152600081816102f9015261043301526110926000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611043565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161105557611055610fd1565b506001019056fea264697066735822122048db6a6222fa164d21a8fcb1cd25d2a9e0eee016393c37dcc7b7fd638ef787c264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212203fafbd771213f6e6602facc0f17b92d2c43c794b34f182f74da8a5eaf7772fc564736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001f35760003560e01c80637b6323c1116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b80637b6323c1146200045e57806381b1c17414620004835780638da5cb5b14620004bd57600080fd5b8063318aee3d116200018d5780633e19704311620001585780633e19704314620003d75780634638554914620003fc578063647c576c1462000421578063715018a6146200044657600080fd5b8063318aee3d146200030957806337883a3e14620003785780633ae05047146200039a5780633da8168214620003b257600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f6200020936600462002825565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f6200071e565b3480156200026757600080fd5b506200027f62000279366004620028b2565b62000757565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b7366004620028ee565b620007aa565b348015620002ca57600080fd5b506200020f620002dc36600462002908565b620007b9565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b5062000353620003283660046200292d565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b506027546200027f906001600160a01b031681565b348015620003a757600080fd5b50620002fa620007e5565b348015620003bf57600080fd5b506200022d620003d136600462002a15565b620008d8565b348015620003e457600080fd5b50620002fa620003f636600462002a93565b620009da565b3480156200040957600080fd5b506200020f6200041b36600462002ba4565b62000a67565b3480156200042e57600080fd5b506200020f6200044036600462002c8b565b62000c0d565b3480156200045357600080fd5b506200020f62000d82565b3480156200046b57600080fd5b506200020f6200047d36600462002ba4565b62000d98565b3480156200049057600080fd5b506200027f620004a2366004620028ee565b6024602052600090815260409020546001600160a01b031681565b348015620004ca57600080fd5b50605a546001600160a01b03166200027f565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d62000514366004620028ee565b6200121f565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002cdb565b62001264565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002d8f565b6200137b565b348015620005e957600080fd5b506200020f6200152d565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a366004620028ee565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b3660046200292d565b62001564565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007065760405162461bcd60e51b815260206004820152604760248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b62000716868686868686620015e3565b505050505050565b6027546001600160a01b031633146200074b5760405162461bcd60e51b8152600401620006fd9062002df7565b6200075562001a68565b565b60006024600084846040516020016200077292919062002e54565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b462001ac6565b608c55565b620007c362001ac6565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008cf57826001166001036200085057600181602081106200081c576200081c62002e7e565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200087d565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088a60028462002ec0565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c69062002ed7565b915050620007f0565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009cb5781600116600103620009555786818151811062000913576200091362002e7e565b60200260200101518360405160200162000937929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009a7565b828782815181106200096b576200096b62002e7e565b60200260200101516040516020016200098e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b460028362002ec0565b915080620009c28162002ed7565b915050620008e8565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a8d5760405162461bcd60e51b8152600401620006fd9062002ef3565b62000aa38a8a8a8a8a8a8a8a8a8a600162001b22565b62000ab48963ffffffff1662001dad565b6000836001600160a01b03168387898560405160240162000ad89392919062002fb8565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b0f919062002ff3565b60006040518083038185875af1925050503d806000811462000b4e576040519150601f19603f3d011682016040523d82523d6000602084013e62000b53565b606091505b505090508062000bbf5760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b6064820152608401620006fd565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bf895949392919062003011565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c2e5750600054600160ff909116105b8062000c4a5750303b15801562000c4a575060005460ff166001145b62000caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006fd565b6000805460ff19166001179055801562000cd3576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d3562001def565b801562000d7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8c62001ac6565b62000755600062001e62565b60225460ff161562000dbe5760405162461bcd60e51b8152600401620006fd9062002ef3565b62000dd48a8a8a8a8a8a8a8a8a8a600062001b22565b62000de58963ffffffff1662001dad565b6001600160a01b03851662000eda57604080516000808252602082019092526001600160a01b03851690849060405162000e20919062002ff3565b60006040518083038185875af1925050503d806000811462000e5f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e64565b606091505b505090508062000ed35760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b6064820152608401620006fd565b50620011d2565b60225463ffffffff61010090910481169087160362000f0f5762000f096001600160a01b038616848462001eb4565b620011d2565b6000868660405160200162000f2692919062002e54565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200116a5760008060008580602001905181019062000f78919062003094565b92509250925060008584848460405162000f92906200278e565b62000fa0939291906200310a565b8190604051809103906000f590508015801562000fc1573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f1990604401600060405180830381600087803b1580156200101157600080fd5b505af115801562001026573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620011589392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011cf565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f1990604401600060405180830381600087803b158015620011b557600080fd5b505af1158015620011ca573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200120b95949392919062003011565b60405180910390a150505050505050505050565b600080620012306101008462002ec0565b90506000620012426101008562003147565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200127c92919062002e54565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012af906200278e565b601f1982820381018352601f909101166040819052620012dc908d908d908d908d908d9060200162003187565b60408051601f1981840301815290829052620012fc9291602001620031c8565b604051602081830303815290604052805190602001206040516020016200135594939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013a15760405162461bcd60e51b8152600401620006fd9062002ef3565b60225463ffffffff610100909104811690841603620014295760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c460000006064820152608401620006fd565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff1633868634876021546040516200147d989796959493929190620031fb565b60405180910390a1620014ba620014b46001602260019054906101000a900463ffffffff16338787348880519060200120620009da565b62001f1e565b6026546001600160a01b03166333d6247d620014d5620007e5565b6040518263ffffffff1660e01b8152600401620014f491815260200190565b600060405180830381600087803b1580156200150f57600080fd5b505af115801562001524573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b031633146200155a5760405162461bcd60e51b8152600401620006fd9062002df7565b620007556200206a565b6200156e62001ac6565b6001600160a01b038116620015d55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006fd565b620015e08162001e62565b50565b60225460ff1615620016095760405162461bcd60e51b8152600401620006fd9062002ef3565b60225463ffffffff610100909104811690861603620016915760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c4600000000006064820152608401620006fd565b60008060606001600160a01b03891662001728578534146200171e576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c55456064820152608401620006fd565b6000915062001988565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620017e557604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac90604401600060405180830381600087803b158015620017b857600080fd5b505af1158015620017cd573d6000803e3d6000fd5b50505050806020015193508060000151925062001986565b8415620017fa57620017fa8a88888862002119565b620018116001600160a01b038b1633308a62002541565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001868573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001892919081019062003268565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620018d1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018fb919081019062003268565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200193a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019609190620032a1565b60405160200162001974939291906200310a565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b87602154604051620019ca989796959493929190620031fb565b60405180910390a1620019ef620014b4600084868c8c8c8880519060200120620009da565b6026546001600160a01b03166333d6247d62001a0a620007e5565b6040518263ffffffff1660e01b815260040162001a2991815260200190565b600060405180830381600087803b15801562001a4457600080fd5b505af115801562001a59573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001a8e5760405162461bcd60e51b8152600401620006fd9062002ef3565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006fd565b62001b338a63ffffffff166200121f565b1562001b8a5760405162461bcd60e51b8152602060048201526030602482015260008051602062004b8383398151915260448201526f081053149150511657d0d3105253515160821b6064820152608401620006fd565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001bfe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c249190620032c1565b90508060000362001c8d5760405162461bcd60e51b8152602060048201526039602482015260008051602062004b8383398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c4944000000000000006064820152608401620006fd565b60225463ffffffff878116610100909204161462001d0f5760405162461bcd60e51b8152602060048201526043602482015260008051602062004b8383398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a401620006fd565b602254600090610100900463ffffffff1662001d2d57508862001d30565b50895b62001d5b62001d4c848b8b8b8b8b8b80519060200120620009da565b8e8e63ffffffff1684620008d8565b62001a595760405162461bcd60e51b815260206004820152602c602482015260008051602062004b8383398151915260448201526b0814d35517d253959053125160a21b6064820152608401620006fd565b600062001dbd6101008362002ec0565b9050600062001dcf6101008462003147565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001e5c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006fd565b62000755335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001f1990849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526200257b565b505050565b80600162001f2f60206002620033d8565b62001f3b9190620033e6565b6021541062001fa05760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b6064820152608401620006fd565b60016021600082825462001fb5919062003400565b909155505060215460005b60208110156200205f578160011660010362001ff557826001826020811062001fed5762001fed62002e7e565b015550505050565b600181602081106200200b576200200b62002e7e565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002048919062002ec0565b915080620020568162002ed7565b91505062001fc0565b5062001f196200341b565b60225460ff16620020e45760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006fd565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200215c83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200265492505050565b9050632afa533160e01b6001600160e01b0319821601620023555760008080808080806200218e896004818d62003431565b8101906200219d91906200345d565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620021df5760405162461bcd60e51b8152600401620006fd90620034b8565b6001600160a01b03861630146200220a5760405162461bcd60e51b8152600401620006fd9062003515565b8a8514620022815760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d41544348000000000000006064820152608401620006fd565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162002301919062002ff3565b6000604051808303816000865af19150503d806000811462002340576040519150601f19603f3d011682016040523d82523d6000602084013e62002345565b606091505b505050505050505050506200253a565b6001600160e01b031981166323f2ebc360e21b14620023cb5760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b6064820152608401620006fd565b600080808080808080620023e38a6004818e62003431565b810190620023f2919062003575565b97509750975097509750975097509750336001600160a01b0316886001600160a01b031614620024365760405162461bcd60e51b8152600401620006fd90620034b8565b6001600160a01b0387163014620024615760405162461bcd60e51b8152600401620006fd9062003515565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f1691620024ea919062002ff3565b6000604051808303816000865af19150503d806000811462002529576040519150601f19603f3d011682016040523d82523d6000602084013e6200252e565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d7c9085906323b872dd60e01b9060840162001ee1565b6000620025d2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166200265b9092919063ffffffff16565b80519091501562001f195780806020019051810190620025f3919062003601565b62001f195760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006fd565b6020015190565b6060620009d2848460008585600080866001600160a01b0316858760405162002685919062002ff3565b60006040518083038185875af1925050503d8060008114620026c4576040519150601f19603f3d011682016040523d82523d6000602084013e620026c9565b606091505b5091509150620026dc87838387620026e7565b979650505050505050565b606083156200275b57825160000362002753576001600160a01b0385163b620027535760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006fd565b5081620009d2565b620009d28383815115620027725781518083602001fd5b8060405162461bcd60e51b8152600401620006fd919062003621565b61154c806200363783390190565b6001600160a01b0381168114620015e057600080fd5b8035620027bf816200279c565b919050565b803563ffffffff81168114620027bf57600080fd5b60008083601f840112620027ec57600080fd5b50813567ffffffffffffffff8111156200280557600080fd5b6020830191508360208285010111156200281e57600080fd5b9250929050565b60008060008060008060a087890312156200283f57600080fd5b86356200284c816200279c565b95506200285c60208801620027c4565b945060408701356200286e816200279c565b935060608701359250608087013567ffffffffffffffff8111156200289257600080fd5b620028a089828a01620027d9565b979a9699509497509295939492505050565b60008060408385031215620028c657600080fd5b620028d183620027c4565b91506020830135620028e3816200279c565b809150509250929050565b6000602082840312156200290157600080fd5b5035919050565b6000602082840312156200291b57600080fd5b6200292682620027c4565b9392505050565b6000602082840312156200294057600080fd5b813562002926816200279c565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200298f576200298f6200294d565b604052919050565b600082601f830112620029a957600080fd5b8135602067ffffffffffffffff821115620029c857620029c86200294d565b8160051b620029d982820162002963565b9283528481018201928281019087851115620029f457600080fd5b83870192505b84831015620026dc57823582529183019190830190620029fa565b6000806000806080858703121562002a2c57600080fd5b84359350602085013567ffffffffffffffff8082111562002a4c57600080fd5b62002a5a8883890162002997565b945060408701359150808216821462002a7257600080fd5b509396929550929360600135925050565b60ff81168114620015e057600080fd5b600080600080600080600060e0888a03121562002aaf57600080fd5b873562002abc8162002a83565b965062002acc60208901620027c4565b9550604088013562002ade816200279c565b945062002aee60608901620027c4565b9350608088013562002b00816200279c565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002b3a5762002b3a6200294d565b50601f01601f191660200190565b600082601f83011262002b5a57600080fd5b813562002b7162002b6b8262002b1d565b62002963565b81815284602083860101111562002b8757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002bc557600080fd5b8a3567ffffffffffffffff8082111562002bde57600080fd5b62002bec8e838f0162002997565b9b5062002bfc60208e01620027c4565b9a5060408d0135995060608d0135985062002c1a60808e01620027c4565b975062002c2a60a08e01620027b2565b965062002c3a60c08e01620027c4565b955062002c4a60e08e01620027b2565b94506101008d013593506101208d013591508082111562002c6a57600080fd5b5062002c798d828e0162002b48565b9150509295989b9194979a5092959850565b60008060006060848603121562002ca157600080fd5b62002cac84620027c4565b9250602084013562002cbe816200279c565b9150604084013562002cd0816200279c565b809150509250925092565b600080600080600080600060a0888a03121562002cf757600080fd5b62002d0288620027c4565b9650602088013562002d14816200279c565b9550604088013567ffffffffffffffff8082111562002d3257600080fd5b62002d408b838c01620027d9565b909750955060608a013591508082111562002d5a57600080fd5b5062002d698a828b01620027d9565b909450925050608088013562002d7f8162002a83565b8091505092959891949750929550565b60008060006060848603121562002da557600080fd5b62002db084620027c4565b9250602084013562002dc2816200279c565b9150604084013567ffffffffffffffff81111562002ddf57600080fd5b62002ded8682870162002b48565b9150509250925092565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002ed25762002ed262002e94565b500490565b60006001820162002eec5762002eec62002eaa565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002f7857818101518382015260200162002f5e565b8381111562000d7c5750506000910152565b6000815180845262002fa481602086016020860162002f5b565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002fea9083018462002f8a565b95945050505050565b600082516200300781846020870162002f5b565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f8301126200305a57600080fd5b81516200306b62002b6b8262002b1d565b8181528460208386010111156200308157600080fd5b620009d282602083016020870162002f5b565b600080600060608486031215620030aa57600080fd5b835167ffffffffffffffff80821115620030c357600080fd5b620030d18783880162003048565b94506020860151915080821115620030e857600080fd5b50620030f78682870162003048565b925050604084015162002cd08162002a83565b6060815260006200311f606083018662002f8a565b828103602084015262003133818662002f8a565b91505060ff83166040830152949350505050565b60008262003159576200315962002e94565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006200319d6060830187896200315e565b8281036020840152620031b28186886200315e565b91505060ff831660408301529695505050505050565b60008351620031dc81846020880162002f5b565b835190830190620031f281836020880162002f5b565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c083018190526000916200324f8483018762002f8a565b925080851660e085015250509998505050505050505050565b6000602082840312156200327b57600080fd5b815167ffffffffffffffff8111156200329357600080fd5b620009d28482850162003048565b600060208284031215620032b457600080fd5b8151620029268162002a83565b600060208284031215620032d457600080fd5b5051919050565b600181815b808511156200331c57816000190482111562003300576200330062002eaa565b808516156200330e57918102915b93841c9390800290620032e0565b509250929050565b6000826200333557506001620007a4565b816200334457506000620007a4565b81600181146200335d5760028114620033685762003388565b6001915050620007a4565b60ff8411156200337c576200337c62002eaa565b50506001821b620007a4565b5060208310610133831016604e8410600b8410161715620033ad575081810a620007a4565b620033b98383620032db565b8060001904821115620033d057620033d062002eaa565b029392505050565b600062002926838362003324565b600082821015620033fb57620033fb62002eaa565b500390565b6000821982111562003416576200341662002eaa565b500190565b634e487b7160e01b600052600160045260246000fd5b600080858511156200344257600080fd5b838611156200345057600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200347957600080fd5b873562003486816200279c565b9650602088013562003498816200279c565b95506040880135945060608801359350608088013562002b008162002a83565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b8015158114620015e057600080fd5b600080600080600080600080610100898b0312156200359357600080fd5b8835620035a0816200279c565b97506020890135620035b2816200279c565b965060408901359550606089013594506080890135620035d28162003566565b935060a0890135620035e48162002a83565b979a969950949793969295929450505060c08201359160e0013590565b6000602082840312156200361457600080fd5b8151620029268162003566565b60208152600062002926602083018462002f8a56fe60c06040523480156200001157600080fd5b506040516200154c3803806200154c8339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611092620004ba60003960006104690152600081816102f9015261043301526110926000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611043565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161105557611055610fd1565b506001019056fea264697066735822122048db6a6222fa164d21a8fcb1cd25d2a9e0eee016393c37dcc7b7fd638ef787c264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212203fafbd771213f6e6602facc0f17b92d2c43c794b34f182f74da8a5eaf7772fc564736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZkEVMGlobalExitRoot.json b/compiled-contracts/PolygonZkEVMGlobalExitRoot.json index 452545748..057a190aa 100644 --- a/compiled-contracts/PolygonZkEVMGlobalExitRoot.json +++ b/compiled-contracts/PolygonZkEVMGlobalExitRoot.json @@ -151,8 +151,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506104b1806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461015e57600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610413565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610413565b610171565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e366004610448565b6102d8565b600554610146906001600160a01b031681565b6040516001600160a01b0390911681526020016100a0565b600454610146906001600160a01b031681565b6005546001600160a01b031633148061019457506004546001600160a01b031633145b6102165760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143606482015261545360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b0316330361022e5760018190555b6004546001600160a01b031633036102465760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036102d457600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156102f85750600054600160ff909116105b806103125750303b158015610312575060005460ff166001145b6103755760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161020d565b6000805460ff191660011790558015610398576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561040e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561042557600080fd5b5035919050565b80356001600160a01b038116811461044357600080fd5b919050565b6000806040838503121561045b57600080fd5b6104648361042c565b91506104726020840161042c565b9050925092905056fea2646970667358221220c468713514908397d2ff34ff850c8b2ff7e260b4b6808782e2c0251b7a798dcd64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461015e57600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610413565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610413565b610171565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e366004610448565b6102d8565b600554610146906001600160a01b031681565b6040516001600160a01b0390911681526020016100a0565b600454610146906001600160a01b031681565b6005546001600160a01b031633148061019457506004546001600160a01b031633145b6102165760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143606482015261545360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b0316330361022e5760018190555b6004546001600160a01b031633036102465760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036102d457600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156102f85750600054600160ff909116105b806103125750303b158015610312575060005460ff166001145b6103755760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161020d565b6000805460ff191660011790558015610398576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561040e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561042557600080fd5b5035919050565b80356001600160a01b038116811461044357600080fd5b919050565b6000806040838503121561045b57600080fd5b6104648361042c565b91506104726020840161042c565b9050925092905056fea2646970667358221220c468713514908397d2ff34ff850c8b2ff7e260b4b6808782e2c0251b7a798dcd64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506104b1806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461015e57600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610413565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610413565b610171565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e366004610448565b6102d8565b600554610146906001600160a01b031681565b6040516001600160a01b0390911681526020016100a0565b600454610146906001600160a01b031681565b6005546001600160a01b031633148061019457506004546001600160a01b031633145b6102165760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143606482015261545360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b0316330361022e5760018190555b6004546001600160a01b031633036102465760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036102d457600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156102f85750600054600160ff909116105b806103125750303b158015610312575060005460ff166001145b6103755760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161020d565b6000805460ff191660011790558015610398576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561040e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561042557600080fd5b5035919050565b80356001600160a01b038116811461044357600080fd5b919050565b6000806040838503121561045b57600080fd5b6104648361042c565b91506104726020840161042c565b9050925092905056fea2646970667358221220ce8b45efb7da0764427464ebd7d943575cbb66b2e7381bbc1e119d374d35c81f64736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461015e57600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610413565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610413565b610171565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e366004610448565b6102d8565b600554610146906001600160a01b031681565b6040516001600160a01b0390911681526020016100a0565b600454610146906001600160a01b031681565b6005546001600160a01b031633148061019457506004546001600160a01b031633145b6102165760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143606482015261545360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b0316330361022e5760018190555b6004546001600160a01b031633036102465760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036102d457600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156102f85750600054600160ff909116105b806103125750303b158015610312575060005460ff166001145b6103755760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161020d565b6000805460ff191660011790558015610398576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561040e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561042557600080fd5b5035919050565b80356001600160a01b038116811461044357600080fd5b919050565b6000806040838503121561045b57600080fd5b6104648361042c565b91506104726020840161042c565b9050925092905056fea2646970667358221220ce8b45efb7da0764427464ebd7d943575cbb66b2e7381bbc1e119d374d35c81f64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZkEVMGlobalExitRootL2.json b/compiled-contracts/PolygonZkEVMGlobalExitRootL2.json index 15f4cc64c..65a9fa665 100644 --- a/compiled-contracts/PolygonZkEVMGlobalExitRootL2.json +++ b/compiled-contracts/PolygonZkEVMGlobalExitRootL2.json @@ -73,8 +73,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5060405161023838038061023883398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b6101a5806100936000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610156565b60006020819052908152604090205481565b6100a061009b366004610156565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b031633146101515760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f4e4c595f42524944474500000000000000606482015260840160405180910390fd5b600155565b60006020828403121561016857600080fd5b503591905056fea2646970667358221220f7451da1829b0ecb4873ed6f3f3d32d71e72a79502689acac6a4216f7a54a4a164736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610156565b60006020819052908152604090205481565b6100a061009b366004610156565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b031633146101515760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f4e4c595f42524944474500000000000000606482015260840160405180910390fd5b600155565b60006020828403121561016857600080fd5b503591905056fea2646970667358221220f7451da1829b0ecb4873ed6f3f3d32d71e72a79502689acac6a4216f7a54a4a164736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5060405161023838038061023883398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b6101a5806100936000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610156565b60006020819052908152604090205481565b6100a061009b366004610156565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b031633146101515760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f4e4c595f42524944474500000000000000606482015260840160405180910390fd5b600155565b60006020828403121561016857600080fd5b503591905056fea2646970667358221220080e511cb623b305e3c01d5336bc6ed7ba431d95296c11bb0c3369b618acb2e864736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610156565b60006020819052908152604090205481565b6100a061009b366004610156565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b031633146101515760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f4e4c595f42524944474500000000000000606482015260840160405180910390fd5b600155565b60006020828403121561016857600080fd5b503591905056fea2646970667358221220080e511cb623b305e3c01d5336bc6ed7ba431d95296c11bb0c3369b618acb2e864736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZkEVMGlobalExitRootL2Mock.json b/compiled-contracts/PolygonZkEVMGlobalExitRootL2Mock.json index bcef27e10..6eb6d0c09 100644 --- a/compiled-contracts/PolygonZkEVMGlobalExitRootL2Mock.json +++ b/compiled-contracts/PolygonZkEVMGlobalExitRootL2Mock.json @@ -104,8 +104,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5060405161029e38038061029e83398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b61020b806100936000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806301fd904414610067578063116c40c314610083578063257b36321461009857806333d6247d146100b857806396e07459146100cb578063a3c573eb146100eb575b600080fd5b61007060015481565b6040519081526020015b60405180910390f35b61009661009136600461019a565b600155565b005b6100706100a636600461019a565b60006020819052908152604090205481565b6100966100c636600461019a565b610116565b6100966100d93660046101b3565b60009182526020829052604090912055565b6002546100fe906001600160a01b031681565b6040516001600160a01b03909116815260200161007a565b6002546001600160a01b031633146100915760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f4e4c595f42524944474500000000000000606482015260840160405180910390fd5b6000602082840312156101ac57600080fd5b5035919050565b600080604083850312156101c657600080fd5b5050803592602090910135915056fea264697066735822122085e707f253243a8829ee7f7d67abda667a60278d5b76bdb0aa1a0971447503a064736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c806301fd904414610067578063116c40c314610083578063257b36321461009857806333d6247d146100b857806396e07459146100cb578063a3c573eb146100eb575b600080fd5b61007060015481565b6040519081526020015b60405180910390f35b61009661009136600461019a565b600155565b005b6100706100a636600461019a565b60006020819052908152604090205481565b6100966100c636600461019a565b610116565b6100966100d93660046101b3565b60009182526020829052604090912055565b6002546100fe906001600160a01b031681565b6040516001600160a01b03909116815260200161007a565b6002546001600160a01b031633146100915760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f4e4c595f42524944474500000000000000606482015260840160405180910390fd5b6000602082840312156101ac57600080fd5b5035919050565b600080604083850312156101c657600080fd5b5050803592602090910135915056fea264697066735822122085e707f253243a8829ee7f7d67abda667a60278d5b76bdb0aa1a0971447503a064736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5060405161029e38038061029e83398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b61020b806100936000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806301fd904414610067578063116c40c314610083578063257b36321461009857806333d6247d146100b857806396e07459146100cb578063a3c573eb146100eb575b600080fd5b61007060015481565b6040519081526020015b60405180910390f35b61009661009136600461019a565b600155565b005b6100706100a636600461019a565b60006020819052908152604090205481565b6100966100c636600461019a565b610116565b6100966100d93660046101b3565b60009182526020829052604090912055565b6002546100fe906001600160a01b031681565b6040516001600160a01b03909116815260200161007a565b6002546001600160a01b031633146100915760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f4e4c595f42524944474500000000000000606482015260840160405180910390fd5b6000602082840312156101ac57600080fd5b5035919050565b600080604083850312156101c657600080fd5b5050803592602090910135915056fea2646970667358221220f1809c6e5507e3c43ac7c6d44326a3380807bb61faa0ce0d03d68c93b410611864736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c806301fd904414610067578063116c40c314610083578063257b36321461009857806333d6247d146100b857806396e07459146100cb578063a3c573eb146100eb575b600080fd5b61007060015481565b6040519081526020015b60405180910390f35b61009661009136600461019a565b600155565b005b6100706100a636600461019a565b60006020819052908152604090205481565b6100966100c636600461019a565b610116565b6100966100d93660046101b3565b60009182526020829052604090912055565b6002546100fe906001600160a01b031681565b6040516001600160a01b03909116815260200161007a565b6002546001600160a01b031633146100915760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f4e4c595f42524944474500000000000000606482015260840160405180910390fd5b6000602082840312156101ac57600080fd5b5035919050565b600080604083850312156101c657600080fd5b5050803592602090910135915056fea2646970667358221220f1809c6e5507e3c43ac7c6d44326a3380807bb61faa0ce0d03d68c93b410611864736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZkEVMGlobalExitRootMock.json b/compiled-contracts/PolygonZkEVMGlobalExitRootMock.json index 6942050b1..1588b1e42 100644 --- a/compiled-contracts/PolygonZkEVMGlobalExitRootMock.json +++ b/compiled-contracts/PolygonZkEVMGlobalExitRootMock.json @@ -198,8 +198,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5060405161077a38038061077a83398101604081905261002f916101bb565b6100398282610040565b50506101ee565b600054610100900460ff16158080156100605750600054600160ff909116105b8061008b57506100793061019060201b6104ae1760201c565b15801561008b575060005460ff166001145b6100f25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015610115576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561018b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b80516001600160a01b03811681146101b657600080fd5b919050565b600080604083850312156101ce57600080fd5b6101d78361019f565b91506101e56020840161019f565b90509250929050565b61057d806101fd6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80633ed691ef116100665780633ed691ef14610110578063485cc955146101495780635bcef6731461015c5780635ec6a8df1461017c578063a3c573eb146101a757600080fd5b806301fd9044146100a3578063051a9e28146100bf578063257b3632146100d4578063319cf735146100f457806333d6247d146100fd575b600080fd5b6100ac60015481565b6040519081526020015b60405180910390f35b6100d26100cd3660046104bd565b6101ba565b005b6100ac6100e23660046104bd565b60036020526000908152604090205481565b6100ac60025481565b6100d261010b3660046104bd565b61020c565b6100ac60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d26101573660046104f2565b610373565b6100d261016a366004610525565b60009182526003602052604090912055565b60055461018f906001600160a01b031681565b6040516001600160a01b0390911681526020016100b6565b60045461018f906001600160a01b031681565b80600360006101f860025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b6005546001600160a01b031633148061022f57506004546001600160a01b031633145b6102b15760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143606482015261545360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b031633036102c95760018190555b6004546001600160a01b031633036102e15760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361036f57600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103935750600054600160ff909116105b806103ad5750303b1580156103ad575060005460ff166001145b6104105760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016102a8565b6000805460ff191660011790558015610433576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b031992831617909255600480549285169290911691909117905580156104a9576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b6000602082840312156104cf57600080fd5b5035919050565b80356001600160a01b03811681146104ed57600080fd5b919050565b6000806040838503121561050557600080fd5b61050e836104d6565b915061051c602084016104d6565b90509250929050565b6000806040838503121561053857600080fd5b5050803592602090910135915056fea2646970667358221220c80e870580479f932b04545fffd3baa02e83e8f5d0ede84bbb442e598bce6aae64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c80633ed691ef116100665780633ed691ef14610110578063485cc955146101495780635bcef6731461015c5780635ec6a8df1461017c578063a3c573eb146101a757600080fd5b806301fd9044146100a3578063051a9e28146100bf578063257b3632146100d4578063319cf735146100f457806333d6247d146100fd575b600080fd5b6100ac60015481565b6040519081526020015b60405180910390f35b6100d26100cd3660046104bd565b6101ba565b005b6100ac6100e23660046104bd565b60036020526000908152604090205481565b6100ac60025481565b6100d261010b3660046104bd565b61020c565b6100ac60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d26101573660046104f2565b610373565b6100d261016a366004610525565b60009182526003602052604090912055565b60055461018f906001600160a01b031681565b6040516001600160a01b0390911681526020016100b6565b60045461018f906001600160a01b031681565b80600360006101f860025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b6005546001600160a01b031633148061022f57506004546001600160a01b031633145b6102b15760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143606482015261545360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b031633036102c95760018190555b6004546001600160a01b031633036102e15760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361036f57600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103935750600054600160ff909116105b806103ad5750303b1580156103ad575060005460ff166001145b6104105760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016102a8565b6000805460ff191660011790558015610433576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b031992831617909255600480549285169290911691909117905580156104a9576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b6000602082840312156104cf57600080fd5b5035919050565b80356001600160a01b03811681146104ed57600080fd5b919050565b6000806040838503121561050557600080fd5b61050e836104d6565b915061051c602084016104d6565b90509250929050565b6000806040838503121561053857600080fd5b5050803592602090910135915056fea2646970667358221220c80e870580479f932b04545fffd3baa02e83e8f5d0ede84bbb442e598bce6aae64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5060405161077a38038061077a83398101604081905261002f916101bb565b6100398282610040565b50506101ee565b600054610100900460ff16158080156100605750600054600160ff909116105b8061008b57506100793061019060201b6104ae1760201c565b15801561008b575060005460ff166001145b6100f25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015610115576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561018b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b80516001600160a01b03811681146101b657600080fd5b919050565b600080604083850312156101ce57600080fd5b6101d78361019f565b91506101e56020840161019f565b90509250929050565b61057d806101fd6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80633ed691ef116100665780633ed691ef14610110578063485cc955146101495780635bcef6731461015c5780635ec6a8df1461017c578063a3c573eb146101a757600080fd5b806301fd9044146100a3578063051a9e28146100bf578063257b3632146100d4578063319cf735146100f457806333d6247d146100fd575b600080fd5b6100ac60015481565b6040519081526020015b60405180910390f35b6100d26100cd3660046104bd565b6101ba565b005b6100ac6100e23660046104bd565b60036020526000908152604090205481565b6100ac60025481565b6100d261010b3660046104bd565b61020c565b6100ac60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d26101573660046104f2565b610373565b6100d261016a366004610525565b60009182526003602052604090912055565b60055461018f906001600160a01b031681565b6040516001600160a01b0390911681526020016100b6565b60045461018f906001600160a01b031681565b80600360006101f860025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b6005546001600160a01b031633148061022f57506004546001600160a01b031633145b6102b15760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143606482015261545360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b031633036102c95760018190555b6004546001600160a01b031633036102e15760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361036f57600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103935750600054600160ff909116105b806103ad5750303b1580156103ad575060005460ff166001145b6104105760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016102a8565b6000805460ff191660011790558015610433576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b031992831617909255600480549285169290911691909117905580156104a9576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b6000602082840312156104cf57600080fd5b5035919050565b80356001600160a01b03811681146104ed57600080fd5b919050565b6000806040838503121561050557600080fd5b61050e836104d6565b915061051c602084016104d6565b90509250929050565b6000806040838503121561053857600080fd5b5050803592602090910135915056fea26469706673582212204aacd620f8b8a307bfa14a89da5b0d64ad22fc720c62b93a20b9f03df08cdf8964736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c80633ed691ef116100665780633ed691ef14610110578063485cc955146101495780635bcef6731461015c5780635ec6a8df1461017c578063a3c573eb146101a757600080fd5b806301fd9044146100a3578063051a9e28146100bf578063257b3632146100d4578063319cf735146100f457806333d6247d146100fd575b600080fd5b6100ac60015481565b6040519081526020015b60405180910390f35b6100d26100cd3660046104bd565b6101ba565b005b6100ac6100e23660046104bd565b60036020526000908152604090205481565b6100ac60025481565b6100d261010b3660046104bd565b61020c565b6100ac60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d26101573660046104f2565b610373565b6100d261016a366004610525565b60009182526003602052604090912055565b60055461018f906001600160a01b031681565b6040516001600160a01b0390911681526020016100b6565b60045461018f906001600160a01b031681565b80600360006101f860025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b6005546001600160a01b031633148061022f57506004546001600160a01b031633145b6102b15760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143606482015261545360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b031633036102c95760018190555b6004546001600160a01b031633036102e15760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361036f57600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103935750600054600160ff909116105b806103ad5750303b1580156103ad575060005460ff166001145b6104105760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016102a8565b6000805460ff191660011790558015610433576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b031992831617909255600480549285169290911691909117905580156104a9576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b6000602082840312156104cf57600080fd5b5035919050565b80356001600160a01b03811681146104ed57600080fd5b919050565b6000806040838503121561050557600080fd5b61050e836104d6565b915061051c602084016104d6565b90509250929050565b6000806040838503121561053857600080fd5b5050803592602090910135915056fea26469706673582212204aacd620f8b8a307bfa14a89da5b0d64ad22fc720c62b93a20b9f03df08cdf8964736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/PolygonZkEVMBridge.sol b/contracts/PolygonZkEVMBridge.sol index 0242c4aa6..2d8d5ebaa 100644 --- a/contracts/PolygonZkEVMBridge.sol +++ b/contracts/PolygonZkEVMBridge.sol @@ -195,6 +195,7 @@ contract PolygonZkEVMBridge is metadata, uint32(depositCount) ); + _deposit( getLeafValue( LEAF_TYPE_ASSET, diff --git a/contracts/PolygonZkEVMGlobalExitRoot.sol b/contracts/PolygonZkEVMGlobalExitRoot.sol index bb4068d6c..4de5f16f9 100644 --- a/contracts/PolygonZkEVMGlobalExitRoot.sol +++ b/contracts/PolygonZkEVMGlobalExitRoot.sol @@ -18,7 +18,7 @@ contract PolygonZkEVMGlobalExitRoot is // Mainnet exit root, this will be updated every time a deposit is made in mainnet bytes32 public lastMainnetExitRoot; - // Store every global exit root: Root --> rootNum + // Store every global exit root: Root --> timestamp mapping(bytes32 => uint256) public globalExitRootMap; // PolygonZkEVMBridge address @@ -67,7 +67,7 @@ contract PolygonZkEVMGlobalExitRoot is abi.encodePacked(lastMainnetExitRoot, lastRollupExitRoot) ); - // If it already exist, do not modify the timestamp + // If it already exists, do not modify the timestamp if (globalExitRootMap[newGlobalExitRoot] == 0) { globalExitRootMap[newGlobalExitRoot] = block.timestamp; emit UpdateGlobalExitRoot(lastMainnetExitRoot, lastRollupExitRoot); diff --git a/contracts/PolygonZkEVMGlobalExitRootL2.sol b/contracts/PolygonZkEVMGlobalExitRootL2.sol index ae3f2f5eb..1498bc5c6 100644 --- a/contracts/PolygonZkEVMGlobalExitRootL2.sol +++ b/contracts/PolygonZkEVMGlobalExitRootL2.sol @@ -6,28 +6,28 @@ import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; /** * Contract responsible for managing the exit roots for the L2 and global exit roots - * The special circuit variables will be accesed and updated directly by the circuit + * The special circuit variables will be accessed and updated directly by the circuit */ contract PolygonZkEVMGlobalExitRootL2 { ///////////////////////////// // Special circuit variables //////////////////////////// - // Store every global exit root + // Store every global exit root: Root --> timestamp mapping(bytes32 => uint256) public globalExitRootMap; - // Rollup exit root, will be updated for every PolygonZKEVM Bridge call + // Rollup exit root will be updated for every PolygonZkEVMBridge call bytes32 public lastRollupExitRoot; //////////////////// // Regular variables /////////////////// - // PolygonZKEVM Bridge address + // PolygonZkEVM Bridge address address public bridgeAddress; /** - * @param _bridgeAddress PolygonZKEVMBridge contract address + * @param _bridgeAddress PolygonZkEVMBridge contract address */ constructor(address _bridgeAddress) { bridgeAddress = _bridgeAddress; @@ -40,7 +40,7 @@ contract PolygonZkEVMGlobalExitRootL2 { function updateExitRoot(bytes32 newRoot) external { require( msg.sender == bridgeAddress, - "PolygonZKEVMGlobalExitRootL2::updateExitRoot: ONLY_BRIDGE" + "PolygonZkEVMGlobalExitRootL2::updateExitRoot: ONLY_BRIDGE" ); lastRollupExitRoot = newRoot; } diff --git a/docs/PolygonZkEVMGlobalExitRootL2.md b/docs/PolygonZkEVMGlobalExitRootL2.md index 198e4e58d..0df533c29 100644 --- a/docs/PolygonZkEVMGlobalExitRootL2.md +++ b/docs/PolygonZkEVMGlobalExitRootL2.md @@ -1,5 +1,5 @@ Contract responsible for managing the exit roots for the L2 and global exit roots -The special circuit variables will be accesed and updated directly by the circuit +The special circuit variables will be accessed and updated directly by the circuit ## Functions @@ -14,7 +14,7 @@ The special circuit variables will be accesed and updated directly by the circui #### Parameters: | Name | Type | Description | | :--- | :--- | :------------------------------------------------------------------- | -|`_bridgeAddress` | address | PolygonZKEVMBridge contract address +|`_bridgeAddress` | address | PolygonZkEVMBridge contract address ### updateExitRoot ```solidity From e9416861fdb97d7551cbbffe4840f387675442be Mon Sep 17 00:00:00 2001 From: krlosMata Date: Tue, 20 Dec 2022 23:38:24 +0100 Subject: [PATCH 60/71] comments --- compiled-contracts/PolygonZkEVMBridge.json | 32 ++++++------- .../PolygonZkEVMBridgeMock.json | 32 ++++++------- .../PolygonZkEVMGlobalExitRoot.json | 4 +- .../PolygonZkEVMGlobalExitRootL2.json | 4 +- .../PolygonZkEVMGlobalExitRootL2Mock.json | 4 +- .../PolygonZkEVMGlobalExitRootMock.json | 4 +- compiled-contracts/TokenWrapped.json | 20 ++++++-- contracts/PolygonZkEVM.sol | 32 ++++++------- contracts/PolygonZkEVMBridge.sol | 46 +++++++++---------- contracts/PolygonZkEVMGlobalExitRoot.sol | 2 +- contracts/PolygonZkEVMGlobalExitRootL2.sol | 2 +- contracts/PolygonZkEVMTimelock.sol | 2 +- contracts/lib/DepositContract.sol | 2 +- contracts/lib/TokenWrapped.sol | 2 +- 14 files changed, 100 insertions(+), 88 deletions(-) diff --git a/compiled-contracts/PolygonZkEVMBridge.json b/compiled-contracts/PolygonZkEVMBridge.json index f5e6a3b82..f0e778d57 100644 --- a/compiled-contracts/PolygonZkEVMBridge.json +++ b/compiled-contracts/PolygonZkEVMBridge.json @@ -515,7 +515,7 @@ }, { "internalType": "address", - "name": "_zkEVMaddress", + "name": "_poeAddress", "type": "address" } ], @@ -569,6 +569,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "poeAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -684,23 +697,10 @@ ], "stateMutability": "view", "type": "function" - }, - { - "inputs": [], - "name": "zkEVMaddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506147ce806100206000396000f3fe608060405260043610620001675760003560e01c80637b6323c111620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b80637b6323c1146200037057806381b1c17414620003955780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b806337883a3e116200011e57806337883a3e14620002a25780633ae0504714620002c45780633da8168214620002dc5780633e1970431462000301578063463855491462000326578063647c576c146200034b57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002439565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009c1565b348015620001db57600080fd5b50620001f3620001ed366004620024c6565b620009fa565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002502565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b50602754620001f3906001600160a01b031681565b348015620002d157600080fd5b506200022462000a4d565b348015620002e957600080fd5b50620001a1620002fb366004620025f1565b62000b40565b3480156200030e57600080fd5b5062000224620003203660046200266f565b62000c42565b3480156200033357600080fd5b50620001836200034536600462002780565b62000ccf565b3480156200035857600080fd5b50620001836200036a36600462002867565b62000e75565b3480156200037d57600080fd5b50620001836200038f36600462002780565b62000fd4565b348015620003a257600080fd5b50620001f3620003b4366004620028b7565b6024602052600090815260409020546001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028b7565b6200145b565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d366004620028d1565b620014a0565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b036600462002985565b620015b7565b348015620004c357600080fd5b506200018362001763565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028b7565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b81526004016200055390620029ed565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008db565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200073857604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac90604401600060405180830381600087803b1580156200070b57600080fd5b505af115801562000720573d6000803e3d6000fd5b505050508060200151935080600001519250620008d9565b84156200074d576200074d8a8888886200179a565b620007646001600160a01b038b1633308a62001bc2565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007bb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007e5919081019062002ad0565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000824573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200084e919081019062002ad0565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200088d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008b3919062002b09565b604051602001620008c79392919062002b57565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200091d98979695949392919062002b94565b60405180910390a16200094862000942600084868c8c8c888051906020012062000c42565b62001c2f565b6026546001600160a01b03166333d6247d6200096362000a4d565b6040518263ffffffff1660e01b81526004016200098291815260200190565b600060405180830381600087803b1580156200099d57600080fd5b505af1158015620009b2573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ee5760405162461bcd60e51b8152600401620005539062002c01565b620009f862001d80565b565b600060246000848460405160200162000a1592919062002c5e565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b37578260011660010362000ab8576001816020811062000a845762000a8462002c88565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000ae5565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000af260028462002cca565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b2e9062002ce1565b91505062000a58565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c33578160011660010362000bbd5786818151811062000b7b5762000b7b62002c88565b60200260200101518360405160200162000b9f929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c0f565b8287828151811062000bd35762000bd362002c88565b602002602001015160405160200162000bf6929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c1c60028362002cca565b91508062000c2a8162002ce1565b91505062000b50565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000cf55760405162461bcd60e51b81526004016200055390620029ed565b62000d0b8a8a8a8a8a8a8a8a8a8a600162001dde565b62000d1c8963ffffffff1662002069565b6000836001600160a01b03168387898560405160240162000d409392919062002cfd565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d77919062002d38565b60006040518083038185875af1925050503d806000811462000db6576040519150601f19603f3d011682016040523d82523d6000602084013e62000dbb565b606091505b505090508062000e275760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e6095949392919062002d56565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000e965750600054600160ff909116105b8062000eb25750303b15801562000eb2575060005460ff166001145b62000f175760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f3b576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fce576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff161562000ffa5760405162461bcd60e51b81526004016200055390620029ed565b620010108a8a8a8a8a8a8a8a8a8a600062001dde565b620010218963ffffffff1662002069565b6001600160a01b0385166200111657604080516000808252602082019092526001600160a01b0385169084906040516200105c919062002d38565b60006040518083038185875af1925050503d80600081146200109b576040519150601f19603f3d011682016040523d82523d6000602084013e620010a0565b606091505b50509050806200110f5760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b506200140e565b60225463ffffffff6101009091048116908716036200114b57620011456001600160a01b0386168484620020ab565b6200140e565b600086866040516020016200116292919062002c5e565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013a657600080600085806020019051810190620011b4919062002d8d565b925092509250600085848484604051620011ce906200239f565b620011dc9392919062002b57565b8190604051809103906000f5905080158015620011fd573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f1990604401600060405180830381600087803b1580156200124d57600080fd5b505af115801562001262573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013949392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200140b565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f1990604401600060405180830381600087803b158015620013f157600080fd5b505af115801562001406573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200144795949392919062002d56565b60405180910390a150505050505050505050565b6000806200146c6101008462002cca565b905060006200147e6101008562002e03565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014b892919062002c5e565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014eb906200239f565b601f1982820381018352601f90910116604081905262001518908d908d908d908d908d9060200162002e43565b60408051601f198184030181529082905262001538929160200162002e84565b604051602081830303815290604052805190602001206040516020016200159194939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015dd5760405162461bcd60e51b81526004016200055390620029ed565b60225463ffffffff610100909104811690841603620016655760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016b998979695949392919062002b94565b60405180910390a1620016f0620009426001602260019054906101000a900463ffffffff1633878734888051906020012062000c42565b6026546001600160a01b03166333d6247d6200170b62000a4d565b6040518263ffffffff1660e01b81526004016200172a91815260200190565b600060405180830381600087803b1580156200174557600080fd5b505af11580156200175a573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017905760405162461bcd60e51b8152600401620005539062002c01565b620009f8620020dd565b6000620017dd83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200218c92505050565b9050632afa533160e01b6001600160e01b0319821601620019d65760008080808080806200180f896004818d62002eb7565b8101906200181e919062002ee3565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018605760405162461bcd60e51b8152600401620005539062002f3e565b6001600160a01b03861630146200188b5760405162461bcd60e51b8152600401620005539062002f9b565b8a8514620019025760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162001982919062002d38565b6000604051808303816000865af19150503d8060008114620019c1576040519150601f19603f3d011682016040523d82523d6000602084013e620019c6565b606091505b5050505050505050505062001bbb565b6001600160e01b031981166323f2ebc360e21b1462001a4c5760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a648a6004818e62002eb7565b81019062001a73919062002ffb565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001ab75760405162461bcd60e51b8152600401620005539062002f3e565b6001600160a01b038716301462001ae25760405162461bcd60e51b8152600401620005539062002f9b565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001b6b919062002d38565b6000604051808303816000865af19150503d806000811462001baa576040519150601f19603f3d011682016040523d82523d6000602084013e62001baf565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fce9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262002193565b80600162001c406020600262003184565b62001c4c919062003192565b6021541062001cb15760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cc69190620031ac565b909155505060215460005b602081101562001d70578160011660010362001d0657826001826020811062001cfe5762001cfe62002c88565b015550505050565b6001816020811062001d1c5762001d1c62002c88565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d59919062002cca565b91508062001d678162002ce1565b91505062001cd1565b5062001d7b620031c7565b505050565b60225460ff161562001da65760405162461bcd60e51b81526004016200055390620029ed565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001def8a63ffffffff166200145b565b1562001e465760405162461bcd60e51b815260206004820152603060248201526000805160206200477983398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001eba573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ee09190620031dd565b90508060000362001f495760405162461bcd60e51b815260206004820152603960248201526000805160206200477983398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff878116610100909204161462001fcb5760405162461bcd60e51b815260206004820152604360248201526000805160206200477983398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff1662001fe957508862001fec565b50895b6200201762002008848b8b8b8b8b8b8051906020012062000c42565b8e8e63ffffffff168462000b40565b620009b25760405162461bcd60e51b815260206004820152602c60248201526000805160206200477983398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020796101008362002cca565b905060006200208b6101008462002e03565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001d7b90849063a9059cbb60e01b9060640162001bf7565b60225460ff16620021575760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b6000620021ea826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166200226c9092919063ffffffff16565b80519091501562001d7b57808060200190518101906200220b9190620031f7565b62001d7b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c3a848460008585600080866001600160a01b0316858760405162002296919062002d38565b60006040518083038185875af1925050503d8060008114620022d5576040519150601f19603f3d011682016040523d82523d6000602084013e620022da565b606091505b5091509150620022ed87838387620022f8565b979650505050505050565b606083156200236c57825160000362002364576001600160a01b0385163b620023645760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c3a565b62000c3a8383815115620023835781518083602001fd5b8060405162461bcd60e51b815260040162000553919062003217565b61154c806200322d83390190565b6001600160a01b0381168114620023c357600080fd5b50565b8035620023d381620023ad565b919050565b803563ffffffff81168114620023d357600080fd5b60008083601f8401126200240057600080fd5b50813567ffffffffffffffff8111156200241957600080fd5b6020830191508360208285010111156200243257600080fd5b9250929050565b60008060008060008060a087890312156200245357600080fd5b86356200246081620023ad565b95506200247060208801620023d8565b945060408701356200248281620023ad565b935060608701359250608087013567ffffffffffffffff811115620024a657600080fd5b620024b489828a01620023ed565b979a9699509497509295939492505050565b60008060408385031215620024da57600080fd5b620024e583620023d8565b91506020830135620024f781620023ad565b809150509250929050565b6000602082840312156200251557600080fd5b81356200252281620023ad565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200256b576200256b62002529565b604052919050565b600082601f8301126200258557600080fd5b8135602067ffffffffffffffff821115620025a457620025a462002529565b8160051b620025b58282016200253f565b9283528481018201928281019087851115620025d057600080fd5b83870192505b84831015620022ed57823582529183019190830190620025d6565b600080600080608085870312156200260857600080fd5b84359350602085013567ffffffffffffffff808211156200262857600080fd5b620026368883890162002573565b94506040870135915080821682146200264e57600080fd5b509396929550929360600135925050565b60ff81168114620023c357600080fd5b600080600080600080600060e0888a0312156200268b57600080fd5b873562002698816200265f565b9650620026a860208901620023d8565b95506040880135620026ba81620023ad565b9450620026ca60608901620023d8565b93506080880135620026dc81620023ad565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002716576200271662002529565b50601f01601f191660200190565b600082601f8301126200273657600080fd5b81356200274d6200274782620026f9565b6200253f565b8181528460208386010111156200276357600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027a157600080fd5b8a3567ffffffffffffffff80821115620027ba57600080fd5b620027c88e838f0162002573565b9b50620027d860208e01620023d8565b9a5060408d0135995060608d01359850620027f660808e01620023d8565b97506200280660a08e01620023c6565b96506200281660c08e01620023d8565b95506200282660e08e01620023c6565b94506101008d013593506101208d01359150808211156200284657600080fd5b50620028558d828e0162002724565b9150509295989b9194979a5092959850565b6000806000606084860312156200287d57600080fd5b6200288884620023d8565b925060208401356200289a81620023ad565b91506040840135620028ac81620023ad565b809150509250925092565b600060208284031215620028ca57600080fd5b5035919050565b600080600080600080600060a0888a031215620028ed57600080fd5b620028f888620023d8565b965060208801356200290a81620023ad565b9550604088013567ffffffffffffffff808211156200292857600080fd5b620029368b838c01620023ed565b909750955060608a01359150808211156200295057600080fd5b506200295f8a828b01620023ed565b909450925050608088013562002975816200265f565b8091505092959891949750929550565b6000806000606084860312156200299b57600080fd5b620029a684620023d8565b92506020840135620029b881620023ad565b9150604084013567ffffffffffffffff811115620029d557600080fd5b620029e38682870162002724565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002a7257818101518382015260200162002a58565b8381111562000fce5750506000910152565b600082601f83011262002a9657600080fd5b815162002aa76200274782620026f9565b81815284602083860101111562002abd57600080fd5b62000c3a82602083016020870162002a55565b60006020828403121562002ae357600080fd5b815167ffffffffffffffff81111562002afb57600080fd5b62000c3a8482850162002a84565b60006020828403121562002b1c57600080fd5b815162002522816200265f565b6000815180845262002b4381602086016020860162002a55565b601f01601f19169290920160200192915050565b60608152600062002b6c606083018662002b29565b828103602084015262002b80818662002b29565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002be88483018762002b29565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002cdc5762002cdc62002c9e565b500490565b60006001820162002cf65762002cf662002cb4565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d2f9083018462002b29565b95945050505050565b6000825162002d4c81846020870162002a55565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002da357600080fd5b835167ffffffffffffffff8082111562002dbc57600080fd5b62002dca8783880162002a84565b9450602086015191508082111562002de157600080fd5b5062002df08682870162002a84565b9250506040840151620028ac816200265f565b60008262002e155762002e1562002c9e565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e5960608301878962002e1a565b828103602084015262002e6e81868862002e1a565b91505060ff831660408301529695505050505050565b6000835162002e9881846020880162002a55565b83519083019062002eae81836020880162002a55565b01949350505050565b6000808585111562002ec857600080fd5b8386111562002ed657600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002eff57600080fd5b873562002f0c81620023ad565b9650602088013562002f1e81620023ad565b955060408801359450606088013593506080880135620026dc816200265f565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b8015158114620023c357600080fd5b600080600080600080600080610100898b0312156200301957600080fd5b88356200302681620023ad565b975060208901356200303881620023ad565b965060408901359550606089013594506080890135620030588162002fec565b935060a08901356200306a816200265f565b979a969950949793969295929450505060c08201359160e0013590565b600181815b80851115620030c8578160001904821115620030ac57620030ac62002cb4565b80851615620030ba57918102915b93841c93908002906200308c565b509250929050565b600082620030e15750600162000a47565b81620030f05750600062000a47565b8160018114620031095760028114620031145762003134565b600191505062000a47565b60ff84111562003128576200312862002cb4565b50506001821b62000a47565b5060208310610133831016604e8410600b841016171562003159575081810a62000a47565b62003165838362003087565b80600019048211156200317c576200317c62002cb4565b029392505050565b6000620025228383620030d0565b600082821015620031a757620031a762002cb4565b500390565b60008219821115620031c257620031c262002cb4565b500190565b634e487b7160e01b600052600160045260246000fd5b600060208284031215620031f057600080fd5b5051919050565b6000602082840312156200320a57600080fd5b8151620025228162002fec565b60208152600062002522602083018462002b2956fe60c06040523480156200001157600080fd5b506040516200154c3803806200154c8339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611092620004ba60003960006104690152600081816102f9015261043301526110926000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611043565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161105557611055610fd1565b506001019056fea264697066735822122048db6a6222fa164d21a8fcb1cd25d2a9e0eee016393c37dcc7b7fd638ef787c264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220594042943b3c64253ad00d87284d7bc31fb7db128afcfabcccd37860d4422c4564736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001675760003560e01c80637b6323c111620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b80637b6323c1146200037057806381b1c17414620003955780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b806337883a3e116200011e57806337883a3e14620002a25780633ae0504714620002c45780633da8168214620002dc5780633e1970431462000301578063463855491462000326578063647c576c146200034b57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002439565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009c1565b348015620001db57600080fd5b50620001f3620001ed366004620024c6565b620009fa565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002502565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b50602754620001f3906001600160a01b031681565b348015620002d157600080fd5b506200022462000a4d565b348015620002e957600080fd5b50620001a1620002fb366004620025f1565b62000b40565b3480156200030e57600080fd5b5062000224620003203660046200266f565b62000c42565b3480156200033357600080fd5b50620001836200034536600462002780565b62000ccf565b3480156200035857600080fd5b50620001836200036a36600462002867565b62000e75565b3480156200037d57600080fd5b50620001836200038f36600462002780565b62000fd4565b348015620003a257600080fd5b50620001f3620003b4366004620028b7565b6024602052600090815260409020546001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028b7565b6200145b565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d366004620028d1565b620014a0565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b036600462002985565b620015b7565b348015620004c357600080fd5b506200018362001763565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028b7565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b81526004016200055390620029ed565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008db565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200073857604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac90604401600060405180830381600087803b1580156200070b57600080fd5b505af115801562000720573d6000803e3d6000fd5b505050508060200151935080600001519250620008d9565b84156200074d576200074d8a8888886200179a565b620007646001600160a01b038b1633308a62001bc2565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007bb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007e5919081019062002ad0565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000824573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200084e919081019062002ad0565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200088d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008b3919062002b09565b604051602001620008c79392919062002b57565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200091d98979695949392919062002b94565b60405180910390a16200094862000942600084868c8c8c888051906020012062000c42565b62001c2f565b6026546001600160a01b03166333d6247d6200096362000a4d565b6040518263ffffffff1660e01b81526004016200098291815260200190565b600060405180830381600087803b1580156200099d57600080fd5b505af1158015620009b2573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ee5760405162461bcd60e51b8152600401620005539062002c01565b620009f862001d80565b565b600060246000848460405160200162000a1592919062002c5e565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b37578260011660010362000ab8576001816020811062000a845762000a8462002c88565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000ae5565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000af260028462002cca565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b2e9062002ce1565b91505062000a58565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c33578160011660010362000bbd5786818151811062000b7b5762000b7b62002c88565b60200260200101518360405160200162000b9f929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c0f565b8287828151811062000bd35762000bd362002c88565b602002602001015160405160200162000bf6929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c1c60028362002cca565b91508062000c2a8162002ce1565b91505062000b50565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000cf55760405162461bcd60e51b81526004016200055390620029ed565b62000d0b8a8a8a8a8a8a8a8a8a8a600162001dde565b62000d1c8963ffffffff1662002069565b6000836001600160a01b03168387898560405160240162000d409392919062002cfd565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d77919062002d38565b60006040518083038185875af1925050503d806000811462000db6576040519150601f19603f3d011682016040523d82523d6000602084013e62000dbb565b606091505b505090508062000e275760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e6095949392919062002d56565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000e965750600054600160ff909116105b8062000eb25750303b15801562000eb2575060005460ff166001145b62000f175760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f3b576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fce576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff161562000ffa5760405162461bcd60e51b81526004016200055390620029ed565b620010108a8a8a8a8a8a8a8a8a8a600062001dde565b620010218963ffffffff1662002069565b6001600160a01b0385166200111657604080516000808252602082019092526001600160a01b0385169084906040516200105c919062002d38565b60006040518083038185875af1925050503d80600081146200109b576040519150601f19603f3d011682016040523d82523d6000602084013e620010a0565b606091505b50509050806200110f5760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b506200140e565b60225463ffffffff6101009091048116908716036200114b57620011456001600160a01b0386168484620020ab565b6200140e565b600086866040516020016200116292919062002c5e565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013a657600080600085806020019051810190620011b4919062002d8d565b925092509250600085848484604051620011ce906200239f565b620011dc9392919062002b57565b8190604051809103906000f5905080158015620011fd573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f1990604401600060405180830381600087803b1580156200124d57600080fd5b505af115801562001262573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013949392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200140b565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f1990604401600060405180830381600087803b158015620013f157600080fd5b505af115801562001406573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200144795949392919062002d56565b60405180910390a150505050505050505050565b6000806200146c6101008462002cca565b905060006200147e6101008562002e03565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014b892919062002c5e565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014eb906200239f565b601f1982820381018352601f90910116604081905262001518908d908d908d908d908d9060200162002e43565b60408051601f198184030181529082905262001538929160200162002e84565b604051602081830303815290604052805190602001206040516020016200159194939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015dd5760405162461bcd60e51b81526004016200055390620029ed565b60225463ffffffff610100909104811690841603620016655760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016b998979695949392919062002b94565b60405180910390a1620016f0620009426001602260019054906101000a900463ffffffff1633878734888051906020012062000c42565b6026546001600160a01b03166333d6247d6200170b62000a4d565b6040518263ffffffff1660e01b81526004016200172a91815260200190565b600060405180830381600087803b1580156200174557600080fd5b505af11580156200175a573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017905760405162461bcd60e51b8152600401620005539062002c01565b620009f8620020dd565b6000620017dd83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200218c92505050565b9050632afa533160e01b6001600160e01b0319821601620019d65760008080808080806200180f896004818d62002eb7565b8101906200181e919062002ee3565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018605760405162461bcd60e51b8152600401620005539062002f3e565b6001600160a01b03861630146200188b5760405162461bcd60e51b8152600401620005539062002f9b565b8a8514620019025760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162001982919062002d38565b6000604051808303816000865af19150503d8060008114620019c1576040519150601f19603f3d011682016040523d82523d6000602084013e620019c6565b606091505b5050505050505050505062001bbb565b6001600160e01b031981166323f2ebc360e21b1462001a4c5760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a648a6004818e62002eb7565b81019062001a73919062002ffb565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001ab75760405162461bcd60e51b8152600401620005539062002f3e565b6001600160a01b038716301462001ae25760405162461bcd60e51b8152600401620005539062002f9b565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001b6b919062002d38565b6000604051808303816000865af19150503d806000811462001baa576040519150601f19603f3d011682016040523d82523d6000602084013e62001baf565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fce9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262002193565b80600162001c406020600262003184565b62001c4c919062003192565b6021541062001cb15760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cc69190620031ac565b909155505060215460005b602081101562001d70578160011660010362001d0657826001826020811062001cfe5762001cfe62002c88565b015550505050565b6001816020811062001d1c5762001d1c62002c88565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d59919062002cca565b91508062001d678162002ce1565b91505062001cd1565b5062001d7b620031c7565b505050565b60225460ff161562001da65760405162461bcd60e51b81526004016200055390620029ed565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001def8a63ffffffff166200145b565b1562001e465760405162461bcd60e51b815260206004820152603060248201526000805160206200477983398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001eba573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ee09190620031dd565b90508060000362001f495760405162461bcd60e51b815260206004820152603960248201526000805160206200477983398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff878116610100909204161462001fcb5760405162461bcd60e51b815260206004820152604360248201526000805160206200477983398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff1662001fe957508862001fec565b50895b6200201762002008848b8b8b8b8b8b8051906020012062000c42565b8e8e63ffffffff168462000b40565b620009b25760405162461bcd60e51b815260206004820152602c60248201526000805160206200477983398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020796101008362002cca565b905060006200208b6101008462002e03565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001d7b90849063a9059cbb60e01b9060640162001bf7565b60225460ff16620021575760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b6000620021ea826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166200226c9092919063ffffffff16565b80519091501562001d7b57808060200190518101906200220b9190620031f7565b62001d7b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c3a848460008585600080866001600160a01b0316858760405162002296919062002d38565b60006040518083038185875af1925050503d8060008114620022d5576040519150601f19603f3d011682016040523d82523d6000602084013e620022da565b606091505b5091509150620022ed87838387620022f8565b979650505050505050565b606083156200236c57825160000362002364576001600160a01b0385163b620023645760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c3a565b62000c3a8383815115620023835781518083602001fd5b8060405162461bcd60e51b815260040162000553919062003217565b61154c806200322d83390190565b6001600160a01b0381168114620023c357600080fd5b50565b8035620023d381620023ad565b919050565b803563ffffffff81168114620023d357600080fd5b60008083601f8401126200240057600080fd5b50813567ffffffffffffffff8111156200241957600080fd5b6020830191508360208285010111156200243257600080fd5b9250929050565b60008060008060008060a087890312156200245357600080fd5b86356200246081620023ad565b95506200247060208801620023d8565b945060408701356200248281620023ad565b935060608701359250608087013567ffffffffffffffff811115620024a657600080fd5b620024b489828a01620023ed565b979a9699509497509295939492505050565b60008060408385031215620024da57600080fd5b620024e583620023d8565b91506020830135620024f781620023ad565b809150509250929050565b6000602082840312156200251557600080fd5b81356200252281620023ad565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200256b576200256b62002529565b604052919050565b600082601f8301126200258557600080fd5b8135602067ffffffffffffffff821115620025a457620025a462002529565b8160051b620025b58282016200253f565b9283528481018201928281019087851115620025d057600080fd5b83870192505b84831015620022ed57823582529183019190830190620025d6565b600080600080608085870312156200260857600080fd5b84359350602085013567ffffffffffffffff808211156200262857600080fd5b620026368883890162002573565b94506040870135915080821682146200264e57600080fd5b509396929550929360600135925050565b60ff81168114620023c357600080fd5b600080600080600080600060e0888a0312156200268b57600080fd5b873562002698816200265f565b9650620026a860208901620023d8565b95506040880135620026ba81620023ad565b9450620026ca60608901620023d8565b93506080880135620026dc81620023ad565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002716576200271662002529565b50601f01601f191660200190565b600082601f8301126200273657600080fd5b81356200274d6200274782620026f9565b6200253f565b8181528460208386010111156200276357600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027a157600080fd5b8a3567ffffffffffffffff80821115620027ba57600080fd5b620027c88e838f0162002573565b9b50620027d860208e01620023d8565b9a5060408d0135995060608d01359850620027f660808e01620023d8565b97506200280660a08e01620023c6565b96506200281660c08e01620023d8565b95506200282660e08e01620023c6565b94506101008d013593506101208d01359150808211156200284657600080fd5b50620028558d828e0162002724565b9150509295989b9194979a5092959850565b6000806000606084860312156200287d57600080fd5b6200288884620023d8565b925060208401356200289a81620023ad565b91506040840135620028ac81620023ad565b809150509250925092565b600060208284031215620028ca57600080fd5b5035919050565b600080600080600080600060a0888a031215620028ed57600080fd5b620028f888620023d8565b965060208801356200290a81620023ad565b9550604088013567ffffffffffffffff808211156200292857600080fd5b620029368b838c01620023ed565b909750955060608a01359150808211156200295057600080fd5b506200295f8a828b01620023ed565b909450925050608088013562002975816200265f565b8091505092959891949750929550565b6000806000606084860312156200299b57600080fd5b620029a684620023d8565b92506020840135620029b881620023ad565b9150604084013567ffffffffffffffff811115620029d557600080fd5b620029e38682870162002724565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002a7257818101518382015260200162002a58565b8381111562000fce5750506000910152565b600082601f83011262002a9657600080fd5b815162002aa76200274782620026f9565b81815284602083860101111562002abd57600080fd5b62000c3a82602083016020870162002a55565b60006020828403121562002ae357600080fd5b815167ffffffffffffffff81111562002afb57600080fd5b62000c3a8482850162002a84565b60006020828403121562002b1c57600080fd5b815162002522816200265f565b6000815180845262002b4381602086016020860162002a55565b601f01601f19169290920160200192915050565b60608152600062002b6c606083018662002b29565b828103602084015262002b80818662002b29565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002be88483018762002b29565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002cdc5762002cdc62002c9e565b500490565b60006001820162002cf65762002cf662002cb4565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d2f9083018462002b29565b95945050505050565b6000825162002d4c81846020870162002a55565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002da357600080fd5b835167ffffffffffffffff8082111562002dbc57600080fd5b62002dca8783880162002a84565b9450602086015191508082111562002de157600080fd5b5062002df08682870162002a84565b9250506040840151620028ac816200265f565b60008262002e155762002e1562002c9e565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e5960608301878962002e1a565b828103602084015262002e6e81868862002e1a565b91505060ff831660408301529695505050505050565b6000835162002e9881846020880162002a55565b83519083019062002eae81836020880162002a55565b01949350505050565b6000808585111562002ec857600080fd5b8386111562002ed657600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002eff57600080fd5b873562002f0c81620023ad565b9650602088013562002f1e81620023ad565b955060408801359450606088013593506080880135620026dc816200265f565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b8015158114620023c357600080fd5b600080600080600080600080610100898b0312156200301957600080fd5b88356200302681620023ad565b975060208901356200303881620023ad565b965060408901359550606089013594506080890135620030588162002fec565b935060a08901356200306a816200265f565b979a969950949793969295929450505060c08201359160e0013590565b600181815b80851115620030c8578160001904821115620030ac57620030ac62002cb4565b80851615620030ba57918102915b93841c93908002906200308c565b509250929050565b600082620030e15750600162000a47565b81620030f05750600062000a47565b8160018114620031095760028114620031145762003134565b600191505062000a47565b60ff84111562003128576200312862002cb4565b50506001821b62000a47565b5060208310610133831016604e8410600b841016171562003159575081810a62000a47565b62003165838362003087565b80600019048211156200317c576200317c62002cb4565b029392505050565b6000620025228383620030d0565b600082821015620031a757620031a762002cb4565b500390565b60008219821115620031c257620031c262002cb4565b500190565b634e487b7160e01b600052600160045260246000fd5b600060208284031215620031f057600080fd5b5051919050565b6000602082840312156200320a57600080fd5b8151620025228162002fec565b60208152600062002522602083018462002b2956fe60c06040523480156200001157600080fd5b506040516200154c3803806200154c8339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611092620004ba60003960006104690152600081816102f9015261043301526110926000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611043565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161105557611055610fd1565b506001019056fea264697066735822122048db6a6222fa164d21a8fcb1cd25d2a9e0eee016393c37dcc7b7fd638ef787c264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220594042943b3c64253ad00d87284d7bc31fb7db128afcfabcccd37860d4422c4564736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50614810806100206000396000f3fe608060405260043610620001675760003560e01c806381b1c17411620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b806381b1c17414620003735780638f61151914620003ad5780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b80633ae05047116200011e5780633ae0504714620002a25780633da8168214620002ba5780633e19704314620002df578063463855491462000304578063647c576c14620003295780637b6323c1146200034e57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002470565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009d2565b348015620001db57600080fd5b50620001f3620001ed366004620024fd565b62000a0b565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002539565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b506200022462000a5e565b348015620002c757600080fd5b50620001a1620002d936600462002628565b62000b51565b348015620002ec57600080fd5b5062000224620002fe366004620026a6565b62000c53565b3480156200031157600080fd5b506200018362000323366004620027b7565b62000ce0565b3480156200033657600080fd5b5062000183620003483660046200289e565b62000e86565b3480156200035b57600080fd5b50620001836200036d366004620027b7565b62000fe5565b3480156200038057600080fd5b50620001f362000392366004620028ee565b6024602052600090815260409020546001600160a01b031681565b348015620003ba57600080fd5b50602754620001f3906001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028ee565b62001492565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002908565b620014d7565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620029bc565b620015ee565b348015620004c357600080fd5b50620001836200179a565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028ee565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a24565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008ec565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074957604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562000710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000736919062002a9b565b50602081015181519094509250620008ea565b84156200075e576200075e8a888888620017d1565b620007756001600160a01b038b1633308a62001bf9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f6919081019062002b36565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000835573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085f919081019062002b36565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c4919062002b6f565b604051602001620008d89392919062002bbd565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092e98979695949392919062002bfa565b60405180910390a16200095962000953600084868c8c8c888051906020012062000c53565b62001c66565b6026546001600160a01b03166333d6247d6200097462000a5e565b6040518263ffffffff1660e01b81526004016200099391815260200190565b600060405180830381600087803b158015620009ae57600080fd5b505af1158015620009c3573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ff5760405162461bcd60e51b8152600401620005539062002c67565b62000a0962001db7565b565b600060246000848460405160200162000a2692919062002cc4565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b48578260011660010362000ac9576001816020811062000a955762000a9562002cee565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af6565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0360028462002d30565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3f9062002d47565b91505062000a69565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c44578160011660010362000bce5786818151811062000b8c5762000b8c62002cee565b60200260200101518360405160200162000bb0929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c20565b8287828151811062000be45762000be462002cee565b602002602001015160405160200162000c07929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2d60028362002d30565b91508062000c3b8162002d47565b91505062000b61565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d065760405162461bcd60e51b8152600401620005539062002a24565b62000d1c8a8a8a8a8a8a8a8a8a8a600162001e15565b62000d2d8963ffffffff16620020a0565b6000836001600160a01b03168387898560405160240162000d519392919062002d63565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d88919062002d9e565b60006040518083038185875af1925050503d806000811462000dc7576040519150601f19603f3d011682016040523d82523d6000602084013e62000dcc565b606091505b505090508062000e385760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e7195949392919062002dbc565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea75750600054600160ff909116105b8062000ec35750303b15801562000ec3575060005460ff166001145b62000f285760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f4c576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff16156200100b5760405162461bcd60e51b8152600401620005539062002a24565b620010218a8a8a8a8a8a8a8a8a8a600062001e15565b620010328963ffffffff16620020a0565b6001600160a01b0385166200112757604080516000808252602082019092526001600160a01b0385169084906040516200106d919062002d9e565b60006040518083038185875af1925050503d8060008114620010ac576040519150601f19603f3d011682016040523d82523d6000602084013e620010b1565b606091505b5050905080620011205760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b5062001445565b60225463ffffffff6101009091048116908716036200115c57620011566001600160a01b0386168484620020e2565b62001445565b600086866040516020016200117392919062002cc4565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013ca57600080600085806020019051810190620011c5919062002df3565b925092509250600085848484604051620011df90620023d6565b620011ed9392919062002bbd565b8190604051809103906000f59050801580156200120e573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001263573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001289919062002a9b565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013b89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001442565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200141a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001440919062002a9b565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200147e95949392919062002dbc565b60405180910390a150505050505050505050565b600080620014a36101008462002d30565b90506000620014b56101008562002e69565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014ef92919062002cc4565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200152290620023d6565b601f1982820381018352601f9091011660408190526200154f908d908d908d908d908d9060200162002ea9565b60408051601f19818403018152908290526200156f929160200162002eea565b60405160208183030381529060405280519060200120604051602001620015c894939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620016145760405162461bcd60e51b8152600401620005539062002a24565b60225463ffffffff6101009091048116908416036200169c5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016f098979695949392919062002bfa565b60405180910390a162001727620009536001602260019054906101000a900463ffffffff1633878734888051906020012062000c53565b6026546001600160a01b03166333d6247d6200174262000a5e565b6040518263ffffffff1660e01b81526004016200176191815260200190565b600060405180830381600087803b1580156200177c57600080fd5b505af115801562001791573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017c75760405162461bcd60e51b8152600401620005539062002c67565b62000a0962002114565b60006200181483838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021c392505050565b9050632afa533160e01b6001600160e01b031982160162001a0d57600080808080808062001846896004818d62002f1d565b81019062001855919062002f49565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018975760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b0386163014620018c25760405162461bcd60e51b8152600401620005539062003001565b8a8514620019395760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620019b9919062002d9e565b6000604051808303816000865af19150503d8060008114620019f8576040519150601f19603f3d011682016040523d82523d6000602084013e620019fd565b606091505b5050505050505050505062001bf2565b6001600160e01b031981166323f2ebc360e21b1462001a835760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a9b8a6004818e62002f1d565b81019062001aaa919062003052565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001aee5760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b038716301462001b195760405162461bcd60e51b8152600401620005539062003001565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001ba2919062002d9e565b6000604051808303816000865af19150503d806000811462001be1576040519150601f19603f3d011682016040523d82523d6000602084013e62001be6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdf9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021ca565b80600162001c7760206002620031db565b62001c839190620031e9565b6021541062001ce85760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cfd919062003203565b909155505060215460005b602081101562001da7578160011660010362001d3d57826001826020811062001d355762001d3562002cee565b015550505050565b6001816020811062001d535762001d5362002cee565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d90919062002d30565b91508062001d9e8162002d47565b91505062001d08565b5062001db26200321e565b505050565b60225460ff161562001ddd5760405162461bcd60e51b8152600401620005539062002a24565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001e268a63ffffffff1662001492565b1562001e7d5760405162461bcd60e51b81526020600482015260306024820152600080516020620047bb83398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ef1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f17919062003234565b90508060000362001f805760405162461bcd60e51b81526020600482015260396024820152600080516020620047bb83398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff8781166101009092041614620020025760405162461bcd60e51b81526020600482015260436024820152600080516020620047bb83398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff166200202057508862002023565b50895b6200204e6200203f848b8b8b8b8b8b8051906020012062000c53565b8e8e63ffffffff168462000b51565b620009c35760405162461bcd60e51b815260206004820152602c6024820152600080516020620047bb83398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020b06101008362002d30565b90506000620020c26101008462002e69565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001db290849063a9059cbb60e01b9060640162001c2e565b60225460ff166200218e5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002221826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022a39092919063ffffffff16565b80519091501562001db2578080602001905181019062002242919062002a9b565b62001db25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c4b848460008585600080866001600160a01b03168587604051620022cd919062002d9e565b60006040518083038185875af1925050503d80600081146200230c576040519150601f19603f3d011682016040523d82523d6000602084013e62002311565b606091505b509150915062002324878383876200232f565b979650505050505050565b60608315620023a35782516000036200239b576001600160a01b0385163b6200239b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c4b565b62000c4b8383815115620023ba5781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200324e565b611557806200326483390190565b6001600160a01b0381168114620023fa57600080fd5b50565b80356200240a81620023e4565b919050565b803563ffffffff811681146200240a57600080fd5b60008083601f8401126200243757600080fd5b50813567ffffffffffffffff8111156200245057600080fd5b6020830191508360208285010111156200246957600080fd5b9250929050565b60008060008060008060a087890312156200248a57600080fd5b86356200249781620023e4565b9550620024a7602088016200240f565b94506040870135620024b981620023e4565b935060608701359250608087013567ffffffffffffffff811115620024dd57600080fd5b620024eb89828a0162002424565b979a9699509497509295939492505050565b600080604083850312156200251157600080fd5b6200251c836200240f565b915060208301356200252e81620023e4565b809150509250929050565b6000602082840312156200254c57600080fd5b81356200255981620023e4565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620025a257620025a262002560565b604052919050565b600082601f830112620025bc57600080fd5b8135602067ffffffffffffffff821115620025db57620025db62002560565b8160051b620025ec82820162002576565b92835284810182019282810190878511156200260757600080fd5b83870192505b8483101562002324578235825291830191908301906200260d565b600080600080608085870312156200263f57600080fd5b84359350602085013567ffffffffffffffff808211156200265f57600080fd5b6200266d88838901620025aa565b94506040870135915080821682146200268557600080fd5b509396929550929360600135925050565b60ff81168114620023fa57600080fd5b600080600080600080600060e0888a031215620026c257600080fd5b8735620026cf8162002696565b9650620026df602089016200240f565b95506040880135620026f181620023e4565b945062002701606089016200240f565b935060808801356200271381620023e4565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200274d576200274d62002560565b50601f01601f191660200190565b600082601f8301126200276d57600080fd5b8135620027846200277e8262002730565b62002576565b8181528460208386010111156200279a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027d857600080fd5b8a3567ffffffffffffffff80821115620027f157600080fd5b620027ff8e838f01620025aa565b9b506200280f60208e016200240f565b9a5060408d0135995060608d013598506200282d60808e016200240f565b97506200283d60a08e01620023fd565b96506200284d60c08e016200240f565b95506200285d60e08e01620023fd565b94506101008d013593506101208d01359150808211156200287d57600080fd5b506200288c8d828e016200275b565b9150509295989b9194979a5092959850565b600080600060608486031215620028b457600080fd5b620028bf846200240f565b92506020840135620028d181620023e4565b91506040840135620028e381620023e4565b809150509250925092565b6000602082840312156200290157600080fd5b5035919050565b600080600080600080600060a0888a0312156200292457600080fd5b6200292f886200240f565b965060208801356200294181620023e4565b9550604088013567ffffffffffffffff808211156200295f57600080fd5b6200296d8b838c0162002424565b909750955060608a01359150808211156200298757600080fd5b50620029968a828b0162002424565b9094509250506080880135620029ac8162002696565b8091505092959891949750929550565b600080600060608486031215620029d257600080fd5b620029dd846200240f565b92506020840135620029ef81620023e4565b9150604084013567ffffffffffffffff81111562002a0c57600080fd5b62002a1a868287016200275b565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b8015158114620023fa57600080fd5b60006020828403121562002aae57600080fd5b8151620025598162002a8c565b60005b8381101562002ad857818101518382015260200162002abe565b8381111562000fdf5750506000910152565b600082601f83011262002afc57600080fd5b815162002b0d6200277e8262002730565b81815284602083860101111562002b2357600080fd5b62000c4b82602083016020870162002abb565b60006020828403121562002b4957600080fd5b815167ffffffffffffffff81111562002b6157600080fd5b62000c4b8482850162002aea565b60006020828403121562002b8257600080fd5b8151620025598162002696565b6000815180845262002ba981602086016020860162002abb565b601f01601f19169290920160200192915050565b60608152600062002bd2606083018662002b8f565b828103602084015262002be6818662002b8f565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002c4e8483018762002b8f565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002d425762002d4262002d04565b500490565b60006001820162002d5c5762002d5c62002d1a565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d959083018462002b8f565b95945050505050565b6000825162002db281846020870162002abb565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002e0957600080fd5b835167ffffffffffffffff8082111562002e2257600080fd5b62002e308783880162002aea565b9450602086015191508082111562002e4757600080fd5b5062002e568682870162002aea565b9250506040840151620028e38162002696565b60008262002e7b5762002e7b62002d04565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002ebf60608301878962002e80565b828103602084015262002ed481868862002e80565b91505060ff831660408301529695505050505050565b6000835162002efe81846020880162002abb565b83519083019062002f1481836020880162002abb565b01949350505050565b6000808585111562002f2e57600080fd5b8386111562002f3c57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f6557600080fd5b873562002f7281620023e4565b9650602088013562002f8481620023e4565b955060408801359450606088013593506080880135620027138162002696565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b0312156200307057600080fd5b88356200307d81620023e4565b975060208901356200308f81620023e4565b965060408901359550606089013594506080890135620030af8162002a8c565b935060a0890135620030c18162002696565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200311f57816000190482111562003103576200310362002d1a565b808516156200311157918102915b93841c9390800290620030e3565b509250929050565b600082620031385750600162000a58565b81620031475750600062000a58565b81600181146200316057600281146200316b576200318b565b600191505062000a58565b60ff8411156200317f576200317f62002d1a565b50506001821b62000a58565b5060208310610133831016604e8410600b8410161715620031b0575081810a62000a58565b620031bc8383620030de565b8060001904821115620031d357620031d362002d1a565b029392505050565b600062002559838362003127565b600082821015620031fe57620031fe62002d1a565b500390565b6000821982111562003219576200321962002d1a565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200324757600080fd5b5051919050565b60208152600062002559602083018462002b8f56fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea2646970667358221220906ea48f19088f63dbf7270e029d0db2a116bfdc48421c0afa81f84f29beb83f64736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212208eec55cf9af9178665644bc6cbcbda06a1eb152295193e76b792bb7bfcb55ac564736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001675760003560e01c806381b1c17411620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b806381b1c17414620003735780638f61151914620003ad5780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b80633ae05047116200011e5780633ae0504714620002a25780633da8168214620002ba5780633e19704314620002df578063463855491462000304578063647c576c14620003295780637b6323c1146200034e57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002470565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009d2565b348015620001db57600080fd5b50620001f3620001ed366004620024fd565b62000a0b565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002539565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b506200022462000a5e565b348015620002c757600080fd5b50620001a1620002d936600462002628565b62000b51565b348015620002ec57600080fd5b5062000224620002fe366004620026a6565b62000c53565b3480156200031157600080fd5b506200018362000323366004620027b7565b62000ce0565b3480156200033657600080fd5b5062000183620003483660046200289e565b62000e86565b3480156200035b57600080fd5b50620001836200036d366004620027b7565b62000fe5565b3480156200038057600080fd5b50620001f362000392366004620028ee565b6024602052600090815260409020546001600160a01b031681565b348015620003ba57600080fd5b50602754620001f3906001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028ee565b62001492565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002908565b620014d7565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620029bc565b620015ee565b348015620004c357600080fd5b50620001836200179a565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028ee565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a24565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008ec565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074957604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562000710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000736919062002a9b565b50602081015181519094509250620008ea565b84156200075e576200075e8a888888620017d1565b620007756001600160a01b038b1633308a62001bf9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f6919081019062002b36565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000835573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085f919081019062002b36565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c4919062002b6f565b604051602001620008d89392919062002bbd565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092e98979695949392919062002bfa565b60405180910390a16200095962000953600084868c8c8c888051906020012062000c53565b62001c66565b6026546001600160a01b03166333d6247d6200097462000a5e565b6040518263ffffffff1660e01b81526004016200099391815260200190565b600060405180830381600087803b158015620009ae57600080fd5b505af1158015620009c3573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ff5760405162461bcd60e51b8152600401620005539062002c67565b62000a0962001db7565b565b600060246000848460405160200162000a2692919062002cc4565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b48578260011660010362000ac9576001816020811062000a955762000a9562002cee565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af6565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0360028462002d30565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3f9062002d47565b91505062000a69565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c44578160011660010362000bce5786818151811062000b8c5762000b8c62002cee565b60200260200101518360405160200162000bb0929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c20565b8287828151811062000be45762000be462002cee565b602002602001015160405160200162000c07929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2d60028362002d30565b91508062000c3b8162002d47565b91505062000b61565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d065760405162461bcd60e51b8152600401620005539062002a24565b62000d1c8a8a8a8a8a8a8a8a8a8a600162001e15565b62000d2d8963ffffffff16620020a0565b6000836001600160a01b03168387898560405160240162000d519392919062002d63565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d88919062002d9e565b60006040518083038185875af1925050503d806000811462000dc7576040519150601f19603f3d011682016040523d82523d6000602084013e62000dcc565b606091505b505090508062000e385760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e7195949392919062002dbc565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea75750600054600160ff909116105b8062000ec35750303b15801562000ec3575060005460ff166001145b62000f285760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f4c576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff16156200100b5760405162461bcd60e51b8152600401620005539062002a24565b620010218a8a8a8a8a8a8a8a8a8a600062001e15565b620010328963ffffffff16620020a0565b6001600160a01b0385166200112757604080516000808252602082019092526001600160a01b0385169084906040516200106d919062002d9e565b60006040518083038185875af1925050503d8060008114620010ac576040519150601f19603f3d011682016040523d82523d6000602084013e620010b1565b606091505b5050905080620011205760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b5062001445565b60225463ffffffff6101009091048116908716036200115c57620011566001600160a01b0386168484620020e2565b62001445565b600086866040516020016200117392919062002cc4565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013ca57600080600085806020019051810190620011c5919062002df3565b925092509250600085848484604051620011df90620023d6565b620011ed9392919062002bbd565b8190604051809103906000f59050801580156200120e573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001263573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001289919062002a9b565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013b89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001442565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200141a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001440919062002a9b565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200147e95949392919062002dbc565b60405180910390a150505050505050505050565b600080620014a36101008462002d30565b90506000620014b56101008562002e69565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014ef92919062002cc4565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200152290620023d6565b601f1982820381018352601f9091011660408190526200154f908d908d908d908d908d9060200162002ea9565b60408051601f19818403018152908290526200156f929160200162002eea565b60405160208183030381529060405280519060200120604051602001620015c894939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620016145760405162461bcd60e51b8152600401620005539062002a24565b60225463ffffffff6101009091048116908416036200169c5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016f098979695949392919062002bfa565b60405180910390a162001727620009536001602260019054906101000a900463ffffffff1633878734888051906020012062000c53565b6026546001600160a01b03166333d6247d6200174262000a5e565b6040518263ffffffff1660e01b81526004016200176191815260200190565b600060405180830381600087803b1580156200177c57600080fd5b505af115801562001791573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017c75760405162461bcd60e51b8152600401620005539062002c67565b62000a0962002114565b60006200181483838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021c392505050565b9050632afa533160e01b6001600160e01b031982160162001a0d57600080808080808062001846896004818d62002f1d565b81019062001855919062002f49565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018975760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b0386163014620018c25760405162461bcd60e51b8152600401620005539062003001565b8a8514620019395760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620019b9919062002d9e565b6000604051808303816000865af19150503d8060008114620019f8576040519150601f19603f3d011682016040523d82523d6000602084013e620019fd565b606091505b5050505050505050505062001bf2565b6001600160e01b031981166323f2ebc360e21b1462001a835760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a9b8a6004818e62002f1d565b81019062001aaa919062003052565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001aee5760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b038716301462001b195760405162461bcd60e51b8152600401620005539062003001565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001ba2919062002d9e565b6000604051808303816000865af19150503d806000811462001be1576040519150601f19603f3d011682016040523d82523d6000602084013e62001be6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdf9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021ca565b80600162001c7760206002620031db565b62001c839190620031e9565b6021541062001ce85760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cfd919062003203565b909155505060215460005b602081101562001da7578160011660010362001d3d57826001826020811062001d355762001d3562002cee565b015550505050565b6001816020811062001d535762001d5362002cee565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d90919062002d30565b91508062001d9e8162002d47565b91505062001d08565b5062001db26200321e565b505050565b60225460ff161562001ddd5760405162461bcd60e51b8152600401620005539062002a24565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001e268a63ffffffff1662001492565b1562001e7d5760405162461bcd60e51b81526020600482015260306024820152600080516020620047bb83398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ef1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f17919062003234565b90508060000362001f805760405162461bcd60e51b81526020600482015260396024820152600080516020620047bb83398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff8781166101009092041614620020025760405162461bcd60e51b81526020600482015260436024820152600080516020620047bb83398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff166200202057508862002023565b50895b6200204e6200203f848b8b8b8b8b8b8051906020012062000c53565b8e8e63ffffffff168462000b51565b620009c35760405162461bcd60e51b815260206004820152602c6024820152600080516020620047bb83398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020b06101008362002d30565b90506000620020c26101008462002e69565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001db290849063a9059cbb60e01b9060640162001c2e565b60225460ff166200218e5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002221826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022a39092919063ffffffff16565b80519091501562001db2578080602001905181019062002242919062002a9b565b62001db25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c4b848460008585600080866001600160a01b03168587604051620022cd919062002d9e565b60006040518083038185875af1925050503d80600081146200230c576040519150601f19603f3d011682016040523d82523d6000602084013e62002311565b606091505b509150915062002324878383876200232f565b979650505050505050565b60608315620023a35782516000036200239b576001600160a01b0385163b6200239b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c4b565b62000c4b8383815115620023ba5781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200324e565b611557806200326483390190565b6001600160a01b0381168114620023fa57600080fd5b50565b80356200240a81620023e4565b919050565b803563ffffffff811681146200240a57600080fd5b60008083601f8401126200243757600080fd5b50813567ffffffffffffffff8111156200245057600080fd5b6020830191508360208285010111156200246957600080fd5b9250929050565b60008060008060008060a087890312156200248a57600080fd5b86356200249781620023e4565b9550620024a7602088016200240f565b94506040870135620024b981620023e4565b935060608701359250608087013567ffffffffffffffff811115620024dd57600080fd5b620024eb89828a0162002424565b979a9699509497509295939492505050565b600080604083850312156200251157600080fd5b6200251c836200240f565b915060208301356200252e81620023e4565b809150509250929050565b6000602082840312156200254c57600080fd5b81356200255981620023e4565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620025a257620025a262002560565b604052919050565b600082601f830112620025bc57600080fd5b8135602067ffffffffffffffff821115620025db57620025db62002560565b8160051b620025ec82820162002576565b92835284810182019282810190878511156200260757600080fd5b83870192505b8483101562002324578235825291830191908301906200260d565b600080600080608085870312156200263f57600080fd5b84359350602085013567ffffffffffffffff808211156200265f57600080fd5b6200266d88838901620025aa565b94506040870135915080821682146200268557600080fd5b509396929550929360600135925050565b60ff81168114620023fa57600080fd5b600080600080600080600060e0888a031215620026c257600080fd5b8735620026cf8162002696565b9650620026df602089016200240f565b95506040880135620026f181620023e4565b945062002701606089016200240f565b935060808801356200271381620023e4565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200274d576200274d62002560565b50601f01601f191660200190565b600082601f8301126200276d57600080fd5b8135620027846200277e8262002730565b62002576565b8181528460208386010111156200279a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027d857600080fd5b8a3567ffffffffffffffff80821115620027f157600080fd5b620027ff8e838f01620025aa565b9b506200280f60208e016200240f565b9a5060408d0135995060608d013598506200282d60808e016200240f565b97506200283d60a08e01620023fd565b96506200284d60c08e016200240f565b95506200285d60e08e01620023fd565b94506101008d013593506101208d01359150808211156200287d57600080fd5b506200288c8d828e016200275b565b9150509295989b9194979a5092959850565b600080600060608486031215620028b457600080fd5b620028bf846200240f565b92506020840135620028d181620023e4565b91506040840135620028e381620023e4565b809150509250925092565b6000602082840312156200290157600080fd5b5035919050565b600080600080600080600060a0888a0312156200292457600080fd5b6200292f886200240f565b965060208801356200294181620023e4565b9550604088013567ffffffffffffffff808211156200295f57600080fd5b6200296d8b838c0162002424565b909750955060608a01359150808211156200298757600080fd5b50620029968a828b0162002424565b9094509250506080880135620029ac8162002696565b8091505092959891949750929550565b600080600060608486031215620029d257600080fd5b620029dd846200240f565b92506020840135620029ef81620023e4565b9150604084013567ffffffffffffffff81111562002a0c57600080fd5b62002a1a868287016200275b565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b8015158114620023fa57600080fd5b60006020828403121562002aae57600080fd5b8151620025598162002a8c565b60005b8381101562002ad857818101518382015260200162002abe565b8381111562000fdf5750506000910152565b600082601f83011262002afc57600080fd5b815162002b0d6200277e8262002730565b81815284602083860101111562002b2357600080fd5b62000c4b82602083016020870162002abb565b60006020828403121562002b4957600080fd5b815167ffffffffffffffff81111562002b6157600080fd5b62000c4b8482850162002aea565b60006020828403121562002b8257600080fd5b8151620025598162002696565b6000815180845262002ba981602086016020860162002abb565b601f01601f19169290920160200192915050565b60608152600062002bd2606083018662002b8f565b828103602084015262002be6818662002b8f565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002c4e8483018762002b8f565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002d425762002d4262002d04565b500490565b60006001820162002d5c5762002d5c62002d1a565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d959083018462002b8f565b95945050505050565b6000825162002db281846020870162002abb565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002e0957600080fd5b835167ffffffffffffffff8082111562002e2257600080fd5b62002e308783880162002aea565b9450602086015191508082111562002e4757600080fd5b5062002e568682870162002aea565b9250506040840151620028e38162002696565b60008262002e7b5762002e7b62002d04565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002ebf60608301878962002e80565b828103602084015262002ed481868862002e80565b91505060ff831660408301529695505050505050565b6000835162002efe81846020880162002abb565b83519083019062002f1481836020880162002abb565b01949350505050565b6000808585111562002f2e57600080fd5b8386111562002f3c57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f6557600080fd5b873562002f7281620023e4565b9650602088013562002f8481620023e4565b955060408801359450606088013593506080880135620027138162002696565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b0312156200307057600080fd5b88356200307d81620023e4565b975060208901356200308f81620023e4565b965060408901359550606089013594506080890135620030af8162002a8c565b935060a0890135620030c18162002696565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200311f57816000190482111562003103576200310362002d1a565b808516156200311157918102915b93841c9390800290620030e3565b509250929050565b600082620031385750600162000a58565b81620031475750600062000a58565b81600181146200316057600281146200316b576200318b565b600191505062000a58565b60ff8411156200317f576200317f62002d1a565b50506001821b62000a58565b5060208310610133831016604e8410600b8410161715620031b0575081810a62000a58565b620031bc8383620030de565b8060001904821115620031d357620031d362002d1a565b029392505050565b600062002559838362003127565b600082821015620031fe57620031fe62002d1a565b500390565b6000821982111562003219576200321962002d1a565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200324757600080fd5b5051919050565b60208152600062002559602083018462002b8f56fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea2646970667358221220906ea48f19088f63dbf7270e029d0db2a116bfdc48421c0afa81f84f29beb83f64736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212208eec55cf9af9178665644bc6cbcbda06a1eb152295193e76b792bb7bfcb55ac564736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZkEVMBridgeMock.json b/compiled-contracts/PolygonZkEVMBridgeMock.json index dcc0bd173..82d4c529b 100644 --- a/compiled-contracts/PolygonZkEVMBridgeMock.json +++ b/compiled-contracts/PolygonZkEVMBridgeMock.json @@ -534,7 +534,7 @@ }, { "internalType": "address", - "name": "_zkEVMaddress", + "name": "_poeAddress", "type": "address" } ], @@ -614,6 +614,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "poeAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -775,23 +788,10 @@ ], "stateMutability": "view", "type": "function" - }, - { - "inputs": [], - "name": "zkEVMaddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50614bd8806100206000396000f3fe608060405260043610620001f35760003560e01c80637b6323c1116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b80637b6323c1146200045e57806381b1c17414620004835780638da5cb5b14620004bd57600080fd5b8063318aee3d116200018d5780633e19704311620001585780633e19704314620003d75780634638554914620003fc578063647c576c1462000421578063715018a6146200044657600080fd5b8063318aee3d146200030957806337883a3e14620003785780633ae05047146200039a5780633da8168214620003b257600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f6200020936600462002825565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f6200071e565b3480156200026757600080fd5b506200027f62000279366004620028b2565b62000757565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b7366004620028ee565b620007aa565b348015620002ca57600080fd5b506200020f620002dc36600462002908565b620007b9565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b5062000353620003283660046200292d565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b506027546200027f906001600160a01b031681565b348015620003a757600080fd5b50620002fa620007e5565b348015620003bf57600080fd5b506200022d620003d136600462002a15565b620008d8565b348015620003e457600080fd5b50620002fa620003f636600462002a93565b620009da565b3480156200040957600080fd5b506200020f6200041b36600462002ba4565b62000a67565b3480156200042e57600080fd5b506200020f6200044036600462002c8b565b62000c0d565b3480156200045357600080fd5b506200020f62000d82565b3480156200046b57600080fd5b506200020f6200047d36600462002ba4565b62000d98565b3480156200049057600080fd5b506200027f620004a2366004620028ee565b6024602052600090815260409020546001600160a01b031681565b348015620004ca57600080fd5b50605a546001600160a01b03166200027f565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d62000514366004620028ee565b6200121f565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002cdb565b62001264565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002d8f565b6200137b565b348015620005e957600080fd5b506200020f6200152d565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a366004620028ee565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b3660046200292d565b62001564565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007065760405162461bcd60e51b815260206004820152604760248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b62000716868686868686620015e3565b505050505050565b6027546001600160a01b031633146200074b5760405162461bcd60e51b8152600401620006fd9062002df7565b6200075562001a68565b565b60006024600084846040516020016200077292919062002e54565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b462001ac6565b608c55565b620007c362001ac6565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008cf57826001166001036200085057600181602081106200081c576200081c62002e7e565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200087d565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088a60028462002ec0565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c69062002ed7565b915050620007f0565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009cb5781600116600103620009555786818151811062000913576200091362002e7e565b60200260200101518360405160200162000937929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009a7565b828782815181106200096b576200096b62002e7e565b60200260200101516040516020016200098e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b460028362002ec0565b915080620009c28162002ed7565b915050620008e8565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a8d5760405162461bcd60e51b8152600401620006fd9062002ef3565b62000aa38a8a8a8a8a8a8a8a8a8a600162001b22565b62000ab48963ffffffff1662001dad565b6000836001600160a01b03168387898560405160240162000ad89392919062002fb8565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b0f919062002ff3565b60006040518083038185875af1925050503d806000811462000b4e576040519150601f19603f3d011682016040523d82523d6000602084013e62000b53565b606091505b505090508062000bbf5760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b6064820152608401620006fd565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bf895949392919062003011565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c2e5750600054600160ff909116105b8062000c4a5750303b15801562000c4a575060005460ff166001145b62000caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006fd565b6000805460ff19166001179055801562000cd3576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d3562001def565b801562000d7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8c62001ac6565b62000755600062001e62565b60225460ff161562000dbe5760405162461bcd60e51b8152600401620006fd9062002ef3565b62000dd48a8a8a8a8a8a8a8a8a8a600062001b22565b62000de58963ffffffff1662001dad565b6001600160a01b03851662000eda57604080516000808252602082019092526001600160a01b03851690849060405162000e20919062002ff3565b60006040518083038185875af1925050503d806000811462000e5f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e64565b606091505b505090508062000ed35760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b6064820152608401620006fd565b50620011d2565b60225463ffffffff61010090910481169087160362000f0f5762000f096001600160a01b038616848462001eb4565b620011d2565b6000868660405160200162000f2692919062002e54565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200116a5760008060008580602001905181019062000f78919062003094565b92509250925060008584848460405162000f92906200278e565b62000fa0939291906200310a565b8190604051809103906000f590508015801562000fc1573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f1990604401600060405180830381600087803b1580156200101157600080fd5b505af115801562001026573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620011589392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011cf565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f1990604401600060405180830381600087803b158015620011b557600080fd5b505af1158015620011ca573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200120b95949392919062003011565b60405180910390a150505050505050505050565b600080620012306101008462002ec0565b90506000620012426101008562003147565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200127c92919062002e54565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012af906200278e565b601f1982820381018352601f909101166040819052620012dc908d908d908d908d908d9060200162003187565b60408051601f1981840301815290829052620012fc9291602001620031c8565b604051602081830303815290604052805190602001206040516020016200135594939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013a15760405162461bcd60e51b8152600401620006fd9062002ef3565b60225463ffffffff610100909104811690841603620014295760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c460000006064820152608401620006fd565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff1633868634876021546040516200147d989796959493929190620031fb565b60405180910390a1620014ba620014b46001602260019054906101000a900463ffffffff16338787348880519060200120620009da565b62001f1e565b6026546001600160a01b03166333d6247d620014d5620007e5565b6040518263ffffffff1660e01b8152600401620014f491815260200190565b600060405180830381600087803b1580156200150f57600080fd5b505af115801562001524573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b031633146200155a5760405162461bcd60e51b8152600401620006fd9062002df7565b620007556200206a565b6200156e62001ac6565b6001600160a01b038116620015d55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006fd565b620015e08162001e62565b50565b60225460ff1615620016095760405162461bcd60e51b8152600401620006fd9062002ef3565b60225463ffffffff610100909104811690861603620016915760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c4600000000006064820152608401620006fd565b60008060606001600160a01b03891662001728578534146200171e576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c55456064820152608401620006fd565b6000915062001988565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620017e557604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac90604401600060405180830381600087803b158015620017b857600080fd5b505af1158015620017cd573d6000803e3d6000fd5b50505050806020015193508060000151925062001986565b8415620017fa57620017fa8a88888862002119565b620018116001600160a01b038b1633308a62002541565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001868573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001892919081019062003268565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620018d1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018fb919081019062003268565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200193a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019609190620032a1565b60405160200162001974939291906200310a565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b87602154604051620019ca989796959493929190620031fb565b60405180910390a1620019ef620014b4600084868c8c8c8880519060200120620009da565b6026546001600160a01b03166333d6247d62001a0a620007e5565b6040518263ffffffff1660e01b815260040162001a2991815260200190565b600060405180830381600087803b15801562001a4457600080fd5b505af115801562001a59573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001a8e5760405162461bcd60e51b8152600401620006fd9062002ef3565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006fd565b62001b338a63ffffffff166200121f565b1562001b8a5760405162461bcd60e51b8152602060048201526030602482015260008051602062004b8383398151915260448201526f081053149150511657d0d3105253515160821b6064820152608401620006fd565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001bfe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c249190620032c1565b90508060000362001c8d5760405162461bcd60e51b8152602060048201526039602482015260008051602062004b8383398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c4944000000000000006064820152608401620006fd565b60225463ffffffff878116610100909204161462001d0f5760405162461bcd60e51b8152602060048201526043602482015260008051602062004b8383398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a401620006fd565b602254600090610100900463ffffffff1662001d2d57508862001d30565b50895b62001d5b62001d4c848b8b8b8b8b8b80519060200120620009da565b8e8e63ffffffff1684620008d8565b62001a595760405162461bcd60e51b815260206004820152602c602482015260008051602062004b8383398151915260448201526b0814d35517d253959053125160a21b6064820152608401620006fd565b600062001dbd6101008362002ec0565b9050600062001dcf6101008462003147565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001e5c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006fd565b62000755335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001f1990849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526200257b565b505050565b80600162001f2f60206002620033d8565b62001f3b9190620033e6565b6021541062001fa05760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b6064820152608401620006fd565b60016021600082825462001fb5919062003400565b909155505060215460005b60208110156200205f578160011660010362001ff557826001826020811062001fed5762001fed62002e7e565b015550505050565b600181602081106200200b576200200b62002e7e565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002048919062002ec0565b915080620020568162002ed7565b91505062001fc0565b5062001f196200341b565b60225460ff16620020e45760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006fd565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200215c83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200265492505050565b9050632afa533160e01b6001600160e01b0319821601620023555760008080808080806200218e896004818d62003431565b8101906200219d91906200345d565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620021df5760405162461bcd60e51b8152600401620006fd90620034b8565b6001600160a01b03861630146200220a5760405162461bcd60e51b8152600401620006fd9062003515565b8a8514620022815760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d41544348000000000000006064820152608401620006fd565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162002301919062002ff3565b6000604051808303816000865af19150503d806000811462002340576040519150601f19603f3d011682016040523d82523d6000602084013e62002345565b606091505b505050505050505050506200253a565b6001600160e01b031981166323f2ebc360e21b14620023cb5760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b6064820152608401620006fd565b600080808080808080620023e38a6004818e62003431565b810190620023f2919062003575565b97509750975097509750975097509750336001600160a01b0316886001600160a01b031614620024365760405162461bcd60e51b8152600401620006fd90620034b8565b6001600160a01b0387163014620024615760405162461bcd60e51b8152600401620006fd9062003515565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f1691620024ea919062002ff3565b6000604051808303816000865af19150503d806000811462002529576040519150601f19603f3d011682016040523d82523d6000602084013e6200252e565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d7c9085906323b872dd60e01b9060840162001ee1565b6000620025d2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166200265b9092919063ffffffff16565b80519091501562001f195780806020019051810190620025f3919062003601565b62001f195760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006fd565b6020015190565b6060620009d2848460008585600080866001600160a01b0316858760405162002685919062002ff3565b60006040518083038185875af1925050503d8060008114620026c4576040519150601f19603f3d011682016040523d82523d6000602084013e620026c9565b606091505b5091509150620026dc87838387620026e7565b979650505050505050565b606083156200275b57825160000362002753576001600160a01b0385163b620027535760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006fd565b5081620009d2565b620009d28383815115620027725781518083602001fd5b8060405162461bcd60e51b8152600401620006fd919062003621565b61154c806200363783390190565b6001600160a01b0381168114620015e057600080fd5b8035620027bf816200279c565b919050565b803563ffffffff81168114620027bf57600080fd5b60008083601f840112620027ec57600080fd5b50813567ffffffffffffffff8111156200280557600080fd5b6020830191508360208285010111156200281e57600080fd5b9250929050565b60008060008060008060a087890312156200283f57600080fd5b86356200284c816200279c565b95506200285c60208801620027c4565b945060408701356200286e816200279c565b935060608701359250608087013567ffffffffffffffff8111156200289257600080fd5b620028a089828a01620027d9565b979a9699509497509295939492505050565b60008060408385031215620028c657600080fd5b620028d183620027c4565b91506020830135620028e3816200279c565b809150509250929050565b6000602082840312156200290157600080fd5b5035919050565b6000602082840312156200291b57600080fd5b6200292682620027c4565b9392505050565b6000602082840312156200294057600080fd5b813562002926816200279c565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200298f576200298f6200294d565b604052919050565b600082601f830112620029a957600080fd5b8135602067ffffffffffffffff821115620029c857620029c86200294d565b8160051b620029d982820162002963565b9283528481018201928281019087851115620029f457600080fd5b83870192505b84831015620026dc57823582529183019190830190620029fa565b6000806000806080858703121562002a2c57600080fd5b84359350602085013567ffffffffffffffff8082111562002a4c57600080fd5b62002a5a8883890162002997565b945060408701359150808216821462002a7257600080fd5b509396929550929360600135925050565b60ff81168114620015e057600080fd5b600080600080600080600060e0888a03121562002aaf57600080fd5b873562002abc8162002a83565b965062002acc60208901620027c4565b9550604088013562002ade816200279c565b945062002aee60608901620027c4565b9350608088013562002b00816200279c565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002b3a5762002b3a6200294d565b50601f01601f191660200190565b600082601f83011262002b5a57600080fd5b813562002b7162002b6b8262002b1d565b62002963565b81815284602083860101111562002b8757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002bc557600080fd5b8a3567ffffffffffffffff8082111562002bde57600080fd5b62002bec8e838f0162002997565b9b5062002bfc60208e01620027c4565b9a5060408d0135995060608d0135985062002c1a60808e01620027c4565b975062002c2a60a08e01620027b2565b965062002c3a60c08e01620027c4565b955062002c4a60e08e01620027b2565b94506101008d013593506101208d013591508082111562002c6a57600080fd5b5062002c798d828e0162002b48565b9150509295989b9194979a5092959850565b60008060006060848603121562002ca157600080fd5b62002cac84620027c4565b9250602084013562002cbe816200279c565b9150604084013562002cd0816200279c565b809150509250925092565b600080600080600080600060a0888a03121562002cf757600080fd5b62002d0288620027c4565b9650602088013562002d14816200279c565b9550604088013567ffffffffffffffff8082111562002d3257600080fd5b62002d408b838c01620027d9565b909750955060608a013591508082111562002d5a57600080fd5b5062002d698a828b01620027d9565b909450925050608088013562002d7f8162002a83565b8091505092959891949750929550565b60008060006060848603121562002da557600080fd5b62002db084620027c4565b9250602084013562002dc2816200279c565b9150604084013567ffffffffffffffff81111562002ddf57600080fd5b62002ded8682870162002b48565b9150509250925092565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002ed25762002ed262002e94565b500490565b60006001820162002eec5762002eec62002eaa565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002f7857818101518382015260200162002f5e565b8381111562000d7c5750506000910152565b6000815180845262002fa481602086016020860162002f5b565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002fea9083018462002f8a565b95945050505050565b600082516200300781846020870162002f5b565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f8301126200305a57600080fd5b81516200306b62002b6b8262002b1d565b8181528460208386010111156200308157600080fd5b620009d282602083016020870162002f5b565b600080600060608486031215620030aa57600080fd5b835167ffffffffffffffff80821115620030c357600080fd5b620030d18783880162003048565b94506020860151915080821115620030e857600080fd5b50620030f78682870162003048565b925050604084015162002cd08162002a83565b6060815260006200311f606083018662002f8a565b828103602084015262003133818662002f8a565b91505060ff83166040830152949350505050565b60008262003159576200315962002e94565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006200319d6060830187896200315e565b8281036020840152620031b28186886200315e565b91505060ff831660408301529695505050505050565b60008351620031dc81846020880162002f5b565b835190830190620031f281836020880162002f5b565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c083018190526000916200324f8483018762002f8a565b925080851660e085015250509998505050505050505050565b6000602082840312156200327b57600080fd5b815167ffffffffffffffff8111156200329357600080fd5b620009d28482850162003048565b600060208284031215620032b457600080fd5b8151620029268162002a83565b600060208284031215620032d457600080fd5b5051919050565b600181815b808511156200331c57816000190482111562003300576200330062002eaa565b808516156200330e57918102915b93841c9390800290620032e0565b509250929050565b6000826200333557506001620007a4565b816200334457506000620007a4565b81600181146200335d5760028114620033685762003388565b6001915050620007a4565b60ff8411156200337c576200337c62002eaa565b50506001821b620007a4565b5060208310610133831016604e8410600b8410161715620033ad575081810a620007a4565b620033b98383620032db565b8060001904821115620033d057620033d062002eaa565b029392505050565b600062002926838362003324565b600082821015620033fb57620033fb62002eaa565b500390565b6000821982111562003416576200341662002eaa565b500190565b634e487b7160e01b600052600160045260246000fd5b600080858511156200344257600080fd5b838611156200345057600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200347957600080fd5b873562003486816200279c565b9650602088013562003498816200279c565b95506040880135945060608801359350608088013562002b008162002a83565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b8015158114620015e057600080fd5b600080600080600080600080610100898b0312156200359357600080fd5b8835620035a0816200279c565b97506020890135620035b2816200279c565b965060408901359550606089013594506080890135620035d28162003566565b935060a0890135620035e48162002a83565b979a969950949793969295929450505060c08201359160e0013590565b6000602082840312156200361457600080fd5b8151620029268162003566565b60208152600062002926602083018462002f8a56fe60c06040523480156200001157600080fd5b506040516200154c3803806200154c8339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611092620004ba60003960006104690152600081816102f9015261043301526110926000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611043565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161105557611055610fd1565b506001019056fea264697066735822122048db6a6222fa164d21a8fcb1cd25d2a9e0eee016393c37dcc7b7fd638ef787c264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212203fafbd771213f6e6602facc0f17b92d2c43c794b34f182f74da8a5eaf7772fc564736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001f35760003560e01c80637b6323c1116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b80637b6323c1146200045e57806381b1c17414620004835780638da5cb5b14620004bd57600080fd5b8063318aee3d116200018d5780633e19704311620001585780633e19704314620003d75780634638554914620003fc578063647c576c1462000421578063715018a6146200044657600080fd5b8063318aee3d146200030957806337883a3e14620003785780633ae05047146200039a5780633da8168214620003b257600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f6200020936600462002825565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f6200071e565b3480156200026757600080fd5b506200027f62000279366004620028b2565b62000757565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b7366004620028ee565b620007aa565b348015620002ca57600080fd5b506200020f620002dc36600462002908565b620007b9565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b5062000353620003283660046200292d565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b506027546200027f906001600160a01b031681565b348015620003a757600080fd5b50620002fa620007e5565b348015620003bf57600080fd5b506200022d620003d136600462002a15565b620008d8565b348015620003e457600080fd5b50620002fa620003f636600462002a93565b620009da565b3480156200040957600080fd5b506200020f6200041b36600462002ba4565b62000a67565b3480156200042e57600080fd5b506200020f6200044036600462002c8b565b62000c0d565b3480156200045357600080fd5b506200020f62000d82565b3480156200046b57600080fd5b506200020f6200047d36600462002ba4565b62000d98565b3480156200049057600080fd5b506200027f620004a2366004620028ee565b6024602052600090815260409020546001600160a01b031681565b348015620004ca57600080fd5b50605a546001600160a01b03166200027f565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d62000514366004620028ee565b6200121f565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002cdb565b62001264565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002d8f565b6200137b565b348015620005e957600080fd5b506200020f6200152d565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a366004620028ee565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b3660046200292d565b62001564565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007065760405162461bcd60e51b815260206004820152604760248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b62000716868686868686620015e3565b505050505050565b6027546001600160a01b031633146200074b5760405162461bcd60e51b8152600401620006fd9062002df7565b6200075562001a68565b565b60006024600084846040516020016200077292919062002e54565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b462001ac6565b608c55565b620007c362001ac6565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008cf57826001166001036200085057600181602081106200081c576200081c62002e7e565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200087d565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088a60028462002ec0565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c69062002ed7565b915050620007f0565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009cb5781600116600103620009555786818151811062000913576200091362002e7e565b60200260200101518360405160200162000937929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009a7565b828782815181106200096b576200096b62002e7e565b60200260200101516040516020016200098e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b460028362002ec0565b915080620009c28162002ed7565b915050620008e8565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a8d5760405162461bcd60e51b8152600401620006fd9062002ef3565b62000aa38a8a8a8a8a8a8a8a8a8a600162001b22565b62000ab48963ffffffff1662001dad565b6000836001600160a01b03168387898560405160240162000ad89392919062002fb8565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b0f919062002ff3565b60006040518083038185875af1925050503d806000811462000b4e576040519150601f19603f3d011682016040523d82523d6000602084013e62000b53565b606091505b505090508062000bbf5760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b6064820152608401620006fd565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bf895949392919062003011565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c2e5750600054600160ff909116105b8062000c4a5750303b15801562000c4a575060005460ff166001145b62000caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006fd565b6000805460ff19166001179055801562000cd3576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d3562001def565b801562000d7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8c62001ac6565b62000755600062001e62565b60225460ff161562000dbe5760405162461bcd60e51b8152600401620006fd9062002ef3565b62000dd48a8a8a8a8a8a8a8a8a8a600062001b22565b62000de58963ffffffff1662001dad565b6001600160a01b03851662000eda57604080516000808252602082019092526001600160a01b03851690849060405162000e20919062002ff3565b60006040518083038185875af1925050503d806000811462000e5f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e64565b606091505b505090508062000ed35760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b6064820152608401620006fd565b50620011d2565b60225463ffffffff61010090910481169087160362000f0f5762000f096001600160a01b038616848462001eb4565b620011d2565b6000868660405160200162000f2692919062002e54565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200116a5760008060008580602001905181019062000f78919062003094565b92509250925060008584848460405162000f92906200278e565b62000fa0939291906200310a565b8190604051809103906000f590508015801562000fc1573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f1990604401600060405180830381600087803b1580156200101157600080fd5b505af115801562001026573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620011589392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011cf565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f1990604401600060405180830381600087803b158015620011b557600080fd5b505af1158015620011ca573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200120b95949392919062003011565b60405180910390a150505050505050505050565b600080620012306101008462002ec0565b90506000620012426101008562003147565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200127c92919062002e54565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012af906200278e565b601f1982820381018352601f909101166040819052620012dc908d908d908d908d908d9060200162003187565b60408051601f1981840301815290829052620012fc9291602001620031c8565b604051602081830303815290604052805190602001206040516020016200135594939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013a15760405162461bcd60e51b8152600401620006fd9062002ef3565b60225463ffffffff610100909104811690841603620014295760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c460000006064820152608401620006fd565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff1633868634876021546040516200147d989796959493929190620031fb565b60405180910390a1620014ba620014b46001602260019054906101000a900463ffffffff16338787348880519060200120620009da565b62001f1e565b6026546001600160a01b03166333d6247d620014d5620007e5565b6040518263ffffffff1660e01b8152600401620014f491815260200190565b600060405180830381600087803b1580156200150f57600080fd5b505af115801562001524573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b031633146200155a5760405162461bcd60e51b8152600401620006fd9062002df7565b620007556200206a565b6200156e62001ac6565b6001600160a01b038116620015d55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006fd565b620015e08162001e62565b50565b60225460ff1615620016095760405162461bcd60e51b8152600401620006fd9062002ef3565b60225463ffffffff610100909104811690861603620016915760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c4600000000006064820152608401620006fd565b60008060606001600160a01b03891662001728578534146200171e576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c55456064820152608401620006fd565b6000915062001988565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620017e557604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac90604401600060405180830381600087803b158015620017b857600080fd5b505af1158015620017cd573d6000803e3d6000fd5b50505050806020015193508060000151925062001986565b8415620017fa57620017fa8a88888862002119565b620018116001600160a01b038b1633308a62002541565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001868573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001892919081019062003268565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620018d1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018fb919081019062003268565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200193a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019609190620032a1565b60405160200162001974939291906200310a565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b87602154604051620019ca989796959493929190620031fb565b60405180910390a1620019ef620014b4600084868c8c8c8880519060200120620009da565b6026546001600160a01b03166333d6247d62001a0a620007e5565b6040518263ffffffff1660e01b815260040162001a2991815260200190565b600060405180830381600087803b15801562001a4457600080fd5b505af115801562001a59573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001a8e5760405162461bcd60e51b8152600401620006fd9062002ef3565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006fd565b62001b338a63ffffffff166200121f565b1562001b8a5760405162461bcd60e51b8152602060048201526030602482015260008051602062004b8383398151915260448201526f081053149150511657d0d3105253515160821b6064820152608401620006fd565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001bfe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c249190620032c1565b90508060000362001c8d5760405162461bcd60e51b8152602060048201526039602482015260008051602062004b8383398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c4944000000000000006064820152608401620006fd565b60225463ffffffff878116610100909204161462001d0f5760405162461bcd60e51b8152602060048201526043602482015260008051602062004b8383398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a401620006fd565b602254600090610100900463ffffffff1662001d2d57508862001d30565b50895b62001d5b62001d4c848b8b8b8b8b8b80519060200120620009da565b8e8e63ffffffff1684620008d8565b62001a595760405162461bcd60e51b815260206004820152602c602482015260008051602062004b8383398151915260448201526b0814d35517d253959053125160a21b6064820152608401620006fd565b600062001dbd6101008362002ec0565b9050600062001dcf6101008462003147565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001e5c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006fd565b62000755335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001f1990849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526200257b565b505050565b80600162001f2f60206002620033d8565b62001f3b9190620033e6565b6021541062001fa05760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b6064820152608401620006fd565b60016021600082825462001fb5919062003400565b909155505060215460005b60208110156200205f578160011660010362001ff557826001826020811062001fed5762001fed62002e7e565b015550505050565b600181602081106200200b576200200b62002e7e565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262002048919062002ec0565b915080620020568162002ed7565b91505062001fc0565b5062001f196200341b565b60225460ff16620020e45760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006fd565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200215c83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200265492505050565b9050632afa533160e01b6001600160e01b0319821601620023555760008080808080806200218e896004818d62003431565b8101906200219d91906200345d565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620021df5760405162461bcd60e51b8152600401620006fd90620034b8565b6001600160a01b03861630146200220a5760405162461bcd60e51b8152600401620006fd9062003515565b8a8514620022815760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d41544348000000000000006064820152608401620006fd565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162002301919062002ff3565b6000604051808303816000865af19150503d806000811462002340576040519150601f19603f3d011682016040523d82523d6000602084013e62002345565b606091505b505050505050505050506200253a565b6001600160e01b031981166323f2ebc360e21b14620023cb5760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b6064820152608401620006fd565b600080808080808080620023e38a6004818e62003431565b810190620023f2919062003575565b97509750975097509750975097509750336001600160a01b0316886001600160a01b031614620024365760405162461bcd60e51b8152600401620006fd90620034b8565b6001600160a01b0387163014620024615760405162461bcd60e51b8152600401620006fd9062003515565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f1691620024ea919062002ff3565b6000604051808303816000865af19150503d806000811462002529576040519150601f19603f3d011682016040523d82523d6000602084013e6200252e565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d7c9085906323b872dd60e01b9060840162001ee1565b6000620025d2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166200265b9092919063ffffffff16565b80519091501562001f195780806020019051810190620025f3919062003601565b62001f195760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006fd565b6020015190565b6060620009d2848460008585600080866001600160a01b0316858760405162002685919062002ff3565b60006040518083038185875af1925050503d8060008114620026c4576040519150601f19603f3d011682016040523d82523d6000602084013e620026c9565b606091505b5091509150620026dc87838387620026e7565b979650505050505050565b606083156200275b57825160000362002753576001600160a01b0385163b620027535760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006fd565b5081620009d2565b620009d28383815115620027725781518083602001fd5b8060405162461bcd60e51b8152600401620006fd919062003621565b61154c806200363783390190565b6001600160a01b0381168114620015e057600080fd5b8035620027bf816200279c565b919050565b803563ffffffff81168114620027bf57600080fd5b60008083601f840112620027ec57600080fd5b50813567ffffffffffffffff8111156200280557600080fd5b6020830191508360208285010111156200281e57600080fd5b9250929050565b60008060008060008060a087890312156200283f57600080fd5b86356200284c816200279c565b95506200285c60208801620027c4565b945060408701356200286e816200279c565b935060608701359250608087013567ffffffffffffffff8111156200289257600080fd5b620028a089828a01620027d9565b979a9699509497509295939492505050565b60008060408385031215620028c657600080fd5b620028d183620027c4565b91506020830135620028e3816200279c565b809150509250929050565b6000602082840312156200290157600080fd5b5035919050565b6000602082840312156200291b57600080fd5b6200292682620027c4565b9392505050565b6000602082840312156200294057600080fd5b813562002926816200279c565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200298f576200298f6200294d565b604052919050565b600082601f830112620029a957600080fd5b8135602067ffffffffffffffff821115620029c857620029c86200294d565b8160051b620029d982820162002963565b9283528481018201928281019087851115620029f457600080fd5b83870192505b84831015620026dc57823582529183019190830190620029fa565b6000806000806080858703121562002a2c57600080fd5b84359350602085013567ffffffffffffffff8082111562002a4c57600080fd5b62002a5a8883890162002997565b945060408701359150808216821462002a7257600080fd5b509396929550929360600135925050565b60ff81168114620015e057600080fd5b600080600080600080600060e0888a03121562002aaf57600080fd5b873562002abc8162002a83565b965062002acc60208901620027c4565b9550604088013562002ade816200279c565b945062002aee60608901620027c4565b9350608088013562002b00816200279c565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002b3a5762002b3a6200294d565b50601f01601f191660200190565b600082601f83011262002b5a57600080fd5b813562002b7162002b6b8262002b1d565b62002963565b81815284602083860101111562002b8757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002bc557600080fd5b8a3567ffffffffffffffff8082111562002bde57600080fd5b62002bec8e838f0162002997565b9b5062002bfc60208e01620027c4565b9a5060408d0135995060608d0135985062002c1a60808e01620027c4565b975062002c2a60a08e01620027b2565b965062002c3a60c08e01620027c4565b955062002c4a60e08e01620027b2565b94506101008d013593506101208d013591508082111562002c6a57600080fd5b5062002c798d828e0162002b48565b9150509295989b9194979a5092959850565b60008060006060848603121562002ca157600080fd5b62002cac84620027c4565b9250602084013562002cbe816200279c565b9150604084013562002cd0816200279c565b809150509250925092565b600080600080600080600060a0888a03121562002cf757600080fd5b62002d0288620027c4565b9650602088013562002d14816200279c565b9550604088013567ffffffffffffffff8082111562002d3257600080fd5b62002d408b838c01620027d9565b909750955060608a013591508082111562002d5a57600080fd5b5062002d698a828b01620027d9565b909450925050608088013562002d7f8162002a83565b8091505092959891949750929550565b60008060006060848603121562002da557600080fd5b62002db084620027c4565b9250602084013562002dc2816200279c565b9150604084013567ffffffffffffffff81111562002ddf57600080fd5b62002ded8682870162002b48565b9150509250925092565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002ed25762002ed262002e94565b500490565b60006001820162002eec5762002eec62002eaa565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002f7857818101518382015260200162002f5e565b8381111562000d7c5750506000910152565b6000815180845262002fa481602086016020860162002f5b565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002fea9083018462002f8a565b95945050505050565b600082516200300781846020870162002f5b565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f8301126200305a57600080fd5b81516200306b62002b6b8262002b1d565b8181528460208386010111156200308157600080fd5b620009d282602083016020870162002f5b565b600080600060608486031215620030aa57600080fd5b835167ffffffffffffffff80821115620030c357600080fd5b620030d18783880162003048565b94506020860151915080821115620030e857600080fd5b50620030f78682870162003048565b925050604084015162002cd08162002a83565b6060815260006200311f606083018662002f8a565b828103602084015262003133818662002f8a565b91505060ff83166040830152949350505050565b60008262003159576200315962002e94565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006200319d6060830187896200315e565b8281036020840152620031b28186886200315e565b91505060ff831660408301529695505050505050565b60008351620031dc81846020880162002f5b565b835190830190620031f281836020880162002f5b565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c083018190526000916200324f8483018762002f8a565b925080851660e085015250509998505050505050505050565b6000602082840312156200327b57600080fd5b815167ffffffffffffffff8111156200329357600080fd5b620009d28482850162003048565b600060208284031215620032b457600080fd5b8151620029268162002a83565b600060208284031215620032d457600080fd5b5051919050565b600181815b808511156200331c57816000190482111562003300576200330062002eaa565b808516156200330e57918102915b93841c9390800290620032e0565b509250929050565b6000826200333557506001620007a4565b816200334457506000620007a4565b81600181146200335d5760028114620033685762003388565b6001915050620007a4565b60ff8411156200337c576200337c62002eaa565b50506001821b620007a4565b5060208310610133831016604e8410600b8410161715620033ad575081810a620007a4565b620033b98383620032db565b8060001904821115620033d057620033d062002eaa565b029392505050565b600062002926838362003324565b600082821015620033fb57620033fb62002eaa565b500390565b6000821982111562003416576200341662002eaa565b500190565b634e487b7160e01b600052600160045260246000fd5b600080858511156200344257600080fd5b838611156200345057600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200347957600080fd5b873562003486816200279c565b9650602088013562003498816200279c565b95506040880135945060608801359350608088013562002b008162002a83565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b8015158114620015e057600080fd5b600080600080600080600080610100898b0312156200359357600080fd5b8835620035a0816200279c565b97506020890135620035b2816200279c565b965060408901359550606089013594506080890135620035d28162003566565b935060a0890135620035e48162002a83565b979a969950949793969295929450505060c08201359160e0013590565b6000602082840312156200361457600080fd5b8151620029268162003566565b60208152600062002926602083018462002f8a56fe60c06040523480156200001157600080fd5b506040516200154c3803806200154c8339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611092620004ba60003960006104690152600081816102f9015261043301526110926000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611043565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161105557611055610fd1565b506001019056fea264697066735822122048db6a6222fa164d21a8fcb1cd25d2a9e0eee016393c37dcc7b7fd638ef787c264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212203fafbd771213f6e6602facc0f17b92d2c43c794b34f182f74da8a5eaf7772fc564736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50614c1a806100206000396000f3fe608060405260043610620001f35760003560e01c806381b1c174116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b806381b1c17414620004615780638da5cb5b146200049b5780638f61151914620004bb57600080fd5b8063318aee3d116200018d5780634638554911620001585780634638554914620003da578063647c576c14620003ff578063715018a614620004245780637b6323c1146200043c57600080fd5b8063318aee3d14620003095780633ae0504714620003785780633da8168214620003905780633e19704314620003b557600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f620002093660046200285c565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f6200071e565b3480156200026757600080fd5b506200027f62000279366004620028e9565b62000757565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002925565b620007aa565b348015620002ca57600080fd5b506200020f620002dc3660046200293f565b620007b9565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002964565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b50620002fa620007e5565b3480156200039d57600080fd5b506200022d620003af36600462002a4c565b620008d8565b348015620003c257600080fd5b50620002fa620003d436600462002aca565b620009da565b348015620003e757600080fd5b506200020f620003f936600462002bdb565b62000a67565b3480156200040c57600080fd5b506200020f6200041e36600462002cc2565b62000c0d565b3480156200043157600080fd5b506200020f62000d82565b3480156200044957600080fd5b506200020f6200045b36600462002bdb565b62000d98565b3480156200046e57600080fd5b506200027f6200048036600462002925565b6024602052600090815260409020546001600160a01b031681565b348015620004a857600080fd5b50605a546001600160a01b03166200027f565b348015620004c857600080fd5b506027546200027f906001600160a01b031681565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002925565b62001245565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002d12565b6200128a565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002dc6565b620013a1565b348015620005e957600080fd5b506200020f62001553565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002925565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002964565b6200158a565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007065760405162461bcd60e51b815260206004820152604760248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b6200071686868686868662001609565b505050505050565b6027546001600160a01b031633146200074b5760405162461bcd60e51b8152600401620006fd9062002e2e565b6200075562001a9f565b565b60006024600084846040516020016200077292919062002e8b565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b462001afd565b608c55565b620007c362001afd565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008cf57826001166001036200085057600181602081106200081c576200081c62002eb5565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200087d565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088a60028462002ef7565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c69062002f0e565b915050620007f0565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009cb5781600116600103620009555786818151811062000913576200091362002eb5565b60200260200101518360405160200162000937929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009a7565b828782815181106200096b576200096b62002eb5565b60200260200101516040516020016200098e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b460028362002ef7565b915080620009c28162002f0e565b915050620008e8565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a8d5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000aa38a8a8a8a8a8a8a8a8a8a600162001b59565b62000ab48963ffffffff1662001de4565b6000836001600160a01b03168387898560405160240162000ad89392919062002fef565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b0f91906200302a565b60006040518083038185875af1925050503d806000811462000b4e576040519150601f19603f3d011682016040523d82523d6000602084013e62000b53565b606091505b505090508062000bbf5760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b6064820152608401620006fd565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bf895949392919062003048565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c2e5750600054600160ff909116105b8062000c4a5750303b15801562000c4a575060005460ff166001145b62000caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006fd565b6000805460ff19166001179055801562000cd3576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d3562001e26565b801562000d7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8c62001afd565b62000755600062001e99565b60225460ff161562000dbe5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000dd48a8a8a8a8a8a8a8a8a8a600062001b59565b62000de58963ffffffff1662001de4565b6001600160a01b03851662000eda57604080516000808252602082019092526001600160a01b03851690849060405162000e2091906200302a565b60006040518083038185875af1925050503d806000811462000e5f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e64565b606091505b505090508062000ed35760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b6064820152608401620006fd565b50620011f8565b60225463ffffffff61010090910481169087160362000f0f5762000f096001600160a01b038616848462001eeb565b620011f8565b6000868660405160200162000f2692919062002e8b565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200117d5760008060008580602001905181019062000f789190620030cb565b92509250925060008584848460405162000f9290620027c5565b62000fa09392919062003141565b8190604051809103906000f590508015801562000fc1573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001016573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200103c91906200318d565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200116b9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011f5565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620011cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011f391906200318d565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200123195949392919062003048565b60405180910390a150505050505050505050565b600080620012566101008462002ef7565b905060006200126861010085620031ad565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620012a292919062002e8b565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012d590620027c5565b601f1982820381018352601f90910116604081905262001302908d908d908d908d908d90602001620031ed565b60408051601f19818403018152908290526200132292916020016200322e565b604051602081830303815290604052805190602001206040516020016200137b94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013c75760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff6101009091048116908416036200144f5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c460000006064820152608401620006fd565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620014a398979695949392919062003261565b60405180910390a1620014e0620014da6001602260019054906101000a900463ffffffff16338787348880519060200120620009da565b62001f55565b6026546001600160a01b03166333d6247d620014fb620007e5565b6040518263ffffffff1660e01b81526004016200151a91815260200190565b600060405180830381600087803b1580156200153557600080fd5b505af11580156200154a573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015805760405162461bcd60e51b8152600401620006fd9062002e2e565b62000755620020a1565b6200159462001afd565b6001600160a01b038116620015fb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006fd565b620016068162001e99565b50565b60225460ff16156200162f5760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff610100909104811690861603620016b75760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c4600000000006064820152608401620006fd565b60008060606001600160a01b0389166200174e5785341462001744576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c55456064820152608401620006fd565b60009150620019bf565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200181c57604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af1158015620017e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200180991906200318d565b50602081015181519094509250620019bd565b84156200183157620018318a88888862002150565b620018486001600160a01b038b1633308a62002578565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200189f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018c99190810190620032ce565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001908573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620019329190810190620032ce565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001971573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001997919062003307565b604051602001620019ab9392919062003141565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162001a0198979695949392919062003261565b60405180910390a162001a26620014da600084868c8c8c8880519060200120620009da565b6026546001600160a01b03166333d6247d62001a41620007e5565b6040518263ffffffff1660e01b815260040162001a6091815260200190565b600060405180830381600087803b15801562001a7b57600080fd5b505af115801562001a90573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001ac55760405162461bcd60e51b8152600401620006fd9062002f2a565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006fd565b62001b6a8a63ffffffff1662001245565b1562001bc15760405162461bcd60e51b8152602060048201526030602482015260008051602062004bc583398151915260448201526f081053149150511657d0d3105253515160821b6064820152608401620006fd565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001c35573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c5b919062003327565b90508060000362001cc45760405162461bcd60e51b8152602060048201526039602482015260008051602062004bc583398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c4944000000000000006064820152608401620006fd565b60225463ffffffff878116610100909204161462001d465760405162461bcd60e51b8152602060048201526043602482015260008051602062004bc583398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a401620006fd565b602254600090610100900463ffffffff1662001d6457508862001d67565b50895b62001d9262001d83848b8b8b8b8b8b80519060200120620009da565b8e8e63ffffffff1684620008d8565b62001a905760405162461bcd60e51b815260206004820152602c602482015260008051602062004bc583398151915260448201526b0814d35517d253959053125160a21b6064820152608401620006fd565b600062001df46101008362002ef7565b9050600062001e0661010084620031ad565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001e935760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006fd565b62000755335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001f5090849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620025b2565b505050565b80600162001f66602060026200343e565b62001f7291906200344c565b6021541062001fd75760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b6064820152608401620006fd565b60016021600082825462001fec919062003466565b909155505060215460005b60208110156200209657816001166001036200202c57826001826020811062002024576200202462002eb5565b015550505050565b6001816020811062002042576200204262002eb5565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200207f919062002ef7565b9150806200208d8162002f0e565b91505062001ff7565b5062001f5062003481565b60225460ff166200211b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006fd565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200219383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200268b92505050565b9050632afa533160e01b6001600160e01b03198216016200238c576000808080808080620021c5896004818d62003497565b810190620021d49190620034c3565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620022165760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0386163014620022415760405162461bcd60e51b8152600401620006fd906200357b565b8a8514620022b85760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d41544348000000000000006064820152608401620006fd565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200233891906200302a565b6000604051808303816000865af19150503d806000811462002377576040519150601f19603f3d011682016040523d82523d6000602084013e6200237c565b606091505b5050505050505050505062002571565b6001600160e01b031981166323f2ebc360e21b14620024025760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b6064820152608401620006fd565b6000808080808080806200241a8a6004818e62003497565b810190620024299190620035cc565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200246d5760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0387163014620024985760405162461bcd60e51b8152600401620006fd906200357b565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f16916200252191906200302a565b6000604051808303816000865af19150503d806000811462002560576040519150601f19603f3d011682016040523d82523d6000602084013e62002565565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d7c9085906323b872dd60e01b9060840162001f18565b600062002609826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620026929092919063ffffffff16565b80519091501562001f5057808060200190518101906200262a91906200318d565b62001f505760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006fd565b6020015190565b6060620009d2848460008585600080866001600160a01b03168587604051620026bc91906200302a565b60006040518083038185875af1925050503d8060008114620026fb576040519150601f19603f3d011682016040523d82523d6000602084013e62002700565b606091505b509150915062002713878383876200271e565b979650505050505050565b60608315620027925782516000036200278a576001600160a01b0385163b6200278a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006fd565b5081620009d2565b620009d28383815115620027a95781518083602001fd5b8060405162461bcd60e51b8152600401620006fd919062003658565b611557806200366e83390190565b6001600160a01b03811681146200160657600080fd5b8035620027f681620027d3565b919050565b803563ffffffff81168114620027f657600080fd5b60008083601f8401126200282357600080fd5b50813567ffffffffffffffff8111156200283c57600080fd5b6020830191508360208285010111156200285557600080fd5b9250929050565b60008060008060008060a087890312156200287657600080fd5b86356200288381620027d3565b95506200289360208801620027fb565b94506040870135620028a581620027d3565b935060608701359250608087013567ffffffffffffffff811115620028c957600080fd5b620028d789828a0162002810565b979a9699509497509295939492505050565b60008060408385031215620028fd57600080fd5b6200290883620027fb565b915060208301356200291a81620027d3565b809150509250929050565b6000602082840312156200293857600080fd5b5035919050565b6000602082840312156200295257600080fd5b6200295d82620027fb565b9392505050565b6000602082840312156200297757600080fd5b81356200295d81620027d3565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620029c657620029c662002984565b604052919050565b600082601f830112620029e057600080fd5b8135602067ffffffffffffffff821115620029ff57620029ff62002984565b8160051b62002a108282016200299a565b928352848101820192828101908785111562002a2b57600080fd5b83870192505b84831015620027135782358252918301919083019062002a31565b6000806000806080858703121562002a6357600080fd5b84359350602085013567ffffffffffffffff8082111562002a8357600080fd5b62002a9188838901620029ce565b945060408701359150808216821462002aa957600080fd5b509396929550929360600135925050565b60ff811681146200160657600080fd5b600080600080600080600060e0888a03121562002ae657600080fd5b873562002af38162002aba565b965062002b0360208901620027fb565b9550604088013562002b1581620027d3565b945062002b2560608901620027fb565b9350608088013562002b3781620027d3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002b715762002b7162002984565b50601f01601f191660200190565b600082601f83011262002b9157600080fd5b813562002ba862002ba28262002b54565b6200299a565b81815284602083860101111562002bbe57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002bfc57600080fd5b8a3567ffffffffffffffff8082111562002c1557600080fd5b62002c238e838f01620029ce565b9b5062002c3360208e01620027fb565b9a5060408d0135995060608d0135985062002c5160808e01620027fb565b975062002c6160a08e01620027e9565b965062002c7160c08e01620027fb565b955062002c8160e08e01620027e9565b94506101008d013593506101208d013591508082111562002ca157600080fd5b5062002cb08d828e0162002b7f565b9150509295989b9194979a5092959850565b60008060006060848603121562002cd857600080fd5b62002ce384620027fb565b9250602084013562002cf581620027d3565b9150604084013562002d0781620027d3565b809150509250925092565b600080600080600080600060a0888a03121562002d2e57600080fd5b62002d3988620027fb565b9650602088013562002d4b81620027d3565b9550604088013567ffffffffffffffff8082111562002d6957600080fd5b62002d778b838c0162002810565b909750955060608a013591508082111562002d9157600080fd5b5062002da08a828b0162002810565b909450925050608088013562002db68162002aba565b8091505092959891949750929550565b60008060006060848603121562002ddc57600080fd5b62002de784620027fb565b9250602084013562002df981620027d3565b9150604084013567ffffffffffffffff81111562002e1657600080fd5b62002e248682870162002b7f565b9150509250925092565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002f095762002f0962002ecb565b500490565b60006001820162002f235762002f2362002ee1565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002faf57818101518382015260200162002f95565b8381111562000d7c5750506000910152565b6000815180845262002fdb81602086016020860162002f92565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff83166020820152606060408201819052600090620030219083018462002fc1565b95945050505050565b600082516200303e81846020870162002f92565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f8301126200309157600080fd5b8151620030a262002ba28262002b54565b818152846020838601011115620030b857600080fd5b620009d282602083016020870162002f92565b600080600060608486031215620030e157600080fd5b835167ffffffffffffffff80821115620030fa57600080fd5b62003108878388016200307f565b945060208601519150808211156200311f57600080fd5b506200312e868287016200307f565b925050604084015162002d078162002aba565b60608152600062003156606083018662002fc1565b82810360208401526200316a818662002fc1565b91505060ff83166040830152949350505050565b80151581146200160657600080fd5b600060208284031215620031a057600080fd5b81516200295d816200317e565b600082620031bf57620031bf62002ecb565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003203606083018789620031c4565b828103602084015262003218818688620031c4565b91505060ff831660408301529695505050505050565b600083516200324281846020880162002f92565b8351908301906200325881836020880162002f92565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032b58483018762002fc1565b925080851660e085015250509998505050505050505050565b600060208284031215620032e157600080fd5b815167ffffffffffffffff811115620032f957600080fd5b620009d2848285016200307f565b6000602082840312156200331a57600080fd5b81516200295d8162002aba565b6000602082840312156200333a57600080fd5b5051919050565b600181815b808511156200338257816000190482111562003366576200336662002ee1565b808516156200337457918102915b93841c939080029062003346565b509250929050565b6000826200339b57506001620007a4565b81620033aa57506000620007a4565b8160018114620033c35760028114620033ce57620033ee565b6001915050620007a4565b60ff841115620033e257620033e262002ee1565b50506001821b620007a4565b5060208310610133831016604e8410600b841016171562003413575081810a620007a4565b6200341f838362003341565b806000190482111562003436576200343662002ee1565b029392505050565b60006200295d83836200338a565b60008282101562003461576200346162002ee1565b500390565b600082198211156200347c576200347c62002ee1565b500190565b634e487b7160e01b600052600160045260246000fd5b60008085851115620034a857600080fd5b83861115620034b657600080fd5b5050820193919092039150565b600080600080600080600060e0888a031215620034df57600080fd5b8735620034ec81620027d3565b96506020880135620034fe81620027d3565b95506040880135945060608801359350608088013562002b378162002aba565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b031215620035ea57600080fd5b8835620035f781620027d3565b975060208901356200360981620027d3565b96506040890135955060608901359450608089013562003629816200317e565b935060a08901356200363b8162002aba565b979a969950949793969295929450505060c08201359160e0013590565b6020815260006200295d602083018462002fc156fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea2646970667358221220906ea48f19088f63dbf7270e029d0db2a116bfdc48421c0afa81f84f29beb83f64736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220dede2c0e5ac340c975f0209bf91c3275d9290d561a441f9001d1ccfdad83fc9d64736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001f35760003560e01c806381b1c174116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b806381b1c17414620004615780638da5cb5b146200049b5780638f61151914620004bb57600080fd5b8063318aee3d116200018d5780634638554911620001585780634638554914620003da578063647c576c14620003ff578063715018a614620004245780637b6323c1146200043c57600080fd5b8063318aee3d14620003095780633ae0504714620003785780633da8168214620003905780633e19704314620003b557600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f620002093660046200285c565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f6200071e565b3480156200026757600080fd5b506200027f62000279366004620028e9565b62000757565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002925565b620007aa565b348015620002ca57600080fd5b506200020f620002dc3660046200293f565b620007b9565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002964565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b50620002fa620007e5565b3480156200039d57600080fd5b506200022d620003af36600462002a4c565b620008d8565b348015620003c257600080fd5b50620002fa620003d436600462002aca565b620009da565b348015620003e757600080fd5b506200020f620003f936600462002bdb565b62000a67565b3480156200040c57600080fd5b506200020f6200041e36600462002cc2565b62000c0d565b3480156200043157600080fd5b506200020f62000d82565b3480156200044957600080fd5b506200020f6200045b36600462002bdb565b62000d98565b3480156200046e57600080fd5b506200027f6200048036600462002925565b6024602052600090815260409020546001600160a01b031681565b348015620004a857600080fd5b50605a546001600160a01b03166200027f565b348015620004c857600080fd5b506027546200027f906001600160a01b031681565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002925565b62001245565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002d12565b6200128a565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002dc6565b620013a1565b348015620005e957600080fd5b506200020f62001553565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002925565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002964565b6200158a565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007065760405162461bcd60e51b815260206004820152604760248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b6200071686868686868662001609565b505050505050565b6027546001600160a01b031633146200074b5760405162461bcd60e51b8152600401620006fd9062002e2e565b6200075562001a9f565b565b60006024600084846040516020016200077292919062002e8b565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b462001afd565b608c55565b620007c362001afd565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008cf57826001166001036200085057600181602081106200081c576200081c62002eb5565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200087d565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088a60028462002ef7565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c69062002f0e565b915050620007f0565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009cb5781600116600103620009555786818151811062000913576200091362002eb5565b60200260200101518360405160200162000937929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009a7565b828782815181106200096b576200096b62002eb5565b60200260200101516040516020016200098e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b460028362002ef7565b915080620009c28162002f0e565b915050620008e8565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a8d5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000aa38a8a8a8a8a8a8a8a8a8a600162001b59565b62000ab48963ffffffff1662001de4565b6000836001600160a01b03168387898560405160240162000ad89392919062002fef565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b0f91906200302a565b60006040518083038185875af1925050503d806000811462000b4e576040519150601f19603f3d011682016040523d82523d6000602084013e62000b53565b606091505b505090508062000bbf5760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b6064820152608401620006fd565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bf895949392919062003048565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c2e5750600054600160ff909116105b8062000c4a5750303b15801562000c4a575060005460ff166001145b62000caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006fd565b6000805460ff19166001179055801562000cd3576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d3562001e26565b801562000d7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8c62001afd565b62000755600062001e99565b60225460ff161562000dbe5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000dd48a8a8a8a8a8a8a8a8a8a600062001b59565b62000de58963ffffffff1662001de4565b6001600160a01b03851662000eda57604080516000808252602082019092526001600160a01b03851690849060405162000e2091906200302a565b60006040518083038185875af1925050503d806000811462000e5f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e64565b606091505b505090508062000ed35760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b6064820152608401620006fd565b50620011f8565b60225463ffffffff61010090910481169087160362000f0f5762000f096001600160a01b038616848462001eeb565b620011f8565b6000868660405160200162000f2692919062002e8b565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200117d5760008060008580602001905181019062000f789190620030cb565b92509250925060008584848460405162000f9290620027c5565b62000fa09392919062003141565b8190604051809103906000f590508015801562000fc1573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001016573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200103c91906200318d565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200116b9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011f5565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620011cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011f391906200318d565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200123195949392919062003048565b60405180910390a150505050505050505050565b600080620012566101008462002ef7565b905060006200126861010085620031ad565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620012a292919062002e8b565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012d590620027c5565b601f1982820381018352601f90910116604081905262001302908d908d908d908d908d90602001620031ed565b60408051601f19818403018152908290526200132292916020016200322e565b604051602081830303815290604052805190602001206040516020016200137b94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013c75760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff6101009091048116908416036200144f5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c460000006064820152608401620006fd565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620014a398979695949392919062003261565b60405180910390a1620014e0620014da6001602260019054906101000a900463ffffffff16338787348880519060200120620009da565b62001f55565b6026546001600160a01b03166333d6247d620014fb620007e5565b6040518263ffffffff1660e01b81526004016200151a91815260200190565b600060405180830381600087803b1580156200153557600080fd5b505af11580156200154a573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015805760405162461bcd60e51b8152600401620006fd9062002e2e565b62000755620020a1565b6200159462001afd565b6001600160a01b038116620015fb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006fd565b620016068162001e99565b50565b60225460ff16156200162f5760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff610100909104811690861603620016b75760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c4600000000006064820152608401620006fd565b60008060606001600160a01b0389166200174e5785341462001744576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c55456064820152608401620006fd565b60009150620019bf565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200181c57604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af1158015620017e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200180991906200318d565b50602081015181519094509250620019bd565b84156200183157620018318a88888862002150565b620018486001600160a01b038b1633308a62002578565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200189f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018c99190810190620032ce565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001908573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620019329190810190620032ce565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001971573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001997919062003307565b604051602001620019ab9392919062003141565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162001a0198979695949392919062003261565b60405180910390a162001a26620014da600084868c8c8c8880519060200120620009da565b6026546001600160a01b03166333d6247d62001a41620007e5565b6040518263ffffffff1660e01b815260040162001a6091815260200190565b600060405180830381600087803b15801562001a7b57600080fd5b505af115801562001a90573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001ac55760405162461bcd60e51b8152600401620006fd9062002f2a565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006fd565b62001b6a8a63ffffffff1662001245565b1562001bc15760405162461bcd60e51b8152602060048201526030602482015260008051602062004bc583398151915260448201526f081053149150511657d0d3105253515160821b6064820152608401620006fd565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001c35573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c5b919062003327565b90508060000362001cc45760405162461bcd60e51b8152602060048201526039602482015260008051602062004bc583398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c4944000000000000006064820152608401620006fd565b60225463ffffffff878116610100909204161462001d465760405162461bcd60e51b8152602060048201526043602482015260008051602062004bc583398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a401620006fd565b602254600090610100900463ffffffff1662001d6457508862001d67565b50895b62001d9262001d83848b8b8b8b8b8b80519060200120620009da565b8e8e63ffffffff1684620008d8565b62001a905760405162461bcd60e51b815260206004820152602c602482015260008051602062004bc583398151915260448201526b0814d35517d253959053125160a21b6064820152608401620006fd565b600062001df46101008362002ef7565b9050600062001e0661010084620031ad565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001e935760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006fd565b62000755335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001f5090849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620025b2565b505050565b80600162001f66602060026200343e565b62001f7291906200344c565b6021541062001fd75760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b6064820152608401620006fd565b60016021600082825462001fec919062003466565b909155505060215460005b60208110156200209657816001166001036200202c57826001826020811062002024576200202462002eb5565b015550505050565b6001816020811062002042576200204262002eb5565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200207f919062002ef7565b9150806200208d8162002f0e565b91505062001ff7565b5062001f5062003481565b60225460ff166200211b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006fd565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200219383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200268b92505050565b9050632afa533160e01b6001600160e01b03198216016200238c576000808080808080620021c5896004818d62003497565b810190620021d49190620034c3565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620022165760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0386163014620022415760405162461bcd60e51b8152600401620006fd906200357b565b8a8514620022b85760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d41544348000000000000006064820152608401620006fd565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200233891906200302a565b6000604051808303816000865af19150503d806000811462002377576040519150601f19603f3d011682016040523d82523d6000602084013e6200237c565b606091505b5050505050505050505062002571565b6001600160e01b031981166323f2ebc360e21b14620024025760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b6064820152608401620006fd565b6000808080808080806200241a8a6004818e62003497565b810190620024299190620035cc565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200246d5760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0387163014620024985760405162461bcd60e51b8152600401620006fd906200357b565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f16916200252191906200302a565b6000604051808303816000865af19150503d806000811462002560576040519150601f19603f3d011682016040523d82523d6000602084013e62002565565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d7c9085906323b872dd60e01b9060840162001f18565b600062002609826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620026929092919063ffffffff16565b80519091501562001f5057808060200190518101906200262a91906200318d565b62001f505760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006fd565b6020015190565b6060620009d2848460008585600080866001600160a01b03168587604051620026bc91906200302a565b60006040518083038185875af1925050503d8060008114620026fb576040519150601f19603f3d011682016040523d82523d6000602084013e62002700565b606091505b509150915062002713878383876200271e565b979650505050505050565b60608315620027925782516000036200278a576001600160a01b0385163b6200278a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006fd565b5081620009d2565b620009d28383815115620027a95781518083602001fd5b8060405162461bcd60e51b8152600401620006fd919062003658565b611557806200366e83390190565b6001600160a01b03811681146200160657600080fd5b8035620027f681620027d3565b919050565b803563ffffffff81168114620027f657600080fd5b60008083601f8401126200282357600080fd5b50813567ffffffffffffffff8111156200283c57600080fd5b6020830191508360208285010111156200285557600080fd5b9250929050565b60008060008060008060a087890312156200287657600080fd5b86356200288381620027d3565b95506200289360208801620027fb565b94506040870135620028a581620027d3565b935060608701359250608087013567ffffffffffffffff811115620028c957600080fd5b620028d789828a0162002810565b979a9699509497509295939492505050565b60008060408385031215620028fd57600080fd5b6200290883620027fb565b915060208301356200291a81620027d3565b809150509250929050565b6000602082840312156200293857600080fd5b5035919050565b6000602082840312156200295257600080fd5b6200295d82620027fb565b9392505050565b6000602082840312156200297757600080fd5b81356200295d81620027d3565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620029c657620029c662002984565b604052919050565b600082601f830112620029e057600080fd5b8135602067ffffffffffffffff821115620029ff57620029ff62002984565b8160051b62002a108282016200299a565b928352848101820192828101908785111562002a2b57600080fd5b83870192505b84831015620027135782358252918301919083019062002a31565b6000806000806080858703121562002a6357600080fd5b84359350602085013567ffffffffffffffff8082111562002a8357600080fd5b62002a9188838901620029ce565b945060408701359150808216821462002aa957600080fd5b509396929550929360600135925050565b60ff811681146200160657600080fd5b600080600080600080600060e0888a03121562002ae657600080fd5b873562002af38162002aba565b965062002b0360208901620027fb565b9550604088013562002b1581620027d3565b945062002b2560608901620027fb565b9350608088013562002b3781620027d3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002b715762002b7162002984565b50601f01601f191660200190565b600082601f83011262002b9157600080fd5b813562002ba862002ba28262002b54565b6200299a565b81815284602083860101111562002bbe57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002bfc57600080fd5b8a3567ffffffffffffffff8082111562002c1557600080fd5b62002c238e838f01620029ce565b9b5062002c3360208e01620027fb565b9a5060408d0135995060608d0135985062002c5160808e01620027fb565b975062002c6160a08e01620027e9565b965062002c7160c08e01620027fb565b955062002c8160e08e01620027e9565b94506101008d013593506101208d013591508082111562002ca157600080fd5b5062002cb08d828e0162002b7f565b9150509295989b9194979a5092959850565b60008060006060848603121562002cd857600080fd5b62002ce384620027fb565b9250602084013562002cf581620027d3565b9150604084013562002d0781620027d3565b809150509250925092565b600080600080600080600060a0888a03121562002d2e57600080fd5b62002d3988620027fb565b9650602088013562002d4b81620027d3565b9550604088013567ffffffffffffffff8082111562002d6957600080fd5b62002d778b838c0162002810565b909750955060608a013591508082111562002d9157600080fd5b5062002da08a828b0162002810565b909450925050608088013562002db68162002aba565b8091505092959891949750929550565b60008060006060848603121562002ddc57600080fd5b62002de784620027fb565b9250602084013562002df981620027d3565b9150604084013567ffffffffffffffff81111562002e1657600080fd5b62002e248682870162002b7f565b9150509250925092565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002f095762002f0962002ecb565b500490565b60006001820162002f235762002f2362002ee1565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002faf57818101518382015260200162002f95565b8381111562000d7c5750506000910152565b6000815180845262002fdb81602086016020860162002f92565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff83166020820152606060408201819052600090620030219083018462002fc1565b95945050505050565b600082516200303e81846020870162002f92565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f8301126200309157600080fd5b8151620030a262002ba28262002b54565b818152846020838601011115620030b857600080fd5b620009d282602083016020870162002f92565b600080600060608486031215620030e157600080fd5b835167ffffffffffffffff80821115620030fa57600080fd5b62003108878388016200307f565b945060208601519150808211156200311f57600080fd5b506200312e868287016200307f565b925050604084015162002d078162002aba565b60608152600062003156606083018662002fc1565b82810360208401526200316a818662002fc1565b91505060ff83166040830152949350505050565b80151581146200160657600080fd5b600060208284031215620031a057600080fd5b81516200295d816200317e565b600082620031bf57620031bf62002ecb565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003203606083018789620031c4565b828103602084015262003218818688620031c4565b91505060ff831660408301529695505050505050565b600083516200324281846020880162002f92565b8351908301906200325881836020880162002f92565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032b58483018762002fc1565b925080851660e085015250509998505050505050505050565b600060208284031215620032e157600080fd5b815167ffffffffffffffff811115620032f957600080fd5b620009d2848285016200307f565b6000602082840312156200331a57600080fd5b81516200295d8162002aba565b6000602082840312156200333a57600080fd5b5051919050565b600181815b808511156200338257816000190482111562003366576200336662002ee1565b808516156200337457918102915b93841c939080029062003346565b509250929050565b6000826200339b57506001620007a4565b81620033aa57506000620007a4565b8160018114620033c35760028114620033ce57620033ee565b6001915050620007a4565b60ff841115620033e257620033e262002ee1565b50506001821b620007a4565b5060208310610133831016604e8410600b841016171562003413575081810a620007a4565b6200341f838362003341565b806000190482111562003436576200343662002ee1565b029392505050565b60006200295d83836200338a565b60008282101562003461576200346162002ee1565b500390565b600082198211156200347c576200347c62002ee1565b500190565b634e487b7160e01b600052600160045260246000fd5b60008085851115620034a857600080fd5b83861115620034b657600080fd5b5050820193919092039150565b600080600080600080600060e0888a031215620034df57600080fd5b8735620034ec81620027d3565b96506020880135620034fe81620027d3565b95506040880135945060608801359350608088013562002b378162002aba565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b031215620035ea57600080fd5b8835620035f781620027d3565b975060208901356200360981620027d3565b96506040890135955060608901359450608089013562003629816200317e565b935060a08901356200363b8162002aba565b979a969950949793969295929450505060c08201359160e0013590565b6020815260006200295d602083018462002fc156fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea2646970667358221220906ea48f19088f63dbf7270e029d0db2a116bfdc48421c0afa81f84f29beb83f64736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220dede2c0e5ac340c975f0209bf91c3275d9290d561a441f9001d1ccfdad83fc9d64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZkEVMGlobalExitRoot.json b/compiled-contracts/PolygonZkEVMGlobalExitRoot.json index 057a190aa..7d73a056d 100644 --- a/compiled-contracts/PolygonZkEVMGlobalExitRoot.json +++ b/compiled-contracts/PolygonZkEVMGlobalExitRoot.json @@ -151,8 +151,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506104b1806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461015e57600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610413565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610413565b610171565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e366004610448565b6102d8565b600554610146906001600160a01b031681565b6040516001600160a01b0390911681526020016100a0565b600454610146906001600160a01b031681565b6005546001600160a01b031633148061019457506004546001600160a01b031633145b6102165760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143606482015261545360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b0316330361022e5760018190555b6004546001600160a01b031633036102465760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036102d457600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156102f85750600054600160ff909116105b806103125750303b158015610312575060005460ff166001145b6103755760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161020d565b6000805460ff191660011790558015610398576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561040e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561042557600080fd5b5035919050565b80356001600160a01b038116811461044357600080fd5b919050565b6000806040838503121561045b57600080fd5b6104648361042c565b91506104726020840161042c565b9050925092905056fea2646970667358221220ce8b45efb7da0764427464ebd7d943575cbb66b2e7381bbc1e119d374d35c81f64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461015e57600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610413565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610413565b610171565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e366004610448565b6102d8565b600554610146906001600160a01b031681565b6040516001600160a01b0390911681526020016100a0565b600454610146906001600160a01b031681565b6005546001600160a01b031633148061019457506004546001600160a01b031633145b6102165760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143606482015261545360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b0316330361022e5760018190555b6004546001600160a01b031633036102465760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036102d457600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156102f85750600054600160ff909116105b806103125750303b158015610312575060005460ff166001145b6103755760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161020d565b6000805460ff191660011790558015610398576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561040e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561042557600080fd5b5035919050565b80356001600160a01b038116811461044357600080fd5b919050565b6000806040838503121561045b57600080fd5b6104648361042c565b91506104726020840161042c565b9050925092905056fea2646970667358221220ce8b45efb7da0764427464ebd7d943575cbb66b2e7381bbc1e119d374d35c81f64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506104b1806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461015e57600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610413565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610413565b610171565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e366004610448565b6102d8565b600554610146906001600160a01b031681565b6040516001600160a01b0390911681526020016100a0565b600454610146906001600160a01b031681565b6005546001600160a01b031633148061019457506004546001600160a01b031633145b6102165760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143606482015261545360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b0316330361022e5760018190555b6004546001600160a01b031633036102465760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036102d457600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156102f85750600054600160ff909116105b806103125750303b158015610312575060005460ff166001145b6103755760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161020d565b6000805460ff191660011790558015610398576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561040e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561042557600080fd5b5035919050565b80356001600160a01b038116811461044357600080fd5b919050565b6000806040838503121561045b57600080fd5b6104648361042c565b91506104726020840161042c565b9050925092905056fea2646970667358221220c85d7a088a95a9873af857b0ba69b404b1ea78beb38b924904510a97b376492a64736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461015e57600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610413565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610413565b610171565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e366004610448565b6102d8565b600554610146906001600160a01b031681565b6040516001600160a01b0390911681526020016100a0565b600454610146906001600160a01b031681565b6005546001600160a01b031633148061019457506004546001600160a01b031633145b6102165760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143606482015261545360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b0316330361022e5760018190555b6004546001600160a01b031633036102465760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036102d457600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156102f85750600054600160ff909116105b806103125750303b158015610312575060005460ff166001145b6103755760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161020d565b6000805460ff191660011790558015610398576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561040e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561042557600080fd5b5035919050565b80356001600160a01b038116811461044357600080fd5b919050565b6000806040838503121561045b57600080fd5b6104648361042c565b91506104726020840161042c565b9050925092905056fea2646970667358221220c85d7a088a95a9873af857b0ba69b404b1ea78beb38b924904510a97b376492a64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZkEVMGlobalExitRootL2.json b/compiled-contracts/PolygonZkEVMGlobalExitRootL2.json index 65a9fa665..a084f2f1c 100644 --- a/compiled-contracts/PolygonZkEVMGlobalExitRootL2.json +++ b/compiled-contracts/PolygonZkEVMGlobalExitRootL2.json @@ -73,8 +73,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5060405161023838038061023883398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b6101a5806100936000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610156565b60006020819052908152604090205481565b6100a061009b366004610156565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b031633146101515760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f4e4c595f42524944474500000000000000606482015260840160405180910390fd5b600155565b60006020828403121561016857600080fd5b503591905056fea2646970667358221220080e511cb623b305e3c01d5336bc6ed7ba431d95296c11bb0c3369b618acb2e864736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610156565b60006020819052908152604090205481565b6100a061009b366004610156565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b031633146101515760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f4e4c595f42524944474500000000000000606482015260840160405180910390fd5b600155565b60006020828403121561016857600080fd5b503591905056fea2646970667358221220080e511cb623b305e3c01d5336bc6ed7ba431d95296c11bb0c3369b618acb2e864736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5060405161023838038061023883398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b6101a5806100936000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610156565b60006020819052908152604090205481565b6100a061009b366004610156565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b031633146101515760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f4e4c595f42524944474500000000000000606482015260840160405180910390fd5b600155565b60006020828403121561016857600080fd5b503591905056fea26469706673582212208ade3d2eba980246b6c0e0c3b965955b2e941cf61813cfcc060c2533632bae7064736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610156565b60006020819052908152604090205481565b6100a061009b366004610156565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b031633146101515760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f4e4c595f42524944474500000000000000606482015260840160405180910390fd5b600155565b60006020828403121561016857600080fd5b503591905056fea26469706673582212208ade3d2eba980246b6c0e0c3b965955b2e941cf61813cfcc060c2533632bae7064736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZkEVMGlobalExitRootL2Mock.json b/compiled-contracts/PolygonZkEVMGlobalExitRootL2Mock.json index 6eb6d0c09..eb66afe05 100644 --- a/compiled-contracts/PolygonZkEVMGlobalExitRootL2Mock.json +++ b/compiled-contracts/PolygonZkEVMGlobalExitRootL2Mock.json @@ -104,8 +104,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5060405161029e38038061029e83398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b61020b806100936000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806301fd904414610067578063116c40c314610083578063257b36321461009857806333d6247d146100b857806396e07459146100cb578063a3c573eb146100eb575b600080fd5b61007060015481565b6040519081526020015b60405180910390f35b61009661009136600461019a565b600155565b005b6100706100a636600461019a565b60006020819052908152604090205481565b6100966100c636600461019a565b610116565b6100966100d93660046101b3565b60009182526020829052604090912055565b6002546100fe906001600160a01b031681565b6040516001600160a01b03909116815260200161007a565b6002546001600160a01b031633146100915760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f4e4c595f42524944474500000000000000606482015260840160405180910390fd5b6000602082840312156101ac57600080fd5b5035919050565b600080604083850312156101c657600080fd5b5050803592602090910135915056fea2646970667358221220f1809c6e5507e3c43ac7c6d44326a3380807bb61faa0ce0d03d68c93b410611864736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c806301fd904414610067578063116c40c314610083578063257b36321461009857806333d6247d146100b857806396e07459146100cb578063a3c573eb146100eb575b600080fd5b61007060015481565b6040519081526020015b60405180910390f35b61009661009136600461019a565b600155565b005b6100706100a636600461019a565b60006020819052908152604090205481565b6100966100c636600461019a565b610116565b6100966100d93660046101b3565b60009182526020829052604090912055565b6002546100fe906001600160a01b031681565b6040516001600160a01b03909116815260200161007a565b6002546001600160a01b031633146100915760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f4e4c595f42524944474500000000000000606482015260840160405180910390fd5b6000602082840312156101ac57600080fd5b5035919050565b600080604083850312156101c657600080fd5b5050803592602090910135915056fea2646970667358221220f1809c6e5507e3c43ac7c6d44326a3380807bb61faa0ce0d03d68c93b410611864736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5060405161029e38038061029e83398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b61020b806100936000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806301fd904414610067578063116c40c314610083578063257b36321461009857806333d6247d146100b857806396e07459146100cb578063a3c573eb146100eb575b600080fd5b61007060015481565b6040519081526020015b60405180910390f35b61009661009136600461019a565b600155565b005b6100706100a636600461019a565b60006020819052908152604090205481565b6100966100c636600461019a565b610116565b6100966100d93660046101b3565b60009182526020829052604090912055565b6002546100fe906001600160a01b031681565b6040516001600160a01b03909116815260200161007a565b6002546001600160a01b031633146100915760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f4e4c595f42524944474500000000000000606482015260840160405180910390fd5b6000602082840312156101ac57600080fd5b5035919050565b600080604083850312156101c657600080fd5b5050803592602090910135915056fea26469706673582212204f52d4060ab333ea687f9a3e296492efd3124a0c608713d42cb68b63154b3d1364736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c806301fd904414610067578063116c40c314610083578063257b36321461009857806333d6247d146100b857806396e07459146100cb578063a3c573eb146100eb575b600080fd5b61007060015481565b6040519081526020015b60405180910390f35b61009661009136600461019a565b600155565b005b6100706100a636600461019a565b60006020819052908152604090205481565b6100966100c636600461019a565b610116565b6100966100d93660046101b3565b60009182526020829052604090912055565b6002546100fe906001600160a01b031681565b6040516001600160a01b03909116815260200161007a565b6002546001600160a01b031633146100915760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f4e4c595f42524944474500000000000000606482015260840160405180910390fd5b6000602082840312156101ac57600080fd5b5035919050565b600080604083850312156101c657600080fd5b5050803592602090910135915056fea26469706673582212204f52d4060ab333ea687f9a3e296492efd3124a0c608713d42cb68b63154b3d1364736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZkEVMGlobalExitRootMock.json b/compiled-contracts/PolygonZkEVMGlobalExitRootMock.json index 1588b1e42..0f1bd8f1a 100644 --- a/compiled-contracts/PolygonZkEVMGlobalExitRootMock.json +++ b/compiled-contracts/PolygonZkEVMGlobalExitRootMock.json @@ -198,8 +198,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5060405161077a38038061077a83398101604081905261002f916101bb565b6100398282610040565b50506101ee565b600054610100900460ff16158080156100605750600054600160ff909116105b8061008b57506100793061019060201b6104ae1760201c565b15801561008b575060005460ff166001145b6100f25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015610115576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561018b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b80516001600160a01b03811681146101b657600080fd5b919050565b600080604083850312156101ce57600080fd5b6101d78361019f565b91506101e56020840161019f565b90509250929050565b61057d806101fd6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80633ed691ef116100665780633ed691ef14610110578063485cc955146101495780635bcef6731461015c5780635ec6a8df1461017c578063a3c573eb146101a757600080fd5b806301fd9044146100a3578063051a9e28146100bf578063257b3632146100d4578063319cf735146100f457806333d6247d146100fd575b600080fd5b6100ac60015481565b6040519081526020015b60405180910390f35b6100d26100cd3660046104bd565b6101ba565b005b6100ac6100e23660046104bd565b60036020526000908152604090205481565b6100ac60025481565b6100d261010b3660046104bd565b61020c565b6100ac60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d26101573660046104f2565b610373565b6100d261016a366004610525565b60009182526003602052604090912055565b60055461018f906001600160a01b031681565b6040516001600160a01b0390911681526020016100b6565b60045461018f906001600160a01b031681565b80600360006101f860025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b6005546001600160a01b031633148061022f57506004546001600160a01b031633145b6102b15760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143606482015261545360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b031633036102c95760018190555b6004546001600160a01b031633036102e15760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361036f57600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103935750600054600160ff909116105b806103ad5750303b1580156103ad575060005460ff166001145b6104105760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016102a8565b6000805460ff191660011790558015610433576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b031992831617909255600480549285169290911691909117905580156104a9576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b6000602082840312156104cf57600080fd5b5035919050565b80356001600160a01b03811681146104ed57600080fd5b919050565b6000806040838503121561050557600080fd5b61050e836104d6565b915061051c602084016104d6565b90509250929050565b6000806040838503121561053857600080fd5b5050803592602090910135915056fea26469706673582212204aacd620f8b8a307bfa14a89da5b0d64ad22fc720c62b93a20b9f03df08cdf8964736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c80633ed691ef116100665780633ed691ef14610110578063485cc955146101495780635bcef6731461015c5780635ec6a8df1461017c578063a3c573eb146101a757600080fd5b806301fd9044146100a3578063051a9e28146100bf578063257b3632146100d4578063319cf735146100f457806333d6247d146100fd575b600080fd5b6100ac60015481565b6040519081526020015b60405180910390f35b6100d26100cd3660046104bd565b6101ba565b005b6100ac6100e23660046104bd565b60036020526000908152604090205481565b6100ac60025481565b6100d261010b3660046104bd565b61020c565b6100ac60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d26101573660046104f2565b610373565b6100d261016a366004610525565b60009182526003602052604090912055565b60055461018f906001600160a01b031681565b6040516001600160a01b0390911681526020016100b6565b60045461018f906001600160a01b031681565b80600360006101f860025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b6005546001600160a01b031633148061022f57506004546001600160a01b031633145b6102b15760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143606482015261545360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b031633036102c95760018190555b6004546001600160a01b031633036102e15760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361036f57600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103935750600054600160ff909116105b806103ad5750303b1580156103ad575060005460ff166001145b6104105760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016102a8565b6000805460ff191660011790558015610433576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b031992831617909255600480549285169290911691909117905580156104a9576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b6000602082840312156104cf57600080fd5b5035919050565b80356001600160a01b03811681146104ed57600080fd5b919050565b6000806040838503121561050557600080fd5b61050e836104d6565b915061051c602084016104d6565b90509250929050565b6000806040838503121561053857600080fd5b5050803592602090910135915056fea26469706673582212204aacd620f8b8a307bfa14a89da5b0d64ad22fc720c62b93a20b9f03df08cdf8964736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5060405161077a38038061077a83398101604081905261002f916101bb565b6100398282610040565b50506101ee565b600054610100900460ff16158080156100605750600054600160ff909116105b8061008b57506100793061019060201b6104ae1760201c565b15801561008b575060005460ff166001145b6100f25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015610115576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561018b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b80516001600160a01b03811681146101b657600080fd5b919050565b600080604083850312156101ce57600080fd5b6101d78361019f565b91506101e56020840161019f565b90509250929050565b61057d806101fd6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80633ed691ef116100665780633ed691ef14610110578063485cc955146101495780635bcef6731461015c5780635ec6a8df1461017c578063a3c573eb146101a757600080fd5b806301fd9044146100a3578063051a9e28146100bf578063257b3632146100d4578063319cf735146100f457806333d6247d146100fd575b600080fd5b6100ac60015481565b6040519081526020015b60405180910390f35b6100d26100cd3660046104bd565b6101ba565b005b6100ac6100e23660046104bd565b60036020526000908152604090205481565b6100ac60025481565b6100d261010b3660046104bd565b61020c565b6100ac60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d26101573660046104f2565b610373565b6100d261016a366004610525565b60009182526003602052604090912055565b60055461018f906001600160a01b031681565b6040516001600160a01b0390911681526020016100b6565b60045461018f906001600160a01b031681565b80600360006101f860025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b6005546001600160a01b031633148061022f57506004546001600160a01b031633145b6102b15760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143606482015261545360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b031633036102c95760018190555b6004546001600160a01b031633036102e15760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361036f57600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103935750600054600160ff909116105b806103ad5750303b1580156103ad575060005460ff166001145b6104105760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016102a8565b6000805460ff191660011790558015610433576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b031992831617909255600480549285169290911691909117905580156104a9576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b6000602082840312156104cf57600080fd5b5035919050565b80356001600160a01b03811681146104ed57600080fd5b919050565b6000806040838503121561050557600080fd5b61050e836104d6565b915061051c602084016104d6565b90509250929050565b6000806040838503121561053857600080fd5b5050803592602090910135915056fea26469706673582212203dde09941f25ec9225a337b99170872e87e97095a3e774502a8b168fed0346a464736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c80633ed691ef116100665780633ed691ef14610110578063485cc955146101495780635bcef6731461015c5780635ec6a8df1461017c578063a3c573eb146101a757600080fd5b806301fd9044146100a3578063051a9e28146100bf578063257b3632146100d4578063319cf735146100f457806333d6247d146100fd575b600080fd5b6100ac60015481565b6040519081526020015b60405180910390f35b6100d26100cd3660046104bd565b6101ba565b005b6100ac6100e23660046104bd565b60036020526000908152604090205481565b6100ac60025481565b6100d261010b3660046104bd565b61020c565b6100ac60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d26101573660046104f2565b610373565b6100d261016a366004610525565b60009182526003602052604090912055565b60055461018f906001600160a01b031681565b6040516001600160a01b0390911681526020016100b6565b60045461018f906001600160a01b031681565b80600360006101f860025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b6005546001600160a01b031633148061022f57506004546001600160a01b031633145b6102b15760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143606482015261545360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b031633036102c95760018190555b6004546001600160a01b031633036102e15760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361036f57600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103935750600054600160ff909116105b806103ad5750303b1580156103ad575060005460ff166001145b6104105760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016102a8565b6000805460ff191660011790558015610433576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b031992831617909255600480549285169290911691909117905580156104a9576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b6000602082840312156104cf57600080fd5b5035919050565b80356001600160a01b03811681146104ed57600080fd5b919050565b6000806040838503121561050557600080fd5b61050e836104d6565b915061051c602084016104d6565b90509250929050565b6000806040838503121561053857600080fd5b5050803592602090910135915056fea26469706673582212203dde09941f25ec9225a337b99170872e87e97095a3e774502a8b168fed0346a464736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/TokenWrapped.json b/compiled-contracts/TokenWrapped.json index f1437f1b1..2dac1128a 100644 --- a/compiled-contracts/TokenWrapped.json +++ b/compiled-contracts/TokenWrapped.json @@ -220,7 +220,13 @@ } ], "name": "burn", - "outputs": [], + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], "stateMutability": "nonpayable", "type": "function" }, @@ -312,7 +318,13 @@ } ], "name": "mint", - "outputs": [], + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], "stateMutability": "nonpayable", "type": "function" }, @@ -471,8 +483,8 @@ "type": "function" } ], - "bytecode": "0x60c06040523480156200001157600080fd5b506040516200154c3803806200154c8339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611092620004ba60003960006104690152600081816102f9015261043301526110926000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611043565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161105557611055610fd1565b506001019056fea264697066735822122048db6a6222fa164d21a8fcb1cd25d2a9e0eee016393c37dcc7b7fd638ef787c264736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611043565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161105557611055610fd1565b506001019056fea264697066735822122048db6a6222fa164d21a8fcb1cd25d2a9e0eee016393c37dcc7b7fd638ef787c264736f6c634300080f0033", + "bytecode": "0x60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea2646970667358221220906ea48f19088f63dbf7270e029d0db2a116bfdc48421c0afa81f84f29beb83f64736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea2646970667358221220906ea48f19088f63dbf7270e029d0db2a116bfdc48421c0afa81f84f29beb83f64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/PolygonZkEVM.sol b/contracts/PolygonZkEVM.sol index 8ada245b2..4c971d80e 100644 --- a/contracts/PolygonZkEVM.sol +++ b/contracts/PolygonZkEVM.sol @@ -106,12 +106,12 @@ contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { 21888242871839275222246405745257275088548364400416034343698204186575808495617; // Max transactions bytes that can be added in a single batch - // Max keccaks circuit = (2**23 / 158418) * 9 = 468 - // Bytes hashed per keccak = 136 - // Minimum constant keccaks batch = 4 - // Max bytes allowed = (468 - 4) * 136 = 63104 bytes - 1 byte padding - // Rounded to 60000 bytes - uint256 public constant MAX_TRANSACTIONS_BYTE_LENGTH = 60000; + // Max keccaks circuit = (2**23 / 155286) * 44 = 2376 + // Bytes per keccak = 136 + // Minimum Static keccaks batch = 2 + // Max bytes allowed = (2376 - 2) * 136 = 322864 bytes - 1 byte padding + // Rounded to 300000 bytes + uint256 public constant MAX_TRANSACTIONS_BYTE_LENGTH = 300000; // Force batch timeout uint64 public constant FORCE_BATCH_TIMEOUT = 5 days; @@ -119,7 +119,7 @@ contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { // If a sequenced batch exceeds this timeout without being verified, the contract enters in emergency mode uint64 public constant HALT_AGGREGATION_TIMEOUT = 1 weeks; - // Maximum batches that can be verified in one call TODO depends on our current metrics + // Maximum batches that can be verified in one call. It depends on our current metrics // This should be a protection against someone that trys to generate huge chunk of invalid batches, and we can't prove otherwise before the pending timeout expires uint64 public constant MAX_VERIFY_BATCHES = 1000; @@ -130,7 +130,7 @@ contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { // Adaptatly the batchFee will be updated to achieve this target uint64 public veryBatchTimeTarget; - // Batch fee multiplier with 3 decimal that goes from 1000 - 1024 + // Batch fee multiplier with 3 decimals that goes from 1000 - 1024 uint16 public multiplierBatchFee; // MATIC token address @@ -467,7 +467,7 @@ contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { require( currentBatch.transactions.length < MAX_TRANSACTIONS_BYTE_LENGTH, - "ProofOfEfficiePendingStatecy::sequenceBatches: Transactions bytes overflow" + "PolygonZkEVM::sequenceBatches: Transactions bytes overflow" ); } @@ -737,7 +737,7 @@ contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { // Verify proof require( rollupVerifier.verifyProof(proofA, proofB, proofC, [inputSnark]), - "PolygonZkEVM::verifyBatches: INVALID_PROOF" + "PolygonZkEVM::verifyBatches: invalid proof" ); // Get MATIC reward @@ -1180,7 +1180,7 @@ contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { ///////////////////////////////// /** - * @notice Allows to halt the PoE if its possible to prove a different state root given the same batches + * @notice Allows to halt the PolygonZkEVM if its possible to prove a different state root given the same batches * @param initPendingStateNum Init pending state, 0 when consolidated state is used * @param finalPendingStateNum Final pending state, that will be used to compare with the newStateRoot * @param initNumBatch Batch which the aggregator starts the verification @@ -1234,7 +1234,7 @@ contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { } /** - * @notice Allows to halt the PoE if its possible to prove a different state root given the same batches + * @notice Allows to halt the PolygonZkEVM if its possible to prove a different state root given the same batches * @param initPendingStateNum Init pending state, 0 when consolidated state is used * @param finalPendingStateNum Final pending state, that will be used to compare with the newStateRoot * @param initNumBatch Batch which the aggregator starts the verification @@ -1372,7 +1372,7 @@ contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { // Verify proof require( rollupVerifier.verifyProof(proofA, proofB, proofC, [inputSnark]), - "PolygonZkEVM::proveNonDeterministicPendingState: INVALID_PROOF" + "PolygonZkEVM::proveNonDeterministicPendingState: invalid proof" ); require( @@ -1383,7 +1383,7 @@ contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { } /** - * @notice Function to activate emergency state, which also enable the emergency mode on both PoE and PolygonZkEVM Bridge contrats + * @notice Function to activate emergency state, which also enable the emergency mode on both PolygonZkEVM and PolygonZkEVMBridge contrats * If not called by the owner owner must be provided a batcnNum that does not have been aggregated in a HALT_AGGREGATION_TIMEOUT period * @param sequencedBatchNum Sequenced batch number that has not been aggreagated in HALT_AGGREGATION_TIMEOUT */ @@ -1424,7 +1424,7 @@ contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { } /** - * @notice Function to deactivate emergency state on both PoE and PolygonZkEVMBridge contrats + * @notice Function to deactivate emergency state on both PolygonZkEVM and PolygonZkEVMBridge contrats */ function deactivateEmergencyState() external ifEmergencyState onlyAdmin { // Deactivate emergency state on PolygonZkEVMBridge @@ -1435,7 +1435,7 @@ contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { } /** - * @notice Internal function to activate emergency state on both PoE and PolygonZkEVM Bridge contrats + * @notice Internal function to activate emergency state on both PolygonZkEVM and PolygonZkEVMBridge contrats */ function _activateEmergencyState() internal override { // Activate emergency state on PolygonZkEVM Bridge diff --git a/contracts/PolygonZkEVMBridge.sol b/contracts/PolygonZkEVMBridge.sol index 2d8d5ebaa..841b46253 100644 --- a/contracts/PolygonZkEVMBridge.sol +++ b/contracts/PolygonZkEVMBridge.sol @@ -58,8 +58,8 @@ contract PolygonZkEVMBridge is // Global Exit Root address IPolygonZkEVMGlobalExitRoot public globalExitRootManager; - // Polygon ZK-EVM address - address public zkEVMaddress; + // PolygonZkEVM address + address public polygonZkEVMaddress; /** * @param _networkID networkID @@ -68,17 +68,17 @@ contract PolygonZkEVMBridge is function initialize( uint32 _networkID, IPolygonZkEVMGlobalExitRoot _globalExitRootManager, - address _zkEVMaddress + address _PolygonZkEVMaddress ) public virtual initializer { networkID = _networkID; globalExitRootManager = _globalExitRootManager; - zkEVMaddress = _zkEVMaddress; + polygonZkEVMaddress = _PolygonZkEVMAddress; } modifier onlyPolygonZkEVM() { require( - zkEVMaddress == msg.sender, - "PolygonZkEVM::onlyPolygonZkEVM: only Polygon ZK-EVM contractt" + polygonZkEVMaddress == msg.sender, + "PolygonZkEVM::onlyPolygonZkEVM: only PolygonZkEVM contract" ); _; } @@ -134,7 +134,7 @@ contract PolygonZkEVMBridge is ) public payable virtual ifNotEmergencyState { require( destinationNetwork != networkID, - "PolygonZkEVMBridge::bridgeAsset: DESTINATION_CANT_BE_ITSELF" + "PolygonZkEVMBridge::bridgeAsset: Destination cannot be itself" ); address originTokenAddress; @@ -145,7 +145,7 @@ contract PolygonZkEVMBridge is // Ether transfer require( msg.value == amount, - "PolygonZkEVMBridge::bridgeAsset: AMOUNT_DOES_NOT_MATCH_MSG_VALUE" + "PolygonZkEVMBridge::bridgeAsset: amount does not match message.value" ); // Ether is treated as ether from mainnet @@ -225,7 +225,7 @@ contract PolygonZkEVMBridge is ) public payable ifNotEmergencyState { require( destinationNetwork != networkID, - "PolygonZkEVMBridge::bridgeMessage: DESTINATION_CANT_BE_ITSELF" + "PolygonZkEVMBridge::bridgeMessage: Destination cannot be itself" ); emit BridgeEvent( @@ -307,7 +307,7 @@ contract PolygonZkEVMBridge is ); require( success, - "PolygonZkEVMBridge::claimAsset: ETH_TRANSFER_FAILED" + "PolygonZkEVMBridge::claimAsset: Ether transfer failed" ); } else { // Transfer tokens @@ -381,7 +381,7 @@ contract PolygonZkEVMBridge is * @param originAddress Origin address * @param destinationNetwork Network destination * @param destinationAddress Address destination - * @param amount Amount of tokens + * @param amount message value * @param metadata Abi encoded metadata if any, empty otherwise */ function claimMessage( @@ -423,7 +423,7 @@ contract PolygonZkEVMBridge is (originAddress, originNetwork, metadata) ) ); - require(success, "PolygonZkEVMBridge::claimMessage: MESSAGE_FAILED"); + require(success, "PolygonZkEVMBridge::claimMessage: Message failed"); emit ClaimEvent( index, @@ -529,7 +529,7 @@ contract PolygonZkEVMBridge is // Check nullifier require( !isClaimed(index), - "PolygonZkEVMBridge::_verifyLeaf: ALREADY_CLAIMED" + "PolygonZkEVMBridge::_verifyLeaf: Already claimed" ); // Check timestamp where the global exit root was set @@ -540,13 +540,13 @@ contract PolygonZkEVMBridge is require( timestampGlobalExitRoot != 0, - "PolygonZkEVMBridge::_verifyLeaf: GLOBAL_EXIT_ROOT_INVALID" + "PolygonZkEVMBridge::_verifyLeaf: GlobalExitRoot invalid" ); // Destination network must be networkID require( destinationNetwork == networkID, - "PolygonZkEVMBridge::_verifyLeaf: DESTINATION_NETWORK_DOES_NOT_MATCH" + "PolygonZkEVMBridge::_verifyLeaf: Destination network does not match" ); bytes32 claimRoot; @@ -572,7 +572,7 @@ contract PolygonZkEVMBridge is index, claimRoot ), - "PolygonZkEVMBridge::_verifyLeaf: SMT_INVALID" + "PolygonZkEVMBridge::_verifyLeaf: Invalid smt proof" ); } @@ -585,7 +585,7 @@ contract PolygonZkEVMBridge is uint256 claimedBitIndex = index % 256; uint256 claimedWord = claimedBitMap[claimedWordIndex]; uint256 mask = (1 << claimedBitIndex); - return claimedWord & mask == mask; + return (claimedWord & mask) == mask; } /** @@ -647,15 +647,15 @@ contract PolygonZkEVMBridge is ); require( owner == msg.sender, - "PolygonZkEVMBridge::_permit: PERMIT_OWNER_MUST_BE_THE_SENDER" + "PolygonZkEVMBridge::_permit: Permit owner must be the sender" ); require( spender == address(this), - "PolygonZkEVMBridge::_permit: SPENDER_MUST_BE_THIS" + "PolygonZkEVMBridge::_permit: Spender must be 'this'" ); require( value == amount, - "PolygonZkEVMBridge::_permit: PERMIT_AMOUNT_DOES_NOT_MATCH" + "PolygonZkEVMBridge::_permit: Permit amount does not match" ); // we call without checking the result, in case it fails and he doesn't have enough balance @@ -677,7 +677,7 @@ contract PolygonZkEVMBridge is } else { require( sig == _PERMIT_SIGNATURE_DAI, - "PolygonZkEVMBridge::_permit: NOT_VALID_CALL" + "PolygonZkEVMBridge::_permit: Not valid call" ); ( @@ -704,11 +704,11 @@ contract PolygonZkEVMBridge is ); require( holder == msg.sender, - "PolygonZkEVMBridge::_permit: PERMIT_OWNER_MUST_BE_THE_SENDER" + "PolygonZkEVMBridge::_permit: Permit owner must be the sender" ); require( spender == address(this), - "PolygonZkEVMBridge::_permit: SPENDER_MUST_BE_THIS" + "PolygonZkEVMBridge::_permit: Spender must be 'this'" ); // we call without checking the result, in case it fails and he doesn't have enough balance diff --git a/contracts/PolygonZkEVMGlobalExitRoot.sol b/contracts/PolygonZkEVMGlobalExitRoot.sol index 4de5f16f9..23b739296 100644 --- a/contracts/PolygonZkEVMGlobalExitRoot.sol +++ b/contracts/PolygonZkEVMGlobalExitRoot.sol @@ -54,7 +54,7 @@ contract PolygonZkEVMGlobalExitRoot is function updateExitRoot(bytes32 newRoot) external { require( msg.sender == rollupAddress || msg.sender == bridgeAddress, - "PolygonZkEVMGlobalExitRoot::updateExitRoot: ONLY_ALLOWED_CONTRACTS" + "PolygonZkEVMGlobalExitRoot::updateExitRoot: Only allowed contracts" ); if (msg.sender == rollupAddress) { lastRollupExitRoot = newRoot; diff --git a/contracts/PolygonZkEVMGlobalExitRootL2.sol b/contracts/PolygonZkEVMGlobalExitRootL2.sol index 1498bc5c6..921fc5f21 100644 --- a/contracts/PolygonZkEVMGlobalExitRootL2.sol +++ b/contracts/PolygonZkEVMGlobalExitRootL2.sol @@ -40,7 +40,7 @@ contract PolygonZkEVMGlobalExitRootL2 { function updateExitRoot(bytes32 newRoot) external { require( msg.sender == bridgeAddress, - "PolygonZkEVMGlobalExitRootL2::updateExitRoot: ONLY_BRIDGE" + "PolygonZkEVMGlobalExitRootL2::updateExitRoot: Only PolygonZkEVMBridge" ); lastRollupExitRoot = newRoot; } diff --git a/contracts/PolygonZkEVMTimelock.sol b/contracts/PolygonZkEVMTimelock.sol index d54c2d4e5..c9d4f4613 100644 --- a/contracts/PolygonZkEVMTimelock.sol +++ b/contracts/PolygonZkEVMTimelock.sol @@ -19,7 +19,7 @@ contract PolygonZkEVMTimelock is TimelockController { * @param proposers accounts to be granted proposer and canceller roles * @param executors accounts to be granted executor role * @param admin optional account to be granted admin role; disable with zero address - * @param _polygonZkEVM PoE address + * @param _polygonZkEVM polygonZkEVM address **/ constructor( uint256 minDelay, diff --git a/contracts/lib/DepositContract.sol b/contracts/lib/DepositContract.sol index c4c93b21b..18a50d119 100644 --- a/contracts/lib/DepositContract.sol +++ b/contracts/lib/DepositContract.sol @@ -57,7 +57,7 @@ contract DepositContract is Initializable { // Avoid overflowing the Merkle tree (and prevent edge case in computing `_branch`) require( depositCount < _MAX_DEPOSIT_COUNT, - "DepositContract:_deposit: MERKLE_TREE_FULL" + "DepositContract:_deposit: Merkle tree full" ); // Add deposit data root to Merkle tree (update a single `_branch` node) diff --git a/contracts/lib/TokenWrapped.sol b/contracts/lib/TokenWrapped.sol index 49188de84..eefbb2ca1 100644 --- a/contracts/lib/TokenWrapped.sol +++ b/contracts/lib/TokenWrapped.sol @@ -37,7 +37,7 @@ contract TokenWrapped is ERC20 { modifier onlyBridge() { require( msg.sender == bridgeAddress, - "TokenWrapped::onlyBridge: NOT_BRIDGE" + "TokenWrapped::onlyBridge: Not PolygonZkEVMBridge" ); _; } From c7e6e35270c22b3d403d4d4cc30244915e9ce92f Mon Sep 17 00:00:00 2001 From: krlosMata Date: Tue, 20 Dec 2022 23:39:28 +0100 Subject: [PATCH 61/71] comments --- docs/PolygonZkEVM.md | 10 +++++----- docs/PolygonZkEVMBridge.md | 2 +- docs/PolygonZkEVMTimelock.md | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/PolygonZkEVM.md b/docs/PolygonZkEVM.md index a7e0eaf48..91c6de520 100644 --- a/docs/PolygonZkEVM.md +++ b/docs/PolygonZkEVM.md @@ -337,7 +337,7 @@ Allow the current admin to set a new admin address uint256[2] proofC ) public ``` -Allows to halt the PoE if its possible to prove a different state root given the same batches +Allows to halt the PolygonZkEVM if its possible to prove a different state root given the same batches #### Parameters: @@ -367,7 +367,7 @@ Allows to halt the PoE if its possible to prove a different state root given the uint256[2] proofC ) public ``` -Allows to halt the PoE if its possible to prove a different state root given the same batches +Allows to halt the PolygonZkEVM if its possible to prove a different state root given the same batches #### Parameters: @@ -419,7 +419,7 @@ Internal functoin that prove a different state root given the same batches to ve uint64 sequencedBatchNum ) external ``` -Function to activate emergency state, which also enable the emergency mode on both PoE and PolygonZkEVM Bridge contrats +Function to activate emergency state, which also enable the emergency mode on both PolygonZkEVM and PolygonZkEVMBridge contrats If not called by the owner owner must be provided a batcnNum that does not have been aggregated in a HALT_AGGREGATION_TIMEOUT period @@ -433,7 +433,7 @@ If not called by the owner owner must be provided a batcnNum that does not have function deactivateEmergencyState( ) external ``` -Function to deactivate emergency state on both PoE and PolygonZkEVMBridge contrats +Function to deactivate emergency state on both PolygonZkEVM and PolygonZkEVMBridge contrats @@ -442,7 +442,7 @@ Function to deactivate emergency state on both PoE and PolygonZkEVMBridge contra function _activateEmergencyState( ) internal ``` -Internal function to activate emergency state on both PoE and PolygonZkEVM Bridge contrats +Internal function to activate emergency state on both PolygonZkEVM and PolygonZkEVMBridge contrats diff --git a/docs/PolygonZkEVMBridge.md b/docs/PolygonZkEVMBridge.md index 224652ea2..c086be0bc 100644 --- a/docs/PolygonZkEVMBridge.md +++ b/docs/PolygonZkEVMBridge.md @@ -119,7 +119,7 @@ Verify merkle proof and execute message |`originAddress` | address | Origin address |`destinationNetwork` | uint32 | Network destination |`destinationAddress` | address | Address destination -|`amount` | uint256 | Amount of tokens +|`amount` | uint256 | message value |`metadata` | bytes | Abi encoded metadata if any, empty otherwise ### precalculatedWrapperAddress diff --git a/docs/PolygonZkEVMTimelock.md b/docs/PolygonZkEVMTimelock.md index 170448e2e..7603bff47 100644 --- a/docs/PolygonZkEVMTimelock.md +++ b/docs/PolygonZkEVMTimelock.md @@ -24,7 +24,7 @@ Constructor of timelock |`proposers` | address[] | accounts to be granted proposer and canceller roles |`executors` | address[] | accounts to be granted executor role |`admin` | address | optional account to be granted admin role; disable with zero address -|`_polygonZkEVM` | contract PolygonZkEVM | PoE address +|`_polygonZkEVM` | contract PolygonZkEVM | polygonZkEVM address ### getMinDelay From fc3f9a5c415607bbe01b6a5c3a2ec733697ae7cd Mon Sep 17 00:00:00 2001 From: krlosMata Date: Tue, 20 Dec 2022 23:41:31 +0100 Subject: [PATCH 62/71] comments --- compiled-contracts/PolygonZkEVM.json | 4 ++-- compiled-contracts/PolygonZkEVMBridge.json | 8 ++++---- .../PolygonZkEVMBridgeMock.json | 8 ++++---- .../PolygonZkEVMGlobalExitRoot.json | 4 ++-- .../PolygonZkEVMGlobalExitRootL2.json | 4 ++-- .../PolygonZkEVMGlobalExitRootL2Mock.json | 4 ++-- .../PolygonZkEVMGlobalExitRootMock.json | 4 ++-- compiled-contracts/PolygonZkEVMMock.json | 4 ++-- compiled-contracts/TokenWrapped.json | 20 ++++--------------- contracts/PolygonZkEVMBridge.sol | 4 ++-- contracts/mocks/PolygonZkEVMBridgeMock.sol | 4 ++-- 11 files changed, 28 insertions(+), 40 deletions(-) diff --git a/compiled-contracts/PolygonZkEVM.json b/compiled-contracts/PolygonZkEVM.json index 63705a524..40543e4e8 100644 --- a/compiled-contracts/PolygonZkEVM.json +++ b/compiled-contracts/PolygonZkEVM.json @@ -1469,8 +1469,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5061562380620000216000396000f3fe608060405234801561001057600080fd5b50600436106103af5760003560e01c80638da5cb5b116101f4578063cfa8ed471161011a578063e7a7ed02116100ad578063f14916d61161007c578063f14916d6146108eb578063f2fde38b146108fe578063f851a44014610911578063f8b823e41461092457600080fd5b8063e7a7ed0214610898578063e8bf92ed146108b2578063eaeb077b146108c5578063edc41121146108d857600080fd5b8063d939b315116100e9578063d939b3151461085a578063dbc1697614610874578063e11f3f181461087c578063e217cfd61461088f57600080fd5b8063cfa8ed4714610806578063d02103ca14610820578063d8d1091b14610833578063d8f54db01461084657600080fd5b8063ab9fc5ef11610192578063b6b0b09711610161578063b6b0b097146107be578063c0ed84e0146107d8578063c89e42df146107e0578063cf136306146107f357600080fd5b8063ab9fc5ef14610712578063adc879e91461071c578063afd23cbe14610736578063b4d63f581461075e57600080fd5b80639eb831b9116101ce5780639eb831b9146106d75780639f0d039d146106df578063a3c573eb146106e7578063aa58bad6146106fa57600080fd5b80638da5cb5b146106ab57806399f5634e146106bc5780639c9f3dfe146106c457600080fd5b80634a910e6a116102d9578063715018a611610277578063837a473811610246578063837a473814610606578063841b24d7146106745780638b48931e1461068e5780638c4a0af71461069857600080fd5b8063715018a6146105c55780637215541a146105cd57806375c508b3146105e05780637fcb3653146105f357600080fd5b806360943d6a116102b357806360943d6a1461056c5780636b8616ce1461057f5780636ff512cc1461059f578063704b6c02146105b257600080fd5b80634a910e6a146105315780635392c5e014610544578063542028d51461056457600080fd5b8063383b3be811610351578063456052671161032057806345605267146104d7578063458c0477146104f15780634834a343146105045780634a1a89a71461051757600080fd5b8063383b3be814610484578063394218e9146104975780633c158267146104aa578063423fa856146104bd57600080fd5b806319d8ac611161038d57806319d8ac6114610404578063220d78991461042f57806329878983146104425780632d0889d31461046d57600080fd5b8063107bf28c146103b457806315064c96146103d25780631816b7e5146103ef575b600080fd5b6103bc61092d565b6040516103c9919061476b565b60405180910390f35b6065546103df9060ff1681565b60405190151581526020016103c9565b6104026103fd366004614785565b6109bb565b005b606854610417906001600160401b031681565b6040516001600160401b0390911681526020016103c9565b6103bc61043d3660046147c5565b610aea565b606a54610455906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b61047661ea6081565b6040519081526020016103c9565b6103df610492366004614812565b610c90565b6104026104a5366004614812565b610cd7565b6104026104b836600461494f565b610e26565b60685461041790600160401b90046001600160401b031681565b60685461041790600160801b90046001600160401b031681565b607254610417906001600160401b031681565b610402610512366004614a8d565b61163a565b60725461041790600160401b90046001600160401b031681565b61040261053f366004614812565b611983565b610476610552366004614812565b606d6020526000908152604090205481565b6103bc611c23565b61040261057a366004614b2f565b611c30565b61047661058d366004614812565b60666020526000908152604090205481565b6104026105ad366004614c06565b611fa0565b6104026105c0366004614c06565b612024565b61040261209c565b6104026105db366004614812565b6120b0565b6104026105ee366004614c23565b612328565b606954610417906001600160401b031681565b610649610614366004614cc1565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103c9565b60725461041790600160c01b90046001600160401b031681565b61041762093a8081565b6104026106a6366004614ce8565b6123b7565b6033546001600160a01b0316610455565b61047661242e565b6104026106d2366004614812565b612511565b610476600c81565b607454610476565b607054610455906001600160a01b031681565b6065546104179061010090046001600160401b031681565b6104176206978081565b606c5461041790600160a81b90046001600160401b031681565b60655461074b90600160481b900461ffff1681565b60405161ffff90911681526020016103c9565b61079961076c366004614812565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103c9565b60655461045590600160581b90046001600160a01b031681565b610417612657565b6104026107ee366004614d05565b6126a4565b610402610801366004614812565b61270a565b60695461045590600160401b90046001600160a01b031681565b606c54610455906001600160a01b031681565b610402610841366004614d39565b61278b565b606c546103df90600160a01b900460ff1681565b60725461041790600160801b90046001600160401b031681565b610402612c55565b61040261088a366004614c23565b612d11565b6104176103e881565b60685461041790600160c01b90046001600160401b031681565b606b54610455906001600160a01b031681565b6104026108d3366004614e2b565b612e56565b6104026108e6366004614a8d565b61317e565b6104026108f9366004614c06565b61329e565b61040261090c366004614c06565b613316565b607354610455906001600160a01b031681565b61047660745481565b606f805461093a90614e6f565b80601f016020809104026020016040519081016040528092919081815260200182805461096690614e6f565b80156109b35780601f10610988576101008083540402835291602001916109b3565b820191906000526020600020905b81548152906001019060200180831161099657829003601f168201915b505050505081565b6073546001600160a01b031633146109ee5760405162461bcd60e51b81526004016109e590614ea9565b60405180910390fd5b6103e88161ffff16118015610a0857506104008161ffff16105b610a8d5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a4016109e5565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610b1c57508115155b610b90576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e5565b80610c05576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e5565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610cc692600160801b90920481169116614f02565b6001600160401b0316111592915050565b6073546001600160a01b03163314610d015760405162461bcd60e51b81526004016109e590614ea9565b62093a806001600160401b0382161115610d2d5760405162461bcd60e51b81526004016109e590614f2d565b60655460ff16610dd0576072546001600160401b03600160c01b909104811690821610610dd05760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109e5565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610adf565b60655460ff1615610e495760405162461bcd60e51b81526004016109e590614f98565b606954600160401b90046001600160a01b03163314610ed05760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e63657200000000000060648201526084016109e5565b805180610f455760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e6365203120626174636800000060648201526084016109e5565b6103e88110610fbe576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e79206261746368657360648201526084016109e5565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561145e57600087828151811061101157611011615000565b60200260200101519050600081606001516001600160401b031611156111ca578361103b81615016565b9450506000816000015180519060200120826020015183606001516040516020016110689392919061503c565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461110e5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d6174636800000060648201526084016109e5565b81606001516001600160401b031682604001516001600160401b031610156111c45760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a4016109e5565b50611351565b602081015115806112535750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b36329161120d9160040190815260200190565b6020604051808303816000875af115801561122c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611250919061505f565b15155b6112c55760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d75737420657869737400000000000060648201526084016109e5565b80515161ea60116113515760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a4016109e5565b856001600160401b031681604001516001600160401b03161015801561138457504281604001516001600160401b031611155b6113f65760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e676500000060648201526084016109e5565b8051805160209182012081830151604080850151905161141d948894939291339101615078565b604051602081830303815290604052805190602001209250848061144090615016565b95505080604001519550508080611456906150bc565b915050610ff5565b506068546001600160401b03600160c01b909104811690831611156114e35760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b60648201526084016109e5565b60685460009061150390600160801b90046001600160401b0316846150d5565b611516906001600160401b0316876150fd565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115eb903390309084906115d09190615114565b606554600160581b90046001600160a01b031692919061338c565b6115f36133f7565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff161561165d5760405162461bcd60e51b81526004016109e590614f98565b6072546001600160401b03878116600090815260676020526040902060010154429261169492600160c01b90910481169116614f02565b6001600160401b0316111561171d5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a4016109e5565b6103e861172a88886150d5565b6001600160401b0316106117a65760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e7920626174636865730000000060648201526084016109e5565b6117b6888888888888888861349b565b6117bf866139d9565b607254600160801b90046001600160401b0316600003611887576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561182457607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561186a57600080fd5b505af115801561187e573d6000803e3d6000fd5b50505050611938565b61188f6133f7565b607280546001600160401b03169060006118a883615016565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b038116158015906119b057506072546001600160401b03600160401b9091048116908216115b80156119cb57506072546001600160401b0390811690821611155b611a495760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a4016109e5565b606a546001600160a01b03163314611af357611a6481610c90565b611af35760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a4016109e5565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d9094529382902092909255607280546fffffffffffffffff000000000000000019169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611bb557600080fd5b505af1158015611bc9573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611c1691815260200190565b60405180910390a3505050565b606e805461093a90614e6f565b600054610100900460ff1615808015611c505750600054600160ff909116105b80611c6a5750303b158015611c6a575060005460ff166001145b611ccd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109e5565b6000805460ff191660011790558015611cf0576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611d6d6020860186614c06565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d9d6060860160408701614c06565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611dd860c0860160a08701614c06565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611e3560e0860160c08701614812565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611e6c6040860160208701614812565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611ea86080860160608701614812565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611ee460a0860160808701614ce8565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611f0c8482615179565b50606f611f198382615179565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611f4f613bbf565b8015611f95576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611fca5760405162461bcd60e51b81526004016109e590614ea9565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610adf565b6073546001600160a01b0316331461204e5760405162461bcd60e51b81526004016109e590614ea9565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190602001610adf565b6120a4613c33565b6120ae6000613c8d565b565b6033546001600160a01b0316331461231d576072546000906001600160401b03161561210157506072546001600160401b03908116600090815260716020526040902054600160401b90041661210f565b506069546001600160401b03165b80826001600160401b03161161218d5760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c72656164792076657269666965640000000060648201526084016109e5565b6068546001600160401b03600160401b9091048116908316118015906121cf57506001600160401b038083166000908152606760205260409020600101541615155b61225a5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a4016109e5565b6001600160401b0380831660009081526067602052604090206001015442916122889162093a809116614f02565b6001600160401b0316111561231b5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a4016109e5565b505b612325613cdf565b50565b60655460ff161561234b5760405162461bcd60e51b81526004016109e590614f98565b61235c898989898989898989613d4f565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f95613cdf565b6073546001600160a01b031633146123e15760405162461bcd60e51b81526004016109e590614ea9565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610adf90831515815260200190565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612481573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a5919061505f565b905060006124b1612657565b6068546001600160401b03600160401b82048116916124e191600160801b8204811691600160c01b9004166150d5565b6124eb9190614f02565b6124f591906150d5565b6001600160401b0316905061250a818361524e565b9250505090565b6073546001600160a01b0316331461253b5760405162461bcd60e51b81526004016109e590614ea9565b62093a806001600160401b03821611156125675760405162461bcd60e51b81526004016109e590614f2d565b60655460ff166125fc576072546001600160401b03600160801b9091048116908216106125fc5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f7765720060648201526084016109e5565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610adf565b6072546000906001600160401b03161561269457506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126ce5760405162461bcd60e51b81526004016109e590614ea9565b606e6126da8282615179565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610adf919061476b565b6073546001600160a01b031633146127345760405162461bcd60e51b81526004016109e590614ea9565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610adf565b60655460ff16156127ae5760405162461bcd60e51b81526004016109e590614f98565b606c54600160a01b900460ff1615156001146127dc5760405162461bcd60e51b81526004016109e590615262565b80518061283f5760405162461bcd60e51b815260206004820152603d60248201526000805160206155ae83398151915260448201527f3a204d75737420666f726365206174206c65617374203120626174636800000060648201526084016109e5565b6103e881106128b05760405162461bcd60e51b815260206004820152604360248201526000805160206155ae83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a4016109e5565b6068546001600160401b03600160c01b82048116916128d8918491600160801b9004166152cb565b11156129325760405162461bcd60e51b815260206004820152603560248201526000805160206155ae8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b60648201526084016109e5565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612b5e57600086828151811061297f5761297f615000565b60200260200101519050838061299490615016565b9450506000816000015180519060200120826020015183604001516040516020016129c19392919061503c565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612a605760405162461bcd60e51b815260206004820152604260248201526000805160206155ae83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109e5565b612a6b6001886150fd565b8303612b005742620697808360400151612a859190614f02565b6001600160401b03161115612b005760405162461bcd60e51b815260206004820152604760248201526000805160206155ae83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a4016109e5565b8151805160209182012081840151604051612b2393889392914291339101615078565b6040516020818303038152906040528051906020012093508580612b4690615016565b96505050508080612b56906150bc565b915050612963565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612c775760405162461bcd60e51b81526004016109e5906152e3565b6073546001600160a01b03163314612ca15760405162461bcd60e51b81526004016109e590614ea9565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612cf157600080fd5b505af1158015612d05573d6000803e3d6000fd5b505050506120ae6143ca565b606a546001600160a01b03163314612d3b5760405162461bcd60e51b81526004016109e590615340565b612d4c898989898989898989613d4f565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612d9757607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612ddd57600080fd5b505af1158015612df1573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612e795760405162461bcd60e51b81526004016109e590614f98565b606c54600160a01b900460ff161515600114612ea75760405162461bcd60e51b81526004016109e590615262565b6000612eb260745490565b905081811115612f175760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b60648201526084016109e5565b61ea60835110612f875760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b60648201526084016109e5565b606554612fa690600160581b90046001600160a01b031633308461338c565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015612ff0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613014919061505f565b60688054919250600160c01b9091046001600160401b031690601861303883615016565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016130799392919061503c565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361311d57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613178565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161316f9392919061539d565b60405180910390a25b50505050565b606a546001600160a01b031633146131a85760405162461bcd60e51b81526004016109e590615340565b6131b8888888888888888861349b565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561320357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561324957600080fd5b505af115801561325d573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611971565b6073546001600160a01b031633146132c85760405162461bcd60e51b81526004016109e590614ea9565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001610adf565b61331e613c33565b6001600160a01b0381166133835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e5565b61232581613c8d565b6040516001600160a01b03808516602483015283166044820152606481018290526131789085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614421565b6072546001600160401b03600160401b82048116911611156120ae5760725460009061343490600160401b90046001600160401b03166001614f02565b905061343f81610c90565b15612325576072546000906002906134619084906001600160401b03166150d5565b61346b91906153d0565b6134759083614f02565b905061348081610c90565b156134925761348e81611983565b5050565b61348e82611983565b6000806134a6612657565b90506001600160401b038a1615613621576072546001600160401b03908116908b1611156135625760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2070656e60448201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560648201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608482015260a4016109e5565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b909204161461361b5760405162461bcd60e51b815260206004820152604c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760648201526b040e6e8c2e8ca40c4c2e8c6d60a31b608482015260a4016109e5565b50613769565b6001600160401b0389166000908152606d60205260409020549150816136bb5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786064820152621a5cdd60ea1b608482015260a4016109e5565b806001600160401b0316896001600160401b031611156137695760405162461bcd60e51b815260206004820152605d60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060648201527f7468616e2063757272656e744c61737456657269666965644261746368000000608482015260a4016109e5565b806001600160401b0316886001600160401b0316116138165760405162461bcd60e51b815260206004820152605760248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2066696e60448201527f616c4e65774261746368206d75737420626520626967676572207468616e206360648201527f757272656e744c61737456657269666965644261746368000000000000000000608482015260a4016109e5565b60006138258a8a8a868b610aea565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161385a91906153f6565b602060405180830381855afa158015613877573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061389a919061505f565b6138a49190615412565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916138e8918b918b918b9190600401615426565b602060405180830381865afa158015613905573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392991906154a0565b6139885760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20494e5660448201526920a624a22fa82927a7a360b11b60648201526084016109e5565b6139cb33613996858d6150d5565b6001600160401b03166139a761242e565b6139b19190615114565b606554600160581b90046001600160a01b031691906144f8565b505050505050505050505050565b60006139e3612657565b9050816000806139f384846150d5565b6001600160401b031690505b836001600160401b0316836001600160401b031614613aa5576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613a4f9116426150fd565b1115613a8a576001810154613a7490600160401b90046001600160401b0316866150d5565b613a87906001600160401b0316846152cb565b92505b60010154600160401b90046001600160401b031692506139ff565b6000613ab183836150fd565b905082811015613b2b576000613ac782856150fd565b9050600c8111613ad75780613ada565b600c5b9050613ae7816003615114565b613af290600a6155a1565b606554613b0b908390600160481b900461ffff166155a1565b607454613b189190615114565b613b22919061524e565b60745550613bb7565b6000613b3784836150fd565b9050600c8111613b475780613b4a565b600c5b90506000613b59826003615114565b613b6490600a6155a1565b606554613b7d908490600160481b900461ffff166155a1565b607454613b8a9190615114565b613b94919061524e565b905080607454607454613ba79190615114565b613bb1919061524e565b60745550505b505050505050565b600054610100900460ff16613c2a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109e5565b6120ae33613c8d565b6033546001600160a01b031633146120ae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109e5565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d2f57600080fd5b505af1158015613d43573d6000803e3d6000fd5b505050506120ae614528565b60006001600160401b038a1615613eca576072546001600160401b03908116908b161115613e0e5760405162461bcd60e51b815260206004820152606c60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c4016109e5565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613ec45760405162461bcd60e51b815260206004820152606060248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a4016109e5565b5061401e565b506001600160401b0387166000908152606d602052604090205480613f6b5760405162461bcd60e51b815260206004820152605760248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a4016109e5565b6069546001600160401b03908116908916111561401e5760405162461bcd60e51b815260206004820152607160248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c4016109e5565b6072546001600160401b03908116908a161180159061404e5750896001600160401b0316896001600160401b0316115b801561406f57506072546001600160401b03600160401b9091048116908a16115b6140e75760405162461bcd60e51b815260206004820152604f60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a4016109e5565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146141a75760405162461bcd60e51b815260206004820152606a60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c4016109e5565b60006141b6898989858a610aea565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516141eb91906153f6565b602060405180830381855afa158015614208573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061422b919061505f565b6142359190615412565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614279918a918a918a9190600401615426565b602060405180830381865afa158015614296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ba91906154a0565b61431a5760405162461bcd60e51b815260206004820152603e60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20494e56414c49445f50524f4f46000060648201526084016109e5565b6001600160401b038b166000908152607160205260409020600201548790036139cb5760405162461bcd60e51b815260206004820152606260248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c4016109e5565b60655460ff166143ec5760405162461bcd60e51b81526004016109e5906152e3565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614476826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145839092919063ffffffff16565b8051909150156144f3578080602001905181019061449491906154a0565b6144f35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109e5565b505050565b6040516001600160a01b0383166024820152604481018290526144f390849063a9059cbb60e01b906064016133c0565b60655460ff161561454b5760405162461bcd60e51b81526004016109e590614f98565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614592848460008561459a565b949350505050565b6060824710156145fb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109e5565b600080866001600160a01b0316858760405161461791906153f6565b60006040518083038185875af1925050503d8060008114614654576040519150601f19603f3d011682016040523d82523d6000602084013e614659565b606091505b509150915061466a87838387614675565b979650505050505050565b606083156146e45782516000036146dd576001600160a01b0385163b6146dd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109e5565b5081614592565b61459283838151156146f95781518083602001fd5b8060405162461bcd60e51b81526004016109e5919061476b565b60005b8381101561472e578181015183820152602001614716565b838111156131785750506000910152565b60008151808452614757816020860160208601614713565b601f01601f19169290920160200192915050565b60208152600061477e602083018461473f565b9392505050565b60006020828403121561479757600080fd5b813561ffff8116811461477e57600080fd5b80356001600160401b03811681146147c057600080fd5b919050565b600080600080600060a086880312156147dd57600080fd5b6147e6866147a9565b94506147f4602087016147a9565b94979496505050506040830135926060810135926080909101359150565b60006020828403121561482457600080fd5b61477e826147a9565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156148655761486561482d565b60405290565b604051606081016001600160401b03811182821017156148655761486561482d565b604051601f8201601f191681016001600160401b03811182821017156148b5576148b561482d565b604052919050565b60006001600160401b038211156148d6576148d661482d565b5060051b60200190565b600082601f8301126148f157600080fd5b81356001600160401b0381111561490a5761490a61482d565b61491d601f8201601f191660200161488d565b81815284602083860101111561493257600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561496257600080fd5b82356001600160401b038082111561497957600080fd5b818501915085601f83011261498d57600080fd5b81356149a061499b826148bd565b61488d565b81815260059190911b830184019084810190888311156149bf57600080fd5b8585015b83811015614a58578035858111156149db5760008081fd5b86016080818c03601f19018113156149f35760008081fd5b6149fb614843565b8983013588811115614a0d5760008081fd5b614a1b8e8c838701016148e0565b8252506040808401358b8301526060614a358186016147a9565b82840152614a448486016147a9565b9083015250855250509186019186016149c3565b5098975050505050505050565b8060408101831015614a7657600080fd5b92915050565b8060808101831015614a7657600080fd5b6000806000806000806000806101a0898b031215614aaa57600080fd5b614ab3896147a9565b9750614ac160208a016147a9565b9650614acf60408a016147a9565b95506060890135945060808901359350614aec8a60a08b01614a65565b9250614afb8a60e08b01614a7c565b9150614b0b8a6101608b01614a65565b90509295985092959890939650565b6001600160a01b038116811461232557600080fd5b600080600080600080600080888a036101c0811215614b4d57600080fd5b8935614b5881614b1a565b985060208a0135614b6881614b1a565b975060408a0135614b7881614b1a565b965060608a0135614b8881614b1a565b955060e0607f1982011215614b9c57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614bc657600080fd5b614bd28c838d016148e0565b93506101a08b0135915080821115614be957600080fd5b50614bf68b828c016148e0565b9150509295985092959890939650565b600060208284031215614c1857600080fd5b813561477e81614b1a565b60008060008060008060008060006101c08a8c031215614c4257600080fd5b614c4b8a6147a9565b9850614c5960208b016147a9565b9750614c6760408b016147a9565b9650614c7560608b016147a9565b955060808a0135945060a08a01359350614c928b60c08c01614a65565b9250614ca28b6101008c01614a7c565b9150614cb28b6101808c01614a65565b90509295985092959850929598565b600060208284031215614cd357600080fd5b5035919050565b801515811461232557600080fd5b600060208284031215614cfa57600080fd5b813561477e81614cda565b600060208284031215614d1757600080fd5b81356001600160401b03811115614d2d57600080fd5b614592848285016148e0565b60006020808385031215614d4c57600080fd5b82356001600160401b0380821115614d6357600080fd5b818501915085601f830112614d7757600080fd5b8135614d8561499b826148bd565b81815260059190911b83018401908481019088831115614da457600080fd5b8585015b83811015614a5857803585811115614dc05760008081fd5b86016060818c03601f1901811315614dd85760008081fd5b614de061486b565b8983013588811115614df25760008081fd5b614e008e8c838701016148e0565b8252506040808401358b830152614e188385016147a9565b9082015285525050918601918601614da8565b60008060408385031215614e3e57600080fd5b82356001600160401b03811115614e5457600080fd5b614e60858286016148e0565b95602094909401359450505050565b600181811c90821680614e8357607f821691505b602082108103614ea357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614f2457614f24614eec565b01949350505050565b60208082526045908201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361503257615032614eec565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b60006020828403121561507157600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b6000600182016150ce576150ce614eec565b5060010190565b60006001600160401b03838116908316818110156150f5576150f5614eec565b039392505050565b60008282101561510f5761510f614eec565b500390565b600081600019048311821515161561512e5761512e614eec565b500290565b601f8211156144f357600081815260208120601f850160051c8101602086101561515a5750805b601f850160051c820191505b81811015613bb757828155600101615166565b81516001600160401b038111156151925761519261482d565b6151a6816151a08454614e6f565b84615133565b602080601f8311600181146151db57600084156151c35750858301515b600019600386901b1c1916600185901b178555613bb7565b600085815260208120601f198616915b8281101561520a578886015182559484019460019091019084016151eb565b50858210156152285787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b60008261525d5761525d615238565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b600082198211156152de576152de614eec565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b03831660208201526060604082018190526000906153c79083018461473f565b95945050505050565b60006001600160401b03808416806153ea576153ea615238565b92169190910492915050565b60008251615408818460208701614713565b9190910192915050565b60008261542157615421615238565b500690565b61012081016040808784376000838201818152879190815b600281101561545e5784848337908401828152928401929060010161543e565b5050828760c0870137610100850181815286935091505b6001811015615494578251825260209283019290910190600101615475565b50505095945050505050565b6000602082840312156154b257600080fd5b815161477e81614cda565b600181815b808511156154f85781600019048211156154de576154de614eec565b808516156154eb57918102915b93841c93908002906154c2565b509250929050565b60008261550f57506001614a76565b8161551c57506000614a76565b8160018114615532576002811461553c57615558565b6001915050614a76565b60ff84111561554d5761554d614eec565b50506001821b614a76565b5060208310610133831016604e8410600b841016171561557b575081810a614a76565b61558583836154bd565b806000190482111561559957615599614eec565b029392505050565b600061477e838361550056fe506f6c79676f6e5a6b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a6b45564d3a3a70726f76654e6f6e44657465726d696e6973a2646970667358221220567a1597b3ca9ddc0bc346518dc0d174c30614c8b7e5d0070e48dd60461b01fb64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103af5760003560e01c80638da5cb5b116101f4578063cfa8ed471161011a578063e7a7ed02116100ad578063f14916d61161007c578063f14916d6146108eb578063f2fde38b146108fe578063f851a44014610911578063f8b823e41461092457600080fd5b8063e7a7ed0214610898578063e8bf92ed146108b2578063eaeb077b146108c5578063edc41121146108d857600080fd5b8063d939b315116100e9578063d939b3151461085a578063dbc1697614610874578063e11f3f181461087c578063e217cfd61461088f57600080fd5b8063cfa8ed4714610806578063d02103ca14610820578063d8d1091b14610833578063d8f54db01461084657600080fd5b8063ab9fc5ef11610192578063b6b0b09711610161578063b6b0b097146107be578063c0ed84e0146107d8578063c89e42df146107e0578063cf136306146107f357600080fd5b8063ab9fc5ef14610712578063adc879e91461071c578063afd23cbe14610736578063b4d63f581461075e57600080fd5b80639eb831b9116101ce5780639eb831b9146106d75780639f0d039d146106df578063a3c573eb146106e7578063aa58bad6146106fa57600080fd5b80638da5cb5b146106ab57806399f5634e146106bc5780639c9f3dfe146106c457600080fd5b80634a910e6a116102d9578063715018a611610277578063837a473811610246578063837a473814610606578063841b24d7146106745780638b48931e1461068e5780638c4a0af71461069857600080fd5b8063715018a6146105c55780637215541a146105cd57806375c508b3146105e05780637fcb3653146105f357600080fd5b806360943d6a116102b357806360943d6a1461056c5780636b8616ce1461057f5780636ff512cc1461059f578063704b6c02146105b257600080fd5b80634a910e6a146105315780635392c5e014610544578063542028d51461056457600080fd5b8063383b3be811610351578063456052671161032057806345605267146104d7578063458c0477146104f15780634834a343146105045780634a1a89a71461051757600080fd5b8063383b3be814610484578063394218e9146104975780633c158267146104aa578063423fa856146104bd57600080fd5b806319d8ac611161038d57806319d8ac6114610404578063220d78991461042f57806329878983146104425780632d0889d31461046d57600080fd5b8063107bf28c146103b457806315064c96146103d25780631816b7e5146103ef575b600080fd5b6103bc61092d565b6040516103c9919061476b565b60405180910390f35b6065546103df9060ff1681565b60405190151581526020016103c9565b6104026103fd366004614785565b6109bb565b005b606854610417906001600160401b031681565b6040516001600160401b0390911681526020016103c9565b6103bc61043d3660046147c5565b610aea565b606a54610455906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b61047661ea6081565b6040519081526020016103c9565b6103df610492366004614812565b610c90565b6104026104a5366004614812565b610cd7565b6104026104b836600461494f565b610e26565b60685461041790600160401b90046001600160401b031681565b60685461041790600160801b90046001600160401b031681565b607254610417906001600160401b031681565b610402610512366004614a8d565b61163a565b60725461041790600160401b90046001600160401b031681565b61040261053f366004614812565b611983565b610476610552366004614812565b606d6020526000908152604090205481565b6103bc611c23565b61040261057a366004614b2f565b611c30565b61047661058d366004614812565b60666020526000908152604090205481565b6104026105ad366004614c06565b611fa0565b6104026105c0366004614c06565b612024565b61040261209c565b6104026105db366004614812565b6120b0565b6104026105ee366004614c23565b612328565b606954610417906001600160401b031681565b610649610614366004614cc1565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103c9565b60725461041790600160c01b90046001600160401b031681565b61041762093a8081565b6104026106a6366004614ce8565b6123b7565b6033546001600160a01b0316610455565b61047661242e565b6104026106d2366004614812565b612511565b610476600c81565b607454610476565b607054610455906001600160a01b031681565b6065546104179061010090046001600160401b031681565b6104176206978081565b606c5461041790600160a81b90046001600160401b031681565b60655461074b90600160481b900461ffff1681565b60405161ffff90911681526020016103c9565b61079961076c366004614812565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103c9565b60655461045590600160581b90046001600160a01b031681565b610417612657565b6104026107ee366004614d05565b6126a4565b610402610801366004614812565b61270a565b60695461045590600160401b90046001600160a01b031681565b606c54610455906001600160a01b031681565b610402610841366004614d39565b61278b565b606c546103df90600160a01b900460ff1681565b60725461041790600160801b90046001600160401b031681565b610402612c55565b61040261088a366004614c23565b612d11565b6104176103e881565b60685461041790600160c01b90046001600160401b031681565b606b54610455906001600160a01b031681565b6104026108d3366004614e2b565b612e56565b6104026108e6366004614a8d565b61317e565b6104026108f9366004614c06565b61329e565b61040261090c366004614c06565b613316565b607354610455906001600160a01b031681565b61047660745481565b606f805461093a90614e6f565b80601f016020809104026020016040519081016040528092919081815260200182805461096690614e6f565b80156109b35780601f10610988576101008083540402835291602001916109b3565b820191906000526020600020905b81548152906001019060200180831161099657829003601f168201915b505050505081565b6073546001600160a01b031633146109ee5760405162461bcd60e51b81526004016109e590614ea9565b60405180910390fd5b6103e88161ffff16118015610a0857506104008161ffff16105b610a8d5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a4016109e5565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610b1c57508115155b610b90576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e5565b80610c05576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e5565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610cc692600160801b90920481169116614f02565b6001600160401b0316111592915050565b6073546001600160a01b03163314610d015760405162461bcd60e51b81526004016109e590614ea9565b62093a806001600160401b0382161115610d2d5760405162461bcd60e51b81526004016109e590614f2d565b60655460ff16610dd0576072546001600160401b03600160c01b909104811690821610610dd05760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109e5565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610adf565b60655460ff1615610e495760405162461bcd60e51b81526004016109e590614f98565b606954600160401b90046001600160a01b03163314610ed05760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e63657200000000000060648201526084016109e5565b805180610f455760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e6365203120626174636800000060648201526084016109e5565b6103e88110610fbe576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e79206261746368657360648201526084016109e5565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561145e57600087828151811061101157611011615000565b60200260200101519050600081606001516001600160401b031611156111ca578361103b81615016565b9450506000816000015180519060200120826020015183606001516040516020016110689392919061503c565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461110e5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d6174636800000060648201526084016109e5565b81606001516001600160401b031682604001516001600160401b031610156111c45760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a4016109e5565b50611351565b602081015115806112535750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b36329161120d9160040190815260200190565b6020604051808303816000875af115801561122c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611250919061505f565b15155b6112c55760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d75737420657869737400000000000060648201526084016109e5565b80515161ea60116113515760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a4016109e5565b856001600160401b031681604001516001600160401b03161015801561138457504281604001516001600160401b031611155b6113f65760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e676500000060648201526084016109e5565b8051805160209182012081830151604080850151905161141d948894939291339101615078565b604051602081830303815290604052805190602001209250848061144090615016565b95505080604001519550508080611456906150bc565b915050610ff5565b506068546001600160401b03600160c01b909104811690831611156114e35760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b60648201526084016109e5565b60685460009061150390600160801b90046001600160401b0316846150d5565b611516906001600160401b0316876150fd565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115eb903390309084906115d09190615114565b606554600160581b90046001600160a01b031692919061338c565b6115f36133f7565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff161561165d5760405162461bcd60e51b81526004016109e590614f98565b6072546001600160401b03878116600090815260676020526040902060010154429261169492600160c01b90910481169116614f02565b6001600160401b0316111561171d5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a4016109e5565b6103e861172a88886150d5565b6001600160401b0316106117a65760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e7920626174636865730000000060648201526084016109e5565b6117b6888888888888888861349b565b6117bf866139d9565b607254600160801b90046001600160401b0316600003611887576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561182457607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561186a57600080fd5b505af115801561187e573d6000803e3d6000fd5b50505050611938565b61188f6133f7565b607280546001600160401b03169060006118a883615016565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b038116158015906119b057506072546001600160401b03600160401b9091048116908216115b80156119cb57506072546001600160401b0390811690821611155b611a495760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a4016109e5565b606a546001600160a01b03163314611af357611a6481610c90565b611af35760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a4016109e5565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d9094529382902092909255607280546fffffffffffffffff000000000000000019169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611bb557600080fd5b505af1158015611bc9573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611c1691815260200190565b60405180910390a3505050565b606e805461093a90614e6f565b600054610100900460ff1615808015611c505750600054600160ff909116105b80611c6a5750303b158015611c6a575060005460ff166001145b611ccd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109e5565b6000805460ff191660011790558015611cf0576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611d6d6020860186614c06565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d9d6060860160408701614c06565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611dd860c0860160a08701614c06565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611e3560e0860160c08701614812565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611e6c6040860160208701614812565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611ea86080860160608701614812565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611ee460a0860160808701614ce8565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611f0c8482615179565b50606f611f198382615179565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611f4f613bbf565b8015611f95576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611fca5760405162461bcd60e51b81526004016109e590614ea9565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610adf565b6073546001600160a01b0316331461204e5760405162461bcd60e51b81526004016109e590614ea9565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190602001610adf565b6120a4613c33565b6120ae6000613c8d565b565b6033546001600160a01b0316331461231d576072546000906001600160401b03161561210157506072546001600160401b03908116600090815260716020526040902054600160401b90041661210f565b506069546001600160401b03165b80826001600160401b03161161218d5760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c72656164792076657269666965640000000060648201526084016109e5565b6068546001600160401b03600160401b9091048116908316118015906121cf57506001600160401b038083166000908152606760205260409020600101541615155b61225a5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a4016109e5565b6001600160401b0380831660009081526067602052604090206001015442916122889162093a809116614f02565b6001600160401b0316111561231b5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a4016109e5565b505b612325613cdf565b50565b60655460ff161561234b5760405162461bcd60e51b81526004016109e590614f98565b61235c898989898989898989613d4f565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f95613cdf565b6073546001600160a01b031633146123e15760405162461bcd60e51b81526004016109e590614ea9565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610adf90831515815260200190565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612481573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a5919061505f565b905060006124b1612657565b6068546001600160401b03600160401b82048116916124e191600160801b8204811691600160c01b9004166150d5565b6124eb9190614f02565b6124f591906150d5565b6001600160401b0316905061250a818361524e565b9250505090565b6073546001600160a01b0316331461253b5760405162461bcd60e51b81526004016109e590614ea9565b62093a806001600160401b03821611156125675760405162461bcd60e51b81526004016109e590614f2d565b60655460ff166125fc576072546001600160401b03600160801b9091048116908216106125fc5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f7765720060648201526084016109e5565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610adf565b6072546000906001600160401b03161561269457506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126ce5760405162461bcd60e51b81526004016109e590614ea9565b606e6126da8282615179565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610adf919061476b565b6073546001600160a01b031633146127345760405162461bcd60e51b81526004016109e590614ea9565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610adf565b60655460ff16156127ae5760405162461bcd60e51b81526004016109e590614f98565b606c54600160a01b900460ff1615156001146127dc5760405162461bcd60e51b81526004016109e590615262565b80518061283f5760405162461bcd60e51b815260206004820152603d60248201526000805160206155ae83398151915260448201527f3a204d75737420666f726365206174206c65617374203120626174636800000060648201526084016109e5565b6103e881106128b05760405162461bcd60e51b815260206004820152604360248201526000805160206155ae83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a4016109e5565b6068546001600160401b03600160c01b82048116916128d8918491600160801b9004166152cb565b11156129325760405162461bcd60e51b815260206004820152603560248201526000805160206155ae8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b60648201526084016109e5565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612b5e57600086828151811061297f5761297f615000565b60200260200101519050838061299490615016565b9450506000816000015180519060200120826020015183604001516040516020016129c19392919061503c565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612a605760405162461bcd60e51b815260206004820152604260248201526000805160206155ae83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109e5565b612a6b6001886150fd565b8303612b005742620697808360400151612a859190614f02565b6001600160401b03161115612b005760405162461bcd60e51b815260206004820152604760248201526000805160206155ae83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a4016109e5565b8151805160209182012081840151604051612b2393889392914291339101615078565b6040516020818303038152906040528051906020012093508580612b4690615016565b96505050508080612b56906150bc565b915050612963565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612c775760405162461bcd60e51b81526004016109e5906152e3565b6073546001600160a01b03163314612ca15760405162461bcd60e51b81526004016109e590614ea9565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612cf157600080fd5b505af1158015612d05573d6000803e3d6000fd5b505050506120ae6143ca565b606a546001600160a01b03163314612d3b5760405162461bcd60e51b81526004016109e590615340565b612d4c898989898989898989613d4f565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612d9757607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612ddd57600080fd5b505af1158015612df1573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612e795760405162461bcd60e51b81526004016109e590614f98565b606c54600160a01b900460ff161515600114612ea75760405162461bcd60e51b81526004016109e590615262565b6000612eb260745490565b905081811115612f175760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b60648201526084016109e5565b61ea60835110612f875760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b60648201526084016109e5565b606554612fa690600160581b90046001600160a01b031633308461338c565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015612ff0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613014919061505f565b60688054919250600160c01b9091046001600160401b031690601861303883615016565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016130799392919061503c565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361311d57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613178565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161316f9392919061539d565b60405180910390a25b50505050565b606a546001600160a01b031633146131a85760405162461bcd60e51b81526004016109e590615340565b6131b8888888888888888861349b565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561320357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561324957600080fd5b505af115801561325d573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611971565b6073546001600160a01b031633146132c85760405162461bcd60e51b81526004016109e590614ea9565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001610adf565b61331e613c33565b6001600160a01b0381166133835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e5565b61232581613c8d565b6040516001600160a01b03808516602483015283166044820152606481018290526131789085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614421565b6072546001600160401b03600160401b82048116911611156120ae5760725460009061343490600160401b90046001600160401b03166001614f02565b905061343f81610c90565b15612325576072546000906002906134619084906001600160401b03166150d5565b61346b91906153d0565b6134759083614f02565b905061348081610c90565b156134925761348e81611983565b5050565b61348e82611983565b6000806134a6612657565b90506001600160401b038a1615613621576072546001600160401b03908116908b1611156135625760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2070656e60448201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560648201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608482015260a4016109e5565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b909204161461361b5760405162461bcd60e51b815260206004820152604c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760648201526b040e6e8c2e8ca40c4c2e8c6d60a31b608482015260a4016109e5565b50613769565b6001600160401b0389166000908152606d60205260409020549150816136bb5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786064820152621a5cdd60ea1b608482015260a4016109e5565b806001600160401b0316896001600160401b031611156137695760405162461bcd60e51b815260206004820152605d60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060648201527f7468616e2063757272656e744c61737456657269666965644261746368000000608482015260a4016109e5565b806001600160401b0316886001600160401b0316116138165760405162461bcd60e51b815260206004820152605760248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2066696e60448201527f616c4e65774261746368206d75737420626520626967676572207468616e206360648201527f757272656e744c61737456657269666965644261746368000000000000000000608482015260a4016109e5565b60006138258a8a8a868b610aea565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161385a91906153f6565b602060405180830381855afa158015613877573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061389a919061505f565b6138a49190615412565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916138e8918b918b918b9190600401615426565b602060405180830381865afa158015613905573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392991906154a0565b6139885760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20494e5660448201526920a624a22fa82927a7a360b11b60648201526084016109e5565b6139cb33613996858d6150d5565b6001600160401b03166139a761242e565b6139b19190615114565b606554600160581b90046001600160a01b031691906144f8565b505050505050505050505050565b60006139e3612657565b9050816000806139f384846150d5565b6001600160401b031690505b836001600160401b0316836001600160401b031614613aa5576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613a4f9116426150fd565b1115613a8a576001810154613a7490600160401b90046001600160401b0316866150d5565b613a87906001600160401b0316846152cb565b92505b60010154600160401b90046001600160401b031692506139ff565b6000613ab183836150fd565b905082811015613b2b576000613ac782856150fd565b9050600c8111613ad75780613ada565b600c5b9050613ae7816003615114565b613af290600a6155a1565b606554613b0b908390600160481b900461ffff166155a1565b607454613b189190615114565b613b22919061524e565b60745550613bb7565b6000613b3784836150fd565b9050600c8111613b475780613b4a565b600c5b90506000613b59826003615114565b613b6490600a6155a1565b606554613b7d908490600160481b900461ffff166155a1565b607454613b8a9190615114565b613b94919061524e565b905080607454607454613ba79190615114565b613bb1919061524e565b60745550505b505050505050565b600054610100900460ff16613c2a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109e5565b6120ae33613c8d565b6033546001600160a01b031633146120ae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109e5565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d2f57600080fd5b505af1158015613d43573d6000803e3d6000fd5b505050506120ae614528565b60006001600160401b038a1615613eca576072546001600160401b03908116908b161115613e0e5760405162461bcd60e51b815260206004820152606c60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c4016109e5565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613ec45760405162461bcd60e51b815260206004820152606060248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a4016109e5565b5061401e565b506001600160401b0387166000908152606d602052604090205480613f6b5760405162461bcd60e51b815260206004820152605760248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a4016109e5565b6069546001600160401b03908116908916111561401e5760405162461bcd60e51b815260206004820152607160248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c4016109e5565b6072546001600160401b03908116908a161180159061404e5750896001600160401b0316896001600160401b0316115b801561406f57506072546001600160401b03600160401b9091048116908a16115b6140e75760405162461bcd60e51b815260206004820152604f60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a4016109e5565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146141a75760405162461bcd60e51b815260206004820152606a60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c4016109e5565b60006141b6898989858a610aea565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516141eb91906153f6565b602060405180830381855afa158015614208573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061422b919061505f565b6142359190615412565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614279918a918a918a9190600401615426565b602060405180830381865afa158015614296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ba91906154a0565b61431a5760405162461bcd60e51b815260206004820152603e60248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a20494e56414c49445f50524f4f46000060648201526084016109e5565b6001600160401b038b166000908152607160205260409020600201548790036139cb5760405162461bcd60e51b815260206004820152606260248201526000805160206155ce83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c4016109e5565b60655460ff166143ec5760405162461bcd60e51b81526004016109e5906152e3565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614476826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145839092919063ffffffff16565b8051909150156144f3578080602001905181019061449491906154a0565b6144f35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109e5565b505050565b6040516001600160a01b0383166024820152604481018290526144f390849063a9059cbb60e01b906064016133c0565b60655460ff161561454b5760405162461bcd60e51b81526004016109e590614f98565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614592848460008561459a565b949350505050565b6060824710156145fb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109e5565b600080866001600160a01b0316858760405161461791906153f6565b60006040518083038185875af1925050503d8060008114614654576040519150601f19603f3d011682016040523d82523d6000602084013e614659565b606091505b509150915061466a87838387614675565b979650505050505050565b606083156146e45782516000036146dd576001600160a01b0385163b6146dd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109e5565b5081614592565b61459283838151156146f95781518083602001fd5b8060405162461bcd60e51b81526004016109e5919061476b565b60005b8381101561472e578181015183820152602001614716565b838111156131785750506000910152565b60008151808452614757816020860160208601614713565b601f01601f19169290920160200192915050565b60208152600061477e602083018461473f565b9392505050565b60006020828403121561479757600080fd5b813561ffff8116811461477e57600080fd5b80356001600160401b03811681146147c057600080fd5b919050565b600080600080600060a086880312156147dd57600080fd5b6147e6866147a9565b94506147f4602087016147a9565b94979496505050506040830135926060810135926080909101359150565b60006020828403121561482457600080fd5b61477e826147a9565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156148655761486561482d565b60405290565b604051606081016001600160401b03811182821017156148655761486561482d565b604051601f8201601f191681016001600160401b03811182821017156148b5576148b561482d565b604052919050565b60006001600160401b038211156148d6576148d661482d565b5060051b60200190565b600082601f8301126148f157600080fd5b81356001600160401b0381111561490a5761490a61482d565b61491d601f8201601f191660200161488d565b81815284602083860101111561493257600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561496257600080fd5b82356001600160401b038082111561497957600080fd5b818501915085601f83011261498d57600080fd5b81356149a061499b826148bd565b61488d565b81815260059190911b830184019084810190888311156149bf57600080fd5b8585015b83811015614a58578035858111156149db5760008081fd5b86016080818c03601f19018113156149f35760008081fd5b6149fb614843565b8983013588811115614a0d5760008081fd5b614a1b8e8c838701016148e0565b8252506040808401358b8301526060614a358186016147a9565b82840152614a448486016147a9565b9083015250855250509186019186016149c3565b5098975050505050505050565b8060408101831015614a7657600080fd5b92915050565b8060808101831015614a7657600080fd5b6000806000806000806000806101a0898b031215614aaa57600080fd5b614ab3896147a9565b9750614ac160208a016147a9565b9650614acf60408a016147a9565b95506060890135945060808901359350614aec8a60a08b01614a65565b9250614afb8a60e08b01614a7c565b9150614b0b8a6101608b01614a65565b90509295985092959890939650565b6001600160a01b038116811461232557600080fd5b600080600080600080600080888a036101c0811215614b4d57600080fd5b8935614b5881614b1a565b985060208a0135614b6881614b1a565b975060408a0135614b7881614b1a565b965060608a0135614b8881614b1a565b955060e0607f1982011215614b9c57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614bc657600080fd5b614bd28c838d016148e0565b93506101a08b0135915080821115614be957600080fd5b50614bf68b828c016148e0565b9150509295985092959890939650565b600060208284031215614c1857600080fd5b813561477e81614b1a565b60008060008060008060008060006101c08a8c031215614c4257600080fd5b614c4b8a6147a9565b9850614c5960208b016147a9565b9750614c6760408b016147a9565b9650614c7560608b016147a9565b955060808a0135945060a08a01359350614c928b60c08c01614a65565b9250614ca28b6101008c01614a7c565b9150614cb28b6101808c01614a65565b90509295985092959850929598565b600060208284031215614cd357600080fd5b5035919050565b801515811461232557600080fd5b600060208284031215614cfa57600080fd5b813561477e81614cda565b600060208284031215614d1757600080fd5b81356001600160401b03811115614d2d57600080fd5b614592848285016148e0565b60006020808385031215614d4c57600080fd5b82356001600160401b0380821115614d6357600080fd5b818501915085601f830112614d7757600080fd5b8135614d8561499b826148bd565b81815260059190911b83018401908481019088831115614da457600080fd5b8585015b83811015614a5857803585811115614dc05760008081fd5b86016060818c03601f1901811315614dd85760008081fd5b614de061486b565b8983013588811115614df25760008081fd5b614e008e8c838701016148e0565b8252506040808401358b830152614e188385016147a9565b9082015285525050918601918601614da8565b60008060408385031215614e3e57600080fd5b82356001600160401b03811115614e5457600080fd5b614e60858286016148e0565b95602094909401359450505050565b600181811c90821680614e8357607f821691505b602082108103614ea357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614f2457614f24614eec565b01949350505050565b60208082526045908201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361503257615032614eec565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b60006020828403121561507157600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b6000600182016150ce576150ce614eec565b5060010190565b60006001600160401b03838116908316818110156150f5576150f5614eec565b039392505050565b60008282101561510f5761510f614eec565b500390565b600081600019048311821515161561512e5761512e614eec565b500290565b601f8211156144f357600081815260208120601f850160051c8101602086101561515a5750805b601f850160051c820191505b81811015613bb757828155600101615166565b81516001600160401b038111156151925761519261482d565b6151a6816151a08454614e6f565b84615133565b602080601f8311600181146151db57600084156151c35750858301515b600019600386901b1c1916600185901b178555613bb7565b600085815260208120601f198616915b8281101561520a578886015182559484019460019091019084016151eb565b50858210156152285787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b60008261525d5761525d615238565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b600082198211156152de576152de614eec565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b03831660208201526060604082018190526000906153c79083018461473f565b95945050505050565b60006001600160401b03808416806153ea576153ea615238565b92169190910492915050565b60008251615408818460208701614713565b9190910192915050565b60008261542157615421615238565b500690565b61012081016040808784376000838201818152879190815b600281101561545e5784848337908401828152928401929060010161543e565b5050828760c0870137610100850181815286935091505b6001811015615494578251825260209283019290910190600101615475565b50505095945050505050565b6000602082840312156154b257600080fd5b815161477e81614cda565b600181815b808511156154f85781600019048211156154de576154de614eec565b808516156154eb57918102915b93841c93908002906154c2565b509250929050565b60008261550f57506001614a76565b8161551c57506000614a76565b8160018114615532576002811461553c57615558565b6001915050614a76565b60ff84111561554d5761554d614eec565b50506001821b614a76565b5060208310610133831016604e8410600b841016171561557b575081810a614a76565b61558583836154bd565b806000190482111561559957615599614eec565b029392505050565b600061477e838361550056fe506f6c79676f6e5a6b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a6b45564d3a3a70726f76654e6f6e44657465726d696e6973a2646970667358221220567a1597b3ca9ddc0bc346518dc0d174c30614c8b7e5d0070e48dd60461b01fb64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5061561380620000216000396000f3fe608060405234801561001057600080fd5b50600436106103af5760003560e01c80638da5cb5b116101f4578063cfa8ed471161011a578063e7a7ed02116100ad578063f14916d61161007c578063f14916d6146108ec578063f2fde38b146108ff578063f851a44014610912578063f8b823e41461092557600080fd5b8063e7a7ed0214610899578063e8bf92ed146108b3578063eaeb077b146108c6578063edc41121146108d957600080fd5b8063d939b315116100e9578063d939b3151461085b578063dbc1697614610875578063e11f3f181461087d578063e217cfd61461089057600080fd5b8063cfa8ed4714610807578063d02103ca14610821578063d8d1091b14610834578063d8f54db01461084757600080fd5b8063ab9fc5ef11610192578063b6b0b09711610161578063b6b0b097146107bf578063c0ed84e0146107d9578063c89e42df146107e1578063cf136306146107f457600080fd5b8063ab9fc5ef14610713578063adc879e91461071d578063afd23cbe14610737578063b4d63f581461075f57600080fd5b80639eb831b9116101ce5780639eb831b9146106d85780639f0d039d146106e0578063a3c573eb146106e8578063aa58bad6146106fb57600080fd5b80638da5cb5b146106ac57806399f5634e146106bd5780639c9f3dfe146106c557600080fd5b80634a910e6a116102d9578063715018a611610277578063837a473811610246578063837a473814610607578063841b24d7146106755780638b48931e1461068f5780638c4a0af71461069957600080fd5b8063715018a6146105c65780637215541a146105ce57806375c508b3146105e15780637fcb3653146105f457600080fd5b806360943d6a116102b357806360943d6a1461056d5780636b8616ce146105805780636ff512cc146105a0578063704b6c02146105b357600080fd5b80634a910e6a146105325780635392c5e014610545578063542028d51461056557600080fd5b8063383b3be811610351578063456052671161032057806345605267146104d8578063458c0477146104f25780634834a343146105055780634a1a89a71461051857600080fd5b8063383b3be814610485578063394218e9146104985780633c158267146104ab578063423fa856146104be57600080fd5b806319d8ac611161038d57806319d8ac6114610404578063220d78991461042f57806329878983146104425780632d0889d31461046d57600080fd5b8063107bf28c146103b457806315064c96146103d25780631816b7e5146103ef575b600080fd5b6103bc61092e565b6040516103c9919061475b565b60405180910390f35b6065546103df9060ff1681565b60405190151581526020016103c9565b6104026103fd366004614775565b6109bc565b005b606854610417906001600160401b031681565b6040516001600160401b0390911681526020016103c9565b6103bc61043d3660046147b5565b610aeb565b606a54610455906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b610477620493e081565b6040519081526020016103c9565b6103df610493366004614802565b610c91565b6104026104a6366004614802565b610cd8565b6104026104b936600461493f565b610e27565b60685461041790600160401b90046001600160401b031681565b60685461041790600160801b90046001600160401b031681565b607254610417906001600160401b031681565b610402610513366004614a7d565b611629565b60725461041790600160401b90046001600160401b031681565b610402610540366004614802565b611972565b610477610553366004614802565b606d6020526000908152604090205481565b6103bc611c12565b61040261057b366004614b1f565b611c1f565b61047761058e366004614802565b60666020526000908152604090205481565b6104026105ae366004614bf6565b611f8f565b6104026105c1366004614bf6565b612013565b61040261208b565b6104026105dc366004614802565b61209f565b6104026105ef366004614c13565b612317565b606954610417906001600160401b031681565b61064a610615366004614cb1565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103c9565b60725461041790600160c01b90046001600160401b031681565b61041762093a8081565b6104026106a7366004614cd8565b6123a6565b6033546001600160a01b0316610455565b61047761241d565b6104026106d3366004614802565b612500565b610477600c81565b607454610477565b607054610455906001600160a01b031681565b6065546104179061010090046001600160401b031681565b6104176206978081565b606c5461041790600160a81b90046001600160401b031681565b60655461074c90600160481b900461ffff1681565b60405161ffff90911681526020016103c9565b61079a61076d366004614802565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103c9565b60655461045590600160581b90046001600160a01b031681565b610417612646565b6104026107ef366004614cf5565b612693565b610402610802366004614802565b6126f9565b60695461045590600160401b90046001600160a01b031681565b606c54610455906001600160a01b031681565b610402610842366004614d29565b61277a565b606c546103df90600160a01b900460ff1681565b60725461041790600160801b90046001600160401b031681565b610402612c44565b61040261088b366004614c13565b612d00565b6104176103e881565b60685461041790600160c01b90046001600160401b031681565b606b54610455906001600160a01b031681565b6104026108d4366004614e1b565b612e45565b6104026108e7366004614a7d565b61316e565b6104026108fa366004614bf6565b61328e565b61040261090d366004614bf6565b613306565b607354610455906001600160a01b031681565b61047760745481565b606f805461093b90614e5f565b80601f016020809104026020016040519081016040528092919081815260200182805461096790614e5f565b80156109b45780601f10610989576101008083540402835291602001916109b4565b820191906000526020600020905b81548152906001019060200180831161099757829003601f168201915b505050505081565b6073546001600160a01b031633146109ef5760405162461bcd60e51b81526004016109e690614e99565b60405180910390fd5b6103e88161ffff16118015610a0957506104008161ffff16105b610a8e5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a4016109e6565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610b1d57508115155b610b91576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e6565b80610c06576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e6565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610cc792600160801b90920481169116614ef2565b6001600160401b0316111592915050565b6073546001600160a01b03163314610d025760405162461bcd60e51b81526004016109e690614e99565b62093a806001600160401b0382161115610d2e5760405162461bcd60e51b81526004016109e690614f1d565b60655460ff16610dd1576072546001600160401b03600160c01b909104811690821610610dd15760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109e6565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610ae0565b60655460ff1615610e4a5760405162461bcd60e51b81526004016109e690614f88565b606954600160401b90046001600160a01b03163314610ed15760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e63657200000000000060648201526084016109e6565b805180610f465760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e6365203120626174636800000060648201526084016109e6565b6103e88110610fbf576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e79206261746368657360648201526084016109e6565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561144d57600087828151811061101257611012614ff0565b60200260200101519050600081606001516001600160401b031611156111cb578361103c81615006565b9450506000816000015180519060200120826020015183606001516040516020016110699392919061502c565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461110f5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d6174636800000060648201526084016109e6565b81606001516001600160401b031682604001516001600160401b031610156111c55760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a4016109e6565b50611340565b602081015115806112545750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b36329161120e9160040190815260200190565b6020604051808303816000875af115801561122d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611251919061504f565b15155b6112c65760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d75737420657869737400000000000060648201526084016109e6565b805151620493e0116113405760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016109e6565b856001600160401b031681604001516001600160401b03161015801561137357504281604001516001600160401b031611155b6113e55760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e676500000060648201526084016109e6565b8051805160209182012081830151604080850151905161140c948894939291339101615068565b604051602081830303815290604052805190602001209250848061142f90615006565b95505080604001519550508080611445906150ac565b915050610ff6565b506068546001600160401b03600160c01b909104811690831611156114d25760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b60648201526084016109e6565b6068546000906114f290600160801b90046001600160401b0316846150c5565b611505906001600160401b0316876150ed565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115da903390309084906115bf9190615104565b606554600160581b90046001600160a01b031692919061337c565b6115e26133e7565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff161561164c5760405162461bcd60e51b81526004016109e690614f88565b6072546001600160401b03878116600090815260676020526040902060010154429261168392600160c01b90910481169116614ef2565b6001600160401b0316111561170c5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a4016109e6565b6103e861171988886150c5565b6001600160401b0316106117955760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e7920626174636865730000000060648201526084016109e6565b6117a5888888888888888861348b565b6117ae866139c9565b607254600160801b90046001600160401b0316600003611876576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561181357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561185957600080fd5b505af115801561186d573d6000803e3d6000fd5b50505050611927565b61187e6133e7565b607280546001600160401b031690600061189783615006565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b0381161580159061199f57506072546001600160401b03600160401b9091048116908216115b80156119ba57506072546001600160401b0390811690821611155b611a385760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a4016109e6565b606a546001600160a01b03163314611ae257611a5381610c91565b611ae25760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a4016109e6565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d9094529382902092909255607280546fffffffffffffffff000000000000000019169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611ba457600080fd5b505af1158015611bb8573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611c0591815260200190565b60405180910390a3505050565b606e805461093b90614e5f565b600054610100900460ff1615808015611c3f5750600054600160ff909116105b80611c595750303b158015611c59575060005460ff166001145b611cbc5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109e6565b6000805460ff191660011790558015611cdf576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611d5c6020860186614bf6565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d8c6060860160408701614bf6565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611dc760c0860160a08701614bf6565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611e2460e0860160c08701614802565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611e5b6040860160208701614802565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611e976080860160608701614802565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611ed360a0860160808701614cd8565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611efb8482615169565b50606f611f088382615169565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611f3e613baf565b8015611f84576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611fb95760405162461bcd60e51b81526004016109e690614e99565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610ae0565b6073546001600160a01b0316331461203d5760405162461bcd60e51b81526004016109e690614e99565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190602001610ae0565b612093613c23565b61209d6000613c7d565b565b6033546001600160a01b0316331461230c576072546000906001600160401b0316156120f057506072546001600160401b03908116600090815260716020526040902054600160401b9004166120fe565b506069546001600160401b03165b80826001600160401b03161161217c5760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c72656164792076657269666965640000000060648201526084016109e6565b6068546001600160401b03600160401b9091048116908316118015906121be57506001600160401b038083166000908152606760205260409020600101541615155b6122495760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a4016109e6565b6001600160401b0380831660009081526067602052604090206001015442916122779162093a809116614ef2565b6001600160401b0316111561230a5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a4016109e6565b505b612314613ccf565b50565b60655460ff161561233a5760405162461bcd60e51b81526004016109e690614f88565b61234b898989898989898989613d3f565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f84613ccf565b6073546001600160a01b031633146123d05760405162461bcd60e51b81526004016109e690614e99565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610ae090831515815260200190565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612470573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612494919061504f565b905060006124a0612646565b6068546001600160401b03600160401b82048116916124d091600160801b8204811691600160c01b9004166150c5565b6124da9190614ef2565b6124e491906150c5565b6001600160401b031690506124f9818361523e565b9250505090565b6073546001600160a01b0316331461252a5760405162461bcd60e51b81526004016109e690614e99565b62093a806001600160401b03821611156125565760405162461bcd60e51b81526004016109e690614f1d565b60655460ff166125eb576072546001600160401b03600160801b9091048116908216106125eb5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f7765720060648201526084016109e6565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610ae0565b6072546000906001600160401b03161561268357506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126bd5760405162461bcd60e51b81526004016109e690614e99565b606e6126c98282615169565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610ae0919061475b565b6073546001600160a01b031633146127235760405162461bcd60e51b81526004016109e690614e99565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610ae0565b60655460ff161561279d5760405162461bcd60e51b81526004016109e690614f88565b606c54600160a01b900460ff1615156001146127cb5760405162461bcd60e51b81526004016109e690615252565b80518061282e5760405162461bcd60e51b815260206004820152603d602482015260008051602061559e83398151915260448201527f3a204d75737420666f726365206174206c65617374203120626174636800000060648201526084016109e6565b6103e8811061289f5760405162461bcd60e51b8152602060048201526043602482015260008051602061559e83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a4016109e6565b6068546001600160401b03600160c01b82048116916128c7918491600160801b9004166152bb565b11156129215760405162461bcd60e51b8152602060048201526035602482015260008051602061559e8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b60648201526084016109e6565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612b4d57600086828151811061296e5761296e614ff0565b60200260200101519050838061298390615006565b9450506000816000015180519060200120826020015183604001516040516020016129b09392919061502c565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612a4f5760405162461bcd60e51b8152602060048201526042602482015260008051602061559e83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109e6565b612a5a6001886150ed565b8303612aef5742620697808360400151612a749190614ef2565b6001600160401b03161115612aef5760405162461bcd60e51b8152602060048201526047602482015260008051602061559e83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a4016109e6565b8151805160209182012081840151604051612b1293889392914291339101615068565b6040516020818303038152906040528051906020012093508580612b3590615006565b96505050508080612b45906150ac565b915050612952565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612c665760405162461bcd60e51b81526004016109e6906152d3565b6073546001600160a01b03163314612c905760405162461bcd60e51b81526004016109e690614e99565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612ce057600080fd5b505af1158015612cf4573d6000803e3d6000fd5b5050505061209d6143ba565b606a546001600160a01b03163314612d2a5760405162461bcd60e51b81526004016109e690615330565b612d3b898989898989898989613d3f565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612d8657607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612dcc57600080fd5b505af1158015612de0573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612e685760405162461bcd60e51b81526004016109e690614f88565b606c54600160a01b900460ff161515600114612e965760405162461bcd60e51b81526004016109e690615252565b6000612ea160745490565b905081811115612f065760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b60648201526084016109e6565b620493e0835110612f775760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b60648201526084016109e6565b606554612f9690600160581b90046001600160a01b031633308461337c565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015612fe0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613004919061504f565b60688054919250600160c01b9091046001600160401b031690601861302883615006565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016130699392919061502c565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361310d57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613168565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161315f9392919061538d565b60405180910390a25b50505050565b606a546001600160a01b031633146131985760405162461bcd60e51b81526004016109e690615330565b6131a8888888888888888861348b565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d6020526040902085905560725416156131f357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561323957600080fd5b505af115801561324d573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611960565b6073546001600160a01b031633146132b85760405162461bcd60e51b81526004016109e690614e99565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001610ae0565b61330e613c23565b6001600160a01b0381166133735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e6565b61231481613c7d565b6040516001600160a01b03808516602483015283166044820152606481018290526131689085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614411565b6072546001600160401b03600160401b820481169116111561209d5760725460009061342490600160401b90046001600160401b03166001614ef2565b905061342f81610c91565b15612314576072546000906002906134519084906001600160401b03166150c5565b61345b91906153c0565b6134659083614ef2565b905061347081610c91565b156134825761347e81611972565b5050565b61347e82611972565b600080613496612646565b90506001600160401b038a1615613611576072546001600160401b03908116908b1611156135525760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2070656e60448201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560648201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608482015260a4016109e6565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b909204161461360b5760405162461bcd60e51b815260206004820152604c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760648201526b040e6e8c2e8ca40c4c2e8c6d60a31b608482015260a4016109e6565b50613759565b6001600160401b0389166000908152606d60205260409020549150816136ab5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786064820152621a5cdd60ea1b608482015260a4016109e6565b806001600160401b0316896001600160401b031611156137595760405162461bcd60e51b815260206004820152605d60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060648201527f7468616e2063757272656e744c61737456657269666965644261746368000000608482015260a4016109e6565b806001600160401b0316886001600160401b0316116138065760405162461bcd60e51b815260206004820152605760248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2066696e60448201527f616c4e65774261746368206d75737420626520626967676572207468616e206360648201527f757272656e744c61737456657269666965644261746368000000000000000000608482015260a4016109e6565b60006138158a8a8a868b610aeb565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161384a91906153e6565b602060405180830381855afa158015613867573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061388a919061504f565b6138949190615402565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916138d8918b918b918b9190600401615416565b602060405180830381865afa1580156138f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139199190615490565b6139785760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e7660448201526930b634b210383937b7b360b11b60648201526084016109e6565b6139bb33613986858d6150c5565b6001600160401b031661399761241d565b6139a19190615104565b606554600160581b90046001600160a01b031691906144e8565b505050505050505050505050565b60006139d3612646565b9050816000806139e384846150c5565b6001600160401b031690505b836001600160401b0316836001600160401b031614613a95576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613a3f9116426150ed565b1115613a7a576001810154613a6490600160401b90046001600160401b0316866150c5565b613a77906001600160401b0316846152bb565b92505b60010154600160401b90046001600160401b031692506139ef565b6000613aa183836150ed565b905082811015613b1b576000613ab782856150ed565b9050600c8111613ac75780613aca565b600c5b9050613ad7816003615104565b613ae290600a615591565b606554613afb908390600160481b900461ffff16615591565b607454613b089190615104565b613b12919061523e565b60745550613ba7565b6000613b2784836150ed565b9050600c8111613b375780613b3a565b600c5b90506000613b49826003615104565b613b5490600a615591565b606554613b6d908490600160481b900461ffff16615591565b607454613b7a9190615104565b613b84919061523e565b905080607454607454613b979190615104565b613ba1919061523e565b60745550505b505050505050565b600054610100900460ff16613c1a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109e6565b61209d33613c7d565b6033546001600160a01b0316331461209d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109e6565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d1f57600080fd5b505af1158015613d33573d6000803e3d6000fd5b5050505061209d614518565b60006001600160401b038a1615613eba576072546001600160401b03908116908b161115613dfe5760405162461bcd60e51b815260206004820152606c60248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c4016109e6565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613eb45760405162461bcd60e51b815260206004820152606060248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a4016109e6565b5061400e565b506001600160401b0387166000908152606d602052604090205480613f5b5760405162461bcd60e51b815260206004820152605760248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a4016109e6565b6069546001600160401b03908116908916111561400e5760405162461bcd60e51b815260206004820152607160248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c4016109e6565b6072546001600160401b03908116908a161180159061403e5750896001600160401b0316896001600160401b0316115b801561405f57506072546001600160401b03600160401b9091048116908a16115b6140d75760405162461bcd60e51b815260206004820152604f60248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a4016109e6565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146141975760405162461bcd60e51b815260206004820152606a60248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c4016109e6565b60006141a6898989858a610aeb565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516141db91906153e6565b602060405180830381855afa1580156141f8573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061421b919061504f565b6142259190615402565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614269918a918a918a9190600401615416565b602060405180830381865afa158015614286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142aa9190615490565b61430a5760405162461bcd60e51b815260206004820152603e60248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a20696e76616c69642070726f6f66000060648201526084016109e6565b6001600160401b038b166000908152607160205260409020600201548790036139bb5760405162461bcd60e51b815260206004820152606260248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c4016109e6565b60655460ff166143dc5760405162461bcd60e51b81526004016109e6906152d3565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614466826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145739092919063ffffffff16565b8051909150156144e357808060200190518101906144849190615490565b6144e35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109e6565b505050565b6040516001600160a01b0383166024820152604481018290526144e390849063a9059cbb60e01b906064016133b0565b60655460ff161561453b5760405162461bcd60e51b81526004016109e690614f88565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614582848460008561458a565b949350505050565b6060824710156145eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109e6565b600080866001600160a01b0316858760405161460791906153e6565b60006040518083038185875af1925050503d8060008114614644576040519150601f19603f3d011682016040523d82523d6000602084013e614649565b606091505b509150915061465a87838387614665565b979650505050505050565b606083156146d45782516000036146cd576001600160a01b0385163b6146cd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109e6565b5081614582565b61458283838151156146e95781518083602001fd5b8060405162461bcd60e51b81526004016109e6919061475b565b60005b8381101561471e578181015183820152602001614706565b838111156131685750506000910152565b60008151808452614747816020860160208601614703565b601f01601f19169290920160200192915050565b60208152600061476e602083018461472f565b9392505050565b60006020828403121561478757600080fd5b813561ffff8116811461476e57600080fd5b80356001600160401b03811681146147b057600080fd5b919050565b600080600080600060a086880312156147cd57600080fd5b6147d686614799565b94506147e460208701614799565b94979496505050506040830135926060810135926080909101359150565b60006020828403121561481457600080fd5b61476e82614799565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156148555761485561481d565b60405290565b604051606081016001600160401b03811182821017156148555761485561481d565b604051601f8201601f191681016001600160401b03811182821017156148a5576148a561481d565b604052919050565b60006001600160401b038211156148c6576148c661481d565b5060051b60200190565b600082601f8301126148e157600080fd5b81356001600160401b038111156148fa576148fa61481d565b61490d601f8201601f191660200161487d565b81815284602083860101111561492257600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561495257600080fd5b82356001600160401b038082111561496957600080fd5b818501915085601f83011261497d57600080fd5b813561499061498b826148ad565b61487d565b81815260059190911b830184019084810190888311156149af57600080fd5b8585015b83811015614a48578035858111156149cb5760008081fd5b86016080818c03601f19018113156149e35760008081fd5b6149eb614833565b89830135888111156149fd5760008081fd5b614a0b8e8c838701016148d0565b8252506040808401358b8301526060614a25818601614799565b82840152614a34848601614799565b9083015250855250509186019186016149b3565b5098975050505050505050565b8060408101831015614a6657600080fd5b92915050565b8060808101831015614a6657600080fd5b6000806000806000806000806101a0898b031215614a9a57600080fd5b614aa389614799565b9750614ab160208a01614799565b9650614abf60408a01614799565b95506060890135945060808901359350614adc8a60a08b01614a55565b9250614aeb8a60e08b01614a6c565b9150614afb8a6101608b01614a55565b90509295985092959890939650565b6001600160a01b038116811461231457600080fd5b600080600080600080600080888a036101c0811215614b3d57600080fd5b8935614b4881614b0a565b985060208a0135614b5881614b0a565b975060408a0135614b6881614b0a565b965060608a0135614b7881614b0a565b955060e0607f1982011215614b8c57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614bb657600080fd5b614bc28c838d016148d0565b93506101a08b0135915080821115614bd957600080fd5b50614be68b828c016148d0565b9150509295985092959890939650565b600060208284031215614c0857600080fd5b813561476e81614b0a565b60008060008060008060008060006101c08a8c031215614c3257600080fd5b614c3b8a614799565b9850614c4960208b01614799565b9750614c5760408b01614799565b9650614c6560608b01614799565b955060808a0135945060a08a01359350614c828b60c08c01614a55565b9250614c928b6101008c01614a6c565b9150614ca28b6101808c01614a55565b90509295985092959850929598565b600060208284031215614cc357600080fd5b5035919050565b801515811461231457600080fd5b600060208284031215614cea57600080fd5b813561476e81614cca565b600060208284031215614d0757600080fd5b81356001600160401b03811115614d1d57600080fd5b614582848285016148d0565b60006020808385031215614d3c57600080fd5b82356001600160401b0380821115614d5357600080fd5b818501915085601f830112614d6757600080fd5b8135614d7561498b826148ad565b81815260059190911b83018401908481019088831115614d9457600080fd5b8585015b83811015614a4857803585811115614db05760008081fd5b86016060818c03601f1901811315614dc85760008081fd5b614dd061485b565b8983013588811115614de25760008081fd5b614df08e8c838701016148d0565b8252506040808401358b830152614e08838501614799565b9082015285525050918601918601614d98565b60008060408385031215614e2e57600080fd5b82356001600160401b03811115614e4457600080fd5b614e50858286016148d0565b95602094909401359450505050565b600181811c90821680614e7357607f821691505b602082108103614e9357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614f1457614f14614edc565b01949350505050565b60208082526045908201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361502257615022614edc565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b60006020828403121561506157600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b6000600182016150be576150be614edc565b5060010190565b60006001600160401b03838116908316818110156150e5576150e5614edc565b039392505050565b6000828210156150ff576150ff614edc565b500390565b600081600019048311821515161561511e5761511e614edc565b500290565b601f8211156144e357600081815260208120601f850160051c8101602086101561514a5750805b601f850160051c820191505b81811015613ba757828155600101615156565b81516001600160401b038111156151825761518261481d565b615196816151908454614e5f565b84615123565b602080601f8311600181146151cb57600084156151b35750858301515b600019600386901b1c1916600185901b178555613ba7565b600085815260208120601f198616915b828110156151fa578886015182559484019460019091019084016151db565b50858210156152185787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b60008261524d5761524d615228565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b600082198211156152ce576152ce614edc565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b03831660208201526060604082018190526000906153b79083018461472f565b95945050505050565b60006001600160401b03808416806153da576153da615228565b92169190910492915050565b600082516153f8818460208701614703565b9190910192915050565b60008261541157615411615228565b500690565b61012081016040808784376000838201818152879190815b600281101561544e5784848337908401828152928401929060010161542e565b5050828760c0870137610100850181815286935091505b6001811015615484578251825260209283019290910190600101615465565b50505095945050505050565b6000602082840312156154a257600080fd5b815161476e81614cca565b600181815b808511156154e85781600019048211156154ce576154ce614edc565b808516156154db57918102915b93841c93908002906154b2565b509250929050565b6000826154ff57506001614a66565b8161550c57506000614a66565b8160018114615522576002811461552c57615548565b6001915050614a66565b60ff84111561553d5761553d614edc565b50506001821b614a66565b5060208310610133831016604e8410600b841016171561556b575081810a614a66565b61557583836154ad565b806000190482111561558957615589614edc565b029392505050565b600061476e83836154f056fe506f6c79676f6e5a6b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a6b45564d3a3a70726f76654e6f6e44657465726d696e6973a26469706673582212204c3a0cfa919696b298adf6c27a097f1b74001bdc0f6a0b750405825e747a7de964736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103af5760003560e01c80638da5cb5b116101f4578063cfa8ed471161011a578063e7a7ed02116100ad578063f14916d61161007c578063f14916d6146108ec578063f2fde38b146108ff578063f851a44014610912578063f8b823e41461092557600080fd5b8063e7a7ed0214610899578063e8bf92ed146108b3578063eaeb077b146108c6578063edc41121146108d957600080fd5b8063d939b315116100e9578063d939b3151461085b578063dbc1697614610875578063e11f3f181461087d578063e217cfd61461089057600080fd5b8063cfa8ed4714610807578063d02103ca14610821578063d8d1091b14610834578063d8f54db01461084757600080fd5b8063ab9fc5ef11610192578063b6b0b09711610161578063b6b0b097146107bf578063c0ed84e0146107d9578063c89e42df146107e1578063cf136306146107f457600080fd5b8063ab9fc5ef14610713578063adc879e91461071d578063afd23cbe14610737578063b4d63f581461075f57600080fd5b80639eb831b9116101ce5780639eb831b9146106d85780639f0d039d146106e0578063a3c573eb146106e8578063aa58bad6146106fb57600080fd5b80638da5cb5b146106ac57806399f5634e146106bd5780639c9f3dfe146106c557600080fd5b80634a910e6a116102d9578063715018a611610277578063837a473811610246578063837a473814610607578063841b24d7146106755780638b48931e1461068f5780638c4a0af71461069957600080fd5b8063715018a6146105c65780637215541a146105ce57806375c508b3146105e15780637fcb3653146105f457600080fd5b806360943d6a116102b357806360943d6a1461056d5780636b8616ce146105805780636ff512cc146105a0578063704b6c02146105b357600080fd5b80634a910e6a146105325780635392c5e014610545578063542028d51461056557600080fd5b8063383b3be811610351578063456052671161032057806345605267146104d8578063458c0477146104f25780634834a343146105055780634a1a89a71461051857600080fd5b8063383b3be814610485578063394218e9146104985780633c158267146104ab578063423fa856146104be57600080fd5b806319d8ac611161038d57806319d8ac6114610404578063220d78991461042f57806329878983146104425780632d0889d31461046d57600080fd5b8063107bf28c146103b457806315064c96146103d25780631816b7e5146103ef575b600080fd5b6103bc61092e565b6040516103c9919061475b565b60405180910390f35b6065546103df9060ff1681565b60405190151581526020016103c9565b6104026103fd366004614775565b6109bc565b005b606854610417906001600160401b031681565b6040516001600160401b0390911681526020016103c9565b6103bc61043d3660046147b5565b610aeb565b606a54610455906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b610477620493e081565b6040519081526020016103c9565b6103df610493366004614802565b610c91565b6104026104a6366004614802565b610cd8565b6104026104b936600461493f565b610e27565b60685461041790600160401b90046001600160401b031681565b60685461041790600160801b90046001600160401b031681565b607254610417906001600160401b031681565b610402610513366004614a7d565b611629565b60725461041790600160401b90046001600160401b031681565b610402610540366004614802565b611972565b610477610553366004614802565b606d6020526000908152604090205481565b6103bc611c12565b61040261057b366004614b1f565b611c1f565b61047761058e366004614802565b60666020526000908152604090205481565b6104026105ae366004614bf6565b611f8f565b6104026105c1366004614bf6565b612013565b61040261208b565b6104026105dc366004614802565b61209f565b6104026105ef366004614c13565b612317565b606954610417906001600160401b031681565b61064a610615366004614cb1565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103c9565b60725461041790600160c01b90046001600160401b031681565b61041762093a8081565b6104026106a7366004614cd8565b6123a6565b6033546001600160a01b0316610455565b61047761241d565b6104026106d3366004614802565b612500565b610477600c81565b607454610477565b607054610455906001600160a01b031681565b6065546104179061010090046001600160401b031681565b6104176206978081565b606c5461041790600160a81b90046001600160401b031681565b60655461074c90600160481b900461ffff1681565b60405161ffff90911681526020016103c9565b61079a61076d366004614802565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103c9565b60655461045590600160581b90046001600160a01b031681565b610417612646565b6104026107ef366004614cf5565b612693565b610402610802366004614802565b6126f9565b60695461045590600160401b90046001600160a01b031681565b606c54610455906001600160a01b031681565b610402610842366004614d29565b61277a565b606c546103df90600160a01b900460ff1681565b60725461041790600160801b90046001600160401b031681565b610402612c44565b61040261088b366004614c13565b612d00565b6104176103e881565b60685461041790600160c01b90046001600160401b031681565b606b54610455906001600160a01b031681565b6104026108d4366004614e1b565b612e45565b6104026108e7366004614a7d565b61316e565b6104026108fa366004614bf6565b61328e565b61040261090d366004614bf6565b613306565b607354610455906001600160a01b031681565b61047760745481565b606f805461093b90614e5f565b80601f016020809104026020016040519081016040528092919081815260200182805461096790614e5f565b80156109b45780601f10610989576101008083540402835291602001916109b4565b820191906000526020600020905b81548152906001019060200180831161099757829003601f168201915b505050505081565b6073546001600160a01b031633146109ef5760405162461bcd60e51b81526004016109e690614e99565b60405180910390fd5b6103e88161ffff16118015610a0957506104008161ffff16105b610a8e5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a4016109e6565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610b1d57508115155b610b91576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e6565b80610c06576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e6565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610cc792600160801b90920481169116614ef2565b6001600160401b0316111592915050565b6073546001600160a01b03163314610d025760405162461bcd60e51b81526004016109e690614e99565b62093a806001600160401b0382161115610d2e5760405162461bcd60e51b81526004016109e690614f1d565b60655460ff16610dd1576072546001600160401b03600160c01b909104811690821610610dd15760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109e6565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610ae0565b60655460ff1615610e4a5760405162461bcd60e51b81526004016109e690614f88565b606954600160401b90046001600160a01b03163314610ed15760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e63657200000000000060648201526084016109e6565b805180610f465760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e6365203120626174636800000060648201526084016109e6565b6103e88110610fbf576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e79206261746368657360648201526084016109e6565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561144d57600087828151811061101257611012614ff0565b60200260200101519050600081606001516001600160401b031611156111cb578361103c81615006565b9450506000816000015180519060200120826020015183606001516040516020016110699392919061502c565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461110f5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d6174636800000060648201526084016109e6565b81606001516001600160401b031682604001516001600160401b031610156111c55760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a4016109e6565b50611340565b602081015115806112545750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b36329161120e9160040190815260200190565b6020604051808303816000875af115801561122d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611251919061504f565b15155b6112c65760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d75737420657869737400000000000060648201526084016109e6565b805151620493e0116113405760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016109e6565b856001600160401b031681604001516001600160401b03161015801561137357504281604001516001600160401b031611155b6113e55760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e676500000060648201526084016109e6565b8051805160209182012081830151604080850151905161140c948894939291339101615068565b604051602081830303815290604052805190602001209250848061142f90615006565b95505080604001519550508080611445906150ac565b915050610ff6565b506068546001600160401b03600160c01b909104811690831611156114d25760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b60648201526084016109e6565b6068546000906114f290600160801b90046001600160401b0316846150c5565b611505906001600160401b0316876150ed565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115da903390309084906115bf9190615104565b606554600160581b90046001600160a01b031692919061337c565b6115e26133e7565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff161561164c5760405162461bcd60e51b81526004016109e690614f88565b6072546001600160401b03878116600090815260676020526040902060010154429261168392600160c01b90910481169116614ef2565b6001600160401b0316111561170c5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a4016109e6565b6103e861171988886150c5565b6001600160401b0316106117955760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e7920626174636865730000000060648201526084016109e6565b6117a5888888888888888861348b565b6117ae866139c9565b607254600160801b90046001600160401b0316600003611876576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561181357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561185957600080fd5b505af115801561186d573d6000803e3d6000fd5b50505050611927565b61187e6133e7565b607280546001600160401b031690600061189783615006565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b0381161580159061199f57506072546001600160401b03600160401b9091048116908216115b80156119ba57506072546001600160401b0390811690821611155b611a385760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a4016109e6565b606a546001600160a01b03163314611ae257611a5381610c91565b611ae25760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a4016109e6565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d9094529382902092909255607280546fffffffffffffffff000000000000000019169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611ba457600080fd5b505af1158015611bb8573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611c0591815260200190565b60405180910390a3505050565b606e805461093b90614e5f565b600054610100900460ff1615808015611c3f5750600054600160ff909116105b80611c595750303b158015611c59575060005460ff166001145b611cbc5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109e6565b6000805460ff191660011790558015611cdf576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611d5c6020860186614bf6565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d8c6060860160408701614bf6565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611dc760c0860160a08701614bf6565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611e2460e0860160c08701614802565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611e5b6040860160208701614802565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611e976080860160608701614802565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611ed360a0860160808701614cd8565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611efb8482615169565b50606f611f088382615169565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611f3e613baf565b8015611f84576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611fb95760405162461bcd60e51b81526004016109e690614e99565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610ae0565b6073546001600160a01b0316331461203d5760405162461bcd60e51b81526004016109e690614e99565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190602001610ae0565b612093613c23565b61209d6000613c7d565b565b6033546001600160a01b0316331461230c576072546000906001600160401b0316156120f057506072546001600160401b03908116600090815260716020526040902054600160401b9004166120fe565b506069546001600160401b03165b80826001600160401b03161161217c5760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c72656164792076657269666965640000000060648201526084016109e6565b6068546001600160401b03600160401b9091048116908316118015906121be57506001600160401b038083166000908152606760205260409020600101541615155b6122495760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a4016109e6565b6001600160401b0380831660009081526067602052604090206001015442916122779162093a809116614ef2565b6001600160401b0316111561230a5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a4016109e6565b505b612314613ccf565b50565b60655460ff161561233a5760405162461bcd60e51b81526004016109e690614f88565b61234b898989898989898989613d3f565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f84613ccf565b6073546001600160a01b031633146123d05760405162461bcd60e51b81526004016109e690614e99565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610ae090831515815260200190565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612470573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612494919061504f565b905060006124a0612646565b6068546001600160401b03600160401b82048116916124d091600160801b8204811691600160c01b9004166150c5565b6124da9190614ef2565b6124e491906150c5565b6001600160401b031690506124f9818361523e565b9250505090565b6073546001600160a01b0316331461252a5760405162461bcd60e51b81526004016109e690614e99565b62093a806001600160401b03821611156125565760405162461bcd60e51b81526004016109e690614f1d565b60655460ff166125eb576072546001600160401b03600160801b9091048116908216106125eb5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f7765720060648201526084016109e6565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610ae0565b6072546000906001600160401b03161561268357506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126bd5760405162461bcd60e51b81526004016109e690614e99565b606e6126c98282615169565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610ae0919061475b565b6073546001600160a01b031633146127235760405162461bcd60e51b81526004016109e690614e99565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610ae0565b60655460ff161561279d5760405162461bcd60e51b81526004016109e690614f88565b606c54600160a01b900460ff1615156001146127cb5760405162461bcd60e51b81526004016109e690615252565b80518061282e5760405162461bcd60e51b815260206004820152603d602482015260008051602061559e83398151915260448201527f3a204d75737420666f726365206174206c65617374203120626174636800000060648201526084016109e6565b6103e8811061289f5760405162461bcd60e51b8152602060048201526043602482015260008051602061559e83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a4016109e6565b6068546001600160401b03600160c01b82048116916128c7918491600160801b9004166152bb565b11156129215760405162461bcd60e51b8152602060048201526035602482015260008051602061559e8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b60648201526084016109e6565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612b4d57600086828151811061296e5761296e614ff0565b60200260200101519050838061298390615006565b9450506000816000015180519060200120826020015183604001516040516020016129b09392919061502c565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612a4f5760405162461bcd60e51b8152602060048201526042602482015260008051602061559e83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109e6565b612a5a6001886150ed565b8303612aef5742620697808360400151612a749190614ef2565b6001600160401b03161115612aef5760405162461bcd60e51b8152602060048201526047602482015260008051602061559e83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a4016109e6565b8151805160209182012081840151604051612b1293889392914291339101615068565b6040516020818303038152906040528051906020012093508580612b3590615006565b96505050508080612b45906150ac565b915050612952565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612c665760405162461bcd60e51b81526004016109e6906152d3565b6073546001600160a01b03163314612c905760405162461bcd60e51b81526004016109e690614e99565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612ce057600080fd5b505af1158015612cf4573d6000803e3d6000fd5b5050505061209d6143ba565b606a546001600160a01b03163314612d2a5760405162461bcd60e51b81526004016109e690615330565b612d3b898989898989898989613d3f565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612d8657607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612dcc57600080fd5b505af1158015612de0573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612e685760405162461bcd60e51b81526004016109e690614f88565b606c54600160a01b900460ff161515600114612e965760405162461bcd60e51b81526004016109e690615252565b6000612ea160745490565b905081811115612f065760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b60648201526084016109e6565b620493e0835110612f775760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b60648201526084016109e6565b606554612f9690600160581b90046001600160a01b031633308461337c565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015612fe0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613004919061504f565b60688054919250600160c01b9091046001600160401b031690601861302883615006565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016130699392919061502c565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361310d57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613168565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161315f9392919061538d565b60405180910390a25b50505050565b606a546001600160a01b031633146131985760405162461bcd60e51b81526004016109e690615330565b6131a8888888888888888861348b565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d6020526040902085905560725416156131f357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561323957600080fd5b505af115801561324d573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611960565b6073546001600160a01b031633146132b85760405162461bcd60e51b81526004016109e690614e99565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001610ae0565b61330e613c23565b6001600160a01b0381166133735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e6565b61231481613c7d565b6040516001600160a01b03808516602483015283166044820152606481018290526131689085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614411565b6072546001600160401b03600160401b820481169116111561209d5760725460009061342490600160401b90046001600160401b03166001614ef2565b905061342f81610c91565b15612314576072546000906002906134519084906001600160401b03166150c5565b61345b91906153c0565b6134659083614ef2565b905061347081610c91565b156134825761347e81611972565b5050565b61347e82611972565b600080613496612646565b90506001600160401b038a1615613611576072546001600160401b03908116908b1611156135525760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2070656e60448201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560648201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608482015260a4016109e6565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b909204161461360b5760405162461bcd60e51b815260206004820152604c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760648201526b040e6e8c2e8ca40c4c2e8c6d60a31b608482015260a4016109e6565b50613759565b6001600160401b0389166000908152606d60205260409020549150816136ab5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786064820152621a5cdd60ea1b608482015260a4016109e6565b806001600160401b0316896001600160401b031611156137595760405162461bcd60e51b815260206004820152605d60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060648201527f7468616e2063757272656e744c61737456657269666965644261746368000000608482015260a4016109e6565b806001600160401b0316886001600160401b0316116138065760405162461bcd60e51b815260206004820152605760248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2066696e60448201527f616c4e65774261746368206d75737420626520626967676572207468616e206360648201527f757272656e744c61737456657269666965644261746368000000000000000000608482015260a4016109e6565b60006138158a8a8a868b610aeb565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161384a91906153e6565b602060405180830381855afa158015613867573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061388a919061504f565b6138949190615402565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916138d8918b918b918b9190600401615416565b602060405180830381865afa1580156138f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139199190615490565b6139785760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e7660448201526930b634b210383937b7b360b11b60648201526084016109e6565b6139bb33613986858d6150c5565b6001600160401b031661399761241d565b6139a19190615104565b606554600160581b90046001600160a01b031691906144e8565b505050505050505050505050565b60006139d3612646565b9050816000806139e384846150c5565b6001600160401b031690505b836001600160401b0316836001600160401b031614613a95576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613a3f9116426150ed565b1115613a7a576001810154613a6490600160401b90046001600160401b0316866150c5565b613a77906001600160401b0316846152bb565b92505b60010154600160401b90046001600160401b031692506139ef565b6000613aa183836150ed565b905082811015613b1b576000613ab782856150ed565b9050600c8111613ac75780613aca565b600c5b9050613ad7816003615104565b613ae290600a615591565b606554613afb908390600160481b900461ffff16615591565b607454613b089190615104565b613b12919061523e565b60745550613ba7565b6000613b2784836150ed565b9050600c8111613b375780613b3a565b600c5b90506000613b49826003615104565b613b5490600a615591565b606554613b6d908490600160481b900461ffff16615591565b607454613b7a9190615104565b613b84919061523e565b905080607454607454613b979190615104565b613ba1919061523e565b60745550505b505050505050565b600054610100900460ff16613c1a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109e6565b61209d33613c7d565b6033546001600160a01b0316331461209d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109e6565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d1f57600080fd5b505af1158015613d33573d6000803e3d6000fd5b5050505061209d614518565b60006001600160401b038a1615613eba576072546001600160401b03908116908b161115613dfe5760405162461bcd60e51b815260206004820152606c60248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c4016109e6565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613eb45760405162461bcd60e51b815260206004820152606060248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a4016109e6565b5061400e565b506001600160401b0387166000908152606d602052604090205480613f5b5760405162461bcd60e51b815260206004820152605760248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a4016109e6565b6069546001600160401b03908116908916111561400e5760405162461bcd60e51b815260206004820152607160248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c4016109e6565b6072546001600160401b03908116908a161180159061403e5750896001600160401b0316896001600160401b0316115b801561405f57506072546001600160401b03600160401b9091048116908a16115b6140d75760405162461bcd60e51b815260206004820152604f60248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a4016109e6565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146141975760405162461bcd60e51b815260206004820152606a60248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c4016109e6565b60006141a6898989858a610aeb565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516141db91906153e6565b602060405180830381855afa1580156141f8573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061421b919061504f565b6142259190615402565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614269918a918a918a9190600401615416565b602060405180830381865afa158015614286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142aa9190615490565b61430a5760405162461bcd60e51b815260206004820152603e60248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a20696e76616c69642070726f6f66000060648201526084016109e6565b6001600160401b038b166000908152607160205260409020600201548790036139bb5760405162461bcd60e51b815260206004820152606260248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c4016109e6565b60655460ff166143dc5760405162461bcd60e51b81526004016109e6906152d3565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614466826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145739092919063ffffffff16565b8051909150156144e357808060200190518101906144849190615490565b6144e35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109e6565b505050565b6040516001600160a01b0383166024820152604481018290526144e390849063a9059cbb60e01b906064016133b0565b60655460ff161561453b5760405162461bcd60e51b81526004016109e690614f88565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614582848460008561458a565b949350505050565b6060824710156145eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109e6565b600080866001600160a01b0316858760405161460791906153e6565b60006040518083038185875af1925050503d8060008114614644576040519150601f19603f3d011682016040523d82523d6000602084013e614649565b606091505b509150915061465a87838387614665565b979650505050505050565b606083156146d45782516000036146cd576001600160a01b0385163b6146cd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109e6565b5081614582565b61458283838151156146e95781518083602001fd5b8060405162461bcd60e51b81526004016109e6919061475b565b60005b8381101561471e578181015183820152602001614706565b838111156131685750506000910152565b60008151808452614747816020860160208601614703565b601f01601f19169290920160200192915050565b60208152600061476e602083018461472f565b9392505050565b60006020828403121561478757600080fd5b813561ffff8116811461476e57600080fd5b80356001600160401b03811681146147b057600080fd5b919050565b600080600080600060a086880312156147cd57600080fd5b6147d686614799565b94506147e460208701614799565b94979496505050506040830135926060810135926080909101359150565b60006020828403121561481457600080fd5b61476e82614799565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156148555761485561481d565b60405290565b604051606081016001600160401b03811182821017156148555761485561481d565b604051601f8201601f191681016001600160401b03811182821017156148a5576148a561481d565b604052919050565b60006001600160401b038211156148c6576148c661481d565b5060051b60200190565b600082601f8301126148e157600080fd5b81356001600160401b038111156148fa576148fa61481d565b61490d601f8201601f191660200161487d565b81815284602083860101111561492257600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561495257600080fd5b82356001600160401b038082111561496957600080fd5b818501915085601f83011261497d57600080fd5b813561499061498b826148ad565b61487d565b81815260059190911b830184019084810190888311156149af57600080fd5b8585015b83811015614a48578035858111156149cb5760008081fd5b86016080818c03601f19018113156149e35760008081fd5b6149eb614833565b89830135888111156149fd5760008081fd5b614a0b8e8c838701016148d0565b8252506040808401358b8301526060614a25818601614799565b82840152614a34848601614799565b9083015250855250509186019186016149b3565b5098975050505050505050565b8060408101831015614a6657600080fd5b92915050565b8060808101831015614a6657600080fd5b6000806000806000806000806101a0898b031215614a9a57600080fd5b614aa389614799565b9750614ab160208a01614799565b9650614abf60408a01614799565b95506060890135945060808901359350614adc8a60a08b01614a55565b9250614aeb8a60e08b01614a6c565b9150614afb8a6101608b01614a55565b90509295985092959890939650565b6001600160a01b038116811461231457600080fd5b600080600080600080600080888a036101c0811215614b3d57600080fd5b8935614b4881614b0a565b985060208a0135614b5881614b0a565b975060408a0135614b6881614b0a565b965060608a0135614b7881614b0a565b955060e0607f1982011215614b8c57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614bb657600080fd5b614bc28c838d016148d0565b93506101a08b0135915080821115614bd957600080fd5b50614be68b828c016148d0565b9150509295985092959890939650565b600060208284031215614c0857600080fd5b813561476e81614b0a565b60008060008060008060008060006101c08a8c031215614c3257600080fd5b614c3b8a614799565b9850614c4960208b01614799565b9750614c5760408b01614799565b9650614c6560608b01614799565b955060808a0135945060a08a01359350614c828b60c08c01614a55565b9250614c928b6101008c01614a6c565b9150614ca28b6101808c01614a55565b90509295985092959850929598565b600060208284031215614cc357600080fd5b5035919050565b801515811461231457600080fd5b600060208284031215614cea57600080fd5b813561476e81614cca565b600060208284031215614d0757600080fd5b81356001600160401b03811115614d1d57600080fd5b614582848285016148d0565b60006020808385031215614d3c57600080fd5b82356001600160401b0380821115614d5357600080fd5b818501915085601f830112614d6757600080fd5b8135614d7561498b826148ad565b81815260059190911b83018401908481019088831115614d9457600080fd5b8585015b83811015614a4857803585811115614db05760008081fd5b86016060818c03601f1901811315614dc85760008081fd5b614dd061485b565b8983013588811115614de25760008081fd5b614df08e8c838701016148d0565b8252506040808401358b830152614e08838501614799565b9082015285525050918601918601614d98565b60008060408385031215614e2e57600080fd5b82356001600160401b03811115614e4457600080fd5b614e50858286016148d0565b95602094909401359450505050565b600181811c90821680614e7357607f821691505b602082108103614e9357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614f1457614f14614edc565b01949350505050565b60208082526045908201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361502257615022614edc565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b60006020828403121561506157600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b6000600182016150be576150be614edc565b5060010190565b60006001600160401b03838116908316818110156150e5576150e5614edc565b039392505050565b6000828210156150ff576150ff614edc565b500390565b600081600019048311821515161561511e5761511e614edc565b500290565b601f8211156144e357600081815260208120601f850160051c8101602086101561514a5750805b601f850160051c820191505b81811015613ba757828155600101615156565b81516001600160401b038111156151825761518261481d565b615196816151908454614e5f565b84615123565b602080601f8311600181146151cb57600084156151b35750858301515b600019600386901b1c1916600185901b178555613ba7565b600085815260208120601f198616915b828110156151fa578886015182559484019460019091019084016151db565b50858210156152185787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b60008261524d5761524d615228565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b600082198211156152ce576152ce614edc565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b03831660208201526060604082018190526000906153b79083018461472f565b95945050505050565b60006001600160401b03808416806153da576153da615228565b92169190910492915050565b600082516153f8818460208701614703565b9190910192915050565b60008261541157615411615228565b500690565b61012081016040808784376000838201818152879190815b600281101561544e5784848337908401828152928401929060010161542e565b5050828760c0870137610100850181815286935091505b6001811015615484578251825260209283019290910190600101615465565b50505095945050505050565b6000602082840312156154a257600080fd5b815161476e81614cca565b600181815b808511156154e85781600019048211156154ce576154ce614edc565b808516156154db57918102915b93841c93908002906154b2565b509250929050565b6000826154ff57506001614a66565b8161550c57506000614a66565b8160018114615522576002811461552c57615548565b6001915050614a66565b60ff84111561553d5761553d614edc565b50506001821b614a66565b5060208310610133831016604e8410600b841016171561556b575081810a614a66565b61557583836154ad565b806000190482111561558957615589614edc565b029392505050565b600061476e83836154f056fe506f6c79676f6e5a6b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a6b45564d3a3a70726f76654e6f6e44657465726d696e6973a26469706673582212204c3a0cfa919696b298adf6c27a097f1b74001bdc0f6a0b750405825e747a7de964736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZkEVMBridge.json b/compiled-contracts/PolygonZkEVMBridge.json index f0e778d57..85457653c 100644 --- a/compiled-contracts/PolygonZkEVMBridge.json +++ b/compiled-contracts/PolygonZkEVMBridge.json @@ -515,7 +515,7 @@ }, { "internalType": "address", - "name": "_poeAddress", + "name": "_polygonZkEVMaddress", "type": "address" } ], @@ -571,7 +571,7 @@ }, { "inputs": [], - "name": "poeAddress", + "name": "polygonZkEVMaddress", "outputs": [ { "internalType": "address", @@ -699,8 +699,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50614810806100206000396000f3fe608060405260043610620001675760003560e01c806381b1c17411620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b806381b1c17414620003735780638f61151914620003ad5780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b80633ae05047116200011e5780633ae0504714620002a25780633da8168214620002ba5780633e19704314620002df578063463855491462000304578063647c576c14620003295780637b6323c1146200034e57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002470565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009d2565b348015620001db57600080fd5b50620001f3620001ed366004620024fd565b62000a0b565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002539565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b506200022462000a5e565b348015620002c757600080fd5b50620001a1620002d936600462002628565b62000b51565b348015620002ec57600080fd5b5062000224620002fe366004620026a6565b62000c53565b3480156200031157600080fd5b506200018362000323366004620027b7565b62000ce0565b3480156200033657600080fd5b5062000183620003483660046200289e565b62000e86565b3480156200035b57600080fd5b50620001836200036d366004620027b7565b62000fe5565b3480156200038057600080fd5b50620001f362000392366004620028ee565b6024602052600090815260409020546001600160a01b031681565b348015620003ba57600080fd5b50602754620001f3906001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028ee565b62001492565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002908565b620014d7565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620029bc565b620015ee565b348015620004c357600080fd5b50620001836200179a565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028ee565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a24565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008ec565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074957604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562000710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000736919062002a9b565b50602081015181519094509250620008ea565b84156200075e576200075e8a888888620017d1565b620007756001600160a01b038b1633308a62001bf9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f6919081019062002b36565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000835573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085f919081019062002b36565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c4919062002b6f565b604051602001620008d89392919062002bbd565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092e98979695949392919062002bfa565b60405180910390a16200095962000953600084868c8c8c888051906020012062000c53565b62001c66565b6026546001600160a01b03166333d6247d6200097462000a5e565b6040518263ffffffff1660e01b81526004016200099391815260200190565b600060405180830381600087803b158015620009ae57600080fd5b505af1158015620009c3573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ff5760405162461bcd60e51b8152600401620005539062002c67565b62000a0962001db7565b565b600060246000848460405160200162000a2692919062002cc4565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b48578260011660010362000ac9576001816020811062000a955762000a9562002cee565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af6565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0360028462002d30565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3f9062002d47565b91505062000a69565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c44578160011660010362000bce5786818151811062000b8c5762000b8c62002cee565b60200260200101518360405160200162000bb0929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c20565b8287828151811062000be45762000be462002cee565b602002602001015160405160200162000c07929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2d60028362002d30565b91508062000c3b8162002d47565b91505062000b61565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d065760405162461bcd60e51b8152600401620005539062002a24565b62000d1c8a8a8a8a8a8a8a8a8a8a600162001e15565b62000d2d8963ffffffff16620020a0565b6000836001600160a01b03168387898560405160240162000d519392919062002d63565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d88919062002d9e565b60006040518083038185875af1925050503d806000811462000dc7576040519150601f19603f3d011682016040523d82523d6000602084013e62000dcc565b606091505b505090508062000e385760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e7195949392919062002dbc565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea75750600054600160ff909116105b8062000ec35750303b15801562000ec3575060005460ff166001145b62000f285760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f4c576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff16156200100b5760405162461bcd60e51b8152600401620005539062002a24565b620010218a8a8a8a8a8a8a8a8a8a600062001e15565b620010328963ffffffff16620020a0565b6001600160a01b0385166200112757604080516000808252602082019092526001600160a01b0385169084906040516200106d919062002d9e565b60006040518083038185875af1925050503d8060008114620010ac576040519150601f19603f3d011682016040523d82523d6000602084013e620010b1565b606091505b5050905080620011205760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b5062001445565b60225463ffffffff6101009091048116908716036200115c57620011566001600160a01b0386168484620020e2565b62001445565b600086866040516020016200117392919062002cc4565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013ca57600080600085806020019051810190620011c5919062002df3565b925092509250600085848484604051620011df90620023d6565b620011ed9392919062002bbd565b8190604051809103906000f59050801580156200120e573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001263573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001289919062002a9b565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013b89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001442565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200141a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001440919062002a9b565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200147e95949392919062002dbc565b60405180910390a150505050505050505050565b600080620014a36101008462002d30565b90506000620014b56101008562002e69565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014ef92919062002cc4565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200152290620023d6565b601f1982820381018352601f9091011660408190526200154f908d908d908d908d908d9060200162002ea9565b60408051601f19818403018152908290526200156f929160200162002eea565b60405160208183030381529060405280519060200120604051602001620015c894939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620016145760405162461bcd60e51b8152600401620005539062002a24565b60225463ffffffff6101009091048116908416036200169c5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016f098979695949392919062002bfa565b60405180910390a162001727620009536001602260019054906101000a900463ffffffff1633878734888051906020012062000c53565b6026546001600160a01b03166333d6247d6200174262000a5e565b6040518263ffffffff1660e01b81526004016200176191815260200190565b600060405180830381600087803b1580156200177c57600080fd5b505af115801562001791573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017c75760405162461bcd60e51b8152600401620005539062002c67565b62000a0962002114565b60006200181483838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021c392505050565b9050632afa533160e01b6001600160e01b031982160162001a0d57600080808080808062001846896004818d62002f1d565b81019062001855919062002f49565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018975760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b0386163014620018c25760405162461bcd60e51b8152600401620005539062003001565b8a8514620019395760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620019b9919062002d9e565b6000604051808303816000865af19150503d8060008114620019f8576040519150601f19603f3d011682016040523d82523d6000602084013e620019fd565b606091505b5050505050505050505062001bf2565b6001600160e01b031981166323f2ebc360e21b1462001a835760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a9b8a6004818e62002f1d565b81019062001aaa919062003052565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001aee5760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b038716301462001b195760405162461bcd60e51b8152600401620005539062003001565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001ba2919062002d9e565b6000604051808303816000865af19150503d806000811462001be1576040519150601f19603f3d011682016040523d82523d6000602084013e62001be6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdf9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021ca565b80600162001c7760206002620031db565b62001c839190620031e9565b6021541062001ce85760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cfd919062003203565b909155505060215460005b602081101562001da7578160011660010362001d3d57826001826020811062001d355762001d3562002cee565b015550505050565b6001816020811062001d535762001d5362002cee565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d90919062002d30565b91508062001d9e8162002d47565b91505062001d08565b5062001db26200321e565b505050565b60225460ff161562001ddd5760405162461bcd60e51b8152600401620005539062002a24565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001e268a63ffffffff1662001492565b1562001e7d5760405162461bcd60e51b81526020600482015260306024820152600080516020620047bb83398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ef1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f17919062003234565b90508060000362001f805760405162461bcd60e51b81526020600482015260396024820152600080516020620047bb83398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff8781166101009092041614620020025760405162461bcd60e51b81526020600482015260436024820152600080516020620047bb83398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff166200202057508862002023565b50895b6200204e6200203f848b8b8b8b8b8b8051906020012062000c53565b8e8e63ffffffff168462000b51565b620009c35760405162461bcd60e51b815260206004820152602c6024820152600080516020620047bb83398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020b06101008362002d30565b90506000620020c26101008462002e69565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001db290849063a9059cbb60e01b9060640162001c2e565b60225460ff166200218e5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002221826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022a39092919063ffffffff16565b80519091501562001db2578080602001905181019062002242919062002a9b565b62001db25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c4b848460008585600080866001600160a01b03168587604051620022cd919062002d9e565b60006040518083038185875af1925050503d80600081146200230c576040519150601f19603f3d011682016040523d82523d6000602084013e62002311565b606091505b509150915062002324878383876200232f565b979650505050505050565b60608315620023a35782516000036200239b576001600160a01b0385163b6200239b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c4b565b62000c4b8383815115620023ba5781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200324e565b611557806200326483390190565b6001600160a01b0381168114620023fa57600080fd5b50565b80356200240a81620023e4565b919050565b803563ffffffff811681146200240a57600080fd5b60008083601f8401126200243757600080fd5b50813567ffffffffffffffff8111156200245057600080fd5b6020830191508360208285010111156200246957600080fd5b9250929050565b60008060008060008060a087890312156200248a57600080fd5b86356200249781620023e4565b9550620024a7602088016200240f565b94506040870135620024b981620023e4565b935060608701359250608087013567ffffffffffffffff811115620024dd57600080fd5b620024eb89828a0162002424565b979a9699509497509295939492505050565b600080604083850312156200251157600080fd5b6200251c836200240f565b915060208301356200252e81620023e4565b809150509250929050565b6000602082840312156200254c57600080fd5b81356200255981620023e4565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620025a257620025a262002560565b604052919050565b600082601f830112620025bc57600080fd5b8135602067ffffffffffffffff821115620025db57620025db62002560565b8160051b620025ec82820162002576565b92835284810182019282810190878511156200260757600080fd5b83870192505b8483101562002324578235825291830191908301906200260d565b600080600080608085870312156200263f57600080fd5b84359350602085013567ffffffffffffffff808211156200265f57600080fd5b6200266d88838901620025aa565b94506040870135915080821682146200268557600080fd5b509396929550929360600135925050565b60ff81168114620023fa57600080fd5b600080600080600080600060e0888a031215620026c257600080fd5b8735620026cf8162002696565b9650620026df602089016200240f565b95506040880135620026f181620023e4565b945062002701606089016200240f565b935060808801356200271381620023e4565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200274d576200274d62002560565b50601f01601f191660200190565b600082601f8301126200276d57600080fd5b8135620027846200277e8262002730565b62002576565b8181528460208386010111156200279a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027d857600080fd5b8a3567ffffffffffffffff80821115620027f157600080fd5b620027ff8e838f01620025aa565b9b506200280f60208e016200240f565b9a5060408d0135995060608d013598506200282d60808e016200240f565b97506200283d60a08e01620023fd565b96506200284d60c08e016200240f565b95506200285d60e08e01620023fd565b94506101008d013593506101208d01359150808211156200287d57600080fd5b506200288c8d828e016200275b565b9150509295989b9194979a5092959850565b600080600060608486031215620028b457600080fd5b620028bf846200240f565b92506020840135620028d181620023e4565b91506040840135620028e381620023e4565b809150509250925092565b6000602082840312156200290157600080fd5b5035919050565b600080600080600080600060a0888a0312156200292457600080fd5b6200292f886200240f565b965060208801356200294181620023e4565b9550604088013567ffffffffffffffff808211156200295f57600080fd5b6200296d8b838c0162002424565b909750955060608a01359150808211156200298757600080fd5b50620029968a828b0162002424565b9094509250506080880135620029ac8162002696565b8091505092959891949750929550565b600080600060608486031215620029d257600080fd5b620029dd846200240f565b92506020840135620029ef81620023e4565b9150604084013567ffffffffffffffff81111562002a0c57600080fd5b62002a1a868287016200275b565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b8015158114620023fa57600080fd5b60006020828403121562002aae57600080fd5b8151620025598162002a8c565b60005b8381101562002ad857818101518382015260200162002abe565b8381111562000fdf5750506000910152565b600082601f83011262002afc57600080fd5b815162002b0d6200277e8262002730565b81815284602083860101111562002b2357600080fd5b62000c4b82602083016020870162002abb565b60006020828403121562002b4957600080fd5b815167ffffffffffffffff81111562002b6157600080fd5b62000c4b8482850162002aea565b60006020828403121562002b8257600080fd5b8151620025598162002696565b6000815180845262002ba981602086016020860162002abb565b601f01601f19169290920160200192915050565b60608152600062002bd2606083018662002b8f565b828103602084015262002be6818662002b8f565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002c4e8483018762002b8f565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002d425762002d4262002d04565b500490565b60006001820162002d5c5762002d5c62002d1a565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d959083018462002b8f565b95945050505050565b6000825162002db281846020870162002abb565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002e0957600080fd5b835167ffffffffffffffff8082111562002e2257600080fd5b62002e308783880162002aea565b9450602086015191508082111562002e4757600080fd5b5062002e568682870162002aea565b9250506040840151620028e38162002696565b60008262002e7b5762002e7b62002d04565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002ebf60608301878962002e80565b828103602084015262002ed481868862002e80565b91505060ff831660408301529695505050505050565b6000835162002efe81846020880162002abb565b83519083019062002f1481836020880162002abb565b01949350505050565b6000808585111562002f2e57600080fd5b8386111562002f3c57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f6557600080fd5b873562002f7281620023e4565b9650602088013562002f8481620023e4565b955060408801359450606088013593506080880135620027138162002696565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b0312156200307057600080fd5b88356200307d81620023e4565b975060208901356200308f81620023e4565b965060408901359550606089013594506080890135620030af8162002a8c565b935060a0890135620030c18162002696565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200311f57816000190482111562003103576200310362002d1a565b808516156200311157918102915b93841c9390800290620030e3565b509250929050565b600082620031385750600162000a58565b81620031475750600062000a58565b81600181146200316057600281146200316b576200318b565b600191505062000a58565b60ff8411156200317f576200317f62002d1a565b50506001821b62000a58565b5060208310610133831016604e8410600b8410161715620031b0575081810a62000a58565b620031bc8383620030de565b8060001904821115620031d357620031d362002d1a565b029392505050565b600062002559838362003127565b600082821015620031fe57620031fe62002d1a565b500390565b6000821982111562003219576200321962002d1a565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200324757600080fd5b5051919050565b60208152600062002559602083018462002b8f56fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea2646970667358221220906ea48f19088f63dbf7270e029d0db2a116bfdc48421c0afa81f84f29beb83f64736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212208eec55cf9af9178665644bc6cbcbda06a1eb152295193e76b792bb7bfcb55ac564736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001675760003560e01c806381b1c17411620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b806381b1c17414620003735780638f61151914620003ad5780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b80633ae05047116200011e5780633ae0504714620002a25780633da8168214620002ba5780633e19704314620002df578063463855491462000304578063647c576c14620003295780637b6323c1146200034e57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002470565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009d2565b348015620001db57600080fd5b50620001f3620001ed366004620024fd565b62000a0b565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002539565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b506200022462000a5e565b348015620002c757600080fd5b50620001a1620002d936600462002628565b62000b51565b348015620002ec57600080fd5b5062000224620002fe366004620026a6565b62000c53565b3480156200031157600080fd5b506200018362000323366004620027b7565b62000ce0565b3480156200033657600080fd5b5062000183620003483660046200289e565b62000e86565b3480156200035b57600080fd5b50620001836200036d366004620027b7565b62000fe5565b3480156200038057600080fd5b50620001f362000392366004620028ee565b6024602052600090815260409020546001600160a01b031681565b348015620003ba57600080fd5b50602754620001f3906001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028ee565b62001492565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d36600462002908565b620014d7565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b0366004620029bc565b620015ee565b348015620004c357600080fd5b50620001836200179a565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028ee565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a24565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008ec565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074957604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af115801562000710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000736919062002a9b565b50602081015181519094509250620008ea565b84156200075e576200075e8a888888620017d1565b620007756001600160a01b038b1633308a62001bf9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f6919081019062002b36565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000835573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085f919081019062002b36565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c4919062002b6f565b604051602001620008d89392919062002bbd565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092e98979695949392919062002bfa565b60405180910390a16200095962000953600084868c8c8c888051906020012062000c53565b62001c66565b6026546001600160a01b03166333d6247d6200097462000a5e565b6040518263ffffffff1660e01b81526004016200099391815260200190565b600060405180830381600087803b158015620009ae57600080fd5b505af1158015620009c3573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ff5760405162461bcd60e51b8152600401620005539062002c67565b62000a0962001db7565b565b600060246000848460405160200162000a2692919062002cc4565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b48578260011660010362000ac9576001816020811062000a955762000a9562002cee565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af6565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0360028462002d30565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3f9062002d47565b91505062000a69565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c44578160011660010362000bce5786818151811062000b8c5762000b8c62002cee565b60200260200101518360405160200162000bb0929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c20565b8287828151811062000be45762000be462002cee565b602002602001015160405160200162000c07929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2d60028362002d30565b91508062000c3b8162002d47565b91505062000b61565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d065760405162461bcd60e51b8152600401620005539062002a24565b62000d1c8a8a8a8a8a8a8a8a8a8a600162001e15565b62000d2d8963ffffffff16620020a0565b6000836001600160a01b03168387898560405160240162000d519392919062002d63565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d88919062002d9e565b60006040518083038185875af1925050503d806000811462000dc7576040519150601f19603f3d011682016040523d82523d6000602084013e62000dcc565b606091505b505090508062000e385760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e7195949392919062002dbc565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea75750600054600160ff909116105b8062000ec35750303b15801562000ec3575060005460ff166001145b62000f285760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f4c576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdf576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff16156200100b5760405162461bcd60e51b8152600401620005539062002a24565b620010218a8a8a8a8a8a8a8a8a8a600062001e15565b620010328963ffffffff16620020a0565b6001600160a01b0385166200112757604080516000808252602082019092526001600160a01b0385169084906040516200106d919062002d9e565b60006040518083038185875af1925050503d8060008114620010ac576040519150601f19603f3d011682016040523d82523d6000602084013e620010b1565b606091505b5050905080620011205760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b5062001445565b60225463ffffffff6101009091048116908716036200115c57620011566001600160a01b0386168484620020e2565b62001445565b600086866040516020016200117392919062002cc4565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013ca57600080600085806020019051810190620011c5919062002df3565b925092509250600085848484604051620011df90620023d6565b620011ed9392919062002bbd565b8190604051809103906000f59050801580156200120e573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001263573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001289919062002a9b565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013b89392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001442565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af11580156200141a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001440919062002a9b565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200147e95949392919062002dbc565b60405180910390a150505050505050505050565b600080620014a36101008462002d30565b90506000620014b56101008562002e69565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014ef92919062002cc4565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200152290620023d6565b601f1982820381018352601f9091011660408190526200154f908d908d908d908d908d9060200162002ea9565b60408051601f19818403018152908290526200156f929160200162002eea565b60405160208183030381529060405280519060200120604051602001620015c894939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620016145760405162461bcd60e51b8152600401620005539062002a24565b60225463ffffffff6101009091048116908416036200169c5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016f098979695949392919062002bfa565b60405180910390a162001727620009536001602260019054906101000a900463ffffffff1633878734888051906020012062000c53565b6026546001600160a01b03166333d6247d6200174262000a5e565b6040518263ffffffff1660e01b81526004016200176191815260200190565b600060405180830381600087803b1580156200177c57600080fd5b505af115801562001791573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017c75760405162461bcd60e51b8152600401620005539062002c67565b62000a0962002114565b60006200181483838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021c392505050565b9050632afa533160e01b6001600160e01b031982160162001a0d57600080808080808062001846896004818d62002f1d565b81019062001855919062002f49565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018975760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b0386163014620018c25760405162461bcd60e51b8152600401620005539062003001565b8a8514620019395760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e1691620019b9919062002d9e565b6000604051808303816000865af19150503d8060008114620019f8576040519150601f19603f3d011682016040523d82523d6000602084013e620019fd565b606091505b5050505050505050505062001bf2565b6001600160e01b031981166323f2ebc360e21b1462001a835760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a9b8a6004818e62002f1d565b81019062001aaa919062003052565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001aee5760405162461bcd60e51b8152600401620005539062002fa4565b6001600160a01b038716301462001b195760405162461bcd60e51b8152600401620005539062003001565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001ba2919062002d9e565b6000604051808303816000865af19150503d806000811462001be1576040519150601f19603f3d011682016040523d82523d6000602084013e62001be6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdf9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021ca565b80600162001c7760206002620031db565b62001c839190620031e9565b6021541062001ce85760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cfd919062003203565b909155505060215460005b602081101562001da7578160011660010362001d3d57826001826020811062001d355762001d3562002cee565b015550505050565b6001816020811062001d535762001d5362002cee565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d90919062002d30565b91508062001d9e8162002d47565b91505062001d08565b5062001db26200321e565b505050565b60225460ff161562001ddd5760405162461bcd60e51b8152600401620005539062002a24565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001e268a63ffffffff1662001492565b1562001e7d5760405162461bcd60e51b81526020600482015260306024820152600080516020620047bb83398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ef1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f17919062003234565b90508060000362001f805760405162461bcd60e51b81526020600482015260396024820152600080516020620047bb83398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff8781166101009092041614620020025760405162461bcd60e51b81526020600482015260436024820152600080516020620047bb83398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff166200202057508862002023565b50895b6200204e6200203f848b8b8b8b8b8b8051906020012062000c53565b8e8e63ffffffff168462000b51565b620009c35760405162461bcd60e51b815260206004820152602c6024820152600080516020620047bb83398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020b06101008362002d30565b90506000620020c26101008462002e69565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001db290849063a9059cbb60e01b9060640162001c2e565b60225460ff166200218e5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b600062002221826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022a39092919063ffffffff16565b80519091501562001db2578080602001905181019062002242919062002a9b565b62001db25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c4b848460008585600080866001600160a01b03168587604051620022cd919062002d9e565b60006040518083038185875af1925050503d80600081146200230c576040519150601f19603f3d011682016040523d82523d6000602084013e62002311565b606091505b509150915062002324878383876200232f565b979650505050505050565b60608315620023a35782516000036200239b576001600160a01b0385163b6200239b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c4b565b62000c4b8383815115620023ba5781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200324e565b611557806200326483390190565b6001600160a01b0381168114620023fa57600080fd5b50565b80356200240a81620023e4565b919050565b803563ffffffff811681146200240a57600080fd5b60008083601f8401126200243757600080fd5b50813567ffffffffffffffff8111156200245057600080fd5b6020830191508360208285010111156200246957600080fd5b9250929050565b60008060008060008060a087890312156200248a57600080fd5b86356200249781620023e4565b9550620024a7602088016200240f565b94506040870135620024b981620023e4565b935060608701359250608087013567ffffffffffffffff811115620024dd57600080fd5b620024eb89828a0162002424565b979a9699509497509295939492505050565b600080604083850312156200251157600080fd5b6200251c836200240f565b915060208301356200252e81620023e4565b809150509250929050565b6000602082840312156200254c57600080fd5b81356200255981620023e4565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620025a257620025a262002560565b604052919050565b600082601f830112620025bc57600080fd5b8135602067ffffffffffffffff821115620025db57620025db62002560565b8160051b620025ec82820162002576565b92835284810182019282810190878511156200260757600080fd5b83870192505b8483101562002324578235825291830191908301906200260d565b600080600080608085870312156200263f57600080fd5b84359350602085013567ffffffffffffffff808211156200265f57600080fd5b6200266d88838901620025aa565b94506040870135915080821682146200268557600080fd5b509396929550929360600135925050565b60ff81168114620023fa57600080fd5b600080600080600080600060e0888a031215620026c257600080fd5b8735620026cf8162002696565b9650620026df602089016200240f565b95506040880135620026f181620023e4565b945062002701606089016200240f565b935060808801356200271381620023e4565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200274d576200274d62002560565b50601f01601f191660200190565b600082601f8301126200276d57600080fd5b8135620027846200277e8262002730565b62002576565b8181528460208386010111156200279a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027d857600080fd5b8a3567ffffffffffffffff80821115620027f157600080fd5b620027ff8e838f01620025aa565b9b506200280f60208e016200240f565b9a5060408d0135995060608d013598506200282d60808e016200240f565b97506200283d60a08e01620023fd565b96506200284d60c08e016200240f565b95506200285d60e08e01620023fd565b94506101008d013593506101208d01359150808211156200287d57600080fd5b506200288c8d828e016200275b565b9150509295989b9194979a5092959850565b600080600060608486031215620028b457600080fd5b620028bf846200240f565b92506020840135620028d181620023e4565b91506040840135620028e381620023e4565b809150509250925092565b6000602082840312156200290157600080fd5b5035919050565b600080600080600080600060a0888a0312156200292457600080fd5b6200292f886200240f565b965060208801356200294181620023e4565b9550604088013567ffffffffffffffff808211156200295f57600080fd5b6200296d8b838c0162002424565b909750955060608a01359150808211156200298757600080fd5b50620029968a828b0162002424565b9094509250506080880135620029ac8162002696565b8091505092959891949750929550565b600080600060608486031215620029d257600080fd5b620029dd846200240f565b92506020840135620029ef81620023e4565b9150604084013567ffffffffffffffff81111562002a0c57600080fd5b62002a1a868287016200275b565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b8015158114620023fa57600080fd5b60006020828403121562002aae57600080fd5b8151620025598162002a8c565b60005b8381101562002ad857818101518382015260200162002abe565b8381111562000fdf5750506000910152565b600082601f83011262002afc57600080fd5b815162002b0d6200277e8262002730565b81815284602083860101111562002b2357600080fd5b62000c4b82602083016020870162002abb565b60006020828403121562002b4957600080fd5b815167ffffffffffffffff81111562002b6157600080fd5b62000c4b8482850162002aea565b60006020828403121562002b8257600080fd5b8151620025598162002696565b6000815180845262002ba981602086016020860162002abb565b601f01601f19169290920160200192915050565b60608152600062002bd2606083018662002b8f565b828103602084015262002be6818662002b8f565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002c4e8483018762002b8f565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002d425762002d4262002d04565b500490565b60006001820162002d5c5762002d5c62002d1a565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d959083018462002b8f565b95945050505050565b6000825162002db281846020870162002abb565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002e0957600080fd5b835167ffffffffffffffff8082111562002e2257600080fd5b62002e308783880162002aea565b9450602086015191508082111562002e4757600080fd5b5062002e568682870162002aea565b9250506040840151620028e38162002696565b60008262002e7b5762002e7b62002d04565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002ebf60608301878962002e80565b828103602084015262002ed481868862002e80565b91505060ff831660408301529695505050505050565b6000835162002efe81846020880162002abb565b83519083019062002f1481836020880162002abb565b01949350505050565b6000808585111562002f2e57600080fd5b8386111562002f3c57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f6557600080fd5b873562002f7281620023e4565b9650602088013562002f8481620023e4565b955060408801359450606088013593506080880135620027138162002696565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b0312156200307057600080fd5b88356200307d81620023e4565b975060208901356200308f81620023e4565b965060408901359550606089013594506080890135620030af8162002a8c565b935060a0890135620030c18162002696565b979a969950949793969295929450505060c08201359160e0013590565b600181815b808511156200311f57816000190482111562003103576200310362002d1a565b808516156200311157918102915b93841c9390800290620030e3565b509250929050565b600082620031385750600162000a58565b81620031475750600062000a58565b81600181146200316057600281146200316b576200318b565b600191505062000a58565b60ff8411156200317f576200317f62002d1a565b50506001821b62000a58565b5060208310610133831016604e8410600b8410161715620031b0575081810a62000a58565b620031bc8383620030de565b8060001904821115620031d357620031d362002d1a565b029392505050565b600062002559838362003127565b600082821015620031fe57620031fe62002d1a565b500390565b6000821982111562003219576200321962002d1a565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200324757600080fd5b5051919050565b60208152600062002559602083018462002b8f56fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea2646970667358221220906ea48f19088f63dbf7270e029d0db2a116bfdc48421c0afa81f84f29beb83f64736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212208eec55cf9af9178665644bc6cbcbda06a1eb152295193e76b792bb7bfcb55ac564736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506147f0806100206000396000f3fe608060405260043610620001675760003560e01c80637b6323c111620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b80637b6323c1146200037057806381b1c17414620003955780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b806334ac9cf2116200011e57806334ac9cf214620002a25780633ae0504714620002c45780633da8168214620002dc5780633e1970431462000301578063463855491462000326578063647c576c146200034b57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d3660046200244d565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009cd565b348015620001db57600080fd5b50620001f3620001ed366004620024da565b62000a06565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002516565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b50602754620001f3906001600160a01b031681565b348015620002d157600080fd5b506200022462000a59565b348015620002e957600080fd5b50620001a1620002fb36600462002605565b62000b4c565b3480156200030e57600080fd5b50620002246200032036600462002683565b62000c4e565b3480156200033357600080fd5b50620001836200034536600462002794565b62000cdb565b3480156200035857600080fd5b50620001836200036a3660046200287b565b62000e81565b3480156200037d57600080fd5b50620001836200038f36600462002794565b62000fe0565b348015620003a257600080fd5b50620001f3620003b4366004620028cb565b6024602052600090815260409020546001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028cb565b62001469565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d366004620028e5565b620014ae565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b036600462002999565b620015c5565b348015620004c357600080fd5b506200018362001771565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028cb565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a01565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044657374696e6174696f6e2063616e6e6f7420626520697473656c66000000606482015260840162000553565b60008060606001600160a01b03891662000687578534146200067d5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a908201527f20616d6f756e7420646f6573206e6f74206d61746368206d6573736167652e76606482015263616c756560e01b608482015260a40162000553565b60009150620008e7565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074457604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac90604401600060405180830381600087803b1580156200071757600080fd5b505af11580156200072c573d6000803e3d6000fd5b505050508060200151935080600001519250620008e5565b84156200075957620007598a888888620017a8565b620007706001600160a01b038b1633308a62001bd0565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f1919081019062002ae4565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000830573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085a919081019062002ae4565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000899573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008bf919062002b1d565b604051602001620008d39392919062002b6b565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092998979695949392919062002ba8565b60405180910390a1620009546200094e600084868c8c8c888051906020012062000c4e565b62001c3d565b6026546001600160a01b03166333d6247d6200096f62000a59565b6040518263ffffffff1660e01b81526004016200098e91815260200190565b600060405180830381600087803b158015620009a957600080fd5b505af1158015620009be573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009fa5760405162461bcd60e51b8152600401620005539062002c15565b62000a0462001d8e565b565b600060246000848460405160200162000a2192919062002c72565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b43578260011660010362000ac4576001816020811062000a905762000a9062002c9c565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af1565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000afe60028462002cde565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3a9062002cf5565b91505062000a64565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c3f578160011660010362000bc95786818151811062000b875762000b8762002c9c565b60200260200101518360405160200162000bab929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c1b565b8287828151811062000bdf5762000bdf62002c9c565b602002602001015160405160200162000c02929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2860028362002cde565b91508062000c368162002cf5565b91505062000b5c565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d015760405162461bcd60e51b8152600401620005539062002a01565b62000d178a8a8a8a8a8a8a8a8a8a600162001dec565b62000d288963ffffffff166200207d565b6000836001600160a01b03168387898560405160240162000d4c9392919062002d11565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d83919062002d4c565b60006040518083038185875af1925050503d806000811462000dc2576040519150601f19603f3d011682016040523d82523d6000602084013e62000dc7565b606091505b505090508062000e335760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e8813595cdcd859d94819985a5b195960821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e6c95949392919062002d6a565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea25750600054600160ff909116105b8062000ebe5750303b15801562000ebe575060005460ff166001145b62000f235760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f47576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fda576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff1615620010065760405162461bcd60e51b8152600401620005539062002a01565b6200101c8a8a8a8a8a8a8a8a8a8a600062001dec565b6200102d8963ffffffff166200207d565b6001600160a01b0385166200112457604080516000808252602082019092526001600160a01b03851690849060405162001068919062002d4c565b60006040518083038185875af1925050503d8060008114620010a7576040519150601f19603f3d011682016040523d82523d6000602084013e620010ac565b606091505b50509050806200111d5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a20604482015274115d1a195c881d1c985b9cd9995c8819985a5b1959605a1b606482015260840162000553565b506200141c565b60225463ffffffff6101009091048116908716036200115957620011536001600160a01b0386168484620020bf565b6200141c565b600086866040516020016200117092919062002c72565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013b457600080600085806020019051810190620011c2919062002da1565b925092509250600085848484604051620011dc90620023b3565b620011ea9392919062002b6b565b8190604051809103906000f59050801580156200120b573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f1990604401600060405180830381600087803b1580156200125b57600080fd5b505af115801562001270573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013a29392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001419565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f1990604401600060405180830381600087803b158015620013ff57600080fd5b505af115801562001414573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200145595949392919062002d6a565b60405180910390a150505050505050505050565b6000806200147a6101008462002cde565b905060006200148c6101008562002e17565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014c692919062002c72565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014f990620023b3565b601f1982820381018352601f90910116604081905262001526908d908d908d908d908d9060200162002e57565b60408051601f198184030181529082905262001546929160200162002e98565b604051602081830303815290604052805190602001206040516020016200159f94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015eb5760405162461bcd60e51b8152600401620005539062002a01565b60225463ffffffff610100909104811690841603620016735760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044657374696e6174696f6e2063616e6e6f7420626520697473656c6600606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016c798979695949392919062002ba8565b60405180910390a1620016fe6200094e6001602260019054906101000a900463ffffffff1633878734888051906020012062000c4e565b6026546001600160a01b03166333d6247d6200171962000a59565b6040518263ffffffff1660e01b81526004016200173891815260200190565b600060405180830381600087803b1580156200175357600080fd5b505af115801562001768573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b031633146200179e5760405162461bcd60e51b8152600401620005539062002c15565b62000a04620020f1565b6000620017eb83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021a092505050565b9050632afa533160e01b6001600160e01b0319821601620019e45760008080808080806200181d896004818d62002ecb565b8101906200182c919062002ef7565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200186e5760405162461bcd60e51b8152600401620005539062002f52565b6001600160a01b0386163014620018995760405162461bcd60e51b8152600401620005539062002faf565b8a8514620019105760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260448201527f6d697420616d6f756e7420646f6573206e6f74206d6174636800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162001990919062002d4c565b6000604051808303816000865af19150503d8060008114620019cf576040519150601f19603f3d011682016040523d82523d6000602084013e620019d4565b606091505b5050505050505050505062001bc9565b6001600160e01b031981166323f2ebc360e21b1462001a5a5760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e6f7460448201526a081d985b1a590818d85b1b60aa1b606482015260840162000553565b60008080808080808062001a728a6004818e62002ecb565b81019062001a81919062003011565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001ac55760405162461bcd60e51b8152600401620005539062002f52565b6001600160a01b038716301462001af05760405162461bcd60e51b8152600401620005539062002faf565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001b79919062002d4c565b6000604051808303816000865af19150503d806000811462001bb8576040519150601f19603f3d011682016040523d82523d6000602084013e62001bbd565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fda9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021a7565b80600162001c4e602060026200319a565b62001c5a9190620031a8565b6021541062001cbf5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d65726b6c65604482015269081d1c995948199d5b1b60b21b606482015260840162000553565b60016021600082825462001cd49190620031c2565b909155505060215460005b602081101562001d7e578160011660010362001d1457826001826020811062001d0c5762001d0c62002c9c565b015550505050565b6001816020811062001d2a5762001d2a62002c9c565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d67919062002cde565b91508062001d758162002cf5565b91505062001cdf565b5062001d89620031dd565b505050565b60225460ff161562001db45760405162461bcd60e51b8152600401620005539062002a01565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001dfd8a63ffffffff1662001469565b1562001e545760405162461bcd60e51b815260206004820152603060248201526000805160206200479b83398151915260448201526f08105b1c9958591e4818db185a5b595960821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ec8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001eee9190620031f3565b90508060000362001f575760405162461bcd60e51b815260206004820152603760248201526000805160206200479b83398151915260448201527f20476c6f62616c45786974526f6f7420696e76616c6964000000000000000000606482015260840162000553565b60225463ffffffff878116610100909204161462001fd95760405162461bcd60e51b815260206004820152604360248201526000805160206200479b83398151915260448201527f2044657374696e6174696f6e206e6574776f726b20646f6573206e6f74206d616064820152620e8c6d60eb1b608482015260a40162000553565b602254600090610100900463ffffffff1662001ff757508862001ffa565b50895b6200202562002016848b8b8b8b8b8b8051906020012062000c4e565b8e8e63ffffffff168462000b4c565b620009be5760405162461bcd60e51b815260206004820152603260248201526000805160206200479b8339815191526044820152711024b73b30b634b21039b6ba10383937b7b360711b606482015260840162000553565b60006200208d6101008362002cde565b905060006200209f6101008462002e17565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001d8990849063a9059cbb60e01b9060640162001c05565b60225460ff166200216b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b6000620021fe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022809092919063ffffffff16565b80519091501562001d8957808060200190518101906200221f91906200320d565b62001d895760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c46848460008585600080866001600160a01b03168587604051620022aa919062002d4c565b60006040518083038185875af1925050503d8060008114620022e9576040519150601f19603f3d011682016040523d82523d6000602084013e620022ee565b606091505b509150915062002301878383876200230c565b979650505050505050565b606083156200238057825160000362002378576001600160a01b0385163b620023785760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c46565b62000c468383815115620023975781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200322d565b611558806200324383390190565b6001600160a01b0381168114620023d757600080fd5b50565b8035620023e781620023c1565b919050565b803563ffffffff81168114620023e757600080fd5b60008083601f8401126200241457600080fd5b50813567ffffffffffffffff8111156200242d57600080fd5b6020830191508360208285010111156200244657600080fd5b9250929050565b60008060008060008060a087890312156200246757600080fd5b86356200247481620023c1565b95506200248460208801620023ec565b945060408701356200249681620023c1565b935060608701359250608087013567ffffffffffffffff811115620024ba57600080fd5b620024c889828a0162002401565b979a9699509497509295939492505050565b60008060408385031215620024ee57600080fd5b620024f983620023ec565b915060208301356200250b81620023c1565b809150509250929050565b6000602082840312156200252957600080fd5b81356200253681620023c1565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200257f576200257f6200253d565b604052919050565b600082601f8301126200259957600080fd5b8135602067ffffffffffffffff821115620025b857620025b86200253d565b8160051b620025c982820162002553565b9283528481018201928281019087851115620025e457600080fd5b83870192505b848310156200230157823582529183019190830190620025ea565b600080600080608085870312156200261c57600080fd5b84359350602085013567ffffffffffffffff808211156200263c57600080fd5b6200264a8883890162002587565b94506040870135915080821682146200266257600080fd5b509396929550929360600135925050565b60ff81168114620023d757600080fd5b600080600080600080600060e0888a0312156200269f57600080fd5b8735620026ac8162002673565b9650620026bc60208901620023ec565b95506040880135620026ce81620023c1565b9450620026de60608901620023ec565b93506080880135620026f081620023c1565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200272a576200272a6200253d565b50601f01601f191660200190565b600082601f8301126200274a57600080fd5b8135620027616200275b826200270d565b62002553565b8181528460208386010111156200277757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027b557600080fd5b8a3567ffffffffffffffff80821115620027ce57600080fd5b620027dc8e838f0162002587565b9b50620027ec60208e01620023ec565b9a5060408d0135995060608d013598506200280a60808e01620023ec565b97506200281a60a08e01620023da565b96506200282a60c08e01620023ec565b95506200283a60e08e01620023da565b94506101008d013593506101208d01359150808211156200285a57600080fd5b50620028698d828e0162002738565b9150509295989b9194979a5092959850565b6000806000606084860312156200289157600080fd5b6200289c84620023ec565b92506020840135620028ae81620023c1565b91506040840135620028c081620023c1565b809150509250925092565b600060208284031215620028de57600080fd5b5035919050565b600080600080600080600060a0888a0312156200290157600080fd5b6200290c88620023ec565b965060208801356200291e81620023c1565b9550604088013567ffffffffffffffff808211156200293c57600080fd5b6200294a8b838c0162002401565b909750955060608a01359150808211156200296457600080fd5b50620029738a828b0162002401565b9094509250506080880135620029898162002673565b8091505092959891949750929550565b600080600060608486031215620029af57600080fd5b620029ba84620023ec565b92506020840135620029cc81620023c1565b9150604084013567ffffffffffffffff811115620029e957600080fd5b620029f78682870162002738565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002a8657818101518382015260200162002a6c565b8381111562000fda5750506000910152565b600082601f83011262002aaa57600080fd5b815162002abb6200275b826200270d565b81815284602083860101111562002ad157600080fd5b62000c4682602083016020870162002a69565b60006020828403121562002af757600080fd5b815167ffffffffffffffff81111562002b0f57600080fd5b62000c468482850162002a98565b60006020828403121562002b3057600080fd5b8151620025368162002673565b6000815180845262002b5781602086016020860162002a69565b601f01601f19169290920160200192915050565b60608152600062002b80606083018662002b3d565b828103602084015262002b94818662002b3d565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002bfc8483018762002b3d565b925080851660e085015250509998505050505050505050565b6020808252603a908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e5a6b45564d20636f6e7472616374000000000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002cf05762002cf062002cb2565b500490565b60006001820162002d0a5762002d0a62002cc8565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d439083018462002b3d565b95945050505050565b6000825162002d6081846020870162002a69565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002db757600080fd5b835167ffffffffffffffff8082111562002dd057600080fd5b62002dde8783880162002a98565b9450602086015191508082111562002df557600080fd5b5062002e048682870162002a98565b9250506040840151620028c08162002673565b60008262002e295762002e2962002cb2565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e6d60608301878962002e2e565b828103602084015262002e8281868862002e2e565b91505060ff831660408301529695505050505050565b6000835162002eac81846020880162002a69565b83519083019062002ec281836020880162002a69565b01949350505050565b6000808585111562002edc57600080fd5b8386111562002eea57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f1357600080fd5b873562002f2081620023c1565b9650602088013562002f3281620023c1565b955060408801359450606088013593506080880135620026f08162002673565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260408201527f6d6974206f776e6572206d757374206265207468652073656e64657200000000606082015260800190565b60208082526033908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205370656040820152726e646572206d7573742062652027746869732760681b606082015260800190565b8015158114620023d757600080fd5b600080600080600080600080610100898b0312156200302f57600080fd5b88356200303c81620023c1565b975060208901356200304e81620023c1565b9650604089013595506060890135945060808901356200306e8162003002565b935060a0890135620030808162002673565b979a969950949793969295929450505060c08201359160e0013590565b600181815b80851115620030de578160001904821115620030c257620030c262002cc8565b80851615620030d057918102915b93841c9390800290620030a2565b509250929050565b600082620030f75750600162000a53565b81620031065750600062000a53565b81600181146200311f57600281146200312a576200314a565b600191505062000a53565b60ff8411156200313e576200313e62002cc8565b50506001821b62000a53565b5060208310610133831016604e8410600b84101617156200316f575081810a62000a53565b6200317b83836200309d565b806000190482111562003192576200319262002cc8565b029392505050565b6000620025368383620030e6565b600082821015620031bd57620031bd62002cc8565b500390565b60008219821115620031d857620031d862002cc8565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200320657600080fd5b5051919050565b6000602082840312156200322057600080fd5b8151620025368162003002565b60208152600062002536602083018462002b3d56fe60c06040523480156200001157600080fd5b5060405162001558380380620015588339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109e620004ba60003960006104690152600081816102f90152610433015261109e6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866106638361104f565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161106157611061610fd1565b506001019056fea26469706673582212205af0e6dd4760d4ae367515578b46c4d5988b10ae47473e817626188baa0c03a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212209b08895b05feaa5c2c0501728e94663087750f2e080984b02bdce01c7636f75864736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001675760003560e01c80637b6323c111620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b80637b6323c1146200037057806381b1c17414620003955780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b806334ac9cf2116200011e57806334ac9cf214620002a25780633ae0504714620002c45780633da8168214620002dc5780633e1970431462000301578063463855491462000326578063647c576c146200034b57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d3660046200244d565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009cd565b348015620001db57600080fd5b50620001f3620001ed366004620024da565b62000a06565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002516565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b50602754620001f3906001600160a01b031681565b348015620002d157600080fd5b506200022462000a59565b348015620002e957600080fd5b50620001a1620002fb36600462002605565b62000b4c565b3480156200030e57600080fd5b50620002246200032036600462002683565b62000c4e565b3480156200033357600080fd5b50620001836200034536600462002794565b62000cdb565b3480156200035857600080fd5b50620001836200036a3660046200287b565b62000e81565b3480156200037d57600080fd5b50620001836200038f36600462002794565b62000fe0565b348015620003a257600080fd5b50620001f3620003b4366004620028cb565b6024602052600090815260409020546001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028cb565b62001469565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d366004620028e5565b620014ae565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b036600462002999565b620015c5565b348015620004c357600080fd5b506200018362001771565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028cb565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a01565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044657374696e6174696f6e2063616e6e6f7420626520697473656c66000000606482015260840162000553565b60008060606001600160a01b03891662000687578534146200067d5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a908201527f20616d6f756e7420646f6573206e6f74206d61746368206d6573736167652e76606482015263616c756560e01b608482015260a40162000553565b60009150620008e7565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074457604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac90604401600060405180830381600087803b1580156200071757600080fd5b505af11580156200072c573d6000803e3d6000fd5b505050508060200151935080600001519250620008e5565b84156200075957620007598a888888620017a8565b620007706001600160a01b038b1633308a62001bd0565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f1919081019062002ae4565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000830573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085a919081019062002ae4565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000899573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008bf919062002b1d565b604051602001620008d39392919062002b6b565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092998979695949392919062002ba8565b60405180910390a1620009546200094e600084868c8c8c888051906020012062000c4e565b62001c3d565b6026546001600160a01b03166333d6247d6200096f62000a59565b6040518263ffffffff1660e01b81526004016200098e91815260200190565b600060405180830381600087803b158015620009a957600080fd5b505af1158015620009be573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009fa5760405162461bcd60e51b8152600401620005539062002c15565b62000a0462001d8e565b565b600060246000848460405160200162000a2192919062002c72565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b43578260011660010362000ac4576001816020811062000a905762000a9062002c9c565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af1565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000afe60028462002cde565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3a9062002cf5565b91505062000a64565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c3f578160011660010362000bc95786818151811062000b875762000b8762002c9c565b60200260200101518360405160200162000bab929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c1b565b8287828151811062000bdf5762000bdf62002c9c565b602002602001015160405160200162000c02929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2860028362002cde565b91508062000c368162002cf5565b91505062000b5c565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d015760405162461bcd60e51b8152600401620005539062002a01565b62000d178a8a8a8a8a8a8a8a8a8a600162001dec565b62000d288963ffffffff166200207d565b6000836001600160a01b03168387898560405160240162000d4c9392919062002d11565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d83919062002d4c565b60006040518083038185875af1925050503d806000811462000dc2576040519150601f19603f3d011682016040523d82523d6000602084013e62000dc7565b606091505b505090508062000e335760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e8813595cdcd859d94819985a5b195960821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e6c95949392919062002d6a565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea25750600054600160ff909116105b8062000ebe5750303b15801562000ebe575060005460ff166001145b62000f235760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f47576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fda576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff1615620010065760405162461bcd60e51b8152600401620005539062002a01565b6200101c8a8a8a8a8a8a8a8a8a8a600062001dec565b6200102d8963ffffffff166200207d565b6001600160a01b0385166200112457604080516000808252602082019092526001600160a01b03851690849060405162001068919062002d4c565b60006040518083038185875af1925050503d8060008114620010a7576040519150601f19603f3d011682016040523d82523d6000602084013e620010ac565b606091505b50509050806200111d5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a20604482015274115d1a195c881d1c985b9cd9995c8819985a5b1959605a1b606482015260840162000553565b506200141c565b60225463ffffffff6101009091048116908716036200115957620011536001600160a01b0386168484620020bf565b6200141c565b600086866040516020016200117092919062002c72565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013b457600080600085806020019051810190620011c2919062002da1565b925092509250600085848484604051620011dc90620023b3565b620011ea9392919062002b6b565b8190604051809103906000f59050801580156200120b573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f1990604401600060405180830381600087803b1580156200125b57600080fd5b505af115801562001270573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013a29392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001419565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f1990604401600060405180830381600087803b158015620013ff57600080fd5b505af115801562001414573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200145595949392919062002d6a565b60405180910390a150505050505050505050565b6000806200147a6101008462002cde565b905060006200148c6101008562002e17565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014c692919062002c72565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014f990620023b3565b601f1982820381018352601f90910116604081905262001526908d908d908d908d908d9060200162002e57565b60408051601f198184030181529082905262001546929160200162002e98565b604051602081830303815290604052805190602001206040516020016200159f94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015eb5760405162461bcd60e51b8152600401620005539062002a01565b60225463ffffffff610100909104811690841603620016735760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044657374696e6174696f6e2063616e6e6f7420626520697473656c6600606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016c798979695949392919062002ba8565b60405180910390a1620016fe6200094e6001602260019054906101000a900463ffffffff1633878734888051906020012062000c4e565b6026546001600160a01b03166333d6247d6200171962000a59565b6040518263ffffffff1660e01b81526004016200173891815260200190565b600060405180830381600087803b1580156200175357600080fd5b505af115801562001768573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b031633146200179e5760405162461bcd60e51b8152600401620005539062002c15565b62000a04620020f1565b6000620017eb83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021a092505050565b9050632afa533160e01b6001600160e01b0319821601620019e45760008080808080806200181d896004818d62002ecb565b8101906200182c919062002ef7565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200186e5760405162461bcd60e51b8152600401620005539062002f52565b6001600160a01b0386163014620018995760405162461bcd60e51b8152600401620005539062002faf565b8a8514620019105760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260448201527f6d697420616d6f756e7420646f6573206e6f74206d6174636800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162001990919062002d4c565b6000604051808303816000865af19150503d8060008114620019cf576040519150601f19603f3d011682016040523d82523d6000602084013e620019d4565b606091505b5050505050505050505062001bc9565b6001600160e01b031981166323f2ebc360e21b1462001a5a5760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e6f7460448201526a081d985b1a590818d85b1b60aa1b606482015260840162000553565b60008080808080808062001a728a6004818e62002ecb565b81019062001a81919062003011565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001ac55760405162461bcd60e51b8152600401620005539062002f52565b6001600160a01b038716301462001af05760405162461bcd60e51b8152600401620005539062002faf565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001b79919062002d4c565b6000604051808303816000865af19150503d806000811462001bb8576040519150601f19603f3d011682016040523d82523d6000602084013e62001bbd565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fda9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021a7565b80600162001c4e602060026200319a565b62001c5a9190620031a8565b6021541062001cbf5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d65726b6c65604482015269081d1c995948199d5b1b60b21b606482015260840162000553565b60016021600082825462001cd49190620031c2565b909155505060215460005b602081101562001d7e578160011660010362001d1457826001826020811062001d0c5762001d0c62002c9c565b015550505050565b6001816020811062001d2a5762001d2a62002c9c565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d67919062002cde565b91508062001d758162002cf5565b91505062001cdf565b5062001d89620031dd565b505050565b60225460ff161562001db45760405162461bcd60e51b8152600401620005539062002a01565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001dfd8a63ffffffff1662001469565b1562001e545760405162461bcd60e51b815260206004820152603060248201526000805160206200479b83398151915260448201526f08105b1c9958591e4818db185a5b595960821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ec8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001eee9190620031f3565b90508060000362001f575760405162461bcd60e51b815260206004820152603760248201526000805160206200479b83398151915260448201527f20476c6f62616c45786974526f6f7420696e76616c6964000000000000000000606482015260840162000553565b60225463ffffffff878116610100909204161462001fd95760405162461bcd60e51b815260206004820152604360248201526000805160206200479b83398151915260448201527f2044657374696e6174696f6e206e6574776f726b20646f6573206e6f74206d616064820152620e8c6d60eb1b608482015260a40162000553565b602254600090610100900463ffffffff1662001ff757508862001ffa565b50895b6200202562002016848b8b8b8b8b8b8051906020012062000c4e565b8e8e63ffffffff168462000b4c565b620009be5760405162461bcd60e51b815260206004820152603260248201526000805160206200479b8339815191526044820152711024b73b30b634b21039b6ba10383937b7b360711b606482015260840162000553565b60006200208d6101008362002cde565b905060006200209f6101008462002e17565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001d8990849063a9059cbb60e01b9060640162001c05565b60225460ff166200216b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b6000620021fe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022809092919063ffffffff16565b80519091501562001d8957808060200190518101906200221f91906200320d565b62001d895760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c46848460008585600080866001600160a01b03168587604051620022aa919062002d4c565b60006040518083038185875af1925050503d8060008114620022e9576040519150601f19603f3d011682016040523d82523d6000602084013e620022ee565b606091505b509150915062002301878383876200230c565b979650505050505050565b606083156200238057825160000362002378576001600160a01b0385163b620023785760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c46565b62000c468383815115620023975781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200322d565b611558806200324383390190565b6001600160a01b0381168114620023d757600080fd5b50565b8035620023e781620023c1565b919050565b803563ffffffff81168114620023e757600080fd5b60008083601f8401126200241457600080fd5b50813567ffffffffffffffff8111156200242d57600080fd5b6020830191508360208285010111156200244657600080fd5b9250929050565b60008060008060008060a087890312156200246757600080fd5b86356200247481620023c1565b95506200248460208801620023ec565b945060408701356200249681620023c1565b935060608701359250608087013567ffffffffffffffff811115620024ba57600080fd5b620024c889828a0162002401565b979a9699509497509295939492505050565b60008060408385031215620024ee57600080fd5b620024f983620023ec565b915060208301356200250b81620023c1565b809150509250929050565b6000602082840312156200252957600080fd5b81356200253681620023c1565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200257f576200257f6200253d565b604052919050565b600082601f8301126200259957600080fd5b8135602067ffffffffffffffff821115620025b857620025b86200253d565b8160051b620025c982820162002553565b9283528481018201928281019087851115620025e457600080fd5b83870192505b848310156200230157823582529183019190830190620025ea565b600080600080608085870312156200261c57600080fd5b84359350602085013567ffffffffffffffff808211156200263c57600080fd5b6200264a8883890162002587565b94506040870135915080821682146200266257600080fd5b509396929550929360600135925050565b60ff81168114620023d757600080fd5b600080600080600080600060e0888a0312156200269f57600080fd5b8735620026ac8162002673565b9650620026bc60208901620023ec565b95506040880135620026ce81620023c1565b9450620026de60608901620023ec565b93506080880135620026f081620023c1565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200272a576200272a6200253d565b50601f01601f191660200190565b600082601f8301126200274a57600080fd5b8135620027616200275b826200270d565b62002553565b8181528460208386010111156200277757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027b557600080fd5b8a3567ffffffffffffffff80821115620027ce57600080fd5b620027dc8e838f0162002587565b9b50620027ec60208e01620023ec565b9a5060408d0135995060608d013598506200280a60808e01620023ec565b97506200281a60a08e01620023da565b96506200282a60c08e01620023ec565b95506200283a60e08e01620023da565b94506101008d013593506101208d01359150808211156200285a57600080fd5b50620028698d828e0162002738565b9150509295989b9194979a5092959850565b6000806000606084860312156200289157600080fd5b6200289c84620023ec565b92506020840135620028ae81620023c1565b91506040840135620028c081620023c1565b809150509250925092565b600060208284031215620028de57600080fd5b5035919050565b600080600080600080600060a0888a0312156200290157600080fd5b6200290c88620023ec565b965060208801356200291e81620023c1565b9550604088013567ffffffffffffffff808211156200293c57600080fd5b6200294a8b838c0162002401565b909750955060608a01359150808211156200296457600080fd5b50620029738a828b0162002401565b9094509250506080880135620029898162002673565b8091505092959891949750929550565b600080600060608486031215620029af57600080fd5b620029ba84620023ec565b92506020840135620029cc81620023c1565b9150604084013567ffffffffffffffff811115620029e957600080fd5b620029f78682870162002738565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002a8657818101518382015260200162002a6c565b8381111562000fda5750506000910152565b600082601f83011262002aaa57600080fd5b815162002abb6200275b826200270d565b81815284602083860101111562002ad157600080fd5b62000c4682602083016020870162002a69565b60006020828403121562002af757600080fd5b815167ffffffffffffffff81111562002b0f57600080fd5b62000c468482850162002a98565b60006020828403121562002b3057600080fd5b8151620025368162002673565b6000815180845262002b5781602086016020860162002a69565b601f01601f19169290920160200192915050565b60608152600062002b80606083018662002b3d565b828103602084015262002b94818662002b3d565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002bfc8483018762002b3d565b925080851660e085015250509998505050505050505050565b6020808252603a908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e5a6b45564d20636f6e7472616374000000000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002cf05762002cf062002cb2565b500490565b60006001820162002d0a5762002d0a62002cc8565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d439083018462002b3d565b95945050505050565b6000825162002d6081846020870162002a69565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002db757600080fd5b835167ffffffffffffffff8082111562002dd057600080fd5b62002dde8783880162002a98565b9450602086015191508082111562002df557600080fd5b5062002e048682870162002a98565b9250506040840151620028c08162002673565b60008262002e295762002e2962002cb2565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e6d60608301878962002e2e565b828103602084015262002e8281868862002e2e565b91505060ff831660408301529695505050505050565b6000835162002eac81846020880162002a69565b83519083019062002ec281836020880162002a69565b01949350505050565b6000808585111562002edc57600080fd5b8386111562002eea57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f1357600080fd5b873562002f2081620023c1565b9650602088013562002f3281620023c1565b955060408801359450606088013593506080880135620026f08162002673565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260408201527f6d6974206f776e6572206d757374206265207468652073656e64657200000000606082015260800190565b60208082526033908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205370656040820152726e646572206d7573742062652027746869732760681b606082015260800190565b8015158114620023d757600080fd5b600080600080600080600080610100898b0312156200302f57600080fd5b88356200303c81620023c1565b975060208901356200304e81620023c1565b9650604089013595506060890135945060808901356200306e8162003002565b935060a0890135620030808162002673565b979a969950949793969295929450505060c08201359160e0013590565b600181815b80851115620030de578160001904821115620030c257620030c262002cc8565b80851615620030d057918102915b93841c9390800290620030a2565b509250929050565b600082620030f75750600162000a53565b81620031065750600062000a53565b81600181146200311f57600281146200312a576200314a565b600191505062000a53565b60ff8411156200313e576200313e62002cc8565b50506001821b62000a53565b5060208310610133831016604e8410600b84101617156200316f575081810a62000a53565b6200317b83836200309d565b806000190482111562003192576200319262002cc8565b029392505050565b6000620025368383620030e6565b600082821015620031bd57620031bd62002cc8565b500390565b60008219821115620031d857620031d862002cc8565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200320657600080fd5b5051919050565b6000602082840312156200322057600080fd5b8151620025368162003002565b60208152600062002536602083018462002b3d56fe60c06040523480156200001157600080fd5b5060405162001558380380620015588339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109e620004ba60003960006104690152600081816102f90152610433015261109e6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866106638361104f565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161106157611061610fd1565b506001019056fea26469706673582212205af0e6dd4760d4ae367515578b46c4d5988b10ae47473e817626188baa0c03a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212209b08895b05feaa5c2c0501728e94663087750f2e080984b02bdce01c7636f75864736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZkEVMBridgeMock.json b/compiled-contracts/PolygonZkEVMBridgeMock.json index 82d4c529b..3bb49ab6b 100644 --- a/compiled-contracts/PolygonZkEVMBridgeMock.json +++ b/compiled-contracts/PolygonZkEVMBridgeMock.json @@ -534,7 +534,7 @@ }, { "internalType": "address", - "name": "_poeAddress", + "name": "_polygonZkEVMaddress", "type": "address" } ], @@ -616,7 +616,7 @@ }, { "inputs": [], - "name": "poeAddress", + "name": "polygonZkEVMaddress", "outputs": [ { "internalType": "address", @@ -790,8 +790,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50614c1a806100206000396000f3fe608060405260043610620001f35760003560e01c806381b1c174116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b806381b1c17414620004615780638da5cb5b146200049b5780638f61151914620004bb57600080fd5b8063318aee3d116200018d5780634638554911620001585780634638554914620003da578063647c576c14620003ff578063715018a614620004245780637b6323c1146200043c57600080fd5b8063318aee3d14620003095780633ae0504714620003785780633da8168214620003905780633e19704314620003b557600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f620002093660046200285c565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f6200071e565b3480156200026757600080fd5b506200027f62000279366004620028e9565b62000757565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002925565b620007aa565b348015620002ca57600080fd5b506200020f620002dc3660046200293f565b620007b9565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002964565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b50620002fa620007e5565b3480156200039d57600080fd5b506200022d620003af36600462002a4c565b620008d8565b348015620003c257600080fd5b50620002fa620003d436600462002aca565b620009da565b348015620003e757600080fd5b506200020f620003f936600462002bdb565b62000a67565b3480156200040c57600080fd5b506200020f6200041e36600462002cc2565b62000c0d565b3480156200043157600080fd5b506200020f62000d82565b3480156200044957600080fd5b506200020f6200045b36600462002bdb565b62000d98565b3480156200046e57600080fd5b506200027f6200048036600462002925565b6024602052600090815260409020546001600160a01b031681565b348015620004a857600080fd5b50605a546001600160a01b03166200027f565b348015620004c857600080fd5b506027546200027f906001600160a01b031681565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002925565b62001245565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002d12565b6200128a565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002dc6565b620013a1565b348015620005e957600080fd5b506200020f62001553565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002925565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002964565b6200158a565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007065760405162461bcd60e51b815260206004820152604760248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b6200071686868686868662001609565b505050505050565b6027546001600160a01b031633146200074b5760405162461bcd60e51b8152600401620006fd9062002e2e565b6200075562001a9f565b565b60006024600084846040516020016200077292919062002e8b565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b462001afd565b608c55565b620007c362001afd565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008cf57826001166001036200085057600181602081106200081c576200081c62002eb5565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200087d565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088a60028462002ef7565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c69062002f0e565b915050620007f0565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009cb5781600116600103620009555786818151811062000913576200091362002eb5565b60200260200101518360405160200162000937929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009a7565b828782815181106200096b576200096b62002eb5565b60200260200101516040516020016200098e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b460028362002ef7565b915080620009c28162002f0e565b915050620008e8565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a8d5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000aa38a8a8a8a8a8a8a8a8a8a600162001b59565b62000ab48963ffffffff1662001de4565b6000836001600160a01b03168387898560405160240162000ad89392919062002fef565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b0f91906200302a565b60006040518083038185875af1925050503d806000811462000b4e576040519150601f19603f3d011682016040523d82523d6000602084013e62000b53565b606091505b505090508062000bbf5760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b6064820152608401620006fd565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bf895949392919062003048565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c2e5750600054600160ff909116105b8062000c4a5750303b15801562000c4a575060005460ff166001145b62000caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006fd565b6000805460ff19166001179055801562000cd3576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d3562001e26565b801562000d7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8c62001afd565b62000755600062001e99565b60225460ff161562000dbe5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000dd48a8a8a8a8a8a8a8a8a8a600062001b59565b62000de58963ffffffff1662001de4565b6001600160a01b03851662000eda57604080516000808252602082019092526001600160a01b03851690849060405162000e2091906200302a565b60006040518083038185875af1925050503d806000811462000e5f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e64565b606091505b505090508062000ed35760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b6064820152608401620006fd565b50620011f8565b60225463ffffffff61010090910481169087160362000f0f5762000f096001600160a01b038616848462001eeb565b620011f8565b6000868660405160200162000f2692919062002e8b565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200117d5760008060008580602001905181019062000f789190620030cb565b92509250925060008584848460405162000f9290620027c5565b62000fa09392919062003141565b8190604051809103906000f590508015801562000fc1573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001016573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200103c91906200318d565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200116b9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011f5565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620011cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011f391906200318d565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200123195949392919062003048565b60405180910390a150505050505050505050565b600080620012566101008462002ef7565b905060006200126861010085620031ad565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620012a292919062002e8b565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012d590620027c5565b601f1982820381018352601f90910116604081905262001302908d908d908d908d908d90602001620031ed565b60408051601f19818403018152908290526200132292916020016200322e565b604051602081830303815290604052805190602001206040516020016200137b94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013c75760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff6101009091048116908416036200144f5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c460000006064820152608401620006fd565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620014a398979695949392919062003261565b60405180910390a1620014e0620014da6001602260019054906101000a900463ffffffff16338787348880519060200120620009da565b62001f55565b6026546001600160a01b03166333d6247d620014fb620007e5565b6040518263ffffffff1660e01b81526004016200151a91815260200190565b600060405180830381600087803b1580156200153557600080fd5b505af11580156200154a573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015805760405162461bcd60e51b8152600401620006fd9062002e2e565b62000755620020a1565b6200159462001afd565b6001600160a01b038116620015fb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006fd565b620016068162001e99565b50565b60225460ff16156200162f5760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff610100909104811690861603620016b75760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c4600000000006064820152608401620006fd565b60008060606001600160a01b0389166200174e5785341462001744576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c55456064820152608401620006fd565b60009150620019bf565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200181c57604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af1158015620017e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200180991906200318d565b50602081015181519094509250620019bd565b84156200183157620018318a88888862002150565b620018486001600160a01b038b1633308a62002578565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200189f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018c99190810190620032ce565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001908573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620019329190810190620032ce565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001971573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001997919062003307565b604051602001620019ab9392919062003141565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162001a0198979695949392919062003261565b60405180910390a162001a26620014da600084868c8c8c8880519060200120620009da565b6026546001600160a01b03166333d6247d62001a41620007e5565b6040518263ffffffff1660e01b815260040162001a6091815260200190565b600060405180830381600087803b15801562001a7b57600080fd5b505af115801562001a90573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001ac55760405162461bcd60e51b8152600401620006fd9062002f2a565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006fd565b62001b6a8a63ffffffff1662001245565b1562001bc15760405162461bcd60e51b8152602060048201526030602482015260008051602062004bc583398151915260448201526f081053149150511657d0d3105253515160821b6064820152608401620006fd565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001c35573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c5b919062003327565b90508060000362001cc45760405162461bcd60e51b8152602060048201526039602482015260008051602062004bc583398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c4944000000000000006064820152608401620006fd565b60225463ffffffff878116610100909204161462001d465760405162461bcd60e51b8152602060048201526043602482015260008051602062004bc583398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a401620006fd565b602254600090610100900463ffffffff1662001d6457508862001d67565b50895b62001d9262001d83848b8b8b8b8b8b80519060200120620009da565b8e8e63ffffffff1684620008d8565b62001a905760405162461bcd60e51b815260206004820152602c602482015260008051602062004bc583398151915260448201526b0814d35517d253959053125160a21b6064820152608401620006fd565b600062001df46101008362002ef7565b9050600062001e0661010084620031ad565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001e935760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006fd565b62000755335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001f5090849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620025b2565b505050565b80600162001f66602060026200343e565b62001f7291906200344c565b6021541062001fd75760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b6064820152608401620006fd565b60016021600082825462001fec919062003466565b909155505060215460005b60208110156200209657816001166001036200202c57826001826020811062002024576200202462002eb5565b015550505050565b6001816020811062002042576200204262002eb5565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200207f919062002ef7565b9150806200208d8162002f0e565b91505062001ff7565b5062001f5062003481565b60225460ff166200211b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006fd565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200219383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200268b92505050565b9050632afa533160e01b6001600160e01b03198216016200238c576000808080808080620021c5896004818d62003497565b810190620021d49190620034c3565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620022165760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0386163014620022415760405162461bcd60e51b8152600401620006fd906200357b565b8a8514620022b85760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d41544348000000000000006064820152608401620006fd565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200233891906200302a565b6000604051808303816000865af19150503d806000811462002377576040519150601f19603f3d011682016040523d82523d6000602084013e6200237c565b606091505b5050505050505050505062002571565b6001600160e01b031981166323f2ebc360e21b14620024025760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b6064820152608401620006fd565b6000808080808080806200241a8a6004818e62003497565b810190620024299190620035cc565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200246d5760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0387163014620024985760405162461bcd60e51b8152600401620006fd906200357b565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f16916200252191906200302a565b6000604051808303816000865af19150503d806000811462002560576040519150601f19603f3d011682016040523d82523d6000602084013e62002565565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d7c9085906323b872dd60e01b9060840162001f18565b600062002609826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620026929092919063ffffffff16565b80519091501562001f5057808060200190518101906200262a91906200318d565b62001f505760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006fd565b6020015190565b6060620009d2848460008585600080866001600160a01b03168587604051620026bc91906200302a565b60006040518083038185875af1925050503d8060008114620026fb576040519150601f19603f3d011682016040523d82523d6000602084013e62002700565b606091505b509150915062002713878383876200271e565b979650505050505050565b60608315620027925782516000036200278a576001600160a01b0385163b6200278a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006fd565b5081620009d2565b620009d28383815115620027a95781518083602001fd5b8060405162461bcd60e51b8152600401620006fd919062003658565b611557806200366e83390190565b6001600160a01b03811681146200160657600080fd5b8035620027f681620027d3565b919050565b803563ffffffff81168114620027f657600080fd5b60008083601f8401126200282357600080fd5b50813567ffffffffffffffff8111156200283c57600080fd5b6020830191508360208285010111156200285557600080fd5b9250929050565b60008060008060008060a087890312156200287657600080fd5b86356200288381620027d3565b95506200289360208801620027fb565b94506040870135620028a581620027d3565b935060608701359250608087013567ffffffffffffffff811115620028c957600080fd5b620028d789828a0162002810565b979a9699509497509295939492505050565b60008060408385031215620028fd57600080fd5b6200290883620027fb565b915060208301356200291a81620027d3565b809150509250929050565b6000602082840312156200293857600080fd5b5035919050565b6000602082840312156200295257600080fd5b6200295d82620027fb565b9392505050565b6000602082840312156200297757600080fd5b81356200295d81620027d3565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620029c657620029c662002984565b604052919050565b600082601f830112620029e057600080fd5b8135602067ffffffffffffffff821115620029ff57620029ff62002984565b8160051b62002a108282016200299a565b928352848101820192828101908785111562002a2b57600080fd5b83870192505b84831015620027135782358252918301919083019062002a31565b6000806000806080858703121562002a6357600080fd5b84359350602085013567ffffffffffffffff8082111562002a8357600080fd5b62002a9188838901620029ce565b945060408701359150808216821462002aa957600080fd5b509396929550929360600135925050565b60ff811681146200160657600080fd5b600080600080600080600060e0888a03121562002ae657600080fd5b873562002af38162002aba565b965062002b0360208901620027fb565b9550604088013562002b1581620027d3565b945062002b2560608901620027fb565b9350608088013562002b3781620027d3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002b715762002b7162002984565b50601f01601f191660200190565b600082601f83011262002b9157600080fd5b813562002ba862002ba28262002b54565b6200299a565b81815284602083860101111562002bbe57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002bfc57600080fd5b8a3567ffffffffffffffff8082111562002c1557600080fd5b62002c238e838f01620029ce565b9b5062002c3360208e01620027fb565b9a5060408d0135995060608d0135985062002c5160808e01620027fb565b975062002c6160a08e01620027e9565b965062002c7160c08e01620027fb565b955062002c8160e08e01620027e9565b94506101008d013593506101208d013591508082111562002ca157600080fd5b5062002cb08d828e0162002b7f565b9150509295989b9194979a5092959850565b60008060006060848603121562002cd857600080fd5b62002ce384620027fb565b9250602084013562002cf581620027d3565b9150604084013562002d0781620027d3565b809150509250925092565b600080600080600080600060a0888a03121562002d2e57600080fd5b62002d3988620027fb565b9650602088013562002d4b81620027d3565b9550604088013567ffffffffffffffff8082111562002d6957600080fd5b62002d778b838c0162002810565b909750955060608a013591508082111562002d9157600080fd5b5062002da08a828b0162002810565b909450925050608088013562002db68162002aba565b8091505092959891949750929550565b60008060006060848603121562002ddc57600080fd5b62002de784620027fb565b9250602084013562002df981620027d3565b9150604084013567ffffffffffffffff81111562002e1657600080fd5b62002e248682870162002b7f565b9150509250925092565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002f095762002f0962002ecb565b500490565b60006001820162002f235762002f2362002ee1565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002faf57818101518382015260200162002f95565b8381111562000d7c5750506000910152565b6000815180845262002fdb81602086016020860162002f92565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff83166020820152606060408201819052600090620030219083018462002fc1565b95945050505050565b600082516200303e81846020870162002f92565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f8301126200309157600080fd5b8151620030a262002ba28262002b54565b818152846020838601011115620030b857600080fd5b620009d282602083016020870162002f92565b600080600060608486031215620030e157600080fd5b835167ffffffffffffffff80821115620030fa57600080fd5b62003108878388016200307f565b945060208601519150808211156200311f57600080fd5b506200312e868287016200307f565b925050604084015162002d078162002aba565b60608152600062003156606083018662002fc1565b82810360208401526200316a818662002fc1565b91505060ff83166040830152949350505050565b80151581146200160657600080fd5b600060208284031215620031a057600080fd5b81516200295d816200317e565b600082620031bf57620031bf62002ecb565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003203606083018789620031c4565b828103602084015262003218818688620031c4565b91505060ff831660408301529695505050505050565b600083516200324281846020880162002f92565b8351908301906200325881836020880162002f92565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032b58483018762002fc1565b925080851660e085015250509998505050505050505050565b600060208284031215620032e157600080fd5b815167ffffffffffffffff811115620032f957600080fd5b620009d2848285016200307f565b6000602082840312156200331a57600080fd5b81516200295d8162002aba565b6000602082840312156200333a57600080fd5b5051919050565b600181815b808511156200338257816000190482111562003366576200336662002ee1565b808516156200337457918102915b93841c939080029062003346565b509250929050565b6000826200339b57506001620007a4565b81620033aa57506000620007a4565b8160018114620033c35760028114620033ce57620033ee565b6001915050620007a4565b60ff841115620033e257620033e262002ee1565b50506001821b620007a4565b5060208310610133831016604e8410600b841016171562003413575081810a620007a4565b6200341f838362003341565b806000190482111562003436576200343662002ee1565b029392505050565b60006200295d83836200338a565b60008282101562003461576200346162002ee1565b500390565b600082198211156200347c576200347c62002ee1565b500190565b634e487b7160e01b600052600160045260246000fd5b60008085851115620034a857600080fd5b83861115620034b657600080fd5b5050820193919092039150565b600080600080600080600060e0888a031215620034df57600080fd5b8735620034ec81620027d3565b96506020880135620034fe81620027d3565b95506040880135945060608801359350608088013562002b378162002aba565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b031215620035ea57600080fd5b8835620035f781620027d3565b975060208901356200360981620027d3565b96506040890135955060608901359450608089013562003629816200317e565b935060a08901356200363b8162002aba565b979a969950949793969295929450505060c08201359160e0013590565b6020815260006200295d602083018462002fc156fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea2646970667358221220906ea48f19088f63dbf7270e029d0db2a116bfdc48421c0afa81f84f29beb83f64736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220dede2c0e5ac340c975f0209bf91c3275d9290d561a441f9001d1ccfdad83fc9d64736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001f35760003560e01c806381b1c174116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b806381b1c17414620004615780638da5cb5b146200049b5780638f61151914620004bb57600080fd5b8063318aee3d116200018d5780634638554911620001585780634638554914620003da578063647c576c14620003ff578063715018a614620004245780637b6323c1146200043c57600080fd5b8063318aee3d14620003095780633ae0504714620003785780633da8168214620003905780633e19704314620003b557600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f620002093660046200285c565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f6200071e565b3480156200026757600080fd5b506200027f62000279366004620028e9565b62000757565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002925565b620007aa565b348015620002ca57600080fd5b506200020f620002dc3660046200293f565b620007b9565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002964565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b50620002fa620007e5565b3480156200039d57600080fd5b506200022d620003af36600462002a4c565b620008d8565b348015620003c257600080fd5b50620002fa620003d436600462002aca565b620009da565b348015620003e757600080fd5b506200020f620003f936600462002bdb565b62000a67565b3480156200040c57600080fd5b506200020f6200041e36600462002cc2565b62000c0d565b3480156200043157600080fd5b506200020f62000d82565b3480156200044957600080fd5b506200020f6200045b36600462002bdb565b62000d98565b3480156200046e57600080fd5b506200027f6200048036600462002925565b6024602052600090815260409020546001600160a01b031681565b348015620004a857600080fd5b50605a546001600160a01b03166200027f565b348015620004c857600080fd5b506027546200027f906001600160a01b031681565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002925565b62001245565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002d12565b6200128a565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002dc6565b620013a1565b348015620005e957600080fd5b506200020f62001553565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002925565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002964565b6200158a565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007065760405162461bcd60e51b815260206004820152604760248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b6200071686868686868662001609565b505050505050565b6027546001600160a01b031633146200074b5760405162461bcd60e51b8152600401620006fd9062002e2e565b6200075562001a9f565b565b60006024600084846040516020016200077292919062002e8b565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b462001afd565b608c55565b620007c362001afd565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008cf57826001166001036200085057600181602081106200081c576200081c62002eb5565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200087d565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088a60028462002ef7565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c69062002f0e565b915050620007f0565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009cb5781600116600103620009555786818151811062000913576200091362002eb5565b60200260200101518360405160200162000937929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009a7565b828782815181106200096b576200096b62002eb5565b60200260200101516040516020016200098e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b460028362002ef7565b915080620009c28162002f0e565b915050620008e8565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a8d5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000aa38a8a8a8a8a8a8a8a8a8a600162001b59565b62000ab48963ffffffff1662001de4565b6000836001600160a01b03168387898560405160240162000ad89392919062002fef565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b0f91906200302a565b60006040518083038185875af1925050503d806000811462000b4e576040519150601f19603f3d011682016040523d82523d6000602084013e62000b53565b606091505b505090508062000bbf5760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b6064820152608401620006fd565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bf895949392919062003048565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c2e5750600054600160ff909116105b8062000c4a5750303b15801562000c4a575060005460ff166001145b62000caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006fd565b6000805460ff19166001179055801562000cd3576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d3562001e26565b801562000d7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8c62001afd565b62000755600062001e99565b60225460ff161562000dbe5760405162461bcd60e51b8152600401620006fd9062002f2a565b62000dd48a8a8a8a8a8a8a8a8a8a600062001b59565b62000de58963ffffffff1662001de4565b6001600160a01b03851662000eda57604080516000808252602082019092526001600160a01b03851690849060405162000e2091906200302a565b60006040518083038185875af1925050503d806000811462000e5f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e64565b606091505b505090508062000ed35760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b6064820152608401620006fd565b50620011f8565b60225463ffffffff61010090910481169087160362000f0f5762000f096001600160a01b038616848462001eeb565b620011f8565b6000868660405160200162000f2692919062002e8b565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200117d5760008060008580602001905181019062000f789190620030cb565b92509250925060008584848460405162000f9290620027c5565b62000fa09392919062003141565b8190604051809103906000f590508015801562000fc1573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f19906044016020604051808303816000875af115801562001016573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200103c91906200318d565b50806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200116b9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011f5565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f19906044016020604051808303816000875af1158015620011cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011f391906200318d565b505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200123195949392919062003048565b60405180910390a150505050505050505050565b600080620012566101008462002ef7565b905060006200126861010085620031ad565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620012a292919062002e8b565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012d590620027c5565b601f1982820381018352601f90910116604081905262001302908d908d908d908d908d90602001620031ed565b60408051601f19818403018152908290526200132292916020016200322e565b604051602081830303815290604052805190602001206040516020016200137b94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013c75760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff6101009091048116908416036200144f5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c460000006064820152608401620006fd565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620014a398979695949392919062003261565b60405180910390a1620014e0620014da6001602260019054906101000a900463ffffffff16338787348880519060200120620009da565b62001f55565b6026546001600160a01b03166333d6247d620014fb620007e5565b6040518263ffffffff1660e01b81526004016200151a91815260200190565b600060405180830381600087803b1580156200153557600080fd5b505af11580156200154a573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015805760405162461bcd60e51b8152600401620006fd9062002e2e565b62000755620020a1565b6200159462001afd565b6001600160a01b038116620015fb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006fd565b620016068162001e99565b50565b60225460ff16156200162f5760405162461bcd60e51b8152600401620006fd9062002f2a565b60225463ffffffff610100909104811690861603620016b75760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c4600000000006064820152608401620006fd565b60008060606001600160a01b0389166200174e5785341462001744576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c55456064820152608401620006fd565b60009150620019bf565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200181c57604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac906044016020604051808303816000875af1158015620017e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200180991906200318d565b50602081015181519094509250620019bd565b84156200183157620018318a88888862002150565b620018486001600160a01b038b1633308a62002578565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200189f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018c99190810190620032ce565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001908573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620019329190810190620032ce565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001971573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001997919062003307565b604051602001620019ab9392919062003141565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b8760215460405162001a0198979695949392919062003261565b60405180910390a162001a26620014da600084868c8c8c8880519060200120620009da565b6026546001600160a01b03166333d6247d62001a41620007e5565b6040518263ffffffff1660e01b815260040162001a6091815260200190565b600060405180830381600087803b15801562001a7b57600080fd5b505af115801562001a90573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001ac55760405162461bcd60e51b8152600401620006fd9062002f2a565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006fd565b62001b6a8a63ffffffff1662001245565b1562001bc15760405162461bcd60e51b8152602060048201526030602482015260008051602062004bc583398151915260448201526f081053149150511657d0d3105253515160821b6064820152608401620006fd565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001c35573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c5b919062003327565b90508060000362001cc45760405162461bcd60e51b8152602060048201526039602482015260008051602062004bc583398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c4944000000000000006064820152608401620006fd565b60225463ffffffff878116610100909204161462001d465760405162461bcd60e51b8152602060048201526043602482015260008051602062004bc583398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a401620006fd565b602254600090610100900463ffffffff1662001d6457508862001d67565b50895b62001d9262001d83848b8b8b8b8b8b80519060200120620009da565b8e8e63ffffffff1684620008d8565b62001a905760405162461bcd60e51b815260206004820152602c602482015260008051602062004bc583398151915260448201526b0814d35517d253959053125160a21b6064820152608401620006fd565b600062001df46101008362002ef7565b9050600062001e0661010084620031ad565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001e935760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006fd565b62000755335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001f5090849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620025b2565b505050565b80600162001f66602060026200343e565b62001f7291906200344c565b6021541062001fd75760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b6064820152608401620006fd565b60016021600082825462001fec919062003466565b909155505060215460005b60208110156200209657816001166001036200202c57826001826020811062002024576200202462002eb5565b015550505050565b6001816020811062002042576200204262002eb5565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200207f919062002ef7565b9150806200208d8162002f0e565b91505062001ff7565b5062001f5062003481565b60225460ff166200211b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006fd565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200219383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200268b92505050565b9050632afa533160e01b6001600160e01b03198216016200238c576000808080808080620021c5896004818d62003497565b810190620021d49190620034c3565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620022165760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0386163014620022415760405162461bcd60e51b8152600401620006fd906200357b565b8a8514620022b85760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d41544348000000000000006064820152608401620006fd565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200233891906200302a565b6000604051808303816000865af19150503d806000811462002377576040519150601f19603f3d011682016040523d82523d6000602084013e6200237c565b606091505b5050505050505050505062002571565b6001600160e01b031981166323f2ebc360e21b14620024025760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b6064820152608401620006fd565b6000808080808080806200241a8a6004818e62003497565b810190620024299190620035cc565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200246d5760405162461bcd60e51b8152600401620006fd906200351e565b6001600160a01b0387163014620024985760405162461bcd60e51b8152600401620006fd906200357b565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f16916200252191906200302a565b6000604051808303816000865af19150503d806000811462002560576040519150601f19603f3d011682016040523d82523d6000602084013e62002565565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d7c9085906323b872dd60e01b9060840162001f18565b600062002609826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620026929092919063ffffffff16565b80519091501562001f5057808060200190518101906200262a91906200318d565b62001f505760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006fd565b6020015190565b6060620009d2848460008585600080866001600160a01b03168587604051620026bc91906200302a565b60006040518083038185875af1925050503d8060008114620026fb576040519150601f19603f3d011682016040523d82523d6000602084013e62002700565b606091505b509150915062002713878383876200271e565b979650505050505050565b60608315620027925782516000036200278a576001600160a01b0385163b6200278a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006fd565b5081620009d2565b620009d28383815115620027a95781518083602001fd5b8060405162461bcd60e51b8152600401620006fd919062003658565b611557806200366e83390190565b6001600160a01b03811681146200160657600080fd5b8035620027f681620027d3565b919050565b803563ffffffff81168114620027f657600080fd5b60008083601f8401126200282357600080fd5b50813567ffffffffffffffff8111156200283c57600080fd5b6020830191508360208285010111156200285557600080fd5b9250929050565b60008060008060008060a087890312156200287657600080fd5b86356200288381620027d3565b95506200289360208801620027fb565b94506040870135620028a581620027d3565b935060608701359250608087013567ffffffffffffffff811115620028c957600080fd5b620028d789828a0162002810565b979a9699509497509295939492505050565b60008060408385031215620028fd57600080fd5b6200290883620027fb565b915060208301356200291a81620027d3565b809150509250929050565b6000602082840312156200293857600080fd5b5035919050565b6000602082840312156200295257600080fd5b6200295d82620027fb565b9392505050565b6000602082840312156200297757600080fd5b81356200295d81620027d3565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620029c657620029c662002984565b604052919050565b600082601f830112620029e057600080fd5b8135602067ffffffffffffffff821115620029ff57620029ff62002984565b8160051b62002a108282016200299a565b928352848101820192828101908785111562002a2b57600080fd5b83870192505b84831015620027135782358252918301919083019062002a31565b6000806000806080858703121562002a6357600080fd5b84359350602085013567ffffffffffffffff8082111562002a8357600080fd5b62002a9188838901620029ce565b945060408701359150808216821462002aa957600080fd5b509396929550929360600135925050565b60ff811681146200160657600080fd5b600080600080600080600060e0888a03121562002ae657600080fd5b873562002af38162002aba565b965062002b0360208901620027fb565b9550604088013562002b1581620027d3565b945062002b2560608901620027fb565b9350608088013562002b3781620027d3565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002b715762002b7162002984565b50601f01601f191660200190565b600082601f83011262002b9157600080fd5b813562002ba862002ba28262002b54565b6200299a565b81815284602083860101111562002bbe57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002bfc57600080fd5b8a3567ffffffffffffffff8082111562002c1557600080fd5b62002c238e838f01620029ce565b9b5062002c3360208e01620027fb565b9a5060408d0135995060608d0135985062002c5160808e01620027fb565b975062002c6160a08e01620027e9565b965062002c7160c08e01620027fb565b955062002c8160e08e01620027e9565b94506101008d013593506101208d013591508082111562002ca157600080fd5b5062002cb08d828e0162002b7f565b9150509295989b9194979a5092959850565b60008060006060848603121562002cd857600080fd5b62002ce384620027fb565b9250602084013562002cf581620027d3565b9150604084013562002d0781620027d3565b809150509250925092565b600080600080600080600060a0888a03121562002d2e57600080fd5b62002d3988620027fb565b9650602088013562002d4b81620027d3565b9550604088013567ffffffffffffffff8082111562002d6957600080fd5b62002d778b838c0162002810565b909750955060608a013591508082111562002d9157600080fd5b5062002da08a828b0162002810565b909450925050608088013562002db68162002aba565b8091505092959891949750929550565b60008060006060848603121562002ddc57600080fd5b62002de784620027fb565b9250602084013562002df981620027d3565b9150604084013567ffffffffffffffff81111562002e1657600080fd5b62002e248682870162002b7f565b9150509250925092565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002f095762002f0962002ecb565b500490565b60006001820162002f235762002f2362002ee1565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002faf57818101518382015260200162002f95565b8381111562000d7c5750506000910152565b6000815180845262002fdb81602086016020860162002f92565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff83166020820152606060408201819052600090620030219083018462002fc1565b95945050505050565b600082516200303e81846020870162002f92565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f8301126200309157600080fd5b8151620030a262002ba28262002b54565b818152846020838601011115620030b857600080fd5b620009d282602083016020870162002f92565b600080600060608486031215620030e157600080fd5b835167ffffffffffffffff80821115620030fa57600080fd5b62003108878388016200307f565b945060208601519150808211156200311f57600080fd5b506200312e868287016200307f565b925050604084015162002d078162002aba565b60608152600062003156606083018662002fc1565b82810360208401526200316a818662002fc1565b91505060ff83166040830152949350505050565b80151581146200160657600080fd5b600060208284031215620031a057600080fd5b81516200295d816200317e565b600082620031bf57620031bf62002ecb565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003203606083018789620031c4565b828103602084015262003218818688620031c4565b91505060ff831660408301529695505050505050565b600083516200324281846020880162002f92565b8351908301906200325881836020880162002f92565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032b58483018762002fc1565b925080851660e085015250509998505050505050505050565b600060208284031215620032e157600080fd5b815167ffffffffffffffff811115620032f957600080fd5b620009d2848285016200307f565b6000602082840312156200331a57600080fd5b81516200295d8162002aba565b6000602082840312156200333a57600080fd5b5051919050565b600181815b808511156200338257816000190482111562003366576200336662002ee1565b808516156200337457918102915b93841c939080029062003346565b509250929050565b6000826200339b57506001620007a4565b81620033aa57506000620007a4565b8160018114620033c35760028114620033ce57620033ee565b6001915050620007a4565b60ff841115620033e257620033e262002ee1565b50506001821b620007a4565b5060208310610133831016604e8410600b841016171562003413575081810a620007a4565b6200341f838362003341565b806000190482111562003436576200343662002ee1565b029392505050565b60006200295d83836200338a565b60008282101562003461576200346162002ee1565b500390565b600082198211156200347c576200347c62002ee1565b500190565b634e487b7160e01b600052600160045260246000fd5b60008085851115620034a857600080fd5b83861115620034b657600080fd5b5050820193919092039150565b600080600080600080600060e0888a031215620034df57600080fd5b8735620034ec81620027d3565b96506020880135620034fe81620027d3565b95506040880135945060608801359350608088013562002b378162002aba565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b600080600080600080600080610100898b031215620035ea57600080fd5b8835620035f781620027d3565b975060208901356200360981620027d3565b96506040890135955060608901359450608089013562003629816200317e565b935060a08901356200363b8162002aba565b979a969950949793969295929450505060c08201359160e0013590565b6020815260006200295d602083018462002fc156fe60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea2646970667358221220906ea48f19088f63dbf7270e029d0db2a116bfdc48421c0afa81f84f29beb83f64736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220dede2c0e5ac340c975f0209bf91c3275d9290d561a441f9001d1ccfdad83fc9d64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50614bfa806100206000396000f3fe608060405260043610620001f35760003560e01c80637b6323c1116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b80637b6323c1146200045e57806381b1c17414620004835780638da5cb5b14620004bd57600080fd5b8063318aee3d116200018d5780633e19704311620001585780633e19704314620003d75780634638554914620003fc578063647c576c1462000421578063715018a6146200044657600080fd5b8063318aee3d146200030957806334ac9cf214620003785780633ae05047146200039a5780633da8168214620003b257600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f6200020936600462002839565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f6200071e565b3480156200026757600080fd5b506200027f62000279366004620028c6565b62000757565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002902565b620007aa565b348015620002ca57600080fd5b506200020f620002dc3660046200291c565b620007b9565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002941565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b506027546200027f906001600160a01b031681565b348015620003a757600080fd5b50620002fa620007e5565b348015620003bf57600080fd5b506200022d620003d136600462002a29565b620008d8565b348015620003e457600080fd5b50620002fa620003f636600462002aa7565b620009da565b3480156200040957600080fd5b506200020f6200041b36600462002bb8565b62000a67565b3480156200042e57600080fd5b506200020f6200044036600462002c9f565b62000c0d565b3480156200045357600080fd5b506200020f62000d82565b3480156200046b57600080fd5b506200020f6200047d36600462002bb8565b62000d98565b3480156200049057600080fd5b506200027f620004a236600462002902565b6024602052600090815260409020546001600160a01b031681565b348015620004ca57600080fd5b50605a546001600160a01b03166200027f565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002902565b62001221565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002cef565b62001266565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002da3565b6200137d565b348015620005e957600080fd5b506200020f6200152f565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002902565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002941565b62001566565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007065760405162461bcd60e51b815260206004820152604760248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b62000716868686868686620015e5565b505050505050565b6027546001600160a01b031633146200074b5760405162461bcd60e51b8152600401620006fd9062002e0b565b6200075562001a76565b565b60006024600084846040516020016200077292919062002e68565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b462001ad4565b608c55565b620007c362001ad4565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008cf57826001166001036200085057600181602081106200081c576200081c62002e92565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200087d565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088a60028462002ed4565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c69062002eeb565b915050620007f0565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009cb5781600116600103620009555786818151811062000913576200091362002e92565b60200260200101518360405160200162000937929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009a7565b828782815181106200096b576200096b62002e92565b60200260200101516040516020016200098e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b460028362002ed4565b915080620009c28162002eeb565b915050620008e8565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a8d5760405162461bcd60e51b8152600401620006fd9062002f07565b62000aa38a8a8a8a8a8a8a8a8a8a600162001b30565b62000ab48963ffffffff1662001dc1565b6000836001600160a01b03168387898560405160240162000ad89392919062002fcc565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b0f919062003007565b60006040518083038185875af1925050503d806000811462000b4e576040519150601f19603f3d011682016040523d82523d6000602084013e62000b53565b606091505b505090508062000bbf5760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e8813595cdcd859d94819985a5b195960821b6064820152608401620006fd565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bf895949392919062003025565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c2e5750600054600160ff909116105b8062000c4a5750303b15801562000c4a575060005460ff166001145b62000caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006fd565b6000805460ff19166001179055801562000cd3576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d3562001e03565b801562000d7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8c62001ad4565b62000755600062001e76565b60225460ff161562000dbe5760405162461bcd60e51b8152600401620006fd9062002f07565b62000dd48a8a8a8a8a8a8a8a8a8a600062001b30565b62000de58963ffffffff1662001dc1565b6001600160a01b03851662000edc57604080516000808252602082019092526001600160a01b03851690849060405162000e20919062003007565b60006040518083038185875af1925050503d806000811462000e5f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e64565b606091505b505090508062000ed55760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a20604482015274115d1a195c881d1c985b9cd9995c8819985a5b1959605a1b6064820152608401620006fd565b50620011d4565b60225463ffffffff61010090910481169087160362000f115762000f0b6001600160a01b038616848462001ec8565b620011d4565b6000868660405160200162000f2892919062002e68565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200116c5760008060008580602001905181019062000f7a9190620030a8565b92509250925060008584848460405162000f9490620027a2565b62000fa2939291906200311e565b8190604051809103906000f590508015801562000fc3573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f1990604401600060405180830381600087803b1580156200101357600080fd5b505af115801562001028573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200115a9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011d1565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f1990604401600060405180830381600087803b158015620011b757600080fd5b505af1158015620011cc573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200120d95949392919062003025565b60405180910390a150505050505050505050565b600080620012326101008462002ed4565b9050600062001244610100856200315b565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200127e92919062002e68565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012b190620027a2565b601f1982820381018352601f909101166040819052620012de908d908d908d908d908d906020016200319b565b60408051601f1981840301815290829052620012fe9291602001620031dc565b604051602081830303815290604052805190602001206040516020016200135794939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013a35760405162461bcd60e51b8152600401620006fd9062002f07565b60225463ffffffff6101009091048116908416036200142b5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044657374696e6174696f6e2063616e6e6f7420626520697473656c66006064820152608401620006fd565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff1633868634876021546040516200147f9897969594939291906200320f565b60405180910390a1620014bc620014b66001602260019054906101000a900463ffffffff16338787348880519060200120620009da565b62001f32565b6026546001600160a01b03166333d6247d620014d7620007e5565b6040518263ffffffff1660e01b8152600401620014f691815260200190565b600060405180830381600087803b1580156200151157600080fd5b505af115801562001526573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b031633146200155c5760405162461bcd60e51b8152600401620006fd9062002e0b565b620007556200207e565b6200157062001ad4565b6001600160a01b038116620015d75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006fd565b620015e28162001e76565b50565b60225460ff16156200160b5760405162461bcd60e51b8152600401620006fd9062002f07565b60225463ffffffff610100909104811690861603620016935760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044657374696e6174696f6e2063616e6e6f7420626520697473656c660000006064820152608401620006fd565b60008060606001600160a01b03891662001736578534146200172c5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a908201527f20616d6f756e7420646f6573206e6f74206d61746368206d6573736167652e76606482015263616c756560e01b608482015260a401620006fd565b6000915062001996565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620017f357604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac90604401600060405180830381600087803b158015620017c657600080fd5b505af1158015620017db573d6000803e3d6000fd5b50505050806020015193508060000151925062001994565b84156200180857620018088a8888886200212d565b6200181f6001600160a01b038b1633308a62002555565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001876573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018a091908101906200327c565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620018df573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200190991908101906200327c565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001948573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200196e9190620032b5565b60405160200162001982939291906200311e565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b87602154604051620019d89897969594939291906200320f565b60405180910390a1620019fd620014b6600084868c8c8c8880519060200120620009da565b6026546001600160a01b03166333d6247d62001a18620007e5565b6040518263ffffffff1660e01b815260040162001a3791815260200190565b600060405180830381600087803b15801562001a5257600080fd5b505af115801562001a67573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001a9c5760405162461bcd60e51b8152600401620006fd9062002f07565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006fd565b62001b418a63ffffffff1662001221565b1562001b985760405162461bcd60e51b8152602060048201526030602482015260008051602062004ba583398151915260448201526f08105b1c9958591e4818db185a5b595960821b6064820152608401620006fd565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001c0c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c329190620032d5565b90508060000362001c9b5760405162461bcd60e51b8152602060048201526037602482015260008051602062004ba583398151915260448201527f20476c6f62616c45786974526f6f7420696e76616c69640000000000000000006064820152608401620006fd565b60225463ffffffff878116610100909204161462001d1d5760405162461bcd60e51b8152602060048201526043602482015260008051602062004ba583398151915260448201527f2044657374696e6174696f6e206e6574776f726b20646f6573206e6f74206d616064820152620e8c6d60eb1b608482015260a401620006fd565b602254600090610100900463ffffffff1662001d3b57508862001d3e565b50895b62001d6962001d5a848b8b8b8b8b8b80519060200120620009da565b8e8e63ffffffff1684620008d8565b62001a675760405162461bcd60e51b8152602060048201526032602482015260008051602062004ba58339815191526044820152711024b73b30b634b21039b6ba10383937b7b360711b6064820152608401620006fd565b600062001dd16101008362002ed4565b9050600062001de3610100846200315b565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001e705760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006fd565b62000755335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001f2d90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526200258f565b505050565b80600162001f4360206002620033ec565b62001f4f9190620033fa565b6021541062001fb45760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d65726b6c65604482015269081d1c995948199d5b1b60b21b6064820152608401620006fd565b60016021600082825462001fc9919062003414565b909155505060215460005b60208110156200207357816001166001036200200957826001826020811062002001576200200162002e92565b015550505050565b600181602081106200201f576200201f62002e92565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200205c919062002ed4565b9150806200206a8162002eeb565b91505062001fd4565b5062001f2d6200342f565b60225460ff16620020f85760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006fd565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200217083838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200266892505050565b9050632afa533160e01b6001600160e01b031982160162002369576000808080808080620021a2896004818d62003445565b810190620021b1919062003471565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620021f35760405162461bcd60e51b8152600401620006fd90620034cc565b6001600160a01b03861630146200221e5760405162461bcd60e51b8152600401620006fd9062003529565b8a8514620022955760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260448201527f6d697420616d6f756e7420646f6573206e6f74206d61746368000000000000006064820152608401620006fd565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162002315919062003007565b6000604051808303816000865af19150503d806000811462002354576040519150601f19603f3d011682016040523d82523d6000602084013e62002359565b606091505b505050505050505050506200254e565b6001600160e01b031981166323f2ebc360e21b14620023df5760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e6f7460448201526a081d985b1a590818d85b1b60aa1b6064820152608401620006fd565b600080808080808080620023f78a6004818e62003445565b8101906200240691906200358b565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200244a5760405162461bcd60e51b8152600401620006fd90620034cc565b6001600160a01b0387163014620024755760405162461bcd60e51b8152600401620006fd9062003529565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f1691620024fe919062003007565b6000604051808303816000865af19150503d80600081146200253d576040519150601f19603f3d011682016040523d82523d6000602084013e62002542565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d7c9085906323b872dd60e01b9060840162001ef5565b6000620025e6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166200266f9092919063ffffffff16565b80519091501562001f2d578080602001905181019062002607919062003617565b62001f2d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006fd565b6020015190565b6060620009d2848460008585600080866001600160a01b0316858760405162002699919062003007565b60006040518083038185875af1925050503d8060008114620026d8576040519150601f19603f3d011682016040523d82523d6000602084013e620026dd565b606091505b5091509150620026f087838387620026fb565b979650505050505050565b606083156200276f57825160000362002767576001600160a01b0385163b620027675760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006fd565b5081620009d2565b620009d28383815115620027865781518083602001fd5b8060405162461bcd60e51b8152600401620006fd919062003637565b611558806200364d83390190565b6001600160a01b0381168114620015e257600080fd5b8035620027d381620027b0565b919050565b803563ffffffff81168114620027d357600080fd5b60008083601f8401126200280057600080fd5b50813567ffffffffffffffff8111156200281957600080fd5b6020830191508360208285010111156200283257600080fd5b9250929050565b60008060008060008060a087890312156200285357600080fd5b86356200286081620027b0565b95506200287060208801620027d8565b945060408701356200288281620027b0565b935060608701359250608087013567ffffffffffffffff811115620028a657600080fd5b620028b489828a01620027ed565b979a9699509497509295939492505050565b60008060408385031215620028da57600080fd5b620028e583620027d8565b91506020830135620028f781620027b0565b809150509250929050565b6000602082840312156200291557600080fd5b5035919050565b6000602082840312156200292f57600080fd5b6200293a82620027d8565b9392505050565b6000602082840312156200295457600080fd5b81356200293a81620027b0565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620029a357620029a362002961565b604052919050565b600082601f830112620029bd57600080fd5b8135602067ffffffffffffffff821115620029dc57620029dc62002961565b8160051b620029ed82820162002977565b928352848101820192828101908785111562002a0857600080fd5b83870192505b84831015620026f05782358252918301919083019062002a0e565b6000806000806080858703121562002a4057600080fd5b84359350602085013567ffffffffffffffff8082111562002a6057600080fd5b62002a6e88838901620029ab565b945060408701359150808216821462002a8657600080fd5b509396929550929360600135925050565b60ff81168114620015e257600080fd5b600080600080600080600060e0888a03121562002ac357600080fd5b873562002ad08162002a97565b965062002ae060208901620027d8565b9550604088013562002af281620027b0565b945062002b0260608901620027d8565b9350608088013562002b1481620027b0565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002b4e5762002b4e62002961565b50601f01601f191660200190565b600082601f83011262002b6e57600080fd5b813562002b8562002b7f8262002b31565b62002977565b81815284602083860101111562002b9b57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002bd957600080fd5b8a3567ffffffffffffffff8082111562002bf257600080fd5b62002c008e838f01620029ab565b9b5062002c1060208e01620027d8565b9a5060408d0135995060608d0135985062002c2e60808e01620027d8565b975062002c3e60a08e01620027c6565b965062002c4e60c08e01620027d8565b955062002c5e60e08e01620027c6565b94506101008d013593506101208d013591508082111562002c7e57600080fd5b5062002c8d8d828e0162002b5c565b9150509295989b9194979a5092959850565b60008060006060848603121562002cb557600080fd5b62002cc084620027d8565b9250602084013562002cd281620027b0565b9150604084013562002ce481620027b0565b809150509250925092565b600080600080600080600060a0888a03121562002d0b57600080fd5b62002d1688620027d8565b9650602088013562002d2881620027b0565b9550604088013567ffffffffffffffff8082111562002d4657600080fd5b62002d548b838c01620027ed565b909750955060608a013591508082111562002d6e57600080fd5b5062002d7d8a828b01620027ed565b909450925050608088013562002d938162002a97565b8091505092959891949750929550565b60008060006060848603121562002db957600080fd5b62002dc484620027d8565b9250602084013562002dd681620027b0565b9150604084013567ffffffffffffffff81111562002df357600080fd5b62002e018682870162002b5c565b9150509250925092565b6020808252603a908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e5a6b45564d20636f6e7472616374000000000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002ee65762002ee662002ea8565b500490565b60006001820162002f005762002f0062002ebe565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002f8c57818101518382015260200162002f72565b8381111562000d7c5750506000910152565b6000815180845262002fb881602086016020860162002f6f565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002ffe9083018462002f9e565b95945050505050565b600082516200301b81846020870162002f6f565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f8301126200306e57600080fd5b81516200307f62002b7f8262002b31565b8181528460208386010111156200309557600080fd5b620009d282602083016020870162002f6f565b600080600060608486031215620030be57600080fd5b835167ffffffffffffffff80821115620030d757600080fd5b620030e5878388016200305c565b94506020860151915080821115620030fc57600080fd5b506200310b868287016200305c565b925050604084015162002ce48162002a97565b60608152600062003133606083018662002f9e565b828103602084015262003147818662002f9e565b91505060ff83166040830152949350505050565b6000826200316d576200316d62002ea8565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b606081526000620031b160608301878962003172565b8281036020840152620031c681868862003172565b91505060ff831660408301529695505050505050565b60008351620031f081846020880162002f6f565b8351908301906200320681836020880162002f6f565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032638483018762002f9e565b925080851660e085015250509998505050505050505050565b6000602082840312156200328f57600080fd5b815167ffffffffffffffff811115620032a757600080fd5b620009d2848285016200305c565b600060208284031215620032c857600080fd5b81516200293a8162002a97565b600060208284031215620032e857600080fd5b5051919050565b600181815b808511156200333057816000190482111562003314576200331462002ebe565b808516156200332257918102915b93841c9390800290620032f4565b509250929050565b6000826200334957506001620007a4565b816200335857506000620007a4565b81600181146200337157600281146200337c576200339c565b6001915050620007a4565b60ff84111562003390576200339062002ebe565b50506001821b620007a4565b5060208310610133831016604e8410600b8410161715620033c1575081810a620007a4565b620033cd8383620032ef565b8060001904821115620033e457620033e462002ebe565b029392505050565b60006200293a838362003338565b6000828210156200340f576200340f62002ebe565b500390565b600082198211156200342a576200342a62002ebe565b500190565b634e487b7160e01b600052600160045260246000fd5b600080858511156200345657600080fd5b838611156200346457600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200348d57600080fd5b87356200349a81620027b0565b96506020880135620034ac81620027b0565b95506040880135945060608801359350608088013562002b148162002a97565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260408201527f6d6974206f776e6572206d757374206265207468652073656e64657200000000606082015260800190565b60208082526033908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205370656040820152726e646572206d7573742062652027746869732760681b606082015260800190565b8015158114620015e257600080fd5b600080600080600080600080610100898b031215620035a957600080fd5b8835620035b681620027b0565b97506020890135620035c881620027b0565b965060408901359550606089013594506080890135620035e8816200357c565b935060a0890135620035fa8162002a97565b979a969950949793969295929450505060c08201359160e0013590565b6000602082840312156200362a57600080fd5b81516200293a816200357c565b6020815260006200293a602083018462002f9e56fe60c06040523480156200001157600080fd5b5060405162001558380380620015588339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109e620004ba60003960006104690152600081816102f90152610433015261109e6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866106638361104f565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161106157611061610fd1565b506001019056fea26469706673582212205af0e6dd4760d4ae367515578b46c4d5988b10ae47473e817626188baa0c03a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212206cce8df71878468ba72b63f3287ba5f1cce872064668f13a7884995ba2e36bd864736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001f35760003560e01c80637b6323c1116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b80637b6323c1146200045e57806381b1c17414620004835780638da5cb5b14620004bd57600080fd5b8063318aee3d116200018d5780633e19704311620001585780633e19704314620003d75780634638554914620003fc578063647c576c1462000421578063715018a6146200044657600080fd5b8063318aee3d146200030957806334ac9cf214620003785780633ae05047146200039a5780633da8168214620003b257600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f6200020936600462002839565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f6200071e565b3480156200026757600080fd5b506200027f62000279366004620028c6565b62000757565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002902565b620007aa565b348015620002ca57600080fd5b506200020f620002dc3660046200291c565b620007b9565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002941565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b506027546200027f906001600160a01b031681565b348015620003a757600080fd5b50620002fa620007e5565b348015620003bf57600080fd5b506200022d620003d136600462002a29565b620008d8565b348015620003e457600080fd5b50620002fa620003f636600462002aa7565b620009da565b3480156200040957600080fd5b506200020f6200041b36600462002bb8565b62000a67565b3480156200042e57600080fd5b506200020f6200044036600462002c9f565b62000c0d565b3480156200045357600080fd5b506200020f62000d82565b3480156200046b57600080fd5b506200020f6200047d36600462002bb8565b62000d98565b3480156200049057600080fd5b506200027f620004a236600462002902565b6024602052600090815260409020546001600160a01b031681565b348015620004ca57600080fd5b50605a546001600160a01b03166200027f565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002902565b62001221565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002cef565b62001266565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002da3565b6200137d565b348015620005e957600080fd5b506200020f6200152f565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002902565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002941565b62001566565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007065760405162461bcd60e51b815260206004820152604760248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b62000716868686868686620015e5565b505050505050565b6027546001600160a01b031633146200074b5760405162461bcd60e51b8152600401620006fd9062002e0b565b6200075562001a76565b565b60006024600084846040516020016200077292919062002e68565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b462001ad4565b608c55565b620007c362001ad4565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008cf57826001166001036200085057600181602081106200081c576200081c62002e92565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200087d565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088a60028462002ed4565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c69062002eeb565b915050620007f0565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009cb5781600116600103620009555786818151811062000913576200091362002e92565b60200260200101518360405160200162000937929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009a7565b828782815181106200096b576200096b62002e92565b60200260200101516040516020016200098e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b460028362002ed4565b915080620009c28162002eeb565b915050620008e8565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a8d5760405162461bcd60e51b8152600401620006fd9062002f07565b62000aa38a8a8a8a8a8a8a8a8a8a600162001b30565b62000ab48963ffffffff1662001dc1565b6000836001600160a01b03168387898560405160240162000ad89392919062002fcc565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b0f919062003007565b60006040518083038185875af1925050503d806000811462000b4e576040519150601f19603f3d011682016040523d82523d6000602084013e62000b53565b606091505b505090508062000bbf5760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e8813595cdcd859d94819985a5b195960821b6064820152608401620006fd565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bf895949392919062003025565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c2e5750600054600160ff909116105b8062000c4a5750303b15801562000c4a575060005460ff166001145b62000caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006fd565b6000805460ff19166001179055801562000cd3576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d3562001e03565b801562000d7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8c62001ad4565b62000755600062001e76565b60225460ff161562000dbe5760405162461bcd60e51b8152600401620006fd9062002f07565b62000dd48a8a8a8a8a8a8a8a8a8a600062001b30565b62000de58963ffffffff1662001dc1565b6001600160a01b03851662000edc57604080516000808252602082019092526001600160a01b03851690849060405162000e20919062003007565b60006040518083038185875af1925050503d806000811462000e5f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e64565b606091505b505090508062000ed55760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a20604482015274115d1a195c881d1c985b9cd9995c8819985a5b1959605a1b6064820152608401620006fd565b50620011d4565b60225463ffffffff61010090910481169087160362000f115762000f0b6001600160a01b038616848462001ec8565b620011d4565b6000868660405160200162000f2892919062002e68565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200116c5760008060008580602001905181019062000f7a9190620030a8565b92509250925060008584848460405162000f9490620027a2565b62000fa2939291906200311e565b8190604051809103906000f590508015801562000fc3573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f1990604401600060405180830381600087803b1580156200101357600080fd5b505af115801562001028573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200115a9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011d1565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f1990604401600060405180830381600087803b158015620011b757600080fd5b505af1158015620011cc573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200120d95949392919062003025565b60405180910390a150505050505050505050565b600080620012326101008462002ed4565b9050600062001244610100856200315b565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200127e92919062002e68565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012b190620027a2565b601f1982820381018352601f909101166040819052620012de908d908d908d908d908d906020016200319b565b60408051601f1981840301815290829052620012fe9291602001620031dc565b604051602081830303815290604052805190602001206040516020016200135794939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013a35760405162461bcd60e51b8152600401620006fd9062002f07565b60225463ffffffff6101009091048116908416036200142b5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044657374696e6174696f6e2063616e6e6f7420626520697473656c66006064820152608401620006fd565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff1633868634876021546040516200147f9897969594939291906200320f565b60405180910390a1620014bc620014b66001602260019054906101000a900463ffffffff16338787348880519060200120620009da565b62001f32565b6026546001600160a01b03166333d6247d620014d7620007e5565b6040518263ffffffff1660e01b8152600401620014f691815260200190565b600060405180830381600087803b1580156200151157600080fd5b505af115801562001526573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b031633146200155c5760405162461bcd60e51b8152600401620006fd9062002e0b565b620007556200207e565b6200157062001ad4565b6001600160a01b038116620015d75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006fd565b620015e28162001e76565b50565b60225460ff16156200160b5760405162461bcd60e51b8152600401620006fd9062002f07565b60225463ffffffff610100909104811690861603620016935760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044657374696e6174696f6e2063616e6e6f7420626520697473656c660000006064820152608401620006fd565b60008060606001600160a01b03891662001736578534146200172c5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a908201527f20616d6f756e7420646f6573206e6f74206d61746368206d6573736167652e76606482015263616c756560e01b608482015260a401620006fd565b6000915062001996565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620017f357604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac90604401600060405180830381600087803b158015620017c657600080fd5b505af1158015620017db573d6000803e3d6000fd5b50505050806020015193508060000151925062001994565b84156200180857620018088a8888886200212d565b6200181f6001600160a01b038b1633308a62002555565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001876573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018a091908101906200327c565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620018df573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200190991908101906200327c565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001948573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200196e9190620032b5565b60405160200162001982939291906200311e565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b87602154604051620019d89897969594939291906200320f565b60405180910390a1620019fd620014b6600084868c8c8c8880519060200120620009da565b6026546001600160a01b03166333d6247d62001a18620007e5565b6040518263ffffffff1660e01b815260040162001a3791815260200190565b600060405180830381600087803b15801562001a5257600080fd5b505af115801562001a67573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001a9c5760405162461bcd60e51b8152600401620006fd9062002f07565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006fd565b62001b418a63ffffffff1662001221565b1562001b985760405162461bcd60e51b8152602060048201526030602482015260008051602062004ba583398151915260448201526f08105b1c9958591e4818db185a5b595960821b6064820152608401620006fd565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001c0c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c329190620032d5565b90508060000362001c9b5760405162461bcd60e51b8152602060048201526037602482015260008051602062004ba583398151915260448201527f20476c6f62616c45786974526f6f7420696e76616c69640000000000000000006064820152608401620006fd565b60225463ffffffff878116610100909204161462001d1d5760405162461bcd60e51b8152602060048201526043602482015260008051602062004ba583398151915260448201527f2044657374696e6174696f6e206e6574776f726b20646f6573206e6f74206d616064820152620e8c6d60eb1b608482015260a401620006fd565b602254600090610100900463ffffffff1662001d3b57508862001d3e565b50895b62001d6962001d5a848b8b8b8b8b8b80519060200120620009da565b8e8e63ffffffff1684620008d8565b62001a675760405162461bcd60e51b8152602060048201526032602482015260008051602062004ba58339815191526044820152711024b73b30b634b21039b6ba10383937b7b360711b6064820152608401620006fd565b600062001dd16101008362002ed4565b9050600062001de3610100846200315b565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001e705760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006fd565b62000755335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001f2d90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526200258f565b505050565b80600162001f4360206002620033ec565b62001f4f9190620033fa565b6021541062001fb45760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d65726b6c65604482015269081d1c995948199d5b1b60b21b6064820152608401620006fd565b60016021600082825462001fc9919062003414565b909155505060215460005b60208110156200207357816001166001036200200957826001826020811062002001576200200162002e92565b015550505050565b600181602081106200201f576200201f62002e92565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200205c919062002ed4565b9150806200206a8162002eeb565b91505062001fd4565b5062001f2d6200342f565b60225460ff16620020f85760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006fd565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200217083838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200266892505050565b9050632afa533160e01b6001600160e01b031982160162002369576000808080808080620021a2896004818d62003445565b810190620021b1919062003471565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620021f35760405162461bcd60e51b8152600401620006fd90620034cc565b6001600160a01b03861630146200221e5760405162461bcd60e51b8152600401620006fd9062003529565b8a8514620022955760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260448201527f6d697420616d6f756e7420646f6573206e6f74206d61746368000000000000006064820152608401620006fd565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162002315919062003007565b6000604051808303816000865af19150503d806000811462002354576040519150601f19603f3d011682016040523d82523d6000602084013e62002359565b606091505b505050505050505050506200254e565b6001600160e01b031981166323f2ebc360e21b14620023df5760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e6f7460448201526a081d985b1a590818d85b1b60aa1b6064820152608401620006fd565b600080808080808080620023f78a6004818e62003445565b8101906200240691906200358b565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200244a5760405162461bcd60e51b8152600401620006fd90620034cc565b6001600160a01b0387163014620024755760405162461bcd60e51b8152600401620006fd9062003529565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f1691620024fe919062003007565b6000604051808303816000865af19150503d80600081146200253d576040519150601f19603f3d011682016040523d82523d6000602084013e62002542565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d7c9085906323b872dd60e01b9060840162001ef5565b6000620025e6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166200266f9092919063ffffffff16565b80519091501562001f2d578080602001905181019062002607919062003617565b62001f2d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006fd565b6020015190565b6060620009d2848460008585600080866001600160a01b0316858760405162002699919062003007565b60006040518083038185875af1925050503d8060008114620026d8576040519150601f19603f3d011682016040523d82523d6000602084013e620026dd565b606091505b5091509150620026f087838387620026fb565b979650505050505050565b606083156200276f57825160000362002767576001600160a01b0385163b620027675760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006fd565b5081620009d2565b620009d28383815115620027865781518083602001fd5b8060405162461bcd60e51b8152600401620006fd919062003637565b611558806200364d83390190565b6001600160a01b0381168114620015e257600080fd5b8035620027d381620027b0565b919050565b803563ffffffff81168114620027d357600080fd5b60008083601f8401126200280057600080fd5b50813567ffffffffffffffff8111156200281957600080fd5b6020830191508360208285010111156200283257600080fd5b9250929050565b60008060008060008060a087890312156200285357600080fd5b86356200286081620027b0565b95506200287060208801620027d8565b945060408701356200288281620027b0565b935060608701359250608087013567ffffffffffffffff811115620028a657600080fd5b620028b489828a01620027ed565b979a9699509497509295939492505050565b60008060408385031215620028da57600080fd5b620028e583620027d8565b91506020830135620028f781620027b0565b809150509250929050565b6000602082840312156200291557600080fd5b5035919050565b6000602082840312156200292f57600080fd5b6200293a82620027d8565b9392505050565b6000602082840312156200295457600080fd5b81356200293a81620027b0565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620029a357620029a362002961565b604052919050565b600082601f830112620029bd57600080fd5b8135602067ffffffffffffffff821115620029dc57620029dc62002961565b8160051b620029ed82820162002977565b928352848101820192828101908785111562002a0857600080fd5b83870192505b84831015620026f05782358252918301919083019062002a0e565b6000806000806080858703121562002a4057600080fd5b84359350602085013567ffffffffffffffff8082111562002a6057600080fd5b62002a6e88838901620029ab565b945060408701359150808216821462002a8657600080fd5b509396929550929360600135925050565b60ff81168114620015e257600080fd5b600080600080600080600060e0888a03121562002ac357600080fd5b873562002ad08162002a97565b965062002ae060208901620027d8565b9550604088013562002af281620027b0565b945062002b0260608901620027d8565b9350608088013562002b1481620027b0565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002b4e5762002b4e62002961565b50601f01601f191660200190565b600082601f83011262002b6e57600080fd5b813562002b8562002b7f8262002b31565b62002977565b81815284602083860101111562002b9b57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002bd957600080fd5b8a3567ffffffffffffffff8082111562002bf257600080fd5b62002c008e838f01620029ab565b9b5062002c1060208e01620027d8565b9a5060408d0135995060608d0135985062002c2e60808e01620027d8565b975062002c3e60a08e01620027c6565b965062002c4e60c08e01620027d8565b955062002c5e60e08e01620027c6565b94506101008d013593506101208d013591508082111562002c7e57600080fd5b5062002c8d8d828e0162002b5c565b9150509295989b9194979a5092959850565b60008060006060848603121562002cb557600080fd5b62002cc084620027d8565b9250602084013562002cd281620027b0565b9150604084013562002ce481620027b0565b809150509250925092565b600080600080600080600060a0888a03121562002d0b57600080fd5b62002d1688620027d8565b9650602088013562002d2881620027b0565b9550604088013567ffffffffffffffff8082111562002d4657600080fd5b62002d548b838c01620027ed565b909750955060608a013591508082111562002d6e57600080fd5b5062002d7d8a828b01620027ed565b909450925050608088013562002d938162002a97565b8091505092959891949750929550565b60008060006060848603121562002db957600080fd5b62002dc484620027d8565b9250602084013562002dd681620027b0565b9150604084013567ffffffffffffffff81111562002df357600080fd5b62002e018682870162002b5c565b9150509250925092565b6020808252603a908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e5a6b45564d20636f6e7472616374000000000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002ee65762002ee662002ea8565b500490565b60006001820162002f005762002f0062002ebe565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002f8c57818101518382015260200162002f72565b8381111562000d7c5750506000910152565b6000815180845262002fb881602086016020860162002f6f565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002ffe9083018462002f9e565b95945050505050565b600082516200301b81846020870162002f6f565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f8301126200306e57600080fd5b81516200307f62002b7f8262002b31565b8181528460208386010111156200309557600080fd5b620009d282602083016020870162002f6f565b600080600060608486031215620030be57600080fd5b835167ffffffffffffffff80821115620030d757600080fd5b620030e5878388016200305c565b94506020860151915080821115620030fc57600080fd5b506200310b868287016200305c565b925050604084015162002ce48162002a97565b60608152600062003133606083018662002f9e565b828103602084015262003147818662002f9e565b91505060ff83166040830152949350505050565b6000826200316d576200316d62002ea8565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b606081526000620031b160608301878962003172565b8281036020840152620031c681868862003172565b91505060ff831660408301529695505050505050565b60008351620031f081846020880162002f6f565b8351908301906200320681836020880162002f6f565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032638483018762002f9e565b925080851660e085015250509998505050505050505050565b6000602082840312156200328f57600080fd5b815167ffffffffffffffff811115620032a757600080fd5b620009d2848285016200305c565b600060208284031215620032c857600080fd5b81516200293a8162002a97565b600060208284031215620032e857600080fd5b5051919050565b600181815b808511156200333057816000190482111562003314576200331462002ebe565b808516156200332257918102915b93841c9390800290620032f4565b509250929050565b6000826200334957506001620007a4565b816200335857506000620007a4565b81600181146200337157600281146200337c576200339c565b6001915050620007a4565b60ff84111562003390576200339062002ebe565b50506001821b620007a4565b5060208310610133831016604e8410600b8410161715620033c1575081810a620007a4565b620033cd8383620032ef565b8060001904821115620033e457620033e462002ebe565b029392505050565b60006200293a838362003338565b6000828210156200340f576200340f62002ebe565b500390565b600082198211156200342a576200342a62002ebe565b500190565b634e487b7160e01b600052600160045260246000fd5b600080858511156200345657600080fd5b838611156200346457600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200348d57600080fd5b87356200349a81620027b0565b96506020880135620034ac81620027b0565b95506040880135945060608801359350608088013562002b148162002a97565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260408201527f6d6974206f776e6572206d757374206265207468652073656e64657200000000606082015260800190565b60208082526033908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205370656040820152726e646572206d7573742062652027746869732760681b606082015260800190565b8015158114620015e257600080fd5b600080600080600080600080610100898b031215620035a957600080fd5b8835620035b681620027b0565b97506020890135620035c881620027b0565b965060408901359550606089013594506080890135620035e8816200357c565b935060a0890135620035fa8162002a97565b979a969950949793969295929450505060c08201359160e0013590565b6000602082840312156200362a57600080fd5b81516200293a816200357c565b6020815260006200293a602083018462002f9e56fe60c06040523480156200001157600080fd5b5060405162001558380380620015588339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109e620004ba60003960006104690152600081816102f90152610433015261109e6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866106638361104f565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161106157611061610fd1565b506001019056fea26469706673582212205af0e6dd4760d4ae367515578b46c4d5988b10ae47473e817626188baa0c03a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212206cce8df71878468ba72b63f3287ba5f1cce872064668f13a7884995ba2e36bd864736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZkEVMGlobalExitRoot.json b/compiled-contracts/PolygonZkEVMGlobalExitRoot.json index 7d73a056d..4107b8c20 100644 --- a/compiled-contracts/PolygonZkEVMGlobalExitRoot.json +++ b/compiled-contracts/PolygonZkEVMGlobalExitRoot.json @@ -151,8 +151,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506104b1806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461015e57600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610413565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610413565b610171565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e366004610448565b6102d8565b600554610146906001600160a01b031681565b6040516001600160a01b0390911681526020016100a0565b600454610146906001600160a01b031681565b6005546001600160a01b031633148061019457506004546001600160a01b031633145b6102165760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143606482015261545360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b0316330361022e5760018190555b6004546001600160a01b031633036102465760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036102d457600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156102f85750600054600160ff909116105b806103125750303b158015610312575060005460ff166001145b6103755760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161020d565b6000805460ff191660011790558015610398576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561040e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561042557600080fd5b5035919050565b80356001600160a01b038116811461044357600080fd5b919050565b6000806040838503121561045b57600080fd5b6104648361042c565b91506104726020840161042c565b9050925092905056fea2646970667358221220c85d7a088a95a9873af857b0ba69b404b1ea78beb38b924904510a97b376492a64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461015e57600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610413565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610413565b610171565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e366004610448565b6102d8565b600554610146906001600160a01b031681565b6040516001600160a01b0390911681526020016100a0565b600454610146906001600160a01b031681565b6005546001600160a01b031633148061019457506004546001600160a01b031633145b6102165760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143606482015261545360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b0316330361022e5760018190555b6004546001600160a01b031633036102465760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036102d457600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156102f85750600054600160ff909116105b806103125750303b158015610312575060005460ff166001145b6103755760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161020d565b6000805460ff191660011790558015610398576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561040e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561042557600080fd5b5035919050565b80356001600160a01b038116811461044357600080fd5b919050565b6000806040838503121561045b57600080fd5b6104648361042c565b91506104726020840161042c565b9050925092905056fea2646970667358221220c85d7a088a95a9873af857b0ba69b404b1ea78beb38b924904510a97b376492a64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506104b1806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461015e57600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610413565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610413565b610171565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e366004610448565b6102d8565b600554610146906001600160a01b031681565b6040516001600160a01b0390911681526020016100a0565b600454610146906001600160a01b031681565b6005546001600160a01b031633148061019457506004546001600160a01b031633145b6102165760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f6e6c7920616c6c6f77656420636f6e74726163606482015261747360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b0316330361022e5760018190555b6004546001600160a01b031633036102465760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036102d457600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156102f85750600054600160ff909116105b806103125750303b158015610312575060005460ff166001145b6103755760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161020d565b6000805460ff191660011790558015610398576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561040e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561042557600080fd5b5035919050565b80356001600160a01b038116811461044357600080fd5b919050565b6000806040838503121561045b57600080fd5b6104648361042c565b91506104726020840161042c565b9050925092905056fea2646970667358221220c2d6170ff6d5cd6588ecd8f652c17a5b7c65d1f83e7addb7b0da5a52f5955f4e64736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461015e57600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610413565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610413565b610171565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e366004610448565b6102d8565b600554610146906001600160a01b031681565b6040516001600160a01b0390911681526020016100a0565b600454610146906001600160a01b031681565b6005546001600160a01b031633148061019457506004546001600160a01b031633145b6102165760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f6e6c7920616c6c6f77656420636f6e74726163606482015261747360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b0316330361022e5760018190555b6004546001600160a01b031633036102465760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036102d457600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156102f85750600054600160ff909116105b806103125750303b158015610312575060005460ff166001145b6103755760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161020d565b6000805460ff191660011790558015610398576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561040e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561042557600080fd5b5035919050565b80356001600160a01b038116811461044357600080fd5b919050565b6000806040838503121561045b57600080fd5b6104648361042c565b91506104726020840161042c565b9050925092905056fea2646970667358221220c2d6170ff6d5cd6588ecd8f652c17a5b7c65d1f83e7addb7b0da5a52f5955f4e64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZkEVMGlobalExitRootL2.json b/compiled-contracts/PolygonZkEVMGlobalExitRootL2.json index a084f2f1c..83913d6fb 100644 --- a/compiled-contracts/PolygonZkEVMGlobalExitRootL2.json +++ b/compiled-contracts/PolygonZkEVMGlobalExitRootL2.json @@ -73,8 +73,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5060405161023838038061023883398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b6101a5806100936000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610156565b60006020819052908152604090205481565b6100a061009b366004610156565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b031633146101515760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f4e4c595f42524944474500000000000000606482015260840160405180910390fd5b600155565b60006020828403121561016857600080fd5b503591905056fea26469706673582212208ade3d2eba980246b6c0e0c3b965955b2e941cf61813cfcc060c2533632bae7064736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610156565b60006020819052908152604090205481565b6100a061009b366004610156565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b031633146101515760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f4e4c595f42524944474500000000000000606482015260840160405180910390fd5b600155565b60006020828403121561016857600080fd5b503591905056fea26469706673582212208ade3d2eba980246b6c0e0c3b965955b2e941cf61813cfcc060c2533632bae7064736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5060405161024638038061024683398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b6101b3806100936000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610164565b60006020819052908152604090205481565b6100a061009b366004610164565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b0316331461015f5760405162461bcd60e51b815260206004820152604560248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f6e6c7920506f6c79676f6e5a6b45564d42606482015264726964676560d81b608482015260a40160405180910390fd5b600155565b60006020828403121561017657600080fd5b503591905056fea26469706673582212203d6a7f66369fc06c0d8b9ca38eabcd1a1bdd000df9e10846e604066a7c3c182f64736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610164565b60006020819052908152604090205481565b6100a061009b366004610164565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b0316331461015f5760405162461bcd60e51b815260206004820152604560248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f6e6c7920506f6c79676f6e5a6b45564d42606482015264726964676560d81b608482015260a40160405180910390fd5b600155565b60006020828403121561017657600080fd5b503591905056fea26469706673582212203d6a7f66369fc06c0d8b9ca38eabcd1a1bdd000df9e10846e604066a7c3c182f64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZkEVMGlobalExitRootL2Mock.json b/compiled-contracts/PolygonZkEVMGlobalExitRootL2Mock.json index eb66afe05..89796bb2f 100644 --- a/compiled-contracts/PolygonZkEVMGlobalExitRootL2Mock.json +++ b/compiled-contracts/PolygonZkEVMGlobalExitRootL2Mock.json @@ -104,8 +104,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5060405161029e38038061029e83398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b61020b806100936000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806301fd904414610067578063116c40c314610083578063257b36321461009857806333d6247d146100b857806396e07459146100cb578063a3c573eb146100eb575b600080fd5b61007060015481565b6040519081526020015b60405180910390f35b61009661009136600461019a565b600155565b005b6100706100a636600461019a565b60006020819052908152604090205481565b6100966100c636600461019a565b610116565b6100966100d93660046101b3565b60009182526020829052604090912055565b6002546100fe906001600160a01b031681565b6040516001600160a01b03909116815260200161007a565b6002546001600160a01b031633146100915760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f4e4c595f42524944474500000000000000606482015260840160405180910390fd5b6000602082840312156101ac57600080fd5b5035919050565b600080604083850312156101c657600080fd5b5050803592602090910135915056fea26469706673582212204f52d4060ab333ea687f9a3e296492efd3124a0c608713d42cb68b63154b3d1364736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c806301fd904414610067578063116c40c314610083578063257b36321461009857806333d6247d146100b857806396e07459146100cb578063a3c573eb146100eb575b600080fd5b61007060015481565b6040519081526020015b60405180910390f35b61009661009136600461019a565b600155565b005b6100706100a636600461019a565b60006020819052908152604090205481565b6100966100c636600461019a565b610116565b6100966100d93660046101b3565b60009182526020829052604090912055565b6002546100fe906001600160a01b031681565b6040516001600160a01b03909116815260200161007a565b6002546001600160a01b031633146100915760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f4e4c595f42524944474500000000000000606482015260840160405180910390fd5b6000602082840312156101ac57600080fd5b5035919050565b600080604083850312156101c657600080fd5b5050803592602090910135915056fea26469706673582212204f52d4060ab333ea687f9a3e296492efd3124a0c608713d42cb68b63154b3d1364736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506040516102ac3803806102ac83398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b610219806100936000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806301fd904414610067578063116c40c314610083578063257b36321461009857806333d6247d146100b857806396e07459146100cb578063a3c573eb146100eb575b600080fd5b61007060015481565b6040519081526020015b60405180910390f35b6100966100913660046101a8565b600155565b005b6100706100a63660046101a8565b60006020819052908152604090205481565b6100966100c63660046101a8565b610116565b6100966100d93660046101c1565b60009182526020829052604090912055565b6002546100fe906001600160a01b031681565b6040516001600160a01b03909116815260200161007a565b6002546001600160a01b031633146100915760405162461bcd60e51b815260206004820152604560248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f6e6c7920506f6c79676f6e5a6b45564d42606482015264726964676560d81b608482015260a40160405180910390fd5b6000602082840312156101ba57600080fd5b5035919050565b600080604083850312156101d457600080fd5b5050803592602090910135915056fea2646970667358221220f8b35350c06af242ee6201d3819a4a87539e1c30c562d07a2df4bf94a1c0c56d64736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c806301fd904414610067578063116c40c314610083578063257b36321461009857806333d6247d146100b857806396e07459146100cb578063a3c573eb146100eb575b600080fd5b61007060015481565b6040519081526020015b60405180910390f35b6100966100913660046101a8565b600155565b005b6100706100a63660046101a8565b60006020819052908152604090205481565b6100966100c63660046101a8565b610116565b6100966100d93660046101c1565b60009182526020829052604090912055565b6002546100fe906001600160a01b031681565b6040516001600160a01b03909116815260200161007a565b6002546001600160a01b031633146100915760405162461bcd60e51b815260206004820152604560248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f6e6c7920506f6c79676f6e5a6b45564d42606482015264726964676560d81b608482015260a40160405180910390fd5b6000602082840312156101ba57600080fd5b5035919050565b600080604083850312156101d457600080fd5b5050803592602090910135915056fea2646970667358221220f8b35350c06af242ee6201d3819a4a87539e1c30c562d07a2df4bf94a1c0c56d64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZkEVMGlobalExitRootMock.json b/compiled-contracts/PolygonZkEVMGlobalExitRootMock.json index 0f1bd8f1a..54b7ef3e3 100644 --- a/compiled-contracts/PolygonZkEVMGlobalExitRootMock.json +++ b/compiled-contracts/PolygonZkEVMGlobalExitRootMock.json @@ -198,8 +198,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5060405161077a38038061077a83398101604081905261002f916101bb565b6100398282610040565b50506101ee565b600054610100900460ff16158080156100605750600054600160ff909116105b8061008b57506100793061019060201b6104ae1760201c565b15801561008b575060005460ff166001145b6100f25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015610115576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561018b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b80516001600160a01b03811681146101b657600080fd5b919050565b600080604083850312156101ce57600080fd5b6101d78361019f565b91506101e56020840161019f565b90509250929050565b61057d806101fd6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80633ed691ef116100665780633ed691ef14610110578063485cc955146101495780635bcef6731461015c5780635ec6a8df1461017c578063a3c573eb146101a757600080fd5b806301fd9044146100a3578063051a9e28146100bf578063257b3632146100d4578063319cf735146100f457806333d6247d146100fd575b600080fd5b6100ac60015481565b6040519081526020015b60405180910390f35b6100d26100cd3660046104bd565b6101ba565b005b6100ac6100e23660046104bd565b60036020526000908152604090205481565b6100ac60025481565b6100d261010b3660046104bd565b61020c565b6100ac60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d26101573660046104f2565b610373565b6100d261016a366004610525565b60009182526003602052604090912055565b60055461018f906001600160a01b031681565b6040516001600160a01b0390911681526020016100b6565b60045461018f906001600160a01b031681565b80600360006101f860025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b6005546001600160a01b031633148061022f57506004546001600160a01b031633145b6102b15760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143606482015261545360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b031633036102c95760018190555b6004546001600160a01b031633036102e15760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361036f57600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103935750600054600160ff909116105b806103ad5750303b1580156103ad575060005460ff166001145b6104105760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016102a8565b6000805460ff191660011790558015610433576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b031992831617909255600480549285169290911691909117905580156104a9576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b6000602082840312156104cf57600080fd5b5035919050565b80356001600160a01b03811681146104ed57600080fd5b919050565b6000806040838503121561050557600080fd5b61050e836104d6565b915061051c602084016104d6565b90509250929050565b6000806040838503121561053857600080fd5b5050803592602090910135915056fea26469706673582212203dde09941f25ec9225a337b99170872e87e97095a3e774502a8b168fed0346a464736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c80633ed691ef116100665780633ed691ef14610110578063485cc955146101495780635bcef6731461015c5780635ec6a8df1461017c578063a3c573eb146101a757600080fd5b806301fd9044146100a3578063051a9e28146100bf578063257b3632146100d4578063319cf735146100f457806333d6247d146100fd575b600080fd5b6100ac60015481565b6040519081526020015b60405180910390f35b6100d26100cd3660046104bd565b6101ba565b005b6100ac6100e23660046104bd565b60036020526000908152604090205481565b6100ac60025481565b6100d261010b3660046104bd565b61020c565b6100ac60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d26101573660046104f2565b610373565b6100d261016a366004610525565b60009182526003602052604090912055565b60055461018f906001600160a01b031681565b6040516001600160a01b0390911681526020016100b6565b60045461018f906001600160a01b031681565b80600360006101f860025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b6005546001600160a01b031633148061022f57506004546001600160a01b031633145b6102b15760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f4e4c595f414c4c4f5745445f434f4e54524143606482015261545360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b031633036102c95760018190555b6004546001600160a01b031633036102e15760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361036f57600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103935750600054600160ff909116105b806103ad5750303b1580156103ad575060005460ff166001145b6104105760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016102a8565b6000805460ff191660011790558015610433576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b031992831617909255600480549285169290911691909117905580156104a9576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b6000602082840312156104cf57600080fd5b5035919050565b80356001600160a01b03811681146104ed57600080fd5b919050565b6000806040838503121561050557600080fd5b61050e836104d6565b915061051c602084016104d6565b90509250929050565b6000806040838503121561053857600080fd5b5050803592602090910135915056fea26469706673582212203dde09941f25ec9225a337b99170872e87e97095a3e774502a8b168fed0346a464736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5060405161077a38038061077a83398101604081905261002f916101bb565b6100398282610040565b50506101ee565b600054610100900460ff16158080156100605750600054600160ff909116105b8061008b57506100793061019060201b6104ae1760201c565b15801561008b575060005460ff166001145b6100f25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015610115576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561018b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b80516001600160a01b03811681146101b657600080fd5b919050565b600080604083850312156101ce57600080fd5b6101d78361019f565b91506101e56020840161019f565b90509250929050565b61057d806101fd6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80633ed691ef116100665780633ed691ef14610110578063485cc955146101495780635bcef6731461015c5780635ec6a8df1461017c578063a3c573eb146101a757600080fd5b806301fd9044146100a3578063051a9e28146100bf578063257b3632146100d4578063319cf735146100f457806333d6247d146100fd575b600080fd5b6100ac60015481565b6040519081526020015b60405180910390f35b6100d26100cd3660046104bd565b6101ba565b005b6100ac6100e23660046104bd565b60036020526000908152604090205481565b6100ac60025481565b6100d261010b3660046104bd565b61020c565b6100ac60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d26101573660046104f2565b610373565b6100d261016a366004610525565b60009182526003602052604090912055565b60055461018f906001600160a01b031681565b6040516001600160a01b0390911681526020016100b6565b60045461018f906001600160a01b031681565b80600360006101f860025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b6005546001600160a01b031633148061022f57506004546001600160a01b031633145b6102b15760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f6e6c7920616c6c6f77656420636f6e74726163606482015261747360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b031633036102c95760018190555b6004546001600160a01b031633036102e15760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361036f57600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103935750600054600160ff909116105b806103ad5750303b1580156103ad575060005460ff166001145b6104105760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016102a8565b6000805460ff191660011790558015610433576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b031992831617909255600480549285169290911691909117905580156104a9576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b6000602082840312156104cf57600080fd5b5035919050565b80356001600160a01b03811681146104ed57600080fd5b919050565b6000806040838503121561050557600080fd5b61050e836104d6565b915061051c602084016104d6565b90509250929050565b6000806040838503121561053857600080fd5b5050803592602090910135915056fea2646970667358221220e0fcdf9a1f0ba4349a5b30b64afb20ab0ab90274401f272dc7ee0f960f5e164364736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c80633ed691ef116100665780633ed691ef14610110578063485cc955146101495780635bcef6731461015c5780635ec6a8df1461017c578063a3c573eb146101a757600080fd5b806301fd9044146100a3578063051a9e28146100bf578063257b3632146100d4578063319cf735146100f457806333d6247d146100fd575b600080fd5b6100ac60015481565b6040519081526020015b60405180910390f35b6100d26100cd3660046104bd565b6101ba565b005b6100ac6100e23660046104bd565b60036020526000908152604090205481565b6100ac60025481565b6100d261010b3660046104bd565b61020c565b6100ac60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d26101573660046104f2565b610373565b6100d261016a366004610525565b60009182526003602052604090912055565b60055461018f906001600160a01b031681565b6040516001600160a01b0390911681526020016100b6565b60045461018f906001600160a01b031681565b80600360006101f860025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b6005546001600160a01b031633148061022f57506004546001600160a01b031633145b6102b15760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f6e6c7920616c6c6f77656420636f6e74726163606482015261747360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b031633036102c95760018190555b6004546001600160a01b031633036102e15760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361036f57600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103935750600054600160ff909116105b806103ad5750303b1580156103ad575060005460ff166001145b6104105760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016102a8565b6000805460ff191660011790558015610433576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b031992831617909255600480549285169290911691909117905580156104a9576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b6000602082840312156104cf57600080fd5b5035919050565b80356001600160a01b03811681146104ed57600080fd5b919050565b6000806040838503121561050557600080fd5b61050e836104d6565b915061051c602084016104d6565b90509250929050565b6000806040838503121561053857600080fd5b5050803592602090910135915056fea2646970667358221220e0fcdf9a1f0ba4349a5b30b64afb20ab0ab90274401f272dc7ee0f960f5e164364736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZkEVMMock.json b/compiled-contracts/PolygonZkEVMMock.json index 08c29f242..dadb46339 100644 --- a/compiled-contracts/PolygonZkEVMMock.json +++ b/compiled-contracts/PolygonZkEVMMock.json @@ -1693,8 +1693,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50615e2180620000216000396000f3fe608060405234801561001057600080fd5b50600436106104125760003560e01c806396dc3d3911610220578063cfa8ed4711610130578063e7a7ed02116100b8578063f14916d611610087578063f14916d6146109e2578063f2fde38b146109f5578063f851a44014610a08578063f8b823e414610a1b578063fe16564f14610a2457600080fd5b8063e7a7ed021461098f578063e8bf92ed146109a9578063eaeb077b146109bc578063edc41121146109cf57600080fd5b8063d939b315116100ff578063d939b3151461093e578063dbc1697614610958578063e0d1744114610960578063e11f3f1814610973578063e217cfd61461098657600080fd5b8063cfa8ed47146108ea578063d02103ca14610904578063d8d1091b14610917578063d8f54db01461092a57600080fd5b8063ab9fc5ef116101b3578063b6b0b09711610182578063b6b0b0971461088f578063c0cad302146108a9578063c0ed84e0146108bc578063c89e42df146108c4578063cf136306146108d757600080fd5b8063ab9fc5ef146107e3578063adc879e9146107ed578063afd23cbe14610807578063b4d63f581461082f57600080fd5b80639eb831b9116101ef5780639eb831b9146107a85780639f0d039d146107b0578063a3c573eb146107b8578063aa58bad6146107cb57600080fd5b806396dc3d391461076757806399f5634e1461077a5780639b796760146107825780639c9f3dfe1461079557600080fd5b80634a910e6a11610326578063715018a6116102ae578063837a47381161027d578063837a4738146106b1578063841b24d71461071f5780638b48931e146107395780638c4a0af7146107435780638da5cb5b1461075657600080fd5b8063715018a6146106705780637215541a1461067857806375c508b31461068b5780637fcb36531461069e57600080fd5b8063574f649e116102f5578063574f649e1461060457806360943d6a146106175780636b8616ce1461062a5780636ff512cc1461064a578063704b6c021461065d57600080fd5b80634a910e6a146105b65780635392c5e0146105c9578063542028d5146105e95780635437988d146105f157600080fd5b80632d0889d3116103a9578063423fa85611610378578063423fa85614610542578063456052671461055c578063458c0477146105765780634834a343146105895780634a1a89a71461059c57600080fd5b80632d0889d314610500578063383b3be814610509578063394218e91461051c5780633c1582671461052f57600080fd5b80631816b7e5116103e55780631816b7e51461048457806319d8ac6114610497578063220d7899146104c257806329878983146104d557600080fd5b80630eaa86ea14610417578063107bf28c1461043d57806310a01a721461045257806315064c9614610467575b600080fd5b61042a610425366004614b86565b610a37565b6040519081526020015b60405180910390f35b610445610c18565b6040516104349190614c33565b610465610460366004614c75565b610ca6565b005b6065546104749060ff1681565b6040519015158152602001610434565b610465610492366004614d02565b610ef0565b6068546104aa906001600160401b031681565b6040516001600160401b039091168152602001610434565b6104456104d0366004614d26565b611016565b606a546104e8906001600160a01b031681565b6040516001600160a01b039091168152602001610434565b61042a61ea6081565b610474610517366004614d73565b6111bc565b61046561052a366004614d73565b611203565b61046561053d366004614eb0565b611352565b6068546104aa90600160401b90046001600160401b031681565b6068546104aa90600160801b90046001600160401b031681565b6072546104aa906001600160401b031681565b610465610597366004614c75565b611b66565b6072546104aa90600160401b90046001600160401b031681565b6104656105c4366004614d73565b611eaf565b61042a6105d7366004614d73565b606d6020526000908152604090205481565b61044561214a565b6104656105ff366004614fdb565b612157565b61042a610612366004614ff8565b612181565b61046561062536600461506d565b6121c4565b61042a610638366004614d73565b60666020526000908152604090205481565b610465610658366004614fdb565b612534565b61046561066b366004614fdb565b6125b8565b610465612630565b610465610686366004614d73565b612644565b610465610699366004615144565b6128bc565b6069546104aa906001600160401b031681565b6106f46106bf3660046151e2565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610434565b6072546104aa90600160c01b90046001600160401b031681565b6104aa62093a8081565b610465610751366004615209565b61294b565b6033546001600160a01b03166104e8565b610465610775366004614d73565b6129c2565b61042a6129ed565b610465610790366004614d73565b612ad0565b6104656107a3366004614d73565b612b05565b61042a600c81565b60745461042a565b6070546104e8906001600160a01b031681565b6065546104aa9061010090046001600160401b031681565b6104aa6206978081565b606c546104aa90600160a81b90046001600160401b031681565b60655461081c90600160481b900461ffff1681565b60405161ffff9091168152602001610434565b61086a61083d366004614d73565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610434565b6065546104e890600160581b90046001600160a01b031681565b6104656108b7366004615226565b612c4b565b6104aa612c63565b6104656108d2366004615226565b612cb0565b6104656108e5366004614d73565b612d16565b6069546104e890600160401b90046001600160a01b031681565b606c546104e8906001600160a01b031681565b61046561092536600461525a565b612d97565b606c5461047490600160a01b900460ff1681565b6072546104aa90600160801b90046001600160401b031681565b610465613261565b61046561096e36600461534c565b61331d565b610465610981366004615144565b61338f565b6104aa6103e881565b6068546104aa90600160c01b90046001600160401b031681565b606b546104e8906001600160a01b031681565b6104656109ca366004615399565b6134d4565b6104656109dd366004614c75565b6137fc565b6104656109f0366004614fdb565b61391c565b610465610a03366004614fdb565b613994565b6073546104e8906001600160a01b031681565b61042a60745481565b610465610a323660046153dd565b613a0a565b6000806000610a44612c63565b90506001600160401b03881615610ae1576072546001600160401b039081169089161115610a8d5760405162461bcd60e51b8152600401610a8490615409565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610adb5760405162461bcd60e51b8152600401610a849061548c565b50610b4b565b6001600160401b0387166000908152606d6020526040902054915081610b195760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316876001600160401b03161115610b4b5760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316866001600160401b031611610b7c5760405162461bcd60e51b8152600401610a84906155ea565b6000610b8b8888888689611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051610bc0919061566d565b602060405180830381855afa158015610bdd573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c009190615689565b610c0a91906156b8565b9a9950505050505050505050565b606f8054610c25906156cc565b80601f0160208091040260200160405190810160405280929190818152602001828054610c51906156cc565b8015610c9e5780601f10610c7357610100808354040283529160200191610c9e565b820191906000526020600020905b815481529060010190602001808311610c8157829003601f168201915b505050505081565b610cae613a2c565b600080610cb9612c63565b90506001600160401b038a1615610d4d576072546001600160401b03908116908b161115610cf95760405162461bcd60e51b8152600401610a8490615409565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610d475760405162461bcd60e51b8152600401610a849061548c565b50610db7565b6001600160401b0389166000908152606d6020526040902054915081610d855760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316896001600160401b03161115610db75760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316886001600160401b031611610de85760405162461bcd60e51b8152600401610a84906155ea565b6000610df78a8a8a868b611016565b6069805467ffffffffffffffff19166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610e4557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610e8b57600080fd5b505af1158015610e9f573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610f1a5760405162461bcd60e51b8152600401610a8490615706565b6103e88161ffff16118015610f3457506104008161ffff16105b610fb95760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a401610a84565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b0380861660008181526067602052604080822054938816825290205460609291158061104857508115155b6110bc576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a84565b80611131576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a84565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b03828116600090815260716020526040812054909242926111f292600160801b9092048116911661575f565b6001600160401b0316111592915050565b6073546001600160a01b0316331461122d5760405162461bcd60e51b8152600401610a8490615706565b62093a806001600160401b03821611156112595760405162461bcd60e51b8152600401610a849061578a565b60655460ff166112fc576072546001600160401b03600160c01b9091048116908216106112fc5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a401610a84565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a19060200161100b565b60655460ff16156113755760405162461bcd60e51b8152600401610a84906157f5565b606954600160401b90046001600160a01b031633146113fc5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e6365720000000000006064820152608401610a84565b8051806114715760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e636520312062617463680000006064820152608401610a84565b6103e881106114ea576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e7920626174636865736064820152608401610a84565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561198a57600087828151811061153d5761153d61585d565b60200260200101519050600081606001516001600160401b031611156116f6578361156781615873565b94505060008160000151805190602001208260200151836060015160405160200161159493929190615899565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461163a5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d617463680000006064820152608401610a84565b81606001516001600160401b031682604001516001600160401b031610156116f05760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a401610a84565b5061187d565b6020810151158061177f5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916117399160040190815260200190565b6020604051808303816000875af1158015611758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177c9190615689565b15155b6117f15760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d7573742065786973740000000000006064820152608401610a84565b80515161ea601161187d5760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a401610a84565b856001600160401b031681604001516001600160401b0316101580156118b057504281604001516001600160401b031611155b6119225760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e67650000006064820152608401610a84565b805180516020918201208183015160408085015190516119499488949392913391016158bc565b604051602081830303815290604052805190602001209250848061196c90615873565b9550508060400151955050808061198290615900565b915050611521565b506068546001600160401b03600160c01b90910481169083161115611a0f5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b6064820152608401610a84565b606854600090611a2f90600160801b90046001600160401b031684615919565b611a42906001600160401b031687615941565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611b1790339030908490611afc9190615958565b606554600160581b90046001600160a01b0316929190613a86565b611b1f613af1565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b895760405162461bcd60e51b8152600401610a84906157f5565b6072546001600160401b038781166000908152606760205260409020600101544292611bc092600160c01b9091048116911661575f565b6001600160401b03161115611c495760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a401610a84565b6103e8611c568888615919565b6001600160401b031610611cd25760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e792062617463686573000000006064820152608401610a84565b611ce28888888888888888613b91565b611ceb86613e8e565b607254600160801b90046001600160401b0316600003611db3576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615611d5057607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d9657600080fd5b505af1158015611daa573d6000803e3d6000fd5b50505050611e64565b611dbb613af1565b607280546001600160401b0316906000611dd483615873565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611edc57506072546001600160401b03600160401b9091048116908216115b8015611ef757506072546001600160401b0390811690821611155b611f755760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a401610a84565b606a546001600160a01b0316331461201f57611f90816111bc565b61201f5760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a401610a84565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b1580156120dc57600080fd5b505af11580156120f0573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e846002015460405161213d91815260200190565b60405180910390a3505050565b606e8054610c25906156cc565b61215f613a2c565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b60008585805190602001208585856040516020016121a39594939291906158bc565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff16158080156121e45750600054600160ff909116105b806121fe5750303b1580156121fe575060005460ff166001145b6122615760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a84565b6000805460ff191660011790558015612284576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a8416179055607080549091169188169190911790556123016020860186614fdb565b607380546001600160a01b0319166001600160a01b03929092169190911790556123316060860160408701614fdb565b606980546001600160a01b0392909216600160401b02600160401b600160e01b031990921691909117905561236c60c0860160a08701614fdb565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa7113568490556123c960e0860160c08701614d73565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556124006040860160208701614d73565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561243c6080860160608701614d73565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b1990921691909117905561247860a0860160808701615209565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e6124a084826159bd565b50606f6124ad83826159bd565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124e3614074565b8015612529576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b0316331461255e5760405162461bcd60e51b8152600401610a8490615706565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161100b565b6073546001600160a01b031633146125e25760405162461bcd60e51b8152600401610a8490615706565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a19060200161100b565b612638613a2c565b61264260006140e4565b565b6033546001600160a01b031633146128b1576072546000906001600160401b03161561269557506072546001600160401b03908116600090815260716020526040902054600160401b9004166126a3565b506069546001600160401b03165b80826001600160401b0316116127215760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c7265616479207665726966696564000000006064820152608401610a84565b6068546001600160401b03600160401b90910481169083161180159061276357506001600160401b038083166000908152606760205260409020600101541615155b6127ee5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a401610a84565b6001600160401b03808316600090815260676020526040902060010154429161281c9162093a80911661575f565b6001600160401b031611156128af5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a401610a84565b505b6128b9614136565b50565b60655460ff16156128df5760405162461bcd60e51b8152600401610a84906157f5565b6128f08989898989898989896141a6565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1612529614136565b6073546001600160a01b031633146129755760405162461bcd60e51b8152600401610a8490615706565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061100b90831515815260200190565b6129ca613a2c565b6069805467ffffffffffffffff19166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a649190615689565b90506000612a70612c63565b6068546001600160401b03600160401b8204811691612aa091600160801b8204811691600160c01b900416615919565b612aaa919061575f565b612ab49190615919565b6001600160401b03169050612ac98183615a7c565b9250505090565b612ad8613a2c565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612b2f5760405162461bcd60e51b8152600401610a8490615706565b62093a806001600160401b0382161115612b5b5760405162461bcd60e51b8152600401610a849061578a565b60655460ff16612bf0576072546001600160401b03600160801b909104811690821610612bf05760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f776572006064820152608401610a84565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c759060200161100b565b612c53613a2c565b606f612c5f82826159bd565b5050565b6072546000906001600160401b031615612ca057506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612cda5760405162461bcd60e51b8152600401610a8490615706565b606e612ce682826159bd565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161100b9190614c33565b6073546001600160a01b03163314612d405760405162461bcd60e51b8152600401610a8490615706565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f9060200161100b565b60655460ff1615612dba5760405162461bcd60e51b8152600401610a84906157f5565b606c54600160a01b900460ff161515600114612de85760405162461bcd60e51b8152600401610a8490615a90565b805180612e4b5760405162461bcd60e51b815260206004820152603d6024820152600080516020615dac83398151915260448201527f3a204d75737420666f726365206174206c6561737420312062617463680000006064820152608401610a84565b6103e88110612ebc5760405162461bcd60e51b81526020600482015260436024820152600080516020615dac83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a401610a84565b6068546001600160401b03600160c01b8204811691612ee4918491600160801b900416615af9565b1115612f3e5760405162461bcd60e51b81526020600482015260356024820152600080516020615dac8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b6064820152608401610a84565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b8481101561316a576000868281518110612f8b57612f8b61585d565b602002602001015190508380612fa090615873565b945050600081600001518051906020012082602001518360400151604051602001612fcd93929190615899565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461306c5760405162461bcd60e51b81526020600482015260426024820152600080516020615dac83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a401610a84565b613077600188615941565b830361310c5742620697808360400151613091919061575f565b6001600160401b0316111561310c5760405162461bcd60e51b81526020600482015260476024820152600080516020615dac83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a401610a84565b815180516020918201208184015160405161312f938893929142913391016158bc565b604051602081830303815290604052805190602001209350858061315290615873565b9650505050808061316290615900565b915050612f6f565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166132835760405162461bcd60e51b8152600401610a8490615b11565b6073546001600160a01b031633146132ad5760405162461bcd60e51b8152600401610a8490615706565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156132fd57600080fd5b505af1158015613311573d6000803e3d6000fd5b50505050612642614821565b613325613a2c565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133b95760405162461bcd60e51b8152600401610a8490615b6e565b6133ca8989898989898989896141a6565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561341557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561345b57600080fd5b505af115801561346f573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff16156134f75760405162461bcd60e51b8152600401610a84906157f5565b606c54600160a01b900460ff1615156001146135255760405162461bcd60e51b8152600401610a8490615a90565b600061353060745490565b9050818111156135955760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b6064820152608401610a84565b61ea608351106136055760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b6064820152608401610a84565b60655461362490600160581b90046001600160a01b0316333084613a86565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa15801561366e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136929190615689565b60688054919250600160c01b9091046001600160401b03169060186136b683615873565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016136f793929190615899565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361379b57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26137f6565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516137ed93929190615bcb565b60405180910390a25b50505050565b606a546001600160a01b031633146138265760405162461bcd60e51b8152600401610a8490615b6e565b6138368888888888888888613b91565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561388157607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156138c757600080fd5b505af11580156138db573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e9d565b6073546001600160a01b031633146139465760405162461bcd60e51b8152600401610a8490615706565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca9060200161100b565b61399c613a2c565b6001600160a01b038116613a015760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a84565b6128b9816140e4565b613a12613a2c565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b031633146126425760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a84565b6040516001600160a01b03808516602483015283166044820152606481018290526137f69085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614878565b6072546001600160401b03600160401b820481169116111561264257607254600090613b2e90600160401b90046001600160401b0316600161575f565b9050613b39816111bc565b156128b957607254600090600290613b5b9084906001600160401b0316615919565b613b659190615bfe565b613b6f908361575f565b9050613b7a816111bc565b15613b8857612c5f81611eaf565b612c5f82611eaf565b600080613b9c612c63565b90506001600160401b038a1615613c30576072546001600160401b03908116908b161115613bdc5760405162461bcd60e51b8152600401610a8490615409565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c2a5760405162461bcd60e51b8152600401610a849061548c565b50613c9a565b6001600160401b0389166000908152606d6020526040902054915081613c685760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316896001600160401b03161115613c9a5760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316886001600160401b031611613ccb5760405162461bcd60e51b8152600401610a84906155ea565b6000613cda8a8a8a868b611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051613d0f919061566d565b602060405180830381855afa158015613d2c573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613d4f9190615689565b613d5991906156b8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613d9d918b918b918b9190600401615c24565b602060405180830381865afa158015613dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dde9190615c9e565b613e3d5760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20494e5660448201526920a624a22fa82927a7a360b11b6064820152608401610a84565b613e8033613e4b858d615919565b6001600160401b0316613e5c6129ed565b613e669190615958565b606554600160581b90046001600160a01b0316919061494f565b505050505050505050505050565b6000613e98612c63565b905081600080613ea88484615919565b6001600160401b031690505b836001600160401b0316836001600160401b031614613f5a576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613f04911642615941565b1115613f3f576001810154613f2990600160401b90046001600160401b031686615919565b613f3c906001600160401b031684615af9565b92505b60010154600160401b90046001600160401b03169250613eb4565b6000613f668383615941565b905082811015613fe0576000613f7c8285615941565b9050600c8111613f8c5780613f8f565b600c5b9050613f9c816003615958565b613fa790600a615d9f565b606554613fc0908390600160481b900461ffff16615d9f565b607454613fcd9190615958565b613fd79190615a7c565b6074555061406c565b6000613fec8483615941565b9050600c8111613ffc5780613fff565b600c5b9050600061400e826003615958565b61401990600a615d9f565b606554614032908490600160481b900461ffff16615d9f565b60745461403f9190615958565b6140499190615a7c565b90508060745460745461405c9190615958565b6140669190615a7c565b60745550505b505050505050565b600054610100900460ff166140df5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a84565b612642335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561418657600080fd5b505af115801561419a573d6000803e3d6000fd5b5050505061264261497f565b60006001600160401b038a1615614321576072546001600160401b03908116908b1611156142655760405162461bcd60e51b815260206004820152606c6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c401610a84565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b909204161461431b5760405162461bcd60e51b81526020600482015260606024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a401610a84565b50614475565b506001600160401b0387166000908152606d6020526040902054806143c25760405162461bcd60e51b81526020600482015260576024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a401610a84565b6069546001600160401b0390811690891611156144755760405162461bcd60e51b81526020600482015260716024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c401610a84565b6072546001600160401b03908116908a16118015906144a55750896001600160401b0316896001600160401b0316115b80156144c657506072546001600160401b03600160401b9091048116908a16115b61453e5760405162461bcd60e51b815260206004820152604f6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a401610a84565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146145fe5760405162461bcd60e51b815260206004820152606a6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c401610a84565b600061460d898989858a611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051614642919061566d565b602060405180830381855afa15801561465f573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906146829190615689565b61468c91906156b8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916146d0918a918a918a9190600401615c24565b602060405180830381865afa1580156146ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147119190615c9e565b6147715760405162461bcd60e51b815260206004820152603e6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20494e56414c49445f50524f4f4600006064820152608401610a84565b6001600160401b038b16600090815260716020526040902060020154879003613e805760405162461bcd60e51b81526020600482015260626024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c401610a84565b60655460ff166148435760405162461bcd60e51b8152600401610a8490615b11565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006148cd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166149da9092919063ffffffff16565b80519091501561494a57808060200190518101906148eb9190615c9e565b61494a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a84565b505050565b6040516001600160a01b03831660248201526044810182905261494a90849063a9059cbb60e01b90606401613aba565b60655460ff16156149a25760405162461bcd60e51b8152600401610a84906157f5565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60606149e984846000856149f1565b949350505050565b606082471015614a525760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a84565b600080866001600160a01b03168587604051614a6e919061566d565b60006040518083038185875af1925050503d8060008114614aab576040519150601f19603f3d011682016040523d82523d6000602084013e614ab0565b606091505b5091509150614ac187838387614acc565b979650505050505050565b60608315614b3b578251600003614b34576001600160a01b0385163b614b345760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a84565b50816149e9565b6149e98383815115614b505781518083602001fd5b8060405162461bcd60e51b8152600401610a849190614c33565b80356001600160401b0381168114614b8157600080fd5b919050565b600080600080600060a08688031215614b9e57600080fd5b614ba786614b6a565b9450614bb560208701614b6a565b9350614bc360408701614b6a565b94979396509394606081013594506080013592915050565b60005b83811015614bf6578181015183820152602001614bde565b838111156137f65750506000910152565b60008151808452614c1f816020860160208601614bdb565b601f01601f19169290920160200192915050565b602081526000614c466020830184614c07565b9392505050565b8060408101831015614c5e57600080fd5b92915050565b8060808101831015614c5e57600080fd5b6000806000806000806000806101a0898b031215614c9257600080fd5b614c9b89614b6a565b9750614ca960208a01614b6a565b9650614cb760408a01614b6a565b95506060890135945060808901359350614cd48a60a08b01614c4d565b9250614ce38a60e08b01614c64565b9150614cf38a6101608b01614c4d565b90509295985092959890939650565b600060208284031215614d1457600080fd5b813561ffff81168114614c4657600080fd5b600080600080600060a08688031215614d3e57600080fd5b614d4786614b6a565b9450614d5560208701614b6a565b94979496505050506040830135926060810135926080909101359150565b600060208284031215614d8557600080fd5b614c4682614b6a565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614dc657614dc6614d8e565b60405290565b604051606081016001600160401b0381118282101715614dc657614dc6614d8e565b604051601f8201601f191681016001600160401b0381118282101715614e1657614e16614d8e565b604052919050565b60006001600160401b03821115614e3757614e37614d8e565b5060051b60200190565b600082601f830112614e5257600080fd5b81356001600160401b03811115614e6b57614e6b614d8e565b614e7e601f8201601f1916602001614dee565b818152846020838601011115614e9357600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614ec357600080fd5b82356001600160401b0380821115614eda57600080fd5b818501915085601f830112614eee57600080fd5b8135614f01614efc82614e1e565b614dee565b81815260059190911b83018401908481019088831115614f2057600080fd5b8585015b83811015614fb957803585811115614f3c5760008081fd5b86016080818c03601f1901811315614f545760008081fd5b614f5c614da4565b8983013588811115614f6e5760008081fd5b614f7c8e8c83870101614e41565b8252506040808401358b8301526060614f96818601614b6a565b82840152614fa5848601614b6a565b908301525085525050918601918601614f24565b5098975050505050505050565b6001600160a01b03811681146128b957600080fd5b600060208284031215614fed57600080fd5b8135614c4681614fc6565b600080600080600060a0868803121561501057600080fd5b8535945060208601356001600160401b0381111561502d57600080fd5b61503988828901614e41565b9450506040860135925061504f60608701614b6a565b9150608086013561505f81614fc6565b809150509295509295909350565b600080600080600080600080888a036101c081121561508b57600080fd5b893561509681614fc6565b985060208a01356150a681614fc6565b975060408a01356150b681614fc6565b965060608a01356150c681614fc6565b955060e0607f19820112156150da57600080fd5b5060808901935061016089013592506101808901356001600160401b038082111561510457600080fd5b6151108c838d01614e41565b93506101a08b013591508082111561512757600080fd5b506151348b828c01614e41565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c03121561516357600080fd5b61516c8a614b6a565b985061517a60208b01614b6a565b975061518860408b01614b6a565b965061519660608b01614b6a565b955060808a0135945060a08a013593506151b38b60c08c01614c4d565b92506151c38b6101008c01614c64565b91506151d38b6101808c01614c4d565b90509295985092959850929598565b6000602082840312156151f457600080fd5b5035919050565b80151581146128b957600080fd5b60006020828403121561521b57600080fd5b8135614c46816151fb565b60006020828403121561523857600080fd5b81356001600160401b0381111561524e57600080fd5b6149e984828501614e41565b6000602080838503121561526d57600080fd5b82356001600160401b038082111561528457600080fd5b818501915085601f83011261529857600080fd5b81356152a6614efc82614e1e565b81815260059190911b830184019084810190888311156152c557600080fd5b8585015b83811015614fb9578035858111156152e15760008081fd5b86016060818c03601f19018113156152f95760008081fd5b615301614dcc565b89830135888111156153135760008081fd5b6153218e8c83870101614e41565b8252506040808401358b830152615339838501614b6a565b90820152855250509186019186016152c9565b6000806000806080858703121561536257600080fd5b61536b85614b6a565b93506020850135925061538060408601614b6a565b915061538e60608601614b6a565b905092959194509250565b600080604083850312156153ac57600080fd5b82356001600160401b038111156153c257600080fd5b6153ce85828601614e41565b95602094909401359450505050565b600080604083850312156153f057600080fd5b8235915061540060208401614b6a565b90509250929050565b60208082526058908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2070656e60408201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560608201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608082015260a00190565b6020808252604c908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760608201526b040e6e8c2e8ca40c4c2e8c6d60a31b608082015260a00190565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786060820152621a5cdd60ea1b608082015260a00190565b6020808252605d908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060608201527f7468616e2063757272656e744c61737456657269666965644261746368000000608082015260a00190565b60208082526057908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2066696e60408201527f616c4e65774261746368206d75737420626520626967676572207468616e206360608201527f757272656e744c61737456657269666965644261746368000000000000000000608082015260a00190565b6000825161567f818460208701614bdb565b9190910192915050565b60006020828403121561569b57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826156c7576156c76156a2565b500690565b600181811c908216806156e057607f821691505b60208210810361570057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561578157615781615749565b01949350505050565b60208082526045908201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361588f5761588f615749565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b60006001820161591257615912615749565b5060010190565b60006001600160401b038381169083168181101561593957615939615749565b039392505050565b60008282101561595357615953615749565b500390565b600081600019048311821515161561597257615972615749565b500290565b601f82111561494a57600081815260208120601f850160051c8101602086101561599e5750805b601f850160051c820191505b8181101561406c578281556001016159aa565b81516001600160401b038111156159d6576159d6614d8e565b6159ea816159e484546156cc565b84615977565b602080601f831160018114615a1f5760008415615a075750858301515b600019600386901b1c1916600185901b17855561406c565b600085815260208120601f198616915b82811015615a4e57888601518255948401946001909101908401615a2f565b5085821015615a6c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615a8b57615a8b6156a2565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b60008219821115615b0c57615b0c615749565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b0383166020820152606060408201819052600090615bf590830184614c07565b95945050505050565b60006001600160401b0380841680615c1857615c186156a2565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615c5c57848483379084018281529284019290600101615c3c565b5050828760c0870137610100850181815286935091505b6001811015615c92578251825260209283019290910190600101615c73565b50505095945050505050565b600060208284031215615cb057600080fd5b8151614c46816151fb565b600181815b80851115615cf6578160001904821115615cdc57615cdc615749565b80851615615ce957918102915b93841c9390800290615cc0565b509250929050565b600082615d0d57506001614c5e565b81615d1a57506000614c5e565b8160018114615d305760028114615d3a57615d56565b6001915050614c5e565b60ff841115615d4b57615d4b615749565b50506001821b614c5e565b5060208310610133831016604e8410600b8410161715615d79575081810a614c5e565b615d838383615cbb565b8060001904821115615d9757615d97615749565b029392505050565b6000614c468383615cfe56fe506f6c79676f6e5a6b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a6b45564d3a3a70726f76654e6f6e44657465726d696e6973a2646970667358221220f1bfd76036c26e61e70ee0d095f86c4706c71f8d37e2ad66af9351f271e7fe6e64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106104125760003560e01c806396dc3d3911610220578063cfa8ed4711610130578063e7a7ed02116100b8578063f14916d611610087578063f14916d6146109e2578063f2fde38b146109f5578063f851a44014610a08578063f8b823e414610a1b578063fe16564f14610a2457600080fd5b8063e7a7ed021461098f578063e8bf92ed146109a9578063eaeb077b146109bc578063edc41121146109cf57600080fd5b8063d939b315116100ff578063d939b3151461093e578063dbc1697614610958578063e0d1744114610960578063e11f3f1814610973578063e217cfd61461098657600080fd5b8063cfa8ed47146108ea578063d02103ca14610904578063d8d1091b14610917578063d8f54db01461092a57600080fd5b8063ab9fc5ef116101b3578063b6b0b09711610182578063b6b0b0971461088f578063c0cad302146108a9578063c0ed84e0146108bc578063c89e42df146108c4578063cf136306146108d757600080fd5b8063ab9fc5ef146107e3578063adc879e9146107ed578063afd23cbe14610807578063b4d63f581461082f57600080fd5b80639eb831b9116101ef5780639eb831b9146107a85780639f0d039d146107b0578063a3c573eb146107b8578063aa58bad6146107cb57600080fd5b806396dc3d391461076757806399f5634e1461077a5780639b796760146107825780639c9f3dfe1461079557600080fd5b80634a910e6a11610326578063715018a6116102ae578063837a47381161027d578063837a4738146106b1578063841b24d71461071f5780638b48931e146107395780638c4a0af7146107435780638da5cb5b1461075657600080fd5b8063715018a6146106705780637215541a1461067857806375c508b31461068b5780637fcb36531461069e57600080fd5b8063574f649e116102f5578063574f649e1461060457806360943d6a146106175780636b8616ce1461062a5780636ff512cc1461064a578063704b6c021461065d57600080fd5b80634a910e6a146105b65780635392c5e0146105c9578063542028d5146105e95780635437988d146105f157600080fd5b80632d0889d3116103a9578063423fa85611610378578063423fa85614610542578063456052671461055c578063458c0477146105765780634834a343146105895780634a1a89a71461059c57600080fd5b80632d0889d314610500578063383b3be814610509578063394218e91461051c5780633c1582671461052f57600080fd5b80631816b7e5116103e55780631816b7e51461048457806319d8ac6114610497578063220d7899146104c257806329878983146104d557600080fd5b80630eaa86ea14610417578063107bf28c1461043d57806310a01a721461045257806315064c9614610467575b600080fd5b61042a610425366004614b86565b610a37565b6040519081526020015b60405180910390f35b610445610c18565b6040516104349190614c33565b610465610460366004614c75565b610ca6565b005b6065546104749060ff1681565b6040519015158152602001610434565b610465610492366004614d02565b610ef0565b6068546104aa906001600160401b031681565b6040516001600160401b039091168152602001610434565b6104456104d0366004614d26565b611016565b606a546104e8906001600160a01b031681565b6040516001600160a01b039091168152602001610434565b61042a61ea6081565b610474610517366004614d73565b6111bc565b61046561052a366004614d73565b611203565b61046561053d366004614eb0565b611352565b6068546104aa90600160401b90046001600160401b031681565b6068546104aa90600160801b90046001600160401b031681565b6072546104aa906001600160401b031681565b610465610597366004614c75565b611b66565b6072546104aa90600160401b90046001600160401b031681565b6104656105c4366004614d73565b611eaf565b61042a6105d7366004614d73565b606d6020526000908152604090205481565b61044561214a565b6104656105ff366004614fdb565b612157565b61042a610612366004614ff8565b612181565b61046561062536600461506d565b6121c4565b61042a610638366004614d73565b60666020526000908152604090205481565b610465610658366004614fdb565b612534565b61046561066b366004614fdb565b6125b8565b610465612630565b610465610686366004614d73565b612644565b610465610699366004615144565b6128bc565b6069546104aa906001600160401b031681565b6106f46106bf3660046151e2565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610434565b6072546104aa90600160c01b90046001600160401b031681565b6104aa62093a8081565b610465610751366004615209565b61294b565b6033546001600160a01b03166104e8565b610465610775366004614d73565b6129c2565b61042a6129ed565b610465610790366004614d73565b612ad0565b6104656107a3366004614d73565b612b05565b61042a600c81565b60745461042a565b6070546104e8906001600160a01b031681565b6065546104aa9061010090046001600160401b031681565b6104aa6206978081565b606c546104aa90600160a81b90046001600160401b031681565b60655461081c90600160481b900461ffff1681565b60405161ffff9091168152602001610434565b61086a61083d366004614d73565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610434565b6065546104e890600160581b90046001600160a01b031681565b6104656108b7366004615226565b612c4b565b6104aa612c63565b6104656108d2366004615226565b612cb0565b6104656108e5366004614d73565b612d16565b6069546104e890600160401b90046001600160a01b031681565b606c546104e8906001600160a01b031681565b61046561092536600461525a565b612d97565b606c5461047490600160a01b900460ff1681565b6072546104aa90600160801b90046001600160401b031681565b610465613261565b61046561096e36600461534c565b61331d565b610465610981366004615144565b61338f565b6104aa6103e881565b6068546104aa90600160c01b90046001600160401b031681565b606b546104e8906001600160a01b031681565b6104656109ca366004615399565b6134d4565b6104656109dd366004614c75565b6137fc565b6104656109f0366004614fdb565b61391c565b610465610a03366004614fdb565b613994565b6073546104e8906001600160a01b031681565b61042a60745481565b610465610a323660046153dd565b613a0a565b6000806000610a44612c63565b90506001600160401b03881615610ae1576072546001600160401b039081169089161115610a8d5760405162461bcd60e51b8152600401610a8490615409565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610adb5760405162461bcd60e51b8152600401610a849061548c565b50610b4b565b6001600160401b0387166000908152606d6020526040902054915081610b195760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316876001600160401b03161115610b4b5760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316866001600160401b031611610b7c5760405162461bcd60e51b8152600401610a84906155ea565b6000610b8b8888888689611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051610bc0919061566d565b602060405180830381855afa158015610bdd573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c009190615689565b610c0a91906156b8565b9a9950505050505050505050565b606f8054610c25906156cc565b80601f0160208091040260200160405190810160405280929190818152602001828054610c51906156cc565b8015610c9e5780601f10610c7357610100808354040283529160200191610c9e565b820191906000526020600020905b815481529060010190602001808311610c8157829003601f168201915b505050505081565b610cae613a2c565b600080610cb9612c63565b90506001600160401b038a1615610d4d576072546001600160401b03908116908b161115610cf95760405162461bcd60e51b8152600401610a8490615409565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610d475760405162461bcd60e51b8152600401610a849061548c565b50610db7565b6001600160401b0389166000908152606d6020526040902054915081610d855760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316896001600160401b03161115610db75760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316886001600160401b031611610de85760405162461bcd60e51b8152600401610a84906155ea565b6000610df78a8a8a868b611016565b6069805467ffffffffffffffff19166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610e4557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610e8b57600080fd5b505af1158015610e9f573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610f1a5760405162461bcd60e51b8152600401610a8490615706565b6103e88161ffff16118015610f3457506104008161ffff16105b610fb95760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a401610a84565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b0380861660008181526067602052604080822054938816825290205460609291158061104857508115155b6110bc576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a84565b80611131576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a84565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b03828116600090815260716020526040812054909242926111f292600160801b9092048116911661575f565b6001600160401b0316111592915050565b6073546001600160a01b0316331461122d5760405162461bcd60e51b8152600401610a8490615706565b62093a806001600160401b03821611156112595760405162461bcd60e51b8152600401610a849061578a565b60655460ff166112fc576072546001600160401b03600160c01b9091048116908216106112fc5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a401610a84565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a19060200161100b565b60655460ff16156113755760405162461bcd60e51b8152600401610a84906157f5565b606954600160401b90046001600160a01b031633146113fc5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e6365720000000000006064820152608401610a84565b8051806114715760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e636520312062617463680000006064820152608401610a84565b6103e881106114ea576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e7920626174636865736064820152608401610a84565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561198a57600087828151811061153d5761153d61585d565b60200260200101519050600081606001516001600160401b031611156116f6578361156781615873565b94505060008160000151805190602001208260200151836060015160405160200161159493929190615899565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461163a5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d617463680000006064820152608401610a84565b81606001516001600160401b031682604001516001600160401b031610156116f05760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a401610a84565b5061187d565b6020810151158061177f5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916117399160040190815260200190565b6020604051808303816000875af1158015611758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177c9190615689565b15155b6117f15760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d7573742065786973740000000000006064820152608401610a84565b80515161ea601161187d5760405162461bcd60e51b815260206004820152604a60248201527f50726f6f664f664566666963696550656e64696e67537461746563793a3a736560448201527f7175656e6365426174636865733a205472616e73616374696f6e73206279746560648201526973206f766572666c6f7760b01b608482015260a401610a84565b856001600160401b031681604001516001600160401b0316101580156118b057504281604001516001600160401b031611155b6119225760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e67650000006064820152608401610a84565b805180516020918201208183015160408085015190516119499488949392913391016158bc565b604051602081830303815290604052805190602001209250848061196c90615873565b9550508060400151955050808061198290615900565b915050611521565b506068546001600160401b03600160c01b90910481169083161115611a0f5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b6064820152608401610a84565b606854600090611a2f90600160801b90046001600160401b031684615919565b611a42906001600160401b031687615941565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611b1790339030908490611afc9190615958565b606554600160581b90046001600160a01b0316929190613a86565b611b1f613af1565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b895760405162461bcd60e51b8152600401610a84906157f5565b6072546001600160401b038781166000908152606760205260409020600101544292611bc092600160c01b9091048116911661575f565b6001600160401b03161115611c495760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a401610a84565b6103e8611c568888615919565b6001600160401b031610611cd25760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e792062617463686573000000006064820152608401610a84565b611ce28888888888888888613b91565b611ceb86613e8e565b607254600160801b90046001600160401b0316600003611db3576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615611d5057607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d9657600080fd5b505af1158015611daa573d6000803e3d6000fd5b50505050611e64565b611dbb613af1565b607280546001600160401b0316906000611dd483615873565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611edc57506072546001600160401b03600160401b9091048116908216115b8015611ef757506072546001600160401b0390811690821611155b611f755760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a401610a84565b606a546001600160a01b0316331461201f57611f90816111bc565b61201f5760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a401610a84565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b1580156120dc57600080fd5b505af11580156120f0573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e846002015460405161213d91815260200190565b60405180910390a3505050565b606e8054610c25906156cc565b61215f613a2c565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b60008585805190602001208585856040516020016121a39594939291906158bc565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff16158080156121e45750600054600160ff909116105b806121fe5750303b1580156121fe575060005460ff166001145b6122615760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a84565b6000805460ff191660011790558015612284576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a8416179055607080549091169188169190911790556123016020860186614fdb565b607380546001600160a01b0319166001600160a01b03929092169190911790556123316060860160408701614fdb565b606980546001600160a01b0392909216600160401b02600160401b600160e01b031990921691909117905561236c60c0860160a08701614fdb565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa7113568490556123c960e0860160c08701614d73565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556124006040860160208701614d73565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561243c6080860160608701614d73565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b1990921691909117905561247860a0860160808701615209565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e6124a084826159bd565b50606f6124ad83826159bd565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124e3614074565b8015612529576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b0316331461255e5760405162461bcd60e51b8152600401610a8490615706565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161100b565b6073546001600160a01b031633146125e25760405162461bcd60e51b8152600401610a8490615706565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a19060200161100b565b612638613a2c565b61264260006140e4565b565b6033546001600160a01b031633146128b1576072546000906001600160401b03161561269557506072546001600160401b03908116600090815260716020526040902054600160401b9004166126a3565b506069546001600160401b03165b80826001600160401b0316116127215760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c7265616479207665726966696564000000006064820152608401610a84565b6068546001600160401b03600160401b90910481169083161180159061276357506001600160401b038083166000908152606760205260409020600101541615155b6127ee5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a401610a84565b6001600160401b03808316600090815260676020526040902060010154429161281c9162093a80911661575f565b6001600160401b031611156128af5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a401610a84565b505b6128b9614136565b50565b60655460ff16156128df5760405162461bcd60e51b8152600401610a84906157f5565b6128f08989898989898989896141a6565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1612529614136565b6073546001600160a01b031633146129755760405162461bcd60e51b8152600401610a8490615706565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061100b90831515815260200190565b6129ca613a2c565b6069805467ffffffffffffffff19166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a649190615689565b90506000612a70612c63565b6068546001600160401b03600160401b8204811691612aa091600160801b8204811691600160c01b900416615919565b612aaa919061575f565b612ab49190615919565b6001600160401b03169050612ac98183615a7c565b9250505090565b612ad8613a2c565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612b2f5760405162461bcd60e51b8152600401610a8490615706565b62093a806001600160401b0382161115612b5b5760405162461bcd60e51b8152600401610a849061578a565b60655460ff16612bf0576072546001600160401b03600160801b909104811690821610612bf05760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f776572006064820152608401610a84565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c759060200161100b565b612c53613a2c565b606f612c5f82826159bd565b5050565b6072546000906001600160401b031615612ca057506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612cda5760405162461bcd60e51b8152600401610a8490615706565b606e612ce682826159bd565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161100b9190614c33565b6073546001600160a01b03163314612d405760405162461bcd60e51b8152600401610a8490615706565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f9060200161100b565b60655460ff1615612dba5760405162461bcd60e51b8152600401610a84906157f5565b606c54600160a01b900460ff161515600114612de85760405162461bcd60e51b8152600401610a8490615a90565b805180612e4b5760405162461bcd60e51b815260206004820152603d6024820152600080516020615dac83398151915260448201527f3a204d75737420666f726365206174206c6561737420312062617463680000006064820152608401610a84565b6103e88110612ebc5760405162461bcd60e51b81526020600482015260436024820152600080516020615dac83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a401610a84565b6068546001600160401b03600160c01b8204811691612ee4918491600160801b900416615af9565b1115612f3e5760405162461bcd60e51b81526020600482015260356024820152600080516020615dac8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b6064820152608401610a84565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b8481101561316a576000868281518110612f8b57612f8b61585d565b602002602001015190508380612fa090615873565b945050600081600001518051906020012082602001518360400151604051602001612fcd93929190615899565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461306c5760405162461bcd60e51b81526020600482015260426024820152600080516020615dac83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a401610a84565b613077600188615941565b830361310c5742620697808360400151613091919061575f565b6001600160401b0316111561310c5760405162461bcd60e51b81526020600482015260476024820152600080516020615dac83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a401610a84565b815180516020918201208184015160405161312f938893929142913391016158bc565b604051602081830303815290604052805190602001209350858061315290615873565b9650505050808061316290615900565b915050612f6f565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166132835760405162461bcd60e51b8152600401610a8490615b11565b6073546001600160a01b031633146132ad5760405162461bcd60e51b8152600401610a8490615706565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156132fd57600080fd5b505af1158015613311573d6000803e3d6000fd5b50505050612642614821565b613325613a2c565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133b95760405162461bcd60e51b8152600401610a8490615b6e565b6133ca8989898989898989896141a6565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561341557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561345b57600080fd5b505af115801561346f573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff16156134f75760405162461bcd60e51b8152600401610a84906157f5565b606c54600160a01b900460ff1615156001146135255760405162461bcd60e51b8152600401610a8490615a90565b600061353060745490565b9050818111156135955760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b6064820152608401610a84565b61ea608351106136055760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b6064820152608401610a84565b60655461362490600160581b90046001600160a01b0316333084613a86565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa15801561366e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136929190615689565b60688054919250600160c01b9091046001600160401b03169060186136b683615873565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016136f793929190615899565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361379b57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26137f6565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516137ed93929190615bcb565b60405180910390a25b50505050565b606a546001600160a01b031633146138265760405162461bcd60e51b8152600401610a8490615b6e565b6138368888888888888888613b91565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561388157607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156138c757600080fd5b505af11580156138db573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e9d565b6073546001600160a01b031633146139465760405162461bcd60e51b8152600401610a8490615706565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca9060200161100b565b61399c613a2c565b6001600160a01b038116613a015760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a84565b6128b9816140e4565b613a12613a2c565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b031633146126425760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a84565b6040516001600160a01b03808516602483015283166044820152606481018290526137f69085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614878565b6072546001600160401b03600160401b820481169116111561264257607254600090613b2e90600160401b90046001600160401b0316600161575f565b9050613b39816111bc565b156128b957607254600090600290613b5b9084906001600160401b0316615919565b613b659190615bfe565b613b6f908361575f565b9050613b7a816111bc565b15613b8857612c5f81611eaf565b612c5f82611eaf565b600080613b9c612c63565b90506001600160401b038a1615613c30576072546001600160401b03908116908b161115613bdc5760405162461bcd60e51b8152600401610a8490615409565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c2a5760405162461bcd60e51b8152600401610a849061548c565b50613c9a565b6001600160401b0389166000908152606d6020526040902054915081613c685760405162461bcd60e51b8152600401610a84906154fe565b806001600160401b0316896001600160401b03161115613c9a5760405162461bcd60e51b8152600401610a8490615567565b806001600160401b0316886001600160401b031611613ccb5760405162461bcd60e51b8152600401610a84906155ea565b6000613cda8a8a8a868b611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051613d0f919061566d565b602060405180830381855afa158015613d2c573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613d4f9190615689565b613d5991906156b8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613d9d918b918b918b9190600401615c24565b602060405180830381865afa158015613dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dde9190615c9e565b613e3d5760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20494e5660448201526920a624a22fa82927a7a360b11b6064820152608401610a84565b613e8033613e4b858d615919565b6001600160401b0316613e5c6129ed565b613e669190615958565b606554600160581b90046001600160a01b0316919061494f565b505050505050505050505050565b6000613e98612c63565b905081600080613ea88484615919565b6001600160401b031690505b836001600160401b0316836001600160401b031614613f5a576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613f04911642615941565b1115613f3f576001810154613f2990600160401b90046001600160401b031686615919565b613f3c906001600160401b031684615af9565b92505b60010154600160401b90046001600160401b03169250613eb4565b6000613f668383615941565b905082811015613fe0576000613f7c8285615941565b9050600c8111613f8c5780613f8f565b600c5b9050613f9c816003615958565b613fa790600a615d9f565b606554613fc0908390600160481b900461ffff16615d9f565b607454613fcd9190615958565b613fd79190615a7c565b6074555061406c565b6000613fec8483615941565b9050600c8111613ffc5780613fff565b600c5b9050600061400e826003615958565b61401990600a615d9f565b606554614032908490600160481b900461ffff16615d9f565b60745461403f9190615958565b6140499190615a7c565b90508060745460745461405c9190615958565b6140669190615a7c565b60745550505b505050505050565b600054610100900460ff166140df5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a84565b612642335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561418657600080fd5b505af115801561419a573d6000803e3d6000fd5b5050505061264261497f565b60006001600160401b038a1615614321576072546001600160401b03908116908b1611156142655760405162461bcd60e51b815260206004820152606c6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c401610a84565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b909204161461431b5760405162461bcd60e51b81526020600482015260606024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a401610a84565b50614475565b506001600160401b0387166000908152606d6020526040902054806143c25760405162461bcd60e51b81526020600482015260576024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a401610a84565b6069546001600160401b0390811690891611156144755760405162461bcd60e51b81526020600482015260716024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c401610a84565b6072546001600160401b03908116908a16118015906144a55750896001600160401b0316896001600160401b0316115b80156144c657506072546001600160401b03600160401b9091048116908a16115b61453e5760405162461bcd60e51b815260206004820152604f6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a401610a84565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146145fe5760405162461bcd60e51b815260206004820152606a6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c401610a84565b600061460d898989858a611016565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051614642919061566d565b602060405180830381855afa15801561465f573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906146829190615689565b61468c91906156b8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916146d0918a918a918a9190600401615c24565b602060405180830381865afa1580156146ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147119190615c9e565b6147715760405162461bcd60e51b815260206004820152603e6024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a20494e56414c49445f50524f4f4600006064820152608401610a84565b6001600160401b038b16600090815260716020526040902060020154879003613e805760405162461bcd60e51b81526020600482015260626024820152600080516020615dcc83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c401610a84565b60655460ff166148435760405162461bcd60e51b8152600401610a8490615b11565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006148cd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166149da9092919063ffffffff16565b80519091501561494a57808060200190518101906148eb9190615c9e565b61494a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a84565b505050565b6040516001600160a01b03831660248201526044810182905261494a90849063a9059cbb60e01b90606401613aba565b60655460ff16156149a25760405162461bcd60e51b8152600401610a84906157f5565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60606149e984846000856149f1565b949350505050565b606082471015614a525760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a84565b600080866001600160a01b03168587604051614a6e919061566d565b60006040518083038185875af1925050503d8060008114614aab576040519150601f19603f3d011682016040523d82523d6000602084013e614ab0565b606091505b5091509150614ac187838387614acc565b979650505050505050565b60608315614b3b578251600003614b34576001600160a01b0385163b614b345760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a84565b50816149e9565b6149e98383815115614b505781518083602001fd5b8060405162461bcd60e51b8152600401610a849190614c33565b80356001600160401b0381168114614b8157600080fd5b919050565b600080600080600060a08688031215614b9e57600080fd5b614ba786614b6a565b9450614bb560208701614b6a565b9350614bc360408701614b6a565b94979396509394606081013594506080013592915050565b60005b83811015614bf6578181015183820152602001614bde565b838111156137f65750506000910152565b60008151808452614c1f816020860160208601614bdb565b601f01601f19169290920160200192915050565b602081526000614c466020830184614c07565b9392505050565b8060408101831015614c5e57600080fd5b92915050565b8060808101831015614c5e57600080fd5b6000806000806000806000806101a0898b031215614c9257600080fd5b614c9b89614b6a565b9750614ca960208a01614b6a565b9650614cb760408a01614b6a565b95506060890135945060808901359350614cd48a60a08b01614c4d565b9250614ce38a60e08b01614c64565b9150614cf38a6101608b01614c4d565b90509295985092959890939650565b600060208284031215614d1457600080fd5b813561ffff81168114614c4657600080fd5b600080600080600060a08688031215614d3e57600080fd5b614d4786614b6a565b9450614d5560208701614b6a565b94979496505050506040830135926060810135926080909101359150565b600060208284031215614d8557600080fd5b614c4682614b6a565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614dc657614dc6614d8e565b60405290565b604051606081016001600160401b0381118282101715614dc657614dc6614d8e565b604051601f8201601f191681016001600160401b0381118282101715614e1657614e16614d8e565b604052919050565b60006001600160401b03821115614e3757614e37614d8e565b5060051b60200190565b600082601f830112614e5257600080fd5b81356001600160401b03811115614e6b57614e6b614d8e565b614e7e601f8201601f1916602001614dee565b818152846020838601011115614e9357600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614ec357600080fd5b82356001600160401b0380821115614eda57600080fd5b818501915085601f830112614eee57600080fd5b8135614f01614efc82614e1e565b614dee565b81815260059190911b83018401908481019088831115614f2057600080fd5b8585015b83811015614fb957803585811115614f3c5760008081fd5b86016080818c03601f1901811315614f545760008081fd5b614f5c614da4565b8983013588811115614f6e5760008081fd5b614f7c8e8c83870101614e41565b8252506040808401358b8301526060614f96818601614b6a565b82840152614fa5848601614b6a565b908301525085525050918601918601614f24565b5098975050505050505050565b6001600160a01b03811681146128b957600080fd5b600060208284031215614fed57600080fd5b8135614c4681614fc6565b600080600080600060a0868803121561501057600080fd5b8535945060208601356001600160401b0381111561502d57600080fd5b61503988828901614e41565b9450506040860135925061504f60608701614b6a565b9150608086013561505f81614fc6565b809150509295509295909350565b600080600080600080600080888a036101c081121561508b57600080fd5b893561509681614fc6565b985060208a01356150a681614fc6565b975060408a01356150b681614fc6565b965060608a01356150c681614fc6565b955060e0607f19820112156150da57600080fd5b5060808901935061016089013592506101808901356001600160401b038082111561510457600080fd5b6151108c838d01614e41565b93506101a08b013591508082111561512757600080fd5b506151348b828c01614e41565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c03121561516357600080fd5b61516c8a614b6a565b985061517a60208b01614b6a565b975061518860408b01614b6a565b965061519660608b01614b6a565b955060808a0135945060a08a013593506151b38b60c08c01614c4d565b92506151c38b6101008c01614c64565b91506151d38b6101808c01614c4d565b90509295985092959850929598565b6000602082840312156151f457600080fd5b5035919050565b80151581146128b957600080fd5b60006020828403121561521b57600080fd5b8135614c46816151fb565b60006020828403121561523857600080fd5b81356001600160401b0381111561524e57600080fd5b6149e984828501614e41565b6000602080838503121561526d57600080fd5b82356001600160401b038082111561528457600080fd5b818501915085601f83011261529857600080fd5b81356152a6614efc82614e1e565b81815260059190911b830184019084810190888311156152c557600080fd5b8585015b83811015614fb9578035858111156152e15760008081fd5b86016060818c03601f19018113156152f95760008081fd5b615301614dcc565b89830135888111156153135760008081fd5b6153218e8c83870101614e41565b8252506040808401358b830152615339838501614b6a565b90820152855250509186019186016152c9565b6000806000806080858703121561536257600080fd5b61536b85614b6a565b93506020850135925061538060408601614b6a565b915061538e60608601614b6a565b905092959194509250565b600080604083850312156153ac57600080fd5b82356001600160401b038111156153c257600080fd5b6153ce85828601614e41565b95602094909401359450505050565b600080604083850312156153f057600080fd5b8235915061540060208401614b6a565b90509250929050565b60208082526058908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2070656e60408201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560608201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608082015260a00190565b6020808252604c908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760608201526b040e6e8c2e8ca40c4c2e8c6d60a31b608082015260a00190565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786060820152621a5cdd60ea1b608082015260a00190565b6020808252605d908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060608201527f7468616e2063757272656e744c61737456657269666965644261746368000000608082015260a00190565b60208082526057908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2066696e60408201527f616c4e65774261746368206d75737420626520626967676572207468616e206360608201527f757272656e744c61737456657269666965644261746368000000000000000000608082015260a00190565b6000825161567f818460208701614bdb565b9190910192915050565b60006020828403121561569b57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826156c7576156c76156a2565b500690565b600181811c908216806156e057607f821691505b60208210810361570057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561578157615781615749565b01949350505050565b60208082526045908201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361588f5761588f615749565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b60006001820161591257615912615749565b5060010190565b60006001600160401b038381169083168181101561593957615939615749565b039392505050565b60008282101561595357615953615749565b500390565b600081600019048311821515161561597257615972615749565b500290565b601f82111561494a57600081815260208120601f850160051c8101602086101561599e5750805b601f850160051c820191505b8181101561406c578281556001016159aa565b81516001600160401b038111156159d6576159d6614d8e565b6159ea816159e484546156cc565b84615977565b602080601f831160018114615a1f5760008415615a075750858301515b600019600386901b1c1916600185901b17855561406c565b600085815260208120601f198616915b82811015615a4e57888601518255948401946001909101908401615a2f565b5085821015615a6c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615a8b57615a8b6156a2565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b60008219821115615b0c57615b0c615749565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b0383166020820152606060408201819052600090615bf590830184614c07565b95945050505050565b60006001600160401b0380841680615c1857615c186156a2565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615c5c57848483379084018281529284019290600101615c3c565b5050828760c0870137610100850181815286935091505b6001811015615c92578251825260209283019290910190600101615c73565b50505095945050505050565b600060208284031215615cb057600080fd5b8151614c46816151fb565b600181815b80851115615cf6578160001904821115615cdc57615cdc615749565b80851615615ce957918102915b93841c9390800290615cc0565b509250929050565b600082615d0d57506001614c5e565b81615d1a57506000614c5e565b8160018114615d305760028114615d3a57615d56565b6001915050614c5e565b60ff841115615d4b57615d4b615749565b50506001821b614c5e565b5060208310610133831016604e8410600b8410161715615d79575081810a614c5e565b615d838383615cbb565b8060001904821115615d9757615d97615749565b029392505050565b6000614c468383615cfe56fe506f6c79676f6e5a6b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a6b45564d3a3a70726f76654e6f6e44657465726d696e6973a2646970667358221220f1bfd76036c26e61e70ee0d095f86c4706c71f8d37e2ad66af9351f271e7fe6e64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50615e1180620000216000396000f3fe608060405234801561001057600080fd5b50600436106104125760003560e01c806396dc3d3911610220578063cfa8ed4711610130578063e7a7ed02116100b8578063f14916d611610087578063f14916d6146109e3578063f2fde38b146109f6578063f851a44014610a09578063f8b823e414610a1c578063fe16564f14610a2557600080fd5b8063e7a7ed0214610990578063e8bf92ed146109aa578063eaeb077b146109bd578063edc41121146109d057600080fd5b8063d939b315116100ff578063d939b3151461093f578063dbc1697614610959578063e0d1744114610961578063e11f3f1814610974578063e217cfd61461098757600080fd5b8063cfa8ed47146108eb578063d02103ca14610905578063d8d1091b14610918578063d8f54db01461092b57600080fd5b8063ab9fc5ef116101b3578063b6b0b09711610182578063b6b0b09714610890578063c0cad302146108aa578063c0ed84e0146108bd578063c89e42df146108c5578063cf136306146108d857600080fd5b8063ab9fc5ef146107e4578063adc879e9146107ee578063afd23cbe14610808578063b4d63f581461083057600080fd5b80639eb831b9116101ef5780639eb831b9146107a95780639f0d039d146107b1578063a3c573eb146107b9578063aa58bad6146107cc57600080fd5b806396dc3d391461076857806399f5634e1461077b5780639b796760146107835780639c9f3dfe1461079657600080fd5b80634a910e6a11610326578063715018a6116102ae578063837a47381161027d578063837a4738146106b2578063841b24d7146107205780638b48931e1461073a5780638c4a0af7146107445780638da5cb5b1461075757600080fd5b8063715018a6146106715780637215541a1461067957806375c508b31461068c5780637fcb36531461069f57600080fd5b8063574f649e116102f5578063574f649e1461060557806360943d6a146106185780636b8616ce1461062b5780636ff512cc1461064b578063704b6c021461065e57600080fd5b80634a910e6a146105b75780635392c5e0146105ca578063542028d5146105ea5780635437988d146105f257600080fd5b80632d0889d3116103a9578063423fa85611610378578063423fa85614610543578063456052671461055d578063458c0477146105775780634834a3431461058a5780634a1a89a71461059d57600080fd5b80632d0889d314610500578063383b3be81461050a578063394218e91461051d5780633c1582671461053057600080fd5b80631816b7e5116103e55780631816b7e51461048457806319d8ac6114610497578063220d7899146104c257806329878983146104d557600080fd5b80630eaa86ea14610417578063107bf28c1461043d57806310a01a721461045257806315064c9614610467575b600080fd5b61042a610425366004614b76565b610a38565b6040519081526020015b60405180910390f35b610445610c19565b6040516104349190614c23565b610465610460366004614c65565b610ca7565b005b6065546104749060ff1681565b6040519015158152602001610434565b610465610492366004614cf2565b610ef1565b6068546104aa906001600160401b031681565b6040516001600160401b039091168152602001610434565b6104456104d0366004614d16565b611017565b606a546104e8906001600160a01b031681565b6040516001600160a01b039091168152602001610434565b61042a620493e081565b610474610518366004614d63565b6111bd565b61046561052b366004614d63565b611204565b61046561053e366004614ea0565b611353565b6068546104aa90600160401b90046001600160401b031681565b6068546104aa90600160801b90046001600160401b031681565b6072546104aa906001600160401b031681565b610465610598366004614c65565b611b55565b6072546104aa90600160401b90046001600160401b031681565b6104656105c5366004614d63565b611e9e565b61042a6105d8366004614d63565b606d6020526000908152604090205481565b610445612139565b610465610600366004614fcb565b612146565b61042a610613366004614fe8565b612170565b61046561062636600461505d565b6121b3565b61042a610639366004614d63565b60666020526000908152604090205481565b610465610659366004614fcb565b612523565b61046561066c366004614fcb565b6125a7565b61046561261f565b610465610687366004614d63565b612633565b61046561069a366004615134565b6128ab565b6069546104aa906001600160401b031681565b6106f56106c03660046151d2565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610434565b6072546104aa90600160c01b90046001600160401b031681565b6104aa62093a8081565b6104656107523660046151f9565b61293a565b6033546001600160a01b03166104e8565b610465610776366004614d63565b6129b1565b61042a6129dc565b610465610791366004614d63565b612abf565b6104656107a4366004614d63565b612af4565b61042a600c81565b60745461042a565b6070546104e8906001600160a01b031681565b6065546104aa9061010090046001600160401b031681565b6104aa6206978081565b606c546104aa90600160a81b90046001600160401b031681565b60655461081d90600160481b900461ffff1681565b60405161ffff9091168152602001610434565b61086b61083e366004614d63565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610434565b6065546104e890600160581b90046001600160a01b031681565b6104656108b8366004615216565b612c3a565b6104aa612c52565b6104656108d3366004615216565b612c9f565b6104656108e6366004614d63565b612d05565b6069546104e890600160401b90046001600160a01b031681565b606c546104e8906001600160a01b031681565b61046561092636600461524a565b612d86565b606c5461047490600160a01b900460ff1681565b6072546104aa90600160801b90046001600160401b031681565b610465613250565b61046561096f36600461533c565b61330c565b610465610982366004615134565b61337e565b6104aa6103e881565b6068546104aa90600160c01b90046001600160401b031681565b606b546104e8906001600160a01b031681565b6104656109cb366004615389565b6134c3565b6104656109de366004614c65565b6137ec565b6104656109f1366004614fcb565b61390c565b610465610a04366004614fcb565b613984565b6073546104e8906001600160a01b031681565b61042a60745481565b610465610a333660046153cd565b6139fa565b6000806000610a45612c52565b90506001600160401b03881615610ae2576072546001600160401b039081169089161115610a8e5760405162461bcd60e51b8152600401610a85906153f9565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610adc5760405162461bcd60e51b8152600401610a859061547c565b50610b4c565b6001600160401b0387166000908152606d6020526040902054915081610b1a5760405162461bcd60e51b8152600401610a85906154ee565b806001600160401b0316876001600160401b03161115610b4c5760405162461bcd60e51b8152600401610a8590615557565b806001600160401b0316866001600160401b031611610b7d5760405162461bcd60e51b8152600401610a85906155da565b6000610b8c8888888689611017565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051610bc1919061565d565b602060405180830381855afa158015610bde573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c019190615679565b610c0b91906156a8565b9a9950505050505050505050565b606f8054610c26906156bc565b80601f0160208091040260200160405190810160405280929190818152602001828054610c52906156bc565b8015610c9f5780601f10610c7457610100808354040283529160200191610c9f565b820191906000526020600020905b815481529060010190602001808311610c8257829003601f168201915b505050505081565b610caf613a1c565b600080610cba612c52565b90506001600160401b038a1615610d4e576072546001600160401b03908116908b161115610cfa5760405162461bcd60e51b8152600401610a85906153f9565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610d485760405162461bcd60e51b8152600401610a859061547c565b50610db8565b6001600160401b0389166000908152606d6020526040902054915081610d865760405162461bcd60e51b8152600401610a85906154ee565b806001600160401b0316896001600160401b03161115610db85760405162461bcd60e51b8152600401610a8590615557565b806001600160401b0316886001600160401b031611610de95760405162461bcd60e51b8152600401610a85906155da565b6000610df88a8a8a868b611017565b6069805467ffffffffffffffff19166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610e4657607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610e8c57600080fd5b505af1158015610ea0573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610f1b5760405162461bcd60e51b8152600401610a85906156f6565b6103e88161ffff16118015610f3557506104008161ffff16105b610fba5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a401610a85565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b0380861660008181526067602052604080822054938816825290205460609291158061104957508115155b6110bd576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a85565b80611132576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a85565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b03828116600090815260716020526040812054909242926111f392600160801b9092048116911661574f565b6001600160401b0316111592915050565b6073546001600160a01b0316331461122e5760405162461bcd60e51b8152600401610a85906156f6565b62093a806001600160401b038216111561125a5760405162461bcd60e51b8152600401610a859061577a565b60655460ff166112fd576072546001600160401b03600160c01b9091048116908216106112fd5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a401610a85565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a19060200161100c565b60655460ff16156113765760405162461bcd60e51b8152600401610a85906157e5565b606954600160401b90046001600160a01b031633146113fd5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e6365720000000000006064820152608401610a85565b8051806114725760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e636520312062617463680000006064820152608401610a85565b6103e881106114eb576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e7920626174636865736064820152608401610a85565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561197957600087828151811061153e5761153e61584d565b60200260200101519050600081606001516001600160401b031611156116f7578361156881615863565b94505060008160000151805190602001208260200151836060015160405160200161159593929190615889565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461163b5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d617463680000006064820152608401610a85565b81606001516001600160401b031682604001516001600160401b031610156116f15760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a401610a85565b5061186c565b602081015115806117805750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b36329161173a9160040190815260200190565b6020604051808303816000875af1158015611759573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177d9190615679565b15155b6117f25760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d7573742065786973740000000000006064820152608401610a85565b805151620493e01161186c5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610a85565b856001600160401b031681604001516001600160401b03161015801561189f57504281604001516001600160401b031611155b6119115760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e67650000006064820152608401610a85565b805180516020918201208183015160408085015190516119389488949392913391016158ac565b604051602081830303815290604052805190602001209250848061195b90615863565b95505080604001519550508080611971906158f0565b915050611522565b506068546001600160401b03600160c01b909104811690831611156119fe5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b6064820152608401610a85565b606854600090611a1e90600160801b90046001600160401b031684615909565b611a31906001600160401b031687615931565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611b0690339030908490611aeb9190615948565b606554600160581b90046001600160a01b0316929190613a76565b611b0e613ae1565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b785760405162461bcd60e51b8152600401610a85906157e5565b6072546001600160401b038781166000908152606760205260409020600101544292611baf92600160c01b9091048116911661574f565b6001600160401b03161115611c385760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a401610a85565b6103e8611c458888615909565b6001600160401b031610611cc15760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e792062617463686573000000006064820152608401610a85565b611cd18888888888888888613b81565b611cda86613e7e565b607254600160801b90046001600160401b0316600003611da2576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615611d3f57607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d8557600080fd5b505af1158015611d99573d6000803e3d6000fd5b50505050611e53565b611daa613ae1565b607280546001600160401b0316906000611dc383615863565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611ecb57506072546001600160401b03600160401b9091048116908216115b8015611ee657506072546001600160401b0390811690821611155b611f645760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a401610a85565b606a546001600160a01b0316331461200e57611f7f816111bd565b61200e5760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a401610a85565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b1580156120cb57600080fd5b505af11580156120df573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e846002015460405161212c91815260200190565b60405180910390a3505050565b606e8054610c26906156bc565b61214e613a1c565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b60008585805190602001208585856040516020016121929594939291906158ac565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff16158080156121d35750600054600160ff909116105b806121ed5750303b1580156121ed575060005460ff166001145b6122505760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a85565b6000805460ff191660011790558015612273576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a8416179055607080549091169188169190911790556122f06020860186614fcb565b607380546001600160a01b0319166001600160a01b03929092169190911790556123206060860160408701614fcb565b606980546001600160a01b0392909216600160401b02600160401b600160e01b031990921691909117905561235b60c0860160a08701614fcb565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa7113568490556123b860e0860160c08701614d63565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556123ef6040860160208701614d63565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561242b6080860160608701614d63565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b1990921691909117905561246760a08601608087016151f9565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e61248f84826159ad565b50606f61249c83826159ad565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124d2614064565b8015612518576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b0316331461254d5760405162461bcd60e51b8152600401610a85906156f6565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161100c565b6073546001600160a01b031633146125d15760405162461bcd60e51b8152600401610a85906156f6565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a19060200161100c565b612627613a1c565b61263160006140d4565b565b6033546001600160a01b031633146128a0576072546000906001600160401b03161561268457506072546001600160401b03908116600090815260716020526040902054600160401b900416612692565b506069546001600160401b03165b80826001600160401b0316116127105760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c7265616479207665726966696564000000006064820152608401610a85565b6068546001600160401b03600160401b90910481169083161180159061275257506001600160401b038083166000908152606760205260409020600101541615155b6127dd5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a401610a85565b6001600160401b03808316600090815260676020526040902060010154429161280b9162093a80911661574f565b6001600160401b0316111561289e5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a401610a85565b505b6128a8614126565b50565b60655460ff16156128ce5760405162461bcd60e51b8152600401610a85906157e5565b6128df898989898989898989614196565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1612518614126565b6073546001600160a01b031633146129645760405162461bcd60e51b8152600401610a85906156f6565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061100c90831515815260200190565b6129b9613a1c565b6069805467ffffffffffffffff19166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a539190615679565b90506000612a5f612c52565b6068546001600160401b03600160401b8204811691612a8f91600160801b8204811691600160c01b900416615909565b612a99919061574f565b612aa39190615909565b6001600160401b03169050612ab88183615a6c565b9250505090565b612ac7613a1c565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612b1e5760405162461bcd60e51b8152600401610a85906156f6565b62093a806001600160401b0382161115612b4a5760405162461bcd60e51b8152600401610a859061577a565b60655460ff16612bdf576072546001600160401b03600160801b909104811690821610612bdf5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f776572006064820152608401610a85565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c759060200161100c565b612c42613a1c565b606f612c4e82826159ad565b5050565b6072546000906001600160401b031615612c8f57506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612cc95760405162461bcd60e51b8152600401610a85906156f6565b606e612cd582826159ad565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161100c9190614c23565b6073546001600160a01b03163314612d2f5760405162461bcd60e51b8152600401610a85906156f6565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f9060200161100c565b60655460ff1615612da95760405162461bcd60e51b8152600401610a85906157e5565b606c54600160a01b900460ff161515600114612dd75760405162461bcd60e51b8152600401610a8590615a80565b805180612e3a5760405162461bcd60e51b815260206004820152603d6024820152600080516020615d9c83398151915260448201527f3a204d75737420666f726365206174206c6561737420312062617463680000006064820152608401610a85565b6103e88110612eab5760405162461bcd60e51b81526020600482015260436024820152600080516020615d9c83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a401610a85565b6068546001600160401b03600160c01b8204811691612ed3918491600160801b900416615ae9565b1115612f2d5760405162461bcd60e51b81526020600482015260356024820152600080516020615d9c8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b6064820152608401610a85565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015613159576000868281518110612f7a57612f7a61584d565b602002602001015190508380612f8f90615863565b945050600081600001518051906020012082602001518360400151604051602001612fbc93929190615889565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461305b5760405162461bcd60e51b81526020600482015260426024820152600080516020615d9c83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a401610a85565b613066600188615931565b83036130fb5742620697808360400151613080919061574f565b6001600160401b031611156130fb5760405162461bcd60e51b81526020600482015260476024820152600080516020615d9c83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a401610a85565b815180516020918201208184015160405161311e938893929142913391016158ac565b604051602081830303815290604052805190602001209350858061314190615863565b96505050508080613151906158f0565b915050612f5e565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166132725760405162461bcd60e51b8152600401610a8590615b01565b6073546001600160a01b0316331461329c5760405162461bcd60e51b8152600401610a85906156f6565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156132ec57600080fd5b505af1158015613300573d6000803e3d6000fd5b50505050612631614811565b613314613a1c565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133a85760405162461bcd60e51b8152600401610a8590615b5e565b6133b9898989898989898989614196565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561340457607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561344a57600080fd5b505af115801561345e573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff16156134e65760405162461bcd60e51b8152600401610a85906157e5565b606c54600160a01b900460ff1615156001146135145760405162461bcd60e51b8152600401610a8590615a80565b600061351f60745490565b9050818111156135845760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b6064820152608401610a85565b620493e08351106135f55760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b6064820152608401610a85565b60655461361490600160581b90046001600160a01b0316333084613a76565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa15801561365e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136829190615679565b60688054919250600160c01b9091046001600160401b03169060186136a683615863565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016136e793929190615889565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361378b57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26137e6565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516137dd93929190615bbb565b60405180910390a25b50505050565b606a546001600160a01b031633146138165760405162461bcd60e51b8152600401610a8590615b5e565b6138268888888888888888613b81565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561387157607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156138b757600080fd5b505af11580156138cb573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e8c565b6073546001600160a01b031633146139365760405162461bcd60e51b8152600401610a85906156f6565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca9060200161100c565b61398c613a1c565b6001600160a01b0381166139f15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a85565b6128a8816140d4565b613a02613a1c565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b031633146126315760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a85565b6040516001600160a01b03808516602483015283166044820152606481018290526137e69085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614868565b6072546001600160401b03600160401b820481169116111561263157607254600090613b1e90600160401b90046001600160401b0316600161574f565b9050613b29816111bd565b156128a857607254600090600290613b4b9084906001600160401b0316615909565b613b559190615bee565b613b5f908361574f565b9050613b6a816111bd565b15613b7857612c4e81611e9e565b612c4e82611e9e565b600080613b8c612c52565b90506001600160401b038a1615613c20576072546001600160401b03908116908b161115613bcc5760405162461bcd60e51b8152600401610a85906153f9565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c1a5760405162461bcd60e51b8152600401610a859061547c565b50613c8a565b6001600160401b0389166000908152606d6020526040902054915081613c585760405162461bcd60e51b8152600401610a85906154ee565b806001600160401b0316896001600160401b03161115613c8a5760405162461bcd60e51b8152600401610a8590615557565b806001600160401b0316886001600160401b031611613cbb5760405162461bcd60e51b8152600401610a85906155da565b6000613cca8a8a8a868b611017565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051613cff919061565d565b602060405180830381855afa158015613d1c573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613d3f9190615679565b613d4991906156a8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613d8d918b918b918b9190600401615c14565b602060405180830381865afa158015613daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dce9190615c8e565b613e2d5760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e7660448201526930b634b210383937b7b360b11b6064820152608401610a85565b613e7033613e3b858d615909565b6001600160401b0316613e4c6129dc565b613e569190615948565b606554600160581b90046001600160a01b0316919061493f565b505050505050505050505050565b6000613e88612c52565b905081600080613e988484615909565b6001600160401b031690505b836001600160401b0316836001600160401b031614613f4a576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613ef4911642615931565b1115613f2f576001810154613f1990600160401b90046001600160401b031686615909565b613f2c906001600160401b031684615ae9565b92505b60010154600160401b90046001600160401b03169250613ea4565b6000613f568383615931565b905082811015613fd0576000613f6c8285615931565b9050600c8111613f7c5780613f7f565b600c5b9050613f8c816003615948565b613f9790600a615d8f565b606554613fb0908390600160481b900461ffff16615d8f565b607454613fbd9190615948565b613fc79190615a6c565b6074555061405c565b6000613fdc8483615931565b9050600c8111613fec5780613fef565b600c5b90506000613ffe826003615948565b61400990600a615d8f565b606554614022908490600160481b900461ffff16615d8f565b60745461402f9190615948565b6140399190615a6c565b90508060745460745461404c9190615948565b6140569190615a6c565b60745550505b505050505050565b600054610100900460ff166140cf5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a85565b612631335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561417657600080fd5b505af115801561418a573d6000803e3d6000fd5b5050505061263161496f565b60006001600160401b038a1615614311576072546001600160401b03908116908b1611156142555760405162461bcd60e51b815260206004820152606c6024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c401610a85565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b909204161461430b5760405162461bcd60e51b81526020600482015260606024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a401610a85565b50614465565b506001600160401b0387166000908152606d6020526040902054806143b25760405162461bcd60e51b81526020600482015260576024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a401610a85565b6069546001600160401b0390811690891611156144655760405162461bcd60e51b81526020600482015260716024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c401610a85565b6072546001600160401b03908116908a16118015906144955750896001600160401b0316896001600160401b0316115b80156144b657506072546001600160401b03600160401b9091048116908a16115b61452e5760405162461bcd60e51b815260206004820152604f6024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a401610a85565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146145ee5760405162461bcd60e51b815260206004820152606a6024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c401610a85565b60006145fd898989858a611017565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051614632919061565d565b602060405180830381855afa15801561464f573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906146729190615679565b61467c91906156a8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916146c0918a918a918a9190600401615c14565b602060405180830381865afa1580156146dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147019190615c8e565b6147615760405162461bcd60e51b815260206004820152603e6024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a20696e76616c69642070726f6f6600006064820152608401610a85565b6001600160401b038b16600090815260716020526040902060020154879003613e705760405162461bcd60e51b81526020600482015260626024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c401610a85565b60655460ff166148335760405162461bcd60e51b8152600401610a8590615b01565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006148bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166149ca9092919063ffffffff16565b80519091501561493a57808060200190518101906148db9190615c8e565b61493a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a85565b505050565b6040516001600160a01b03831660248201526044810182905261493a90849063a9059cbb60e01b90606401613aaa565b60655460ff16156149925760405162461bcd60e51b8152600401610a85906157e5565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60606149d984846000856149e1565b949350505050565b606082471015614a425760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a85565b600080866001600160a01b03168587604051614a5e919061565d565b60006040518083038185875af1925050503d8060008114614a9b576040519150601f19603f3d011682016040523d82523d6000602084013e614aa0565b606091505b5091509150614ab187838387614abc565b979650505050505050565b60608315614b2b578251600003614b24576001600160a01b0385163b614b245760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a85565b50816149d9565b6149d98383815115614b405781518083602001fd5b8060405162461bcd60e51b8152600401610a859190614c23565b80356001600160401b0381168114614b7157600080fd5b919050565b600080600080600060a08688031215614b8e57600080fd5b614b9786614b5a565b9450614ba560208701614b5a565b9350614bb360408701614b5a565b94979396509394606081013594506080013592915050565b60005b83811015614be6578181015183820152602001614bce565b838111156137e65750506000910152565b60008151808452614c0f816020860160208601614bcb565b601f01601f19169290920160200192915050565b602081526000614c366020830184614bf7565b9392505050565b8060408101831015614c4e57600080fd5b92915050565b8060808101831015614c4e57600080fd5b6000806000806000806000806101a0898b031215614c8257600080fd5b614c8b89614b5a565b9750614c9960208a01614b5a565b9650614ca760408a01614b5a565b95506060890135945060808901359350614cc48a60a08b01614c3d565b9250614cd38a60e08b01614c54565b9150614ce38a6101608b01614c3d565b90509295985092959890939650565b600060208284031215614d0457600080fd5b813561ffff81168114614c3657600080fd5b600080600080600060a08688031215614d2e57600080fd5b614d3786614b5a565b9450614d4560208701614b5a565b94979496505050506040830135926060810135926080909101359150565b600060208284031215614d7557600080fd5b614c3682614b5a565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614db657614db6614d7e565b60405290565b604051606081016001600160401b0381118282101715614db657614db6614d7e565b604051601f8201601f191681016001600160401b0381118282101715614e0657614e06614d7e565b604052919050565b60006001600160401b03821115614e2757614e27614d7e565b5060051b60200190565b600082601f830112614e4257600080fd5b81356001600160401b03811115614e5b57614e5b614d7e565b614e6e601f8201601f1916602001614dde565b818152846020838601011115614e8357600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614eb357600080fd5b82356001600160401b0380821115614eca57600080fd5b818501915085601f830112614ede57600080fd5b8135614ef1614eec82614e0e565b614dde565b81815260059190911b83018401908481019088831115614f1057600080fd5b8585015b83811015614fa957803585811115614f2c5760008081fd5b86016080818c03601f1901811315614f445760008081fd5b614f4c614d94565b8983013588811115614f5e5760008081fd5b614f6c8e8c83870101614e31565b8252506040808401358b8301526060614f86818601614b5a565b82840152614f95848601614b5a565b908301525085525050918601918601614f14565b5098975050505050505050565b6001600160a01b03811681146128a857600080fd5b600060208284031215614fdd57600080fd5b8135614c3681614fb6565b600080600080600060a0868803121561500057600080fd5b8535945060208601356001600160401b0381111561501d57600080fd5b61502988828901614e31565b9450506040860135925061503f60608701614b5a565b9150608086013561504f81614fb6565b809150509295509295909350565b600080600080600080600080888a036101c081121561507b57600080fd5b893561508681614fb6565b985060208a013561509681614fb6565b975060408a01356150a681614fb6565b965060608a01356150b681614fb6565b955060e0607f19820112156150ca57600080fd5b5060808901935061016089013592506101808901356001600160401b03808211156150f457600080fd5b6151008c838d01614e31565b93506101a08b013591508082111561511757600080fd5b506151248b828c01614e31565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c03121561515357600080fd5b61515c8a614b5a565b985061516a60208b01614b5a565b975061517860408b01614b5a565b965061518660608b01614b5a565b955060808a0135945060a08a013593506151a38b60c08c01614c3d565b92506151b38b6101008c01614c54565b91506151c38b6101808c01614c3d565b90509295985092959850929598565b6000602082840312156151e457600080fd5b5035919050565b80151581146128a857600080fd5b60006020828403121561520b57600080fd5b8135614c36816151eb565b60006020828403121561522857600080fd5b81356001600160401b0381111561523e57600080fd5b6149d984828501614e31565b6000602080838503121561525d57600080fd5b82356001600160401b038082111561527457600080fd5b818501915085601f83011261528857600080fd5b8135615296614eec82614e0e565b81815260059190911b830184019084810190888311156152b557600080fd5b8585015b83811015614fa9578035858111156152d15760008081fd5b86016060818c03601f19018113156152e95760008081fd5b6152f1614dbc565b89830135888111156153035760008081fd5b6153118e8c83870101614e31565b8252506040808401358b830152615329838501614b5a565b90820152855250509186019186016152b9565b6000806000806080858703121561535257600080fd5b61535b85614b5a565b93506020850135925061537060408601614b5a565b915061537e60608601614b5a565b905092959194509250565b6000806040838503121561539c57600080fd5b82356001600160401b038111156153b257600080fd5b6153be85828601614e31565b95602094909401359450505050565b600080604083850312156153e057600080fd5b823591506153f060208401614b5a565b90509250929050565b60208082526058908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2070656e60408201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560608201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608082015260a00190565b6020808252604c908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760608201526b040e6e8c2e8ca40c4c2e8c6d60a31b608082015260a00190565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786060820152621a5cdd60ea1b608082015260a00190565b6020808252605d908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060608201527f7468616e2063757272656e744c61737456657269666965644261746368000000608082015260a00190565b60208082526057908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2066696e60408201527f616c4e65774261746368206d75737420626520626967676572207468616e206360608201527f757272656e744c61737456657269666965644261746368000000000000000000608082015260a00190565b6000825161566f818460208701614bcb565b9190910192915050565b60006020828403121561568b57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826156b7576156b7615692565b500690565b600181811c908216806156d057607f821691505b6020821081036156f057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561577157615771615739565b01949350505050565b60208082526045908201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361587f5761587f615739565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b60006001820161590257615902615739565b5060010190565b60006001600160401b038381169083168181101561592957615929615739565b039392505050565b60008282101561594357615943615739565b500390565b600081600019048311821515161561596257615962615739565b500290565b601f82111561493a57600081815260208120601f850160051c8101602086101561598e5750805b601f850160051c820191505b8181101561405c5782815560010161599a565b81516001600160401b038111156159c6576159c6614d7e565b6159da816159d484546156bc565b84615967565b602080601f831160018114615a0f57600084156159f75750858301515b600019600386901b1c1916600185901b17855561405c565b600085815260208120601f198616915b82811015615a3e57888601518255948401946001909101908401615a1f565b5085821015615a5c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615a7b57615a7b615692565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b60008219821115615afc57615afc615739565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b0383166020820152606060408201819052600090615be590830184614bf7565b95945050505050565b60006001600160401b0380841680615c0857615c08615692565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615c4c57848483379084018281529284019290600101615c2c565b5050828760c0870137610100850181815286935091505b6001811015615c82578251825260209283019290910190600101615c63565b50505095945050505050565b600060208284031215615ca057600080fd5b8151614c36816151eb565b600181815b80851115615ce6578160001904821115615ccc57615ccc615739565b80851615615cd957918102915b93841c9390800290615cb0565b509250929050565b600082615cfd57506001614c4e565b81615d0a57506000614c4e565b8160018114615d205760028114615d2a57615d46565b6001915050614c4e565b60ff841115615d3b57615d3b615739565b50506001821b614c4e565b5060208310610133831016604e8410600b8410161715615d69575081810a614c4e565b615d738383615cab565b8060001904821115615d8757615d87615739565b029392505050565b6000614c368383615cee56fe506f6c79676f6e5a6b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a6b45564d3a3a70726f76654e6f6e44657465726d696e6973a2646970667358221220e54b91d6c3c6f0be9ca949820d3b433020359ea35bd579bbcea11a0cc246100364736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106104125760003560e01c806396dc3d3911610220578063cfa8ed4711610130578063e7a7ed02116100b8578063f14916d611610087578063f14916d6146109e3578063f2fde38b146109f6578063f851a44014610a09578063f8b823e414610a1c578063fe16564f14610a2557600080fd5b8063e7a7ed0214610990578063e8bf92ed146109aa578063eaeb077b146109bd578063edc41121146109d057600080fd5b8063d939b315116100ff578063d939b3151461093f578063dbc1697614610959578063e0d1744114610961578063e11f3f1814610974578063e217cfd61461098757600080fd5b8063cfa8ed47146108eb578063d02103ca14610905578063d8d1091b14610918578063d8f54db01461092b57600080fd5b8063ab9fc5ef116101b3578063b6b0b09711610182578063b6b0b09714610890578063c0cad302146108aa578063c0ed84e0146108bd578063c89e42df146108c5578063cf136306146108d857600080fd5b8063ab9fc5ef146107e4578063adc879e9146107ee578063afd23cbe14610808578063b4d63f581461083057600080fd5b80639eb831b9116101ef5780639eb831b9146107a95780639f0d039d146107b1578063a3c573eb146107b9578063aa58bad6146107cc57600080fd5b806396dc3d391461076857806399f5634e1461077b5780639b796760146107835780639c9f3dfe1461079657600080fd5b80634a910e6a11610326578063715018a6116102ae578063837a47381161027d578063837a4738146106b2578063841b24d7146107205780638b48931e1461073a5780638c4a0af7146107445780638da5cb5b1461075757600080fd5b8063715018a6146106715780637215541a1461067957806375c508b31461068c5780637fcb36531461069f57600080fd5b8063574f649e116102f5578063574f649e1461060557806360943d6a146106185780636b8616ce1461062b5780636ff512cc1461064b578063704b6c021461065e57600080fd5b80634a910e6a146105b75780635392c5e0146105ca578063542028d5146105ea5780635437988d146105f257600080fd5b80632d0889d3116103a9578063423fa85611610378578063423fa85614610543578063456052671461055d578063458c0477146105775780634834a3431461058a5780634a1a89a71461059d57600080fd5b80632d0889d314610500578063383b3be81461050a578063394218e91461051d5780633c1582671461053057600080fd5b80631816b7e5116103e55780631816b7e51461048457806319d8ac6114610497578063220d7899146104c257806329878983146104d557600080fd5b80630eaa86ea14610417578063107bf28c1461043d57806310a01a721461045257806315064c9614610467575b600080fd5b61042a610425366004614b76565b610a38565b6040519081526020015b60405180910390f35b610445610c19565b6040516104349190614c23565b610465610460366004614c65565b610ca7565b005b6065546104749060ff1681565b6040519015158152602001610434565b610465610492366004614cf2565b610ef1565b6068546104aa906001600160401b031681565b6040516001600160401b039091168152602001610434565b6104456104d0366004614d16565b611017565b606a546104e8906001600160a01b031681565b6040516001600160a01b039091168152602001610434565b61042a620493e081565b610474610518366004614d63565b6111bd565b61046561052b366004614d63565b611204565b61046561053e366004614ea0565b611353565b6068546104aa90600160401b90046001600160401b031681565b6068546104aa90600160801b90046001600160401b031681565b6072546104aa906001600160401b031681565b610465610598366004614c65565b611b55565b6072546104aa90600160401b90046001600160401b031681565b6104656105c5366004614d63565b611e9e565b61042a6105d8366004614d63565b606d6020526000908152604090205481565b610445612139565b610465610600366004614fcb565b612146565b61042a610613366004614fe8565b612170565b61046561062636600461505d565b6121b3565b61042a610639366004614d63565b60666020526000908152604090205481565b610465610659366004614fcb565b612523565b61046561066c366004614fcb565b6125a7565b61046561261f565b610465610687366004614d63565b612633565b61046561069a366004615134565b6128ab565b6069546104aa906001600160401b031681565b6106f56106c03660046151d2565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610434565b6072546104aa90600160c01b90046001600160401b031681565b6104aa62093a8081565b6104656107523660046151f9565b61293a565b6033546001600160a01b03166104e8565b610465610776366004614d63565b6129b1565b61042a6129dc565b610465610791366004614d63565b612abf565b6104656107a4366004614d63565b612af4565b61042a600c81565b60745461042a565b6070546104e8906001600160a01b031681565b6065546104aa9061010090046001600160401b031681565b6104aa6206978081565b606c546104aa90600160a81b90046001600160401b031681565b60655461081d90600160481b900461ffff1681565b60405161ffff9091168152602001610434565b61086b61083e366004614d63565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610434565b6065546104e890600160581b90046001600160a01b031681565b6104656108b8366004615216565b612c3a565b6104aa612c52565b6104656108d3366004615216565b612c9f565b6104656108e6366004614d63565b612d05565b6069546104e890600160401b90046001600160a01b031681565b606c546104e8906001600160a01b031681565b61046561092636600461524a565b612d86565b606c5461047490600160a01b900460ff1681565b6072546104aa90600160801b90046001600160401b031681565b610465613250565b61046561096f36600461533c565b61330c565b610465610982366004615134565b61337e565b6104aa6103e881565b6068546104aa90600160c01b90046001600160401b031681565b606b546104e8906001600160a01b031681565b6104656109cb366004615389565b6134c3565b6104656109de366004614c65565b6137ec565b6104656109f1366004614fcb565b61390c565b610465610a04366004614fcb565b613984565b6073546104e8906001600160a01b031681565b61042a60745481565b610465610a333660046153cd565b6139fa565b6000806000610a45612c52565b90506001600160401b03881615610ae2576072546001600160401b039081169089161115610a8e5760405162461bcd60e51b8152600401610a85906153f9565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610adc5760405162461bcd60e51b8152600401610a859061547c565b50610b4c565b6001600160401b0387166000908152606d6020526040902054915081610b1a5760405162461bcd60e51b8152600401610a85906154ee565b806001600160401b0316876001600160401b03161115610b4c5760405162461bcd60e51b8152600401610a8590615557565b806001600160401b0316866001600160401b031611610b7d5760405162461bcd60e51b8152600401610a85906155da565b6000610b8c8888888689611017565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051610bc1919061565d565b602060405180830381855afa158015610bde573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c019190615679565b610c0b91906156a8565b9a9950505050505050505050565b606f8054610c26906156bc565b80601f0160208091040260200160405190810160405280929190818152602001828054610c52906156bc565b8015610c9f5780601f10610c7457610100808354040283529160200191610c9f565b820191906000526020600020905b815481529060010190602001808311610c8257829003601f168201915b505050505081565b610caf613a1c565b600080610cba612c52565b90506001600160401b038a1615610d4e576072546001600160401b03908116908b161115610cfa5760405162461bcd60e51b8152600401610a85906153f9565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610d485760405162461bcd60e51b8152600401610a859061547c565b50610db8565b6001600160401b0389166000908152606d6020526040902054915081610d865760405162461bcd60e51b8152600401610a85906154ee565b806001600160401b0316896001600160401b03161115610db85760405162461bcd60e51b8152600401610a8590615557565b806001600160401b0316886001600160401b031611610de95760405162461bcd60e51b8152600401610a85906155da565b6000610df88a8a8a868b611017565b6069805467ffffffffffffffff19166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610e4657607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610e8c57600080fd5b505af1158015610ea0573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610f1b5760405162461bcd60e51b8152600401610a85906156f6565b6103e88161ffff16118015610f3557506104008161ffff16105b610fba5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a401610a85565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b0380861660008181526067602052604080822054938816825290205460609291158061104957508115155b6110bd576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a85565b80611132576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a85565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b03828116600090815260716020526040812054909242926111f392600160801b9092048116911661574f565b6001600160401b0316111592915050565b6073546001600160a01b0316331461122e5760405162461bcd60e51b8152600401610a85906156f6565b62093a806001600160401b038216111561125a5760405162461bcd60e51b8152600401610a859061577a565b60655460ff166112fd576072546001600160401b03600160c01b9091048116908216106112fd5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a401610a85565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a19060200161100c565b60655460ff16156113765760405162461bcd60e51b8152600401610a85906157e5565b606954600160401b90046001600160a01b031633146113fd5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e6365720000000000006064820152608401610a85565b8051806114725760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e636520312062617463680000006064820152608401610a85565b6103e881106114eb576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e7920626174636865736064820152608401610a85565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561197957600087828151811061153e5761153e61584d565b60200260200101519050600081606001516001600160401b031611156116f7578361156881615863565b94505060008160000151805190602001208260200151836060015160405160200161159593929190615889565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461163b5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d617463680000006064820152608401610a85565b81606001516001600160401b031682604001516001600160401b031610156116f15760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a401610a85565b5061186c565b602081015115806117805750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b36329161173a9160040190815260200190565b6020604051808303816000875af1158015611759573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177d9190615679565b15155b6117f25760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d7573742065786973740000000000006064820152608401610a85565b805151620493e01161186c5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610a85565b856001600160401b031681604001516001600160401b03161015801561189f57504281604001516001600160401b031611155b6119115760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e67650000006064820152608401610a85565b805180516020918201208183015160408085015190516119389488949392913391016158ac565b604051602081830303815290604052805190602001209250848061195b90615863565b95505080604001519550508080611971906158f0565b915050611522565b506068546001600160401b03600160c01b909104811690831611156119fe5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b6064820152608401610a85565b606854600090611a1e90600160801b90046001600160401b031684615909565b611a31906001600160401b031687615931565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611b0690339030908490611aeb9190615948565b606554600160581b90046001600160a01b0316929190613a76565b611b0e613ae1565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b785760405162461bcd60e51b8152600401610a85906157e5565b6072546001600160401b038781166000908152606760205260409020600101544292611baf92600160c01b9091048116911661574f565b6001600160401b03161115611c385760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a401610a85565b6103e8611c458888615909565b6001600160401b031610611cc15760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e792062617463686573000000006064820152608401610a85565b611cd18888888888888888613b81565b611cda86613e7e565b607254600160801b90046001600160401b0316600003611da2576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615611d3f57607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d8557600080fd5b505af1158015611d99573d6000803e3d6000fd5b50505050611e53565b611daa613ae1565b607280546001600160401b0316906000611dc383615863565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611ecb57506072546001600160401b03600160401b9091048116908216115b8015611ee657506072546001600160401b0390811690821611155b611f645760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a401610a85565b606a546001600160a01b0316331461200e57611f7f816111bd565b61200e5760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a401610a85565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b1580156120cb57600080fd5b505af11580156120df573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e846002015460405161212c91815260200190565b60405180910390a3505050565b606e8054610c26906156bc565b61214e613a1c565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b60008585805190602001208585856040516020016121929594939291906158ac565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff16158080156121d35750600054600160ff909116105b806121ed5750303b1580156121ed575060005460ff166001145b6122505760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a85565b6000805460ff191660011790558015612273576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a8416179055607080549091169188169190911790556122f06020860186614fcb565b607380546001600160a01b0319166001600160a01b03929092169190911790556123206060860160408701614fcb565b606980546001600160a01b0392909216600160401b02600160401b600160e01b031990921691909117905561235b60c0860160a08701614fcb565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa7113568490556123b860e0860160c08701614d63565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556123ef6040860160208701614d63565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561242b6080860160608701614d63565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b1990921691909117905561246760a08601608087016151f9565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e61248f84826159ad565b50606f61249c83826159ad565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124d2614064565b8015612518576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b0316331461254d5760405162461bcd60e51b8152600401610a85906156f6565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161100c565b6073546001600160a01b031633146125d15760405162461bcd60e51b8152600401610a85906156f6565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a19060200161100c565b612627613a1c565b61263160006140d4565b565b6033546001600160a01b031633146128a0576072546000906001600160401b03161561268457506072546001600160401b03908116600090815260716020526040902054600160401b900416612692565b506069546001600160401b03165b80826001600160401b0316116127105760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c7265616479207665726966696564000000006064820152608401610a85565b6068546001600160401b03600160401b90910481169083161180159061275257506001600160401b038083166000908152606760205260409020600101541615155b6127dd5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a401610a85565b6001600160401b03808316600090815260676020526040902060010154429161280b9162093a80911661574f565b6001600160401b0316111561289e5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a401610a85565b505b6128a8614126565b50565b60655460ff16156128ce5760405162461bcd60e51b8152600401610a85906157e5565b6128df898989898989898989614196565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1612518614126565b6073546001600160a01b031633146129645760405162461bcd60e51b8152600401610a85906156f6565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061100c90831515815260200190565b6129b9613a1c565b6069805467ffffffffffffffff19166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a539190615679565b90506000612a5f612c52565b6068546001600160401b03600160401b8204811691612a8f91600160801b8204811691600160c01b900416615909565b612a99919061574f565b612aa39190615909565b6001600160401b03169050612ab88183615a6c565b9250505090565b612ac7613a1c565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612b1e5760405162461bcd60e51b8152600401610a85906156f6565b62093a806001600160401b0382161115612b4a5760405162461bcd60e51b8152600401610a859061577a565b60655460ff16612bdf576072546001600160401b03600160801b909104811690821610612bdf5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f776572006064820152608401610a85565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c759060200161100c565b612c42613a1c565b606f612c4e82826159ad565b5050565b6072546000906001600160401b031615612c8f57506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612cc95760405162461bcd60e51b8152600401610a85906156f6565b606e612cd582826159ad565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161100c9190614c23565b6073546001600160a01b03163314612d2f5760405162461bcd60e51b8152600401610a85906156f6565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f9060200161100c565b60655460ff1615612da95760405162461bcd60e51b8152600401610a85906157e5565b606c54600160a01b900460ff161515600114612dd75760405162461bcd60e51b8152600401610a8590615a80565b805180612e3a5760405162461bcd60e51b815260206004820152603d6024820152600080516020615d9c83398151915260448201527f3a204d75737420666f726365206174206c6561737420312062617463680000006064820152608401610a85565b6103e88110612eab5760405162461bcd60e51b81526020600482015260436024820152600080516020615d9c83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a401610a85565b6068546001600160401b03600160c01b8204811691612ed3918491600160801b900416615ae9565b1115612f2d5760405162461bcd60e51b81526020600482015260356024820152600080516020615d9c8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b6064820152608401610a85565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015613159576000868281518110612f7a57612f7a61584d565b602002602001015190508380612f8f90615863565b945050600081600001518051906020012082602001518360400151604051602001612fbc93929190615889565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461305b5760405162461bcd60e51b81526020600482015260426024820152600080516020615d9c83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a401610a85565b613066600188615931565b83036130fb5742620697808360400151613080919061574f565b6001600160401b031611156130fb5760405162461bcd60e51b81526020600482015260476024820152600080516020615d9c83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a401610a85565b815180516020918201208184015160405161311e938893929142913391016158ac565b604051602081830303815290604052805190602001209350858061314190615863565b96505050508080613151906158f0565b915050612f5e565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166132725760405162461bcd60e51b8152600401610a8590615b01565b6073546001600160a01b0316331461329c5760405162461bcd60e51b8152600401610a85906156f6565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156132ec57600080fd5b505af1158015613300573d6000803e3d6000fd5b50505050612631614811565b613314613a1c565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133a85760405162461bcd60e51b8152600401610a8590615b5e565b6133b9898989898989898989614196565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561340457607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561344a57600080fd5b505af115801561345e573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff16156134e65760405162461bcd60e51b8152600401610a85906157e5565b606c54600160a01b900460ff1615156001146135145760405162461bcd60e51b8152600401610a8590615a80565b600061351f60745490565b9050818111156135845760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b6064820152608401610a85565b620493e08351106135f55760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b6064820152608401610a85565b60655461361490600160581b90046001600160a01b0316333084613a76565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa15801561365e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136829190615679565b60688054919250600160c01b9091046001600160401b03169060186136a683615863565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016136e793929190615889565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361378b57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26137e6565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516137dd93929190615bbb565b60405180910390a25b50505050565b606a546001600160a01b031633146138165760405162461bcd60e51b8152600401610a8590615b5e565b6138268888888888888888613b81565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561387157607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156138b757600080fd5b505af11580156138cb573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e8c565b6073546001600160a01b031633146139365760405162461bcd60e51b8152600401610a85906156f6565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca9060200161100c565b61398c613a1c565b6001600160a01b0381166139f15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a85565b6128a8816140d4565b613a02613a1c565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b031633146126315760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a85565b6040516001600160a01b03808516602483015283166044820152606481018290526137e69085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614868565b6072546001600160401b03600160401b820481169116111561263157607254600090613b1e90600160401b90046001600160401b0316600161574f565b9050613b29816111bd565b156128a857607254600090600290613b4b9084906001600160401b0316615909565b613b559190615bee565b613b5f908361574f565b9050613b6a816111bd565b15613b7857612c4e81611e9e565b612c4e82611e9e565b600080613b8c612c52565b90506001600160401b038a1615613c20576072546001600160401b03908116908b161115613bcc5760405162461bcd60e51b8152600401610a85906153f9565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c1a5760405162461bcd60e51b8152600401610a859061547c565b50613c8a565b6001600160401b0389166000908152606d6020526040902054915081613c585760405162461bcd60e51b8152600401610a85906154ee565b806001600160401b0316896001600160401b03161115613c8a5760405162461bcd60e51b8152600401610a8590615557565b806001600160401b0316886001600160401b031611613cbb5760405162461bcd60e51b8152600401610a85906155da565b6000613cca8a8a8a868b611017565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051613cff919061565d565b602060405180830381855afa158015613d1c573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613d3f9190615679565b613d4991906156a8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613d8d918b918b918b9190600401615c14565b602060405180830381865afa158015613daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dce9190615c8e565b613e2d5760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e7660448201526930b634b210383937b7b360b11b6064820152608401610a85565b613e7033613e3b858d615909565b6001600160401b0316613e4c6129dc565b613e569190615948565b606554600160581b90046001600160a01b0316919061493f565b505050505050505050505050565b6000613e88612c52565b905081600080613e988484615909565b6001600160401b031690505b836001600160401b0316836001600160401b031614613f4a576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613ef4911642615931565b1115613f2f576001810154613f1990600160401b90046001600160401b031686615909565b613f2c906001600160401b031684615ae9565b92505b60010154600160401b90046001600160401b03169250613ea4565b6000613f568383615931565b905082811015613fd0576000613f6c8285615931565b9050600c8111613f7c5780613f7f565b600c5b9050613f8c816003615948565b613f9790600a615d8f565b606554613fb0908390600160481b900461ffff16615d8f565b607454613fbd9190615948565b613fc79190615a6c565b6074555061405c565b6000613fdc8483615931565b9050600c8111613fec5780613fef565b600c5b90506000613ffe826003615948565b61400990600a615d8f565b606554614022908490600160481b900461ffff16615d8f565b60745461402f9190615948565b6140399190615a6c565b90508060745460745461404c9190615948565b6140569190615a6c565b60745550505b505050505050565b600054610100900460ff166140cf5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a85565b612631335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561417657600080fd5b505af115801561418a573d6000803e3d6000fd5b5050505061263161496f565b60006001600160401b038a1615614311576072546001600160401b03908116908b1611156142555760405162461bcd60e51b815260206004820152606c6024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c401610a85565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b909204161461430b5760405162461bcd60e51b81526020600482015260606024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a401610a85565b50614465565b506001600160401b0387166000908152606d6020526040902054806143b25760405162461bcd60e51b81526020600482015260576024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a401610a85565b6069546001600160401b0390811690891611156144655760405162461bcd60e51b81526020600482015260716024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c401610a85565b6072546001600160401b03908116908a16118015906144955750896001600160401b0316896001600160401b0316115b80156144b657506072546001600160401b03600160401b9091048116908a16115b61452e5760405162461bcd60e51b815260206004820152604f6024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a401610a85565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146145ee5760405162461bcd60e51b815260206004820152606a6024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c401610a85565b60006145fd898989858a611017565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051614632919061565d565b602060405180830381855afa15801561464f573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906146729190615679565b61467c91906156a8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916146c0918a918a918a9190600401615c14565b602060405180830381865afa1580156146dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147019190615c8e565b6147615760405162461bcd60e51b815260206004820152603e6024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a20696e76616c69642070726f6f6600006064820152608401610a85565b6001600160401b038b16600090815260716020526040902060020154879003613e705760405162461bcd60e51b81526020600482015260626024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c401610a85565b60655460ff166148335760405162461bcd60e51b8152600401610a8590615b01565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006148bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166149ca9092919063ffffffff16565b80519091501561493a57808060200190518101906148db9190615c8e565b61493a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a85565b505050565b6040516001600160a01b03831660248201526044810182905261493a90849063a9059cbb60e01b90606401613aaa565b60655460ff16156149925760405162461bcd60e51b8152600401610a85906157e5565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60606149d984846000856149e1565b949350505050565b606082471015614a425760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a85565b600080866001600160a01b03168587604051614a5e919061565d565b60006040518083038185875af1925050503d8060008114614a9b576040519150601f19603f3d011682016040523d82523d6000602084013e614aa0565b606091505b5091509150614ab187838387614abc565b979650505050505050565b60608315614b2b578251600003614b24576001600160a01b0385163b614b245760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a85565b50816149d9565b6149d98383815115614b405781518083602001fd5b8060405162461bcd60e51b8152600401610a859190614c23565b80356001600160401b0381168114614b7157600080fd5b919050565b600080600080600060a08688031215614b8e57600080fd5b614b9786614b5a565b9450614ba560208701614b5a565b9350614bb360408701614b5a565b94979396509394606081013594506080013592915050565b60005b83811015614be6578181015183820152602001614bce565b838111156137e65750506000910152565b60008151808452614c0f816020860160208601614bcb565b601f01601f19169290920160200192915050565b602081526000614c366020830184614bf7565b9392505050565b8060408101831015614c4e57600080fd5b92915050565b8060808101831015614c4e57600080fd5b6000806000806000806000806101a0898b031215614c8257600080fd5b614c8b89614b5a565b9750614c9960208a01614b5a565b9650614ca760408a01614b5a565b95506060890135945060808901359350614cc48a60a08b01614c3d565b9250614cd38a60e08b01614c54565b9150614ce38a6101608b01614c3d565b90509295985092959890939650565b600060208284031215614d0457600080fd5b813561ffff81168114614c3657600080fd5b600080600080600060a08688031215614d2e57600080fd5b614d3786614b5a565b9450614d4560208701614b5a565b94979496505050506040830135926060810135926080909101359150565b600060208284031215614d7557600080fd5b614c3682614b5a565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614db657614db6614d7e565b60405290565b604051606081016001600160401b0381118282101715614db657614db6614d7e565b604051601f8201601f191681016001600160401b0381118282101715614e0657614e06614d7e565b604052919050565b60006001600160401b03821115614e2757614e27614d7e565b5060051b60200190565b600082601f830112614e4257600080fd5b81356001600160401b03811115614e5b57614e5b614d7e565b614e6e601f8201601f1916602001614dde565b818152846020838601011115614e8357600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614eb357600080fd5b82356001600160401b0380821115614eca57600080fd5b818501915085601f830112614ede57600080fd5b8135614ef1614eec82614e0e565b614dde565b81815260059190911b83018401908481019088831115614f1057600080fd5b8585015b83811015614fa957803585811115614f2c5760008081fd5b86016080818c03601f1901811315614f445760008081fd5b614f4c614d94565b8983013588811115614f5e5760008081fd5b614f6c8e8c83870101614e31565b8252506040808401358b8301526060614f86818601614b5a565b82840152614f95848601614b5a565b908301525085525050918601918601614f14565b5098975050505050505050565b6001600160a01b03811681146128a857600080fd5b600060208284031215614fdd57600080fd5b8135614c3681614fb6565b600080600080600060a0868803121561500057600080fd5b8535945060208601356001600160401b0381111561501d57600080fd5b61502988828901614e31565b9450506040860135925061503f60608701614b5a565b9150608086013561504f81614fb6565b809150509295509295909350565b600080600080600080600080888a036101c081121561507b57600080fd5b893561508681614fb6565b985060208a013561509681614fb6565b975060408a01356150a681614fb6565b965060608a01356150b681614fb6565b955060e0607f19820112156150ca57600080fd5b5060808901935061016089013592506101808901356001600160401b03808211156150f457600080fd5b6151008c838d01614e31565b93506101a08b013591508082111561511757600080fd5b506151248b828c01614e31565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c03121561515357600080fd5b61515c8a614b5a565b985061516a60208b01614b5a565b975061517860408b01614b5a565b965061518660608b01614b5a565b955060808a0135945060a08a013593506151a38b60c08c01614c3d565b92506151b38b6101008c01614c54565b91506151c38b6101808c01614c3d565b90509295985092959850929598565b6000602082840312156151e457600080fd5b5035919050565b80151581146128a857600080fd5b60006020828403121561520b57600080fd5b8135614c36816151eb565b60006020828403121561522857600080fd5b81356001600160401b0381111561523e57600080fd5b6149d984828501614e31565b6000602080838503121561525d57600080fd5b82356001600160401b038082111561527457600080fd5b818501915085601f83011261528857600080fd5b8135615296614eec82614e0e565b81815260059190911b830184019084810190888311156152b557600080fd5b8585015b83811015614fa9578035858111156152d15760008081fd5b86016060818c03601f19018113156152e95760008081fd5b6152f1614dbc565b89830135888111156153035760008081fd5b6153118e8c83870101614e31565b8252506040808401358b830152615329838501614b5a565b90820152855250509186019186016152b9565b6000806000806080858703121561535257600080fd5b61535b85614b5a565b93506020850135925061537060408601614b5a565b915061537e60608601614b5a565b905092959194509250565b6000806040838503121561539c57600080fd5b82356001600160401b038111156153b257600080fd5b6153be85828601614e31565b95602094909401359450505050565b600080604083850312156153e057600080fd5b823591506153f060208401614b5a565b90509250929050565b60208082526058908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2070656e60408201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560608201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608082015260a00190565b6020808252604c908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760608201526b040e6e8c2e8ca40c4c2e8c6d60a31b608082015260a00190565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786060820152621a5cdd60ea1b608082015260a00190565b6020808252605d908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060608201527f7468616e2063757272656e744c61737456657269666965644261746368000000608082015260a00190565b60208082526057908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2066696e60408201527f616c4e65774261746368206d75737420626520626967676572207468616e206360608201527f757272656e744c61737456657269666965644261746368000000000000000000608082015260a00190565b6000825161566f818460208701614bcb565b9190910192915050565b60006020828403121561568b57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826156b7576156b7615692565b500690565b600181811c908216806156d057607f821691505b6020821081036156f057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561577157615771615739565b01949350505050565b60208082526045908201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361587f5761587f615739565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b60006001820161590257615902615739565b5060010190565b60006001600160401b038381169083168181101561592957615929615739565b039392505050565b60008282101561594357615943615739565b500390565b600081600019048311821515161561596257615962615739565b500290565b601f82111561493a57600081815260208120601f850160051c8101602086101561598e5750805b601f850160051c820191505b8181101561405c5782815560010161599a565b81516001600160401b038111156159c6576159c6614d7e565b6159da816159d484546156bc565b84615967565b602080601f831160018114615a0f57600084156159f75750858301515b600019600386901b1c1916600185901b17855561405c565b600085815260208120601f198616915b82811015615a3e57888601518255948401946001909101908401615a1f565b5085821015615a5c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615a7b57615a7b615692565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b60008219821115615afc57615afc615739565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b0383166020820152606060408201819052600090615be590830184614bf7565b95945050505050565b60006001600160401b0380841680615c0857615c08615692565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615c4c57848483379084018281529284019290600101615c2c565b5050828760c0870137610100850181815286935091505b6001811015615c82578251825260209283019290910190600101615c63565b50505095945050505050565b600060208284031215615ca057600080fd5b8151614c36816151eb565b600181815b80851115615ce6578160001904821115615ccc57615ccc615739565b80851615615cd957918102915b93841c9390800290615cb0565b509250929050565b600082615cfd57506001614c4e565b81615d0a57506000614c4e565b8160018114615d205760028114615d2a57615d46565b6001915050614c4e565b60ff841115615d3b57615d3b615739565b50506001821b614c4e565b5060208310610133831016604e8410600b8410161715615d69575081810a614c4e565b615d738383615cab565b8060001904821115615d8757615d87615739565b029392505050565b6000614c368383615cee56fe506f6c79676f6e5a6b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a6b45564d3a3a70726f76654e6f6e44657465726d696e6973a2646970667358221220e54b91d6c3c6f0be9ca949820d3b433020359ea35bd579bbcea11a0cc246100364736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/TokenWrapped.json b/compiled-contracts/TokenWrapped.json index 2dac1128a..abfd9be6d 100644 --- a/compiled-contracts/TokenWrapped.json +++ b/compiled-contracts/TokenWrapped.json @@ -220,13 +220,7 @@ } ], "name": "burn", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], + "outputs": [], "stateMutability": "nonpayable", "type": "function" }, @@ -318,13 +312,7 @@ } ], "name": "mint", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], + "outputs": [], "stateMutability": "nonpayable", "type": "function" }, @@ -483,8 +471,8 @@ "type": "function" } ], - "bytecode": "0x60c06040523480156200001157600080fd5b5060405162001557380380620015578339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109d620004ba60003960006104690152600081816102f70152610433015261109d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea2646970667358221220906ea48f19088f63dbf7270e029d0db2a116bfdc48421c0afa81f84f29beb83f64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102cc578063a9059cbb146102df578063cd0d0096146102f2578063d505accf14610319578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023d5780637ecebe001461026657806395d89b41146102865780639dc29fac1461028e578063a3c573eb146102a157600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610e03565b60405180910390f35b61016d610168366004610e74565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e9e565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e74565b61048b565b61016d610238366004610e74565b6104ad565b61018161024b366004610eda565b6001600160a01b031660009081526020819052604090205490565b610181610274366004610eda565b60066020526000908152604090205481565b6101446104f6565b61016d61029c366004610e74565b610505565b6005546102b4906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102da366004610e74565b61053c565b61016d6102ed366004610e74565b6105b7565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61032c610327366004610efc565b6105c5565b005b61018161033c366004610f6f565b610800565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610fa2565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b60003361040181858561082b565b5060019392505050565b600033610419858285610950565b6104248585856109ca565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b6e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e8383610800565b6104a89190610ff2565b61082b565b6005546000906001600160a01b031633146104e35760405162461bcd60e51b81526004016104da9061100a565b60405180910390fd5b6104ed8383610c1a565b50600192915050565b60606004805461037090610fa2565b6005546000906001600160a01b031633146105325760405162461bcd60e51b81526004016104da9061100a565b6104ed8383610cd9565b6000338161054a8286610800565b9050838110156105aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104da565b610424828686840361082b565b6000336104018185856109ca565b834211156106215760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104da565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066e8361104e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106cc61042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610757573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061078d5750896001600160a01b0316816001600160a01b0316145b6107e95760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104da565b6107f48a8a8a61082b565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661088d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104da565b6001600160a01b0382166108ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104da565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095c8484610800565b905060001981146109c457818110156109b75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104da565b6109c4848484840361082b565b50505050565b6001600160a01b038316610a2e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104da565b6001600160a01b038216610a905760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104da565b6001600160a01b03831660009081526020819052604090205481811015610b085760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104da565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109c4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b99610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c705760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104da565b8060026000828254610c829190610ff2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104da565b6001600160a01b03821660009081526020819052604090205481811015610dad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104da565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610943565b600060208083528351808285015260005b81811015610e3057858101830151858201604001528201610e14565b81811115610e42576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6f57600080fd5b919050565b60008060408385031215610e8757600080fd5b610e9083610e58565b946020939093013593505050565b600080600060608486031215610eb357600080fd5b610ebc84610e58565b9250610eca60208501610e58565b9150604084013590509250925092565b600060208284031215610eec57600080fd5b610ef582610e58565b9392505050565b600080600080600080600060e0888a031215610f1757600080fd5b610f2088610e58565b9650610f2e60208901610e58565b95506040880135945060608801359350608088013560ff81168114610f5257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f8257600080fd5b610f8b83610e58565b9150610f9960208401610e58565b90509250929050565b600181811c90821680610fb657607f821691505b602082108103610fd657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561100557611005610fdc565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161106057611060610fdc565b506001019056fea2646970667358221220906ea48f19088f63dbf7270e029d0db2a116bfdc48421c0afa81f84f29beb83f64736f6c634300080f0033", + "bytecode": "0x60c06040523480156200001157600080fd5b5060405162001558380380620015588339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109e620004ba60003960006104690152600081816102f90152610433015261109e6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866106638361104f565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161106157611061610fd1565b506001019056fea26469706673582212205af0e6dd4760d4ae367515578b46c4d5988b10ae47473e817626188baa0c03a264736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866106638361104f565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161106157611061610fd1565b506001019056fea26469706673582212205af0e6dd4760d4ae367515578b46c4d5988b10ae47473e817626188baa0c03a264736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/PolygonZkEVMBridge.sol b/contracts/PolygonZkEVMBridge.sol index 841b46253..740b0f315 100644 --- a/contracts/PolygonZkEVMBridge.sol +++ b/contracts/PolygonZkEVMBridge.sol @@ -68,11 +68,11 @@ contract PolygonZkEVMBridge is function initialize( uint32 _networkID, IPolygonZkEVMGlobalExitRoot _globalExitRootManager, - address _PolygonZkEVMaddress + address _polygonZkEVMaddress ) public virtual initializer { networkID = _networkID; globalExitRootManager = _globalExitRootManager; - polygonZkEVMaddress = _PolygonZkEVMAddress; + polygonZkEVMaddress = _polygonZkEVMaddress; } modifier onlyPolygonZkEVM() { diff --git a/contracts/mocks/PolygonZkEVMBridgeMock.sol b/contracts/mocks/PolygonZkEVMBridgeMock.sol index 825a48ab8..0d3096157 100644 --- a/contracts/mocks/PolygonZkEVMBridgeMock.sol +++ b/contracts/mocks/PolygonZkEVMBridgeMock.sol @@ -17,11 +17,11 @@ contract PolygonZkEVMBridgeMock is PolygonZkEVMBridge, OwnableUpgradeable { function initialize( uint32 _networkID, IPolygonZkEVMGlobalExitRoot _globalExitRootManager, - address _zkEVMaddress + address _polygonZkEVMaddress ) public override initializer { networkID = _networkID; globalExitRootManager = _globalExitRootManager; - zkEVMaddress = _zkEVMaddress; + polygonZkEVMaddress = _polygonZkEVMaddress; maxEtherBridge = 0.25 ether; From 1af034d518654460b52550e920f85bf284c8ef18 Mon Sep 17 00:00:00 2001 From: krlosMata Date: Wed, 21 Dec 2022 08:45:17 +0100 Subject: [PATCH 63/71] review --- compiled-contracts/PolygonZkEVM.json | 4 ++-- compiled-contracts/PolygonZkEVMBridge.json | 4 ++-- compiled-contracts/PolygonZkEVMBridgeMock.json | 4 ++-- compiled-contracts/PolygonZkEVMMock.json | 4 ++-- contracts/PolygonZkEVM.sol | 4 ++-- contracts/PolygonZkEVMBridge.sol | 2 +- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/compiled-contracts/PolygonZkEVM.json b/compiled-contracts/PolygonZkEVM.json index 40543e4e8..10ee2b7ab 100644 --- a/compiled-contracts/PolygonZkEVM.json +++ b/compiled-contracts/PolygonZkEVM.json @@ -1469,8 +1469,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5061561380620000216000396000f3fe608060405234801561001057600080fd5b50600436106103af5760003560e01c80638da5cb5b116101f4578063cfa8ed471161011a578063e7a7ed02116100ad578063f14916d61161007c578063f14916d6146108ec578063f2fde38b146108ff578063f851a44014610912578063f8b823e41461092557600080fd5b8063e7a7ed0214610899578063e8bf92ed146108b3578063eaeb077b146108c6578063edc41121146108d957600080fd5b8063d939b315116100e9578063d939b3151461085b578063dbc1697614610875578063e11f3f181461087d578063e217cfd61461089057600080fd5b8063cfa8ed4714610807578063d02103ca14610821578063d8d1091b14610834578063d8f54db01461084757600080fd5b8063ab9fc5ef11610192578063b6b0b09711610161578063b6b0b097146107bf578063c0ed84e0146107d9578063c89e42df146107e1578063cf136306146107f457600080fd5b8063ab9fc5ef14610713578063adc879e91461071d578063afd23cbe14610737578063b4d63f581461075f57600080fd5b80639eb831b9116101ce5780639eb831b9146106d85780639f0d039d146106e0578063a3c573eb146106e8578063aa58bad6146106fb57600080fd5b80638da5cb5b146106ac57806399f5634e146106bd5780639c9f3dfe146106c557600080fd5b80634a910e6a116102d9578063715018a611610277578063837a473811610246578063837a473814610607578063841b24d7146106755780638b48931e1461068f5780638c4a0af71461069957600080fd5b8063715018a6146105c65780637215541a146105ce57806375c508b3146105e15780637fcb3653146105f457600080fd5b806360943d6a116102b357806360943d6a1461056d5780636b8616ce146105805780636ff512cc146105a0578063704b6c02146105b357600080fd5b80634a910e6a146105325780635392c5e014610545578063542028d51461056557600080fd5b8063383b3be811610351578063456052671161032057806345605267146104d8578063458c0477146104f25780634834a343146105055780634a1a89a71461051857600080fd5b8063383b3be814610485578063394218e9146104985780633c158267146104ab578063423fa856146104be57600080fd5b806319d8ac611161038d57806319d8ac6114610404578063220d78991461042f57806329878983146104425780632d0889d31461046d57600080fd5b8063107bf28c146103b457806315064c96146103d25780631816b7e5146103ef575b600080fd5b6103bc61092e565b6040516103c9919061475b565b60405180910390f35b6065546103df9060ff1681565b60405190151581526020016103c9565b6104026103fd366004614775565b6109bc565b005b606854610417906001600160401b031681565b6040516001600160401b0390911681526020016103c9565b6103bc61043d3660046147b5565b610aeb565b606a54610455906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b610477620493e081565b6040519081526020016103c9565b6103df610493366004614802565b610c91565b6104026104a6366004614802565b610cd8565b6104026104b936600461493f565b610e27565b60685461041790600160401b90046001600160401b031681565b60685461041790600160801b90046001600160401b031681565b607254610417906001600160401b031681565b610402610513366004614a7d565b611629565b60725461041790600160401b90046001600160401b031681565b610402610540366004614802565b611972565b610477610553366004614802565b606d6020526000908152604090205481565b6103bc611c12565b61040261057b366004614b1f565b611c1f565b61047761058e366004614802565b60666020526000908152604090205481565b6104026105ae366004614bf6565b611f8f565b6104026105c1366004614bf6565b612013565b61040261208b565b6104026105dc366004614802565b61209f565b6104026105ef366004614c13565b612317565b606954610417906001600160401b031681565b61064a610615366004614cb1565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103c9565b60725461041790600160c01b90046001600160401b031681565b61041762093a8081565b6104026106a7366004614cd8565b6123a6565b6033546001600160a01b0316610455565b61047761241d565b6104026106d3366004614802565b612500565b610477600c81565b607454610477565b607054610455906001600160a01b031681565b6065546104179061010090046001600160401b031681565b6104176206978081565b606c5461041790600160a81b90046001600160401b031681565b60655461074c90600160481b900461ffff1681565b60405161ffff90911681526020016103c9565b61079a61076d366004614802565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103c9565b60655461045590600160581b90046001600160a01b031681565b610417612646565b6104026107ef366004614cf5565b612693565b610402610802366004614802565b6126f9565b60695461045590600160401b90046001600160a01b031681565b606c54610455906001600160a01b031681565b610402610842366004614d29565b61277a565b606c546103df90600160a01b900460ff1681565b60725461041790600160801b90046001600160401b031681565b610402612c44565b61040261088b366004614c13565b612d00565b6104176103e881565b60685461041790600160c01b90046001600160401b031681565b606b54610455906001600160a01b031681565b6104026108d4366004614e1b565b612e45565b6104026108e7366004614a7d565b61316e565b6104026108fa366004614bf6565b61328e565b61040261090d366004614bf6565b613306565b607354610455906001600160a01b031681565b61047760745481565b606f805461093b90614e5f565b80601f016020809104026020016040519081016040528092919081815260200182805461096790614e5f565b80156109b45780601f10610989576101008083540402835291602001916109b4565b820191906000526020600020905b81548152906001019060200180831161099757829003601f168201915b505050505081565b6073546001600160a01b031633146109ef5760405162461bcd60e51b81526004016109e690614e99565b60405180910390fd5b6103e88161ffff16118015610a0957506104008161ffff16105b610a8e5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a4016109e6565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610b1d57508115155b610b91576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e6565b80610c06576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e6565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610cc792600160801b90920481169116614ef2565b6001600160401b0316111592915050565b6073546001600160a01b03163314610d025760405162461bcd60e51b81526004016109e690614e99565b62093a806001600160401b0382161115610d2e5760405162461bcd60e51b81526004016109e690614f1d565b60655460ff16610dd1576072546001600160401b03600160c01b909104811690821610610dd15760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109e6565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610ae0565b60655460ff1615610e4a5760405162461bcd60e51b81526004016109e690614f88565b606954600160401b90046001600160a01b03163314610ed15760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e63657200000000000060648201526084016109e6565b805180610f465760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e6365203120626174636800000060648201526084016109e6565b6103e88110610fbf576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e79206261746368657360648201526084016109e6565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561144d57600087828151811061101257611012614ff0565b60200260200101519050600081606001516001600160401b031611156111cb578361103c81615006565b9450506000816000015180519060200120826020015183606001516040516020016110699392919061502c565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461110f5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d6174636800000060648201526084016109e6565b81606001516001600160401b031682604001516001600160401b031610156111c55760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a4016109e6565b50611340565b602081015115806112545750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b36329161120e9160040190815260200190565b6020604051808303816000875af115801561122d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611251919061504f565b15155b6112c65760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d75737420657869737400000000000060648201526084016109e6565b805151620493e0116113405760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016109e6565b856001600160401b031681604001516001600160401b03161015801561137357504281604001516001600160401b031611155b6113e55760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e676500000060648201526084016109e6565b8051805160209182012081830151604080850151905161140c948894939291339101615068565b604051602081830303815290604052805190602001209250848061142f90615006565b95505080604001519550508080611445906150ac565b915050610ff6565b506068546001600160401b03600160c01b909104811690831611156114d25760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b60648201526084016109e6565b6068546000906114f290600160801b90046001600160401b0316846150c5565b611505906001600160401b0316876150ed565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115da903390309084906115bf9190615104565b606554600160581b90046001600160a01b031692919061337c565b6115e26133e7565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff161561164c5760405162461bcd60e51b81526004016109e690614f88565b6072546001600160401b03878116600090815260676020526040902060010154429261168392600160c01b90910481169116614ef2565b6001600160401b0316111561170c5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a4016109e6565b6103e861171988886150c5565b6001600160401b0316106117955760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e7920626174636865730000000060648201526084016109e6565b6117a5888888888888888861348b565b6117ae866139c9565b607254600160801b90046001600160401b0316600003611876576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561181357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561185957600080fd5b505af115801561186d573d6000803e3d6000fd5b50505050611927565b61187e6133e7565b607280546001600160401b031690600061189783615006565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b0381161580159061199f57506072546001600160401b03600160401b9091048116908216115b80156119ba57506072546001600160401b0390811690821611155b611a385760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a4016109e6565b606a546001600160a01b03163314611ae257611a5381610c91565b611ae25760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a4016109e6565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d9094529382902092909255607280546fffffffffffffffff000000000000000019169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611ba457600080fd5b505af1158015611bb8573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611c0591815260200190565b60405180910390a3505050565b606e805461093b90614e5f565b600054610100900460ff1615808015611c3f5750600054600160ff909116105b80611c595750303b158015611c59575060005460ff166001145b611cbc5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109e6565b6000805460ff191660011790558015611cdf576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611d5c6020860186614bf6565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d8c6060860160408701614bf6565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611dc760c0860160a08701614bf6565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611e2460e0860160c08701614802565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611e5b6040860160208701614802565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611e976080860160608701614802565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611ed360a0860160808701614cd8565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611efb8482615169565b50606f611f088382615169565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611f3e613baf565b8015611f84576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611fb95760405162461bcd60e51b81526004016109e690614e99565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610ae0565b6073546001600160a01b0316331461203d5760405162461bcd60e51b81526004016109e690614e99565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190602001610ae0565b612093613c23565b61209d6000613c7d565b565b6033546001600160a01b0316331461230c576072546000906001600160401b0316156120f057506072546001600160401b03908116600090815260716020526040902054600160401b9004166120fe565b506069546001600160401b03165b80826001600160401b03161161217c5760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c72656164792076657269666965640000000060648201526084016109e6565b6068546001600160401b03600160401b9091048116908316118015906121be57506001600160401b038083166000908152606760205260409020600101541615155b6122495760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a4016109e6565b6001600160401b0380831660009081526067602052604090206001015442916122779162093a809116614ef2565b6001600160401b0316111561230a5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a4016109e6565b505b612314613ccf565b50565b60655460ff161561233a5760405162461bcd60e51b81526004016109e690614f88565b61234b898989898989898989613d3f565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f84613ccf565b6073546001600160a01b031633146123d05760405162461bcd60e51b81526004016109e690614e99565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610ae090831515815260200190565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612470573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612494919061504f565b905060006124a0612646565b6068546001600160401b03600160401b82048116916124d091600160801b8204811691600160c01b9004166150c5565b6124da9190614ef2565b6124e491906150c5565b6001600160401b031690506124f9818361523e565b9250505090565b6073546001600160a01b0316331461252a5760405162461bcd60e51b81526004016109e690614e99565b62093a806001600160401b03821611156125565760405162461bcd60e51b81526004016109e690614f1d565b60655460ff166125eb576072546001600160401b03600160801b9091048116908216106125eb5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f7765720060648201526084016109e6565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610ae0565b6072546000906001600160401b03161561268357506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126bd5760405162461bcd60e51b81526004016109e690614e99565b606e6126c98282615169565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610ae0919061475b565b6073546001600160a01b031633146127235760405162461bcd60e51b81526004016109e690614e99565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610ae0565b60655460ff161561279d5760405162461bcd60e51b81526004016109e690614f88565b606c54600160a01b900460ff1615156001146127cb5760405162461bcd60e51b81526004016109e690615252565b80518061282e5760405162461bcd60e51b815260206004820152603d602482015260008051602061559e83398151915260448201527f3a204d75737420666f726365206174206c65617374203120626174636800000060648201526084016109e6565b6103e8811061289f5760405162461bcd60e51b8152602060048201526043602482015260008051602061559e83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a4016109e6565b6068546001600160401b03600160c01b82048116916128c7918491600160801b9004166152bb565b11156129215760405162461bcd60e51b8152602060048201526035602482015260008051602061559e8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b60648201526084016109e6565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612b4d57600086828151811061296e5761296e614ff0565b60200260200101519050838061298390615006565b9450506000816000015180519060200120826020015183604001516040516020016129b09392919061502c565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612a4f5760405162461bcd60e51b8152602060048201526042602482015260008051602061559e83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109e6565b612a5a6001886150ed565b8303612aef5742620697808360400151612a749190614ef2565b6001600160401b03161115612aef5760405162461bcd60e51b8152602060048201526047602482015260008051602061559e83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a4016109e6565b8151805160209182012081840151604051612b1293889392914291339101615068565b6040516020818303038152906040528051906020012093508580612b3590615006565b96505050508080612b45906150ac565b915050612952565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612c665760405162461bcd60e51b81526004016109e6906152d3565b6073546001600160a01b03163314612c905760405162461bcd60e51b81526004016109e690614e99565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612ce057600080fd5b505af1158015612cf4573d6000803e3d6000fd5b5050505061209d6143ba565b606a546001600160a01b03163314612d2a5760405162461bcd60e51b81526004016109e690615330565b612d3b898989898989898989613d3f565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612d8657607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612dcc57600080fd5b505af1158015612de0573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612e685760405162461bcd60e51b81526004016109e690614f88565b606c54600160a01b900460ff161515600114612e965760405162461bcd60e51b81526004016109e690615252565b6000612ea160745490565b905081811115612f065760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b60648201526084016109e6565b620493e0835110612f775760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b60648201526084016109e6565b606554612f9690600160581b90046001600160a01b031633308461337c565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015612fe0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613004919061504f565b60688054919250600160c01b9091046001600160401b031690601861302883615006565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016130699392919061502c565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361310d57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613168565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161315f9392919061538d565b60405180910390a25b50505050565b606a546001600160a01b031633146131985760405162461bcd60e51b81526004016109e690615330565b6131a8888888888888888861348b565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d6020526040902085905560725416156131f357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561323957600080fd5b505af115801561324d573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611960565b6073546001600160a01b031633146132b85760405162461bcd60e51b81526004016109e690614e99565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001610ae0565b61330e613c23565b6001600160a01b0381166133735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e6565b61231481613c7d565b6040516001600160a01b03808516602483015283166044820152606481018290526131689085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614411565b6072546001600160401b03600160401b820481169116111561209d5760725460009061342490600160401b90046001600160401b03166001614ef2565b905061342f81610c91565b15612314576072546000906002906134519084906001600160401b03166150c5565b61345b91906153c0565b6134659083614ef2565b905061347081610c91565b156134825761347e81611972565b5050565b61347e82611972565b600080613496612646565b90506001600160401b038a1615613611576072546001600160401b03908116908b1611156135525760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2070656e60448201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560648201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608482015260a4016109e6565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b909204161461360b5760405162461bcd60e51b815260206004820152604c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760648201526b040e6e8c2e8ca40c4c2e8c6d60a31b608482015260a4016109e6565b50613759565b6001600160401b0389166000908152606d60205260409020549150816136ab5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786064820152621a5cdd60ea1b608482015260a4016109e6565b806001600160401b0316896001600160401b031611156137595760405162461bcd60e51b815260206004820152605d60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060648201527f7468616e2063757272656e744c61737456657269666965644261746368000000608482015260a4016109e6565b806001600160401b0316886001600160401b0316116138065760405162461bcd60e51b815260206004820152605760248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2066696e60448201527f616c4e65774261746368206d75737420626520626967676572207468616e206360648201527f757272656e744c61737456657269666965644261746368000000000000000000608482015260a4016109e6565b60006138158a8a8a868b610aeb565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161384a91906153e6565b602060405180830381855afa158015613867573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061388a919061504f565b6138949190615402565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916138d8918b918b918b9190600401615416565b602060405180830381865afa1580156138f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139199190615490565b6139785760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e7660448201526930b634b210383937b7b360b11b60648201526084016109e6565b6139bb33613986858d6150c5565b6001600160401b031661399761241d565b6139a19190615104565b606554600160581b90046001600160a01b031691906144e8565b505050505050505050505050565b60006139d3612646565b9050816000806139e384846150c5565b6001600160401b031690505b836001600160401b0316836001600160401b031614613a95576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613a3f9116426150ed565b1115613a7a576001810154613a6490600160401b90046001600160401b0316866150c5565b613a77906001600160401b0316846152bb565b92505b60010154600160401b90046001600160401b031692506139ef565b6000613aa183836150ed565b905082811015613b1b576000613ab782856150ed565b9050600c8111613ac75780613aca565b600c5b9050613ad7816003615104565b613ae290600a615591565b606554613afb908390600160481b900461ffff16615591565b607454613b089190615104565b613b12919061523e565b60745550613ba7565b6000613b2784836150ed565b9050600c8111613b375780613b3a565b600c5b90506000613b49826003615104565b613b5490600a615591565b606554613b6d908490600160481b900461ffff16615591565b607454613b7a9190615104565b613b84919061523e565b905080607454607454613b979190615104565b613ba1919061523e565b60745550505b505050505050565b600054610100900460ff16613c1a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109e6565b61209d33613c7d565b6033546001600160a01b0316331461209d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109e6565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d1f57600080fd5b505af1158015613d33573d6000803e3d6000fd5b5050505061209d614518565b60006001600160401b038a1615613eba576072546001600160401b03908116908b161115613dfe5760405162461bcd60e51b815260206004820152606c60248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c4016109e6565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613eb45760405162461bcd60e51b815260206004820152606060248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a4016109e6565b5061400e565b506001600160401b0387166000908152606d602052604090205480613f5b5760405162461bcd60e51b815260206004820152605760248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a4016109e6565b6069546001600160401b03908116908916111561400e5760405162461bcd60e51b815260206004820152607160248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c4016109e6565b6072546001600160401b03908116908a161180159061403e5750896001600160401b0316896001600160401b0316115b801561405f57506072546001600160401b03600160401b9091048116908a16115b6140d75760405162461bcd60e51b815260206004820152604f60248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a4016109e6565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146141975760405162461bcd60e51b815260206004820152606a60248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c4016109e6565b60006141a6898989858a610aeb565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516141db91906153e6565b602060405180830381855afa1580156141f8573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061421b919061504f565b6142259190615402565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614269918a918a918a9190600401615416565b602060405180830381865afa158015614286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142aa9190615490565b61430a5760405162461bcd60e51b815260206004820152603e60248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a20696e76616c69642070726f6f66000060648201526084016109e6565b6001600160401b038b166000908152607160205260409020600201548790036139bb5760405162461bcd60e51b815260206004820152606260248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c4016109e6565b60655460ff166143dc5760405162461bcd60e51b81526004016109e6906152d3565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614466826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145739092919063ffffffff16565b8051909150156144e357808060200190518101906144849190615490565b6144e35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109e6565b505050565b6040516001600160a01b0383166024820152604481018290526144e390849063a9059cbb60e01b906064016133b0565b60655460ff161561453b5760405162461bcd60e51b81526004016109e690614f88565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614582848460008561458a565b949350505050565b6060824710156145eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109e6565b600080866001600160a01b0316858760405161460791906153e6565b60006040518083038185875af1925050503d8060008114614644576040519150601f19603f3d011682016040523d82523d6000602084013e614649565b606091505b509150915061465a87838387614665565b979650505050505050565b606083156146d45782516000036146cd576001600160a01b0385163b6146cd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109e6565b5081614582565b61458283838151156146e95781518083602001fd5b8060405162461bcd60e51b81526004016109e6919061475b565b60005b8381101561471e578181015183820152602001614706565b838111156131685750506000910152565b60008151808452614747816020860160208601614703565b601f01601f19169290920160200192915050565b60208152600061476e602083018461472f565b9392505050565b60006020828403121561478757600080fd5b813561ffff8116811461476e57600080fd5b80356001600160401b03811681146147b057600080fd5b919050565b600080600080600060a086880312156147cd57600080fd5b6147d686614799565b94506147e460208701614799565b94979496505050506040830135926060810135926080909101359150565b60006020828403121561481457600080fd5b61476e82614799565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156148555761485561481d565b60405290565b604051606081016001600160401b03811182821017156148555761485561481d565b604051601f8201601f191681016001600160401b03811182821017156148a5576148a561481d565b604052919050565b60006001600160401b038211156148c6576148c661481d565b5060051b60200190565b600082601f8301126148e157600080fd5b81356001600160401b038111156148fa576148fa61481d565b61490d601f8201601f191660200161487d565b81815284602083860101111561492257600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561495257600080fd5b82356001600160401b038082111561496957600080fd5b818501915085601f83011261497d57600080fd5b813561499061498b826148ad565b61487d565b81815260059190911b830184019084810190888311156149af57600080fd5b8585015b83811015614a48578035858111156149cb5760008081fd5b86016080818c03601f19018113156149e35760008081fd5b6149eb614833565b89830135888111156149fd5760008081fd5b614a0b8e8c838701016148d0565b8252506040808401358b8301526060614a25818601614799565b82840152614a34848601614799565b9083015250855250509186019186016149b3565b5098975050505050505050565b8060408101831015614a6657600080fd5b92915050565b8060808101831015614a6657600080fd5b6000806000806000806000806101a0898b031215614a9a57600080fd5b614aa389614799565b9750614ab160208a01614799565b9650614abf60408a01614799565b95506060890135945060808901359350614adc8a60a08b01614a55565b9250614aeb8a60e08b01614a6c565b9150614afb8a6101608b01614a55565b90509295985092959890939650565b6001600160a01b038116811461231457600080fd5b600080600080600080600080888a036101c0811215614b3d57600080fd5b8935614b4881614b0a565b985060208a0135614b5881614b0a565b975060408a0135614b6881614b0a565b965060608a0135614b7881614b0a565b955060e0607f1982011215614b8c57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614bb657600080fd5b614bc28c838d016148d0565b93506101a08b0135915080821115614bd957600080fd5b50614be68b828c016148d0565b9150509295985092959890939650565b600060208284031215614c0857600080fd5b813561476e81614b0a565b60008060008060008060008060006101c08a8c031215614c3257600080fd5b614c3b8a614799565b9850614c4960208b01614799565b9750614c5760408b01614799565b9650614c6560608b01614799565b955060808a0135945060a08a01359350614c828b60c08c01614a55565b9250614c928b6101008c01614a6c565b9150614ca28b6101808c01614a55565b90509295985092959850929598565b600060208284031215614cc357600080fd5b5035919050565b801515811461231457600080fd5b600060208284031215614cea57600080fd5b813561476e81614cca565b600060208284031215614d0757600080fd5b81356001600160401b03811115614d1d57600080fd5b614582848285016148d0565b60006020808385031215614d3c57600080fd5b82356001600160401b0380821115614d5357600080fd5b818501915085601f830112614d6757600080fd5b8135614d7561498b826148ad565b81815260059190911b83018401908481019088831115614d9457600080fd5b8585015b83811015614a4857803585811115614db05760008081fd5b86016060818c03601f1901811315614dc85760008081fd5b614dd061485b565b8983013588811115614de25760008081fd5b614df08e8c838701016148d0565b8252506040808401358b830152614e08838501614799565b9082015285525050918601918601614d98565b60008060408385031215614e2e57600080fd5b82356001600160401b03811115614e4457600080fd5b614e50858286016148d0565b95602094909401359450505050565b600181811c90821680614e7357607f821691505b602082108103614e9357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614f1457614f14614edc565b01949350505050565b60208082526045908201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361502257615022614edc565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b60006020828403121561506157600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b6000600182016150be576150be614edc565b5060010190565b60006001600160401b03838116908316818110156150e5576150e5614edc565b039392505050565b6000828210156150ff576150ff614edc565b500390565b600081600019048311821515161561511e5761511e614edc565b500290565b601f8211156144e357600081815260208120601f850160051c8101602086101561514a5750805b601f850160051c820191505b81811015613ba757828155600101615156565b81516001600160401b038111156151825761518261481d565b615196816151908454614e5f565b84615123565b602080601f8311600181146151cb57600084156151b35750858301515b600019600386901b1c1916600185901b178555613ba7565b600085815260208120601f198616915b828110156151fa578886015182559484019460019091019084016151db565b50858210156152185787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b60008261524d5761524d615228565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b600082198211156152ce576152ce614edc565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b03831660208201526060604082018190526000906153b79083018461472f565b95945050505050565b60006001600160401b03808416806153da576153da615228565b92169190910492915050565b600082516153f8818460208701614703565b9190910192915050565b60008261541157615411615228565b500690565b61012081016040808784376000838201818152879190815b600281101561544e5784848337908401828152928401929060010161542e565b5050828760c0870137610100850181815286935091505b6001811015615484578251825260209283019290910190600101615465565b50505095945050505050565b6000602082840312156154a257600080fd5b815161476e81614cca565b600181815b808511156154e85781600019048211156154ce576154ce614edc565b808516156154db57918102915b93841c93908002906154b2565b509250929050565b6000826154ff57506001614a66565b8161550c57506000614a66565b8160018114615522576002811461552c57615548565b6001915050614a66565b60ff84111561553d5761553d614edc565b50506001821b614a66565b5060208310610133831016604e8410600b841016171561556b575081810a614a66565b61557583836154ad565b806000190482111561558957615589614edc565b029392505050565b600061476e83836154f056fe506f6c79676f6e5a6b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a6b45564d3a3a70726f76654e6f6e44657465726d696e6973a26469706673582212204c3a0cfa919696b298adf6c27a097f1b74001bdc0f6a0b750405825e747a7de964736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103af5760003560e01c80638da5cb5b116101f4578063cfa8ed471161011a578063e7a7ed02116100ad578063f14916d61161007c578063f14916d6146108ec578063f2fde38b146108ff578063f851a44014610912578063f8b823e41461092557600080fd5b8063e7a7ed0214610899578063e8bf92ed146108b3578063eaeb077b146108c6578063edc41121146108d957600080fd5b8063d939b315116100e9578063d939b3151461085b578063dbc1697614610875578063e11f3f181461087d578063e217cfd61461089057600080fd5b8063cfa8ed4714610807578063d02103ca14610821578063d8d1091b14610834578063d8f54db01461084757600080fd5b8063ab9fc5ef11610192578063b6b0b09711610161578063b6b0b097146107bf578063c0ed84e0146107d9578063c89e42df146107e1578063cf136306146107f457600080fd5b8063ab9fc5ef14610713578063adc879e91461071d578063afd23cbe14610737578063b4d63f581461075f57600080fd5b80639eb831b9116101ce5780639eb831b9146106d85780639f0d039d146106e0578063a3c573eb146106e8578063aa58bad6146106fb57600080fd5b80638da5cb5b146106ac57806399f5634e146106bd5780639c9f3dfe146106c557600080fd5b80634a910e6a116102d9578063715018a611610277578063837a473811610246578063837a473814610607578063841b24d7146106755780638b48931e1461068f5780638c4a0af71461069957600080fd5b8063715018a6146105c65780637215541a146105ce57806375c508b3146105e15780637fcb3653146105f457600080fd5b806360943d6a116102b357806360943d6a1461056d5780636b8616ce146105805780636ff512cc146105a0578063704b6c02146105b357600080fd5b80634a910e6a146105325780635392c5e014610545578063542028d51461056557600080fd5b8063383b3be811610351578063456052671161032057806345605267146104d8578063458c0477146104f25780634834a343146105055780634a1a89a71461051857600080fd5b8063383b3be814610485578063394218e9146104985780633c158267146104ab578063423fa856146104be57600080fd5b806319d8ac611161038d57806319d8ac6114610404578063220d78991461042f57806329878983146104425780632d0889d31461046d57600080fd5b8063107bf28c146103b457806315064c96146103d25780631816b7e5146103ef575b600080fd5b6103bc61092e565b6040516103c9919061475b565b60405180910390f35b6065546103df9060ff1681565b60405190151581526020016103c9565b6104026103fd366004614775565b6109bc565b005b606854610417906001600160401b031681565b6040516001600160401b0390911681526020016103c9565b6103bc61043d3660046147b5565b610aeb565b606a54610455906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b610477620493e081565b6040519081526020016103c9565b6103df610493366004614802565b610c91565b6104026104a6366004614802565b610cd8565b6104026104b936600461493f565b610e27565b60685461041790600160401b90046001600160401b031681565b60685461041790600160801b90046001600160401b031681565b607254610417906001600160401b031681565b610402610513366004614a7d565b611629565b60725461041790600160401b90046001600160401b031681565b610402610540366004614802565b611972565b610477610553366004614802565b606d6020526000908152604090205481565b6103bc611c12565b61040261057b366004614b1f565b611c1f565b61047761058e366004614802565b60666020526000908152604090205481565b6104026105ae366004614bf6565b611f8f565b6104026105c1366004614bf6565b612013565b61040261208b565b6104026105dc366004614802565b61209f565b6104026105ef366004614c13565b612317565b606954610417906001600160401b031681565b61064a610615366004614cb1565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103c9565b60725461041790600160c01b90046001600160401b031681565b61041762093a8081565b6104026106a7366004614cd8565b6123a6565b6033546001600160a01b0316610455565b61047761241d565b6104026106d3366004614802565b612500565b610477600c81565b607454610477565b607054610455906001600160a01b031681565b6065546104179061010090046001600160401b031681565b6104176206978081565b606c5461041790600160a81b90046001600160401b031681565b60655461074c90600160481b900461ffff1681565b60405161ffff90911681526020016103c9565b61079a61076d366004614802565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103c9565b60655461045590600160581b90046001600160a01b031681565b610417612646565b6104026107ef366004614cf5565b612693565b610402610802366004614802565b6126f9565b60695461045590600160401b90046001600160a01b031681565b606c54610455906001600160a01b031681565b610402610842366004614d29565b61277a565b606c546103df90600160a01b900460ff1681565b60725461041790600160801b90046001600160401b031681565b610402612c44565b61040261088b366004614c13565b612d00565b6104176103e881565b60685461041790600160c01b90046001600160401b031681565b606b54610455906001600160a01b031681565b6104026108d4366004614e1b565b612e45565b6104026108e7366004614a7d565b61316e565b6104026108fa366004614bf6565b61328e565b61040261090d366004614bf6565b613306565b607354610455906001600160a01b031681565b61047760745481565b606f805461093b90614e5f565b80601f016020809104026020016040519081016040528092919081815260200182805461096790614e5f565b80156109b45780601f10610989576101008083540402835291602001916109b4565b820191906000526020600020905b81548152906001019060200180831161099757829003601f168201915b505050505081565b6073546001600160a01b031633146109ef5760405162461bcd60e51b81526004016109e690614e99565b60405180910390fd5b6103e88161ffff16118015610a0957506104008161ffff16105b610a8e5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a4016109e6565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610b1d57508115155b610b91576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e6565b80610c06576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e6565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610cc792600160801b90920481169116614ef2565b6001600160401b0316111592915050565b6073546001600160a01b03163314610d025760405162461bcd60e51b81526004016109e690614e99565b62093a806001600160401b0382161115610d2e5760405162461bcd60e51b81526004016109e690614f1d565b60655460ff16610dd1576072546001600160401b03600160c01b909104811690821610610dd15760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109e6565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610ae0565b60655460ff1615610e4a5760405162461bcd60e51b81526004016109e690614f88565b606954600160401b90046001600160a01b03163314610ed15760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e63657200000000000060648201526084016109e6565b805180610f465760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e6365203120626174636800000060648201526084016109e6565b6103e88110610fbf576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e79206261746368657360648201526084016109e6565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561144d57600087828151811061101257611012614ff0565b60200260200101519050600081606001516001600160401b031611156111cb578361103c81615006565b9450506000816000015180519060200120826020015183606001516040516020016110699392919061502c565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461110f5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d6174636800000060648201526084016109e6565b81606001516001600160401b031682604001516001600160401b031610156111c55760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a4016109e6565b50611340565b602081015115806112545750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b36329161120e9160040190815260200190565b6020604051808303816000875af115801561122d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611251919061504f565b15155b6112c65760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d75737420657869737400000000000060648201526084016109e6565b805151620493e0116113405760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016109e6565b856001600160401b031681604001516001600160401b03161015801561137357504281604001516001600160401b031611155b6113e55760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e676500000060648201526084016109e6565b8051805160209182012081830151604080850151905161140c948894939291339101615068565b604051602081830303815290604052805190602001209250848061142f90615006565b95505080604001519550508080611445906150ac565b915050610ff6565b506068546001600160401b03600160c01b909104811690831611156114d25760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b60648201526084016109e6565b6068546000906114f290600160801b90046001600160401b0316846150c5565b611505906001600160401b0316876150ed565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115da903390309084906115bf9190615104565b606554600160581b90046001600160a01b031692919061337c565b6115e26133e7565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff161561164c5760405162461bcd60e51b81526004016109e690614f88565b6072546001600160401b03878116600090815260676020526040902060010154429261168392600160c01b90910481169116614ef2565b6001600160401b0316111561170c5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a4016109e6565b6103e861171988886150c5565b6001600160401b0316106117955760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e7920626174636865730000000060648201526084016109e6565b6117a5888888888888888861348b565b6117ae866139c9565b607254600160801b90046001600160401b0316600003611876576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561181357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561185957600080fd5b505af115801561186d573d6000803e3d6000fd5b50505050611927565b61187e6133e7565b607280546001600160401b031690600061189783615006565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b0381161580159061199f57506072546001600160401b03600160401b9091048116908216115b80156119ba57506072546001600160401b0390811690821611155b611a385760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a4016109e6565b606a546001600160a01b03163314611ae257611a5381610c91565b611ae25760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a4016109e6565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d9094529382902092909255607280546fffffffffffffffff000000000000000019169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611ba457600080fd5b505af1158015611bb8573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611c0591815260200190565b60405180910390a3505050565b606e805461093b90614e5f565b600054610100900460ff1615808015611c3f5750600054600160ff909116105b80611c595750303b158015611c59575060005460ff166001145b611cbc5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109e6565b6000805460ff191660011790558015611cdf576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611d5c6020860186614bf6565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d8c6060860160408701614bf6565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611dc760c0860160a08701614bf6565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611e2460e0860160c08701614802565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611e5b6040860160208701614802565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611e976080860160608701614802565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611ed360a0860160808701614cd8565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611efb8482615169565b50606f611f088382615169565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611f3e613baf565b8015611f84576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611fb95760405162461bcd60e51b81526004016109e690614e99565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610ae0565b6073546001600160a01b0316331461203d5760405162461bcd60e51b81526004016109e690614e99565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190602001610ae0565b612093613c23565b61209d6000613c7d565b565b6033546001600160a01b0316331461230c576072546000906001600160401b0316156120f057506072546001600160401b03908116600090815260716020526040902054600160401b9004166120fe565b506069546001600160401b03165b80826001600160401b03161161217c5760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c72656164792076657269666965640000000060648201526084016109e6565b6068546001600160401b03600160401b9091048116908316118015906121be57506001600160401b038083166000908152606760205260409020600101541615155b6122495760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a4016109e6565b6001600160401b0380831660009081526067602052604090206001015442916122779162093a809116614ef2565b6001600160401b0316111561230a5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a4016109e6565b505b612314613ccf565b50565b60655460ff161561233a5760405162461bcd60e51b81526004016109e690614f88565b61234b898989898989898989613d3f565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f84613ccf565b6073546001600160a01b031633146123d05760405162461bcd60e51b81526004016109e690614e99565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610ae090831515815260200190565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612470573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612494919061504f565b905060006124a0612646565b6068546001600160401b03600160401b82048116916124d091600160801b8204811691600160c01b9004166150c5565b6124da9190614ef2565b6124e491906150c5565b6001600160401b031690506124f9818361523e565b9250505090565b6073546001600160a01b0316331461252a5760405162461bcd60e51b81526004016109e690614e99565b62093a806001600160401b03821611156125565760405162461bcd60e51b81526004016109e690614f1d565b60655460ff166125eb576072546001600160401b03600160801b9091048116908216106125eb5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f7765720060648201526084016109e6565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610ae0565b6072546000906001600160401b03161561268357506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126bd5760405162461bcd60e51b81526004016109e690614e99565b606e6126c98282615169565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610ae0919061475b565b6073546001600160a01b031633146127235760405162461bcd60e51b81526004016109e690614e99565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610ae0565b60655460ff161561279d5760405162461bcd60e51b81526004016109e690614f88565b606c54600160a01b900460ff1615156001146127cb5760405162461bcd60e51b81526004016109e690615252565b80518061282e5760405162461bcd60e51b815260206004820152603d602482015260008051602061559e83398151915260448201527f3a204d75737420666f726365206174206c65617374203120626174636800000060648201526084016109e6565b6103e8811061289f5760405162461bcd60e51b8152602060048201526043602482015260008051602061559e83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a4016109e6565b6068546001600160401b03600160c01b82048116916128c7918491600160801b9004166152bb565b11156129215760405162461bcd60e51b8152602060048201526035602482015260008051602061559e8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b60648201526084016109e6565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612b4d57600086828151811061296e5761296e614ff0565b60200260200101519050838061298390615006565b9450506000816000015180519060200120826020015183604001516040516020016129b09392919061502c565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612a4f5760405162461bcd60e51b8152602060048201526042602482015260008051602061559e83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109e6565b612a5a6001886150ed565b8303612aef5742620697808360400151612a749190614ef2565b6001600160401b03161115612aef5760405162461bcd60e51b8152602060048201526047602482015260008051602061559e83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a4016109e6565b8151805160209182012081840151604051612b1293889392914291339101615068565b6040516020818303038152906040528051906020012093508580612b3590615006565b96505050508080612b45906150ac565b915050612952565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612c665760405162461bcd60e51b81526004016109e6906152d3565b6073546001600160a01b03163314612c905760405162461bcd60e51b81526004016109e690614e99565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612ce057600080fd5b505af1158015612cf4573d6000803e3d6000fd5b5050505061209d6143ba565b606a546001600160a01b03163314612d2a5760405162461bcd60e51b81526004016109e690615330565b612d3b898989898989898989613d3f565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612d8657607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612dcc57600080fd5b505af1158015612de0573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612e685760405162461bcd60e51b81526004016109e690614f88565b606c54600160a01b900460ff161515600114612e965760405162461bcd60e51b81526004016109e690615252565b6000612ea160745490565b905081811115612f065760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b60648201526084016109e6565b620493e0835110612f775760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b60648201526084016109e6565b606554612f9690600160581b90046001600160a01b031633308461337c565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015612fe0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613004919061504f565b60688054919250600160c01b9091046001600160401b031690601861302883615006565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016130699392919061502c565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361310d57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613168565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161315f9392919061538d565b60405180910390a25b50505050565b606a546001600160a01b031633146131985760405162461bcd60e51b81526004016109e690615330565b6131a8888888888888888861348b565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d6020526040902085905560725416156131f357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561323957600080fd5b505af115801561324d573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611960565b6073546001600160a01b031633146132b85760405162461bcd60e51b81526004016109e690614e99565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001610ae0565b61330e613c23565b6001600160a01b0381166133735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e6565b61231481613c7d565b6040516001600160a01b03808516602483015283166044820152606481018290526131689085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614411565b6072546001600160401b03600160401b820481169116111561209d5760725460009061342490600160401b90046001600160401b03166001614ef2565b905061342f81610c91565b15612314576072546000906002906134519084906001600160401b03166150c5565b61345b91906153c0565b6134659083614ef2565b905061347081610c91565b156134825761347e81611972565b5050565b61347e82611972565b600080613496612646565b90506001600160401b038a1615613611576072546001600160401b03908116908b1611156135525760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2070656e60448201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560648201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608482015260a4016109e6565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b909204161461360b5760405162461bcd60e51b815260206004820152604c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760648201526b040e6e8c2e8ca40c4c2e8c6d60a31b608482015260a4016109e6565b50613759565b6001600160401b0389166000908152606d60205260409020549150816136ab5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786064820152621a5cdd60ea1b608482015260a4016109e6565b806001600160401b0316896001600160401b031611156137595760405162461bcd60e51b815260206004820152605d60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060648201527f7468616e2063757272656e744c61737456657269666965644261746368000000608482015260a4016109e6565b806001600160401b0316886001600160401b0316116138065760405162461bcd60e51b815260206004820152605760248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2066696e60448201527f616c4e65774261746368206d75737420626520626967676572207468616e206360648201527f757272656e744c61737456657269666965644261746368000000000000000000608482015260a4016109e6565b60006138158a8a8a868b610aeb565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161384a91906153e6565b602060405180830381855afa158015613867573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061388a919061504f565b6138949190615402565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916138d8918b918b918b9190600401615416565b602060405180830381865afa1580156138f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139199190615490565b6139785760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e7660448201526930b634b210383937b7b360b11b60648201526084016109e6565b6139bb33613986858d6150c5565b6001600160401b031661399761241d565b6139a19190615104565b606554600160581b90046001600160a01b031691906144e8565b505050505050505050505050565b60006139d3612646565b9050816000806139e384846150c5565b6001600160401b031690505b836001600160401b0316836001600160401b031614613a95576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613a3f9116426150ed565b1115613a7a576001810154613a6490600160401b90046001600160401b0316866150c5565b613a77906001600160401b0316846152bb565b92505b60010154600160401b90046001600160401b031692506139ef565b6000613aa183836150ed565b905082811015613b1b576000613ab782856150ed565b9050600c8111613ac75780613aca565b600c5b9050613ad7816003615104565b613ae290600a615591565b606554613afb908390600160481b900461ffff16615591565b607454613b089190615104565b613b12919061523e565b60745550613ba7565b6000613b2784836150ed565b9050600c8111613b375780613b3a565b600c5b90506000613b49826003615104565b613b5490600a615591565b606554613b6d908490600160481b900461ffff16615591565b607454613b7a9190615104565b613b84919061523e565b905080607454607454613b979190615104565b613ba1919061523e565b60745550505b505050505050565b600054610100900460ff16613c1a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109e6565b61209d33613c7d565b6033546001600160a01b0316331461209d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109e6565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d1f57600080fd5b505af1158015613d33573d6000803e3d6000fd5b5050505061209d614518565b60006001600160401b038a1615613eba576072546001600160401b03908116908b161115613dfe5760405162461bcd60e51b815260206004820152606c60248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c4016109e6565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613eb45760405162461bcd60e51b815260206004820152606060248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a4016109e6565b5061400e565b506001600160401b0387166000908152606d602052604090205480613f5b5760405162461bcd60e51b815260206004820152605760248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a4016109e6565b6069546001600160401b03908116908916111561400e5760405162461bcd60e51b815260206004820152607160248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c4016109e6565b6072546001600160401b03908116908a161180159061403e5750896001600160401b0316896001600160401b0316115b801561405f57506072546001600160401b03600160401b9091048116908a16115b6140d75760405162461bcd60e51b815260206004820152604f60248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a4016109e6565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146141975760405162461bcd60e51b815260206004820152606a60248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c4016109e6565b60006141a6898989858a610aeb565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516141db91906153e6565b602060405180830381855afa1580156141f8573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061421b919061504f565b6142259190615402565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614269918a918a918a9190600401615416565b602060405180830381865afa158015614286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142aa9190615490565b61430a5760405162461bcd60e51b815260206004820152603e60248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a20696e76616c69642070726f6f66000060648201526084016109e6565b6001600160401b038b166000908152607160205260409020600201548790036139bb5760405162461bcd60e51b815260206004820152606260248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c4016109e6565b60655460ff166143dc5760405162461bcd60e51b81526004016109e6906152d3565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614466826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145739092919063ffffffff16565b8051909150156144e357808060200190518101906144849190615490565b6144e35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109e6565b505050565b6040516001600160a01b0383166024820152604481018290526144e390849063a9059cbb60e01b906064016133b0565b60655460ff161561453b5760405162461bcd60e51b81526004016109e690614f88565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614582848460008561458a565b949350505050565b6060824710156145eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109e6565b600080866001600160a01b0316858760405161460791906153e6565b60006040518083038185875af1925050503d8060008114614644576040519150601f19603f3d011682016040523d82523d6000602084013e614649565b606091505b509150915061465a87838387614665565b979650505050505050565b606083156146d45782516000036146cd576001600160a01b0385163b6146cd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109e6565b5081614582565b61458283838151156146e95781518083602001fd5b8060405162461bcd60e51b81526004016109e6919061475b565b60005b8381101561471e578181015183820152602001614706565b838111156131685750506000910152565b60008151808452614747816020860160208601614703565b601f01601f19169290920160200192915050565b60208152600061476e602083018461472f565b9392505050565b60006020828403121561478757600080fd5b813561ffff8116811461476e57600080fd5b80356001600160401b03811681146147b057600080fd5b919050565b600080600080600060a086880312156147cd57600080fd5b6147d686614799565b94506147e460208701614799565b94979496505050506040830135926060810135926080909101359150565b60006020828403121561481457600080fd5b61476e82614799565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156148555761485561481d565b60405290565b604051606081016001600160401b03811182821017156148555761485561481d565b604051601f8201601f191681016001600160401b03811182821017156148a5576148a561481d565b604052919050565b60006001600160401b038211156148c6576148c661481d565b5060051b60200190565b600082601f8301126148e157600080fd5b81356001600160401b038111156148fa576148fa61481d565b61490d601f8201601f191660200161487d565b81815284602083860101111561492257600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561495257600080fd5b82356001600160401b038082111561496957600080fd5b818501915085601f83011261497d57600080fd5b813561499061498b826148ad565b61487d565b81815260059190911b830184019084810190888311156149af57600080fd5b8585015b83811015614a48578035858111156149cb5760008081fd5b86016080818c03601f19018113156149e35760008081fd5b6149eb614833565b89830135888111156149fd5760008081fd5b614a0b8e8c838701016148d0565b8252506040808401358b8301526060614a25818601614799565b82840152614a34848601614799565b9083015250855250509186019186016149b3565b5098975050505050505050565b8060408101831015614a6657600080fd5b92915050565b8060808101831015614a6657600080fd5b6000806000806000806000806101a0898b031215614a9a57600080fd5b614aa389614799565b9750614ab160208a01614799565b9650614abf60408a01614799565b95506060890135945060808901359350614adc8a60a08b01614a55565b9250614aeb8a60e08b01614a6c565b9150614afb8a6101608b01614a55565b90509295985092959890939650565b6001600160a01b038116811461231457600080fd5b600080600080600080600080888a036101c0811215614b3d57600080fd5b8935614b4881614b0a565b985060208a0135614b5881614b0a565b975060408a0135614b6881614b0a565b965060608a0135614b7881614b0a565b955060e0607f1982011215614b8c57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614bb657600080fd5b614bc28c838d016148d0565b93506101a08b0135915080821115614bd957600080fd5b50614be68b828c016148d0565b9150509295985092959890939650565b600060208284031215614c0857600080fd5b813561476e81614b0a565b60008060008060008060008060006101c08a8c031215614c3257600080fd5b614c3b8a614799565b9850614c4960208b01614799565b9750614c5760408b01614799565b9650614c6560608b01614799565b955060808a0135945060a08a01359350614c828b60c08c01614a55565b9250614c928b6101008c01614a6c565b9150614ca28b6101808c01614a55565b90509295985092959850929598565b600060208284031215614cc357600080fd5b5035919050565b801515811461231457600080fd5b600060208284031215614cea57600080fd5b813561476e81614cca565b600060208284031215614d0757600080fd5b81356001600160401b03811115614d1d57600080fd5b614582848285016148d0565b60006020808385031215614d3c57600080fd5b82356001600160401b0380821115614d5357600080fd5b818501915085601f830112614d6757600080fd5b8135614d7561498b826148ad565b81815260059190911b83018401908481019088831115614d9457600080fd5b8585015b83811015614a4857803585811115614db05760008081fd5b86016060818c03601f1901811315614dc85760008081fd5b614dd061485b565b8983013588811115614de25760008081fd5b614df08e8c838701016148d0565b8252506040808401358b830152614e08838501614799565b9082015285525050918601918601614d98565b60008060408385031215614e2e57600080fd5b82356001600160401b03811115614e4457600080fd5b614e50858286016148d0565b95602094909401359450505050565b600181811c90821680614e7357607f821691505b602082108103614e9357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614f1457614f14614edc565b01949350505050565b60208082526045908201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361502257615022614edc565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b60006020828403121561506157600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b6000600182016150be576150be614edc565b5060010190565b60006001600160401b03838116908316818110156150e5576150e5614edc565b039392505050565b6000828210156150ff576150ff614edc565b500390565b600081600019048311821515161561511e5761511e614edc565b500290565b601f8211156144e357600081815260208120601f850160051c8101602086101561514a5750805b601f850160051c820191505b81811015613ba757828155600101615156565b81516001600160401b038111156151825761518261481d565b615196816151908454614e5f565b84615123565b602080601f8311600181146151cb57600084156151b35750858301515b600019600386901b1c1916600185901b178555613ba7565b600085815260208120601f198616915b828110156151fa578886015182559484019460019091019084016151db565b50858210156152185787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b60008261524d5761524d615228565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b600082198211156152ce576152ce614edc565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b03831660208201526060604082018190526000906153b79083018461472f565b95945050505050565b60006001600160401b03808416806153da576153da615228565b92169190910492915050565b600082516153f8818460208701614703565b9190910192915050565b60008261541157615411615228565b500690565b61012081016040808784376000838201818152879190815b600281101561544e5784848337908401828152928401929060010161542e565b5050828760c0870137610100850181815286935091505b6001811015615484578251825260209283019290910190600101615465565b50505095945050505050565b6000602082840312156154a257600080fd5b815161476e81614cca565b600181815b808511156154e85781600019048211156154ce576154ce614edc565b808516156154db57918102915b93841c93908002906154b2565b509250929050565b6000826154ff57506001614a66565b8161550c57506000614a66565b8160018114615522576002811461552c57615548565b6001915050614a66565b60ff84111561553d5761553d614edc565b50506001821b614a66565b5060208310610133831016604e8410600b841016171561556b575081810a614a66565b61557583836154ad565b806000190482111561558957615589614edc565b029392505050565b600061476e83836154f056fe506f6c79676f6e5a6b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a6b45564d3a3a70726f76654e6f6e44657465726d696e6973a26469706673582212204c3a0cfa919696b298adf6c27a097f1b74001bdc0f6a0b750405825e747a7de964736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5061561380620000216000396000f3fe608060405234801561001057600080fd5b50600436106103af5760003560e01c80638da5cb5b116101f4578063cfa8ed471161011a578063e7a7ed02116100ad578063f14916d61161007c578063f14916d6146108ec578063f2fde38b146108ff578063f851a44014610912578063f8b823e41461092557600080fd5b8063e7a7ed0214610899578063e8bf92ed146108b3578063eaeb077b146108c6578063edc41121146108d957600080fd5b8063d939b315116100e9578063d939b3151461085b578063dbc1697614610875578063e11f3f181461087d578063e217cfd61461089057600080fd5b8063cfa8ed4714610807578063d02103ca14610821578063d8d1091b14610834578063d8f54db01461084757600080fd5b8063ab9fc5ef11610192578063b6b0b09711610161578063b6b0b097146107bf578063c0ed84e0146107d9578063c89e42df146107e1578063cf136306146107f457600080fd5b8063ab9fc5ef14610713578063adc879e91461071d578063afd23cbe14610737578063b4d63f581461075f57600080fd5b80639eb831b9116101ce5780639eb831b9146106d85780639f0d039d146106e0578063a3c573eb146106e8578063aa58bad6146106fb57600080fd5b80638da5cb5b146106ac57806399f5634e146106bd5780639c9f3dfe146106c557600080fd5b80634a910e6a116102d9578063715018a611610277578063837a473811610246578063837a473814610607578063841b24d7146106755780638b48931e1461068f5780638c4a0af71461069957600080fd5b8063715018a6146105c65780637215541a146105ce57806375c508b3146105e15780637fcb3653146105f457600080fd5b806360943d6a116102b357806360943d6a1461056d5780636b8616ce146105805780636ff512cc146105a0578063704b6c02146105b357600080fd5b80634a910e6a146105325780635392c5e014610545578063542028d51461056557600080fd5b8063383b3be811610351578063456052671161032057806345605267146104d8578063458c0477146104f25780634834a343146105055780634a1a89a71461051857600080fd5b8063383b3be814610485578063394218e9146104985780633c158267146104ab578063423fa856146104be57600080fd5b806319d8ac611161038d57806319d8ac6114610404578063220d78991461042f57806329878983146104425780632d0889d31461046d57600080fd5b8063107bf28c146103b457806315064c96146103d25780631816b7e5146103ef575b600080fd5b6103bc61092e565b6040516103c9919061475b565b60405180910390f35b6065546103df9060ff1681565b60405190151581526020016103c9565b6104026103fd366004614775565b6109bc565b005b606854610417906001600160401b031681565b6040516001600160401b0390911681526020016103c9565b6103bc61043d3660046147b5565b610aeb565b606a54610455906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b610477620493e081565b6040519081526020016103c9565b6103df610493366004614802565b610c91565b6104026104a6366004614802565b610cd8565b6104026104b936600461493f565b610e27565b60685461041790600160401b90046001600160401b031681565b60685461041790600160801b90046001600160401b031681565b607254610417906001600160401b031681565b610402610513366004614a7d565b611629565b60725461041790600160401b90046001600160401b031681565b610402610540366004614802565b611972565b610477610553366004614802565b606d6020526000908152604090205481565b6103bc611c12565b61040261057b366004614b1f565b611c1f565b61047761058e366004614802565b60666020526000908152604090205481565b6104026105ae366004614bf6565b611f8f565b6104026105c1366004614bf6565b612013565b61040261208b565b6104026105dc366004614802565b61209f565b6104026105ef366004614c13565b612317565b606954610417906001600160401b031681565b61064a610615366004614cb1565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103c9565b60725461041790600160c01b90046001600160401b031681565b61041762093a8081565b6104026106a7366004614cd8565b6123a6565b6033546001600160a01b0316610455565b61047761241d565b6104026106d3366004614802565b612500565b610477600c81565b607454610477565b607054610455906001600160a01b031681565b6065546104179061010090046001600160401b031681565b6104176206978081565b606c5461041790600160a81b90046001600160401b031681565b60655461074c90600160481b900461ffff1681565b60405161ffff90911681526020016103c9565b61079a61076d366004614802565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103c9565b60655461045590600160581b90046001600160a01b031681565b610417612646565b6104026107ef366004614cf5565b612693565b610402610802366004614802565b6126f9565b60695461045590600160401b90046001600160a01b031681565b606c54610455906001600160a01b031681565b610402610842366004614d29565b61277a565b606c546103df90600160a01b900460ff1681565b60725461041790600160801b90046001600160401b031681565b610402612c44565b61040261088b366004614c13565b612d00565b6104176103e881565b60685461041790600160c01b90046001600160401b031681565b606b54610455906001600160a01b031681565b6104026108d4366004614e1b565b612e45565b6104026108e7366004614a7d565b61316e565b6104026108fa366004614bf6565b61328e565b61040261090d366004614bf6565b613306565b607354610455906001600160a01b031681565b61047760745481565b606f805461093b90614e5f565b80601f016020809104026020016040519081016040528092919081815260200182805461096790614e5f565b80156109b45780601f10610989576101008083540402835291602001916109b4565b820191906000526020600020905b81548152906001019060200180831161099757829003601f168201915b505050505081565b6073546001600160a01b031633146109ef5760405162461bcd60e51b81526004016109e690614e99565b60405180910390fd5b6103e88161ffff16118015610a0957506104008161ffff16105b610a8e5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a4016109e6565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610b1d57508115155b610b91576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e6565b80610c06576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e6565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610cc792600160801b90920481169116614ef2565b6001600160401b0316111592915050565b6073546001600160a01b03163314610d025760405162461bcd60e51b81526004016109e690614e99565b62093a806001600160401b0382161115610d2e5760405162461bcd60e51b81526004016109e690614f1d565b60655460ff16610dd1576072546001600160401b03600160c01b909104811690821610610dd15760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109e6565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610ae0565b60655460ff1615610e4a5760405162461bcd60e51b81526004016109e690614f88565b606954600160401b90046001600160a01b03163314610ed15760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e63657200000000000060648201526084016109e6565b805180610f465760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e6365203120626174636800000060648201526084016109e6565b6103e88110610fbf576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e79206261746368657360648201526084016109e6565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561144d57600087828151811061101257611012614ff0565b60200260200101519050600081606001516001600160401b031611156111cb578361103c81615006565b9450506000816000015180519060200120826020015183606001516040516020016110699392919061502c565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461110f5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d6174636800000060648201526084016109e6565b81606001516001600160401b031682604001516001600160401b031610156111c55760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a4016109e6565b50611340565b602081015115806112545750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b36329161120e9160040190815260200190565b6020604051808303816000875af115801561122d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611251919061504f565b15155b6112c65760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d75737420657869737400000000000060648201526084016109e6565b805151620493e0116113405760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016109e6565b856001600160401b031681604001516001600160401b03161015801561137357504281604001516001600160401b031611155b6113e55760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e676500000060648201526084016109e6565b8051805160209182012081830151604080850151905161140c948894939291339101615068565b604051602081830303815290604052805190602001209250848061142f90615006565b95505080604001519550508080611445906150ac565b915050610ff6565b506068546001600160401b03600160c01b909104811690831611156114d25760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b60648201526084016109e6565b6068546000906114f290600160801b90046001600160401b0316846150c5565b611505906001600160401b0316876150ed565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115da903390309084906115bf9190615104565b606554600160581b90046001600160a01b031692919061337c565b6115e26133e7565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff161561164c5760405162461bcd60e51b81526004016109e690614f88565b6072546001600160401b03878116600090815260676020526040902060010154429261168392600160c01b90910481169116614ef2565b6001600160401b0316111561170c5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a4016109e6565b6103e861171988886150c5565b6001600160401b0316106117955760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e7920626174636865730000000060648201526084016109e6565b6117a5888888888888888861348b565b6117ae866139c9565b607254600160801b90046001600160401b0316600003611876576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561181357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561185957600080fd5b505af115801561186d573d6000803e3d6000fd5b50505050611927565b61187e6133e7565b607280546001600160401b031690600061189783615006565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b0381161580159061199f57506072546001600160401b03600160401b9091048116908216115b80156119ba57506072546001600160401b0390811690821611155b611a385760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a4016109e6565b606a546001600160a01b03163314611ae257611a5381610c91565b611ae25760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a4016109e6565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d9094529382902092909255607280546fffffffffffffffff000000000000000019169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611ba457600080fd5b505af1158015611bb8573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611c0591815260200190565b60405180910390a3505050565b606e805461093b90614e5f565b600054610100900460ff1615808015611c3f5750600054600160ff909116105b80611c595750303b158015611c59575060005460ff166001145b611cbc5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109e6565b6000805460ff191660011790558015611cdf576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611d5c6020860186614bf6565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d8c6060860160408701614bf6565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611dc760c0860160a08701614bf6565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611e2460e0860160c08701614802565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611e5b6040860160208701614802565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611e976080860160608701614802565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611ed360a0860160808701614cd8565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611efb8482615169565b50606f611f088382615169565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611f3e613baf565b8015611f84576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611fb95760405162461bcd60e51b81526004016109e690614e99565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610ae0565b6073546001600160a01b0316331461203d5760405162461bcd60e51b81526004016109e690614e99565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190602001610ae0565b612093613c23565b61209d6000613c7d565b565b6033546001600160a01b0316331461230c576072546000906001600160401b0316156120f057506072546001600160401b03908116600090815260716020526040902054600160401b9004166120fe565b506069546001600160401b03165b80826001600160401b03161161217c5760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c72656164792076657269666965640000000060648201526084016109e6565b6068546001600160401b03600160401b9091048116908316118015906121be57506001600160401b038083166000908152606760205260409020600101541615155b6122495760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a4016109e6565b6001600160401b0380831660009081526067602052604090206001015442916122779162093a809116614ef2565b6001600160401b0316111561230a5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a4016109e6565b505b612314613ccf565b50565b60655460ff161561233a5760405162461bcd60e51b81526004016109e690614f88565b61234b898989898989898989613d3f565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f84613ccf565b6073546001600160a01b031633146123d05760405162461bcd60e51b81526004016109e690614e99565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610ae090831515815260200190565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612470573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612494919061504f565b905060006124a0612646565b6068546001600160401b03600160401b82048116916124d091600160801b8204811691600160c01b9004166150c5565b6124da9190614ef2565b6124e491906150c5565b6001600160401b031690506124f9818361523e565b9250505090565b6073546001600160a01b0316331461252a5760405162461bcd60e51b81526004016109e690614e99565b62093a806001600160401b03821611156125565760405162461bcd60e51b81526004016109e690614f1d565b60655460ff166125eb576072546001600160401b03600160801b9091048116908216106125eb5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f7765720060648201526084016109e6565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610ae0565b6072546000906001600160401b03161561268357506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126bd5760405162461bcd60e51b81526004016109e690614e99565b606e6126c98282615169565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610ae0919061475b565b6073546001600160a01b031633146127235760405162461bcd60e51b81526004016109e690614e99565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610ae0565b60655460ff161561279d5760405162461bcd60e51b81526004016109e690614f88565b606c54600160a01b900460ff1615156001146127cb5760405162461bcd60e51b81526004016109e690615252565b80518061282e5760405162461bcd60e51b815260206004820152603d602482015260008051602061559e83398151915260448201527f3a204d75737420666f726365206174206c65617374203120626174636800000060648201526084016109e6565b6103e8811061289f5760405162461bcd60e51b8152602060048201526043602482015260008051602061559e83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a4016109e6565b6068546001600160401b03600160c01b82048116916128c7918491600160801b9004166152bb565b11156129215760405162461bcd60e51b8152602060048201526035602482015260008051602061559e8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b60648201526084016109e6565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612b4d57600086828151811061296e5761296e614ff0565b60200260200101519050838061298390615006565b9450506000816000015180519060200120826020015183604001516040516020016129b09392919061502c565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612a4f5760405162461bcd60e51b8152602060048201526042602482015260008051602061559e83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109e6565b612a5a6001886150ed565b8303612aef5742620697808360400151612a749190614ef2565b6001600160401b03161115612aef5760405162461bcd60e51b8152602060048201526047602482015260008051602061559e83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a4016109e6565b8151805160209182012081840151604051612b1293889392914291339101615068565b6040516020818303038152906040528051906020012093508580612b3590615006565b96505050508080612b45906150ac565b915050612952565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612c665760405162461bcd60e51b81526004016109e6906152d3565b6073546001600160a01b03163314612c905760405162461bcd60e51b81526004016109e690614e99565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612ce057600080fd5b505af1158015612cf4573d6000803e3d6000fd5b5050505061209d6143ba565b606a546001600160a01b03163314612d2a5760405162461bcd60e51b81526004016109e690615330565b612d3b898989898989898989613d3f565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612d8657607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612dcc57600080fd5b505af1158015612de0573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612e685760405162461bcd60e51b81526004016109e690614f88565b606c54600160a01b900460ff161515600114612e965760405162461bcd60e51b81526004016109e690615252565b6000612ea160745490565b905081811115612f065760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b60648201526084016109e6565b620493e0835110612f775760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b60648201526084016109e6565b606554612f9690600160581b90046001600160a01b031633308461337c565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015612fe0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613004919061504f565b60688054919250600160c01b9091046001600160401b031690601861302883615006565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016130699392919061502c565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361310d57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613168565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161315f9392919061538d565b60405180910390a25b50505050565b606a546001600160a01b031633146131985760405162461bcd60e51b81526004016109e690615330565b6131a8888888888888888861348b565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d6020526040902085905560725416156131f357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561323957600080fd5b505af115801561324d573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611960565b6073546001600160a01b031633146132b85760405162461bcd60e51b81526004016109e690614e99565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001610ae0565b61330e613c23565b6001600160a01b0381166133735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e6565b61231481613c7d565b6040516001600160a01b03808516602483015283166044820152606481018290526131689085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614411565b6072546001600160401b03600160401b820481169116111561209d5760725460009061342490600160401b90046001600160401b03166001614ef2565b905061342f81610c91565b15612314576072546000906002906134519084906001600160401b03166150c5565b61345b91906153c0565b6134659083614ef2565b905061347081610c91565b156134825761347e81611972565b5050565b61347e82611972565b600080613496612646565b90506001600160401b038a1615613611576072546001600160401b03908116908b1611156135525760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2070656e60448201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560648201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608482015260a4016109e6565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b909204161461360b5760405162461bcd60e51b815260206004820152604c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760648201526b040e6e8c2e8ca40c4c2e8c6d60a31b608482015260a4016109e6565b50613759565b6001600160401b0389166000908152606d60205260409020549150816136ab5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786064820152621a5cdd60ea1b608482015260a4016109e6565b806001600160401b0316896001600160401b031611156137595760405162461bcd60e51b815260206004820152605d60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060648201527f7468616e2063757272656e744c61737456657269666965644261746368000000608482015260a4016109e6565b806001600160401b0316886001600160401b0316116138065760405162461bcd60e51b815260206004820152605760248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2066696e60448201527f616c4e65774261746368206d75737420626520626967676572207468616e206360648201527f757272656e744c61737456657269666965644261746368000000000000000000608482015260a4016109e6565b60006138158a8a8a868b610aeb565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161384a91906153e6565b602060405180830381855afa158015613867573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061388a919061504f565b6138949190615402565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916138d8918b918b918b9190600401615416565b602060405180830381865afa1580156138f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139199190615490565b6139785760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20496e7660448201526930b634b210383937b7b360b11b60648201526084016109e6565b6139bb33613986858d6150c5565b6001600160401b031661399761241d565b6139a19190615104565b606554600160581b90046001600160a01b031691906144e8565b505050505050505050505050565b60006139d3612646565b9050816000806139e384846150c5565b6001600160401b031690505b836001600160401b0316836001600160401b031614613a95576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613a3f9116426150ed565b1115613a7a576001810154613a6490600160401b90046001600160401b0316866150c5565b613a77906001600160401b0316846152bb565b92505b60010154600160401b90046001600160401b031692506139ef565b6000613aa183836150ed565b905082811015613b1b576000613ab782856150ed565b9050600c8111613ac75780613aca565b600c5b9050613ad7816003615104565b613ae290600a615591565b606554613afb908390600160481b900461ffff16615591565b607454613b089190615104565b613b12919061523e565b60745550613ba7565b6000613b2784836150ed565b9050600c8111613b375780613b3a565b600c5b90506000613b49826003615104565b613b5490600a615591565b606554613b6d908490600160481b900461ffff16615591565b607454613b7a9190615104565b613b84919061523e565b905080607454607454613b979190615104565b613ba1919061523e565b60745550505b505050505050565b600054610100900460ff16613c1a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109e6565b61209d33613c7d565b6033546001600160a01b0316331461209d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109e6565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d1f57600080fd5b505af1158015613d33573d6000803e3d6000fd5b5050505061209d614518565b60006001600160401b038a1615613eba576072546001600160401b03908116908b161115613dfe5760405162461bcd60e51b815260206004820152606c60248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c4016109e6565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613eb45760405162461bcd60e51b815260206004820152606060248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a4016109e6565b5061400e565b506001600160401b0387166000908152606d602052604090205480613f5b5760405162461bcd60e51b815260206004820152605760248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a4016109e6565b6069546001600160401b03908116908916111561400e5760405162461bcd60e51b815260206004820152607160248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c4016109e6565b6072546001600160401b03908116908a161180159061403e5750896001600160401b0316896001600160401b0316115b801561405f57506072546001600160401b03600160401b9091048116908a16115b6140d75760405162461bcd60e51b815260206004820152604f60248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a4016109e6565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146141975760405162461bcd60e51b815260206004820152606a60248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c4016109e6565b60006141a6898989858a610aeb565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516141db91906153e6565b602060405180830381855afa1580156141f8573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061421b919061504f565b6142259190615402565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614269918a918a918a9190600401615416565b602060405180830381865afa158015614286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142aa9190615490565b61430a5760405162461bcd60e51b815260206004820152603e60248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a20496e76616c69642070726f6f66000060648201526084016109e6565b6001600160401b038b166000908152607160205260409020600201548790036139bb5760405162461bcd60e51b815260206004820152606260248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c4016109e6565b60655460ff166143dc5760405162461bcd60e51b81526004016109e6906152d3565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614466826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145739092919063ffffffff16565b8051909150156144e357808060200190518101906144849190615490565b6144e35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109e6565b505050565b6040516001600160a01b0383166024820152604481018290526144e390849063a9059cbb60e01b906064016133b0565b60655460ff161561453b5760405162461bcd60e51b81526004016109e690614f88565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614582848460008561458a565b949350505050565b6060824710156145eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109e6565b600080866001600160a01b0316858760405161460791906153e6565b60006040518083038185875af1925050503d8060008114614644576040519150601f19603f3d011682016040523d82523d6000602084013e614649565b606091505b509150915061465a87838387614665565b979650505050505050565b606083156146d45782516000036146cd576001600160a01b0385163b6146cd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109e6565b5081614582565b61458283838151156146e95781518083602001fd5b8060405162461bcd60e51b81526004016109e6919061475b565b60005b8381101561471e578181015183820152602001614706565b838111156131685750506000910152565b60008151808452614747816020860160208601614703565b601f01601f19169290920160200192915050565b60208152600061476e602083018461472f565b9392505050565b60006020828403121561478757600080fd5b813561ffff8116811461476e57600080fd5b80356001600160401b03811681146147b057600080fd5b919050565b600080600080600060a086880312156147cd57600080fd5b6147d686614799565b94506147e460208701614799565b94979496505050506040830135926060810135926080909101359150565b60006020828403121561481457600080fd5b61476e82614799565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156148555761485561481d565b60405290565b604051606081016001600160401b03811182821017156148555761485561481d565b604051601f8201601f191681016001600160401b03811182821017156148a5576148a561481d565b604052919050565b60006001600160401b038211156148c6576148c661481d565b5060051b60200190565b600082601f8301126148e157600080fd5b81356001600160401b038111156148fa576148fa61481d565b61490d601f8201601f191660200161487d565b81815284602083860101111561492257600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561495257600080fd5b82356001600160401b038082111561496957600080fd5b818501915085601f83011261497d57600080fd5b813561499061498b826148ad565b61487d565b81815260059190911b830184019084810190888311156149af57600080fd5b8585015b83811015614a48578035858111156149cb5760008081fd5b86016080818c03601f19018113156149e35760008081fd5b6149eb614833565b89830135888111156149fd5760008081fd5b614a0b8e8c838701016148d0565b8252506040808401358b8301526060614a25818601614799565b82840152614a34848601614799565b9083015250855250509186019186016149b3565b5098975050505050505050565b8060408101831015614a6657600080fd5b92915050565b8060808101831015614a6657600080fd5b6000806000806000806000806101a0898b031215614a9a57600080fd5b614aa389614799565b9750614ab160208a01614799565b9650614abf60408a01614799565b95506060890135945060808901359350614adc8a60a08b01614a55565b9250614aeb8a60e08b01614a6c565b9150614afb8a6101608b01614a55565b90509295985092959890939650565b6001600160a01b038116811461231457600080fd5b600080600080600080600080888a036101c0811215614b3d57600080fd5b8935614b4881614b0a565b985060208a0135614b5881614b0a565b975060408a0135614b6881614b0a565b965060608a0135614b7881614b0a565b955060e0607f1982011215614b8c57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614bb657600080fd5b614bc28c838d016148d0565b93506101a08b0135915080821115614bd957600080fd5b50614be68b828c016148d0565b9150509295985092959890939650565b600060208284031215614c0857600080fd5b813561476e81614b0a565b60008060008060008060008060006101c08a8c031215614c3257600080fd5b614c3b8a614799565b9850614c4960208b01614799565b9750614c5760408b01614799565b9650614c6560608b01614799565b955060808a0135945060a08a01359350614c828b60c08c01614a55565b9250614c928b6101008c01614a6c565b9150614ca28b6101808c01614a55565b90509295985092959850929598565b600060208284031215614cc357600080fd5b5035919050565b801515811461231457600080fd5b600060208284031215614cea57600080fd5b813561476e81614cca565b600060208284031215614d0757600080fd5b81356001600160401b03811115614d1d57600080fd5b614582848285016148d0565b60006020808385031215614d3c57600080fd5b82356001600160401b0380821115614d5357600080fd5b818501915085601f830112614d6757600080fd5b8135614d7561498b826148ad565b81815260059190911b83018401908481019088831115614d9457600080fd5b8585015b83811015614a4857803585811115614db05760008081fd5b86016060818c03601f1901811315614dc85760008081fd5b614dd061485b565b8983013588811115614de25760008081fd5b614df08e8c838701016148d0565b8252506040808401358b830152614e08838501614799565b9082015285525050918601918601614d98565b60008060408385031215614e2e57600080fd5b82356001600160401b03811115614e4457600080fd5b614e50858286016148d0565b95602094909401359450505050565b600181811c90821680614e7357607f821691505b602082108103614e9357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614f1457614f14614edc565b01949350505050565b60208082526045908201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361502257615022614edc565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b60006020828403121561506157600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b6000600182016150be576150be614edc565b5060010190565b60006001600160401b03838116908316818110156150e5576150e5614edc565b039392505050565b6000828210156150ff576150ff614edc565b500390565b600081600019048311821515161561511e5761511e614edc565b500290565b601f8211156144e357600081815260208120601f850160051c8101602086101561514a5750805b601f850160051c820191505b81811015613ba757828155600101615156565b81516001600160401b038111156151825761518261481d565b615196816151908454614e5f565b84615123565b602080601f8311600181146151cb57600084156151b35750858301515b600019600386901b1c1916600185901b178555613ba7565b600085815260208120601f198616915b828110156151fa578886015182559484019460019091019084016151db565b50858210156152185787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b60008261524d5761524d615228565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b600082198211156152ce576152ce614edc565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b03831660208201526060604082018190526000906153b79083018461472f565b95945050505050565b60006001600160401b03808416806153da576153da615228565b92169190910492915050565b600082516153f8818460208701614703565b9190910192915050565b60008261541157615411615228565b500690565b61012081016040808784376000838201818152879190815b600281101561544e5784848337908401828152928401929060010161542e565b5050828760c0870137610100850181815286935091505b6001811015615484578251825260209283019290910190600101615465565b50505095945050505050565b6000602082840312156154a257600080fd5b815161476e81614cca565b600181815b808511156154e85781600019048211156154ce576154ce614edc565b808516156154db57918102915b93841c93908002906154b2565b509250929050565b6000826154ff57506001614a66565b8161550c57506000614a66565b8160018114615522576002811461552c57615548565b6001915050614a66565b60ff84111561553d5761553d614edc565b50506001821b614a66565b5060208310610133831016604e8410600b841016171561556b575081810a614a66565b61557583836154ad565b806000190482111561558957615589614edc565b029392505050565b600061476e83836154f056fe506f6c79676f6e5a6b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a6b45564d3a3a70726f76654e6f6e44657465726d696e6973a26469706673582212208c52fcbd2a803441dd2c3fbfaea82ec11a07da8df032f48b14ee8489b157689b64736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103af5760003560e01c80638da5cb5b116101f4578063cfa8ed471161011a578063e7a7ed02116100ad578063f14916d61161007c578063f14916d6146108ec578063f2fde38b146108ff578063f851a44014610912578063f8b823e41461092557600080fd5b8063e7a7ed0214610899578063e8bf92ed146108b3578063eaeb077b146108c6578063edc41121146108d957600080fd5b8063d939b315116100e9578063d939b3151461085b578063dbc1697614610875578063e11f3f181461087d578063e217cfd61461089057600080fd5b8063cfa8ed4714610807578063d02103ca14610821578063d8d1091b14610834578063d8f54db01461084757600080fd5b8063ab9fc5ef11610192578063b6b0b09711610161578063b6b0b097146107bf578063c0ed84e0146107d9578063c89e42df146107e1578063cf136306146107f457600080fd5b8063ab9fc5ef14610713578063adc879e91461071d578063afd23cbe14610737578063b4d63f581461075f57600080fd5b80639eb831b9116101ce5780639eb831b9146106d85780639f0d039d146106e0578063a3c573eb146106e8578063aa58bad6146106fb57600080fd5b80638da5cb5b146106ac57806399f5634e146106bd5780639c9f3dfe146106c557600080fd5b80634a910e6a116102d9578063715018a611610277578063837a473811610246578063837a473814610607578063841b24d7146106755780638b48931e1461068f5780638c4a0af71461069957600080fd5b8063715018a6146105c65780637215541a146105ce57806375c508b3146105e15780637fcb3653146105f457600080fd5b806360943d6a116102b357806360943d6a1461056d5780636b8616ce146105805780636ff512cc146105a0578063704b6c02146105b357600080fd5b80634a910e6a146105325780635392c5e014610545578063542028d51461056557600080fd5b8063383b3be811610351578063456052671161032057806345605267146104d8578063458c0477146104f25780634834a343146105055780634a1a89a71461051857600080fd5b8063383b3be814610485578063394218e9146104985780633c158267146104ab578063423fa856146104be57600080fd5b806319d8ac611161038d57806319d8ac6114610404578063220d78991461042f57806329878983146104425780632d0889d31461046d57600080fd5b8063107bf28c146103b457806315064c96146103d25780631816b7e5146103ef575b600080fd5b6103bc61092e565b6040516103c9919061475b565b60405180910390f35b6065546103df9060ff1681565b60405190151581526020016103c9565b6104026103fd366004614775565b6109bc565b005b606854610417906001600160401b031681565b6040516001600160401b0390911681526020016103c9565b6103bc61043d3660046147b5565b610aeb565b606a54610455906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b610477620493e081565b6040519081526020016103c9565b6103df610493366004614802565b610c91565b6104026104a6366004614802565b610cd8565b6104026104b936600461493f565b610e27565b60685461041790600160401b90046001600160401b031681565b60685461041790600160801b90046001600160401b031681565b607254610417906001600160401b031681565b610402610513366004614a7d565b611629565b60725461041790600160401b90046001600160401b031681565b610402610540366004614802565b611972565b610477610553366004614802565b606d6020526000908152604090205481565b6103bc611c12565b61040261057b366004614b1f565b611c1f565b61047761058e366004614802565b60666020526000908152604090205481565b6104026105ae366004614bf6565b611f8f565b6104026105c1366004614bf6565b612013565b61040261208b565b6104026105dc366004614802565b61209f565b6104026105ef366004614c13565b612317565b606954610417906001600160401b031681565b61064a610615366004614cb1565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103c9565b60725461041790600160c01b90046001600160401b031681565b61041762093a8081565b6104026106a7366004614cd8565b6123a6565b6033546001600160a01b0316610455565b61047761241d565b6104026106d3366004614802565b612500565b610477600c81565b607454610477565b607054610455906001600160a01b031681565b6065546104179061010090046001600160401b031681565b6104176206978081565b606c5461041790600160a81b90046001600160401b031681565b60655461074c90600160481b900461ffff1681565b60405161ffff90911681526020016103c9565b61079a61076d366004614802565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103c9565b60655461045590600160581b90046001600160a01b031681565b610417612646565b6104026107ef366004614cf5565b612693565b610402610802366004614802565b6126f9565b60695461045590600160401b90046001600160a01b031681565b606c54610455906001600160a01b031681565b610402610842366004614d29565b61277a565b606c546103df90600160a01b900460ff1681565b60725461041790600160801b90046001600160401b031681565b610402612c44565b61040261088b366004614c13565b612d00565b6104176103e881565b60685461041790600160c01b90046001600160401b031681565b606b54610455906001600160a01b031681565b6104026108d4366004614e1b565b612e45565b6104026108e7366004614a7d565b61316e565b6104026108fa366004614bf6565b61328e565b61040261090d366004614bf6565b613306565b607354610455906001600160a01b031681565b61047760745481565b606f805461093b90614e5f565b80601f016020809104026020016040519081016040528092919081815260200182805461096790614e5f565b80156109b45780601f10610989576101008083540402835291602001916109b4565b820191906000526020600020905b81548152906001019060200180831161099757829003601f168201915b505050505081565b6073546001600160a01b031633146109ef5760405162461bcd60e51b81526004016109e690614e99565b60405180910390fd5b6103e88161ffff16118015610a0957506104008161ffff16105b610a8e5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a4016109e6565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610b1d57508115155b610b91576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e6565b80610c06576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e6565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610cc792600160801b90920481169116614ef2565b6001600160401b0316111592915050565b6073546001600160a01b03163314610d025760405162461bcd60e51b81526004016109e690614e99565b62093a806001600160401b0382161115610d2e5760405162461bcd60e51b81526004016109e690614f1d565b60655460ff16610dd1576072546001600160401b03600160c01b909104811690821610610dd15760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109e6565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610ae0565b60655460ff1615610e4a5760405162461bcd60e51b81526004016109e690614f88565b606954600160401b90046001600160a01b03163314610ed15760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e63657200000000000060648201526084016109e6565b805180610f465760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e6365203120626174636800000060648201526084016109e6565b6103e88110610fbf576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e79206261746368657360648201526084016109e6565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561144d57600087828151811061101257611012614ff0565b60200260200101519050600081606001516001600160401b031611156111cb578361103c81615006565b9450506000816000015180519060200120826020015183606001516040516020016110699392919061502c565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461110f5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d6174636800000060648201526084016109e6565b81606001516001600160401b031682604001516001600160401b031610156111c55760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a4016109e6565b50611340565b602081015115806112545750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b36329161120e9160040190815260200190565b6020604051808303816000875af115801561122d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611251919061504f565b15155b6112c65760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d75737420657869737400000000000060648201526084016109e6565b805151620493e0116113405760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016109e6565b856001600160401b031681604001516001600160401b03161015801561137357504281604001516001600160401b031611155b6113e55760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e676500000060648201526084016109e6565b8051805160209182012081830151604080850151905161140c948894939291339101615068565b604051602081830303815290604052805190602001209250848061142f90615006565b95505080604001519550508080611445906150ac565b915050610ff6565b506068546001600160401b03600160c01b909104811690831611156114d25760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b60648201526084016109e6565b6068546000906114f290600160801b90046001600160401b0316846150c5565b611505906001600160401b0316876150ed565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115da903390309084906115bf9190615104565b606554600160581b90046001600160a01b031692919061337c565b6115e26133e7565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff161561164c5760405162461bcd60e51b81526004016109e690614f88565b6072546001600160401b03878116600090815260676020526040902060010154429261168392600160c01b90910481169116614ef2565b6001600160401b0316111561170c5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a4016109e6565b6103e861171988886150c5565b6001600160401b0316106117955760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e7920626174636865730000000060648201526084016109e6565b6117a5888888888888888861348b565b6117ae866139c9565b607254600160801b90046001600160401b0316600003611876576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561181357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561185957600080fd5b505af115801561186d573d6000803e3d6000fd5b50505050611927565b61187e6133e7565b607280546001600160401b031690600061189783615006565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b0381161580159061199f57506072546001600160401b03600160401b9091048116908216115b80156119ba57506072546001600160401b0390811690821611155b611a385760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a4016109e6565b606a546001600160a01b03163314611ae257611a5381610c91565b611ae25760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a4016109e6565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d9094529382902092909255607280546fffffffffffffffff000000000000000019169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611ba457600080fd5b505af1158015611bb8573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611c0591815260200190565b60405180910390a3505050565b606e805461093b90614e5f565b600054610100900460ff1615808015611c3f5750600054600160ff909116105b80611c595750303b158015611c59575060005460ff166001145b611cbc5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109e6565b6000805460ff191660011790558015611cdf576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611d5c6020860186614bf6565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d8c6060860160408701614bf6565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611dc760c0860160a08701614bf6565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611e2460e0860160c08701614802565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611e5b6040860160208701614802565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611e976080860160608701614802565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611ed360a0860160808701614cd8565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611efb8482615169565b50606f611f088382615169565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611f3e613baf565b8015611f84576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611fb95760405162461bcd60e51b81526004016109e690614e99565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610ae0565b6073546001600160a01b0316331461203d5760405162461bcd60e51b81526004016109e690614e99565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190602001610ae0565b612093613c23565b61209d6000613c7d565b565b6033546001600160a01b0316331461230c576072546000906001600160401b0316156120f057506072546001600160401b03908116600090815260716020526040902054600160401b9004166120fe565b506069546001600160401b03165b80826001600160401b03161161217c5760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c72656164792076657269666965640000000060648201526084016109e6565b6068546001600160401b03600160401b9091048116908316118015906121be57506001600160401b038083166000908152606760205260409020600101541615155b6122495760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a4016109e6565b6001600160401b0380831660009081526067602052604090206001015442916122779162093a809116614ef2565b6001600160401b0316111561230a5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a4016109e6565b505b612314613ccf565b50565b60655460ff161561233a5760405162461bcd60e51b81526004016109e690614f88565b61234b898989898989898989613d3f565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f84613ccf565b6073546001600160a01b031633146123d05760405162461bcd60e51b81526004016109e690614e99565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610ae090831515815260200190565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612470573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612494919061504f565b905060006124a0612646565b6068546001600160401b03600160401b82048116916124d091600160801b8204811691600160c01b9004166150c5565b6124da9190614ef2565b6124e491906150c5565b6001600160401b031690506124f9818361523e565b9250505090565b6073546001600160a01b0316331461252a5760405162461bcd60e51b81526004016109e690614e99565b62093a806001600160401b03821611156125565760405162461bcd60e51b81526004016109e690614f1d565b60655460ff166125eb576072546001600160401b03600160801b9091048116908216106125eb5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f7765720060648201526084016109e6565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610ae0565b6072546000906001600160401b03161561268357506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126bd5760405162461bcd60e51b81526004016109e690614e99565b606e6126c98282615169565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610ae0919061475b565b6073546001600160a01b031633146127235760405162461bcd60e51b81526004016109e690614e99565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610ae0565b60655460ff161561279d5760405162461bcd60e51b81526004016109e690614f88565b606c54600160a01b900460ff1615156001146127cb5760405162461bcd60e51b81526004016109e690615252565b80518061282e5760405162461bcd60e51b815260206004820152603d602482015260008051602061559e83398151915260448201527f3a204d75737420666f726365206174206c65617374203120626174636800000060648201526084016109e6565b6103e8811061289f5760405162461bcd60e51b8152602060048201526043602482015260008051602061559e83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a4016109e6565b6068546001600160401b03600160c01b82048116916128c7918491600160801b9004166152bb565b11156129215760405162461bcd60e51b8152602060048201526035602482015260008051602061559e8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b60648201526084016109e6565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612b4d57600086828151811061296e5761296e614ff0565b60200260200101519050838061298390615006565b9450506000816000015180519060200120826020015183604001516040516020016129b09392919061502c565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612a4f5760405162461bcd60e51b8152602060048201526042602482015260008051602061559e83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109e6565b612a5a6001886150ed565b8303612aef5742620697808360400151612a749190614ef2565b6001600160401b03161115612aef5760405162461bcd60e51b8152602060048201526047602482015260008051602061559e83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a4016109e6565b8151805160209182012081840151604051612b1293889392914291339101615068565b6040516020818303038152906040528051906020012093508580612b3590615006565b96505050508080612b45906150ac565b915050612952565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612c665760405162461bcd60e51b81526004016109e6906152d3565b6073546001600160a01b03163314612c905760405162461bcd60e51b81526004016109e690614e99565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612ce057600080fd5b505af1158015612cf4573d6000803e3d6000fd5b5050505061209d6143ba565b606a546001600160a01b03163314612d2a5760405162461bcd60e51b81526004016109e690615330565b612d3b898989898989898989613d3f565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612d8657607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612dcc57600080fd5b505af1158015612de0573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612e685760405162461bcd60e51b81526004016109e690614f88565b606c54600160a01b900460ff161515600114612e965760405162461bcd60e51b81526004016109e690615252565b6000612ea160745490565b905081811115612f065760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b60648201526084016109e6565b620493e0835110612f775760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b60648201526084016109e6565b606554612f9690600160581b90046001600160a01b031633308461337c565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015612fe0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613004919061504f565b60688054919250600160c01b9091046001600160401b031690601861302883615006565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016130699392919061502c565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361310d57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613168565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161315f9392919061538d565b60405180910390a25b50505050565b606a546001600160a01b031633146131985760405162461bcd60e51b81526004016109e690615330565b6131a8888888888888888861348b565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d6020526040902085905560725416156131f357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561323957600080fd5b505af115801561324d573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611960565b6073546001600160a01b031633146132b85760405162461bcd60e51b81526004016109e690614e99565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001610ae0565b61330e613c23565b6001600160a01b0381166133735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e6565b61231481613c7d565b6040516001600160a01b03808516602483015283166044820152606481018290526131689085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614411565b6072546001600160401b03600160401b820481169116111561209d5760725460009061342490600160401b90046001600160401b03166001614ef2565b905061342f81610c91565b15612314576072546000906002906134519084906001600160401b03166150c5565b61345b91906153c0565b6134659083614ef2565b905061347081610c91565b156134825761347e81611972565b5050565b61347e82611972565b600080613496612646565b90506001600160401b038a1615613611576072546001600160401b03908116908b1611156135525760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2070656e60448201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560648201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608482015260a4016109e6565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b909204161461360b5760405162461bcd60e51b815260206004820152604c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760648201526b040e6e8c2e8ca40c4c2e8c6d60a31b608482015260a4016109e6565b50613759565b6001600160401b0389166000908152606d60205260409020549150816136ab5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786064820152621a5cdd60ea1b608482015260a4016109e6565b806001600160401b0316896001600160401b031611156137595760405162461bcd60e51b815260206004820152605d60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060648201527f7468616e2063757272656e744c61737456657269666965644261746368000000608482015260a4016109e6565b806001600160401b0316886001600160401b0316116138065760405162461bcd60e51b815260206004820152605760248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2066696e60448201527f616c4e65774261746368206d75737420626520626967676572207468616e206360648201527f757272656e744c61737456657269666965644261746368000000000000000000608482015260a4016109e6565b60006138158a8a8a868b610aeb565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161384a91906153e6565b602060405180830381855afa158015613867573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061388a919061504f565b6138949190615402565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916138d8918b918b918b9190600401615416565b602060405180830381865afa1580156138f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139199190615490565b6139785760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20496e7660448201526930b634b210383937b7b360b11b60648201526084016109e6565b6139bb33613986858d6150c5565b6001600160401b031661399761241d565b6139a19190615104565b606554600160581b90046001600160a01b031691906144e8565b505050505050505050505050565b60006139d3612646565b9050816000806139e384846150c5565b6001600160401b031690505b836001600160401b0316836001600160401b031614613a95576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613a3f9116426150ed565b1115613a7a576001810154613a6490600160401b90046001600160401b0316866150c5565b613a77906001600160401b0316846152bb565b92505b60010154600160401b90046001600160401b031692506139ef565b6000613aa183836150ed565b905082811015613b1b576000613ab782856150ed565b9050600c8111613ac75780613aca565b600c5b9050613ad7816003615104565b613ae290600a615591565b606554613afb908390600160481b900461ffff16615591565b607454613b089190615104565b613b12919061523e565b60745550613ba7565b6000613b2784836150ed565b9050600c8111613b375780613b3a565b600c5b90506000613b49826003615104565b613b5490600a615591565b606554613b6d908490600160481b900461ffff16615591565b607454613b7a9190615104565b613b84919061523e565b905080607454607454613b979190615104565b613ba1919061523e565b60745550505b505050505050565b600054610100900460ff16613c1a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109e6565b61209d33613c7d565b6033546001600160a01b0316331461209d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109e6565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d1f57600080fd5b505af1158015613d33573d6000803e3d6000fd5b5050505061209d614518565b60006001600160401b038a1615613eba576072546001600160401b03908116908b161115613dfe5760405162461bcd60e51b815260206004820152606c60248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c4016109e6565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613eb45760405162461bcd60e51b815260206004820152606060248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a4016109e6565b5061400e565b506001600160401b0387166000908152606d602052604090205480613f5b5760405162461bcd60e51b815260206004820152605760248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a4016109e6565b6069546001600160401b03908116908916111561400e5760405162461bcd60e51b815260206004820152607160248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c4016109e6565b6072546001600160401b03908116908a161180159061403e5750896001600160401b0316896001600160401b0316115b801561405f57506072546001600160401b03600160401b9091048116908a16115b6140d75760405162461bcd60e51b815260206004820152604f60248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a4016109e6565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146141975760405162461bcd60e51b815260206004820152606a60248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c4016109e6565b60006141a6898989858a610aeb565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516141db91906153e6565b602060405180830381855afa1580156141f8573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061421b919061504f565b6142259190615402565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614269918a918a918a9190600401615416565b602060405180830381865afa158015614286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142aa9190615490565b61430a5760405162461bcd60e51b815260206004820152603e60248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a20496e76616c69642070726f6f66000060648201526084016109e6565b6001600160401b038b166000908152607160205260409020600201548790036139bb5760405162461bcd60e51b815260206004820152606260248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c4016109e6565b60655460ff166143dc5760405162461bcd60e51b81526004016109e6906152d3565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614466826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145739092919063ffffffff16565b8051909150156144e357808060200190518101906144849190615490565b6144e35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109e6565b505050565b6040516001600160a01b0383166024820152604481018290526144e390849063a9059cbb60e01b906064016133b0565b60655460ff161561453b5760405162461bcd60e51b81526004016109e690614f88565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614582848460008561458a565b949350505050565b6060824710156145eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109e6565b600080866001600160a01b0316858760405161460791906153e6565b60006040518083038185875af1925050503d8060008114614644576040519150601f19603f3d011682016040523d82523d6000602084013e614649565b606091505b509150915061465a87838387614665565b979650505050505050565b606083156146d45782516000036146cd576001600160a01b0385163b6146cd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109e6565b5081614582565b61458283838151156146e95781518083602001fd5b8060405162461bcd60e51b81526004016109e6919061475b565b60005b8381101561471e578181015183820152602001614706565b838111156131685750506000910152565b60008151808452614747816020860160208601614703565b601f01601f19169290920160200192915050565b60208152600061476e602083018461472f565b9392505050565b60006020828403121561478757600080fd5b813561ffff8116811461476e57600080fd5b80356001600160401b03811681146147b057600080fd5b919050565b600080600080600060a086880312156147cd57600080fd5b6147d686614799565b94506147e460208701614799565b94979496505050506040830135926060810135926080909101359150565b60006020828403121561481457600080fd5b61476e82614799565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156148555761485561481d565b60405290565b604051606081016001600160401b03811182821017156148555761485561481d565b604051601f8201601f191681016001600160401b03811182821017156148a5576148a561481d565b604052919050565b60006001600160401b038211156148c6576148c661481d565b5060051b60200190565b600082601f8301126148e157600080fd5b81356001600160401b038111156148fa576148fa61481d565b61490d601f8201601f191660200161487d565b81815284602083860101111561492257600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561495257600080fd5b82356001600160401b038082111561496957600080fd5b818501915085601f83011261497d57600080fd5b813561499061498b826148ad565b61487d565b81815260059190911b830184019084810190888311156149af57600080fd5b8585015b83811015614a48578035858111156149cb5760008081fd5b86016080818c03601f19018113156149e35760008081fd5b6149eb614833565b89830135888111156149fd5760008081fd5b614a0b8e8c838701016148d0565b8252506040808401358b8301526060614a25818601614799565b82840152614a34848601614799565b9083015250855250509186019186016149b3565b5098975050505050505050565b8060408101831015614a6657600080fd5b92915050565b8060808101831015614a6657600080fd5b6000806000806000806000806101a0898b031215614a9a57600080fd5b614aa389614799565b9750614ab160208a01614799565b9650614abf60408a01614799565b95506060890135945060808901359350614adc8a60a08b01614a55565b9250614aeb8a60e08b01614a6c565b9150614afb8a6101608b01614a55565b90509295985092959890939650565b6001600160a01b038116811461231457600080fd5b600080600080600080600080888a036101c0811215614b3d57600080fd5b8935614b4881614b0a565b985060208a0135614b5881614b0a565b975060408a0135614b6881614b0a565b965060608a0135614b7881614b0a565b955060e0607f1982011215614b8c57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614bb657600080fd5b614bc28c838d016148d0565b93506101a08b0135915080821115614bd957600080fd5b50614be68b828c016148d0565b9150509295985092959890939650565b600060208284031215614c0857600080fd5b813561476e81614b0a565b60008060008060008060008060006101c08a8c031215614c3257600080fd5b614c3b8a614799565b9850614c4960208b01614799565b9750614c5760408b01614799565b9650614c6560608b01614799565b955060808a0135945060a08a01359350614c828b60c08c01614a55565b9250614c928b6101008c01614a6c565b9150614ca28b6101808c01614a55565b90509295985092959850929598565b600060208284031215614cc357600080fd5b5035919050565b801515811461231457600080fd5b600060208284031215614cea57600080fd5b813561476e81614cca565b600060208284031215614d0757600080fd5b81356001600160401b03811115614d1d57600080fd5b614582848285016148d0565b60006020808385031215614d3c57600080fd5b82356001600160401b0380821115614d5357600080fd5b818501915085601f830112614d6757600080fd5b8135614d7561498b826148ad565b81815260059190911b83018401908481019088831115614d9457600080fd5b8585015b83811015614a4857803585811115614db05760008081fd5b86016060818c03601f1901811315614dc85760008081fd5b614dd061485b565b8983013588811115614de25760008081fd5b614df08e8c838701016148d0565b8252506040808401358b830152614e08838501614799565b9082015285525050918601918601614d98565b60008060408385031215614e2e57600080fd5b82356001600160401b03811115614e4457600080fd5b614e50858286016148d0565b95602094909401359450505050565b600181811c90821680614e7357607f821691505b602082108103614e9357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614f1457614f14614edc565b01949350505050565b60208082526045908201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361502257615022614edc565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b60006020828403121561506157600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b6000600182016150be576150be614edc565b5060010190565b60006001600160401b03838116908316818110156150e5576150e5614edc565b039392505050565b6000828210156150ff576150ff614edc565b500390565b600081600019048311821515161561511e5761511e614edc565b500290565b601f8211156144e357600081815260208120601f850160051c8101602086101561514a5750805b601f850160051c820191505b81811015613ba757828155600101615156565b81516001600160401b038111156151825761518261481d565b615196816151908454614e5f565b84615123565b602080601f8311600181146151cb57600084156151b35750858301515b600019600386901b1c1916600185901b178555613ba7565b600085815260208120601f198616915b828110156151fa578886015182559484019460019091019084016151db565b50858210156152185787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b60008261524d5761524d615228565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b600082198211156152ce576152ce614edc565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b03831660208201526060604082018190526000906153b79083018461472f565b95945050505050565b60006001600160401b03808416806153da576153da615228565b92169190910492915050565b600082516153f8818460208701614703565b9190910192915050565b60008261541157615411615228565b500690565b61012081016040808784376000838201818152879190815b600281101561544e5784848337908401828152928401929060010161542e565b5050828760c0870137610100850181815286935091505b6001811015615484578251825260209283019290910190600101615465565b50505095945050505050565b6000602082840312156154a257600080fd5b815161476e81614cca565b600181815b808511156154e85781600019048211156154ce576154ce614edc565b808516156154db57918102915b93841c93908002906154b2565b509250929050565b6000826154ff57506001614a66565b8161550c57506000614a66565b8160018114615522576002811461552c57615548565b6001915050614a66565b60ff84111561553d5761553d614edc565b50506001821b614a66565b5060208310610133831016604e8410600b841016171561556b575081810a614a66565b61557583836154ad565b806000190482111561558957615589614edc565b029392505050565b600061476e83836154f056fe506f6c79676f6e5a6b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a6b45564d3a3a70726f76654e6f6e44657465726d696e6973a26469706673582212208c52fcbd2a803441dd2c3fbfaea82ec11a07da8df032f48b14ee8489b157689b64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZkEVMBridge.json b/compiled-contracts/PolygonZkEVMBridge.json index 85457653c..d0a8b08b1 100644 --- a/compiled-contracts/PolygonZkEVMBridge.json +++ b/compiled-contracts/PolygonZkEVMBridge.json @@ -699,8 +699,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506147f0806100206000396000f3fe608060405260043610620001675760003560e01c80637b6323c111620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b80637b6323c1146200037057806381b1c17414620003955780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b806334ac9cf2116200011e57806334ac9cf214620002a25780633ae0504714620002c45780633da8168214620002dc5780633e1970431462000301578063463855491462000326578063647c576c146200034b57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d3660046200244d565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009cd565b348015620001db57600080fd5b50620001f3620001ed366004620024da565b62000a06565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002516565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b50602754620001f3906001600160a01b031681565b348015620002d157600080fd5b506200022462000a59565b348015620002e957600080fd5b50620001a1620002fb36600462002605565b62000b4c565b3480156200030e57600080fd5b50620002246200032036600462002683565b62000c4e565b3480156200033357600080fd5b50620001836200034536600462002794565b62000cdb565b3480156200035857600080fd5b50620001836200036a3660046200287b565b62000e81565b3480156200037d57600080fd5b50620001836200038f36600462002794565b62000fe0565b348015620003a257600080fd5b50620001f3620003b4366004620028cb565b6024602052600090815260409020546001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028cb565b62001469565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d366004620028e5565b620014ae565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b036600462002999565b620015c5565b348015620004c357600080fd5b506200018362001771565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028cb565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a01565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044657374696e6174696f6e2063616e6e6f7420626520697473656c66000000606482015260840162000553565b60008060606001600160a01b03891662000687578534146200067d5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a908201527f20616d6f756e7420646f6573206e6f74206d61746368206d6573736167652e76606482015263616c756560e01b608482015260a40162000553565b60009150620008e7565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074457604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac90604401600060405180830381600087803b1580156200071757600080fd5b505af11580156200072c573d6000803e3d6000fd5b505050508060200151935080600001519250620008e5565b84156200075957620007598a888888620017a8565b620007706001600160a01b038b1633308a62001bd0565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f1919081019062002ae4565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000830573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085a919081019062002ae4565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000899573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008bf919062002b1d565b604051602001620008d39392919062002b6b565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092998979695949392919062002ba8565b60405180910390a1620009546200094e600084868c8c8c888051906020012062000c4e565b62001c3d565b6026546001600160a01b03166333d6247d6200096f62000a59565b6040518263ffffffff1660e01b81526004016200098e91815260200190565b600060405180830381600087803b158015620009a957600080fd5b505af1158015620009be573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009fa5760405162461bcd60e51b8152600401620005539062002c15565b62000a0462001d8e565b565b600060246000848460405160200162000a2192919062002c72565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b43578260011660010362000ac4576001816020811062000a905762000a9062002c9c565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af1565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000afe60028462002cde565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3a9062002cf5565b91505062000a64565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c3f578160011660010362000bc95786818151811062000b875762000b8762002c9c565b60200260200101518360405160200162000bab929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c1b565b8287828151811062000bdf5762000bdf62002c9c565b602002602001015160405160200162000c02929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2860028362002cde565b91508062000c368162002cf5565b91505062000b5c565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d015760405162461bcd60e51b8152600401620005539062002a01565b62000d178a8a8a8a8a8a8a8a8a8a600162001dec565b62000d288963ffffffff166200207d565b6000836001600160a01b03168387898560405160240162000d4c9392919062002d11565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d83919062002d4c565b60006040518083038185875af1925050503d806000811462000dc2576040519150601f19603f3d011682016040523d82523d6000602084013e62000dc7565b606091505b505090508062000e335760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e8813595cdcd859d94819985a5b195960821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e6c95949392919062002d6a565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea25750600054600160ff909116105b8062000ebe5750303b15801562000ebe575060005460ff166001145b62000f235760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f47576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fda576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff1615620010065760405162461bcd60e51b8152600401620005539062002a01565b6200101c8a8a8a8a8a8a8a8a8a8a600062001dec565b6200102d8963ffffffff166200207d565b6001600160a01b0385166200112457604080516000808252602082019092526001600160a01b03851690849060405162001068919062002d4c565b60006040518083038185875af1925050503d8060008114620010a7576040519150601f19603f3d011682016040523d82523d6000602084013e620010ac565b606091505b50509050806200111d5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a20604482015274115d1a195c881d1c985b9cd9995c8819985a5b1959605a1b606482015260840162000553565b506200141c565b60225463ffffffff6101009091048116908716036200115957620011536001600160a01b0386168484620020bf565b6200141c565b600086866040516020016200117092919062002c72565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013b457600080600085806020019051810190620011c2919062002da1565b925092509250600085848484604051620011dc90620023b3565b620011ea9392919062002b6b565b8190604051809103906000f59050801580156200120b573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f1990604401600060405180830381600087803b1580156200125b57600080fd5b505af115801562001270573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013a29392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001419565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f1990604401600060405180830381600087803b158015620013ff57600080fd5b505af115801562001414573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200145595949392919062002d6a565b60405180910390a150505050505050505050565b6000806200147a6101008462002cde565b905060006200148c6101008562002e17565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014c692919062002c72565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014f990620023b3565b601f1982820381018352601f90910116604081905262001526908d908d908d908d908d9060200162002e57565b60408051601f198184030181529082905262001546929160200162002e98565b604051602081830303815290604052805190602001206040516020016200159f94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015eb5760405162461bcd60e51b8152600401620005539062002a01565b60225463ffffffff610100909104811690841603620016735760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044657374696e6174696f6e2063616e6e6f7420626520697473656c6600606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016c798979695949392919062002ba8565b60405180910390a1620016fe6200094e6001602260019054906101000a900463ffffffff1633878734888051906020012062000c4e565b6026546001600160a01b03166333d6247d6200171962000a59565b6040518263ffffffff1660e01b81526004016200173891815260200190565b600060405180830381600087803b1580156200175357600080fd5b505af115801562001768573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b031633146200179e5760405162461bcd60e51b8152600401620005539062002c15565b62000a04620020f1565b6000620017eb83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021a092505050565b9050632afa533160e01b6001600160e01b0319821601620019e45760008080808080806200181d896004818d62002ecb565b8101906200182c919062002ef7565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200186e5760405162461bcd60e51b8152600401620005539062002f52565b6001600160a01b0386163014620018995760405162461bcd60e51b8152600401620005539062002faf565b8a8514620019105760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260448201527f6d697420616d6f756e7420646f6573206e6f74206d6174636800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162001990919062002d4c565b6000604051808303816000865af19150503d8060008114620019cf576040519150601f19603f3d011682016040523d82523d6000602084013e620019d4565b606091505b5050505050505050505062001bc9565b6001600160e01b031981166323f2ebc360e21b1462001a5a5760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e6f7460448201526a081d985b1a590818d85b1b60aa1b606482015260840162000553565b60008080808080808062001a728a6004818e62002ecb565b81019062001a81919062003011565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001ac55760405162461bcd60e51b8152600401620005539062002f52565b6001600160a01b038716301462001af05760405162461bcd60e51b8152600401620005539062002faf565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001b79919062002d4c565b6000604051808303816000865af19150503d806000811462001bb8576040519150601f19603f3d011682016040523d82523d6000602084013e62001bbd565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fda9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021a7565b80600162001c4e602060026200319a565b62001c5a9190620031a8565b6021541062001cbf5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d65726b6c65604482015269081d1c995948199d5b1b60b21b606482015260840162000553565b60016021600082825462001cd49190620031c2565b909155505060215460005b602081101562001d7e578160011660010362001d1457826001826020811062001d0c5762001d0c62002c9c565b015550505050565b6001816020811062001d2a5762001d2a62002c9c565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d67919062002cde565b91508062001d758162002cf5565b91505062001cdf565b5062001d89620031dd565b505050565b60225460ff161562001db45760405162461bcd60e51b8152600401620005539062002a01565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001dfd8a63ffffffff1662001469565b1562001e545760405162461bcd60e51b815260206004820152603060248201526000805160206200479b83398151915260448201526f08105b1c9958591e4818db185a5b595960821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ec8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001eee9190620031f3565b90508060000362001f575760405162461bcd60e51b815260206004820152603760248201526000805160206200479b83398151915260448201527f20476c6f62616c45786974526f6f7420696e76616c6964000000000000000000606482015260840162000553565b60225463ffffffff878116610100909204161462001fd95760405162461bcd60e51b815260206004820152604360248201526000805160206200479b83398151915260448201527f2044657374696e6174696f6e206e6574776f726b20646f6573206e6f74206d616064820152620e8c6d60eb1b608482015260a40162000553565b602254600090610100900463ffffffff1662001ff757508862001ffa565b50895b6200202562002016848b8b8b8b8b8b8051906020012062000c4e565b8e8e63ffffffff168462000b4c565b620009be5760405162461bcd60e51b815260206004820152603260248201526000805160206200479b8339815191526044820152711024b73b30b634b21039b6ba10383937b7b360711b606482015260840162000553565b60006200208d6101008362002cde565b905060006200209f6101008462002e17565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001d8990849063a9059cbb60e01b9060640162001c05565b60225460ff166200216b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b6000620021fe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022809092919063ffffffff16565b80519091501562001d8957808060200190518101906200221f91906200320d565b62001d895760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c46848460008585600080866001600160a01b03168587604051620022aa919062002d4c565b60006040518083038185875af1925050503d8060008114620022e9576040519150601f19603f3d011682016040523d82523d6000602084013e620022ee565b606091505b509150915062002301878383876200230c565b979650505050505050565b606083156200238057825160000362002378576001600160a01b0385163b620023785760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c46565b62000c468383815115620023975781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200322d565b611558806200324383390190565b6001600160a01b0381168114620023d757600080fd5b50565b8035620023e781620023c1565b919050565b803563ffffffff81168114620023e757600080fd5b60008083601f8401126200241457600080fd5b50813567ffffffffffffffff8111156200242d57600080fd5b6020830191508360208285010111156200244657600080fd5b9250929050565b60008060008060008060a087890312156200246757600080fd5b86356200247481620023c1565b95506200248460208801620023ec565b945060408701356200249681620023c1565b935060608701359250608087013567ffffffffffffffff811115620024ba57600080fd5b620024c889828a0162002401565b979a9699509497509295939492505050565b60008060408385031215620024ee57600080fd5b620024f983620023ec565b915060208301356200250b81620023c1565b809150509250929050565b6000602082840312156200252957600080fd5b81356200253681620023c1565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200257f576200257f6200253d565b604052919050565b600082601f8301126200259957600080fd5b8135602067ffffffffffffffff821115620025b857620025b86200253d565b8160051b620025c982820162002553565b9283528481018201928281019087851115620025e457600080fd5b83870192505b848310156200230157823582529183019190830190620025ea565b600080600080608085870312156200261c57600080fd5b84359350602085013567ffffffffffffffff808211156200263c57600080fd5b6200264a8883890162002587565b94506040870135915080821682146200266257600080fd5b509396929550929360600135925050565b60ff81168114620023d757600080fd5b600080600080600080600060e0888a0312156200269f57600080fd5b8735620026ac8162002673565b9650620026bc60208901620023ec565b95506040880135620026ce81620023c1565b9450620026de60608901620023ec565b93506080880135620026f081620023c1565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200272a576200272a6200253d565b50601f01601f191660200190565b600082601f8301126200274a57600080fd5b8135620027616200275b826200270d565b62002553565b8181528460208386010111156200277757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027b557600080fd5b8a3567ffffffffffffffff80821115620027ce57600080fd5b620027dc8e838f0162002587565b9b50620027ec60208e01620023ec565b9a5060408d0135995060608d013598506200280a60808e01620023ec565b97506200281a60a08e01620023da565b96506200282a60c08e01620023ec565b95506200283a60e08e01620023da565b94506101008d013593506101208d01359150808211156200285a57600080fd5b50620028698d828e0162002738565b9150509295989b9194979a5092959850565b6000806000606084860312156200289157600080fd5b6200289c84620023ec565b92506020840135620028ae81620023c1565b91506040840135620028c081620023c1565b809150509250925092565b600060208284031215620028de57600080fd5b5035919050565b600080600080600080600060a0888a0312156200290157600080fd5b6200290c88620023ec565b965060208801356200291e81620023c1565b9550604088013567ffffffffffffffff808211156200293c57600080fd5b6200294a8b838c0162002401565b909750955060608a01359150808211156200296457600080fd5b50620029738a828b0162002401565b9094509250506080880135620029898162002673565b8091505092959891949750929550565b600080600060608486031215620029af57600080fd5b620029ba84620023ec565b92506020840135620029cc81620023c1565b9150604084013567ffffffffffffffff811115620029e957600080fd5b620029f78682870162002738565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002a8657818101518382015260200162002a6c565b8381111562000fda5750506000910152565b600082601f83011262002aaa57600080fd5b815162002abb6200275b826200270d565b81815284602083860101111562002ad157600080fd5b62000c4682602083016020870162002a69565b60006020828403121562002af757600080fd5b815167ffffffffffffffff81111562002b0f57600080fd5b62000c468482850162002a98565b60006020828403121562002b3057600080fd5b8151620025368162002673565b6000815180845262002b5781602086016020860162002a69565b601f01601f19169290920160200192915050565b60608152600062002b80606083018662002b3d565b828103602084015262002b94818662002b3d565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002bfc8483018762002b3d565b925080851660e085015250509998505050505050505050565b6020808252603a908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e5a6b45564d20636f6e7472616374000000000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002cf05762002cf062002cb2565b500490565b60006001820162002d0a5762002d0a62002cc8565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d439083018462002b3d565b95945050505050565b6000825162002d6081846020870162002a69565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002db757600080fd5b835167ffffffffffffffff8082111562002dd057600080fd5b62002dde8783880162002a98565b9450602086015191508082111562002df557600080fd5b5062002e048682870162002a98565b9250506040840151620028c08162002673565b60008262002e295762002e2962002cb2565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e6d60608301878962002e2e565b828103602084015262002e8281868862002e2e565b91505060ff831660408301529695505050505050565b6000835162002eac81846020880162002a69565b83519083019062002ec281836020880162002a69565b01949350505050565b6000808585111562002edc57600080fd5b8386111562002eea57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f1357600080fd5b873562002f2081620023c1565b9650602088013562002f3281620023c1565b955060408801359450606088013593506080880135620026f08162002673565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260408201527f6d6974206f776e6572206d757374206265207468652073656e64657200000000606082015260800190565b60208082526033908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205370656040820152726e646572206d7573742062652027746869732760681b606082015260800190565b8015158114620023d757600080fd5b600080600080600080600080610100898b0312156200302f57600080fd5b88356200303c81620023c1565b975060208901356200304e81620023c1565b9650604089013595506060890135945060808901356200306e8162003002565b935060a0890135620030808162002673565b979a969950949793969295929450505060c08201359160e0013590565b600181815b80851115620030de578160001904821115620030c257620030c262002cc8565b80851615620030d057918102915b93841c9390800290620030a2565b509250929050565b600082620030f75750600162000a53565b81620031065750600062000a53565b81600181146200311f57600281146200312a576200314a565b600191505062000a53565b60ff8411156200313e576200313e62002cc8565b50506001821b62000a53565b5060208310610133831016604e8410600b84101617156200316f575081810a62000a53565b6200317b83836200309d565b806000190482111562003192576200319262002cc8565b029392505050565b6000620025368383620030e6565b600082821015620031bd57620031bd62002cc8565b500390565b60008219821115620031d857620031d862002cc8565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200320657600080fd5b5051919050565b6000602082840312156200322057600080fd5b8151620025368162003002565b60208152600062002536602083018462002b3d56fe60c06040523480156200001157600080fd5b5060405162001558380380620015588339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109e620004ba60003960006104690152600081816102f90152610433015261109e6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866106638361104f565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161106157611061610fd1565b506001019056fea26469706673582212205af0e6dd4760d4ae367515578b46c4d5988b10ae47473e817626188baa0c03a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212209b08895b05feaa5c2c0501728e94663087750f2e080984b02bdce01c7636f75864736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001675760003560e01c80637b6323c111620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b80637b6323c1146200037057806381b1c17414620003955780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b806334ac9cf2116200011e57806334ac9cf214620002a25780633ae0504714620002c45780633da8168214620002dc5780633e1970431462000301578063463855491462000326578063647c576c146200034b57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d3660046200244d565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009cd565b348015620001db57600080fd5b50620001f3620001ed366004620024da565b62000a06565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002516565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b50602754620001f3906001600160a01b031681565b348015620002d157600080fd5b506200022462000a59565b348015620002e957600080fd5b50620001a1620002fb36600462002605565b62000b4c565b3480156200030e57600080fd5b50620002246200032036600462002683565b62000c4e565b3480156200033357600080fd5b50620001836200034536600462002794565b62000cdb565b3480156200035857600080fd5b50620001836200036a3660046200287b565b62000e81565b3480156200037d57600080fd5b50620001836200038f36600462002794565b62000fe0565b348015620003a257600080fd5b50620001f3620003b4366004620028cb565b6024602052600090815260409020546001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028cb565b62001469565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d366004620028e5565b620014ae565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b036600462002999565b620015c5565b348015620004c357600080fd5b506200018362001771565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028cb565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a01565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044657374696e6174696f6e2063616e6e6f7420626520697473656c66000000606482015260840162000553565b60008060606001600160a01b03891662000687578534146200067d5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a908201527f20616d6f756e7420646f6573206e6f74206d61746368206d6573736167652e76606482015263616c756560e01b608482015260a40162000553565b60009150620008e7565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074457604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac90604401600060405180830381600087803b1580156200071757600080fd5b505af11580156200072c573d6000803e3d6000fd5b505050508060200151935080600001519250620008e5565b84156200075957620007598a888888620017a8565b620007706001600160a01b038b1633308a62001bd0565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f1919081019062002ae4565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000830573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085a919081019062002ae4565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000899573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008bf919062002b1d565b604051602001620008d39392919062002b6b565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092998979695949392919062002ba8565b60405180910390a1620009546200094e600084868c8c8c888051906020012062000c4e565b62001c3d565b6026546001600160a01b03166333d6247d6200096f62000a59565b6040518263ffffffff1660e01b81526004016200098e91815260200190565b600060405180830381600087803b158015620009a957600080fd5b505af1158015620009be573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009fa5760405162461bcd60e51b8152600401620005539062002c15565b62000a0462001d8e565b565b600060246000848460405160200162000a2192919062002c72565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b43578260011660010362000ac4576001816020811062000a905762000a9062002c9c565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af1565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000afe60028462002cde565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3a9062002cf5565b91505062000a64565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c3f578160011660010362000bc95786818151811062000b875762000b8762002c9c565b60200260200101518360405160200162000bab929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c1b565b8287828151811062000bdf5762000bdf62002c9c565b602002602001015160405160200162000c02929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2860028362002cde565b91508062000c368162002cf5565b91505062000b5c565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d015760405162461bcd60e51b8152600401620005539062002a01565b62000d178a8a8a8a8a8a8a8a8a8a600162001dec565b62000d288963ffffffff166200207d565b6000836001600160a01b03168387898560405160240162000d4c9392919062002d11565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d83919062002d4c565b60006040518083038185875af1925050503d806000811462000dc2576040519150601f19603f3d011682016040523d82523d6000602084013e62000dc7565b606091505b505090508062000e335760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e8813595cdcd859d94819985a5b195960821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e6c95949392919062002d6a565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea25750600054600160ff909116105b8062000ebe5750303b15801562000ebe575060005460ff166001145b62000f235760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f47576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fda576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff1615620010065760405162461bcd60e51b8152600401620005539062002a01565b6200101c8a8a8a8a8a8a8a8a8a8a600062001dec565b6200102d8963ffffffff166200207d565b6001600160a01b0385166200112457604080516000808252602082019092526001600160a01b03851690849060405162001068919062002d4c565b60006040518083038185875af1925050503d8060008114620010a7576040519150601f19603f3d011682016040523d82523d6000602084013e620010ac565b606091505b50509050806200111d5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a20604482015274115d1a195c881d1c985b9cd9995c8819985a5b1959605a1b606482015260840162000553565b506200141c565b60225463ffffffff6101009091048116908716036200115957620011536001600160a01b0386168484620020bf565b6200141c565b600086866040516020016200117092919062002c72565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013b457600080600085806020019051810190620011c2919062002da1565b925092509250600085848484604051620011dc90620023b3565b620011ea9392919062002b6b565b8190604051809103906000f59050801580156200120b573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f1990604401600060405180830381600087803b1580156200125b57600080fd5b505af115801562001270573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013a29392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001419565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f1990604401600060405180830381600087803b158015620013ff57600080fd5b505af115801562001414573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200145595949392919062002d6a565b60405180910390a150505050505050505050565b6000806200147a6101008462002cde565b905060006200148c6101008562002e17565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014c692919062002c72565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014f990620023b3565b601f1982820381018352601f90910116604081905262001526908d908d908d908d908d9060200162002e57565b60408051601f198184030181529082905262001546929160200162002e98565b604051602081830303815290604052805190602001206040516020016200159f94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015eb5760405162461bcd60e51b8152600401620005539062002a01565b60225463ffffffff610100909104811690841603620016735760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044657374696e6174696f6e2063616e6e6f7420626520697473656c6600606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016c798979695949392919062002ba8565b60405180910390a1620016fe6200094e6001602260019054906101000a900463ffffffff1633878734888051906020012062000c4e565b6026546001600160a01b03166333d6247d6200171962000a59565b6040518263ffffffff1660e01b81526004016200173891815260200190565b600060405180830381600087803b1580156200175357600080fd5b505af115801562001768573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b031633146200179e5760405162461bcd60e51b8152600401620005539062002c15565b62000a04620020f1565b6000620017eb83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021a092505050565b9050632afa533160e01b6001600160e01b0319821601620019e45760008080808080806200181d896004818d62002ecb565b8101906200182c919062002ef7565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200186e5760405162461bcd60e51b8152600401620005539062002f52565b6001600160a01b0386163014620018995760405162461bcd60e51b8152600401620005539062002faf565b8a8514620019105760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260448201527f6d697420616d6f756e7420646f6573206e6f74206d6174636800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162001990919062002d4c565b6000604051808303816000865af19150503d8060008114620019cf576040519150601f19603f3d011682016040523d82523d6000602084013e620019d4565b606091505b5050505050505050505062001bc9565b6001600160e01b031981166323f2ebc360e21b1462001a5a5760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e6f7460448201526a081d985b1a590818d85b1b60aa1b606482015260840162000553565b60008080808080808062001a728a6004818e62002ecb565b81019062001a81919062003011565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001ac55760405162461bcd60e51b8152600401620005539062002f52565b6001600160a01b038716301462001af05760405162461bcd60e51b8152600401620005539062002faf565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001b79919062002d4c565b6000604051808303816000865af19150503d806000811462001bb8576040519150601f19603f3d011682016040523d82523d6000602084013e62001bbd565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fda9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021a7565b80600162001c4e602060026200319a565b62001c5a9190620031a8565b6021541062001cbf5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d65726b6c65604482015269081d1c995948199d5b1b60b21b606482015260840162000553565b60016021600082825462001cd49190620031c2565b909155505060215460005b602081101562001d7e578160011660010362001d1457826001826020811062001d0c5762001d0c62002c9c565b015550505050565b6001816020811062001d2a5762001d2a62002c9c565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d67919062002cde565b91508062001d758162002cf5565b91505062001cdf565b5062001d89620031dd565b505050565b60225460ff161562001db45760405162461bcd60e51b8152600401620005539062002a01565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001dfd8a63ffffffff1662001469565b1562001e545760405162461bcd60e51b815260206004820152603060248201526000805160206200479b83398151915260448201526f08105b1c9958591e4818db185a5b595960821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ec8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001eee9190620031f3565b90508060000362001f575760405162461bcd60e51b815260206004820152603760248201526000805160206200479b83398151915260448201527f20476c6f62616c45786974526f6f7420696e76616c6964000000000000000000606482015260840162000553565b60225463ffffffff878116610100909204161462001fd95760405162461bcd60e51b815260206004820152604360248201526000805160206200479b83398151915260448201527f2044657374696e6174696f6e206e6574776f726b20646f6573206e6f74206d616064820152620e8c6d60eb1b608482015260a40162000553565b602254600090610100900463ffffffff1662001ff757508862001ffa565b50895b6200202562002016848b8b8b8b8b8b8051906020012062000c4e565b8e8e63ffffffff168462000b4c565b620009be5760405162461bcd60e51b815260206004820152603260248201526000805160206200479b8339815191526044820152711024b73b30b634b21039b6ba10383937b7b360711b606482015260840162000553565b60006200208d6101008362002cde565b905060006200209f6101008462002e17565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001d8990849063a9059cbb60e01b9060640162001c05565b60225460ff166200216b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b6000620021fe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022809092919063ffffffff16565b80519091501562001d8957808060200190518101906200221f91906200320d565b62001d895760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c46848460008585600080866001600160a01b03168587604051620022aa919062002d4c565b60006040518083038185875af1925050503d8060008114620022e9576040519150601f19603f3d011682016040523d82523d6000602084013e620022ee565b606091505b509150915062002301878383876200230c565b979650505050505050565b606083156200238057825160000362002378576001600160a01b0385163b620023785760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c46565b62000c468383815115620023975781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200322d565b611558806200324383390190565b6001600160a01b0381168114620023d757600080fd5b50565b8035620023e781620023c1565b919050565b803563ffffffff81168114620023e757600080fd5b60008083601f8401126200241457600080fd5b50813567ffffffffffffffff8111156200242d57600080fd5b6020830191508360208285010111156200244657600080fd5b9250929050565b60008060008060008060a087890312156200246757600080fd5b86356200247481620023c1565b95506200248460208801620023ec565b945060408701356200249681620023c1565b935060608701359250608087013567ffffffffffffffff811115620024ba57600080fd5b620024c889828a0162002401565b979a9699509497509295939492505050565b60008060408385031215620024ee57600080fd5b620024f983620023ec565b915060208301356200250b81620023c1565b809150509250929050565b6000602082840312156200252957600080fd5b81356200253681620023c1565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200257f576200257f6200253d565b604052919050565b600082601f8301126200259957600080fd5b8135602067ffffffffffffffff821115620025b857620025b86200253d565b8160051b620025c982820162002553565b9283528481018201928281019087851115620025e457600080fd5b83870192505b848310156200230157823582529183019190830190620025ea565b600080600080608085870312156200261c57600080fd5b84359350602085013567ffffffffffffffff808211156200263c57600080fd5b6200264a8883890162002587565b94506040870135915080821682146200266257600080fd5b509396929550929360600135925050565b60ff81168114620023d757600080fd5b600080600080600080600060e0888a0312156200269f57600080fd5b8735620026ac8162002673565b9650620026bc60208901620023ec565b95506040880135620026ce81620023c1565b9450620026de60608901620023ec565b93506080880135620026f081620023c1565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200272a576200272a6200253d565b50601f01601f191660200190565b600082601f8301126200274a57600080fd5b8135620027616200275b826200270d565b62002553565b8181528460208386010111156200277757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027b557600080fd5b8a3567ffffffffffffffff80821115620027ce57600080fd5b620027dc8e838f0162002587565b9b50620027ec60208e01620023ec565b9a5060408d0135995060608d013598506200280a60808e01620023ec565b97506200281a60a08e01620023da565b96506200282a60c08e01620023ec565b95506200283a60e08e01620023da565b94506101008d013593506101208d01359150808211156200285a57600080fd5b50620028698d828e0162002738565b9150509295989b9194979a5092959850565b6000806000606084860312156200289157600080fd5b6200289c84620023ec565b92506020840135620028ae81620023c1565b91506040840135620028c081620023c1565b809150509250925092565b600060208284031215620028de57600080fd5b5035919050565b600080600080600080600060a0888a0312156200290157600080fd5b6200290c88620023ec565b965060208801356200291e81620023c1565b9550604088013567ffffffffffffffff808211156200293c57600080fd5b6200294a8b838c0162002401565b909750955060608a01359150808211156200296457600080fd5b50620029738a828b0162002401565b9094509250506080880135620029898162002673565b8091505092959891949750929550565b600080600060608486031215620029af57600080fd5b620029ba84620023ec565b92506020840135620029cc81620023c1565b9150604084013567ffffffffffffffff811115620029e957600080fd5b620029f78682870162002738565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002a8657818101518382015260200162002a6c565b8381111562000fda5750506000910152565b600082601f83011262002aaa57600080fd5b815162002abb6200275b826200270d565b81815284602083860101111562002ad157600080fd5b62000c4682602083016020870162002a69565b60006020828403121562002af757600080fd5b815167ffffffffffffffff81111562002b0f57600080fd5b62000c468482850162002a98565b60006020828403121562002b3057600080fd5b8151620025368162002673565b6000815180845262002b5781602086016020860162002a69565b601f01601f19169290920160200192915050565b60608152600062002b80606083018662002b3d565b828103602084015262002b94818662002b3d565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002bfc8483018762002b3d565b925080851660e085015250509998505050505050505050565b6020808252603a908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e5a6b45564d20636f6e7472616374000000000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002cf05762002cf062002cb2565b500490565b60006001820162002d0a5762002d0a62002cc8565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d439083018462002b3d565b95945050505050565b6000825162002d6081846020870162002a69565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002db757600080fd5b835167ffffffffffffffff8082111562002dd057600080fd5b62002dde8783880162002a98565b9450602086015191508082111562002df557600080fd5b5062002e048682870162002a98565b9250506040840151620028c08162002673565b60008262002e295762002e2962002cb2565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e6d60608301878962002e2e565b828103602084015262002e8281868862002e2e565b91505060ff831660408301529695505050505050565b6000835162002eac81846020880162002a69565b83519083019062002ec281836020880162002a69565b01949350505050565b6000808585111562002edc57600080fd5b8386111562002eea57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f1357600080fd5b873562002f2081620023c1565b9650602088013562002f3281620023c1565b955060408801359450606088013593506080880135620026f08162002673565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260408201527f6d6974206f776e6572206d757374206265207468652073656e64657200000000606082015260800190565b60208082526033908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205370656040820152726e646572206d7573742062652027746869732760681b606082015260800190565b8015158114620023d757600080fd5b600080600080600080600080610100898b0312156200302f57600080fd5b88356200303c81620023c1565b975060208901356200304e81620023c1565b9650604089013595506060890135945060808901356200306e8162003002565b935060a0890135620030808162002673565b979a969950949793969295929450505060c08201359160e0013590565b600181815b80851115620030de578160001904821115620030c257620030c262002cc8565b80851615620030d057918102915b93841c9390800290620030a2565b509250929050565b600082620030f75750600162000a53565b81620031065750600062000a53565b81600181146200311f57600281146200312a576200314a565b600191505062000a53565b60ff8411156200313e576200313e62002cc8565b50506001821b62000a53565b5060208310610133831016604e8410600b84101617156200316f575081810a62000a53565b6200317b83836200309d565b806000190482111562003192576200319262002cc8565b029392505050565b6000620025368383620030e6565b600082821015620031bd57620031bd62002cc8565b500390565b60008219821115620031d857620031d862002cc8565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200320657600080fd5b5051919050565b6000602082840312156200322057600080fd5b8151620025368162003002565b60208152600062002536602083018462002b3d56fe60c06040523480156200001157600080fd5b5060405162001558380380620015588339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109e620004ba60003960006104690152600081816102f90152610433015261109e6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866106638361104f565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161106157611061610fd1565b506001019056fea26469706673582212205af0e6dd4760d4ae367515578b46c4d5988b10ae47473e817626188baa0c03a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212209b08895b05feaa5c2c0501728e94663087750f2e080984b02bdce01c7636f75864736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506147f0806100206000396000f3fe608060405260043610620001675760003560e01c80637b6323c111620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b80637b6323c1146200037057806381b1c17414620003955780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b806334ac9cf2116200011e57806334ac9cf214620002a25780633ae0504714620002c45780633da8168214620002dc5780633e1970431462000301578063463855491462000326578063647c576c146200034b57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d3660046200244d565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009cd565b348015620001db57600080fd5b50620001f3620001ed366004620024da565b62000a06565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002516565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b50602754620001f3906001600160a01b031681565b348015620002d157600080fd5b506200022462000a59565b348015620002e957600080fd5b50620001a1620002fb36600462002605565b62000b4c565b3480156200030e57600080fd5b50620002246200032036600462002683565b62000c4e565b3480156200033357600080fd5b50620001836200034536600462002794565b62000cdb565b3480156200035857600080fd5b50620001836200036a3660046200287b565b62000e81565b3480156200037d57600080fd5b50620001836200038f36600462002794565b62000fe0565b348015620003a257600080fd5b50620001f3620003b4366004620028cb565b6024602052600090815260409020546001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028cb565b62001469565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d366004620028e5565b620014ae565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b036600462002999565b620015c5565b348015620004c357600080fd5b506200018362001771565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028cb565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a01565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044657374696e6174696f6e2063616e6e6f7420626520697473656c66000000606482015260840162000553565b60008060606001600160a01b03891662000687578534146200067d5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a908201527f20416d6f756e7420646f6573206e6f74206d61746368206d6573736167652e76606482015263616c756560e01b608482015260a40162000553565b60009150620008e7565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074457604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac90604401600060405180830381600087803b1580156200071757600080fd5b505af11580156200072c573d6000803e3d6000fd5b505050508060200151935080600001519250620008e5565b84156200075957620007598a888888620017a8565b620007706001600160a01b038b1633308a62001bd0565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f1919081019062002ae4565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000830573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085a919081019062002ae4565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000899573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008bf919062002b1d565b604051602001620008d39392919062002b6b565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092998979695949392919062002ba8565b60405180910390a1620009546200094e600084868c8c8c888051906020012062000c4e565b62001c3d565b6026546001600160a01b03166333d6247d6200096f62000a59565b6040518263ffffffff1660e01b81526004016200098e91815260200190565b600060405180830381600087803b158015620009a957600080fd5b505af1158015620009be573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009fa5760405162461bcd60e51b8152600401620005539062002c15565b62000a0462001d8e565b565b600060246000848460405160200162000a2192919062002c72565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b43578260011660010362000ac4576001816020811062000a905762000a9062002c9c565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af1565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000afe60028462002cde565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3a9062002cf5565b91505062000a64565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c3f578160011660010362000bc95786818151811062000b875762000b8762002c9c565b60200260200101518360405160200162000bab929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c1b565b8287828151811062000bdf5762000bdf62002c9c565b602002602001015160405160200162000c02929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2860028362002cde565b91508062000c368162002cf5565b91505062000b5c565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d015760405162461bcd60e51b8152600401620005539062002a01565b62000d178a8a8a8a8a8a8a8a8a8a600162001dec565b62000d288963ffffffff166200207d565b6000836001600160a01b03168387898560405160240162000d4c9392919062002d11565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d83919062002d4c565b60006040518083038185875af1925050503d806000811462000dc2576040519150601f19603f3d011682016040523d82523d6000602084013e62000dc7565b606091505b505090508062000e335760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e8813595cdcd859d94819985a5b195960821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e6c95949392919062002d6a565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea25750600054600160ff909116105b8062000ebe5750303b15801562000ebe575060005460ff166001145b62000f235760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f47576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fda576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff1615620010065760405162461bcd60e51b8152600401620005539062002a01565b6200101c8a8a8a8a8a8a8a8a8a8a600062001dec565b6200102d8963ffffffff166200207d565b6001600160a01b0385166200112457604080516000808252602082019092526001600160a01b03851690849060405162001068919062002d4c565b60006040518083038185875af1925050503d8060008114620010a7576040519150601f19603f3d011682016040523d82523d6000602084013e620010ac565b606091505b50509050806200111d5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a20604482015274115d1a195c881d1c985b9cd9995c8819985a5b1959605a1b606482015260840162000553565b506200141c565b60225463ffffffff6101009091048116908716036200115957620011536001600160a01b0386168484620020bf565b6200141c565b600086866040516020016200117092919062002c72565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013b457600080600085806020019051810190620011c2919062002da1565b925092509250600085848484604051620011dc90620023b3565b620011ea9392919062002b6b565b8190604051809103906000f59050801580156200120b573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f1990604401600060405180830381600087803b1580156200125b57600080fd5b505af115801562001270573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013a29392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001419565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f1990604401600060405180830381600087803b158015620013ff57600080fd5b505af115801562001414573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200145595949392919062002d6a565b60405180910390a150505050505050505050565b6000806200147a6101008462002cde565b905060006200148c6101008562002e17565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014c692919062002c72565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014f990620023b3565b601f1982820381018352601f90910116604081905262001526908d908d908d908d908d9060200162002e57565b60408051601f198184030181529082905262001546929160200162002e98565b604051602081830303815290604052805190602001206040516020016200159f94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015eb5760405162461bcd60e51b8152600401620005539062002a01565b60225463ffffffff610100909104811690841603620016735760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044657374696e6174696f6e2063616e6e6f7420626520697473656c6600606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016c798979695949392919062002ba8565b60405180910390a1620016fe6200094e6001602260019054906101000a900463ffffffff1633878734888051906020012062000c4e565b6026546001600160a01b03166333d6247d6200171962000a59565b6040518263ffffffff1660e01b81526004016200173891815260200190565b600060405180830381600087803b1580156200175357600080fd5b505af115801562001768573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b031633146200179e5760405162461bcd60e51b8152600401620005539062002c15565b62000a04620020f1565b6000620017eb83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021a092505050565b9050632afa533160e01b6001600160e01b0319821601620019e45760008080808080806200181d896004818d62002ecb565b8101906200182c919062002ef7565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200186e5760405162461bcd60e51b8152600401620005539062002f52565b6001600160a01b0386163014620018995760405162461bcd60e51b8152600401620005539062002faf565b8a8514620019105760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260448201527f6d697420616d6f756e7420646f6573206e6f74206d6174636800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162001990919062002d4c565b6000604051808303816000865af19150503d8060008114620019cf576040519150601f19603f3d011682016040523d82523d6000602084013e620019d4565b606091505b5050505050505050505062001bc9565b6001600160e01b031981166323f2ebc360e21b1462001a5a5760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e6f7460448201526a081d985b1a590818d85b1b60aa1b606482015260840162000553565b60008080808080808062001a728a6004818e62002ecb565b81019062001a81919062003011565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001ac55760405162461bcd60e51b8152600401620005539062002f52565b6001600160a01b038716301462001af05760405162461bcd60e51b8152600401620005539062002faf565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001b79919062002d4c565b6000604051808303816000865af19150503d806000811462001bb8576040519150601f19603f3d011682016040523d82523d6000602084013e62001bbd565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fda9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021a7565b80600162001c4e602060026200319a565b62001c5a9190620031a8565b6021541062001cbf5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d65726b6c65604482015269081d1c995948199d5b1b60b21b606482015260840162000553565b60016021600082825462001cd49190620031c2565b909155505060215460005b602081101562001d7e578160011660010362001d1457826001826020811062001d0c5762001d0c62002c9c565b015550505050565b6001816020811062001d2a5762001d2a62002c9c565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d67919062002cde565b91508062001d758162002cf5565b91505062001cdf565b5062001d89620031dd565b505050565b60225460ff161562001db45760405162461bcd60e51b8152600401620005539062002a01565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001dfd8a63ffffffff1662001469565b1562001e545760405162461bcd60e51b815260206004820152603060248201526000805160206200479b83398151915260448201526f08105b1c9958591e4818db185a5b595960821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ec8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001eee9190620031f3565b90508060000362001f575760405162461bcd60e51b815260206004820152603760248201526000805160206200479b83398151915260448201527f20476c6f62616c45786974526f6f7420696e76616c6964000000000000000000606482015260840162000553565b60225463ffffffff878116610100909204161462001fd95760405162461bcd60e51b815260206004820152604360248201526000805160206200479b83398151915260448201527f2044657374696e6174696f6e206e6574776f726b20646f6573206e6f74206d616064820152620e8c6d60eb1b608482015260a40162000553565b602254600090610100900463ffffffff1662001ff757508862001ffa565b50895b6200202562002016848b8b8b8b8b8b8051906020012062000c4e565b8e8e63ffffffff168462000b4c565b620009be5760405162461bcd60e51b815260206004820152603260248201526000805160206200479b8339815191526044820152711024b73b30b634b21039b6ba10383937b7b360711b606482015260840162000553565b60006200208d6101008362002cde565b905060006200209f6101008462002e17565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001d8990849063a9059cbb60e01b9060640162001c05565b60225460ff166200216b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b6000620021fe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022809092919063ffffffff16565b80519091501562001d8957808060200190518101906200221f91906200320d565b62001d895760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c46848460008585600080866001600160a01b03168587604051620022aa919062002d4c565b60006040518083038185875af1925050503d8060008114620022e9576040519150601f19603f3d011682016040523d82523d6000602084013e620022ee565b606091505b509150915062002301878383876200230c565b979650505050505050565b606083156200238057825160000362002378576001600160a01b0385163b620023785760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c46565b62000c468383815115620023975781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200322d565b611558806200324383390190565b6001600160a01b0381168114620023d757600080fd5b50565b8035620023e781620023c1565b919050565b803563ffffffff81168114620023e757600080fd5b60008083601f8401126200241457600080fd5b50813567ffffffffffffffff8111156200242d57600080fd5b6020830191508360208285010111156200244657600080fd5b9250929050565b60008060008060008060a087890312156200246757600080fd5b86356200247481620023c1565b95506200248460208801620023ec565b945060408701356200249681620023c1565b935060608701359250608087013567ffffffffffffffff811115620024ba57600080fd5b620024c889828a0162002401565b979a9699509497509295939492505050565b60008060408385031215620024ee57600080fd5b620024f983620023ec565b915060208301356200250b81620023c1565b809150509250929050565b6000602082840312156200252957600080fd5b81356200253681620023c1565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200257f576200257f6200253d565b604052919050565b600082601f8301126200259957600080fd5b8135602067ffffffffffffffff821115620025b857620025b86200253d565b8160051b620025c982820162002553565b9283528481018201928281019087851115620025e457600080fd5b83870192505b848310156200230157823582529183019190830190620025ea565b600080600080608085870312156200261c57600080fd5b84359350602085013567ffffffffffffffff808211156200263c57600080fd5b6200264a8883890162002587565b94506040870135915080821682146200266257600080fd5b509396929550929360600135925050565b60ff81168114620023d757600080fd5b600080600080600080600060e0888a0312156200269f57600080fd5b8735620026ac8162002673565b9650620026bc60208901620023ec565b95506040880135620026ce81620023c1565b9450620026de60608901620023ec565b93506080880135620026f081620023c1565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200272a576200272a6200253d565b50601f01601f191660200190565b600082601f8301126200274a57600080fd5b8135620027616200275b826200270d565b62002553565b8181528460208386010111156200277757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027b557600080fd5b8a3567ffffffffffffffff80821115620027ce57600080fd5b620027dc8e838f0162002587565b9b50620027ec60208e01620023ec565b9a5060408d0135995060608d013598506200280a60808e01620023ec565b97506200281a60a08e01620023da565b96506200282a60c08e01620023ec565b95506200283a60e08e01620023da565b94506101008d013593506101208d01359150808211156200285a57600080fd5b50620028698d828e0162002738565b9150509295989b9194979a5092959850565b6000806000606084860312156200289157600080fd5b6200289c84620023ec565b92506020840135620028ae81620023c1565b91506040840135620028c081620023c1565b809150509250925092565b600060208284031215620028de57600080fd5b5035919050565b600080600080600080600060a0888a0312156200290157600080fd5b6200290c88620023ec565b965060208801356200291e81620023c1565b9550604088013567ffffffffffffffff808211156200293c57600080fd5b6200294a8b838c0162002401565b909750955060608a01359150808211156200296457600080fd5b50620029738a828b0162002401565b9094509250506080880135620029898162002673565b8091505092959891949750929550565b600080600060608486031215620029af57600080fd5b620029ba84620023ec565b92506020840135620029cc81620023c1565b9150604084013567ffffffffffffffff811115620029e957600080fd5b620029f78682870162002738565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002a8657818101518382015260200162002a6c565b8381111562000fda5750506000910152565b600082601f83011262002aaa57600080fd5b815162002abb6200275b826200270d565b81815284602083860101111562002ad157600080fd5b62000c4682602083016020870162002a69565b60006020828403121562002af757600080fd5b815167ffffffffffffffff81111562002b0f57600080fd5b62000c468482850162002a98565b60006020828403121562002b3057600080fd5b8151620025368162002673565b6000815180845262002b5781602086016020860162002a69565b601f01601f19169290920160200192915050565b60608152600062002b80606083018662002b3d565b828103602084015262002b94818662002b3d565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002bfc8483018762002b3d565b925080851660e085015250509998505050505050505050565b6020808252603a908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e5a6b45564d20636f6e7472616374000000000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002cf05762002cf062002cb2565b500490565b60006001820162002d0a5762002d0a62002cc8565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d439083018462002b3d565b95945050505050565b6000825162002d6081846020870162002a69565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002db757600080fd5b835167ffffffffffffffff8082111562002dd057600080fd5b62002dde8783880162002a98565b9450602086015191508082111562002df557600080fd5b5062002e048682870162002a98565b9250506040840151620028c08162002673565b60008262002e295762002e2962002cb2565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e6d60608301878962002e2e565b828103602084015262002e8281868862002e2e565b91505060ff831660408301529695505050505050565b6000835162002eac81846020880162002a69565b83519083019062002ec281836020880162002a69565b01949350505050565b6000808585111562002edc57600080fd5b8386111562002eea57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f1357600080fd5b873562002f2081620023c1565b9650602088013562002f3281620023c1565b955060408801359450606088013593506080880135620026f08162002673565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260408201527f6d6974206f776e6572206d757374206265207468652073656e64657200000000606082015260800190565b60208082526033908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205370656040820152726e646572206d7573742062652027746869732760681b606082015260800190565b8015158114620023d757600080fd5b600080600080600080600080610100898b0312156200302f57600080fd5b88356200303c81620023c1565b975060208901356200304e81620023c1565b9650604089013595506060890135945060808901356200306e8162003002565b935060a0890135620030808162002673565b979a969950949793969295929450505060c08201359160e0013590565b600181815b80851115620030de578160001904821115620030c257620030c262002cc8565b80851615620030d057918102915b93841c9390800290620030a2565b509250929050565b600082620030f75750600162000a53565b81620031065750600062000a53565b81600181146200311f57600281146200312a576200314a565b600191505062000a53565b60ff8411156200313e576200313e62002cc8565b50506001821b62000a53565b5060208310610133831016604e8410600b84101617156200316f575081810a62000a53565b6200317b83836200309d565b806000190482111562003192576200319262002cc8565b029392505050565b6000620025368383620030e6565b600082821015620031bd57620031bd62002cc8565b500390565b60008219821115620031d857620031d862002cc8565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200320657600080fd5b5051919050565b6000602082840312156200322057600080fd5b8151620025368162003002565b60208152600062002536602083018462002b3d56fe60c06040523480156200001157600080fd5b5060405162001558380380620015588339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109e620004ba60003960006104690152600081816102f90152610433015261109e6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866106638361104f565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161106157611061610fd1565b506001019056fea26469706673582212205af0e6dd4760d4ae367515578b46c4d5988b10ae47473e817626188baa0c03a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220d45a8ebcef9fc50cf59227d05e3d4a6aa8384293f92bcc21bc9ac4198225157364736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001675760003560e01c80637b6323c111620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b80637b6323c1146200037057806381b1c17414620003955780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b806334ac9cf2116200011e57806334ac9cf214620002a25780633ae0504714620002c45780633da8168214620002dc5780633e1970431462000301578063463855491462000326578063647c576c146200034b57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d3660046200244d565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009cd565b348015620001db57600080fd5b50620001f3620001ed366004620024da565b62000a06565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002516565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b50602754620001f3906001600160a01b031681565b348015620002d157600080fd5b506200022462000a59565b348015620002e957600080fd5b50620001a1620002fb36600462002605565b62000b4c565b3480156200030e57600080fd5b50620002246200032036600462002683565b62000c4e565b3480156200033357600080fd5b50620001836200034536600462002794565b62000cdb565b3480156200035857600080fd5b50620001836200036a3660046200287b565b62000e81565b3480156200037d57600080fd5b50620001836200038f36600462002794565b62000fe0565b348015620003a257600080fd5b50620001f3620003b4366004620028cb565b6024602052600090815260409020546001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028cb565b62001469565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d366004620028e5565b620014ae565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b036600462002999565b620015c5565b348015620004c357600080fd5b506200018362001771565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028cb565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a01565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044657374696e6174696f6e2063616e6e6f7420626520697473656c66000000606482015260840162000553565b60008060606001600160a01b03891662000687578534146200067d5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a908201527f20416d6f756e7420646f6573206e6f74206d61746368206d6573736167652e76606482015263616c756560e01b608482015260a40162000553565b60009150620008e7565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074457604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac90604401600060405180830381600087803b1580156200071757600080fd5b505af11580156200072c573d6000803e3d6000fd5b505050508060200151935080600001519250620008e5565b84156200075957620007598a888888620017a8565b620007706001600160a01b038b1633308a62001bd0565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f1919081019062002ae4565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000830573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085a919081019062002ae4565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000899573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008bf919062002b1d565b604051602001620008d39392919062002b6b565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092998979695949392919062002ba8565b60405180910390a1620009546200094e600084868c8c8c888051906020012062000c4e565b62001c3d565b6026546001600160a01b03166333d6247d6200096f62000a59565b6040518263ffffffff1660e01b81526004016200098e91815260200190565b600060405180830381600087803b158015620009a957600080fd5b505af1158015620009be573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009fa5760405162461bcd60e51b8152600401620005539062002c15565b62000a0462001d8e565b565b600060246000848460405160200162000a2192919062002c72565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b43578260011660010362000ac4576001816020811062000a905762000a9062002c9c565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af1565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000afe60028462002cde565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3a9062002cf5565b91505062000a64565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c3f578160011660010362000bc95786818151811062000b875762000b8762002c9c565b60200260200101518360405160200162000bab929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c1b565b8287828151811062000bdf5762000bdf62002c9c565b602002602001015160405160200162000c02929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2860028362002cde565b91508062000c368162002cf5565b91505062000b5c565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d015760405162461bcd60e51b8152600401620005539062002a01565b62000d178a8a8a8a8a8a8a8a8a8a600162001dec565b62000d288963ffffffff166200207d565b6000836001600160a01b03168387898560405160240162000d4c9392919062002d11565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d83919062002d4c565b60006040518083038185875af1925050503d806000811462000dc2576040519150601f19603f3d011682016040523d82523d6000602084013e62000dc7565b606091505b505090508062000e335760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e8813595cdcd859d94819985a5b195960821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e6c95949392919062002d6a565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea25750600054600160ff909116105b8062000ebe5750303b15801562000ebe575060005460ff166001145b62000f235760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f47576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fda576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff1615620010065760405162461bcd60e51b8152600401620005539062002a01565b6200101c8a8a8a8a8a8a8a8a8a8a600062001dec565b6200102d8963ffffffff166200207d565b6001600160a01b0385166200112457604080516000808252602082019092526001600160a01b03851690849060405162001068919062002d4c565b60006040518083038185875af1925050503d8060008114620010a7576040519150601f19603f3d011682016040523d82523d6000602084013e620010ac565b606091505b50509050806200111d5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a20604482015274115d1a195c881d1c985b9cd9995c8819985a5b1959605a1b606482015260840162000553565b506200141c565b60225463ffffffff6101009091048116908716036200115957620011536001600160a01b0386168484620020bf565b6200141c565b600086866040516020016200117092919062002c72565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013b457600080600085806020019051810190620011c2919062002da1565b925092509250600085848484604051620011dc90620023b3565b620011ea9392919062002b6b565b8190604051809103906000f59050801580156200120b573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f1990604401600060405180830381600087803b1580156200125b57600080fd5b505af115801562001270573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013a29392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001419565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f1990604401600060405180830381600087803b158015620013ff57600080fd5b505af115801562001414573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200145595949392919062002d6a565b60405180910390a150505050505050505050565b6000806200147a6101008462002cde565b905060006200148c6101008562002e17565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014c692919062002c72565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014f990620023b3565b601f1982820381018352601f90910116604081905262001526908d908d908d908d908d9060200162002e57565b60408051601f198184030181529082905262001546929160200162002e98565b604051602081830303815290604052805190602001206040516020016200159f94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015eb5760405162461bcd60e51b8152600401620005539062002a01565b60225463ffffffff610100909104811690841603620016735760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044657374696e6174696f6e2063616e6e6f7420626520697473656c6600606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016c798979695949392919062002ba8565b60405180910390a1620016fe6200094e6001602260019054906101000a900463ffffffff1633878734888051906020012062000c4e565b6026546001600160a01b03166333d6247d6200171962000a59565b6040518263ffffffff1660e01b81526004016200173891815260200190565b600060405180830381600087803b1580156200175357600080fd5b505af115801562001768573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b031633146200179e5760405162461bcd60e51b8152600401620005539062002c15565b62000a04620020f1565b6000620017eb83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021a092505050565b9050632afa533160e01b6001600160e01b0319821601620019e45760008080808080806200181d896004818d62002ecb565b8101906200182c919062002ef7565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200186e5760405162461bcd60e51b8152600401620005539062002f52565b6001600160a01b0386163014620018995760405162461bcd60e51b8152600401620005539062002faf565b8a8514620019105760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260448201527f6d697420616d6f756e7420646f6573206e6f74206d6174636800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162001990919062002d4c565b6000604051808303816000865af19150503d8060008114620019cf576040519150601f19603f3d011682016040523d82523d6000602084013e620019d4565b606091505b5050505050505050505062001bc9565b6001600160e01b031981166323f2ebc360e21b1462001a5a5760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e6f7460448201526a081d985b1a590818d85b1b60aa1b606482015260840162000553565b60008080808080808062001a728a6004818e62002ecb565b81019062001a81919062003011565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001ac55760405162461bcd60e51b8152600401620005539062002f52565b6001600160a01b038716301462001af05760405162461bcd60e51b8152600401620005539062002faf565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001b79919062002d4c565b6000604051808303816000865af19150503d806000811462001bb8576040519150601f19603f3d011682016040523d82523d6000602084013e62001bbd565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fda9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021a7565b80600162001c4e602060026200319a565b62001c5a9190620031a8565b6021541062001cbf5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d65726b6c65604482015269081d1c995948199d5b1b60b21b606482015260840162000553565b60016021600082825462001cd49190620031c2565b909155505060215460005b602081101562001d7e578160011660010362001d1457826001826020811062001d0c5762001d0c62002c9c565b015550505050565b6001816020811062001d2a5762001d2a62002c9c565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d67919062002cde565b91508062001d758162002cf5565b91505062001cdf565b5062001d89620031dd565b505050565b60225460ff161562001db45760405162461bcd60e51b8152600401620005539062002a01565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001dfd8a63ffffffff1662001469565b1562001e545760405162461bcd60e51b815260206004820152603060248201526000805160206200479b83398151915260448201526f08105b1c9958591e4818db185a5b595960821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ec8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001eee9190620031f3565b90508060000362001f575760405162461bcd60e51b815260206004820152603760248201526000805160206200479b83398151915260448201527f20476c6f62616c45786974526f6f7420696e76616c6964000000000000000000606482015260840162000553565b60225463ffffffff878116610100909204161462001fd95760405162461bcd60e51b815260206004820152604360248201526000805160206200479b83398151915260448201527f2044657374696e6174696f6e206e6574776f726b20646f6573206e6f74206d616064820152620e8c6d60eb1b608482015260a40162000553565b602254600090610100900463ffffffff1662001ff757508862001ffa565b50895b6200202562002016848b8b8b8b8b8b8051906020012062000c4e565b8e8e63ffffffff168462000b4c565b620009be5760405162461bcd60e51b815260206004820152603260248201526000805160206200479b8339815191526044820152711024b73b30b634b21039b6ba10383937b7b360711b606482015260840162000553565b60006200208d6101008362002cde565b905060006200209f6101008462002e17565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001d8990849063a9059cbb60e01b9060640162001c05565b60225460ff166200216b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b6000620021fe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022809092919063ffffffff16565b80519091501562001d8957808060200190518101906200221f91906200320d565b62001d895760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c46848460008585600080866001600160a01b03168587604051620022aa919062002d4c565b60006040518083038185875af1925050503d8060008114620022e9576040519150601f19603f3d011682016040523d82523d6000602084013e620022ee565b606091505b509150915062002301878383876200230c565b979650505050505050565b606083156200238057825160000362002378576001600160a01b0385163b620023785760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c46565b62000c468383815115620023975781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200322d565b611558806200324383390190565b6001600160a01b0381168114620023d757600080fd5b50565b8035620023e781620023c1565b919050565b803563ffffffff81168114620023e757600080fd5b60008083601f8401126200241457600080fd5b50813567ffffffffffffffff8111156200242d57600080fd5b6020830191508360208285010111156200244657600080fd5b9250929050565b60008060008060008060a087890312156200246757600080fd5b86356200247481620023c1565b95506200248460208801620023ec565b945060408701356200249681620023c1565b935060608701359250608087013567ffffffffffffffff811115620024ba57600080fd5b620024c889828a0162002401565b979a9699509497509295939492505050565b60008060408385031215620024ee57600080fd5b620024f983620023ec565b915060208301356200250b81620023c1565b809150509250929050565b6000602082840312156200252957600080fd5b81356200253681620023c1565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200257f576200257f6200253d565b604052919050565b600082601f8301126200259957600080fd5b8135602067ffffffffffffffff821115620025b857620025b86200253d565b8160051b620025c982820162002553565b9283528481018201928281019087851115620025e457600080fd5b83870192505b848310156200230157823582529183019190830190620025ea565b600080600080608085870312156200261c57600080fd5b84359350602085013567ffffffffffffffff808211156200263c57600080fd5b6200264a8883890162002587565b94506040870135915080821682146200266257600080fd5b509396929550929360600135925050565b60ff81168114620023d757600080fd5b600080600080600080600060e0888a0312156200269f57600080fd5b8735620026ac8162002673565b9650620026bc60208901620023ec565b95506040880135620026ce81620023c1565b9450620026de60608901620023ec565b93506080880135620026f081620023c1565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200272a576200272a6200253d565b50601f01601f191660200190565b600082601f8301126200274a57600080fd5b8135620027616200275b826200270d565b62002553565b8181528460208386010111156200277757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027b557600080fd5b8a3567ffffffffffffffff80821115620027ce57600080fd5b620027dc8e838f0162002587565b9b50620027ec60208e01620023ec565b9a5060408d0135995060608d013598506200280a60808e01620023ec565b97506200281a60a08e01620023da565b96506200282a60c08e01620023ec565b95506200283a60e08e01620023da565b94506101008d013593506101208d01359150808211156200285a57600080fd5b50620028698d828e0162002738565b9150509295989b9194979a5092959850565b6000806000606084860312156200289157600080fd5b6200289c84620023ec565b92506020840135620028ae81620023c1565b91506040840135620028c081620023c1565b809150509250925092565b600060208284031215620028de57600080fd5b5035919050565b600080600080600080600060a0888a0312156200290157600080fd5b6200290c88620023ec565b965060208801356200291e81620023c1565b9550604088013567ffffffffffffffff808211156200293c57600080fd5b6200294a8b838c0162002401565b909750955060608a01359150808211156200296457600080fd5b50620029738a828b0162002401565b9094509250506080880135620029898162002673565b8091505092959891949750929550565b600080600060608486031215620029af57600080fd5b620029ba84620023ec565b92506020840135620029cc81620023c1565b9150604084013567ffffffffffffffff811115620029e957600080fd5b620029f78682870162002738565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002a8657818101518382015260200162002a6c565b8381111562000fda5750506000910152565b600082601f83011262002aaa57600080fd5b815162002abb6200275b826200270d565b81815284602083860101111562002ad157600080fd5b62000c4682602083016020870162002a69565b60006020828403121562002af757600080fd5b815167ffffffffffffffff81111562002b0f57600080fd5b62000c468482850162002a98565b60006020828403121562002b3057600080fd5b8151620025368162002673565b6000815180845262002b5781602086016020860162002a69565b601f01601f19169290920160200192915050565b60608152600062002b80606083018662002b3d565b828103602084015262002b94818662002b3d565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002bfc8483018762002b3d565b925080851660e085015250509998505050505050505050565b6020808252603a908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e5a6b45564d20636f6e7472616374000000000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002cf05762002cf062002cb2565b500490565b60006001820162002d0a5762002d0a62002cc8565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d439083018462002b3d565b95945050505050565b6000825162002d6081846020870162002a69565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002db757600080fd5b835167ffffffffffffffff8082111562002dd057600080fd5b62002dde8783880162002a98565b9450602086015191508082111562002df557600080fd5b5062002e048682870162002a98565b9250506040840151620028c08162002673565b60008262002e295762002e2962002cb2565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e6d60608301878962002e2e565b828103602084015262002e8281868862002e2e565b91505060ff831660408301529695505050505050565b6000835162002eac81846020880162002a69565b83519083019062002ec281836020880162002a69565b01949350505050565b6000808585111562002edc57600080fd5b8386111562002eea57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f1357600080fd5b873562002f2081620023c1565b9650602088013562002f3281620023c1565b955060408801359450606088013593506080880135620026f08162002673565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260408201527f6d6974206f776e6572206d757374206265207468652073656e64657200000000606082015260800190565b60208082526033908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205370656040820152726e646572206d7573742062652027746869732760681b606082015260800190565b8015158114620023d757600080fd5b600080600080600080600080610100898b0312156200302f57600080fd5b88356200303c81620023c1565b975060208901356200304e81620023c1565b9650604089013595506060890135945060808901356200306e8162003002565b935060a0890135620030808162002673565b979a969950949793969295929450505060c08201359160e0013590565b600181815b80851115620030de578160001904821115620030c257620030c262002cc8565b80851615620030d057918102915b93841c9390800290620030a2565b509250929050565b600082620030f75750600162000a53565b81620031065750600062000a53565b81600181146200311f57600281146200312a576200314a565b600191505062000a53565b60ff8411156200313e576200313e62002cc8565b50506001821b62000a53565b5060208310610133831016604e8410600b84101617156200316f575081810a62000a53565b6200317b83836200309d565b806000190482111562003192576200319262002cc8565b029392505050565b6000620025368383620030e6565b600082821015620031bd57620031bd62002cc8565b500390565b60008219821115620031d857620031d862002cc8565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200320657600080fd5b5051919050565b6000602082840312156200322057600080fd5b8151620025368162003002565b60208152600062002536602083018462002b3d56fe60c06040523480156200001157600080fd5b5060405162001558380380620015588339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109e620004ba60003960006104690152600081816102f90152610433015261109e6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866106638361104f565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161106157611061610fd1565b506001019056fea26469706673582212205af0e6dd4760d4ae367515578b46c4d5988b10ae47473e817626188baa0c03a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220d45a8ebcef9fc50cf59227d05e3d4a6aa8384293f92bcc21bc9ac4198225157364736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZkEVMBridgeMock.json b/compiled-contracts/PolygonZkEVMBridgeMock.json index 3bb49ab6b..f4dc77ac2 100644 --- a/compiled-contracts/PolygonZkEVMBridgeMock.json +++ b/compiled-contracts/PolygonZkEVMBridgeMock.json @@ -790,8 +790,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50614bfa806100206000396000f3fe608060405260043610620001f35760003560e01c80637b6323c1116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b80637b6323c1146200045e57806381b1c17414620004835780638da5cb5b14620004bd57600080fd5b8063318aee3d116200018d5780633e19704311620001585780633e19704314620003d75780634638554914620003fc578063647c576c1462000421578063715018a6146200044657600080fd5b8063318aee3d146200030957806334ac9cf214620003785780633ae05047146200039a5780633da8168214620003b257600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f6200020936600462002839565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f6200071e565b3480156200026757600080fd5b506200027f62000279366004620028c6565b62000757565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002902565b620007aa565b348015620002ca57600080fd5b506200020f620002dc3660046200291c565b620007b9565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002941565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b506027546200027f906001600160a01b031681565b348015620003a757600080fd5b50620002fa620007e5565b348015620003bf57600080fd5b506200022d620003d136600462002a29565b620008d8565b348015620003e457600080fd5b50620002fa620003f636600462002aa7565b620009da565b3480156200040957600080fd5b506200020f6200041b36600462002bb8565b62000a67565b3480156200042e57600080fd5b506200020f6200044036600462002c9f565b62000c0d565b3480156200045357600080fd5b506200020f62000d82565b3480156200046b57600080fd5b506200020f6200047d36600462002bb8565b62000d98565b3480156200049057600080fd5b506200027f620004a236600462002902565b6024602052600090815260409020546001600160a01b031681565b348015620004ca57600080fd5b50605a546001600160a01b03166200027f565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002902565b62001221565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002cef565b62001266565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002da3565b6200137d565b348015620005e957600080fd5b506200020f6200152f565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002902565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002941565b62001566565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007065760405162461bcd60e51b815260206004820152604760248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b62000716868686868686620015e5565b505050505050565b6027546001600160a01b031633146200074b5760405162461bcd60e51b8152600401620006fd9062002e0b565b6200075562001a76565b565b60006024600084846040516020016200077292919062002e68565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b462001ad4565b608c55565b620007c362001ad4565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008cf57826001166001036200085057600181602081106200081c576200081c62002e92565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200087d565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088a60028462002ed4565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c69062002eeb565b915050620007f0565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009cb5781600116600103620009555786818151811062000913576200091362002e92565b60200260200101518360405160200162000937929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009a7565b828782815181106200096b576200096b62002e92565b60200260200101516040516020016200098e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b460028362002ed4565b915080620009c28162002eeb565b915050620008e8565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a8d5760405162461bcd60e51b8152600401620006fd9062002f07565b62000aa38a8a8a8a8a8a8a8a8a8a600162001b30565b62000ab48963ffffffff1662001dc1565b6000836001600160a01b03168387898560405160240162000ad89392919062002fcc565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b0f919062003007565b60006040518083038185875af1925050503d806000811462000b4e576040519150601f19603f3d011682016040523d82523d6000602084013e62000b53565b606091505b505090508062000bbf5760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e8813595cdcd859d94819985a5b195960821b6064820152608401620006fd565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bf895949392919062003025565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c2e5750600054600160ff909116105b8062000c4a5750303b15801562000c4a575060005460ff166001145b62000caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006fd565b6000805460ff19166001179055801562000cd3576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d3562001e03565b801562000d7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8c62001ad4565b62000755600062001e76565b60225460ff161562000dbe5760405162461bcd60e51b8152600401620006fd9062002f07565b62000dd48a8a8a8a8a8a8a8a8a8a600062001b30565b62000de58963ffffffff1662001dc1565b6001600160a01b03851662000edc57604080516000808252602082019092526001600160a01b03851690849060405162000e20919062003007565b60006040518083038185875af1925050503d806000811462000e5f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e64565b606091505b505090508062000ed55760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a20604482015274115d1a195c881d1c985b9cd9995c8819985a5b1959605a1b6064820152608401620006fd565b50620011d4565b60225463ffffffff61010090910481169087160362000f115762000f0b6001600160a01b038616848462001ec8565b620011d4565b6000868660405160200162000f2892919062002e68565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200116c5760008060008580602001905181019062000f7a9190620030a8565b92509250925060008584848460405162000f9490620027a2565b62000fa2939291906200311e565b8190604051809103906000f590508015801562000fc3573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f1990604401600060405180830381600087803b1580156200101357600080fd5b505af115801562001028573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200115a9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011d1565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f1990604401600060405180830381600087803b158015620011b757600080fd5b505af1158015620011cc573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200120d95949392919062003025565b60405180910390a150505050505050505050565b600080620012326101008462002ed4565b9050600062001244610100856200315b565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200127e92919062002e68565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012b190620027a2565b601f1982820381018352601f909101166040819052620012de908d908d908d908d908d906020016200319b565b60408051601f1981840301815290829052620012fe9291602001620031dc565b604051602081830303815290604052805190602001206040516020016200135794939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013a35760405162461bcd60e51b8152600401620006fd9062002f07565b60225463ffffffff6101009091048116908416036200142b5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044657374696e6174696f6e2063616e6e6f7420626520697473656c66006064820152608401620006fd565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff1633868634876021546040516200147f9897969594939291906200320f565b60405180910390a1620014bc620014b66001602260019054906101000a900463ffffffff16338787348880519060200120620009da565b62001f32565b6026546001600160a01b03166333d6247d620014d7620007e5565b6040518263ffffffff1660e01b8152600401620014f691815260200190565b600060405180830381600087803b1580156200151157600080fd5b505af115801562001526573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b031633146200155c5760405162461bcd60e51b8152600401620006fd9062002e0b565b620007556200207e565b6200157062001ad4565b6001600160a01b038116620015d75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006fd565b620015e28162001e76565b50565b60225460ff16156200160b5760405162461bcd60e51b8152600401620006fd9062002f07565b60225463ffffffff610100909104811690861603620016935760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044657374696e6174696f6e2063616e6e6f7420626520697473656c660000006064820152608401620006fd565b60008060606001600160a01b03891662001736578534146200172c5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a908201527f20616d6f756e7420646f6573206e6f74206d61746368206d6573736167652e76606482015263616c756560e01b608482015260a401620006fd565b6000915062001996565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620017f357604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac90604401600060405180830381600087803b158015620017c657600080fd5b505af1158015620017db573d6000803e3d6000fd5b50505050806020015193508060000151925062001994565b84156200180857620018088a8888886200212d565b6200181f6001600160a01b038b1633308a62002555565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001876573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018a091908101906200327c565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620018df573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200190991908101906200327c565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001948573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200196e9190620032b5565b60405160200162001982939291906200311e565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b87602154604051620019d89897969594939291906200320f565b60405180910390a1620019fd620014b6600084868c8c8c8880519060200120620009da565b6026546001600160a01b03166333d6247d62001a18620007e5565b6040518263ffffffff1660e01b815260040162001a3791815260200190565b600060405180830381600087803b15801562001a5257600080fd5b505af115801562001a67573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001a9c5760405162461bcd60e51b8152600401620006fd9062002f07565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006fd565b62001b418a63ffffffff1662001221565b1562001b985760405162461bcd60e51b8152602060048201526030602482015260008051602062004ba583398151915260448201526f08105b1c9958591e4818db185a5b595960821b6064820152608401620006fd565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001c0c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c329190620032d5565b90508060000362001c9b5760405162461bcd60e51b8152602060048201526037602482015260008051602062004ba583398151915260448201527f20476c6f62616c45786974526f6f7420696e76616c69640000000000000000006064820152608401620006fd565b60225463ffffffff878116610100909204161462001d1d5760405162461bcd60e51b8152602060048201526043602482015260008051602062004ba583398151915260448201527f2044657374696e6174696f6e206e6574776f726b20646f6573206e6f74206d616064820152620e8c6d60eb1b608482015260a401620006fd565b602254600090610100900463ffffffff1662001d3b57508862001d3e565b50895b62001d6962001d5a848b8b8b8b8b8b80519060200120620009da565b8e8e63ffffffff1684620008d8565b62001a675760405162461bcd60e51b8152602060048201526032602482015260008051602062004ba58339815191526044820152711024b73b30b634b21039b6ba10383937b7b360711b6064820152608401620006fd565b600062001dd16101008362002ed4565b9050600062001de3610100846200315b565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001e705760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006fd565b62000755335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001f2d90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526200258f565b505050565b80600162001f4360206002620033ec565b62001f4f9190620033fa565b6021541062001fb45760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d65726b6c65604482015269081d1c995948199d5b1b60b21b6064820152608401620006fd565b60016021600082825462001fc9919062003414565b909155505060215460005b60208110156200207357816001166001036200200957826001826020811062002001576200200162002e92565b015550505050565b600181602081106200201f576200201f62002e92565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200205c919062002ed4565b9150806200206a8162002eeb565b91505062001fd4565b5062001f2d6200342f565b60225460ff16620020f85760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006fd565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200217083838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200266892505050565b9050632afa533160e01b6001600160e01b031982160162002369576000808080808080620021a2896004818d62003445565b810190620021b1919062003471565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620021f35760405162461bcd60e51b8152600401620006fd90620034cc565b6001600160a01b03861630146200221e5760405162461bcd60e51b8152600401620006fd9062003529565b8a8514620022955760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260448201527f6d697420616d6f756e7420646f6573206e6f74206d61746368000000000000006064820152608401620006fd565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162002315919062003007565b6000604051808303816000865af19150503d806000811462002354576040519150601f19603f3d011682016040523d82523d6000602084013e62002359565b606091505b505050505050505050506200254e565b6001600160e01b031981166323f2ebc360e21b14620023df5760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e6f7460448201526a081d985b1a590818d85b1b60aa1b6064820152608401620006fd565b600080808080808080620023f78a6004818e62003445565b8101906200240691906200358b565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200244a5760405162461bcd60e51b8152600401620006fd90620034cc565b6001600160a01b0387163014620024755760405162461bcd60e51b8152600401620006fd9062003529565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f1691620024fe919062003007565b6000604051808303816000865af19150503d80600081146200253d576040519150601f19603f3d011682016040523d82523d6000602084013e62002542565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d7c9085906323b872dd60e01b9060840162001ef5565b6000620025e6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166200266f9092919063ffffffff16565b80519091501562001f2d578080602001905181019062002607919062003617565b62001f2d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006fd565b6020015190565b6060620009d2848460008585600080866001600160a01b0316858760405162002699919062003007565b60006040518083038185875af1925050503d8060008114620026d8576040519150601f19603f3d011682016040523d82523d6000602084013e620026dd565b606091505b5091509150620026f087838387620026fb565b979650505050505050565b606083156200276f57825160000362002767576001600160a01b0385163b620027675760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006fd565b5081620009d2565b620009d28383815115620027865781518083602001fd5b8060405162461bcd60e51b8152600401620006fd919062003637565b611558806200364d83390190565b6001600160a01b0381168114620015e257600080fd5b8035620027d381620027b0565b919050565b803563ffffffff81168114620027d357600080fd5b60008083601f8401126200280057600080fd5b50813567ffffffffffffffff8111156200281957600080fd5b6020830191508360208285010111156200283257600080fd5b9250929050565b60008060008060008060a087890312156200285357600080fd5b86356200286081620027b0565b95506200287060208801620027d8565b945060408701356200288281620027b0565b935060608701359250608087013567ffffffffffffffff811115620028a657600080fd5b620028b489828a01620027ed565b979a9699509497509295939492505050565b60008060408385031215620028da57600080fd5b620028e583620027d8565b91506020830135620028f781620027b0565b809150509250929050565b6000602082840312156200291557600080fd5b5035919050565b6000602082840312156200292f57600080fd5b6200293a82620027d8565b9392505050565b6000602082840312156200295457600080fd5b81356200293a81620027b0565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620029a357620029a362002961565b604052919050565b600082601f830112620029bd57600080fd5b8135602067ffffffffffffffff821115620029dc57620029dc62002961565b8160051b620029ed82820162002977565b928352848101820192828101908785111562002a0857600080fd5b83870192505b84831015620026f05782358252918301919083019062002a0e565b6000806000806080858703121562002a4057600080fd5b84359350602085013567ffffffffffffffff8082111562002a6057600080fd5b62002a6e88838901620029ab565b945060408701359150808216821462002a8657600080fd5b509396929550929360600135925050565b60ff81168114620015e257600080fd5b600080600080600080600060e0888a03121562002ac357600080fd5b873562002ad08162002a97565b965062002ae060208901620027d8565b9550604088013562002af281620027b0565b945062002b0260608901620027d8565b9350608088013562002b1481620027b0565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002b4e5762002b4e62002961565b50601f01601f191660200190565b600082601f83011262002b6e57600080fd5b813562002b8562002b7f8262002b31565b62002977565b81815284602083860101111562002b9b57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002bd957600080fd5b8a3567ffffffffffffffff8082111562002bf257600080fd5b62002c008e838f01620029ab565b9b5062002c1060208e01620027d8565b9a5060408d0135995060608d0135985062002c2e60808e01620027d8565b975062002c3e60a08e01620027c6565b965062002c4e60c08e01620027d8565b955062002c5e60e08e01620027c6565b94506101008d013593506101208d013591508082111562002c7e57600080fd5b5062002c8d8d828e0162002b5c565b9150509295989b9194979a5092959850565b60008060006060848603121562002cb557600080fd5b62002cc084620027d8565b9250602084013562002cd281620027b0565b9150604084013562002ce481620027b0565b809150509250925092565b600080600080600080600060a0888a03121562002d0b57600080fd5b62002d1688620027d8565b9650602088013562002d2881620027b0565b9550604088013567ffffffffffffffff8082111562002d4657600080fd5b62002d548b838c01620027ed565b909750955060608a013591508082111562002d6e57600080fd5b5062002d7d8a828b01620027ed565b909450925050608088013562002d938162002a97565b8091505092959891949750929550565b60008060006060848603121562002db957600080fd5b62002dc484620027d8565b9250602084013562002dd681620027b0565b9150604084013567ffffffffffffffff81111562002df357600080fd5b62002e018682870162002b5c565b9150509250925092565b6020808252603a908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e5a6b45564d20636f6e7472616374000000000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002ee65762002ee662002ea8565b500490565b60006001820162002f005762002f0062002ebe565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002f8c57818101518382015260200162002f72565b8381111562000d7c5750506000910152565b6000815180845262002fb881602086016020860162002f6f565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002ffe9083018462002f9e565b95945050505050565b600082516200301b81846020870162002f6f565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f8301126200306e57600080fd5b81516200307f62002b7f8262002b31565b8181528460208386010111156200309557600080fd5b620009d282602083016020870162002f6f565b600080600060608486031215620030be57600080fd5b835167ffffffffffffffff80821115620030d757600080fd5b620030e5878388016200305c565b94506020860151915080821115620030fc57600080fd5b506200310b868287016200305c565b925050604084015162002ce48162002a97565b60608152600062003133606083018662002f9e565b828103602084015262003147818662002f9e565b91505060ff83166040830152949350505050565b6000826200316d576200316d62002ea8565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b606081526000620031b160608301878962003172565b8281036020840152620031c681868862003172565b91505060ff831660408301529695505050505050565b60008351620031f081846020880162002f6f565b8351908301906200320681836020880162002f6f565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032638483018762002f9e565b925080851660e085015250509998505050505050505050565b6000602082840312156200328f57600080fd5b815167ffffffffffffffff811115620032a757600080fd5b620009d2848285016200305c565b600060208284031215620032c857600080fd5b81516200293a8162002a97565b600060208284031215620032e857600080fd5b5051919050565b600181815b808511156200333057816000190482111562003314576200331462002ebe565b808516156200332257918102915b93841c9390800290620032f4565b509250929050565b6000826200334957506001620007a4565b816200335857506000620007a4565b81600181146200337157600281146200337c576200339c565b6001915050620007a4565b60ff84111562003390576200339062002ebe565b50506001821b620007a4565b5060208310610133831016604e8410600b8410161715620033c1575081810a620007a4565b620033cd8383620032ef565b8060001904821115620033e457620033e462002ebe565b029392505050565b60006200293a838362003338565b6000828210156200340f576200340f62002ebe565b500390565b600082198211156200342a576200342a62002ebe565b500190565b634e487b7160e01b600052600160045260246000fd5b600080858511156200345657600080fd5b838611156200346457600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200348d57600080fd5b87356200349a81620027b0565b96506020880135620034ac81620027b0565b95506040880135945060608801359350608088013562002b148162002a97565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260408201527f6d6974206f776e6572206d757374206265207468652073656e64657200000000606082015260800190565b60208082526033908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205370656040820152726e646572206d7573742062652027746869732760681b606082015260800190565b8015158114620015e257600080fd5b600080600080600080600080610100898b031215620035a957600080fd5b8835620035b681620027b0565b97506020890135620035c881620027b0565b965060408901359550606089013594506080890135620035e8816200357c565b935060a0890135620035fa8162002a97565b979a969950949793969295929450505060c08201359160e0013590565b6000602082840312156200362a57600080fd5b81516200293a816200357c565b6020815260006200293a602083018462002f9e56fe60c06040523480156200001157600080fd5b5060405162001558380380620015588339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109e620004ba60003960006104690152600081816102f90152610433015261109e6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866106638361104f565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161106157611061610fd1565b506001019056fea26469706673582212205af0e6dd4760d4ae367515578b46c4d5988b10ae47473e817626188baa0c03a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212206cce8df71878468ba72b63f3287ba5f1cce872064668f13a7884995ba2e36bd864736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001f35760003560e01c80637b6323c1116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b80637b6323c1146200045e57806381b1c17414620004835780638da5cb5b14620004bd57600080fd5b8063318aee3d116200018d5780633e19704311620001585780633e19704314620003d75780634638554914620003fc578063647c576c1462000421578063715018a6146200044657600080fd5b8063318aee3d146200030957806334ac9cf214620003785780633ae05047146200039a5780633da8168214620003b257600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f6200020936600462002839565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f6200071e565b3480156200026757600080fd5b506200027f62000279366004620028c6565b62000757565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002902565b620007aa565b348015620002ca57600080fd5b506200020f620002dc3660046200291c565b620007b9565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002941565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b506027546200027f906001600160a01b031681565b348015620003a757600080fd5b50620002fa620007e5565b348015620003bf57600080fd5b506200022d620003d136600462002a29565b620008d8565b348015620003e457600080fd5b50620002fa620003f636600462002aa7565b620009da565b3480156200040957600080fd5b506200020f6200041b36600462002bb8565b62000a67565b3480156200042e57600080fd5b506200020f6200044036600462002c9f565b62000c0d565b3480156200045357600080fd5b506200020f62000d82565b3480156200046b57600080fd5b506200020f6200047d36600462002bb8565b62000d98565b3480156200049057600080fd5b506200027f620004a236600462002902565b6024602052600090815260409020546001600160a01b031681565b348015620004ca57600080fd5b50605a546001600160a01b03166200027f565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002902565b62001221565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002cef565b62001266565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002da3565b6200137d565b348015620005e957600080fd5b506200020f6200152f565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002902565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002941565b62001566565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007065760405162461bcd60e51b815260206004820152604760248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b62000716868686868686620015e5565b505050505050565b6027546001600160a01b031633146200074b5760405162461bcd60e51b8152600401620006fd9062002e0b565b6200075562001a76565b565b60006024600084846040516020016200077292919062002e68565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b462001ad4565b608c55565b620007c362001ad4565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008cf57826001166001036200085057600181602081106200081c576200081c62002e92565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200087d565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088a60028462002ed4565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c69062002eeb565b915050620007f0565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009cb5781600116600103620009555786818151811062000913576200091362002e92565b60200260200101518360405160200162000937929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009a7565b828782815181106200096b576200096b62002e92565b60200260200101516040516020016200098e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b460028362002ed4565b915080620009c28162002eeb565b915050620008e8565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a8d5760405162461bcd60e51b8152600401620006fd9062002f07565b62000aa38a8a8a8a8a8a8a8a8a8a600162001b30565b62000ab48963ffffffff1662001dc1565b6000836001600160a01b03168387898560405160240162000ad89392919062002fcc565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b0f919062003007565b60006040518083038185875af1925050503d806000811462000b4e576040519150601f19603f3d011682016040523d82523d6000602084013e62000b53565b606091505b505090508062000bbf5760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e8813595cdcd859d94819985a5b195960821b6064820152608401620006fd565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bf895949392919062003025565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c2e5750600054600160ff909116105b8062000c4a5750303b15801562000c4a575060005460ff166001145b62000caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006fd565b6000805460ff19166001179055801562000cd3576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d3562001e03565b801562000d7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8c62001ad4565b62000755600062001e76565b60225460ff161562000dbe5760405162461bcd60e51b8152600401620006fd9062002f07565b62000dd48a8a8a8a8a8a8a8a8a8a600062001b30565b62000de58963ffffffff1662001dc1565b6001600160a01b03851662000edc57604080516000808252602082019092526001600160a01b03851690849060405162000e20919062003007565b60006040518083038185875af1925050503d806000811462000e5f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e64565b606091505b505090508062000ed55760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a20604482015274115d1a195c881d1c985b9cd9995c8819985a5b1959605a1b6064820152608401620006fd565b50620011d4565b60225463ffffffff61010090910481169087160362000f115762000f0b6001600160a01b038616848462001ec8565b620011d4565b6000868660405160200162000f2892919062002e68565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200116c5760008060008580602001905181019062000f7a9190620030a8565b92509250925060008584848460405162000f9490620027a2565b62000fa2939291906200311e565b8190604051809103906000f590508015801562000fc3573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f1990604401600060405180830381600087803b1580156200101357600080fd5b505af115801562001028573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200115a9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011d1565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f1990604401600060405180830381600087803b158015620011b757600080fd5b505af1158015620011cc573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200120d95949392919062003025565b60405180910390a150505050505050505050565b600080620012326101008462002ed4565b9050600062001244610100856200315b565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200127e92919062002e68565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012b190620027a2565b601f1982820381018352601f909101166040819052620012de908d908d908d908d908d906020016200319b565b60408051601f1981840301815290829052620012fe9291602001620031dc565b604051602081830303815290604052805190602001206040516020016200135794939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013a35760405162461bcd60e51b8152600401620006fd9062002f07565b60225463ffffffff6101009091048116908416036200142b5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044657374696e6174696f6e2063616e6e6f7420626520697473656c66006064820152608401620006fd565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff1633868634876021546040516200147f9897969594939291906200320f565b60405180910390a1620014bc620014b66001602260019054906101000a900463ffffffff16338787348880519060200120620009da565b62001f32565b6026546001600160a01b03166333d6247d620014d7620007e5565b6040518263ffffffff1660e01b8152600401620014f691815260200190565b600060405180830381600087803b1580156200151157600080fd5b505af115801562001526573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b031633146200155c5760405162461bcd60e51b8152600401620006fd9062002e0b565b620007556200207e565b6200157062001ad4565b6001600160a01b038116620015d75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006fd565b620015e28162001e76565b50565b60225460ff16156200160b5760405162461bcd60e51b8152600401620006fd9062002f07565b60225463ffffffff610100909104811690861603620016935760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044657374696e6174696f6e2063616e6e6f7420626520697473656c660000006064820152608401620006fd565b60008060606001600160a01b03891662001736578534146200172c5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a908201527f20616d6f756e7420646f6573206e6f74206d61746368206d6573736167652e76606482015263616c756560e01b608482015260a401620006fd565b6000915062001996565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620017f357604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac90604401600060405180830381600087803b158015620017c657600080fd5b505af1158015620017db573d6000803e3d6000fd5b50505050806020015193508060000151925062001994565b84156200180857620018088a8888886200212d565b6200181f6001600160a01b038b1633308a62002555565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001876573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018a091908101906200327c565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620018df573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200190991908101906200327c565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001948573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200196e9190620032b5565b60405160200162001982939291906200311e565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b87602154604051620019d89897969594939291906200320f565b60405180910390a1620019fd620014b6600084868c8c8c8880519060200120620009da565b6026546001600160a01b03166333d6247d62001a18620007e5565b6040518263ffffffff1660e01b815260040162001a3791815260200190565b600060405180830381600087803b15801562001a5257600080fd5b505af115801562001a67573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001a9c5760405162461bcd60e51b8152600401620006fd9062002f07565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006fd565b62001b418a63ffffffff1662001221565b1562001b985760405162461bcd60e51b8152602060048201526030602482015260008051602062004ba583398151915260448201526f08105b1c9958591e4818db185a5b595960821b6064820152608401620006fd565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001c0c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c329190620032d5565b90508060000362001c9b5760405162461bcd60e51b8152602060048201526037602482015260008051602062004ba583398151915260448201527f20476c6f62616c45786974526f6f7420696e76616c69640000000000000000006064820152608401620006fd565b60225463ffffffff878116610100909204161462001d1d5760405162461bcd60e51b8152602060048201526043602482015260008051602062004ba583398151915260448201527f2044657374696e6174696f6e206e6574776f726b20646f6573206e6f74206d616064820152620e8c6d60eb1b608482015260a401620006fd565b602254600090610100900463ffffffff1662001d3b57508862001d3e565b50895b62001d6962001d5a848b8b8b8b8b8b80519060200120620009da565b8e8e63ffffffff1684620008d8565b62001a675760405162461bcd60e51b8152602060048201526032602482015260008051602062004ba58339815191526044820152711024b73b30b634b21039b6ba10383937b7b360711b6064820152608401620006fd565b600062001dd16101008362002ed4565b9050600062001de3610100846200315b565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001e705760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006fd565b62000755335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001f2d90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526200258f565b505050565b80600162001f4360206002620033ec565b62001f4f9190620033fa565b6021541062001fb45760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d65726b6c65604482015269081d1c995948199d5b1b60b21b6064820152608401620006fd565b60016021600082825462001fc9919062003414565b909155505060215460005b60208110156200207357816001166001036200200957826001826020811062002001576200200162002e92565b015550505050565b600181602081106200201f576200201f62002e92565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200205c919062002ed4565b9150806200206a8162002eeb565b91505062001fd4565b5062001f2d6200342f565b60225460ff16620020f85760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006fd565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200217083838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200266892505050565b9050632afa533160e01b6001600160e01b031982160162002369576000808080808080620021a2896004818d62003445565b810190620021b1919062003471565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620021f35760405162461bcd60e51b8152600401620006fd90620034cc565b6001600160a01b03861630146200221e5760405162461bcd60e51b8152600401620006fd9062003529565b8a8514620022955760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260448201527f6d697420616d6f756e7420646f6573206e6f74206d61746368000000000000006064820152608401620006fd565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162002315919062003007565b6000604051808303816000865af19150503d806000811462002354576040519150601f19603f3d011682016040523d82523d6000602084013e62002359565b606091505b505050505050505050506200254e565b6001600160e01b031981166323f2ebc360e21b14620023df5760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e6f7460448201526a081d985b1a590818d85b1b60aa1b6064820152608401620006fd565b600080808080808080620023f78a6004818e62003445565b8101906200240691906200358b565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200244a5760405162461bcd60e51b8152600401620006fd90620034cc565b6001600160a01b0387163014620024755760405162461bcd60e51b8152600401620006fd9062003529565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f1691620024fe919062003007565b6000604051808303816000865af19150503d80600081146200253d576040519150601f19603f3d011682016040523d82523d6000602084013e62002542565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d7c9085906323b872dd60e01b9060840162001ef5565b6000620025e6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166200266f9092919063ffffffff16565b80519091501562001f2d578080602001905181019062002607919062003617565b62001f2d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006fd565b6020015190565b6060620009d2848460008585600080866001600160a01b0316858760405162002699919062003007565b60006040518083038185875af1925050503d8060008114620026d8576040519150601f19603f3d011682016040523d82523d6000602084013e620026dd565b606091505b5091509150620026f087838387620026fb565b979650505050505050565b606083156200276f57825160000362002767576001600160a01b0385163b620027675760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006fd565b5081620009d2565b620009d28383815115620027865781518083602001fd5b8060405162461bcd60e51b8152600401620006fd919062003637565b611558806200364d83390190565b6001600160a01b0381168114620015e257600080fd5b8035620027d381620027b0565b919050565b803563ffffffff81168114620027d357600080fd5b60008083601f8401126200280057600080fd5b50813567ffffffffffffffff8111156200281957600080fd5b6020830191508360208285010111156200283257600080fd5b9250929050565b60008060008060008060a087890312156200285357600080fd5b86356200286081620027b0565b95506200287060208801620027d8565b945060408701356200288281620027b0565b935060608701359250608087013567ffffffffffffffff811115620028a657600080fd5b620028b489828a01620027ed565b979a9699509497509295939492505050565b60008060408385031215620028da57600080fd5b620028e583620027d8565b91506020830135620028f781620027b0565b809150509250929050565b6000602082840312156200291557600080fd5b5035919050565b6000602082840312156200292f57600080fd5b6200293a82620027d8565b9392505050565b6000602082840312156200295457600080fd5b81356200293a81620027b0565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620029a357620029a362002961565b604052919050565b600082601f830112620029bd57600080fd5b8135602067ffffffffffffffff821115620029dc57620029dc62002961565b8160051b620029ed82820162002977565b928352848101820192828101908785111562002a0857600080fd5b83870192505b84831015620026f05782358252918301919083019062002a0e565b6000806000806080858703121562002a4057600080fd5b84359350602085013567ffffffffffffffff8082111562002a6057600080fd5b62002a6e88838901620029ab565b945060408701359150808216821462002a8657600080fd5b509396929550929360600135925050565b60ff81168114620015e257600080fd5b600080600080600080600060e0888a03121562002ac357600080fd5b873562002ad08162002a97565b965062002ae060208901620027d8565b9550604088013562002af281620027b0565b945062002b0260608901620027d8565b9350608088013562002b1481620027b0565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002b4e5762002b4e62002961565b50601f01601f191660200190565b600082601f83011262002b6e57600080fd5b813562002b8562002b7f8262002b31565b62002977565b81815284602083860101111562002b9b57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002bd957600080fd5b8a3567ffffffffffffffff8082111562002bf257600080fd5b62002c008e838f01620029ab565b9b5062002c1060208e01620027d8565b9a5060408d0135995060608d0135985062002c2e60808e01620027d8565b975062002c3e60a08e01620027c6565b965062002c4e60c08e01620027d8565b955062002c5e60e08e01620027c6565b94506101008d013593506101208d013591508082111562002c7e57600080fd5b5062002c8d8d828e0162002b5c565b9150509295989b9194979a5092959850565b60008060006060848603121562002cb557600080fd5b62002cc084620027d8565b9250602084013562002cd281620027b0565b9150604084013562002ce481620027b0565b809150509250925092565b600080600080600080600060a0888a03121562002d0b57600080fd5b62002d1688620027d8565b9650602088013562002d2881620027b0565b9550604088013567ffffffffffffffff8082111562002d4657600080fd5b62002d548b838c01620027ed565b909750955060608a013591508082111562002d6e57600080fd5b5062002d7d8a828b01620027ed565b909450925050608088013562002d938162002a97565b8091505092959891949750929550565b60008060006060848603121562002db957600080fd5b62002dc484620027d8565b9250602084013562002dd681620027b0565b9150604084013567ffffffffffffffff81111562002df357600080fd5b62002e018682870162002b5c565b9150509250925092565b6020808252603a908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e5a6b45564d20636f6e7472616374000000000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002ee65762002ee662002ea8565b500490565b60006001820162002f005762002f0062002ebe565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002f8c57818101518382015260200162002f72565b8381111562000d7c5750506000910152565b6000815180845262002fb881602086016020860162002f6f565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002ffe9083018462002f9e565b95945050505050565b600082516200301b81846020870162002f6f565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f8301126200306e57600080fd5b81516200307f62002b7f8262002b31565b8181528460208386010111156200309557600080fd5b620009d282602083016020870162002f6f565b600080600060608486031215620030be57600080fd5b835167ffffffffffffffff80821115620030d757600080fd5b620030e5878388016200305c565b94506020860151915080821115620030fc57600080fd5b506200310b868287016200305c565b925050604084015162002ce48162002a97565b60608152600062003133606083018662002f9e565b828103602084015262003147818662002f9e565b91505060ff83166040830152949350505050565b6000826200316d576200316d62002ea8565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b606081526000620031b160608301878962003172565b8281036020840152620031c681868862003172565b91505060ff831660408301529695505050505050565b60008351620031f081846020880162002f6f565b8351908301906200320681836020880162002f6f565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032638483018762002f9e565b925080851660e085015250509998505050505050505050565b6000602082840312156200328f57600080fd5b815167ffffffffffffffff811115620032a757600080fd5b620009d2848285016200305c565b600060208284031215620032c857600080fd5b81516200293a8162002a97565b600060208284031215620032e857600080fd5b5051919050565b600181815b808511156200333057816000190482111562003314576200331462002ebe565b808516156200332257918102915b93841c9390800290620032f4565b509250929050565b6000826200334957506001620007a4565b816200335857506000620007a4565b81600181146200337157600281146200337c576200339c565b6001915050620007a4565b60ff84111562003390576200339062002ebe565b50506001821b620007a4565b5060208310610133831016604e8410600b8410161715620033c1575081810a620007a4565b620033cd8383620032ef565b8060001904821115620033e457620033e462002ebe565b029392505050565b60006200293a838362003338565b6000828210156200340f576200340f62002ebe565b500390565b600082198211156200342a576200342a62002ebe565b500190565b634e487b7160e01b600052600160045260246000fd5b600080858511156200345657600080fd5b838611156200346457600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200348d57600080fd5b87356200349a81620027b0565b96506020880135620034ac81620027b0565b95506040880135945060608801359350608088013562002b148162002a97565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260408201527f6d6974206f776e6572206d757374206265207468652073656e64657200000000606082015260800190565b60208082526033908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205370656040820152726e646572206d7573742062652027746869732760681b606082015260800190565b8015158114620015e257600080fd5b600080600080600080600080610100898b031215620035a957600080fd5b8835620035b681620027b0565b97506020890135620035c881620027b0565b965060408901359550606089013594506080890135620035e8816200357c565b935060a0890135620035fa8162002a97565b979a969950949793969295929450505060c08201359160e0013590565b6000602082840312156200362a57600080fd5b81516200293a816200357c565b6020815260006200293a602083018462002f9e56fe60c06040523480156200001157600080fd5b5060405162001558380380620015588339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109e620004ba60003960006104690152600081816102f90152610433015261109e6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866106638361104f565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161106157611061610fd1565b506001019056fea26469706673582212205af0e6dd4760d4ae367515578b46c4d5988b10ae47473e817626188baa0c03a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212206cce8df71878468ba72b63f3287ba5f1cce872064668f13a7884995ba2e36bd864736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50614bfa806100206000396000f3fe608060405260043610620001f35760003560e01c80637b6323c1116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b80637b6323c1146200045e57806381b1c17414620004835780638da5cb5b14620004bd57600080fd5b8063318aee3d116200018d5780633e19704311620001585780633e19704314620003d75780634638554914620003fc578063647c576c1462000421578063715018a6146200044657600080fd5b8063318aee3d146200030957806334ac9cf214620003785780633ae05047146200039a5780633da8168214620003b257600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f6200020936600462002839565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f6200071e565b3480156200026757600080fd5b506200027f62000279366004620028c6565b62000757565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002902565b620007aa565b348015620002ca57600080fd5b506200020f620002dc3660046200291c565b620007b9565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002941565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b506027546200027f906001600160a01b031681565b348015620003a757600080fd5b50620002fa620007e5565b348015620003bf57600080fd5b506200022d620003d136600462002a29565b620008d8565b348015620003e457600080fd5b50620002fa620003f636600462002aa7565b620009da565b3480156200040957600080fd5b506200020f6200041b36600462002bb8565b62000a67565b3480156200042e57600080fd5b506200020f6200044036600462002c9f565b62000c0d565b3480156200045357600080fd5b506200020f62000d82565b3480156200046b57600080fd5b506200020f6200047d36600462002bb8565b62000d98565b3480156200049057600080fd5b506200027f620004a236600462002902565b6024602052600090815260409020546001600160a01b031681565b348015620004ca57600080fd5b50605a546001600160a01b03166200027f565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002902565b62001221565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002cef565b62001266565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002da3565b6200137d565b348015620005e957600080fd5b506200020f6200152f565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002902565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002941565b62001566565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007065760405162461bcd60e51b815260206004820152604760248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b62000716868686868686620015e5565b505050505050565b6027546001600160a01b031633146200074b5760405162461bcd60e51b8152600401620006fd9062002e0b565b6200075562001a76565b565b60006024600084846040516020016200077292919062002e68565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b462001ad4565b608c55565b620007c362001ad4565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008cf57826001166001036200085057600181602081106200081c576200081c62002e92565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200087d565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088a60028462002ed4565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c69062002eeb565b915050620007f0565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009cb5781600116600103620009555786818151811062000913576200091362002e92565b60200260200101518360405160200162000937929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009a7565b828782815181106200096b576200096b62002e92565b60200260200101516040516020016200098e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b460028362002ed4565b915080620009c28162002eeb565b915050620008e8565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a8d5760405162461bcd60e51b8152600401620006fd9062002f07565b62000aa38a8a8a8a8a8a8a8a8a8a600162001b30565b62000ab48963ffffffff1662001dc1565b6000836001600160a01b03168387898560405160240162000ad89392919062002fcc565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b0f919062003007565b60006040518083038185875af1925050503d806000811462000b4e576040519150601f19603f3d011682016040523d82523d6000602084013e62000b53565b606091505b505090508062000bbf5760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e8813595cdcd859d94819985a5b195960821b6064820152608401620006fd565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bf895949392919062003025565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c2e5750600054600160ff909116105b8062000c4a5750303b15801562000c4a575060005460ff166001145b62000caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006fd565b6000805460ff19166001179055801562000cd3576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d3562001e03565b801562000d7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8c62001ad4565b62000755600062001e76565b60225460ff161562000dbe5760405162461bcd60e51b8152600401620006fd9062002f07565b62000dd48a8a8a8a8a8a8a8a8a8a600062001b30565b62000de58963ffffffff1662001dc1565b6001600160a01b03851662000edc57604080516000808252602082019092526001600160a01b03851690849060405162000e20919062003007565b60006040518083038185875af1925050503d806000811462000e5f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e64565b606091505b505090508062000ed55760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a20604482015274115d1a195c881d1c985b9cd9995c8819985a5b1959605a1b6064820152608401620006fd565b50620011d4565b60225463ffffffff61010090910481169087160362000f115762000f0b6001600160a01b038616848462001ec8565b620011d4565b6000868660405160200162000f2892919062002e68565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200116c5760008060008580602001905181019062000f7a9190620030a8565b92509250925060008584848460405162000f9490620027a2565b62000fa2939291906200311e565b8190604051809103906000f590508015801562000fc3573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f1990604401600060405180830381600087803b1580156200101357600080fd5b505af115801562001028573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200115a9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011d1565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f1990604401600060405180830381600087803b158015620011b757600080fd5b505af1158015620011cc573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200120d95949392919062003025565b60405180910390a150505050505050505050565b600080620012326101008462002ed4565b9050600062001244610100856200315b565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200127e92919062002e68565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012b190620027a2565b601f1982820381018352601f909101166040819052620012de908d908d908d908d908d906020016200319b565b60408051601f1981840301815290829052620012fe9291602001620031dc565b604051602081830303815290604052805190602001206040516020016200135794939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013a35760405162461bcd60e51b8152600401620006fd9062002f07565b60225463ffffffff6101009091048116908416036200142b5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044657374696e6174696f6e2063616e6e6f7420626520697473656c66006064820152608401620006fd565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff1633868634876021546040516200147f9897969594939291906200320f565b60405180910390a1620014bc620014b66001602260019054906101000a900463ffffffff16338787348880519060200120620009da565b62001f32565b6026546001600160a01b03166333d6247d620014d7620007e5565b6040518263ffffffff1660e01b8152600401620014f691815260200190565b600060405180830381600087803b1580156200151157600080fd5b505af115801562001526573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b031633146200155c5760405162461bcd60e51b8152600401620006fd9062002e0b565b620007556200207e565b6200157062001ad4565b6001600160a01b038116620015d75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006fd565b620015e28162001e76565b50565b60225460ff16156200160b5760405162461bcd60e51b8152600401620006fd9062002f07565b60225463ffffffff610100909104811690861603620016935760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044657374696e6174696f6e2063616e6e6f7420626520697473656c660000006064820152608401620006fd565b60008060606001600160a01b03891662001736578534146200172c5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a908201527f20416d6f756e7420646f6573206e6f74206d61746368206d6573736167652e76606482015263616c756560e01b608482015260a401620006fd565b6000915062001996565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620017f357604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac90604401600060405180830381600087803b158015620017c657600080fd5b505af1158015620017db573d6000803e3d6000fd5b50505050806020015193508060000151925062001994565b84156200180857620018088a8888886200212d565b6200181f6001600160a01b038b1633308a62002555565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001876573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018a091908101906200327c565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620018df573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200190991908101906200327c565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001948573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200196e9190620032b5565b60405160200162001982939291906200311e565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b87602154604051620019d89897969594939291906200320f565b60405180910390a1620019fd620014b6600084868c8c8c8880519060200120620009da565b6026546001600160a01b03166333d6247d62001a18620007e5565b6040518263ffffffff1660e01b815260040162001a3791815260200190565b600060405180830381600087803b15801562001a5257600080fd5b505af115801562001a67573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001a9c5760405162461bcd60e51b8152600401620006fd9062002f07565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006fd565b62001b418a63ffffffff1662001221565b1562001b985760405162461bcd60e51b8152602060048201526030602482015260008051602062004ba583398151915260448201526f08105b1c9958591e4818db185a5b595960821b6064820152608401620006fd565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001c0c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c329190620032d5565b90508060000362001c9b5760405162461bcd60e51b8152602060048201526037602482015260008051602062004ba583398151915260448201527f20476c6f62616c45786974526f6f7420696e76616c69640000000000000000006064820152608401620006fd565b60225463ffffffff878116610100909204161462001d1d5760405162461bcd60e51b8152602060048201526043602482015260008051602062004ba583398151915260448201527f2044657374696e6174696f6e206e6574776f726b20646f6573206e6f74206d616064820152620e8c6d60eb1b608482015260a401620006fd565b602254600090610100900463ffffffff1662001d3b57508862001d3e565b50895b62001d6962001d5a848b8b8b8b8b8b80519060200120620009da565b8e8e63ffffffff1684620008d8565b62001a675760405162461bcd60e51b8152602060048201526032602482015260008051602062004ba58339815191526044820152711024b73b30b634b21039b6ba10383937b7b360711b6064820152608401620006fd565b600062001dd16101008362002ed4565b9050600062001de3610100846200315b565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001e705760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006fd565b62000755335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001f2d90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526200258f565b505050565b80600162001f4360206002620033ec565b62001f4f9190620033fa565b6021541062001fb45760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d65726b6c65604482015269081d1c995948199d5b1b60b21b6064820152608401620006fd565b60016021600082825462001fc9919062003414565b909155505060215460005b60208110156200207357816001166001036200200957826001826020811062002001576200200162002e92565b015550505050565b600181602081106200201f576200201f62002e92565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200205c919062002ed4565b9150806200206a8162002eeb565b91505062001fd4565b5062001f2d6200342f565b60225460ff16620020f85760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006fd565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200217083838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200266892505050565b9050632afa533160e01b6001600160e01b031982160162002369576000808080808080620021a2896004818d62003445565b810190620021b1919062003471565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620021f35760405162461bcd60e51b8152600401620006fd90620034cc565b6001600160a01b03861630146200221e5760405162461bcd60e51b8152600401620006fd9062003529565b8a8514620022955760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260448201527f6d697420616d6f756e7420646f6573206e6f74206d61746368000000000000006064820152608401620006fd565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162002315919062003007565b6000604051808303816000865af19150503d806000811462002354576040519150601f19603f3d011682016040523d82523d6000602084013e62002359565b606091505b505050505050505050506200254e565b6001600160e01b031981166323f2ebc360e21b14620023df5760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e6f7460448201526a081d985b1a590818d85b1b60aa1b6064820152608401620006fd565b600080808080808080620023f78a6004818e62003445565b8101906200240691906200358b565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200244a5760405162461bcd60e51b8152600401620006fd90620034cc565b6001600160a01b0387163014620024755760405162461bcd60e51b8152600401620006fd9062003529565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f1691620024fe919062003007565b6000604051808303816000865af19150503d80600081146200253d576040519150601f19603f3d011682016040523d82523d6000602084013e62002542565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d7c9085906323b872dd60e01b9060840162001ef5565b6000620025e6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166200266f9092919063ffffffff16565b80519091501562001f2d578080602001905181019062002607919062003617565b62001f2d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006fd565b6020015190565b6060620009d2848460008585600080866001600160a01b0316858760405162002699919062003007565b60006040518083038185875af1925050503d8060008114620026d8576040519150601f19603f3d011682016040523d82523d6000602084013e620026dd565b606091505b5091509150620026f087838387620026fb565b979650505050505050565b606083156200276f57825160000362002767576001600160a01b0385163b620027675760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006fd565b5081620009d2565b620009d28383815115620027865781518083602001fd5b8060405162461bcd60e51b8152600401620006fd919062003637565b611558806200364d83390190565b6001600160a01b0381168114620015e257600080fd5b8035620027d381620027b0565b919050565b803563ffffffff81168114620027d357600080fd5b60008083601f8401126200280057600080fd5b50813567ffffffffffffffff8111156200281957600080fd5b6020830191508360208285010111156200283257600080fd5b9250929050565b60008060008060008060a087890312156200285357600080fd5b86356200286081620027b0565b95506200287060208801620027d8565b945060408701356200288281620027b0565b935060608701359250608087013567ffffffffffffffff811115620028a657600080fd5b620028b489828a01620027ed565b979a9699509497509295939492505050565b60008060408385031215620028da57600080fd5b620028e583620027d8565b91506020830135620028f781620027b0565b809150509250929050565b6000602082840312156200291557600080fd5b5035919050565b6000602082840312156200292f57600080fd5b6200293a82620027d8565b9392505050565b6000602082840312156200295457600080fd5b81356200293a81620027b0565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620029a357620029a362002961565b604052919050565b600082601f830112620029bd57600080fd5b8135602067ffffffffffffffff821115620029dc57620029dc62002961565b8160051b620029ed82820162002977565b928352848101820192828101908785111562002a0857600080fd5b83870192505b84831015620026f05782358252918301919083019062002a0e565b6000806000806080858703121562002a4057600080fd5b84359350602085013567ffffffffffffffff8082111562002a6057600080fd5b62002a6e88838901620029ab565b945060408701359150808216821462002a8657600080fd5b509396929550929360600135925050565b60ff81168114620015e257600080fd5b600080600080600080600060e0888a03121562002ac357600080fd5b873562002ad08162002a97565b965062002ae060208901620027d8565b9550604088013562002af281620027b0565b945062002b0260608901620027d8565b9350608088013562002b1481620027b0565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002b4e5762002b4e62002961565b50601f01601f191660200190565b600082601f83011262002b6e57600080fd5b813562002b8562002b7f8262002b31565b62002977565b81815284602083860101111562002b9b57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002bd957600080fd5b8a3567ffffffffffffffff8082111562002bf257600080fd5b62002c008e838f01620029ab565b9b5062002c1060208e01620027d8565b9a5060408d0135995060608d0135985062002c2e60808e01620027d8565b975062002c3e60a08e01620027c6565b965062002c4e60c08e01620027d8565b955062002c5e60e08e01620027c6565b94506101008d013593506101208d013591508082111562002c7e57600080fd5b5062002c8d8d828e0162002b5c565b9150509295989b9194979a5092959850565b60008060006060848603121562002cb557600080fd5b62002cc084620027d8565b9250602084013562002cd281620027b0565b9150604084013562002ce481620027b0565b809150509250925092565b600080600080600080600060a0888a03121562002d0b57600080fd5b62002d1688620027d8565b9650602088013562002d2881620027b0565b9550604088013567ffffffffffffffff8082111562002d4657600080fd5b62002d548b838c01620027ed565b909750955060608a013591508082111562002d6e57600080fd5b5062002d7d8a828b01620027ed565b909450925050608088013562002d938162002a97565b8091505092959891949750929550565b60008060006060848603121562002db957600080fd5b62002dc484620027d8565b9250602084013562002dd681620027b0565b9150604084013567ffffffffffffffff81111562002df357600080fd5b62002e018682870162002b5c565b9150509250925092565b6020808252603a908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e5a6b45564d20636f6e7472616374000000000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002ee65762002ee662002ea8565b500490565b60006001820162002f005762002f0062002ebe565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002f8c57818101518382015260200162002f72565b8381111562000d7c5750506000910152565b6000815180845262002fb881602086016020860162002f6f565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002ffe9083018462002f9e565b95945050505050565b600082516200301b81846020870162002f6f565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f8301126200306e57600080fd5b81516200307f62002b7f8262002b31565b8181528460208386010111156200309557600080fd5b620009d282602083016020870162002f6f565b600080600060608486031215620030be57600080fd5b835167ffffffffffffffff80821115620030d757600080fd5b620030e5878388016200305c565b94506020860151915080821115620030fc57600080fd5b506200310b868287016200305c565b925050604084015162002ce48162002a97565b60608152600062003133606083018662002f9e565b828103602084015262003147818662002f9e565b91505060ff83166040830152949350505050565b6000826200316d576200316d62002ea8565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b606081526000620031b160608301878962003172565b8281036020840152620031c681868862003172565b91505060ff831660408301529695505050505050565b60008351620031f081846020880162002f6f565b8351908301906200320681836020880162002f6f565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032638483018762002f9e565b925080851660e085015250509998505050505050505050565b6000602082840312156200328f57600080fd5b815167ffffffffffffffff811115620032a757600080fd5b620009d2848285016200305c565b600060208284031215620032c857600080fd5b81516200293a8162002a97565b600060208284031215620032e857600080fd5b5051919050565b600181815b808511156200333057816000190482111562003314576200331462002ebe565b808516156200332257918102915b93841c9390800290620032f4565b509250929050565b6000826200334957506001620007a4565b816200335857506000620007a4565b81600181146200337157600281146200337c576200339c565b6001915050620007a4565b60ff84111562003390576200339062002ebe565b50506001821b620007a4565b5060208310610133831016604e8410600b8410161715620033c1575081810a620007a4565b620033cd8383620032ef565b8060001904821115620033e457620033e462002ebe565b029392505050565b60006200293a838362003338565b6000828210156200340f576200340f62002ebe565b500390565b600082198211156200342a576200342a62002ebe565b500190565b634e487b7160e01b600052600160045260246000fd5b600080858511156200345657600080fd5b838611156200346457600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200348d57600080fd5b87356200349a81620027b0565b96506020880135620034ac81620027b0565b95506040880135945060608801359350608088013562002b148162002a97565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260408201527f6d6974206f776e6572206d757374206265207468652073656e64657200000000606082015260800190565b60208082526033908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205370656040820152726e646572206d7573742062652027746869732760681b606082015260800190565b8015158114620015e257600080fd5b600080600080600080600080610100898b031215620035a957600080fd5b8835620035b681620027b0565b97506020890135620035c881620027b0565b965060408901359550606089013594506080890135620035e8816200357c565b935060a0890135620035fa8162002a97565b979a969950949793969295929450505060c08201359160e0013590565b6000602082840312156200362a57600080fd5b81516200293a816200357c565b6020815260006200293a602083018462002f9e56fe60c06040523480156200001157600080fd5b5060405162001558380380620015588339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109e620004ba60003960006104690152600081816102f90152610433015261109e6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866106638361104f565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161106157611061610fd1565b506001019056fea26469706673582212205af0e6dd4760d4ae367515578b46c4d5988b10ae47473e817626188baa0c03a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220e33850a56913d406d5e359c0b98443485fff7fefd289bde46adf7b11c788757c64736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001f35760003560e01c80637b6323c1116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b80637b6323c1146200045e57806381b1c17414620004835780638da5cb5b14620004bd57600080fd5b8063318aee3d116200018d5780633e19704311620001585780633e19704314620003d75780634638554914620003fc578063647c576c1462000421578063715018a6146200044657600080fd5b8063318aee3d146200030957806334ac9cf214620003785780633ae05047146200039a5780633da8168214620003b257600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f6200020936600462002839565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f6200071e565b3480156200026757600080fd5b506200027f62000279366004620028c6565b62000757565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002902565b620007aa565b348015620002ca57600080fd5b506200020f620002dc3660046200291c565b620007b9565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002941565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b506027546200027f906001600160a01b031681565b348015620003a757600080fd5b50620002fa620007e5565b348015620003bf57600080fd5b506200022d620003d136600462002a29565b620008d8565b348015620003e457600080fd5b50620002fa620003f636600462002aa7565b620009da565b3480156200040957600080fd5b506200020f6200041b36600462002bb8565b62000a67565b3480156200042e57600080fd5b506200020f6200044036600462002c9f565b62000c0d565b3480156200045357600080fd5b506200020f62000d82565b3480156200046b57600080fd5b506200020f6200047d36600462002bb8565b62000d98565b3480156200049057600080fd5b506200027f620004a236600462002902565b6024602052600090815260409020546001600160a01b031681565b348015620004ca57600080fd5b50605a546001600160a01b03166200027f565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002902565b62001221565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002cef565b62001266565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002da3565b6200137d565b348015620005e957600080fd5b506200020f6200152f565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002902565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002941565b62001566565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007065760405162461bcd60e51b815260206004820152604760248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b62000716868686868686620015e5565b505050505050565b6027546001600160a01b031633146200074b5760405162461bcd60e51b8152600401620006fd9062002e0b565b6200075562001a76565b565b60006024600084846040516020016200077292919062002e68565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b462001ad4565b608c55565b620007c362001ad4565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008cf57826001166001036200085057600181602081106200081c576200081c62002e92565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200087d565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088a60028462002ed4565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c69062002eeb565b915050620007f0565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009cb5781600116600103620009555786818151811062000913576200091362002e92565b60200260200101518360405160200162000937929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009a7565b828782815181106200096b576200096b62002e92565b60200260200101516040516020016200098e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b460028362002ed4565b915080620009c28162002eeb565b915050620008e8565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a8d5760405162461bcd60e51b8152600401620006fd9062002f07565b62000aa38a8a8a8a8a8a8a8a8a8a600162001b30565b62000ab48963ffffffff1662001dc1565b6000836001600160a01b03168387898560405160240162000ad89392919062002fcc565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b0f919062003007565b60006040518083038185875af1925050503d806000811462000b4e576040519150601f19603f3d011682016040523d82523d6000602084013e62000b53565b606091505b505090508062000bbf5760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e8813595cdcd859d94819985a5b195960821b6064820152608401620006fd565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bf895949392919062003025565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c2e5750600054600160ff909116105b8062000c4a5750303b15801562000c4a575060005460ff166001145b62000caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006fd565b6000805460ff19166001179055801562000cd3576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d3562001e03565b801562000d7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8c62001ad4565b62000755600062001e76565b60225460ff161562000dbe5760405162461bcd60e51b8152600401620006fd9062002f07565b62000dd48a8a8a8a8a8a8a8a8a8a600062001b30565b62000de58963ffffffff1662001dc1565b6001600160a01b03851662000edc57604080516000808252602082019092526001600160a01b03851690849060405162000e20919062003007565b60006040518083038185875af1925050503d806000811462000e5f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e64565b606091505b505090508062000ed55760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a20604482015274115d1a195c881d1c985b9cd9995c8819985a5b1959605a1b6064820152608401620006fd565b50620011d4565b60225463ffffffff61010090910481169087160362000f115762000f0b6001600160a01b038616848462001ec8565b620011d4565b6000868660405160200162000f2892919062002e68565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200116c5760008060008580602001905181019062000f7a9190620030a8565b92509250925060008584848460405162000f9490620027a2565b62000fa2939291906200311e565b8190604051809103906000f590508015801562000fc3573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f1990604401600060405180830381600087803b1580156200101357600080fd5b505af115801562001028573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200115a9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011d1565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f1990604401600060405180830381600087803b158015620011b757600080fd5b505af1158015620011cc573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200120d95949392919062003025565b60405180910390a150505050505050505050565b600080620012326101008462002ed4565b9050600062001244610100856200315b565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200127e92919062002e68565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012b190620027a2565b601f1982820381018352601f909101166040819052620012de908d908d908d908d908d906020016200319b565b60408051601f1981840301815290829052620012fe9291602001620031dc565b604051602081830303815290604052805190602001206040516020016200135794939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013a35760405162461bcd60e51b8152600401620006fd9062002f07565b60225463ffffffff6101009091048116908416036200142b5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044657374696e6174696f6e2063616e6e6f7420626520697473656c66006064820152608401620006fd565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff1633868634876021546040516200147f9897969594939291906200320f565b60405180910390a1620014bc620014b66001602260019054906101000a900463ffffffff16338787348880519060200120620009da565b62001f32565b6026546001600160a01b03166333d6247d620014d7620007e5565b6040518263ffffffff1660e01b8152600401620014f691815260200190565b600060405180830381600087803b1580156200151157600080fd5b505af115801562001526573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b031633146200155c5760405162461bcd60e51b8152600401620006fd9062002e0b565b620007556200207e565b6200157062001ad4565b6001600160a01b038116620015d75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006fd565b620015e28162001e76565b50565b60225460ff16156200160b5760405162461bcd60e51b8152600401620006fd9062002f07565b60225463ffffffff610100909104811690861603620016935760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044657374696e6174696f6e2063616e6e6f7420626520697473656c660000006064820152608401620006fd565b60008060606001600160a01b03891662001736578534146200172c5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a908201527f20416d6f756e7420646f6573206e6f74206d61746368206d6573736167652e76606482015263616c756560e01b608482015260a401620006fd565b6000915062001996565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620017f357604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac90604401600060405180830381600087803b158015620017c657600080fd5b505af1158015620017db573d6000803e3d6000fd5b50505050806020015193508060000151925062001994565b84156200180857620018088a8888886200212d565b6200181f6001600160a01b038b1633308a62002555565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001876573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018a091908101906200327c565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620018df573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200190991908101906200327c565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001948573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200196e9190620032b5565b60405160200162001982939291906200311e565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b87602154604051620019d89897969594939291906200320f565b60405180910390a1620019fd620014b6600084868c8c8c8880519060200120620009da565b6026546001600160a01b03166333d6247d62001a18620007e5565b6040518263ffffffff1660e01b815260040162001a3791815260200190565b600060405180830381600087803b15801562001a5257600080fd5b505af115801562001a67573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001a9c5760405162461bcd60e51b8152600401620006fd9062002f07565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006fd565b62001b418a63ffffffff1662001221565b1562001b985760405162461bcd60e51b8152602060048201526030602482015260008051602062004ba583398151915260448201526f08105b1c9958591e4818db185a5b595960821b6064820152608401620006fd565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001c0c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c329190620032d5565b90508060000362001c9b5760405162461bcd60e51b8152602060048201526037602482015260008051602062004ba583398151915260448201527f20476c6f62616c45786974526f6f7420696e76616c69640000000000000000006064820152608401620006fd565b60225463ffffffff878116610100909204161462001d1d5760405162461bcd60e51b8152602060048201526043602482015260008051602062004ba583398151915260448201527f2044657374696e6174696f6e206e6574776f726b20646f6573206e6f74206d616064820152620e8c6d60eb1b608482015260a401620006fd565b602254600090610100900463ffffffff1662001d3b57508862001d3e565b50895b62001d6962001d5a848b8b8b8b8b8b80519060200120620009da565b8e8e63ffffffff1684620008d8565b62001a675760405162461bcd60e51b8152602060048201526032602482015260008051602062004ba58339815191526044820152711024b73b30b634b21039b6ba10383937b7b360711b6064820152608401620006fd565b600062001dd16101008362002ed4565b9050600062001de3610100846200315b565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001e705760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006fd565b62000755335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001f2d90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526200258f565b505050565b80600162001f4360206002620033ec565b62001f4f9190620033fa565b6021541062001fb45760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d65726b6c65604482015269081d1c995948199d5b1b60b21b6064820152608401620006fd565b60016021600082825462001fc9919062003414565b909155505060215460005b60208110156200207357816001166001036200200957826001826020811062002001576200200162002e92565b015550505050565b600181602081106200201f576200201f62002e92565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200205c919062002ed4565b9150806200206a8162002eeb565b91505062001fd4565b5062001f2d6200342f565b60225460ff16620020f85760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006fd565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200217083838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200266892505050565b9050632afa533160e01b6001600160e01b031982160162002369576000808080808080620021a2896004818d62003445565b810190620021b1919062003471565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620021f35760405162461bcd60e51b8152600401620006fd90620034cc565b6001600160a01b03861630146200221e5760405162461bcd60e51b8152600401620006fd9062003529565b8a8514620022955760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260448201527f6d697420616d6f756e7420646f6573206e6f74206d61746368000000000000006064820152608401620006fd565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162002315919062003007565b6000604051808303816000865af19150503d806000811462002354576040519150601f19603f3d011682016040523d82523d6000602084013e62002359565b606091505b505050505050505050506200254e565b6001600160e01b031981166323f2ebc360e21b14620023df5760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e6f7460448201526a081d985b1a590818d85b1b60aa1b6064820152608401620006fd565b600080808080808080620023f78a6004818e62003445565b8101906200240691906200358b565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200244a5760405162461bcd60e51b8152600401620006fd90620034cc565b6001600160a01b0387163014620024755760405162461bcd60e51b8152600401620006fd9062003529565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f1691620024fe919062003007565b6000604051808303816000865af19150503d80600081146200253d576040519150601f19603f3d011682016040523d82523d6000602084013e62002542565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d7c9085906323b872dd60e01b9060840162001ef5565b6000620025e6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166200266f9092919063ffffffff16565b80519091501562001f2d578080602001905181019062002607919062003617565b62001f2d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006fd565b6020015190565b6060620009d2848460008585600080866001600160a01b0316858760405162002699919062003007565b60006040518083038185875af1925050503d8060008114620026d8576040519150601f19603f3d011682016040523d82523d6000602084013e620026dd565b606091505b5091509150620026f087838387620026fb565b979650505050505050565b606083156200276f57825160000362002767576001600160a01b0385163b620027675760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006fd565b5081620009d2565b620009d28383815115620027865781518083602001fd5b8060405162461bcd60e51b8152600401620006fd919062003637565b611558806200364d83390190565b6001600160a01b0381168114620015e257600080fd5b8035620027d381620027b0565b919050565b803563ffffffff81168114620027d357600080fd5b60008083601f8401126200280057600080fd5b50813567ffffffffffffffff8111156200281957600080fd5b6020830191508360208285010111156200283257600080fd5b9250929050565b60008060008060008060a087890312156200285357600080fd5b86356200286081620027b0565b95506200287060208801620027d8565b945060408701356200288281620027b0565b935060608701359250608087013567ffffffffffffffff811115620028a657600080fd5b620028b489828a01620027ed565b979a9699509497509295939492505050565b60008060408385031215620028da57600080fd5b620028e583620027d8565b91506020830135620028f781620027b0565b809150509250929050565b6000602082840312156200291557600080fd5b5035919050565b6000602082840312156200292f57600080fd5b6200293a82620027d8565b9392505050565b6000602082840312156200295457600080fd5b81356200293a81620027b0565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620029a357620029a362002961565b604052919050565b600082601f830112620029bd57600080fd5b8135602067ffffffffffffffff821115620029dc57620029dc62002961565b8160051b620029ed82820162002977565b928352848101820192828101908785111562002a0857600080fd5b83870192505b84831015620026f05782358252918301919083019062002a0e565b6000806000806080858703121562002a4057600080fd5b84359350602085013567ffffffffffffffff8082111562002a6057600080fd5b62002a6e88838901620029ab565b945060408701359150808216821462002a8657600080fd5b509396929550929360600135925050565b60ff81168114620015e257600080fd5b600080600080600080600060e0888a03121562002ac357600080fd5b873562002ad08162002a97565b965062002ae060208901620027d8565b9550604088013562002af281620027b0565b945062002b0260608901620027d8565b9350608088013562002b1481620027b0565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002b4e5762002b4e62002961565b50601f01601f191660200190565b600082601f83011262002b6e57600080fd5b813562002b8562002b7f8262002b31565b62002977565b81815284602083860101111562002b9b57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002bd957600080fd5b8a3567ffffffffffffffff8082111562002bf257600080fd5b62002c008e838f01620029ab565b9b5062002c1060208e01620027d8565b9a5060408d0135995060608d0135985062002c2e60808e01620027d8565b975062002c3e60a08e01620027c6565b965062002c4e60c08e01620027d8565b955062002c5e60e08e01620027c6565b94506101008d013593506101208d013591508082111562002c7e57600080fd5b5062002c8d8d828e0162002b5c565b9150509295989b9194979a5092959850565b60008060006060848603121562002cb557600080fd5b62002cc084620027d8565b9250602084013562002cd281620027b0565b9150604084013562002ce481620027b0565b809150509250925092565b600080600080600080600060a0888a03121562002d0b57600080fd5b62002d1688620027d8565b9650602088013562002d2881620027b0565b9550604088013567ffffffffffffffff8082111562002d4657600080fd5b62002d548b838c01620027ed565b909750955060608a013591508082111562002d6e57600080fd5b5062002d7d8a828b01620027ed565b909450925050608088013562002d938162002a97565b8091505092959891949750929550565b60008060006060848603121562002db957600080fd5b62002dc484620027d8565b9250602084013562002dd681620027b0565b9150604084013567ffffffffffffffff81111562002df357600080fd5b62002e018682870162002b5c565b9150509250925092565b6020808252603a908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e5a6b45564d20636f6e7472616374000000000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002ee65762002ee662002ea8565b500490565b60006001820162002f005762002f0062002ebe565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002f8c57818101518382015260200162002f72565b8381111562000d7c5750506000910152565b6000815180845262002fb881602086016020860162002f6f565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002ffe9083018462002f9e565b95945050505050565b600082516200301b81846020870162002f6f565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f8301126200306e57600080fd5b81516200307f62002b7f8262002b31565b8181528460208386010111156200309557600080fd5b620009d282602083016020870162002f6f565b600080600060608486031215620030be57600080fd5b835167ffffffffffffffff80821115620030d757600080fd5b620030e5878388016200305c565b94506020860151915080821115620030fc57600080fd5b506200310b868287016200305c565b925050604084015162002ce48162002a97565b60608152600062003133606083018662002f9e565b828103602084015262003147818662002f9e565b91505060ff83166040830152949350505050565b6000826200316d576200316d62002ea8565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b606081526000620031b160608301878962003172565b8281036020840152620031c681868862003172565b91505060ff831660408301529695505050505050565b60008351620031f081846020880162002f6f565b8351908301906200320681836020880162002f6f565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032638483018762002f9e565b925080851660e085015250509998505050505050505050565b6000602082840312156200328f57600080fd5b815167ffffffffffffffff811115620032a757600080fd5b620009d2848285016200305c565b600060208284031215620032c857600080fd5b81516200293a8162002a97565b600060208284031215620032e857600080fd5b5051919050565b600181815b808511156200333057816000190482111562003314576200331462002ebe565b808516156200332257918102915b93841c9390800290620032f4565b509250929050565b6000826200334957506001620007a4565b816200335857506000620007a4565b81600181146200337157600281146200337c576200339c565b6001915050620007a4565b60ff84111562003390576200339062002ebe565b50506001821b620007a4565b5060208310610133831016604e8410600b8410161715620033c1575081810a620007a4565b620033cd8383620032ef565b8060001904821115620033e457620033e462002ebe565b029392505050565b60006200293a838362003338565b6000828210156200340f576200340f62002ebe565b500390565b600082198211156200342a576200342a62002ebe565b500190565b634e487b7160e01b600052600160045260246000fd5b600080858511156200345657600080fd5b838611156200346457600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200348d57600080fd5b87356200349a81620027b0565b96506020880135620034ac81620027b0565b95506040880135945060608801359350608088013562002b148162002a97565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260408201527f6d6974206f776e6572206d757374206265207468652073656e64657200000000606082015260800190565b60208082526033908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205370656040820152726e646572206d7573742062652027746869732760681b606082015260800190565b8015158114620015e257600080fd5b600080600080600080600080610100898b031215620035a957600080fd5b8835620035b681620027b0565b97506020890135620035c881620027b0565b965060408901359550606089013594506080890135620035e8816200357c565b935060a0890135620035fa8162002a97565b979a969950949793969295929450505060c08201359160e0013590565b6000602082840312156200362a57600080fd5b81516200293a816200357c565b6020815260006200293a602083018462002f9e56fe60c06040523480156200001157600080fd5b5060405162001558380380620015588339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109e620004ba60003960006104690152600081816102f90152610433015261109e6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866106638361104f565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161106157611061610fd1565b506001019056fea26469706673582212205af0e6dd4760d4ae367515578b46c4d5988b10ae47473e817626188baa0c03a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220e33850a56913d406d5e359c0b98443485fff7fefd289bde46adf7b11c788757c64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZkEVMMock.json b/compiled-contracts/PolygonZkEVMMock.json index dadb46339..c282b4678 100644 --- a/compiled-contracts/PolygonZkEVMMock.json +++ b/compiled-contracts/PolygonZkEVMMock.json @@ -1693,8 +1693,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50615e1180620000216000396000f3fe608060405234801561001057600080fd5b50600436106104125760003560e01c806396dc3d3911610220578063cfa8ed4711610130578063e7a7ed02116100b8578063f14916d611610087578063f14916d6146109e3578063f2fde38b146109f6578063f851a44014610a09578063f8b823e414610a1c578063fe16564f14610a2557600080fd5b8063e7a7ed0214610990578063e8bf92ed146109aa578063eaeb077b146109bd578063edc41121146109d057600080fd5b8063d939b315116100ff578063d939b3151461093f578063dbc1697614610959578063e0d1744114610961578063e11f3f1814610974578063e217cfd61461098757600080fd5b8063cfa8ed47146108eb578063d02103ca14610905578063d8d1091b14610918578063d8f54db01461092b57600080fd5b8063ab9fc5ef116101b3578063b6b0b09711610182578063b6b0b09714610890578063c0cad302146108aa578063c0ed84e0146108bd578063c89e42df146108c5578063cf136306146108d857600080fd5b8063ab9fc5ef146107e4578063adc879e9146107ee578063afd23cbe14610808578063b4d63f581461083057600080fd5b80639eb831b9116101ef5780639eb831b9146107a95780639f0d039d146107b1578063a3c573eb146107b9578063aa58bad6146107cc57600080fd5b806396dc3d391461076857806399f5634e1461077b5780639b796760146107835780639c9f3dfe1461079657600080fd5b80634a910e6a11610326578063715018a6116102ae578063837a47381161027d578063837a4738146106b2578063841b24d7146107205780638b48931e1461073a5780638c4a0af7146107445780638da5cb5b1461075757600080fd5b8063715018a6146106715780637215541a1461067957806375c508b31461068c5780637fcb36531461069f57600080fd5b8063574f649e116102f5578063574f649e1461060557806360943d6a146106185780636b8616ce1461062b5780636ff512cc1461064b578063704b6c021461065e57600080fd5b80634a910e6a146105b75780635392c5e0146105ca578063542028d5146105ea5780635437988d146105f257600080fd5b80632d0889d3116103a9578063423fa85611610378578063423fa85614610543578063456052671461055d578063458c0477146105775780634834a3431461058a5780634a1a89a71461059d57600080fd5b80632d0889d314610500578063383b3be81461050a578063394218e91461051d5780633c1582671461053057600080fd5b80631816b7e5116103e55780631816b7e51461048457806319d8ac6114610497578063220d7899146104c257806329878983146104d557600080fd5b80630eaa86ea14610417578063107bf28c1461043d57806310a01a721461045257806315064c9614610467575b600080fd5b61042a610425366004614b76565b610a38565b6040519081526020015b60405180910390f35b610445610c19565b6040516104349190614c23565b610465610460366004614c65565b610ca7565b005b6065546104749060ff1681565b6040519015158152602001610434565b610465610492366004614cf2565b610ef1565b6068546104aa906001600160401b031681565b6040516001600160401b039091168152602001610434565b6104456104d0366004614d16565b611017565b606a546104e8906001600160a01b031681565b6040516001600160a01b039091168152602001610434565b61042a620493e081565b610474610518366004614d63565b6111bd565b61046561052b366004614d63565b611204565b61046561053e366004614ea0565b611353565b6068546104aa90600160401b90046001600160401b031681565b6068546104aa90600160801b90046001600160401b031681565b6072546104aa906001600160401b031681565b610465610598366004614c65565b611b55565b6072546104aa90600160401b90046001600160401b031681565b6104656105c5366004614d63565b611e9e565b61042a6105d8366004614d63565b606d6020526000908152604090205481565b610445612139565b610465610600366004614fcb565b612146565b61042a610613366004614fe8565b612170565b61046561062636600461505d565b6121b3565b61042a610639366004614d63565b60666020526000908152604090205481565b610465610659366004614fcb565b612523565b61046561066c366004614fcb565b6125a7565b61046561261f565b610465610687366004614d63565b612633565b61046561069a366004615134565b6128ab565b6069546104aa906001600160401b031681565b6106f56106c03660046151d2565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610434565b6072546104aa90600160c01b90046001600160401b031681565b6104aa62093a8081565b6104656107523660046151f9565b61293a565b6033546001600160a01b03166104e8565b610465610776366004614d63565b6129b1565b61042a6129dc565b610465610791366004614d63565b612abf565b6104656107a4366004614d63565b612af4565b61042a600c81565b60745461042a565b6070546104e8906001600160a01b031681565b6065546104aa9061010090046001600160401b031681565b6104aa6206978081565b606c546104aa90600160a81b90046001600160401b031681565b60655461081d90600160481b900461ffff1681565b60405161ffff9091168152602001610434565b61086b61083e366004614d63565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610434565b6065546104e890600160581b90046001600160a01b031681565b6104656108b8366004615216565b612c3a565b6104aa612c52565b6104656108d3366004615216565b612c9f565b6104656108e6366004614d63565b612d05565b6069546104e890600160401b90046001600160a01b031681565b606c546104e8906001600160a01b031681565b61046561092636600461524a565b612d86565b606c5461047490600160a01b900460ff1681565b6072546104aa90600160801b90046001600160401b031681565b610465613250565b61046561096f36600461533c565b61330c565b610465610982366004615134565b61337e565b6104aa6103e881565b6068546104aa90600160c01b90046001600160401b031681565b606b546104e8906001600160a01b031681565b6104656109cb366004615389565b6134c3565b6104656109de366004614c65565b6137ec565b6104656109f1366004614fcb565b61390c565b610465610a04366004614fcb565b613984565b6073546104e8906001600160a01b031681565b61042a60745481565b610465610a333660046153cd565b6139fa565b6000806000610a45612c52565b90506001600160401b03881615610ae2576072546001600160401b039081169089161115610a8e5760405162461bcd60e51b8152600401610a85906153f9565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610adc5760405162461bcd60e51b8152600401610a859061547c565b50610b4c565b6001600160401b0387166000908152606d6020526040902054915081610b1a5760405162461bcd60e51b8152600401610a85906154ee565b806001600160401b0316876001600160401b03161115610b4c5760405162461bcd60e51b8152600401610a8590615557565b806001600160401b0316866001600160401b031611610b7d5760405162461bcd60e51b8152600401610a85906155da565b6000610b8c8888888689611017565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051610bc1919061565d565b602060405180830381855afa158015610bde573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c019190615679565b610c0b91906156a8565b9a9950505050505050505050565b606f8054610c26906156bc565b80601f0160208091040260200160405190810160405280929190818152602001828054610c52906156bc565b8015610c9f5780601f10610c7457610100808354040283529160200191610c9f565b820191906000526020600020905b815481529060010190602001808311610c8257829003601f168201915b505050505081565b610caf613a1c565b600080610cba612c52565b90506001600160401b038a1615610d4e576072546001600160401b03908116908b161115610cfa5760405162461bcd60e51b8152600401610a85906153f9565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610d485760405162461bcd60e51b8152600401610a859061547c565b50610db8565b6001600160401b0389166000908152606d6020526040902054915081610d865760405162461bcd60e51b8152600401610a85906154ee565b806001600160401b0316896001600160401b03161115610db85760405162461bcd60e51b8152600401610a8590615557565b806001600160401b0316886001600160401b031611610de95760405162461bcd60e51b8152600401610a85906155da565b6000610df88a8a8a868b611017565b6069805467ffffffffffffffff19166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610e4657607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610e8c57600080fd5b505af1158015610ea0573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610f1b5760405162461bcd60e51b8152600401610a85906156f6565b6103e88161ffff16118015610f3557506104008161ffff16105b610fba5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a401610a85565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b0380861660008181526067602052604080822054938816825290205460609291158061104957508115155b6110bd576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a85565b80611132576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a85565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b03828116600090815260716020526040812054909242926111f392600160801b9092048116911661574f565b6001600160401b0316111592915050565b6073546001600160a01b0316331461122e5760405162461bcd60e51b8152600401610a85906156f6565b62093a806001600160401b038216111561125a5760405162461bcd60e51b8152600401610a859061577a565b60655460ff166112fd576072546001600160401b03600160c01b9091048116908216106112fd5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a401610a85565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a19060200161100c565b60655460ff16156113765760405162461bcd60e51b8152600401610a85906157e5565b606954600160401b90046001600160a01b031633146113fd5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e6365720000000000006064820152608401610a85565b8051806114725760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e636520312062617463680000006064820152608401610a85565b6103e881106114eb576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e7920626174636865736064820152608401610a85565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561197957600087828151811061153e5761153e61584d565b60200260200101519050600081606001516001600160401b031611156116f7578361156881615863565b94505060008160000151805190602001208260200151836060015160405160200161159593929190615889565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461163b5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d617463680000006064820152608401610a85565b81606001516001600160401b031682604001516001600160401b031610156116f15760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a401610a85565b5061186c565b602081015115806117805750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b36329161173a9160040190815260200190565b6020604051808303816000875af1158015611759573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177d9190615679565b15155b6117f25760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d7573742065786973740000000000006064820152608401610a85565b805151620493e01161186c5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610a85565b856001600160401b031681604001516001600160401b03161015801561189f57504281604001516001600160401b031611155b6119115760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e67650000006064820152608401610a85565b805180516020918201208183015160408085015190516119389488949392913391016158ac565b604051602081830303815290604052805190602001209250848061195b90615863565b95505080604001519550508080611971906158f0565b915050611522565b506068546001600160401b03600160c01b909104811690831611156119fe5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b6064820152608401610a85565b606854600090611a1e90600160801b90046001600160401b031684615909565b611a31906001600160401b031687615931565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611b0690339030908490611aeb9190615948565b606554600160581b90046001600160a01b0316929190613a76565b611b0e613ae1565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b785760405162461bcd60e51b8152600401610a85906157e5565b6072546001600160401b038781166000908152606760205260409020600101544292611baf92600160c01b9091048116911661574f565b6001600160401b03161115611c385760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a401610a85565b6103e8611c458888615909565b6001600160401b031610611cc15760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e792062617463686573000000006064820152608401610a85565b611cd18888888888888888613b81565b611cda86613e7e565b607254600160801b90046001600160401b0316600003611da2576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615611d3f57607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d8557600080fd5b505af1158015611d99573d6000803e3d6000fd5b50505050611e53565b611daa613ae1565b607280546001600160401b0316906000611dc383615863565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611ecb57506072546001600160401b03600160401b9091048116908216115b8015611ee657506072546001600160401b0390811690821611155b611f645760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a401610a85565b606a546001600160a01b0316331461200e57611f7f816111bd565b61200e5760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a401610a85565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b1580156120cb57600080fd5b505af11580156120df573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e846002015460405161212c91815260200190565b60405180910390a3505050565b606e8054610c26906156bc565b61214e613a1c565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b60008585805190602001208585856040516020016121929594939291906158ac565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff16158080156121d35750600054600160ff909116105b806121ed5750303b1580156121ed575060005460ff166001145b6122505760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a85565b6000805460ff191660011790558015612273576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a8416179055607080549091169188169190911790556122f06020860186614fcb565b607380546001600160a01b0319166001600160a01b03929092169190911790556123206060860160408701614fcb565b606980546001600160a01b0392909216600160401b02600160401b600160e01b031990921691909117905561235b60c0860160a08701614fcb565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa7113568490556123b860e0860160c08701614d63565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556123ef6040860160208701614d63565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561242b6080860160608701614d63565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b1990921691909117905561246760a08601608087016151f9565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e61248f84826159ad565b50606f61249c83826159ad565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124d2614064565b8015612518576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b0316331461254d5760405162461bcd60e51b8152600401610a85906156f6565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161100c565b6073546001600160a01b031633146125d15760405162461bcd60e51b8152600401610a85906156f6565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a19060200161100c565b612627613a1c565b61263160006140d4565b565b6033546001600160a01b031633146128a0576072546000906001600160401b03161561268457506072546001600160401b03908116600090815260716020526040902054600160401b900416612692565b506069546001600160401b03165b80826001600160401b0316116127105760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c7265616479207665726966696564000000006064820152608401610a85565b6068546001600160401b03600160401b90910481169083161180159061275257506001600160401b038083166000908152606760205260409020600101541615155b6127dd5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a401610a85565b6001600160401b03808316600090815260676020526040902060010154429161280b9162093a80911661574f565b6001600160401b0316111561289e5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a401610a85565b505b6128a8614126565b50565b60655460ff16156128ce5760405162461bcd60e51b8152600401610a85906157e5565b6128df898989898989898989614196565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1612518614126565b6073546001600160a01b031633146129645760405162461bcd60e51b8152600401610a85906156f6565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061100c90831515815260200190565b6129b9613a1c565b6069805467ffffffffffffffff19166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a539190615679565b90506000612a5f612c52565b6068546001600160401b03600160401b8204811691612a8f91600160801b8204811691600160c01b900416615909565b612a99919061574f565b612aa39190615909565b6001600160401b03169050612ab88183615a6c565b9250505090565b612ac7613a1c565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612b1e5760405162461bcd60e51b8152600401610a85906156f6565b62093a806001600160401b0382161115612b4a5760405162461bcd60e51b8152600401610a859061577a565b60655460ff16612bdf576072546001600160401b03600160801b909104811690821610612bdf5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f776572006064820152608401610a85565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c759060200161100c565b612c42613a1c565b606f612c4e82826159ad565b5050565b6072546000906001600160401b031615612c8f57506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612cc95760405162461bcd60e51b8152600401610a85906156f6565b606e612cd582826159ad565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161100c9190614c23565b6073546001600160a01b03163314612d2f5760405162461bcd60e51b8152600401610a85906156f6565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f9060200161100c565b60655460ff1615612da95760405162461bcd60e51b8152600401610a85906157e5565b606c54600160a01b900460ff161515600114612dd75760405162461bcd60e51b8152600401610a8590615a80565b805180612e3a5760405162461bcd60e51b815260206004820152603d6024820152600080516020615d9c83398151915260448201527f3a204d75737420666f726365206174206c6561737420312062617463680000006064820152608401610a85565b6103e88110612eab5760405162461bcd60e51b81526020600482015260436024820152600080516020615d9c83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a401610a85565b6068546001600160401b03600160c01b8204811691612ed3918491600160801b900416615ae9565b1115612f2d5760405162461bcd60e51b81526020600482015260356024820152600080516020615d9c8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b6064820152608401610a85565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015613159576000868281518110612f7a57612f7a61584d565b602002602001015190508380612f8f90615863565b945050600081600001518051906020012082602001518360400151604051602001612fbc93929190615889565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461305b5760405162461bcd60e51b81526020600482015260426024820152600080516020615d9c83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a401610a85565b613066600188615931565b83036130fb5742620697808360400151613080919061574f565b6001600160401b031611156130fb5760405162461bcd60e51b81526020600482015260476024820152600080516020615d9c83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a401610a85565b815180516020918201208184015160405161311e938893929142913391016158ac565b604051602081830303815290604052805190602001209350858061314190615863565b96505050508080613151906158f0565b915050612f5e565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166132725760405162461bcd60e51b8152600401610a8590615b01565b6073546001600160a01b0316331461329c5760405162461bcd60e51b8152600401610a85906156f6565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156132ec57600080fd5b505af1158015613300573d6000803e3d6000fd5b50505050612631614811565b613314613a1c565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133a85760405162461bcd60e51b8152600401610a8590615b5e565b6133b9898989898989898989614196565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561340457607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561344a57600080fd5b505af115801561345e573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff16156134e65760405162461bcd60e51b8152600401610a85906157e5565b606c54600160a01b900460ff1615156001146135145760405162461bcd60e51b8152600401610a8590615a80565b600061351f60745490565b9050818111156135845760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b6064820152608401610a85565b620493e08351106135f55760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b6064820152608401610a85565b60655461361490600160581b90046001600160a01b0316333084613a76565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa15801561365e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136829190615679565b60688054919250600160c01b9091046001600160401b03169060186136a683615863565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016136e793929190615889565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361378b57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26137e6565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516137dd93929190615bbb565b60405180910390a25b50505050565b606a546001600160a01b031633146138165760405162461bcd60e51b8152600401610a8590615b5e565b6138268888888888888888613b81565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561387157607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156138b757600080fd5b505af11580156138cb573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e8c565b6073546001600160a01b031633146139365760405162461bcd60e51b8152600401610a85906156f6565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca9060200161100c565b61398c613a1c565b6001600160a01b0381166139f15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a85565b6128a8816140d4565b613a02613a1c565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b031633146126315760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a85565b6040516001600160a01b03808516602483015283166044820152606481018290526137e69085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614868565b6072546001600160401b03600160401b820481169116111561263157607254600090613b1e90600160401b90046001600160401b0316600161574f565b9050613b29816111bd565b156128a857607254600090600290613b4b9084906001600160401b0316615909565b613b559190615bee565b613b5f908361574f565b9050613b6a816111bd565b15613b7857612c4e81611e9e565b612c4e82611e9e565b600080613b8c612c52565b90506001600160401b038a1615613c20576072546001600160401b03908116908b161115613bcc5760405162461bcd60e51b8152600401610a85906153f9565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c1a5760405162461bcd60e51b8152600401610a859061547c565b50613c8a565b6001600160401b0389166000908152606d6020526040902054915081613c585760405162461bcd60e51b8152600401610a85906154ee565b806001600160401b0316896001600160401b03161115613c8a5760405162461bcd60e51b8152600401610a8590615557565b806001600160401b0316886001600160401b031611613cbb5760405162461bcd60e51b8152600401610a85906155da565b6000613cca8a8a8a868b611017565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051613cff919061565d565b602060405180830381855afa158015613d1c573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613d3f9190615679565b613d4991906156a8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613d8d918b918b918b9190600401615c14565b602060405180830381865afa158015613daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dce9190615c8e565b613e2d5760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e7660448201526930b634b210383937b7b360b11b6064820152608401610a85565b613e7033613e3b858d615909565b6001600160401b0316613e4c6129dc565b613e569190615948565b606554600160581b90046001600160a01b0316919061493f565b505050505050505050505050565b6000613e88612c52565b905081600080613e988484615909565b6001600160401b031690505b836001600160401b0316836001600160401b031614613f4a576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613ef4911642615931565b1115613f2f576001810154613f1990600160401b90046001600160401b031686615909565b613f2c906001600160401b031684615ae9565b92505b60010154600160401b90046001600160401b03169250613ea4565b6000613f568383615931565b905082811015613fd0576000613f6c8285615931565b9050600c8111613f7c5780613f7f565b600c5b9050613f8c816003615948565b613f9790600a615d8f565b606554613fb0908390600160481b900461ffff16615d8f565b607454613fbd9190615948565b613fc79190615a6c565b6074555061405c565b6000613fdc8483615931565b9050600c8111613fec5780613fef565b600c5b90506000613ffe826003615948565b61400990600a615d8f565b606554614022908490600160481b900461ffff16615d8f565b60745461402f9190615948565b6140399190615a6c565b90508060745460745461404c9190615948565b6140569190615a6c565b60745550505b505050505050565b600054610100900460ff166140cf5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a85565b612631335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561417657600080fd5b505af115801561418a573d6000803e3d6000fd5b5050505061263161496f565b60006001600160401b038a1615614311576072546001600160401b03908116908b1611156142555760405162461bcd60e51b815260206004820152606c6024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c401610a85565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b909204161461430b5760405162461bcd60e51b81526020600482015260606024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a401610a85565b50614465565b506001600160401b0387166000908152606d6020526040902054806143b25760405162461bcd60e51b81526020600482015260576024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a401610a85565b6069546001600160401b0390811690891611156144655760405162461bcd60e51b81526020600482015260716024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c401610a85565b6072546001600160401b03908116908a16118015906144955750896001600160401b0316896001600160401b0316115b80156144b657506072546001600160401b03600160401b9091048116908a16115b61452e5760405162461bcd60e51b815260206004820152604f6024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a401610a85565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146145ee5760405162461bcd60e51b815260206004820152606a6024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c401610a85565b60006145fd898989858a611017565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051614632919061565d565b602060405180830381855afa15801561464f573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906146729190615679565b61467c91906156a8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916146c0918a918a918a9190600401615c14565b602060405180830381865afa1580156146dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147019190615c8e565b6147615760405162461bcd60e51b815260206004820152603e6024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a20696e76616c69642070726f6f6600006064820152608401610a85565b6001600160401b038b16600090815260716020526040902060020154879003613e705760405162461bcd60e51b81526020600482015260626024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c401610a85565b60655460ff166148335760405162461bcd60e51b8152600401610a8590615b01565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006148bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166149ca9092919063ffffffff16565b80519091501561493a57808060200190518101906148db9190615c8e565b61493a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a85565b505050565b6040516001600160a01b03831660248201526044810182905261493a90849063a9059cbb60e01b90606401613aaa565b60655460ff16156149925760405162461bcd60e51b8152600401610a85906157e5565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60606149d984846000856149e1565b949350505050565b606082471015614a425760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a85565b600080866001600160a01b03168587604051614a5e919061565d565b60006040518083038185875af1925050503d8060008114614a9b576040519150601f19603f3d011682016040523d82523d6000602084013e614aa0565b606091505b5091509150614ab187838387614abc565b979650505050505050565b60608315614b2b578251600003614b24576001600160a01b0385163b614b245760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a85565b50816149d9565b6149d98383815115614b405781518083602001fd5b8060405162461bcd60e51b8152600401610a859190614c23565b80356001600160401b0381168114614b7157600080fd5b919050565b600080600080600060a08688031215614b8e57600080fd5b614b9786614b5a565b9450614ba560208701614b5a565b9350614bb360408701614b5a565b94979396509394606081013594506080013592915050565b60005b83811015614be6578181015183820152602001614bce565b838111156137e65750506000910152565b60008151808452614c0f816020860160208601614bcb565b601f01601f19169290920160200192915050565b602081526000614c366020830184614bf7565b9392505050565b8060408101831015614c4e57600080fd5b92915050565b8060808101831015614c4e57600080fd5b6000806000806000806000806101a0898b031215614c8257600080fd5b614c8b89614b5a565b9750614c9960208a01614b5a565b9650614ca760408a01614b5a565b95506060890135945060808901359350614cc48a60a08b01614c3d565b9250614cd38a60e08b01614c54565b9150614ce38a6101608b01614c3d565b90509295985092959890939650565b600060208284031215614d0457600080fd5b813561ffff81168114614c3657600080fd5b600080600080600060a08688031215614d2e57600080fd5b614d3786614b5a565b9450614d4560208701614b5a565b94979496505050506040830135926060810135926080909101359150565b600060208284031215614d7557600080fd5b614c3682614b5a565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614db657614db6614d7e565b60405290565b604051606081016001600160401b0381118282101715614db657614db6614d7e565b604051601f8201601f191681016001600160401b0381118282101715614e0657614e06614d7e565b604052919050565b60006001600160401b03821115614e2757614e27614d7e565b5060051b60200190565b600082601f830112614e4257600080fd5b81356001600160401b03811115614e5b57614e5b614d7e565b614e6e601f8201601f1916602001614dde565b818152846020838601011115614e8357600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614eb357600080fd5b82356001600160401b0380821115614eca57600080fd5b818501915085601f830112614ede57600080fd5b8135614ef1614eec82614e0e565b614dde565b81815260059190911b83018401908481019088831115614f1057600080fd5b8585015b83811015614fa957803585811115614f2c5760008081fd5b86016080818c03601f1901811315614f445760008081fd5b614f4c614d94565b8983013588811115614f5e5760008081fd5b614f6c8e8c83870101614e31565b8252506040808401358b8301526060614f86818601614b5a565b82840152614f95848601614b5a565b908301525085525050918601918601614f14565b5098975050505050505050565b6001600160a01b03811681146128a857600080fd5b600060208284031215614fdd57600080fd5b8135614c3681614fb6565b600080600080600060a0868803121561500057600080fd5b8535945060208601356001600160401b0381111561501d57600080fd5b61502988828901614e31565b9450506040860135925061503f60608701614b5a565b9150608086013561504f81614fb6565b809150509295509295909350565b600080600080600080600080888a036101c081121561507b57600080fd5b893561508681614fb6565b985060208a013561509681614fb6565b975060408a01356150a681614fb6565b965060608a01356150b681614fb6565b955060e0607f19820112156150ca57600080fd5b5060808901935061016089013592506101808901356001600160401b03808211156150f457600080fd5b6151008c838d01614e31565b93506101a08b013591508082111561511757600080fd5b506151248b828c01614e31565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c03121561515357600080fd5b61515c8a614b5a565b985061516a60208b01614b5a565b975061517860408b01614b5a565b965061518660608b01614b5a565b955060808a0135945060a08a013593506151a38b60c08c01614c3d565b92506151b38b6101008c01614c54565b91506151c38b6101808c01614c3d565b90509295985092959850929598565b6000602082840312156151e457600080fd5b5035919050565b80151581146128a857600080fd5b60006020828403121561520b57600080fd5b8135614c36816151eb565b60006020828403121561522857600080fd5b81356001600160401b0381111561523e57600080fd5b6149d984828501614e31565b6000602080838503121561525d57600080fd5b82356001600160401b038082111561527457600080fd5b818501915085601f83011261528857600080fd5b8135615296614eec82614e0e565b81815260059190911b830184019084810190888311156152b557600080fd5b8585015b83811015614fa9578035858111156152d15760008081fd5b86016060818c03601f19018113156152e95760008081fd5b6152f1614dbc565b89830135888111156153035760008081fd5b6153118e8c83870101614e31565b8252506040808401358b830152615329838501614b5a565b90820152855250509186019186016152b9565b6000806000806080858703121561535257600080fd5b61535b85614b5a565b93506020850135925061537060408601614b5a565b915061537e60608601614b5a565b905092959194509250565b6000806040838503121561539c57600080fd5b82356001600160401b038111156153b257600080fd5b6153be85828601614e31565b95602094909401359450505050565b600080604083850312156153e057600080fd5b823591506153f060208401614b5a565b90509250929050565b60208082526058908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2070656e60408201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560608201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608082015260a00190565b6020808252604c908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760608201526b040e6e8c2e8ca40c4c2e8c6d60a31b608082015260a00190565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786060820152621a5cdd60ea1b608082015260a00190565b6020808252605d908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060608201527f7468616e2063757272656e744c61737456657269666965644261746368000000608082015260a00190565b60208082526057908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2066696e60408201527f616c4e65774261746368206d75737420626520626967676572207468616e206360608201527f757272656e744c61737456657269666965644261746368000000000000000000608082015260a00190565b6000825161566f818460208701614bcb565b9190910192915050565b60006020828403121561568b57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826156b7576156b7615692565b500690565b600181811c908216806156d057607f821691505b6020821081036156f057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561577157615771615739565b01949350505050565b60208082526045908201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361587f5761587f615739565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b60006001820161590257615902615739565b5060010190565b60006001600160401b038381169083168181101561592957615929615739565b039392505050565b60008282101561594357615943615739565b500390565b600081600019048311821515161561596257615962615739565b500290565b601f82111561493a57600081815260208120601f850160051c8101602086101561598e5750805b601f850160051c820191505b8181101561405c5782815560010161599a565b81516001600160401b038111156159c6576159c6614d7e565b6159da816159d484546156bc565b84615967565b602080601f831160018114615a0f57600084156159f75750858301515b600019600386901b1c1916600185901b17855561405c565b600085815260208120601f198616915b82811015615a3e57888601518255948401946001909101908401615a1f565b5085821015615a5c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615a7b57615a7b615692565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b60008219821115615afc57615afc615739565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b0383166020820152606060408201819052600090615be590830184614bf7565b95945050505050565b60006001600160401b0380841680615c0857615c08615692565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615c4c57848483379084018281529284019290600101615c2c565b5050828760c0870137610100850181815286935091505b6001811015615c82578251825260209283019290910190600101615c63565b50505095945050505050565b600060208284031215615ca057600080fd5b8151614c36816151eb565b600181815b80851115615ce6578160001904821115615ccc57615ccc615739565b80851615615cd957918102915b93841c9390800290615cb0565b509250929050565b600082615cfd57506001614c4e565b81615d0a57506000614c4e565b8160018114615d205760028114615d2a57615d46565b6001915050614c4e565b60ff841115615d3b57615d3b615739565b50506001821b614c4e565b5060208310610133831016604e8410600b8410161715615d69575081810a614c4e565b615d738383615cab565b8060001904821115615d8757615d87615739565b029392505050565b6000614c368383615cee56fe506f6c79676f6e5a6b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a6b45564d3a3a70726f76654e6f6e44657465726d696e6973a2646970667358221220e54b91d6c3c6f0be9ca949820d3b433020359ea35bd579bbcea11a0cc246100364736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106104125760003560e01c806396dc3d3911610220578063cfa8ed4711610130578063e7a7ed02116100b8578063f14916d611610087578063f14916d6146109e3578063f2fde38b146109f6578063f851a44014610a09578063f8b823e414610a1c578063fe16564f14610a2557600080fd5b8063e7a7ed0214610990578063e8bf92ed146109aa578063eaeb077b146109bd578063edc41121146109d057600080fd5b8063d939b315116100ff578063d939b3151461093f578063dbc1697614610959578063e0d1744114610961578063e11f3f1814610974578063e217cfd61461098757600080fd5b8063cfa8ed47146108eb578063d02103ca14610905578063d8d1091b14610918578063d8f54db01461092b57600080fd5b8063ab9fc5ef116101b3578063b6b0b09711610182578063b6b0b09714610890578063c0cad302146108aa578063c0ed84e0146108bd578063c89e42df146108c5578063cf136306146108d857600080fd5b8063ab9fc5ef146107e4578063adc879e9146107ee578063afd23cbe14610808578063b4d63f581461083057600080fd5b80639eb831b9116101ef5780639eb831b9146107a95780639f0d039d146107b1578063a3c573eb146107b9578063aa58bad6146107cc57600080fd5b806396dc3d391461076857806399f5634e1461077b5780639b796760146107835780639c9f3dfe1461079657600080fd5b80634a910e6a11610326578063715018a6116102ae578063837a47381161027d578063837a4738146106b2578063841b24d7146107205780638b48931e1461073a5780638c4a0af7146107445780638da5cb5b1461075757600080fd5b8063715018a6146106715780637215541a1461067957806375c508b31461068c5780637fcb36531461069f57600080fd5b8063574f649e116102f5578063574f649e1461060557806360943d6a146106185780636b8616ce1461062b5780636ff512cc1461064b578063704b6c021461065e57600080fd5b80634a910e6a146105b75780635392c5e0146105ca578063542028d5146105ea5780635437988d146105f257600080fd5b80632d0889d3116103a9578063423fa85611610378578063423fa85614610543578063456052671461055d578063458c0477146105775780634834a3431461058a5780634a1a89a71461059d57600080fd5b80632d0889d314610500578063383b3be81461050a578063394218e91461051d5780633c1582671461053057600080fd5b80631816b7e5116103e55780631816b7e51461048457806319d8ac6114610497578063220d7899146104c257806329878983146104d557600080fd5b80630eaa86ea14610417578063107bf28c1461043d57806310a01a721461045257806315064c9614610467575b600080fd5b61042a610425366004614b76565b610a38565b6040519081526020015b60405180910390f35b610445610c19565b6040516104349190614c23565b610465610460366004614c65565b610ca7565b005b6065546104749060ff1681565b6040519015158152602001610434565b610465610492366004614cf2565b610ef1565b6068546104aa906001600160401b031681565b6040516001600160401b039091168152602001610434565b6104456104d0366004614d16565b611017565b606a546104e8906001600160a01b031681565b6040516001600160a01b039091168152602001610434565b61042a620493e081565b610474610518366004614d63565b6111bd565b61046561052b366004614d63565b611204565b61046561053e366004614ea0565b611353565b6068546104aa90600160401b90046001600160401b031681565b6068546104aa90600160801b90046001600160401b031681565b6072546104aa906001600160401b031681565b610465610598366004614c65565b611b55565b6072546104aa90600160401b90046001600160401b031681565b6104656105c5366004614d63565b611e9e565b61042a6105d8366004614d63565b606d6020526000908152604090205481565b610445612139565b610465610600366004614fcb565b612146565b61042a610613366004614fe8565b612170565b61046561062636600461505d565b6121b3565b61042a610639366004614d63565b60666020526000908152604090205481565b610465610659366004614fcb565b612523565b61046561066c366004614fcb565b6125a7565b61046561261f565b610465610687366004614d63565b612633565b61046561069a366004615134565b6128ab565b6069546104aa906001600160401b031681565b6106f56106c03660046151d2565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610434565b6072546104aa90600160c01b90046001600160401b031681565b6104aa62093a8081565b6104656107523660046151f9565b61293a565b6033546001600160a01b03166104e8565b610465610776366004614d63565b6129b1565b61042a6129dc565b610465610791366004614d63565b612abf565b6104656107a4366004614d63565b612af4565b61042a600c81565b60745461042a565b6070546104e8906001600160a01b031681565b6065546104aa9061010090046001600160401b031681565b6104aa6206978081565b606c546104aa90600160a81b90046001600160401b031681565b60655461081d90600160481b900461ffff1681565b60405161ffff9091168152602001610434565b61086b61083e366004614d63565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610434565b6065546104e890600160581b90046001600160a01b031681565b6104656108b8366004615216565b612c3a565b6104aa612c52565b6104656108d3366004615216565b612c9f565b6104656108e6366004614d63565b612d05565b6069546104e890600160401b90046001600160a01b031681565b606c546104e8906001600160a01b031681565b61046561092636600461524a565b612d86565b606c5461047490600160a01b900460ff1681565b6072546104aa90600160801b90046001600160401b031681565b610465613250565b61046561096f36600461533c565b61330c565b610465610982366004615134565b61337e565b6104aa6103e881565b6068546104aa90600160c01b90046001600160401b031681565b606b546104e8906001600160a01b031681565b6104656109cb366004615389565b6134c3565b6104656109de366004614c65565b6137ec565b6104656109f1366004614fcb565b61390c565b610465610a04366004614fcb565b613984565b6073546104e8906001600160a01b031681565b61042a60745481565b610465610a333660046153cd565b6139fa565b6000806000610a45612c52565b90506001600160401b03881615610ae2576072546001600160401b039081169089161115610a8e5760405162461bcd60e51b8152600401610a85906153f9565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610adc5760405162461bcd60e51b8152600401610a859061547c565b50610b4c565b6001600160401b0387166000908152606d6020526040902054915081610b1a5760405162461bcd60e51b8152600401610a85906154ee565b806001600160401b0316876001600160401b03161115610b4c5760405162461bcd60e51b8152600401610a8590615557565b806001600160401b0316866001600160401b031611610b7d5760405162461bcd60e51b8152600401610a85906155da565b6000610b8c8888888689611017565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051610bc1919061565d565b602060405180830381855afa158015610bde573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c019190615679565b610c0b91906156a8565b9a9950505050505050505050565b606f8054610c26906156bc565b80601f0160208091040260200160405190810160405280929190818152602001828054610c52906156bc565b8015610c9f5780601f10610c7457610100808354040283529160200191610c9f565b820191906000526020600020905b815481529060010190602001808311610c8257829003601f168201915b505050505081565b610caf613a1c565b600080610cba612c52565b90506001600160401b038a1615610d4e576072546001600160401b03908116908b161115610cfa5760405162461bcd60e51b8152600401610a85906153f9565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610d485760405162461bcd60e51b8152600401610a859061547c565b50610db8565b6001600160401b0389166000908152606d6020526040902054915081610d865760405162461bcd60e51b8152600401610a85906154ee565b806001600160401b0316896001600160401b03161115610db85760405162461bcd60e51b8152600401610a8590615557565b806001600160401b0316886001600160401b031611610de95760405162461bcd60e51b8152600401610a85906155da565b6000610df88a8a8a868b611017565b6069805467ffffffffffffffff19166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610e4657607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610e8c57600080fd5b505af1158015610ea0573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610f1b5760405162461bcd60e51b8152600401610a85906156f6565b6103e88161ffff16118015610f3557506104008161ffff16105b610fba5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a401610a85565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b0380861660008181526067602052604080822054938816825290205460609291158061104957508115155b6110bd576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a85565b80611132576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a85565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b03828116600090815260716020526040812054909242926111f392600160801b9092048116911661574f565b6001600160401b0316111592915050565b6073546001600160a01b0316331461122e5760405162461bcd60e51b8152600401610a85906156f6565b62093a806001600160401b038216111561125a5760405162461bcd60e51b8152600401610a859061577a565b60655460ff166112fd576072546001600160401b03600160c01b9091048116908216106112fd5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a401610a85565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a19060200161100c565b60655460ff16156113765760405162461bcd60e51b8152600401610a85906157e5565b606954600160401b90046001600160a01b031633146113fd5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e6365720000000000006064820152608401610a85565b8051806114725760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e636520312062617463680000006064820152608401610a85565b6103e881106114eb576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e7920626174636865736064820152608401610a85565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561197957600087828151811061153e5761153e61584d565b60200260200101519050600081606001516001600160401b031611156116f7578361156881615863565b94505060008160000151805190602001208260200151836060015160405160200161159593929190615889565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461163b5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d617463680000006064820152608401610a85565b81606001516001600160401b031682604001516001600160401b031610156116f15760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a401610a85565b5061186c565b602081015115806117805750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b36329161173a9160040190815260200190565b6020604051808303816000875af1158015611759573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177d9190615679565b15155b6117f25760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d7573742065786973740000000000006064820152608401610a85565b805151620493e01161186c5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610a85565b856001600160401b031681604001516001600160401b03161015801561189f57504281604001516001600160401b031611155b6119115760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e67650000006064820152608401610a85565b805180516020918201208183015160408085015190516119389488949392913391016158ac565b604051602081830303815290604052805190602001209250848061195b90615863565b95505080604001519550508080611971906158f0565b915050611522565b506068546001600160401b03600160c01b909104811690831611156119fe5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b6064820152608401610a85565b606854600090611a1e90600160801b90046001600160401b031684615909565b611a31906001600160401b031687615931565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611b0690339030908490611aeb9190615948565b606554600160581b90046001600160a01b0316929190613a76565b611b0e613ae1565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b785760405162461bcd60e51b8152600401610a85906157e5565b6072546001600160401b038781166000908152606760205260409020600101544292611baf92600160c01b9091048116911661574f565b6001600160401b03161115611c385760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a401610a85565b6103e8611c458888615909565b6001600160401b031610611cc15760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e792062617463686573000000006064820152608401610a85565b611cd18888888888888888613b81565b611cda86613e7e565b607254600160801b90046001600160401b0316600003611da2576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615611d3f57607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d8557600080fd5b505af1158015611d99573d6000803e3d6000fd5b50505050611e53565b611daa613ae1565b607280546001600160401b0316906000611dc383615863565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611ecb57506072546001600160401b03600160401b9091048116908216115b8015611ee657506072546001600160401b0390811690821611155b611f645760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a401610a85565b606a546001600160a01b0316331461200e57611f7f816111bd565b61200e5760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a401610a85565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b1580156120cb57600080fd5b505af11580156120df573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e846002015460405161212c91815260200190565b60405180910390a3505050565b606e8054610c26906156bc565b61214e613a1c565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b60008585805190602001208585856040516020016121929594939291906158ac565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff16158080156121d35750600054600160ff909116105b806121ed5750303b1580156121ed575060005460ff166001145b6122505760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a85565b6000805460ff191660011790558015612273576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a8416179055607080549091169188169190911790556122f06020860186614fcb565b607380546001600160a01b0319166001600160a01b03929092169190911790556123206060860160408701614fcb565b606980546001600160a01b0392909216600160401b02600160401b600160e01b031990921691909117905561235b60c0860160a08701614fcb565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa7113568490556123b860e0860160c08701614d63565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556123ef6040860160208701614d63565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561242b6080860160608701614d63565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b1990921691909117905561246760a08601608087016151f9565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e61248f84826159ad565b50606f61249c83826159ad565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124d2614064565b8015612518576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b0316331461254d5760405162461bcd60e51b8152600401610a85906156f6565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161100c565b6073546001600160a01b031633146125d15760405162461bcd60e51b8152600401610a85906156f6565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a19060200161100c565b612627613a1c565b61263160006140d4565b565b6033546001600160a01b031633146128a0576072546000906001600160401b03161561268457506072546001600160401b03908116600090815260716020526040902054600160401b900416612692565b506069546001600160401b03165b80826001600160401b0316116127105760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c7265616479207665726966696564000000006064820152608401610a85565b6068546001600160401b03600160401b90910481169083161180159061275257506001600160401b038083166000908152606760205260409020600101541615155b6127dd5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a401610a85565b6001600160401b03808316600090815260676020526040902060010154429161280b9162093a80911661574f565b6001600160401b0316111561289e5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a401610a85565b505b6128a8614126565b50565b60655460ff16156128ce5760405162461bcd60e51b8152600401610a85906157e5565b6128df898989898989898989614196565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1612518614126565b6073546001600160a01b031633146129645760405162461bcd60e51b8152600401610a85906156f6565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061100c90831515815260200190565b6129b9613a1c565b6069805467ffffffffffffffff19166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a539190615679565b90506000612a5f612c52565b6068546001600160401b03600160401b8204811691612a8f91600160801b8204811691600160c01b900416615909565b612a99919061574f565b612aa39190615909565b6001600160401b03169050612ab88183615a6c565b9250505090565b612ac7613a1c565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612b1e5760405162461bcd60e51b8152600401610a85906156f6565b62093a806001600160401b0382161115612b4a5760405162461bcd60e51b8152600401610a859061577a565b60655460ff16612bdf576072546001600160401b03600160801b909104811690821610612bdf5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f776572006064820152608401610a85565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c759060200161100c565b612c42613a1c565b606f612c4e82826159ad565b5050565b6072546000906001600160401b031615612c8f57506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612cc95760405162461bcd60e51b8152600401610a85906156f6565b606e612cd582826159ad565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161100c9190614c23565b6073546001600160a01b03163314612d2f5760405162461bcd60e51b8152600401610a85906156f6565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f9060200161100c565b60655460ff1615612da95760405162461bcd60e51b8152600401610a85906157e5565b606c54600160a01b900460ff161515600114612dd75760405162461bcd60e51b8152600401610a8590615a80565b805180612e3a5760405162461bcd60e51b815260206004820152603d6024820152600080516020615d9c83398151915260448201527f3a204d75737420666f726365206174206c6561737420312062617463680000006064820152608401610a85565b6103e88110612eab5760405162461bcd60e51b81526020600482015260436024820152600080516020615d9c83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a401610a85565b6068546001600160401b03600160c01b8204811691612ed3918491600160801b900416615ae9565b1115612f2d5760405162461bcd60e51b81526020600482015260356024820152600080516020615d9c8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b6064820152608401610a85565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015613159576000868281518110612f7a57612f7a61584d565b602002602001015190508380612f8f90615863565b945050600081600001518051906020012082602001518360400151604051602001612fbc93929190615889565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461305b5760405162461bcd60e51b81526020600482015260426024820152600080516020615d9c83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a401610a85565b613066600188615931565b83036130fb5742620697808360400151613080919061574f565b6001600160401b031611156130fb5760405162461bcd60e51b81526020600482015260476024820152600080516020615d9c83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a401610a85565b815180516020918201208184015160405161311e938893929142913391016158ac565b604051602081830303815290604052805190602001209350858061314190615863565b96505050508080613151906158f0565b915050612f5e565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166132725760405162461bcd60e51b8152600401610a8590615b01565b6073546001600160a01b0316331461329c5760405162461bcd60e51b8152600401610a85906156f6565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156132ec57600080fd5b505af1158015613300573d6000803e3d6000fd5b50505050612631614811565b613314613a1c565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133a85760405162461bcd60e51b8152600401610a8590615b5e565b6133b9898989898989898989614196565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561340457607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561344a57600080fd5b505af115801561345e573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff16156134e65760405162461bcd60e51b8152600401610a85906157e5565b606c54600160a01b900460ff1615156001146135145760405162461bcd60e51b8152600401610a8590615a80565b600061351f60745490565b9050818111156135845760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b6064820152608401610a85565b620493e08351106135f55760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b6064820152608401610a85565b60655461361490600160581b90046001600160a01b0316333084613a76565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa15801561365e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136829190615679565b60688054919250600160c01b9091046001600160401b03169060186136a683615863565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016136e793929190615889565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361378b57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26137e6565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516137dd93929190615bbb565b60405180910390a25b50505050565b606a546001600160a01b031633146138165760405162461bcd60e51b8152600401610a8590615b5e565b6138268888888888888888613b81565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561387157607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156138b757600080fd5b505af11580156138cb573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e8c565b6073546001600160a01b031633146139365760405162461bcd60e51b8152600401610a85906156f6565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca9060200161100c565b61398c613a1c565b6001600160a01b0381166139f15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a85565b6128a8816140d4565b613a02613a1c565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b031633146126315760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a85565b6040516001600160a01b03808516602483015283166044820152606481018290526137e69085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614868565b6072546001600160401b03600160401b820481169116111561263157607254600090613b1e90600160401b90046001600160401b0316600161574f565b9050613b29816111bd565b156128a857607254600090600290613b4b9084906001600160401b0316615909565b613b559190615bee565b613b5f908361574f565b9050613b6a816111bd565b15613b7857612c4e81611e9e565b612c4e82611e9e565b600080613b8c612c52565b90506001600160401b038a1615613c20576072546001600160401b03908116908b161115613bcc5760405162461bcd60e51b8152600401610a85906153f9565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c1a5760405162461bcd60e51b8152600401610a859061547c565b50613c8a565b6001600160401b0389166000908152606d6020526040902054915081613c585760405162461bcd60e51b8152600401610a85906154ee565b806001600160401b0316896001600160401b03161115613c8a5760405162461bcd60e51b8152600401610a8590615557565b806001600160401b0316886001600160401b031611613cbb5760405162461bcd60e51b8152600401610a85906155da565b6000613cca8a8a8a868b611017565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051613cff919061565d565b602060405180830381855afa158015613d1c573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613d3f9190615679565b613d4991906156a8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613d8d918b918b918b9190600401615c14565b602060405180830381865afa158015613daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dce9190615c8e565b613e2d5760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e7660448201526930b634b210383937b7b360b11b6064820152608401610a85565b613e7033613e3b858d615909565b6001600160401b0316613e4c6129dc565b613e569190615948565b606554600160581b90046001600160a01b0316919061493f565b505050505050505050505050565b6000613e88612c52565b905081600080613e988484615909565b6001600160401b031690505b836001600160401b0316836001600160401b031614613f4a576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613ef4911642615931565b1115613f2f576001810154613f1990600160401b90046001600160401b031686615909565b613f2c906001600160401b031684615ae9565b92505b60010154600160401b90046001600160401b03169250613ea4565b6000613f568383615931565b905082811015613fd0576000613f6c8285615931565b9050600c8111613f7c5780613f7f565b600c5b9050613f8c816003615948565b613f9790600a615d8f565b606554613fb0908390600160481b900461ffff16615d8f565b607454613fbd9190615948565b613fc79190615a6c565b6074555061405c565b6000613fdc8483615931565b9050600c8111613fec5780613fef565b600c5b90506000613ffe826003615948565b61400990600a615d8f565b606554614022908490600160481b900461ffff16615d8f565b60745461402f9190615948565b6140399190615a6c565b90508060745460745461404c9190615948565b6140569190615a6c565b60745550505b505050505050565b600054610100900460ff166140cf5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a85565b612631335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561417657600080fd5b505af115801561418a573d6000803e3d6000fd5b5050505061263161496f565b60006001600160401b038a1615614311576072546001600160401b03908116908b1611156142555760405162461bcd60e51b815260206004820152606c6024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c401610a85565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b909204161461430b5760405162461bcd60e51b81526020600482015260606024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a401610a85565b50614465565b506001600160401b0387166000908152606d6020526040902054806143b25760405162461bcd60e51b81526020600482015260576024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a401610a85565b6069546001600160401b0390811690891611156144655760405162461bcd60e51b81526020600482015260716024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c401610a85565b6072546001600160401b03908116908a16118015906144955750896001600160401b0316896001600160401b0316115b80156144b657506072546001600160401b03600160401b9091048116908a16115b61452e5760405162461bcd60e51b815260206004820152604f6024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a401610a85565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146145ee5760405162461bcd60e51b815260206004820152606a6024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c401610a85565b60006145fd898989858a611017565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051614632919061565d565b602060405180830381855afa15801561464f573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906146729190615679565b61467c91906156a8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916146c0918a918a918a9190600401615c14565b602060405180830381865afa1580156146dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147019190615c8e565b6147615760405162461bcd60e51b815260206004820152603e6024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a20696e76616c69642070726f6f6600006064820152608401610a85565b6001600160401b038b16600090815260716020526040902060020154879003613e705760405162461bcd60e51b81526020600482015260626024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c401610a85565b60655460ff166148335760405162461bcd60e51b8152600401610a8590615b01565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006148bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166149ca9092919063ffffffff16565b80519091501561493a57808060200190518101906148db9190615c8e565b61493a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a85565b505050565b6040516001600160a01b03831660248201526044810182905261493a90849063a9059cbb60e01b90606401613aaa565b60655460ff16156149925760405162461bcd60e51b8152600401610a85906157e5565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60606149d984846000856149e1565b949350505050565b606082471015614a425760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a85565b600080866001600160a01b03168587604051614a5e919061565d565b60006040518083038185875af1925050503d8060008114614a9b576040519150601f19603f3d011682016040523d82523d6000602084013e614aa0565b606091505b5091509150614ab187838387614abc565b979650505050505050565b60608315614b2b578251600003614b24576001600160a01b0385163b614b245760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a85565b50816149d9565b6149d98383815115614b405781518083602001fd5b8060405162461bcd60e51b8152600401610a859190614c23565b80356001600160401b0381168114614b7157600080fd5b919050565b600080600080600060a08688031215614b8e57600080fd5b614b9786614b5a565b9450614ba560208701614b5a565b9350614bb360408701614b5a565b94979396509394606081013594506080013592915050565b60005b83811015614be6578181015183820152602001614bce565b838111156137e65750506000910152565b60008151808452614c0f816020860160208601614bcb565b601f01601f19169290920160200192915050565b602081526000614c366020830184614bf7565b9392505050565b8060408101831015614c4e57600080fd5b92915050565b8060808101831015614c4e57600080fd5b6000806000806000806000806101a0898b031215614c8257600080fd5b614c8b89614b5a565b9750614c9960208a01614b5a565b9650614ca760408a01614b5a565b95506060890135945060808901359350614cc48a60a08b01614c3d565b9250614cd38a60e08b01614c54565b9150614ce38a6101608b01614c3d565b90509295985092959890939650565b600060208284031215614d0457600080fd5b813561ffff81168114614c3657600080fd5b600080600080600060a08688031215614d2e57600080fd5b614d3786614b5a565b9450614d4560208701614b5a565b94979496505050506040830135926060810135926080909101359150565b600060208284031215614d7557600080fd5b614c3682614b5a565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614db657614db6614d7e565b60405290565b604051606081016001600160401b0381118282101715614db657614db6614d7e565b604051601f8201601f191681016001600160401b0381118282101715614e0657614e06614d7e565b604052919050565b60006001600160401b03821115614e2757614e27614d7e565b5060051b60200190565b600082601f830112614e4257600080fd5b81356001600160401b03811115614e5b57614e5b614d7e565b614e6e601f8201601f1916602001614dde565b818152846020838601011115614e8357600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614eb357600080fd5b82356001600160401b0380821115614eca57600080fd5b818501915085601f830112614ede57600080fd5b8135614ef1614eec82614e0e565b614dde565b81815260059190911b83018401908481019088831115614f1057600080fd5b8585015b83811015614fa957803585811115614f2c5760008081fd5b86016080818c03601f1901811315614f445760008081fd5b614f4c614d94565b8983013588811115614f5e5760008081fd5b614f6c8e8c83870101614e31565b8252506040808401358b8301526060614f86818601614b5a565b82840152614f95848601614b5a565b908301525085525050918601918601614f14565b5098975050505050505050565b6001600160a01b03811681146128a857600080fd5b600060208284031215614fdd57600080fd5b8135614c3681614fb6565b600080600080600060a0868803121561500057600080fd5b8535945060208601356001600160401b0381111561501d57600080fd5b61502988828901614e31565b9450506040860135925061503f60608701614b5a565b9150608086013561504f81614fb6565b809150509295509295909350565b600080600080600080600080888a036101c081121561507b57600080fd5b893561508681614fb6565b985060208a013561509681614fb6565b975060408a01356150a681614fb6565b965060608a01356150b681614fb6565b955060e0607f19820112156150ca57600080fd5b5060808901935061016089013592506101808901356001600160401b03808211156150f457600080fd5b6151008c838d01614e31565b93506101a08b013591508082111561511757600080fd5b506151248b828c01614e31565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c03121561515357600080fd5b61515c8a614b5a565b985061516a60208b01614b5a565b975061517860408b01614b5a565b965061518660608b01614b5a565b955060808a0135945060a08a013593506151a38b60c08c01614c3d565b92506151b38b6101008c01614c54565b91506151c38b6101808c01614c3d565b90509295985092959850929598565b6000602082840312156151e457600080fd5b5035919050565b80151581146128a857600080fd5b60006020828403121561520b57600080fd5b8135614c36816151eb565b60006020828403121561522857600080fd5b81356001600160401b0381111561523e57600080fd5b6149d984828501614e31565b6000602080838503121561525d57600080fd5b82356001600160401b038082111561527457600080fd5b818501915085601f83011261528857600080fd5b8135615296614eec82614e0e565b81815260059190911b830184019084810190888311156152b557600080fd5b8585015b83811015614fa9578035858111156152d15760008081fd5b86016060818c03601f19018113156152e95760008081fd5b6152f1614dbc565b89830135888111156153035760008081fd5b6153118e8c83870101614e31565b8252506040808401358b830152615329838501614b5a565b90820152855250509186019186016152b9565b6000806000806080858703121561535257600080fd5b61535b85614b5a565b93506020850135925061537060408601614b5a565b915061537e60608601614b5a565b905092959194509250565b6000806040838503121561539c57600080fd5b82356001600160401b038111156153b257600080fd5b6153be85828601614e31565b95602094909401359450505050565b600080604083850312156153e057600080fd5b823591506153f060208401614b5a565b90509250929050565b60208082526058908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2070656e60408201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560608201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608082015260a00190565b6020808252604c908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760608201526b040e6e8c2e8ca40c4c2e8c6d60a31b608082015260a00190565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786060820152621a5cdd60ea1b608082015260a00190565b6020808252605d908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060608201527f7468616e2063757272656e744c61737456657269666965644261746368000000608082015260a00190565b60208082526057908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2066696e60408201527f616c4e65774261746368206d75737420626520626967676572207468616e206360608201527f757272656e744c61737456657269666965644261746368000000000000000000608082015260a00190565b6000825161566f818460208701614bcb565b9190910192915050565b60006020828403121561568b57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826156b7576156b7615692565b500690565b600181811c908216806156d057607f821691505b6020821081036156f057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561577157615771615739565b01949350505050565b60208082526045908201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361587f5761587f615739565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b60006001820161590257615902615739565b5060010190565b60006001600160401b038381169083168181101561592957615929615739565b039392505050565b60008282101561594357615943615739565b500390565b600081600019048311821515161561596257615962615739565b500290565b601f82111561493a57600081815260208120601f850160051c8101602086101561598e5750805b601f850160051c820191505b8181101561405c5782815560010161599a565b81516001600160401b038111156159c6576159c6614d7e565b6159da816159d484546156bc565b84615967565b602080601f831160018114615a0f57600084156159f75750858301515b600019600386901b1c1916600185901b17855561405c565b600085815260208120601f198616915b82811015615a3e57888601518255948401946001909101908401615a1f565b5085821015615a5c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615a7b57615a7b615692565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b60008219821115615afc57615afc615739565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b0383166020820152606060408201819052600090615be590830184614bf7565b95945050505050565b60006001600160401b0380841680615c0857615c08615692565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615c4c57848483379084018281529284019290600101615c2c565b5050828760c0870137610100850181815286935091505b6001811015615c82578251825260209283019290910190600101615c63565b50505095945050505050565b600060208284031215615ca057600080fd5b8151614c36816151eb565b600181815b80851115615ce6578160001904821115615ccc57615ccc615739565b80851615615cd957918102915b93841c9390800290615cb0565b509250929050565b600082615cfd57506001614c4e565b81615d0a57506000614c4e565b8160018114615d205760028114615d2a57615d46565b6001915050614c4e565b60ff841115615d3b57615d3b615739565b50506001821b614c4e565b5060208310610133831016604e8410600b8410161715615d69575081810a614c4e565b615d738383615cab565b8060001904821115615d8757615d87615739565b029392505050565b6000614c368383615cee56fe506f6c79676f6e5a6b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a6b45564d3a3a70726f76654e6f6e44657465726d696e6973a2646970667358221220e54b91d6c3c6f0be9ca949820d3b433020359ea35bd579bbcea11a0cc246100364736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50615e1180620000216000396000f3fe608060405234801561001057600080fd5b50600436106104125760003560e01c806396dc3d3911610220578063cfa8ed4711610130578063e7a7ed02116100b8578063f14916d611610087578063f14916d6146109e3578063f2fde38b146109f6578063f851a44014610a09578063f8b823e414610a1c578063fe16564f14610a2557600080fd5b8063e7a7ed0214610990578063e8bf92ed146109aa578063eaeb077b146109bd578063edc41121146109d057600080fd5b8063d939b315116100ff578063d939b3151461093f578063dbc1697614610959578063e0d1744114610961578063e11f3f1814610974578063e217cfd61461098757600080fd5b8063cfa8ed47146108eb578063d02103ca14610905578063d8d1091b14610918578063d8f54db01461092b57600080fd5b8063ab9fc5ef116101b3578063b6b0b09711610182578063b6b0b09714610890578063c0cad302146108aa578063c0ed84e0146108bd578063c89e42df146108c5578063cf136306146108d857600080fd5b8063ab9fc5ef146107e4578063adc879e9146107ee578063afd23cbe14610808578063b4d63f581461083057600080fd5b80639eb831b9116101ef5780639eb831b9146107a95780639f0d039d146107b1578063a3c573eb146107b9578063aa58bad6146107cc57600080fd5b806396dc3d391461076857806399f5634e1461077b5780639b796760146107835780639c9f3dfe1461079657600080fd5b80634a910e6a11610326578063715018a6116102ae578063837a47381161027d578063837a4738146106b2578063841b24d7146107205780638b48931e1461073a5780638c4a0af7146107445780638da5cb5b1461075757600080fd5b8063715018a6146106715780637215541a1461067957806375c508b31461068c5780637fcb36531461069f57600080fd5b8063574f649e116102f5578063574f649e1461060557806360943d6a146106185780636b8616ce1461062b5780636ff512cc1461064b578063704b6c021461065e57600080fd5b80634a910e6a146105b75780635392c5e0146105ca578063542028d5146105ea5780635437988d146105f257600080fd5b80632d0889d3116103a9578063423fa85611610378578063423fa85614610543578063456052671461055d578063458c0477146105775780634834a3431461058a5780634a1a89a71461059d57600080fd5b80632d0889d314610500578063383b3be81461050a578063394218e91461051d5780633c1582671461053057600080fd5b80631816b7e5116103e55780631816b7e51461048457806319d8ac6114610497578063220d7899146104c257806329878983146104d557600080fd5b80630eaa86ea14610417578063107bf28c1461043d57806310a01a721461045257806315064c9614610467575b600080fd5b61042a610425366004614b76565b610a38565b6040519081526020015b60405180910390f35b610445610c19565b6040516104349190614c23565b610465610460366004614c65565b610ca7565b005b6065546104749060ff1681565b6040519015158152602001610434565b610465610492366004614cf2565b610ef1565b6068546104aa906001600160401b031681565b6040516001600160401b039091168152602001610434565b6104456104d0366004614d16565b611017565b606a546104e8906001600160a01b031681565b6040516001600160a01b039091168152602001610434565b61042a620493e081565b610474610518366004614d63565b6111bd565b61046561052b366004614d63565b611204565b61046561053e366004614ea0565b611353565b6068546104aa90600160401b90046001600160401b031681565b6068546104aa90600160801b90046001600160401b031681565b6072546104aa906001600160401b031681565b610465610598366004614c65565b611b55565b6072546104aa90600160401b90046001600160401b031681565b6104656105c5366004614d63565b611e9e565b61042a6105d8366004614d63565b606d6020526000908152604090205481565b610445612139565b610465610600366004614fcb565b612146565b61042a610613366004614fe8565b612170565b61046561062636600461505d565b6121b3565b61042a610639366004614d63565b60666020526000908152604090205481565b610465610659366004614fcb565b612523565b61046561066c366004614fcb565b6125a7565b61046561261f565b610465610687366004614d63565b612633565b61046561069a366004615134565b6128ab565b6069546104aa906001600160401b031681565b6106f56106c03660046151d2565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610434565b6072546104aa90600160c01b90046001600160401b031681565b6104aa62093a8081565b6104656107523660046151f9565b61293a565b6033546001600160a01b03166104e8565b610465610776366004614d63565b6129b1565b61042a6129dc565b610465610791366004614d63565b612abf565b6104656107a4366004614d63565b612af4565b61042a600c81565b60745461042a565b6070546104e8906001600160a01b031681565b6065546104aa9061010090046001600160401b031681565b6104aa6206978081565b606c546104aa90600160a81b90046001600160401b031681565b60655461081d90600160481b900461ffff1681565b60405161ffff9091168152602001610434565b61086b61083e366004614d63565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610434565b6065546104e890600160581b90046001600160a01b031681565b6104656108b8366004615216565b612c3a565b6104aa612c52565b6104656108d3366004615216565b612c9f565b6104656108e6366004614d63565b612d05565b6069546104e890600160401b90046001600160a01b031681565b606c546104e8906001600160a01b031681565b61046561092636600461524a565b612d86565b606c5461047490600160a01b900460ff1681565b6072546104aa90600160801b90046001600160401b031681565b610465613250565b61046561096f36600461533c565b61330c565b610465610982366004615134565b61337e565b6104aa6103e881565b6068546104aa90600160c01b90046001600160401b031681565b606b546104e8906001600160a01b031681565b6104656109cb366004615389565b6134c3565b6104656109de366004614c65565b6137ec565b6104656109f1366004614fcb565b61390c565b610465610a04366004614fcb565b613984565b6073546104e8906001600160a01b031681565b61042a60745481565b610465610a333660046153cd565b6139fa565b6000806000610a45612c52565b90506001600160401b03881615610ae2576072546001600160401b039081169089161115610a8e5760405162461bcd60e51b8152600401610a85906153f9565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610adc5760405162461bcd60e51b8152600401610a859061547c565b50610b4c565b6001600160401b0387166000908152606d6020526040902054915081610b1a5760405162461bcd60e51b8152600401610a85906154ee565b806001600160401b0316876001600160401b03161115610b4c5760405162461bcd60e51b8152600401610a8590615557565b806001600160401b0316866001600160401b031611610b7d5760405162461bcd60e51b8152600401610a85906155da565b6000610b8c8888888689611017565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051610bc1919061565d565b602060405180830381855afa158015610bde573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c019190615679565b610c0b91906156a8565b9a9950505050505050505050565b606f8054610c26906156bc565b80601f0160208091040260200160405190810160405280929190818152602001828054610c52906156bc565b8015610c9f5780601f10610c7457610100808354040283529160200191610c9f565b820191906000526020600020905b815481529060010190602001808311610c8257829003601f168201915b505050505081565b610caf613a1c565b600080610cba612c52565b90506001600160401b038a1615610d4e576072546001600160401b03908116908b161115610cfa5760405162461bcd60e51b8152600401610a85906153f9565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610d485760405162461bcd60e51b8152600401610a859061547c565b50610db8565b6001600160401b0389166000908152606d6020526040902054915081610d865760405162461bcd60e51b8152600401610a85906154ee565b806001600160401b0316896001600160401b03161115610db85760405162461bcd60e51b8152600401610a8590615557565b806001600160401b0316886001600160401b031611610de95760405162461bcd60e51b8152600401610a85906155da565b6000610df88a8a8a868b611017565b6069805467ffffffffffffffff19166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610e4657607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610e8c57600080fd5b505af1158015610ea0573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610f1b5760405162461bcd60e51b8152600401610a85906156f6565b6103e88161ffff16118015610f3557506104008161ffff16105b610fba5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a401610a85565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b0380861660008181526067602052604080822054938816825290205460609291158061104957508115155b6110bd576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a85565b80611132576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a85565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b03828116600090815260716020526040812054909242926111f392600160801b9092048116911661574f565b6001600160401b0316111592915050565b6073546001600160a01b0316331461122e5760405162461bcd60e51b8152600401610a85906156f6565b62093a806001600160401b038216111561125a5760405162461bcd60e51b8152600401610a859061577a565b60655460ff166112fd576072546001600160401b03600160c01b9091048116908216106112fd5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a401610a85565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a19060200161100c565b60655460ff16156113765760405162461bcd60e51b8152600401610a85906157e5565b606954600160401b90046001600160a01b031633146113fd5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e6365720000000000006064820152608401610a85565b8051806114725760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e636520312062617463680000006064820152608401610a85565b6103e881106114eb576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e7920626174636865736064820152608401610a85565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561197957600087828151811061153e5761153e61584d565b60200260200101519050600081606001516001600160401b031611156116f7578361156881615863565b94505060008160000151805190602001208260200151836060015160405160200161159593929190615889565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461163b5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d617463680000006064820152608401610a85565b81606001516001600160401b031682604001516001600160401b031610156116f15760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a401610a85565b5061186c565b602081015115806117805750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b36329161173a9160040190815260200190565b6020604051808303816000875af1158015611759573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177d9190615679565b15155b6117f25760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d7573742065786973740000000000006064820152608401610a85565b805151620493e01161186c5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610a85565b856001600160401b031681604001516001600160401b03161015801561189f57504281604001516001600160401b031611155b6119115760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e67650000006064820152608401610a85565b805180516020918201208183015160408085015190516119389488949392913391016158ac565b604051602081830303815290604052805190602001209250848061195b90615863565b95505080604001519550508080611971906158f0565b915050611522565b506068546001600160401b03600160c01b909104811690831611156119fe5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b6064820152608401610a85565b606854600090611a1e90600160801b90046001600160401b031684615909565b611a31906001600160401b031687615931565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611b0690339030908490611aeb9190615948565b606554600160581b90046001600160a01b0316929190613a76565b611b0e613ae1565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b785760405162461bcd60e51b8152600401610a85906157e5565b6072546001600160401b038781166000908152606760205260409020600101544292611baf92600160c01b9091048116911661574f565b6001600160401b03161115611c385760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a401610a85565b6103e8611c458888615909565b6001600160401b031610611cc15760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e792062617463686573000000006064820152608401610a85565b611cd18888888888888888613b81565b611cda86613e7e565b607254600160801b90046001600160401b0316600003611da2576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615611d3f57607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d8557600080fd5b505af1158015611d99573d6000803e3d6000fd5b50505050611e53565b611daa613ae1565b607280546001600160401b0316906000611dc383615863565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611ecb57506072546001600160401b03600160401b9091048116908216115b8015611ee657506072546001600160401b0390811690821611155b611f645760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a401610a85565b606a546001600160a01b0316331461200e57611f7f816111bd565b61200e5760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a401610a85565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b1580156120cb57600080fd5b505af11580156120df573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e846002015460405161212c91815260200190565b60405180910390a3505050565b606e8054610c26906156bc565b61214e613a1c565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b60008585805190602001208585856040516020016121929594939291906158ac565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff16158080156121d35750600054600160ff909116105b806121ed5750303b1580156121ed575060005460ff166001145b6122505760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a85565b6000805460ff191660011790558015612273576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a8416179055607080549091169188169190911790556122f06020860186614fcb565b607380546001600160a01b0319166001600160a01b03929092169190911790556123206060860160408701614fcb565b606980546001600160a01b0392909216600160401b02600160401b600160e01b031990921691909117905561235b60c0860160a08701614fcb565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa7113568490556123b860e0860160c08701614d63565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556123ef6040860160208701614d63565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561242b6080860160608701614d63565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b1990921691909117905561246760a08601608087016151f9565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e61248f84826159ad565b50606f61249c83826159ad565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124d2614064565b8015612518576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b0316331461254d5760405162461bcd60e51b8152600401610a85906156f6565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161100c565b6073546001600160a01b031633146125d15760405162461bcd60e51b8152600401610a85906156f6565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a19060200161100c565b612627613a1c565b61263160006140d4565b565b6033546001600160a01b031633146128a0576072546000906001600160401b03161561268457506072546001600160401b03908116600090815260716020526040902054600160401b900416612692565b506069546001600160401b03165b80826001600160401b0316116127105760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c7265616479207665726966696564000000006064820152608401610a85565b6068546001600160401b03600160401b90910481169083161180159061275257506001600160401b038083166000908152606760205260409020600101541615155b6127dd5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a401610a85565b6001600160401b03808316600090815260676020526040902060010154429161280b9162093a80911661574f565b6001600160401b0316111561289e5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a401610a85565b505b6128a8614126565b50565b60655460ff16156128ce5760405162461bcd60e51b8152600401610a85906157e5565b6128df898989898989898989614196565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1612518614126565b6073546001600160a01b031633146129645760405162461bcd60e51b8152600401610a85906156f6565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061100c90831515815260200190565b6129b9613a1c565b6069805467ffffffffffffffff19166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a539190615679565b90506000612a5f612c52565b6068546001600160401b03600160401b8204811691612a8f91600160801b8204811691600160c01b900416615909565b612a99919061574f565b612aa39190615909565b6001600160401b03169050612ab88183615a6c565b9250505090565b612ac7613a1c565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612b1e5760405162461bcd60e51b8152600401610a85906156f6565b62093a806001600160401b0382161115612b4a5760405162461bcd60e51b8152600401610a859061577a565b60655460ff16612bdf576072546001600160401b03600160801b909104811690821610612bdf5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f776572006064820152608401610a85565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c759060200161100c565b612c42613a1c565b606f612c4e82826159ad565b5050565b6072546000906001600160401b031615612c8f57506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612cc95760405162461bcd60e51b8152600401610a85906156f6565b606e612cd582826159ad565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161100c9190614c23565b6073546001600160a01b03163314612d2f5760405162461bcd60e51b8152600401610a85906156f6565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f9060200161100c565b60655460ff1615612da95760405162461bcd60e51b8152600401610a85906157e5565b606c54600160a01b900460ff161515600114612dd75760405162461bcd60e51b8152600401610a8590615a80565b805180612e3a5760405162461bcd60e51b815260206004820152603d6024820152600080516020615d9c83398151915260448201527f3a204d75737420666f726365206174206c6561737420312062617463680000006064820152608401610a85565b6103e88110612eab5760405162461bcd60e51b81526020600482015260436024820152600080516020615d9c83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a401610a85565b6068546001600160401b03600160c01b8204811691612ed3918491600160801b900416615ae9565b1115612f2d5760405162461bcd60e51b81526020600482015260356024820152600080516020615d9c8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b6064820152608401610a85565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015613159576000868281518110612f7a57612f7a61584d565b602002602001015190508380612f8f90615863565b945050600081600001518051906020012082602001518360400151604051602001612fbc93929190615889565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461305b5760405162461bcd60e51b81526020600482015260426024820152600080516020615d9c83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a401610a85565b613066600188615931565b83036130fb5742620697808360400151613080919061574f565b6001600160401b031611156130fb5760405162461bcd60e51b81526020600482015260476024820152600080516020615d9c83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a401610a85565b815180516020918201208184015160405161311e938893929142913391016158ac565b604051602081830303815290604052805190602001209350858061314190615863565b96505050508080613151906158f0565b915050612f5e565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166132725760405162461bcd60e51b8152600401610a8590615b01565b6073546001600160a01b0316331461329c5760405162461bcd60e51b8152600401610a85906156f6565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156132ec57600080fd5b505af1158015613300573d6000803e3d6000fd5b50505050612631614811565b613314613a1c565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133a85760405162461bcd60e51b8152600401610a8590615b5e565b6133b9898989898989898989614196565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561340457607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561344a57600080fd5b505af115801561345e573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff16156134e65760405162461bcd60e51b8152600401610a85906157e5565b606c54600160a01b900460ff1615156001146135145760405162461bcd60e51b8152600401610a8590615a80565b600061351f60745490565b9050818111156135845760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b6064820152608401610a85565b620493e08351106135f55760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b6064820152608401610a85565b60655461361490600160581b90046001600160a01b0316333084613a76565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa15801561365e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136829190615679565b60688054919250600160c01b9091046001600160401b03169060186136a683615863565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016136e793929190615889565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361378b57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26137e6565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516137dd93929190615bbb565b60405180910390a25b50505050565b606a546001600160a01b031633146138165760405162461bcd60e51b8152600401610a8590615b5e565b6138268888888888888888613b81565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561387157607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156138b757600080fd5b505af11580156138cb573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e8c565b6073546001600160a01b031633146139365760405162461bcd60e51b8152600401610a85906156f6565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca9060200161100c565b61398c613a1c565b6001600160a01b0381166139f15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a85565b6128a8816140d4565b613a02613a1c565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b031633146126315760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a85565b6040516001600160a01b03808516602483015283166044820152606481018290526137e69085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614868565b6072546001600160401b03600160401b820481169116111561263157607254600090613b1e90600160401b90046001600160401b0316600161574f565b9050613b29816111bd565b156128a857607254600090600290613b4b9084906001600160401b0316615909565b613b559190615bee565b613b5f908361574f565b9050613b6a816111bd565b15613b7857612c4e81611e9e565b612c4e82611e9e565b600080613b8c612c52565b90506001600160401b038a1615613c20576072546001600160401b03908116908b161115613bcc5760405162461bcd60e51b8152600401610a85906153f9565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c1a5760405162461bcd60e51b8152600401610a859061547c565b50613c8a565b6001600160401b0389166000908152606d6020526040902054915081613c585760405162461bcd60e51b8152600401610a85906154ee565b806001600160401b0316896001600160401b03161115613c8a5760405162461bcd60e51b8152600401610a8590615557565b806001600160401b0316886001600160401b031611613cbb5760405162461bcd60e51b8152600401610a85906155da565b6000613cca8a8a8a868b611017565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051613cff919061565d565b602060405180830381855afa158015613d1c573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613d3f9190615679565b613d4991906156a8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613d8d918b918b918b9190600401615c14565b602060405180830381865afa158015613daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dce9190615c8e565b613e2d5760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20496e7660448201526930b634b210383937b7b360b11b6064820152608401610a85565b613e7033613e3b858d615909565b6001600160401b0316613e4c6129dc565b613e569190615948565b606554600160581b90046001600160a01b0316919061493f565b505050505050505050505050565b6000613e88612c52565b905081600080613e988484615909565b6001600160401b031690505b836001600160401b0316836001600160401b031614613f4a576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613ef4911642615931565b1115613f2f576001810154613f1990600160401b90046001600160401b031686615909565b613f2c906001600160401b031684615ae9565b92505b60010154600160401b90046001600160401b03169250613ea4565b6000613f568383615931565b905082811015613fd0576000613f6c8285615931565b9050600c8111613f7c5780613f7f565b600c5b9050613f8c816003615948565b613f9790600a615d8f565b606554613fb0908390600160481b900461ffff16615d8f565b607454613fbd9190615948565b613fc79190615a6c565b6074555061405c565b6000613fdc8483615931565b9050600c8111613fec5780613fef565b600c5b90506000613ffe826003615948565b61400990600a615d8f565b606554614022908490600160481b900461ffff16615d8f565b60745461402f9190615948565b6140399190615a6c565b90508060745460745461404c9190615948565b6140569190615a6c565b60745550505b505050505050565b600054610100900460ff166140cf5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a85565b612631335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561417657600080fd5b505af115801561418a573d6000803e3d6000fd5b5050505061263161496f565b60006001600160401b038a1615614311576072546001600160401b03908116908b1611156142555760405162461bcd60e51b815260206004820152606c6024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c401610a85565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b909204161461430b5760405162461bcd60e51b81526020600482015260606024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a401610a85565b50614465565b506001600160401b0387166000908152606d6020526040902054806143b25760405162461bcd60e51b81526020600482015260576024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a401610a85565b6069546001600160401b0390811690891611156144655760405162461bcd60e51b81526020600482015260716024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c401610a85565b6072546001600160401b03908116908a16118015906144955750896001600160401b0316896001600160401b0316115b80156144b657506072546001600160401b03600160401b9091048116908a16115b61452e5760405162461bcd60e51b815260206004820152604f6024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a401610a85565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146145ee5760405162461bcd60e51b815260206004820152606a6024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c401610a85565b60006145fd898989858a611017565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051614632919061565d565b602060405180830381855afa15801561464f573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906146729190615679565b61467c91906156a8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916146c0918a918a918a9190600401615c14565b602060405180830381865afa1580156146dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147019190615c8e565b6147615760405162461bcd60e51b815260206004820152603e6024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a20496e76616c69642070726f6f6600006064820152608401610a85565b6001600160401b038b16600090815260716020526040902060020154879003613e705760405162461bcd60e51b81526020600482015260626024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c401610a85565b60655460ff166148335760405162461bcd60e51b8152600401610a8590615b01565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006148bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166149ca9092919063ffffffff16565b80519091501561493a57808060200190518101906148db9190615c8e565b61493a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a85565b505050565b6040516001600160a01b03831660248201526044810182905261493a90849063a9059cbb60e01b90606401613aaa565b60655460ff16156149925760405162461bcd60e51b8152600401610a85906157e5565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60606149d984846000856149e1565b949350505050565b606082471015614a425760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a85565b600080866001600160a01b03168587604051614a5e919061565d565b60006040518083038185875af1925050503d8060008114614a9b576040519150601f19603f3d011682016040523d82523d6000602084013e614aa0565b606091505b5091509150614ab187838387614abc565b979650505050505050565b60608315614b2b578251600003614b24576001600160a01b0385163b614b245760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a85565b50816149d9565b6149d98383815115614b405781518083602001fd5b8060405162461bcd60e51b8152600401610a859190614c23565b80356001600160401b0381168114614b7157600080fd5b919050565b600080600080600060a08688031215614b8e57600080fd5b614b9786614b5a565b9450614ba560208701614b5a565b9350614bb360408701614b5a565b94979396509394606081013594506080013592915050565b60005b83811015614be6578181015183820152602001614bce565b838111156137e65750506000910152565b60008151808452614c0f816020860160208601614bcb565b601f01601f19169290920160200192915050565b602081526000614c366020830184614bf7565b9392505050565b8060408101831015614c4e57600080fd5b92915050565b8060808101831015614c4e57600080fd5b6000806000806000806000806101a0898b031215614c8257600080fd5b614c8b89614b5a565b9750614c9960208a01614b5a565b9650614ca760408a01614b5a565b95506060890135945060808901359350614cc48a60a08b01614c3d565b9250614cd38a60e08b01614c54565b9150614ce38a6101608b01614c3d565b90509295985092959890939650565b600060208284031215614d0457600080fd5b813561ffff81168114614c3657600080fd5b600080600080600060a08688031215614d2e57600080fd5b614d3786614b5a565b9450614d4560208701614b5a565b94979496505050506040830135926060810135926080909101359150565b600060208284031215614d7557600080fd5b614c3682614b5a565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614db657614db6614d7e565b60405290565b604051606081016001600160401b0381118282101715614db657614db6614d7e565b604051601f8201601f191681016001600160401b0381118282101715614e0657614e06614d7e565b604052919050565b60006001600160401b03821115614e2757614e27614d7e565b5060051b60200190565b600082601f830112614e4257600080fd5b81356001600160401b03811115614e5b57614e5b614d7e565b614e6e601f8201601f1916602001614dde565b818152846020838601011115614e8357600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614eb357600080fd5b82356001600160401b0380821115614eca57600080fd5b818501915085601f830112614ede57600080fd5b8135614ef1614eec82614e0e565b614dde565b81815260059190911b83018401908481019088831115614f1057600080fd5b8585015b83811015614fa957803585811115614f2c5760008081fd5b86016080818c03601f1901811315614f445760008081fd5b614f4c614d94565b8983013588811115614f5e5760008081fd5b614f6c8e8c83870101614e31565b8252506040808401358b8301526060614f86818601614b5a565b82840152614f95848601614b5a565b908301525085525050918601918601614f14565b5098975050505050505050565b6001600160a01b03811681146128a857600080fd5b600060208284031215614fdd57600080fd5b8135614c3681614fb6565b600080600080600060a0868803121561500057600080fd5b8535945060208601356001600160401b0381111561501d57600080fd5b61502988828901614e31565b9450506040860135925061503f60608701614b5a565b9150608086013561504f81614fb6565b809150509295509295909350565b600080600080600080600080888a036101c081121561507b57600080fd5b893561508681614fb6565b985060208a013561509681614fb6565b975060408a01356150a681614fb6565b965060608a01356150b681614fb6565b955060e0607f19820112156150ca57600080fd5b5060808901935061016089013592506101808901356001600160401b03808211156150f457600080fd5b6151008c838d01614e31565b93506101a08b013591508082111561511757600080fd5b506151248b828c01614e31565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c03121561515357600080fd5b61515c8a614b5a565b985061516a60208b01614b5a565b975061517860408b01614b5a565b965061518660608b01614b5a565b955060808a0135945060a08a013593506151a38b60c08c01614c3d565b92506151b38b6101008c01614c54565b91506151c38b6101808c01614c3d565b90509295985092959850929598565b6000602082840312156151e457600080fd5b5035919050565b80151581146128a857600080fd5b60006020828403121561520b57600080fd5b8135614c36816151eb565b60006020828403121561522857600080fd5b81356001600160401b0381111561523e57600080fd5b6149d984828501614e31565b6000602080838503121561525d57600080fd5b82356001600160401b038082111561527457600080fd5b818501915085601f83011261528857600080fd5b8135615296614eec82614e0e565b81815260059190911b830184019084810190888311156152b557600080fd5b8585015b83811015614fa9578035858111156152d15760008081fd5b86016060818c03601f19018113156152e95760008081fd5b6152f1614dbc565b89830135888111156153035760008081fd5b6153118e8c83870101614e31565b8252506040808401358b830152615329838501614b5a565b90820152855250509186019186016152b9565b6000806000806080858703121561535257600080fd5b61535b85614b5a565b93506020850135925061537060408601614b5a565b915061537e60608601614b5a565b905092959194509250565b6000806040838503121561539c57600080fd5b82356001600160401b038111156153b257600080fd5b6153be85828601614e31565b95602094909401359450505050565b600080604083850312156153e057600080fd5b823591506153f060208401614b5a565b90509250929050565b60208082526058908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2070656e60408201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560608201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608082015260a00190565b6020808252604c908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760608201526b040e6e8c2e8ca40c4c2e8c6d60a31b608082015260a00190565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786060820152621a5cdd60ea1b608082015260a00190565b6020808252605d908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060608201527f7468616e2063757272656e744c61737456657269666965644261746368000000608082015260a00190565b60208082526057908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2066696e60408201527f616c4e65774261746368206d75737420626520626967676572207468616e206360608201527f757272656e744c61737456657269666965644261746368000000000000000000608082015260a00190565b6000825161566f818460208701614bcb565b9190910192915050565b60006020828403121561568b57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826156b7576156b7615692565b500690565b600181811c908216806156d057607f821691505b6020821081036156f057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561577157615771615739565b01949350505050565b60208082526045908201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361587f5761587f615739565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b60006001820161590257615902615739565b5060010190565b60006001600160401b038381169083168181101561592957615929615739565b039392505050565b60008282101561594357615943615739565b500390565b600081600019048311821515161561596257615962615739565b500290565b601f82111561493a57600081815260208120601f850160051c8101602086101561598e5750805b601f850160051c820191505b8181101561405c5782815560010161599a565b81516001600160401b038111156159c6576159c6614d7e565b6159da816159d484546156bc565b84615967565b602080601f831160018114615a0f57600084156159f75750858301515b600019600386901b1c1916600185901b17855561405c565b600085815260208120601f198616915b82811015615a3e57888601518255948401946001909101908401615a1f565b5085821015615a5c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615a7b57615a7b615692565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b60008219821115615afc57615afc615739565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b0383166020820152606060408201819052600090615be590830184614bf7565b95945050505050565b60006001600160401b0380841680615c0857615c08615692565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615c4c57848483379084018281529284019290600101615c2c565b5050828760c0870137610100850181815286935091505b6001811015615c82578251825260209283019290910190600101615c63565b50505095945050505050565b600060208284031215615ca057600080fd5b8151614c36816151eb565b600181815b80851115615ce6578160001904821115615ccc57615ccc615739565b80851615615cd957918102915b93841c9390800290615cb0565b509250929050565b600082615cfd57506001614c4e565b81615d0a57506000614c4e565b8160018114615d205760028114615d2a57615d46565b6001915050614c4e565b60ff841115615d3b57615d3b615739565b50506001821b614c4e565b5060208310610133831016604e8410600b8410161715615d69575081810a614c4e565b615d738383615cab565b8060001904821115615d8757615d87615739565b029392505050565b6000614c368383615cee56fe506f6c79676f6e5a6b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a6b45564d3a3a70726f76654e6f6e44657465726d696e6973a26469706673582212203b896811df785f2c935e7d55262e5d849cb41ca125cff902749e283a0cbe365c64736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106104125760003560e01c806396dc3d3911610220578063cfa8ed4711610130578063e7a7ed02116100b8578063f14916d611610087578063f14916d6146109e3578063f2fde38b146109f6578063f851a44014610a09578063f8b823e414610a1c578063fe16564f14610a2557600080fd5b8063e7a7ed0214610990578063e8bf92ed146109aa578063eaeb077b146109bd578063edc41121146109d057600080fd5b8063d939b315116100ff578063d939b3151461093f578063dbc1697614610959578063e0d1744114610961578063e11f3f1814610974578063e217cfd61461098757600080fd5b8063cfa8ed47146108eb578063d02103ca14610905578063d8d1091b14610918578063d8f54db01461092b57600080fd5b8063ab9fc5ef116101b3578063b6b0b09711610182578063b6b0b09714610890578063c0cad302146108aa578063c0ed84e0146108bd578063c89e42df146108c5578063cf136306146108d857600080fd5b8063ab9fc5ef146107e4578063adc879e9146107ee578063afd23cbe14610808578063b4d63f581461083057600080fd5b80639eb831b9116101ef5780639eb831b9146107a95780639f0d039d146107b1578063a3c573eb146107b9578063aa58bad6146107cc57600080fd5b806396dc3d391461076857806399f5634e1461077b5780639b796760146107835780639c9f3dfe1461079657600080fd5b80634a910e6a11610326578063715018a6116102ae578063837a47381161027d578063837a4738146106b2578063841b24d7146107205780638b48931e1461073a5780638c4a0af7146107445780638da5cb5b1461075757600080fd5b8063715018a6146106715780637215541a1461067957806375c508b31461068c5780637fcb36531461069f57600080fd5b8063574f649e116102f5578063574f649e1461060557806360943d6a146106185780636b8616ce1461062b5780636ff512cc1461064b578063704b6c021461065e57600080fd5b80634a910e6a146105b75780635392c5e0146105ca578063542028d5146105ea5780635437988d146105f257600080fd5b80632d0889d3116103a9578063423fa85611610378578063423fa85614610543578063456052671461055d578063458c0477146105775780634834a3431461058a5780634a1a89a71461059d57600080fd5b80632d0889d314610500578063383b3be81461050a578063394218e91461051d5780633c1582671461053057600080fd5b80631816b7e5116103e55780631816b7e51461048457806319d8ac6114610497578063220d7899146104c257806329878983146104d557600080fd5b80630eaa86ea14610417578063107bf28c1461043d57806310a01a721461045257806315064c9614610467575b600080fd5b61042a610425366004614b76565b610a38565b6040519081526020015b60405180910390f35b610445610c19565b6040516104349190614c23565b610465610460366004614c65565b610ca7565b005b6065546104749060ff1681565b6040519015158152602001610434565b610465610492366004614cf2565b610ef1565b6068546104aa906001600160401b031681565b6040516001600160401b039091168152602001610434565b6104456104d0366004614d16565b611017565b606a546104e8906001600160a01b031681565b6040516001600160a01b039091168152602001610434565b61042a620493e081565b610474610518366004614d63565b6111bd565b61046561052b366004614d63565b611204565b61046561053e366004614ea0565b611353565b6068546104aa90600160401b90046001600160401b031681565b6068546104aa90600160801b90046001600160401b031681565b6072546104aa906001600160401b031681565b610465610598366004614c65565b611b55565b6072546104aa90600160401b90046001600160401b031681565b6104656105c5366004614d63565b611e9e565b61042a6105d8366004614d63565b606d6020526000908152604090205481565b610445612139565b610465610600366004614fcb565b612146565b61042a610613366004614fe8565b612170565b61046561062636600461505d565b6121b3565b61042a610639366004614d63565b60666020526000908152604090205481565b610465610659366004614fcb565b612523565b61046561066c366004614fcb565b6125a7565b61046561261f565b610465610687366004614d63565b612633565b61046561069a366004615134565b6128ab565b6069546104aa906001600160401b031681565b6106f56106c03660046151d2565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610434565b6072546104aa90600160c01b90046001600160401b031681565b6104aa62093a8081565b6104656107523660046151f9565b61293a565b6033546001600160a01b03166104e8565b610465610776366004614d63565b6129b1565b61042a6129dc565b610465610791366004614d63565b612abf565b6104656107a4366004614d63565b612af4565b61042a600c81565b60745461042a565b6070546104e8906001600160a01b031681565b6065546104aa9061010090046001600160401b031681565b6104aa6206978081565b606c546104aa90600160a81b90046001600160401b031681565b60655461081d90600160481b900461ffff1681565b60405161ffff9091168152602001610434565b61086b61083e366004614d63565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610434565b6065546104e890600160581b90046001600160a01b031681565b6104656108b8366004615216565b612c3a565b6104aa612c52565b6104656108d3366004615216565b612c9f565b6104656108e6366004614d63565b612d05565b6069546104e890600160401b90046001600160a01b031681565b606c546104e8906001600160a01b031681565b61046561092636600461524a565b612d86565b606c5461047490600160a01b900460ff1681565b6072546104aa90600160801b90046001600160401b031681565b610465613250565b61046561096f36600461533c565b61330c565b610465610982366004615134565b61337e565b6104aa6103e881565b6068546104aa90600160c01b90046001600160401b031681565b606b546104e8906001600160a01b031681565b6104656109cb366004615389565b6134c3565b6104656109de366004614c65565b6137ec565b6104656109f1366004614fcb565b61390c565b610465610a04366004614fcb565b613984565b6073546104e8906001600160a01b031681565b61042a60745481565b610465610a333660046153cd565b6139fa565b6000806000610a45612c52565b90506001600160401b03881615610ae2576072546001600160401b039081169089161115610a8e5760405162461bcd60e51b8152600401610a85906153f9565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610adc5760405162461bcd60e51b8152600401610a859061547c565b50610b4c565b6001600160401b0387166000908152606d6020526040902054915081610b1a5760405162461bcd60e51b8152600401610a85906154ee565b806001600160401b0316876001600160401b03161115610b4c5760405162461bcd60e51b8152600401610a8590615557565b806001600160401b0316866001600160401b031611610b7d5760405162461bcd60e51b8152600401610a85906155da565b6000610b8c8888888689611017565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051610bc1919061565d565b602060405180830381855afa158015610bde573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c019190615679565b610c0b91906156a8565b9a9950505050505050505050565b606f8054610c26906156bc565b80601f0160208091040260200160405190810160405280929190818152602001828054610c52906156bc565b8015610c9f5780601f10610c7457610100808354040283529160200191610c9f565b820191906000526020600020905b815481529060010190602001808311610c8257829003601f168201915b505050505081565b610caf613a1c565b600080610cba612c52565b90506001600160401b038a1615610d4e576072546001600160401b03908116908b161115610cfa5760405162461bcd60e51b8152600401610a85906153f9565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610d485760405162461bcd60e51b8152600401610a859061547c565b50610db8565b6001600160401b0389166000908152606d6020526040902054915081610d865760405162461bcd60e51b8152600401610a85906154ee565b806001600160401b0316896001600160401b03161115610db85760405162461bcd60e51b8152600401610a8590615557565b806001600160401b0316886001600160401b031611610de95760405162461bcd60e51b8152600401610a85906155da565b6000610df88a8a8a868b611017565b6069805467ffffffffffffffff19166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610e4657607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610e8c57600080fd5b505af1158015610ea0573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610f1b5760405162461bcd60e51b8152600401610a85906156f6565b6103e88161ffff16118015610f3557506104008161ffff16105b610fba5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a401610a85565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b0380861660008181526067602052604080822054938816825290205460609291158061104957508115155b6110bd576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a85565b80611132576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a85565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b03828116600090815260716020526040812054909242926111f392600160801b9092048116911661574f565b6001600160401b0316111592915050565b6073546001600160a01b0316331461122e5760405162461bcd60e51b8152600401610a85906156f6565b62093a806001600160401b038216111561125a5760405162461bcd60e51b8152600401610a859061577a565b60655460ff166112fd576072546001600160401b03600160c01b9091048116908216106112fd5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a401610a85565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a19060200161100c565b60655460ff16156113765760405162461bcd60e51b8152600401610a85906157e5565b606954600160401b90046001600160a01b031633146113fd5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e6365720000000000006064820152608401610a85565b8051806114725760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e636520312062617463680000006064820152608401610a85565b6103e881106114eb576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e7920626174636865736064820152608401610a85565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561197957600087828151811061153e5761153e61584d565b60200260200101519050600081606001516001600160401b031611156116f7578361156881615863565b94505060008160000151805190602001208260200151836060015160405160200161159593929190615889565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461163b5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d617463680000006064820152608401610a85565b81606001516001600160401b031682604001516001600160401b031610156116f15760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a401610a85565b5061186c565b602081015115806117805750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b36329161173a9160040190815260200190565b6020604051808303816000875af1158015611759573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177d9190615679565b15155b6117f25760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d7573742065786973740000000000006064820152608401610a85565b805151620493e01161186c5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610a85565b856001600160401b031681604001516001600160401b03161015801561189f57504281604001516001600160401b031611155b6119115760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e67650000006064820152608401610a85565b805180516020918201208183015160408085015190516119389488949392913391016158ac565b604051602081830303815290604052805190602001209250848061195b90615863565b95505080604001519550508080611971906158f0565b915050611522565b506068546001600160401b03600160c01b909104811690831611156119fe5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b6064820152608401610a85565b606854600090611a1e90600160801b90046001600160401b031684615909565b611a31906001600160401b031687615931565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611b0690339030908490611aeb9190615948565b606554600160581b90046001600160a01b0316929190613a76565b611b0e613ae1565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b785760405162461bcd60e51b8152600401610a85906157e5565b6072546001600160401b038781166000908152606760205260409020600101544292611baf92600160c01b9091048116911661574f565b6001600160401b03161115611c385760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a401610a85565b6103e8611c458888615909565b6001600160401b031610611cc15760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e792062617463686573000000006064820152608401610a85565b611cd18888888888888888613b81565b611cda86613e7e565b607254600160801b90046001600160401b0316600003611da2576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615611d3f57607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d8557600080fd5b505af1158015611d99573d6000803e3d6000fd5b50505050611e53565b611daa613ae1565b607280546001600160401b0316906000611dc383615863565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611ecb57506072546001600160401b03600160401b9091048116908216115b8015611ee657506072546001600160401b0390811690821611155b611f645760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a401610a85565b606a546001600160a01b0316331461200e57611f7f816111bd565b61200e5760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a401610a85565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b1580156120cb57600080fd5b505af11580156120df573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e846002015460405161212c91815260200190565b60405180910390a3505050565b606e8054610c26906156bc565b61214e613a1c565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b60008585805190602001208585856040516020016121929594939291906158ac565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff16158080156121d35750600054600160ff909116105b806121ed5750303b1580156121ed575060005460ff166001145b6122505760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a85565b6000805460ff191660011790558015612273576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a8416179055607080549091169188169190911790556122f06020860186614fcb565b607380546001600160a01b0319166001600160a01b03929092169190911790556123206060860160408701614fcb565b606980546001600160a01b0392909216600160401b02600160401b600160e01b031990921691909117905561235b60c0860160a08701614fcb565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa7113568490556123b860e0860160c08701614d63565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556123ef6040860160208701614d63565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561242b6080860160608701614d63565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b1990921691909117905561246760a08601608087016151f9565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e61248f84826159ad565b50606f61249c83826159ad565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124d2614064565b8015612518576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b0316331461254d5760405162461bcd60e51b8152600401610a85906156f6565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161100c565b6073546001600160a01b031633146125d15760405162461bcd60e51b8152600401610a85906156f6565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a19060200161100c565b612627613a1c565b61263160006140d4565b565b6033546001600160a01b031633146128a0576072546000906001600160401b03161561268457506072546001600160401b03908116600090815260716020526040902054600160401b900416612692565b506069546001600160401b03165b80826001600160401b0316116127105760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c7265616479207665726966696564000000006064820152608401610a85565b6068546001600160401b03600160401b90910481169083161180159061275257506001600160401b038083166000908152606760205260409020600101541615155b6127dd5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a401610a85565b6001600160401b03808316600090815260676020526040902060010154429161280b9162093a80911661574f565b6001600160401b0316111561289e5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a401610a85565b505b6128a8614126565b50565b60655460ff16156128ce5760405162461bcd60e51b8152600401610a85906157e5565b6128df898989898989898989614196565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1612518614126565b6073546001600160a01b031633146129645760405162461bcd60e51b8152600401610a85906156f6565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061100c90831515815260200190565b6129b9613a1c565b6069805467ffffffffffffffff19166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a539190615679565b90506000612a5f612c52565b6068546001600160401b03600160401b8204811691612a8f91600160801b8204811691600160c01b900416615909565b612a99919061574f565b612aa39190615909565b6001600160401b03169050612ab88183615a6c565b9250505090565b612ac7613a1c565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612b1e5760405162461bcd60e51b8152600401610a85906156f6565b62093a806001600160401b0382161115612b4a5760405162461bcd60e51b8152600401610a859061577a565b60655460ff16612bdf576072546001600160401b03600160801b909104811690821610612bdf5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f776572006064820152608401610a85565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c759060200161100c565b612c42613a1c565b606f612c4e82826159ad565b5050565b6072546000906001600160401b031615612c8f57506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612cc95760405162461bcd60e51b8152600401610a85906156f6565b606e612cd582826159ad565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161100c9190614c23565b6073546001600160a01b03163314612d2f5760405162461bcd60e51b8152600401610a85906156f6565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f9060200161100c565b60655460ff1615612da95760405162461bcd60e51b8152600401610a85906157e5565b606c54600160a01b900460ff161515600114612dd75760405162461bcd60e51b8152600401610a8590615a80565b805180612e3a5760405162461bcd60e51b815260206004820152603d6024820152600080516020615d9c83398151915260448201527f3a204d75737420666f726365206174206c6561737420312062617463680000006064820152608401610a85565b6103e88110612eab5760405162461bcd60e51b81526020600482015260436024820152600080516020615d9c83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a401610a85565b6068546001600160401b03600160c01b8204811691612ed3918491600160801b900416615ae9565b1115612f2d5760405162461bcd60e51b81526020600482015260356024820152600080516020615d9c8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b6064820152608401610a85565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015613159576000868281518110612f7a57612f7a61584d565b602002602001015190508380612f8f90615863565b945050600081600001518051906020012082602001518360400151604051602001612fbc93929190615889565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461305b5760405162461bcd60e51b81526020600482015260426024820152600080516020615d9c83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a401610a85565b613066600188615931565b83036130fb5742620697808360400151613080919061574f565b6001600160401b031611156130fb5760405162461bcd60e51b81526020600482015260476024820152600080516020615d9c83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a401610a85565b815180516020918201208184015160405161311e938893929142913391016158ac565b604051602081830303815290604052805190602001209350858061314190615863565b96505050508080613151906158f0565b915050612f5e565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166132725760405162461bcd60e51b8152600401610a8590615b01565b6073546001600160a01b0316331461329c5760405162461bcd60e51b8152600401610a85906156f6565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156132ec57600080fd5b505af1158015613300573d6000803e3d6000fd5b50505050612631614811565b613314613a1c565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133a85760405162461bcd60e51b8152600401610a8590615b5e565b6133b9898989898989898989614196565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561340457607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561344a57600080fd5b505af115801561345e573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff16156134e65760405162461bcd60e51b8152600401610a85906157e5565b606c54600160a01b900460ff1615156001146135145760405162461bcd60e51b8152600401610a8590615a80565b600061351f60745490565b9050818111156135845760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b6064820152608401610a85565b620493e08351106135f55760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b6064820152608401610a85565b60655461361490600160581b90046001600160a01b0316333084613a76565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa15801561365e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136829190615679565b60688054919250600160c01b9091046001600160401b03169060186136a683615863565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016136e793929190615889565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361378b57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26137e6565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516137dd93929190615bbb565b60405180910390a25b50505050565b606a546001600160a01b031633146138165760405162461bcd60e51b8152600401610a8590615b5e565b6138268888888888888888613b81565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561387157607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156138b757600080fd5b505af11580156138cb573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e8c565b6073546001600160a01b031633146139365760405162461bcd60e51b8152600401610a85906156f6565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca9060200161100c565b61398c613a1c565b6001600160a01b0381166139f15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a85565b6128a8816140d4565b613a02613a1c565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b031633146126315760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a85565b6040516001600160a01b03808516602483015283166044820152606481018290526137e69085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614868565b6072546001600160401b03600160401b820481169116111561263157607254600090613b1e90600160401b90046001600160401b0316600161574f565b9050613b29816111bd565b156128a857607254600090600290613b4b9084906001600160401b0316615909565b613b559190615bee565b613b5f908361574f565b9050613b6a816111bd565b15613b7857612c4e81611e9e565b612c4e82611e9e565b600080613b8c612c52565b90506001600160401b038a1615613c20576072546001600160401b03908116908b161115613bcc5760405162461bcd60e51b8152600401610a85906153f9565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c1a5760405162461bcd60e51b8152600401610a859061547c565b50613c8a565b6001600160401b0389166000908152606d6020526040902054915081613c585760405162461bcd60e51b8152600401610a85906154ee565b806001600160401b0316896001600160401b03161115613c8a5760405162461bcd60e51b8152600401610a8590615557565b806001600160401b0316886001600160401b031611613cbb5760405162461bcd60e51b8152600401610a85906155da565b6000613cca8a8a8a868b611017565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051613cff919061565d565b602060405180830381855afa158015613d1c573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613d3f9190615679565b613d4991906156a8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613d8d918b918b918b9190600401615c14565b602060405180830381865afa158015613daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dce9190615c8e565b613e2d5760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20496e7660448201526930b634b210383937b7b360b11b6064820152608401610a85565b613e7033613e3b858d615909565b6001600160401b0316613e4c6129dc565b613e569190615948565b606554600160581b90046001600160a01b0316919061493f565b505050505050505050505050565b6000613e88612c52565b905081600080613e988484615909565b6001600160401b031690505b836001600160401b0316836001600160401b031614613f4a576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613ef4911642615931565b1115613f2f576001810154613f1990600160401b90046001600160401b031686615909565b613f2c906001600160401b031684615ae9565b92505b60010154600160401b90046001600160401b03169250613ea4565b6000613f568383615931565b905082811015613fd0576000613f6c8285615931565b9050600c8111613f7c5780613f7f565b600c5b9050613f8c816003615948565b613f9790600a615d8f565b606554613fb0908390600160481b900461ffff16615d8f565b607454613fbd9190615948565b613fc79190615a6c565b6074555061405c565b6000613fdc8483615931565b9050600c8111613fec5780613fef565b600c5b90506000613ffe826003615948565b61400990600a615d8f565b606554614022908490600160481b900461ffff16615d8f565b60745461402f9190615948565b6140399190615a6c565b90508060745460745461404c9190615948565b6140569190615a6c565b60745550505b505050505050565b600054610100900460ff166140cf5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a85565b612631335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561417657600080fd5b505af115801561418a573d6000803e3d6000fd5b5050505061263161496f565b60006001600160401b038a1615614311576072546001600160401b03908116908b1611156142555760405162461bcd60e51b815260206004820152606c6024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c401610a85565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b909204161461430b5760405162461bcd60e51b81526020600482015260606024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a401610a85565b50614465565b506001600160401b0387166000908152606d6020526040902054806143b25760405162461bcd60e51b81526020600482015260576024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a401610a85565b6069546001600160401b0390811690891611156144655760405162461bcd60e51b81526020600482015260716024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c401610a85565b6072546001600160401b03908116908a16118015906144955750896001600160401b0316896001600160401b0316115b80156144b657506072546001600160401b03600160401b9091048116908a16115b61452e5760405162461bcd60e51b815260206004820152604f6024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a401610a85565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146145ee5760405162461bcd60e51b815260206004820152606a6024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c401610a85565b60006145fd898989858a611017565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051614632919061565d565b602060405180830381855afa15801561464f573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906146729190615679565b61467c91906156a8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916146c0918a918a918a9190600401615c14565b602060405180830381865afa1580156146dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147019190615c8e565b6147615760405162461bcd60e51b815260206004820152603e6024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a20496e76616c69642070726f6f6600006064820152608401610a85565b6001600160401b038b16600090815260716020526040902060020154879003613e705760405162461bcd60e51b81526020600482015260626024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c401610a85565b60655460ff166148335760405162461bcd60e51b8152600401610a8590615b01565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006148bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166149ca9092919063ffffffff16565b80519091501561493a57808060200190518101906148db9190615c8e565b61493a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a85565b505050565b6040516001600160a01b03831660248201526044810182905261493a90849063a9059cbb60e01b90606401613aaa565b60655460ff16156149925760405162461bcd60e51b8152600401610a85906157e5565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60606149d984846000856149e1565b949350505050565b606082471015614a425760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a85565b600080866001600160a01b03168587604051614a5e919061565d565b60006040518083038185875af1925050503d8060008114614a9b576040519150601f19603f3d011682016040523d82523d6000602084013e614aa0565b606091505b5091509150614ab187838387614abc565b979650505050505050565b60608315614b2b578251600003614b24576001600160a01b0385163b614b245760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a85565b50816149d9565b6149d98383815115614b405781518083602001fd5b8060405162461bcd60e51b8152600401610a859190614c23565b80356001600160401b0381168114614b7157600080fd5b919050565b600080600080600060a08688031215614b8e57600080fd5b614b9786614b5a565b9450614ba560208701614b5a565b9350614bb360408701614b5a565b94979396509394606081013594506080013592915050565b60005b83811015614be6578181015183820152602001614bce565b838111156137e65750506000910152565b60008151808452614c0f816020860160208601614bcb565b601f01601f19169290920160200192915050565b602081526000614c366020830184614bf7565b9392505050565b8060408101831015614c4e57600080fd5b92915050565b8060808101831015614c4e57600080fd5b6000806000806000806000806101a0898b031215614c8257600080fd5b614c8b89614b5a565b9750614c9960208a01614b5a565b9650614ca760408a01614b5a565b95506060890135945060808901359350614cc48a60a08b01614c3d565b9250614cd38a60e08b01614c54565b9150614ce38a6101608b01614c3d565b90509295985092959890939650565b600060208284031215614d0457600080fd5b813561ffff81168114614c3657600080fd5b600080600080600060a08688031215614d2e57600080fd5b614d3786614b5a565b9450614d4560208701614b5a565b94979496505050506040830135926060810135926080909101359150565b600060208284031215614d7557600080fd5b614c3682614b5a565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614db657614db6614d7e565b60405290565b604051606081016001600160401b0381118282101715614db657614db6614d7e565b604051601f8201601f191681016001600160401b0381118282101715614e0657614e06614d7e565b604052919050565b60006001600160401b03821115614e2757614e27614d7e565b5060051b60200190565b600082601f830112614e4257600080fd5b81356001600160401b03811115614e5b57614e5b614d7e565b614e6e601f8201601f1916602001614dde565b818152846020838601011115614e8357600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614eb357600080fd5b82356001600160401b0380821115614eca57600080fd5b818501915085601f830112614ede57600080fd5b8135614ef1614eec82614e0e565b614dde565b81815260059190911b83018401908481019088831115614f1057600080fd5b8585015b83811015614fa957803585811115614f2c5760008081fd5b86016080818c03601f1901811315614f445760008081fd5b614f4c614d94565b8983013588811115614f5e5760008081fd5b614f6c8e8c83870101614e31565b8252506040808401358b8301526060614f86818601614b5a565b82840152614f95848601614b5a565b908301525085525050918601918601614f14565b5098975050505050505050565b6001600160a01b03811681146128a857600080fd5b600060208284031215614fdd57600080fd5b8135614c3681614fb6565b600080600080600060a0868803121561500057600080fd5b8535945060208601356001600160401b0381111561501d57600080fd5b61502988828901614e31565b9450506040860135925061503f60608701614b5a565b9150608086013561504f81614fb6565b809150509295509295909350565b600080600080600080600080888a036101c081121561507b57600080fd5b893561508681614fb6565b985060208a013561509681614fb6565b975060408a01356150a681614fb6565b965060608a01356150b681614fb6565b955060e0607f19820112156150ca57600080fd5b5060808901935061016089013592506101808901356001600160401b03808211156150f457600080fd5b6151008c838d01614e31565b93506101a08b013591508082111561511757600080fd5b506151248b828c01614e31565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c03121561515357600080fd5b61515c8a614b5a565b985061516a60208b01614b5a565b975061517860408b01614b5a565b965061518660608b01614b5a565b955060808a0135945060a08a013593506151a38b60c08c01614c3d565b92506151b38b6101008c01614c54565b91506151c38b6101808c01614c3d565b90509295985092959850929598565b6000602082840312156151e457600080fd5b5035919050565b80151581146128a857600080fd5b60006020828403121561520b57600080fd5b8135614c36816151eb565b60006020828403121561522857600080fd5b81356001600160401b0381111561523e57600080fd5b6149d984828501614e31565b6000602080838503121561525d57600080fd5b82356001600160401b038082111561527457600080fd5b818501915085601f83011261528857600080fd5b8135615296614eec82614e0e565b81815260059190911b830184019084810190888311156152b557600080fd5b8585015b83811015614fa9578035858111156152d15760008081fd5b86016060818c03601f19018113156152e95760008081fd5b6152f1614dbc565b89830135888111156153035760008081fd5b6153118e8c83870101614e31565b8252506040808401358b830152615329838501614b5a565b90820152855250509186019186016152b9565b6000806000806080858703121561535257600080fd5b61535b85614b5a565b93506020850135925061537060408601614b5a565b915061537e60608601614b5a565b905092959194509250565b6000806040838503121561539c57600080fd5b82356001600160401b038111156153b257600080fd5b6153be85828601614e31565b95602094909401359450505050565b600080604083850312156153e057600080fd5b823591506153f060208401614b5a565b90509250929050565b60208082526058908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2070656e60408201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560608201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608082015260a00190565b6020808252604c908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760608201526b040e6e8c2e8ca40c4c2e8c6d60a31b608082015260a00190565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786060820152621a5cdd60ea1b608082015260a00190565b6020808252605d908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060608201527f7468616e2063757272656e744c61737456657269666965644261746368000000608082015260a00190565b60208082526057908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2066696e60408201527f616c4e65774261746368206d75737420626520626967676572207468616e206360608201527f757272656e744c61737456657269666965644261746368000000000000000000608082015260a00190565b6000825161566f818460208701614bcb565b9190910192915050565b60006020828403121561568b57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826156b7576156b7615692565b500690565b600181811c908216806156d057607f821691505b6020821081036156f057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561577157615771615739565b01949350505050565b60208082526045908201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361587f5761587f615739565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b60006001820161590257615902615739565b5060010190565b60006001600160401b038381169083168181101561592957615929615739565b039392505050565b60008282101561594357615943615739565b500390565b600081600019048311821515161561596257615962615739565b500290565b601f82111561493a57600081815260208120601f850160051c8101602086101561598e5750805b601f850160051c820191505b8181101561405c5782815560010161599a565b81516001600160401b038111156159c6576159c6614d7e565b6159da816159d484546156bc565b84615967565b602080601f831160018114615a0f57600084156159f75750858301515b600019600386901b1c1916600185901b17855561405c565b600085815260208120601f198616915b82811015615a3e57888601518255948401946001909101908401615a1f565b5085821015615a5c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615a7b57615a7b615692565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b60008219821115615afc57615afc615739565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b0383166020820152606060408201819052600090615be590830184614bf7565b95945050505050565b60006001600160401b0380841680615c0857615c08615692565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615c4c57848483379084018281529284019290600101615c2c565b5050828760c0870137610100850181815286935091505b6001811015615c82578251825260209283019290910190600101615c63565b50505095945050505050565b600060208284031215615ca057600080fd5b8151614c36816151eb565b600181815b80851115615ce6578160001904821115615ccc57615ccc615739565b80851615615cd957918102915b93841c9390800290615cb0565b509250929050565b600082615cfd57506001614c4e565b81615d0a57506000614c4e565b8160018114615d205760028114615d2a57615d46565b6001915050614c4e565b60ff841115615d3b57615d3b615739565b50506001821b614c4e565b5060208310610133831016604e8410600b8410161715615d69575081810a614c4e565b615d738383615cab565b8060001904821115615d8757615d87615739565b029392505050565b6000614c368383615cee56fe506f6c79676f6e5a6b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a6b45564d3a3a70726f76654e6f6e44657465726d696e6973a26469706673582212203b896811df785f2c935e7d55262e5d849cb41ca125cff902749e283a0cbe365c64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/PolygonZkEVM.sol b/contracts/PolygonZkEVM.sol index 4c971d80e..c19cec098 100644 --- a/contracts/PolygonZkEVM.sol +++ b/contracts/PolygonZkEVM.sol @@ -737,7 +737,7 @@ contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { // Verify proof require( rollupVerifier.verifyProof(proofA, proofB, proofC, [inputSnark]), - "PolygonZkEVM::verifyBatches: invalid proof" + "PolygonZkEVM::verifyBatches: Invalid proof" ); // Get MATIC reward @@ -1372,7 +1372,7 @@ contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { // Verify proof require( rollupVerifier.verifyProof(proofA, proofB, proofC, [inputSnark]), - "PolygonZkEVM::proveNonDeterministicPendingState: invalid proof" + "PolygonZkEVM::proveNonDeterministicPendingState: Invalid proof" ); require( diff --git a/contracts/PolygonZkEVMBridge.sol b/contracts/PolygonZkEVMBridge.sol index 740b0f315..a99792525 100644 --- a/contracts/PolygonZkEVMBridge.sol +++ b/contracts/PolygonZkEVMBridge.sol @@ -145,7 +145,7 @@ contract PolygonZkEVMBridge is // Ether transfer require( msg.value == amount, - "PolygonZkEVMBridge::bridgeAsset: amount does not match message.value" + "PolygonZkEVMBridge::bridgeAsset: Amount does not match message.value" ); // Ether is treated as ether from mainnet From 9a841ee071db6ebf411c83b417f1e9d15ea62b68 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Wed, 21 Dec 2022 10:51:53 +0100 Subject: [PATCH 64/71] update hardhat config --- deployment/deployPoE_v2-0.js | 2 +- hardhat.config.js | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/deployment/deployPoE_v2-0.js b/deployment/deployPoE_v2-0.js index 46829ff07..a1b7eb556 100644 --- a/deployment/deployPoE_v2-0.js +++ b/deployment/deployPoE_v2-0.js @@ -7,11 +7,11 @@ const fs = require('fs'); require('dotenv').config({ path: path.resolve(__dirname, '../.env') }); const pathOutputJson = path.join(__dirname, './deploy_output.json'); - const deployParameters = require('./deploy_parameters.json'); const genesis = require('./genesis.json'); async function main() { + // Check if it's .openzeppelin and revert if it exists const networkIDMainnet = 0; const forceBatchAllowed = Boolean(deployParameters.forceBatchAllowed); const trustedSequencer = deployParameters.trustedSequencerAddress; diff --git a/hardhat.config.js b/hardhat.config.js index 8bbfcb54f..7e342b3ee 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -129,6 +129,15 @@ module.exports = { count: 20, }, }, + zkevm: { + url: 'https://rpc.public2.zkevm-test.net', + accounts: { + mnemonic: process.env.MNEMONIC || DEFAULT_MNEMONIC, + path: "m/44'/60'/0'/0", + initialIndex: 0, + count: 20, + }, + }, }, gasReporter: { currency: 'USD', @@ -137,5 +146,15 @@ module.exports = { }, etherscan: { apiKey: `${process.env.ETHERSCAN_API_KEY}`, + customChains: [ + { + network: "zkevm", + chainId: 1422, + urls: { + apiURL: "https://explorer.public2.zkevm-test.net/api", + browserURL: "https://explorer.public2.zkevm-test.net" + } + } + ] } }; \ No newline at end of file From cc7475c72db8b3972aff0f3225efeedcc9750ede Mon Sep 17 00:00:00 2001 From: invocamanman Date: Wed, 21 Dec 2022 11:08:23 +0100 Subject: [PATCH 65/71] update tests with new errror names --- test/contracts/bridge.test.js | 46 ++++++++++---------- test/contracts/emergencyManager.test.js | 4 +- test/contracts/globalExitRootManager.test.js | 2 +- 3 files changed, 26 insertions(+), 26 deletions(-) diff --git a/test/contracts/bridge.test.js b/test/contracts/bridge.test.js index 4891a7152..3df4d218b 100644 --- a/test/contracts/bridge.test.js +++ b/test/contracts/bridge.test.js @@ -66,7 +66,7 @@ describe('PolygonZkEVMBridge Contract', () => { it('should check the constructor parameters', async () => { expect(await polygonZkEVMBridgeContract.globalExitRootManager()).to.be.equal(polygonZkEVMGlobalExitRoot.address); expect(await polygonZkEVMBridgeContract.networkID()).to.be.equal(networkIDMainnet); - expect(await polygonZkEVMBridgeContract.zkEVMaddress()).to.be.equal(polygonZkEVMAddress); + expect(await polygonZkEVMBridgeContract.polygonZkEVMaddress()).to.be.equal(polygonZkEVMAddress); }); it('should PolygonZkEVMBridge asset and verify merkle proof', async () => { @@ -227,7 +227,7 @@ describe('PolygonZkEVMBridge Contract', () => { // check only rollup account with update rollup exit root await expect(polygonZkEVMGlobalExitRoot.updateExitRoot(rootJSRollup)) - .to.be.revertedWith('PolygonZkEVMGlobalExitRoot::updateExitRoot: ONLY_ALLOWED_CONTRACTS'); + .to.be.revertedWith('PolygonZkEVMGlobalExitRoot::updateExitRoot: Only allowed contracts'); // add rollup Merkle root await expect(polygonZkEVMGlobalExitRoot.connect(rollup).updateExitRoot(rootJSRollup)) @@ -312,7 +312,7 @@ describe('PolygonZkEVMBridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('PolygonZkEVMBridge::_verifyLeaf: ALREADY_CLAIMED'); + )).to.be.revertedWith('PolygonZkEVMBridge::_verifyLeaf: Already claimed'); expect(true).to.be.equal(await polygonZkEVMBridgeContract.isClaimed(index)); }); @@ -347,7 +347,7 @@ describe('PolygonZkEVMBridge Contract', () => { // check only rollup account with update rollup exit root await expect(polygonZkEVMGlobalExitRoot.updateExitRoot(rootJSRollup)) - .to.be.revertedWith('PolygonZkEVMGlobalExitRoot::updateExitRoot: ONLY_ALLOWED_CONTRACTS'); + .to.be.revertedWith('PolygonZkEVMGlobalExitRoot::updateExitRoot: Only allowed contracts'); // add rollup Merkle root await expect(polygonZkEVMGlobalExitRoot.connect(rollup).updateExitRoot(rootJSRollup)) @@ -452,7 +452,7 @@ describe('PolygonZkEVMBridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('PolygonZkEVMBridge::_verifyLeaf: ALREADY_CLAIMED'); + )).to.be.revertedWith('PolygonZkEVMBridge::_verifyLeaf: Already claimed'); // Check new token expect(await newWrappedToken.totalSupply()).to.be.equal(amount); @@ -733,7 +733,7 @@ describe('PolygonZkEVMBridge Contract', () => { .to.emit(tokenContract, 'Transfer') .withArgs(deployer.address, polygonZkEVMBridgeContract.address, amount); - // Check DESTINATION_NETWORK_DOES_NOT_MATCH assert + // Check Destination network does not match assert await expect(polygonZkEVMBridgeContract.claimAsset( proof, index, @@ -745,9 +745,9 @@ describe('PolygonZkEVMBridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('PolygonZkEVMBridge::_verifyLeaf: DESTINATION_NETWORK_DOES_NOT_MATCH'); + )).to.be.revertedWith('PolygonZkEVMBridge::_verifyLeaf: Destination network does not match'); - // Check GLOBAL_EXIT_ROOT_INVALID assert + // Check GlobalExitRoot invalid assert await expect(polygonZkEVMBridgeContract.claimAsset( proof, index, @@ -759,9 +759,9 @@ describe('PolygonZkEVMBridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('PolygonZkEVMBridge::_verifyLeaf: GLOBAL_EXIT_ROOT_INVALID'); + )).to.be.revertedWith('PolygonZkEVMBridge::_verifyLeaf: GlobalExitRoot invalid'); - // Check SMT_INVALID assert + // Check Invalid smt proof assert await expect(polygonZkEVMBridgeContract.claimAsset( proof, index + 1, // Wrong index @@ -773,7 +773,7 @@ describe('PolygonZkEVMBridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('PolygonZkEVMBridge::_verifyLeaf: SMT_INVALID'); + )).to.be.revertedWith('PolygonZkEVMBridge::_verifyLeaf: Invalid smt proof'); await expect(polygonZkEVMBridgeContract.claimAsset( proof, @@ -797,7 +797,7 @@ describe('PolygonZkEVMBridge Contract', () => { ).to.emit(tokenContract, 'Transfer') .withArgs(polygonZkEVMBridgeContract.address, deployer.address, amount); - // Check ALREADY_CLAIMED_claim + // Check Already claimed_claim await expect(polygonZkEVMBridgeContract.claimAsset( proof, index, @@ -809,7 +809,7 @@ describe('PolygonZkEVMBridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('PolygonZkEVMBridge::_verifyLeaf: ALREADY_CLAIMED'); + )).to.be.revertedWith('PolygonZkEVMBridge::_verifyLeaf: Already claimed'); }); it('should claim ether', async () => { @@ -882,7 +882,7 @@ describe('PolygonZkEVMBridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('PolygonZkEVMBridge::claimAsset: ETH_TRANSFER_FAILED'); + )).to.be.revertedWith('PolygonZkEVMBridge::claimAsset: Ether transfer failed'); const balanceDeployer = await ethers.provider.getBalance(deployer.address); /* @@ -896,7 +896,7 @@ describe('PolygonZkEVMBridge Contract', () => { amount, '0x', { value: ethers.utils.parseEther('100') }, - )).to.be.revertedWith('PolygonZkEVMBridge::bridgeAsset: AMOUNT_DOES_NOT_MATCH_MSG_VALUE'); + )).to.be.revertedWith('PolygonZkEVMBridge::bridgeAsset: Amount does not match message.value'); // Check mainnet destination assert await expect(polygonZkEVMBridgeContract.bridgeAsset( @@ -906,7 +906,7 @@ describe('PolygonZkEVMBridge Contract', () => { amount, '0x', { value: amount }, - )).to.be.revertedWith('PolygonZkEVMBridge::bridgeAsset: DESTINATION_CANT_BE_ITSELF'); + )).to.be.revertedWith('PolygonZkEVMBridge::bridgeAsset: Destination cannot be itself'); // This is used just to pay ether to the PolygonZkEVMBridge smart contract and be able to claim it afterwards. expect(await polygonZkEVMBridgeContract.bridgeAsset( @@ -959,7 +959,7 @@ describe('PolygonZkEVMBridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('PolygonZkEVMBridge::_verifyLeaf: ALREADY_CLAIMED'); + )).to.be.revertedWith('PolygonZkEVMBridge::_verifyLeaf: Already claimed'); }); it('should claim message', async () => { @@ -1032,7 +1032,7 @@ describe('PolygonZkEVMBridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('PolygonZkEVMBridge::_verifyLeaf: SMT_INVALID'); + )).to.be.revertedWith('PolygonZkEVMBridge::_verifyLeaf: Invalid smt proof'); /* * claim @@ -1049,7 +1049,7 @@ describe('PolygonZkEVMBridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('PolygonZkEVMBridge::claimMessage: MESSAGE_FAILED'); + )).to.be.revertedWith('PolygonZkEVMBridge::claimMessage: Message failed'); const balanceDeployer = await ethers.provider.getBalance(deployer.address); /* @@ -1063,7 +1063,7 @@ describe('PolygonZkEVMBridge Contract', () => { amount, '0x', { value: ethers.utils.parseEther('100') }, - )).to.be.revertedWith('PolygonZkEVMBridge::bridgeAsset: AMOUNT_DOES_NOT_MATCH_MSG_VALUE'); + )).to.be.revertedWith('PolygonZkEVMBridge::bridgeAsset: Amount does not match message.value'); // Check mainnet destination assert await expect(polygonZkEVMBridgeContract.bridgeAsset( @@ -1073,7 +1073,7 @@ describe('PolygonZkEVMBridge Contract', () => { amount, '0x', { value: amount }, - )).to.be.revertedWith('PolygonZkEVMBridge::bridgeAsset: DESTINATION_CANT_BE_ITSELF'); + )).to.be.revertedWith('PolygonZkEVMBridge::bridgeAsset: Destination cannot be itself'); // This is used just to pay ether to the PolygonZkEVMBridge smart contract and be able to claim it afterwards. expect(await polygonZkEVMBridgeContract.bridgeAsset( @@ -1101,7 +1101,7 @@ describe('PolygonZkEVMBridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('PolygonZkEVMBridge::_verifyLeaf: SMT_INVALID'); + )).to.be.revertedWith('PolygonZkEVMBridge::_verifyLeaf: Invalid smt proof'); await expect(polygonZkEVMBridgeContract.claimMessage( proof, @@ -1140,6 +1140,6 @@ describe('PolygonZkEVMBridge Contract', () => { destinationAddress, amount, metadata, - )).to.be.revertedWith('PolygonZkEVMBridge::_verifyLeaf: ALREADY_CLAIMED'); + )).to.be.revertedWith('PolygonZkEVMBridge::_verifyLeaf: Already claimed'); }); }); diff --git a/test/contracts/emergencyManager.test.js b/test/contracts/emergencyManager.test.js index 71f9f998a..566d3e75e 100644 --- a/test/contracts/emergencyManager.test.js +++ b/test/contracts/emergencyManager.test.js @@ -94,7 +94,7 @@ describe('Emergency mode test', () => { .to.be.revertedWith('PolygonZkEVM::activateEmergencyState: Batch not sequenced or not end of sequence'); await expect(polygonZkEVMBridgeContract.connect(deployer).activateEmergencyState()) - .to.be.revertedWith('PolygonZkEVM::onlyPolygonZkEVM: only Polygon ZK-EVM contract'); + .to.be.revertedWith('PolygonZkEVM::onlyPolygonZkEVM: only PolygonZkEVM contract'); await expect(polygonZkEVMContract.activateEmergencyState(0)) .to.emit(polygonZkEVMContract, 'EmergencyStateActivated') @@ -207,7 +207,7 @@ describe('Emergency mode test', () => { .to.be.revertedWith('EmergencyManager::ifNotEmergencyState: only if not emergency state'); await expect(polygonZkEVMBridgeContract.connect(deployer).deactivateEmergencyState()) - .to.be.revertedWith('PolygonZkEVM::onlyPolygonZkEVM: only Polygon ZK-EVM contract'); + .to.be.revertedWith('PolygonZkEVM::onlyPolygonZkEVM: only PolygonZkEVM contract'); await expect(polygonZkEVMContract.deactivateEmergencyState()) .to.be.revertedWith('PolygonZkEVM::onlyAdmin: only admin'); diff --git a/test/contracts/globalExitRootManager.test.js b/test/contracts/globalExitRootManager.test.js index 1533639bd..f1a069957 100644 --- a/test/contracts/globalExitRootManager.test.js +++ b/test/contracts/globalExitRootManager.test.js @@ -36,7 +36,7 @@ describe('Global Exit Root', () => { const newRootRollup = ethers.utils.hexlify(ethers.utils.randomBytes(32)); await expect(polygonZkEVMGlobalExitRoot.updateExitRoot(newRootRollup)) - .to.be.revertedWith('PolygonZkEVMGlobalExitRoot::updateExitRoot: ONLY_ALLOWED_CONTRACTS'); + .to.be.revertedWith('PolygonZkEVMGlobalExitRoot::updateExitRoot: Only allowed contracts'); // Update root from the rollup await expect(polygonZkEVMGlobalExitRoot.connect(rollup).updateExitRoot(newRootRollup)) From c328c7a19c7b2f096bb4f23542872051a6b2f7e6 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Wed, 21 Dec 2022 12:17:16 +0100 Subject: [PATCH 66/71] upgrade script --- deployment/simpleUpgradeScript.js | 54 +++++++++++++++++++++++++++++++ deployment/upgradePoE.js | 24 -------------- hardhat.config.js | 39 +--------------------- 3 files changed, 55 insertions(+), 62 deletions(-) create mode 100644 deployment/simpleUpgradeScript.js delete mode 100644 deployment/upgradePoE.js diff --git a/deployment/simpleUpgradeScript.js b/deployment/simpleUpgradeScript.js new file mode 100644 index 000000000..3e6fb8c7d --- /dev/null +++ b/deployment/simpleUpgradeScript.js @@ -0,0 +1,54 @@ +/* eslint-disable no-console, no-unused-vars */ +const hre = require('hardhat'); +const { ethers, upgrades } = require('hardhat'); +const path = require('path'); +require('dotenv').config({ path: path.resolve(__dirname, '../.env') }); + +async function main() { + // Set multiplier Gas + const multiplierGas = 3; + const currentProvider = new ethers.providers.JsonRpcProvider(`https://${process.env.HARDHAT_NETWORK}.infura.io/v3/${process.env.INFURA_PROJECT_ID}`); + async function overrideFeeData() { + const feedata = await ethers.provider.getFeeData(); + return { + maxFeePerGas: feedata.maxFeePerGas.mul(multiplierGas), + maxPriorityFeePerGas: feedata.maxPriorityFeePerGas.mul(multiplierGas), + }; + } + currentProvider.getFeeData = overrideFeeData; + + let deployer; + if (process.env.MNEMONIC) { + deployer = ethers.Wallet.fromMnemonic(process.env.MNEMONIC, 'm/44\'/60\'/0\'/0/0').connect(currentProvider); + } else { + [deployer] = (await ethers.getSigners()); + } + + // compìle contracts + await hre.run('compile'); + + const polygonZkEVMProxyAddress = '0xfefefefefefefefefefefefee'; + const polygonZkEVMFactory = await ethers.getContractFactory('PolygonZkEVMMock'); + + // Upgrade zkevm + const txZKEVM = await upgrades.upgradeProxy(polygonZkEVMProxyAddress, polygonZkEVMFactory); + + console.log(txZKEVM.deployTransaction); + console.log(await txZKEVM.deployTransaction.wait()); + console.log('upgrade succesfull ZKEVM'); + + const polygonZkEVMBridgeProxyAddress = '0xfefefefefefefefefefefefee'; + const polygonZkEVMBridgeFactory = await ethers.getContractFactory('PolygonZkEVMBridgeMock'); + + // Upgrade bridge + const txBridge = await upgrades.upgradeProxy(polygonZkEVMBridgeProxyAddress, polygonZkEVMBridgeFactory); + console.log(txBridge.deployTransaction); + console.log(await txBridge.deployTransaction.wait()); + console.log('upgrade succesfull Bridge'); +} +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/deployment/upgradePoE.js b/deployment/upgradePoE.js deleted file mode 100644 index a4c6e41b0..000000000 --- a/deployment/upgradePoE.js +++ /dev/null @@ -1,24 +0,0 @@ -/* eslint-disable no-console */ - -const hre = require('hardhat'); -const { ethers, upgrades } = require('hardhat'); - -async function main() { - // compìle contracts - await hre.run('compile'); - - const polygonZkEVMFactory = await ethers.getContractFactory('PolygonZkEVMMock'); - const polygonZkEVMProxyAddress = '0xfefefefefefefefefefefefee'; - - // Upgrade - const tx = await upgrades.upgradeProxy(polygonZkEVMProxyAddress, polygonZkEVMFactory); - - console.log(tx.deployTransaction); - console.log('upgrade succesfull'); -} -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error); - process.exit(1); - }); diff --git a/hardhat.config.js b/hardhat.config.js index 7e342b3ee..6b0dba878 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -57,24 +57,6 @@ module.exports = { ] }, networks: { - mainnet: { - url: `https://mainnet.infura.io/v3/${process.env.INFURA_PROJECT_ID}`, - accounts: { - mnemonic: process.env.MNEMONIC || DEFAULT_MNEMONIC, - path: "m/44'/60'/0'/0", - initialIndex: 0, - count: 20, - }, - }, - ropsten: { - url: `https://ropsten.infura.io/v3/${process.env.INFURA_PROJECT_ID}`, - accounts: { - mnemonic: process.env.MNEMONIC || DEFAULT_MNEMONIC, - path: "m/44'/60'/0'/0", - initialIndex: 0, - count: 20, - }, - }, mainnet: { url: `https://mainnet.infura.io/v3/${process.env.INFURA_PROJECT_ID}`, accounts: { @@ -128,16 +110,7 @@ module.exports = { initialIndex: 0, count: 20, }, - }, - zkevm: { - url: 'https://rpc.public2.zkevm-test.net', - accounts: { - mnemonic: process.env.MNEMONIC || DEFAULT_MNEMONIC, - path: "m/44'/60'/0'/0", - initialIndex: 0, - count: 20, - }, - }, + } }, gasReporter: { currency: 'USD', @@ -146,15 +119,5 @@ module.exports = { }, etherscan: { apiKey: `${process.env.ETHERSCAN_API_KEY}`, - customChains: [ - { - network: "zkevm", - chainId: 1422, - urls: { - apiURL: "https://explorer.public2.zkevm-test.net/api", - browserURL: "https://explorer.public2.zkevm-test.net" - } - } - ] } }; \ No newline at end of file From 8c78b1def82301ddc15e46b28721f1bd610302d2 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Wed, 21 Dec 2022 16:05:24 +0100 Subject: [PATCH 67/71] timelock upgrade --- .gitignore | 3 +- README.md | 2 +- deployment/README.md | 8 +- .../{deployPoE_v2-0.js => deployContracts.js} | 31 +++-- deployment/genesis.json | 6 +- deployment/timeLockUpgrade.js | 108 ++++++++++++++++++ .../{verifyPoE_v2-0.js => verifyContracts.js} | 0 docker/scripts/deploy-docker.sh | 2 +- docker/scripts/genesis_docker.json | 6 +- package.json | 9 +- test/contracts/emergencyManager.test.js | 2 +- test/contracts/proofOfEfficiency.test.js | 2 +- test/contracts/real-prover/real-flow.test.js | 4 +- test/contracts/timelockUpgradeTest.js | 2 +- 14 files changed, 152 insertions(+), 33 deletions(-) rename deployment/{deployPoE_v2-0.js => deployContracts.js} (94%) create mode 100644 deployment/timeLockUpgrade.js rename deployment/{verifyPoE_v2-0.js => verifyContracts.js} (100%) diff --git a/.gitignore b/.gitignore index 3949a19fa..3c3431b4c 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,5 @@ docs/interfaces docs/mocks .vscode/launch.json deploy_output.json -deploy_parameters.json \ No newline at end of file +deploy_parameters.json +deployments \ No newline at end of file diff --git a/README.md b/README.md index 3f02131e5..dc4d7712d 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,7 @@ npm run lint:fix ## Deploy on hardhat ``` -npm run deploy:PoE2_0:hardhat +npm run deploy:ZkEVM:hardhat ``` ## Build dockers diff --git a/deployment/README.md b/deployment/README.md index f34ca63eb..39c98de70 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -21,18 +21,18 @@ cp deploy_parameters.json.example deploy_parameters.json Fill created `deploy_parameters.json` with appropiate parameters. -To deploy contracts run `npm run deploy:PoE2_0:${network}`, for example: +To deploy contracts run `npm run deploy:ZkEVM:${network}`, for example: > set `runs` parameter from the compiler settings in `hardhat.config.js` (i.e. `runs: 200`) ``` -npm run deploy:PoE2_0:goerli +npm run deploy:ZkEVM:goerli ``` -To verify contracts run `npm run verify:PoE2_0:${network}`, for example: +To verify contracts run `npm run verify:ZkEVM:${network}`, for example: ``` -npm run verify:PoE2_0:goerli +npm run verify:ZkEVM:goerli ``` ## deploy-parameters.json diff --git a/deployment/deployPoE_v2-0.js b/deployment/deployContracts.js similarity index 94% rename from deployment/deployPoE_v2-0.js rename to deployment/deployContracts.js index a1b7eb556..541051737 100644 --- a/deployment/deployPoE_v2-0.js +++ b/deployment/deployContracts.js @@ -10,9 +10,19 @@ const pathOutputJson = path.join(__dirname, './deploy_output.json'); const deployParameters = require('./deploy_parameters.json'); const genesis = require('./genesis.json'); +const pathOZUpgradability = path.join(__dirname, `../.openzeppelin/${process.env.HARDHAT_NETWORK}.json`); + async function main() { - // Check if it's .openzeppelin and revert if it exists + // Check that there0s no previous OZ deployment + if (fs.existsSync(pathOZUpgradability)) { + throw new Error(`Theres upggradability information from previous deployments, it's mandatory to erase them before start a new one, path: ${pathOZUpgradability}`); + } + + // Constant variables const networkIDMainnet = 0; + const attemptsDeployProxy = 20; + + // Check deploy parameters const forceBatchAllowed = Boolean(deployParameters.forceBatchAllowed); const trustedSequencer = deployParameters.trustedSequencerAddress; const trustedSequencerURL = deployParameters.trustedSequencerURL || 'http://zkevm-json-rpc:8123'; @@ -23,8 +33,7 @@ async function main() { const pendingStateTimeout = deployParameters.pendingStateTimeout || (60 * 60 * 24 * 7 - 1); const trustedAggregatorTimeout = deployParameters.trustedAggregatorTimeout || (60 * 60 * 24 * 7 - 1); - const attemptsDeployProxy = 20; - + // Load provider let currentProvider = ethers.provider; if (deployParameters.multiplierGas || deployParameters.maxFeePerGas) { if (process.env.HARDHAT_NETWORK !== 'hardhat') { @@ -50,6 +59,7 @@ async function main() { } } + // Load deployer let deployer; if (deployParameters.privateKey) { deployer = new ethers.Wallet(deployParameters.privateKey, currentProvider); @@ -58,6 +68,7 @@ async function main() { } else { [deployer] = (await ethers.getSigners()); } + // Check trusted address from deploy parameters const admin = deployParameters.admin || deployer.address; const trustedAggregator = deployParameters.trustedAggregator || deployer.address; const timelockAddress = deployParameters.timelockAddress || deployer.address; @@ -149,7 +160,7 @@ async function main() { console.log('#######################\n'); console.log('PolygonZkEVMBridge deployed to:', polygonZkEVMBridgeContract.address); - // deploy PoE + // deploy PolygonZkEVMMock const PolygonZkEVMFactory = await ethers.getContractFactory('PolygonZkEVMMock', deployer); let polygonZkEVMContract; for (let i = 0; i < attemptsDeployProxy; i++) { @@ -189,7 +200,7 @@ async function main() { console.log('#######################'); console.log('PolygonZkEVMGlobalExitRootAddress:', await polygonZkEVMBridgeContract.globalExitRootManager()); console.log('networkID:', await polygonZkEVMBridgeContract.networkID()); - console.log('zkEVMaddress:', await polygonZkEVMBridgeContract.zkEVMaddress()); + console.log('zkEVMaddress:', await polygonZkEVMBridgeContract.polygonZkEVMaddress()); /* * Initialize Polygon ZK-EVM @@ -240,7 +251,7 @@ async function main() { const deploymentBlockNumber = (await polygonZkEVMContract.deployTransaction.wait()).blockNumber; console.log('\n#######################'); - console.log('##### Checks PoE #####'); + console.log('##### Checks PolygonZkEVMMock #####'); console.log('#######################'); console.log('PolygonZkEVMGlobalExitRootAddress:', await polygonZkEVMContract.globalExitRootManager()); console.log('maticTokenAddress:', await polygonZkEVMContract.matic()); @@ -300,7 +311,7 @@ async function main() { console.log('timelockAddress:', timelockAddress); console.log('zkEVMAddress:', polygonZkEVMContract.address); - const timelockContractFactory = await ethers.getContractFactory('PolygonZkEVMTimelock'); + const timelockContractFactory = await ethers.getContractFactory('PolygonZkEVMTimelock', deployer); const timelockContract = await timelockContractFactory.deploy( minDelayTimelock, [timelockAddress], @@ -322,10 +333,8 @@ async function main() { console.log('minDelayTimelock:', await timelockContract.getMinDelay()); console.log('polygonZkEVM:', polygonZkEVMContract.address); - /* - * Transfer ownership of the proxyAdmin to timelock - * await upgrades.admin.transferProxyAdminOwnership(timelockContract.address); - */ + // Transfer ownership of the proxyAdmin to timelock + await upgrades.admin.transferProxyAdminOwnership(timelockContract.address); const outputJson = { polygonZkEVMAddress: polygonZkEVMContract.address, diff --git a/deployment/genesis.json b/deployment/genesis.json index 08d8deab5..057ae783d 100644 --- a/deployment/genesis.json +++ b/deployment/genesis.json @@ -1,11 +1,11 @@ { - "root": "0x09c4d69035c2192aeed1facf87975a472e7bfeaddf9d3fa78aa58d120f9df127", + "root": "0x0ec110dcc0e7466a1192c4c9a8580cd4eeb4de9b521e09c60fceec5a68837fc5", "genesis": [ { "balance": "200000000000000000000000000", "nonce": "1", "address": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988", - "bytecode": "0x608060405260043610620001675760003560e01c80637b6323c111620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b80637b6323c1146200037057806381b1c17414620003955780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b806337883a3e116200011e57806337883a3e14620002a25780633ae0504714620002c45780633da8168214620002dc5780633e1970431462000301578063463855491462000326578063647c576c146200034b57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002439565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009c1565b348015620001db57600080fd5b50620001f3620001ed366004620024c6565b620009fa565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002502565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b50602754620001f3906001600160a01b031681565b348015620002d157600080fd5b506200022462000a4d565b348015620002e957600080fd5b50620001a1620002fb366004620025f1565b62000b40565b3480156200030e57600080fd5b5062000224620003203660046200266f565b62000c42565b3480156200033357600080fd5b50620001836200034536600462002780565b62000ccf565b3480156200035857600080fd5b50620001836200036a36600462002867565b62000e75565b3480156200037d57600080fd5b50620001836200038f36600462002780565b62000fd4565b348015620003a257600080fd5b50620001f3620003b4366004620028b7565b6024602052600090815260409020546001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028b7565b6200145b565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d366004620028d1565b620014a0565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b036600462002985565b620015b7565b348015620004c357600080fd5b506200018362001763565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028b7565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b81526004016200055390620029ed565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008db565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200073857604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac90604401600060405180830381600087803b1580156200070b57600080fd5b505af115801562000720573d6000803e3d6000fd5b505050508060200151935080600001519250620008d9565b84156200074d576200074d8a8888886200179a565b620007646001600160a01b038b1633308a62001bc2565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007bb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007e5919081019062002ad0565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000824573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200084e919081019062002ad0565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200088d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008b3919062002b09565b604051602001620008c79392919062002b57565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200091d98979695949392919062002b94565b60405180910390a16200094862000942600084868c8c8c888051906020012062000c42565b62001c2f565b6026546001600160a01b03166333d6247d6200096362000a4d565b6040518263ffffffff1660e01b81526004016200098291815260200190565b600060405180830381600087803b1580156200099d57600080fd5b505af1158015620009b2573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ee5760405162461bcd60e51b8152600401620005539062002c01565b620009f862001d80565b565b600060246000848460405160200162000a1592919062002c5e565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b37578260011660010362000ab8576001816020811062000a845762000a8462002c88565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000ae5565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000af260028462002cca565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b2e9062002ce1565b91505062000a58565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c33578160011660010362000bbd5786818151811062000b7b5762000b7b62002c88565b60200260200101518360405160200162000b9f929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c0f565b8287828151811062000bd35762000bd362002c88565b602002602001015160405160200162000bf6929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c1c60028362002cca565b91508062000c2a8162002ce1565b91505062000b50565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000cf55760405162461bcd60e51b81526004016200055390620029ed565b62000d0b8a8a8a8a8a8a8a8a8a8a600162001dde565b62000d1c8963ffffffff1662002069565b6000836001600160a01b03168387898560405160240162000d409392919062002cfd565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d77919062002d38565b60006040518083038185875af1925050503d806000811462000db6576040519150601f19603f3d011682016040523d82523d6000602084013e62000dbb565b606091505b505090508062000e275760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e6095949392919062002d56565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000e965750600054600160ff909116105b8062000eb25750303b15801562000eb2575060005460ff166001145b62000f175760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f3b576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fce576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff161562000ffa5760405162461bcd60e51b81526004016200055390620029ed565b620010108a8a8a8a8a8a8a8a8a8a600062001dde565b620010218963ffffffff1662002069565b6001600160a01b0385166200111657604080516000808252602082019092526001600160a01b0385169084906040516200105c919062002d38565b60006040518083038185875af1925050503d80600081146200109b576040519150601f19603f3d011682016040523d82523d6000602084013e620010a0565b606091505b50509050806200110f5760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b506200140e565b60225463ffffffff6101009091048116908716036200114b57620011456001600160a01b0386168484620020ab565b6200140e565b600086866040516020016200116292919062002c5e565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013a657600080600085806020019051810190620011b4919062002d8d565b925092509250600085848484604051620011ce906200239f565b620011dc9392919062002b57565b8190604051809103906000f5905080158015620011fd573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f1990604401600060405180830381600087803b1580156200124d57600080fd5b505af115801562001262573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013949392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200140b565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f1990604401600060405180830381600087803b158015620013f157600080fd5b505af115801562001406573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200144795949392919062002d56565b60405180910390a150505050505050505050565b6000806200146c6101008462002cca565b905060006200147e6101008562002e03565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014b892919062002c5e565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014eb906200239f565b601f1982820381018352601f90910116604081905262001518908d908d908d908d908d9060200162002e43565b60408051601f198184030181529082905262001538929160200162002e84565b604051602081830303815290604052805190602001206040516020016200159194939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015dd5760405162461bcd60e51b81526004016200055390620029ed565b60225463ffffffff610100909104811690841603620016655760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016b998979695949392919062002b94565b60405180910390a1620016f0620009426001602260019054906101000a900463ffffffff1633878734888051906020012062000c42565b6026546001600160a01b03166333d6247d6200170b62000a4d565b6040518263ffffffff1660e01b81526004016200172a91815260200190565b600060405180830381600087803b1580156200174557600080fd5b505af11580156200175a573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017905760405162461bcd60e51b8152600401620005539062002c01565b620009f8620020dd565b6000620017dd83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200218c92505050565b9050632afa533160e01b6001600160e01b0319821601620019d65760008080808080806200180f896004818d62002eb7565b8101906200181e919062002ee3565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018605760405162461bcd60e51b8152600401620005539062002f3e565b6001600160a01b03861630146200188b5760405162461bcd60e51b8152600401620005539062002f9b565b8a8514620019025760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162001982919062002d38565b6000604051808303816000865af19150503d8060008114620019c1576040519150601f19603f3d011682016040523d82523d6000602084013e620019c6565b606091505b5050505050505050505062001bbb565b6001600160e01b031981166323f2ebc360e21b1462001a4c5760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a648a6004818e62002eb7565b81019062001a73919062002ffb565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001ab75760405162461bcd60e51b8152600401620005539062002f3e565b6001600160a01b038716301462001ae25760405162461bcd60e51b8152600401620005539062002f9b565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001b6b919062002d38565b6000604051808303816000865af19150503d806000811462001baa576040519150601f19603f3d011682016040523d82523d6000602084013e62001baf565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fce9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262002193565b80600162001c406020600262003184565b62001c4c919062003192565b6021541062001cb15760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cc69190620031ac565b909155505060215460005b602081101562001d70578160011660010362001d0657826001826020811062001cfe5762001cfe62002c88565b015550505050565b6001816020811062001d1c5762001d1c62002c88565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d59919062002cca565b91508062001d678162002ce1565b91505062001cd1565b5062001d7b620031c7565b505050565b60225460ff161562001da65760405162461bcd60e51b81526004016200055390620029ed565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001def8a63ffffffff166200145b565b1562001e465760405162461bcd60e51b815260206004820152603060248201526000805160206200477983398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001eba573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ee09190620031dd565b90508060000362001f495760405162461bcd60e51b815260206004820152603960248201526000805160206200477983398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff878116610100909204161462001fcb5760405162461bcd60e51b815260206004820152604360248201526000805160206200477983398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff1662001fe957508862001fec565b50895b6200201762002008848b8b8b8b8b8b8051906020012062000c42565b8e8e63ffffffff168462000b40565b620009b25760405162461bcd60e51b815260206004820152602c60248201526000805160206200477983398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020796101008362002cca565b905060006200208b6101008462002e03565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001d7b90849063a9059cbb60e01b9060640162001bf7565b60225460ff16620021575760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b6000620021ea826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166200226c9092919063ffffffff16565b80519091501562001d7b57808060200190518101906200220b9190620031f7565b62001d7b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c3a848460008585600080866001600160a01b0316858760405162002296919062002d38565b60006040518083038185875af1925050503d8060008114620022d5576040519150601f19603f3d011682016040523d82523d6000602084013e620022da565b606091505b5091509150620022ed87838387620022f8565b979650505050505050565b606083156200236c57825160000362002364576001600160a01b0385163b620023645760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c3a565b62000c3a8383815115620023835781518083602001fd5b8060405162461bcd60e51b815260040162000553919062003217565b61154c806200322d83390190565b6001600160a01b0381168114620023c357600080fd5b50565b8035620023d381620023ad565b919050565b803563ffffffff81168114620023d357600080fd5b60008083601f8401126200240057600080fd5b50813567ffffffffffffffff8111156200241957600080fd5b6020830191508360208285010111156200243257600080fd5b9250929050565b60008060008060008060a087890312156200245357600080fd5b86356200246081620023ad565b95506200247060208801620023d8565b945060408701356200248281620023ad565b935060608701359250608087013567ffffffffffffffff811115620024a657600080fd5b620024b489828a01620023ed565b979a9699509497509295939492505050565b60008060408385031215620024da57600080fd5b620024e583620023d8565b91506020830135620024f781620023ad565b809150509250929050565b6000602082840312156200251557600080fd5b81356200252281620023ad565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200256b576200256b62002529565b604052919050565b600082601f8301126200258557600080fd5b8135602067ffffffffffffffff821115620025a457620025a462002529565b8160051b620025b58282016200253f565b9283528481018201928281019087851115620025d057600080fd5b83870192505b84831015620022ed57823582529183019190830190620025d6565b600080600080608085870312156200260857600080fd5b84359350602085013567ffffffffffffffff808211156200262857600080fd5b620026368883890162002573565b94506040870135915080821682146200264e57600080fd5b509396929550929360600135925050565b60ff81168114620023c357600080fd5b600080600080600080600060e0888a0312156200268b57600080fd5b873562002698816200265f565b9650620026a860208901620023d8565b95506040880135620026ba81620023ad565b9450620026ca60608901620023d8565b93506080880135620026dc81620023ad565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002716576200271662002529565b50601f01601f191660200190565b600082601f8301126200273657600080fd5b81356200274d6200274782620026f9565b6200253f565b8181528460208386010111156200276357600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027a157600080fd5b8a3567ffffffffffffffff80821115620027ba57600080fd5b620027c88e838f0162002573565b9b50620027d860208e01620023d8565b9a5060408d0135995060608d01359850620027f660808e01620023d8565b97506200280660a08e01620023c6565b96506200281660c08e01620023d8565b95506200282660e08e01620023c6565b94506101008d013593506101208d01359150808211156200284657600080fd5b50620028558d828e0162002724565b9150509295989b9194979a5092959850565b6000806000606084860312156200287d57600080fd5b6200288884620023d8565b925060208401356200289a81620023ad565b91506040840135620028ac81620023ad565b809150509250925092565b600060208284031215620028ca57600080fd5b5035919050565b600080600080600080600060a0888a031215620028ed57600080fd5b620028f888620023d8565b965060208801356200290a81620023ad565b9550604088013567ffffffffffffffff808211156200292857600080fd5b620029368b838c01620023ed565b909750955060608a01359150808211156200295057600080fd5b506200295f8a828b01620023ed565b909450925050608088013562002975816200265f565b8091505092959891949750929550565b6000806000606084860312156200299b57600080fd5b620029a684620023d8565b92506020840135620029b881620023ad565b9150604084013567ffffffffffffffff811115620029d557600080fd5b620029e38682870162002724565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002a7257818101518382015260200162002a58565b8381111562000fce5750506000910152565b600082601f83011262002a9657600080fd5b815162002aa76200274782620026f9565b81815284602083860101111562002abd57600080fd5b62000c3a82602083016020870162002a55565b60006020828403121562002ae357600080fd5b815167ffffffffffffffff81111562002afb57600080fd5b62000c3a8482850162002a84565b60006020828403121562002b1c57600080fd5b815162002522816200265f565b6000815180845262002b4381602086016020860162002a55565b601f01601f19169290920160200192915050565b60608152600062002b6c606083018662002b29565b828103602084015262002b80818662002b29565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002be88483018762002b29565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002cdc5762002cdc62002c9e565b500490565b60006001820162002cf65762002cf662002cb4565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d2f9083018462002b29565b95945050505050565b6000825162002d4c81846020870162002a55565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002da357600080fd5b835167ffffffffffffffff8082111562002dbc57600080fd5b62002dca8783880162002a84565b9450602086015191508082111562002de157600080fd5b5062002df08682870162002a84565b9250506040840151620028ac816200265f565b60008262002e155762002e1562002c9e565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e5960608301878962002e1a565b828103602084015262002e6e81868862002e1a565b91505060ff831660408301529695505050505050565b6000835162002e9881846020880162002a55565b83519083019062002eae81836020880162002a55565b01949350505050565b6000808585111562002ec857600080fd5b8386111562002ed657600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002eff57600080fd5b873562002f0c81620023ad565b9650602088013562002f1e81620023ad565b955060408801359450606088013593506080880135620026dc816200265f565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b8015158114620023c357600080fd5b600080600080600080600080610100898b0312156200301957600080fd5b88356200302681620023ad565b975060208901356200303881620023ad565b965060408901359550606089013594506080890135620030588162002fec565b935060a08901356200306a816200265f565b979a969950949793969295929450505060c08201359160e0013590565b600181815b80851115620030c8578160001904821115620030ac57620030ac62002cb4565b80851615620030ba57918102915b93841c93908002906200308c565b509250929050565b600082620030e15750600162000a47565b81620030f05750600062000a47565b8160018114620031095760028114620031145762003134565b600191505062000a47565b60ff84111562003128576200312862002cb4565b50506001821b62000a47565b5060208310610133831016604e8410600b841016171562003159575081810a62000a47565b62003165838362003087565b80600019048211156200317c576200317c62002cb4565b029392505050565b6000620025228383620030d0565b600082821015620031a757620031a762002cb4565b500390565b60008219821115620031c257620031c262002cb4565b500190565b634e487b7160e01b600052600160045260246000fd5b600060208284031215620031f057600080fd5b5051919050565b6000602082840312156200320a57600080fd5b8151620025228162002fec565b60208152600062002522602083018462002b2956fe60c06040523480156200001157600080fd5b506040516200154c3803806200154c8339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611092620004ba60003960006104690152600081816102f9015261043301526110926000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611043565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161105557611055610fd1565b506001019056fea264697066735822122048db6a6222fa164d21a8fcb1cd25d2a9e0eee016393c37dcc7b7fd638ef787c264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212201e5d89c55c1f97b1f79752036fe68d3686187613f7595faa2b990d177c1a04c264736f6c634300080f0033", + "bytecode": "0x608060405260043610620001675760003560e01c80637b6323c111620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b80637b6323c1146200037057806381b1c17414620003955780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b806334ac9cf2116200011e57806334ac9cf214620002a25780633ae0504714620002c45780633da8168214620002dc5780633e1970431462000301578063463855491462000326578063647c576c146200034b57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d3660046200244d565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009cd565b348015620001db57600080fd5b50620001f3620001ed366004620024da565b62000a06565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002516565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b50602754620001f3906001600160a01b031681565b348015620002d157600080fd5b506200022462000a59565b348015620002e957600080fd5b50620001a1620002fb36600462002605565b62000b4c565b3480156200030e57600080fd5b50620002246200032036600462002683565b62000c4e565b3480156200033357600080fd5b50620001836200034536600462002794565b62000cdb565b3480156200035857600080fd5b50620001836200036a3660046200287b565b62000e81565b3480156200037d57600080fd5b50620001836200038f36600462002794565b62000fe0565b348015620003a257600080fd5b50620001f3620003b4366004620028cb565b6024602052600090815260409020546001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028cb565b62001469565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d366004620028e5565b620014ae565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b036600462002999565b620015c5565b348015620004c357600080fd5b506200018362001771565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028cb565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a01565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044657374696e6174696f6e2063616e6e6f7420626520697473656c66000000606482015260840162000553565b60008060606001600160a01b03891662000687578534146200067d5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a908201527f20416d6f756e7420646f6573206e6f74206d61746368206d6573736167652e76606482015263616c756560e01b608482015260a40162000553565b60009150620008e7565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074457604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac90604401600060405180830381600087803b1580156200071757600080fd5b505af11580156200072c573d6000803e3d6000fd5b505050508060200151935080600001519250620008e5565b84156200075957620007598a888888620017a8565b620007706001600160a01b038b1633308a62001bd0565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f1919081019062002ae4565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000830573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085a919081019062002ae4565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000899573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008bf919062002b1d565b604051602001620008d39392919062002b6b565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092998979695949392919062002ba8565b60405180910390a1620009546200094e600084868c8c8c888051906020012062000c4e565b62001c3d565b6026546001600160a01b03166333d6247d6200096f62000a59565b6040518263ffffffff1660e01b81526004016200098e91815260200190565b600060405180830381600087803b158015620009a957600080fd5b505af1158015620009be573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009fa5760405162461bcd60e51b8152600401620005539062002c15565b62000a0462001d8e565b565b600060246000848460405160200162000a2192919062002c72565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b43578260011660010362000ac4576001816020811062000a905762000a9062002c9c565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af1565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000afe60028462002cde565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3a9062002cf5565b91505062000a64565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c3f578160011660010362000bc95786818151811062000b875762000b8762002c9c565b60200260200101518360405160200162000bab929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c1b565b8287828151811062000bdf5762000bdf62002c9c565b602002602001015160405160200162000c02929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2860028362002cde565b91508062000c368162002cf5565b91505062000b5c565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d015760405162461bcd60e51b8152600401620005539062002a01565b62000d178a8a8a8a8a8a8a8a8a8a600162001dec565b62000d288963ffffffff166200207d565b6000836001600160a01b03168387898560405160240162000d4c9392919062002d11565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d83919062002d4c565b60006040518083038185875af1925050503d806000811462000dc2576040519150601f19603f3d011682016040523d82523d6000602084013e62000dc7565b606091505b505090508062000e335760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e8813595cdcd859d94819985a5b195960821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e6c95949392919062002d6a565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea25750600054600160ff909116105b8062000ebe5750303b15801562000ebe575060005460ff166001145b62000f235760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f47576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fda576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff1615620010065760405162461bcd60e51b8152600401620005539062002a01565b6200101c8a8a8a8a8a8a8a8a8a8a600062001dec565b6200102d8963ffffffff166200207d565b6001600160a01b0385166200112457604080516000808252602082019092526001600160a01b03851690849060405162001068919062002d4c565b60006040518083038185875af1925050503d8060008114620010a7576040519150601f19603f3d011682016040523d82523d6000602084013e620010ac565b606091505b50509050806200111d5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a20604482015274115d1a195c881d1c985b9cd9995c8819985a5b1959605a1b606482015260840162000553565b506200141c565b60225463ffffffff6101009091048116908716036200115957620011536001600160a01b0386168484620020bf565b6200141c565b600086866040516020016200117092919062002c72565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013b457600080600085806020019051810190620011c2919062002da1565b925092509250600085848484604051620011dc90620023b3565b620011ea9392919062002b6b565b8190604051809103906000f59050801580156200120b573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f1990604401600060405180830381600087803b1580156200125b57600080fd5b505af115801562001270573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013a29392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001419565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f1990604401600060405180830381600087803b158015620013ff57600080fd5b505af115801562001414573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200145595949392919062002d6a565b60405180910390a150505050505050505050565b6000806200147a6101008462002cde565b905060006200148c6101008562002e17565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014c692919062002c72565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014f990620023b3565b601f1982820381018352601f90910116604081905262001526908d908d908d908d908d9060200162002e57565b60408051601f198184030181529082905262001546929160200162002e98565b604051602081830303815290604052805190602001206040516020016200159f94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015eb5760405162461bcd60e51b8152600401620005539062002a01565b60225463ffffffff610100909104811690841603620016735760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044657374696e6174696f6e2063616e6e6f7420626520697473656c6600606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016c798979695949392919062002ba8565b60405180910390a1620016fe6200094e6001602260019054906101000a900463ffffffff1633878734888051906020012062000c4e565b6026546001600160a01b03166333d6247d6200171962000a59565b6040518263ffffffff1660e01b81526004016200173891815260200190565b600060405180830381600087803b1580156200175357600080fd5b505af115801562001768573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b031633146200179e5760405162461bcd60e51b8152600401620005539062002c15565b62000a04620020f1565b6000620017eb83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021a092505050565b9050632afa533160e01b6001600160e01b0319821601620019e45760008080808080806200181d896004818d62002ecb565b8101906200182c919062002ef7565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200186e5760405162461bcd60e51b8152600401620005539062002f52565b6001600160a01b0386163014620018995760405162461bcd60e51b8152600401620005539062002faf565b8a8514620019105760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260448201527f6d697420616d6f756e7420646f6573206e6f74206d6174636800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162001990919062002d4c565b6000604051808303816000865af19150503d8060008114620019cf576040519150601f19603f3d011682016040523d82523d6000602084013e620019d4565b606091505b5050505050505050505062001bc9565b6001600160e01b031981166323f2ebc360e21b1462001a5a5760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e6f7460448201526a081d985b1a590818d85b1b60aa1b606482015260840162000553565b60008080808080808062001a728a6004818e62002ecb565b81019062001a81919062003011565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001ac55760405162461bcd60e51b8152600401620005539062002f52565b6001600160a01b038716301462001af05760405162461bcd60e51b8152600401620005539062002faf565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001b79919062002d4c565b6000604051808303816000865af19150503d806000811462001bb8576040519150601f19603f3d011682016040523d82523d6000602084013e62001bbd565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fda9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021a7565b80600162001c4e602060026200319a565b62001c5a9190620031a8565b6021541062001cbf5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d65726b6c65604482015269081d1c995948199d5b1b60b21b606482015260840162000553565b60016021600082825462001cd49190620031c2565b909155505060215460005b602081101562001d7e578160011660010362001d1457826001826020811062001d0c5762001d0c62002c9c565b015550505050565b6001816020811062001d2a5762001d2a62002c9c565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d67919062002cde565b91508062001d758162002cf5565b91505062001cdf565b5062001d89620031dd565b505050565b60225460ff161562001db45760405162461bcd60e51b8152600401620005539062002a01565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001dfd8a63ffffffff1662001469565b1562001e545760405162461bcd60e51b815260206004820152603060248201526000805160206200479b83398151915260448201526f08105b1c9958591e4818db185a5b595960821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ec8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001eee9190620031f3565b90508060000362001f575760405162461bcd60e51b815260206004820152603760248201526000805160206200479b83398151915260448201527f20476c6f62616c45786974526f6f7420696e76616c6964000000000000000000606482015260840162000553565b60225463ffffffff878116610100909204161462001fd95760405162461bcd60e51b815260206004820152604360248201526000805160206200479b83398151915260448201527f2044657374696e6174696f6e206e6574776f726b20646f6573206e6f74206d616064820152620e8c6d60eb1b608482015260a40162000553565b602254600090610100900463ffffffff1662001ff757508862001ffa565b50895b6200202562002016848b8b8b8b8b8b8051906020012062000c4e565b8e8e63ffffffff168462000b4c565b620009be5760405162461bcd60e51b815260206004820152603260248201526000805160206200479b8339815191526044820152711024b73b30b634b21039b6ba10383937b7b360711b606482015260840162000553565b60006200208d6101008362002cde565b905060006200209f6101008462002e17565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001d8990849063a9059cbb60e01b9060640162001c05565b60225460ff166200216b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b6000620021fe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022809092919063ffffffff16565b80519091501562001d8957808060200190518101906200221f91906200320d565b62001d895760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c46848460008585600080866001600160a01b03168587604051620022aa919062002d4c565b60006040518083038185875af1925050503d8060008114620022e9576040519150601f19603f3d011682016040523d82523d6000602084013e620022ee565b606091505b509150915062002301878383876200230c565b979650505050505050565b606083156200238057825160000362002378576001600160a01b0385163b620023785760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c46565b62000c468383815115620023975781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200322d565b611558806200324383390190565b6001600160a01b0381168114620023d757600080fd5b50565b8035620023e781620023c1565b919050565b803563ffffffff81168114620023e757600080fd5b60008083601f8401126200241457600080fd5b50813567ffffffffffffffff8111156200242d57600080fd5b6020830191508360208285010111156200244657600080fd5b9250929050565b60008060008060008060a087890312156200246757600080fd5b86356200247481620023c1565b95506200248460208801620023ec565b945060408701356200249681620023c1565b935060608701359250608087013567ffffffffffffffff811115620024ba57600080fd5b620024c889828a0162002401565b979a9699509497509295939492505050565b60008060408385031215620024ee57600080fd5b620024f983620023ec565b915060208301356200250b81620023c1565b809150509250929050565b6000602082840312156200252957600080fd5b81356200253681620023c1565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200257f576200257f6200253d565b604052919050565b600082601f8301126200259957600080fd5b8135602067ffffffffffffffff821115620025b857620025b86200253d565b8160051b620025c982820162002553565b9283528481018201928281019087851115620025e457600080fd5b83870192505b848310156200230157823582529183019190830190620025ea565b600080600080608085870312156200261c57600080fd5b84359350602085013567ffffffffffffffff808211156200263c57600080fd5b6200264a8883890162002587565b94506040870135915080821682146200266257600080fd5b509396929550929360600135925050565b60ff81168114620023d757600080fd5b600080600080600080600060e0888a0312156200269f57600080fd5b8735620026ac8162002673565b9650620026bc60208901620023ec565b95506040880135620026ce81620023c1565b9450620026de60608901620023ec565b93506080880135620026f081620023c1565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200272a576200272a6200253d565b50601f01601f191660200190565b600082601f8301126200274a57600080fd5b8135620027616200275b826200270d565b62002553565b8181528460208386010111156200277757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027b557600080fd5b8a3567ffffffffffffffff80821115620027ce57600080fd5b620027dc8e838f0162002587565b9b50620027ec60208e01620023ec565b9a5060408d0135995060608d013598506200280a60808e01620023ec565b97506200281a60a08e01620023da565b96506200282a60c08e01620023ec565b95506200283a60e08e01620023da565b94506101008d013593506101208d01359150808211156200285a57600080fd5b50620028698d828e0162002738565b9150509295989b9194979a5092959850565b6000806000606084860312156200289157600080fd5b6200289c84620023ec565b92506020840135620028ae81620023c1565b91506040840135620028c081620023c1565b809150509250925092565b600060208284031215620028de57600080fd5b5035919050565b600080600080600080600060a0888a0312156200290157600080fd5b6200290c88620023ec565b965060208801356200291e81620023c1565b9550604088013567ffffffffffffffff808211156200293c57600080fd5b6200294a8b838c0162002401565b909750955060608a01359150808211156200296457600080fd5b50620029738a828b0162002401565b9094509250506080880135620029898162002673565b8091505092959891949750929550565b600080600060608486031215620029af57600080fd5b620029ba84620023ec565b92506020840135620029cc81620023c1565b9150604084013567ffffffffffffffff811115620029e957600080fd5b620029f78682870162002738565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002a8657818101518382015260200162002a6c565b8381111562000fda5750506000910152565b600082601f83011262002aaa57600080fd5b815162002abb6200275b826200270d565b81815284602083860101111562002ad157600080fd5b62000c4682602083016020870162002a69565b60006020828403121562002af757600080fd5b815167ffffffffffffffff81111562002b0f57600080fd5b62000c468482850162002a98565b60006020828403121562002b3057600080fd5b8151620025368162002673565b6000815180845262002b5781602086016020860162002a69565b601f01601f19169290920160200192915050565b60608152600062002b80606083018662002b3d565b828103602084015262002b94818662002b3d565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002bfc8483018762002b3d565b925080851660e085015250509998505050505050505050565b6020808252603a908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e5a6b45564d20636f6e7472616374000000000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002cf05762002cf062002cb2565b500490565b60006001820162002d0a5762002d0a62002cc8565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d439083018462002b3d565b95945050505050565b6000825162002d6081846020870162002a69565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002db757600080fd5b835167ffffffffffffffff8082111562002dd057600080fd5b62002dde8783880162002a98565b9450602086015191508082111562002df557600080fd5b5062002e048682870162002a98565b9250506040840151620028c08162002673565b60008262002e295762002e2962002cb2565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e6d60608301878962002e2e565b828103602084015262002e8281868862002e2e565b91505060ff831660408301529695505050505050565b6000835162002eac81846020880162002a69565b83519083019062002ec281836020880162002a69565b01949350505050565b6000808585111562002edc57600080fd5b8386111562002eea57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f1357600080fd5b873562002f2081620023c1565b9650602088013562002f3281620023c1565b955060408801359450606088013593506080880135620026f08162002673565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260408201527f6d6974206f776e6572206d757374206265207468652073656e64657200000000606082015260800190565b60208082526033908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205370656040820152726e646572206d7573742062652027746869732760681b606082015260800190565b8015158114620023d757600080fd5b600080600080600080600080610100898b0312156200302f57600080fd5b88356200303c81620023c1565b975060208901356200304e81620023c1565b9650604089013595506060890135945060808901356200306e8162003002565b935060a0890135620030808162002673565b979a969950949793969295929450505060c08201359160e0013590565b600181815b80851115620030de578160001904821115620030c257620030c262002cc8565b80851615620030d057918102915b93841c9390800290620030a2565b509250929050565b600082620030f75750600162000a53565b81620031065750600062000a53565b81600181146200311f57600281146200312a576200314a565b600191505062000a53565b60ff8411156200313e576200313e62002cc8565b50506001821b62000a53565b5060208310610133831016604e8410600b84101617156200316f575081810a62000a53565b6200317b83836200309d565b806000190482111562003192576200319262002cc8565b029392505050565b6000620025368383620030e6565b600082821015620031bd57620031bd62002cc8565b500390565b60008219821115620031d857620031d862002cc8565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200320657600080fd5b5051919050565b6000602082840312156200322057600080fd5b8151620025368162003002565b60208152600062002536602083018462002b3d56fe60c06040523480156200001157600080fd5b5060405162001558380380620015588339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109e620004ba60003960006104690152600081816102f90152610433015261109e6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866106638361104f565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161106157611061610fd1565b506001019056fea26469706673582212205af0e6dd4760d4ae367515578b46c4d5988b10ae47473e817626188baa0c03a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220d45a8ebcef9fc50cf59227d05e3d4a6aa8384293f92bcc21bc9ac4198225157364736f6c634300080f0033", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", "0x0000000000000000000000000000000000000000000000000000000000000022": "0x0100", @@ -23,7 +23,7 @@ "balance": "0", "nonce": "1", "address": "0xae4bb80be56b819606589de61d5ec3b522eeb032", - "bytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610156565b60006020819052908152604090205481565b6100a061009b366004610156565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b031633146101515760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f4e4c595f42524944474500000000000000606482015260840160405180910390fd5b600155565b60006020828403121561016857600080fd5b503591905056fea2646970667358221220f7451da1829b0ecb4873ed6f3f3d32d71e72a79502689acac6a4216f7a54a4a164736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610164565b60006020819052908152604090205481565b6100a061009b366004610164565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b0316331461015f5760405162461bcd60e51b815260206004820152604560248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f6e6c7920506f6c79676f6e5a6b45564d42606482015264726964676560d81b608482015260a40160405180910390fd5b600155565b60006020828403121561017657600080fd5b503591905056fea26469706673582212203d6a7f66369fc06c0d8b9ca38eabcd1a1bdd000df9e10846e604066a7c3c182f64736f6c634300080f0033", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000002": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988" }, diff --git a/deployment/timeLockUpgrade.js b/deployment/timeLockUpgrade.js new file mode 100644 index 000000000..b6abcc708 --- /dev/null +++ b/deployment/timeLockUpgrade.js @@ -0,0 +1,108 @@ +/* eslint-disable no-console, no-unused-vars, no-use-before-define */ +const hre = require('hardhat'); +const { ethers, upgrades } = require('hardhat'); +const path = require('path'); +require('dotenv').config({ path: path.resolve(__dirname, '../.env') }); + +async function main() { + // Set multiplier Gas + const multiplierGas = 3; + const currentProvider = new ethers.providers.JsonRpcProvider(`https://${process.env.HARDHAT_NETWORK}.infura.io/v3/${process.env.INFURA_PROJECT_ID}`); + async function overrideFeeData() { + const feedata = await ethers.provider.getFeeData(); + return { + maxFeePerGas: feedata.maxFeePerGas.mul(multiplierGas), + maxPriorityFeePerGas: feedata.maxPriorityFeePerGas.mul(multiplierGas), + }; + } + currentProvider.getFeeData = overrideFeeData; + + let deployer; + if (process.env.MNEMONIC) { + deployer = ethers.Wallet.fromMnemonic(process.env.MNEMONIC, 'm/44\'/60\'/0\'/0/0').connect(currentProvider); + } else { + [deployer] = (await ethers.getSigners()); + } + + // compìle contracts + await hre.run('compile'); + + const proxyPolygonZkEVMAddress = '0xFD44A8D8f28AadB1Ce916012c7C921f759056Ef7'; + const polygonZkEVMFactory = await ethers.getContractFactory('PolygonZkEVMMock'); + + // Upgrade zkevm + const newImplPolygonZkEVMAddress = await upgrades.prepareUpgrade(proxyPolygonZkEVMAddress, polygonZkEVMFactory); + const proxyAdmin = await upgrades.admin.getInstance(); + + console.log({ newImplPolygonZkEVMAddress }); + + // Use timelock + const operation = genOperation( + proxyAdmin.address, + 0, // value + proxyAdmin.interface.encodeFunctionData( + 'upgrade', + [proxyPolygonZkEVMAddress, + newImplPolygonZkEVMAddress], + ), + ethers.constants.HashZero, // predecesoor + ethers.constants.HashZero, // salt TODO + ); + + // Timelock operations + const TimelockFactory = await ethers.getContractFactory('PolygonZkEVMTimelock', deployer); + const minDelay = 10; // TODO upgrade parameter + + // Schedule operation + const scheduleData = TimelockFactory.interface.encodeFunctionData( + 'schedule', + [ + operation.target, + operation.value, + operation.data, + operation.predecessor, + operation.salt, + minDelay, + ], + ); + // Executre operation + const executeData = TimelockFactory.interface.encodeFunctionData( + 'execute', + [ + operation.target, + operation.value, + operation.data, + operation.predecessor, + operation.salt, + ], + ); + + console.log({ scheduleData }); + console.log({ executeData }); +} +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); + +// OZ test functions +function genOperation(target, value, data, predecessor, salt) { + const id = ethers.utils.solidityKeccak256([ + 'address', + 'uint256', + 'bytes', + 'uint256', + 'bytes32', + ], [ + target, + value, + data, + predecessor, + salt, + ]); + return { + id, target, value, data, predecessor, salt, + }; +} diff --git a/deployment/verifyPoE_v2-0.js b/deployment/verifyContracts.js similarity index 100% rename from deployment/verifyPoE_v2-0.js rename to deployment/verifyContracts.js diff --git a/docker/scripts/deploy-docker.sh b/docker/scripts/deploy-docker.sh index d72bbca9e..881fbbdab 100755 --- a/docker/scripts/deploy-docker.sh +++ b/docker/scripts/deploy-docker.sh @@ -5,7 +5,7 @@ sleep 5 node docker/scripts/fund-accounts.js cp docker/scripts/deploy_parameters_docker.json deployment/deploy_parameters.json cp docker/scripts/genesis_docker.json deployment/genesis.json -npx hardhat run deployment/deployPoE_v2-0.js --network localhost +npx hardhat run deployment/deployContracts.js --network localhost mkdir docker/deploymentOutput mv deployment/deploy_output.json docker/deploymentOutput docker-compose -f docker/docker-compose.geth.yml down diff --git a/docker/scripts/genesis_docker.json b/docker/scripts/genesis_docker.json index a78ae919f..5914c1c35 100644 --- a/docker/scripts/genesis_docker.json +++ b/docker/scripts/genesis_docker.json @@ -1,11 +1,11 @@ { - "root": "0x8bb1811d2084a98194bed51075270fc03067cf2e6bbc4b7397fc34228a819593", + "root": "0x2fce97be07293e005c15b25be53b51d8fd978865cafc0aa20c8d44175b03baa3", "genesis": [ { "balance": "200000000000000000000000000", "nonce": "1", "address": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988", - "bytecode": "0x608060405260043610620001675760003560e01c80637b6323c111620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b80637b6323c1146200037057806381b1c17414620003955780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b806337883a3e116200011e57806337883a3e14620002a25780633ae0504714620002c45780633da8168214620002dc5780633e1970431462000301578063463855491462000326578063647c576c146200034b57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002439565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009c1565b348015620001db57600080fd5b50620001f3620001ed366004620024c6565b620009fa565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002502565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b50602754620001f3906001600160a01b031681565b348015620002d157600080fd5b506200022462000a4d565b348015620002e957600080fd5b50620001a1620002fb366004620025f1565b62000b40565b3480156200030e57600080fd5b5062000224620003203660046200266f565b62000c42565b3480156200033357600080fd5b50620001836200034536600462002780565b62000ccf565b3480156200035857600080fd5b50620001836200036a36600462002867565b62000e75565b3480156200037d57600080fd5b50620001836200038f36600462002780565b62000fd4565b348015620003a257600080fd5b50620001f3620003b4366004620028b7565b6024602052600090815260409020546001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028b7565b6200145b565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d366004620028d1565b620014a0565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b036600462002985565b620015b7565b348015620004c357600080fd5b506200018362001763565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028b7565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b81526004016200055390620029ed565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044455354494e4154494f4e5f43414e545f42455f495453454c460000000000606482015260840162000553565b60008060606001600160a01b0389166200067b5785341462000671576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f20414d4f554e545f444f45535f4e4f545f4d415443485f4d53475f56414c5545606482015260840162000553565b60009150620008db565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200073857604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac90604401600060405180830381600087803b1580156200070b57600080fd5b505af115801562000720573d6000803e3d6000fd5b505050508060200151935080600001519250620008d9565b84156200074d576200074d8a8888886200179a565b620007646001600160a01b038b1633308a62001bc2565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007bb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007e5919081019062002ad0565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000824573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200084e919081019062002ad0565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200088d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008b3919062002b09565b604051602001620008c79392919062002b57565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200091d98979695949392919062002b94565b60405180910390a16200094862000942600084868c8c8c888051906020012062000c42565b62001c2f565b6026546001600160a01b03166333d6247d6200096362000a4d565b6040518263ffffffff1660e01b81526004016200098291815260200190565b600060405180830381600087803b1580156200099d57600080fd5b505af1158015620009b2573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009ee5760405162461bcd60e51b8152600401620005539062002c01565b620009f862001d80565b565b600060246000848460405160200162000a1592919062002c5e565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b37578260011660010362000ab8576001816020811062000a845762000a8462002c88565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000ae5565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000af260028462002cca565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b2e9062002ce1565b91505062000a58565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c33578160011660010362000bbd5786818151811062000b7b5762000b7b62002c88565b60200260200101518360405160200162000b9f929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c0f565b8287828151811062000bd35762000bd362002c88565b602002602001015160405160200162000bf6929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c1c60028362002cca565b91508062000c2a8162002ce1565b91505062000b50565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000cf55760405162461bcd60e51b81526004016200055390620029ed565b62000d0b8a8a8a8a8a8a8a8a8a8a600162001dde565b62000d1c8963ffffffff1662002069565b6000836001600160a01b03168387898560405160240162000d409392919062002cfd565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d77919062002d38565b60006040518083038185875af1925050503d806000811462000db6576040519150601f19603f3d011682016040523d82523d6000602084013e62000dbb565b606091505b505090508062000e275760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e88135154d4d051d157d1905253115160821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e6095949392919062002d56565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000e965750600054600160ff909116105b8062000eb25750303b15801562000eb2575060005460ff166001145b62000f175760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f3b576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fce576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff161562000ffa5760405162461bcd60e51b81526004016200055390620029ed565b620010108a8a8a8a8a8a8a8a8a8a600062001dde565b620010218963ffffffff1662002069565b6001600160a01b0385166200111657604080516000808252602082019092526001600160a01b0385169084906040516200105c919062002d38565b60006040518083038185875af1925050503d80600081146200109b576040519150601f19603f3d011682016040523d82523d6000602084013e620010a0565b606091505b50509050806200110f5760405162461bcd60e51b815260206004820152603360248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a2060448201527211551217d514905394d1915497d19052531151606a1b606482015260840162000553565b506200140e565b60225463ffffffff6101009091048116908716036200114b57620011456001600160a01b0386168484620020ab565b6200140e565b600086866040516020016200116292919062002c5e565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013a657600080600085806020019051810190620011b4919062002d8d565b925092509250600085848484604051620011ce906200239f565b620011dc9392919062002b57565b8190604051809103906000f5905080158015620011fd573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f1990604401600060405180830381600087803b1580156200124d57600080fd5b505af115801562001262573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013949392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200140b565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f1990604401600060405180830381600087803b158015620013f157600080fd5b505af115801562001406573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200144795949392919062002d56565b60405180910390a150505050505050505050565b6000806200146c6101008462002cca565b905060006200147e6101008562002e03565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014b892919062002c5e565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014eb906200239f565b601f1982820381018352601f90910116604081905262001518908d908d908d908d908d9060200162002e43565b60408051601f198184030181529082905262001538929160200162002e84565b604051602081830303815290604052805190602001206040516020016200159194939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015dd5760405162461bcd60e51b81526004016200055390620029ed565b60225463ffffffff610100909104811690841603620016655760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044455354494e4154494f4e5f43414e545f42455f495453454c46000000606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016b998979695949392919062002b94565b60405180910390a1620016f0620009426001602260019054906101000a900463ffffffff1633878734888051906020012062000c42565b6026546001600160a01b03166333d6247d6200170b62000a4d565b6040518263ffffffff1660e01b81526004016200172a91815260200190565b600060405180830381600087803b1580156200174557600080fd5b505af11580156200175a573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620017905760405162461bcd60e51b8152600401620005539062002c01565b620009f8620020dd565b6000620017dd83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200218c92505050565b9050632afa533160e01b6001600160e01b0319821601620019d65760008080808080806200180f896004818d62002eb7565b8101906200181e919062002ee3565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620018605760405162461bcd60e51b8152600401620005539062002f3e565b6001600160a01b03861630146200188b5760405162461bcd60e51b8152600401620005539062002f9b565b8a8514620019025760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260448201527f4d49545f414d4f554e545f444f45535f4e4f545f4d4154434800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162001982919062002d38565b6000604051808303816000865af19150503d8060008114620019c1576040519150601f19603f3d011682016040523d82523d6000602084013e620019c6565b606091505b5050505050505050505062001bbb565b6001600160e01b031981166323f2ebc360e21b1462001a4c5760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e4f5460448201526a17d59053125117d0d0531360aa1b606482015260840162000553565b60008080808080808062001a648a6004818e62002eb7565b81019062001a73919062002ffb565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001ab75760405162461bcd60e51b8152600401620005539062002f3e565b6001600160a01b038716301462001ae25760405162461bcd60e51b8152600401620005539062002f9b565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001b6b919062002d38565b6000604051808303816000865af19150503d806000811462001baa576040519150601f19603f3d011682016040523d82523d6000602084013e62001baf565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fce9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262002193565b80600162001c406020600262003184565b62001c4c919062003192565b6021541062001cb15760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d45524b4c4560448201526917d514915157d195531360b21b606482015260840162000553565b60016021600082825462001cc69190620031ac565b909155505060215460005b602081101562001d70578160011660010362001d0657826001826020811062001cfe5762001cfe62002c88565b015550505050565b6001816020811062001d1c5762001d1c62002c88565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d59919062002cca565b91508062001d678162002ce1565b91505062001cd1565b5062001d7b620031c7565b505050565b60225460ff161562001da65760405162461bcd60e51b81526004016200055390620029ed565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001def8a63ffffffff166200145b565b1562001e465760405162461bcd60e51b815260206004820152603060248201526000805160206200477983398151915260448201526f081053149150511657d0d3105253515160821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001eba573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ee09190620031dd565b90508060000362001f495760405162461bcd60e51b815260206004820152603960248201526000805160206200477983398151915260448201527f20474c4f42414c5f455849545f524f4f545f494e56414c494400000000000000606482015260840162000553565b60225463ffffffff878116610100909204161462001fcb5760405162461bcd60e51b815260206004820152604360248201526000805160206200477983398151915260448201527f2044455354494e4154494f4e5f4e4554574f524b5f444f45535f4e4f545f4d416064820152620a886960eb1b608482015260a40162000553565b602254600090610100900463ffffffff1662001fe957508862001fec565b50895b6200201762002008848b8b8b8b8b8b8051906020012062000c42565b8e8e63ffffffff168462000b40565b620009b25760405162461bcd60e51b815260206004820152602c60248201526000805160206200477983398151915260448201526b0814d35517d253959053125160a21b606482015260840162000553565b6000620020796101008362002cca565b905060006200208b6101008462002e03565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001d7b90849063a9059cbb60e01b9060640162001bf7565b60225460ff16620021575760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b6000620021ea826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166200226c9092919063ffffffff16565b80519091501562001d7b57808060200190518101906200220b9190620031f7565b62001d7b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c3a848460008585600080866001600160a01b0316858760405162002296919062002d38565b60006040518083038185875af1925050503d8060008114620022d5576040519150601f19603f3d011682016040523d82523d6000602084013e620022da565b606091505b5091509150620022ed87838387620022f8565b979650505050505050565b606083156200236c57825160000362002364576001600160a01b0385163b620023645760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c3a565b62000c3a8383815115620023835781518083602001fd5b8060405162461bcd60e51b815260040162000553919062003217565b61154c806200322d83390190565b6001600160a01b0381168114620023c357600080fd5b50565b8035620023d381620023ad565b919050565b803563ffffffff81168114620023d357600080fd5b60008083601f8401126200240057600080fd5b50813567ffffffffffffffff8111156200241957600080fd5b6020830191508360208285010111156200243257600080fd5b9250929050565b60008060008060008060a087890312156200245357600080fd5b86356200246081620023ad565b95506200247060208801620023d8565b945060408701356200248281620023ad565b935060608701359250608087013567ffffffffffffffff811115620024a657600080fd5b620024b489828a01620023ed565b979a9699509497509295939492505050565b60008060408385031215620024da57600080fd5b620024e583620023d8565b91506020830135620024f781620023ad565b809150509250929050565b6000602082840312156200251557600080fd5b81356200252281620023ad565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200256b576200256b62002529565b604052919050565b600082601f8301126200258557600080fd5b8135602067ffffffffffffffff821115620025a457620025a462002529565b8160051b620025b58282016200253f565b9283528481018201928281019087851115620025d057600080fd5b83870192505b84831015620022ed57823582529183019190830190620025d6565b600080600080608085870312156200260857600080fd5b84359350602085013567ffffffffffffffff808211156200262857600080fd5b620026368883890162002573565b94506040870135915080821682146200264e57600080fd5b509396929550929360600135925050565b60ff81168114620023c357600080fd5b600080600080600080600060e0888a0312156200268b57600080fd5b873562002698816200265f565b9650620026a860208901620023d8565b95506040880135620026ba81620023ad565b9450620026ca60608901620023d8565b93506080880135620026dc81620023ad565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002716576200271662002529565b50601f01601f191660200190565b600082601f8301126200273657600080fd5b81356200274d6200274782620026f9565b6200253f565b8181528460208386010111156200276357600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027a157600080fd5b8a3567ffffffffffffffff80821115620027ba57600080fd5b620027c88e838f0162002573565b9b50620027d860208e01620023d8565b9a5060408d0135995060608d01359850620027f660808e01620023d8565b97506200280660a08e01620023c6565b96506200281660c08e01620023d8565b95506200282660e08e01620023c6565b94506101008d013593506101208d01359150808211156200284657600080fd5b50620028558d828e0162002724565b9150509295989b9194979a5092959850565b6000806000606084860312156200287d57600080fd5b6200288884620023d8565b925060208401356200289a81620023ad565b91506040840135620028ac81620023ad565b809150509250925092565b600060208284031215620028ca57600080fd5b5035919050565b600080600080600080600060a0888a031215620028ed57600080fd5b620028f888620023d8565b965060208801356200290a81620023ad565b9550604088013567ffffffffffffffff808211156200292857600080fd5b620029368b838c01620023ed565b909750955060608a01359150808211156200295057600080fd5b506200295f8a828b01620023ed565b909450925050608088013562002975816200265f565b8091505092959891949750929550565b6000806000606084860312156200299b57600080fd5b620029a684620023d8565b92506020840135620029b881620023ad565b9150604084013567ffffffffffffffff811115620029d557600080fd5b620029e38682870162002724565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002a7257818101518382015260200162002a58565b8381111562000fce5750506000910152565b600082601f83011262002a9657600080fd5b815162002aa76200274782620026f9565b81815284602083860101111562002abd57600080fd5b62000c3a82602083016020870162002a55565b60006020828403121562002ae357600080fd5b815167ffffffffffffffff81111562002afb57600080fd5b62000c3a8482850162002a84565b60006020828403121562002b1c57600080fd5b815162002522816200265f565b6000815180845262002b4381602086016020860162002a55565b601f01601f19169290920160200192915050565b60608152600062002b6c606083018662002b29565b828103602084015262002b80818662002b29565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002be88483018762002b29565b925080851660e085015250509998505050505050505050565b6020808252603d908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e205a4b2d45564d20636f6e747261637474000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002cdc5762002cdc62002c9e565b500490565b60006001820162002cf65762002cf662002cb4565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d2f9083018462002b29565b95945050505050565b6000825162002d4c81846020870162002a55565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002da357600080fd5b835167ffffffffffffffff8082111562002dbc57600080fd5b62002dca8783880162002a84565b9450602086015191508082111562002de157600080fd5b5062002df08682870162002a84565b9250506040840151620028ac816200265f565b60008262002e155762002e1562002c9e565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e5960608301878962002e1a565b828103602084015262002e6e81868862002e1a565b91505060ff831660408301529695505050505050565b6000835162002e9881846020880162002a55565b83519083019062002eae81836020880162002a55565b01949350505050565b6000808585111562002ec857600080fd5b8386111562002ed657600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002eff57600080fd5b873562002f0c81620023ad565b9650602088013562002f1e81620023ad565b955060408801359450606088013593506080880135620026dc816200265f565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050455260408201527f4d49545f4f574e45525f4d5553545f42455f5448455f53454e44455200000000606082015260800190565b60208082526031908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205350456040820152704e4445525f4d5553545f42455f5448495360781b606082015260800190565b8015158114620023c357600080fd5b600080600080600080600080610100898b0312156200301957600080fd5b88356200302681620023ad565b975060208901356200303881620023ad565b965060408901359550606089013594506080890135620030588162002fec565b935060a08901356200306a816200265f565b979a969950949793969295929450505060c08201359160e0013590565b600181815b80851115620030c8578160001904821115620030ac57620030ac62002cb4565b80851615620030ba57918102915b93841c93908002906200308c565b509250929050565b600082620030e15750600162000a47565b81620030f05750600062000a47565b8160018114620031095760028114620031145762003134565b600191505062000a47565b60ff84111562003128576200312862002cb4565b50506001821b62000a47565b5060208310610133831016604e8410600b841016171562003159575081810a62000a47565b62003165838362003087565b80600019048211156200317c576200317c62002cb4565b029392505050565b6000620025228383620030d0565b600082821015620031a757620031a762002cb4565b500390565b60008219821115620031c257620031c262002cb4565b500190565b634e487b7160e01b600052600160045260246000fd5b600060208284031215620031f057600080fd5b5051919050565b6000602082840312156200320a57600080fd5b8151620025228162002fec565b60208152600062002522602083018462002b2956fe60c06040523480156200001157600080fd5b506040516200154c3803806200154c8339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611092620004ba60003960006104690152600081816102f9015261043301526110926000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611043565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526024908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e4f545f42526040820152634944474560e01b606082015260800190565b60006001820161105557611055610fd1565b506001019056fea264697066735822122048db6a6222fa164d21a8fcb1cd25d2a9e0eee016393c37dcc7b7fd638ef787c264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212201e5d89c55c1f97b1f79752036fe68d3686187613f7595faa2b990d177c1a04c264736f6c634300080f0033", + "bytecode": "0x608060405260043610620001675760003560e01c80637b6323c111620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b80637b6323c1146200037057806381b1c17414620003955780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b806334ac9cf2116200011e57806334ac9cf214620002a25780633ae0504714620002c45780633da8168214620002dc5780633e1970431462000301578063463855491462000326578063647c576c146200034b57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d3660046200244d565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009cd565b348015620001db57600080fd5b50620001f3620001ed366004620024da565b62000a06565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002516565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b50602754620001f3906001600160a01b031681565b348015620002d157600080fd5b506200022462000a59565b348015620002e957600080fd5b50620001a1620002fb36600462002605565b62000b4c565b3480156200030e57600080fd5b50620002246200032036600462002683565b62000c4e565b3480156200033357600080fd5b50620001836200034536600462002794565b62000cdb565b3480156200035857600080fd5b50620001836200036a3660046200287b565b62000e81565b3480156200037d57600080fd5b50620001836200038f36600462002794565b62000fe0565b348015620003a257600080fd5b50620001f3620003b4366004620028cb565b6024602052600090815260409020546001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028cb565b62001469565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d366004620028e5565b620014ae565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b036600462002999565b620015c5565b348015620004c357600080fd5b506200018362001771565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028cb565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a01565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044657374696e6174696f6e2063616e6e6f7420626520697473656c66000000606482015260840162000553565b60008060606001600160a01b03891662000687578534146200067d5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a908201527f20416d6f756e7420646f6573206e6f74206d61746368206d6573736167652e76606482015263616c756560e01b608482015260a40162000553565b60009150620008e7565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074457604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac90604401600060405180830381600087803b1580156200071757600080fd5b505af11580156200072c573d6000803e3d6000fd5b505050508060200151935080600001519250620008e5565b84156200075957620007598a888888620017a8565b620007706001600160a01b038b1633308a62001bd0565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f1919081019062002ae4565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000830573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085a919081019062002ae4565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000899573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008bf919062002b1d565b604051602001620008d39392919062002b6b565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092998979695949392919062002ba8565b60405180910390a1620009546200094e600084868c8c8c888051906020012062000c4e565b62001c3d565b6026546001600160a01b03166333d6247d6200096f62000a59565b6040518263ffffffff1660e01b81526004016200098e91815260200190565b600060405180830381600087803b158015620009a957600080fd5b505af1158015620009be573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009fa5760405162461bcd60e51b8152600401620005539062002c15565b62000a0462001d8e565b565b600060246000848460405160200162000a2192919062002c72565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b43578260011660010362000ac4576001816020811062000a905762000a9062002c9c565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af1565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000afe60028462002cde565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3a9062002cf5565b91505062000a64565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c3f578160011660010362000bc95786818151811062000b875762000b8762002c9c565b60200260200101518360405160200162000bab929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c1b565b8287828151811062000bdf5762000bdf62002c9c565b602002602001015160405160200162000c02929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2860028362002cde565b91508062000c368162002cf5565b91505062000b5c565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d015760405162461bcd60e51b8152600401620005539062002a01565b62000d178a8a8a8a8a8a8a8a8a8a600162001dec565b62000d288963ffffffff166200207d565b6000836001600160a01b03168387898560405160240162000d4c9392919062002d11565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d83919062002d4c565b60006040518083038185875af1925050503d806000811462000dc2576040519150601f19603f3d011682016040523d82523d6000602084013e62000dc7565b606091505b505090508062000e335760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e8813595cdcd859d94819985a5b195960821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e6c95949392919062002d6a565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea25750600054600160ff909116105b8062000ebe5750303b15801562000ebe575060005460ff166001145b62000f235760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f47576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fda576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff1615620010065760405162461bcd60e51b8152600401620005539062002a01565b6200101c8a8a8a8a8a8a8a8a8a8a600062001dec565b6200102d8963ffffffff166200207d565b6001600160a01b0385166200112457604080516000808252602082019092526001600160a01b03851690849060405162001068919062002d4c565b60006040518083038185875af1925050503d8060008114620010a7576040519150601f19603f3d011682016040523d82523d6000602084013e620010ac565b606091505b50509050806200111d5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a20604482015274115d1a195c881d1c985b9cd9995c8819985a5b1959605a1b606482015260840162000553565b506200141c565b60225463ffffffff6101009091048116908716036200115957620011536001600160a01b0386168484620020bf565b6200141c565b600086866040516020016200117092919062002c72565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013b457600080600085806020019051810190620011c2919062002da1565b925092509250600085848484604051620011dc90620023b3565b620011ea9392919062002b6b565b8190604051809103906000f59050801580156200120b573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f1990604401600060405180830381600087803b1580156200125b57600080fd5b505af115801562001270573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013a29392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001419565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f1990604401600060405180830381600087803b158015620013ff57600080fd5b505af115801562001414573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200145595949392919062002d6a565b60405180910390a150505050505050505050565b6000806200147a6101008462002cde565b905060006200148c6101008562002e17565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014c692919062002c72565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014f990620023b3565b601f1982820381018352601f90910116604081905262001526908d908d908d908d908d9060200162002e57565b60408051601f198184030181529082905262001546929160200162002e98565b604051602081830303815290604052805190602001206040516020016200159f94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015eb5760405162461bcd60e51b8152600401620005539062002a01565b60225463ffffffff610100909104811690841603620016735760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044657374696e6174696f6e2063616e6e6f7420626520697473656c6600606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016c798979695949392919062002ba8565b60405180910390a1620016fe6200094e6001602260019054906101000a900463ffffffff1633878734888051906020012062000c4e565b6026546001600160a01b03166333d6247d6200171962000a59565b6040518263ffffffff1660e01b81526004016200173891815260200190565b600060405180830381600087803b1580156200175357600080fd5b505af115801562001768573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b031633146200179e5760405162461bcd60e51b8152600401620005539062002c15565b62000a04620020f1565b6000620017eb83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021a092505050565b9050632afa533160e01b6001600160e01b0319821601620019e45760008080808080806200181d896004818d62002ecb565b8101906200182c919062002ef7565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200186e5760405162461bcd60e51b8152600401620005539062002f52565b6001600160a01b0386163014620018995760405162461bcd60e51b8152600401620005539062002faf565b8a8514620019105760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260448201527f6d697420616d6f756e7420646f6573206e6f74206d6174636800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162001990919062002d4c565b6000604051808303816000865af19150503d8060008114620019cf576040519150601f19603f3d011682016040523d82523d6000602084013e620019d4565b606091505b5050505050505050505062001bc9565b6001600160e01b031981166323f2ebc360e21b1462001a5a5760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e6f7460448201526a081d985b1a590818d85b1b60aa1b606482015260840162000553565b60008080808080808062001a728a6004818e62002ecb565b81019062001a81919062003011565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001ac55760405162461bcd60e51b8152600401620005539062002f52565b6001600160a01b038716301462001af05760405162461bcd60e51b8152600401620005539062002faf565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001b79919062002d4c565b6000604051808303816000865af19150503d806000811462001bb8576040519150601f19603f3d011682016040523d82523d6000602084013e62001bbd565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fda9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021a7565b80600162001c4e602060026200319a565b62001c5a9190620031a8565b6021541062001cbf5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d65726b6c65604482015269081d1c995948199d5b1b60b21b606482015260840162000553565b60016021600082825462001cd49190620031c2565b909155505060215460005b602081101562001d7e578160011660010362001d1457826001826020811062001d0c5762001d0c62002c9c565b015550505050565b6001816020811062001d2a5762001d2a62002c9c565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d67919062002cde565b91508062001d758162002cf5565b91505062001cdf565b5062001d89620031dd565b505050565b60225460ff161562001db45760405162461bcd60e51b8152600401620005539062002a01565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001dfd8a63ffffffff1662001469565b1562001e545760405162461bcd60e51b815260206004820152603060248201526000805160206200479b83398151915260448201526f08105b1c9958591e4818db185a5b595960821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ec8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001eee9190620031f3565b90508060000362001f575760405162461bcd60e51b815260206004820152603760248201526000805160206200479b83398151915260448201527f20476c6f62616c45786974526f6f7420696e76616c6964000000000000000000606482015260840162000553565b60225463ffffffff878116610100909204161462001fd95760405162461bcd60e51b815260206004820152604360248201526000805160206200479b83398151915260448201527f2044657374696e6174696f6e206e6574776f726b20646f6573206e6f74206d616064820152620e8c6d60eb1b608482015260a40162000553565b602254600090610100900463ffffffff1662001ff757508862001ffa565b50895b6200202562002016848b8b8b8b8b8b8051906020012062000c4e565b8e8e63ffffffff168462000b4c565b620009be5760405162461bcd60e51b815260206004820152603260248201526000805160206200479b8339815191526044820152711024b73b30b634b21039b6ba10383937b7b360711b606482015260840162000553565b60006200208d6101008362002cde565b905060006200209f6101008462002e17565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001d8990849063a9059cbb60e01b9060640162001c05565b60225460ff166200216b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b6000620021fe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022809092919063ffffffff16565b80519091501562001d8957808060200190518101906200221f91906200320d565b62001d895760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c46848460008585600080866001600160a01b03168587604051620022aa919062002d4c565b60006040518083038185875af1925050503d8060008114620022e9576040519150601f19603f3d011682016040523d82523d6000602084013e620022ee565b606091505b509150915062002301878383876200230c565b979650505050505050565b606083156200238057825160000362002378576001600160a01b0385163b620023785760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c46565b62000c468383815115620023975781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200322d565b611558806200324383390190565b6001600160a01b0381168114620023d757600080fd5b50565b8035620023e781620023c1565b919050565b803563ffffffff81168114620023e757600080fd5b60008083601f8401126200241457600080fd5b50813567ffffffffffffffff8111156200242d57600080fd5b6020830191508360208285010111156200244657600080fd5b9250929050565b60008060008060008060a087890312156200246757600080fd5b86356200247481620023c1565b95506200248460208801620023ec565b945060408701356200249681620023c1565b935060608701359250608087013567ffffffffffffffff811115620024ba57600080fd5b620024c889828a0162002401565b979a9699509497509295939492505050565b60008060408385031215620024ee57600080fd5b620024f983620023ec565b915060208301356200250b81620023c1565b809150509250929050565b6000602082840312156200252957600080fd5b81356200253681620023c1565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200257f576200257f6200253d565b604052919050565b600082601f8301126200259957600080fd5b8135602067ffffffffffffffff821115620025b857620025b86200253d565b8160051b620025c982820162002553565b9283528481018201928281019087851115620025e457600080fd5b83870192505b848310156200230157823582529183019190830190620025ea565b600080600080608085870312156200261c57600080fd5b84359350602085013567ffffffffffffffff808211156200263c57600080fd5b6200264a8883890162002587565b94506040870135915080821682146200266257600080fd5b509396929550929360600135925050565b60ff81168114620023d757600080fd5b600080600080600080600060e0888a0312156200269f57600080fd5b8735620026ac8162002673565b9650620026bc60208901620023ec565b95506040880135620026ce81620023c1565b9450620026de60608901620023ec565b93506080880135620026f081620023c1565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200272a576200272a6200253d565b50601f01601f191660200190565b600082601f8301126200274a57600080fd5b8135620027616200275b826200270d565b62002553565b8181528460208386010111156200277757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027b557600080fd5b8a3567ffffffffffffffff80821115620027ce57600080fd5b620027dc8e838f0162002587565b9b50620027ec60208e01620023ec565b9a5060408d0135995060608d013598506200280a60808e01620023ec565b97506200281a60a08e01620023da565b96506200282a60c08e01620023ec565b95506200283a60e08e01620023da565b94506101008d013593506101208d01359150808211156200285a57600080fd5b50620028698d828e0162002738565b9150509295989b9194979a5092959850565b6000806000606084860312156200289157600080fd5b6200289c84620023ec565b92506020840135620028ae81620023c1565b91506040840135620028c081620023c1565b809150509250925092565b600060208284031215620028de57600080fd5b5035919050565b600080600080600080600060a0888a0312156200290157600080fd5b6200290c88620023ec565b965060208801356200291e81620023c1565b9550604088013567ffffffffffffffff808211156200293c57600080fd5b6200294a8b838c0162002401565b909750955060608a01359150808211156200296457600080fd5b50620029738a828b0162002401565b9094509250506080880135620029898162002673565b8091505092959891949750929550565b600080600060608486031215620029af57600080fd5b620029ba84620023ec565b92506020840135620029cc81620023c1565b9150604084013567ffffffffffffffff811115620029e957600080fd5b620029f78682870162002738565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002a8657818101518382015260200162002a6c565b8381111562000fda5750506000910152565b600082601f83011262002aaa57600080fd5b815162002abb6200275b826200270d565b81815284602083860101111562002ad157600080fd5b62000c4682602083016020870162002a69565b60006020828403121562002af757600080fd5b815167ffffffffffffffff81111562002b0f57600080fd5b62000c468482850162002a98565b60006020828403121562002b3057600080fd5b8151620025368162002673565b6000815180845262002b5781602086016020860162002a69565b601f01601f19169290920160200192915050565b60608152600062002b80606083018662002b3d565b828103602084015262002b94818662002b3d565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002bfc8483018762002b3d565b925080851660e085015250509998505050505050505050565b6020808252603a908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e5a6b45564d20636f6e7472616374000000000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002cf05762002cf062002cb2565b500490565b60006001820162002d0a5762002d0a62002cc8565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d439083018462002b3d565b95945050505050565b6000825162002d6081846020870162002a69565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002db757600080fd5b835167ffffffffffffffff8082111562002dd057600080fd5b62002dde8783880162002a98565b9450602086015191508082111562002df557600080fd5b5062002e048682870162002a98565b9250506040840151620028c08162002673565b60008262002e295762002e2962002cb2565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e6d60608301878962002e2e565b828103602084015262002e8281868862002e2e565b91505060ff831660408301529695505050505050565b6000835162002eac81846020880162002a69565b83519083019062002ec281836020880162002a69565b01949350505050565b6000808585111562002edc57600080fd5b8386111562002eea57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f1357600080fd5b873562002f2081620023c1565b9650602088013562002f3281620023c1565b955060408801359450606088013593506080880135620026f08162002673565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260408201527f6d6974206f776e6572206d757374206265207468652073656e64657200000000606082015260800190565b60208082526033908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205370656040820152726e646572206d7573742062652027746869732760681b606082015260800190565b8015158114620023d757600080fd5b600080600080600080600080610100898b0312156200302f57600080fd5b88356200303c81620023c1565b975060208901356200304e81620023c1565b9650604089013595506060890135945060808901356200306e8162003002565b935060a0890135620030808162002673565b979a969950949793969295929450505060c08201359160e0013590565b600181815b80851115620030de578160001904821115620030c257620030c262002cc8565b80851615620030d057918102915b93841c9390800290620030a2565b509250929050565b600082620030f75750600162000a53565b81620031065750600062000a53565b81600181146200311f57600281146200312a576200314a565b600191505062000a53565b60ff8411156200313e576200313e62002cc8565b50506001821b62000a53565b5060208310610133831016604e8410600b84101617156200316f575081810a62000a53565b6200317b83836200309d565b806000190482111562003192576200319262002cc8565b029392505050565b6000620025368383620030e6565b600082821015620031bd57620031bd62002cc8565b500390565b60008219821115620031d857620031d862002cc8565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200320657600080fd5b5051919050565b6000602082840312156200322057600080fd5b8151620025368162003002565b60208152600062002536602083018462002b3d56fe60c06040523480156200001157600080fd5b5060405162001558380380620015588339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109e620004ba60003960006104690152600081816102f90152610433015261109e6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866106638361104f565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161106157611061610fd1565b506001019056fea26469706673582212205af0e6dd4760d4ae367515578b46c4d5988b10ae47473e817626188baa0c03a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220d45a8ebcef9fc50cf59227d05e3d4a6aa8384293f92bcc21bc9ac4198225157364736f6c634300080f0033", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x01", "0x0000000000000000000000000000000000000000000000000000000000000022": "0x0100", @@ -29,7 +29,7 @@ "balance": "0", "nonce": "1", "address": "0xae4bb80be56b819606589de61d5ec3b522eeb032", - "bytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610156565b60006020819052908152604090205481565b6100a061009b366004610156565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b031633146101515760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a4b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f4e4c595f42524944474500000000000000606482015260840160405180910390fd5b600155565b60006020828403121561016857600080fd5b503591905056fea2646970667358221220f7451da1829b0ecb4873ed6f3f3d32d71e72a79502689acac6a4216f7a54a4a164736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610164565b60006020819052908152604090205481565b6100a061009b366004610164565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b0316331461015f5760405162461bcd60e51b815260206004820152604560248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f6e6c7920506f6c79676f6e5a6b45564d42606482015264726964676560d81b608482015260a40160405180910390fd5b600155565b60006020828403121561017657600080fd5b503591905056fea26469706673582212203d6a7f66369fc06c0d8b9ca38eabcd1a1bdd000df9e10846e604066a7c3c182f64736f6c634300080f0033", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000002": "0x9d98deabc42dd696deb9e40b4f1cab7ddbf55988" }, diff --git a/package.json b/package.json index b8de107cd..a772cc425 100644 --- a/package.json +++ b/package.json @@ -56,15 +56,16 @@ "solidity-docgen": "^0.5.16" }, "scripts": { + "saveDeployment:goerli": "mkdir -p deployments/goerli_$(date +%s) && cp -r deployment/deploy_*.json deployments/goerli_$(date +%s) && cp .openzeppelin/goerli.json deployments/goerli_$(date +%s)", "test": "npx hardhat test test/contracts/**.test.js", "docgen": "npx solidity-docgen --solc-module solc-0.8 -t ./docs/templates -e ./contracts/verifiers,./contracts/mocks", - "deploy:PoE2_0:hardhat": "npx hardhat run deployment/deployPoE_v2-0.js --network hardhat", - "deploy:PoE2_0:goerli": "npx hardhat run deployment/deployPoE_v2-0.js --network goerli", - "verify:PoE2_0:goerli": "npx hardhat run deployment/verifyPoE_v2-0.js --network goerli", + "deploy:ZkEVM:hardhat": "npx hardhat run deployment/deployContracts.js --network hardhat", + "deploy:ZkEVM:goerli": "npx hardhat run deployment/deployContracts.js --network goerli && npm run saveDeployment:goerli", + "upgrade:timelock:goerli": "npx hardhat run deployment/timeLockUpgrade.js --network goerli", + "verify:ZkEVM:goerli": "npx hardhat run deployment/verifyContracts.js --network goerli", "lint": "npx eslint ./test && npx eslint ./docker/scripts && npx eslint ./deployment && npx eslint ./src", "lint:fix": "npx eslint ./test --fix && npx eslint ./docker/scripts --fix && npx eslint ./deployment --fix && npx eslint ./src --fix", "compile": "npx hardhat compile", - "check:deploy:PoE": "npx hardhat node > /dev/null 2>&1 & npx hardhat run --network localhost deployment/testnet/deployPoETestnet.js && npx hardhat run --network localhost deployment/testnet/checkDeployment.js && pkill -f 'hardhat'", "docker:contracts": "./docker/scripts/deploy-docker.sh", "push:docker:contracts": "docker push hermeznetwork/geth-zkevm-contracts", "update:genesis": "node src/create-genesis.js --gen ../deployment/genesis-gen.json --out ../deployment/genesis.json && node src/create-genesis.js --gen ../docker/scripts/genesis_gen_docker.json --out ../docker/scripts/genesis_docker.json" diff --git a/test/contracts/emergencyManager.test.js b/test/contracts/emergencyManager.test.js index 566d3e75e..85834351a 100644 --- a/test/contracts/emergencyManager.test.js +++ b/test/contracts/emergencyManager.test.js @@ -55,7 +55,7 @@ describe('Emergency mode test', () => { const polygonZkEVMBridgeFactory = await ethers.getContractFactory('PolygonZkEVMBridge'); polygonZkEVMBridgeContract = await upgrades.deployProxy(polygonZkEVMBridgeFactory, [], { initializer: false }); - // deploy PoE + // deploy PolygonZkEVMMock const PolygonZkEVMFactory = await ethers.getContractFactory('PolygonZkEVMMock'); polygonZkEVMContract = await upgrades.deployProxy(PolygonZkEVMFactory, [], { initializer: false }); diff --git a/test/contracts/proofOfEfficiency.test.js b/test/contracts/proofOfEfficiency.test.js index 8d0ed62a2..044cdc54b 100644 --- a/test/contracts/proofOfEfficiency.test.js +++ b/test/contracts/proofOfEfficiency.test.js @@ -60,7 +60,7 @@ describe('Polygon ZK-EVM', () => { const polygonZkEVMBridgeFactory = await ethers.getContractFactory('PolygonZkEVMBridge'); polygonZkEVMBridgeContract = await upgrades.deployProxy(polygonZkEVMBridgeFactory, [], { initializer: false }); - // deploy PoE + // deploy PolygonZkEVMMock const PolygonZkEVMFactory = await ethers.getContractFactory('PolygonZkEVMMock'); polygonZkEVMContract = await upgrades.deployProxy(PolygonZkEVMFactory, [], { initializer: false }); diff --git a/test/contracts/real-prover/real-flow.test.js b/test/contracts/real-prover/real-flow.test.js index a0a531e5b..46f81a4fc 100644 --- a/test/contracts/real-prover/real-flow.test.js +++ b/test/contracts/real-prover/real-flow.test.js @@ -72,7 +72,7 @@ describe('Real flow test', () => { const polygonZkEVMBridgeFactory = await ethers.getContractFactory('PolygonZkEVMBridge'); polygonZkEVMBridgeContract = await upgrades.deployProxy(polygonZkEVMBridgeFactory, [], { initializer: false }); - // deploy PoE + // deploy PolygonZkEVMMock const PolygonZkEVMFactory = await ethers.getContractFactory('PolygonZkEVMMock'); polygonZkEVMContract = await upgrades.deployProxy(PolygonZkEVMFactory, [], { initializer: false }); @@ -122,7 +122,7 @@ describe('Real flow test', () => { maticTokenContract.connect(trustedSequencer).approve(polygonZkEVMContract.address, maticAmount.mul(batchesNum)), ).to.emit(maticTokenContract, 'Approval'); - // prepare PoE + // prepare PolygonZkEVMMock await polygonZkEVMContract.setVerifiedBatch(inputJson.oldNumBatch); await polygonZkEVMContract.setSequencedBatch(inputJson.oldNumBatch); const lastTimestamp = batchesData[batchesNum - 1].timestamp; diff --git a/test/contracts/timelockUpgradeTest.js b/test/contracts/timelockUpgradeTest.js index c48b4e9bc..b382b42ce 100644 --- a/test/contracts/timelockUpgradeTest.js +++ b/test/contracts/timelockUpgradeTest.js @@ -77,7 +77,7 @@ describe('Polygon ZK-EVM', () => { const polygonZkEVMBridgeFactory = await ethers.getContractFactory('PolygonZkEVMBridge'); polygonZkEVMBridgeContract = await upgrades.deployProxy(polygonZkEVMBridgeFactory, [], { initializer: false }); - // deploy PoE + // deploy PolygonZkEVMMock const PolygonZkEVMFactory = await ethers.getContractFactory('PolygonZkEVMMock'); polygonZkEVMContract = await upgrades.deployProxy(PolygonZkEVMFactory, [], { initializer: false }); From 7b016f8bc57e3a88c41895d1480ea23b9990c539 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Wed, 21 Dec 2022 16:26:28 +0100 Subject: [PATCH 68/71] update package json --- .eslintrc.js | 1 + deployment/deployContracts.js | 2 +- package.json | 6 ++++-- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index c66a85029..a301d47bc 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -25,5 +25,6 @@ module.exports = { 'import/prefer-default-export': [0], 'lines-between-class-members': ['error', 'always', { exceptAfterSingleLine: true }], 'multiline-comment-style': 'error', + 'import/no-extraneous-dependencies': 'off' }, }; diff --git a/deployment/deployContracts.js b/deployment/deployContracts.js index 541051737..99158431b 100644 --- a/deployment/deployContracts.js +++ b/deployment/deployContracts.js @@ -15,7 +15,7 @@ const pathOZUpgradability = path.join(__dirname, `../.openzeppelin/${process.env async function main() { // Check that there0s no previous OZ deployment if (fs.existsSync(pathOZUpgradability)) { - throw new Error(`Theres upggradability information from previous deployments, it's mandatory to erase them before start a new one, path: ${pathOZUpgradability}`); + throw new Error(`There's upgradability information from previous deployments, it's mandatory to erase them before start a new one, path: ${pathOZUpgradability}`); } // Constant variables diff --git a/package.json b/package.json index a772cc425..afed44cdc 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,10 @@ "homepage": "https://github.com/0xPolygonHermez/contracts-zkEVM#readme", "license": "pending", "dependencies": { + "chai": "^4.3.4", + "ethers": "^5.5.1" + }, + "devDependencies": { "@0xpolygonhermez/zkevm-commonjs": "github:0xPolygonHermez/zkevm-commonjs#v0.6.0.0-rc.1", "@nomiclabs/hardhat-ethers": "^2.0.2", "@nomiclabs/hardhat-etherscan": "^3.1.0", @@ -38,14 +42,12 @@ "@openzeppelin/contracts-upgradeable": "^4.7.3", "@openzeppelin/hardhat-upgrades": "^1.20.0", "@openzeppelin/test-helpers": "^0.5.15", - "chai": "^4.3.4", "circomlibjs": "0.1.1", "dotenv": "^8.2.0", "eslint": "^8.3.0", "eslint-config-airbnb-base": "^15.0.0", "eslint-plugin-mocha": "^9.0.0", "ethereum-waffle": "^3.4.4", - "ethers": "^5.5.1", "ffjavascript": "^0.2.39", "hardhat": "^2.11.1", "hardhat-gas-reporter": "^1.0.4", From fb13a1bb89835c19152a9053f5cd0cbfe08216bd Mon Sep 17 00:00:00 2001 From: invocamanman Date: Thu, 22 Dec 2022 03:18:35 +0100 Subject: [PATCH 69/71] last fixes --- compiled-contracts/ERC20PermitMock.json | 4 +- compiled-contracts/PolygonZkEVM.json | 4 +- compiled-contracts/PolygonZkEVMBridge.json | 4 +- .../PolygonZkEVMBridgeMock.json | 4 +- .../PolygonZkEVMGlobalExitRoot.json | 4 +- .../PolygonZkEVMGlobalExitRootL2.json | 4 +- .../PolygonZkEVMGlobalExitRootL2Mock.json | 4 +- .../PolygonZkEVMGlobalExitRootMock.json | 4 +- compiled-contracts/PolygonZkEVMMock.json | 4 +- compiled-contracts/TokenWrapped.json | 4 +- .../VerifierRollupHelperMock.json | 4 +- contracts/PolygonZkEVM.sol | 83 +++++++++---------- hardhat.config.js | 2 +- test/contracts/emergencyManager.test.js | 6 +- test/contracts/proofOfEfficiency.test.js | 38 ++++----- 15 files changed, 84 insertions(+), 89 deletions(-) diff --git a/compiled-contracts/ERC20PermitMock.json b/compiled-contracts/ERC20PermitMock.json index 7569f67ac..c9da74d3a 100644 --- a/compiled-contracts/ERC20PermitMock.json +++ b/compiled-contracts/ERC20PermitMock.json @@ -517,8 +517,8 @@ "type": "function" } ], - "bytecode": "0x60806040526040516200144b3803806200144b833981016040819052620000269162000209565b838360036200003683826200032a565b5060046200004582826200032a565b5050506200005a82826200007160201b60201c565b50508151602090920191909120600655506200041d565b6001600160a01b038216620000cc5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620000e09190620003f6565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200016457600080fd5b81516001600160401b03808211156200018157620001816200013c565b604051601f8301601f19908116603f01168101908282118183101715620001ac57620001ac6200013c565b81604052838152602092508683858801011115620001c957600080fd5b600091505b83821015620001ed5785820183015181830184015290820190620001ce565b83821115620001ff5760008385830101525b9695505050505050565b600080600080608085870312156200022057600080fd5b84516001600160401b03808211156200023857600080fd5b620002468883890162000152565b955060208701519150808211156200025d57600080fd5b506200026c8782880162000152565b604087015190945090506001600160a01b03811681146200028c57600080fd5b6060959095015193969295505050565b600181811c90821680620002b157607f821691505b602082108103620002d257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200013757600081815260208120601f850160051c81016020861015620003015750805b601f850160051c820191505b8181101562000322578281556001016200030d565b505050505050565b81516001600160401b038111156200034657620003466200013c565b6200035e816200035784546200029c565b84620002d8565b602080601f8311600181146200039657600084156200037d5750858301515b600019600386901b1c1916600185901b17855562000322565b600085815260208120601f198616915b82811015620003c757888601518255948401946001909101908401620003a6565b5085821015620003e65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156200041857634e487b7160e01b600052601160045260246000fd5b500190565b61101e806200042d6000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806340c10f19116100c35780639e4e73181161007c5780639e4e73181461033c578063a457c2d714610363578063a9059cbb14610376578063c473af3314610389578063d505accf146103b0578063dd62ed3e146103c357600080fd5b806340c10f19146102b257806342966c68146102c557806356189cb4146102d857806370a08231146102eb5780637ecebe001461031457806395d89b411461033457600080fd5b806323b872dd1161011557806323b872dd146101c357806330adf81f146101d6578063313ce567146101fd5780633408e4701461020c5780633644e51514610212578063395093511461029f57600080fd5b806304622c2e1461015257806306fdde031461016e578063095ea7b31461018357806318160ddd146101a6578063222f5be0146101ae575b600080fd5b61015b60065481565b6040519081526020015b60405180910390f35b6101766103d6565b6040516101659190610daf565b610196610191366004610e20565b610468565b6040519015158152602001610165565b60025461015b565b6101c16101bc366004610e4a565b610480565b005b6101966101d1366004610e4a565b610490565b61015b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60405160128152602001610165565b4661015b565b61015b6006546000907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f907fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc646604080516020810195909552840192909252606083015260808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6101966102ad366004610e20565b6104b4565b6101c16102c0366004610e20565b6104d6565b6101c16102d3366004610e86565b6104e4565b6101c16102e6366004610e4a565b6104f1565b61015b6102f9366004610e9f565b6001600160a01b031660009081526020819052604090205490565b61015b610322366004610e9f565b60056020526000908152604090205481565b6101766104fc565b61015b7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc681565b610196610371366004610e20565b61050b565b610196610384366004610e20565b61058b565b61015b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101c16103be366004610ec1565b610599565b61015b6103d1366004610f34565b6106ac565b6060600380546103e590610f67565b80601f016020809104026020016040519081016040528092919081815260200182805461041190610f67565b801561045e5780601f106104335761010080835404028352916020019161045e565b820191906000526020600020905b81548152906001019060200180831161044157829003601f168201915b5050505050905090565b6000336104768185856106d7565b5060019392505050565b61048b8383836107fb565b505050565b60003361049e8582856109a1565b6104a98585856107fb565b506001949350505050565b6000336104768185856104c783836106ac565b6104d19190610fb7565b6106d7565b6104e08282610a15565b5050565b6104ee3382610ad4565b50565b61048b8383836106d7565b6060600480546103e590610f67565b6000338161051982866106ac565b90508381101561057e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6104a982868684036106d7565b6000336104768185856107fb565b428410156105e95760405162461bcd60e51b815260206004820152601960248201527f48455a3a3a7065726d69743a20415554485f45585049524544000000000000006044820152606401610575565b6001600160a01b038716600090815260056020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661063683610fcf565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506106978882868686610c06565b6106a28888886106d7565b5050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166107395760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610575565b6001600160a01b03821661079a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610575565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661085f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610575565b6001600160a01b0382166108c15760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610575565b6001600160a01b038316600090815260208190526040902054818110156109395760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610575565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b50505050565b60006109ad84846106ac565b9050600019811461099b5781811015610a085760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610575565b61099b84848484036106d7565b6001600160a01b038216610a6b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610575565b8060026000828254610a7d9190610fb7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610b345760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610575565b6001600160a01b03821660009081526020819052604090205481811015610ba85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610575565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600654604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f602080830191909152818301939093527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528251808303909101815260c082019092528151919092012061190160f01b60e083015260e282018190526101028201869052906000906101220160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610d19573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590610d4f5750876001600160a01b0316816001600160a01b0316145b6106a25760405162461bcd60e51b815260206004820152602b60248201527f48455a3a3a5f76616c69646174655369676e6564446174613a20494e56414c4960448201526a445f5349474e415455524560a81b6064820152608401610575565b600060208083528351808285015260005b81811015610ddc57858101830151858201604001528201610dc0565b81811115610dee576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e1b57600080fd5b919050565b60008060408385031215610e3357600080fd5b610e3c83610e04565b946020939093013593505050565b600080600060608486031215610e5f57600080fd5b610e6884610e04565b9250610e7660208501610e04565b9150604084013590509250925092565b600060208284031215610e9857600080fd5b5035919050565b600060208284031215610eb157600080fd5b610eba82610e04565b9392505050565b600080600080600080600060e0888a031215610edc57600080fd5b610ee588610e04565b9650610ef360208901610e04565b95506040880135945060608801359350608088013560ff81168114610f1757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f4757600080fd5b610f5083610e04565b9150610f5e60208401610e04565b90509250929050565b600181811c90821680610f7b57607f821691505b602082108103610f9b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610fca57610fca610fa1565b500190565b600060018201610fe157610fe1610fa1565b506001019056fea2646970667358221220fed9c4e501a554d351ae79d6f67cb0180f085eba33f9e7632903be61c06b48c664736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061014d5760003560e01c806340c10f19116100c35780639e4e73181161007c5780639e4e73181461033c578063a457c2d714610363578063a9059cbb14610376578063c473af3314610389578063d505accf146103b0578063dd62ed3e146103c357600080fd5b806340c10f19146102b257806342966c68146102c557806356189cb4146102d857806370a08231146102eb5780637ecebe001461031457806395d89b411461033457600080fd5b806323b872dd1161011557806323b872dd146101c357806330adf81f146101d6578063313ce567146101fd5780633408e4701461020c5780633644e51514610212578063395093511461029f57600080fd5b806304622c2e1461015257806306fdde031461016e578063095ea7b31461018357806318160ddd146101a6578063222f5be0146101ae575b600080fd5b61015b60065481565b6040519081526020015b60405180910390f35b6101766103d6565b6040516101659190610daf565b610196610191366004610e20565b610468565b6040519015158152602001610165565b60025461015b565b6101c16101bc366004610e4a565b610480565b005b6101966101d1366004610e4a565b610490565b61015b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60405160128152602001610165565b4661015b565b61015b6006546000907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f907fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc646604080516020810195909552840192909252606083015260808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6101966102ad366004610e20565b6104b4565b6101c16102c0366004610e20565b6104d6565b6101c16102d3366004610e86565b6104e4565b6101c16102e6366004610e4a565b6104f1565b61015b6102f9366004610e9f565b6001600160a01b031660009081526020819052604090205490565b61015b610322366004610e9f565b60056020526000908152604090205481565b6101766104fc565b61015b7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc681565b610196610371366004610e20565b61050b565b610196610384366004610e20565b61058b565b61015b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6101c16103be366004610ec1565b610599565b61015b6103d1366004610f34565b6106ac565b6060600380546103e590610f67565b80601f016020809104026020016040519081016040528092919081815260200182805461041190610f67565b801561045e5780601f106104335761010080835404028352916020019161045e565b820191906000526020600020905b81548152906001019060200180831161044157829003601f168201915b5050505050905090565b6000336104768185856106d7565b5060019392505050565b61048b8383836107fb565b505050565b60003361049e8582856109a1565b6104a98585856107fb565b506001949350505050565b6000336104768185856104c783836106ac565b6104d19190610fb7565b6106d7565b6104e08282610a15565b5050565b6104ee3382610ad4565b50565b61048b8383836106d7565b6060600480546103e590610f67565b6000338161051982866106ac565b90508381101561057e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6104a982868684036106d7565b6000336104768185856107fb565b428410156105e95760405162461bcd60e51b815260206004820152601960248201527f48455a3a3a7065726d69743a20415554485f45585049524544000000000000006044820152606401610575565b6001600160a01b038716600090815260056020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661063683610fcf565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506106978882868686610c06565b6106a28888886106d7565b5050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166107395760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610575565b6001600160a01b03821661079a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610575565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661085f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610575565b6001600160a01b0382166108c15760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610575565b6001600160a01b038316600090815260208190526040902054818110156109395760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610575565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b50505050565b60006109ad84846106ac565b9050600019811461099b5781811015610a085760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610575565b61099b84848484036106d7565b6001600160a01b038216610a6b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610575565b8060026000828254610a7d9190610fb7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610b345760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610575565b6001600160a01b03821660009081526020819052604090205481811015610ba85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610575565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600654604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f602080830191909152818301939093527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528251808303909101815260c082019092528151919092012061190160f01b60e083015260e282018190526101028201869052906000906101220160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610d19573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590610d4f5750876001600160a01b0316816001600160a01b0316145b6106a25760405162461bcd60e51b815260206004820152602b60248201527f48455a3a3a5f76616c69646174655369676e6564446174613a20494e56414c4960448201526a445f5349474e415455524560a81b6064820152608401610575565b600060208083528351808285015260005b81811015610ddc57858101830151858201604001528201610dc0565b81811115610dee576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e1b57600080fd5b919050565b60008060408385031215610e3357600080fd5b610e3c83610e04565b946020939093013593505050565b600080600060608486031215610e5f57600080fd5b610e6884610e04565b9250610e7660208501610e04565b9150604084013590509250925092565b600060208284031215610e9857600080fd5b5035919050565b600060208284031215610eb157600080fd5b610eba82610e04565b9392505050565b600080600080600080600060e0888a031215610edc57600080fd5b610ee588610e04565b9650610ef360208901610e04565b95506040880135945060608801359350608088013560ff81168114610f1757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f4757600080fd5b610f5083610e04565b9150610f5e60208401610e04565b90509250929050565b600181811c90821680610f7b57607f821691505b602082108103610f9b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610fca57610fca610fa1565b500190565b600060018201610fe157610fe1610fa1565b506001019056fea2646970667358221220fed9c4e501a554d351ae79d6f67cb0180f085eba33f9e7632903be61c06b48c664736f6c634300080f0033", + "bytecode": "0x60806040526040516200141e3803806200141e833981016040819052620000269162000209565b838360036200003683826200032a565b5060046200004582826200032a565b5050506200005a82826200007160201b60201c565b50508151602090920191909120600655506200041d565b6001600160a01b038216620000cc5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620000e09190620003f6565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200016457600080fd5b81516001600160401b03808211156200018157620001816200013c565b604051601f8301601f19908116603f01168101908282118183101715620001ac57620001ac6200013c565b81604052838152602092508683858801011115620001c957600080fd5b600091505b83821015620001ed5785820183015181830184015290820190620001ce565b83821115620001ff5760008385830101525b9695505050505050565b600080600080608085870312156200022057600080fd5b84516001600160401b03808211156200023857600080fd5b620002468883890162000152565b955060208701519150808211156200025d57600080fd5b506200026c8782880162000152565b604087015190945090506001600160a01b03811681146200028c57600080fd5b6060959095015193969295505050565b600181811c90821680620002b157607f821691505b602082108103620002d257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200013757600081815260208120601f850160051c81016020861015620003015750805b601f850160051c820191505b8181101562000322578281556001016200030d565b505050505050565b81516001600160401b038111156200034657620003466200013c565b6200035e816200035784546200029c565b84620002d8565b602080601f8311600181146200039657600084156200037d5750858301515b600019600386901b1c1916600185901b17855562000322565b600085815260208120601f198616915b82811015620003c757888601518255948401946001909101908401620003a6565b5085821015620003e65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082198211156200041857634e487b7160e01b600052601160045260246000fd5b500190565b610ff1806200042d6000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806340c10f19116100c35780639e4e73181161007c5780639e4e7318146102b7578063a457c2d7146102cc578063a9059cbb146102df578063c473af33146102f2578063d505accf14610307578063dd62ed3e1461031a57600080fd5b806340c10f191461022d57806342966c681461024057806356189cb41461025357806370a08231146102665780637ecebe001461028f57806395d89b41146102af57600080fd5b806323b872dd1161011557806323b872dd146101c357806330adf81f146101d6578063313ce567146101fd5780633408e4701461020c5780633644e51514610212578063395093511461021a57600080fd5b806304622c2e1461015257806306fdde031461016e578063095ea7b31461018357806318160ddd146101a6578063222f5be0146101ae575b600080fd5b61015b60065481565b6040519081526020015b60405180910390f35b61017661032d565b6040516101659190610cf6565b610196610191366004610d67565b6103bf565b6040519015158152602001610165565b60025461015b565b6101c16101bc366004610d91565b6103d7565b005b6101966101d1366004610d91565b6103e7565b61015b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60405160128152602001610165565b4661015b565b61015b61040b565b610196610228366004610d67565b610460565b6101c161023b366004610d67565b610482565b6101c161024e366004610dcd565b610490565b6101c1610261366004610d91565b61049d565b61015b610274366004610de6565b6001600160a01b031660009081526020819052604090205490565b61015b61029d366004610de6565b60056020526000908152604090205481565b6101766104a8565b61015b600080516020610f5c83398151915281565b6101966102da366004610d67565b6104b7565b6101966102ed366004610d67565b610537565b61015b600080516020610f9c83398151915281565b6101c1610315366004610e08565b610545565b61015b610328366004610e7b565b610654565b60606003805461033c90610eae565b80601f016020809104026020016040519081016040528092919081815260200182805461036890610eae565b80156103b55780601f1061038a576101008083540402835291602001916103b5565b820191906000526020600020905b81548152906001019060200180831161039857829003601f168201915b5050505050905090565b6000336103cd81858561067f565b5060019392505050565b6103e28383836107a3565b505050565b6000336103f5858285610937565b6104008585856107a3565b506001949350505050565b60065460405160009161044591600080516020610f9c8339815191529190600080516020610f5c8339815191529046903090602001610ee8565b60405160208183030381529060405280519060200120905090565b6000336103cd8185856104738383610654565b61047d9190610f2a565b61067f565b61048c82826109ab565b5050565b61049a3382610a58565b50565b6103e283838361067f565b60606004805461033c90610eae565b600033816104c58286610654565b90508381101561052a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b610400828686840361067f565b6000336103cd8185856107a3565b428410156105915760405162461bcd60e51b81526020600482015260196024820152781211568e8e9c195c9b5a5d0e881055551217d1561412549151603a1b6044820152606401610521565b6001600160a01b038716600090815260056020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866105de83610f42565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905061063f8882868686610b78565b61064a88888861067f565b5050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166106e15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610521565b6001600160a01b0382166107425760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610521565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166108075760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610521565b6001600160a01b0382166108695760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610521565b6001600160a01b038316600090815260208190526040902054818110156108e15760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610521565b6001600160a01b0384811660008181526020818152604080832087870390559387168083529184902080548701905592518581529092600080516020610f7c833981519152910160405180910390a35b50505050565b60006109438484610654565b90506000198114610931578181101561099e5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610521565b610931848484840361067f565b6001600160a01b038216610a015760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610521565b8060026000828254610a139190610f2a565b90915550506001600160a01b03821660008181526020818152604080832080548601905551848152600080516020610f7c833981519152910160405180910390a35050565b6001600160a01b038216610ab85760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610521565b6001600160a01b03821660009081526020819052604090205481811015610b2c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610521565b6001600160a01b038316600081815260208181526040808320868603905560028054879003905551858152919291600080516020610f7c833981519152910160405180910390a3505050565b600654604051600091610bb291600080516020610f9c8339815191529190600080516020610f5c8339815191529046903090602001610ee8565b60405160208183030381529060405280519060200120905060008186604051602001610bf592919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610c60573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590610c965750876001600160a01b0316816001600160a01b0316145b61064a5760405162461bcd60e51b815260206004820152602b60248201527f48455a3a3a5f76616c69646174655369676e6564446174613a20494e56414c4960448201526a445f5349474e415455524560a81b6064820152608401610521565b600060208083528351808285015260005b81811015610d2357858101830151858201604001528201610d07565b81811115610d35576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610d6257600080fd5b919050565b60008060408385031215610d7a57600080fd5b610d8383610d4b565b946020939093013593505050565b600080600060608486031215610da657600080fd5b610daf84610d4b565b9250610dbd60208501610d4b565b9150604084013590509250925092565b600060208284031215610ddf57600080fd5b5035919050565b600060208284031215610df857600080fd5b610e0182610d4b565b9392505050565b600080600080600080600060e0888a031215610e2357600080fd5b610e2c88610d4b565b9650610e3a60208901610d4b565b95506040880135945060608801359350608088013560ff81168114610e5e57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610e8e57600080fd5b610e9783610d4b565b9150610ea560208401610d4b565b90509250929050565b600181811c90821680610ec257607f821691505b602082108103610ee257634e487b7160e01b600052602260045260246000fd5b50919050565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b634e487b7160e01b600052601160045260246000fd5b60008219821115610f3d57610f3d610f14565b500190565b600060018201610f5457610f54610f14565b506001019056fec89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400fa26469706673582212205299f644588fd3100501f19edb176747f95e5b8279001c28ea65495710e3e29f64736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061014d5760003560e01c806340c10f19116100c35780639e4e73181161007c5780639e4e7318146102b7578063a457c2d7146102cc578063a9059cbb146102df578063c473af33146102f2578063d505accf14610307578063dd62ed3e1461031a57600080fd5b806340c10f191461022d57806342966c681461024057806356189cb41461025357806370a08231146102665780637ecebe001461028f57806395d89b41146102af57600080fd5b806323b872dd1161011557806323b872dd146101c357806330adf81f146101d6578063313ce567146101fd5780633408e4701461020c5780633644e51514610212578063395093511461021a57600080fd5b806304622c2e1461015257806306fdde031461016e578063095ea7b31461018357806318160ddd146101a6578063222f5be0146101ae575b600080fd5b61015b60065481565b6040519081526020015b60405180910390f35b61017661032d565b6040516101659190610cf6565b610196610191366004610d67565b6103bf565b6040519015158152602001610165565b60025461015b565b6101c16101bc366004610d91565b6103d7565b005b6101966101d1366004610d91565b6103e7565b61015b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60405160128152602001610165565b4661015b565b61015b61040b565b610196610228366004610d67565b610460565b6101c161023b366004610d67565b610482565b6101c161024e366004610dcd565b610490565b6101c1610261366004610d91565b61049d565b61015b610274366004610de6565b6001600160a01b031660009081526020819052604090205490565b61015b61029d366004610de6565b60056020526000908152604090205481565b6101766104a8565b61015b600080516020610f5c83398151915281565b6101966102da366004610d67565b6104b7565b6101966102ed366004610d67565b610537565b61015b600080516020610f9c83398151915281565b6101c1610315366004610e08565b610545565b61015b610328366004610e7b565b610654565b60606003805461033c90610eae565b80601f016020809104026020016040519081016040528092919081815260200182805461036890610eae565b80156103b55780601f1061038a576101008083540402835291602001916103b5565b820191906000526020600020905b81548152906001019060200180831161039857829003601f168201915b5050505050905090565b6000336103cd81858561067f565b5060019392505050565b6103e28383836107a3565b505050565b6000336103f5858285610937565b6104008585856107a3565b506001949350505050565b60065460405160009161044591600080516020610f9c8339815191529190600080516020610f5c8339815191529046903090602001610ee8565b60405160208183030381529060405280519060200120905090565b6000336103cd8185856104738383610654565b61047d9190610f2a565b61067f565b61048c82826109ab565b5050565b61049a3382610a58565b50565b6103e283838361067f565b60606004805461033c90610eae565b600033816104c58286610654565b90508381101561052a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b610400828686840361067f565b6000336103cd8185856107a3565b428410156105915760405162461bcd60e51b81526020600482015260196024820152781211568e8e9c195c9b5a5d0e881055551217d1561412549151603a1b6044820152606401610521565b6001600160a01b038716600090815260056020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866105de83610f42565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905061063f8882868686610b78565b61064a88888861067f565b5050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166106e15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610521565b6001600160a01b0382166107425760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610521565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166108075760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610521565b6001600160a01b0382166108695760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610521565b6001600160a01b038316600090815260208190526040902054818110156108e15760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610521565b6001600160a01b0384811660008181526020818152604080832087870390559387168083529184902080548701905592518581529092600080516020610f7c833981519152910160405180910390a35b50505050565b60006109438484610654565b90506000198114610931578181101561099e5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610521565b610931848484840361067f565b6001600160a01b038216610a015760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610521565b8060026000828254610a139190610f2a565b90915550506001600160a01b03821660008181526020818152604080832080548601905551848152600080516020610f7c833981519152910160405180910390a35050565b6001600160a01b038216610ab85760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610521565b6001600160a01b03821660009081526020819052604090205481811015610b2c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610521565b6001600160a01b038316600081815260208181526040808320868603905560028054879003905551858152919291600080516020610f7c833981519152910160405180910390a3505050565b600654604051600091610bb291600080516020610f9c8339815191529190600080516020610f5c8339815191529046903090602001610ee8565b60405160208183030381529060405280519060200120905060008186604051602001610bf592919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610c60573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590610c965750876001600160a01b0316816001600160a01b0316145b61064a5760405162461bcd60e51b815260206004820152602b60248201527f48455a3a3a5f76616c69646174655369676e6564446174613a20494e56414c4960448201526a445f5349474e415455524560a81b6064820152608401610521565b600060208083528351808285015260005b81811015610d2357858101830151858201604001528201610d07565b81811115610d35576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610d6257600080fd5b919050565b60008060408385031215610d7a57600080fd5b610d8383610d4b565b946020939093013593505050565b600080600060608486031215610da657600080fd5b610daf84610d4b565b9250610dbd60208501610d4b565b9150604084013590509250925092565b600060208284031215610ddf57600080fd5b5035919050565b600060208284031215610df857600080fd5b610e0182610d4b565b9392505050565b600080600080600080600060e0888a031215610e2357600080fd5b610e2c88610d4b565b9650610e3a60208901610d4b565b95506040880135945060608801359350608088013560ff81168114610e5e57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610e8e57600080fd5b610e9783610d4b565b9150610ea560208401610d4b565b90509250929050565b600181811c90821680610ec257607f821691505b602082108103610ee257634e487b7160e01b600052602260045260246000fd5b50919050565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b634e487b7160e01b600052601160045260246000fd5b60008219821115610f3d57610f3d610f14565b500190565b600060018201610f5457610f54610f14565b506001019056fec89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400fa26469706673582212205299f644588fd3100501f19edb176747f95e5b8279001c28ea65495710e3e29f64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZkEVM.json b/compiled-contracts/PolygonZkEVM.json index 10ee2b7ab..44897a936 100644 --- a/compiled-contracts/PolygonZkEVM.json +++ b/compiled-contracts/PolygonZkEVM.json @@ -1469,8 +1469,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5061561380620000216000396000f3fe608060405234801561001057600080fd5b50600436106103af5760003560e01c80638da5cb5b116101f4578063cfa8ed471161011a578063e7a7ed02116100ad578063f14916d61161007c578063f14916d6146108ec578063f2fde38b146108ff578063f851a44014610912578063f8b823e41461092557600080fd5b8063e7a7ed0214610899578063e8bf92ed146108b3578063eaeb077b146108c6578063edc41121146108d957600080fd5b8063d939b315116100e9578063d939b3151461085b578063dbc1697614610875578063e11f3f181461087d578063e217cfd61461089057600080fd5b8063cfa8ed4714610807578063d02103ca14610821578063d8d1091b14610834578063d8f54db01461084757600080fd5b8063ab9fc5ef11610192578063b6b0b09711610161578063b6b0b097146107bf578063c0ed84e0146107d9578063c89e42df146107e1578063cf136306146107f457600080fd5b8063ab9fc5ef14610713578063adc879e91461071d578063afd23cbe14610737578063b4d63f581461075f57600080fd5b80639eb831b9116101ce5780639eb831b9146106d85780639f0d039d146106e0578063a3c573eb146106e8578063aa58bad6146106fb57600080fd5b80638da5cb5b146106ac57806399f5634e146106bd5780639c9f3dfe146106c557600080fd5b80634a910e6a116102d9578063715018a611610277578063837a473811610246578063837a473814610607578063841b24d7146106755780638b48931e1461068f5780638c4a0af71461069957600080fd5b8063715018a6146105c65780637215541a146105ce57806375c508b3146105e15780637fcb3653146105f457600080fd5b806360943d6a116102b357806360943d6a1461056d5780636b8616ce146105805780636ff512cc146105a0578063704b6c02146105b357600080fd5b80634a910e6a146105325780635392c5e014610545578063542028d51461056557600080fd5b8063383b3be811610351578063456052671161032057806345605267146104d8578063458c0477146104f25780634834a343146105055780634a1a89a71461051857600080fd5b8063383b3be814610485578063394218e9146104985780633c158267146104ab578063423fa856146104be57600080fd5b806319d8ac611161038d57806319d8ac6114610404578063220d78991461042f57806329878983146104425780632d0889d31461046d57600080fd5b8063107bf28c146103b457806315064c96146103d25780631816b7e5146103ef575b600080fd5b6103bc61092e565b6040516103c9919061475b565b60405180910390f35b6065546103df9060ff1681565b60405190151581526020016103c9565b6104026103fd366004614775565b6109bc565b005b606854610417906001600160401b031681565b6040516001600160401b0390911681526020016103c9565b6103bc61043d3660046147b5565b610aeb565b606a54610455906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b610477620493e081565b6040519081526020016103c9565b6103df610493366004614802565b610c91565b6104026104a6366004614802565b610cd8565b6104026104b936600461493f565b610e27565b60685461041790600160401b90046001600160401b031681565b60685461041790600160801b90046001600160401b031681565b607254610417906001600160401b031681565b610402610513366004614a7d565b611629565b60725461041790600160401b90046001600160401b031681565b610402610540366004614802565b611972565b610477610553366004614802565b606d6020526000908152604090205481565b6103bc611c12565b61040261057b366004614b1f565b611c1f565b61047761058e366004614802565b60666020526000908152604090205481565b6104026105ae366004614bf6565b611f8f565b6104026105c1366004614bf6565b612013565b61040261208b565b6104026105dc366004614802565b61209f565b6104026105ef366004614c13565b612317565b606954610417906001600160401b031681565b61064a610615366004614cb1565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103c9565b60725461041790600160c01b90046001600160401b031681565b61041762093a8081565b6104026106a7366004614cd8565b6123a6565b6033546001600160a01b0316610455565b61047761241d565b6104026106d3366004614802565b612500565b610477600c81565b607454610477565b607054610455906001600160a01b031681565b6065546104179061010090046001600160401b031681565b6104176206978081565b606c5461041790600160a81b90046001600160401b031681565b60655461074c90600160481b900461ffff1681565b60405161ffff90911681526020016103c9565b61079a61076d366004614802565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103c9565b60655461045590600160581b90046001600160a01b031681565b610417612646565b6104026107ef366004614cf5565b612693565b610402610802366004614802565b6126f9565b60695461045590600160401b90046001600160a01b031681565b606c54610455906001600160a01b031681565b610402610842366004614d29565b61277a565b606c546103df90600160a01b900460ff1681565b60725461041790600160801b90046001600160401b031681565b610402612c44565b61040261088b366004614c13565b612d00565b6104176103e881565b60685461041790600160c01b90046001600160401b031681565b606b54610455906001600160a01b031681565b6104026108d4366004614e1b565b612e45565b6104026108e7366004614a7d565b61316e565b6104026108fa366004614bf6565b61328e565b61040261090d366004614bf6565b613306565b607354610455906001600160a01b031681565b61047760745481565b606f805461093b90614e5f565b80601f016020809104026020016040519081016040528092919081815260200182805461096790614e5f565b80156109b45780601f10610989576101008083540402835291602001916109b4565b820191906000526020600020905b81548152906001019060200180831161099757829003601f168201915b505050505081565b6073546001600160a01b031633146109ef5760405162461bcd60e51b81526004016109e690614e99565b60405180910390fd5b6103e88161ffff16118015610a0957506104008161ffff16105b610a8e5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a4016109e6565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610b1d57508115155b610b91576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e6565b80610c06576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e6565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610cc792600160801b90920481169116614ef2565b6001600160401b0316111592915050565b6073546001600160a01b03163314610d025760405162461bcd60e51b81526004016109e690614e99565b62093a806001600160401b0382161115610d2e5760405162461bcd60e51b81526004016109e690614f1d565b60655460ff16610dd1576072546001600160401b03600160c01b909104811690821610610dd15760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109e6565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610ae0565b60655460ff1615610e4a5760405162461bcd60e51b81526004016109e690614f88565b606954600160401b90046001600160a01b03163314610ed15760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e63657200000000000060648201526084016109e6565b805180610f465760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e6365203120626174636800000060648201526084016109e6565b6103e88110610fbf576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e79206261746368657360648201526084016109e6565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561144d57600087828151811061101257611012614ff0565b60200260200101519050600081606001516001600160401b031611156111cb578361103c81615006565b9450506000816000015180519060200120826020015183606001516040516020016110699392919061502c565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461110f5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d6174636800000060648201526084016109e6565b81606001516001600160401b031682604001516001600160401b031610156111c55760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a4016109e6565b50611340565b602081015115806112545750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b36329161120e9160040190815260200190565b6020604051808303816000875af115801561122d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611251919061504f565b15155b6112c65760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d75737420657869737400000000000060648201526084016109e6565b805151620493e0116113405760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016109e6565b856001600160401b031681604001516001600160401b03161015801561137357504281604001516001600160401b031611155b6113e55760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e676500000060648201526084016109e6565b8051805160209182012081830151604080850151905161140c948894939291339101615068565b604051602081830303815290604052805190602001209250848061142f90615006565b95505080604001519550508080611445906150ac565b915050610ff6565b506068546001600160401b03600160c01b909104811690831611156114d25760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b60648201526084016109e6565b6068546000906114f290600160801b90046001600160401b0316846150c5565b611505906001600160401b0316876150ed565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115da903390309084906115bf9190615104565b606554600160581b90046001600160a01b031692919061337c565b6115e26133e7565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff161561164c5760405162461bcd60e51b81526004016109e690614f88565b6072546001600160401b03878116600090815260676020526040902060010154429261168392600160c01b90910481169116614ef2565b6001600160401b0316111561170c5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a4016109e6565b6103e861171988886150c5565b6001600160401b0316106117955760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e7920626174636865730000000060648201526084016109e6565b6117a5888888888888888861348b565b6117ae866139c9565b607254600160801b90046001600160401b0316600003611876576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561181357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561185957600080fd5b505af115801561186d573d6000803e3d6000fd5b50505050611927565b61187e6133e7565b607280546001600160401b031690600061189783615006565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b0381161580159061199f57506072546001600160401b03600160401b9091048116908216115b80156119ba57506072546001600160401b0390811690821611155b611a385760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a4016109e6565b606a546001600160a01b03163314611ae257611a5381610c91565b611ae25760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a4016109e6565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d9094529382902092909255607280546fffffffffffffffff000000000000000019169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611ba457600080fd5b505af1158015611bb8573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611c0591815260200190565b60405180910390a3505050565b606e805461093b90614e5f565b600054610100900460ff1615808015611c3f5750600054600160ff909116105b80611c595750303b158015611c59575060005460ff166001145b611cbc5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109e6565b6000805460ff191660011790558015611cdf576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611d5c6020860186614bf6565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d8c6060860160408701614bf6565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611dc760c0860160a08701614bf6565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611e2460e0860160c08701614802565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611e5b6040860160208701614802565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611e976080860160608701614802565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611ed360a0860160808701614cd8565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611efb8482615169565b50606f611f088382615169565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611f3e613baf565b8015611f84576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611fb95760405162461bcd60e51b81526004016109e690614e99565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610ae0565b6073546001600160a01b0316331461203d5760405162461bcd60e51b81526004016109e690614e99565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190602001610ae0565b612093613c23565b61209d6000613c7d565b565b6033546001600160a01b0316331461230c576072546000906001600160401b0316156120f057506072546001600160401b03908116600090815260716020526040902054600160401b9004166120fe565b506069546001600160401b03165b80826001600160401b03161161217c5760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c72656164792076657269666965640000000060648201526084016109e6565b6068546001600160401b03600160401b9091048116908316118015906121be57506001600160401b038083166000908152606760205260409020600101541615155b6122495760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a4016109e6565b6001600160401b0380831660009081526067602052604090206001015442916122779162093a809116614ef2565b6001600160401b0316111561230a5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a4016109e6565b505b612314613ccf565b50565b60655460ff161561233a5760405162461bcd60e51b81526004016109e690614f88565b61234b898989898989898989613d3f565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f84613ccf565b6073546001600160a01b031633146123d05760405162461bcd60e51b81526004016109e690614e99565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610ae090831515815260200190565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612470573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612494919061504f565b905060006124a0612646565b6068546001600160401b03600160401b82048116916124d091600160801b8204811691600160c01b9004166150c5565b6124da9190614ef2565b6124e491906150c5565b6001600160401b031690506124f9818361523e565b9250505090565b6073546001600160a01b0316331461252a5760405162461bcd60e51b81526004016109e690614e99565b62093a806001600160401b03821611156125565760405162461bcd60e51b81526004016109e690614f1d565b60655460ff166125eb576072546001600160401b03600160801b9091048116908216106125eb5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f7765720060648201526084016109e6565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610ae0565b6072546000906001600160401b03161561268357506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126bd5760405162461bcd60e51b81526004016109e690614e99565b606e6126c98282615169565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610ae0919061475b565b6073546001600160a01b031633146127235760405162461bcd60e51b81526004016109e690614e99565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610ae0565b60655460ff161561279d5760405162461bcd60e51b81526004016109e690614f88565b606c54600160a01b900460ff1615156001146127cb5760405162461bcd60e51b81526004016109e690615252565b80518061282e5760405162461bcd60e51b815260206004820152603d602482015260008051602061559e83398151915260448201527f3a204d75737420666f726365206174206c65617374203120626174636800000060648201526084016109e6565b6103e8811061289f5760405162461bcd60e51b8152602060048201526043602482015260008051602061559e83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a4016109e6565b6068546001600160401b03600160c01b82048116916128c7918491600160801b9004166152bb565b11156129215760405162461bcd60e51b8152602060048201526035602482015260008051602061559e8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b60648201526084016109e6565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612b4d57600086828151811061296e5761296e614ff0565b60200260200101519050838061298390615006565b9450506000816000015180519060200120826020015183604001516040516020016129b09392919061502c565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612a4f5760405162461bcd60e51b8152602060048201526042602482015260008051602061559e83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109e6565b612a5a6001886150ed565b8303612aef5742620697808360400151612a749190614ef2565b6001600160401b03161115612aef5760405162461bcd60e51b8152602060048201526047602482015260008051602061559e83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a4016109e6565b8151805160209182012081840151604051612b1293889392914291339101615068565b6040516020818303038152906040528051906020012093508580612b3590615006565b96505050508080612b45906150ac565b915050612952565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612c665760405162461bcd60e51b81526004016109e6906152d3565b6073546001600160a01b03163314612c905760405162461bcd60e51b81526004016109e690614e99565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612ce057600080fd5b505af1158015612cf4573d6000803e3d6000fd5b5050505061209d6143ba565b606a546001600160a01b03163314612d2a5760405162461bcd60e51b81526004016109e690615330565b612d3b898989898989898989613d3f565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612d8657607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612dcc57600080fd5b505af1158015612de0573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612e685760405162461bcd60e51b81526004016109e690614f88565b606c54600160a01b900460ff161515600114612e965760405162461bcd60e51b81526004016109e690615252565b6000612ea160745490565b905081811115612f065760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b60648201526084016109e6565b620493e0835110612f775760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b60648201526084016109e6565b606554612f9690600160581b90046001600160a01b031633308461337c565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015612fe0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613004919061504f565b60688054919250600160c01b9091046001600160401b031690601861302883615006565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016130699392919061502c565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361310d57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613168565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161315f9392919061538d565b60405180910390a25b50505050565b606a546001600160a01b031633146131985760405162461bcd60e51b81526004016109e690615330565b6131a8888888888888888861348b565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d6020526040902085905560725416156131f357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561323957600080fd5b505af115801561324d573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611960565b6073546001600160a01b031633146132b85760405162461bcd60e51b81526004016109e690614e99565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001610ae0565b61330e613c23565b6001600160a01b0381166133735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e6565b61231481613c7d565b6040516001600160a01b03808516602483015283166044820152606481018290526131689085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614411565b6072546001600160401b03600160401b820481169116111561209d5760725460009061342490600160401b90046001600160401b03166001614ef2565b905061342f81610c91565b15612314576072546000906002906134519084906001600160401b03166150c5565b61345b91906153c0565b6134659083614ef2565b905061347081610c91565b156134825761347e81611972565b5050565b61347e82611972565b600080613496612646565b90506001600160401b038a1615613611576072546001600160401b03908116908b1611156135525760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2070656e60448201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560648201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608482015260a4016109e6565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b909204161461360b5760405162461bcd60e51b815260206004820152604c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760648201526b040e6e8c2e8ca40c4c2e8c6d60a31b608482015260a4016109e6565b50613759565b6001600160401b0389166000908152606d60205260409020549150816136ab5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786064820152621a5cdd60ea1b608482015260a4016109e6565b806001600160401b0316896001600160401b031611156137595760405162461bcd60e51b815260206004820152605d60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060648201527f7468616e2063757272656e744c61737456657269666965644261746368000000608482015260a4016109e6565b806001600160401b0316886001600160401b0316116138065760405162461bcd60e51b815260206004820152605760248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2066696e60448201527f616c4e65774261746368206d75737420626520626967676572207468616e206360648201527f757272656e744c61737456657269666965644261746368000000000000000000608482015260a4016109e6565b60006138158a8a8a868b610aeb565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161384a91906153e6565b602060405180830381855afa158015613867573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061388a919061504f565b6138949190615402565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916138d8918b918b918b9190600401615416565b602060405180830381865afa1580156138f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139199190615490565b6139785760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20496e7660448201526930b634b210383937b7b360b11b60648201526084016109e6565b6139bb33613986858d6150c5565b6001600160401b031661399761241d565b6139a19190615104565b606554600160581b90046001600160a01b031691906144e8565b505050505050505050505050565b60006139d3612646565b9050816000806139e384846150c5565b6001600160401b031690505b836001600160401b0316836001600160401b031614613a95576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613a3f9116426150ed565b1115613a7a576001810154613a6490600160401b90046001600160401b0316866150c5565b613a77906001600160401b0316846152bb565b92505b60010154600160401b90046001600160401b031692506139ef565b6000613aa183836150ed565b905082811015613b1b576000613ab782856150ed565b9050600c8111613ac75780613aca565b600c5b9050613ad7816003615104565b613ae290600a615591565b606554613afb908390600160481b900461ffff16615591565b607454613b089190615104565b613b12919061523e565b60745550613ba7565b6000613b2784836150ed565b9050600c8111613b375780613b3a565b600c5b90506000613b49826003615104565b613b5490600a615591565b606554613b6d908490600160481b900461ffff16615591565b607454613b7a9190615104565b613b84919061523e565b905080607454607454613b979190615104565b613ba1919061523e565b60745550505b505050505050565b600054610100900460ff16613c1a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109e6565b61209d33613c7d565b6033546001600160a01b0316331461209d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109e6565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d1f57600080fd5b505af1158015613d33573d6000803e3d6000fd5b5050505061209d614518565b60006001600160401b038a1615613eba576072546001600160401b03908116908b161115613dfe5760405162461bcd60e51b815260206004820152606c60248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c4016109e6565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613eb45760405162461bcd60e51b815260206004820152606060248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a4016109e6565b5061400e565b506001600160401b0387166000908152606d602052604090205480613f5b5760405162461bcd60e51b815260206004820152605760248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a4016109e6565b6069546001600160401b03908116908916111561400e5760405162461bcd60e51b815260206004820152607160248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c4016109e6565b6072546001600160401b03908116908a161180159061403e5750896001600160401b0316896001600160401b0316115b801561405f57506072546001600160401b03600160401b9091048116908a16115b6140d75760405162461bcd60e51b815260206004820152604f60248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a4016109e6565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146141975760405162461bcd60e51b815260206004820152606a60248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c4016109e6565b60006141a6898989858a610aeb565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516141db91906153e6565b602060405180830381855afa1580156141f8573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061421b919061504f565b6142259190615402565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614269918a918a918a9190600401615416565b602060405180830381865afa158015614286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142aa9190615490565b61430a5760405162461bcd60e51b815260206004820152603e60248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a20496e76616c69642070726f6f66000060648201526084016109e6565b6001600160401b038b166000908152607160205260409020600201548790036139bb5760405162461bcd60e51b815260206004820152606260248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c4016109e6565b60655460ff166143dc5760405162461bcd60e51b81526004016109e6906152d3565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614466826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145739092919063ffffffff16565b8051909150156144e357808060200190518101906144849190615490565b6144e35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109e6565b505050565b6040516001600160a01b0383166024820152604481018290526144e390849063a9059cbb60e01b906064016133b0565b60655460ff161561453b5760405162461bcd60e51b81526004016109e690614f88565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614582848460008561458a565b949350505050565b6060824710156145eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109e6565b600080866001600160a01b0316858760405161460791906153e6565b60006040518083038185875af1925050503d8060008114614644576040519150601f19603f3d011682016040523d82523d6000602084013e614649565b606091505b509150915061465a87838387614665565b979650505050505050565b606083156146d45782516000036146cd576001600160a01b0385163b6146cd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109e6565b5081614582565b61458283838151156146e95781518083602001fd5b8060405162461bcd60e51b81526004016109e6919061475b565b60005b8381101561471e578181015183820152602001614706565b838111156131685750506000910152565b60008151808452614747816020860160208601614703565b601f01601f19169290920160200192915050565b60208152600061476e602083018461472f565b9392505050565b60006020828403121561478757600080fd5b813561ffff8116811461476e57600080fd5b80356001600160401b03811681146147b057600080fd5b919050565b600080600080600060a086880312156147cd57600080fd5b6147d686614799565b94506147e460208701614799565b94979496505050506040830135926060810135926080909101359150565b60006020828403121561481457600080fd5b61476e82614799565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156148555761485561481d565b60405290565b604051606081016001600160401b03811182821017156148555761485561481d565b604051601f8201601f191681016001600160401b03811182821017156148a5576148a561481d565b604052919050565b60006001600160401b038211156148c6576148c661481d565b5060051b60200190565b600082601f8301126148e157600080fd5b81356001600160401b038111156148fa576148fa61481d565b61490d601f8201601f191660200161487d565b81815284602083860101111561492257600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561495257600080fd5b82356001600160401b038082111561496957600080fd5b818501915085601f83011261497d57600080fd5b813561499061498b826148ad565b61487d565b81815260059190911b830184019084810190888311156149af57600080fd5b8585015b83811015614a48578035858111156149cb5760008081fd5b86016080818c03601f19018113156149e35760008081fd5b6149eb614833565b89830135888111156149fd5760008081fd5b614a0b8e8c838701016148d0565b8252506040808401358b8301526060614a25818601614799565b82840152614a34848601614799565b9083015250855250509186019186016149b3565b5098975050505050505050565b8060408101831015614a6657600080fd5b92915050565b8060808101831015614a6657600080fd5b6000806000806000806000806101a0898b031215614a9a57600080fd5b614aa389614799565b9750614ab160208a01614799565b9650614abf60408a01614799565b95506060890135945060808901359350614adc8a60a08b01614a55565b9250614aeb8a60e08b01614a6c565b9150614afb8a6101608b01614a55565b90509295985092959890939650565b6001600160a01b038116811461231457600080fd5b600080600080600080600080888a036101c0811215614b3d57600080fd5b8935614b4881614b0a565b985060208a0135614b5881614b0a565b975060408a0135614b6881614b0a565b965060608a0135614b7881614b0a565b955060e0607f1982011215614b8c57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614bb657600080fd5b614bc28c838d016148d0565b93506101a08b0135915080821115614bd957600080fd5b50614be68b828c016148d0565b9150509295985092959890939650565b600060208284031215614c0857600080fd5b813561476e81614b0a565b60008060008060008060008060006101c08a8c031215614c3257600080fd5b614c3b8a614799565b9850614c4960208b01614799565b9750614c5760408b01614799565b9650614c6560608b01614799565b955060808a0135945060a08a01359350614c828b60c08c01614a55565b9250614c928b6101008c01614a6c565b9150614ca28b6101808c01614a55565b90509295985092959850929598565b600060208284031215614cc357600080fd5b5035919050565b801515811461231457600080fd5b600060208284031215614cea57600080fd5b813561476e81614cca565b600060208284031215614d0757600080fd5b81356001600160401b03811115614d1d57600080fd5b614582848285016148d0565b60006020808385031215614d3c57600080fd5b82356001600160401b0380821115614d5357600080fd5b818501915085601f830112614d6757600080fd5b8135614d7561498b826148ad565b81815260059190911b83018401908481019088831115614d9457600080fd5b8585015b83811015614a4857803585811115614db05760008081fd5b86016060818c03601f1901811315614dc85760008081fd5b614dd061485b565b8983013588811115614de25760008081fd5b614df08e8c838701016148d0565b8252506040808401358b830152614e08838501614799565b9082015285525050918601918601614d98565b60008060408385031215614e2e57600080fd5b82356001600160401b03811115614e4457600080fd5b614e50858286016148d0565b95602094909401359450505050565b600181811c90821680614e7357607f821691505b602082108103614e9357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614f1457614f14614edc565b01949350505050565b60208082526045908201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361502257615022614edc565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b60006020828403121561506157600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b6000600182016150be576150be614edc565b5060010190565b60006001600160401b03838116908316818110156150e5576150e5614edc565b039392505050565b6000828210156150ff576150ff614edc565b500390565b600081600019048311821515161561511e5761511e614edc565b500290565b601f8211156144e357600081815260208120601f850160051c8101602086101561514a5750805b601f850160051c820191505b81811015613ba757828155600101615156565b81516001600160401b038111156151825761518261481d565b615196816151908454614e5f565b84615123565b602080601f8311600181146151cb57600084156151b35750858301515b600019600386901b1c1916600185901b178555613ba7565b600085815260208120601f198616915b828110156151fa578886015182559484019460019091019084016151db565b50858210156152185787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b60008261524d5761524d615228565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b600082198211156152ce576152ce614edc565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b03831660208201526060604082018190526000906153b79083018461472f565b95945050505050565b60006001600160401b03808416806153da576153da615228565b92169190910492915050565b600082516153f8818460208701614703565b9190910192915050565b60008261541157615411615228565b500690565b61012081016040808784376000838201818152879190815b600281101561544e5784848337908401828152928401929060010161542e565b5050828760c0870137610100850181815286935091505b6001811015615484578251825260209283019290910190600101615465565b50505095945050505050565b6000602082840312156154a257600080fd5b815161476e81614cca565b600181815b808511156154e85781600019048211156154ce576154ce614edc565b808516156154db57918102915b93841c93908002906154b2565b509250929050565b6000826154ff57506001614a66565b8161550c57506000614a66565b8160018114615522576002811461552c57615548565b6001915050614a66565b60ff84111561553d5761553d614edc565b50506001821b614a66565b5060208310610133831016604e8410600b841016171561556b575081810a614a66565b61557583836154ad565b806000190482111561558957615589614edc565b029392505050565b600061476e83836154f056fe506f6c79676f6e5a6b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a6b45564d3a3a70726f76654e6f6e44657465726d696e6973a26469706673582212208c52fcbd2a803441dd2c3fbfaea82ec11a07da8df032f48b14ee8489b157689b64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103af5760003560e01c80638da5cb5b116101f4578063cfa8ed471161011a578063e7a7ed02116100ad578063f14916d61161007c578063f14916d6146108ec578063f2fde38b146108ff578063f851a44014610912578063f8b823e41461092557600080fd5b8063e7a7ed0214610899578063e8bf92ed146108b3578063eaeb077b146108c6578063edc41121146108d957600080fd5b8063d939b315116100e9578063d939b3151461085b578063dbc1697614610875578063e11f3f181461087d578063e217cfd61461089057600080fd5b8063cfa8ed4714610807578063d02103ca14610821578063d8d1091b14610834578063d8f54db01461084757600080fd5b8063ab9fc5ef11610192578063b6b0b09711610161578063b6b0b097146107bf578063c0ed84e0146107d9578063c89e42df146107e1578063cf136306146107f457600080fd5b8063ab9fc5ef14610713578063adc879e91461071d578063afd23cbe14610737578063b4d63f581461075f57600080fd5b80639eb831b9116101ce5780639eb831b9146106d85780639f0d039d146106e0578063a3c573eb146106e8578063aa58bad6146106fb57600080fd5b80638da5cb5b146106ac57806399f5634e146106bd5780639c9f3dfe146106c557600080fd5b80634a910e6a116102d9578063715018a611610277578063837a473811610246578063837a473814610607578063841b24d7146106755780638b48931e1461068f5780638c4a0af71461069957600080fd5b8063715018a6146105c65780637215541a146105ce57806375c508b3146105e15780637fcb3653146105f457600080fd5b806360943d6a116102b357806360943d6a1461056d5780636b8616ce146105805780636ff512cc146105a0578063704b6c02146105b357600080fd5b80634a910e6a146105325780635392c5e014610545578063542028d51461056557600080fd5b8063383b3be811610351578063456052671161032057806345605267146104d8578063458c0477146104f25780634834a343146105055780634a1a89a71461051857600080fd5b8063383b3be814610485578063394218e9146104985780633c158267146104ab578063423fa856146104be57600080fd5b806319d8ac611161038d57806319d8ac6114610404578063220d78991461042f57806329878983146104425780632d0889d31461046d57600080fd5b8063107bf28c146103b457806315064c96146103d25780631816b7e5146103ef575b600080fd5b6103bc61092e565b6040516103c9919061475b565b60405180910390f35b6065546103df9060ff1681565b60405190151581526020016103c9565b6104026103fd366004614775565b6109bc565b005b606854610417906001600160401b031681565b6040516001600160401b0390911681526020016103c9565b6103bc61043d3660046147b5565b610aeb565b606a54610455906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b610477620493e081565b6040519081526020016103c9565b6103df610493366004614802565b610c91565b6104026104a6366004614802565b610cd8565b6104026104b936600461493f565b610e27565b60685461041790600160401b90046001600160401b031681565b60685461041790600160801b90046001600160401b031681565b607254610417906001600160401b031681565b610402610513366004614a7d565b611629565b60725461041790600160401b90046001600160401b031681565b610402610540366004614802565b611972565b610477610553366004614802565b606d6020526000908152604090205481565b6103bc611c12565b61040261057b366004614b1f565b611c1f565b61047761058e366004614802565b60666020526000908152604090205481565b6104026105ae366004614bf6565b611f8f565b6104026105c1366004614bf6565b612013565b61040261208b565b6104026105dc366004614802565b61209f565b6104026105ef366004614c13565b612317565b606954610417906001600160401b031681565b61064a610615366004614cb1565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103c9565b60725461041790600160c01b90046001600160401b031681565b61041762093a8081565b6104026106a7366004614cd8565b6123a6565b6033546001600160a01b0316610455565b61047761241d565b6104026106d3366004614802565b612500565b610477600c81565b607454610477565b607054610455906001600160a01b031681565b6065546104179061010090046001600160401b031681565b6104176206978081565b606c5461041790600160a81b90046001600160401b031681565b60655461074c90600160481b900461ffff1681565b60405161ffff90911681526020016103c9565b61079a61076d366004614802565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103c9565b60655461045590600160581b90046001600160a01b031681565b610417612646565b6104026107ef366004614cf5565b612693565b610402610802366004614802565b6126f9565b60695461045590600160401b90046001600160a01b031681565b606c54610455906001600160a01b031681565b610402610842366004614d29565b61277a565b606c546103df90600160a01b900460ff1681565b60725461041790600160801b90046001600160401b031681565b610402612c44565b61040261088b366004614c13565b612d00565b6104176103e881565b60685461041790600160c01b90046001600160401b031681565b606b54610455906001600160a01b031681565b6104026108d4366004614e1b565b612e45565b6104026108e7366004614a7d565b61316e565b6104026108fa366004614bf6565b61328e565b61040261090d366004614bf6565b613306565b607354610455906001600160a01b031681565b61047760745481565b606f805461093b90614e5f565b80601f016020809104026020016040519081016040528092919081815260200182805461096790614e5f565b80156109b45780601f10610989576101008083540402835291602001916109b4565b820191906000526020600020905b81548152906001019060200180831161099757829003601f168201915b505050505081565b6073546001600160a01b031633146109ef5760405162461bcd60e51b81526004016109e690614e99565b60405180910390fd5b6103e88161ffff16118015610a0957506104008161ffff16105b610a8e5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a4016109e6565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610b1d57508115155b610b91576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e6565b80610c06576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109e6565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610cc792600160801b90920481169116614ef2565b6001600160401b0316111592915050565b6073546001600160a01b03163314610d025760405162461bcd60e51b81526004016109e690614e99565b62093a806001600160401b0382161115610d2e5760405162461bcd60e51b81526004016109e690614f1d565b60655460ff16610dd1576072546001600160401b03600160c01b909104811690821610610dd15760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109e6565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610ae0565b60655460ff1615610e4a5760405162461bcd60e51b81526004016109e690614f88565b606954600160401b90046001600160a01b03163314610ed15760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e63657200000000000060648201526084016109e6565b805180610f465760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e6365203120626174636800000060648201526084016109e6565b6103e88110610fbf576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e79206261746368657360648201526084016109e6565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561144d57600087828151811061101257611012614ff0565b60200260200101519050600081606001516001600160401b031611156111cb578361103c81615006565b9450506000816000015180519060200120826020015183606001516040516020016110699392919061502c565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461110f5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d6174636800000060648201526084016109e6565b81606001516001600160401b031682604001516001600160401b031610156111c55760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a4016109e6565b50611340565b602081015115806112545750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b36329161120e9160040190815260200190565b6020604051808303816000875af115801561122d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611251919061504f565b15155b6112c65760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d75737420657869737400000000000060648201526084016109e6565b805151620493e0116113405760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016109e6565b856001600160401b031681604001516001600160401b03161015801561137357504281604001516001600160401b031611155b6113e55760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e676500000060648201526084016109e6565b8051805160209182012081830151604080850151905161140c948894939291339101615068565b604051602081830303815290604052805190602001209250848061142f90615006565b95505080604001519550508080611445906150ac565b915050610ff6565b506068546001600160401b03600160c01b909104811690831611156114d25760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b60648201526084016109e6565b6068546000906114f290600160801b90046001600160401b0316846150c5565b611505906001600160401b0316876150ed565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115da903390309084906115bf9190615104565b606554600160581b90046001600160a01b031692919061337c565b6115e26133e7565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff161561164c5760405162461bcd60e51b81526004016109e690614f88565b6072546001600160401b03878116600090815260676020526040902060010154429261168392600160c01b90910481169116614ef2565b6001600160401b0316111561170c5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a4016109e6565b6103e861171988886150c5565b6001600160401b0316106117955760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e7920626174636865730000000060648201526084016109e6565b6117a5888888888888888861348b565b6117ae866139c9565b607254600160801b90046001600160401b0316600003611876576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561181357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561185957600080fd5b505af115801561186d573d6000803e3d6000fd5b50505050611927565b61187e6133e7565b607280546001600160401b031690600061189783615006565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b0381161580159061199f57506072546001600160401b03600160401b9091048116908216115b80156119ba57506072546001600160401b0390811690821611155b611a385760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a4016109e6565b606a546001600160a01b03163314611ae257611a5381610c91565b611ae25760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a4016109e6565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d9094529382902092909255607280546fffffffffffffffff000000000000000019169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611ba457600080fd5b505af1158015611bb8573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611c0591815260200190565b60405180910390a3505050565b606e805461093b90614e5f565b600054610100900460ff1615808015611c3f5750600054600160ff909116105b80611c595750303b158015611c59575060005460ff166001145b611cbc5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109e6565b6000805460ff191660011790558015611cdf576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611d5c6020860186614bf6565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d8c6060860160408701614bf6565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611dc760c0860160a08701614bf6565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611e2460e0860160c08701614802565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611e5b6040860160208701614802565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611e976080860160608701614802565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611ed360a0860160808701614cd8565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611efb8482615169565b50606f611f088382615169565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611f3e613baf565b8015611f84576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611fb95760405162461bcd60e51b81526004016109e690614e99565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610ae0565b6073546001600160a01b0316331461203d5760405162461bcd60e51b81526004016109e690614e99565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190602001610ae0565b612093613c23565b61209d6000613c7d565b565b6033546001600160a01b0316331461230c576072546000906001600160401b0316156120f057506072546001600160401b03908116600090815260716020526040902054600160401b9004166120fe565b506069546001600160401b03165b80826001600160401b03161161217c5760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c72656164792076657269666965640000000060648201526084016109e6565b6068546001600160401b03600160401b9091048116908316118015906121be57506001600160401b038083166000908152606760205260409020600101541615155b6122495760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a4016109e6565b6001600160401b0380831660009081526067602052604090206001015442916122779162093a809116614ef2565b6001600160401b0316111561230a5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a4016109e6565b505b612314613ccf565b50565b60655460ff161561233a5760405162461bcd60e51b81526004016109e690614f88565b61234b898989898989898989613d3f565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f84613ccf565b6073546001600160a01b031633146123d05760405162461bcd60e51b81526004016109e690614e99565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610ae090831515815260200190565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612470573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612494919061504f565b905060006124a0612646565b6068546001600160401b03600160401b82048116916124d091600160801b8204811691600160c01b9004166150c5565b6124da9190614ef2565b6124e491906150c5565b6001600160401b031690506124f9818361523e565b9250505090565b6073546001600160a01b0316331461252a5760405162461bcd60e51b81526004016109e690614e99565b62093a806001600160401b03821611156125565760405162461bcd60e51b81526004016109e690614f1d565b60655460ff166125eb576072546001600160401b03600160801b9091048116908216106125eb5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f7765720060648201526084016109e6565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610ae0565b6072546000906001600160401b03161561268357506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126bd5760405162461bcd60e51b81526004016109e690614e99565b606e6126c98282615169565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610ae0919061475b565b6073546001600160a01b031633146127235760405162461bcd60e51b81526004016109e690614e99565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610ae0565b60655460ff161561279d5760405162461bcd60e51b81526004016109e690614f88565b606c54600160a01b900460ff1615156001146127cb5760405162461bcd60e51b81526004016109e690615252565b80518061282e5760405162461bcd60e51b815260206004820152603d602482015260008051602061559e83398151915260448201527f3a204d75737420666f726365206174206c65617374203120626174636800000060648201526084016109e6565b6103e8811061289f5760405162461bcd60e51b8152602060048201526043602482015260008051602061559e83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a4016109e6565b6068546001600160401b03600160c01b82048116916128c7918491600160801b9004166152bb565b11156129215760405162461bcd60e51b8152602060048201526035602482015260008051602061559e8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b60648201526084016109e6565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612b4d57600086828151811061296e5761296e614ff0565b60200260200101519050838061298390615006565b9450506000816000015180519060200120826020015183604001516040516020016129b09392919061502c565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612a4f5760405162461bcd60e51b8152602060048201526042602482015260008051602061559e83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109e6565b612a5a6001886150ed565b8303612aef5742620697808360400151612a749190614ef2565b6001600160401b03161115612aef5760405162461bcd60e51b8152602060048201526047602482015260008051602061559e83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a4016109e6565b8151805160209182012081840151604051612b1293889392914291339101615068565b6040516020818303038152906040528051906020012093508580612b3590615006565b96505050508080612b45906150ac565b915050612952565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612c665760405162461bcd60e51b81526004016109e6906152d3565b6073546001600160a01b03163314612c905760405162461bcd60e51b81526004016109e690614e99565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612ce057600080fd5b505af1158015612cf4573d6000803e3d6000fd5b5050505061209d6143ba565b606a546001600160a01b03163314612d2a5760405162461bcd60e51b81526004016109e690615330565b612d3b898989898989898989613d3f565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612d8657607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612dcc57600080fd5b505af1158015612de0573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612e685760405162461bcd60e51b81526004016109e690614f88565b606c54600160a01b900460ff161515600114612e965760405162461bcd60e51b81526004016109e690615252565b6000612ea160745490565b905081811115612f065760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b60648201526084016109e6565b620493e0835110612f775760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b60648201526084016109e6565b606554612f9690600160581b90046001600160a01b031633308461337c565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015612fe0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613004919061504f565b60688054919250600160c01b9091046001600160401b031690601861302883615006565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016130699392919061502c565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361310d57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613168565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161315f9392919061538d565b60405180910390a25b50505050565b606a546001600160a01b031633146131985760405162461bcd60e51b81526004016109e690615330565b6131a8888888888888888861348b565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d6020526040902085905560725416156131f357607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561323957600080fd5b505af115801561324d573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611960565b6073546001600160a01b031633146132b85760405162461bcd60e51b81526004016109e690614e99565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90602001610ae0565b61330e613c23565b6001600160a01b0381166133735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e6565b61231481613c7d565b6040516001600160a01b03808516602483015283166044820152606481018290526131689085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614411565b6072546001600160401b03600160401b820481169116111561209d5760725460009061342490600160401b90046001600160401b03166001614ef2565b905061342f81610c91565b15612314576072546000906002906134519084906001600160401b03166150c5565b61345b91906153c0565b6134659083614ef2565b905061347081610c91565b156134825761347e81611972565b5050565b61347e82611972565b600080613496612646565b90506001600160401b038a1615613611576072546001600160401b03908116908b1611156135525760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2070656e60448201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560648201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608482015260a4016109e6565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b909204161461360b5760405162461bcd60e51b815260206004820152604c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760648201526b040e6e8c2e8ca40c4c2e8c6d60a31b608482015260a4016109e6565b50613759565b6001600160401b0389166000908152606d60205260409020549150816136ab5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786064820152621a5cdd60ea1b608482015260a4016109e6565b806001600160401b0316896001600160401b031611156137595760405162461bcd60e51b815260206004820152605d60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960448201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060648201527f7468616e2063757272656e744c61737456657269666965644261746368000000608482015260a4016109e6565b806001600160401b0316886001600160401b0316116138065760405162461bcd60e51b815260206004820152605760248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2066696e60448201527f616c4e65774261746368206d75737420626520626967676572207468616e206360648201527f757272656e744c61737456657269666965644261746368000000000000000000608482015260a4016109e6565b60006138158a8a8a868b610aeb565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161384a91906153e6565b602060405180830381855afa158015613867573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061388a919061504f565b6138949190615402565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916138d8918b918b918b9190600401615416565b602060405180830381865afa1580156138f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139199190615490565b6139785760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20496e7660448201526930b634b210383937b7b360b11b60648201526084016109e6565b6139bb33613986858d6150c5565b6001600160401b031661399761241d565b6139a19190615104565b606554600160581b90046001600160a01b031691906144e8565b505050505050505050505050565b60006139d3612646565b9050816000806139e384846150c5565b6001600160401b031690505b836001600160401b0316836001600160401b031614613a95576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613a3f9116426150ed565b1115613a7a576001810154613a6490600160401b90046001600160401b0316866150c5565b613a77906001600160401b0316846152bb565b92505b60010154600160401b90046001600160401b031692506139ef565b6000613aa183836150ed565b905082811015613b1b576000613ab782856150ed565b9050600c8111613ac75780613aca565b600c5b9050613ad7816003615104565b613ae290600a615591565b606554613afb908390600160481b900461ffff16615591565b607454613b089190615104565b613b12919061523e565b60745550613ba7565b6000613b2784836150ed565b9050600c8111613b375780613b3a565b600c5b90506000613b49826003615104565b613b5490600a615591565b606554613b6d908490600160481b900461ffff16615591565b607454613b7a9190615104565b613b84919061523e565b905080607454607454613b979190615104565b613ba1919061523e565b60745550505b505050505050565b600054610100900460ff16613c1a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109e6565b61209d33613c7d565b6033546001600160a01b0316331461209d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109e6565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d1f57600080fd5b505af1158015613d33573d6000803e3d6000fd5b5050505061209d614518565b60006001600160401b038a1615613eba576072546001600160401b03908116908b161115613dfe5760405162461bcd60e51b815260206004820152606c60248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c4016109e6565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613eb45760405162461bcd60e51b815260206004820152606060248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a4016109e6565b5061400e565b506001600160401b0387166000908152606d602052604090205480613f5b5760405162461bcd60e51b815260206004820152605760248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a4016109e6565b6069546001600160401b03908116908916111561400e5760405162461bcd60e51b815260206004820152607160248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c4016109e6565b6072546001600160401b03908116908a161180159061403e5750896001600160401b0316896001600160401b0316115b801561405f57506072546001600160401b03600160401b9091048116908a16115b6140d75760405162461bcd60e51b815260206004820152604f60248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a4016109e6565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146141975760405162461bcd60e51b815260206004820152606a60248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c4016109e6565b60006141a6898989858a610aeb565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516141db91906153e6565b602060405180830381855afa1580156141f8573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061421b919061504f565b6142259190615402565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614269918a918a918a9190600401615416565b602060405180830381865afa158015614286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142aa9190615490565b61430a5760405162461bcd60e51b815260206004820152603e60248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a20496e76616c69642070726f6f66000060648201526084016109e6565b6001600160401b038b166000908152607160205260409020600201548790036139bb5760405162461bcd60e51b815260206004820152606260248201526000805160206155be83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c4016109e6565b60655460ff166143dc5760405162461bcd60e51b81526004016109e6906152d3565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614466826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145739092919063ffffffff16565b8051909150156144e357808060200190518101906144849190615490565b6144e35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109e6565b505050565b6040516001600160a01b0383166024820152604481018290526144e390849063a9059cbb60e01b906064016133b0565b60655460ff161561453b5760405162461bcd60e51b81526004016109e690614f88565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614582848460008561458a565b949350505050565b6060824710156145eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109e6565b600080866001600160a01b0316858760405161460791906153e6565b60006040518083038185875af1925050503d8060008114614644576040519150601f19603f3d011682016040523d82523d6000602084013e614649565b606091505b509150915061465a87838387614665565b979650505050505050565b606083156146d45782516000036146cd576001600160a01b0385163b6146cd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109e6565b5081614582565b61458283838151156146e95781518083602001fd5b8060405162461bcd60e51b81526004016109e6919061475b565b60005b8381101561471e578181015183820152602001614706565b838111156131685750506000910152565b60008151808452614747816020860160208601614703565b601f01601f19169290920160200192915050565b60208152600061476e602083018461472f565b9392505050565b60006020828403121561478757600080fd5b813561ffff8116811461476e57600080fd5b80356001600160401b03811681146147b057600080fd5b919050565b600080600080600060a086880312156147cd57600080fd5b6147d686614799565b94506147e460208701614799565b94979496505050506040830135926060810135926080909101359150565b60006020828403121561481457600080fd5b61476e82614799565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156148555761485561481d565b60405290565b604051606081016001600160401b03811182821017156148555761485561481d565b604051601f8201601f191681016001600160401b03811182821017156148a5576148a561481d565b604052919050565b60006001600160401b038211156148c6576148c661481d565b5060051b60200190565b600082601f8301126148e157600080fd5b81356001600160401b038111156148fa576148fa61481d565b61490d601f8201601f191660200161487d565b81815284602083860101111561492257600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561495257600080fd5b82356001600160401b038082111561496957600080fd5b818501915085601f83011261497d57600080fd5b813561499061498b826148ad565b61487d565b81815260059190911b830184019084810190888311156149af57600080fd5b8585015b83811015614a48578035858111156149cb5760008081fd5b86016080818c03601f19018113156149e35760008081fd5b6149eb614833565b89830135888111156149fd5760008081fd5b614a0b8e8c838701016148d0565b8252506040808401358b8301526060614a25818601614799565b82840152614a34848601614799565b9083015250855250509186019186016149b3565b5098975050505050505050565b8060408101831015614a6657600080fd5b92915050565b8060808101831015614a6657600080fd5b6000806000806000806000806101a0898b031215614a9a57600080fd5b614aa389614799565b9750614ab160208a01614799565b9650614abf60408a01614799565b95506060890135945060808901359350614adc8a60a08b01614a55565b9250614aeb8a60e08b01614a6c565b9150614afb8a6101608b01614a55565b90509295985092959890939650565b6001600160a01b038116811461231457600080fd5b600080600080600080600080888a036101c0811215614b3d57600080fd5b8935614b4881614b0a565b985060208a0135614b5881614b0a565b975060408a0135614b6881614b0a565b965060608a0135614b7881614b0a565b955060e0607f1982011215614b8c57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614bb657600080fd5b614bc28c838d016148d0565b93506101a08b0135915080821115614bd957600080fd5b50614be68b828c016148d0565b9150509295985092959890939650565b600060208284031215614c0857600080fd5b813561476e81614b0a565b60008060008060008060008060006101c08a8c031215614c3257600080fd5b614c3b8a614799565b9850614c4960208b01614799565b9750614c5760408b01614799565b9650614c6560608b01614799565b955060808a0135945060a08a01359350614c828b60c08c01614a55565b9250614c928b6101008c01614a6c565b9150614ca28b6101808c01614a55565b90509295985092959850929598565b600060208284031215614cc357600080fd5b5035919050565b801515811461231457600080fd5b600060208284031215614cea57600080fd5b813561476e81614cca565b600060208284031215614d0757600080fd5b81356001600160401b03811115614d1d57600080fd5b614582848285016148d0565b60006020808385031215614d3c57600080fd5b82356001600160401b0380821115614d5357600080fd5b818501915085601f830112614d6757600080fd5b8135614d7561498b826148ad565b81815260059190911b83018401908481019088831115614d9457600080fd5b8585015b83811015614a4857803585811115614db05760008081fd5b86016060818c03601f1901811315614dc85760008081fd5b614dd061485b565b8983013588811115614de25760008081fd5b614df08e8c838701016148d0565b8252506040808401358b830152614e08838501614799565b9082015285525050918601918601614d98565b60008060408385031215614e2e57600080fd5b82356001600160401b03811115614e4457600080fd5b614e50858286016148d0565b95602094909401359450505050565b600181811c90821680614e7357607f821691505b602082108103614e9357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614f1457614f14614edc565b01949350505050565b60208082526045908201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361502257615022614edc565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b60006020828403121561506157600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b6000600182016150be576150be614edc565b5060010190565b60006001600160401b03838116908316818110156150e5576150e5614edc565b039392505050565b6000828210156150ff576150ff614edc565b500390565b600081600019048311821515161561511e5761511e614edc565b500290565b601f8211156144e357600081815260208120601f850160051c8101602086101561514a5750805b601f850160051c820191505b81811015613ba757828155600101615156565b81516001600160401b038111156151825761518261481d565b615196816151908454614e5f565b84615123565b602080601f8311600181146151cb57600084156151b35750858301515b600019600386901b1c1916600185901b178555613ba7565b600085815260208120601f198616915b828110156151fa578886015182559484019460019091019084016151db565b50858210156152185787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b60008261524d5761524d615228565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b600082198211156152ce576152ce614edc565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b03831660208201526060604082018190526000906153b79083018461472f565b95945050505050565b60006001600160401b03808416806153da576153da615228565b92169190910492915050565b600082516153f8818460208701614703565b9190910192915050565b60008261541157615411615228565b500690565b61012081016040808784376000838201818152879190815b600281101561544e5784848337908401828152928401929060010161542e565b5050828760c0870137610100850181815286935091505b6001811015615484578251825260209283019290910190600101615465565b50505095945050505050565b6000602082840312156154a257600080fd5b815161476e81614cca565b600181815b808511156154e85781600019048211156154ce576154ce614edc565b808516156154db57918102915b93841c93908002906154b2565b509250929050565b6000826154ff57506001614a66565b8161550c57506000614a66565b8160018114615522576002811461552c57615548565b6001915050614a66565b60ff84111561553d5761553d614edc565b50506001821b614a66565b5060208310610133831016604e8410600b841016171561556b575081810a614a66565b61557583836154ad565b806000190482111561558957615589614edc565b029392505050565b600061476e83836154f056fe506f6c79676f6e5a6b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a6b45564d3a3a70726f76654e6f6e44657465726d696e6973a26469706673582212208c52fcbd2a803441dd2c3fbfaea82ec11a07da8df032f48b14ee8489b157689b64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50615503806100206000396000f3fe608060405234801561001057600080fd5b506004361061032f5760003560e01c80638da5cb5b116101b4578063cfa8ed47116100fa578063e7a7ed021161009d578063e7a7ed021461080e578063e8bf92ed14610828578063eaeb077b1461083b578063edc411211461084e578063f14916d614610861578063f2fde38b14610874578063f851a44014610887578063f8b823e41461089a57600080fd5b8063cfa8ed471461077c578063d02103ca14610796578063d8d1091b146107a9578063d8f54db0146107bc578063d939b315146107d0578063dbc16976146107ea578063e11f3f18146107f2578063e217cfd61461080557600080fd5b8063ab9fc5ef11610162578063ab9fc5ef14610688578063adc879e914610692578063afd23cbe146106ac578063b4d63f58146106d4578063b6b0b09714610734578063c0ed84e01461074e578063c89e42df14610756578063cf1363061461076957600080fd5b80638da5cb5b1461062157806399f5634e146106325780639c9f3dfe1461063a5780639eb831b91461064d5780639f0d039d14610655578063a3c573eb1461065d578063aa58bad61461067057600080fd5b80634a910e6a11610279578063715018a611610227578063715018a61461053b5780637215541a1461054357806375c508b3146105565780637fcb365314610569578063837a47381461057c578063841b24d7146105ea5780638b48931e146106045780638c4a0af71461060e57600080fd5b80634a910e6a146104a75780635392c5e0146104ba578063542028d5146104da57806360943d6a146104e25780636b8616ce146104f55780636ff512cc14610515578063704b6c021461052857600080fd5b8063383b3be8116102e1578063383b3be8146103fa578063394218e91461040d5780633c15826714610420578063423fa85614610433578063456052671461044d578063458c0477146104675780634834a3431461047a5780634a1a89a71461048d57600080fd5b8063107bf28c1461033457806315064c96146103525780631816b7e51461036f57806319d8ac6114610384578063220d7899146103af57806329878983146103c25780632d0889d3146103e2575b600080fd5b61033c6108a3565b6040516103499190614647565b60405180910390f35b60655461035f9060ff1681565b6040519015158152602001610349565b61038261037d366004614661565b610931565b005b606854610397906001600160401b031681565b6040516001600160401b039091168152602001610349565b61033c6103bd3660046146a1565b610a5b565b606a546103d5906001600160a01b031681565b60405161034991906146ee565b6103ec620493e081565b604051908152602001610349565b61035f610408366004614702565b610bfc565b61038261041b366004614702565b610c43565b61038261042e36600461483f565b610dff565b60685461039790600160401b90046001600160401b031681565b60685461039790600160801b90046001600160401b031681565b607254610397906001600160401b031681565b61038261048836600461497d565b6115c6565b60725461039790600160401b90046001600160401b031681565b6103826104b5366004614702565b61190f565b6103ec6104c8366004614702565b606d6020526000908152604090205481565b61033c611baa565b6103826104f0366004614a1f565b611bb7565b6103ec610503366004614702565b60666020526000908152604090205481565b610382610523366004614af6565b611f12565b610382610536366004614af6565b611f90565b610382612005565b610382610551366004614702565b612019565b610382610564366004614b13565b612223565b606954610397906001600160401b031681565b6105bf61058a366004614bb1565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610349565b60725461039790600160c01b90046001600160401b031681565b61039762093a8081565b61038261061c366004614bd8565b6122b2565b6033546001600160a01b03166103d5565b6103ec612329565b610382610648366004614702565b612411565b6103ec600c81565b6074546103ec565b6070546103d5906001600160a01b031681565b6065546103979061010090046001600160401b031681565b6103976206978081565b606c5461039790600160a81b90046001600160401b031681565b6065546106c190600160481b900461ffff1681565b60405161ffff9091168152602001610349565b61070f6106e2366004614702565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610349565b6065546103d590600160581b90046001600160a01b031681565b6103976125bf565b610382610764366004614bf5565b61260c565b610382610777366004614702565b612672565b6069546103d590600160401b90046001600160a01b031681565b606c546103d5906001600160a01b031681565b6103826107b7366004614c29565b6126f3565b606c5461035f90600160a01b900460ff1681565b60725461039790600160801b90046001600160401b031681565b610382612bb3565b610382610800366004614b13565b612c6f565b6103976103e881565b60685461039790600160c01b90046001600160401b031681565b606b546103d5906001600160a01b031681565b610382610849366004614d1b565b612db4565b61038261085c36600461497d565b6130dd565b61038261086f366004614af6565b6131fd565b610382610882366004614af6565b613272565b6073546103d5906001600160a01b031681565b6103ec60745481565b606f80546108b090614d5f565b80601f01602080910402602001604051908101604052809291908181526020018280546108dc90614d5f565b80156109295780601f106108fe57610100808354040283529160200191610929565b820191906000526020600020905b81548152906001019060200180831161090c57829003601f168201915b505050505081565b6073546001600160a01b031633146109645760405162461bcd60e51b815260040161095b90614d99565b60405180910390fd5b6103e88161ffff161015801561097f57506104008161ffff16105b610a045760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a40161095b565b6065805461ffff60481b1916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610a8d57508115155b610b01576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f74206578697374606482015260840161095b565b80610b76576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f74206578697374606482015260840161095b565b606c54604080516001600160601b03193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610c3292600160801b90920481169116614df2565b6001600160401b0316111592915050565b6073546001600160a01b03163314610c6d5760405162461bcd60e51b815260040161095b90614d99565b62093a806001600160401b0382161115610d065760405162461bcd60e51b815260206004820152604e60248201527f506f6c79676f6e5a6b45564d3a3a73657454727573746564416767726567617460448201527f6f7254696d656f75743a20457863656564206d61782068616c7420616767726560648201526d19d85d1a5bdb881d1a5b595bdd5d60921b608482015260a40161095b565b60655460ff16610da9576072546001600160401b03600160c01b909104811690821610610da95760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a204e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a40161095b565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610a50565b60655460ff1615610e225760405162461bcd60e51b815260040161095b90614e1d565b606954600160401b90046001600160a01b03163314610ea95760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a204f6e6c7920747275737465642073657175656e636572000000000000606482015260840161095b565b805180610f1e5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e63652031206261746368000000606482015260840161095b565b6103e88110610f97576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e792062617463686573606482015260840161095b565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b858110156113fc576000878281518110610fea57610fea614e85565b60200260200101519050600081606001516001600160401b0316111561117a578361101481614e9b565b94505060008160000151805190602001208260200151836060015160405160200161104193929190614ec1565b60408051601f1981840301815291815281516020928301206001600160401b0388166000908152606690935291205490915081146110d55760405162461bcd60e51b815260206004820152603d60248201526000805160206154ae83398151915260448201527f6f7263656420626174636865732064617461206d757374206d61746368000000606482015260840161095b565b81606001516001600160401b031682604001516001600160401b031610156111745760405162461bcd60e51b815260206004820152605860248201526000805160206154ae83398151915260448201527f6f7263656420626174636865732074696d657374616d70206d757374206265206064820152773134b3b3b2b91037b91032b8bab0b6103a3430b71036b4b760411b608482015260a40161095b565b506112ef565b602081015115806112035750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916111bd9160040190815260200190565b6020604051808303816000875af11580156111dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112009190614ee4565b15155b6112755760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d757374206578697374000000000000606482015260840161095b565b805151620493e0116112ef5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f77000000000000606482015260840161095b565b856001600160401b031681604001516001600160401b03161015801561132257504281604001516001600160401b031611155b6113945760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e6765000000606482015260840161095b565b805180516020918201208183015160408085015190516113bb948894939291339101614efd565b60405160208183030381529060405280519060200120925084806113de90614e9b565b955050806040015195505080806113f490614f3c565b915050610fce565b506068546001600160401b03600160c01b9091048116908316111561146f5760405162461bcd60e51b815260206004820152603560248201526000805160206154ae8339815191526044820152746f7263652062617463686573206f766572666c6f7760581b606482015260840161095b565b60685460009061148f90600160801b90046001600160401b031684614f55565b6114a2906001600160401b031687614f7d565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115779033903090849061155c9190614f94565b606554600160581b90046001600160a01b03169291906132e8565b61157f613353565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff16156115e95760405162461bcd60e51b815260040161095b90614e1d565b6072546001600160401b03878116600090815260676020526040902060010154429261162092600160c01b90910481169116614df2565b6001600160401b031611156116a95760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2054727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a40161095b565b6103e86116b68888614f55565b6001600160401b0316106117325760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2043616e60448201527f6e6f74207665726966792074686174206d616e79206261746368657300000000606482015260840161095b565b61174288888888888888886133f7565b61174b866138fa565b607254600160801b90046001600160401b0316600003611813576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d6020526040902085905560725416156117b057607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156117f657600080fd5b505af115801561180a573d6000803e3d6000fd5b505050506118c4565b61181b613353565b607280546001600160401b031690600061183483614e9b565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b0381161580159061193c57506072546001600160401b03600160401b9091048116908216115b801561195757506072546001600160401b0390811690821611155b6119d55760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a40161095b565b606a546001600160a01b03163314611a7f576119f081610bfc565b611a7f5760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2050656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a40161095b565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611b3c57600080fd5b505af1158015611b50573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611b9d91815260200190565b60405180910390a3505050565b606e80546108b090614d5f565b600054610100900460ff1615808015611bd75750600054600160ff909116105b80611bf15750303b158015611bf1575060005460ff166001145b611c545760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161095b565b6000805460ff191660011790558015611c77576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c81169190911790925560658054600160581b600160f81b031916600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611cdf6020860186614af6565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d0f6060860160408701614af6565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611d4a60c0860160a08701614af6565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611da760e0860160c08701614702565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611dde6040860160208701614702565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611e1a6080860160608701614702565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611e5660a0860160808701614bd8565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611e7e8482614ff9565b50606f611e8b8382614ff9565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611ec1613ae0565b8015611f07576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611f3c5760405162461bcd60e51b815260040161095b90614d99565b60698054600160401b600160e01b031916600160401b6001600160a01b038416021790556040517ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090610a509083906146ee565b6073546001600160a01b03163314611fba5760405162461bcd60e51b815260040161095b90614d99565b607380546001600160a01b0319166001600160a01b0383161790556040517f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190610a509083906146ee565b61200d613b54565b6120176000613bae565b565b6033546001600160a01b031633146122185760006120356125bf565b9050806001600160401b0316826001600160401b0316116120ac5760405162461bcd60e51b815260206004820152603c602482015260008051602061542e83398151915260448201527f746174653a20426174636820616c726561647920766572696669656400000000606482015260840161095b565b6068546001600160401b03600160401b9091048116908316118015906120ee57506001600160401b038083166000908152606760205260409020600101541615155b6121675760405162461bcd60e51b8152602060048201526050602482015260008051602061542e83398151915260448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a40161095b565b6001600160401b0380831660009081526067602052604090206001015442916121959162093a809116614df2565b6001600160401b031611156122165760405162461bcd60e51b815260206004820152604d602482015260008051602061542e83398151915260448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a40161095b565b505b612220613c00565b50565b60655460ff16156122465760405162461bcd60e51b815260040161095b90614e1d565b612257898989898989898989613c70565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f07613c00565b6073546001600160a01b031633146122dc5760405162461bcd60e51b815260040161095b90614d99565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a5090831515815260200190565b6065546040516370a0823160e01b81526000918291600160581b9091046001600160a01b0316906370a08231906123649030906004016146ee565b602060405180830381865afa158015612381573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a59190614ee4565b905060006123b16125bf565b6068546001600160401b03600160401b82048116916123e191600160801b8204811691600160c01b900416614f55565b6123eb9190614df2565b6123f59190614f55565b6001600160401b0316905061240a81836150ce565b9250505090565b6073546001600160a01b0316331461243b5760405162461bcd60e51b815260040161095b90614d99565b62093a806001600160401b03821611156124cf5760405162461bcd60e51b815260206004820152604960248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a20457863656564206d61782068616c74206167677265676174696f6064820152681b881d1a5b595bdd5d60ba1b608482015260a40161095b565b60655460ff16612564576072546001600160401b03600160801b9091048116908216106125645760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a204e65772074696d656f7574206d757374206265206c6f77657200606482015260840161095b565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610a50565b6072546000906001600160401b0316156125fc57506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126365760405162461bcd60e51b815260040161095b90614d99565b606e6126428282614ff9565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a509190614647565b6073546001600160a01b0316331461269c5760405162461bcd60e51b815260040161095b90614d99565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610a50565b60655460ff16156127165760405162461bcd60e51b815260040161095b90614e1d565b606c54600160a01b900460ff1615156001146127445760405162461bcd60e51b815260040161095b906150e2565b8051806127a75760405162461bcd60e51b815260206004820152603f602482015260008051602061548e83398151915260448201527f65733a204d75737420666f726365206174206c65617374203120626174636800606482015260840161095b565b6103e881106128185760405162461bcd60e51b8152602060048201526043602482015260008051602061548e83398151915260448201527f65733a2043616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a40161095b565b6068546001600160401b03600160c01b8204811691612840918491600160801b90041661514b565b111561289c5760405162461bcd60e51b8152602060048201526037602482015260008051602061548e833981519152604482015276195cce88119bdc98d94818985d18da081a5b9d985b1a59604a1b606482015260840161095b565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612aca5760008682815181106128e9576128e9614e85565b6020026020010151905083806128fe90614e9b565b94505060008160000151805190602001208260200151836040015160405160200161292b93929190614ec1565b60408051601f1981840301815291815281516020928301206001600160401b0388166000908152606690935291205490915081146129ca5760405162461bcd60e51b8152602060048201526042602482015260008051602061548e83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a40161095b565b6129d5600188614f7d565b8303612a6c57426206978083604001516129ef9190614df2565b6001600160401b03161115612a6c5760405162461bcd60e51b8152602060048201526049602482015260008051602061548e83398151915260448201527f65733a20466f72636564206261746368206973206e6f7420696e2074696d656f6064820152681d5d081c195c9a5bd960ba1b608482015260a40161095b565b8151805160209182012081840151604051612a8f93889392914291339101614efd565b6040516020818303038152906040528051906020012093508580612ab290614e9b565b96505050508080612ac290614f3c565b9150506128cd565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b0319909216919091179286168502929092179091558554600160401b600160c01b03191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612bd55760405162461bcd60e51b815260040161095b90615163565b6073546001600160a01b03163314612bff5760405162461bcd60e51b815260040161095b90614d99565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612c4f57600080fd5b505af1158015612c63573d6000803e3d6000fd5b505050506120176142a6565b606a546001600160a01b03163314612c995760405162461bcd60e51b815260040161095b906151c0565b612caa898989898989898989613c70565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612cf557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612d3b57600080fd5b505af1158015612d4f573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612dd75760405162461bcd60e51b815260040161095b90614e1d565b606c54600160a01b900460ff161515600114612e055760405162461bcd60e51b815260040161095b906150e2565b6000612e1060745490565b905081811115612e755760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a204e6f7420656e6044820152696f756768206d6174696360b01b606482015260840161095b565b620493e0835110612ee65760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b606482015260840161095b565b606554612f0590600160581b90046001600160a01b03163330846132e8565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015612f4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f739190614ee4565b60688054919250600160c01b9091046001600160401b0316906018612f9783614e9b565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505083805190602001208142604051602001612fd893929190614ec1565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361307c57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26130d7565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516130ce9392919061521d565b60405180910390a25b50505050565b606a546001600160a01b031633146131075760405162461bcd60e51b815260040161095b906151c0565b61311788888888888888886133f7565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561316257607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156131a857600080fd5b505af11580156131bc573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce7906020016118fd565b6073546001600160a01b031633146132275760405162461bcd60e51b815260040161095b90614d99565b606a80546001600160a01b0319166001600160a01b0383161790556040517f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90610a509083906146ee565b61327a613b54565b6001600160a01b0381166132df5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161095b565b61222081613bae565b6040516001600160a01b03808516602483015283166044820152606481018290526130d79085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526142fd565b6072546001600160401b03600160401b82048116911611156120175760725460009061339090600160401b90046001600160401b03166001614df2565b905061339b81610bfc565b15612220576072546000906002906133bd9084906001600160401b0316614f55565b6133c79190615250565b6133d19083614df2565b90506133dc81610bfc565b156133ee576133ea8161190f565b5050565b6133ea8261190f565b6000806134026125bf565b90506001600160401b038a1615613568576072546001600160401b03908116908b1611156134ba5760405162461bcd60e51b815260206004820152605960248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20706560448201527f6e64696e6753746174654e756d206d757374206265206c657373206f7220657160648201527875616c207468616e206c61737450656e64696e67537461746560381b608482015260a40161095b565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b90920416146135625760405162461bcd60e51b815260206004820152604d602482015260008051602061544e83398151915260448201527f69744e756d4261746368206d757374206d61746368207468652070656e64696e60648201526c0ce40e6e8c2e8ca40c4c2e8c6d609b1b608482015260a40161095b565b5061368e565b6001600160401b0389166000908152606d60205260409020549150816135f25760405162461bcd60e51b81526020600482015260446024820181905260008051602061544e833981519152908201527f69744e756d426174636820737461746520726f6f7420646f6573206e6f7420656064820152631e1a5cdd60e21b608482015260a40161095b565b806001600160401b0316896001600160401b0316111561368e5760405162461bcd60e51b815260206004820152605e602482015260008051602061544e83398151915260448201527f69744e756d4261746368206d757374206265206c657373206f7220657175616c60648201527f207468616e2063757272656e744c617374566572696669656442617463680000608482015260a40161095b565b806001600160401b0316886001600160401b0316116137365760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20666960448201527f6e616c4e65774261746368206d75737420626520626967676572207468616e206064820152770c6eae4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d60431b608482015260a40161095b565b60006137458a8a8a868b610a5b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161377a9190615276565b602060405180830381855afa158015613797573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906137ba9190614ee4565b6137c49190615292565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613808918b918b918b91906004016152a6565b602060405180830381865afa158015613825573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138499190615320565b6138a95760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20496e60448201526a3b30b634b210383937b7b360a91b606482015260840161095b565b6138ec336138b7858d614f55565b6001600160401b03166138c8612329565b6138d29190614f94565b606554600160581b90046001600160a01b031691906143d4565b505050505050505050505050565b60006139046125bf565b9050816000806139148484614f55565b6001600160401b031690505b836001600160401b0316836001600160401b0316146139c6576001600160401b03808416600090815260676020526040902060655460018201549192610100909104811691613970911642614f7d565b11156139ab57600181015461399590600160401b90046001600160401b031685614f55565b6139a8906001600160401b03168461514b565b92505b60010154600160401b90046001600160401b03169250613920565b60006139d28383614f7d565b905082811015613a4c5760006139e88285614f7d565b9050600c81116139f857806139fb565b600c5b9050613a08816003614f94565b613a1390600a615421565b606554613a2c908390600160481b900461ffff16615421565b607454613a399190614f94565b613a4391906150ce565b60745550613ad8565b6000613a588483614f7d565b9050600c8111613a685780613a6b565b600c5b90506000613a7a826003614f94565b613a8590600a615421565b606554613a9e908490600160481b900461ffff16615421565b607454613aab9190614f94565b613ab591906150ce565b905080607454607454613ac89190614f94565b613ad291906150ce565b60745550505b505050505050565b600054610100900460ff16613b4b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161095b565b61201733613bae565b6033546001600160a01b031633146120175760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095b565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613c5057600080fd5b505af1158015613c64573d6000803e3d6000fd5b50505050612017614404565b60006001600160401b038a1615613de0576072546001600160401b03908116908b161115613d285760405162461bcd60e51b8152602060048201526065602482015260008051602061546e83398151915260448201527f696e6753746174653a2070656e64696e6753746174654e756d206d757374206260648201527f65206c657373206f7220657175616c207468616e206c61737450656e64696e67608482015264537461746560d81b60a482015260c40161095b565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613dda5760405162461bcd60e51b8152602060048201526059602482015260008051602061546e83398151915260448201527f696e6753746174653a20696e69744e756d4261746368206d757374206d6174636064820152780d040e8d0ca40e0cadcc8d2dcce40e6e8c2e8ca40c4c2e8c6d603b1b608482015260a40161095b565b50613f19565b506001600160401b0387166000908152606d602052604090205480613e745760405162461bcd60e51b8152602060048201526050602482015260008051602061546e83398151915260448201527f696e6753746174653a20696e69744e756d426174636820737461746520726f6f60648201526f1d08191bd95cc81b9bdd08195e1a5cdd60821b608482015260a40161095b565b6069546001600160401b039081169089161115613f195760405162461bcd60e51b8152602060048201526063602482015260008051602061546e83398151915260448201527f696e6753746174653a20696e69744e756d4261746368206d757374206265206c60648201527f657373206f7220657175616c207468616e206c617374566572696669656442616084820152620e8c6d60eb1b60a482015260c40161095b565b6072546001600160401b03908116908a1611801590613f495750896001600160401b0316896001600160401b0316115b8015613f6a57506072546001600160401b03600160401b9091048116908a16115b613fdb5760405162461bcd60e51b8152602060048201526048602482015260008051602061546e83398151915260448201527f696e6753746174653a2066696e616c50656e64696e6753746174654e756d20696064820152671b98dbdc9c9958dd60c21b608482015260a40161095b565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146140945760405162461bcd60e51b8152602060048201526063602482015260008051602061546e83398151915260448201527f696e6753746174653a2066696e616c4e65774261746368206d7573742062652060648201527f657175616c207468616e2063757272656e744c617374566572696669656442616084820152620e8c6d60eb1b60a482015260c40161095b565b60006140a3898989858a610a5b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516140d89190615276565b602060405180830381855afa1580156140f5573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906141189190614ee4565b6141229190615292565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614166918a918a918a91906004016152a6565b602060405180830381865afa158015614183573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141a79190615320565b6142015760405162461bcd60e51b8152602060048201526037602482015260008051602061546e83398151915260448201527634b733a9ba30ba329d1024b73b30b634b210383937b7b360491b606482015260840161095b565b6001600160401b038b166000908152607160205260409020600201548790036138ec5760405162461bcd60e51b815260206004820152605b602482015260008051602061546e83398151915260448201527f696e6753746174653a2053746f72656420726f6f74206d75737420626520646960648201527f66666572656e74207468616e206e657720737461746520726f6f740000000000608482015260a40161095b565b60655460ff166142c85760405162461bcd60e51b815260040161095b90615163565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614352826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661445f9092919063ffffffff16565b8051909150156143cf57808060200190518101906143709190615320565b6143cf5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161095b565b505050565b6040516001600160a01b0383166024820152604481018290526143cf90849063a9059cbb60e01b9060640161331c565b60655460ff16156144275760405162461bcd60e51b815260040161095b90614e1d565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b606061446e8484600085614476565b949350505050565b6060824710156144d75760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161095b565b600080866001600160a01b031685876040516144f39190615276565b60006040518083038185875af1925050503d8060008114614530576040519150601f19603f3d011682016040523d82523d6000602084013e614535565b606091505b509150915061454687838387614551565b979650505050505050565b606083156145c05782516000036145b9576001600160a01b0385163b6145b95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161095b565b508161446e565b61446e83838151156145d55781518083602001fd5b8060405162461bcd60e51b815260040161095b9190614647565b60005b8381101561460a5781810151838201526020016145f2565b838111156130d75750506000910152565b600081518084526146338160208601602086016145ef565b601f01601f19169290920160200192915050565b60208152600061465a602083018461461b565b9392505050565b60006020828403121561467357600080fd5b813561ffff8116811461465a57600080fd5b80356001600160401b038116811461469c57600080fd5b919050565b600080600080600060a086880312156146b957600080fd5b6146c286614685565b94506146d060208701614685565b94979496505050506040830135926060810135926080909101359150565b6001600160a01b0391909116815260200190565b60006020828403121561471457600080fd5b61465a82614685565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156147555761475561471d565b60405290565b604051606081016001600160401b03811182821017156147555761475561471d565b604051601f8201601f191681016001600160401b03811182821017156147a5576147a561471d565b604052919050565b60006001600160401b038211156147c6576147c661471d565b5060051b60200190565b600082601f8301126147e157600080fd5b81356001600160401b038111156147fa576147fa61471d565b61480d601f8201601f191660200161477d565b81815284602083860101111561482257600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561485257600080fd5b82356001600160401b038082111561486957600080fd5b818501915085601f83011261487d57600080fd5b813561489061488b826147ad565b61477d565b81815260059190911b830184019084810190888311156148af57600080fd5b8585015b83811015614948578035858111156148cb5760008081fd5b86016080818c03601f19018113156148e35760008081fd5b6148eb614733565b89830135888111156148fd5760008081fd5b61490b8e8c838701016147d0565b8252506040808401358b8301526060614925818601614685565b82840152614934848601614685565b9083015250855250509186019186016148b3565b5098975050505050505050565b806040810183101561496657600080fd5b92915050565b806080810183101561496657600080fd5b6000806000806000806000806101a0898b03121561499a57600080fd5b6149a389614685565b97506149b160208a01614685565b96506149bf60408a01614685565b955060608901359450608089013593506149dc8a60a08b01614955565b92506149eb8a60e08b0161496c565b91506149fb8a6101608b01614955565b90509295985092959890939650565b6001600160a01b038116811461222057600080fd5b600080600080600080600080888a036101c0811215614a3d57600080fd5b8935614a4881614a0a565b985060208a0135614a5881614a0a565b975060408a0135614a6881614a0a565b965060608a0135614a7881614a0a565b955060e0607f1982011215614a8c57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614ab657600080fd5b614ac28c838d016147d0565b93506101a08b0135915080821115614ad957600080fd5b50614ae68b828c016147d0565b9150509295985092959890939650565b600060208284031215614b0857600080fd5b813561465a81614a0a565b60008060008060008060008060006101c08a8c031215614b3257600080fd5b614b3b8a614685565b9850614b4960208b01614685565b9750614b5760408b01614685565b9650614b6560608b01614685565b955060808a0135945060a08a01359350614b828b60c08c01614955565b9250614b928b6101008c0161496c565b9150614ba28b6101808c01614955565b90509295985092959850929598565b600060208284031215614bc357600080fd5b5035919050565b801515811461222057600080fd5b600060208284031215614bea57600080fd5b813561465a81614bca565b600060208284031215614c0757600080fd5b81356001600160401b03811115614c1d57600080fd5b61446e848285016147d0565b60006020808385031215614c3c57600080fd5b82356001600160401b0380821115614c5357600080fd5b818501915085601f830112614c6757600080fd5b8135614c7561488b826147ad565b81815260059190911b83018401908481019088831115614c9457600080fd5b8585015b8381101561494857803585811115614cb05760008081fd5b86016060818c03601f1901811315614cc85760008081fd5b614cd061475b565b8983013588811115614ce25760008081fd5b614cf08e8c838701016147d0565b8252506040808401358b830152614d08838501614685565b9082015285525050918601918601614c98565b60008060408385031215614d2e57600080fd5b82356001600160401b03811115614d4457600080fd5b614d50858286016147d0565b95602094909401359450505050565b600181811c90821680614d7357607f821691505b602082108103614d9357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a204f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614e1457614e14614ddc565b01949350505050565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b03808316818103614eb757614eb7614ddc565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b600060208284031215614ef657600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6001600160601b0319166068820152607c0190565b600060018201614f4e57614f4e614ddc565b5060010190565b60006001600160401b0383811690831681811015614f7557614f75614ddc565b039392505050565b600082821015614f8f57614f8f614ddc565b500390565b6000816000190483118215151615614fae57614fae614ddc565b500290565b601f8211156143cf57600081815260208120601f850160051c81016020861015614fda5750805b601f850160051c820191505b81811015613ad857828155600101614fe6565b81516001600160401b038111156150125761501261471d565b615026816150208454614d5f565b84614fb3565b602080601f83116001811461505b57600084156150435750858301515b600019600386901b1c1916600185901b178555613ad8565b600085815260208120601f198616915b8281101561508a5788860151825594840194600190910190840161506b565b50858210156150a85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b6000826150dd576150dd6150b8565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a204f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b6000821982111561515e5761515e614ddc565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a204f6e6c7920747275737465642061676772656761746f7200000000606082015260800190565b8381526001600160a01b03831660208201526060604082018190526000906152479083018461461b565b95945050505050565b60006001600160401b038084168061526a5761526a6150b8565b92169190910492915050565b600082516152888184602087016145ef565b9190910192915050565b6000826152a1576152a16150b8565b500690565b61012081016040808784376000838201818152879190815b60028110156152de578484833790840182815292840192906001016152be565b5050828760c0870137610100850181815286935091505b60018110156153145782518252602092830192909101906001016152f5565b50505095945050505050565b60006020828403121561533257600080fd5b815161465a81614bca565b600181815b8085111561537857816000190482111561535e5761535e614ddc565b8085161561536b57918102915b93841c9390800290615342565b509250929050565b60008261538f57506001614966565b8161539c57506000614966565b81600181146153b257600281146153bc576153d8565b6001915050614966565b60ff8411156153cd576153cd614ddc565b50506001821b614966565b5060208310610133831016604e8410600b84101617156153fb575081810a614966565b615405838361533d565b806000190482111561541957615419614ddc565b029392505050565b600061465a838361538056fe506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e637953506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20696e506f6c79676f6e5a6b45564d3a3a5f70726f766544697374696e637450656e64506f6c79676f6e5a6b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a2046a26469706673582212204a13b041896f72f2de202018d2be9bf682fff57506a937c10e31c8e04afa5d2f64736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061032f5760003560e01c80638da5cb5b116101b4578063cfa8ed47116100fa578063e7a7ed021161009d578063e7a7ed021461080e578063e8bf92ed14610828578063eaeb077b1461083b578063edc411211461084e578063f14916d614610861578063f2fde38b14610874578063f851a44014610887578063f8b823e41461089a57600080fd5b8063cfa8ed471461077c578063d02103ca14610796578063d8d1091b146107a9578063d8f54db0146107bc578063d939b315146107d0578063dbc16976146107ea578063e11f3f18146107f2578063e217cfd61461080557600080fd5b8063ab9fc5ef11610162578063ab9fc5ef14610688578063adc879e914610692578063afd23cbe146106ac578063b4d63f58146106d4578063b6b0b09714610734578063c0ed84e01461074e578063c89e42df14610756578063cf1363061461076957600080fd5b80638da5cb5b1461062157806399f5634e146106325780639c9f3dfe1461063a5780639eb831b91461064d5780639f0d039d14610655578063a3c573eb1461065d578063aa58bad61461067057600080fd5b80634a910e6a11610279578063715018a611610227578063715018a61461053b5780637215541a1461054357806375c508b3146105565780637fcb365314610569578063837a47381461057c578063841b24d7146105ea5780638b48931e146106045780638c4a0af71461060e57600080fd5b80634a910e6a146104a75780635392c5e0146104ba578063542028d5146104da57806360943d6a146104e25780636b8616ce146104f55780636ff512cc14610515578063704b6c021461052857600080fd5b8063383b3be8116102e1578063383b3be8146103fa578063394218e91461040d5780633c15826714610420578063423fa85614610433578063456052671461044d578063458c0477146104675780634834a3431461047a5780634a1a89a71461048d57600080fd5b8063107bf28c1461033457806315064c96146103525780631816b7e51461036f57806319d8ac6114610384578063220d7899146103af57806329878983146103c25780632d0889d3146103e2575b600080fd5b61033c6108a3565b6040516103499190614647565b60405180910390f35b60655461035f9060ff1681565b6040519015158152602001610349565b61038261037d366004614661565b610931565b005b606854610397906001600160401b031681565b6040516001600160401b039091168152602001610349565b61033c6103bd3660046146a1565b610a5b565b606a546103d5906001600160a01b031681565b60405161034991906146ee565b6103ec620493e081565b604051908152602001610349565b61035f610408366004614702565b610bfc565b61038261041b366004614702565b610c43565b61038261042e36600461483f565b610dff565b60685461039790600160401b90046001600160401b031681565b60685461039790600160801b90046001600160401b031681565b607254610397906001600160401b031681565b61038261048836600461497d565b6115c6565b60725461039790600160401b90046001600160401b031681565b6103826104b5366004614702565b61190f565b6103ec6104c8366004614702565b606d6020526000908152604090205481565b61033c611baa565b6103826104f0366004614a1f565b611bb7565b6103ec610503366004614702565b60666020526000908152604090205481565b610382610523366004614af6565b611f12565b610382610536366004614af6565b611f90565b610382612005565b610382610551366004614702565b612019565b610382610564366004614b13565b612223565b606954610397906001600160401b031681565b6105bf61058a366004614bb1565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610349565b60725461039790600160c01b90046001600160401b031681565b61039762093a8081565b61038261061c366004614bd8565b6122b2565b6033546001600160a01b03166103d5565b6103ec612329565b610382610648366004614702565b612411565b6103ec600c81565b6074546103ec565b6070546103d5906001600160a01b031681565b6065546103979061010090046001600160401b031681565b6103976206978081565b606c5461039790600160a81b90046001600160401b031681565b6065546106c190600160481b900461ffff1681565b60405161ffff9091168152602001610349565b61070f6106e2366004614702565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610349565b6065546103d590600160581b90046001600160a01b031681565b6103976125bf565b610382610764366004614bf5565b61260c565b610382610777366004614702565b612672565b6069546103d590600160401b90046001600160a01b031681565b606c546103d5906001600160a01b031681565b6103826107b7366004614c29565b6126f3565b606c5461035f90600160a01b900460ff1681565b60725461039790600160801b90046001600160401b031681565b610382612bb3565b610382610800366004614b13565b612c6f565b6103976103e881565b60685461039790600160c01b90046001600160401b031681565b606b546103d5906001600160a01b031681565b610382610849366004614d1b565b612db4565b61038261085c36600461497d565b6130dd565b61038261086f366004614af6565b6131fd565b610382610882366004614af6565b613272565b6073546103d5906001600160a01b031681565b6103ec60745481565b606f80546108b090614d5f565b80601f01602080910402602001604051908101604052809291908181526020018280546108dc90614d5f565b80156109295780601f106108fe57610100808354040283529160200191610929565b820191906000526020600020905b81548152906001019060200180831161090c57829003601f168201915b505050505081565b6073546001600160a01b031633146109645760405162461bcd60e51b815260040161095b90614d99565b60405180910390fd5b6103e88161ffff161015801561097f57506104008161ffff16105b610a045760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a40161095b565b6065805461ffff60481b1916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610a8d57508115155b610b01576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f74206578697374606482015260840161095b565b80610b76576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f74206578697374606482015260840161095b565b606c54604080516001600160601b03193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610c3292600160801b90920481169116614df2565b6001600160401b0316111592915050565b6073546001600160a01b03163314610c6d5760405162461bcd60e51b815260040161095b90614d99565b62093a806001600160401b0382161115610d065760405162461bcd60e51b815260206004820152604e60248201527f506f6c79676f6e5a6b45564d3a3a73657454727573746564416767726567617460448201527f6f7254696d656f75743a20457863656564206d61782068616c7420616767726560648201526d19d85d1a5bdb881d1a5b595bdd5d60921b608482015260a40161095b565b60655460ff16610da9576072546001600160401b03600160c01b909104811690821610610da95760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a204e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a40161095b565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610a50565b60655460ff1615610e225760405162461bcd60e51b815260040161095b90614e1d565b606954600160401b90046001600160a01b03163314610ea95760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a204f6e6c7920747275737465642073657175656e636572000000000000606482015260840161095b565b805180610f1e5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e63652031206261746368000000606482015260840161095b565b6103e88110610f97576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e792062617463686573606482015260840161095b565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b858110156113fc576000878281518110610fea57610fea614e85565b60200260200101519050600081606001516001600160401b0316111561117a578361101481614e9b565b94505060008160000151805190602001208260200151836060015160405160200161104193929190614ec1565b60408051601f1981840301815291815281516020928301206001600160401b0388166000908152606690935291205490915081146110d55760405162461bcd60e51b815260206004820152603d60248201526000805160206154ae83398151915260448201527f6f7263656420626174636865732064617461206d757374206d61746368000000606482015260840161095b565b81606001516001600160401b031682604001516001600160401b031610156111745760405162461bcd60e51b815260206004820152605860248201526000805160206154ae83398151915260448201527f6f7263656420626174636865732074696d657374616d70206d757374206265206064820152773134b3b3b2b91037b91032b8bab0b6103a3430b71036b4b760411b608482015260a40161095b565b506112ef565b602081015115806112035750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916111bd9160040190815260200190565b6020604051808303816000875af11580156111dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112009190614ee4565b15155b6112755760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d757374206578697374000000000000606482015260840161095b565b805151620493e0116112ef5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f77000000000000606482015260840161095b565b856001600160401b031681604001516001600160401b03161015801561132257504281604001516001600160401b031611155b6113945760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e6765000000606482015260840161095b565b805180516020918201208183015160408085015190516113bb948894939291339101614efd565b60405160208183030381529060405280519060200120925084806113de90614e9b565b955050806040015195505080806113f490614f3c565b915050610fce565b506068546001600160401b03600160c01b9091048116908316111561146f5760405162461bcd60e51b815260206004820152603560248201526000805160206154ae8339815191526044820152746f7263652062617463686573206f766572666c6f7760581b606482015260840161095b565b60685460009061148f90600160801b90046001600160401b031684614f55565b6114a2906001600160401b031687614f7d565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115779033903090849061155c9190614f94565b606554600160581b90046001600160a01b03169291906132e8565b61157f613353565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff16156115e95760405162461bcd60e51b815260040161095b90614e1d565b6072546001600160401b03878116600090815260676020526040902060010154429261162092600160c01b90910481169116614df2565b6001600160401b031611156116a95760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2054727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a40161095b565b6103e86116b68888614f55565b6001600160401b0316106117325760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2043616e60448201527f6e6f74207665726966792074686174206d616e79206261746368657300000000606482015260840161095b565b61174288888888888888886133f7565b61174b866138fa565b607254600160801b90046001600160401b0316600003611813576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d6020526040902085905560725416156117b057607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156117f657600080fd5b505af115801561180a573d6000803e3d6000fd5b505050506118c4565b61181b613353565b607280546001600160401b031690600061183483614e9b565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b0381161580159061193c57506072546001600160401b03600160401b9091048116908216115b801561195757506072546001600160401b0390811690821611155b6119d55760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a40161095b565b606a546001600160a01b03163314611a7f576119f081610bfc565b611a7f5760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2050656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a40161095b565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611b3c57600080fd5b505af1158015611b50573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611b9d91815260200190565b60405180910390a3505050565b606e80546108b090614d5f565b600054610100900460ff1615808015611bd75750600054600160ff909116105b80611bf15750303b158015611bf1575060005460ff166001145b611c545760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161095b565b6000805460ff191660011790558015611c77576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c81169190911790925560658054600160581b600160f81b031916600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611cdf6020860186614af6565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d0f6060860160408701614af6565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611d4a60c0860160a08701614af6565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611da760e0860160c08701614702565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611dde6040860160208701614702565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611e1a6080860160608701614702565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611e5660a0860160808701614bd8565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611e7e8482614ff9565b50606f611e8b8382614ff9565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611ec1613ae0565b8015611f07576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611f3c5760405162461bcd60e51b815260040161095b90614d99565b60698054600160401b600160e01b031916600160401b6001600160a01b038416021790556040517ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090610a509083906146ee565b6073546001600160a01b03163314611fba5760405162461bcd60e51b815260040161095b90614d99565b607380546001600160a01b0319166001600160a01b0383161790556040517f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190610a509083906146ee565b61200d613b54565b6120176000613bae565b565b6033546001600160a01b031633146122185760006120356125bf565b9050806001600160401b0316826001600160401b0316116120ac5760405162461bcd60e51b815260206004820152603c602482015260008051602061542e83398151915260448201527f746174653a20426174636820616c726561647920766572696669656400000000606482015260840161095b565b6068546001600160401b03600160401b9091048116908316118015906120ee57506001600160401b038083166000908152606760205260409020600101541615155b6121675760405162461bcd60e51b8152602060048201526050602482015260008051602061542e83398151915260448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a40161095b565b6001600160401b0380831660009081526067602052604090206001015442916121959162093a809116614df2565b6001600160401b031611156122165760405162461bcd60e51b815260206004820152604d602482015260008051602061542e83398151915260448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a40161095b565b505b612220613c00565b50565b60655460ff16156122465760405162461bcd60e51b815260040161095b90614e1d565b612257898989898989898989613c70565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f07613c00565b6073546001600160a01b031633146122dc5760405162461bcd60e51b815260040161095b90614d99565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a5090831515815260200190565b6065546040516370a0823160e01b81526000918291600160581b9091046001600160a01b0316906370a08231906123649030906004016146ee565b602060405180830381865afa158015612381573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a59190614ee4565b905060006123b16125bf565b6068546001600160401b03600160401b82048116916123e191600160801b8204811691600160c01b900416614f55565b6123eb9190614df2565b6123f59190614f55565b6001600160401b0316905061240a81836150ce565b9250505090565b6073546001600160a01b0316331461243b5760405162461bcd60e51b815260040161095b90614d99565b62093a806001600160401b03821611156124cf5760405162461bcd60e51b815260206004820152604960248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a20457863656564206d61782068616c74206167677265676174696f6064820152681b881d1a5b595bdd5d60ba1b608482015260a40161095b565b60655460ff16612564576072546001600160401b03600160801b9091048116908216106125645760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a204e65772074696d656f7574206d757374206265206c6f77657200606482015260840161095b565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610a50565b6072546000906001600160401b0316156125fc57506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126365760405162461bcd60e51b815260040161095b90614d99565b606e6126428282614ff9565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a509190614647565b6073546001600160a01b0316331461269c5760405162461bcd60e51b815260040161095b90614d99565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610a50565b60655460ff16156127165760405162461bcd60e51b815260040161095b90614e1d565b606c54600160a01b900460ff1615156001146127445760405162461bcd60e51b815260040161095b906150e2565b8051806127a75760405162461bcd60e51b815260206004820152603f602482015260008051602061548e83398151915260448201527f65733a204d75737420666f726365206174206c65617374203120626174636800606482015260840161095b565b6103e881106128185760405162461bcd60e51b8152602060048201526043602482015260008051602061548e83398151915260448201527f65733a2043616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a40161095b565b6068546001600160401b03600160c01b8204811691612840918491600160801b90041661514b565b111561289c5760405162461bcd60e51b8152602060048201526037602482015260008051602061548e833981519152604482015276195cce88119bdc98d94818985d18da081a5b9d985b1a59604a1b606482015260840161095b565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612aca5760008682815181106128e9576128e9614e85565b6020026020010151905083806128fe90614e9b565b94505060008160000151805190602001208260200151836040015160405160200161292b93929190614ec1565b60408051601f1981840301815291815281516020928301206001600160401b0388166000908152606690935291205490915081146129ca5760405162461bcd60e51b8152602060048201526042602482015260008051602061548e83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a40161095b565b6129d5600188614f7d565b8303612a6c57426206978083604001516129ef9190614df2565b6001600160401b03161115612a6c5760405162461bcd60e51b8152602060048201526049602482015260008051602061548e83398151915260448201527f65733a20466f72636564206261746368206973206e6f7420696e2074696d656f6064820152681d5d081c195c9a5bd960ba1b608482015260a40161095b565b8151805160209182012081840151604051612a8f93889392914291339101614efd565b6040516020818303038152906040528051906020012093508580612ab290614e9b565b96505050508080612ac290614f3c565b9150506128cd565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b0319909216919091179286168502929092179091558554600160401b600160c01b03191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612bd55760405162461bcd60e51b815260040161095b90615163565b6073546001600160a01b03163314612bff5760405162461bcd60e51b815260040161095b90614d99565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612c4f57600080fd5b505af1158015612c63573d6000803e3d6000fd5b505050506120176142a6565b606a546001600160a01b03163314612c995760405162461bcd60e51b815260040161095b906151c0565b612caa898989898989898989613c70565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612cf557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612d3b57600080fd5b505af1158015612d4f573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612dd75760405162461bcd60e51b815260040161095b90614e1d565b606c54600160a01b900460ff161515600114612e055760405162461bcd60e51b815260040161095b906150e2565b6000612e1060745490565b905081811115612e755760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a204e6f7420656e6044820152696f756768206d6174696360b01b606482015260840161095b565b620493e0835110612ee65760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b606482015260840161095b565b606554612f0590600160581b90046001600160a01b03163330846132e8565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015612f4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f739190614ee4565b60688054919250600160c01b9091046001600160401b0316906018612f9783614e9b565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505083805190602001208142604051602001612fd893929190614ec1565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361307c57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26130d7565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516130ce9392919061521d565b60405180910390a25b50505050565b606a546001600160a01b031633146131075760405162461bcd60e51b815260040161095b906151c0565b61311788888888888888886133f7565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561316257607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156131a857600080fd5b505af11580156131bc573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce7906020016118fd565b6073546001600160a01b031633146132275760405162461bcd60e51b815260040161095b90614d99565b606a80546001600160a01b0319166001600160a01b0383161790556040517f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90610a509083906146ee565b61327a613b54565b6001600160a01b0381166132df5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161095b565b61222081613bae565b6040516001600160a01b03808516602483015283166044820152606481018290526130d79085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526142fd565b6072546001600160401b03600160401b82048116911611156120175760725460009061339090600160401b90046001600160401b03166001614df2565b905061339b81610bfc565b15612220576072546000906002906133bd9084906001600160401b0316614f55565b6133c79190615250565b6133d19083614df2565b90506133dc81610bfc565b156133ee576133ea8161190f565b5050565b6133ea8261190f565b6000806134026125bf565b90506001600160401b038a1615613568576072546001600160401b03908116908b1611156134ba5760405162461bcd60e51b815260206004820152605960248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20706560448201527f6e64696e6753746174654e756d206d757374206265206c657373206f7220657160648201527875616c207468616e206c61737450656e64696e67537461746560381b608482015260a40161095b565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b90920416146135625760405162461bcd60e51b815260206004820152604d602482015260008051602061544e83398151915260448201527f69744e756d4261746368206d757374206d61746368207468652070656e64696e60648201526c0ce40e6e8c2e8ca40c4c2e8c6d609b1b608482015260a40161095b565b5061368e565b6001600160401b0389166000908152606d60205260409020549150816135f25760405162461bcd60e51b81526020600482015260446024820181905260008051602061544e833981519152908201527f69744e756d426174636820737461746520726f6f7420646f6573206e6f7420656064820152631e1a5cdd60e21b608482015260a40161095b565b806001600160401b0316896001600160401b0316111561368e5760405162461bcd60e51b815260206004820152605e602482015260008051602061544e83398151915260448201527f69744e756d4261746368206d757374206265206c657373206f7220657175616c60648201527f207468616e2063757272656e744c617374566572696669656442617463680000608482015260a40161095b565b806001600160401b0316886001600160401b0316116137365760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20666960448201527f6e616c4e65774261746368206d75737420626520626967676572207468616e206064820152770c6eae4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d60431b608482015260a40161095b565b60006137458a8a8a868b610a5b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161377a9190615276565b602060405180830381855afa158015613797573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906137ba9190614ee4565b6137c49190615292565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613808918b918b918b91906004016152a6565b602060405180830381865afa158015613825573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138499190615320565b6138a95760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20496e60448201526a3b30b634b210383937b7b360a91b606482015260840161095b565b6138ec336138b7858d614f55565b6001600160401b03166138c8612329565b6138d29190614f94565b606554600160581b90046001600160a01b031691906143d4565b505050505050505050505050565b60006139046125bf565b9050816000806139148484614f55565b6001600160401b031690505b836001600160401b0316836001600160401b0316146139c6576001600160401b03808416600090815260676020526040902060655460018201549192610100909104811691613970911642614f7d565b11156139ab57600181015461399590600160401b90046001600160401b031685614f55565b6139a8906001600160401b03168461514b565b92505b60010154600160401b90046001600160401b03169250613920565b60006139d28383614f7d565b905082811015613a4c5760006139e88285614f7d565b9050600c81116139f857806139fb565b600c5b9050613a08816003614f94565b613a1390600a615421565b606554613a2c908390600160481b900461ffff16615421565b607454613a399190614f94565b613a4391906150ce565b60745550613ad8565b6000613a588483614f7d565b9050600c8111613a685780613a6b565b600c5b90506000613a7a826003614f94565b613a8590600a615421565b606554613a9e908490600160481b900461ffff16615421565b607454613aab9190614f94565b613ab591906150ce565b905080607454607454613ac89190614f94565b613ad291906150ce565b60745550505b505050505050565b600054610100900460ff16613b4b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161095b565b61201733613bae565b6033546001600160a01b031633146120175760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095b565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613c5057600080fd5b505af1158015613c64573d6000803e3d6000fd5b50505050612017614404565b60006001600160401b038a1615613de0576072546001600160401b03908116908b161115613d285760405162461bcd60e51b8152602060048201526065602482015260008051602061546e83398151915260448201527f696e6753746174653a2070656e64696e6753746174654e756d206d757374206260648201527f65206c657373206f7220657175616c207468616e206c61737450656e64696e67608482015264537461746560d81b60a482015260c40161095b565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613dda5760405162461bcd60e51b8152602060048201526059602482015260008051602061546e83398151915260448201527f696e6753746174653a20696e69744e756d4261746368206d757374206d6174636064820152780d040e8d0ca40e0cadcc8d2dcce40e6e8c2e8ca40c4c2e8c6d603b1b608482015260a40161095b565b50613f19565b506001600160401b0387166000908152606d602052604090205480613e745760405162461bcd60e51b8152602060048201526050602482015260008051602061546e83398151915260448201527f696e6753746174653a20696e69744e756d426174636820737461746520726f6f60648201526f1d08191bd95cc81b9bdd08195e1a5cdd60821b608482015260a40161095b565b6069546001600160401b039081169089161115613f195760405162461bcd60e51b8152602060048201526063602482015260008051602061546e83398151915260448201527f696e6753746174653a20696e69744e756d4261746368206d757374206265206c60648201527f657373206f7220657175616c207468616e206c617374566572696669656442616084820152620e8c6d60eb1b60a482015260c40161095b565b6072546001600160401b03908116908a1611801590613f495750896001600160401b0316896001600160401b0316115b8015613f6a57506072546001600160401b03600160401b9091048116908a16115b613fdb5760405162461bcd60e51b8152602060048201526048602482015260008051602061546e83398151915260448201527f696e6753746174653a2066696e616c50656e64696e6753746174654e756d20696064820152671b98dbdc9c9958dd60c21b608482015260a40161095b565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146140945760405162461bcd60e51b8152602060048201526063602482015260008051602061546e83398151915260448201527f696e6753746174653a2066696e616c4e65774261746368206d7573742062652060648201527f657175616c207468616e2063757272656e744c617374566572696669656442616084820152620e8c6d60eb1b60a482015260c40161095b565b60006140a3898989858a610a5b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516140d89190615276565b602060405180830381855afa1580156140f5573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906141189190614ee4565b6141229190615292565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614166918a918a918a91906004016152a6565b602060405180830381865afa158015614183573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141a79190615320565b6142015760405162461bcd60e51b8152602060048201526037602482015260008051602061546e83398151915260448201527634b733a9ba30ba329d1024b73b30b634b210383937b7b360491b606482015260840161095b565b6001600160401b038b166000908152607160205260409020600201548790036138ec5760405162461bcd60e51b815260206004820152605b602482015260008051602061546e83398151915260448201527f696e6753746174653a2053746f72656420726f6f74206d75737420626520646960648201527f66666572656e74207468616e206e657720737461746520726f6f740000000000608482015260a40161095b565b60655460ff166142c85760405162461bcd60e51b815260040161095b90615163565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614352826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661445f9092919063ffffffff16565b8051909150156143cf57808060200190518101906143709190615320565b6143cf5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161095b565b505050565b6040516001600160a01b0383166024820152604481018290526143cf90849063a9059cbb60e01b9060640161331c565b60655460ff16156144275760405162461bcd60e51b815260040161095b90614e1d565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b606061446e8484600085614476565b949350505050565b6060824710156144d75760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161095b565b600080866001600160a01b031685876040516144f39190615276565b60006040518083038185875af1925050503d8060008114614530576040519150601f19603f3d011682016040523d82523d6000602084013e614535565b606091505b509150915061454687838387614551565b979650505050505050565b606083156145c05782516000036145b9576001600160a01b0385163b6145b95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161095b565b508161446e565b61446e83838151156145d55781518083602001fd5b8060405162461bcd60e51b815260040161095b9190614647565b60005b8381101561460a5781810151838201526020016145f2565b838111156130d75750506000910152565b600081518084526146338160208601602086016145ef565b601f01601f19169290920160200192915050565b60208152600061465a602083018461461b565b9392505050565b60006020828403121561467357600080fd5b813561ffff8116811461465a57600080fd5b80356001600160401b038116811461469c57600080fd5b919050565b600080600080600060a086880312156146b957600080fd5b6146c286614685565b94506146d060208701614685565b94979496505050506040830135926060810135926080909101359150565b6001600160a01b0391909116815260200190565b60006020828403121561471457600080fd5b61465a82614685565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156147555761475561471d565b60405290565b604051606081016001600160401b03811182821017156147555761475561471d565b604051601f8201601f191681016001600160401b03811182821017156147a5576147a561471d565b604052919050565b60006001600160401b038211156147c6576147c661471d565b5060051b60200190565b600082601f8301126147e157600080fd5b81356001600160401b038111156147fa576147fa61471d565b61480d601f8201601f191660200161477d565b81815284602083860101111561482257600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561485257600080fd5b82356001600160401b038082111561486957600080fd5b818501915085601f83011261487d57600080fd5b813561489061488b826147ad565b61477d565b81815260059190911b830184019084810190888311156148af57600080fd5b8585015b83811015614948578035858111156148cb5760008081fd5b86016080818c03601f19018113156148e35760008081fd5b6148eb614733565b89830135888111156148fd5760008081fd5b61490b8e8c838701016147d0565b8252506040808401358b8301526060614925818601614685565b82840152614934848601614685565b9083015250855250509186019186016148b3565b5098975050505050505050565b806040810183101561496657600080fd5b92915050565b806080810183101561496657600080fd5b6000806000806000806000806101a0898b03121561499a57600080fd5b6149a389614685565b97506149b160208a01614685565b96506149bf60408a01614685565b955060608901359450608089013593506149dc8a60a08b01614955565b92506149eb8a60e08b0161496c565b91506149fb8a6101608b01614955565b90509295985092959890939650565b6001600160a01b038116811461222057600080fd5b600080600080600080600080888a036101c0811215614a3d57600080fd5b8935614a4881614a0a565b985060208a0135614a5881614a0a565b975060408a0135614a6881614a0a565b965060608a0135614a7881614a0a565b955060e0607f1982011215614a8c57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614ab657600080fd5b614ac28c838d016147d0565b93506101a08b0135915080821115614ad957600080fd5b50614ae68b828c016147d0565b9150509295985092959890939650565b600060208284031215614b0857600080fd5b813561465a81614a0a565b60008060008060008060008060006101c08a8c031215614b3257600080fd5b614b3b8a614685565b9850614b4960208b01614685565b9750614b5760408b01614685565b9650614b6560608b01614685565b955060808a0135945060a08a01359350614b828b60c08c01614955565b9250614b928b6101008c0161496c565b9150614ba28b6101808c01614955565b90509295985092959850929598565b600060208284031215614bc357600080fd5b5035919050565b801515811461222057600080fd5b600060208284031215614bea57600080fd5b813561465a81614bca565b600060208284031215614c0757600080fd5b81356001600160401b03811115614c1d57600080fd5b61446e848285016147d0565b60006020808385031215614c3c57600080fd5b82356001600160401b0380821115614c5357600080fd5b818501915085601f830112614c6757600080fd5b8135614c7561488b826147ad565b81815260059190911b83018401908481019088831115614c9457600080fd5b8585015b8381101561494857803585811115614cb05760008081fd5b86016060818c03601f1901811315614cc85760008081fd5b614cd061475b565b8983013588811115614ce25760008081fd5b614cf08e8c838701016147d0565b8252506040808401358b830152614d08838501614685565b9082015285525050918601918601614c98565b60008060408385031215614d2e57600080fd5b82356001600160401b03811115614d4457600080fd5b614d50858286016147d0565b95602094909401359450505050565b600181811c90821680614d7357607f821691505b602082108103614d9357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a204f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614e1457614e14614ddc565b01949350505050565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b03808316818103614eb757614eb7614ddc565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b600060208284031215614ef657600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6001600160601b0319166068820152607c0190565b600060018201614f4e57614f4e614ddc565b5060010190565b60006001600160401b0383811690831681811015614f7557614f75614ddc565b039392505050565b600082821015614f8f57614f8f614ddc565b500390565b6000816000190483118215151615614fae57614fae614ddc565b500290565b601f8211156143cf57600081815260208120601f850160051c81016020861015614fda5750805b601f850160051c820191505b81811015613ad857828155600101614fe6565b81516001600160401b038111156150125761501261471d565b615026816150208454614d5f565b84614fb3565b602080601f83116001811461505b57600084156150435750858301515b600019600386901b1c1916600185901b178555613ad8565b600085815260208120601f198616915b8281101561508a5788860151825594840194600190910190840161506b565b50858210156150a85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b6000826150dd576150dd6150b8565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a204f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b6000821982111561515e5761515e614ddc565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a204f6e6c7920747275737465642061676772656761746f7200000000606082015260800190565b8381526001600160a01b03831660208201526060604082018190526000906152479083018461461b565b95945050505050565b60006001600160401b038084168061526a5761526a6150b8565b92169190910492915050565b600082516152888184602087016145ef565b9190910192915050565b6000826152a1576152a16150b8565b500690565b61012081016040808784376000838201818152879190815b60028110156152de578484833790840182815292840192906001016152be565b5050828760c0870137610100850181815286935091505b60018110156153145782518252602092830192909101906001016152f5565b50505095945050505050565b60006020828403121561533257600080fd5b815161465a81614bca565b600181815b8085111561537857816000190482111561535e5761535e614ddc565b8085161561536b57918102915b93841c9390800290615342565b509250929050565b60008261538f57506001614966565b8161539c57506000614966565b81600181146153b257600281146153bc576153d8565b6001915050614966565b60ff8411156153cd576153cd614ddc565b50506001821b614966565b5060208310610133831016604e8410600b84101617156153fb575081810a614966565b615405838361533d565b806000190482111561541957615419614ddc565b029392505050565b600061465a838361538056fe506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e637953506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20696e506f6c79676f6e5a6b45564d3a3a5f70726f766544697374696e637450656e64506f6c79676f6e5a6b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a2046a26469706673582212204a13b041896f72f2de202018d2be9bf682fff57506a937c10e31c8e04afa5d2f64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZkEVMBridge.json b/compiled-contracts/PolygonZkEVMBridge.json index d0a8b08b1..13fa34883 100644 --- a/compiled-contracts/PolygonZkEVMBridge.json +++ b/compiled-contracts/PolygonZkEVMBridge.json @@ -699,8 +699,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506147f0806100206000396000f3fe608060405260043610620001675760003560e01c80637b6323c111620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b80637b6323c1146200037057806381b1c17414620003955780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b806334ac9cf2116200011e57806334ac9cf214620002a25780633ae0504714620002c45780633da8168214620002dc5780633e1970431462000301578063463855491462000326578063647c576c146200034b57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d3660046200244d565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009cd565b348015620001db57600080fd5b50620001f3620001ed366004620024da565b62000a06565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002516565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b50602754620001f3906001600160a01b031681565b348015620002d157600080fd5b506200022462000a59565b348015620002e957600080fd5b50620001a1620002fb36600462002605565b62000b4c565b3480156200030e57600080fd5b50620002246200032036600462002683565b62000c4e565b3480156200033357600080fd5b50620001836200034536600462002794565b62000cdb565b3480156200035857600080fd5b50620001836200036a3660046200287b565b62000e81565b3480156200037d57600080fd5b50620001836200038f36600462002794565b62000fe0565b348015620003a257600080fd5b50620001f3620003b4366004620028cb565b6024602052600090815260409020546001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028cb565b62001469565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d366004620028e5565b620014ae565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b036600462002999565b620015c5565b348015620004c357600080fd5b506200018362001771565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028cb565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a01565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044657374696e6174696f6e2063616e6e6f7420626520697473656c66000000606482015260840162000553565b60008060606001600160a01b03891662000687578534146200067d5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a908201527f20416d6f756e7420646f6573206e6f74206d61746368206d6573736167652e76606482015263616c756560e01b608482015260a40162000553565b60009150620008e7565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074457604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac90604401600060405180830381600087803b1580156200071757600080fd5b505af11580156200072c573d6000803e3d6000fd5b505050508060200151935080600001519250620008e5565b84156200075957620007598a888888620017a8565b620007706001600160a01b038b1633308a62001bd0565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f1919081019062002ae4565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000830573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085a919081019062002ae4565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000899573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008bf919062002b1d565b604051602001620008d39392919062002b6b565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092998979695949392919062002ba8565b60405180910390a1620009546200094e600084868c8c8c888051906020012062000c4e565b62001c3d565b6026546001600160a01b03166333d6247d6200096f62000a59565b6040518263ffffffff1660e01b81526004016200098e91815260200190565b600060405180830381600087803b158015620009a957600080fd5b505af1158015620009be573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009fa5760405162461bcd60e51b8152600401620005539062002c15565b62000a0462001d8e565b565b600060246000848460405160200162000a2192919062002c72565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b43578260011660010362000ac4576001816020811062000a905762000a9062002c9c565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af1565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000afe60028462002cde565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3a9062002cf5565b91505062000a64565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c3f578160011660010362000bc95786818151811062000b875762000b8762002c9c565b60200260200101518360405160200162000bab929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c1b565b8287828151811062000bdf5762000bdf62002c9c565b602002602001015160405160200162000c02929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2860028362002cde565b91508062000c368162002cf5565b91505062000b5c565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d015760405162461bcd60e51b8152600401620005539062002a01565b62000d178a8a8a8a8a8a8a8a8a8a600162001dec565b62000d288963ffffffff166200207d565b6000836001600160a01b03168387898560405160240162000d4c9392919062002d11565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d83919062002d4c565b60006040518083038185875af1925050503d806000811462000dc2576040519150601f19603f3d011682016040523d82523d6000602084013e62000dc7565b606091505b505090508062000e335760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e8813595cdcd859d94819985a5b195960821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e6c95949392919062002d6a565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea25750600054600160ff909116105b8062000ebe5750303b15801562000ebe575060005460ff166001145b62000f235760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f47576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fda576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff1615620010065760405162461bcd60e51b8152600401620005539062002a01565b6200101c8a8a8a8a8a8a8a8a8a8a600062001dec565b6200102d8963ffffffff166200207d565b6001600160a01b0385166200112457604080516000808252602082019092526001600160a01b03851690849060405162001068919062002d4c565b60006040518083038185875af1925050503d8060008114620010a7576040519150601f19603f3d011682016040523d82523d6000602084013e620010ac565b606091505b50509050806200111d5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a20604482015274115d1a195c881d1c985b9cd9995c8819985a5b1959605a1b606482015260840162000553565b506200141c565b60225463ffffffff6101009091048116908716036200115957620011536001600160a01b0386168484620020bf565b6200141c565b600086866040516020016200117092919062002c72565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013b457600080600085806020019051810190620011c2919062002da1565b925092509250600085848484604051620011dc90620023b3565b620011ea9392919062002b6b565b8190604051809103906000f59050801580156200120b573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f1990604401600060405180830381600087803b1580156200125b57600080fd5b505af115801562001270573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013a29392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001419565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f1990604401600060405180830381600087803b158015620013ff57600080fd5b505af115801562001414573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200145595949392919062002d6a565b60405180910390a150505050505050505050565b6000806200147a6101008462002cde565b905060006200148c6101008562002e17565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014c692919062002c72565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014f990620023b3565b601f1982820381018352601f90910116604081905262001526908d908d908d908d908d9060200162002e57565b60408051601f198184030181529082905262001546929160200162002e98565b604051602081830303815290604052805190602001206040516020016200159f94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015eb5760405162461bcd60e51b8152600401620005539062002a01565b60225463ffffffff610100909104811690841603620016735760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044657374696e6174696f6e2063616e6e6f7420626520697473656c6600606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016c798979695949392919062002ba8565b60405180910390a1620016fe6200094e6001602260019054906101000a900463ffffffff1633878734888051906020012062000c4e565b6026546001600160a01b03166333d6247d6200171962000a59565b6040518263ffffffff1660e01b81526004016200173891815260200190565b600060405180830381600087803b1580156200175357600080fd5b505af115801562001768573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b031633146200179e5760405162461bcd60e51b8152600401620005539062002c15565b62000a04620020f1565b6000620017eb83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021a092505050565b9050632afa533160e01b6001600160e01b0319821601620019e45760008080808080806200181d896004818d62002ecb565b8101906200182c919062002ef7565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200186e5760405162461bcd60e51b8152600401620005539062002f52565b6001600160a01b0386163014620018995760405162461bcd60e51b8152600401620005539062002faf565b8a8514620019105760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260448201527f6d697420616d6f756e7420646f6573206e6f74206d6174636800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162001990919062002d4c565b6000604051808303816000865af19150503d8060008114620019cf576040519150601f19603f3d011682016040523d82523d6000602084013e620019d4565b606091505b5050505050505050505062001bc9565b6001600160e01b031981166323f2ebc360e21b1462001a5a5760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e6f7460448201526a081d985b1a590818d85b1b60aa1b606482015260840162000553565b60008080808080808062001a728a6004818e62002ecb565b81019062001a81919062003011565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001ac55760405162461bcd60e51b8152600401620005539062002f52565b6001600160a01b038716301462001af05760405162461bcd60e51b8152600401620005539062002faf565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001b79919062002d4c565b6000604051808303816000865af19150503d806000811462001bb8576040519150601f19603f3d011682016040523d82523d6000602084013e62001bbd565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fda9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021a7565b80600162001c4e602060026200319a565b62001c5a9190620031a8565b6021541062001cbf5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d65726b6c65604482015269081d1c995948199d5b1b60b21b606482015260840162000553565b60016021600082825462001cd49190620031c2565b909155505060215460005b602081101562001d7e578160011660010362001d1457826001826020811062001d0c5762001d0c62002c9c565b015550505050565b6001816020811062001d2a5762001d2a62002c9c565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d67919062002cde565b91508062001d758162002cf5565b91505062001cdf565b5062001d89620031dd565b505050565b60225460ff161562001db45760405162461bcd60e51b8152600401620005539062002a01565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001dfd8a63ffffffff1662001469565b1562001e545760405162461bcd60e51b815260206004820152603060248201526000805160206200479b83398151915260448201526f08105b1c9958591e4818db185a5b595960821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ec8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001eee9190620031f3565b90508060000362001f575760405162461bcd60e51b815260206004820152603760248201526000805160206200479b83398151915260448201527f20476c6f62616c45786974526f6f7420696e76616c6964000000000000000000606482015260840162000553565b60225463ffffffff878116610100909204161462001fd95760405162461bcd60e51b815260206004820152604360248201526000805160206200479b83398151915260448201527f2044657374696e6174696f6e206e6574776f726b20646f6573206e6f74206d616064820152620e8c6d60eb1b608482015260a40162000553565b602254600090610100900463ffffffff1662001ff757508862001ffa565b50895b6200202562002016848b8b8b8b8b8b8051906020012062000c4e565b8e8e63ffffffff168462000b4c565b620009be5760405162461bcd60e51b815260206004820152603260248201526000805160206200479b8339815191526044820152711024b73b30b634b21039b6ba10383937b7b360711b606482015260840162000553565b60006200208d6101008362002cde565b905060006200209f6101008462002e17565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001d8990849063a9059cbb60e01b9060640162001c05565b60225460ff166200216b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b6000620021fe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022809092919063ffffffff16565b80519091501562001d8957808060200190518101906200221f91906200320d565b62001d895760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c46848460008585600080866001600160a01b03168587604051620022aa919062002d4c565b60006040518083038185875af1925050503d8060008114620022e9576040519150601f19603f3d011682016040523d82523d6000602084013e620022ee565b606091505b509150915062002301878383876200230c565b979650505050505050565b606083156200238057825160000362002378576001600160a01b0385163b620023785760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c46565b62000c468383815115620023975781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200322d565b611558806200324383390190565b6001600160a01b0381168114620023d757600080fd5b50565b8035620023e781620023c1565b919050565b803563ffffffff81168114620023e757600080fd5b60008083601f8401126200241457600080fd5b50813567ffffffffffffffff8111156200242d57600080fd5b6020830191508360208285010111156200244657600080fd5b9250929050565b60008060008060008060a087890312156200246757600080fd5b86356200247481620023c1565b95506200248460208801620023ec565b945060408701356200249681620023c1565b935060608701359250608087013567ffffffffffffffff811115620024ba57600080fd5b620024c889828a0162002401565b979a9699509497509295939492505050565b60008060408385031215620024ee57600080fd5b620024f983620023ec565b915060208301356200250b81620023c1565b809150509250929050565b6000602082840312156200252957600080fd5b81356200253681620023c1565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200257f576200257f6200253d565b604052919050565b600082601f8301126200259957600080fd5b8135602067ffffffffffffffff821115620025b857620025b86200253d565b8160051b620025c982820162002553565b9283528481018201928281019087851115620025e457600080fd5b83870192505b848310156200230157823582529183019190830190620025ea565b600080600080608085870312156200261c57600080fd5b84359350602085013567ffffffffffffffff808211156200263c57600080fd5b6200264a8883890162002587565b94506040870135915080821682146200266257600080fd5b509396929550929360600135925050565b60ff81168114620023d757600080fd5b600080600080600080600060e0888a0312156200269f57600080fd5b8735620026ac8162002673565b9650620026bc60208901620023ec565b95506040880135620026ce81620023c1565b9450620026de60608901620023ec565b93506080880135620026f081620023c1565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200272a576200272a6200253d565b50601f01601f191660200190565b600082601f8301126200274a57600080fd5b8135620027616200275b826200270d565b62002553565b8181528460208386010111156200277757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027b557600080fd5b8a3567ffffffffffffffff80821115620027ce57600080fd5b620027dc8e838f0162002587565b9b50620027ec60208e01620023ec565b9a5060408d0135995060608d013598506200280a60808e01620023ec565b97506200281a60a08e01620023da565b96506200282a60c08e01620023ec565b95506200283a60e08e01620023da565b94506101008d013593506101208d01359150808211156200285a57600080fd5b50620028698d828e0162002738565b9150509295989b9194979a5092959850565b6000806000606084860312156200289157600080fd5b6200289c84620023ec565b92506020840135620028ae81620023c1565b91506040840135620028c081620023c1565b809150509250925092565b600060208284031215620028de57600080fd5b5035919050565b600080600080600080600060a0888a0312156200290157600080fd5b6200290c88620023ec565b965060208801356200291e81620023c1565b9550604088013567ffffffffffffffff808211156200293c57600080fd5b6200294a8b838c0162002401565b909750955060608a01359150808211156200296457600080fd5b50620029738a828b0162002401565b9094509250506080880135620029898162002673565b8091505092959891949750929550565b600080600060608486031215620029af57600080fd5b620029ba84620023ec565b92506020840135620029cc81620023c1565b9150604084013567ffffffffffffffff811115620029e957600080fd5b620029f78682870162002738565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002a8657818101518382015260200162002a6c565b8381111562000fda5750506000910152565b600082601f83011262002aaa57600080fd5b815162002abb6200275b826200270d565b81815284602083860101111562002ad157600080fd5b62000c4682602083016020870162002a69565b60006020828403121562002af757600080fd5b815167ffffffffffffffff81111562002b0f57600080fd5b62000c468482850162002a98565b60006020828403121562002b3057600080fd5b8151620025368162002673565b6000815180845262002b5781602086016020860162002a69565b601f01601f19169290920160200192915050565b60608152600062002b80606083018662002b3d565b828103602084015262002b94818662002b3d565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002bfc8483018762002b3d565b925080851660e085015250509998505050505050505050565b6020808252603a908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e5a6b45564d20636f6e7472616374000000000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002cf05762002cf062002cb2565b500490565b60006001820162002d0a5762002d0a62002cc8565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d439083018462002b3d565b95945050505050565b6000825162002d6081846020870162002a69565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002db757600080fd5b835167ffffffffffffffff8082111562002dd057600080fd5b62002dde8783880162002a98565b9450602086015191508082111562002df557600080fd5b5062002e048682870162002a98565b9250506040840151620028c08162002673565b60008262002e295762002e2962002cb2565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e6d60608301878962002e2e565b828103602084015262002e8281868862002e2e565b91505060ff831660408301529695505050505050565b6000835162002eac81846020880162002a69565b83519083019062002ec281836020880162002a69565b01949350505050565b6000808585111562002edc57600080fd5b8386111562002eea57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f1357600080fd5b873562002f2081620023c1565b9650602088013562002f3281620023c1565b955060408801359450606088013593506080880135620026f08162002673565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260408201527f6d6974206f776e6572206d757374206265207468652073656e64657200000000606082015260800190565b60208082526033908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205370656040820152726e646572206d7573742062652027746869732760681b606082015260800190565b8015158114620023d757600080fd5b600080600080600080600080610100898b0312156200302f57600080fd5b88356200303c81620023c1565b975060208901356200304e81620023c1565b9650604089013595506060890135945060808901356200306e8162003002565b935060a0890135620030808162002673565b979a969950949793969295929450505060c08201359160e0013590565b600181815b80851115620030de578160001904821115620030c257620030c262002cc8565b80851615620030d057918102915b93841c9390800290620030a2565b509250929050565b600082620030f75750600162000a53565b81620031065750600062000a53565b81600181146200311f57600281146200312a576200314a565b600191505062000a53565b60ff8411156200313e576200313e62002cc8565b50506001821b62000a53565b5060208310610133831016604e8410600b84101617156200316f575081810a62000a53565b6200317b83836200309d565b806000190482111562003192576200319262002cc8565b029392505050565b6000620025368383620030e6565b600082821015620031bd57620031bd62002cc8565b500390565b60008219821115620031d857620031d862002cc8565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200320657600080fd5b5051919050565b6000602082840312156200322057600080fd5b8151620025368162003002565b60208152600062002536602083018462002b3d56fe60c06040523480156200001157600080fd5b5060405162001558380380620015588339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109e620004ba60003960006104690152600081816102f90152610433015261109e6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866106638361104f565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161106157611061610fd1565b506001019056fea26469706673582212205af0e6dd4760d4ae367515578b46c4d5988b10ae47473e817626188baa0c03a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220d45a8ebcef9fc50cf59227d05e3d4a6aa8384293f92bcc21bc9ac4198225157364736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001675760003560e01c80637b6323c111620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b80637b6323c1146200037057806381b1c17414620003955780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b806334ac9cf2116200011e57806334ac9cf214620002a25780633ae0504714620002c45780633da8168214620002dc5780633e1970431462000301578063463855491462000326578063647c576c146200034b57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d3660046200244d565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009cd565b348015620001db57600080fd5b50620001f3620001ed366004620024da565b62000a06565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d6200025236600462002516565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b50602754620001f3906001600160a01b031681565b348015620002d157600080fd5b506200022462000a59565b348015620002e957600080fd5b50620001a1620002fb36600462002605565b62000b4c565b3480156200030e57600080fd5b50620002246200032036600462002683565b62000c4e565b3480156200033357600080fd5b50620001836200034536600462002794565b62000cdb565b3480156200035857600080fd5b50620001836200036a3660046200287b565b62000e81565b3480156200037d57600080fd5b50620001836200038f36600462002794565b62000fe0565b348015620003a257600080fd5b50620001f3620003b4366004620028cb565b6024602052600090815260409020546001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028cb565b62001469565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d366004620028e5565b620014ae565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b036600462002999565b620015c5565b348015620004c357600080fd5b506200018362001771565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028cb565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b8152600401620005539062002a01565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044657374696e6174696f6e2063616e6e6f7420626520697473656c66000000606482015260840162000553565b60008060606001600160a01b03891662000687578534146200067d5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a908201527f20416d6f756e7420646f6573206e6f74206d61746368206d6573736167652e76606482015263616c756560e01b608482015260a40162000553565b60009150620008e7565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074457604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac90604401600060405180830381600087803b1580156200071757600080fd5b505af11580156200072c573d6000803e3d6000fd5b505050508060200151935080600001519250620008e5565b84156200075957620007598a888888620017a8565b620007706001600160a01b038b1633308a62001bd0565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f1919081019062002ae4565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000830573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085a919081019062002ae4565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000899573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008bf919062002b1d565b604051602001620008d39392919062002b6b565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092998979695949392919062002ba8565b60405180910390a1620009546200094e600084868c8c8c888051906020012062000c4e565b62001c3d565b6026546001600160a01b03166333d6247d6200096f62000a59565b6040518263ffffffff1660e01b81526004016200098e91815260200190565b600060405180830381600087803b158015620009a957600080fd5b505af1158015620009be573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009fa5760405162461bcd60e51b8152600401620005539062002c15565b62000a0462001d8e565b565b600060246000848460405160200162000a2192919062002c72565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b43578260011660010362000ac4576001816020811062000a905762000a9062002c9c565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af1565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000afe60028462002cde565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3a9062002cf5565b91505062000a64565b50919392505050565b60008467ffffffffffffffff8416825b602081101562000c3f578160011660010362000bc95786818151811062000b875762000b8762002c9c565b60200260200101518360405160200162000bab929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c1b565b8287828151811062000bdf5762000bdf62002c9c565b602002602001015160405160200162000c02929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2860028362002cde565b91508062000c368162002cf5565b91505062000b5c565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d015760405162461bcd60e51b8152600401620005539062002a01565b62000d178a8a8a8a8a8a8a8a8a8a600162001dec565b62000d288963ffffffff166200207d565b6000836001600160a01b03168387898560405160240162000d4c9392919062002d11565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d83919062002d4c565b60006040518083038185875af1925050503d806000811462000dc2576040519150601f19603f3d011682016040523d82523d6000602084013e62000dc7565b606091505b505090508062000e335760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e8813595cdcd859d94819985a5b195960821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e6c95949392919062002d6a565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea25750600054600160ff909116105b8062000ebe5750303b15801562000ebe575060005460ff166001145b62000f235760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f47576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fda576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff1615620010065760405162461bcd60e51b8152600401620005539062002a01565b6200101c8a8a8a8a8a8a8a8a8a8a600062001dec565b6200102d8963ffffffff166200207d565b6001600160a01b0385166200112457604080516000808252602082019092526001600160a01b03851690849060405162001068919062002d4c565b60006040518083038185875af1925050503d8060008114620010a7576040519150601f19603f3d011682016040523d82523d6000602084013e620010ac565b606091505b50509050806200111d5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a20604482015274115d1a195c881d1c985b9cd9995c8819985a5b1959605a1b606482015260840162000553565b506200141c565b60225463ffffffff6101009091048116908716036200115957620011536001600160a01b0386168484620020bf565b6200141c565b600086866040516020016200117092919062002c72565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013b457600080600085806020019051810190620011c2919062002da1565b925092509250600085848484604051620011dc90620023b3565b620011ea9392919062002b6b565b8190604051809103906000f59050801580156200120b573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f1990604401600060405180830381600087803b1580156200125b57600080fd5b505af115801562001270573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013a29392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001419565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f1990604401600060405180830381600087803b158015620013ff57600080fd5b505af115801562001414573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200145595949392919062002d6a565b60405180910390a150505050505050505050565b6000806200147a6101008462002cde565b905060006200148c6101008562002e17565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014c692919062002c72565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014f990620023b3565b601f1982820381018352601f90910116604081905262001526908d908d908d908d908d9060200162002e57565b60408051601f198184030181529082905262001546929160200162002e98565b604051602081830303815290604052805190602001206040516020016200159f94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015eb5760405162461bcd60e51b8152600401620005539062002a01565b60225463ffffffff610100909104811690841603620016735760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044657374696e6174696f6e2063616e6e6f7420626520697473656c6600606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016c798979695949392919062002ba8565b60405180910390a1620016fe6200094e6001602260019054906101000a900463ffffffff1633878734888051906020012062000c4e565b6026546001600160a01b03166333d6247d6200171962000a59565b6040518263ffffffff1660e01b81526004016200173891815260200190565b600060405180830381600087803b1580156200175357600080fd5b505af115801562001768573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b031633146200179e5760405162461bcd60e51b8152600401620005539062002c15565b62000a04620020f1565b6000620017eb83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620021a092505050565b9050632afa533160e01b6001600160e01b0319821601620019e45760008080808080806200181d896004818d62002ecb565b8101906200182c919062002ef7565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200186e5760405162461bcd60e51b8152600401620005539062002f52565b6001600160a01b0386163014620018995760405162461bcd60e51b8152600401620005539062002faf565b8a8514620019105760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260448201527f6d697420616d6f756e7420646f6573206e6f74206d6174636800000000000000606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162001990919062002d4c565b6000604051808303816000865af19150503d8060008114620019cf576040519150601f19603f3d011682016040523d82523d6000602084013e620019d4565b606091505b5050505050505050505062001bc9565b6001600160e01b031981166323f2ebc360e21b1462001a5a5760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e6f7460448201526a081d985b1a590818d85b1b60aa1b606482015260840162000553565b60008080808080808062001a728a6004818e62002ecb565b81019062001a81919062003011565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001ac55760405162461bcd60e51b8152600401620005539062002f52565b6001600160a01b038716301462001af05760405162461bcd60e51b8152600401620005539062002faf565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001b79919062002d4c565b6000604051808303816000865af19150503d806000811462001bb8576040519150601f19603f3d011682016040523d82523d6000602084013e62001bbd565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fda9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152620021a7565b80600162001c4e602060026200319a565b62001c5a9190620031a8565b6021541062001cbf5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d65726b6c65604482015269081d1c995948199d5b1b60b21b606482015260840162000553565b60016021600082825462001cd49190620031c2565b909155505060215460005b602081101562001d7e578160011660010362001d1457826001826020811062001d0c5762001d0c62002c9c565b015550505050565b6001816020811062001d2a5762001d2a62002c9c565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d67919062002cde565b91508062001d758162002cf5565b91505062001cdf565b5062001d89620031dd565b505050565b60225460ff161562001db45760405162461bcd60e51b8152600401620005539062002a01565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001dfd8a63ffffffff1662001469565b1562001e545760405162461bcd60e51b815260206004820152603060248201526000805160206200479b83398151915260448201526f08105b1c9958591e4818db185a5b595960821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ec8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001eee9190620031f3565b90508060000362001f575760405162461bcd60e51b815260206004820152603760248201526000805160206200479b83398151915260448201527f20476c6f62616c45786974526f6f7420696e76616c6964000000000000000000606482015260840162000553565b60225463ffffffff878116610100909204161462001fd95760405162461bcd60e51b815260206004820152604360248201526000805160206200479b83398151915260448201527f2044657374696e6174696f6e206e6574776f726b20646f6573206e6f74206d616064820152620e8c6d60eb1b608482015260a40162000553565b602254600090610100900463ffffffff1662001ff757508862001ffa565b50895b6200202562002016848b8b8b8b8b8b8051906020012062000c4e565b8e8e63ffffffff168462000b4c565b620009be5760405162461bcd60e51b815260206004820152603260248201526000805160206200479b8339815191526044820152711024b73b30b634b21039b6ba10383937b7b360711b606482015260840162000553565b60006200208d6101008362002cde565b905060006200209f6101008462002e17565b6000928352602360205260409092208054600190931b9092179091555050565b6040516001600160a01b03831660248201526044810182905262001d8990849063a9059cbb60e01b9060640162001c05565b60225460ff166200216b5760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b6000620021fe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022809092919063ffffffff16565b80519091501562001d8957808060200190518101906200221f91906200320d565b62001d895760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c46848460008585600080866001600160a01b03168587604051620022aa919062002d4c565b60006040518083038185875af1925050503d8060008114620022e9576040519150601f19603f3d011682016040523d82523d6000602084013e620022ee565b606091505b509150915062002301878383876200230c565b979650505050505050565b606083156200238057825160000362002378576001600160a01b0385163b620023785760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c46565b62000c468383815115620023975781518083602001fd5b8060405162461bcd60e51b81526004016200055391906200322d565b611558806200324383390190565b6001600160a01b0381168114620023d757600080fd5b50565b8035620023e781620023c1565b919050565b803563ffffffff81168114620023e757600080fd5b60008083601f8401126200241457600080fd5b50813567ffffffffffffffff8111156200242d57600080fd5b6020830191508360208285010111156200244657600080fd5b9250929050565b60008060008060008060a087890312156200246757600080fd5b86356200247481620023c1565b95506200248460208801620023ec565b945060408701356200249681620023c1565b935060608701359250608087013567ffffffffffffffff811115620024ba57600080fd5b620024c889828a0162002401565b979a9699509497509295939492505050565b60008060408385031215620024ee57600080fd5b620024f983620023ec565b915060208301356200250b81620023c1565b809150509250929050565b6000602082840312156200252957600080fd5b81356200253681620023c1565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200257f576200257f6200253d565b604052919050565b600082601f8301126200259957600080fd5b8135602067ffffffffffffffff821115620025b857620025b86200253d565b8160051b620025c982820162002553565b9283528481018201928281019087851115620025e457600080fd5b83870192505b848310156200230157823582529183019190830190620025ea565b600080600080608085870312156200261c57600080fd5b84359350602085013567ffffffffffffffff808211156200263c57600080fd5b6200264a8883890162002587565b94506040870135915080821682146200266257600080fd5b509396929550929360600135925050565b60ff81168114620023d757600080fd5b600080600080600080600060e0888a0312156200269f57600080fd5b8735620026ac8162002673565b9650620026bc60208901620023ec565b95506040880135620026ce81620023c1565b9450620026de60608901620023ec565b93506080880135620026f081620023c1565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff8211156200272a576200272a6200253d565b50601f01601f191660200190565b600082601f8301126200274a57600080fd5b8135620027616200275b826200270d565b62002553565b8181528460208386010111156200277757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d031215620027b557600080fd5b8a3567ffffffffffffffff80821115620027ce57600080fd5b620027dc8e838f0162002587565b9b50620027ec60208e01620023ec565b9a5060408d0135995060608d013598506200280a60808e01620023ec565b97506200281a60a08e01620023da565b96506200282a60c08e01620023ec565b95506200283a60e08e01620023da565b94506101008d013593506101208d01359150808211156200285a57600080fd5b50620028698d828e0162002738565b9150509295989b9194979a5092959850565b6000806000606084860312156200289157600080fd5b6200289c84620023ec565b92506020840135620028ae81620023c1565b91506040840135620028c081620023c1565b809150509250925092565b600060208284031215620028de57600080fd5b5035919050565b600080600080600080600060a0888a0312156200290157600080fd5b6200290c88620023ec565b965060208801356200291e81620023c1565b9550604088013567ffffffffffffffff808211156200293c57600080fd5b6200294a8b838c0162002401565b909750955060608a01359150808211156200296457600080fd5b50620029738a828b0162002401565b9094509250506080880135620029898162002673565b8091505092959891949750929550565b600080600060608486031215620029af57600080fd5b620029ba84620023ec565b92506020840135620029cc81620023c1565b9150604084013567ffffffffffffffff811115620029e957600080fd5b620029f78682870162002738565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002a8657818101518382015260200162002a6c565b8381111562000fda5750506000910152565b600082601f83011262002aaa57600080fd5b815162002abb6200275b826200270d565b81815284602083860101111562002ad157600080fd5b62000c4682602083016020870162002a69565b60006020828403121562002af757600080fd5b815167ffffffffffffffff81111562002b0f57600080fd5b62000c468482850162002a98565b60006020828403121562002b3057600080fd5b8151620025368162002673565b6000815180845262002b5781602086016020860162002a69565b601f01601f19169290920160200192915050565b60608152600062002b80606083018662002b3d565b828103602084015262002b94818662002b3d565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002bfc8483018762002b3d565b925080851660e085015250509998505050505050505050565b6020808252603a908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e5a6b45564d20636f6e7472616374000000000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002cf05762002cf062002cb2565b500490565b60006001820162002d0a5762002d0a62002cc8565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d439083018462002b3d565b95945050505050565b6000825162002d6081846020870162002a69565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002db757600080fd5b835167ffffffffffffffff8082111562002dd057600080fd5b62002dde8783880162002a98565b9450602086015191508082111562002df557600080fd5b5062002e048682870162002a98565b9250506040840151620028c08162002673565b60008262002e295762002e2962002cb2565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e6d60608301878962002e2e565b828103602084015262002e8281868862002e2e565b91505060ff831660408301529695505050505050565b6000835162002eac81846020880162002a69565b83519083019062002ec281836020880162002a69565b01949350505050565b6000808585111562002edc57600080fd5b8386111562002eea57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f1357600080fd5b873562002f2081620023c1565b9650602088013562002f3281620023c1565b955060408801359450606088013593506080880135620026f08162002673565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260408201527f6d6974206f776e6572206d757374206265207468652073656e64657200000000606082015260800190565b60208082526033908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205370656040820152726e646572206d7573742062652027746869732760681b606082015260800190565b8015158114620023d757600080fd5b600080600080600080600080610100898b0312156200302f57600080fd5b88356200303c81620023c1565b975060208901356200304e81620023c1565b9650604089013595506060890135945060808901356200306e8162003002565b935060a0890135620030808162002673565b979a969950949793969295929450505060c08201359160e0013590565b600181815b80851115620030de578160001904821115620030c257620030c262002cc8565b80851615620030d057918102915b93841c9390800290620030a2565b509250929050565b600082620030f75750600162000a53565b81620031065750600062000a53565b81600181146200311f57600281146200312a576200314a565b600191505062000a53565b60ff8411156200313e576200313e62002cc8565b50506001821b62000a53565b5060208310610133831016604e8410600b84101617156200316f575081810a62000a53565b6200317b83836200309d565b806000190482111562003192576200319262002cc8565b029392505050565b6000620025368383620030e6565b600082821015620031bd57620031bd62002cc8565b500390565b60008219821115620031d857620031d862002cc8565b500190565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200320657600080fd5b5051919050565b6000602082840312156200322057600080fd5b8151620025368162003002565b60208152600062002536602083018462002b3d56fe60c06040523480156200001157600080fd5b5060405162001558380380620015588339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109e620004ba60003960006104690152600081816102f90152610433015261109e6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866106638361104f565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161106157611061610fd1565b506001019056fea26469706673582212205af0e6dd4760d4ae367515578b46c4d5988b10ae47473e817626188baa0c03a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220d45a8ebcef9fc50cf59227d05e3d4a6aa8384293f92bcc21bc9ac4198225157364736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506147ce806100206000396000f3fe608060405260043610620001675760003560e01c80637b6323c111620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b80637b6323c1146200037057806381b1c17414620003955780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b806334ac9cf2116200011e57806334ac9cf214620002a25780633ae0504714620002c45780633da8168214620002dc5780633e1970431462000301578063463855491462000326578063647c576c146200034b57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002432565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009cf565b348015620001db57600080fd5b50620001f3620001ed366004620024be565b62000a08565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d62000252366004620024fa565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b50602754620001f3906001600160a01b031681565b348015620002d157600080fd5b506200022462000a5b565b348015620002e957600080fd5b50620001a1620002fb366004620025e7565b62000b4e565b3480156200030e57600080fd5b50620002246200032036600462002664565b62000c4f565b3480156200033357600080fd5b50620001836200034536600462002774565b62000cdc565b3480156200035857600080fd5b50620001836200036a3660046200285a565b62000e82565b3480156200037d57600080fd5b50620001836200038f36600462002774565b62000fe1565b348015620003a257600080fd5b50620001f3620003b4366004620028aa565b6024602052600090815260409020546001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028aa565b62001469565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d366004620028c4565b620014ae565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b036600462002977565b620015c5565b348015620004c357600080fd5b506200018362001771565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028aa565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b81526004016200055390620029de565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044657374696e6174696f6e2063616e6e6f7420626520697473656c66000000606482015260840162000553565b60008060606001600160a01b03891662000687578534146200067d5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a908201527f20416d6f756e7420646f6573206e6f74206d61746368206d6573736167652e76606482015263616c756560e01b608482015260a40162000553565b60009150620008e9565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074657604051632770a7eb60e21b81526001600160a01b038b1690639dc29fac90620006fe9033908b9060040162002a46565b600060405180830381600087803b1580156200071957600080fd5b505af11580156200072e573d6000803e3d6000fd5b505050508060200151935080600001519250620008e7565b84156200075b576200075b8a888888620017a8565b620007726001600160a01b038b1633308a62001bcc565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007c9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f3919081019062002ada565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000832573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085c919081019062002ada565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c1919062002b12565b604051602001620008d59392919062002b60565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092b98979695949392919062002b9d565b60405180910390a16200095662000950600084868c8c8c888051906020012062000c4f565b62001c39565b6026546001600160a01b03166333d6247d6200097162000a5b565b6040518263ffffffff1660e01b81526004016200099091815260200190565b600060405180830381600087803b158015620009ab57600080fd5b505af1158015620009c0573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009fc5760405162461bcd60e51b8152600401620005539062002c0a565b62000a0662001d8a565b565b600060246000848460405160200162000a2392919062002c67565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b45578260011660010362000ac6576001816020811062000a925762000a9262002c91565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af3565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0060028462002cd3565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3c9062002cea565b91505062000a66565b50919392505050565b6000846001600160401b038416825b602081101562000c40578160011660010362000bca5786818151811062000b885762000b8862002c91565b60200260200101518360405160200162000bac929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c1c565b8287828151811062000be05762000be062002c91565b602002602001015160405160200162000c03929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2960028362002cd3565b91508062000c378162002cea565b91505062000b5d565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d025760405162461bcd60e51b81526004016200055390620029de565b62000d188a8a8a8a8a8a8a8a8a8a600162001de8565b62000d298963ffffffff1662002073565b6000836001600160a01b03168387898560405160240162000d4d9392919062002d06565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d84919062002d41565b60006040518083038185875af1925050503d806000811462000dc3576040519150601f19603f3d011682016040523d82523d6000602084013e62000dc8565b606091505b505090508062000e345760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e8813595cdcd859d94819985a5b195960821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e6d95949392919062002d5f565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea35750600054600160ff909116105b8062000ebf5750303b15801562000ebf575060005460ff166001145b62000f245760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f48576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff1615620010075760405162461bcd60e51b81526004016200055390620029de565b6200101d8a8a8a8a8a8a8a8a8a8a600062001de8565b6200102e8963ffffffff1662002073565b6001600160a01b0385166200112557604080516000808252602082019092526001600160a01b03851690849060405162001069919062002d41565b60006040518083038185875af1925050503d8060008114620010a8576040519150601f19603f3d011682016040523d82523d6000602084013e620010ad565b606091505b50509050806200111e5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a20604482015274115d1a195c881d1c985b9cd9995c8819985a5b1959605a1b606482015260840162000553565b506200141c565b60225463ffffffff6101009091048116908716036200115a57620011546001600160a01b0386168484620020b5565b6200141c565b600086866040516020016200117192919062002c67565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013b457600080600085806020019051810190620011c3919062002d96565b925092509250600085848484604051620011dd9062002399565b620011eb9392919062002b60565b8190604051809103906000f59050801580156200120c573d6000803e3d6000fd5b506040516340c10f1960e01b81529091506001600160a01b038216906340c10f199062001240908c908c9060040162002a46565b600060405180830381600087803b1580156200125b57600080fd5b505af115801562001270573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013a29392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001419565b6040516340c10f1960e01b81526001600160a01b038216906340c10f1990620013e4908890889060040162002a46565b600060405180830381600087803b158015620013ff57600080fd5b505af115801562001414573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200145595949392919062002d5f565b60405180910390a150505050505050505050565b6000806200147a6101008462002cd3565b905060006200148c6101008562002e0b565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014c692919062002c67565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014f99062002399565b601f1982820381018352601f90910116604081905262001526908d908d908d908d908d9060200162002e4b565b60408051601f198184030181529082905262001546929160200162002e8c565b604051602081830303815290604052805190602001206040516020016200159f94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015eb5760405162461bcd60e51b81526004016200055390620029de565b60225463ffffffff610100909104811690841603620016735760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044657374696e6174696f6e2063616e6e6f7420626520697473656c6600606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016c798979695949392919062002b9d565b60405180910390a1620016fe620009506001602260019054906101000a900463ffffffff1633878734888051906020012062000c4f565b6026546001600160a01b03166333d6247d6200171962000a5b565b6040518263ffffffff1660e01b81526004016200173891815260200190565b600060405180830381600087803b1580156200175357600080fd5b505af115801562001768573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b031633146200179e5760405162461bcd60e51b8152600401620005539062002c0a565b62000a06620020d7565b6000620017eb83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200218692505050565b9050632afa533160e01b6001600160e01b0319821601620019e05760008080808080806200181d896004818d62002ebf565b8101906200182c919062002eeb565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200186e5760405162461bcd60e51b8152600401620005539062002f46565b6001600160a01b0386163014620018995760405162461bcd60e51b8152600401620005539062002fa3565b8a85146200190c5760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205065726044820152780dad2e840c2dadeeadce840c8decae640dcdee840dac2e8c6d603b1b606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200198c919062002d41565b6000604051808303816000865af19150503d8060008114620019cb576040519150601f19603f3d011682016040523d82523d6000602084013e620019d0565b606091505b5050505050505050505062001bc5565b6001600160e01b031981166323f2ebc360e21b1462001a565760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e6f7460448201526a081d985b1a590818d85b1b60aa1b606482015260840162000553565b60008080808080808062001a6e8a6004818e62002ebf565b81019062001a7d919062003005565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001ac15760405162461bcd60e51b8152600401620005539062002f46565b6001600160a01b038716301462001aec5760405162461bcd60e51b8152600401620005539062002fa3565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001b75919062002d41565b6000604051808303816000865af19150503d806000811462001bb4576040519150601f19603f3d011682016040523d82523d6000602084013e62001bb9565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdb9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526200218d565b80600162001c4a602060026200318e565b62001c5691906200319c565b6021541062001cbb5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d65726b6c65604482015269081d1c995948199d5b1b60b21b606482015260840162000553565b60016021600082825462001cd09190620031b6565b909155505060215460005b602081101562001d7a578160011660010362001d1057826001826020811062001d085762001d0862002c91565b015550505050565b6001816020811062001d265762001d2662002c91565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d63919062002cd3565b91508062001d718162002cea565b91505062001cdb565b5062001d85620031d1565b505050565b60225460ff161562001db05760405162461bcd60e51b81526004016200055390620029de565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001df98a63ffffffff1662001469565b1562001e505760405162461bcd60e51b815260206004820152603060248201526000805160206200477983398151915260448201526f08105b1c9958591e4818db185a5b595960821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ec4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001eea9190620031e7565b90508060000362001f4d5760405162461bcd60e51b81526020600482015260376024820152600080516020620047798339815191526044820152760811db1bd8985b115e1a5d149bdbdd081a5b9d985b1a59604a1b606482015260840162000553565b60225463ffffffff878116610100909204161462001fcf5760405162461bcd60e51b815260206004820152604360248201526000805160206200477983398151915260448201527f2044657374696e6174696f6e206e6574776f726b20646f6573206e6f74206d616064820152620e8c6d60eb1b608482015260a40162000553565b602254600090610100900463ffffffff1662001fed57508862001ff0565b50895b6200201b6200200c848b8b8b8b8b8b8051906020012062000c4f565b8e8e63ffffffff168462000b4e565b620009c05760405162461bcd60e51b81526020600482015260326024820152600080516020620047798339815191526044820152711024b73b30b634b21039b6ba10383937b7b360711b606482015260840162000553565b6000620020836101008362002cd3565b90506000620020956101008462002e0b565b6000928352602360205260409092208054600190931b9092179091555050565b62001d858363a9059cbb60e01b848460405160240162001c0192919062002a46565b60225460ff16620021515760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b6000620021e4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022669092919063ffffffff16565b80519091501562001d85578080602001905181019062002205919062003201565b62001d855760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c47848460008585600080866001600160a01b0316858760405162002290919062002d41565b60006040518083038185875af1925050503d8060008114620022cf576040519150601f19603f3d011682016040523d82523d6000602084013e620022d4565b606091505b5091509150620022e787838387620022f2565b979650505050505050565b60608315620023665782516000036200235e576001600160a01b0385163b6200235e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c47565b62000c4783838151156200237d5781518083602001fd5b8060405162461bcd60e51b815260040162000553919062003221565b611542806200323783390190565b6001600160a01b0381168114620023bd57600080fd5b50565b8035620023cd81620023a7565b919050565b803563ffffffff81168114620023cd57600080fd5b60008083601f840112620023fa57600080fd5b5081356001600160401b038111156200241257600080fd5b6020830191508360208285010111156200242b57600080fd5b9250929050565b60008060008060008060a087890312156200244c57600080fd5b86356200245981620023a7565b95506200246960208801620023d2565b945060408701356200247b81620023a7565b93506060870135925060808701356001600160401b038111156200249e57600080fd5b620024ac89828a01620023e7565b979a9699509497509295939492505050565b60008060408385031215620024d257600080fd5b620024dd83620023d2565b91506020830135620024ef81620023a7565b809150509250929050565b6000602082840312156200250d57600080fd5b81356200251a81620023a7565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171562002562576200256262002521565b604052919050565b600082601f8301126200257c57600080fd5b813560206001600160401b038211156200259a576200259a62002521565b8160051b620025ab82820162002537565b9283528481018201928281019087851115620025c657600080fd5b83870192505b84831015620022e757823582529183019190830190620025cc565b60008060008060808587031215620025fe57600080fd5b8435935060208501356001600160401b03808211156200261d57600080fd5b6200262b888389016200256a565b94506040870135915080821682146200264357600080fd5b509396929550929360600135925050565b60ff81168114620023bd57600080fd5b600080600080600080600060e0888a0312156200268057600080fd5b87356200268d8162002654565b96506200269d60208901620023d2565b95506040880135620026af81620023a7565b9450620026bf60608901620023d2565b93506080880135620026d181620023a7565b9699959850939692959460a0840135945060c09093013592915050565b60006001600160401b038211156200270a576200270a62002521565b50601f01601f191660200190565b600082601f8301126200272a57600080fd5b8135620027416200273b82620026ee565b62002537565b8181528460208386010111156200275757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200279557600080fd5b8a356001600160401b0380821115620027ad57600080fd5b620027bb8e838f016200256a565b9b50620027cb60208e01620023d2565b9a5060408d0135995060608d01359850620027e960808e01620023d2565b9750620027f960a08e01620023c0565b96506200280960c08e01620023d2565b95506200281960e08e01620023c0565b94506101008d013593506101208d01359150808211156200283957600080fd5b50620028488d828e0162002718565b9150509295989b9194979a5092959850565b6000806000606084860312156200287057600080fd5b6200287b84620023d2565b925060208401356200288d81620023a7565b915060408401356200289f81620023a7565b809150509250925092565b600060208284031215620028bd57600080fd5b5035919050565b600080600080600080600060a0888a031215620028e057600080fd5b620028eb88620023d2565b96506020880135620028fd81620023a7565b955060408801356001600160401b03808211156200291a57600080fd5b620029288b838c01620023e7565b909750955060608a01359150808211156200294257600080fd5b50620029518a828b01620023e7565b9094509250506080880135620029678162002654565b8091505092959891949750929550565b6000806000606084860312156200298d57600080fd5b6200299884620023d2565b92506020840135620029aa81620023a7565b915060408401356001600160401b03811115620029c657600080fd5b620029d48682870162002718565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b6001600160a01b03929092168252602082015260400190565b60005b8381101562002a7c57818101518382015260200162002a62565b8381111562000fdb5750506000910152565b600082601f83011262002aa057600080fd5b815162002ab16200273b82620026ee565b81815284602083860101111562002ac757600080fd5b62000c4782602083016020870162002a5f565b60006020828403121562002aed57600080fd5b81516001600160401b0381111562002b0457600080fd5b62000c478482850162002a8e565b60006020828403121562002b2557600080fd5b81516200251a8162002654565b6000815180845262002b4c81602086016020860162002a5f565b601f01601f19169290920160200192915050565b60608152600062002b75606083018662002b32565b828103602084015262002b89818662002b32565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002bf18483018762002b32565b925080851660e085015250509998505050505050505050565b6020808252603a908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e5a6b45564d20636f6e7472616374000000000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002ce55762002ce562002ca7565b500490565b60006001820162002cff5762002cff62002cbd565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d389083018462002b32565b95945050505050565b6000825162002d5581846020870162002a5f565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002dac57600080fd5b83516001600160401b038082111562002dc457600080fd5b62002dd28783880162002a8e565b9450602086015191508082111562002de957600080fd5b5062002df88682870162002a8e565b92505060408401516200289f8162002654565b60008262002e1d5762002e1d62002ca7565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e6160608301878962002e22565b828103602084015262002e7681868862002e22565b91505060ff831660408301529695505050505050565b6000835162002ea081846020880162002a5f565b83519083019062002eb681836020880162002a5f565b01949350505050565b6000808585111562002ed057600080fd5b8386111562002ede57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f0757600080fd5b873562002f1481620023a7565b9650602088013562002f2681620023a7565b955060408801359450606088013593506080880135620026d18162002654565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260408201527f6d6974206f776e6572206d757374206265207468652073656e64657200000000606082015260800190565b60208082526033908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205370656040820152726e646572206d7573742062652027746869732760681b606082015260800190565b8015158114620023bd57600080fd5b600080600080600080600080610100898b0312156200302357600080fd5b88356200303081620023a7565b975060208901356200304281620023a7565b965060408901359550606089013594506080890135620030628162002ff6565b935060a0890135620030748162002654565b979a969950949793969295929450505060c08201359160e0013590565b600181815b80851115620030d2578160001904821115620030b657620030b662002cbd565b80851615620030c457918102915b93841c939080029062003096565b509250929050565b600082620030eb5750600162000a55565b81620030fa5750600062000a55565b81600181146200311357600281146200311e576200313e565b600191505062000a55565b60ff84111562003132576200313262002cbd565b50506001821b62000a55565b5060208310610133831016604e8410600b841016171562003163575081810a62000a55565b6200316f838362003091565b806000190482111562003186576200318662002cbd565b029392505050565b60006200251a8383620030da565b600082821015620031b157620031b162002cbd565b500390565b60008219821115620031cc57620031cc62002cbd565b500190565b634e487b7160e01b600052600160045260246000fd5b600060208284031215620031fa57600080fd5b5051919050565b6000602082840312156200321457600080fd5b81516200251a8162002ff6565b6020815260006200251a602083018462002b3256fe60c06040523480156200001157600080fd5b5060405162001542380380620015428339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611088620004ba60003960006104690152600081816102f9015261043301526110886000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610dc2565b60405180910390f35b61016d610168366004610e33565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e5d565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e33565b61048b565b61023d610238366004610e33565b6104ad565b005b61018161024d366004610e99565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610e99565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e33565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e33565b610531565b61016d6102ef366004610e33565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ebb565b6105ba565b61018161033c366004610f2e565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f61565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f61565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b51565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fb1565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fc9565b60405180910390fd5b6104ea8282610bfd565b5050565b60606004805461037090610f61565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fc9565b6104ea8282610caa565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611019565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b0384811660008181526020818152604080832087870390559387168083529184902080548701905592518581529092600080516020611033833981519152910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b7c610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c535760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c659190610fb1565b90915550506001600160a01b03821660008181526020818152604080832080548601905551848152600080516020611033833981519152910160405180910390a35050565b6001600160a01b038216610d0a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610d7e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192916000805160206110338339815191529101610938565b600060208083528351808285015260005b81811015610def57858101830151858201604001528201610dd3565b81811115610e01576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e2e57600080fd5b919050565b60008060408385031215610e4657600080fd5b610e4f83610e17565b946020939093013593505050565b600080600060608486031215610e7257600080fd5b610e7b84610e17565b9250610e8960208501610e17565b9150604084013590509250925092565b600060208284031215610eab57600080fd5b610eb482610e17565b9392505050565b600080600080600080600060e0888a031215610ed657600080fd5b610edf88610e17565b9650610eed60208901610e17565b95506040880135945060608801359350608088013560ff81168114610f1157600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f4157600080fd5b610f4a83610e17565b9150610f5860208401610e17565b90509250929050565b600181811c90821680610f7557607f821691505b602082108103610f9557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610fc457610fc4610f9b565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161102b5761102b610f9b565b506001019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212208b7986f78e961ad6c0885b86b24ce427045be98073c1f3d7fe18180542ab873564736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220eea1ddf5dc0824087ba900f51470f81609d826beaa356befc3f38b861a0aa77864736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001675760003560e01c80637b6323c111620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b80637b6323c1146200037057806381b1c17414620003955780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b806334ac9cf2116200011e57806334ac9cf214620002a25780633ae0504714620002c45780633da8168214620002dc5780633e1970431462000301578063463855491462000326578063647c576c146200034b57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002432565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009cf565b348015620001db57600080fd5b50620001f3620001ed366004620024be565b62000a08565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d62000252366004620024fa565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b50602754620001f3906001600160a01b031681565b348015620002d157600080fd5b506200022462000a5b565b348015620002e957600080fd5b50620001a1620002fb366004620025e7565b62000b4e565b3480156200030e57600080fd5b50620002246200032036600462002664565b62000c4f565b3480156200033357600080fd5b50620001836200034536600462002774565b62000cdc565b3480156200035857600080fd5b50620001836200036a3660046200285a565b62000e82565b3480156200037d57600080fd5b50620001836200038f36600462002774565b62000fe1565b348015620003a257600080fd5b50620001f3620003b4366004620028aa565b6024602052600090815260409020546001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028aa565b62001469565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d366004620028c4565b620014ae565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b036600462002977565b620015c5565b348015620004c357600080fd5b506200018362001771565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028aa565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b81526004016200055390620029de565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044657374696e6174696f6e2063616e6e6f7420626520697473656c66000000606482015260840162000553565b60008060606001600160a01b03891662000687578534146200067d5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a908201527f20416d6f756e7420646f6573206e6f74206d61746368206d6573736167652e76606482015263616c756560e01b608482015260a40162000553565b60009150620008e9565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074657604051632770a7eb60e21b81526001600160a01b038b1690639dc29fac90620006fe9033908b9060040162002a46565b600060405180830381600087803b1580156200071957600080fd5b505af11580156200072e573d6000803e3d6000fd5b505050508060200151935080600001519250620008e7565b84156200075b576200075b8a888888620017a8565b620007726001600160a01b038b1633308a62001bcc565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007c9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f3919081019062002ada565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000832573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085c919081019062002ada565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c1919062002b12565b604051602001620008d59392919062002b60565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092b98979695949392919062002b9d565b60405180910390a16200095662000950600084868c8c8c888051906020012062000c4f565b62001c39565b6026546001600160a01b03166333d6247d6200097162000a5b565b6040518263ffffffff1660e01b81526004016200099091815260200190565b600060405180830381600087803b158015620009ab57600080fd5b505af1158015620009c0573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009fc5760405162461bcd60e51b8152600401620005539062002c0a565b62000a0662001d8a565b565b600060246000848460405160200162000a2392919062002c67565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b45578260011660010362000ac6576001816020811062000a925762000a9262002c91565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af3565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0060028462002cd3565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3c9062002cea565b91505062000a66565b50919392505050565b6000846001600160401b038416825b602081101562000c40578160011660010362000bca5786818151811062000b885762000b8862002c91565b60200260200101518360405160200162000bac929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c1c565b8287828151811062000be05762000be062002c91565b602002602001015160405160200162000c03929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2960028362002cd3565b91508062000c378162002cea565b91505062000b5d565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d025760405162461bcd60e51b81526004016200055390620029de565b62000d188a8a8a8a8a8a8a8a8a8a600162001de8565b62000d298963ffffffff1662002073565b6000836001600160a01b03168387898560405160240162000d4d9392919062002d06565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d84919062002d41565b60006040518083038185875af1925050503d806000811462000dc3576040519150601f19603f3d011682016040523d82523d6000602084013e62000dc8565b606091505b505090508062000e345760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e8813595cdcd859d94819985a5b195960821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e6d95949392919062002d5f565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea35750600054600160ff909116105b8062000ebf5750303b15801562000ebf575060005460ff166001145b62000f245760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f48576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff1615620010075760405162461bcd60e51b81526004016200055390620029de565b6200101d8a8a8a8a8a8a8a8a8a8a600062001de8565b6200102e8963ffffffff1662002073565b6001600160a01b0385166200112557604080516000808252602082019092526001600160a01b03851690849060405162001069919062002d41565b60006040518083038185875af1925050503d8060008114620010a8576040519150601f19603f3d011682016040523d82523d6000602084013e620010ad565b606091505b50509050806200111e5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a20604482015274115d1a195c881d1c985b9cd9995c8819985a5b1959605a1b606482015260840162000553565b506200141c565b60225463ffffffff6101009091048116908716036200115a57620011546001600160a01b0386168484620020b5565b6200141c565b600086866040516020016200117192919062002c67565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013b457600080600085806020019051810190620011c3919062002d96565b925092509250600085848484604051620011dd9062002399565b620011eb9392919062002b60565b8190604051809103906000f59050801580156200120c573d6000803e3d6000fd5b506040516340c10f1960e01b81529091506001600160a01b038216906340c10f199062001240908c908c9060040162002a46565b600060405180830381600087803b1580156200125b57600080fd5b505af115801562001270573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013a29392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001419565b6040516340c10f1960e01b81526001600160a01b038216906340c10f1990620013e4908890889060040162002a46565b600060405180830381600087803b158015620013ff57600080fd5b505af115801562001414573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200145595949392919062002d5f565b60405180910390a150505050505050505050565b6000806200147a6101008462002cd3565b905060006200148c6101008562002e0b565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014c692919062002c67565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014f99062002399565b601f1982820381018352601f90910116604081905262001526908d908d908d908d908d9060200162002e4b565b60408051601f198184030181529082905262001546929160200162002e8c565b604051602081830303815290604052805190602001206040516020016200159f94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015eb5760405162461bcd60e51b81526004016200055390620029de565b60225463ffffffff610100909104811690841603620016735760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044657374696e6174696f6e2063616e6e6f7420626520697473656c6600606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016c798979695949392919062002b9d565b60405180910390a1620016fe620009506001602260019054906101000a900463ffffffff1633878734888051906020012062000c4f565b6026546001600160a01b03166333d6247d6200171962000a5b565b6040518263ffffffff1660e01b81526004016200173891815260200190565b600060405180830381600087803b1580156200175357600080fd5b505af115801562001768573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b031633146200179e5760405162461bcd60e51b8152600401620005539062002c0a565b62000a06620020d7565b6000620017eb83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200218692505050565b9050632afa533160e01b6001600160e01b0319821601620019e05760008080808080806200181d896004818d62002ebf565b8101906200182c919062002eeb565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200186e5760405162461bcd60e51b8152600401620005539062002f46565b6001600160a01b0386163014620018995760405162461bcd60e51b8152600401620005539062002fa3565b8a85146200190c5760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205065726044820152780dad2e840c2dadeeadce840c8decae640dcdee840dac2e8c6d603b1b606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200198c919062002d41565b6000604051808303816000865af19150503d8060008114620019cb576040519150601f19603f3d011682016040523d82523d6000602084013e620019d0565b606091505b5050505050505050505062001bc5565b6001600160e01b031981166323f2ebc360e21b1462001a565760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e6f7460448201526a081d985b1a590818d85b1b60aa1b606482015260840162000553565b60008080808080808062001a6e8a6004818e62002ebf565b81019062001a7d919062003005565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001ac15760405162461bcd60e51b8152600401620005539062002f46565b6001600160a01b038716301462001aec5760405162461bcd60e51b8152600401620005539062002fa3565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001b75919062002d41565b6000604051808303816000865af19150503d806000811462001bb4576040519150601f19603f3d011682016040523d82523d6000602084013e62001bb9565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdb9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526200218d565b80600162001c4a602060026200318e565b62001c5691906200319c565b6021541062001cbb5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d65726b6c65604482015269081d1c995948199d5b1b60b21b606482015260840162000553565b60016021600082825462001cd09190620031b6565b909155505060215460005b602081101562001d7a578160011660010362001d1057826001826020811062001d085762001d0862002c91565b015550505050565b6001816020811062001d265762001d2662002c91565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d63919062002cd3565b91508062001d718162002cea565b91505062001cdb565b5062001d85620031d1565b505050565b60225460ff161562001db05760405162461bcd60e51b81526004016200055390620029de565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001df98a63ffffffff1662001469565b1562001e505760405162461bcd60e51b815260206004820152603060248201526000805160206200477983398151915260448201526f08105b1c9958591e4818db185a5b595960821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ec4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001eea9190620031e7565b90508060000362001f4d5760405162461bcd60e51b81526020600482015260376024820152600080516020620047798339815191526044820152760811db1bd8985b115e1a5d149bdbdd081a5b9d985b1a59604a1b606482015260840162000553565b60225463ffffffff878116610100909204161462001fcf5760405162461bcd60e51b815260206004820152604360248201526000805160206200477983398151915260448201527f2044657374696e6174696f6e206e6574776f726b20646f6573206e6f74206d616064820152620e8c6d60eb1b608482015260a40162000553565b602254600090610100900463ffffffff1662001fed57508862001ff0565b50895b6200201b6200200c848b8b8b8b8b8b8051906020012062000c4f565b8e8e63ffffffff168462000b4e565b620009c05760405162461bcd60e51b81526020600482015260326024820152600080516020620047798339815191526044820152711024b73b30b634b21039b6ba10383937b7b360711b606482015260840162000553565b6000620020836101008362002cd3565b90506000620020956101008462002e0b565b6000928352602360205260409092208054600190931b9092179091555050565b62001d858363a9059cbb60e01b848460405160240162001c0192919062002a46565b60225460ff16620021515760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b6000620021e4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022669092919063ffffffff16565b80519091501562001d85578080602001905181019062002205919062003201565b62001d855760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c47848460008585600080866001600160a01b0316858760405162002290919062002d41565b60006040518083038185875af1925050503d8060008114620022cf576040519150601f19603f3d011682016040523d82523d6000602084013e620022d4565b606091505b5091509150620022e787838387620022f2565b979650505050505050565b60608315620023665782516000036200235e576001600160a01b0385163b6200235e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c47565b62000c4783838151156200237d5781518083602001fd5b8060405162461bcd60e51b815260040162000553919062003221565b611542806200323783390190565b6001600160a01b0381168114620023bd57600080fd5b50565b8035620023cd81620023a7565b919050565b803563ffffffff81168114620023cd57600080fd5b60008083601f840112620023fa57600080fd5b5081356001600160401b038111156200241257600080fd5b6020830191508360208285010111156200242b57600080fd5b9250929050565b60008060008060008060a087890312156200244c57600080fd5b86356200245981620023a7565b95506200246960208801620023d2565b945060408701356200247b81620023a7565b93506060870135925060808701356001600160401b038111156200249e57600080fd5b620024ac89828a01620023e7565b979a9699509497509295939492505050565b60008060408385031215620024d257600080fd5b620024dd83620023d2565b91506020830135620024ef81620023a7565b809150509250929050565b6000602082840312156200250d57600080fd5b81356200251a81620023a7565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171562002562576200256262002521565b604052919050565b600082601f8301126200257c57600080fd5b813560206001600160401b038211156200259a576200259a62002521565b8160051b620025ab82820162002537565b9283528481018201928281019087851115620025c657600080fd5b83870192505b84831015620022e757823582529183019190830190620025cc565b60008060008060808587031215620025fe57600080fd5b8435935060208501356001600160401b03808211156200261d57600080fd5b6200262b888389016200256a565b94506040870135915080821682146200264357600080fd5b509396929550929360600135925050565b60ff81168114620023bd57600080fd5b600080600080600080600060e0888a0312156200268057600080fd5b87356200268d8162002654565b96506200269d60208901620023d2565b95506040880135620026af81620023a7565b9450620026bf60608901620023d2565b93506080880135620026d181620023a7565b9699959850939692959460a0840135945060c09093013592915050565b60006001600160401b038211156200270a576200270a62002521565b50601f01601f191660200190565b600082601f8301126200272a57600080fd5b8135620027416200273b82620026ee565b62002537565b8181528460208386010111156200275757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200279557600080fd5b8a356001600160401b0380821115620027ad57600080fd5b620027bb8e838f016200256a565b9b50620027cb60208e01620023d2565b9a5060408d0135995060608d01359850620027e960808e01620023d2565b9750620027f960a08e01620023c0565b96506200280960c08e01620023d2565b95506200281960e08e01620023c0565b94506101008d013593506101208d01359150808211156200283957600080fd5b50620028488d828e0162002718565b9150509295989b9194979a5092959850565b6000806000606084860312156200287057600080fd5b6200287b84620023d2565b925060208401356200288d81620023a7565b915060408401356200289f81620023a7565b809150509250925092565b600060208284031215620028bd57600080fd5b5035919050565b600080600080600080600060a0888a031215620028e057600080fd5b620028eb88620023d2565b96506020880135620028fd81620023a7565b955060408801356001600160401b03808211156200291a57600080fd5b620029288b838c01620023e7565b909750955060608a01359150808211156200294257600080fd5b50620029518a828b01620023e7565b9094509250506080880135620029678162002654565b8091505092959891949750929550565b6000806000606084860312156200298d57600080fd5b6200299884620023d2565b92506020840135620029aa81620023a7565b915060408401356001600160401b03811115620029c657600080fd5b620029d48682870162002718565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b6001600160a01b03929092168252602082015260400190565b60005b8381101562002a7c57818101518382015260200162002a62565b8381111562000fdb5750506000910152565b600082601f83011262002aa057600080fd5b815162002ab16200273b82620026ee565b81815284602083860101111562002ac757600080fd5b62000c4782602083016020870162002a5f565b60006020828403121562002aed57600080fd5b81516001600160401b0381111562002b0457600080fd5b62000c478482850162002a8e565b60006020828403121562002b2557600080fd5b81516200251a8162002654565b6000815180845262002b4c81602086016020860162002a5f565b601f01601f19169290920160200192915050565b60608152600062002b75606083018662002b32565b828103602084015262002b89818662002b32565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002bf18483018762002b32565b925080851660e085015250509998505050505050505050565b6020808252603a908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e5a6b45564d20636f6e7472616374000000000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002ce55762002ce562002ca7565b500490565b60006001820162002cff5762002cff62002cbd565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d389083018462002b32565b95945050505050565b6000825162002d5581846020870162002a5f565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002dac57600080fd5b83516001600160401b038082111562002dc457600080fd5b62002dd28783880162002a8e565b9450602086015191508082111562002de957600080fd5b5062002df88682870162002a8e565b92505060408401516200289f8162002654565b60008262002e1d5762002e1d62002ca7565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e6160608301878962002e22565b828103602084015262002e7681868862002e22565b91505060ff831660408301529695505050505050565b6000835162002ea081846020880162002a5f565b83519083019062002eb681836020880162002a5f565b01949350505050565b6000808585111562002ed057600080fd5b8386111562002ede57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f0757600080fd5b873562002f1481620023a7565b9650602088013562002f2681620023a7565b955060408801359450606088013593506080880135620026d18162002654565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260408201527f6d6974206f776e6572206d757374206265207468652073656e64657200000000606082015260800190565b60208082526033908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205370656040820152726e646572206d7573742062652027746869732760681b606082015260800190565b8015158114620023bd57600080fd5b600080600080600080600080610100898b0312156200302357600080fd5b88356200303081620023a7565b975060208901356200304281620023a7565b965060408901359550606089013594506080890135620030628162002ff6565b935060a0890135620030748162002654565b979a969950949793969295929450505060c08201359160e0013590565b600181815b80851115620030d2578160001904821115620030b657620030b662002cbd565b80851615620030c457918102915b93841c939080029062003096565b509250929050565b600082620030eb5750600162000a55565b81620030fa5750600062000a55565b81600181146200311357600281146200311e576200313e565b600191505062000a55565b60ff84111562003132576200313262002cbd565b50506001821b62000a55565b5060208310610133831016604e8410600b841016171562003163575081810a62000a55565b6200316f838362003091565b806000190482111562003186576200318662002cbd565b029392505050565b60006200251a8383620030da565b600082821015620031b157620031b162002cbd565b500390565b60008219821115620031cc57620031cc62002cbd565b500190565b634e487b7160e01b600052600160045260246000fd5b600060208284031215620031fa57600080fd5b5051919050565b6000602082840312156200321457600080fd5b81516200251a8162002ff6565b6020815260006200251a602083018462002b3256fe60c06040523480156200001157600080fd5b5060405162001542380380620015428339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611088620004ba60003960006104690152600081816102f9015261043301526110886000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610dc2565b60405180910390f35b61016d610168366004610e33565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e5d565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e33565b61048b565b61023d610238366004610e33565b6104ad565b005b61018161024d366004610e99565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610e99565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e33565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e33565b610531565b61016d6102ef366004610e33565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ebb565b6105ba565b61018161033c366004610f2e565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f61565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f61565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b51565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fb1565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fc9565b60405180910390fd5b6104ea8282610bfd565b5050565b60606004805461037090610f61565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fc9565b6104ea8282610caa565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611019565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b0384811660008181526020818152604080832087870390559387168083529184902080548701905592518581529092600080516020611033833981519152910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b7c610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c535760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c659190610fb1565b90915550506001600160a01b03821660008181526020818152604080832080548601905551848152600080516020611033833981519152910160405180910390a35050565b6001600160a01b038216610d0a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610d7e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192916000805160206110338339815191529101610938565b600060208083528351808285015260005b81811015610def57858101830151858201604001528201610dd3565b81811115610e01576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e2e57600080fd5b919050565b60008060408385031215610e4657600080fd5b610e4f83610e17565b946020939093013593505050565b600080600060608486031215610e7257600080fd5b610e7b84610e17565b9250610e8960208501610e17565b9150604084013590509250925092565b600060208284031215610eab57600080fd5b610eb482610e17565b9392505050565b600080600080600080600060e0888a031215610ed657600080fd5b610edf88610e17565b9650610eed60208901610e17565b95506040880135945060608801359350608088013560ff81168114610f1157600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f4157600080fd5b610f4a83610e17565b9150610f5860208401610e17565b90509250929050565b600181811c90821680610f7557607f821691505b602082108103610f9557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610fc457610fc4610f9b565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161102b5761102b610f9b565b506001019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212208b7986f78e961ad6c0885b86b24ce427045be98073c1f3d7fe18180542ab873564736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220eea1ddf5dc0824087ba900f51470f81609d826beaa356befc3f38b861a0aa77864736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZkEVMBridgeMock.json b/compiled-contracts/PolygonZkEVMBridgeMock.json index f4dc77ac2..dd3b57b2d 100644 --- a/compiled-contracts/PolygonZkEVMBridgeMock.json +++ b/compiled-contracts/PolygonZkEVMBridgeMock.json @@ -790,8 +790,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50614bfa806100206000396000f3fe608060405260043610620001f35760003560e01c80637b6323c1116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b80637b6323c1146200045e57806381b1c17414620004835780638da5cb5b14620004bd57600080fd5b8063318aee3d116200018d5780633e19704311620001585780633e19704314620003d75780634638554914620003fc578063647c576c1462000421578063715018a6146200044657600080fd5b8063318aee3d146200030957806334ac9cf214620003785780633ae05047146200039a5780633da8168214620003b257600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f6200020936600462002839565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f6200071e565b3480156200026757600080fd5b506200027f62000279366004620028c6565b62000757565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002902565b620007aa565b348015620002ca57600080fd5b506200020f620002dc3660046200291c565b620007b9565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002941565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b506027546200027f906001600160a01b031681565b348015620003a757600080fd5b50620002fa620007e5565b348015620003bf57600080fd5b506200022d620003d136600462002a29565b620008d8565b348015620003e457600080fd5b50620002fa620003f636600462002aa7565b620009da565b3480156200040957600080fd5b506200020f6200041b36600462002bb8565b62000a67565b3480156200042e57600080fd5b506200020f6200044036600462002c9f565b62000c0d565b3480156200045357600080fd5b506200020f62000d82565b3480156200046b57600080fd5b506200020f6200047d36600462002bb8565b62000d98565b3480156200049057600080fd5b506200027f620004a236600462002902565b6024602052600090815260409020546001600160a01b031681565b348015620004ca57600080fd5b50605a546001600160a01b03166200027f565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002902565b62001221565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002cef565b62001266565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002da3565b6200137d565b348015620005e957600080fd5b506200020f6200152f565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002902565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002941565b62001566565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007065760405162461bcd60e51b815260206004820152604760248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b62000716868686868686620015e5565b505050505050565b6027546001600160a01b031633146200074b5760405162461bcd60e51b8152600401620006fd9062002e0b565b6200075562001a76565b565b60006024600084846040516020016200077292919062002e68565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b462001ad4565b608c55565b620007c362001ad4565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008cf57826001166001036200085057600181602081106200081c576200081c62002e92565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200087d565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088a60028462002ed4565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c69062002eeb565b915050620007f0565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009cb5781600116600103620009555786818151811062000913576200091362002e92565b60200260200101518360405160200162000937929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009a7565b828782815181106200096b576200096b62002e92565b60200260200101516040516020016200098e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b460028362002ed4565b915080620009c28162002eeb565b915050620008e8565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a8d5760405162461bcd60e51b8152600401620006fd9062002f07565b62000aa38a8a8a8a8a8a8a8a8a8a600162001b30565b62000ab48963ffffffff1662001dc1565b6000836001600160a01b03168387898560405160240162000ad89392919062002fcc565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b0f919062003007565b60006040518083038185875af1925050503d806000811462000b4e576040519150601f19603f3d011682016040523d82523d6000602084013e62000b53565b606091505b505090508062000bbf5760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e8813595cdcd859d94819985a5b195960821b6064820152608401620006fd565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bf895949392919062003025565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c2e5750600054600160ff909116105b8062000c4a5750303b15801562000c4a575060005460ff166001145b62000caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006fd565b6000805460ff19166001179055801562000cd3576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d3562001e03565b801562000d7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8c62001ad4565b62000755600062001e76565b60225460ff161562000dbe5760405162461bcd60e51b8152600401620006fd9062002f07565b62000dd48a8a8a8a8a8a8a8a8a8a600062001b30565b62000de58963ffffffff1662001dc1565b6001600160a01b03851662000edc57604080516000808252602082019092526001600160a01b03851690849060405162000e20919062003007565b60006040518083038185875af1925050503d806000811462000e5f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e64565b606091505b505090508062000ed55760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a20604482015274115d1a195c881d1c985b9cd9995c8819985a5b1959605a1b6064820152608401620006fd565b50620011d4565b60225463ffffffff61010090910481169087160362000f115762000f0b6001600160a01b038616848462001ec8565b620011d4565b6000868660405160200162000f2892919062002e68565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200116c5760008060008580602001905181019062000f7a9190620030a8565b92509250925060008584848460405162000f9490620027a2565b62000fa2939291906200311e565b8190604051809103906000f590508015801562000fc3573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f1990604401600060405180830381600087803b1580156200101357600080fd5b505af115801562001028573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200115a9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011d1565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f1990604401600060405180830381600087803b158015620011b757600080fd5b505af1158015620011cc573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200120d95949392919062003025565b60405180910390a150505050505050505050565b600080620012326101008462002ed4565b9050600062001244610100856200315b565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200127e92919062002e68565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012b190620027a2565b601f1982820381018352601f909101166040819052620012de908d908d908d908d908d906020016200319b565b60408051601f1981840301815290829052620012fe9291602001620031dc565b604051602081830303815290604052805190602001206040516020016200135794939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013a35760405162461bcd60e51b8152600401620006fd9062002f07565b60225463ffffffff6101009091048116908416036200142b5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044657374696e6174696f6e2063616e6e6f7420626520697473656c66006064820152608401620006fd565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff1633868634876021546040516200147f9897969594939291906200320f565b60405180910390a1620014bc620014b66001602260019054906101000a900463ffffffff16338787348880519060200120620009da565b62001f32565b6026546001600160a01b03166333d6247d620014d7620007e5565b6040518263ffffffff1660e01b8152600401620014f691815260200190565b600060405180830381600087803b1580156200151157600080fd5b505af115801562001526573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b031633146200155c5760405162461bcd60e51b8152600401620006fd9062002e0b565b620007556200207e565b6200157062001ad4565b6001600160a01b038116620015d75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006fd565b620015e28162001e76565b50565b60225460ff16156200160b5760405162461bcd60e51b8152600401620006fd9062002f07565b60225463ffffffff610100909104811690861603620016935760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044657374696e6174696f6e2063616e6e6f7420626520697473656c660000006064820152608401620006fd565b60008060606001600160a01b03891662001736578534146200172c5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a908201527f20416d6f756e7420646f6573206e6f74206d61746368206d6573736167652e76606482015263616c756560e01b608482015260a401620006fd565b6000915062001996565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620017f357604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac90604401600060405180830381600087803b158015620017c657600080fd5b505af1158015620017db573d6000803e3d6000fd5b50505050806020015193508060000151925062001994565b84156200180857620018088a8888886200212d565b6200181f6001600160a01b038b1633308a62002555565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001876573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018a091908101906200327c565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620018df573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200190991908101906200327c565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001948573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200196e9190620032b5565b60405160200162001982939291906200311e565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b87602154604051620019d89897969594939291906200320f565b60405180910390a1620019fd620014b6600084868c8c8c8880519060200120620009da565b6026546001600160a01b03166333d6247d62001a18620007e5565b6040518263ffffffff1660e01b815260040162001a3791815260200190565b600060405180830381600087803b15801562001a5257600080fd5b505af115801562001a67573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001a9c5760405162461bcd60e51b8152600401620006fd9062002f07565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006fd565b62001b418a63ffffffff1662001221565b1562001b985760405162461bcd60e51b8152602060048201526030602482015260008051602062004ba583398151915260448201526f08105b1c9958591e4818db185a5b595960821b6064820152608401620006fd565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001c0c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c329190620032d5565b90508060000362001c9b5760405162461bcd60e51b8152602060048201526037602482015260008051602062004ba583398151915260448201527f20476c6f62616c45786974526f6f7420696e76616c69640000000000000000006064820152608401620006fd565b60225463ffffffff878116610100909204161462001d1d5760405162461bcd60e51b8152602060048201526043602482015260008051602062004ba583398151915260448201527f2044657374696e6174696f6e206e6574776f726b20646f6573206e6f74206d616064820152620e8c6d60eb1b608482015260a401620006fd565b602254600090610100900463ffffffff1662001d3b57508862001d3e565b50895b62001d6962001d5a848b8b8b8b8b8b80519060200120620009da565b8e8e63ffffffff1684620008d8565b62001a675760405162461bcd60e51b8152602060048201526032602482015260008051602062004ba58339815191526044820152711024b73b30b634b21039b6ba10383937b7b360711b6064820152608401620006fd565b600062001dd16101008362002ed4565b9050600062001de3610100846200315b565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001e705760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006fd565b62000755335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001f2d90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526200258f565b505050565b80600162001f4360206002620033ec565b62001f4f9190620033fa565b6021541062001fb45760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d65726b6c65604482015269081d1c995948199d5b1b60b21b6064820152608401620006fd565b60016021600082825462001fc9919062003414565b909155505060215460005b60208110156200207357816001166001036200200957826001826020811062002001576200200162002e92565b015550505050565b600181602081106200201f576200201f62002e92565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200205c919062002ed4565b9150806200206a8162002eeb565b91505062001fd4565b5062001f2d6200342f565b60225460ff16620020f85760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006fd565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200217083838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200266892505050565b9050632afa533160e01b6001600160e01b031982160162002369576000808080808080620021a2896004818d62003445565b810190620021b1919062003471565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620021f35760405162461bcd60e51b8152600401620006fd90620034cc565b6001600160a01b03861630146200221e5760405162461bcd60e51b8152600401620006fd9062003529565b8a8514620022955760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260448201527f6d697420616d6f756e7420646f6573206e6f74206d61746368000000000000006064820152608401620006fd565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162002315919062003007565b6000604051808303816000865af19150503d806000811462002354576040519150601f19603f3d011682016040523d82523d6000602084013e62002359565b606091505b505050505050505050506200254e565b6001600160e01b031981166323f2ebc360e21b14620023df5760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e6f7460448201526a081d985b1a590818d85b1b60aa1b6064820152608401620006fd565b600080808080808080620023f78a6004818e62003445565b8101906200240691906200358b565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200244a5760405162461bcd60e51b8152600401620006fd90620034cc565b6001600160a01b0387163014620024755760405162461bcd60e51b8152600401620006fd9062003529565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f1691620024fe919062003007565b6000604051808303816000865af19150503d80600081146200253d576040519150601f19603f3d011682016040523d82523d6000602084013e62002542565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d7c9085906323b872dd60e01b9060840162001ef5565b6000620025e6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166200266f9092919063ffffffff16565b80519091501562001f2d578080602001905181019062002607919062003617565b62001f2d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006fd565b6020015190565b6060620009d2848460008585600080866001600160a01b0316858760405162002699919062003007565b60006040518083038185875af1925050503d8060008114620026d8576040519150601f19603f3d011682016040523d82523d6000602084013e620026dd565b606091505b5091509150620026f087838387620026fb565b979650505050505050565b606083156200276f57825160000362002767576001600160a01b0385163b620027675760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006fd565b5081620009d2565b620009d28383815115620027865781518083602001fd5b8060405162461bcd60e51b8152600401620006fd919062003637565b611558806200364d83390190565b6001600160a01b0381168114620015e257600080fd5b8035620027d381620027b0565b919050565b803563ffffffff81168114620027d357600080fd5b60008083601f8401126200280057600080fd5b50813567ffffffffffffffff8111156200281957600080fd5b6020830191508360208285010111156200283257600080fd5b9250929050565b60008060008060008060a087890312156200285357600080fd5b86356200286081620027b0565b95506200287060208801620027d8565b945060408701356200288281620027b0565b935060608701359250608087013567ffffffffffffffff811115620028a657600080fd5b620028b489828a01620027ed565b979a9699509497509295939492505050565b60008060408385031215620028da57600080fd5b620028e583620027d8565b91506020830135620028f781620027b0565b809150509250929050565b6000602082840312156200291557600080fd5b5035919050565b6000602082840312156200292f57600080fd5b6200293a82620027d8565b9392505050565b6000602082840312156200295457600080fd5b81356200293a81620027b0565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620029a357620029a362002961565b604052919050565b600082601f830112620029bd57600080fd5b8135602067ffffffffffffffff821115620029dc57620029dc62002961565b8160051b620029ed82820162002977565b928352848101820192828101908785111562002a0857600080fd5b83870192505b84831015620026f05782358252918301919083019062002a0e565b6000806000806080858703121562002a4057600080fd5b84359350602085013567ffffffffffffffff8082111562002a6057600080fd5b62002a6e88838901620029ab565b945060408701359150808216821462002a8657600080fd5b509396929550929360600135925050565b60ff81168114620015e257600080fd5b600080600080600080600060e0888a03121562002ac357600080fd5b873562002ad08162002a97565b965062002ae060208901620027d8565b9550604088013562002af281620027b0565b945062002b0260608901620027d8565b9350608088013562002b1481620027b0565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002b4e5762002b4e62002961565b50601f01601f191660200190565b600082601f83011262002b6e57600080fd5b813562002b8562002b7f8262002b31565b62002977565b81815284602083860101111562002b9b57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002bd957600080fd5b8a3567ffffffffffffffff8082111562002bf257600080fd5b62002c008e838f01620029ab565b9b5062002c1060208e01620027d8565b9a5060408d0135995060608d0135985062002c2e60808e01620027d8565b975062002c3e60a08e01620027c6565b965062002c4e60c08e01620027d8565b955062002c5e60e08e01620027c6565b94506101008d013593506101208d013591508082111562002c7e57600080fd5b5062002c8d8d828e0162002b5c565b9150509295989b9194979a5092959850565b60008060006060848603121562002cb557600080fd5b62002cc084620027d8565b9250602084013562002cd281620027b0565b9150604084013562002ce481620027b0565b809150509250925092565b600080600080600080600060a0888a03121562002d0b57600080fd5b62002d1688620027d8565b9650602088013562002d2881620027b0565b9550604088013567ffffffffffffffff8082111562002d4657600080fd5b62002d548b838c01620027ed565b909750955060608a013591508082111562002d6e57600080fd5b5062002d7d8a828b01620027ed565b909450925050608088013562002d938162002a97565b8091505092959891949750929550565b60008060006060848603121562002db957600080fd5b62002dc484620027d8565b9250602084013562002dd681620027b0565b9150604084013567ffffffffffffffff81111562002df357600080fd5b62002e018682870162002b5c565b9150509250925092565b6020808252603a908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e5a6b45564d20636f6e7472616374000000000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002ee65762002ee662002ea8565b500490565b60006001820162002f005762002f0062002ebe565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002f8c57818101518382015260200162002f72565b8381111562000d7c5750506000910152565b6000815180845262002fb881602086016020860162002f6f565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002ffe9083018462002f9e565b95945050505050565b600082516200301b81846020870162002f6f565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f8301126200306e57600080fd5b81516200307f62002b7f8262002b31565b8181528460208386010111156200309557600080fd5b620009d282602083016020870162002f6f565b600080600060608486031215620030be57600080fd5b835167ffffffffffffffff80821115620030d757600080fd5b620030e5878388016200305c565b94506020860151915080821115620030fc57600080fd5b506200310b868287016200305c565b925050604084015162002ce48162002a97565b60608152600062003133606083018662002f9e565b828103602084015262003147818662002f9e565b91505060ff83166040830152949350505050565b6000826200316d576200316d62002ea8565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b606081526000620031b160608301878962003172565b8281036020840152620031c681868862003172565b91505060ff831660408301529695505050505050565b60008351620031f081846020880162002f6f565b8351908301906200320681836020880162002f6f565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032638483018762002f9e565b925080851660e085015250509998505050505050505050565b6000602082840312156200328f57600080fd5b815167ffffffffffffffff811115620032a757600080fd5b620009d2848285016200305c565b600060208284031215620032c857600080fd5b81516200293a8162002a97565b600060208284031215620032e857600080fd5b5051919050565b600181815b808511156200333057816000190482111562003314576200331462002ebe565b808516156200332257918102915b93841c9390800290620032f4565b509250929050565b6000826200334957506001620007a4565b816200335857506000620007a4565b81600181146200337157600281146200337c576200339c565b6001915050620007a4565b60ff84111562003390576200339062002ebe565b50506001821b620007a4565b5060208310610133831016604e8410600b8410161715620033c1575081810a620007a4565b620033cd8383620032ef565b8060001904821115620033e457620033e462002ebe565b029392505050565b60006200293a838362003338565b6000828210156200340f576200340f62002ebe565b500390565b600082198211156200342a576200342a62002ebe565b500190565b634e487b7160e01b600052600160045260246000fd5b600080858511156200345657600080fd5b838611156200346457600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200348d57600080fd5b87356200349a81620027b0565b96506020880135620034ac81620027b0565b95506040880135945060608801359350608088013562002b148162002a97565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260408201527f6d6974206f776e6572206d757374206265207468652073656e64657200000000606082015260800190565b60208082526033908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205370656040820152726e646572206d7573742062652027746869732760681b606082015260800190565b8015158114620015e257600080fd5b600080600080600080600080610100898b031215620035a957600080fd5b8835620035b681620027b0565b97506020890135620035c881620027b0565b965060408901359550606089013594506080890135620035e8816200357c565b935060a0890135620035fa8162002a97565b979a969950949793969295929450505060c08201359160e0013590565b6000602082840312156200362a57600080fd5b81516200293a816200357c565b6020815260006200293a602083018462002f9e56fe60c06040523480156200001157600080fd5b5060405162001558380380620015588339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109e620004ba60003960006104690152600081816102f90152610433015261109e6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866106638361104f565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161106157611061610fd1565b506001019056fea26469706673582212205af0e6dd4760d4ae367515578b46c4d5988b10ae47473e817626188baa0c03a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220e33850a56913d406d5e359c0b98443485fff7fefd289bde46adf7b11c788757c64736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001f35760003560e01c80637b6323c1116200010b578063bab161bf11620000a1578063ed6be5c9116200006c578063ed6be5c914620005f4578063ee25560b146200060b578063f2fde38b146200063c578063ff634ed7146200066157600080fd5b8063bab161bf1462000569578063d02103ca14620005a3578063d96a15f714620005c5578063dbc1697614620005dc57600080fd5b806391e57e2d11620000e257806391e57e2d14620004dd5780639e34070f14620004f5578063a08e8a08146200051a578063aaa13cc2146200054457600080fd5b80637b6323c1146200045e57806381b1c17414620004835780638da5cb5b14620004bd57600080fd5b8063318aee3d116200018d5780633e19704311620001585780633e19704314620003d75780634638554914620003fc578063647c576c1462000421578063715018a6146200044657600080fd5b8063318aee3d146200030957806334ac9cf214620003785780633ae05047146200039a5780633da8168214620003b257600080fd5b806322e95f2c11620001ce57806322e95f2c146200025a5780632b5e42e714620002985780632c3f58cd14620002bd5780632dfdf0b514620002e257600080fd5b80630871e97114620001f857806315064c9614620002115780632072f6c51462000242575b600080fd5b6200020f6200020936600462002839565b62000678565b005b3480156200021e57600080fd5b506022546200022d9060ff1681565b60405190151581526020015b60405180910390f35b3480156200024f57600080fd5b506200020f6200071e565b3480156200026757600080fd5b506200027f62000279366004620028c6565b62000757565b6040516001600160a01b03909116815260200162000239565b348015620002a557600080fd5b506200020f620002b736600462002902565b620007aa565b348015620002ca57600080fd5b506200020f620002dc3660046200291c565b620007b9565b348015620002ef57600080fd5b50620002fa60215481565b60405190815260200162000239565b3480156200031657600080fd5b50620003536200032836600462002941565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000239565b3480156200038557600080fd5b506027546200027f906001600160a01b031681565b348015620003a757600080fd5b50620002fa620007e5565b348015620003bf57600080fd5b506200022d620003d136600462002a29565b620008d8565b348015620003e457600080fd5b50620002fa620003f636600462002aa7565b620009da565b3480156200040957600080fd5b506200020f6200041b36600462002bb8565b62000a67565b3480156200042e57600080fd5b506200020f6200044036600462002c9f565b62000c0d565b3480156200045357600080fd5b506200020f62000d82565b3480156200046b57600080fd5b506200020f6200047d36600462002bb8565b62000d98565b3480156200049057600080fd5b506200027f620004a236600462002902565b6024602052600090815260409020546001600160a01b031681565b348015620004ca57600080fd5b50605a546001600160a01b03166200027f565b348015620004ea57600080fd5b50620002fa608c5481565b3480156200050257600080fd5b506200022d6200051436600462002902565b62001221565b3480156200052757600080fd5b5062000531600081565b60405160ff909116815260200162000239565b3480156200055157600080fd5b506200027f6200056336600462002cef565b62001266565b3480156200057657600080fd5b506022546200058d90610100900463ffffffff1681565b60405163ffffffff909116815260200162000239565b348015620005b057600080fd5b506026546200027f906001600160a01b031681565b6200020f620005d636600462002da3565b6200137d565b348015620005e957600080fd5b506200020f6200152f565b3480156200060157600080fd5b506200058d600081565b3480156200061857600080fd5b50620002fa6200062a36600462002902565b60236020526000908152604090205481565b3480156200064957600080fd5b506200020f6200065b36600462002941565b62001566565b3480156200066e57600080fd5b5062000531600181565b608c54341115620007065760405162461bcd60e51b815260206004820152604760248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b62000716868686868686620015e5565b505050505050565b6027546001600160a01b031633146200074b5760405162461bcd60e51b8152600401620006fd9062002e0b565b6200075562001a76565b565b60006024600084846040516020016200077292919062002e68565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b620007b462001ad4565b608c55565b620007c362001ad4565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b6020811015620008cf57826001166001036200085057600181602081106200081c576200081c62002e92565b015460408051602081019290925281018590526060016040516020818303038152906040528051906020012093506200087d565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200088a60028462002ed4565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008c69062002eeb565b915050620007f0565b50919392505050565b60008467ffffffffffffffff8416825b6020811015620009cb5781600116600103620009555786818151811062000913576200091362002e92565b60200260200101518360405160200162000937929190918252602082015260400190565b604051602081830303815290604052805190602001209250620009a7565b828782815181106200096b576200096b62002e92565b60200260200101516040516020016200098e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b620009b460028362002ed4565b915080620009c28162002eeb565b915050620008e8565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a8d5760405162461bcd60e51b8152600401620006fd9062002f07565b62000aa38a8a8a8a8a8a8a8a8a8a600162001b30565b62000ab48963ffffffff1662001dc1565b6000836001600160a01b03168387898560405160240162000ad89392919062002fcc565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b0f919062003007565b60006040518083038185875af1925050503d806000811462000b4e576040519150601f19603f3d011682016040523d82523d6000602084013e62000b53565b606091505b505090508062000bbf5760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e8813595cdcd859d94819985a5b195960821b6064820152608401620006fd565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000bf895949392919062003025565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000c2e5750600054600160ff909116105b8062000c4a5750303b15801562000c4a575060005460ff166001145b62000caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006fd565b6000805460ff19166001179055801562000cd3576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000d3562001e03565b801562000d7c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d8c62001ad4565b62000755600062001e76565b60225460ff161562000dbe5760405162461bcd60e51b8152600401620006fd9062002f07565b62000dd48a8a8a8a8a8a8a8a8a8a600062001b30565b62000de58963ffffffff1662001dc1565b6001600160a01b03851662000edc57604080516000808252602082019092526001600160a01b03851690849060405162000e20919062003007565b60006040518083038185875af1925050503d806000811462000e5f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e64565b606091505b505090508062000ed55760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a20604482015274115d1a195c881d1c985b9cd9995c8819985a5b1959605a1b6064820152608401620006fd565b50620011d4565b60225463ffffffff61010090910481169087160362000f115762000f0b6001600160a01b038616848462001ec8565b620011d4565b6000868660405160200162000f2892919062002e68565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b0316806200116c5760008060008580602001905181019062000f7a9190620030a8565b92509250925060008584848460405162000f9490620027a2565b62000fa2939291906200311e565b8190604051809103906000f590508015801562000fc3573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038b81166004830152602482018b9052919250908216906340c10f1990604401600060405180830381600087803b1580156200101357600080fd5b505af115801562001028573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c836040516200115a9392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a150505050620011d1565b6040516340c10f1960e01b81526001600160a01b038681166004830152602482018690528216906340c10f1990604401600060405180830381600087803b158015620011b757600080fd5b505af1158015620011cc573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200120d95949392919062003025565b60405180910390a150505050505050505050565b600080620012326101008462002ed4565b9050600062001244610100856200315b565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200127e92919062002e68565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620012b190620027a2565b601f1982820381018352601f909101166040819052620012de908d908d908d908d908d906020016200319b565b60408051601f1981840301815290829052620012fe9291602001620031dc565b604051602081830303815290604052805190602001206040516020016200135794939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620013a35760405162461bcd60e51b8152600401620006fd9062002f07565b60225463ffffffff6101009091048116908416036200142b5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044657374696e6174696f6e2063616e6e6f7420626520697473656c66006064820152608401620006fd565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff1633868634876021546040516200147f9897969594939291906200320f565b60405180910390a1620014bc620014b66001602260019054906101000a900463ffffffff16338787348880519060200120620009da565b62001f32565b6026546001600160a01b03166333d6247d620014d7620007e5565b6040518263ffffffff1660e01b8152600401620014f691815260200190565b600060405180830381600087803b1580156200151157600080fd5b505af115801562001526573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b031633146200155c5760405162461bcd60e51b8152600401620006fd9062002e0b565b620007556200207e565b6200157062001ad4565b6001600160a01b038116620015d75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006fd565b620015e28162001e76565b50565b60225460ff16156200160b5760405162461bcd60e51b8152600401620006fd9062002f07565b60225463ffffffff610100909104811690861603620016935760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044657374696e6174696f6e2063616e6e6f7420626520697473656c660000006064820152608401620006fd565b60008060606001600160a01b03891662001736578534146200172c5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a908201527f20416d6f756e7420646f6573206e6f74206d61746368206d6573736167652e76606482015263616c756560e01b608482015260a401620006fd565b6000915062001996565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620017f357604051632770a7eb60e21b8152336004820152602481018890526001600160a01b038b1690639dc29fac90604401600060405180830381600087803b158015620017c657600080fd5b505af1158015620017db573d6000803e3d6000fd5b50505050806020015193508060000151925062001994565b84156200180857620018088a8888886200212d565b6200181f6001600160a01b038b1633308a62002555565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001876573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018a091908101906200327c565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620018df573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200190991908101906200327c565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001948573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200196e9190620032b5565b60405160200162001982939291906200311e565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b87602154604051620019d89897969594939291906200320f565b60405180910390a1620019fd620014b6600084868c8c8c8880519060200120620009da565b6026546001600160a01b03166333d6247d62001a18620007e5565b6040518263ffffffff1660e01b815260040162001a3791815260200190565b600060405180830381600087803b15801562001a5257600080fd5b505af115801562001a67573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001a9c5760405162461bcd60e51b8152600401620006fd9062002f07565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006fd565b62001b418a63ffffffff1662001221565b1562001b985760405162461bcd60e51b8152602060048201526030602482015260008051602062004ba583398151915260448201526f08105b1c9958591e4818db185a5b595960821b6064820152608401620006fd565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001c0c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c329190620032d5565b90508060000362001c9b5760405162461bcd60e51b8152602060048201526037602482015260008051602062004ba583398151915260448201527f20476c6f62616c45786974526f6f7420696e76616c69640000000000000000006064820152608401620006fd565b60225463ffffffff878116610100909204161462001d1d5760405162461bcd60e51b8152602060048201526043602482015260008051602062004ba583398151915260448201527f2044657374696e6174696f6e206e6574776f726b20646f6573206e6f74206d616064820152620e8c6d60eb1b608482015260a401620006fd565b602254600090610100900463ffffffff1662001d3b57508862001d3e565b50895b62001d6962001d5a848b8b8b8b8b8b80519060200120620009da565b8e8e63ffffffff1684620008d8565b62001a675760405162461bcd60e51b8152602060048201526032602482015260008051602062004ba58339815191526044820152711024b73b30b634b21039b6ba10383937b7b360711b6064820152608401620006fd565b600062001dd16101008362002ed4565b9050600062001de3610100846200315b565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001e705760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006fd565b62000755335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905262001f2d90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526200258f565b505050565b80600162001f4360206002620033ec565b62001f4f9190620033fa565b6021541062001fb45760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d65726b6c65604482015269081d1c995948199d5b1b60b21b6064820152608401620006fd565b60016021600082825462001fc9919062003414565b909155505060215460005b60208110156200207357816001166001036200200957826001826020811062002001576200200162002e92565b015550505050565b600181602081106200201f576200201f62002e92565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506002826200205c919062002ed4565b9150806200206a8162002eeb565b91505062001fd4565b5062001f2d6200342f565b60225460ff16620020f85760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006fd565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006200217083838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200266892505050565b9050632afa533160e01b6001600160e01b031982160162002369576000808080808080620021a2896004818d62003445565b810190620021b1919062003471565b9650965096509650965096509650336001600160a01b0316876001600160a01b031614620021f35760405162461bcd60e51b8152600401620006fd90620034cc565b6001600160a01b03861630146200221e5760405162461bcd60e51b8152600401620006fd9062003529565b8a8514620022955760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260448201527f6d697420616d6f756e7420646f6573206e6f74206d61746368000000000000006064820152608401620006fd565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162002315919062003007565b6000604051808303816000865af19150503d806000811462002354576040519150601f19603f3d011682016040523d82523d6000602084013e62002359565b606091505b505050505050505050506200254e565b6001600160e01b031981166323f2ebc360e21b14620023df5760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e6f7460448201526a081d985b1a590818d85b1b60aa1b6064820152608401620006fd565b600080808080808080620023f78a6004818e62003445565b8101906200240691906200358b565b97509750975097509750975097509750336001600160a01b0316886001600160a01b0316146200244a5760405162461bcd60e51b8152600401620006fd90620034cc565b6001600160a01b0387163014620024755760405162461bcd60e51b8152600401620006fd9062003529565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f1691620024fe919062003007565b6000604051808303816000865af19150503d80600081146200253d576040519150601f19603f3d011682016040523d82523d6000602084013e62002542565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d7c9085906323b872dd60e01b9060840162001ef5565b6000620025e6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166200266f9092919063ffffffff16565b80519091501562001f2d578080602001905181019062002607919062003617565b62001f2d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006fd565b6020015190565b6060620009d2848460008585600080866001600160a01b0316858760405162002699919062003007565b60006040518083038185875af1925050503d8060008114620026d8576040519150601f19603f3d011682016040523d82523d6000602084013e620026dd565b606091505b5091509150620026f087838387620026fb565b979650505050505050565b606083156200276f57825160000362002767576001600160a01b0385163b620027675760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006fd565b5081620009d2565b620009d28383815115620027865781518083602001fd5b8060405162461bcd60e51b8152600401620006fd919062003637565b611558806200364d83390190565b6001600160a01b0381168114620015e257600080fd5b8035620027d381620027b0565b919050565b803563ffffffff81168114620027d357600080fd5b60008083601f8401126200280057600080fd5b50813567ffffffffffffffff8111156200281957600080fd5b6020830191508360208285010111156200283257600080fd5b9250929050565b60008060008060008060a087890312156200285357600080fd5b86356200286081620027b0565b95506200287060208801620027d8565b945060408701356200288281620027b0565b935060608701359250608087013567ffffffffffffffff811115620028a657600080fd5b620028b489828a01620027ed565b979a9699509497509295939492505050565b60008060408385031215620028da57600080fd5b620028e583620027d8565b91506020830135620028f781620027b0565b809150509250929050565b6000602082840312156200291557600080fd5b5035919050565b6000602082840312156200292f57600080fd5b6200293a82620027d8565b9392505050565b6000602082840312156200295457600080fd5b81356200293a81620027b0565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715620029a357620029a362002961565b604052919050565b600082601f830112620029bd57600080fd5b8135602067ffffffffffffffff821115620029dc57620029dc62002961565b8160051b620029ed82820162002977565b928352848101820192828101908785111562002a0857600080fd5b83870192505b84831015620026f05782358252918301919083019062002a0e565b6000806000806080858703121562002a4057600080fd5b84359350602085013567ffffffffffffffff8082111562002a6057600080fd5b62002a6e88838901620029ab565b945060408701359150808216821462002a8657600080fd5b509396929550929360600135925050565b60ff81168114620015e257600080fd5b600080600080600080600060e0888a03121562002ac357600080fd5b873562002ad08162002a97565b965062002ae060208901620027d8565b9550604088013562002af281620027b0565b945062002b0260608901620027d8565b9350608088013562002b1481620027b0565b9699959850939692959460a0840135945060c09093013592915050565b600067ffffffffffffffff82111562002b4e5762002b4e62002961565b50601f01601f191660200190565b600082601f83011262002b6e57600080fd5b813562002b8562002b7f8262002b31565b62002977565b81815284602083860101111562002b9b57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002bd957600080fd5b8a3567ffffffffffffffff8082111562002bf257600080fd5b62002c008e838f01620029ab565b9b5062002c1060208e01620027d8565b9a5060408d0135995060608d0135985062002c2e60808e01620027d8565b975062002c3e60a08e01620027c6565b965062002c4e60c08e01620027d8565b955062002c5e60e08e01620027c6565b94506101008d013593506101208d013591508082111562002c7e57600080fd5b5062002c8d8d828e0162002b5c565b9150509295989b9194979a5092959850565b60008060006060848603121562002cb557600080fd5b62002cc084620027d8565b9250602084013562002cd281620027b0565b9150604084013562002ce481620027b0565b809150509250925092565b600080600080600080600060a0888a03121562002d0b57600080fd5b62002d1688620027d8565b9650602088013562002d2881620027b0565b9550604088013567ffffffffffffffff8082111562002d4657600080fd5b62002d548b838c01620027ed565b909750955060608a013591508082111562002d6e57600080fd5b5062002d7d8a828b01620027ed565b909450925050608088013562002d938162002a97565b8091505092959891949750929550565b60008060006060848603121562002db957600080fd5b62002dc484620027d8565b9250602084013562002dd681620027b0565b9150604084013567ffffffffffffffff81111562002df357600080fd5b62002e018682870162002b5c565b9150509250925092565b6020808252603a908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e5a6b45564d20636f6e7472616374000000000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002ee65762002ee662002ea8565b500490565b60006001820162002f005762002f0062002ebe565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002f8c57818101518382015260200162002f72565b8381111562000d7c5750506000910152565b6000815180845262002fb881602086016020860162002f6f565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002ffe9083018462002f9e565b95945050505050565b600082516200301b81846020870162002f6f565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f8301126200306e57600080fd5b81516200307f62002b7f8262002b31565b8181528460208386010111156200309557600080fd5b620009d282602083016020870162002f6f565b600080600060608486031215620030be57600080fd5b835167ffffffffffffffff80821115620030d757600080fd5b620030e5878388016200305c565b94506020860151915080821115620030fc57600080fd5b506200310b868287016200305c565b925050604084015162002ce48162002a97565b60608152600062003133606083018662002f9e565b828103602084015262003147818662002f9e565b91505060ff83166040830152949350505050565b6000826200316d576200316d62002ea8565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b606081526000620031b160608301878962003172565b8281036020840152620031c681868862003172565b91505060ff831660408301529695505050505050565b60008351620031f081846020880162002f6f565b8351908301906200320681836020880162002f6f565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620032638483018762002f9e565b925080851660e085015250509998505050505050505050565b6000602082840312156200328f57600080fd5b815167ffffffffffffffff811115620032a757600080fd5b620009d2848285016200305c565b600060208284031215620032c857600080fd5b81516200293a8162002a97565b600060208284031215620032e857600080fd5b5051919050565b600181815b808511156200333057816000190482111562003314576200331462002ebe565b808516156200332257918102915b93841c9390800290620032f4565b509250929050565b6000826200334957506001620007a4565b816200335857506000620007a4565b81600181146200337157600281146200337c576200339c565b6001915050620007a4565b60ff84111562003390576200339062002ebe565b50506001821b620007a4565b5060208310610133831016604e8410600b8410161715620033c1575081810a620007a4565b620033cd8383620032ef565b8060001904821115620033e457620033e462002ebe565b029392505050565b60006200293a838362003338565b6000828210156200340f576200340f62002ebe565b500390565b600082198211156200342a576200342a62002ebe565b500190565b634e487b7160e01b600052600160045260246000fd5b600080858511156200345657600080fd5b838611156200346457600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200348d57600080fd5b87356200349a81620027b0565b96506020880135620034ac81620027b0565b95506040880135945060608801359350608088013562002b148162002a97565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260408201527f6d6974206f776e6572206d757374206265207468652073656e64657200000000606082015260800190565b60208082526033908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205370656040820152726e646572206d7573742062652027746869732760681b606082015260800190565b8015158114620015e257600080fd5b600080600080600080600080610100898b031215620035a957600080fd5b8835620035b681620027b0565b97506020890135620035c881620027b0565b965060408901359550606089013594506080890135620035e8816200357c565b935060a0890135620035fa8162002a97565b979a969950949793969295929450505060c08201359160e0013590565b6000602082840312156200362a57600080fd5b81516200293a816200357c565b6020815260006200293a602083018462002f9e56fe60c06040523480156200001157600080fd5b5060405162001558380380620015588339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109e620004ba60003960006104690152600081816102f90152610433015261109e6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866106638361104f565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161106157611061610fd1565b506001019056fea26469706673582212205af0e6dd4760d4ae367515578b46c4d5988b10ae47473e817626188baa0c03a264736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220e33850a56913d406d5e359c0b98443485fff7fefd289bde46adf7b11c788757c64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50614b86806100206000396000f3fe608060405260043610620001af5760003560e01c80637b6323c111620000e9578063bab161bf1162000090578063bab161bf1462000525578063d02103ca146200055f578063d96a15f71462000581578063dbc169761462000598578063ed6be5c914620005b0578063ee25560b14620005c7578063f2fde38b14620005f8578063ff634ed7146200061d57600080fd5b80637b6323c1146200041a57806381b1c174146200043f5780638da5cb5b146200047957806391e57e2d14620004995780639e34070f14620004b1578063a08e8a0814620004d6578063aaa13cc2146200050057600080fd5b8063318aee3d116200015a578063318aee3d14620002c557806334ac9cf214620003345780633ae0504714620003565780633da81682146200036e5780633e19704314620003935780634638554914620003b8578063647c576c14620003dd578063715018a6146200040257600080fd5b80630871e97114620001b457806315064c9614620001cd5780632072f6c514620001fe57806322e95f2c14620002165780632b5e42e714620002545780632c3f58cd14620002795780632dfdf0b5146200029e575b600080fd5b620001cb620001c5366004620027ac565b62000634565b005b348015620001da57600080fd5b50602254620001e99060ff1681565b60405190151581526020015b60405180910390f35b3480156200020b57600080fd5b50620001cb620006c9565b3480156200022357600080fd5b506200023b6200023536600462002838565b62000702565b6040516001600160a01b039091168152602001620001f5565b3480156200026157600080fd5b50620001cb6200027336600462002874565b62000755565b3480156200028657600080fd5b50620001cb620002983660046200288e565b62000764565b348015620002ab57600080fd5b50620002b660215481565b604051908152602001620001f5565b348015620002d257600080fd5b506200030f620002e4366004620028b3565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001f5565b3480156200034157600080fd5b506027546200023b906001600160a01b031681565b3480156200036357600080fd5b50620002b662000790565b3480156200037b57600080fd5b50620001e96200038d36600462002999565b62000883565b348015620003a057600080fd5b50620002b6620003b236600462002a16565b62000984565b348015620003c557600080fd5b50620001cb620003d736600462002b26565b62000a11565b348015620003ea57600080fd5b50620001cb620003fc36600462002c0c565b62000bb7565b3480156200040f57600080fd5b50620001cb62000d2c565b3480156200042757600080fd5b50620001cb6200043936600462002b26565b62000d42565b3480156200044c57600080fd5b506200023b6200045e36600462002874565b6024602052600090815260409020546001600160a01b031681565b3480156200048657600080fd5b50605a546001600160a01b03166200023b565b348015620004a657600080fd5b50620002b6608c5481565b348015620004be57600080fd5b50620001e9620004d036600462002874565b620011ca565b348015620004e357600080fd5b50620004ed600081565b60405160ff9091168152602001620001f5565b3480156200050d57600080fd5b506200023b6200051f36600462002c5c565b6200120f565b3480156200053257600080fd5b506022546200054990610100900463ffffffff1681565b60405163ffffffff9091168152602001620001f5565b3480156200056c57600080fd5b506026546200023b906001600160a01b031681565b620001cb6200059236600462002d0f565b62001326565b348015620005a557600080fd5b50620001cb620014d8565b348015620005bd57600080fd5b5062000549600081565b348015620005d457600080fd5b50620002b6620005e636600462002874565b60236020526000908152604090205481565b3480156200060557600080fd5b50620001cb62000617366004620028b3565b6200150f565b3480156200062a57600080fd5b50620004ed600181565b608c54341115620006b15760405162461bcd60e51b8152602060048201526047602482015260008051602062004b3183398151915260448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b620006c18686868686866200158e565b505050505050565b6027546001600160a01b03163314620006f65760405162461bcd60e51b8152600401620006a89062002d76565b62000700620019ff565b565b60006024600084846040516020016200071d92919062002dd3565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b6200075f62001a5d565b608c55565b6200076e62001a5d565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b60208110156200087a5782600116600103620007fb5760018160208110620007c757620007c762002dfd565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000828565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200083560028462002e3f565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008719062002e56565b9150506200079b565b50919392505050565b6000846001600160401b038416825b6020811015620009755781600116600103620008ff57868181518110620008bd57620008bd62002dfd565b602002602001015183604051602001620008e1929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000951565b8287828151811062000915576200091562002dfd565b602002602001015160405160200162000938929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b6200095e60028362002e3f565b9150806200096c8162002e56565b91505062000892565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a375760405162461bcd60e51b8152600401620006a89062002e72565b62000a4d8a8a8a8a8a8a8a8a8a8a600162001ab9565b62000a5e8963ffffffff1662001d44565b6000836001600160a01b03168387898560405160240162000a829392919062002f37565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000ab9919062002f72565b60006040518083038185875af1925050503d806000811462000af8576040519150601f19603f3d011682016040523d82523d6000602084013e62000afd565b606091505b505090508062000b695760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e8813595cdcd859d94819985a5b195960821b6064820152608401620006a8565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000ba295949392919062002f90565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000bd85750600054600160ff909116105b8062000bf45750303b15801562000bf4575060005460ff166001145b62000c595760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006a8565b6000805460ff19166001179055801562000c7d576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000cdf62001d86565b801562000d26576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d3662001a5d565b62000700600062001df9565b60225460ff161562000d685760405162461bcd60e51b8152600401620006a89062002e72565b62000d7e8a8a8a8a8a8a8a8a8a8a600062001ab9565b62000d8f8963ffffffff1662001d44565b6001600160a01b03851662000e8657604080516000808252602082019092526001600160a01b03851690849060405162000dca919062002f72565b60006040518083038185875af1925050503d806000811462000e09576040519150601f19603f3d011682016040523d82523d6000602084013e62000e0e565b606091505b505090508062000e7f5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a20604482015274115d1a195c881d1c985b9cd9995c8819985a5b1959605a1b6064820152608401620006a8565b506200117d565b60225463ffffffff61010090910481169087160362000ebb5762000eb56001600160a01b038616848462001e4b565b6200117d565b6000868660405160200162000ed292919062002dd3565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620011155760008060008580602001905181019062000f24919062003013565b92509250925060008584848460405162000f3e9062002716565b62000f4c9392919062003088565b8190604051809103906000f590508015801562000f6d573d6000803e3d6000fd5b506040516340c10f1960e01b81529091506001600160a01b038216906340c10f199062000fa1908c908c90600401620030c5565b600060405180830381600087803b15801562000fbc57600080fd5b505af115801562000fd1573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620011039392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200117a565b6040516340c10f1960e01b81526001600160a01b038216906340c10f1990620011459088908890600401620030c5565b600060405180830381600087803b1580156200116057600080fd5b505af115801562001175573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838987878686604051620011b695949392919062002f90565b60405180910390a150505050505050505050565b600080620011db6101008462002e3f565b90506000620011ed61010085620030de565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200122792919062002dd3565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200125a9062002716565b601f1982820381018352601f90910116604081905262001287908d908d908d908d908d906020016200311e565b60408051601f1981840301815290829052620012a792916020016200315f565b604051602081830303815290604052805190602001206040516020016200130094939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff16156200134c5760405162461bcd60e51b8152600401620006a89062002e72565b60225463ffffffff610100909104811690841603620013d45760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044657374696e6174696f6e2063616e6e6f7420626520697473656c66006064820152608401620006a8565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff1633868634876021546040516200142898979695949392919062003192565b60405180910390a1620014656200145f6001602260019054906101000a900463ffffffff1633878734888051906020012062000984565b62001eaa565b6026546001600160a01b03166333d6247d6200148062000790565b6040518263ffffffff1660e01b81526004016200149f91815260200190565b600060405180830381600087803b158015620014ba57600080fd5b505af1158015620014cf573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015055760405162461bcd60e51b8152600401620006a89062002d76565b6200070062001ff6565b6200151962001a5d565b6001600160a01b038116620015805760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006a8565b6200158b8162001df9565b50565b60225460ff1615620015b45760405162461bcd60e51b8152600401620006a89062002e72565b60225463ffffffff6101009091048116908616036200162b5760405162461bcd60e51b815260206004820152603d602482015260008051602062004b3183398151915260448201527f2044657374696e6174696f6e2063616e6e6f7420626520697473656c660000006064820152608401620006a8565b60008060606001600160a01b038916620016bd57853414620016b35760405162461bcd60e51b81526020600482015260446024820181905260008051602062004b31833981519152908201527f20416d6f756e7420646f6573206e6f74206d61746368206d6573736167652e76606482015263616c756560e01b608482015260a401620006a8565b600091506200191f565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200177c57604051632770a7eb60e21b81526001600160a01b038b1690639dc29fac90620017349033908b90600401620030c5565b600060405180830381600087803b1580156200174f57600080fd5b505af115801562001764573d6000803e3d6000fd5b5050505080602001519350806000015192506200191d565b84156200179157620017918a888888620020a5565b620017a86001600160a01b038b1633308a620024c9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620017ff573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018299190810190620031ff565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001868573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018929190810190620031ff565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620018d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018f7919062003237565b6040516020016200190b9392919062003088565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200196198979695949392919062003192565b60405180910390a1620019866200145f600084868c8c8c888051906020012062000984565b6026546001600160a01b03166333d6247d620019a162000790565b6040518263ffffffff1660e01b8152600401620019c091815260200190565b600060405180830381600087803b158015620019db57600080fd5b505af1158015620019f0573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001a255760405162461bcd60e51b8152600401620006a89062002e72565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006a8565b62001aca8a63ffffffff16620011ca565b1562001b215760405162461bcd60e51b8152602060048201526030602482015260008051602062004b1183398151915260448201526f08105b1c9958591e4818db185a5b595960821b6064820152608401620006a8565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001b95573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001bbb919062003257565b90508060000362001c1e5760405162461bcd60e51b8152602060048201526037602482015260008051602062004b118339815191526044820152760811db1bd8985b115e1a5d149bdbdd081a5b9d985b1a59604a1b6064820152608401620006a8565b60225463ffffffff878116610100909204161462001ca05760405162461bcd60e51b8152602060048201526043602482015260008051602062004b1183398151915260448201527f2044657374696e6174696f6e206e6574776f726b20646f6573206e6f74206d616064820152620e8c6d60eb1b608482015260a401620006a8565b602254600090610100900463ffffffff1662001cbe57508862001cc1565b50895b62001cec62001cdd848b8b8b8b8b8b8051906020012062000984565b8e8e63ffffffff168462000883565b620019f05760405162461bcd60e51b8152602060048201526032602482015260008051602062004b118339815191526044820152711024b73b30b634b21039b6ba10383937b7b360711b6064820152608401620006a8565b600062001d546101008362002e3f565b9050600062001d6661010084620030de565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001df35760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006a8565b62000700335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62001ea58363a9059cbb60e01b848460405160240162001e6d929190620030c5565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262002503565b505050565b80600162001ebb602060026200336e565b62001ec791906200337c565b6021541062001f2c5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d65726b6c65604482015269081d1c995948199d5b1b60b21b6064820152608401620006a8565b60016021600082825462001f41919062003396565b909155505060215460005b602081101562001feb578160011660010362001f8157826001826020811062001f795762001f7962002dfd565b015550505050565b6001816020811062001f975762001f9762002dfd565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001fd4919062002e3f565b91508062001fe28162002e56565b91505062001f4c565b5062001ea5620033b1565b60225460ff16620020705760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006a8565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000620020e883838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620025dc92505050565b9050632afa533160e01b6001600160e01b0319821601620022dd5760008080808080806200211a896004818d620033c7565b810190620021299190620033f3565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200216b5760405162461bcd60e51b8152600401620006a8906200344e565b6001600160a01b0386163014620021965760405162461bcd60e51b8152600401620006a890620034ab565b8a8514620022095760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205065726044820152780dad2e840c2dadeeadce840c8decae640dcdee840dac2e8c6d603b1b6064820152608401620006a8565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162002289919062002f72565b6000604051808303816000865af19150503d8060008114620022c8576040519150601f19603f3d011682016040523d82523d6000602084013e620022cd565b606091505b50505050505050505050620024c2565b6001600160e01b031981166323f2ebc360e21b14620023535760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e6f7460448201526a081d985b1a590818d85b1b60aa1b6064820152608401620006a8565b6000808080808080806200236b8a6004818e620033c7565b8101906200237a91906200350d565b97509750975097509750975097509750336001600160a01b0316886001600160a01b031614620023be5760405162461bcd60e51b8152600401620006a8906200344e565b6001600160a01b0387163014620023e95760405162461bcd60e51b8152600401620006a890620034ab565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162002472919062002f72565b6000604051808303816000865af19150503d8060008114620024b1576040519150601f19603f3d011682016040523d82523d6000602084013e620024b6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d269085906323b872dd60e01b9060840162001e6d565b60006200255a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620025e39092919063ffffffff16565b80519091501562001ea557808060200190518101906200257b919062003599565b62001ea55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006a8565b6020015190565b60606200097c848460008585600080866001600160a01b031685876040516200260d919062002f72565b60006040518083038185875af1925050503d80600081146200264c576040519150601f19603f3d011682016040523d82523d6000602084013e62002651565b606091505b509150915062002664878383876200266f565b979650505050505050565b60608315620026e3578251600003620026db576001600160a01b0385163b620026db5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006a8565b50816200097c565b6200097c8383815115620026fa5781518083602001fd5b8060405162461bcd60e51b8152600401620006a89190620035b9565b61154280620035cf83390190565b6001600160a01b03811681146200158b57600080fd5b8035620027478162002724565b919050565b803563ffffffff811681146200274757600080fd5b60008083601f8401126200277457600080fd5b5081356001600160401b038111156200278c57600080fd5b602083019150836020828501011115620027a557600080fd5b9250929050565b60008060008060008060a08789031215620027c657600080fd5b8635620027d38162002724565b9550620027e3602088016200274c565b94506040870135620027f58162002724565b93506060870135925060808701356001600160401b038111156200281857600080fd5b6200282689828a0162002761565b979a9699509497509295939492505050565b600080604083850312156200284c57600080fd5b62002857836200274c565b91506020830135620028698162002724565b809150509250929050565b6000602082840312156200288757600080fd5b5035919050565b600060208284031215620028a157600080fd5b620028ac826200274c565b9392505050565b600060208284031215620028c657600080fd5b8135620028ac8162002724565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620029145762002914620028d3565b604052919050565b600082601f8301126200292e57600080fd5b813560206001600160401b038211156200294c576200294c620028d3565b8160051b6200295d828201620028e9565b92835284810182019282810190878511156200297857600080fd5b83870192505b8483101562002664578235825291830191908301906200297e565b60008060008060808587031215620029b057600080fd5b8435935060208501356001600160401b0380821115620029cf57600080fd5b620029dd888389016200291c565b9450604087013591508082168214620029f557600080fd5b509396929550929360600135925050565b60ff811681146200158b57600080fd5b600080600080600080600060e0888a03121562002a3257600080fd5b873562002a3f8162002a06565b965062002a4f602089016200274c565b9550604088013562002a618162002724565b945062002a71606089016200274c565b9350608088013562002a838162002724565b9699959850939692959460a0840135945060c09093013592915050565b60006001600160401b0382111562002abc5762002abc620028d3565b50601f01601f191660200190565b600082601f83011262002adc57600080fd5b813562002af362002aed8262002aa0565b620028e9565b81815284602083860101111562002b0957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002b4757600080fd5b8a356001600160401b038082111562002b5f57600080fd5b62002b6d8e838f016200291c565b9b5062002b7d60208e016200274c565b9a5060408d0135995060608d0135985062002b9b60808e016200274c565b975062002bab60a08e016200273a565b965062002bbb60c08e016200274c565b955062002bcb60e08e016200273a565b94506101008d013593506101208d013591508082111562002beb57600080fd5b5062002bfa8d828e0162002aca565b9150509295989b9194979a5092959850565b60008060006060848603121562002c2257600080fd5b62002c2d846200274c565b9250602084013562002c3f8162002724565b9150604084013562002c518162002724565b809150509250925092565b600080600080600080600060a0888a03121562002c7857600080fd5b62002c83886200274c565b9650602088013562002c958162002724565b955060408801356001600160401b038082111562002cb257600080fd5b62002cc08b838c0162002761565b909750955060608a013591508082111562002cda57600080fd5b5062002ce98a828b0162002761565b909450925050608088013562002cff8162002a06565b8091505092959891949750929550565b60008060006060848603121562002d2557600080fd5b62002d30846200274c565b9250602084013562002d428162002724565b915060408401356001600160401b0381111562002d5e57600080fd5b62002d6c8682870162002aca565b9150509250925092565b6020808252603a908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e5a6b45564d20636f6e7472616374000000000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002e515762002e5162002e13565b500490565b60006001820162002e6b5762002e6b62002e29565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002ef757818101518382015260200162002edd565b8381111562000d265750506000910152565b6000815180845262002f2381602086016020860162002eda565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002f699083018462002f09565b95945050505050565b6000825162002f8681846020870162002eda565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f83011262002fd957600080fd5b815162002fea62002aed8262002aa0565b8181528460208386010111156200300057600080fd5b6200097c82602083016020870162002eda565b6000806000606084860312156200302957600080fd5b83516001600160401b03808211156200304157600080fd5b6200304f8783880162002fc7565b945060208601519150808211156200306657600080fd5b50620030758682870162002fc7565b925050604084015162002c518162002a06565b6060815260006200309d606083018662002f09565b8281036020840152620030b1818662002f09565b91505060ff83166040830152949350505050565b6001600160a01b03929092168252602082015260400190565b600082620030f057620030f062002e13565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003134606083018789620030f5565b828103602084015262003149818688620030f5565b91505060ff831660408301529695505050505050565b600083516200317381846020880162002eda565b8351908301906200318981836020880162002eda565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620031e68483018762002f09565b925080851660e085015250509998505050505050505050565b6000602082840312156200321257600080fd5b81516001600160401b038111156200322957600080fd5b6200097c8482850162002fc7565b6000602082840312156200324a57600080fd5b8151620028ac8162002a06565b6000602082840312156200326a57600080fd5b5051919050565b600181815b80851115620032b257816000190482111562003296576200329662002e29565b80851615620032a457918102915b93841c939080029062003276565b509250929050565b600082620032cb575060016200074f565b81620032da575060006200074f565b8160018114620032f35760028114620032fe576200331e565b60019150506200074f565b60ff84111562003312576200331262002e29565b50506001821b6200074f565b5060208310610133831016604e8410600b841016171562003343575081810a6200074f565b6200334f838362003271565b806000190482111562003366576200336662002e29565b029392505050565b6000620028ac8383620032ba565b60008282101562003391576200339162002e29565b500390565b60008219821115620033ac57620033ac62002e29565b500190565b634e487b7160e01b600052600160045260246000fd5b60008085851115620033d857600080fd5b83861115620033e657600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200340f57600080fd5b87356200341c8162002724565b965060208801356200342e8162002724565b95506040880135945060608801359350608088013562002a838162002a06565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260408201527f6d6974206f776e6572206d757374206265207468652073656e64657200000000606082015260800190565b60208082526033908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205370656040820152726e646572206d7573742062652027746869732760681b606082015260800190565b80151581146200158b57600080fd5b600080600080600080600080610100898b0312156200352b57600080fd5b8835620035388162002724565b975060208901356200354a8162002724565b9650604089013595506060890135945060808901356200356a81620034fe565b935060a08901356200357c8162002a06565b979a969950949793969295929450505060c08201359160e0013590565b600060208284031215620035ac57600080fd5b8151620028ac81620034fe565b602081526000620028ac602083018462002f0956fe60c06040523480156200001157600080fd5b5060405162001542380380620015428339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611088620004ba60003960006104690152600081816102f9015261043301526110886000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610dc2565b60405180910390f35b61016d610168366004610e33565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e5d565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e33565b61048b565b61023d610238366004610e33565b6104ad565b005b61018161024d366004610e99565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610e99565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e33565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e33565b610531565b61016d6102ef366004610e33565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ebb565b6105ba565b61018161033c366004610f2e565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f61565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f61565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b51565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fb1565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fc9565b60405180910390fd5b6104ea8282610bfd565b5050565b60606004805461037090610f61565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fc9565b6104ea8282610caa565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611019565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b0384811660008181526020818152604080832087870390559387168083529184902080548701905592518581529092600080516020611033833981519152910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b7c610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c535760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c659190610fb1565b90915550506001600160a01b03821660008181526020818152604080832080548601905551848152600080516020611033833981519152910160405180910390a35050565b6001600160a01b038216610d0a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610d7e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192916000805160206110338339815191529101610938565b600060208083528351808285015260005b81811015610def57858101830151858201604001528201610dd3565b81811115610e01576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e2e57600080fd5b919050565b60008060408385031215610e4657600080fd5b610e4f83610e17565b946020939093013593505050565b600080600060608486031215610e7257600080fd5b610e7b84610e17565b9250610e8960208501610e17565b9150604084013590509250925092565b600060208284031215610eab57600080fd5b610eb482610e17565b9392505050565b600080600080600080600060e0888a031215610ed657600080fd5b610edf88610e17565b9650610eed60208901610e17565b95506040880135945060608801359350608088013560ff81168114610f1157600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f4157600080fd5b610f4a83610e17565b9150610f5860208401610e17565b90509250929050565b600181811c90821680610f7557607f821691505b602082108103610f9557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610fc457610fc4610f9b565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161102b5761102b610f9b565b506001019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212208b7986f78e961ad6c0885b86b24ce427045be98073c1f3d7fe18180542ab873564736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663a506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743aa2646970667358221220ecb7262d75ccffae87c8f9592b4c43f1b3962aa76dd0a08fcce5ea516303ef9864736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001af5760003560e01c80637b6323c111620000e9578063bab161bf1162000090578063bab161bf1462000525578063d02103ca146200055f578063d96a15f71462000581578063dbc169761462000598578063ed6be5c914620005b0578063ee25560b14620005c7578063f2fde38b14620005f8578063ff634ed7146200061d57600080fd5b80637b6323c1146200041a57806381b1c174146200043f5780638da5cb5b146200047957806391e57e2d14620004995780639e34070f14620004b1578063a08e8a0814620004d6578063aaa13cc2146200050057600080fd5b8063318aee3d116200015a578063318aee3d14620002c557806334ac9cf214620003345780633ae0504714620003565780633da81682146200036e5780633e19704314620003935780634638554914620003b8578063647c576c14620003dd578063715018a6146200040257600080fd5b80630871e97114620001b457806315064c9614620001cd5780632072f6c514620001fe57806322e95f2c14620002165780632b5e42e714620002545780632c3f58cd14620002795780632dfdf0b5146200029e575b600080fd5b620001cb620001c5366004620027ac565b62000634565b005b348015620001da57600080fd5b50602254620001e99060ff1681565b60405190151581526020015b60405180910390f35b3480156200020b57600080fd5b50620001cb620006c9565b3480156200022357600080fd5b506200023b6200023536600462002838565b62000702565b6040516001600160a01b039091168152602001620001f5565b3480156200026157600080fd5b50620001cb6200027336600462002874565b62000755565b3480156200028657600080fd5b50620001cb620002983660046200288e565b62000764565b348015620002ab57600080fd5b50620002b660215481565b604051908152602001620001f5565b348015620002d257600080fd5b506200030f620002e4366004620028b3565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001f5565b3480156200034157600080fd5b506027546200023b906001600160a01b031681565b3480156200036357600080fd5b50620002b662000790565b3480156200037b57600080fd5b50620001e96200038d36600462002999565b62000883565b348015620003a057600080fd5b50620002b6620003b236600462002a16565b62000984565b348015620003c557600080fd5b50620001cb620003d736600462002b26565b62000a11565b348015620003ea57600080fd5b50620001cb620003fc36600462002c0c565b62000bb7565b3480156200040f57600080fd5b50620001cb62000d2c565b3480156200042757600080fd5b50620001cb6200043936600462002b26565b62000d42565b3480156200044c57600080fd5b506200023b6200045e36600462002874565b6024602052600090815260409020546001600160a01b031681565b3480156200048657600080fd5b50605a546001600160a01b03166200023b565b348015620004a657600080fd5b50620002b6608c5481565b348015620004be57600080fd5b50620001e9620004d036600462002874565b620011ca565b348015620004e357600080fd5b50620004ed600081565b60405160ff9091168152602001620001f5565b3480156200050d57600080fd5b506200023b6200051f36600462002c5c565b6200120f565b3480156200053257600080fd5b506022546200054990610100900463ffffffff1681565b60405163ffffffff9091168152602001620001f5565b3480156200056c57600080fd5b506026546200023b906001600160a01b031681565b620001cb6200059236600462002d0f565b62001326565b348015620005a557600080fd5b50620001cb620014d8565b348015620005bd57600080fd5b5062000549600081565b348015620005d457600080fd5b50620002b6620005e636600462002874565b60236020526000908152604090205481565b3480156200060557600080fd5b50620001cb62000617366004620028b3565b6200150f565b3480156200062a57600080fd5b50620004ed600181565b608c54341115620006b15760405162461bcd60e51b8152602060048201526047602482015260008051602062004b3183398151915260448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b620006c18686868686866200158e565b505050505050565b6027546001600160a01b03163314620006f65760405162461bcd60e51b8152600401620006a89062002d76565b62000700620019ff565b565b60006024600084846040516020016200071d92919062002dd3565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b6200075f62001a5d565b608c55565b6200076e62001a5d565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b60208110156200087a5782600116600103620007fb5760018160208110620007c757620007c762002dfd565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000828565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200083560028462002e3f565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008719062002e56565b9150506200079b565b50919392505050565b6000846001600160401b038416825b6020811015620009755781600116600103620008ff57868181518110620008bd57620008bd62002dfd565b602002602001015183604051602001620008e1929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000951565b8287828151811062000915576200091562002dfd565b602002602001015160405160200162000938929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b6200095e60028362002e3f565b9150806200096c8162002e56565b91505062000892565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a375760405162461bcd60e51b8152600401620006a89062002e72565b62000a4d8a8a8a8a8a8a8a8a8a8a600162001ab9565b62000a5e8963ffffffff1662001d44565b6000836001600160a01b03168387898560405160240162000a829392919062002f37565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000ab9919062002f72565b60006040518083038185875af1925050503d806000811462000af8576040519150601f19603f3d011682016040523d82523d6000602084013e62000afd565b606091505b505090508062000b695760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e8813595cdcd859d94819985a5b195960821b6064820152608401620006a8565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000ba295949392919062002f90565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000bd85750600054600160ff909116105b8062000bf45750303b15801562000bf4575060005460ff166001145b62000c595760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006a8565b6000805460ff19166001179055801562000c7d576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000cdf62001d86565b801562000d26576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d3662001a5d565b62000700600062001df9565b60225460ff161562000d685760405162461bcd60e51b8152600401620006a89062002e72565b62000d7e8a8a8a8a8a8a8a8a8a8a600062001ab9565b62000d8f8963ffffffff1662001d44565b6001600160a01b03851662000e8657604080516000808252602082019092526001600160a01b03851690849060405162000dca919062002f72565b60006040518083038185875af1925050503d806000811462000e09576040519150601f19603f3d011682016040523d82523d6000602084013e62000e0e565b606091505b505090508062000e7f5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a20604482015274115d1a195c881d1c985b9cd9995c8819985a5b1959605a1b6064820152608401620006a8565b506200117d565b60225463ffffffff61010090910481169087160362000ebb5762000eb56001600160a01b038616848462001e4b565b6200117d565b6000868660405160200162000ed292919062002dd3565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620011155760008060008580602001905181019062000f24919062003013565b92509250925060008584848460405162000f3e9062002716565b62000f4c9392919062003088565b8190604051809103906000f590508015801562000f6d573d6000803e3d6000fd5b506040516340c10f1960e01b81529091506001600160a01b038216906340c10f199062000fa1908c908c90600401620030c5565b600060405180830381600087803b15801562000fbc57600080fd5b505af115801562000fd1573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620011039392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200117a565b6040516340c10f1960e01b81526001600160a01b038216906340c10f1990620011459088908890600401620030c5565b600060405180830381600087803b1580156200116057600080fd5b505af115801562001175573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838987878686604051620011b695949392919062002f90565b60405180910390a150505050505050505050565b600080620011db6101008462002e3f565b90506000620011ed61010085620030de565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200122792919062002dd3565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200125a9062002716565b601f1982820381018352601f90910116604081905262001287908d908d908d908d908d906020016200311e565b60408051601f1981840301815290829052620012a792916020016200315f565b604051602081830303815290604052805190602001206040516020016200130094939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff16156200134c5760405162461bcd60e51b8152600401620006a89062002e72565b60225463ffffffff610100909104811690841603620013d45760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044657374696e6174696f6e2063616e6e6f7420626520697473656c66006064820152608401620006a8565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff1633868634876021546040516200142898979695949392919062003192565b60405180910390a1620014656200145f6001602260019054906101000a900463ffffffff1633878734888051906020012062000984565b62001eaa565b6026546001600160a01b03166333d6247d6200148062000790565b6040518263ffffffff1660e01b81526004016200149f91815260200190565b600060405180830381600087803b158015620014ba57600080fd5b505af1158015620014cf573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015055760405162461bcd60e51b8152600401620006a89062002d76565b6200070062001ff6565b6200151962001a5d565b6001600160a01b038116620015805760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006a8565b6200158b8162001df9565b50565b60225460ff1615620015b45760405162461bcd60e51b8152600401620006a89062002e72565b60225463ffffffff6101009091048116908616036200162b5760405162461bcd60e51b815260206004820152603d602482015260008051602062004b3183398151915260448201527f2044657374696e6174696f6e2063616e6e6f7420626520697473656c660000006064820152608401620006a8565b60008060606001600160a01b038916620016bd57853414620016b35760405162461bcd60e51b81526020600482015260446024820181905260008051602062004b31833981519152908201527f20416d6f756e7420646f6573206e6f74206d61746368206d6573736167652e76606482015263616c756560e01b608482015260a401620006a8565b600091506200191f565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200177c57604051632770a7eb60e21b81526001600160a01b038b1690639dc29fac90620017349033908b90600401620030c5565b600060405180830381600087803b1580156200174f57600080fd5b505af115801562001764573d6000803e3d6000fd5b5050505080602001519350806000015192506200191d565b84156200179157620017918a888888620020a5565b620017a86001600160a01b038b1633308a620024c9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620017ff573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018299190810190620031ff565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001868573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018929190810190620031ff565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620018d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018f7919062003237565b6040516020016200190b9392919062003088565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200196198979695949392919062003192565b60405180910390a1620019866200145f600084868c8c8c888051906020012062000984565b6026546001600160a01b03166333d6247d620019a162000790565b6040518263ffffffff1660e01b8152600401620019c091815260200190565b600060405180830381600087803b158015620019db57600080fd5b505af1158015620019f0573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001a255760405162461bcd60e51b8152600401620006a89062002e72565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006a8565b62001aca8a63ffffffff16620011ca565b1562001b215760405162461bcd60e51b8152602060048201526030602482015260008051602062004b1183398151915260448201526f08105b1c9958591e4818db185a5b595960821b6064820152608401620006a8565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001b95573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001bbb919062003257565b90508060000362001c1e5760405162461bcd60e51b8152602060048201526037602482015260008051602062004b118339815191526044820152760811db1bd8985b115e1a5d149bdbdd081a5b9d985b1a59604a1b6064820152608401620006a8565b60225463ffffffff878116610100909204161462001ca05760405162461bcd60e51b8152602060048201526043602482015260008051602062004b1183398151915260448201527f2044657374696e6174696f6e206e6574776f726b20646f6573206e6f74206d616064820152620e8c6d60eb1b608482015260a401620006a8565b602254600090610100900463ffffffff1662001cbe57508862001cc1565b50895b62001cec62001cdd848b8b8b8b8b8b8051906020012062000984565b8e8e63ffffffff168462000883565b620019f05760405162461bcd60e51b8152602060048201526032602482015260008051602062004b118339815191526044820152711024b73b30b634b21039b6ba10383937b7b360711b6064820152608401620006a8565b600062001d546101008362002e3f565b9050600062001d6661010084620030de565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001df35760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006a8565b62000700335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62001ea58363a9059cbb60e01b848460405160240162001e6d929190620030c5565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262002503565b505050565b80600162001ebb602060026200336e565b62001ec791906200337c565b6021541062001f2c5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d65726b6c65604482015269081d1c995948199d5b1b60b21b6064820152608401620006a8565b60016021600082825462001f41919062003396565b909155505060215460005b602081101562001feb578160011660010362001f8157826001826020811062001f795762001f7962002dfd565b015550505050565b6001816020811062001f975762001f9762002dfd565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001fd4919062002e3f565b91508062001fe28162002e56565b91505062001f4c565b5062001ea5620033b1565b60225460ff16620020705760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006a8565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000620020e883838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620025dc92505050565b9050632afa533160e01b6001600160e01b0319821601620022dd5760008080808080806200211a896004818d620033c7565b810190620021299190620033f3565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200216b5760405162461bcd60e51b8152600401620006a8906200344e565b6001600160a01b0386163014620021965760405162461bcd60e51b8152600401620006a890620034ab565b8a8514620022095760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205065726044820152780dad2e840c2dadeeadce840c8decae640dcdee840dac2e8c6d603b1b6064820152608401620006a8565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162002289919062002f72565b6000604051808303816000865af19150503d8060008114620022c8576040519150601f19603f3d011682016040523d82523d6000602084013e620022cd565b606091505b50505050505050505050620024c2565b6001600160e01b031981166323f2ebc360e21b14620023535760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e6f7460448201526a081d985b1a590818d85b1b60aa1b6064820152608401620006a8565b6000808080808080806200236b8a6004818e620033c7565b8101906200237a91906200350d565b97509750975097509750975097509750336001600160a01b0316886001600160a01b031614620023be5760405162461bcd60e51b8152600401620006a8906200344e565b6001600160a01b0387163014620023e95760405162461bcd60e51b8152600401620006a890620034ab565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162002472919062002f72565b6000604051808303816000865af19150503d8060008114620024b1576040519150601f19603f3d011682016040523d82523d6000602084013e620024b6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d269085906323b872dd60e01b9060840162001e6d565b60006200255a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620025e39092919063ffffffff16565b80519091501562001ea557808060200190518101906200257b919062003599565b62001ea55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006a8565b6020015190565b60606200097c848460008585600080866001600160a01b031685876040516200260d919062002f72565b60006040518083038185875af1925050503d80600081146200264c576040519150601f19603f3d011682016040523d82523d6000602084013e62002651565b606091505b509150915062002664878383876200266f565b979650505050505050565b60608315620026e3578251600003620026db576001600160a01b0385163b620026db5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006a8565b50816200097c565b6200097c8383815115620026fa5781518083602001fd5b8060405162461bcd60e51b8152600401620006a89190620035b9565b61154280620035cf83390190565b6001600160a01b03811681146200158b57600080fd5b8035620027478162002724565b919050565b803563ffffffff811681146200274757600080fd5b60008083601f8401126200277457600080fd5b5081356001600160401b038111156200278c57600080fd5b602083019150836020828501011115620027a557600080fd5b9250929050565b60008060008060008060a08789031215620027c657600080fd5b8635620027d38162002724565b9550620027e3602088016200274c565b94506040870135620027f58162002724565b93506060870135925060808701356001600160401b038111156200281857600080fd5b6200282689828a0162002761565b979a9699509497509295939492505050565b600080604083850312156200284c57600080fd5b62002857836200274c565b91506020830135620028698162002724565b809150509250929050565b6000602082840312156200288757600080fd5b5035919050565b600060208284031215620028a157600080fd5b620028ac826200274c565b9392505050565b600060208284031215620028c657600080fd5b8135620028ac8162002724565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620029145762002914620028d3565b604052919050565b600082601f8301126200292e57600080fd5b813560206001600160401b038211156200294c576200294c620028d3565b8160051b6200295d828201620028e9565b92835284810182019282810190878511156200297857600080fd5b83870192505b8483101562002664578235825291830191908301906200297e565b60008060008060808587031215620029b057600080fd5b8435935060208501356001600160401b0380821115620029cf57600080fd5b620029dd888389016200291c565b9450604087013591508082168214620029f557600080fd5b509396929550929360600135925050565b60ff811681146200158b57600080fd5b600080600080600080600060e0888a03121562002a3257600080fd5b873562002a3f8162002a06565b965062002a4f602089016200274c565b9550604088013562002a618162002724565b945062002a71606089016200274c565b9350608088013562002a838162002724565b9699959850939692959460a0840135945060c09093013592915050565b60006001600160401b0382111562002abc5762002abc620028d3565b50601f01601f191660200190565b600082601f83011262002adc57600080fd5b813562002af362002aed8262002aa0565b620028e9565b81815284602083860101111562002b0957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002b4757600080fd5b8a356001600160401b038082111562002b5f57600080fd5b62002b6d8e838f016200291c565b9b5062002b7d60208e016200274c565b9a5060408d0135995060608d0135985062002b9b60808e016200274c565b975062002bab60a08e016200273a565b965062002bbb60c08e016200274c565b955062002bcb60e08e016200273a565b94506101008d013593506101208d013591508082111562002beb57600080fd5b5062002bfa8d828e0162002aca565b9150509295989b9194979a5092959850565b60008060006060848603121562002c2257600080fd5b62002c2d846200274c565b9250602084013562002c3f8162002724565b9150604084013562002c518162002724565b809150509250925092565b600080600080600080600060a0888a03121562002c7857600080fd5b62002c83886200274c565b9650602088013562002c958162002724565b955060408801356001600160401b038082111562002cb257600080fd5b62002cc08b838c0162002761565b909750955060608a013591508082111562002cda57600080fd5b5062002ce98a828b0162002761565b909450925050608088013562002cff8162002a06565b8091505092959891949750929550565b60008060006060848603121562002d2557600080fd5b62002d30846200274c565b9250602084013562002d428162002724565b915060408401356001600160401b0381111562002d5e57600080fd5b62002d6c8682870162002aca565b9150509250925092565b6020808252603a908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e5a6b45564d20636f6e7472616374000000000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002e515762002e5162002e13565b500490565b60006001820162002e6b5762002e6b62002e29565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002ef757818101518382015260200162002edd565b8381111562000d265750506000910152565b6000815180845262002f2381602086016020860162002eda565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002f699083018462002f09565b95945050505050565b6000825162002f8681846020870162002eda565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f83011262002fd957600080fd5b815162002fea62002aed8262002aa0565b8181528460208386010111156200300057600080fd5b6200097c82602083016020870162002eda565b6000806000606084860312156200302957600080fd5b83516001600160401b03808211156200304157600080fd5b6200304f8783880162002fc7565b945060208601519150808211156200306657600080fd5b50620030758682870162002fc7565b925050604084015162002c518162002a06565b6060815260006200309d606083018662002f09565b8281036020840152620030b1818662002f09565b91505060ff83166040830152949350505050565b6001600160a01b03929092168252602082015260400190565b600082620030f057620030f062002e13565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003134606083018789620030f5565b828103602084015262003149818688620030f5565b91505060ff831660408301529695505050505050565b600083516200317381846020880162002eda565b8351908301906200318981836020880162002eda565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620031e68483018762002f09565b925080851660e085015250509998505050505050505050565b6000602082840312156200321257600080fd5b81516001600160401b038111156200322957600080fd5b6200097c8482850162002fc7565b6000602082840312156200324a57600080fd5b8151620028ac8162002a06565b6000602082840312156200326a57600080fd5b5051919050565b600181815b80851115620032b257816000190482111562003296576200329662002e29565b80851615620032a457918102915b93841c939080029062003276565b509250929050565b600082620032cb575060016200074f565b81620032da575060006200074f565b8160018114620032f35760028114620032fe576200331e565b60019150506200074f565b60ff84111562003312576200331262002e29565b50506001821b6200074f565b5060208310610133831016604e8410600b841016171562003343575081810a6200074f565b6200334f838362003271565b806000190482111562003366576200336662002e29565b029392505050565b6000620028ac8383620032ba565b60008282101562003391576200339162002e29565b500390565b60008219821115620033ac57620033ac62002e29565b500190565b634e487b7160e01b600052600160045260246000fd5b60008085851115620033d857600080fd5b83861115620033e657600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200340f57600080fd5b87356200341c8162002724565b965060208801356200342e8162002724565b95506040880135945060608801359350608088013562002a838162002a06565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260408201527f6d6974206f776e6572206d757374206265207468652073656e64657200000000606082015260800190565b60208082526033908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205370656040820152726e646572206d7573742062652027746869732760681b606082015260800190565b80151581146200158b57600080fd5b600080600080600080600080610100898b0312156200352b57600080fd5b8835620035388162002724565b975060208901356200354a8162002724565b9650604089013595506060890135945060808901356200356a81620034fe565b935060a08901356200357c8162002a06565b979a969950949793969295929450505060c08201359160e0013590565b600060208284031215620035ac57600080fd5b8151620028ac81620034fe565b602081526000620028ac602083018462002f0956fe60c06040523480156200001157600080fd5b5060405162001542380380620015428339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611088620004ba60003960006104690152600081816102f9015261043301526110886000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610dc2565b60405180910390f35b61016d610168366004610e33565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e5d565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e33565b61048b565b61023d610238366004610e33565b6104ad565b005b61018161024d366004610e99565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610e99565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e33565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e33565b610531565b61016d6102ef366004610e33565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ebb565b6105ba565b61018161033c366004610f2e565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f61565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f61565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b51565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fb1565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fc9565b60405180910390fd5b6104ea8282610bfd565b5050565b60606004805461037090610f61565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fc9565b6104ea8282610caa565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611019565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b0384811660008181526020818152604080832087870390559387168083529184902080548701905592518581529092600080516020611033833981519152910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b7c610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c535760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c659190610fb1565b90915550506001600160a01b03821660008181526020818152604080832080548601905551848152600080516020611033833981519152910160405180910390a35050565b6001600160a01b038216610d0a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610d7e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192916000805160206110338339815191529101610938565b600060208083528351808285015260005b81811015610def57858101830151858201604001528201610dd3565b81811115610e01576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e2e57600080fd5b919050565b60008060408385031215610e4657600080fd5b610e4f83610e17565b946020939093013593505050565b600080600060608486031215610e7257600080fd5b610e7b84610e17565b9250610e8960208501610e17565b9150604084013590509250925092565b600060208284031215610eab57600080fd5b610eb482610e17565b9392505050565b600080600080600080600060e0888a031215610ed657600080fd5b610edf88610e17565b9650610eed60208901610e17565b95506040880135945060608801359350608088013560ff81168114610f1157600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f4157600080fd5b610f4a83610e17565b9150610f5860208401610e17565b90509250929050565b600181811c90821680610f7557607f821691505b602082108103610f9557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610fc457610fc4610f9b565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161102b5761102b610f9b565b506001019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212208b7986f78e961ad6c0885b86b24ce427045be98073c1f3d7fe18180542ab873564736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663a506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743aa2646970667358221220ecb7262d75ccffae87c8f9592b4c43f1b3962aa76dd0a08fcce5ea516303ef9864736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZkEVMGlobalExitRoot.json b/compiled-contracts/PolygonZkEVMGlobalExitRoot.json index 4107b8c20..538057bf3 100644 --- a/compiled-contracts/PolygonZkEVMGlobalExitRoot.json +++ b/compiled-contracts/PolygonZkEVMGlobalExitRoot.json @@ -151,8 +151,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506104b1806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461015e57600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610413565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610413565b610171565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e366004610448565b6102d8565b600554610146906001600160a01b031681565b6040516001600160a01b0390911681526020016100a0565b600454610146906001600160a01b031681565b6005546001600160a01b031633148061019457506004546001600160a01b031633145b6102165760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f6e6c7920616c6c6f77656420636f6e74726163606482015261747360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b0316330361022e5760018190555b6004546001600160a01b031633036102465760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036102d457600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156102f85750600054600160ff909116105b806103125750303b158015610312575060005460ff166001145b6103755760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161020d565b6000805460ff191660011790558015610398576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561040e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561042557600080fd5b5035919050565b80356001600160a01b038116811461044357600080fd5b919050565b6000806040838503121561045b57600080fd5b6104648361042c565b91506104726020840161042c565b9050925092905056fea2646970667358221220c2d6170ff6d5cd6588ecd8f652c17a5b7c65d1f83e7addb7b0da5a52f5955f4e64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80633ed691ef1161005b5780633ed691ef146100e7578063485cc955146101205780635ec6a8df14610133578063a3c573eb1461015e57600080fd5b806301fd90441461008d578063257b3632146100a9578063319cf735146100c957806333d6247d146100d2575b600080fd5b61009660015481565b6040519081526020015b60405180910390f35b6100966100b7366004610413565b60036020526000908152604090205481565b61009660025481565b6100e56100e0366004610413565b610171565b005b61009660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100e561012e366004610448565b6102d8565b600554610146906001600160a01b031681565b6040516001600160a01b0390911681526020016100a0565b600454610146906001600160a01b031681565b6005546001600160a01b031633148061019457506004546001600160a01b031633145b6102165760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f6e6c7920616c6c6f77656420636f6e74726163606482015261747360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b0316330361022e5760018190555b6004546001600160a01b031633036102465760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036102d457600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156102f85750600054600160ff909116105b806103125750303b158015610312575060005460ff166001145b6103755760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161020d565b6000805460ff191660011790558015610398576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561040e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561042557600080fd5b5035919050565b80356001600160a01b038116811461044357600080fd5b919050565b6000806040838503121561045b57600080fd5b6104648361042c565b91506104726020840161042c565b9050925092905056fea2646970667358221220c2d6170ff6d5cd6588ecd8f652c17a5b7c65d1f83e7addb7b0da5a52f5955f4e64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506104a1806100206000396000f3fe608060405234801561001057600080fd5b50600436106100785760003560e01c806301fd90441461007d578063257b363214610099578063319cf735146100b957806333d6247d146100c25780633ed691ef146100d7578063485cc955146101105780635ec6a8df14610123578063a3c573eb1461014e575b600080fd5b61008660015481565b6040519081526020015b60405180910390f35b6100866100a7366004610403565b60036020526000908152604090205481565b61008660025481565b6100d56100d0366004610403565b610161565b005b61008660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d561011e366004610438565b6102c8565b600554610136906001600160a01b031681565b6040516001600160a01b039091168152602001610090565b600454610136906001600160a01b031681565b6005546001600160a01b031633148061018457506004546001600160a01b031633145b6102065760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f6e6c7920616c6c6f77656420636f6e74726163606482015261747360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b0316330361021e5760018190555b6004546001600160a01b031633036102365760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036102c457600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156102e85750600054600160ff909116105b806103025750303b158015610302575060005460ff166001145b6103655760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016101fd565b6000805460ff191660011790558015610388576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b031992831617909255600480549285169290911691909117905580156103fe576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561041557600080fd5b5035919050565b80356001600160a01b038116811461043357600080fd5b919050565b6000806040838503121561044b57600080fd5b6104548361041c565b91506104626020840161041c565b9050925092905056fea2646970667358221220ab220a7b5869a88544f012ed8e9de5ed8ab1fd3e5d8d9a7fb69d0b8ad2bbc05864736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100785760003560e01c806301fd90441461007d578063257b363214610099578063319cf735146100b957806333d6247d146100c25780633ed691ef146100d7578063485cc955146101105780635ec6a8df14610123578063a3c573eb1461014e575b600080fd5b61008660015481565b6040519081526020015b60405180910390f35b6100866100a7366004610403565b60036020526000908152604090205481565b61008660025481565b6100d56100d0366004610403565b610161565b005b61008660025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d561011e366004610438565b6102c8565b600554610136906001600160a01b031681565b6040516001600160a01b039091168152602001610090565b600454610136906001600160a01b031681565b6005546001600160a01b031633148061018457506004546001600160a01b031633145b6102065760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f6e6c7920616c6c6f77656420636f6e74726163606482015261747360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b0316330361021e5760018190555b6004546001600160a01b031633036102365760028190555b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905060036000828152602001908152602001600020546000036102c457600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156102e85750600054600160ff909116105b806103025750303b158015610302575060005460ff166001145b6103655760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016101fd565b6000805460ff191660011790558015610388576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b031992831617909255600480549285169290911691909117905580156103fe576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006020828403121561041557600080fd5b5035919050565b80356001600160a01b038116811461043357600080fd5b919050565b6000806040838503121561044b57600080fd5b6104548361041c565b91506104626020840161041c565b9050925092905056fea2646970667358221220ab220a7b5869a88544f012ed8e9de5ed8ab1fd3e5d8d9a7fb69d0b8ad2bbc05864736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZkEVMGlobalExitRootL2.json b/compiled-contracts/PolygonZkEVMGlobalExitRootL2.json index 83913d6fb..0f081eb35 100644 --- a/compiled-contracts/PolygonZkEVMGlobalExitRootL2.json +++ b/compiled-contracts/PolygonZkEVMGlobalExitRootL2.json @@ -73,8 +73,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5060405161024638038061024683398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b6101b3806100936000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610164565b60006020819052908152604090205481565b6100a061009b366004610164565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b0316331461015f5760405162461bcd60e51b815260206004820152604560248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f6e6c7920506f6c79676f6e5a6b45564d42606482015264726964676560d81b608482015260a40160405180910390fd5b600155565b60006020828403121561017657600080fd5b503591905056fea26469706673582212203d6a7f66369fc06c0d8b9ca38eabcd1a1bdd000df9e10846e604066a7c3c182f64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610164565b60006020819052908152604090205481565b6100a061009b366004610164565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b0316331461015f5760405162461bcd60e51b815260206004820152604560248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f6e6c7920506f6c79676f6e5a6b45564d42606482015264726964676560d81b608482015260a40160405180910390fd5b600155565b60006020828403121561017657600080fd5b503591905056fea26469706673582212203d6a7f66369fc06c0d8b9ca38eabcd1a1bdd000df9e10846e604066a7c3c182f64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5060405161024638038061024683398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b6101b3806100936000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610164565b60006020819052908152604090205481565b6100a061009b366004610164565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b0316331461015f5760405162461bcd60e51b815260206004820152604560248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f6e6c7920506f6c79676f6e5a6b45564d42606482015264726964676560d81b608482015260a40160405180910390fd5b600155565b60006020828403121561017657600080fd5b503591905056fea2646970667358221220515fd6c3d86946bd7f5a4ef86115f8c7ba072b8c318ac2c46e1526fb50a66c3364736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301fd904414610051578063257b36321461006d57806333d6247d1461008d578063a3c573eb146100a2575b600080fd5b61005a60015481565b6040519081526020015b60405180910390f35b61005a61007b366004610164565b60006020819052908152604090205481565b6100a061009b366004610164565b6100cd565b005b6002546100b5906001600160a01b031681565b6040516001600160a01b039091168152602001610064565b6002546001600160a01b0316331461015f5760405162461bcd60e51b815260206004820152604560248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f6e6c7920506f6c79676f6e5a6b45564d42606482015264726964676560d81b608482015260a40160405180910390fd5b600155565b60006020828403121561017657600080fd5b503591905056fea2646970667358221220515fd6c3d86946bd7f5a4ef86115f8c7ba072b8c318ac2c46e1526fb50a66c3364736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZkEVMGlobalExitRootL2Mock.json b/compiled-contracts/PolygonZkEVMGlobalExitRootL2Mock.json index 89796bb2f..9a07019b5 100644 --- a/compiled-contracts/PolygonZkEVMGlobalExitRootL2Mock.json +++ b/compiled-contracts/PolygonZkEVMGlobalExitRootL2Mock.json @@ -104,8 +104,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506040516102ac3803806102ac83398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b610219806100936000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806301fd904414610067578063116c40c314610083578063257b36321461009857806333d6247d146100b857806396e07459146100cb578063a3c573eb146100eb575b600080fd5b61007060015481565b6040519081526020015b60405180910390f35b6100966100913660046101a8565b600155565b005b6100706100a63660046101a8565b60006020819052908152604090205481565b6100966100c63660046101a8565b610116565b6100966100d93660046101c1565b60009182526020829052604090912055565b6002546100fe906001600160a01b031681565b6040516001600160a01b03909116815260200161007a565b6002546001600160a01b031633146100915760405162461bcd60e51b815260206004820152604560248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f6e6c7920506f6c79676f6e5a6b45564d42606482015264726964676560d81b608482015260a40160405180910390fd5b6000602082840312156101ba57600080fd5b5035919050565b600080604083850312156101d457600080fd5b5050803592602090910135915056fea2646970667358221220f8b35350c06af242ee6201d3819a4a87539e1c30c562d07a2df4bf94a1c0c56d64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c806301fd904414610067578063116c40c314610083578063257b36321461009857806333d6247d146100b857806396e07459146100cb578063a3c573eb146100eb575b600080fd5b61007060015481565b6040519081526020015b60405180910390f35b6100966100913660046101a8565b600155565b005b6100706100a63660046101a8565b60006020819052908152604090205481565b6100966100c63660046101a8565b610116565b6100966100d93660046101c1565b60009182526020829052604090912055565b6002546100fe906001600160a01b031681565b6040516001600160a01b03909116815260200161007a565b6002546001600160a01b031633146100915760405162461bcd60e51b815260206004820152604560248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f6e6c7920506f6c79676f6e5a6b45564d42606482015264726964676560d81b608482015260a40160405180910390fd5b6000602082840312156101ba57600080fd5b5035919050565b600080604083850312156101d457600080fd5b5050803592602090910135915056fea2646970667358221220f8b35350c06af242ee6201d3819a4a87539e1c30c562d07a2df4bf94a1c0c56d64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506040516102ac3803806102ac83398101604081905261002f91610054565b600280546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b610219806100936000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806301fd904414610067578063116c40c314610083578063257b36321461009857806333d6247d146100b857806396e07459146100cb578063a3c573eb146100eb575b600080fd5b61007060015481565b6040519081526020015b60405180910390f35b6100966100913660046101a8565b600155565b005b6100706100a63660046101a8565b60006020819052908152604090205481565b6100966100c63660046101a8565b610116565b6100966100d93660046101c1565b60009182526020829052604090912055565b6002546100fe906001600160a01b031681565b6040516001600160a01b03909116815260200161007a565b6002546001600160a01b031633146100915760405162461bcd60e51b815260206004820152604560248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f6e6c7920506f6c79676f6e5a6b45564d42606482015264726964676560d81b608482015260a40160405180910390fd5b6000602082840312156101ba57600080fd5b5035919050565b600080604083850312156101d457600080fd5b5050803592602090910135915056fea2646970667358221220dc80788ac93a7457ed3ac09a3a5d8195e611fa8622de028285195be61171735e64736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c806301fd904414610067578063116c40c314610083578063257b36321461009857806333d6247d146100b857806396e07459146100cb578063a3c573eb146100eb575b600080fd5b61007060015481565b6040519081526020015b60405180910390f35b6100966100913660046101a8565b600155565b005b6100706100a63660046101a8565b60006020819052908152604090205481565b6100966100c63660046101a8565b610116565b6100966100d93660046101c1565b60009182526020829052604090912055565b6002546100fe906001600160a01b031681565b6040516001600160a01b03909116815260200161007a565b6002546001600160a01b031633146100915760405162461bcd60e51b815260206004820152604560248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f744c323a3a757060448201527f6461746545786974526f6f743a204f6e6c7920506f6c79676f6e5a6b45564d42606482015264726964676560d81b608482015260a40160405180910390fd5b6000602082840312156101ba57600080fd5b5035919050565b600080604083850312156101d457600080fd5b5050803592602090910135915056fea2646970667358221220dc80788ac93a7457ed3ac09a3a5d8195e611fa8622de028285195be61171735e64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZkEVMGlobalExitRootMock.json b/compiled-contracts/PolygonZkEVMGlobalExitRootMock.json index 54b7ef3e3..577defe21 100644 --- a/compiled-contracts/PolygonZkEVMGlobalExitRootMock.json +++ b/compiled-contracts/PolygonZkEVMGlobalExitRootMock.json @@ -198,8 +198,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5060405161077a38038061077a83398101604081905261002f916101bb565b6100398282610040565b50506101ee565b600054610100900460ff16158080156100605750600054600160ff909116105b8061008b57506100793061019060201b6104ae1760201c565b15801561008b575060005460ff166001145b6100f25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015610115576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561018b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b80516001600160a01b03811681146101b657600080fd5b919050565b600080604083850312156101ce57600080fd5b6101d78361019f565b91506101e56020840161019f565b90509250929050565b61057d806101fd6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80633ed691ef116100665780633ed691ef14610110578063485cc955146101495780635bcef6731461015c5780635ec6a8df1461017c578063a3c573eb146101a757600080fd5b806301fd9044146100a3578063051a9e28146100bf578063257b3632146100d4578063319cf735146100f457806333d6247d146100fd575b600080fd5b6100ac60015481565b6040519081526020015b60405180910390f35b6100d26100cd3660046104bd565b6101ba565b005b6100ac6100e23660046104bd565b60036020526000908152604090205481565b6100ac60025481565b6100d261010b3660046104bd565b61020c565b6100ac60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d26101573660046104f2565b610373565b6100d261016a366004610525565b60009182526003602052604090912055565b60055461018f906001600160a01b031681565b6040516001600160a01b0390911681526020016100b6565b60045461018f906001600160a01b031681565b80600360006101f860025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b6005546001600160a01b031633148061022f57506004546001600160a01b031633145b6102b15760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f6e6c7920616c6c6f77656420636f6e74726163606482015261747360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b031633036102c95760018190555b6004546001600160a01b031633036102e15760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361036f57600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103935750600054600160ff909116105b806103ad5750303b1580156103ad575060005460ff166001145b6104105760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016102a8565b6000805460ff191660011790558015610433576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b031992831617909255600480549285169290911691909117905580156104a9576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b6000602082840312156104cf57600080fd5b5035919050565b80356001600160a01b03811681146104ed57600080fd5b919050565b6000806040838503121561050557600080fd5b61050e836104d6565b915061051c602084016104d6565b90509250929050565b6000806040838503121561053857600080fd5b5050803592602090910135915056fea2646970667358221220e0fcdf9a1f0ba4349a5b30b64afb20ab0ab90274401f272dc7ee0f960f5e164364736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c80633ed691ef116100665780633ed691ef14610110578063485cc955146101495780635bcef6731461015c5780635ec6a8df1461017c578063a3c573eb146101a757600080fd5b806301fd9044146100a3578063051a9e28146100bf578063257b3632146100d4578063319cf735146100f457806333d6247d146100fd575b600080fd5b6100ac60015481565b6040519081526020015b60405180910390f35b6100d26100cd3660046104bd565b6101ba565b005b6100ac6100e23660046104bd565b60036020526000908152604090205481565b6100ac60025481565b6100d261010b3660046104bd565b61020c565b6100ac60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b6100d26101573660046104f2565b610373565b6100d261016a366004610525565b60009182526003602052604090912055565b60055461018f906001600160a01b031681565b6040516001600160a01b0390911681526020016100b6565b60045461018f906001600160a01b031681565b80600360006101f860025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b815260208101919091526040016000205550565b6005546001600160a01b031633148061022f57506004546001600160a01b031633145b6102b15760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f6e6c7920616c6c6f77656420636f6e74726163606482015261747360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b031633036102c95760018190555b6004546001600160a01b031633036102e15760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361036f57600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b600054610100900460ff16158080156103935750600054600160ff909116105b806103ad5750303b1580156103ad575060005460ff166001145b6104105760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016102a8565b6000805460ff191660011790558015610433576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b031992831617909255600480549285169290911691909117905580156104a9576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b6000602082840312156104cf57600080fd5b5035919050565b80356001600160a01b03811681146104ed57600080fd5b919050565b6000806040838503121561050557600080fd5b61050e836104d6565b915061051c602084016104d6565b90509250929050565b6000806040838503121561053857600080fd5b5050803592602090910135915056fea2646970667358221220e0fcdf9a1f0ba4349a5b30b64afb20ab0ab90274401f272dc7ee0f960f5e164364736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b5060405161075538038061075583398101604081905261002f916101bb565b6100398282610040565b50506101ee565b600054610100900460ff16158080156100605750600054600160ff909116105b8061008b57506100793061019060201b6104891760201c565b15801561008b575060005460ff166001145b6100f25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015610115576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b0319928316179092556004805492851692909116919091179055801561018b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b80516001600160a01b03811681146101b657600080fd5b919050565b600080604083850312156101ce57600080fd5b6101d78361019f565b91506101e56020840161019f565b90509250929050565b610558806101fd6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80633ed691ef116100665780633ed691ef14610110578063485cc955146101185780635bcef6731461012b5780635ec6a8df1461014b578063a3c573eb1461017657600080fd5b806301fd9044146100a3578063051a9e28146100bf578063257b3632146100d4578063319cf735146100f457806333d6247d146100fd575b600080fd5b6100ac60015481565b6040519081526020015b60405180910390f35b6100d26100cd366004610498565b610189565b005b6100ac6100e2366004610498565b60036020526000908152604090205481565b6100ac60025481565b6100d261010b366004610498565b6101aa565b6100ac610311565b6100d26101263660046104cd565b610347565b6100d2610139366004610500565b60009182526003602052604090912055565b60055461015e906001600160a01b031681565b6040516001600160a01b0390911681526020016100b6565b60045461015e906001600160a01b031681565b8060036000610196610311565b815260208101919091526040016000205550565b6005546001600160a01b03163314806101cd57506004546001600160a01b031633145b61024f5760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f6e6c7920616c6c6f77656420636f6e74726163606482015261747360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b031633036102675760018190555b6004546001600160a01b0316330361027f5760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361030d57600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b600054610100900460ff16158080156103675750600054600160ff909116105b80610388575061037630610489565b158015610388575060005460ff166001145b6103eb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610246565b6000805460ff19166001179055801561040e576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b03199283161790925560048054928516929091169190911790558015610484576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b6000602082840312156104aa57600080fd5b5035919050565b80356001600160a01b03811681146104c857600080fd5b919050565b600080604083850312156104e057600080fd5b6104e9836104b1565b91506104f7602084016104b1565b90509250929050565b6000806040838503121561051357600080fd5b5050803592602090910135915056fea2646970667358221220e79e25d36592d6b6edf4014cb1623ff300313b747db79ef3df398732a13e912864736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c80633ed691ef116100665780633ed691ef14610110578063485cc955146101185780635bcef6731461012b5780635ec6a8df1461014b578063a3c573eb1461017657600080fd5b806301fd9044146100a3578063051a9e28146100bf578063257b3632146100d4578063319cf735146100f457806333d6247d146100fd575b600080fd5b6100ac60015481565b6040519081526020015b60405180910390f35b6100d26100cd366004610498565b610189565b005b6100ac6100e2366004610498565b60036020526000908152604090205481565b6100ac60025481565b6100d261010b366004610498565b6101aa565b6100ac610311565b6100d26101263660046104cd565b610347565b6100d2610139366004610500565b60009182526003602052604090912055565b60055461015e906001600160a01b031681565b6040516001600160a01b0390911681526020016100b6565b60045461015e906001600160a01b031681565b8060036000610196610311565b815260208101919091526040016000205550565b6005546001600160a01b03163314806101cd57506004546001600160a01b031633145b61024f5760405162461bcd60e51b815260206004820152604260248201527f506f6c79676f6e5a6b45564d476c6f62616c45786974526f6f743a3a7570646160448201527f746545786974526f6f743a204f6e6c7920616c6c6f77656420636f6e74726163606482015261747360f01b608482015260a4015b60405180910390fd5b6005546001600160a01b031633036102675760018190555b6004546001600160a01b0316330361027f5760028190555b600254600154604080516020810193909352820152600090606001604051602081830303815290604052805190602001209050600360008281526020019081526020016000205460000361030d57600081815260036020526040808220429055600154600254915190927f61014378f82a0d809aefaf87a8ac9505b89c321808287a6e7810f29304c1fce391a35b5050565b60025460015460408051602081019390935282015260009060600160405160208183030381529060405280519060200120905090565b600054610100900460ff16158080156103675750600054600160ff909116105b80610388575061037630610489565b158015610388575060005460ff166001145b6103eb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610246565b6000805460ff19166001179055801561040e576000805461ff0019166101001790555b600580546001600160a01b038086166001600160a01b03199283161790925560048054928516929091169190911790558015610484576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b6000602082840312156104aa57600080fd5b5035919050565b80356001600160a01b03811681146104c857600080fd5b919050565b600080604083850312156104e057600080fd5b6104e9836104b1565b91506104f7602084016104b1565b90509250929050565b6000806040838503121561051357600080fd5b5050803592602090910135915056fea2646970667358221220e79e25d36592d6b6edf4014cb1623ff300313b747db79ef3df398732a13e912864736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZkEVMMock.json b/compiled-contracts/PolygonZkEVMMock.json index c282b4678..03c13a8db 100644 --- a/compiled-contracts/PolygonZkEVMMock.json +++ b/compiled-contracts/PolygonZkEVMMock.json @@ -1693,8 +1693,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50615e1180620000216000396000f3fe608060405234801561001057600080fd5b50600436106104125760003560e01c806396dc3d3911610220578063cfa8ed4711610130578063e7a7ed02116100b8578063f14916d611610087578063f14916d6146109e3578063f2fde38b146109f6578063f851a44014610a09578063f8b823e414610a1c578063fe16564f14610a2557600080fd5b8063e7a7ed0214610990578063e8bf92ed146109aa578063eaeb077b146109bd578063edc41121146109d057600080fd5b8063d939b315116100ff578063d939b3151461093f578063dbc1697614610959578063e0d1744114610961578063e11f3f1814610974578063e217cfd61461098757600080fd5b8063cfa8ed47146108eb578063d02103ca14610905578063d8d1091b14610918578063d8f54db01461092b57600080fd5b8063ab9fc5ef116101b3578063b6b0b09711610182578063b6b0b09714610890578063c0cad302146108aa578063c0ed84e0146108bd578063c89e42df146108c5578063cf136306146108d857600080fd5b8063ab9fc5ef146107e4578063adc879e9146107ee578063afd23cbe14610808578063b4d63f581461083057600080fd5b80639eb831b9116101ef5780639eb831b9146107a95780639f0d039d146107b1578063a3c573eb146107b9578063aa58bad6146107cc57600080fd5b806396dc3d391461076857806399f5634e1461077b5780639b796760146107835780639c9f3dfe1461079657600080fd5b80634a910e6a11610326578063715018a6116102ae578063837a47381161027d578063837a4738146106b2578063841b24d7146107205780638b48931e1461073a5780638c4a0af7146107445780638da5cb5b1461075757600080fd5b8063715018a6146106715780637215541a1461067957806375c508b31461068c5780637fcb36531461069f57600080fd5b8063574f649e116102f5578063574f649e1461060557806360943d6a146106185780636b8616ce1461062b5780636ff512cc1461064b578063704b6c021461065e57600080fd5b80634a910e6a146105b75780635392c5e0146105ca578063542028d5146105ea5780635437988d146105f257600080fd5b80632d0889d3116103a9578063423fa85611610378578063423fa85614610543578063456052671461055d578063458c0477146105775780634834a3431461058a5780634a1a89a71461059d57600080fd5b80632d0889d314610500578063383b3be81461050a578063394218e91461051d5780633c1582671461053057600080fd5b80631816b7e5116103e55780631816b7e51461048457806319d8ac6114610497578063220d7899146104c257806329878983146104d557600080fd5b80630eaa86ea14610417578063107bf28c1461043d57806310a01a721461045257806315064c9614610467575b600080fd5b61042a610425366004614b76565b610a38565b6040519081526020015b60405180910390f35b610445610c19565b6040516104349190614c23565b610465610460366004614c65565b610ca7565b005b6065546104749060ff1681565b6040519015158152602001610434565b610465610492366004614cf2565b610ef1565b6068546104aa906001600160401b031681565b6040516001600160401b039091168152602001610434565b6104456104d0366004614d16565b611017565b606a546104e8906001600160a01b031681565b6040516001600160a01b039091168152602001610434565b61042a620493e081565b610474610518366004614d63565b6111bd565b61046561052b366004614d63565b611204565b61046561053e366004614ea0565b611353565b6068546104aa90600160401b90046001600160401b031681565b6068546104aa90600160801b90046001600160401b031681565b6072546104aa906001600160401b031681565b610465610598366004614c65565b611b55565b6072546104aa90600160401b90046001600160401b031681565b6104656105c5366004614d63565b611e9e565b61042a6105d8366004614d63565b606d6020526000908152604090205481565b610445612139565b610465610600366004614fcb565b612146565b61042a610613366004614fe8565b612170565b61046561062636600461505d565b6121b3565b61042a610639366004614d63565b60666020526000908152604090205481565b610465610659366004614fcb565b612523565b61046561066c366004614fcb565b6125a7565b61046561261f565b610465610687366004614d63565b612633565b61046561069a366004615134565b6128ab565b6069546104aa906001600160401b031681565b6106f56106c03660046151d2565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610434565b6072546104aa90600160c01b90046001600160401b031681565b6104aa62093a8081565b6104656107523660046151f9565b61293a565b6033546001600160a01b03166104e8565b610465610776366004614d63565b6129b1565b61042a6129dc565b610465610791366004614d63565b612abf565b6104656107a4366004614d63565b612af4565b61042a600c81565b60745461042a565b6070546104e8906001600160a01b031681565b6065546104aa9061010090046001600160401b031681565b6104aa6206978081565b606c546104aa90600160a81b90046001600160401b031681565b60655461081d90600160481b900461ffff1681565b60405161ffff9091168152602001610434565b61086b61083e366004614d63565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610434565b6065546104e890600160581b90046001600160a01b031681565b6104656108b8366004615216565b612c3a565b6104aa612c52565b6104656108d3366004615216565b612c9f565b6104656108e6366004614d63565b612d05565b6069546104e890600160401b90046001600160a01b031681565b606c546104e8906001600160a01b031681565b61046561092636600461524a565b612d86565b606c5461047490600160a01b900460ff1681565b6072546104aa90600160801b90046001600160401b031681565b610465613250565b61046561096f36600461533c565b61330c565b610465610982366004615134565b61337e565b6104aa6103e881565b6068546104aa90600160c01b90046001600160401b031681565b606b546104e8906001600160a01b031681565b6104656109cb366004615389565b6134c3565b6104656109de366004614c65565b6137ec565b6104656109f1366004614fcb565b61390c565b610465610a04366004614fcb565b613984565b6073546104e8906001600160a01b031681565b61042a60745481565b610465610a333660046153cd565b6139fa565b6000806000610a45612c52565b90506001600160401b03881615610ae2576072546001600160401b039081169089161115610a8e5760405162461bcd60e51b8152600401610a85906153f9565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610adc5760405162461bcd60e51b8152600401610a859061547c565b50610b4c565b6001600160401b0387166000908152606d6020526040902054915081610b1a5760405162461bcd60e51b8152600401610a85906154ee565b806001600160401b0316876001600160401b03161115610b4c5760405162461bcd60e51b8152600401610a8590615557565b806001600160401b0316866001600160401b031611610b7d5760405162461bcd60e51b8152600401610a85906155da565b6000610b8c8888888689611017565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051610bc1919061565d565b602060405180830381855afa158015610bde573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c019190615679565b610c0b91906156a8565b9a9950505050505050505050565b606f8054610c26906156bc565b80601f0160208091040260200160405190810160405280929190818152602001828054610c52906156bc565b8015610c9f5780601f10610c7457610100808354040283529160200191610c9f565b820191906000526020600020905b815481529060010190602001808311610c8257829003601f168201915b505050505081565b610caf613a1c565b600080610cba612c52565b90506001600160401b038a1615610d4e576072546001600160401b03908116908b161115610cfa5760405162461bcd60e51b8152600401610a85906153f9565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610d485760405162461bcd60e51b8152600401610a859061547c565b50610db8565b6001600160401b0389166000908152606d6020526040902054915081610d865760405162461bcd60e51b8152600401610a85906154ee565b806001600160401b0316896001600160401b03161115610db85760405162461bcd60e51b8152600401610a8590615557565b806001600160401b0316886001600160401b031611610de95760405162461bcd60e51b8152600401610a85906155da565b6000610df88a8a8a868b611017565b6069805467ffffffffffffffff19166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610e4657607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610e8c57600080fd5b505af1158015610ea0573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610f1b5760405162461bcd60e51b8152600401610a85906156f6565b6103e88161ffff16118015610f3557506104008161ffff16105b610fba5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a401610a85565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b0380861660008181526067602052604080822054938816825290205460609291158061104957508115155b6110bd576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a85565b80611132576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a85565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b03828116600090815260716020526040812054909242926111f392600160801b9092048116911661574f565b6001600160401b0316111592915050565b6073546001600160a01b0316331461122e5760405162461bcd60e51b8152600401610a85906156f6565b62093a806001600160401b038216111561125a5760405162461bcd60e51b8152600401610a859061577a565b60655460ff166112fd576072546001600160401b03600160c01b9091048116908216106112fd5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a401610a85565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a19060200161100c565b60655460ff16156113765760405162461bcd60e51b8152600401610a85906157e5565b606954600160401b90046001600160a01b031633146113fd5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e6365720000000000006064820152608401610a85565b8051806114725760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e636520312062617463680000006064820152608401610a85565b6103e881106114eb576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e7920626174636865736064820152608401610a85565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561197957600087828151811061153e5761153e61584d565b60200260200101519050600081606001516001600160401b031611156116f7578361156881615863565b94505060008160000151805190602001208260200151836060015160405160200161159593929190615889565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461163b5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d617463680000006064820152608401610a85565b81606001516001600160401b031682604001516001600160401b031610156116f15760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a401610a85565b5061186c565b602081015115806117805750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b36329161173a9160040190815260200190565b6020604051808303816000875af1158015611759573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177d9190615679565b15155b6117f25760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d7573742065786973740000000000006064820152608401610a85565b805151620493e01161186c5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610a85565b856001600160401b031681604001516001600160401b03161015801561189f57504281604001516001600160401b031611155b6119115760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e67650000006064820152608401610a85565b805180516020918201208183015160408085015190516119389488949392913391016158ac565b604051602081830303815290604052805190602001209250848061195b90615863565b95505080604001519550508080611971906158f0565b915050611522565b506068546001600160401b03600160c01b909104811690831611156119fe5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b6064820152608401610a85565b606854600090611a1e90600160801b90046001600160401b031684615909565b611a31906001600160401b031687615931565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611b0690339030908490611aeb9190615948565b606554600160581b90046001600160a01b0316929190613a76565b611b0e613ae1565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b785760405162461bcd60e51b8152600401610a85906157e5565b6072546001600160401b038781166000908152606760205260409020600101544292611baf92600160c01b9091048116911661574f565b6001600160401b03161115611c385760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a401610a85565b6103e8611c458888615909565b6001600160401b031610611cc15760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e792062617463686573000000006064820152608401610a85565b611cd18888888888888888613b81565b611cda86613e7e565b607254600160801b90046001600160401b0316600003611da2576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615611d3f57607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d8557600080fd5b505af1158015611d99573d6000803e3d6000fd5b50505050611e53565b611daa613ae1565b607280546001600160401b0316906000611dc383615863565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611ecb57506072546001600160401b03600160401b9091048116908216115b8015611ee657506072546001600160401b0390811690821611155b611f645760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a401610a85565b606a546001600160a01b0316331461200e57611f7f816111bd565b61200e5760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a401610a85565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b1580156120cb57600080fd5b505af11580156120df573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e846002015460405161212c91815260200190565b60405180910390a3505050565b606e8054610c26906156bc565b61214e613a1c565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b60008585805190602001208585856040516020016121929594939291906158ac565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff16158080156121d35750600054600160ff909116105b806121ed5750303b1580156121ed575060005460ff166001145b6122505760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a85565b6000805460ff191660011790558015612273576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a8416179055607080549091169188169190911790556122f06020860186614fcb565b607380546001600160a01b0319166001600160a01b03929092169190911790556123206060860160408701614fcb565b606980546001600160a01b0392909216600160401b02600160401b600160e01b031990921691909117905561235b60c0860160a08701614fcb565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa7113568490556123b860e0860160c08701614d63565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556123ef6040860160208701614d63565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561242b6080860160608701614d63565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b1990921691909117905561246760a08601608087016151f9565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e61248f84826159ad565b50606f61249c83826159ad565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124d2614064565b8015612518576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b0316331461254d5760405162461bcd60e51b8152600401610a85906156f6565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161100c565b6073546001600160a01b031633146125d15760405162461bcd60e51b8152600401610a85906156f6565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a19060200161100c565b612627613a1c565b61263160006140d4565b565b6033546001600160a01b031633146128a0576072546000906001600160401b03161561268457506072546001600160401b03908116600090815260716020526040902054600160401b900416612692565b506069546001600160401b03165b80826001600160401b0316116127105760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c7265616479207665726966696564000000006064820152608401610a85565b6068546001600160401b03600160401b90910481169083161180159061275257506001600160401b038083166000908152606760205260409020600101541615155b6127dd5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a401610a85565b6001600160401b03808316600090815260676020526040902060010154429161280b9162093a80911661574f565b6001600160401b0316111561289e5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a401610a85565b505b6128a8614126565b50565b60655460ff16156128ce5760405162461bcd60e51b8152600401610a85906157e5565b6128df898989898989898989614196565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1612518614126565b6073546001600160a01b031633146129645760405162461bcd60e51b8152600401610a85906156f6565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061100c90831515815260200190565b6129b9613a1c565b6069805467ffffffffffffffff19166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a539190615679565b90506000612a5f612c52565b6068546001600160401b03600160401b8204811691612a8f91600160801b8204811691600160c01b900416615909565b612a99919061574f565b612aa39190615909565b6001600160401b03169050612ab88183615a6c565b9250505090565b612ac7613a1c565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612b1e5760405162461bcd60e51b8152600401610a85906156f6565b62093a806001600160401b0382161115612b4a5760405162461bcd60e51b8152600401610a859061577a565b60655460ff16612bdf576072546001600160401b03600160801b909104811690821610612bdf5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f776572006064820152608401610a85565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c759060200161100c565b612c42613a1c565b606f612c4e82826159ad565b5050565b6072546000906001600160401b031615612c8f57506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612cc95760405162461bcd60e51b8152600401610a85906156f6565b606e612cd582826159ad565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161100c9190614c23565b6073546001600160a01b03163314612d2f5760405162461bcd60e51b8152600401610a85906156f6565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f9060200161100c565b60655460ff1615612da95760405162461bcd60e51b8152600401610a85906157e5565b606c54600160a01b900460ff161515600114612dd75760405162461bcd60e51b8152600401610a8590615a80565b805180612e3a5760405162461bcd60e51b815260206004820152603d6024820152600080516020615d9c83398151915260448201527f3a204d75737420666f726365206174206c6561737420312062617463680000006064820152608401610a85565b6103e88110612eab5760405162461bcd60e51b81526020600482015260436024820152600080516020615d9c83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a401610a85565b6068546001600160401b03600160c01b8204811691612ed3918491600160801b900416615ae9565b1115612f2d5760405162461bcd60e51b81526020600482015260356024820152600080516020615d9c8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b6064820152608401610a85565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015613159576000868281518110612f7a57612f7a61584d565b602002602001015190508380612f8f90615863565b945050600081600001518051906020012082602001518360400151604051602001612fbc93929190615889565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461305b5760405162461bcd60e51b81526020600482015260426024820152600080516020615d9c83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a401610a85565b613066600188615931565b83036130fb5742620697808360400151613080919061574f565b6001600160401b031611156130fb5760405162461bcd60e51b81526020600482015260476024820152600080516020615d9c83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a401610a85565b815180516020918201208184015160405161311e938893929142913391016158ac565b604051602081830303815290604052805190602001209350858061314190615863565b96505050508080613151906158f0565b915050612f5e565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166132725760405162461bcd60e51b8152600401610a8590615b01565b6073546001600160a01b0316331461329c5760405162461bcd60e51b8152600401610a85906156f6565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156132ec57600080fd5b505af1158015613300573d6000803e3d6000fd5b50505050612631614811565b613314613a1c565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133a85760405162461bcd60e51b8152600401610a8590615b5e565b6133b9898989898989898989614196565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561340457607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561344a57600080fd5b505af115801561345e573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff16156134e65760405162461bcd60e51b8152600401610a85906157e5565b606c54600160a01b900460ff1615156001146135145760405162461bcd60e51b8152600401610a8590615a80565b600061351f60745490565b9050818111156135845760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b6064820152608401610a85565b620493e08351106135f55760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b6064820152608401610a85565b60655461361490600160581b90046001600160a01b0316333084613a76565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa15801561365e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136829190615679565b60688054919250600160c01b9091046001600160401b03169060186136a683615863565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016136e793929190615889565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361378b57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26137e6565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516137dd93929190615bbb565b60405180910390a25b50505050565b606a546001600160a01b031633146138165760405162461bcd60e51b8152600401610a8590615b5e565b6138268888888888888888613b81565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561387157607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156138b757600080fd5b505af11580156138cb573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e8c565b6073546001600160a01b031633146139365760405162461bcd60e51b8152600401610a85906156f6565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca9060200161100c565b61398c613a1c565b6001600160a01b0381166139f15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a85565b6128a8816140d4565b613a02613a1c565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b031633146126315760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a85565b6040516001600160a01b03808516602483015283166044820152606481018290526137e69085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614868565b6072546001600160401b03600160401b820481169116111561263157607254600090613b1e90600160401b90046001600160401b0316600161574f565b9050613b29816111bd565b156128a857607254600090600290613b4b9084906001600160401b0316615909565b613b559190615bee565b613b5f908361574f565b9050613b6a816111bd565b15613b7857612c4e81611e9e565b612c4e82611e9e565b600080613b8c612c52565b90506001600160401b038a1615613c20576072546001600160401b03908116908b161115613bcc5760405162461bcd60e51b8152600401610a85906153f9565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c1a5760405162461bcd60e51b8152600401610a859061547c565b50613c8a565b6001600160401b0389166000908152606d6020526040902054915081613c585760405162461bcd60e51b8152600401610a85906154ee565b806001600160401b0316896001600160401b03161115613c8a5760405162461bcd60e51b8152600401610a8590615557565b806001600160401b0316886001600160401b031611613cbb5760405162461bcd60e51b8152600401610a85906155da565b6000613cca8a8a8a868b611017565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051613cff919061565d565b602060405180830381855afa158015613d1c573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613d3f9190615679565b613d4991906156a8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613d8d918b918b918b9190600401615c14565b602060405180830381865afa158015613daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dce9190615c8e565b613e2d5760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20496e7660448201526930b634b210383937b7b360b11b6064820152608401610a85565b613e7033613e3b858d615909565b6001600160401b0316613e4c6129dc565b613e569190615948565b606554600160581b90046001600160a01b0316919061493f565b505050505050505050505050565b6000613e88612c52565b905081600080613e988484615909565b6001600160401b031690505b836001600160401b0316836001600160401b031614613f4a576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613ef4911642615931565b1115613f2f576001810154613f1990600160401b90046001600160401b031686615909565b613f2c906001600160401b031684615ae9565b92505b60010154600160401b90046001600160401b03169250613ea4565b6000613f568383615931565b905082811015613fd0576000613f6c8285615931565b9050600c8111613f7c5780613f7f565b600c5b9050613f8c816003615948565b613f9790600a615d8f565b606554613fb0908390600160481b900461ffff16615d8f565b607454613fbd9190615948565b613fc79190615a6c565b6074555061405c565b6000613fdc8483615931565b9050600c8111613fec5780613fef565b600c5b90506000613ffe826003615948565b61400990600a615d8f565b606554614022908490600160481b900461ffff16615d8f565b60745461402f9190615948565b6140399190615a6c565b90508060745460745461404c9190615948565b6140569190615a6c565b60745550505b505050505050565b600054610100900460ff166140cf5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a85565b612631335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561417657600080fd5b505af115801561418a573d6000803e3d6000fd5b5050505061263161496f565b60006001600160401b038a1615614311576072546001600160401b03908116908b1611156142555760405162461bcd60e51b815260206004820152606c6024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c401610a85565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b909204161461430b5760405162461bcd60e51b81526020600482015260606024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a401610a85565b50614465565b506001600160401b0387166000908152606d6020526040902054806143b25760405162461bcd60e51b81526020600482015260576024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a401610a85565b6069546001600160401b0390811690891611156144655760405162461bcd60e51b81526020600482015260716024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c401610a85565b6072546001600160401b03908116908a16118015906144955750896001600160401b0316896001600160401b0316115b80156144b657506072546001600160401b03600160401b9091048116908a16115b61452e5760405162461bcd60e51b815260206004820152604f6024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a401610a85565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146145ee5760405162461bcd60e51b815260206004820152606a6024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c401610a85565b60006145fd898989858a611017565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051614632919061565d565b602060405180830381855afa15801561464f573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906146729190615679565b61467c91906156a8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916146c0918a918a918a9190600401615c14565b602060405180830381865afa1580156146dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147019190615c8e565b6147615760405162461bcd60e51b815260206004820152603e6024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a20496e76616c69642070726f6f6600006064820152608401610a85565b6001600160401b038b16600090815260716020526040902060020154879003613e705760405162461bcd60e51b81526020600482015260626024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c401610a85565b60655460ff166148335760405162461bcd60e51b8152600401610a8590615b01565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006148bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166149ca9092919063ffffffff16565b80519091501561493a57808060200190518101906148db9190615c8e565b61493a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a85565b505050565b6040516001600160a01b03831660248201526044810182905261493a90849063a9059cbb60e01b90606401613aaa565b60655460ff16156149925760405162461bcd60e51b8152600401610a85906157e5565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60606149d984846000856149e1565b949350505050565b606082471015614a425760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a85565b600080866001600160a01b03168587604051614a5e919061565d565b60006040518083038185875af1925050503d8060008114614a9b576040519150601f19603f3d011682016040523d82523d6000602084013e614aa0565b606091505b5091509150614ab187838387614abc565b979650505050505050565b60608315614b2b578251600003614b24576001600160a01b0385163b614b245760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a85565b50816149d9565b6149d98383815115614b405781518083602001fd5b8060405162461bcd60e51b8152600401610a859190614c23565b80356001600160401b0381168114614b7157600080fd5b919050565b600080600080600060a08688031215614b8e57600080fd5b614b9786614b5a565b9450614ba560208701614b5a565b9350614bb360408701614b5a565b94979396509394606081013594506080013592915050565b60005b83811015614be6578181015183820152602001614bce565b838111156137e65750506000910152565b60008151808452614c0f816020860160208601614bcb565b601f01601f19169290920160200192915050565b602081526000614c366020830184614bf7565b9392505050565b8060408101831015614c4e57600080fd5b92915050565b8060808101831015614c4e57600080fd5b6000806000806000806000806101a0898b031215614c8257600080fd5b614c8b89614b5a565b9750614c9960208a01614b5a565b9650614ca760408a01614b5a565b95506060890135945060808901359350614cc48a60a08b01614c3d565b9250614cd38a60e08b01614c54565b9150614ce38a6101608b01614c3d565b90509295985092959890939650565b600060208284031215614d0457600080fd5b813561ffff81168114614c3657600080fd5b600080600080600060a08688031215614d2e57600080fd5b614d3786614b5a565b9450614d4560208701614b5a565b94979496505050506040830135926060810135926080909101359150565b600060208284031215614d7557600080fd5b614c3682614b5a565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614db657614db6614d7e565b60405290565b604051606081016001600160401b0381118282101715614db657614db6614d7e565b604051601f8201601f191681016001600160401b0381118282101715614e0657614e06614d7e565b604052919050565b60006001600160401b03821115614e2757614e27614d7e565b5060051b60200190565b600082601f830112614e4257600080fd5b81356001600160401b03811115614e5b57614e5b614d7e565b614e6e601f8201601f1916602001614dde565b818152846020838601011115614e8357600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614eb357600080fd5b82356001600160401b0380821115614eca57600080fd5b818501915085601f830112614ede57600080fd5b8135614ef1614eec82614e0e565b614dde565b81815260059190911b83018401908481019088831115614f1057600080fd5b8585015b83811015614fa957803585811115614f2c5760008081fd5b86016080818c03601f1901811315614f445760008081fd5b614f4c614d94565b8983013588811115614f5e5760008081fd5b614f6c8e8c83870101614e31565b8252506040808401358b8301526060614f86818601614b5a565b82840152614f95848601614b5a565b908301525085525050918601918601614f14565b5098975050505050505050565b6001600160a01b03811681146128a857600080fd5b600060208284031215614fdd57600080fd5b8135614c3681614fb6565b600080600080600060a0868803121561500057600080fd5b8535945060208601356001600160401b0381111561501d57600080fd5b61502988828901614e31565b9450506040860135925061503f60608701614b5a565b9150608086013561504f81614fb6565b809150509295509295909350565b600080600080600080600080888a036101c081121561507b57600080fd5b893561508681614fb6565b985060208a013561509681614fb6565b975060408a01356150a681614fb6565b965060608a01356150b681614fb6565b955060e0607f19820112156150ca57600080fd5b5060808901935061016089013592506101808901356001600160401b03808211156150f457600080fd5b6151008c838d01614e31565b93506101a08b013591508082111561511757600080fd5b506151248b828c01614e31565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c03121561515357600080fd5b61515c8a614b5a565b985061516a60208b01614b5a565b975061517860408b01614b5a565b965061518660608b01614b5a565b955060808a0135945060a08a013593506151a38b60c08c01614c3d565b92506151b38b6101008c01614c54565b91506151c38b6101808c01614c3d565b90509295985092959850929598565b6000602082840312156151e457600080fd5b5035919050565b80151581146128a857600080fd5b60006020828403121561520b57600080fd5b8135614c36816151eb565b60006020828403121561522857600080fd5b81356001600160401b0381111561523e57600080fd5b6149d984828501614e31565b6000602080838503121561525d57600080fd5b82356001600160401b038082111561527457600080fd5b818501915085601f83011261528857600080fd5b8135615296614eec82614e0e565b81815260059190911b830184019084810190888311156152b557600080fd5b8585015b83811015614fa9578035858111156152d15760008081fd5b86016060818c03601f19018113156152e95760008081fd5b6152f1614dbc565b89830135888111156153035760008081fd5b6153118e8c83870101614e31565b8252506040808401358b830152615329838501614b5a565b90820152855250509186019186016152b9565b6000806000806080858703121561535257600080fd5b61535b85614b5a565b93506020850135925061537060408601614b5a565b915061537e60608601614b5a565b905092959194509250565b6000806040838503121561539c57600080fd5b82356001600160401b038111156153b257600080fd5b6153be85828601614e31565b95602094909401359450505050565b600080604083850312156153e057600080fd5b823591506153f060208401614b5a565b90509250929050565b60208082526058908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2070656e60408201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560608201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608082015260a00190565b6020808252604c908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760608201526b040e6e8c2e8ca40c4c2e8c6d60a31b608082015260a00190565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786060820152621a5cdd60ea1b608082015260a00190565b6020808252605d908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060608201527f7468616e2063757272656e744c61737456657269666965644261746368000000608082015260a00190565b60208082526057908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2066696e60408201527f616c4e65774261746368206d75737420626520626967676572207468616e206360608201527f757272656e744c61737456657269666965644261746368000000000000000000608082015260a00190565b6000825161566f818460208701614bcb565b9190910192915050565b60006020828403121561568b57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826156b7576156b7615692565b500690565b600181811c908216806156d057607f821691505b6020821081036156f057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561577157615771615739565b01949350505050565b60208082526045908201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361587f5761587f615739565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b60006001820161590257615902615739565b5060010190565b60006001600160401b038381169083168181101561592957615929615739565b039392505050565b60008282101561594357615943615739565b500390565b600081600019048311821515161561596257615962615739565b500290565b601f82111561493a57600081815260208120601f850160051c8101602086101561598e5750805b601f850160051c820191505b8181101561405c5782815560010161599a565b81516001600160401b038111156159c6576159c6614d7e565b6159da816159d484546156bc565b84615967565b602080601f831160018114615a0f57600084156159f75750858301515b600019600386901b1c1916600185901b17855561405c565b600085815260208120601f198616915b82811015615a3e57888601518255948401946001909101908401615a1f565b5085821015615a5c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615a7b57615a7b615692565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b60008219821115615afc57615afc615739565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b0383166020820152606060408201819052600090615be590830184614bf7565b95945050505050565b60006001600160401b0380841680615c0857615c08615692565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615c4c57848483379084018281529284019290600101615c2c565b5050828760c0870137610100850181815286935091505b6001811015615c82578251825260209283019290910190600101615c63565b50505095945050505050565b600060208284031215615ca057600080fd5b8151614c36816151eb565b600181815b80851115615ce6578160001904821115615ccc57615ccc615739565b80851615615cd957918102915b93841c9390800290615cb0565b509250929050565b600082615cfd57506001614c4e565b81615d0a57506000614c4e565b8160018114615d205760028114615d2a57615d46565b6001915050614c4e565b60ff841115615d3b57615d3b615739565b50506001821b614c4e565b5060208310610133831016604e8410600b8410161715615d69575081810a614c4e565b615d738383615cab565b8060001904821115615d8757615d87615739565b029392505050565b6000614c368383615cee56fe506f6c79676f6e5a6b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a6b45564d3a3a70726f76654e6f6e44657465726d696e6973a26469706673582212203b896811df785f2c935e7d55262e5d849cb41ca125cff902749e283a0cbe365c64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106104125760003560e01c806396dc3d3911610220578063cfa8ed4711610130578063e7a7ed02116100b8578063f14916d611610087578063f14916d6146109e3578063f2fde38b146109f6578063f851a44014610a09578063f8b823e414610a1c578063fe16564f14610a2557600080fd5b8063e7a7ed0214610990578063e8bf92ed146109aa578063eaeb077b146109bd578063edc41121146109d057600080fd5b8063d939b315116100ff578063d939b3151461093f578063dbc1697614610959578063e0d1744114610961578063e11f3f1814610974578063e217cfd61461098757600080fd5b8063cfa8ed47146108eb578063d02103ca14610905578063d8d1091b14610918578063d8f54db01461092b57600080fd5b8063ab9fc5ef116101b3578063b6b0b09711610182578063b6b0b09714610890578063c0cad302146108aa578063c0ed84e0146108bd578063c89e42df146108c5578063cf136306146108d857600080fd5b8063ab9fc5ef146107e4578063adc879e9146107ee578063afd23cbe14610808578063b4d63f581461083057600080fd5b80639eb831b9116101ef5780639eb831b9146107a95780639f0d039d146107b1578063a3c573eb146107b9578063aa58bad6146107cc57600080fd5b806396dc3d391461076857806399f5634e1461077b5780639b796760146107835780639c9f3dfe1461079657600080fd5b80634a910e6a11610326578063715018a6116102ae578063837a47381161027d578063837a4738146106b2578063841b24d7146107205780638b48931e1461073a5780638c4a0af7146107445780638da5cb5b1461075757600080fd5b8063715018a6146106715780637215541a1461067957806375c508b31461068c5780637fcb36531461069f57600080fd5b8063574f649e116102f5578063574f649e1461060557806360943d6a146106185780636b8616ce1461062b5780636ff512cc1461064b578063704b6c021461065e57600080fd5b80634a910e6a146105b75780635392c5e0146105ca578063542028d5146105ea5780635437988d146105f257600080fd5b80632d0889d3116103a9578063423fa85611610378578063423fa85614610543578063456052671461055d578063458c0477146105775780634834a3431461058a5780634a1a89a71461059d57600080fd5b80632d0889d314610500578063383b3be81461050a578063394218e91461051d5780633c1582671461053057600080fd5b80631816b7e5116103e55780631816b7e51461048457806319d8ac6114610497578063220d7899146104c257806329878983146104d557600080fd5b80630eaa86ea14610417578063107bf28c1461043d57806310a01a721461045257806315064c9614610467575b600080fd5b61042a610425366004614b76565b610a38565b6040519081526020015b60405180910390f35b610445610c19565b6040516104349190614c23565b610465610460366004614c65565b610ca7565b005b6065546104749060ff1681565b6040519015158152602001610434565b610465610492366004614cf2565b610ef1565b6068546104aa906001600160401b031681565b6040516001600160401b039091168152602001610434565b6104456104d0366004614d16565b611017565b606a546104e8906001600160a01b031681565b6040516001600160a01b039091168152602001610434565b61042a620493e081565b610474610518366004614d63565b6111bd565b61046561052b366004614d63565b611204565b61046561053e366004614ea0565b611353565b6068546104aa90600160401b90046001600160401b031681565b6068546104aa90600160801b90046001600160401b031681565b6072546104aa906001600160401b031681565b610465610598366004614c65565b611b55565b6072546104aa90600160401b90046001600160401b031681565b6104656105c5366004614d63565b611e9e565b61042a6105d8366004614d63565b606d6020526000908152604090205481565b610445612139565b610465610600366004614fcb565b612146565b61042a610613366004614fe8565b612170565b61046561062636600461505d565b6121b3565b61042a610639366004614d63565b60666020526000908152604090205481565b610465610659366004614fcb565b612523565b61046561066c366004614fcb565b6125a7565b61046561261f565b610465610687366004614d63565b612633565b61046561069a366004615134565b6128ab565b6069546104aa906001600160401b031681565b6106f56106c03660046151d2565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610434565b6072546104aa90600160c01b90046001600160401b031681565b6104aa62093a8081565b6104656107523660046151f9565b61293a565b6033546001600160a01b03166104e8565b610465610776366004614d63565b6129b1565b61042a6129dc565b610465610791366004614d63565b612abf565b6104656107a4366004614d63565b612af4565b61042a600c81565b60745461042a565b6070546104e8906001600160a01b031681565b6065546104aa9061010090046001600160401b031681565b6104aa6206978081565b606c546104aa90600160a81b90046001600160401b031681565b60655461081d90600160481b900461ffff1681565b60405161ffff9091168152602001610434565b61086b61083e366004614d63565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610434565b6065546104e890600160581b90046001600160a01b031681565b6104656108b8366004615216565b612c3a565b6104aa612c52565b6104656108d3366004615216565b612c9f565b6104656108e6366004614d63565b612d05565b6069546104e890600160401b90046001600160a01b031681565b606c546104e8906001600160a01b031681565b61046561092636600461524a565b612d86565b606c5461047490600160a01b900460ff1681565b6072546104aa90600160801b90046001600160401b031681565b610465613250565b61046561096f36600461533c565b61330c565b610465610982366004615134565b61337e565b6104aa6103e881565b6068546104aa90600160c01b90046001600160401b031681565b606b546104e8906001600160a01b031681565b6104656109cb366004615389565b6134c3565b6104656109de366004614c65565b6137ec565b6104656109f1366004614fcb565b61390c565b610465610a04366004614fcb565b613984565b6073546104e8906001600160a01b031681565b61042a60745481565b610465610a333660046153cd565b6139fa565b6000806000610a45612c52565b90506001600160401b03881615610ae2576072546001600160401b039081169089161115610a8e5760405162461bcd60e51b8152600401610a85906153f9565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610adc5760405162461bcd60e51b8152600401610a859061547c565b50610b4c565b6001600160401b0387166000908152606d6020526040902054915081610b1a5760405162461bcd60e51b8152600401610a85906154ee565b806001600160401b0316876001600160401b03161115610b4c5760405162461bcd60e51b8152600401610a8590615557565b806001600160401b0316866001600160401b031611610b7d5760405162461bcd60e51b8152600401610a85906155da565b6000610b8c8888888689611017565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051610bc1919061565d565b602060405180830381855afa158015610bde573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c019190615679565b610c0b91906156a8565b9a9950505050505050505050565b606f8054610c26906156bc565b80601f0160208091040260200160405190810160405280929190818152602001828054610c52906156bc565b8015610c9f5780601f10610c7457610100808354040283529160200191610c9f565b820191906000526020600020905b815481529060010190602001808311610c8257829003601f168201915b505050505081565b610caf613a1c565b600080610cba612c52565b90506001600160401b038a1615610d4e576072546001600160401b03908116908b161115610cfa5760405162461bcd60e51b8152600401610a85906153f9565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610d485760405162461bcd60e51b8152600401610a859061547c565b50610db8565b6001600160401b0389166000908152606d6020526040902054915081610d865760405162461bcd60e51b8152600401610a85906154ee565b806001600160401b0316896001600160401b03161115610db85760405162461bcd60e51b8152600401610a8590615557565b806001600160401b0316886001600160401b031611610de95760405162461bcd60e51b8152600401610a85906155da565b6000610df88a8a8a868b611017565b6069805467ffffffffffffffff19166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610e4657607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610e8c57600080fd5b505af1158015610ea0573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610f1b5760405162461bcd60e51b8152600401610a85906156f6565b6103e88161ffff16118015610f3557506104008161ffff16105b610fba5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a401610a85565b606580546affff0000000000000000001916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b0380861660008181526067602052604080822054938816825290205460609291158061104957508115155b6110bd576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a85565b80611132576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f742065786973746064820152608401610a85565b606c54604080516bffffffffffffffffffffffff193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b03828116600090815260716020526040812054909242926111f392600160801b9092048116911661574f565b6001600160401b0316111592915050565b6073546001600160a01b0316331461122e5760405162461bcd60e51b8152600401610a85906156f6565b62093a806001600160401b038216111561125a5760405162461bcd60e51b8152600401610a859061577a565b60655460ff166112fd576072546001600160401b03600160c01b9091048116908216106112fd5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a206e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a401610a85565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a19060200161100c565b60655460ff16156113765760405162461bcd60e51b8152600401610a85906157e5565b606954600160401b90046001600160a01b031633146113fd5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a206f6e6c7920747275737465642073657175656e6365720000000000006064820152608401610a85565b8051806114725760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e636520312062617463680000006064820152608401610a85565b6103e881106114eb576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e7920626174636865736064820152608401610a85565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b8581101561197957600087828151811061153e5761153e61584d565b60200260200101519050600081606001516001600160401b031611156116f7578361156881615863565b94505060008160000151805190602001208260200151836060015160405160200161159593929190615889565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461163b5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732064617461206d757374206d617463680000006064820152608401610a85565b81606001516001600160401b031682604001516001600160401b031610156116f15760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204660448201527f6f7263656420626174636865732074696d657374616d70206d7573742062652060648201527f626967676572206f7220657175616c207468616e206d696e0000000000000000608482015260a401610a85565b5061186c565b602081015115806117805750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b36329161173a9160040190815260200190565b6020604051808303816000875af1158015611759573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177d9190615679565b15155b6117f25760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d7573742065786973740000000000006064820152608401610a85565b805151620493e01161186c5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f770000000000006064820152608401610a85565b856001600160401b031681604001516001600160401b03161015801561189f57504281604001516001600160401b031611155b6119115760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e67650000006064820152608401610a85565b805180516020918201208183015160408085015190516119389488949392913391016158ac565b604051602081830303815290604052805190602001209250848061195b90615863565b95505080604001519550508080611971906158f0565b915050611522565b506068546001600160401b03600160c01b909104811690831611156119fe5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a20466044820152746f7263652062617463686573206f766572666c6f7760581b6064820152608401610a85565b606854600090611a1e90600160801b90046001600160401b031684615909565b611a31906001600160401b031687615931565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611b0690339030908490611aeb9190615948565b606554600160581b90046001600160a01b0316929190613a76565b611b0e613ae1565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b785760405162461bcd60e51b8152600401610a85906157e5565b6072546001600160401b038781166000908152606760205260409020600101544292611baf92600160c01b9091048116911661574f565b6001600160401b03161115611c385760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2074727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a401610a85565b6103e8611c458888615909565b6001600160401b031610611cc15760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2063616e60448201527f6e6f74207665726966792074686174206d616e792062617463686573000000006064820152608401610a85565b611cd18888888888888888613b81565b611cda86613e7e565b607254600160801b90046001600160401b0316600003611da2576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615611d3f57607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d8557600080fd5b505af1158015611d99573d6000803e3d6000fd5b50505050611e53565b611daa613ae1565b607280546001600160401b0316906000611dc383615863565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611ecb57506072546001600160401b03600160401b9091048116908216115b8015611ee657506072546001600160401b0390811690821611155b611f645760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a401610a85565b606a546001600160a01b0316331461200e57611f7f816111bd565b61200e5760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a401610a85565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b1580156120cb57600080fd5b505af11580156120df573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e846002015460405161212c91815260200190565b60405180910390a3505050565b606e8054610c26906156bc565b61214e613a1c565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b60008585805190602001208585856040516020016121929594939291906158ac565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff16158080156121d35750600054600160ff909116105b806121ed5750303b1580156121ed575060005460ff166001145b6122505760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a85565b6000805460ff191660011790558015612273576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c811691909117909255606580547fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b8c851602179055606b805482168a8416179055607080549091169188169190911790556122f06020860186614fcb565b607380546001600160a01b0319166001600160a01b03929092169190911790556123206060860160408701614fcb565b606980546001600160a01b0392909216600160401b02600160401b600160e01b031990921691909117905561235b60c0860160a08701614fcb565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa7113568490556123b860e0860160c08701614d63565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556123ef6040860160208701614d63565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561242b6080860160608701614d63565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b1990921691909117905561246760a08601608087016151f9565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e61248f84826159ad565b50606f61249c83826159ad565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124d2614064565b8015612518576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b0316331461254d5760405162461bcd60e51b8152600401610a85906156f6565b60698054600160401b600160e01b031916600160401b6001600160a01b038416908102919091179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc09060200161100c565b6073546001600160a01b031633146125d15760405162461bcd60e51b8152600401610a85906156f6565b607380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a19060200161100c565b612627613a1c565b61263160006140d4565b565b6033546001600160a01b031633146128a0576072546000906001600160401b03161561268457506072546001600160401b03908116600090815260716020526040902054600160401b900416612692565b506069546001600160401b03165b80826001600160401b0316116127105760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a20426174636820616c7265616479207665726966696564000000006064820152608401610a85565b6068546001600160401b03600160401b90910481169083161180159061275257506001600160401b038083166000908152606760205260409020600101541615155b6127dd5760405162461bcd60e51b815260206004820152605060248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a401610a85565b6001600160401b03808316600090815260676020526040902060010154429161280b9162093a80911661574f565b6001600160401b0316111561289e5760405162461bcd60e51b815260206004820152604d60248201527f506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e63795360448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a401610a85565b505b6128a8614126565b50565b60655460ff16156128ce5760405162461bcd60e51b8152600401610a85906157e5565b6128df898989898989898989614196565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1612518614126565b6073546001600160a01b031633146129645760405162461bcd60e51b8152600401610a85906156f6565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe69061100c90831515815260200190565b6129b9613a1c565b6069805467ffffffffffffffff19166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81523060048201526000918291600160581b9091046001600160a01b0316906370a0823190602401602060405180830381865afa158015612a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a539190615679565b90506000612a5f612c52565b6068546001600160401b03600160401b8204811691612a8f91600160801b8204811691600160c01b900416615909565b612a99919061574f565b612aa39190615909565b6001600160401b03169050612ab88183615a6c565b9250505090565b612ac7613a1c565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612b1e5760405162461bcd60e51b8152600401610a85906156f6565b62093a806001600160401b0382161115612b4a5760405162461bcd60e51b8152600401610a859061577a565b60655460ff16612bdf576072546001600160401b03600160801b909104811690821610612bdf5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a206e65772074696d656f7574206d757374206265206c6f776572006064820152608401610a85565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c759060200161100c565b612c42613a1c565b606f612c4e82826159ad565b5050565b6072546000906001600160401b031615612c8f57506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612cc95760405162461bcd60e51b8152600401610a85906156f6565b606e612cd582826159ad565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b208160405161100c9190614c23565b6073546001600160a01b03163314612d2f5760405162461bcd60e51b8152600401610a85906156f6565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f9060200161100c565b60655460ff1615612da95760405162461bcd60e51b8152600401610a85906157e5565b606c54600160a01b900460ff161515600114612dd75760405162461bcd60e51b8152600401610a8590615a80565b805180612e3a5760405162461bcd60e51b815260206004820152603d6024820152600080516020615d9c83398151915260448201527f3a204d75737420666f726365206174206c6561737420312062617463680000006064820152608401610a85565b6103e88110612eab5760405162461bcd60e51b81526020600482015260436024820152600080516020615d9c83398151915260448201527f65733a2063616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a401610a85565b6068546001600160401b03600160c01b8204811691612ed3918491600160801b900416615ae9565b1115612f2d5760405162461bcd60e51b81526020600482015260356024820152600080516020615d9c8339815191526044820152740e88119bdc98d94818985d18da081a5b9d985b1a59605a1b6064820152608401610a85565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015613159576000868281518110612f7a57612f7a61584d565b602002602001015190508380612f8f90615863565b945050600081600001518051906020012082602001518360400151604051602001612fbc93929190615889565b60408051601f1981840301815291815281516020928301206001600160401b03881660009081526066909352912054909150811461305b5760405162461bcd60e51b81526020600482015260426024820152600080516020615d9c83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a401610a85565b613066600188615931565b83036130fb5742620697808360400151613080919061574f565b6001600160401b031611156130fb5760405162461bcd60e51b81526020600482015260476024820152600080516020615d9c83398151915260448201527f3a20466f72636564206261746368206973206e6f7420696e2074696d656f7574606482015266081c195c9a5bd960ca1b608482015260a401610a85565b815180516020918201208184015160405161311e938893929142913391016158ac565b604051602081830303815290604052805190602001209350858061314190615863565b96505050508080613151906158f0565b915050612f5e565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b031990921691909117928616850292909217909155855477ffffffffffffffffffffffffffffffff0000000000000000191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166132725760405162461bcd60e51b8152600401610a8590615b01565b6073546001600160a01b0316331461329c5760405162461bcd60e51b8152600401610a85906156f6565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156132ec57600080fd5b505af1158015613300573d6000803e3d6000fd5b50505050612631614811565b613314613a1c565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133a85760405162461bcd60e51b8152600401610a8590615b5e565b6133b9898989898989898989614196565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561340457607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561344a57600080fd5b505af115801561345e573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff16156134e65760405162461bcd60e51b8152600401610a85906157e5565b606c54600160a01b900460ff1615156001146135145760405162461bcd60e51b8152600401610a8590615a80565b600061351f60745490565b9050818111156135845760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a206e6f7420656e6044820152696f756768206d6174696360b01b6064820152608401610a85565b620493e08351106135f55760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b6064820152608401610a85565b60655461361490600160581b90046001600160a01b0316333084613a76565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa15801561365e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136829190615679565b60688054919250600160c01b9091046001600160401b03169060186136a683615863565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050838051906020012081426040516020016136e793929190615889565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361378b57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26137e6565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516137dd93929190615bbb565b60405180910390a25b50505050565b606a546001600160a01b031633146138165760405162461bcd60e51b8152600401610a8590615b5e565b6138268888888888888888613b81565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561387157607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156138b757600080fd5b505af11580156138cb573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e8c565b6073546001600160a01b031633146139365760405162461bcd60e51b8152600401610a85906156f6565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca9060200161100c565b61398c613a1c565b6001600160a01b0381166139f15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a85565b6128a8816140d4565b613a02613a1c565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b031633146126315760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a85565b6040516001600160a01b03808516602483015283166044820152606481018290526137e69085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614868565b6072546001600160401b03600160401b820481169116111561263157607254600090613b1e90600160401b90046001600160401b0316600161574f565b9050613b29816111bd565b156128a857607254600090600290613b4b9084906001600160401b0316615909565b613b559190615bee565b613b5f908361574f565b9050613b6a816111bd565b15613b7857612c4e81611e9e565b612c4e82611e9e565b600080613b8c612c52565b90506001600160401b038a1615613c20576072546001600160401b03908116908b161115613bcc5760405162461bcd60e51b8152600401610a85906153f9565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c1a5760405162461bcd60e51b8152600401610a859061547c565b50613c8a565b6001600160401b0389166000908152606d6020526040902054915081613c585760405162461bcd60e51b8152600401610a85906154ee565b806001600160401b0316896001600160401b03161115613c8a5760405162461bcd60e51b8152600401610a8590615557565b806001600160401b0316886001600160401b031611613cbb5760405162461bcd60e51b8152600401610a85906155da565b6000613cca8a8a8a868b611017565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051613cff919061565d565b602060405180830381855afa158015613d1c573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613d3f9190615679565b613d4991906156a8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613d8d918b918b918b9190600401615c14565b602060405180830381865afa158015613daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dce9190615c8e565b613e2d5760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20496e7660448201526930b634b210383937b7b360b11b6064820152608401610a85565b613e7033613e3b858d615909565b6001600160401b0316613e4c6129dc565b613e569190615948565b606554600160581b90046001600160a01b0316919061493f565b505050505050505050505050565b6000613e88612c52565b905081600080613e988484615909565b6001600160401b031690505b836001600160401b0316836001600160401b031614613f4a576001600160401b03808516600090815260676020526040902060655460018201549192610100909104811691613ef4911642615931565b1115613f2f576001810154613f1990600160401b90046001600160401b031686615909565b613f2c906001600160401b031684615ae9565b92505b60010154600160401b90046001600160401b03169250613ea4565b6000613f568383615931565b905082811015613fd0576000613f6c8285615931565b9050600c8111613f7c5780613f7f565b600c5b9050613f8c816003615948565b613f9790600a615d8f565b606554613fb0908390600160481b900461ffff16615d8f565b607454613fbd9190615948565b613fc79190615a6c565b6074555061405c565b6000613fdc8483615931565b9050600c8111613fec5780613fef565b600c5b90506000613ffe826003615948565b61400990600a615d8f565b606554614022908490600160481b900461ffff16615d8f565b60745461402f9190615948565b6140399190615a6c565b90508060745460745461404c9190615948565b6140569190615a6c565b60745550505b505050505050565b600054610100900460ff166140cf5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a85565b612631335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561417657600080fd5b505af115801561418a573d6000803e3d6000fd5b5050505061263161496f565b60006001600160401b038a1615614311576072546001600160401b03908116908b1611156142555760405162461bcd60e51b815260206004820152606c6024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a2070656e64696e6753746174654e756d60648201527f206d757374206265206c657373206f7220657175616c207468616e206c61737460848201526b50656e64696e67537461746560a01b60a482015260c401610a85565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b909204161461430b5760405162461bcd60e51b81526020600482015260606024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206d61746368207468652070656e64696e67207374617465206261746368608482015260a401610a85565b50614465565b506001600160401b0387166000908152606d6020526040902054806143b25760405162461bcd60e51b81526020600482015260576024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d426174636820737460648201527f61746520726f6f7420646f6573206e6f74206578697374000000000000000000608482015260a401610a85565b6069546001600160401b0390811690891611156144655760405162461bcd60e51b81526020600482015260716024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a20696e69744e756d4261746368206d7560648201527f7374206265206c657373206f7220657175616c207468616e2063757272656e74608482015270098c2e6e8accae4d2ccd2cac884c2e8c6d607b1b60a482015260c401610a85565b6072546001600160401b03908116908a16118015906144955750896001600160401b0316896001600160401b0316115b80156144b657506072546001600160401b03600160401b9091048116908a16115b61452e5760405162461bcd60e51b815260206004820152604f6024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c50656e64696e6753746160648201526e1d19539d5b481a5b98dbdc9c9958dd608a1b608482015260a401610a85565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146145ee5760405162461bcd60e51b815260206004820152606a6024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a2066696e616c4e65774261746368206d60648201527f75737420626520657175616c207468616e2063757272656e744c6173745665726084820152690d2ccd2cac884c2e8c6d60b31b60a482015260c401610a85565b60006145fd898989858a611017565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600283604051614632919061565d565b602060405180830381855afa15801561464f573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906146729190615679565b61467c91906156a8565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916146c0918a918a918a9190600401615c14565b602060405180830381865afa1580156146dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147019190615c8e565b6147615760405162461bcd60e51b815260206004820152603e6024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a20496e76616c69642070726f6f6600006064820152608401610a85565b6001600160401b038b16600090815260716020526040902060020154879003613e705760405162461bcd60e51b81526020600482015260626024820152600080516020615dbc83398151915260448201527f74696350656e64696e6753746174653a2073746f72656420726f6f74206d757360648201527f7420626520646966666572656e74207468616e206e657720737461746520726f6084820152611bdd60f21b60a482015260c401610a85565b60655460ff166148335760405162461bcd60e51b8152600401610a8590615b01565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006148bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166149ca9092919063ffffffff16565b80519091501561493a57808060200190518101906148db9190615c8e565b61493a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a85565b505050565b6040516001600160a01b03831660248201526044810182905261493a90849063a9059cbb60e01b90606401613aaa565b60655460ff16156149925760405162461bcd60e51b8152600401610a85906157e5565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b60606149d984846000856149e1565b949350505050565b606082471015614a425760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a85565b600080866001600160a01b03168587604051614a5e919061565d565b60006040518083038185875af1925050503d8060008114614a9b576040519150601f19603f3d011682016040523d82523d6000602084013e614aa0565b606091505b5091509150614ab187838387614abc565b979650505050505050565b60608315614b2b578251600003614b24576001600160a01b0385163b614b245760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a85565b50816149d9565b6149d98383815115614b405781518083602001fd5b8060405162461bcd60e51b8152600401610a859190614c23565b80356001600160401b0381168114614b7157600080fd5b919050565b600080600080600060a08688031215614b8e57600080fd5b614b9786614b5a565b9450614ba560208701614b5a565b9350614bb360408701614b5a565b94979396509394606081013594506080013592915050565b60005b83811015614be6578181015183820152602001614bce565b838111156137e65750506000910152565b60008151808452614c0f816020860160208601614bcb565b601f01601f19169290920160200192915050565b602081526000614c366020830184614bf7565b9392505050565b8060408101831015614c4e57600080fd5b92915050565b8060808101831015614c4e57600080fd5b6000806000806000806000806101a0898b031215614c8257600080fd5b614c8b89614b5a565b9750614c9960208a01614b5a565b9650614ca760408a01614b5a565b95506060890135945060808901359350614cc48a60a08b01614c3d565b9250614cd38a60e08b01614c54565b9150614ce38a6101608b01614c3d565b90509295985092959890939650565b600060208284031215614d0457600080fd5b813561ffff81168114614c3657600080fd5b600080600080600060a08688031215614d2e57600080fd5b614d3786614b5a565b9450614d4560208701614b5a565b94979496505050506040830135926060810135926080909101359150565b600060208284031215614d7557600080fd5b614c3682614b5a565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614db657614db6614d7e565b60405290565b604051606081016001600160401b0381118282101715614db657614db6614d7e565b604051601f8201601f191681016001600160401b0381118282101715614e0657614e06614d7e565b604052919050565b60006001600160401b03821115614e2757614e27614d7e565b5060051b60200190565b600082601f830112614e4257600080fd5b81356001600160401b03811115614e5b57614e5b614d7e565b614e6e601f8201601f1916602001614dde565b818152846020838601011115614e8357600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614eb357600080fd5b82356001600160401b0380821115614eca57600080fd5b818501915085601f830112614ede57600080fd5b8135614ef1614eec82614e0e565b614dde565b81815260059190911b83018401908481019088831115614f1057600080fd5b8585015b83811015614fa957803585811115614f2c5760008081fd5b86016080818c03601f1901811315614f445760008081fd5b614f4c614d94565b8983013588811115614f5e5760008081fd5b614f6c8e8c83870101614e31565b8252506040808401358b8301526060614f86818601614b5a565b82840152614f95848601614b5a565b908301525085525050918601918601614f14565b5098975050505050505050565b6001600160a01b03811681146128a857600080fd5b600060208284031215614fdd57600080fd5b8135614c3681614fb6565b600080600080600060a0868803121561500057600080fd5b8535945060208601356001600160401b0381111561501d57600080fd5b61502988828901614e31565b9450506040860135925061503f60608701614b5a565b9150608086013561504f81614fb6565b809150509295509295909350565b600080600080600080600080888a036101c081121561507b57600080fd5b893561508681614fb6565b985060208a013561509681614fb6565b975060408a01356150a681614fb6565b965060608a01356150b681614fb6565b955060e0607f19820112156150ca57600080fd5b5060808901935061016089013592506101808901356001600160401b03808211156150f457600080fd5b6151008c838d01614e31565b93506101a08b013591508082111561511757600080fd5b506151248b828c01614e31565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c03121561515357600080fd5b61515c8a614b5a565b985061516a60208b01614b5a565b975061517860408b01614b5a565b965061518660608b01614b5a565b955060808a0135945060a08a013593506151a38b60c08c01614c3d565b92506151b38b6101008c01614c54565b91506151c38b6101808c01614c3d565b90509295985092959850929598565b6000602082840312156151e457600080fd5b5035919050565b80151581146128a857600080fd5b60006020828403121561520b57600080fd5b8135614c36816151eb565b60006020828403121561522857600080fd5b81356001600160401b0381111561523e57600080fd5b6149d984828501614e31565b6000602080838503121561525d57600080fd5b82356001600160401b038082111561527457600080fd5b818501915085601f83011261528857600080fd5b8135615296614eec82614e0e565b81815260059190911b830184019084810190888311156152b557600080fd5b8585015b83811015614fa9578035858111156152d15760008081fd5b86016060818c03601f19018113156152e95760008081fd5b6152f1614dbc565b89830135888111156153035760008081fd5b6153118e8c83870101614e31565b8252506040808401358b830152615329838501614b5a565b90820152855250509186019186016152b9565b6000806000806080858703121561535257600080fd5b61535b85614b5a565b93506020850135925061537060408601614b5a565b915061537e60608601614b5a565b905092959194509250565b6000806040838503121561539c57600080fd5b82356001600160401b038111156153b257600080fd5b6153be85828601614e31565b95602094909401359450505050565b600080604083850312156153e057600080fd5b823591506153f060208401614b5a565b90509250929050565b60208082526058908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2070656e60408201527f64696e6753746174654e756d206d757374206265206c657373206f722065717560608201527f616c207468616e206c61737450656e64696e6753746174650000000000000000608082015260a00190565b6020808252604c908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760608201526b040e6e8c2e8ca40c4c2e8c6d60a31b608082015260a00190565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786060820152621a5cdd60ea1b608082015260a00190565b6020808252605d908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e6960408201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060608201527f7468616e2063757272656e744c61737456657269666965644261746368000000608082015260a00190565b60208082526057908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2066696e60408201527f616c4e65774261746368206d75737420626520626967676572207468616e206360608201527f757272656e744c61737456657269666965644261746368000000000000000000608082015260a00190565b6000825161566f818460208701614bcb565b9190910192915050565b60006020828403121561568b57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826156b7576156b7615692565b500690565b600181811c908216806156d057607f821691505b6020821081036156f057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a206f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561577157615771615739565b01949350505050565b60208082526045908201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60408201527f656f75743a206578636565642068616c74206167677265676174696f6e2074696060820152641b595bdd5d60da1b608082015260a00190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b0380831681810361587f5761587f615739565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6bffffffffffffffffffffffff19166068820152607c0190565b60006001820161590257615902615739565b5060010190565b60006001600160401b038381169083168181101561592957615929615739565b039392505050565b60008282101561594357615943615739565b500390565b600081600019048311821515161561596257615962615739565b500290565b601f82111561493a57600081815260208120601f850160051c8101602086101561598e5750805b601f850160051c820191505b8181101561405c5782815560010161599a565b81516001600160401b038111156159c6576159c6614d7e565b6159da816159d484546156bc565b84615967565b602080601f831160018114615a0f57600084156159f75750858301515b600019600386901b1c1916600185901b17855561405c565b600085815260208120601f198616915b82811015615a3e57888601518255948401946001909101908401615a1f565b5085821015615a5c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615a7b57615a7b615692565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a206f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b60008219821115615afc57615afc615739565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a206f6e6c7920747275737465642041676772656761746f7200000000606082015260800190565b8381526001600160a01b0383166020820152606060408201819052600090615be590830184614bf7565b95945050505050565b60006001600160401b0380841680615c0857615c08615692565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615c4c57848483379084018281529284019290600101615c2c565b5050828760c0870137610100850181815286935091505b6001811015615c82578251825260209283019290910190600101615c63565b50505095945050505050565b600060208284031215615ca057600080fd5b8151614c36816151eb565b600181815b80851115615ce6578160001904821115615ccc57615ccc615739565b80851615615cd957918102915b93841c9390800290615cb0565b509250929050565b600082615cfd57506001614c4e565b81615d0a57506000614c4e565b8160018114615d205760028114615d2a57615d46565b6001915050614c4e565b60ff841115615d3b57615d3b615739565b50506001821b614c4e565b5060208310610133831016604e8410600b8410161715615d69575081810a614c4e565b615d738383615cab565b8060001904821115615d8757615d87615739565b029392505050565b6000614c368383615cee56fe506f6c79676f6e5a6b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a6b45564d3a3a70726f76654e6f6e44657465726d696e6973a26469706673582212203b896811df785f2c935e7d55262e5d849cb41ca125cff902749e283a0cbe365c64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50615f0980620000216000396000f3fe608060405234801561001057600080fd5b50600436106103925760003560e01c806396dc3d39116101e0578063cfa8ed4711610110578063e7a7ed02116100a8578063e7a7ed0214610905578063e8bf92ed1461091f578063eaeb077b14610932578063edc4112114610945578063f14916d614610958578063f2fde38b1461096b578063f851a4401461097e578063f8b823e414610991578063fe16564f1461099a57600080fd5b8063cfa8ed4714610860578063d02103ca1461087a578063d8d1091b1461088d578063d8f54db0146108a0578063d939b315146108b4578063dbc16976146108ce578063e0d17441146108d6578063e11f3f18146108e9578063e217cfd6146108fc57600080fd5b8063ab9fc5ef11610183578063ab9fc5ef14610759578063adc879e914610763578063afd23cbe1461077d578063b4d63f58146107a5578063b6b0b09714610805578063c0cad3021461081f578063c0ed84e014610832578063c89e42df1461083a578063cf1363061461084d57600080fd5b806396dc3d39146106dd57806399f5634e146106f05780639b796760146106f85780639c9f3dfe1461070b5780639eb831b91461071e5780639f0d039d14610726578063a3c573eb1461072e578063aa58bad61461074157600080fd5b80634a910e6a116102c6578063715018a61161025e578063715018a6146105e65780637215541a146105ee57806375c508b3146106015780637fcb365314610614578063837a473814610627578063841b24d7146106955780638b48931e146106af5780638c4a0af7146106b95780638da5cb5b146106cc57600080fd5b80634a910e6a1461052c5780635392c5e01461053f578063542028d51461055f5780635437988d14610567578063574f649e1461057a57806360943d6a1461058d5780636b8616ce146105a05780636ff512cc146105c0578063704b6c02146105d357600080fd5b80632d0889d3116103395780632d0889d314610475578063383b3be81461047f578063394218e9146104925780633c158267146104a5578063423fa856146104b857806345605267146104d2578063458c0477146104ec5780634834a343146104ff5780634a1a89a71461051257600080fd5b80630eaa86ea14610397578063107bf28c146103bd57806310a01a72146103d257806315064c96146103e75780631816b7e51461040457806319d8ac6114610417578063220d7899146104425780632987898314610455575b600080fd5b6103aa6103a5366004614c6b565b6109ad565b6040519081526020015b60405180910390f35b6103c5610b7c565b6040516103b49190614d18565b6103e56103e0366004614d5a565b610c0a565b005b6065546103f49060ff1681565b60405190151581526020016103b4565b6103e5610412366004614de7565b610e53565b60685461042a906001600160401b031681565b6040516001600160401b0390911681526020016103b4565b6103c5610450366004614e0b565b610f74565b606a54610468906001600160a01b031681565b6040516103b49190614e58565b6103aa620493e081565b6103f461048d366004614e6c565b611115565b6103e56104a0366004614e6c565b61115c565b6103e56104b3366004614fa9565b611318565b60685461042a90600160401b90046001600160401b031681565b60685461042a90600160801b90046001600160401b031681565b60725461042a906001600160401b031681565b6103e561050d366004614d5a565b611adf565b60725461042a90600160401b90046001600160401b031681565b6103e561053a366004614e6c565b611e27565b6103aa61054d366004614e6c565b606d6020526000908152604090205481565b6103c56120c1565b6103e56105753660046150d4565b6120ce565b6103aa6105883660046150f1565b6120f8565b6103e561059b366004615166565b61213b565b6103aa6105ae366004614e6c565b60666020526000908152604090205481565b6103e56105ce3660046150d4565b612496565b6103e56105e13660046150d4565b612514565b6103e5612589565b6103e56105fc366004614e6c565b61259d565b6103e561060f36600461523d565b6127a7565b60695461042a906001600160401b031681565b61066a6106353660046152db565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103b4565b60725461042a90600160c01b90046001600160401b031681565b61042a62093a8081565b6103e56106c7366004615302565b612836565b6033546001600160a01b0316610468565b6103e56106eb366004614e6c565b6128ad565b6103aa6128d7565b6103e5610706366004614e6c565b6129bf565b6103e5610719366004614e6c565b6129f4565b6103aa600c81565b6074546103aa565b607054610468906001600160a01b031681565b60655461042a9061010090046001600160401b031681565b61042a6206978081565b606c5461042a90600160a81b90046001600160401b031681565b60655461079290600160481b900461ffff1681565b60405161ffff90911681526020016103b4565b6107e06107b3366004614e6c565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103b4565b60655461046890600160581b90046001600160a01b031681565b6103e561082d36600461531f565b612ba2565b61042a612bba565b6103e561084836600461531f565b612c07565b6103e561085b366004614e6c565b612c6d565b60695461046890600160401b90046001600160a01b031681565b606c54610468906001600160a01b031681565b6103e561089b366004615353565b612cee565b606c546103f490600160a01b900460ff1681565b60725461042a90600160801b90046001600160401b031681565b6103e56131ad565b6103e56108e4366004615445565b613269565b6103e56108f736600461523d565b6132db565b61042a6103e881565b60685461042a90600160c01b90046001600160401b031681565b606b54610468906001600160a01b031681565b6103e5610940366004615492565b61341f565b6103e5610953366004614d5a565b613748565b6103e56109663660046150d4565b613867565b6103e56109793660046150d4565b6138dc565b607354610468906001600160a01b031681565b6103aa60745481565b6103e56109a83660046154d6565b613952565b60008060006109ba612bba565b90506001600160401b03881615610a57576072546001600160401b039081169089161115610a035760405162461bcd60e51b81526004016109fa90615502565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610a515760405162461bcd60e51b81526004016109fa90615580565b50610ac1565b6001600160401b0387166000908152606d6020526040902054915081610a8f5760405162461bcd60e51b81526004016109fa906155e0565b806001600160401b0316876001600160401b03161115610ac15760405162461bcd60e51b81526004016109fa90615637565b806001600160401b0316866001600160401b031611610af25760405162461bcd60e51b81526004016109fa906156a8565b6000610b018888888689610f74565b90506000600080516020615e94833981519152600283604051610b249190615725565b602060405180830381855afa158015610b41573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610b649190615741565b610b6e9190615770565b9a9950505050505050505050565b606f8054610b8990615784565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb590615784565b8015610c025780601f10610bd757610100808354040283529160200191610c02565b820191906000526020600020905b815481529060010190602001808311610be557829003601f168201915b505050505081565b610c12613974565b600080610c1d612bba565b90506001600160401b038a1615610cb1576072546001600160401b03908116908b161115610c5d5760405162461bcd60e51b81526004016109fa90615502565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610cab5760405162461bcd60e51b81526004016109fa90615580565b50610d1b565b6001600160401b0389166000908152606d6020526040902054915081610ce95760405162461bcd60e51b81526004016109fa906155e0565b806001600160401b0316896001600160401b03161115610d1b5760405162461bcd60e51b81526004016109fa90615637565b806001600160401b0316886001600160401b031611610d4c5760405162461bcd60e51b81526004016109fa906156a8565b6000610d5b8a8a8a868b610f74565b606980546001600160401b0319166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610da857607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610dee57600080fd5b505af1158015610e02573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610e7d5760405162461bcd60e51b81526004016109fa906157be565b6103e88161ffff1610158015610e9857506104008161ffff16105b610f1d5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a4016109fa565b6065805461ffff60481b1916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610fa657508115155b61101a576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109fa565b8061108f576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109fa565b606c54604080516001600160601b03193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b038281166000908152607160205260408120549092429261114b92600160801b90920481169116615817565b6001600160401b0316111592915050565b6073546001600160a01b031633146111865760405162461bcd60e51b81526004016109fa906157be565b62093a806001600160401b038216111561121f5760405162461bcd60e51b815260206004820152604e60248201527f506f6c79676f6e5a6b45564d3a3a73657454727573746564416767726567617460448201527f6f7254696d656f75743a20457863656564206d61782068616c7420616767726560648201526d19d85d1a5bdb881d1a5b595bdd5d60921b608482015260a4016109fa565b60655460ff166112c2576072546001600160401b03600160c01b9091048116908216106112c25760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a204e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109fa565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610f69565b60655460ff161561133b5760405162461bcd60e51b81526004016109fa90615842565b606954600160401b90046001600160a01b031633146113c25760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a204f6e6c7920747275737465642073657175656e63657200000000000060648201526084016109fa565b8051806114375760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e6365203120626174636800000060648201526084016109fa565b6103e881106114b0576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e79206261746368657360648201526084016109fa565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b85811015611915576000878281518110611503576115036158aa565b60200260200101519050600081606001516001600160401b03161115611693578361152d816158c0565b94505060008160000151805190602001208260200151836060015160405160200161155a939291906158e6565b60408051601f1981840301815291815281516020928301206001600160401b0388166000908152606690935291205490915081146115ee5760405162461bcd60e51b815260206004820152603d6024820152600080516020615eb483398151915260448201527f6f7263656420626174636865732064617461206d757374206d6174636800000060648201526084016109fa565b81606001516001600160401b031682604001516001600160401b0316101561168d5760405162461bcd60e51b81526020600482015260586024820152600080516020615eb483398151915260448201527f6f7263656420626174636865732074696d657374616d70206d757374206265206064820152773134b3b3b2b91037b91032b8bab0b6103a3430b71036b4b760411b608482015260a4016109fa565b50611808565b6020810151158061171c5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916116d69160040190815260200190565b6020604051808303816000875af11580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117199190615741565b15155b61178e5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d75737420657869737400000000000060648201526084016109fa565b805151620493e0116118085760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016109fa565b856001600160401b031681604001516001600160401b03161015801561183b57504281604001516001600160401b031611155b6118ad5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e676500000060648201526084016109fa565b805180516020918201208183015160408085015190516118d4948894939291339101615909565b60405160208183030381529060405280519060200120925084806118f7906158c0565b9550508060400151955050808061190d90615948565b9150506114e7565b506068546001600160401b03600160c01b909104811690831611156119885760405162461bcd60e51b81526020600482015260356024820152600080516020615eb48339815191526044820152746f7263652062617463686573206f766572666c6f7760581b60648201526084016109fa565b6068546000906119a890600160801b90046001600160401b031684615961565b6119bb906001600160401b031687615989565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611a9090339030908490611a7591906159a0565b606554600160581b90046001600160a01b03169291906139ce565b611a98613a39565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b025760405162461bcd60e51b81526004016109fa90615842565b6072546001600160401b038781166000908152606760205260409020600101544292611b3992600160c01b90910481169116615817565b6001600160401b03161115611bc25760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2054727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a4016109fa565b6103e8611bcf8888615961565b6001600160401b031610611c4b5760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2043616e60448201527f6e6f74207665726966792074686174206d616e7920626174636865730000000060648201526084016109fa565b611c5b8888888888888888613ad9565b611c6486613fca565b607254600160801b90046001600160401b0316600003611d2b57606980546001600160401b0319166001600160401b038881169182179092556000908152606d602052604090208590556072541615611cc857607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d0e57600080fd5b505af1158015611d22573d6000803e3d6000fd5b50505050611ddc565b611d33613a39565b607280546001600160401b0316906000611d4c836158c0565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611e5457506072546001600160401b03600160401b9091048116908216115b8015611e6f57506072546001600160401b0390811690821611155b611eed5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a4016109fa565b606a546001600160a01b03163314611f9757611f0881611115565b611f975760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2050656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a4016109fa565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b928390049098166001600160401b0319909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b15801561205357600080fd5b505af1158015612067573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e84600201546040516120b491815260200190565b60405180910390a3505050565b606e8054610b8990615784565b6120d6613974565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b600085858051906020012085858560405160200161211a959493929190615909565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff161580801561215b5750600054600160ff909116105b806121755750303b158015612175575060005460ff166001145b6121d85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109fa565b6000805460ff1916600117905580156121fb576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c81169190911790925560658054600160581b600160f81b031916600160581b8c851602179055606b805482168a84161790556070805490911691881691909117905561226360208601866150d4565b607380546001600160a01b0319166001600160a01b039290921691909117905561229360608601604087016150d4565b606980546001600160a01b0392909216600160401b02600160401b600160e01b03199092169190911790556122ce60c0860160a087016150d4565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa71135684905561232b60e0860160c08701614e6c565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556123626040860160208701614e6c565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561239e6080860160608701614e6c565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b199092169190911790556123da60a0860160808701615302565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e6124028482615a05565b50606f61240f8382615a05565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124456141b0565b801561248b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b031633146124c05760405162461bcd60e51b81526004016109fa906157be565b60698054600160401b600160e01b031916600160401b6001600160a01b038416021790556040517ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090610f69908390614e58565b6073546001600160a01b0316331461253e5760405162461bcd60e51b81526004016109fa906157be565b607380546001600160a01b0319166001600160a01b0383161790556040517f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190610f69908390614e58565b612591613974565b61259b6000614220565b565b6033546001600160a01b0316331461279c5760006125b9612bba565b9050806001600160401b0316826001600160401b0316116126305760405162461bcd60e51b815260206004820152603c6024820152600080516020615e1483398151915260448201527f746174653a20426174636820616c72656164792076657269666965640000000060648201526084016109fa565b6068546001600160401b03600160401b90910481169083161180159061267257506001600160401b038083166000908152606760205260409020600101541615155b6126eb5760405162461bcd60e51b81526020600482015260506024820152600080516020615e1483398151915260448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a4016109fa565b6001600160401b0380831660009081526067602052604090206001015442916127199162093a809116615817565b6001600160401b0316111561279a5760405162461bcd60e51b815260206004820152604d6024820152600080516020615e1483398151915260448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a4016109fa565b505b6127a4614272565b50565b60655460ff16156127ca5760405162461bcd60e51b81526004016109fa90615842565b6127db8989898989898989896142e2565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a161248b614272565b6073546001600160a01b031633146128605760405162461bcd60e51b81526004016109fa906157be565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610f6990831515815260200190565b6128b5613974565b606980546001600160401b0319166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81526000918291600160581b9091046001600160a01b0316906370a0823190612912903090600401614e58565b602060405180830381865afa15801561292f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129539190615741565b9050600061295f612bba565b6068546001600160401b03600160401b820481169161298f91600160801b8204811691600160c01b900416615961565b6129999190615817565b6129a39190615961565b6001600160401b031690506129b88183615ac4565b9250505090565b6129c7613974565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612a1e5760405162461bcd60e51b81526004016109fa906157be565b62093a806001600160401b0382161115612ab25760405162461bcd60e51b815260206004820152604960248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a20457863656564206d61782068616c74206167677265676174696f6064820152681b881d1a5b595bdd5d60ba1b608482015260a4016109fa565b60655460ff16612b47576072546001600160401b03600160801b909104811690821610612b475760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a204e65772074696d656f7574206d757374206265206c6f7765720060648201526084016109fa565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610f69565b612baa613974565b606f612bb68282615a05565b5050565b6072546000906001600160401b031615612bf757506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612c315760405162461bcd60e51b81526004016109fa906157be565b606e612c3d8282615a05565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610f699190614d18565b6073546001600160a01b03163314612c975760405162461bcd60e51b81526004016109fa906157be565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610f69565b60655460ff1615612d115760405162461bcd60e51b81526004016109fa90615842565b606c54600160a01b900460ff161515600114612d3f5760405162461bcd60e51b81526004016109fa90615ad8565b805180612da25760405162461bcd60e51b815260206004820152603f6024820152600080516020615e7483398151915260448201527f65733a204d75737420666f726365206174206c6561737420312062617463680060648201526084016109fa565b6103e88110612e135760405162461bcd60e51b81526020600482015260436024820152600080516020615e7483398151915260448201527f65733a2043616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a4016109fa565b6068546001600160401b03600160c01b8204811691612e3b918491600160801b900416615b41565b1115612e975760405162461bcd60e51b81526020600482015260376024820152600080516020615e74833981519152604482015276195cce88119bdc98d94818985d18da081a5b9d985b1a59604a1b60648201526084016109fa565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b848110156130c5576000868281518110612ee457612ee46158aa565b602002602001015190508380612ef9906158c0565b945050600081600001518051906020012082602001518360400151604051602001612f26939291906158e6565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612fc55760405162461bcd60e51b81526020600482015260426024820152600080516020615e7483398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109fa565b612fd0600188615989565b83036130675742620697808360400151612fea9190615817565b6001600160401b031611156130675760405162461bcd60e51b81526020600482015260496024820152600080516020615e7483398151915260448201527f65733a20466f72636564206261746368206973206e6f7420696e2074696d656f6064820152681d5d081c195c9a5bd960ba1b608482015260a4016109fa565b815180516020918201208184015160405161308a93889392914291339101615909565b60405160208183030381529060405280519060200120935085806130ad906158c0565b965050505080806130bd90615948565b915050612ec8565b50606880546001600160401b031916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b0319909216919091179286168502929092179091558554600160401b600160c01b03191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166131cf5760405162461bcd60e51b81526004016109fa90615b59565b6073546001600160a01b031633146131f95760405162461bcd60e51b81526004016109fa906157be565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561324957600080fd5b505af115801561325d573d6000803e3d6000fd5b5050505061259b614906565b613271613974565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133055760405162461bcd60e51b81526004016109fa90615bb6565b6133168989898989898989896142e2565b606980546001600160401b0319166001600160401b038881169182179092556000908152606d60205260409020859055607254161561336057607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156133a657600080fd5b505af11580156133ba573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff16156134425760405162461bcd60e51b81526004016109fa90615842565b606c54600160a01b900460ff1615156001146134705760405162461bcd60e51b81526004016109fa90615ad8565b600061347b60745490565b9050818111156134e05760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a204e6f7420656e6044820152696f756768206d6174696360b01b60648201526084016109fa565b620493e08351106135515760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b60648201526084016109fa565b60655461357090600160581b90046001600160a01b03163330846139ce565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa1580156135ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135de9190615741565b60688054919250600160c01b9091046001600160401b0316906018613602836158c0565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505083805190602001208142604051602001613643939291906158e6565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b0316600090815260669093529120553233036136e757606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613742565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161373993929190615c13565b60405180910390a25b50505050565b606a546001600160a01b031633146137725760405162461bcd60e51b81526004016109fa90615bb6565b6137828888888888888888613ad9565b606980546001600160401b0319166001600160401b038881169182179092556000908152606d6020526040902085905560725416156137cc57607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561381257600080fd5b505af1158015613826573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e15565b6073546001600160a01b031633146138915760405162461bcd60e51b81526004016109fa906157be565b606a80546001600160a01b0319166001600160a01b0383161790556040517f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90610f69908390614e58565b6138e4613974565b6001600160a01b0381166139495760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109fa565b6127a481614220565b61395a613974565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b0316331461259b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109fa565b6040516001600160a01b03808516602483015283166044820152606481018290526137429085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261495d565b6072546001600160401b03600160401b820481169116111561259b57607254600090613a7690600160401b90046001600160401b03166001615817565b9050613a8181611115565b156127a457607254600090600290613aa39084906001600160401b0316615961565b613aad9190615c46565b613ab79083615817565b9050613ac281611115565b15613ad057612bb681611e27565b612bb682611e27565b600080613ae4612bba565b90506001600160401b038a1615613c4a576072546001600160401b03908116908b161115613b9c5760405162461bcd60e51b815260206004820152605960248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20706560448201527f6e64696e6753746174654e756d206d757374206265206c657373206f7220657160648201527875616c207468616e206c61737450656e64696e67537461746560381b608482015260a4016109fa565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c445760405162461bcd60e51b815260206004820152604d6024820152600080516020615e3483398151915260448201527f69744e756d4261746368206d757374206d61746368207468652070656e64696e60648201526c0ce40e6e8c2e8ca40c4c2e8c6d609b1b608482015260a4016109fa565b50613d70565b6001600160401b0389166000908152606d6020526040902054915081613cd45760405162461bcd60e51b815260206004820152604460248201819052600080516020615e34833981519152908201527f69744e756d426174636820737461746520726f6f7420646f6573206e6f7420656064820152631e1a5cdd60e21b608482015260a4016109fa565b806001600160401b0316896001600160401b03161115613d705760405162461bcd60e51b815260206004820152605e6024820152600080516020615e3483398151915260448201527f69744e756d4261746368206d757374206265206c657373206f7220657175616c60648201527f207468616e2063757272656e744c617374566572696669656442617463680000608482015260a4016109fa565b806001600160401b0316886001600160401b031611613e185760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20666960448201527f6e616c4e65774261746368206d75737420626520626967676572207468616e206064820152770c6eae4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d60431b608482015260a4016109fa565b6000613e278a8a8a868b610f74565b90506000600080516020615e94833981519152600283604051613e4a9190615725565b602060405180830381855afa158015613e67573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613e8a9190615741565b613e949190615770565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613ed8918b918b918b9190600401615c6c565b602060405180830381865afa158015613ef5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f199190615ce6565b613f795760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20496e60448201526a3b30b634b210383937b7b360a91b60648201526084016109fa565b613fbc33613f87858d615961565b6001600160401b0316613f986128d7565b613fa291906159a0565b606554600160581b90046001600160a01b03169190614a34565b505050505050505050505050565b6000613fd4612bba565b905081600080613fe48484615961565b6001600160401b031690505b836001600160401b0316836001600160401b031614614096576001600160401b03808416600090815260676020526040902060655460018201549192610100909104811691614040911642615989565b111561407b57600181015461406590600160401b90046001600160401b031685615961565b614078906001600160401b031684615b41565b92505b60010154600160401b90046001600160401b03169250613ff0565b60006140a28383615989565b90508281101561411c5760006140b88285615989565b9050600c81116140c857806140cb565b600c5b90506140d88160036159a0565b6140e390600a615de7565b6065546140fc908390600160481b900461ffff16615de7565b60745461410991906159a0565b6141139190615ac4565b607455506141a8565b60006141288483615989565b9050600c8111614138578061413b565b600c5b9050600061414a8260036159a0565b61415590600a615de7565b60655461416e908490600160481b900461ffff16615de7565b60745461417b91906159a0565b6141859190615ac4565b90508060745460745461419891906159a0565b6141a29190615ac4565b60745550505b505050505050565b600054610100900460ff1661421b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109fa565b61259b335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156142c257600080fd5b505af11580156142d6573d6000803e3d6000fd5b5050505061259b614a64565b60006001600160401b038a1615614452576072546001600160401b03908116908b16111561439a5760405162461bcd60e51b81526020600482015260656024820152600080516020615e5483398151915260448201527f696e6753746174653a2070656e64696e6753746174654e756d206d757374206260648201527f65206c657373206f7220657175616c207468616e206c61737450656e64696e67608482015264537461746560d81b60a482015260c4016109fa565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b909204161461444c5760405162461bcd60e51b81526020600482015260596024820152600080516020615e5483398151915260448201527f696e6753746174653a20696e69744e756d4261746368206d757374206d6174636064820152780d040e8d0ca40e0cadcc8d2dcce40e6e8c2e8ca40c4c2e8c6d603b1b608482015260a4016109fa565b5061458b565b506001600160401b0387166000908152606d6020526040902054806144e65760405162461bcd60e51b81526020600482015260506024820152600080516020615e5483398151915260448201527f696e6753746174653a20696e69744e756d426174636820737461746520726f6f60648201526f1d08191bd95cc81b9bdd08195e1a5cdd60821b608482015260a4016109fa565b6069546001600160401b03908116908916111561458b5760405162461bcd60e51b81526020600482015260636024820152600080516020615e5483398151915260448201527f696e6753746174653a20696e69744e756d4261746368206d757374206265206c60648201527f657373206f7220657175616c207468616e206c617374566572696669656442616084820152620e8c6d60eb1b60a482015260c4016109fa565b6072546001600160401b03908116908a16118015906145bb5750896001600160401b0316896001600160401b0316115b80156145dc57506072546001600160401b03600160401b9091048116908a16115b61464d5760405162461bcd60e51b81526020600482015260486024820152600080516020615e5483398151915260448201527f696e6753746174653a2066696e616c50656e64696e6753746174654e756d20696064820152671b98dbdc9c9958dd60c21b608482015260a4016109fa565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146147065760405162461bcd60e51b81526020600482015260636024820152600080516020615e5483398151915260448201527f696e6753746174653a2066696e616c4e65774261746368206d7573742062652060648201527f657175616c207468616e2063757272656e744c617374566572696669656442616084820152620e8c6d60eb1b60a482015260c4016109fa565b6000614715898989858a610f74565b90506000600080516020615e948339815191526002836040516147389190615725565b602060405180830381855afa158015614755573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906147789190615741565b6147829190615770565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916147c6918a918a918a9190600401615c6c565b602060405180830381865afa1580156147e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148079190615ce6565b6148615760405162461bcd60e51b81526020600482015260376024820152600080516020615e5483398151915260448201527634b733a9ba30ba329d1024b73b30b634b210383937b7b360491b60648201526084016109fa565b6001600160401b038b16600090815260716020526040902060020154879003613fbc5760405162461bcd60e51b815260206004820152605b6024820152600080516020615e5483398151915260448201527f696e6753746174653a2053746f72656420726f6f74206d75737420626520646960648201527f66666572656e74207468616e206e657720737461746520726f6f740000000000608482015260a4016109fa565b60655460ff166149285760405162461bcd60e51b81526004016109fa90615b59565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006149b2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614abf9092919063ffffffff16565b805190915015614a2f57808060200190518101906149d09190615ce6565b614a2f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109fa565b505050565b6040516001600160a01b038316602482015260448101829052614a2f90849063a9059cbb60e01b90606401613a02565b60655460ff1615614a875760405162461bcd60e51b81526004016109fa90615842565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614ace8484600085614ad6565b949350505050565b606082471015614b375760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109fa565b600080866001600160a01b03168587604051614b539190615725565b60006040518083038185875af1925050503d8060008114614b90576040519150601f19603f3d011682016040523d82523d6000602084013e614b95565b606091505b5091509150614ba687838387614bb1565b979650505050505050565b60608315614c20578251600003614c19576001600160a01b0385163b614c195760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109fa565b5081614ace565b614ace8383815115614c355781518083602001fd5b8060405162461bcd60e51b81526004016109fa9190614d18565b80356001600160401b0381168114614c6657600080fd5b919050565b600080600080600060a08688031215614c8357600080fd5b614c8c86614c4f565b9450614c9a60208701614c4f565b9350614ca860408701614c4f565b94979396509394606081013594506080013592915050565b60005b83811015614cdb578181015183820152602001614cc3565b838111156137425750506000910152565b60008151808452614d04816020860160208601614cc0565b601f01601f19169290920160200192915050565b602081526000614d2b6020830184614cec565b9392505050565b8060408101831015614d4357600080fd5b92915050565b8060808101831015614d4357600080fd5b6000806000806000806000806101a0898b031215614d7757600080fd5b614d8089614c4f565b9750614d8e60208a01614c4f565b9650614d9c60408a01614c4f565b95506060890135945060808901359350614db98a60a08b01614d32565b9250614dc88a60e08b01614d49565b9150614dd88a6101608b01614d32565b90509295985092959890939650565b600060208284031215614df957600080fd5b813561ffff81168114614d2b57600080fd5b600080600080600060a08688031215614e2357600080fd5b614e2c86614c4f565b9450614e3a60208701614c4f565b94979496505050506040830135926060810135926080909101359150565b6001600160a01b0391909116815260200190565b600060208284031215614e7e57600080fd5b614d2b82614c4f565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614ebf57614ebf614e87565b60405290565b604051606081016001600160401b0381118282101715614ebf57614ebf614e87565b604051601f8201601f191681016001600160401b0381118282101715614f0f57614f0f614e87565b604052919050565b60006001600160401b03821115614f3057614f30614e87565b5060051b60200190565b600082601f830112614f4b57600080fd5b81356001600160401b03811115614f6457614f64614e87565b614f77601f8201601f1916602001614ee7565b818152846020838601011115614f8c57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614fbc57600080fd5b82356001600160401b0380821115614fd357600080fd5b818501915085601f830112614fe757600080fd5b8135614ffa614ff582614f17565b614ee7565b81815260059190911b8301840190848101908883111561501957600080fd5b8585015b838110156150b2578035858111156150355760008081fd5b86016080818c03601f190181131561504d5760008081fd5b615055614e9d565b89830135888111156150675760008081fd5b6150758e8c83870101614f3a565b8252506040808401358b830152606061508f818601614c4f565b8284015261509e848601614c4f565b90830152508552505091860191860161501d565b5098975050505050505050565b6001600160a01b03811681146127a457600080fd5b6000602082840312156150e657600080fd5b8135614d2b816150bf565b600080600080600060a0868803121561510957600080fd5b8535945060208601356001600160401b0381111561512657600080fd5b61513288828901614f3a565b9450506040860135925061514860608701614c4f565b91506080860135615158816150bf565b809150509295509295909350565b600080600080600080600080888a036101c081121561518457600080fd5b893561518f816150bf565b985060208a013561519f816150bf565b975060408a01356151af816150bf565b965060608a01356151bf816150bf565b955060e0607f19820112156151d357600080fd5b5060808901935061016089013592506101808901356001600160401b03808211156151fd57600080fd5b6152098c838d01614f3a565b93506101a08b013591508082111561522057600080fd5b5061522d8b828c01614f3a565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c03121561525c57600080fd5b6152658a614c4f565b985061527360208b01614c4f565b975061528160408b01614c4f565b965061528f60608b01614c4f565b955060808a0135945060a08a013593506152ac8b60c08c01614d32565b92506152bc8b6101008c01614d49565b91506152cc8b6101808c01614d32565b90509295985092959850929598565b6000602082840312156152ed57600080fd5b5035919050565b80151581146127a457600080fd5b60006020828403121561531457600080fd5b8135614d2b816152f4565b60006020828403121561533157600080fd5b81356001600160401b0381111561534757600080fd5b614ace84828501614f3a565b6000602080838503121561536657600080fd5b82356001600160401b038082111561537d57600080fd5b818501915085601f83011261539157600080fd5b813561539f614ff582614f17565b81815260059190911b830184019084810190888311156153be57600080fd5b8585015b838110156150b2578035858111156153da5760008081fd5b86016060818c03601f19018113156153f25760008081fd5b6153fa614ec5565b898301358881111561540c5760008081fd5b61541a8e8c83870101614f3a565b8252506040808401358b830152615432838501614c4f565b90820152855250509186019186016153c2565b6000806000806080858703121561545b57600080fd5b61546485614c4f565b93506020850135925061547960408601614c4f565b915061548760608601614c4f565b905092959194509250565b600080604083850312156154a557600080fd5b82356001600160401b038111156154bb57600080fd5b6154c785828601614f3a565b95602094909401359450505050565b600080604083850312156154e957600080fd5b823591506154f960208401614c4f565b90509250929050565b60208082526058908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2070656e60408201527f64696e6753746174654e756d206d757374206265206c657373206f7220657175606082015277616c207468616e206c61737450656e64696e67537461746560401b608082015260a00190565b6020808252604c90820152600080516020615df483398151915260408201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760608201526b040e6e8c2e8ca40c4c2e8c6d60a31b608082015260a00190565b6020808252604390820152600080516020615df483398151915260408201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786060820152621a5cdd60ea1b608082015260a00190565b6020808252605d90820152600080516020615df483398151915260408201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060608201527f7468616e2063757272656e744c61737456657269666965644261746368000000608082015260a00190565b60208082526057908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2066696e60408201527f616c4e65774261746368206d75737420626520626967676572207468616e20636060820152760eae4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d604b1b608082015260a00190565b60008251615737818460208701614cc0565b9190910192915050565b60006020828403121561575357600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b60008261577f5761577f61575a565b500690565b600181811c9082168061579857607f821691505b6020821081036157b857634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a204f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561583957615839615801565b01949350505050565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b038083168181036158dc576158dc615801565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6001600160601b0319166068820152607c0190565b60006001820161595a5761595a615801565b5060010190565b60006001600160401b038381169083168181101561598157615981615801565b039392505050565b60008282101561599b5761599b615801565b500390565b60008160001904831182151516156159ba576159ba615801565b500290565b601f821115614a2f57600081815260208120601f850160051c810160208610156159e65750805b601f850160051c820191505b818110156141a8578281556001016159f2565b81516001600160401b03811115615a1e57615a1e614e87565b615a3281615a2c8454615784565b846159bf565b602080601f831160018114615a675760008415615a4f5750858301515b600019600386901b1c1916600185901b1785556141a8565b600085815260208120601f198616915b82811015615a9657888601518255948401946001909101908401615a77565b5085821015615ab45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615ad357615ad361575a565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a204f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b60008219821115615b5457615b54615801565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a204f6e6c7920747275737465642061676772656761746f7200000000606082015260800190565b8381526001600160a01b0383166020820152606060408201819052600090615c3d90830184614cec565b95945050505050565b60006001600160401b0380841680615c6057615c6061575a565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615ca457848483379084018281529284019290600101615c84565b5050828760c0870137610100850181815286935091505b6001811015615cda578251825260209283019290910190600101615cbb565b50505095945050505050565b600060208284031215615cf857600080fd5b8151614d2b816152f4565b600181815b80851115615d3e578160001904821115615d2457615d24615801565b80851615615d3157918102915b93841c9390800290615d08565b509250929050565b600082615d5557506001614d43565b81615d6257506000614d43565b8160018114615d785760028114615d8257615d9e565b6001915050614d43565b60ff841115615d9357615d93615801565b50506001821b614d43565b5060208310610133831016604e8410600b8410161715615dc1575081810a614d43565b615dcb8383615d03565b8060001904821115615ddf57615ddf615801565b029392505050565b6000614d2b8383615d4656fe506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e69506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e637953506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20696e506f6c79676f6e5a6b45564d3a3a5f70726f766544697374696e637450656e64506f6c79676f6e5a6b45564d3a3a73657175656e6365466f726365426174636830644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a2046a2646970667358221220562c72c8c8d69f38d81dccdfc09c0be95e872f23db8696679b365ec9a030f1f664736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103925760003560e01c806396dc3d39116101e0578063cfa8ed4711610110578063e7a7ed02116100a8578063e7a7ed0214610905578063e8bf92ed1461091f578063eaeb077b14610932578063edc4112114610945578063f14916d614610958578063f2fde38b1461096b578063f851a4401461097e578063f8b823e414610991578063fe16564f1461099a57600080fd5b8063cfa8ed4714610860578063d02103ca1461087a578063d8d1091b1461088d578063d8f54db0146108a0578063d939b315146108b4578063dbc16976146108ce578063e0d17441146108d6578063e11f3f18146108e9578063e217cfd6146108fc57600080fd5b8063ab9fc5ef11610183578063ab9fc5ef14610759578063adc879e914610763578063afd23cbe1461077d578063b4d63f58146107a5578063b6b0b09714610805578063c0cad3021461081f578063c0ed84e014610832578063c89e42df1461083a578063cf1363061461084d57600080fd5b806396dc3d39146106dd57806399f5634e146106f05780639b796760146106f85780639c9f3dfe1461070b5780639eb831b91461071e5780639f0d039d14610726578063a3c573eb1461072e578063aa58bad61461074157600080fd5b80634a910e6a116102c6578063715018a61161025e578063715018a6146105e65780637215541a146105ee57806375c508b3146106015780637fcb365314610614578063837a473814610627578063841b24d7146106955780638b48931e146106af5780638c4a0af7146106b95780638da5cb5b146106cc57600080fd5b80634a910e6a1461052c5780635392c5e01461053f578063542028d51461055f5780635437988d14610567578063574f649e1461057a57806360943d6a1461058d5780636b8616ce146105a05780636ff512cc146105c0578063704b6c02146105d357600080fd5b80632d0889d3116103395780632d0889d314610475578063383b3be81461047f578063394218e9146104925780633c158267146104a5578063423fa856146104b857806345605267146104d2578063458c0477146104ec5780634834a343146104ff5780634a1a89a71461051257600080fd5b80630eaa86ea14610397578063107bf28c146103bd57806310a01a72146103d257806315064c96146103e75780631816b7e51461040457806319d8ac6114610417578063220d7899146104425780632987898314610455575b600080fd5b6103aa6103a5366004614c6b565b6109ad565b6040519081526020015b60405180910390f35b6103c5610b7c565b6040516103b49190614d18565b6103e56103e0366004614d5a565b610c0a565b005b6065546103f49060ff1681565b60405190151581526020016103b4565b6103e5610412366004614de7565b610e53565b60685461042a906001600160401b031681565b6040516001600160401b0390911681526020016103b4565b6103c5610450366004614e0b565b610f74565b606a54610468906001600160a01b031681565b6040516103b49190614e58565b6103aa620493e081565b6103f461048d366004614e6c565b611115565b6103e56104a0366004614e6c565b61115c565b6103e56104b3366004614fa9565b611318565b60685461042a90600160401b90046001600160401b031681565b60685461042a90600160801b90046001600160401b031681565b60725461042a906001600160401b031681565b6103e561050d366004614d5a565b611adf565b60725461042a90600160401b90046001600160401b031681565b6103e561053a366004614e6c565b611e27565b6103aa61054d366004614e6c565b606d6020526000908152604090205481565b6103c56120c1565b6103e56105753660046150d4565b6120ce565b6103aa6105883660046150f1565b6120f8565b6103e561059b366004615166565b61213b565b6103aa6105ae366004614e6c565b60666020526000908152604090205481565b6103e56105ce3660046150d4565b612496565b6103e56105e13660046150d4565b612514565b6103e5612589565b6103e56105fc366004614e6c565b61259d565b6103e561060f36600461523d565b6127a7565b60695461042a906001600160401b031681565b61066a6106353660046152db565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103b4565b60725461042a90600160c01b90046001600160401b031681565b61042a62093a8081565b6103e56106c7366004615302565b612836565b6033546001600160a01b0316610468565b6103e56106eb366004614e6c565b6128ad565b6103aa6128d7565b6103e5610706366004614e6c565b6129bf565b6103e5610719366004614e6c565b6129f4565b6103aa600c81565b6074546103aa565b607054610468906001600160a01b031681565b60655461042a9061010090046001600160401b031681565b61042a6206978081565b606c5461042a90600160a81b90046001600160401b031681565b60655461079290600160481b900461ffff1681565b60405161ffff90911681526020016103b4565b6107e06107b3366004614e6c565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103b4565b60655461046890600160581b90046001600160a01b031681565b6103e561082d36600461531f565b612ba2565b61042a612bba565b6103e561084836600461531f565b612c07565b6103e561085b366004614e6c565b612c6d565b60695461046890600160401b90046001600160a01b031681565b606c54610468906001600160a01b031681565b6103e561089b366004615353565b612cee565b606c546103f490600160a01b900460ff1681565b60725461042a90600160801b90046001600160401b031681565b6103e56131ad565b6103e56108e4366004615445565b613269565b6103e56108f736600461523d565b6132db565b61042a6103e881565b60685461042a90600160c01b90046001600160401b031681565b606b54610468906001600160a01b031681565b6103e5610940366004615492565b61341f565b6103e5610953366004614d5a565b613748565b6103e56109663660046150d4565b613867565b6103e56109793660046150d4565b6138dc565b607354610468906001600160a01b031681565b6103aa60745481565b6103e56109a83660046154d6565b613952565b60008060006109ba612bba565b90506001600160401b03881615610a57576072546001600160401b039081169089161115610a035760405162461bcd60e51b81526004016109fa90615502565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610a515760405162461bcd60e51b81526004016109fa90615580565b50610ac1565b6001600160401b0387166000908152606d6020526040902054915081610a8f5760405162461bcd60e51b81526004016109fa906155e0565b806001600160401b0316876001600160401b03161115610ac15760405162461bcd60e51b81526004016109fa90615637565b806001600160401b0316866001600160401b031611610af25760405162461bcd60e51b81526004016109fa906156a8565b6000610b018888888689610f74565b90506000600080516020615e94833981519152600283604051610b249190615725565b602060405180830381855afa158015610b41573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610b649190615741565b610b6e9190615770565b9a9950505050505050505050565b606f8054610b8990615784565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb590615784565b8015610c025780601f10610bd757610100808354040283529160200191610c02565b820191906000526020600020905b815481529060010190602001808311610be557829003601f168201915b505050505081565b610c12613974565b600080610c1d612bba565b90506001600160401b038a1615610cb1576072546001600160401b03908116908b161115610c5d5760405162461bcd60e51b81526004016109fa90615502565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610cab5760405162461bcd60e51b81526004016109fa90615580565b50610d1b565b6001600160401b0389166000908152606d6020526040902054915081610ce95760405162461bcd60e51b81526004016109fa906155e0565b806001600160401b0316896001600160401b03161115610d1b5760405162461bcd60e51b81526004016109fa90615637565b806001600160401b0316886001600160401b031611610d4c5760405162461bcd60e51b81526004016109fa906156a8565b6000610d5b8a8a8a868b610f74565b606980546001600160401b0319166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610da857607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610dee57600080fd5b505af1158015610e02573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610e7d5760405162461bcd60e51b81526004016109fa906157be565b6103e88161ffff1610158015610e9857506104008161ffff16105b610f1d5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a4016109fa565b6065805461ffff60481b1916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610fa657508115155b61101a576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109fa565b8061108f576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109fa565b606c54604080516001600160601b03193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b038281166000908152607160205260408120549092429261114b92600160801b90920481169116615817565b6001600160401b0316111592915050565b6073546001600160a01b031633146111865760405162461bcd60e51b81526004016109fa906157be565b62093a806001600160401b038216111561121f5760405162461bcd60e51b815260206004820152604e60248201527f506f6c79676f6e5a6b45564d3a3a73657454727573746564416767726567617460448201527f6f7254696d656f75743a20457863656564206d61782068616c7420616767726560648201526d19d85d1a5bdb881d1a5b595bdd5d60921b608482015260a4016109fa565b60655460ff166112c2576072546001600160401b03600160c01b9091048116908216106112c25760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a204e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109fa565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610f69565b60655460ff161561133b5760405162461bcd60e51b81526004016109fa90615842565b606954600160401b90046001600160a01b031633146113c25760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a204f6e6c7920747275737465642073657175656e63657200000000000060648201526084016109fa565b8051806114375760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e6365203120626174636800000060648201526084016109fa565b6103e881106114b0576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e79206261746368657360648201526084016109fa565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b85811015611915576000878281518110611503576115036158aa565b60200260200101519050600081606001516001600160401b03161115611693578361152d816158c0565b94505060008160000151805190602001208260200151836060015160405160200161155a939291906158e6565b60408051601f1981840301815291815281516020928301206001600160401b0388166000908152606690935291205490915081146115ee5760405162461bcd60e51b815260206004820152603d6024820152600080516020615eb483398151915260448201527f6f7263656420626174636865732064617461206d757374206d6174636800000060648201526084016109fa565b81606001516001600160401b031682604001516001600160401b0316101561168d5760405162461bcd60e51b81526020600482015260586024820152600080516020615eb483398151915260448201527f6f7263656420626174636865732074696d657374616d70206d757374206265206064820152773134b3b3b2b91037b91032b8bab0b6103a3430b71036b4b760411b608482015260a4016109fa565b50611808565b6020810151158061171c5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916116d69160040190815260200190565b6020604051808303816000875af11580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117199190615741565b15155b61178e5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d75737420657869737400000000000060648201526084016109fa565b805151620493e0116118085760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016109fa565b856001600160401b031681604001516001600160401b03161015801561183b57504281604001516001600160401b031611155b6118ad5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e676500000060648201526084016109fa565b805180516020918201208183015160408085015190516118d4948894939291339101615909565b60405160208183030381529060405280519060200120925084806118f7906158c0565b9550508060400151955050808061190d90615948565b9150506114e7565b506068546001600160401b03600160c01b909104811690831611156119885760405162461bcd60e51b81526020600482015260356024820152600080516020615eb48339815191526044820152746f7263652062617463686573206f766572666c6f7760581b60648201526084016109fa565b6068546000906119a890600160801b90046001600160401b031684615961565b6119bb906001600160401b031687615989565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611a9090339030908490611a7591906159a0565b606554600160581b90046001600160a01b03169291906139ce565b611a98613a39565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b025760405162461bcd60e51b81526004016109fa90615842565b6072546001600160401b038781166000908152606760205260409020600101544292611b3992600160c01b90910481169116615817565b6001600160401b03161115611bc25760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2054727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a4016109fa565b6103e8611bcf8888615961565b6001600160401b031610611c4b5760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2043616e60448201527f6e6f74207665726966792074686174206d616e7920626174636865730000000060648201526084016109fa565b611c5b8888888888888888613ad9565b611c6486613fca565b607254600160801b90046001600160401b0316600003611d2b57606980546001600160401b0319166001600160401b038881169182179092556000908152606d602052604090208590556072541615611cc857607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d0e57600080fd5b505af1158015611d22573d6000803e3d6000fd5b50505050611ddc565b611d33613a39565b607280546001600160401b0316906000611d4c836158c0565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611e5457506072546001600160401b03600160401b9091048116908216115b8015611e6f57506072546001600160401b0390811690821611155b611eed5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a4016109fa565b606a546001600160a01b03163314611f9757611f0881611115565b611f975760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2050656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a4016109fa565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b928390049098166001600160401b0319909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b15801561205357600080fd5b505af1158015612067573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e84600201546040516120b491815260200190565b60405180910390a3505050565b606e8054610b8990615784565b6120d6613974565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b600085858051906020012085858560405160200161211a959493929190615909565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff161580801561215b5750600054600160ff909116105b806121755750303b158015612175575060005460ff166001145b6121d85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109fa565b6000805460ff1916600117905580156121fb576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c81169190911790925560658054600160581b600160f81b031916600160581b8c851602179055606b805482168a84161790556070805490911691881691909117905561226360208601866150d4565b607380546001600160a01b0319166001600160a01b039290921691909117905561229360608601604087016150d4565b606980546001600160a01b0392909216600160401b02600160401b600160e01b03199092169190911790556122ce60c0860160a087016150d4565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa71135684905561232b60e0860160c08701614e6c565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556123626040860160208701614e6c565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561239e6080860160608701614e6c565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b199092169190911790556123da60a0860160808701615302565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e6124028482615a05565b50606f61240f8382615a05565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124456141b0565b801561248b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b031633146124c05760405162461bcd60e51b81526004016109fa906157be565b60698054600160401b600160e01b031916600160401b6001600160a01b038416021790556040517ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090610f69908390614e58565b6073546001600160a01b0316331461253e5760405162461bcd60e51b81526004016109fa906157be565b607380546001600160a01b0319166001600160a01b0383161790556040517f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190610f69908390614e58565b612591613974565b61259b6000614220565b565b6033546001600160a01b0316331461279c5760006125b9612bba565b9050806001600160401b0316826001600160401b0316116126305760405162461bcd60e51b815260206004820152603c6024820152600080516020615e1483398151915260448201527f746174653a20426174636820616c72656164792076657269666965640000000060648201526084016109fa565b6068546001600160401b03600160401b90910481169083161180159061267257506001600160401b038083166000908152606760205260409020600101541615155b6126eb5760405162461bcd60e51b81526020600482015260506024820152600080516020615e1483398151915260448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a4016109fa565b6001600160401b0380831660009081526067602052604090206001015442916127199162093a809116615817565b6001600160401b0316111561279a5760405162461bcd60e51b815260206004820152604d6024820152600080516020615e1483398151915260448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a4016109fa565b505b6127a4614272565b50565b60655460ff16156127ca5760405162461bcd60e51b81526004016109fa90615842565b6127db8989898989898989896142e2565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a161248b614272565b6073546001600160a01b031633146128605760405162461bcd60e51b81526004016109fa906157be565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610f6990831515815260200190565b6128b5613974565b606980546001600160401b0319166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81526000918291600160581b9091046001600160a01b0316906370a0823190612912903090600401614e58565b602060405180830381865afa15801561292f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129539190615741565b9050600061295f612bba565b6068546001600160401b03600160401b820481169161298f91600160801b8204811691600160c01b900416615961565b6129999190615817565b6129a39190615961565b6001600160401b031690506129b88183615ac4565b9250505090565b6129c7613974565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612a1e5760405162461bcd60e51b81526004016109fa906157be565b62093a806001600160401b0382161115612ab25760405162461bcd60e51b815260206004820152604960248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a20457863656564206d61782068616c74206167677265676174696f6064820152681b881d1a5b595bdd5d60ba1b608482015260a4016109fa565b60655460ff16612b47576072546001600160401b03600160801b909104811690821610612b475760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a204e65772074696d656f7574206d757374206265206c6f7765720060648201526084016109fa565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610f69565b612baa613974565b606f612bb68282615a05565b5050565b6072546000906001600160401b031615612bf757506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612c315760405162461bcd60e51b81526004016109fa906157be565b606e612c3d8282615a05565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610f699190614d18565b6073546001600160a01b03163314612c975760405162461bcd60e51b81526004016109fa906157be565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610f69565b60655460ff1615612d115760405162461bcd60e51b81526004016109fa90615842565b606c54600160a01b900460ff161515600114612d3f5760405162461bcd60e51b81526004016109fa90615ad8565b805180612da25760405162461bcd60e51b815260206004820152603f6024820152600080516020615e7483398151915260448201527f65733a204d75737420666f726365206174206c6561737420312062617463680060648201526084016109fa565b6103e88110612e135760405162461bcd60e51b81526020600482015260436024820152600080516020615e7483398151915260448201527f65733a2043616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a4016109fa565b6068546001600160401b03600160c01b8204811691612e3b918491600160801b900416615b41565b1115612e975760405162461bcd60e51b81526020600482015260376024820152600080516020615e74833981519152604482015276195cce88119bdc98d94818985d18da081a5b9d985b1a59604a1b60648201526084016109fa565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b848110156130c5576000868281518110612ee457612ee46158aa565b602002602001015190508380612ef9906158c0565b945050600081600001518051906020012082602001518360400151604051602001612f26939291906158e6565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612fc55760405162461bcd60e51b81526020600482015260426024820152600080516020615e7483398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109fa565b612fd0600188615989565b83036130675742620697808360400151612fea9190615817565b6001600160401b031611156130675760405162461bcd60e51b81526020600482015260496024820152600080516020615e7483398151915260448201527f65733a20466f72636564206261746368206973206e6f7420696e2074696d656f6064820152681d5d081c195c9a5bd960ba1b608482015260a4016109fa565b815180516020918201208184015160405161308a93889392914291339101615909565b60405160208183030381529060405280519060200120935085806130ad906158c0565b965050505080806130bd90615948565b915050612ec8565b50606880546001600160401b031916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b0319909216919091179286168502929092179091558554600160401b600160c01b03191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166131cf5760405162461bcd60e51b81526004016109fa90615b59565b6073546001600160a01b031633146131f95760405162461bcd60e51b81526004016109fa906157be565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561324957600080fd5b505af115801561325d573d6000803e3d6000fd5b5050505061259b614906565b613271613974565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133055760405162461bcd60e51b81526004016109fa90615bb6565b6133168989898989898989896142e2565b606980546001600160401b0319166001600160401b038881169182179092556000908152606d60205260409020859055607254161561336057607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156133a657600080fd5b505af11580156133ba573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff16156134425760405162461bcd60e51b81526004016109fa90615842565b606c54600160a01b900460ff1615156001146134705760405162461bcd60e51b81526004016109fa90615ad8565b600061347b60745490565b9050818111156134e05760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a204e6f7420656e6044820152696f756768206d6174696360b01b60648201526084016109fa565b620493e08351106135515760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b60648201526084016109fa565b60655461357090600160581b90046001600160a01b03163330846139ce565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa1580156135ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135de9190615741565b60688054919250600160c01b9091046001600160401b0316906018613602836158c0565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505083805190602001208142604051602001613643939291906158e6565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b0316600090815260669093529120553233036136e757606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613742565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161373993929190615c13565b60405180910390a25b50505050565b606a546001600160a01b031633146137725760405162461bcd60e51b81526004016109fa90615bb6565b6137828888888888888888613ad9565b606980546001600160401b0319166001600160401b038881169182179092556000908152606d6020526040902085905560725416156137cc57607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561381257600080fd5b505af1158015613826573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e15565b6073546001600160a01b031633146138915760405162461bcd60e51b81526004016109fa906157be565b606a80546001600160a01b0319166001600160a01b0383161790556040517f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90610f69908390614e58565b6138e4613974565b6001600160a01b0381166139495760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109fa565b6127a481614220565b61395a613974565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b0316331461259b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109fa565b6040516001600160a01b03808516602483015283166044820152606481018290526137429085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261495d565b6072546001600160401b03600160401b820481169116111561259b57607254600090613a7690600160401b90046001600160401b03166001615817565b9050613a8181611115565b156127a457607254600090600290613aa39084906001600160401b0316615961565b613aad9190615c46565b613ab79083615817565b9050613ac281611115565b15613ad057612bb681611e27565b612bb682611e27565b600080613ae4612bba565b90506001600160401b038a1615613c4a576072546001600160401b03908116908b161115613b9c5760405162461bcd60e51b815260206004820152605960248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20706560448201527f6e64696e6753746174654e756d206d757374206265206c657373206f7220657160648201527875616c207468616e206c61737450656e64696e67537461746560381b608482015260a4016109fa565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c445760405162461bcd60e51b815260206004820152604d6024820152600080516020615e3483398151915260448201527f69744e756d4261746368206d757374206d61746368207468652070656e64696e60648201526c0ce40e6e8c2e8ca40c4c2e8c6d609b1b608482015260a4016109fa565b50613d70565b6001600160401b0389166000908152606d6020526040902054915081613cd45760405162461bcd60e51b815260206004820152604460248201819052600080516020615e34833981519152908201527f69744e756d426174636820737461746520726f6f7420646f6573206e6f7420656064820152631e1a5cdd60e21b608482015260a4016109fa565b806001600160401b0316896001600160401b03161115613d705760405162461bcd60e51b815260206004820152605e6024820152600080516020615e3483398151915260448201527f69744e756d4261746368206d757374206265206c657373206f7220657175616c60648201527f207468616e2063757272656e744c617374566572696669656442617463680000608482015260a4016109fa565b806001600160401b0316886001600160401b031611613e185760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20666960448201527f6e616c4e65774261746368206d75737420626520626967676572207468616e206064820152770c6eae4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d60431b608482015260a4016109fa565b6000613e278a8a8a868b610f74565b90506000600080516020615e94833981519152600283604051613e4a9190615725565b602060405180830381855afa158015613e67573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613e8a9190615741565b613e949190615770565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613ed8918b918b918b9190600401615c6c565b602060405180830381865afa158015613ef5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f199190615ce6565b613f795760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20496e60448201526a3b30b634b210383937b7b360a91b60648201526084016109fa565b613fbc33613f87858d615961565b6001600160401b0316613f986128d7565b613fa291906159a0565b606554600160581b90046001600160a01b03169190614a34565b505050505050505050505050565b6000613fd4612bba565b905081600080613fe48484615961565b6001600160401b031690505b836001600160401b0316836001600160401b031614614096576001600160401b03808416600090815260676020526040902060655460018201549192610100909104811691614040911642615989565b111561407b57600181015461406590600160401b90046001600160401b031685615961565b614078906001600160401b031684615b41565b92505b60010154600160401b90046001600160401b03169250613ff0565b60006140a28383615989565b90508281101561411c5760006140b88285615989565b9050600c81116140c857806140cb565b600c5b90506140d88160036159a0565b6140e390600a615de7565b6065546140fc908390600160481b900461ffff16615de7565b60745461410991906159a0565b6141139190615ac4565b607455506141a8565b60006141288483615989565b9050600c8111614138578061413b565b600c5b9050600061414a8260036159a0565b61415590600a615de7565b60655461416e908490600160481b900461ffff16615de7565b60745461417b91906159a0565b6141859190615ac4565b90508060745460745461419891906159a0565b6141a29190615ac4565b60745550505b505050505050565b600054610100900460ff1661421b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109fa565b61259b335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156142c257600080fd5b505af11580156142d6573d6000803e3d6000fd5b5050505061259b614a64565b60006001600160401b038a1615614452576072546001600160401b03908116908b16111561439a5760405162461bcd60e51b81526020600482015260656024820152600080516020615e5483398151915260448201527f696e6753746174653a2070656e64696e6753746174654e756d206d757374206260648201527f65206c657373206f7220657175616c207468616e206c61737450656e64696e67608482015264537461746560d81b60a482015260c4016109fa565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b909204161461444c5760405162461bcd60e51b81526020600482015260596024820152600080516020615e5483398151915260448201527f696e6753746174653a20696e69744e756d4261746368206d757374206d6174636064820152780d040e8d0ca40e0cadcc8d2dcce40e6e8c2e8ca40c4c2e8c6d603b1b608482015260a4016109fa565b5061458b565b506001600160401b0387166000908152606d6020526040902054806144e65760405162461bcd60e51b81526020600482015260506024820152600080516020615e5483398151915260448201527f696e6753746174653a20696e69744e756d426174636820737461746520726f6f60648201526f1d08191bd95cc81b9bdd08195e1a5cdd60821b608482015260a4016109fa565b6069546001600160401b03908116908916111561458b5760405162461bcd60e51b81526020600482015260636024820152600080516020615e5483398151915260448201527f696e6753746174653a20696e69744e756d4261746368206d757374206265206c60648201527f657373206f7220657175616c207468616e206c617374566572696669656442616084820152620e8c6d60eb1b60a482015260c4016109fa565b6072546001600160401b03908116908a16118015906145bb5750896001600160401b0316896001600160401b0316115b80156145dc57506072546001600160401b03600160401b9091048116908a16115b61464d5760405162461bcd60e51b81526020600482015260486024820152600080516020615e5483398151915260448201527f696e6753746174653a2066696e616c50656e64696e6753746174654e756d20696064820152671b98dbdc9c9958dd60c21b608482015260a4016109fa565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146147065760405162461bcd60e51b81526020600482015260636024820152600080516020615e5483398151915260448201527f696e6753746174653a2066696e616c4e65774261746368206d7573742062652060648201527f657175616c207468616e2063757272656e744c617374566572696669656442616084820152620e8c6d60eb1b60a482015260c4016109fa565b6000614715898989858a610f74565b90506000600080516020615e948339815191526002836040516147389190615725565b602060405180830381855afa158015614755573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906147789190615741565b6147829190615770565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916147c6918a918a918a9190600401615c6c565b602060405180830381865afa1580156147e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148079190615ce6565b6148615760405162461bcd60e51b81526020600482015260376024820152600080516020615e5483398151915260448201527634b733a9ba30ba329d1024b73b30b634b210383937b7b360491b60648201526084016109fa565b6001600160401b038b16600090815260716020526040902060020154879003613fbc5760405162461bcd60e51b815260206004820152605b6024820152600080516020615e5483398151915260448201527f696e6753746174653a2053746f72656420726f6f74206d75737420626520646960648201527f66666572656e74207468616e206e657720737461746520726f6f740000000000608482015260a4016109fa565b60655460ff166149285760405162461bcd60e51b81526004016109fa90615b59565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006149b2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614abf9092919063ffffffff16565b805190915015614a2f57808060200190518101906149d09190615ce6565b614a2f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109fa565b505050565b6040516001600160a01b038316602482015260448101829052614a2f90849063a9059cbb60e01b90606401613a02565b60655460ff1615614a875760405162461bcd60e51b81526004016109fa90615842565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614ace8484600085614ad6565b949350505050565b606082471015614b375760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109fa565b600080866001600160a01b03168587604051614b539190615725565b60006040518083038185875af1925050503d8060008114614b90576040519150601f19603f3d011682016040523d82523d6000602084013e614b95565b606091505b5091509150614ba687838387614bb1565b979650505050505050565b60608315614c20578251600003614c19576001600160a01b0385163b614c195760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109fa565b5081614ace565b614ace8383815115614c355781518083602001fd5b8060405162461bcd60e51b81526004016109fa9190614d18565b80356001600160401b0381168114614c6657600080fd5b919050565b600080600080600060a08688031215614c8357600080fd5b614c8c86614c4f565b9450614c9a60208701614c4f565b9350614ca860408701614c4f565b94979396509394606081013594506080013592915050565b60005b83811015614cdb578181015183820152602001614cc3565b838111156137425750506000910152565b60008151808452614d04816020860160208601614cc0565b601f01601f19169290920160200192915050565b602081526000614d2b6020830184614cec565b9392505050565b8060408101831015614d4357600080fd5b92915050565b8060808101831015614d4357600080fd5b6000806000806000806000806101a0898b031215614d7757600080fd5b614d8089614c4f565b9750614d8e60208a01614c4f565b9650614d9c60408a01614c4f565b95506060890135945060808901359350614db98a60a08b01614d32565b9250614dc88a60e08b01614d49565b9150614dd88a6101608b01614d32565b90509295985092959890939650565b600060208284031215614df957600080fd5b813561ffff81168114614d2b57600080fd5b600080600080600060a08688031215614e2357600080fd5b614e2c86614c4f565b9450614e3a60208701614c4f565b94979496505050506040830135926060810135926080909101359150565b6001600160a01b0391909116815260200190565b600060208284031215614e7e57600080fd5b614d2b82614c4f565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614ebf57614ebf614e87565b60405290565b604051606081016001600160401b0381118282101715614ebf57614ebf614e87565b604051601f8201601f191681016001600160401b0381118282101715614f0f57614f0f614e87565b604052919050565b60006001600160401b03821115614f3057614f30614e87565b5060051b60200190565b600082601f830112614f4b57600080fd5b81356001600160401b03811115614f6457614f64614e87565b614f77601f8201601f1916602001614ee7565b818152846020838601011115614f8c57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614fbc57600080fd5b82356001600160401b0380821115614fd357600080fd5b818501915085601f830112614fe757600080fd5b8135614ffa614ff582614f17565b614ee7565b81815260059190911b8301840190848101908883111561501957600080fd5b8585015b838110156150b2578035858111156150355760008081fd5b86016080818c03601f190181131561504d5760008081fd5b615055614e9d565b89830135888111156150675760008081fd5b6150758e8c83870101614f3a565b8252506040808401358b830152606061508f818601614c4f565b8284015261509e848601614c4f565b90830152508552505091860191860161501d565b5098975050505050505050565b6001600160a01b03811681146127a457600080fd5b6000602082840312156150e657600080fd5b8135614d2b816150bf565b600080600080600060a0868803121561510957600080fd5b8535945060208601356001600160401b0381111561512657600080fd5b61513288828901614f3a565b9450506040860135925061514860608701614c4f565b91506080860135615158816150bf565b809150509295509295909350565b600080600080600080600080888a036101c081121561518457600080fd5b893561518f816150bf565b985060208a013561519f816150bf565b975060408a01356151af816150bf565b965060608a01356151bf816150bf565b955060e0607f19820112156151d357600080fd5b5060808901935061016089013592506101808901356001600160401b03808211156151fd57600080fd5b6152098c838d01614f3a565b93506101a08b013591508082111561522057600080fd5b5061522d8b828c01614f3a565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c03121561525c57600080fd5b6152658a614c4f565b985061527360208b01614c4f565b975061528160408b01614c4f565b965061528f60608b01614c4f565b955060808a0135945060a08a013593506152ac8b60c08c01614d32565b92506152bc8b6101008c01614d49565b91506152cc8b6101808c01614d32565b90509295985092959850929598565b6000602082840312156152ed57600080fd5b5035919050565b80151581146127a457600080fd5b60006020828403121561531457600080fd5b8135614d2b816152f4565b60006020828403121561533157600080fd5b81356001600160401b0381111561534757600080fd5b614ace84828501614f3a565b6000602080838503121561536657600080fd5b82356001600160401b038082111561537d57600080fd5b818501915085601f83011261539157600080fd5b813561539f614ff582614f17565b81815260059190911b830184019084810190888311156153be57600080fd5b8585015b838110156150b2578035858111156153da5760008081fd5b86016060818c03601f19018113156153f25760008081fd5b6153fa614ec5565b898301358881111561540c5760008081fd5b61541a8e8c83870101614f3a565b8252506040808401358b830152615432838501614c4f565b90820152855250509186019186016153c2565b6000806000806080858703121561545b57600080fd5b61546485614c4f565b93506020850135925061547960408601614c4f565b915061548760608601614c4f565b905092959194509250565b600080604083850312156154a557600080fd5b82356001600160401b038111156154bb57600080fd5b6154c785828601614f3a565b95602094909401359450505050565b600080604083850312156154e957600080fd5b823591506154f960208401614c4f565b90509250929050565b60208082526058908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2070656e60408201527f64696e6753746174654e756d206d757374206265206c657373206f7220657175606082015277616c207468616e206c61737450656e64696e67537461746560401b608082015260a00190565b6020808252604c90820152600080516020615df483398151915260408201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760608201526b040e6e8c2e8ca40c4c2e8c6d60a31b608082015260a00190565b6020808252604390820152600080516020615df483398151915260408201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786060820152621a5cdd60ea1b608082015260a00190565b6020808252605d90820152600080516020615df483398151915260408201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060608201527f7468616e2063757272656e744c61737456657269666965644261746368000000608082015260a00190565b60208082526057908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2066696e60408201527f616c4e65774261746368206d75737420626520626967676572207468616e20636060820152760eae4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d604b1b608082015260a00190565b60008251615737818460208701614cc0565b9190910192915050565b60006020828403121561575357600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b60008261577f5761577f61575a565b500690565b600181811c9082168061579857607f821691505b6020821081036157b857634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a204f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561583957615839615801565b01949350505050565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b038083168181036158dc576158dc615801565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6001600160601b0319166068820152607c0190565b60006001820161595a5761595a615801565b5060010190565b60006001600160401b038381169083168181101561598157615981615801565b039392505050565b60008282101561599b5761599b615801565b500390565b60008160001904831182151516156159ba576159ba615801565b500290565b601f821115614a2f57600081815260208120601f850160051c810160208610156159e65750805b601f850160051c820191505b818110156141a8578281556001016159f2565b81516001600160401b03811115615a1e57615a1e614e87565b615a3281615a2c8454615784565b846159bf565b602080601f831160018114615a675760008415615a4f5750858301515b600019600386901b1c1916600185901b1785556141a8565b600085815260208120601f198616915b82811015615a9657888601518255948401946001909101908401615a77565b5085821015615ab45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615ad357615ad361575a565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a204f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b60008219821115615b5457615b54615801565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a204f6e6c7920747275737465642061676772656761746f7200000000606082015260800190565b8381526001600160a01b0383166020820152606060408201819052600090615c3d90830184614cec565b95945050505050565b60006001600160401b0380841680615c6057615c6061575a565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615ca457848483379084018281529284019290600101615c84565b5050828760c0870137610100850181815286935091505b6001811015615cda578251825260209283019290910190600101615cbb565b50505095945050505050565b600060208284031215615cf857600080fd5b8151614d2b816152f4565b600181815b80851115615d3e578160001904821115615d2457615d24615801565b80851615615d3157918102915b93841c9390800290615d08565b509250929050565b600082615d5557506001614d43565b81615d6257506000614d43565b8160018114615d785760028114615d8257615d9e565b6001915050614d43565b60ff841115615d9357615d93615801565b50506001821b614d43565b5060208310610133831016604e8410600b8410161715615dc1575081810a614d43565b615dcb8383615d03565b8060001904821115615ddf57615ddf615801565b029392505050565b6000614d2b8383615d4656fe506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e69506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e637953506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20696e506f6c79676f6e5a6b45564d3a3a5f70726f766544697374696e637450656e64506f6c79676f6e5a6b45564d3a3a73657175656e6365466f726365426174636830644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a2046a2646970667358221220562c72c8c8d69f38d81dccdfc09c0be95e872f23db8696679b365ec9a030f1f664736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/TokenWrapped.json b/compiled-contracts/TokenWrapped.json index abfd9be6d..f8fccd26b 100644 --- a/compiled-contracts/TokenWrapped.json +++ b/compiled-contracts/TokenWrapped.json @@ -471,8 +471,8 @@ "type": "function" } ], - "bytecode": "0x60c06040523480156200001157600080fd5b5060405162001558380380620015588339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161109e620004ba60003960006104690152600081816102f90152610433015261109e6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866106638361104f565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161106157611061610fd1565b506001019056fea26469706673582212205af0e6dd4760d4ae367515578b46c4d5988b10ae47473e817626188baa0c03a264736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610df8565b60405180910390f35b61016d610168366004610e69565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e93565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e69565b61048b565b61023d610238366004610e69565b6104ad565b005b61018161024d366004610ecf565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610ecf565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e69565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e69565b610531565b61016d6102ef366004610e69565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ef1565b6105ba565b61018161033c366004610f64565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f97565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f97565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b63565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fe7565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fff565b60405180910390fd5b6104ea8282610c0f565b5050565b60606004805461037090610f97565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fff565b6104ea8282610cce565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866106638361104f565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b8e610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c779190610fe7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d2e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610da25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610938565b600060208083528351808285015260005b81811015610e2557858101830151858201604001528201610e09565b81811115610e37576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e6457600080fd5b919050565b60008060408385031215610e7c57600080fd5b610e8583610e4d565b946020939093013593505050565b600080600060608486031215610ea857600080fd5b610eb184610e4d565b9250610ebf60208501610e4d565b9150604084013590509250925092565b600060208284031215610ee157600080fd5b610eea82610e4d565b9392505050565b600080600080600080600060e0888a031215610f0c57600080fd5b610f1588610e4d565b9650610f2360208901610e4d565b95506040880135945060608801359350608088013560ff81168114610f4757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f7757600080fd5b610f8083610e4d565b9150610f8e60208401610e4d565b90509250929050565b600181811c90821680610fab57607f821691505b602082108103610fcb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610ffa57610ffa610fd1565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161106157611061610fd1565b506001019056fea26469706673582212205af0e6dd4760d4ae367515578b46c4d5988b10ae47473e817626188baa0c03a264736f6c634300080f0033", + "bytecode": "0x60c06040523480156200001157600080fd5b5060405162001542380380620015428339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611088620004ba60003960006104690152600081816102f9015261043301526110886000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610dc2565b60405180910390f35b61016d610168366004610e33565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e5d565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e33565b61048b565b61023d610238366004610e33565b6104ad565b005b61018161024d366004610e99565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610e99565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e33565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e33565b610531565b61016d6102ef366004610e33565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ebb565b6105ba565b61018161033c366004610f2e565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f61565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f61565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b51565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fb1565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fc9565b60405180910390fd5b6104ea8282610bfd565b5050565b60606004805461037090610f61565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fc9565b6104ea8282610caa565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611019565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b0384811660008181526020818152604080832087870390559387168083529184902080548701905592518581529092600080516020611033833981519152910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b7c610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c535760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c659190610fb1565b90915550506001600160a01b03821660008181526020818152604080832080548601905551848152600080516020611033833981519152910160405180910390a35050565b6001600160a01b038216610d0a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610d7e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192916000805160206110338339815191529101610938565b600060208083528351808285015260005b81811015610def57858101830151858201604001528201610dd3565b81811115610e01576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e2e57600080fd5b919050565b60008060408385031215610e4657600080fd5b610e4f83610e17565b946020939093013593505050565b600080600060608486031215610e7257600080fd5b610e7b84610e17565b9250610e8960208501610e17565b9150604084013590509250925092565b600060208284031215610eab57600080fd5b610eb482610e17565b9392505050565b600080600080600080600060e0888a031215610ed657600080fd5b610edf88610e17565b9650610eed60208901610e17565b95506040880135945060608801359350608088013560ff81168114610f1157600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f4157600080fd5b610f4a83610e17565b9150610f5860208401610e17565b90509250929050565b600181811c90821680610f7557607f821691505b602082108103610f9557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610fc457610fc4610f9b565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161102b5761102b610f9b565b506001019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212208b7986f78e961ad6c0885b86b24ce427045be98073c1f3d7fe18180542ab873564736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610dc2565b60405180910390f35b61016d610168366004610e33565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e5d565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e33565b61048b565b61023d610238366004610e33565b6104ad565b005b61018161024d366004610e99565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610e99565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e33565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e33565b610531565b61016d6102ef366004610e33565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ebb565b6105ba565b61018161033c366004610f2e565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f61565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f61565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b51565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fb1565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fc9565b60405180910390fd5b6104ea8282610bfd565b5050565b60606004805461037090610f61565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fc9565b6104ea8282610caa565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611019565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b0384811660008181526020818152604080832087870390559387168083529184902080548701905592518581529092600080516020611033833981519152910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b7c610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c535760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c659190610fb1565b90915550506001600160a01b03821660008181526020818152604080832080548601905551848152600080516020611033833981519152910160405180910390a35050565b6001600160a01b038216610d0a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610d7e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192916000805160206110338339815191529101610938565b600060208083528351808285015260005b81811015610def57858101830151858201604001528201610dd3565b81811115610e01576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e2e57600080fd5b919050565b60008060408385031215610e4657600080fd5b610e4f83610e17565b946020939093013593505050565b600080600060608486031215610e7257600080fd5b610e7b84610e17565b9250610e8960208501610e17565b9150604084013590509250925092565b600060208284031215610eab57600080fd5b610eb482610e17565b9392505050565b600080600080600080600060e0888a031215610ed657600080fd5b610edf88610e17565b9650610eed60208901610e17565b95506040880135945060608801359350608088013560ff81168114610f1157600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f4157600080fd5b610f4a83610e17565b9150610f5860208401610e17565b90509250929050565b600181811c90821680610f7557607f821691505b602082108103610f9557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610fc457610fc4610f9b565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161102b5761102b610f9b565b506001019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212208b7986f78e961ad6c0885b86b24ce427045be98073c1f3d7fe18180542ab873564736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/VerifierRollupHelperMock.json b/compiled-contracts/VerifierRollupHelperMock.json index 130b9690a..26f830ec9 100644 --- a/compiled-contracts/VerifierRollupHelperMock.json +++ b/compiled-contracts/VerifierRollupHelperMock.json @@ -38,8 +38,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50610101806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c806343753b4d14602d575b600080fd5b60426038366004606c565b6001949350505050565b604051901515815260200160405180910390f35b8060408101831015606657600080fd5b92915050565b600080600080610120808688031215608357600080fd5b608b87876056565b945060c0860187811115609d57600080fd5b60408701945060ab88826056565b93505086818701111560bc57600080fd5b5092959194509261010001915056fea264697066735822122052ed4fd6cd8d643eefd57803d04ccd0e2e0a6209cde6c3bda6e1e8d21e2b908f64736f6c634300080f0033", - "deployedBytecode": "0x6080604052348015600f57600080fd5b506004361060285760003560e01c806343753b4d14602d575b600080fd5b60426038366004606c565b6001949350505050565b604051901515815260200160405180910390f35b8060408101831015606657600080fd5b92915050565b600080600080610120808688031215608357600080fd5b608b87876056565b945060c0860187811115609d57600080fd5b60408701945060ab88826056565b93505086818701111560bc57600080fd5b5092959194509261010001915056fea264697066735822122052ed4fd6cd8d643eefd57803d04ccd0e2e0a6209cde6c3bda6e1e8d21e2b908f64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50610101806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c806343753b4d14602d575b600080fd5b60426038366004606c565b6001949350505050565b604051901515815260200160405180910390f35b8060408101831015606657600080fd5b92915050565b600080600080610120808688031215608357600080fd5b608b87876056565b945060c0860187811115609d57600080fd5b60408701945060ab88826056565b93505086818701111560bc57600080fd5b5092959194509261010001915056fea2646970667358221220563663b9c79c384b2428d1e041a468d42ddcac4e9cb78e1148c81eca7985714764736f6c634300080f0033", + "deployedBytecode": "0x6080604052348015600f57600080fd5b506004361060285760003560e01c806343753b4d14602d575b600080fd5b60426038366004606c565b6001949350505050565b604051901515815260200160405180910390f35b8060408101831015606657600080fd5b92915050565b600080600080610120808688031215608357600080fd5b608b87876056565b945060c0860187811115609d57600080fd5b60408701945060ab88826056565b93505086818701111560bc57600080fd5b5092959194509261010001915056fea2646970667358221220563663b9c79c384b2428d1e041a468d42ddcac4e9cb78e1148c81eca7985714764736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/PolygonZkEVM.sol b/contracts/PolygonZkEVM.sol index c19cec098..02a21b316 100644 --- a/contracts/PolygonZkEVM.sol +++ b/contracts/PolygonZkEVM.sol @@ -359,6 +359,8 @@ contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { forceBatchAllowed = initializePackedParameters.forceBatchAllowed; trustedSequencerURL = _trustedSequencerURL; networkName = _networkName; + + // Constant variables batchFee = 10 ** 18; // 1 Matic veryBatchTimeTarget = 30 minutes; multiplierBatchFee = 1002; @@ -368,14 +370,14 @@ contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { } modifier onlyAdmin() { - require(admin == msg.sender, "PolygonZkEVM::onlyAdmin: only admin"); + require(admin == msg.sender, "PolygonZkEVM::onlyAdmin: Only admin"); _; } modifier onlyTrustedSequencer() { require( trustedSequencer == msg.sender, - "PolygonZkEVM::onlyTrustedSequencer: only trusted sequencer" + "PolygonZkEVM::onlyTrustedSequencer: Only trusted sequencer" ); _; } @@ -383,7 +385,7 @@ contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { modifier onlyTrustedAggregator() { require( trustedAggregator == msg.sender, - "PolygonZkEVM::onlyTrustedAggregator: only trusted Aggregator" + "PolygonZkEVM::onlyTrustedAggregator: Only trusted aggregator" ); _; } @@ -391,7 +393,7 @@ contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { modifier isForceBatchAllowed() { require( forceBatchAllowed == true, - "PolygonZkEVM::isForceBatchAllowed: only if force batch is available" + "PolygonZkEVM::isForceBatchAllowed: Only if force batch is available" ); _; } @@ -556,12 +558,12 @@ contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { sequencedBatches[finalNewBatch].sequencedTimestamp + trustedAggregatorTimeout <= block.timestamp, - "PolygonZkEVM::verifyBatches: trusted aggregator timeout not expired" + "PolygonZkEVM::verifyBatches: Trusted aggregator timeout not expired" ); require( finalNewBatch - initNumBatch < MAX_VERIFY_BATCHES, - "PolygonZkEVM::verifyBatches: cannot verify that many batches" + "PolygonZkEVM::verifyBatches: Cannot verify that many batches" ); _verifyBatches( @@ -685,7 +687,7 @@ contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { // Already consolidated pending states can be used aswell require( pendingStateNum <= lastPendingState, - "PolygonZkEVM::verifyBatches: pendingStateNum must be less or equal than lastPendingState" + "PolygonZkEVM::_verifyBatches: pendingStateNum must be less or equal than lastPendingState" ); // Check choosen pending state @@ -699,27 +701,27 @@ contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { // Check initNumBatch matches the pending state require( initNumBatch == currentPendingState.lastVerifiedBatch, - "PolygonZkEVM::verifyBatches: initNumBatch must match the pending state batch" + "PolygonZkEVM::_verifyBatches: initNumBatch must match the pending state batch" ); } else { // Use consolidated state oldStateRoot = batchNumToStateRoot[initNumBatch]; require( oldStateRoot != bytes32(0), - "PolygonZkEVM::verifyBatches: initNumBatch state root does not exist" + "PolygonZkEVM::_verifyBatches: initNumBatch state root does not exist" ); - // Check initNumBatch is inside the range + // Check initNumBatch is inside the range, sanity check require( initNumBatch <= currentLastVerifiedBatch, - "PolygonZkEVM::verifyBatches: initNumBatch must be less or equal than currentLastVerifiedBatch" + "PolygonZkEVM::_verifyBatches: initNumBatch must be less or equal than currentLastVerifiedBatch" ); } // Check final batch require( finalNewBatch > currentLastVerifiedBatch, - "PolygonZkEVM::verifyBatches: finalNewBatch must be bigger than currentLastVerifiedBatch" + "PolygonZkEVM::_verifyBatches: finalNewBatch must be bigger than currentLastVerifiedBatch" ); // Get snark bytes @@ -737,7 +739,7 @@ contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { // Verify proof require( rollupVerifier.verifyProof(proofA, proofB, proofC, [inputSnark]), - "PolygonZkEVM::verifyBatches: Invalid proof" + "PolygonZkEVM::_verifyBatches: Invalid proof" ); // Get MATIC reward @@ -795,7 +797,7 @@ contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { if (msg.sender != trustedAggregator) { require( isPendingStateConsolidable(pendingStateNum), - "PolygonZkEVM::consolidatePendingState: pending state is not ready to be consolidated" + "PolygonZkEVM::consolidatePendingState: Pending state is not ready to be consolidated" ); } @@ -838,7 +840,7 @@ contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { // Load sequenced batchdata SequencedBatchData storage currentSequencedBatchData = sequencedBatches[ - currentLastVerifiedBatch + currentBatch ]; // Check if timestamp is above or below the VERIFY_BATCH_TIME_TARGET @@ -847,7 +849,7 @@ contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { veryBatchTimeTarget ) { totalBatchesAboveTarget += - currentLastVerifiedBatch - + currentBatch - currentSequencedBatchData.previousLastBatchSequenced; } @@ -916,7 +918,7 @@ contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { require( maticFee <= maticAmount, - "PolygonZkEVM::forceBatch: not enough matic" + "PolygonZkEVM::forceBatch: Not enough matic" ); require( @@ -966,17 +968,17 @@ contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { require( batchesNum > 0, - "PolygonZkEVM::sequenceForceBatch: Must force at least 1 batch" + "PolygonZkEVM::sequenceForceBatches: Must force at least 1 batch" ); require( batchesNum < MAX_VERIFY_BATCHES, - "PolygonZkEVM::sequenceForceBatches: cannot verify that many batches" + "PolygonZkEVM::sequenceForceBatches: Cannot verify that many batches" ); require( lastForceBatchSequenced + batchesNum <= lastForceBatch, - "PolygonZkEVM::sequenceForceBatch: Force batch invalid" + "PolygonZkEVM::sequenceForceBatches: Force batch invalid" ); // Store storage variables in memory, to save gas, because will be overrided multiple times @@ -1011,7 +1013,7 @@ contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { require( currentBatch.minForcedTimestamp + FORCE_BATCH_TIMEOUT <= block.timestamp, - "PolygonZkEVM::sequenceForceBatch: Forced batch is not in timeout period" + "PolygonZkEVM::sequenceForceBatches: Forced batch is not in timeout period" ); } // Calculate next acc input hash @@ -1102,12 +1104,12 @@ contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { ) public onlyAdmin { require( newTrustedAggregatorTimeout <= HALT_AGGREGATION_TIMEOUT, - "PolygonZkEVM::setPendingStateTimeout: exceed halt aggregation timeout" + "PolygonZkEVM::setTrustedAggregatorTimeout: Exceed max halt aggregation timeout" ); if (!isEmergencyState) { require( newTrustedAggregatorTimeout < trustedAggregatorTimeout, - "PolygonZkEVM::setTrustedAggregatorTimeout: new timeout must be lower" + "PolygonZkEVM::setTrustedAggregatorTimeout: New timeout must be lower" ); } @@ -1125,12 +1127,12 @@ contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { ) public onlyAdmin { require( newPendingStateTimeout <= HALT_AGGREGATION_TIMEOUT, - "PolygonZkEVM::setPendingStateTimeout: exceed halt aggregation timeout" + "PolygonZkEVM::setPendingStateTimeout: Exceed max halt aggregation timeout" ); if (!isEmergencyState) { require( newPendingStateTimeout < pendingStateTimeout, - "PolygonZkEVM::setPendingStateTimeout: new timeout must be lower" + "PolygonZkEVM::setPendingStateTimeout: New timeout must be lower" ); } @@ -1146,7 +1148,7 @@ contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { uint16 newMultiplierBatchFee ) public onlyAdmin { require( - newMultiplierBatchFee > 1000 && newMultiplierBatchFee < 1024, + newMultiplierBatchFee >= 1000 && newMultiplierBatchFee < 1024, "PolygonZkEVM::setMultiplierBatchFee: newMultiplierBatchFee incorrect range" ); @@ -1308,7 +1310,7 @@ contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { // Already consolidated pending states can be used aswell require( initPendingStateNum <= lastPendingState, - "PolygonZkEVM::proveNonDeterministicPendingState: pendingStateNum must be less or equal than lastPendingState" + "PolygonZkEVM::_proveDistinctPendingState: pendingStateNum must be less or equal than lastPendingState" ); // Check choosen pending state @@ -1322,20 +1324,20 @@ contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { // Check initNumBatch matches the init pending state require( initNumBatch == initPendingState.lastVerifiedBatch, - "PolygonZkEVM::proveNonDeterministicPendingState: initNumBatch must match the pending state batch" + "PolygonZkEVM::_proveDistinctPendingState: initNumBatch must match the pending state batch" ); } else { // Use consolidated state oldStateRoot = batchNumToStateRoot[initNumBatch]; require( oldStateRoot != bytes32(0), - "PolygonZkEVM::proveNonDeterministicPendingState: initNumBatch state root does not exist" + "PolygonZkEVM::_proveDistinctPendingState: initNumBatch state root does not exist" ); - // Check initNumBatch is inside the range + // Check initNumBatch is inside the range, sanity check require( initNumBatch <= lastVerifiedBatch, - "PolygonZkEVM::proveNonDeterministicPendingState: initNumBatch must be less or equal than currentLastVerifiedBatch" + "PolygonZkEVM::_proveDistinctPendingState: initNumBatch must be less or equal than lastVerifiedBatch" ); } @@ -1347,14 +1349,14 @@ contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { finalPendingStateNum <= lastPendingState && finalPendingStateNum > initPendingStateNum && finalPendingStateNum > lastPendingStateConsolidated, - "PolygonZkEVM::proveNonDeterministicPendingState: finalPendingStateNum incorrect" + "PolygonZkEVM::_proveDistinctPendingState: finalPendingStateNum incorrect" ); // Check final num batch require( finalNewBatch == pendingStateTransitions[finalPendingStateNum].lastVerifiedBatch, - "PolygonZkEVM::proveNonDeterministicPendingState: finalNewBatch must be equal than currentLastVerifiedBatch" + "PolygonZkEVM::_proveDistinctPendingState: finalNewBatch must be equal than currentLastVerifiedBatch" ); // Get snark bytes @@ -1372,13 +1374,13 @@ contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { // Verify proof require( rollupVerifier.verifyProof(proofA, proofB, proofC, [inputSnark]), - "PolygonZkEVM::proveNonDeterministicPendingState: Invalid proof" + "PolygonZkEVM::_proveDistinctPendingState: Invalid proof" ); require( pendingStateTransitions[finalPendingStateNum].stateRoot != newStateRoot, - "PolygonZkEVM::proveNonDeterministicPendingState: stored root must be different than new state root" + "PolygonZkEVM::_proveDistinctPendingState: Stored root must be different than new state root" ); } @@ -1390,18 +1392,11 @@ contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { function activateEmergencyState(uint64 sequencedBatchNum) external { if (msg.sender != owner()) { // Only check conditions if is not called by the owner - uint256 lastVerifiedBatchToCompare; - if (lastPendingState > 0) { - lastVerifiedBatchToCompare = pendingStateTransitions[ - lastPendingState - ].lastVerifiedBatch; - } else { - lastVerifiedBatchToCompare = lastVerifiedBatch; - } + uint64 currentLastVerifiedBatch = getLastVerifiedBatch(); // Check that the batch has not been verified require( - sequencedBatchNum > lastVerifiedBatchToCompare, + sequencedBatchNum > currentLastVerifiedBatch, "PolygonZkEVM::activateEmergencyState: Batch already verified" ); diff --git a/hardhat.config.js b/hardhat.config.js index 6b0dba878..8cad68f8b 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -23,7 +23,7 @@ module.exports = { settings: { optimizer: { enabled: true, - runs: 200 + runs: 100 } } }, diff --git a/test/contracts/emergencyManager.test.js b/test/contracts/emergencyManager.test.js index 85834351a..49543e223 100644 --- a/test/contracts/emergencyManager.test.js +++ b/test/contracts/emergencyManager.test.js @@ -210,7 +210,7 @@ describe('Emergency mode test', () => { .to.be.revertedWith('PolygonZkEVM::onlyPolygonZkEVM: only PolygonZkEVM contract'); await expect(polygonZkEVMContract.deactivateEmergencyState()) - .to.be.revertedWith('PolygonZkEVM::onlyAdmin: only admin'); + .to.be.revertedWith('PolygonZkEVM::onlyAdmin: Only admin'); await expect(polygonZkEVMContract.connect(admin).deactivateEmergencyState()) .to.emit(polygonZkEVMContract, 'EmergencyStateDeactivated') @@ -277,7 +277,7 @@ describe('Emergency mode test', () => { proofB, proofC, ), - ).to.be.revertedWith('PolygonZkEVM::proveNonDeterministicPendingState: finalNewBatch must be equal than currentLastVerifiedBatch'); + ).to.be.revertedWith('PolygonZkEVM::_proveDistinctPendingState: finalNewBatch must be equal than currentLastVerifiedBatch'); await expect( polygonZkEVMContract.connect(trustedAggregator).proveNonDeterministicPendingState( @@ -291,7 +291,7 @@ describe('Emergency mode test', () => { proofB, proofC, ), - ).to.be.revertedWith('PolygonZkEVM::proveNonDeterministicPendingState: finalNewBatch must be equal than currentLastVerifiedBatch'); + ).to.be.revertedWith('PolygonZkEVM::_proveDistinctPendingState: finalNewBatch must be equal than currentLastVerifiedBatch'); const newStateRootDistinct = '0x0000000000000000000000000000000000000000000000000000000000000002'; diff --git a/test/contracts/proofOfEfficiency.test.js b/test/contracts/proofOfEfficiency.test.js index 044cdc54b..297cccf22 100644 --- a/test/contracts/proofOfEfficiency.test.js +++ b/test/contracts/proofOfEfficiency.test.js @@ -121,7 +121,7 @@ describe('Polygon ZK-EVM', () => { // setTrustedSequencer await expect(polygonZkEVMContract.setTrustedSequencer(deployer.address)) - .to.be.revertedWith('PolygonZkEVM::onlyAdmin: only admin'); + .to.be.revertedWith('PolygonZkEVM::onlyAdmin: Only admin'); await expect( polygonZkEVMContract.connect(admin).setTrustedSequencer(deployer.address), ).to.emit(polygonZkEVMContract, 'SetTrustedSequencer').withArgs(deployer.address); @@ -129,7 +129,7 @@ describe('Polygon ZK-EVM', () => { // setForceBatchAllowed await expect(polygonZkEVMContract.setForceBatchAllowed(!allowForcebatches)) - .to.be.revertedWith('PolygonZkEVM::onlyAdmin: only admin'); + .to.be.revertedWith('PolygonZkEVM::onlyAdmin: Only admin'); await expect( polygonZkEVMContract.connect(admin).setForceBatchAllowed(!allowForcebatches), ).to.emit(polygonZkEVMContract, 'SetForceBatchAllowed').withArgs(!allowForcebatches); @@ -138,7 +138,7 @@ describe('Polygon ZK-EVM', () => { // setTrustedSequencerURL const url = 'https://test'; await expect(polygonZkEVMContract.setTrustedSequencerURL(url)) - .to.be.revertedWith('PolygonZkEVM::onlyAdmin: only admin'); + .to.be.revertedWith('PolygonZkEVM::onlyAdmin: Only admin'); await expect( polygonZkEVMContract.connect(admin).setTrustedSequencerURL(url), ).to.emit(polygonZkEVMContract, 'SetTrustedSequencerURL').withArgs(url); @@ -147,7 +147,7 @@ describe('Polygon ZK-EVM', () => { // setTrustedAggregator const newTrustedAggregator = deployer.address; await expect(polygonZkEVMContract.setTrustedAggregator(newTrustedAggregator)) - .to.be.revertedWith('PolygonZkEVM::onlyAdmin: only admin'); + .to.be.revertedWith('PolygonZkEVM::onlyAdmin: Only admin'); await expect( polygonZkEVMContract.connect(admin).setTrustedAggregator(newTrustedAggregator), ).to.emit(polygonZkEVMContract, 'SetTrustedAggregator').withArgs(newTrustedAggregator); @@ -155,10 +155,10 @@ describe('Polygon ZK-EVM', () => { // setTrustedAggregatorTimeout await expect(polygonZkEVMContract.setTrustedAggregatorTimeout(trustedAggregatorTimeoutDefault)) - .to.be.revertedWith('PolygonZkEVM::onlyAdmin: only admin'); + .to.be.revertedWith('PolygonZkEVM::onlyAdmin: Only admin'); await expect(polygonZkEVMContract.connect(admin).setTrustedAggregatorTimeout(trustedAggregatorTimeoutDefault)) - .to.be.revertedWith('PolygonZkEVM::setTrustedAggregatorTimeout: new timeout must be lower'); + .to.be.revertedWith('PolygonZkEVM::setTrustedAggregatorTimeout: New timeout must be lower'); const newTrustedAggregatorTimeout = trustedAggregatorTimeoutDefault - 1; await expect( @@ -168,10 +168,10 @@ describe('Polygon ZK-EVM', () => { // setPendingStateTimeoutDefault await expect(polygonZkEVMContract.setPendingStateTimeout(pendingStateTimeoutDefault)) - .to.be.revertedWith('PolygonZkEVM::onlyAdmin: only admin'); + .to.be.revertedWith('PolygonZkEVM::onlyAdmin: Only admin'); await expect(polygonZkEVMContract.connect(admin).setPendingStateTimeout(pendingStateTimeoutDefault)) - .to.be.revertedWith('PolygonZkEVM::setPendingStateTimeout: new timeout must be lower'); + .to.be.revertedWith('PolygonZkEVM::setPendingStateTimeout: New timeout must be lower'); const newPendingStateTimeoutDefault = pendingStateTimeoutDefault - 1; await expect( @@ -181,7 +181,7 @@ describe('Polygon ZK-EVM', () => { // setAdmin await expect(polygonZkEVMContract.setAdmin(deployer.address)) - .to.be.revertedWith('PolygonZkEVM::onlyAdmin: only admin'); + .to.be.revertedWith('PolygonZkEVM::onlyAdmin: Only admin'); await expect( polygonZkEVMContract.connect(admin).setAdmin(deployer.address), ).to.emit(polygonZkEVMContract, 'SetAdmin').withArgs(deployer.address); @@ -202,7 +202,7 @@ describe('Polygon ZK-EVM', () => { // revert because sender is not truested sequencer await expect(polygonZkEVMContract.sequenceBatches([sequence])) - .to.be.revertedWith('PolygonZkEVM::onlyTrustedSequencer: only trusted sequencer'); + .to.be.revertedWith('PolygonZkEVM::onlyTrustedSequencer: Only trusted sequencer'); // revert because tokens were not approved await expect(polygonZkEVMContract.connect(trustedSequencer).sequenceBatches([sequence])) @@ -513,7 +513,7 @@ describe('Polygon ZK-EVM', () => { // revert because the maxMatic amount is less than the necessary to pay await expect(polygonZkEVMContract.forceBatch(l2txData, maticAmount.sub(1))) - .to.be.revertedWith('PolygonZkEVM::forceBatch: not enough matic'); + .to.be.revertedWith('PolygonZkEVM::forceBatch: Not enough matic'); // revert because tokens were not approved await expect(polygonZkEVMContract.forceBatch(l2txData, maticAmount)) @@ -597,11 +597,11 @@ describe('Polygon ZK-EVM', () => { // revert because the timeout is not expired await expect(polygonZkEVMContract.sequenceForceBatches([])) - .to.be.revertedWith('PolygonZkEVM::sequenceForceBatch: Must force at least 1 batch'); + .to.be.revertedWith('PolygonZkEVM::sequenceForceBatches: Must force at least 1 batch'); // revert because the timeout is not expired await expect(polygonZkEVMContract.sequenceForceBatches([forceBatchStruct])) - .to.be.revertedWith('PolygonZkEVM::sequenceForceBatch: Forced batch is not in timeout period'); + .to.be.revertedWith('PolygonZkEVM::sequenceForceBatches: Forced batch is not in timeout period'); // Increment timestamp const forceBatchTimeout = await polygonZkEVMContract.FORCE_BATCH_TIMEOUT(); @@ -681,7 +681,7 @@ describe('Polygon ZK-EVM', () => { proofB, proofC, ), - ).to.be.revertedWith('PolygonZkEVM::onlyTrustedAggregator: only trusted Aggregator'); + ).to.be.revertedWith('PolygonZkEVM::onlyTrustedAggregator: Only trusted aggregator'); await expect( polygonZkEVMContract.connect(trustedAggregator).trustedVerifyBatches( @@ -694,7 +694,7 @@ describe('Polygon ZK-EVM', () => { proofB, proofC, ), - ).to.be.revertedWith('PolygonZkEVM::verifyBatches: finalNewBatch must be bigger than currentLastVerifiedBatch'); + ).to.be.revertedWith('PolygonZkEVM::_verifyBatches: finalNewBatch must be bigger than currentLastVerifiedBatch'); await expect( polygonZkEVMContract.connect(trustedAggregator).trustedVerifyBatches( @@ -1002,7 +1002,7 @@ describe('Polygon ZK-EVM', () => { proofB, proofC, ), - ).to.be.revertedWith('PolygonZkEVM::verifyBatches: trusted aggregator timeout not expired'); + ).to.be.revertedWith('PolygonZkEVM::verifyBatches: Trusted aggregator timeout not expired'); await ethers.provider.send('evm_setNextBlockTimestamp', [sequencedTimestamp.toNumber() + trustedAggregatorTimeoutDefault - 1]); @@ -1017,7 +1017,7 @@ describe('Polygon ZK-EVM', () => { proofB, proofC, ), - ).to.be.revertedWith('PolygonZkEVM::verifyBatches: trusted aggregator timeout not expired'); + ).to.be.revertedWith('PolygonZkEVM::verifyBatches: Trusted aggregator timeout not expired'); await expect( polygonZkEVMContract.connect(aggregator1).verifyBatches( @@ -1082,13 +1082,13 @@ describe('Polygon ZK-EVM', () => { // Not ready to be consolidated await expect( polygonZkEVMContract.consolidatePendingState(lastPendingstate), - ).to.be.revertedWith('PolygonZkEVM::consolidatePendingState: pending state is not ready to be consolidated'); + ).to.be.revertedWith('PolygonZkEVM::consolidatePendingState: Pending state is not ready to be consolidated'); await ethers.provider.send('evm_setNextBlockTimestamp', [verifyTimestamp + pendingStateTimeoutDefault - 1]); await expect( polygonZkEVMContract.consolidatePendingState(lastPendingstate), - ).to.be.revertedWith('PolygonZkEVM::consolidatePendingState: pending state is not ready to be consolidated'); + ).to.be.revertedWith('PolygonZkEVM::consolidatePendingState: Pending state is not ready to be consolidated'); await expect( polygonZkEVMContract.consolidatePendingState(lastPendingstate), From 15be36acb25db69fafe24fbe2d936ac6c6822770 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Thu, 22 Dec 2022 03:25:50 +0100 Subject: [PATCH 70/71] comments --- compiled-contracts/PolygonZkEVM.json | 4 ++-- compiled-contracts/PolygonZkEVMBridge.json | 4 ++-- compiled-contracts/PolygonZkEVMBridgeMock.json | 4 ++-- compiled-contracts/PolygonZkEVMMock.json | 4 ++-- contracts/PolygonZkEVM.sol | 4 +++- contracts/PolygonZkEVMBridge.sol | 3 +++ docs/PolygonZkEVM.md | 9 ++++++++- docs/PolygonZkEVMBridge.md | 8 +++++++- 8 files changed, 29 insertions(+), 11 deletions(-) diff --git a/compiled-contracts/PolygonZkEVM.json b/compiled-contracts/PolygonZkEVM.json index 44897a936..b341d9bb3 100644 --- a/compiled-contracts/PolygonZkEVM.json +++ b/compiled-contracts/PolygonZkEVM.json @@ -1469,8 +1469,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50615503806100206000396000f3fe608060405234801561001057600080fd5b506004361061032f5760003560e01c80638da5cb5b116101b4578063cfa8ed47116100fa578063e7a7ed021161009d578063e7a7ed021461080e578063e8bf92ed14610828578063eaeb077b1461083b578063edc411211461084e578063f14916d614610861578063f2fde38b14610874578063f851a44014610887578063f8b823e41461089a57600080fd5b8063cfa8ed471461077c578063d02103ca14610796578063d8d1091b146107a9578063d8f54db0146107bc578063d939b315146107d0578063dbc16976146107ea578063e11f3f18146107f2578063e217cfd61461080557600080fd5b8063ab9fc5ef11610162578063ab9fc5ef14610688578063adc879e914610692578063afd23cbe146106ac578063b4d63f58146106d4578063b6b0b09714610734578063c0ed84e01461074e578063c89e42df14610756578063cf1363061461076957600080fd5b80638da5cb5b1461062157806399f5634e146106325780639c9f3dfe1461063a5780639eb831b91461064d5780639f0d039d14610655578063a3c573eb1461065d578063aa58bad61461067057600080fd5b80634a910e6a11610279578063715018a611610227578063715018a61461053b5780637215541a1461054357806375c508b3146105565780637fcb365314610569578063837a47381461057c578063841b24d7146105ea5780638b48931e146106045780638c4a0af71461060e57600080fd5b80634a910e6a146104a75780635392c5e0146104ba578063542028d5146104da57806360943d6a146104e25780636b8616ce146104f55780636ff512cc14610515578063704b6c021461052857600080fd5b8063383b3be8116102e1578063383b3be8146103fa578063394218e91461040d5780633c15826714610420578063423fa85614610433578063456052671461044d578063458c0477146104675780634834a3431461047a5780634a1a89a71461048d57600080fd5b8063107bf28c1461033457806315064c96146103525780631816b7e51461036f57806319d8ac6114610384578063220d7899146103af57806329878983146103c25780632d0889d3146103e2575b600080fd5b61033c6108a3565b6040516103499190614647565b60405180910390f35b60655461035f9060ff1681565b6040519015158152602001610349565b61038261037d366004614661565b610931565b005b606854610397906001600160401b031681565b6040516001600160401b039091168152602001610349565b61033c6103bd3660046146a1565b610a5b565b606a546103d5906001600160a01b031681565b60405161034991906146ee565b6103ec620493e081565b604051908152602001610349565b61035f610408366004614702565b610bfc565b61038261041b366004614702565b610c43565b61038261042e36600461483f565b610dff565b60685461039790600160401b90046001600160401b031681565b60685461039790600160801b90046001600160401b031681565b607254610397906001600160401b031681565b61038261048836600461497d565b6115c6565b60725461039790600160401b90046001600160401b031681565b6103826104b5366004614702565b61190f565b6103ec6104c8366004614702565b606d6020526000908152604090205481565b61033c611baa565b6103826104f0366004614a1f565b611bb7565b6103ec610503366004614702565b60666020526000908152604090205481565b610382610523366004614af6565b611f12565b610382610536366004614af6565b611f90565b610382612005565b610382610551366004614702565b612019565b610382610564366004614b13565b612223565b606954610397906001600160401b031681565b6105bf61058a366004614bb1565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610349565b60725461039790600160c01b90046001600160401b031681565b61039762093a8081565b61038261061c366004614bd8565b6122b2565b6033546001600160a01b03166103d5565b6103ec612329565b610382610648366004614702565b612411565b6103ec600c81565b6074546103ec565b6070546103d5906001600160a01b031681565b6065546103979061010090046001600160401b031681565b6103976206978081565b606c5461039790600160a81b90046001600160401b031681565b6065546106c190600160481b900461ffff1681565b60405161ffff9091168152602001610349565b61070f6106e2366004614702565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610349565b6065546103d590600160581b90046001600160a01b031681565b6103976125bf565b610382610764366004614bf5565b61260c565b610382610777366004614702565b612672565b6069546103d590600160401b90046001600160a01b031681565b606c546103d5906001600160a01b031681565b6103826107b7366004614c29565b6126f3565b606c5461035f90600160a01b900460ff1681565b60725461039790600160801b90046001600160401b031681565b610382612bb3565b610382610800366004614b13565b612c6f565b6103976103e881565b60685461039790600160c01b90046001600160401b031681565b606b546103d5906001600160a01b031681565b610382610849366004614d1b565b612db4565b61038261085c36600461497d565b6130dd565b61038261086f366004614af6565b6131fd565b610382610882366004614af6565b613272565b6073546103d5906001600160a01b031681565b6103ec60745481565b606f80546108b090614d5f565b80601f01602080910402602001604051908101604052809291908181526020018280546108dc90614d5f565b80156109295780601f106108fe57610100808354040283529160200191610929565b820191906000526020600020905b81548152906001019060200180831161090c57829003601f168201915b505050505081565b6073546001600160a01b031633146109645760405162461bcd60e51b815260040161095b90614d99565b60405180910390fd5b6103e88161ffff161015801561097f57506104008161ffff16105b610a045760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a40161095b565b6065805461ffff60481b1916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610a8d57508115155b610b01576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f74206578697374606482015260840161095b565b80610b76576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f74206578697374606482015260840161095b565b606c54604080516001600160601b03193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610c3292600160801b90920481169116614df2565b6001600160401b0316111592915050565b6073546001600160a01b03163314610c6d5760405162461bcd60e51b815260040161095b90614d99565b62093a806001600160401b0382161115610d065760405162461bcd60e51b815260206004820152604e60248201527f506f6c79676f6e5a6b45564d3a3a73657454727573746564416767726567617460448201527f6f7254696d656f75743a20457863656564206d61782068616c7420616767726560648201526d19d85d1a5bdb881d1a5b595bdd5d60921b608482015260a40161095b565b60655460ff16610da9576072546001600160401b03600160c01b909104811690821610610da95760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a204e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a40161095b565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610a50565b60655460ff1615610e225760405162461bcd60e51b815260040161095b90614e1d565b606954600160401b90046001600160a01b03163314610ea95760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a204f6e6c7920747275737465642073657175656e636572000000000000606482015260840161095b565b805180610f1e5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e63652031206261746368000000606482015260840161095b565b6103e88110610f97576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e792062617463686573606482015260840161095b565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b858110156113fc576000878281518110610fea57610fea614e85565b60200260200101519050600081606001516001600160401b0316111561117a578361101481614e9b565b94505060008160000151805190602001208260200151836060015160405160200161104193929190614ec1565b60408051601f1981840301815291815281516020928301206001600160401b0388166000908152606690935291205490915081146110d55760405162461bcd60e51b815260206004820152603d60248201526000805160206154ae83398151915260448201527f6f7263656420626174636865732064617461206d757374206d61746368000000606482015260840161095b565b81606001516001600160401b031682604001516001600160401b031610156111745760405162461bcd60e51b815260206004820152605860248201526000805160206154ae83398151915260448201527f6f7263656420626174636865732074696d657374616d70206d757374206265206064820152773134b3b3b2b91037b91032b8bab0b6103a3430b71036b4b760411b608482015260a40161095b565b506112ef565b602081015115806112035750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916111bd9160040190815260200190565b6020604051808303816000875af11580156111dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112009190614ee4565b15155b6112755760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d757374206578697374000000000000606482015260840161095b565b805151620493e0116112ef5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f77000000000000606482015260840161095b565b856001600160401b031681604001516001600160401b03161015801561132257504281604001516001600160401b031611155b6113945760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e6765000000606482015260840161095b565b805180516020918201208183015160408085015190516113bb948894939291339101614efd565b60405160208183030381529060405280519060200120925084806113de90614e9b565b955050806040015195505080806113f490614f3c565b915050610fce565b506068546001600160401b03600160c01b9091048116908316111561146f5760405162461bcd60e51b815260206004820152603560248201526000805160206154ae8339815191526044820152746f7263652062617463686573206f766572666c6f7760581b606482015260840161095b565b60685460009061148f90600160801b90046001600160401b031684614f55565b6114a2906001600160401b031687614f7d565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115779033903090849061155c9190614f94565b606554600160581b90046001600160a01b03169291906132e8565b61157f613353565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff16156115e95760405162461bcd60e51b815260040161095b90614e1d565b6072546001600160401b03878116600090815260676020526040902060010154429261162092600160c01b90910481169116614df2565b6001600160401b031611156116a95760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2054727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a40161095b565b6103e86116b68888614f55565b6001600160401b0316106117325760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2043616e60448201527f6e6f74207665726966792074686174206d616e79206261746368657300000000606482015260840161095b565b61174288888888888888886133f7565b61174b866138fa565b607254600160801b90046001600160401b0316600003611813576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d6020526040902085905560725416156117b057607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156117f657600080fd5b505af115801561180a573d6000803e3d6000fd5b505050506118c4565b61181b613353565b607280546001600160401b031690600061183483614e9b565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b0381161580159061193c57506072546001600160401b03600160401b9091048116908216115b801561195757506072546001600160401b0390811690821611155b6119d55760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a40161095b565b606a546001600160a01b03163314611a7f576119f081610bfc565b611a7f5760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2050656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a40161095b565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611b3c57600080fd5b505af1158015611b50573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611b9d91815260200190565b60405180910390a3505050565b606e80546108b090614d5f565b600054610100900460ff1615808015611bd75750600054600160ff909116105b80611bf15750303b158015611bf1575060005460ff166001145b611c545760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161095b565b6000805460ff191660011790558015611c77576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c81169190911790925560658054600160581b600160f81b031916600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611cdf6020860186614af6565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d0f6060860160408701614af6565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611d4a60c0860160a08701614af6565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611da760e0860160c08701614702565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611dde6040860160208701614702565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611e1a6080860160608701614702565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611e5660a0860160808701614bd8565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611e7e8482614ff9565b50606f611e8b8382614ff9565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611ec1613ae0565b8015611f07576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611f3c5760405162461bcd60e51b815260040161095b90614d99565b60698054600160401b600160e01b031916600160401b6001600160a01b038416021790556040517ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090610a509083906146ee565b6073546001600160a01b03163314611fba5760405162461bcd60e51b815260040161095b90614d99565b607380546001600160a01b0319166001600160a01b0383161790556040517f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190610a509083906146ee565b61200d613b54565b6120176000613bae565b565b6033546001600160a01b031633146122185760006120356125bf565b9050806001600160401b0316826001600160401b0316116120ac5760405162461bcd60e51b815260206004820152603c602482015260008051602061542e83398151915260448201527f746174653a20426174636820616c726561647920766572696669656400000000606482015260840161095b565b6068546001600160401b03600160401b9091048116908316118015906120ee57506001600160401b038083166000908152606760205260409020600101541615155b6121675760405162461bcd60e51b8152602060048201526050602482015260008051602061542e83398151915260448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a40161095b565b6001600160401b0380831660009081526067602052604090206001015442916121959162093a809116614df2565b6001600160401b031611156122165760405162461bcd60e51b815260206004820152604d602482015260008051602061542e83398151915260448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a40161095b565b505b612220613c00565b50565b60655460ff16156122465760405162461bcd60e51b815260040161095b90614e1d565b612257898989898989898989613c70565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f07613c00565b6073546001600160a01b031633146122dc5760405162461bcd60e51b815260040161095b90614d99565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a5090831515815260200190565b6065546040516370a0823160e01b81526000918291600160581b9091046001600160a01b0316906370a08231906123649030906004016146ee565b602060405180830381865afa158015612381573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a59190614ee4565b905060006123b16125bf565b6068546001600160401b03600160401b82048116916123e191600160801b8204811691600160c01b900416614f55565b6123eb9190614df2565b6123f59190614f55565b6001600160401b0316905061240a81836150ce565b9250505090565b6073546001600160a01b0316331461243b5760405162461bcd60e51b815260040161095b90614d99565b62093a806001600160401b03821611156124cf5760405162461bcd60e51b815260206004820152604960248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a20457863656564206d61782068616c74206167677265676174696f6064820152681b881d1a5b595bdd5d60ba1b608482015260a40161095b565b60655460ff16612564576072546001600160401b03600160801b9091048116908216106125645760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a204e65772074696d656f7574206d757374206265206c6f77657200606482015260840161095b565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610a50565b6072546000906001600160401b0316156125fc57506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126365760405162461bcd60e51b815260040161095b90614d99565b606e6126428282614ff9565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a509190614647565b6073546001600160a01b0316331461269c5760405162461bcd60e51b815260040161095b90614d99565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610a50565b60655460ff16156127165760405162461bcd60e51b815260040161095b90614e1d565b606c54600160a01b900460ff1615156001146127445760405162461bcd60e51b815260040161095b906150e2565b8051806127a75760405162461bcd60e51b815260206004820152603f602482015260008051602061548e83398151915260448201527f65733a204d75737420666f726365206174206c65617374203120626174636800606482015260840161095b565b6103e881106128185760405162461bcd60e51b8152602060048201526043602482015260008051602061548e83398151915260448201527f65733a2043616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a40161095b565b6068546001600160401b03600160c01b8204811691612840918491600160801b90041661514b565b111561289c5760405162461bcd60e51b8152602060048201526037602482015260008051602061548e833981519152604482015276195cce88119bdc98d94818985d18da081a5b9d985b1a59604a1b606482015260840161095b565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612aca5760008682815181106128e9576128e9614e85565b6020026020010151905083806128fe90614e9b565b94505060008160000151805190602001208260200151836040015160405160200161292b93929190614ec1565b60408051601f1981840301815291815281516020928301206001600160401b0388166000908152606690935291205490915081146129ca5760405162461bcd60e51b8152602060048201526042602482015260008051602061548e83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a40161095b565b6129d5600188614f7d565b8303612a6c57426206978083604001516129ef9190614df2565b6001600160401b03161115612a6c5760405162461bcd60e51b8152602060048201526049602482015260008051602061548e83398151915260448201527f65733a20466f72636564206261746368206973206e6f7420696e2074696d656f6064820152681d5d081c195c9a5bd960ba1b608482015260a40161095b565b8151805160209182012081840151604051612a8f93889392914291339101614efd565b6040516020818303038152906040528051906020012093508580612ab290614e9b565b96505050508080612ac290614f3c565b9150506128cd565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b0319909216919091179286168502929092179091558554600160401b600160c01b03191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612bd55760405162461bcd60e51b815260040161095b90615163565b6073546001600160a01b03163314612bff5760405162461bcd60e51b815260040161095b90614d99565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612c4f57600080fd5b505af1158015612c63573d6000803e3d6000fd5b505050506120176142a6565b606a546001600160a01b03163314612c995760405162461bcd60e51b815260040161095b906151c0565b612caa898989898989898989613c70565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612cf557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612d3b57600080fd5b505af1158015612d4f573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612dd75760405162461bcd60e51b815260040161095b90614e1d565b606c54600160a01b900460ff161515600114612e055760405162461bcd60e51b815260040161095b906150e2565b6000612e1060745490565b905081811115612e755760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a204e6f7420656e6044820152696f756768206d6174696360b01b606482015260840161095b565b620493e0835110612ee65760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b606482015260840161095b565b606554612f0590600160581b90046001600160a01b03163330846132e8565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015612f4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f739190614ee4565b60688054919250600160c01b9091046001600160401b0316906018612f9783614e9b565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505083805190602001208142604051602001612fd893929190614ec1565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361307c57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26130d7565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516130ce9392919061521d565b60405180910390a25b50505050565b606a546001600160a01b031633146131075760405162461bcd60e51b815260040161095b906151c0565b61311788888888888888886133f7565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561316257607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156131a857600080fd5b505af11580156131bc573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce7906020016118fd565b6073546001600160a01b031633146132275760405162461bcd60e51b815260040161095b90614d99565b606a80546001600160a01b0319166001600160a01b0383161790556040517f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90610a509083906146ee565b61327a613b54565b6001600160a01b0381166132df5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161095b565b61222081613bae565b6040516001600160a01b03808516602483015283166044820152606481018290526130d79085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526142fd565b6072546001600160401b03600160401b82048116911611156120175760725460009061339090600160401b90046001600160401b03166001614df2565b905061339b81610bfc565b15612220576072546000906002906133bd9084906001600160401b0316614f55565b6133c79190615250565b6133d19083614df2565b90506133dc81610bfc565b156133ee576133ea8161190f565b5050565b6133ea8261190f565b6000806134026125bf565b90506001600160401b038a1615613568576072546001600160401b03908116908b1611156134ba5760405162461bcd60e51b815260206004820152605960248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20706560448201527f6e64696e6753746174654e756d206d757374206265206c657373206f7220657160648201527875616c207468616e206c61737450656e64696e67537461746560381b608482015260a40161095b565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b90920416146135625760405162461bcd60e51b815260206004820152604d602482015260008051602061544e83398151915260448201527f69744e756d4261746368206d757374206d61746368207468652070656e64696e60648201526c0ce40e6e8c2e8ca40c4c2e8c6d609b1b608482015260a40161095b565b5061368e565b6001600160401b0389166000908152606d60205260409020549150816135f25760405162461bcd60e51b81526020600482015260446024820181905260008051602061544e833981519152908201527f69744e756d426174636820737461746520726f6f7420646f6573206e6f7420656064820152631e1a5cdd60e21b608482015260a40161095b565b806001600160401b0316896001600160401b0316111561368e5760405162461bcd60e51b815260206004820152605e602482015260008051602061544e83398151915260448201527f69744e756d4261746368206d757374206265206c657373206f7220657175616c60648201527f207468616e2063757272656e744c617374566572696669656442617463680000608482015260a40161095b565b806001600160401b0316886001600160401b0316116137365760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20666960448201527f6e616c4e65774261746368206d75737420626520626967676572207468616e206064820152770c6eae4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d60431b608482015260a40161095b565b60006137458a8a8a868b610a5b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161377a9190615276565b602060405180830381855afa158015613797573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906137ba9190614ee4565b6137c49190615292565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613808918b918b918b91906004016152a6565b602060405180830381865afa158015613825573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138499190615320565b6138a95760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20496e60448201526a3b30b634b210383937b7b360a91b606482015260840161095b565b6138ec336138b7858d614f55565b6001600160401b03166138c8612329565b6138d29190614f94565b606554600160581b90046001600160a01b031691906143d4565b505050505050505050505050565b60006139046125bf565b9050816000806139148484614f55565b6001600160401b031690505b836001600160401b0316836001600160401b0316146139c6576001600160401b03808416600090815260676020526040902060655460018201549192610100909104811691613970911642614f7d565b11156139ab57600181015461399590600160401b90046001600160401b031685614f55565b6139a8906001600160401b03168461514b565b92505b60010154600160401b90046001600160401b03169250613920565b60006139d28383614f7d565b905082811015613a4c5760006139e88285614f7d565b9050600c81116139f857806139fb565b600c5b9050613a08816003614f94565b613a1390600a615421565b606554613a2c908390600160481b900461ffff16615421565b607454613a399190614f94565b613a4391906150ce565b60745550613ad8565b6000613a588483614f7d565b9050600c8111613a685780613a6b565b600c5b90506000613a7a826003614f94565b613a8590600a615421565b606554613a9e908490600160481b900461ffff16615421565b607454613aab9190614f94565b613ab591906150ce565b905080607454607454613ac89190614f94565b613ad291906150ce565b60745550505b505050505050565b600054610100900460ff16613b4b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161095b565b61201733613bae565b6033546001600160a01b031633146120175760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095b565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613c5057600080fd5b505af1158015613c64573d6000803e3d6000fd5b50505050612017614404565b60006001600160401b038a1615613de0576072546001600160401b03908116908b161115613d285760405162461bcd60e51b8152602060048201526065602482015260008051602061546e83398151915260448201527f696e6753746174653a2070656e64696e6753746174654e756d206d757374206260648201527f65206c657373206f7220657175616c207468616e206c61737450656e64696e67608482015264537461746560d81b60a482015260c40161095b565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613dda5760405162461bcd60e51b8152602060048201526059602482015260008051602061546e83398151915260448201527f696e6753746174653a20696e69744e756d4261746368206d757374206d6174636064820152780d040e8d0ca40e0cadcc8d2dcce40e6e8c2e8ca40c4c2e8c6d603b1b608482015260a40161095b565b50613f19565b506001600160401b0387166000908152606d602052604090205480613e745760405162461bcd60e51b8152602060048201526050602482015260008051602061546e83398151915260448201527f696e6753746174653a20696e69744e756d426174636820737461746520726f6f60648201526f1d08191bd95cc81b9bdd08195e1a5cdd60821b608482015260a40161095b565b6069546001600160401b039081169089161115613f195760405162461bcd60e51b8152602060048201526063602482015260008051602061546e83398151915260448201527f696e6753746174653a20696e69744e756d4261746368206d757374206265206c60648201527f657373206f7220657175616c207468616e206c617374566572696669656442616084820152620e8c6d60eb1b60a482015260c40161095b565b6072546001600160401b03908116908a1611801590613f495750896001600160401b0316896001600160401b0316115b8015613f6a57506072546001600160401b03600160401b9091048116908a16115b613fdb5760405162461bcd60e51b8152602060048201526048602482015260008051602061546e83398151915260448201527f696e6753746174653a2066696e616c50656e64696e6753746174654e756d20696064820152671b98dbdc9c9958dd60c21b608482015260a40161095b565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146140945760405162461bcd60e51b8152602060048201526063602482015260008051602061546e83398151915260448201527f696e6753746174653a2066696e616c4e65774261746368206d7573742062652060648201527f657175616c207468616e2063757272656e744c617374566572696669656442616084820152620e8c6d60eb1b60a482015260c40161095b565b60006140a3898989858a610a5b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516140d89190615276565b602060405180830381855afa1580156140f5573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906141189190614ee4565b6141229190615292565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614166918a918a918a91906004016152a6565b602060405180830381865afa158015614183573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141a79190615320565b6142015760405162461bcd60e51b8152602060048201526037602482015260008051602061546e83398151915260448201527634b733a9ba30ba329d1024b73b30b634b210383937b7b360491b606482015260840161095b565b6001600160401b038b166000908152607160205260409020600201548790036138ec5760405162461bcd60e51b815260206004820152605b602482015260008051602061546e83398151915260448201527f696e6753746174653a2053746f72656420726f6f74206d75737420626520646960648201527f66666572656e74207468616e206e657720737461746520726f6f740000000000608482015260a40161095b565b60655460ff166142c85760405162461bcd60e51b815260040161095b90615163565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614352826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661445f9092919063ffffffff16565b8051909150156143cf57808060200190518101906143709190615320565b6143cf5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161095b565b505050565b6040516001600160a01b0383166024820152604481018290526143cf90849063a9059cbb60e01b9060640161331c565b60655460ff16156144275760405162461bcd60e51b815260040161095b90614e1d565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b606061446e8484600085614476565b949350505050565b6060824710156144d75760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161095b565b600080866001600160a01b031685876040516144f39190615276565b60006040518083038185875af1925050503d8060008114614530576040519150601f19603f3d011682016040523d82523d6000602084013e614535565b606091505b509150915061454687838387614551565b979650505050505050565b606083156145c05782516000036145b9576001600160a01b0385163b6145b95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161095b565b508161446e565b61446e83838151156145d55781518083602001fd5b8060405162461bcd60e51b815260040161095b9190614647565b60005b8381101561460a5781810151838201526020016145f2565b838111156130d75750506000910152565b600081518084526146338160208601602086016145ef565b601f01601f19169290920160200192915050565b60208152600061465a602083018461461b565b9392505050565b60006020828403121561467357600080fd5b813561ffff8116811461465a57600080fd5b80356001600160401b038116811461469c57600080fd5b919050565b600080600080600060a086880312156146b957600080fd5b6146c286614685565b94506146d060208701614685565b94979496505050506040830135926060810135926080909101359150565b6001600160a01b0391909116815260200190565b60006020828403121561471457600080fd5b61465a82614685565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156147555761475561471d565b60405290565b604051606081016001600160401b03811182821017156147555761475561471d565b604051601f8201601f191681016001600160401b03811182821017156147a5576147a561471d565b604052919050565b60006001600160401b038211156147c6576147c661471d565b5060051b60200190565b600082601f8301126147e157600080fd5b81356001600160401b038111156147fa576147fa61471d565b61480d601f8201601f191660200161477d565b81815284602083860101111561482257600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561485257600080fd5b82356001600160401b038082111561486957600080fd5b818501915085601f83011261487d57600080fd5b813561489061488b826147ad565b61477d565b81815260059190911b830184019084810190888311156148af57600080fd5b8585015b83811015614948578035858111156148cb5760008081fd5b86016080818c03601f19018113156148e35760008081fd5b6148eb614733565b89830135888111156148fd5760008081fd5b61490b8e8c838701016147d0565b8252506040808401358b8301526060614925818601614685565b82840152614934848601614685565b9083015250855250509186019186016148b3565b5098975050505050505050565b806040810183101561496657600080fd5b92915050565b806080810183101561496657600080fd5b6000806000806000806000806101a0898b03121561499a57600080fd5b6149a389614685565b97506149b160208a01614685565b96506149bf60408a01614685565b955060608901359450608089013593506149dc8a60a08b01614955565b92506149eb8a60e08b0161496c565b91506149fb8a6101608b01614955565b90509295985092959890939650565b6001600160a01b038116811461222057600080fd5b600080600080600080600080888a036101c0811215614a3d57600080fd5b8935614a4881614a0a565b985060208a0135614a5881614a0a565b975060408a0135614a6881614a0a565b965060608a0135614a7881614a0a565b955060e0607f1982011215614a8c57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614ab657600080fd5b614ac28c838d016147d0565b93506101a08b0135915080821115614ad957600080fd5b50614ae68b828c016147d0565b9150509295985092959890939650565b600060208284031215614b0857600080fd5b813561465a81614a0a565b60008060008060008060008060006101c08a8c031215614b3257600080fd5b614b3b8a614685565b9850614b4960208b01614685565b9750614b5760408b01614685565b9650614b6560608b01614685565b955060808a0135945060a08a01359350614b828b60c08c01614955565b9250614b928b6101008c0161496c565b9150614ba28b6101808c01614955565b90509295985092959850929598565b600060208284031215614bc357600080fd5b5035919050565b801515811461222057600080fd5b600060208284031215614bea57600080fd5b813561465a81614bca565b600060208284031215614c0757600080fd5b81356001600160401b03811115614c1d57600080fd5b61446e848285016147d0565b60006020808385031215614c3c57600080fd5b82356001600160401b0380821115614c5357600080fd5b818501915085601f830112614c6757600080fd5b8135614c7561488b826147ad565b81815260059190911b83018401908481019088831115614c9457600080fd5b8585015b8381101561494857803585811115614cb05760008081fd5b86016060818c03601f1901811315614cc85760008081fd5b614cd061475b565b8983013588811115614ce25760008081fd5b614cf08e8c838701016147d0565b8252506040808401358b830152614d08838501614685565b9082015285525050918601918601614c98565b60008060408385031215614d2e57600080fd5b82356001600160401b03811115614d4457600080fd5b614d50858286016147d0565b95602094909401359450505050565b600181811c90821680614d7357607f821691505b602082108103614d9357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a204f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614e1457614e14614ddc565b01949350505050565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b03808316818103614eb757614eb7614ddc565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b600060208284031215614ef657600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6001600160601b0319166068820152607c0190565b600060018201614f4e57614f4e614ddc565b5060010190565b60006001600160401b0383811690831681811015614f7557614f75614ddc565b039392505050565b600082821015614f8f57614f8f614ddc565b500390565b6000816000190483118215151615614fae57614fae614ddc565b500290565b601f8211156143cf57600081815260208120601f850160051c81016020861015614fda5750805b601f850160051c820191505b81811015613ad857828155600101614fe6565b81516001600160401b038111156150125761501261471d565b615026816150208454614d5f565b84614fb3565b602080601f83116001811461505b57600084156150435750858301515b600019600386901b1c1916600185901b178555613ad8565b600085815260208120601f198616915b8281101561508a5788860151825594840194600190910190840161506b565b50858210156150a85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b6000826150dd576150dd6150b8565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a204f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b6000821982111561515e5761515e614ddc565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a204f6e6c7920747275737465642061676772656761746f7200000000606082015260800190565b8381526001600160a01b03831660208201526060604082018190526000906152479083018461461b565b95945050505050565b60006001600160401b038084168061526a5761526a6150b8565b92169190910492915050565b600082516152888184602087016145ef565b9190910192915050565b6000826152a1576152a16150b8565b500690565b61012081016040808784376000838201818152879190815b60028110156152de578484833790840182815292840192906001016152be565b5050828760c0870137610100850181815286935091505b60018110156153145782518252602092830192909101906001016152f5565b50505095945050505050565b60006020828403121561533257600080fd5b815161465a81614bca565b600181815b8085111561537857816000190482111561535e5761535e614ddc565b8085161561536b57918102915b93841c9390800290615342565b509250929050565b60008261538f57506001614966565b8161539c57506000614966565b81600181146153b257600281146153bc576153d8565b6001915050614966565b60ff8411156153cd576153cd614ddc565b50506001821b614966565b5060208310610133831016604e8410600b84101617156153fb575081810a614966565b615405838361533d565b806000190482111561541957615419614ddc565b029392505050565b600061465a838361538056fe506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e637953506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20696e506f6c79676f6e5a6b45564d3a3a5f70726f766544697374696e637450656e64506f6c79676f6e5a6b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a2046a26469706673582212204a13b041896f72f2de202018d2be9bf682fff57506a937c10e31c8e04afa5d2f64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061032f5760003560e01c80638da5cb5b116101b4578063cfa8ed47116100fa578063e7a7ed021161009d578063e7a7ed021461080e578063e8bf92ed14610828578063eaeb077b1461083b578063edc411211461084e578063f14916d614610861578063f2fde38b14610874578063f851a44014610887578063f8b823e41461089a57600080fd5b8063cfa8ed471461077c578063d02103ca14610796578063d8d1091b146107a9578063d8f54db0146107bc578063d939b315146107d0578063dbc16976146107ea578063e11f3f18146107f2578063e217cfd61461080557600080fd5b8063ab9fc5ef11610162578063ab9fc5ef14610688578063adc879e914610692578063afd23cbe146106ac578063b4d63f58146106d4578063b6b0b09714610734578063c0ed84e01461074e578063c89e42df14610756578063cf1363061461076957600080fd5b80638da5cb5b1461062157806399f5634e146106325780639c9f3dfe1461063a5780639eb831b91461064d5780639f0d039d14610655578063a3c573eb1461065d578063aa58bad61461067057600080fd5b80634a910e6a11610279578063715018a611610227578063715018a61461053b5780637215541a1461054357806375c508b3146105565780637fcb365314610569578063837a47381461057c578063841b24d7146105ea5780638b48931e146106045780638c4a0af71461060e57600080fd5b80634a910e6a146104a75780635392c5e0146104ba578063542028d5146104da57806360943d6a146104e25780636b8616ce146104f55780636ff512cc14610515578063704b6c021461052857600080fd5b8063383b3be8116102e1578063383b3be8146103fa578063394218e91461040d5780633c15826714610420578063423fa85614610433578063456052671461044d578063458c0477146104675780634834a3431461047a5780634a1a89a71461048d57600080fd5b8063107bf28c1461033457806315064c96146103525780631816b7e51461036f57806319d8ac6114610384578063220d7899146103af57806329878983146103c25780632d0889d3146103e2575b600080fd5b61033c6108a3565b6040516103499190614647565b60405180910390f35b60655461035f9060ff1681565b6040519015158152602001610349565b61038261037d366004614661565b610931565b005b606854610397906001600160401b031681565b6040516001600160401b039091168152602001610349565b61033c6103bd3660046146a1565b610a5b565b606a546103d5906001600160a01b031681565b60405161034991906146ee565b6103ec620493e081565b604051908152602001610349565b61035f610408366004614702565b610bfc565b61038261041b366004614702565b610c43565b61038261042e36600461483f565b610dff565b60685461039790600160401b90046001600160401b031681565b60685461039790600160801b90046001600160401b031681565b607254610397906001600160401b031681565b61038261048836600461497d565b6115c6565b60725461039790600160401b90046001600160401b031681565b6103826104b5366004614702565b61190f565b6103ec6104c8366004614702565b606d6020526000908152604090205481565b61033c611baa565b6103826104f0366004614a1f565b611bb7565b6103ec610503366004614702565b60666020526000908152604090205481565b610382610523366004614af6565b611f12565b610382610536366004614af6565b611f90565b610382612005565b610382610551366004614702565b612019565b610382610564366004614b13565b612223565b606954610397906001600160401b031681565b6105bf61058a366004614bb1565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610349565b60725461039790600160c01b90046001600160401b031681565b61039762093a8081565b61038261061c366004614bd8565b6122b2565b6033546001600160a01b03166103d5565b6103ec612329565b610382610648366004614702565b612411565b6103ec600c81565b6074546103ec565b6070546103d5906001600160a01b031681565b6065546103979061010090046001600160401b031681565b6103976206978081565b606c5461039790600160a81b90046001600160401b031681565b6065546106c190600160481b900461ffff1681565b60405161ffff9091168152602001610349565b61070f6106e2366004614702565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610349565b6065546103d590600160581b90046001600160a01b031681565b6103976125bf565b610382610764366004614bf5565b61260c565b610382610777366004614702565b612672565b6069546103d590600160401b90046001600160a01b031681565b606c546103d5906001600160a01b031681565b6103826107b7366004614c29565b6126f3565b606c5461035f90600160a01b900460ff1681565b60725461039790600160801b90046001600160401b031681565b610382612bb3565b610382610800366004614b13565b612c6f565b6103976103e881565b60685461039790600160c01b90046001600160401b031681565b606b546103d5906001600160a01b031681565b610382610849366004614d1b565b612db4565b61038261085c36600461497d565b6130dd565b61038261086f366004614af6565b6131fd565b610382610882366004614af6565b613272565b6073546103d5906001600160a01b031681565b6103ec60745481565b606f80546108b090614d5f565b80601f01602080910402602001604051908101604052809291908181526020018280546108dc90614d5f565b80156109295780601f106108fe57610100808354040283529160200191610929565b820191906000526020600020905b81548152906001019060200180831161090c57829003601f168201915b505050505081565b6073546001600160a01b031633146109645760405162461bcd60e51b815260040161095b90614d99565b60405180910390fd5b6103e88161ffff161015801561097f57506104008161ffff16105b610a045760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a40161095b565b6065805461ffff60481b1916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610a8d57508115155b610b01576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f74206578697374606482015260840161095b565b80610b76576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f74206578697374606482015260840161095b565b606c54604080516001600160601b03193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610c3292600160801b90920481169116614df2565b6001600160401b0316111592915050565b6073546001600160a01b03163314610c6d5760405162461bcd60e51b815260040161095b90614d99565b62093a806001600160401b0382161115610d065760405162461bcd60e51b815260206004820152604e60248201527f506f6c79676f6e5a6b45564d3a3a73657454727573746564416767726567617460448201527f6f7254696d656f75743a20457863656564206d61782068616c7420616767726560648201526d19d85d1a5bdb881d1a5b595bdd5d60921b608482015260a40161095b565b60655460ff16610da9576072546001600160401b03600160c01b909104811690821610610da95760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a204e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a40161095b565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610a50565b60655460ff1615610e225760405162461bcd60e51b815260040161095b90614e1d565b606954600160401b90046001600160a01b03163314610ea95760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a204f6e6c7920747275737465642073657175656e636572000000000000606482015260840161095b565b805180610f1e5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e63652031206261746368000000606482015260840161095b565b6103e88110610f97576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e792062617463686573606482015260840161095b565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b858110156113fc576000878281518110610fea57610fea614e85565b60200260200101519050600081606001516001600160401b0316111561117a578361101481614e9b565b94505060008160000151805190602001208260200151836060015160405160200161104193929190614ec1565b60408051601f1981840301815291815281516020928301206001600160401b0388166000908152606690935291205490915081146110d55760405162461bcd60e51b815260206004820152603d60248201526000805160206154ae83398151915260448201527f6f7263656420626174636865732064617461206d757374206d61746368000000606482015260840161095b565b81606001516001600160401b031682604001516001600160401b031610156111745760405162461bcd60e51b815260206004820152605860248201526000805160206154ae83398151915260448201527f6f7263656420626174636865732074696d657374616d70206d757374206265206064820152773134b3b3b2b91037b91032b8bab0b6103a3430b71036b4b760411b608482015260a40161095b565b506112ef565b602081015115806112035750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916111bd9160040190815260200190565b6020604051808303816000875af11580156111dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112009190614ee4565b15155b6112755760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d757374206578697374000000000000606482015260840161095b565b805151620493e0116112ef5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f77000000000000606482015260840161095b565b856001600160401b031681604001516001600160401b03161015801561132257504281604001516001600160401b031611155b6113945760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e6765000000606482015260840161095b565b805180516020918201208183015160408085015190516113bb948894939291339101614efd565b60405160208183030381529060405280519060200120925084806113de90614e9b565b955050806040015195505080806113f490614f3c565b915050610fce565b506068546001600160401b03600160c01b9091048116908316111561146f5760405162461bcd60e51b815260206004820152603560248201526000805160206154ae8339815191526044820152746f7263652062617463686573206f766572666c6f7760581b606482015260840161095b565b60685460009061148f90600160801b90046001600160401b031684614f55565b6114a2906001600160401b031687614f7d565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115779033903090849061155c9190614f94565b606554600160581b90046001600160a01b03169291906132e8565b61157f613353565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff16156115e95760405162461bcd60e51b815260040161095b90614e1d565b6072546001600160401b03878116600090815260676020526040902060010154429261162092600160c01b90910481169116614df2565b6001600160401b031611156116a95760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2054727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a40161095b565b6103e86116b68888614f55565b6001600160401b0316106117325760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2043616e60448201527f6e6f74207665726966792074686174206d616e79206261746368657300000000606482015260840161095b565b61174288888888888888886133f7565b61174b866138fa565b607254600160801b90046001600160401b0316600003611813576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d6020526040902085905560725416156117b057607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156117f657600080fd5b505af115801561180a573d6000803e3d6000fd5b505050506118c4565b61181b613353565b607280546001600160401b031690600061183483614e9b565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b0381161580159061193c57506072546001600160401b03600160401b9091048116908216115b801561195757506072546001600160401b0390811690821611155b6119d55760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a40161095b565b606a546001600160a01b03163314611a7f576119f081610bfc565b611a7f5760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2050656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a40161095b565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611b3c57600080fd5b505af1158015611b50573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611b9d91815260200190565b60405180910390a3505050565b606e80546108b090614d5f565b600054610100900460ff1615808015611bd75750600054600160ff909116105b80611bf15750303b158015611bf1575060005460ff166001145b611c545760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161095b565b6000805460ff191660011790558015611c77576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c81169190911790925560658054600160581b600160f81b031916600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611cdf6020860186614af6565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d0f6060860160408701614af6565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611d4a60c0860160a08701614af6565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611da760e0860160c08701614702565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611dde6040860160208701614702565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611e1a6080860160608701614702565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611e5660a0860160808701614bd8565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611e7e8482614ff9565b50606f611e8b8382614ff9565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611ec1613ae0565b8015611f07576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611f3c5760405162461bcd60e51b815260040161095b90614d99565b60698054600160401b600160e01b031916600160401b6001600160a01b038416021790556040517ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090610a509083906146ee565b6073546001600160a01b03163314611fba5760405162461bcd60e51b815260040161095b90614d99565b607380546001600160a01b0319166001600160a01b0383161790556040517f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190610a509083906146ee565b61200d613b54565b6120176000613bae565b565b6033546001600160a01b031633146122185760006120356125bf565b9050806001600160401b0316826001600160401b0316116120ac5760405162461bcd60e51b815260206004820152603c602482015260008051602061542e83398151915260448201527f746174653a20426174636820616c726561647920766572696669656400000000606482015260840161095b565b6068546001600160401b03600160401b9091048116908316118015906120ee57506001600160401b038083166000908152606760205260409020600101541615155b6121675760405162461bcd60e51b8152602060048201526050602482015260008051602061542e83398151915260448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a40161095b565b6001600160401b0380831660009081526067602052604090206001015442916121959162093a809116614df2565b6001600160401b031611156122165760405162461bcd60e51b815260206004820152604d602482015260008051602061542e83398151915260448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a40161095b565b505b612220613c00565b50565b60655460ff16156122465760405162461bcd60e51b815260040161095b90614e1d565b612257898989898989898989613c70565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f07613c00565b6073546001600160a01b031633146122dc5760405162461bcd60e51b815260040161095b90614d99565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a5090831515815260200190565b6065546040516370a0823160e01b81526000918291600160581b9091046001600160a01b0316906370a08231906123649030906004016146ee565b602060405180830381865afa158015612381573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a59190614ee4565b905060006123b16125bf565b6068546001600160401b03600160401b82048116916123e191600160801b8204811691600160c01b900416614f55565b6123eb9190614df2565b6123f59190614f55565b6001600160401b0316905061240a81836150ce565b9250505090565b6073546001600160a01b0316331461243b5760405162461bcd60e51b815260040161095b90614d99565b62093a806001600160401b03821611156124cf5760405162461bcd60e51b815260206004820152604960248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a20457863656564206d61782068616c74206167677265676174696f6064820152681b881d1a5b595bdd5d60ba1b608482015260a40161095b565b60655460ff16612564576072546001600160401b03600160801b9091048116908216106125645760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a204e65772074696d656f7574206d757374206265206c6f77657200606482015260840161095b565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610a50565b6072546000906001600160401b0316156125fc57506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126365760405162461bcd60e51b815260040161095b90614d99565b606e6126428282614ff9565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a509190614647565b6073546001600160a01b0316331461269c5760405162461bcd60e51b815260040161095b90614d99565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610a50565b60655460ff16156127165760405162461bcd60e51b815260040161095b90614e1d565b606c54600160a01b900460ff1615156001146127445760405162461bcd60e51b815260040161095b906150e2565b8051806127a75760405162461bcd60e51b815260206004820152603f602482015260008051602061548e83398151915260448201527f65733a204d75737420666f726365206174206c65617374203120626174636800606482015260840161095b565b6103e881106128185760405162461bcd60e51b8152602060048201526043602482015260008051602061548e83398151915260448201527f65733a2043616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a40161095b565b6068546001600160401b03600160c01b8204811691612840918491600160801b90041661514b565b111561289c5760405162461bcd60e51b8152602060048201526037602482015260008051602061548e833981519152604482015276195cce88119bdc98d94818985d18da081a5b9d985b1a59604a1b606482015260840161095b565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612aca5760008682815181106128e9576128e9614e85565b6020026020010151905083806128fe90614e9b565b94505060008160000151805190602001208260200151836040015160405160200161292b93929190614ec1565b60408051601f1981840301815291815281516020928301206001600160401b0388166000908152606690935291205490915081146129ca5760405162461bcd60e51b8152602060048201526042602482015260008051602061548e83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a40161095b565b6129d5600188614f7d565b8303612a6c57426206978083604001516129ef9190614df2565b6001600160401b03161115612a6c5760405162461bcd60e51b8152602060048201526049602482015260008051602061548e83398151915260448201527f65733a20466f72636564206261746368206973206e6f7420696e2074696d656f6064820152681d5d081c195c9a5bd960ba1b608482015260a40161095b565b8151805160209182012081840151604051612a8f93889392914291339101614efd565b6040516020818303038152906040528051906020012093508580612ab290614e9b565b96505050508080612ac290614f3c565b9150506128cd565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b0319909216919091179286168502929092179091558554600160401b600160c01b03191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612bd55760405162461bcd60e51b815260040161095b90615163565b6073546001600160a01b03163314612bff5760405162461bcd60e51b815260040161095b90614d99565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612c4f57600080fd5b505af1158015612c63573d6000803e3d6000fd5b505050506120176142a6565b606a546001600160a01b03163314612c995760405162461bcd60e51b815260040161095b906151c0565b612caa898989898989898989613c70565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612cf557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612d3b57600080fd5b505af1158015612d4f573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612dd75760405162461bcd60e51b815260040161095b90614e1d565b606c54600160a01b900460ff161515600114612e055760405162461bcd60e51b815260040161095b906150e2565b6000612e1060745490565b905081811115612e755760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a204e6f7420656e6044820152696f756768206d6174696360b01b606482015260840161095b565b620493e0835110612ee65760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b606482015260840161095b565b606554612f0590600160581b90046001600160a01b03163330846132e8565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015612f4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f739190614ee4565b60688054919250600160c01b9091046001600160401b0316906018612f9783614e9b565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505083805190602001208142604051602001612fd893929190614ec1565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361307c57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26130d7565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516130ce9392919061521d565b60405180910390a25b50505050565b606a546001600160a01b031633146131075760405162461bcd60e51b815260040161095b906151c0565b61311788888888888888886133f7565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561316257607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156131a857600080fd5b505af11580156131bc573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce7906020016118fd565b6073546001600160a01b031633146132275760405162461bcd60e51b815260040161095b90614d99565b606a80546001600160a01b0319166001600160a01b0383161790556040517f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90610a509083906146ee565b61327a613b54565b6001600160a01b0381166132df5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161095b565b61222081613bae565b6040516001600160a01b03808516602483015283166044820152606481018290526130d79085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526142fd565b6072546001600160401b03600160401b82048116911611156120175760725460009061339090600160401b90046001600160401b03166001614df2565b905061339b81610bfc565b15612220576072546000906002906133bd9084906001600160401b0316614f55565b6133c79190615250565b6133d19083614df2565b90506133dc81610bfc565b156133ee576133ea8161190f565b5050565b6133ea8261190f565b6000806134026125bf565b90506001600160401b038a1615613568576072546001600160401b03908116908b1611156134ba5760405162461bcd60e51b815260206004820152605960248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20706560448201527f6e64696e6753746174654e756d206d757374206265206c657373206f7220657160648201527875616c207468616e206c61737450656e64696e67537461746560381b608482015260a40161095b565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b90920416146135625760405162461bcd60e51b815260206004820152604d602482015260008051602061544e83398151915260448201527f69744e756d4261746368206d757374206d61746368207468652070656e64696e60648201526c0ce40e6e8c2e8ca40c4c2e8c6d609b1b608482015260a40161095b565b5061368e565b6001600160401b0389166000908152606d60205260409020549150816135f25760405162461bcd60e51b81526020600482015260446024820181905260008051602061544e833981519152908201527f69744e756d426174636820737461746520726f6f7420646f6573206e6f7420656064820152631e1a5cdd60e21b608482015260a40161095b565b806001600160401b0316896001600160401b0316111561368e5760405162461bcd60e51b815260206004820152605e602482015260008051602061544e83398151915260448201527f69744e756d4261746368206d757374206265206c657373206f7220657175616c60648201527f207468616e2063757272656e744c617374566572696669656442617463680000608482015260a40161095b565b806001600160401b0316886001600160401b0316116137365760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20666960448201527f6e616c4e65774261746368206d75737420626520626967676572207468616e206064820152770c6eae4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d60431b608482015260a40161095b565b60006137458a8a8a868b610a5b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161377a9190615276565b602060405180830381855afa158015613797573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906137ba9190614ee4565b6137c49190615292565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613808918b918b918b91906004016152a6565b602060405180830381865afa158015613825573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138499190615320565b6138a95760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20496e60448201526a3b30b634b210383937b7b360a91b606482015260840161095b565b6138ec336138b7858d614f55565b6001600160401b03166138c8612329565b6138d29190614f94565b606554600160581b90046001600160a01b031691906143d4565b505050505050505050505050565b60006139046125bf565b9050816000806139148484614f55565b6001600160401b031690505b836001600160401b0316836001600160401b0316146139c6576001600160401b03808416600090815260676020526040902060655460018201549192610100909104811691613970911642614f7d565b11156139ab57600181015461399590600160401b90046001600160401b031685614f55565b6139a8906001600160401b03168461514b565b92505b60010154600160401b90046001600160401b03169250613920565b60006139d28383614f7d565b905082811015613a4c5760006139e88285614f7d565b9050600c81116139f857806139fb565b600c5b9050613a08816003614f94565b613a1390600a615421565b606554613a2c908390600160481b900461ffff16615421565b607454613a399190614f94565b613a4391906150ce565b60745550613ad8565b6000613a588483614f7d565b9050600c8111613a685780613a6b565b600c5b90506000613a7a826003614f94565b613a8590600a615421565b606554613a9e908490600160481b900461ffff16615421565b607454613aab9190614f94565b613ab591906150ce565b905080607454607454613ac89190614f94565b613ad291906150ce565b60745550505b505050505050565b600054610100900460ff16613b4b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161095b565b61201733613bae565b6033546001600160a01b031633146120175760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095b565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613c5057600080fd5b505af1158015613c64573d6000803e3d6000fd5b50505050612017614404565b60006001600160401b038a1615613de0576072546001600160401b03908116908b161115613d285760405162461bcd60e51b8152602060048201526065602482015260008051602061546e83398151915260448201527f696e6753746174653a2070656e64696e6753746174654e756d206d757374206260648201527f65206c657373206f7220657175616c207468616e206c61737450656e64696e67608482015264537461746560d81b60a482015260c40161095b565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613dda5760405162461bcd60e51b8152602060048201526059602482015260008051602061546e83398151915260448201527f696e6753746174653a20696e69744e756d4261746368206d757374206d6174636064820152780d040e8d0ca40e0cadcc8d2dcce40e6e8c2e8ca40c4c2e8c6d603b1b608482015260a40161095b565b50613f19565b506001600160401b0387166000908152606d602052604090205480613e745760405162461bcd60e51b8152602060048201526050602482015260008051602061546e83398151915260448201527f696e6753746174653a20696e69744e756d426174636820737461746520726f6f60648201526f1d08191bd95cc81b9bdd08195e1a5cdd60821b608482015260a40161095b565b6069546001600160401b039081169089161115613f195760405162461bcd60e51b8152602060048201526063602482015260008051602061546e83398151915260448201527f696e6753746174653a20696e69744e756d4261746368206d757374206265206c60648201527f657373206f7220657175616c207468616e206c617374566572696669656442616084820152620e8c6d60eb1b60a482015260c40161095b565b6072546001600160401b03908116908a1611801590613f495750896001600160401b0316896001600160401b0316115b8015613f6a57506072546001600160401b03600160401b9091048116908a16115b613fdb5760405162461bcd60e51b8152602060048201526048602482015260008051602061546e83398151915260448201527f696e6753746174653a2066696e616c50656e64696e6753746174654e756d20696064820152671b98dbdc9c9958dd60c21b608482015260a40161095b565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146140945760405162461bcd60e51b8152602060048201526063602482015260008051602061546e83398151915260448201527f696e6753746174653a2066696e616c4e65774261746368206d7573742062652060648201527f657175616c207468616e2063757272656e744c617374566572696669656442616084820152620e8c6d60eb1b60a482015260c40161095b565b60006140a3898989858a610a5b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516140d89190615276565b602060405180830381855afa1580156140f5573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906141189190614ee4565b6141229190615292565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614166918a918a918a91906004016152a6565b602060405180830381865afa158015614183573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141a79190615320565b6142015760405162461bcd60e51b8152602060048201526037602482015260008051602061546e83398151915260448201527634b733a9ba30ba329d1024b73b30b634b210383937b7b360491b606482015260840161095b565b6001600160401b038b166000908152607160205260409020600201548790036138ec5760405162461bcd60e51b815260206004820152605b602482015260008051602061546e83398151915260448201527f696e6753746174653a2053746f72656420726f6f74206d75737420626520646960648201527f66666572656e74207468616e206e657720737461746520726f6f740000000000608482015260a40161095b565b60655460ff166142c85760405162461bcd60e51b815260040161095b90615163565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614352826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661445f9092919063ffffffff16565b8051909150156143cf57808060200190518101906143709190615320565b6143cf5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161095b565b505050565b6040516001600160a01b0383166024820152604481018290526143cf90849063a9059cbb60e01b9060640161331c565b60655460ff16156144275760405162461bcd60e51b815260040161095b90614e1d565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b606061446e8484600085614476565b949350505050565b6060824710156144d75760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161095b565b600080866001600160a01b031685876040516144f39190615276565b60006040518083038185875af1925050503d8060008114614530576040519150601f19603f3d011682016040523d82523d6000602084013e614535565b606091505b509150915061454687838387614551565b979650505050505050565b606083156145c05782516000036145b9576001600160a01b0385163b6145b95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161095b565b508161446e565b61446e83838151156145d55781518083602001fd5b8060405162461bcd60e51b815260040161095b9190614647565b60005b8381101561460a5781810151838201526020016145f2565b838111156130d75750506000910152565b600081518084526146338160208601602086016145ef565b601f01601f19169290920160200192915050565b60208152600061465a602083018461461b565b9392505050565b60006020828403121561467357600080fd5b813561ffff8116811461465a57600080fd5b80356001600160401b038116811461469c57600080fd5b919050565b600080600080600060a086880312156146b957600080fd5b6146c286614685565b94506146d060208701614685565b94979496505050506040830135926060810135926080909101359150565b6001600160a01b0391909116815260200190565b60006020828403121561471457600080fd5b61465a82614685565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156147555761475561471d565b60405290565b604051606081016001600160401b03811182821017156147555761475561471d565b604051601f8201601f191681016001600160401b03811182821017156147a5576147a561471d565b604052919050565b60006001600160401b038211156147c6576147c661471d565b5060051b60200190565b600082601f8301126147e157600080fd5b81356001600160401b038111156147fa576147fa61471d565b61480d601f8201601f191660200161477d565b81815284602083860101111561482257600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561485257600080fd5b82356001600160401b038082111561486957600080fd5b818501915085601f83011261487d57600080fd5b813561489061488b826147ad565b61477d565b81815260059190911b830184019084810190888311156148af57600080fd5b8585015b83811015614948578035858111156148cb5760008081fd5b86016080818c03601f19018113156148e35760008081fd5b6148eb614733565b89830135888111156148fd5760008081fd5b61490b8e8c838701016147d0565b8252506040808401358b8301526060614925818601614685565b82840152614934848601614685565b9083015250855250509186019186016148b3565b5098975050505050505050565b806040810183101561496657600080fd5b92915050565b806080810183101561496657600080fd5b6000806000806000806000806101a0898b03121561499a57600080fd5b6149a389614685565b97506149b160208a01614685565b96506149bf60408a01614685565b955060608901359450608089013593506149dc8a60a08b01614955565b92506149eb8a60e08b0161496c565b91506149fb8a6101608b01614955565b90509295985092959890939650565b6001600160a01b038116811461222057600080fd5b600080600080600080600080888a036101c0811215614a3d57600080fd5b8935614a4881614a0a565b985060208a0135614a5881614a0a565b975060408a0135614a6881614a0a565b965060608a0135614a7881614a0a565b955060e0607f1982011215614a8c57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614ab657600080fd5b614ac28c838d016147d0565b93506101a08b0135915080821115614ad957600080fd5b50614ae68b828c016147d0565b9150509295985092959890939650565b600060208284031215614b0857600080fd5b813561465a81614a0a565b60008060008060008060008060006101c08a8c031215614b3257600080fd5b614b3b8a614685565b9850614b4960208b01614685565b9750614b5760408b01614685565b9650614b6560608b01614685565b955060808a0135945060a08a01359350614b828b60c08c01614955565b9250614b928b6101008c0161496c565b9150614ba28b6101808c01614955565b90509295985092959850929598565b600060208284031215614bc357600080fd5b5035919050565b801515811461222057600080fd5b600060208284031215614bea57600080fd5b813561465a81614bca565b600060208284031215614c0757600080fd5b81356001600160401b03811115614c1d57600080fd5b61446e848285016147d0565b60006020808385031215614c3c57600080fd5b82356001600160401b0380821115614c5357600080fd5b818501915085601f830112614c6757600080fd5b8135614c7561488b826147ad565b81815260059190911b83018401908481019088831115614c9457600080fd5b8585015b8381101561494857803585811115614cb05760008081fd5b86016060818c03601f1901811315614cc85760008081fd5b614cd061475b565b8983013588811115614ce25760008081fd5b614cf08e8c838701016147d0565b8252506040808401358b830152614d08838501614685565b9082015285525050918601918601614c98565b60008060408385031215614d2e57600080fd5b82356001600160401b03811115614d4457600080fd5b614d50858286016147d0565b95602094909401359450505050565b600181811c90821680614d7357607f821691505b602082108103614d9357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a204f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614e1457614e14614ddc565b01949350505050565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b03808316818103614eb757614eb7614ddc565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b600060208284031215614ef657600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6001600160601b0319166068820152607c0190565b600060018201614f4e57614f4e614ddc565b5060010190565b60006001600160401b0383811690831681811015614f7557614f75614ddc565b039392505050565b600082821015614f8f57614f8f614ddc565b500390565b6000816000190483118215151615614fae57614fae614ddc565b500290565b601f8211156143cf57600081815260208120601f850160051c81016020861015614fda5750805b601f850160051c820191505b81811015613ad857828155600101614fe6565b81516001600160401b038111156150125761501261471d565b615026816150208454614d5f565b84614fb3565b602080601f83116001811461505b57600084156150435750858301515b600019600386901b1c1916600185901b178555613ad8565b600085815260208120601f198616915b8281101561508a5788860151825594840194600190910190840161506b565b50858210156150a85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b6000826150dd576150dd6150b8565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a204f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b6000821982111561515e5761515e614ddc565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a204f6e6c7920747275737465642061676772656761746f7200000000606082015260800190565b8381526001600160a01b03831660208201526060604082018190526000906152479083018461461b565b95945050505050565b60006001600160401b038084168061526a5761526a6150b8565b92169190910492915050565b600082516152888184602087016145ef565b9190910192915050565b6000826152a1576152a16150b8565b500690565b61012081016040808784376000838201818152879190815b60028110156152de578484833790840182815292840192906001016152be565b5050828760c0870137610100850181815286935091505b60018110156153145782518252602092830192909101906001016152f5565b50505095945050505050565b60006020828403121561533257600080fd5b815161465a81614bca565b600181815b8085111561537857816000190482111561535e5761535e614ddc565b8085161561536b57918102915b93841c9390800290615342565b509250929050565b60008261538f57506001614966565b8161539c57506000614966565b81600181146153b257600281146153bc576153d8565b6001915050614966565b60ff8411156153cd576153cd614ddc565b50506001821b614966565b5060208310610133831016604e8410600b84101617156153fb575081810a614966565b615405838361533d565b806000190482111561541957615419614ddc565b029392505050565b600061465a838361538056fe506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e637953506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20696e506f6c79676f6e5a6b45564d3a3a5f70726f766544697374696e637450656e64506f6c79676f6e5a6b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a2046a26469706673582212204a13b041896f72f2de202018d2be9bf682fff57506a937c10e31c8e04afa5d2f64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50615503806100206000396000f3fe608060405234801561001057600080fd5b506004361061032f5760003560e01c80638da5cb5b116101b4578063cfa8ed47116100fa578063e7a7ed021161009d578063e7a7ed021461080e578063e8bf92ed14610828578063eaeb077b1461083b578063edc411211461084e578063f14916d614610861578063f2fde38b14610874578063f851a44014610887578063f8b823e41461089a57600080fd5b8063cfa8ed471461077c578063d02103ca14610796578063d8d1091b146107a9578063d8f54db0146107bc578063d939b315146107d0578063dbc16976146107ea578063e11f3f18146107f2578063e217cfd61461080557600080fd5b8063ab9fc5ef11610162578063ab9fc5ef14610688578063adc879e914610692578063afd23cbe146106ac578063b4d63f58146106d4578063b6b0b09714610734578063c0ed84e01461074e578063c89e42df14610756578063cf1363061461076957600080fd5b80638da5cb5b1461062157806399f5634e146106325780639c9f3dfe1461063a5780639eb831b91461064d5780639f0d039d14610655578063a3c573eb1461065d578063aa58bad61461067057600080fd5b80634a910e6a11610279578063715018a611610227578063715018a61461053b5780637215541a1461054357806375c508b3146105565780637fcb365314610569578063837a47381461057c578063841b24d7146105ea5780638b48931e146106045780638c4a0af71461060e57600080fd5b80634a910e6a146104a75780635392c5e0146104ba578063542028d5146104da57806360943d6a146104e25780636b8616ce146104f55780636ff512cc14610515578063704b6c021461052857600080fd5b8063383b3be8116102e1578063383b3be8146103fa578063394218e91461040d5780633c15826714610420578063423fa85614610433578063456052671461044d578063458c0477146104675780634834a3431461047a5780634a1a89a71461048d57600080fd5b8063107bf28c1461033457806315064c96146103525780631816b7e51461036f57806319d8ac6114610384578063220d7899146103af57806329878983146103c25780632d0889d3146103e2575b600080fd5b61033c6108a3565b6040516103499190614647565b60405180910390f35b60655461035f9060ff1681565b6040519015158152602001610349565b61038261037d366004614661565b610931565b005b606854610397906001600160401b031681565b6040516001600160401b039091168152602001610349565b61033c6103bd3660046146a1565b610a5b565b606a546103d5906001600160a01b031681565b60405161034991906146ee565b6103ec620493e081565b604051908152602001610349565b61035f610408366004614702565b610bfc565b61038261041b366004614702565b610c43565b61038261042e36600461483f565b610dff565b60685461039790600160401b90046001600160401b031681565b60685461039790600160801b90046001600160401b031681565b607254610397906001600160401b031681565b61038261048836600461497d565b6115c6565b60725461039790600160401b90046001600160401b031681565b6103826104b5366004614702565b61190f565b6103ec6104c8366004614702565b606d6020526000908152604090205481565b61033c611baa565b6103826104f0366004614a1f565b611bb7565b6103ec610503366004614702565b60666020526000908152604090205481565b610382610523366004614af6565b611f12565b610382610536366004614af6565b611f90565b610382612005565b610382610551366004614702565b612019565b610382610564366004614b13565b612223565b606954610397906001600160401b031681565b6105bf61058a366004614bb1565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610349565b60725461039790600160c01b90046001600160401b031681565b61039762093a8081565b61038261061c366004614bd8565b6122b2565b6033546001600160a01b03166103d5565b6103ec612329565b610382610648366004614702565b612411565b6103ec600c81565b6074546103ec565b6070546103d5906001600160a01b031681565b6065546103979061010090046001600160401b031681565b6103976206978081565b606c5461039790600160a81b90046001600160401b031681565b6065546106c190600160481b900461ffff1681565b60405161ffff9091168152602001610349565b61070f6106e2366004614702565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610349565b6065546103d590600160581b90046001600160a01b031681565b6103976125bf565b610382610764366004614bf5565b61260c565b610382610777366004614702565b612672565b6069546103d590600160401b90046001600160a01b031681565b606c546103d5906001600160a01b031681565b6103826107b7366004614c29565b6126f3565b606c5461035f90600160a01b900460ff1681565b60725461039790600160801b90046001600160401b031681565b610382612bb3565b610382610800366004614b13565b612c6f565b6103976103e881565b60685461039790600160c01b90046001600160401b031681565b606b546103d5906001600160a01b031681565b610382610849366004614d1b565b612db4565b61038261085c36600461497d565b6130dd565b61038261086f366004614af6565b6131fd565b610382610882366004614af6565b613272565b6073546103d5906001600160a01b031681565b6103ec60745481565b606f80546108b090614d5f565b80601f01602080910402602001604051908101604052809291908181526020018280546108dc90614d5f565b80156109295780601f106108fe57610100808354040283529160200191610929565b820191906000526020600020905b81548152906001019060200180831161090c57829003601f168201915b505050505081565b6073546001600160a01b031633146109645760405162461bcd60e51b815260040161095b90614d99565b60405180910390fd5b6103e88161ffff161015801561097f57506104008161ffff16105b610a045760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a40161095b565b6065805461ffff60481b1916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610a8d57508115155b610b01576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f74206578697374606482015260840161095b565b80610b76576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f74206578697374606482015260840161095b565b606c54604080516001600160601b03193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610c3292600160801b90920481169116614df2565b6001600160401b0316111592915050565b6073546001600160a01b03163314610c6d5760405162461bcd60e51b815260040161095b90614d99565b62093a806001600160401b0382161115610d065760405162461bcd60e51b815260206004820152604e60248201527f506f6c79676f6e5a6b45564d3a3a73657454727573746564416767726567617460448201527f6f7254696d656f75743a20457863656564206d61782068616c7420616767726560648201526d19d85d1a5bdb881d1a5b595bdd5d60921b608482015260a40161095b565b60655460ff16610da9576072546001600160401b03600160c01b909104811690821610610da95760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a204e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a40161095b565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610a50565b60655460ff1615610e225760405162461bcd60e51b815260040161095b90614e1d565b606954600160401b90046001600160a01b03163314610ea95760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a204f6e6c7920747275737465642073657175656e636572000000000000606482015260840161095b565b805180610f1e5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e63652031206261746368000000606482015260840161095b565b6103e88110610f97576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e792062617463686573606482015260840161095b565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b858110156113fc576000878281518110610fea57610fea614e85565b60200260200101519050600081606001516001600160401b0316111561117a578361101481614e9b565b94505060008160000151805190602001208260200151836060015160405160200161104193929190614ec1565b60408051601f1981840301815291815281516020928301206001600160401b0388166000908152606690935291205490915081146110d55760405162461bcd60e51b815260206004820152603d60248201526000805160206154ae83398151915260448201527f6f7263656420626174636865732064617461206d757374206d61746368000000606482015260840161095b565b81606001516001600160401b031682604001516001600160401b031610156111745760405162461bcd60e51b815260206004820152605860248201526000805160206154ae83398151915260448201527f6f7263656420626174636865732074696d657374616d70206d757374206265206064820152773134b3b3b2b91037b91032b8bab0b6103a3430b71036b4b760411b608482015260a40161095b565b506112ef565b602081015115806112035750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916111bd9160040190815260200190565b6020604051808303816000875af11580156111dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112009190614ee4565b15155b6112755760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d757374206578697374000000000000606482015260840161095b565b805151620493e0116112ef5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f77000000000000606482015260840161095b565b856001600160401b031681604001516001600160401b03161015801561132257504281604001516001600160401b031611155b6113945760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e6765000000606482015260840161095b565b805180516020918201208183015160408085015190516113bb948894939291339101614efd565b60405160208183030381529060405280519060200120925084806113de90614e9b565b955050806040015195505080806113f490614f3c565b915050610fce565b506068546001600160401b03600160c01b9091048116908316111561146f5760405162461bcd60e51b815260206004820152603560248201526000805160206154ae8339815191526044820152746f7263652062617463686573206f766572666c6f7760581b606482015260840161095b565b60685460009061148f90600160801b90046001600160401b031684614f55565b6114a2906001600160401b031687614f7d565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115779033903090849061155c9190614f94565b606554600160581b90046001600160a01b03169291906132e8565b61157f613353565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff16156115e95760405162461bcd60e51b815260040161095b90614e1d565b6072546001600160401b03878116600090815260676020526040902060010154429261162092600160c01b90910481169116614df2565b6001600160401b031611156116a95760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2054727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a40161095b565b6103e86116b68888614f55565b6001600160401b0316106117325760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2043616e60448201527f6e6f74207665726966792074686174206d616e79206261746368657300000000606482015260840161095b565b61174288888888888888886133f7565b61174b866138fa565b607254600160801b90046001600160401b0316600003611813576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d6020526040902085905560725416156117b057607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156117f657600080fd5b505af115801561180a573d6000803e3d6000fd5b505050506118c4565b61181b613353565b607280546001600160401b031690600061183483614e9b565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b0381161580159061193c57506072546001600160401b03600160401b9091048116908216115b801561195757506072546001600160401b0390811690821611155b6119d55760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a40161095b565b606a546001600160a01b03163314611a7f576119f081610bfc565b611a7f5760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2050656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a40161095b565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611b3c57600080fd5b505af1158015611b50573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611b9d91815260200190565b60405180910390a3505050565b606e80546108b090614d5f565b600054610100900460ff1615808015611bd75750600054600160ff909116105b80611bf15750303b158015611bf1575060005460ff166001145b611c545760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161095b565b6000805460ff191660011790558015611c77576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c81169190911790925560658054600160581b600160f81b031916600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611cdf6020860186614af6565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d0f6060860160408701614af6565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611d4a60c0860160a08701614af6565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611da760e0860160c08701614702565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611dde6040860160208701614702565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611e1a6080860160608701614702565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611e5660a0860160808701614bd8565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611e7e8482614ff9565b50606f611e8b8382614ff9565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611ec1613ae0565b8015611f07576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611f3c5760405162461bcd60e51b815260040161095b90614d99565b60698054600160401b600160e01b031916600160401b6001600160a01b038416021790556040517ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090610a509083906146ee565b6073546001600160a01b03163314611fba5760405162461bcd60e51b815260040161095b90614d99565b607380546001600160a01b0319166001600160a01b0383161790556040517f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190610a509083906146ee565b61200d613b54565b6120176000613bae565b565b6033546001600160a01b031633146122185760006120356125bf565b9050806001600160401b0316826001600160401b0316116120ac5760405162461bcd60e51b815260206004820152603c602482015260008051602061542e83398151915260448201527f746174653a20426174636820616c726561647920766572696669656400000000606482015260840161095b565b6068546001600160401b03600160401b9091048116908316118015906120ee57506001600160401b038083166000908152606760205260409020600101541615155b6121675760405162461bcd60e51b8152602060048201526050602482015260008051602061542e83398151915260448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a40161095b565b6001600160401b0380831660009081526067602052604090206001015442916121959162093a809116614df2565b6001600160401b031611156122165760405162461bcd60e51b815260206004820152604d602482015260008051602061542e83398151915260448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a40161095b565b505b612220613c00565b50565b60655460ff16156122465760405162461bcd60e51b815260040161095b90614e1d565b612257898989898989898989613c70565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f07613c00565b6073546001600160a01b031633146122dc5760405162461bcd60e51b815260040161095b90614d99565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a5090831515815260200190565b6065546040516370a0823160e01b81526000918291600160581b9091046001600160a01b0316906370a08231906123649030906004016146ee565b602060405180830381865afa158015612381573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a59190614ee4565b905060006123b16125bf565b6068546001600160401b03600160401b82048116916123e191600160801b8204811691600160c01b900416614f55565b6123eb9190614df2565b6123f59190614f55565b6001600160401b0316905061240a81836150ce565b9250505090565b6073546001600160a01b0316331461243b5760405162461bcd60e51b815260040161095b90614d99565b62093a806001600160401b03821611156124cf5760405162461bcd60e51b815260206004820152604960248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a20457863656564206d61782068616c74206167677265676174696f6064820152681b881d1a5b595bdd5d60ba1b608482015260a40161095b565b60655460ff16612564576072546001600160401b03600160801b9091048116908216106125645760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a204e65772074696d656f7574206d757374206265206c6f77657200606482015260840161095b565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610a50565b6072546000906001600160401b0316156125fc57506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126365760405162461bcd60e51b815260040161095b90614d99565b606e6126428282614ff9565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a509190614647565b6073546001600160a01b0316331461269c5760405162461bcd60e51b815260040161095b90614d99565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610a50565b60655460ff16156127165760405162461bcd60e51b815260040161095b90614e1d565b606c54600160a01b900460ff1615156001146127445760405162461bcd60e51b815260040161095b906150e2565b8051806127a75760405162461bcd60e51b815260206004820152603f602482015260008051602061548e83398151915260448201527f65733a204d75737420666f726365206174206c65617374203120626174636800606482015260840161095b565b6103e881106128185760405162461bcd60e51b8152602060048201526043602482015260008051602061548e83398151915260448201527f65733a2043616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a40161095b565b6068546001600160401b03600160c01b8204811691612840918491600160801b90041661514b565b111561289c5760405162461bcd60e51b8152602060048201526037602482015260008051602061548e833981519152604482015276195cce88119bdc98d94818985d18da081a5b9d985b1a59604a1b606482015260840161095b565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612aca5760008682815181106128e9576128e9614e85565b6020026020010151905083806128fe90614e9b565b94505060008160000151805190602001208260200151836040015160405160200161292b93929190614ec1565b60408051601f1981840301815291815281516020928301206001600160401b0388166000908152606690935291205490915081146129ca5760405162461bcd60e51b8152602060048201526042602482015260008051602061548e83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a40161095b565b6129d5600188614f7d565b8303612a6c57426206978083604001516129ef9190614df2565b6001600160401b03161115612a6c5760405162461bcd60e51b8152602060048201526049602482015260008051602061548e83398151915260448201527f65733a20466f72636564206261746368206973206e6f7420696e2074696d656f6064820152681d5d081c195c9a5bd960ba1b608482015260a40161095b565b8151805160209182012081840151604051612a8f93889392914291339101614efd565b6040516020818303038152906040528051906020012093508580612ab290614e9b565b96505050508080612ac290614f3c565b9150506128cd565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b0319909216919091179286168502929092179091558554600160401b600160c01b03191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612bd55760405162461bcd60e51b815260040161095b90615163565b6073546001600160a01b03163314612bff5760405162461bcd60e51b815260040161095b90614d99565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612c4f57600080fd5b505af1158015612c63573d6000803e3d6000fd5b505050506120176142a6565b606a546001600160a01b03163314612c995760405162461bcd60e51b815260040161095b906151c0565b612caa898989898989898989613c70565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612cf557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612d3b57600080fd5b505af1158015612d4f573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612dd75760405162461bcd60e51b815260040161095b90614e1d565b606c54600160a01b900460ff161515600114612e055760405162461bcd60e51b815260040161095b906150e2565b6000612e1060745490565b905081811115612e755760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a204e6f7420656e6044820152696f756768206d6174696360b01b606482015260840161095b565b620493e0835110612ee65760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b606482015260840161095b565b606554612f0590600160581b90046001600160a01b03163330846132e8565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015612f4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f739190614ee4565b60688054919250600160c01b9091046001600160401b0316906018612f9783614e9b565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505083805190602001208142604051602001612fd893929190614ec1565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361307c57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26130d7565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516130ce9392919061521d565b60405180910390a25b50505050565b606a546001600160a01b031633146131075760405162461bcd60e51b815260040161095b906151c0565b61311788888888888888886133f7565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561316257607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156131a857600080fd5b505af11580156131bc573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce7906020016118fd565b6073546001600160a01b031633146132275760405162461bcd60e51b815260040161095b90614d99565b606a80546001600160a01b0319166001600160a01b0383161790556040517f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90610a509083906146ee565b61327a613b54565b6001600160a01b0381166132df5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161095b565b61222081613bae565b6040516001600160a01b03808516602483015283166044820152606481018290526130d79085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526142fd565b6072546001600160401b03600160401b82048116911611156120175760725460009061339090600160401b90046001600160401b03166001614df2565b905061339b81610bfc565b15612220576072546000906002906133bd9084906001600160401b0316614f55565b6133c79190615250565b6133d19083614df2565b90506133dc81610bfc565b156133ee576133ea8161190f565b5050565b6133ea8261190f565b6000806134026125bf565b90506001600160401b038a1615613568576072546001600160401b03908116908b1611156134ba5760405162461bcd60e51b815260206004820152605960248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20706560448201527f6e64696e6753746174654e756d206d757374206265206c657373206f7220657160648201527875616c207468616e206c61737450656e64696e67537461746560381b608482015260a40161095b565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b90920416146135625760405162461bcd60e51b815260206004820152604d602482015260008051602061544e83398151915260448201527f69744e756d4261746368206d757374206d61746368207468652070656e64696e60648201526c0ce40e6e8c2e8ca40c4c2e8c6d609b1b608482015260a40161095b565b5061368e565b6001600160401b0389166000908152606d60205260409020549150816135f25760405162461bcd60e51b81526020600482015260446024820181905260008051602061544e833981519152908201527f69744e756d426174636820737461746520726f6f7420646f6573206e6f7420656064820152631e1a5cdd60e21b608482015260a40161095b565b806001600160401b0316896001600160401b0316111561368e5760405162461bcd60e51b815260206004820152605e602482015260008051602061544e83398151915260448201527f69744e756d4261746368206d757374206265206c657373206f7220657175616c60648201527f207468616e2063757272656e744c617374566572696669656442617463680000608482015260a40161095b565b806001600160401b0316886001600160401b0316116137365760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20666960448201527f6e616c4e65774261746368206d75737420626520626967676572207468616e206064820152770c6eae4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d60431b608482015260a40161095b565b60006137458a8a8a868b610a5b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161377a9190615276565b602060405180830381855afa158015613797573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906137ba9190614ee4565b6137c49190615292565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613808918b918b918b91906004016152a6565b602060405180830381865afa158015613825573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138499190615320565b6138a95760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20496e60448201526a3b30b634b210383937b7b360a91b606482015260840161095b565b6138ec336138b7858d614f55565b6001600160401b03166138c8612329565b6138d29190614f94565b606554600160581b90046001600160a01b031691906143d4565b505050505050505050505050565b60006139046125bf565b9050816000806139148484614f55565b6001600160401b031690505b836001600160401b0316836001600160401b0316146139c6576001600160401b03808416600090815260676020526040902060655460018201549192610100909104811691613970911642614f7d565b11156139ab57600181015461399590600160401b90046001600160401b031685614f55565b6139a8906001600160401b03168461514b565b92505b60010154600160401b90046001600160401b03169250613920565b60006139d28383614f7d565b905082811015613a4c5760006139e88285614f7d565b9050600c81116139f857806139fb565b600c5b9050613a08816003614f94565b613a1390600a615421565b606554613a2c908390600160481b900461ffff16615421565b607454613a399190614f94565b613a4391906150ce565b60745550613ad8565b6000613a588483614f7d565b9050600c8111613a685780613a6b565b600c5b90506000613a7a826003614f94565b613a8590600a615421565b606554613a9e908490600160481b900461ffff16615421565b607454613aab9190614f94565b613ab591906150ce565b905080607454607454613ac89190614f94565b613ad291906150ce565b60745550505b505050505050565b600054610100900460ff16613b4b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161095b565b61201733613bae565b6033546001600160a01b031633146120175760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095b565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613c5057600080fd5b505af1158015613c64573d6000803e3d6000fd5b50505050612017614404565b60006001600160401b038a1615613de0576072546001600160401b03908116908b161115613d285760405162461bcd60e51b8152602060048201526065602482015260008051602061546e83398151915260448201527f696e6753746174653a2070656e64696e6753746174654e756d206d757374206260648201527f65206c657373206f7220657175616c207468616e206c61737450656e64696e67608482015264537461746560d81b60a482015260c40161095b565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613dda5760405162461bcd60e51b8152602060048201526059602482015260008051602061546e83398151915260448201527f696e6753746174653a20696e69744e756d4261746368206d757374206d6174636064820152780d040e8d0ca40e0cadcc8d2dcce40e6e8c2e8ca40c4c2e8c6d603b1b608482015260a40161095b565b50613f19565b506001600160401b0387166000908152606d602052604090205480613e745760405162461bcd60e51b8152602060048201526050602482015260008051602061546e83398151915260448201527f696e6753746174653a20696e69744e756d426174636820737461746520726f6f60648201526f1d08191bd95cc81b9bdd08195e1a5cdd60821b608482015260a40161095b565b6069546001600160401b039081169089161115613f195760405162461bcd60e51b8152602060048201526063602482015260008051602061546e83398151915260448201527f696e6753746174653a20696e69744e756d4261746368206d757374206265206c60648201527f657373206f7220657175616c207468616e206c617374566572696669656442616084820152620e8c6d60eb1b60a482015260c40161095b565b6072546001600160401b03908116908a1611801590613f495750896001600160401b0316896001600160401b0316115b8015613f6a57506072546001600160401b03600160401b9091048116908a16115b613fdb5760405162461bcd60e51b8152602060048201526048602482015260008051602061546e83398151915260448201527f696e6753746174653a2066696e616c50656e64696e6753746174654e756d20696064820152671b98dbdc9c9958dd60c21b608482015260a40161095b565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146140945760405162461bcd60e51b8152602060048201526063602482015260008051602061546e83398151915260448201527f696e6753746174653a2066696e616c4e65774261746368206d7573742062652060648201527f657175616c207468616e2063757272656e744c617374566572696669656442616084820152620e8c6d60eb1b60a482015260c40161095b565b60006140a3898989858a610a5b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516140d89190615276565b602060405180830381855afa1580156140f5573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906141189190614ee4565b6141229190615292565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614166918a918a918a91906004016152a6565b602060405180830381865afa158015614183573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141a79190615320565b6142015760405162461bcd60e51b8152602060048201526037602482015260008051602061546e83398151915260448201527634b733a9ba30ba329d1024b73b30b634b210383937b7b360491b606482015260840161095b565b6001600160401b038b166000908152607160205260409020600201548790036138ec5760405162461bcd60e51b815260206004820152605b602482015260008051602061546e83398151915260448201527f696e6753746174653a2053746f72656420726f6f74206d75737420626520646960648201527f66666572656e74207468616e206e657720737461746520726f6f740000000000608482015260a40161095b565b60655460ff166142c85760405162461bcd60e51b815260040161095b90615163565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614352826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661445f9092919063ffffffff16565b8051909150156143cf57808060200190518101906143709190615320565b6143cf5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161095b565b505050565b6040516001600160a01b0383166024820152604481018290526143cf90849063a9059cbb60e01b9060640161331c565b60655460ff16156144275760405162461bcd60e51b815260040161095b90614e1d565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b606061446e8484600085614476565b949350505050565b6060824710156144d75760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161095b565b600080866001600160a01b031685876040516144f39190615276565b60006040518083038185875af1925050503d8060008114614530576040519150601f19603f3d011682016040523d82523d6000602084013e614535565b606091505b509150915061454687838387614551565b979650505050505050565b606083156145c05782516000036145b9576001600160a01b0385163b6145b95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161095b565b508161446e565b61446e83838151156145d55781518083602001fd5b8060405162461bcd60e51b815260040161095b9190614647565b60005b8381101561460a5781810151838201526020016145f2565b838111156130d75750506000910152565b600081518084526146338160208601602086016145ef565b601f01601f19169290920160200192915050565b60208152600061465a602083018461461b565b9392505050565b60006020828403121561467357600080fd5b813561ffff8116811461465a57600080fd5b80356001600160401b038116811461469c57600080fd5b919050565b600080600080600060a086880312156146b957600080fd5b6146c286614685565b94506146d060208701614685565b94979496505050506040830135926060810135926080909101359150565b6001600160a01b0391909116815260200190565b60006020828403121561471457600080fd5b61465a82614685565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156147555761475561471d565b60405290565b604051606081016001600160401b03811182821017156147555761475561471d565b604051601f8201601f191681016001600160401b03811182821017156147a5576147a561471d565b604052919050565b60006001600160401b038211156147c6576147c661471d565b5060051b60200190565b600082601f8301126147e157600080fd5b81356001600160401b038111156147fa576147fa61471d565b61480d601f8201601f191660200161477d565b81815284602083860101111561482257600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561485257600080fd5b82356001600160401b038082111561486957600080fd5b818501915085601f83011261487d57600080fd5b813561489061488b826147ad565b61477d565b81815260059190911b830184019084810190888311156148af57600080fd5b8585015b83811015614948578035858111156148cb5760008081fd5b86016080818c03601f19018113156148e35760008081fd5b6148eb614733565b89830135888111156148fd5760008081fd5b61490b8e8c838701016147d0565b8252506040808401358b8301526060614925818601614685565b82840152614934848601614685565b9083015250855250509186019186016148b3565b5098975050505050505050565b806040810183101561496657600080fd5b92915050565b806080810183101561496657600080fd5b6000806000806000806000806101a0898b03121561499a57600080fd5b6149a389614685565b97506149b160208a01614685565b96506149bf60408a01614685565b955060608901359450608089013593506149dc8a60a08b01614955565b92506149eb8a60e08b0161496c565b91506149fb8a6101608b01614955565b90509295985092959890939650565b6001600160a01b038116811461222057600080fd5b600080600080600080600080888a036101c0811215614a3d57600080fd5b8935614a4881614a0a565b985060208a0135614a5881614a0a565b975060408a0135614a6881614a0a565b965060608a0135614a7881614a0a565b955060e0607f1982011215614a8c57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614ab657600080fd5b614ac28c838d016147d0565b93506101a08b0135915080821115614ad957600080fd5b50614ae68b828c016147d0565b9150509295985092959890939650565b600060208284031215614b0857600080fd5b813561465a81614a0a565b60008060008060008060008060006101c08a8c031215614b3257600080fd5b614b3b8a614685565b9850614b4960208b01614685565b9750614b5760408b01614685565b9650614b6560608b01614685565b955060808a0135945060a08a01359350614b828b60c08c01614955565b9250614b928b6101008c0161496c565b9150614ba28b6101808c01614955565b90509295985092959850929598565b600060208284031215614bc357600080fd5b5035919050565b801515811461222057600080fd5b600060208284031215614bea57600080fd5b813561465a81614bca565b600060208284031215614c0757600080fd5b81356001600160401b03811115614c1d57600080fd5b61446e848285016147d0565b60006020808385031215614c3c57600080fd5b82356001600160401b0380821115614c5357600080fd5b818501915085601f830112614c6757600080fd5b8135614c7561488b826147ad565b81815260059190911b83018401908481019088831115614c9457600080fd5b8585015b8381101561494857803585811115614cb05760008081fd5b86016060818c03601f1901811315614cc85760008081fd5b614cd061475b565b8983013588811115614ce25760008081fd5b614cf08e8c838701016147d0565b8252506040808401358b830152614d08838501614685565b9082015285525050918601918601614c98565b60008060408385031215614d2e57600080fd5b82356001600160401b03811115614d4457600080fd5b614d50858286016147d0565b95602094909401359450505050565b600181811c90821680614d7357607f821691505b602082108103614d9357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a204f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614e1457614e14614ddc565b01949350505050565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b03808316818103614eb757614eb7614ddc565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b600060208284031215614ef657600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6001600160601b0319166068820152607c0190565b600060018201614f4e57614f4e614ddc565b5060010190565b60006001600160401b0383811690831681811015614f7557614f75614ddc565b039392505050565b600082821015614f8f57614f8f614ddc565b500390565b6000816000190483118215151615614fae57614fae614ddc565b500290565b601f8211156143cf57600081815260208120601f850160051c81016020861015614fda5750805b601f850160051c820191505b81811015613ad857828155600101614fe6565b81516001600160401b038111156150125761501261471d565b615026816150208454614d5f565b84614fb3565b602080601f83116001811461505b57600084156150435750858301515b600019600386901b1c1916600185901b178555613ad8565b600085815260208120601f198616915b8281101561508a5788860151825594840194600190910190840161506b565b50858210156150a85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b6000826150dd576150dd6150b8565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a204f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b6000821982111561515e5761515e614ddc565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a204f6e6c7920747275737465642061676772656761746f7200000000606082015260800190565b8381526001600160a01b03831660208201526060604082018190526000906152479083018461461b565b95945050505050565b60006001600160401b038084168061526a5761526a6150b8565b92169190910492915050565b600082516152888184602087016145ef565b9190910192915050565b6000826152a1576152a16150b8565b500690565b61012081016040808784376000838201818152879190815b60028110156152de578484833790840182815292840192906001016152be565b5050828760c0870137610100850181815286935091505b60018110156153145782518252602092830192909101906001016152f5565b50505095945050505050565b60006020828403121561533257600080fd5b815161465a81614bca565b600181815b8085111561537857816000190482111561535e5761535e614ddc565b8085161561536b57918102915b93841c9390800290615342565b509250929050565b60008261538f57506001614966565b8161539c57506000614966565b81600181146153b257600281146153bc576153d8565b6001915050614966565b60ff8411156153cd576153cd614ddc565b50506001821b614966565b5060208310610133831016604e8410600b84101617156153fb575081810a614966565b615405838361533d565b806000190482111561541957615419614ddc565b029392505050565b600061465a838361538056fe506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e637953506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20696e506f6c79676f6e5a6b45564d3a3a5f70726f766544697374696e637450656e64506f6c79676f6e5a6b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a2046a26469706673582212208688772921966f41c65c26d2f18e6be61e5d1612ef2f8c43963f7a6022026d4d64736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061032f5760003560e01c80638da5cb5b116101b4578063cfa8ed47116100fa578063e7a7ed021161009d578063e7a7ed021461080e578063e8bf92ed14610828578063eaeb077b1461083b578063edc411211461084e578063f14916d614610861578063f2fde38b14610874578063f851a44014610887578063f8b823e41461089a57600080fd5b8063cfa8ed471461077c578063d02103ca14610796578063d8d1091b146107a9578063d8f54db0146107bc578063d939b315146107d0578063dbc16976146107ea578063e11f3f18146107f2578063e217cfd61461080557600080fd5b8063ab9fc5ef11610162578063ab9fc5ef14610688578063adc879e914610692578063afd23cbe146106ac578063b4d63f58146106d4578063b6b0b09714610734578063c0ed84e01461074e578063c89e42df14610756578063cf1363061461076957600080fd5b80638da5cb5b1461062157806399f5634e146106325780639c9f3dfe1461063a5780639eb831b91461064d5780639f0d039d14610655578063a3c573eb1461065d578063aa58bad61461067057600080fd5b80634a910e6a11610279578063715018a611610227578063715018a61461053b5780637215541a1461054357806375c508b3146105565780637fcb365314610569578063837a47381461057c578063841b24d7146105ea5780638b48931e146106045780638c4a0af71461060e57600080fd5b80634a910e6a146104a75780635392c5e0146104ba578063542028d5146104da57806360943d6a146104e25780636b8616ce146104f55780636ff512cc14610515578063704b6c021461052857600080fd5b8063383b3be8116102e1578063383b3be8146103fa578063394218e91461040d5780633c15826714610420578063423fa85614610433578063456052671461044d578063458c0477146104675780634834a3431461047a5780634a1a89a71461048d57600080fd5b8063107bf28c1461033457806315064c96146103525780631816b7e51461036f57806319d8ac6114610384578063220d7899146103af57806329878983146103c25780632d0889d3146103e2575b600080fd5b61033c6108a3565b6040516103499190614647565b60405180910390f35b60655461035f9060ff1681565b6040519015158152602001610349565b61038261037d366004614661565b610931565b005b606854610397906001600160401b031681565b6040516001600160401b039091168152602001610349565b61033c6103bd3660046146a1565b610a5b565b606a546103d5906001600160a01b031681565b60405161034991906146ee565b6103ec620493e081565b604051908152602001610349565b61035f610408366004614702565b610bfc565b61038261041b366004614702565b610c43565b61038261042e36600461483f565b610dff565b60685461039790600160401b90046001600160401b031681565b60685461039790600160801b90046001600160401b031681565b607254610397906001600160401b031681565b61038261048836600461497d565b6115c6565b60725461039790600160401b90046001600160401b031681565b6103826104b5366004614702565b61190f565b6103ec6104c8366004614702565b606d6020526000908152604090205481565b61033c611baa565b6103826104f0366004614a1f565b611bb7565b6103ec610503366004614702565b60666020526000908152604090205481565b610382610523366004614af6565b611f12565b610382610536366004614af6565b611f90565b610382612005565b610382610551366004614702565b612019565b610382610564366004614b13565b612223565b606954610397906001600160401b031681565b6105bf61058a366004614bb1565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610349565b60725461039790600160c01b90046001600160401b031681565b61039762093a8081565b61038261061c366004614bd8565b6122b2565b6033546001600160a01b03166103d5565b6103ec612329565b610382610648366004614702565b612411565b6103ec600c81565b6074546103ec565b6070546103d5906001600160a01b031681565b6065546103979061010090046001600160401b031681565b6103976206978081565b606c5461039790600160a81b90046001600160401b031681565b6065546106c190600160481b900461ffff1681565b60405161ffff9091168152602001610349565b61070f6106e2366004614702565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610349565b6065546103d590600160581b90046001600160a01b031681565b6103976125bf565b610382610764366004614bf5565b61260c565b610382610777366004614702565b612672565b6069546103d590600160401b90046001600160a01b031681565b606c546103d5906001600160a01b031681565b6103826107b7366004614c29565b6126f3565b606c5461035f90600160a01b900460ff1681565b60725461039790600160801b90046001600160401b031681565b610382612bb3565b610382610800366004614b13565b612c6f565b6103976103e881565b60685461039790600160c01b90046001600160401b031681565b606b546103d5906001600160a01b031681565b610382610849366004614d1b565b612db4565b61038261085c36600461497d565b6130dd565b61038261086f366004614af6565b6131fd565b610382610882366004614af6565b613272565b6073546103d5906001600160a01b031681565b6103ec60745481565b606f80546108b090614d5f565b80601f01602080910402602001604051908101604052809291908181526020018280546108dc90614d5f565b80156109295780601f106108fe57610100808354040283529160200191610929565b820191906000526020600020905b81548152906001019060200180831161090c57829003601f168201915b505050505081565b6073546001600160a01b031633146109645760405162461bcd60e51b815260040161095b90614d99565b60405180910390fd5b6103e88161ffff161015801561097f57506104008161ffff16105b610a045760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a40161095b565b6065805461ffff60481b1916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610a8d57508115155b610b01576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f74206578697374606482015260840161095b565b80610b76576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f74206578697374606482015260840161095b565b606c54604080516001600160601b03193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610c3292600160801b90920481169116614df2565b6001600160401b0316111592915050565b6073546001600160a01b03163314610c6d5760405162461bcd60e51b815260040161095b90614d99565b62093a806001600160401b0382161115610d065760405162461bcd60e51b815260206004820152604e60248201527f506f6c79676f6e5a6b45564d3a3a73657454727573746564416767726567617460448201527f6f7254696d656f75743a20457863656564206d61782068616c7420616767726560648201526d19d85d1a5bdb881d1a5b595bdd5d60921b608482015260a40161095b565b60655460ff16610da9576072546001600160401b03600160c01b909104811690821610610da95760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a204e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a40161095b565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610a50565b60655460ff1615610e225760405162461bcd60e51b815260040161095b90614e1d565b606954600160401b90046001600160a01b03163314610ea95760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a204f6e6c7920747275737465642073657175656e636572000000000000606482015260840161095b565b805180610f1e5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e63652031206261746368000000606482015260840161095b565b6103e88110610f97576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e792062617463686573606482015260840161095b565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b858110156113fc576000878281518110610fea57610fea614e85565b60200260200101519050600081606001516001600160401b0316111561117a578361101481614e9b565b94505060008160000151805190602001208260200151836060015160405160200161104193929190614ec1565b60408051601f1981840301815291815281516020928301206001600160401b0388166000908152606690935291205490915081146110d55760405162461bcd60e51b815260206004820152603d60248201526000805160206154ae83398151915260448201527f6f7263656420626174636865732064617461206d757374206d61746368000000606482015260840161095b565b81606001516001600160401b031682604001516001600160401b031610156111745760405162461bcd60e51b815260206004820152605860248201526000805160206154ae83398151915260448201527f6f7263656420626174636865732074696d657374616d70206d757374206265206064820152773134b3b3b2b91037b91032b8bab0b6103a3430b71036b4b760411b608482015260a40161095b565b506112ef565b602081015115806112035750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916111bd9160040190815260200190565b6020604051808303816000875af11580156111dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112009190614ee4565b15155b6112755760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d757374206578697374000000000000606482015260840161095b565b805151620493e0116112ef5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f77000000000000606482015260840161095b565b856001600160401b031681604001516001600160401b03161015801561132257504281604001516001600160401b031611155b6113945760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e6765000000606482015260840161095b565b805180516020918201208183015160408085015190516113bb948894939291339101614efd565b60405160208183030381529060405280519060200120925084806113de90614e9b565b955050806040015195505080806113f490614f3c565b915050610fce565b506068546001600160401b03600160c01b9091048116908316111561146f5760405162461bcd60e51b815260206004820152603560248201526000805160206154ae8339815191526044820152746f7263652062617463686573206f766572666c6f7760581b606482015260840161095b565b60685460009061148f90600160801b90046001600160401b031684614f55565b6114a2906001600160401b031687614f7d565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115779033903090849061155c9190614f94565b606554600160581b90046001600160a01b03169291906132e8565b61157f613353565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff16156115e95760405162461bcd60e51b815260040161095b90614e1d565b6072546001600160401b03878116600090815260676020526040902060010154429261162092600160c01b90910481169116614df2565b6001600160401b031611156116a95760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2054727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a40161095b565b6103e86116b68888614f55565b6001600160401b0316106117325760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2043616e60448201527f6e6f74207665726966792074686174206d616e79206261746368657300000000606482015260840161095b565b61174288888888888888886133f7565b61174b866138fa565b607254600160801b90046001600160401b0316600003611813576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d6020526040902085905560725416156117b057607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156117f657600080fd5b505af115801561180a573d6000803e3d6000fd5b505050506118c4565b61181b613353565b607280546001600160401b031690600061183483614e9b565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b0381161580159061193c57506072546001600160401b03600160401b9091048116908216115b801561195757506072546001600160401b0390811690821611155b6119d55760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a40161095b565b606a546001600160a01b03163314611a7f576119f081610bfc565b611a7f5760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2050656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a40161095b565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611b3c57600080fd5b505af1158015611b50573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611b9d91815260200190565b60405180910390a3505050565b606e80546108b090614d5f565b600054610100900460ff1615808015611bd75750600054600160ff909116105b80611bf15750303b158015611bf1575060005460ff166001145b611c545760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161095b565b6000805460ff191660011790558015611c77576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c81169190911790925560658054600160581b600160f81b031916600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611cdf6020860186614af6565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d0f6060860160408701614af6565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611d4a60c0860160a08701614af6565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611da760e0860160c08701614702565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611dde6040860160208701614702565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611e1a6080860160608701614702565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611e5660a0860160808701614bd8565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611e7e8482614ff9565b50606f611e8b8382614ff9565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611ec1613ae0565b8015611f07576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611f3c5760405162461bcd60e51b815260040161095b90614d99565b60698054600160401b600160e01b031916600160401b6001600160a01b038416021790556040517ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090610a509083906146ee565b6073546001600160a01b03163314611fba5760405162461bcd60e51b815260040161095b90614d99565b607380546001600160a01b0319166001600160a01b0383161790556040517f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190610a509083906146ee565b61200d613b54565b6120176000613bae565b565b6033546001600160a01b031633146122185760006120356125bf565b9050806001600160401b0316826001600160401b0316116120ac5760405162461bcd60e51b815260206004820152603c602482015260008051602061542e83398151915260448201527f746174653a20426174636820616c726561647920766572696669656400000000606482015260840161095b565b6068546001600160401b03600160401b9091048116908316118015906120ee57506001600160401b038083166000908152606760205260409020600101541615155b6121675760405162461bcd60e51b8152602060048201526050602482015260008051602061542e83398151915260448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a40161095b565b6001600160401b0380831660009081526067602052604090206001015442916121959162093a809116614df2565b6001600160401b031611156122165760405162461bcd60e51b815260206004820152604d602482015260008051602061542e83398151915260448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a40161095b565b505b612220613c00565b50565b60655460ff16156122465760405162461bcd60e51b815260040161095b90614e1d565b612257898989898989898989613c70565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f07613c00565b6073546001600160a01b031633146122dc5760405162461bcd60e51b815260040161095b90614d99565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a5090831515815260200190565b6065546040516370a0823160e01b81526000918291600160581b9091046001600160a01b0316906370a08231906123649030906004016146ee565b602060405180830381865afa158015612381573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a59190614ee4565b905060006123b16125bf565b6068546001600160401b03600160401b82048116916123e191600160801b8204811691600160c01b900416614f55565b6123eb9190614df2565b6123f59190614f55565b6001600160401b0316905061240a81836150ce565b9250505090565b6073546001600160a01b0316331461243b5760405162461bcd60e51b815260040161095b90614d99565b62093a806001600160401b03821611156124cf5760405162461bcd60e51b815260206004820152604960248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a20457863656564206d61782068616c74206167677265676174696f6064820152681b881d1a5b595bdd5d60ba1b608482015260a40161095b565b60655460ff16612564576072546001600160401b03600160801b9091048116908216106125645760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a204e65772074696d656f7574206d757374206265206c6f77657200606482015260840161095b565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610a50565b6072546000906001600160401b0316156125fc57506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126365760405162461bcd60e51b815260040161095b90614d99565b606e6126428282614ff9565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a509190614647565b6073546001600160a01b0316331461269c5760405162461bcd60e51b815260040161095b90614d99565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610a50565b60655460ff16156127165760405162461bcd60e51b815260040161095b90614e1d565b606c54600160a01b900460ff1615156001146127445760405162461bcd60e51b815260040161095b906150e2565b8051806127a75760405162461bcd60e51b815260206004820152603f602482015260008051602061548e83398151915260448201527f65733a204d75737420666f726365206174206c65617374203120626174636800606482015260840161095b565b6103e881106128185760405162461bcd60e51b8152602060048201526043602482015260008051602061548e83398151915260448201527f65733a2043616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a40161095b565b6068546001600160401b03600160c01b8204811691612840918491600160801b90041661514b565b111561289c5760405162461bcd60e51b8152602060048201526037602482015260008051602061548e833981519152604482015276195cce88119bdc98d94818985d18da081a5b9d985b1a59604a1b606482015260840161095b565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612aca5760008682815181106128e9576128e9614e85565b6020026020010151905083806128fe90614e9b565b94505060008160000151805190602001208260200151836040015160405160200161292b93929190614ec1565b60408051601f1981840301815291815281516020928301206001600160401b0388166000908152606690935291205490915081146129ca5760405162461bcd60e51b8152602060048201526042602482015260008051602061548e83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a40161095b565b6129d5600188614f7d565b8303612a6c57426206978083604001516129ef9190614df2565b6001600160401b03161115612a6c5760405162461bcd60e51b8152602060048201526049602482015260008051602061548e83398151915260448201527f65733a20466f72636564206261746368206973206e6f7420696e2074696d656f6064820152681d5d081c195c9a5bd960ba1b608482015260a40161095b565b8151805160209182012081840151604051612a8f93889392914291339101614efd565b6040516020818303038152906040528051906020012093508580612ab290614e9b565b96505050508080612ac290614f3c565b9150506128cd565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b0319909216919091179286168502929092179091558554600160401b600160c01b03191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612bd55760405162461bcd60e51b815260040161095b90615163565b6073546001600160a01b03163314612bff5760405162461bcd60e51b815260040161095b90614d99565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612c4f57600080fd5b505af1158015612c63573d6000803e3d6000fd5b505050506120176142a6565b606a546001600160a01b03163314612c995760405162461bcd60e51b815260040161095b906151c0565b612caa898989898989898989613c70565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612cf557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612d3b57600080fd5b505af1158015612d4f573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612dd75760405162461bcd60e51b815260040161095b90614e1d565b606c54600160a01b900460ff161515600114612e055760405162461bcd60e51b815260040161095b906150e2565b6000612e1060745490565b905081811115612e755760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a204e6f7420656e6044820152696f756768206d6174696360b01b606482015260840161095b565b620493e0835110612ee65760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b606482015260840161095b565b606554612f0590600160581b90046001600160a01b03163330846132e8565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015612f4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f739190614ee4565b60688054919250600160c01b9091046001600160401b0316906018612f9783614e9b565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505083805190602001208142604051602001612fd893929190614ec1565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361307c57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26130d7565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516130ce9392919061521d565b60405180910390a25b50505050565b606a546001600160a01b031633146131075760405162461bcd60e51b815260040161095b906151c0565b61311788888888888888886133f7565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561316257607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156131a857600080fd5b505af11580156131bc573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce7906020016118fd565b6073546001600160a01b031633146132275760405162461bcd60e51b815260040161095b90614d99565b606a80546001600160a01b0319166001600160a01b0383161790556040517f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90610a509083906146ee565b61327a613b54565b6001600160a01b0381166132df5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161095b565b61222081613bae565b6040516001600160a01b03808516602483015283166044820152606481018290526130d79085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526142fd565b6072546001600160401b03600160401b82048116911611156120175760725460009061339090600160401b90046001600160401b03166001614df2565b905061339b81610bfc565b15612220576072546000906002906133bd9084906001600160401b0316614f55565b6133c79190615250565b6133d19083614df2565b90506133dc81610bfc565b156133ee576133ea8161190f565b5050565b6133ea8261190f565b6000806134026125bf565b90506001600160401b038a1615613568576072546001600160401b03908116908b1611156134ba5760405162461bcd60e51b815260206004820152605960248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20706560448201527f6e64696e6753746174654e756d206d757374206265206c657373206f7220657160648201527875616c207468616e206c61737450656e64696e67537461746560381b608482015260a40161095b565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b90920416146135625760405162461bcd60e51b815260206004820152604d602482015260008051602061544e83398151915260448201527f69744e756d4261746368206d757374206d61746368207468652070656e64696e60648201526c0ce40e6e8c2e8ca40c4c2e8c6d609b1b608482015260a40161095b565b5061368e565b6001600160401b0389166000908152606d60205260409020549150816135f25760405162461bcd60e51b81526020600482015260446024820181905260008051602061544e833981519152908201527f69744e756d426174636820737461746520726f6f7420646f6573206e6f7420656064820152631e1a5cdd60e21b608482015260a40161095b565b806001600160401b0316896001600160401b0316111561368e5760405162461bcd60e51b815260206004820152605e602482015260008051602061544e83398151915260448201527f69744e756d4261746368206d757374206265206c657373206f7220657175616c60648201527f207468616e2063757272656e744c617374566572696669656442617463680000608482015260a40161095b565b806001600160401b0316886001600160401b0316116137365760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20666960448201527f6e616c4e65774261746368206d75737420626520626967676572207468616e206064820152770c6eae4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d60431b608482015260a40161095b565b60006137458a8a8a868b610a5b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161377a9190615276565b602060405180830381855afa158015613797573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906137ba9190614ee4565b6137c49190615292565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613808918b918b918b91906004016152a6565b602060405180830381865afa158015613825573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138499190615320565b6138a95760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20496e60448201526a3b30b634b210383937b7b360a91b606482015260840161095b565b6138ec336138b7858d614f55565b6001600160401b03166138c8612329565b6138d29190614f94565b606554600160581b90046001600160a01b031691906143d4565b505050505050505050505050565b60006139046125bf565b9050816000806139148484614f55565b6001600160401b031690505b836001600160401b0316836001600160401b0316146139c6576001600160401b03808416600090815260676020526040902060655460018201549192610100909104811691613970911642614f7d565b11156139ab57600181015461399590600160401b90046001600160401b031685614f55565b6139a8906001600160401b03168461514b565b92505b60010154600160401b90046001600160401b03169250613920565b60006139d28383614f7d565b905082811015613a4c5760006139e88285614f7d565b9050600c81116139f857806139fb565b600c5b9050613a08816003614f94565b613a1390600a615421565b606554613a2c908390600160481b900461ffff16615421565b607454613a399190614f94565b613a4391906150ce565b60745550613ad8565b6000613a588483614f7d565b9050600c8111613a685780613a6b565b600c5b90506000613a7a826003614f94565b613a8590600a615421565b606554613a9e908490600160481b900461ffff16615421565b607454613aab9190614f94565b613ab591906150ce565b905080607454607454613ac89190614f94565b613ad291906150ce565b60745550505b505050505050565b600054610100900460ff16613b4b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161095b565b61201733613bae565b6033546001600160a01b031633146120175760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095b565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613c5057600080fd5b505af1158015613c64573d6000803e3d6000fd5b50505050612017614404565b60006001600160401b038a1615613de0576072546001600160401b03908116908b161115613d285760405162461bcd60e51b8152602060048201526065602482015260008051602061546e83398151915260448201527f696e6753746174653a2070656e64696e6753746174654e756d206d757374206260648201527f65206c657373206f7220657175616c207468616e206c61737450656e64696e67608482015264537461746560d81b60a482015260c40161095b565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613dda5760405162461bcd60e51b8152602060048201526059602482015260008051602061546e83398151915260448201527f696e6753746174653a20696e69744e756d4261746368206d757374206d6174636064820152780d040e8d0ca40e0cadcc8d2dcce40e6e8c2e8ca40c4c2e8c6d603b1b608482015260a40161095b565b50613f19565b506001600160401b0387166000908152606d602052604090205480613e745760405162461bcd60e51b8152602060048201526050602482015260008051602061546e83398151915260448201527f696e6753746174653a20696e69744e756d426174636820737461746520726f6f60648201526f1d08191bd95cc81b9bdd08195e1a5cdd60821b608482015260a40161095b565b6069546001600160401b039081169089161115613f195760405162461bcd60e51b8152602060048201526063602482015260008051602061546e83398151915260448201527f696e6753746174653a20696e69744e756d4261746368206d757374206265206c60648201527f657373206f7220657175616c207468616e206c617374566572696669656442616084820152620e8c6d60eb1b60a482015260c40161095b565b6072546001600160401b03908116908a1611801590613f495750896001600160401b0316896001600160401b0316115b8015613f6a57506072546001600160401b03600160401b9091048116908a16115b613fdb5760405162461bcd60e51b8152602060048201526048602482015260008051602061546e83398151915260448201527f696e6753746174653a2066696e616c50656e64696e6753746174654e756d20696064820152671b98dbdc9c9958dd60c21b608482015260a40161095b565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146140945760405162461bcd60e51b8152602060048201526063602482015260008051602061546e83398151915260448201527f696e6753746174653a2066696e616c4e65774261746368206d7573742062652060648201527f657175616c207468616e2063757272656e744c617374566572696669656442616084820152620e8c6d60eb1b60a482015260c40161095b565b60006140a3898989858a610a5b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516140d89190615276565b602060405180830381855afa1580156140f5573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906141189190614ee4565b6141229190615292565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614166918a918a918a91906004016152a6565b602060405180830381865afa158015614183573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141a79190615320565b6142015760405162461bcd60e51b8152602060048201526037602482015260008051602061546e83398151915260448201527634b733a9ba30ba329d1024b73b30b634b210383937b7b360491b606482015260840161095b565b6001600160401b038b166000908152607160205260409020600201548790036138ec5760405162461bcd60e51b815260206004820152605b602482015260008051602061546e83398151915260448201527f696e6753746174653a2053746f72656420726f6f74206d75737420626520646960648201527f66666572656e74207468616e206e657720737461746520726f6f740000000000608482015260a40161095b565b60655460ff166142c85760405162461bcd60e51b815260040161095b90615163565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614352826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661445f9092919063ffffffff16565b8051909150156143cf57808060200190518101906143709190615320565b6143cf5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161095b565b505050565b6040516001600160a01b0383166024820152604481018290526143cf90849063a9059cbb60e01b9060640161331c565b60655460ff16156144275760405162461bcd60e51b815260040161095b90614e1d565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b606061446e8484600085614476565b949350505050565b6060824710156144d75760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161095b565b600080866001600160a01b031685876040516144f39190615276565b60006040518083038185875af1925050503d8060008114614530576040519150601f19603f3d011682016040523d82523d6000602084013e614535565b606091505b509150915061454687838387614551565b979650505050505050565b606083156145c05782516000036145b9576001600160a01b0385163b6145b95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161095b565b508161446e565b61446e83838151156145d55781518083602001fd5b8060405162461bcd60e51b815260040161095b9190614647565b60005b8381101561460a5781810151838201526020016145f2565b838111156130d75750506000910152565b600081518084526146338160208601602086016145ef565b601f01601f19169290920160200192915050565b60208152600061465a602083018461461b565b9392505050565b60006020828403121561467357600080fd5b813561ffff8116811461465a57600080fd5b80356001600160401b038116811461469c57600080fd5b919050565b600080600080600060a086880312156146b957600080fd5b6146c286614685565b94506146d060208701614685565b94979496505050506040830135926060810135926080909101359150565b6001600160a01b0391909116815260200190565b60006020828403121561471457600080fd5b61465a82614685565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156147555761475561471d565b60405290565b604051606081016001600160401b03811182821017156147555761475561471d565b604051601f8201601f191681016001600160401b03811182821017156147a5576147a561471d565b604052919050565b60006001600160401b038211156147c6576147c661471d565b5060051b60200190565b600082601f8301126147e157600080fd5b81356001600160401b038111156147fa576147fa61471d565b61480d601f8201601f191660200161477d565b81815284602083860101111561482257600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561485257600080fd5b82356001600160401b038082111561486957600080fd5b818501915085601f83011261487d57600080fd5b813561489061488b826147ad565b61477d565b81815260059190911b830184019084810190888311156148af57600080fd5b8585015b83811015614948578035858111156148cb5760008081fd5b86016080818c03601f19018113156148e35760008081fd5b6148eb614733565b89830135888111156148fd5760008081fd5b61490b8e8c838701016147d0565b8252506040808401358b8301526060614925818601614685565b82840152614934848601614685565b9083015250855250509186019186016148b3565b5098975050505050505050565b806040810183101561496657600080fd5b92915050565b806080810183101561496657600080fd5b6000806000806000806000806101a0898b03121561499a57600080fd5b6149a389614685565b97506149b160208a01614685565b96506149bf60408a01614685565b955060608901359450608089013593506149dc8a60a08b01614955565b92506149eb8a60e08b0161496c565b91506149fb8a6101608b01614955565b90509295985092959890939650565b6001600160a01b038116811461222057600080fd5b600080600080600080600080888a036101c0811215614a3d57600080fd5b8935614a4881614a0a565b985060208a0135614a5881614a0a565b975060408a0135614a6881614a0a565b965060608a0135614a7881614a0a565b955060e0607f1982011215614a8c57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614ab657600080fd5b614ac28c838d016147d0565b93506101a08b0135915080821115614ad957600080fd5b50614ae68b828c016147d0565b9150509295985092959890939650565b600060208284031215614b0857600080fd5b813561465a81614a0a565b60008060008060008060008060006101c08a8c031215614b3257600080fd5b614b3b8a614685565b9850614b4960208b01614685565b9750614b5760408b01614685565b9650614b6560608b01614685565b955060808a0135945060a08a01359350614b828b60c08c01614955565b9250614b928b6101008c0161496c565b9150614ba28b6101808c01614955565b90509295985092959850929598565b600060208284031215614bc357600080fd5b5035919050565b801515811461222057600080fd5b600060208284031215614bea57600080fd5b813561465a81614bca565b600060208284031215614c0757600080fd5b81356001600160401b03811115614c1d57600080fd5b61446e848285016147d0565b60006020808385031215614c3c57600080fd5b82356001600160401b0380821115614c5357600080fd5b818501915085601f830112614c6757600080fd5b8135614c7561488b826147ad565b81815260059190911b83018401908481019088831115614c9457600080fd5b8585015b8381101561494857803585811115614cb05760008081fd5b86016060818c03601f1901811315614cc85760008081fd5b614cd061475b565b8983013588811115614ce25760008081fd5b614cf08e8c838701016147d0565b8252506040808401358b830152614d08838501614685565b9082015285525050918601918601614c98565b60008060408385031215614d2e57600080fd5b82356001600160401b03811115614d4457600080fd5b614d50858286016147d0565b95602094909401359450505050565b600181811c90821680614d7357607f821691505b602082108103614d9357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a204f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614e1457614e14614ddc565b01949350505050565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b03808316818103614eb757614eb7614ddc565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b600060208284031215614ef657600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6001600160601b0319166068820152607c0190565b600060018201614f4e57614f4e614ddc565b5060010190565b60006001600160401b0383811690831681811015614f7557614f75614ddc565b039392505050565b600082821015614f8f57614f8f614ddc565b500390565b6000816000190483118215151615614fae57614fae614ddc565b500290565b601f8211156143cf57600081815260208120601f850160051c81016020861015614fda5750805b601f850160051c820191505b81811015613ad857828155600101614fe6565b81516001600160401b038111156150125761501261471d565b615026816150208454614d5f565b84614fb3565b602080601f83116001811461505b57600084156150435750858301515b600019600386901b1c1916600185901b178555613ad8565b600085815260208120601f198616915b8281101561508a5788860151825594840194600190910190840161506b565b50858210156150a85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b6000826150dd576150dd6150b8565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a204f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b6000821982111561515e5761515e614ddc565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a204f6e6c7920747275737465642061676772656761746f7200000000606082015260800190565b8381526001600160a01b03831660208201526060604082018190526000906152479083018461461b565b95945050505050565b60006001600160401b038084168061526a5761526a6150b8565b92169190910492915050565b600082516152888184602087016145ef565b9190910192915050565b6000826152a1576152a16150b8565b500690565b61012081016040808784376000838201818152879190815b60028110156152de578484833790840182815292840192906001016152be565b5050828760c0870137610100850181815286935091505b60018110156153145782518252602092830192909101906001016152f5565b50505095945050505050565b60006020828403121561533257600080fd5b815161465a81614bca565b600181815b8085111561537857816000190482111561535e5761535e614ddc565b8085161561536b57918102915b93841c9390800290615342565b509250929050565b60008261538f57506001614966565b8161539c57506000614966565b81600181146153b257600281146153bc576153d8565b6001915050614966565b60ff8411156153cd576153cd614ddc565b50506001821b614966565b5060208310610133831016604e8410600b84101617156153fb575081810a614966565b615405838361533d565b806000190482111561541957615419614ddc565b029392505050565b600061465a838361538056fe506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e637953506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20696e506f6c79676f6e5a6b45564d3a3a5f70726f766544697374696e637450656e64506f6c79676f6e5a6b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a2046a26469706673582212208688772921966f41c65c26d2f18e6be61e5d1612ef2f8c43963f7a6022026d4d64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZkEVMBridge.json b/compiled-contracts/PolygonZkEVMBridge.json index 13fa34883..7f0e497b0 100644 --- a/compiled-contracts/PolygonZkEVMBridge.json +++ b/compiled-contracts/PolygonZkEVMBridge.json @@ -699,8 +699,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506147ce806100206000396000f3fe608060405260043610620001675760003560e01c80637b6323c111620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b80637b6323c1146200037057806381b1c17414620003955780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b806334ac9cf2116200011e57806334ac9cf214620002a25780633ae0504714620002c45780633da8168214620002dc5780633e1970431462000301578063463855491462000326578063647c576c146200034b57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002432565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009cf565b348015620001db57600080fd5b50620001f3620001ed366004620024be565b62000a08565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d62000252366004620024fa565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b50602754620001f3906001600160a01b031681565b348015620002d157600080fd5b506200022462000a5b565b348015620002e957600080fd5b50620001a1620002fb366004620025e7565b62000b4e565b3480156200030e57600080fd5b50620002246200032036600462002664565b62000c4f565b3480156200033357600080fd5b50620001836200034536600462002774565b62000cdc565b3480156200035857600080fd5b50620001836200036a3660046200285a565b62000e82565b3480156200037d57600080fd5b50620001836200038f36600462002774565b62000fe1565b348015620003a257600080fd5b50620001f3620003b4366004620028aa565b6024602052600090815260409020546001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028aa565b62001469565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d366004620028c4565b620014ae565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b036600462002977565b620015c5565b348015620004c357600080fd5b506200018362001771565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028aa565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b81526004016200055390620029de565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044657374696e6174696f6e2063616e6e6f7420626520697473656c66000000606482015260840162000553565b60008060606001600160a01b03891662000687578534146200067d5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a908201527f20416d6f756e7420646f6573206e6f74206d61746368206d6573736167652e76606482015263616c756560e01b608482015260a40162000553565b60009150620008e9565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074657604051632770a7eb60e21b81526001600160a01b038b1690639dc29fac90620006fe9033908b9060040162002a46565b600060405180830381600087803b1580156200071957600080fd5b505af11580156200072e573d6000803e3d6000fd5b505050508060200151935080600001519250620008e7565b84156200075b576200075b8a888888620017a8565b620007726001600160a01b038b1633308a62001bcc565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007c9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f3919081019062002ada565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000832573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085c919081019062002ada565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c1919062002b12565b604051602001620008d59392919062002b60565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092b98979695949392919062002b9d565b60405180910390a16200095662000950600084868c8c8c888051906020012062000c4f565b62001c39565b6026546001600160a01b03166333d6247d6200097162000a5b565b6040518263ffffffff1660e01b81526004016200099091815260200190565b600060405180830381600087803b158015620009ab57600080fd5b505af1158015620009c0573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009fc5760405162461bcd60e51b8152600401620005539062002c0a565b62000a0662001d8a565b565b600060246000848460405160200162000a2392919062002c67565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b45578260011660010362000ac6576001816020811062000a925762000a9262002c91565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af3565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0060028462002cd3565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3c9062002cea565b91505062000a66565b50919392505050565b6000846001600160401b038416825b602081101562000c40578160011660010362000bca5786818151811062000b885762000b8862002c91565b60200260200101518360405160200162000bac929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c1c565b8287828151811062000be05762000be062002c91565b602002602001015160405160200162000c03929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2960028362002cd3565b91508062000c378162002cea565b91505062000b5d565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d025760405162461bcd60e51b81526004016200055390620029de565b62000d188a8a8a8a8a8a8a8a8a8a600162001de8565b62000d298963ffffffff1662002073565b6000836001600160a01b03168387898560405160240162000d4d9392919062002d06565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d84919062002d41565b60006040518083038185875af1925050503d806000811462000dc3576040519150601f19603f3d011682016040523d82523d6000602084013e62000dc8565b606091505b505090508062000e345760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e8813595cdcd859d94819985a5b195960821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e6d95949392919062002d5f565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea35750600054600160ff909116105b8062000ebf5750303b15801562000ebf575060005460ff166001145b62000f245760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f48576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff1615620010075760405162461bcd60e51b81526004016200055390620029de565b6200101d8a8a8a8a8a8a8a8a8a8a600062001de8565b6200102e8963ffffffff1662002073565b6001600160a01b0385166200112557604080516000808252602082019092526001600160a01b03851690849060405162001069919062002d41565b60006040518083038185875af1925050503d8060008114620010a8576040519150601f19603f3d011682016040523d82523d6000602084013e620010ad565b606091505b50509050806200111e5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a20604482015274115d1a195c881d1c985b9cd9995c8819985a5b1959605a1b606482015260840162000553565b506200141c565b60225463ffffffff6101009091048116908716036200115a57620011546001600160a01b0386168484620020b5565b6200141c565b600086866040516020016200117192919062002c67565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013b457600080600085806020019051810190620011c3919062002d96565b925092509250600085848484604051620011dd9062002399565b620011eb9392919062002b60565b8190604051809103906000f59050801580156200120c573d6000803e3d6000fd5b506040516340c10f1960e01b81529091506001600160a01b038216906340c10f199062001240908c908c9060040162002a46565b600060405180830381600087803b1580156200125b57600080fd5b505af115801562001270573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013a29392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001419565b6040516340c10f1960e01b81526001600160a01b038216906340c10f1990620013e4908890889060040162002a46565b600060405180830381600087803b158015620013ff57600080fd5b505af115801562001414573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200145595949392919062002d5f565b60405180910390a150505050505050505050565b6000806200147a6101008462002cd3565b905060006200148c6101008562002e0b565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014c692919062002c67565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014f99062002399565b601f1982820381018352601f90910116604081905262001526908d908d908d908d908d9060200162002e4b565b60408051601f198184030181529082905262001546929160200162002e8c565b604051602081830303815290604052805190602001206040516020016200159f94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015eb5760405162461bcd60e51b81526004016200055390620029de565b60225463ffffffff610100909104811690841603620016735760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044657374696e6174696f6e2063616e6e6f7420626520697473656c6600606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016c798979695949392919062002b9d565b60405180910390a1620016fe620009506001602260019054906101000a900463ffffffff1633878734888051906020012062000c4f565b6026546001600160a01b03166333d6247d6200171962000a5b565b6040518263ffffffff1660e01b81526004016200173891815260200190565b600060405180830381600087803b1580156200175357600080fd5b505af115801562001768573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b031633146200179e5760405162461bcd60e51b8152600401620005539062002c0a565b62000a06620020d7565b6000620017eb83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200218692505050565b9050632afa533160e01b6001600160e01b0319821601620019e05760008080808080806200181d896004818d62002ebf565b8101906200182c919062002eeb565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200186e5760405162461bcd60e51b8152600401620005539062002f46565b6001600160a01b0386163014620018995760405162461bcd60e51b8152600401620005539062002fa3565b8a85146200190c5760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205065726044820152780dad2e840c2dadeeadce840c8decae640dcdee840dac2e8c6d603b1b606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200198c919062002d41565b6000604051808303816000865af19150503d8060008114620019cb576040519150601f19603f3d011682016040523d82523d6000602084013e620019d0565b606091505b5050505050505050505062001bc5565b6001600160e01b031981166323f2ebc360e21b1462001a565760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e6f7460448201526a081d985b1a590818d85b1b60aa1b606482015260840162000553565b60008080808080808062001a6e8a6004818e62002ebf565b81019062001a7d919062003005565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001ac15760405162461bcd60e51b8152600401620005539062002f46565b6001600160a01b038716301462001aec5760405162461bcd60e51b8152600401620005539062002fa3565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001b75919062002d41565b6000604051808303816000865af19150503d806000811462001bb4576040519150601f19603f3d011682016040523d82523d6000602084013e62001bb9565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdb9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526200218d565b80600162001c4a602060026200318e565b62001c5691906200319c565b6021541062001cbb5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d65726b6c65604482015269081d1c995948199d5b1b60b21b606482015260840162000553565b60016021600082825462001cd09190620031b6565b909155505060215460005b602081101562001d7a578160011660010362001d1057826001826020811062001d085762001d0862002c91565b015550505050565b6001816020811062001d265762001d2662002c91565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d63919062002cd3565b91508062001d718162002cea565b91505062001cdb565b5062001d85620031d1565b505050565b60225460ff161562001db05760405162461bcd60e51b81526004016200055390620029de565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001df98a63ffffffff1662001469565b1562001e505760405162461bcd60e51b815260206004820152603060248201526000805160206200477983398151915260448201526f08105b1c9958591e4818db185a5b595960821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ec4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001eea9190620031e7565b90508060000362001f4d5760405162461bcd60e51b81526020600482015260376024820152600080516020620047798339815191526044820152760811db1bd8985b115e1a5d149bdbdd081a5b9d985b1a59604a1b606482015260840162000553565b60225463ffffffff878116610100909204161462001fcf5760405162461bcd60e51b815260206004820152604360248201526000805160206200477983398151915260448201527f2044657374696e6174696f6e206e6574776f726b20646f6573206e6f74206d616064820152620e8c6d60eb1b608482015260a40162000553565b602254600090610100900463ffffffff1662001fed57508862001ff0565b50895b6200201b6200200c848b8b8b8b8b8b8051906020012062000c4f565b8e8e63ffffffff168462000b4e565b620009c05760405162461bcd60e51b81526020600482015260326024820152600080516020620047798339815191526044820152711024b73b30b634b21039b6ba10383937b7b360711b606482015260840162000553565b6000620020836101008362002cd3565b90506000620020956101008462002e0b565b6000928352602360205260409092208054600190931b9092179091555050565b62001d858363a9059cbb60e01b848460405160240162001c0192919062002a46565b60225460ff16620021515760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b6000620021e4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022669092919063ffffffff16565b80519091501562001d85578080602001905181019062002205919062003201565b62001d855760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c47848460008585600080866001600160a01b0316858760405162002290919062002d41565b60006040518083038185875af1925050503d8060008114620022cf576040519150601f19603f3d011682016040523d82523d6000602084013e620022d4565b606091505b5091509150620022e787838387620022f2565b979650505050505050565b60608315620023665782516000036200235e576001600160a01b0385163b6200235e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c47565b62000c4783838151156200237d5781518083602001fd5b8060405162461bcd60e51b815260040162000553919062003221565b611542806200323783390190565b6001600160a01b0381168114620023bd57600080fd5b50565b8035620023cd81620023a7565b919050565b803563ffffffff81168114620023cd57600080fd5b60008083601f840112620023fa57600080fd5b5081356001600160401b038111156200241257600080fd5b6020830191508360208285010111156200242b57600080fd5b9250929050565b60008060008060008060a087890312156200244c57600080fd5b86356200245981620023a7565b95506200246960208801620023d2565b945060408701356200247b81620023a7565b93506060870135925060808701356001600160401b038111156200249e57600080fd5b620024ac89828a01620023e7565b979a9699509497509295939492505050565b60008060408385031215620024d257600080fd5b620024dd83620023d2565b91506020830135620024ef81620023a7565b809150509250929050565b6000602082840312156200250d57600080fd5b81356200251a81620023a7565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171562002562576200256262002521565b604052919050565b600082601f8301126200257c57600080fd5b813560206001600160401b038211156200259a576200259a62002521565b8160051b620025ab82820162002537565b9283528481018201928281019087851115620025c657600080fd5b83870192505b84831015620022e757823582529183019190830190620025cc565b60008060008060808587031215620025fe57600080fd5b8435935060208501356001600160401b03808211156200261d57600080fd5b6200262b888389016200256a565b94506040870135915080821682146200264357600080fd5b509396929550929360600135925050565b60ff81168114620023bd57600080fd5b600080600080600080600060e0888a0312156200268057600080fd5b87356200268d8162002654565b96506200269d60208901620023d2565b95506040880135620026af81620023a7565b9450620026bf60608901620023d2565b93506080880135620026d181620023a7565b9699959850939692959460a0840135945060c09093013592915050565b60006001600160401b038211156200270a576200270a62002521565b50601f01601f191660200190565b600082601f8301126200272a57600080fd5b8135620027416200273b82620026ee565b62002537565b8181528460208386010111156200275757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200279557600080fd5b8a356001600160401b0380821115620027ad57600080fd5b620027bb8e838f016200256a565b9b50620027cb60208e01620023d2565b9a5060408d0135995060608d01359850620027e960808e01620023d2565b9750620027f960a08e01620023c0565b96506200280960c08e01620023d2565b95506200281960e08e01620023c0565b94506101008d013593506101208d01359150808211156200283957600080fd5b50620028488d828e0162002718565b9150509295989b9194979a5092959850565b6000806000606084860312156200287057600080fd5b6200287b84620023d2565b925060208401356200288d81620023a7565b915060408401356200289f81620023a7565b809150509250925092565b600060208284031215620028bd57600080fd5b5035919050565b600080600080600080600060a0888a031215620028e057600080fd5b620028eb88620023d2565b96506020880135620028fd81620023a7565b955060408801356001600160401b03808211156200291a57600080fd5b620029288b838c01620023e7565b909750955060608a01359150808211156200294257600080fd5b50620029518a828b01620023e7565b9094509250506080880135620029678162002654565b8091505092959891949750929550565b6000806000606084860312156200298d57600080fd5b6200299884620023d2565b92506020840135620029aa81620023a7565b915060408401356001600160401b03811115620029c657600080fd5b620029d48682870162002718565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b6001600160a01b03929092168252602082015260400190565b60005b8381101562002a7c57818101518382015260200162002a62565b8381111562000fdb5750506000910152565b600082601f83011262002aa057600080fd5b815162002ab16200273b82620026ee565b81815284602083860101111562002ac757600080fd5b62000c4782602083016020870162002a5f565b60006020828403121562002aed57600080fd5b81516001600160401b0381111562002b0457600080fd5b62000c478482850162002a8e565b60006020828403121562002b2557600080fd5b81516200251a8162002654565b6000815180845262002b4c81602086016020860162002a5f565b601f01601f19169290920160200192915050565b60608152600062002b75606083018662002b32565b828103602084015262002b89818662002b32565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002bf18483018762002b32565b925080851660e085015250509998505050505050505050565b6020808252603a908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e5a6b45564d20636f6e7472616374000000000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002ce55762002ce562002ca7565b500490565b60006001820162002cff5762002cff62002cbd565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d389083018462002b32565b95945050505050565b6000825162002d5581846020870162002a5f565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002dac57600080fd5b83516001600160401b038082111562002dc457600080fd5b62002dd28783880162002a8e565b9450602086015191508082111562002de957600080fd5b5062002df88682870162002a8e565b92505060408401516200289f8162002654565b60008262002e1d5762002e1d62002ca7565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e6160608301878962002e22565b828103602084015262002e7681868862002e22565b91505060ff831660408301529695505050505050565b6000835162002ea081846020880162002a5f565b83519083019062002eb681836020880162002a5f565b01949350505050565b6000808585111562002ed057600080fd5b8386111562002ede57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f0757600080fd5b873562002f1481620023a7565b9650602088013562002f2681620023a7565b955060408801359450606088013593506080880135620026d18162002654565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260408201527f6d6974206f776e6572206d757374206265207468652073656e64657200000000606082015260800190565b60208082526033908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205370656040820152726e646572206d7573742062652027746869732760681b606082015260800190565b8015158114620023bd57600080fd5b600080600080600080600080610100898b0312156200302357600080fd5b88356200303081620023a7565b975060208901356200304281620023a7565b965060408901359550606089013594506080890135620030628162002ff6565b935060a0890135620030748162002654565b979a969950949793969295929450505060c08201359160e0013590565b600181815b80851115620030d2578160001904821115620030b657620030b662002cbd565b80851615620030c457918102915b93841c939080029062003096565b509250929050565b600082620030eb5750600162000a55565b81620030fa5750600062000a55565b81600181146200311357600281146200311e576200313e565b600191505062000a55565b60ff84111562003132576200313262002cbd565b50506001821b62000a55565b5060208310610133831016604e8410600b841016171562003163575081810a62000a55565b6200316f838362003091565b806000190482111562003186576200318662002cbd565b029392505050565b60006200251a8383620030da565b600082821015620031b157620031b162002cbd565b500390565b60008219821115620031cc57620031cc62002cbd565b500190565b634e487b7160e01b600052600160045260246000fd5b600060208284031215620031fa57600080fd5b5051919050565b6000602082840312156200321457600080fd5b81516200251a8162002ff6565b6020815260006200251a602083018462002b3256fe60c06040523480156200001157600080fd5b5060405162001542380380620015428339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611088620004ba60003960006104690152600081816102f9015261043301526110886000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610dc2565b60405180910390f35b61016d610168366004610e33565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e5d565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e33565b61048b565b61023d610238366004610e33565b6104ad565b005b61018161024d366004610e99565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610e99565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e33565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e33565b610531565b61016d6102ef366004610e33565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ebb565b6105ba565b61018161033c366004610f2e565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f61565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f61565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b51565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fb1565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fc9565b60405180910390fd5b6104ea8282610bfd565b5050565b60606004805461037090610f61565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fc9565b6104ea8282610caa565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611019565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b0384811660008181526020818152604080832087870390559387168083529184902080548701905592518581529092600080516020611033833981519152910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b7c610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c535760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c659190610fb1565b90915550506001600160a01b03821660008181526020818152604080832080548601905551848152600080516020611033833981519152910160405180910390a35050565b6001600160a01b038216610d0a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610d7e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192916000805160206110338339815191529101610938565b600060208083528351808285015260005b81811015610def57858101830151858201604001528201610dd3565b81811115610e01576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e2e57600080fd5b919050565b60008060408385031215610e4657600080fd5b610e4f83610e17565b946020939093013593505050565b600080600060608486031215610e7257600080fd5b610e7b84610e17565b9250610e8960208501610e17565b9150604084013590509250925092565b600060208284031215610eab57600080fd5b610eb482610e17565b9392505050565b600080600080600080600060e0888a031215610ed657600080fd5b610edf88610e17565b9650610eed60208901610e17565b95506040880135945060608801359350608088013560ff81168114610f1157600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f4157600080fd5b610f4a83610e17565b9150610f5860208401610e17565b90509250929050565b600181811c90821680610f7557607f821691505b602082108103610f9557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610fc457610fc4610f9b565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161102b5761102b610f9b565b506001019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212208b7986f78e961ad6c0885b86b24ce427045be98073c1f3d7fe18180542ab873564736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220eea1ddf5dc0824087ba900f51470f81609d826beaa356befc3f38b861a0aa77864736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001675760003560e01c80637b6323c111620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b80637b6323c1146200037057806381b1c17414620003955780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b806334ac9cf2116200011e57806334ac9cf214620002a25780633ae0504714620002c45780633da8168214620002dc5780633e1970431462000301578063463855491462000326578063647c576c146200034b57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002432565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009cf565b348015620001db57600080fd5b50620001f3620001ed366004620024be565b62000a08565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d62000252366004620024fa565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b50602754620001f3906001600160a01b031681565b348015620002d157600080fd5b506200022462000a5b565b348015620002e957600080fd5b50620001a1620002fb366004620025e7565b62000b4e565b3480156200030e57600080fd5b50620002246200032036600462002664565b62000c4f565b3480156200033357600080fd5b50620001836200034536600462002774565b62000cdc565b3480156200035857600080fd5b50620001836200036a3660046200285a565b62000e82565b3480156200037d57600080fd5b50620001836200038f36600462002774565b62000fe1565b348015620003a257600080fd5b50620001f3620003b4366004620028aa565b6024602052600090815260409020546001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028aa565b62001469565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d366004620028c4565b620014ae565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b036600462002977565b620015c5565b348015620004c357600080fd5b506200018362001771565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028aa565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b81526004016200055390620029de565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044657374696e6174696f6e2063616e6e6f7420626520697473656c66000000606482015260840162000553565b60008060606001600160a01b03891662000687578534146200067d5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a908201527f20416d6f756e7420646f6573206e6f74206d61746368206d6573736167652e76606482015263616c756560e01b608482015260a40162000553565b60009150620008e9565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074657604051632770a7eb60e21b81526001600160a01b038b1690639dc29fac90620006fe9033908b9060040162002a46565b600060405180830381600087803b1580156200071957600080fd5b505af11580156200072e573d6000803e3d6000fd5b505050508060200151935080600001519250620008e7565b84156200075b576200075b8a888888620017a8565b620007726001600160a01b038b1633308a62001bcc565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007c9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f3919081019062002ada565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000832573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085c919081019062002ada565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c1919062002b12565b604051602001620008d59392919062002b60565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092b98979695949392919062002b9d565b60405180910390a16200095662000950600084868c8c8c888051906020012062000c4f565b62001c39565b6026546001600160a01b03166333d6247d6200097162000a5b565b6040518263ffffffff1660e01b81526004016200099091815260200190565b600060405180830381600087803b158015620009ab57600080fd5b505af1158015620009c0573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009fc5760405162461bcd60e51b8152600401620005539062002c0a565b62000a0662001d8a565b565b600060246000848460405160200162000a2392919062002c67565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b45578260011660010362000ac6576001816020811062000a925762000a9262002c91565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af3565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0060028462002cd3565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3c9062002cea565b91505062000a66565b50919392505050565b6000846001600160401b038416825b602081101562000c40578160011660010362000bca5786818151811062000b885762000b8862002c91565b60200260200101518360405160200162000bac929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c1c565b8287828151811062000be05762000be062002c91565b602002602001015160405160200162000c03929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2960028362002cd3565b91508062000c378162002cea565b91505062000b5d565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d025760405162461bcd60e51b81526004016200055390620029de565b62000d188a8a8a8a8a8a8a8a8a8a600162001de8565b62000d298963ffffffff1662002073565b6000836001600160a01b03168387898560405160240162000d4d9392919062002d06565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d84919062002d41565b60006040518083038185875af1925050503d806000811462000dc3576040519150601f19603f3d011682016040523d82523d6000602084013e62000dc8565b606091505b505090508062000e345760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e8813595cdcd859d94819985a5b195960821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e6d95949392919062002d5f565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea35750600054600160ff909116105b8062000ebf5750303b15801562000ebf575060005460ff166001145b62000f245760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f48576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff1615620010075760405162461bcd60e51b81526004016200055390620029de565b6200101d8a8a8a8a8a8a8a8a8a8a600062001de8565b6200102e8963ffffffff1662002073565b6001600160a01b0385166200112557604080516000808252602082019092526001600160a01b03851690849060405162001069919062002d41565b60006040518083038185875af1925050503d8060008114620010a8576040519150601f19603f3d011682016040523d82523d6000602084013e620010ad565b606091505b50509050806200111e5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a20604482015274115d1a195c881d1c985b9cd9995c8819985a5b1959605a1b606482015260840162000553565b506200141c565b60225463ffffffff6101009091048116908716036200115a57620011546001600160a01b0386168484620020b5565b6200141c565b600086866040516020016200117192919062002c67565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013b457600080600085806020019051810190620011c3919062002d96565b925092509250600085848484604051620011dd9062002399565b620011eb9392919062002b60565b8190604051809103906000f59050801580156200120c573d6000803e3d6000fd5b506040516340c10f1960e01b81529091506001600160a01b038216906340c10f199062001240908c908c9060040162002a46565b600060405180830381600087803b1580156200125b57600080fd5b505af115801562001270573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013a29392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001419565b6040516340c10f1960e01b81526001600160a01b038216906340c10f1990620013e4908890889060040162002a46565b600060405180830381600087803b158015620013ff57600080fd5b505af115801562001414573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200145595949392919062002d5f565b60405180910390a150505050505050505050565b6000806200147a6101008462002cd3565b905060006200148c6101008562002e0b565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014c692919062002c67565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014f99062002399565b601f1982820381018352601f90910116604081905262001526908d908d908d908d908d9060200162002e4b565b60408051601f198184030181529082905262001546929160200162002e8c565b604051602081830303815290604052805190602001206040516020016200159f94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015eb5760405162461bcd60e51b81526004016200055390620029de565b60225463ffffffff610100909104811690841603620016735760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044657374696e6174696f6e2063616e6e6f7420626520697473656c6600606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016c798979695949392919062002b9d565b60405180910390a1620016fe620009506001602260019054906101000a900463ffffffff1633878734888051906020012062000c4f565b6026546001600160a01b03166333d6247d6200171962000a5b565b6040518263ffffffff1660e01b81526004016200173891815260200190565b600060405180830381600087803b1580156200175357600080fd5b505af115801562001768573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b031633146200179e5760405162461bcd60e51b8152600401620005539062002c0a565b62000a06620020d7565b6000620017eb83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200218692505050565b9050632afa533160e01b6001600160e01b0319821601620019e05760008080808080806200181d896004818d62002ebf565b8101906200182c919062002eeb565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200186e5760405162461bcd60e51b8152600401620005539062002f46565b6001600160a01b0386163014620018995760405162461bcd60e51b8152600401620005539062002fa3565b8a85146200190c5760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205065726044820152780dad2e840c2dadeeadce840c8decae640dcdee840dac2e8c6d603b1b606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200198c919062002d41565b6000604051808303816000865af19150503d8060008114620019cb576040519150601f19603f3d011682016040523d82523d6000602084013e620019d0565b606091505b5050505050505050505062001bc5565b6001600160e01b031981166323f2ebc360e21b1462001a565760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e6f7460448201526a081d985b1a590818d85b1b60aa1b606482015260840162000553565b60008080808080808062001a6e8a6004818e62002ebf565b81019062001a7d919062003005565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001ac15760405162461bcd60e51b8152600401620005539062002f46565b6001600160a01b038716301462001aec5760405162461bcd60e51b8152600401620005539062002fa3565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001b75919062002d41565b6000604051808303816000865af19150503d806000811462001bb4576040519150601f19603f3d011682016040523d82523d6000602084013e62001bb9565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdb9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526200218d565b80600162001c4a602060026200318e565b62001c5691906200319c565b6021541062001cbb5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d65726b6c65604482015269081d1c995948199d5b1b60b21b606482015260840162000553565b60016021600082825462001cd09190620031b6565b909155505060215460005b602081101562001d7a578160011660010362001d1057826001826020811062001d085762001d0862002c91565b015550505050565b6001816020811062001d265762001d2662002c91565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d63919062002cd3565b91508062001d718162002cea565b91505062001cdb565b5062001d85620031d1565b505050565b60225460ff161562001db05760405162461bcd60e51b81526004016200055390620029de565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001df98a63ffffffff1662001469565b1562001e505760405162461bcd60e51b815260206004820152603060248201526000805160206200477983398151915260448201526f08105b1c9958591e4818db185a5b595960821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ec4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001eea9190620031e7565b90508060000362001f4d5760405162461bcd60e51b81526020600482015260376024820152600080516020620047798339815191526044820152760811db1bd8985b115e1a5d149bdbdd081a5b9d985b1a59604a1b606482015260840162000553565b60225463ffffffff878116610100909204161462001fcf5760405162461bcd60e51b815260206004820152604360248201526000805160206200477983398151915260448201527f2044657374696e6174696f6e206e6574776f726b20646f6573206e6f74206d616064820152620e8c6d60eb1b608482015260a40162000553565b602254600090610100900463ffffffff1662001fed57508862001ff0565b50895b6200201b6200200c848b8b8b8b8b8b8051906020012062000c4f565b8e8e63ffffffff168462000b4e565b620009c05760405162461bcd60e51b81526020600482015260326024820152600080516020620047798339815191526044820152711024b73b30b634b21039b6ba10383937b7b360711b606482015260840162000553565b6000620020836101008362002cd3565b90506000620020956101008462002e0b565b6000928352602360205260409092208054600190931b9092179091555050565b62001d858363a9059cbb60e01b848460405160240162001c0192919062002a46565b60225460ff16620021515760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b6000620021e4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022669092919063ffffffff16565b80519091501562001d85578080602001905181019062002205919062003201565b62001d855760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c47848460008585600080866001600160a01b0316858760405162002290919062002d41565b60006040518083038185875af1925050503d8060008114620022cf576040519150601f19603f3d011682016040523d82523d6000602084013e620022d4565b606091505b5091509150620022e787838387620022f2565b979650505050505050565b60608315620023665782516000036200235e576001600160a01b0385163b6200235e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c47565b62000c4783838151156200237d5781518083602001fd5b8060405162461bcd60e51b815260040162000553919062003221565b611542806200323783390190565b6001600160a01b0381168114620023bd57600080fd5b50565b8035620023cd81620023a7565b919050565b803563ffffffff81168114620023cd57600080fd5b60008083601f840112620023fa57600080fd5b5081356001600160401b038111156200241257600080fd5b6020830191508360208285010111156200242b57600080fd5b9250929050565b60008060008060008060a087890312156200244c57600080fd5b86356200245981620023a7565b95506200246960208801620023d2565b945060408701356200247b81620023a7565b93506060870135925060808701356001600160401b038111156200249e57600080fd5b620024ac89828a01620023e7565b979a9699509497509295939492505050565b60008060408385031215620024d257600080fd5b620024dd83620023d2565b91506020830135620024ef81620023a7565b809150509250929050565b6000602082840312156200250d57600080fd5b81356200251a81620023a7565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171562002562576200256262002521565b604052919050565b600082601f8301126200257c57600080fd5b813560206001600160401b038211156200259a576200259a62002521565b8160051b620025ab82820162002537565b9283528481018201928281019087851115620025c657600080fd5b83870192505b84831015620022e757823582529183019190830190620025cc565b60008060008060808587031215620025fe57600080fd5b8435935060208501356001600160401b03808211156200261d57600080fd5b6200262b888389016200256a565b94506040870135915080821682146200264357600080fd5b509396929550929360600135925050565b60ff81168114620023bd57600080fd5b600080600080600080600060e0888a0312156200268057600080fd5b87356200268d8162002654565b96506200269d60208901620023d2565b95506040880135620026af81620023a7565b9450620026bf60608901620023d2565b93506080880135620026d181620023a7565b9699959850939692959460a0840135945060c09093013592915050565b60006001600160401b038211156200270a576200270a62002521565b50601f01601f191660200190565b600082601f8301126200272a57600080fd5b8135620027416200273b82620026ee565b62002537565b8181528460208386010111156200275757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200279557600080fd5b8a356001600160401b0380821115620027ad57600080fd5b620027bb8e838f016200256a565b9b50620027cb60208e01620023d2565b9a5060408d0135995060608d01359850620027e960808e01620023d2565b9750620027f960a08e01620023c0565b96506200280960c08e01620023d2565b95506200281960e08e01620023c0565b94506101008d013593506101208d01359150808211156200283957600080fd5b50620028488d828e0162002718565b9150509295989b9194979a5092959850565b6000806000606084860312156200287057600080fd5b6200287b84620023d2565b925060208401356200288d81620023a7565b915060408401356200289f81620023a7565b809150509250925092565b600060208284031215620028bd57600080fd5b5035919050565b600080600080600080600060a0888a031215620028e057600080fd5b620028eb88620023d2565b96506020880135620028fd81620023a7565b955060408801356001600160401b03808211156200291a57600080fd5b620029288b838c01620023e7565b909750955060608a01359150808211156200294257600080fd5b50620029518a828b01620023e7565b9094509250506080880135620029678162002654565b8091505092959891949750929550565b6000806000606084860312156200298d57600080fd5b6200299884620023d2565b92506020840135620029aa81620023a7565b915060408401356001600160401b03811115620029c657600080fd5b620029d48682870162002718565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b6001600160a01b03929092168252602082015260400190565b60005b8381101562002a7c57818101518382015260200162002a62565b8381111562000fdb5750506000910152565b600082601f83011262002aa057600080fd5b815162002ab16200273b82620026ee565b81815284602083860101111562002ac757600080fd5b62000c4782602083016020870162002a5f565b60006020828403121562002aed57600080fd5b81516001600160401b0381111562002b0457600080fd5b62000c478482850162002a8e565b60006020828403121562002b2557600080fd5b81516200251a8162002654565b6000815180845262002b4c81602086016020860162002a5f565b601f01601f19169290920160200192915050565b60608152600062002b75606083018662002b32565b828103602084015262002b89818662002b32565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002bf18483018762002b32565b925080851660e085015250509998505050505050505050565b6020808252603a908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e5a6b45564d20636f6e7472616374000000000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002ce55762002ce562002ca7565b500490565b60006001820162002cff5762002cff62002cbd565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d389083018462002b32565b95945050505050565b6000825162002d5581846020870162002a5f565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002dac57600080fd5b83516001600160401b038082111562002dc457600080fd5b62002dd28783880162002a8e565b9450602086015191508082111562002de957600080fd5b5062002df88682870162002a8e565b92505060408401516200289f8162002654565b60008262002e1d5762002e1d62002ca7565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e6160608301878962002e22565b828103602084015262002e7681868862002e22565b91505060ff831660408301529695505050505050565b6000835162002ea081846020880162002a5f565b83519083019062002eb681836020880162002a5f565b01949350505050565b6000808585111562002ed057600080fd5b8386111562002ede57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f0757600080fd5b873562002f1481620023a7565b9650602088013562002f2681620023a7565b955060408801359450606088013593506080880135620026d18162002654565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260408201527f6d6974206f776e6572206d757374206265207468652073656e64657200000000606082015260800190565b60208082526033908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205370656040820152726e646572206d7573742062652027746869732760681b606082015260800190565b8015158114620023bd57600080fd5b600080600080600080600080610100898b0312156200302357600080fd5b88356200303081620023a7565b975060208901356200304281620023a7565b965060408901359550606089013594506080890135620030628162002ff6565b935060a0890135620030748162002654565b979a969950949793969295929450505060c08201359160e0013590565b600181815b80851115620030d2578160001904821115620030b657620030b662002cbd565b80851615620030c457918102915b93841c939080029062003096565b509250929050565b600082620030eb5750600162000a55565b81620030fa5750600062000a55565b81600181146200311357600281146200311e576200313e565b600191505062000a55565b60ff84111562003132576200313262002cbd565b50506001821b62000a55565b5060208310610133831016604e8410600b841016171562003163575081810a62000a55565b6200316f838362003091565b806000190482111562003186576200318662002cbd565b029392505050565b60006200251a8383620030da565b600082821015620031b157620031b162002cbd565b500390565b60008219821115620031cc57620031cc62002cbd565b500190565b634e487b7160e01b600052600160045260246000fd5b600060208284031215620031fa57600080fd5b5051919050565b6000602082840312156200321457600080fd5b81516200251a8162002ff6565b6020815260006200251a602083018462002b3256fe60c06040523480156200001157600080fd5b5060405162001542380380620015428339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611088620004ba60003960006104690152600081816102f9015261043301526110886000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610dc2565b60405180910390f35b61016d610168366004610e33565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e5d565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e33565b61048b565b61023d610238366004610e33565b6104ad565b005b61018161024d366004610e99565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610e99565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e33565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e33565b610531565b61016d6102ef366004610e33565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ebb565b6105ba565b61018161033c366004610f2e565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f61565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f61565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b51565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fb1565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fc9565b60405180910390fd5b6104ea8282610bfd565b5050565b60606004805461037090610f61565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fc9565b6104ea8282610caa565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611019565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b0384811660008181526020818152604080832087870390559387168083529184902080548701905592518581529092600080516020611033833981519152910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b7c610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c535760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c659190610fb1565b90915550506001600160a01b03821660008181526020818152604080832080548601905551848152600080516020611033833981519152910160405180910390a35050565b6001600160a01b038216610d0a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610d7e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192916000805160206110338339815191529101610938565b600060208083528351808285015260005b81811015610def57858101830151858201604001528201610dd3565b81811115610e01576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e2e57600080fd5b919050565b60008060408385031215610e4657600080fd5b610e4f83610e17565b946020939093013593505050565b600080600060608486031215610e7257600080fd5b610e7b84610e17565b9250610e8960208501610e17565b9150604084013590509250925092565b600060208284031215610eab57600080fd5b610eb482610e17565b9392505050565b600080600080600080600060e0888a031215610ed657600080fd5b610edf88610e17565b9650610eed60208901610e17565b95506040880135945060608801359350608088013560ff81168114610f1157600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f4157600080fd5b610f4a83610e17565b9150610f5860208401610e17565b90509250929050565b600181811c90821680610f7557607f821691505b602082108103610f9557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610fc457610fc4610f9b565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161102b5761102b610f9b565b506001019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212208b7986f78e961ad6c0885b86b24ce427045be98073c1f3d7fe18180542ab873564736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220eea1ddf5dc0824087ba900f51470f81609d826beaa356befc3f38b861a0aa77864736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506147ce806100206000396000f3fe608060405260043610620001675760003560e01c80637b6323c111620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b80637b6323c1146200037057806381b1c17414620003955780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b806334ac9cf2116200011e57806334ac9cf214620002a25780633ae0504714620002c45780633da8168214620002dc5780633e1970431462000301578063463855491462000326578063647c576c146200034b57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002432565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009cf565b348015620001db57600080fd5b50620001f3620001ed366004620024be565b62000a08565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d62000252366004620024fa565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b50602754620001f3906001600160a01b031681565b348015620002d157600080fd5b506200022462000a5b565b348015620002e957600080fd5b50620001a1620002fb366004620025e7565b62000b4e565b3480156200030e57600080fd5b50620002246200032036600462002664565b62000c4f565b3480156200033357600080fd5b50620001836200034536600462002774565b62000cdc565b3480156200035857600080fd5b50620001836200036a3660046200285a565b62000e82565b3480156200037d57600080fd5b50620001836200038f36600462002774565b62000fe1565b348015620003a257600080fd5b50620001f3620003b4366004620028aa565b6024602052600090815260409020546001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028aa565b62001469565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d366004620028c4565b620014ae565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b036600462002977565b620015c5565b348015620004c357600080fd5b506200018362001771565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028aa565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b81526004016200055390620029de565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044657374696e6174696f6e2063616e6e6f7420626520697473656c66000000606482015260840162000553565b60008060606001600160a01b03891662000687578534146200067d5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a908201527f20416d6f756e7420646f6573206e6f74206d61746368206d6573736167652e76606482015263616c756560e01b608482015260a40162000553565b60009150620008e9565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074657604051632770a7eb60e21b81526001600160a01b038b1690639dc29fac90620006fe9033908b9060040162002a46565b600060405180830381600087803b1580156200071957600080fd5b505af11580156200072e573d6000803e3d6000fd5b505050508060200151935080600001519250620008e7565b84156200075b576200075b8a888888620017a8565b620007726001600160a01b038b1633308a62001bcc565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007c9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f3919081019062002ada565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000832573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085c919081019062002ada565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c1919062002b12565b604051602001620008d59392919062002b60565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092b98979695949392919062002b9d565b60405180910390a16200095662000950600084868c8c8c888051906020012062000c4f565b62001c39565b6026546001600160a01b03166333d6247d6200097162000a5b565b6040518263ffffffff1660e01b81526004016200099091815260200190565b600060405180830381600087803b158015620009ab57600080fd5b505af1158015620009c0573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009fc5760405162461bcd60e51b8152600401620005539062002c0a565b62000a0662001d8a565b565b600060246000848460405160200162000a2392919062002c67565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b45578260011660010362000ac6576001816020811062000a925762000a9262002c91565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af3565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0060028462002cd3565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3c9062002cea565b91505062000a66565b50919392505050565b6000846001600160401b038416825b602081101562000c40578160011660010362000bca5786818151811062000b885762000b8862002c91565b60200260200101518360405160200162000bac929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c1c565b8287828151811062000be05762000be062002c91565b602002602001015160405160200162000c03929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2960028362002cd3565b91508062000c378162002cea565b91505062000b5d565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d025760405162461bcd60e51b81526004016200055390620029de565b62000d188a8a8a8a8a8a8a8a8a8a600162001de8565b62000d298963ffffffff1662002073565b6000836001600160a01b03168387898560405160240162000d4d9392919062002d06565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d84919062002d41565b60006040518083038185875af1925050503d806000811462000dc3576040519150601f19603f3d011682016040523d82523d6000602084013e62000dc8565b606091505b505090508062000e345760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e8813595cdcd859d94819985a5b195960821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e6d95949392919062002d5f565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea35750600054600160ff909116105b8062000ebf5750303b15801562000ebf575060005460ff166001145b62000f245760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f48576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff1615620010075760405162461bcd60e51b81526004016200055390620029de565b6200101d8a8a8a8a8a8a8a8a8a8a600062001de8565b6200102e8963ffffffff1662002073565b6001600160a01b0385166200112557604080516000808252602082019092526001600160a01b03851690849060405162001069919062002d41565b60006040518083038185875af1925050503d8060008114620010a8576040519150601f19603f3d011682016040523d82523d6000602084013e620010ad565b606091505b50509050806200111e5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a20604482015274115d1a195c881d1c985b9cd9995c8819985a5b1959605a1b606482015260840162000553565b506200141c565b60225463ffffffff6101009091048116908716036200115a57620011546001600160a01b0386168484620020b5565b6200141c565b600086866040516020016200117192919062002c67565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013b457600080600085806020019051810190620011c3919062002d96565b925092509250600085848484604051620011dd9062002399565b620011eb9392919062002b60565b8190604051809103906000f59050801580156200120c573d6000803e3d6000fd5b506040516340c10f1960e01b81529091506001600160a01b038216906340c10f199062001240908c908c9060040162002a46565b600060405180830381600087803b1580156200125b57600080fd5b505af115801562001270573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013a29392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001419565b6040516340c10f1960e01b81526001600160a01b038216906340c10f1990620013e4908890889060040162002a46565b600060405180830381600087803b158015620013ff57600080fd5b505af115801562001414573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200145595949392919062002d5f565b60405180910390a150505050505050505050565b6000806200147a6101008462002cd3565b905060006200148c6101008562002e0b565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014c692919062002c67565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014f99062002399565b601f1982820381018352601f90910116604081905262001526908d908d908d908d908d9060200162002e4b565b60408051601f198184030181529082905262001546929160200162002e8c565b604051602081830303815290604052805190602001206040516020016200159f94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015eb5760405162461bcd60e51b81526004016200055390620029de565b60225463ffffffff610100909104811690841603620016735760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044657374696e6174696f6e2063616e6e6f7420626520697473656c6600606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016c798979695949392919062002b9d565b60405180910390a1620016fe620009506001602260019054906101000a900463ffffffff1633878734888051906020012062000c4f565b6026546001600160a01b03166333d6247d6200171962000a5b565b6040518263ffffffff1660e01b81526004016200173891815260200190565b600060405180830381600087803b1580156200175357600080fd5b505af115801562001768573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b031633146200179e5760405162461bcd60e51b8152600401620005539062002c0a565b62000a06620020d7565b6000620017eb83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200218692505050565b9050632afa533160e01b6001600160e01b0319821601620019e05760008080808080806200181d896004818d62002ebf565b8101906200182c919062002eeb565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200186e5760405162461bcd60e51b8152600401620005539062002f46565b6001600160a01b0386163014620018995760405162461bcd60e51b8152600401620005539062002fa3565b8a85146200190c5760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205065726044820152780dad2e840c2dadeeadce840c8decae640dcdee840dac2e8c6d603b1b606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200198c919062002d41565b6000604051808303816000865af19150503d8060008114620019cb576040519150601f19603f3d011682016040523d82523d6000602084013e620019d0565b606091505b5050505050505050505062001bc5565b6001600160e01b031981166323f2ebc360e21b1462001a565760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e6f7460448201526a081d985b1a590818d85b1b60aa1b606482015260840162000553565b60008080808080808062001a6e8a6004818e62002ebf565b81019062001a7d919062003005565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001ac15760405162461bcd60e51b8152600401620005539062002f46565b6001600160a01b038716301462001aec5760405162461bcd60e51b8152600401620005539062002fa3565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001b75919062002d41565b6000604051808303816000865af19150503d806000811462001bb4576040519150601f19603f3d011682016040523d82523d6000602084013e62001bb9565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdb9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526200218d565b80600162001c4a602060026200318e565b62001c5691906200319c565b6021541062001cbb5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d65726b6c65604482015269081d1c995948199d5b1b60b21b606482015260840162000553565b60016021600082825462001cd09190620031b6565b909155505060215460005b602081101562001d7a578160011660010362001d1057826001826020811062001d085762001d0862002c91565b015550505050565b6001816020811062001d265762001d2662002c91565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d63919062002cd3565b91508062001d718162002cea565b91505062001cdb565b5062001d85620031d1565b505050565b60225460ff161562001db05760405162461bcd60e51b81526004016200055390620029de565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001df98a63ffffffff1662001469565b1562001e505760405162461bcd60e51b815260206004820152603060248201526000805160206200477983398151915260448201526f08105b1c9958591e4818db185a5b595960821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ec4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001eea9190620031e7565b90508060000362001f4d5760405162461bcd60e51b81526020600482015260376024820152600080516020620047798339815191526044820152760811db1bd8985b115e1a5d149bdbdd081a5b9d985b1a59604a1b606482015260840162000553565b60225463ffffffff878116610100909204161462001fcf5760405162461bcd60e51b815260206004820152604360248201526000805160206200477983398151915260448201527f2044657374696e6174696f6e206e6574776f726b20646f6573206e6f74206d616064820152620e8c6d60eb1b608482015260a40162000553565b602254600090610100900463ffffffff1662001fed57508862001ff0565b50895b6200201b6200200c848b8b8b8b8b8b8051906020012062000c4f565b8e8e63ffffffff168462000b4e565b620009c05760405162461bcd60e51b81526020600482015260326024820152600080516020620047798339815191526044820152711024b73b30b634b21039b6ba10383937b7b360711b606482015260840162000553565b6000620020836101008362002cd3565b90506000620020956101008462002e0b565b6000928352602360205260409092208054600190931b9092179091555050565b62001d858363a9059cbb60e01b848460405160240162001c0192919062002a46565b60225460ff16620021515760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b6000620021e4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022669092919063ffffffff16565b80519091501562001d85578080602001905181019062002205919062003201565b62001d855760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c47848460008585600080866001600160a01b0316858760405162002290919062002d41565b60006040518083038185875af1925050503d8060008114620022cf576040519150601f19603f3d011682016040523d82523d6000602084013e620022d4565b606091505b5091509150620022e787838387620022f2565b979650505050505050565b60608315620023665782516000036200235e576001600160a01b0385163b6200235e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c47565b62000c4783838151156200237d5781518083602001fd5b8060405162461bcd60e51b815260040162000553919062003221565b611542806200323783390190565b6001600160a01b0381168114620023bd57600080fd5b50565b8035620023cd81620023a7565b919050565b803563ffffffff81168114620023cd57600080fd5b60008083601f840112620023fa57600080fd5b5081356001600160401b038111156200241257600080fd5b6020830191508360208285010111156200242b57600080fd5b9250929050565b60008060008060008060a087890312156200244c57600080fd5b86356200245981620023a7565b95506200246960208801620023d2565b945060408701356200247b81620023a7565b93506060870135925060808701356001600160401b038111156200249e57600080fd5b620024ac89828a01620023e7565b979a9699509497509295939492505050565b60008060408385031215620024d257600080fd5b620024dd83620023d2565b91506020830135620024ef81620023a7565b809150509250929050565b6000602082840312156200250d57600080fd5b81356200251a81620023a7565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171562002562576200256262002521565b604052919050565b600082601f8301126200257c57600080fd5b813560206001600160401b038211156200259a576200259a62002521565b8160051b620025ab82820162002537565b9283528481018201928281019087851115620025c657600080fd5b83870192505b84831015620022e757823582529183019190830190620025cc565b60008060008060808587031215620025fe57600080fd5b8435935060208501356001600160401b03808211156200261d57600080fd5b6200262b888389016200256a565b94506040870135915080821682146200264357600080fd5b509396929550929360600135925050565b60ff81168114620023bd57600080fd5b600080600080600080600060e0888a0312156200268057600080fd5b87356200268d8162002654565b96506200269d60208901620023d2565b95506040880135620026af81620023a7565b9450620026bf60608901620023d2565b93506080880135620026d181620023a7565b9699959850939692959460a0840135945060c09093013592915050565b60006001600160401b038211156200270a576200270a62002521565b50601f01601f191660200190565b600082601f8301126200272a57600080fd5b8135620027416200273b82620026ee565b62002537565b8181528460208386010111156200275757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200279557600080fd5b8a356001600160401b0380821115620027ad57600080fd5b620027bb8e838f016200256a565b9b50620027cb60208e01620023d2565b9a5060408d0135995060608d01359850620027e960808e01620023d2565b9750620027f960a08e01620023c0565b96506200280960c08e01620023d2565b95506200281960e08e01620023c0565b94506101008d013593506101208d01359150808211156200283957600080fd5b50620028488d828e0162002718565b9150509295989b9194979a5092959850565b6000806000606084860312156200287057600080fd5b6200287b84620023d2565b925060208401356200288d81620023a7565b915060408401356200289f81620023a7565b809150509250925092565b600060208284031215620028bd57600080fd5b5035919050565b600080600080600080600060a0888a031215620028e057600080fd5b620028eb88620023d2565b96506020880135620028fd81620023a7565b955060408801356001600160401b03808211156200291a57600080fd5b620029288b838c01620023e7565b909750955060608a01359150808211156200294257600080fd5b50620029518a828b01620023e7565b9094509250506080880135620029678162002654565b8091505092959891949750929550565b6000806000606084860312156200298d57600080fd5b6200299884620023d2565b92506020840135620029aa81620023a7565b915060408401356001600160401b03811115620029c657600080fd5b620029d48682870162002718565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b6001600160a01b03929092168252602082015260400190565b60005b8381101562002a7c57818101518382015260200162002a62565b8381111562000fdb5750506000910152565b600082601f83011262002aa057600080fd5b815162002ab16200273b82620026ee565b81815284602083860101111562002ac757600080fd5b62000c4782602083016020870162002a5f565b60006020828403121562002aed57600080fd5b81516001600160401b0381111562002b0457600080fd5b62000c478482850162002a8e565b60006020828403121562002b2557600080fd5b81516200251a8162002654565b6000815180845262002b4c81602086016020860162002a5f565b601f01601f19169290920160200192915050565b60608152600062002b75606083018662002b32565b828103602084015262002b89818662002b32565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002bf18483018762002b32565b925080851660e085015250509998505050505050505050565b6020808252603a908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e5a6b45564d20636f6e7472616374000000000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002ce55762002ce562002ca7565b500490565b60006001820162002cff5762002cff62002cbd565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d389083018462002b32565b95945050505050565b6000825162002d5581846020870162002a5f565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002dac57600080fd5b83516001600160401b038082111562002dc457600080fd5b62002dd28783880162002a8e565b9450602086015191508082111562002de957600080fd5b5062002df88682870162002a8e565b92505060408401516200289f8162002654565b60008262002e1d5762002e1d62002ca7565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e6160608301878962002e22565b828103602084015262002e7681868862002e22565b91505060ff831660408301529695505050505050565b6000835162002ea081846020880162002a5f565b83519083019062002eb681836020880162002a5f565b01949350505050565b6000808585111562002ed057600080fd5b8386111562002ede57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f0757600080fd5b873562002f1481620023a7565b9650602088013562002f2681620023a7565b955060408801359450606088013593506080880135620026d18162002654565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260408201527f6d6974206f776e6572206d757374206265207468652073656e64657200000000606082015260800190565b60208082526033908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205370656040820152726e646572206d7573742062652027746869732760681b606082015260800190565b8015158114620023bd57600080fd5b600080600080600080600080610100898b0312156200302357600080fd5b88356200303081620023a7565b975060208901356200304281620023a7565b965060408901359550606089013594506080890135620030628162002ff6565b935060a0890135620030748162002654565b979a969950949793969295929450505060c08201359160e0013590565b600181815b80851115620030d2578160001904821115620030b657620030b662002cbd565b80851615620030c457918102915b93841c939080029062003096565b509250929050565b600082620030eb5750600162000a55565b81620030fa5750600062000a55565b81600181146200311357600281146200311e576200313e565b600191505062000a55565b60ff84111562003132576200313262002cbd565b50506001821b62000a55565b5060208310610133831016604e8410600b841016171562003163575081810a62000a55565b6200316f838362003091565b806000190482111562003186576200318662002cbd565b029392505050565b60006200251a8383620030da565b600082821015620031b157620031b162002cbd565b500390565b60008219821115620031cc57620031cc62002cbd565b500190565b634e487b7160e01b600052600160045260246000fd5b600060208284031215620031fa57600080fd5b5051919050565b6000602082840312156200321457600080fd5b81516200251a8162002ff6565b6020815260006200251a602083018462002b3256fe60c06040523480156200001157600080fd5b5060405162001542380380620015428339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611088620004ba60003960006104690152600081816102f9015261043301526110886000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610dc2565b60405180910390f35b61016d610168366004610e33565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e5d565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e33565b61048b565b61023d610238366004610e33565b6104ad565b005b61018161024d366004610e99565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610e99565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e33565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e33565b610531565b61016d6102ef366004610e33565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ebb565b6105ba565b61018161033c366004610f2e565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f61565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f61565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b51565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fb1565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fc9565b60405180910390fd5b6104ea8282610bfd565b5050565b60606004805461037090610f61565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fc9565b6104ea8282610caa565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611019565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b0384811660008181526020818152604080832087870390559387168083529184902080548701905592518581529092600080516020611033833981519152910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b7c610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c535760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c659190610fb1565b90915550506001600160a01b03821660008181526020818152604080832080548601905551848152600080516020611033833981519152910160405180910390a35050565b6001600160a01b038216610d0a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610d7e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192916000805160206110338339815191529101610938565b600060208083528351808285015260005b81811015610def57858101830151858201604001528201610dd3565b81811115610e01576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e2e57600080fd5b919050565b60008060408385031215610e4657600080fd5b610e4f83610e17565b946020939093013593505050565b600080600060608486031215610e7257600080fd5b610e7b84610e17565b9250610e8960208501610e17565b9150604084013590509250925092565b600060208284031215610eab57600080fd5b610eb482610e17565b9392505050565b600080600080600080600060e0888a031215610ed657600080fd5b610edf88610e17565b9650610eed60208901610e17565b95506040880135945060608801359350608088013560ff81168114610f1157600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f4157600080fd5b610f4a83610e17565b9150610f5860208401610e17565b90509250929050565b600181811c90821680610f7557607f821691505b602082108103610f9557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610fc457610fc4610f9b565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161102b5761102b610f9b565b506001019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212208b7986f78e961ad6c0885b86b24ce427045be98073c1f3d7fe18180542ab873564736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220aedd107f83550cf398987fb5d0ec8eb115ccee52962ef2bb52eb7ef1520f6c7264736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001675760003560e01c80637b6323c111620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b80637b6323c1146200037057806381b1c17414620003955780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b806334ac9cf2116200011e57806334ac9cf214620002a25780633ae0504714620002c45780633da8168214620002dc5780633e1970431462000301578063463855491462000326578063647c576c146200034b57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002432565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009cf565b348015620001db57600080fd5b50620001f3620001ed366004620024be565b62000a08565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d62000252366004620024fa565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b50602754620001f3906001600160a01b031681565b348015620002d157600080fd5b506200022462000a5b565b348015620002e957600080fd5b50620001a1620002fb366004620025e7565b62000b4e565b3480156200030e57600080fd5b50620002246200032036600462002664565b62000c4f565b3480156200033357600080fd5b50620001836200034536600462002774565b62000cdc565b3480156200035857600080fd5b50620001836200036a3660046200285a565b62000e82565b3480156200037d57600080fd5b50620001836200038f36600462002774565b62000fe1565b348015620003a257600080fd5b50620001f3620003b4366004620028aa565b6024602052600090815260409020546001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028aa565b62001469565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d366004620028c4565b620014ae565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b036600462002977565b620015c5565b348015620004c357600080fd5b506200018362001771565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028aa565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b81526004016200055390620029de565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044657374696e6174696f6e2063616e6e6f7420626520697473656c66000000606482015260840162000553565b60008060606001600160a01b03891662000687578534146200067d5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a908201527f20416d6f756e7420646f6573206e6f74206d61746368206d6573736167652e76606482015263616c756560e01b608482015260a40162000553565b60009150620008e9565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074657604051632770a7eb60e21b81526001600160a01b038b1690639dc29fac90620006fe9033908b9060040162002a46565b600060405180830381600087803b1580156200071957600080fd5b505af11580156200072e573d6000803e3d6000fd5b505050508060200151935080600001519250620008e7565b84156200075b576200075b8a888888620017a8565b620007726001600160a01b038b1633308a62001bcc565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007c9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f3919081019062002ada565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000832573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085c919081019062002ada565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c1919062002b12565b604051602001620008d59392919062002b60565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092b98979695949392919062002b9d565b60405180910390a16200095662000950600084868c8c8c888051906020012062000c4f565b62001c39565b6026546001600160a01b03166333d6247d6200097162000a5b565b6040518263ffffffff1660e01b81526004016200099091815260200190565b600060405180830381600087803b158015620009ab57600080fd5b505af1158015620009c0573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009fc5760405162461bcd60e51b8152600401620005539062002c0a565b62000a0662001d8a565b565b600060246000848460405160200162000a2392919062002c67565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b45578260011660010362000ac6576001816020811062000a925762000a9262002c91565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af3565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0060028462002cd3565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3c9062002cea565b91505062000a66565b50919392505050565b6000846001600160401b038416825b602081101562000c40578160011660010362000bca5786818151811062000b885762000b8862002c91565b60200260200101518360405160200162000bac929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c1c565b8287828151811062000be05762000be062002c91565b602002602001015160405160200162000c03929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2960028362002cd3565b91508062000c378162002cea565b91505062000b5d565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d025760405162461bcd60e51b81526004016200055390620029de565b62000d188a8a8a8a8a8a8a8a8a8a600162001de8565b62000d298963ffffffff1662002073565b6000836001600160a01b03168387898560405160240162000d4d9392919062002d06565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d84919062002d41565b60006040518083038185875af1925050503d806000811462000dc3576040519150601f19603f3d011682016040523d82523d6000602084013e62000dc8565b606091505b505090508062000e345760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e8813595cdcd859d94819985a5b195960821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e6d95949392919062002d5f565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea35750600054600160ff909116105b8062000ebf5750303b15801562000ebf575060005460ff166001145b62000f245760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f48576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff1615620010075760405162461bcd60e51b81526004016200055390620029de565b6200101d8a8a8a8a8a8a8a8a8a8a600062001de8565b6200102e8963ffffffff1662002073565b6001600160a01b0385166200112557604080516000808252602082019092526001600160a01b03851690849060405162001069919062002d41565b60006040518083038185875af1925050503d8060008114620010a8576040519150601f19603f3d011682016040523d82523d6000602084013e620010ad565b606091505b50509050806200111e5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a20604482015274115d1a195c881d1c985b9cd9995c8819985a5b1959605a1b606482015260840162000553565b506200141c565b60225463ffffffff6101009091048116908716036200115a57620011546001600160a01b0386168484620020b5565b6200141c565b600086866040516020016200117192919062002c67565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013b457600080600085806020019051810190620011c3919062002d96565b925092509250600085848484604051620011dd9062002399565b620011eb9392919062002b60565b8190604051809103906000f59050801580156200120c573d6000803e3d6000fd5b506040516340c10f1960e01b81529091506001600160a01b038216906340c10f199062001240908c908c9060040162002a46565b600060405180830381600087803b1580156200125b57600080fd5b505af115801562001270573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013a29392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001419565b6040516340c10f1960e01b81526001600160a01b038216906340c10f1990620013e4908890889060040162002a46565b600060405180830381600087803b158015620013ff57600080fd5b505af115801562001414573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200145595949392919062002d5f565b60405180910390a150505050505050505050565b6000806200147a6101008462002cd3565b905060006200148c6101008562002e0b565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014c692919062002c67565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014f99062002399565b601f1982820381018352601f90910116604081905262001526908d908d908d908d908d9060200162002e4b565b60408051601f198184030181529082905262001546929160200162002e8c565b604051602081830303815290604052805190602001206040516020016200159f94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015eb5760405162461bcd60e51b81526004016200055390620029de565b60225463ffffffff610100909104811690841603620016735760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044657374696e6174696f6e2063616e6e6f7420626520697473656c6600606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016c798979695949392919062002b9d565b60405180910390a1620016fe620009506001602260019054906101000a900463ffffffff1633878734888051906020012062000c4f565b6026546001600160a01b03166333d6247d6200171962000a5b565b6040518263ffffffff1660e01b81526004016200173891815260200190565b600060405180830381600087803b1580156200175357600080fd5b505af115801562001768573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b031633146200179e5760405162461bcd60e51b8152600401620005539062002c0a565b62000a06620020d7565b6000620017eb83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200218692505050565b9050632afa533160e01b6001600160e01b0319821601620019e05760008080808080806200181d896004818d62002ebf565b8101906200182c919062002eeb565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200186e5760405162461bcd60e51b8152600401620005539062002f46565b6001600160a01b0386163014620018995760405162461bcd60e51b8152600401620005539062002fa3565b8a85146200190c5760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205065726044820152780dad2e840c2dadeeadce840c8decae640dcdee840dac2e8c6d603b1b606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200198c919062002d41565b6000604051808303816000865af19150503d8060008114620019cb576040519150601f19603f3d011682016040523d82523d6000602084013e620019d0565b606091505b5050505050505050505062001bc5565b6001600160e01b031981166323f2ebc360e21b1462001a565760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e6f7460448201526a081d985b1a590818d85b1b60aa1b606482015260840162000553565b60008080808080808062001a6e8a6004818e62002ebf565b81019062001a7d919062003005565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001ac15760405162461bcd60e51b8152600401620005539062002f46565b6001600160a01b038716301462001aec5760405162461bcd60e51b8152600401620005539062002fa3565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001b75919062002d41565b6000604051808303816000865af19150503d806000811462001bb4576040519150601f19603f3d011682016040523d82523d6000602084013e62001bb9565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdb9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526200218d565b80600162001c4a602060026200318e565b62001c5691906200319c565b6021541062001cbb5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d65726b6c65604482015269081d1c995948199d5b1b60b21b606482015260840162000553565b60016021600082825462001cd09190620031b6565b909155505060215460005b602081101562001d7a578160011660010362001d1057826001826020811062001d085762001d0862002c91565b015550505050565b6001816020811062001d265762001d2662002c91565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d63919062002cd3565b91508062001d718162002cea565b91505062001cdb565b5062001d85620031d1565b505050565b60225460ff161562001db05760405162461bcd60e51b81526004016200055390620029de565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001df98a63ffffffff1662001469565b1562001e505760405162461bcd60e51b815260206004820152603060248201526000805160206200477983398151915260448201526f08105b1c9958591e4818db185a5b595960821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ec4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001eea9190620031e7565b90508060000362001f4d5760405162461bcd60e51b81526020600482015260376024820152600080516020620047798339815191526044820152760811db1bd8985b115e1a5d149bdbdd081a5b9d985b1a59604a1b606482015260840162000553565b60225463ffffffff878116610100909204161462001fcf5760405162461bcd60e51b815260206004820152604360248201526000805160206200477983398151915260448201527f2044657374696e6174696f6e206e6574776f726b20646f6573206e6f74206d616064820152620e8c6d60eb1b608482015260a40162000553565b602254600090610100900463ffffffff1662001fed57508862001ff0565b50895b6200201b6200200c848b8b8b8b8b8b8051906020012062000c4f565b8e8e63ffffffff168462000b4e565b620009c05760405162461bcd60e51b81526020600482015260326024820152600080516020620047798339815191526044820152711024b73b30b634b21039b6ba10383937b7b360711b606482015260840162000553565b6000620020836101008362002cd3565b90506000620020956101008462002e0b565b6000928352602360205260409092208054600190931b9092179091555050565b62001d858363a9059cbb60e01b848460405160240162001c0192919062002a46565b60225460ff16620021515760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b6000620021e4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022669092919063ffffffff16565b80519091501562001d85578080602001905181019062002205919062003201565b62001d855760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c47848460008585600080866001600160a01b0316858760405162002290919062002d41565b60006040518083038185875af1925050503d8060008114620022cf576040519150601f19603f3d011682016040523d82523d6000602084013e620022d4565b606091505b5091509150620022e787838387620022f2565b979650505050505050565b60608315620023665782516000036200235e576001600160a01b0385163b6200235e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c47565b62000c4783838151156200237d5781518083602001fd5b8060405162461bcd60e51b815260040162000553919062003221565b611542806200323783390190565b6001600160a01b0381168114620023bd57600080fd5b50565b8035620023cd81620023a7565b919050565b803563ffffffff81168114620023cd57600080fd5b60008083601f840112620023fa57600080fd5b5081356001600160401b038111156200241257600080fd5b6020830191508360208285010111156200242b57600080fd5b9250929050565b60008060008060008060a087890312156200244c57600080fd5b86356200245981620023a7565b95506200246960208801620023d2565b945060408701356200247b81620023a7565b93506060870135925060808701356001600160401b038111156200249e57600080fd5b620024ac89828a01620023e7565b979a9699509497509295939492505050565b60008060408385031215620024d257600080fd5b620024dd83620023d2565b91506020830135620024ef81620023a7565b809150509250929050565b6000602082840312156200250d57600080fd5b81356200251a81620023a7565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171562002562576200256262002521565b604052919050565b600082601f8301126200257c57600080fd5b813560206001600160401b038211156200259a576200259a62002521565b8160051b620025ab82820162002537565b9283528481018201928281019087851115620025c657600080fd5b83870192505b84831015620022e757823582529183019190830190620025cc565b60008060008060808587031215620025fe57600080fd5b8435935060208501356001600160401b03808211156200261d57600080fd5b6200262b888389016200256a565b94506040870135915080821682146200264357600080fd5b509396929550929360600135925050565b60ff81168114620023bd57600080fd5b600080600080600080600060e0888a0312156200268057600080fd5b87356200268d8162002654565b96506200269d60208901620023d2565b95506040880135620026af81620023a7565b9450620026bf60608901620023d2565b93506080880135620026d181620023a7565b9699959850939692959460a0840135945060c09093013592915050565b60006001600160401b038211156200270a576200270a62002521565b50601f01601f191660200190565b600082601f8301126200272a57600080fd5b8135620027416200273b82620026ee565b62002537565b8181528460208386010111156200275757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200279557600080fd5b8a356001600160401b0380821115620027ad57600080fd5b620027bb8e838f016200256a565b9b50620027cb60208e01620023d2565b9a5060408d0135995060608d01359850620027e960808e01620023d2565b9750620027f960a08e01620023c0565b96506200280960c08e01620023d2565b95506200281960e08e01620023c0565b94506101008d013593506101208d01359150808211156200283957600080fd5b50620028488d828e0162002718565b9150509295989b9194979a5092959850565b6000806000606084860312156200287057600080fd5b6200287b84620023d2565b925060208401356200288d81620023a7565b915060408401356200289f81620023a7565b809150509250925092565b600060208284031215620028bd57600080fd5b5035919050565b600080600080600080600060a0888a031215620028e057600080fd5b620028eb88620023d2565b96506020880135620028fd81620023a7565b955060408801356001600160401b03808211156200291a57600080fd5b620029288b838c01620023e7565b909750955060608a01359150808211156200294257600080fd5b50620029518a828b01620023e7565b9094509250506080880135620029678162002654565b8091505092959891949750929550565b6000806000606084860312156200298d57600080fd5b6200299884620023d2565b92506020840135620029aa81620023a7565b915060408401356001600160401b03811115620029c657600080fd5b620029d48682870162002718565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b6001600160a01b03929092168252602082015260400190565b60005b8381101562002a7c57818101518382015260200162002a62565b8381111562000fdb5750506000910152565b600082601f83011262002aa057600080fd5b815162002ab16200273b82620026ee565b81815284602083860101111562002ac757600080fd5b62000c4782602083016020870162002a5f565b60006020828403121562002aed57600080fd5b81516001600160401b0381111562002b0457600080fd5b62000c478482850162002a8e565b60006020828403121562002b2557600080fd5b81516200251a8162002654565b6000815180845262002b4c81602086016020860162002a5f565b601f01601f19169290920160200192915050565b60608152600062002b75606083018662002b32565b828103602084015262002b89818662002b32565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002bf18483018762002b32565b925080851660e085015250509998505050505050505050565b6020808252603a908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e5a6b45564d20636f6e7472616374000000000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002ce55762002ce562002ca7565b500490565b60006001820162002cff5762002cff62002cbd565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d389083018462002b32565b95945050505050565b6000825162002d5581846020870162002a5f565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002dac57600080fd5b83516001600160401b038082111562002dc457600080fd5b62002dd28783880162002a8e565b9450602086015191508082111562002de957600080fd5b5062002df88682870162002a8e565b92505060408401516200289f8162002654565b60008262002e1d5762002e1d62002ca7565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e6160608301878962002e22565b828103602084015262002e7681868862002e22565b91505060ff831660408301529695505050505050565b6000835162002ea081846020880162002a5f565b83519083019062002eb681836020880162002a5f565b01949350505050565b6000808585111562002ed057600080fd5b8386111562002ede57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f0757600080fd5b873562002f1481620023a7565b9650602088013562002f2681620023a7565b955060408801359450606088013593506080880135620026d18162002654565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260408201527f6d6974206f776e6572206d757374206265207468652073656e64657200000000606082015260800190565b60208082526033908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205370656040820152726e646572206d7573742062652027746869732760681b606082015260800190565b8015158114620023bd57600080fd5b600080600080600080600080610100898b0312156200302357600080fd5b88356200303081620023a7565b975060208901356200304281620023a7565b965060408901359550606089013594506080890135620030628162002ff6565b935060a0890135620030748162002654565b979a969950949793969295929450505060c08201359160e0013590565b600181815b80851115620030d2578160001904821115620030b657620030b662002cbd565b80851615620030c457918102915b93841c939080029062003096565b509250929050565b600082620030eb5750600162000a55565b81620030fa5750600062000a55565b81600181146200311357600281146200311e576200313e565b600191505062000a55565b60ff84111562003132576200313262002cbd565b50506001821b62000a55565b5060208310610133831016604e8410600b841016171562003163575081810a62000a55565b6200316f838362003091565b806000190482111562003186576200318662002cbd565b029392505050565b60006200251a8383620030da565b600082821015620031b157620031b162002cbd565b500390565b60008219821115620031cc57620031cc62002cbd565b500190565b634e487b7160e01b600052600160045260246000fd5b600060208284031215620031fa57600080fd5b5051919050565b6000602082840312156200321457600080fd5b81516200251a8162002ff6565b6020815260006200251a602083018462002b3256fe60c06040523480156200001157600080fd5b5060405162001542380380620015428339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611088620004ba60003960006104690152600081816102f9015261043301526110886000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610dc2565b60405180910390f35b61016d610168366004610e33565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e5d565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e33565b61048b565b61023d610238366004610e33565b6104ad565b005b61018161024d366004610e99565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610e99565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e33565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e33565b610531565b61016d6102ef366004610e33565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ebb565b6105ba565b61018161033c366004610f2e565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f61565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f61565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b51565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fb1565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fc9565b60405180910390fd5b6104ea8282610bfd565b5050565b60606004805461037090610f61565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fc9565b6104ea8282610caa565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611019565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b0384811660008181526020818152604080832087870390559387168083529184902080548701905592518581529092600080516020611033833981519152910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b7c610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c535760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c659190610fb1565b90915550506001600160a01b03821660008181526020818152604080832080548601905551848152600080516020611033833981519152910160405180910390a35050565b6001600160a01b038216610d0a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610d7e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192916000805160206110338339815191529101610938565b600060208083528351808285015260005b81811015610def57858101830151858201604001528201610dd3565b81811115610e01576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e2e57600080fd5b919050565b60008060408385031215610e4657600080fd5b610e4f83610e17565b946020939093013593505050565b600080600060608486031215610e7257600080fd5b610e7b84610e17565b9250610e8960208501610e17565b9150604084013590509250925092565b600060208284031215610eab57600080fd5b610eb482610e17565b9392505050565b600080600080600080600060e0888a031215610ed657600080fd5b610edf88610e17565b9650610eed60208901610e17565b95506040880135945060608801359350608088013560ff81168114610f1157600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f4157600080fd5b610f4a83610e17565b9150610f5860208401610e17565b90509250929050565b600181811c90821680610f7557607f821691505b602082108103610f9557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610fc457610fc4610f9b565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161102b5761102b610f9b565b506001019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212208b7986f78e961ad6c0885b86b24ce427045be98073c1f3d7fe18180542ab873564736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220aedd107f83550cf398987fb5d0ec8eb115ccee52962ef2bb52eb7ef1520f6c7264736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZkEVMBridgeMock.json b/compiled-contracts/PolygonZkEVMBridgeMock.json index dd3b57b2d..f82a3f47c 100644 --- a/compiled-contracts/PolygonZkEVMBridgeMock.json +++ b/compiled-contracts/PolygonZkEVMBridgeMock.json @@ -790,8 +790,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50614b86806100206000396000f3fe608060405260043610620001af5760003560e01c80637b6323c111620000e9578063bab161bf1162000090578063bab161bf1462000525578063d02103ca146200055f578063d96a15f71462000581578063dbc169761462000598578063ed6be5c914620005b0578063ee25560b14620005c7578063f2fde38b14620005f8578063ff634ed7146200061d57600080fd5b80637b6323c1146200041a57806381b1c174146200043f5780638da5cb5b146200047957806391e57e2d14620004995780639e34070f14620004b1578063a08e8a0814620004d6578063aaa13cc2146200050057600080fd5b8063318aee3d116200015a578063318aee3d14620002c557806334ac9cf214620003345780633ae0504714620003565780633da81682146200036e5780633e19704314620003935780634638554914620003b8578063647c576c14620003dd578063715018a6146200040257600080fd5b80630871e97114620001b457806315064c9614620001cd5780632072f6c514620001fe57806322e95f2c14620002165780632b5e42e714620002545780632c3f58cd14620002795780632dfdf0b5146200029e575b600080fd5b620001cb620001c5366004620027ac565b62000634565b005b348015620001da57600080fd5b50602254620001e99060ff1681565b60405190151581526020015b60405180910390f35b3480156200020b57600080fd5b50620001cb620006c9565b3480156200022357600080fd5b506200023b6200023536600462002838565b62000702565b6040516001600160a01b039091168152602001620001f5565b3480156200026157600080fd5b50620001cb6200027336600462002874565b62000755565b3480156200028657600080fd5b50620001cb620002983660046200288e565b62000764565b348015620002ab57600080fd5b50620002b660215481565b604051908152602001620001f5565b348015620002d257600080fd5b506200030f620002e4366004620028b3565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001f5565b3480156200034157600080fd5b506027546200023b906001600160a01b031681565b3480156200036357600080fd5b50620002b662000790565b3480156200037b57600080fd5b50620001e96200038d36600462002999565b62000883565b348015620003a057600080fd5b50620002b6620003b236600462002a16565b62000984565b348015620003c557600080fd5b50620001cb620003d736600462002b26565b62000a11565b348015620003ea57600080fd5b50620001cb620003fc36600462002c0c565b62000bb7565b3480156200040f57600080fd5b50620001cb62000d2c565b3480156200042757600080fd5b50620001cb6200043936600462002b26565b62000d42565b3480156200044c57600080fd5b506200023b6200045e36600462002874565b6024602052600090815260409020546001600160a01b031681565b3480156200048657600080fd5b50605a546001600160a01b03166200023b565b348015620004a657600080fd5b50620002b6608c5481565b348015620004be57600080fd5b50620001e9620004d036600462002874565b620011ca565b348015620004e357600080fd5b50620004ed600081565b60405160ff9091168152602001620001f5565b3480156200050d57600080fd5b506200023b6200051f36600462002c5c565b6200120f565b3480156200053257600080fd5b506022546200054990610100900463ffffffff1681565b60405163ffffffff9091168152602001620001f5565b3480156200056c57600080fd5b506026546200023b906001600160a01b031681565b620001cb6200059236600462002d0f565b62001326565b348015620005a557600080fd5b50620001cb620014d8565b348015620005bd57600080fd5b5062000549600081565b348015620005d457600080fd5b50620002b6620005e636600462002874565b60236020526000908152604090205481565b3480156200060557600080fd5b50620001cb62000617366004620028b3565b6200150f565b3480156200062a57600080fd5b50620004ed600181565b608c54341115620006b15760405162461bcd60e51b8152602060048201526047602482015260008051602062004b3183398151915260448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b620006c18686868686866200158e565b505050505050565b6027546001600160a01b03163314620006f65760405162461bcd60e51b8152600401620006a89062002d76565b62000700620019ff565b565b60006024600084846040516020016200071d92919062002dd3565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b6200075f62001a5d565b608c55565b6200076e62001a5d565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b60208110156200087a5782600116600103620007fb5760018160208110620007c757620007c762002dfd565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000828565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200083560028462002e3f565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008719062002e56565b9150506200079b565b50919392505050565b6000846001600160401b038416825b6020811015620009755781600116600103620008ff57868181518110620008bd57620008bd62002dfd565b602002602001015183604051602001620008e1929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000951565b8287828151811062000915576200091562002dfd565b602002602001015160405160200162000938929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b6200095e60028362002e3f565b9150806200096c8162002e56565b91505062000892565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a375760405162461bcd60e51b8152600401620006a89062002e72565b62000a4d8a8a8a8a8a8a8a8a8a8a600162001ab9565b62000a5e8963ffffffff1662001d44565b6000836001600160a01b03168387898560405160240162000a829392919062002f37565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000ab9919062002f72565b60006040518083038185875af1925050503d806000811462000af8576040519150601f19603f3d011682016040523d82523d6000602084013e62000afd565b606091505b505090508062000b695760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e8813595cdcd859d94819985a5b195960821b6064820152608401620006a8565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000ba295949392919062002f90565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000bd85750600054600160ff909116105b8062000bf45750303b15801562000bf4575060005460ff166001145b62000c595760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006a8565b6000805460ff19166001179055801562000c7d576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000cdf62001d86565b801562000d26576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d3662001a5d565b62000700600062001df9565b60225460ff161562000d685760405162461bcd60e51b8152600401620006a89062002e72565b62000d7e8a8a8a8a8a8a8a8a8a8a600062001ab9565b62000d8f8963ffffffff1662001d44565b6001600160a01b03851662000e8657604080516000808252602082019092526001600160a01b03851690849060405162000dca919062002f72565b60006040518083038185875af1925050503d806000811462000e09576040519150601f19603f3d011682016040523d82523d6000602084013e62000e0e565b606091505b505090508062000e7f5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a20604482015274115d1a195c881d1c985b9cd9995c8819985a5b1959605a1b6064820152608401620006a8565b506200117d565b60225463ffffffff61010090910481169087160362000ebb5762000eb56001600160a01b038616848462001e4b565b6200117d565b6000868660405160200162000ed292919062002dd3565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620011155760008060008580602001905181019062000f24919062003013565b92509250925060008584848460405162000f3e9062002716565b62000f4c9392919062003088565b8190604051809103906000f590508015801562000f6d573d6000803e3d6000fd5b506040516340c10f1960e01b81529091506001600160a01b038216906340c10f199062000fa1908c908c90600401620030c5565b600060405180830381600087803b15801562000fbc57600080fd5b505af115801562000fd1573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620011039392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200117a565b6040516340c10f1960e01b81526001600160a01b038216906340c10f1990620011459088908890600401620030c5565b600060405180830381600087803b1580156200116057600080fd5b505af115801562001175573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838987878686604051620011b695949392919062002f90565b60405180910390a150505050505050505050565b600080620011db6101008462002e3f565b90506000620011ed61010085620030de565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200122792919062002dd3565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200125a9062002716565b601f1982820381018352601f90910116604081905262001287908d908d908d908d908d906020016200311e565b60408051601f1981840301815290829052620012a792916020016200315f565b604051602081830303815290604052805190602001206040516020016200130094939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff16156200134c5760405162461bcd60e51b8152600401620006a89062002e72565b60225463ffffffff610100909104811690841603620013d45760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044657374696e6174696f6e2063616e6e6f7420626520697473656c66006064820152608401620006a8565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff1633868634876021546040516200142898979695949392919062003192565b60405180910390a1620014656200145f6001602260019054906101000a900463ffffffff1633878734888051906020012062000984565b62001eaa565b6026546001600160a01b03166333d6247d6200148062000790565b6040518263ffffffff1660e01b81526004016200149f91815260200190565b600060405180830381600087803b158015620014ba57600080fd5b505af1158015620014cf573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015055760405162461bcd60e51b8152600401620006a89062002d76565b6200070062001ff6565b6200151962001a5d565b6001600160a01b038116620015805760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006a8565b6200158b8162001df9565b50565b60225460ff1615620015b45760405162461bcd60e51b8152600401620006a89062002e72565b60225463ffffffff6101009091048116908616036200162b5760405162461bcd60e51b815260206004820152603d602482015260008051602062004b3183398151915260448201527f2044657374696e6174696f6e2063616e6e6f7420626520697473656c660000006064820152608401620006a8565b60008060606001600160a01b038916620016bd57853414620016b35760405162461bcd60e51b81526020600482015260446024820181905260008051602062004b31833981519152908201527f20416d6f756e7420646f6573206e6f74206d61746368206d6573736167652e76606482015263616c756560e01b608482015260a401620006a8565b600091506200191f565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200177c57604051632770a7eb60e21b81526001600160a01b038b1690639dc29fac90620017349033908b90600401620030c5565b600060405180830381600087803b1580156200174f57600080fd5b505af115801562001764573d6000803e3d6000fd5b5050505080602001519350806000015192506200191d565b84156200179157620017918a888888620020a5565b620017a86001600160a01b038b1633308a620024c9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620017ff573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018299190810190620031ff565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001868573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018929190810190620031ff565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620018d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018f7919062003237565b6040516020016200190b9392919062003088565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200196198979695949392919062003192565b60405180910390a1620019866200145f600084868c8c8c888051906020012062000984565b6026546001600160a01b03166333d6247d620019a162000790565b6040518263ffffffff1660e01b8152600401620019c091815260200190565b600060405180830381600087803b158015620019db57600080fd5b505af1158015620019f0573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001a255760405162461bcd60e51b8152600401620006a89062002e72565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006a8565b62001aca8a63ffffffff16620011ca565b1562001b215760405162461bcd60e51b8152602060048201526030602482015260008051602062004b1183398151915260448201526f08105b1c9958591e4818db185a5b595960821b6064820152608401620006a8565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001b95573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001bbb919062003257565b90508060000362001c1e5760405162461bcd60e51b8152602060048201526037602482015260008051602062004b118339815191526044820152760811db1bd8985b115e1a5d149bdbdd081a5b9d985b1a59604a1b6064820152608401620006a8565b60225463ffffffff878116610100909204161462001ca05760405162461bcd60e51b8152602060048201526043602482015260008051602062004b1183398151915260448201527f2044657374696e6174696f6e206e6574776f726b20646f6573206e6f74206d616064820152620e8c6d60eb1b608482015260a401620006a8565b602254600090610100900463ffffffff1662001cbe57508862001cc1565b50895b62001cec62001cdd848b8b8b8b8b8b8051906020012062000984565b8e8e63ffffffff168462000883565b620019f05760405162461bcd60e51b8152602060048201526032602482015260008051602062004b118339815191526044820152711024b73b30b634b21039b6ba10383937b7b360711b6064820152608401620006a8565b600062001d546101008362002e3f565b9050600062001d6661010084620030de565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001df35760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006a8565b62000700335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62001ea58363a9059cbb60e01b848460405160240162001e6d929190620030c5565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262002503565b505050565b80600162001ebb602060026200336e565b62001ec791906200337c565b6021541062001f2c5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d65726b6c65604482015269081d1c995948199d5b1b60b21b6064820152608401620006a8565b60016021600082825462001f41919062003396565b909155505060215460005b602081101562001feb578160011660010362001f8157826001826020811062001f795762001f7962002dfd565b015550505050565b6001816020811062001f975762001f9762002dfd565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001fd4919062002e3f565b91508062001fe28162002e56565b91505062001f4c565b5062001ea5620033b1565b60225460ff16620020705760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006a8565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000620020e883838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620025dc92505050565b9050632afa533160e01b6001600160e01b0319821601620022dd5760008080808080806200211a896004818d620033c7565b810190620021299190620033f3565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200216b5760405162461bcd60e51b8152600401620006a8906200344e565b6001600160a01b0386163014620021965760405162461bcd60e51b8152600401620006a890620034ab565b8a8514620022095760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205065726044820152780dad2e840c2dadeeadce840c8decae640dcdee840dac2e8c6d603b1b6064820152608401620006a8565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162002289919062002f72565b6000604051808303816000865af19150503d8060008114620022c8576040519150601f19603f3d011682016040523d82523d6000602084013e620022cd565b606091505b50505050505050505050620024c2565b6001600160e01b031981166323f2ebc360e21b14620023535760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e6f7460448201526a081d985b1a590818d85b1b60aa1b6064820152608401620006a8565b6000808080808080806200236b8a6004818e620033c7565b8101906200237a91906200350d565b97509750975097509750975097509750336001600160a01b0316886001600160a01b031614620023be5760405162461bcd60e51b8152600401620006a8906200344e565b6001600160a01b0387163014620023e95760405162461bcd60e51b8152600401620006a890620034ab565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162002472919062002f72565b6000604051808303816000865af19150503d8060008114620024b1576040519150601f19603f3d011682016040523d82523d6000602084013e620024b6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d269085906323b872dd60e01b9060840162001e6d565b60006200255a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620025e39092919063ffffffff16565b80519091501562001ea557808060200190518101906200257b919062003599565b62001ea55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006a8565b6020015190565b60606200097c848460008585600080866001600160a01b031685876040516200260d919062002f72565b60006040518083038185875af1925050503d80600081146200264c576040519150601f19603f3d011682016040523d82523d6000602084013e62002651565b606091505b509150915062002664878383876200266f565b979650505050505050565b60608315620026e3578251600003620026db576001600160a01b0385163b620026db5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006a8565b50816200097c565b6200097c8383815115620026fa5781518083602001fd5b8060405162461bcd60e51b8152600401620006a89190620035b9565b61154280620035cf83390190565b6001600160a01b03811681146200158b57600080fd5b8035620027478162002724565b919050565b803563ffffffff811681146200274757600080fd5b60008083601f8401126200277457600080fd5b5081356001600160401b038111156200278c57600080fd5b602083019150836020828501011115620027a557600080fd5b9250929050565b60008060008060008060a08789031215620027c657600080fd5b8635620027d38162002724565b9550620027e3602088016200274c565b94506040870135620027f58162002724565b93506060870135925060808701356001600160401b038111156200281857600080fd5b6200282689828a0162002761565b979a9699509497509295939492505050565b600080604083850312156200284c57600080fd5b62002857836200274c565b91506020830135620028698162002724565b809150509250929050565b6000602082840312156200288757600080fd5b5035919050565b600060208284031215620028a157600080fd5b620028ac826200274c565b9392505050565b600060208284031215620028c657600080fd5b8135620028ac8162002724565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620029145762002914620028d3565b604052919050565b600082601f8301126200292e57600080fd5b813560206001600160401b038211156200294c576200294c620028d3565b8160051b6200295d828201620028e9565b92835284810182019282810190878511156200297857600080fd5b83870192505b8483101562002664578235825291830191908301906200297e565b60008060008060808587031215620029b057600080fd5b8435935060208501356001600160401b0380821115620029cf57600080fd5b620029dd888389016200291c565b9450604087013591508082168214620029f557600080fd5b509396929550929360600135925050565b60ff811681146200158b57600080fd5b600080600080600080600060e0888a03121562002a3257600080fd5b873562002a3f8162002a06565b965062002a4f602089016200274c565b9550604088013562002a618162002724565b945062002a71606089016200274c565b9350608088013562002a838162002724565b9699959850939692959460a0840135945060c09093013592915050565b60006001600160401b0382111562002abc5762002abc620028d3565b50601f01601f191660200190565b600082601f83011262002adc57600080fd5b813562002af362002aed8262002aa0565b620028e9565b81815284602083860101111562002b0957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002b4757600080fd5b8a356001600160401b038082111562002b5f57600080fd5b62002b6d8e838f016200291c565b9b5062002b7d60208e016200274c565b9a5060408d0135995060608d0135985062002b9b60808e016200274c565b975062002bab60a08e016200273a565b965062002bbb60c08e016200274c565b955062002bcb60e08e016200273a565b94506101008d013593506101208d013591508082111562002beb57600080fd5b5062002bfa8d828e0162002aca565b9150509295989b9194979a5092959850565b60008060006060848603121562002c2257600080fd5b62002c2d846200274c565b9250602084013562002c3f8162002724565b9150604084013562002c518162002724565b809150509250925092565b600080600080600080600060a0888a03121562002c7857600080fd5b62002c83886200274c565b9650602088013562002c958162002724565b955060408801356001600160401b038082111562002cb257600080fd5b62002cc08b838c0162002761565b909750955060608a013591508082111562002cda57600080fd5b5062002ce98a828b0162002761565b909450925050608088013562002cff8162002a06565b8091505092959891949750929550565b60008060006060848603121562002d2557600080fd5b62002d30846200274c565b9250602084013562002d428162002724565b915060408401356001600160401b0381111562002d5e57600080fd5b62002d6c8682870162002aca565b9150509250925092565b6020808252603a908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e5a6b45564d20636f6e7472616374000000000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002e515762002e5162002e13565b500490565b60006001820162002e6b5762002e6b62002e29565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002ef757818101518382015260200162002edd565b8381111562000d265750506000910152565b6000815180845262002f2381602086016020860162002eda565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002f699083018462002f09565b95945050505050565b6000825162002f8681846020870162002eda565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f83011262002fd957600080fd5b815162002fea62002aed8262002aa0565b8181528460208386010111156200300057600080fd5b6200097c82602083016020870162002eda565b6000806000606084860312156200302957600080fd5b83516001600160401b03808211156200304157600080fd5b6200304f8783880162002fc7565b945060208601519150808211156200306657600080fd5b50620030758682870162002fc7565b925050604084015162002c518162002a06565b6060815260006200309d606083018662002f09565b8281036020840152620030b1818662002f09565b91505060ff83166040830152949350505050565b6001600160a01b03929092168252602082015260400190565b600082620030f057620030f062002e13565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003134606083018789620030f5565b828103602084015262003149818688620030f5565b91505060ff831660408301529695505050505050565b600083516200317381846020880162002eda565b8351908301906200318981836020880162002eda565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620031e68483018762002f09565b925080851660e085015250509998505050505050505050565b6000602082840312156200321257600080fd5b81516001600160401b038111156200322957600080fd5b6200097c8482850162002fc7565b6000602082840312156200324a57600080fd5b8151620028ac8162002a06565b6000602082840312156200326a57600080fd5b5051919050565b600181815b80851115620032b257816000190482111562003296576200329662002e29565b80851615620032a457918102915b93841c939080029062003276565b509250929050565b600082620032cb575060016200074f565b81620032da575060006200074f565b8160018114620032f35760028114620032fe576200331e565b60019150506200074f565b60ff84111562003312576200331262002e29565b50506001821b6200074f565b5060208310610133831016604e8410600b841016171562003343575081810a6200074f565b6200334f838362003271565b806000190482111562003366576200336662002e29565b029392505050565b6000620028ac8383620032ba565b60008282101562003391576200339162002e29565b500390565b60008219821115620033ac57620033ac62002e29565b500190565b634e487b7160e01b600052600160045260246000fd5b60008085851115620033d857600080fd5b83861115620033e657600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200340f57600080fd5b87356200341c8162002724565b965060208801356200342e8162002724565b95506040880135945060608801359350608088013562002a838162002a06565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260408201527f6d6974206f776e6572206d757374206265207468652073656e64657200000000606082015260800190565b60208082526033908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205370656040820152726e646572206d7573742062652027746869732760681b606082015260800190565b80151581146200158b57600080fd5b600080600080600080600080610100898b0312156200352b57600080fd5b8835620035388162002724565b975060208901356200354a8162002724565b9650604089013595506060890135945060808901356200356a81620034fe565b935060a08901356200357c8162002a06565b979a969950949793969295929450505060c08201359160e0013590565b600060208284031215620035ac57600080fd5b8151620028ac81620034fe565b602081526000620028ac602083018462002f0956fe60c06040523480156200001157600080fd5b5060405162001542380380620015428339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611088620004ba60003960006104690152600081816102f9015261043301526110886000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610dc2565b60405180910390f35b61016d610168366004610e33565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e5d565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e33565b61048b565b61023d610238366004610e33565b6104ad565b005b61018161024d366004610e99565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610e99565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e33565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e33565b610531565b61016d6102ef366004610e33565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ebb565b6105ba565b61018161033c366004610f2e565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f61565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f61565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b51565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fb1565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fc9565b60405180910390fd5b6104ea8282610bfd565b5050565b60606004805461037090610f61565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fc9565b6104ea8282610caa565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611019565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b0384811660008181526020818152604080832087870390559387168083529184902080548701905592518581529092600080516020611033833981519152910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b7c610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c535760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c659190610fb1565b90915550506001600160a01b03821660008181526020818152604080832080548601905551848152600080516020611033833981519152910160405180910390a35050565b6001600160a01b038216610d0a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610d7e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192916000805160206110338339815191529101610938565b600060208083528351808285015260005b81811015610def57858101830151858201604001528201610dd3565b81811115610e01576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e2e57600080fd5b919050565b60008060408385031215610e4657600080fd5b610e4f83610e17565b946020939093013593505050565b600080600060608486031215610e7257600080fd5b610e7b84610e17565b9250610e8960208501610e17565b9150604084013590509250925092565b600060208284031215610eab57600080fd5b610eb482610e17565b9392505050565b600080600080600080600060e0888a031215610ed657600080fd5b610edf88610e17565b9650610eed60208901610e17565b95506040880135945060608801359350608088013560ff81168114610f1157600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f4157600080fd5b610f4a83610e17565b9150610f5860208401610e17565b90509250929050565b600181811c90821680610f7557607f821691505b602082108103610f9557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610fc457610fc4610f9b565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161102b5761102b610f9b565b506001019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212208b7986f78e961ad6c0885b86b24ce427045be98073c1f3d7fe18180542ab873564736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663a506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743aa2646970667358221220ecb7262d75ccffae87c8f9592b4c43f1b3962aa76dd0a08fcce5ea516303ef9864736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001af5760003560e01c80637b6323c111620000e9578063bab161bf1162000090578063bab161bf1462000525578063d02103ca146200055f578063d96a15f71462000581578063dbc169761462000598578063ed6be5c914620005b0578063ee25560b14620005c7578063f2fde38b14620005f8578063ff634ed7146200061d57600080fd5b80637b6323c1146200041a57806381b1c174146200043f5780638da5cb5b146200047957806391e57e2d14620004995780639e34070f14620004b1578063a08e8a0814620004d6578063aaa13cc2146200050057600080fd5b8063318aee3d116200015a578063318aee3d14620002c557806334ac9cf214620003345780633ae0504714620003565780633da81682146200036e5780633e19704314620003935780634638554914620003b8578063647c576c14620003dd578063715018a6146200040257600080fd5b80630871e97114620001b457806315064c9614620001cd5780632072f6c514620001fe57806322e95f2c14620002165780632b5e42e714620002545780632c3f58cd14620002795780632dfdf0b5146200029e575b600080fd5b620001cb620001c5366004620027ac565b62000634565b005b348015620001da57600080fd5b50602254620001e99060ff1681565b60405190151581526020015b60405180910390f35b3480156200020b57600080fd5b50620001cb620006c9565b3480156200022357600080fd5b506200023b6200023536600462002838565b62000702565b6040516001600160a01b039091168152602001620001f5565b3480156200026157600080fd5b50620001cb6200027336600462002874565b62000755565b3480156200028657600080fd5b50620001cb620002983660046200288e565b62000764565b348015620002ab57600080fd5b50620002b660215481565b604051908152602001620001f5565b348015620002d257600080fd5b506200030f620002e4366004620028b3565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001f5565b3480156200034157600080fd5b506027546200023b906001600160a01b031681565b3480156200036357600080fd5b50620002b662000790565b3480156200037b57600080fd5b50620001e96200038d36600462002999565b62000883565b348015620003a057600080fd5b50620002b6620003b236600462002a16565b62000984565b348015620003c557600080fd5b50620001cb620003d736600462002b26565b62000a11565b348015620003ea57600080fd5b50620001cb620003fc36600462002c0c565b62000bb7565b3480156200040f57600080fd5b50620001cb62000d2c565b3480156200042757600080fd5b50620001cb6200043936600462002b26565b62000d42565b3480156200044c57600080fd5b506200023b6200045e36600462002874565b6024602052600090815260409020546001600160a01b031681565b3480156200048657600080fd5b50605a546001600160a01b03166200023b565b348015620004a657600080fd5b50620002b6608c5481565b348015620004be57600080fd5b50620001e9620004d036600462002874565b620011ca565b348015620004e357600080fd5b50620004ed600081565b60405160ff9091168152602001620001f5565b3480156200050d57600080fd5b506200023b6200051f36600462002c5c565b6200120f565b3480156200053257600080fd5b506022546200054990610100900463ffffffff1681565b60405163ffffffff9091168152602001620001f5565b3480156200056c57600080fd5b506026546200023b906001600160a01b031681565b620001cb6200059236600462002d0f565b62001326565b348015620005a557600080fd5b50620001cb620014d8565b348015620005bd57600080fd5b5062000549600081565b348015620005d457600080fd5b50620002b6620005e636600462002874565b60236020526000908152604090205481565b3480156200060557600080fd5b50620001cb62000617366004620028b3565b6200150f565b3480156200062a57600080fd5b50620004ed600181565b608c54341115620006b15760405162461bcd60e51b8152602060048201526047602482015260008051602062004b3183398151915260448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b620006c18686868686866200158e565b505050505050565b6027546001600160a01b03163314620006f65760405162461bcd60e51b8152600401620006a89062002d76565b62000700620019ff565b565b60006024600084846040516020016200071d92919062002dd3565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b6200075f62001a5d565b608c55565b6200076e62001a5d565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b60208110156200087a5782600116600103620007fb5760018160208110620007c757620007c762002dfd565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000828565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200083560028462002e3f565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008719062002e56565b9150506200079b565b50919392505050565b6000846001600160401b038416825b6020811015620009755781600116600103620008ff57868181518110620008bd57620008bd62002dfd565b602002602001015183604051602001620008e1929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000951565b8287828151811062000915576200091562002dfd565b602002602001015160405160200162000938929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b6200095e60028362002e3f565b9150806200096c8162002e56565b91505062000892565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a375760405162461bcd60e51b8152600401620006a89062002e72565b62000a4d8a8a8a8a8a8a8a8a8a8a600162001ab9565b62000a5e8963ffffffff1662001d44565b6000836001600160a01b03168387898560405160240162000a829392919062002f37565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000ab9919062002f72565b60006040518083038185875af1925050503d806000811462000af8576040519150601f19603f3d011682016040523d82523d6000602084013e62000afd565b606091505b505090508062000b695760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e8813595cdcd859d94819985a5b195960821b6064820152608401620006a8565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000ba295949392919062002f90565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000bd85750600054600160ff909116105b8062000bf45750303b15801562000bf4575060005460ff166001145b62000c595760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006a8565b6000805460ff19166001179055801562000c7d576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000cdf62001d86565b801562000d26576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d3662001a5d565b62000700600062001df9565b60225460ff161562000d685760405162461bcd60e51b8152600401620006a89062002e72565b62000d7e8a8a8a8a8a8a8a8a8a8a600062001ab9565b62000d8f8963ffffffff1662001d44565b6001600160a01b03851662000e8657604080516000808252602082019092526001600160a01b03851690849060405162000dca919062002f72565b60006040518083038185875af1925050503d806000811462000e09576040519150601f19603f3d011682016040523d82523d6000602084013e62000e0e565b606091505b505090508062000e7f5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a20604482015274115d1a195c881d1c985b9cd9995c8819985a5b1959605a1b6064820152608401620006a8565b506200117d565b60225463ffffffff61010090910481169087160362000ebb5762000eb56001600160a01b038616848462001e4b565b6200117d565b6000868660405160200162000ed292919062002dd3565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620011155760008060008580602001905181019062000f24919062003013565b92509250925060008584848460405162000f3e9062002716565b62000f4c9392919062003088565b8190604051809103906000f590508015801562000f6d573d6000803e3d6000fd5b506040516340c10f1960e01b81529091506001600160a01b038216906340c10f199062000fa1908c908c90600401620030c5565b600060405180830381600087803b15801562000fbc57600080fd5b505af115801562000fd1573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620011039392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200117a565b6040516340c10f1960e01b81526001600160a01b038216906340c10f1990620011459088908890600401620030c5565b600060405180830381600087803b1580156200116057600080fd5b505af115801562001175573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838987878686604051620011b695949392919062002f90565b60405180910390a150505050505050505050565b600080620011db6101008462002e3f565b90506000620011ed61010085620030de565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200122792919062002dd3565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200125a9062002716565b601f1982820381018352601f90910116604081905262001287908d908d908d908d908d906020016200311e565b60408051601f1981840301815290829052620012a792916020016200315f565b604051602081830303815290604052805190602001206040516020016200130094939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff16156200134c5760405162461bcd60e51b8152600401620006a89062002e72565b60225463ffffffff610100909104811690841603620013d45760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044657374696e6174696f6e2063616e6e6f7420626520697473656c66006064820152608401620006a8565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff1633868634876021546040516200142898979695949392919062003192565b60405180910390a1620014656200145f6001602260019054906101000a900463ffffffff1633878734888051906020012062000984565b62001eaa565b6026546001600160a01b03166333d6247d6200148062000790565b6040518263ffffffff1660e01b81526004016200149f91815260200190565b600060405180830381600087803b158015620014ba57600080fd5b505af1158015620014cf573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015055760405162461bcd60e51b8152600401620006a89062002d76565b6200070062001ff6565b6200151962001a5d565b6001600160a01b038116620015805760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006a8565b6200158b8162001df9565b50565b60225460ff1615620015b45760405162461bcd60e51b8152600401620006a89062002e72565b60225463ffffffff6101009091048116908616036200162b5760405162461bcd60e51b815260206004820152603d602482015260008051602062004b3183398151915260448201527f2044657374696e6174696f6e2063616e6e6f7420626520697473656c660000006064820152608401620006a8565b60008060606001600160a01b038916620016bd57853414620016b35760405162461bcd60e51b81526020600482015260446024820181905260008051602062004b31833981519152908201527f20416d6f756e7420646f6573206e6f74206d61746368206d6573736167652e76606482015263616c756560e01b608482015260a401620006a8565b600091506200191f565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200177c57604051632770a7eb60e21b81526001600160a01b038b1690639dc29fac90620017349033908b90600401620030c5565b600060405180830381600087803b1580156200174f57600080fd5b505af115801562001764573d6000803e3d6000fd5b5050505080602001519350806000015192506200191d565b84156200179157620017918a888888620020a5565b620017a86001600160a01b038b1633308a620024c9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620017ff573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018299190810190620031ff565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001868573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018929190810190620031ff565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620018d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018f7919062003237565b6040516020016200190b9392919062003088565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200196198979695949392919062003192565b60405180910390a1620019866200145f600084868c8c8c888051906020012062000984565b6026546001600160a01b03166333d6247d620019a162000790565b6040518263ffffffff1660e01b8152600401620019c091815260200190565b600060405180830381600087803b158015620019db57600080fd5b505af1158015620019f0573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001a255760405162461bcd60e51b8152600401620006a89062002e72565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006a8565b62001aca8a63ffffffff16620011ca565b1562001b215760405162461bcd60e51b8152602060048201526030602482015260008051602062004b1183398151915260448201526f08105b1c9958591e4818db185a5b595960821b6064820152608401620006a8565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001b95573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001bbb919062003257565b90508060000362001c1e5760405162461bcd60e51b8152602060048201526037602482015260008051602062004b118339815191526044820152760811db1bd8985b115e1a5d149bdbdd081a5b9d985b1a59604a1b6064820152608401620006a8565b60225463ffffffff878116610100909204161462001ca05760405162461bcd60e51b8152602060048201526043602482015260008051602062004b1183398151915260448201527f2044657374696e6174696f6e206e6574776f726b20646f6573206e6f74206d616064820152620e8c6d60eb1b608482015260a401620006a8565b602254600090610100900463ffffffff1662001cbe57508862001cc1565b50895b62001cec62001cdd848b8b8b8b8b8b8051906020012062000984565b8e8e63ffffffff168462000883565b620019f05760405162461bcd60e51b8152602060048201526032602482015260008051602062004b118339815191526044820152711024b73b30b634b21039b6ba10383937b7b360711b6064820152608401620006a8565b600062001d546101008362002e3f565b9050600062001d6661010084620030de565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001df35760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006a8565b62000700335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62001ea58363a9059cbb60e01b848460405160240162001e6d929190620030c5565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262002503565b505050565b80600162001ebb602060026200336e565b62001ec791906200337c565b6021541062001f2c5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d65726b6c65604482015269081d1c995948199d5b1b60b21b6064820152608401620006a8565b60016021600082825462001f41919062003396565b909155505060215460005b602081101562001feb578160011660010362001f8157826001826020811062001f795762001f7962002dfd565b015550505050565b6001816020811062001f975762001f9762002dfd565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001fd4919062002e3f565b91508062001fe28162002e56565b91505062001f4c565b5062001ea5620033b1565b60225460ff16620020705760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006a8565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000620020e883838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620025dc92505050565b9050632afa533160e01b6001600160e01b0319821601620022dd5760008080808080806200211a896004818d620033c7565b810190620021299190620033f3565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200216b5760405162461bcd60e51b8152600401620006a8906200344e565b6001600160a01b0386163014620021965760405162461bcd60e51b8152600401620006a890620034ab565b8a8514620022095760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205065726044820152780dad2e840c2dadeeadce840c8decae640dcdee840dac2e8c6d603b1b6064820152608401620006a8565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162002289919062002f72565b6000604051808303816000865af19150503d8060008114620022c8576040519150601f19603f3d011682016040523d82523d6000602084013e620022cd565b606091505b50505050505050505050620024c2565b6001600160e01b031981166323f2ebc360e21b14620023535760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e6f7460448201526a081d985b1a590818d85b1b60aa1b6064820152608401620006a8565b6000808080808080806200236b8a6004818e620033c7565b8101906200237a91906200350d565b97509750975097509750975097509750336001600160a01b0316886001600160a01b031614620023be5760405162461bcd60e51b8152600401620006a8906200344e565b6001600160a01b0387163014620023e95760405162461bcd60e51b8152600401620006a890620034ab565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162002472919062002f72565b6000604051808303816000865af19150503d8060008114620024b1576040519150601f19603f3d011682016040523d82523d6000602084013e620024b6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d269085906323b872dd60e01b9060840162001e6d565b60006200255a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620025e39092919063ffffffff16565b80519091501562001ea557808060200190518101906200257b919062003599565b62001ea55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006a8565b6020015190565b60606200097c848460008585600080866001600160a01b031685876040516200260d919062002f72565b60006040518083038185875af1925050503d80600081146200264c576040519150601f19603f3d011682016040523d82523d6000602084013e62002651565b606091505b509150915062002664878383876200266f565b979650505050505050565b60608315620026e3578251600003620026db576001600160a01b0385163b620026db5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006a8565b50816200097c565b6200097c8383815115620026fa5781518083602001fd5b8060405162461bcd60e51b8152600401620006a89190620035b9565b61154280620035cf83390190565b6001600160a01b03811681146200158b57600080fd5b8035620027478162002724565b919050565b803563ffffffff811681146200274757600080fd5b60008083601f8401126200277457600080fd5b5081356001600160401b038111156200278c57600080fd5b602083019150836020828501011115620027a557600080fd5b9250929050565b60008060008060008060a08789031215620027c657600080fd5b8635620027d38162002724565b9550620027e3602088016200274c565b94506040870135620027f58162002724565b93506060870135925060808701356001600160401b038111156200281857600080fd5b6200282689828a0162002761565b979a9699509497509295939492505050565b600080604083850312156200284c57600080fd5b62002857836200274c565b91506020830135620028698162002724565b809150509250929050565b6000602082840312156200288757600080fd5b5035919050565b600060208284031215620028a157600080fd5b620028ac826200274c565b9392505050565b600060208284031215620028c657600080fd5b8135620028ac8162002724565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620029145762002914620028d3565b604052919050565b600082601f8301126200292e57600080fd5b813560206001600160401b038211156200294c576200294c620028d3565b8160051b6200295d828201620028e9565b92835284810182019282810190878511156200297857600080fd5b83870192505b8483101562002664578235825291830191908301906200297e565b60008060008060808587031215620029b057600080fd5b8435935060208501356001600160401b0380821115620029cf57600080fd5b620029dd888389016200291c565b9450604087013591508082168214620029f557600080fd5b509396929550929360600135925050565b60ff811681146200158b57600080fd5b600080600080600080600060e0888a03121562002a3257600080fd5b873562002a3f8162002a06565b965062002a4f602089016200274c565b9550604088013562002a618162002724565b945062002a71606089016200274c565b9350608088013562002a838162002724565b9699959850939692959460a0840135945060c09093013592915050565b60006001600160401b0382111562002abc5762002abc620028d3565b50601f01601f191660200190565b600082601f83011262002adc57600080fd5b813562002af362002aed8262002aa0565b620028e9565b81815284602083860101111562002b0957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002b4757600080fd5b8a356001600160401b038082111562002b5f57600080fd5b62002b6d8e838f016200291c565b9b5062002b7d60208e016200274c565b9a5060408d0135995060608d0135985062002b9b60808e016200274c565b975062002bab60a08e016200273a565b965062002bbb60c08e016200274c565b955062002bcb60e08e016200273a565b94506101008d013593506101208d013591508082111562002beb57600080fd5b5062002bfa8d828e0162002aca565b9150509295989b9194979a5092959850565b60008060006060848603121562002c2257600080fd5b62002c2d846200274c565b9250602084013562002c3f8162002724565b9150604084013562002c518162002724565b809150509250925092565b600080600080600080600060a0888a03121562002c7857600080fd5b62002c83886200274c565b9650602088013562002c958162002724565b955060408801356001600160401b038082111562002cb257600080fd5b62002cc08b838c0162002761565b909750955060608a013591508082111562002cda57600080fd5b5062002ce98a828b0162002761565b909450925050608088013562002cff8162002a06565b8091505092959891949750929550565b60008060006060848603121562002d2557600080fd5b62002d30846200274c565b9250602084013562002d428162002724565b915060408401356001600160401b0381111562002d5e57600080fd5b62002d6c8682870162002aca565b9150509250925092565b6020808252603a908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e5a6b45564d20636f6e7472616374000000000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002e515762002e5162002e13565b500490565b60006001820162002e6b5762002e6b62002e29565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002ef757818101518382015260200162002edd565b8381111562000d265750506000910152565b6000815180845262002f2381602086016020860162002eda565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002f699083018462002f09565b95945050505050565b6000825162002f8681846020870162002eda565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f83011262002fd957600080fd5b815162002fea62002aed8262002aa0565b8181528460208386010111156200300057600080fd5b6200097c82602083016020870162002eda565b6000806000606084860312156200302957600080fd5b83516001600160401b03808211156200304157600080fd5b6200304f8783880162002fc7565b945060208601519150808211156200306657600080fd5b50620030758682870162002fc7565b925050604084015162002c518162002a06565b6060815260006200309d606083018662002f09565b8281036020840152620030b1818662002f09565b91505060ff83166040830152949350505050565b6001600160a01b03929092168252602082015260400190565b600082620030f057620030f062002e13565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003134606083018789620030f5565b828103602084015262003149818688620030f5565b91505060ff831660408301529695505050505050565b600083516200317381846020880162002eda565b8351908301906200318981836020880162002eda565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620031e68483018762002f09565b925080851660e085015250509998505050505050505050565b6000602082840312156200321257600080fd5b81516001600160401b038111156200322957600080fd5b6200097c8482850162002fc7565b6000602082840312156200324a57600080fd5b8151620028ac8162002a06565b6000602082840312156200326a57600080fd5b5051919050565b600181815b80851115620032b257816000190482111562003296576200329662002e29565b80851615620032a457918102915b93841c939080029062003276565b509250929050565b600082620032cb575060016200074f565b81620032da575060006200074f565b8160018114620032f35760028114620032fe576200331e565b60019150506200074f565b60ff84111562003312576200331262002e29565b50506001821b6200074f565b5060208310610133831016604e8410600b841016171562003343575081810a6200074f565b6200334f838362003271565b806000190482111562003366576200336662002e29565b029392505050565b6000620028ac8383620032ba565b60008282101562003391576200339162002e29565b500390565b60008219821115620033ac57620033ac62002e29565b500190565b634e487b7160e01b600052600160045260246000fd5b60008085851115620033d857600080fd5b83861115620033e657600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200340f57600080fd5b87356200341c8162002724565b965060208801356200342e8162002724565b95506040880135945060608801359350608088013562002a838162002a06565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260408201527f6d6974206f776e6572206d757374206265207468652073656e64657200000000606082015260800190565b60208082526033908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205370656040820152726e646572206d7573742062652027746869732760681b606082015260800190565b80151581146200158b57600080fd5b600080600080600080600080610100898b0312156200352b57600080fd5b8835620035388162002724565b975060208901356200354a8162002724565b9650604089013595506060890135945060808901356200356a81620034fe565b935060a08901356200357c8162002a06565b979a969950949793969295929450505060c08201359160e0013590565b600060208284031215620035ac57600080fd5b8151620028ac81620034fe565b602081526000620028ac602083018462002f0956fe60c06040523480156200001157600080fd5b5060405162001542380380620015428339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611088620004ba60003960006104690152600081816102f9015261043301526110886000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610dc2565b60405180910390f35b61016d610168366004610e33565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e5d565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e33565b61048b565b61023d610238366004610e33565b6104ad565b005b61018161024d366004610e99565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610e99565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e33565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e33565b610531565b61016d6102ef366004610e33565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ebb565b6105ba565b61018161033c366004610f2e565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f61565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f61565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b51565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fb1565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fc9565b60405180910390fd5b6104ea8282610bfd565b5050565b60606004805461037090610f61565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fc9565b6104ea8282610caa565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611019565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b0384811660008181526020818152604080832087870390559387168083529184902080548701905592518581529092600080516020611033833981519152910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b7c610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c535760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c659190610fb1565b90915550506001600160a01b03821660008181526020818152604080832080548601905551848152600080516020611033833981519152910160405180910390a35050565b6001600160a01b038216610d0a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610d7e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192916000805160206110338339815191529101610938565b600060208083528351808285015260005b81811015610def57858101830151858201604001528201610dd3565b81811115610e01576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e2e57600080fd5b919050565b60008060408385031215610e4657600080fd5b610e4f83610e17565b946020939093013593505050565b600080600060608486031215610e7257600080fd5b610e7b84610e17565b9250610e8960208501610e17565b9150604084013590509250925092565b600060208284031215610eab57600080fd5b610eb482610e17565b9392505050565b600080600080600080600060e0888a031215610ed657600080fd5b610edf88610e17565b9650610eed60208901610e17565b95506040880135945060608801359350608088013560ff81168114610f1157600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f4157600080fd5b610f4a83610e17565b9150610f5860208401610e17565b90509250929050565b600181811c90821680610f7557607f821691505b602082108103610f9557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610fc457610fc4610f9b565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161102b5761102b610f9b565b506001019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212208b7986f78e961ad6c0885b86b24ce427045be98073c1f3d7fe18180542ab873564736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663a506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743aa2646970667358221220ecb7262d75ccffae87c8f9592b4c43f1b3962aa76dd0a08fcce5ea516303ef9864736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50614b86806100206000396000f3fe608060405260043610620001af5760003560e01c80637b6323c111620000e9578063bab161bf1162000090578063bab161bf1462000525578063d02103ca146200055f578063d96a15f71462000581578063dbc169761462000598578063ed6be5c914620005b0578063ee25560b14620005c7578063f2fde38b14620005f8578063ff634ed7146200061d57600080fd5b80637b6323c1146200041a57806381b1c174146200043f5780638da5cb5b146200047957806391e57e2d14620004995780639e34070f14620004b1578063a08e8a0814620004d6578063aaa13cc2146200050057600080fd5b8063318aee3d116200015a578063318aee3d14620002c557806334ac9cf214620003345780633ae0504714620003565780633da81682146200036e5780633e19704314620003935780634638554914620003b8578063647c576c14620003dd578063715018a6146200040257600080fd5b80630871e97114620001b457806315064c9614620001cd5780632072f6c514620001fe57806322e95f2c14620002165780632b5e42e714620002545780632c3f58cd14620002795780632dfdf0b5146200029e575b600080fd5b620001cb620001c5366004620027ac565b62000634565b005b348015620001da57600080fd5b50602254620001e99060ff1681565b60405190151581526020015b60405180910390f35b3480156200020b57600080fd5b50620001cb620006c9565b3480156200022357600080fd5b506200023b6200023536600462002838565b62000702565b6040516001600160a01b039091168152602001620001f5565b3480156200026157600080fd5b50620001cb6200027336600462002874565b62000755565b3480156200028657600080fd5b50620001cb620002983660046200288e565b62000764565b348015620002ab57600080fd5b50620002b660215481565b604051908152602001620001f5565b348015620002d257600080fd5b506200030f620002e4366004620028b3565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001f5565b3480156200034157600080fd5b506027546200023b906001600160a01b031681565b3480156200036357600080fd5b50620002b662000790565b3480156200037b57600080fd5b50620001e96200038d36600462002999565b62000883565b348015620003a057600080fd5b50620002b6620003b236600462002a16565b62000984565b348015620003c557600080fd5b50620001cb620003d736600462002b26565b62000a11565b348015620003ea57600080fd5b50620001cb620003fc36600462002c0c565b62000bb7565b3480156200040f57600080fd5b50620001cb62000d2c565b3480156200042757600080fd5b50620001cb6200043936600462002b26565b62000d42565b3480156200044c57600080fd5b506200023b6200045e36600462002874565b6024602052600090815260409020546001600160a01b031681565b3480156200048657600080fd5b50605a546001600160a01b03166200023b565b348015620004a657600080fd5b50620002b6608c5481565b348015620004be57600080fd5b50620001e9620004d036600462002874565b620011ca565b348015620004e357600080fd5b50620004ed600081565b60405160ff9091168152602001620001f5565b3480156200050d57600080fd5b506200023b6200051f36600462002c5c565b6200120f565b3480156200053257600080fd5b506022546200054990610100900463ffffffff1681565b60405163ffffffff9091168152602001620001f5565b3480156200056c57600080fd5b506026546200023b906001600160a01b031681565b620001cb6200059236600462002d0f565b62001326565b348015620005a557600080fd5b50620001cb620014d8565b348015620005bd57600080fd5b5062000549600081565b348015620005d457600080fd5b50620002b6620005e636600462002874565b60236020526000908152604090205481565b3480156200060557600080fd5b50620001cb62000617366004620028b3565b6200150f565b3480156200062a57600080fd5b50620004ed600181565b608c54341115620006b15760405162461bcd60e51b8152602060048201526047602482015260008051602062004b3183398151915260448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b620006c18686868686866200158e565b505050505050565b6027546001600160a01b03163314620006f65760405162461bcd60e51b8152600401620006a89062002d76565b62000700620019ff565b565b60006024600084846040516020016200071d92919062002dd3565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b6200075f62001a5d565b608c55565b6200076e62001a5d565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b60208110156200087a5782600116600103620007fb5760018160208110620007c757620007c762002dfd565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000828565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200083560028462002e3f565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008719062002e56565b9150506200079b565b50919392505050565b6000846001600160401b038416825b6020811015620009755781600116600103620008ff57868181518110620008bd57620008bd62002dfd565b602002602001015183604051602001620008e1929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000951565b8287828151811062000915576200091562002dfd565b602002602001015160405160200162000938929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b6200095e60028362002e3f565b9150806200096c8162002e56565b91505062000892565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a375760405162461bcd60e51b8152600401620006a89062002e72565b62000a4d8a8a8a8a8a8a8a8a8a8a600162001ab9565b62000a5e8963ffffffff1662001d44565b6000836001600160a01b03168387898560405160240162000a829392919062002f37565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000ab9919062002f72565b60006040518083038185875af1925050503d806000811462000af8576040519150601f19603f3d011682016040523d82523d6000602084013e62000afd565b606091505b505090508062000b695760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e8813595cdcd859d94819985a5b195960821b6064820152608401620006a8565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000ba295949392919062002f90565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000bd85750600054600160ff909116105b8062000bf45750303b15801562000bf4575060005460ff166001145b62000c595760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006a8565b6000805460ff19166001179055801562000c7d576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000cdf62001d86565b801562000d26576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d3662001a5d565b62000700600062001df9565b60225460ff161562000d685760405162461bcd60e51b8152600401620006a89062002e72565b62000d7e8a8a8a8a8a8a8a8a8a8a600062001ab9565b62000d8f8963ffffffff1662001d44565b6001600160a01b03851662000e8657604080516000808252602082019092526001600160a01b03851690849060405162000dca919062002f72565b60006040518083038185875af1925050503d806000811462000e09576040519150601f19603f3d011682016040523d82523d6000602084013e62000e0e565b606091505b505090508062000e7f5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a20604482015274115d1a195c881d1c985b9cd9995c8819985a5b1959605a1b6064820152608401620006a8565b506200117d565b60225463ffffffff61010090910481169087160362000ebb5762000eb56001600160a01b038616848462001e4b565b6200117d565b6000868660405160200162000ed292919062002dd3565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620011155760008060008580602001905181019062000f24919062003013565b92509250925060008584848460405162000f3e9062002716565b62000f4c9392919062003088565b8190604051809103906000f590508015801562000f6d573d6000803e3d6000fd5b506040516340c10f1960e01b81529091506001600160a01b038216906340c10f199062000fa1908c908c90600401620030c5565b600060405180830381600087803b15801562000fbc57600080fd5b505af115801562000fd1573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620011039392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200117a565b6040516340c10f1960e01b81526001600160a01b038216906340c10f1990620011459088908890600401620030c5565b600060405180830381600087803b1580156200116057600080fd5b505af115801562001175573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838987878686604051620011b695949392919062002f90565b60405180910390a150505050505050505050565b600080620011db6101008462002e3f565b90506000620011ed61010085620030de565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200122792919062002dd3565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200125a9062002716565b601f1982820381018352601f90910116604081905262001287908d908d908d908d908d906020016200311e565b60408051601f1981840301815290829052620012a792916020016200315f565b604051602081830303815290604052805190602001206040516020016200130094939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff16156200134c5760405162461bcd60e51b8152600401620006a89062002e72565b60225463ffffffff610100909104811690841603620013d45760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044657374696e6174696f6e2063616e6e6f7420626520697473656c66006064820152608401620006a8565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff1633868634876021546040516200142898979695949392919062003192565b60405180910390a1620014656200145f6001602260019054906101000a900463ffffffff1633878734888051906020012062000984565b62001eaa565b6026546001600160a01b03166333d6247d6200148062000790565b6040518263ffffffff1660e01b81526004016200149f91815260200190565b600060405180830381600087803b158015620014ba57600080fd5b505af1158015620014cf573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015055760405162461bcd60e51b8152600401620006a89062002d76565b6200070062001ff6565b6200151962001a5d565b6001600160a01b038116620015805760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006a8565b6200158b8162001df9565b50565b60225460ff1615620015b45760405162461bcd60e51b8152600401620006a89062002e72565b60225463ffffffff6101009091048116908616036200162b5760405162461bcd60e51b815260206004820152603d602482015260008051602062004b3183398151915260448201527f2044657374696e6174696f6e2063616e6e6f7420626520697473656c660000006064820152608401620006a8565b60008060606001600160a01b038916620016bd57853414620016b35760405162461bcd60e51b81526020600482015260446024820181905260008051602062004b31833981519152908201527f20416d6f756e7420646f6573206e6f74206d61746368206d6573736167652e76606482015263616c756560e01b608482015260a401620006a8565b600091506200191f565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200177c57604051632770a7eb60e21b81526001600160a01b038b1690639dc29fac90620017349033908b90600401620030c5565b600060405180830381600087803b1580156200174f57600080fd5b505af115801562001764573d6000803e3d6000fd5b5050505080602001519350806000015192506200191d565b84156200179157620017918a888888620020a5565b620017a86001600160a01b038b1633308a620024c9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620017ff573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018299190810190620031ff565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001868573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018929190810190620031ff565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620018d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018f7919062003237565b6040516020016200190b9392919062003088565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200196198979695949392919062003192565b60405180910390a1620019866200145f600084868c8c8c888051906020012062000984565b6026546001600160a01b03166333d6247d620019a162000790565b6040518263ffffffff1660e01b8152600401620019c091815260200190565b600060405180830381600087803b158015620019db57600080fd5b505af1158015620019f0573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001a255760405162461bcd60e51b8152600401620006a89062002e72565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006a8565b62001aca8a63ffffffff16620011ca565b1562001b215760405162461bcd60e51b8152602060048201526030602482015260008051602062004b1183398151915260448201526f08105b1c9958591e4818db185a5b595960821b6064820152608401620006a8565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001b95573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001bbb919062003257565b90508060000362001c1e5760405162461bcd60e51b8152602060048201526037602482015260008051602062004b118339815191526044820152760811db1bd8985b115e1a5d149bdbdd081a5b9d985b1a59604a1b6064820152608401620006a8565b60225463ffffffff878116610100909204161462001ca05760405162461bcd60e51b8152602060048201526043602482015260008051602062004b1183398151915260448201527f2044657374696e6174696f6e206e6574776f726b20646f6573206e6f74206d616064820152620e8c6d60eb1b608482015260a401620006a8565b602254600090610100900463ffffffff1662001cbe57508862001cc1565b50895b62001cec62001cdd848b8b8b8b8b8b8051906020012062000984565b8e8e63ffffffff168462000883565b620019f05760405162461bcd60e51b8152602060048201526032602482015260008051602062004b118339815191526044820152711024b73b30b634b21039b6ba10383937b7b360711b6064820152608401620006a8565b600062001d546101008362002e3f565b9050600062001d6661010084620030de565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001df35760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006a8565b62000700335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62001ea58363a9059cbb60e01b848460405160240162001e6d929190620030c5565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262002503565b505050565b80600162001ebb602060026200336e565b62001ec791906200337c565b6021541062001f2c5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d65726b6c65604482015269081d1c995948199d5b1b60b21b6064820152608401620006a8565b60016021600082825462001f41919062003396565b909155505060215460005b602081101562001feb578160011660010362001f8157826001826020811062001f795762001f7962002dfd565b015550505050565b6001816020811062001f975762001f9762002dfd565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001fd4919062002e3f565b91508062001fe28162002e56565b91505062001f4c565b5062001ea5620033b1565b60225460ff16620020705760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006a8565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000620020e883838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620025dc92505050565b9050632afa533160e01b6001600160e01b0319821601620022dd5760008080808080806200211a896004818d620033c7565b810190620021299190620033f3565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200216b5760405162461bcd60e51b8152600401620006a8906200344e565b6001600160a01b0386163014620021965760405162461bcd60e51b8152600401620006a890620034ab565b8a8514620022095760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205065726044820152780dad2e840c2dadeeadce840c8decae640dcdee840dac2e8c6d603b1b6064820152608401620006a8565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162002289919062002f72565b6000604051808303816000865af19150503d8060008114620022c8576040519150601f19603f3d011682016040523d82523d6000602084013e620022cd565b606091505b50505050505050505050620024c2565b6001600160e01b031981166323f2ebc360e21b14620023535760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e6f7460448201526a081d985b1a590818d85b1b60aa1b6064820152608401620006a8565b6000808080808080806200236b8a6004818e620033c7565b8101906200237a91906200350d565b97509750975097509750975097509750336001600160a01b0316886001600160a01b031614620023be5760405162461bcd60e51b8152600401620006a8906200344e565b6001600160a01b0387163014620023e95760405162461bcd60e51b8152600401620006a890620034ab565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162002472919062002f72565b6000604051808303816000865af19150503d8060008114620024b1576040519150601f19603f3d011682016040523d82523d6000602084013e620024b6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d269085906323b872dd60e01b9060840162001e6d565b60006200255a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620025e39092919063ffffffff16565b80519091501562001ea557808060200190518101906200257b919062003599565b62001ea55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006a8565b6020015190565b60606200097c848460008585600080866001600160a01b031685876040516200260d919062002f72565b60006040518083038185875af1925050503d80600081146200264c576040519150601f19603f3d011682016040523d82523d6000602084013e62002651565b606091505b509150915062002664878383876200266f565b979650505050505050565b60608315620026e3578251600003620026db576001600160a01b0385163b620026db5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006a8565b50816200097c565b6200097c8383815115620026fa5781518083602001fd5b8060405162461bcd60e51b8152600401620006a89190620035b9565b61154280620035cf83390190565b6001600160a01b03811681146200158b57600080fd5b8035620027478162002724565b919050565b803563ffffffff811681146200274757600080fd5b60008083601f8401126200277457600080fd5b5081356001600160401b038111156200278c57600080fd5b602083019150836020828501011115620027a557600080fd5b9250929050565b60008060008060008060a08789031215620027c657600080fd5b8635620027d38162002724565b9550620027e3602088016200274c565b94506040870135620027f58162002724565b93506060870135925060808701356001600160401b038111156200281857600080fd5b6200282689828a0162002761565b979a9699509497509295939492505050565b600080604083850312156200284c57600080fd5b62002857836200274c565b91506020830135620028698162002724565b809150509250929050565b6000602082840312156200288757600080fd5b5035919050565b600060208284031215620028a157600080fd5b620028ac826200274c565b9392505050565b600060208284031215620028c657600080fd5b8135620028ac8162002724565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620029145762002914620028d3565b604052919050565b600082601f8301126200292e57600080fd5b813560206001600160401b038211156200294c576200294c620028d3565b8160051b6200295d828201620028e9565b92835284810182019282810190878511156200297857600080fd5b83870192505b8483101562002664578235825291830191908301906200297e565b60008060008060808587031215620029b057600080fd5b8435935060208501356001600160401b0380821115620029cf57600080fd5b620029dd888389016200291c565b9450604087013591508082168214620029f557600080fd5b509396929550929360600135925050565b60ff811681146200158b57600080fd5b600080600080600080600060e0888a03121562002a3257600080fd5b873562002a3f8162002a06565b965062002a4f602089016200274c565b9550604088013562002a618162002724565b945062002a71606089016200274c565b9350608088013562002a838162002724565b9699959850939692959460a0840135945060c09093013592915050565b60006001600160401b0382111562002abc5762002abc620028d3565b50601f01601f191660200190565b600082601f83011262002adc57600080fd5b813562002af362002aed8262002aa0565b620028e9565b81815284602083860101111562002b0957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002b4757600080fd5b8a356001600160401b038082111562002b5f57600080fd5b62002b6d8e838f016200291c565b9b5062002b7d60208e016200274c565b9a5060408d0135995060608d0135985062002b9b60808e016200274c565b975062002bab60a08e016200273a565b965062002bbb60c08e016200274c565b955062002bcb60e08e016200273a565b94506101008d013593506101208d013591508082111562002beb57600080fd5b5062002bfa8d828e0162002aca565b9150509295989b9194979a5092959850565b60008060006060848603121562002c2257600080fd5b62002c2d846200274c565b9250602084013562002c3f8162002724565b9150604084013562002c518162002724565b809150509250925092565b600080600080600080600060a0888a03121562002c7857600080fd5b62002c83886200274c565b9650602088013562002c958162002724565b955060408801356001600160401b038082111562002cb257600080fd5b62002cc08b838c0162002761565b909750955060608a013591508082111562002cda57600080fd5b5062002ce98a828b0162002761565b909450925050608088013562002cff8162002a06565b8091505092959891949750929550565b60008060006060848603121562002d2557600080fd5b62002d30846200274c565b9250602084013562002d428162002724565b915060408401356001600160401b0381111562002d5e57600080fd5b62002d6c8682870162002aca565b9150509250925092565b6020808252603a908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e5a6b45564d20636f6e7472616374000000000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002e515762002e5162002e13565b500490565b60006001820162002e6b5762002e6b62002e29565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002ef757818101518382015260200162002edd565b8381111562000d265750506000910152565b6000815180845262002f2381602086016020860162002eda565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002f699083018462002f09565b95945050505050565b6000825162002f8681846020870162002eda565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f83011262002fd957600080fd5b815162002fea62002aed8262002aa0565b8181528460208386010111156200300057600080fd5b6200097c82602083016020870162002eda565b6000806000606084860312156200302957600080fd5b83516001600160401b03808211156200304157600080fd5b6200304f8783880162002fc7565b945060208601519150808211156200306657600080fd5b50620030758682870162002fc7565b925050604084015162002c518162002a06565b6060815260006200309d606083018662002f09565b8281036020840152620030b1818662002f09565b91505060ff83166040830152949350505050565b6001600160a01b03929092168252602082015260400190565b600082620030f057620030f062002e13565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003134606083018789620030f5565b828103602084015262003149818688620030f5565b91505060ff831660408301529695505050505050565b600083516200317381846020880162002eda565b8351908301906200318981836020880162002eda565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620031e68483018762002f09565b925080851660e085015250509998505050505050505050565b6000602082840312156200321257600080fd5b81516001600160401b038111156200322957600080fd5b6200097c8482850162002fc7565b6000602082840312156200324a57600080fd5b8151620028ac8162002a06565b6000602082840312156200326a57600080fd5b5051919050565b600181815b80851115620032b257816000190482111562003296576200329662002e29565b80851615620032a457918102915b93841c939080029062003276565b509250929050565b600082620032cb575060016200074f565b81620032da575060006200074f565b8160018114620032f35760028114620032fe576200331e565b60019150506200074f565b60ff84111562003312576200331262002e29565b50506001821b6200074f565b5060208310610133831016604e8410600b841016171562003343575081810a6200074f565b6200334f838362003271565b806000190482111562003366576200336662002e29565b029392505050565b6000620028ac8383620032ba565b60008282101562003391576200339162002e29565b500390565b60008219821115620033ac57620033ac62002e29565b500190565b634e487b7160e01b600052600160045260246000fd5b60008085851115620033d857600080fd5b83861115620033e657600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200340f57600080fd5b87356200341c8162002724565b965060208801356200342e8162002724565b95506040880135945060608801359350608088013562002a838162002a06565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260408201527f6d6974206f776e6572206d757374206265207468652073656e64657200000000606082015260800190565b60208082526033908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205370656040820152726e646572206d7573742062652027746869732760681b606082015260800190565b80151581146200158b57600080fd5b600080600080600080600080610100898b0312156200352b57600080fd5b8835620035388162002724565b975060208901356200354a8162002724565b9650604089013595506060890135945060808901356200356a81620034fe565b935060a08901356200357c8162002a06565b979a969950949793969295929450505060c08201359160e0013590565b600060208284031215620035ac57600080fd5b8151620028ac81620034fe565b602081526000620028ac602083018462002f0956fe60c06040523480156200001157600080fd5b5060405162001542380380620015428339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611088620004ba60003960006104690152600081816102f9015261043301526110886000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610dc2565b60405180910390f35b61016d610168366004610e33565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e5d565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e33565b61048b565b61023d610238366004610e33565b6104ad565b005b61018161024d366004610e99565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610e99565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e33565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e33565b610531565b61016d6102ef366004610e33565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ebb565b6105ba565b61018161033c366004610f2e565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f61565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f61565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b51565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fb1565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fc9565b60405180910390fd5b6104ea8282610bfd565b5050565b60606004805461037090610f61565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fc9565b6104ea8282610caa565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611019565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b0384811660008181526020818152604080832087870390559387168083529184902080548701905592518581529092600080516020611033833981519152910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b7c610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c535760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c659190610fb1565b90915550506001600160a01b03821660008181526020818152604080832080548601905551848152600080516020611033833981519152910160405180910390a35050565b6001600160a01b038216610d0a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610d7e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192916000805160206110338339815191529101610938565b600060208083528351808285015260005b81811015610def57858101830151858201604001528201610dd3565b81811115610e01576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e2e57600080fd5b919050565b60008060408385031215610e4657600080fd5b610e4f83610e17565b946020939093013593505050565b600080600060608486031215610e7257600080fd5b610e7b84610e17565b9250610e8960208501610e17565b9150604084013590509250925092565b600060208284031215610eab57600080fd5b610eb482610e17565b9392505050565b600080600080600080600060e0888a031215610ed657600080fd5b610edf88610e17565b9650610eed60208901610e17565b95506040880135945060608801359350608088013560ff81168114610f1157600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f4157600080fd5b610f4a83610e17565b9150610f5860208401610e17565b90509250929050565b600181811c90821680610f7557607f821691505b602082108103610f9557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610fc457610fc4610f9b565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161102b5761102b610f9b565b506001019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212208b7986f78e961ad6c0885b86b24ce427045be98073c1f3d7fe18180542ab873564736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663a506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743aa264697066735822122038345ffd9080addd30e644f069c03eb26468d8f9f372429cc4736a87108f308c64736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001af5760003560e01c80637b6323c111620000e9578063bab161bf1162000090578063bab161bf1462000525578063d02103ca146200055f578063d96a15f71462000581578063dbc169761462000598578063ed6be5c914620005b0578063ee25560b14620005c7578063f2fde38b14620005f8578063ff634ed7146200061d57600080fd5b80637b6323c1146200041a57806381b1c174146200043f5780638da5cb5b146200047957806391e57e2d14620004995780639e34070f14620004b1578063a08e8a0814620004d6578063aaa13cc2146200050057600080fd5b8063318aee3d116200015a578063318aee3d14620002c557806334ac9cf214620003345780633ae0504714620003565780633da81682146200036e5780633e19704314620003935780634638554914620003b8578063647c576c14620003dd578063715018a6146200040257600080fd5b80630871e97114620001b457806315064c9614620001cd5780632072f6c514620001fe57806322e95f2c14620002165780632b5e42e714620002545780632c3f58cd14620002795780632dfdf0b5146200029e575b600080fd5b620001cb620001c5366004620027ac565b62000634565b005b348015620001da57600080fd5b50602254620001e99060ff1681565b60405190151581526020015b60405180910390f35b3480156200020b57600080fd5b50620001cb620006c9565b3480156200022357600080fd5b506200023b6200023536600462002838565b62000702565b6040516001600160a01b039091168152602001620001f5565b3480156200026157600080fd5b50620001cb6200027336600462002874565b62000755565b3480156200028657600080fd5b50620001cb620002983660046200288e565b62000764565b348015620002ab57600080fd5b50620002b660215481565b604051908152602001620001f5565b348015620002d257600080fd5b506200030f620002e4366004620028b3565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001f5565b3480156200034157600080fd5b506027546200023b906001600160a01b031681565b3480156200036357600080fd5b50620002b662000790565b3480156200037b57600080fd5b50620001e96200038d36600462002999565b62000883565b348015620003a057600080fd5b50620002b6620003b236600462002a16565b62000984565b348015620003c557600080fd5b50620001cb620003d736600462002b26565b62000a11565b348015620003ea57600080fd5b50620001cb620003fc36600462002c0c565b62000bb7565b3480156200040f57600080fd5b50620001cb62000d2c565b3480156200042757600080fd5b50620001cb6200043936600462002b26565b62000d42565b3480156200044c57600080fd5b506200023b6200045e36600462002874565b6024602052600090815260409020546001600160a01b031681565b3480156200048657600080fd5b50605a546001600160a01b03166200023b565b348015620004a657600080fd5b50620002b6608c5481565b348015620004be57600080fd5b50620001e9620004d036600462002874565b620011ca565b348015620004e357600080fd5b50620004ed600081565b60405160ff9091168152602001620001f5565b3480156200050d57600080fd5b506200023b6200051f36600462002c5c565b6200120f565b3480156200053257600080fd5b506022546200054990610100900463ffffffff1681565b60405163ffffffff9091168152602001620001f5565b3480156200056c57600080fd5b506026546200023b906001600160a01b031681565b620001cb6200059236600462002d0f565b62001326565b348015620005a557600080fd5b50620001cb620014d8565b348015620005bd57600080fd5b5062000549600081565b348015620005d457600080fd5b50620002b6620005e636600462002874565b60236020526000908152604090205481565b3480156200060557600080fd5b50620001cb62000617366004620028b3565b6200150f565b3480156200062a57600080fd5b50620004ed600181565b608c54341115620006b15760405162461bcd60e51b8152602060048201526047602482015260008051602062004b3183398151915260448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b620006c18686868686866200158e565b505050505050565b6027546001600160a01b03163314620006f65760405162461bcd60e51b8152600401620006a89062002d76565b62000700620019ff565b565b60006024600084846040516020016200071d92919062002dd3565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b6200075f62001a5d565b608c55565b6200076e62001a5d565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b60208110156200087a5782600116600103620007fb5760018160208110620007c757620007c762002dfd565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000828565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200083560028462002e3f565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008719062002e56565b9150506200079b565b50919392505050565b6000846001600160401b038416825b6020811015620009755781600116600103620008ff57868181518110620008bd57620008bd62002dfd565b602002602001015183604051602001620008e1929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000951565b8287828151811062000915576200091562002dfd565b602002602001015160405160200162000938929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b6200095e60028362002e3f565b9150806200096c8162002e56565b91505062000892565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a375760405162461bcd60e51b8152600401620006a89062002e72565b62000a4d8a8a8a8a8a8a8a8a8a8a600162001ab9565b62000a5e8963ffffffff1662001d44565b6000836001600160a01b03168387898560405160240162000a829392919062002f37565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000ab9919062002f72565b60006040518083038185875af1925050503d806000811462000af8576040519150601f19603f3d011682016040523d82523d6000602084013e62000afd565b606091505b505090508062000b695760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e8813595cdcd859d94819985a5b195960821b6064820152608401620006a8565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000ba295949392919062002f90565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000bd85750600054600160ff909116105b8062000bf45750303b15801562000bf4575060005460ff166001145b62000c595760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006a8565b6000805460ff19166001179055801562000c7d576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000cdf62001d86565b801562000d26576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d3662001a5d565b62000700600062001df9565b60225460ff161562000d685760405162461bcd60e51b8152600401620006a89062002e72565b62000d7e8a8a8a8a8a8a8a8a8a8a600062001ab9565b62000d8f8963ffffffff1662001d44565b6001600160a01b03851662000e8657604080516000808252602082019092526001600160a01b03851690849060405162000dca919062002f72565b60006040518083038185875af1925050503d806000811462000e09576040519150601f19603f3d011682016040523d82523d6000602084013e62000e0e565b606091505b505090508062000e7f5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a20604482015274115d1a195c881d1c985b9cd9995c8819985a5b1959605a1b6064820152608401620006a8565b506200117d565b60225463ffffffff61010090910481169087160362000ebb5762000eb56001600160a01b038616848462001e4b565b6200117d565b6000868660405160200162000ed292919062002dd3565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620011155760008060008580602001905181019062000f24919062003013565b92509250925060008584848460405162000f3e9062002716565b62000f4c9392919062003088565b8190604051809103906000f590508015801562000f6d573d6000803e3d6000fd5b506040516340c10f1960e01b81529091506001600160a01b038216906340c10f199062000fa1908c908c90600401620030c5565b600060405180830381600087803b15801562000fbc57600080fd5b505af115801562000fd1573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620011039392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200117a565b6040516340c10f1960e01b81526001600160a01b038216906340c10f1990620011459088908890600401620030c5565b600060405180830381600087803b1580156200116057600080fd5b505af115801562001175573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838987878686604051620011b695949392919062002f90565b60405180910390a150505050505050505050565b600080620011db6101008462002e3f565b90506000620011ed61010085620030de565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200122792919062002dd3565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200125a9062002716565b601f1982820381018352601f90910116604081905262001287908d908d908d908d908d906020016200311e565b60408051601f1981840301815290829052620012a792916020016200315f565b604051602081830303815290604052805190602001206040516020016200130094939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff16156200134c5760405162461bcd60e51b8152600401620006a89062002e72565b60225463ffffffff610100909104811690841603620013d45760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044657374696e6174696f6e2063616e6e6f7420626520697473656c66006064820152608401620006a8565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff1633868634876021546040516200142898979695949392919062003192565b60405180910390a1620014656200145f6001602260019054906101000a900463ffffffff1633878734888051906020012062000984565b62001eaa565b6026546001600160a01b03166333d6247d6200148062000790565b6040518263ffffffff1660e01b81526004016200149f91815260200190565b600060405180830381600087803b158015620014ba57600080fd5b505af1158015620014cf573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015055760405162461bcd60e51b8152600401620006a89062002d76565b6200070062001ff6565b6200151962001a5d565b6001600160a01b038116620015805760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006a8565b6200158b8162001df9565b50565b60225460ff1615620015b45760405162461bcd60e51b8152600401620006a89062002e72565b60225463ffffffff6101009091048116908616036200162b5760405162461bcd60e51b815260206004820152603d602482015260008051602062004b3183398151915260448201527f2044657374696e6174696f6e2063616e6e6f7420626520697473656c660000006064820152608401620006a8565b60008060606001600160a01b038916620016bd57853414620016b35760405162461bcd60e51b81526020600482015260446024820181905260008051602062004b31833981519152908201527f20416d6f756e7420646f6573206e6f74206d61746368206d6573736167652e76606482015263616c756560e01b608482015260a401620006a8565b600091506200191f565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200177c57604051632770a7eb60e21b81526001600160a01b038b1690639dc29fac90620017349033908b90600401620030c5565b600060405180830381600087803b1580156200174f57600080fd5b505af115801562001764573d6000803e3d6000fd5b5050505080602001519350806000015192506200191d565b84156200179157620017918a888888620020a5565b620017a86001600160a01b038b1633308a620024c9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620017ff573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018299190810190620031ff565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001868573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018929190810190620031ff565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620018d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018f7919062003237565b6040516020016200190b9392919062003088565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200196198979695949392919062003192565b60405180910390a1620019866200145f600084868c8c8c888051906020012062000984565b6026546001600160a01b03166333d6247d620019a162000790565b6040518263ffffffff1660e01b8152600401620019c091815260200190565b600060405180830381600087803b158015620019db57600080fd5b505af1158015620019f0573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001a255760405162461bcd60e51b8152600401620006a89062002e72565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006a8565b62001aca8a63ffffffff16620011ca565b1562001b215760405162461bcd60e51b8152602060048201526030602482015260008051602062004b1183398151915260448201526f08105b1c9958591e4818db185a5b595960821b6064820152608401620006a8565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001b95573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001bbb919062003257565b90508060000362001c1e5760405162461bcd60e51b8152602060048201526037602482015260008051602062004b118339815191526044820152760811db1bd8985b115e1a5d149bdbdd081a5b9d985b1a59604a1b6064820152608401620006a8565b60225463ffffffff878116610100909204161462001ca05760405162461bcd60e51b8152602060048201526043602482015260008051602062004b1183398151915260448201527f2044657374696e6174696f6e206e6574776f726b20646f6573206e6f74206d616064820152620e8c6d60eb1b608482015260a401620006a8565b602254600090610100900463ffffffff1662001cbe57508862001cc1565b50895b62001cec62001cdd848b8b8b8b8b8b8051906020012062000984565b8e8e63ffffffff168462000883565b620019f05760405162461bcd60e51b8152602060048201526032602482015260008051602062004b118339815191526044820152711024b73b30b634b21039b6ba10383937b7b360711b6064820152608401620006a8565b600062001d546101008362002e3f565b9050600062001d6661010084620030de565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001df35760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006a8565b62000700335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62001ea58363a9059cbb60e01b848460405160240162001e6d929190620030c5565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262002503565b505050565b80600162001ebb602060026200336e565b62001ec791906200337c565b6021541062001f2c5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d65726b6c65604482015269081d1c995948199d5b1b60b21b6064820152608401620006a8565b60016021600082825462001f41919062003396565b909155505060215460005b602081101562001feb578160011660010362001f8157826001826020811062001f795762001f7962002dfd565b015550505050565b6001816020811062001f975762001f9762002dfd565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001fd4919062002e3f565b91508062001fe28162002e56565b91505062001f4c565b5062001ea5620033b1565b60225460ff16620020705760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006a8565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000620020e883838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620025dc92505050565b9050632afa533160e01b6001600160e01b0319821601620022dd5760008080808080806200211a896004818d620033c7565b810190620021299190620033f3565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200216b5760405162461bcd60e51b8152600401620006a8906200344e565b6001600160a01b0386163014620021965760405162461bcd60e51b8152600401620006a890620034ab565b8a8514620022095760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205065726044820152780dad2e840c2dadeeadce840c8decae640dcdee840dac2e8c6d603b1b6064820152608401620006a8565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162002289919062002f72565b6000604051808303816000865af19150503d8060008114620022c8576040519150601f19603f3d011682016040523d82523d6000602084013e620022cd565b606091505b50505050505050505050620024c2565b6001600160e01b031981166323f2ebc360e21b14620023535760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e6f7460448201526a081d985b1a590818d85b1b60aa1b6064820152608401620006a8565b6000808080808080806200236b8a6004818e620033c7565b8101906200237a91906200350d565b97509750975097509750975097509750336001600160a01b0316886001600160a01b031614620023be5760405162461bcd60e51b8152600401620006a8906200344e565b6001600160a01b0387163014620023e95760405162461bcd60e51b8152600401620006a890620034ab565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162002472919062002f72565b6000604051808303816000865af19150503d8060008114620024b1576040519150601f19603f3d011682016040523d82523d6000602084013e620024b6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d269085906323b872dd60e01b9060840162001e6d565b60006200255a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620025e39092919063ffffffff16565b80519091501562001ea557808060200190518101906200257b919062003599565b62001ea55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006a8565b6020015190565b60606200097c848460008585600080866001600160a01b031685876040516200260d919062002f72565b60006040518083038185875af1925050503d80600081146200264c576040519150601f19603f3d011682016040523d82523d6000602084013e62002651565b606091505b509150915062002664878383876200266f565b979650505050505050565b60608315620026e3578251600003620026db576001600160a01b0385163b620026db5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006a8565b50816200097c565b6200097c8383815115620026fa5781518083602001fd5b8060405162461bcd60e51b8152600401620006a89190620035b9565b61154280620035cf83390190565b6001600160a01b03811681146200158b57600080fd5b8035620027478162002724565b919050565b803563ffffffff811681146200274757600080fd5b60008083601f8401126200277457600080fd5b5081356001600160401b038111156200278c57600080fd5b602083019150836020828501011115620027a557600080fd5b9250929050565b60008060008060008060a08789031215620027c657600080fd5b8635620027d38162002724565b9550620027e3602088016200274c565b94506040870135620027f58162002724565b93506060870135925060808701356001600160401b038111156200281857600080fd5b6200282689828a0162002761565b979a9699509497509295939492505050565b600080604083850312156200284c57600080fd5b62002857836200274c565b91506020830135620028698162002724565b809150509250929050565b6000602082840312156200288757600080fd5b5035919050565b600060208284031215620028a157600080fd5b620028ac826200274c565b9392505050565b600060208284031215620028c657600080fd5b8135620028ac8162002724565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620029145762002914620028d3565b604052919050565b600082601f8301126200292e57600080fd5b813560206001600160401b038211156200294c576200294c620028d3565b8160051b6200295d828201620028e9565b92835284810182019282810190878511156200297857600080fd5b83870192505b8483101562002664578235825291830191908301906200297e565b60008060008060808587031215620029b057600080fd5b8435935060208501356001600160401b0380821115620029cf57600080fd5b620029dd888389016200291c565b9450604087013591508082168214620029f557600080fd5b509396929550929360600135925050565b60ff811681146200158b57600080fd5b600080600080600080600060e0888a03121562002a3257600080fd5b873562002a3f8162002a06565b965062002a4f602089016200274c565b9550604088013562002a618162002724565b945062002a71606089016200274c565b9350608088013562002a838162002724565b9699959850939692959460a0840135945060c09093013592915050565b60006001600160401b0382111562002abc5762002abc620028d3565b50601f01601f191660200190565b600082601f83011262002adc57600080fd5b813562002af362002aed8262002aa0565b620028e9565b81815284602083860101111562002b0957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002b4757600080fd5b8a356001600160401b038082111562002b5f57600080fd5b62002b6d8e838f016200291c565b9b5062002b7d60208e016200274c565b9a5060408d0135995060608d0135985062002b9b60808e016200274c565b975062002bab60a08e016200273a565b965062002bbb60c08e016200274c565b955062002bcb60e08e016200273a565b94506101008d013593506101208d013591508082111562002beb57600080fd5b5062002bfa8d828e0162002aca565b9150509295989b9194979a5092959850565b60008060006060848603121562002c2257600080fd5b62002c2d846200274c565b9250602084013562002c3f8162002724565b9150604084013562002c518162002724565b809150509250925092565b600080600080600080600060a0888a03121562002c7857600080fd5b62002c83886200274c565b9650602088013562002c958162002724565b955060408801356001600160401b038082111562002cb257600080fd5b62002cc08b838c0162002761565b909750955060608a013591508082111562002cda57600080fd5b5062002ce98a828b0162002761565b909450925050608088013562002cff8162002a06565b8091505092959891949750929550565b60008060006060848603121562002d2557600080fd5b62002d30846200274c565b9250602084013562002d428162002724565b915060408401356001600160401b0381111562002d5e57600080fd5b62002d6c8682870162002aca565b9150509250925092565b6020808252603a908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e5a6b45564d20636f6e7472616374000000000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002e515762002e5162002e13565b500490565b60006001820162002e6b5762002e6b62002e29565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002ef757818101518382015260200162002edd565b8381111562000d265750506000910152565b6000815180845262002f2381602086016020860162002eda565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002f699083018462002f09565b95945050505050565b6000825162002f8681846020870162002eda565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f83011262002fd957600080fd5b815162002fea62002aed8262002aa0565b8181528460208386010111156200300057600080fd5b6200097c82602083016020870162002eda565b6000806000606084860312156200302957600080fd5b83516001600160401b03808211156200304157600080fd5b6200304f8783880162002fc7565b945060208601519150808211156200306657600080fd5b50620030758682870162002fc7565b925050604084015162002c518162002a06565b6060815260006200309d606083018662002f09565b8281036020840152620030b1818662002f09565b91505060ff83166040830152949350505050565b6001600160a01b03929092168252602082015260400190565b600082620030f057620030f062002e13565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003134606083018789620030f5565b828103602084015262003149818688620030f5565b91505060ff831660408301529695505050505050565b600083516200317381846020880162002eda565b8351908301906200318981836020880162002eda565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620031e68483018762002f09565b925080851660e085015250509998505050505050505050565b6000602082840312156200321257600080fd5b81516001600160401b038111156200322957600080fd5b6200097c8482850162002fc7565b6000602082840312156200324a57600080fd5b8151620028ac8162002a06565b6000602082840312156200326a57600080fd5b5051919050565b600181815b80851115620032b257816000190482111562003296576200329662002e29565b80851615620032a457918102915b93841c939080029062003276565b509250929050565b600082620032cb575060016200074f565b81620032da575060006200074f565b8160018114620032f35760028114620032fe576200331e565b60019150506200074f565b60ff84111562003312576200331262002e29565b50506001821b6200074f565b5060208310610133831016604e8410600b841016171562003343575081810a6200074f565b6200334f838362003271565b806000190482111562003366576200336662002e29565b029392505050565b6000620028ac8383620032ba565b60008282101562003391576200339162002e29565b500390565b60008219821115620033ac57620033ac62002e29565b500190565b634e487b7160e01b600052600160045260246000fd5b60008085851115620033d857600080fd5b83861115620033e657600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200340f57600080fd5b87356200341c8162002724565b965060208801356200342e8162002724565b95506040880135945060608801359350608088013562002a838162002a06565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260408201527f6d6974206f776e6572206d757374206265207468652073656e64657200000000606082015260800190565b60208082526033908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205370656040820152726e646572206d7573742062652027746869732760681b606082015260800190565b80151581146200158b57600080fd5b600080600080600080600080610100898b0312156200352b57600080fd5b8835620035388162002724565b975060208901356200354a8162002724565b9650604089013595506060890135945060808901356200356a81620034fe565b935060a08901356200357c8162002a06565b979a969950949793969295929450505060c08201359160e0013590565b600060208284031215620035ac57600080fd5b8151620028ac81620034fe565b602081526000620028ac602083018462002f0956fe60c06040523480156200001157600080fd5b5060405162001542380380620015428339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611088620004ba60003960006104690152600081816102f9015261043301526110886000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610dc2565b60405180910390f35b61016d610168366004610e33565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e5d565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e33565b61048b565b61023d610238366004610e33565b6104ad565b005b61018161024d366004610e99565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610e99565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e33565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e33565b610531565b61016d6102ef366004610e33565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ebb565b6105ba565b61018161033c366004610f2e565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f61565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f61565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b51565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fb1565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fc9565b60405180910390fd5b6104ea8282610bfd565b5050565b60606004805461037090610f61565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fc9565b6104ea8282610caa565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611019565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b0384811660008181526020818152604080832087870390559387168083529184902080548701905592518581529092600080516020611033833981519152910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b7c610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c535760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c659190610fb1565b90915550506001600160a01b03821660008181526020818152604080832080548601905551848152600080516020611033833981519152910160405180910390a35050565b6001600160a01b038216610d0a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610d7e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192916000805160206110338339815191529101610938565b600060208083528351808285015260005b81811015610def57858101830151858201604001528201610dd3565b81811115610e01576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e2e57600080fd5b919050565b60008060408385031215610e4657600080fd5b610e4f83610e17565b946020939093013593505050565b600080600060608486031215610e7257600080fd5b610e7b84610e17565b9250610e8960208501610e17565b9150604084013590509250925092565b600060208284031215610eab57600080fd5b610eb482610e17565b9392505050565b600080600080600080600060e0888a031215610ed657600080fd5b610edf88610e17565b9650610eed60208901610e17565b95506040880135945060608801359350608088013560ff81168114610f1157600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f4157600080fd5b610f4a83610e17565b9150610f5860208401610e17565b90509250929050565b600181811c90821680610f7557607f821691505b602082108103610f9557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610fc457610fc4610f9b565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161102b5761102b610f9b565b506001019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212208b7986f78e961ad6c0885b86b24ce427045be98073c1f3d7fe18180542ab873564736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663a506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743aa264697066735822122038345ffd9080addd30e644f069c03eb26468d8f9f372429cc4736a87108f308c64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZkEVMMock.json b/compiled-contracts/PolygonZkEVMMock.json index 03c13a8db..69b5b27e9 100644 --- a/compiled-contracts/PolygonZkEVMMock.json +++ b/compiled-contracts/PolygonZkEVMMock.json @@ -1693,8 +1693,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50615f0980620000216000396000f3fe608060405234801561001057600080fd5b50600436106103925760003560e01c806396dc3d39116101e0578063cfa8ed4711610110578063e7a7ed02116100a8578063e7a7ed0214610905578063e8bf92ed1461091f578063eaeb077b14610932578063edc4112114610945578063f14916d614610958578063f2fde38b1461096b578063f851a4401461097e578063f8b823e414610991578063fe16564f1461099a57600080fd5b8063cfa8ed4714610860578063d02103ca1461087a578063d8d1091b1461088d578063d8f54db0146108a0578063d939b315146108b4578063dbc16976146108ce578063e0d17441146108d6578063e11f3f18146108e9578063e217cfd6146108fc57600080fd5b8063ab9fc5ef11610183578063ab9fc5ef14610759578063adc879e914610763578063afd23cbe1461077d578063b4d63f58146107a5578063b6b0b09714610805578063c0cad3021461081f578063c0ed84e014610832578063c89e42df1461083a578063cf1363061461084d57600080fd5b806396dc3d39146106dd57806399f5634e146106f05780639b796760146106f85780639c9f3dfe1461070b5780639eb831b91461071e5780639f0d039d14610726578063a3c573eb1461072e578063aa58bad61461074157600080fd5b80634a910e6a116102c6578063715018a61161025e578063715018a6146105e65780637215541a146105ee57806375c508b3146106015780637fcb365314610614578063837a473814610627578063841b24d7146106955780638b48931e146106af5780638c4a0af7146106b95780638da5cb5b146106cc57600080fd5b80634a910e6a1461052c5780635392c5e01461053f578063542028d51461055f5780635437988d14610567578063574f649e1461057a57806360943d6a1461058d5780636b8616ce146105a05780636ff512cc146105c0578063704b6c02146105d357600080fd5b80632d0889d3116103395780632d0889d314610475578063383b3be81461047f578063394218e9146104925780633c158267146104a5578063423fa856146104b857806345605267146104d2578063458c0477146104ec5780634834a343146104ff5780634a1a89a71461051257600080fd5b80630eaa86ea14610397578063107bf28c146103bd57806310a01a72146103d257806315064c96146103e75780631816b7e51461040457806319d8ac6114610417578063220d7899146104425780632987898314610455575b600080fd5b6103aa6103a5366004614c6b565b6109ad565b6040519081526020015b60405180910390f35b6103c5610b7c565b6040516103b49190614d18565b6103e56103e0366004614d5a565b610c0a565b005b6065546103f49060ff1681565b60405190151581526020016103b4565b6103e5610412366004614de7565b610e53565b60685461042a906001600160401b031681565b6040516001600160401b0390911681526020016103b4565b6103c5610450366004614e0b565b610f74565b606a54610468906001600160a01b031681565b6040516103b49190614e58565b6103aa620493e081565b6103f461048d366004614e6c565b611115565b6103e56104a0366004614e6c565b61115c565b6103e56104b3366004614fa9565b611318565b60685461042a90600160401b90046001600160401b031681565b60685461042a90600160801b90046001600160401b031681565b60725461042a906001600160401b031681565b6103e561050d366004614d5a565b611adf565b60725461042a90600160401b90046001600160401b031681565b6103e561053a366004614e6c565b611e27565b6103aa61054d366004614e6c565b606d6020526000908152604090205481565b6103c56120c1565b6103e56105753660046150d4565b6120ce565b6103aa6105883660046150f1565b6120f8565b6103e561059b366004615166565b61213b565b6103aa6105ae366004614e6c565b60666020526000908152604090205481565b6103e56105ce3660046150d4565b612496565b6103e56105e13660046150d4565b612514565b6103e5612589565b6103e56105fc366004614e6c565b61259d565b6103e561060f36600461523d565b6127a7565b60695461042a906001600160401b031681565b61066a6106353660046152db565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103b4565b60725461042a90600160c01b90046001600160401b031681565b61042a62093a8081565b6103e56106c7366004615302565b612836565b6033546001600160a01b0316610468565b6103e56106eb366004614e6c565b6128ad565b6103aa6128d7565b6103e5610706366004614e6c565b6129bf565b6103e5610719366004614e6c565b6129f4565b6103aa600c81565b6074546103aa565b607054610468906001600160a01b031681565b60655461042a9061010090046001600160401b031681565b61042a6206978081565b606c5461042a90600160a81b90046001600160401b031681565b60655461079290600160481b900461ffff1681565b60405161ffff90911681526020016103b4565b6107e06107b3366004614e6c565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103b4565b60655461046890600160581b90046001600160a01b031681565b6103e561082d36600461531f565b612ba2565b61042a612bba565b6103e561084836600461531f565b612c07565b6103e561085b366004614e6c565b612c6d565b60695461046890600160401b90046001600160a01b031681565b606c54610468906001600160a01b031681565b6103e561089b366004615353565b612cee565b606c546103f490600160a01b900460ff1681565b60725461042a90600160801b90046001600160401b031681565b6103e56131ad565b6103e56108e4366004615445565b613269565b6103e56108f736600461523d565b6132db565b61042a6103e881565b60685461042a90600160c01b90046001600160401b031681565b606b54610468906001600160a01b031681565b6103e5610940366004615492565b61341f565b6103e5610953366004614d5a565b613748565b6103e56109663660046150d4565b613867565b6103e56109793660046150d4565b6138dc565b607354610468906001600160a01b031681565b6103aa60745481565b6103e56109a83660046154d6565b613952565b60008060006109ba612bba565b90506001600160401b03881615610a57576072546001600160401b039081169089161115610a035760405162461bcd60e51b81526004016109fa90615502565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610a515760405162461bcd60e51b81526004016109fa90615580565b50610ac1565b6001600160401b0387166000908152606d6020526040902054915081610a8f5760405162461bcd60e51b81526004016109fa906155e0565b806001600160401b0316876001600160401b03161115610ac15760405162461bcd60e51b81526004016109fa90615637565b806001600160401b0316866001600160401b031611610af25760405162461bcd60e51b81526004016109fa906156a8565b6000610b018888888689610f74565b90506000600080516020615e94833981519152600283604051610b249190615725565b602060405180830381855afa158015610b41573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610b649190615741565b610b6e9190615770565b9a9950505050505050505050565b606f8054610b8990615784565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb590615784565b8015610c025780601f10610bd757610100808354040283529160200191610c02565b820191906000526020600020905b815481529060010190602001808311610be557829003601f168201915b505050505081565b610c12613974565b600080610c1d612bba565b90506001600160401b038a1615610cb1576072546001600160401b03908116908b161115610c5d5760405162461bcd60e51b81526004016109fa90615502565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610cab5760405162461bcd60e51b81526004016109fa90615580565b50610d1b565b6001600160401b0389166000908152606d6020526040902054915081610ce95760405162461bcd60e51b81526004016109fa906155e0565b806001600160401b0316896001600160401b03161115610d1b5760405162461bcd60e51b81526004016109fa90615637565b806001600160401b0316886001600160401b031611610d4c5760405162461bcd60e51b81526004016109fa906156a8565b6000610d5b8a8a8a868b610f74565b606980546001600160401b0319166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610da857607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610dee57600080fd5b505af1158015610e02573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610e7d5760405162461bcd60e51b81526004016109fa906157be565b6103e88161ffff1610158015610e9857506104008161ffff16105b610f1d5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a4016109fa565b6065805461ffff60481b1916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610fa657508115155b61101a576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109fa565b8061108f576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109fa565b606c54604080516001600160601b03193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b038281166000908152607160205260408120549092429261114b92600160801b90920481169116615817565b6001600160401b0316111592915050565b6073546001600160a01b031633146111865760405162461bcd60e51b81526004016109fa906157be565b62093a806001600160401b038216111561121f5760405162461bcd60e51b815260206004820152604e60248201527f506f6c79676f6e5a6b45564d3a3a73657454727573746564416767726567617460448201527f6f7254696d656f75743a20457863656564206d61782068616c7420616767726560648201526d19d85d1a5bdb881d1a5b595bdd5d60921b608482015260a4016109fa565b60655460ff166112c2576072546001600160401b03600160c01b9091048116908216106112c25760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a204e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109fa565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610f69565b60655460ff161561133b5760405162461bcd60e51b81526004016109fa90615842565b606954600160401b90046001600160a01b031633146113c25760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a204f6e6c7920747275737465642073657175656e63657200000000000060648201526084016109fa565b8051806114375760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e6365203120626174636800000060648201526084016109fa565b6103e881106114b0576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e79206261746368657360648201526084016109fa565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b85811015611915576000878281518110611503576115036158aa565b60200260200101519050600081606001516001600160401b03161115611693578361152d816158c0565b94505060008160000151805190602001208260200151836060015160405160200161155a939291906158e6565b60408051601f1981840301815291815281516020928301206001600160401b0388166000908152606690935291205490915081146115ee5760405162461bcd60e51b815260206004820152603d6024820152600080516020615eb483398151915260448201527f6f7263656420626174636865732064617461206d757374206d6174636800000060648201526084016109fa565b81606001516001600160401b031682604001516001600160401b0316101561168d5760405162461bcd60e51b81526020600482015260586024820152600080516020615eb483398151915260448201527f6f7263656420626174636865732074696d657374616d70206d757374206265206064820152773134b3b3b2b91037b91032b8bab0b6103a3430b71036b4b760411b608482015260a4016109fa565b50611808565b6020810151158061171c5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916116d69160040190815260200190565b6020604051808303816000875af11580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117199190615741565b15155b61178e5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d75737420657869737400000000000060648201526084016109fa565b805151620493e0116118085760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016109fa565b856001600160401b031681604001516001600160401b03161015801561183b57504281604001516001600160401b031611155b6118ad5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e676500000060648201526084016109fa565b805180516020918201208183015160408085015190516118d4948894939291339101615909565b60405160208183030381529060405280519060200120925084806118f7906158c0565b9550508060400151955050808061190d90615948565b9150506114e7565b506068546001600160401b03600160c01b909104811690831611156119885760405162461bcd60e51b81526020600482015260356024820152600080516020615eb48339815191526044820152746f7263652062617463686573206f766572666c6f7760581b60648201526084016109fa565b6068546000906119a890600160801b90046001600160401b031684615961565b6119bb906001600160401b031687615989565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611a9090339030908490611a7591906159a0565b606554600160581b90046001600160a01b03169291906139ce565b611a98613a39565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b025760405162461bcd60e51b81526004016109fa90615842565b6072546001600160401b038781166000908152606760205260409020600101544292611b3992600160c01b90910481169116615817565b6001600160401b03161115611bc25760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2054727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a4016109fa565b6103e8611bcf8888615961565b6001600160401b031610611c4b5760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2043616e60448201527f6e6f74207665726966792074686174206d616e7920626174636865730000000060648201526084016109fa565b611c5b8888888888888888613ad9565b611c6486613fca565b607254600160801b90046001600160401b0316600003611d2b57606980546001600160401b0319166001600160401b038881169182179092556000908152606d602052604090208590556072541615611cc857607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d0e57600080fd5b505af1158015611d22573d6000803e3d6000fd5b50505050611ddc565b611d33613a39565b607280546001600160401b0316906000611d4c836158c0565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611e5457506072546001600160401b03600160401b9091048116908216115b8015611e6f57506072546001600160401b0390811690821611155b611eed5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a4016109fa565b606a546001600160a01b03163314611f9757611f0881611115565b611f975760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2050656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a4016109fa565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b928390049098166001600160401b0319909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b15801561205357600080fd5b505af1158015612067573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e84600201546040516120b491815260200190565b60405180910390a3505050565b606e8054610b8990615784565b6120d6613974565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b600085858051906020012085858560405160200161211a959493929190615909565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff161580801561215b5750600054600160ff909116105b806121755750303b158015612175575060005460ff166001145b6121d85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109fa565b6000805460ff1916600117905580156121fb576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c81169190911790925560658054600160581b600160f81b031916600160581b8c851602179055606b805482168a84161790556070805490911691881691909117905561226360208601866150d4565b607380546001600160a01b0319166001600160a01b039290921691909117905561229360608601604087016150d4565b606980546001600160a01b0392909216600160401b02600160401b600160e01b03199092169190911790556122ce60c0860160a087016150d4565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa71135684905561232b60e0860160c08701614e6c565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556123626040860160208701614e6c565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561239e6080860160608701614e6c565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b199092169190911790556123da60a0860160808701615302565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e6124028482615a05565b50606f61240f8382615a05565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124456141b0565b801561248b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b031633146124c05760405162461bcd60e51b81526004016109fa906157be565b60698054600160401b600160e01b031916600160401b6001600160a01b038416021790556040517ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090610f69908390614e58565b6073546001600160a01b0316331461253e5760405162461bcd60e51b81526004016109fa906157be565b607380546001600160a01b0319166001600160a01b0383161790556040517f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190610f69908390614e58565b612591613974565b61259b6000614220565b565b6033546001600160a01b0316331461279c5760006125b9612bba565b9050806001600160401b0316826001600160401b0316116126305760405162461bcd60e51b815260206004820152603c6024820152600080516020615e1483398151915260448201527f746174653a20426174636820616c72656164792076657269666965640000000060648201526084016109fa565b6068546001600160401b03600160401b90910481169083161180159061267257506001600160401b038083166000908152606760205260409020600101541615155b6126eb5760405162461bcd60e51b81526020600482015260506024820152600080516020615e1483398151915260448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a4016109fa565b6001600160401b0380831660009081526067602052604090206001015442916127199162093a809116615817565b6001600160401b0316111561279a5760405162461bcd60e51b815260206004820152604d6024820152600080516020615e1483398151915260448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a4016109fa565b505b6127a4614272565b50565b60655460ff16156127ca5760405162461bcd60e51b81526004016109fa90615842565b6127db8989898989898989896142e2565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a161248b614272565b6073546001600160a01b031633146128605760405162461bcd60e51b81526004016109fa906157be565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610f6990831515815260200190565b6128b5613974565b606980546001600160401b0319166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81526000918291600160581b9091046001600160a01b0316906370a0823190612912903090600401614e58565b602060405180830381865afa15801561292f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129539190615741565b9050600061295f612bba565b6068546001600160401b03600160401b820481169161298f91600160801b8204811691600160c01b900416615961565b6129999190615817565b6129a39190615961565b6001600160401b031690506129b88183615ac4565b9250505090565b6129c7613974565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612a1e5760405162461bcd60e51b81526004016109fa906157be565b62093a806001600160401b0382161115612ab25760405162461bcd60e51b815260206004820152604960248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a20457863656564206d61782068616c74206167677265676174696f6064820152681b881d1a5b595bdd5d60ba1b608482015260a4016109fa565b60655460ff16612b47576072546001600160401b03600160801b909104811690821610612b475760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a204e65772074696d656f7574206d757374206265206c6f7765720060648201526084016109fa565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610f69565b612baa613974565b606f612bb68282615a05565b5050565b6072546000906001600160401b031615612bf757506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612c315760405162461bcd60e51b81526004016109fa906157be565b606e612c3d8282615a05565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610f699190614d18565b6073546001600160a01b03163314612c975760405162461bcd60e51b81526004016109fa906157be565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610f69565b60655460ff1615612d115760405162461bcd60e51b81526004016109fa90615842565b606c54600160a01b900460ff161515600114612d3f5760405162461bcd60e51b81526004016109fa90615ad8565b805180612da25760405162461bcd60e51b815260206004820152603f6024820152600080516020615e7483398151915260448201527f65733a204d75737420666f726365206174206c6561737420312062617463680060648201526084016109fa565b6103e88110612e135760405162461bcd60e51b81526020600482015260436024820152600080516020615e7483398151915260448201527f65733a2043616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a4016109fa565b6068546001600160401b03600160c01b8204811691612e3b918491600160801b900416615b41565b1115612e975760405162461bcd60e51b81526020600482015260376024820152600080516020615e74833981519152604482015276195cce88119bdc98d94818985d18da081a5b9d985b1a59604a1b60648201526084016109fa565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b848110156130c5576000868281518110612ee457612ee46158aa565b602002602001015190508380612ef9906158c0565b945050600081600001518051906020012082602001518360400151604051602001612f26939291906158e6565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612fc55760405162461bcd60e51b81526020600482015260426024820152600080516020615e7483398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109fa565b612fd0600188615989565b83036130675742620697808360400151612fea9190615817565b6001600160401b031611156130675760405162461bcd60e51b81526020600482015260496024820152600080516020615e7483398151915260448201527f65733a20466f72636564206261746368206973206e6f7420696e2074696d656f6064820152681d5d081c195c9a5bd960ba1b608482015260a4016109fa565b815180516020918201208184015160405161308a93889392914291339101615909565b60405160208183030381529060405280519060200120935085806130ad906158c0565b965050505080806130bd90615948565b915050612ec8565b50606880546001600160401b031916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b0319909216919091179286168502929092179091558554600160401b600160c01b03191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166131cf5760405162461bcd60e51b81526004016109fa90615b59565b6073546001600160a01b031633146131f95760405162461bcd60e51b81526004016109fa906157be565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561324957600080fd5b505af115801561325d573d6000803e3d6000fd5b5050505061259b614906565b613271613974565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133055760405162461bcd60e51b81526004016109fa90615bb6565b6133168989898989898989896142e2565b606980546001600160401b0319166001600160401b038881169182179092556000908152606d60205260409020859055607254161561336057607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156133a657600080fd5b505af11580156133ba573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff16156134425760405162461bcd60e51b81526004016109fa90615842565b606c54600160a01b900460ff1615156001146134705760405162461bcd60e51b81526004016109fa90615ad8565b600061347b60745490565b9050818111156134e05760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a204e6f7420656e6044820152696f756768206d6174696360b01b60648201526084016109fa565b620493e08351106135515760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b60648201526084016109fa565b60655461357090600160581b90046001600160a01b03163330846139ce565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa1580156135ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135de9190615741565b60688054919250600160c01b9091046001600160401b0316906018613602836158c0565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505083805190602001208142604051602001613643939291906158e6565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b0316600090815260669093529120553233036136e757606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613742565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161373993929190615c13565b60405180910390a25b50505050565b606a546001600160a01b031633146137725760405162461bcd60e51b81526004016109fa90615bb6565b6137828888888888888888613ad9565b606980546001600160401b0319166001600160401b038881169182179092556000908152606d6020526040902085905560725416156137cc57607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561381257600080fd5b505af1158015613826573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e15565b6073546001600160a01b031633146138915760405162461bcd60e51b81526004016109fa906157be565b606a80546001600160a01b0319166001600160a01b0383161790556040517f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90610f69908390614e58565b6138e4613974565b6001600160a01b0381166139495760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109fa565b6127a481614220565b61395a613974565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b0316331461259b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109fa565b6040516001600160a01b03808516602483015283166044820152606481018290526137429085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261495d565b6072546001600160401b03600160401b820481169116111561259b57607254600090613a7690600160401b90046001600160401b03166001615817565b9050613a8181611115565b156127a457607254600090600290613aa39084906001600160401b0316615961565b613aad9190615c46565b613ab79083615817565b9050613ac281611115565b15613ad057612bb681611e27565b612bb682611e27565b600080613ae4612bba565b90506001600160401b038a1615613c4a576072546001600160401b03908116908b161115613b9c5760405162461bcd60e51b815260206004820152605960248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20706560448201527f6e64696e6753746174654e756d206d757374206265206c657373206f7220657160648201527875616c207468616e206c61737450656e64696e67537461746560381b608482015260a4016109fa565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c445760405162461bcd60e51b815260206004820152604d6024820152600080516020615e3483398151915260448201527f69744e756d4261746368206d757374206d61746368207468652070656e64696e60648201526c0ce40e6e8c2e8ca40c4c2e8c6d609b1b608482015260a4016109fa565b50613d70565b6001600160401b0389166000908152606d6020526040902054915081613cd45760405162461bcd60e51b815260206004820152604460248201819052600080516020615e34833981519152908201527f69744e756d426174636820737461746520726f6f7420646f6573206e6f7420656064820152631e1a5cdd60e21b608482015260a4016109fa565b806001600160401b0316896001600160401b03161115613d705760405162461bcd60e51b815260206004820152605e6024820152600080516020615e3483398151915260448201527f69744e756d4261746368206d757374206265206c657373206f7220657175616c60648201527f207468616e2063757272656e744c617374566572696669656442617463680000608482015260a4016109fa565b806001600160401b0316886001600160401b031611613e185760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20666960448201527f6e616c4e65774261746368206d75737420626520626967676572207468616e206064820152770c6eae4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d60431b608482015260a4016109fa565b6000613e278a8a8a868b610f74565b90506000600080516020615e94833981519152600283604051613e4a9190615725565b602060405180830381855afa158015613e67573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613e8a9190615741565b613e949190615770565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613ed8918b918b918b9190600401615c6c565b602060405180830381865afa158015613ef5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f199190615ce6565b613f795760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20496e60448201526a3b30b634b210383937b7b360a91b60648201526084016109fa565b613fbc33613f87858d615961565b6001600160401b0316613f986128d7565b613fa291906159a0565b606554600160581b90046001600160a01b03169190614a34565b505050505050505050505050565b6000613fd4612bba565b905081600080613fe48484615961565b6001600160401b031690505b836001600160401b0316836001600160401b031614614096576001600160401b03808416600090815260676020526040902060655460018201549192610100909104811691614040911642615989565b111561407b57600181015461406590600160401b90046001600160401b031685615961565b614078906001600160401b031684615b41565b92505b60010154600160401b90046001600160401b03169250613ff0565b60006140a28383615989565b90508281101561411c5760006140b88285615989565b9050600c81116140c857806140cb565b600c5b90506140d88160036159a0565b6140e390600a615de7565b6065546140fc908390600160481b900461ffff16615de7565b60745461410991906159a0565b6141139190615ac4565b607455506141a8565b60006141288483615989565b9050600c8111614138578061413b565b600c5b9050600061414a8260036159a0565b61415590600a615de7565b60655461416e908490600160481b900461ffff16615de7565b60745461417b91906159a0565b6141859190615ac4565b90508060745460745461419891906159a0565b6141a29190615ac4565b60745550505b505050505050565b600054610100900460ff1661421b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109fa565b61259b335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156142c257600080fd5b505af11580156142d6573d6000803e3d6000fd5b5050505061259b614a64565b60006001600160401b038a1615614452576072546001600160401b03908116908b16111561439a5760405162461bcd60e51b81526020600482015260656024820152600080516020615e5483398151915260448201527f696e6753746174653a2070656e64696e6753746174654e756d206d757374206260648201527f65206c657373206f7220657175616c207468616e206c61737450656e64696e67608482015264537461746560d81b60a482015260c4016109fa565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b909204161461444c5760405162461bcd60e51b81526020600482015260596024820152600080516020615e5483398151915260448201527f696e6753746174653a20696e69744e756d4261746368206d757374206d6174636064820152780d040e8d0ca40e0cadcc8d2dcce40e6e8c2e8ca40c4c2e8c6d603b1b608482015260a4016109fa565b5061458b565b506001600160401b0387166000908152606d6020526040902054806144e65760405162461bcd60e51b81526020600482015260506024820152600080516020615e5483398151915260448201527f696e6753746174653a20696e69744e756d426174636820737461746520726f6f60648201526f1d08191bd95cc81b9bdd08195e1a5cdd60821b608482015260a4016109fa565b6069546001600160401b03908116908916111561458b5760405162461bcd60e51b81526020600482015260636024820152600080516020615e5483398151915260448201527f696e6753746174653a20696e69744e756d4261746368206d757374206265206c60648201527f657373206f7220657175616c207468616e206c617374566572696669656442616084820152620e8c6d60eb1b60a482015260c4016109fa565b6072546001600160401b03908116908a16118015906145bb5750896001600160401b0316896001600160401b0316115b80156145dc57506072546001600160401b03600160401b9091048116908a16115b61464d5760405162461bcd60e51b81526020600482015260486024820152600080516020615e5483398151915260448201527f696e6753746174653a2066696e616c50656e64696e6753746174654e756d20696064820152671b98dbdc9c9958dd60c21b608482015260a4016109fa565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146147065760405162461bcd60e51b81526020600482015260636024820152600080516020615e5483398151915260448201527f696e6753746174653a2066696e616c4e65774261746368206d7573742062652060648201527f657175616c207468616e2063757272656e744c617374566572696669656442616084820152620e8c6d60eb1b60a482015260c4016109fa565b6000614715898989858a610f74565b90506000600080516020615e948339815191526002836040516147389190615725565b602060405180830381855afa158015614755573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906147789190615741565b6147829190615770565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916147c6918a918a918a9190600401615c6c565b602060405180830381865afa1580156147e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148079190615ce6565b6148615760405162461bcd60e51b81526020600482015260376024820152600080516020615e5483398151915260448201527634b733a9ba30ba329d1024b73b30b634b210383937b7b360491b60648201526084016109fa565b6001600160401b038b16600090815260716020526040902060020154879003613fbc5760405162461bcd60e51b815260206004820152605b6024820152600080516020615e5483398151915260448201527f696e6753746174653a2053746f72656420726f6f74206d75737420626520646960648201527f66666572656e74207468616e206e657720737461746520726f6f740000000000608482015260a4016109fa565b60655460ff166149285760405162461bcd60e51b81526004016109fa90615b59565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006149b2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614abf9092919063ffffffff16565b805190915015614a2f57808060200190518101906149d09190615ce6565b614a2f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109fa565b505050565b6040516001600160a01b038316602482015260448101829052614a2f90849063a9059cbb60e01b90606401613a02565b60655460ff1615614a875760405162461bcd60e51b81526004016109fa90615842565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614ace8484600085614ad6565b949350505050565b606082471015614b375760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109fa565b600080866001600160a01b03168587604051614b539190615725565b60006040518083038185875af1925050503d8060008114614b90576040519150601f19603f3d011682016040523d82523d6000602084013e614b95565b606091505b5091509150614ba687838387614bb1565b979650505050505050565b60608315614c20578251600003614c19576001600160a01b0385163b614c195760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109fa565b5081614ace565b614ace8383815115614c355781518083602001fd5b8060405162461bcd60e51b81526004016109fa9190614d18565b80356001600160401b0381168114614c6657600080fd5b919050565b600080600080600060a08688031215614c8357600080fd5b614c8c86614c4f565b9450614c9a60208701614c4f565b9350614ca860408701614c4f565b94979396509394606081013594506080013592915050565b60005b83811015614cdb578181015183820152602001614cc3565b838111156137425750506000910152565b60008151808452614d04816020860160208601614cc0565b601f01601f19169290920160200192915050565b602081526000614d2b6020830184614cec565b9392505050565b8060408101831015614d4357600080fd5b92915050565b8060808101831015614d4357600080fd5b6000806000806000806000806101a0898b031215614d7757600080fd5b614d8089614c4f565b9750614d8e60208a01614c4f565b9650614d9c60408a01614c4f565b95506060890135945060808901359350614db98a60a08b01614d32565b9250614dc88a60e08b01614d49565b9150614dd88a6101608b01614d32565b90509295985092959890939650565b600060208284031215614df957600080fd5b813561ffff81168114614d2b57600080fd5b600080600080600060a08688031215614e2357600080fd5b614e2c86614c4f565b9450614e3a60208701614c4f565b94979496505050506040830135926060810135926080909101359150565b6001600160a01b0391909116815260200190565b600060208284031215614e7e57600080fd5b614d2b82614c4f565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614ebf57614ebf614e87565b60405290565b604051606081016001600160401b0381118282101715614ebf57614ebf614e87565b604051601f8201601f191681016001600160401b0381118282101715614f0f57614f0f614e87565b604052919050565b60006001600160401b03821115614f3057614f30614e87565b5060051b60200190565b600082601f830112614f4b57600080fd5b81356001600160401b03811115614f6457614f64614e87565b614f77601f8201601f1916602001614ee7565b818152846020838601011115614f8c57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614fbc57600080fd5b82356001600160401b0380821115614fd357600080fd5b818501915085601f830112614fe757600080fd5b8135614ffa614ff582614f17565b614ee7565b81815260059190911b8301840190848101908883111561501957600080fd5b8585015b838110156150b2578035858111156150355760008081fd5b86016080818c03601f190181131561504d5760008081fd5b615055614e9d565b89830135888111156150675760008081fd5b6150758e8c83870101614f3a565b8252506040808401358b830152606061508f818601614c4f565b8284015261509e848601614c4f565b90830152508552505091860191860161501d565b5098975050505050505050565b6001600160a01b03811681146127a457600080fd5b6000602082840312156150e657600080fd5b8135614d2b816150bf565b600080600080600060a0868803121561510957600080fd5b8535945060208601356001600160401b0381111561512657600080fd5b61513288828901614f3a565b9450506040860135925061514860608701614c4f565b91506080860135615158816150bf565b809150509295509295909350565b600080600080600080600080888a036101c081121561518457600080fd5b893561518f816150bf565b985060208a013561519f816150bf565b975060408a01356151af816150bf565b965060608a01356151bf816150bf565b955060e0607f19820112156151d357600080fd5b5060808901935061016089013592506101808901356001600160401b03808211156151fd57600080fd5b6152098c838d01614f3a565b93506101a08b013591508082111561522057600080fd5b5061522d8b828c01614f3a565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c03121561525c57600080fd5b6152658a614c4f565b985061527360208b01614c4f565b975061528160408b01614c4f565b965061528f60608b01614c4f565b955060808a0135945060a08a013593506152ac8b60c08c01614d32565b92506152bc8b6101008c01614d49565b91506152cc8b6101808c01614d32565b90509295985092959850929598565b6000602082840312156152ed57600080fd5b5035919050565b80151581146127a457600080fd5b60006020828403121561531457600080fd5b8135614d2b816152f4565b60006020828403121561533157600080fd5b81356001600160401b0381111561534757600080fd5b614ace84828501614f3a565b6000602080838503121561536657600080fd5b82356001600160401b038082111561537d57600080fd5b818501915085601f83011261539157600080fd5b813561539f614ff582614f17565b81815260059190911b830184019084810190888311156153be57600080fd5b8585015b838110156150b2578035858111156153da5760008081fd5b86016060818c03601f19018113156153f25760008081fd5b6153fa614ec5565b898301358881111561540c5760008081fd5b61541a8e8c83870101614f3a565b8252506040808401358b830152615432838501614c4f565b90820152855250509186019186016153c2565b6000806000806080858703121561545b57600080fd5b61546485614c4f565b93506020850135925061547960408601614c4f565b915061548760608601614c4f565b905092959194509250565b600080604083850312156154a557600080fd5b82356001600160401b038111156154bb57600080fd5b6154c785828601614f3a565b95602094909401359450505050565b600080604083850312156154e957600080fd5b823591506154f960208401614c4f565b90509250929050565b60208082526058908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2070656e60408201527f64696e6753746174654e756d206d757374206265206c657373206f7220657175606082015277616c207468616e206c61737450656e64696e67537461746560401b608082015260a00190565b6020808252604c90820152600080516020615df483398151915260408201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760608201526b040e6e8c2e8ca40c4c2e8c6d60a31b608082015260a00190565b6020808252604390820152600080516020615df483398151915260408201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786060820152621a5cdd60ea1b608082015260a00190565b6020808252605d90820152600080516020615df483398151915260408201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060608201527f7468616e2063757272656e744c61737456657269666965644261746368000000608082015260a00190565b60208082526057908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2066696e60408201527f616c4e65774261746368206d75737420626520626967676572207468616e20636060820152760eae4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d604b1b608082015260a00190565b60008251615737818460208701614cc0565b9190910192915050565b60006020828403121561575357600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b60008261577f5761577f61575a565b500690565b600181811c9082168061579857607f821691505b6020821081036157b857634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a204f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561583957615839615801565b01949350505050565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b038083168181036158dc576158dc615801565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6001600160601b0319166068820152607c0190565b60006001820161595a5761595a615801565b5060010190565b60006001600160401b038381169083168181101561598157615981615801565b039392505050565b60008282101561599b5761599b615801565b500390565b60008160001904831182151516156159ba576159ba615801565b500290565b601f821115614a2f57600081815260208120601f850160051c810160208610156159e65750805b601f850160051c820191505b818110156141a8578281556001016159f2565b81516001600160401b03811115615a1e57615a1e614e87565b615a3281615a2c8454615784565b846159bf565b602080601f831160018114615a675760008415615a4f5750858301515b600019600386901b1c1916600185901b1785556141a8565b600085815260208120601f198616915b82811015615a9657888601518255948401946001909101908401615a77565b5085821015615ab45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615ad357615ad361575a565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a204f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b60008219821115615b5457615b54615801565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a204f6e6c7920747275737465642061676772656761746f7200000000606082015260800190565b8381526001600160a01b0383166020820152606060408201819052600090615c3d90830184614cec565b95945050505050565b60006001600160401b0380841680615c6057615c6061575a565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615ca457848483379084018281529284019290600101615c84565b5050828760c0870137610100850181815286935091505b6001811015615cda578251825260209283019290910190600101615cbb565b50505095945050505050565b600060208284031215615cf857600080fd5b8151614d2b816152f4565b600181815b80851115615d3e578160001904821115615d2457615d24615801565b80851615615d3157918102915b93841c9390800290615d08565b509250929050565b600082615d5557506001614d43565b81615d6257506000614d43565b8160018114615d785760028114615d8257615d9e565b6001915050614d43565b60ff841115615d9357615d93615801565b50506001821b614d43565b5060208310610133831016604e8410600b8410161715615dc1575081810a614d43565b615dcb8383615d03565b8060001904821115615ddf57615ddf615801565b029392505050565b6000614d2b8383615d4656fe506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e69506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e637953506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20696e506f6c79676f6e5a6b45564d3a3a5f70726f766544697374696e637450656e64506f6c79676f6e5a6b45564d3a3a73657175656e6365466f726365426174636830644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a2046a2646970667358221220562c72c8c8d69f38d81dccdfc09c0be95e872f23db8696679b365ec9a030f1f664736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103925760003560e01c806396dc3d39116101e0578063cfa8ed4711610110578063e7a7ed02116100a8578063e7a7ed0214610905578063e8bf92ed1461091f578063eaeb077b14610932578063edc4112114610945578063f14916d614610958578063f2fde38b1461096b578063f851a4401461097e578063f8b823e414610991578063fe16564f1461099a57600080fd5b8063cfa8ed4714610860578063d02103ca1461087a578063d8d1091b1461088d578063d8f54db0146108a0578063d939b315146108b4578063dbc16976146108ce578063e0d17441146108d6578063e11f3f18146108e9578063e217cfd6146108fc57600080fd5b8063ab9fc5ef11610183578063ab9fc5ef14610759578063adc879e914610763578063afd23cbe1461077d578063b4d63f58146107a5578063b6b0b09714610805578063c0cad3021461081f578063c0ed84e014610832578063c89e42df1461083a578063cf1363061461084d57600080fd5b806396dc3d39146106dd57806399f5634e146106f05780639b796760146106f85780639c9f3dfe1461070b5780639eb831b91461071e5780639f0d039d14610726578063a3c573eb1461072e578063aa58bad61461074157600080fd5b80634a910e6a116102c6578063715018a61161025e578063715018a6146105e65780637215541a146105ee57806375c508b3146106015780637fcb365314610614578063837a473814610627578063841b24d7146106955780638b48931e146106af5780638c4a0af7146106b95780638da5cb5b146106cc57600080fd5b80634a910e6a1461052c5780635392c5e01461053f578063542028d51461055f5780635437988d14610567578063574f649e1461057a57806360943d6a1461058d5780636b8616ce146105a05780636ff512cc146105c0578063704b6c02146105d357600080fd5b80632d0889d3116103395780632d0889d314610475578063383b3be81461047f578063394218e9146104925780633c158267146104a5578063423fa856146104b857806345605267146104d2578063458c0477146104ec5780634834a343146104ff5780634a1a89a71461051257600080fd5b80630eaa86ea14610397578063107bf28c146103bd57806310a01a72146103d257806315064c96146103e75780631816b7e51461040457806319d8ac6114610417578063220d7899146104425780632987898314610455575b600080fd5b6103aa6103a5366004614c6b565b6109ad565b6040519081526020015b60405180910390f35b6103c5610b7c565b6040516103b49190614d18565b6103e56103e0366004614d5a565b610c0a565b005b6065546103f49060ff1681565b60405190151581526020016103b4565b6103e5610412366004614de7565b610e53565b60685461042a906001600160401b031681565b6040516001600160401b0390911681526020016103b4565b6103c5610450366004614e0b565b610f74565b606a54610468906001600160a01b031681565b6040516103b49190614e58565b6103aa620493e081565b6103f461048d366004614e6c565b611115565b6103e56104a0366004614e6c565b61115c565b6103e56104b3366004614fa9565b611318565b60685461042a90600160401b90046001600160401b031681565b60685461042a90600160801b90046001600160401b031681565b60725461042a906001600160401b031681565b6103e561050d366004614d5a565b611adf565b60725461042a90600160401b90046001600160401b031681565b6103e561053a366004614e6c565b611e27565b6103aa61054d366004614e6c565b606d6020526000908152604090205481565b6103c56120c1565b6103e56105753660046150d4565b6120ce565b6103aa6105883660046150f1565b6120f8565b6103e561059b366004615166565b61213b565b6103aa6105ae366004614e6c565b60666020526000908152604090205481565b6103e56105ce3660046150d4565b612496565b6103e56105e13660046150d4565b612514565b6103e5612589565b6103e56105fc366004614e6c565b61259d565b6103e561060f36600461523d565b6127a7565b60695461042a906001600160401b031681565b61066a6106353660046152db565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103b4565b60725461042a90600160c01b90046001600160401b031681565b61042a62093a8081565b6103e56106c7366004615302565b612836565b6033546001600160a01b0316610468565b6103e56106eb366004614e6c565b6128ad565b6103aa6128d7565b6103e5610706366004614e6c565b6129bf565b6103e5610719366004614e6c565b6129f4565b6103aa600c81565b6074546103aa565b607054610468906001600160a01b031681565b60655461042a9061010090046001600160401b031681565b61042a6206978081565b606c5461042a90600160a81b90046001600160401b031681565b60655461079290600160481b900461ffff1681565b60405161ffff90911681526020016103b4565b6107e06107b3366004614e6c565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103b4565b60655461046890600160581b90046001600160a01b031681565b6103e561082d36600461531f565b612ba2565b61042a612bba565b6103e561084836600461531f565b612c07565b6103e561085b366004614e6c565b612c6d565b60695461046890600160401b90046001600160a01b031681565b606c54610468906001600160a01b031681565b6103e561089b366004615353565b612cee565b606c546103f490600160a01b900460ff1681565b60725461042a90600160801b90046001600160401b031681565b6103e56131ad565b6103e56108e4366004615445565b613269565b6103e56108f736600461523d565b6132db565b61042a6103e881565b60685461042a90600160c01b90046001600160401b031681565b606b54610468906001600160a01b031681565b6103e5610940366004615492565b61341f565b6103e5610953366004614d5a565b613748565b6103e56109663660046150d4565b613867565b6103e56109793660046150d4565b6138dc565b607354610468906001600160a01b031681565b6103aa60745481565b6103e56109a83660046154d6565b613952565b60008060006109ba612bba565b90506001600160401b03881615610a57576072546001600160401b039081169089161115610a035760405162461bcd60e51b81526004016109fa90615502565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610a515760405162461bcd60e51b81526004016109fa90615580565b50610ac1565b6001600160401b0387166000908152606d6020526040902054915081610a8f5760405162461bcd60e51b81526004016109fa906155e0565b806001600160401b0316876001600160401b03161115610ac15760405162461bcd60e51b81526004016109fa90615637565b806001600160401b0316866001600160401b031611610af25760405162461bcd60e51b81526004016109fa906156a8565b6000610b018888888689610f74565b90506000600080516020615e94833981519152600283604051610b249190615725565b602060405180830381855afa158015610b41573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610b649190615741565b610b6e9190615770565b9a9950505050505050505050565b606f8054610b8990615784565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb590615784565b8015610c025780601f10610bd757610100808354040283529160200191610c02565b820191906000526020600020905b815481529060010190602001808311610be557829003601f168201915b505050505081565b610c12613974565b600080610c1d612bba565b90506001600160401b038a1615610cb1576072546001600160401b03908116908b161115610c5d5760405162461bcd60e51b81526004016109fa90615502565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610cab5760405162461bcd60e51b81526004016109fa90615580565b50610d1b565b6001600160401b0389166000908152606d6020526040902054915081610ce95760405162461bcd60e51b81526004016109fa906155e0565b806001600160401b0316896001600160401b03161115610d1b5760405162461bcd60e51b81526004016109fa90615637565b806001600160401b0316886001600160401b031611610d4c5760405162461bcd60e51b81526004016109fa906156a8565b6000610d5b8a8a8a868b610f74565b606980546001600160401b0319166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610da857607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610dee57600080fd5b505af1158015610e02573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610e7d5760405162461bcd60e51b81526004016109fa906157be565b6103e88161ffff1610158015610e9857506104008161ffff16105b610f1d5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a4016109fa565b6065805461ffff60481b1916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610fa657508115155b61101a576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109fa565b8061108f576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109fa565b606c54604080516001600160601b03193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b038281166000908152607160205260408120549092429261114b92600160801b90920481169116615817565b6001600160401b0316111592915050565b6073546001600160a01b031633146111865760405162461bcd60e51b81526004016109fa906157be565b62093a806001600160401b038216111561121f5760405162461bcd60e51b815260206004820152604e60248201527f506f6c79676f6e5a6b45564d3a3a73657454727573746564416767726567617460448201527f6f7254696d656f75743a20457863656564206d61782068616c7420616767726560648201526d19d85d1a5bdb881d1a5b595bdd5d60921b608482015260a4016109fa565b60655460ff166112c2576072546001600160401b03600160c01b9091048116908216106112c25760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a204e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109fa565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610f69565b60655460ff161561133b5760405162461bcd60e51b81526004016109fa90615842565b606954600160401b90046001600160a01b031633146113c25760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a204f6e6c7920747275737465642073657175656e63657200000000000060648201526084016109fa565b8051806114375760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e6365203120626174636800000060648201526084016109fa565b6103e881106114b0576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e79206261746368657360648201526084016109fa565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b85811015611915576000878281518110611503576115036158aa565b60200260200101519050600081606001516001600160401b03161115611693578361152d816158c0565b94505060008160000151805190602001208260200151836060015160405160200161155a939291906158e6565b60408051601f1981840301815291815281516020928301206001600160401b0388166000908152606690935291205490915081146115ee5760405162461bcd60e51b815260206004820152603d6024820152600080516020615eb483398151915260448201527f6f7263656420626174636865732064617461206d757374206d6174636800000060648201526084016109fa565b81606001516001600160401b031682604001516001600160401b0316101561168d5760405162461bcd60e51b81526020600482015260586024820152600080516020615eb483398151915260448201527f6f7263656420626174636865732074696d657374616d70206d757374206265206064820152773134b3b3b2b91037b91032b8bab0b6103a3430b71036b4b760411b608482015260a4016109fa565b50611808565b6020810151158061171c5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916116d69160040190815260200190565b6020604051808303816000875af11580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117199190615741565b15155b61178e5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d75737420657869737400000000000060648201526084016109fa565b805151620493e0116118085760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016109fa565b856001600160401b031681604001516001600160401b03161015801561183b57504281604001516001600160401b031611155b6118ad5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e676500000060648201526084016109fa565b805180516020918201208183015160408085015190516118d4948894939291339101615909565b60405160208183030381529060405280519060200120925084806118f7906158c0565b9550508060400151955050808061190d90615948565b9150506114e7565b506068546001600160401b03600160c01b909104811690831611156119885760405162461bcd60e51b81526020600482015260356024820152600080516020615eb48339815191526044820152746f7263652062617463686573206f766572666c6f7760581b60648201526084016109fa565b6068546000906119a890600160801b90046001600160401b031684615961565b6119bb906001600160401b031687615989565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611a9090339030908490611a7591906159a0565b606554600160581b90046001600160a01b03169291906139ce565b611a98613a39565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b025760405162461bcd60e51b81526004016109fa90615842565b6072546001600160401b038781166000908152606760205260409020600101544292611b3992600160c01b90910481169116615817565b6001600160401b03161115611bc25760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2054727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a4016109fa565b6103e8611bcf8888615961565b6001600160401b031610611c4b5760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2043616e60448201527f6e6f74207665726966792074686174206d616e7920626174636865730000000060648201526084016109fa565b611c5b8888888888888888613ad9565b611c6486613fca565b607254600160801b90046001600160401b0316600003611d2b57606980546001600160401b0319166001600160401b038881169182179092556000908152606d602052604090208590556072541615611cc857607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d0e57600080fd5b505af1158015611d22573d6000803e3d6000fd5b50505050611ddc565b611d33613a39565b607280546001600160401b0316906000611d4c836158c0565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611e5457506072546001600160401b03600160401b9091048116908216115b8015611e6f57506072546001600160401b0390811690821611155b611eed5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a4016109fa565b606a546001600160a01b03163314611f9757611f0881611115565b611f975760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2050656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a4016109fa565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b928390049098166001600160401b0319909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b15801561205357600080fd5b505af1158015612067573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e84600201546040516120b491815260200190565b60405180910390a3505050565b606e8054610b8990615784565b6120d6613974565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b600085858051906020012085858560405160200161211a959493929190615909565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff161580801561215b5750600054600160ff909116105b806121755750303b158015612175575060005460ff166001145b6121d85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109fa565b6000805460ff1916600117905580156121fb576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c81169190911790925560658054600160581b600160f81b031916600160581b8c851602179055606b805482168a84161790556070805490911691881691909117905561226360208601866150d4565b607380546001600160a01b0319166001600160a01b039290921691909117905561229360608601604087016150d4565b606980546001600160a01b0392909216600160401b02600160401b600160e01b03199092169190911790556122ce60c0860160a087016150d4565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa71135684905561232b60e0860160c08701614e6c565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556123626040860160208701614e6c565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561239e6080860160608701614e6c565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b199092169190911790556123da60a0860160808701615302565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e6124028482615a05565b50606f61240f8382615a05565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124456141b0565b801561248b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b031633146124c05760405162461bcd60e51b81526004016109fa906157be565b60698054600160401b600160e01b031916600160401b6001600160a01b038416021790556040517ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090610f69908390614e58565b6073546001600160a01b0316331461253e5760405162461bcd60e51b81526004016109fa906157be565b607380546001600160a01b0319166001600160a01b0383161790556040517f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190610f69908390614e58565b612591613974565b61259b6000614220565b565b6033546001600160a01b0316331461279c5760006125b9612bba565b9050806001600160401b0316826001600160401b0316116126305760405162461bcd60e51b815260206004820152603c6024820152600080516020615e1483398151915260448201527f746174653a20426174636820616c72656164792076657269666965640000000060648201526084016109fa565b6068546001600160401b03600160401b90910481169083161180159061267257506001600160401b038083166000908152606760205260409020600101541615155b6126eb5760405162461bcd60e51b81526020600482015260506024820152600080516020615e1483398151915260448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a4016109fa565b6001600160401b0380831660009081526067602052604090206001015442916127199162093a809116615817565b6001600160401b0316111561279a5760405162461bcd60e51b815260206004820152604d6024820152600080516020615e1483398151915260448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a4016109fa565b505b6127a4614272565b50565b60655460ff16156127ca5760405162461bcd60e51b81526004016109fa90615842565b6127db8989898989898989896142e2565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a161248b614272565b6073546001600160a01b031633146128605760405162461bcd60e51b81526004016109fa906157be565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610f6990831515815260200190565b6128b5613974565b606980546001600160401b0319166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81526000918291600160581b9091046001600160a01b0316906370a0823190612912903090600401614e58565b602060405180830381865afa15801561292f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129539190615741565b9050600061295f612bba565b6068546001600160401b03600160401b820481169161298f91600160801b8204811691600160c01b900416615961565b6129999190615817565b6129a39190615961565b6001600160401b031690506129b88183615ac4565b9250505090565b6129c7613974565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612a1e5760405162461bcd60e51b81526004016109fa906157be565b62093a806001600160401b0382161115612ab25760405162461bcd60e51b815260206004820152604960248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a20457863656564206d61782068616c74206167677265676174696f6064820152681b881d1a5b595bdd5d60ba1b608482015260a4016109fa565b60655460ff16612b47576072546001600160401b03600160801b909104811690821610612b475760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a204e65772074696d656f7574206d757374206265206c6f7765720060648201526084016109fa565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610f69565b612baa613974565b606f612bb68282615a05565b5050565b6072546000906001600160401b031615612bf757506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612c315760405162461bcd60e51b81526004016109fa906157be565b606e612c3d8282615a05565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610f699190614d18565b6073546001600160a01b03163314612c975760405162461bcd60e51b81526004016109fa906157be565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610f69565b60655460ff1615612d115760405162461bcd60e51b81526004016109fa90615842565b606c54600160a01b900460ff161515600114612d3f5760405162461bcd60e51b81526004016109fa90615ad8565b805180612da25760405162461bcd60e51b815260206004820152603f6024820152600080516020615e7483398151915260448201527f65733a204d75737420666f726365206174206c6561737420312062617463680060648201526084016109fa565b6103e88110612e135760405162461bcd60e51b81526020600482015260436024820152600080516020615e7483398151915260448201527f65733a2043616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a4016109fa565b6068546001600160401b03600160c01b8204811691612e3b918491600160801b900416615b41565b1115612e975760405162461bcd60e51b81526020600482015260376024820152600080516020615e74833981519152604482015276195cce88119bdc98d94818985d18da081a5b9d985b1a59604a1b60648201526084016109fa565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b848110156130c5576000868281518110612ee457612ee46158aa565b602002602001015190508380612ef9906158c0565b945050600081600001518051906020012082602001518360400151604051602001612f26939291906158e6565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612fc55760405162461bcd60e51b81526020600482015260426024820152600080516020615e7483398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109fa565b612fd0600188615989565b83036130675742620697808360400151612fea9190615817565b6001600160401b031611156130675760405162461bcd60e51b81526020600482015260496024820152600080516020615e7483398151915260448201527f65733a20466f72636564206261746368206973206e6f7420696e2074696d656f6064820152681d5d081c195c9a5bd960ba1b608482015260a4016109fa565b815180516020918201208184015160405161308a93889392914291339101615909565b60405160208183030381529060405280519060200120935085806130ad906158c0565b965050505080806130bd90615948565b915050612ec8565b50606880546001600160401b031916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b0319909216919091179286168502929092179091558554600160401b600160c01b03191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166131cf5760405162461bcd60e51b81526004016109fa90615b59565b6073546001600160a01b031633146131f95760405162461bcd60e51b81526004016109fa906157be565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561324957600080fd5b505af115801561325d573d6000803e3d6000fd5b5050505061259b614906565b613271613974565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133055760405162461bcd60e51b81526004016109fa90615bb6565b6133168989898989898989896142e2565b606980546001600160401b0319166001600160401b038881169182179092556000908152606d60205260409020859055607254161561336057607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156133a657600080fd5b505af11580156133ba573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff16156134425760405162461bcd60e51b81526004016109fa90615842565b606c54600160a01b900460ff1615156001146134705760405162461bcd60e51b81526004016109fa90615ad8565b600061347b60745490565b9050818111156134e05760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a204e6f7420656e6044820152696f756768206d6174696360b01b60648201526084016109fa565b620493e08351106135515760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b60648201526084016109fa565b60655461357090600160581b90046001600160a01b03163330846139ce565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa1580156135ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135de9190615741565b60688054919250600160c01b9091046001600160401b0316906018613602836158c0565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505083805190602001208142604051602001613643939291906158e6565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b0316600090815260669093529120553233036136e757606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613742565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161373993929190615c13565b60405180910390a25b50505050565b606a546001600160a01b031633146137725760405162461bcd60e51b81526004016109fa90615bb6565b6137828888888888888888613ad9565b606980546001600160401b0319166001600160401b038881169182179092556000908152606d6020526040902085905560725416156137cc57607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561381257600080fd5b505af1158015613826573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e15565b6073546001600160a01b031633146138915760405162461bcd60e51b81526004016109fa906157be565b606a80546001600160a01b0319166001600160a01b0383161790556040517f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90610f69908390614e58565b6138e4613974565b6001600160a01b0381166139495760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109fa565b6127a481614220565b61395a613974565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b0316331461259b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109fa565b6040516001600160a01b03808516602483015283166044820152606481018290526137429085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261495d565b6072546001600160401b03600160401b820481169116111561259b57607254600090613a7690600160401b90046001600160401b03166001615817565b9050613a8181611115565b156127a457607254600090600290613aa39084906001600160401b0316615961565b613aad9190615c46565b613ab79083615817565b9050613ac281611115565b15613ad057612bb681611e27565b612bb682611e27565b600080613ae4612bba565b90506001600160401b038a1615613c4a576072546001600160401b03908116908b161115613b9c5760405162461bcd60e51b815260206004820152605960248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20706560448201527f6e64696e6753746174654e756d206d757374206265206c657373206f7220657160648201527875616c207468616e206c61737450656e64696e67537461746560381b608482015260a4016109fa565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c445760405162461bcd60e51b815260206004820152604d6024820152600080516020615e3483398151915260448201527f69744e756d4261746368206d757374206d61746368207468652070656e64696e60648201526c0ce40e6e8c2e8ca40c4c2e8c6d609b1b608482015260a4016109fa565b50613d70565b6001600160401b0389166000908152606d6020526040902054915081613cd45760405162461bcd60e51b815260206004820152604460248201819052600080516020615e34833981519152908201527f69744e756d426174636820737461746520726f6f7420646f6573206e6f7420656064820152631e1a5cdd60e21b608482015260a4016109fa565b806001600160401b0316896001600160401b03161115613d705760405162461bcd60e51b815260206004820152605e6024820152600080516020615e3483398151915260448201527f69744e756d4261746368206d757374206265206c657373206f7220657175616c60648201527f207468616e2063757272656e744c617374566572696669656442617463680000608482015260a4016109fa565b806001600160401b0316886001600160401b031611613e185760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20666960448201527f6e616c4e65774261746368206d75737420626520626967676572207468616e206064820152770c6eae4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d60431b608482015260a4016109fa565b6000613e278a8a8a868b610f74565b90506000600080516020615e94833981519152600283604051613e4a9190615725565b602060405180830381855afa158015613e67573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613e8a9190615741565b613e949190615770565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613ed8918b918b918b9190600401615c6c565b602060405180830381865afa158015613ef5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f199190615ce6565b613f795760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20496e60448201526a3b30b634b210383937b7b360a91b60648201526084016109fa565b613fbc33613f87858d615961565b6001600160401b0316613f986128d7565b613fa291906159a0565b606554600160581b90046001600160a01b03169190614a34565b505050505050505050505050565b6000613fd4612bba565b905081600080613fe48484615961565b6001600160401b031690505b836001600160401b0316836001600160401b031614614096576001600160401b03808416600090815260676020526040902060655460018201549192610100909104811691614040911642615989565b111561407b57600181015461406590600160401b90046001600160401b031685615961565b614078906001600160401b031684615b41565b92505b60010154600160401b90046001600160401b03169250613ff0565b60006140a28383615989565b90508281101561411c5760006140b88285615989565b9050600c81116140c857806140cb565b600c5b90506140d88160036159a0565b6140e390600a615de7565b6065546140fc908390600160481b900461ffff16615de7565b60745461410991906159a0565b6141139190615ac4565b607455506141a8565b60006141288483615989565b9050600c8111614138578061413b565b600c5b9050600061414a8260036159a0565b61415590600a615de7565b60655461416e908490600160481b900461ffff16615de7565b60745461417b91906159a0565b6141859190615ac4565b90508060745460745461419891906159a0565b6141a29190615ac4565b60745550505b505050505050565b600054610100900460ff1661421b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109fa565b61259b335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156142c257600080fd5b505af11580156142d6573d6000803e3d6000fd5b5050505061259b614a64565b60006001600160401b038a1615614452576072546001600160401b03908116908b16111561439a5760405162461bcd60e51b81526020600482015260656024820152600080516020615e5483398151915260448201527f696e6753746174653a2070656e64696e6753746174654e756d206d757374206260648201527f65206c657373206f7220657175616c207468616e206c61737450656e64696e67608482015264537461746560d81b60a482015260c4016109fa565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b909204161461444c5760405162461bcd60e51b81526020600482015260596024820152600080516020615e5483398151915260448201527f696e6753746174653a20696e69744e756d4261746368206d757374206d6174636064820152780d040e8d0ca40e0cadcc8d2dcce40e6e8c2e8ca40c4c2e8c6d603b1b608482015260a4016109fa565b5061458b565b506001600160401b0387166000908152606d6020526040902054806144e65760405162461bcd60e51b81526020600482015260506024820152600080516020615e5483398151915260448201527f696e6753746174653a20696e69744e756d426174636820737461746520726f6f60648201526f1d08191bd95cc81b9bdd08195e1a5cdd60821b608482015260a4016109fa565b6069546001600160401b03908116908916111561458b5760405162461bcd60e51b81526020600482015260636024820152600080516020615e5483398151915260448201527f696e6753746174653a20696e69744e756d4261746368206d757374206265206c60648201527f657373206f7220657175616c207468616e206c617374566572696669656442616084820152620e8c6d60eb1b60a482015260c4016109fa565b6072546001600160401b03908116908a16118015906145bb5750896001600160401b0316896001600160401b0316115b80156145dc57506072546001600160401b03600160401b9091048116908a16115b61464d5760405162461bcd60e51b81526020600482015260486024820152600080516020615e5483398151915260448201527f696e6753746174653a2066696e616c50656e64696e6753746174654e756d20696064820152671b98dbdc9c9958dd60c21b608482015260a4016109fa565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146147065760405162461bcd60e51b81526020600482015260636024820152600080516020615e5483398151915260448201527f696e6753746174653a2066696e616c4e65774261746368206d7573742062652060648201527f657175616c207468616e2063757272656e744c617374566572696669656442616084820152620e8c6d60eb1b60a482015260c4016109fa565b6000614715898989858a610f74565b90506000600080516020615e948339815191526002836040516147389190615725565b602060405180830381855afa158015614755573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906147789190615741565b6147829190615770565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916147c6918a918a918a9190600401615c6c565b602060405180830381865afa1580156147e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148079190615ce6565b6148615760405162461bcd60e51b81526020600482015260376024820152600080516020615e5483398151915260448201527634b733a9ba30ba329d1024b73b30b634b210383937b7b360491b60648201526084016109fa565b6001600160401b038b16600090815260716020526040902060020154879003613fbc5760405162461bcd60e51b815260206004820152605b6024820152600080516020615e5483398151915260448201527f696e6753746174653a2053746f72656420726f6f74206d75737420626520646960648201527f66666572656e74207468616e206e657720737461746520726f6f740000000000608482015260a4016109fa565b60655460ff166149285760405162461bcd60e51b81526004016109fa90615b59565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006149b2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614abf9092919063ffffffff16565b805190915015614a2f57808060200190518101906149d09190615ce6565b614a2f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109fa565b505050565b6040516001600160a01b038316602482015260448101829052614a2f90849063a9059cbb60e01b90606401613a02565b60655460ff1615614a875760405162461bcd60e51b81526004016109fa90615842565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614ace8484600085614ad6565b949350505050565b606082471015614b375760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109fa565b600080866001600160a01b03168587604051614b539190615725565b60006040518083038185875af1925050503d8060008114614b90576040519150601f19603f3d011682016040523d82523d6000602084013e614b95565b606091505b5091509150614ba687838387614bb1565b979650505050505050565b60608315614c20578251600003614c19576001600160a01b0385163b614c195760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109fa565b5081614ace565b614ace8383815115614c355781518083602001fd5b8060405162461bcd60e51b81526004016109fa9190614d18565b80356001600160401b0381168114614c6657600080fd5b919050565b600080600080600060a08688031215614c8357600080fd5b614c8c86614c4f565b9450614c9a60208701614c4f565b9350614ca860408701614c4f565b94979396509394606081013594506080013592915050565b60005b83811015614cdb578181015183820152602001614cc3565b838111156137425750506000910152565b60008151808452614d04816020860160208601614cc0565b601f01601f19169290920160200192915050565b602081526000614d2b6020830184614cec565b9392505050565b8060408101831015614d4357600080fd5b92915050565b8060808101831015614d4357600080fd5b6000806000806000806000806101a0898b031215614d7757600080fd5b614d8089614c4f565b9750614d8e60208a01614c4f565b9650614d9c60408a01614c4f565b95506060890135945060808901359350614db98a60a08b01614d32565b9250614dc88a60e08b01614d49565b9150614dd88a6101608b01614d32565b90509295985092959890939650565b600060208284031215614df957600080fd5b813561ffff81168114614d2b57600080fd5b600080600080600060a08688031215614e2357600080fd5b614e2c86614c4f565b9450614e3a60208701614c4f565b94979496505050506040830135926060810135926080909101359150565b6001600160a01b0391909116815260200190565b600060208284031215614e7e57600080fd5b614d2b82614c4f565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614ebf57614ebf614e87565b60405290565b604051606081016001600160401b0381118282101715614ebf57614ebf614e87565b604051601f8201601f191681016001600160401b0381118282101715614f0f57614f0f614e87565b604052919050565b60006001600160401b03821115614f3057614f30614e87565b5060051b60200190565b600082601f830112614f4b57600080fd5b81356001600160401b03811115614f6457614f64614e87565b614f77601f8201601f1916602001614ee7565b818152846020838601011115614f8c57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614fbc57600080fd5b82356001600160401b0380821115614fd357600080fd5b818501915085601f830112614fe757600080fd5b8135614ffa614ff582614f17565b614ee7565b81815260059190911b8301840190848101908883111561501957600080fd5b8585015b838110156150b2578035858111156150355760008081fd5b86016080818c03601f190181131561504d5760008081fd5b615055614e9d565b89830135888111156150675760008081fd5b6150758e8c83870101614f3a565b8252506040808401358b830152606061508f818601614c4f565b8284015261509e848601614c4f565b90830152508552505091860191860161501d565b5098975050505050505050565b6001600160a01b03811681146127a457600080fd5b6000602082840312156150e657600080fd5b8135614d2b816150bf565b600080600080600060a0868803121561510957600080fd5b8535945060208601356001600160401b0381111561512657600080fd5b61513288828901614f3a565b9450506040860135925061514860608701614c4f565b91506080860135615158816150bf565b809150509295509295909350565b600080600080600080600080888a036101c081121561518457600080fd5b893561518f816150bf565b985060208a013561519f816150bf565b975060408a01356151af816150bf565b965060608a01356151bf816150bf565b955060e0607f19820112156151d357600080fd5b5060808901935061016089013592506101808901356001600160401b03808211156151fd57600080fd5b6152098c838d01614f3a565b93506101a08b013591508082111561522057600080fd5b5061522d8b828c01614f3a565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c03121561525c57600080fd5b6152658a614c4f565b985061527360208b01614c4f565b975061528160408b01614c4f565b965061528f60608b01614c4f565b955060808a0135945060a08a013593506152ac8b60c08c01614d32565b92506152bc8b6101008c01614d49565b91506152cc8b6101808c01614d32565b90509295985092959850929598565b6000602082840312156152ed57600080fd5b5035919050565b80151581146127a457600080fd5b60006020828403121561531457600080fd5b8135614d2b816152f4565b60006020828403121561533157600080fd5b81356001600160401b0381111561534757600080fd5b614ace84828501614f3a565b6000602080838503121561536657600080fd5b82356001600160401b038082111561537d57600080fd5b818501915085601f83011261539157600080fd5b813561539f614ff582614f17565b81815260059190911b830184019084810190888311156153be57600080fd5b8585015b838110156150b2578035858111156153da5760008081fd5b86016060818c03601f19018113156153f25760008081fd5b6153fa614ec5565b898301358881111561540c5760008081fd5b61541a8e8c83870101614f3a565b8252506040808401358b830152615432838501614c4f565b90820152855250509186019186016153c2565b6000806000806080858703121561545b57600080fd5b61546485614c4f565b93506020850135925061547960408601614c4f565b915061548760608601614c4f565b905092959194509250565b600080604083850312156154a557600080fd5b82356001600160401b038111156154bb57600080fd5b6154c785828601614f3a565b95602094909401359450505050565b600080604083850312156154e957600080fd5b823591506154f960208401614c4f565b90509250929050565b60208082526058908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2070656e60408201527f64696e6753746174654e756d206d757374206265206c657373206f7220657175606082015277616c207468616e206c61737450656e64696e67537461746560401b608082015260a00190565b6020808252604c90820152600080516020615df483398151915260408201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760608201526b040e6e8c2e8ca40c4c2e8c6d60a31b608082015260a00190565b6020808252604390820152600080516020615df483398151915260408201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786060820152621a5cdd60ea1b608082015260a00190565b6020808252605d90820152600080516020615df483398151915260408201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060608201527f7468616e2063757272656e744c61737456657269666965644261746368000000608082015260a00190565b60208082526057908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2066696e60408201527f616c4e65774261746368206d75737420626520626967676572207468616e20636060820152760eae4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d604b1b608082015260a00190565b60008251615737818460208701614cc0565b9190910192915050565b60006020828403121561575357600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b60008261577f5761577f61575a565b500690565b600181811c9082168061579857607f821691505b6020821081036157b857634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a204f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561583957615839615801565b01949350505050565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b038083168181036158dc576158dc615801565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6001600160601b0319166068820152607c0190565b60006001820161595a5761595a615801565b5060010190565b60006001600160401b038381169083168181101561598157615981615801565b039392505050565b60008282101561599b5761599b615801565b500390565b60008160001904831182151516156159ba576159ba615801565b500290565b601f821115614a2f57600081815260208120601f850160051c810160208610156159e65750805b601f850160051c820191505b818110156141a8578281556001016159f2565b81516001600160401b03811115615a1e57615a1e614e87565b615a3281615a2c8454615784565b846159bf565b602080601f831160018114615a675760008415615a4f5750858301515b600019600386901b1c1916600185901b1785556141a8565b600085815260208120601f198616915b82811015615a9657888601518255948401946001909101908401615a77565b5085821015615ab45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615ad357615ad361575a565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a204f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b60008219821115615b5457615b54615801565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a204f6e6c7920747275737465642061676772656761746f7200000000606082015260800190565b8381526001600160a01b0383166020820152606060408201819052600090615c3d90830184614cec565b95945050505050565b60006001600160401b0380841680615c6057615c6061575a565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615ca457848483379084018281529284019290600101615c84565b5050828760c0870137610100850181815286935091505b6001811015615cda578251825260209283019290910190600101615cbb565b50505095945050505050565b600060208284031215615cf857600080fd5b8151614d2b816152f4565b600181815b80851115615d3e578160001904821115615d2457615d24615801565b80851615615d3157918102915b93841c9390800290615d08565b509250929050565b600082615d5557506001614d43565b81615d6257506000614d43565b8160018114615d785760028114615d8257615d9e565b6001915050614d43565b60ff841115615d9357615d93615801565b50506001821b614d43565b5060208310610133831016604e8410600b8410161715615dc1575081810a614d43565b615dcb8383615d03565b8060001904821115615ddf57615ddf615801565b029392505050565b6000614d2b8383615d4656fe506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e69506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e637953506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20696e506f6c79676f6e5a6b45564d3a3a5f70726f766544697374696e637450656e64506f6c79676f6e5a6b45564d3a3a73657175656e6365466f726365426174636830644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a2046a2646970667358221220562c72c8c8d69f38d81dccdfc09c0be95e872f23db8696679b365ec9a030f1f664736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50615f0980620000216000396000f3fe608060405234801561001057600080fd5b50600436106103925760003560e01c806396dc3d39116101e0578063cfa8ed4711610110578063e7a7ed02116100a8578063e7a7ed0214610905578063e8bf92ed1461091f578063eaeb077b14610932578063edc4112114610945578063f14916d614610958578063f2fde38b1461096b578063f851a4401461097e578063f8b823e414610991578063fe16564f1461099a57600080fd5b8063cfa8ed4714610860578063d02103ca1461087a578063d8d1091b1461088d578063d8f54db0146108a0578063d939b315146108b4578063dbc16976146108ce578063e0d17441146108d6578063e11f3f18146108e9578063e217cfd6146108fc57600080fd5b8063ab9fc5ef11610183578063ab9fc5ef14610759578063adc879e914610763578063afd23cbe1461077d578063b4d63f58146107a5578063b6b0b09714610805578063c0cad3021461081f578063c0ed84e014610832578063c89e42df1461083a578063cf1363061461084d57600080fd5b806396dc3d39146106dd57806399f5634e146106f05780639b796760146106f85780639c9f3dfe1461070b5780639eb831b91461071e5780639f0d039d14610726578063a3c573eb1461072e578063aa58bad61461074157600080fd5b80634a910e6a116102c6578063715018a61161025e578063715018a6146105e65780637215541a146105ee57806375c508b3146106015780637fcb365314610614578063837a473814610627578063841b24d7146106955780638b48931e146106af5780638c4a0af7146106b95780638da5cb5b146106cc57600080fd5b80634a910e6a1461052c5780635392c5e01461053f578063542028d51461055f5780635437988d14610567578063574f649e1461057a57806360943d6a1461058d5780636b8616ce146105a05780636ff512cc146105c0578063704b6c02146105d357600080fd5b80632d0889d3116103395780632d0889d314610475578063383b3be81461047f578063394218e9146104925780633c158267146104a5578063423fa856146104b857806345605267146104d2578063458c0477146104ec5780634834a343146104ff5780634a1a89a71461051257600080fd5b80630eaa86ea14610397578063107bf28c146103bd57806310a01a72146103d257806315064c96146103e75780631816b7e51461040457806319d8ac6114610417578063220d7899146104425780632987898314610455575b600080fd5b6103aa6103a5366004614c6b565b6109ad565b6040519081526020015b60405180910390f35b6103c5610b7c565b6040516103b49190614d18565b6103e56103e0366004614d5a565b610c0a565b005b6065546103f49060ff1681565b60405190151581526020016103b4565b6103e5610412366004614de7565b610e53565b60685461042a906001600160401b031681565b6040516001600160401b0390911681526020016103b4565b6103c5610450366004614e0b565b610f74565b606a54610468906001600160a01b031681565b6040516103b49190614e58565b6103aa620493e081565b6103f461048d366004614e6c565b611115565b6103e56104a0366004614e6c565b61115c565b6103e56104b3366004614fa9565b611318565b60685461042a90600160401b90046001600160401b031681565b60685461042a90600160801b90046001600160401b031681565b60725461042a906001600160401b031681565b6103e561050d366004614d5a565b611adf565b60725461042a90600160401b90046001600160401b031681565b6103e561053a366004614e6c565b611e27565b6103aa61054d366004614e6c565b606d6020526000908152604090205481565b6103c56120c1565b6103e56105753660046150d4565b6120ce565b6103aa6105883660046150f1565b6120f8565b6103e561059b366004615166565b61213b565b6103aa6105ae366004614e6c565b60666020526000908152604090205481565b6103e56105ce3660046150d4565b612496565b6103e56105e13660046150d4565b612514565b6103e5612589565b6103e56105fc366004614e6c565b61259d565b6103e561060f36600461523d565b6127a7565b60695461042a906001600160401b031681565b61066a6106353660046152db565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103b4565b60725461042a90600160c01b90046001600160401b031681565b61042a62093a8081565b6103e56106c7366004615302565b612836565b6033546001600160a01b0316610468565b6103e56106eb366004614e6c565b6128ad565b6103aa6128d7565b6103e5610706366004614e6c565b6129bf565b6103e5610719366004614e6c565b6129f4565b6103aa600c81565b6074546103aa565b607054610468906001600160a01b031681565b60655461042a9061010090046001600160401b031681565b61042a6206978081565b606c5461042a90600160a81b90046001600160401b031681565b60655461079290600160481b900461ffff1681565b60405161ffff90911681526020016103b4565b6107e06107b3366004614e6c565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103b4565b60655461046890600160581b90046001600160a01b031681565b6103e561082d36600461531f565b612ba2565b61042a612bba565b6103e561084836600461531f565b612c07565b6103e561085b366004614e6c565b612c6d565b60695461046890600160401b90046001600160a01b031681565b606c54610468906001600160a01b031681565b6103e561089b366004615353565b612cee565b606c546103f490600160a01b900460ff1681565b60725461042a90600160801b90046001600160401b031681565b6103e56131ad565b6103e56108e4366004615445565b613269565b6103e56108f736600461523d565b6132db565b61042a6103e881565b60685461042a90600160c01b90046001600160401b031681565b606b54610468906001600160a01b031681565b6103e5610940366004615492565b61341f565b6103e5610953366004614d5a565b613748565b6103e56109663660046150d4565b613867565b6103e56109793660046150d4565b6138dc565b607354610468906001600160a01b031681565b6103aa60745481565b6103e56109a83660046154d6565b613952565b60008060006109ba612bba565b90506001600160401b03881615610a57576072546001600160401b039081169089161115610a035760405162461bcd60e51b81526004016109fa90615502565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610a515760405162461bcd60e51b81526004016109fa90615580565b50610ac1565b6001600160401b0387166000908152606d6020526040902054915081610a8f5760405162461bcd60e51b81526004016109fa906155e0565b806001600160401b0316876001600160401b03161115610ac15760405162461bcd60e51b81526004016109fa90615637565b806001600160401b0316866001600160401b031611610af25760405162461bcd60e51b81526004016109fa906156a8565b6000610b018888888689610f74565b90506000600080516020615e94833981519152600283604051610b249190615725565b602060405180830381855afa158015610b41573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610b649190615741565b610b6e9190615770565b9a9950505050505050505050565b606f8054610b8990615784565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb590615784565b8015610c025780601f10610bd757610100808354040283529160200191610c02565b820191906000526020600020905b815481529060010190602001808311610be557829003601f168201915b505050505081565b610c12613974565b600080610c1d612bba565b90506001600160401b038a1615610cb1576072546001600160401b03908116908b161115610c5d5760405162461bcd60e51b81526004016109fa90615502565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610cab5760405162461bcd60e51b81526004016109fa90615580565b50610d1b565b6001600160401b0389166000908152606d6020526040902054915081610ce95760405162461bcd60e51b81526004016109fa906155e0565b806001600160401b0316896001600160401b03161115610d1b5760405162461bcd60e51b81526004016109fa90615637565b806001600160401b0316886001600160401b031611610d4c5760405162461bcd60e51b81526004016109fa906156a8565b6000610d5b8a8a8a868b610f74565b606980546001600160401b0319166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610da857607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610dee57600080fd5b505af1158015610e02573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610e7d5760405162461bcd60e51b81526004016109fa906157be565b6103e88161ffff1610158015610e9857506104008161ffff16105b610f1d5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a4016109fa565b6065805461ffff60481b1916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610fa657508115155b61101a576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109fa565b8061108f576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109fa565b606c54604080516001600160601b03193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b038281166000908152607160205260408120549092429261114b92600160801b90920481169116615817565b6001600160401b0316111592915050565b6073546001600160a01b031633146111865760405162461bcd60e51b81526004016109fa906157be565b62093a806001600160401b038216111561121f5760405162461bcd60e51b815260206004820152604e60248201527f506f6c79676f6e5a6b45564d3a3a73657454727573746564416767726567617460448201527f6f7254696d656f75743a20457863656564206d61782068616c7420616767726560648201526d19d85d1a5bdb881d1a5b595bdd5d60921b608482015260a4016109fa565b60655460ff166112c2576072546001600160401b03600160c01b9091048116908216106112c25760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a204e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109fa565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610f69565b60655460ff161561133b5760405162461bcd60e51b81526004016109fa90615842565b606954600160401b90046001600160a01b031633146113c25760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a204f6e6c7920747275737465642073657175656e63657200000000000060648201526084016109fa565b8051806114375760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e6365203120626174636800000060648201526084016109fa565b6103e881106114b0576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e79206261746368657360648201526084016109fa565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b85811015611915576000878281518110611503576115036158aa565b60200260200101519050600081606001516001600160401b03161115611693578361152d816158c0565b94505060008160000151805190602001208260200151836060015160405160200161155a939291906158e6565b60408051601f1981840301815291815281516020928301206001600160401b0388166000908152606690935291205490915081146115ee5760405162461bcd60e51b815260206004820152603d6024820152600080516020615eb483398151915260448201527f6f7263656420626174636865732064617461206d757374206d6174636800000060648201526084016109fa565b81606001516001600160401b031682604001516001600160401b0316101561168d5760405162461bcd60e51b81526020600482015260586024820152600080516020615eb483398151915260448201527f6f7263656420626174636865732074696d657374616d70206d757374206265206064820152773134b3b3b2b91037b91032b8bab0b6103a3430b71036b4b760411b608482015260a4016109fa565b50611808565b6020810151158061171c5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916116d69160040190815260200190565b6020604051808303816000875af11580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117199190615741565b15155b61178e5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d75737420657869737400000000000060648201526084016109fa565b805151620493e0116118085760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016109fa565b856001600160401b031681604001516001600160401b03161015801561183b57504281604001516001600160401b031611155b6118ad5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e676500000060648201526084016109fa565b805180516020918201208183015160408085015190516118d4948894939291339101615909565b60405160208183030381529060405280519060200120925084806118f7906158c0565b9550508060400151955050808061190d90615948565b9150506114e7565b506068546001600160401b03600160c01b909104811690831611156119885760405162461bcd60e51b81526020600482015260356024820152600080516020615eb48339815191526044820152746f7263652062617463686573206f766572666c6f7760581b60648201526084016109fa565b6068546000906119a890600160801b90046001600160401b031684615961565b6119bb906001600160401b031687615989565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611a9090339030908490611a7591906159a0565b606554600160581b90046001600160a01b03169291906139ce565b611a98613a39565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b025760405162461bcd60e51b81526004016109fa90615842565b6072546001600160401b038781166000908152606760205260409020600101544292611b3992600160c01b90910481169116615817565b6001600160401b03161115611bc25760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2054727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a4016109fa565b6103e8611bcf8888615961565b6001600160401b031610611c4b5760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2043616e60448201527f6e6f74207665726966792074686174206d616e7920626174636865730000000060648201526084016109fa565b611c5b8888888888888888613ad9565b611c6486613fca565b607254600160801b90046001600160401b0316600003611d2b57606980546001600160401b0319166001600160401b038881169182179092556000908152606d602052604090208590556072541615611cc857607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d0e57600080fd5b505af1158015611d22573d6000803e3d6000fd5b50505050611ddc565b611d33613a39565b607280546001600160401b0316906000611d4c836158c0565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611e5457506072546001600160401b03600160401b9091048116908216115b8015611e6f57506072546001600160401b0390811690821611155b611eed5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a4016109fa565b606a546001600160a01b03163314611f9757611f0881611115565b611f975760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2050656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a4016109fa565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b928390049098166001600160401b0319909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b15801561205357600080fd5b505af1158015612067573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e84600201546040516120b491815260200190565b60405180910390a3505050565b606e8054610b8990615784565b6120d6613974565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b600085858051906020012085858560405160200161211a959493929190615909565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff161580801561215b5750600054600160ff909116105b806121755750303b158015612175575060005460ff166001145b6121d85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109fa565b6000805460ff1916600117905580156121fb576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c81169190911790925560658054600160581b600160f81b031916600160581b8c851602179055606b805482168a84161790556070805490911691881691909117905561226360208601866150d4565b607380546001600160a01b0319166001600160a01b039290921691909117905561229360608601604087016150d4565b606980546001600160a01b0392909216600160401b02600160401b600160e01b03199092169190911790556122ce60c0860160a087016150d4565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa71135684905561232b60e0860160c08701614e6c565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556123626040860160208701614e6c565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561239e6080860160608701614e6c565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b199092169190911790556123da60a0860160808701615302565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e6124028482615a05565b50606f61240f8382615a05565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124456141b0565b801561248b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b031633146124c05760405162461bcd60e51b81526004016109fa906157be565b60698054600160401b600160e01b031916600160401b6001600160a01b038416021790556040517ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090610f69908390614e58565b6073546001600160a01b0316331461253e5760405162461bcd60e51b81526004016109fa906157be565b607380546001600160a01b0319166001600160a01b0383161790556040517f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190610f69908390614e58565b612591613974565b61259b6000614220565b565b6033546001600160a01b0316331461279c5760006125b9612bba565b9050806001600160401b0316826001600160401b0316116126305760405162461bcd60e51b815260206004820152603c6024820152600080516020615e1483398151915260448201527f746174653a20426174636820616c72656164792076657269666965640000000060648201526084016109fa565b6068546001600160401b03600160401b90910481169083161180159061267257506001600160401b038083166000908152606760205260409020600101541615155b6126eb5760405162461bcd60e51b81526020600482015260506024820152600080516020615e1483398151915260448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a4016109fa565b6001600160401b0380831660009081526067602052604090206001015442916127199162093a809116615817565b6001600160401b0316111561279a5760405162461bcd60e51b815260206004820152604d6024820152600080516020615e1483398151915260448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a4016109fa565b505b6127a4614272565b50565b60655460ff16156127ca5760405162461bcd60e51b81526004016109fa90615842565b6127db8989898989898989896142e2565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a161248b614272565b6073546001600160a01b031633146128605760405162461bcd60e51b81526004016109fa906157be565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610f6990831515815260200190565b6128b5613974565b606980546001600160401b0319166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81526000918291600160581b9091046001600160a01b0316906370a0823190612912903090600401614e58565b602060405180830381865afa15801561292f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129539190615741565b9050600061295f612bba565b6068546001600160401b03600160401b820481169161298f91600160801b8204811691600160c01b900416615961565b6129999190615817565b6129a39190615961565b6001600160401b031690506129b88183615ac4565b9250505090565b6129c7613974565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612a1e5760405162461bcd60e51b81526004016109fa906157be565b62093a806001600160401b0382161115612ab25760405162461bcd60e51b815260206004820152604960248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a20457863656564206d61782068616c74206167677265676174696f6064820152681b881d1a5b595bdd5d60ba1b608482015260a4016109fa565b60655460ff16612b47576072546001600160401b03600160801b909104811690821610612b475760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a204e65772074696d656f7574206d757374206265206c6f7765720060648201526084016109fa565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610f69565b612baa613974565b606f612bb68282615a05565b5050565b6072546000906001600160401b031615612bf757506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612c315760405162461bcd60e51b81526004016109fa906157be565b606e612c3d8282615a05565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610f699190614d18565b6073546001600160a01b03163314612c975760405162461bcd60e51b81526004016109fa906157be565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610f69565b60655460ff1615612d115760405162461bcd60e51b81526004016109fa90615842565b606c54600160a01b900460ff161515600114612d3f5760405162461bcd60e51b81526004016109fa90615ad8565b805180612da25760405162461bcd60e51b815260206004820152603f6024820152600080516020615e7483398151915260448201527f65733a204d75737420666f726365206174206c6561737420312062617463680060648201526084016109fa565b6103e88110612e135760405162461bcd60e51b81526020600482015260436024820152600080516020615e7483398151915260448201527f65733a2043616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a4016109fa565b6068546001600160401b03600160c01b8204811691612e3b918491600160801b900416615b41565b1115612e975760405162461bcd60e51b81526020600482015260376024820152600080516020615e74833981519152604482015276195cce88119bdc98d94818985d18da081a5b9d985b1a59604a1b60648201526084016109fa565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b848110156130c5576000868281518110612ee457612ee46158aa565b602002602001015190508380612ef9906158c0565b945050600081600001518051906020012082602001518360400151604051602001612f26939291906158e6565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612fc55760405162461bcd60e51b81526020600482015260426024820152600080516020615e7483398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109fa565b612fd0600188615989565b83036130675742620697808360400151612fea9190615817565b6001600160401b031611156130675760405162461bcd60e51b81526020600482015260496024820152600080516020615e7483398151915260448201527f65733a20466f72636564206261746368206973206e6f7420696e2074696d656f6064820152681d5d081c195c9a5bd960ba1b608482015260a4016109fa565b815180516020918201208184015160405161308a93889392914291339101615909565b60405160208183030381529060405280519060200120935085806130ad906158c0565b965050505080806130bd90615948565b915050612ec8565b50606880546001600160401b031916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b0319909216919091179286168502929092179091558554600160401b600160c01b03191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166131cf5760405162461bcd60e51b81526004016109fa90615b59565b6073546001600160a01b031633146131f95760405162461bcd60e51b81526004016109fa906157be565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561324957600080fd5b505af115801561325d573d6000803e3d6000fd5b5050505061259b614906565b613271613974565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133055760405162461bcd60e51b81526004016109fa90615bb6565b6133168989898989898989896142e2565b606980546001600160401b0319166001600160401b038881169182179092556000908152606d60205260409020859055607254161561336057607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156133a657600080fd5b505af11580156133ba573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff16156134425760405162461bcd60e51b81526004016109fa90615842565b606c54600160a01b900460ff1615156001146134705760405162461bcd60e51b81526004016109fa90615ad8565b600061347b60745490565b9050818111156134e05760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a204e6f7420656e6044820152696f756768206d6174696360b01b60648201526084016109fa565b620493e08351106135515760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b60648201526084016109fa565b60655461357090600160581b90046001600160a01b03163330846139ce565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa1580156135ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135de9190615741565b60688054919250600160c01b9091046001600160401b0316906018613602836158c0565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505083805190602001208142604051602001613643939291906158e6565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b0316600090815260669093529120553233036136e757606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613742565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161373993929190615c13565b60405180910390a25b50505050565b606a546001600160a01b031633146137725760405162461bcd60e51b81526004016109fa90615bb6565b6137828888888888888888613ad9565b606980546001600160401b0319166001600160401b038881169182179092556000908152606d6020526040902085905560725416156137cc57607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561381257600080fd5b505af1158015613826573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e15565b6073546001600160a01b031633146138915760405162461bcd60e51b81526004016109fa906157be565b606a80546001600160a01b0319166001600160a01b0383161790556040517f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90610f69908390614e58565b6138e4613974565b6001600160a01b0381166139495760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109fa565b6127a481614220565b61395a613974565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b0316331461259b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109fa565b6040516001600160a01b03808516602483015283166044820152606481018290526137429085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261495d565b6072546001600160401b03600160401b820481169116111561259b57607254600090613a7690600160401b90046001600160401b03166001615817565b9050613a8181611115565b156127a457607254600090600290613aa39084906001600160401b0316615961565b613aad9190615c46565b613ab79083615817565b9050613ac281611115565b15613ad057612bb681611e27565b612bb682611e27565b600080613ae4612bba565b90506001600160401b038a1615613c4a576072546001600160401b03908116908b161115613b9c5760405162461bcd60e51b815260206004820152605960248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20706560448201527f6e64696e6753746174654e756d206d757374206265206c657373206f7220657160648201527875616c207468616e206c61737450656e64696e67537461746560381b608482015260a4016109fa565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c445760405162461bcd60e51b815260206004820152604d6024820152600080516020615e3483398151915260448201527f69744e756d4261746368206d757374206d61746368207468652070656e64696e60648201526c0ce40e6e8c2e8ca40c4c2e8c6d609b1b608482015260a4016109fa565b50613d70565b6001600160401b0389166000908152606d6020526040902054915081613cd45760405162461bcd60e51b815260206004820152604460248201819052600080516020615e34833981519152908201527f69744e756d426174636820737461746520726f6f7420646f6573206e6f7420656064820152631e1a5cdd60e21b608482015260a4016109fa565b806001600160401b0316896001600160401b03161115613d705760405162461bcd60e51b815260206004820152605e6024820152600080516020615e3483398151915260448201527f69744e756d4261746368206d757374206265206c657373206f7220657175616c60648201527f207468616e2063757272656e744c617374566572696669656442617463680000608482015260a4016109fa565b806001600160401b0316886001600160401b031611613e185760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20666960448201527f6e616c4e65774261746368206d75737420626520626967676572207468616e206064820152770c6eae4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d60431b608482015260a4016109fa565b6000613e278a8a8a868b610f74565b90506000600080516020615e94833981519152600283604051613e4a9190615725565b602060405180830381855afa158015613e67573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613e8a9190615741565b613e949190615770565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613ed8918b918b918b9190600401615c6c565b602060405180830381865afa158015613ef5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f199190615ce6565b613f795760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20496e60448201526a3b30b634b210383937b7b360a91b60648201526084016109fa565b613fbc33613f87858d615961565b6001600160401b0316613f986128d7565b613fa291906159a0565b606554600160581b90046001600160a01b03169190614a34565b505050505050505050505050565b6000613fd4612bba565b905081600080613fe48484615961565b6001600160401b031690505b836001600160401b0316836001600160401b031614614096576001600160401b03808416600090815260676020526040902060655460018201549192610100909104811691614040911642615989565b111561407b57600181015461406590600160401b90046001600160401b031685615961565b614078906001600160401b031684615b41565b92505b60010154600160401b90046001600160401b03169250613ff0565b60006140a28383615989565b90508281101561411c5760006140b88285615989565b9050600c81116140c857806140cb565b600c5b90506140d88160036159a0565b6140e390600a615de7565b6065546140fc908390600160481b900461ffff16615de7565b60745461410991906159a0565b6141139190615ac4565b607455506141a8565b60006141288483615989565b9050600c8111614138578061413b565b600c5b9050600061414a8260036159a0565b61415590600a615de7565b60655461416e908490600160481b900461ffff16615de7565b60745461417b91906159a0565b6141859190615ac4565b90508060745460745461419891906159a0565b6141a29190615ac4565b60745550505b505050505050565b600054610100900460ff1661421b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109fa565b61259b335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156142c257600080fd5b505af11580156142d6573d6000803e3d6000fd5b5050505061259b614a64565b60006001600160401b038a1615614452576072546001600160401b03908116908b16111561439a5760405162461bcd60e51b81526020600482015260656024820152600080516020615e5483398151915260448201527f696e6753746174653a2070656e64696e6753746174654e756d206d757374206260648201527f65206c657373206f7220657175616c207468616e206c61737450656e64696e67608482015264537461746560d81b60a482015260c4016109fa565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b909204161461444c5760405162461bcd60e51b81526020600482015260596024820152600080516020615e5483398151915260448201527f696e6753746174653a20696e69744e756d4261746368206d757374206d6174636064820152780d040e8d0ca40e0cadcc8d2dcce40e6e8c2e8ca40c4c2e8c6d603b1b608482015260a4016109fa565b5061458b565b506001600160401b0387166000908152606d6020526040902054806144e65760405162461bcd60e51b81526020600482015260506024820152600080516020615e5483398151915260448201527f696e6753746174653a20696e69744e756d426174636820737461746520726f6f60648201526f1d08191bd95cc81b9bdd08195e1a5cdd60821b608482015260a4016109fa565b6069546001600160401b03908116908916111561458b5760405162461bcd60e51b81526020600482015260636024820152600080516020615e5483398151915260448201527f696e6753746174653a20696e69744e756d4261746368206d757374206265206c60648201527f657373206f7220657175616c207468616e206c617374566572696669656442616084820152620e8c6d60eb1b60a482015260c4016109fa565b6072546001600160401b03908116908a16118015906145bb5750896001600160401b0316896001600160401b0316115b80156145dc57506072546001600160401b03600160401b9091048116908a16115b61464d5760405162461bcd60e51b81526020600482015260486024820152600080516020615e5483398151915260448201527f696e6753746174653a2066696e616c50656e64696e6753746174654e756d20696064820152671b98dbdc9c9958dd60c21b608482015260a4016109fa565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146147065760405162461bcd60e51b81526020600482015260636024820152600080516020615e5483398151915260448201527f696e6753746174653a2066696e616c4e65774261746368206d7573742062652060648201527f657175616c207468616e2063757272656e744c617374566572696669656442616084820152620e8c6d60eb1b60a482015260c4016109fa565b6000614715898989858a610f74565b90506000600080516020615e948339815191526002836040516147389190615725565b602060405180830381855afa158015614755573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906147789190615741565b6147829190615770565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916147c6918a918a918a9190600401615c6c565b602060405180830381865afa1580156147e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148079190615ce6565b6148615760405162461bcd60e51b81526020600482015260376024820152600080516020615e5483398151915260448201527634b733a9ba30ba329d1024b73b30b634b210383937b7b360491b60648201526084016109fa565b6001600160401b038b16600090815260716020526040902060020154879003613fbc5760405162461bcd60e51b815260206004820152605b6024820152600080516020615e5483398151915260448201527f696e6753746174653a2053746f72656420726f6f74206d75737420626520646960648201527f66666572656e74207468616e206e657720737461746520726f6f740000000000608482015260a4016109fa565b60655460ff166149285760405162461bcd60e51b81526004016109fa90615b59565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006149b2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614abf9092919063ffffffff16565b805190915015614a2f57808060200190518101906149d09190615ce6565b614a2f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109fa565b505050565b6040516001600160a01b038316602482015260448101829052614a2f90849063a9059cbb60e01b90606401613a02565b60655460ff1615614a875760405162461bcd60e51b81526004016109fa90615842565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614ace8484600085614ad6565b949350505050565b606082471015614b375760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109fa565b600080866001600160a01b03168587604051614b539190615725565b60006040518083038185875af1925050503d8060008114614b90576040519150601f19603f3d011682016040523d82523d6000602084013e614b95565b606091505b5091509150614ba687838387614bb1565b979650505050505050565b60608315614c20578251600003614c19576001600160a01b0385163b614c195760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109fa565b5081614ace565b614ace8383815115614c355781518083602001fd5b8060405162461bcd60e51b81526004016109fa9190614d18565b80356001600160401b0381168114614c6657600080fd5b919050565b600080600080600060a08688031215614c8357600080fd5b614c8c86614c4f565b9450614c9a60208701614c4f565b9350614ca860408701614c4f565b94979396509394606081013594506080013592915050565b60005b83811015614cdb578181015183820152602001614cc3565b838111156137425750506000910152565b60008151808452614d04816020860160208601614cc0565b601f01601f19169290920160200192915050565b602081526000614d2b6020830184614cec565b9392505050565b8060408101831015614d4357600080fd5b92915050565b8060808101831015614d4357600080fd5b6000806000806000806000806101a0898b031215614d7757600080fd5b614d8089614c4f565b9750614d8e60208a01614c4f565b9650614d9c60408a01614c4f565b95506060890135945060808901359350614db98a60a08b01614d32565b9250614dc88a60e08b01614d49565b9150614dd88a6101608b01614d32565b90509295985092959890939650565b600060208284031215614df957600080fd5b813561ffff81168114614d2b57600080fd5b600080600080600060a08688031215614e2357600080fd5b614e2c86614c4f565b9450614e3a60208701614c4f565b94979496505050506040830135926060810135926080909101359150565b6001600160a01b0391909116815260200190565b600060208284031215614e7e57600080fd5b614d2b82614c4f565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614ebf57614ebf614e87565b60405290565b604051606081016001600160401b0381118282101715614ebf57614ebf614e87565b604051601f8201601f191681016001600160401b0381118282101715614f0f57614f0f614e87565b604052919050565b60006001600160401b03821115614f3057614f30614e87565b5060051b60200190565b600082601f830112614f4b57600080fd5b81356001600160401b03811115614f6457614f64614e87565b614f77601f8201601f1916602001614ee7565b818152846020838601011115614f8c57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614fbc57600080fd5b82356001600160401b0380821115614fd357600080fd5b818501915085601f830112614fe757600080fd5b8135614ffa614ff582614f17565b614ee7565b81815260059190911b8301840190848101908883111561501957600080fd5b8585015b838110156150b2578035858111156150355760008081fd5b86016080818c03601f190181131561504d5760008081fd5b615055614e9d565b89830135888111156150675760008081fd5b6150758e8c83870101614f3a565b8252506040808401358b830152606061508f818601614c4f565b8284015261509e848601614c4f565b90830152508552505091860191860161501d565b5098975050505050505050565b6001600160a01b03811681146127a457600080fd5b6000602082840312156150e657600080fd5b8135614d2b816150bf565b600080600080600060a0868803121561510957600080fd5b8535945060208601356001600160401b0381111561512657600080fd5b61513288828901614f3a565b9450506040860135925061514860608701614c4f565b91506080860135615158816150bf565b809150509295509295909350565b600080600080600080600080888a036101c081121561518457600080fd5b893561518f816150bf565b985060208a013561519f816150bf565b975060408a01356151af816150bf565b965060608a01356151bf816150bf565b955060e0607f19820112156151d357600080fd5b5060808901935061016089013592506101808901356001600160401b03808211156151fd57600080fd5b6152098c838d01614f3a565b93506101a08b013591508082111561522057600080fd5b5061522d8b828c01614f3a565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c03121561525c57600080fd5b6152658a614c4f565b985061527360208b01614c4f565b975061528160408b01614c4f565b965061528f60608b01614c4f565b955060808a0135945060a08a013593506152ac8b60c08c01614d32565b92506152bc8b6101008c01614d49565b91506152cc8b6101808c01614d32565b90509295985092959850929598565b6000602082840312156152ed57600080fd5b5035919050565b80151581146127a457600080fd5b60006020828403121561531457600080fd5b8135614d2b816152f4565b60006020828403121561533157600080fd5b81356001600160401b0381111561534757600080fd5b614ace84828501614f3a565b6000602080838503121561536657600080fd5b82356001600160401b038082111561537d57600080fd5b818501915085601f83011261539157600080fd5b813561539f614ff582614f17565b81815260059190911b830184019084810190888311156153be57600080fd5b8585015b838110156150b2578035858111156153da5760008081fd5b86016060818c03601f19018113156153f25760008081fd5b6153fa614ec5565b898301358881111561540c5760008081fd5b61541a8e8c83870101614f3a565b8252506040808401358b830152615432838501614c4f565b90820152855250509186019186016153c2565b6000806000806080858703121561545b57600080fd5b61546485614c4f565b93506020850135925061547960408601614c4f565b915061548760608601614c4f565b905092959194509250565b600080604083850312156154a557600080fd5b82356001600160401b038111156154bb57600080fd5b6154c785828601614f3a565b95602094909401359450505050565b600080604083850312156154e957600080fd5b823591506154f960208401614c4f565b90509250929050565b60208082526058908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2070656e60408201527f64696e6753746174654e756d206d757374206265206c657373206f7220657175606082015277616c207468616e206c61737450656e64696e67537461746560401b608082015260a00190565b6020808252604c90820152600080516020615df483398151915260408201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760608201526b040e6e8c2e8ca40c4c2e8c6d60a31b608082015260a00190565b6020808252604390820152600080516020615df483398151915260408201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786060820152621a5cdd60ea1b608082015260a00190565b6020808252605d90820152600080516020615df483398151915260408201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060608201527f7468616e2063757272656e744c61737456657269666965644261746368000000608082015260a00190565b60208082526057908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2066696e60408201527f616c4e65774261746368206d75737420626520626967676572207468616e20636060820152760eae4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d604b1b608082015260a00190565b60008251615737818460208701614cc0565b9190910192915050565b60006020828403121561575357600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b60008261577f5761577f61575a565b500690565b600181811c9082168061579857607f821691505b6020821081036157b857634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a204f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561583957615839615801565b01949350505050565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b038083168181036158dc576158dc615801565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6001600160601b0319166068820152607c0190565b60006001820161595a5761595a615801565b5060010190565b60006001600160401b038381169083168181101561598157615981615801565b039392505050565b60008282101561599b5761599b615801565b500390565b60008160001904831182151516156159ba576159ba615801565b500290565b601f821115614a2f57600081815260208120601f850160051c810160208610156159e65750805b601f850160051c820191505b818110156141a8578281556001016159f2565b81516001600160401b03811115615a1e57615a1e614e87565b615a3281615a2c8454615784565b846159bf565b602080601f831160018114615a675760008415615a4f5750858301515b600019600386901b1c1916600185901b1785556141a8565b600085815260208120601f198616915b82811015615a9657888601518255948401946001909101908401615a77565b5085821015615ab45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615ad357615ad361575a565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a204f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b60008219821115615b5457615b54615801565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a204f6e6c7920747275737465642061676772656761746f7200000000606082015260800190565b8381526001600160a01b0383166020820152606060408201819052600090615c3d90830184614cec565b95945050505050565b60006001600160401b0380841680615c6057615c6061575a565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615ca457848483379084018281529284019290600101615c84565b5050828760c0870137610100850181815286935091505b6001811015615cda578251825260209283019290910190600101615cbb565b50505095945050505050565b600060208284031215615cf857600080fd5b8151614d2b816152f4565b600181815b80851115615d3e578160001904821115615d2457615d24615801565b80851615615d3157918102915b93841c9390800290615d08565b509250929050565b600082615d5557506001614d43565b81615d6257506000614d43565b8160018114615d785760028114615d8257615d9e565b6001915050614d43565b60ff841115615d9357615d93615801565b50506001821b614d43565b5060208310610133831016604e8410600b8410161715615dc1575081810a614d43565b615dcb8383615d03565b8060001904821115615ddf57615ddf615801565b029392505050565b6000614d2b8383615d4656fe506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e69506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e637953506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20696e506f6c79676f6e5a6b45564d3a3a5f70726f766544697374696e637450656e64506f6c79676f6e5a6b45564d3a3a73657175656e6365466f726365426174636830644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a2046a2646970667358221220228c4202d1acfc209a766c02316b533f9a69dc61c46b673c3a2cf711afaf3feb64736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103925760003560e01c806396dc3d39116101e0578063cfa8ed4711610110578063e7a7ed02116100a8578063e7a7ed0214610905578063e8bf92ed1461091f578063eaeb077b14610932578063edc4112114610945578063f14916d614610958578063f2fde38b1461096b578063f851a4401461097e578063f8b823e414610991578063fe16564f1461099a57600080fd5b8063cfa8ed4714610860578063d02103ca1461087a578063d8d1091b1461088d578063d8f54db0146108a0578063d939b315146108b4578063dbc16976146108ce578063e0d17441146108d6578063e11f3f18146108e9578063e217cfd6146108fc57600080fd5b8063ab9fc5ef11610183578063ab9fc5ef14610759578063adc879e914610763578063afd23cbe1461077d578063b4d63f58146107a5578063b6b0b09714610805578063c0cad3021461081f578063c0ed84e014610832578063c89e42df1461083a578063cf1363061461084d57600080fd5b806396dc3d39146106dd57806399f5634e146106f05780639b796760146106f85780639c9f3dfe1461070b5780639eb831b91461071e5780639f0d039d14610726578063a3c573eb1461072e578063aa58bad61461074157600080fd5b80634a910e6a116102c6578063715018a61161025e578063715018a6146105e65780637215541a146105ee57806375c508b3146106015780637fcb365314610614578063837a473814610627578063841b24d7146106955780638b48931e146106af5780638c4a0af7146106b95780638da5cb5b146106cc57600080fd5b80634a910e6a1461052c5780635392c5e01461053f578063542028d51461055f5780635437988d14610567578063574f649e1461057a57806360943d6a1461058d5780636b8616ce146105a05780636ff512cc146105c0578063704b6c02146105d357600080fd5b80632d0889d3116103395780632d0889d314610475578063383b3be81461047f578063394218e9146104925780633c158267146104a5578063423fa856146104b857806345605267146104d2578063458c0477146104ec5780634834a343146104ff5780634a1a89a71461051257600080fd5b80630eaa86ea14610397578063107bf28c146103bd57806310a01a72146103d257806315064c96146103e75780631816b7e51461040457806319d8ac6114610417578063220d7899146104425780632987898314610455575b600080fd5b6103aa6103a5366004614c6b565b6109ad565b6040519081526020015b60405180910390f35b6103c5610b7c565b6040516103b49190614d18565b6103e56103e0366004614d5a565b610c0a565b005b6065546103f49060ff1681565b60405190151581526020016103b4565b6103e5610412366004614de7565b610e53565b60685461042a906001600160401b031681565b6040516001600160401b0390911681526020016103b4565b6103c5610450366004614e0b565b610f74565b606a54610468906001600160a01b031681565b6040516103b49190614e58565b6103aa620493e081565b6103f461048d366004614e6c565b611115565b6103e56104a0366004614e6c565b61115c565b6103e56104b3366004614fa9565b611318565b60685461042a90600160401b90046001600160401b031681565b60685461042a90600160801b90046001600160401b031681565b60725461042a906001600160401b031681565b6103e561050d366004614d5a565b611adf565b60725461042a90600160401b90046001600160401b031681565b6103e561053a366004614e6c565b611e27565b6103aa61054d366004614e6c565b606d6020526000908152604090205481565b6103c56120c1565b6103e56105753660046150d4565b6120ce565b6103aa6105883660046150f1565b6120f8565b6103e561059b366004615166565b61213b565b6103aa6105ae366004614e6c565b60666020526000908152604090205481565b6103e56105ce3660046150d4565b612496565b6103e56105e13660046150d4565b612514565b6103e5612589565b6103e56105fc366004614e6c565b61259d565b6103e561060f36600461523d565b6127a7565b60695461042a906001600160401b031681565b61066a6106353660046152db565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103b4565b60725461042a90600160c01b90046001600160401b031681565b61042a62093a8081565b6103e56106c7366004615302565b612836565b6033546001600160a01b0316610468565b6103e56106eb366004614e6c565b6128ad565b6103aa6128d7565b6103e5610706366004614e6c565b6129bf565b6103e5610719366004614e6c565b6129f4565b6103aa600c81565b6074546103aa565b607054610468906001600160a01b031681565b60655461042a9061010090046001600160401b031681565b61042a6206978081565b606c5461042a90600160a81b90046001600160401b031681565b60655461079290600160481b900461ffff1681565b60405161ffff90911681526020016103b4565b6107e06107b3366004614e6c565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103b4565b60655461046890600160581b90046001600160a01b031681565b6103e561082d36600461531f565b612ba2565b61042a612bba565b6103e561084836600461531f565b612c07565b6103e561085b366004614e6c565b612c6d565b60695461046890600160401b90046001600160a01b031681565b606c54610468906001600160a01b031681565b6103e561089b366004615353565b612cee565b606c546103f490600160a01b900460ff1681565b60725461042a90600160801b90046001600160401b031681565b6103e56131ad565b6103e56108e4366004615445565b613269565b6103e56108f736600461523d565b6132db565b61042a6103e881565b60685461042a90600160c01b90046001600160401b031681565b606b54610468906001600160a01b031681565b6103e5610940366004615492565b61341f565b6103e5610953366004614d5a565b613748565b6103e56109663660046150d4565b613867565b6103e56109793660046150d4565b6138dc565b607354610468906001600160a01b031681565b6103aa60745481565b6103e56109a83660046154d6565b613952565b60008060006109ba612bba565b90506001600160401b03881615610a57576072546001600160401b039081169089161115610a035760405162461bcd60e51b81526004016109fa90615502565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610a515760405162461bcd60e51b81526004016109fa90615580565b50610ac1565b6001600160401b0387166000908152606d6020526040902054915081610a8f5760405162461bcd60e51b81526004016109fa906155e0565b806001600160401b0316876001600160401b03161115610ac15760405162461bcd60e51b81526004016109fa90615637565b806001600160401b0316866001600160401b031611610af25760405162461bcd60e51b81526004016109fa906156a8565b6000610b018888888689610f74565b90506000600080516020615e94833981519152600283604051610b249190615725565b602060405180830381855afa158015610b41573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610b649190615741565b610b6e9190615770565b9a9950505050505050505050565b606f8054610b8990615784565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb590615784565b8015610c025780601f10610bd757610100808354040283529160200191610c02565b820191906000526020600020905b815481529060010190602001808311610be557829003601f168201915b505050505081565b610c12613974565b600080610c1d612bba565b90506001600160401b038a1615610cb1576072546001600160401b03908116908b161115610c5d5760405162461bcd60e51b81526004016109fa90615502565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610cab5760405162461bcd60e51b81526004016109fa90615580565b50610d1b565b6001600160401b0389166000908152606d6020526040902054915081610ce95760405162461bcd60e51b81526004016109fa906155e0565b806001600160401b0316896001600160401b03161115610d1b5760405162461bcd60e51b81526004016109fa90615637565b806001600160401b0316886001600160401b031611610d4c5760405162461bcd60e51b81526004016109fa906156a8565b6000610d5b8a8a8a868b610f74565b606980546001600160401b0319166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610da857607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610dee57600080fd5b505af1158015610e02573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610e7d5760405162461bcd60e51b81526004016109fa906157be565b6103e88161ffff1610158015610e9857506104008161ffff16105b610f1d5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a4016109fa565b6065805461ffff60481b1916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610fa657508115155b61101a576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109fa565b8061108f576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109fa565b606c54604080516001600160601b03193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b038281166000908152607160205260408120549092429261114b92600160801b90920481169116615817565b6001600160401b0316111592915050565b6073546001600160a01b031633146111865760405162461bcd60e51b81526004016109fa906157be565b62093a806001600160401b038216111561121f5760405162461bcd60e51b815260206004820152604e60248201527f506f6c79676f6e5a6b45564d3a3a73657454727573746564416767726567617460448201527f6f7254696d656f75743a20457863656564206d61782068616c7420616767726560648201526d19d85d1a5bdb881d1a5b595bdd5d60921b608482015260a4016109fa565b60655460ff166112c2576072546001600160401b03600160c01b9091048116908216106112c25760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a204e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109fa565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610f69565b60655460ff161561133b5760405162461bcd60e51b81526004016109fa90615842565b606954600160401b90046001600160a01b031633146113c25760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a204f6e6c7920747275737465642073657175656e63657200000000000060648201526084016109fa565b8051806114375760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e6365203120626174636800000060648201526084016109fa565b6103e881106114b0576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e79206261746368657360648201526084016109fa565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b85811015611915576000878281518110611503576115036158aa565b60200260200101519050600081606001516001600160401b03161115611693578361152d816158c0565b94505060008160000151805190602001208260200151836060015160405160200161155a939291906158e6565b60408051601f1981840301815291815281516020928301206001600160401b0388166000908152606690935291205490915081146115ee5760405162461bcd60e51b815260206004820152603d6024820152600080516020615eb483398151915260448201527f6f7263656420626174636865732064617461206d757374206d6174636800000060648201526084016109fa565b81606001516001600160401b031682604001516001600160401b0316101561168d5760405162461bcd60e51b81526020600482015260586024820152600080516020615eb483398151915260448201527f6f7263656420626174636865732074696d657374616d70206d757374206265206064820152773134b3b3b2b91037b91032b8bab0b6103a3430b71036b4b760411b608482015260a4016109fa565b50611808565b6020810151158061171c5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916116d69160040190815260200190565b6020604051808303816000875af11580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117199190615741565b15155b61178e5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d75737420657869737400000000000060648201526084016109fa565b805151620493e0116118085760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016109fa565b856001600160401b031681604001516001600160401b03161015801561183b57504281604001516001600160401b031611155b6118ad5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e676500000060648201526084016109fa565b805180516020918201208183015160408085015190516118d4948894939291339101615909565b60405160208183030381529060405280519060200120925084806118f7906158c0565b9550508060400151955050808061190d90615948565b9150506114e7565b506068546001600160401b03600160c01b909104811690831611156119885760405162461bcd60e51b81526020600482015260356024820152600080516020615eb48339815191526044820152746f7263652062617463686573206f766572666c6f7760581b60648201526084016109fa565b6068546000906119a890600160801b90046001600160401b031684615961565b6119bb906001600160401b031687615989565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611a9090339030908490611a7591906159a0565b606554600160581b90046001600160a01b03169291906139ce565b611a98613a39565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b025760405162461bcd60e51b81526004016109fa90615842565b6072546001600160401b038781166000908152606760205260409020600101544292611b3992600160c01b90910481169116615817565b6001600160401b03161115611bc25760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2054727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a4016109fa565b6103e8611bcf8888615961565b6001600160401b031610611c4b5760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2043616e60448201527f6e6f74207665726966792074686174206d616e7920626174636865730000000060648201526084016109fa565b611c5b8888888888888888613ad9565b611c6486613fca565b607254600160801b90046001600160401b0316600003611d2b57606980546001600160401b0319166001600160401b038881169182179092556000908152606d602052604090208590556072541615611cc857607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d0e57600080fd5b505af1158015611d22573d6000803e3d6000fd5b50505050611ddc565b611d33613a39565b607280546001600160401b0316906000611d4c836158c0565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611e5457506072546001600160401b03600160401b9091048116908216115b8015611e6f57506072546001600160401b0390811690821611155b611eed5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a4016109fa565b606a546001600160a01b03163314611f9757611f0881611115565b611f975760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2050656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a4016109fa565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b928390049098166001600160401b0319909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b15801561205357600080fd5b505af1158015612067573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e84600201546040516120b491815260200190565b60405180910390a3505050565b606e8054610b8990615784565b6120d6613974565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b600085858051906020012085858560405160200161211a959493929190615909565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff161580801561215b5750600054600160ff909116105b806121755750303b158015612175575060005460ff166001145b6121d85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109fa565b6000805460ff1916600117905580156121fb576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c81169190911790925560658054600160581b600160f81b031916600160581b8c851602179055606b805482168a84161790556070805490911691881691909117905561226360208601866150d4565b607380546001600160a01b0319166001600160a01b039290921691909117905561229360608601604087016150d4565b606980546001600160a01b0392909216600160401b02600160401b600160e01b03199092169190911790556122ce60c0860160a087016150d4565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa71135684905561232b60e0860160c08701614e6c565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556123626040860160208701614e6c565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561239e6080860160608701614e6c565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b199092169190911790556123da60a0860160808701615302565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e6124028482615a05565b50606f61240f8382615a05565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124456141b0565b801561248b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b031633146124c05760405162461bcd60e51b81526004016109fa906157be565b60698054600160401b600160e01b031916600160401b6001600160a01b038416021790556040517ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090610f69908390614e58565b6073546001600160a01b0316331461253e5760405162461bcd60e51b81526004016109fa906157be565b607380546001600160a01b0319166001600160a01b0383161790556040517f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190610f69908390614e58565b612591613974565b61259b6000614220565b565b6033546001600160a01b0316331461279c5760006125b9612bba565b9050806001600160401b0316826001600160401b0316116126305760405162461bcd60e51b815260206004820152603c6024820152600080516020615e1483398151915260448201527f746174653a20426174636820616c72656164792076657269666965640000000060648201526084016109fa565b6068546001600160401b03600160401b90910481169083161180159061267257506001600160401b038083166000908152606760205260409020600101541615155b6126eb5760405162461bcd60e51b81526020600482015260506024820152600080516020615e1483398151915260448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a4016109fa565b6001600160401b0380831660009081526067602052604090206001015442916127199162093a809116615817565b6001600160401b0316111561279a5760405162461bcd60e51b815260206004820152604d6024820152600080516020615e1483398151915260448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a4016109fa565b505b6127a4614272565b50565b60655460ff16156127ca5760405162461bcd60e51b81526004016109fa90615842565b6127db8989898989898989896142e2565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a161248b614272565b6073546001600160a01b031633146128605760405162461bcd60e51b81526004016109fa906157be565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610f6990831515815260200190565b6128b5613974565b606980546001600160401b0319166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81526000918291600160581b9091046001600160a01b0316906370a0823190612912903090600401614e58565b602060405180830381865afa15801561292f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129539190615741565b9050600061295f612bba565b6068546001600160401b03600160401b820481169161298f91600160801b8204811691600160c01b900416615961565b6129999190615817565b6129a39190615961565b6001600160401b031690506129b88183615ac4565b9250505090565b6129c7613974565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612a1e5760405162461bcd60e51b81526004016109fa906157be565b62093a806001600160401b0382161115612ab25760405162461bcd60e51b815260206004820152604960248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a20457863656564206d61782068616c74206167677265676174696f6064820152681b881d1a5b595bdd5d60ba1b608482015260a4016109fa565b60655460ff16612b47576072546001600160401b03600160801b909104811690821610612b475760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a204e65772074696d656f7574206d757374206265206c6f7765720060648201526084016109fa565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610f69565b612baa613974565b606f612bb68282615a05565b5050565b6072546000906001600160401b031615612bf757506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612c315760405162461bcd60e51b81526004016109fa906157be565b606e612c3d8282615a05565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610f699190614d18565b6073546001600160a01b03163314612c975760405162461bcd60e51b81526004016109fa906157be565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610f69565b60655460ff1615612d115760405162461bcd60e51b81526004016109fa90615842565b606c54600160a01b900460ff161515600114612d3f5760405162461bcd60e51b81526004016109fa90615ad8565b805180612da25760405162461bcd60e51b815260206004820152603f6024820152600080516020615e7483398151915260448201527f65733a204d75737420666f726365206174206c6561737420312062617463680060648201526084016109fa565b6103e88110612e135760405162461bcd60e51b81526020600482015260436024820152600080516020615e7483398151915260448201527f65733a2043616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a4016109fa565b6068546001600160401b03600160c01b8204811691612e3b918491600160801b900416615b41565b1115612e975760405162461bcd60e51b81526020600482015260376024820152600080516020615e74833981519152604482015276195cce88119bdc98d94818985d18da081a5b9d985b1a59604a1b60648201526084016109fa565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b848110156130c5576000868281518110612ee457612ee46158aa565b602002602001015190508380612ef9906158c0565b945050600081600001518051906020012082602001518360400151604051602001612f26939291906158e6565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612fc55760405162461bcd60e51b81526020600482015260426024820152600080516020615e7483398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109fa565b612fd0600188615989565b83036130675742620697808360400151612fea9190615817565b6001600160401b031611156130675760405162461bcd60e51b81526020600482015260496024820152600080516020615e7483398151915260448201527f65733a20466f72636564206261746368206973206e6f7420696e2074696d656f6064820152681d5d081c195c9a5bd960ba1b608482015260a4016109fa565b815180516020918201208184015160405161308a93889392914291339101615909565b60405160208183030381529060405280519060200120935085806130ad906158c0565b965050505080806130bd90615948565b915050612ec8565b50606880546001600160401b031916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b0319909216919091179286168502929092179091558554600160401b600160c01b03191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166131cf5760405162461bcd60e51b81526004016109fa90615b59565b6073546001600160a01b031633146131f95760405162461bcd60e51b81526004016109fa906157be565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561324957600080fd5b505af115801561325d573d6000803e3d6000fd5b5050505061259b614906565b613271613974565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133055760405162461bcd60e51b81526004016109fa90615bb6565b6133168989898989898989896142e2565b606980546001600160401b0319166001600160401b038881169182179092556000908152606d60205260409020859055607254161561336057607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156133a657600080fd5b505af11580156133ba573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff16156134425760405162461bcd60e51b81526004016109fa90615842565b606c54600160a01b900460ff1615156001146134705760405162461bcd60e51b81526004016109fa90615ad8565b600061347b60745490565b9050818111156134e05760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a204e6f7420656e6044820152696f756768206d6174696360b01b60648201526084016109fa565b620493e08351106135515760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b60648201526084016109fa565b60655461357090600160581b90046001600160a01b03163330846139ce565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa1580156135ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135de9190615741565b60688054919250600160c01b9091046001600160401b0316906018613602836158c0565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505083805190602001208142604051602001613643939291906158e6565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b0316600090815260669093529120553233036136e757606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613742565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161373993929190615c13565b60405180910390a25b50505050565b606a546001600160a01b031633146137725760405162461bcd60e51b81526004016109fa90615bb6565b6137828888888888888888613ad9565b606980546001600160401b0319166001600160401b038881169182179092556000908152606d6020526040902085905560725416156137cc57607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561381257600080fd5b505af1158015613826573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e15565b6073546001600160a01b031633146138915760405162461bcd60e51b81526004016109fa906157be565b606a80546001600160a01b0319166001600160a01b0383161790556040517f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90610f69908390614e58565b6138e4613974565b6001600160a01b0381166139495760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109fa565b6127a481614220565b61395a613974565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b0316331461259b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109fa565b6040516001600160a01b03808516602483015283166044820152606481018290526137429085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261495d565b6072546001600160401b03600160401b820481169116111561259b57607254600090613a7690600160401b90046001600160401b03166001615817565b9050613a8181611115565b156127a457607254600090600290613aa39084906001600160401b0316615961565b613aad9190615c46565b613ab79083615817565b9050613ac281611115565b15613ad057612bb681611e27565b612bb682611e27565b600080613ae4612bba565b90506001600160401b038a1615613c4a576072546001600160401b03908116908b161115613b9c5760405162461bcd60e51b815260206004820152605960248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20706560448201527f6e64696e6753746174654e756d206d757374206265206c657373206f7220657160648201527875616c207468616e206c61737450656e64696e67537461746560381b608482015260a4016109fa565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c445760405162461bcd60e51b815260206004820152604d6024820152600080516020615e3483398151915260448201527f69744e756d4261746368206d757374206d61746368207468652070656e64696e60648201526c0ce40e6e8c2e8ca40c4c2e8c6d609b1b608482015260a4016109fa565b50613d70565b6001600160401b0389166000908152606d6020526040902054915081613cd45760405162461bcd60e51b815260206004820152604460248201819052600080516020615e34833981519152908201527f69744e756d426174636820737461746520726f6f7420646f6573206e6f7420656064820152631e1a5cdd60e21b608482015260a4016109fa565b806001600160401b0316896001600160401b03161115613d705760405162461bcd60e51b815260206004820152605e6024820152600080516020615e3483398151915260448201527f69744e756d4261746368206d757374206265206c657373206f7220657175616c60648201527f207468616e2063757272656e744c617374566572696669656442617463680000608482015260a4016109fa565b806001600160401b0316886001600160401b031611613e185760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20666960448201527f6e616c4e65774261746368206d75737420626520626967676572207468616e206064820152770c6eae4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d60431b608482015260a4016109fa565b6000613e278a8a8a868b610f74565b90506000600080516020615e94833981519152600283604051613e4a9190615725565b602060405180830381855afa158015613e67573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613e8a9190615741565b613e949190615770565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613ed8918b918b918b9190600401615c6c565b602060405180830381865afa158015613ef5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f199190615ce6565b613f795760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20496e60448201526a3b30b634b210383937b7b360a91b60648201526084016109fa565b613fbc33613f87858d615961565b6001600160401b0316613f986128d7565b613fa291906159a0565b606554600160581b90046001600160a01b03169190614a34565b505050505050505050505050565b6000613fd4612bba565b905081600080613fe48484615961565b6001600160401b031690505b836001600160401b0316836001600160401b031614614096576001600160401b03808416600090815260676020526040902060655460018201549192610100909104811691614040911642615989565b111561407b57600181015461406590600160401b90046001600160401b031685615961565b614078906001600160401b031684615b41565b92505b60010154600160401b90046001600160401b03169250613ff0565b60006140a28383615989565b90508281101561411c5760006140b88285615989565b9050600c81116140c857806140cb565b600c5b90506140d88160036159a0565b6140e390600a615de7565b6065546140fc908390600160481b900461ffff16615de7565b60745461410991906159a0565b6141139190615ac4565b607455506141a8565b60006141288483615989565b9050600c8111614138578061413b565b600c5b9050600061414a8260036159a0565b61415590600a615de7565b60655461416e908490600160481b900461ffff16615de7565b60745461417b91906159a0565b6141859190615ac4565b90508060745460745461419891906159a0565b6141a29190615ac4565b60745550505b505050505050565b600054610100900460ff1661421b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109fa565b61259b335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156142c257600080fd5b505af11580156142d6573d6000803e3d6000fd5b5050505061259b614a64565b60006001600160401b038a1615614452576072546001600160401b03908116908b16111561439a5760405162461bcd60e51b81526020600482015260656024820152600080516020615e5483398151915260448201527f696e6753746174653a2070656e64696e6753746174654e756d206d757374206260648201527f65206c657373206f7220657175616c207468616e206c61737450656e64696e67608482015264537461746560d81b60a482015260c4016109fa565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b909204161461444c5760405162461bcd60e51b81526020600482015260596024820152600080516020615e5483398151915260448201527f696e6753746174653a20696e69744e756d4261746368206d757374206d6174636064820152780d040e8d0ca40e0cadcc8d2dcce40e6e8c2e8ca40c4c2e8c6d603b1b608482015260a4016109fa565b5061458b565b506001600160401b0387166000908152606d6020526040902054806144e65760405162461bcd60e51b81526020600482015260506024820152600080516020615e5483398151915260448201527f696e6753746174653a20696e69744e756d426174636820737461746520726f6f60648201526f1d08191bd95cc81b9bdd08195e1a5cdd60821b608482015260a4016109fa565b6069546001600160401b03908116908916111561458b5760405162461bcd60e51b81526020600482015260636024820152600080516020615e5483398151915260448201527f696e6753746174653a20696e69744e756d4261746368206d757374206265206c60648201527f657373206f7220657175616c207468616e206c617374566572696669656442616084820152620e8c6d60eb1b60a482015260c4016109fa565b6072546001600160401b03908116908a16118015906145bb5750896001600160401b0316896001600160401b0316115b80156145dc57506072546001600160401b03600160401b9091048116908a16115b61464d5760405162461bcd60e51b81526020600482015260486024820152600080516020615e5483398151915260448201527f696e6753746174653a2066696e616c50656e64696e6753746174654e756d20696064820152671b98dbdc9c9958dd60c21b608482015260a4016109fa565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146147065760405162461bcd60e51b81526020600482015260636024820152600080516020615e5483398151915260448201527f696e6753746174653a2066696e616c4e65774261746368206d7573742062652060648201527f657175616c207468616e2063757272656e744c617374566572696669656442616084820152620e8c6d60eb1b60a482015260c4016109fa565b6000614715898989858a610f74565b90506000600080516020615e948339815191526002836040516147389190615725565b602060405180830381855afa158015614755573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906147789190615741565b6147829190615770565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916147c6918a918a918a9190600401615c6c565b602060405180830381865afa1580156147e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148079190615ce6565b6148615760405162461bcd60e51b81526020600482015260376024820152600080516020615e5483398151915260448201527634b733a9ba30ba329d1024b73b30b634b210383937b7b360491b60648201526084016109fa565b6001600160401b038b16600090815260716020526040902060020154879003613fbc5760405162461bcd60e51b815260206004820152605b6024820152600080516020615e5483398151915260448201527f696e6753746174653a2053746f72656420726f6f74206d75737420626520646960648201527f66666572656e74207468616e206e657720737461746520726f6f740000000000608482015260a4016109fa565b60655460ff166149285760405162461bcd60e51b81526004016109fa90615b59565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006149b2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614abf9092919063ffffffff16565b805190915015614a2f57808060200190518101906149d09190615ce6565b614a2f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109fa565b505050565b6040516001600160a01b038316602482015260448101829052614a2f90849063a9059cbb60e01b90606401613a02565b60655460ff1615614a875760405162461bcd60e51b81526004016109fa90615842565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614ace8484600085614ad6565b949350505050565b606082471015614b375760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109fa565b600080866001600160a01b03168587604051614b539190615725565b60006040518083038185875af1925050503d8060008114614b90576040519150601f19603f3d011682016040523d82523d6000602084013e614b95565b606091505b5091509150614ba687838387614bb1565b979650505050505050565b60608315614c20578251600003614c19576001600160a01b0385163b614c195760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109fa565b5081614ace565b614ace8383815115614c355781518083602001fd5b8060405162461bcd60e51b81526004016109fa9190614d18565b80356001600160401b0381168114614c6657600080fd5b919050565b600080600080600060a08688031215614c8357600080fd5b614c8c86614c4f565b9450614c9a60208701614c4f565b9350614ca860408701614c4f565b94979396509394606081013594506080013592915050565b60005b83811015614cdb578181015183820152602001614cc3565b838111156137425750506000910152565b60008151808452614d04816020860160208601614cc0565b601f01601f19169290920160200192915050565b602081526000614d2b6020830184614cec565b9392505050565b8060408101831015614d4357600080fd5b92915050565b8060808101831015614d4357600080fd5b6000806000806000806000806101a0898b031215614d7757600080fd5b614d8089614c4f565b9750614d8e60208a01614c4f565b9650614d9c60408a01614c4f565b95506060890135945060808901359350614db98a60a08b01614d32565b9250614dc88a60e08b01614d49565b9150614dd88a6101608b01614d32565b90509295985092959890939650565b600060208284031215614df957600080fd5b813561ffff81168114614d2b57600080fd5b600080600080600060a08688031215614e2357600080fd5b614e2c86614c4f565b9450614e3a60208701614c4f565b94979496505050506040830135926060810135926080909101359150565b6001600160a01b0391909116815260200190565b600060208284031215614e7e57600080fd5b614d2b82614c4f565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614ebf57614ebf614e87565b60405290565b604051606081016001600160401b0381118282101715614ebf57614ebf614e87565b604051601f8201601f191681016001600160401b0381118282101715614f0f57614f0f614e87565b604052919050565b60006001600160401b03821115614f3057614f30614e87565b5060051b60200190565b600082601f830112614f4b57600080fd5b81356001600160401b03811115614f6457614f64614e87565b614f77601f8201601f1916602001614ee7565b818152846020838601011115614f8c57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614fbc57600080fd5b82356001600160401b0380821115614fd357600080fd5b818501915085601f830112614fe757600080fd5b8135614ffa614ff582614f17565b614ee7565b81815260059190911b8301840190848101908883111561501957600080fd5b8585015b838110156150b2578035858111156150355760008081fd5b86016080818c03601f190181131561504d5760008081fd5b615055614e9d565b89830135888111156150675760008081fd5b6150758e8c83870101614f3a565b8252506040808401358b830152606061508f818601614c4f565b8284015261509e848601614c4f565b90830152508552505091860191860161501d565b5098975050505050505050565b6001600160a01b03811681146127a457600080fd5b6000602082840312156150e657600080fd5b8135614d2b816150bf565b600080600080600060a0868803121561510957600080fd5b8535945060208601356001600160401b0381111561512657600080fd5b61513288828901614f3a565b9450506040860135925061514860608701614c4f565b91506080860135615158816150bf565b809150509295509295909350565b600080600080600080600080888a036101c081121561518457600080fd5b893561518f816150bf565b985060208a013561519f816150bf565b975060408a01356151af816150bf565b965060608a01356151bf816150bf565b955060e0607f19820112156151d357600080fd5b5060808901935061016089013592506101808901356001600160401b03808211156151fd57600080fd5b6152098c838d01614f3a565b93506101a08b013591508082111561522057600080fd5b5061522d8b828c01614f3a565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c03121561525c57600080fd5b6152658a614c4f565b985061527360208b01614c4f565b975061528160408b01614c4f565b965061528f60608b01614c4f565b955060808a0135945060a08a013593506152ac8b60c08c01614d32565b92506152bc8b6101008c01614d49565b91506152cc8b6101808c01614d32565b90509295985092959850929598565b6000602082840312156152ed57600080fd5b5035919050565b80151581146127a457600080fd5b60006020828403121561531457600080fd5b8135614d2b816152f4565b60006020828403121561533157600080fd5b81356001600160401b0381111561534757600080fd5b614ace84828501614f3a565b6000602080838503121561536657600080fd5b82356001600160401b038082111561537d57600080fd5b818501915085601f83011261539157600080fd5b813561539f614ff582614f17565b81815260059190911b830184019084810190888311156153be57600080fd5b8585015b838110156150b2578035858111156153da5760008081fd5b86016060818c03601f19018113156153f25760008081fd5b6153fa614ec5565b898301358881111561540c5760008081fd5b61541a8e8c83870101614f3a565b8252506040808401358b830152615432838501614c4f565b90820152855250509186019186016153c2565b6000806000806080858703121561545b57600080fd5b61546485614c4f565b93506020850135925061547960408601614c4f565b915061548760608601614c4f565b905092959194509250565b600080604083850312156154a557600080fd5b82356001600160401b038111156154bb57600080fd5b6154c785828601614f3a565b95602094909401359450505050565b600080604083850312156154e957600080fd5b823591506154f960208401614c4f565b90509250929050565b60208082526058908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2070656e60408201527f64696e6753746174654e756d206d757374206265206c657373206f7220657175606082015277616c207468616e206c61737450656e64696e67537461746560401b608082015260a00190565b6020808252604c90820152600080516020615df483398151915260408201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760608201526b040e6e8c2e8ca40c4c2e8c6d60a31b608082015260a00190565b6020808252604390820152600080516020615df483398151915260408201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786060820152621a5cdd60ea1b608082015260a00190565b6020808252605d90820152600080516020615df483398151915260408201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060608201527f7468616e2063757272656e744c61737456657269666965644261746368000000608082015260a00190565b60208082526057908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2066696e60408201527f616c4e65774261746368206d75737420626520626967676572207468616e20636060820152760eae4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d604b1b608082015260a00190565b60008251615737818460208701614cc0565b9190910192915050565b60006020828403121561575357600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b60008261577f5761577f61575a565b500690565b600181811c9082168061579857607f821691505b6020821081036157b857634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a204f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561583957615839615801565b01949350505050565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b038083168181036158dc576158dc615801565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6001600160601b0319166068820152607c0190565b60006001820161595a5761595a615801565b5060010190565b60006001600160401b038381169083168181101561598157615981615801565b039392505050565b60008282101561599b5761599b615801565b500390565b60008160001904831182151516156159ba576159ba615801565b500290565b601f821115614a2f57600081815260208120601f850160051c810160208610156159e65750805b601f850160051c820191505b818110156141a8578281556001016159f2565b81516001600160401b03811115615a1e57615a1e614e87565b615a3281615a2c8454615784565b846159bf565b602080601f831160018114615a675760008415615a4f5750858301515b600019600386901b1c1916600185901b1785556141a8565b600085815260208120601f198616915b82811015615a9657888601518255948401946001909101908401615a77565b5085821015615ab45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615ad357615ad361575a565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a204f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b60008219821115615b5457615b54615801565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a204f6e6c7920747275737465642061676772656761746f7200000000606082015260800190565b8381526001600160a01b0383166020820152606060408201819052600090615c3d90830184614cec565b95945050505050565b60006001600160401b0380841680615c6057615c6061575a565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615ca457848483379084018281529284019290600101615c84565b5050828760c0870137610100850181815286935091505b6001811015615cda578251825260209283019290910190600101615cbb565b50505095945050505050565b600060208284031215615cf857600080fd5b8151614d2b816152f4565b600181815b80851115615d3e578160001904821115615d2457615d24615801565b80851615615d3157918102915b93841c9390800290615d08565b509250929050565b600082615d5557506001614d43565b81615d6257506000614d43565b8160018114615d785760028114615d8257615d9e565b6001915050614d43565b60ff841115615d9357615d93615801565b50506001821b614d43565b5060208310610133831016604e8410600b8410161715615dc1575081810a614d43565b615dcb8383615d03565b8060001904821115615ddf57615ddf615801565b029392505050565b6000614d2b8383615d4656fe506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e69506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e637953506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20696e506f6c79676f6e5a6b45564d3a3a5f70726f766544697374696e637450656e64506f6c79676f6e5a6b45564d3a3a73657175656e6365466f726365426174636830644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a2046a2646970667358221220228c4202d1acfc209a766c02316b533f9a69dc61c46b673c3a2cf711afaf3feb64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/PolygonZkEVM.sol b/contracts/PolygonZkEVM.sol index 02a21b316..3522331fd 100644 --- a/contracts/PolygonZkEVM.sol +++ b/contracts/PolygonZkEVM.sol @@ -827,6 +827,7 @@ contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { /** * @notice Function to update the batch fee based on the new verfied batches * The batch fee will not be updated when the trusted aggregator verify batches + * @param newLastVerifiedBatch New last verified batch */ function _updateBatchFee(uint64 newLastVerifiedBatch) internal { uint64 currentLastVerifiedBatch = getLastVerifiedBatch(); @@ -1493,7 +1494,8 @@ contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { * @notice Function to calculate the input snark bytes * @param initNumBatch Batch which the aggregator starts teh verification * @param finalNewBatch Last batch aggregator intends to verify - * @param newLocalExitRoot New local exit root once the batch is processed + * @param newLocalExitRoot New local exit root once the batch is processed + * @param oldStateRoot State root before batch is processed * @param newStateRoot New State root once the batch is processed */ function getInputSnarkBytes( diff --git a/contracts/PolygonZkEVMBridge.sol b/contracts/PolygonZkEVMBridge.sol index a99792525..684532a7a 100644 --- a/contracts/PolygonZkEVMBridge.sol +++ b/contracts/PolygonZkEVMBridge.sol @@ -438,6 +438,9 @@ contract PolygonZkEVMBridge is * @notice Returns the precalculated address of a wrapper using the token information * @param originNetwork Origin network * @param originTokenAddress Origin token address, 0 address is reserved for ether + * @param name Name of the token + * @param symbol Symbol of the token + * @param decimals Decimals of the token */ function precalculatedWrapperAddress( uint32 originNetwork, diff --git a/docs/PolygonZkEVM.md b/docs/PolygonZkEVM.md index 91c6de520..e1cd40317 100644 --- a/docs/PolygonZkEVM.md +++ b/docs/PolygonZkEVM.md @@ -156,12 +156,17 @@ Can be called by the trusted aggregator, which can consolidate any state without ### _updateBatchFee ```solidity function _updateBatchFee( + uint64 newLastVerifiedBatch ) internal ``` Function to update the batch fee based on the new verfied batches The batch fee will not be updated when the trusted aggregator verify batches +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`newLastVerifiedBatch` | uint64 | New last verified batch ### forceBatch ```solidity @@ -489,6 +494,7 @@ Function to calculate the reward to verify a single batch uint64 initNumBatch, uint64 finalNewBatch, bytes32 newLocalExitRoot, + bytes32 oldStateRoot, bytes32 newStateRoot ) public returns (bytes) ``` @@ -500,7 +506,8 @@ Function to calculate the input snark bytes | :--- | :--- | :------------------------------------------------------------------- | |`initNumBatch` | uint64 | Batch which the aggregator starts teh verification |`finalNewBatch` | uint64 | Last batch aggregator intends to verify -|`newLocalExitRoot` | bytes32 | New local exit root once the batch is processed +|`newLocalExitRoot` | bytes32 | New local exit root once the batch is processed +|`oldStateRoot` | bytes32 | State root before batch is processed |`newStateRoot` | bytes32 | New State root once the batch is processed ## Events diff --git a/docs/PolygonZkEVMBridge.md b/docs/PolygonZkEVMBridge.md index c086be0bc..75742eb0a 100644 --- a/docs/PolygonZkEVMBridge.md +++ b/docs/PolygonZkEVMBridge.md @@ -126,7 +126,10 @@ Verify merkle proof and execute message ```solidity function precalculatedWrapperAddress( uint32 originNetwork, - address originTokenAddress + address originTokenAddress, + string name, + string symbol, + uint8 decimals ) public returns (address) ``` Returns the precalculated address of a wrapper using the token information @@ -137,6 +140,9 @@ Returns the precalculated address of a wrapper using the token information | :--- | :--- | :------------------------------------------------------------------- | |`originNetwork` | uint32 | Origin network |`originTokenAddress` | address | Origin token address, 0 address is reserved for ether +|`name` | string | Name of the token +|`symbol` | string | Symbol of the token +|`decimals` | uint8 | Decimals of the token ### getTokenWrappedAddress ```solidity From a0cf29e69575d6f4f741676318dbada29e9ca8b9 Mon Sep 17 00:00:00 2001 From: invocamanman Date: Thu, 22 Dec 2022 03:39:22 +0100 Subject: [PATCH 71/71] mini fix --- compiled-contracts/PolygonZkEVM.json | 4 +-- compiled-contracts/PolygonZkEVMBridge.json | 4 +-- .../PolygonZkEVMBridgeMock.json | 4 +-- compiled-contracts/PolygonZkEVMMock.json | 4 +-- contracts/PolygonZkEVM.sol | 31 ++++++++++++------- contracts/PolygonZkEVMBridge.sol | 1 + docs/PolygonZkEVM.md | 14 +++++++++ docs/PolygonZkEVMBridge.md | 4 ++- test/contracts/proofOfEfficiency.test.js | 6 ++-- 9 files changed, 48 insertions(+), 24 deletions(-) diff --git a/compiled-contracts/PolygonZkEVM.json b/compiled-contracts/PolygonZkEVM.json index b341d9bb3..d911558be 100644 --- a/compiled-contracts/PolygonZkEVM.json +++ b/compiled-contracts/PolygonZkEVM.json @@ -1469,8 +1469,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50615503806100206000396000f3fe608060405234801561001057600080fd5b506004361061032f5760003560e01c80638da5cb5b116101b4578063cfa8ed47116100fa578063e7a7ed021161009d578063e7a7ed021461080e578063e8bf92ed14610828578063eaeb077b1461083b578063edc411211461084e578063f14916d614610861578063f2fde38b14610874578063f851a44014610887578063f8b823e41461089a57600080fd5b8063cfa8ed471461077c578063d02103ca14610796578063d8d1091b146107a9578063d8f54db0146107bc578063d939b315146107d0578063dbc16976146107ea578063e11f3f18146107f2578063e217cfd61461080557600080fd5b8063ab9fc5ef11610162578063ab9fc5ef14610688578063adc879e914610692578063afd23cbe146106ac578063b4d63f58146106d4578063b6b0b09714610734578063c0ed84e01461074e578063c89e42df14610756578063cf1363061461076957600080fd5b80638da5cb5b1461062157806399f5634e146106325780639c9f3dfe1461063a5780639eb831b91461064d5780639f0d039d14610655578063a3c573eb1461065d578063aa58bad61461067057600080fd5b80634a910e6a11610279578063715018a611610227578063715018a61461053b5780637215541a1461054357806375c508b3146105565780637fcb365314610569578063837a47381461057c578063841b24d7146105ea5780638b48931e146106045780638c4a0af71461060e57600080fd5b80634a910e6a146104a75780635392c5e0146104ba578063542028d5146104da57806360943d6a146104e25780636b8616ce146104f55780636ff512cc14610515578063704b6c021461052857600080fd5b8063383b3be8116102e1578063383b3be8146103fa578063394218e91461040d5780633c15826714610420578063423fa85614610433578063456052671461044d578063458c0477146104675780634834a3431461047a5780634a1a89a71461048d57600080fd5b8063107bf28c1461033457806315064c96146103525780631816b7e51461036f57806319d8ac6114610384578063220d7899146103af57806329878983146103c25780632d0889d3146103e2575b600080fd5b61033c6108a3565b6040516103499190614647565b60405180910390f35b60655461035f9060ff1681565b6040519015158152602001610349565b61038261037d366004614661565b610931565b005b606854610397906001600160401b031681565b6040516001600160401b039091168152602001610349565b61033c6103bd3660046146a1565b610a5b565b606a546103d5906001600160a01b031681565b60405161034991906146ee565b6103ec620493e081565b604051908152602001610349565b61035f610408366004614702565b610bfc565b61038261041b366004614702565b610c43565b61038261042e36600461483f565b610dff565b60685461039790600160401b90046001600160401b031681565b60685461039790600160801b90046001600160401b031681565b607254610397906001600160401b031681565b61038261048836600461497d565b6115c6565b60725461039790600160401b90046001600160401b031681565b6103826104b5366004614702565b61190f565b6103ec6104c8366004614702565b606d6020526000908152604090205481565b61033c611baa565b6103826104f0366004614a1f565b611bb7565b6103ec610503366004614702565b60666020526000908152604090205481565b610382610523366004614af6565b611f12565b610382610536366004614af6565b611f90565b610382612005565b610382610551366004614702565b612019565b610382610564366004614b13565b612223565b606954610397906001600160401b031681565b6105bf61058a366004614bb1565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610349565b60725461039790600160c01b90046001600160401b031681565b61039762093a8081565b61038261061c366004614bd8565b6122b2565b6033546001600160a01b03166103d5565b6103ec612329565b610382610648366004614702565b612411565b6103ec600c81565b6074546103ec565b6070546103d5906001600160a01b031681565b6065546103979061010090046001600160401b031681565b6103976206978081565b606c5461039790600160a81b90046001600160401b031681565b6065546106c190600160481b900461ffff1681565b60405161ffff9091168152602001610349565b61070f6106e2366004614702565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610349565b6065546103d590600160581b90046001600160a01b031681565b6103976125bf565b610382610764366004614bf5565b61260c565b610382610777366004614702565b612672565b6069546103d590600160401b90046001600160a01b031681565b606c546103d5906001600160a01b031681565b6103826107b7366004614c29565b6126f3565b606c5461035f90600160a01b900460ff1681565b60725461039790600160801b90046001600160401b031681565b610382612bb3565b610382610800366004614b13565b612c6f565b6103976103e881565b60685461039790600160c01b90046001600160401b031681565b606b546103d5906001600160a01b031681565b610382610849366004614d1b565b612db4565b61038261085c36600461497d565b6130dd565b61038261086f366004614af6565b6131fd565b610382610882366004614af6565b613272565b6073546103d5906001600160a01b031681565b6103ec60745481565b606f80546108b090614d5f565b80601f01602080910402602001604051908101604052809291908181526020018280546108dc90614d5f565b80156109295780601f106108fe57610100808354040283529160200191610929565b820191906000526020600020905b81548152906001019060200180831161090c57829003601f168201915b505050505081565b6073546001600160a01b031633146109645760405162461bcd60e51b815260040161095b90614d99565b60405180910390fd5b6103e88161ffff161015801561097f57506104008161ffff16105b610a045760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a40161095b565b6065805461ffff60481b1916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610a8d57508115155b610b01576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f74206578697374606482015260840161095b565b80610b76576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f74206578697374606482015260840161095b565b606c54604080516001600160601b03193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610c3292600160801b90920481169116614df2565b6001600160401b0316111592915050565b6073546001600160a01b03163314610c6d5760405162461bcd60e51b815260040161095b90614d99565b62093a806001600160401b0382161115610d065760405162461bcd60e51b815260206004820152604e60248201527f506f6c79676f6e5a6b45564d3a3a73657454727573746564416767726567617460448201527f6f7254696d656f75743a20457863656564206d61782068616c7420616767726560648201526d19d85d1a5bdb881d1a5b595bdd5d60921b608482015260a40161095b565b60655460ff16610da9576072546001600160401b03600160c01b909104811690821610610da95760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a204e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a40161095b565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610a50565b60655460ff1615610e225760405162461bcd60e51b815260040161095b90614e1d565b606954600160401b90046001600160a01b03163314610ea95760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a204f6e6c7920747275737465642073657175656e636572000000000000606482015260840161095b565b805180610f1e5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e63652031206261746368000000606482015260840161095b565b6103e88110610f97576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e792062617463686573606482015260840161095b565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b858110156113fc576000878281518110610fea57610fea614e85565b60200260200101519050600081606001516001600160401b0316111561117a578361101481614e9b565b94505060008160000151805190602001208260200151836060015160405160200161104193929190614ec1565b60408051601f1981840301815291815281516020928301206001600160401b0388166000908152606690935291205490915081146110d55760405162461bcd60e51b815260206004820152603d60248201526000805160206154ae83398151915260448201527f6f7263656420626174636865732064617461206d757374206d61746368000000606482015260840161095b565b81606001516001600160401b031682604001516001600160401b031610156111745760405162461bcd60e51b815260206004820152605860248201526000805160206154ae83398151915260448201527f6f7263656420626174636865732074696d657374616d70206d757374206265206064820152773134b3b3b2b91037b91032b8bab0b6103a3430b71036b4b760411b608482015260a40161095b565b506112ef565b602081015115806112035750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916111bd9160040190815260200190565b6020604051808303816000875af11580156111dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112009190614ee4565b15155b6112755760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d757374206578697374000000000000606482015260840161095b565b805151620493e0116112ef5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f77000000000000606482015260840161095b565b856001600160401b031681604001516001600160401b03161015801561132257504281604001516001600160401b031611155b6113945760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e6765000000606482015260840161095b565b805180516020918201208183015160408085015190516113bb948894939291339101614efd565b60405160208183030381529060405280519060200120925084806113de90614e9b565b955050806040015195505080806113f490614f3c565b915050610fce565b506068546001600160401b03600160c01b9091048116908316111561146f5760405162461bcd60e51b815260206004820152603560248201526000805160206154ae8339815191526044820152746f7263652062617463686573206f766572666c6f7760581b606482015260840161095b565b60685460009061148f90600160801b90046001600160401b031684614f55565b6114a2906001600160401b031687614f7d565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115779033903090849061155c9190614f94565b606554600160581b90046001600160a01b03169291906132e8565b61157f613353565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff16156115e95760405162461bcd60e51b815260040161095b90614e1d565b6072546001600160401b03878116600090815260676020526040902060010154429261162092600160c01b90910481169116614df2565b6001600160401b031611156116a95760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2054727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a40161095b565b6103e86116b68888614f55565b6001600160401b0316106117325760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2043616e60448201527f6e6f74207665726966792074686174206d616e79206261746368657300000000606482015260840161095b565b61174288888888888888886133f7565b61174b866138fa565b607254600160801b90046001600160401b0316600003611813576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d6020526040902085905560725416156117b057607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156117f657600080fd5b505af115801561180a573d6000803e3d6000fd5b505050506118c4565b61181b613353565b607280546001600160401b031690600061183483614e9b565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b0381161580159061193c57506072546001600160401b03600160401b9091048116908216115b801561195757506072546001600160401b0390811690821611155b6119d55760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a40161095b565b606a546001600160a01b03163314611a7f576119f081610bfc565b611a7f5760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2050656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a40161095b565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611b3c57600080fd5b505af1158015611b50573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611b9d91815260200190565b60405180910390a3505050565b606e80546108b090614d5f565b600054610100900460ff1615808015611bd75750600054600160ff909116105b80611bf15750303b158015611bf1575060005460ff166001145b611c545760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161095b565b6000805460ff191660011790558015611c77576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c81169190911790925560658054600160581b600160f81b031916600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611cdf6020860186614af6565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d0f6060860160408701614af6565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611d4a60c0860160a08701614af6565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611da760e0860160c08701614702565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611dde6040860160208701614702565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611e1a6080860160608701614702565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611e5660a0860160808701614bd8565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611e7e8482614ff9565b50606f611e8b8382614ff9565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611ec1613ae0565b8015611f07576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611f3c5760405162461bcd60e51b815260040161095b90614d99565b60698054600160401b600160e01b031916600160401b6001600160a01b038416021790556040517ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090610a509083906146ee565b6073546001600160a01b03163314611fba5760405162461bcd60e51b815260040161095b90614d99565b607380546001600160a01b0319166001600160a01b0383161790556040517f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190610a509083906146ee565b61200d613b54565b6120176000613bae565b565b6033546001600160a01b031633146122185760006120356125bf565b9050806001600160401b0316826001600160401b0316116120ac5760405162461bcd60e51b815260206004820152603c602482015260008051602061542e83398151915260448201527f746174653a20426174636820616c726561647920766572696669656400000000606482015260840161095b565b6068546001600160401b03600160401b9091048116908316118015906120ee57506001600160401b038083166000908152606760205260409020600101541615155b6121675760405162461bcd60e51b8152602060048201526050602482015260008051602061542e83398151915260448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a40161095b565b6001600160401b0380831660009081526067602052604090206001015442916121959162093a809116614df2565b6001600160401b031611156122165760405162461bcd60e51b815260206004820152604d602482015260008051602061542e83398151915260448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a40161095b565b505b612220613c00565b50565b60655460ff16156122465760405162461bcd60e51b815260040161095b90614e1d565b612257898989898989898989613c70565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f07613c00565b6073546001600160a01b031633146122dc5760405162461bcd60e51b815260040161095b90614d99565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a5090831515815260200190565b6065546040516370a0823160e01b81526000918291600160581b9091046001600160a01b0316906370a08231906123649030906004016146ee565b602060405180830381865afa158015612381573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a59190614ee4565b905060006123b16125bf565b6068546001600160401b03600160401b82048116916123e191600160801b8204811691600160c01b900416614f55565b6123eb9190614df2565b6123f59190614f55565b6001600160401b0316905061240a81836150ce565b9250505090565b6073546001600160a01b0316331461243b5760405162461bcd60e51b815260040161095b90614d99565b62093a806001600160401b03821611156124cf5760405162461bcd60e51b815260206004820152604960248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a20457863656564206d61782068616c74206167677265676174696f6064820152681b881d1a5b595bdd5d60ba1b608482015260a40161095b565b60655460ff16612564576072546001600160401b03600160801b9091048116908216106125645760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a204e65772074696d656f7574206d757374206265206c6f77657200606482015260840161095b565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610a50565b6072546000906001600160401b0316156125fc57506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126365760405162461bcd60e51b815260040161095b90614d99565b606e6126428282614ff9565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a509190614647565b6073546001600160a01b0316331461269c5760405162461bcd60e51b815260040161095b90614d99565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610a50565b60655460ff16156127165760405162461bcd60e51b815260040161095b90614e1d565b606c54600160a01b900460ff1615156001146127445760405162461bcd60e51b815260040161095b906150e2565b8051806127a75760405162461bcd60e51b815260206004820152603f602482015260008051602061548e83398151915260448201527f65733a204d75737420666f726365206174206c65617374203120626174636800606482015260840161095b565b6103e881106128185760405162461bcd60e51b8152602060048201526043602482015260008051602061548e83398151915260448201527f65733a2043616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a40161095b565b6068546001600160401b03600160c01b8204811691612840918491600160801b90041661514b565b111561289c5760405162461bcd60e51b8152602060048201526037602482015260008051602061548e833981519152604482015276195cce88119bdc98d94818985d18da081a5b9d985b1a59604a1b606482015260840161095b565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612aca5760008682815181106128e9576128e9614e85565b6020026020010151905083806128fe90614e9b565b94505060008160000151805190602001208260200151836040015160405160200161292b93929190614ec1565b60408051601f1981840301815291815281516020928301206001600160401b0388166000908152606690935291205490915081146129ca5760405162461bcd60e51b8152602060048201526042602482015260008051602061548e83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a40161095b565b6129d5600188614f7d565b8303612a6c57426206978083604001516129ef9190614df2565b6001600160401b03161115612a6c5760405162461bcd60e51b8152602060048201526049602482015260008051602061548e83398151915260448201527f65733a20466f72636564206261746368206973206e6f7420696e2074696d656f6064820152681d5d081c195c9a5bd960ba1b608482015260a40161095b565b8151805160209182012081840151604051612a8f93889392914291339101614efd565b6040516020818303038152906040528051906020012093508580612ab290614e9b565b96505050508080612ac290614f3c565b9150506128cd565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b0319909216919091179286168502929092179091558554600160401b600160c01b03191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612bd55760405162461bcd60e51b815260040161095b90615163565b6073546001600160a01b03163314612bff5760405162461bcd60e51b815260040161095b90614d99565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612c4f57600080fd5b505af1158015612c63573d6000803e3d6000fd5b505050506120176142a6565b606a546001600160a01b03163314612c995760405162461bcd60e51b815260040161095b906151c0565b612caa898989898989898989613c70565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612cf557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612d3b57600080fd5b505af1158015612d4f573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612dd75760405162461bcd60e51b815260040161095b90614e1d565b606c54600160a01b900460ff161515600114612e055760405162461bcd60e51b815260040161095b906150e2565b6000612e1060745490565b905081811115612e755760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a204e6f7420656e6044820152696f756768206d6174696360b01b606482015260840161095b565b620493e0835110612ee65760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b606482015260840161095b565b606554612f0590600160581b90046001600160a01b03163330846132e8565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015612f4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f739190614ee4565b60688054919250600160c01b9091046001600160401b0316906018612f9783614e9b565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505083805190602001208142604051602001612fd893929190614ec1565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361307c57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26130d7565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516130ce9392919061521d565b60405180910390a25b50505050565b606a546001600160a01b031633146131075760405162461bcd60e51b815260040161095b906151c0565b61311788888888888888886133f7565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561316257607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156131a857600080fd5b505af11580156131bc573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce7906020016118fd565b6073546001600160a01b031633146132275760405162461bcd60e51b815260040161095b90614d99565b606a80546001600160a01b0319166001600160a01b0383161790556040517f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90610a509083906146ee565b61327a613b54565b6001600160a01b0381166132df5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161095b565b61222081613bae565b6040516001600160a01b03808516602483015283166044820152606481018290526130d79085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526142fd565b6072546001600160401b03600160401b82048116911611156120175760725460009061339090600160401b90046001600160401b03166001614df2565b905061339b81610bfc565b15612220576072546000906002906133bd9084906001600160401b0316614f55565b6133c79190615250565b6133d19083614df2565b90506133dc81610bfc565b156133ee576133ea8161190f565b5050565b6133ea8261190f565b6000806134026125bf565b90506001600160401b038a1615613568576072546001600160401b03908116908b1611156134ba5760405162461bcd60e51b815260206004820152605960248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20706560448201527f6e64696e6753746174654e756d206d757374206265206c657373206f7220657160648201527875616c207468616e206c61737450656e64696e67537461746560381b608482015260a40161095b565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b90920416146135625760405162461bcd60e51b815260206004820152604d602482015260008051602061544e83398151915260448201527f69744e756d4261746368206d757374206d61746368207468652070656e64696e60648201526c0ce40e6e8c2e8ca40c4c2e8c6d609b1b608482015260a40161095b565b5061368e565b6001600160401b0389166000908152606d60205260409020549150816135f25760405162461bcd60e51b81526020600482015260446024820181905260008051602061544e833981519152908201527f69744e756d426174636820737461746520726f6f7420646f6573206e6f7420656064820152631e1a5cdd60e21b608482015260a40161095b565b806001600160401b0316896001600160401b0316111561368e5760405162461bcd60e51b815260206004820152605e602482015260008051602061544e83398151915260448201527f69744e756d4261746368206d757374206265206c657373206f7220657175616c60648201527f207468616e2063757272656e744c617374566572696669656442617463680000608482015260a40161095b565b806001600160401b0316886001600160401b0316116137365760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20666960448201527f6e616c4e65774261746368206d75737420626520626967676572207468616e206064820152770c6eae4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d60431b608482015260a40161095b565b60006137458a8a8a868b610a5b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161377a9190615276565b602060405180830381855afa158015613797573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906137ba9190614ee4565b6137c49190615292565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613808918b918b918b91906004016152a6565b602060405180830381865afa158015613825573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138499190615320565b6138a95760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20496e60448201526a3b30b634b210383937b7b360a91b606482015260840161095b565b6138ec336138b7858d614f55565b6001600160401b03166138c8612329565b6138d29190614f94565b606554600160581b90046001600160a01b031691906143d4565b505050505050505050505050565b60006139046125bf565b9050816000806139148484614f55565b6001600160401b031690505b836001600160401b0316836001600160401b0316146139c6576001600160401b03808416600090815260676020526040902060655460018201549192610100909104811691613970911642614f7d565b11156139ab57600181015461399590600160401b90046001600160401b031685614f55565b6139a8906001600160401b03168461514b565b92505b60010154600160401b90046001600160401b03169250613920565b60006139d28383614f7d565b905082811015613a4c5760006139e88285614f7d565b9050600c81116139f857806139fb565b600c5b9050613a08816003614f94565b613a1390600a615421565b606554613a2c908390600160481b900461ffff16615421565b607454613a399190614f94565b613a4391906150ce565b60745550613ad8565b6000613a588483614f7d565b9050600c8111613a685780613a6b565b600c5b90506000613a7a826003614f94565b613a8590600a615421565b606554613a9e908490600160481b900461ffff16615421565b607454613aab9190614f94565b613ab591906150ce565b905080607454607454613ac89190614f94565b613ad291906150ce565b60745550505b505050505050565b600054610100900460ff16613b4b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161095b565b61201733613bae565b6033546001600160a01b031633146120175760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095b565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613c5057600080fd5b505af1158015613c64573d6000803e3d6000fd5b50505050612017614404565b60006001600160401b038a1615613de0576072546001600160401b03908116908b161115613d285760405162461bcd60e51b8152602060048201526065602482015260008051602061546e83398151915260448201527f696e6753746174653a2070656e64696e6753746174654e756d206d757374206260648201527f65206c657373206f7220657175616c207468616e206c61737450656e64696e67608482015264537461746560d81b60a482015260c40161095b565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613dda5760405162461bcd60e51b8152602060048201526059602482015260008051602061546e83398151915260448201527f696e6753746174653a20696e69744e756d4261746368206d757374206d6174636064820152780d040e8d0ca40e0cadcc8d2dcce40e6e8c2e8ca40c4c2e8c6d603b1b608482015260a40161095b565b50613f19565b506001600160401b0387166000908152606d602052604090205480613e745760405162461bcd60e51b8152602060048201526050602482015260008051602061546e83398151915260448201527f696e6753746174653a20696e69744e756d426174636820737461746520726f6f60648201526f1d08191bd95cc81b9bdd08195e1a5cdd60821b608482015260a40161095b565b6069546001600160401b039081169089161115613f195760405162461bcd60e51b8152602060048201526063602482015260008051602061546e83398151915260448201527f696e6753746174653a20696e69744e756d4261746368206d757374206265206c60648201527f657373206f7220657175616c207468616e206c617374566572696669656442616084820152620e8c6d60eb1b60a482015260c40161095b565b6072546001600160401b03908116908a1611801590613f495750896001600160401b0316896001600160401b0316115b8015613f6a57506072546001600160401b03600160401b9091048116908a16115b613fdb5760405162461bcd60e51b8152602060048201526048602482015260008051602061546e83398151915260448201527f696e6753746174653a2066696e616c50656e64696e6753746174654e756d20696064820152671b98dbdc9c9958dd60c21b608482015260a40161095b565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146140945760405162461bcd60e51b8152602060048201526063602482015260008051602061546e83398151915260448201527f696e6753746174653a2066696e616c4e65774261746368206d7573742062652060648201527f657175616c207468616e2063757272656e744c617374566572696669656442616084820152620e8c6d60eb1b60a482015260c40161095b565b60006140a3898989858a610a5b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516140d89190615276565b602060405180830381855afa1580156140f5573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906141189190614ee4565b6141229190615292565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614166918a918a918a91906004016152a6565b602060405180830381865afa158015614183573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141a79190615320565b6142015760405162461bcd60e51b8152602060048201526037602482015260008051602061546e83398151915260448201527634b733a9ba30ba329d1024b73b30b634b210383937b7b360491b606482015260840161095b565b6001600160401b038b166000908152607160205260409020600201548790036138ec5760405162461bcd60e51b815260206004820152605b602482015260008051602061546e83398151915260448201527f696e6753746174653a2053746f72656420726f6f74206d75737420626520646960648201527f66666572656e74207468616e206e657720737461746520726f6f740000000000608482015260a40161095b565b60655460ff166142c85760405162461bcd60e51b815260040161095b90615163565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614352826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661445f9092919063ffffffff16565b8051909150156143cf57808060200190518101906143709190615320565b6143cf5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161095b565b505050565b6040516001600160a01b0383166024820152604481018290526143cf90849063a9059cbb60e01b9060640161331c565b60655460ff16156144275760405162461bcd60e51b815260040161095b90614e1d565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b606061446e8484600085614476565b949350505050565b6060824710156144d75760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161095b565b600080866001600160a01b031685876040516144f39190615276565b60006040518083038185875af1925050503d8060008114614530576040519150601f19603f3d011682016040523d82523d6000602084013e614535565b606091505b509150915061454687838387614551565b979650505050505050565b606083156145c05782516000036145b9576001600160a01b0385163b6145b95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161095b565b508161446e565b61446e83838151156145d55781518083602001fd5b8060405162461bcd60e51b815260040161095b9190614647565b60005b8381101561460a5781810151838201526020016145f2565b838111156130d75750506000910152565b600081518084526146338160208601602086016145ef565b601f01601f19169290920160200192915050565b60208152600061465a602083018461461b565b9392505050565b60006020828403121561467357600080fd5b813561ffff8116811461465a57600080fd5b80356001600160401b038116811461469c57600080fd5b919050565b600080600080600060a086880312156146b957600080fd5b6146c286614685565b94506146d060208701614685565b94979496505050506040830135926060810135926080909101359150565b6001600160a01b0391909116815260200190565b60006020828403121561471457600080fd5b61465a82614685565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156147555761475561471d565b60405290565b604051606081016001600160401b03811182821017156147555761475561471d565b604051601f8201601f191681016001600160401b03811182821017156147a5576147a561471d565b604052919050565b60006001600160401b038211156147c6576147c661471d565b5060051b60200190565b600082601f8301126147e157600080fd5b81356001600160401b038111156147fa576147fa61471d565b61480d601f8201601f191660200161477d565b81815284602083860101111561482257600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561485257600080fd5b82356001600160401b038082111561486957600080fd5b818501915085601f83011261487d57600080fd5b813561489061488b826147ad565b61477d565b81815260059190911b830184019084810190888311156148af57600080fd5b8585015b83811015614948578035858111156148cb5760008081fd5b86016080818c03601f19018113156148e35760008081fd5b6148eb614733565b89830135888111156148fd5760008081fd5b61490b8e8c838701016147d0565b8252506040808401358b8301526060614925818601614685565b82840152614934848601614685565b9083015250855250509186019186016148b3565b5098975050505050505050565b806040810183101561496657600080fd5b92915050565b806080810183101561496657600080fd5b6000806000806000806000806101a0898b03121561499a57600080fd5b6149a389614685565b97506149b160208a01614685565b96506149bf60408a01614685565b955060608901359450608089013593506149dc8a60a08b01614955565b92506149eb8a60e08b0161496c565b91506149fb8a6101608b01614955565b90509295985092959890939650565b6001600160a01b038116811461222057600080fd5b600080600080600080600080888a036101c0811215614a3d57600080fd5b8935614a4881614a0a565b985060208a0135614a5881614a0a565b975060408a0135614a6881614a0a565b965060608a0135614a7881614a0a565b955060e0607f1982011215614a8c57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614ab657600080fd5b614ac28c838d016147d0565b93506101a08b0135915080821115614ad957600080fd5b50614ae68b828c016147d0565b9150509295985092959890939650565b600060208284031215614b0857600080fd5b813561465a81614a0a565b60008060008060008060008060006101c08a8c031215614b3257600080fd5b614b3b8a614685565b9850614b4960208b01614685565b9750614b5760408b01614685565b9650614b6560608b01614685565b955060808a0135945060a08a01359350614b828b60c08c01614955565b9250614b928b6101008c0161496c565b9150614ba28b6101808c01614955565b90509295985092959850929598565b600060208284031215614bc357600080fd5b5035919050565b801515811461222057600080fd5b600060208284031215614bea57600080fd5b813561465a81614bca565b600060208284031215614c0757600080fd5b81356001600160401b03811115614c1d57600080fd5b61446e848285016147d0565b60006020808385031215614c3c57600080fd5b82356001600160401b0380821115614c5357600080fd5b818501915085601f830112614c6757600080fd5b8135614c7561488b826147ad565b81815260059190911b83018401908481019088831115614c9457600080fd5b8585015b8381101561494857803585811115614cb05760008081fd5b86016060818c03601f1901811315614cc85760008081fd5b614cd061475b565b8983013588811115614ce25760008081fd5b614cf08e8c838701016147d0565b8252506040808401358b830152614d08838501614685565b9082015285525050918601918601614c98565b60008060408385031215614d2e57600080fd5b82356001600160401b03811115614d4457600080fd5b614d50858286016147d0565b95602094909401359450505050565b600181811c90821680614d7357607f821691505b602082108103614d9357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a204f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614e1457614e14614ddc565b01949350505050565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b03808316818103614eb757614eb7614ddc565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b600060208284031215614ef657600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6001600160601b0319166068820152607c0190565b600060018201614f4e57614f4e614ddc565b5060010190565b60006001600160401b0383811690831681811015614f7557614f75614ddc565b039392505050565b600082821015614f8f57614f8f614ddc565b500390565b6000816000190483118215151615614fae57614fae614ddc565b500290565b601f8211156143cf57600081815260208120601f850160051c81016020861015614fda5750805b601f850160051c820191505b81811015613ad857828155600101614fe6565b81516001600160401b038111156150125761501261471d565b615026816150208454614d5f565b84614fb3565b602080601f83116001811461505b57600084156150435750858301515b600019600386901b1c1916600185901b178555613ad8565b600085815260208120601f198616915b8281101561508a5788860151825594840194600190910190840161506b565b50858210156150a85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b6000826150dd576150dd6150b8565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a204f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b6000821982111561515e5761515e614ddc565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a204f6e6c7920747275737465642061676772656761746f7200000000606082015260800190565b8381526001600160a01b03831660208201526060604082018190526000906152479083018461461b565b95945050505050565b60006001600160401b038084168061526a5761526a6150b8565b92169190910492915050565b600082516152888184602087016145ef565b9190910192915050565b6000826152a1576152a16150b8565b500690565b61012081016040808784376000838201818152879190815b60028110156152de578484833790840182815292840192906001016152be565b5050828760c0870137610100850181815286935091505b60018110156153145782518252602092830192909101906001016152f5565b50505095945050505050565b60006020828403121561533257600080fd5b815161465a81614bca565b600181815b8085111561537857816000190482111561535e5761535e614ddc565b8085161561536b57918102915b93841c9390800290615342565b509250929050565b60008261538f57506001614966565b8161539c57506000614966565b81600181146153b257600281146153bc576153d8565b6001915050614966565b60ff8411156153cd576153cd614ddc565b50506001821b614966565b5060208310610133831016604e8410600b84101617156153fb575081810a614966565b615405838361533d565b806000190482111561541957615419614ddc565b029392505050565b600061465a838361538056fe506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e637953506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20696e506f6c79676f6e5a6b45564d3a3a5f70726f766544697374696e637450656e64506f6c79676f6e5a6b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a2046a26469706673582212208688772921966f41c65c26d2f18e6be61e5d1612ef2f8c43963f7a6022026d4d64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061032f5760003560e01c80638da5cb5b116101b4578063cfa8ed47116100fa578063e7a7ed021161009d578063e7a7ed021461080e578063e8bf92ed14610828578063eaeb077b1461083b578063edc411211461084e578063f14916d614610861578063f2fde38b14610874578063f851a44014610887578063f8b823e41461089a57600080fd5b8063cfa8ed471461077c578063d02103ca14610796578063d8d1091b146107a9578063d8f54db0146107bc578063d939b315146107d0578063dbc16976146107ea578063e11f3f18146107f2578063e217cfd61461080557600080fd5b8063ab9fc5ef11610162578063ab9fc5ef14610688578063adc879e914610692578063afd23cbe146106ac578063b4d63f58146106d4578063b6b0b09714610734578063c0ed84e01461074e578063c89e42df14610756578063cf1363061461076957600080fd5b80638da5cb5b1461062157806399f5634e146106325780639c9f3dfe1461063a5780639eb831b91461064d5780639f0d039d14610655578063a3c573eb1461065d578063aa58bad61461067057600080fd5b80634a910e6a11610279578063715018a611610227578063715018a61461053b5780637215541a1461054357806375c508b3146105565780637fcb365314610569578063837a47381461057c578063841b24d7146105ea5780638b48931e146106045780638c4a0af71461060e57600080fd5b80634a910e6a146104a75780635392c5e0146104ba578063542028d5146104da57806360943d6a146104e25780636b8616ce146104f55780636ff512cc14610515578063704b6c021461052857600080fd5b8063383b3be8116102e1578063383b3be8146103fa578063394218e91461040d5780633c15826714610420578063423fa85614610433578063456052671461044d578063458c0477146104675780634834a3431461047a5780634a1a89a71461048d57600080fd5b8063107bf28c1461033457806315064c96146103525780631816b7e51461036f57806319d8ac6114610384578063220d7899146103af57806329878983146103c25780632d0889d3146103e2575b600080fd5b61033c6108a3565b6040516103499190614647565b60405180910390f35b60655461035f9060ff1681565b6040519015158152602001610349565b61038261037d366004614661565b610931565b005b606854610397906001600160401b031681565b6040516001600160401b039091168152602001610349565b61033c6103bd3660046146a1565b610a5b565b606a546103d5906001600160a01b031681565b60405161034991906146ee565b6103ec620493e081565b604051908152602001610349565b61035f610408366004614702565b610bfc565b61038261041b366004614702565b610c43565b61038261042e36600461483f565b610dff565b60685461039790600160401b90046001600160401b031681565b60685461039790600160801b90046001600160401b031681565b607254610397906001600160401b031681565b61038261048836600461497d565b6115c6565b60725461039790600160401b90046001600160401b031681565b6103826104b5366004614702565b61190f565b6103ec6104c8366004614702565b606d6020526000908152604090205481565b61033c611baa565b6103826104f0366004614a1f565b611bb7565b6103ec610503366004614702565b60666020526000908152604090205481565b610382610523366004614af6565b611f12565b610382610536366004614af6565b611f90565b610382612005565b610382610551366004614702565b612019565b610382610564366004614b13565b612223565b606954610397906001600160401b031681565b6105bf61058a366004614bb1565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610349565b60725461039790600160c01b90046001600160401b031681565b61039762093a8081565b61038261061c366004614bd8565b6122b2565b6033546001600160a01b03166103d5565b6103ec612329565b610382610648366004614702565b612411565b6103ec600c81565b6074546103ec565b6070546103d5906001600160a01b031681565b6065546103979061010090046001600160401b031681565b6103976206978081565b606c5461039790600160a81b90046001600160401b031681565b6065546106c190600160481b900461ffff1681565b60405161ffff9091168152602001610349565b61070f6106e2366004614702565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610349565b6065546103d590600160581b90046001600160a01b031681565b6103976125bf565b610382610764366004614bf5565b61260c565b610382610777366004614702565b612672565b6069546103d590600160401b90046001600160a01b031681565b606c546103d5906001600160a01b031681565b6103826107b7366004614c29565b6126f3565b606c5461035f90600160a01b900460ff1681565b60725461039790600160801b90046001600160401b031681565b610382612bb3565b610382610800366004614b13565b612c6f565b6103976103e881565b60685461039790600160c01b90046001600160401b031681565b606b546103d5906001600160a01b031681565b610382610849366004614d1b565b612db4565b61038261085c36600461497d565b6130dd565b61038261086f366004614af6565b6131fd565b610382610882366004614af6565b613272565b6073546103d5906001600160a01b031681565b6103ec60745481565b606f80546108b090614d5f565b80601f01602080910402602001604051908101604052809291908181526020018280546108dc90614d5f565b80156109295780601f106108fe57610100808354040283529160200191610929565b820191906000526020600020905b81548152906001019060200180831161090c57829003601f168201915b505050505081565b6073546001600160a01b031633146109645760405162461bcd60e51b815260040161095b90614d99565b60405180910390fd5b6103e88161ffff161015801561097f57506104008161ffff16105b610a045760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a40161095b565b6065805461ffff60481b1916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610a8d57508115155b610b01576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f74206578697374606482015260840161095b565b80610b76576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f74206578697374606482015260840161095b565b606c54604080516001600160601b03193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610c3292600160801b90920481169116614df2565b6001600160401b0316111592915050565b6073546001600160a01b03163314610c6d5760405162461bcd60e51b815260040161095b90614d99565b62093a806001600160401b0382161115610d065760405162461bcd60e51b815260206004820152604e60248201527f506f6c79676f6e5a6b45564d3a3a73657454727573746564416767726567617460448201527f6f7254696d656f75743a20457863656564206d61782068616c7420616767726560648201526d19d85d1a5bdb881d1a5b595bdd5d60921b608482015260a40161095b565b60655460ff16610da9576072546001600160401b03600160c01b909104811690821610610da95760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a204e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a40161095b565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610a50565b60655460ff1615610e225760405162461bcd60e51b815260040161095b90614e1d565b606954600160401b90046001600160a01b03163314610ea95760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a204f6e6c7920747275737465642073657175656e636572000000000000606482015260840161095b565b805180610f1e5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e63652031206261746368000000606482015260840161095b565b6103e88110610f97576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e792062617463686573606482015260840161095b565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b858110156113fc576000878281518110610fea57610fea614e85565b60200260200101519050600081606001516001600160401b0316111561117a578361101481614e9b565b94505060008160000151805190602001208260200151836060015160405160200161104193929190614ec1565b60408051601f1981840301815291815281516020928301206001600160401b0388166000908152606690935291205490915081146110d55760405162461bcd60e51b815260206004820152603d60248201526000805160206154ae83398151915260448201527f6f7263656420626174636865732064617461206d757374206d61746368000000606482015260840161095b565b81606001516001600160401b031682604001516001600160401b031610156111745760405162461bcd60e51b815260206004820152605860248201526000805160206154ae83398151915260448201527f6f7263656420626174636865732074696d657374616d70206d757374206265206064820152773134b3b3b2b91037b91032b8bab0b6103a3430b71036b4b760411b608482015260a40161095b565b506112ef565b602081015115806112035750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916111bd9160040190815260200190565b6020604051808303816000875af11580156111dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112009190614ee4565b15155b6112755760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d757374206578697374000000000000606482015260840161095b565b805151620493e0116112ef5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f77000000000000606482015260840161095b565b856001600160401b031681604001516001600160401b03161015801561132257504281604001516001600160401b031611155b6113945760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e6765000000606482015260840161095b565b805180516020918201208183015160408085015190516113bb948894939291339101614efd565b60405160208183030381529060405280519060200120925084806113de90614e9b565b955050806040015195505080806113f490614f3c565b915050610fce565b506068546001600160401b03600160c01b9091048116908316111561146f5760405162461bcd60e51b815260206004820152603560248201526000805160206154ae8339815191526044820152746f7263652062617463686573206f766572666c6f7760581b606482015260840161095b565b60685460009061148f90600160801b90046001600160401b031684614f55565b6114a2906001600160401b031687614f7d565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115779033903090849061155c9190614f94565b606554600160581b90046001600160a01b03169291906132e8565b61157f613353565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff16156115e95760405162461bcd60e51b815260040161095b90614e1d565b6072546001600160401b03878116600090815260676020526040902060010154429261162092600160c01b90910481169116614df2565b6001600160401b031611156116a95760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2054727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a40161095b565b6103e86116b68888614f55565b6001600160401b0316106117325760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2043616e60448201527f6e6f74207665726966792074686174206d616e79206261746368657300000000606482015260840161095b565b61174288888888888888886133f7565b61174b866138fa565b607254600160801b90046001600160401b0316600003611813576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d6020526040902085905560725416156117b057607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156117f657600080fd5b505af115801561180a573d6000803e3d6000fd5b505050506118c4565b61181b613353565b607280546001600160401b031690600061183483614e9b565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b0381161580159061193c57506072546001600160401b03600160401b9091048116908216115b801561195757506072546001600160401b0390811690821611155b6119d55760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a40161095b565b606a546001600160a01b03163314611a7f576119f081610bfc565b611a7f5760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2050656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a40161095b565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015611b3c57600080fd5b505af1158015611b50573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051611b9d91815260200190565b60405180910390a3505050565b606e80546108b090614d5f565b600054610100900460ff1615808015611bd75750600054600160ff909116105b80611bf15750303b158015611bf1575060005460ff166001145b611c545760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161095b565b6000805460ff191660011790558015611c77576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c81169190911790925560658054600160581b600160f81b031916600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611cdf6020860186614af6565b607380546001600160a01b0319166001600160a01b0392909216919091179055611d0f6060860160408701614af6565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611d4a60c0860160a08701614af6565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611da760e0860160c08701614702565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611dde6040860160208701614702565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611e1a6080860160608701614702565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611e5660a0860160808701614bd8565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611e7e8482614ff9565b50606f611e8b8382614ff9565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611ec1613ae0565b8015611f07576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611f3c5760405162461bcd60e51b815260040161095b90614d99565b60698054600160401b600160e01b031916600160401b6001600160a01b038416021790556040517ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090610a509083906146ee565b6073546001600160a01b03163314611fba5760405162461bcd60e51b815260040161095b90614d99565b607380546001600160a01b0319166001600160a01b0383161790556040517f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190610a509083906146ee565b61200d613b54565b6120176000613bae565b565b6033546001600160a01b031633146122185760006120356125bf565b9050806001600160401b0316826001600160401b0316116120ac5760405162461bcd60e51b815260206004820152603c602482015260008051602061542e83398151915260448201527f746174653a20426174636820616c726561647920766572696669656400000000606482015260840161095b565b6068546001600160401b03600160401b9091048116908316118015906120ee57506001600160401b038083166000908152606760205260409020600101541615155b6121675760405162461bcd60e51b8152602060048201526050602482015260008051602061542e83398151915260448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a40161095b565b6001600160401b0380831660009081526067602052604090206001015442916121959162093a809116614df2565b6001600160401b031611156122165760405162461bcd60e51b815260206004820152604d602482015260008051602061542e83398151915260448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a40161095b565b505b612220613c00565b50565b60655460ff16156122465760405162461bcd60e51b815260040161095b90614e1d565b612257898989898989898989613c70565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611f07613c00565b6073546001600160a01b031633146122dc5760405162461bcd60e51b815260040161095b90614d99565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a5090831515815260200190565b6065546040516370a0823160e01b81526000918291600160581b9091046001600160a01b0316906370a08231906123649030906004016146ee565b602060405180830381865afa158015612381573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a59190614ee4565b905060006123b16125bf565b6068546001600160401b03600160401b82048116916123e191600160801b8204811691600160c01b900416614f55565b6123eb9190614df2565b6123f59190614f55565b6001600160401b0316905061240a81836150ce565b9250505090565b6073546001600160a01b0316331461243b5760405162461bcd60e51b815260040161095b90614d99565b62093a806001600160401b03821611156124cf5760405162461bcd60e51b815260206004820152604960248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a20457863656564206d61782068616c74206167677265676174696f6064820152681b881d1a5b595bdd5d60ba1b608482015260a40161095b565b60655460ff16612564576072546001600160401b03600160801b9091048116908216106125645760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a204e65772074696d656f7574206d757374206265206c6f77657200606482015260840161095b565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610a50565b6072546000906001600160401b0316156125fc57506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b031633146126365760405162461bcd60e51b815260040161095b90614d99565b606e6126428282614ff9565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a509190614647565b6073546001600160a01b0316331461269c5760405162461bcd60e51b815260040161095b90614d99565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610a50565b60655460ff16156127165760405162461bcd60e51b815260040161095b90614e1d565b606c54600160a01b900460ff1615156001146127445760405162461bcd60e51b815260040161095b906150e2565b8051806127a75760405162461bcd60e51b815260206004820152603f602482015260008051602061548e83398151915260448201527f65733a204d75737420666f726365206174206c65617374203120626174636800606482015260840161095b565b6103e881106128185760405162461bcd60e51b8152602060048201526043602482015260008051602061548e83398151915260448201527f65733a2043616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a40161095b565b6068546001600160401b03600160c01b8204811691612840918491600160801b90041661514b565b111561289c5760405162461bcd60e51b8152602060048201526037602482015260008051602061548e833981519152604482015276195cce88119bdc98d94818985d18da081a5b9d985b1a59604a1b606482015260840161095b565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612aca5760008682815181106128e9576128e9614e85565b6020026020010151905083806128fe90614e9b565b94505060008160000151805190602001208260200151836040015160405160200161292b93929190614ec1565b60408051601f1981840301815291815281516020928301206001600160401b0388166000908152606690935291205490915081146129ca5760405162461bcd60e51b8152602060048201526042602482015260008051602061548e83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a40161095b565b6129d5600188614f7d565b8303612a6c57426206978083604001516129ef9190614df2565b6001600160401b03161115612a6c5760405162461bcd60e51b8152602060048201526049602482015260008051602061548e83398151915260448201527f65733a20466f72636564206261746368206973206e6f7420696e2074696d656f6064820152681d5d081c195c9a5bd960ba1b608482015260a40161095b565b8151805160209182012081840151604051612a8f93889392914291339101614efd565b6040516020818303038152906040528051906020012093508580612ab290614e9b565b96505050508080612ac290614f3c565b9150506128cd565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b0319909216919091179286168502929092179091558554600160401b600160c01b03191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612bd55760405162461bcd60e51b815260040161095b90615163565b6073546001600160a01b03163314612bff5760405162461bcd60e51b815260040161095b90614d99565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612c4f57600080fd5b505af1158015612c63573d6000803e3d6000fd5b505050506120176142a6565b606a546001600160a01b03163314612c995760405162461bcd60e51b815260040161095b906151c0565b612caa898989898989898989613c70565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612cf557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612d3b57600080fd5b505af1158015612d4f573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612dd75760405162461bcd60e51b815260040161095b90614e1d565b606c54600160a01b900460ff161515600114612e055760405162461bcd60e51b815260040161095b906150e2565b6000612e1060745490565b905081811115612e755760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a204e6f7420656e6044820152696f756768206d6174696360b01b606482015260840161095b565b620493e0835110612ee65760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b606482015260840161095b565b606554612f0590600160581b90046001600160a01b03163330846132e8565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015612f4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f739190614ee4565b60688054919250600160c01b9091046001600160401b0316906018612f9783614e9b565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505083805190602001208142604051602001612fd893929190614ec1565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361307c57606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a26130d7565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9318233876040516130ce9392919061521d565b60405180910390a25b50505050565b606a546001600160a01b031633146131075760405162461bcd60e51b815260040161095b906151c0565b61311788888888888888886133f7565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d60205260409020859055607254161561316257607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156131a857600080fd5b505af11580156131bc573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce7906020016118fd565b6073546001600160a01b031633146132275760405162461bcd60e51b815260040161095b90614d99565b606a80546001600160a01b0319166001600160a01b0383161790556040517f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90610a509083906146ee565b61327a613b54565b6001600160a01b0381166132df5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161095b565b61222081613bae565b6040516001600160a01b03808516602483015283166044820152606481018290526130d79085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526142fd565b6072546001600160401b03600160401b82048116911611156120175760725460009061339090600160401b90046001600160401b03166001614df2565b905061339b81610bfc565b15612220576072546000906002906133bd9084906001600160401b0316614f55565b6133c79190615250565b6133d19083614df2565b90506133dc81610bfc565b156133ee576133ea8161190f565b5050565b6133ea8261190f565b6000806134026125bf565b90506001600160401b038a1615613568576072546001600160401b03908116908b1611156134ba5760405162461bcd60e51b815260206004820152605960248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20706560448201527f6e64696e6753746174654e756d206d757374206265206c657373206f7220657160648201527875616c207468616e206c61737450656e64696e67537461746560381b608482015260a40161095b565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b90920416146135625760405162461bcd60e51b815260206004820152604d602482015260008051602061544e83398151915260448201527f69744e756d4261746368206d757374206d61746368207468652070656e64696e60648201526c0ce40e6e8c2e8ca40c4c2e8c6d609b1b608482015260a40161095b565b5061368e565b6001600160401b0389166000908152606d60205260409020549150816135f25760405162461bcd60e51b81526020600482015260446024820181905260008051602061544e833981519152908201527f69744e756d426174636820737461746520726f6f7420646f6573206e6f7420656064820152631e1a5cdd60e21b608482015260a40161095b565b806001600160401b0316896001600160401b0316111561368e5760405162461bcd60e51b815260206004820152605e602482015260008051602061544e83398151915260448201527f69744e756d4261746368206d757374206265206c657373206f7220657175616c60648201527f207468616e2063757272656e744c617374566572696669656442617463680000608482015260a40161095b565b806001600160401b0316886001600160401b0316116137365760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20666960448201527f6e616c4e65774261746368206d75737420626520626967676572207468616e206064820152770c6eae4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d60431b608482015260a40161095b565b60006137458a8a8a868b610a5b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160028360405161377a9190615276565b602060405180830381855afa158015613797573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906137ba9190614ee4565b6137c49190615292565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613808918b918b918b91906004016152a6565b602060405180830381865afa158015613825573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138499190615320565b6138a95760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20496e60448201526a3b30b634b210383937b7b360a91b606482015260840161095b565b6138ec336138b7858d614f55565b6001600160401b03166138c8612329565b6138d29190614f94565b606554600160581b90046001600160a01b031691906143d4565b505050505050505050505050565b60006139046125bf565b9050816000806139148484614f55565b6001600160401b031690505b836001600160401b0316836001600160401b0316146139c6576001600160401b03808416600090815260676020526040902060655460018201549192610100909104811691613970911642614f7d565b11156139ab57600181015461399590600160401b90046001600160401b031685614f55565b6139a8906001600160401b03168461514b565b92505b60010154600160401b90046001600160401b03169250613920565b60006139d28383614f7d565b905082811015613a4c5760006139e88285614f7d565b9050600c81116139f857806139fb565b600c5b9050613a08816003614f94565b613a1390600a615421565b606554613a2c908390600160481b900461ffff16615421565b607454613a399190614f94565b613a4391906150ce565b60745550613ad8565b6000613a588483614f7d565b9050600c8111613a685780613a6b565b600c5b90506000613a7a826003614f94565b613a8590600a615421565b606554613a9e908490600160481b900461ffff16615421565b607454613aab9190614f94565b613ab591906150ce565b905080607454607454613ac89190614f94565b613ad291906150ce565b60745550505b505050505050565b600054610100900460ff16613b4b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161095b565b61201733613bae565b6033546001600160a01b031633146120175760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095b565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613c5057600080fd5b505af1158015613c64573d6000803e3d6000fd5b50505050612017614404565b60006001600160401b038a1615613de0576072546001600160401b03908116908b161115613d285760405162461bcd60e51b8152602060048201526065602482015260008051602061546e83398151915260448201527f696e6753746174653a2070656e64696e6753746174654e756d206d757374206260648201527f65206c657373206f7220657175616c207468616e206c61737450656e64696e67608482015264537461746560d81b60a482015260c40161095b565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613dda5760405162461bcd60e51b8152602060048201526059602482015260008051602061546e83398151915260448201527f696e6753746174653a20696e69744e756d4261746368206d757374206d6174636064820152780d040e8d0ca40e0cadcc8d2dcce40e6e8c2e8ca40c4c2e8c6d603b1b608482015260a40161095b565b50613f19565b506001600160401b0387166000908152606d602052604090205480613e745760405162461bcd60e51b8152602060048201526050602482015260008051602061546e83398151915260448201527f696e6753746174653a20696e69744e756d426174636820737461746520726f6f60648201526f1d08191bd95cc81b9bdd08195e1a5cdd60821b608482015260a40161095b565b6069546001600160401b039081169089161115613f195760405162461bcd60e51b8152602060048201526063602482015260008051602061546e83398151915260448201527f696e6753746174653a20696e69744e756d4261746368206d757374206265206c60648201527f657373206f7220657175616c207468616e206c617374566572696669656442616084820152620e8c6d60eb1b60a482015260c40161095b565b6072546001600160401b03908116908a1611801590613f495750896001600160401b0316896001600160401b0316115b8015613f6a57506072546001600160401b03600160401b9091048116908a16115b613fdb5760405162461bcd60e51b8152602060048201526048602482015260008051602061546e83398151915260448201527f696e6753746174653a2066696e616c50656e64696e6753746174654e756d20696064820152671b98dbdc9c9958dd60c21b608482015260a40161095b565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146140945760405162461bcd60e51b8152602060048201526063602482015260008051602061546e83398151915260448201527f696e6753746174653a2066696e616c4e65774261746368206d7573742062652060648201527f657175616c207468616e2063757272656e744c617374566572696669656442616084820152620e8c6d60eb1b60a482015260c40161095b565b60006140a3898989858a610a5b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516140d89190615276565b602060405180830381855afa1580156140f5573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906141189190614ee4565b6141229190615292565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614166918a918a918a91906004016152a6565b602060405180830381865afa158015614183573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141a79190615320565b6142015760405162461bcd60e51b8152602060048201526037602482015260008051602061546e83398151915260448201527634b733a9ba30ba329d1024b73b30b634b210383937b7b360491b606482015260840161095b565b6001600160401b038b166000908152607160205260409020600201548790036138ec5760405162461bcd60e51b815260206004820152605b602482015260008051602061546e83398151915260448201527f696e6753746174653a2053746f72656420726f6f74206d75737420626520646960648201527f66666572656e74207468616e206e657720737461746520726f6f740000000000608482015260a40161095b565b60655460ff166142c85760405162461bcd60e51b815260040161095b90615163565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000614352826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661445f9092919063ffffffff16565b8051909150156143cf57808060200190518101906143709190615320565b6143cf5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161095b565b505050565b6040516001600160a01b0383166024820152604481018290526143cf90849063a9059cbb60e01b9060640161331c565b60655460ff16156144275760405162461bcd60e51b815260040161095b90614e1d565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b606061446e8484600085614476565b949350505050565b6060824710156144d75760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161095b565b600080866001600160a01b031685876040516144f39190615276565b60006040518083038185875af1925050503d8060008114614530576040519150601f19603f3d011682016040523d82523d6000602084013e614535565b606091505b509150915061454687838387614551565b979650505050505050565b606083156145c05782516000036145b9576001600160a01b0385163b6145b95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161095b565b508161446e565b61446e83838151156145d55781518083602001fd5b8060405162461bcd60e51b815260040161095b9190614647565b60005b8381101561460a5781810151838201526020016145f2565b838111156130d75750506000910152565b600081518084526146338160208601602086016145ef565b601f01601f19169290920160200192915050565b60208152600061465a602083018461461b565b9392505050565b60006020828403121561467357600080fd5b813561ffff8116811461465a57600080fd5b80356001600160401b038116811461469c57600080fd5b919050565b600080600080600060a086880312156146b957600080fd5b6146c286614685565b94506146d060208701614685565b94979496505050506040830135926060810135926080909101359150565b6001600160a01b0391909116815260200190565b60006020828403121561471457600080fd5b61465a82614685565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156147555761475561471d565b60405290565b604051606081016001600160401b03811182821017156147555761475561471d565b604051601f8201601f191681016001600160401b03811182821017156147a5576147a561471d565b604052919050565b60006001600160401b038211156147c6576147c661471d565b5060051b60200190565b600082601f8301126147e157600080fd5b81356001600160401b038111156147fa576147fa61471d565b61480d601f8201601f191660200161477d565b81815284602083860101111561482257600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561485257600080fd5b82356001600160401b038082111561486957600080fd5b818501915085601f83011261487d57600080fd5b813561489061488b826147ad565b61477d565b81815260059190911b830184019084810190888311156148af57600080fd5b8585015b83811015614948578035858111156148cb5760008081fd5b86016080818c03601f19018113156148e35760008081fd5b6148eb614733565b89830135888111156148fd5760008081fd5b61490b8e8c838701016147d0565b8252506040808401358b8301526060614925818601614685565b82840152614934848601614685565b9083015250855250509186019186016148b3565b5098975050505050505050565b806040810183101561496657600080fd5b92915050565b806080810183101561496657600080fd5b6000806000806000806000806101a0898b03121561499a57600080fd5b6149a389614685565b97506149b160208a01614685565b96506149bf60408a01614685565b955060608901359450608089013593506149dc8a60a08b01614955565b92506149eb8a60e08b0161496c565b91506149fb8a6101608b01614955565b90509295985092959890939650565b6001600160a01b038116811461222057600080fd5b600080600080600080600080888a036101c0811215614a3d57600080fd5b8935614a4881614a0a565b985060208a0135614a5881614a0a565b975060408a0135614a6881614a0a565b965060608a0135614a7881614a0a565b955060e0607f1982011215614a8c57600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614ab657600080fd5b614ac28c838d016147d0565b93506101a08b0135915080821115614ad957600080fd5b50614ae68b828c016147d0565b9150509295985092959890939650565b600060208284031215614b0857600080fd5b813561465a81614a0a565b60008060008060008060008060006101c08a8c031215614b3257600080fd5b614b3b8a614685565b9850614b4960208b01614685565b9750614b5760408b01614685565b9650614b6560608b01614685565b955060808a0135945060a08a01359350614b828b60c08c01614955565b9250614b928b6101008c0161496c565b9150614ba28b6101808c01614955565b90509295985092959850929598565b600060208284031215614bc357600080fd5b5035919050565b801515811461222057600080fd5b600060208284031215614bea57600080fd5b813561465a81614bca565b600060208284031215614c0757600080fd5b81356001600160401b03811115614c1d57600080fd5b61446e848285016147d0565b60006020808385031215614c3c57600080fd5b82356001600160401b0380821115614c5357600080fd5b818501915085601f830112614c6757600080fd5b8135614c7561488b826147ad565b81815260059190911b83018401908481019088831115614c9457600080fd5b8585015b8381101561494857803585811115614cb05760008081fd5b86016060818c03601f1901811315614cc85760008081fd5b614cd061475b565b8983013588811115614ce25760008081fd5b614cf08e8c838701016147d0565b8252506040808401358b830152614d08838501614685565b9082015285525050918601918601614c98565b60008060408385031215614d2e57600080fd5b82356001600160401b03811115614d4457600080fd5b614d50858286016147d0565b95602094909401359450505050565b600181811c90821680614d7357607f821691505b602082108103614d9357634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a204f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614e1457614e14614ddc565b01949350505050565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b03808316818103614eb757614eb7614ddc565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b600060208284031215614ef657600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6001600160601b0319166068820152607c0190565b600060018201614f4e57614f4e614ddc565b5060010190565b60006001600160401b0383811690831681811015614f7557614f75614ddc565b039392505050565b600082821015614f8f57614f8f614ddc565b500390565b6000816000190483118215151615614fae57614fae614ddc565b500290565b601f8211156143cf57600081815260208120601f850160051c81016020861015614fda5750805b601f850160051c820191505b81811015613ad857828155600101614fe6565b81516001600160401b038111156150125761501261471d565b615026816150208454614d5f565b84614fb3565b602080601f83116001811461505b57600084156150435750858301515b600019600386901b1c1916600185901b178555613ad8565b600085815260208120601f198616915b8281101561508a5788860151825594840194600190910190840161506b565b50858210156150a85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b6000826150dd576150dd6150b8565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a204f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b6000821982111561515e5761515e614ddc565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a204f6e6c7920747275737465642061676772656761746f7200000000606082015260800190565b8381526001600160a01b03831660208201526060604082018190526000906152479083018461461b565b95945050505050565b60006001600160401b038084168061526a5761526a6150b8565b92169190910492915050565b600082516152888184602087016145ef565b9190910192915050565b6000826152a1576152a16150b8565b500690565b61012081016040808784376000838201818152879190815b60028110156152de578484833790840182815292840192906001016152be565b5050828760c0870137610100850181815286935091505b60018110156153145782518252602092830192909101906001016152f5565b50505095945050505050565b60006020828403121561533257600080fd5b815161465a81614bca565b600181815b8085111561537857816000190482111561535e5761535e614ddc565b8085161561536b57918102915b93841c9390800290615342565b509250929050565b60008261538f57506001614966565b8161539c57506000614966565b81600181146153b257600281146153bc576153d8565b6001915050614966565b60ff8411156153cd576153cd614ddc565b50506001821b614966565b5060208310610133831016604e8410600b84101617156153fb575081810a614966565b615405838361533d565b806000190482111561541957615419614ddc565b029392505050565b600061465a838361538056fe506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e637953506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20696e506f6c79676f6e5a6b45564d3a3a5f70726f766544697374696e637450656e64506f6c79676f6e5a6b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a2046a26469706673582212208688772921966f41c65c26d2f18e6be61e5d1612ef2f8c43963f7a6022026d4d64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50615500806100206000396000f3fe608060405234801561001057600080fd5b506004361061032f5760003560e01c80638da5cb5b116101b4578063cfa8ed47116100fa578063e7a7ed021161009d578063e7a7ed021461080e578063e8bf92ed14610828578063eaeb077b1461083b578063edc411211461084e578063f14916d614610861578063f2fde38b14610874578063f851a44014610887578063f8b823e41461089a57600080fd5b8063cfa8ed471461077c578063d02103ca14610796578063d8d1091b146107a9578063d8f54db0146107bc578063d939b315146107d0578063dbc16976146107ea578063e11f3f18146107f2578063e217cfd61461080557600080fd5b8063ab9fc5ef11610162578063ab9fc5ef14610688578063adc879e914610692578063afd23cbe146106ac578063b4d63f58146106d4578063b6b0b09714610734578063c0ed84e01461074e578063c89e42df14610756578063cf1363061461076957600080fd5b80638da5cb5b1461062157806399f5634e146106325780639c9f3dfe1461063a5780639eb831b91461064d5780639f0d039d14610655578063a3c573eb1461065d578063aa58bad61461067057600080fd5b80634a910e6a11610279578063715018a611610227578063715018a61461053b5780637215541a1461054357806375c508b3146105565780637fcb365314610569578063837a47381461057c578063841b24d7146105ea5780638b48931e146106045780638c4a0af71461060e57600080fd5b80634a910e6a146104a75780635392c5e0146104ba578063542028d5146104da57806360943d6a146104e25780636b8616ce146104f55780636ff512cc14610515578063704b6c021461052857600080fd5b8063383b3be8116102e1578063383b3be8146103fa578063394218e91461040d5780633c15826714610420578063423fa85614610433578063456052671461044d578063458c0477146104675780634834a3431461047a5780634a1a89a71461048d57600080fd5b8063107bf28c1461033457806315064c96146103525780631816b7e51461036f57806319d8ac6114610384578063220d7899146103af57806329878983146103c25780632d0889d3146103e2575b600080fd5b61033c6108a3565b6040516103499190614644565b60405180910390f35b60655461035f9060ff1681565b6040519015158152602001610349565b61038261037d36600461465e565b610931565b005b606854610397906001600160401b031681565b6040516001600160401b039091168152602001610349565b61033c6103bd36600461469e565b610a5b565b606a546103d5906001600160a01b031681565b60405161034991906146eb565b6103ec620493e081565b604051908152602001610349565b61035f6104083660046146ff565b610bfc565b61038261041b3660046146ff565b610c43565b61038261042e36600461483c565b610dff565b60685461039790600160401b90046001600160401b031681565b60685461039790600160801b90046001600160401b031681565b607254610397906001600160401b031681565b61038261048836600461497a565b6115c6565b60725461039790600160401b90046001600160401b031681565b6103826104b53660046146ff565b61190f565b6103ec6104c83660046146ff565b606d6020526000908152604090205481565b61033c6119c5565b6103826104f0366004614a1c565b6119d2565b6103ec6105033660046146ff565b60666020526000908152604090205481565b610382610523366004614af3565b611d2d565b610382610536366004614af3565b611dab565b610382611e20565b6103826105513660046146ff565b611e34565b610382610564366004614b10565b61203b565b606954610397906001600160401b031681565b6105bf61058a366004614bae565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610349565b60725461039790600160c01b90046001600160401b031681565b61039762093a8081565b61038261061c366004614bd5565b6120ca565b6033546001600160a01b03166103d5565b6103ec612141565b6103826106483660046146ff565b612229565b6103ec600c81565b6074546103ec565b6070546103d5906001600160a01b031681565b6065546103979061010090046001600160401b031681565b6103976206978081565b606c5461039790600160a81b90046001600160401b031681565b6065546106c190600160481b900461ffff1681565b60405161ffff9091168152602001610349565b61070f6106e23660046146ff565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610349565b6065546103d590600160581b90046001600160a01b031681565b6103976123d7565b610382610764366004614bf2565b612424565b6103826107773660046146ff565b61248a565b6069546103d590600160401b90046001600160a01b031681565b606c546103d5906001600160a01b031681565b6103826107b7366004614c26565b61250b565b606c5461035f90600160a01b900460ff1681565b60725461039790600160801b90046001600160401b031681565b6103826129cb565b610382610800366004614b10565b612a87565b6103976103e881565b60685461039790600160c01b90046001600160401b031681565b606b546103d5906001600160a01b031681565b610382610849366004614d18565b612bcc565b61038261085c36600461497a565b612ef5565b61038261086f366004614af3565b613015565b610382610882366004614af3565b61308a565b6073546103d5906001600160a01b031681565b6103ec60745481565b606f80546108b090614d5c565b80601f01602080910402602001604051908101604052809291908181526020018280546108dc90614d5c565b80156109295780601f106108fe57610100808354040283529160200191610929565b820191906000526020600020905b81548152906001019060200180831161090c57829003601f168201915b505050505081565b6073546001600160a01b031633146109645760405162461bcd60e51b815260040161095b90614d96565b60405180910390fd5b6103e88161ffff161015801561097f57506104008161ffff16105b610a045760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a40161095b565b6065805461ffff60481b1916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610a8d57508115155b610b01576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f74206578697374606482015260840161095b565b80610b76576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f74206578697374606482015260840161095b565b606c54604080516001600160601b03193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610c3292600160801b90920481169116614def565b6001600160401b0316111592915050565b6073546001600160a01b03163314610c6d5760405162461bcd60e51b815260040161095b90614d96565b62093a806001600160401b0382161115610d065760405162461bcd60e51b815260206004820152604e60248201527f506f6c79676f6e5a6b45564d3a3a73657454727573746564416767726567617460448201527f6f7254696d656f75743a20457863656564206d61782068616c7420616767726560648201526d19d85d1a5bdb881d1a5b595bdd5d60921b608482015260a40161095b565b60655460ff16610da9576072546001600160401b03600160c01b909104811690821610610da95760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a204e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a40161095b565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610a50565b60655460ff1615610e225760405162461bcd60e51b815260040161095b90614e1a565b606954600160401b90046001600160a01b03163314610ea95760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a204f6e6c7920747275737465642073657175656e636572000000000000606482015260840161095b565b805180610f1e5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e63652031206261746368000000606482015260840161095b565b6103e88110610f97576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e792062617463686573606482015260840161095b565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b858110156113fc576000878281518110610fea57610fea614e82565b60200260200101519050600081606001516001600160401b0316111561117a578361101481614e98565b94505060008160000151805190602001208260200151836060015160405160200161104193929190614ebe565b60408051601f1981840301815291815281516020928301206001600160401b0388166000908152606690935291205490915081146110d55760405162461bcd60e51b815260206004820152603d60248201526000805160206154ab83398151915260448201527f6f7263656420626174636865732064617461206d757374206d61746368000000606482015260840161095b565b81606001516001600160401b031682604001516001600160401b031610156111745760405162461bcd60e51b815260206004820152605860248201526000805160206154ab83398151915260448201527f6f7263656420626174636865732074696d657374616d70206d757374206265206064820152773134b3b3b2b91037b91032b8bab0b6103a3430b71036b4b760411b608482015260a40161095b565b506112ef565b602081015115806112035750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916111bd9160040190815260200190565b6020604051808303816000875af11580156111dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112009190614ee1565b15155b6112755760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d757374206578697374000000000000606482015260840161095b565b805151620493e0116112ef5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f77000000000000606482015260840161095b565b856001600160401b031681604001516001600160401b03161015801561132257504281604001516001600160401b031611155b6113945760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e6765000000606482015260840161095b565b805180516020918201208183015160408085015190516113bb948894939291339101614efa565b60405160208183030381529060405280519060200120925084806113de90614e98565b955050806040015195505080806113f490614f39565b915050610fce565b506068546001600160401b03600160c01b9091048116908316111561146f5760405162461bcd60e51b815260206004820152603560248201526000805160206154ab8339815191526044820152746f7263652062617463686573206f766572666c6f7760581b606482015260840161095b565b60685460009061148f90600160801b90046001600160401b031684614f52565b6114a2906001600160401b031687614f7a565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115779033903090849061155c9190614f91565b606554600160581b90046001600160a01b0316929190613100565b61157f61316b565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff16156115e95760405162461bcd60e51b815260040161095b90614e1a565b6072546001600160401b03878116600090815260676020526040902060010154429261162092600160c01b90910481169116614def565b6001600160401b031611156116a95760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2054727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a40161095b565b6103e86116b68888614f52565b6001600160401b0316106117325760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2043616e60448201527f6e6f74207665726966792074686174206d616e79206261746368657300000000606482015260840161095b565b611742888888888888888861320f565b61174b86613712565b607254600160801b90046001600160401b0316600003611813576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d6020526040902085905560725416156117b057607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156117f657600080fd5b505af115801561180a573d6000803e3d6000fd5b505050506118c4565b61181b61316b565b607280546001600160401b031690600061183483614e98565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b606a546001600160a01b031633146119b95761192a81610bfc565b6119b95760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2050656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a40161095b565b6119c2816138f8565b50565b606e80546108b090614d5c565b600054610100900460ff16158080156119f25750600054600160ff909116105b80611a0c5750303b158015611a0c575060005460ff166001145b611a6f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161095b565b6000805460ff191660011790558015611a92576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c81169190911790925560658054600160581b600160f81b031916600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611afa6020860186614af3565b607380546001600160a01b0319166001600160a01b0392909216919091179055611b2a6060860160408701614af3565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611b6560c0860160a08701614af3565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611bc260e0860160c087016146ff565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611bf960408601602087016146ff565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611c3560808601606087016146ff565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611c7160a0860160808701614bd5565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611c998482614ff6565b50606f611ca68382614ff6565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611cdc613add565b8015611d22576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611d575760405162461bcd60e51b815260040161095b90614d96565b60698054600160401b600160e01b031916600160401b6001600160a01b038416021790556040517ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090610a509083906146eb565b6073546001600160a01b03163314611dd55760405162461bcd60e51b815260040161095b90614d96565b607380546001600160a01b0319166001600160a01b0383161790556040517f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190610a509083906146eb565b611e28613b51565b611e326000613bab565b565b6033546001600160a01b03163314612033576000611e506123d7565b9050806001600160401b0316826001600160401b031611611ec75760405162461bcd60e51b815260206004820152603c602482015260008051602061542b83398151915260448201527f746174653a20426174636820616c726561647920766572696669656400000000606482015260840161095b565b6068546001600160401b03600160401b909104811690831611801590611f0957506001600160401b038083166000908152606760205260409020600101541615155b611f825760405162461bcd60e51b8152602060048201526050602482015260008051602061542b83398151915260448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a40161095b565b6001600160401b038083166000908152606760205260409020600101544291611fb09162093a809116614def565b6001600160401b031611156120315760405162461bcd60e51b815260206004820152604d602482015260008051602061542b83398151915260448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a40161095b565b505b6119c2613bfd565b60655460ff161561205e5760405162461bcd60e51b815260040161095b90614e1a565b61206f898989898989898989613c6d565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611d22613bfd565b6073546001600160a01b031633146120f45760405162461bcd60e51b815260040161095b90614d96565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a5090831515815260200190565b6065546040516370a0823160e01b81526000918291600160581b9091046001600160a01b0316906370a082319061217c9030906004016146eb565b602060405180830381865afa158015612199573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bd9190614ee1565b905060006121c96123d7565b6068546001600160401b03600160401b82048116916121f991600160801b8204811691600160c01b900416614f52565b6122039190614def565b61220d9190614f52565b6001600160401b0316905061222281836150cb565b9250505090565b6073546001600160a01b031633146122535760405162461bcd60e51b815260040161095b90614d96565b62093a806001600160401b03821611156122e75760405162461bcd60e51b815260206004820152604960248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a20457863656564206d61782068616c74206167677265676174696f6064820152681b881d1a5b595bdd5d60ba1b608482015260a40161095b565b60655460ff1661237c576072546001600160401b03600160801b90910481169082161061237c5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a204e65772074696d656f7574206d757374206265206c6f77657200606482015260840161095b565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610a50565b6072546000906001600160401b03161561241457506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b0316331461244e5760405162461bcd60e51b815260040161095b90614d96565b606e61245a8282614ff6565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a509190614644565b6073546001600160a01b031633146124b45760405162461bcd60e51b815260040161095b90614d96565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610a50565b60655460ff161561252e5760405162461bcd60e51b815260040161095b90614e1a565b606c54600160a01b900460ff16151560011461255c5760405162461bcd60e51b815260040161095b906150df565b8051806125bf5760405162461bcd60e51b815260206004820152603f602482015260008051602061548b83398151915260448201527f65733a204d75737420666f726365206174206c65617374203120626174636800606482015260840161095b565b6103e881106126305760405162461bcd60e51b8152602060048201526043602482015260008051602061548b83398151915260448201527f65733a2043616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a40161095b565b6068546001600160401b03600160c01b8204811691612658918491600160801b900416615148565b11156126b45760405162461bcd60e51b8152602060048201526037602482015260008051602061548b833981519152604482015276195cce88119bdc98d94818985d18da081a5b9d985b1a59604a1b606482015260840161095b565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b848110156128e257600086828151811061270157612701614e82565b60200260200101519050838061271690614e98565b94505060008160000151805190602001208260200151836040015160405160200161274393929190614ebe565b60408051601f1981840301815291815281516020928301206001600160401b0388166000908152606690935291205490915081146127e25760405162461bcd60e51b8152602060048201526042602482015260008051602061548b83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a40161095b565b6127ed600188614f7a565b830361288457426206978083604001516128079190614def565b6001600160401b031611156128845760405162461bcd60e51b8152602060048201526049602482015260008051602061548b83398151915260448201527f65733a20466f72636564206261746368206973206e6f7420696e2074696d656f6064820152681d5d081c195c9a5bd960ba1b608482015260a40161095b565b81518051602091820120818401516040516128a793889392914291339101614efa565b60405160208183030381529060405280519060200120935085806128ca90614e98565b965050505080806128da90614f39565b9150506126e5565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b0319909216919091179286168502929092179091558554600160401b600160c01b03191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166129ed5760405162461bcd60e51b815260040161095b90615160565b6073546001600160a01b03163314612a175760405162461bcd60e51b815260040161095b90614d96565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612a6757600080fd5b505af1158015612a7b573d6000803e3d6000fd5b50505050611e326142a3565b606a546001600160a01b03163314612ab15760405162461bcd60e51b815260040161095b906151bd565b612ac2898989898989898989613c6d565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612b0d57607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612b5357600080fd5b505af1158015612b67573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612bef5760405162461bcd60e51b815260040161095b90614e1a565b606c54600160a01b900460ff161515600114612c1d5760405162461bcd60e51b815260040161095b906150df565b6000612c2860745490565b905081811115612c8d5760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a204e6f7420656e6044820152696f756768206d6174696360b01b606482015260840161095b565b620493e0835110612cfe5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b606482015260840161095b565b606554612d1d90600160581b90046001600160a01b0316333084613100565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015612d67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d8b9190614ee1565b60688054919250600160c01b9091046001600160401b0316906018612daf83614e98565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505083805190602001208142604051602001612df093929190614ebe565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b031660009081526066909352912055323303612e9457606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2612eef565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051612ee69392919061521a565b60405180910390a25b50505050565b606a546001600160a01b03163314612f1f5760405162461bcd60e51b815260040161095b906151bd565b612f2f888888888888888861320f565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612f7a57607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612fc057600080fd5b505af1158015612fd4573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce7906020016118fd565b6073546001600160a01b0316331461303f5760405162461bcd60e51b815260040161095b90614d96565b606a80546001600160a01b0319166001600160a01b0383161790556040517f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90610a509083906146eb565b613092613b51565b6001600160a01b0381166130f75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161095b565b6119c281613bab565b6040516001600160a01b0380851660248301528316604482015260648101829052612eef9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526142fa565b6072546001600160401b03600160401b8204811691161115611e32576072546000906131a890600160401b90046001600160401b03166001614def565b90506131b381610bfc565b156119c2576072546000906002906131d59084906001600160401b0316614f52565b6131df919061524d565b6131e99083614def565b90506131f481610bfc565b1561320657613202816138f8565b5050565b613202826138f8565b60008061321a6123d7565b90506001600160401b038a1615613380576072546001600160401b03908116908b1611156132d25760405162461bcd60e51b815260206004820152605960248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20706560448201527f6e64696e6753746174654e756d206d757374206265206c657373206f7220657160648201527875616c207468616e206c61737450656e64696e67537461746560381b608482015260a40161095b565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b909204161461337a5760405162461bcd60e51b815260206004820152604d602482015260008051602061544b83398151915260448201527f69744e756d4261746368206d757374206d61746368207468652070656e64696e60648201526c0ce40e6e8c2e8ca40c4c2e8c6d609b1b608482015260a40161095b565b506134a6565b6001600160401b0389166000908152606d602052604090205491508161340a5760405162461bcd60e51b81526020600482015260446024820181905260008051602061544b833981519152908201527f69744e756d426174636820737461746520726f6f7420646f6573206e6f7420656064820152631e1a5cdd60e21b608482015260a40161095b565b806001600160401b0316896001600160401b031611156134a65760405162461bcd60e51b815260206004820152605e602482015260008051602061544b83398151915260448201527f69744e756d4261746368206d757374206265206c657373206f7220657175616c60648201527f207468616e2063757272656e744c617374566572696669656442617463680000608482015260a40161095b565b806001600160401b0316886001600160401b03161161354e5760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20666960448201527f6e616c4e65774261746368206d75737420626520626967676572207468616e206064820152770c6eae4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d60431b608482015260a40161095b565b600061355d8a8a8a868b610a5b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516135929190615273565b602060405180830381855afa1580156135af573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906135d29190614ee1565b6135dc919061528f565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613620918b918b918b91906004016152a3565b602060405180830381865afa15801561363d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613661919061531d565b6136c15760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20496e60448201526a3b30b634b210383937b7b360a91b606482015260840161095b565b613704336136cf858d614f52565b6001600160401b03166136e0612141565b6136ea9190614f91565b606554600160581b90046001600160a01b031691906143d1565b505050505050505050505050565b600061371c6123d7565b90508160008061372c8484614f52565b6001600160401b031690505b836001600160401b0316836001600160401b0316146137de576001600160401b03808416600090815260676020526040902060655460018201549192610100909104811691613788911642614f7a565b11156137c35760018101546137ad90600160401b90046001600160401b031685614f52565b6137c0906001600160401b031684615148565b92505b60010154600160401b90046001600160401b03169250613738565b60006137ea8383614f7a565b9050828110156138645760006138008285614f7a565b9050600c81116138105780613813565b600c5b9050613820816003614f91565b61382b90600a61541e565b606554613844908390600160481b900461ffff1661541e565b6074546138519190614f91565b61385b91906150cb565b607455506138f0565b60006138708483614f7a565b9050600c81116138805780613883565b600c5b90506000613892826003614f91565b61389d90600a61541e565b6065546138b6908490600160481b900461ffff1661541e565b6074546138c39190614f91565b6138cd91906150cb565b9050806074546074546138e09190614f91565b6138ea91906150cb565b60745550505b505050505050565b6001600160401b0381161580159061392557506072546001600160401b03600160401b9091048116908216115b801561394057506072546001600160401b0390811690821611155b6139b25760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a5f636f6e736f6c696461746550656e64696e60448201527f6753746174653a2070656e64696e6753746174654e756d20696e76616c696400606482015260840161095b565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015613a6f57600080fd5b505af1158015613a83573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051613ad091815260200190565b60405180910390a3505050565b600054610100900460ff16613b485760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161095b565b611e3233613bab565b6033546001600160a01b03163314611e325760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095b565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613c4d57600080fd5b505af1158015613c61573d6000803e3d6000fd5b50505050611e32614401565b60006001600160401b038a1615613ddd576072546001600160401b03908116908b161115613d255760405162461bcd60e51b8152602060048201526065602482015260008051602061546b83398151915260448201527f696e6753746174653a2070656e64696e6753746174654e756d206d757374206260648201527f65206c657373206f7220657175616c207468616e206c61737450656e64696e67608482015264537461746560d81b60a482015260c40161095b565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613dd75760405162461bcd60e51b8152602060048201526059602482015260008051602061546b83398151915260448201527f696e6753746174653a20696e69744e756d4261746368206d757374206d6174636064820152780d040e8d0ca40e0cadcc8d2dcce40e6e8c2e8ca40c4c2e8c6d603b1b608482015260a40161095b565b50613f16565b506001600160401b0387166000908152606d602052604090205480613e715760405162461bcd60e51b8152602060048201526050602482015260008051602061546b83398151915260448201527f696e6753746174653a20696e69744e756d426174636820737461746520726f6f60648201526f1d08191bd95cc81b9bdd08195e1a5cdd60821b608482015260a40161095b565b6069546001600160401b039081169089161115613f165760405162461bcd60e51b8152602060048201526063602482015260008051602061546b83398151915260448201527f696e6753746174653a20696e69744e756d4261746368206d757374206265206c60648201527f657373206f7220657175616c207468616e206c617374566572696669656442616084820152620e8c6d60eb1b60a482015260c40161095b565b6072546001600160401b03908116908a1611801590613f465750896001600160401b0316896001600160401b0316115b8015613f6757506072546001600160401b03600160401b9091048116908a16115b613fd85760405162461bcd60e51b8152602060048201526048602482015260008051602061546b83398151915260448201527f696e6753746174653a2066696e616c50656e64696e6753746174654e756d20696064820152671b98dbdc9c9958dd60c21b608482015260a40161095b565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146140915760405162461bcd60e51b8152602060048201526063602482015260008051602061546b83398151915260448201527f696e6753746174653a2066696e616c4e65774261746368206d7573742062652060648201527f657175616c207468616e2063757272656e744c617374566572696669656442616084820152620e8c6d60eb1b60a482015260c40161095b565b60006140a0898989858a610a5b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516140d59190615273565b602060405180830381855afa1580156140f2573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906141159190614ee1565b61411f919061528f565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614163918a918a918a91906004016152a3565b602060405180830381865afa158015614180573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141a4919061531d565b6141fe5760405162461bcd60e51b8152602060048201526037602482015260008051602061546b83398151915260448201527634b733a9ba30ba329d1024b73b30b634b210383937b7b360491b606482015260840161095b565b6001600160401b038b166000908152607160205260409020600201548790036137045760405162461bcd60e51b815260206004820152605b602482015260008051602061546b83398151915260448201527f696e6753746174653a2053746f72656420726f6f74206d75737420626520646960648201527f66666572656e74207468616e206e657720737461746520726f6f740000000000608482015260a40161095b565b60655460ff166142c55760405162461bcd60e51b815260040161095b90615160565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b600061434f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661445c9092919063ffffffff16565b8051909150156143cc578080602001905181019061436d919061531d565b6143cc5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161095b565b505050565b6040516001600160a01b0383166024820152604481018290526143cc90849063a9059cbb60e01b90606401613134565b60655460ff16156144245760405162461bcd60e51b815260040161095b90614e1a565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b606061446b8484600085614473565b949350505050565b6060824710156144d45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161095b565b600080866001600160a01b031685876040516144f09190615273565b60006040518083038185875af1925050503d806000811461452d576040519150601f19603f3d011682016040523d82523d6000602084013e614532565b606091505b50915091506145438783838761454e565b979650505050505050565b606083156145bd5782516000036145b6576001600160a01b0385163b6145b65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161095b565b508161446b565b61446b83838151156145d25781518083602001fd5b8060405162461bcd60e51b815260040161095b9190614644565b60005b838110156146075781810151838201526020016145ef565b83811115612eef5750506000910152565b600081518084526146308160208601602086016145ec565b601f01601f19169290920160200192915050565b6020815260006146576020830184614618565b9392505050565b60006020828403121561467057600080fd5b813561ffff8116811461465757600080fd5b80356001600160401b038116811461469957600080fd5b919050565b600080600080600060a086880312156146b657600080fd5b6146bf86614682565b94506146cd60208701614682565b94979496505050506040830135926060810135926080909101359150565b6001600160a01b0391909116815260200190565b60006020828403121561471157600080fd5b61465782614682565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156147525761475261471a565b60405290565b604051606081016001600160401b03811182821017156147525761475261471a565b604051601f8201601f191681016001600160401b03811182821017156147a2576147a261471a565b604052919050565b60006001600160401b038211156147c3576147c361471a565b5060051b60200190565b600082601f8301126147de57600080fd5b81356001600160401b038111156147f7576147f761471a565b61480a601f8201601f191660200161477a565b81815284602083860101111561481f57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561484f57600080fd5b82356001600160401b038082111561486657600080fd5b818501915085601f83011261487a57600080fd5b813561488d614888826147aa565b61477a565b81815260059190911b830184019084810190888311156148ac57600080fd5b8585015b83811015614945578035858111156148c85760008081fd5b86016080818c03601f19018113156148e05760008081fd5b6148e8614730565b89830135888111156148fa5760008081fd5b6149088e8c838701016147cd565b8252506040808401358b8301526060614922818601614682565b82840152614931848601614682565b9083015250855250509186019186016148b0565b5098975050505050505050565b806040810183101561496357600080fd5b92915050565b806080810183101561496357600080fd5b6000806000806000806000806101a0898b03121561499757600080fd5b6149a089614682565b97506149ae60208a01614682565b96506149bc60408a01614682565b955060608901359450608089013593506149d98a60a08b01614952565b92506149e88a60e08b01614969565b91506149f88a6101608b01614952565b90509295985092959890939650565b6001600160a01b03811681146119c257600080fd5b600080600080600080600080888a036101c0811215614a3a57600080fd5b8935614a4581614a07565b985060208a0135614a5581614a07565b975060408a0135614a6581614a07565b965060608a0135614a7581614a07565b955060e0607f1982011215614a8957600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614ab357600080fd5b614abf8c838d016147cd565b93506101a08b0135915080821115614ad657600080fd5b50614ae38b828c016147cd565b9150509295985092959890939650565b600060208284031215614b0557600080fd5b813561465781614a07565b60008060008060008060008060006101c08a8c031215614b2f57600080fd5b614b388a614682565b9850614b4660208b01614682565b9750614b5460408b01614682565b9650614b6260608b01614682565b955060808a0135945060a08a01359350614b7f8b60c08c01614952565b9250614b8f8b6101008c01614969565b9150614b9f8b6101808c01614952565b90509295985092959850929598565b600060208284031215614bc057600080fd5b5035919050565b80151581146119c257600080fd5b600060208284031215614be757600080fd5b813561465781614bc7565b600060208284031215614c0457600080fd5b81356001600160401b03811115614c1a57600080fd5b61446b848285016147cd565b60006020808385031215614c3957600080fd5b82356001600160401b0380821115614c5057600080fd5b818501915085601f830112614c6457600080fd5b8135614c72614888826147aa565b81815260059190911b83018401908481019088831115614c9157600080fd5b8585015b8381101561494557803585811115614cad5760008081fd5b86016060818c03601f1901811315614cc55760008081fd5b614ccd614758565b8983013588811115614cdf5760008081fd5b614ced8e8c838701016147cd565b8252506040808401358b830152614d05838501614682565b9082015285525050918601918601614c95565b60008060408385031215614d2b57600080fd5b82356001600160401b03811115614d4157600080fd5b614d4d858286016147cd565b95602094909401359450505050565b600181811c90821680614d7057607f821691505b602082108103614d9057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a204f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614e1157614e11614dd9565b01949350505050565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b03808316818103614eb457614eb4614dd9565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b600060208284031215614ef357600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6001600160601b0319166068820152607c0190565b600060018201614f4b57614f4b614dd9565b5060010190565b60006001600160401b0383811690831681811015614f7257614f72614dd9565b039392505050565b600082821015614f8c57614f8c614dd9565b500390565b6000816000190483118215151615614fab57614fab614dd9565b500290565b601f8211156143cc57600081815260208120601f850160051c81016020861015614fd75750805b601f850160051c820191505b818110156138f057828155600101614fe3565b81516001600160401b0381111561500f5761500f61471a565b6150238161501d8454614d5c565b84614fb0565b602080601f83116001811461505857600084156150405750858301515b600019600386901b1c1916600185901b1785556138f0565b600085815260208120601f198616915b8281101561508757888601518255948401946001909101908401615068565b50858210156150a55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b6000826150da576150da6150b5565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a204f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b6000821982111561515b5761515b614dd9565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a204f6e6c7920747275737465642061676772656761746f7200000000606082015260800190565b8381526001600160a01b038316602082015260606040820181905260009061524490830184614618565b95945050505050565b60006001600160401b0380841680615267576152676150b5565b92169190910492915050565b600082516152858184602087016145ec565b9190910192915050565b60008261529e5761529e6150b5565b500690565b61012081016040808784376000838201818152879190815b60028110156152db578484833790840182815292840192906001016152bb565b5050828760c0870137610100850181815286935091505b60018110156153115782518252602092830192909101906001016152f2565b50505095945050505050565b60006020828403121561532f57600080fd5b815161465781614bc7565b600181815b8085111561537557816000190482111561535b5761535b614dd9565b8085161561536857918102915b93841c939080029061533f565b509250929050565b60008261538c57506001614963565b8161539957506000614963565b81600181146153af57600281146153b9576153d5565b6001915050614963565b60ff8411156153ca576153ca614dd9565b50506001821b614963565b5060208310610133831016604e8410600b84101617156153f8575081810a614963565b615402838361533a565b806000190482111561541657615416614dd9565b029392505050565b6000614657838361537d56fe506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e637953506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20696e506f6c79676f6e5a6b45564d3a3a5f70726f766544697374696e637450656e64506f6c79676f6e5a6b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a2046a2646970667358221220df0c718872080a06c39a4df983cba0d2e7ae0d8c03151e2e3bf840ff4528fbc464736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061032f5760003560e01c80638da5cb5b116101b4578063cfa8ed47116100fa578063e7a7ed021161009d578063e7a7ed021461080e578063e8bf92ed14610828578063eaeb077b1461083b578063edc411211461084e578063f14916d614610861578063f2fde38b14610874578063f851a44014610887578063f8b823e41461089a57600080fd5b8063cfa8ed471461077c578063d02103ca14610796578063d8d1091b146107a9578063d8f54db0146107bc578063d939b315146107d0578063dbc16976146107ea578063e11f3f18146107f2578063e217cfd61461080557600080fd5b8063ab9fc5ef11610162578063ab9fc5ef14610688578063adc879e914610692578063afd23cbe146106ac578063b4d63f58146106d4578063b6b0b09714610734578063c0ed84e01461074e578063c89e42df14610756578063cf1363061461076957600080fd5b80638da5cb5b1461062157806399f5634e146106325780639c9f3dfe1461063a5780639eb831b91461064d5780639f0d039d14610655578063a3c573eb1461065d578063aa58bad61461067057600080fd5b80634a910e6a11610279578063715018a611610227578063715018a61461053b5780637215541a1461054357806375c508b3146105565780637fcb365314610569578063837a47381461057c578063841b24d7146105ea5780638b48931e146106045780638c4a0af71461060e57600080fd5b80634a910e6a146104a75780635392c5e0146104ba578063542028d5146104da57806360943d6a146104e25780636b8616ce146104f55780636ff512cc14610515578063704b6c021461052857600080fd5b8063383b3be8116102e1578063383b3be8146103fa578063394218e91461040d5780633c15826714610420578063423fa85614610433578063456052671461044d578063458c0477146104675780634834a3431461047a5780634a1a89a71461048d57600080fd5b8063107bf28c1461033457806315064c96146103525780631816b7e51461036f57806319d8ac6114610384578063220d7899146103af57806329878983146103c25780632d0889d3146103e2575b600080fd5b61033c6108a3565b6040516103499190614644565b60405180910390f35b60655461035f9060ff1681565b6040519015158152602001610349565b61038261037d36600461465e565b610931565b005b606854610397906001600160401b031681565b6040516001600160401b039091168152602001610349565b61033c6103bd36600461469e565b610a5b565b606a546103d5906001600160a01b031681565b60405161034991906146eb565b6103ec620493e081565b604051908152602001610349565b61035f6104083660046146ff565b610bfc565b61038261041b3660046146ff565b610c43565b61038261042e36600461483c565b610dff565b60685461039790600160401b90046001600160401b031681565b60685461039790600160801b90046001600160401b031681565b607254610397906001600160401b031681565b61038261048836600461497a565b6115c6565b60725461039790600160401b90046001600160401b031681565b6103826104b53660046146ff565b61190f565b6103ec6104c83660046146ff565b606d6020526000908152604090205481565b61033c6119c5565b6103826104f0366004614a1c565b6119d2565b6103ec6105033660046146ff565b60666020526000908152604090205481565b610382610523366004614af3565b611d2d565b610382610536366004614af3565b611dab565b610382611e20565b6103826105513660046146ff565b611e34565b610382610564366004614b10565b61203b565b606954610397906001600160401b031681565b6105bf61058a366004614bae565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b039586168152949093166020850152918301526060820152608001610349565b60725461039790600160c01b90046001600160401b031681565b61039762093a8081565b61038261061c366004614bd5565b6120ca565b6033546001600160a01b03166103d5565b6103ec612141565b6103826106483660046146ff565b612229565b6103ec600c81565b6074546103ec565b6070546103d5906001600160a01b031681565b6065546103979061010090046001600160401b031681565b6103976206978081565b606c5461039790600160a81b90046001600160401b031681565b6065546106c190600160481b900461ffff1681565b60405161ffff9091168152602001610349565b61070f6106e23660046146ff565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b039283166020850152911690820152606001610349565b6065546103d590600160581b90046001600160a01b031681565b6103976123d7565b610382610764366004614bf2565b612424565b6103826107773660046146ff565b61248a565b6069546103d590600160401b90046001600160a01b031681565b606c546103d5906001600160a01b031681565b6103826107b7366004614c26565b61250b565b606c5461035f90600160a01b900460ff1681565b60725461039790600160801b90046001600160401b031681565b6103826129cb565b610382610800366004614b10565b612a87565b6103976103e881565b60685461039790600160c01b90046001600160401b031681565b606b546103d5906001600160a01b031681565b610382610849366004614d18565b612bcc565b61038261085c36600461497a565b612ef5565b61038261086f366004614af3565b613015565b610382610882366004614af3565b61308a565b6073546103d5906001600160a01b031681565b6103ec60745481565b606f80546108b090614d5c565b80601f01602080910402602001604051908101604052809291908181526020018280546108dc90614d5c565b80156109295780601f106108fe57610100808354040283529160200191610929565b820191906000526020600020905b81548152906001019060200180831161090c57829003601f168201915b505050505081565b6073546001600160a01b031633146109645760405162461bcd60e51b815260040161095b90614d96565b60405180910390fd5b6103e88161ffff161015801561097f57506104008161ffff16105b610a045760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a40161095b565b6065805461ffff60481b1916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610a8d57508115155b610b01576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f74206578697374606482015260840161095b565b80610b76576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f74206578697374606482015260840161095b565b606c54604080516001600160601b03193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b0382811660009081526071602052604081205490924292610c3292600160801b90920481169116614def565b6001600160401b0316111592915050565b6073546001600160a01b03163314610c6d5760405162461bcd60e51b815260040161095b90614d96565b62093a806001600160401b0382161115610d065760405162461bcd60e51b815260206004820152604e60248201527f506f6c79676f6e5a6b45564d3a3a73657454727573746564416767726567617460448201527f6f7254696d656f75743a20457863656564206d61782068616c7420616767726560648201526d19d85d1a5bdb881d1a5b595bdd5d60921b608482015260a40161095b565b60655460ff16610da9576072546001600160401b03600160c01b909104811690821610610da95760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a204e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a40161095b565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610a50565b60655460ff1615610e225760405162461bcd60e51b815260040161095b90614e1a565b606954600160401b90046001600160a01b03163314610ea95760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a204f6e6c7920747275737465642073657175656e636572000000000000606482015260840161095b565b805180610f1e5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e63652031206261746368000000606482015260840161095b565b6103e88110610f97576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e792062617463686573606482015260840161095b565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b858110156113fc576000878281518110610fea57610fea614e82565b60200260200101519050600081606001516001600160401b0316111561117a578361101481614e98565b94505060008160000151805190602001208260200151836060015160405160200161104193929190614ebe565b60408051601f1981840301815291815281516020928301206001600160401b0388166000908152606690935291205490915081146110d55760405162461bcd60e51b815260206004820152603d60248201526000805160206154ab83398151915260448201527f6f7263656420626174636865732064617461206d757374206d61746368000000606482015260840161095b565b81606001516001600160401b031682604001516001600160401b031610156111745760405162461bcd60e51b815260206004820152605860248201526000805160206154ab83398151915260448201527f6f7263656420626174636865732074696d657374616d70206d757374206265206064820152773134b3b3b2b91037b91032b8bab0b6103a3430b71036b4b760411b608482015260a40161095b565b506112ef565b602081015115806112035750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916111bd9160040190815260200190565b6020604051808303816000875af11580156111dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112009190614ee1565b15155b6112755760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d757374206578697374000000000000606482015260840161095b565b805151620493e0116112ef5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f77000000000000606482015260840161095b565b856001600160401b031681604001516001600160401b03161015801561132257504281604001516001600160401b031611155b6113945760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e6765000000606482015260840161095b565b805180516020918201208183015160408085015190516113bb948894939291339101614efa565b60405160208183030381529060405280519060200120925084806113de90614e98565b955050806040015195505080806113f490614f39565b915050610fce565b506068546001600160401b03600160c01b9091048116908316111561146f5760405162461bcd60e51b815260206004820152603560248201526000805160206154ab8339815191526044820152746f7263652062617463686573206f766572666c6f7760581b606482015260840161095b565b60685460009061148f90600160801b90046001600160401b031684614f52565b6114a2906001600160401b031687614f7a565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b928716929092029190911790556074549091506115779033903090849061155c9190614f91565b606554600160581b90046001600160a01b0316929190613100565b61157f61316b565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff16156115e95760405162461bcd60e51b815260040161095b90614e1a565b6072546001600160401b03878116600090815260676020526040902060010154429261162092600160c01b90910481169116614def565b6001600160401b031611156116a95760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2054727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a40161095b565b6103e86116b68888614f52565b6001600160401b0316106117325760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2043616e60448201527f6e6f74207665726966792074686174206d616e79206261746368657300000000606482015260840161095b565b611742888888888888888861320f565b61174b86613712565b607254600160801b90046001600160401b0316600003611813576069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d6020526040902085905560725416156117b057607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156117f657600080fd5b505af115801561180a573d6000803e3d6000fd5b505050506118c4565b61181b61316b565b607280546001600160401b031690600061183483614e98565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b606a546001600160a01b031633146119b95761192a81610bfc565b6119b95760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2050656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a40161095b565b6119c2816138f8565b50565b606e80546108b090614d5c565b600054610100900460ff16158080156119f25750600054600160ff909116105b80611a0c5750303b158015611a0c575060005460ff166001145b611a6f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161095b565b6000805460ff191660011790558015611a92576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c81169190911790925560658054600160581b600160f81b031916600160581b8c851602179055606b805482168a841617905560708054909116918816919091179055611afa6020860186614af3565b607380546001600160a01b0319166001600160a01b0392909216919091179055611b2a6060860160408701614af3565b606980546001600160a01b0392909216600160401b02600160401b600160e01b0319909216919091179055611b6560c0860160a08701614af3565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa711356849055611bc260e0860160c087016146ff565b607280546001600160401b0392909216600160c01b026001600160c01b03909216919091179055611bf960408601602087016146ff565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b19909216919091179055611c3560808601606087016146ff565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b19909216919091179055611c7160a0860160808701614bd5565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e611c998482614ff6565b50606f611ca68382614ff6565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea000000000000070800179055611cdc613add565b8015611d22576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b03163314611d575760405162461bcd60e51b815260040161095b90614d96565b60698054600160401b600160e01b031916600160401b6001600160a01b038416021790556040517ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090610a509083906146eb565b6073546001600160a01b03163314611dd55760405162461bcd60e51b815260040161095b90614d96565b607380546001600160a01b0319166001600160a01b0383161790556040517f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190610a509083906146eb565b611e28613b51565b611e326000613bab565b565b6033546001600160a01b03163314612033576000611e506123d7565b9050806001600160401b0316826001600160401b031611611ec75760405162461bcd60e51b815260206004820152603c602482015260008051602061542b83398151915260448201527f746174653a20426174636820616c726561647920766572696669656400000000606482015260840161095b565b6068546001600160401b03600160401b909104811690831611801590611f0957506001600160401b038083166000908152606760205260409020600101541615155b611f825760405162461bcd60e51b8152602060048201526050602482015260008051602061542b83398151915260448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a40161095b565b6001600160401b038083166000908152606760205260409020600101544291611fb09162093a809116614def565b6001600160401b031611156120315760405162461bcd60e51b815260206004820152604d602482015260008051602061542b83398151915260448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a40161095b565b505b6119c2613bfd565b60655460ff161561205e5760405162461bcd60e51b815260040161095b90614e1a565b61206f898989898989898989613c6d565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a1611d22613bfd565b6073546001600160a01b031633146120f45760405162461bcd60e51b815260040161095b90614d96565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610a5090831515815260200190565b6065546040516370a0823160e01b81526000918291600160581b9091046001600160a01b0316906370a082319061217c9030906004016146eb565b602060405180830381865afa158015612199573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bd9190614ee1565b905060006121c96123d7565b6068546001600160401b03600160401b82048116916121f991600160801b8204811691600160c01b900416614f52565b6122039190614def565b61220d9190614f52565b6001600160401b0316905061222281836150cb565b9250505090565b6073546001600160a01b031633146122535760405162461bcd60e51b815260040161095b90614d96565b62093a806001600160401b03821611156122e75760405162461bcd60e51b815260206004820152604960248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a20457863656564206d61782068616c74206167677265676174696f6064820152681b881d1a5b595bdd5d60ba1b608482015260a40161095b565b60655460ff1661237c576072546001600160401b03600160801b90910481169082161061237c5760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a204e65772074696d656f7574206d757374206265206c6f77657200606482015260840161095b565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610a50565b6072546000906001600160401b03161561241457506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b0316331461244e5760405162461bcd60e51b815260040161095b90614d96565b606e61245a8282614ff6565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610a509190614644565b6073546001600160a01b031633146124b45760405162461bcd60e51b815260040161095b90614d96565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610a50565b60655460ff161561252e5760405162461bcd60e51b815260040161095b90614e1a565b606c54600160a01b900460ff16151560011461255c5760405162461bcd60e51b815260040161095b906150df565b8051806125bf5760405162461bcd60e51b815260206004820152603f602482015260008051602061548b83398151915260448201527f65733a204d75737420666f726365206174206c65617374203120626174636800606482015260840161095b565b6103e881106126305760405162461bcd60e51b8152602060048201526043602482015260008051602061548b83398151915260448201527f65733a2043616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a40161095b565b6068546001600160401b03600160c01b8204811691612658918491600160801b900416615148565b11156126b45760405162461bcd60e51b8152602060048201526037602482015260008051602061548b833981519152604482015276195cce88119bdc98d94818985d18da081a5b9d985b1a59604a1b606482015260840161095b565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b848110156128e257600086828151811061270157612701614e82565b60200260200101519050838061271690614e98565b94505060008160000151805190602001208260200151836040015160405160200161274393929190614ebe565b60408051601f1981840301815291815281516020928301206001600160401b0388166000908152606690935291205490915081146127e25760405162461bcd60e51b8152602060048201526042602482015260008051602061548b83398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a40161095b565b6127ed600188614f7a565b830361288457426206978083604001516128079190614def565b6001600160401b031611156128845760405162461bcd60e51b8152602060048201526049602482015260008051602061548b83398151915260448201527f65733a20466f72636564206261746368206973206e6f7420696e2074696d656f6064820152681d5d081c195c9a5bd960ba1b608482015260a40161095b565b81518051602091820120818401516040516128a793889392914291339101614efa565b60405160208183030381529060405280519060200120935085806128ca90614e98565b965050505080806128da90614f39565b9150506126e5565b506068805467ffffffffffffffff1916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b0319909216919091179286168502929092179091558554600160401b600160c01b03191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166129ed5760405162461bcd60e51b815260040161095b90615160565b6073546001600160a01b03163314612a175760405162461bcd60e51b815260040161095b90614d96565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612a6757600080fd5b505af1158015612a7b573d6000803e3d6000fd5b50505050611e326142a3565b606a546001600160a01b03163314612ab15760405162461bcd60e51b815260040161095b906151bd565b612ac2898989898989898989613c6d565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612b0d57607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612b5357600080fd5b505af1158015612b67573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff1615612bef5760405162461bcd60e51b815260040161095b90614e1a565b606c54600160a01b900460ff161515600114612c1d5760405162461bcd60e51b815260040161095b906150df565b6000612c2860745490565b905081811115612c8d5760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a204e6f7420656e6044820152696f756768206d6174696360b01b606482015260840161095b565b620493e0835110612cfe5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b606482015260840161095b565b606554612d1d90600160581b90046001600160a01b0316333084613100565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa158015612d67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d8b9190614ee1565b60688054919250600160c01b9091046001600160401b0316906018612daf83614e98565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505083805190602001208142604051602001612df093929190614ebe565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b031660009081526066909352912055323303612e9457606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2612eef565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931823387604051612ee69392919061521a565b60405180910390a25b50505050565b606a546001600160a01b03163314612f1f5760405162461bcd60e51b815260040161095b906151bd565b612f2f888888888888888861320f565b6069805467ffffffffffffffff19166001600160401b038881169182179092556000908152606d602052604090208590556072541615612f7a57607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015612fc057600080fd5b505af1158015612fd4573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce7906020016118fd565b6073546001600160a01b0316331461303f5760405162461bcd60e51b815260040161095b90614d96565b606a80546001600160a01b0319166001600160a01b0383161790556040517f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90610a509083906146eb565b613092613b51565b6001600160a01b0381166130f75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161095b565b6119c281613bab565b6040516001600160a01b0380851660248301528316604482015260648101829052612eef9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526142fa565b6072546001600160401b03600160401b8204811691161115611e32576072546000906131a890600160401b90046001600160401b03166001614def565b90506131b381610bfc565b156119c2576072546000906002906131d59084906001600160401b0316614f52565b6131df919061524d565b6131e99083614def565b90506131f481610bfc565b1561320657613202816138f8565b5050565b613202826138f8565b60008061321a6123d7565b90506001600160401b038a1615613380576072546001600160401b03908116908b1611156132d25760405162461bcd60e51b815260206004820152605960248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20706560448201527f6e64696e6753746174654e756d206d757374206265206c657373206f7220657160648201527875616c207468616e206c61737450656e64696e67537461746560381b608482015260a40161095b565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b909204161461337a5760405162461bcd60e51b815260206004820152604d602482015260008051602061544b83398151915260448201527f69744e756d4261746368206d757374206d61746368207468652070656e64696e60648201526c0ce40e6e8c2e8ca40c4c2e8c6d609b1b608482015260a40161095b565b506134a6565b6001600160401b0389166000908152606d602052604090205491508161340a5760405162461bcd60e51b81526020600482015260446024820181905260008051602061544b833981519152908201527f69744e756d426174636820737461746520726f6f7420646f6573206e6f7420656064820152631e1a5cdd60e21b608482015260a40161095b565b806001600160401b0316896001600160401b031611156134a65760405162461bcd60e51b815260206004820152605e602482015260008051602061544b83398151915260448201527f69744e756d4261746368206d757374206265206c657373206f7220657175616c60648201527f207468616e2063757272656e744c617374566572696669656442617463680000608482015260a40161095b565b806001600160401b0316886001600160401b03161161354e5760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20666960448201527f6e616c4e65774261746368206d75737420626520626967676572207468616e206064820152770c6eae4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d60431b608482015260a40161095b565b600061355d8a8a8a868b610a5b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516135929190615273565b602060405180830381855afa1580156135af573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906135d29190614ee1565b6135dc919061528f565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613620918b918b918b91906004016152a3565b602060405180830381865afa15801561363d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613661919061531d565b6136c15760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20496e60448201526a3b30b634b210383937b7b360a91b606482015260840161095b565b613704336136cf858d614f52565b6001600160401b03166136e0612141565b6136ea9190614f91565b606554600160581b90046001600160a01b031691906143d1565b505050505050505050505050565b600061371c6123d7565b90508160008061372c8484614f52565b6001600160401b031690505b836001600160401b0316836001600160401b0316146137de576001600160401b03808416600090815260676020526040902060655460018201549192610100909104811691613788911642614f7a565b11156137c35760018101546137ad90600160401b90046001600160401b031685614f52565b6137c0906001600160401b031684615148565b92505b60010154600160401b90046001600160401b03169250613738565b60006137ea8383614f7a565b9050828110156138645760006138008285614f7a565b9050600c81116138105780613813565b600c5b9050613820816003614f91565b61382b90600a61541e565b606554613844908390600160481b900461ffff1661541e565b6074546138519190614f91565b61385b91906150cb565b607455506138f0565b60006138708483614f7a565b9050600c81116138805780613883565b600c5b90506000613892826003614f91565b61389d90600a61541e565b6065546138b6908490600160481b900461ffff1661541e565b6074546138c39190614f91565b6138cd91906150cb565b9050806074546074546138e09190614f91565b6138ea91906150cb565b60745550505b505050505050565b6001600160401b0381161580159061392557506072546001600160401b03600160401b9091048116908216115b801561394057506072546001600160401b0390811690821611155b6139b25760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a5f636f6e736f6c696461746550656e64696e60448201527f6753746174653a2070656e64696e6753746174654e756d20696e76616c696400606482015260840161095b565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b9283900490981667ffffffffffffffff19909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b158015613a6f57600080fd5b505af1158015613a83573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e8460020154604051613ad091815260200190565b60405180910390a3505050565b600054610100900460ff16613b485760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161095b565b611e3233613bab565b6033546001600160a01b03163314611e325760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095b565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613c4d57600080fd5b505af1158015613c61573d6000803e3d6000fd5b50505050611e32614401565b60006001600160401b038a1615613ddd576072546001600160401b03908116908b161115613d255760405162461bcd60e51b8152602060048201526065602482015260008051602061546b83398151915260448201527f696e6753746174653a2070656e64696e6753746174654e756d206d757374206260648201527f65206c657373206f7220657175616c207468616e206c61737450656e64696e67608482015264537461746560d81b60a482015260c40161095b565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b9092041614613dd75760405162461bcd60e51b8152602060048201526059602482015260008051602061546b83398151915260448201527f696e6753746174653a20696e69744e756d4261746368206d757374206d6174636064820152780d040e8d0ca40e0cadcc8d2dcce40e6e8c2e8ca40c4c2e8c6d603b1b608482015260a40161095b565b50613f16565b506001600160401b0387166000908152606d602052604090205480613e715760405162461bcd60e51b8152602060048201526050602482015260008051602061546b83398151915260448201527f696e6753746174653a20696e69744e756d426174636820737461746520726f6f60648201526f1d08191bd95cc81b9bdd08195e1a5cdd60821b608482015260a40161095b565b6069546001600160401b039081169089161115613f165760405162461bcd60e51b8152602060048201526063602482015260008051602061546b83398151915260448201527f696e6753746174653a20696e69744e756d4261746368206d757374206265206c60648201527f657373206f7220657175616c207468616e206c617374566572696669656442616084820152620e8c6d60eb1b60a482015260c40161095b565b6072546001600160401b03908116908a1611801590613f465750896001600160401b0316896001600160401b0316115b8015613f6757506072546001600160401b03600160401b9091048116908a16115b613fd85760405162461bcd60e51b8152602060048201526048602482015260008051602061546b83398151915260448201527f696e6753746174653a2066696e616c50656e64696e6753746174654e756d20696064820152671b98dbdc9c9958dd60c21b608482015260a40161095b565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146140915760405162461bcd60e51b8152602060048201526063602482015260008051602061546b83398151915260448201527f696e6753746174653a2066696e616c4e65774261746368206d7573742062652060648201527f657175616c207468616e2063757272656e744c617374566572696669656442616084820152620e8c6d60eb1b60a482015260c40161095b565b60006140a0898989858a610a5b565b905060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016002836040516140d59190615273565b602060405180830381855afa1580156140f2573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906141159190614ee1565b61411f919061528f565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91614163918a918a918a91906004016152a3565b602060405180830381865afa158015614180573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141a4919061531d565b6141fe5760405162461bcd60e51b8152602060048201526037602482015260008051602061546b83398151915260448201527634b733a9ba30ba329d1024b73b30b634b210383937b7b360491b606482015260840161095b565b6001600160401b038b166000908152607160205260409020600201548790036137045760405162461bcd60e51b815260206004820152605b602482015260008051602061546b83398151915260448201527f696e6753746174653a2053746f72656420726f6f74206d75737420626520646960648201527f66666572656e74207468616e206e657720737461746520726f6f740000000000608482015260a40161095b565b60655460ff166142c55760405162461bcd60e51b815260040161095b90615160565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b600061434f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661445c9092919063ffffffff16565b8051909150156143cc578080602001905181019061436d919061531d565b6143cc5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161095b565b505050565b6040516001600160a01b0383166024820152604481018290526143cc90849063a9059cbb60e01b90606401613134565b60655460ff16156144245760405162461bcd60e51b815260040161095b90614e1a565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b606061446b8484600085614473565b949350505050565b6060824710156144d45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161095b565b600080866001600160a01b031685876040516144f09190615273565b60006040518083038185875af1925050503d806000811461452d576040519150601f19603f3d011682016040523d82523d6000602084013e614532565b606091505b50915091506145438783838761454e565b979650505050505050565b606083156145bd5782516000036145b6576001600160a01b0385163b6145b65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161095b565b508161446b565b61446b83838151156145d25781518083602001fd5b8060405162461bcd60e51b815260040161095b9190614644565b60005b838110156146075781810151838201526020016145ef565b83811115612eef5750506000910152565b600081518084526146308160208601602086016145ec565b601f01601f19169290920160200192915050565b6020815260006146576020830184614618565b9392505050565b60006020828403121561467057600080fd5b813561ffff8116811461465757600080fd5b80356001600160401b038116811461469957600080fd5b919050565b600080600080600060a086880312156146b657600080fd5b6146bf86614682565b94506146cd60208701614682565b94979496505050506040830135926060810135926080909101359150565b6001600160a01b0391909116815260200190565b60006020828403121561471157600080fd5b61465782614682565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156147525761475261471a565b60405290565b604051606081016001600160401b03811182821017156147525761475261471a565b604051601f8201601f191681016001600160401b03811182821017156147a2576147a261471a565b604052919050565b60006001600160401b038211156147c3576147c361471a565b5060051b60200190565b600082601f8301126147de57600080fd5b81356001600160401b038111156147f7576147f761471a565b61480a601f8201601f191660200161477a565b81815284602083860101111561481f57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561484f57600080fd5b82356001600160401b038082111561486657600080fd5b818501915085601f83011261487a57600080fd5b813561488d614888826147aa565b61477a565b81815260059190911b830184019084810190888311156148ac57600080fd5b8585015b83811015614945578035858111156148c85760008081fd5b86016080818c03601f19018113156148e05760008081fd5b6148e8614730565b89830135888111156148fa5760008081fd5b6149088e8c838701016147cd565b8252506040808401358b8301526060614922818601614682565b82840152614931848601614682565b9083015250855250509186019186016148b0565b5098975050505050505050565b806040810183101561496357600080fd5b92915050565b806080810183101561496357600080fd5b6000806000806000806000806101a0898b03121561499757600080fd5b6149a089614682565b97506149ae60208a01614682565b96506149bc60408a01614682565b955060608901359450608089013593506149d98a60a08b01614952565b92506149e88a60e08b01614969565b91506149f88a6101608b01614952565b90509295985092959890939650565b6001600160a01b03811681146119c257600080fd5b600080600080600080600080888a036101c0811215614a3a57600080fd5b8935614a4581614a07565b985060208a0135614a5581614a07565b975060408a0135614a6581614a07565b965060608a0135614a7581614a07565b955060e0607f1982011215614a8957600080fd5b5060808901935061016089013592506101808901356001600160401b0380821115614ab357600080fd5b614abf8c838d016147cd565b93506101a08b0135915080821115614ad657600080fd5b50614ae38b828c016147cd565b9150509295985092959890939650565b600060208284031215614b0557600080fd5b813561465781614a07565b60008060008060008060008060006101c08a8c031215614b2f57600080fd5b614b388a614682565b9850614b4660208b01614682565b9750614b5460408b01614682565b9650614b6260608b01614682565b955060808a0135945060a08a01359350614b7f8b60c08c01614952565b9250614b8f8b6101008c01614969565b9150614b9f8b6101808c01614952565b90509295985092959850929598565b600060208284031215614bc057600080fd5b5035919050565b80151581146119c257600080fd5b600060208284031215614be757600080fd5b813561465781614bc7565b600060208284031215614c0457600080fd5b81356001600160401b03811115614c1a57600080fd5b61446b848285016147cd565b60006020808385031215614c3957600080fd5b82356001600160401b0380821115614c5057600080fd5b818501915085601f830112614c6457600080fd5b8135614c72614888826147aa565b81815260059190911b83018401908481019088831115614c9157600080fd5b8585015b8381101561494557803585811115614cad5760008081fd5b86016060818c03601f1901811315614cc55760008081fd5b614ccd614758565b8983013588811115614cdf5760008081fd5b614ced8e8c838701016147cd565b8252506040808401358b830152614d05838501614682565b9082015285525050918601918601614c95565b60008060408385031215614d2b57600080fd5b82356001600160401b03811115614d4157600080fd5b614d4d858286016147cd565b95602094909401359450505050565b600181811c90821680614d7057607f821691505b602082108103614d9057634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a204f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115614e1157614e11614dd9565b01949350505050565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b03808316818103614eb457614eb4614dd9565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b600060208284031215614ef357600080fd5b5051919050565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6001600160601b0319166068820152607c0190565b600060018201614f4b57614f4b614dd9565b5060010190565b60006001600160401b0383811690831681811015614f7257614f72614dd9565b039392505050565b600082821015614f8c57614f8c614dd9565b500390565b6000816000190483118215151615614fab57614fab614dd9565b500290565b601f8211156143cc57600081815260208120601f850160051c81016020861015614fd75750805b601f850160051c820191505b818110156138f057828155600101614fe3565b81516001600160401b0381111561500f5761500f61471a565b6150238161501d8454614d5c565b84614fb0565b602080601f83116001811461505857600084156150405750858301515b600019600386901b1c1916600185901b1785556138f0565b600085815260208120601f198616915b8281101561508757888601518255948401946001909101908401615068565b50858210156150a55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b6000826150da576150da6150b5565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a204f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b6000821982111561515b5761515b614dd9565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a204f6e6c7920747275737465642061676772656761746f7200000000606082015260800190565b8381526001600160a01b038316602082015260606040820181905260009061524490830184614618565b95945050505050565b60006001600160401b0380841680615267576152676150b5565b92169190910492915050565b600082516152858184602087016145ec565b9190910192915050565b60008261529e5761529e6150b5565b500690565b61012081016040808784376000838201818152879190815b60028110156152db578484833790840182815292840192906001016152bb565b5050828760c0870137610100850181815286935091505b60018110156153115782518252602092830192909101906001016152f2565b50505095945050505050565b60006020828403121561532f57600080fd5b815161465781614bc7565b600181815b8085111561537557816000190482111561535b5761535b614dd9565b8085161561536857918102915b93841c939080029061533f565b509250929050565b60008261538c57506001614963565b8161539957506000614963565b81600181146153af57600281146153b9576153d5565b6001915050614963565b60ff8411156153ca576153ca614dd9565b50506001821b614963565b5060208310610133831016604e8410600b84101617156153f8575081810a614963565b615402838361533a565b806000190482111561541657615416614dd9565b029392505050565b6000614657838361537d56fe506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e637953506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20696e506f6c79676f6e5a6b45564d3a3a5f70726f766544697374696e637450656e64506f6c79676f6e5a6b45564d3a3a73657175656e6365466f7263654261746368506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a2046a2646970667358221220df0c718872080a06c39a4df983cba0d2e7ae0d8c03151e2e3bf840ff4528fbc464736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZkEVMBridge.json b/compiled-contracts/PolygonZkEVMBridge.json index 7f0e497b0..04a4ef91c 100644 --- a/compiled-contracts/PolygonZkEVMBridge.json +++ b/compiled-contracts/PolygonZkEVMBridge.json @@ -699,8 +699,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506147ce806100206000396000f3fe608060405260043610620001675760003560e01c80637b6323c111620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b80637b6323c1146200037057806381b1c17414620003955780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b806334ac9cf2116200011e57806334ac9cf214620002a25780633ae0504714620002c45780633da8168214620002dc5780633e1970431462000301578063463855491462000326578063647c576c146200034b57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002432565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009cf565b348015620001db57600080fd5b50620001f3620001ed366004620024be565b62000a08565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d62000252366004620024fa565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b50602754620001f3906001600160a01b031681565b348015620002d157600080fd5b506200022462000a5b565b348015620002e957600080fd5b50620001a1620002fb366004620025e7565b62000b4e565b3480156200030e57600080fd5b50620002246200032036600462002664565b62000c4f565b3480156200033357600080fd5b50620001836200034536600462002774565b62000cdc565b3480156200035857600080fd5b50620001836200036a3660046200285a565b62000e82565b3480156200037d57600080fd5b50620001836200038f36600462002774565b62000fe1565b348015620003a257600080fd5b50620001f3620003b4366004620028aa565b6024602052600090815260409020546001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028aa565b62001469565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d366004620028c4565b620014ae565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b036600462002977565b620015c5565b348015620004c357600080fd5b506200018362001771565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028aa565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b81526004016200055390620029de565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044657374696e6174696f6e2063616e6e6f7420626520697473656c66000000606482015260840162000553565b60008060606001600160a01b03891662000687578534146200067d5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a908201527f20416d6f756e7420646f6573206e6f74206d61746368206d6573736167652e76606482015263616c756560e01b608482015260a40162000553565b60009150620008e9565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074657604051632770a7eb60e21b81526001600160a01b038b1690639dc29fac90620006fe9033908b9060040162002a46565b600060405180830381600087803b1580156200071957600080fd5b505af11580156200072e573d6000803e3d6000fd5b505050508060200151935080600001519250620008e7565b84156200075b576200075b8a888888620017a8565b620007726001600160a01b038b1633308a62001bcc565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007c9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f3919081019062002ada565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000832573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085c919081019062002ada565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c1919062002b12565b604051602001620008d59392919062002b60565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092b98979695949392919062002b9d565b60405180910390a16200095662000950600084868c8c8c888051906020012062000c4f565b62001c39565b6026546001600160a01b03166333d6247d6200097162000a5b565b6040518263ffffffff1660e01b81526004016200099091815260200190565b600060405180830381600087803b158015620009ab57600080fd5b505af1158015620009c0573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009fc5760405162461bcd60e51b8152600401620005539062002c0a565b62000a0662001d8a565b565b600060246000848460405160200162000a2392919062002c67565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b45578260011660010362000ac6576001816020811062000a925762000a9262002c91565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af3565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0060028462002cd3565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3c9062002cea565b91505062000a66565b50919392505050565b6000846001600160401b038416825b602081101562000c40578160011660010362000bca5786818151811062000b885762000b8862002c91565b60200260200101518360405160200162000bac929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c1c565b8287828151811062000be05762000be062002c91565b602002602001015160405160200162000c03929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2960028362002cd3565b91508062000c378162002cea565b91505062000b5d565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d025760405162461bcd60e51b81526004016200055390620029de565b62000d188a8a8a8a8a8a8a8a8a8a600162001de8565b62000d298963ffffffff1662002073565b6000836001600160a01b03168387898560405160240162000d4d9392919062002d06565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d84919062002d41565b60006040518083038185875af1925050503d806000811462000dc3576040519150601f19603f3d011682016040523d82523d6000602084013e62000dc8565b606091505b505090508062000e345760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e8813595cdcd859d94819985a5b195960821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e6d95949392919062002d5f565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea35750600054600160ff909116105b8062000ebf5750303b15801562000ebf575060005460ff166001145b62000f245760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f48576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff1615620010075760405162461bcd60e51b81526004016200055390620029de565b6200101d8a8a8a8a8a8a8a8a8a8a600062001de8565b6200102e8963ffffffff1662002073565b6001600160a01b0385166200112557604080516000808252602082019092526001600160a01b03851690849060405162001069919062002d41565b60006040518083038185875af1925050503d8060008114620010a8576040519150601f19603f3d011682016040523d82523d6000602084013e620010ad565b606091505b50509050806200111e5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a20604482015274115d1a195c881d1c985b9cd9995c8819985a5b1959605a1b606482015260840162000553565b506200141c565b60225463ffffffff6101009091048116908716036200115a57620011546001600160a01b0386168484620020b5565b6200141c565b600086866040516020016200117192919062002c67565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013b457600080600085806020019051810190620011c3919062002d96565b925092509250600085848484604051620011dd9062002399565b620011eb9392919062002b60565b8190604051809103906000f59050801580156200120c573d6000803e3d6000fd5b506040516340c10f1960e01b81529091506001600160a01b038216906340c10f199062001240908c908c9060040162002a46565b600060405180830381600087803b1580156200125b57600080fd5b505af115801562001270573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013a29392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001419565b6040516340c10f1960e01b81526001600160a01b038216906340c10f1990620013e4908890889060040162002a46565b600060405180830381600087803b158015620013ff57600080fd5b505af115801562001414573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200145595949392919062002d5f565b60405180910390a150505050505050505050565b6000806200147a6101008462002cd3565b905060006200148c6101008562002e0b565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014c692919062002c67565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014f99062002399565b601f1982820381018352601f90910116604081905262001526908d908d908d908d908d9060200162002e4b565b60408051601f198184030181529082905262001546929160200162002e8c565b604051602081830303815290604052805190602001206040516020016200159f94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015eb5760405162461bcd60e51b81526004016200055390620029de565b60225463ffffffff610100909104811690841603620016735760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044657374696e6174696f6e2063616e6e6f7420626520697473656c6600606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016c798979695949392919062002b9d565b60405180910390a1620016fe620009506001602260019054906101000a900463ffffffff1633878734888051906020012062000c4f565b6026546001600160a01b03166333d6247d6200171962000a5b565b6040518263ffffffff1660e01b81526004016200173891815260200190565b600060405180830381600087803b1580156200175357600080fd5b505af115801562001768573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b031633146200179e5760405162461bcd60e51b8152600401620005539062002c0a565b62000a06620020d7565b6000620017eb83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200218692505050565b9050632afa533160e01b6001600160e01b0319821601620019e05760008080808080806200181d896004818d62002ebf565b8101906200182c919062002eeb565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200186e5760405162461bcd60e51b8152600401620005539062002f46565b6001600160a01b0386163014620018995760405162461bcd60e51b8152600401620005539062002fa3565b8a85146200190c5760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205065726044820152780dad2e840c2dadeeadce840c8decae640dcdee840dac2e8c6d603b1b606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200198c919062002d41565b6000604051808303816000865af19150503d8060008114620019cb576040519150601f19603f3d011682016040523d82523d6000602084013e620019d0565b606091505b5050505050505050505062001bc5565b6001600160e01b031981166323f2ebc360e21b1462001a565760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e6f7460448201526a081d985b1a590818d85b1b60aa1b606482015260840162000553565b60008080808080808062001a6e8a6004818e62002ebf565b81019062001a7d919062003005565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001ac15760405162461bcd60e51b8152600401620005539062002f46565b6001600160a01b038716301462001aec5760405162461bcd60e51b8152600401620005539062002fa3565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001b75919062002d41565b6000604051808303816000865af19150503d806000811462001bb4576040519150601f19603f3d011682016040523d82523d6000602084013e62001bb9565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdb9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526200218d565b80600162001c4a602060026200318e565b62001c5691906200319c565b6021541062001cbb5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d65726b6c65604482015269081d1c995948199d5b1b60b21b606482015260840162000553565b60016021600082825462001cd09190620031b6565b909155505060215460005b602081101562001d7a578160011660010362001d1057826001826020811062001d085762001d0862002c91565b015550505050565b6001816020811062001d265762001d2662002c91565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d63919062002cd3565b91508062001d718162002cea565b91505062001cdb565b5062001d85620031d1565b505050565b60225460ff161562001db05760405162461bcd60e51b81526004016200055390620029de565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001df98a63ffffffff1662001469565b1562001e505760405162461bcd60e51b815260206004820152603060248201526000805160206200477983398151915260448201526f08105b1c9958591e4818db185a5b595960821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ec4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001eea9190620031e7565b90508060000362001f4d5760405162461bcd60e51b81526020600482015260376024820152600080516020620047798339815191526044820152760811db1bd8985b115e1a5d149bdbdd081a5b9d985b1a59604a1b606482015260840162000553565b60225463ffffffff878116610100909204161462001fcf5760405162461bcd60e51b815260206004820152604360248201526000805160206200477983398151915260448201527f2044657374696e6174696f6e206e6574776f726b20646f6573206e6f74206d616064820152620e8c6d60eb1b608482015260a40162000553565b602254600090610100900463ffffffff1662001fed57508862001ff0565b50895b6200201b6200200c848b8b8b8b8b8b8051906020012062000c4f565b8e8e63ffffffff168462000b4e565b620009c05760405162461bcd60e51b81526020600482015260326024820152600080516020620047798339815191526044820152711024b73b30b634b21039b6ba10383937b7b360711b606482015260840162000553565b6000620020836101008362002cd3565b90506000620020956101008462002e0b565b6000928352602360205260409092208054600190931b9092179091555050565b62001d858363a9059cbb60e01b848460405160240162001c0192919062002a46565b60225460ff16620021515760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b6000620021e4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022669092919063ffffffff16565b80519091501562001d85578080602001905181019062002205919062003201565b62001d855760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c47848460008585600080866001600160a01b0316858760405162002290919062002d41565b60006040518083038185875af1925050503d8060008114620022cf576040519150601f19603f3d011682016040523d82523d6000602084013e620022d4565b606091505b5091509150620022e787838387620022f2565b979650505050505050565b60608315620023665782516000036200235e576001600160a01b0385163b6200235e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c47565b62000c4783838151156200237d5781518083602001fd5b8060405162461bcd60e51b815260040162000553919062003221565b611542806200323783390190565b6001600160a01b0381168114620023bd57600080fd5b50565b8035620023cd81620023a7565b919050565b803563ffffffff81168114620023cd57600080fd5b60008083601f840112620023fa57600080fd5b5081356001600160401b038111156200241257600080fd5b6020830191508360208285010111156200242b57600080fd5b9250929050565b60008060008060008060a087890312156200244c57600080fd5b86356200245981620023a7565b95506200246960208801620023d2565b945060408701356200247b81620023a7565b93506060870135925060808701356001600160401b038111156200249e57600080fd5b620024ac89828a01620023e7565b979a9699509497509295939492505050565b60008060408385031215620024d257600080fd5b620024dd83620023d2565b91506020830135620024ef81620023a7565b809150509250929050565b6000602082840312156200250d57600080fd5b81356200251a81620023a7565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171562002562576200256262002521565b604052919050565b600082601f8301126200257c57600080fd5b813560206001600160401b038211156200259a576200259a62002521565b8160051b620025ab82820162002537565b9283528481018201928281019087851115620025c657600080fd5b83870192505b84831015620022e757823582529183019190830190620025cc565b60008060008060808587031215620025fe57600080fd5b8435935060208501356001600160401b03808211156200261d57600080fd5b6200262b888389016200256a565b94506040870135915080821682146200264357600080fd5b509396929550929360600135925050565b60ff81168114620023bd57600080fd5b600080600080600080600060e0888a0312156200268057600080fd5b87356200268d8162002654565b96506200269d60208901620023d2565b95506040880135620026af81620023a7565b9450620026bf60608901620023d2565b93506080880135620026d181620023a7565b9699959850939692959460a0840135945060c09093013592915050565b60006001600160401b038211156200270a576200270a62002521565b50601f01601f191660200190565b600082601f8301126200272a57600080fd5b8135620027416200273b82620026ee565b62002537565b8181528460208386010111156200275757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200279557600080fd5b8a356001600160401b0380821115620027ad57600080fd5b620027bb8e838f016200256a565b9b50620027cb60208e01620023d2565b9a5060408d0135995060608d01359850620027e960808e01620023d2565b9750620027f960a08e01620023c0565b96506200280960c08e01620023d2565b95506200281960e08e01620023c0565b94506101008d013593506101208d01359150808211156200283957600080fd5b50620028488d828e0162002718565b9150509295989b9194979a5092959850565b6000806000606084860312156200287057600080fd5b6200287b84620023d2565b925060208401356200288d81620023a7565b915060408401356200289f81620023a7565b809150509250925092565b600060208284031215620028bd57600080fd5b5035919050565b600080600080600080600060a0888a031215620028e057600080fd5b620028eb88620023d2565b96506020880135620028fd81620023a7565b955060408801356001600160401b03808211156200291a57600080fd5b620029288b838c01620023e7565b909750955060608a01359150808211156200294257600080fd5b50620029518a828b01620023e7565b9094509250506080880135620029678162002654565b8091505092959891949750929550565b6000806000606084860312156200298d57600080fd5b6200299884620023d2565b92506020840135620029aa81620023a7565b915060408401356001600160401b03811115620029c657600080fd5b620029d48682870162002718565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b6001600160a01b03929092168252602082015260400190565b60005b8381101562002a7c57818101518382015260200162002a62565b8381111562000fdb5750506000910152565b600082601f83011262002aa057600080fd5b815162002ab16200273b82620026ee565b81815284602083860101111562002ac757600080fd5b62000c4782602083016020870162002a5f565b60006020828403121562002aed57600080fd5b81516001600160401b0381111562002b0457600080fd5b62000c478482850162002a8e565b60006020828403121562002b2557600080fd5b81516200251a8162002654565b6000815180845262002b4c81602086016020860162002a5f565b601f01601f19169290920160200192915050565b60608152600062002b75606083018662002b32565b828103602084015262002b89818662002b32565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002bf18483018762002b32565b925080851660e085015250509998505050505050505050565b6020808252603a908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e5a6b45564d20636f6e7472616374000000000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002ce55762002ce562002ca7565b500490565b60006001820162002cff5762002cff62002cbd565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d389083018462002b32565b95945050505050565b6000825162002d5581846020870162002a5f565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002dac57600080fd5b83516001600160401b038082111562002dc457600080fd5b62002dd28783880162002a8e565b9450602086015191508082111562002de957600080fd5b5062002df88682870162002a8e565b92505060408401516200289f8162002654565b60008262002e1d5762002e1d62002ca7565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e6160608301878962002e22565b828103602084015262002e7681868862002e22565b91505060ff831660408301529695505050505050565b6000835162002ea081846020880162002a5f565b83519083019062002eb681836020880162002a5f565b01949350505050565b6000808585111562002ed057600080fd5b8386111562002ede57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f0757600080fd5b873562002f1481620023a7565b9650602088013562002f2681620023a7565b955060408801359450606088013593506080880135620026d18162002654565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260408201527f6d6974206f776e6572206d757374206265207468652073656e64657200000000606082015260800190565b60208082526033908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205370656040820152726e646572206d7573742062652027746869732760681b606082015260800190565b8015158114620023bd57600080fd5b600080600080600080600080610100898b0312156200302357600080fd5b88356200303081620023a7565b975060208901356200304281620023a7565b965060408901359550606089013594506080890135620030628162002ff6565b935060a0890135620030748162002654565b979a969950949793969295929450505060c08201359160e0013590565b600181815b80851115620030d2578160001904821115620030b657620030b662002cbd565b80851615620030c457918102915b93841c939080029062003096565b509250929050565b600082620030eb5750600162000a55565b81620030fa5750600062000a55565b81600181146200311357600281146200311e576200313e565b600191505062000a55565b60ff84111562003132576200313262002cbd565b50506001821b62000a55565b5060208310610133831016604e8410600b841016171562003163575081810a62000a55565b6200316f838362003091565b806000190482111562003186576200318662002cbd565b029392505050565b60006200251a8383620030da565b600082821015620031b157620031b162002cbd565b500390565b60008219821115620031cc57620031cc62002cbd565b500190565b634e487b7160e01b600052600160045260246000fd5b600060208284031215620031fa57600080fd5b5051919050565b6000602082840312156200321457600080fd5b81516200251a8162002ff6565b6020815260006200251a602083018462002b3256fe60c06040523480156200001157600080fd5b5060405162001542380380620015428339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611088620004ba60003960006104690152600081816102f9015261043301526110886000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610dc2565b60405180910390f35b61016d610168366004610e33565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e5d565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e33565b61048b565b61023d610238366004610e33565b6104ad565b005b61018161024d366004610e99565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610e99565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e33565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e33565b610531565b61016d6102ef366004610e33565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ebb565b6105ba565b61018161033c366004610f2e565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f61565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f61565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b51565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fb1565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fc9565b60405180910390fd5b6104ea8282610bfd565b5050565b60606004805461037090610f61565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fc9565b6104ea8282610caa565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611019565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b0384811660008181526020818152604080832087870390559387168083529184902080548701905592518581529092600080516020611033833981519152910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b7c610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c535760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c659190610fb1565b90915550506001600160a01b03821660008181526020818152604080832080548601905551848152600080516020611033833981519152910160405180910390a35050565b6001600160a01b038216610d0a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610d7e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192916000805160206110338339815191529101610938565b600060208083528351808285015260005b81811015610def57858101830151858201604001528201610dd3565b81811115610e01576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e2e57600080fd5b919050565b60008060408385031215610e4657600080fd5b610e4f83610e17565b946020939093013593505050565b600080600060608486031215610e7257600080fd5b610e7b84610e17565b9250610e8960208501610e17565b9150604084013590509250925092565b600060208284031215610eab57600080fd5b610eb482610e17565b9392505050565b600080600080600080600060e0888a031215610ed657600080fd5b610edf88610e17565b9650610eed60208901610e17565b95506040880135945060608801359350608088013560ff81168114610f1157600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f4157600080fd5b610f4a83610e17565b9150610f5860208401610e17565b90509250929050565b600181811c90821680610f7557607f821691505b602082108103610f9557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610fc457610fc4610f9b565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161102b5761102b610f9b565b506001019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212208b7986f78e961ad6c0885b86b24ce427045be98073c1f3d7fe18180542ab873564736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220aedd107f83550cf398987fb5d0ec8eb115ccee52962ef2bb52eb7ef1520f6c7264736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001675760003560e01c80637b6323c111620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b80637b6323c1146200037057806381b1c17414620003955780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b806334ac9cf2116200011e57806334ac9cf214620002a25780633ae0504714620002c45780633da8168214620002dc5780633e1970431462000301578063463855491462000326578063647c576c146200034b57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002432565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009cf565b348015620001db57600080fd5b50620001f3620001ed366004620024be565b62000a08565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d62000252366004620024fa565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b50602754620001f3906001600160a01b031681565b348015620002d157600080fd5b506200022462000a5b565b348015620002e957600080fd5b50620001a1620002fb366004620025e7565b62000b4e565b3480156200030e57600080fd5b50620002246200032036600462002664565b62000c4f565b3480156200033357600080fd5b50620001836200034536600462002774565b62000cdc565b3480156200035857600080fd5b50620001836200036a3660046200285a565b62000e82565b3480156200037d57600080fd5b50620001836200038f36600462002774565b62000fe1565b348015620003a257600080fd5b50620001f3620003b4366004620028aa565b6024602052600090815260409020546001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028aa565b62001469565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d366004620028c4565b620014ae565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b036600462002977565b620015c5565b348015620004c357600080fd5b506200018362001771565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028aa565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b81526004016200055390620029de565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044657374696e6174696f6e2063616e6e6f7420626520697473656c66000000606482015260840162000553565b60008060606001600160a01b03891662000687578534146200067d5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a908201527f20416d6f756e7420646f6573206e6f74206d61746368206d6573736167652e76606482015263616c756560e01b608482015260a40162000553565b60009150620008e9565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074657604051632770a7eb60e21b81526001600160a01b038b1690639dc29fac90620006fe9033908b9060040162002a46565b600060405180830381600087803b1580156200071957600080fd5b505af11580156200072e573d6000803e3d6000fd5b505050508060200151935080600001519250620008e7565b84156200075b576200075b8a888888620017a8565b620007726001600160a01b038b1633308a62001bcc565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007c9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f3919081019062002ada565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000832573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085c919081019062002ada565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c1919062002b12565b604051602001620008d59392919062002b60565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092b98979695949392919062002b9d565b60405180910390a16200095662000950600084868c8c8c888051906020012062000c4f565b62001c39565b6026546001600160a01b03166333d6247d6200097162000a5b565b6040518263ffffffff1660e01b81526004016200099091815260200190565b600060405180830381600087803b158015620009ab57600080fd5b505af1158015620009c0573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009fc5760405162461bcd60e51b8152600401620005539062002c0a565b62000a0662001d8a565b565b600060246000848460405160200162000a2392919062002c67565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b45578260011660010362000ac6576001816020811062000a925762000a9262002c91565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af3565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0060028462002cd3565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3c9062002cea565b91505062000a66565b50919392505050565b6000846001600160401b038416825b602081101562000c40578160011660010362000bca5786818151811062000b885762000b8862002c91565b60200260200101518360405160200162000bac929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c1c565b8287828151811062000be05762000be062002c91565b602002602001015160405160200162000c03929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2960028362002cd3565b91508062000c378162002cea565b91505062000b5d565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d025760405162461bcd60e51b81526004016200055390620029de565b62000d188a8a8a8a8a8a8a8a8a8a600162001de8565b62000d298963ffffffff1662002073565b6000836001600160a01b03168387898560405160240162000d4d9392919062002d06565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d84919062002d41565b60006040518083038185875af1925050503d806000811462000dc3576040519150601f19603f3d011682016040523d82523d6000602084013e62000dc8565b606091505b505090508062000e345760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e8813595cdcd859d94819985a5b195960821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e6d95949392919062002d5f565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea35750600054600160ff909116105b8062000ebf5750303b15801562000ebf575060005460ff166001145b62000f245760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f48576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff1615620010075760405162461bcd60e51b81526004016200055390620029de565b6200101d8a8a8a8a8a8a8a8a8a8a600062001de8565b6200102e8963ffffffff1662002073565b6001600160a01b0385166200112557604080516000808252602082019092526001600160a01b03851690849060405162001069919062002d41565b60006040518083038185875af1925050503d8060008114620010a8576040519150601f19603f3d011682016040523d82523d6000602084013e620010ad565b606091505b50509050806200111e5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a20604482015274115d1a195c881d1c985b9cd9995c8819985a5b1959605a1b606482015260840162000553565b506200141c565b60225463ffffffff6101009091048116908716036200115a57620011546001600160a01b0386168484620020b5565b6200141c565b600086866040516020016200117192919062002c67565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013b457600080600085806020019051810190620011c3919062002d96565b925092509250600085848484604051620011dd9062002399565b620011eb9392919062002b60565b8190604051809103906000f59050801580156200120c573d6000803e3d6000fd5b506040516340c10f1960e01b81529091506001600160a01b038216906340c10f199062001240908c908c9060040162002a46565b600060405180830381600087803b1580156200125b57600080fd5b505af115801562001270573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013a29392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001419565b6040516340c10f1960e01b81526001600160a01b038216906340c10f1990620013e4908890889060040162002a46565b600060405180830381600087803b158015620013ff57600080fd5b505af115801562001414573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200145595949392919062002d5f565b60405180910390a150505050505050505050565b6000806200147a6101008462002cd3565b905060006200148c6101008562002e0b565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014c692919062002c67565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014f99062002399565b601f1982820381018352601f90910116604081905262001526908d908d908d908d908d9060200162002e4b565b60408051601f198184030181529082905262001546929160200162002e8c565b604051602081830303815290604052805190602001206040516020016200159f94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015eb5760405162461bcd60e51b81526004016200055390620029de565b60225463ffffffff610100909104811690841603620016735760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044657374696e6174696f6e2063616e6e6f7420626520697473656c6600606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016c798979695949392919062002b9d565b60405180910390a1620016fe620009506001602260019054906101000a900463ffffffff1633878734888051906020012062000c4f565b6026546001600160a01b03166333d6247d6200171962000a5b565b6040518263ffffffff1660e01b81526004016200173891815260200190565b600060405180830381600087803b1580156200175357600080fd5b505af115801562001768573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b031633146200179e5760405162461bcd60e51b8152600401620005539062002c0a565b62000a06620020d7565b6000620017eb83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200218692505050565b9050632afa533160e01b6001600160e01b0319821601620019e05760008080808080806200181d896004818d62002ebf565b8101906200182c919062002eeb565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200186e5760405162461bcd60e51b8152600401620005539062002f46565b6001600160a01b0386163014620018995760405162461bcd60e51b8152600401620005539062002fa3565b8a85146200190c5760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205065726044820152780dad2e840c2dadeeadce840c8decae640dcdee840dac2e8c6d603b1b606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200198c919062002d41565b6000604051808303816000865af19150503d8060008114620019cb576040519150601f19603f3d011682016040523d82523d6000602084013e620019d0565b606091505b5050505050505050505062001bc5565b6001600160e01b031981166323f2ebc360e21b1462001a565760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e6f7460448201526a081d985b1a590818d85b1b60aa1b606482015260840162000553565b60008080808080808062001a6e8a6004818e62002ebf565b81019062001a7d919062003005565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001ac15760405162461bcd60e51b8152600401620005539062002f46565b6001600160a01b038716301462001aec5760405162461bcd60e51b8152600401620005539062002fa3565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001b75919062002d41565b6000604051808303816000865af19150503d806000811462001bb4576040519150601f19603f3d011682016040523d82523d6000602084013e62001bb9565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdb9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526200218d565b80600162001c4a602060026200318e565b62001c5691906200319c565b6021541062001cbb5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d65726b6c65604482015269081d1c995948199d5b1b60b21b606482015260840162000553565b60016021600082825462001cd09190620031b6565b909155505060215460005b602081101562001d7a578160011660010362001d1057826001826020811062001d085762001d0862002c91565b015550505050565b6001816020811062001d265762001d2662002c91565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d63919062002cd3565b91508062001d718162002cea565b91505062001cdb565b5062001d85620031d1565b505050565b60225460ff161562001db05760405162461bcd60e51b81526004016200055390620029de565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001df98a63ffffffff1662001469565b1562001e505760405162461bcd60e51b815260206004820152603060248201526000805160206200477983398151915260448201526f08105b1c9958591e4818db185a5b595960821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ec4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001eea9190620031e7565b90508060000362001f4d5760405162461bcd60e51b81526020600482015260376024820152600080516020620047798339815191526044820152760811db1bd8985b115e1a5d149bdbdd081a5b9d985b1a59604a1b606482015260840162000553565b60225463ffffffff878116610100909204161462001fcf5760405162461bcd60e51b815260206004820152604360248201526000805160206200477983398151915260448201527f2044657374696e6174696f6e206e6574776f726b20646f6573206e6f74206d616064820152620e8c6d60eb1b608482015260a40162000553565b602254600090610100900463ffffffff1662001fed57508862001ff0565b50895b6200201b6200200c848b8b8b8b8b8b8051906020012062000c4f565b8e8e63ffffffff168462000b4e565b620009c05760405162461bcd60e51b81526020600482015260326024820152600080516020620047798339815191526044820152711024b73b30b634b21039b6ba10383937b7b360711b606482015260840162000553565b6000620020836101008362002cd3565b90506000620020956101008462002e0b565b6000928352602360205260409092208054600190931b9092179091555050565b62001d858363a9059cbb60e01b848460405160240162001c0192919062002a46565b60225460ff16620021515760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b6000620021e4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022669092919063ffffffff16565b80519091501562001d85578080602001905181019062002205919062003201565b62001d855760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c47848460008585600080866001600160a01b0316858760405162002290919062002d41565b60006040518083038185875af1925050503d8060008114620022cf576040519150601f19603f3d011682016040523d82523d6000602084013e620022d4565b606091505b5091509150620022e787838387620022f2565b979650505050505050565b60608315620023665782516000036200235e576001600160a01b0385163b6200235e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c47565b62000c4783838151156200237d5781518083602001fd5b8060405162461bcd60e51b815260040162000553919062003221565b611542806200323783390190565b6001600160a01b0381168114620023bd57600080fd5b50565b8035620023cd81620023a7565b919050565b803563ffffffff81168114620023cd57600080fd5b60008083601f840112620023fa57600080fd5b5081356001600160401b038111156200241257600080fd5b6020830191508360208285010111156200242b57600080fd5b9250929050565b60008060008060008060a087890312156200244c57600080fd5b86356200245981620023a7565b95506200246960208801620023d2565b945060408701356200247b81620023a7565b93506060870135925060808701356001600160401b038111156200249e57600080fd5b620024ac89828a01620023e7565b979a9699509497509295939492505050565b60008060408385031215620024d257600080fd5b620024dd83620023d2565b91506020830135620024ef81620023a7565b809150509250929050565b6000602082840312156200250d57600080fd5b81356200251a81620023a7565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171562002562576200256262002521565b604052919050565b600082601f8301126200257c57600080fd5b813560206001600160401b038211156200259a576200259a62002521565b8160051b620025ab82820162002537565b9283528481018201928281019087851115620025c657600080fd5b83870192505b84831015620022e757823582529183019190830190620025cc565b60008060008060808587031215620025fe57600080fd5b8435935060208501356001600160401b03808211156200261d57600080fd5b6200262b888389016200256a565b94506040870135915080821682146200264357600080fd5b509396929550929360600135925050565b60ff81168114620023bd57600080fd5b600080600080600080600060e0888a0312156200268057600080fd5b87356200268d8162002654565b96506200269d60208901620023d2565b95506040880135620026af81620023a7565b9450620026bf60608901620023d2565b93506080880135620026d181620023a7565b9699959850939692959460a0840135945060c09093013592915050565b60006001600160401b038211156200270a576200270a62002521565b50601f01601f191660200190565b600082601f8301126200272a57600080fd5b8135620027416200273b82620026ee565b62002537565b8181528460208386010111156200275757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200279557600080fd5b8a356001600160401b0380821115620027ad57600080fd5b620027bb8e838f016200256a565b9b50620027cb60208e01620023d2565b9a5060408d0135995060608d01359850620027e960808e01620023d2565b9750620027f960a08e01620023c0565b96506200280960c08e01620023d2565b95506200281960e08e01620023c0565b94506101008d013593506101208d01359150808211156200283957600080fd5b50620028488d828e0162002718565b9150509295989b9194979a5092959850565b6000806000606084860312156200287057600080fd5b6200287b84620023d2565b925060208401356200288d81620023a7565b915060408401356200289f81620023a7565b809150509250925092565b600060208284031215620028bd57600080fd5b5035919050565b600080600080600080600060a0888a031215620028e057600080fd5b620028eb88620023d2565b96506020880135620028fd81620023a7565b955060408801356001600160401b03808211156200291a57600080fd5b620029288b838c01620023e7565b909750955060608a01359150808211156200294257600080fd5b50620029518a828b01620023e7565b9094509250506080880135620029678162002654565b8091505092959891949750929550565b6000806000606084860312156200298d57600080fd5b6200299884620023d2565b92506020840135620029aa81620023a7565b915060408401356001600160401b03811115620029c657600080fd5b620029d48682870162002718565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b6001600160a01b03929092168252602082015260400190565b60005b8381101562002a7c57818101518382015260200162002a62565b8381111562000fdb5750506000910152565b600082601f83011262002aa057600080fd5b815162002ab16200273b82620026ee565b81815284602083860101111562002ac757600080fd5b62000c4782602083016020870162002a5f565b60006020828403121562002aed57600080fd5b81516001600160401b0381111562002b0457600080fd5b62000c478482850162002a8e565b60006020828403121562002b2557600080fd5b81516200251a8162002654565b6000815180845262002b4c81602086016020860162002a5f565b601f01601f19169290920160200192915050565b60608152600062002b75606083018662002b32565b828103602084015262002b89818662002b32565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002bf18483018762002b32565b925080851660e085015250509998505050505050505050565b6020808252603a908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e5a6b45564d20636f6e7472616374000000000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002ce55762002ce562002ca7565b500490565b60006001820162002cff5762002cff62002cbd565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d389083018462002b32565b95945050505050565b6000825162002d5581846020870162002a5f565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002dac57600080fd5b83516001600160401b038082111562002dc457600080fd5b62002dd28783880162002a8e565b9450602086015191508082111562002de957600080fd5b5062002df88682870162002a8e565b92505060408401516200289f8162002654565b60008262002e1d5762002e1d62002ca7565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e6160608301878962002e22565b828103602084015262002e7681868862002e22565b91505060ff831660408301529695505050505050565b6000835162002ea081846020880162002a5f565b83519083019062002eb681836020880162002a5f565b01949350505050565b6000808585111562002ed057600080fd5b8386111562002ede57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f0757600080fd5b873562002f1481620023a7565b9650602088013562002f2681620023a7565b955060408801359450606088013593506080880135620026d18162002654565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260408201527f6d6974206f776e6572206d757374206265207468652073656e64657200000000606082015260800190565b60208082526033908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205370656040820152726e646572206d7573742062652027746869732760681b606082015260800190565b8015158114620023bd57600080fd5b600080600080600080600080610100898b0312156200302357600080fd5b88356200303081620023a7565b975060208901356200304281620023a7565b965060408901359550606089013594506080890135620030628162002ff6565b935060a0890135620030748162002654565b979a969950949793969295929450505060c08201359160e0013590565b600181815b80851115620030d2578160001904821115620030b657620030b662002cbd565b80851615620030c457918102915b93841c939080029062003096565b509250929050565b600082620030eb5750600162000a55565b81620030fa5750600062000a55565b81600181146200311357600281146200311e576200313e565b600191505062000a55565b60ff84111562003132576200313262002cbd565b50506001821b62000a55565b5060208310610133831016604e8410600b841016171562003163575081810a62000a55565b6200316f838362003091565b806000190482111562003186576200318662002cbd565b029392505050565b60006200251a8383620030da565b600082821015620031b157620031b162002cbd565b500390565b60008219821115620031cc57620031cc62002cbd565b500190565b634e487b7160e01b600052600160045260246000fd5b600060208284031215620031fa57600080fd5b5051919050565b6000602082840312156200321457600080fd5b81516200251a8162002ff6565b6020815260006200251a602083018462002b3256fe60c06040523480156200001157600080fd5b5060405162001542380380620015428339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611088620004ba60003960006104690152600081816102f9015261043301526110886000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610dc2565b60405180910390f35b61016d610168366004610e33565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e5d565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e33565b61048b565b61023d610238366004610e33565b6104ad565b005b61018161024d366004610e99565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610e99565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e33565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e33565b610531565b61016d6102ef366004610e33565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ebb565b6105ba565b61018161033c366004610f2e565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f61565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f61565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b51565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fb1565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fc9565b60405180910390fd5b6104ea8282610bfd565b5050565b60606004805461037090610f61565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fc9565b6104ea8282610caa565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611019565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b0384811660008181526020818152604080832087870390559387168083529184902080548701905592518581529092600080516020611033833981519152910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b7c610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c535760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c659190610fb1565b90915550506001600160a01b03821660008181526020818152604080832080548601905551848152600080516020611033833981519152910160405180910390a35050565b6001600160a01b038216610d0a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610d7e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192916000805160206110338339815191529101610938565b600060208083528351808285015260005b81811015610def57858101830151858201604001528201610dd3565b81811115610e01576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e2e57600080fd5b919050565b60008060408385031215610e4657600080fd5b610e4f83610e17565b946020939093013593505050565b600080600060608486031215610e7257600080fd5b610e7b84610e17565b9250610e8960208501610e17565b9150604084013590509250925092565b600060208284031215610eab57600080fd5b610eb482610e17565b9392505050565b600080600080600080600060e0888a031215610ed657600080fd5b610edf88610e17565b9650610eed60208901610e17565b95506040880135945060608801359350608088013560ff81168114610f1157600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f4157600080fd5b610f4a83610e17565b9150610f5860208401610e17565b90509250929050565b600181811c90821680610f7557607f821691505b602082108103610f9557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610fc457610fc4610f9b565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161102b5761102b610f9b565b506001019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212208b7986f78e961ad6c0885b86b24ce427045be98073c1f3d7fe18180542ab873564736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa2646970667358221220aedd107f83550cf398987fb5d0ec8eb115ccee52962ef2bb52eb7ef1520f6c7264736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b506147ce806100206000396000f3fe608060405260043610620001675760003560e01c80637b6323c111620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b80637b6323c1146200037057806381b1c17414620003955780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b806334ac9cf2116200011e57806334ac9cf214620002a25780633ae0504714620002c45780633da8168214620002dc5780633e1970431462000301578063463855491462000326578063647c576c146200034b57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002432565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009cf565b348015620001db57600080fd5b50620001f3620001ed366004620024be565b62000a08565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d62000252366004620024fa565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b50602754620001f3906001600160a01b031681565b348015620002d157600080fd5b506200022462000a5b565b348015620002e957600080fd5b50620001a1620002fb366004620025e7565b62000b4e565b3480156200030e57600080fd5b50620002246200032036600462002664565b62000c4f565b3480156200033357600080fd5b50620001836200034536600462002774565b62000cdc565b3480156200035857600080fd5b50620001836200036a3660046200285a565b62000e82565b3480156200037d57600080fd5b50620001836200038f36600462002774565b62000fe1565b348015620003a257600080fd5b50620001f3620003b4366004620028aa565b6024602052600090815260409020546001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028aa565b62001469565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d366004620028c4565b620014ae565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b036600462002977565b620015c5565b348015620004c357600080fd5b506200018362001771565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028aa565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b81526004016200055390620029de565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044657374696e6174696f6e2063616e6e6f7420626520697473656c66000000606482015260840162000553565b60008060606001600160a01b03891662000687578534146200067d5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a908201527f20416d6f756e7420646f6573206e6f74206d61746368206d6573736167652e76606482015263616c756560e01b608482015260a40162000553565b60009150620008e9565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074657604051632770a7eb60e21b81526001600160a01b038b1690639dc29fac90620006fe9033908b9060040162002a46565b600060405180830381600087803b1580156200071957600080fd5b505af11580156200072e573d6000803e3d6000fd5b505050508060200151935080600001519250620008e7565b84156200075b576200075b8a888888620017a8565b620007726001600160a01b038b1633308a62001bcc565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007c9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f3919081019062002ada565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000832573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085c919081019062002ada565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c1919062002b12565b604051602001620008d59392919062002b60565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092b98979695949392919062002b9d565b60405180910390a16200095662000950600084868c8c8c888051906020012062000c4f565b62001c39565b6026546001600160a01b03166333d6247d6200097162000a5b565b6040518263ffffffff1660e01b81526004016200099091815260200190565b600060405180830381600087803b158015620009ab57600080fd5b505af1158015620009c0573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009fc5760405162461bcd60e51b8152600401620005539062002c0a565b62000a0662001d8a565b565b600060246000848460405160200162000a2392919062002c67565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b45578260011660010362000ac6576001816020811062000a925762000a9262002c91565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af3565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0060028462002cd3565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3c9062002cea565b91505062000a66565b50919392505050565b6000846001600160401b038416825b602081101562000c40578160011660010362000bca5786818151811062000b885762000b8862002c91565b60200260200101518360405160200162000bac929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c1c565b8287828151811062000be05762000be062002c91565b602002602001015160405160200162000c03929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2960028362002cd3565b91508062000c378162002cea565b91505062000b5d565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d025760405162461bcd60e51b81526004016200055390620029de565b62000d188a8a8a8a8a8a8a8a8a8a600162001de8565b62000d298963ffffffff1662002073565b6000836001600160a01b03168387898560405160240162000d4d9392919062002d06565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d84919062002d41565b60006040518083038185875af1925050503d806000811462000dc3576040519150601f19603f3d011682016040523d82523d6000602084013e62000dc8565b606091505b505090508062000e345760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e8813595cdcd859d94819985a5b195960821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e6d95949392919062002d5f565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea35750600054600160ff909116105b8062000ebf5750303b15801562000ebf575060005460ff166001145b62000f245760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f48576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff1615620010075760405162461bcd60e51b81526004016200055390620029de565b6200101d8a8a8a8a8a8a8a8a8a8a600062001de8565b6200102e8963ffffffff1662002073565b6001600160a01b0385166200112557604080516000808252602082019092526001600160a01b03851690849060405162001069919062002d41565b60006040518083038185875af1925050503d8060008114620010a8576040519150601f19603f3d011682016040523d82523d6000602084013e620010ad565b606091505b50509050806200111e5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a20604482015274115d1a195c881d1c985b9cd9995c8819985a5b1959605a1b606482015260840162000553565b506200141c565b60225463ffffffff6101009091048116908716036200115a57620011546001600160a01b0386168484620020b5565b6200141c565b600086866040516020016200117192919062002c67565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013b457600080600085806020019051810190620011c3919062002d96565b925092509250600085848484604051620011dd9062002399565b620011eb9392919062002b60565b8190604051809103906000f59050801580156200120c573d6000803e3d6000fd5b506040516340c10f1960e01b81529091506001600160a01b038216906340c10f199062001240908c908c9060040162002a46565b600060405180830381600087803b1580156200125b57600080fd5b505af115801562001270573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013a29392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001419565b6040516340c10f1960e01b81526001600160a01b038216906340c10f1990620013e4908890889060040162002a46565b600060405180830381600087803b158015620013ff57600080fd5b505af115801562001414573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200145595949392919062002d5f565b60405180910390a150505050505050505050565b6000806200147a6101008462002cd3565b905060006200148c6101008562002e0b565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014c692919062002c67565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014f99062002399565b601f1982820381018352601f90910116604081905262001526908d908d908d908d908d9060200162002e4b565b60408051601f198184030181529082905262001546929160200162002e8c565b604051602081830303815290604052805190602001206040516020016200159f94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015eb5760405162461bcd60e51b81526004016200055390620029de565b60225463ffffffff610100909104811690841603620016735760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044657374696e6174696f6e2063616e6e6f7420626520697473656c6600606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016c798979695949392919062002b9d565b60405180910390a1620016fe620009506001602260019054906101000a900463ffffffff1633878734888051906020012062000c4f565b6026546001600160a01b03166333d6247d6200171962000a5b565b6040518263ffffffff1660e01b81526004016200173891815260200190565b600060405180830381600087803b1580156200175357600080fd5b505af115801562001768573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b031633146200179e5760405162461bcd60e51b8152600401620005539062002c0a565b62000a06620020d7565b6000620017eb83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200218692505050565b9050632afa533160e01b6001600160e01b0319821601620019e05760008080808080806200181d896004818d62002ebf565b8101906200182c919062002eeb565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200186e5760405162461bcd60e51b8152600401620005539062002f46565b6001600160a01b0386163014620018995760405162461bcd60e51b8152600401620005539062002fa3565b8a85146200190c5760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205065726044820152780dad2e840c2dadeeadce840c8decae640dcdee840dac2e8c6d603b1b606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200198c919062002d41565b6000604051808303816000865af19150503d8060008114620019cb576040519150601f19603f3d011682016040523d82523d6000602084013e620019d0565b606091505b5050505050505050505062001bc5565b6001600160e01b031981166323f2ebc360e21b1462001a565760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e6f7460448201526a081d985b1a590818d85b1b60aa1b606482015260840162000553565b60008080808080808062001a6e8a6004818e62002ebf565b81019062001a7d919062003005565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001ac15760405162461bcd60e51b8152600401620005539062002f46565b6001600160a01b038716301462001aec5760405162461bcd60e51b8152600401620005539062002fa3565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001b75919062002d41565b6000604051808303816000865af19150503d806000811462001bb4576040519150601f19603f3d011682016040523d82523d6000602084013e62001bb9565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdb9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526200218d565b80600162001c4a602060026200318e565b62001c5691906200319c565b6021541062001cbb5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d65726b6c65604482015269081d1c995948199d5b1b60b21b606482015260840162000553565b60016021600082825462001cd09190620031b6565b909155505060215460005b602081101562001d7a578160011660010362001d1057826001826020811062001d085762001d0862002c91565b015550505050565b6001816020811062001d265762001d2662002c91565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d63919062002cd3565b91508062001d718162002cea565b91505062001cdb565b5062001d85620031d1565b505050565b60225460ff161562001db05760405162461bcd60e51b81526004016200055390620029de565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001df98a63ffffffff1662001469565b1562001e505760405162461bcd60e51b815260206004820152603060248201526000805160206200477983398151915260448201526f08105b1c9958591e4818db185a5b595960821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ec4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001eea9190620031e7565b90508060000362001f4d5760405162461bcd60e51b81526020600482015260376024820152600080516020620047798339815191526044820152760811db1bd8985b115e1a5d149bdbdd081a5b9d985b1a59604a1b606482015260840162000553565b60225463ffffffff878116610100909204161462001fcf5760405162461bcd60e51b815260206004820152604360248201526000805160206200477983398151915260448201527f2044657374696e6174696f6e206e6574776f726b20646f6573206e6f74206d616064820152620e8c6d60eb1b608482015260a40162000553565b602254600090610100900463ffffffff1662001fed57508862001ff0565b50895b6200201b6200200c848b8b8b8b8b8b8051906020012062000c4f565b8e8e63ffffffff168462000b4e565b620009c05760405162461bcd60e51b81526020600482015260326024820152600080516020620047798339815191526044820152711024b73b30b634b21039b6ba10383937b7b360711b606482015260840162000553565b6000620020836101008362002cd3565b90506000620020956101008462002e0b565b6000928352602360205260409092208054600190931b9092179091555050565b62001d858363a9059cbb60e01b848460405160240162001c0192919062002a46565b60225460ff16620021515760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b6000620021e4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022669092919063ffffffff16565b80519091501562001d85578080602001905181019062002205919062003201565b62001d855760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c47848460008585600080866001600160a01b0316858760405162002290919062002d41565b60006040518083038185875af1925050503d8060008114620022cf576040519150601f19603f3d011682016040523d82523d6000602084013e620022d4565b606091505b5091509150620022e787838387620022f2565b979650505050505050565b60608315620023665782516000036200235e576001600160a01b0385163b6200235e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c47565b62000c4783838151156200237d5781518083602001fd5b8060405162461bcd60e51b815260040162000553919062003221565b611542806200323783390190565b6001600160a01b0381168114620023bd57600080fd5b50565b8035620023cd81620023a7565b919050565b803563ffffffff81168114620023cd57600080fd5b60008083601f840112620023fa57600080fd5b5081356001600160401b038111156200241257600080fd5b6020830191508360208285010111156200242b57600080fd5b9250929050565b60008060008060008060a087890312156200244c57600080fd5b86356200245981620023a7565b95506200246960208801620023d2565b945060408701356200247b81620023a7565b93506060870135925060808701356001600160401b038111156200249e57600080fd5b620024ac89828a01620023e7565b979a9699509497509295939492505050565b60008060408385031215620024d257600080fd5b620024dd83620023d2565b91506020830135620024ef81620023a7565b809150509250929050565b6000602082840312156200250d57600080fd5b81356200251a81620023a7565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171562002562576200256262002521565b604052919050565b600082601f8301126200257c57600080fd5b813560206001600160401b038211156200259a576200259a62002521565b8160051b620025ab82820162002537565b9283528481018201928281019087851115620025c657600080fd5b83870192505b84831015620022e757823582529183019190830190620025cc565b60008060008060808587031215620025fe57600080fd5b8435935060208501356001600160401b03808211156200261d57600080fd5b6200262b888389016200256a565b94506040870135915080821682146200264357600080fd5b509396929550929360600135925050565b60ff81168114620023bd57600080fd5b600080600080600080600060e0888a0312156200268057600080fd5b87356200268d8162002654565b96506200269d60208901620023d2565b95506040880135620026af81620023a7565b9450620026bf60608901620023d2565b93506080880135620026d181620023a7565b9699959850939692959460a0840135945060c09093013592915050565b60006001600160401b038211156200270a576200270a62002521565b50601f01601f191660200190565b600082601f8301126200272a57600080fd5b8135620027416200273b82620026ee565b62002537565b8181528460208386010111156200275757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200279557600080fd5b8a356001600160401b0380821115620027ad57600080fd5b620027bb8e838f016200256a565b9b50620027cb60208e01620023d2565b9a5060408d0135995060608d01359850620027e960808e01620023d2565b9750620027f960a08e01620023c0565b96506200280960c08e01620023d2565b95506200281960e08e01620023c0565b94506101008d013593506101208d01359150808211156200283957600080fd5b50620028488d828e0162002718565b9150509295989b9194979a5092959850565b6000806000606084860312156200287057600080fd5b6200287b84620023d2565b925060208401356200288d81620023a7565b915060408401356200289f81620023a7565b809150509250925092565b600060208284031215620028bd57600080fd5b5035919050565b600080600080600080600060a0888a031215620028e057600080fd5b620028eb88620023d2565b96506020880135620028fd81620023a7565b955060408801356001600160401b03808211156200291a57600080fd5b620029288b838c01620023e7565b909750955060608a01359150808211156200294257600080fd5b50620029518a828b01620023e7565b9094509250506080880135620029678162002654565b8091505092959891949750929550565b6000806000606084860312156200298d57600080fd5b6200299884620023d2565b92506020840135620029aa81620023a7565b915060408401356001600160401b03811115620029c657600080fd5b620029d48682870162002718565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b6001600160a01b03929092168252602082015260400190565b60005b8381101562002a7c57818101518382015260200162002a62565b8381111562000fdb5750506000910152565b600082601f83011262002aa057600080fd5b815162002ab16200273b82620026ee565b81815284602083860101111562002ac757600080fd5b62000c4782602083016020870162002a5f565b60006020828403121562002aed57600080fd5b81516001600160401b0381111562002b0457600080fd5b62000c478482850162002a8e565b60006020828403121562002b2557600080fd5b81516200251a8162002654565b6000815180845262002b4c81602086016020860162002a5f565b601f01601f19169290920160200192915050565b60608152600062002b75606083018662002b32565b828103602084015262002b89818662002b32565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002bf18483018762002b32565b925080851660e085015250509998505050505050505050565b6020808252603a908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e5a6b45564d20636f6e7472616374000000000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002ce55762002ce562002ca7565b500490565b60006001820162002cff5762002cff62002cbd565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d389083018462002b32565b95945050505050565b6000825162002d5581846020870162002a5f565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002dac57600080fd5b83516001600160401b038082111562002dc457600080fd5b62002dd28783880162002a8e565b9450602086015191508082111562002de957600080fd5b5062002df88682870162002a8e565b92505060408401516200289f8162002654565b60008262002e1d5762002e1d62002ca7565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e6160608301878962002e22565b828103602084015262002e7681868862002e22565b91505060ff831660408301529695505050505050565b6000835162002ea081846020880162002a5f565b83519083019062002eb681836020880162002a5f565b01949350505050565b6000808585111562002ed057600080fd5b8386111562002ede57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f0757600080fd5b873562002f1481620023a7565b9650602088013562002f2681620023a7565b955060408801359450606088013593506080880135620026d18162002654565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260408201527f6d6974206f776e6572206d757374206265207468652073656e64657200000000606082015260800190565b60208082526033908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205370656040820152726e646572206d7573742062652027746869732760681b606082015260800190565b8015158114620023bd57600080fd5b600080600080600080600080610100898b0312156200302357600080fd5b88356200303081620023a7565b975060208901356200304281620023a7565b965060408901359550606089013594506080890135620030628162002ff6565b935060a0890135620030748162002654565b979a969950949793969295929450505060c08201359160e0013590565b600181815b80851115620030d2578160001904821115620030b657620030b662002cbd565b80851615620030c457918102915b93841c939080029062003096565b509250929050565b600082620030eb5750600162000a55565b81620030fa5750600062000a55565b81600181146200311357600281146200311e576200313e565b600191505062000a55565b60ff84111562003132576200313262002cbd565b50506001821b62000a55565b5060208310610133831016604e8410600b841016171562003163575081810a62000a55565b6200316f838362003091565b806000190482111562003186576200318662002cbd565b029392505050565b60006200251a8383620030da565b600082821015620031b157620031b162002cbd565b500390565b60008219821115620031cc57620031cc62002cbd565b500190565b634e487b7160e01b600052600160045260246000fd5b600060208284031215620031fa57600080fd5b5051919050565b6000602082840312156200321457600080fd5b81516200251a8162002ff6565b6020815260006200251a602083018462002b3256fe60c06040523480156200001157600080fd5b5060405162001542380380620015428339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611088620004ba60003960006104690152600081816102f9015261043301526110886000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610dc2565b60405180910390f35b61016d610168366004610e33565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e5d565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e33565b61048b565b61023d610238366004610e33565b6104ad565b005b61018161024d366004610e99565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610e99565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e33565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e33565b610531565b61016d6102ef366004610e33565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ebb565b6105ba565b61018161033c366004610f2e565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f61565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f61565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b51565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fb1565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fc9565b60405180910390fd5b6104ea8282610bfd565b5050565b60606004805461037090610f61565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fc9565b6104ea8282610caa565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611019565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b0384811660008181526020818152604080832087870390559387168083529184902080548701905592518581529092600080516020611033833981519152910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b7c610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c535760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c659190610fb1565b90915550506001600160a01b03821660008181526020818152604080832080548601905551848152600080516020611033833981519152910160405180910390a35050565b6001600160a01b038216610d0a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610d7e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192916000805160206110338339815191529101610938565b600060208083528351808285015260005b81811015610def57858101830151858201604001528201610dd3565b81811115610e01576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e2e57600080fd5b919050565b60008060408385031215610e4657600080fd5b610e4f83610e17565b946020939093013593505050565b600080600060608486031215610e7257600080fd5b610e7b84610e17565b9250610e8960208501610e17565b9150604084013590509250925092565b600060208284031215610eab57600080fd5b610eb482610e17565b9392505050565b600080600080600080600060e0888a031215610ed657600080fd5b610edf88610e17565b9650610eed60208901610e17565b95506040880135945060608801359350608088013560ff81168114610f1157600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f4157600080fd5b610f4a83610e17565b9150610f5860208401610e17565b90509250929050565b600181811c90821680610f7557607f821691505b602082108103610f9557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610fc457610fc4610f9b565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161102b5761102b610f9b565b506001019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212208b7986f78e961ad6c0885b86b24ce427045be98073c1f3d7fe18180542ab873564736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212207321963add10aa42fbf70097691018c23164a96132c6cd71e46023fffa7d461764736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001675760003560e01c80637b6323c111620000c5578063d02103ca1162000078578063d02103ca146200047d578063d96a15f7146200049f578063dbc1697614620004b6578063ed6be5c914620004ce578063ee25560b14620004e5578063ff634ed7146200051657600080fd5b80637b6323c1146200037057806381b1c17414620003955780639e34070f14620003cf578063a08e8a0814620003f4578063aaa13cc2146200041e578063bab161bf146200044357600080fd5b806334ac9cf2116200011e57806334ac9cf214620002a25780633ae0504714620002c45780633da8168214620002dc5780633e1970431462000301578063463855491462000326578063647c576c146200034b57600080fd5b80630871e971146200016c57806315064c9614620001855780632072f6c514620001b657806322e95f2c14620001ce5780632dfdf0b5146200020c578063318aee3d1462000233575b600080fd5b620001836200017d36600462002432565b6200052d565b005b3480156200019257600080fd5b50602254620001a19060ff1681565b60405190151581526020015b60405180910390f35b348015620001c357600080fd5b5062000183620009cf565b348015620001db57600080fd5b50620001f3620001ed366004620024be565b62000a08565b6040516001600160a01b039091168152602001620001ad565b3480156200021957600080fd5b506200022460215481565b604051908152602001620001ad565b3480156200024057600080fd5b506200027d62000252366004620024fa565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001ad565b348015620002af57600080fd5b50602754620001f3906001600160a01b031681565b348015620002d157600080fd5b506200022462000a5b565b348015620002e957600080fd5b50620001a1620002fb366004620025e7565b62000b4e565b3480156200030e57600080fd5b50620002246200032036600462002664565b62000c4f565b3480156200033357600080fd5b50620001836200034536600462002774565b62000cdc565b3480156200035857600080fd5b50620001836200036a3660046200285a565b62000e82565b3480156200037d57600080fd5b50620001836200038f36600462002774565b62000fe1565b348015620003a257600080fd5b50620001f3620003b4366004620028aa565b6024602052600090815260409020546001600160a01b031681565b348015620003dc57600080fd5b50620001a1620003ee366004620028aa565b62001469565b3480156200040157600080fd5b506200040b600081565b60405160ff9091168152602001620001ad565b3480156200042b57600080fd5b50620001f36200043d366004620028c4565b620014ae565b3480156200045057600080fd5b506022546200046790610100900463ffffffff1681565b60405163ffffffff9091168152602001620001ad565b3480156200048a57600080fd5b50602654620001f3906001600160a01b031681565b62000183620004b036600462002977565b620015c5565b348015620004c357600080fd5b506200018362001771565b348015620004db57600080fd5b5062000467600081565b348015620004f257600080fd5b506200022462000504366004620028aa565b60236020526000908152604090205481565b3480156200052357600080fd5b506200040b600181565b60225460ff16156200055c5760405162461bcd60e51b81526004016200055390620029de565b60405180910390fd5b60225463ffffffff610100909104811690861603620005e45760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a60448201527f2044657374696e6174696f6e2063616e6e6f7420626520697473656c66000000606482015260840162000553565b60008060606001600160a01b03891662000687578534146200067d5760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743a908201527f20416d6f756e7420646f6573206e6f74206d61746368206d6573736167652e76606482015263616c756560e01b608482015260a40162000553565b60009150620008e9565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200074657604051632770a7eb60e21b81526001600160a01b038b1690639dc29fac90620006fe9033908b9060040162002a46565b600060405180830381600087803b1580156200071957600080fd5b505af11580156200072e573d6000803e3d6000fd5b505050508060200151935080600001519250620008e7565b84156200075b576200075b8a888888620017a8565b620007726001600160a01b038b1633308a62001bcc565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620007c9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620007f3919081019062002ada565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000832573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200085c919081019062002ada565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200089b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c1919062002b12565b604051602001620008d59392919062002b60565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200092b98979695949392919062002b9d565b60405180910390a16200095662000950600084868c8c8c888051906020012062000c4f565b62001c39565b6026546001600160a01b03166333d6247d6200097162000a5b565b6040518263ffffffff1660e01b81526004016200099091815260200190565b600060405180830381600087803b158015620009ab57600080fd5b505af1158015620009c0573d6000803e3d6000fd5b50505050505050505050505050565b6027546001600160a01b03163314620009fc5760405162461bcd60e51b8152600401620005539062002c0a565b62000a0662001d8a565b565b600060246000848460405160200162000a2392919062002c67565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b602154600090819081805b602081101562000b45578260011660010362000ac6576001816020811062000a925762000a9262002c91565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000af3565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b62000b0060028462002cd3565b6040805160208101859052908101849052909350606001604051602081830303815290604052805190602001209150808062000b3c9062002cea565b91505062000a66565b50919392505050565b6000846001600160401b038416825b602081101562000c40578160011660010362000bca5786818151811062000b885762000b8862002c91565b60200260200101518360405160200162000bac929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000c1c565b8287828151811062000be05762000be062002c91565b602002602001015160405160200162000c03929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b62000c2960028362002cd3565b91508062000c378162002cea565b91505062000b5d565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000d025760405162461bcd60e51b81526004016200055390620029de565b62000d188a8a8a8a8a8a8a8a8a8a600162001de8565b62000d298963ffffffff1662002073565b6000836001600160a01b03168387898560405160240162000d4d9392919062002d06565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000d84919062002d41565b60006040518083038185875af1925050503d806000811462000dc3576040519150601f19603f3d011682016040523d82523d6000602084013e62000dc8565b606091505b505090508062000e345760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e8813595cdcd859d94819985a5b195960821b606482015260840162000553565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000e6d95949392919062002d5f565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000ea35750600054600160ff909116105b8062000ebf5750303b15801562000ebf575060005460ff166001145b62000f245760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000553565b6000805460ff19166001179055801562000f48576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b0319928316179092556027805492851692909116919091179055801562000fdb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60225460ff1615620010075760405162461bcd60e51b81526004016200055390620029de565b6200101d8a8a8a8a8a8a8a8a8a8a600062001de8565b6200102e8963ffffffff1662002073565b6001600160a01b0385166200112557604080516000808252602082019092526001600160a01b03851690849060405162001069919062002d41565b60006040518083038185875af1925050503d8060008114620010a8576040519150601f19603f3d011682016040523d82523d6000602084013e620010ad565b606091505b50509050806200111e5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a20604482015274115d1a195c881d1c985b9cd9995c8819985a5b1959605a1b606482015260840162000553565b506200141c565b60225463ffffffff6101009091048116908716036200115a57620011546001600160a01b0386168484620020b5565b6200141c565b600086866040516020016200117192919062002c67565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620013b457600080600085806020019051810190620011c3919062002d96565b925092509250600085848484604051620011dd9062002399565b620011eb9392919062002b60565b8190604051809103906000f59050801580156200120c573d6000803e3d6000fd5b506040516340c10f1960e01b81529091506001600160a01b038216906340c10f199062001240908c908c9060040162002a46565b600060405180830381600087803b1580156200125b57600080fd5b505af115801562001270573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620013a29392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a15050505062001419565b6040516340c10f1960e01b81526001600160a01b038216906340c10f1990620013e4908890889060040162002a46565b600060405180830381600087803b158015620013ff57600080fd5b505af115801562001414573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe2754598389878786866040516200145595949392919062002d5f565b60405180910390a150505050505050505050565b6000806200147a6101008462002cd3565b905060006200148c6101008562002e0b565b60009283526023602052604090922054600190921b9182169091149392505050565b6000808888604051602001620014c692919062002c67565b604051602081830303815290604052805190602001209050600060ff60f81b308360405180602001620014f99062002399565b601f1982820381018352601f90910116604081905262001526908d908d908d908d908d9060200162002e4b565b60408051601f198184030181529082905262001546929160200162002e8c565b604051602081830303815290604052805190602001206040516020016200159f94939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff1615620015eb5760405162461bcd60e51b81526004016200055390620029de565b60225463ffffffff610100909104811690841603620016735760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044657374696e6174696f6e2063616e6e6f7420626520697473656c6600606482015260840162000553565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff163386863487602154604051620016c798979695949392919062002b9d565b60405180910390a1620016fe620009506001602260019054906101000a900463ffffffff1633878734888051906020012062000c4f565b6026546001600160a01b03166333d6247d6200171962000a5b565b6040518263ffffffff1660e01b81526004016200173891815260200190565b600060405180830381600087803b1580156200175357600080fd5b505af115801562001768573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b031633146200179e5760405162461bcd60e51b8152600401620005539062002c0a565b62000a06620020d7565b6000620017eb83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200218692505050565b9050632afa533160e01b6001600160e01b0319821601620019e05760008080808080806200181d896004818d62002ebf565b8101906200182c919062002eeb565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200186e5760405162461bcd60e51b8152600401620005539062002f46565b6001600160a01b0386163014620018995760405162461bcd60e51b8152600401620005539062002fa3565b8a85146200190c5760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205065726044820152780dad2e840c2dadeeadce840c8decae640dcdee840dac2e8c6d603b1b606482015260840162000553565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e16916200198c919062002d41565b6000604051808303816000865af19150503d8060008114620019cb576040519150601f19603f3d011682016040523d82523d6000602084013e620019d0565b606091505b5050505050505050505062001bc5565b6001600160e01b031981166323f2ebc360e21b1462001a565760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e6f7460448201526a081d985b1a590818d85b1b60aa1b606482015260840162000553565b60008080808080808062001a6e8a6004818e62002ebf565b81019062001a7d919062003005565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001ac15760405162461bcd60e51b8152600401620005539062002f46565b6001600160a01b038716301462001aec5760405162461bcd60e51b8152600401620005539062002fa3565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001b75919062002d41565b6000604051808303816000865af19150503d806000811462001bb4576040519150601f19603f3d011682016040523d82523d6000602084013e62001bb9565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000fdb9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526200218d565b80600162001c4a602060026200318e565b62001c5691906200319c565b6021541062001cbb5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d65726b6c65604482015269081d1c995948199d5b1b60b21b606482015260840162000553565b60016021600082825462001cd09190620031b6565b909155505060215460005b602081101562001d7a578160011660010362001d1057826001826020811062001d085762001d0862002c91565b015550505050565b6001816020811062001d265762001d2662002c91565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001d63919062002cd3565b91508062001d718162002cea565b91505062001cdb565b5062001d85620031d1565b505050565b60225460ff161562001db05760405162461bcd60e51b81526004016200055390620029de565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b62001df98a63ffffffff1662001469565b1562001e505760405162461bcd60e51b815260206004820152603060248201526000805160206200477983398151915260448201526f08105b1c9958591e4818db185a5b595960821b606482015260840162000553565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001ec4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001eea9190620031e7565b90508060000362001f4d5760405162461bcd60e51b81526020600482015260376024820152600080516020620047798339815191526044820152760811db1bd8985b115e1a5d149bdbdd081a5b9d985b1a59604a1b606482015260840162000553565b60225463ffffffff878116610100909204161462001fcf5760405162461bcd60e51b815260206004820152604360248201526000805160206200477983398151915260448201527f2044657374696e6174696f6e206e6574776f726b20646f6573206e6f74206d616064820152620e8c6d60eb1b608482015260a40162000553565b602254600090610100900463ffffffff1662001fed57508862001ff0565b50895b6200201b6200200c848b8b8b8b8b8b8051906020012062000c4f565b8e8e63ffffffff168462000b4e565b620009c05760405162461bcd60e51b81526020600482015260326024820152600080516020620047798339815191526044820152711024b73b30b634b21039b6ba10383937b7b360711b606482015260840162000553565b6000620020836101008362002cd3565b90506000620020956101008462002e0b565b6000928352602360205260409092208054600190931b9092179091555050565b62001d858363a9059cbb60e01b848460405160240162001c0192919062002a46565b60225460ff16620021515760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606482015260840162000553565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6020015190565b6000620021e4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022669092919063ffffffff16565b80519091501562001d85578080602001905181019062002205919062003201565b62001d855760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000553565b606062000c47848460008585600080866001600160a01b0316858760405162002290919062002d41565b60006040518083038185875af1925050503d8060008114620022cf576040519150601f19603f3d011682016040523d82523d6000602084013e620022d4565b606091505b5091509150620022e787838387620022f2565b979650505050505050565b60608315620023665782516000036200235e576001600160a01b0385163b6200235e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000553565b508162000c47565b62000c4783838151156200237d5781518083602001fd5b8060405162461bcd60e51b815260040162000553919062003221565b611542806200323783390190565b6001600160a01b0381168114620023bd57600080fd5b50565b8035620023cd81620023a7565b919050565b803563ffffffff81168114620023cd57600080fd5b60008083601f840112620023fa57600080fd5b5081356001600160401b038111156200241257600080fd5b6020830191508360208285010111156200242b57600080fd5b9250929050565b60008060008060008060a087890312156200244c57600080fd5b86356200245981620023a7565b95506200246960208801620023d2565b945060408701356200247b81620023a7565b93506060870135925060808701356001600160401b038111156200249e57600080fd5b620024ac89828a01620023e7565b979a9699509497509295939492505050565b60008060408385031215620024d257600080fd5b620024dd83620023d2565b91506020830135620024ef81620023a7565b809150509250929050565b6000602082840312156200250d57600080fd5b81356200251a81620023a7565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171562002562576200256262002521565b604052919050565b600082601f8301126200257c57600080fd5b813560206001600160401b038211156200259a576200259a62002521565b8160051b620025ab82820162002537565b9283528481018201928281019087851115620025c657600080fd5b83870192505b84831015620022e757823582529183019190830190620025cc565b60008060008060808587031215620025fe57600080fd5b8435935060208501356001600160401b03808211156200261d57600080fd5b6200262b888389016200256a565b94506040870135915080821682146200264357600080fd5b509396929550929360600135925050565b60ff81168114620023bd57600080fd5b600080600080600080600060e0888a0312156200268057600080fd5b87356200268d8162002654565b96506200269d60208901620023d2565b95506040880135620026af81620023a7565b9450620026bf60608901620023d2565b93506080880135620026d181620023a7565b9699959850939692959460a0840135945060c09093013592915050565b60006001600160401b038211156200270a576200270a62002521565b50601f01601f191660200190565b600082601f8301126200272a57600080fd5b8135620027416200273b82620026ee565b62002537565b8181528460208386010111156200275757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d0312156200279557600080fd5b8a356001600160401b0380821115620027ad57600080fd5b620027bb8e838f016200256a565b9b50620027cb60208e01620023d2565b9a5060408d0135995060608d01359850620027e960808e01620023d2565b9750620027f960a08e01620023c0565b96506200280960c08e01620023d2565b95506200281960e08e01620023c0565b94506101008d013593506101208d01359150808211156200283957600080fd5b50620028488d828e0162002718565b9150509295989b9194979a5092959850565b6000806000606084860312156200287057600080fd5b6200287b84620023d2565b925060208401356200288d81620023a7565b915060408401356200289f81620023a7565b809150509250925092565b600060208284031215620028bd57600080fd5b5035919050565b600080600080600080600060a0888a031215620028e057600080fd5b620028eb88620023d2565b96506020880135620028fd81620023a7565b955060408801356001600160401b03808211156200291a57600080fd5b620029288b838c01620023e7565b909750955060608a01359150808211156200294257600080fd5b50620029518a828b01620023e7565b9094509250506080880135620029678162002654565b8091505092959891949750929550565b6000806000606084860312156200298d57600080fd5b6200299884620023d2565b92506020840135620029aa81620023a7565b915060408401356001600160401b03811115620029c657600080fd5b620029d48682870162002718565b9150509250925092565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b6001600160a01b03929092168252602082015260400190565b60005b8381101562002a7c57818101518382015260200162002a62565b8381111562000fdb5750506000910152565b600082601f83011262002aa057600080fd5b815162002ab16200273b82620026ee565b81815284602083860101111562002ac757600080fd5b62000c4782602083016020870162002a5f565b60006020828403121562002aed57600080fd5b81516001600160401b0381111562002b0457600080fd5b62000c478482850162002a8e565b60006020828403121562002b2557600080fd5b81516200251a8162002654565b6000815180845262002b4c81602086016020860162002a5f565b601f01601f19169290920160200192915050565b60608152600062002b75606083018662002b32565b828103602084015262002b89818662002b32565b91505060ff83166040830152949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002bf18483018762002b32565b925080851660e085015250509998505050505050505050565b6020808252603a908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e5a6b45564d20636f6e7472616374000000000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002ce55762002ce562002ca7565b500490565b60006001820162002cff5762002cff62002cbd565b5060010190565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002d389083018462002b32565b95945050505050565b6000825162002d5581846020870162002a5f565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b60008060006060848603121562002dac57600080fd5b83516001600160401b038082111562002dc457600080fd5b62002dd28783880162002a8e565b9450602086015191508082111562002de957600080fd5b5062002df88682870162002a8e565b92505060408401516200289f8162002654565b60008262002e1d5762002e1d62002ca7565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062002e6160608301878962002e22565b828103602084015262002e7681868862002e22565b91505060ff831660408301529695505050505050565b6000835162002ea081846020880162002a5f565b83519083019062002eb681836020880162002a5f565b01949350505050565b6000808585111562002ed057600080fd5b8386111562002ede57600080fd5b5050820193919092039150565b600080600080600080600060e0888a03121562002f0757600080fd5b873562002f1481620023a7565b9650602088013562002f2681620023a7565b955060408801359450606088013593506080880135620026d18162002654565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260408201527f6d6974206f776e6572206d757374206265207468652073656e64657200000000606082015260800190565b60208082526033908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205370656040820152726e646572206d7573742062652027746869732760681b606082015260800190565b8015158114620023bd57600080fd5b600080600080600080600080610100898b0312156200302357600080fd5b88356200303081620023a7565b975060208901356200304281620023a7565b965060408901359550606089013594506080890135620030628162002ff6565b935060a0890135620030748162002654565b979a969950949793969295929450505060c08201359160e0013590565b600181815b80851115620030d2578160001904821115620030b657620030b662002cbd565b80851615620030c457918102915b93841c939080029062003096565b509250929050565b600082620030eb5750600162000a55565b81620030fa5750600062000a55565b81600181146200311357600281146200311e576200313e565b600191505062000a55565b60ff84111562003132576200313262002cbd565b50506001821b62000a55565b5060208310610133831016604e8410600b841016171562003163575081810a62000a55565b6200316f838362003091565b806000190482111562003186576200318662002cbd565b029392505050565b60006200251a8383620030da565b600082821015620031b157620031b162002cbd565b500390565b60008219821115620031cc57620031cc62002cbd565b500190565b634e487b7160e01b600052600160045260246000fd5b600060208284031215620031fa57600080fd5b5051919050565b6000602082840312156200321457600080fd5b81516200251a8162002ff6565b6020815260006200251a602083018462002b3256fe60c06040523480156200001157600080fd5b5060405162001542380380620015428339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611088620004ba60003960006104690152600081816102f9015261043301526110886000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610dc2565b60405180910390f35b61016d610168366004610e33565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e5d565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e33565b61048b565b61023d610238366004610e33565b6104ad565b005b61018161024d366004610e99565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610e99565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e33565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e33565b610531565b61016d6102ef366004610e33565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ebb565b6105ba565b61018161033c366004610f2e565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f61565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f61565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b51565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fb1565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fc9565b60405180910390fd5b6104ea8282610bfd565b5050565b60606004805461037090610f61565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fc9565b6104ea8282610caa565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611019565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b0384811660008181526020818152604080832087870390559387168083529184902080548701905592518581529092600080516020611033833981519152910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b7c610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c535760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c659190610fb1565b90915550506001600160a01b03821660008181526020818152604080832080548601905551848152600080516020611033833981519152910160405180910390a35050565b6001600160a01b038216610d0a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610d7e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192916000805160206110338339815191529101610938565b600060208083528351808285015260005b81811015610def57858101830151858201604001528201610dd3565b81811115610e01576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e2e57600080fd5b919050565b60008060408385031215610e4657600080fd5b610e4f83610e17565b946020939093013593505050565b600080600060608486031215610e7257600080fd5b610e7b84610e17565b9250610e8960208501610e17565b9150604084013590509250925092565b600060208284031215610eab57600080fd5b610eb482610e17565b9392505050565b600080600080600080600060e0888a031215610ed657600080fd5b610edf88610e17565b9650610eed60208901610e17565b95506040880135945060608801359350608088013560ff81168114610f1157600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f4157600080fd5b610f4a83610e17565b9150610f5860208401610e17565b90509250929050565b600181811c90821680610f7557607f821691505b602082108103610f9557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610fc457610fc4610f9b565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161102b5761102b610f9b565b506001019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212208b7986f78e961ad6c0885b86b24ce427045be98073c1f3d7fe18180542ab873564736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663aa26469706673582212207321963add10aa42fbf70097691018c23164a96132c6cd71e46023fffa7d461764736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZkEVMBridgeMock.json b/compiled-contracts/PolygonZkEVMBridgeMock.json index f82a3f47c..82c35ce7c 100644 --- a/compiled-contracts/PolygonZkEVMBridgeMock.json +++ b/compiled-contracts/PolygonZkEVMBridgeMock.json @@ -790,8 +790,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50614b86806100206000396000f3fe608060405260043610620001af5760003560e01c80637b6323c111620000e9578063bab161bf1162000090578063bab161bf1462000525578063d02103ca146200055f578063d96a15f71462000581578063dbc169761462000598578063ed6be5c914620005b0578063ee25560b14620005c7578063f2fde38b14620005f8578063ff634ed7146200061d57600080fd5b80637b6323c1146200041a57806381b1c174146200043f5780638da5cb5b146200047957806391e57e2d14620004995780639e34070f14620004b1578063a08e8a0814620004d6578063aaa13cc2146200050057600080fd5b8063318aee3d116200015a578063318aee3d14620002c557806334ac9cf214620003345780633ae0504714620003565780633da81682146200036e5780633e19704314620003935780634638554914620003b8578063647c576c14620003dd578063715018a6146200040257600080fd5b80630871e97114620001b457806315064c9614620001cd5780632072f6c514620001fe57806322e95f2c14620002165780632b5e42e714620002545780632c3f58cd14620002795780632dfdf0b5146200029e575b600080fd5b620001cb620001c5366004620027ac565b62000634565b005b348015620001da57600080fd5b50602254620001e99060ff1681565b60405190151581526020015b60405180910390f35b3480156200020b57600080fd5b50620001cb620006c9565b3480156200022357600080fd5b506200023b6200023536600462002838565b62000702565b6040516001600160a01b039091168152602001620001f5565b3480156200026157600080fd5b50620001cb6200027336600462002874565b62000755565b3480156200028657600080fd5b50620001cb620002983660046200288e565b62000764565b348015620002ab57600080fd5b50620002b660215481565b604051908152602001620001f5565b348015620002d257600080fd5b506200030f620002e4366004620028b3565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001f5565b3480156200034157600080fd5b506027546200023b906001600160a01b031681565b3480156200036357600080fd5b50620002b662000790565b3480156200037b57600080fd5b50620001e96200038d36600462002999565b62000883565b348015620003a057600080fd5b50620002b6620003b236600462002a16565b62000984565b348015620003c557600080fd5b50620001cb620003d736600462002b26565b62000a11565b348015620003ea57600080fd5b50620001cb620003fc36600462002c0c565b62000bb7565b3480156200040f57600080fd5b50620001cb62000d2c565b3480156200042757600080fd5b50620001cb6200043936600462002b26565b62000d42565b3480156200044c57600080fd5b506200023b6200045e36600462002874565b6024602052600090815260409020546001600160a01b031681565b3480156200048657600080fd5b50605a546001600160a01b03166200023b565b348015620004a657600080fd5b50620002b6608c5481565b348015620004be57600080fd5b50620001e9620004d036600462002874565b620011ca565b348015620004e357600080fd5b50620004ed600081565b60405160ff9091168152602001620001f5565b3480156200050d57600080fd5b506200023b6200051f36600462002c5c565b6200120f565b3480156200053257600080fd5b506022546200054990610100900463ffffffff1681565b60405163ffffffff9091168152602001620001f5565b3480156200056c57600080fd5b506026546200023b906001600160a01b031681565b620001cb6200059236600462002d0f565b62001326565b348015620005a557600080fd5b50620001cb620014d8565b348015620005bd57600080fd5b5062000549600081565b348015620005d457600080fd5b50620002b6620005e636600462002874565b60236020526000908152604090205481565b3480156200060557600080fd5b50620001cb62000617366004620028b3565b6200150f565b3480156200062a57600080fd5b50620004ed600181565b608c54341115620006b15760405162461bcd60e51b8152602060048201526047602482015260008051602062004b3183398151915260448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b620006c18686868686866200158e565b505050505050565b6027546001600160a01b03163314620006f65760405162461bcd60e51b8152600401620006a89062002d76565b62000700620019ff565b565b60006024600084846040516020016200071d92919062002dd3565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b6200075f62001a5d565b608c55565b6200076e62001a5d565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b60208110156200087a5782600116600103620007fb5760018160208110620007c757620007c762002dfd565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000828565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200083560028462002e3f565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008719062002e56565b9150506200079b565b50919392505050565b6000846001600160401b038416825b6020811015620009755781600116600103620008ff57868181518110620008bd57620008bd62002dfd565b602002602001015183604051602001620008e1929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000951565b8287828151811062000915576200091562002dfd565b602002602001015160405160200162000938929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b6200095e60028362002e3f565b9150806200096c8162002e56565b91505062000892565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a375760405162461bcd60e51b8152600401620006a89062002e72565b62000a4d8a8a8a8a8a8a8a8a8a8a600162001ab9565b62000a5e8963ffffffff1662001d44565b6000836001600160a01b03168387898560405160240162000a829392919062002f37565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000ab9919062002f72565b60006040518083038185875af1925050503d806000811462000af8576040519150601f19603f3d011682016040523d82523d6000602084013e62000afd565b606091505b505090508062000b695760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e8813595cdcd859d94819985a5b195960821b6064820152608401620006a8565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000ba295949392919062002f90565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000bd85750600054600160ff909116105b8062000bf45750303b15801562000bf4575060005460ff166001145b62000c595760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006a8565b6000805460ff19166001179055801562000c7d576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000cdf62001d86565b801562000d26576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d3662001a5d565b62000700600062001df9565b60225460ff161562000d685760405162461bcd60e51b8152600401620006a89062002e72565b62000d7e8a8a8a8a8a8a8a8a8a8a600062001ab9565b62000d8f8963ffffffff1662001d44565b6001600160a01b03851662000e8657604080516000808252602082019092526001600160a01b03851690849060405162000dca919062002f72565b60006040518083038185875af1925050503d806000811462000e09576040519150601f19603f3d011682016040523d82523d6000602084013e62000e0e565b606091505b505090508062000e7f5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a20604482015274115d1a195c881d1c985b9cd9995c8819985a5b1959605a1b6064820152608401620006a8565b506200117d565b60225463ffffffff61010090910481169087160362000ebb5762000eb56001600160a01b038616848462001e4b565b6200117d565b6000868660405160200162000ed292919062002dd3565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620011155760008060008580602001905181019062000f24919062003013565b92509250925060008584848460405162000f3e9062002716565b62000f4c9392919062003088565b8190604051809103906000f590508015801562000f6d573d6000803e3d6000fd5b506040516340c10f1960e01b81529091506001600160a01b038216906340c10f199062000fa1908c908c90600401620030c5565b600060405180830381600087803b15801562000fbc57600080fd5b505af115801562000fd1573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620011039392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200117a565b6040516340c10f1960e01b81526001600160a01b038216906340c10f1990620011459088908890600401620030c5565b600060405180830381600087803b1580156200116057600080fd5b505af115801562001175573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838987878686604051620011b695949392919062002f90565b60405180910390a150505050505050505050565b600080620011db6101008462002e3f565b90506000620011ed61010085620030de565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200122792919062002dd3565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200125a9062002716565b601f1982820381018352601f90910116604081905262001287908d908d908d908d908d906020016200311e565b60408051601f1981840301815290829052620012a792916020016200315f565b604051602081830303815290604052805190602001206040516020016200130094939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff16156200134c5760405162461bcd60e51b8152600401620006a89062002e72565b60225463ffffffff610100909104811690841603620013d45760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044657374696e6174696f6e2063616e6e6f7420626520697473656c66006064820152608401620006a8565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff1633868634876021546040516200142898979695949392919062003192565b60405180910390a1620014656200145f6001602260019054906101000a900463ffffffff1633878734888051906020012062000984565b62001eaa565b6026546001600160a01b03166333d6247d6200148062000790565b6040518263ffffffff1660e01b81526004016200149f91815260200190565b600060405180830381600087803b158015620014ba57600080fd5b505af1158015620014cf573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015055760405162461bcd60e51b8152600401620006a89062002d76565b6200070062001ff6565b6200151962001a5d565b6001600160a01b038116620015805760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006a8565b6200158b8162001df9565b50565b60225460ff1615620015b45760405162461bcd60e51b8152600401620006a89062002e72565b60225463ffffffff6101009091048116908616036200162b5760405162461bcd60e51b815260206004820152603d602482015260008051602062004b3183398151915260448201527f2044657374696e6174696f6e2063616e6e6f7420626520697473656c660000006064820152608401620006a8565b60008060606001600160a01b038916620016bd57853414620016b35760405162461bcd60e51b81526020600482015260446024820181905260008051602062004b31833981519152908201527f20416d6f756e7420646f6573206e6f74206d61746368206d6573736167652e76606482015263616c756560e01b608482015260a401620006a8565b600091506200191f565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200177c57604051632770a7eb60e21b81526001600160a01b038b1690639dc29fac90620017349033908b90600401620030c5565b600060405180830381600087803b1580156200174f57600080fd5b505af115801562001764573d6000803e3d6000fd5b5050505080602001519350806000015192506200191d565b84156200179157620017918a888888620020a5565b620017a86001600160a01b038b1633308a620024c9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620017ff573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018299190810190620031ff565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001868573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018929190810190620031ff565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620018d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018f7919062003237565b6040516020016200190b9392919062003088565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200196198979695949392919062003192565b60405180910390a1620019866200145f600084868c8c8c888051906020012062000984565b6026546001600160a01b03166333d6247d620019a162000790565b6040518263ffffffff1660e01b8152600401620019c091815260200190565b600060405180830381600087803b158015620019db57600080fd5b505af1158015620019f0573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001a255760405162461bcd60e51b8152600401620006a89062002e72565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006a8565b62001aca8a63ffffffff16620011ca565b1562001b215760405162461bcd60e51b8152602060048201526030602482015260008051602062004b1183398151915260448201526f08105b1c9958591e4818db185a5b595960821b6064820152608401620006a8565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001b95573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001bbb919062003257565b90508060000362001c1e5760405162461bcd60e51b8152602060048201526037602482015260008051602062004b118339815191526044820152760811db1bd8985b115e1a5d149bdbdd081a5b9d985b1a59604a1b6064820152608401620006a8565b60225463ffffffff878116610100909204161462001ca05760405162461bcd60e51b8152602060048201526043602482015260008051602062004b1183398151915260448201527f2044657374696e6174696f6e206e6574776f726b20646f6573206e6f74206d616064820152620e8c6d60eb1b608482015260a401620006a8565b602254600090610100900463ffffffff1662001cbe57508862001cc1565b50895b62001cec62001cdd848b8b8b8b8b8b8051906020012062000984565b8e8e63ffffffff168462000883565b620019f05760405162461bcd60e51b8152602060048201526032602482015260008051602062004b118339815191526044820152711024b73b30b634b21039b6ba10383937b7b360711b6064820152608401620006a8565b600062001d546101008362002e3f565b9050600062001d6661010084620030de565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001df35760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006a8565b62000700335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62001ea58363a9059cbb60e01b848460405160240162001e6d929190620030c5565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262002503565b505050565b80600162001ebb602060026200336e565b62001ec791906200337c565b6021541062001f2c5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d65726b6c65604482015269081d1c995948199d5b1b60b21b6064820152608401620006a8565b60016021600082825462001f41919062003396565b909155505060215460005b602081101562001feb578160011660010362001f8157826001826020811062001f795762001f7962002dfd565b015550505050565b6001816020811062001f975762001f9762002dfd565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001fd4919062002e3f565b91508062001fe28162002e56565b91505062001f4c565b5062001ea5620033b1565b60225460ff16620020705760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006a8565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000620020e883838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620025dc92505050565b9050632afa533160e01b6001600160e01b0319821601620022dd5760008080808080806200211a896004818d620033c7565b810190620021299190620033f3565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200216b5760405162461bcd60e51b8152600401620006a8906200344e565b6001600160a01b0386163014620021965760405162461bcd60e51b8152600401620006a890620034ab565b8a8514620022095760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205065726044820152780dad2e840c2dadeeadce840c8decae640dcdee840dac2e8c6d603b1b6064820152608401620006a8565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162002289919062002f72565b6000604051808303816000865af19150503d8060008114620022c8576040519150601f19603f3d011682016040523d82523d6000602084013e620022cd565b606091505b50505050505050505050620024c2565b6001600160e01b031981166323f2ebc360e21b14620023535760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e6f7460448201526a081d985b1a590818d85b1b60aa1b6064820152608401620006a8565b6000808080808080806200236b8a6004818e620033c7565b8101906200237a91906200350d565b97509750975097509750975097509750336001600160a01b0316886001600160a01b031614620023be5760405162461bcd60e51b8152600401620006a8906200344e565b6001600160a01b0387163014620023e95760405162461bcd60e51b8152600401620006a890620034ab565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162002472919062002f72565b6000604051808303816000865af19150503d8060008114620024b1576040519150601f19603f3d011682016040523d82523d6000602084013e620024b6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d269085906323b872dd60e01b9060840162001e6d565b60006200255a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620025e39092919063ffffffff16565b80519091501562001ea557808060200190518101906200257b919062003599565b62001ea55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006a8565b6020015190565b60606200097c848460008585600080866001600160a01b031685876040516200260d919062002f72565b60006040518083038185875af1925050503d80600081146200264c576040519150601f19603f3d011682016040523d82523d6000602084013e62002651565b606091505b509150915062002664878383876200266f565b979650505050505050565b60608315620026e3578251600003620026db576001600160a01b0385163b620026db5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006a8565b50816200097c565b6200097c8383815115620026fa5781518083602001fd5b8060405162461bcd60e51b8152600401620006a89190620035b9565b61154280620035cf83390190565b6001600160a01b03811681146200158b57600080fd5b8035620027478162002724565b919050565b803563ffffffff811681146200274757600080fd5b60008083601f8401126200277457600080fd5b5081356001600160401b038111156200278c57600080fd5b602083019150836020828501011115620027a557600080fd5b9250929050565b60008060008060008060a08789031215620027c657600080fd5b8635620027d38162002724565b9550620027e3602088016200274c565b94506040870135620027f58162002724565b93506060870135925060808701356001600160401b038111156200281857600080fd5b6200282689828a0162002761565b979a9699509497509295939492505050565b600080604083850312156200284c57600080fd5b62002857836200274c565b91506020830135620028698162002724565b809150509250929050565b6000602082840312156200288757600080fd5b5035919050565b600060208284031215620028a157600080fd5b620028ac826200274c565b9392505050565b600060208284031215620028c657600080fd5b8135620028ac8162002724565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620029145762002914620028d3565b604052919050565b600082601f8301126200292e57600080fd5b813560206001600160401b038211156200294c576200294c620028d3565b8160051b6200295d828201620028e9565b92835284810182019282810190878511156200297857600080fd5b83870192505b8483101562002664578235825291830191908301906200297e565b60008060008060808587031215620029b057600080fd5b8435935060208501356001600160401b0380821115620029cf57600080fd5b620029dd888389016200291c565b9450604087013591508082168214620029f557600080fd5b509396929550929360600135925050565b60ff811681146200158b57600080fd5b600080600080600080600060e0888a03121562002a3257600080fd5b873562002a3f8162002a06565b965062002a4f602089016200274c565b9550604088013562002a618162002724565b945062002a71606089016200274c565b9350608088013562002a838162002724565b9699959850939692959460a0840135945060c09093013592915050565b60006001600160401b0382111562002abc5762002abc620028d3565b50601f01601f191660200190565b600082601f83011262002adc57600080fd5b813562002af362002aed8262002aa0565b620028e9565b81815284602083860101111562002b0957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002b4757600080fd5b8a356001600160401b038082111562002b5f57600080fd5b62002b6d8e838f016200291c565b9b5062002b7d60208e016200274c565b9a5060408d0135995060608d0135985062002b9b60808e016200274c565b975062002bab60a08e016200273a565b965062002bbb60c08e016200274c565b955062002bcb60e08e016200273a565b94506101008d013593506101208d013591508082111562002beb57600080fd5b5062002bfa8d828e0162002aca565b9150509295989b9194979a5092959850565b60008060006060848603121562002c2257600080fd5b62002c2d846200274c565b9250602084013562002c3f8162002724565b9150604084013562002c518162002724565b809150509250925092565b600080600080600080600060a0888a03121562002c7857600080fd5b62002c83886200274c565b9650602088013562002c958162002724565b955060408801356001600160401b038082111562002cb257600080fd5b62002cc08b838c0162002761565b909750955060608a013591508082111562002cda57600080fd5b5062002ce98a828b0162002761565b909450925050608088013562002cff8162002a06565b8091505092959891949750929550565b60008060006060848603121562002d2557600080fd5b62002d30846200274c565b9250602084013562002d428162002724565b915060408401356001600160401b0381111562002d5e57600080fd5b62002d6c8682870162002aca565b9150509250925092565b6020808252603a908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e5a6b45564d20636f6e7472616374000000000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002e515762002e5162002e13565b500490565b60006001820162002e6b5762002e6b62002e29565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002ef757818101518382015260200162002edd565b8381111562000d265750506000910152565b6000815180845262002f2381602086016020860162002eda565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002f699083018462002f09565b95945050505050565b6000825162002f8681846020870162002eda565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f83011262002fd957600080fd5b815162002fea62002aed8262002aa0565b8181528460208386010111156200300057600080fd5b6200097c82602083016020870162002eda565b6000806000606084860312156200302957600080fd5b83516001600160401b03808211156200304157600080fd5b6200304f8783880162002fc7565b945060208601519150808211156200306657600080fd5b50620030758682870162002fc7565b925050604084015162002c518162002a06565b6060815260006200309d606083018662002f09565b8281036020840152620030b1818662002f09565b91505060ff83166040830152949350505050565b6001600160a01b03929092168252602082015260400190565b600082620030f057620030f062002e13565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003134606083018789620030f5565b828103602084015262003149818688620030f5565b91505060ff831660408301529695505050505050565b600083516200317381846020880162002eda565b8351908301906200318981836020880162002eda565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620031e68483018762002f09565b925080851660e085015250509998505050505050505050565b6000602082840312156200321257600080fd5b81516001600160401b038111156200322957600080fd5b6200097c8482850162002fc7565b6000602082840312156200324a57600080fd5b8151620028ac8162002a06565b6000602082840312156200326a57600080fd5b5051919050565b600181815b80851115620032b257816000190482111562003296576200329662002e29565b80851615620032a457918102915b93841c939080029062003276565b509250929050565b600082620032cb575060016200074f565b81620032da575060006200074f565b8160018114620032f35760028114620032fe576200331e565b60019150506200074f565b60ff84111562003312576200331262002e29565b50506001821b6200074f565b5060208310610133831016604e8410600b841016171562003343575081810a6200074f565b6200334f838362003271565b806000190482111562003366576200336662002e29565b029392505050565b6000620028ac8383620032ba565b60008282101562003391576200339162002e29565b500390565b60008219821115620033ac57620033ac62002e29565b500190565b634e487b7160e01b600052600160045260246000fd5b60008085851115620033d857600080fd5b83861115620033e657600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200340f57600080fd5b87356200341c8162002724565b965060208801356200342e8162002724565b95506040880135945060608801359350608088013562002a838162002a06565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260408201527f6d6974206f776e6572206d757374206265207468652073656e64657200000000606082015260800190565b60208082526033908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205370656040820152726e646572206d7573742062652027746869732760681b606082015260800190565b80151581146200158b57600080fd5b600080600080600080600080610100898b0312156200352b57600080fd5b8835620035388162002724565b975060208901356200354a8162002724565b9650604089013595506060890135945060808901356200356a81620034fe565b935060a08901356200357c8162002a06565b979a969950949793969295929450505060c08201359160e0013590565b600060208284031215620035ac57600080fd5b8151620028ac81620034fe565b602081526000620028ac602083018462002f0956fe60c06040523480156200001157600080fd5b5060405162001542380380620015428339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611088620004ba60003960006104690152600081816102f9015261043301526110886000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610dc2565b60405180910390f35b61016d610168366004610e33565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e5d565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e33565b61048b565b61023d610238366004610e33565b6104ad565b005b61018161024d366004610e99565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610e99565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e33565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e33565b610531565b61016d6102ef366004610e33565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ebb565b6105ba565b61018161033c366004610f2e565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f61565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f61565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b51565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fb1565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fc9565b60405180910390fd5b6104ea8282610bfd565b5050565b60606004805461037090610f61565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fc9565b6104ea8282610caa565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611019565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b0384811660008181526020818152604080832087870390559387168083529184902080548701905592518581529092600080516020611033833981519152910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b7c610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c535760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c659190610fb1565b90915550506001600160a01b03821660008181526020818152604080832080548601905551848152600080516020611033833981519152910160405180910390a35050565b6001600160a01b038216610d0a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610d7e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192916000805160206110338339815191529101610938565b600060208083528351808285015260005b81811015610def57858101830151858201604001528201610dd3565b81811115610e01576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e2e57600080fd5b919050565b60008060408385031215610e4657600080fd5b610e4f83610e17565b946020939093013593505050565b600080600060608486031215610e7257600080fd5b610e7b84610e17565b9250610e8960208501610e17565b9150604084013590509250925092565b600060208284031215610eab57600080fd5b610eb482610e17565b9392505050565b600080600080600080600060e0888a031215610ed657600080fd5b610edf88610e17565b9650610eed60208901610e17565b95506040880135945060608801359350608088013560ff81168114610f1157600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f4157600080fd5b610f4a83610e17565b9150610f5860208401610e17565b90509250929050565b600181811c90821680610f7557607f821691505b602082108103610f9557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610fc457610fc4610f9b565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161102b5761102b610f9b565b506001019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212208b7986f78e961ad6c0885b86b24ce427045be98073c1f3d7fe18180542ab873564736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663a506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743aa264697066735822122038345ffd9080addd30e644f069c03eb26468d8f9f372429cc4736a87108f308c64736f6c634300080f0033", - "deployedBytecode": "0x608060405260043610620001af5760003560e01c80637b6323c111620000e9578063bab161bf1162000090578063bab161bf1462000525578063d02103ca146200055f578063d96a15f71462000581578063dbc169761462000598578063ed6be5c914620005b0578063ee25560b14620005c7578063f2fde38b14620005f8578063ff634ed7146200061d57600080fd5b80637b6323c1146200041a57806381b1c174146200043f5780638da5cb5b146200047957806391e57e2d14620004995780639e34070f14620004b1578063a08e8a0814620004d6578063aaa13cc2146200050057600080fd5b8063318aee3d116200015a578063318aee3d14620002c557806334ac9cf214620003345780633ae0504714620003565780633da81682146200036e5780633e19704314620003935780634638554914620003b8578063647c576c14620003dd578063715018a6146200040257600080fd5b80630871e97114620001b457806315064c9614620001cd5780632072f6c514620001fe57806322e95f2c14620002165780632b5e42e714620002545780632c3f58cd14620002795780632dfdf0b5146200029e575b600080fd5b620001cb620001c5366004620027ac565b62000634565b005b348015620001da57600080fd5b50602254620001e99060ff1681565b60405190151581526020015b60405180910390f35b3480156200020b57600080fd5b50620001cb620006c9565b3480156200022357600080fd5b506200023b6200023536600462002838565b62000702565b6040516001600160a01b039091168152602001620001f5565b3480156200026157600080fd5b50620001cb6200027336600462002874565b62000755565b3480156200028657600080fd5b50620001cb620002983660046200288e565b62000764565b348015620002ab57600080fd5b50620002b660215481565b604051908152602001620001f5565b348015620002d257600080fd5b506200030f620002e4366004620028b3565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001f5565b3480156200034157600080fd5b506027546200023b906001600160a01b031681565b3480156200036357600080fd5b50620002b662000790565b3480156200037b57600080fd5b50620001e96200038d36600462002999565b62000883565b348015620003a057600080fd5b50620002b6620003b236600462002a16565b62000984565b348015620003c557600080fd5b50620001cb620003d736600462002b26565b62000a11565b348015620003ea57600080fd5b50620001cb620003fc36600462002c0c565b62000bb7565b3480156200040f57600080fd5b50620001cb62000d2c565b3480156200042757600080fd5b50620001cb6200043936600462002b26565b62000d42565b3480156200044c57600080fd5b506200023b6200045e36600462002874565b6024602052600090815260409020546001600160a01b031681565b3480156200048657600080fd5b50605a546001600160a01b03166200023b565b348015620004a657600080fd5b50620002b6608c5481565b348015620004be57600080fd5b50620001e9620004d036600462002874565b620011ca565b348015620004e357600080fd5b50620004ed600081565b60405160ff9091168152602001620001f5565b3480156200050d57600080fd5b506200023b6200051f36600462002c5c565b6200120f565b3480156200053257600080fd5b506022546200054990610100900463ffffffff1681565b60405163ffffffff9091168152602001620001f5565b3480156200056c57600080fd5b506026546200023b906001600160a01b031681565b620001cb6200059236600462002d0f565b62001326565b348015620005a557600080fd5b50620001cb620014d8565b348015620005bd57600080fd5b5062000549600081565b348015620005d457600080fd5b50620002b6620005e636600462002874565b60236020526000908152604090205481565b3480156200060557600080fd5b50620001cb62000617366004620028b3565b6200150f565b3480156200062a57600080fd5b50620004ed600181565b608c54341115620006b15760405162461bcd60e51b8152602060048201526047602482015260008051602062004b3183398151915260448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b620006c18686868686866200158e565b505050505050565b6027546001600160a01b03163314620006f65760405162461bcd60e51b8152600401620006a89062002d76565b62000700620019ff565b565b60006024600084846040516020016200071d92919062002dd3565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b6200075f62001a5d565b608c55565b6200076e62001a5d565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b60208110156200087a5782600116600103620007fb5760018160208110620007c757620007c762002dfd565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000828565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200083560028462002e3f565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008719062002e56565b9150506200079b565b50919392505050565b6000846001600160401b038416825b6020811015620009755781600116600103620008ff57868181518110620008bd57620008bd62002dfd565b602002602001015183604051602001620008e1929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000951565b8287828151811062000915576200091562002dfd565b602002602001015160405160200162000938929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b6200095e60028362002e3f565b9150806200096c8162002e56565b91505062000892565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a375760405162461bcd60e51b8152600401620006a89062002e72565b62000a4d8a8a8a8a8a8a8a8a8a8a600162001ab9565b62000a5e8963ffffffff1662001d44565b6000836001600160a01b03168387898560405160240162000a829392919062002f37565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000ab9919062002f72565b60006040518083038185875af1925050503d806000811462000af8576040519150601f19603f3d011682016040523d82523d6000602084013e62000afd565b606091505b505090508062000b695760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e8813595cdcd859d94819985a5b195960821b6064820152608401620006a8565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000ba295949392919062002f90565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000bd85750600054600160ff909116105b8062000bf45750303b15801562000bf4575060005460ff166001145b62000c595760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006a8565b6000805460ff19166001179055801562000c7d576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000cdf62001d86565b801562000d26576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d3662001a5d565b62000700600062001df9565b60225460ff161562000d685760405162461bcd60e51b8152600401620006a89062002e72565b62000d7e8a8a8a8a8a8a8a8a8a8a600062001ab9565b62000d8f8963ffffffff1662001d44565b6001600160a01b03851662000e8657604080516000808252602082019092526001600160a01b03851690849060405162000dca919062002f72565b60006040518083038185875af1925050503d806000811462000e09576040519150601f19603f3d011682016040523d82523d6000602084013e62000e0e565b606091505b505090508062000e7f5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a20604482015274115d1a195c881d1c985b9cd9995c8819985a5b1959605a1b6064820152608401620006a8565b506200117d565b60225463ffffffff61010090910481169087160362000ebb5762000eb56001600160a01b038616848462001e4b565b6200117d565b6000868660405160200162000ed292919062002dd3565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620011155760008060008580602001905181019062000f24919062003013565b92509250925060008584848460405162000f3e9062002716565b62000f4c9392919062003088565b8190604051809103906000f590508015801562000f6d573d6000803e3d6000fd5b506040516340c10f1960e01b81529091506001600160a01b038216906340c10f199062000fa1908c908c90600401620030c5565b600060405180830381600087803b15801562000fbc57600080fd5b505af115801562000fd1573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620011039392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200117a565b6040516340c10f1960e01b81526001600160a01b038216906340c10f1990620011459088908890600401620030c5565b600060405180830381600087803b1580156200116057600080fd5b505af115801562001175573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838987878686604051620011b695949392919062002f90565b60405180910390a150505050505050505050565b600080620011db6101008462002e3f565b90506000620011ed61010085620030de565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200122792919062002dd3565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200125a9062002716565b601f1982820381018352601f90910116604081905262001287908d908d908d908d908d906020016200311e565b60408051601f1981840301815290829052620012a792916020016200315f565b604051602081830303815290604052805190602001206040516020016200130094939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff16156200134c5760405162461bcd60e51b8152600401620006a89062002e72565b60225463ffffffff610100909104811690841603620013d45760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044657374696e6174696f6e2063616e6e6f7420626520697473656c66006064820152608401620006a8565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff1633868634876021546040516200142898979695949392919062003192565b60405180910390a1620014656200145f6001602260019054906101000a900463ffffffff1633878734888051906020012062000984565b62001eaa565b6026546001600160a01b03166333d6247d6200148062000790565b6040518263ffffffff1660e01b81526004016200149f91815260200190565b600060405180830381600087803b158015620014ba57600080fd5b505af1158015620014cf573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015055760405162461bcd60e51b8152600401620006a89062002d76565b6200070062001ff6565b6200151962001a5d565b6001600160a01b038116620015805760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006a8565b6200158b8162001df9565b50565b60225460ff1615620015b45760405162461bcd60e51b8152600401620006a89062002e72565b60225463ffffffff6101009091048116908616036200162b5760405162461bcd60e51b815260206004820152603d602482015260008051602062004b3183398151915260448201527f2044657374696e6174696f6e2063616e6e6f7420626520697473656c660000006064820152608401620006a8565b60008060606001600160a01b038916620016bd57853414620016b35760405162461bcd60e51b81526020600482015260446024820181905260008051602062004b31833981519152908201527f20416d6f756e7420646f6573206e6f74206d61746368206d6573736167652e76606482015263616c756560e01b608482015260a401620006a8565b600091506200191f565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200177c57604051632770a7eb60e21b81526001600160a01b038b1690639dc29fac90620017349033908b90600401620030c5565b600060405180830381600087803b1580156200174f57600080fd5b505af115801562001764573d6000803e3d6000fd5b5050505080602001519350806000015192506200191d565b84156200179157620017918a888888620020a5565b620017a86001600160a01b038b1633308a620024c9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620017ff573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018299190810190620031ff565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001868573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018929190810190620031ff565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620018d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018f7919062003237565b6040516020016200190b9392919062003088565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200196198979695949392919062003192565b60405180910390a1620019866200145f600084868c8c8c888051906020012062000984565b6026546001600160a01b03166333d6247d620019a162000790565b6040518263ffffffff1660e01b8152600401620019c091815260200190565b600060405180830381600087803b158015620019db57600080fd5b505af1158015620019f0573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001a255760405162461bcd60e51b8152600401620006a89062002e72565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006a8565b62001aca8a63ffffffff16620011ca565b1562001b215760405162461bcd60e51b8152602060048201526030602482015260008051602062004b1183398151915260448201526f08105b1c9958591e4818db185a5b595960821b6064820152608401620006a8565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001b95573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001bbb919062003257565b90508060000362001c1e5760405162461bcd60e51b8152602060048201526037602482015260008051602062004b118339815191526044820152760811db1bd8985b115e1a5d149bdbdd081a5b9d985b1a59604a1b6064820152608401620006a8565b60225463ffffffff878116610100909204161462001ca05760405162461bcd60e51b8152602060048201526043602482015260008051602062004b1183398151915260448201527f2044657374696e6174696f6e206e6574776f726b20646f6573206e6f74206d616064820152620e8c6d60eb1b608482015260a401620006a8565b602254600090610100900463ffffffff1662001cbe57508862001cc1565b50895b62001cec62001cdd848b8b8b8b8b8b8051906020012062000984565b8e8e63ffffffff168462000883565b620019f05760405162461bcd60e51b8152602060048201526032602482015260008051602062004b118339815191526044820152711024b73b30b634b21039b6ba10383937b7b360711b6064820152608401620006a8565b600062001d546101008362002e3f565b9050600062001d6661010084620030de565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001df35760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006a8565b62000700335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62001ea58363a9059cbb60e01b848460405160240162001e6d929190620030c5565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262002503565b505050565b80600162001ebb602060026200336e565b62001ec791906200337c565b6021541062001f2c5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d65726b6c65604482015269081d1c995948199d5b1b60b21b6064820152608401620006a8565b60016021600082825462001f41919062003396565b909155505060215460005b602081101562001feb578160011660010362001f8157826001826020811062001f795762001f7962002dfd565b015550505050565b6001816020811062001f975762001f9762002dfd565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001fd4919062002e3f565b91508062001fe28162002e56565b91505062001f4c565b5062001ea5620033b1565b60225460ff16620020705760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006a8565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000620020e883838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620025dc92505050565b9050632afa533160e01b6001600160e01b0319821601620022dd5760008080808080806200211a896004818d620033c7565b810190620021299190620033f3565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200216b5760405162461bcd60e51b8152600401620006a8906200344e565b6001600160a01b0386163014620021965760405162461bcd60e51b8152600401620006a890620034ab565b8a8514620022095760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205065726044820152780dad2e840c2dadeeadce840c8decae640dcdee840dac2e8c6d603b1b6064820152608401620006a8565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162002289919062002f72565b6000604051808303816000865af19150503d8060008114620022c8576040519150601f19603f3d011682016040523d82523d6000602084013e620022cd565b606091505b50505050505050505050620024c2565b6001600160e01b031981166323f2ebc360e21b14620023535760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e6f7460448201526a081d985b1a590818d85b1b60aa1b6064820152608401620006a8565b6000808080808080806200236b8a6004818e620033c7565b8101906200237a91906200350d565b97509750975097509750975097509750336001600160a01b0316886001600160a01b031614620023be5760405162461bcd60e51b8152600401620006a8906200344e565b6001600160a01b0387163014620023e95760405162461bcd60e51b8152600401620006a890620034ab565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162002472919062002f72565b6000604051808303816000865af19150503d8060008114620024b1576040519150601f19603f3d011682016040523d82523d6000602084013e620024b6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d269085906323b872dd60e01b9060840162001e6d565b60006200255a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620025e39092919063ffffffff16565b80519091501562001ea557808060200190518101906200257b919062003599565b62001ea55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006a8565b6020015190565b60606200097c848460008585600080866001600160a01b031685876040516200260d919062002f72565b60006040518083038185875af1925050503d80600081146200264c576040519150601f19603f3d011682016040523d82523d6000602084013e62002651565b606091505b509150915062002664878383876200266f565b979650505050505050565b60608315620026e3578251600003620026db576001600160a01b0385163b620026db5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006a8565b50816200097c565b6200097c8383815115620026fa5781518083602001fd5b8060405162461bcd60e51b8152600401620006a89190620035b9565b61154280620035cf83390190565b6001600160a01b03811681146200158b57600080fd5b8035620027478162002724565b919050565b803563ffffffff811681146200274757600080fd5b60008083601f8401126200277457600080fd5b5081356001600160401b038111156200278c57600080fd5b602083019150836020828501011115620027a557600080fd5b9250929050565b60008060008060008060a08789031215620027c657600080fd5b8635620027d38162002724565b9550620027e3602088016200274c565b94506040870135620027f58162002724565b93506060870135925060808701356001600160401b038111156200281857600080fd5b6200282689828a0162002761565b979a9699509497509295939492505050565b600080604083850312156200284c57600080fd5b62002857836200274c565b91506020830135620028698162002724565b809150509250929050565b6000602082840312156200288757600080fd5b5035919050565b600060208284031215620028a157600080fd5b620028ac826200274c565b9392505050565b600060208284031215620028c657600080fd5b8135620028ac8162002724565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620029145762002914620028d3565b604052919050565b600082601f8301126200292e57600080fd5b813560206001600160401b038211156200294c576200294c620028d3565b8160051b6200295d828201620028e9565b92835284810182019282810190878511156200297857600080fd5b83870192505b8483101562002664578235825291830191908301906200297e565b60008060008060808587031215620029b057600080fd5b8435935060208501356001600160401b0380821115620029cf57600080fd5b620029dd888389016200291c565b9450604087013591508082168214620029f557600080fd5b509396929550929360600135925050565b60ff811681146200158b57600080fd5b600080600080600080600060e0888a03121562002a3257600080fd5b873562002a3f8162002a06565b965062002a4f602089016200274c565b9550604088013562002a618162002724565b945062002a71606089016200274c565b9350608088013562002a838162002724565b9699959850939692959460a0840135945060c09093013592915050565b60006001600160401b0382111562002abc5762002abc620028d3565b50601f01601f191660200190565b600082601f83011262002adc57600080fd5b813562002af362002aed8262002aa0565b620028e9565b81815284602083860101111562002b0957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002b4757600080fd5b8a356001600160401b038082111562002b5f57600080fd5b62002b6d8e838f016200291c565b9b5062002b7d60208e016200274c565b9a5060408d0135995060608d0135985062002b9b60808e016200274c565b975062002bab60a08e016200273a565b965062002bbb60c08e016200274c565b955062002bcb60e08e016200273a565b94506101008d013593506101208d013591508082111562002beb57600080fd5b5062002bfa8d828e0162002aca565b9150509295989b9194979a5092959850565b60008060006060848603121562002c2257600080fd5b62002c2d846200274c565b9250602084013562002c3f8162002724565b9150604084013562002c518162002724565b809150509250925092565b600080600080600080600060a0888a03121562002c7857600080fd5b62002c83886200274c565b9650602088013562002c958162002724565b955060408801356001600160401b038082111562002cb257600080fd5b62002cc08b838c0162002761565b909750955060608a013591508082111562002cda57600080fd5b5062002ce98a828b0162002761565b909450925050608088013562002cff8162002a06565b8091505092959891949750929550565b60008060006060848603121562002d2557600080fd5b62002d30846200274c565b9250602084013562002d428162002724565b915060408401356001600160401b0381111562002d5e57600080fd5b62002d6c8682870162002aca565b9150509250925092565b6020808252603a908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e5a6b45564d20636f6e7472616374000000000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002e515762002e5162002e13565b500490565b60006001820162002e6b5762002e6b62002e29565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002ef757818101518382015260200162002edd565b8381111562000d265750506000910152565b6000815180845262002f2381602086016020860162002eda565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002f699083018462002f09565b95945050505050565b6000825162002f8681846020870162002eda565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f83011262002fd957600080fd5b815162002fea62002aed8262002aa0565b8181528460208386010111156200300057600080fd5b6200097c82602083016020870162002eda565b6000806000606084860312156200302957600080fd5b83516001600160401b03808211156200304157600080fd5b6200304f8783880162002fc7565b945060208601519150808211156200306657600080fd5b50620030758682870162002fc7565b925050604084015162002c518162002a06565b6060815260006200309d606083018662002f09565b8281036020840152620030b1818662002f09565b91505060ff83166040830152949350505050565b6001600160a01b03929092168252602082015260400190565b600082620030f057620030f062002e13565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003134606083018789620030f5565b828103602084015262003149818688620030f5565b91505060ff831660408301529695505050505050565b600083516200317381846020880162002eda565b8351908301906200318981836020880162002eda565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620031e68483018762002f09565b925080851660e085015250509998505050505050505050565b6000602082840312156200321257600080fd5b81516001600160401b038111156200322957600080fd5b6200097c8482850162002fc7565b6000602082840312156200324a57600080fd5b8151620028ac8162002a06565b6000602082840312156200326a57600080fd5b5051919050565b600181815b80851115620032b257816000190482111562003296576200329662002e29565b80851615620032a457918102915b93841c939080029062003276565b509250929050565b600082620032cb575060016200074f565b81620032da575060006200074f565b8160018114620032f35760028114620032fe576200331e565b60019150506200074f565b60ff84111562003312576200331262002e29565b50506001821b6200074f565b5060208310610133831016604e8410600b841016171562003343575081810a6200074f565b6200334f838362003271565b806000190482111562003366576200336662002e29565b029392505050565b6000620028ac8383620032ba565b60008282101562003391576200339162002e29565b500390565b60008219821115620033ac57620033ac62002e29565b500190565b634e487b7160e01b600052600160045260246000fd5b60008085851115620033d857600080fd5b83861115620033e657600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200340f57600080fd5b87356200341c8162002724565b965060208801356200342e8162002724565b95506040880135945060608801359350608088013562002a838162002a06565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260408201527f6d6974206f776e6572206d757374206265207468652073656e64657200000000606082015260800190565b60208082526033908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205370656040820152726e646572206d7573742062652027746869732760681b606082015260800190565b80151581146200158b57600080fd5b600080600080600080600080610100898b0312156200352b57600080fd5b8835620035388162002724565b975060208901356200354a8162002724565b9650604089013595506060890135945060808901356200356a81620034fe565b935060a08901356200357c8162002a06565b979a969950949793969295929450505060c08201359160e0013590565b600060208284031215620035ac57600080fd5b8151620028ac81620034fe565b602081526000620028ac602083018462002f0956fe60c06040523480156200001157600080fd5b5060405162001542380380620015428339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611088620004ba60003960006104690152600081816102f9015261043301526110886000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610dc2565b60405180910390f35b61016d610168366004610e33565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e5d565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e33565b61048b565b61023d610238366004610e33565b6104ad565b005b61018161024d366004610e99565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610e99565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e33565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e33565b610531565b61016d6102ef366004610e33565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ebb565b6105ba565b61018161033c366004610f2e565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f61565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f61565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b51565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fb1565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fc9565b60405180910390fd5b6104ea8282610bfd565b5050565b60606004805461037090610f61565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fc9565b6104ea8282610caa565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611019565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b0384811660008181526020818152604080832087870390559387168083529184902080548701905592518581529092600080516020611033833981519152910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b7c610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c535760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c659190610fb1565b90915550506001600160a01b03821660008181526020818152604080832080548601905551848152600080516020611033833981519152910160405180910390a35050565b6001600160a01b038216610d0a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610d7e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192916000805160206110338339815191529101610938565b600060208083528351808285015260005b81811015610def57858101830151858201604001528201610dd3565b81811115610e01576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e2e57600080fd5b919050565b60008060408385031215610e4657600080fd5b610e4f83610e17565b946020939093013593505050565b600080600060608486031215610e7257600080fd5b610e7b84610e17565b9250610e8960208501610e17565b9150604084013590509250925092565b600060208284031215610eab57600080fd5b610eb482610e17565b9392505050565b600080600080600080600060e0888a031215610ed657600080fd5b610edf88610e17565b9650610eed60208901610e17565b95506040880135945060608801359350608088013560ff81168114610f1157600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f4157600080fd5b610f4a83610e17565b9150610f5860208401610e17565b90509250929050565b600181811c90821680610f7557607f821691505b602082108103610f9557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610fc457610fc4610f9b565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161102b5761102b610f9b565b506001019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212208b7986f78e961ad6c0885b86b24ce427045be98073c1f3d7fe18180542ab873564736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663a506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743aa264697066735822122038345ffd9080addd30e644f069c03eb26468d8f9f372429cc4736a87108f308c64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50614b86806100206000396000f3fe608060405260043610620001af5760003560e01c80637b6323c111620000e9578063bab161bf1162000090578063bab161bf1462000525578063d02103ca146200055f578063d96a15f71462000581578063dbc169761462000598578063ed6be5c914620005b0578063ee25560b14620005c7578063f2fde38b14620005f8578063ff634ed7146200061d57600080fd5b80637b6323c1146200041a57806381b1c174146200043f5780638da5cb5b146200047957806391e57e2d14620004995780639e34070f14620004b1578063a08e8a0814620004d6578063aaa13cc2146200050057600080fd5b8063318aee3d116200015a578063318aee3d14620002c557806334ac9cf214620003345780633ae0504714620003565780633da81682146200036e5780633e19704314620003935780634638554914620003b8578063647c576c14620003dd578063715018a6146200040257600080fd5b80630871e97114620001b457806315064c9614620001cd5780632072f6c514620001fe57806322e95f2c14620002165780632b5e42e714620002545780632c3f58cd14620002795780632dfdf0b5146200029e575b600080fd5b620001cb620001c5366004620027ac565b62000634565b005b348015620001da57600080fd5b50602254620001e99060ff1681565b60405190151581526020015b60405180910390f35b3480156200020b57600080fd5b50620001cb620006c9565b3480156200022357600080fd5b506200023b6200023536600462002838565b62000702565b6040516001600160a01b039091168152602001620001f5565b3480156200026157600080fd5b50620001cb6200027336600462002874565b62000755565b3480156200028657600080fd5b50620001cb620002983660046200288e565b62000764565b348015620002ab57600080fd5b50620002b660215481565b604051908152602001620001f5565b348015620002d257600080fd5b506200030f620002e4366004620028b3565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001f5565b3480156200034157600080fd5b506027546200023b906001600160a01b031681565b3480156200036357600080fd5b50620002b662000790565b3480156200037b57600080fd5b50620001e96200038d36600462002999565b62000883565b348015620003a057600080fd5b50620002b6620003b236600462002a16565b62000984565b348015620003c557600080fd5b50620001cb620003d736600462002b26565b62000a11565b348015620003ea57600080fd5b50620001cb620003fc36600462002c0c565b62000bb7565b3480156200040f57600080fd5b50620001cb62000d2c565b3480156200042757600080fd5b50620001cb6200043936600462002b26565b62000d42565b3480156200044c57600080fd5b506200023b6200045e36600462002874565b6024602052600090815260409020546001600160a01b031681565b3480156200048657600080fd5b50605a546001600160a01b03166200023b565b348015620004a657600080fd5b50620002b6608c5481565b348015620004be57600080fd5b50620001e9620004d036600462002874565b620011ca565b348015620004e357600080fd5b50620004ed600081565b60405160ff9091168152602001620001f5565b3480156200050d57600080fd5b506200023b6200051f36600462002c5c565b6200120f565b3480156200053257600080fd5b506022546200054990610100900463ffffffff1681565b60405163ffffffff9091168152602001620001f5565b3480156200056c57600080fd5b506026546200023b906001600160a01b031681565b620001cb6200059236600462002d0f565b62001326565b348015620005a557600080fd5b50620001cb620014d8565b348015620005bd57600080fd5b5062000549600081565b348015620005d457600080fd5b50620002b6620005e636600462002874565b60236020526000908152604090205481565b3480156200060557600080fd5b50620001cb62000617366004620028b3565b6200150f565b3480156200062a57600080fd5b50620004ed600181565b608c54341115620006b15760405162461bcd60e51b8152602060048201526047602482015260008051602062004b3183398151915260448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b620006c18686868686866200158e565b505050505050565b6027546001600160a01b03163314620006f65760405162461bcd60e51b8152600401620006a89062002d76565b62000700620019ff565b565b60006024600084846040516020016200071d92919062002dd3565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b6200075f62001a5d565b608c55565b6200076e62001a5d565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b60208110156200087a5782600116600103620007fb5760018160208110620007c757620007c762002dfd565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000828565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200083560028462002e3f565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008719062002e56565b9150506200079b565b50919392505050565b6000846001600160401b038416825b6020811015620009755781600116600103620008ff57868181518110620008bd57620008bd62002dfd565b602002602001015183604051602001620008e1929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000951565b8287828151811062000915576200091562002dfd565b602002602001015160405160200162000938929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b6200095e60028362002e3f565b9150806200096c8162002e56565b91505062000892565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a375760405162461bcd60e51b8152600401620006a89062002e72565b62000a4d8a8a8a8a8a8a8a8a8a8a600162001ab9565b62000a5e8963ffffffff1662001d44565b6000836001600160a01b03168387898560405160240162000a829392919062002f37565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000ab9919062002f72565b60006040518083038185875af1925050503d806000811462000af8576040519150601f19603f3d011682016040523d82523d6000602084013e62000afd565b606091505b505090508062000b695760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e8813595cdcd859d94819985a5b195960821b6064820152608401620006a8565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000ba295949392919062002f90565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000bd85750600054600160ff909116105b8062000bf45750303b15801562000bf4575060005460ff166001145b62000c595760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006a8565b6000805460ff19166001179055801562000c7d576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000cdf62001d86565b801562000d26576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d3662001a5d565b62000700600062001df9565b60225460ff161562000d685760405162461bcd60e51b8152600401620006a89062002e72565b62000d7e8a8a8a8a8a8a8a8a8a8a600062001ab9565b62000d8f8963ffffffff1662001d44565b6001600160a01b03851662000e8657604080516000808252602082019092526001600160a01b03851690849060405162000dca919062002f72565b60006040518083038185875af1925050503d806000811462000e09576040519150601f19603f3d011682016040523d82523d6000602084013e62000e0e565b606091505b505090508062000e7f5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a20604482015274115d1a195c881d1c985b9cd9995c8819985a5b1959605a1b6064820152608401620006a8565b506200117d565b60225463ffffffff61010090910481169087160362000ebb5762000eb56001600160a01b038616848462001e4b565b6200117d565b6000868660405160200162000ed292919062002dd3565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620011155760008060008580602001905181019062000f24919062003013565b92509250925060008584848460405162000f3e9062002716565b62000f4c9392919062003088565b8190604051809103906000f590508015801562000f6d573d6000803e3d6000fd5b506040516340c10f1960e01b81529091506001600160a01b038216906340c10f199062000fa1908c908c90600401620030c5565b600060405180830381600087803b15801562000fbc57600080fd5b505af115801562000fd1573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620011039392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200117a565b6040516340c10f1960e01b81526001600160a01b038216906340c10f1990620011459088908890600401620030c5565b600060405180830381600087803b1580156200116057600080fd5b505af115801562001175573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838987878686604051620011b695949392919062002f90565b60405180910390a150505050505050505050565b600080620011db6101008462002e3f565b90506000620011ed61010085620030de565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200122792919062002dd3565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200125a9062002716565b601f1982820381018352601f90910116604081905262001287908d908d908d908d908d906020016200311e565b60408051601f1981840301815290829052620012a792916020016200315f565b604051602081830303815290604052805190602001206040516020016200130094939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff16156200134c5760405162461bcd60e51b8152600401620006a89062002e72565b60225463ffffffff610100909104811690841603620013d45760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044657374696e6174696f6e2063616e6e6f7420626520697473656c66006064820152608401620006a8565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff1633868634876021546040516200142898979695949392919062003192565b60405180910390a1620014656200145f6001602260019054906101000a900463ffffffff1633878734888051906020012062000984565b62001eaa565b6026546001600160a01b03166333d6247d6200148062000790565b6040518263ffffffff1660e01b81526004016200149f91815260200190565b600060405180830381600087803b158015620014ba57600080fd5b505af1158015620014cf573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015055760405162461bcd60e51b8152600401620006a89062002d76565b6200070062001ff6565b6200151962001a5d565b6001600160a01b038116620015805760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006a8565b6200158b8162001df9565b50565b60225460ff1615620015b45760405162461bcd60e51b8152600401620006a89062002e72565b60225463ffffffff6101009091048116908616036200162b5760405162461bcd60e51b815260206004820152603d602482015260008051602062004b3183398151915260448201527f2044657374696e6174696f6e2063616e6e6f7420626520697473656c660000006064820152608401620006a8565b60008060606001600160a01b038916620016bd57853414620016b35760405162461bcd60e51b81526020600482015260446024820181905260008051602062004b31833981519152908201527f20416d6f756e7420646f6573206e6f74206d61746368206d6573736167652e76606482015263616c756560e01b608482015260a401620006a8565b600091506200191f565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200177c57604051632770a7eb60e21b81526001600160a01b038b1690639dc29fac90620017349033908b90600401620030c5565b600060405180830381600087803b1580156200174f57600080fd5b505af115801562001764573d6000803e3d6000fd5b5050505080602001519350806000015192506200191d565b84156200179157620017918a888888620020a5565b620017a86001600160a01b038b1633308a620024c9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620017ff573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018299190810190620031ff565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001868573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018929190810190620031ff565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620018d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018f7919062003237565b6040516020016200190b9392919062003088565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200196198979695949392919062003192565b60405180910390a1620019866200145f600084868c8c8c888051906020012062000984565b6026546001600160a01b03166333d6247d620019a162000790565b6040518263ffffffff1660e01b8152600401620019c091815260200190565b600060405180830381600087803b158015620019db57600080fd5b505af1158015620019f0573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001a255760405162461bcd60e51b8152600401620006a89062002e72565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006a8565b62001aca8a63ffffffff16620011ca565b1562001b215760405162461bcd60e51b8152602060048201526030602482015260008051602062004b1183398151915260448201526f08105b1c9958591e4818db185a5b595960821b6064820152608401620006a8565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001b95573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001bbb919062003257565b90508060000362001c1e5760405162461bcd60e51b8152602060048201526037602482015260008051602062004b118339815191526044820152760811db1bd8985b115e1a5d149bdbdd081a5b9d985b1a59604a1b6064820152608401620006a8565b60225463ffffffff878116610100909204161462001ca05760405162461bcd60e51b8152602060048201526043602482015260008051602062004b1183398151915260448201527f2044657374696e6174696f6e206e6574776f726b20646f6573206e6f74206d616064820152620e8c6d60eb1b608482015260a401620006a8565b602254600090610100900463ffffffff1662001cbe57508862001cc1565b50895b62001cec62001cdd848b8b8b8b8b8b8051906020012062000984565b8e8e63ffffffff168462000883565b620019f05760405162461bcd60e51b8152602060048201526032602482015260008051602062004b118339815191526044820152711024b73b30b634b21039b6ba10383937b7b360711b6064820152608401620006a8565b600062001d546101008362002e3f565b9050600062001d6661010084620030de565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001df35760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006a8565b62000700335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62001ea58363a9059cbb60e01b848460405160240162001e6d929190620030c5565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262002503565b505050565b80600162001ebb602060026200336e565b62001ec791906200337c565b6021541062001f2c5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d65726b6c65604482015269081d1c995948199d5b1b60b21b6064820152608401620006a8565b60016021600082825462001f41919062003396565b909155505060215460005b602081101562001feb578160011660010362001f8157826001826020811062001f795762001f7962002dfd565b015550505050565b6001816020811062001f975762001f9762002dfd565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001fd4919062002e3f565b91508062001fe28162002e56565b91505062001f4c565b5062001ea5620033b1565b60225460ff16620020705760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006a8565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000620020e883838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620025dc92505050565b9050632afa533160e01b6001600160e01b0319821601620022dd5760008080808080806200211a896004818d620033c7565b810190620021299190620033f3565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200216b5760405162461bcd60e51b8152600401620006a8906200344e565b6001600160a01b0386163014620021965760405162461bcd60e51b8152600401620006a890620034ab565b8a8514620022095760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205065726044820152780dad2e840c2dadeeadce840c8decae640dcdee840dac2e8c6d603b1b6064820152608401620006a8565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162002289919062002f72565b6000604051808303816000865af19150503d8060008114620022c8576040519150601f19603f3d011682016040523d82523d6000602084013e620022cd565b606091505b50505050505050505050620024c2565b6001600160e01b031981166323f2ebc360e21b14620023535760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e6f7460448201526a081d985b1a590818d85b1b60aa1b6064820152608401620006a8565b6000808080808080806200236b8a6004818e620033c7565b8101906200237a91906200350d565b97509750975097509750975097509750336001600160a01b0316886001600160a01b031614620023be5760405162461bcd60e51b8152600401620006a8906200344e565b6001600160a01b0387163014620023e95760405162461bcd60e51b8152600401620006a890620034ab565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162002472919062002f72565b6000604051808303816000865af19150503d8060008114620024b1576040519150601f19603f3d011682016040523d82523d6000602084013e620024b6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d269085906323b872dd60e01b9060840162001e6d565b60006200255a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620025e39092919063ffffffff16565b80519091501562001ea557808060200190518101906200257b919062003599565b62001ea55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006a8565b6020015190565b60606200097c848460008585600080866001600160a01b031685876040516200260d919062002f72565b60006040518083038185875af1925050503d80600081146200264c576040519150601f19603f3d011682016040523d82523d6000602084013e62002651565b606091505b509150915062002664878383876200266f565b979650505050505050565b60608315620026e3578251600003620026db576001600160a01b0385163b620026db5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006a8565b50816200097c565b6200097c8383815115620026fa5781518083602001fd5b8060405162461bcd60e51b8152600401620006a89190620035b9565b61154280620035cf83390190565b6001600160a01b03811681146200158b57600080fd5b8035620027478162002724565b919050565b803563ffffffff811681146200274757600080fd5b60008083601f8401126200277457600080fd5b5081356001600160401b038111156200278c57600080fd5b602083019150836020828501011115620027a557600080fd5b9250929050565b60008060008060008060a08789031215620027c657600080fd5b8635620027d38162002724565b9550620027e3602088016200274c565b94506040870135620027f58162002724565b93506060870135925060808701356001600160401b038111156200281857600080fd5b6200282689828a0162002761565b979a9699509497509295939492505050565b600080604083850312156200284c57600080fd5b62002857836200274c565b91506020830135620028698162002724565b809150509250929050565b6000602082840312156200288757600080fd5b5035919050565b600060208284031215620028a157600080fd5b620028ac826200274c565b9392505050565b600060208284031215620028c657600080fd5b8135620028ac8162002724565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620029145762002914620028d3565b604052919050565b600082601f8301126200292e57600080fd5b813560206001600160401b038211156200294c576200294c620028d3565b8160051b6200295d828201620028e9565b92835284810182019282810190878511156200297857600080fd5b83870192505b8483101562002664578235825291830191908301906200297e565b60008060008060808587031215620029b057600080fd5b8435935060208501356001600160401b0380821115620029cf57600080fd5b620029dd888389016200291c565b9450604087013591508082168214620029f557600080fd5b509396929550929360600135925050565b60ff811681146200158b57600080fd5b600080600080600080600060e0888a03121562002a3257600080fd5b873562002a3f8162002a06565b965062002a4f602089016200274c565b9550604088013562002a618162002724565b945062002a71606089016200274c565b9350608088013562002a838162002724565b9699959850939692959460a0840135945060c09093013592915050565b60006001600160401b0382111562002abc5762002abc620028d3565b50601f01601f191660200190565b600082601f83011262002adc57600080fd5b813562002af362002aed8262002aa0565b620028e9565b81815284602083860101111562002b0957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002b4757600080fd5b8a356001600160401b038082111562002b5f57600080fd5b62002b6d8e838f016200291c565b9b5062002b7d60208e016200274c565b9a5060408d0135995060608d0135985062002b9b60808e016200274c565b975062002bab60a08e016200273a565b965062002bbb60c08e016200274c565b955062002bcb60e08e016200273a565b94506101008d013593506101208d013591508082111562002beb57600080fd5b5062002bfa8d828e0162002aca565b9150509295989b9194979a5092959850565b60008060006060848603121562002c2257600080fd5b62002c2d846200274c565b9250602084013562002c3f8162002724565b9150604084013562002c518162002724565b809150509250925092565b600080600080600080600060a0888a03121562002c7857600080fd5b62002c83886200274c565b9650602088013562002c958162002724565b955060408801356001600160401b038082111562002cb257600080fd5b62002cc08b838c0162002761565b909750955060608a013591508082111562002cda57600080fd5b5062002ce98a828b0162002761565b909450925050608088013562002cff8162002a06565b8091505092959891949750929550565b60008060006060848603121562002d2557600080fd5b62002d30846200274c565b9250602084013562002d428162002724565b915060408401356001600160401b0381111562002d5e57600080fd5b62002d6c8682870162002aca565b9150509250925092565b6020808252603a908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e5a6b45564d20636f6e7472616374000000000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002e515762002e5162002e13565b500490565b60006001820162002e6b5762002e6b62002e29565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002ef757818101518382015260200162002edd565b8381111562000d265750506000910152565b6000815180845262002f2381602086016020860162002eda565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002f699083018462002f09565b95945050505050565b6000825162002f8681846020870162002eda565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f83011262002fd957600080fd5b815162002fea62002aed8262002aa0565b8181528460208386010111156200300057600080fd5b6200097c82602083016020870162002eda565b6000806000606084860312156200302957600080fd5b83516001600160401b03808211156200304157600080fd5b6200304f8783880162002fc7565b945060208601519150808211156200306657600080fd5b50620030758682870162002fc7565b925050604084015162002c518162002a06565b6060815260006200309d606083018662002f09565b8281036020840152620030b1818662002f09565b91505060ff83166040830152949350505050565b6001600160a01b03929092168252602082015260400190565b600082620030f057620030f062002e13565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003134606083018789620030f5565b828103602084015262003149818688620030f5565b91505060ff831660408301529695505050505050565b600083516200317381846020880162002eda565b8351908301906200318981836020880162002eda565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620031e68483018762002f09565b925080851660e085015250509998505050505050505050565b6000602082840312156200321257600080fd5b81516001600160401b038111156200322957600080fd5b6200097c8482850162002fc7565b6000602082840312156200324a57600080fd5b8151620028ac8162002a06565b6000602082840312156200326a57600080fd5b5051919050565b600181815b80851115620032b257816000190482111562003296576200329662002e29565b80851615620032a457918102915b93841c939080029062003276565b509250929050565b600082620032cb575060016200074f565b81620032da575060006200074f565b8160018114620032f35760028114620032fe576200331e565b60019150506200074f565b60ff84111562003312576200331262002e29565b50506001821b6200074f565b5060208310610133831016604e8410600b841016171562003343575081810a6200074f565b6200334f838362003271565b806000190482111562003366576200336662002e29565b029392505050565b6000620028ac8383620032ba565b60008282101562003391576200339162002e29565b500390565b60008219821115620033ac57620033ac62002e29565b500190565b634e487b7160e01b600052600160045260246000fd5b60008085851115620033d857600080fd5b83861115620033e657600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200340f57600080fd5b87356200341c8162002724565b965060208801356200342e8162002724565b95506040880135945060608801359350608088013562002a838162002a06565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260408201527f6d6974206f776e6572206d757374206265207468652073656e64657200000000606082015260800190565b60208082526033908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205370656040820152726e646572206d7573742062652027746869732760681b606082015260800190565b80151581146200158b57600080fd5b600080600080600080600080610100898b0312156200352b57600080fd5b8835620035388162002724565b975060208901356200354a8162002724565b9650604089013595506060890135945060808901356200356a81620034fe565b935060a08901356200357c8162002a06565b979a969950949793969295929450505060c08201359160e0013590565b600060208284031215620035ac57600080fd5b8151620028ac81620034fe565b602081526000620028ac602083018462002f0956fe60c06040523480156200001157600080fd5b5060405162001542380380620015428339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611088620004ba60003960006104690152600081816102f9015261043301526110886000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610dc2565b60405180910390f35b61016d610168366004610e33565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e5d565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e33565b61048b565b61023d610238366004610e33565b6104ad565b005b61018161024d366004610e99565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610e99565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e33565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e33565b610531565b61016d6102ef366004610e33565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ebb565b6105ba565b61018161033c366004610f2e565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f61565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f61565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b51565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fb1565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fc9565b60405180910390fd5b6104ea8282610bfd565b5050565b60606004805461037090610f61565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fc9565b6104ea8282610caa565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611019565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b0384811660008181526020818152604080832087870390559387168083529184902080548701905592518581529092600080516020611033833981519152910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b7c610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c535760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c659190610fb1565b90915550506001600160a01b03821660008181526020818152604080832080548601905551848152600080516020611033833981519152910160405180910390a35050565b6001600160a01b038216610d0a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610d7e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192916000805160206110338339815191529101610938565b600060208083528351808285015260005b81811015610def57858101830151858201604001528201610dd3565b81811115610e01576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e2e57600080fd5b919050565b60008060408385031215610e4657600080fd5b610e4f83610e17565b946020939093013593505050565b600080600060608486031215610e7257600080fd5b610e7b84610e17565b9250610e8960208501610e17565b9150604084013590509250925092565b600060208284031215610eab57600080fd5b610eb482610e17565b9392505050565b600080600080600080600060e0888a031215610ed657600080fd5b610edf88610e17565b9650610eed60208901610e17565b95506040880135945060608801359350608088013560ff81168114610f1157600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f4157600080fd5b610f4a83610e17565b9150610f5860208401610e17565b90509250929050565b600181811c90821680610f7557607f821691505b602082108103610f9557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610fc457610fc4610f9b565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161102b5761102b610f9b565b506001019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212208b7986f78e961ad6c0885b86b24ce427045be98073c1f3d7fe18180542ab873564736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663a506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743aa264697066735822122062be758f85eced237f3de1b441a326dd10663d44821178dc699a7c83ca60affa64736f6c634300080f0033", + "deployedBytecode": "0x608060405260043610620001af5760003560e01c80637b6323c111620000e9578063bab161bf1162000090578063bab161bf1462000525578063d02103ca146200055f578063d96a15f71462000581578063dbc169761462000598578063ed6be5c914620005b0578063ee25560b14620005c7578063f2fde38b14620005f8578063ff634ed7146200061d57600080fd5b80637b6323c1146200041a57806381b1c174146200043f5780638da5cb5b146200047957806391e57e2d14620004995780639e34070f14620004b1578063a08e8a0814620004d6578063aaa13cc2146200050057600080fd5b8063318aee3d116200015a578063318aee3d14620002c557806334ac9cf214620003345780633ae0504714620003565780633da81682146200036e5780633e19704314620003935780634638554914620003b8578063647c576c14620003dd578063715018a6146200040257600080fd5b80630871e97114620001b457806315064c9614620001cd5780632072f6c514620001fe57806322e95f2c14620002165780632b5e42e714620002545780632c3f58cd14620002795780632dfdf0b5146200029e575b600080fd5b620001cb620001c5366004620027ac565b62000634565b005b348015620001da57600080fd5b50602254620001e99060ff1681565b60405190151581526020015b60405180910390f35b3480156200020b57600080fd5b50620001cb620006c9565b3480156200022357600080fd5b506200023b6200023536600462002838565b62000702565b6040516001600160a01b039091168152602001620001f5565b3480156200026157600080fd5b50620001cb6200027336600462002874565b62000755565b3480156200028657600080fd5b50620001cb620002983660046200288e565b62000764565b348015620002ab57600080fd5b50620002b660215481565b604051908152602001620001f5565b348015620002d257600080fd5b506200030f620002e4366004620028b3565b60256020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201620001f5565b3480156200034157600080fd5b506027546200023b906001600160a01b031681565b3480156200036357600080fd5b50620002b662000790565b3480156200037b57600080fd5b50620001e96200038d36600462002999565b62000883565b348015620003a057600080fd5b50620002b6620003b236600462002a16565b62000984565b348015620003c557600080fd5b50620001cb620003d736600462002b26565b62000a11565b348015620003ea57600080fd5b50620001cb620003fc36600462002c0c565b62000bb7565b3480156200040f57600080fd5b50620001cb62000d2c565b3480156200042757600080fd5b50620001cb6200043936600462002b26565b62000d42565b3480156200044c57600080fd5b506200023b6200045e36600462002874565b6024602052600090815260409020546001600160a01b031681565b3480156200048657600080fd5b50605a546001600160a01b03166200023b565b348015620004a657600080fd5b50620002b6608c5481565b348015620004be57600080fd5b50620001e9620004d036600462002874565b620011ca565b348015620004e357600080fd5b50620004ed600081565b60405160ff9091168152602001620001f5565b3480156200050d57600080fd5b506200023b6200051f36600462002c5c565b6200120f565b3480156200053257600080fd5b506022546200054990610100900463ffffffff1681565b60405163ffffffff9091168152602001620001f5565b3480156200056c57600080fd5b506026546200023b906001600160a01b031681565b620001cb6200059236600462002d0f565b62001326565b348015620005a557600080fd5b50620001cb620014d8565b348015620005bd57600080fd5b5062000549600081565b348015620005d457600080fd5b50620002b6620005e636600462002874565b60236020526000908152604090205481565b3480156200060557600080fd5b50620001cb62000617366004620028b3565b6200150f565b3480156200062a57600080fd5b50620004ed600181565b608c54341115620006b15760405162461bcd60e51b8152602060048201526047602482015260008051602062004b3183398151915260448201527f2043616e6e6f7420627269646765206d6f7265207468616e206d6178457468656064820152667242726964676560c81b608482015260a4015b60405180910390fd5b620006c18686868686866200158e565b505050505050565b6027546001600160a01b03163314620006f65760405162461bcd60e51b8152600401620006a89062002d76565b62000700620019ff565b565b60006024600084846040516020016200071d92919062002dd3565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b6200075f62001a5d565b608c55565b6200076e62001a5d565b6022805463ffffffff9092166101000264ffffffff0019909216919091179055565b602154600090819081805b60208110156200087a5782600116600103620007fb5760018160208110620007c757620007c762002dfd565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000828565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6200083560028462002e3f565b60408051602081018590529081018490529093506060016040516020818303038152906040528051906020012091508080620008719062002e56565b9150506200079b565b50919392505050565b6000846001600160401b038416825b6020811015620009755781600116600103620008ff57868181518110620008bd57620008bd62002dfd565b602002602001015183604051602001620008e1929190918252602082015260400190565b60405160208183030381529060405280519060200120925062000951565b8287828151811062000915576200091562002dfd565b602002602001015160405160200162000938929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b6200095e60028362002e3f565b9150806200096c8162002e56565b91505062000892565b5050821490505b949350505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b60225460ff161562000a375760405162461bcd60e51b8152600401620006a89062002e72565b62000a4d8a8a8a8a8a8a8a8a8a8a600162001ab9565b62000a5e8963ffffffff1662001d44565b6000836001600160a01b03168387898560405160240162000a829392919062002f37565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000ab9919062002f72565b60006040518083038185875af1925050503d806000811462000af8576040519150601f19603f3d011682016040523d82523d6000602084013e62000afd565b606091505b505090508062000b695760405162461bcd60e51b815260206004820152603060248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d4d65737361676560448201526f0e8813595cdcd859d94819985a5b195960821b6064820152608401620006a8565b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000ba295949392919062002f90565b60405180910390a15050505050505050505050565b600054610100900460ff161580801562000bd85750600054600160ff909116105b8062000bf45750303b15801562000bf4575060005460ff166001145b62000c595760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620006a8565b6000805460ff19166001179055801562000c7d576000805461ff0019166101001790555b6022805463ffffffff86166101000264ffffffff0019909116179055602680546001600160a01b038086166001600160a01b03199283161790925560278054928516929091169190911790556703782dace9d90000608c5562000cdf62001d86565b801562000d26576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b62000d3662001a5d565b62000700600062001df9565b60225460ff161562000d685760405162461bcd60e51b8152600401620006a89062002e72565b62000d7e8a8a8a8a8a8a8a8a8a8a600062001ab9565b62000d8f8963ffffffff1662001d44565b6001600160a01b03851662000e8657604080516000808252602082019092526001600160a01b03851690849060405162000dca919062002f72565b60006040518083038185875af1925050503d806000811462000e09576040519150601f19603f3d011682016040523d82523d6000602084013e62000e0e565b606091505b505090508062000e7f5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d4272696467653a3a636c61696d41737365743a20604482015274115d1a195c881d1c985b9cd9995c8819985a5b1959605a1b6064820152608401620006a8565b506200117d565b60225463ffffffff61010090910481169087160362000ebb5762000eb56001600160a01b038616848462001e4b565b6200117d565b6000868660405160200162000ed292919062002dd3565b60408051601f198184030181529181528151602092830120600081815260249093529120549091506001600160a01b031680620011155760008060008580602001905181019062000f24919062003013565b92509250925060008584848460405162000f3e9062002716565b62000f4c9392919062003088565b8190604051809103906000f590508015801562000f6d573d6000803e3d6000fd5b506040516340c10f1960e01b81529091506001600160a01b038216906340c10f199062000fa1908c908c90600401620030c5565b600060405180830381600087803b15801562000fbc57600080fd5b505af115801562000fd1573d6000803e3d6000fd5b50505050806024600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808d63ffffffff1681526020018c6001600160a01b031681525060256000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507fccd7715648d1f2bb13e158f96b5b6c3aeda555d4cb87112e274a6f28bc571d598c8c83604051620011039392919063ffffffff9390931683526001600160a01b03918216602084015216604082015260600190565b60405180910390a1505050506200117a565b6040516340c10f1960e01b81526001600160a01b038216906340c10f1990620011459088908890600401620030c5565b600060405180830381600087803b1580156200116057600080fd5b505af115801562001175573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838987878686604051620011b695949392919062002f90565b60405180910390a150505050505050505050565b600080620011db6101008462002e3f565b90506000620011ed61010085620030de565b60009283526023602052604090922054600190921b9182169091149392505050565b60008088886040516020016200122792919062002dd3565b604051602081830303815290604052805190602001209050600060ff60f81b3083604051806020016200125a9062002716565b601f1982820381018352601f90910116604081905262001287908d908d908d908d908d906020016200311e565b60408051601f1981840301815290829052620012a792916020016200315f565b604051602081830303815290604052805190602001206040516020016200130094939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60225460ff16156200134c5760405162461bcd60e51b8152600401620006a89062002e72565b60225463ffffffff610100909104811690841603620013d45760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d4272696467653a3a6272696467654d657373616760448201527f653a2044657374696e6174696f6e2063616e6e6f7420626520697473656c66006064820152608401620006a8565b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001602260019054906101000a900463ffffffff1633868634876021546040516200142898979695949392919062003192565b60405180910390a1620014656200145f6001602260019054906101000a900463ffffffff1633878734888051906020012062000984565b62001eaa565b6026546001600160a01b03166333d6247d6200148062000790565b6040518263ffffffff1660e01b81526004016200149f91815260200190565b600060405180830381600087803b158015620014ba57600080fd5b505af1158015620014cf573d6000803e3d6000fd5b50505050505050565b6027546001600160a01b03163314620015055760405162461bcd60e51b8152600401620006a89062002d76565b6200070062001ff6565b6200151962001a5d565b6001600160a01b038116620015805760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006a8565b6200158b8162001df9565b50565b60225460ff1615620015b45760405162461bcd60e51b8152600401620006a89062002e72565b60225463ffffffff6101009091048116908616036200162b5760405162461bcd60e51b815260206004820152603d602482015260008051602062004b3183398151915260448201527f2044657374696e6174696f6e2063616e6e6f7420626520697473656c660000006064820152608401620006a8565b60008060606001600160a01b038916620016bd57853414620016b35760405162461bcd60e51b81526020600482015260446024820181905260008051602062004b31833981519152908201527f20416d6f756e7420646f6573206e6f74206d61746368206d6573736167652e76606482015263616c756560e01b608482015260a401620006a8565b600091506200191f565b6001600160a01b03808a1660009081526025602090815260409182902082518084019093525463ffffffff81168352640100000000900490921691810182905290156200177c57604051632770a7eb60e21b81526001600160a01b038b1690639dc29fac90620017349033908b90600401620030c5565b600060405180830381600087803b1580156200174f57600080fd5b505af115801562001764573d6000803e3d6000fd5b5050505080602001519350806000015192506200191d565b84156200179157620017918a888888620020a5565b620017a86001600160a01b038b1633308a620024c9565b899350602260019054906101000a900463ffffffff169250896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620017ff573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018299190810190620031ff565b8a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001868573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620018929190810190620031ff565b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620018d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018f7919062003237565b6040516020016200190b9392919062003088565b60405160208183030381529060405291505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600083858b8b8b876021546040516200196198979695949392919062003192565b60405180910390a1620019866200145f600084868c8c8c888051906020012062000984565b6026546001600160a01b03166333d6247d620019a162000790565b6040518263ffffffff1660e01b8152600401620019c091815260200190565b600060405180830381600087803b158015620019db57600080fd5b505af1158015620019f0573d6000803e3d6000fd5b50505050505050505050505050565b60225460ff161562001a255760405162461bcd60e51b8152600401620006a89062002e72565b6022805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b605a546001600160a01b03163314620007005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620006a8565b62001aca8a63ffffffff16620011ca565b1562001b215760405162461bcd60e51b8152602060048201526030602482015260008051602062004b1183398151915260448201526f08105b1c9958591e4818db185a5b595960821b6064820152608401620006a8565b6026546040805160208082018d90528183018c9052825180830384018152606083019384905280519101206312bd9b1960e11b90925260648101919091526000916001600160a01b03169063257b3632906084016020604051808303816000875af115801562001b95573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001bbb919062003257565b90508060000362001c1e5760405162461bcd60e51b8152602060048201526037602482015260008051602062004b118339815191526044820152760811db1bd8985b115e1a5d149bdbdd081a5b9d985b1a59604a1b6064820152608401620006a8565b60225463ffffffff878116610100909204161462001ca05760405162461bcd60e51b8152602060048201526043602482015260008051602062004b1183398151915260448201527f2044657374696e6174696f6e206e6574776f726b20646f6573206e6f74206d616064820152620e8c6d60eb1b608482015260a401620006a8565b602254600090610100900463ffffffff1662001cbe57508862001cc1565b50895b62001cec62001cdd848b8b8b8b8b8b8051906020012062000984565b8e8e63ffffffff168462000883565b620019f05760405162461bcd60e51b8152602060048201526032602482015260008051602062004b118339815191526044820152711024b73b30b634b21039b6ba10383937b7b360711b6064820152608401620006a8565b600062001d546101008362002e3f565b9050600062001d6661010084620030de565b6000928352602360205260409092208054600190931b9092179091555050565b600054610100900460ff1662001df35760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620006a8565b62000700335b605a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62001ea58363a9059cbb60e01b848460405160240162001e6d929190620030c5565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262002503565b505050565b80600162001ebb602060026200336e565b62001ec791906200337c565b6021541062001f2c5760405162461bcd60e51b815260206004820152602a60248201527f4465706f736974436f6e74726163743a5f6465706f7369743a204d65726b6c65604482015269081d1c995948199d5b1b60b21b6064820152608401620006a8565b60016021600082825462001f41919062003396565b909155505060215460005b602081101562001feb578160011660010362001f8157826001826020811062001f795762001f7962002dfd565b015550505050565b6001816020811062001f975762001f9762002dfd565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925060028262001fd4919062002e3f565b91508062001fe28162002e56565b91505062001f4c565b5062001ea5620033b1565b60225460ff16620020705760405162461bcd60e51b815260206004820152603b60248201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160448201527f74653a206f6e6c7920696620656d657267656e637920737461746500000000006064820152608401620006a8565b6022805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b6000620020e883838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620025dc92505050565b9050632afa533160e01b6001600160e01b0319821601620022dd5760008080808080806200211a896004818d620033c7565b810190620021299190620033f3565b9650965096509650965096509650336001600160a01b0316876001600160a01b0316146200216b5760405162461bcd60e51b8152600401620006a8906200344e565b6001600160a01b0386163014620021965760405162461bcd60e51b8152600401620006a890620034ab565b8a8514620022095760405162461bcd60e51b815260206004820152603960248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205065726044820152780dad2e840c2dadeeadce840c8decae640dcdee840dac2e8c6d603b1b6064820152608401620006a8565b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162002289919062002f72565b6000604051808303816000865af19150503d8060008114620022c8576040519150601f19603f3d011682016040523d82523d6000602084013e620022cd565b606091505b50505050505050505050620024c2565b6001600160e01b031981166323f2ebc360e21b14620023535760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a204e6f7460448201526a081d985b1a590818d85b1b60aa1b6064820152608401620006a8565b6000808080808080806200236b8a6004818e620033c7565b8101906200237a91906200350d565b97509750975097509750975097509750336001600160a01b0316886001600160a01b031614620023be5760405162461bcd60e51b8152600401620006a8906200344e565b6001600160a01b0387163014620023e95760405162461bcd60e51b8152600401620006a890620034ab565b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162002472919062002f72565b6000604051808303816000865af19150503d8060008114620024b1576040519150601f19603f3d011682016040523d82523d6000602084013e620024b6565b606091505b50505050505050505050505b5050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000d269085906323b872dd60e01b9060840162001e6d565b60006200255a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620025e39092919063ffffffff16565b80519091501562001ea557808060200190518101906200257b919062003599565b62001ea55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620006a8565b6020015190565b60606200097c848460008585600080866001600160a01b031685876040516200260d919062002f72565b60006040518083038185875af1925050503d80600081146200264c576040519150601f19603f3d011682016040523d82523d6000602084013e62002651565b606091505b509150915062002664878383876200266f565b979650505050505050565b60608315620026e3578251600003620026db576001600160a01b0385163b620026db5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620006a8565b50816200097c565b6200097c8383815115620026fa5781518083602001fd5b8060405162461bcd60e51b8152600401620006a89190620035b9565b61154280620035cf83390190565b6001600160a01b03811681146200158b57600080fd5b8035620027478162002724565b919050565b803563ffffffff811681146200274757600080fd5b60008083601f8401126200277457600080fd5b5081356001600160401b038111156200278c57600080fd5b602083019150836020828501011115620027a557600080fd5b9250929050565b60008060008060008060a08789031215620027c657600080fd5b8635620027d38162002724565b9550620027e3602088016200274c565b94506040870135620027f58162002724565b93506060870135925060808701356001600160401b038111156200281857600080fd5b6200282689828a0162002761565b979a9699509497509295939492505050565b600080604083850312156200284c57600080fd5b62002857836200274c565b91506020830135620028698162002724565b809150509250929050565b6000602082840312156200288757600080fd5b5035919050565b600060208284031215620028a157600080fd5b620028ac826200274c565b9392505050565b600060208284031215620028c657600080fd5b8135620028ac8162002724565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620029145762002914620028d3565b604052919050565b600082601f8301126200292e57600080fd5b813560206001600160401b038211156200294c576200294c620028d3565b8160051b6200295d828201620028e9565b92835284810182019282810190878511156200297857600080fd5b83870192505b8483101562002664578235825291830191908301906200297e565b60008060008060808587031215620029b057600080fd5b8435935060208501356001600160401b0380821115620029cf57600080fd5b620029dd888389016200291c565b9450604087013591508082168214620029f557600080fd5b509396929550929360600135925050565b60ff811681146200158b57600080fd5b600080600080600080600060e0888a03121562002a3257600080fd5b873562002a3f8162002a06565b965062002a4f602089016200274c565b9550604088013562002a618162002724565b945062002a71606089016200274c565b9350608088013562002a838162002724565b9699959850939692959460a0840135945060c09093013592915050565b60006001600160401b0382111562002abc5762002abc620028d3565b50601f01601f191660200190565b600082601f83011262002adc57600080fd5b813562002af362002aed8262002aa0565b620028e9565b81815284602083860101111562002b0957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000806000806000806101408b8d03121562002b4757600080fd5b8a356001600160401b038082111562002b5f57600080fd5b62002b6d8e838f016200291c565b9b5062002b7d60208e016200274c565b9a5060408d0135995060608d0135985062002b9b60808e016200274c565b975062002bab60a08e016200273a565b965062002bbb60c08e016200274c565b955062002bcb60e08e016200273a565b94506101008d013593506101208d013591508082111562002beb57600080fd5b5062002bfa8d828e0162002aca565b9150509295989b9194979a5092959850565b60008060006060848603121562002c2257600080fd5b62002c2d846200274c565b9250602084013562002c3f8162002724565b9150604084013562002c518162002724565b809150509250925092565b600080600080600080600060a0888a03121562002c7857600080fd5b62002c83886200274c565b9650602088013562002c958162002724565b955060408801356001600160401b038082111562002cb257600080fd5b62002cc08b838c0162002761565b909750955060608a013591508082111562002cda57600080fd5b5062002ce98a828b0162002761565b909450925050608088013562002cff8162002a06565b8091505092959891949750929550565b60008060006060848603121562002d2557600080fd5b62002d30846200274c565b9250602084013562002d428162002724565b915060408401356001600160401b0381111562002d5e57600080fd5b62002d6c8682870162002aca565b9150509250925092565b6020808252603a908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79506f6c79676f6e5a6b45564d3a2060408201527f6f6e6c7920506f6c79676f6e5a6b45564d20636f6e7472616374000000000000606082015260800190565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008262002e515762002e5162002e13565b500490565b60006001820162002e6b5762002e6b62002e29565b5060010190565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b60005b8381101562002ef757818101518382015260200162002edd565b8381111562000d265750506000910152565b6000815180845262002f2381602086016020860162002eda565b601f01601f19169290920160200192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009062002f699083018462002f09565b95945050505050565b6000825162002f8681846020870162002eda565b9190910192915050565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b600082601f83011262002fd957600080fd5b815162002fea62002aed8262002aa0565b8181528460208386010111156200300057600080fd5b6200097c82602083016020870162002eda565b6000806000606084860312156200302957600080fd5b83516001600160401b03808211156200304157600080fd5b6200304f8783880162002fc7565b945060208601519150808211156200306657600080fd5b50620030758682870162002fc7565b925050604084015162002c518162002a06565b6060815260006200309d606083018662002f09565b8281036020840152620030b1818662002f09565b91505060ff83166040830152949350505050565b6001600160a01b03929092168252602082015260400190565b600082620030f057620030f062002e13565b500690565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062003134606083018789620030f5565b828103602084015262003149818688620030f5565b91505060ff831660408301529695505050505050565b600083516200317381846020880162002eda565b8351908301906200318981836020880162002eda565b01949350505050565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c08301819052600091620031e68483018762002f09565b925080851660e085015250509998505050505050505050565b6000602082840312156200321257600080fd5b81516001600160401b038111156200322957600080fd5b6200097c8482850162002fc7565b6000602082840312156200324a57600080fd5b8151620028ac8162002a06565b6000602082840312156200326a57600080fd5b5051919050565b600181815b80851115620032b257816000190482111562003296576200329662002e29565b80851615620032a457918102915b93841c939080029062003276565b509250929050565b600082620032cb575060016200074f565b81620032da575060006200074f565b8160018114620032f35760028114620032fe576200331e565b60019150506200074f565b60ff84111562003312576200331262002e29565b50506001821b6200074f565b5060208310610133831016604e8410600b841016171562003343575081810a6200074f565b6200334f838362003271565b806000190482111562003366576200336662002e29565b029392505050565b6000620028ac8383620032ba565b60008282101562003391576200339162002e29565b500390565b60008219821115620033ac57620033ac62002e29565b500190565b634e487b7160e01b600052600160045260246000fd5b60008085851115620033d857600080fd5b83861115620033e657600080fd5b5050820193919092039150565b600080600080600080600060e0888a0312156200340f57600080fd5b87356200341c8162002724565b965060208801356200342e8162002724565b95506040880135945060608801359350608088013562002a838162002a06565b6020808252603c908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a2050657260408201527f6d6974206f776e6572206d757374206265207468652073656e64657200000000606082015260800190565b60208082526033908201527f506f6c79676f6e5a6b45564d4272696467653a3a5f7065726d69743a205370656040820152726e646572206d7573742062652027746869732760681b606082015260800190565b80151581146200158b57600080fd5b600080600080600080600080610100898b0312156200352b57600080fd5b8835620035388162002724565b975060208901356200354a8162002724565b9650604089013595506060890135945060808901356200356a81620034fe565b935060a08901356200357c8162002a06565b979a969950949793969295929450505060c08201359160e0013590565b600060208284031215620035ac57600080fd5b8151620028ac81620034fe565b602081526000620028ac602083018462002f0956fe60c06040523480156200001157600080fd5b5060405162001542380380620015428339810160408190526200003491620002ad565b82826003620000448382620003c1565b506004620000538282620003c1565b5050600580546001600160a81b0319163360ff60a01b191617600160a01b60ff851602179055504660808190526200008b9062000098565b60a052506200048d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c562000146565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b606060038054620001579062000332565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000332565b8015620001d65780601f10620001aa57610100808354040283529160200191620001d6565b820191906000526020600020905b815481529060010190602001808311620001b857829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020857600080fd5b81516001600160401b0380821115620002255762000225620001e0565b604051601f8301601f19908116603f01168101908282118183101715620002505762000250620001e0565b816040528381526020925086838588010111156200026d57600080fd5b600091505b8382101562000291578582018301518183018401529082019062000272565b83821115620002a35760008385830101525b9695505050505050565b600080600060608486031215620002c357600080fd5b83516001600160401b0380821115620002db57600080fd5b620002e987838801620001f6565b945060208601519150808211156200030057600080fd5b506200030f86828701620001f6565b925050604084015160ff811681146200032757600080fd5b809150509250925092565b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd620001e0565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611088620004ba60003960006104690152600081816102f9015261043301526110886000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102ce578063a9059cbb146102e1578063cd0d0096146102f4578063d505accf1461031b578063dd62ed3e1461032e578063ffa1ad741461034157600080fd5b806370a082311461023f5780637ecebe001461026857806395d89b41146102885780639dc29fac14610290578063a3c573eb146102a357600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e5151461020f578063395093511461021757806340c10f191461022a57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610361565b6040516101519190610dc2565b60405180910390f35b61016d610168366004610e33565b6103f3565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610e5d565b61040b565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600554600160a01b900460ff1660405160ff9091168152602001610151565b61018161042f565b61016d610225366004610e33565b61048b565b61023d610238366004610e33565b6104ad565b005b61018161024d366004610e99565b6001600160a01b031660009081526020819052604090205490565b610181610276366004610e99565b60066020526000908152604090205481565b6101446104ee565b61023d61029e366004610e33565b6104fd565b6005546102b6906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61016d6102dc366004610e33565b610531565b61016d6102ef366004610e33565b6105ac565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61023d610329366004610ebb565b6105ba565b61018161033c366004610f2e565b6107f5565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461037090610f61565b80601f016020809104026020016040519081016040528092919081815260200182805461039c90610f61565b80156103e95780601f106103be576101008083540402835291602001916103e9565b820191906000526020600020905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b600033610401818585610820565b5060019392505050565b600033610419858285610945565b6104248585856109bf565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146104665761046146610b51565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60003361040181858561049e83836107f5565b6104a89190610fb1565b610820565b6005546001600160a01b031633146104e05760405162461bcd60e51b81526004016104d790610fc9565b60405180910390fd5b6104ea8282610bfd565b5050565b60606004805461037090610f61565b6005546001600160a01b031633146105275760405162461bcd60e51b81526004016104d790610fc9565b6104ea8282610caa565b6000338161053f82866107f5565b90508381101561059f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104d7565b6104248286868403610820565b6000336104018185856109bf565b834211156106165760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b60648201526084016104d7565b6001600160a01b038716600090815260066020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661066383611019565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106c161042f565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801561074c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107825750896001600160a01b0316816001600160a01b0316145b6107de5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b60648201526084016104d7565b6107e98a8a8a610820565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d7565b6001600160a01b0382166108e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061095184846107f5565b905060001981146109b957818110156109ac5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6109b98484848403610820565b50505050565b6001600160a01b038316610a235760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d7565b6001600160a01b038216610a855760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d7565b6001600160a01b03831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104d7565b6001600160a01b0384811660008181526020818152604080832087870390559387168083529184902080548701905592518581529092600080516020611033833981519152910160405180910390a36109b9565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b7c610361565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610c535760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b8060026000828254610c659190610fb1565b90915550506001600160a01b03821660008181526020818152604080832080548601905551848152600080516020611033833981519152910160405180910390a35050565b6001600160a01b038216610d0a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104d7565b6001600160a01b03821660009081526020819052604090205481811015610d7e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192916000805160206110338339815191529101610938565b600060208083528351808285015260005b81811015610def57858101830151858201604001528201610dd3565b81811115610e01576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e2e57600080fd5b919050565b60008060408385031215610e4657600080fd5b610e4f83610e17565b946020939093013593505050565b600080600060608486031215610e7257600080fd5b610e7b84610e17565b9250610e8960208501610e17565b9150604084013590509250925092565b600060208284031215610eab57600080fd5b610eb482610e17565b9392505050565b600080600080600080600060e0888a031215610ed657600080fd5b610edf88610e17565b9650610eed60208901610e17565b95506040880135945060608801359350608088013560ff81168114610f1157600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f4157600080fd5b610f4a83610e17565b9150610f5860208401610e17565b90509250929050565b600181811c90821680610f7557607f821691505b602082108103610f9557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610fc457610fc4610f9b565b500190565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b60006001820161102b5761102b610f9b565b506001019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212208b7986f78e961ad6c0885b86b24ce427045be98073c1f3d7fe18180542ab873564736f6c634300080f0033506f6c79676f6e5a6b45564d4272696467653a3a5f7665726966794c6561663a506f6c79676f6e5a6b45564d4272696467653a3a62726964676541737365743aa264697066735822122062be758f85eced237f3de1b441a326dd10663d44821178dc699a7c83ca60affa64736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/compiled-contracts/PolygonZkEVMMock.json b/compiled-contracts/PolygonZkEVMMock.json index 69b5b27e9..7b28508e5 100644 --- a/compiled-contracts/PolygonZkEVMMock.json +++ b/compiled-contracts/PolygonZkEVMMock.json @@ -1693,8 +1693,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50615f0980620000216000396000f3fe608060405234801561001057600080fd5b50600436106103925760003560e01c806396dc3d39116101e0578063cfa8ed4711610110578063e7a7ed02116100a8578063e7a7ed0214610905578063e8bf92ed1461091f578063eaeb077b14610932578063edc4112114610945578063f14916d614610958578063f2fde38b1461096b578063f851a4401461097e578063f8b823e414610991578063fe16564f1461099a57600080fd5b8063cfa8ed4714610860578063d02103ca1461087a578063d8d1091b1461088d578063d8f54db0146108a0578063d939b315146108b4578063dbc16976146108ce578063e0d17441146108d6578063e11f3f18146108e9578063e217cfd6146108fc57600080fd5b8063ab9fc5ef11610183578063ab9fc5ef14610759578063adc879e914610763578063afd23cbe1461077d578063b4d63f58146107a5578063b6b0b09714610805578063c0cad3021461081f578063c0ed84e014610832578063c89e42df1461083a578063cf1363061461084d57600080fd5b806396dc3d39146106dd57806399f5634e146106f05780639b796760146106f85780639c9f3dfe1461070b5780639eb831b91461071e5780639f0d039d14610726578063a3c573eb1461072e578063aa58bad61461074157600080fd5b80634a910e6a116102c6578063715018a61161025e578063715018a6146105e65780637215541a146105ee57806375c508b3146106015780637fcb365314610614578063837a473814610627578063841b24d7146106955780638b48931e146106af5780638c4a0af7146106b95780638da5cb5b146106cc57600080fd5b80634a910e6a1461052c5780635392c5e01461053f578063542028d51461055f5780635437988d14610567578063574f649e1461057a57806360943d6a1461058d5780636b8616ce146105a05780636ff512cc146105c0578063704b6c02146105d357600080fd5b80632d0889d3116103395780632d0889d314610475578063383b3be81461047f578063394218e9146104925780633c158267146104a5578063423fa856146104b857806345605267146104d2578063458c0477146104ec5780634834a343146104ff5780634a1a89a71461051257600080fd5b80630eaa86ea14610397578063107bf28c146103bd57806310a01a72146103d257806315064c96146103e75780631816b7e51461040457806319d8ac6114610417578063220d7899146104425780632987898314610455575b600080fd5b6103aa6103a5366004614c6b565b6109ad565b6040519081526020015b60405180910390f35b6103c5610b7c565b6040516103b49190614d18565b6103e56103e0366004614d5a565b610c0a565b005b6065546103f49060ff1681565b60405190151581526020016103b4565b6103e5610412366004614de7565b610e53565b60685461042a906001600160401b031681565b6040516001600160401b0390911681526020016103b4565b6103c5610450366004614e0b565b610f74565b606a54610468906001600160a01b031681565b6040516103b49190614e58565b6103aa620493e081565b6103f461048d366004614e6c565b611115565b6103e56104a0366004614e6c565b61115c565b6103e56104b3366004614fa9565b611318565b60685461042a90600160401b90046001600160401b031681565b60685461042a90600160801b90046001600160401b031681565b60725461042a906001600160401b031681565b6103e561050d366004614d5a565b611adf565b60725461042a90600160401b90046001600160401b031681565b6103e561053a366004614e6c565b611e27565b6103aa61054d366004614e6c565b606d6020526000908152604090205481565b6103c56120c1565b6103e56105753660046150d4565b6120ce565b6103aa6105883660046150f1565b6120f8565b6103e561059b366004615166565b61213b565b6103aa6105ae366004614e6c565b60666020526000908152604090205481565b6103e56105ce3660046150d4565b612496565b6103e56105e13660046150d4565b612514565b6103e5612589565b6103e56105fc366004614e6c565b61259d565b6103e561060f36600461523d565b6127a7565b60695461042a906001600160401b031681565b61066a6106353660046152db565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103b4565b60725461042a90600160c01b90046001600160401b031681565b61042a62093a8081565b6103e56106c7366004615302565b612836565b6033546001600160a01b0316610468565b6103e56106eb366004614e6c565b6128ad565b6103aa6128d7565b6103e5610706366004614e6c565b6129bf565b6103e5610719366004614e6c565b6129f4565b6103aa600c81565b6074546103aa565b607054610468906001600160a01b031681565b60655461042a9061010090046001600160401b031681565b61042a6206978081565b606c5461042a90600160a81b90046001600160401b031681565b60655461079290600160481b900461ffff1681565b60405161ffff90911681526020016103b4565b6107e06107b3366004614e6c565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103b4565b60655461046890600160581b90046001600160a01b031681565b6103e561082d36600461531f565b612ba2565b61042a612bba565b6103e561084836600461531f565b612c07565b6103e561085b366004614e6c565b612c6d565b60695461046890600160401b90046001600160a01b031681565b606c54610468906001600160a01b031681565b6103e561089b366004615353565b612cee565b606c546103f490600160a01b900460ff1681565b60725461042a90600160801b90046001600160401b031681565b6103e56131ad565b6103e56108e4366004615445565b613269565b6103e56108f736600461523d565b6132db565b61042a6103e881565b60685461042a90600160c01b90046001600160401b031681565b606b54610468906001600160a01b031681565b6103e5610940366004615492565b61341f565b6103e5610953366004614d5a565b613748565b6103e56109663660046150d4565b613867565b6103e56109793660046150d4565b6138dc565b607354610468906001600160a01b031681565b6103aa60745481565b6103e56109a83660046154d6565b613952565b60008060006109ba612bba565b90506001600160401b03881615610a57576072546001600160401b039081169089161115610a035760405162461bcd60e51b81526004016109fa90615502565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610a515760405162461bcd60e51b81526004016109fa90615580565b50610ac1565b6001600160401b0387166000908152606d6020526040902054915081610a8f5760405162461bcd60e51b81526004016109fa906155e0565b806001600160401b0316876001600160401b03161115610ac15760405162461bcd60e51b81526004016109fa90615637565b806001600160401b0316866001600160401b031611610af25760405162461bcd60e51b81526004016109fa906156a8565b6000610b018888888689610f74565b90506000600080516020615e94833981519152600283604051610b249190615725565b602060405180830381855afa158015610b41573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610b649190615741565b610b6e9190615770565b9a9950505050505050505050565b606f8054610b8990615784565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb590615784565b8015610c025780601f10610bd757610100808354040283529160200191610c02565b820191906000526020600020905b815481529060010190602001808311610be557829003601f168201915b505050505081565b610c12613974565b600080610c1d612bba565b90506001600160401b038a1615610cb1576072546001600160401b03908116908b161115610c5d5760405162461bcd60e51b81526004016109fa90615502565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610cab5760405162461bcd60e51b81526004016109fa90615580565b50610d1b565b6001600160401b0389166000908152606d6020526040902054915081610ce95760405162461bcd60e51b81526004016109fa906155e0565b806001600160401b0316896001600160401b03161115610d1b5760405162461bcd60e51b81526004016109fa90615637565b806001600160401b0316886001600160401b031611610d4c5760405162461bcd60e51b81526004016109fa906156a8565b6000610d5b8a8a8a868b610f74565b606980546001600160401b0319166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610da857607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610dee57600080fd5b505af1158015610e02573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610e7d5760405162461bcd60e51b81526004016109fa906157be565b6103e88161ffff1610158015610e9857506104008161ffff16105b610f1d5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a4016109fa565b6065805461ffff60481b1916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610fa657508115155b61101a576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109fa565b8061108f576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109fa565b606c54604080516001600160601b03193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b038281166000908152607160205260408120549092429261114b92600160801b90920481169116615817565b6001600160401b0316111592915050565b6073546001600160a01b031633146111865760405162461bcd60e51b81526004016109fa906157be565b62093a806001600160401b038216111561121f5760405162461bcd60e51b815260206004820152604e60248201527f506f6c79676f6e5a6b45564d3a3a73657454727573746564416767726567617460448201527f6f7254696d656f75743a20457863656564206d61782068616c7420616767726560648201526d19d85d1a5bdb881d1a5b595bdd5d60921b608482015260a4016109fa565b60655460ff166112c2576072546001600160401b03600160c01b9091048116908216106112c25760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a204e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109fa565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610f69565b60655460ff161561133b5760405162461bcd60e51b81526004016109fa90615842565b606954600160401b90046001600160a01b031633146113c25760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a204f6e6c7920747275737465642073657175656e63657200000000000060648201526084016109fa565b8051806114375760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e6365203120626174636800000060648201526084016109fa565b6103e881106114b0576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e79206261746368657360648201526084016109fa565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b85811015611915576000878281518110611503576115036158aa565b60200260200101519050600081606001516001600160401b03161115611693578361152d816158c0565b94505060008160000151805190602001208260200151836060015160405160200161155a939291906158e6565b60408051601f1981840301815291815281516020928301206001600160401b0388166000908152606690935291205490915081146115ee5760405162461bcd60e51b815260206004820152603d6024820152600080516020615eb483398151915260448201527f6f7263656420626174636865732064617461206d757374206d6174636800000060648201526084016109fa565b81606001516001600160401b031682604001516001600160401b0316101561168d5760405162461bcd60e51b81526020600482015260586024820152600080516020615eb483398151915260448201527f6f7263656420626174636865732074696d657374616d70206d757374206265206064820152773134b3b3b2b91037b91032b8bab0b6103a3430b71036b4b760411b608482015260a4016109fa565b50611808565b6020810151158061171c5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916116d69160040190815260200190565b6020604051808303816000875af11580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117199190615741565b15155b61178e5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d75737420657869737400000000000060648201526084016109fa565b805151620493e0116118085760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016109fa565b856001600160401b031681604001516001600160401b03161015801561183b57504281604001516001600160401b031611155b6118ad5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e676500000060648201526084016109fa565b805180516020918201208183015160408085015190516118d4948894939291339101615909565b60405160208183030381529060405280519060200120925084806118f7906158c0565b9550508060400151955050808061190d90615948565b9150506114e7565b506068546001600160401b03600160c01b909104811690831611156119885760405162461bcd60e51b81526020600482015260356024820152600080516020615eb48339815191526044820152746f7263652062617463686573206f766572666c6f7760581b60648201526084016109fa565b6068546000906119a890600160801b90046001600160401b031684615961565b6119bb906001600160401b031687615989565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611a9090339030908490611a7591906159a0565b606554600160581b90046001600160a01b03169291906139ce565b611a98613a39565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b025760405162461bcd60e51b81526004016109fa90615842565b6072546001600160401b038781166000908152606760205260409020600101544292611b3992600160c01b90910481169116615817565b6001600160401b03161115611bc25760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2054727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a4016109fa565b6103e8611bcf8888615961565b6001600160401b031610611c4b5760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2043616e60448201527f6e6f74207665726966792074686174206d616e7920626174636865730000000060648201526084016109fa565b611c5b8888888888888888613ad9565b611c6486613fca565b607254600160801b90046001600160401b0316600003611d2b57606980546001600160401b0319166001600160401b038881169182179092556000908152606d602052604090208590556072541615611cc857607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d0e57600080fd5b505af1158015611d22573d6000803e3d6000fd5b50505050611ddc565b611d33613a39565b607280546001600160401b0316906000611d4c836158c0565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611e5457506072546001600160401b03600160401b9091048116908216115b8015611e6f57506072546001600160401b0390811690821611155b611eed5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a4016109fa565b606a546001600160a01b03163314611f9757611f0881611115565b611f975760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2050656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a4016109fa565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b928390049098166001600160401b0319909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b15801561205357600080fd5b505af1158015612067573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e84600201546040516120b491815260200190565b60405180910390a3505050565b606e8054610b8990615784565b6120d6613974565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b600085858051906020012085858560405160200161211a959493929190615909565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff161580801561215b5750600054600160ff909116105b806121755750303b158015612175575060005460ff166001145b6121d85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109fa565b6000805460ff1916600117905580156121fb576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c81169190911790925560658054600160581b600160f81b031916600160581b8c851602179055606b805482168a84161790556070805490911691881691909117905561226360208601866150d4565b607380546001600160a01b0319166001600160a01b039290921691909117905561229360608601604087016150d4565b606980546001600160a01b0392909216600160401b02600160401b600160e01b03199092169190911790556122ce60c0860160a087016150d4565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa71135684905561232b60e0860160c08701614e6c565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556123626040860160208701614e6c565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561239e6080860160608701614e6c565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b199092169190911790556123da60a0860160808701615302565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e6124028482615a05565b50606f61240f8382615a05565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124456141b0565b801561248b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b031633146124c05760405162461bcd60e51b81526004016109fa906157be565b60698054600160401b600160e01b031916600160401b6001600160a01b038416021790556040517ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090610f69908390614e58565b6073546001600160a01b0316331461253e5760405162461bcd60e51b81526004016109fa906157be565b607380546001600160a01b0319166001600160a01b0383161790556040517f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190610f69908390614e58565b612591613974565b61259b6000614220565b565b6033546001600160a01b0316331461279c5760006125b9612bba565b9050806001600160401b0316826001600160401b0316116126305760405162461bcd60e51b815260206004820152603c6024820152600080516020615e1483398151915260448201527f746174653a20426174636820616c72656164792076657269666965640000000060648201526084016109fa565b6068546001600160401b03600160401b90910481169083161180159061267257506001600160401b038083166000908152606760205260409020600101541615155b6126eb5760405162461bcd60e51b81526020600482015260506024820152600080516020615e1483398151915260448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a4016109fa565b6001600160401b0380831660009081526067602052604090206001015442916127199162093a809116615817565b6001600160401b0316111561279a5760405162461bcd60e51b815260206004820152604d6024820152600080516020615e1483398151915260448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a4016109fa565b505b6127a4614272565b50565b60655460ff16156127ca5760405162461bcd60e51b81526004016109fa90615842565b6127db8989898989898989896142e2565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a161248b614272565b6073546001600160a01b031633146128605760405162461bcd60e51b81526004016109fa906157be565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610f6990831515815260200190565b6128b5613974565b606980546001600160401b0319166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81526000918291600160581b9091046001600160a01b0316906370a0823190612912903090600401614e58565b602060405180830381865afa15801561292f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129539190615741565b9050600061295f612bba565b6068546001600160401b03600160401b820481169161298f91600160801b8204811691600160c01b900416615961565b6129999190615817565b6129a39190615961565b6001600160401b031690506129b88183615ac4565b9250505090565b6129c7613974565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612a1e5760405162461bcd60e51b81526004016109fa906157be565b62093a806001600160401b0382161115612ab25760405162461bcd60e51b815260206004820152604960248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a20457863656564206d61782068616c74206167677265676174696f6064820152681b881d1a5b595bdd5d60ba1b608482015260a4016109fa565b60655460ff16612b47576072546001600160401b03600160801b909104811690821610612b475760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a204e65772074696d656f7574206d757374206265206c6f7765720060648201526084016109fa565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610f69565b612baa613974565b606f612bb68282615a05565b5050565b6072546000906001600160401b031615612bf757506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612c315760405162461bcd60e51b81526004016109fa906157be565b606e612c3d8282615a05565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610f699190614d18565b6073546001600160a01b03163314612c975760405162461bcd60e51b81526004016109fa906157be565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610f69565b60655460ff1615612d115760405162461bcd60e51b81526004016109fa90615842565b606c54600160a01b900460ff161515600114612d3f5760405162461bcd60e51b81526004016109fa90615ad8565b805180612da25760405162461bcd60e51b815260206004820152603f6024820152600080516020615e7483398151915260448201527f65733a204d75737420666f726365206174206c6561737420312062617463680060648201526084016109fa565b6103e88110612e135760405162461bcd60e51b81526020600482015260436024820152600080516020615e7483398151915260448201527f65733a2043616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a4016109fa565b6068546001600160401b03600160c01b8204811691612e3b918491600160801b900416615b41565b1115612e975760405162461bcd60e51b81526020600482015260376024820152600080516020615e74833981519152604482015276195cce88119bdc98d94818985d18da081a5b9d985b1a59604a1b60648201526084016109fa565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b848110156130c5576000868281518110612ee457612ee46158aa565b602002602001015190508380612ef9906158c0565b945050600081600001518051906020012082602001518360400151604051602001612f26939291906158e6565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612fc55760405162461bcd60e51b81526020600482015260426024820152600080516020615e7483398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109fa565b612fd0600188615989565b83036130675742620697808360400151612fea9190615817565b6001600160401b031611156130675760405162461bcd60e51b81526020600482015260496024820152600080516020615e7483398151915260448201527f65733a20466f72636564206261746368206973206e6f7420696e2074696d656f6064820152681d5d081c195c9a5bd960ba1b608482015260a4016109fa565b815180516020918201208184015160405161308a93889392914291339101615909565b60405160208183030381529060405280519060200120935085806130ad906158c0565b965050505080806130bd90615948565b915050612ec8565b50606880546001600160401b031916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b0319909216919091179286168502929092179091558554600160401b600160c01b03191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166131cf5760405162461bcd60e51b81526004016109fa90615b59565b6073546001600160a01b031633146131f95760405162461bcd60e51b81526004016109fa906157be565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561324957600080fd5b505af115801561325d573d6000803e3d6000fd5b5050505061259b614906565b613271613974565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133055760405162461bcd60e51b81526004016109fa90615bb6565b6133168989898989898989896142e2565b606980546001600160401b0319166001600160401b038881169182179092556000908152606d60205260409020859055607254161561336057607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156133a657600080fd5b505af11580156133ba573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff16156134425760405162461bcd60e51b81526004016109fa90615842565b606c54600160a01b900460ff1615156001146134705760405162461bcd60e51b81526004016109fa90615ad8565b600061347b60745490565b9050818111156134e05760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a204e6f7420656e6044820152696f756768206d6174696360b01b60648201526084016109fa565b620493e08351106135515760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b60648201526084016109fa565b60655461357090600160581b90046001600160a01b03163330846139ce565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa1580156135ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135de9190615741565b60688054919250600160c01b9091046001600160401b0316906018613602836158c0565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505083805190602001208142604051602001613643939291906158e6565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b0316600090815260669093529120553233036136e757606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613742565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161373993929190615c13565b60405180910390a25b50505050565b606a546001600160a01b031633146137725760405162461bcd60e51b81526004016109fa90615bb6565b6137828888888888888888613ad9565b606980546001600160401b0319166001600160401b038881169182179092556000908152606d6020526040902085905560725416156137cc57607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561381257600080fd5b505af1158015613826573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e15565b6073546001600160a01b031633146138915760405162461bcd60e51b81526004016109fa906157be565b606a80546001600160a01b0319166001600160a01b0383161790556040517f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90610f69908390614e58565b6138e4613974565b6001600160a01b0381166139495760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109fa565b6127a481614220565b61395a613974565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b0316331461259b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109fa565b6040516001600160a01b03808516602483015283166044820152606481018290526137429085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261495d565b6072546001600160401b03600160401b820481169116111561259b57607254600090613a7690600160401b90046001600160401b03166001615817565b9050613a8181611115565b156127a457607254600090600290613aa39084906001600160401b0316615961565b613aad9190615c46565b613ab79083615817565b9050613ac281611115565b15613ad057612bb681611e27565b612bb682611e27565b600080613ae4612bba565b90506001600160401b038a1615613c4a576072546001600160401b03908116908b161115613b9c5760405162461bcd60e51b815260206004820152605960248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20706560448201527f6e64696e6753746174654e756d206d757374206265206c657373206f7220657160648201527875616c207468616e206c61737450656e64696e67537461746560381b608482015260a4016109fa565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c445760405162461bcd60e51b815260206004820152604d6024820152600080516020615e3483398151915260448201527f69744e756d4261746368206d757374206d61746368207468652070656e64696e60648201526c0ce40e6e8c2e8ca40c4c2e8c6d609b1b608482015260a4016109fa565b50613d70565b6001600160401b0389166000908152606d6020526040902054915081613cd45760405162461bcd60e51b815260206004820152604460248201819052600080516020615e34833981519152908201527f69744e756d426174636820737461746520726f6f7420646f6573206e6f7420656064820152631e1a5cdd60e21b608482015260a4016109fa565b806001600160401b0316896001600160401b03161115613d705760405162461bcd60e51b815260206004820152605e6024820152600080516020615e3483398151915260448201527f69744e756d4261746368206d757374206265206c657373206f7220657175616c60648201527f207468616e2063757272656e744c617374566572696669656442617463680000608482015260a4016109fa565b806001600160401b0316886001600160401b031611613e185760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20666960448201527f6e616c4e65774261746368206d75737420626520626967676572207468616e206064820152770c6eae4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d60431b608482015260a4016109fa565b6000613e278a8a8a868b610f74565b90506000600080516020615e94833981519152600283604051613e4a9190615725565b602060405180830381855afa158015613e67573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613e8a9190615741565b613e949190615770565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613ed8918b918b918b9190600401615c6c565b602060405180830381865afa158015613ef5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f199190615ce6565b613f795760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20496e60448201526a3b30b634b210383937b7b360a91b60648201526084016109fa565b613fbc33613f87858d615961565b6001600160401b0316613f986128d7565b613fa291906159a0565b606554600160581b90046001600160a01b03169190614a34565b505050505050505050505050565b6000613fd4612bba565b905081600080613fe48484615961565b6001600160401b031690505b836001600160401b0316836001600160401b031614614096576001600160401b03808416600090815260676020526040902060655460018201549192610100909104811691614040911642615989565b111561407b57600181015461406590600160401b90046001600160401b031685615961565b614078906001600160401b031684615b41565b92505b60010154600160401b90046001600160401b03169250613ff0565b60006140a28383615989565b90508281101561411c5760006140b88285615989565b9050600c81116140c857806140cb565b600c5b90506140d88160036159a0565b6140e390600a615de7565b6065546140fc908390600160481b900461ffff16615de7565b60745461410991906159a0565b6141139190615ac4565b607455506141a8565b60006141288483615989565b9050600c8111614138578061413b565b600c5b9050600061414a8260036159a0565b61415590600a615de7565b60655461416e908490600160481b900461ffff16615de7565b60745461417b91906159a0565b6141859190615ac4565b90508060745460745461419891906159a0565b6141a29190615ac4565b60745550505b505050505050565b600054610100900460ff1661421b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109fa565b61259b335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156142c257600080fd5b505af11580156142d6573d6000803e3d6000fd5b5050505061259b614a64565b60006001600160401b038a1615614452576072546001600160401b03908116908b16111561439a5760405162461bcd60e51b81526020600482015260656024820152600080516020615e5483398151915260448201527f696e6753746174653a2070656e64696e6753746174654e756d206d757374206260648201527f65206c657373206f7220657175616c207468616e206c61737450656e64696e67608482015264537461746560d81b60a482015260c4016109fa565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b909204161461444c5760405162461bcd60e51b81526020600482015260596024820152600080516020615e5483398151915260448201527f696e6753746174653a20696e69744e756d4261746368206d757374206d6174636064820152780d040e8d0ca40e0cadcc8d2dcce40e6e8c2e8ca40c4c2e8c6d603b1b608482015260a4016109fa565b5061458b565b506001600160401b0387166000908152606d6020526040902054806144e65760405162461bcd60e51b81526020600482015260506024820152600080516020615e5483398151915260448201527f696e6753746174653a20696e69744e756d426174636820737461746520726f6f60648201526f1d08191bd95cc81b9bdd08195e1a5cdd60821b608482015260a4016109fa565b6069546001600160401b03908116908916111561458b5760405162461bcd60e51b81526020600482015260636024820152600080516020615e5483398151915260448201527f696e6753746174653a20696e69744e756d4261746368206d757374206265206c60648201527f657373206f7220657175616c207468616e206c617374566572696669656442616084820152620e8c6d60eb1b60a482015260c4016109fa565b6072546001600160401b03908116908a16118015906145bb5750896001600160401b0316896001600160401b0316115b80156145dc57506072546001600160401b03600160401b9091048116908a16115b61464d5760405162461bcd60e51b81526020600482015260486024820152600080516020615e5483398151915260448201527f696e6753746174653a2066696e616c50656e64696e6753746174654e756d20696064820152671b98dbdc9c9958dd60c21b608482015260a4016109fa565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146147065760405162461bcd60e51b81526020600482015260636024820152600080516020615e5483398151915260448201527f696e6753746174653a2066696e616c4e65774261746368206d7573742062652060648201527f657175616c207468616e2063757272656e744c617374566572696669656442616084820152620e8c6d60eb1b60a482015260c4016109fa565b6000614715898989858a610f74565b90506000600080516020615e948339815191526002836040516147389190615725565b602060405180830381855afa158015614755573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906147789190615741565b6147829190615770565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916147c6918a918a918a9190600401615c6c565b602060405180830381865afa1580156147e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148079190615ce6565b6148615760405162461bcd60e51b81526020600482015260376024820152600080516020615e5483398151915260448201527634b733a9ba30ba329d1024b73b30b634b210383937b7b360491b60648201526084016109fa565b6001600160401b038b16600090815260716020526040902060020154879003613fbc5760405162461bcd60e51b815260206004820152605b6024820152600080516020615e5483398151915260448201527f696e6753746174653a2053746f72656420726f6f74206d75737420626520646960648201527f66666572656e74207468616e206e657720737461746520726f6f740000000000608482015260a4016109fa565b60655460ff166149285760405162461bcd60e51b81526004016109fa90615b59565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006149b2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614abf9092919063ffffffff16565b805190915015614a2f57808060200190518101906149d09190615ce6565b614a2f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109fa565b505050565b6040516001600160a01b038316602482015260448101829052614a2f90849063a9059cbb60e01b90606401613a02565b60655460ff1615614a875760405162461bcd60e51b81526004016109fa90615842565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614ace8484600085614ad6565b949350505050565b606082471015614b375760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109fa565b600080866001600160a01b03168587604051614b539190615725565b60006040518083038185875af1925050503d8060008114614b90576040519150601f19603f3d011682016040523d82523d6000602084013e614b95565b606091505b5091509150614ba687838387614bb1565b979650505050505050565b60608315614c20578251600003614c19576001600160a01b0385163b614c195760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109fa565b5081614ace565b614ace8383815115614c355781518083602001fd5b8060405162461bcd60e51b81526004016109fa9190614d18565b80356001600160401b0381168114614c6657600080fd5b919050565b600080600080600060a08688031215614c8357600080fd5b614c8c86614c4f565b9450614c9a60208701614c4f565b9350614ca860408701614c4f565b94979396509394606081013594506080013592915050565b60005b83811015614cdb578181015183820152602001614cc3565b838111156137425750506000910152565b60008151808452614d04816020860160208601614cc0565b601f01601f19169290920160200192915050565b602081526000614d2b6020830184614cec565b9392505050565b8060408101831015614d4357600080fd5b92915050565b8060808101831015614d4357600080fd5b6000806000806000806000806101a0898b031215614d7757600080fd5b614d8089614c4f565b9750614d8e60208a01614c4f565b9650614d9c60408a01614c4f565b95506060890135945060808901359350614db98a60a08b01614d32565b9250614dc88a60e08b01614d49565b9150614dd88a6101608b01614d32565b90509295985092959890939650565b600060208284031215614df957600080fd5b813561ffff81168114614d2b57600080fd5b600080600080600060a08688031215614e2357600080fd5b614e2c86614c4f565b9450614e3a60208701614c4f565b94979496505050506040830135926060810135926080909101359150565b6001600160a01b0391909116815260200190565b600060208284031215614e7e57600080fd5b614d2b82614c4f565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614ebf57614ebf614e87565b60405290565b604051606081016001600160401b0381118282101715614ebf57614ebf614e87565b604051601f8201601f191681016001600160401b0381118282101715614f0f57614f0f614e87565b604052919050565b60006001600160401b03821115614f3057614f30614e87565b5060051b60200190565b600082601f830112614f4b57600080fd5b81356001600160401b03811115614f6457614f64614e87565b614f77601f8201601f1916602001614ee7565b818152846020838601011115614f8c57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614fbc57600080fd5b82356001600160401b0380821115614fd357600080fd5b818501915085601f830112614fe757600080fd5b8135614ffa614ff582614f17565b614ee7565b81815260059190911b8301840190848101908883111561501957600080fd5b8585015b838110156150b2578035858111156150355760008081fd5b86016080818c03601f190181131561504d5760008081fd5b615055614e9d565b89830135888111156150675760008081fd5b6150758e8c83870101614f3a565b8252506040808401358b830152606061508f818601614c4f565b8284015261509e848601614c4f565b90830152508552505091860191860161501d565b5098975050505050505050565b6001600160a01b03811681146127a457600080fd5b6000602082840312156150e657600080fd5b8135614d2b816150bf565b600080600080600060a0868803121561510957600080fd5b8535945060208601356001600160401b0381111561512657600080fd5b61513288828901614f3a565b9450506040860135925061514860608701614c4f565b91506080860135615158816150bf565b809150509295509295909350565b600080600080600080600080888a036101c081121561518457600080fd5b893561518f816150bf565b985060208a013561519f816150bf565b975060408a01356151af816150bf565b965060608a01356151bf816150bf565b955060e0607f19820112156151d357600080fd5b5060808901935061016089013592506101808901356001600160401b03808211156151fd57600080fd5b6152098c838d01614f3a565b93506101a08b013591508082111561522057600080fd5b5061522d8b828c01614f3a565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c03121561525c57600080fd5b6152658a614c4f565b985061527360208b01614c4f565b975061528160408b01614c4f565b965061528f60608b01614c4f565b955060808a0135945060a08a013593506152ac8b60c08c01614d32565b92506152bc8b6101008c01614d49565b91506152cc8b6101808c01614d32565b90509295985092959850929598565b6000602082840312156152ed57600080fd5b5035919050565b80151581146127a457600080fd5b60006020828403121561531457600080fd5b8135614d2b816152f4565b60006020828403121561533157600080fd5b81356001600160401b0381111561534757600080fd5b614ace84828501614f3a565b6000602080838503121561536657600080fd5b82356001600160401b038082111561537d57600080fd5b818501915085601f83011261539157600080fd5b813561539f614ff582614f17565b81815260059190911b830184019084810190888311156153be57600080fd5b8585015b838110156150b2578035858111156153da5760008081fd5b86016060818c03601f19018113156153f25760008081fd5b6153fa614ec5565b898301358881111561540c5760008081fd5b61541a8e8c83870101614f3a565b8252506040808401358b830152615432838501614c4f565b90820152855250509186019186016153c2565b6000806000806080858703121561545b57600080fd5b61546485614c4f565b93506020850135925061547960408601614c4f565b915061548760608601614c4f565b905092959194509250565b600080604083850312156154a557600080fd5b82356001600160401b038111156154bb57600080fd5b6154c785828601614f3a565b95602094909401359450505050565b600080604083850312156154e957600080fd5b823591506154f960208401614c4f565b90509250929050565b60208082526058908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2070656e60408201527f64696e6753746174654e756d206d757374206265206c657373206f7220657175606082015277616c207468616e206c61737450656e64696e67537461746560401b608082015260a00190565b6020808252604c90820152600080516020615df483398151915260408201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760608201526b040e6e8c2e8ca40c4c2e8c6d60a31b608082015260a00190565b6020808252604390820152600080516020615df483398151915260408201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786060820152621a5cdd60ea1b608082015260a00190565b6020808252605d90820152600080516020615df483398151915260408201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060608201527f7468616e2063757272656e744c61737456657269666965644261746368000000608082015260a00190565b60208082526057908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2066696e60408201527f616c4e65774261746368206d75737420626520626967676572207468616e20636060820152760eae4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d604b1b608082015260a00190565b60008251615737818460208701614cc0565b9190910192915050565b60006020828403121561575357600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b60008261577f5761577f61575a565b500690565b600181811c9082168061579857607f821691505b6020821081036157b857634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a204f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561583957615839615801565b01949350505050565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b038083168181036158dc576158dc615801565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6001600160601b0319166068820152607c0190565b60006001820161595a5761595a615801565b5060010190565b60006001600160401b038381169083168181101561598157615981615801565b039392505050565b60008282101561599b5761599b615801565b500390565b60008160001904831182151516156159ba576159ba615801565b500290565b601f821115614a2f57600081815260208120601f850160051c810160208610156159e65750805b601f850160051c820191505b818110156141a8578281556001016159f2565b81516001600160401b03811115615a1e57615a1e614e87565b615a3281615a2c8454615784565b846159bf565b602080601f831160018114615a675760008415615a4f5750858301515b600019600386901b1c1916600185901b1785556141a8565b600085815260208120601f198616915b82811015615a9657888601518255948401946001909101908401615a77565b5085821015615ab45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615ad357615ad361575a565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a204f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b60008219821115615b5457615b54615801565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a204f6e6c7920747275737465642061676772656761746f7200000000606082015260800190565b8381526001600160a01b0383166020820152606060408201819052600090615c3d90830184614cec565b95945050505050565b60006001600160401b0380841680615c6057615c6061575a565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615ca457848483379084018281529284019290600101615c84565b5050828760c0870137610100850181815286935091505b6001811015615cda578251825260209283019290910190600101615cbb565b50505095945050505050565b600060208284031215615cf857600080fd5b8151614d2b816152f4565b600181815b80851115615d3e578160001904821115615d2457615d24615801565b80851615615d3157918102915b93841c9390800290615d08565b509250929050565b600082615d5557506001614d43565b81615d6257506000614d43565b8160018114615d785760028114615d8257615d9e565b6001915050614d43565b60ff841115615d9357615d93615801565b50506001821b614d43565b5060208310610133831016604e8410600b8410161715615dc1575081810a614d43565b615dcb8383615d03565b8060001904821115615ddf57615ddf615801565b029392505050565b6000614d2b8383615d4656fe506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e69506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e637953506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20696e506f6c79676f6e5a6b45564d3a3a5f70726f766544697374696e637450656e64506f6c79676f6e5a6b45564d3a3a73657175656e6365466f726365426174636830644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a2046a2646970667358221220228c4202d1acfc209a766c02316b533f9a69dc61c46b673c3a2cf711afaf3feb64736f6c634300080f0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103925760003560e01c806396dc3d39116101e0578063cfa8ed4711610110578063e7a7ed02116100a8578063e7a7ed0214610905578063e8bf92ed1461091f578063eaeb077b14610932578063edc4112114610945578063f14916d614610958578063f2fde38b1461096b578063f851a4401461097e578063f8b823e414610991578063fe16564f1461099a57600080fd5b8063cfa8ed4714610860578063d02103ca1461087a578063d8d1091b1461088d578063d8f54db0146108a0578063d939b315146108b4578063dbc16976146108ce578063e0d17441146108d6578063e11f3f18146108e9578063e217cfd6146108fc57600080fd5b8063ab9fc5ef11610183578063ab9fc5ef14610759578063adc879e914610763578063afd23cbe1461077d578063b4d63f58146107a5578063b6b0b09714610805578063c0cad3021461081f578063c0ed84e014610832578063c89e42df1461083a578063cf1363061461084d57600080fd5b806396dc3d39146106dd57806399f5634e146106f05780639b796760146106f85780639c9f3dfe1461070b5780639eb831b91461071e5780639f0d039d14610726578063a3c573eb1461072e578063aa58bad61461074157600080fd5b80634a910e6a116102c6578063715018a61161025e578063715018a6146105e65780637215541a146105ee57806375c508b3146106015780637fcb365314610614578063837a473814610627578063841b24d7146106955780638b48931e146106af5780638c4a0af7146106b95780638da5cb5b146106cc57600080fd5b80634a910e6a1461052c5780635392c5e01461053f578063542028d51461055f5780635437988d14610567578063574f649e1461057a57806360943d6a1461058d5780636b8616ce146105a05780636ff512cc146105c0578063704b6c02146105d357600080fd5b80632d0889d3116103395780632d0889d314610475578063383b3be81461047f578063394218e9146104925780633c158267146104a5578063423fa856146104b857806345605267146104d2578063458c0477146104ec5780634834a343146104ff5780634a1a89a71461051257600080fd5b80630eaa86ea14610397578063107bf28c146103bd57806310a01a72146103d257806315064c96146103e75780631816b7e51461040457806319d8ac6114610417578063220d7899146104425780632987898314610455575b600080fd5b6103aa6103a5366004614c6b565b6109ad565b6040519081526020015b60405180910390f35b6103c5610b7c565b6040516103b49190614d18565b6103e56103e0366004614d5a565b610c0a565b005b6065546103f49060ff1681565b60405190151581526020016103b4565b6103e5610412366004614de7565b610e53565b60685461042a906001600160401b031681565b6040516001600160401b0390911681526020016103b4565b6103c5610450366004614e0b565b610f74565b606a54610468906001600160a01b031681565b6040516103b49190614e58565b6103aa620493e081565b6103f461048d366004614e6c565b611115565b6103e56104a0366004614e6c565b61115c565b6103e56104b3366004614fa9565b611318565b60685461042a90600160401b90046001600160401b031681565b60685461042a90600160801b90046001600160401b031681565b60725461042a906001600160401b031681565b6103e561050d366004614d5a565b611adf565b60725461042a90600160401b90046001600160401b031681565b6103e561053a366004614e6c565b611e27565b6103aa61054d366004614e6c565b606d6020526000908152604090205481565b6103c56120c1565b6103e56105753660046150d4565b6120ce565b6103aa6105883660046150f1565b6120f8565b6103e561059b366004615166565b61213b565b6103aa6105ae366004614e6c565b60666020526000908152604090205481565b6103e56105ce3660046150d4565b612496565b6103e56105e13660046150d4565b612514565b6103e5612589565b6103e56105fc366004614e6c565b61259d565b6103e561060f36600461523d565b6127a7565b60695461042a906001600160401b031681565b61066a6106353660046152db565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103b4565b60725461042a90600160c01b90046001600160401b031681565b61042a62093a8081565b6103e56106c7366004615302565b612836565b6033546001600160a01b0316610468565b6103e56106eb366004614e6c565b6128ad565b6103aa6128d7565b6103e5610706366004614e6c565b6129bf565b6103e5610719366004614e6c565b6129f4565b6103aa600c81565b6074546103aa565b607054610468906001600160a01b031681565b60655461042a9061010090046001600160401b031681565b61042a6206978081565b606c5461042a90600160a81b90046001600160401b031681565b60655461079290600160481b900461ffff1681565b60405161ffff90911681526020016103b4565b6107e06107b3366004614e6c565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103b4565b60655461046890600160581b90046001600160a01b031681565b6103e561082d36600461531f565b612ba2565b61042a612bba565b6103e561084836600461531f565b612c07565b6103e561085b366004614e6c565b612c6d565b60695461046890600160401b90046001600160a01b031681565b606c54610468906001600160a01b031681565b6103e561089b366004615353565b612cee565b606c546103f490600160a01b900460ff1681565b60725461042a90600160801b90046001600160401b031681565b6103e56131ad565b6103e56108e4366004615445565b613269565b6103e56108f736600461523d565b6132db565b61042a6103e881565b60685461042a90600160c01b90046001600160401b031681565b606b54610468906001600160a01b031681565b6103e5610940366004615492565b61341f565b6103e5610953366004614d5a565b613748565b6103e56109663660046150d4565b613867565b6103e56109793660046150d4565b6138dc565b607354610468906001600160a01b031681565b6103aa60745481565b6103e56109a83660046154d6565b613952565b60008060006109ba612bba565b90506001600160401b03881615610a57576072546001600160401b039081169089161115610a035760405162461bcd60e51b81526004016109fa90615502565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610a515760405162461bcd60e51b81526004016109fa90615580565b50610ac1565b6001600160401b0387166000908152606d6020526040902054915081610a8f5760405162461bcd60e51b81526004016109fa906155e0565b806001600160401b0316876001600160401b03161115610ac15760405162461bcd60e51b81526004016109fa90615637565b806001600160401b0316866001600160401b031611610af25760405162461bcd60e51b81526004016109fa906156a8565b6000610b018888888689610f74565b90506000600080516020615e94833981519152600283604051610b249190615725565b602060405180830381855afa158015610b41573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610b649190615741565b610b6e9190615770565b9a9950505050505050505050565b606f8054610b8990615784565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb590615784565b8015610c025780601f10610bd757610100808354040283529160200191610c02565b820191906000526020600020905b815481529060010190602001808311610be557829003601f168201915b505050505081565b610c12613974565b600080610c1d612bba565b90506001600160401b038a1615610cb1576072546001600160401b03908116908b161115610c5d5760405162461bcd60e51b81526004016109fa90615502565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610cab5760405162461bcd60e51b81526004016109fa90615580565b50610d1b565b6001600160401b0389166000908152606d6020526040902054915081610ce95760405162461bcd60e51b81526004016109fa906155e0565b806001600160401b0316896001600160401b03161115610d1b5760405162461bcd60e51b81526004016109fa90615637565b806001600160401b0316886001600160401b031611610d4c5760405162461bcd60e51b81526004016109fa906156a8565b6000610d5b8a8a8a868b610f74565b606980546001600160401b0319166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610da857607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610dee57600080fd5b505af1158015610e02573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610e7d5760405162461bcd60e51b81526004016109fa906157be565b6103e88161ffff1610158015610e9857506104008161ffff16105b610f1d5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a4016109fa565b6065805461ffff60481b1916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610fa657508115155b61101a576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109fa565b8061108f576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109fa565b606c54604080516001600160601b03193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b038281166000908152607160205260408120549092429261114b92600160801b90920481169116615817565b6001600160401b0316111592915050565b6073546001600160a01b031633146111865760405162461bcd60e51b81526004016109fa906157be565b62093a806001600160401b038216111561121f5760405162461bcd60e51b815260206004820152604e60248201527f506f6c79676f6e5a6b45564d3a3a73657454727573746564416767726567617460448201527f6f7254696d656f75743a20457863656564206d61782068616c7420616767726560648201526d19d85d1a5bdb881d1a5b595bdd5d60921b608482015260a4016109fa565b60655460ff166112c2576072546001600160401b03600160c01b9091048116908216106112c25760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a204e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109fa565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610f69565b60655460ff161561133b5760405162461bcd60e51b81526004016109fa90615842565b606954600160401b90046001600160a01b031633146113c25760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a204f6e6c7920747275737465642073657175656e63657200000000000060648201526084016109fa565b8051806114375760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e6365203120626174636800000060648201526084016109fa565b6103e881106114b0576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e79206261746368657360648201526084016109fa565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b85811015611915576000878281518110611503576115036158aa565b60200260200101519050600081606001516001600160401b03161115611693578361152d816158c0565b94505060008160000151805190602001208260200151836060015160405160200161155a939291906158e6565b60408051601f1981840301815291815281516020928301206001600160401b0388166000908152606690935291205490915081146115ee5760405162461bcd60e51b815260206004820152603d6024820152600080516020615eb483398151915260448201527f6f7263656420626174636865732064617461206d757374206d6174636800000060648201526084016109fa565b81606001516001600160401b031682604001516001600160401b0316101561168d5760405162461bcd60e51b81526020600482015260586024820152600080516020615eb483398151915260448201527f6f7263656420626174636865732074696d657374616d70206d757374206265206064820152773134b3b3b2b91037b91032b8bab0b6103a3430b71036b4b760411b608482015260a4016109fa565b50611808565b6020810151158061171c5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916116d69160040190815260200190565b6020604051808303816000875af11580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117199190615741565b15155b61178e5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d75737420657869737400000000000060648201526084016109fa565b805151620493e0116118085760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016109fa565b856001600160401b031681604001516001600160401b03161015801561183b57504281604001516001600160401b031611155b6118ad5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e676500000060648201526084016109fa565b805180516020918201208183015160408085015190516118d4948894939291339101615909565b60405160208183030381529060405280519060200120925084806118f7906158c0565b9550508060400151955050808061190d90615948565b9150506114e7565b506068546001600160401b03600160c01b909104811690831611156119885760405162461bcd60e51b81526020600482015260356024820152600080516020615eb48339815191526044820152746f7263652062617463686573206f766572666c6f7760581b60648201526084016109fa565b6068546000906119a890600160801b90046001600160401b031684615961565b6119bb906001600160401b031687615989565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611a9090339030908490611a7591906159a0565b606554600160581b90046001600160a01b03169291906139ce565b611a98613a39565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b025760405162461bcd60e51b81526004016109fa90615842565b6072546001600160401b038781166000908152606760205260409020600101544292611b3992600160c01b90910481169116615817565b6001600160401b03161115611bc25760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2054727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a4016109fa565b6103e8611bcf8888615961565b6001600160401b031610611c4b5760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2043616e60448201527f6e6f74207665726966792074686174206d616e7920626174636865730000000060648201526084016109fa565b611c5b8888888888888888613ad9565b611c6486613fca565b607254600160801b90046001600160401b0316600003611d2b57606980546001600160401b0319166001600160401b038881169182179092556000908152606d602052604090208590556072541615611cc857607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d0e57600080fd5b505af1158015611d22573d6000803e3d6000fd5b50505050611ddc565b611d33613a39565b607280546001600160401b0316906000611d4c836158c0565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b6001600160401b03811615801590611e5457506072546001600160401b03600160401b9091048116908216115b8015611e6f57506072546001600160401b0390811690821611155b611eed5760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2070656e64696e6753746174654e756d206d75737420696e76616064820152621b1a5960ea1b608482015260a4016109fa565b606a546001600160a01b03163314611f9757611f0881611115565b611f975760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2050656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a4016109fa565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b928390049098166001600160401b0319909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b15801561205357600080fd5b505af1158015612067573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e84600201546040516120b491815260200190565b60405180910390a3505050565b606e8054610b8990615784565b6120d6613974565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b600085858051906020012085858560405160200161211a959493929190615909565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff161580801561215b5750600054600160ff909116105b806121755750303b158015612175575060005460ff166001145b6121d85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109fa565b6000805460ff1916600117905580156121fb576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c81169190911790925560658054600160581b600160f81b031916600160581b8c851602179055606b805482168a84161790556070805490911691881691909117905561226360208601866150d4565b607380546001600160a01b0319166001600160a01b039290921691909117905561229360608601604087016150d4565b606980546001600160a01b0392909216600160401b02600160401b600160e01b03199092169190911790556122ce60c0860160a087016150d4565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa71135684905561232b60e0860160c08701614e6c565b607280546001600160401b0392909216600160c01b026001600160c01b039092169190911790556123626040860160208701614e6c565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b1990921691909117905561239e6080860160608701614e6c565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b199092169190911790556123da60a0860160808701615302565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e6124028482615a05565b50606f61240f8382615a05565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556124456141b0565b801561248b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b031633146124c05760405162461bcd60e51b81526004016109fa906157be565b60698054600160401b600160e01b031916600160401b6001600160a01b038416021790556040517ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090610f69908390614e58565b6073546001600160a01b0316331461253e5760405162461bcd60e51b81526004016109fa906157be565b607380546001600160a01b0319166001600160a01b0383161790556040517f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190610f69908390614e58565b612591613974565b61259b6000614220565b565b6033546001600160a01b0316331461279c5760006125b9612bba565b9050806001600160401b0316826001600160401b0316116126305760405162461bcd60e51b815260206004820152603c6024820152600080516020615e1483398151915260448201527f746174653a20426174636820616c72656164792076657269666965640000000060648201526084016109fa565b6068546001600160401b03600160401b90910481169083161180159061267257506001600160401b038083166000908152606760205260409020600101541615155b6126eb5760405162461bcd60e51b81526020600482015260506024820152600080516020615e1483398151915260448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a4016109fa565b6001600160401b0380831660009081526067602052604090206001015442916127199162093a809116615817565b6001600160401b0316111561279a5760405162461bcd60e51b815260206004820152604d6024820152600080516020615e1483398151915260448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a4016109fa565b505b6127a4614272565b50565b60655460ff16156127ca5760405162461bcd60e51b81526004016109fa90615842565b6127db8989898989898989896142e2565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a161248b614272565b6073546001600160a01b031633146128605760405162461bcd60e51b81526004016109fa906157be565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610f6990831515815260200190565b6128b5613974565b606980546001600160401b0319166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81526000918291600160581b9091046001600160a01b0316906370a0823190612912903090600401614e58565b602060405180830381865afa15801561292f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129539190615741565b9050600061295f612bba565b6068546001600160401b03600160401b820481169161298f91600160801b8204811691600160c01b900416615961565b6129999190615817565b6129a39190615961565b6001600160401b031690506129b88183615ac4565b9250505090565b6129c7613974565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b03163314612a1e5760405162461bcd60e51b81526004016109fa906157be565b62093a806001600160401b0382161115612ab25760405162461bcd60e51b815260206004820152604960248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a20457863656564206d61782068616c74206167677265676174696f6064820152681b881d1a5b595bdd5d60ba1b608482015260a4016109fa565b60655460ff16612b47576072546001600160401b03600160801b909104811690821610612b475760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a204e65772074696d656f7574206d757374206265206c6f7765720060648201526084016109fa565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610f69565b612baa613974565b606f612bb68282615a05565b5050565b6072546000906001600160401b031615612bf757506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612c315760405162461bcd60e51b81526004016109fa906157be565b606e612c3d8282615a05565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610f699190614d18565b6073546001600160a01b03163314612c975760405162461bcd60e51b81526004016109fa906157be565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610f69565b60655460ff1615612d115760405162461bcd60e51b81526004016109fa90615842565b606c54600160a01b900460ff161515600114612d3f5760405162461bcd60e51b81526004016109fa90615ad8565b805180612da25760405162461bcd60e51b815260206004820152603f6024820152600080516020615e7483398151915260448201527f65733a204d75737420666f726365206174206c6561737420312062617463680060648201526084016109fa565b6103e88110612e135760405162461bcd60e51b81526020600482015260436024820152600080516020615e7483398151915260448201527f65733a2043616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a4016109fa565b6068546001600160401b03600160c01b8204811691612e3b918491600160801b900416615b41565b1115612e975760405162461bcd60e51b81526020600482015260376024820152600080516020615e74833981519152604482015276195cce88119bdc98d94818985d18da081a5b9d985b1a59604a1b60648201526084016109fa565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b848110156130c5576000868281518110612ee457612ee46158aa565b602002602001015190508380612ef9906158c0565b945050600081600001518051906020012082602001518360400151604051602001612f26939291906158e6565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612fc55760405162461bcd60e51b81526020600482015260426024820152600080516020615e7483398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109fa565b612fd0600188615989565b83036130675742620697808360400151612fea9190615817565b6001600160401b031611156130675760405162461bcd60e51b81526020600482015260496024820152600080516020615e7483398151915260448201527f65733a20466f72636564206261746368206973206e6f7420696e2074696d656f6064820152681d5d081c195c9a5bd960ba1b608482015260a4016109fa565b815180516020918201208184015160405161308a93889392914291339101615909565b60405160208183030381529060405280519060200120935085806130ad906158c0565b965050505080806130bd90615948565b915050612ec8565b50606880546001600160401b031916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b0319909216919091179286168502929092179091558554600160401b600160c01b03191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff166131cf5760405162461bcd60e51b81526004016109fa90615b59565b6073546001600160a01b031633146131f95760405162461bcd60e51b81526004016109fa906157be565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561324957600080fd5b505af115801561325d573d6000803e3d6000fd5b5050505061259b614906565b613271613974565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b031633146133055760405162461bcd60e51b81526004016109fa90615bb6565b6133168989898989898989896142e2565b606980546001600160401b0319166001600160401b038881169182179092556000908152606d60205260409020859055607254161561336057607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156133a657600080fd5b505af11580156133ba573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff16156134425760405162461bcd60e51b81526004016109fa90615842565b606c54600160a01b900460ff1615156001146134705760405162461bcd60e51b81526004016109fa90615ad8565b600061347b60745490565b9050818111156134e05760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a204e6f7420656e6044820152696f756768206d6174696360b01b60648201526084016109fa565b620493e08351106135515760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b60648201526084016109fa565b60655461357090600160581b90046001600160a01b03163330846139ce565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa1580156135ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135de9190615741565b60688054919250600160c01b9091046001600160401b0316906018613602836158c0565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505083805190602001208142604051602001613643939291906158e6565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b0316600090815260669093529120553233036136e757606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a2613742565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161373993929190615c13565b60405180910390a25b50505050565b606a546001600160a01b031633146137725760405162461bcd60e51b81526004016109fa90615bb6565b6137828888888888888888613ad9565b606980546001600160401b0319166001600160401b038881169182179092556000908152606d6020526040902085905560725416156137cc57607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561381257600080fd5b505af1158015613826573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e15565b6073546001600160a01b031633146138915760405162461bcd60e51b81526004016109fa906157be565b606a80546001600160a01b0319166001600160a01b0383161790556040517f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90610f69908390614e58565b6138e4613974565b6001600160a01b0381166139495760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109fa565b6127a481614220565b61395a613974565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b0316331461259b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109fa565b6040516001600160a01b03808516602483015283166044820152606481018290526137429085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261495d565b6072546001600160401b03600160401b820481169116111561259b57607254600090613a7690600160401b90046001600160401b03166001615817565b9050613a8181611115565b156127a457607254600090600290613aa39084906001600160401b0316615961565b613aad9190615c46565b613ab79083615817565b9050613ac281611115565b15613ad057612bb681611e27565b612bb682611e27565b600080613ae4612bba565b90506001600160401b038a1615613c4a576072546001600160401b03908116908b161115613b9c5760405162461bcd60e51b815260206004820152605960248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20706560448201527f6e64696e6753746174654e756d206d757374206265206c657373206f7220657160648201527875616c207468616e206c61737450656e64696e67537461746560381b608482015260a4016109fa565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613c445760405162461bcd60e51b815260206004820152604d6024820152600080516020615e3483398151915260448201527f69744e756d4261746368206d757374206d61746368207468652070656e64696e60648201526c0ce40e6e8c2e8ca40c4c2e8c6d609b1b608482015260a4016109fa565b50613d70565b6001600160401b0389166000908152606d6020526040902054915081613cd45760405162461bcd60e51b815260206004820152604460248201819052600080516020615e34833981519152908201527f69744e756d426174636820737461746520726f6f7420646f6573206e6f7420656064820152631e1a5cdd60e21b608482015260a4016109fa565b806001600160401b0316896001600160401b03161115613d705760405162461bcd60e51b815260206004820152605e6024820152600080516020615e3483398151915260448201527f69744e756d4261746368206d757374206265206c657373206f7220657175616c60648201527f207468616e2063757272656e744c617374566572696669656442617463680000608482015260a4016109fa565b806001600160401b0316886001600160401b031611613e185760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20666960448201527f6e616c4e65774261746368206d75737420626520626967676572207468616e206064820152770c6eae4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d60431b608482015260a4016109fa565b6000613e278a8a8a868b610f74565b90506000600080516020615e94833981519152600283604051613e4a9190615725565b602060405180830381855afa158015613e67573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613e8a9190615741565b613e949190615770565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613ed8918b918b918b9190600401615c6c565b602060405180830381865afa158015613ef5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f199190615ce6565b613f795760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20496e60448201526a3b30b634b210383937b7b360a91b60648201526084016109fa565b613fbc33613f87858d615961565b6001600160401b0316613f986128d7565b613fa291906159a0565b606554600160581b90046001600160a01b03169190614a34565b505050505050505050505050565b6000613fd4612bba565b905081600080613fe48484615961565b6001600160401b031690505b836001600160401b0316836001600160401b031614614096576001600160401b03808416600090815260676020526040902060655460018201549192610100909104811691614040911642615989565b111561407b57600181015461406590600160401b90046001600160401b031685615961565b614078906001600160401b031684615b41565b92505b60010154600160401b90046001600160401b03169250613ff0565b60006140a28383615989565b90508281101561411c5760006140b88285615989565b9050600c81116140c857806140cb565b600c5b90506140d88160036159a0565b6140e390600a615de7565b6065546140fc908390600160481b900461ffff16615de7565b60745461410991906159a0565b6141139190615ac4565b607455506141a8565b60006141288483615989565b9050600c8111614138578061413b565b600c5b9050600061414a8260036159a0565b61415590600a615de7565b60655461416e908490600160481b900461ffff16615de7565b60745461417b91906159a0565b6141859190615ac4565b90508060745460745461419891906159a0565b6141a29190615ac4565b60745550505b505050505050565b600054610100900460ff1661421b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109fa565b61259b335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156142c257600080fd5b505af11580156142d6573d6000803e3d6000fd5b5050505061259b614a64565b60006001600160401b038a1615614452576072546001600160401b03908116908b16111561439a5760405162461bcd60e51b81526020600482015260656024820152600080516020615e5483398151915260448201527f696e6753746174653a2070656e64696e6753746174654e756d206d757374206260648201527f65206c657373206f7220657175616c207468616e206c61737450656e64696e67608482015264537461746560d81b60a482015260c4016109fa565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b909204161461444c5760405162461bcd60e51b81526020600482015260596024820152600080516020615e5483398151915260448201527f696e6753746174653a20696e69744e756d4261746368206d757374206d6174636064820152780d040e8d0ca40e0cadcc8d2dcce40e6e8c2e8ca40c4c2e8c6d603b1b608482015260a4016109fa565b5061458b565b506001600160401b0387166000908152606d6020526040902054806144e65760405162461bcd60e51b81526020600482015260506024820152600080516020615e5483398151915260448201527f696e6753746174653a20696e69744e756d426174636820737461746520726f6f60648201526f1d08191bd95cc81b9bdd08195e1a5cdd60821b608482015260a4016109fa565b6069546001600160401b03908116908916111561458b5760405162461bcd60e51b81526020600482015260636024820152600080516020615e5483398151915260448201527f696e6753746174653a20696e69744e756d4261746368206d757374206265206c60648201527f657373206f7220657175616c207468616e206c617374566572696669656442616084820152620e8c6d60eb1b60a482015260c4016109fa565b6072546001600160401b03908116908a16118015906145bb5750896001600160401b0316896001600160401b0316115b80156145dc57506072546001600160401b03600160401b9091048116908a16115b61464d5760405162461bcd60e51b81526020600482015260486024820152600080516020615e5483398151915260448201527f696e6753746174653a2066696e616c50656e64696e6753746174654e756d20696064820152671b98dbdc9c9958dd60c21b608482015260a4016109fa565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146147065760405162461bcd60e51b81526020600482015260636024820152600080516020615e5483398151915260448201527f696e6753746174653a2066696e616c4e65774261746368206d7573742062652060648201527f657175616c207468616e2063757272656e744c617374566572696669656442616084820152620e8c6d60eb1b60a482015260c4016109fa565b6000614715898989858a610f74565b90506000600080516020615e948339815191526002836040516147389190615725565b602060405180830381855afa158015614755573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906147789190615741565b6147829190615770565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916147c6918a918a918a9190600401615c6c565b602060405180830381865afa1580156147e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148079190615ce6565b6148615760405162461bcd60e51b81526020600482015260376024820152600080516020615e5483398151915260448201527634b733a9ba30ba329d1024b73b30b634b210383937b7b360491b60648201526084016109fa565b6001600160401b038b16600090815260716020526040902060020154879003613fbc5760405162461bcd60e51b815260206004820152605b6024820152600080516020615e5483398151915260448201527f696e6753746174653a2053746f72656420726f6f74206d75737420626520646960648201527f66666572656e74207468616e206e657720737461746520726f6f740000000000608482015260a4016109fa565b60655460ff166149285760405162461bcd60e51b81526004016109fa90615b59565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006149b2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614abf9092919063ffffffff16565b805190915015614a2f57808060200190518101906149d09190615ce6565b614a2f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109fa565b505050565b6040516001600160a01b038316602482015260448101829052614a2f90849063a9059cbb60e01b90606401613a02565b60655460ff1615614a875760405162461bcd60e51b81526004016109fa90615842565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614ace8484600085614ad6565b949350505050565b606082471015614b375760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109fa565b600080866001600160a01b03168587604051614b539190615725565b60006040518083038185875af1925050503d8060008114614b90576040519150601f19603f3d011682016040523d82523d6000602084013e614b95565b606091505b5091509150614ba687838387614bb1565b979650505050505050565b60608315614c20578251600003614c19576001600160a01b0385163b614c195760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109fa565b5081614ace565b614ace8383815115614c355781518083602001fd5b8060405162461bcd60e51b81526004016109fa9190614d18565b80356001600160401b0381168114614c6657600080fd5b919050565b600080600080600060a08688031215614c8357600080fd5b614c8c86614c4f565b9450614c9a60208701614c4f565b9350614ca860408701614c4f565b94979396509394606081013594506080013592915050565b60005b83811015614cdb578181015183820152602001614cc3565b838111156137425750506000910152565b60008151808452614d04816020860160208601614cc0565b601f01601f19169290920160200192915050565b602081526000614d2b6020830184614cec565b9392505050565b8060408101831015614d4357600080fd5b92915050565b8060808101831015614d4357600080fd5b6000806000806000806000806101a0898b031215614d7757600080fd5b614d8089614c4f565b9750614d8e60208a01614c4f565b9650614d9c60408a01614c4f565b95506060890135945060808901359350614db98a60a08b01614d32565b9250614dc88a60e08b01614d49565b9150614dd88a6101608b01614d32565b90509295985092959890939650565b600060208284031215614df957600080fd5b813561ffff81168114614d2b57600080fd5b600080600080600060a08688031215614e2357600080fd5b614e2c86614c4f565b9450614e3a60208701614c4f565b94979496505050506040830135926060810135926080909101359150565b6001600160a01b0391909116815260200190565b600060208284031215614e7e57600080fd5b614d2b82614c4f565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614ebf57614ebf614e87565b60405290565b604051606081016001600160401b0381118282101715614ebf57614ebf614e87565b604051601f8201601f191681016001600160401b0381118282101715614f0f57614f0f614e87565b604052919050565b60006001600160401b03821115614f3057614f30614e87565b5060051b60200190565b600082601f830112614f4b57600080fd5b81356001600160401b03811115614f6457614f64614e87565b614f77601f8201601f1916602001614ee7565b818152846020838601011115614f8c57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614fbc57600080fd5b82356001600160401b0380821115614fd357600080fd5b818501915085601f830112614fe757600080fd5b8135614ffa614ff582614f17565b614ee7565b81815260059190911b8301840190848101908883111561501957600080fd5b8585015b838110156150b2578035858111156150355760008081fd5b86016080818c03601f190181131561504d5760008081fd5b615055614e9d565b89830135888111156150675760008081fd5b6150758e8c83870101614f3a565b8252506040808401358b830152606061508f818601614c4f565b8284015261509e848601614c4f565b90830152508552505091860191860161501d565b5098975050505050505050565b6001600160a01b03811681146127a457600080fd5b6000602082840312156150e657600080fd5b8135614d2b816150bf565b600080600080600060a0868803121561510957600080fd5b8535945060208601356001600160401b0381111561512657600080fd5b61513288828901614f3a565b9450506040860135925061514860608701614c4f565b91506080860135615158816150bf565b809150509295509295909350565b600080600080600080600080888a036101c081121561518457600080fd5b893561518f816150bf565b985060208a013561519f816150bf565b975060408a01356151af816150bf565b965060608a01356151bf816150bf565b955060e0607f19820112156151d357600080fd5b5060808901935061016089013592506101808901356001600160401b03808211156151fd57600080fd5b6152098c838d01614f3a565b93506101a08b013591508082111561522057600080fd5b5061522d8b828c01614f3a565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c03121561525c57600080fd5b6152658a614c4f565b985061527360208b01614c4f565b975061528160408b01614c4f565b965061528f60608b01614c4f565b955060808a0135945060a08a013593506152ac8b60c08c01614d32565b92506152bc8b6101008c01614d49565b91506152cc8b6101808c01614d32565b90509295985092959850929598565b6000602082840312156152ed57600080fd5b5035919050565b80151581146127a457600080fd5b60006020828403121561531457600080fd5b8135614d2b816152f4565b60006020828403121561533157600080fd5b81356001600160401b0381111561534757600080fd5b614ace84828501614f3a565b6000602080838503121561536657600080fd5b82356001600160401b038082111561537d57600080fd5b818501915085601f83011261539157600080fd5b813561539f614ff582614f17565b81815260059190911b830184019084810190888311156153be57600080fd5b8585015b838110156150b2578035858111156153da5760008081fd5b86016060818c03601f19018113156153f25760008081fd5b6153fa614ec5565b898301358881111561540c5760008081fd5b61541a8e8c83870101614f3a565b8252506040808401358b830152615432838501614c4f565b90820152855250509186019186016153c2565b6000806000806080858703121561545b57600080fd5b61546485614c4f565b93506020850135925061547960408601614c4f565b915061548760608601614c4f565b905092959194509250565b600080604083850312156154a557600080fd5b82356001600160401b038111156154bb57600080fd5b6154c785828601614f3a565b95602094909401359450505050565b600080604083850312156154e957600080fd5b823591506154f960208401614c4f565b90509250929050565b60208082526058908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2070656e60408201527f64696e6753746174654e756d206d757374206265206c657373206f7220657175606082015277616c207468616e206c61737450656e64696e67537461746560401b608082015260a00190565b6020808252604c90820152600080516020615df483398151915260408201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760608201526b040e6e8c2e8ca40c4c2e8c6d60a31b608082015260a00190565b6020808252604390820152600080516020615df483398151915260408201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786060820152621a5cdd60ea1b608082015260a00190565b6020808252605d90820152600080516020615df483398151915260408201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060608201527f7468616e2063757272656e744c61737456657269666965644261746368000000608082015260a00190565b60208082526057908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2066696e60408201527f616c4e65774261746368206d75737420626520626967676572207468616e20636060820152760eae4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d604b1b608082015260a00190565b60008251615737818460208701614cc0565b9190910192915050565b60006020828403121561575357600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b60008261577f5761577f61575a565b500690565b600181811c9082168061579857607f821691505b6020821081036157b857634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a204f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b0380831681851680830382111561583957615839615801565b01949350505050565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b038083168181036158dc576158dc615801565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6001600160601b0319166068820152607c0190565b60006001820161595a5761595a615801565b5060010190565b60006001600160401b038381169083168181101561598157615981615801565b039392505050565b60008282101561599b5761599b615801565b500390565b60008160001904831182151516156159ba576159ba615801565b500290565b601f821115614a2f57600081815260208120601f850160051c810160208610156159e65750805b601f850160051c820191505b818110156141a8578281556001016159f2565b81516001600160401b03811115615a1e57615a1e614e87565b615a3281615a2c8454615784565b846159bf565b602080601f831160018114615a675760008415615a4f5750858301515b600019600386901b1c1916600185901b1785556141a8565b600085815260208120601f198616915b82811015615a9657888601518255948401946001909101908401615a77565b5085821015615ab45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615ad357615ad361575a565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a204f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b60008219821115615b5457615b54615801565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a204f6e6c7920747275737465642061676772656761746f7200000000606082015260800190565b8381526001600160a01b0383166020820152606060408201819052600090615c3d90830184614cec565b95945050505050565b60006001600160401b0380841680615c6057615c6061575a565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615ca457848483379084018281529284019290600101615c84565b5050828760c0870137610100850181815286935091505b6001811015615cda578251825260209283019290910190600101615cbb565b50505095945050505050565b600060208284031215615cf857600080fd5b8151614d2b816152f4565b600181815b80851115615d3e578160001904821115615d2457615d24615801565b80851615615d3157918102915b93841c9390800290615d08565b509250929050565b600082615d5557506001614d43565b81615d6257506000614d43565b8160018114615d785760028114615d8257615d9e565b6001915050614d43565b60ff841115615d9357615d93615801565b50506001821b614d43565b5060208310610133831016604e8410600b8410161715615dc1575081810a614d43565b615dcb8383615d03565b8060001904821115615ddf57615ddf615801565b029392505050565b6000614d2b8383615d4656fe506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e69506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e637953506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20696e506f6c79676f6e5a6b45564d3a3a5f70726f766544697374696e637450656e64506f6c79676f6e5a6b45564d3a3a73657175656e6365466f726365426174636830644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a2046a2646970667358221220228c4202d1acfc209a766c02316b533f9a69dc61c46b673c3a2cf711afaf3feb64736f6c634300080f0033", + "bytecode": "0x608060405234801561001057600080fd5b50615f0680620000216000396000f3fe608060405234801561001057600080fd5b50600436106103925760003560e01c806396dc3d39116101e0578063cfa8ed4711610110578063e7a7ed02116100a8578063e7a7ed0214610905578063e8bf92ed1461091f578063eaeb077b14610932578063edc4112114610945578063f14916d614610958578063f2fde38b1461096b578063f851a4401461097e578063f8b823e414610991578063fe16564f1461099a57600080fd5b8063cfa8ed4714610860578063d02103ca1461087a578063d8d1091b1461088d578063d8f54db0146108a0578063d939b315146108b4578063dbc16976146108ce578063e0d17441146108d6578063e11f3f18146108e9578063e217cfd6146108fc57600080fd5b8063ab9fc5ef11610183578063ab9fc5ef14610759578063adc879e914610763578063afd23cbe1461077d578063b4d63f58146107a5578063b6b0b09714610805578063c0cad3021461081f578063c0ed84e014610832578063c89e42df1461083a578063cf1363061461084d57600080fd5b806396dc3d39146106dd57806399f5634e146106f05780639b796760146106f85780639c9f3dfe1461070b5780639eb831b91461071e5780639f0d039d14610726578063a3c573eb1461072e578063aa58bad61461074157600080fd5b80634a910e6a116102c6578063715018a61161025e578063715018a6146105e65780637215541a146105ee57806375c508b3146106015780637fcb365314610614578063837a473814610627578063841b24d7146106955780638b48931e146106af5780638c4a0af7146106b95780638da5cb5b146106cc57600080fd5b80634a910e6a1461052c5780635392c5e01461053f578063542028d51461055f5780635437988d14610567578063574f649e1461057a57806360943d6a1461058d5780636b8616ce146105a05780636ff512cc146105c0578063704b6c02146105d357600080fd5b80632d0889d3116103395780632d0889d314610475578063383b3be81461047f578063394218e9146104925780633c158267146104a5578063423fa856146104b857806345605267146104d2578063458c0477146104ec5780634834a343146104ff5780634a1a89a71461051257600080fd5b80630eaa86ea14610397578063107bf28c146103bd57806310a01a72146103d257806315064c96146103e75780631816b7e51461040457806319d8ac6114610417578063220d7899146104425780632987898314610455575b600080fd5b6103aa6103a5366004614c68565b6109ad565b6040519081526020015b60405180910390f35b6103c5610b7c565b6040516103b49190614d15565b6103e56103e0366004614d57565b610c0a565b005b6065546103f49060ff1681565b60405190151581526020016103b4565b6103e5610412366004614de4565b610e53565b60685461042a906001600160401b031681565b6040516001600160401b0390911681526020016103b4565b6103c5610450366004614e08565b610f74565b606a54610468906001600160a01b031681565b6040516103b49190614e55565b6103aa620493e081565b6103f461048d366004614e69565b611115565b6103e56104a0366004614e69565b61115c565b6103e56104b3366004614fa6565b611318565b60685461042a90600160401b90046001600160401b031681565b60685461042a90600160801b90046001600160401b031681565b60725461042a906001600160401b031681565b6103e561050d366004614d57565b611adf565b60725461042a90600160401b90046001600160401b031681565b6103e561053a366004614e69565b611e27565b6103aa61054d366004614e69565b606d6020526000908152604090205481565b6103c5611edd565b6103e56105753660046150d1565b611eea565b6103aa6105883660046150ee565b611f14565b6103e561059b366004615163565b611f57565b6103aa6105ae366004614e69565b60666020526000908152604090205481565b6103e56105ce3660046150d1565b6122b2565b6103e56105e13660046150d1565b612330565b6103e56123a5565b6103e56105fc366004614e69565b6123b9565b6103e561060f36600461523a565b6125c0565b60695461042a906001600160401b031681565b61066a6106353660046152d8565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103b4565b60725461042a90600160c01b90046001600160401b031681565b61042a62093a8081565b6103e56106c73660046152ff565b61264f565b6033546001600160a01b0316610468565b6103e56106eb366004614e69565b6126c6565b6103aa6126f0565b6103e5610706366004614e69565b6127d8565b6103e5610719366004614e69565b61280d565b6103aa600c81565b6074546103aa565b607054610468906001600160a01b031681565b60655461042a9061010090046001600160401b031681565b61042a6206978081565b606c5461042a90600160a81b90046001600160401b031681565b60655461079290600160481b900461ffff1681565b60405161ffff90911681526020016103b4565b6107e06107b3366004614e69565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103b4565b60655461046890600160581b90046001600160a01b031681565b6103e561082d36600461531c565b6129bb565b61042a6129d3565b6103e561084836600461531c565b612a20565b6103e561085b366004614e69565b612a86565b60695461046890600160401b90046001600160a01b031681565b606c54610468906001600160a01b031681565b6103e561089b366004615350565b612b07565b606c546103f490600160a01b900460ff1681565b60725461042a90600160801b90046001600160401b031681565b6103e5612fc6565b6103e56108e4366004615442565b613082565b6103e56108f736600461523a565b6130f4565b61042a6103e881565b60685461042a90600160c01b90046001600160401b031681565b606b54610468906001600160a01b031681565b6103e561094036600461548f565b613238565b6103e5610953366004614d57565b613561565b6103e56109663660046150d1565b613680565b6103e56109793660046150d1565b6136f5565b607354610468906001600160a01b031681565b6103aa60745481565b6103e56109a83660046154d3565b61376b565b60008060006109ba6129d3565b90506001600160401b03881615610a57576072546001600160401b039081169089161115610a035760405162461bcd60e51b81526004016109fa906154ff565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610a515760405162461bcd60e51b81526004016109fa9061557d565b50610ac1565b6001600160401b0387166000908152606d6020526040902054915081610a8f5760405162461bcd60e51b81526004016109fa906155dd565b806001600160401b0316876001600160401b03161115610ac15760405162461bcd60e51b81526004016109fa90615634565b806001600160401b0316866001600160401b031611610af25760405162461bcd60e51b81526004016109fa906156a5565b6000610b018888888689610f74565b90506000600080516020615e91833981519152600283604051610b249190615722565b602060405180830381855afa158015610b41573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610b64919061573e565b610b6e919061576d565b9a9950505050505050505050565b606f8054610b8990615781565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb590615781565b8015610c025780601f10610bd757610100808354040283529160200191610c02565b820191906000526020600020905b815481529060010190602001808311610be557829003601f168201915b505050505081565b610c1261378d565b600080610c1d6129d3565b90506001600160401b038a1615610cb1576072546001600160401b03908116908b161115610c5d5760405162461bcd60e51b81526004016109fa906154ff565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610cab5760405162461bcd60e51b81526004016109fa9061557d565b50610d1b565b6001600160401b0389166000908152606d6020526040902054915081610ce95760405162461bcd60e51b81526004016109fa906155dd565b806001600160401b0316896001600160401b03161115610d1b5760405162461bcd60e51b81526004016109fa90615634565b806001600160401b0316886001600160401b031611610d4c5760405162461bcd60e51b81526004016109fa906156a5565b6000610d5b8a8a8a868b610f74565b606980546001600160401b0319166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610da857607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610dee57600080fd5b505af1158015610e02573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610e7d5760405162461bcd60e51b81526004016109fa906157bb565b6103e88161ffff1610158015610e9857506104008161ffff16105b610f1d5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a4016109fa565b6065805461ffff60481b1916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610fa657508115155b61101a576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109fa565b8061108f576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109fa565b606c54604080516001600160601b03193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b038281166000908152607160205260408120549092429261114b92600160801b90920481169116615814565b6001600160401b0316111592915050565b6073546001600160a01b031633146111865760405162461bcd60e51b81526004016109fa906157bb565b62093a806001600160401b038216111561121f5760405162461bcd60e51b815260206004820152604e60248201527f506f6c79676f6e5a6b45564d3a3a73657454727573746564416767726567617460448201527f6f7254696d656f75743a20457863656564206d61782068616c7420616767726560648201526d19d85d1a5bdb881d1a5b595bdd5d60921b608482015260a4016109fa565b60655460ff166112c2576072546001600160401b03600160c01b9091048116908216106112c25760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a204e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109fa565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610f69565b60655460ff161561133b5760405162461bcd60e51b81526004016109fa9061583f565b606954600160401b90046001600160a01b031633146113c25760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a204f6e6c7920747275737465642073657175656e63657200000000000060648201526084016109fa565b8051806114375760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e6365203120626174636800000060648201526084016109fa565b6103e881106114b0576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e79206261746368657360648201526084016109fa565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b85811015611915576000878281518110611503576115036158a7565b60200260200101519050600081606001516001600160401b03161115611693578361152d816158bd565b94505060008160000151805190602001208260200151836060015160405160200161155a939291906158e3565b60408051601f1981840301815291815281516020928301206001600160401b0388166000908152606690935291205490915081146115ee5760405162461bcd60e51b815260206004820152603d6024820152600080516020615eb183398151915260448201527f6f7263656420626174636865732064617461206d757374206d6174636800000060648201526084016109fa565b81606001516001600160401b031682604001516001600160401b0316101561168d5760405162461bcd60e51b81526020600482015260586024820152600080516020615eb183398151915260448201527f6f7263656420626174636865732074696d657374616d70206d757374206265206064820152773134b3b3b2b91037b91032b8bab0b6103a3430b71036b4b760411b608482015260a4016109fa565b50611808565b6020810151158061171c5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916116d69160040190815260200190565b6020604051808303816000875af11580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611719919061573e565b15155b61178e5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d75737420657869737400000000000060648201526084016109fa565b805151620493e0116118085760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016109fa565b856001600160401b031681604001516001600160401b03161015801561183b57504281604001516001600160401b031611155b6118ad5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e676500000060648201526084016109fa565b805180516020918201208183015160408085015190516118d4948894939291339101615906565b60405160208183030381529060405280519060200120925084806118f7906158bd565b9550508060400151955050808061190d90615945565b9150506114e7565b506068546001600160401b03600160c01b909104811690831611156119885760405162461bcd60e51b81526020600482015260356024820152600080516020615eb18339815191526044820152746f7263652062617463686573206f766572666c6f7760581b60648201526084016109fa565b6068546000906119a890600160801b90046001600160401b03168461595e565b6119bb906001600160401b031687615986565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611a9090339030908490611a75919061599d565b606554600160581b90046001600160a01b03169291906137e7565b611a98613852565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b025760405162461bcd60e51b81526004016109fa9061583f565b6072546001600160401b038781166000908152606760205260409020600101544292611b3992600160c01b90910481169116615814565b6001600160401b03161115611bc25760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2054727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a4016109fa565b6103e8611bcf888861595e565b6001600160401b031610611c4b5760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2043616e60448201527f6e6f74207665726966792074686174206d616e7920626174636865730000000060648201526084016109fa565b611c5b88888888888888886138f2565b611c6486613de3565b607254600160801b90046001600160401b0316600003611d2b57606980546001600160401b0319166001600160401b038881169182179092556000908152606d602052604090208590556072541615611cc857607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d0e57600080fd5b505af1158015611d22573d6000803e3d6000fd5b50505050611ddc565b611d33613852565b607280546001600160401b0316906000611d4c836158bd565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b606a546001600160a01b03163314611ed157611e4281611115565b611ed15760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2050656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a4016109fa565b611eda81613fc9565b50565b606e8054610b8990615781565b611ef261378d565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000858580519060200120858585604051602001611f36959493929190615906565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff1615808015611f775750600054600160ff909116105b80611f915750303b158015611f91575060005460ff166001145b611ff45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109fa565b6000805460ff191660011790558015612017576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c81169190911790925560658054600160581b600160f81b031916600160581b8c851602179055606b805482168a84161790556070805490911691881691909117905561207f60208601866150d1565b607380546001600160a01b0319166001600160a01b03929092169190911790556120af60608601604087016150d1565b606980546001600160a01b0392909216600160401b02600160401b600160e01b03199092169190911790556120ea60c0860160a087016150d1565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa71135684905561214760e0860160c08701614e69565b607280546001600160401b0392909216600160c01b026001600160c01b0390921691909117905561217e6040860160208701614e69565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b199092169190911790556121ba6080860160608701614e69565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b199092169190911790556121f660a08601608087016152ff565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e61221e8482615a02565b50606f61222b8382615a02565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556122616141ad565b80156122a7576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b031633146122dc5760405162461bcd60e51b81526004016109fa906157bb565b60698054600160401b600160e01b031916600160401b6001600160a01b038416021790556040517ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090610f69908390614e55565b6073546001600160a01b0316331461235a5760405162461bcd60e51b81526004016109fa906157bb565b607380546001600160a01b0319166001600160a01b0383161790556040517f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190610f69908390614e55565b6123ad61378d565b6123b7600061421d565b565b6033546001600160a01b031633146125b85760006123d56129d3565b9050806001600160401b0316826001600160401b03161161244c5760405162461bcd60e51b815260206004820152603c6024820152600080516020615e1183398151915260448201527f746174653a20426174636820616c72656164792076657269666965640000000060648201526084016109fa565b6068546001600160401b03600160401b90910481169083161180159061248e57506001600160401b038083166000908152606760205260409020600101541615155b6125075760405162461bcd60e51b81526020600482015260506024820152600080516020615e1183398151915260448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a4016109fa565b6001600160401b0380831660009081526067602052604090206001015442916125359162093a809116615814565b6001600160401b031611156125b65760405162461bcd60e51b815260206004820152604d6024820152600080516020615e1183398151915260448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a4016109fa565b505b611eda61426f565b60655460ff16156125e35760405162461bcd60e51b81526004016109fa9061583f565b6125f48989898989898989896142df565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a16122a761426f565b6073546001600160a01b031633146126795760405162461bcd60e51b81526004016109fa906157bb565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610f6990831515815260200190565b6126ce61378d565b606980546001600160401b0319166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81526000918291600160581b9091046001600160a01b0316906370a082319061272b903090600401614e55565b602060405180830381865afa158015612748573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061276c919061573e565b905060006127786129d3565b6068546001600160401b03600160401b82048116916127a891600160801b8204811691600160c01b90041661595e565b6127b29190615814565b6127bc919061595e565b6001600160401b031690506127d18183615ac1565b9250505090565b6127e061378d565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b031633146128375760405162461bcd60e51b81526004016109fa906157bb565b62093a806001600160401b03821611156128cb5760405162461bcd60e51b815260206004820152604960248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a20457863656564206d61782068616c74206167677265676174696f6064820152681b881d1a5b595bdd5d60ba1b608482015260a4016109fa565b60655460ff16612960576072546001600160401b03600160801b9091048116908216106129605760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a204e65772074696d656f7574206d757374206265206c6f7765720060648201526084016109fa565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610f69565b6129c361378d565b606f6129cf8282615a02565b5050565b6072546000906001600160401b031615612a1057506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612a4a5760405162461bcd60e51b81526004016109fa906157bb565b606e612a568282615a02565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610f699190614d15565b6073546001600160a01b03163314612ab05760405162461bcd60e51b81526004016109fa906157bb565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610f69565b60655460ff1615612b2a5760405162461bcd60e51b81526004016109fa9061583f565b606c54600160a01b900460ff161515600114612b585760405162461bcd60e51b81526004016109fa90615ad5565b805180612bbb5760405162461bcd60e51b815260206004820152603f6024820152600080516020615e7183398151915260448201527f65733a204d75737420666f726365206174206c6561737420312062617463680060648201526084016109fa565b6103e88110612c2c5760405162461bcd60e51b81526020600482015260436024820152600080516020615e7183398151915260448201527f65733a2043616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a4016109fa565b6068546001600160401b03600160c01b8204811691612c54918491600160801b900416615b3e565b1115612cb05760405162461bcd60e51b81526020600482015260376024820152600080516020615e71833981519152604482015276195cce88119bdc98d94818985d18da081a5b9d985b1a59604a1b60648201526084016109fa565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612ede576000868281518110612cfd57612cfd6158a7565b602002602001015190508380612d12906158bd565b945050600081600001518051906020012082602001518360400151604051602001612d3f939291906158e3565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612dde5760405162461bcd60e51b81526020600482015260426024820152600080516020615e7183398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109fa565b612de9600188615986565b8303612e805742620697808360400151612e039190615814565b6001600160401b03161115612e805760405162461bcd60e51b81526020600482015260496024820152600080516020615e7183398151915260448201527f65733a20466f72636564206261746368206973206e6f7420696e2074696d656f6064820152681d5d081c195c9a5bd960ba1b608482015260a4016109fa565b8151805160209182012081840151604051612ea393889392914291339101615906565b6040516020818303038152906040528051906020012093508580612ec6906158bd565b96505050508080612ed690615945565b915050612ce1565b50606880546001600160401b031916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b0319909216919091179286168502929092179091558554600160401b600160c01b03191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612fe85760405162461bcd60e51b81526004016109fa90615b56565b6073546001600160a01b031633146130125760405162461bcd60e51b81526004016109fa906157bb565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561306257600080fd5b505af1158015613076573d6000803e3d6000fd5b505050506123b7614903565b61308a61378d565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b0316331461311e5760405162461bcd60e51b81526004016109fa90615bb3565b61312f8989898989898989896142df565b606980546001600160401b0319166001600160401b038881169182179092556000908152606d60205260409020859055607254161561317957607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156131bf57600080fd5b505af11580156131d3573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff161561325b5760405162461bcd60e51b81526004016109fa9061583f565b606c54600160a01b900460ff1615156001146132895760405162461bcd60e51b81526004016109fa90615ad5565b600061329460745490565b9050818111156132f95760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a204e6f7420656e6044820152696f756768206d6174696360b01b60648201526084016109fa565b620493e083511061336a5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b60648201526084016109fa565b60655461338990600160581b90046001600160a01b03163330846137e7565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa1580156133d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133f7919061573e565b60688054919250600160c01b9091046001600160401b031690601861341b836158bd565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550508380519060200120814260405160200161345c939291906158e3565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361350057606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261355b565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161355293929190615c10565b60405180910390a25b50505050565b606a546001600160a01b0316331461358b5760405162461bcd60e51b81526004016109fa90615bb3565b61359b88888888888888886138f2565b606980546001600160401b0319166001600160401b038881169182179092556000908152606d6020526040902085905560725416156135e557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561362b57600080fd5b505af115801561363f573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e15565b6073546001600160a01b031633146136aa5760405162461bcd60e51b81526004016109fa906157bb565b606a80546001600160a01b0319166001600160a01b0383161790556040517f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90610f69908390614e55565b6136fd61378d565b6001600160a01b0381166137625760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109fa565b611eda8161421d565b61377361378d565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b031633146123b75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109fa565b6040516001600160a01b038085166024830152831660448201526064810182905261355b9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261495a565b6072546001600160401b03600160401b82048116911611156123b75760725460009061388f90600160401b90046001600160401b03166001615814565b905061389a81611115565b15611eda576072546000906002906138bc9084906001600160401b031661595e565b6138c69190615c43565b6138d09083615814565b90506138db81611115565b156138e9576129cf81613fc9565b6129cf82613fc9565b6000806138fd6129d3565b90506001600160401b038a1615613a63576072546001600160401b03908116908b1611156139b55760405162461bcd60e51b815260206004820152605960248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20706560448201527f6e64696e6753746174654e756d206d757374206265206c657373206f7220657160648201527875616c207468616e206c61737450656e64696e67537461746560381b608482015260a4016109fa565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613a5d5760405162461bcd60e51b815260206004820152604d6024820152600080516020615e3183398151915260448201527f69744e756d4261746368206d757374206d61746368207468652070656e64696e60648201526c0ce40e6e8c2e8ca40c4c2e8c6d609b1b608482015260a4016109fa565b50613b89565b6001600160401b0389166000908152606d6020526040902054915081613aed5760405162461bcd60e51b815260206004820152604460248201819052600080516020615e31833981519152908201527f69744e756d426174636820737461746520726f6f7420646f6573206e6f7420656064820152631e1a5cdd60e21b608482015260a4016109fa565b806001600160401b0316896001600160401b03161115613b895760405162461bcd60e51b815260206004820152605e6024820152600080516020615e3183398151915260448201527f69744e756d4261746368206d757374206265206c657373206f7220657175616c60648201527f207468616e2063757272656e744c617374566572696669656442617463680000608482015260a4016109fa565b806001600160401b0316886001600160401b031611613c315760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20666960448201527f6e616c4e65774261746368206d75737420626520626967676572207468616e206064820152770c6eae4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d60431b608482015260a4016109fa565b6000613c408a8a8a868b610f74565b90506000600080516020615e91833981519152600283604051613c639190615722565b602060405180830381855afa158015613c80573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613ca3919061573e565b613cad919061576d565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613cf1918b918b918b9190600401615c69565b602060405180830381865afa158015613d0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d329190615ce3565b613d925760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20496e60448201526a3b30b634b210383937b7b360a91b60648201526084016109fa565b613dd533613da0858d61595e565b6001600160401b0316613db16126f0565b613dbb919061599d565b606554600160581b90046001600160a01b03169190614a31565b505050505050505050505050565b6000613ded6129d3565b905081600080613dfd848461595e565b6001600160401b031690505b836001600160401b0316836001600160401b031614613eaf576001600160401b03808416600090815260676020526040902060655460018201549192610100909104811691613e59911642615986565b1115613e94576001810154613e7e90600160401b90046001600160401b03168561595e565b613e91906001600160401b031684615b3e565b92505b60010154600160401b90046001600160401b03169250613e09565b6000613ebb8383615986565b905082811015613f35576000613ed18285615986565b9050600c8111613ee15780613ee4565b600c5b9050613ef181600361599d565b613efc90600a615de4565b606554613f15908390600160481b900461ffff16615de4565b607454613f22919061599d565b613f2c9190615ac1565b60745550613fc1565b6000613f418483615986565b9050600c8111613f515780613f54565b600c5b90506000613f6382600361599d565b613f6e90600a615de4565b606554613f87908490600160481b900461ffff16615de4565b607454613f94919061599d565b613f9e9190615ac1565b905080607454607454613fb1919061599d565b613fbb9190615ac1565b60745550505b505050505050565b6001600160401b03811615801590613ff657506072546001600160401b03600160401b9091048116908216115b801561401157506072546001600160401b0390811690821611155b6140835760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a5f636f6e736f6c696461746550656e64696e60448201527f6753746174653a2070656e64696e6753746174654e756d20696e76616c69640060648201526084016109fa565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b928390049098166001600160401b0319909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b15801561413f57600080fd5b505af1158015614153573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e84600201546040516141a091815260200190565b60405180910390a3505050565b600054610100900460ff166142185760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109fa565b6123b7335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156142bf57600080fd5b505af11580156142d3573d6000803e3d6000fd5b505050506123b7614a61565b60006001600160401b038a161561444f576072546001600160401b03908116908b1611156143975760405162461bcd60e51b81526020600482015260656024820152600080516020615e5183398151915260448201527f696e6753746174653a2070656e64696e6753746174654e756d206d757374206260648201527f65206c657373206f7220657175616c207468616e206c61737450656e64696e67608482015264537461746560d81b60a482015260c4016109fa565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b90920416146144495760405162461bcd60e51b81526020600482015260596024820152600080516020615e5183398151915260448201527f696e6753746174653a20696e69744e756d4261746368206d757374206d6174636064820152780d040e8d0ca40e0cadcc8d2dcce40e6e8c2e8ca40c4c2e8c6d603b1b608482015260a4016109fa565b50614588565b506001600160401b0387166000908152606d6020526040902054806144e35760405162461bcd60e51b81526020600482015260506024820152600080516020615e5183398151915260448201527f696e6753746174653a20696e69744e756d426174636820737461746520726f6f60648201526f1d08191bd95cc81b9bdd08195e1a5cdd60821b608482015260a4016109fa565b6069546001600160401b0390811690891611156145885760405162461bcd60e51b81526020600482015260636024820152600080516020615e5183398151915260448201527f696e6753746174653a20696e69744e756d4261746368206d757374206265206c60648201527f657373206f7220657175616c207468616e206c617374566572696669656442616084820152620e8c6d60eb1b60a482015260c4016109fa565b6072546001600160401b03908116908a16118015906145b85750896001600160401b0316896001600160401b0316115b80156145d957506072546001600160401b03600160401b9091048116908a16115b61464a5760405162461bcd60e51b81526020600482015260486024820152600080516020615e5183398151915260448201527f696e6753746174653a2066696e616c50656e64696e6753746174654e756d20696064820152671b98dbdc9c9958dd60c21b608482015260a4016109fa565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146147035760405162461bcd60e51b81526020600482015260636024820152600080516020615e5183398151915260448201527f696e6753746174653a2066696e616c4e65774261746368206d7573742062652060648201527f657175616c207468616e2063757272656e744c617374566572696669656442616084820152620e8c6d60eb1b60a482015260c4016109fa565b6000614712898989858a610f74565b90506000600080516020615e918339815191526002836040516147359190615722565b602060405180830381855afa158015614752573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190614775919061573e565b61477f919061576d565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916147c3918a918a918a9190600401615c69565b602060405180830381865afa1580156147e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148049190615ce3565b61485e5760405162461bcd60e51b81526020600482015260376024820152600080516020615e5183398151915260448201527634b733a9ba30ba329d1024b73b30b634b210383937b7b360491b60648201526084016109fa565b6001600160401b038b16600090815260716020526040902060020154879003613dd55760405162461bcd60e51b815260206004820152605b6024820152600080516020615e5183398151915260448201527f696e6753746174653a2053746f72656420726f6f74206d75737420626520646960648201527f66666572656e74207468616e206e657720737461746520726f6f740000000000608482015260a4016109fa565b60655460ff166149255760405162461bcd60e51b81526004016109fa90615b56565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006149af826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614abc9092919063ffffffff16565b805190915015614a2c57808060200190518101906149cd9190615ce3565b614a2c5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109fa565b505050565b6040516001600160a01b038316602482015260448101829052614a2c90849063a9059cbb60e01b9060640161381b565b60655460ff1615614a845760405162461bcd60e51b81526004016109fa9061583f565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614acb8484600085614ad3565b949350505050565b606082471015614b345760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109fa565b600080866001600160a01b03168587604051614b509190615722565b60006040518083038185875af1925050503d8060008114614b8d576040519150601f19603f3d011682016040523d82523d6000602084013e614b92565b606091505b5091509150614ba387838387614bae565b979650505050505050565b60608315614c1d578251600003614c16576001600160a01b0385163b614c165760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109fa565b5081614acb565b614acb8383815115614c325781518083602001fd5b8060405162461bcd60e51b81526004016109fa9190614d15565b80356001600160401b0381168114614c6357600080fd5b919050565b600080600080600060a08688031215614c8057600080fd5b614c8986614c4c565b9450614c9760208701614c4c565b9350614ca560408701614c4c565b94979396509394606081013594506080013592915050565b60005b83811015614cd8578181015183820152602001614cc0565b8381111561355b5750506000910152565b60008151808452614d01816020860160208601614cbd565b601f01601f19169290920160200192915050565b602081526000614d286020830184614ce9565b9392505050565b8060408101831015614d4057600080fd5b92915050565b8060808101831015614d4057600080fd5b6000806000806000806000806101a0898b031215614d7457600080fd5b614d7d89614c4c565b9750614d8b60208a01614c4c565b9650614d9960408a01614c4c565b95506060890135945060808901359350614db68a60a08b01614d2f565b9250614dc58a60e08b01614d46565b9150614dd58a6101608b01614d2f565b90509295985092959890939650565b600060208284031215614df657600080fd5b813561ffff81168114614d2857600080fd5b600080600080600060a08688031215614e2057600080fd5b614e2986614c4c565b9450614e3760208701614c4c565b94979496505050506040830135926060810135926080909101359150565b6001600160a01b0391909116815260200190565b600060208284031215614e7b57600080fd5b614d2882614c4c565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614ebc57614ebc614e84565b60405290565b604051606081016001600160401b0381118282101715614ebc57614ebc614e84565b604051601f8201601f191681016001600160401b0381118282101715614f0c57614f0c614e84565b604052919050565b60006001600160401b03821115614f2d57614f2d614e84565b5060051b60200190565b600082601f830112614f4857600080fd5b81356001600160401b03811115614f6157614f61614e84565b614f74601f8201601f1916602001614ee4565b818152846020838601011115614f8957600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614fb957600080fd5b82356001600160401b0380821115614fd057600080fd5b818501915085601f830112614fe457600080fd5b8135614ff7614ff282614f14565b614ee4565b81815260059190911b8301840190848101908883111561501657600080fd5b8585015b838110156150af578035858111156150325760008081fd5b86016080818c03601f190181131561504a5760008081fd5b615052614e9a565b89830135888111156150645760008081fd5b6150728e8c83870101614f37565b8252506040808401358b830152606061508c818601614c4c565b8284015261509b848601614c4c565b90830152508552505091860191860161501a565b5098975050505050505050565b6001600160a01b0381168114611eda57600080fd5b6000602082840312156150e357600080fd5b8135614d28816150bc565b600080600080600060a0868803121561510657600080fd5b8535945060208601356001600160401b0381111561512357600080fd5b61512f88828901614f37565b9450506040860135925061514560608701614c4c565b91506080860135615155816150bc565b809150509295509295909350565b600080600080600080600080888a036101c081121561518157600080fd5b893561518c816150bc565b985060208a013561519c816150bc565b975060408a01356151ac816150bc565b965060608a01356151bc816150bc565b955060e0607f19820112156151d057600080fd5b5060808901935061016089013592506101808901356001600160401b03808211156151fa57600080fd5b6152068c838d01614f37565b93506101a08b013591508082111561521d57600080fd5b5061522a8b828c01614f37565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c03121561525957600080fd5b6152628a614c4c565b985061527060208b01614c4c565b975061527e60408b01614c4c565b965061528c60608b01614c4c565b955060808a0135945060a08a013593506152a98b60c08c01614d2f565b92506152b98b6101008c01614d46565b91506152c98b6101808c01614d2f565b90509295985092959850929598565b6000602082840312156152ea57600080fd5b5035919050565b8015158114611eda57600080fd5b60006020828403121561531157600080fd5b8135614d28816152f1565b60006020828403121561532e57600080fd5b81356001600160401b0381111561534457600080fd5b614acb84828501614f37565b6000602080838503121561536357600080fd5b82356001600160401b038082111561537a57600080fd5b818501915085601f83011261538e57600080fd5b813561539c614ff282614f14565b81815260059190911b830184019084810190888311156153bb57600080fd5b8585015b838110156150af578035858111156153d75760008081fd5b86016060818c03601f19018113156153ef5760008081fd5b6153f7614ec2565b89830135888111156154095760008081fd5b6154178e8c83870101614f37565b8252506040808401358b83015261542f838501614c4c565b90820152855250509186019186016153bf565b6000806000806080858703121561545857600080fd5b61546185614c4c565b93506020850135925061547660408601614c4c565b915061548460608601614c4c565b905092959194509250565b600080604083850312156154a257600080fd5b82356001600160401b038111156154b857600080fd5b6154c485828601614f37565b95602094909401359450505050565b600080604083850312156154e657600080fd5b823591506154f660208401614c4c565b90509250929050565b60208082526058908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2070656e60408201527f64696e6753746174654e756d206d757374206265206c657373206f7220657175606082015277616c207468616e206c61737450656e64696e67537461746560401b608082015260a00190565b6020808252604c90820152600080516020615df183398151915260408201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760608201526b040e6e8c2e8ca40c4c2e8c6d60a31b608082015260a00190565b6020808252604390820152600080516020615df183398151915260408201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786060820152621a5cdd60ea1b608082015260a00190565b6020808252605d90820152600080516020615df183398151915260408201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060608201527f7468616e2063757272656e744c61737456657269666965644261746368000000608082015260a00190565b60208082526057908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2066696e60408201527f616c4e65774261746368206d75737420626520626967676572207468616e20636060820152760eae4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d604b1b608082015260a00190565b60008251615734818460208701614cbd565b9190910192915050565b60006020828403121561575057600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b60008261577c5761577c615757565b500690565b600181811c9082168061579557607f821691505b6020821081036157b557634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a204f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115615836576158366157fe565b01949350505050565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b038083168181036158d9576158d96157fe565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6001600160601b0319166068820152607c0190565b600060018201615957576159576157fe565b5060010190565b60006001600160401b038381169083168181101561597e5761597e6157fe565b039392505050565b600082821015615998576159986157fe565b500390565b60008160001904831182151516156159b7576159b76157fe565b500290565b601f821115614a2c57600081815260208120601f850160051c810160208610156159e35750805b601f850160051c820191505b81811015613fc1578281556001016159ef565b81516001600160401b03811115615a1b57615a1b614e84565b615a2f81615a298454615781565b846159bc565b602080601f831160018114615a645760008415615a4c5750858301515b600019600386901b1c1916600185901b178555613fc1565b600085815260208120601f198616915b82811015615a9357888601518255948401946001909101908401615a74565b5085821015615ab15787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615ad057615ad0615757565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a204f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b60008219821115615b5157615b516157fe565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a204f6e6c7920747275737465642061676772656761746f7200000000606082015260800190565b8381526001600160a01b0383166020820152606060408201819052600090615c3a90830184614ce9565b95945050505050565b60006001600160401b0380841680615c5d57615c5d615757565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615ca157848483379084018281529284019290600101615c81565b5050828760c0870137610100850181815286935091505b6001811015615cd7578251825260209283019290910190600101615cb8565b50505095945050505050565b600060208284031215615cf557600080fd5b8151614d28816152f1565b600181815b80851115615d3b578160001904821115615d2157615d216157fe565b80851615615d2e57918102915b93841c9390800290615d05565b509250929050565b600082615d5257506001614d40565b81615d5f57506000614d40565b8160018114615d755760028114615d7f57615d9b565b6001915050614d40565b60ff841115615d9057615d906157fe565b50506001821b614d40565b5060208310610133831016604e8410600b8410161715615dbe575081810a614d40565b615dc88383615d00565b8060001904821115615ddc57615ddc6157fe565b029392505050565b6000614d288383615d4356fe506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e69506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e637953506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20696e506f6c79676f6e5a6b45564d3a3a5f70726f766544697374696e637450656e64506f6c79676f6e5a6b45564d3a3a73657175656e6365466f726365426174636830644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a2046a2646970667358221220167a8f9be9686096974434bdb06f09cd7d4921d903936f91eb32d732ac4f1e6564736f6c634300080f0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103925760003560e01c806396dc3d39116101e0578063cfa8ed4711610110578063e7a7ed02116100a8578063e7a7ed0214610905578063e8bf92ed1461091f578063eaeb077b14610932578063edc4112114610945578063f14916d614610958578063f2fde38b1461096b578063f851a4401461097e578063f8b823e414610991578063fe16564f1461099a57600080fd5b8063cfa8ed4714610860578063d02103ca1461087a578063d8d1091b1461088d578063d8f54db0146108a0578063d939b315146108b4578063dbc16976146108ce578063e0d17441146108d6578063e11f3f18146108e9578063e217cfd6146108fc57600080fd5b8063ab9fc5ef11610183578063ab9fc5ef14610759578063adc879e914610763578063afd23cbe1461077d578063b4d63f58146107a5578063b6b0b09714610805578063c0cad3021461081f578063c0ed84e014610832578063c89e42df1461083a578063cf1363061461084d57600080fd5b806396dc3d39146106dd57806399f5634e146106f05780639b796760146106f85780639c9f3dfe1461070b5780639eb831b91461071e5780639f0d039d14610726578063a3c573eb1461072e578063aa58bad61461074157600080fd5b80634a910e6a116102c6578063715018a61161025e578063715018a6146105e65780637215541a146105ee57806375c508b3146106015780637fcb365314610614578063837a473814610627578063841b24d7146106955780638b48931e146106af5780638c4a0af7146106b95780638da5cb5b146106cc57600080fd5b80634a910e6a1461052c5780635392c5e01461053f578063542028d51461055f5780635437988d14610567578063574f649e1461057a57806360943d6a1461058d5780636b8616ce146105a05780636ff512cc146105c0578063704b6c02146105d357600080fd5b80632d0889d3116103395780632d0889d314610475578063383b3be81461047f578063394218e9146104925780633c158267146104a5578063423fa856146104b857806345605267146104d2578063458c0477146104ec5780634834a343146104ff5780634a1a89a71461051257600080fd5b80630eaa86ea14610397578063107bf28c146103bd57806310a01a72146103d257806315064c96146103e75780631816b7e51461040457806319d8ac6114610417578063220d7899146104425780632987898314610455575b600080fd5b6103aa6103a5366004614c68565b6109ad565b6040519081526020015b60405180910390f35b6103c5610b7c565b6040516103b49190614d15565b6103e56103e0366004614d57565b610c0a565b005b6065546103f49060ff1681565b60405190151581526020016103b4565b6103e5610412366004614de4565b610e53565b60685461042a906001600160401b031681565b6040516001600160401b0390911681526020016103b4565b6103c5610450366004614e08565b610f74565b606a54610468906001600160a01b031681565b6040516103b49190614e55565b6103aa620493e081565b6103f461048d366004614e69565b611115565b6103e56104a0366004614e69565b61115c565b6103e56104b3366004614fa6565b611318565b60685461042a90600160401b90046001600160401b031681565b60685461042a90600160801b90046001600160401b031681565b60725461042a906001600160401b031681565b6103e561050d366004614d57565b611adf565b60725461042a90600160401b90046001600160401b031681565b6103e561053a366004614e69565b611e27565b6103aa61054d366004614e69565b606d6020526000908152604090205481565b6103c5611edd565b6103e56105753660046150d1565b611eea565b6103aa6105883660046150ee565b611f14565b6103e561059b366004615163565b611f57565b6103aa6105ae366004614e69565b60666020526000908152604090205481565b6103e56105ce3660046150d1565b6122b2565b6103e56105e13660046150d1565b612330565b6103e56123a5565b6103e56105fc366004614e69565b6123b9565b6103e561060f36600461523a565b6125c0565b60695461042a906001600160401b031681565b61066a6106353660046152d8565b6071602052600090815260409020805460018201546002909201546001600160401b0380831693600160401b90930416919084565b604080516001600160401b0395861681529490931660208501529183015260608201526080016103b4565b60725461042a90600160c01b90046001600160401b031681565b61042a62093a8081565b6103e56106c73660046152ff565b61264f565b6033546001600160a01b0316610468565b6103e56106eb366004614e69565b6126c6565b6103aa6126f0565b6103e5610706366004614e69565b6127d8565b6103e5610719366004614e69565b61280d565b6103aa600c81565b6074546103aa565b607054610468906001600160a01b031681565b60655461042a9061010090046001600160401b031681565b61042a6206978081565b606c5461042a90600160a81b90046001600160401b031681565b60655461079290600160481b900461ffff1681565b60405161ffff90911681526020016103b4565b6107e06107b3366004614e69565b606760205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b604080519384526001600160401b0392831660208501529116908201526060016103b4565b60655461046890600160581b90046001600160a01b031681565b6103e561082d36600461531c565b6129bb565b61042a6129d3565b6103e561084836600461531c565b612a20565b6103e561085b366004614e69565b612a86565b60695461046890600160401b90046001600160a01b031681565b606c54610468906001600160a01b031681565b6103e561089b366004615350565b612b07565b606c546103f490600160a01b900460ff1681565b60725461042a90600160801b90046001600160401b031681565b6103e5612fc6565b6103e56108e4366004615442565b613082565b6103e56108f736600461523a565b6130f4565b61042a6103e881565b60685461042a90600160c01b90046001600160401b031681565b606b54610468906001600160a01b031681565b6103e561094036600461548f565b613238565b6103e5610953366004614d57565b613561565b6103e56109663660046150d1565b613680565b6103e56109793660046150d1565b6136f5565b607354610468906001600160a01b031681565b6103aa60745481565b6103e56109a83660046154d3565b61376b565b60008060006109ba6129d3565b90506001600160401b03881615610a57576072546001600160401b039081169089161115610a035760405162461bcd60e51b81526004016109fa906154ff565b60405180910390fd5b6001600160401b038089166000908152607160205260409020600281015481549094509091898116600160401b9092041614610a515760405162461bcd60e51b81526004016109fa9061557d565b50610ac1565b6001600160401b0387166000908152606d6020526040902054915081610a8f5760405162461bcd60e51b81526004016109fa906155dd565b806001600160401b0316876001600160401b03161115610ac15760405162461bcd60e51b81526004016109fa90615634565b806001600160401b0316866001600160401b031611610af25760405162461bcd60e51b81526004016109fa906156a5565b6000610b018888888689610f74565b90506000600080516020615e91833981519152600283604051610b249190615722565b602060405180830381855afa158015610b41573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610b64919061573e565b610b6e919061576d565b9a9950505050505050505050565b606f8054610b8990615781565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb590615781565b8015610c025780601f10610bd757610100808354040283529160200191610c02565b820191906000526020600020905b815481529060010190602001808311610be557829003601f168201915b505050505081565b610c1261378d565b600080610c1d6129d3565b90506001600160401b038a1615610cb1576072546001600160401b03908116908b161115610c5d5760405162461bcd60e51b81526004016109fa906154ff565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614610cab5760405162461bcd60e51b81526004016109fa9061557d565b50610d1b565b6001600160401b0389166000908152606d6020526040902054915081610ce95760405162461bcd60e51b81526004016109fa906155dd565b806001600160401b0316896001600160401b03161115610d1b5760405162461bcd60e51b81526004016109fa90615634565b806001600160401b0316886001600160401b031611610d4c5760405162461bcd60e51b81526004016109fa906156a5565b6000610d5b8a8a8a868b610f74565b606980546001600160401b0319166001600160401b038c81169182179092556000908152606d602052604090208990556072549192501615610da857607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018a90526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015610dee57600080fd5b505af1158015610e02573d6000803e3d6000fd5b50506040518981523392506001600160401b038c1691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce79060200160405180910390a35050505050505050505050565b6073546001600160a01b03163314610e7d5760405162461bcd60e51b81526004016109fa906157bb565b6103e88161ffff1610158015610e9857506104008161ffff16105b610f1d5760405162461bcd60e51b815260206004820152604a60248201527f506f6c79676f6e5a6b45564d3a3a7365744d756c7469706c696572426174636860448201527f4665653a206e65774d756c7469706c696572426174636846656520696e636f72606482015269726563742072616e676560b01b608482015260a4016109fa565b6065805461ffff60481b1916600160481b61ffff8416908102919091179091556040519081527f7019933d795eba185c180209e8ae8bffbaa25bcef293364687702c31f4d302c5906020015b60405180910390a150565b6001600160401b03808616600081815260676020526040808220549388168252902054606092911580610fa657508115155b61101a576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206f6c64416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109fa565b8061108f576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a676574496e707574536e61726b427974657360448201527f3a206e6577416363496e7075744861736820646f6573206e6f7420657869737460648201526084016109fa565b606c54604080516001600160601b03193360601b166020820152603481019790975260548701939093526001600160c01b031960c0998a1b81166074880152600160a81b909104891b8116607c870152608486019490945260a485015260c4840194909452509290931b90911660e4830152805180830360cc01815260ec909201905290565b6072546001600160401b038281166000908152607160205260408120549092429261114b92600160801b90920481169116615814565b6001600160401b0316111592915050565b6073546001600160a01b031633146111865760405162461bcd60e51b81526004016109fa906157bb565b62093a806001600160401b038216111561121f5760405162461bcd60e51b815260206004820152604e60248201527f506f6c79676f6e5a6b45564d3a3a73657454727573746564416767726567617460448201527f6f7254696d656f75743a20457863656564206d61782068616c7420616767726560648201526d19d85d1a5bdb881d1a5b595bdd5d60921b608482015260a4016109fa565b60655460ff166112c2576072546001600160401b03600160c01b9091048116908216106112c25760405162461bcd60e51b8152602060048201526044602482018190527f506f6c79676f6e5a6b45564d3a3a736574547275737465644167677265676174908201527f6f7254696d656f75743a204e65772074696d656f7574206d757374206265206c60648201526337bbb2b960e11b608482015260a4016109fa565b607280546001600160c01b0316600160c01b6001600160401b038416908102919091179091556040519081527f1f4fa24c2e4bad19a7f3ec5c5485f70d46c798461c2e684f55bbd0fc661373a190602001610f69565b60655460ff161561133b5760405162461bcd60e51b81526004016109fa9061583f565b606954600160401b90046001600160a01b031633146113c25760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a6f6e6c795472757374656453657175656e6360448201527f65723a204f6e6c7920747275737465642073657175656e63657200000000000060648201526084016109fa565b8051806114375760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204160448201527f74206c65617374206d7573742073657175656e6365203120626174636800000060648201526084016109fa565b6103e881106114b0576040805162461bcd60e51b81526020600482015260248101919091527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204360448201527f616e6e6f742073657175656e63652074686174206d616e79206261746368657360648201526084016109fa565b6068546001600160401b03600160401b82048116600081815260676020526040812054838516949293600160801b90930490921691905b85811015611915576000878281518110611503576115036158a7565b60200260200101519050600081606001516001600160401b03161115611693578361152d816158bd565b94505060008160000151805190602001208260200151836060015160405160200161155a939291906158e3565b60408051601f1981840301815291815281516020928301206001600160401b0388166000908152606690935291205490915081146115ee5760405162461bcd60e51b815260206004820152603d6024820152600080516020615eb183398151915260448201527f6f7263656420626174636865732064617461206d757374206d6174636800000060648201526084016109fa565b81606001516001600160401b031682604001516001600160401b0316101561168d5760405162461bcd60e51b81526020600482015260586024820152600080516020615eb183398151915260448201527f6f7263656420626174636865732074696d657374616d70206d757374206265206064820152773134b3b3b2b91037b91032b8bab0b6103a3430b71036b4b760411b608482015260a4016109fa565b50611808565b6020810151158061171c5750606c5460208201516040516312bd9b1960e11b81526001600160a01b039092169163257b3632916116d69160040190815260200190565b6020604051808303816000875af11580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611719919061573e565b15155b61178e5760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a204760448201527f6c6f62616c206578697420726f6f74206d75737420657869737400000000000060648201526084016109fa565b805151620493e0116118085760405162461bcd60e51b815260206004820152603a60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f72616e73616374696f6e73206279746573206f766572666c6f7700000000000060648201526084016109fa565b856001600160401b031681604001516001600160401b03161015801561183b57504281604001516001600160401b031611155b6118ad5760405162461bcd60e51b815260206004820152603d60248201527f506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a205460448201527f696d657374616d70206d75737420626520696e736964652072616e676500000060648201526084016109fa565b805180516020918201208183015160408085015190516118d4948894939291339101615906565b60405160208183030381529060405280519060200120925084806118f7906158bd565b9550508060400151955050808061190d90615945565b9150506114e7565b506068546001600160401b03600160c01b909104811690831611156119885760405162461bcd60e51b81526020600482015260356024820152600080516020615eb18339815191526044820152746f7263652062617463686573206f766572666c6f7760581b60648201526084016109fa565b6068546000906119a890600160801b90046001600160401b03168461595e565b6119bb906001600160401b031687615986565b60408051606081018252848152426001600160401b03908116602080840191825260688054600160401b9081900485168688019081528c861660008181526067909552979093209551865592516001909501805492519585166001600160801b03199384161795851684029590951790945583548b841691161793029290921767ffffffffffffffff60801b1916600160801b92871692909202919091179055607454909150611a9090339030908490611a75919061599d565b606554600160581b90046001600160a01b03169291906137e7565b611a98613852565b606854604051600160401b9091046001600160401b0316907f303446e6a8cb73c83dff421c0b1d5e5ce0719dab1bff13660fc254e58cc17fce90600090a250505050505050565b60655460ff1615611b025760405162461bcd60e51b81526004016109fa9061583f565b6072546001600160401b038781166000908152606760205260409020600101544292611b3992600160c01b90910481169116615814565b6001600160401b03161115611bc25760405162461bcd60e51b815260206004820152604360248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2054727560448201527f737465642061676772656761746f722074696d656f7574206e6f7420657870696064820152621c995960ea1b608482015260a4016109fa565b6103e8611bcf888861595e565b6001600160401b031610611c4b5760405162461bcd60e51b815260206004820152603c60248201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2043616e60448201527f6e6f74207665726966792074686174206d616e7920626174636865730000000060648201526084016109fa565b611c5b88888888888888886138f2565b611c6486613de3565b607254600160801b90046001600160401b0316600003611d2b57606980546001600160401b0319166001600160401b038881169182179092556000908152606d602052604090208590556072541615611cc857607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b158015611d0e57600080fd5b505af1158015611d22573d6000803e3d6000fd5b50505050611ddc565b611d33613852565b607280546001600160401b0316906000611d4c836158bd565b82546001600160401b039182166101009390930a92830292820219169190911790915560408051608081018252428316815289831660208083019182528284018b8152606084018b8152607254871660009081526071909352949091209251835492518616600160401b026001600160801b03199093169516949094171781559151600183015551600290910155505b60405184815233906001600160401b038816907f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f5966906020015b60405180910390a35050505050505050565b606a546001600160a01b03163314611ed157611e4281611115565b611ed15760405162461bcd60e51b815260206004820152605460248201527f506f6c79676f6e5a6b45564d3a3a636f6e736f6c696461746550656e64696e6760448201527f53746174653a2050656e64696e67207374617465206973206e6f7420726561646064820152731e481d1bc818994818dbdb9cdbdb1a59185d195960621b608482015260a4016109fa565b611eda81613fc9565b50565b606e8054610b8990615781565b611ef261378d565b606b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000858580519060200120858585604051602001611f36959493929190615906565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff1615808015611f775750600054600160ff909116105b80611f915750303b158015611f91575060005460ff166001145b611ff45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016109fa565b6000805460ff191660011790558015612017576000805461ff0019166101001790555b606c80546001600160a01b03199081166001600160a01b038c81169190911790925560658054600160581b600160f81b031916600160581b8c851602179055606b805482168a84161790556070805490911691881691909117905561207f60208601866150d1565b607380546001600160a01b0319166001600160a01b03929092169190911790556120af60608601604087016150d1565b606980546001600160a01b0392909216600160401b02600160401b600160e01b03199092169190911790556120ea60c0860160a087016150d1565b606a80546001600160a01b0319166001600160a01b039290921691909117905560008052606d6020527fda90043ba5b4096ba14704bc227ab0d3167da15b887e62ab2e76e37daa71135684905561214760e0860160c08701614e69565b607280546001600160401b0392909216600160c01b026001600160c01b0390921691909117905561217e6040860160208701614e69565b606c80546001600160401b0392909216600160a81b0267ffffffffffffffff60a81b199092169190911790556121ba6080860160608701614e69565b607280546001600160401b0392909216600160801b0267ffffffffffffffff60801b199092169190911790556121f660a08601608087016152ff565b606c8054911515600160a01b0260ff60a01b19909216919091179055606e61221e8482615a02565b50606f61222b8382615a02565b50670de0b6b3a7640000607455606580546affffffffffffffffffff0019166a03ea0000000000000708001790556122616141ad565b80156122a7576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6073546001600160a01b031633146122dc5760405162461bcd60e51b81526004016109fa906157bb565b60698054600160401b600160e01b031916600160401b6001600160a01b038416021790556040517ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090610f69908390614e55565b6073546001600160a01b0316331461235a5760405162461bcd60e51b81526004016109fa906157bb565b607380546001600160a01b0319166001600160a01b0383161790556040517f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a190610f69908390614e55565b6123ad61378d565b6123b7600061421d565b565b6033546001600160a01b031633146125b85760006123d56129d3565b9050806001600160401b0316826001600160401b03161161244c5760405162461bcd60e51b815260206004820152603c6024820152600080516020615e1183398151915260448201527f746174653a20426174636820616c72656164792076657269666965640000000060648201526084016109fa565b6068546001600160401b03600160401b90910481169083161180159061248e57506001600160401b038083166000908152606760205260409020600101541615155b6125075760405162461bcd60e51b81526020600482015260506024820152600080516020615e1183398151915260448201527f746174653a204261746368206e6f742073657175656e636564206f72206e6f7460648201526f20656e64206f662073657175656e636560801b608482015260a4016109fa565b6001600160401b0380831660009081526067602052604090206001015442916125359162093a809116615814565b6001600160401b031611156125b65760405162461bcd60e51b815260206004820152604d6024820152600080516020615e1183398151915260448201527f746174653a204167677265676174696f6e2068616c742074696d656f7574206960648201526c1cc81b9bdd08195e1c1a5c9959609a1b608482015260a4016109fa565b505b611eda61426f565b60655460ff16156125e35760405162461bcd60e51b81526004016109fa9061583f565b6125f48989898989898989896142df565b6001600160401b0386166000908152606d60209081526040918290205482519081529081018690527f1f44c21118c4603cfb4e1b621dbcfa2b73efcececee2b99b620b2953d33a7010910160405180910390a16122a761426f565b6073546001600160a01b031633146126795760405162461bcd60e51b81526004016109fa906157bb565b606c8054821515600160a01b0260ff60a01b199091161790556040517fbacda50a4a8575be1d91a7ebe29ee45056f3a94f12a2281eb6b43afa33bcefe690610f6990831515815260200190565b6126ce61378d565b606980546001600160401b0319166001600160401b0392909216919091179055565b6065546040516370a0823160e01b81526000918291600160581b9091046001600160a01b0316906370a082319061272b903090600401614e55565b602060405180830381865afa158015612748573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061276c919061573e565b905060006127786129d3565b6068546001600160401b03600160401b82048116916127a891600160801b8204811691600160c01b90041661595e565b6127b29190615814565b6127bc919061595e565b6001600160401b031690506127d18183615ac1565b9250505090565b6127e061378d565b606880546001600160401b03909216600160401b0267ffffffffffffffff60401b19909216919091179055565b6073546001600160a01b031633146128375760405162461bcd60e51b81526004016109fa906157bb565b62093a806001600160401b03821611156128cb5760405162461bcd60e51b815260206004820152604960248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a20457863656564206d61782068616c74206167677265676174696f6064820152681b881d1a5b595bdd5d60ba1b608482015260a4016109fa565b60655460ff16612960576072546001600160401b03600160801b9091048116908216106129605760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a73657450656e64696e67537461746554696d60448201527f656f75743a204e65772074696d656f7574206d757374206265206c6f7765720060648201526084016109fa565b6072805467ffffffffffffffff60801b1916600160801b6001600160401b038416908102919091179091556040519081527fc4121f4e22c69632ebb7cf1f462be0511dc034f999b52013eddfb24aab765c7590602001610f69565b6129c361378d565b606f6129cf8282615a02565b5050565b6072546000906001600160401b031615612a1057506072546001600160401b03908116600090815260716020526040902054600160401b90041690565b506069546001600160401b031690565b6073546001600160a01b03163314612a4a5760405162461bcd60e51b81526004016109fa906157bb565b606e612a568282615a02565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610f699190614d15565b6073546001600160a01b03163314612ab05760405162461bcd60e51b81526004016109fa906157bb565b6065805468ffffffffffffffff0019166101006001600160401b038416908102919091179091556040519081527f03a12f7e53d2a9e31a9e913d85c12c4c38feb92abe003c111329298af088437f90602001610f69565b60655460ff1615612b2a5760405162461bcd60e51b81526004016109fa9061583f565b606c54600160a01b900460ff161515600114612b585760405162461bcd60e51b81526004016109fa90615ad5565b805180612bbb5760405162461bcd60e51b815260206004820152603f6024820152600080516020615e7183398151915260448201527f65733a204d75737420666f726365206174206c6561737420312062617463680060648201526084016109fa565b6103e88110612c2c5760405162461bcd60e51b81526020600482015260436024820152600080516020615e7183398151915260448201527f65733a2043616e6e6f74207665726966792074686174206d616e79206261746360648201526268657360e81b608482015260a4016109fa565b6068546001600160401b03600160c01b8204811691612c54918491600160801b900416615b3e565b1115612cb05760405162461bcd60e51b81526020600482015260376024820152600080516020615e71833981519152604482015276195cce88119bdc98d94818985d18da081a5b9d985b1a59604a1b60648201526084016109fa565b6068546001600160401b03600160401b820481166000818152606760205260408120549193600160801b9004909216915b84811015612ede576000868281518110612cfd57612cfd6158a7565b602002602001015190508380612d12906158bd565b945050600081600001518051906020012082602001518360400151604051602001612d3f939291906158e3565b60408051601f1981840301815291815281516020928301206001600160401b038816600090815260669093529120549091508114612dde5760405162461bcd60e51b81526020600482015260426024820152600080516020615e7183398151915260448201527f65733a20466f7263656420626174636865732064617461206d757374206d61746064820152610c6d60f31b608482015260a4016109fa565b612de9600188615986565b8303612e805742620697808360400151612e039190615814565b6001600160401b03161115612e805760405162461bcd60e51b81526020600482015260496024820152600080516020615e7183398151915260448201527f65733a20466f72636564206261746368206973206e6f7420696e2074696d656f6064820152681d5d081c195c9a5bd960ba1b608482015260a4016109fa565b8151805160209182012081840151604051612ea393889392914291339101615906565b6040516020818303038152906040528051906020012093508580612ec6906158bd565b96505050508080612ed690615945565b915050612ce1565b50606880546001600160401b031916426001600160401b03908116918217808455604080516060810182528681526020808201958652600160401b9384900485168284019081528a861660008181526067909352848320935184559651600193909301805491519387166001600160801b0319909216919091179286168502929092179091558554600160401b600160c01b03191694830267ffffffffffffffff60801b191694909417600160801b88851602179485905551930416917f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a49190a25050505050565b60655460ff16612fe85760405162461bcd60e51b81526004016109fa90615b56565b6073546001600160a01b031633146130125760405162461bcd60e51b81526004016109fa906157bb565b607060009054906101000a90046001600160a01b03166001600160a01b031663dbc169766040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561306257600080fd5b505af1158015613076573d6000803e3d6000fd5b505050506123b7614903565b61308a61378d565b604080516060810182529384526001600160401b03928316602080860191825292841685830190815295841660009081526067909352912092518355516001909201805493518216600160401b026001600160801b03199094169290911691909117919091179055565b606a546001600160a01b0316331461311e5760405162461bcd60e51b81526004016109fa90615bb3565b61312f8989898989898989896142df565b606980546001600160401b0319166001600160401b038881169182179092556000908152606d60205260409020859055607254161561317957607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b1580156131bf57600080fd5b505af11580156131d3573d6000803e3d6000fd5b5050607280546001600160c01b031661127560c71b179055505060405184815233906001600160401b038816907fcc1b5520188bf1dd3e63f98164b577c4d75c11a619ddea692112f0d1aec4cf729060200160405180910390a3505050505050505050565b60655460ff161561325b5760405162461bcd60e51b81526004016109fa9061583f565b606c54600160a01b900460ff1615156001146132895760405162461bcd60e51b81526004016109fa90615ad5565b600061329460745490565b9050818111156132f95760405162461bcd60e51b815260206004820152602a60248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a204e6f7420656e6044820152696f756768206d6174696360b01b60648201526084016109fa565b620493e083511061336a5760405162461bcd60e51b815260206004820152603560248201527f506f6c79676f6e5a6b45564d3a3a666f72636542617463683a205472616e73616044820152746374696f6e73206279746573206f766572666c6f7760581b60648201526084016109fa565b60655461338990600160581b90046001600160a01b03163330846137e7565b606c5460408051633ed691ef60e01b815290516000926001600160a01b031691633ed691ef9160048083019260209291908290030181865afa1580156133d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133f7919061573e565b60688054919250600160c01b9091046001600160401b031690601861341b836158bd565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550508380519060200120814260405160200161345c939291906158e3565b60408051808303601f190181529181528151602092830120606854600160c01b90046001600160401b03166000908152606690935291205532330361350057606854604080518381523360208201526060918101829052600091810191909152600160c01b9091046001600160401b0316907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319060800160405180910390a261355b565b606860189054906101000a90046001600160401b03166001600160401b03167ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc93182338760405161355293929190615c10565b60405180910390a25b50505050565b606a546001600160a01b0316331461358b5760405162461bcd60e51b81526004016109fa90615bb3565b61359b88888888888888886138f2565b606980546001600160401b0319166001600160401b038881169182179092556000908152606d6020526040902085905560725416156135e557607280546001600160801b03191690555b606c546040516333d6247d60e01b8152600481018790526001600160a01b03909116906333d6247d90602401600060405180830381600087803b15801561362b57600080fd5b505af115801561363f573d6000803e3d6000fd5b50506040518681523392506001600160401b03891691507f0c0ce073a7d7b5850c04ccc4b20ee7d3179d5f57d0ac44399565792c0f72fce790602001611e15565b6073546001600160a01b031633146136aa5760405162461bcd60e51b81526004016109fa906157bb565b606a80546001600160a01b0319166001600160a01b0383161790556040517f61f8fec29495a3078e9271456f05fb0707fd4e41f7661865f80fc437d06681ca90610f69908390614e55565b6136fd61378d565b6001600160a01b0381166137625760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109fa565b611eda8161421d565b61377361378d565b6001600160401b03166000908152606d6020526040902055565b6033546001600160a01b031633146123b75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109fa565b6040516001600160a01b038085166024830152831660448201526064810182905261355b9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261495a565b6072546001600160401b03600160401b82048116911611156123b75760725460009061388f90600160401b90046001600160401b03166001615814565b905061389a81611115565b15611eda576072546000906002906138bc9084906001600160401b031661595e565b6138c69190615c43565b6138d09083615814565b90506138db81611115565b156138e9576129cf81613fc9565b6129cf82613fc9565b6000806138fd6129d3565b90506001600160401b038a1615613a63576072546001600160401b03908116908b1611156139b55760405162461bcd60e51b815260206004820152605960248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20706560448201527f6e64696e6753746174654e756d206d757374206265206c657373206f7220657160648201527875616c207468616e206c61737450656e64696e67537461746560381b608482015260a4016109fa565b6001600160401b03808b1660009081526071602052604090206002810154815490945090918b8116600160401b9092041614613a5d5760405162461bcd60e51b815260206004820152604d6024820152600080516020615e3183398151915260448201527f69744e756d4261746368206d757374206d61746368207468652070656e64696e60648201526c0ce40e6e8c2e8ca40c4c2e8c6d609b1b608482015260a4016109fa565b50613b89565b6001600160401b0389166000908152606d6020526040902054915081613aed5760405162461bcd60e51b815260206004820152604460248201819052600080516020615e31833981519152908201527f69744e756d426174636820737461746520726f6f7420646f6573206e6f7420656064820152631e1a5cdd60e21b608482015260a4016109fa565b806001600160401b0316896001600160401b03161115613b895760405162461bcd60e51b815260206004820152605e6024820152600080516020615e3183398151915260448201527f69744e756d4261746368206d757374206265206c657373206f7220657175616c60648201527f207468616e2063757272656e744c617374566572696669656442617463680000608482015260a4016109fa565b806001600160401b0316886001600160401b031611613c315760405162461bcd60e51b815260206004820152605860248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20666960448201527f6e616c4e65774261746368206d75737420626520626967676572207468616e206064820152770c6eae4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d60431b608482015260a4016109fa565b6000613c408a8a8a868b610f74565b90506000600080516020615e91833981519152600283604051613c639190615722565b602060405180830381855afa158015613c80573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190613ca3919061573e565b613cad919061576d565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d91613cf1918b918b918b9190600401615c69565b602060405180830381865afa158015613d0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d329190615ce3565b613d925760405162461bcd60e51b815260206004820152602b60248201527f506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20496e60448201526a3b30b634b210383937b7b360a91b60648201526084016109fa565b613dd533613da0858d61595e565b6001600160401b0316613db16126f0565b613dbb919061599d565b606554600160581b90046001600160a01b03169190614a31565b505050505050505050505050565b6000613ded6129d3565b905081600080613dfd848461595e565b6001600160401b031690505b836001600160401b0316836001600160401b031614613eaf576001600160401b03808416600090815260676020526040902060655460018201549192610100909104811691613e59911642615986565b1115613e94576001810154613e7e90600160401b90046001600160401b03168561595e565b613e91906001600160401b031684615b3e565b92505b60010154600160401b90046001600160401b03169250613e09565b6000613ebb8383615986565b905082811015613f35576000613ed18285615986565b9050600c8111613ee15780613ee4565b600c5b9050613ef181600361599d565b613efc90600a615de4565b606554613f15908390600160481b900461ffff16615de4565b607454613f22919061599d565b613f2c9190615ac1565b60745550613fc1565b6000613f418483615986565b9050600c8111613f515780613f54565b600c5b90506000613f6382600361599d565b613f6e90600a615de4565b606554613f87908490600160481b900461ffff16615de4565b607454613f94919061599d565b613f9e9190615ac1565b905080607454607454613fb1919061599d565b613fbb9190615ac1565b60745550505b505050505050565b6001600160401b03811615801590613ff657506072546001600160401b03600160401b9091048116908216115b801561401157506072546001600160401b0390811690821611155b6140835760405162461bcd60e51b815260206004820152603f60248201527f506f6c79676f6e5a6b45564d3a3a5f636f6e736f6c696461746550656e64696e60448201527f6753746174653a2070656e64696e6753746174654e756d20696e76616c69640060648201526084016109fa565b6001600160401b038181166000818152607160209081526040808320805460698054600160401b928390049098166001600160401b0319909816881790556002820154878652606d90945293829020929092556072805467ffffffffffffffff60401b19169390940292909217909255606c54600183015491516333d6247d60e01b815260048101929092529192916001600160a01b0316906333d6247d90602401600060405180830381600087803b15801561413f57600080fd5b505af1158015614153573d6000803e3d6000fd5b50505050826001600160401b0316816001600160401b03167f328d3c6c0fd6f1be0515e422f2d87e59f25922cbc2233568515a0c4bc3f8510e84600201546040516141a091815260200190565b60405180910390a3505050565b600054610100900460ff166142185760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109fa565b6123b7335b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b607060009054906101000a90046001600160a01b03166001600160a01b0316632072f6c56040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156142bf57600080fd5b505af11580156142d3573d6000803e3d6000fd5b505050506123b7614a61565b60006001600160401b038a161561444f576072546001600160401b03908116908b1611156143975760405162461bcd60e51b81526020600482015260656024820152600080516020615e5183398151915260448201527f696e6753746174653a2070656e64696e6753746174654e756d206d757374206260648201527f65206c657373206f7220657175616c207468616e206c61737450656e64696e67608482015264537461746560d81b60a482015260c4016109fa565b506001600160401b03808a1660009081526071602052604090206002810154815490928a8116600160401b90920416146144495760405162461bcd60e51b81526020600482015260596024820152600080516020615e5183398151915260448201527f696e6753746174653a20696e69744e756d4261746368206d757374206d6174636064820152780d040e8d0ca40e0cadcc8d2dcce40e6e8c2e8ca40c4c2e8c6d603b1b608482015260a4016109fa565b50614588565b506001600160401b0387166000908152606d6020526040902054806144e35760405162461bcd60e51b81526020600482015260506024820152600080516020615e5183398151915260448201527f696e6753746174653a20696e69744e756d426174636820737461746520726f6f60648201526f1d08191bd95cc81b9bdd08195e1a5cdd60821b608482015260a4016109fa565b6069546001600160401b0390811690891611156145885760405162461bcd60e51b81526020600482015260636024820152600080516020615e5183398151915260448201527f696e6753746174653a20696e69744e756d4261746368206d757374206265206c60648201527f657373206f7220657175616c207468616e206c617374566572696669656442616084820152620e8c6d60eb1b60a482015260c4016109fa565b6072546001600160401b03908116908a16118015906145b85750896001600160401b0316896001600160401b0316115b80156145d957506072546001600160401b03600160401b9091048116908a16115b61464a5760405162461bcd60e51b81526020600482015260486024820152600080516020615e5183398151915260448201527f696e6753746174653a2066696e616c50656e64696e6753746174654e756d20696064820152671b98dbdc9c9958dd60c21b608482015260a4016109fa565b6001600160401b03898116600090815260716020526040902054600160401b90048116908816146147035760405162461bcd60e51b81526020600482015260636024820152600080516020615e5183398151915260448201527f696e6753746174653a2066696e616c4e65774261746368206d7573742062652060648201527f657175616c207468616e2063757272656e744c617374566572696669656442616084820152620e8c6d60eb1b60a482015260c4016109fa565b6000614712898989858a610f74565b90506000600080516020615e918339815191526002836040516147359190615722565b602060405180830381855afa158015614752573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190614775919061573e565b61477f919061576d565b606b546040805160208101825283815290516343753b4d60e01b81529293506001600160a01b03909116916343753b4d916147c3918a918a918a9190600401615c69565b602060405180830381865afa1580156147e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148049190615ce3565b61485e5760405162461bcd60e51b81526020600482015260376024820152600080516020615e5183398151915260448201527634b733a9ba30ba329d1024b73b30b634b210383937b7b360491b60648201526084016109fa565b6001600160401b038b16600090815260716020526040902060020154879003613dd55760405162461bcd60e51b815260206004820152605b6024820152600080516020615e5183398151915260448201527f696e6753746174653a2053746f72656420726f6f74206d75737420626520646960648201527f66666572656e74207468616e206e657720737461746520726f6f740000000000608482015260a4016109fa565b60655460ff166149255760405162461bcd60e51b81526004016109fa90615b56565b6065805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b60006149af826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614abc9092919063ffffffff16565b805190915015614a2c57808060200190518101906149cd9190615ce3565b614a2c5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109fa565b505050565b6040516001600160a01b038316602482015260448101829052614a2c90849063a9059cbb60e01b9060640161381b565b60655460ff1615614a845760405162461bcd60e51b81526004016109fa9061583f565b6065805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b6060614acb8484600085614ad3565b949350505050565b606082471015614b345760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109fa565b600080866001600160a01b03168587604051614b509190615722565b60006040518083038185875af1925050503d8060008114614b8d576040519150601f19603f3d011682016040523d82523d6000602084013e614b92565b606091505b5091509150614ba387838387614bae565b979650505050505050565b60608315614c1d578251600003614c16576001600160a01b0385163b614c165760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109fa565b5081614acb565b614acb8383815115614c325781518083602001fd5b8060405162461bcd60e51b81526004016109fa9190614d15565b80356001600160401b0381168114614c6357600080fd5b919050565b600080600080600060a08688031215614c8057600080fd5b614c8986614c4c565b9450614c9760208701614c4c565b9350614ca560408701614c4c565b94979396509394606081013594506080013592915050565b60005b83811015614cd8578181015183820152602001614cc0565b8381111561355b5750506000910152565b60008151808452614d01816020860160208601614cbd565b601f01601f19169290920160200192915050565b602081526000614d286020830184614ce9565b9392505050565b8060408101831015614d4057600080fd5b92915050565b8060808101831015614d4057600080fd5b6000806000806000806000806101a0898b031215614d7457600080fd5b614d7d89614c4c565b9750614d8b60208a01614c4c565b9650614d9960408a01614c4c565b95506060890135945060808901359350614db68a60a08b01614d2f565b9250614dc58a60e08b01614d46565b9150614dd58a6101608b01614d2f565b90509295985092959890939650565b600060208284031215614df657600080fd5b813561ffff81168114614d2857600080fd5b600080600080600060a08688031215614e2057600080fd5b614e2986614c4c565b9450614e3760208701614c4c565b94979496505050506040830135926060810135926080909101359150565b6001600160a01b0391909116815260200190565b600060208284031215614e7b57600080fd5b614d2882614c4c565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614ebc57614ebc614e84565b60405290565b604051606081016001600160401b0381118282101715614ebc57614ebc614e84565b604051601f8201601f191681016001600160401b0381118282101715614f0c57614f0c614e84565b604052919050565b60006001600160401b03821115614f2d57614f2d614e84565b5060051b60200190565b600082601f830112614f4857600080fd5b81356001600160401b03811115614f6157614f61614e84565b614f74601f8201601f1916602001614ee4565b818152846020838601011115614f8957600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215614fb957600080fd5b82356001600160401b0380821115614fd057600080fd5b818501915085601f830112614fe457600080fd5b8135614ff7614ff282614f14565b614ee4565b81815260059190911b8301840190848101908883111561501657600080fd5b8585015b838110156150af578035858111156150325760008081fd5b86016080818c03601f190181131561504a5760008081fd5b615052614e9a565b89830135888111156150645760008081fd5b6150728e8c83870101614f37565b8252506040808401358b830152606061508c818601614c4c565b8284015261509b848601614c4c565b90830152508552505091860191860161501a565b5098975050505050505050565b6001600160a01b0381168114611eda57600080fd5b6000602082840312156150e357600080fd5b8135614d28816150bc565b600080600080600060a0868803121561510657600080fd5b8535945060208601356001600160401b0381111561512357600080fd5b61512f88828901614f37565b9450506040860135925061514560608701614c4c565b91506080860135615155816150bc565b809150509295509295909350565b600080600080600080600080888a036101c081121561518157600080fd5b893561518c816150bc565b985060208a013561519c816150bc565b975060408a01356151ac816150bc565b965060608a01356151bc816150bc565b955060e0607f19820112156151d057600080fd5b5060808901935061016089013592506101808901356001600160401b03808211156151fa57600080fd5b6152068c838d01614f37565b93506101a08b013591508082111561521d57600080fd5b5061522a8b828c01614f37565b9150509295985092959890939650565b60008060008060008060008060006101c08a8c03121561525957600080fd5b6152628a614c4c565b985061527060208b01614c4c565b975061527e60408b01614c4c565b965061528c60608b01614c4c565b955060808a0135945060a08a013593506152a98b60c08c01614d2f565b92506152b98b6101008c01614d46565b91506152c98b6101808c01614d2f565b90509295985092959850929598565b6000602082840312156152ea57600080fd5b5035919050565b8015158114611eda57600080fd5b60006020828403121561531157600080fd5b8135614d28816152f1565b60006020828403121561532e57600080fd5b81356001600160401b0381111561534457600080fd5b614acb84828501614f37565b6000602080838503121561536357600080fd5b82356001600160401b038082111561537a57600080fd5b818501915085601f83011261538e57600080fd5b813561539c614ff282614f14565b81815260059190911b830184019084810190888311156153bb57600080fd5b8585015b838110156150af578035858111156153d75760008081fd5b86016060818c03601f19018113156153ef5760008081fd5b6153f7614ec2565b89830135888111156154095760008081fd5b6154178e8c83870101614f37565b8252506040808401358b83015261542f838501614c4c565b90820152855250509186019186016153bf565b6000806000806080858703121561545857600080fd5b61546185614c4c565b93506020850135925061547660408601614c4c565b915061548460608601614c4c565b905092959194509250565b600080604083850312156154a257600080fd5b82356001600160401b038111156154b857600080fd5b6154c485828601614f37565b95602094909401359450505050565b600080604083850312156154e657600080fd5b823591506154f660208401614c4c565b90509250929050565b60208082526058908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2070656e60408201527f64696e6753746174654e756d206d757374206265206c657373206f7220657175606082015277616c207468616e206c61737450656e64696e67537461746560401b608082015260a00190565b6020808252604c90820152600080516020615df183398151915260408201527f744e756d4261746368206d757374206d61746368207468652070656e64696e6760608201526b040e6e8c2e8ca40c4c2e8c6d60a31b608082015260a00190565b6020808252604390820152600080516020615df183398151915260408201527f744e756d426174636820737461746520726f6f7420646f6573206e6f742065786060820152621a5cdd60ea1b608082015260a00190565b6020808252605d90820152600080516020615df183398151915260408201527f744e756d4261746368206d757374206265206c657373206f7220657175616c2060608201527f7468616e2063757272656e744c61737456657269666965644261746368000000608082015260a00190565b60208082526057908201527f506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a2066696e60408201527f616c4e65774261746368206d75737420626520626967676572207468616e20636060820152760eae4e4cadce898c2e6e8accae4d2ccd2cac884c2e8c6d604b1b608082015260a00190565b60008251615734818460208701614cbd565b9190910192915050565b60006020828403121561575057600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b60008261577c5761577c615757565b500690565b600181811c9082168061579557607f821691505b6020821081036157b557634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c7941646d696e3a204f6e6c7920616460408201526236b4b760e91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115615836576158366157fe565b01949350505050565b60208082526042908201527f456d657267656e63794d616e616765723a3a69664e6f74456d657267656e637960408201527f53746174653a206f6e6c79206966206e6f7420656d657267656e637920737461606082015261746560f01b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b038083168181036158d9576158d96157fe565b6001019392505050565b928352602083019190915260c01b6001600160c01b031916604082015260480190565b9485526020850193909352604084019190915260c01b6001600160c01b0319166060808401919091521b6001600160601b0319166068820152607c0190565b600060018201615957576159576157fe565b5060010190565b60006001600160401b038381169083168181101561597e5761597e6157fe565b039392505050565b600082821015615998576159986157fe565b500390565b60008160001904831182151516156159b7576159b76157fe565b500290565b601f821115614a2c57600081815260208120601f850160051c810160208610156159e35750805b601f850160051c820191505b81811015613fc1578281556001016159ef565b81516001600160401b03811115615a1b57615a1b614e84565b615a2f81615a298454615781565b846159bc565b602080601f831160018114615a645760008415615a4c5750858301515b600019600386901b1c1916600185901b178555613fc1565b600085815260208120601f198616915b82811015615a9357888601518255948401946001909101908401615a74565b5085821015615ab15787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082615ad057615ad0615757565b500490565b60208082526043908201527f506f6c79676f6e5a6b45564d3a3a6973466f7263654261746368416c6c6f776560408201527f643a204f6e6c7920696620666f72636520626174636820697320617661696c61606082015262626c6560e81b608082015260a00190565b60008219821115615b5157615b516157fe565b500190565b6020808252603b908201527f456d657267656e63794d616e616765723a3a6966456d657267656e637953746160408201527f74653a206f6e6c7920696620656d657267656e63792073746174650000000000606082015260800190565b6020808252603c908201527f506f6c79676f6e5a6b45564d3a3a6f6e6c79547275737465644167677265676160408201527f746f723a204f6e6c7920747275737465642061676772656761746f7200000000606082015260800190565b8381526001600160a01b0383166020820152606060408201819052600090615c3a90830184614ce9565b95945050505050565b60006001600160401b0380841680615c5d57615c5d615757565b92169190910492915050565b61012081016040808784376000838201818152879190815b6002811015615ca157848483379084018281529284019290600101615c81565b5050828760c0870137610100850181815286935091505b6001811015615cd7578251825260209283019290910190600101615cb8565b50505095945050505050565b600060208284031215615cf557600080fd5b8151614d28816152f1565b600181815b80851115615d3b578160001904821115615d2157615d216157fe565b80851615615d2e57918102915b93841c9390800290615d05565b509250929050565b600082615d5257506001614d40565b81615d5f57506000614d40565b8160018114615d755760028114615d7f57615d9b565b6001915050614d40565b60ff841115615d9057615d906157fe565b50506001821b614d40565b5060208310610133831016604e8410600b8410161715615dbe575081810a614d40565b615dc88383615d00565b8060001904821115615ddc57615ddc6157fe565b029392505050565b6000614d288383615d4356fe506f6c79676f6e5a6b45564d3a3a766572696679426174636865733a20696e69506f6c79676f6e5a6b45564d3a3a6163746976617465456d657267656e637953506f6c79676f6e5a6b45564d3a3a5f766572696679426174636865733a20696e506f6c79676f6e5a6b45564d3a3a5f70726f766544697374696e637450656e64506f6c79676f6e5a6b45564d3a3a73657175656e6365466f726365426174636830644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001506f6c79676f6e5a6b45564d3a3a73657175656e6365426174636865733a2046a2646970667358221220167a8f9be9686096974434bdb06f09cd7d4921d903936f91eb32d732ac4f1e6564736f6c634300080f0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/PolygonZkEVM.sol b/contracts/PolygonZkEVM.sol index 3522331fd..08cabc14c 100644 --- a/contracts/PolygonZkEVM.sol +++ b/contracts/PolygonZkEVM.sol @@ -767,9 +767,9 @@ contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { // Try to consolidate it, and if not, consolidate the nextPendingState if (isPendingStateConsolidable(middlePendingState)) { - consolidatePendingState(middlePendingState); + _consolidatePendingState(middlePendingState); } else { - consolidatePendingState(nextPendingState); + _consolidatePendingState(nextPendingState); } } } @@ -781,6 +781,22 @@ contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { * @param pendingStateNum Pending state to consolidate */ function consolidatePendingState(uint64 pendingStateNum) public { + // Check if pending state can be consolidated + // If trusted aggregator is the sender, do not check the timeout + if (msg.sender != trustedAggregator) { + require( + isPendingStateConsolidable(pendingStateNum), + "PolygonZkEVM::consolidatePendingState: Pending state is not ready to be consolidated" + ); + } + _consolidatePendingState(pendingStateNum); + } + + /** + * @notice Internal function to consolidate any pending state that has already exceed the pendingStateTimeout + * @param pendingStateNum Pending state to consolidate + */ + function _consolidatePendingState(uint64 pendingStateNum) internal { // Check if pendingStateNum is in correct range // - not 0 // - not consolidated @@ -789,18 +805,9 @@ contract PolygonZkEVM is Initializable, OwnableUpgradeable, EmergencyManager { pendingStateNum != 0 && pendingStateNum > lastPendingStateConsolidated && pendingStateNum <= lastPendingState, - "PolygonZkEVM::consolidatePendingState: pendingStateNum must invalid" + "PolygonZkEVM::_consolidatePendingState: pendingStateNum invalid" ); - // Check if pending state can be consolidated - // If trusted aggregator is the sender, do not check the timeout - if (msg.sender != trustedAggregator) { - require( - isPendingStateConsolidable(pendingStateNum), - "PolygonZkEVM::consolidatePendingState: Pending state is not ready to be consolidated" - ); - } - PendingState storage currentPendingState = pendingStateTransitions[ pendingStateNum ]; diff --git a/contracts/PolygonZkEVMBridge.sol b/contracts/PolygonZkEVMBridge.sol index 684532a7a..a3e616417 100644 --- a/contracts/PolygonZkEVMBridge.sol +++ b/contracts/PolygonZkEVMBridge.sol @@ -64,6 +64,7 @@ contract PolygonZkEVMBridge is /** * @param _networkID networkID * @param _globalExitRootManager global exit root manager address + * @param _polygonZkEVMaddress polygonZkEVM address */ function initialize( uint32 _networkID, diff --git a/docs/PolygonZkEVM.md b/docs/PolygonZkEVM.md index e1cd40317..5f2c2bd0b 100644 --- a/docs/PolygonZkEVM.md +++ b/docs/PolygonZkEVM.md @@ -148,6 +148,20 @@ Allows to consolidate any pending state that has already exceed the pendingState Can be called by the trusted aggregator, which can consolidate any state without the timeout restrictions +#### Parameters: +| Name | Type | Description | +| :--- | :--- | :------------------------------------------------------------------- | +|`pendingStateNum` | uint64 | Pending state to consolidate + +### _consolidatePendingState +```solidity + function _consolidatePendingState( + uint64 pendingStateNum + ) internal +``` +Internal function to consolidate any pending state that has already exceed the pendingStateTimeout + + #### Parameters: | Name | Type | Description | | :--- | :--- | :------------------------------------------------------------------- | diff --git a/docs/PolygonZkEVMBridge.md b/docs/PolygonZkEVMBridge.md index 75742eb0a..936fd620f 100644 --- a/docs/PolygonZkEVMBridge.md +++ b/docs/PolygonZkEVMBridge.md @@ -7,7 +7,8 @@ Contract responsible to manage the token interactions with other networks ```solidity function initialize( uint32 _networkID, - contract IPolygonZkEVMGlobalExitRoot _globalExitRootManager + contract IPolygonZkEVMGlobalExitRoot _globalExitRootManager, + address _polygonZkEVMaddress ) public ``` @@ -17,6 +18,7 @@ Contract responsible to manage the token interactions with other networks | :--- | :--- | :------------------------------------------------------------------- | |`_networkID` | uint32 | networkID |`_globalExitRootManager` | contract IPolygonZkEVMGlobalExitRoot | global exit root manager address +|`_polygonZkEVMaddress` | address | polygonZkEVM address ### bridgeAsset ```solidity diff --git a/test/contracts/proofOfEfficiency.test.js b/test/contracts/proofOfEfficiency.test.js index 297cccf22..9c626a53e 100644 --- a/test/contracts/proofOfEfficiency.test.js +++ b/test/contracts/proofOfEfficiency.test.js @@ -1072,12 +1072,12 @@ describe('Polygon ZK-EVM', () => { // Pending state can't be 0 await expect( polygonZkEVMContract.consolidatePendingState(0), - ).to.be.revertedWith('PolygonZkEVM::consolidatePendingState: pendingStateNum must invalid'); + ).to.be.revertedWith('PolygonZkEVM::_consolidatePendingState: pendingStateNum invalid'); // Pending state does not exist await expect( polygonZkEVMContract.consolidatePendingState(2), - ).to.be.revertedWith('PolygonZkEVM::consolidatePendingState: pendingStateNum must invalid'); + ).to.be.revertedWith('PolygonZkEVM::_consolidatePendingState: pendingStateNum invalid'); // Not ready to be consolidated await expect( @@ -1098,7 +1098,7 @@ describe('Polygon ZK-EVM', () => { // Pending state already consolidated await expect( polygonZkEVMContract.consolidatePendingState(1), - ).to.be.revertedWith('PolygonZkEVM::consolidatePendingState: pendingStateNum must invalid'); + ).to.be.revertedWith('PolygonZkEVM::_consolidatePendingState: pendingStateNum invalid'); // Fee es divided because is was fast verified const multiplierFee = await polygonZkEVMContract.multiplierBatchFee();